[
  {
    "path": ".circleci/config.yml",
    "content": "# Use the latest 2.1 version of CircleCI pipeline process engine. See: https://circleci.com/docs/2.0/configuration-reference\nversion: 2.1\n# Use a package of configuration called an orb.\norbs:\n  # Declare a dependency on the welcome-orb\n  welcome: circleci/welcome-orb@0.4.1\n# Orchestrate or schedule a set of jobs\nworkflows:\n  # Name the workflow \"welcome\"\n  welcome:\n    # Run the welcome/run job in its own container\n    jobs:\n      - welcome/run\n"
  },
  {
    "path": ".editorconfig",
    "content": "root = true\n\n[*]\ncharset = utf-8\nend_of_line = lf\ninsert_final_newline = true\nindent_style = space\nindent_size = 4\ntrim_trailing_whitespace = true\n\n[*.md]\ntrim_trailing_whitespace = false\n\n[*.yml]\nindent_size = 2\n"
  },
  {
    "path": ".gitattributes",
    "content": "* text=auto\n*.css linguist-vendored\n*.scss linguist-vendored\n*.js linguist-vendored\nCHANGELOG.md export-ignore\n"
  },
  {
    "path": ".github/FUNDING.yml",
    "content": "github: [andes2912]\ncustom: [\"https://saweria.co/andes2912\"]\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "content": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n**Describe the bug**\nA clear and concise description of what the bug is.\n\n**To Reproduce**\nSteps to reproduce the behavior:\n1. Go to '...'\n2. Click on '....'\n3. Scroll down to '....'\n4. See error\n\n**Expected behavior**\nA clear and concise description of what you expected to happen.\n\n**Screenshots**\nIf applicable, add screenshots to help explain your problem.\n\n**Desktop (please complete the following information):**\n - OS: [e.g. iOS]\n - Browser [e.g. chrome, safari]\n - Version [e.g. 22]\n\n**Smartphone (please complete the following information):**\n - Device: [e.g. iPhone6]\n - OS: [e.g. iOS8.1]\n - Browser [e.g. stock browser, safari]\n - Version [e.g. 22]\n\n**Additional context**\nAdd any other context about the problem here.\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.md",
    "content": "---\nname: Feature request\nabout: Suggest an idea for this project\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n**Is your feature request related to a problem? Please describe.**\nA clear and concise description of what the problem is. Ex. I'm always frustrated when [...]\n\n**Describe the solution you'd like**\nA clear and concise description of what you want to happen.\n\n**Describe alternatives you've considered**\nA clear and concise description of any alternative solutions or features you've considered.\n\n**Additional context**\nAdd any other context or screenshots about the feature request here.\n"
  },
  {
    "path": ".gitignore",
    "content": "/node_modules\n/public/hot\n/public/storage\n/storage/*.key\n/vendor\n.env\n.phpunit.result.cache\nHomestead.json\nHomestead.yaml\nnpm-debug.log\nyarn-error.log\n"
  },
  {
    "path": ".styleci.yml",
    "content": "php:\n  preset: laravel\n  disabled:\n    - unused_use\n  finder:\n    not-name:\n      - index.php\n      - server.php\njs:\n  finder:\n    not-name:\n      - webpack.mix.js\ncss: true\n"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "content": "# Citizen Code of Conduct\n\n## 1. Purpose\n\nA primary goal of Laundry is to be inclusive to the largest number of contributors, with the most varied and diverse backgrounds possible. As such, we are committed to providing a friendly, safe and welcoming environment for all, regardless of gender, sexual orientation, ability, ethnicity, socioeconomic status, and religion (or lack thereof).\n\nThis code of conduct outlines our expectations for all those who participate in our community, as well as the consequences for unacceptable behavior.\n\nWe invite all those who participate in Laundry to help us create safe and positive experiences for everyone.\n\n## 2. Open [Source/Culture/Tech] Citizenship\n\nA supplemental goal of this Code of Conduct is to increase open [source/culture/tech] citizenship by encouraging participants to recognize and strengthen the relationships between our actions and their effects on our community.\n\nCommunities mirror the societies in which they exist and positive action is essential to counteract the many forms of inequality and abuses of power that exist in society.\n\nIf you see someone who is making an extra effort to ensure our community is welcoming, friendly, and encourages all participants to contribute to the fullest extent, we want to know.\n\n## 3. Expected Behavior\n\nThe following behaviors are expected and requested of all community members:\n\n * Participate in an authentic and active way. In doing so, you contribute to the health and longevity of this community.\n * Exercise consideration and respect in your speech and actions.\n * Attempt collaboration before conflict.\n * Refrain from demeaning, discriminatory, or harassing behavior and speech.\n * Be mindful of your surroundings and of your fellow participants. Alert community leaders if you notice a dangerous situation, someone in distress, or violations of this Code of Conduct, even if they seem inconsequential.\n * Remember that community event venues may be shared with members of the public; please be respectful to all patrons of these locations.\n\n## 4. Unacceptable Behavior\n\nThe following behaviors are considered harassment and are unacceptable within our community:\n\n * Violence, threats of violence or violent language directed against another person.\n * Sexist, racist, homophobic, transphobic, ableist or otherwise discriminatory jokes and language.\n * Posting or displaying sexually explicit or violent material.\n * Posting or threatening to post other people's personally identifying information (\"doxing\").\n * Personal insults, particularly those related to gender, sexual orientation, race, religion, or disability.\n * Inappropriate photography or recording.\n * Inappropriate physical contact. You should have someone's consent before touching them.\n * Unwelcome sexual attention. This includes, sexualized comments or jokes; inappropriate touching, groping, and unwelcomed sexual advances.\n * Deliberate intimidation, stalking or following (online or in person).\n * Advocating for, or encouraging, any of the above behavior.\n * Sustained disruption of community events, including talks and presentations.\n\n## 5. Weapons Policy\n\nNo weapons will be allowed at Laundry events, community spaces, or in other spaces covered by the scope of this Code of Conduct. Weapons include but are not limited to guns, explosives (including fireworks), and large knives such as those used for hunting or display, as well as any other item used for the purpose of causing injury or harm to others. Anyone seen in possession of one of these items will be asked to leave immediately, and will only be allowed to return without the weapon. Community members are further expected to comply with all state and local laws on this matter.\n\n## 6. Consequences of Unacceptable Behavior\n\nUnacceptable behavior from any community member, including sponsors and those with decision-making authority, will not be tolerated.\n\nAnyone asked to stop unacceptable behavior is expected to comply immediately.\n\nIf a community member engages in unacceptable behavior, the community organizers may take any action they deem appropriate, up to and including a temporary ban or permanent expulsion from the community without warning (and without refund in the case of a paid event).\n\n## 7. Reporting Guidelines\n\nIf you are subject to or witness unacceptable behavior, or have any other concerns, please notify a community organizer as soon as possible. andridesmana29@outlook.com.\n\n\n\nAdditionally, community organizers are available to help community members engage with local law enforcement or to otherwise help those experiencing unacceptable behavior feel safe. In the context of in-person events, organizers will also provide escorts as desired by the person experiencing distress.\n\n## 8. Addressing Grievances\n\nIf you feel you have been falsely or unfairly accused of violating this Code of Conduct, you should notify  with a concise description of your grievance. Your grievance will be handled in accordance with our existing governing policies. \n\n\n\n## 9. Scope\n\nWe expect all community participants (contributors, paid or otherwise; sponsors; and other guests) to abide by this Code of Conduct in all community venues--online and in-person--as well as in all one-on-one communications pertaining to community business.\n\nThis code of conduct and its related procedures also applies to unacceptable behavior occurring outside the scope of community activities when such behavior has the potential to adversely affect the safety and well-being of community members.\n\n## 10. Contact info\n\nandridesmana29@outlook.com\n\n## 11. License and attribution\n\nThe Citizen Code of Conduct is distributed by [Stumptown Syndicate](http://stumptownsyndicate.org) under a [Creative Commons Attribution-ShareAlike license](http://creativecommons.org/licenses/by-sa/3.0/). \n\nPortions of text derived from the [Django Code of Conduct](https://www.djangoproject.com/conduct/) and the [Geek Feminism Anti-Harassment Policy](http://geekfeminism.wikia.com/wiki/Conference_anti-harassment/Policy).\n\n_Revision 2.3. Posted 6 March 2017._\n\n_Revision 2.2. Posted 4 February 2016._\n\n_Revision 2.1. Posted 23 June 2014._\n\n_Revision 2.0, adopted by the [Stumptown Syndicate](http://stumptownsyndicate.org) board on 10 January 2013. Posted 17 March 2013._\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2021 Andri Desmana \n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "app/Console/Commands/CreateAdminCommand.php",
    "content": "<?php\n\nnamespace App\\Console\\Commands;\n\nuse App\\Models\\User;\nuse App\\Models\\LaundrySetting;\nuse Illuminate\\Console\\Command;\nuse Illuminate\\Support\\Facades\\DB;\nuse Spatie\\Permission\\Models\\Role;\nuse App\\Models\\notifications_setting;\nuse Illuminate\\Support\\Facades\\Validator;\nuse Illuminate\\Validation\\Rules\\Password;\n\nclass CreateAdminCommand extends Command\n{\n    /**\n     * The name and signature of the console command.\n     *\n     * @var string\n     */\n    protected $signature = 'create:admin';\n\n    /**\n     * The console command description.\n     *\n     * @var string\n     */\n    protected $description = 'Buat Pengguna Dengan Role Administrator';\n\n    /**\n     * Execute the console command.\n     *\n     * @return int\n     */\n    public function handle()\n    {\n        $admin['name']                  = $this->ask(\"Nama untuk Administrator\");\n        $admin['email']                 = $this->ask(\"Email untuk Administrator\");\n        $admin['status']                = 'Active';\n        $admin['auth']                  = 'Admin';\n        $admin['password']              = $this->secret(\"Password untuk Administrator\");\n        $admin['password_confirmation'] = $this->secret(\"Konfirmasi Password untuk Administrator\");\n\n        $cekUser = User::where('email', $admin['email'])->where('auth','Admin')->first();\n        if($cekUser) {\n            $this->error(\"User Administrator sudah dibuat!\");\n            return -1;\n        }\n\n        $validator = Validator::make($admin,[\n            'name'      => ['required','string','max:255'],\n            'email'     => ['required','string','email','max:255','unique:'.User::class],\n            'password'  => ['required','confirmed',Password::defaults()]\n        ]);\n\n        if ($validator->fails()) {\n            foreach ($validator->errors()->all() as $error) {\n                $this->error($error);\n            }\n\n            return -1;\n        }\n        DB::transaction(function() use($admin, $cekUser){\n            $role = Role::firstOrNew(['name' => 'Admin']);\n            $role->name = 'Admin';\n            $role->save();\n\n            $admin['password']  = bcrypt($admin['password']);\n            $newAdmin = User::create($admin);\n            $newAdmin->assignRole('Admin');\n\n            $getIdAdmin = User::where('auth','Admin')->first();\n\n            $setting = new LaundrySetting;\n            $setting->user_id       = $getIdAdmin->id;\n            $setting->target_day    = 0;\n            $setting->target_month  = 0;\n            $setting->target_year   = 0;\n            $setting->save();\n\n            $notif = new notifications_setting;\n            $notif->user_id = $setting->user_id;\n            $notif->telegram_order_masuk    = 0;\n            $notif->telegram_order_selesai  = 0;\n            $notif->email                   = 0;\n            $notif->save();\n        });\n\n        $this->info(\"User \" .$admin['email']. \" Berhasil dibuat :)\");\n    }\n}\n"
  },
  {
    "path": "app/Console/Kernel.php",
    "content": "<?php\n\nnamespace App\\Console;\n\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        //\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    }\n\n    /**\n     * Register the commands for the application.\n     *\n     * @return void\n     */\n    protected function commands()\n    {\n        $this->load(__DIR__.'/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 Illuminate\\Foundation\\Exceptions\\Handler as ExceptionHandler;\nuse Throwable;\n\nclass Handler extends ExceptionHandler\n{\n    /**\n     * A list of the exception types that are not reported.\n     *\n     * @var array\n     */\n    protected $dontReport = [\n        //\n    ];\n\n    /**\n     * A list of the inputs that are never flashed for validation exceptions.\n     *\n     * @var array\n     */\n    protected $dontFlash = [\n        'password',\n        'password_confirmation',\n    ];\n\n    /**\n     * Report or log an exception.\n     *\n     * @param  \\Throwable  $exception\n     * @return void\n     *\n     * @throws \\Throwable\n     */\n    public function report(Throwable $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  \\Throwable  $exception\n     * @return \\Symfony\\Component\\HttpFoundation\\Response\n     *\n     * @throws \\Throwable\n     */\n    public function render($request, Throwable $exception)\n    {\n        return parent::render($request, $exception);\n    }\n}"
  },
  {
    "path": "app/Exports/LaporanExport.php",
    "content": "<?php\n\nnamespace App\\Exports;\n\nuse App\\Models\\transaksi;\nuse Illuminate\\Contracts\\View\\View;\nuse Illuminate\\Support\\Facades\\Auth;\nuse Maatwebsite\\Excel\\Concerns\\FromView;\n\nclass LaporanExport implements FromView\n{\n    /**\n    * @return \\Illuminate\\Support\\Collection\n    */\n    public function view(): View\n    {\n      $data = transaksi::where('user_id',Auth::id())->get();\n\n      return view(\n        'karyawan.laporan.excelExport',\n        [\n          'data'  => $data\n        ]\n      );\n    }\n}\n"
  },
  {
    "path": "app/Helpers/Model.php",
    "content": "<?php\nuse App\\Models\\{Notification, User,notifications_setting,transaksi};\nuse PhpParser\\Node\\Stmt\\Return_;\n\nclass Rupiah {\n    public static function getRupiah($value) {\n        $format = \"Rp \" . number_format($value,0,',','.');\n        return $format;\n    }\n}\n\n// Get Email Customer by id\nif (! function_exists('email_customer'))\n{\n    function email_customer($id=0)\n    {\n      $model = new User;\n      $data  = $model::where('id',$id)->first();\n      $email_customer = !empty($data) ? $data->email : 'Not Found';\n      return $email_customer;\n    }\n}\n\n// Get Nama Customer by id\nif (! function_exists('namaCustomer'))\n{\n    function namaCustomer($id=0)\n    {\n        $model = new User;\n        $data  = $model::where('id',$id)->first();\n        $name = !empty($data) ? $data->name : 'Not Found';\n        return $name;\n    }\n}\n\n// Setting Email Notifications\nif (! function_exists('setNotificationEmail'))\n{\n    function setNotificationEmail($id='')\n    {\n        $model = new notifications_setting;\n        $data  = $model::where('email',$id)->first();\n        $email = $data ? $data->email : 'Email Notification Aktif Tidak';\n        return $email;\n    }\n}\n\n// Setting Telegram Order Masuk Notifications\nif (! function_exists('setNotificationTelegramIn'))\n{\n    function setNotificationTelegramIn($id='')\n    {\n        $model = new notifications_setting;\n        $data  = $model::where('telegram_order_masuk',$id)->first();\n        $teleIn = $data ? $data->telegram_order_masuk : 'Telegram Notification Order Masuk Tidak Aktif';\n        return $teleIn;\n    }\n}\n\n// Setting Telegram Order Selesai Notifications\nif (! function_exists('setNotificationTelegramFinish'))\n{\n    function setNotificationTelegramFinish($id='')\n    {\n        $model = new notifications_setting;\n        $data  = $model::where('telegram_order_selesai',$id)->first();\n        $teleFininsh = $data ? $data->telegram_order_selesai : 'Telegram Notification Order Selesai Tidak Aktif';\n        return $teleFininsh;\n    }\n}\n\n// Get Telegram Channel untuk order masuk\nif (! function_exists('telegram_channel_masuk'))\n{\n    function telegram_channel_masuk()\n    {\n        $model = new notifications_setting;\n        $data  = $model::first();\n        $channel_masuk = $data ? $data->telegram_channel_masuk : NULL;\n        return $channel_masuk;\n    }\n}\n\n// Get Telegram Channel untuk order selesai\nif (! function_exists('telegram_channel_selesai'))\n{\n    function telegram_channel_selesai()\n    {\n        $model = new notifications_setting;\n        $data  = $model::first();\n        $channel_selesai = $data ? $data->telegram_channel_selesai : NULL;\n        return $channel_selesai;\n    }\n}\n\n// Setting WhatsApp Notification order selesai\nif (! function_exists('setNotificationWhatsappOrderSelesai'))\n{\n    function setNotificationWhatsappOrderSelesai($id='')\n    {\n        $model = new notifications_setting;\n        $data  = $model::where('wa_order_selesai',$id)->first();\n        $whatsappFinish = $data ? $data->wa_order_selesai : 'WhatsApp Notification Order Selesai Tidak Aktif';\n        return $whatsappFinish;\n    }\n}\n\n// Get WhatsApp Notifikasi order selesai\nif (! function_exists('wa_order_selesai'))\n{\n    function wa_order_selesai()\n    {\n        $model = new notifications_setting;\n        $data  = $model::first();\n        $channel_selesai = $data ? $data->wa_order_selesai : NULL;\n        return $channel_selesai;\n    }\n}\n\n// Get Token WhatsApp\nif (! function_exists('getTokenWhatsapp'))\n{\n    function getTokenWhatsapp()\n    {\n        $model = new notifications_setting;\n        $data  = $model::first();\n        $channel_selesai = $data ? $data->wa_token : NULL;\n        return $channel_selesai;\n    }\n}\n\n// Notifikasi Whatsapp\nif (! function_exists('notificationWhatsapp'))\n{\n    function notificationWhatsapp($token,$waphone,$pesan)\n    {\n        $apiURL = 'https://api.kirimwa.id/v1/messages';\n        $client = new \\GuzzleHttp\\Client();\n        $response = $client->request('POST', $apiURL, [\n          'headers'=> [\n            'Authorization' => 'Bearer ' . $token,\n            'Content-Type'  => 'application/json'\n          ],\n          'body' => json_encode([\n            'message' => $pesan,\n            'phone_number' => $waphone,\n            'message_type' => 'text',\n            'device_id' => 'iphone' // isi dengan device_id kalian\n          ]),\n        ]);\n\n        $statusCode = $response->getStatusCode();\n        $responseBody = json_decode($response->getBody(), true);\n    }\n}\n\n// Get Notifikasi\nfunction getNotifikasi($user_id)\n{\n    $model = new Notification;\n    $data = $model::where('user_id',$user_id)->where('is_read',0)->orderBy('created_at','desc')->get();\n    return $data;\n}\n\n// Send Notif\nfunction sendNotification($id=null, $user_id=null, $kategori=null, $title=null, $body=null)\n{\n    $notif = new Notification;\n    $notif->transaksi_id    = $id ?? null;\n    $notif->user_id         = $user_id ?? null;\n    $notif->kategori        = $kategori;\n    $notif->title           = $title;\n    $notif->body            = $body;\n    $notif->save();\n\n    return $notif;\n}\n"
  },
  {
    "path": "app/Http/Controllers/Admin/AdminController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Http\\Request;\nuse App\\Models\\User;\nuse Auth;\nuse Rupiah;\nuse DB;\nuse Session;\nuse Spatie\\Permission\\Models\\Role;\nuse Carbon\\carbon;\n\nclass AdminController extends Controller\n{\n    // Halaman admin\n    public function adm()\n    {\n      $adm = User::where('auth','Admin')->get();\n      return view('modul_admin.pengguna.admin', compact('adm'));\n    }\n\n    // Profile\n    public function profile()\n    {\n      $profile = User::where('id',Auth::id())->first();\n      return view('modul_admin.setting.profile', compact('profile'));\n    }\n\n    // Proses edit profile\n    public function edit_profile(Request $request)\n    {\n      $profile = User::find($request->id_profile);\n      $profile->update([\n        'name'  => $request->name,\n        'email'  => $request->email\n      ]);\n\n      Session::flash('success','Update Profile Berhasil');\n      return $profile;\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Admin/CustomerController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Http\\Request;\nuse App\\Models\\User;\nclass CustomerController extends Controller\n{\n\n    public function index()\n    {\n      $customer = User::where('auth','Customer')->get();\n      return view('modul_admin.customer.index', compact('customer'));\n    }\n\n    public function show($id)\n    {\n      $customer = User::with('transaksiCustomer')->where('id',$id)->first();\n      return view('modul_admin.customer.infoCustomer', compact('customer'));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Admin/DokumentasiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Http\\Request;\n\nclass DokumentasiController extends Controller\n{\n  // Dokumentasi\n  public function index()\n  {\n    return view('modul_admin.doc.index');\n  }\n\n  // Tentang Aplikasi Laundry\n  public function tentang()\n  {\n    return view('modul_admin.doc.tentang');\n  }\n\n   // Instalasi & Penggunaan\n  public function instalasi()\n  {\n    return view('modul_admin.doc.penggunaan');\n  }\n\n  // Versi & Pembaruan\n  public function versi()\n  {\n    return view('modul_admin.doc.version');\n  }\n\n  // Notifikasi\n  public function notifikasi()\n  {\n    return view('modul_admin.doc.notifikasi');\n  }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Admin/FinanceController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Http\\Request;\nuse App\\Models\\{transaksi,customer,LaundrySetting,User,harga,DataBank};\nuse App\\Http\\Requests\\HargaRequest;\nuse DB;\nuse Auth;\nuse Session;\nuse Carbon\\carbon;\n\nclass FinanceController extends Controller\n{\n  // Finance\n  public function index()\n  {\n    $chartMonthSalary = DB::table('transaksis')\n    ->select('bulan', DB::raw('sum(harga_akhir) AS jml'))\n    ->whereYear('created_at','=',date(\"Y\", strtotime(now())))\n    ->whereMonth('created_at','=',date(\"m\", strtotime(now())))\n    ->groupBy('bulan')\n    ->get();\n\n    $bulans = '';\n    $batas =  12;\n    $chartMonth = '';\n    for($_i=1; $_i <= $batas; $_i++){\n        $bulans = $bulans . (string)$_i . ',';\n        $_check = false;\n        foreach($chartMonthSalary as $_data){\n            if((int)@$_data->bulan === $_i){\n                $chartMonth = $chartMonth . (string)$_data->jml . ',';\n                $_check = true;\n            }\n        }\n        if(!$_check){\n            $chartMonth = $chartMonth . '0,';\n        }\n    }\n\n    $incomeAll = transaksi::where('status_payment','Success')->sum('harga_akhir');\n    $incomeY = transaksi::where('status_payment','Success')->where('tahun',date('Y'))\n    ->sum('harga_akhir');\n\n    $incomeM = transaksi::where('status_payment','Success')->where('tahun',date('Y'))\n    ->where('bulan', ltrim(date('m'),'0'))->sum('harga_akhir');\n\n    $incomeYOld = transaksi::where('status_payment','Success')->where('tahun',date(\"Y\",strtotime(\"-1 year\")))\n    ->sum('harga_akhir');\n\n    $incomeD = transaksi::where('status_payment','Success')->where('tahun',date('Y'))\n    ->where('bulan', ltrim(date('m'),'0'))->where('tgl',ltrim(date('d'),'0'))->sum('harga_akhir');\n\n    $incomeDOld = transaksi::where('status_payment','Success')->where('tahun',date('Y'))\n    ->where('bulan', ltrim(date('m'),'0'))->where('tgl',ltrim(date(\"d\",strtotime(\"-1 day\")),'0'))->sum('harga_akhir');\n\n    $kgDay = transaksi::where('tahun',date('Y'))->where('bulan', ltrim(date('m'),'0'))->where('tgl',ltrim(date('d'),'0'))->sum('kg');\n    $kgMonth = transaksi::where('tahun',date('Y'))->where('bulan', ltrim(date('m'),'0'))->sum('kg');\n    $kgYear = transaksi::where('tahun',date('Y'))->sum('kg');\n\n    $getCabang = User::whereHas('transaksi', function($a) {\n      $a->where('tahun',date('Y'))\n      ->where('bulan', ltrim(date('m'),'0'));\n    })\n    ->get();\n\n    $target = LaundrySetting::first();\n\n    return view('modul_admin.finance.index', \\compact(\n      'chartMonth','incomeY','incomeM','incomeYOld','incomeD','incomeDOld',\n      'target','incomeAll','getCabang','kgDay','kgMonth','kgYear'\n    ));\n  }\n\n\n   // Tambah dan Data Harga\n    public function dataharga()\n    {\n      // Ambil data harga\n      $harga = harga::with('harga_user')->orderBy('id','DESC')->get();\n      // Cek Apakah sudah ada karyawan atau belum\n      $karyawan = User::where('auth','Karyawan')->first();\n      // Ambil list cabang\n      $getcabang = User::where('auth','Karyawan')->where('status','Active')->get();\n\n      // Get Data Bank\n      $getBank = DataBank::where('user_id',Auth::id())->count();\n\n      return view('modul_admin.laundri.harga', compact('harga','karyawan','getcabang','getBank'));\n    }\n\n    // Proses Simpan Harga\n    public function hargastore(HargaRequest $request)\n    {\n      $addharga = new harga();\n      $addharga->user_id = $request->user_id;\n      $addharga->jenis = $request->jenis;\n      $addharga->kg = 1000; // satuan gram\n      $addharga->harga = preg_replace('/[^A-Za-z0-9\\-]/', '', $request->harga); // Remove special caracter\n      $addharga->hari = $request->hari;\n      $addharga->status = 1; //aktif\n      $addharga->save();\n\n      Session::flash('success','Tambah Data Harga Berhasil');\n      return redirect('data-harga');\n    }\n\n    // Proses edit harga\n    public function hargaedit(Request $request)\n    {\n      $editharga = harga::find($request->id_harga);\n      $editharga->update([\n          'jenis' => $request->jenis,\n          'kg'    => $request->kg,\n          'harga' => $request->harga,\n          'hari' => $request->hari,\n          'status' => $request->status,\n      ]);\n      Session::flash('success','Edit Data Harga Berhasil');\n      return $editharga;\n\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Admin/KaryawanController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse App\\Http\\Requests\\AddKaryawanRequest;\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Http\\Request;\nuse Spatie\\Permission\\Models\\Role;\nuse Illuminate\\Support\\Facades\\Hash;\nuse App\\Models\\User;\nuse Session;\n\nclass KaryawanController extends Controller\n{\n    /**\n     * Display a listing of the resource.\n     *\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function index()\n    {\n      $kry = User::where('auth','Karyawan')->get();\n      return view('modul_admin.pengguna.kry', compact('kry'));\n    }\n\n    /**\n     * Show the form for creating a new resource.\n     *\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function create()\n    {\n      return view('modul_admin.pengguna.addkry');\n    }\n\n    /**\n     * Store a newly created resource in storage.\n     *\n     * @param  \\Illuminate\\Http\\Request  $request\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function store(AddKaryawanRequest $request)\n    {\n        $phone_number = preg_replace('/^0/','62',$request->no_telp);\n        $adduser = New User();\n        $adduser->name          = $request->name;\n        $adduser->email         = $request->email;\n        $adduser->nama_cabang   = $request->nama_cabang;\n        $adduser->alamat        = $request->alamat;\n        $adduser->alamat_cabang = $request->alamat_cabang;\n        $adduser->no_telp       = $phone_number;\n        $adduser->status        = 'Active';\n        $adduser->auth          = 'Karyawan';\n        $adduser->password      = Hash::make($request->password);\n        $adduser->save();\n\n      $adduser->assignRole($adduser->auth);\n\n      Session::flash('success','Karyawan Berhasil Dibuat.');\n      return redirect('karyawan');\n    }\n\n    // Update Status Karyawan\n    public function updateKaryawan(Request $request)\n    {\n      $karyawan = User::find($request->id);\n      $karyawan->update([\n        'status'  => $karyawan->status == 'Active' ? 'Not Active' : 'Active'\n      ]);\n\n      Session::flash('success','Status Karyawan Berhasil Diupdate.');\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Admin/SettingsController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Http\\Request;\nuse App\\Models\\{PageSettings,User,LaundrySetting,DataBank,notifications_setting};\nuse Auth;\nuse Session;\n\nclass SettingsController extends Controller\n{\n\n  // Settings\n  public function setting()\n  {\n    $setpage    = PageSettings::first();\n    $settarget  = LaundrySetting::first();\n    $databank   = DataBank::where('user_id',Auth::id())->get();\n    $setnotif   = notifications_setting::first();\n\n    return view('modul_admin.setting.index', compact('setpage','settarget','databank','setnotif'));\n  }\n\n  // Proses setting page\n  public function proses_set_page(Request $request, $id)\n  {\n    $request->validate([\n      'judul'   => 'required|max:15'\n    ]);\n\n    $img_hero = $request->file('img_hero');\n    if ($img_hero) {\n        $img_heros = time().\"_\".$img_hero->getClientoriginalName();\n        // Folder Penyimpanan\n        $tujuan_upload = 'frontend/img/logo';\n        $img_hero->move($tujuan_upload, $img_heros);\n    }\n\n    $setpage = PageSettings::find($id);\n    $setpage->judul     = $request->judul;\n    $setpage->img_hero  = $img_hero;\n    $setpage->tentang   = $request->tentang;\n    $setpage->facebook  = $request->facebook;\n    $setpage->instagram = $request->instagram;\n    $setpage->twitter   = $request->twitter;\n    $setpage->whatsapp  = $request->whatsapp;\n    $setpage->no_telp   = $request->no_telp;\n    $setpage->email     = $request->email;\n    $setpage->save();\n\n    if ($setpage) {\n      Session::flash('success','Setting Berhasil Disimpan !');\n      return back();\n    }\n  }\n\n  // Check Setting Theme\n  public function set_theme(Request $request)\n  {\n    $id = Auth::id();\n    $user = User::all();\n\n    $set_theme = User::findOrFail($id);\n    if ($request->theme == NULL) {\n      $set_theme->theme = '0';\n    } else {\n      $set_theme->theme = $request->theme;\n    }\n\n    $set_theme->save();\n\n    Session::flash('success','Setting Berhasil Disimpan !');\n    return back();\n  }\n\n  // Setting Laundry Target\n  public function set_target_laundry(Request $request, $id)\n  {\n    $set_target = LaundrySetting::findOrFail($id);\n    $set_target->target_day = $request->target_day;\n    $set_target->target_month = $request->target_month;\n    $set_target->target_year = $request->target_year;\n    $set_target->save();\n\n    Session::flash('success','Target Berhasil Diupdate !');\n    return back();\n  }\n\n  // Simpan Bank\n  public function bank(Request $request)\n  {\n\n    $cek = DataBank::get()->count();\n    if ($cek >= 3) {\n      Session::flash('error','Maksimal bank hanya 3 !');\n      return back();\n    }\n\n    $request->validate([\n      'nama_bank'   => 'required|unique:data_banks',\n      'no_rekening' => 'required|unique:data_banks',\n      'no_rekening' => 'required',\n    ]);\n\n    DataBank::create([\n      'nama_bank'     => $request->nama_bank,\n      'no_rekening'   => $request->no_rekening,\n      'nama_pemilik'  => $request->nama_pemilik,\n      'user_id'       => Auth::id(),\n    ]);\n\n    Session::flash('success','Bank Berhasil Ditambah !');\n    return back();\n  }\n\n  // Notification\n  public function notif(Request $request,$id)\n  {\n    $notif = notifications_setting::findorFail($id);\n    $notif->telegram_order_masuk      = $request->telegram_order_masuk;\n    $notif->telegram_order_selesai    = $request->telegram_order_selesai;\n    $notif->email                     = $request->email;\n    $notif->telegram_channel_masuk    = $request->telegram_channel_masuk;\n    $notif->telegram_channel_selesai  = $request->telegram_channel_masuk;\n    $notif->wa_order_selesai          = $request->wa_order_selesai;\n    $notif->wa_token                  = $request->wa_token;\n    $notif->save();\n\n    Session::flash('success','Notifications Berhasil Diupdate !');\n    return back();\n  }\n\n}\n"
  },
  {
    "path": "app/Http/Controllers/Admin/TransaksiController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Admin;\n\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Http\\Request;\nuse App\\Models\\{transaksi,user};\nuse Rupiah;\n\nclass TransaksiController extends Controller\n{\n\n    public function index()\n    {\n      $transaksi = transaksi::with('price')\n      ->orderBy('created_at','desc')->get();\n\n      $filter = User::select('id','name')->where('auth','Karyawan')->get();\n\n      return view('modul_admin.transaksi.index', compact('transaksi','filter'));\n    }\n\n    // Filter Transaksi\n    public function filtertransaksi(Request $request)\n    {\n      if ($request->user_id != 'all') {\n        $transaksi = transaksi::with('price')\n        ->where('user_id', $request->user_id)\n        ->orderBy('created_at','desc')\n        ->get();\n      }elseif($request->user_id == 'all') {\n        $transaksi = transaksi::with('price')\n        ->orderBy('created_at','desc')\n        ->get();\n      }\n\n\n      $return = \"\";\n      $no=1;\n      foreach($transaksi as $item) {\n        $return .=\"<tr>\n          <td>\".$no.\"</td>\n          <td>\".$item->tgl_transaksi.\"</td>\n          <td>\".$item->customer.\"</td>\n          <td>\".$item->status_order.\"</td>\n          <td>\".$item->status_payment.\"</td>\n          <td>\".$item->price->jenis.\"</td>\";\n          $return .=\"\n          <input type='hidden' value='\".$item->kg * $item->harga.\"'>\n          <td>\".Rupiah::getRupiah($item->kg * $item->harga).\"</td>\";\n          $return .=\"<td><a href='invoice-customer/$item->invoice' class='btn btn-sm btn-success style='color:white'>Invoice</a></td>\";\n        $return .= \"</td>\n        </tr>\";\n        $no++;\n      }\n      return $return;\n    }\n\n    // Invoice\n    public function invoice( Request $request)\n    {\n      $invoice = transaksi::with('price')\n      ->where('invoice', $request->invoice)\n      ->orderBy('id','DESC')->get();\n\n      $dataInvoice = transaksi::with('customers','user')\n      ->where('invoice', $request->invoice)\n      ->first();\n\n      return view('modul_admin.transaksi.invoice', compact('invoice','dataInvoice'));\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;\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     * 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\\Http\\Controllers\\Controller;\nuse Illuminate\\Foundation\\Auth\\AuthenticatesUsers;\nuse Auth;\nuse Session;\nclass LoginController extends Controller\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;\n\n    /**\n     * Where to redirect users after login.\n     *\n     * @var string\n     */\n    protected $redirectTo = '/home';\n\n    /**\n     * Create a new controller instance.\n     *\n     * @return void\n     */\n    public function __construct()\n    {\n        $this->middleware('guest')->except('logout');\n    }\n\n    protected function authenticated()\n    {\n        if(Auth::User()->status == 'Not Active') {\n            Auth::logout();\n            Session::flash('error', \"Akun yang kamu gunakan sudah Tidak Aktif !\");\n            return redirect('login');\n        }\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Auth/RegisterController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Auth;\n\nuse App\\User;\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Support\\Facades\\Hash;\nuse Illuminate\\Support\\Facades\\Validator;\nuse Illuminate\\Foundation\\Auth\\RegistersUsers;\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 = '/home';\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     * 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            'name' => ['required', 'string', 'max:255'],\n            'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],\n            'password' => ['required', 'string', 'min:7', 'confirmed'],\n        ]);\n    }\n\n    /**\n     * Create a new user instance after a valid registration.\n     *\n     * @param  array  $data\n     * @return \\App\\User\n     */\n    protected function create(array $data)\n    {\n        return User::create([\n            'name' => $data['name'],\n            'email' => $data['email'],\n            'auth'  => $data['auth'],\n            'status' => $data['status'],\n            'password' => Hash::make($data['password']),\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 = '/home';\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/VerificationController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Foundation\\Auth\\VerifiesEmails;\n\nclass VerificationController extends Controller\n{\n    /*\n    |--------------------------------------------------------------------------\n    | Email Verification Controller\n    |--------------------------------------------------------------------------\n    |\n    | This controller is responsible for handling email verification for any\n    | user that recently registered with the application. Emails may also\n    | be re-sent if the user didn't receive the original email message.\n    |\n    */\n\n    use VerifiesEmails;\n\n    /**\n     * Where to redirect users after verification.\n     *\n     * @var string\n     */\n    protected $redirectTo = '/home';\n\n    /**\n     * Create a new controller instance.\n     *\n     * @return void\n     */\n    public function __construct()\n    {\n        $this->middleware('auth');\n        $this->middleware('signed')->only('verify');\n        $this->middleware('throttle:6,1')->only('verify', 'resend');\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/Customer/ProfileController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Customer;\n\nuse App\\Models\\User;\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Support\\Facades\\Auth;\nuse Illuminate\\Support\\Facades\\Hash;\nuse Illuminate\\Support\\Facades\\Session;\nuse App\\Http\\Requests\\UpdateProfilRequest;\n\nclass ProfileController extends Controller\n{\n    //index\n    public function index()\n    {\n      return view('customer.profile.index');\n    }\n\n    // Update Profile\n    public function updateProfile(UpdateProfilRequest $request,$id)\n    {\n      $foto = $request->file('foto');\n      if ($foto) {\n        $nama_foto = time().\"_\".$foto->getClientOriginalName();\n        // isi dengan nama folder tempat kemana file diupload\n        $tujuan_upload = 'public/images/foto_profile';\n        $foto->storeAs($tujuan_upload,$nama_foto);\n      }\n\n      if ($request->password) {\n        $password = Hash::make($request->password);\n      }\n      $profile = User::findOrFail($id);\n      $profile->name      = $request->name;\n      $profile->email     = $request->email;\n      $profile->alamat    = $request->alamat;\n      $profile->foto      = $nama_foto ?? Auth::user()->foto;\n      $profile->password  = $password ?? Auth::user()->password;\n      $profile->save();\n\n      Session::flash('success','Data profile berhasil diupdate !');\n      return back();\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Customer/SettingController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Customer;\n\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Http\\Request;\nuse App\\Models\\User;\nuse Session;\n\nclass SettingController extends Controller\n{\n    // Setting\n    public function index()\n    {\n      return view('customer.setting.index');\n    }\n\n    // Proses setting\n    public function settingUpdateCustomer(Request $request, $id)\n    {\n       $setting = User::findOrFail($id);\n        if ($request->theme == NULL) {\n          $setting->theme = '0';\n        } else {\n          $setting->theme = $request->theme;\n        }\n        $setting->save();\n\n        Session::flash('success','Setting Berhasil Diupdate !');\n        return back();\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/FrontController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse Illuminate\\Http\\Request;\nuse App\\Models\\{transaksi,PageSettings};\n\nclass FrontController extends Controller\n{\n\n  //Index\n  public function index()\n  {\n    $setpage = PageSettings::first();\n\n    return view('frontend.index', compact('setpage'));\n  }\n\n  //Search\n  public function search(Request $request)\n  {\n      $search = transaksi::where('invoice', $request->search_status);\n      if ($search->count() == 0) {\n          $return = 0;\n        }else{\n          $return = $search->first();\n        }\n        return $return;\n  }\n}\n"
  },
  {
    "path": "app/Http/Controllers/HomeController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\DB;\nuse Illuminate\\Support\\Facades\\Auth;\nuse App\\Models\\{Notification, transaksi,User};\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    /**\n     * Show the application dashboard.\n     *\n     * @return \\Illuminate\\Contracts\\Support\\Renderable\n     */\n    public function index()\n    {\n        if(Auth::check()){\n          if (Auth::user()->auth === \"Admin\") {\n              $masuk = transaksi::whereIN('status_order',['Process','Done','Delivery'])->count();\n              $selesai = transaksi::where('status_order','Done')->count();\n              $diambil = transaksi::where('status_order','Delivery')->count();\n              $customer = User::where('auth','Customer')->get();\n              $sudahbayar = transaksi::where('status_payment','Success')->count();\n              $belumbayar = transaksi::where('status_payment','Pending')->count();\n              $incomeY = transaksi::where('status_payment','Success')\n              ->where('tahun',date('Y'))->sum('harga_akhir');\n\n              $incomeM = transaksi::where('status_payment','Success')\n              ->where('tahun',date('Y'))->where('bulan', ltrim(date('m'),'0'))->sum('harga_akhir');\n\n              $incomeYOld = transaksi::where('status_payment','Success')\n              ->where('tahun',date(\"Y\",strtotime(\"-1 month\")))->sum('harga_akhir');\n\n              $incomeD = transaksi::where('status_payment','Success')\n              ->where('tahun',date('Y'))->where('bulan', ltrim(date('m'),'0'))->where('tgl',ltrim(date('d'),'0'))->sum('harga_akhir');\n\n              $incomeDOld = transaksi::where('status_payment','Success')->where('tahun',date('Y'))\n              ->where('bulan', ltrim(date('m'),'0'))->where('tgl',ltrim(date(\"d\",strtotime(\"-1 day\")),'0'))->sum('harga_akhir');\n\n              $data = DB::table(\"transaksis\")\n                  ->select(\"id\" ,DB::raw(\"(COUNT(*)) as customer\"))\n                  ->orderBy('created_at')\n                  ->groupBy(DB::raw(\"MONTH(created_at)\"))\n                  ->count();\n\n              // Statistik Harian\n              $hari = DB::table('transaksis')\n              ->  select('tgl', DB::raw('count(id) AS jml'))\n              ->  whereYear('created_at','=',date(\"Y\", strtotime(now())))\n              ->  whereMonth('created_at','=',date(\"m\", strtotime(now())))\n              ->  groupBy('tgl')\n              ->  get();\n\n              $tanggal = '';\n              $batas =  31;\n              $nilai = '';\n              for($_i=1; $_i <= $batas; $_i++){\n                  $tanggal = $tanggal . (string)$_i . ',';\n                  $_check = false;\n                  foreach($hari as $_data){\n                      if((int)@$_data->tgl === $_i){\n                          $nilai = $nilai . (string)$_data->jml . ',';\n                          $_check = true;\n                      }\n                  }\n                  if(!$_check){\n                      $nilai = $nilai . '0,';\n                  }\n              }\n\n              // Statistik Bulanan\n              $bln = DB::table('transaksis')\n              ->  select('bulan', DB::raw('count(id) AS jml'))\n              ->  whereYear('created_at','=',date(\"Y\", strtotime(now())))\n              ->  whereMonth('created_at','=',date(\"m\", strtotime(now())))\n              ->  groupBy('bulan')\n              ->  get();\n\n              $bulans = '';\n              $batas =  12;\n              $nilaiB = '';\n              for($_i=1; $_i <= $batas; $_i++){\n                  $bulans = $bulans . (string)$_i . ',';\n                  $_check = false;\n                  foreach($bln as $_data){\n                      if((int)@$_data->bulan === $_i){\n                          $nilaiB = $nilaiB . (string)$_data->jml . ',';\n                          $_check = true;\n                      }\n                  }\n                  if(!$_check){\n                      $nilaiB = $nilaiB . '0,';\n                  }\n              }\n\n              return view('modul_admin.index')\n                  ->  with('data', $data)\n                  ->  with('masuk',$masuk)\n                  ->  with('selesai',$selesai)\n                  ->  with('customer', $customer)\n                  ->  with('sudahbayar', $sudahbayar)\n                  ->  with('belumbayar', $belumbayar)\n                  ->  with('_tanggal', substr($tanggal, 0,-1))\n                  ->  with('_nilai', substr($nilai, 0, -1))\n                  ->  with('_bulan', substr($bulans, 0,-1))\n                  ->  with('_nilaiB', substr($nilaiB, 0, -1))\n                  ->  with('diambil',$diambil)\n                  ->  with('incomeY',$incomeY)\n                  ->  with('incomeM',$incomeM)\n                  ->  with('incomeYOld',$incomeYOld)\n                  ->  with('incomeD',$incomeD)\n                  ->  with('incomeDOld',$incomeDOld);\n\n          } elseif(Auth::user()->auth === \"Karyawan\") {\n              $masuk = transaksi::whereIN('status_order',['Process','Done','Delivery'])->where('user_id',auth::user()->id)->count();\n              $selesai = transaksi::where('status_order','Done')->where('user_id',auth::user()->id)->count();\n              $diambil = transaksi::where('status_order','Delivery')->where('user_id',auth::user()->id)->count();\n              $customer = User::where('karyawan_id',auth::user()->id)->get();\n\n              $kgToday = transaksi::where('user_id',Auth::id())->where('tahun',date('Y'))\n              ->where('bulan', ltrim(date('m'),'0'))->where('tgl',ltrim(date('d'),'0'))->sum('kg');\n\n              $kgTodayOld = transaksi::where('user_id',Auth::id())->where('tahun',date('Y'))\n              ->where('bulan', ltrim(date('m'),'0'))->where('tgl',ltrim(date(\"d\",strtotime(\"-1 day\")),'0'))->sum('kg');\n\n              $incomeM = transaksi::where('user_id',Auth::id())->where('status_payment','Success')\n              ->where('tahun',date('Y'))->where('bulan', ltrim(date('m'),'0'))->sum('harga_akhir');\n\n              $incomeMOld = transaksi::where('user_id',Auth::id())->where('status_payment','Success')\n              ->where('tahun',date('Y'))->where('bulan', ltrim(date('m',strtotime(\"-1 month\")),'0'))->sum('harga_akhir');\n\n              $persen = 0;\n              if ($incomeMOld != null && $incomeM != null) {\n                $persen =  ($incomeM - $incomeMOld) / $incomeM * 100;\n              }\n\n              // Statistik Bulanan\n              $bln = DB::table('transaksis')\n              ->  select('bulan', DB::raw('count(id) AS jml'))\n              ->  whereYear('created_at','=',date(\"Y\", strtotime(now())))\n              ->  whereMonth('created_at','=',date(\"m\", strtotime(now())))\n              ->  groupBy('bulan')\n              ->  get();\n\n              $bulans = '';\n              $batas =  12;\n              $nilaiB = '';\n              for($_i=1; $_i <= $batas; $_i++){\n                  $bulans = $bulans . (string)$_i . ',';\n                  $_check = false;\n                  foreach($bln as $_data){\n                      if((int)@$_data->bulan === $_i){\n                          $nilaiB = $nilaiB . (string)$_data->jml . ',';\n                          $_check = true;\n                      }\n                  }\n                  if(!$_check){\n                      $nilaiB = $nilaiB . '0,';\n                  }\n              }\n\n              return view('karyawan.index')\n                  ->  with('diambil', $diambil)\n                  ->  with('masuk',$masuk)\n                  ->  with('selesai',$selesai)\n                  ->  with('customer', $customer)\n                  ->  with('kgToday', $kgToday)\n                  ->  with('kgTodayOld', $kgTodayOld)\n                  ->  with('incomeM',$incomeM)\n                  ->  with('incomeMOld',$incomeMOld)\n                  ->  with('persen',$persen)\n                  ->  with('_bulan', substr($bulans, 0,-1))\n                  ->  with('_nilaiB', substr($nilaiB, 0, -1));\n\n          }elseif(Auth::user()->auth == 'Customer'){\n            $totalLaundry = transaksi::where('customer_id',Auth::id())->count();\n            $totalLaundryKg = transaksi::where('customer_id',Auth::id())->sum('kg');\n\n            $transaksi = transaksi::with('price')->where('customer_id',Auth::id())->get();\n            return view('customer.index',\\compact('totalLaundry','totalLaundryKg','transaksi'));\n          }\n        }\n    }\n\n    // Read Notifikasi\n    public function readNotifikasi(Request $request)\n    {\n        $notif = Notification::find($request->id);\n        $notif->update([\n            'is_read'   => 1\n        ]);\n\n        return $notif;\n    }\n\n}\n"
  },
  {
    "path": "app/Http/Controllers/Karyawan/CustomerController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Karyawan;\n\nuse App\\Http\\Controllers\\Controller;\nuse ErrorException;\nuse App\\Models\\User;\nuse Illuminate\\Http\\Request;\nuse Spatie\\Permission\\Models\\Role;\nuse App\\Http\\Requests\\AddCustomerRequest;\nuse Illuminate\\Support\\Facades\\Hash;\nuse App\\Jobs\\RegisterCustomerJob;\nuse Mail;\nuse Illuminate\\Support\\Str;\nuse Illuminate\\Support\\Facades\\Session;\nuse Illuminate\\Support\\Facades\\DB;\nuse Illuminate\\Support\\Facades\\Auth;\nclass CustomerController extends Controller\n{\n    // index\n    public function index()\n    {\n      $customer = User::where('karyawan_id',Auth::user()->id)\n      ->where('auth','Customer')\n      ->orderBy('id','DESC')->get();\n      return view('karyawan.customer.index', compact('customer'));\n    }\n\n    // Detail Customer\n    public function detail($id)\n    {\n      $customer = User::with('transaksiCustomer')\n      ->where('karyawan_id',Auth::user()->id)\n      ->where('id',$id)->first();\n      return view('karyawan.customer.detail', compact('customer'));\n    }\n\n    // Create\n    public function create()\n    {\n      return view('karyawan.customer.create');\n    }\n\n    // Store\n    public function store(AddCustomerRequest $request)\n    {\n\n      try {\n        DB::beginTransaction();\n\n\n        $phone_number = preg_replace('/^0/','62',$request->no_telp);\n        $password = str::random(8);\n\n        $addCustomer = User::create([\n          'karyawan_id' => Auth::id(),\n          'name'        => $request->name,\n          'email'       => $request->email,\n          'auth'        => 'Customer',\n          'status'      => 'Active',\n          'no_telp'     => $phone_number,\n          'alamat'      => $request->alamat,\n          'password'    => Hash::make($password)\n        ]);\n\n        $addCustomer->assignRole($addCustomer->auth);\n\n        if ($addCustomer) {\n          // Menyiapkan data Email\n          $data = array(\n              'name'            => $addCustomer->name,\n              'email'           => $addCustomer->email,\n              'password'        => $password,\n              'url_login'       => url('/login'),\n              'nama_laundry'    => Auth::user()->nama_cabang,\n              'alamat_laundry'  => Auth::user()->alamat_cabang,\n          );\n          // Kirim email\n           if (setNotificationEmail(1) == 1) {\n            dispatch(new RegisterCustomerJob($data));\n           }\n        }\n        DB::commit();\n        Session::flash('success','Customer Berhasil Ditambah !');\n        return redirect('customers');\n      } catch (ErrorException $e) {\n        DB::rollback();\n        throw new ErrorException($e->getMessage());\n      }\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Karyawan/InvoiceController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Karyawan;\n\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Http\\Request;\nuse App\\Models\\{transaksi,DataBank};\nuse Auth;\nuse PDF;\nclass InvoiceController extends Controller\n{\n       // Invoice\n    public function invoicekar(Request $request)\n    {\n      $invoice = transaksi::with('price')\n      ->where('user_id',Auth::id())\n      ->where('id',$request->id)\n      ->get();\n\n      $data = transaksi::with('customers','user')\n      ->where('user_id',Auth::id())\n      ->where('id',$request->id)\n      ->first();\n\n      $bank = DataBank::get();\n      return view('karyawan.laporan.invoice', compact('invoice','data','bank'));\n    }\n\n    // Cetak invoice\n    public function cetakinvoice(Request $request)\n    {\n       $invoice = transaksi::with('price')\n      ->where('user_id',Auth::id())\n      ->where('id',$request->id)\n      ->get();\n\n      $data = transaksi::with('customers','user')\n      ->where('user_id',Auth::id())\n      ->where('id',$request->id)\n      ->first();\n\n      $bank = DataBank::get();\n\n      $pdf = PDF::loadView('karyawan.laporan.cetak', compact('invoice','data','bank'))->setPaper('a4', 'landscape');\n      return $pdf->stream();\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Karyawan/LaporanController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Karyawan;\n\nuse App\\Exports\\LaporanExport;\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Http\\Request;\nuse App\\Models\\{transaksi,customer,harga};\nuse Illuminate\\Support\\Facades\\Auth;\nuse Maatwebsite\\Excel\\Facades\\Excel;\n\nclass LaporanController extends Controller\n{\n    //Halaman Laporan\n    public function laporan()\n    {\n      $laporan = transaksi::where('user_id', Auth::id())->get();\n      return view('karyawan.laporan.index', compact('laporan'));\n    }\n\n    // Export Excel\n    public function exportExcel()\n    {\n      return Excel::download(new LaporanExport, 'laporan_laundry.xlsx');\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Karyawan/PelayananController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Karyawan;\n\nuse carbon\\carbon;\nuse ErrorException;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\DB;\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Support\\Facades\\Auth;\nuse App\\Http\\Requests\\AddOrderRequest;\nuse Illuminate\\Support\\Facades\\Session;\nuse App\\Models\\{transaksi,User,harga,DataBank, Notification};\nuse App\\Jobs\\DoneCustomerJob;\nuse App\\Jobs\\OrderCustomerJob;\nuse App\\Notifications\\{OrderMasuk,OrderSelesai};\n\nclass PelayananController extends Controller\n\n{\n\n    // Halaman list order masuk\n    public function index()\n    {\n      $order = transaksi::with('price')->where('user_id',Auth::user()->id)\n      ->orderBy('id','DESC')->get();\n      return view('karyawan.transaksi.order', compact('order'));\n    }\n\n    // Proses simpan order\n    public function store(AddOrderRequest $request)\n    {\n      try {\n        DB::beginTransaction();\n        $order = new transaksi();\n        $order->invoice         = $request->invoice;\n        $order->tgl_transaksi   = Carbon::now()->parse($order->tgl_transaksi)->format('d-m-Y');\n        $order->status_payment  = $request->status_payment;\n        $order->harga_id        = $request->harga_id;\n        $order->customer_id     = $request->customer_id;\n        $order->user_id         = Auth::user()->id;\n        $order->customer        = namaCustomer($order->customer_id);\n        $order->email_customer  = email_customer($order->customer_id);\n        $order->hari            = $request->hari;\n        $order->kg              = $request->kg;\n        $order->harga           = $request->harga;\n        $order->disc            = $request->disc;\n        $hitung                 = $order->kg * $order->harga;\n        if ($request->disc != NULL) {\n            $disc                = ($hitung * $order->disc) / 100;\n            $total               = $hitung - $disc;\n            $order->harga_akhir  = $total;\n        } else {\n          $order->harga_akhir    = $hitung;\n        }\n        $order->jenis_pembayaran  = $request->jenis_pembayaran;\n        $order->tgl               = Carbon::now()->day;\n        $order->bulan             = Carbon::now()->month;\n        $order->tahun             = Carbon::now()->year;\n        $order->save();\n\n        if ($order) {\n          // Notification Telegram\n          if (setNotificationTelegramIn(1) == 1) {\n            $order->notify(new OrderMasuk());\n          }\n\n          // Notification email\n          if (setNotificationEmail(1) == 1) {\n            // Menyiapkan data Email\n            $bank = DataBank::get();\n            $jenisPakaian = harga::where('id', $order->harga_id)->first();\n            $data = array(\n                'email'         => $order->email_customer,\n                'invoice'       => $order->invoice,\n                'customer'      => $order->customer,\n                'tgl_transaksi' => $order->tgl_transaksi,\n                'pakaian'       => $jenisPakaian->jenis,\n                'berat'         => $order->kg,\n                'harga'         => $order->harga,\n                'harga_disc'    => ($hitung * $order->disc) / 100,\n                'disc'          => $order->disc,\n                'total'         => $order->kg * $order->harga,\n                'harga_akhir'   => $order->harga_akhir,\n                'laundry_name'  => Auth::user()->nama_cabang,\n                'bank'          => $bank\n            );\n\n            // Kirim Email\n            dispatch(new OrderCustomerJob($data));\n\n          }\n          DB::commit();\n          Session::flash('success','Order Berhasil Ditambah !');\n          return redirect('pelayanan');\n        }\n      } catch (ErrorException $e) {\n        DB::rollback();\n        throw new ErrorException($e->getMessage());\n      }\n    }\n\n    // Tambah Order\n    public function addorders()\n    {\n      $customer = User::where('karyawan_id',Auth::user()->id)->get();\n      $jenisPakaian = harga::where('user_id',Auth::id())->where('status','1')->get();\n\n      $y = date('Y');\n      $number = mt_rand(1000, 9999);\n      // Nomor Form otomatis\n      $newID = $number. Auth::user()->id .''.$y;\n      $tgl = date('d-m-Y');\n\n      $cek_harga = harga::where('user_id',Auth::user()->id)->where('status',1)->first();\n      $cek_customer = User::select('id','karyawan_id')->where('karyawan_id',Auth::id())->count();\n      return view('karyawan.transaksi.addorder', compact('customer','newID','cek_harga','cek_customer','jenisPakaian'));\n    }\n\n    // Filter List Harga\n    public function listharga(Request $request)\n    {\n       $list_harga = harga::select('id','harga')\n        ->where('user_id',Auth::user()->id)\n        ->where('id',$request->id)\n        ->get();\n        $select = '';\n        $select .= '\n                    <div class=\"form-group has-success\">\n                    <label for=\"id\" class=\"control-label\">Harga</label>\n                    <select id=\"harga\" class=\"form-control\" name=\"harga\" value=\"harga\">\n                    ';\n                    foreach ($list_harga as $studi) {\n        $select .= '<option value=\"'.$studi->harga.'\">'.'Rp. ' .number_format($studi->harga,0,\",\",\".\").'</option>';\n                    }'\n                    </select>\n                    </div>\n                    </div>';\n        return $select;\n    }\n\n    // Filter List Jumlah Hari\n    public function listhari(Request $request)\n    {\n      $list_jenis = harga::select('id','hari')\n        ->where('user_id',Auth::user()->id)\n        ->where('id',$request->id)\n        ->get();\n        $select = '';\n        $select .= '\n                    <div class=\"form-group has-success\">\n                    <label for=\"id\" class=\"control-label\">Pilih Hari</label>\n                    <select id=\"hari\" class=\"form-control\" name=\"hari\" value=\"hari\">\n                    ';\n                    foreach ($list_jenis as $hari) {\n        $select .= '<option value=\"'.$hari->hari.'\">'.$hari->hari.'</option>';\n                    }'\n                    </select>\n                    </div>\n                    </div>';\n        return $select;\n    }\n\n\n    // Update Status Laundry\n    public function updateStatusLaundry(Request $request)\n    {\n      $transaksi = transaksi::find($request->id);\n      if ($transaksi->status_payment == 'Pending') {\n        $transaksi->update([\n          'status_payment' => 'Success'\n        ]);\n      } elseif ($transaksi->status_payment == 'Success') {\n        if ($transaksi->status_order == 'Process') {\n          $transaksi->update([\n            'status_order' => 'Done'\n          ]);\n\n            // Tambah point +1\n            $points = User::where('id',$transaksi->customer_id)->firstOrFail();\n            $points->point =  $points->point + 1;\n            $points->update();\n\n            // Create Notifikasi\n            $id         = $transaksi->id;\n            $user_id    = $transaksi->customer_id;\n            $title      = 'Pakaian Selesai';\n            $body       = 'Pakaian Sudah Selesai dan Sudah Bisa Diambil :)';\n            $kategori   = 'info';\n            sendNotification($id,$user_id,$kategori,$title,$body);\n\n            // Cek email notif\n            if (setNotificationEmail(1) == 1) {\n\n              // Menyiapkan data\n              $data = array(\n                  'email'           => $transaksi->email_customer,\n                  'invoice'         => $transaksi->invoice,\n                  'customer'        => $transaksi->customer,\n                  'nama_laundry'    => Auth::user()->nama_cabang,\n                  'alamat_laundry'  => Auth::user()->alamat_cabang,\n              );\n\n            // Kirim Email\n            dispatch(new DoneCustomerJob($data));\n            }\n\n            // Cek status notif untuk telegram\n            if (setNotificationTelegramFinish(1) == 1) {\n              $transaksi->notify(new OrderSelesai());\n            }\n\n            // Notifikasi WhatsApp\n            if (setNotificationWhatsappOrderSelesai(1) == 1 && getTokenWhatsapp() != null) {\n              $waCustomer = $transaksi->customers->no_telp; // get nomor whatsapp customer\n              $nameCustomer = $transaksi->customers->name; // get name customer\n              notificationWhatsapp(\n                getTokenWhatsapp(), // Token\n                $waCustomer, // nomor whatsapp\n                'Halo Kak '.$nameCustomer.' Laundry kamu sudah selesai dan sudah bisa diambil nih :) ' // pesan\n              );\n            }\n\n        } elseif ($transaksi->status_order == 'Done') {\n          $transaksi->update([\n            'status_order' => 'Delivery'\n          ]);\n        }\n      }\n\n      if ($transaksi->status_payment == 'Success') {\n          Session::flash('success', \"Status Pembayaran Berhasil Diubah !\");\n      }\n      if($transaksi->status_order == 'Done' || $transaksi->status_order == 'Delivery') {\n          Session::flash('success', \"Status Laundry Berhasil Diubah !\");\n      }\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Karyawan/ProfileController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Karyawan;\n\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Http\\Request;\nuse App\\Models\\User;\nuse Auth;\nuse Session;\nclass ProfileController extends Controller\n{\n    // Profile Karyawan Cabang\n    public function karyawanProfile($id)\n    {\n      $user = User::find($id);\n      return view('karyawan.profile.index', compact('user'));\n    }\n\n    // Profile Karyawan Cabang - Save\n    public function karyawanProfileSave(Request $request, $id)\n    {\n      $foto = $request->file('foto');\n      if ($foto) {\n        $nama_foto = time().\"_\".$foto->getClientOriginalName();\n        // isi dengan nama folder tempat kemana file diupload\n        $tujuan_upload = 'public/images/foto_profile';\n        $foto->storeAs($tujuan_upload,$nama_foto);\n      }\n\n      if ($request->password) {\n        $password = Hash::make($request->password);\n      }\n      $profile = User::findOrFail($id);\n      $profile->name            = $request->name;\n      $profile->email           = $request->email;\n      $profile->alamat          = $request->alamat;\n      $profile->nama_cabang     = $request->nama_cabang;\n      $profile->alamat_cabang   = $request->alamat_cabang;\n      $profile->foto            = $nama_foto ?? Auth::user()->foto;\n      $profile->password        = $password ?? Auth::user()->password;\n      $profile->save();\n\n      Session::flash('success','Data profile berhasil diupdate !');\n      return back();\n    }\n\n}\n"
  },
  {
    "path": "app/Http/Controllers/Karyawan/SettingsController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Karyawan;\n\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Http\\Request;\nuse App\\Models\\User;\nuse Session;\n\nclass SettingsController extends Controller\n{\n    //Setting Karyawan\n    public function setting()\n    {\n      return view('karyawan.settings.index');\n    }\n\n    // Proses setting\n    public function proses_setting_karyawan(Request $request, $id)\n    {\n       $setting = User::findOrFail($id);\n        if ($request->theme == NULL) {\n          $setting->theme = '0';\n        } else {\n          $setting->theme = $request->theme;\n        }\n        $setting->save();\n\n        Session::flash('success','Setting Berhasil Diupdate !');\n        return back();\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        \\App\\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        \\App\\Http\\Middleware\\TrustProxies::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        ],\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' => \\App\\Http\\Middleware\\Authenticate::class,\n        'auth.basic' => \\Illuminate\\Auth\\Middleware\\AuthenticateWithBasicAuth::class,\n        'bindings' => \\Illuminate\\Routing\\Middleware\\SubstituteBindings::class,\n        'cache.headers' => \\Illuminate\\Http\\Middleware\\SetCacheHeaders::class,\n        'can' => \\Illuminate\\Auth\\Middleware\\Authorize::class,\n        'guest' => \\App\\Http\\Middleware\\RedirectIfAuthenticated::class,\n        'signed' => \\Illuminate\\Routing\\Middleware\\ValidateSignature::class,\n        'throttle' => \\Illuminate\\Routing\\Middleware\\ThrottleRequests::class,\n        'verified' => \\Illuminate\\Auth\\Middleware\\EnsureEmailIsVerified::class,\n        'role' => \\Spatie\\Permission\\Middlewares\\RoleMiddleware::class,\n        'permission' => \\Spatie\\Permission\\Middlewares\\PermissionMiddleware::class,\n        'role_or_permission' => \\Spatie\\Permission\\Middlewares\\RoleOrPermissionMiddleware::class,\n    ];\n\n    /**\n     * The priority-sorted list of middleware.\n     *\n     * This forces non-global middleware to always be in the given order.\n     *\n     * @var array\n     */\n    protected $middlewarePriority = [\n        \\Illuminate\\Session\\Middleware\\StartSession::class,\n        \\Illuminate\\View\\Middleware\\ShareErrorsFromSession::class,\n        \\App\\Http\\Middleware\\Authenticate::class,\n        \\Illuminate\\Session\\Middleware\\AuthenticateSession::class,\n        \\Illuminate\\Routing\\Middleware\\SubstituteBindings::class,\n        \\Illuminate\\Auth\\Middleware\\Authorize::class,\n    ];\n}\n"
  },
  {
    "path": "app/Http/Middleware/Authenticate.php",
    "content": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Auth\\Middleware\\Authenticate as Middleware;\n\nclass Authenticate extends Middleware\n{\n    /**\n     * Get the path the user should be redirected to when they are not authenticated.\n     *\n     * @param  \\Illuminate\\Http\\Request  $request\n     * @return string\n     */\n    protected function redirectTo($request)\n    {\n        if (! $request->expectsJson()) {\n            return route('login');\n        }\n    }\n}\n"
  },
  {
    "path": "app/Http/Middleware/CheckForMaintenanceMode.php",
    "content": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Foundation\\Http\\Middleware\\CheckForMaintenanceMode as Middleware;\n\nclass CheckForMaintenanceMode extends Middleware\n{\n    /**\n     * The URIs that should be reachable while maintenance mode is enabled.\n     *\n     * @var array\n     */\n    protected $except = [\n        //\n    ];\n}\n"
  },
  {
    "path": "app/Http/Middleware/EncryptCookies.php",
    "content": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Cookie\\Middleware\\EncryptCookies as Middleware;\n\nclass EncryptCookies extends Middleware\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/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('/home');\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 Middleware;\n\nclass TrimStrings extends Middleware\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/TrustProxies.php",
    "content": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Middleware\\TrustProxies as Middleware;\n\nclass TrustProxies extends Middleware\n{\n    /**\n     * The trusted proxies for this application.\n     *\n     * @var array|string\n     */\n    protected $proxies;\n\n    /**\n     * The headers that should be used to detect proxies.\n     *\n     * @var int\n     */\n    protected $headers = Request::HEADER_X_FORWARDED_FOR |\n    Request::HEADER_X_FORWARDED_HOST |\n    Request::HEADER_X_FORWARDED_PORT |\n    Request::HEADER_X_FORWARDED_PROTO |\n    Request::HEADER_X_FORWARDED_AWS_ELB;\n}\n"
  },
  {
    "path": "app/Http/Middleware/VerifyCsrfToken.php",
    "content": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken as Middleware;\n\nclass VerifyCsrfToken extends Middleware\n{\n    /**\n     * Indicates whether the XSRF-TOKEN cookie should be set on the response.\n     *\n     * @var bool\n     */\n    protected $addHttpCookie = true;\n\n    /**\n     * The URIs that should be excluded from CSRF verification.\n     *\n     * @var array\n     */\n    protected $except = [\n        //\n    ];\n}\n"
  },
  {
    "path": "app/Http/Requests/AddCustomerRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass AddCustomerRequest 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          'name'                  => 'required|max:25',\n          'email'                 => 'required|unique:users',\n          'alamat'                => 'required',\n          'no_telp'               => 'required|unique:users',\n        ];\n    }\n\n    public function messages()\n    {\n      return [\n        'name.required'                 => 'Nama tidak boleh kosong.',\n        'name.unique'                   => 'Nama sudah digunakan.',\n        'name.max'                      => 'Nama tidak boleh lebih dari 50 karakter.',\n        'email.required'                => 'Email tidak boleh kosong.',\n        'email.unique'                  => 'Email sudah digunakan.',\n        'email.max'                     => 'Email tidak boleh lebih dari 50 karakter.',\n        'alamat.required'               => 'Alamat tidak boleh kosong.',\n        'alamat.max'                    => 'Alamat tidak boleh lebih dari 50 karakter.',\n        'no_telp.required'              => 'Nomor Telepon tidak boleh kosong.'\n      ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/AddKaryawanRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass AddKaryawanRequest 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          'name'                  => 'required|unique:users|max:50',\n          'email'                 => 'required|unique:users|max:50',\n          'nama_cabang'           => 'required|max:50',\n          'alamat'                => 'required|max:50',\n          'alamat_cabang'         => 'required|unique:users',\n          'no_telp'               => 'required',\n          'password'              => 'required|string|min:8|confirmed',\n          'password_confirmation' => 'required|string|min:8'\n        ];\n    }\n\n    public function messages()\n    {\n      return [\n        'name.required'                 => 'Nama tidak boleh kosong.',\n        'name.unique'                   => 'Nama sudah digunakan.',\n        'name.max'                      => 'Nama tidak boleh lebih dari 50 karakter.',\n        'email.required'                => 'Email tidak boleh kosong.',\n        'email.unique'                  => 'Email sudah digunakan.',\n        'email.max'                     => 'Email tidak boleh lebih dari 50 karakter.',\n        'nama_cabang.required'          => 'Nama Cabang tidak boleh kosong.',\n        'nama_cabang.max'               => 'Nama Cabang tidak boleh lebih dari 30 karakter.',\n        'alamat_cabang.required'        => 'Alamat Cabang tidak boleh ksosong.',\n        'alamt_cabang.unique'           => 'Alamat Cabang sudah digunakan',\n        'alamat.required'               => 'Alamat tidak boleh kosong.',\n        'alamat.max'                    => 'Alamat tidak boleh lebih dari 50 karakter.',\n        'no_telp.required'              => 'Nomor Telepon tidak boleh kosong.',\n        'password.required'             => 'Password tidak boleh kosong.',\n        'password.min'                  => 'Password harus lebih dari 8 karakter.',\n        'password.confirmed'            => 'Password tidak sama, mohon ulangi kembali.',\n        'password_confirmation.required'=> 'Password Konfirmasi tidak boleh kosong.',\n        'password_confirmation.min'     => 'Password Konfirmasi harus lebih dari 8 karakter.'\n      ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/AddOrderRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass AddOrderRequest 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          'status_payment'    => 'required',\n          'kg'                => 'required|regex:/^[0-9.]+$/|numeric',\n          'hari'              => 'required',\n          'harga'             => 'required',\n          'jenis_pembayaran'  => 'required',\n          'disc'              => 'nullable|numeric',\n          'harga_id'          => 'required',\n          'customer_id'       => 'required'\n        ];\n    }\n\n    public function messages()\n    {\n      return [\n        'status_payment.required'   => 'Status Pembayaran wajib dipilih.',\n        'kg.required'               => 'Berat Pakaian tidak boleh kosong.',\n        'kg.numeric'                => 'Berat Pakaian hanya mendukung angka.',\n        'hari.required'             => 'Hari tidak boleh kosong.',\n        'harga.required'            => 'Harga tidak boleh kosong.',\n        'jenis_pembayaran.required' => 'Jenis Pembayaran wajib dipilih.',\n        'disc.numeric'              => 'Diskon hanya mendukung angka.',\n        'harga_id.required'         => 'Jenis Pakaian wajib dipilih.',\n        'customer_id.required'      => 'Customer wajib dipilih.'\n      ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/HargaRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass HargaRequest 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          'user_id' => 'required',\n          'jenis'   => 'required',\n          'harga'   => 'required',\n          'hari'    => 'required'\n        ];\n    }\n\n    public function messages()\n    {\n      return [\n        'user_id.required'  => 'Cabang tidak boleh kosong.',\n        'jenis.required'    => 'Jenis pakaian tidak boleh kosong.',\n        'harga.required'    => 'Harga tidak boleh kosong.',\n        'hari.required'     => 'Jumlah hari tidak boleh kosong.'\n      ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/LoginRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass LoginRequest 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          'email'     => 'required|email|exists:users,email',\n          'password'  => 'required'\n        ];\n    }\n\n     public function messages()\n    {\n        return [\n            'email.required'        => \"Email tidak boleh kosong\",\n            \"email.email\"           => \"Format email tidak diketahui\",\n            \"email.exists\"          => \"Email tidak terdaftar pada sistem\",\n            \"password.required\"     => \"Password tidak boleh kosong\",\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/UpdateProfilRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass UpdateProfilRequest 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          'name'      => 'required',\n          'email'     => 'required',\n          'no_telp'   => 'required',\n          'alamat'    => 'required',\n          'password'  => 'confirmed|min:8|nullable'\n        ];\n    }\n\n    public function messages()\n    {\n      return [\n        'name.required'       => 'Nama tidak boleh kosong.',\n        'email.required'      => 'Email tidak boleh kosong.',\n        'no_telp.required'    => 'No WhatsApp tidak boleh kosong.',\n        'alamat.required'     => 'Alamat tidak boleh kosong.',\n        'password.min'        => 'Password minimal berjumlah 8 karakter.',\n        'password.confirmed'  => 'Password Konfirmasi tidak sama.'\n      ];\n    }\n}\n"
  },
  {
    "path": "app/Jobs/DoneCustomerJob.php",
    "content": "<?php\n\nnamespace App\\Jobs;\n\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldBeUnique;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse App\\Mail\\DoneCustomer;\nuse Mail;\n\nclass DoneCustomerJob implements ShouldQueue\n{\n    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;\n    protected $data;\n\n    /**\n     * Create a new job instance.\n     *\n     * @return void\n     */\n    public function __construct($data)\n    {\n      $this->data = $data;\n    }\n\n    /**\n     * Execute the job.\n     *\n     * @return void\n     */\n    public function handle()\n    {\n      $email = new DoneCustomer($this->data);\n      Mail::to($this->data['email'])->send($email);\n    }\n}\n"
  },
  {
    "path": "app/Jobs/OrderCustomerJob.php",
    "content": "<?php\n\nnamespace App\\Jobs;\n\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldBeUnique;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse App\\Mail\\OrderCustomer;\nuse Mail;\n\nclass OrderCustomerJob implements ShouldQueue\n{\n    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;\n    protected $data;\n\n    /**\n     * Create a new job instance.\n     *\n     * @return void\n     */\n    public function __construct($data)\n    {\n      $this->data = $data;\n    }\n\n    /**\n     * Execute the job.\n     *\n     * @return void\n     */\n    public function handle()\n    {\n      $email = new OrderCustomer($this->data);\n      Mail::to($this->data['email'])->send($email);\n    }\n}\n"
  },
  {
    "path": "app/Jobs/RegisterCustomerJob.php",
    "content": "<?php\n\nnamespace App\\Jobs;\n\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldBeUnique;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Foundation\\Bus\\Dispatchable;\nuse Illuminate\\Queue\\InteractsWithQueue;\nuse Illuminate\\Queue\\SerializesModels;\nuse App\\Mail\\RegisterCustomer;\nuse Mail;\n\nclass RegisterCustomerJob implements ShouldQueue\n{\n    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;\n    protected $data;\n    /**\n     * Create a new job instance.\n     *\n     * @return void\n     */\n    public function __construct($data)\n    {\n      $this->data = $data;\n    }\n\n    /**\n     * Execute the job.\n     *\n     * @return void\n     */\n    public function handle()\n    {\n      $email = new RegisterCustomer($this->data);\n      Mail::to($this->data['email'])->send($email);\n    }\n}\n"
  },
  {
    "path": "app/Mail/DoneCustomer.php",
    "content": "<?php\n\nnamespace App\\Mail;\n\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Mail\\Mailable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass DoneCustomer extends Mailable\n{\n    use Queueable, SerializesModels;\n    protected $data;\n\n    /**\n     * Create a new message instance.\n     *\n     * @return void\n     */\n    public function __construct($data)\n    {\n      $this->data = $data;\n    }\n\n    /**\n     * Build the message.\n     *\n     * @return $this\n     */\n    public function build()\n    {\n        $address = config(\"mail.from.address\");\n        $name = 'E-Laundry';\n\n        return $this->view('emails.done')\n        ->subject('Laundry Selesai')\n        ->with('data', $this->data)\n        ->from($address, $name);\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Mail/OrderCustomer.php",
    "content": "<?php\n\nnamespace App\\Mail;\n\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Mail\\Mailable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass OrderCustomer extends Mailable\n{\n    use Queueable, SerializesModels;\n    protected $data;\n\n    /**\n     * Create a new message instance.\n     *\n     * @return void\n     */\n    public function __construct($data)\n    {\n      $this->data = $data;\n    }\n\n    /**\n     * Build the message.\n     *\n     * @return $this\n     */\n    public function build()\n    {\n        $address = config(\"mail.from.address\");\n        $name = 'E-Laundry';\n\n        return $this->view('emails.orders')\n        ->subject('Laundry Order')\n        ->with('data', $this->data)\n        ->from($address, $name);\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Mail/RegisterCustomer.php",
    "content": "<?php\n\nnamespace App\\Mail;\n\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Mail\\Mailable;\nuse Illuminate\\Queue\\SerializesModels;\n\nclass RegisterCustomer extends Mailable\n{\n  use Queueable, SerializesModels;\n  protected $data;\n\n    /**\n     * Create a new message instance.\n     *\n     * @return void\n     */\n    public function __construct($data)\n    {\n      $this->data = $data;\n    }\n\n    /**\n     * Build the message.\n     *\n     * @return $this\n     */\n    public function build()\n    {\n        $address = config(\"mail.from.address\");\n        $name = 'E-Laundry';\n\n        return $this->view('emails.register')\n        ->subject('Laundry Registrasi')\n        ->with('data', $this->data)\n        ->from($address, $name);\n\n        return $this;\n    }\n}\n"
  },
  {
    "path": "app/Models/Bank.php",
    "content": "<?php\n\n/*\n * This file is part of the IndoBank package.\n *\n * (c) Andri Desmana <andridesmana.pw | andridesmana29@gmail.com>\n *\n */\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\n/**\n * Bank Model.\n */\nclass Bank extends Model\n{\n    /**\n     * Table name.\n     *\n     * @var string\n     */\n    protected $table = 'banks';\n}"
  },
  {
    "path": "app/Models/DataBank.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass DataBank extends Model\n{\n    use HasFactory;\n\n    protected $fillable = [\n      'user_id','nama_bank','no_rekening','nama_pemilik'\n    ];\n\n    public function User()\n    {\n      return $this->belongsTo(User::class);\n    }\n}\n"
  },
  {
    "path": "app/Models/LaundrySetting.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass LaundrySetting extends Model\n{\n    use HasFactory;\n\n    protected $fillable = [\n      'user_id','target_day','target_month','target_year'\n    ];\n}\n"
  },
  {
    "path": "app/Models/Notification.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Notification extends Model\n{\n    use HasFactory;\n\n    protected $guarded = '';\n}\n"
  },
  {
    "path": "app/Models/PageSettings.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass PageSettings extends Model\n{\n    use HasFactory;\n    protected $fillable = [\n      'judul',\n      'img_hero',\n      'tentang',\n      'facebook',\n      'instagram',\n      'twitter',\n      'whatsapp',\n      'no_telp',\n      'email'\n    ];\n}\n"
  },
  {
    "path": "app/Models/User.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Notifications\\Notifiable;\nuse Illuminate\\Contracts\\Auth\\MustVerifyEmail;\nuse Illuminate\\Foundation\\Auth\\User as Authenticatable;\nuse Spatie\\Permission\\Traits\\HasRoles;\n\nclass User extends Authenticatable\n{\n    use Notifiable, HasRoles;\n\n    /**\n     * The attributes that are mass assignable.\n     *\n     * @var array\n     */\n    protected $fillable = [\n        'karyawan_id','name', 'email', 'password','status','auth','nama_cabang','alamat_cabang','alamat','no_telp','theme','foto','point'\n    ];\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    /**\n     * The attributes that should be cast to native types.\n     *\n     * @var array\n     */\n    protected $casts = [\n        'email_verified_at' => 'datetime',\n    ];\n\n    function bank()\n    {\n      return $this->hasOne(DataBank::class);\n    }\n\n    public function transaksi()\n    {\n      return $this->belongsTo(transaksi::class,'id','user_id');\n    }\n\n    public function transaksiCustomer()\n    {\n      return $this->hasMany(transaksi::class,'customer_id','id');\n    }\n}\n"
  },
  {
    "path": "app/Models/harga.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass harga extends Model\n{\n    protected $fillable = [\n        'user_id','jenis','kg','harga','status','harga','hari'\n    ];\n\n    public function transaksi()\n    {\n      return $this->hasMany(transaksi::class);\n    }\n\n    public function harga_user()\n    {\n      return $this->belongsTo(User::class,'user_id','id');\n    }\n}\n"
  },
  {
    "path": "app/Models/notifications_setting.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass notifications_setting extends Model\n{\n    use HasFactory;\n\n    protected $fillable = [\n      'telegram_order_masuk','telegram_order_selesai','email','wa_order_selesai','wa_token'\n    ];\n}\n"
  },
  {
    "path": "app/Models/transaksi.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Notifications\\Notifiable;\n\nclass transaksi extends Model\n{\n    use Notifiable;\n    protected $fillable = [\n        'customer_id','user_id','tgl_transaksi','customer','status_order','status_payment','harga_id','kg','hari','harga','tgl','tgl_ambil','invoice','disc','bulan','tahun','harga_akhir','email_customer','jenis_pembayaran'\n    ];\n\n    public function price()\n    {\n      return $this->belongsTo(harga::class,'harga_id','id');\n    }\n\n    public function customers()\n    {\n      return $this->belongsTo(User::class,'customer_id','id')->where('auth','Customer');\n    }\n\n    public function user()\n    {\n      return $this->belongsTo(User::class,'user_id','id');\n    }\n\n}\n"
  },
  {
    "path": "app/Notifications/OrderMasuk.php",
    "content": "<?php\n\nnamespace App\\Notifications;\n\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Notifications\\Messages\\MailMessage;\nuse Illuminate\\Notifications\\Notification;\nuse NotificationChannels\\Telegram\\TelegramChannel;\nuse NotificationChannels\\Telegram\\TelegramMessage;\n\nclass OrderMasuk extends Notification\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 [TelegramChannel::class];\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    public function toTelegram($order)\n    {\n      $url = url('/invoice-kar/' .$order->id);\n      return TelegramMessage::create()\n      ->to(telegram_channel_masuk())\n      ->content(\"*Order Masuk*\\nCustomer {$order->customer} \\nBerat Pakaian {$order->kg}kg \\nTotal Pembayaran Rp. \".number_format($order->harga_akhir).\"\")\n      ->button('View Order', $url);\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/OrderSelesai.php",
    "content": "<?php\n\nnamespace App\\Notifications;\n\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Notifications\\Messages\\MailMessage;\nuse Illuminate\\Notifications\\Notification;\n\nuse NotificationChannels\\Telegram\\TelegramChannel;\nuse NotificationChannels\\Telegram\\TelegramMessage;\n\nclass OrderSelesai extends Notification\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 [TelegramChannel::class];\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    public function toTelegram($statusorder)\n    {\n      return TelegramMessage::create()\n      ->to(telegram_channel_selesai())\n      ->content(\"*Order Selesai* \\nCustomer {$statusorder->customer}\\nBerat Pakaian {$statusorder->kg}kg \\nTotal Pembayaran Rp. \".number_format($statusorder->harga_akhir).\"\");\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/Providers/AppServiceProvider.php",
    "content": "<?php\n\nnamespace App\\Providers;\n\nuse Illuminate\\Support\\ServiceProvider;\nuse Illuminate\\Support\\Facades\\Schema;\n\n\nclass AppServiceProvider extends ServiceProvider\n{\n    /**\n     * Register any application services.\n     *\n     * @return void\n     */\n    public function register()\n    {\n        //\n    }\n\n    /**\n     * Bootstrap any application services.\n     *\n     * @return void\n     */\n    public function boot()\n    {\n        Schema::defaultStringLength(191);\n    }\n}\n"
  },
  {
    "path": "app/Providers/AuthServiceProvider.php",
    "content": "<?php\n\nnamespace App\\Providers;\n\nuse Illuminate\\Support\\Facades\\Gate;\nuse Illuminate\\Foundation\\Support\\Providers\\AuthServiceProvider as ServiceProvider;\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    ];\n\n    /**\n     * Register any authentication / authorization services.\n     *\n     * @return void\n     */\n    public function boot()\n    {\n        $this->registerPolicies();\n\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/EventServiceProvider.php",
    "content": "<?php\n\nnamespace App\\Providers;\n\nuse Illuminate\\Support\\Facades\\Event;\nuse Illuminate\\Auth\\Events\\Registered;\nuse Illuminate\\Auth\\Listeners\\SendEmailVerificationNotification;\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        Registered::class => [\n            SendEmailVerificationNotification::class,\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": "artisan",
    "content": "#!/usr/bin/env php\n<?php\n\ndefine('LARAVEL_START', microtime(true));\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__.'/vendor/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    $_ENV['APP_BASE_PATH'] ?? dirname(__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/cache/.gitignore",
    "content": "*\n!.gitignore\n"
  },
  {
    "path": "composer.json",
    "content": "{\n    \"name\": \"laravel/laravel\",\n    \"type\": \"project\",\n    \"description\": \"The Laravel Framework.\",\n    \"keywords\": [\n        \"framework\",\n        \"laravel\"\n    ],\n    \"license\": \"MIT\",\n    \"require\": {\n        \"php\": \"^8.0.21\",\n        \"andes2912/indobank\": \"^0.7.0\",\n        \"barryvdh/laravel-dompdf\": \"^2.0.0\",\n        \"guzzlehttp/guzzle\": \"^7.4\",\n        \"laravel-notification-channels/telegram\": \"^2.1\",\n        \"laravel/framework\": \"^9.0\",\n        \"laravel/tinker\": \"^2.6.3\",\n        \"laravel/ui\": \"^3.0\",\n        \"laravelcollective/html\": \"^6.2\",\n        \"maatwebsite/excel\": \"^3.1\",\n        \"realrashid/sweet-alert\": \"^5.1.0\",\n        \"spatie/laravel-permission\": \"^5.5.5\"\n    },\n    \"require-dev\": {\n        \"beyondcode/laravel-dump-server\": \"^1.8.0\",\n        \"filp/whoops\": \"^2.0\",\n        \"fzaninotto/faker\": \"^1.4\",\n        \"mockery/mockery\": \"^1.0\",\n        \"nunomaduro/collision\": \"^6.1\",\n        \"phpunit/phpunit\": \"^9.0\"\n    },\n    \"config\": {\n        \"optimize-autoloader\": true,\n        \"preferred-install\": \"dist\",\n        \"sort-packages\": true\n    },\n    \"extra\": {\n        \"laravel\": {\n            \"dont-discover\": []\n        }\n    },\n    \"autoload\": {\n        \"psr-4\": {\n        \"App\\\\\": \"app/\",\n        \"Database\\\\Factories\\\\\": \"database/factories/\",\n        \"Database\\\\Seeders\\\\\": \"database/seeders/\"\n        },\n        \"files\":  [\n            \"app/Helpers/Model.php\"\n        ],\n        \"classmap\": [\n            \"database/seeders\",\n            \"database/factories\"\n        ]\n    },\n    \"autoload-dev\": {\n        \"psr-4\": {\n            \"Tests\\\\\": \"tests/\"\n        }\n    },\n    \"minimum-stability\": \"dev\",\n    \"prefer-stable\": true,\n    \"scripts\": {\n        \"post-autoload-dump\": [\n            \"Illuminate\\\\Foundation\\\\ComposerScripts::postAutoloadDump\",\n            \"@php artisan package:discover --ansi\"\n        ],\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 --ansi\"\n        ]\n    }\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\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 the 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    'db' => env('DB_DATABASE','db_laundry'),\n\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    'asset_url' => env('ASSET_URL', null),\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' => 'Asia/Jakarta',\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' => 'en',\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    | Faker Locale\n    |--------------------------------------------------------------------------\n    |\n    | This locale will be used by the Faker PHP library when generating fake\n    | data for your database seeds. For example, this will be used to get\n    | localized telephone numbers, street address information and more.\n    |\n    */\n\n    'faker_locale' => 'en_US',\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    | 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        Illuminate\\Validation\\ValidationServiceProvider::class,\n        Illuminate\\View\\ViewServiceProvider::class,\n        /*\n         * Package Service Providers...\n         */\n        // RealRashid\\SweetAlert\\SweetAlertServiceProvider::class,\n        Spatie\\Permission\\PermissionServiceProvider::class,\n        Maatwebsite\\Excel\\ExcelServiceProvider::class,\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\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        'Arr' => Illuminate\\Support\\Arr::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        'Str' => Illuminate\\Support\\Str::class,\n        'URL' => Illuminate\\Support\\Facades\\URL::class,\n        'Validator' => Illuminate\\Support\\Facades\\Validator::class,\n        'View' => Illuminate\\Support\\Facades\\View::class,\n        'Rupiah' => App\\Helpers\\Rupiah::class,\n        'Excel' => Maatwebsite\\Excel\\Facades\\Excel::class,\n        // 'Alert' => RealRashid\\SweetAlert\\Facades\\Alert::class,\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' => 'token',\n            'provider' => 'users',\n            'hash' => false,\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        ],\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                'cluster' => env('PUSHER_APP_CLUSTER'),\n                'encrypted' => true,\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\nuse Illuminate\\Support\\Str;\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\",\n    |            \"memcached\", \"redis\", \"dynamodb\"\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' => 'cache',\n        ],\n\n        'dynamodb' => [\n            'driver' => 'dynamodb',\n            'key' => env('AWS_ACCESS_KEY_ID'),\n            'secret' => env('AWS_SECRET_ACCESS_KEY'),\n            'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),\n            'table' => env('DYNAMODB_CACHE_TABLE', 'cache'),\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' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_cache'),\n\n];\n"
  },
  {
    "path": "config/database.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Str;\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Database Connection Name\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify which of the database connections below you wish\n    | to use as your default connection for all database work. Of course\n    | you may use many connections at once using the Database library.\n    |\n    */\n\n    'default' => env('DB_CONNECTION', 'mysql'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Database Connections\n    |--------------------------------------------------------------------------\n    |\n    | Here are each of the database connections setup for your application.\n    | Of course, examples of configuring each database platform that is\n    | supported by Laravel is shown below to make development simple.\n    |\n    |\n    | All database work in Laravel is done through the PHP PDO facilities\n    | so make sure you have the driver for your particular database of\n    | choice installed on your machine before you begin development.\n    |\n    */\n\n    'connections' => [\n\n        'sqlite' => [\n            'driver' => 'sqlite',\n            'url' => env('DATABASE_URL'),\n            'database' => env('DB_DATABASE', database_path('database.sqlite')),\n            'prefix' => '',\n            'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),\n        ],\n\n        'mysql' => [\n            'driver' => 'mysql',\n            'url' => env('DATABASE_URL'),\n            'host' => env('DB_HOST', '127.0.0.1'),\n            'port' => env('DB_PORT', '3306'),\n            'database' => env('DB_DATABASE', 'forge'),\n            'username' => env('DB_USERNAME', 'forge'),\n            'password' => env('DB_PASSWORD', ''),\n            'unix_socket' => env('DB_SOCKET', ''),\n            'charset' => 'utf8mb4',\n            'collation' => 'utf8mb4_unicode_ci',\n            'prefix' => '',\n            'prefix_indexes' => true,\n            'strict' => false,\n            'engine' => null,\n            'options' => extension_loaded('pdo_mysql') ? array_filter([\n                PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),\n            ]) : [],\n        ],\n\n        'pgsql' => [\n            'driver' => 'pgsql',\n            'url' => env('DATABASE_URL'),\n            'host' => env('DB_HOST', '127.0.0.1'),\n            'port' => env('DB_PORT', '5432'),\n            'database' => env('DB_DATABASE', 'forge'),\n            'username' => env('DB_USERNAME', 'forge'),\n            'password' => env('DB_PASSWORD', ''),\n            'charset' => 'utf8',\n            'prefix' => '',\n            'prefix_indexes' => true,\n            'schema' => 'public',\n            'sslmode' => 'prefer',\n        ],\n\n        'sqlsrv' => [\n            'driver' => 'sqlsrv',\n            'url' => env('DATABASE_URL'),\n            'host' => env('DB_HOST', 'localhost'),\n            'port' => env('DB_PORT', '1433'),\n            'database' => env('DB_DATABASE', 'forge'),\n            'username' => env('DB_USERNAME', 'forge'),\n            'password' => env('DB_PASSWORD', ''),\n            'charset' => 'utf8',\n            'prefix' => '',\n            'prefix_indexes' => true,\n        ],\n\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Migration Repository Table\n    |--------------------------------------------------------------------------\n    |\n    | This table keeps track of all the migrations that have already run for\n    | your application. Using this information, we can determine which of\n    | the migrations on disk haven't actually been run in the database.\n    |\n    */\n\n    'migrations' => 'migrations',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Redis Databases\n    |--------------------------------------------------------------------------\n    |\n    | Redis is an open source, fast, and advanced key-value store that also\n    | provides a richer body of commands than a typical key-value system\n    | such as APC or Memcached. Laravel makes it easy to dig right in.\n    |\n    */\n\n    'redis' => [\n\n        'client' => env('REDIS_CLIENT', 'predis'),\n\n        'options' => [\n            'cluster' => env('REDIS_CLUSTER', 'predis'),\n            'prefix' => Str::slug(env('APP_NAME', 'laravel'), '_').'_database_',\n        ],\n\n        'default' => [\n            'host' => env('REDIS_HOST', '127.0.0.1'),\n            'password' => env('REDIS_PASSWORD', null),\n            'port' => env('REDIS_PORT', 6379),\n            'database' => env('REDIS_DB', 0),\n        ],\n\n        'cache' => [\n            'host' => env('REDIS_HOST', '127.0.0.1'),\n            'password' => env('REDIS_PASSWORD', null),\n            'port' => env('REDIS_PORT', 6379),\n            'database' => env('REDIS_CACHE_DB', 1),\n        ],\n\n    ],\n\n];\n"
  },
  {
    "path": "config/excel.php",
    "content": "<?php\n\nuse Maatwebsite\\Excel\\Excel;\n\nreturn [\n    'exports' => [\n\n        /*\n        |--------------------------------------------------------------------------\n        | Chunk size\n        |--------------------------------------------------------------------------\n        |\n        | When using FromQuery, the query is automatically chunked.\n        | Here you can specify how big the chunk should be.\n        |\n        */\n        'chunk_size'             => 1000,\n\n        /*\n        |--------------------------------------------------------------------------\n        | Pre-calculate formulas during export\n        |--------------------------------------------------------------------------\n        */\n        'pre_calculate_formulas' => false,\n\n        /*\n        |--------------------------------------------------------------------------\n        | Enable strict null comparison\n        |--------------------------------------------------------------------------\n        |\n        | When enabling strict null comparison empty cells ('') will\n        | be added to the sheet.\n        */\n        'strict_null_comparison' => false,\n\n        /*\n        |--------------------------------------------------------------------------\n        | CSV Settings\n        |--------------------------------------------------------------------------\n        |\n        | Configure e.g. delimiter, enclosure and line ending for CSV exports.\n        |\n        */\n        'csv'                    => [\n            'delimiter'              => ',',\n            'enclosure'              => '\"',\n            'line_ending'            => PHP_EOL,\n            'use_bom'                => false,\n            'include_separator_line' => false,\n            'excel_compatibility'    => false,\n            'output_encoding'        => '',\n        ],\n\n        /*\n        |--------------------------------------------------------------------------\n        | Worksheet properties\n        |--------------------------------------------------------------------------\n        |\n        | Configure e.g. default title, creator, subject,...\n        |\n        */\n        'properties'             => [\n            'creator'        => '',\n            'lastModifiedBy' => '',\n            'title'          => '',\n            'description'    => '',\n            'subject'        => '',\n            'keywords'       => '',\n            'category'       => '',\n            'manager'        => '',\n            'company'        => '',\n        ],\n    ],\n\n    'imports'            => [\n\n        /*\n        |--------------------------------------------------------------------------\n        | Read Only\n        |--------------------------------------------------------------------------\n        |\n        | When dealing with imports, you might only be interested in the\n        | data that the sheet exists. By default we ignore all styles,\n        | however if you want to do some logic based on style data\n        | you can enable it by setting read_only to false.\n        |\n        */\n        'read_only' => true,\n\n        /*\n        |--------------------------------------------------------------------------\n        | Ignore Empty\n        |--------------------------------------------------------------------------\n        |\n        | When dealing with imports, you might be interested in ignoring\n        | rows that have null values or empty strings. By default rows\n        | containing empty strings or empty values are not ignored but can be\n        | ignored by enabling the setting ignore_empty to true.\n        |\n        */\n        'ignore_empty' => false,\n\n        /*\n        |--------------------------------------------------------------------------\n        | Heading Row Formatter\n        |--------------------------------------------------------------------------\n        |\n        | Configure the heading row formatter.\n        | Available options: none|slug|custom\n        |\n        */\n        'heading_row' => [\n            'formatter' => 'slug',\n        ],\n\n        /*\n        |--------------------------------------------------------------------------\n        | CSV Settings\n        |--------------------------------------------------------------------------\n        |\n        | Configure e.g. delimiter, enclosure and line ending for CSV imports.\n        |\n        */\n        'csv'         => [\n            'delimiter'        => null,\n            'enclosure'        => '\"',\n            'escape_character' => '\\\\',\n            'contiguous'       => false,\n            'input_encoding'   => 'UTF-8',\n        ],\n\n        /*\n        |--------------------------------------------------------------------------\n        | Worksheet properties\n        |--------------------------------------------------------------------------\n        |\n        | Configure e.g. default title, creator, subject,...\n        |\n        */\n        'properties'  => [\n            'creator'        => '',\n            'lastModifiedBy' => '',\n            'title'          => '',\n            'description'    => '',\n            'subject'        => '',\n            'keywords'       => '',\n            'category'       => '',\n            'manager'        => '',\n            'company'        => '',\n        ],\n\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Extension detector\n    |--------------------------------------------------------------------------\n    |\n    | Configure here which writer/reader type should be used when the package\n    | needs to guess the correct type based on the extension alone.\n    |\n    */\n    'extension_detector' => [\n        'xlsx'     => Excel::XLSX,\n        'xlsm'     => Excel::XLSX,\n        'xltx'     => Excel::XLSX,\n        'xltm'     => Excel::XLSX,\n        'xls'      => Excel::XLS,\n        'xlt'      => Excel::XLS,\n        'ods'      => Excel::ODS,\n        'ots'      => Excel::ODS,\n        'slk'      => Excel::SLK,\n        'xml'      => Excel::XML,\n        'gnumeric' => Excel::GNUMERIC,\n        'htm'      => Excel::HTML,\n        'html'     => Excel::HTML,\n        'csv'      => Excel::CSV,\n        'tsv'      => Excel::TSV,\n\n        /*\n        |--------------------------------------------------------------------------\n        | PDF Extension\n        |--------------------------------------------------------------------------\n        |\n        | Configure here which Pdf driver should be used by default.\n        | Available options: Excel::MPDF | Excel::TCPDF | Excel::DOMPDF\n        |\n        */\n        'pdf'      => Excel::DOMPDF,\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Value Binder\n    |--------------------------------------------------------------------------\n    |\n    | PhpSpreadsheet offers a way to hook into the process of a value being\n    | written to a cell. In there some assumptions are made on how the\n    | value should be formatted. If you want to change those defaults,\n    | you can implement your own default value binder.\n    |\n    | Possible value binders:\n    |\n    | [x] Maatwebsite\\Excel\\DefaultValueBinder::class\n    | [x] PhpOffice\\PhpSpreadsheet\\Cell\\StringValueBinder::class\n    | [x] PhpOffice\\PhpSpreadsheet\\Cell\\AdvancedValueBinder::class\n    |\n    */\n    'value_binder' => [\n        'default' => Maatwebsite\\Excel\\DefaultValueBinder::class,\n    ],\n\n    'cache' => [\n        /*\n        |--------------------------------------------------------------------------\n        | Default cell caching driver\n        |--------------------------------------------------------------------------\n        |\n        | By default PhpSpreadsheet keeps all cell values in memory, however when\n        | dealing with large files, this might result into memory issues. If you\n        | want to mitigate that, you can configure a cell caching driver here.\n        | When using the illuminate driver, it will store each value in a the\n        | cache store. This can slow down the process, because it needs to\n        | store each value. You can use the \"batch\" store if you want to\n        | only persist to the store when the memory limit is reached.\n        |\n        | Drivers: memory|illuminate|batch\n        |\n        */\n        'driver'     => 'memory',\n\n        /*\n        |--------------------------------------------------------------------------\n        | Batch memory caching\n        |--------------------------------------------------------------------------\n        |\n        | When dealing with the \"batch\" caching driver, it will only\n        | persist to the store when the memory limit is reached.\n        | Here you can tweak the memory limit to your liking.\n        |\n        */\n        'batch'     => [\n            'memory_limit' => 60000,\n        ],\n\n        /*\n        |--------------------------------------------------------------------------\n        | Illuminate cache\n        |--------------------------------------------------------------------------\n        |\n        | When using the \"illuminate\" caching driver, it will automatically use\n        | your default cache store. However if you prefer to have the cell\n        | cache on a separate store, you can configure the store name here.\n        | You can use any store defined in your cache config. When leaving\n        | at \"null\" it will use the default store.\n        |\n        */\n        'illuminate' => [\n            'store' => null,\n        ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Transaction Handler\n    |--------------------------------------------------------------------------\n    |\n    | By default the import is wrapped in a transaction. This is useful\n    | for when an import may fail and you want to retry it. With the\n    | transactions, the previous import gets rolled-back.\n    |\n    | You can disable the transaction handler by setting this to null.\n    | Or you can choose a custom made transaction handler here.\n    |\n    | Supported handlers: null|db\n    |\n    */\n    'transactions' => [\n        'handler' => 'db',\n        'db'      => [\n            'connection' => null,\n        ],\n    ],\n\n    'temporary_files' => [\n\n        /*\n        |--------------------------------------------------------------------------\n        | Local Temporary Path\n        |--------------------------------------------------------------------------\n        |\n        | When exporting and importing files, we use a temporary file, before\n        | storing reading or downloading. Here you can customize that path.\n        |\n        */\n        'local_path'          => storage_path('framework/cache/laravel-excel'),\n\n        /*\n        |--------------------------------------------------------------------------\n        | Remote Temporary Disk\n        |--------------------------------------------------------------------------\n        |\n        | When dealing with a multi server setup with queues in which you\n        | cannot rely on having a shared local temporary path, you might\n        | want to store the temporary file on a shared disk. During the\n        | queue executing, we'll retrieve the temporary file from that\n        | location instead. When left to null, it will always use\n        | the local path. This setting only has effect when using\n        | in conjunction with queued imports and exports.\n        |\n        */\n        'remote_disk'         => null,\n        'remote_prefix'       => null,\n\n        /*\n        |--------------------------------------------------------------------------\n        | Force Resync\n        |--------------------------------------------------------------------------\n        |\n        | When dealing with a multi server setup as above, it's possible\n        | for the clean up that occurs after entire queue has been run to only\n        | cleanup the server that the last AfterImportJob runs on. The rest of the server\n        | would still have the local temporary file stored on it. In this case your\n        | local storage limits can be exceeded and future imports won't be processed.\n        | To mitigate this you can set this config value to be true, so that after every\n        | queued chunk is processed the local temporary file is deleted on the server that\n        | processed it.\n        |\n        */\n        'force_resync_remote' => null,\n    ],\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', 'local'),\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\", \"sftp\", \"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' => storage_path('app/public'),\n            'url' => env('APP_URL').'/storage',\n            'visibility' => 'public',\n        ],\n\n        's3' => [\n            'driver' => 's3',\n            'key' => env('AWS_ACCESS_KEY_ID'),\n            'secret' => env('AWS_SECRET_ACCESS_KEY'),\n            'region' => env('AWS_DEFAULT_REGION'),\n            'bucket' => env('AWS_BUCKET'),\n            'url' => env('AWS_URL'),\n        ],\n\n    ],\n\n];\n"
  },
  {
    "path": "config/hashing.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Hash Driver\n    |--------------------------------------------------------------------------\n    |\n    | This option controls the default hash driver that will be used to hash\n    | passwords for your application. By default, the bcrypt algorithm is\n    | used; however, you remain free to modify this option if you wish.\n    |\n    | Supported: \"bcrypt\", \"argon\", \"argon2id\"\n    |\n    */\n\n    'driver' => 'bcrypt',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Bcrypt Options\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify the configuration options that should be used when\n    | passwords are hashed using the Bcrypt algorithm. This will allow you\n    | to control the amount of time it takes to hash the given password.\n    |\n    */\n\n    'bcrypt' => [\n        'rounds' => env('BCRYPT_ROUNDS', 10),\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Argon Options\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify the configuration options that should be used when\n    | passwords are hashed using the Argon algorithm. These will allow you\n    | to control the amount of time it takes to hash the given password.\n    |\n    */\n\n    'argon' => [\n        'memory' => 1024,\n        'threads' => 2,\n        'time' => 2,\n    ],\n\n];\n"
  },
  {
    "path": "config/logging.php",
    "content": "<?php\n\nuse Monolog\\Handler\\StreamHandler;\nuse Monolog\\Handler\\SyslogUdpHandler;\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Log Channel\n    |--------------------------------------------------------------------------\n    |\n    | This option defines the default log channel that gets used when writing\n    | messages to the logs. The name specified in this option should match\n    | one of the channels defined in the \"channels\" configuration array.\n    |\n    */\n\n    'default' => env('LOG_CHANNEL', 'stack'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Log Channels\n    |--------------------------------------------------------------------------\n    |\n    | Here you may configure the log channels 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 Drivers: \"single\", \"daily\", \"slack\", \"syslog\",\n    |                    \"errorlog\", \"monolog\",\n    |                    \"custom\", \"stack\"\n    |\n    */\n\n    'channels' => [\n        'stack' => [\n            'driver' => 'stack',\n            'channels' => ['daily'],\n            'ignore_exceptions' => false,\n        ],\n\n        'single' => [\n            'driver' => 'single',\n            'path' => storage_path('logs/laravel.log'),\n            'level' => 'debug',\n        ],\n\n        'daily' => [\n            'driver' => 'daily',\n            'path' => storage_path('logs/laravel.log'),\n            'level' => 'debug',\n            'days' => 14,\n        ],\n\n        'slack' => [\n            'driver' => 'slack',\n            'url' => env('LOG_SLACK_WEBHOOK_URL'),\n            'username' => 'Laravel Log',\n            'emoji' => ':boom:',\n            'level' => 'critical',\n        ],\n\n        'papertrail' => [\n            'driver' => 'monolog',\n            'level' => 'debug',\n            'handler' => SyslogUdpHandler::class,\n            'handler_with' => [\n                'host' => env('PAPERTRAIL_URL'),\n                'port' => env('PAPERTRAIL_PORT'),\n            ],\n        ],\n\n        'stderr' => [\n            'driver' => 'monolog',\n            'handler' => StreamHandler::class,\n            'formatter' => env('LOG_STDERR_FORMATTER'),\n            'with' => [\n                'stream' => 'php://stderr',\n            ],\n        ],\n\n        'syslog' => [\n            'driver' => 'syslog',\n            'level' => 'debug',\n        ],\n\n        'errorlog' => [\n            'driver' => 'errorlog',\n            'level' => 'debug',\n        ],\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\", \"postmark\", \"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', 'hello@example.com'),\n        'name' => env('MAIL_FROM_NAME', 'Example'),\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    |--------------------------------------------------------------------------\n    | Log Channel\n    |--------------------------------------------------------------------------\n    |\n    | If you are using the \"log\" driver, you may specify the logging channel\n    | if you prefer to keep mail messages separate from other log entries\n    | for simpler reading. Otherwise, the default channel will be used.\n    |\n    */\n\n    'log_channel' => env('MAIL_LOG_CHANNEL'),\n\n];\n"
  },
  {
    "path": "config/permission.php",
    "content": "<?php\n\nreturn [\n\n    'models' => [\n\n        /*\n         * When using the \"HasPermissions\" trait from this package, we need to know which\n         * Eloquent model should be used to retrieve your permissions. Of course, it\n         * is often just the \"Permission\" model but you may use whatever you like.\n         *\n         * The model you want to use as a Permission model needs to implement the\n         * `Spatie\\Permission\\Contracts\\Permission` contract.\n         */\n\n        'permission' => Spatie\\Permission\\Models\\Permission::class,\n\n        /*\n         * When using the \"HasRoles\" trait from this package, we need to know which\n         * Eloquent model should be used to retrieve your roles. Of course, it\n         * is often just the \"Role\" model but you may use whatever you like.\n         *\n         * The model you want to use as a Role model needs to implement the\n         * `Spatie\\Permission\\Contracts\\Role` contract.\n         */\n\n        'role' => Spatie\\Permission\\Models\\Role::class,\n\n    ],\n\n    'table_names' => [\n\n        /*\n         * When using the \"HasRoles\" trait from this package, we need to know which\n         * table should be used to retrieve your roles. We have chosen a basic\n         * default value but you may easily change it to any table you like.\n         */\n\n        'roles' => 'roles',\n\n        /*\n         * When using the \"HasPermissions\" trait from this package, we need to know which\n         * table should be used to retrieve your permissions. We have chosen a basic\n         * default value but you may easily change it to any table you like.\n         */\n\n        'permissions' => 'permissions',\n\n        /*\n         * When using the \"HasPermissions\" trait from this package, we need to know which\n         * table should be used to retrieve your models permissions. We have chosen a\n         * basic default value but you may easily change it to any table you like.\n         */\n\n        'model_has_permissions' => 'model_has_permissions',\n\n        /*\n         * When using the \"HasRoles\" trait from this package, we need to know which\n         * table should be used to retrieve your models roles. We have chosen a\n         * basic default value but you may easily change it to any table you like.\n         */\n\n        'model_has_roles' => 'model_has_roles',\n\n        /*\n         * When using the \"HasRoles\" trait from this package, we need to know which\n         * table should be used to retrieve your roles permissions. We have chosen a\n         * basic default value but you may easily change it to any table you like.\n         */\n\n        'role_has_permissions' => 'role_has_permissions',\n    ],\n\n    'column_names' => [\n\n        /*\n         * Change this if you want to name the related model primary key other than\n         * `model_id`.\n         *\n         * For example, this would be nice if your primary keys are all UUIDs. In\n         * that case, name this `model_uuid`.\n         */\n\n        'model_morph_key' => 'model_id',\n    ],\n\n    /*\n     * When set to true, the required permission names are added to the exception\n     * message. This could be considered an information leak in some contexts, so\n     * the default setting is false here for optimum safety.\n     */\n\n    'display_permission_in_exception' => false,\n\n    /*\n     * When set to true, the required role names are added to the exception\n     * message. This could be considered an information leak in some contexts, so\n     * the default setting is false here for optimum safety.\n     */\n\n    'display_role_in_exception' => false,\n\n    /*\n     * By default wildcard permission lookups are disabled.\n     */\n\n    'enable_wildcard_permission' => false,\n\n    'cache' => [\n\n        /*\n         * By default all permissions are cached for 24 hours to speed up performance.\n         * When permissions or roles are updated the cache is flushed automatically.\n         */\n\n        'expiration_time' => \\DateInterval::createFromDateString('24 hours'),\n\n        /*\n         * The cache key used to store all permissions.\n         */\n\n        'key' => 'spatie.permission.cache',\n\n        /*\n         * When checking for a permission against a model by passing a Permission\n         * instance to the check, this key determines what attribute on the\n         * Permissions model is used to cache against.\n         *\n         * Ideally, this should match your preferred way of checking permissions, eg:\n         * `$user->can('view-posts')` would be 'name'.\n         */\n\n        'model_key' => 'name',\n\n        /*\n         * You may optionally indicate a specific cache driver to use for permission and\n         * role caching using any of the `store` drivers listed in the cache.php config\n         * file. Using 'default' here means to use the `default` set in cache.php.\n         */\n\n        'store' => 'default',\n    ],\n];\n"
  },
  {
    "path": "config/queue.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Queue Connection Name\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 every one. Here you may define a default connection.\n    |\n    */\n\n    'default' => env('QUEUE_CONNECTION', '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    | Drivers: \"sync\", \"database\", \"beanstalkd\", \"sqs\", \"redis\", \"null\"\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            'block_for' => 0,\n        ],\n\n        'sqs' => [\n            'driver' => 'sqs',\n            'key' => env('AWS_ACCESS_KEY_ID'),\n            'secret' => env('AWS_SECRET_ACCESS_KEY'),\n            'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'),\n            'queue' => env('SQS_QUEUE', 'your-queue-name'),\n            'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),\n        ],\n\n        'redis' => [\n            'driver' => 'redis',\n            'connection' => 'default',\n            'queue' => env('REDIS_QUEUE', 'default'),\n            'retry_after' => 90,\n            'block_for' => null,\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/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        'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'),\n    ],\n\n    'postmark' => [\n        'token' => env('POSTMARK_TOKEN'),\n    ],\n\n    'ses' => [\n        'key' => env('AWS_ACCESS_KEY_ID'),\n        'secret' => env('AWS_SECRET_ACCESS_KEY'),\n        'region' => env('AWS_DEFAULT_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        'webhook' => [\n            'secret' => env('STRIPE_WEBHOOK_SECRET'),\n            'tolerance' => env('STRIPE_WEBHOOK_TOLERANCE', 300),\n        ],\n    ],\n\n    'telegram-bot-api' => [\n        'token' => env('TELEGRAM_BOT_TOKEN', 'YOUR BOT TOKEN HERE')\n    ],\n];\n"
  },
  {
    "path": "config/session.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Str;\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\", \"dynamodb\", \"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' => env('SESSION_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' => env('SESSION_CONNECTION', null),\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\", \"memcached\", or \"dynamodb\" session drivers you may\n    | list a cache store that should be used for these sessions. This value\n    | must match with one of the application's configured cache \"stores\".\n    |\n    */\n\n    'store' => env('SESSION_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' => env(\n        'SESSION_COOKIE',\n        Str::slug(env('APP_NAME', 'laravel'), '_').'_session'\n    ),\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    |--------------------------------------------------------------------------\n    | Same-Site Cookies\n    |--------------------------------------------------------------------------\n    |\n    | This option determines how your cookies behave when cross-site requests\n    | take place, and can be used to mitigate CSRF attacks. By default, we\n    | do not enable this as other CSRF protection services are in place.\n    |\n    | Supported: \"lax\", \"strict\"\n    |\n    */\n\n    'same_site' => null,\n\n];\n"
  },
  {
    "path": "config/sweet-alert.php",
    "content": "<?php\n\nreturn [\n    /*\n     * This sets the global autoclose for all alerts.\n     * If you want to change a specific  alert chain ->autoclose(milliseconds) on the end.\n     */\n    'autoclose' => 2500,\n];\n"
  },
  {
    "path": "config/sweetalert.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | CDN LINK\n    |--------------------------------------------------------------------------\n    | By default SweetAlert2 use its local sweetalert.all.js\n    | file.\n    | However, you can use its cdn if you want.\n    |\n    */\n\n    'cdn' => env('SWEET_ALERT_CDN'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | AutoClose Timer\n    |--------------------------------------------------------------------------\n    |\n    | This is for the all Modal windows.\n    | For specific modal just use the autoClose() helper method.\n    |\n    */\n\n    'timer' => env('SWEET_ALERT_TIMER', 5000),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Width\n    |--------------------------------------------------------------------------\n    |\n    | Modal window width, including paddings (box-sizing: border-box).\n    | Can be in px or %.\n    | The default width is 32rem.\n    | This is for the all Modal windows.\n    | for particular modal just use the width() helper method.\n    */\n\n    'width' => env('SWEET_ALERT_WIDTH', '32rem'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Height Auto\n    |--------------------------------------------------------------------------\n    | By default, SweetAlert2 sets html's and body's CSS height to auto !important.\n    | If this behavior isn't compatible with your project's layout,\n    | set heightAuto to false.\n    |\n    */\n\n    'height_auto' => env('SWEET_ALERT_HEIGHT_AUTO', true),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Padding\n    |--------------------------------------------------------------------------\n    |\n    | Modal window padding.\n    | Can be in px or %.\n    | The default padding is 1.25rem.\n    | This is for the all Modal windows.\n    | for particular modal just use the padding() helper method.\n    */\n\n    'padding' => env('SWEET_ALERT_PADDING', '1.25rem'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Animation\n    |--------------------------------------------------------------------------\n    | Custom animation with [Animate.css](https://daneden.github.io/animate.css/)\n    | If set to false, modal CSS animation will be use default ones.\n    | For specific modal just use the animation() helper method.\n    |\n    */\n\n    'animation' => [\n        'enable' => env('SWEET_ALERT_ANIMATION_ENABLE', false),\n    ],\n\n    'animatecss' => env('SWEET_ALERT_ANIMATECSS', 'https://cdn.jsdelivr.net/npm/animate.css'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | ShowConfirmButton\n    |--------------------------------------------------------------------------\n    | If set to false, a \"Confirm\"-button will not be shown.\n    | It can be useful when you're using custom HTML description.\n    | This is for the all Modal windows.\n    | For specific modal just use the showConfirmButton() helper method.\n    |\n    */\n\n    'show_confirm_button' => env('SWEET_ALERT_CONFIRM_BUTTON', true),\n\n    /*\n    |--------------------------------------------------------------------------\n    | ShowCloseButton\n    |--------------------------------------------------------------------------\n    | If set to true, a \"Close\"-button will be shown,\n    | which the user can click on to dismiss the modal.\n    | This is for the all Modal windows.\n    | For specific modal just use the showCloseButton() helper method.\n    |\n    */\n\n    'show_close_button' => env('SWEET_ALERT_CLOSE_BUTTON', false),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Toast position\n    |--------------------------------------------------------------------------\n    | Modal window or toast position, can be 'top',\n    | 'top-start', 'top-end', 'center', 'center-start',\n    | 'center-end', 'bottom', 'bottom-start', or 'bottom-end'.\n    | For specific modal just use the position() helper method.\n    |\n    */\n\n    'toast_position' => env('SWEET_ALERT_TOAST_POSITION', 'top-end'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Middleware\n    |--------------------------------------------------------------------------\n    | Modal window or toast, config for the Middleware\n    |\n    */\n\n    'middleware' => [\n\n        'toast_position' => env('SWEET_ALERT_MIDDLEWARE_TOAST_POSITION', 'top-end'),\n\n        'toast_close_button' => env('SWEET_ALERT_MIDDLEWARE_TOAST_CLOSE_BUTTON', true),\n\n        'alert_auto_close' => env('SWEET_ALERT_MIDDLEWARE_ALERT_AUTO_CLOSE', 5000),\n\n        'auto_display_error_messages' => env('SWEET_ALERT_AUTO_DISPLAY_ERROR_MESSAGES', false),\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Class\n    |--------------------------------------------------------------------------\n    | A custom CSS class for the modal:\n    |\n    */\n\n    'customClass' => [\n\n        'container' => env('SWEET_ALERT_CONTAINER_CLASS'),\n        'popup' => env('SWEET_ALERT_POPUP_CLASS'),\n        'header' => env('SWEET_ALERT_HEADER_CLASS'),\n        'title' => env('SWEET_ALERT_TITLE_CLASS'),\n        'closeButton' => env('SWEET_ALERT_CLOSE_BUTTON_CLASS'),\n        'icon' => env('SWEET_ALERT_ICON_CLASS'),\n        'image' => env('SWEET_ALERT_IMAGE_CLASS'),\n        'content' => env('SWEET_ALERT_CONTENT_CLASS'),\n        'input' => env('SWEET_ALERT_INPUT_CLASS'),\n        'actions' => env('SWEET_ALERT_ACTIONS_CLASS'),\n        'confirmButton' => env('SWEET_ALERT_CONFIRM_BUTTON_CLASS'),\n        'cancelButton' => env('SWEET_ALERT_CANCEL_BUTTON_CLASS'),\n        'footer' => env('SWEET_ALERT_FOOTER_CLASS'),\n    ],\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' => env(\n        'VIEW_COMPILED_PATH',\n        realpath(storage_path('framework/views'))\n    ),\n\n];\n"
  },
  {
    "path": "database/.gitignore",
    "content": "*.sqlite\n*.sqlite-journal\n"
  },
  {
    "path": "database/factories/UserFactory.php",
    "content": "<?php\n\n/** @var \\Illuminate\\Database\\Eloquent\\Factory $factory */\nuse App\\User;\nuse Illuminate\\Support\\Str;\nuse Faker\\Generator as Faker;\n\n/*\n|--------------------------------------------------------------------------\n| Model Factories\n|--------------------------------------------------------------------------\n|\n| This directory should contain each of the model factory definitions for\n| your application. Factories provide a convenient way to generate new\n| model instances for testing / seeding your application's database.\n|\n*/\n\n$factory->define(User::class, function (Faker $faker) {\n    return [\n        'name' => $faker->name,\n        'email' => $faker->unique()->safeEmail,\n        'email_verified_at' => now(),\n        'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password\n        'remember_token' => Str::random(10),\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->bigIncrements('id');\n            $table->string('name');\n            $table->string('email')->unique();\n            $table->timestamp('email_verified_at')->nullable();\n            $table->enum('auth',['Admin','Karyawan']);\n            $table->enum('status',['Active','Not Active'])->default('Active');\n            $table->string('nama_cabang')->nullable();\n            $table->string('alamat_cabang')->nullable();\n            $table->string('alamat')->nullable();\n            $table->string('no_telp')->nullable();\n            $table->string('password');\n            $table->rememberToken();\n            $table->timestamps();\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/2019_05_24_091904_create_transaksis_table.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreateTransaksisTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('transaksis', function (Blueprint $table) {\n            $table->id();\n            $table->string('invoice');\n            $table->string('customer_id');\n            $table->string('user_id');\n            $table->string('tgl_transaksi');\n            $table->string('customer');\n            $table->string('email_customer');\n            $table->enum('status_order',['Process','Done','Delivery'])->default('Process');\n            $table->enum('status_payment',['Pending','Success']);\n            $table->integer('harga_id');\n            $table->string('kg');\n            $table->string('hari');\n            $table->string('harga');\n            $table->string('disc')->nullable();\n            $table->string('harga_akhir')->nullable();\n            $table->string('tgl');\n            $table->string('bulan');\n            $table->string('tahun');\n            $table->string('tgl_ambil')->nullable();\n            $table->timestamps();\n\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('transaksis');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2019_05_24_094505_create_hargas_table.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreateHargasTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('hargas', function (Blueprint $table) {\n            $table->id();\n            $table->unsignedBigInteger('user_id');\n            $table->string('jenis');\n            $table->string('kg');\n            $table->string('harga');\n            $table->string('status');\n            $table->string('hari');\n            $table->timestamps();\n\n            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade')->onUpdate('cascade');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('hargas');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2021_03_19_231220_create_page_settings_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreatePageSettingsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('page_settings', function (Blueprint $table) {\n            $table->id();\n            $table->string('judul')->nullable();\n            $table->string('img_hero')->nullable();\n            $table->string('tentang')->nullable();\n            $table->string('facebook')->nullable();\n            $table->string('instagram')->nullable();\n            $table->string('twitter')->nullable();\n            $table->string('whatsapp')->nullable();\n            $table->string('no_telp')->nullable();\n            $table->string('email')->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('page_settings');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2021_03_21_124956_add_theme_to_users_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass AddThemeToUsersTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('users', function (Blueprint $table) {\n          $table->enum('theme',[0,1])->default(0)->after('no_telp');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('users', function (Blueprint $table) {\n          $table->dropColumn('theme');\n          $table->dropColumn('email_set');\n        });\n    }\n}\n"
  },
  {
    "path": "database/migrations/2021_03_22_001021_create_laundry_settings_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateLaundrySettingsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('laundry_settings', function (Blueprint $table) {\n            $table->id();\n            $table->unsignedBigInteger('user_id');\n            $table->integer('target_day')->default(0);\n            $table->integer('target_month')->default(0);\n            $table->integer('target_year')->default(0);\n            $table->timestamps();\n\n            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade')->onUpdate('cascade');\n\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('laundry_settings');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2021_05_07_100208_create_permission_tables.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreatePermissionTables extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        $tableNames = config('permission.table_names');\n        $columnNames = config('permission.column_names');\n\n        if (empty($tableNames)) {\n            throw new \\Exception('Error: config/permission.php not loaded. Run [php artisan config:clear] and try again.');\n        }\n\n        Schema::create($tableNames['permissions'], function (Blueprint $table) {\n            $table->bigIncrements('id');\n            $table->string('name');       // For MySQL 8.0 use string('name', 125);\n            $table->string('guard_name'); // For MySQL 8.0 use string('guard_name', 125);\n            $table->timestamps();\n\n            $table->unique(['name', 'guard_name']);\n        });\n\n        Schema::create($tableNames['roles'], function (Blueprint $table) {\n            $table->bigIncrements('id');\n            $table->string('name');       // For MySQL 8.0 use string('name', 125);\n            $table->string('guard_name'); // For MySQL 8.0 use string('guard_name', 125);\n            $table->timestamps();\n\n            $table->unique(['name', 'guard_name']);\n        });\n\n        Schema::create($tableNames['model_has_permissions'], function (Blueprint $table) use ($tableNames, $columnNames) {\n            $table->unsignedBigInteger('permission_id');\n\n            $table->string('model_type');\n            $table->unsignedBigInteger($columnNames['model_morph_key']);\n            $table->index([$columnNames['model_morph_key'], 'model_type'], 'model_has_permissions_model_id_model_type_index');\n\n            $table->foreign('permission_id')\n                ->references('id')\n                ->on($tableNames['permissions'])\n                ->onDelete('cascade');\n\n            $table->primary(['permission_id', $columnNames['model_morph_key'], 'model_type'],\n                    'model_has_permissions_permission_model_type_primary');\n        });\n\n        Schema::create($tableNames['model_has_roles'], function (Blueprint $table) use ($tableNames, $columnNames) {\n            $table->unsignedBigInteger('role_id');\n\n            $table->string('model_type');\n            $table->unsignedBigInteger($columnNames['model_morph_key']);\n            $table->index([$columnNames['model_morph_key'], 'model_type'], 'model_has_roles_model_id_model_type_index');\n\n            $table->foreign('role_id')\n                ->references('id')\n                ->on($tableNames['roles'])\n                ->onDelete('cascade');\n\n            $table->primary(['role_id', $columnNames['model_morph_key'], 'model_type'],\n                    'model_has_roles_role_model_type_primary');\n        });\n\n        Schema::create($tableNames['role_has_permissions'], function (Blueprint $table) use ($tableNames) {\n            $table->unsignedBigInteger('permission_id');\n            $table->unsignedBigInteger('role_id');\n\n            $table->foreign('permission_id')\n                ->references('id')\n                ->on($tableNames['permissions'])\n                ->onDelete('cascade');\n\n            $table->foreign('role_id')\n                ->references('id')\n                ->on($tableNames['roles'])\n                ->onDelete('cascade');\n\n            $table->primary(['permission_id', 'role_id'], 'role_has_permissions_permission_id_role_id_primary');\n        });\n\n        app('cache')\n            ->store(config('permission.cache.store') != 'default' ? config('permission.cache.store') : null)\n            ->forget(config('permission.cache.key'));\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        $tableNames = config('permission.table_names');\n\n        if (empty($tableNames)) {\n            throw new \\Exception('Error: config/permission.php not found and defaults could not be merged. Please publish the package configuration before proceeding, or drop the tables manually.');\n        }\n\n        Schema::drop($tableNames['role_has_permissions']);\n        Schema::drop($tableNames['model_has_roles']);\n        Schema::drop($tableNames['model_has_permissions']);\n        Schema::drop($tableNames['roles']);\n        Schema::drop($tableNames['permissions']);\n    }\n}\n"
  },
  {
    "path": "database/migrations/2021_05_07_135323_create_data_banks_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateDataBanksTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('data_banks', function (Blueprint $table) {\n            $table->id();\n            $table->unsignedBigInteger('user_id');\n            $table->string('nama_bank');\n            $table->integer('no_rekening');\n            $table->string('nama_pemilik');\n            $table->timestamps();\n\n            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade')->onUpdate('cascade');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('data_banks');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2021_05_07_155403_add_field_in_transaksi.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass AddFieldInTransaksi extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('transaksis', function (Blueprint $table) {\n          $table->enum('jenis_pembayaran',['Tunai','Transfer'])->after('harga_akhir');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('transaksis', function (Blueprint $table) {\n            //\n        });\n    }\n}\n"
  },
  {
    "path": "database/migrations/2021_05_11_130732_create_notifications_settings_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateNotificationsSettingsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('notifications_settings', function (Blueprint $table) {\n            $table->id();\n            $table->unsignedBigInteger('user_id');\n            $table->boolean('telegram_order_masuk');\n            $table->boolean('telegram_order_selesai');\n            $table->boolean('email');\n            $table->timestamps();\n            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade')->onUpdate('cascade');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('notifications_settings');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2021_08_08_100000_create_banks_tables.php",
    "content": "<?php\n\n/*\n * This file is part of the IndoBank package.\n *\n * (c) Andri Desmana <andridesmana.pw | andridesmana29@gmail.com>\n *\n */\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreateBanksTables extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('banks', function(Blueprint $table){\n            $table->id();\n            $table->string('sandi_bank',20);\n            $table->string('nama_bank');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::drop('banks');\n    }\n}"
  },
  {
    "path": "database/migrations/2021_12_30_231550_add_field_username_telegram_channel_to_notifications_settings_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass AddFieldUsernameTelegramChannelToNotificationsSettingsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('notifications_settings', function (Blueprint $table) {\n          $table->string('telegram_channel_masuk')->nullable()->after('email');\n          $table->string('telegram_channel_selesai')->nullable()->after('telegram_channel_masuk');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('notifications_settings', function (Blueprint $table) {\n            //\n        });\n    }\n}\n"
  },
  {
    "path": "database/migrations/2022_01_28_171610_add_field_foto_to_users_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass AddFieldFotoToUsersTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('users', function (Blueprint $table) {\n          $table->string('foto')->after('theme')->nullable();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('users', function (Blueprint $table) {\n            //\n        });\n    }\n}\n"
  },
  {
    "path": "database/migrations/2022_01_29_185408_add_field_token_wa_to_notifications_settings_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass AddFieldTokenWaToNotificationsSettingsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('notifications_settings', function (Blueprint $table) {\n          $table->boolean('wa_order_selesai')->after('telegram_channel_selesai');\n          $table->string('wa_token')->after('wa_order_selesai')->nullable();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('notifications_settings', function (Blueprint $table) {\n            //\n        });\n    }\n}\n"
  },
  {
    "path": "database/migrations/2022_01_31_105111_update_field_auth_in_users_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass UpdateFieldAuthInUsersTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        \\DB::statement(\"ALTER TABLE `users` CHANGE `auth` `auth` ENUM('Admin','Karyawan','Customer') CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL\");\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('users', function (Blueprint $table) {\n            //\n        });\n    }\n}\n"
  },
  {
    "path": "database/migrations/2022_01_31_112034_add_field_karyawan_id_wa_in_users_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass AddFieldKaryawanIdWaInUsersTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('users', function (Blueprint $table) {\n          $table->unsignedBigInteger('karyawan_id')->after('id')->nullable();\n          $table->foreign('karyawan_id')->references('id')->on('users')->onDelete('cascade')->onUpdate('cascade');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('users', function (Blueprint $table) {\n            //\n        });\n    }\n}\n"
  },
  {
    "path": "database/migrations/2022_02_02_220553_create_jobs_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateJobsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('jobs', function (Blueprint $table) {\n            $table->bigIncrements('id');\n            $table->string('queue')->index();\n            $table->longText('payload');\n            $table->unsignedTinyInteger('attempts');\n            $table->unsignedInteger('reserved_at')->nullable();\n            $table->unsignedInteger('available_at');\n            $table->unsignedInteger('created_at');\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('jobs');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2022_02_02_231121_create_failed_jobs_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateFailedJobsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('failed_jobs', function (Blueprint $table) {\n            $table->id();\n            $table->string('uuid')->unique();\n            $table->text('connection');\n            $table->text('queue');\n            $table->longText('payload');\n            $table->longText('exception');\n            $table->timestamp('failed_at')->useCurrent();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('failed_jobs');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2022_02_03_144826_add_field_point_in_users_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass AddFieldPointInUsersTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::table('users', function (Blueprint $table) {\n          $table->integer('point')->after('foto')->default(0);\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::table('users', function (Blueprint $table) {\n            //\n        });\n    }\n}\n"
  },
  {
    "path": "database/migrations/2022_09_27_125933_create_notifications_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\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->id();\n            $table->integer('transaksi_id')->nullable();\n            $table->integer('user_id')->nullable();\n            $table->string('kategori');\n            $table->string('title');\n            $table->text('body');\n            $table->boolean('is_read')->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('notifications');\n    }\n}\n"
  },
  {
    "path": "database/seeders/DatabaseSeeder.php",
    "content": "<?php\nnamespace Database\\Seeders;\n\nuse Illuminate\\Database\\Seeder;\n\nclass DatabaseSeeder extends Seeder\n{\n    /**\n     * Seed the application's database.\n     *\n     * @return void\n     */\n    public function run()\n    {\n        $this->call(SettingPageSeeder::class);\n        $this->call(RoleSeeder::class);\n        $this->call(IndoBankSeeder::class);\n        $this->call(addRoleSeeder::class);\n    }\n}\n"
  },
  {
    "path": "database/seeders/IndoBankSeeder.php",
    "content": "<?php\n\n/*\n * This file is part of the IndoBank package.\n *\n * (c) Andri Desmana <andridesmana.pw | andridesmana29@gmail.com>\n *\n */\n\nnamespace Database\\Seeders;\n\nuse Illuminate\\Database\\Seeder;\nuse Andes2912\\IndoBank\\RawDataGetter;\nuse Illuminate\\Support\\Facades\\DB;\n\nclass IndoBankSeeder extends Seeder\n{\n    /**\n     * Run the database seeds.\n     *\n     * @deprecated\n     *\n     * @return void\n     */\n    public function run()\n    {\n        // Get Data\n        $banks = RawDataGetter::getBanks();\n\n        // Insert Data to Database\n        DB::table('banks')->insert($banks);\n    }\n}"
  },
  {
    "path": "database/seeders/RoleSeeder.php",
    "content": "<?php\n\nnamespace Database\\Seeders;\n\nuse Illuminate\\Database\\Seeder;\nuse Spatie\\Permission\\Models\\Role;\n\nclass RoleSeeder extends Seeder\n{\n    /**\n     * Run the database seeds.\n     *\n     * @return void\n     */\n    public function run()\n    {\n        $role = Role::create(['name' => 'Karyawan']);\n    }\n}\n"
  },
  {
    "path": "database/seeders/SettingPageSeeder.php",
    "content": "<?php\n\nnamespace Database\\Seeders;\n\nuse Illuminate\\Database\\Seeder;\nuse App\\Models\\PageSettings;\n\nclass SettingPageSeeder extends Seeder\n{\n    /**\n     * Run the database seeds.\n     *\n     * @return void\n     */\n    public function run()\n    {\n      $setpage = PageSettings::create([\n        'judul'   => 'E-Laundry'\n      ]);\n    }\n}\n"
  },
  {
    "path": "database/seeders/addRoleSeeder.php",
    "content": "<?php\n\nnamespace Database\\Seeders;\n\nuse Illuminate\\Database\\Seeder;\nuse Spatie\\Permission\\Models\\Role;\n\nclass addRoleSeeder extends Seeder\n{\n    /**\n     * Run the database seeds.\n     *\n     * @return void\n     */\n    public function run()\n    {\n       $role = Role::create(['name' => 'Customer']);\n    }\n}\n"
  },
  {
    "path": "package.json",
    "content": "{\n    \"private\": true,\n    \"scripts\": {\n        \"dev\": \"npm run development\",\n        \"development\": \"mix\",\n        \"watch\": \"mix watch\",\n        \"watch-poll\": \"mix watch -- --watch-options-poll=1000\",\n        \"hot\": \"mix watch --hot\",\n        \"prod\": \"npm run production\",\n        \"production\": \"mix --production\"\n    },\n    \"devDependencies\": {\n        \"axios\": \"^0.18\",\n        \"bootstrap\": \"^4.1.0\",\n        \"cross-env\": \"^5.1\",\n        \"jquery\": \"^3.2\",\n        \"laravel-mix\": \"^6.0.18\",\n        \"lodash\": \"^4.17.5\",\n        \"popper.js\": \"^1.12\",\n        \"postcss-loader\": \"~3.0.0\",\n        \"resolve-url-loader\": \"^2.3.1\",\n        \"sass\": \"^1.15.2\",\n        \"sass-loader\": \"^7.1.0\",\n        \"vue\": \"^2.5.17\",\n        \"vue-loader\": \"^15.9.6\",\n        \"vue-template-compiler\": \"^2.6.12\",\n        \"webpack\": \"^5.36.1\",\n        \"webpack-cli\": \"^4.6.0\"\n    }\n}\n"
  },
  {
    "path": "phpunit.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<phpunit backupGlobals=\"false\"\n         backupStaticAttributes=\"false\"\n         bootstrap=\"vendor/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=\"Unit\">\n            <directory suffix=\"Test.php\">./tests/Unit</directory>\n        </testsuite>\n\n        <testsuite name=\"Feature\">\n            <directory suffix=\"Test.php\">./tests/Feature</directory>\n        </testsuite>\n    </testsuites>\n    <filter>\n        <whitelist processUncoveredFilesFromWhitelist=\"true\">\n            <directory suffix=\".php\">./app</directory>\n        </whitelist>\n    </filter>\n    <php>\n        <server name=\"APP_ENV\" value=\"testing\"/>\n        <server name=\"BCRYPT_ROUNDS\" value=\"4\"/>\n        <server name=\"CACHE_DRIVER\" value=\"array\"/>\n        <server name=\"MAIL_DRIVER\" value=\"array\"/>\n        <server name=\"QUEUE_CONNECTION\" value=\"sync\"/>\n        <server name=\"SESSION_DRIVER\" value=\"array\"/>\n    </php>\n</phpunit>\n"
  },
  {
    "path": "public/.htaccess",
    "content": "<IfModule mod_rewrite.c>\n    <IfModule mod_negotiation.c>\n        Options -MultiViews -Indexes\n    </IfModule>\n\n    RewriteEngine On\n\n    # Handle Authorization Header\n    RewriteCond %{HTTP:Authorization} .\n    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]\n\n    # Redirect Trailing Slashes If Not A Folder...\n    RewriteCond %{REQUEST_FILENAME} !-d\n    RewriteCond %{REQUEST_URI} (.+)/$\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</IfModule>\n"
  },
  {
    "path": "public/backend/css/bootstrap-extended.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\na:focus {\n  outline: none; }\n\n.font-small-1 {\n  font-size: 0.7rem !important; }\n\n.font-small-2 {\n  font-size: 0.8rem !important; }\n\n.font-small-3 {\n  font-size: 0.9rem !important; }\n\n.font-medium-1 {\n  font-size: 1.1rem !important; }\n\n.font-medium-2 {\n  font-size: 1.2rem !important; }\n\n.font-medium-3 {\n  font-size: 1.3rem !important; }\n\n.font-medium-4 {\n  font-size: 1.4rem !important; }\n\n.font-medium-5 {\n  font-size: 1.5rem !important; }\n\n.font-large-1 {\n  font-size: 2rem !important; }\n\n.font-large-2 {\n  font-size: 3rem !important; }\n\n.font-large-3 {\n  font-size: 4rem !important; }\n\n.font-large-4 {\n  font-size: 5rem !important; }\n\n.font-large-5 {\n  font-size: 6rem !important; }\n\n.text-bold-300 {\n  font-weight: 300; }\n\n.text-bold-400 {\n  font-weight: 400; }\n\n.text-bold-500 {\n  font-weight: 500; }\n\n.text-bold-600 {\n  font-weight: 600; }\n\n.text-bold-700 {\n  font-weight: 700; }\n\n.text-italic {\n  font-style: italic; }\n\n.text-highlight {\n  padding: 4px 6px; }\n\ncode {\n  padding: .1rem .4rem;\n  font-size: 90%;\n  color: #e83e8c;\n  background-color: #eee;\n  border-radius: 0.25rem; }\n\npre {\n  background-color: #f7f7f9; }\n  pre code {\n    background-color: transparent !important; }\n\n.bd-example-row .row + .row {\n  margin-top: 1rem; }\n\n.bd-example-row .row > .col,\n.bd-example-row .row > [class^=\"col-\"] {\n  padding-top: .75rem;\n  padding-bottom: .75rem;\n  background-color: rgba(86, 61, 124, 0.15);\n  border: 1px solid rgba(86, 61, 124, 0.2); }\n\n.bd-example-row .flex-items-top,\n.bd-example-row .flex-items-middle,\n.bd-example-row .flex-items-bottom {\n  min-height: 6rem;\n  background-color: rgba(255, 0, 0, 0.1); }\n\n.bd-example-row-flex-cols .row {\n  min-height: 10rem;\n  background-color: rgba(255, 0, 0, 0.1); }\n\n.bd-highlight {\n  background-color: rgba(86, 61, 124, 0.15);\n  border: 1px solid rgba(86, 61, 124, 0.15); }\n\n.example-container {\n  width: 800px;\n  width: 100%;\n  padding-right: 14px;\n  padding-left: 14px;\n  margin-right: auto;\n  margin-left: auto; }\n\n.example-row {\n  display: flex;\n  flex-wrap: wrap;\n  margin-right: -14px;\n  margin-left: -14px; }\n\n.example-content-main {\n  position: relative;\n  width: 100%;\n  padding-right: 14px;\n  padding-left: 14px; }\n  @media (min-width: 576px) {\n    .example-content-main {\n      flex: 0 0 50%;\n      max-width: 50%; } }\n  @media (min-width: 992px) {\n    .example-content-main {\n      flex: 0 0 66.66667%;\n      max-width: 66.66667%; } }\n\n.example-content-secondary {\n  position: relative;\n  width: 100%;\n  padding-right: 14px;\n  padding-left: 14px; }\n  @media (min-width: 576px) {\n    .example-content-secondary {\n      flex: 0 0 50%;\n      max-width: 50%; } }\n  @media (min-width: 992px) {\n    .example-content-secondary {\n      flex: 0 0 33.33333%;\n      max-width: 33.33333%; } }\n\n.table-white-space th,\n.table-white-space td {\n  white-space: nowrap; }\n\n.table thead th {\n  vertical-align: top; }\n\n.table th,\n.table td {\n  padding: 1rem;\n  vertical-align: middle; }\n\n.table th {\n  font-size: 0.85rem; }\n\n.table-inverse {\n  color: #fff;\n  background-color: #00cfe8; }\n\n.table-hover-animation {\n  background-color: #f8f8f8; }\n  .table-hover-animation thead th {\n    border-top: 2px solid #f8f8f8;\n    border-bottom: 0;\n    background-color: #fff; }\n  .table-hover-animation th,\n  .table-hover-animation td {\n    border: 0; }\n  .table-hover-animation tbody tr {\n    transition: all 0.25s ease;\n    background-color: #fff; }\n    .table-hover-animation tbody tr:hover {\n      transform: translateY(-4px); }\n\n@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {\n  .table-hover-animation tr:hover {\n    border-bottom-color: #f8f8f8; } }\n\n.form-control::placeholder {\n  font-size: 0.85rem;\n  color: rgba(34, 41, 47, 0.4);\n  transition: all .2s ease; }\n\n.form-control:-ms-input-placeholder {\n  color: #c5c5c5; }\n\n.form-control:focus::placeholder {\n  transform: translate(5px);\n  transition: all .2s ease; }\n\n.form-control:focus ~ .form-control-position i {\n  color: #7367f0; }\n\n/* Form specific Scss */\nlabel {\n  color: #464646;\n  font-size: 0.85rem;\n  margin-bottom: 0;\n  padding-left: 0.2rem; }\n\ntextarea.form-control {\n  line-height: 1.6rem;\n  font-size: 1rem; }\n\n.form-group {\n  margin-bottom: 1.5rem; }\n\n.form-control {\n  border: 1px solid #d9d9d9;\n  color: #5f5f5f; }\n\n.form-section {\n  color: #b8c2cc;\n  line-height: 3rem;\n  margin-bottom: 20px;\n  border-bottom: 1px solid #b8c2cc; }\n  .form-section i {\n    font-size: 20px;\n    margin-left: 5px;\n    margin-right: 10px; }\n\n/* .form-body{\n    overflow: hidden;\n} */\n.form-actions {\n  border-top: 1px solid #dfdfdf;\n  padding: 20px 0;\n  margin-top: 20px; }\n  .form-actions.filled {\n    background-color: #f8f8f8; }\n  .form-actions.center {\n    text-align: center; }\n  .form-actions.right {\n    text-align: right; }\n  .form-actions.top {\n    border-top: 0;\n    border-bottom: 1px solid #dfdfdf;\n    margin-top: 0;\n    margin-bottom: 20px; }\n  @media (max-width: 767.98px) {\n    .form-actions .buttons-group {\n      float: left !important;\n      margin-bottom: 10px; } }\n\n@media (min-width: 576px) {\n  .form-horizontal .form-group .label-control {\n    text-align: right; } }\n\n.form-control.form-control-lg {\n  padding: 1rem; }\n  .form-control.form-control-lg::placeholder {\n    font-size: 1.25rem; }\n\n.form-control.form-control-sm {\n  padding: 0.6rem; }\n  .form-control.form-control-sm::placeholder {\n    font-size: 0.7rem; }\n\n.custom-file-label {\n  padding: 0.375rem 0.75rem; }\n  .custom-file-label::after {\n    padding: 0.375rem 0.75rem;\n    height: auto; }\n\nselect.form-control:not([multiple=\"multiple\"]) {\n  background-image: url(\"../../app-assets/images/pages/arrow-down.png\");\n  background-position: calc(100% - 12px) 13px, calc(100% - 20px) 13px, 100% 0;\n  background-size: 12px 12px, 10px 10px;\n  background-repeat: no-repeat;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  padding-right: 1.5rem; }\n\n.custom-select {\n  -moz-appearance: none;\n  -webkit-appearance: none; }\n\n.input-group-addon {\n  background-color: #ECEFF1;\n  border-color: #BABFC7; }\n\n.custom-control-label::before, .custom-control-label::after {\n  width: 1.143rem;\n  height: 1.143rem;\n  top: 0.08rem; }\n\n.custom-control-input:not(:disabled):active ~ .custom-control-label::before {\n  background-color: #7367f0;\n  border-color: #7367f0; }\n\n/* Floating label Group */\n.form-label-group {\n  position: relative;\n  margin-bottom: 1.5rem; }\n  .form-label-group .form-control-lg ~ label {\n    font-size: 1.25rem;\n    padding: 1rem; }\n  .form-label-group .form-control-sm ~ label {\n    font-size: 0.7rem; }\n  .form-label-group > label {\n    position: absolute;\n    top: 0;\n    left: 0;\n    display: block;\n    transition: all .25s ease-in-out;\n    padding: .6rem;\n    pointer-events: none;\n    cursor: text;\n    color: rgba(34, 41, 47, 0.4);\n    font-size: .85rem;\n    opacity: 0; }\n  .form-label-group > input, .form-label-group textarea {\n    padding: .6rem; }\n    .form-label-group > input:focus:not(:placeholder-shown) ~ label, .form-label-group > input:not(:active):not(:placeholder-shown) ~ label, .form-label-group textarea:focus:not(:placeholder-shown) ~ label, .form-label-group textarea:not(:active):not(:placeholder-shown) ~ label {\n      color: #7367f0 !important;\n      transition: all .25s ease-in-out;\n      opacity: 1; }\n    .form-label-group > input:not(:focus):not(:placeholder-shown) ~ label, .form-label-group textarea:not(:focus):not(:placeholder-shown) ~ label {\n      color: rgba(34, 41, 47, 0.4) !important; }\n    .form-label-group > input:not(:placeholder-shown) ~ label, .form-label-group textarea:not(:placeholder-shown) ~ label {\n      padding: .25rem 0;\n      font-size: .7rem;\n      top: -20px;\n      left: 3px; }\n  .form-label-group.has-icon-left > label {\n    left: 36px; }\n\n/* Vuexy Custom Checkbox */\n.vs-checkbox-con {\n  position: relative;\n  display: flex;\n  align-items: center;\n  justify-content: flex-start;\n  margin: .25rem 0; }\n  .vs-checkbox-con input {\n    position: absolute;\n    width: 100%;\n    height: 100%;\n    opacity: 0;\n    z-index: 200;\n    cursor: pointer;\n    top: 0; }\n    .vs-checkbox-con input:checked ~ .vs-checkbox {\n      transform: rotate(0deg);\n      border-color: #7367f0; }\n      .vs-checkbox-con input:checked ~ .vs-checkbox .vs-checkbox--check {\n        transform: translate(0);\n        background-color: #7367f0; }\n        .vs-checkbox-con input:checked ~ .vs-checkbox .vs-checkbox--check .vs-icon {\n          transform: translate(0);\n          line-height: 1.2;\n          opacity: 1; }\n      .vs-checkbox-con input:checked ~ .vs-checkbox.vs-checkbox-sm .vs-checkbox--check .vs-icon {\n        font-size: 0.75rem; }\n      .vs-checkbox-con input:checked ~ .vs-checkbox.vs-checkbox-lg .vs-checkbox--check .vs-icon {\n        font-size: 1.2rem; }\n    .vs-checkbox-con input:active:checked + .vs-checkbox .vs-checkbox--check {\n      transform: translate(3px);\n      background-color: #7367f0; }\n      .vs-checkbox-con input:active:checked + .vs-checkbox .vs-checkbox--check .vs-icon {\n        opacity: 1;\n        transform: translate(6px); }\n    .vs-checkbox-con input:disabled {\n      cursor: default;\n      pointer-events: none; }\n      .vs-checkbox-con input:disabled + .vs-checkbox {\n        cursor: default;\n        opacity: .5; }\n  .vs-checkbox-con .vs-checkbox {\n    cursor: pointer;\n    position: relative;\n    width: 20px;\n    height: 20px;\n    border-width: 2px;\n    border-style: solid;\n    border-color: #b8c2cc;\n    border-radius: 2px;\n    transform: rotate(-90deg);\n    transition: all .2s ease;\n    overflow: hidden;\n    margin-right: .5rem; }\n    .vs-checkbox-con .vs-checkbox.vs-checkbox-sm {\n      width: 15px;\n      height: 15px; }\n    .vs-checkbox-con .vs-checkbox.vs-checkbox-lg {\n      width: 24px;\n      height: 24px; }\n    .vs-checkbox-con .vs-checkbox .vs-checkbox--check {\n      width: 100%;\n      height: 100%;\n      position: absolute;\n      left: 0;\n      transform: translate(100%);\n      transform-origin: right;\n      transition: all .2s ease;\n      z-index: 10; }\n      .vs-checkbox-con .vs-checkbox .vs-checkbox--check .vs-icon {\n        display: flex;\n        justify-content: center;\n        align-items: center;\n        color: #fff; }\n\n/* Vuexy Custom Radio */\n.vs-radio-con {\n  position: relative;\n  display: flex;\n  align-items: center;\n  justify-content: flex-start;\n  margin: .25rem 0; }\n  .vs-radio-con input {\n    position: absolute;\n    width: 100%;\n    height: 100%;\n    opacity: 0;\n    z-index: 200;\n    cursor: pointer; }\n    .vs-radio-con input:checked ~ .vs-radio {\n      transform: rotate(0deg);\n      outline: 0; }\n      .vs-radio-con input:checked ~ .vs-radio .vs-radio--circle {\n        background: #7367f0;\n        box-shadow: 0 3px 12px 0 rgba(115, 103, 240, 0.4);\n        opacity: 1;\n        transform: scale(1); }\n      .vs-radio-con input:checked ~ .vs-radio .vs-radio--border {\n        opacity: 0;\n        transform: scale(0.3); }\n    .vs-radio-con input:disabled {\n      cursor: default;\n      pointer-events: none; }\n      .vs-radio-con input:disabled + .vs-radio {\n        cursor: default;\n        opacity: .5; }\n    .vs-radio-con input:active ~ .vs-radio {\n      transform: scale(1.1); }\n  .vs-radio-con .vs-radio {\n    cursor: pointer;\n    position: relative;\n    width: 18px;\n    height: 18px;\n    transition: all .2s ease;\n    margin-right: .5rem; }\n    .vs-radio-con .vs-radio.vs-radio-sm {\n      width: 13px;\n      height: 13px; }\n    .vs-radio-con .vs-radio.vs-radio-lg {\n      width: 22px;\n      height: 22px; }\n    .vs-radio-con .vs-radio .vs-radio--border, .vs-radio-con .vs-radio .vs-radio--circle {\n      width: 100%;\n      height: 100%;\n      position: absolute;\n      left: 0;\n      transition: all .25s ease;\n      top: 0;\n      border-radius: 50%; }\n    .vs-radio-con .vs-radio .vs-radio--border {\n      background: transparent;\n      border: 2px solid #b8c2cc; }\n    .vs-radio-con .vs-radio .vs-radio--circle {\n      opacity: 0;\n      transform: scale(0.1); }\n\n/* Switches */\n.custom-switch {\n  padding-left: 0;\n  /*For Switch label*/\n  /*For Switch Handle Animation*/ }\n  .custom-switch .custom-control-label {\n    height: 1.571rem;\n    width: 3.1rem;\n    padding: 0;\n    /* For bg color of switch*/\n    /*For Switch handle*/\n    /*For Switch text*/ }\n    .custom-switch .custom-control-label::before {\n      border: none;\n      background-color: #e2e2e2;\n      height: 1.571rem;\n      left: -.2857rem;\n      box-shadow: none !important;\n      transition: all .25s ease;\n      cursor: pointer;\n      user-select: none;\n      top: 0;\n      left: 0; }\n    .custom-switch .custom-control-label:after {\n      position: absolute;\n      top: 2px;\n      left: 2px;\n      box-shadow: none;\n      background-color: #fff;\n      transition: all .25s ease;\n      cursor: pointer;\n      user-select: none; }\n    .custom-switch .custom-control-label .switch-text-left, .custom-switch .custom-control-label .switch-text-right,\n    .custom-switch .custom-control-label .switch-icon-left, .custom-switch .custom-control-label .switch-icon-right {\n      position: absolute;\n      top: 5px;\n      font-size: .7rem;\n      cursor: pointer;\n      user-select: none; }\n    .custom-switch .custom-control-label .switch-text-left, .custom-switch .custom-control-label .switch-icon-left {\n      left: 7px;\n      color: #fff; }\n    .custom-switch .custom-control-label .switch-text-right, .custom-switch .custom-control-label .switch-icon-right {\n      right: 7px; }\n    .custom-switch .custom-control-label:focus {\n      outline: 0; }\n  .custom-switch .switch-label {\n    padding-left: 1rem; }\n  .custom-switch .custom-control-input:checked ~ .custom-control-label::before {\n    box-shadow: none; }\n  .custom-switch .custom-control-input:checked ~ .custom-control-label::after {\n    transform: translateX(1.4rem); }\n  .custom-switch .custom-control-input:not(:checked) ~ .custom-control-label .switch-text-left {\n    opacity: 0; }\n  .custom-switch .custom-control-input:not(:checked) ~ .custom-control-label .switch-text-right {\n    opacity: 1; }\n  .custom-switch .custom-control-input:checked ~ .custom-control-label .switch-text-right {\n    opacity: 0; }\n  .custom-switch .custom-control-input:checked ~ .custom-control-label .switch-text-left {\n    opacity: 1; }\n  .custom-switch .custom-control-input:not(:disabled):active ~ .custom-control-label::before {\n    background-color: #e2e2e2; }\n  .custom-switch.switch-md .custom-control-label {\n    width: 4rem;\n    height: 1.571rem; }\n    .custom-switch.switch-md .custom-control-label::before {\n      width: 4rem;\n      border: none;\n      background-color: #e2e2e2;\n      height: 1.571rem;\n      left: -.2857rem;\n      box-shadow: none !important;\n      transition: all .25s ease;\n      cursor: pointer;\n      user-select: none; }\n    .custom-switch.switch-md .custom-control-label:after {\n      box-shadow: none;\n      background-color: #fff;\n      transition: all .25s ease;\n      cursor: pointer;\n      user-select: none;\n      position: absolute;\n      top: 2px;\n      left: -2px; }\n    .custom-switch.switch-md .custom-control-label .switch-text-right, .custom-switch.switch-md .custom-control-label .switch-icon-right {\n      right: 9px; }\n    .custom-switch.switch-md .custom-control-label .switch-text-left, .custom-switch.switch-md .custom-control-label .switch-icon-left {\n      left: 5px; }\n  .custom-switch.switch-md .custom-control-input:checked ~ .custom-control-label::after {\n    transform: translateX(2.3rem); }\n  .custom-switch.switch-lg .custom-control-label {\n    width: 5.5rem;\n    height: 1.571rem; }\n    .custom-switch.switch-lg .custom-control-label::before {\n      width: 5.5rem;\n      border: none;\n      background-color: #e2e2e2;\n      height: 1.571rem;\n      left: -.2857rem;\n      box-shadow: none !important;\n      transition: all .25s ease;\n      cursor: pointer;\n      user-select: none; }\n    .custom-switch.switch-lg .custom-control-label:after {\n      position: absolute;\n      top: 2px;\n      left: -2px;\n      box-shadow: none;\n      background-color: #fff;\n      transition: all .25s ease;\n      cursor: pointer;\n      user-select: none; }\n    .custom-switch.switch-lg .custom-control-label .switch-text-right, .custom-switch.switch-lg .custom-control-label .switch-icon-right {\n      right: 10px; }\n  .custom-switch.switch-lg .custom-control-input:checked ~ .custom-control-label::after {\n    transform: translateX(3.8rem); }\n\n/* Textarea with Counter */\n.counter-value {\n  background-color: #7367f0;\n  color: #fff;\n  padding: 1px 6px;\n  font-size: .6rem;\n  border-radius: 0 0 5px 5px;\n  margin-right: 1rem; }\n\n/* Input box with icon divider */\n.form-group.input-divider-left .form-control-position i {\n  padding: 0.2rem 0.5rem;\n  border-right: 1px solid #d9d9d9; }\n\n.form-group.input-divider-right .form-control-position i {\n  padding: 0.2rem 0.5rem;\n  border-left: 1px solid #d9d9d9; }\n\n/* input-groups-lg and input-groups-sm  */\n.input-group-lg .form-control, .input-group-sm .form-control {\n  padding: 0.7rem; }\n\n/* Bootstrap touchspin */\n.bootstrap-touchspin.input-group {\n  width: 8.4rem;\n  align-items: center; }\n  .bootstrap-touchspin.input-group .form-control {\n    padding: 5px;\n    height: auto;\n    border: 0;\n    background-color: #f8f8f8;\n    border-radius: 5px !important;\n    text-align: center;\n    font-weight: 500; }\n    .bootstrap-touchspin.input-group .form-control:focus {\n      z-index: 1;\n      box-shadow: none; }\n\n.bootstrap-touchspin .bootstrap-touchspin-injected {\n  margin: 0 !important; }\n  .bootstrap-touchspin .bootstrap-touchspin-injected .bootstrap-touchspin-down, .bootstrap-touchspin .bootstrap-touchspin-injected .bootstrap-touchspin-up {\n    padding: 0;\n    min-width: 22px;\n    min-height: 22px;\n    border-radius: 5px !important;\n    position: relative; }\n    .bootstrap-touchspin .bootstrap-touchspin-injected .bootstrap-touchspin-down i, .bootstrap-touchspin .bootstrap-touchspin-injected .bootstrap-touchspin-up i {\n      font-size: 0.8rem;\n      position: relative;\n      top: -1px; }\n  .bootstrap-touchspin .bootstrap-touchspin-injected .bootstrap-touchspin-down {\n    left: 12px; }\n  .bootstrap-touchspin .bootstrap-touchspin-injected .bootstrap-touchspin-up {\n    right: 12px; }\n\n.bootstrap-touchspin.disabled-touchspin .bootstrap-touchspin-down, .bootstrap-touchspin.disabled-touchspin .bootstrap-touchspin-up {\n  background-color: rgba(0, 0, 0, 0.5) !important;\n  cursor: default;\n  opacity: .5; }\n\n.bootstrap-touchspin.input-group-lg {\n  width: 9.375rem; }\n  .bootstrap-touchspin.input-group-lg .touchspin.form-control {\n    height: auto !important; }\n  .bootstrap-touchspin.input-group-lg .bootstrap-touchspin-down i, .bootstrap-touchspin.input-group-lg .bootstrap-touchspin-up i {\n    font-size: 1rem; }\n\n.bootstrap-touchspin.input-group-sm {\n  width: 6.25rem; }\n  .bootstrap-touchspin.input-group-sm .touchspin.form-control {\n    height: auto !important; }\n  .bootstrap-touchspin.input-group-sm .bootstrap-touchspin-injected .bootstrap-touchspin-down, .bootstrap-touchspin.input-group-sm .bootstrap-touchspin-injected .bootstrap-touchspin-up {\n    min-width: 16px;\n    min-height: 16px;\n    padding-top: 2.2px; }\n    .bootstrap-touchspin.input-group-sm .bootstrap-touchspin-injected .bootstrap-touchspin-down i, .bootstrap-touchspin.input-group-sm .bootstrap-touchspin-injected .bootstrap-touchspin-up i {\n      font-size: 0.6rem; }\n\n.btn.disabled-max-min {\n  background-color: rgba(0, 0, 0, 0.5) !important;\n  cursor: default; }\n\n/* Number Type Input Box Scss for - Remove arrow on hover */\ninput[type=number]::-webkit-inner-spin-button,\ninput[type=number]::-webkit-outer-spin-button {\n  -webkit-appearance: none; }\n\n/* Number Type Input Box Scss for Touchspin - Remove arrow for firefox */\n.bootstrap-touchspin.input-group input[type=number] {\n  -moz-appearance: textfield; }\n\n@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {\n  .form-label-group label {\n    display: none; }\n  select.form-control:not([multiple=\"multiple\"]) {\n    background: none; }\n  .custom-file-label::after {\n    padding: 1.34rem 0.7rem 1.25rem; } }\n\n.picker__input.form-control {\n  background-color: #fff; }\n\n.input-group .form-control {\n  height: auto; }\n\n.input-group .input-group-prepend .dropdown-toggle::after, .input-group .input-group-append .dropdown-toggle::after {\n  left: 0; }\n\n.input-group .input-group-prepend .vs-checkbox-con, .input-group .input-group-prepend .vs-checkbox, .input-group .input-group-prepend .vs-radio-con, .input-group .input-group-prepend .vs-radio, .input-group .input-group-append .vs-checkbox-con, .input-group .input-group-append .vs-checkbox, .input-group .input-group-append .vs-radio-con, .input-group .input-group-append .vs-radio {\n  margin: 0; }\n\n.input-group.input-group-lg .form-control::placeholder {\n  font-size: 1.25rem; }\n\n.input-group.input-group-lg .input-group-prepend .btn, .input-group.input-group-lg .input-group-append .btn {\n  line-height: 1.3;\n  font-size: 1.3rem; }\n\n.input-group.input-group-sm .form-control::placeholder {\n  font-size: 0.7rem; }\n\n.btn:disabled {\n  cursor: default; }\n\n.btn.btn-white {\n  color: #626262; }\n  .btn.btn-white:hover, .btn.btn-white:focus, .btn.btn-white:active {\n    color: #626262 !important; }\n\n.btn[class*=\"bg-gradient-\"]:hover {\n  box-shadow: 0 8px 25px -8px #aaa; }\n\n.btn.btn-secondary {\n  color: #fff; }\n  .btn.btn-secondary:hover {\n    box-shadow: 0 8px 25px -8px #6c757d; }\n\n.btn.btn-dark:hover {\n  box-shadow: 0 8px 25px -8px #343a40; }\n\n.btn.btn-light:hover {\n  box-shadow: 0 8px 25px -8px #f8f9fa; }\n\n.btn.btn-outline-secondary, .btn.btn-outline-dark, .btn.btn-outline-light {\n  border: 1px solid; }\n\n.btn.btn-flat-secondary:hover {\n  background-color: rgba(108, 117, 125, 0.1); }\n\n.btn.btn-flat-secondary:active, .btn.btn-flat-secondary:focus {\n  background: #6c757d; }\n\n.btn.btn-flat-dark:hover {\n  background-color: rgba(52, 58, 64, 0.1); }\n\n.btn.btn-flat-dark:active, .btn.btn-flat-dark:focus {\n  background: #343a40;\n  color: #fff; }\n\n.btn.btn-flat-light:hover {\n  background-color: rgba(248, 249, 250, 0.1); }\n\n.btn.btn-flat-light:active, .btn.btn-flat-light:focus {\n  background: #f8f9fa; }\n\n.btn[class*=\"btn-outline-\"] {\n  padding-top: calc(0.9rem - 1px);\n  padding-bottom: calc(0.9rem - 1px); }\n  .btn[class*=\"btn-outline-\"].btn-sm {\n    padding-top: calc(0.5rem - 1px);\n    padding-bottom: calc(0.5rem - 1px); }\n\n.btn.btn-relief-secondary {\n  background-color: #6c757d;\n  box-shadow: inset 0 -3px 0 0 rgba(0, 0, 0, 0.2);\n  color: #fff; }\n  .btn.btn-relief-secondary:hover {\n    color: #fff; }\n  .btn.btn-relief-secondary:active, .btn.btn-relief-secondary:focus {\n    outline: none;\n    transform: translateY(3px); }\n\n.btn.btn-relief-light {\n  box-shadow: inset 0 -3px 0 0 rgba(0, 0, 0, 0.2);\n  color: #fff; }\n  .btn.btn-relief-light:hover {\n    color: #fff; }\n  .btn.btn-relief-light:active, .btn.btn-relief-light:focus {\n    outline: none;\n    transform: translateY(3px); }\n\n.btn.btn-relief-dark {\n  background-color: #343a40;\n  box-shadow: inset 0 -3px 0 0 rgba(255, 255, 255, 0.1);\n  color: #fff; }\n  .btn.btn-relief-dark:hover {\n    color: #fff; }\n  .btn.btn-relief-dark:active, .btn.btn-relief-dark:focus {\n    outline: none;\n    transform: translateY(3px); }\n\n.btn.btn-icon {\n  padding: .715rem .736rem; }\n\n.btn.btn-sm.btn-icon {\n  padding: .5rem; }\n\n.btn.btn-lg.btn-icon {\n  padding: 1rem; }\n\n.btn.btn-square {\n  border-radius: 0; }\n\n.btn.btn-round {\n  border-radius: 2rem; }\n\n.btn:focus, .btn.focus, .btn:active, .btn.active {\n  outline: none;\n  box-shadow: none !important; }\n\n.btn.btn-icon i {\n  font-size: 1.1rem; }\n\n.btn.btn-outline-white:hover,\n.btn-white:hover {\n  color: #22292f !important; }\n\nbutton,\nhtml [type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n  cursor: pointer; }\n\n.waves-button-input {\n  padding: unset; }\n\n.collapse-icon .card-header {\n  position: relative; }\n\n.collapse-icon [data-toggle=\"collapse\"]:after {\n  position: absolute;\n  top: 48%;\n  right: 20px;\n  margin-top: -8px;\n  font-family: 'feather';\n  content: \"\\e845\";\n  transition: all 300ms linear 0s;\n  font-size: 0.9rem; }\n\n.collapse-icon [data-toggle=\"collapse\"]:before {\n  position: absolute;\n  top: 48%;\n  right: 20px;\n  margin-top: -8px;\n  font-family: 'feather';\n  content: \"\\e842\";\n  transition: all 300ms linear 0s;\n  font-size: 0.9rem; }\n\n.collapse-icon.left a {\n  padding-left: 28px; }\n  .collapse-icon.left a:before, .collapse-icon.left a:after {\n    left: 20px;\n    right: auto; }\n\n.collapse-icon [aria-expanded=\"true\"]:before {\n  opacity: 0; }\n\n.collapse-icon [aria-expanded=\"false\"]:after {\n  opacity: 0; }\n\n.collapse-icon.accordion-icon-rotate [aria-expanded=\"true\"]:before {\n  transform: rotate(180deg); }\n\n.collapse-icon.accordion-icon-rotate [aria-expanded=\"false\"]:after {\n  transform: rotate(-180deg); }\n\n.dropdown.show .btn-outline-warning.dropdown-toggle,\n.dropdown.show .btn-outline-light.dropdown-toggle {\n  color: #fff; }\n\n.dropdown .btn:not(.btn-sm):not(.btn-lg),\n.dropdown .btn:not(.btn-sm):not(.btn-lg).dropdown-toggle {\n  padding: 0.85rem 1.5rem; }\n  .dropdown .btn:not(.btn-sm):not(.btn-lg).btn-round,\n  .dropdown .btn:not(.btn-sm):not(.btn-lg).dropdown-toggle.btn-round {\n    border-radius: 2rem; }\n\n.dropdown .btn.dropdown-toggle.dropdown-toggle-split {\n  padding: 0.85rem 1rem;\n  border-left-color: rgba(255, 255, 255, 0.2) !important;\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0; }\n\n.dropdown [class*=\"btn-outline-\"].dropdown-toggle.dropdown-toggle-split {\n  border-left: 0 !important; }\n  .dropdown [class*=\"btn-outline-\"].dropdown-toggle.dropdown-toggle-split:active {\n    color: #fff; }\n\n.dropdown .dropdown-menu {\n  border: 1px solid rgba(0, 0, 0, 0.05);\n  border-radius: 5px;\n  transform: scale(1, 0);\n  box-shadow: 0 5px 25px rgba(0, 0, 0, 0.1);\n  min-width: 8rem; }\n  .dropdown .dropdown-menu::before {\n    content: \"\";\n    position: absolute;\n    top: -1px;\n    left: 1.2rem;\n    width: 0.75rem;\n    height: 0.75rem;\n    display: block;\n    background: #fff;\n    transform: rotate(45deg) translate(-7px);\n    border-top: 1px solid rgba(0, 0, 0, 0.1);\n    border-left: 1px solid rgba(0, 0, 0, 0.1);\n    z-index: 10;\n    box-sizing: border-box; }\n  .dropdown .dropdown-menu.dropdown-menu-right::before {\n    right: 0.6rem;\n    left: auto; }\n  .dropdown .dropdown-menu .dropdown-header {\n    padding: 0.714rem 1.428rem;\n    margin-top: 0.714rem; }\n  .dropdown .dropdown-menu .dropdown-item {\n    padding: 0.5rem 1rem;\n    color: #626262;\n    width: auto;\n    cursor: pointer; }\n    .dropdown .dropdown-menu .dropdown-item:hover {\n      background-color: #f8f8f8;\n      color: #7367f0; }\n    .dropdown .dropdown-menu .dropdown-item.active {\n      color: #fff; }\n    .dropdown .dropdown-menu .dropdown-item:active {\n      background-color: transparent;\n      color: #212529; }\n\n.dropdown i {\n  margin-right: 0.5rem; }\n\n.dropdown.no-arrow .dropdown-toggle:after {\n  display: none; }\n\n.dropdown.no-arrow .dropdown-toggle i {\n  margin-right: 0; }\n\n.dropdown,\n.dropup,\n.dropright,\n.dropleft {\n  position: relative; }\n  .dropdown .dropdown-menu .dropdown-item,\n  .dropup .dropdown-menu .dropdown-item,\n  .dropright .dropdown-menu .dropdown-item,\n  .dropleft .dropdown-menu .dropdown-item {\n    padding: 0.714rem 1.428rem; }\n\n.show > .dropdown-menu {\n  transform: scale(1, 1);\n  opacity: 1;\n  display: block; }\n\n.dropdown-toggle::after {\n  border: none !important;\n  font-family: \"feather\";\n  content: \"\\e842\" !important;\n  position: relative;\n  top: 1px;\n  right: 0px;\n  left: 0.714rem;\n  padding: 0;\n  margin: 0;\n  vertical-align: 0; }\n\n.dropdown-toggle.dropdown-toggle-split {\n  border-left: 1px solid rgba(255, 255, 255, 0.2); }\n  .dropdown-toggle.dropdown-toggle-split:after {\n    left: 0; }\n\n.dropdown-toggle.nav-hide-arrow::after {\n  display: none; }\n\n.dropdown-toggle:focus {\n  outline: 0; }\n\n/* .dropdown-menu-right {\n  left: auto !important; // Input group with dropdown issue for dropdown-menu-right\n  right: 0;\n} */\n.btn-secondary ~ .dropdown-menu .dropdown-item.active, .btn-secondary ~ .dropdown-menu .dropdown-item:hover {\n  background-color: #cccccc; }\n\n.dropup {\n  position: relative; }\n  .dropup .btn,\n  .dropup .btn.dropdown-toggle {\n    padding: 0.85rem 1.5rem; }\n  .dropup .btn.dropdown-toggle.dropdown-toggle-split {\n    padding: 0.85rem 1rem;\n    border-color: rgba(255, 255, 255, 0.2) !important; }\n  .dropup .dropdown-toggle::after {\n    content: \"\\e845\" !important;\n    vertical-align: 0.05rem; }\n  .dropup .dropdown-menu::before {\n    content: \"\";\n    position: absolute;\n    bottom: -0.714rem;\n    left: 1.214rem;\n    width: 0.714rem;\n    height: 0.714rem;\n    display: block;\n    background: #fff;\n    transform: rotate(45deg) translate(-7px);\n    border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n    border-right: 1px solid rgba(0, 0, 0, 0.1);\n    z-index: 10;\n    box-sizing: border-box; }\n  .dropup .dropdown-menu.dropdown-menu-right::before {\n    left: auto;\n    right: 0.714rem; }\n  .dropup .dropdown-submenu .dropdown-menu {\n    bottom: auto;\n    top: 0; }\n\n.dropleft .btn,\n.dropleft .btn.dropdown-toggle {\n  padding: 0.85rem 1.5rem; }\n\n.dropleft .btn.dropdown-toggle.dropdown-toggle-split {\n  padding: 0.85rem 1rem; }\n\n.dropleft .dropdown-toggle::before {\n  border: none !important;\n  font-family: \"feather\";\n  content: \"\\e843\" !important; }\n\n.dropleft .dropdown-menu::before {\n  content: \"\";\n  position: absolute;\n  top: 1.285rem;\n  right: 0;\n  width: 0.714rem;\n  height: 0.714rem;\n  display: block;\n  background: #fff;\n  transform: rotate(130deg) translate(-8px);\n  border-top: 1px solid rgba(0, 0, 0, 0.1);\n  border-left: 1px solid rgba(0, 0, 0, 0.1);\n  z-index: 10;\n  box-sizing: border-box; }\n\n.dropright .btn,\n.dropright .btn.dropdown-toggle {\n  padding: 0.85rem 1.5rem; }\n\n.dropright .btn.dropdown-toggle.dropdown-toggle-split {\n  padding: 0.85rem 1rem; }\n\n.dropright .dropdown-toggle::after {\n  border: none !important;\n  font-family: \"feather\";\n  content: \"\\e844\" !important; }\n\n.dropright .dropdown-menu::before {\n  content: \"\";\n  position: absolute;\n  top: 1.285rem;\n  left: -0.9rem;\n  width: 0.714rem;\n  height: 0.714rem;\n  display: block;\n  background: #fff;\n  transform: rotate(140deg) translate(-9px);\n  border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n  border-right: 1px solid rgba(0, 0, 0, 0.1);\n  z-index: 10;\n  box-sizing: border-box; }\n\n.dropdown.dropdown-icon-wrapper .dropdown-toggle:after,\n.dropup.dropdown-icon-wrapper .dropdown-toggle:after {\n  display: none; }\n\n.dropdown.dropdown-icon-wrapper .dropdown-menu,\n.dropup.dropdown-icon-wrapper .dropdown-menu {\n  min-width: auto; }\n  .dropdown.dropdown-icon-wrapper .dropdown-menu .dropdown-item,\n  .dropup.dropdown-icon-wrapper .dropdown-menu .dropdown-item {\n    padding: 0.5rem 1.1rem;\n    cursor: pointer; }\n    .dropdown.dropdown-icon-wrapper .dropdown-menu .dropdown-item i,\n    .dropup.dropdown-icon-wrapper .dropdown-menu .dropdown-item i {\n      font-size: 1.3rem;\n      color: #626262; }\n    .dropdown.dropdown-icon-wrapper .dropdown-menu .dropdown-item:hover,\n    .dropup.dropdown-icon-wrapper .dropdown-menu .dropdown-item:hover {\n      color: #fff; }\n\n.btn.btn-white ~ .dropdown-menu .dropdown-item:not(.acitve):hover {\n  color: #626262 !important; }\n\n.btn.btn-white ~ .dropdown-menu .dropdown-item.active {\n  color: #626262; }\n\n.horizontal-menu-wrapper .dropdown-menu,\n.header-navbar .dropdown-menu {\n  animation-duration: 0.3s;\n  animation-fill-mode: both;\n  animation-name: slideIn; }\n\n@keyframes slideIn {\n  0% {\n    transform: translateY(1rem);\n    opacity: 0; }\n  100% {\n    transform: translateY(0rem);\n    opacity: 1; }\n  0% {\n    transform: translateY(1rem);\n    opacity: 0; } }\n\n/* ===============================================================================================\n    File Name: navbar.scss\n    Description: Contain header navigation bar, vertical main navigation bar and\n    horiznotal main navigation bar related SCSS.\n    ----------------------------------------------------------------------------------------------\n    Item Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n    Author: PIXINVENT\n    Author URL: http://www.themeforest.net/user/pixinvent\n================================================================================================*/\n.navbar-dark .hamburger-inner,\n.navbar-dark .hamburger-inner::before,\n.navbar-dark .hamburger-inner::after {\n  background-color: #fff; }\n\n.header-navbar-shadow {\n  display: none; }\n\n.navbar-floating .header-navbar-shadow {\n  display: block;\n  background: linear-gradient(180deg, rgba(248, 248, 248, 0.95) 44%, rgba(248, 248, 248, 0.46) 73%, rgba(255, 255, 255, 0));\n  padding-top: 2.2rem;\n  background-repeat: repeat;\n  width: 100%;\n  height: 102px;\n  position: fixed;\n  top: 0;\n  z-index: 11; }\n\n.header-navbar {\n  padding: 0px;\n  min-height: 4.5rem;\n  font-family: \"Montserrat\", Helvetica, Arial, serif;\n  transition: 300ms ease all;\n  background: linear-gradient(180deg, rgba(248, 248, 248, 0.95) 44%, rgba(248, 248, 248, 0.46) 73%, rgba(255, 255, 255, 0));\n  z-index: 997;\n  /* For sm screen*/ }\n  .header-navbar.fixed-top {\n    left: 260px; }\n  .header-navbar[class*=\"bg-\"] .navbar-nav .nav-item > a {\n    color: #fff !important; }\n    .header-navbar[class*=\"bg-\"] .navbar-nav .nav-item > a i,\n    .header-navbar[class*=\"bg-\"] .navbar-nav .nav-item > a span {\n      color: #fff !important; }\n  .header-navbar[class*=\"bg-\"] .navbar-nav .nav-item .dropdown-menu i {\n    color: inherit !important; }\n  .header-navbar[class*=\"bg-\"] .navbar-nav .search-input .input,\n  .header-navbar[class*=\"bg-\"] .navbar-nav .search-input .search-list .auto-suggestion span {\n    color: #626262 !important; }\n  .header-navbar.floating-nav {\n    margin: 1.3rem 2.2rem 0;\n    border-radius: 0.5rem;\n    position: fixed;\n    width: calc(100vw - (100vw - 100%) - calc(2.2rem * 2) - 260px);\n    z-index: 12;\n    right: 0; }\n  .header-navbar.navbar-static-top {\n    background: transparent;\n    box-shadow: none !important;\n    top: 0;\n    right: 0;\n    left: 260px;\n    width: calc(100vw - (100vw - 100%) - 260px); }\n  .header-navbar .navbar-wrapper {\n    width: 100%; }\n  .header-navbar.navbar-border {\n    border-bottom: 1px solid #E4E7ED; }\n  .header-navbar.navbar-dark.navbar-border {\n    border-bottom: 1px solid #8596B5; }\n  .header-navbar.navbar-shadow {\n    box-shadow: 0 4px 20px 0 rgba(0, 0, 0, 0.05); }\n  .header-navbar:not(.navbar-horizontal) .nav-link.dropdown-toggle::after {\n    display: none; }\n  .header-navbar .navbar-container ul.nav li.dropdown-language {\n    padding-right: 0; }\n    .header-navbar .navbar-container ul.nav li.dropdown-language .selected-language {\n      font-size: 0.97rem;\n      letter-spacing: -0.25px;\n      font-weight: 500; }\n  .header-navbar .navbar-container {\n    padding-left: 1rem;\n    transition: 300ms ease all;\n    background: inherit;\n    margin-left: 0; }\n    .header-navbar .navbar-container .bookmark-wrapper ul.nav li > a.nav-link {\n      padding: 1.4rem 0.5rem 1.35rem; }\n      .header-navbar .navbar-container .bookmark-wrapper ul.nav li > a.nav-link i:hover {\n        color: #7367f0; }\n    .header-navbar .navbar-container .bookmark-input {\n      z-index: 1; }\n    .header-navbar .navbar-container ul.nav li.dropdown .dropdown-menu {\n      top: 48px; }\n    .header-navbar .navbar-container ul.nav li .badge {\n      padding: 0.42em 0.6em 0.25rem; }\n      .header-navbar .navbar-container ul.nav li .badge.badge-up {\n        position: absolute;\n        top: 12px;\n        right: -2px; }\n    .header-navbar .navbar-container ul.nav li.dropdown-language > a.nav-link {\n      padding: 1.65rem 0.5rem; }\n    .header-navbar .navbar-container ul.nav li > a.nav-link {\n      color: #626262;\n      padding: 1.6rem 0.5rem 1.35rem 1rem; }\n      .header-navbar .navbar-container ul.nav li > a.nav-link i.flag-icon {\n        margin-right: 0.5rem; }\n    .header-navbar .navbar-container ul.nav li.dropdown-user .dropdown-menu-right {\n      right: 12px;\n      left: auto;\n      padding: 0.5rem; }\n      .header-navbar .navbar-container ul.nav li.dropdown-user .dropdown-menu-right .dropdown-item {\n        padding: 10px; }\n        .header-navbar .navbar-container ul.nav li.dropdown-user .dropdown-menu-right .dropdown-item:hover, .header-navbar .navbar-container ul.nav li.dropdown-user .dropdown-menu-right .dropdown-item:active {\n          background: #7367f0;\n          color: #fff !important; }\n    .header-navbar .navbar-container ul.nav li a.dropdown-user-link {\n      padding: 0.7rem 1rem;\n      display: flex;\n      align-items: center; }\n      .header-navbar .navbar-container ul.nav li a.dropdown-user-link .user-name {\n        display: inline-block;\n        margin-bottom: 0.435rem;\n        margin-left: 0.2rem; }\n      .header-navbar .navbar-container ul.nav li a.dropdown-user-link .user-status {\n        font-size: smaller; }\n      .header-navbar .navbar-container ul.nav li a.dropdown-user-link img {\n        box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.12), 0 2px 4px 0 rgba(0, 0, 0, 0.08); }\n    .header-navbar .navbar-container ul.nav li a.menu-toggle {\n      padding: 1.34rem 0.22rem 1.35rem 0; }\n      .header-navbar .navbar-container ul.nav li a.menu-toggle i {\n        font-size: 1.75rem; }\n    .header-navbar .navbar-container ul.nav li a.nav-link-label {\n      padding: 1.6rem 0rem 1.35rem 0.8rem; }\n    .header-navbar .navbar-container ul.nav li a.dropdown-user-link .user-nav {\n      display: flex;\n      flex-direction: column;\n      align-items: flex-end;\n      float: left;\n      margin-right: 0.8rem; }\n    .header-navbar .navbar-container ul.nav li div.input-group {\n      padding: 0.7rem 1rem; }\n    .header-navbar .navbar-container ul.nav li i.ficon {\n      font-size: 1.5rem;\n      color: #626262; }\n      .header-navbar .navbar-container ul.nav li i.ficon:hover {\n        color: #7367f0; }\n    .header-navbar .navbar-container ul.nav li .media-list {\n      max-height: 18.2rem; }\n    .header-navbar .navbar-container ul.nav li .scrollable-container {\n      position: relative; }\n    .header-navbar .navbar-container .dropdown-menu-media {\n      width: 26rem; }\n      .header-navbar .navbar-container .dropdown-menu-media .media-list .media {\n        padding: 1rem;\n        border: none;\n        border-bottom: 1px solid #dae1e7; }\n        .header-navbar .navbar-container .dropdown-menu-media .media-list .media:hover {\n          background: #f8f8f8; }\n        .header-navbar .navbar-container .dropdown-menu-media .media-list .media .media-meta {\n          color: #626262; }\n      .header-navbar .navbar-container .dropdown-menu-media .media-list a:last-of-type .media {\n        border-bottom: none; }\n      .header-navbar .navbar-container .dropdown-menu-media .dropdown-menu-header {\n        border-bottom: 1px solid #dae1e7; }\n      .header-navbar .navbar-container .dropdown-menu-media .dropdown-menu-footer a {\n        padding: 0.3rem;\n        border-top: 1px solid #dae1e7; }\n  .header-navbar.navbar-without-menu .navbar-container {\n    margin-left: 0; }\n  .header-navbar .nav-item + .nav-item {\n    margin-left: 0rem; }\n  @media (max-width: 767.98px) {\n    .header-navbar .navbar-header {\n      width: 100% !important;\n      padding: 0.5rem 1rem;\n      position: relative; }\n      .header-navbar .navbar-header .menu-toggle {\n        top: 2px;\n        position: relative; }\n      .header-navbar .navbar-header .open-navbar-container i {\n        font-size: 1.8rem; }\n      .header-navbar .navbar-header .navbar-brand {\n        position: absolute;\n        left: 50%;\n        top: 0;\n        transform: translate(-50%, 0); }\n    .header-navbar.navbar-with-menu .navbar-container {\n      width: 100%;\n      display: table;\n      margin: 0;\n      height: auto; } }\n\n/* Modern menu For md screen*/\n@media (max-width: 991.98px) {\n  [data-menu=\"vertical-menu-modern\"] .header-navbar .navbar-header {\n    width: 100% !important;\n    padding: 0.5rem 1rem;\n    position: relative; }\n    [data-menu=\"vertical-menu-modern\"] .header-navbar .navbar-header .menu-toggle {\n      top: 2px;\n      position: relative; }\n    [data-menu=\"vertical-menu-modern\"] .header-navbar .navbar-header .open-navbar-container i {\n      font-size: 1.8rem; }\n    [data-menu=\"vertical-menu-modern\"] .header-navbar .navbar-header .navbar-brand {\n      position: absolute;\n      left: 50%;\n      top: 0;\n      transform: translate(-50%, 0); }\n  [data-menu=\"vertical-menu-modern\"] .header-navbar.navbar-with-menu .navbar-container {\n    width: 100%;\n    display: table;\n    margin: 0;\n    height: auto; }\n  [data-menu=\"vertical-menu-modern\"] .navbar-dark .navbar-header .navbar-nav .nav-link,\n  [data-menu=\"vertical-menu-modern\"] .navbar-semi-dark .navbar-header .navbar-nav .nav-link {\n    color: #fff; }\n  [data-menu=\"vertical-menu-modern\"] .navbar-dark .navbar-container .navbar-nav .nav-link,\n  [data-menu=\"vertical-menu-modern\"] .navbar-semi-dark .navbar-container .navbar-nav .nav-link {\n    color: #b8c2cc; }\n  [data-menu=\"vertical-menu-modern\"] .navbar-light .navbar-header .navbar-nav .nav-link {\n    color: #b8c2cc; } }\n\n.navbar-light {\n  background: #fff; }\n  .navbar-light.navbar-horizontal {\n    background: #fff; }\n  .navbar-light .navbar-nav li {\n    line-height: 1; }\n  .navbar-light .navbar-nav .active.nav-link {\n    background-color: rgba(0, 0, 0, 0.03); }\n  .navbar-light .navbar-nav .disabled.nav-link {\n    color: #6c757d; }\n\n.navbar-dark {\n  background: #b8c2cc; }\n  .navbar-dark .navbar-brand {\n    color: #fff !important; }\n  .navbar-dark.navbar-horizontal {\n    background: #b8c2cc; }\n  .navbar-dark .nav-search .form-control,\n  .navbar-dark .nav-search .btn-secondary {\n    color: #fff;\n    background: #b8c2cc; }\n  .navbar-dark .navbar-nav li {\n    line-height: 1; }\n  .navbar-dark .navbar-nav .active.nav-link {\n    background-color: rgba(255, 255, 255, 0.05); }\n  .navbar-dark .navbar-nav .disabled.nav-link {\n    color: #dae1e7; }\n\n.navbar-semi-dark {\n  background: #fff; }\n  .navbar-semi-dark .navbar-header {\n    background: #b8c2cc; }\n    .navbar-semi-dark .navbar-header .brand-text {\n      color: #fff; }\n  .navbar-semi-dark .navbar-nav li {\n    line-height: 1; }\n  .navbar-semi-dark .navbar-nav .nav-link {\n    color: #b8c2cc; }\n  .navbar-semi-dark .navbar-nav .active.nav-link {\n    background-color: rgba(0, 0, 0, 0.03); }\n  .navbar-semi-dark .navbar-nav .disabled.nav-link {\n    color: #6c757d; }\n\n.navbar-semi-light {\n  background: #b8c2cc; }\n  .navbar-semi-light .navbar-header {\n    background: #fff; }\n    .navbar-semi-light .navbar-header .brand-text {\n      color: #b8c2cc; }\n  .navbar-semi-light .navbar-nav li {\n    line-height: 1; }\n  .navbar-semi-light .navbar-nav .nav-link {\n    color: #fff; }\n  .navbar-semi-light .navbar-nav .active.nav-link {\n    background-color: rgba(0, 0, 0, 0.03); }\n  .navbar-semi-light .navbar-nav .disabled.nav-link {\n    color: #6c757d; }\n\n@-moz-document url-prefix() {\n  ul li a .children-in {\n    position: relative;\n    right: 3px;\n    top: -14px; } }\n\n.navbar-menu-icon span {\n  display: block;\n  position: absolute;\n  height: 2px;\n  width: 100%;\n  background: #b8c2cc;\n  border-radius: 9px;\n  opacity: 1;\n  left: 0;\n  transform: rotate(0deg);\n  transition: .25s ease-in-out; }\n\n.navbar-menu-icon span:nth-child(1) {\n  top: 0px; }\n\n.navbar-menu-icon span:nth-child(2) {\n  top: 10px; }\n\n.navbar-menu-icon span:nth-child(3) {\n  top: 20px; }\n\n.navbar-menu-icon.show span:nth-child(1) {\n  top: 10px;\n  transform: rotate(135deg); }\n\n.navbar-menu-icon.show span:nth-child(2) {\n  opacity: 0;\n  left: -60px; }\n\n.navbar-menu-icon.show span:nth-child(3) {\n  top: 10px;\n  transform: rotate(-135deg); }\n\n@media (max-width: 767.98px) {\n  .header-navbar .navbar-nav .show {\n    position: static; }\n  .header-navbar .navbar-nav .open-navbar-container {\n    padding-top: 0.625rem; }\n  .header-navbar .navbar-container .show .dropdown-menu {\n    right: 0;\n    left: 0 !important;\n    float: none;\n    width: auto;\n    margin-top: 0;\n    max-height: 400px;\n    overflow-x: hidden; }\n  .header-navbar .navbar-container .dropdown-user .dropdown-menu-right {\n    right: 0 !important; }\n  .header-navbar .navbar-container ul.nav li.nav-item i {\n    margin-right: 0.2rem; }\n  .header-navbar .navbar-container ul.nav li a.dropdown-user-link {\n    padding: 0.8rem 0.6rem; }\n  .header-navbar .navbar-container ul.nav li .dropdown-toggle::after {\n    margin-right: 0;\n    margin-left: -2px; }\n  .navbar-dark .hamburger-inner,\n  .navbar-dark .hamburger-inner::before,\n  .navbar-dark .hamburger-inner::after,\n  .navbar-semi-dark .hamburger-inner,\n  .navbar-semi-dark .hamburger-inner::before,\n  .navbar-semi-dark .hamburger-inner::after {\n    background-color: #fff; }\n  .navbar-dark .navbar-header .navbar-nav .nav-link,\n  .navbar-semi-dark .navbar-header .navbar-nav .nav-link {\n    color: #fff; }\n  .navbar-dark .navbar-container .navbar-nav .nav-link,\n  .navbar-semi-dark .navbar-container .navbar-nav .nav-link {\n    color: #b8c2cc; }\n  .navbar-light .navbar-header .navbar-nav .nav-link,\n  .navbar-semi-light .navbar-header .navbar-nav .nav-link {\n    color: #b8c2cc; }\n  .navbar-light .navbar-container .navbar-nav .nav-link,\n  .navbar-semi-light .navbar-container .navbar-nav .nav-link {\n    color: #b8c2cc; } }\n\n.headroom {\n  will-change: transform;\n  transition: transform 200ms linear; }\n\n.headroom--pinned-top {\n  transform: translateY(0%); }\n\n.headroom--unpinned-top {\n  transform: translateY(-100%); }\n\n.headroom--pinned-bottom {\n  transform: translateY(0%); }\n\n.headroom--unpinned-bottom {\n  transform: translateY(100%); }\n\n@media (max-width: 575.98px) {\n  .header-navbar .navbar-container ul.nav li .selected-language {\n    display: none; } }\n\nbody[data-col=\"1-column\"] .header-navbar.floating-nav {\n  width: calc(100vw - (100vw - 100%) - calc(2.2rem * 2)); }\n\n@media (min-width: 1200px) and (-ms-high-contrast: active), (-ms-high-contrast: none) {\n  body:not([data-col=\"1-columns\"]) .header-navbar.floating-nav {\n    width: calc(100vw - (100vw - 100%) - 60px - 260px); } }\n\n@media (max-width: 1199.98px) {\n  .header-navbar .navbar-container ul.nav li a.dropdown-user-link {\n    padding: 0.7rem 1.23rem; }\n  .header-navbar .navbar-container ul.nav li .dropdown-toggle::after {\n    margin-right: 0;\n    margin-left: -2px; }\n  .header-navbar.navbar-static-top {\n    left: 0;\n    width: 100%; } }\n\n@media (max-width: 767px) {\n  #navbar-mobile.navbar-collapse .navbar-nav {\n    margin: 0;\n    flex-flow: row wrap; }\n    #navbar-mobile.navbar-collapse .navbar-nav .dropdown-menu {\n      position: absolute; }\n    #navbar-mobile.navbar-collapse .navbar-nav .nav-item {\n      float: left; } }\n\n@media (max-width: 991.98px) {\n  #navbar-mobile.navbar-collapse .navbar-nav {\n    margin: 0;\n    flex-flow: row wrap; }\n    #navbar-mobile.navbar-collapse .navbar-nav .dropdown-menu {\n      position: absolute; }\n    #navbar-mobile.navbar-collapse .navbar-nav .nav-item {\n      float: left; } }\n\n/* ----------- iPhone 5, 5S  iPhone 6----------- */\n/* Landscape */\n@media only screen and (min-device-width: 26.78em) and (max-device-width: 47.64em) and (-webkit-min-device-pixel-ratio: 2) and (orientation: landscape) {\n  .header-navbar .navbar-container .show .dropdown-menu {\n    max-height: 180px; } }\n\n/* ----------- iPhone 6+ ----------- */\n/* Landscape */\n@media only screen and (min-device-width: 29.57em) and (max-device-width: 52.57em) and (-webkit-min-device-pixel-ratio: 3) and (orientation: landscape) {\n  .header-navbar .navbar-container .show .dropdown-menu {\n    max-height: 280px; } }\n\n/*----------------------------- For Navbar Component -------------------------*/\n#navbar-component .navbar {\n  z-index: auto !important; }\n  #navbar-component .navbar.floating-nav {\n    border-radius: .5rem; }\n  #navbar-component .navbar .navbar-nav .nav-item a {\n    color: inherit; }\n  #navbar-component .navbar.header-navbar.navbar-dark .navbar-nav .nav-link {\n    color: #fff; }\n    #navbar-component .navbar.header-navbar.navbar-dark .navbar-nav .nav-link i {\n      color: #fff; }\n  #navbar-component .navbar .navbar-nav .dropdown-language.show,\n  #navbar-component .navbar .navbar-nav .dropdown-notification.show,\n  #navbar-component .navbar .navbar-nav .dropdown-user.show {\n    position: relative; }\n  #navbar-component .navbar .navbar-nav .dropdown-language .dropdown-menu.show,\n  #navbar-component .navbar .navbar-nav .dropdown-notification .dropdown-menu.show,\n  #navbar-component .navbar .navbar-nav .dropdown-user .dropdown-menu.show {\n    position: absolute;\n    right: 0;\n    left: auto !important; }\n  #navbar-component .navbar.navbar-dark .navbar-toggler, #navbar-component .navbar.navbar-light .navbar-toggler {\n    font-size: 1.2rem; }\n    #navbar-component .navbar.navbar-dark .navbar-toggler:focus, #navbar-component .navbar.navbar-light .navbar-toggler:focus {\n      outline: 0; }\n\n#navbar-component #navbar-collapsed .navbar {\n  border-radius: 0; }\n\n@media (min-width: 992px) {\n  #navbar-component .navbar .navbar-container {\n    background: inherit; }\n  #navbar-component .nav .dropdown-language {\n    float: right; } }\n\n@media (max-width: 992px) {\n  #navbar-component .navbar .navbar-container {\n    background: inherit; }\n    #navbar-component .navbar .navbar-container .navbar-nav {\n      flex-direction: row; } }\n\n@media (max-width: 1201px) {\n  .header-navbar.fixed-top {\n    left: 0; }\n  .horizontal-layout .header-navbar .navbar-container {\n    padding-left: 1.5rem;\n    padding-right: 1.2rem; } }\n\n@media (max-width: 1199px) {\n  .header-navbar .navbar-container ul.nav li a.dropdown-user-link .user-name {\n    margin-bottom: 0; } }\n\n@media (max-width: 768px) {\n  #navbar-component .navbar .navbar-nav .dropdown-notification.show {\n    position: static; } }\n\n@media (max-width: 575.98px) {\n  .header-navbar.floating-nav {\n    width: calc(100vw - (100vw - 100%) - 3.5rem) !important;\n    margin-left: 1.2rem;\n    margin-right: 1.2rem; }\n  .content.app-content .content-area-wrapper {\n    margin-left: 1.2rem !important;\n    margin-right: 1.2rem !important; }\n  .header-navbar .navbar-container {\n    padding-left: 1rem !important;\n    padding-right: 0 !important; } }\n\n@media (max-width: 992px) {\n  .navbar-container #navbar-mobile .nav-back {\n    margin-top: 5px; } }\n\n.card-group, .card-deck {\n  margin-bottom: 0.75rem; }\n\n.card {\n  margin-bottom: 2.2rem;\n  border: none;\n  border-radius: 0.5rem;\n  box-shadow: 0px 4px 25px 0px rgba(0, 0, 0, 0.1);\n  transition: all .3s ease-in-out; }\n  .card .card {\n    box-shadow: none !important; }\n  .card .card-subtitle {\n    margin-top: .5rem; }\n  .card .card-title {\n    font-weight: 500;\n    letter-spacing: 0.05rem;\n    font-size: 1.32rem;\n    margin-bottom: 0.5rem; }\n  .card .card-bordered {\n    border: 1px solid rgba(0, 0, 0, 0.125); }\n  .card .card-img {\n    object-fit: cover; }\n  .card .card-img-overlay {\n    border-radius: 0.25rem; }\n  .card.card-fullscreen {\n    display: block;\n    z-index: 9999;\n    position: fixed;\n    width: 100% !important;\n    height: 100% !important;\n    top: 0;\n    right: 0;\n    left: 0;\n    bottom: 0;\n    overflow: auto; }\n  .card .card-body[class*='border-bottom-'] {\n    border-bottom-width: 2px !important; }\n  .card .card-img-overlay.bg-overlay {\n    background: rgba(0, 0, 0, 0.45); }\n  .card .card-img-overlay .text-muted {\n    color: #1e1e1e !important; }\n  .card.card-minimal {\n    border: none;\n    box-shadow: none; }\n  .card .card-header {\n    display: flex;\n    align-items: center;\n    flex-wrap: wrap;\n    justify-content: space-between;\n    border-bottom: none;\n    padding: 1.5rem 1.5rem 0;\n    background-color: transparent; }\n    .card .card-header .card-title {\n      margin-bottom: 0; }\n    .card .card-header .heading-elements,\n    .card .card-header .heading-elements-toggle {\n      background-color: inherit;\n      position: absolute;\n      top: 17px;\n      right: 21px;\n      cursor: pointer; }\n      .card .card-header .heading-elements.heading-top-elements .page-item,\n      .card .card-header .heading-elements-toggle.heading-top-elements .page-item {\n        display: inline-block; }\n      .card .card-header .heading-elements a,\n      .card .card-header .heading-elements-toggle a {\n        padding: 0;\n        padding-left: 8px; }\n        .card .card-header .heading-elements a.btn,\n        .card .card-header .heading-elements-toggle a.btn {\n          padding-top: 6px;\n          padding-bottom: 6px; }\n        .card .card-header .heading-elements a[data-action=\"collapse\"] i,\n        .card .card-header .heading-elements-toggle a[data-action=\"collapse\"] i {\n          transition: all .25s ease-out;\n          display: inline-block; }\n        .card .card-header .heading-elements a[data-action=\"collapse\"].rotate i,\n        .card .card-header .heading-elements-toggle a[data-action=\"collapse\"].rotate i {\n          transform: rotate(-180deg); }\n  .card .card-footer {\n    border-top: 1px solid #dae1e7; }\n\n.card-columns .card {\n  margin-bottom: 2.2rem; }\n\n.text-white .card-text {\n  color: white; }\n\n.text-white .card-img-overlay .text-muted {\n  color: #fff !important; }\n\n.text-white code {\n  background-color: white; }\n\n.text-white .heading-elements i {\n  color: #fff; }\n\n.card-head-inverse {\n  color: #fff; }\n  .card-head-inverse .heading-elements i {\n    color: #fff; }\n\n.card-transparent {\n  background-color: transparent; }\n\n@media (max-width: 991.98px) {\n  .heading-elements {\n    text-align: center; }\n    .heading-elements .list-inline {\n      display: none; }\n    .heading-elements.visible {\n      top: 22px !important;\n      display: block;\n      margin-top: 0;\n      top: 100%;\n      top: 50px;\n      height: auto;\n      left: 0px;\n      z-index: 997;\n      position: absolute;\n      width: 100%; }\n      .heading-elements.visible .list-inline {\n        background-color: #fff;\n        display: block;\n        position: absolute;\n        top: 12px;\n        right: 15px; } }\n\n@media (min-width: 992px) {\n  .heading-elements-toggle {\n    display: none; } }\n\n.overlay-img-card .card-img-overlay, .overlay-img-card img {\n  max-height: 34.64rem; }\n\n.activity-timeline.timeline-left {\n  border-left: 2px solid #dae1e7;\n  padding-left: 40px;\n  margin-left: 1.5rem; }\n  .activity-timeline.timeline-left li {\n    position: relative;\n    margin-bottom: 20px; }\n    .activity-timeline.timeline-left li p {\n      margin-bottom: 0; }\n    .activity-timeline.timeline-left li .timeline-icon {\n      position: absolute;\n      top: 0;\n      left: -4.3rem;\n      padding: .7rem;\n      display: flex;\n      align-items: center;\n      border-radius: 50%;\n      color: #fff; }\n      .activity-timeline.timeline-left li .timeline-icon i {\n        vertical-align: sub; }\n\n.activity-timeline.timeline-right {\n  border-right: 2px solid #dae1e7;\n  padding-right: 40px;\n  margin-right: 1.5rem; }\n  .activity-timeline.timeline-right li {\n    position: relative;\n    margin-bottom: 20px;\n    text-align: right; }\n    .activity-timeline.timeline-right li p {\n      margin-bottom: 0; }\n    .activity-timeline.timeline-right li .timeline-icon {\n      position: absolute;\n      top: 0;\n      right: -4.3rem;\n      padding: .6rem .7rem;\n      border-radius: 50%;\n      color: #fff; }\n      .activity-timeline.timeline-right li .timeline-icon i {\n        vertical-align: sub; }\n\n@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {\n  .card-body, .card-content {\n    min-height: 1px; }\n  .profile-card-2 .card .card-header {\n    display: block; }\n  .profile-card-1 .card .avatar,\n  .profile-card-3 .card .avatar {\n    margin-left: auto;\n    margin-right: auto; } }\n\n.breadcrumb {\n  font-size: 1rem;\n  font-family: \"Montserrat\", Helvetica, Arial, serif;\n  background-color: transparent;\n  padding: 0.5rem 0 0.5rem 1rem !important;\n  border-left: 1px solid #d6dce1;\n  border-radius: 0;\n  /* .breadcrumb-item:first-child{\n        a{\n            &:after{\n                content: \"\\e965\";\n                font-family: 'feather';\n            }\n        }\n    } */ }\n  .breadcrumb > li + li::before {\n    padding-right: .6rem;\n    padding-left: .6rem; }\n  .breadcrumb .breadcrumb-item + .breadcrumb-item {\n    padding-left: 0; }\n    .breadcrumb .breadcrumb-item + .breadcrumb-item:before {\n      content: \"\\e847\";\n      font-family: 'feather';\n      color: #626262; }\n  .breadcrumb .breadcrumb-item.active {\n    color: #626262; }\n\n/* Custom scss for page headers style */\n.breadcrumbs-right .breadcrumb {\n  float: right; }\n\n.breadcrumbs-top .breadcrumb {\n  margin: 0;\n  padding: 0; }\n\n/* Component Specific */\n#component-breadcrumbs .breadcrumb {\n  border: none; }\n  #component-breadcrumbs .breadcrumb .breadcrumb-item + .breadcrumb-item:before {\n    font-family: none;\n    padding: 0 1rem; }\n\n#component-breadcrumbs .default-breadcrumb.breadcrumb .breadcrumb-item + .breadcrumb-item:before {\n  content: \"/\"; }\n\n#component-breadcrumbs .breadcrumb-dots.breadcrumb .breadcrumb-item + .breadcrumb-item:before {\n  content: \".\";\n  position: relative;\n  top: -4px; }\n\n#component-breadcrumbs .breadcrumb-dashes.breadcrumb .breadcrumb-item + .breadcrumb-item:before {\n  content: \"-\"; }\n\n#component-breadcrumbs .breadcrumb-pipes.breadcrumb .breadcrumb-item + .breadcrumb-item:before {\n  content: \"|\"; }\n\n#component-breadcrumbs .breadcrumb-chevron.breadcrumb .breadcrumb-item + .breadcrumb-item:before {\n  content: \"\\e844\";\n  font-family: 'feather';\n  position: relative;\n  top: 1px; }\n\n#breadcrumb-alignment .breadcrumb-wrapper {\n  box-shadow: 1px 1px 10px rgba(0, 0, 0, 0.1);\n  padding: 1px;\n  border-radius: 10px; }\n  #breadcrumb-alignment .breadcrumb-wrapper .breadcrumb {\n    margin-top: .8rem; }\n\n.badge {\n  color: #fff;\n  background-color: #7367f0;\n  font-weight: 400; }\n  .badge[class*='badge-'] [class*='icon-'] {\n    line-height: 1; }\n  .badge[class*='badge-'] a {\n    color: #fff; }\n  .badge[class*='badge-'] i {\n    vertical-align: middle; }\n  .badge[class*='badge-'] .dropdown-toggle span, .badge[class*='badge-'] .dropdown-toggle i, .badge[class*='badge-'].dropdown-toggle span, .badge[class*='badge-'].dropdown-toggle i {\n    vertical-align: text-top; }\n  .badge[class*='badge-'] .dropdown-toggle i, .badge[class*='badge-'].dropdown-toggle i {\n    padding-left: .2rem; }\n  .badge[class*='badge-'] .dropdown-toggle::after, .badge[class*='badge-'].dropdown-toggle::after {\n    position: relative;\n    top: 0;\n    left: 0;\n    font-size: 1rem; }\n  .badge[class*='badge-'] .dropdown-menu a {\n    color: #212529; }\n  .badge.badge-square {\n    border-radius: 0; }\n  .badge.badge-up {\n    position: absolute;\n    top: -1rem;\n    right: -1rem; }\n    .badge.badge-up.badge-sm {\n      top: -.5rem;\n      right: -.5rem; }\n\n.badge-xl {\n  font-size: 1.8rem; }\n\n.badge-lg {\n  font-size: 1.2rem; }\n\n.badge-md {\n  font-size: 1rem; }\n\n.badge-sm {\n  font-size: 0.7rem; }\n\n.badge-icon i {\n  font-size: 100%;\n  margin-right: 5px; }\n\n.dropup .badge {\n  cursor: pointer; }\n\n.nav {\n  border-radius: 0.25rem; }\n  .nav.wrap-border {\n    border: 1px solid #ddd; }\n    .nav.wrap-border li.nav-header {\n      margin: 0 0.5rem; }\n    .nav.wrap-border li.nav-item,\n    .nav.wrap-border div {\n      padding: 2px .714rem; }\n  .nav.square-border {\n    border-radius: 0; }\n    .nav.square-border .nav-item .nav-link.active {\n      border-radius: 0; }\n  .nav .modern-nav-toggle {\n    padding: 1.571rem 0; }\n  .nav.nav-pills {\n    margin-bottom: 1rem; }\n    .nav.nav-pills .nav-item .nav-link {\n      border-radius: .357rem;\n      padding: .2rem 1rem;\n      padding-top: .3rem;\n      font-size: 0.98rem;\n      margin-right: 0.5rem;\n      color: #000; }\n      .nav.nav-pills .nav-item .nav-link.active {\n        color: #fff; }\n      .nav.nav-pills .nav-item .nav-link.disabled {\n        color: #b8c2cc; }\n      .nav.nav-pills .nav-item .nav-link.dropdown-toggle::after {\n        top: 1px;\n        left: 1px; }\n    .nav.nav-pills .nav-item.dropdown.show .nav-link {\n      color: #fff; }\n    .nav.nav-pills .nav-item.dropdown.show .dropdown-item.active:hover {\n      color: #7367f0; }\n    .nav.nav-pills.nav-justified {\n      width: 100%; }\n      .nav.nav-pills.nav-justified .nav-item {\n        float: none; }\n      .nav.nav-pills.nav-justified .nav-link {\n        text-align: center;\n        margin-bottom: 5px; }\n      .nav.nav-pills.nav-justified > .dropdown .dropdown-menu {\n        top: auto;\n        left: auto; }\n      @media (min-width: 576px) {\n        .nav.nav-pills.nav-justified .nav-item {\n          display: block;\n          width: 1%; }\n        .nav.nav-pills.nav-justified .nav-link {\n          margin-bottom: 0; } }\n      .nav.nav-pills.nav-justified .nav-link {\n        margin-right: 0;\n        border-radius: 0.5rem; }\n      @media (min-width: 576px) {\n        .nav.nav-pills.nav-justified .nav-link.active,\n        .nav.nav-pills.nav-justified .nav-link.active:hover,\n        .nav.nav-pills.nav-justified .nav-link.active:focus {\n          border-bottom-color: transparent; } }\n      .nav.nav-pills.nav-justified .nav-link {\n        display: block; }\n        .nav.nav-pills.nav-justified .nav-link.active {\n          border: none; }\n          .nav.nav-pills.nav-justified .nav-link.active:hover, .nav.nav-pills.nav-justified .nav-link.active:focus {\n            border: none; }\n    .nav.nav-pills.nav-active-bordered-pill .nav-item a.nav-link.active {\n      border: 1px solid #7367f0;\n      border-radius: 0.25rem;\n      color: #7367f0;\n      background-color: #fff; }\n  .nav.nav-tabs {\n    border: none;\n    margin-bottom: 1rem;\n    position: relative;\n    border-radius: 0; }\n    .nav.nav-tabs .nav-item {\n      position: relative; }\n      .nav.nav-tabs .nav-item .nav-link {\n        color: #626262;\n        font-size: 0.95rem;\n        border: none;\n        min-width: auto;\n        font-weight: 450;\n        padding: .61rem .635rem;\n        border-radius: 0; }\n        .nav.nav-tabs .nav-item .nav-link.active {\n          border: none;\n          position: relative;\n          color: #7367f0;\n          transition: all .2s ease;\n          background-color: transparent; }\n          .nav.nav-tabs .nav-item .nav-link.active:after {\n            content: attr(data-before);\n            height: 2px;\n            width: 100%;\n            left: 0;\n            position: absolute;\n            bottom: 0;\n            top: 100%;\n            background: linear-gradient(30deg, #7367f0, rgba(115, 103, 240, 0.5)) !important;\n            box-shadow: 0 0 8px 0 rgba(115, 103, 240, 0.5) !important;\n            transform: translateY(0px);\n            transition: all .2s linear; }\n        .nav.nav-tabs .nav-item .nav-link.dropdown-toggle::after {\n          top: 1px;\n          left: 1px; }\n        .nav.nav-tabs .nav-item .nav-link.disabled {\n          color: #adb5bd; }\n    .nav.nav-tabs.nav-justified {\n      width: 100%; }\n      .nav.nav-tabs.nav-justified .nav-item {\n        float: none; }\n      .nav.nav-tabs.nav-justified .nav-link {\n        text-align: center;\n        margin-bottom: 5px; }\n      .nav.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n        top: auto;\n        left: auto; }\n      @media (min-width: 576px) {\n        .nav.nav-tabs.nav-justified .nav-item {\n          display: block;\n          width: 1%; }\n        .nav.nav-tabs.nav-justified .nav-link {\n          margin-bottom: 0; } }\n      .nav.nav-tabs.nav-justified .nav-link {\n        margin-right: 0;\n        border-radius: 0.5rem; }\n      @media (min-width: 576px) {\n        .nav.nav-tabs.nav-justified .nav-link.active,\n        .nav.nav-tabs.nav-justified .nav-link.active:hover,\n        .nav.nav-tabs.nav-justified .nav-link.active:focus {\n          border-bottom-color: transparent; } }\n      .nav.nav-tabs.nav-justified .nav-item a.nav-link {\n        display: block;\n        border-radius: 0; }\n        .nav.nav-tabs.nav-justified .nav-item a.nav-link.active {\n          border: none;\n          background-color: #fff; }\n        .nav.nav-tabs.nav-justified .nav-item a.nav-link:hover {\n          border-color: transparent; }\n\n.nav-vertical {\n  overflow: hidden; }\n  .nav-vertical .nav.nav-tabs .nav-item .nav-link {\n    border: none;\n    margin-bottom: 0; }\n    .nav-vertical .nav.nav-tabs .nav-item .nav-link.active {\n      border: none;\n      border-radius: 0; }\n      .nav-vertical .nav.nav-tabs .nav-item .nav-link.active:after {\n        transform: rotate(90deg);\n        left: auto;\n        right: -1.5rem;\n        bottom: 100%;\n        top: 1.25rem;\n        width: 2.14rem; }\n    .nav-vertical .nav.nav-tabs .nav-item .nav-link:hover {\n      border-right: none; }\n  .nav-vertical .nav.nav-tabs.nav-left {\n    float: left;\n    display: table;\n    margin-right: 1rem; }\n    .nav-vertical .nav.nav-tabs.nav-left ~ .tab-content .tab-pane {\n      display: none;\n      background-color: #fff;\n      overflow-y: auto; }\n      .nav-vertical .nav.nav-tabs.nav-left ~ .tab-content .tab-pane.active {\n        display: block; }\n  .nav-vertical .nav.nav-tabs.nav-right {\n    float: right;\n    display: table;\n    margin-left: 1rem; }\n    .nav-vertical .nav.nav-tabs.nav-right .nav-item .nav-link.active:after {\n      left: -1.5rem; }\n    .nav-vertical .nav.nav-tabs.nav-right ~ .tab-content .tab-pane {\n      display: none;\n      background-color: #fff;\n      overflow-y: auto;\n      padding-right: 1rem; }\n      .nav-vertical .nav.nav-tabs.nav-right ~ .tab-content .tab-pane.active {\n        display: block; }\n\n@media (max-width: 576px) {\n  .nav-vertical .nav.nav-tabs .nav-item .nav-link.active:after {\n    height: 0; } }\n\n.alert {\n  font-weight: 500;\n  border: none; }\n  .alert .close:focus {\n    outline: 0; }\n  .alert p {\n    font-weight: 500;\n    padding: 2px 0;\n    margin-bottom: 0;\n    vertical-align: middle; }\n  .alert span {\n    vertical-align: middle; }\n  .alert .alert-heading {\n    font-weight: 700;\n    font-size: 0.9rem;\n    padding: 0;\n    padding-bottom: 8px; }\n  .alert.alert-dark .alert-heading {\n    box-shadow: rgba(52, 58, 64, 0.4) 0px 6px 15px -7px; }\n  .alert.alert-light .alert-heading {\n    box-shadow: rgba(248, 249, 250, 0.4) 0px 6px 15px -7px; }\n\n.media-list .media {\n  padding: 1.25rem;\n  width: 100%;\n  margin-top: 0; }\n  .media-list .media .media-left {\n    padding-right: 1rem; }\n  .media-list .media .media-right {\n    padding-left: 1rem; }\n\n.media-list a.media {\n  color: #b8c2cc !important; }\n\n.media-bordered .media {\n  border-top: 1px solid #E4E7ED; }\n  .media-bordered .media:first-child {\n    border-top: 0; }\n\n/*=========================================================================================\n  File Name: progress.scss\n  Description: Extended bootstrap progress bar scss.\n  ----------------------------------------------------------------------------------------\n  Item Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n  Author: PIXINVENT\n  Author URL: http://www.themeforest.net/user/pixinvent\n  ----------------------------------------------------------------------------------------\n\n  Modifiers:       `progress-lg`\n                   `progress-md`\n                   `progress-sm`\n                   `progress-xs`\n\n==========================================================================================*/\n.progress {\n  margin-bottom: 3rem; }\n  .progress:last-child {\n    margin-bottom: 1rem; }\n  .progress.progress-xl {\n    height: 1.14rem; }\n  .progress.progress-lg {\n    height: 0.857rem; }\n  .progress.progress-md {\n    height: 0.57rem; }\n  .progress.progress-sm {\n    height: 0.143rem; }\n  .progress .progress-bar {\n    border-radius: 1.28rem; }\n\n/* ===============================================================================================\n\tFile Name: list-group.scss\n\tDescription: Contain list item, list group related extended SCSS.\n\t----------------------------------------------------------------------------------------------\n\tItem Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n\tAuthor: PIXINVENT\n\tAuthor URL: http://www.themeforest.net/user/pixinvent\n================================================================================================*/\nul.list-inline li {\n  display: inline-block; }\n\nul.list-inline.list-inline-pipe > li + li:before {\n  content: ' | ';\n  padding-right: 2px; }\n\n.list-group .list-group-item {\n  line-height: 1.5; }\n  .list-group .list-group-item.active:hover {\n    background-color: #7367f0; }\n  .list-group .list-group-item.active:focus {\n    outline: 0; }\n    .list-group .list-group-item.active:focus:hover {\n      color: #fff; }\n  .list-group .list-group-item:hover {\n    background-color: #f8f8f8; }\n  .list-group .list-group-item i {\n    font-size: 1.2rem;\n    font-weight: 100;\n    position: relative; }\n  .list-group .list-group-item:not(.active):focus:active {\n    color: inherit; }\n\n.list-group .list-group-item-action:focus {\n  outline: 0; }\n\n.list-group-item.gu-mirror {\n  border-radius: 0; }\n\n.users-list li + li {\n  margin-left: -.785rem; }\n\n.users-list li img {\n  border: 2px solid #fff;\n  box-shadow: 0px 2px 10px 0px rgba(184, 194, 204, 0.3); }\n\n.users-list li .badge {\n  color: #22292f; }\n\n.toast-bs-container {\n  z-index: 1040;\n  position: fixed;\n  top: 0;\n  left: 0;\n  width: 100%; }\n  .toast-bs-container .toast-position {\n    position: relative;\n    top: 0;\n    right: 0;\n    display: flex;\n    flex-direction: column;\n    flex-wrap: wrap-reverse; }\n    .toast-bs-container .toast-position .toast.show {\n      opacity: 1;\n      z-index: 1030; }\n\n.toast-placement {\n  position: static;\n  top: 0; }\n  .toast-placement .toast {\n    position: fixed;\n    top: 0;\n    z-index: 1030; }\n\n.toast {\n  display: none;\n  background-color: white;\n  margin-top: .75rem; }\n  .toast .toast-header .close:focus, .toast .toast-header .close:active {\n    outline: none; }\n\n.toast.show.toast-wrapper {\n  position: static; }\n\n.toast.toast-translucent {\n  opacity: 1;\n  display: block; }\n\n.toast-header img {\n  width: 35px;\n  height: 24px; }\n\n@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {\n  .toast-bs-container {\n    position: fixed !important;\n    left: 74% !important; } }\n\n_:-ms-lang(x),\n.toast-bs-container {\n  position: fixed !important;\n  left: 74% !important; }\n\n.accordion .collapse-title,\n.collapse-bordered .collapse-title {\n  font-weight: 400;\n  font-size: 1.2rem; }\n\n.accordion .card-header,\n.collapse-bordered .card-header {\n  cursor: pointer; }\n\n.collapse-title {\n  color: inherit; }\n  .collapse-title:hover {\n    color: inherit; }\n\n.collapse-bordered .card:first-child {\n  border-top: 0; }\n\n.collapse-bordered .card:last-child {\n  border-bottom: 0; }\n\n.collapse-bordered .card {\n  margin-bottom: 0;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.04);\n  border-radius: 0; }\n  .collapse-bordered .card .card-header {\n    padding: 1rem; }\n  .collapse-bordered .card .card-body {\n    padding: 1rem;\n    line-height: 1.5; }\n\n.accordion .collapse-border-item.card {\n  border: 1px solid rgba(0, 0, 0, 0.1);\n  margin-bottom: 0; }\n  .accordion .collapse-border-item.card:first-child {\n    border-bottom: 0; }\n  .accordion .collapse-border-item.card .card-header {\n    padding: 1rem; }\n  .accordion .collapse-border-item.card .card-body {\n    padding: 1rem;\n    line-height: 1.5; }\n\n.accordion-shadow {\n  box-shadow: 0 0px 4px 0 rgba(0, 0, 0, 0.1);\n  padding: .15rem .75rem;\n  border-radius: 0.5rem; }\n  .accordion-shadow .card.open {\n    border-radius: 0.571rem;\n    margin: 10px 0;\n    border: 0;\n    box-shadow: 0px 0px 8px 0px rgba(0, 0, 0, 0.1) !important; }\n  .accordion-shadow .card:first-child {\n    border-top-left-radius: 0.571rem;\n    border-top-right-radius: 0.571rem; }\n  .accordion-shadow .card:last-child {\n    border-bottom-left-radius: 0.571rem;\n    border-bottom-right-radius: 0.571rem; }\n\n.collapse-border {\n  border: 1px solid rgba(0, 0, 0, 0.1);\n  border-radius: 0.5rem; }\n  .collapse-border + .collapse.show {\n    border: 1px solid rgba(0, 0, 0, 0.1); }\n\n.collapse-margin {\n  margin-top: .71rem;\n  margin-bottom: .71rem !important;\n  box-shadow: 0 2px 15px 0 rgba(0, 0, 0, 0.05);\n  border-radius: 5px;\n  border-bottom: 0 solid transparent !important; }\n  .collapse-margin .card-header {\n    padding: 1rem;\n    border-radius: 5px; }\n  .collapse-margin .card-body {\n    padding: 1rem;\n    line-height: 1.5rem; }\n\n.pagination .page-item {\n  border-radius: 5rem; }\n  .pagination .page-item.prev-item .page-link, .pagination .page-item.next-item .page-link, .pagination .page-item.first .page-link, .pagination .page-item.last .page-link {\n    color: #7367f0; }\n  .pagination .page-item.prev-item.disabled .page-link, .pagination .page-item.next-item.disabled .page-link, .pagination .page-item.first.disabled .page-link, .pagination .page-item.last.disabled .page-link {\n    color: #6c757d; }\n  .pagination .page-item:not(.prev-item) .page-link, .pagination .page-item:not(.next-item) .page-link, .pagination .page-item:not(.first) .page-link, .pagination .page-item:not(.last) .page-link, .pagination .page-item:not(.active) .page-link {\n    line-height: 1.3; }\n  .pagination .page-item.prev-item {\n    margin-right: .3571rem; }\n    .pagination .page-item.prev-item .page-link {\n      background-color: #f0f0f0;\n      padding: 0.572rem 0.651rem;\n      border-radius: 50%; }\n      .pagination .page-item.prev-item .page-link:before {\n        content: \"\\e843\";\n        font-family: 'feather'; }\n      .pagination .page-item.prev-item .page-link:hover {\n        background: #7367f0;\n        color: #fff; }\n    .pagination .page-item.prev-item ~ .page-item:nth-child(2) {\n      border-top-left-radius: 5rem;\n      border-bottom-left-radius: 5rem; }\n      .pagination .page-item.prev-item ~ .page-item:nth-child(2) .page-link {\n        border-top-left-radius: 5rem !important;\n        border-bottom-left-radius: 5rem !important; }\n    .pagination .page-item.prev-item ~ .page-item:nth-last-child(2) {\n      border-top-right-radius: 5rem;\n      border-bottom-right-radius: 5rem; }\n      .pagination .page-item.prev-item ~ .page-item:nth-last-child(2) .page-link {\n        border-top-right-radius: 5rem !important;\n        border-bottom-right-radius: 5rem !important; }\n  .pagination .page-item.next-item {\n    margin-left: .3571rem; }\n    .pagination .page-item.next-item .page-link {\n      background-color: #f0f0f0;\n      padding: 0.572rem 0.651rem;\n      border-radius: 50%; }\n      .pagination .page-item.next-item .page-link:after {\n        content: \"\\e844\";\n        font-family: 'feather'; }\n      .pagination .page-item.next-item .page-link:hover {\n        background: #7367f0;\n        color: #fff; }\n  .pagination .page-item.prev .page-link:before, .pagination .page-item.previous .page-link:before {\n    content: \"\\e843\";\n    font-family: 'feather'; }\n  .pagination .page-item.next .page-link:after {\n    content: \"\\e844\";\n    font-family: 'feather'; }\n  .pagination .page-item .page-link {\n    border: none;\n    margin: 0;\n    color: rgba(0, 0, 0, 0.6);\n    background-color: #f0f0f0;\n    margin-left: 0;\n    font-size: 1rem;\n    font-weight: 700; }\n    .pagination .page-item .page-link i {\n      position: relative;\n      top: 1px; }\n    .pagination .page-item .page-link:focus {\n      box-shadow: none; }\n    .pagination .page-item .page-link:hover {\n      color: #7367f0; }\n  .pagination .page-item.active {\n    background-color: #f0f0f0;\n    border-radius: 0; }\n    .pagination .page-item.active .page-link {\n      z-index: 3;\n      border-radius: 5rem;\n      background-color: #7367f0;\n      color: #fff;\n      transform: scale(1.05); }\n  .pagination .page-item:first-child:not(.prev-item).active {\n    border-top-left-radius: 1.428rem;\n    border-bottom-left-radius: 1.428rem; }\n    .pagination .page-item:first-child:not(.prev-item).active .page-link {\n      border-radius: 5rem; }\n  .pagination .page-item:first-child:not(.prev-item) .page-link {\n    border-top-left-radius: 1.428rem;\n    border-bottom-left-radius: 1.428rem; }\n  .pagination .page-item:last-child:not(.next-item).active {\n    border-top-right-radius: 1.428rem;\n    border-bottom-right-radius: 1.428rem; }\n    .pagination .page-item:last-child:not(.next-item).active .page-link {\n      border-radius: 5rem; }\n  .pagination .page-item:last-child:not(.next-item) .page-link {\n    border-top-right-radius: 1.428rem;\n    border-bottom-right-radius: 1.428rem; }\n\n.pagination.pagination-lg .page-item .page-link {\n  font-size: 1.5rem;\n  transform: scale(1); }\n\n.modal .modal-header {\n  background-color: #f8f8f8;\n  border-radius: .42rem;\n  padding: .8rem;\n  border-bottom: none; }\n  .modal .modal-header .close {\n    padding: .2rem .62rem;\n    box-shadow: 0 5px 20px 0 rgba(0, 0, 0, 0.1);\n    border-radius: .357rem;\n    background: #fff;\n    opacity: 1;\n    transition: all .23s ease .1s;\n    position: relative;\n    transform: translate(8px, -2px); }\n    .modal .modal-header .close span {\n      font-weight: 400;\n      font-size: 2rem;\n      color: #7367f0; }\n    .modal .modal-header .close:hover, .modal .modal-header .close:focus, .modal .modal-header .close:active {\n      opacity: 1;\n      outline: none;\n      transform: translate(5px, 3px);\n      box-shadow: none; }\n  .modal .modal-header[class*=\"bg-\"] {\n    color: #fff;\n    border-bottom-left-radius: 5px;\n    border-bottom-right-radius: 5px; }\n    .modal .modal-header[class*=\"bg-\"] .modal-title {\n      color: #fff; }\n  .modal .modal-header.bg-primary .close span {\n    color: #7367f0; }\n  .modal .modal-header.bg-success .close span {\n    color: #28a745; }\n  .modal .modal-header.bg-info .close span {\n    color: #00cfe8; }\n  .modal .modal-header.bg-danger .close span {\n    color: #dc3545; }\n  .modal .modal-header.bg-warning .close span {\n    color: #ff9f43; }\n  .modal .modal-header.bg-dark .close span {\n    color: #343a40; }\n\n.modal .modal-content {\n  border: none;\n  overflow: visible;\n  box-shadow: 0 5px 20px 0 rgba(0, 0, 0, 0.1); }\n\n.modal .modal-footer {\n  border-color: rgba(0, 0, 0, 0.05); }\n\n.modal-sm {\n  max-width: 400px; }\n\n.modal-xs {\n  max-width: 300px; }\n\n.modal-xl {\n  max-width: 94%;\n  margin-left: 3%;\n  margin-right: 3%; }\n\n@media (max-width: 576px) {\n  .modal {\n    padding-right: 1rem;\n    padding-left: 1rem; }\n    .modal .modal-xs,\n    .modal .modal-sm {\n      max-width: unset; } }\n\n.popover {\n  z-index: 10; }\n  .popover .popover-header {\n    color: #fff;\n    border: none;\n    border-top-left-radius: 0.3rem;\n    border-top-right-radius: 0.3rem; }\n  .popover.bs-popover-bottom .arrow:after {\n    border-bottom-color: #7367f0; }\n\n.icon-bg-circle {\n  color: #fff;\n  padding: 0.5rem;\n  border-radius: 50%; }\n\n.icon-left {\n  margin-right: 0.5rem; }\n\n.icon-right {\n  margin-right: 0.5rem; }\n\n.icon-spin {\n  display: inline-block;\n  animation: spin 1s infinite linear; }\n\n.blockOverlay {\n  z-index: 1050 !important; }\n\n.blockElement, .blockPage {\n  z-index: 1051 !important; }\n\n@-moz-keyframes spin {\n  from {\n    -moz-transform: rotate(0deg); }\n  to {\n    -moz-transform: rotate(360deg); } }\n\n@-webkit-keyframes spin {\n  from {\n    -webkit-transform: rotate(0deg); }\n  to {\n    -webkit-transform: rotate(360deg); } }\n\n@keyframes spin {\n  from {\n    transform: rotate(0deg); }\n  to {\n    transform: rotate(360deg); } }\n\n.hidden {\n  display: none;\n  visibility: hidden; }\n\na:hover {\n  cursor: pointer; }\n\n.round {\n  border-radius: 1.5rem; }\n\n.square {\n  border-radius: 0; }\n\n.icon-line-height {\n  line-height: 1.5rem !important; }\n\n.table-middle td {\n  vertical-align: middle; }\n\n.spinner {\n  display: inline-block;\n  -webkit-animation: spin 1s linear infinite;\n  -o-animation: spin 1s linear infinite;\n  animation: spin 1s linear infinite; }\n\n@keyframes spin {\n  0% {\n    transform: rotate(0deg); }\n  100% {\n    transform: rotate(360deg); } }\n\nbutton:focus {\n  outline: none; }\n"
  },
  {
    "path": "public/backend/css/bootstrap.css",
    "content": "/*!\n * Bootstrap v4.3.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n/*!\n * Bootstrap v4.3.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n:root {\n  --blue: #00cfe8;\n  --indigo: #6610f2;\n  --purple: #6f42c1;\n  --pink: #e83e8c;\n  --red: #ea5455;\n  --orange: #ff9f43;\n  --yellow: #ffc107;\n  --green: #28c76f;\n  --teal: #20c997;\n  --cyan: #7367f0;\n  --white: #fff;\n  --gray: #b8c2cc;\n  --gray-dark: #1e1e1e;\n  --primary: #7367f0;\n  --secondary: #b8c2cc;\n  --success: #28c76f;\n  --info: #00cfe8;\n  --warning: #ff9f43;\n  --danger: #ea5455;\n  --light: #babfc7;\n  --dark: #1e1e1e;\n  --breakpoint-xs: 0;\n  --breakpoint-sm: 576px;\n  --breakpoint-md: 768px;\n  --breakpoint-lg: 992px;\n  --breakpoint-xl: 1200px;\n  --font-family-sans-serif: \"Montserrat\", Helvetica, Arial, serif;\n  --font-family-monospace: \"Montserrat\", Helvetica, Arial, serif; }\n\n*,\n*::before,\n*::after {\n  box-sizing: border-box; }\n\nhtml {\n  font-family: sans-serif;\n  line-height: 1.15;\n  -webkit-text-size-adjust: 100%;\n  -webkit-tap-highlight-color: rgba(34, 41, 47, 0); }\n\narticle, aside, figcaption, figure, footer, header, hgroup, main, nav, section {\n  display: block; }\n\nbody {\n  margin: 0;\n  font-family: \"Montserrat\", Helvetica, Arial, serif;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.45;\n  color: #626262;\n  text-align: left;\n  background-color: #f8f8f8; }\n\n[tabindex=\"-1\"]:focus {\n  outline: 0 !important; }\n\nhr {\n  box-sizing: content-box;\n  height: 0;\n  overflow: visible; }\n\nh1, h2, h3, h4, h5, h6 {\n  margin-top: 0;\n  margin-bottom: 0.5rem; }\n\np {\n  margin-top: 0;\n  margin-bottom: 1rem; }\n\nabbr[title],\nabbr[data-original-title] {\n  text-decoration: underline;\n  text-decoration: underline dotted;\n  cursor: help;\n  border-bottom: 0;\n  text-decoration-skip-ink: none; }\n\naddress {\n  margin-bottom: 1rem;\n  font-style: normal;\n  line-height: inherit; }\n\nol,\nul,\ndl {\n  margin-top: 0;\n  margin-bottom: 1rem; }\n\nol ol,\nul ul,\nol ul,\nul ol {\n  margin-bottom: 0; }\n\ndt {\n  font-weight: 700; }\n\ndd {\n  margin-bottom: .5rem;\n  margin-left: 0; }\n\nblockquote {\n  margin: 0 0 1rem; }\n\nb,\nstrong {\n  font-weight: bolder; }\n\nsmall {\n  font-size: 80%; }\n\nsub,\nsup {\n  position: relative;\n  font-size: 75%;\n  line-height: 0;\n  vertical-align: baseline; }\n\nsub {\n  bottom: -.25em; }\n\nsup {\n  top: -.5em; }\n\na {\n  color: #7367f0;\n  text-decoration: none;\n  background-color: transparent; }\n  a:hover {\n    color: #5e50ee;\n    text-decoration: none; }\n\na:not([href]):not([tabindex]) {\n  color: inherit;\n  text-decoration: none; }\n  a:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus {\n    color: inherit;\n    text-decoration: none; }\n  a:not([href]):not([tabindex]):focus {\n    outline: 0; }\n\npre,\ncode,\nkbd,\nsamp {\n  font-family: \"Montserrat\", Helvetica, Arial, serif;\n  font-size: 1em; }\n\npre {\n  margin-top: 0;\n  margin-bottom: 1rem;\n  overflow: auto; }\n\nfigure {\n  margin: 0 0 1rem; }\n\nimg {\n  vertical-align: middle;\n  border-style: none; }\n\nsvg {\n  overflow: hidden;\n  vertical-align: middle; }\n\ntable {\n  border-collapse: collapse; }\n\ncaption {\n  padding-top: 0.75rem;\n  padding-bottom: 0.75rem;\n  color: #b8c2cc;\n  text-align: left;\n  caption-side: bottom; }\n\nth {\n  text-align: inherit; }\n\nlabel {\n  display: inline-block;\n  margin-bottom: 0.5rem; }\n\nbutton {\n  border-radius: 0; }\n\nbutton:focus {\n  outline: 1px dotted;\n  outline: 5px auto -webkit-focus-ring-color; }\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n  margin: 0;\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit; }\n\nbutton,\ninput {\n  overflow: visible; }\n\nbutton,\nselect {\n  text-transform: none; }\n\nselect {\n  word-wrap: normal; }\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n  -webkit-appearance: button; }\n\nbutton:not(:disabled),\n[type=\"button\"]:not(:disabled),\n[type=\"reset\"]:not(:disabled),\n[type=\"submit\"]:not(:disabled) {\n  cursor: pointer; }\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n  padding: 0;\n  border-style: none; }\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  box-sizing: border-box;\n  padding: 0; }\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n  -webkit-appearance: listbox; }\n\ntextarea {\n  overflow: auto;\n  resize: vertical; }\n\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0; }\n\nlegend {\n  display: block;\n  width: 100%;\n  max-width: 100%;\n  padding: 0;\n  margin-bottom: .5rem;\n  font-size: 1.5rem;\n  line-height: inherit;\n  color: inherit;\n  white-space: normal; }\n\nprogress {\n  vertical-align: baseline; }\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto; }\n\n[type=\"search\"] {\n  outline-offset: -2px;\n  -webkit-appearance: none; }\n\n[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none; }\n\n::-webkit-file-upload-button {\n  font: inherit;\n  -webkit-appearance: button; }\n\noutput {\n  display: inline-block; }\n\nsummary {\n  display: list-item;\n  cursor: pointer; }\n\ntemplate {\n  display: none; }\n\n[hidden] {\n  display: none !important; }\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n  margin-bottom: 0.5rem;\n  font-family: inherit;\n  font-weight: 500;\n  line-height: 1.2;\n  color: #2c2c2c; }\n\nh1, .h1 {\n  font-size: 2rem; }\n\nh2, .h2 {\n  font-size: 1.74rem; }\n\nh3, .h3 {\n  font-size: 1.51rem; }\n\nh4, .h4 {\n  font-size: 1.32rem; }\n\nh5, .h5 {\n  font-size: 1.14rem; }\n\nh6, .h6 {\n  font-size: 1rem; }\n\n.lead {\n  font-size: 1.25rem;\n  font-weight: 300; }\n\n.display-1 {\n  font-size: 6rem;\n  font-weight: 300;\n  line-height: 1.2; }\n\n.display-2 {\n  font-size: 5.5rem;\n  font-weight: 300;\n  line-height: 1.2; }\n\n.display-3 {\n  font-size: 4.5rem;\n  font-weight: 300;\n  line-height: 1.2; }\n\n.display-4 {\n  font-size: 3.5rem;\n  font-weight: 300;\n  line-height: 1.2; }\n\nhr {\n  margin-top: 1rem;\n  margin-bottom: 1rem;\n  border: 0;\n  border-top: 1px solid rgba(34, 41, 47, 0.1); }\n\nsmall,\n.small {\n  font-size: smaller;\n  font-weight: 400; }\n\nmark,\n.mark {\n  padding: 0.2em;\n  background-color: #fcf8e3; }\n\n.list-unstyled {\n  padding-left: 0;\n  list-style: none; }\n\n.list-inline {\n  padding-left: 0;\n  list-style: none; }\n\n.list-inline-item {\n  display: inline-block; }\n  .list-inline-item:not(:last-child) {\n    margin-right: 0.5rem; }\n\n.initialism {\n  font-size: 90%;\n  text-transform: uppercase; }\n\n.blockquote {\n  margin-bottom: 1rem;\n  font-size: 1.25rem; }\n\n.blockquote-footer {\n  display: block;\n  font-size: smaller;\n  color: #b8c2cc; }\n  .blockquote-footer::before {\n    content: \"\\2014\\00A0\"; }\n\n.img-fluid {\n  max-width: 100%;\n  height: auto; }\n\n.img-thumbnail {\n  padding: 0.25rem;\n  background-color: #f8f8f8;\n  border: 1px solid #dae1e7;\n  border-radius: 0.5rem;\n  max-width: 100%;\n  height: auto; }\n\n.figure {\n  display: inline-block; }\n\n.figure-img {\n  margin-bottom: 0.5rem;\n  line-height: 1; }\n\n.figure-caption {\n  font-size: 90%;\n  color: #b8c2cc; }\n\ncode {\n  font-size: 90%;\n  color: #e83e8c;\n  word-break: break-word; }\n  a > code {\n    color: inherit; }\n\nkbd {\n  padding: 0.2rem 0.4rem;\n  font-size: 90%;\n  color: #fff;\n  background-color: #eee;\n  border-radius: 0.25rem; }\n  kbd kbd {\n    padding: 0;\n    font-size: 100%;\n    font-weight: 700; }\n\npre {\n  display: block;\n  font-size: 90%;\n  color: #2a2e30; }\n  pre code {\n    font-size: inherit;\n    color: inherit;\n    word-break: normal; }\n\n.pre-scrollable {\n  max-height: 340px;\n  overflow-y: scroll; }\n\n.container {\n  width: 100%;\n  padding-right: 14px;\n  padding-left: 14px;\n  margin-right: auto;\n  margin-left: auto; }\n  @media (min-width: 576px) {\n    .container {\n      max-width: 540px; } }\n  @media (min-width: 768px) {\n    .container {\n      max-width: 720px; } }\n  @media (min-width: 992px) {\n    .container {\n      max-width: 960px; } }\n  @media (min-width: 1200px) {\n    .container {\n      max-width: 1140px; } }\n\n.container-fluid {\n  width: 100%;\n  padding-right: 14px;\n  padding-left: 14px;\n  margin-right: auto;\n  margin-left: auto; }\n\n.row {\n  display: flex;\n  flex-wrap: wrap;\n  margin-right: -14px;\n  margin-left: -14px; }\n\n.no-gutters {\n  margin-right: 0;\n  margin-left: 0; }\n  .no-gutters > .col,\n  .no-gutters > [class*=\"col-\"] {\n    padding-right: 0;\n    padding-left: 0; }\n\n.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col,\n.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm,\n.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md,\n.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg,\n.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl,\n.col-xl-auto {\n  position: relative;\n  width: 100%;\n  padding-right: 14px;\n  padding-left: 14px; }\n\n.col {\n  flex-basis: 0;\n  flex-grow: 1;\n  max-width: 100%; }\n\n.col-auto {\n  flex: 0 0 auto;\n  width: auto;\n  max-width: 100%; }\n\n.col-1 {\n  flex: 0 0 8.33333%;\n  max-width: 8.33333%; }\n\n.col-2 {\n  flex: 0 0 16.66667%;\n  max-width: 16.66667%; }\n\n.col-3 {\n  flex: 0 0 25%;\n  max-width: 25%; }\n\n.col-4 {\n  flex: 0 0 33.33333%;\n  max-width: 33.33333%; }\n\n.col-5 {\n  flex: 0 0 41.66667%;\n  max-width: 41.66667%; }\n\n.col-6 {\n  flex: 0 0 50%;\n  max-width: 50%; }\n\n.col-7 {\n  flex: 0 0 58.33333%;\n  max-width: 58.33333%; }\n\n.col-8 {\n  flex: 0 0 66.66667%;\n  max-width: 66.66667%; }\n\n.col-9 {\n  flex: 0 0 75%;\n  max-width: 75%; }\n\n.col-10 {\n  flex: 0 0 83.33333%;\n  max-width: 83.33333%; }\n\n.col-11 {\n  flex: 0 0 91.66667%;\n  max-width: 91.66667%; }\n\n.col-12 {\n  flex: 0 0 100%;\n  max-width: 100%; }\n\n.order-first {\n  order: -1; }\n\n.order-last {\n  order: 13; }\n\n.order-0 {\n  order: 0; }\n\n.order-1 {\n  order: 1; }\n\n.order-2 {\n  order: 2; }\n\n.order-3 {\n  order: 3; }\n\n.order-4 {\n  order: 4; }\n\n.order-5 {\n  order: 5; }\n\n.order-6 {\n  order: 6; }\n\n.order-7 {\n  order: 7; }\n\n.order-8 {\n  order: 8; }\n\n.order-9 {\n  order: 9; }\n\n.order-10 {\n  order: 10; }\n\n.order-11 {\n  order: 11; }\n\n.order-12 {\n  order: 12; }\n\n.offset-1 {\n  margin-left: 8.33333%; }\n\n.offset-2 {\n  margin-left: 16.66667%; }\n\n.offset-3 {\n  margin-left: 25%; }\n\n.offset-4 {\n  margin-left: 33.33333%; }\n\n.offset-5 {\n  margin-left: 41.66667%; }\n\n.offset-6 {\n  margin-left: 50%; }\n\n.offset-7 {\n  margin-left: 58.33333%; }\n\n.offset-8 {\n  margin-left: 66.66667%; }\n\n.offset-9 {\n  margin-left: 75%; }\n\n.offset-10 {\n  margin-left: 83.33333%; }\n\n.offset-11 {\n  margin-left: 91.66667%; }\n\n@media (min-width: 576px) {\n  .col-sm {\n    flex-basis: 0;\n    flex-grow: 1;\n    max-width: 100%; }\n  .col-sm-auto {\n    flex: 0 0 auto;\n    width: auto;\n    max-width: 100%; }\n  .col-sm-1 {\n    flex: 0 0 8.33333%;\n    max-width: 8.33333%; }\n  .col-sm-2 {\n    flex: 0 0 16.66667%;\n    max-width: 16.66667%; }\n  .col-sm-3 {\n    flex: 0 0 25%;\n    max-width: 25%; }\n  .col-sm-4 {\n    flex: 0 0 33.33333%;\n    max-width: 33.33333%; }\n  .col-sm-5 {\n    flex: 0 0 41.66667%;\n    max-width: 41.66667%; }\n  .col-sm-6 {\n    flex: 0 0 50%;\n    max-width: 50%; }\n  .col-sm-7 {\n    flex: 0 0 58.33333%;\n    max-width: 58.33333%; }\n  .col-sm-8 {\n    flex: 0 0 66.66667%;\n    max-width: 66.66667%; }\n  .col-sm-9 {\n    flex: 0 0 75%;\n    max-width: 75%; }\n  .col-sm-10 {\n    flex: 0 0 83.33333%;\n    max-width: 83.33333%; }\n  .col-sm-11 {\n    flex: 0 0 91.66667%;\n    max-width: 91.66667%; }\n  .col-sm-12 {\n    flex: 0 0 100%;\n    max-width: 100%; }\n  .order-sm-first {\n    order: -1; }\n  .order-sm-last {\n    order: 13; }\n  .order-sm-0 {\n    order: 0; }\n  .order-sm-1 {\n    order: 1; }\n  .order-sm-2 {\n    order: 2; }\n  .order-sm-3 {\n    order: 3; }\n  .order-sm-4 {\n    order: 4; }\n  .order-sm-5 {\n    order: 5; }\n  .order-sm-6 {\n    order: 6; }\n  .order-sm-7 {\n    order: 7; }\n  .order-sm-8 {\n    order: 8; }\n  .order-sm-9 {\n    order: 9; }\n  .order-sm-10 {\n    order: 10; }\n  .order-sm-11 {\n    order: 11; }\n  .order-sm-12 {\n    order: 12; }\n  .offset-sm-0 {\n    margin-left: 0; }\n  .offset-sm-1 {\n    margin-left: 8.33333%; }\n  .offset-sm-2 {\n    margin-left: 16.66667%; }\n  .offset-sm-3 {\n    margin-left: 25%; }\n  .offset-sm-4 {\n    margin-left: 33.33333%; }\n  .offset-sm-5 {\n    margin-left: 41.66667%; }\n  .offset-sm-6 {\n    margin-left: 50%; }\n  .offset-sm-7 {\n    margin-left: 58.33333%; }\n  .offset-sm-8 {\n    margin-left: 66.66667%; }\n  .offset-sm-9 {\n    margin-left: 75%; }\n  .offset-sm-10 {\n    margin-left: 83.33333%; }\n  .offset-sm-11 {\n    margin-left: 91.66667%; } }\n\n@media (min-width: 768px) {\n  .col-md {\n    flex-basis: 0;\n    flex-grow: 1;\n    max-width: 100%; }\n  .col-md-auto {\n    flex: 0 0 auto;\n    width: auto;\n    max-width: 100%; }\n  .col-md-1 {\n    flex: 0 0 8.33333%;\n    max-width: 8.33333%; }\n  .col-md-2 {\n    flex: 0 0 16.66667%;\n    max-width: 16.66667%; }\n  .col-md-3 {\n    flex: 0 0 25%;\n    max-width: 25%; }\n  .col-md-4 {\n    flex: 0 0 33.33333%;\n    max-width: 33.33333%; }\n  .col-md-5 {\n    flex: 0 0 41.66667%;\n    max-width: 41.66667%; }\n  .col-md-6 {\n    flex: 0 0 50%;\n    max-width: 50%; }\n  .col-md-7 {\n    flex: 0 0 58.33333%;\n    max-width: 58.33333%; }\n  .col-md-8 {\n    flex: 0 0 66.66667%;\n    max-width: 66.66667%; }\n  .col-md-9 {\n    flex: 0 0 75%;\n    max-width: 75%; }\n  .col-md-10 {\n    flex: 0 0 83.33333%;\n    max-width: 83.33333%; }\n  .col-md-11 {\n    flex: 0 0 91.66667%;\n    max-width: 91.66667%; }\n  .col-md-12 {\n    flex: 0 0 100%;\n    max-width: 100%; }\n  .order-md-first {\n    order: -1; }\n  .order-md-last {\n    order: 13; }\n  .order-md-0 {\n    order: 0; }\n  .order-md-1 {\n    order: 1; }\n  .order-md-2 {\n    order: 2; }\n  .order-md-3 {\n    order: 3; }\n  .order-md-4 {\n    order: 4; }\n  .order-md-5 {\n    order: 5; }\n  .order-md-6 {\n    order: 6; }\n  .order-md-7 {\n    order: 7; }\n  .order-md-8 {\n    order: 8; }\n  .order-md-9 {\n    order: 9; }\n  .order-md-10 {\n    order: 10; }\n  .order-md-11 {\n    order: 11; }\n  .order-md-12 {\n    order: 12; }\n  .offset-md-0 {\n    margin-left: 0; }\n  .offset-md-1 {\n    margin-left: 8.33333%; }\n  .offset-md-2 {\n    margin-left: 16.66667%; }\n  .offset-md-3 {\n    margin-left: 25%; }\n  .offset-md-4 {\n    margin-left: 33.33333%; }\n  .offset-md-5 {\n    margin-left: 41.66667%; }\n  .offset-md-6 {\n    margin-left: 50%; }\n  .offset-md-7 {\n    margin-left: 58.33333%; }\n  .offset-md-8 {\n    margin-left: 66.66667%; }\n  .offset-md-9 {\n    margin-left: 75%; }\n  .offset-md-10 {\n    margin-left: 83.33333%; }\n  .offset-md-11 {\n    margin-left: 91.66667%; } }\n\n@media (min-width: 992px) {\n  .col-lg {\n    flex-basis: 0;\n    flex-grow: 1;\n    max-width: 100%; }\n  .col-lg-auto {\n    flex: 0 0 auto;\n    width: auto;\n    max-width: 100%; }\n  .col-lg-1 {\n    flex: 0 0 8.33333%;\n    max-width: 8.33333%; }\n  .col-lg-2 {\n    flex: 0 0 16.66667%;\n    max-width: 16.66667%; }\n  .col-lg-3 {\n    flex: 0 0 25%;\n    max-width: 25%; }\n  .col-lg-4 {\n    flex: 0 0 33.33333%;\n    max-width: 33.33333%; }\n  .col-lg-5 {\n    flex: 0 0 41.66667%;\n    max-width: 41.66667%; }\n  .col-lg-6 {\n    flex: 0 0 50%;\n    max-width: 50%; }\n  .col-lg-7 {\n    flex: 0 0 58.33333%;\n    max-width: 58.33333%; }\n  .col-lg-8 {\n    flex: 0 0 66.66667%;\n    max-width: 66.66667%; }\n  .col-lg-9 {\n    flex: 0 0 75%;\n    max-width: 75%; }\n  .col-lg-10 {\n    flex: 0 0 83.33333%;\n    max-width: 83.33333%; }\n  .col-lg-11 {\n    flex: 0 0 91.66667%;\n    max-width: 91.66667%; }\n  .col-lg-12 {\n    flex: 0 0 100%;\n    max-width: 100%; }\n  .order-lg-first {\n    order: -1; }\n  .order-lg-last {\n    order: 13; }\n  .order-lg-0 {\n    order: 0; }\n  .order-lg-1 {\n    order: 1; }\n  .order-lg-2 {\n    order: 2; }\n  .order-lg-3 {\n    order: 3; }\n  .order-lg-4 {\n    order: 4; }\n  .order-lg-5 {\n    order: 5; }\n  .order-lg-6 {\n    order: 6; }\n  .order-lg-7 {\n    order: 7; }\n  .order-lg-8 {\n    order: 8; }\n  .order-lg-9 {\n    order: 9; }\n  .order-lg-10 {\n    order: 10; }\n  .order-lg-11 {\n    order: 11; }\n  .order-lg-12 {\n    order: 12; }\n  .offset-lg-0 {\n    margin-left: 0; }\n  .offset-lg-1 {\n    margin-left: 8.33333%; }\n  .offset-lg-2 {\n    margin-left: 16.66667%; }\n  .offset-lg-3 {\n    margin-left: 25%; }\n  .offset-lg-4 {\n    margin-left: 33.33333%; }\n  .offset-lg-5 {\n    margin-left: 41.66667%; }\n  .offset-lg-6 {\n    margin-left: 50%; }\n  .offset-lg-7 {\n    margin-left: 58.33333%; }\n  .offset-lg-8 {\n    margin-left: 66.66667%; }\n  .offset-lg-9 {\n    margin-left: 75%; }\n  .offset-lg-10 {\n    margin-left: 83.33333%; }\n  .offset-lg-11 {\n    margin-left: 91.66667%; } }\n\n@media (min-width: 1200px) {\n  .col-xl {\n    flex-basis: 0;\n    flex-grow: 1;\n    max-width: 100%; }\n  .col-xl-auto {\n    flex: 0 0 auto;\n    width: auto;\n    max-width: 100%; }\n  .col-xl-1 {\n    flex: 0 0 8.33333%;\n    max-width: 8.33333%; }\n  .col-xl-2 {\n    flex: 0 0 16.66667%;\n    max-width: 16.66667%; }\n  .col-xl-3 {\n    flex: 0 0 25%;\n    max-width: 25%; }\n  .col-xl-4 {\n    flex: 0 0 33.33333%;\n    max-width: 33.33333%; }\n  .col-xl-5 {\n    flex: 0 0 41.66667%;\n    max-width: 41.66667%; }\n  .col-xl-6 {\n    flex: 0 0 50%;\n    max-width: 50%; }\n  .col-xl-7 {\n    flex: 0 0 58.33333%;\n    max-width: 58.33333%; }\n  .col-xl-8 {\n    flex: 0 0 66.66667%;\n    max-width: 66.66667%; }\n  .col-xl-9 {\n    flex: 0 0 75%;\n    max-width: 75%; }\n  .col-xl-10 {\n    flex: 0 0 83.33333%;\n    max-width: 83.33333%; }\n  .col-xl-11 {\n    flex: 0 0 91.66667%;\n    max-width: 91.66667%; }\n  .col-xl-12 {\n    flex: 0 0 100%;\n    max-width: 100%; }\n  .order-xl-first {\n    order: -1; }\n  .order-xl-last {\n    order: 13; }\n  .order-xl-0 {\n    order: 0; }\n  .order-xl-1 {\n    order: 1; }\n  .order-xl-2 {\n    order: 2; }\n  .order-xl-3 {\n    order: 3; }\n  .order-xl-4 {\n    order: 4; }\n  .order-xl-5 {\n    order: 5; }\n  .order-xl-6 {\n    order: 6; }\n  .order-xl-7 {\n    order: 7; }\n  .order-xl-8 {\n    order: 8; }\n  .order-xl-9 {\n    order: 9; }\n  .order-xl-10 {\n    order: 10; }\n  .order-xl-11 {\n    order: 11; }\n  .order-xl-12 {\n    order: 12; }\n  .offset-xl-0 {\n    margin-left: 0; }\n  .offset-xl-1 {\n    margin-left: 8.33333%; }\n  .offset-xl-2 {\n    margin-left: 16.66667%; }\n  .offset-xl-3 {\n    margin-left: 25%; }\n  .offset-xl-4 {\n    margin-left: 33.33333%; }\n  .offset-xl-5 {\n    margin-left: 41.66667%; }\n  .offset-xl-6 {\n    margin-left: 50%; }\n  .offset-xl-7 {\n    margin-left: 58.33333%; }\n  .offset-xl-8 {\n    margin-left: 66.66667%; }\n  .offset-xl-9 {\n    margin-left: 75%; }\n  .offset-xl-10 {\n    margin-left: 83.33333%; }\n  .offset-xl-11 {\n    margin-left: 91.66667%; } }\n\n.table {\n  width: 100%;\n  margin-bottom: 1rem;\n  color: #626262; }\n  .table th,\n  .table td {\n    padding: 0.75rem;\n    vertical-align: top;\n    border-top: 1px solid #f8f8f8; }\n  .table thead th {\n    vertical-align: bottom;\n    border-bottom: 2px solid #f8f8f8; }\n  .table tbody + tbody {\n    border-top: 2px solid #f8f8f8; }\n\n.table-sm th,\n.table-sm td {\n  padding: 0.3rem; }\n\n.table-bordered {\n  border: 1px solid #f8f8f8; }\n  .table-bordered th,\n  .table-bordered td {\n    border: 1px solid #f8f8f8; }\n  .table-bordered thead th,\n  .table-bordered thead td {\n    border-bottom-width: 2px; }\n\n.table-borderless th,\n.table-borderless td,\n.table-borderless thead th,\n.table-borderless tbody + tbody {\n  border: 0; }\n\n.table-striped tbody tr:nth-of-type(odd) {\n  background-color: rgba(34, 41, 47, 0.05); }\n\n.table-hover tbody tr:hover {\n  color: #626262;\n  background-color: rgba(34, 41, 47, 0.075); }\n\n.table-primary,\n.table-primary > th,\n.table-primary > td {\n  background-color: #d8d4fb; }\n\n.table-primary th,\n.table-primary td,\n.table-primary thead th,\n.table-primary tbody + tbody {\n  border-color: #b6b0f7; }\n\n.table-hover .table-primary:hover {\n  background-color: #c3bdf9; }\n  .table-hover .table-primary:hover > td,\n  .table-hover .table-primary:hover > th {\n    background-color: #c3bdf9; }\n\n.table-secondary,\n.table-secondary > th,\n.table-secondary > td {\n  background-color: #ebeef1; }\n\n.table-secondary th,\n.table-secondary td,\n.table-secondary thead th,\n.table-secondary tbody + tbody {\n  border-color: #dadfe4; }\n\n.table-hover .table-secondary:hover {\n  background-color: #dce1e7; }\n  .table-hover .table-secondary:hover > td,\n  .table-hover .table-secondary:hover > th {\n    background-color: #dce1e7; }\n\n.table-success,\n.table-success > th,\n.table-success > td {\n  background-color: #c3efd7; }\n\n.table-success th,\n.table-success td,\n.table-success thead th,\n.table-success tbody + tbody {\n  border-color: #8fe2b4; }\n\n.table-hover .table-success:hover {\n  background-color: #afeaca; }\n  .table-hover .table-success:hover > td,\n  .table-hover .table-success:hover > th {\n    background-color: #afeaca; }\n\n.table-info,\n.table-info > th,\n.table-info > td {\n  background-color: #b8f2f9; }\n\n.table-info th,\n.table-info td,\n.table-info thead th,\n.table-info tbody + tbody {\n  border-color: #7ae6f3; }\n\n.table-hover .table-info:hover {\n  background-color: #a0eef7; }\n  .table-hover .table-info:hover > td,\n  .table-hover .table-info:hover > th {\n    background-color: #a0eef7; }\n\n.table-warning,\n.table-warning > th,\n.table-warning > td {\n  background-color: #ffe4ca; }\n\n.table-warning th,\n.table-warning td,\n.table-warning thead th,\n.table-warning tbody + tbody {\n  border-color: #ffcd9d; }\n\n.table-hover .table-warning:hover {\n  background-color: #ffd7b1; }\n  .table-hover .table-warning:hover > td,\n  .table-hover .table-warning:hover > th {\n    background-color: #ffd7b1; }\n\n.table-danger,\n.table-danger > th,\n.table-danger > td {\n  background-color: #f9cfcf; }\n\n.table-danger th,\n.table-danger td,\n.table-danger thead th,\n.table-danger tbody + tbody {\n  border-color: #f4a6a7; }\n\n.table-hover .table-danger:hover {\n  background-color: #f6b8b8; }\n  .table-hover .table-danger:hover > td,\n  .table-hover .table-danger:hover > th {\n    background-color: #f6b8b8; }\n\n.table-light,\n.table-light > th,\n.table-light > td {\n  background-color: #ecedef; }\n\n.table-light th,\n.table-light td,\n.table-light thead th,\n.table-light tbody + tbody {\n  border-color: #dbdee2; }\n\n.table-hover .table-light:hover {\n  background-color: #dee0e3; }\n  .table-hover .table-light:hover > td,\n  .table-hover .table-light:hover > th {\n    background-color: #dee0e3; }\n\n.table-dark,\n.table-dark > th,\n.table-dark > td {\n  background-color: silver; }\n\n.table-dark th,\n.table-dark td,\n.table-dark thead th,\n.table-dark tbody + tbody {\n  border-color: #8a8a8a; }\n\n.table-hover .table-dark:hover {\n  background-color: #b3b3b3; }\n  .table-hover .table-dark:hover > td,\n  .table-hover .table-dark:hover > th {\n    background-color: #b3b3b3; }\n\n.table-active,\n.table-active > th,\n.table-active > td {\n  background-color: rgba(34, 41, 47, 0.075); }\n\n.table-hover .table-active:hover {\n  background-color: rgba(23, 28, 32, 0.075); }\n  .table-hover .table-active:hover > td,\n  .table-hover .table-active:hover > th {\n    background-color: rgba(23, 28, 32, 0.075); }\n\n.table .thead-dark th {\n  color: #fff;\n  background-color: #1e1e1e;\n  border-color: #313131; }\n\n.table .thead-light th {\n  color: #4e5154;\n  background-color: #ededed;\n  border-color: #f8f8f8; }\n\n.table-dark {\n  color: #fff;\n  background-color: #1e1e1e; }\n  .table-dark th,\n  .table-dark td,\n  .table-dark thead th {\n    border-color: #313131; }\n  .table-dark.table-bordered {\n    border: 0; }\n  .table-dark.table-striped tbody tr:nth-of-type(odd) {\n    background-color: rgba(255, 255, 255, 0.05); }\n  .table-dark.table-hover tbody tr:hover {\n    color: #fff;\n    background-color: rgba(255, 255, 255, 0.075); }\n\n@media (max-width: 575.98px) {\n  .table-responsive-sm {\n    display: block;\n    width: 100%;\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch; }\n    .table-responsive-sm > .table-bordered {\n      border: 0; } }\n\n@media (max-width: 767.98px) {\n  .table-responsive-md {\n    display: block;\n    width: 100%;\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch; }\n    .table-responsive-md > .table-bordered {\n      border: 0; } }\n\n@media (max-width: 991.98px) {\n  .table-responsive-lg {\n    display: block;\n    width: 100%;\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch; }\n    .table-responsive-lg > .table-bordered {\n      border: 0; } }\n\n@media (max-width: 1199.98px) {\n  .table-responsive-xl {\n    display: block;\n    width: 100%;\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch; }\n    .table-responsive-xl > .table-bordered {\n      border: 0; } }\n\n.table-responsive {\n  display: block;\n  width: 100%;\n  overflow-x: auto;\n  -webkit-overflow-scrolling: touch; }\n  .table-responsive > .table-bordered {\n    border: 0; }\n\n.form-control {\n  display: block;\n  width: 100%;\n  height: calc( 1.25em + 1.4rem + 1px);\n  padding: 0.7rem 0.7rem;\n  font-size: 0.96rem;\n  font-weight: 400;\n  line-height: 1.25;\n  color: #4e5154;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 5px;\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; }\n  @media (prefers-reduced-motion: reduce) {\n    .form-control {\n      transition: none; } }\n  .form-control::-ms-expand {\n    background-color: transparent;\n    border: 0; }\n  .form-control:focus {\n    color: #4e5154;\n    background-color: #fff;\n    border-color: #7367f0;\n    outline: 0;\n    box-shadow: 0 3px 10px 0 rgba(0, 0, 0, 0.15); }\n  .form-control::placeholder {\n    color: rgba(0, 0, 0, 0.5);\n    opacity: 1; }\n  .form-control:disabled, .form-control[readonly] {\n    background-color: #f5f5f1;\n    opacity: 1; }\n\nselect.form-control:focus::-ms-value {\n  color: #4e5154;\n  background-color: #fff; }\n\n.form-control-file,\n.form-control-range {\n  display: block;\n  width: 100%; }\n\n.col-form-label {\n  padding-top: calc(0.7rem + 1px);\n  padding-bottom: calc(0.7rem + 1px);\n  margin-bottom: 0;\n  font-size: inherit;\n  line-height: 1.25; }\n\n.col-form-label-lg {\n  padding-top: calc(1rem + 1px);\n  padding-bottom: calc(1rem + 1px);\n  font-size: 1.25rem;\n  line-height: 1.25; }\n\n.col-form-label-sm {\n  padding-top: calc(0.5rem + 1px);\n  padding-bottom: calc(0.5rem + 1px);\n  font-size: 0.7rem;\n  line-height: 1; }\n\n.form-control-plaintext {\n  display: block;\n  width: 100%;\n  padding-top: 0.7rem;\n  padding-bottom: 0.7rem;\n  margin-bottom: 0;\n  line-height: 1.25;\n  color: #adb5bd;\n  background-color: transparent;\n  border: solid transparent;\n  border-width: 1px 0; }\n  .form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n    padding-right: 0;\n    padding-left: 0; }\n\n.form-control-sm {\n  height: calc(1em + 1rem + 2px);\n  padding: 0.5rem 1.5rem;\n  font-size: 0.7rem;\n  line-height: 1;\n  border-radius: 4px; }\n\n.form-control-lg {\n  height: calc(1.25em + 2rem + 2px);\n  padding: 1rem 2.5rem;\n  font-size: 1.25rem;\n  line-height: 1.25;\n  border-radius: 6px; }\n\nselect.form-control[size], select.form-control[multiple] {\n  height: auto; }\n\ntextarea.form-control {\n  height: auto; }\n\n.form-group {\n  margin-bottom: 1rem; }\n\n.form-text {\n  display: block;\n  margin-top: 0.25rem; }\n\n.form-row {\n  display: flex;\n  flex-wrap: wrap;\n  margin-right: -5px;\n  margin-left: -5px; }\n  .form-row > .col,\n  .form-row > [class*=\"col-\"] {\n    padding-right: 5px;\n    padding-left: 5px; }\n\n.form-check {\n  position: relative;\n  display: block;\n  padding-left: 1.25rem; }\n\n.form-check-input {\n  position: absolute;\n  margin-top: 0.3rem;\n  margin-left: -1.25rem; }\n  .form-check-input:disabled ~ .form-check-label {\n    color: #b8c2cc; }\n\n.form-check-label {\n  margin-bottom: 0; }\n\n.form-check-inline {\n  display: inline-flex;\n  align-items: center;\n  padding-left: 0;\n  margin-right: 0.75rem; }\n  .form-check-inline .form-check-input {\n    position: static;\n    margin-top: 0;\n    margin-right: 0.3125rem;\n    margin-left: 0; }\n\n.valid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: smaller;\n  color: #28c76f; }\n\n.valid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.4rem 0.775rem;\n  margin-top: .1rem;\n  font-size: 0.857rem;\n  line-height: 1.45;\n  color: #fff;\n  background-color: #28c76f;\n  border-radius: 0.428rem; }\n\n.was-validated .form-control:valid, .form-control.is-valid {\n  border-color: #28c76f;\n  padding-right: calc(1.25em + 1.4rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328c76f' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: center right calc(0.3125em + 0.35rem);\n  background-size: calc(0.625em + 0.7rem) calc(0.625em + 0.7rem); }\n  .was-validated .form-control:valid:focus, .form-control.is-valid:focus {\n    border-color: #28c76f;\n    box-shadow: 0 0 0 0.2rem rgba(40, 199, 111, 0.25); }\n  .was-validated .form-control:valid ~ .valid-feedback,\n  .was-validated .form-control:valid ~ .valid-tooltip, .form-control.is-valid ~ .valid-feedback,\n  .form-control.is-valid ~ .valid-tooltip {\n    display: block; }\n\n.was-validated textarea.form-control:valid, textarea.form-control.is-valid {\n  padding-right: calc(1.25em + 1.4rem);\n  background-position: top calc(0.3125em + 0.35rem) right calc(0.3125em + 0.35rem); }\n\n.was-validated .custom-select:valid, .custom-select.is-valid {\n  border-color: #28c76f;\n  padding-right: calc((1em + 1.4rem) * 3 / 4 + 1.7rem);\n  background: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%231e1e1e' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right 0.7rem center/8px 10px, url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328c76f' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\") #fff no-repeat center right 1.7rem/calc(0.625em + 0.7rem) calc(0.625em + 0.7rem); }\n  .was-validated .custom-select:valid:focus, .custom-select.is-valid:focus {\n    border-color: #28c76f;\n    box-shadow: 0 0 0 0.2rem rgba(40, 199, 111, 0.25); }\n  .was-validated .custom-select:valid ~ .valid-feedback,\n  .was-validated .custom-select:valid ~ .valid-tooltip, .custom-select.is-valid ~ .valid-feedback,\n  .custom-select.is-valid ~ .valid-tooltip {\n    display: block; }\n\n.was-validated .form-control-file:valid ~ .valid-feedback,\n.was-validated .form-control-file:valid ~ .valid-tooltip, .form-control-file.is-valid ~ .valid-feedback,\n.form-control-file.is-valid ~ .valid-tooltip {\n  display: block; }\n\n.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n  color: #28c76f; }\n\n.was-validated .form-check-input:valid ~ .valid-feedback,\n.was-validated .form-check-input:valid ~ .valid-tooltip, .form-check-input.is-valid ~ .valid-feedback,\n.form-check-input.is-valid ~ .valid-tooltip {\n  display: block; }\n\n.was-validated .custom-control-input:valid ~ .custom-control-label, .custom-control-input.is-valid ~ .custom-control-label {\n  color: #28c76f; }\n  .was-validated .custom-control-input:valid ~ .custom-control-label::before, .custom-control-input.is-valid ~ .custom-control-label::before {\n    border-color: #28c76f; }\n\n.was-validated .custom-control-input:valid ~ .valid-feedback,\n.was-validated .custom-control-input:valid ~ .valid-tooltip, .custom-control-input.is-valid ~ .valid-feedback,\n.custom-control-input.is-valid ~ .valid-tooltip {\n  display: block; }\n\n.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before, .custom-control-input.is-valid:checked ~ .custom-control-label::before {\n  border-color: #48da89;\n  background-color: #48da89; }\n\n.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before, .custom-control-input.is-valid:focus ~ .custom-control-label::before {\n  box-shadow: 0 0 0 0.2rem rgba(40, 199, 111, 0.25); }\n\n.was-validated .custom-control-input:valid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-valid:focus:not(:checked) ~ .custom-control-label::before {\n  border-color: #28c76f; }\n\n.was-validated .custom-file-input:valid ~ .custom-file-label, .custom-file-input.is-valid ~ .custom-file-label {\n  border-color: #28c76f; }\n\n.was-validated .custom-file-input:valid ~ .valid-feedback,\n.was-validated .custom-file-input:valid ~ .valid-tooltip, .custom-file-input.is-valid ~ .valid-feedback,\n.custom-file-input.is-valid ~ .valid-tooltip {\n  display: block; }\n\n.was-validated .custom-file-input:valid:focus ~ .custom-file-label, .custom-file-input.is-valid:focus ~ .custom-file-label {\n  border-color: #28c76f;\n  box-shadow: 0 0 0 0.2rem rgba(40, 199, 111, 0.25); }\n\n.invalid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: smaller;\n  color: #ea5455; }\n\n.invalid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.4rem 0.775rem;\n  margin-top: .1rem;\n  font-size: 0.857rem;\n  line-height: 1.45;\n  color: #fff;\n  background-color: #ea5455;\n  border-radius: 0.428rem; }\n\n.was-validated .form-control:invalid, .form-control.is-invalid {\n  border-color: #ea5455;\n  padding-right: calc(1.25em + 1.4rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23ea5455' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23ea5455' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E\");\n  background-repeat: no-repeat;\n  background-position: center right calc(0.3125em + 0.35rem);\n  background-size: calc(0.625em + 0.7rem) calc(0.625em + 0.7rem); }\n  .was-validated .form-control:invalid:focus, .form-control.is-invalid:focus {\n    border-color: #ea5455;\n    box-shadow: 0 0 0 0.2rem rgba(234, 84, 85, 0.25); }\n  .was-validated .form-control:invalid ~ .invalid-feedback,\n  .was-validated .form-control:invalid ~ .invalid-tooltip, .form-control.is-invalid ~ .invalid-feedback,\n  .form-control.is-invalid ~ .invalid-tooltip {\n    display: block; }\n\n.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid {\n  padding-right: calc(1.25em + 1.4rem);\n  background-position: top calc(0.3125em + 0.35rem) right calc(0.3125em + 0.35rem); }\n\n.was-validated .custom-select:invalid, .custom-select.is-invalid {\n  border-color: #ea5455;\n  padding-right: calc((1em + 1.4rem) * 3 / 4 + 1.7rem);\n  background: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%231e1e1e' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right 0.7rem center/8px 10px, url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23ea5455' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23ea5455' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E\") #fff no-repeat center right 1.7rem/calc(0.625em + 0.7rem) calc(0.625em + 0.7rem); }\n  .was-validated .custom-select:invalid:focus, .custom-select.is-invalid:focus {\n    border-color: #ea5455;\n    box-shadow: 0 0 0 0.2rem rgba(234, 84, 85, 0.25); }\n  .was-validated .custom-select:invalid ~ .invalid-feedback,\n  .was-validated .custom-select:invalid ~ .invalid-tooltip, .custom-select.is-invalid ~ .invalid-feedback,\n  .custom-select.is-invalid ~ .invalid-tooltip {\n    display: block; }\n\n.was-validated .form-control-file:invalid ~ .invalid-feedback,\n.was-validated .form-control-file:invalid ~ .invalid-tooltip, .form-control-file.is-invalid ~ .invalid-feedback,\n.form-control-file.is-invalid ~ .invalid-tooltip {\n  display: block; }\n\n.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n  color: #ea5455; }\n\n.was-validated .form-check-input:invalid ~ .invalid-feedback,\n.was-validated .form-check-input:invalid ~ .invalid-tooltip, .form-check-input.is-invalid ~ .invalid-feedback,\n.form-check-input.is-invalid ~ .invalid-tooltip {\n  display: block; }\n\n.was-validated .custom-control-input:invalid ~ .custom-control-label, .custom-control-input.is-invalid ~ .custom-control-label {\n  color: #ea5455; }\n  .was-validated .custom-control-input:invalid ~ .custom-control-label::before, .custom-control-input.is-invalid ~ .custom-control-label::before {\n    border-color: #ea5455; }\n\n.was-validated .custom-control-input:invalid ~ .invalid-feedback,\n.was-validated .custom-control-input:invalid ~ .invalid-tooltip, .custom-control-input.is-invalid ~ .invalid-feedback,\n.custom-control-input.is-invalid ~ .invalid-tooltip {\n  display: block; }\n\n.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before, .custom-control-input.is-invalid:checked ~ .custom-control-label::before {\n  border-color: #f08182;\n  background-color: #f08182; }\n\n.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before, .custom-control-input.is-invalid:focus ~ .custom-control-label::before {\n  box-shadow: 0 0 0 0.2rem rgba(234, 84, 85, 0.25); }\n\n.was-validated .custom-control-input:invalid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-invalid:focus:not(:checked) ~ .custom-control-label::before {\n  border-color: #ea5455; }\n\n.was-validated .custom-file-input:invalid ~ .custom-file-label, .custom-file-input.is-invalid ~ .custom-file-label {\n  border-color: #ea5455; }\n\n.was-validated .custom-file-input:invalid ~ .invalid-feedback,\n.was-validated .custom-file-input:invalid ~ .invalid-tooltip, .custom-file-input.is-invalid ~ .invalid-feedback,\n.custom-file-input.is-invalid ~ .invalid-tooltip {\n  display: block; }\n\n.was-validated .custom-file-input:invalid:focus ~ .custom-file-label, .custom-file-input.is-invalid:focus ~ .custom-file-label {\n  border-color: #ea5455;\n  box-shadow: 0 0 0 0.2rem rgba(234, 84, 85, 0.25); }\n\n.form-inline {\n  display: flex;\n  flex-flow: row wrap;\n  align-items: center; }\n  .form-inline .form-check {\n    width: 100%; }\n  @media (min-width: 576px) {\n    .form-inline label {\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      margin-bottom: 0; }\n    .form-inline .form-group {\n      display: flex;\n      flex: 0 0 auto;\n      flex-flow: row wrap;\n      align-items: center;\n      margin-bottom: 0; }\n    .form-inline .form-control {\n      display: inline-block;\n      width: auto;\n      vertical-align: middle; }\n    .form-inline .form-control-plaintext {\n      display: inline-block; }\n    .form-inline .input-group,\n    .form-inline .custom-select {\n      width: auto; }\n    .form-inline .form-check {\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      width: auto;\n      padding-left: 0; }\n    .form-inline .form-check-input {\n      position: relative;\n      flex-shrink: 0;\n      margin-top: 0;\n      margin-right: 0.25rem;\n      margin-left: 0; }\n    .form-inline .custom-control {\n      align-items: center;\n      justify-content: center; }\n    .form-inline .custom-control-label {\n      margin-bottom: 0; } }\n\n.btn {\n  display: inline-block;\n  font-weight: 400;\n  color: #626262;\n  text-align: center;\n  vertical-align: middle;\n  user-select: none;\n  background-color: transparent;\n  border: 0 solid transparent;\n  padding: 0.9rem 2rem;\n  font-size: 1rem;\n  line-height: 1;\n  border-radius: 0.4285rem;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; }\n  @media (prefers-reduced-motion: reduce) {\n    .btn {\n      transition: none; } }\n  .btn:hover {\n    color: #626262;\n    text-decoration: none; }\n  .btn:focus, .btn.focus {\n    outline: 0;\n    box-shadow: 0 0 0 0.2rem rgba(115, 103, 240, 0.25); }\n  .btn.disabled, .btn:disabled {\n    opacity: 0.65; }\n\na.btn.disabled,\nfieldset:disabled a.btn {\n  pointer-events: none; }\n\n.btn-primary {\n  color: #fff;\n  background-color: #7367f0;\n  border-color: #7367f0; }\n  .btn-primary:hover {\n    color: #fff;\n    background-color: #5344ed;\n    border-color: #4839eb; }\n  .btn-primary:focus, .btn-primary.focus {\n    box-shadow: 0 0 0 0.2rem rgba(136, 126, 242, 0.5); }\n  .btn-primary.disabled, .btn-primary:disabled {\n    color: #fff;\n    background-color: #7367f0;\n    border-color: #7367f0; }\n  .btn-primary:not(:disabled):not(.disabled):active, .btn-primary:not(:disabled):not(.disabled).active,\n  .show > .btn-primary.dropdown-toggle {\n    color: #fff;\n    background-color: #4839eb;\n    border-color: #3e2dea; }\n    .btn-primary:not(:disabled):not(.disabled):active:focus, .btn-primary:not(:disabled):not(.disabled).active:focus,\n    .show > .btn-primary.dropdown-toggle:focus {\n      box-shadow: 0 0 0 0.2rem rgba(136, 126, 242, 0.5); }\n\n.btn-secondary {\n  color: #2a2e30;\n  background-color: #b8c2cc;\n  border-color: #b8c2cc; }\n  .btn-secondary:hover {\n    color: #2a2e30;\n    background-color: #a2afbc;\n    border-color: #9aa9b7; }\n  .btn-secondary:focus, .btn-secondary.focus {\n    box-shadow: 0 0 0 0.2rem rgba(163, 172, 181, 0.5); }\n  .btn-secondary.disabled, .btn-secondary:disabled {\n    color: #2a2e30;\n    background-color: #b8c2cc;\n    border-color: #b8c2cc; }\n  .btn-secondary:not(:disabled):not(.disabled):active, .btn-secondary:not(:disabled):not(.disabled).active,\n  .show > .btn-secondary.dropdown-toggle {\n    color: #2a2e30;\n    background-color: #9aa9b7;\n    border-color: #93a2b1; }\n    .btn-secondary:not(:disabled):not(.disabled):active:focus, .btn-secondary:not(:disabled):not(.disabled).active:focus,\n    .show > .btn-secondary.dropdown-toggle:focus {\n      box-shadow: 0 0 0 0.2rem rgba(163, 172, 181, 0.5); }\n\n.btn-success {\n  color: #fff;\n  background-color: #28c76f;\n  border-color: #28c76f; }\n  .btn-success:hover {\n    color: #fff;\n    background-color: #22a75d;\n    border-color: #1f9d57; }\n  .btn-success:focus, .btn-success.focus {\n    box-shadow: 0 0 0 0.2rem rgba(72, 207, 133, 0.5); }\n  .btn-success.disabled, .btn-success:disabled {\n    color: #fff;\n    background-color: #28c76f;\n    border-color: #28c76f; }\n  .btn-success:not(:disabled):not(.disabled):active, .btn-success:not(:disabled):not(.disabled).active,\n  .show > .btn-success.dropdown-toggle {\n    color: #fff;\n    background-color: #1f9d57;\n    border-color: #1d9251; }\n    .btn-success:not(:disabled):not(.disabled):active:focus, .btn-success:not(:disabled):not(.disabled).active:focus,\n    .show > .btn-success.dropdown-toggle:focus {\n      box-shadow: 0 0 0 0.2rem rgba(72, 207, 133, 0.5); }\n\n.btn-info {\n  color: #fff;\n  background-color: #00cfe8;\n  border-color: #00cfe8; }\n  .btn-info:hover {\n    color: #fff;\n    background-color: #00adc2;\n    border-color: #00a1b5; }\n  .btn-info:focus, .btn-info.focus {\n    box-shadow: 0 0 0 0.2rem rgba(38, 214, 235, 0.5); }\n  .btn-info.disabled, .btn-info:disabled {\n    color: #fff;\n    background-color: #00cfe8;\n    border-color: #00cfe8; }\n  .btn-info:not(:disabled):not(.disabled):active, .btn-info:not(:disabled):not(.disabled).active,\n  .show > .btn-info.dropdown-toggle {\n    color: #fff;\n    background-color: #00a1b5;\n    border-color: #0096a8; }\n    .btn-info:not(:disabled):not(.disabled):active:focus, .btn-info:not(:disabled):not(.disabled).active:focus,\n    .show > .btn-info.dropdown-toggle:focus {\n      box-shadow: 0 0 0 0.2rem rgba(38, 214, 235, 0.5); }\n\n.btn-warning {\n  color: #2a2e30;\n  background-color: #ff9f43;\n  border-color: #ff9f43; }\n  .btn-warning:hover {\n    color: #2a2e30;\n    background-color: #ff8b1d;\n    border-color: #ff8510; }\n  .btn-warning:focus, .btn-warning.focus {\n    box-shadow: 0 0 0 0.2rem rgba(223, 142, 64, 0.5); }\n  .btn-warning.disabled, .btn-warning:disabled {\n    color: #2a2e30;\n    background-color: #ff9f43;\n    border-color: #ff9f43; }\n  .btn-warning:not(:disabled):not(.disabled):active, .btn-warning:not(:disabled):not(.disabled).active,\n  .show > .btn-warning.dropdown-toggle {\n    color: #2a2e30;\n    background-color: #ff8510;\n    border-color: #ff7e03; }\n    .btn-warning:not(:disabled):not(.disabled):active:focus, .btn-warning:not(:disabled):not(.disabled).active:focus,\n    .show > .btn-warning.dropdown-toggle:focus {\n      box-shadow: 0 0 0 0.2rem rgba(223, 142, 64, 0.5); }\n\n.btn-danger {\n  color: #fff;\n  background-color: #ea5455;\n  border-color: #ea5455; }\n  .btn-danger:hover {\n    color: #fff;\n    background-color: #e63233;\n    border-color: #e42728; }\n  .btn-danger:focus, .btn-danger.focus {\n    box-shadow: 0 0 0 0.2rem rgba(237, 110, 111, 0.5); }\n  .btn-danger.disabled, .btn-danger:disabled {\n    color: #fff;\n    background-color: #ea5455;\n    border-color: #ea5455; }\n  .btn-danger:not(:disabled):not(.disabled):active, .btn-danger:not(:disabled):not(.disabled).active,\n  .show > .btn-danger.dropdown-toggle {\n    color: #fff;\n    background-color: #e42728;\n    border-color: #e21c1d; }\n    .btn-danger:not(:disabled):not(.disabled):active:focus, .btn-danger:not(:disabled):not(.disabled).active:focus,\n    .show > .btn-danger.dropdown-toggle:focus {\n      box-shadow: 0 0 0 0.2rem rgba(237, 110, 111, 0.5); }\n\n.btn-light {\n  color: #2a2e30;\n  background-color: #babfc7;\n  border-color: #babfc7; }\n  .btn-light:hover {\n    color: #2a2e30;\n    background-color: #a5abb6;\n    border-color: #9ea5b0; }\n  .btn-light:focus, .btn-light.focus {\n    box-shadow: 0 0 0 0.2rem rgba(164, 169, 176, 0.5); }\n  .btn-light.disabled, .btn-light:disabled {\n    color: #2a2e30;\n    background-color: #babfc7;\n    border-color: #babfc7; }\n  .btn-light:not(:disabled):not(.disabled):active, .btn-light:not(:disabled):not(.disabled).active,\n  .show > .btn-light.dropdown-toggle {\n    color: #2a2e30;\n    background-color: #9ea5b0;\n    border-color: #979eaa; }\n    .btn-light:not(:disabled):not(.disabled):active:focus, .btn-light:not(:disabled):not(.disabled).active:focus,\n    .show > .btn-light.dropdown-toggle:focus {\n      box-shadow: 0 0 0 0.2rem rgba(164, 169, 176, 0.5); }\n\n.btn-dark {\n  color: #fff;\n  background-color: #1e1e1e;\n  border-color: #1e1e1e; }\n  .btn-dark:hover {\n    color: #fff;\n    background-color: #0b0b0b;\n    border-color: #050505; }\n  .btn-dark:focus, .btn-dark.focus {\n    box-shadow: 0 0 0 0.2rem rgba(64, 64, 64, 0.5); }\n  .btn-dark.disabled, .btn-dark:disabled {\n    color: #fff;\n    background-color: #1e1e1e;\n    border-color: #1e1e1e; }\n  .btn-dark:not(:disabled):not(.disabled):active, .btn-dark:not(:disabled):not(.disabled).active,\n  .show > .btn-dark.dropdown-toggle {\n    color: #fff;\n    background-color: #050505;\n    border-color: black; }\n    .btn-dark:not(:disabled):not(.disabled):active:focus, .btn-dark:not(:disabled):not(.disabled).active:focus,\n    .show > .btn-dark.dropdown-toggle:focus {\n      box-shadow: 0 0 0 0.2rem rgba(64, 64, 64, 0.5); }\n\n.btn-outline-primary {\n  color: #7367f0;\n  border-color: #7367f0; }\n  .btn-outline-primary:hover {\n    color: #fff;\n    background-color: #7367f0;\n    border-color: #7367f0; }\n  .btn-outline-primary:focus, .btn-outline-primary.focus {\n    box-shadow: 0 0 0 0.2rem rgba(115, 103, 240, 0.5); }\n  .btn-outline-primary.disabled, .btn-outline-primary:disabled {\n    color: #7367f0;\n    background-color: transparent; }\n  .btn-outline-primary:not(:disabled):not(.disabled):active, .btn-outline-primary:not(:disabled):not(.disabled).active,\n  .show > .btn-outline-primary.dropdown-toggle {\n    color: #fff;\n    background-color: #7367f0;\n    border-color: #7367f0; }\n    .btn-outline-primary:not(:disabled):not(.disabled):active:focus, .btn-outline-primary:not(:disabled):not(.disabled).active:focus,\n    .show > .btn-outline-primary.dropdown-toggle:focus {\n      box-shadow: 0 0 0 0.2rem rgba(115, 103, 240, 0.5); }\n\n.btn-outline-secondary {\n  color: #b8c2cc;\n  border-color: #b8c2cc; }\n  .btn-outline-secondary:hover {\n    color: #2a2e30;\n    background-color: #b8c2cc;\n    border-color: #b8c2cc; }\n  .btn-outline-secondary:focus, .btn-outline-secondary.focus {\n    box-shadow: 0 0 0 0.2rem rgba(184, 194, 204, 0.5); }\n  .btn-outline-secondary.disabled, .btn-outline-secondary:disabled {\n    color: #b8c2cc;\n    background-color: transparent; }\n  .btn-outline-secondary:not(:disabled):not(.disabled):active, .btn-outline-secondary:not(:disabled):not(.disabled).active,\n  .show > .btn-outline-secondary.dropdown-toggle {\n    color: #2a2e30;\n    background-color: #b8c2cc;\n    border-color: #b8c2cc; }\n    .btn-outline-secondary:not(:disabled):not(.disabled):active:focus, .btn-outline-secondary:not(:disabled):not(.disabled).active:focus,\n    .show > .btn-outline-secondary.dropdown-toggle:focus {\n      box-shadow: 0 0 0 0.2rem rgba(184, 194, 204, 0.5); }\n\n.btn-outline-success {\n  color: #28c76f;\n  border-color: #28c76f; }\n  .btn-outline-success:hover {\n    color: #fff;\n    background-color: #28c76f;\n    border-color: #28c76f; }\n  .btn-outline-success:focus, .btn-outline-success.focus {\n    box-shadow: 0 0 0 0.2rem rgba(40, 199, 111, 0.5); }\n  .btn-outline-success.disabled, .btn-outline-success:disabled {\n    color: #28c76f;\n    background-color: transparent; }\n  .btn-outline-success:not(:disabled):not(.disabled):active, .btn-outline-success:not(:disabled):not(.disabled).active,\n  .show > .btn-outline-success.dropdown-toggle {\n    color: #fff;\n    background-color: #28c76f;\n    border-color: #28c76f; }\n    .btn-outline-success:not(:disabled):not(.disabled):active:focus, .btn-outline-success:not(:disabled):not(.disabled).active:focus,\n    .show > .btn-outline-success.dropdown-toggle:focus {\n      box-shadow: 0 0 0 0.2rem rgba(40, 199, 111, 0.5); }\n\n.btn-outline-info {\n  color: #00cfe8;\n  border-color: #00cfe8; }\n  .btn-outline-info:hover {\n    color: #fff;\n    background-color: #00cfe8;\n    border-color: #00cfe8; }\n  .btn-outline-info:focus, .btn-outline-info.focus {\n    box-shadow: 0 0 0 0.2rem rgba(0, 207, 232, 0.5); }\n  .btn-outline-info.disabled, .btn-outline-info:disabled {\n    color: #00cfe8;\n    background-color: transparent; }\n  .btn-outline-info:not(:disabled):not(.disabled):active, .btn-outline-info:not(:disabled):not(.disabled).active,\n  .show > .btn-outline-info.dropdown-toggle {\n    color: #fff;\n    background-color: #00cfe8;\n    border-color: #00cfe8; }\n    .btn-outline-info:not(:disabled):not(.disabled):active:focus, .btn-outline-info:not(:disabled):not(.disabled).active:focus,\n    .show > .btn-outline-info.dropdown-toggle:focus {\n      box-shadow: 0 0 0 0.2rem rgba(0, 207, 232, 0.5); }\n\n.btn-outline-warning {\n  color: #ff9f43;\n  border-color: #ff9f43; }\n  .btn-outline-warning:hover {\n    color: #2a2e30;\n    background-color: #ff9f43;\n    border-color: #ff9f43; }\n  .btn-outline-warning:focus, .btn-outline-warning.focus {\n    box-shadow: 0 0 0 0.2rem rgba(255, 159, 67, 0.5); }\n  .btn-outline-warning.disabled, .btn-outline-warning:disabled {\n    color: #ff9f43;\n    background-color: transparent; }\n  .btn-outline-warning:not(:disabled):not(.disabled):active, .btn-outline-warning:not(:disabled):not(.disabled).active,\n  .show > .btn-outline-warning.dropdown-toggle {\n    color: #2a2e30;\n    background-color: #ff9f43;\n    border-color: #ff9f43; }\n    .btn-outline-warning:not(:disabled):not(.disabled):active:focus, .btn-outline-warning:not(:disabled):not(.disabled).active:focus,\n    .show > .btn-outline-warning.dropdown-toggle:focus {\n      box-shadow: 0 0 0 0.2rem rgba(255, 159, 67, 0.5); }\n\n.btn-outline-danger {\n  color: #ea5455;\n  border-color: #ea5455; }\n  .btn-outline-danger:hover {\n    color: #fff;\n    background-color: #ea5455;\n    border-color: #ea5455; }\n  .btn-outline-danger:focus, .btn-outline-danger.focus {\n    box-shadow: 0 0 0 0.2rem rgba(234, 84, 85, 0.5); }\n  .btn-outline-danger.disabled, .btn-outline-danger:disabled {\n    color: #ea5455;\n    background-color: transparent; }\n  .btn-outline-danger:not(:disabled):not(.disabled):active, .btn-outline-danger:not(:disabled):not(.disabled).active,\n  .show > .btn-outline-danger.dropdown-toggle {\n    color: #fff;\n    background-color: #ea5455;\n    border-color: #ea5455; }\n    .btn-outline-danger:not(:disabled):not(.disabled):active:focus, .btn-outline-danger:not(:disabled):not(.disabled).active:focus,\n    .show > .btn-outline-danger.dropdown-toggle:focus {\n      box-shadow: 0 0 0 0.2rem rgba(234, 84, 85, 0.5); }\n\n.btn-outline-light {\n  color: #babfc7;\n  border-color: #babfc7; }\n  .btn-outline-light:hover {\n    color: #2a2e30;\n    background-color: #babfc7;\n    border-color: #babfc7; }\n  .btn-outline-light:focus, .btn-outline-light.focus {\n    box-shadow: 0 0 0 0.2rem rgba(186, 191, 199, 0.5); }\n  .btn-outline-light.disabled, .btn-outline-light:disabled {\n    color: #babfc7;\n    background-color: transparent; }\n  .btn-outline-light:not(:disabled):not(.disabled):active, .btn-outline-light:not(:disabled):not(.disabled).active,\n  .show > .btn-outline-light.dropdown-toggle {\n    color: #2a2e30;\n    background-color: #babfc7;\n    border-color: #babfc7; }\n    .btn-outline-light:not(:disabled):not(.disabled):active:focus, .btn-outline-light:not(:disabled):not(.disabled).active:focus,\n    .show > .btn-outline-light.dropdown-toggle:focus {\n      box-shadow: 0 0 0 0.2rem rgba(186, 191, 199, 0.5); }\n\n.btn-outline-dark {\n  color: #1e1e1e;\n  border-color: #1e1e1e; }\n  .btn-outline-dark:hover {\n    color: #fff;\n    background-color: #1e1e1e;\n    border-color: #1e1e1e; }\n  .btn-outline-dark:focus, .btn-outline-dark.focus {\n    box-shadow: 0 0 0 0.2rem rgba(30, 30, 30, 0.5); }\n  .btn-outline-dark.disabled, .btn-outline-dark:disabled {\n    color: #1e1e1e;\n    background-color: transparent; }\n  .btn-outline-dark:not(:disabled):not(.disabled):active, .btn-outline-dark:not(:disabled):not(.disabled).active,\n  .show > .btn-outline-dark.dropdown-toggle {\n    color: #fff;\n    background-color: #1e1e1e;\n    border-color: #1e1e1e; }\n    .btn-outline-dark:not(:disabled):not(.disabled):active:focus, .btn-outline-dark:not(:disabled):not(.disabled).active:focus,\n    .show > .btn-outline-dark.dropdown-toggle:focus {\n      box-shadow: 0 0 0 0.2rem rgba(30, 30, 30, 0.5); }\n\n.btn-link {\n  font-weight: 400;\n  color: #7367f0;\n  text-decoration: none; }\n  .btn-link:hover {\n    color: #5e50ee;\n    text-decoration: none; }\n  .btn-link:focus, .btn-link.focus {\n    text-decoration: none;\n    box-shadow: none; }\n  .btn-link:disabled, .btn-link.disabled {\n    color: #b8c2cc;\n    pointer-events: none; }\n\n.btn-lg, .btn-group-lg > .btn {\n  padding: 1rem 2.5rem;\n  font-size: 1.25rem;\n  line-height: 1.25;\n  border-radius: 0.4285rem; }\n\n.btn-sm, .btn-group-sm > .btn {\n  padding: 0.5rem 1.5rem;\n  font-size: 0.7rem;\n  line-height: 1;\n  border-radius: 0.4285rem; }\n\n.btn-block {\n  display: block;\n  width: 100%; }\n  .btn-block + .btn-block {\n    margin-top: 0.5rem; }\n\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n  width: 100%; }\n\n.fade {\n  transition: opacity 0.15s linear; }\n  @media (prefers-reduced-motion: reduce) {\n    .fade {\n      transition: none; } }\n  .fade:not(.show) {\n    opacity: 0; }\n\n.collapse:not(.show) {\n  display: none; }\n\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  transition: height 0.35s ease; }\n  @media (prefers-reduced-motion: reduce) {\n    .collapsing {\n      transition: none; } }\n\n.dropup,\n.dropright,\n.dropdown,\n.dropleft {\n  position: relative; }\n\n.dropdown-toggle {\n  white-space: nowrap; }\n  .dropdown-toggle::after {\n    display: inline-block;\n    margin-left: 0.255em;\n    vertical-align: 0.255em;\n    content: \"\";\n    border-top: 0.3em solid;\n    border-right: 0.3em solid transparent;\n    border-bottom: 0;\n    border-left: 0.3em solid transparent; }\n  .dropdown-toggle:empty::after {\n    margin-left: 0; }\n\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: 10;\n  display: none;\n  float: left;\n  min-width: 10rem;\n  padding: 0.5rem 0;\n  margin: 0.5rem 0 0;\n  font-size: 0.9375rem;\n  color: #626262;\n  text-align: left;\n  list-style: none;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(34, 41, 47, 0.15);\n  border-radius: 5px; }\n\n.dropdown-menu-left {\n  right: auto;\n  left: 0; }\n\n.dropdown-menu-right {\n  right: 0;\n  left: auto; }\n\n@media (min-width: 576px) {\n  .dropdown-menu-sm-left {\n    right: auto;\n    left: 0; }\n  .dropdown-menu-sm-right {\n    right: 0;\n    left: auto; } }\n\n@media (min-width: 768px) {\n  .dropdown-menu-md-left {\n    right: auto;\n    left: 0; }\n  .dropdown-menu-md-right {\n    right: 0;\n    left: auto; } }\n\n@media (min-width: 992px) {\n  .dropdown-menu-lg-left {\n    right: auto;\n    left: 0; }\n  .dropdown-menu-lg-right {\n    right: 0;\n    left: auto; } }\n\n@media (min-width: 1200px) {\n  .dropdown-menu-xl-left {\n    right: auto;\n    left: 0; }\n  .dropdown-menu-xl-right {\n    right: 0;\n    left: auto; } }\n\n.dropup .dropdown-menu {\n  top: auto;\n  bottom: 100%;\n  margin-top: 0;\n  margin-bottom: 0.5rem; }\n\n.dropup .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0.3em solid;\n  border-left: 0.3em solid transparent; }\n\n.dropup .dropdown-toggle:empty::after {\n  margin-left: 0; }\n\n.dropright .dropdown-menu {\n  top: 0;\n  right: auto;\n  left: 100%;\n  margin-top: 0;\n  margin-left: 0.5rem; }\n\n.dropright .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0;\n  border-bottom: 0.3em solid transparent;\n  border-left: 0.3em solid; }\n\n.dropright .dropdown-toggle:empty::after {\n  margin-left: 0; }\n\n.dropright .dropdown-toggle::after {\n  vertical-align: 0; }\n\n.dropleft .dropdown-menu {\n  top: 0;\n  right: 100%;\n  left: auto;\n  margin-top: 0;\n  margin-right: 0.5rem; }\n\n.dropleft .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\"; }\n\n.dropleft .dropdown-toggle::after {\n  display: none; }\n\n.dropleft .dropdown-toggle::before {\n  display: inline-block;\n  margin-right: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0.3em solid;\n  border-bottom: 0.3em solid transparent; }\n\n.dropleft .dropdown-toggle:empty::after {\n  margin-left: 0; }\n\n.dropleft .dropdown-toggle::before {\n  vertical-align: 0; }\n\n.dropdown-menu[x-placement^=\"top\"], .dropdown-menu[x-placement^=\"right\"], .dropdown-menu[x-placement^=\"bottom\"], .dropdown-menu[x-placement^=\"left\"] {\n  right: auto;\n  bottom: auto; }\n\n.dropdown-divider {\n  height: 0;\n  margin: 0.5rem 0;\n  overflow: hidden;\n  border-top: 1px solid rgba(0, 0, 0, 0.08); }\n\n.dropdown-item {\n  display: block;\n  width: 100%;\n  padding: 0.25rem 1.5rem;\n  clear: both;\n  font-weight: 400;\n  color: #2a2e30;\n  text-align: inherit;\n  white-space: nowrap;\n  background-color: transparent;\n  border: 0; }\n  .dropdown-item:hover, .dropdown-item:focus {\n    color: #1e2122;\n    text-decoration: none;\n    background-color: #f8f8f8; }\n  .dropdown-item.active, .dropdown-item:active {\n    color: #fff;\n    text-decoration: none;\n    background-color: #7367f0; }\n  .dropdown-item.disabled, .dropdown-item:disabled {\n    color: #b8c2cc;\n    pointer-events: none;\n    background-color: transparent; }\n\n.dropdown-menu.show {\n  display: block; }\n\n.dropdown-header {\n  display: block;\n  padding: 0.5rem 1.5rem;\n  margin-bottom: 0;\n  font-size: 1rem;\n  color: #b8c2cc;\n  white-space: nowrap; }\n\n.dropdown-item-text {\n  display: block;\n  padding: 0.25rem 1.5rem;\n  color: #2a2e30; }\n\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-flex;\n  vertical-align: middle; }\n  .btn-group > .btn,\n  .btn-group-vertical > .btn {\n    position: relative;\n    flex: 1 1 auto; }\n    .btn-group > .btn:hover,\n    .btn-group-vertical > .btn:hover {\n      z-index: 1; }\n    .btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active,\n    .btn-group-vertical > .btn:focus,\n    .btn-group-vertical > .btn:active,\n    .btn-group-vertical > .btn.active {\n      z-index: 1; }\n\n.btn-toolbar {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: flex-start; }\n  .btn-toolbar .input-group {\n    width: auto; }\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) {\n  margin-left: 0; }\n\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn-group:not(:last-child) > .btn {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0; }\n\n.btn-group > .btn:not(:first-child),\n.btn-group > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0; }\n\n.dropdown-toggle-split {\n  padding-right: 1.5rem;\n  padding-left: 1.5rem; }\n  .dropdown-toggle-split::after,\n  .dropup .dropdown-toggle-split::after,\n  .dropright .dropdown-toggle-split::after {\n    margin-left: 0; }\n  .dropleft .dropdown-toggle-split::before {\n    margin-right: 0; }\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n  padding-right: 1.125rem;\n  padding-left: 1.125rem; }\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n  padding-right: 1.875rem;\n  padding-left: 1.875rem; }\n\n.btn-group-vertical {\n  flex-direction: column;\n  align-items: flex-start;\n  justify-content: center; }\n  .btn-group-vertical > .btn,\n  .btn-group-vertical > .btn-group {\n    width: 100%; }\n  .btn-group-vertical > .btn:not(:first-child),\n  .btn-group-vertical > .btn-group:not(:first-child) {\n    margin-top: 0; }\n  .btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle),\n  .btn-group-vertical > .btn-group:not(:last-child) > .btn {\n    border-bottom-right-radius: 0;\n    border-bottom-left-radius: 0; }\n  .btn-group-vertical > .btn:not(:first-child),\n  .btn-group-vertical > .btn-group:not(:first-child) > .btn {\n    border-top-left-radius: 0;\n    border-top-right-radius: 0; }\n\n.btn-group-toggle > .btn,\n.btn-group-toggle > .btn-group > .btn {\n  margin-bottom: 0; }\n  .btn-group-toggle > .btn input[type=\"radio\"],\n  .btn-group-toggle > .btn input[type=\"checkbox\"],\n  .btn-group-toggle > .btn-group > .btn input[type=\"radio\"],\n  .btn-group-toggle > .btn-group > .btn input[type=\"checkbox\"] {\n    position: absolute;\n    clip: rect(0, 0, 0, 0);\n    pointer-events: none; }\n\n.input-group {\n  position: relative;\n  display: flex;\n  flex-wrap: wrap;\n  align-items: stretch;\n  width: 100%; }\n  .input-group > .form-control,\n  .input-group > .form-control-plaintext,\n  .input-group > .custom-select,\n  .input-group > .custom-file {\n    position: relative;\n    flex: 1 1 auto;\n    width: 1%;\n    margin-bottom: 0; }\n    .input-group > .form-control + .form-control,\n    .input-group > .form-control + .custom-select,\n    .input-group > .form-control + .custom-file,\n    .input-group > .form-control-plaintext + .form-control,\n    .input-group > .form-control-plaintext + .custom-select,\n    .input-group > .form-control-plaintext + .custom-file,\n    .input-group > .custom-select + .form-control,\n    .input-group > .custom-select + .custom-select,\n    .input-group > .custom-select + .custom-file,\n    .input-group > .custom-file + .form-control,\n    .input-group > .custom-file + .custom-select,\n    .input-group > .custom-file + .custom-file {\n      margin-left: -1px; }\n  .input-group > .form-control:focus,\n  .input-group > .custom-select:focus,\n  .input-group > .custom-file .custom-file-input:focus ~ .custom-file-label {\n    z-index: 3; }\n  .input-group > .custom-file .custom-file-input:focus {\n    z-index: 4; }\n  .input-group > .form-control:not(:last-child),\n  .input-group > .custom-select:not(:last-child) {\n    border-top-right-radius: 0;\n    border-bottom-right-radius: 0; }\n  .input-group > .form-control:not(:first-child),\n  .input-group > .custom-select:not(:first-child) {\n    border-top-left-radius: 0;\n    border-bottom-left-radius: 0; }\n  .input-group > .custom-file {\n    display: flex;\n    align-items: center; }\n    .input-group > .custom-file:not(:last-child) .custom-file-label,\n    .input-group > .custom-file:not(:last-child) .custom-file-label::after {\n      border-top-right-radius: 0;\n      border-bottom-right-radius: 0; }\n    .input-group > .custom-file:not(:first-child) .custom-file-label {\n      border-top-left-radius: 0;\n      border-bottom-left-radius: 0; }\n\n.input-group-prepend,\n.input-group-append {\n  display: flex; }\n  .input-group-prepend .btn,\n  .input-group-append .btn {\n    position: relative;\n    z-index: 2; }\n    .input-group-prepend .btn:focus,\n    .input-group-append .btn:focus {\n      z-index: 3; }\n  .input-group-prepend .btn + .btn,\n  .input-group-prepend .btn + .input-group-text,\n  .input-group-prepend .input-group-text + .input-group-text,\n  .input-group-prepend .input-group-text + .btn,\n  .input-group-append .btn + .btn,\n  .input-group-append .btn + .input-group-text,\n  .input-group-append .input-group-text + .input-group-text,\n  .input-group-append .input-group-text + .btn {\n    margin-left: -1px; }\n\n.input-group-prepend {\n  margin-right: -1px; }\n\n.input-group-append {\n  margin-left: -1px; }\n\n.input-group-text {\n  display: flex;\n  align-items: center;\n  padding: 0.7rem 0.7rem;\n  margin-bottom: 0;\n  font-size: 0.96rem;\n  font-weight: 400;\n  line-height: 1.25;\n  color: #4e5154;\n  text-align: center;\n  white-space: nowrap;\n  background-color: #ededed;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 5px; }\n  .input-group-text input[type=\"radio\"],\n  .input-group-text input[type=\"checkbox\"] {\n    margin-top: 0; }\n\n.input-group-lg > .form-control:not(textarea),\n.input-group-lg > .custom-select {\n  height: calc(1.25em + 2rem + 2px); }\n\n.input-group-lg > .form-control,\n.input-group-lg > .custom-select,\n.input-group-lg > .input-group-prepend > .input-group-text,\n.input-group-lg > .input-group-append > .input-group-text,\n.input-group-lg > .input-group-prepend > .btn,\n.input-group-lg > .input-group-append > .btn {\n  padding: 1rem 2.5rem;\n  font-size: 1.25rem;\n  line-height: 1.25;\n  border-radius: 6px; }\n\n.input-group-sm > .form-control:not(textarea),\n.input-group-sm > .custom-select {\n  height: calc(1em + 1rem + 2px); }\n\n.input-group-sm > .form-control,\n.input-group-sm > .custom-select,\n.input-group-sm > .input-group-prepend > .input-group-text,\n.input-group-sm > .input-group-append > .input-group-text,\n.input-group-sm > .input-group-prepend > .btn,\n.input-group-sm > .input-group-append > .btn {\n  padding: 0.5rem 1.5rem;\n  font-size: 0.7rem;\n  line-height: 1;\n  border-radius: 4px; }\n\n.input-group-lg > .custom-select,\n.input-group-sm > .custom-select {\n  padding-right: 1.7rem; }\n\n.input-group > .input-group-prepend > .btn,\n.input-group > .input-group-prepend > .input-group-text,\n.input-group > .input-group-append:not(:last-child) > .btn,\n.input-group > .input-group-append:not(:last-child) > .input-group-text,\n.input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group > .input-group-append:last-child > .input-group-text:not(:last-child) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0; }\n\n.input-group > .input-group-append > .btn,\n.input-group > .input-group-append > .input-group-text,\n.input-group > .input-group-prepend:not(:first-child) > .btn,\n.input-group > .input-group-prepend:not(:first-child) > .input-group-text,\n.input-group > .input-group-prepend:first-child > .btn:not(:first-child),\n.input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child) {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0; }\n\n.custom-control {\n  position: relative;\n  display: block;\n  min-height: 1.45rem;\n  padding-left: 1.5rem; }\n\n.custom-control-inline {\n  display: inline-flex;\n  margin-right: 1rem; }\n\n.custom-control-input {\n  position: absolute;\n  z-index: -1;\n  opacity: 0; }\n  .custom-control-input:checked ~ .custom-control-label::before {\n    color: #fff;\n    border-color: #7367f0;\n    background-color: #7367f0; }\n  .custom-control-input:focus ~ .custom-control-label::before {\n    box-shadow: 0 3px 10px 0 rgba(0, 0, 0, 0.15); }\n  .custom-control-input:focus:not(:checked) ~ .custom-control-label::before {\n    border-color: #7367f0; }\n  .custom-control-input:not(:disabled):active ~ .custom-control-label::before {\n    color: #fff;\n    background-color: white;\n    border-color: white; }\n  .custom-control-input:disabled ~ .custom-control-label {\n    color: #b8c2cc; }\n    .custom-control-input:disabled ~ .custom-control-label::before {\n      background-color: #f5f5f1; }\n\n.custom-control-label {\n  position: relative;\n  margin-bottom: 0;\n  vertical-align: top; }\n  .custom-control-label::before {\n    position: absolute;\n    top: 0.225rem;\n    left: -1.5rem;\n    display: block;\n    width: 1rem;\n    height: 1rem;\n    pointer-events: none;\n    content: \"\";\n    background-color: #fff;\n    border: #adb5bd solid 1px; }\n  .custom-control-label::after {\n    position: absolute;\n    top: 0.225rem;\n    left: -1.5rem;\n    display: block;\n    width: 1rem;\n    height: 1rem;\n    content: \"\";\n    background: no-repeat 50% / 50% 50%; }\n\n.custom-checkbox .custom-control-label::before {\n  border-radius: 0.25rem; }\n\n.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3e%3c/svg%3e\"); }\n\n.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before {\n  border-color: #7367f0;\n  background-color: #7367f0; }\n\n.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e\"); }\n\n.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before {\n  background-color: rgba(115, 103, 240, 0.5); }\n\n.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before {\n  background-color: rgba(115, 103, 240, 0.5); }\n\n.custom-radio .custom-control-label::before {\n  border-radius: 50%; }\n\n.custom-radio .custom-control-input:checked ~ .custom-control-label::after {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\"); }\n\n.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before {\n  background-color: rgba(115, 103, 240, 0.5); }\n\n.custom-switch {\n  padding-left: 3.5rem; }\n  .custom-switch .custom-control-label::before {\n    left: -3.5rem;\n    width: 3rem;\n    pointer-events: all;\n    border-radius: 0.857rem; }\n  .custom-switch .custom-control-label::after {\n    top: calc(0.225rem + 2px);\n    left: calc(-3.5rem + 2px);\n    width: 1.286rem;\n    height: 1.286rem;\n    background-color: #adb5bd;\n    border-radius: 0.857rem;\n    transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; }\n    @media (prefers-reduced-motion: reduce) {\n      .custom-switch .custom-control-label::after {\n        transition: none; } }\n  .custom-switch .custom-control-input:checked ~ .custom-control-label::after {\n    background-color: #fff;\n    transform: translateX(2rem); }\n  .custom-switch .custom-control-input:disabled:checked ~ .custom-control-label::before {\n    background-color: rgba(115, 103, 240, 0.5); }\n\n.custom-select {\n  display: inline-block;\n  width: 100%;\n  height: calc( 1.25em + 1.4rem + 1px);\n  padding: 0.7rem 1.7rem 0.7rem 0.7rem;\n  font-size: 0.96rem;\n  font-weight: 400;\n  line-height: 1.25;\n  color: #4e5154;\n  vertical-align: middle;\n  background: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%231e1e1e' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right 0.7rem center/8px 10px;\n  background-color: #fff;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 5px;\n  appearance: none; }\n  .custom-select:focus {\n    border-color: #7367f0;\n    outline: 0;\n    box-shadow: 0 3px 10px 0 rgba(0, 0, 0, 0.15); }\n    .custom-select:focus::-ms-value {\n      color: #4e5154;\n      background-color: #fff; }\n  .custom-select[multiple], .custom-select[size]:not([size=\"1\"]) {\n    height: auto;\n    padding-right: 0.7rem;\n    background-image: none; }\n  .custom-select:disabled {\n    color: #b8c2cc;\n    background-color: #ededed; }\n  .custom-select::-ms-expand {\n    display: none; }\n\n.custom-select-sm {\n  height: calc(1em + 1rem + 2px);\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  padding-left: 1.5rem;\n  font-size: 0.7rem; }\n\n.custom-select-lg {\n  height: calc(1.25em + 2rem + 2px);\n  padding-top: 1rem;\n  padding-bottom: 1rem;\n  padding-left: 2.5rem;\n  font-size: 1.25rem; }\n\n.custom-file {\n  position: relative;\n  display: inline-block;\n  width: 100%;\n  height: calc( 1.25em + 1.4rem + 1px);\n  margin-bottom: 0; }\n\n.custom-file-input {\n  position: relative;\n  z-index: 2;\n  width: 100%;\n  height: calc( 1.25em + 1.4rem + 1px);\n  margin: 0;\n  opacity: 0; }\n  .custom-file-input:focus ~ .custom-file-label {\n    border-color: #7367f0;\n    box-shadow: 0 3px 10px 0 rgba(0, 0, 0, 0.15); }\n  .custom-file-input:disabled ~ .custom-file-label {\n    background-color: #f5f5f1; }\n  .custom-file-input:lang(en) ~ .custom-file-label::after {\n    content: \"Browse\"; }\n  .custom-file-input ~ .custom-file-label[data-browse]::after {\n    content: attr(data-browse); }\n\n.custom-file-label {\n  position: absolute;\n  top: 0;\n  right: 0;\n  left: 0;\n  z-index: 1;\n  height: calc( 1.25em + 1.4rem + 1px);\n  padding: 0.7rem 0.7rem;\n  font-weight: 400;\n  line-height: 1.5rem;\n  color: #4e5154;\n  background-color: #fff;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 5px; }\n  .custom-file-label::after {\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    z-index: 3;\n    display: block;\n    height: calc(1.25em + 1.4rem);\n    padding: 0.7rem 0.7rem;\n    line-height: 1.5rem;\n    color: #4e5154;\n    content: \"Browse\";\n    background-color: #ededed;\n    border-left: inherit;\n    border-radius: 0 5px 5px 0; }\n\n.custom-range {\n  width: 100%;\n  height: calc(1rem + 0.4rem);\n  padding: 0;\n  background-color: transparent;\n  appearance: none; }\n  .custom-range:focus {\n    outline: none; }\n    .custom-range:focus::-webkit-slider-thumb {\n      box-shadow: 0 0 0 1px #f8f8f8, 0 3px 10px 0 rgba(0, 0, 0, 0.15); }\n    .custom-range:focus::-moz-range-thumb {\n      box-shadow: 0 0 0 1px #f8f8f8, 0 3px 10px 0 rgba(0, 0, 0, 0.15); }\n    .custom-range:focus::-ms-thumb {\n      box-shadow: 0 0 0 1px #f8f8f8, 0 3px 10px 0 rgba(0, 0, 0, 0.15); }\n  .custom-range::-moz-focus-outer {\n    border: 0; }\n  .custom-range::-webkit-slider-thumb {\n    width: 1rem;\n    height: 1rem;\n    margin-top: -0.25rem;\n    background-color: #7367f0;\n    border: 0;\n    border-radius: 1rem;\n    transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n    appearance: none; }\n    @media (prefers-reduced-motion: reduce) {\n      .custom-range::-webkit-slider-thumb {\n        transition: none; } }\n    .custom-range::-webkit-slider-thumb:active {\n      background-color: white; }\n  .custom-range::-webkit-slider-runnable-track {\n    width: 100%;\n    height: 0.5rem;\n    color: transparent;\n    cursor: pointer;\n    background-color: #dae1e7;\n    border-color: transparent;\n    border-radius: 1rem; }\n  .custom-range::-moz-range-thumb {\n    width: 1rem;\n    height: 1rem;\n    background-color: #7367f0;\n    border: 0;\n    border-radius: 1rem;\n    transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n    appearance: none; }\n    @media (prefers-reduced-motion: reduce) {\n      .custom-range::-moz-range-thumb {\n        transition: none; } }\n    .custom-range::-moz-range-thumb:active {\n      background-color: white; }\n  .custom-range::-moz-range-track {\n    width: 100%;\n    height: 0.5rem;\n    color: transparent;\n    cursor: pointer;\n    background-color: #dae1e7;\n    border-color: transparent;\n    border-radius: 1rem; }\n  .custom-range::-ms-thumb {\n    width: 1rem;\n    height: 1rem;\n    margin-top: 0;\n    margin-right: 0.2rem;\n    margin-left: 0.2rem;\n    background-color: #7367f0;\n    border: 0;\n    border-radius: 1rem;\n    transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n    appearance: none; }\n    @media (prefers-reduced-motion: reduce) {\n      .custom-range::-ms-thumb {\n        transition: none; } }\n    .custom-range::-ms-thumb:active {\n      background-color: white; }\n  .custom-range::-ms-track {\n    width: 100%;\n    height: 0.5rem;\n    color: transparent;\n    cursor: pointer;\n    background-color: transparent;\n    border-color: transparent;\n    border-width: 0.5rem; }\n  .custom-range::-ms-fill-lower {\n    background-color: #dae1e7;\n    border-radius: 1rem; }\n  .custom-range::-ms-fill-upper {\n    margin-right: 15px;\n    background-color: #dae1e7;\n    border-radius: 1rem; }\n  .custom-range:disabled::-webkit-slider-thumb {\n    background-color: #adb5bd; }\n  .custom-range:disabled::-webkit-slider-runnable-track {\n    cursor: default; }\n  .custom-range:disabled::-moz-range-thumb {\n    background-color: #adb5bd; }\n  .custom-range:disabled::-moz-range-track {\n    cursor: default; }\n  .custom-range:disabled::-ms-thumb {\n    background-color: #adb5bd; }\n\n.custom-control-label::before,\n.custom-file-label,\n.custom-select {\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; }\n  @media (prefers-reduced-motion: reduce) {\n    .custom-control-label::before,\n    .custom-file-label,\n    .custom-select {\n      transition: none; } }\n\n.nav {\n  display: flex;\n  flex-wrap: wrap;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none; }\n\n.nav-link {\n  display: block;\n  padding: 0.357rem 0.5rem; }\n  .nav-link:hover, .nav-link:focus {\n    text-decoration: none; }\n  .nav-link.disabled {\n    color: #b8c2cc;\n    pointer-events: none;\n    cursor: default; }\n\n.nav-tabs {\n  border-bottom: 1px solid #dae1e7; }\n  .nav-tabs .nav-item {\n    margin-bottom: -1px; }\n  .nav-tabs .nav-link {\n    border: 1px solid transparent;\n    border-top-left-radius: 0.5rem;\n    border-top-right-radius: 0.5rem; }\n    .nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n      border-color: #ededed #ededed #dae1e7; }\n    .nav-tabs .nav-link.disabled {\n      color: #b8c2cc;\n      background-color: transparent;\n      border-color: transparent; }\n  .nav-tabs .nav-link.active,\n  .nav-tabs .nav-item.show .nav-link {\n    color: #4e5154;\n    background-color: #f8f8f8;\n    border-color: #dae1e7 #dae1e7 #f8f8f8; }\n  .nav-tabs .dropdown-menu {\n    margin-top: -1px;\n    border-top-left-radius: 0;\n    border-top-right-radius: 0; }\n\n.nav-pills .nav-link {\n  border-radius: 0.5rem; }\n\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n  color: #fff;\n  background-color: #7367f0; }\n\n.nav-fill .nav-item {\n  flex: 1 1 auto;\n  text-align: center; }\n\n.nav-justified .nav-item {\n  flex-basis: 0;\n  flex-grow: 1;\n  text-align: center; }\n\n.tab-content > .tab-pane {\n  display: none; }\n\n.tab-content > .active {\n  display: block; }\n\n.navbar {\n  position: relative;\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  justify-content: space-between;\n  padding: 0.5rem 1rem; }\n  .navbar > .container,\n  .navbar > .container-fluid {\n    display: flex;\n    flex-wrap: wrap;\n    align-items: center;\n    justify-content: space-between; }\n\n.navbar-brand {\n  display: inline-block;\n  padding-top: -0.368rem;\n  padding-bottom: -0.368rem;\n  margin-right: 1rem;\n  font-size: 2rem;\n  line-height: inherit;\n  white-space: nowrap; }\n  .navbar-brand:hover, .navbar-brand:focus {\n    text-decoration: none; }\n\n.navbar-nav {\n  display: flex;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none; }\n  .navbar-nav .nav-link {\n    padding-right: 0;\n    padding-left: 0; }\n  .navbar-nav .dropdown-menu {\n    position: static;\n    float: none; }\n\n.navbar-text {\n  display: inline-block;\n  padding-top: 0.357rem;\n  padding-bottom: 0.357rem; }\n\n.navbar-collapse {\n  flex-basis: 100%;\n  flex-grow: 1;\n  align-items: center; }\n\n.navbar-toggler {\n  padding: 0.25rem 0.75rem;\n  font-size: 2rem;\n  line-height: 1;\n  background-color: transparent;\n  border: 1px solid transparent;\n  border-radius: 0.4285rem; }\n  .navbar-toggler:hover, .navbar-toggler:focus {\n    text-decoration: none; }\n\n.navbar-toggler-icon {\n  display: inline-block;\n  width: 1.5em;\n  height: 1.5em;\n  vertical-align: middle;\n  content: \"\";\n  background: no-repeat center center;\n  background-size: 100% 100%; }\n\n@media (max-width: 575.98px) {\n  .navbar-expand-sm > .container,\n  .navbar-expand-sm > .container-fluid {\n    padding-right: 0;\n    padding-left: 0; } }\n\n@media (min-width: 576px) {\n  .navbar-expand-sm {\n    flex-flow: row nowrap;\n    justify-content: flex-start; }\n    .navbar-expand-sm .navbar-nav {\n      flex-direction: row; }\n      .navbar-expand-sm .navbar-nav .dropdown-menu {\n        position: absolute; }\n      .navbar-expand-sm .navbar-nav .nav-link {\n        padding-right: 0.5rem;\n        padding-left: 0.5rem; }\n    .navbar-expand-sm > .container,\n    .navbar-expand-sm > .container-fluid {\n      flex-wrap: nowrap; }\n    .navbar-expand-sm .navbar-collapse {\n      display: flex !important;\n      flex-basis: auto; }\n    .navbar-expand-sm .navbar-toggler {\n      display: none; } }\n\n@media (max-width: 767.98px) {\n  .navbar-expand-md > .container,\n  .navbar-expand-md > .container-fluid {\n    padding-right: 0;\n    padding-left: 0; } }\n\n@media (min-width: 768px) {\n  .navbar-expand-md {\n    flex-flow: row nowrap;\n    justify-content: flex-start; }\n    .navbar-expand-md .navbar-nav {\n      flex-direction: row; }\n      .navbar-expand-md .navbar-nav .dropdown-menu {\n        position: absolute; }\n      .navbar-expand-md .navbar-nav .nav-link {\n        padding-right: 0.5rem;\n        padding-left: 0.5rem; }\n    .navbar-expand-md > .container,\n    .navbar-expand-md > .container-fluid {\n      flex-wrap: nowrap; }\n    .navbar-expand-md .navbar-collapse {\n      display: flex !important;\n      flex-basis: auto; }\n    .navbar-expand-md .navbar-toggler {\n      display: none; } }\n\n@media (max-width: 991.98px) {\n  .navbar-expand-lg > .container,\n  .navbar-expand-lg > .container-fluid {\n    padding-right: 0;\n    padding-left: 0; } }\n\n@media (min-width: 992px) {\n  .navbar-expand-lg {\n    flex-flow: row nowrap;\n    justify-content: flex-start; }\n    .navbar-expand-lg .navbar-nav {\n      flex-direction: row; }\n      .navbar-expand-lg .navbar-nav .dropdown-menu {\n        position: absolute; }\n      .navbar-expand-lg .navbar-nav .nav-link {\n        padding-right: 0.5rem;\n        padding-left: 0.5rem; }\n    .navbar-expand-lg > .container,\n    .navbar-expand-lg > .container-fluid {\n      flex-wrap: nowrap; }\n    .navbar-expand-lg .navbar-collapse {\n      display: flex !important;\n      flex-basis: auto; }\n    .navbar-expand-lg .navbar-toggler {\n      display: none; } }\n\n@media (max-width: 1199.98px) {\n  .navbar-expand-xl > .container,\n  .navbar-expand-xl > .container-fluid {\n    padding-right: 0;\n    padding-left: 0; } }\n\n@media (min-width: 1200px) {\n  .navbar-expand-xl {\n    flex-flow: row nowrap;\n    justify-content: flex-start; }\n    .navbar-expand-xl .navbar-nav {\n      flex-direction: row; }\n      .navbar-expand-xl .navbar-nav .dropdown-menu {\n        position: absolute; }\n      .navbar-expand-xl .navbar-nav .nav-link {\n        padding-right: 0.5rem;\n        padding-left: 0.5rem; }\n    .navbar-expand-xl > .container,\n    .navbar-expand-xl > .container-fluid {\n      flex-wrap: nowrap; }\n    .navbar-expand-xl .navbar-collapse {\n      display: flex !important;\n      flex-basis: auto; }\n    .navbar-expand-xl .navbar-toggler {\n      display: none; } }\n\n.navbar-expand {\n  flex-flow: row nowrap;\n  justify-content: flex-start; }\n  .navbar-expand > .container,\n  .navbar-expand > .container-fluid {\n    padding-right: 0;\n    padding-left: 0; }\n  .navbar-expand .navbar-nav {\n    flex-direction: row; }\n    .navbar-expand .navbar-nav .dropdown-menu {\n      position: absolute; }\n    .navbar-expand .navbar-nav .nav-link {\n      padding-right: 0.5rem;\n      padding-left: 0.5rem; }\n  .navbar-expand > .container,\n  .navbar-expand > .container-fluid {\n    flex-wrap: nowrap; }\n  .navbar-expand .navbar-collapse {\n    display: flex !important;\n    flex-basis: auto; }\n  .navbar-expand .navbar-toggler {\n    display: none; }\n\n.navbar-light .navbar-brand {\n  color: rgba(34, 41, 47, 0.9); }\n  .navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus {\n    color: rgba(34, 41, 47, 0.9); }\n\n.navbar-light .navbar-nav .nav-link {\n  color: rgba(34, 41, 47, 0.5); }\n  .navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus {\n    color: rgba(34, 41, 47, 0.7); }\n  .navbar-light .navbar-nav .nav-link.disabled {\n    color: rgba(34, 41, 47, 0.3); }\n\n.navbar-light .navbar-nav .show > .nav-link,\n.navbar-light .navbar-nav .active > .nav-link,\n.navbar-light .navbar-nav .nav-link.show,\n.navbar-light .navbar-nav .nav-link.active {\n  color: rgba(34, 41, 47, 0.9); }\n\n.navbar-light .navbar-toggler {\n  color: rgba(34, 41, 47, 0.5);\n  border-color: rgba(34, 41, 47, 0.1); }\n\n.navbar-light .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(34, 41, 47, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\"); }\n\n.navbar-light .navbar-text {\n  color: rgba(34, 41, 47, 0.5); }\n  .navbar-light .navbar-text a {\n    color: rgba(34, 41, 47, 0.9); }\n    .navbar-light .navbar-text a:hover, .navbar-light .navbar-text a:focus {\n      color: rgba(34, 41, 47, 0.9); }\n\n.navbar-dark .navbar-brand {\n  color: #fff; }\n  .navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus {\n    color: #fff; }\n\n.navbar-dark .navbar-nav .nav-link {\n  color: rgba(255, 255, 255, 0.5); }\n  .navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {\n    color: rgba(255, 255, 255, 0.75); }\n  .navbar-dark .navbar-nav .nav-link.disabled {\n    color: rgba(255, 255, 255, 0.25); }\n\n.navbar-dark .navbar-nav .show > .nav-link,\n.navbar-dark .navbar-nav .active > .nav-link,\n.navbar-dark .navbar-nav .nav-link.show,\n.navbar-dark .navbar-nav .nav-link.active {\n  color: #fff; }\n\n.navbar-dark .navbar-toggler {\n  color: rgba(255, 255, 255, 0.5);\n  border-color: rgba(255, 255, 255, 0.1); }\n\n.navbar-dark .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\"); }\n\n.navbar-dark .navbar-text {\n  color: rgba(255, 255, 255, 0.5); }\n  .navbar-dark .navbar-text a {\n    color: #fff; }\n    .navbar-dark .navbar-text a:hover, .navbar-dark .navbar-text a:focus {\n      color: #fff; }\n\n.card {\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  min-width: 0;\n  word-wrap: break-word;\n  background-color: #fff;\n  background-clip: border-box;\n  border: 1px solid rgba(34, 41, 47, 0.125);\n  border-radius: 0.5rem; }\n  .card > hr {\n    margin-right: 0;\n    margin-left: 0; }\n  .card > .list-group:first-child .list-group-item:first-child {\n    border-top-left-radius: 0.5rem;\n    border-top-right-radius: 0.5rem; }\n  .card > .list-group:last-child .list-group-item:last-child {\n    border-bottom-right-radius: 0.5rem;\n    border-bottom-left-radius: 0.5rem; }\n\n.card-body {\n  flex: 1 1 auto;\n  padding: 1.5rem; }\n\n.card-title {\n  margin-bottom: 1.5rem; }\n\n.card-subtitle {\n  margin-top: -0.75rem;\n  margin-bottom: 0; }\n\n.card-text:last-child {\n  margin-bottom: 0; }\n\n.card-link:hover {\n  text-decoration: none; }\n\n.card-link + .card-link {\n  margin-left: 1.5rem; }\n\n.card-header {\n  padding: 1.5rem 1.5rem;\n  margin-bottom: 0;\n  background-color: rgba(34, 41, 47, 0.03);\n  border-bottom: 1px solid rgba(34, 41, 47, 0.125); }\n  .card-header:first-child {\n    border-radius: calc(0.5rem - 1px) calc(0.5rem - 1px) 0 0; }\n  .card-header + .list-group .list-group-item:first-child {\n    border-top: 0; }\n\n.card-footer {\n  padding: 1.5rem 1.5rem;\n  background-color: rgba(34, 41, 47, 0.03);\n  border-top: 1px solid rgba(34, 41, 47, 0.125); }\n  .card-footer:last-child {\n    border-radius: 0 0 calc(0.5rem - 1px) calc(0.5rem - 1px); }\n\n.card-header-tabs {\n  margin-right: -0.75rem;\n  margin-bottom: -1.5rem;\n  margin-left: -0.75rem;\n  border-bottom: 0; }\n\n.card-header-pills {\n  margin-right: -0.75rem;\n  margin-left: -0.75rem; }\n\n.card-img-overlay {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  padding: 1.25rem; }\n\n.card-img {\n  width: 100%;\n  border-radius: calc(0.5rem - 1px); }\n\n.card-img-top {\n  width: 100%;\n  border-top-left-radius: calc(0.5rem - 1px);\n  border-top-right-radius: calc(0.5rem - 1px); }\n\n.card-img-bottom {\n  width: 100%;\n  border-bottom-right-radius: calc(0.5rem - 1px);\n  border-bottom-left-radius: calc(0.5rem - 1px); }\n\n.card-deck {\n  display: flex;\n  flex-direction: column; }\n  .card-deck .card {\n    margin-bottom: 14px; }\n  @media (min-width: 576px) {\n    .card-deck {\n      flex-flow: row wrap;\n      margin-right: -14px;\n      margin-left: -14px; }\n      .card-deck .card {\n        display: flex;\n        flex: 1 0 0%;\n        flex-direction: column;\n        margin-right: 14px;\n        margin-bottom: 0;\n        margin-left: 14px; } }\n\n.card-group {\n  display: flex;\n  flex-direction: column; }\n  .card-group > .card {\n    margin-bottom: 14px; }\n  @media (min-width: 576px) {\n    .card-group {\n      flex-flow: row wrap; }\n      .card-group > .card {\n        flex: 1 0 0%;\n        margin-bottom: 0; }\n        .card-group > .card + .card {\n          margin-left: 0;\n          border-left: 0; }\n        .card-group > .card:not(:last-child) {\n          border-top-right-radius: 0;\n          border-bottom-right-radius: 0; }\n          .card-group > .card:not(:last-child) .card-img-top,\n          .card-group > .card:not(:last-child) .card-header {\n            border-top-right-radius: 0; }\n          .card-group > .card:not(:last-child) .card-img-bottom,\n          .card-group > .card:not(:last-child) .card-footer {\n            border-bottom-right-radius: 0; }\n        .card-group > .card:not(:first-child) {\n          border-top-left-radius: 0;\n          border-bottom-left-radius: 0; }\n          .card-group > .card:not(:first-child) .card-img-top,\n          .card-group > .card:not(:first-child) .card-header {\n            border-top-left-radius: 0; }\n          .card-group > .card:not(:first-child) .card-img-bottom,\n          .card-group > .card:not(:first-child) .card-footer {\n            border-bottom-left-radius: 0; } }\n\n.card-columns .card {\n  margin-bottom: 1.5rem; }\n\n@media (min-width: 576px) {\n  .card-columns {\n    column-count: 3;\n    column-gap: 1.25rem;\n    orphans: 1;\n    widows: 1; }\n    .card-columns .card {\n      display: inline-block;\n      width: 100%; } }\n\n.accordion > .card {\n  overflow: hidden; }\n  .accordion > .card:not(:first-of-type) .card-header:first-child {\n    border-radius: 0; }\n  .accordion > .card:not(:first-of-type):not(:last-of-type) {\n    border-bottom: 0;\n    border-radius: 0; }\n  .accordion > .card:first-of-type {\n    border-bottom: 0;\n    border-bottom-right-radius: 0;\n    border-bottom-left-radius: 0; }\n  .accordion > .card:last-of-type {\n    border-top-left-radius: 0;\n    border-top-right-radius: 0; }\n  .accordion > .card .card-header {\n    margin-bottom: -1px; }\n\n.breadcrumb {\n  display: flex;\n  flex-wrap: wrap;\n  padding: 0.75rem 1rem;\n  margin-bottom: 1rem;\n  list-style: none;\n  background-color: #ededed;\n  border-radius: 0.5rem; }\n\n.breadcrumb-item + .breadcrumb-item {\n  padding-left: 0.5rem; }\n  .breadcrumb-item + .breadcrumb-item::before {\n    display: inline-block;\n    padding-right: 0.5rem;\n    color: #b8c2cc;\n    content: \"/\"; }\n\n.breadcrumb-item + .breadcrumb-item:hover::before {\n  text-decoration: underline; }\n\n.breadcrumb-item + .breadcrumb-item:hover::before {\n  text-decoration: none; }\n\n.breadcrumb-item.active {\n  color: #b8c2cc; }\n\n.pagination {\n  display: flex;\n  padding-left: 0;\n  list-style: none;\n  border-radius: 0.5rem; }\n\n.page-link {\n  position: relative;\n  display: block;\n  padding: 0.65rem 0.911rem;\n  margin-left: -1px;\n  line-height: 1.25;\n  color: #7367f0;\n  background-color: #fff;\n  border: 1px solid #dae1e7; }\n  .page-link:hover {\n    z-index: 2;\n    color: #5e50ee;\n    text-decoration: none;\n    background-color: #ededed;\n    border-color: #dae1e7; }\n  .page-link:focus {\n    z-index: 2;\n    outline: 0;\n    box-shadow: 0 0 0 0.2rem rgba(115, 103, 240, 0.25); }\n\n.page-item:first-child .page-link {\n  margin-left: 0;\n  border-top-left-radius: 0.5rem;\n  border-bottom-left-radius: 0.5rem; }\n\n.page-item:last-child .page-link {\n  border-top-right-radius: 0.5rem;\n  border-bottom-right-radius: 0.5rem; }\n\n.page-item.active .page-link {\n  z-index: 1;\n  color: #fff;\n  background-color: #7367f0;\n  border-color: #7367f0; }\n\n.page-item.disabled .page-link {\n  color: #b8c2cc;\n  pointer-events: none;\n  cursor: auto;\n  background-color: #fff;\n  border-color: #dae1e7; }\n\n.pagination-lg .page-link {\n  padding: 0.5rem 1rem;\n  font-size: 2rem;\n  line-height: 1.25; }\n\n.pagination-lg .page-item:first-child .page-link {\n  border-top-left-radius: 0.6rem;\n  border-bottom-left-radius: 0.6rem; }\n\n.pagination-lg .page-item:last-child .page-link {\n  border-top-right-radius: 0.6rem;\n  border-bottom-right-radius: 0.6rem; }\n\n.pagination-sm .page-link {\n  padding: 0.5rem 0.75rem;\n  font-size: 1rem;\n  line-height: 1; }\n\n.pagination-sm .page-item:first-child .page-link {\n  border-top-left-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem; }\n\n.pagination-sm .page-item:last-child .page-link {\n  border-top-right-radius: 0.25rem;\n  border-bottom-right-radius: 0.25rem; }\n\n.badge {\n  display: inline-block;\n  padding: 0.35em 0.4em;\n  font-size: 80%;\n  font-weight: 700;\n  line-height: 1;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: 0.25rem;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; }\n  @media (prefers-reduced-motion: reduce) {\n    .badge {\n      transition: none; } }\n  a.badge:hover, a.badge:focus {\n    text-decoration: none; }\n  .badge:empty {\n    display: none; }\n\n.btn .badge {\n  position: relative;\n  top: -1px; }\n\n.badge-pill {\n  padding-right: 0.6em;\n  padding-left: 0.6em;\n  border-radius: 10rem; }\n\n.badge-primary {\n  color: #fff;\n  background-color: #7367f0; }\n  a.badge-primary:hover, a.badge-primary:focus {\n    color: #fff;\n    background-color: #4839eb; }\n  a.badge-primary:focus, a.badge-primary.focus {\n    outline: 0;\n    box-shadow: 0 0 0 0.2rem rgba(115, 103, 240, 0.5); }\n\n.badge-secondary {\n  color: #2a2e30;\n  background-color: #b8c2cc; }\n  a.badge-secondary:hover, a.badge-secondary:focus {\n    color: #2a2e30;\n    background-color: #9aa9b7; }\n  a.badge-secondary:focus, a.badge-secondary.focus {\n    outline: 0;\n    box-shadow: 0 0 0 0.2rem rgba(184, 194, 204, 0.5); }\n\n.badge-success {\n  color: #fff;\n  background-color: #28c76f; }\n  a.badge-success:hover, a.badge-success:focus {\n    color: #fff;\n    background-color: #1f9d57; }\n  a.badge-success:focus, a.badge-success.focus {\n    outline: 0;\n    box-shadow: 0 0 0 0.2rem rgba(40, 199, 111, 0.5); }\n\n.badge-info {\n  color: #fff;\n  background-color: #00cfe8; }\n  a.badge-info:hover, a.badge-info:focus {\n    color: #fff;\n    background-color: #00a1b5; }\n  a.badge-info:focus, a.badge-info.focus {\n    outline: 0;\n    box-shadow: 0 0 0 0.2rem rgba(0, 207, 232, 0.5); }\n\n.badge-warning {\n  color: #2a2e30;\n  background-color: #ff9f43; }\n  a.badge-warning:hover, a.badge-warning:focus {\n    color: #2a2e30;\n    background-color: #ff8510; }\n  a.badge-warning:focus, a.badge-warning.focus {\n    outline: 0;\n    box-shadow: 0 0 0 0.2rem rgba(255, 159, 67, 0.5); }\n\n.badge-danger {\n  color: #fff;\n  background-color: #ea5455; }\n  a.badge-danger:hover, a.badge-danger:focus {\n    color: #fff;\n    background-color: #e42728; }\n  a.badge-danger:focus, a.badge-danger.focus {\n    outline: 0;\n    box-shadow: 0 0 0 0.2rem rgba(234, 84, 85, 0.5); }\n\n.badge-light {\n  color: #2a2e30;\n  background-color: #babfc7; }\n  a.badge-light:hover, a.badge-light:focus {\n    color: #2a2e30;\n    background-color: #9ea5b0; }\n  a.badge-light:focus, a.badge-light.focus {\n    outline: 0;\n    box-shadow: 0 0 0 0.2rem rgba(186, 191, 199, 0.5); }\n\n.badge-dark {\n  color: #fff;\n  background-color: #1e1e1e; }\n  a.badge-dark:hover, a.badge-dark:focus {\n    color: #fff;\n    background-color: #050505; }\n  a.badge-dark:focus, a.badge-dark.focus {\n    outline: 0;\n    box-shadow: 0 0 0 0.2rem rgba(30, 30, 30, 0.5); }\n\n.jumbotron {\n  padding: 2rem 1rem;\n  margin-bottom: 2rem;\n  background-color: #ededed;\n  border-radius: 0.6rem; }\n  @media (min-width: 576px) {\n    .jumbotron {\n      padding: 4rem 2rem; } }\n\n.jumbotron-fluid {\n  padding-right: 0;\n  padding-left: 0;\n  border-radius: 0; }\n\n.alert {\n  position: relative;\n  padding: 0.71rem 0.71rem;\n  margin-bottom: 1rem;\n  border: 1px solid transparent;\n  border-radius: 0.5rem; }\n\n.alert-heading {\n  color: inherit; }\n\n.alert-link {\n  font-weight: 700; }\n\n.alert-dismissible {\n  padding-right: 2.92rem; }\n  .alert-dismissible .close {\n    position: absolute;\n    top: 0;\n    right: 0;\n    padding: 0.71rem 0.71rem;\n    color: inherit; }\n\n.alert-primary {\n  color: #4c4993;\n  background-color: #e3e1fc;\n  border-color: #d8d4fb; }\n  .alert-primary hr {\n    border-top-color: #c3bdf9; }\n  .alert-primary .alert-link {\n    color: #3a3871; }\n\n.alert-secondary {\n  color: #707981;\n  background-color: #f1f3f5;\n  border-color: #ebeef1; }\n  .alert-secondary hr {\n    border-top-color: #dce1e7; }\n  .alert-secondary .alert-link {\n    color: #585f66; }\n\n.alert-success {\n  color: #257b50;\n  background-color: #d4f4e2;\n  border-color: #c3efd7; }\n  .alert-success hr {\n    border-top-color: #afeaca; }\n  .alert-success .alert-link {\n    color: #195437; }\n\n.alert-info {\n  color: #107f8f;\n  background-color: #ccf5fa;\n  border-color: #b8f2f9; }\n  .alert-info hr {\n    border-top-color: #a0eef7; }\n  .alert-info .alert-link {\n    color: #0b5661; }\n\n.alert-warning {\n  color: #956639;\n  background-color: #ffecd9;\n  border-color: #ffe4ca; }\n  .alert-warning hr {\n    border-top-color: #ffd7b1; }\n  .alert-warning .alert-link {\n    color: #704d2b; }\n\n.alert-danger {\n  color: #8a3f43;\n  background-color: #fbdddd;\n  border-color: #f9cfcf; }\n  .alert-danger hr {\n    border-top-color: #f6b8b8; }\n  .alert-danger .alert-link {\n    color: #672f32; }\n\n.alert-light {\n  color: #71777e;\n  background-color: #f1f2f4;\n  border-color: #ecedef; }\n  .alert-light hr {\n    border-top-color: #dee0e3; }\n  .alert-light .alert-link {\n    color: #595e63; }\n\n.alert-dark {\n  color: #202326;\n  background-color: #d2d2d2;\n  border-color: silver; }\n  .alert-dark hr {\n    border-top-color: #b3b3b3; }\n  .alert-dark .alert-link {\n    color: #090a0a; }\n\n@keyframes progress-bar-stripes {\n  from {\n    background-position: 0.357rem 0; }\n  to {\n    background-position: 0 0; } }\n\n.progress {\n  display: flex;\n  height: 0.357rem;\n  overflow: hidden;\n  font-size: 0.75rem;\n  background-color: #ededed;\n  border-radius: 1.28rem; }\n\n.progress-bar {\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  background-color: #7367f0;\n  transition: width 0.6s ease; }\n  @media (prefers-reduced-motion: reduce) {\n    .progress-bar {\n      transition: none; } }\n\n.progress-bar-striped {\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: 0.357rem 0.357rem; }\n\n.progress-bar-animated {\n  animation: progress-bar-stripes 1s linear infinite; }\n  @media (prefers-reduced-motion: reduce) {\n    .progress-bar-animated {\n      animation: none; } }\n\n.media {\n  display: flex;\n  align-items: flex-start; }\n\n.media-body {\n  flex: 1; }\n\n.list-group {\n  display: flex;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0; }\n\n.list-group-item-action {\n  width: 100%;\n  color: #4e5154;\n  text-align: inherit; }\n  .list-group-item-action:hover, .list-group-item-action:focus {\n    z-index: 1;\n    color: #4e5154;\n    text-decoration: none;\n    background-color: #babfc7; }\n  .list-group-item-action:active {\n    color: #626262;\n    background-color: #ededed; }\n\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 0.75rem 1.25rem;\n  margin-bottom: -1px;\n  background-color: #fff;\n  border: 1px solid rgba(34, 41, 47, 0.125); }\n  .list-group-item:first-child {\n    border-top-left-radius: 0.5rem;\n    border-top-right-radius: 0.5rem; }\n  .list-group-item:last-child {\n    margin-bottom: 0;\n    border-bottom-right-radius: 0.5rem;\n    border-bottom-left-radius: 0.5rem; }\n  .list-group-item.disabled, .list-group-item:disabled {\n    color: #b8c2cc;\n    pointer-events: none;\n    background-color: #fff; }\n  .list-group-item.active {\n    z-index: 2;\n    color: #fff;\n    background-color: #7367f0;\n    border-color: #7367f0; }\n\n.list-group-horizontal {\n  flex-direction: row; }\n  .list-group-horizontal .list-group-item {\n    margin-right: -1px;\n    margin-bottom: 0; }\n    .list-group-horizontal .list-group-item:first-child {\n      border-top-left-radius: 0.5rem;\n      border-bottom-left-radius: 0.5rem;\n      border-top-right-radius: 0; }\n    .list-group-horizontal .list-group-item:last-child {\n      margin-right: 0;\n      border-top-right-radius: 0.5rem;\n      border-bottom-right-radius: 0.5rem;\n      border-bottom-left-radius: 0; }\n\n@media (min-width: 576px) {\n  .list-group-horizontal-sm {\n    flex-direction: row; }\n    .list-group-horizontal-sm .list-group-item {\n      margin-right: -1px;\n      margin-bottom: 0; }\n      .list-group-horizontal-sm .list-group-item:first-child {\n        border-top-left-radius: 0.5rem;\n        border-bottom-left-radius: 0.5rem;\n        border-top-right-radius: 0; }\n      .list-group-horizontal-sm .list-group-item:last-child {\n        margin-right: 0;\n        border-top-right-radius: 0.5rem;\n        border-bottom-right-radius: 0.5rem;\n        border-bottom-left-radius: 0; } }\n\n@media (min-width: 768px) {\n  .list-group-horizontal-md {\n    flex-direction: row; }\n    .list-group-horizontal-md .list-group-item {\n      margin-right: -1px;\n      margin-bottom: 0; }\n      .list-group-horizontal-md .list-group-item:first-child {\n        border-top-left-radius: 0.5rem;\n        border-bottom-left-radius: 0.5rem;\n        border-top-right-radius: 0; }\n      .list-group-horizontal-md .list-group-item:last-child {\n        margin-right: 0;\n        border-top-right-radius: 0.5rem;\n        border-bottom-right-radius: 0.5rem;\n        border-bottom-left-radius: 0; } }\n\n@media (min-width: 992px) {\n  .list-group-horizontal-lg {\n    flex-direction: row; }\n    .list-group-horizontal-lg .list-group-item {\n      margin-right: -1px;\n      margin-bottom: 0; }\n      .list-group-horizontal-lg .list-group-item:first-child {\n        border-top-left-radius: 0.5rem;\n        border-bottom-left-radius: 0.5rem;\n        border-top-right-radius: 0; }\n      .list-group-horizontal-lg .list-group-item:last-child {\n        margin-right: 0;\n        border-top-right-radius: 0.5rem;\n        border-bottom-right-radius: 0.5rem;\n        border-bottom-left-radius: 0; } }\n\n@media (min-width: 1200px) {\n  .list-group-horizontal-xl {\n    flex-direction: row; }\n    .list-group-horizontal-xl .list-group-item {\n      margin-right: -1px;\n      margin-bottom: 0; }\n      .list-group-horizontal-xl .list-group-item:first-child {\n        border-top-left-radius: 0.5rem;\n        border-bottom-left-radius: 0.5rem;\n        border-top-right-radius: 0; }\n      .list-group-horizontal-xl .list-group-item:last-child {\n        margin-right: 0;\n        border-top-right-radius: 0.5rem;\n        border-bottom-right-radius: 0.5rem;\n        border-bottom-left-radius: 0; } }\n\n.list-group-flush .list-group-item {\n  border-right: 0;\n  border-left: 0;\n  border-radius: 0; }\n  .list-group-flush .list-group-item:last-child {\n    margin-bottom: -1px; }\n\n.list-group-flush:first-child .list-group-item:first-child {\n  border-top: 0; }\n\n.list-group-flush:last-child .list-group-item:last-child {\n  margin-bottom: 0;\n  border-bottom: 0; }\n\n.list-group-item-primary {\n  color: #4c4993;\n  background-color: #d8d4fb; }\n  .list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n    color: #4c4993;\n    background-color: #c3bdf9; }\n  .list-group-item-primary.list-group-item-action.active {\n    color: #fff;\n    background-color: #4c4993;\n    border-color: #4c4993; }\n\n.list-group-item-secondary {\n  color: #707981;\n  background-color: #ebeef1; }\n  .list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n    color: #707981;\n    background-color: #dce1e7; }\n  .list-group-item-secondary.list-group-item-action.active {\n    color: #fff;\n    background-color: #707981;\n    border-color: #707981; }\n\n.list-group-item-success {\n  color: #257b50;\n  background-color: #c3efd7; }\n  .list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n    color: #257b50;\n    background-color: #afeaca; }\n  .list-group-item-success.list-group-item-action.active {\n    color: #fff;\n    background-color: #257b50;\n    border-color: #257b50; }\n\n.list-group-item-info {\n  color: #107f8f;\n  background-color: #b8f2f9; }\n  .list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n    color: #107f8f;\n    background-color: #a0eef7; }\n  .list-group-item-info.list-group-item-action.active {\n    color: #fff;\n    background-color: #107f8f;\n    border-color: #107f8f; }\n\n.list-group-item-warning {\n  color: #956639;\n  background-color: #ffe4ca; }\n  .list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n    color: #956639;\n    background-color: #ffd7b1; }\n  .list-group-item-warning.list-group-item-action.active {\n    color: #fff;\n    background-color: #956639;\n    border-color: #956639; }\n\n.list-group-item-danger {\n  color: #8a3f43;\n  background-color: #f9cfcf; }\n  .list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n    color: #8a3f43;\n    background-color: #f6b8b8; }\n  .list-group-item-danger.list-group-item-action.active {\n    color: #fff;\n    background-color: #8a3f43;\n    border-color: #8a3f43; }\n\n.list-group-item-light {\n  color: #71777e;\n  background-color: #ecedef; }\n  .list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n    color: #71777e;\n    background-color: #dee0e3; }\n  .list-group-item-light.list-group-item-action.active {\n    color: #fff;\n    background-color: #71777e;\n    border-color: #71777e; }\n\n.list-group-item-dark {\n  color: #202326;\n  background-color: silver; }\n  .list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n    color: #202326;\n    background-color: #b3b3b3; }\n  .list-group-item-dark.list-group-item-action.active {\n    color: #fff;\n    background-color: #202326;\n    border-color: #202326; }\n\n.close {\n  float: right;\n  font-size: 1.5rem;\n  font-weight: 700;\n  line-height: 1;\n  color: #22292f;\n  text-shadow: 0 1px 0 #fff;\n  opacity: .5; }\n  .close:hover {\n    color: #22292f;\n    text-decoration: none; }\n  .close:not(:disabled):not(.disabled):hover, .close:not(:disabled):not(.disabled):focus {\n    opacity: .75; }\n\nbutton.close {\n  padding: 0;\n  background-color: transparent;\n  border: 0;\n  appearance: none; }\n\na.close.disabled {\n  pointer-events: none; }\n\n.toast {\n  max-width: 350px;\n  overflow: hidden;\n  font-size: 0.875rem;\n  background-color: rgba(255, 255, 255, 0.85);\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.1);\n  box-shadow: 0 0.25rem 0.75rem rgba(34, 41, 47, 0.1);\n  backdrop-filter: blur(10px);\n  opacity: 0;\n  border-radius: 0.25rem; }\n  .toast:not(:last-child) {\n    margin-bottom: 0.75rem; }\n  .toast.showing {\n    opacity: 1; }\n  .toast.show {\n    display: block;\n    opacity: 1; }\n  .toast.hide {\n    display: none; }\n\n.toast-header {\n  display: flex;\n  align-items: center;\n  padding: 0.25rem 0.75rem;\n  color: #b8c2cc;\n  background-color: rgba(255, 255, 255, 0.85);\n  background-clip: padding-box;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.05); }\n\n.toast-body {\n  padding: 0.75rem; }\n\n.modal-open {\n  overflow: hidden; }\n  .modal-open .modal {\n    overflow-x: hidden;\n    overflow-y: auto; }\n\n.modal {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1050;\n  display: none;\n  width: 100%;\n  height: 100%;\n  overflow: hidden;\n  outline: 0; }\n\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 0.5rem;\n  pointer-events: none; }\n  .modal.fade .modal-dialog {\n    transition: transform 0.3s ease-out;\n    transform: translate(0, -50px); }\n    @media (prefers-reduced-motion: reduce) {\n      .modal.fade .modal-dialog {\n        transition: none; } }\n  .modal.show .modal-dialog {\n    transform: none; }\n\n.modal-dialog-scrollable {\n  display: flex;\n  max-height: calc(100% - 1rem); }\n  .modal-dialog-scrollable .modal-content {\n    max-height: calc(100vh - 1rem);\n    overflow: hidden; }\n  .modal-dialog-scrollable .modal-header,\n  .modal-dialog-scrollable .modal-footer {\n    flex-shrink: 0; }\n  .modal-dialog-scrollable .modal-body {\n    overflow-y: auto; }\n\n.modal-dialog-centered {\n  display: flex;\n  align-items: center;\n  min-height: calc(100% - 1rem); }\n  .modal-dialog-centered::before {\n    display: block;\n    height: calc(100vh - 1rem);\n    content: \"\"; }\n  .modal-dialog-centered.modal-dialog-scrollable {\n    flex-direction: column;\n    justify-content: center;\n    height: 100%; }\n    .modal-dialog-centered.modal-dialog-scrollable .modal-content {\n      max-height: none; }\n    .modal-dialog-centered.modal-dialog-scrollable::before {\n      content: none; }\n\n.modal-content {\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  width: 100%;\n  pointer-events: auto;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(34, 41, 47, 0.2);\n  border-radius: 0.6rem;\n  outline: 0; }\n\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1040;\n  width: 100vw;\n  height: 100vh;\n  background-color: #22292f; }\n  .modal-backdrop.fade {\n    opacity: 0; }\n  .modal-backdrop.show {\n    opacity: 0.5; }\n\n.modal-header {\n  display: flex;\n  align-items: flex-start;\n  justify-content: space-between;\n  padding: 1rem 1rem;\n  border-bottom: 1px solid #ededed;\n  border-top-left-radius: 0.6rem;\n  border-top-right-radius: 0.6rem; }\n  .modal-header .close {\n    padding: 1rem 1rem;\n    margin: -1rem -1rem -1rem auto; }\n\n.modal-title {\n  margin-bottom: 0;\n  line-height: 1.45; }\n\n.modal-body {\n  position: relative;\n  flex: 1 1 auto;\n  padding: 1rem; }\n\n.modal-footer {\n  display: flex;\n  align-items: center;\n  justify-content: flex-end;\n  padding: 1rem;\n  border-top: 1px solid #ededed;\n  border-bottom-right-radius: 0.6rem;\n  border-bottom-left-radius: 0.6rem; }\n  .modal-footer > :not(:first-child) {\n    margin-left: .25rem; }\n  .modal-footer > :not(:last-child) {\n    margin-right: .25rem; }\n\n.modal-scrollbar-measure {\n  position: absolute;\n  top: -9999px;\n  width: 50px;\n  height: 50px;\n  overflow: scroll; }\n\n@media (min-width: 576px) {\n  .modal-dialog {\n    max-width: 500px;\n    margin: 1.75rem auto; }\n  .modal-dialog-scrollable {\n    max-height: calc(100% - 3.5rem); }\n    .modal-dialog-scrollable .modal-content {\n      max-height: calc(100vh - 3.5rem); }\n  .modal-dialog-centered {\n    min-height: calc(100% - 3.5rem); }\n    .modal-dialog-centered::before {\n      height: calc(100vh - 3.5rem); }\n  .modal-sm {\n    max-width: 300px; } }\n\n@media (min-width: 992px) {\n  .modal-lg,\n  .modal-xl {\n    max-width: 800px; } }\n\n@media (min-width: 1200px) {\n  .modal-xl {\n    max-width: 1140px; } }\n\n.tooltip {\n  position: absolute;\n  z-index: 1070;\n  display: block;\n  margin: 0;\n  font-family: \"Montserrat\", Helvetica, Arial, serif;\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.45;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.857rem;\n  word-wrap: break-word;\n  opacity: 0; }\n  .tooltip.show {\n    opacity: 1; }\n  .tooltip .arrow {\n    position: absolute;\n    display: block;\n    width: 0.8rem;\n    height: 0.4rem; }\n    .tooltip .arrow::before {\n      position: absolute;\n      content: \"\";\n      border-color: transparent;\n      border-style: solid; }\n\n.bs-tooltip-top, .bs-tooltip-auto[x-placement^=\"top\"] {\n  padding: 0.4rem 0; }\n  .bs-tooltip-top .arrow, .bs-tooltip-auto[x-placement^=\"top\"] .arrow {\n    bottom: 0; }\n    .bs-tooltip-top .arrow::before, .bs-tooltip-auto[x-placement^=\"top\"] .arrow::before {\n      top: 0;\n      border-width: 0.4rem 0.4rem 0;\n      border-top-color: #323232; }\n\n.bs-tooltip-right, .bs-tooltip-auto[x-placement^=\"right\"] {\n  padding: 0 0.4rem; }\n  .bs-tooltip-right .arrow, .bs-tooltip-auto[x-placement^=\"right\"] .arrow {\n    left: 0;\n    width: 0.4rem;\n    height: 0.8rem; }\n    .bs-tooltip-right .arrow::before, .bs-tooltip-auto[x-placement^=\"right\"] .arrow::before {\n      right: 0;\n      border-width: 0.4rem 0.4rem 0.4rem 0;\n      border-right-color: #323232; }\n\n.bs-tooltip-bottom, .bs-tooltip-auto[x-placement^=\"bottom\"] {\n  padding: 0.4rem 0; }\n  .bs-tooltip-bottom .arrow, .bs-tooltip-auto[x-placement^=\"bottom\"] .arrow {\n    top: 0; }\n    .bs-tooltip-bottom .arrow::before, .bs-tooltip-auto[x-placement^=\"bottom\"] .arrow::before {\n      bottom: 0;\n      border-width: 0 0.4rem 0.4rem;\n      border-bottom-color: #323232; }\n\n.bs-tooltip-left, .bs-tooltip-auto[x-placement^=\"left\"] {\n  padding: 0 0.4rem; }\n  .bs-tooltip-left .arrow, .bs-tooltip-auto[x-placement^=\"left\"] .arrow {\n    right: 0;\n    width: 0.4rem;\n    height: 0.8rem; }\n    .bs-tooltip-left .arrow::before, .bs-tooltip-auto[x-placement^=\"left\"] .arrow::before {\n      left: 0;\n      border-width: 0.4rem 0 0.4rem 0.4rem;\n      border-left-color: #323232; }\n\n.tooltip-inner {\n  max-width: 220px;\n  padding: 0.4rem 0.775rem;\n  color: #fff;\n  text-align: center;\n  background-color: #323232;\n  border-radius: 0.428rem; }\n\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 1060;\n  display: block;\n  max-width: 276px;\n  font-family: \"Montserrat\", Helvetica, Arial, serif;\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.45;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.857rem;\n  word-wrap: break-word;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(34, 41, 47, 0.2);\n  border-radius: 0.428rem; }\n  .popover .arrow {\n    position: absolute;\n    display: block;\n    width: 1rem;\n    height: 0.5rem;\n    margin: 0 0.6rem; }\n    .popover .arrow::before, .popover .arrow::after {\n      position: absolute;\n      display: block;\n      content: \"\";\n      border-color: transparent;\n      border-style: solid; }\n\n.bs-popover-top, .bs-popover-auto[x-placement^=\"top\"] {\n  margin-bottom: 0.5rem; }\n  .bs-popover-top > .arrow, .bs-popover-auto[x-placement^=\"top\"] > .arrow {\n    bottom: calc((0.5rem + 1px) * -1); }\n    .bs-popover-top > .arrow::before, .bs-popover-auto[x-placement^=\"top\"] > .arrow::before {\n      bottom: 0;\n      border-width: 0.5rem 0.5rem 0;\n      border-top-color: rgba(34, 41, 47, 0.25); }\n    .bs-popover-top > .arrow::after, .bs-popover-auto[x-placement^=\"top\"] > .arrow::after {\n      bottom: 1px;\n      border-width: 0.5rem 0.5rem 0;\n      border-top-color: #fff; }\n\n.bs-popover-right, .bs-popover-auto[x-placement^=\"right\"] {\n  margin-left: 0.5rem; }\n  .bs-popover-right > .arrow, .bs-popover-auto[x-placement^=\"right\"] > .arrow {\n    left: calc((0.5rem + 1px) * -1);\n    width: 0.5rem;\n    height: 1rem;\n    margin: 0.6rem 0; }\n    .bs-popover-right > .arrow::before, .bs-popover-auto[x-placement^=\"right\"] > .arrow::before {\n      left: 0;\n      border-width: 0.5rem 0.5rem 0.5rem 0;\n      border-right-color: rgba(34, 41, 47, 0.25); }\n    .bs-popover-right > .arrow::after, .bs-popover-auto[x-placement^=\"right\"] > .arrow::after {\n      left: 1px;\n      border-width: 0.5rem 0.5rem 0.5rem 0;\n      border-right-color: #fff; }\n\n.bs-popover-bottom, .bs-popover-auto[x-placement^=\"bottom\"] {\n  margin-top: 0.5rem; }\n  .bs-popover-bottom > .arrow, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow {\n    top: calc((0.5rem + 1px) * -1); }\n    .bs-popover-bottom > .arrow::before, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow::before {\n      top: 0;\n      border-width: 0 0.5rem 0.5rem 0.5rem;\n      border-bottom-color: rgba(34, 41, 47, 0.25); }\n    .bs-popover-bottom > .arrow::after, .bs-popover-auto[x-placement^=\"bottom\"] > .arrow::after {\n      top: 1px;\n      border-width: 0 0.5rem 0.5rem 0.5rem;\n      border-bottom-color: #fff; }\n  .bs-popover-bottom .popover-header::before, .bs-popover-auto[x-placement^=\"bottom\"] .popover-header::before {\n    position: absolute;\n    top: 0;\n    left: 50%;\n    display: block;\n    width: 1rem;\n    margin-left: -0.5rem;\n    content: \"\";\n    border-bottom: 1px solid #7367f0; }\n\n.bs-popover-left, .bs-popover-auto[x-placement^=\"left\"] {\n  margin-right: 0.5rem; }\n  .bs-popover-left > .arrow, .bs-popover-auto[x-placement^=\"left\"] > .arrow {\n    right: calc((0.5rem + 1px) * -1);\n    width: 0.5rem;\n    height: 1rem;\n    margin: 0.6rem 0; }\n    .bs-popover-left > .arrow::before, .bs-popover-auto[x-placement^=\"left\"] > .arrow::before {\n      right: 0;\n      border-width: 0.5rem 0 0.5rem 0.5rem;\n      border-left-color: rgba(34, 41, 47, 0.25); }\n    .bs-popover-left > .arrow::after, .bs-popover-auto[x-placement^=\"left\"] > .arrow::after {\n      right: 1px;\n      border-width: 0.5rem 0 0.5rem 0.5rem;\n      border-left-color: #fff; }\n\n.popover-header {\n  padding: 0.5rem 0.75rem;\n  margin-bottom: 0;\n  font-size: 1rem;\n  color: #2c2c2c;\n  background-color: #7367f0;\n  border-bottom: 1px solid #5e50ee;\n  border-top-left-radius: calc(0.6rem - 1px);\n  border-top-right-radius: calc(0.6rem - 1px); }\n  .popover-header:empty {\n    display: none; }\n\n.popover-body {\n  padding: 0.5rem 0.75rem;\n  color: #626262; }\n\n.carousel {\n  position: relative; }\n\n.carousel.pointer-event {\n  touch-action: pan-y; }\n\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden; }\n  .carousel-inner::after {\n    display: block;\n    clear: both;\n    content: \"\"; }\n\n.carousel-item {\n  position: relative;\n  display: none;\n  float: left;\n  width: 100%;\n  margin-right: -100%;\n  backface-visibility: hidden;\n  transition: transform 0.6s ease-in-out; }\n  @media (prefers-reduced-motion: reduce) {\n    .carousel-item {\n      transition: none; } }\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n  display: block; }\n\n.carousel-item-next:not(.carousel-item-left),\n.active.carousel-item-right {\n  transform: translateX(100%); }\n\n.carousel-item-prev:not(.carousel-item-right),\n.active.carousel-item-left {\n  transform: translateX(-100%); }\n\n.carousel-fade .carousel-item {\n  opacity: 0;\n  transition-property: opacity;\n  transform: none; }\n\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-left,\n.carousel-fade .carousel-item-prev.carousel-item-right {\n  z-index: 1;\n  opacity: 1; }\n\n.carousel-fade .active.carousel-item-left,\n.carousel-fade .active.carousel-item-right {\n  z-index: 0;\n  opacity: 0;\n  transition: 0s 0.6s opacity; }\n  @media (prefers-reduced-motion: reduce) {\n    .carousel-fade .active.carousel-item-left,\n    .carousel-fade .active.carousel-item-right {\n      transition: none; } }\n\n.carousel-control-prev,\n.carousel-control-next {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  z-index: 1;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 15%;\n  color: #fff;\n  text-align: center;\n  opacity: 0.5;\n  transition: opacity 0.15s ease; }\n  @media (prefers-reduced-motion: reduce) {\n    .carousel-control-prev,\n    .carousel-control-next {\n      transition: none; } }\n  .carousel-control-prev:hover, .carousel-control-prev:focus,\n  .carousel-control-next:hover,\n  .carousel-control-next:focus {\n    color: #fff;\n    text-decoration: none;\n    outline: 0;\n    opacity: 0.9; }\n\n.carousel-control-prev {\n  left: 0; }\n\n.carousel-control-next {\n  right: 0; }\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n  display: inline-block;\n  width: 20px;\n  height: 20px;\n  background: no-repeat 50% / 100% 100%; }\n\n.carousel-control-prev-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3e%3c/svg%3e\"); }\n\n.carousel-control-next-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3e%3c/svg%3e\"); }\n\n.carousel-indicators {\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 15;\n  display: flex;\n  justify-content: center;\n  padding-left: 0;\n  margin-right: 15%;\n  margin-left: 15%;\n  list-style: none; }\n  .carousel-indicators li {\n    box-sizing: content-box;\n    flex: 0 1 auto;\n    width: 30px;\n    height: 3px;\n    margin-right: 3px;\n    margin-left: 3px;\n    text-indent: -999px;\n    cursor: pointer;\n    background-color: #fff;\n    background-clip: padding-box;\n    border-top: 10px solid transparent;\n    border-bottom: 10px solid transparent;\n    opacity: .5;\n    transition: opacity 0.6s ease; }\n    @media (prefers-reduced-motion: reduce) {\n      .carousel-indicators li {\n        transition: none; } }\n  .carousel-indicators .active {\n    opacity: 1; }\n\n.carousel-caption {\n  position: absolute;\n  right: 15%;\n  bottom: 20px;\n  left: 15%;\n  z-index: 10;\n  padding-top: 20px;\n  padding-bottom: 20px;\n  color: #fff;\n  text-align: center; }\n\n@keyframes spinner-border {\n  to {\n    transform: rotate(360deg); } }\n\n.spinner-border {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  vertical-align: text-bottom;\n  border: 0.25em solid currentColor;\n  border-right-color: transparent;\n  border-radius: 50%;\n  animation: spinner-border .75s linear infinite; }\n\n.spinner-border-sm {\n  width: 1rem;\n  height: 1rem;\n  border-width: 0.2em; }\n\n@keyframes spinner-grow {\n  0% {\n    transform: scale(0); }\n  50% {\n    opacity: 1; } }\n\n.spinner-grow {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  vertical-align: text-bottom;\n  background-color: currentColor;\n  border-radius: 50%;\n  opacity: 0;\n  animation: spinner-grow .75s linear infinite; }\n\n.spinner-grow-sm {\n  width: 1rem;\n  height: 1rem; }\n\n.align-baseline {\n  vertical-align: baseline !important; }\n\n.align-top {\n  vertical-align: top !important; }\n\n.align-middle {\n  vertical-align: middle !important; }\n\n.align-bottom {\n  vertical-align: bottom !important; }\n\n.align-text-bottom {\n  vertical-align: text-bottom !important; }\n\n.align-text-top {\n  vertical-align: text-top !important; }\n\n.bg-primary {\n  background-color: #7367f0 !important; }\n\na.bg-primary:hover, a.bg-primary:focus,\nbutton.bg-primary:hover,\nbutton.bg-primary:focus {\n  background-color: #4839eb !important; }\n\n.bg-secondary {\n  background-color: #b8c2cc !important; }\n\na.bg-secondary:hover, a.bg-secondary:focus,\nbutton.bg-secondary:hover,\nbutton.bg-secondary:focus {\n  background-color: #9aa9b7 !important; }\n\n.bg-success {\n  background-color: #28c76f !important; }\n\na.bg-success:hover, a.bg-success:focus,\nbutton.bg-success:hover,\nbutton.bg-success:focus {\n  background-color: #1f9d57 !important; }\n\n.bg-info {\n  background-color: #00cfe8 !important; }\n\na.bg-info:hover, a.bg-info:focus,\nbutton.bg-info:hover,\nbutton.bg-info:focus {\n  background-color: #00a1b5 !important; }\n\n.bg-warning {\n  background-color: #ff9f43 !important; }\n\na.bg-warning:hover, a.bg-warning:focus,\nbutton.bg-warning:hover,\nbutton.bg-warning:focus {\n  background-color: #ff8510 !important; }\n\n.bg-danger {\n  background-color: #ea5455 !important; }\n\na.bg-danger:hover, a.bg-danger:focus,\nbutton.bg-danger:hover,\nbutton.bg-danger:focus {\n  background-color: #e42728 !important; }\n\n.bg-light {\n  background-color: #babfc7 !important; }\n\na.bg-light:hover, a.bg-light:focus,\nbutton.bg-light:hover,\nbutton.bg-light:focus {\n  background-color: #9ea5b0 !important; }\n\n.bg-dark {\n  background-color: #1e1e1e !important; }\n\na.bg-dark:hover, a.bg-dark:focus,\nbutton.bg-dark:hover,\nbutton.bg-dark:focus {\n  background-color: #050505 !important; }\n\n.bg-white {\n  background-color: #fff !important; }\n\n.bg-transparent {\n  background-color: transparent !important; }\n\n.border {\n  border: 1px solid #ededed !important; }\n\n.border-top {\n  border-top: 1px solid #ededed !important; }\n\n.border-right {\n  border-right: 1px solid #ededed !important; }\n\n.border-bottom {\n  border-bottom: 1px solid #ededed !important; }\n\n.border-left {\n  border-left: 1px solid #ededed !important; }\n\n.border-0 {\n  border: 0 !important; }\n\n.border-top-0 {\n  border-top: 0 !important; }\n\n.border-right-0 {\n  border-right: 0 !important; }\n\n.border-bottom-0 {\n  border-bottom: 0 !important; }\n\n.border-left-0 {\n  border-left: 0 !important; }\n\n.border-primary {\n  border-color: #7367f0 !important; }\n\n.border-secondary {\n  border-color: #b8c2cc !important; }\n\n.border-success {\n  border-color: #28c76f !important; }\n\n.border-info {\n  border-color: #00cfe8 !important; }\n\n.border-warning {\n  border-color: #ff9f43 !important; }\n\n.border-danger {\n  border-color: #ea5455 !important; }\n\n.border-light {\n  border-color: #babfc7 !important; }\n\n.border-dark {\n  border-color: #1e1e1e !important; }\n\n.border-white {\n  border-color: #fff !important; }\n\n.rounded-sm {\n  border-radius: 0.25rem !important; }\n\n.rounded {\n  border-radius: 0.5rem !important; }\n\n.rounded-top {\n  border-top-left-radius: 0.5rem !important;\n  border-top-right-radius: 0.5rem !important; }\n\n.rounded-right {\n  border-top-right-radius: 0.5rem !important;\n  border-bottom-right-radius: 0.5rem !important; }\n\n.rounded-bottom {\n  border-bottom-right-radius: 0.5rem !important;\n  border-bottom-left-radius: 0.5rem !important; }\n\n.rounded-left {\n  border-top-left-radius: 0.5rem !important;\n  border-bottom-left-radius: 0.5rem !important; }\n\n.rounded-lg {\n  border-radius: 0.6rem !important; }\n\n.rounded-circle {\n  border-radius: 50% !important; }\n\n.rounded-pill {\n  border-radius: 50rem !important; }\n\n.rounded-0 {\n  border-radius: 0 !important; }\n\n.clearfix::after {\n  display: block;\n  clear: both;\n  content: \"\"; }\n\n.d-none {\n  display: none !important; }\n\n.d-inline {\n  display: inline !important; }\n\n.d-inline-block {\n  display: inline-block !important; }\n\n.d-block {\n  display: block !important; }\n\n.d-table {\n  display: table !important; }\n\n.d-table-row {\n  display: table-row !important; }\n\n.d-table-cell {\n  display: table-cell !important; }\n\n.d-flex {\n  display: flex !important; }\n\n.d-inline-flex {\n  display: inline-flex !important; }\n\n@media (min-width: 576px) {\n  .d-sm-none {\n    display: none !important; }\n  .d-sm-inline {\n    display: inline !important; }\n  .d-sm-inline-block {\n    display: inline-block !important; }\n  .d-sm-block {\n    display: block !important; }\n  .d-sm-table {\n    display: table !important; }\n  .d-sm-table-row {\n    display: table-row !important; }\n  .d-sm-table-cell {\n    display: table-cell !important; }\n  .d-sm-flex {\n    display: flex !important; }\n  .d-sm-inline-flex {\n    display: inline-flex !important; } }\n\n@media (min-width: 768px) {\n  .d-md-none {\n    display: none !important; }\n  .d-md-inline {\n    display: inline !important; }\n  .d-md-inline-block {\n    display: inline-block !important; }\n  .d-md-block {\n    display: block !important; }\n  .d-md-table {\n    display: table !important; }\n  .d-md-table-row {\n    display: table-row !important; }\n  .d-md-table-cell {\n    display: table-cell !important; }\n  .d-md-flex {\n    display: flex !important; }\n  .d-md-inline-flex {\n    display: inline-flex !important; } }\n\n@media (min-width: 992px) {\n  .d-lg-none {\n    display: none !important; }\n  .d-lg-inline {\n    display: inline !important; }\n  .d-lg-inline-block {\n    display: inline-block !important; }\n  .d-lg-block {\n    display: block !important; }\n  .d-lg-table {\n    display: table !important; }\n  .d-lg-table-row {\n    display: table-row !important; }\n  .d-lg-table-cell {\n    display: table-cell !important; }\n  .d-lg-flex {\n    display: flex !important; }\n  .d-lg-inline-flex {\n    display: inline-flex !important; } }\n\n@media (min-width: 1200px) {\n  .d-xl-none {\n    display: none !important; }\n  .d-xl-inline {\n    display: inline !important; }\n  .d-xl-inline-block {\n    display: inline-block !important; }\n  .d-xl-block {\n    display: block !important; }\n  .d-xl-table {\n    display: table !important; }\n  .d-xl-table-row {\n    display: table-row !important; }\n  .d-xl-table-cell {\n    display: table-cell !important; }\n  .d-xl-flex {\n    display: flex !important; }\n  .d-xl-inline-flex {\n    display: inline-flex !important; } }\n\n@media print {\n  .d-print-none {\n    display: none !important; }\n  .d-print-inline {\n    display: inline !important; }\n  .d-print-inline-block {\n    display: inline-block !important; }\n  .d-print-block {\n    display: block !important; }\n  .d-print-table {\n    display: table !important; }\n  .d-print-table-row {\n    display: table-row !important; }\n  .d-print-table-cell {\n    display: table-cell !important; }\n  .d-print-flex {\n    display: flex !important; }\n  .d-print-inline-flex {\n    display: inline-flex !important; } }\n\n.embed-responsive {\n  position: relative;\n  display: block;\n  width: 100%;\n  padding: 0;\n  overflow: hidden; }\n  .embed-responsive::before {\n    display: block;\n    content: \"\"; }\n  .embed-responsive .embed-responsive-item,\n  .embed-responsive iframe,\n  .embed-responsive embed,\n  .embed-responsive object,\n  .embed-responsive video {\n    position: absolute;\n    top: 0;\n    bottom: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    border: 0; }\n\n.embed-responsive-21by9::before {\n  padding-top: 42.85714%; }\n\n.embed-responsive-16by9::before {\n  padding-top: 56.25%; }\n\n.embed-responsive-4by3::before {\n  padding-top: 75%; }\n\n.embed-responsive-1by1::before {\n  padding-top: 100%; }\n\n.embed-responsive-21by9::before {\n  padding-top: 42.85714%; }\n\n.embed-responsive-16by9::before {\n  padding-top: 56.25%; }\n\n.embed-responsive-4by3::before {\n  padding-top: 75%; }\n\n.embed-responsive-1by1::before {\n  padding-top: 100%; }\n\n.flex-row {\n  flex-direction: row !important; }\n\n.flex-column {\n  flex-direction: column !important; }\n\n.flex-row-reverse {\n  flex-direction: row-reverse !important; }\n\n.flex-column-reverse {\n  flex-direction: column-reverse !important; }\n\n.flex-wrap {\n  flex-wrap: wrap !important; }\n\n.flex-nowrap {\n  flex-wrap: nowrap !important; }\n\n.flex-wrap-reverse {\n  flex-wrap: wrap-reverse !important; }\n\n.flex-fill {\n  flex: 1 1 auto !important; }\n\n.flex-grow-0 {\n  flex-grow: 0 !important; }\n\n.flex-grow-1 {\n  flex-grow: 1 !important; }\n\n.flex-shrink-0 {\n  flex-shrink: 0 !important; }\n\n.flex-shrink-1 {\n  flex-shrink: 1 !important; }\n\n.justify-content-start {\n  justify-content: flex-start !important; }\n\n.justify-content-end {\n  justify-content: flex-end !important; }\n\n.justify-content-center {\n  justify-content: center !important; }\n\n.justify-content-between {\n  justify-content: space-between !important; }\n\n.justify-content-around {\n  justify-content: space-around !important; }\n\n.align-items-start {\n  align-items: flex-start !important; }\n\n.align-items-end {\n  align-items: flex-end !important; }\n\n.align-items-center {\n  align-items: center !important; }\n\n.align-items-baseline {\n  align-items: baseline !important; }\n\n.align-items-stretch {\n  align-items: stretch !important; }\n\n.align-content-start {\n  align-content: flex-start !important; }\n\n.align-content-end {\n  align-content: flex-end !important; }\n\n.align-content-center {\n  align-content: center !important; }\n\n.align-content-between {\n  align-content: space-between !important; }\n\n.align-content-around {\n  align-content: space-around !important; }\n\n.align-content-stretch {\n  align-content: stretch !important; }\n\n.align-self-auto {\n  align-self: auto !important; }\n\n.align-self-start {\n  align-self: flex-start !important; }\n\n.align-self-end {\n  align-self: flex-end !important; }\n\n.align-self-center {\n  align-self: center !important; }\n\n.align-self-baseline {\n  align-self: baseline !important; }\n\n.align-self-stretch {\n  align-self: stretch !important; }\n\n@media (min-width: 576px) {\n  .flex-sm-row {\n    flex-direction: row !important; }\n  .flex-sm-column {\n    flex-direction: column !important; }\n  .flex-sm-row-reverse {\n    flex-direction: row-reverse !important; }\n  .flex-sm-column-reverse {\n    flex-direction: column-reverse !important; }\n  .flex-sm-wrap {\n    flex-wrap: wrap !important; }\n  .flex-sm-nowrap {\n    flex-wrap: nowrap !important; }\n  .flex-sm-wrap-reverse {\n    flex-wrap: wrap-reverse !important; }\n  .flex-sm-fill {\n    flex: 1 1 auto !important; }\n  .flex-sm-grow-0 {\n    flex-grow: 0 !important; }\n  .flex-sm-grow-1 {\n    flex-grow: 1 !important; }\n  .flex-sm-shrink-0 {\n    flex-shrink: 0 !important; }\n  .flex-sm-shrink-1 {\n    flex-shrink: 1 !important; }\n  .justify-content-sm-start {\n    justify-content: flex-start !important; }\n  .justify-content-sm-end {\n    justify-content: flex-end !important; }\n  .justify-content-sm-center {\n    justify-content: center !important; }\n  .justify-content-sm-between {\n    justify-content: space-between !important; }\n  .justify-content-sm-around {\n    justify-content: space-around !important; }\n  .align-items-sm-start {\n    align-items: flex-start !important; }\n  .align-items-sm-end {\n    align-items: flex-end !important; }\n  .align-items-sm-center {\n    align-items: center !important; }\n  .align-items-sm-baseline {\n    align-items: baseline !important; }\n  .align-items-sm-stretch {\n    align-items: stretch !important; }\n  .align-content-sm-start {\n    align-content: flex-start !important; }\n  .align-content-sm-end {\n    align-content: flex-end !important; }\n  .align-content-sm-center {\n    align-content: center !important; }\n  .align-content-sm-between {\n    align-content: space-between !important; }\n  .align-content-sm-around {\n    align-content: space-around !important; }\n  .align-content-sm-stretch {\n    align-content: stretch !important; }\n  .align-self-sm-auto {\n    align-self: auto !important; }\n  .align-self-sm-start {\n    align-self: flex-start !important; }\n  .align-self-sm-end {\n    align-self: flex-end !important; }\n  .align-self-sm-center {\n    align-self: center !important; }\n  .align-self-sm-baseline {\n    align-self: baseline !important; }\n  .align-self-sm-stretch {\n    align-self: stretch !important; } }\n\n@media (min-width: 768px) {\n  .flex-md-row {\n    flex-direction: row !important; }\n  .flex-md-column {\n    flex-direction: column !important; }\n  .flex-md-row-reverse {\n    flex-direction: row-reverse !important; }\n  .flex-md-column-reverse {\n    flex-direction: column-reverse !important; }\n  .flex-md-wrap {\n    flex-wrap: wrap !important; }\n  .flex-md-nowrap {\n    flex-wrap: nowrap !important; }\n  .flex-md-wrap-reverse {\n    flex-wrap: wrap-reverse !important; }\n  .flex-md-fill {\n    flex: 1 1 auto !important; }\n  .flex-md-grow-0 {\n    flex-grow: 0 !important; }\n  .flex-md-grow-1 {\n    flex-grow: 1 !important; }\n  .flex-md-shrink-0 {\n    flex-shrink: 0 !important; }\n  .flex-md-shrink-1 {\n    flex-shrink: 1 !important; }\n  .justify-content-md-start {\n    justify-content: flex-start !important; }\n  .justify-content-md-end {\n    justify-content: flex-end !important; }\n  .justify-content-md-center {\n    justify-content: center !important; }\n  .justify-content-md-between {\n    justify-content: space-between !important; }\n  .justify-content-md-around {\n    justify-content: space-around !important; }\n  .align-items-md-start {\n    align-items: flex-start !important; }\n  .align-items-md-end {\n    align-items: flex-end !important; }\n  .align-items-md-center {\n    align-items: center !important; }\n  .align-items-md-baseline {\n    align-items: baseline !important; }\n  .align-items-md-stretch {\n    align-items: stretch !important; }\n  .align-content-md-start {\n    align-content: flex-start !important; }\n  .align-content-md-end {\n    align-content: flex-end !important; }\n  .align-content-md-center {\n    align-content: center !important; }\n  .align-content-md-between {\n    align-content: space-between !important; }\n  .align-content-md-around {\n    align-content: space-around !important; }\n  .align-content-md-stretch {\n    align-content: stretch !important; }\n  .align-self-md-auto {\n    align-self: auto !important; }\n  .align-self-md-start {\n    align-self: flex-start !important; }\n  .align-self-md-end {\n    align-self: flex-end !important; }\n  .align-self-md-center {\n    align-self: center !important; }\n  .align-self-md-baseline {\n    align-self: baseline !important; }\n  .align-self-md-stretch {\n    align-self: stretch !important; } }\n\n@media (min-width: 992px) {\n  .flex-lg-row {\n    flex-direction: row !important; }\n  .flex-lg-column {\n    flex-direction: column !important; }\n  .flex-lg-row-reverse {\n    flex-direction: row-reverse !important; }\n  .flex-lg-column-reverse {\n    flex-direction: column-reverse !important; }\n  .flex-lg-wrap {\n    flex-wrap: wrap !important; }\n  .flex-lg-nowrap {\n    flex-wrap: nowrap !important; }\n  .flex-lg-wrap-reverse {\n    flex-wrap: wrap-reverse !important; }\n  .flex-lg-fill {\n    flex: 1 1 auto !important; }\n  .flex-lg-grow-0 {\n    flex-grow: 0 !important; }\n  .flex-lg-grow-1 {\n    flex-grow: 1 !important; }\n  .flex-lg-shrink-0 {\n    flex-shrink: 0 !important; }\n  .flex-lg-shrink-1 {\n    flex-shrink: 1 !important; }\n  .justify-content-lg-start {\n    justify-content: flex-start !important; }\n  .justify-content-lg-end {\n    justify-content: flex-end !important; }\n  .justify-content-lg-center {\n    justify-content: center !important; }\n  .justify-content-lg-between {\n    justify-content: space-between !important; }\n  .justify-content-lg-around {\n    justify-content: space-around !important; }\n  .align-items-lg-start {\n    align-items: flex-start !important; }\n  .align-items-lg-end {\n    align-items: flex-end !important; }\n  .align-items-lg-center {\n    align-items: center !important; }\n  .align-items-lg-baseline {\n    align-items: baseline !important; }\n  .align-items-lg-stretch {\n    align-items: stretch !important; }\n  .align-content-lg-start {\n    align-content: flex-start !important; }\n  .align-content-lg-end {\n    align-content: flex-end !important; }\n  .align-content-lg-center {\n    align-content: center !important; }\n  .align-content-lg-between {\n    align-content: space-between !important; }\n  .align-content-lg-around {\n    align-content: space-around !important; }\n  .align-content-lg-stretch {\n    align-content: stretch !important; }\n  .align-self-lg-auto {\n    align-self: auto !important; }\n  .align-self-lg-start {\n    align-self: flex-start !important; }\n  .align-self-lg-end {\n    align-self: flex-end !important; }\n  .align-self-lg-center {\n    align-self: center !important; }\n  .align-self-lg-baseline {\n    align-self: baseline !important; }\n  .align-self-lg-stretch {\n    align-self: stretch !important; } }\n\n@media (min-width: 1200px) {\n  .flex-xl-row {\n    flex-direction: row !important; }\n  .flex-xl-column {\n    flex-direction: column !important; }\n  .flex-xl-row-reverse {\n    flex-direction: row-reverse !important; }\n  .flex-xl-column-reverse {\n    flex-direction: column-reverse !important; }\n  .flex-xl-wrap {\n    flex-wrap: wrap !important; }\n  .flex-xl-nowrap {\n    flex-wrap: nowrap !important; }\n  .flex-xl-wrap-reverse {\n    flex-wrap: wrap-reverse !important; }\n  .flex-xl-fill {\n    flex: 1 1 auto !important; }\n  .flex-xl-grow-0 {\n    flex-grow: 0 !important; }\n  .flex-xl-grow-1 {\n    flex-grow: 1 !important; }\n  .flex-xl-shrink-0 {\n    flex-shrink: 0 !important; }\n  .flex-xl-shrink-1 {\n    flex-shrink: 1 !important; }\n  .justify-content-xl-start {\n    justify-content: flex-start !important; }\n  .justify-content-xl-end {\n    justify-content: flex-end !important; }\n  .justify-content-xl-center {\n    justify-content: center !important; }\n  .justify-content-xl-between {\n    justify-content: space-between !important; }\n  .justify-content-xl-around {\n    justify-content: space-around !important; }\n  .align-items-xl-start {\n    align-items: flex-start !important; }\n  .align-items-xl-end {\n    align-items: flex-end !important; }\n  .align-items-xl-center {\n    align-items: center !important; }\n  .align-items-xl-baseline {\n    align-items: baseline !important; }\n  .align-items-xl-stretch {\n    align-items: stretch !important; }\n  .align-content-xl-start {\n    align-content: flex-start !important; }\n  .align-content-xl-end {\n    align-content: flex-end !important; }\n  .align-content-xl-center {\n    align-content: center !important; }\n  .align-content-xl-between {\n    align-content: space-between !important; }\n  .align-content-xl-around {\n    align-content: space-around !important; }\n  .align-content-xl-stretch {\n    align-content: stretch !important; }\n  .align-self-xl-auto {\n    align-self: auto !important; }\n  .align-self-xl-start {\n    align-self: flex-start !important; }\n  .align-self-xl-end {\n    align-self: flex-end !important; }\n  .align-self-xl-center {\n    align-self: center !important; }\n  .align-self-xl-baseline {\n    align-self: baseline !important; }\n  .align-self-xl-stretch {\n    align-self: stretch !important; } }\n\n.float-left {\n  float: left !important; }\n\n.float-right {\n  float: right !important; }\n\n.float-none {\n  float: none !important; }\n\n@media (min-width: 576px) {\n  .float-sm-left {\n    float: left !important; }\n  .float-sm-right {\n    float: right !important; }\n  .float-sm-none {\n    float: none !important; } }\n\n@media (min-width: 768px) {\n  .float-md-left {\n    float: left !important; }\n  .float-md-right {\n    float: right !important; }\n  .float-md-none {\n    float: none !important; } }\n\n@media (min-width: 992px) {\n  .float-lg-left {\n    float: left !important; }\n  .float-lg-right {\n    float: right !important; }\n  .float-lg-none {\n    float: none !important; } }\n\n@media (min-width: 1200px) {\n  .float-xl-left {\n    float: left !important; }\n  .float-xl-right {\n    float: right !important; }\n  .float-xl-none {\n    float: none !important; } }\n\n.overflow-auto {\n  overflow: auto !important; }\n\n.overflow-hidden {\n  overflow: hidden !important; }\n\n.position-static {\n  position: static !important; }\n\n.position-relative {\n  position: relative !important; }\n\n.position-absolute {\n  position: absolute !important; }\n\n.position-fixed {\n  position: fixed !important; }\n\n.position-sticky {\n  position: sticky !important; }\n\n.fixed-top {\n  position: fixed;\n  top: 0;\n  right: 0;\n  left: 0;\n  z-index: 1030; }\n\n.fixed-footer .footer {\n  position: fixed;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1030; }\n\n@supports (position: sticky) {\n  .sticky-top {\n    position: sticky;\n    top: 0;\n    z-index: 1020; } }\n\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  white-space: nowrap;\n  border: 0; }\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n  position: static;\n  width: auto;\n  height: auto;\n  overflow: visible;\n  clip: auto;\n  white-space: normal; }\n\n.shadow-sm {\n  box-shadow: 0 0.125rem 0.25rem rgba(34, 41, 47, 0.075) !important; }\n\n.shadow {\n  box-shadow: 0 0.5rem 1rem rgba(34, 41, 47, 0.15) !important; }\n\n.shadow-lg {\n  box-shadow: 0 1rem 3rem rgba(34, 41, 47, 0.175) !important; }\n\n.shadow-none {\n  box-shadow: none !important; }\n\n.w-25 {\n  width: 25% !important; }\n\n.w-50 {\n  width: 50% !important; }\n\n.w-75 {\n  width: 75% !important; }\n\n.w-100 {\n  width: 100% !important; }\n\n.w-auto {\n  width: auto !important; }\n\n.h-25 {\n  height: 25% !important; }\n\n.h-50 {\n  height: 50% !important; }\n\n.h-75 {\n  height: 75% !important; }\n\n.h-100 {\n  height: 100% !important; }\n\n.h-auto {\n  height: auto !important; }\n\n.mw-100 {\n  max-width: 100% !important; }\n\n.mh-100 {\n  max-height: 100% !important; }\n\n.min-vw-100 {\n  min-width: 100vw !important; }\n\n.min-vh-100 {\n  min-height: 100vh !important; }\n\n.vw-100 {\n  width: 100vw !important; }\n\n.vh-100 {\n  height: 100vh !important; }\n\n.stretched-link::after {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1;\n  pointer-events: auto;\n  content: \"\";\n  background-color: rgba(0, 0, 0, 0); }\n\n.m-0 {\n  margin: 0 !important; }\n\n.mt-0,\n.my-0 {\n  margin-top: 0 !important; }\n\n.mr-0,\n.mx-0 {\n  margin-right: 0 !important; }\n\n.mb-0,\n.my-0 {\n  margin-bottom: 0 !important; }\n\n.ml-0,\n.mx-0 {\n  margin-left: 0 !important; }\n\n.m-1 {\n  margin: 1rem !important; }\n\n.mt-1,\n.my-1 {\n  margin-top: 1rem !important; }\n\n.mr-1,\n.mx-1 {\n  margin-right: 1rem !important; }\n\n.mb-1,\n.my-1 {\n  margin-bottom: 1rem !important; }\n\n.ml-1,\n.mx-1 {\n  margin-left: 1rem !important; }\n\n.m-2 {\n  margin: 1.5rem !important; }\n\n.mt-2,\n.my-2 {\n  margin-top: 1.5rem !important; }\n\n.mr-2,\n.mx-2 {\n  margin-right: 1.5rem !important; }\n\n.mb-2,\n.my-2 {\n  margin-bottom: 1.5rem !important; }\n\n.ml-2,\n.mx-2 {\n  margin-left: 1.5rem !important; }\n\n.m-3 {\n  margin: 3rem !important; }\n\n.mt-3,\n.my-3 {\n  margin-top: 3rem !important; }\n\n.mr-3,\n.mx-3 {\n  margin-right: 3rem !important; }\n\n.mb-3,\n.my-3 {\n  margin-bottom: 3rem !important; }\n\n.ml-3,\n.mx-3 {\n  margin-left: 3rem !important; }\n\n.m-4 {\n  margin: 3.5rem !important; }\n\n.mt-4,\n.my-4 {\n  margin-top: 3.5rem !important; }\n\n.mr-4,\n.mx-4 {\n  margin-right: 3.5rem !important; }\n\n.mb-4,\n.my-4 {\n  margin-bottom: 3.5rem !important; }\n\n.ml-4,\n.mx-4 {\n  margin-left: 3.5rem !important; }\n\n.m-5 {\n  margin: 4rem !important; }\n\n.mt-5,\n.my-5 {\n  margin-top: 4rem !important; }\n\n.mr-5,\n.mx-5 {\n  margin-right: 4rem !important; }\n\n.mb-5,\n.my-5 {\n  margin-bottom: 4rem !important; }\n\n.ml-5,\n.mx-5 {\n  margin-left: 4rem !important; }\n\n.m-25 {\n  margin: 0.25rem !important; }\n\n.mt-25,\n.my-25 {\n  margin-top: 0.25rem !important; }\n\n.mr-25,\n.mx-25 {\n  margin-right: 0.25rem !important; }\n\n.mb-25,\n.my-25 {\n  margin-bottom: 0.25rem !important; }\n\n.ml-25,\n.mx-25 {\n  margin-left: 0.25rem !important; }\n\n.m-50 {\n  margin: 0.5rem !important; }\n\n.mt-50,\n.my-50 {\n  margin-top: 0.5rem !important; }\n\n.mr-50,\n.mx-50 {\n  margin-right: 0.5rem !important; }\n\n.mb-50,\n.my-50 {\n  margin-bottom: 0.5rem !important; }\n\n.ml-50,\n.mx-50 {\n  margin-left: 0.5rem !important; }\n\n.m-75 {\n  margin: 0.75rem !important; }\n\n.mt-75,\n.my-75 {\n  margin-top: 0.75rem !important; }\n\n.mr-75,\n.mx-75 {\n  margin-right: 0.75rem !important; }\n\n.mb-75,\n.my-75 {\n  margin-bottom: 0.75rem !important; }\n\n.ml-75,\n.mx-75 {\n  margin-left: 0.75rem !important; }\n\n.p-0 {\n  padding: 0 !important; }\n\n.pt-0,\n.py-0 {\n  padding-top: 0 !important; }\n\n.pr-0,\n.px-0 {\n  padding-right: 0 !important; }\n\n.pb-0,\n.py-0 {\n  padding-bottom: 0 !important; }\n\n.pl-0,\n.px-0 {\n  padding-left: 0 !important; }\n\n.p-1 {\n  padding: 1rem !important; }\n\n.pt-1,\n.py-1 {\n  padding-top: 1rem !important; }\n\n.pr-1,\n.px-1 {\n  padding-right: 1rem !important; }\n\n.pb-1,\n.py-1 {\n  padding-bottom: 1rem !important; }\n\n.pl-1,\n.px-1 {\n  padding-left: 1rem !important; }\n\n.p-2 {\n  padding: 1.5rem !important; }\n\n.pt-2,\n.py-2 {\n  padding-top: 1.5rem !important; }\n\n.pr-2,\n.px-2 {\n  padding-right: 1.5rem !important; }\n\n.pb-2,\n.py-2 {\n  padding-bottom: 1.5rem !important; }\n\n.pl-2,\n.px-2 {\n  padding-left: 1.5rem !important; }\n\n.p-3 {\n  padding: 3rem !important; }\n\n.pt-3,\n.py-3 {\n  padding-top: 3rem !important; }\n\n.pr-3,\n.px-3 {\n  padding-right: 3rem !important; }\n\n.pb-3,\n.py-3 {\n  padding-bottom: 3rem !important; }\n\n.pl-3,\n.px-3 {\n  padding-left: 3rem !important; }\n\n.p-4 {\n  padding: 3.5rem !important; }\n\n.pt-4,\n.py-4 {\n  padding-top: 3.5rem !important; }\n\n.pr-4,\n.px-4 {\n  padding-right: 3.5rem !important; }\n\n.pb-4,\n.py-4 {\n  padding-bottom: 3.5rem !important; }\n\n.pl-4,\n.px-4 {\n  padding-left: 3.5rem !important; }\n\n.p-5 {\n  padding: 4rem !important; }\n\n.pt-5,\n.py-5 {\n  padding-top: 4rem !important; }\n\n.pr-5,\n.px-5 {\n  padding-right: 4rem !important; }\n\n.pb-5,\n.py-5 {\n  padding-bottom: 4rem !important; }\n\n.pl-5,\n.px-5 {\n  padding-left: 4rem !important; }\n\n.p-25 {\n  padding: 0.25rem !important; }\n\n.pt-25,\n.py-25 {\n  padding-top: 0.25rem !important; }\n\n.pr-25,\n.px-25 {\n  padding-right: 0.25rem !important; }\n\n.pb-25,\n.py-25 {\n  padding-bottom: 0.25rem !important; }\n\n.pl-25,\n.px-25 {\n  padding-left: 0.25rem !important; }\n\n.p-50 {\n  padding: 0.5rem !important; }\n\n.pt-50,\n.py-50 {\n  padding-top: 0.5rem !important; }\n\n.pr-50,\n.px-50 {\n  padding-right: 0.5rem !important; }\n\n.pb-50,\n.py-50 {\n  padding-bottom: 0.5rem !important; }\n\n.pl-50,\n.px-50 {\n  padding-left: 0.5rem !important; }\n\n.p-75 {\n  padding: 0.75rem !important; }\n\n.pt-75,\n.py-75 {\n  padding-top: 0.75rem !important; }\n\n.pr-75,\n.px-75 {\n  padding-right: 0.75rem !important; }\n\n.pb-75,\n.py-75 {\n  padding-bottom: 0.75rem !important; }\n\n.pl-75,\n.px-75 {\n  padding-left: 0.75rem !important; }\n\n.m-n1 {\n  margin: -1rem !important; }\n\n.mt-n1,\n.my-n1 {\n  margin-top: -1rem !important; }\n\n.mr-n1,\n.mx-n1 {\n  margin-right: -1rem !important; }\n\n.mb-n1,\n.my-n1 {\n  margin-bottom: -1rem !important; }\n\n.ml-n1,\n.mx-n1 {\n  margin-left: -1rem !important; }\n\n.m-n2 {\n  margin: -1.5rem !important; }\n\n.mt-n2,\n.my-n2 {\n  margin-top: -1.5rem !important; }\n\n.mr-n2,\n.mx-n2 {\n  margin-right: -1.5rem !important; }\n\n.mb-n2,\n.my-n2 {\n  margin-bottom: -1.5rem !important; }\n\n.ml-n2,\n.mx-n2 {\n  margin-left: -1.5rem !important; }\n\n.m-n3 {\n  margin: -3rem !important; }\n\n.mt-n3,\n.my-n3 {\n  margin-top: -3rem !important; }\n\n.mr-n3,\n.mx-n3 {\n  margin-right: -3rem !important; }\n\n.mb-n3,\n.my-n3 {\n  margin-bottom: -3rem !important; }\n\n.ml-n3,\n.mx-n3 {\n  margin-left: -3rem !important; }\n\n.m-n4 {\n  margin: -3.5rem !important; }\n\n.mt-n4,\n.my-n4 {\n  margin-top: -3.5rem !important; }\n\n.mr-n4,\n.mx-n4 {\n  margin-right: -3.5rem !important; }\n\n.mb-n4,\n.my-n4 {\n  margin-bottom: -3.5rem !important; }\n\n.ml-n4,\n.mx-n4 {\n  margin-left: -3.5rem !important; }\n\n.m-n5 {\n  margin: -4rem !important; }\n\n.mt-n5,\n.my-n5 {\n  margin-top: -4rem !important; }\n\n.mr-n5,\n.mx-n5 {\n  margin-right: -4rem !important; }\n\n.mb-n5,\n.my-n5 {\n  margin-bottom: -4rem !important; }\n\n.ml-n5,\n.mx-n5 {\n  margin-left: -4rem !important; }\n\n.m-n25 {\n  margin: -0.25rem !important; }\n\n.mt-n25,\n.my-n25 {\n  margin-top: -0.25rem !important; }\n\n.mr-n25,\n.mx-n25 {\n  margin-right: -0.25rem !important; }\n\n.mb-n25,\n.my-n25 {\n  margin-bottom: -0.25rem !important; }\n\n.ml-n25,\n.mx-n25 {\n  margin-left: -0.25rem !important; }\n\n.m-n50 {\n  margin: -0.5rem !important; }\n\n.mt-n50,\n.my-n50 {\n  margin-top: -0.5rem !important; }\n\n.mr-n50,\n.mx-n50 {\n  margin-right: -0.5rem !important; }\n\n.mb-n50,\n.my-n50 {\n  margin-bottom: -0.5rem !important; }\n\n.ml-n50,\n.mx-n50 {\n  margin-left: -0.5rem !important; }\n\n.m-n75 {\n  margin: -0.75rem !important; }\n\n.mt-n75,\n.my-n75 {\n  margin-top: -0.75rem !important; }\n\n.mr-n75,\n.mx-n75 {\n  margin-right: -0.75rem !important; }\n\n.mb-n75,\n.my-n75 {\n  margin-bottom: -0.75rem !important; }\n\n.ml-n75,\n.mx-n75 {\n  margin-left: -0.75rem !important; }\n\n.m-auto {\n  margin: auto !important; }\n\n.mt-auto,\n.my-auto {\n  margin-top: auto !important; }\n\n.mr-auto,\n.mx-auto {\n  margin-right: auto !important; }\n\n.mb-auto,\n.my-auto {\n  margin-bottom: auto !important; }\n\n.ml-auto,\n.mx-auto {\n  margin-left: auto !important; }\n\n@media (min-width: 576px) {\n  .m-sm-0 {\n    margin: 0 !important; }\n  .mt-sm-0,\n  .my-sm-0 {\n    margin-top: 0 !important; }\n  .mr-sm-0,\n  .mx-sm-0 {\n    margin-right: 0 !important; }\n  .mb-sm-0,\n  .my-sm-0 {\n    margin-bottom: 0 !important; }\n  .ml-sm-0,\n  .mx-sm-0 {\n    margin-left: 0 !important; }\n  .m-sm-1 {\n    margin: 1rem !important; }\n  .mt-sm-1,\n  .my-sm-1 {\n    margin-top: 1rem !important; }\n  .mr-sm-1,\n  .mx-sm-1 {\n    margin-right: 1rem !important; }\n  .mb-sm-1,\n  .my-sm-1 {\n    margin-bottom: 1rem !important; }\n  .ml-sm-1,\n  .mx-sm-1 {\n    margin-left: 1rem !important; }\n  .m-sm-2 {\n    margin: 1.5rem !important; }\n  .mt-sm-2,\n  .my-sm-2 {\n    margin-top: 1.5rem !important; }\n  .mr-sm-2,\n  .mx-sm-2 {\n    margin-right: 1.5rem !important; }\n  .mb-sm-2,\n  .my-sm-2 {\n    margin-bottom: 1.5rem !important; }\n  .ml-sm-2,\n  .mx-sm-2 {\n    margin-left: 1.5rem !important; }\n  .m-sm-3 {\n    margin: 3rem !important; }\n  .mt-sm-3,\n  .my-sm-3 {\n    margin-top: 3rem !important; }\n  .mr-sm-3,\n  .mx-sm-3 {\n    margin-right: 3rem !important; }\n  .mb-sm-3,\n  .my-sm-3 {\n    margin-bottom: 3rem !important; }\n  .ml-sm-3,\n  .mx-sm-3 {\n    margin-left: 3rem !important; }\n  .m-sm-4 {\n    margin: 3.5rem !important; }\n  .mt-sm-4,\n  .my-sm-4 {\n    margin-top: 3.5rem !important; }\n  .mr-sm-4,\n  .mx-sm-4 {\n    margin-right: 3.5rem !important; }\n  .mb-sm-4,\n  .my-sm-4 {\n    margin-bottom: 3.5rem !important; }\n  .ml-sm-4,\n  .mx-sm-4 {\n    margin-left: 3.5rem !important; }\n  .m-sm-5 {\n    margin: 4rem !important; }\n  .mt-sm-5,\n  .my-sm-5 {\n    margin-top: 4rem !important; }\n  .mr-sm-5,\n  .mx-sm-5 {\n    margin-right: 4rem !important; }\n  .mb-sm-5,\n  .my-sm-5 {\n    margin-bottom: 4rem !important; }\n  .ml-sm-5,\n  .mx-sm-5 {\n    margin-left: 4rem !important; }\n  .m-sm-25 {\n    margin: 0.25rem !important; }\n  .mt-sm-25,\n  .my-sm-25 {\n    margin-top: 0.25rem !important; }\n  .mr-sm-25,\n  .mx-sm-25 {\n    margin-right: 0.25rem !important; }\n  .mb-sm-25,\n  .my-sm-25 {\n    margin-bottom: 0.25rem !important; }\n  .ml-sm-25,\n  .mx-sm-25 {\n    margin-left: 0.25rem !important; }\n  .m-sm-50 {\n    margin: 0.5rem !important; }\n  .mt-sm-50,\n  .my-sm-50 {\n    margin-top: 0.5rem !important; }\n  .mr-sm-50,\n  .mx-sm-50 {\n    margin-right: 0.5rem !important; }\n  .mb-sm-50,\n  .my-sm-50 {\n    margin-bottom: 0.5rem !important; }\n  .ml-sm-50,\n  .mx-sm-50 {\n    margin-left: 0.5rem !important; }\n  .m-sm-75 {\n    margin: 0.75rem !important; }\n  .mt-sm-75,\n  .my-sm-75 {\n    margin-top: 0.75rem !important; }\n  .mr-sm-75,\n  .mx-sm-75 {\n    margin-right: 0.75rem !important; }\n  .mb-sm-75,\n  .my-sm-75 {\n    margin-bottom: 0.75rem !important; }\n  .ml-sm-75,\n  .mx-sm-75 {\n    margin-left: 0.75rem !important; }\n  .p-sm-0 {\n    padding: 0 !important; }\n  .pt-sm-0,\n  .py-sm-0 {\n    padding-top: 0 !important; }\n  .pr-sm-0,\n  .px-sm-0 {\n    padding-right: 0 !important; }\n  .pb-sm-0,\n  .py-sm-0 {\n    padding-bottom: 0 !important; }\n  .pl-sm-0,\n  .px-sm-0 {\n    padding-left: 0 !important; }\n  .p-sm-1 {\n    padding: 1rem !important; }\n  .pt-sm-1,\n  .py-sm-1 {\n    padding-top: 1rem !important; }\n  .pr-sm-1,\n  .px-sm-1 {\n    padding-right: 1rem !important; }\n  .pb-sm-1,\n  .py-sm-1 {\n    padding-bottom: 1rem !important; }\n  .pl-sm-1,\n  .px-sm-1 {\n    padding-left: 1rem !important; }\n  .p-sm-2 {\n    padding: 1.5rem !important; }\n  .pt-sm-2,\n  .py-sm-2 {\n    padding-top: 1.5rem !important; }\n  .pr-sm-2,\n  .px-sm-2 {\n    padding-right: 1.5rem !important; }\n  .pb-sm-2,\n  .py-sm-2 {\n    padding-bottom: 1.5rem !important; }\n  .pl-sm-2,\n  .px-sm-2 {\n    padding-left: 1.5rem !important; }\n  .p-sm-3 {\n    padding: 3rem !important; }\n  .pt-sm-3,\n  .py-sm-3 {\n    padding-top: 3rem !important; }\n  .pr-sm-3,\n  .px-sm-3 {\n    padding-right: 3rem !important; }\n  .pb-sm-3,\n  .py-sm-3 {\n    padding-bottom: 3rem !important; }\n  .pl-sm-3,\n  .px-sm-3 {\n    padding-left: 3rem !important; }\n  .p-sm-4 {\n    padding: 3.5rem !important; }\n  .pt-sm-4,\n  .py-sm-4 {\n    padding-top: 3.5rem !important; }\n  .pr-sm-4,\n  .px-sm-4 {\n    padding-right: 3.5rem !important; }\n  .pb-sm-4,\n  .py-sm-4 {\n    padding-bottom: 3.5rem !important; }\n  .pl-sm-4,\n  .px-sm-4 {\n    padding-left: 3.5rem !important; }\n  .p-sm-5 {\n    padding: 4rem !important; }\n  .pt-sm-5,\n  .py-sm-5 {\n    padding-top: 4rem !important; }\n  .pr-sm-5,\n  .px-sm-5 {\n    padding-right: 4rem !important; }\n  .pb-sm-5,\n  .py-sm-5 {\n    padding-bottom: 4rem !important; }\n  .pl-sm-5,\n  .px-sm-5 {\n    padding-left: 4rem !important; }\n  .p-sm-25 {\n    padding: 0.25rem !important; }\n  .pt-sm-25,\n  .py-sm-25 {\n    padding-top: 0.25rem !important; }\n  .pr-sm-25,\n  .px-sm-25 {\n    padding-right: 0.25rem !important; }\n  .pb-sm-25,\n  .py-sm-25 {\n    padding-bottom: 0.25rem !important; }\n  .pl-sm-25,\n  .px-sm-25 {\n    padding-left: 0.25rem !important; }\n  .p-sm-50 {\n    padding: 0.5rem !important; }\n  .pt-sm-50,\n  .py-sm-50 {\n    padding-top: 0.5rem !important; }\n  .pr-sm-50,\n  .px-sm-50 {\n    padding-right: 0.5rem !important; }\n  .pb-sm-50,\n  .py-sm-50 {\n    padding-bottom: 0.5rem !important; }\n  .pl-sm-50,\n  .px-sm-50 {\n    padding-left: 0.5rem !important; }\n  .p-sm-75 {\n    padding: 0.75rem !important; }\n  .pt-sm-75,\n  .py-sm-75 {\n    padding-top: 0.75rem !important; }\n  .pr-sm-75,\n  .px-sm-75 {\n    padding-right: 0.75rem !important; }\n  .pb-sm-75,\n  .py-sm-75 {\n    padding-bottom: 0.75rem !important; }\n  .pl-sm-75,\n  .px-sm-75 {\n    padding-left: 0.75rem !important; }\n  .m-sm-n1 {\n    margin: -1rem !important; }\n  .mt-sm-n1,\n  .my-sm-n1 {\n    margin-top: -1rem !important; }\n  .mr-sm-n1,\n  .mx-sm-n1 {\n    margin-right: -1rem !important; }\n  .mb-sm-n1,\n  .my-sm-n1 {\n    margin-bottom: -1rem !important; }\n  .ml-sm-n1,\n  .mx-sm-n1 {\n    margin-left: -1rem !important; }\n  .m-sm-n2 {\n    margin: -1.5rem !important; }\n  .mt-sm-n2,\n  .my-sm-n2 {\n    margin-top: -1.5rem !important; }\n  .mr-sm-n2,\n  .mx-sm-n2 {\n    margin-right: -1.5rem !important; }\n  .mb-sm-n2,\n  .my-sm-n2 {\n    margin-bottom: -1.5rem !important; }\n  .ml-sm-n2,\n  .mx-sm-n2 {\n    margin-left: -1.5rem !important; }\n  .m-sm-n3 {\n    margin: -3rem !important; }\n  .mt-sm-n3,\n  .my-sm-n3 {\n    margin-top: -3rem !important; }\n  .mr-sm-n3,\n  .mx-sm-n3 {\n    margin-right: -3rem !important; }\n  .mb-sm-n3,\n  .my-sm-n3 {\n    margin-bottom: -3rem !important; }\n  .ml-sm-n3,\n  .mx-sm-n3 {\n    margin-left: -3rem !important; }\n  .m-sm-n4 {\n    margin: -3.5rem !important; }\n  .mt-sm-n4,\n  .my-sm-n4 {\n    margin-top: -3.5rem !important; }\n  .mr-sm-n4,\n  .mx-sm-n4 {\n    margin-right: -3.5rem !important; }\n  .mb-sm-n4,\n  .my-sm-n4 {\n    margin-bottom: -3.5rem !important; }\n  .ml-sm-n4,\n  .mx-sm-n4 {\n    margin-left: -3.5rem !important; }\n  .m-sm-n5 {\n    margin: -4rem !important; }\n  .mt-sm-n5,\n  .my-sm-n5 {\n    margin-top: -4rem !important; }\n  .mr-sm-n5,\n  .mx-sm-n5 {\n    margin-right: -4rem !important; }\n  .mb-sm-n5,\n  .my-sm-n5 {\n    margin-bottom: -4rem !important; }\n  .ml-sm-n5,\n  .mx-sm-n5 {\n    margin-left: -4rem !important; }\n  .m-sm-n25 {\n    margin: -0.25rem !important; }\n  .mt-sm-n25,\n  .my-sm-n25 {\n    margin-top: -0.25rem !important; }\n  .mr-sm-n25,\n  .mx-sm-n25 {\n    margin-right: -0.25rem !important; }\n  .mb-sm-n25,\n  .my-sm-n25 {\n    margin-bottom: -0.25rem !important; }\n  .ml-sm-n25,\n  .mx-sm-n25 {\n    margin-left: -0.25rem !important; }\n  .m-sm-n50 {\n    margin: -0.5rem !important; }\n  .mt-sm-n50,\n  .my-sm-n50 {\n    margin-top: -0.5rem !important; }\n  .mr-sm-n50,\n  .mx-sm-n50 {\n    margin-right: -0.5rem !important; }\n  .mb-sm-n50,\n  .my-sm-n50 {\n    margin-bottom: -0.5rem !important; }\n  .ml-sm-n50,\n  .mx-sm-n50 {\n    margin-left: -0.5rem !important; }\n  .m-sm-n75 {\n    margin: -0.75rem !important; }\n  .mt-sm-n75,\n  .my-sm-n75 {\n    margin-top: -0.75rem !important; }\n  .mr-sm-n75,\n  .mx-sm-n75 {\n    margin-right: -0.75rem !important; }\n  .mb-sm-n75,\n  .my-sm-n75 {\n    margin-bottom: -0.75rem !important; }\n  .ml-sm-n75,\n  .mx-sm-n75 {\n    margin-left: -0.75rem !important; }\n  .m-sm-auto {\n    margin: auto !important; }\n  .mt-sm-auto,\n  .my-sm-auto {\n    margin-top: auto !important; }\n  .mr-sm-auto,\n  .mx-sm-auto {\n    margin-right: auto !important; }\n  .mb-sm-auto,\n  .my-sm-auto {\n    margin-bottom: auto !important; }\n  .ml-sm-auto,\n  .mx-sm-auto {\n    margin-left: auto !important; } }\n\n@media (min-width: 768px) {\n  .m-md-0 {\n    margin: 0 !important; }\n  .mt-md-0,\n  .my-md-0 {\n    margin-top: 0 !important; }\n  .mr-md-0,\n  .mx-md-0 {\n    margin-right: 0 !important; }\n  .mb-md-0,\n  .my-md-0 {\n    margin-bottom: 0 !important; }\n  .ml-md-0,\n  .mx-md-0 {\n    margin-left: 0 !important; }\n  .m-md-1 {\n    margin: 1rem !important; }\n  .mt-md-1,\n  .my-md-1 {\n    margin-top: 1rem !important; }\n  .mr-md-1,\n  .mx-md-1 {\n    margin-right: 1rem !important; }\n  .mb-md-1,\n  .my-md-1 {\n    margin-bottom: 1rem !important; }\n  .ml-md-1,\n  .mx-md-1 {\n    margin-left: 1rem !important; }\n  .m-md-2 {\n    margin: 1.5rem !important; }\n  .mt-md-2,\n  .my-md-2 {\n    margin-top: 1.5rem !important; }\n  .mr-md-2,\n  .mx-md-2 {\n    margin-right: 1.5rem !important; }\n  .mb-md-2,\n  .my-md-2 {\n    margin-bottom: 1.5rem !important; }\n  .ml-md-2,\n  .mx-md-2 {\n    margin-left: 1.5rem !important; }\n  .m-md-3 {\n    margin: 3rem !important; }\n  .mt-md-3,\n  .my-md-3 {\n    margin-top: 3rem !important; }\n  .mr-md-3,\n  .mx-md-3 {\n    margin-right: 3rem !important; }\n  .mb-md-3,\n  .my-md-3 {\n    margin-bottom: 3rem !important; }\n  .ml-md-3,\n  .mx-md-3 {\n    margin-left: 3rem !important; }\n  .m-md-4 {\n    margin: 3.5rem !important; }\n  .mt-md-4,\n  .my-md-4 {\n    margin-top: 3.5rem !important; }\n  .mr-md-4,\n  .mx-md-4 {\n    margin-right: 3.5rem !important; }\n  .mb-md-4,\n  .my-md-4 {\n    margin-bottom: 3.5rem !important; }\n  .ml-md-4,\n  .mx-md-4 {\n    margin-left: 3.5rem !important; }\n  .m-md-5 {\n    margin: 4rem !important; }\n  .mt-md-5,\n  .my-md-5 {\n    margin-top: 4rem !important; }\n  .mr-md-5,\n  .mx-md-5 {\n    margin-right: 4rem !important; }\n  .mb-md-5,\n  .my-md-5 {\n    margin-bottom: 4rem !important; }\n  .ml-md-5,\n  .mx-md-5 {\n    margin-left: 4rem !important; }\n  .m-md-25 {\n    margin: 0.25rem !important; }\n  .mt-md-25,\n  .my-md-25 {\n    margin-top: 0.25rem !important; }\n  .mr-md-25,\n  .mx-md-25 {\n    margin-right: 0.25rem !important; }\n  .mb-md-25,\n  .my-md-25 {\n    margin-bottom: 0.25rem !important; }\n  .ml-md-25,\n  .mx-md-25 {\n    margin-left: 0.25rem !important; }\n  .m-md-50 {\n    margin: 0.5rem !important; }\n  .mt-md-50,\n  .my-md-50 {\n    margin-top: 0.5rem !important; }\n  .mr-md-50,\n  .mx-md-50 {\n    margin-right: 0.5rem !important; }\n  .mb-md-50,\n  .my-md-50 {\n    margin-bottom: 0.5rem !important; }\n  .ml-md-50,\n  .mx-md-50 {\n    margin-left: 0.5rem !important; }\n  .m-md-75 {\n    margin: 0.75rem !important; }\n  .mt-md-75,\n  .my-md-75 {\n    margin-top: 0.75rem !important; }\n  .mr-md-75,\n  .mx-md-75 {\n    margin-right: 0.75rem !important; }\n  .mb-md-75,\n  .my-md-75 {\n    margin-bottom: 0.75rem !important; }\n  .ml-md-75,\n  .mx-md-75 {\n    margin-left: 0.75rem !important; }\n  .p-md-0 {\n    padding: 0 !important; }\n  .pt-md-0,\n  .py-md-0 {\n    padding-top: 0 !important; }\n  .pr-md-0,\n  .px-md-0 {\n    padding-right: 0 !important; }\n  .pb-md-0,\n  .py-md-0 {\n    padding-bottom: 0 !important; }\n  .pl-md-0,\n  .px-md-0 {\n    padding-left: 0 !important; }\n  .p-md-1 {\n    padding: 1rem !important; }\n  .pt-md-1,\n  .py-md-1 {\n    padding-top: 1rem !important; }\n  .pr-md-1,\n  .px-md-1 {\n    padding-right: 1rem !important; }\n  .pb-md-1,\n  .py-md-1 {\n    padding-bottom: 1rem !important; }\n  .pl-md-1,\n  .px-md-1 {\n    padding-left: 1rem !important; }\n  .p-md-2 {\n    padding: 1.5rem !important; }\n  .pt-md-2,\n  .py-md-2 {\n    padding-top: 1.5rem !important; }\n  .pr-md-2,\n  .px-md-2 {\n    padding-right: 1.5rem !important; }\n  .pb-md-2,\n  .py-md-2 {\n    padding-bottom: 1.5rem !important; }\n  .pl-md-2,\n  .px-md-2 {\n    padding-left: 1.5rem !important; }\n  .p-md-3 {\n    padding: 3rem !important; }\n  .pt-md-3,\n  .py-md-3 {\n    padding-top: 3rem !important; }\n  .pr-md-3,\n  .px-md-3 {\n    padding-right: 3rem !important; }\n  .pb-md-3,\n  .py-md-3 {\n    padding-bottom: 3rem !important; }\n  .pl-md-3,\n  .px-md-3 {\n    padding-left: 3rem !important; }\n  .p-md-4 {\n    padding: 3.5rem !important; }\n  .pt-md-4,\n  .py-md-4 {\n    padding-top: 3.5rem !important; }\n  .pr-md-4,\n  .px-md-4 {\n    padding-right: 3.5rem !important; }\n  .pb-md-4,\n  .py-md-4 {\n    padding-bottom: 3.5rem !important; }\n  .pl-md-4,\n  .px-md-4 {\n    padding-left: 3.5rem !important; }\n  .p-md-5 {\n    padding: 4rem !important; }\n  .pt-md-5,\n  .py-md-5 {\n    padding-top: 4rem !important; }\n  .pr-md-5,\n  .px-md-5 {\n    padding-right: 4rem !important; }\n  .pb-md-5,\n  .py-md-5 {\n    padding-bottom: 4rem !important; }\n  .pl-md-5,\n  .px-md-5 {\n    padding-left: 4rem !important; }\n  .p-md-25 {\n    padding: 0.25rem !important; }\n  .pt-md-25,\n  .py-md-25 {\n    padding-top: 0.25rem !important; }\n  .pr-md-25,\n  .px-md-25 {\n    padding-right: 0.25rem !important; }\n  .pb-md-25,\n  .py-md-25 {\n    padding-bottom: 0.25rem !important; }\n  .pl-md-25,\n  .px-md-25 {\n    padding-left: 0.25rem !important; }\n  .p-md-50 {\n    padding: 0.5rem !important; }\n  .pt-md-50,\n  .py-md-50 {\n    padding-top: 0.5rem !important; }\n  .pr-md-50,\n  .px-md-50 {\n    padding-right: 0.5rem !important; }\n  .pb-md-50,\n  .py-md-50 {\n    padding-bottom: 0.5rem !important; }\n  .pl-md-50,\n  .px-md-50 {\n    padding-left: 0.5rem !important; }\n  .p-md-75 {\n    padding: 0.75rem !important; }\n  .pt-md-75,\n  .py-md-75 {\n    padding-top: 0.75rem !important; }\n  .pr-md-75,\n  .px-md-75 {\n    padding-right: 0.75rem !important; }\n  .pb-md-75,\n  .py-md-75 {\n    padding-bottom: 0.75rem !important; }\n  .pl-md-75,\n  .px-md-75 {\n    padding-left: 0.75rem !important; }\n  .m-md-n1 {\n    margin: -1rem !important; }\n  .mt-md-n1,\n  .my-md-n1 {\n    margin-top: -1rem !important; }\n  .mr-md-n1,\n  .mx-md-n1 {\n    margin-right: -1rem !important; }\n  .mb-md-n1,\n  .my-md-n1 {\n    margin-bottom: -1rem !important; }\n  .ml-md-n1,\n  .mx-md-n1 {\n    margin-left: -1rem !important; }\n  .m-md-n2 {\n    margin: -1.5rem !important; }\n  .mt-md-n2,\n  .my-md-n2 {\n    margin-top: -1.5rem !important; }\n  .mr-md-n2,\n  .mx-md-n2 {\n    margin-right: -1.5rem !important; }\n  .mb-md-n2,\n  .my-md-n2 {\n    margin-bottom: -1.5rem !important; }\n  .ml-md-n2,\n  .mx-md-n2 {\n    margin-left: -1.5rem !important; }\n  .m-md-n3 {\n    margin: -3rem !important; }\n  .mt-md-n3,\n  .my-md-n3 {\n    margin-top: -3rem !important; }\n  .mr-md-n3,\n  .mx-md-n3 {\n    margin-right: -3rem !important; }\n  .mb-md-n3,\n  .my-md-n3 {\n    margin-bottom: -3rem !important; }\n  .ml-md-n3,\n  .mx-md-n3 {\n    margin-left: -3rem !important; }\n  .m-md-n4 {\n    margin: -3.5rem !important; }\n  .mt-md-n4,\n  .my-md-n4 {\n    margin-top: -3.5rem !important; }\n  .mr-md-n4,\n  .mx-md-n4 {\n    margin-right: -3.5rem !important; }\n  .mb-md-n4,\n  .my-md-n4 {\n    margin-bottom: -3.5rem !important; }\n  .ml-md-n4,\n  .mx-md-n4 {\n    margin-left: -3.5rem !important; }\n  .m-md-n5 {\n    margin: -4rem !important; }\n  .mt-md-n5,\n  .my-md-n5 {\n    margin-top: -4rem !important; }\n  .mr-md-n5,\n  .mx-md-n5 {\n    margin-right: -4rem !important; }\n  .mb-md-n5,\n  .my-md-n5 {\n    margin-bottom: -4rem !important; }\n  .ml-md-n5,\n  .mx-md-n5 {\n    margin-left: -4rem !important; }\n  .m-md-n25 {\n    margin: -0.25rem !important; }\n  .mt-md-n25,\n  .my-md-n25 {\n    margin-top: -0.25rem !important; }\n  .mr-md-n25,\n  .mx-md-n25 {\n    margin-right: -0.25rem !important; }\n  .mb-md-n25,\n  .my-md-n25 {\n    margin-bottom: -0.25rem !important; }\n  .ml-md-n25,\n  .mx-md-n25 {\n    margin-left: -0.25rem !important; }\n  .m-md-n50 {\n    margin: -0.5rem !important; }\n  .mt-md-n50,\n  .my-md-n50 {\n    margin-top: -0.5rem !important; }\n  .mr-md-n50,\n  .mx-md-n50 {\n    margin-right: -0.5rem !important; }\n  .mb-md-n50,\n  .my-md-n50 {\n    margin-bottom: -0.5rem !important; }\n  .ml-md-n50,\n  .mx-md-n50 {\n    margin-left: -0.5rem !important; }\n  .m-md-n75 {\n    margin: -0.75rem !important; }\n  .mt-md-n75,\n  .my-md-n75 {\n    margin-top: -0.75rem !important; }\n  .mr-md-n75,\n  .mx-md-n75 {\n    margin-right: -0.75rem !important; }\n  .mb-md-n75,\n  .my-md-n75 {\n    margin-bottom: -0.75rem !important; }\n  .ml-md-n75,\n  .mx-md-n75 {\n    margin-left: -0.75rem !important; }\n  .m-md-auto {\n    margin: auto !important; }\n  .mt-md-auto,\n  .my-md-auto {\n    margin-top: auto !important; }\n  .mr-md-auto,\n  .mx-md-auto {\n    margin-right: auto !important; }\n  .mb-md-auto,\n  .my-md-auto {\n    margin-bottom: auto !important; }\n  .ml-md-auto,\n  .mx-md-auto {\n    margin-left: auto !important; } }\n\n@media (min-width: 992px) {\n  .m-lg-0 {\n    margin: 0 !important; }\n  .mt-lg-0,\n  .my-lg-0 {\n    margin-top: 0 !important; }\n  .mr-lg-0,\n  .mx-lg-0 {\n    margin-right: 0 !important; }\n  .mb-lg-0,\n  .my-lg-0 {\n    margin-bottom: 0 !important; }\n  .ml-lg-0,\n  .mx-lg-0 {\n    margin-left: 0 !important; }\n  .m-lg-1 {\n    margin: 1rem !important; }\n  .mt-lg-1,\n  .my-lg-1 {\n    margin-top: 1rem !important; }\n  .mr-lg-1,\n  .mx-lg-1 {\n    margin-right: 1rem !important; }\n  .mb-lg-1,\n  .my-lg-1 {\n    margin-bottom: 1rem !important; }\n  .ml-lg-1,\n  .mx-lg-1 {\n    margin-left: 1rem !important; }\n  .m-lg-2 {\n    margin: 1.5rem !important; }\n  .mt-lg-2,\n  .my-lg-2 {\n    margin-top: 1.5rem !important; }\n  .mr-lg-2,\n  .mx-lg-2 {\n    margin-right: 1.5rem !important; }\n  .mb-lg-2,\n  .my-lg-2 {\n    margin-bottom: 1.5rem !important; }\n  .ml-lg-2,\n  .mx-lg-2 {\n    margin-left: 1.5rem !important; }\n  .m-lg-3 {\n    margin: 3rem !important; }\n  .mt-lg-3,\n  .my-lg-3 {\n    margin-top: 3rem !important; }\n  .mr-lg-3,\n  .mx-lg-3 {\n    margin-right: 3rem !important; }\n  .mb-lg-3,\n  .my-lg-3 {\n    margin-bottom: 3rem !important; }\n  .ml-lg-3,\n  .mx-lg-3 {\n    margin-left: 3rem !important; }\n  .m-lg-4 {\n    margin: 3.5rem !important; }\n  .mt-lg-4,\n  .my-lg-4 {\n    margin-top: 3.5rem !important; }\n  .mr-lg-4,\n  .mx-lg-4 {\n    margin-right: 3.5rem !important; }\n  .mb-lg-4,\n  .my-lg-4 {\n    margin-bottom: 3.5rem !important; }\n  .ml-lg-4,\n  .mx-lg-4 {\n    margin-left: 3.5rem !important; }\n  .m-lg-5 {\n    margin: 4rem !important; }\n  .mt-lg-5,\n  .my-lg-5 {\n    margin-top: 4rem !important; }\n  .mr-lg-5,\n  .mx-lg-5 {\n    margin-right: 4rem !important; }\n  .mb-lg-5,\n  .my-lg-5 {\n    margin-bottom: 4rem !important; }\n  .ml-lg-5,\n  .mx-lg-5 {\n    margin-left: 4rem !important; }\n  .m-lg-25 {\n    margin: 0.25rem !important; }\n  .mt-lg-25,\n  .my-lg-25 {\n    margin-top: 0.25rem !important; }\n  .mr-lg-25,\n  .mx-lg-25 {\n    margin-right: 0.25rem !important; }\n  .mb-lg-25,\n  .my-lg-25 {\n    margin-bottom: 0.25rem !important; }\n  .ml-lg-25,\n  .mx-lg-25 {\n    margin-left: 0.25rem !important; }\n  .m-lg-50 {\n    margin: 0.5rem !important; }\n  .mt-lg-50,\n  .my-lg-50 {\n    margin-top: 0.5rem !important; }\n  .mr-lg-50,\n  .mx-lg-50 {\n    margin-right: 0.5rem !important; }\n  .mb-lg-50,\n  .my-lg-50 {\n    margin-bottom: 0.5rem !important; }\n  .ml-lg-50,\n  .mx-lg-50 {\n    margin-left: 0.5rem !important; }\n  .m-lg-75 {\n    margin: 0.75rem !important; }\n  .mt-lg-75,\n  .my-lg-75 {\n    margin-top: 0.75rem !important; }\n  .mr-lg-75,\n  .mx-lg-75 {\n    margin-right: 0.75rem !important; }\n  .mb-lg-75,\n  .my-lg-75 {\n    margin-bottom: 0.75rem !important; }\n  .ml-lg-75,\n  .mx-lg-75 {\n    margin-left: 0.75rem !important; }\n  .p-lg-0 {\n    padding: 0 !important; }\n  .pt-lg-0,\n  .py-lg-0 {\n    padding-top: 0 !important; }\n  .pr-lg-0,\n  .px-lg-0 {\n    padding-right: 0 !important; }\n  .pb-lg-0,\n  .py-lg-0 {\n    padding-bottom: 0 !important; }\n  .pl-lg-0,\n  .px-lg-0 {\n    padding-left: 0 !important; }\n  .p-lg-1 {\n    padding: 1rem !important; }\n  .pt-lg-1,\n  .py-lg-1 {\n    padding-top: 1rem !important; }\n  .pr-lg-1,\n  .px-lg-1 {\n    padding-right: 1rem !important; }\n  .pb-lg-1,\n  .py-lg-1 {\n    padding-bottom: 1rem !important; }\n  .pl-lg-1,\n  .px-lg-1 {\n    padding-left: 1rem !important; }\n  .p-lg-2 {\n    padding: 1.5rem !important; }\n  .pt-lg-2,\n  .py-lg-2 {\n    padding-top: 1.5rem !important; }\n  .pr-lg-2,\n  .px-lg-2 {\n    padding-right: 1.5rem !important; }\n  .pb-lg-2,\n  .py-lg-2 {\n    padding-bottom: 1.5rem !important; }\n  .pl-lg-2,\n  .px-lg-2 {\n    padding-left: 1.5rem !important; }\n  .p-lg-3 {\n    padding: 3rem !important; }\n  .pt-lg-3,\n  .py-lg-3 {\n    padding-top: 3rem !important; }\n  .pr-lg-3,\n  .px-lg-3 {\n    padding-right: 3rem !important; }\n  .pb-lg-3,\n  .py-lg-3 {\n    padding-bottom: 3rem !important; }\n  .pl-lg-3,\n  .px-lg-3 {\n    padding-left: 3rem !important; }\n  .p-lg-4 {\n    padding: 3.5rem !important; }\n  .pt-lg-4,\n  .py-lg-4 {\n    padding-top: 3.5rem !important; }\n  .pr-lg-4,\n  .px-lg-4 {\n    padding-right: 3.5rem !important; }\n  .pb-lg-4,\n  .py-lg-4 {\n    padding-bottom: 3.5rem !important; }\n  .pl-lg-4,\n  .px-lg-4 {\n    padding-left: 3.5rem !important; }\n  .p-lg-5 {\n    padding: 4rem !important; }\n  .pt-lg-5,\n  .py-lg-5 {\n    padding-top: 4rem !important; }\n  .pr-lg-5,\n  .px-lg-5 {\n    padding-right: 4rem !important; }\n  .pb-lg-5,\n  .py-lg-5 {\n    padding-bottom: 4rem !important; }\n  .pl-lg-5,\n  .px-lg-5 {\n    padding-left: 4rem !important; }\n  .p-lg-25 {\n    padding: 0.25rem !important; }\n  .pt-lg-25,\n  .py-lg-25 {\n    padding-top: 0.25rem !important; }\n  .pr-lg-25,\n  .px-lg-25 {\n    padding-right: 0.25rem !important; }\n  .pb-lg-25,\n  .py-lg-25 {\n    padding-bottom: 0.25rem !important; }\n  .pl-lg-25,\n  .px-lg-25 {\n    padding-left: 0.25rem !important; }\n  .p-lg-50 {\n    padding: 0.5rem !important; }\n  .pt-lg-50,\n  .py-lg-50 {\n    padding-top: 0.5rem !important; }\n  .pr-lg-50,\n  .px-lg-50 {\n    padding-right: 0.5rem !important; }\n  .pb-lg-50,\n  .py-lg-50 {\n    padding-bottom: 0.5rem !important; }\n  .pl-lg-50,\n  .px-lg-50 {\n    padding-left: 0.5rem !important; }\n  .p-lg-75 {\n    padding: 0.75rem !important; }\n  .pt-lg-75,\n  .py-lg-75 {\n    padding-top: 0.75rem !important; }\n  .pr-lg-75,\n  .px-lg-75 {\n    padding-right: 0.75rem !important; }\n  .pb-lg-75,\n  .py-lg-75 {\n    padding-bottom: 0.75rem !important; }\n  .pl-lg-75,\n  .px-lg-75 {\n    padding-left: 0.75rem !important; }\n  .m-lg-n1 {\n    margin: -1rem !important; }\n  .mt-lg-n1,\n  .my-lg-n1 {\n    margin-top: -1rem !important; }\n  .mr-lg-n1,\n  .mx-lg-n1 {\n    margin-right: -1rem !important; }\n  .mb-lg-n1,\n  .my-lg-n1 {\n    margin-bottom: -1rem !important; }\n  .ml-lg-n1,\n  .mx-lg-n1 {\n    margin-left: -1rem !important; }\n  .m-lg-n2 {\n    margin: -1.5rem !important; }\n  .mt-lg-n2,\n  .my-lg-n2 {\n    margin-top: -1.5rem !important; }\n  .mr-lg-n2,\n  .mx-lg-n2 {\n    margin-right: -1.5rem !important; }\n  .mb-lg-n2,\n  .my-lg-n2 {\n    margin-bottom: -1.5rem !important; }\n  .ml-lg-n2,\n  .mx-lg-n2 {\n    margin-left: -1.5rem !important; }\n  .m-lg-n3 {\n    margin: -3rem !important; }\n  .mt-lg-n3,\n  .my-lg-n3 {\n    margin-top: -3rem !important; }\n  .mr-lg-n3,\n  .mx-lg-n3 {\n    margin-right: -3rem !important; }\n  .mb-lg-n3,\n  .my-lg-n3 {\n    margin-bottom: -3rem !important; }\n  .ml-lg-n3,\n  .mx-lg-n3 {\n    margin-left: -3rem !important; }\n  .m-lg-n4 {\n    margin: -3.5rem !important; }\n  .mt-lg-n4,\n  .my-lg-n4 {\n    margin-top: -3.5rem !important; }\n  .mr-lg-n4,\n  .mx-lg-n4 {\n    margin-right: -3.5rem !important; }\n  .mb-lg-n4,\n  .my-lg-n4 {\n    margin-bottom: -3.5rem !important; }\n  .ml-lg-n4,\n  .mx-lg-n4 {\n    margin-left: -3.5rem !important; }\n  .m-lg-n5 {\n    margin: -4rem !important; }\n  .mt-lg-n5,\n  .my-lg-n5 {\n    margin-top: -4rem !important; }\n  .mr-lg-n5,\n  .mx-lg-n5 {\n    margin-right: -4rem !important; }\n  .mb-lg-n5,\n  .my-lg-n5 {\n    margin-bottom: -4rem !important; }\n  .ml-lg-n5,\n  .mx-lg-n5 {\n    margin-left: -4rem !important; }\n  .m-lg-n25 {\n    margin: -0.25rem !important; }\n  .mt-lg-n25,\n  .my-lg-n25 {\n    margin-top: -0.25rem !important; }\n  .mr-lg-n25,\n  .mx-lg-n25 {\n    margin-right: -0.25rem !important; }\n  .mb-lg-n25,\n  .my-lg-n25 {\n    margin-bottom: -0.25rem !important; }\n  .ml-lg-n25,\n  .mx-lg-n25 {\n    margin-left: -0.25rem !important; }\n  .m-lg-n50 {\n    margin: -0.5rem !important; }\n  .mt-lg-n50,\n  .my-lg-n50 {\n    margin-top: -0.5rem !important; }\n  .mr-lg-n50,\n  .mx-lg-n50 {\n    margin-right: -0.5rem !important; }\n  .mb-lg-n50,\n  .my-lg-n50 {\n    margin-bottom: -0.5rem !important; }\n  .ml-lg-n50,\n  .mx-lg-n50 {\n    margin-left: -0.5rem !important; }\n  .m-lg-n75 {\n    margin: -0.75rem !important; }\n  .mt-lg-n75,\n  .my-lg-n75 {\n    margin-top: -0.75rem !important; }\n  .mr-lg-n75,\n  .mx-lg-n75 {\n    margin-right: -0.75rem !important; }\n  .mb-lg-n75,\n  .my-lg-n75 {\n    margin-bottom: -0.75rem !important; }\n  .ml-lg-n75,\n  .mx-lg-n75 {\n    margin-left: -0.75rem !important; }\n  .m-lg-auto {\n    margin: auto !important; }\n  .mt-lg-auto,\n  .my-lg-auto {\n    margin-top: auto !important; }\n  .mr-lg-auto,\n  .mx-lg-auto {\n    margin-right: auto !important; }\n  .mb-lg-auto,\n  .my-lg-auto {\n    margin-bottom: auto !important; }\n  .ml-lg-auto,\n  .mx-lg-auto {\n    margin-left: auto !important; } }\n\n@media (min-width: 1200px) {\n  .m-xl-0 {\n    margin: 0 !important; }\n  .mt-xl-0,\n  .my-xl-0 {\n    margin-top: 0 !important; }\n  .mr-xl-0,\n  .mx-xl-0 {\n    margin-right: 0 !important; }\n  .mb-xl-0,\n  .my-xl-0 {\n    margin-bottom: 0 !important; }\n  .ml-xl-0,\n  .mx-xl-0 {\n    margin-left: 0 !important; }\n  .m-xl-1 {\n    margin: 1rem !important; }\n  .mt-xl-1,\n  .my-xl-1 {\n    margin-top: 1rem !important; }\n  .mr-xl-1,\n  .mx-xl-1 {\n    margin-right: 1rem !important; }\n  .mb-xl-1,\n  .my-xl-1 {\n    margin-bottom: 1rem !important; }\n  .ml-xl-1,\n  .mx-xl-1 {\n    margin-left: 1rem !important; }\n  .m-xl-2 {\n    margin: 1.5rem !important; }\n  .mt-xl-2,\n  .my-xl-2 {\n    margin-top: 1.5rem !important; }\n  .mr-xl-2,\n  .mx-xl-2 {\n    margin-right: 1.5rem !important; }\n  .mb-xl-2,\n  .my-xl-2 {\n    margin-bottom: 1.5rem !important; }\n  .ml-xl-2,\n  .mx-xl-2 {\n    margin-left: 1.5rem !important; }\n  .m-xl-3 {\n    margin: 3rem !important; }\n  .mt-xl-3,\n  .my-xl-3 {\n    margin-top: 3rem !important; }\n  .mr-xl-3,\n  .mx-xl-3 {\n    margin-right: 3rem !important; }\n  .mb-xl-3,\n  .my-xl-3 {\n    margin-bottom: 3rem !important; }\n  .ml-xl-3,\n  .mx-xl-3 {\n    margin-left: 3rem !important; }\n  .m-xl-4 {\n    margin: 3.5rem !important; }\n  .mt-xl-4,\n  .my-xl-4 {\n    margin-top: 3.5rem !important; }\n  .mr-xl-4,\n  .mx-xl-4 {\n    margin-right: 3.5rem !important; }\n  .mb-xl-4,\n  .my-xl-4 {\n    margin-bottom: 3.5rem !important; }\n  .ml-xl-4,\n  .mx-xl-4 {\n    margin-left: 3.5rem !important; }\n  .m-xl-5 {\n    margin: 4rem !important; }\n  .mt-xl-5,\n  .my-xl-5 {\n    margin-top: 4rem !important; }\n  .mr-xl-5,\n  .mx-xl-5 {\n    margin-right: 4rem !important; }\n  .mb-xl-5,\n  .my-xl-5 {\n    margin-bottom: 4rem !important; }\n  .ml-xl-5,\n  .mx-xl-5 {\n    margin-left: 4rem !important; }\n  .m-xl-25 {\n    margin: 0.25rem !important; }\n  .mt-xl-25,\n  .my-xl-25 {\n    margin-top: 0.25rem !important; }\n  .mr-xl-25,\n  .mx-xl-25 {\n    margin-right: 0.25rem !important; }\n  .mb-xl-25,\n  .my-xl-25 {\n    margin-bottom: 0.25rem !important; }\n  .ml-xl-25,\n  .mx-xl-25 {\n    margin-left: 0.25rem !important; }\n  .m-xl-50 {\n    margin: 0.5rem !important; }\n  .mt-xl-50,\n  .my-xl-50 {\n    margin-top: 0.5rem !important; }\n  .mr-xl-50,\n  .mx-xl-50 {\n    margin-right: 0.5rem !important; }\n  .mb-xl-50,\n  .my-xl-50 {\n    margin-bottom: 0.5rem !important; }\n  .ml-xl-50,\n  .mx-xl-50 {\n    margin-left: 0.5rem !important; }\n  .m-xl-75 {\n    margin: 0.75rem !important; }\n  .mt-xl-75,\n  .my-xl-75 {\n    margin-top: 0.75rem !important; }\n  .mr-xl-75,\n  .mx-xl-75 {\n    margin-right: 0.75rem !important; }\n  .mb-xl-75,\n  .my-xl-75 {\n    margin-bottom: 0.75rem !important; }\n  .ml-xl-75,\n  .mx-xl-75 {\n    margin-left: 0.75rem !important; }\n  .p-xl-0 {\n    padding: 0 !important; }\n  .pt-xl-0,\n  .py-xl-0 {\n    padding-top: 0 !important; }\n  .pr-xl-0,\n  .px-xl-0 {\n    padding-right: 0 !important; }\n  .pb-xl-0,\n  .py-xl-0 {\n    padding-bottom: 0 !important; }\n  .pl-xl-0,\n  .px-xl-0 {\n    padding-left: 0 !important; }\n  .p-xl-1 {\n    padding: 1rem !important; }\n  .pt-xl-1,\n  .py-xl-1 {\n    padding-top: 1rem !important; }\n  .pr-xl-1,\n  .px-xl-1 {\n    padding-right: 1rem !important; }\n  .pb-xl-1,\n  .py-xl-1 {\n    padding-bottom: 1rem !important; }\n  .pl-xl-1,\n  .px-xl-1 {\n    padding-left: 1rem !important; }\n  .p-xl-2 {\n    padding: 1.5rem !important; }\n  .pt-xl-2,\n  .py-xl-2 {\n    padding-top: 1.5rem !important; }\n  .pr-xl-2,\n  .px-xl-2 {\n    padding-right: 1.5rem !important; }\n  .pb-xl-2,\n  .py-xl-2 {\n    padding-bottom: 1.5rem !important; }\n  .pl-xl-2,\n  .px-xl-2 {\n    padding-left: 1.5rem !important; }\n  .p-xl-3 {\n    padding: 3rem !important; }\n  .pt-xl-3,\n  .py-xl-3 {\n    padding-top: 3rem !important; }\n  .pr-xl-3,\n  .px-xl-3 {\n    padding-right: 3rem !important; }\n  .pb-xl-3,\n  .py-xl-3 {\n    padding-bottom: 3rem !important; }\n  .pl-xl-3,\n  .px-xl-3 {\n    padding-left: 3rem !important; }\n  .p-xl-4 {\n    padding: 3.5rem !important; }\n  .pt-xl-4,\n  .py-xl-4 {\n    padding-top: 3.5rem !important; }\n  .pr-xl-4,\n  .px-xl-4 {\n    padding-right: 3.5rem !important; }\n  .pb-xl-4,\n  .py-xl-4 {\n    padding-bottom: 3.5rem !important; }\n  .pl-xl-4,\n  .px-xl-4 {\n    padding-left: 3.5rem !important; }\n  .p-xl-5 {\n    padding: 4rem !important; }\n  .pt-xl-5,\n  .py-xl-5 {\n    padding-top: 4rem !important; }\n  .pr-xl-5,\n  .px-xl-5 {\n    padding-right: 4rem !important; }\n  .pb-xl-5,\n  .py-xl-5 {\n    padding-bottom: 4rem !important; }\n  .pl-xl-5,\n  .px-xl-5 {\n    padding-left: 4rem !important; }\n  .p-xl-25 {\n    padding: 0.25rem !important; }\n  .pt-xl-25,\n  .py-xl-25 {\n    padding-top: 0.25rem !important; }\n  .pr-xl-25,\n  .px-xl-25 {\n    padding-right: 0.25rem !important; }\n  .pb-xl-25,\n  .py-xl-25 {\n    padding-bottom: 0.25rem !important; }\n  .pl-xl-25,\n  .px-xl-25 {\n    padding-left: 0.25rem !important; }\n  .p-xl-50 {\n    padding: 0.5rem !important; }\n  .pt-xl-50,\n  .py-xl-50 {\n    padding-top: 0.5rem !important; }\n  .pr-xl-50,\n  .px-xl-50 {\n    padding-right: 0.5rem !important; }\n  .pb-xl-50,\n  .py-xl-50 {\n    padding-bottom: 0.5rem !important; }\n  .pl-xl-50,\n  .px-xl-50 {\n    padding-left: 0.5rem !important; }\n  .p-xl-75 {\n    padding: 0.75rem !important; }\n  .pt-xl-75,\n  .py-xl-75 {\n    padding-top: 0.75rem !important; }\n  .pr-xl-75,\n  .px-xl-75 {\n    padding-right: 0.75rem !important; }\n  .pb-xl-75,\n  .py-xl-75 {\n    padding-bottom: 0.75rem !important; }\n  .pl-xl-75,\n  .px-xl-75 {\n    padding-left: 0.75rem !important; }\n  .m-xl-n1 {\n    margin: -1rem !important; }\n  .mt-xl-n1,\n  .my-xl-n1 {\n    margin-top: -1rem !important; }\n  .mr-xl-n1,\n  .mx-xl-n1 {\n    margin-right: -1rem !important; }\n  .mb-xl-n1,\n  .my-xl-n1 {\n    margin-bottom: -1rem !important; }\n  .ml-xl-n1,\n  .mx-xl-n1 {\n    margin-left: -1rem !important; }\n  .m-xl-n2 {\n    margin: -1.5rem !important; }\n  .mt-xl-n2,\n  .my-xl-n2 {\n    margin-top: -1.5rem !important; }\n  .mr-xl-n2,\n  .mx-xl-n2 {\n    margin-right: -1.5rem !important; }\n  .mb-xl-n2,\n  .my-xl-n2 {\n    margin-bottom: -1.5rem !important; }\n  .ml-xl-n2,\n  .mx-xl-n2 {\n    margin-left: -1.5rem !important; }\n  .m-xl-n3 {\n    margin: -3rem !important; }\n  .mt-xl-n3,\n  .my-xl-n3 {\n    margin-top: -3rem !important; }\n  .mr-xl-n3,\n  .mx-xl-n3 {\n    margin-right: -3rem !important; }\n  .mb-xl-n3,\n  .my-xl-n3 {\n    margin-bottom: -3rem !important; }\n  .ml-xl-n3,\n  .mx-xl-n3 {\n    margin-left: -3rem !important; }\n  .m-xl-n4 {\n    margin: -3.5rem !important; }\n  .mt-xl-n4,\n  .my-xl-n4 {\n    margin-top: -3.5rem !important; }\n  .mr-xl-n4,\n  .mx-xl-n4 {\n    margin-right: -3.5rem !important; }\n  .mb-xl-n4,\n  .my-xl-n4 {\n    margin-bottom: -3.5rem !important; }\n  .ml-xl-n4,\n  .mx-xl-n4 {\n    margin-left: -3.5rem !important; }\n  .m-xl-n5 {\n    margin: -4rem !important; }\n  .mt-xl-n5,\n  .my-xl-n5 {\n    margin-top: -4rem !important; }\n  .mr-xl-n5,\n  .mx-xl-n5 {\n    margin-right: -4rem !important; }\n  .mb-xl-n5,\n  .my-xl-n5 {\n    margin-bottom: -4rem !important; }\n  .ml-xl-n5,\n  .mx-xl-n5 {\n    margin-left: -4rem !important; }\n  .m-xl-n25 {\n    margin: -0.25rem !important; }\n  .mt-xl-n25,\n  .my-xl-n25 {\n    margin-top: -0.25rem !important; }\n  .mr-xl-n25,\n  .mx-xl-n25 {\n    margin-right: -0.25rem !important; }\n  .mb-xl-n25,\n  .my-xl-n25 {\n    margin-bottom: -0.25rem !important; }\n  .ml-xl-n25,\n  .mx-xl-n25 {\n    margin-left: -0.25rem !important; }\n  .m-xl-n50 {\n    margin: -0.5rem !important; }\n  .mt-xl-n50,\n  .my-xl-n50 {\n    margin-top: -0.5rem !important; }\n  .mr-xl-n50,\n  .mx-xl-n50 {\n    margin-right: -0.5rem !important; }\n  .mb-xl-n50,\n  .my-xl-n50 {\n    margin-bottom: -0.5rem !important; }\n  .ml-xl-n50,\n  .mx-xl-n50 {\n    margin-left: -0.5rem !important; }\n  .m-xl-n75 {\n    margin: -0.75rem !important; }\n  .mt-xl-n75,\n  .my-xl-n75 {\n    margin-top: -0.75rem !important; }\n  .mr-xl-n75,\n  .mx-xl-n75 {\n    margin-right: -0.75rem !important; }\n  .mb-xl-n75,\n  .my-xl-n75 {\n    margin-bottom: -0.75rem !important; }\n  .ml-xl-n75,\n  .mx-xl-n75 {\n    margin-left: -0.75rem !important; }\n  .m-xl-auto {\n    margin: auto !important; }\n  .mt-xl-auto,\n  .my-xl-auto {\n    margin-top: auto !important; }\n  .mr-xl-auto,\n  .mx-xl-auto {\n    margin-right: auto !important; }\n  .mb-xl-auto,\n  .my-xl-auto {\n    margin-bottom: auto !important; }\n  .ml-xl-auto,\n  .mx-xl-auto {\n    margin-left: auto !important; } }\n\n.text-monospace {\n  font-family: \"Montserrat\", Helvetica, Arial, serif !important; }\n\n.text-justify {\n  text-align: justify !important; }\n\n.text-wrap {\n  white-space: normal !important; }\n\n.text-nowrap {\n  white-space: nowrap !important; }\n\n.text-truncate {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap; }\n\n.text-left {\n  text-align: left !important; }\n\n.text-right {\n  text-align: right !important; }\n\n.text-center {\n  text-align: center !important; }\n\n@media (min-width: 576px) {\n  .text-sm-left {\n    text-align: left !important; }\n  .text-sm-right {\n    text-align: right !important; }\n  .text-sm-center {\n    text-align: center !important; } }\n\n@media (min-width: 768px) {\n  .text-md-left {\n    text-align: left !important; }\n  .text-md-right {\n    text-align: right !important; }\n  .text-md-center {\n    text-align: center !important; } }\n\n@media (min-width: 992px) {\n  .text-lg-left {\n    text-align: left !important; }\n  .text-lg-right {\n    text-align: right !important; }\n  .text-lg-center {\n    text-align: center !important; } }\n\n@media (min-width: 1200px) {\n  .text-xl-left {\n    text-align: left !important; }\n  .text-xl-right {\n    text-align: right !important; }\n  .text-xl-center {\n    text-align: center !important; } }\n\n.text-lowercase {\n  text-transform: lowercase !important; }\n\n.text-uppercase {\n  text-transform: uppercase !important; }\n\n.text-capitalize {\n  text-transform: capitalize !important; }\n\n.font-weight-light {\n  font-weight: 300 !important; }\n\n.font-weight-lighter {\n  font-weight: lighter !important; }\n\n.font-weight-normal {\n  font-weight: 400 !important; }\n\n.font-weight-bold {\n  font-weight: 700 !important; }\n\n.font-weight-bolder {\n  font-weight: bolder !important; }\n\n.font-italic {\n  font-style: italic !important; }\n\n.text-white {\n  color: #fff !important; }\n\n.text-primary {\n  color: #7367f0 !important; }\n\na.text-primary:hover, a.text-primary:focus {\n  color: #3321e9 !important; }\n\n.text-secondary {\n  color: #b8c2cc !important; }\n\na.text-secondary:hover, a.text-secondary:focus {\n  color: #8b9cac !important; }\n\n.text-success {\n  color: #28c76f !important; }\n\na.text-success:hover, a.text-success:focus {\n  color: #1b874b !important; }\n\n.text-info {\n  color: #00cfe8 !important; }\n\na.text-info:hover, a.text-info:focus {\n  color: #008b9c !important; }\n\n.text-warning {\n  color: #ff9f43 !important; }\n\na.text-warning:hover, a.text-warning:focus {\n  color: #f67800 !important; }\n\n.text-danger {\n  color: #ea5455 !important; }\n\na.text-danger:hover, a.text-danger:focus {\n  color: #d71a1c !important; }\n\n.text-light {\n  color: #babfc7 !important; }\n\na.text-light:hover, a.text-light:focus {\n  color: #9098a5 !important; }\n\n.text-dark {\n  color: #1e1e1e !important; }\n\na.text-dark:hover, a.text-dark:focus {\n  color: black !important; }\n\n.text-body {\n  color: #626262 !important; }\n\n.text-muted {\n  color: #b8c2cc !important; }\n\n.text-black-50 {\n  color: rgba(34, 41, 47, 0.5) !important; }\n\n.text-white-50 {\n  color: rgba(255, 255, 255, 0.5) !important; }\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.text-decoration-none {\n  text-decoration: none !important; }\n\n.text-break {\n  word-break: break-word !important;\n  overflow-wrap: break-word !important; }\n\n.text-reset {\n  color: inherit !important; }\n\n.visible {\n  visibility: visible !important; }\n\n.invisible {\n  visibility: hidden !important; }\n\n@media print {\n  *,\n  *::before,\n  *::after {\n    text-shadow: none !important;\n    box-shadow: none !important; }\n  a:not(.btn) {\n    text-decoration: underline; }\n  abbr[title]::after {\n    content: \" (\" attr(title) \")\"; }\n  pre {\n    white-space: pre-wrap !important; }\n  pre,\n  blockquote {\n    border: 1px solid #adb5bd;\n    page-break-inside: avoid; }\n  thead {\n    display: table-header-group; }\n  tr,\n  img {\n    page-break-inside: avoid; }\n  p,\n  h2,\n  h3 {\n    orphans: 3;\n    widows: 3; }\n  h2,\n  h3 {\n    page-break-after: avoid; }\n  @page {\n    size: a3; }\n  body {\n    min-width: 992px !important; }\n  .container {\n    min-width: 992px !important; }\n  .navbar {\n    display: none; }\n  .badge {\n    border: 1px solid #22292f; }\n  .table {\n    border-collapse: collapse !important; }\n    .table td,\n    .table th {\n      background-color: #fff !important; }\n  .table-bordered th,\n  .table-bordered td {\n    border: 1px solid #dae1e7 !important; }\n  .table-dark {\n    color: inherit; }\n    .table-dark th,\n    .table-dark td,\n    .table-dark thead th,\n    .table-dark tbody + tbody {\n      border-color: #f8f8f8; }\n  .table .thead-dark th {\n    color: inherit;\n    border-color: #f8f8f8; } }\n"
  },
  {
    "path": "public/backend/css/colors.css",
    "content": ".white {\n  color: #FFFFFF !important; }\n\n.bg-white {\n  background-color: #FFFFFF !important; }\n  .bg-white .card-header,\n  .bg-white .card-footer {\n    background-color: transparent; }\n\n.alert-white {\n  background: rgba(255, 255, 255, 0.2) !important;\n  color: #FFFFFF !important; }\n  .alert-white .alert-heading {\n    box-shadow: rgba(255, 255, 255, 0.4) 0px 6px 15px -7px; }\n  .alert-white .alert-link {\n    color: #f2f2f2 !important; }\n\n.bg-rgba-white {\n  background: rgba(255, 255, 255, 0.15) !important; }\n\n.border-white {\n  border: 1px solid #FFFFFF !important; }\n\n.border-top-white {\n  border-top: 1px solid #FFFFFF; }\n\n.border-bottom-white {\n  border-bottom: 1px solid #FFFFFF; }\n\n.border-left-white {\n  border-left: 1px solid #FFFFFF; }\n\n.border-right-white {\n  border-right: 1px solid #FFFFFF; }\n\n.bg-white.badge-glow,\n.border-white.badge-glow,\n.badge-white.badge-glow {\n  box-shadow: 0px 0px 10px #FFFFFF; }\n\n.badge.badge-white {\n  background-color: #FFFFFF; }\n\n.badge.badge-light-white {\n  color: #FFFFFF !important;\n  font-weight: 500; }\n\n.overlay-white {\n  background: #FFFFFF;\n  /* The Fallback */\n  background: rgba(255, 255, 255, 0.6); }\n\n.btn-white {\n  border-color: !important;\n  background-color: #FFFFFF !important;\n  color: #fff; }\n  .btn-white:hover {\n    border-color: !important;\n    color: #fff !important;\n    box-shadow: 0 8px 25px -8px white; }\n  .btn-white:focus, .btn-white:active {\n    color: #fff !important; }\n\n.btn-flat-white {\n  background-color: transparent;\n  color: #FFFFFF; }\n  .btn-flat-white:hover {\n    color: #FFFFFF;\n    background-color: rgba(255, 255, 255, 0.1); }\n  .btn-flat-white:active, .btn-flat-white:focus {\n    background-color: #FFFFFF;\n    color: #fff !important; }\n\n.btn-relief-white {\n  background-color: #FFFFFF;\n  box-shadow: inset 0 -3px 0 0 rgba(0, 0, 0, 0.2);\n  color: #fff; }\n  .btn-relief-white:hover {\n    color: #fff; }\n  .btn-relief-white:active, .btn-relief-white:focus {\n    outline: none;\n    transform: translateY(3px); }\n\n.btn-outline-white {\n  border: 1px solid #FFFFFF;\n  background-color: transparent;\n  color: #FFFFFF; }\n  .btn-outline-white:hover {\n    background-color: rgba(255, 255, 255, 0.08);\n    color: #FFFFFF; }\n  .btn-outline-white:active {\n    color: #fff !important; }\n\n.btn-white ~ .dropdown-menu .dropdown-item.active,\n.btn-outline-white ~ .dropdown-menu .dropdown-item.active,\n.btn-flat-white ~ .dropdown-menu .dropdown-item.active {\n  background-color: #FFFFFF;\n  color: #fff; }\n  .btn-white ~ .dropdown-menu .dropdown-item.active:hover,\n  .btn-outline-white ~ .dropdown-menu .dropdown-item.active:hover,\n  .btn-flat-white ~ .dropdown-menu .dropdown-item.active:hover {\n    color: #fff; }\n\n.btn-white ~ .dropdown-menu .dropdown-item:not(.active):not(:active):hover,\n.btn-outline-white ~ .dropdown-menu .dropdown-item:not(.active):not(:active):hover,\n.btn-flat-white ~ .dropdown-menu .dropdown-item:not(.active):not(:active):hover {\n  color: #FFFFFF; }\n\n.dropdown.dropdown-icon-wrapper .btn-white ~ .dropdown-menu .dropdown-item:hover i,\n.dropdown.dropdown-icon-wrapper .btn-outline-white ~ .dropdown-menu .dropdown-item:hover i,\n.dropdown.dropdown-icon-wrapper .btn-flat-white ~ .dropdown-menu .dropdown-item:hover i,\n.dropup.dropdown-icon-wrapper .btn-white ~ .dropdown-menu .dropdown-item:hover i,\n.dropup.dropdown-icon-wrapper .btn-outline-white ~ .dropdown-menu .dropdown-item:hover i,\n.dropup.dropdown-icon-wrapper .btn-flat-white ~ .dropdown-menu .dropdown-item:hover i,\n.dropright.dropdown-icon-wrapper .btn-white ~ .dropdown-menu .dropdown-item:hover i,\n.dropright.dropdown-icon-wrapper .btn-outline-white ~ .dropdown-menu .dropdown-item:hover i,\n.dropright.dropdown-icon-wrapper .btn-flat-white ~ .dropdown-menu .dropdown-item:hover i,\n.dropleft.dropdown-icon-wrapper .btn-white ~ .dropdown-menu .dropdown-item:hover i,\n.dropleft.dropdown-icon-wrapper .btn-outline-white ~ .dropdown-menu .dropdown-item:hover i,\n.dropleft.dropdown-icon-wrapper .btn-flat-white ~ .dropdown-menu .dropdown-item:hover i {\n  color: #FFFFFF; }\n\n.dropdown.dropdown-icon-wrapper .btn-white ~ .dropdown-menu .dropdown-item:active i,\n.dropdown.dropdown-icon-wrapper .btn-outline-white ~ .dropdown-menu .dropdown-item:active i,\n.dropdown.dropdown-icon-wrapper .btn-flat-white ~ .dropdown-menu .dropdown-item:active i,\n.dropup.dropdown-icon-wrapper .btn-white ~ .dropdown-menu .dropdown-item:active i,\n.dropup.dropdown-icon-wrapper .btn-outline-white ~ .dropdown-menu .dropdown-item:active i,\n.dropup.dropdown-icon-wrapper .btn-flat-white ~ .dropdown-menu .dropdown-item:active i,\n.dropright.dropdown-icon-wrapper .btn-white ~ .dropdown-menu .dropdown-item:active i,\n.dropright.dropdown-icon-wrapper .btn-outline-white ~ .dropdown-menu .dropdown-item:active i,\n.dropright.dropdown-icon-wrapper .btn-flat-white ~ .dropdown-menu .dropdown-item:active i,\n.dropleft.dropdown-icon-wrapper .btn-white ~ .dropdown-menu .dropdown-item:active i,\n.dropleft.dropdown-icon-wrapper .btn-outline-white ~ .dropdown-menu .dropdown-item:active i,\n.dropleft.dropdown-icon-wrapper .btn-flat-white ~ .dropdown-menu .dropdown-item:active i {\n  color: #fff; }\n\n.bullet.bullet-white {\n  background-color: #FFFFFF; }\n\n.pagination-white .page-item.active .page-link {\n  background: #FFFFFF;\n  color: #fff; }\n  .pagination-white .page-item.active .page-link:hover {\n    color: #fff; }\n\n.pagination-white .page-item .page-link:hover {\n  color: #FFFFFF; }\n\n.pagination-white .page-item.prev-item .page-link:hover, .pagination-white .page-item.next-item .page-link:hover {\n  background: #FFFFFF;\n  color: #fff; }\n\n.nav-pill-white .nav-item .nav-link.active {\n  color: #fff;\n  background-color: #FFFFFF !important; }\n\n.progress-bar-white {\n  background-color: rgba(255, 255, 255, 0.1); }\n  .progress-bar-white .progress-bar {\n    background-color: #FFFFFF; }\n\n.chip-white {\n  background-color: #FFFFFF !important; }\n  .chip-white .chip-body {\n    color: #fff !important; }\n\n.divider.divider-white .divider-text:before, .divider.divider-white .divider-text:after {\n  border-color: #FFFFFF !important; }\n\ninput[type=\"checkbox\"].bg-white + .custom-control-label:before, input[type=\"radio\"].bg-white + .custom-control-label:before {\n  background-color: #FFFFFF !important; }\n\ninput:focus ~ .bg-white {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #FFFFFF !important; }\n\n.vs-checkbox-white input:checked ~ .vs-checkbox {\n  border-color: #FFFFFF !important; }\n  .vs-checkbox-white input:checked ~ .vs-checkbox .vs-checkbox--check {\n    background-color: #FFFFFF !important; }\n\n.vs-checkbox-white input:active:checked + .vs-checkbox .vs-checkbox--check {\n  background-color: #FFFFFF !important; }\n\n.custom-switch-white .custom-control-input:checked ~ .custom-control-label::before {\n  background-color: #FFFFFF !important;\n  color: #fff;\n  transition: all .2s ease-out; }\n\n.vs-radio-white input:checked ~ .vs-radio .vs-radio--circle {\n  background: white !important;\n  box-shadow: 0 3px 12px 0 rgba(255, 255, 255, 0.4) !important; }\n\n.black {\n  color: #000000 !important; }\n\n.bg-black {\n  background-color: #000000 !important; }\n  .bg-black .card-header,\n  .bg-black .card-footer {\n    background-color: transparent; }\n\n.alert-black {\n  background: rgba(0, 0, 0, 0.2) !important;\n  color: #000000 !important; }\n  .alert-black .alert-heading {\n    box-shadow: rgba(0, 0, 0, 0.4) 0px 6px 15px -7px; }\n  .alert-black .alert-link {\n    color: black !important; }\n\n.bg-rgba-black {\n  background: rgba(0, 0, 0, 0.15) !important; }\n\n.border-black {\n  border: 1px solid #000000 !important; }\n\n.border-top-black {\n  border-top: 1px solid #000000; }\n\n.border-bottom-black {\n  border-bottom: 1px solid #000000; }\n\n.border-left-black {\n  border-left: 1px solid #000000; }\n\n.border-right-black {\n  border-right: 1px solid #000000; }\n\n.bg-black.badge-glow,\n.border-black.badge-glow,\n.badge-black.badge-glow {\n  box-shadow: 0px 0px 10px #000000; }\n\n.badge.badge-black {\n  background-color: #000000; }\n\n.badge.badge-light-black {\n  color: #000000 !important;\n  font-weight: 500; }\n\n.overlay-black {\n  background: #000000;\n  /* The Fallback */\n  background: rgba(0, 0, 0, 0.6); }\n\n.btn-black {\n  border-color: !important;\n  background-color: #000000 !important;\n  color: #fff; }\n  .btn-black:hover {\n    border-color: !important;\n    color: #fff !important;\n    box-shadow: 0 8px 25px -8px black; }\n  .btn-black:focus, .btn-black:active {\n    color: #fff !important; }\n\n.btn-flat-black {\n  background-color: transparent;\n  color: #000000; }\n  .btn-flat-black:hover {\n    color: #000000;\n    background-color: rgba(0, 0, 0, 0.1); }\n  .btn-flat-black:active, .btn-flat-black:focus {\n    background-color: #000000;\n    color: #fff !important; }\n\n.btn-relief-black {\n  background-color: #000000;\n  box-shadow: inset 0 -3px 0 0 rgba(0, 0, 0, 0.2);\n  color: #fff; }\n  .btn-relief-black:hover {\n    color: #fff; }\n  .btn-relief-black:active, .btn-relief-black:focus {\n    outline: none;\n    transform: translateY(3px); }\n\n.btn-outline-black {\n  border: 1px solid #000000;\n  background-color: transparent;\n  color: #000000; }\n  .btn-outline-black:hover {\n    background-color: rgba(0, 0, 0, 0.08);\n    color: #000000; }\n  .btn-outline-black:active {\n    color: #fff !important; }\n\n.btn-black ~ .dropdown-menu .dropdown-item.active,\n.btn-outline-black ~ .dropdown-menu .dropdown-item.active,\n.btn-flat-black ~ .dropdown-menu .dropdown-item.active {\n  background-color: #000000;\n  color: #fff; }\n  .btn-black ~ .dropdown-menu .dropdown-item.active:hover,\n  .btn-outline-black ~ .dropdown-menu .dropdown-item.active:hover,\n  .btn-flat-black ~ .dropdown-menu .dropdown-item.active:hover {\n    color: #fff; }\n\n.btn-black ~ .dropdown-menu .dropdown-item:not(.active):not(:active):hover,\n.btn-outline-black ~ .dropdown-menu .dropdown-item:not(.active):not(:active):hover,\n.btn-flat-black ~ .dropdown-menu .dropdown-item:not(.active):not(:active):hover {\n  color: #000000; }\n\n.dropdown.dropdown-icon-wrapper .btn-black ~ .dropdown-menu .dropdown-item:hover i,\n.dropdown.dropdown-icon-wrapper .btn-outline-black ~ .dropdown-menu .dropdown-item:hover i,\n.dropdown.dropdown-icon-wrapper .btn-flat-black ~ .dropdown-menu .dropdown-item:hover i,\n.dropup.dropdown-icon-wrapper .btn-black ~ .dropdown-menu .dropdown-item:hover i,\n.dropup.dropdown-icon-wrapper .btn-outline-black ~ .dropdown-menu .dropdown-item:hover i,\n.dropup.dropdown-icon-wrapper .btn-flat-black ~ .dropdown-menu .dropdown-item:hover i,\n.dropright.dropdown-icon-wrapper .btn-black ~ .dropdown-menu .dropdown-item:hover i,\n.dropright.dropdown-icon-wrapper .btn-outline-black ~ .dropdown-menu .dropdown-item:hover i,\n.dropright.dropdown-icon-wrapper .btn-flat-black ~ .dropdown-menu .dropdown-item:hover i,\n.dropleft.dropdown-icon-wrapper .btn-black ~ .dropdown-menu .dropdown-item:hover i,\n.dropleft.dropdown-icon-wrapper .btn-outline-black ~ .dropdown-menu .dropdown-item:hover i,\n.dropleft.dropdown-icon-wrapper .btn-flat-black ~ .dropdown-menu .dropdown-item:hover i {\n  color: #000000; }\n\n.dropdown.dropdown-icon-wrapper .btn-black ~ .dropdown-menu .dropdown-item:active i,\n.dropdown.dropdown-icon-wrapper .btn-outline-black ~ .dropdown-menu .dropdown-item:active i,\n.dropdown.dropdown-icon-wrapper .btn-flat-black ~ .dropdown-menu .dropdown-item:active i,\n.dropup.dropdown-icon-wrapper .btn-black ~ .dropdown-menu .dropdown-item:active i,\n.dropup.dropdown-icon-wrapper .btn-outline-black ~ .dropdown-menu .dropdown-item:active i,\n.dropup.dropdown-icon-wrapper .btn-flat-black ~ .dropdown-menu .dropdown-item:active i,\n.dropright.dropdown-icon-wrapper .btn-black ~ .dropdown-menu .dropdown-item:active i,\n.dropright.dropdown-icon-wrapper .btn-outline-black ~ .dropdown-menu .dropdown-item:active i,\n.dropright.dropdown-icon-wrapper .btn-flat-black ~ .dropdown-menu .dropdown-item:active i,\n.dropleft.dropdown-icon-wrapper .btn-black ~ .dropdown-menu .dropdown-item:active i,\n.dropleft.dropdown-icon-wrapper .btn-outline-black ~ .dropdown-menu .dropdown-item:active i,\n.dropleft.dropdown-icon-wrapper .btn-flat-black ~ .dropdown-menu .dropdown-item:active i {\n  color: #fff; }\n\n.bullet.bullet-black {\n  background-color: #000000; }\n\n.pagination-black .page-item.active .page-link {\n  background: #000000;\n  color: #fff; }\n  .pagination-black .page-item.active .page-link:hover {\n    color: #fff; }\n\n.pagination-black .page-item .page-link:hover {\n  color: #000000; }\n\n.pagination-black .page-item.prev-item .page-link:hover, .pagination-black .page-item.next-item .page-link:hover {\n  background: #000000;\n  color: #fff; }\n\n.nav-pill-black .nav-item .nav-link.active {\n  color: #fff;\n  background-color: #000000 !important; }\n\n.progress-bar-black {\n  background-color: rgba(0, 0, 0, 0.1); }\n  .progress-bar-black .progress-bar {\n    background-color: #000000; }\n\n.chip-black {\n  background-color: #000000 !important; }\n  .chip-black .chip-body {\n    color: #fff !important; }\n\n.divider.divider-black .divider-text:before, .divider.divider-black .divider-text:after {\n  border-color: #000000 !important; }\n\ninput[type=\"checkbox\"].bg-black + .custom-control-label:before, input[type=\"radio\"].bg-black + .custom-control-label:before {\n  background-color: #000000 !important; }\n\ninput:focus ~ .bg-black {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #000000 !important; }\n\n.vs-checkbox-black input:checked ~ .vs-checkbox {\n  border-color: #000000 !important; }\n  .vs-checkbox-black input:checked ~ .vs-checkbox .vs-checkbox--check {\n    background-color: #000000 !important; }\n\n.vs-checkbox-black input:active:checked + .vs-checkbox .vs-checkbox--check {\n  background-color: #000000 !important; }\n\n.custom-switch-black .custom-control-input:checked ~ .custom-control-label::before {\n  background-color: #000000 !important;\n  color: #fff;\n  transition: all .2s ease-out; }\n\n.vs-radio-black input:checked ~ .vs-radio .vs-radio--circle {\n  background: black !important;\n  box-shadow: 0 3px 12px 0 rgba(0, 0, 0, 0.4) !important; }\n\n.dark {\n  color: #1e1e1e !important; }\n\n.bg-dark {\n  background-color: #1e1e1e !important; }\n  .bg-dark .card-header,\n  .bg-dark .card-footer {\n    background-color: transparent; }\n\n.alert-dark {\n  background: rgba(30, 30, 30, 0.2) !important;\n  color: #1e1e1e !important; }\n  .alert-dark .alert-heading {\n    box-shadow: rgba(30, 30, 30, 0.4) 0px 6px 15px -7px; }\n  .alert-dark .alert-link {\n    color: #111111 !important; }\n\n.bg-rgba-dark {\n  background: rgba(30, 30, 30, 0.15) !important; }\n\n.border-dark {\n  border: 1px solid #1e1e1e !important; }\n\n.border-top-dark {\n  border-top: 1px solid #1e1e1e; }\n\n.border-bottom-dark {\n  border-bottom: 1px solid #1e1e1e; }\n\n.border-left-dark {\n  border-left: 1px solid #1e1e1e; }\n\n.border-right-dark {\n  border-right: 1px solid #1e1e1e; }\n\n.bg-dark.badge-glow,\n.border-dark.badge-glow,\n.badge-dark.badge-glow {\n  box-shadow: 0px 0px 10px #1e1e1e; }\n\n.badge.badge-dark {\n  background-color: #1e1e1e; }\n\n.badge.badge-light-dark {\n  color: #1e1e1e !important;\n  font-weight: 500; }\n\n.overlay-dark {\n  background: #1e1e1e;\n  /* The Fallback */\n  background: rgba(30, 30, 30, 0.6); }\n\n.btn-dark {\n  border-color: !important;\n  background-color: #1e1e1e !important;\n  color: #fff; }\n  .btn-dark:hover {\n    border-color: !important;\n    color: #fff !important;\n    box-shadow: 0 8px 25px -8px #1e1e1e; }\n  .btn-dark:focus, .btn-dark:active {\n    color: #fff !important; }\n\n.btn-flat-dark {\n  background-color: transparent;\n  color: #1e1e1e; }\n  .btn-flat-dark:hover {\n    color: #1e1e1e;\n    background-color: rgba(30, 30, 30, 0.1); }\n  .btn-flat-dark:active, .btn-flat-dark:focus {\n    background-color: #1e1e1e;\n    color: #fff !important; }\n\n.btn-relief-dark {\n  background-color: #1e1e1e;\n  box-shadow: inset 0 -3px 0 0 rgba(0, 0, 0, 0.2);\n  color: #fff; }\n  .btn-relief-dark:hover {\n    color: #fff; }\n  .btn-relief-dark:active, .btn-relief-dark:focus {\n    outline: none;\n    transform: translateY(3px); }\n\n.btn-outline-dark {\n  border: 1px solid #1e1e1e;\n  background-color: transparent;\n  color: #1e1e1e; }\n  .btn-outline-dark:hover {\n    background-color: rgba(30, 30, 30, 0.08);\n    color: #1e1e1e; }\n  .btn-outline-dark:active {\n    color: #fff !important; }\n\n.btn-dark ~ .dropdown-menu .dropdown-item.active,\n.btn-outline-dark ~ .dropdown-menu .dropdown-item.active,\n.btn-flat-dark ~ .dropdown-menu .dropdown-item.active {\n  background-color: #1e1e1e;\n  color: #fff; }\n  .btn-dark ~ .dropdown-menu .dropdown-item.active:hover,\n  .btn-outline-dark ~ .dropdown-menu .dropdown-item.active:hover,\n  .btn-flat-dark ~ .dropdown-menu .dropdown-item.active:hover {\n    color: #fff; }\n\n.btn-dark ~ .dropdown-menu .dropdown-item:not(.active):not(:active):hover,\n.btn-outline-dark ~ .dropdown-menu .dropdown-item:not(.active):not(:active):hover,\n.btn-flat-dark ~ .dropdown-menu .dropdown-item:not(.active):not(:active):hover {\n  color: #1e1e1e; }\n\n.dropdown.dropdown-icon-wrapper .btn-dark ~ .dropdown-menu .dropdown-item:hover i,\n.dropdown.dropdown-icon-wrapper .btn-outline-dark ~ .dropdown-menu .dropdown-item:hover i,\n.dropdown.dropdown-icon-wrapper .btn-flat-dark ~ .dropdown-menu .dropdown-item:hover i,\n.dropup.dropdown-icon-wrapper .btn-dark ~ .dropdown-menu .dropdown-item:hover i,\n.dropup.dropdown-icon-wrapper .btn-outline-dark ~ .dropdown-menu .dropdown-item:hover i,\n.dropup.dropdown-icon-wrapper .btn-flat-dark ~ .dropdown-menu .dropdown-item:hover i,\n.dropright.dropdown-icon-wrapper .btn-dark ~ .dropdown-menu .dropdown-item:hover i,\n.dropright.dropdown-icon-wrapper .btn-outline-dark ~ .dropdown-menu .dropdown-item:hover i,\n.dropright.dropdown-icon-wrapper .btn-flat-dark ~ .dropdown-menu .dropdown-item:hover i,\n.dropleft.dropdown-icon-wrapper .btn-dark ~ .dropdown-menu .dropdown-item:hover i,\n.dropleft.dropdown-icon-wrapper .btn-outline-dark ~ .dropdown-menu .dropdown-item:hover i,\n.dropleft.dropdown-icon-wrapper .btn-flat-dark ~ .dropdown-menu .dropdown-item:hover i {\n  color: #1e1e1e; }\n\n.dropdown.dropdown-icon-wrapper .btn-dark ~ .dropdown-menu .dropdown-item:active i,\n.dropdown.dropdown-icon-wrapper .btn-outline-dark ~ .dropdown-menu .dropdown-item:active i,\n.dropdown.dropdown-icon-wrapper .btn-flat-dark ~ .dropdown-menu .dropdown-item:active i,\n.dropup.dropdown-icon-wrapper .btn-dark ~ .dropdown-menu .dropdown-item:active i,\n.dropup.dropdown-icon-wrapper .btn-outline-dark ~ .dropdown-menu .dropdown-item:active i,\n.dropup.dropdown-icon-wrapper .btn-flat-dark ~ .dropdown-menu .dropdown-item:active i,\n.dropright.dropdown-icon-wrapper .btn-dark ~ .dropdown-menu .dropdown-item:active i,\n.dropright.dropdown-icon-wrapper .btn-outline-dark ~ .dropdown-menu .dropdown-item:active i,\n.dropright.dropdown-icon-wrapper .btn-flat-dark ~ .dropdown-menu .dropdown-item:active i,\n.dropleft.dropdown-icon-wrapper .btn-dark ~ .dropdown-menu .dropdown-item:active i,\n.dropleft.dropdown-icon-wrapper .btn-outline-dark ~ .dropdown-menu .dropdown-item:active i,\n.dropleft.dropdown-icon-wrapper .btn-flat-dark ~ .dropdown-menu .dropdown-item:active i {\n  color: #fff; }\n\n.bullet.bullet-dark {\n  background-color: #1e1e1e; }\n\n.pagination-dark .page-item.active .page-link {\n  background: #1e1e1e;\n  color: #fff; }\n  .pagination-dark .page-item.active .page-link:hover {\n    color: #fff; }\n\n.pagination-dark .page-item .page-link:hover {\n  color: #1e1e1e; }\n\n.pagination-dark .page-item.prev-item .page-link:hover, .pagination-dark .page-item.next-item .page-link:hover {\n  background: #1e1e1e;\n  color: #fff; }\n\n.nav-pill-dark .nav-item .nav-link.active {\n  color: #fff;\n  background-color: #1e1e1e !important; }\n\n.progress-bar-dark {\n  background-color: rgba(30, 30, 30, 0.1); }\n  .progress-bar-dark .progress-bar {\n    background-color: #1e1e1e; }\n\n.chip-dark {\n  background-color: #1e1e1e !important; }\n  .chip-dark .chip-body {\n    color: #fff !important; }\n\n.divider.divider-dark .divider-text:before, .divider.divider-dark .divider-text:after {\n  border-color: #1e1e1e !important; }\n\ninput[type=\"checkbox\"].bg-dark + .custom-control-label:before, input[type=\"radio\"].bg-dark + .custom-control-label:before {\n  background-color: #1e1e1e !important; }\n\ninput:focus ~ .bg-dark {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #1e1e1e !important; }\n\n.vs-checkbox-dark input:checked ~ .vs-checkbox {\n  border-color: #1e1e1e !important; }\n  .vs-checkbox-dark input:checked ~ .vs-checkbox .vs-checkbox--check {\n    background-color: #1e1e1e !important; }\n\n.vs-checkbox-dark input:active:checked + .vs-checkbox .vs-checkbox--check {\n  background-color: #1e1e1e !important; }\n\n.custom-switch-dark .custom-control-input:checked ~ .custom-control-label::before {\n  background-color: #1e1e1e !important;\n  color: #fff;\n  transition: all .2s ease-out; }\n\n.vs-radio-dark input:checked ~ .vs-radio .vs-radio--circle {\n  background: #1e1e1e !important;\n  box-shadow: 0 3px 12px 0 rgba(30, 30, 30, 0.4) !important; }\n\n.dark.gradient-bg {\n  color: #640064 !important; }\n\n.bg-dark.bg-gradient-bg {\n  background-color: #640064 !important; }\n\n.btn-dark.btn-gradient-bg {\n  border-color: !important;\n  background-color: #640064 !important; }\n  .btn-dark.btn-gradient-bg:hover {\n    border-color: !important;\n    background-color: !important; }\n  .btn-dark.btn-gradient-bg:focus, .btn-dark.btn-gradient-bg:active {\n    border-color: !important;\n    background-color: !important; }\n\n.btn-outline-dark.btn-outline-gradient-bg {\n  border-color: #640064 !important;\n  color: #640064 !important; }\n  .btn-outline-dark.btn-outline-gradient-bg:hover {\n    background-color: #640064 !important; }\n\ninput:focus ~ .bg-dark {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #640064 !important; }\n\n.border-dark.border-gradient-bg {\n  border: 1px solid #640064 !important; }\n\n.border-top-dark.border-top-gradient-bg {\n  border-top: 1px solid #640064 !important; }\n\n.border-bottom-dark.border-bottom-gradient-bg {\n  border-bottom: 1px solid #640064 !important; }\n\n.border-left-dark.border-left-gradient-bg {\n  border-left: 1px solid #640064 !important; }\n\n.border-right-dark.border-right-gradient-bg {\n  border-right: 1px solid #640064 !important; }\n\n.overlay-dark.overlay-gradient-bg {\n  background: #640064;\n  /* The Fallback */\n  background: rgba(100, 0, 100, 0.6); }\n\n.light {\n  color: #babfc7 !important; }\n\n.bg-light {\n  background-color: #babfc7 !important; }\n  .bg-light .card-header,\n  .bg-light .card-footer {\n    background-color: transparent; }\n\n.alert-light {\n  background: rgba(186, 191, 199, 0.2) !important;\n  color: #babfc7 !important; }\n  .alert-light .alert-heading {\n    box-shadow: rgba(186, 191, 199, 0.4) 0px 6px 15px -7px; }\n  .alert-light .alert-link {\n    color: #acb2bc !important; }\n\n.bg-rgba-light {\n  background: rgba(186, 191, 199, 0.15) !important; }\n\n.border-light {\n  border: 1px solid #babfc7 !important; }\n\n.border-top-light {\n  border-top: 1px solid #babfc7; }\n\n.border-bottom-light {\n  border-bottom: 1px solid #babfc7; }\n\n.border-left-light {\n  border-left: 1px solid #babfc7; }\n\n.border-right-light {\n  border-right: 1px solid #babfc7; }\n\n.bg-light.badge-glow,\n.border-light.badge-glow,\n.badge-light.badge-glow {\n  box-shadow: 0px 0px 10px #babfc7; }\n\n.badge.badge-light {\n  background-color: #babfc7; }\n\n.badge.badge-light-light {\n  color: #babfc7 !important;\n  font-weight: 500; }\n\n.overlay-light {\n  background: #babfc7;\n  /* The Fallback */\n  background: rgba(186, 191, 199, 0.6); }\n\n.btn-light {\n  border-color: !important;\n  background-color: #babfc7 !important;\n  color: #fff; }\n  .btn-light:hover {\n    border-color: !important;\n    color: #fff !important;\n    box-shadow: 0 8px 25px -8px #babfc7; }\n  .btn-light:focus, .btn-light:active {\n    color: #fff !important; }\n\n.btn-flat-light {\n  background-color: transparent;\n  color: #babfc7; }\n  .btn-flat-light:hover {\n    color: #babfc7;\n    background-color: rgba(186, 191, 199, 0.1); }\n  .btn-flat-light:active, .btn-flat-light:focus {\n    background-color: #babfc7;\n    color: #fff !important; }\n\n.btn-relief-light {\n  background-color: #babfc7;\n  box-shadow: inset 0 -3px 0 0 rgba(0, 0, 0, 0.2);\n  color: #fff; }\n  .btn-relief-light:hover {\n    color: #fff; }\n  .btn-relief-light:active, .btn-relief-light:focus {\n    outline: none;\n    transform: translateY(3px); }\n\n.btn-outline-light {\n  border: 1px solid #babfc7;\n  background-color: transparent;\n  color: #babfc7; }\n  .btn-outline-light:hover {\n    background-color: rgba(186, 191, 199, 0.08);\n    color: #babfc7; }\n  .btn-outline-light:active {\n    color: #fff !important; }\n\n.btn-light ~ .dropdown-menu .dropdown-item.active,\n.btn-outline-light ~ .dropdown-menu .dropdown-item.active,\n.btn-flat-light ~ .dropdown-menu .dropdown-item.active {\n  background-color: #babfc7;\n  color: #fff; }\n  .btn-light ~ .dropdown-menu .dropdown-item.active:hover,\n  .btn-outline-light ~ .dropdown-menu .dropdown-item.active:hover,\n  .btn-flat-light ~ .dropdown-menu .dropdown-item.active:hover {\n    color: #fff; }\n\n.btn-light ~ .dropdown-menu .dropdown-item:not(.active):not(:active):hover,\n.btn-outline-light ~ .dropdown-menu .dropdown-item:not(.active):not(:active):hover,\n.btn-flat-light ~ .dropdown-menu .dropdown-item:not(.active):not(:active):hover {\n  color: #babfc7; }\n\n.dropdown.dropdown-icon-wrapper .btn-light ~ .dropdown-menu .dropdown-item:hover i,\n.dropdown.dropdown-icon-wrapper .btn-outline-light ~ .dropdown-menu .dropdown-item:hover i,\n.dropdown.dropdown-icon-wrapper .btn-flat-light ~ .dropdown-menu .dropdown-item:hover i,\n.dropup.dropdown-icon-wrapper .btn-light ~ .dropdown-menu .dropdown-item:hover i,\n.dropup.dropdown-icon-wrapper .btn-outline-light ~ .dropdown-menu .dropdown-item:hover i,\n.dropup.dropdown-icon-wrapper .btn-flat-light ~ .dropdown-menu .dropdown-item:hover i,\n.dropright.dropdown-icon-wrapper .btn-light ~ .dropdown-menu .dropdown-item:hover i,\n.dropright.dropdown-icon-wrapper .btn-outline-light ~ .dropdown-menu .dropdown-item:hover i,\n.dropright.dropdown-icon-wrapper .btn-flat-light ~ .dropdown-menu .dropdown-item:hover i,\n.dropleft.dropdown-icon-wrapper .btn-light ~ .dropdown-menu .dropdown-item:hover i,\n.dropleft.dropdown-icon-wrapper .btn-outline-light ~ .dropdown-menu .dropdown-item:hover i,\n.dropleft.dropdown-icon-wrapper .btn-flat-light ~ .dropdown-menu .dropdown-item:hover i {\n  color: #babfc7; }\n\n.dropdown.dropdown-icon-wrapper .btn-light ~ .dropdown-menu .dropdown-item:active i,\n.dropdown.dropdown-icon-wrapper .btn-outline-light ~ .dropdown-menu .dropdown-item:active i,\n.dropdown.dropdown-icon-wrapper .btn-flat-light ~ .dropdown-menu .dropdown-item:active i,\n.dropup.dropdown-icon-wrapper .btn-light ~ .dropdown-menu .dropdown-item:active i,\n.dropup.dropdown-icon-wrapper .btn-outline-light ~ .dropdown-menu .dropdown-item:active i,\n.dropup.dropdown-icon-wrapper .btn-flat-light ~ .dropdown-menu .dropdown-item:active i,\n.dropright.dropdown-icon-wrapper .btn-light ~ .dropdown-menu .dropdown-item:active i,\n.dropright.dropdown-icon-wrapper .btn-outline-light ~ .dropdown-menu .dropdown-item:active i,\n.dropright.dropdown-icon-wrapper .btn-flat-light ~ .dropdown-menu .dropdown-item:active i,\n.dropleft.dropdown-icon-wrapper .btn-light ~ .dropdown-menu .dropdown-item:active i,\n.dropleft.dropdown-icon-wrapper .btn-outline-light ~ .dropdown-menu .dropdown-item:active i,\n.dropleft.dropdown-icon-wrapper .btn-flat-light ~ .dropdown-menu .dropdown-item:active i {\n  color: #fff; }\n\n.bullet.bullet-light {\n  background-color: #babfc7; }\n\n.pagination-light .page-item.active .page-link {\n  background: #babfc7;\n  color: #fff; }\n  .pagination-light .page-item.active .page-link:hover {\n    color: #fff; }\n\n.pagination-light .page-item .page-link:hover {\n  color: #babfc7; }\n\n.pagination-light .page-item.prev-item .page-link:hover, .pagination-light .page-item.next-item .page-link:hover {\n  background: #babfc7;\n  color: #fff; }\n\n.nav-pill-light .nav-item .nav-link.active {\n  color: #fff;\n  background-color: #babfc7 !important; }\n\n.progress-bar-light {\n  background-color: rgba(186, 191, 199, 0.1); }\n  .progress-bar-light .progress-bar {\n    background-color: #babfc7; }\n\n.chip-light {\n  background-color: #babfc7 !important; }\n  .chip-light .chip-body {\n    color: #fff !important; }\n\n.divider.divider-light .divider-text:before, .divider.divider-light .divider-text:after {\n  border-color: #babfc7 !important; }\n\ninput[type=\"checkbox\"].bg-light + .custom-control-label:before, input[type=\"radio\"].bg-light + .custom-control-label:before {\n  background-color: #babfc7 !important; }\n\ninput:focus ~ .bg-light {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #babfc7 !important; }\n\n.vs-checkbox-light input:checked ~ .vs-checkbox {\n  border-color: #babfc7 !important; }\n  .vs-checkbox-light input:checked ~ .vs-checkbox .vs-checkbox--check {\n    background-color: #babfc7 !important; }\n\n.vs-checkbox-light input:active:checked + .vs-checkbox .vs-checkbox--check {\n  background-color: #babfc7 !important; }\n\n.custom-switch-light .custom-control-input:checked ~ .custom-control-label::before {\n  background-color: #babfc7 !important;\n  color: #fff;\n  transition: all .2s ease-out; }\n\n.vs-radio-light input:checked ~ .vs-radio .vs-radio--circle {\n  background: #babfc7 !important;\n  box-shadow: 0 3px 12px 0 rgba(186, 191, 199, 0.4) !important; }\n\n.light.gradient-bg {\n  color: #640064 !important; }\n\n.bg-light.bg-gradient-bg {\n  background-color: #640064 !important; }\n\n.btn-light.btn-gradient-bg {\n  border-color: !important;\n  background-color: #640064 !important; }\n  .btn-light.btn-gradient-bg:hover {\n    border-color: !important;\n    background-color: !important; }\n  .btn-light.btn-gradient-bg:focus, .btn-light.btn-gradient-bg:active {\n    border-color: !important;\n    background-color: !important; }\n\n.btn-outline-light.btn-outline-gradient-bg {\n  border-color: #640064 !important;\n  color: #640064 !important; }\n  .btn-outline-light.btn-outline-gradient-bg:hover {\n    background-color: #640064 !important; }\n\ninput:focus ~ .bg-light {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #640064 !important; }\n\n.border-light.border-gradient-bg {\n  border: 1px solid #640064 !important; }\n\n.border-top-light.border-top-gradient-bg {\n  border-top: 1px solid #640064 !important; }\n\n.border-bottom-light.border-bottom-gradient-bg {\n  border-bottom: 1px solid #640064 !important; }\n\n.border-left-light.border-left-gradient-bg {\n  border-left: 1px solid #640064 !important; }\n\n.border-right-light.border-right-gradient-bg {\n  border-right: 1px solid #640064 !important; }\n\n.overlay-light.overlay-gradient-bg {\n  background: #640064;\n  /* The Fallback */\n  background: rgba(100, 0, 100, 0.6); }\n\n.primary.gradient-light {\n  color: #ce9ffc !important; }\n\n.bg-primary.bg-gradient-light {\n  background-color: #ce9ffc !important; }\n\n.btn-primary.btn-gradient-light {\n  border-color: #4839eb !important;\n  background-color: #ce9ffc !important; }\n  .btn-primary.btn-gradient-light:hover {\n    border-color: #4839eb !important;\n    background-color: #3321e9 !important; }\n  .btn-primary.btn-gradient-light:focus, .btn-primary.btn-gradient-light:active {\n    border-color: #3321e9 !important;\n    background-color: #2716db !important; }\n\n.btn-outline-primary.btn-outline-gradient-light {\n  border-color: #ce9ffc !important;\n  color: #ce9ffc !important; }\n  .btn-outline-primary.btn-outline-gradient-light:hover {\n    background-color: #ce9ffc !important; }\n\ninput:focus ~ .bg-primary {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #ce9ffc !important; }\n\n.border-primary.border-gradient-light {\n  border: 1px solid #ce9ffc !important; }\n\n.border-top-primary.border-top-gradient-light {\n  border-top: 1px solid #ce9ffc !important; }\n\n.border-bottom-primary.border-bottom-gradient-light {\n  border-bottom: 1px solid #ce9ffc !important; }\n\n.border-left-primary.border-left-gradient-light {\n  border-left: 1px solid #ce9ffc !important; }\n\n.border-right-primary.border-right-gradient-light {\n  border-right: 1px solid #ce9ffc !important; }\n\n.overlay-primary.overlay-gradient-light {\n  background: #ce9ffc;\n  /* The Fallback */\n  background: rgba(206, 159, 252, 0.6); }\n\n.primary.light-badge {\n  color: #dedbfb !important; }\n\n.bg-primary.bg-light-badge {\n  background-color: #dedbfb !important; }\n\n.btn-primary.btn-light-badge {\n  border-color: #4839eb !important;\n  background-color: #dedbfb !important; }\n  .btn-primary.btn-light-badge:hover {\n    border-color: #4839eb !important;\n    background-color: #3321e9 !important; }\n  .btn-primary.btn-light-badge:focus, .btn-primary.btn-light-badge:active {\n    border-color: #3321e9 !important;\n    background-color: #2716db !important; }\n\n.btn-outline-primary.btn-outline-light-badge {\n  border-color: #dedbfb !important;\n  color: #dedbfb !important; }\n  .btn-outline-primary.btn-outline-light-badge:hover {\n    background-color: #dedbfb !important; }\n\ninput:focus ~ .bg-primary {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #dedbfb !important; }\n\n.border-primary.border-light-badge {\n  border: 1px solid #dedbfb !important; }\n\n.border-top-primary.border-top-light-badge {\n  border-top: 1px solid #dedbfb !important; }\n\n.border-bottom-primary.border-bottom-light-badge {\n  border-bottom: 1px solid #dedbfb !important; }\n\n.border-left-primary.border-left-light-badge {\n  border-left: 1px solid #dedbfb !important; }\n\n.border-right-primary.border-right-light-badge {\n  border-right: 1px solid #dedbfb !important; }\n\n.overlay-primary.overlay-light-badge {\n  background: #dedbfb;\n  /* The Fallback */\n  background: rgba(222, 219, 251, 0.6); }\n\n.primary.lighten-5 {\n  color: #dedbfb !important; }\n\n.bg-primary.bg-lighten-5 {\n  background-color: #dedbfb !important; }\n\n.btn-primary.btn-lighten-5 {\n  border-color: #4839eb !important;\n  background-color: #dedbfb !important; }\n  .btn-primary.btn-lighten-5:hover {\n    border-color: #4839eb !important;\n    background-color: #3321e9 !important; }\n  .btn-primary.btn-lighten-5:focus, .btn-primary.btn-lighten-5:active {\n    border-color: #3321e9 !important;\n    background-color: #2716db !important; }\n\n.btn-outline-primary.btn-outline-lighten-5 {\n  border-color: #dedbfb !important;\n  color: #dedbfb !important; }\n  .btn-outline-primary.btn-outline-lighten-5:hover {\n    background-color: #dedbfb !important; }\n\ninput:focus ~ .bg-primary {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #dedbfb !important; }\n\n.border-primary.border-lighten-5 {\n  border: 1px solid #dedbfb !important; }\n\n.border-top-primary.border-top-lighten-5 {\n  border-top: 1px solid #dedbfb !important; }\n\n.border-bottom-primary.border-bottom-lighten-5 {\n  border-bottom: 1px solid #dedbfb !important; }\n\n.border-left-primary.border-left-lighten-5 {\n  border-left: 1px solid #dedbfb !important; }\n\n.border-right-primary.border-right-lighten-5 {\n  border-right: 1px solid #dedbfb !important; }\n\n.overlay-primary.overlay-lighten-5 {\n  background: #dedbfb;\n  /* The Fallback */\n  background: rgba(222, 219, 251, 0.6); }\n\n.primary.lighten-4 {\n  color: #c9c4f9 !important; }\n\n.bg-primary.bg-lighten-4 {\n  background-color: #c9c4f9 !important; }\n\n.btn-primary.btn-lighten-4 {\n  border-color: #4839eb !important;\n  background-color: #c9c4f9 !important; }\n  .btn-primary.btn-lighten-4:hover {\n    border-color: #4839eb !important;\n    background-color: #3321e9 !important; }\n  .btn-primary.btn-lighten-4:focus, .btn-primary.btn-lighten-4:active {\n    border-color: #3321e9 !important;\n    background-color: #2716db !important; }\n\n.btn-outline-primary.btn-outline-lighten-4 {\n  border-color: #c9c4f9 !important;\n  color: #c9c4f9 !important; }\n  .btn-outline-primary.btn-outline-lighten-4:hover {\n    background-color: #c9c4f9 !important; }\n\ninput:focus ~ .bg-primary {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #c9c4f9 !important; }\n\n.border-primary.border-lighten-4 {\n  border: 1px solid #c9c4f9 !important; }\n\n.border-top-primary.border-top-lighten-4 {\n  border-top: 1px solid #c9c4f9 !important; }\n\n.border-bottom-primary.border-bottom-lighten-4 {\n  border-bottom: 1px solid #c9c4f9 !important; }\n\n.border-left-primary.border-left-lighten-4 {\n  border-left: 1px solid #c9c4f9 !important; }\n\n.border-right-primary.border-right-lighten-4 {\n  border-right: 1px solid #c9c4f9 !important; }\n\n.overlay-primary.overlay-lighten-4 {\n  background: #c9c4f9;\n  /* The Fallback */\n  background: rgba(201, 196, 249, 0.6); }\n\n.primary.lighten-3 {\n  color: #b3adf7 !important; }\n\n.bg-primary.bg-lighten-3 {\n  background-color: #b3adf7 !important; }\n\n.btn-primary.btn-lighten-3 {\n  border-color: #4839eb !important;\n  background-color: #b3adf7 !important; }\n  .btn-primary.btn-lighten-3:hover {\n    border-color: #4839eb !important;\n    background-color: #3321e9 !important; }\n  .btn-primary.btn-lighten-3:focus, .btn-primary.btn-lighten-3:active {\n    border-color: #3321e9 !important;\n    background-color: #2716db !important; }\n\n.btn-outline-primary.btn-outline-lighten-3 {\n  border-color: #b3adf7 !important;\n  color: #b3adf7 !important; }\n  .btn-outline-primary.btn-outline-lighten-3:hover {\n    background-color: #b3adf7 !important; }\n\ninput:focus ~ .bg-primary {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #b3adf7 !important; }\n\n.border-primary.border-lighten-3 {\n  border: 1px solid #b3adf7 !important; }\n\n.border-top-primary.border-top-lighten-3 {\n  border-top: 1px solid #b3adf7 !important; }\n\n.border-bottom-primary.border-bottom-lighten-3 {\n  border-bottom: 1px solid #b3adf7 !important; }\n\n.border-left-primary.border-left-lighten-3 {\n  border-left: 1px solid #b3adf7 !important; }\n\n.border-right-primary.border-right-lighten-3 {\n  border-right: 1px solid #b3adf7 !important; }\n\n.overlay-primary.overlay-lighten-3 {\n  background: #b3adf7;\n  /* The Fallback */\n  background: rgba(179, 173, 247, 0.6); }\n\n.primary.lighten-2 {\n  color: #9e95f5 !important; }\n\n.bg-primary.bg-lighten-2 {\n  background-color: #9e95f5 !important; }\n\n.btn-primary.btn-lighten-2 {\n  border-color: #4839eb !important;\n  background-color: #9e95f5 !important; }\n  .btn-primary.btn-lighten-2:hover {\n    border-color: #4839eb !important;\n    background-color: #3321e9 !important; }\n  .btn-primary.btn-lighten-2:focus, .btn-primary.btn-lighten-2:active {\n    border-color: #3321e9 !important;\n    background-color: #2716db !important; }\n\n.btn-outline-primary.btn-outline-lighten-2 {\n  border-color: #9e95f5 !important;\n  color: #9e95f5 !important; }\n  .btn-outline-primary.btn-outline-lighten-2:hover {\n    background-color: #9e95f5 !important; }\n\ninput:focus ~ .bg-primary {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #9e95f5 !important; }\n\n.border-primary.border-lighten-2 {\n  border: 1px solid #9e95f5 !important; }\n\n.border-top-primary.border-top-lighten-2 {\n  border-top: 1px solid #9e95f5 !important; }\n\n.border-bottom-primary.border-bottom-lighten-2 {\n  border-bottom: 1px solid #9e95f5 !important; }\n\n.border-left-primary.border-left-lighten-2 {\n  border-left: 1px solid #9e95f5 !important; }\n\n.border-right-primary.border-right-lighten-2 {\n  border-right: 1px solid #9e95f5 !important; }\n\n.overlay-primary.overlay-lighten-2 {\n  background: #9e95f5;\n  /* The Fallback */\n  background: rgba(158, 149, 245, 0.6); }\n\n.primary.lighten-1 {\n  color: #887ef2 !important; }\n\n.bg-primary.bg-lighten-1 {\n  background-color: #887ef2 !important; }\n\n.btn-primary.btn-lighten-1 {\n  border-color: #4839eb !important;\n  background-color: #887ef2 !important; }\n  .btn-primary.btn-lighten-1:hover {\n    border-color: #4839eb !important;\n    background-color: #3321e9 !important; }\n  .btn-primary.btn-lighten-1:focus, .btn-primary.btn-lighten-1:active {\n    border-color: #3321e9 !important;\n    background-color: #2716db !important; }\n\n.btn-outline-primary.btn-outline-lighten-1 {\n  border-color: #887ef2 !important;\n  color: #887ef2 !important; }\n  .btn-outline-primary.btn-outline-lighten-1:hover {\n    background-color: #887ef2 !important; }\n\ninput:focus ~ .bg-primary {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #887ef2 !important; }\n\n.border-primary.border-lighten-1 {\n  border: 1px solid #887ef2 !important; }\n\n.border-top-primary.border-top-lighten-1 {\n  border-top: 1px solid #887ef2 !important; }\n\n.border-bottom-primary.border-bottom-lighten-1 {\n  border-bottom: 1px solid #887ef2 !important; }\n\n.border-left-primary.border-left-lighten-1 {\n  border-left: 1px solid #887ef2 !important; }\n\n.border-right-primary.border-right-lighten-1 {\n  border-right: 1px solid #887ef2 !important; }\n\n.overlay-primary.overlay-lighten-1 {\n  background: #887ef2;\n  /* The Fallback */\n  background: rgba(136, 126, 242, 0.6); }\n\n.primary {\n  color: #7367f0 !important; }\n\n.bg-primary {\n  background-color: #7367f0 !important; }\n  .bg-primary .card-header,\n  .bg-primary .card-footer {\n    background-color: transparent; }\n\n.alert-primary {\n  background: rgba(115, 103, 240, 0.2) !important;\n  color: #7367f0 !important; }\n  .alert-primary .alert-heading {\n    box-shadow: rgba(115, 103, 240, 0.4) 0px 6px 15px -7px; }\n  .alert-primary .alert-link {\n    color: #5e50ee !important; }\n\n.bg-rgba-primary {\n  background: rgba(115, 103, 240, 0.15) !important; }\n\n.border-primary {\n  border: 1px solid #7367f0 !important; }\n\n.border-top-primary {\n  border-top: 1px solid #7367f0; }\n\n.border-bottom-primary {\n  border-bottom: 1px solid #7367f0; }\n\n.border-left-primary {\n  border-left: 1px solid #7367f0; }\n\n.border-right-primary {\n  border-right: 1px solid #7367f0; }\n\n.bg-primary.badge-glow,\n.border-primary.badge-glow,\n.badge-primary.badge-glow {\n  box-shadow: 0px 0px 10px #7367f0; }\n\n.badge.badge-primary {\n  background-color: #7367f0; }\n\n.badge.badge-light-primary {\n  background-color: #dedbfb;\n  color: #7367f0 !important;\n  font-weight: 500; }\n\n.overlay-primary {\n  background: #7367f0;\n  /* The Fallback */\n  background: rgba(115, 103, 240, 0.6); }\n\n.btn-primary {\n  border-color: #4839eb !important;\n  background-color: #7367f0 !important;\n  color: #fff; }\n  .btn-primary:hover {\n    border-color: #5e50ee !important;\n    color: #fff !important;\n    box-shadow: 0 8px 25px -8px #7367f0; }\n  .btn-primary:focus, .btn-primary:active {\n    color: #fff !important; }\n\n.btn-flat-primary {\n  background-color: transparent;\n  color: #7367f0; }\n  .btn-flat-primary:hover {\n    color: #7367f0;\n    background-color: rgba(115, 103, 240, 0.1); }\n  .btn-flat-primary:active, .btn-flat-primary:focus {\n    background-color: #7367f0;\n    color: #fff !important; }\n\n.btn-relief-primary {\n  background-color: #7367f0;\n  box-shadow: inset 0 -3px 0 0 rgba(0, 0, 0, 0.2);\n  color: #fff; }\n  .btn-relief-primary:hover {\n    color: #fff; }\n  .btn-relief-primary:active, .btn-relief-primary:focus {\n    outline: none;\n    transform: translateY(3px); }\n\n.btn-outline-primary {\n  border: 1px solid #7367f0;\n  background-color: transparent;\n  color: #7367f0; }\n  .btn-outline-primary:hover {\n    background-color: rgba(115, 103, 240, 0.08);\n    color: #7367f0; }\n  .btn-outline-primary:active {\n    color: #fff !important; }\n\n.btn-primary ~ .dropdown-menu .dropdown-item.active,\n.btn-outline-primary ~ .dropdown-menu .dropdown-item.active,\n.btn-flat-primary ~ .dropdown-menu .dropdown-item.active {\n  background-color: #7367f0;\n  color: #fff; }\n  .btn-primary ~ .dropdown-menu .dropdown-item.active:hover,\n  .btn-outline-primary ~ .dropdown-menu .dropdown-item.active:hover,\n  .btn-flat-primary ~ .dropdown-menu .dropdown-item.active:hover {\n    color: #fff; }\n\n.btn-primary ~ .dropdown-menu .dropdown-item:not(.active):not(:active):hover,\n.btn-outline-primary ~ .dropdown-menu .dropdown-item:not(.active):not(:active):hover,\n.btn-flat-primary ~ .dropdown-menu .dropdown-item:not(.active):not(:active):hover {\n  color: #7367f0; }\n\n.dropdown.dropdown-icon-wrapper .btn-primary ~ .dropdown-menu .dropdown-item:hover i,\n.dropdown.dropdown-icon-wrapper .btn-outline-primary ~ .dropdown-menu .dropdown-item:hover i,\n.dropdown.dropdown-icon-wrapper .btn-flat-primary ~ .dropdown-menu .dropdown-item:hover i,\n.dropup.dropdown-icon-wrapper .btn-primary ~ .dropdown-menu .dropdown-item:hover i,\n.dropup.dropdown-icon-wrapper .btn-outline-primary ~ .dropdown-menu .dropdown-item:hover i,\n.dropup.dropdown-icon-wrapper .btn-flat-primary ~ .dropdown-menu .dropdown-item:hover i,\n.dropright.dropdown-icon-wrapper .btn-primary ~ .dropdown-menu .dropdown-item:hover i,\n.dropright.dropdown-icon-wrapper .btn-outline-primary ~ .dropdown-menu .dropdown-item:hover i,\n.dropright.dropdown-icon-wrapper .btn-flat-primary ~ .dropdown-menu .dropdown-item:hover i,\n.dropleft.dropdown-icon-wrapper .btn-primary ~ .dropdown-menu .dropdown-item:hover i,\n.dropleft.dropdown-icon-wrapper .btn-outline-primary ~ .dropdown-menu .dropdown-item:hover i,\n.dropleft.dropdown-icon-wrapper .btn-flat-primary ~ .dropdown-menu .dropdown-item:hover i {\n  color: #7367f0; }\n\n.dropdown.dropdown-icon-wrapper .btn-primary ~ .dropdown-menu .dropdown-item:active i,\n.dropdown.dropdown-icon-wrapper .btn-outline-primary ~ .dropdown-menu .dropdown-item:active i,\n.dropdown.dropdown-icon-wrapper .btn-flat-primary ~ .dropdown-menu .dropdown-item:active i,\n.dropup.dropdown-icon-wrapper .btn-primary ~ .dropdown-menu .dropdown-item:active i,\n.dropup.dropdown-icon-wrapper .btn-outline-primary ~ .dropdown-menu .dropdown-item:active i,\n.dropup.dropdown-icon-wrapper .btn-flat-primary ~ .dropdown-menu .dropdown-item:active i,\n.dropright.dropdown-icon-wrapper .btn-primary ~ .dropdown-menu .dropdown-item:active i,\n.dropright.dropdown-icon-wrapper .btn-outline-primary ~ .dropdown-menu .dropdown-item:active i,\n.dropright.dropdown-icon-wrapper .btn-flat-primary ~ .dropdown-menu .dropdown-item:active i,\n.dropleft.dropdown-icon-wrapper .btn-primary ~ .dropdown-menu .dropdown-item:active i,\n.dropleft.dropdown-icon-wrapper .btn-outline-primary ~ .dropdown-menu .dropdown-item:active i,\n.dropleft.dropdown-icon-wrapper .btn-flat-primary ~ .dropdown-menu .dropdown-item:active i {\n  color: #fff; }\n\n.bullet.bullet-primary {\n  background-color: #7367f0; }\n\n.pagination-primary .page-item.active .page-link {\n  background: #7367f0;\n  color: #fff; }\n  .pagination-primary .page-item.active .page-link:hover {\n    color: #fff; }\n\n.pagination-primary .page-item .page-link:hover {\n  color: #7367f0; }\n\n.pagination-primary .page-item.prev-item .page-link:hover, .pagination-primary .page-item.next-item .page-link:hover {\n  background: #7367f0;\n  color: #fff; }\n\n.nav-pill-primary .nav-item .nav-link.active {\n  color: #fff;\n  background-color: #7367f0 !important; }\n\n.progress-bar-primary {\n  background-color: rgba(115, 103, 240, 0.1); }\n  .progress-bar-primary .progress-bar {\n    background-color: #7367f0; }\n\n.chip-primary {\n  background-color: #7367f0 !important; }\n  .chip-primary .chip-body {\n    color: #fff !important; }\n\n.divider.divider-primary .divider-text:before, .divider.divider-primary .divider-text:after {\n  border-color: #7367f0 !important; }\n\ninput[type=\"checkbox\"].bg-primary + .custom-control-label:before, input[type=\"radio\"].bg-primary + .custom-control-label:before {\n  background-color: #7367f0 !important; }\n\ninput:focus ~ .bg-primary {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #7367f0 !important; }\n\n.vs-checkbox-primary input:checked ~ .vs-checkbox {\n  border-color: #7367f0 !important; }\n  .vs-checkbox-primary input:checked ~ .vs-checkbox .vs-checkbox--check {\n    background-color: #7367f0 !important; }\n\n.vs-checkbox-primary input:active:checked + .vs-checkbox .vs-checkbox--check {\n  background-color: #7367f0 !important; }\n\n.custom-switch-primary .custom-control-input:checked ~ .custom-control-label::before {\n  background-color: #7367f0 !important;\n  color: #fff;\n  transition: all .2s ease-out; }\n\n.vs-radio-primary input:checked ~ .vs-radio .vs-radio--circle {\n  background: #7367f0 !important;\n  box-shadow: 0 3px 12px 0 rgba(115, 103, 240, 0.4) !important; }\n\n.primary.darken-1 {\n  color: #5e50ee !important; }\n\n.bg-primary.bg-darken-1 {\n  background-color: #5e50ee !important; }\n\n.btn-primary.btn-darken-1 {\n  border-color: #4839eb !important;\n  background-color: #5e50ee !important; }\n  .btn-primary.btn-darken-1:hover {\n    border-color: #4839eb !important;\n    background-color: #3321e9 !important; }\n  .btn-primary.btn-darken-1:focus, .btn-primary.btn-darken-1:active {\n    border-color: #3321e9 !important;\n    background-color: #2716db !important; }\n\n.btn-outline-primary.btn-outline-darken-1 {\n  border-color: #5e50ee !important;\n  color: #5e50ee !important; }\n  .btn-outline-primary.btn-outline-darken-1:hover {\n    background-color: #5e50ee !important; }\n\ninput:focus ~ .bg-primary {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #5e50ee !important; }\n\n.border-primary.border-darken-1 {\n  border: 1px solid #5e50ee !important; }\n\n.border-top-primary.border-top-darken-1 {\n  border-top: 1px solid #5e50ee !important; }\n\n.border-bottom-primary.border-bottom-darken-1 {\n  border-bottom: 1px solid #5e50ee !important; }\n\n.border-left-primary.border-left-darken-1 {\n  border-left: 1px solid #5e50ee !important; }\n\n.border-right-primary.border-right-darken-1 {\n  border-right: 1px solid #5e50ee !important; }\n\n.overlay-primary.overlay-darken-1 {\n  background: #5e50ee;\n  /* The Fallback */\n  background: rgba(94, 80, 238, 0.6); }\n\n.primary.darken-2 {\n  color: #4839eb !important; }\n\n.bg-primary.bg-darken-2 {\n  background-color: #4839eb !important; }\n\n.btn-primary.btn-darken-2 {\n  border-color: #4839eb !important;\n  background-color: #4839eb !important; }\n  .btn-primary.btn-darken-2:hover {\n    border-color: #4839eb !important;\n    background-color: #3321e9 !important; }\n  .btn-primary.btn-darken-2:focus, .btn-primary.btn-darken-2:active {\n    border-color: #3321e9 !important;\n    background-color: #2716db !important; }\n\n.btn-outline-primary.btn-outline-darken-2 {\n  border-color: #4839eb !important;\n  color: #4839eb !important; }\n  .btn-outline-primary.btn-outline-darken-2:hover {\n    background-color: #4839eb !important; }\n\ninput:focus ~ .bg-primary {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #4839eb !important; }\n\n.border-primary.border-darken-2 {\n  border: 1px solid #4839eb !important; }\n\n.border-top-primary.border-top-darken-2 {\n  border-top: 1px solid #4839eb !important; }\n\n.border-bottom-primary.border-bottom-darken-2 {\n  border-bottom: 1px solid #4839eb !important; }\n\n.border-left-primary.border-left-darken-2 {\n  border-left: 1px solid #4839eb !important; }\n\n.border-right-primary.border-right-darken-2 {\n  border-right: 1px solid #4839eb !important; }\n\n.overlay-primary.overlay-darken-2 {\n  background: #4839eb;\n  /* The Fallback */\n  background: rgba(72, 57, 235, 0.6); }\n\n.primary.darken-3 {\n  color: #3321e9 !important; }\n\n.bg-primary.bg-darken-3 {\n  background-color: #3321e9 !important; }\n\n.btn-primary.btn-darken-3 {\n  border-color: #4839eb !important;\n  background-color: #3321e9 !important; }\n  .btn-primary.btn-darken-3:hover {\n    border-color: #4839eb !important;\n    background-color: #3321e9 !important; }\n  .btn-primary.btn-darken-3:focus, .btn-primary.btn-darken-3:active {\n    border-color: #3321e9 !important;\n    background-color: #2716db !important; }\n\n.btn-outline-primary.btn-outline-darken-3 {\n  border-color: #3321e9 !important;\n  color: #3321e9 !important; }\n  .btn-outline-primary.btn-outline-darken-3:hover {\n    background-color: #3321e9 !important; }\n\ninput:focus ~ .bg-primary {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #3321e9 !important; }\n\n.border-primary.border-darken-3 {\n  border: 1px solid #3321e9 !important; }\n\n.border-top-primary.border-top-darken-3 {\n  border-top: 1px solid #3321e9 !important; }\n\n.border-bottom-primary.border-bottom-darken-3 {\n  border-bottom: 1px solid #3321e9 !important; }\n\n.border-left-primary.border-left-darken-3 {\n  border-left: 1px solid #3321e9 !important; }\n\n.border-right-primary.border-right-darken-3 {\n  border-right: 1px solid #3321e9 !important; }\n\n.overlay-primary.overlay-darken-3 {\n  background: #3321e9;\n  /* The Fallback */\n  background: rgba(51, 33, 233, 0.6); }\n\n.primary.darken-4 {\n  color: #2716db !important; }\n\n.bg-primary.bg-darken-4 {\n  background-color: #2716db !important; }\n\n.btn-primary.btn-darken-4 {\n  border-color: #4839eb !important;\n  background-color: #2716db !important; }\n  .btn-primary.btn-darken-4:hover {\n    border-color: #4839eb !important;\n    background-color: #3321e9 !important; }\n  .btn-primary.btn-darken-4:focus, .btn-primary.btn-darken-4:active {\n    border-color: #3321e9 !important;\n    background-color: #2716db !important; }\n\n.btn-outline-primary.btn-outline-darken-4 {\n  border-color: #2716db !important;\n  color: #2716db !important; }\n  .btn-outline-primary.btn-outline-darken-4:hover {\n    background-color: #2716db !important; }\n\ninput:focus ~ .bg-primary {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #2716db !important; }\n\n.border-primary.border-darken-4 {\n  border: 1px solid #2716db !important; }\n\n.border-top-primary.border-top-darken-4 {\n  border-top: 1px solid #2716db !important; }\n\n.border-bottom-primary.border-bottom-darken-4 {\n  border-bottom: 1px solid #2716db !important; }\n\n.border-left-primary.border-left-darken-4 {\n  border-left: 1px solid #2716db !important; }\n\n.border-right-primary.border-right-darken-4 {\n  border-right: 1px solid #2716db !important; }\n\n.overlay-primary.overlay-darken-4 {\n  background: #2716db;\n  /* The Fallback */\n  background: rgba(39, 22, 219, 0.6); }\n\n.primary.accent-1 {\n  color: #BDFDFF !important; }\n\n.bg-primary.bg-accent-1 {\n  background-color: #BDFDFF !important; }\n\n.btn-primary.btn-accent-1 {\n  border-color: #4839eb !important;\n  background-color: #BDFDFF !important; }\n  .btn-primary.btn-accent-1:hover {\n    border-color: #4839eb !important;\n    background-color: #3321e9 !important; }\n  .btn-primary.btn-accent-1:focus, .btn-primary.btn-accent-1:active {\n    border-color: #3321e9 !important;\n    background-color: #2716db !important; }\n\n.btn-outline-primary.btn-outline-accent-1 {\n  border-color: #BDFDFF !important;\n  color: #BDFDFF !important; }\n  .btn-outline-primary.btn-outline-accent-1:hover {\n    background-color: #BDFDFF !important; }\n\ninput:focus ~ .bg-primary {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #BDFDFF !important; }\n\n.border-primary.border-accent-1 {\n  border: 1px solid #BDFDFF !important; }\n\n.border-top-primary.border-top-accent-1 {\n  border-top: 1px solid #BDFDFF !important; }\n\n.border-bottom-primary.border-bottom-accent-1 {\n  border-bottom: 1px solid #BDFDFF !important; }\n\n.border-left-primary.border-left-accent-1 {\n  border-left: 1px solid #BDFDFF !important; }\n\n.border-right-primary.border-right-accent-1 {\n  border-right: 1px solid #BDFDFF !important; }\n\n.overlay-primary.overlay-accent-1 {\n  background: #BDFDFF;\n  /* The Fallback */\n  background: rgba(189, 253, 255, 0.6); }\n\n.primary.accent-2 {\n  color: #8AFBFF !important; }\n\n.bg-primary.bg-accent-2 {\n  background-color: #8AFBFF !important; }\n\n.btn-primary.btn-accent-2 {\n  border-color: #4839eb !important;\n  background-color: #8AFBFF !important; }\n  .btn-primary.btn-accent-2:hover {\n    border-color: #4839eb !important;\n    background-color: #3321e9 !important; }\n  .btn-primary.btn-accent-2:focus, .btn-primary.btn-accent-2:active {\n    border-color: #3321e9 !important;\n    background-color: #2716db !important; }\n\n.btn-outline-primary.btn-outline-accent-2 {\n  border-color: #8AFBFF !important;\n  color: #8AFBFF !important; }\n  .btn-outline-primary.btn-outline-accent-2:hover {\n    background-color: #8AFBFF !important; }\n\ninput:focus ~ .bg-primary {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #8AFBFF !important; }\n\n.border-primary.border-accent-2 {\n  border: 1px solid #8AFBFF !important; }\n\n.border-top-primary.border-top-accent-2 {\n  border-top: 1px solid #8AFBFF !important; }\n\n.border-bottom-primary.border-bottom-accent-2 {\n  border-bottom: 1px solid #8AFBFF !important; }\n\n.border-left-primary.border-left-accent-2 {\n  border-left: 1px solid #8AFBFF !important; }\n\n.border-right-primary.border-right-accent-2 {\n  border-right: 1px solid #8AFBFF !important; }\n\n.overlay-primary.overlay-accent-2 {\n  background: #8AFBFF;\n  /* The Fallback */\n  background: rgba(138, 251, 255, 0.6); }\n\n.primary.accent-3 {\n  color: #57FAFF !important; }\n\n.bg-primary.bg-accent-3 {\n  background-color: #57FAFF !important; }\n\n.btn-primary.btn-accent-3 {\n  border-color: #4839eb !important;\n  background-color: #57FAFF !important; }\n  .btn-primary.btn-accent-3:hover {\n    border-color: #4839eb !important;\n    background-color: #3321e9 !important; }\n  .btn-primary.btn-accent-3:focus, .btn-primary.btn-accent-3:active {\n    border-color: #3321e9 !important;\n    background-color: #2716db !important; }\n\n.btn-outline-primary.btn-outline-accent-3 {\n  border-color: #57FAFF !important;\n  color: #57FAFF !important; }\n  .btn-outline-primary.btn-outline-accent-3:hover {\n    background-color: #57FAFF !important; }\n\ninput:focus ~ .bg-primary {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #57FAFF !important; }\n\n.border-primary.border-accent-3 {\n  border: 1px solid #57FAFF !important; }\n\n.border-top-primary.border-top-accent-3 {\n  border-top: 1px solid #57FAFF !important; }\n\n.border-bottom-primary.border-bottom-accent-3 {\n  border-bottom: 1px solid #57FAFF !important; }\n\n.border-left-primary.border-left-accent-3 {\n  border-left: 1px solid #57FAFF !important; }\n\n.border-right-primary.border-right-accent-3 {\n  border-right: 1px solid #57FAFF !important; }\n\n.overlay-primary.overlay-accent-3 {\n  background: #57FAFF;\n  /* The Fallback */\n  background: rgba(87, 250, 255, 0.6); }\n\n.primary.accent-4 {\n  color: #3DF9FF !important; }\n\n.bg-primary.bg-accent-4 {\n  background-color: #3DF9FF !important; }\n\n.btn-primary.btn-accent-4 {\n  border-color: #4839eb !important;\n  background-color: #3DF9FF !important; }\n  .btn-primary.btn-accent-4:hover {\n    border-color: #4839eb !important;\n    background-color: #3321e9 !important; }\n  .btn-primary.btn-accent-4:focus, .btn-primary.btn-accent-4:active {\n    border-color: #3321e9 !important;\n    background-color: #2716db !important; }\n\n.btn-outline-primary.btn-outline-accent-4 {\n  border-color: #3DF9FF !important;\n  color: #3DF9FF !important; }\n  .btn-outline-primary.btn-outline-accent-4:hover {\n    background-color: #3DF9FF !important; }\n\ninput:focus ~ .bg-primary {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #3DF9FF !important; }\n\n.border-primary.border-accent-4 {\n  border: 1px solid #3DF9FF !important; }\n\n.border-top-primary.border-top-accent-4 {\n  border-top: 1px solid #3DF9FF !important; }\n\n.border-bottom-primary.border-bottom-accent-4 {\n  border-bottom: 1px solid #3DF9FF !important; }\n\n.border-left-primary.border-left-accent-4 {\n  border-left: 1px solid #3DF9FF !important; }\n\n.border-right-primary.border-right-accent-4 {\n  border-right: 1px solid #3DF9FF !important; }\n\n.overlay-primary.overlay-accent-4 {\n  background: #3DF9FF;\n  /* The Fallback */\n  background: rgba(61, 249, 255, 0.6); }\n\n.primary.gradient-bg {\n  color: #640064 !important; }\n\n.bg-primary.bg-gradient-bg {\n  background-color: #640064 !important; }\n\n.btn-primary.btn-gradient-bg {\n  border-color: #4839eb !important;\n  background-color: #640064 !important; }\n  .btn-primary.btn-gradient-bg:hover {\n    border-color: #4839eb !important;\n    background-color: #3321e9 !important; }\n  .btn-primary.btn-gradient-bg:focus, .btn-primary.btn-gradient-bg:active {\n    border-color: #3321e9 !important;\n    background-color: #2716db !important; }\n\n.btn-outline-primary.btn-outline-gradient-bg {\n  border-color: #640064 !important;\n  color: #640064 !important; }\n  .btn-outline-primary.btn-outline-gradient-bg:hover {\n    background-color: #640064 !important; }\n\ninput:focus ~ .bg-primary {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #640064 !important; }\n\n.border-primary.border-gradient-bg {\n  border: 1px solid #640064 !important; }\n\n.border-top-primary.border-top-gradient-bg {\n  border-top: 1px solid #640064 !important; }\n\n.border-bottom-primary.border-bottom-gradient-bg {\n  border-bottom: 1px solid #640064 !important; }\n\n.border-left-primary.border-left-gradient-bg {\n  border-left: 1px solid #640064 !important; }\n\n.border-right-primary.border-right-gradient-bg {\n  border-right: 1px solid #640064 !important; }\n\n.overlay-primary.overlay-gradient-bg {\n  background: #640064;\n  /* The Fallback */\n  background: rgba(100, 0, 100, 0.6); }\n\n.secondary.gradient-light {\n  color: #dcdeec !important; }\n\n.bg-secondary.bg-gradient-light {\n  background-color: #dcdeec !important; }\n\n.btn-secondary.btn-gradient-light {\n  border-color: #9aa9b7 !important;\n  background-color: #dcdeec !important; }\n  .btn-secondary.btn-gradient-light:hover {\n    border-color: #9aa9b7 !important;\n    background-color: #8b9cac !important; }\n  .btn-secondary.btn-gradient-light:focus, .btn-secondary.btn-gradient-light:active {\n    border-color: #8b9cac !important;\n    background-color: #7d8fa1 !important; }\n\n.btn-outline-secondary.btn-outline-gradient-light {\n  border-color: #dcdeec !important;\n  color: #dcdeec !important; }\n  .btn-outline-secondary.btn-outline-gradient-light:hover {\n    background-color: #dcdeec !important; }\n\ninput:focus ~ .bg-secondary {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #dcdeec !important; }\n\n.border-secondary.border-gradient-light {\n  border: 1px solid #dcdeec !important; }\n\n.border-top-secondary.border-top-gradient-light {\n  border-top: 1px solid #dcdeec !important; }\n\n.border-bottom-secondary.border-bottom-gradient-light {\n  border-bottom: 1px solid #dcdeec !important; }\n\n.border-left-secondary.border-left-gradient-light {\n  border-left: 1px solid #dcdeec !important; }\n\n.border-right-secondary.border-right-gradient-light {\n  border-right: 1px solid #dcdeec !important; }\n\n.overlay-secondary.overlay-gradient-light {\n  background: #dcdeec;\n  /* The Fallback */\n  background: rgba(220, 222, 236, 0.6); }\n\n.secondary.light-badge {\n  color: white !important; }\n\n.bg-secondary.bg-light-badge {\n  background-color: white !important; }\n\n.btn-secondary.btn-light-badge {\n  border-color: #9aa9b7 !important;\n  background-color: white !important; }\n  .btn-secondary.btn-light-badge:hover {\n    border-color: #9aa9b7 !important;\n    background-color: #8b9cac !important; }\n  .btn-secondary.btn-light-badge:focus, .btn-secondary.btn-light-badge:active {\n    border-color: #8b9cac !important;\n    background-color: #7d8fa1 !important; }\n\n.btn-outline-secondary.btn-outline-light-badge {\n  border-color: white !important;\n  color: white !important; }\n  .btn-outline-secondary.btn-outline-light-badge:hover {\n    background-color: white !important; }\n\ninput:focus ~ .bg-secondary {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem white !important; }\n\n.border-secondary.border-light-badge {\n  border: 1px solid white !important; }\n\n.border-top-secondary.border-top-light-badge {\n  border-top: 1px solid white !important; }\n\n.border-bottom-secondary.border-bottom-light-badge {\n  border-bottom: 1px solid white !important; }\n\n.border-left-secondary.border-left-light-badge {\n  border-left: 1px solid white !important; }\n\n.border-right-secondary.border-right-light-badge {\n  border-right: 1px solid white !important; }\n\n.overlay-secondary.overlay-light-badge {\n  background: white;\n  /* The Fallback */\n  background: rgba(255, 255, 255, 0.6); }\n\n.secondary.lighten-5 {\n  color: white !important; }\n\n.bg-secondary.bg-lighten-5 {\n  background-color: white !important; }\n\n.btn-secondary.btn-lighten-5 {\n  border-color: #9aa9b7 !important;\n  background-color: white !important; }\n  .btn-secondary.btn-lighten-5:hover {\n    border-color: #9aa9b7 !important;\n    background-color: #8b9cac !important; }\n  .btn-secondary.btn-lighten-5:focus, .btn-secondary.btn-lighten-5:active {\n    border-color: #8b9cac !important;\n    background-color: #7d8fa1 !important; }\n\n.btn-outline-secondary.btn-outline-lighten-5 {\n  border-color: white !important;\n  color: white !important; }\n  .btn-outline-secondary.btn-outline-lighten-5:hover {\n    background-color: white !important; }\n\ninput:focus ~ .bg-secondary {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem white !important; }\n\n.border-secondary.border-lighten-5 {\n  border: 1px solid white !important; }\n\n.border-top-secondary.border-top-lighten-5 {\n  border-top: 1px solid white !important; }\n\n.border-bottom-secondary.border-bottom-lighten-5 {\n  border-bottom: 1px solid white !important; }\n\n.border-left-secondary.border-left-lighten-5 {\n  border-left: 1px solid white !important; }\n\n.border-right-secondary.border-right-lighten-5 {\n  border-right: 1px solid white !important; }\n\n.overlay-secondary.overlay-lighten-5 {\n  background: white;\n  /* The Fallback */\n  background: rgba(255, 255, 255, 0.6); }\n\n.secondary.lighten-4 {\n  color: #f3f5f7 !important; }\n\n.bg-secondary.bg-lighten-4 {\n  background-color: #f3f5f7 !important; }\n\n.btn-secondary.btn-lighten-4 {\n  border-color: #9aa9b7 !important;\n  background-color: #f3f5f7 !important; }\n  .btn-secondary.btn-lighten-4:hover {\n    border-color: #9aa9b7 !important;\n    background-color: #8b9cac !important; }\n  .btn-secondary.btn-lighten-4:focus, .btn-secondary.btn-lighten-4:active {\n    border-color: #8b9cac !important;\n    background-color: #7d8fa1 !important; }\n\n.btn-outline-secondary.btn-outline-lighten-4 {\n  border-color: #f3f5f7 !important;\n  color: #f3f5f7 !important; }\n  .btn-outline-secondary.btn-outline-lighten-4:hover {\n    background-color: #f3f5f7 !important; }\n\ninput:focus ~ .bg-secondary {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #f3f5f7 !important; }\n\n.border-secondary.border-lighten-4 {\n  border: 1px solid #f3f5f7 !important; }\n\n.border-top-secondary.border-top-lighten-4 {\n  border-top: 1px solid #f3f5f7 !important; }\n\n.border-bottom-secondary.border-bottom-lighten-4 {\n  border-bottom: 1px solid #f3f5f7 !important; }\n\n.border-left-secondary.border-left-lighten-4 {\n  border-left: 1px solid #f3f5f7 !important; }\n\n.border-right-secondary.border-right-lighten-4 {\n  border-right: 1px solid #f3f5f7 !important; }\n\n.overlay-secondary.overlay-lighten-4 {\n  background: #f3f5f7;\n  /* The Fallback */\n  background: rgba(243, 245, 247, 0.6); }\n\n.secondary.lighten-3 {\n  color: #e5e8ec !important; }\n\n.bg-secondary.bg-lighten-3 {\n  background-color: #e5e8ec !important; }\n\n.btn-secondary.btn-lighten-3 {\n  border-color: #9aa9b7 !important;\n  background-color: #e5e8ec !important; }\n  .btn-secondary.btn-lighten-3:hover {\n    border-color: #9aa9b7 !important;\n    background-color: #8b9cac !important; }\n  .btn-secondary.btn-lighten-3:focus, .btn-secondary.btn-lighten-3:active {\n    border-color: #8b9cac !important;\n    background-color: #7d8fa1 !important; }\n\n.btn-outline-secondary.btn-outline-lighten-3 {\n  border-color: #e5e8ec !important;\n  color: #e5e8ec !important; }\n  .btn-outline-secondary.btn-outline-lighten-3:hover {\n    background-color: #e5e8ec !important; }\n\ninput:focus ~ .bg-secondary {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #e5e8ec !important; }\n\n.border-secondary.border-lighten-3 {\n  border: 1px solid #e5e8ec !important; }\n\n.border-top-secondary.border-top-lighten-3 {\n  border-top: 1px solid #e5e8ec !important; }\n\n.border-bottom-secondary.border-bottom-lighten-3 {\n  border-bottom: 1px solid #e5e8ec !important; }\n\n.border-left-secondary.border-left-lighten-3 {\n  border-left: 1px solid #e5e8ec !important; }\n\n.border-right-secondary.border-right-lighten-3 {\n  border-right: 1px solid #e5e8ec !important; }\n\n.overlay-secondary.overlay-lighten-3 {\n  background: #e5e8ec;\n  /* The Fallback */\n  background: rgba(229, 232, 236, 0.6); }\n\n.secondary.lighten-2 {\n  color: #d6dce1 !important; }\n\n.bg-secondary.bg-lighten-2 {\n  background-color: #d6dce1 !important; }\n\n.btn-secondary.btn-lighten-2 {\n  border-color: #9aa9b7 !important;\n  background-color: #d6dce1 !important; }\n  .btn-secondary.btn-lighten-2:hover {\n    border-color: #9aa9b7 !important;\n    background-color: #8b9cac !important; }\n  .btn-secondary.btn-lighten-2:focus, .btn-secondary.btn-lighten-2:active {\n    border-color: #8b9cac !important;\n    background-color: #7d8fa1 !important; }\n\n.btn-outline-secondary.btn-outline-lighten-2 {\n  border-color: #d6dce1 !important;\n  color: #d6dce1 !important; }\n  .btn-outline-secondary.btn-outline-lighten-2:hover {\n    background-color: #d6dce1 !important; }\n\ninput:focus ~ .bg-secondary {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #d6dce1 !important; }\n\n.border-secondary.border-lighten-2 {\n  border: 1px solid #d6dce1 !important; }\n\n.border-top-secondary.border-top-lighten-2 {\n  border-top: 1px solid #d6dce1 !important; }\n\n.border-bottom-secondary.border-bottom-lighten-2 {\n  border-bottom: 1px solid #d6dce1 !important; }\n\n.border-left-secondary.border-left-lighten-2 {\n  border-left: 1px solid #d6dce1 !important; }\n\n.border-right-secondary.border-right-lighten-2 {\n  border-right: 1px solid #d6dce1 !important; }\n\n.overlay-secondary.overlay-lighten-2 {\n  background: #d6dce1;\n  /* The Fallback */\n  background: rgba(214, 220, 225, 0.6); }\n\n.secondary.lighten-1 {\n  color: #c7cfd7 !important; }\n\n.bg-secondary.bg-lighten-1 {\n  background-color: #c7cfd7 !important; }\n\n.btn-secondary.btn-lighten-1 {\n  border-color: #9aa9b7 !important;\n  background-color: #c7cfd7 !important; }\n  .btn-secondary.btn-lighten-1:hover {\n    border-color: #9aa9b7 !important;\n    background-color: #8b9cac !important; }\n  .btn-secondary.btn-lighten-1:focus, .btn-secondary.btn-lighten-1:active {\n    border-color: #8b9cac !important;\n    background-color: #7d8fa1 !important; }\n\n.btn-outline-secondary.btn-outline-lighten-1 {\n  border-color: #c7cfd7 !important;\n  color: #c7cfd7 !important; }\n  .btn-outline-secondary.btn-outline-lighten-1:hover {\n    background-color: #c7cfd7 !important; }\n\ninput:focus ~ .bg-secondary {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #c7cfd7 !important; }\n\n.border-secondary.border-lighten-1 {\n  border: 1px solid #c7cfd7 !important; }\n\n.border-top-secondary.border-top-lighten-1 {\n  border-top: 1px solid #c7cfd7 !important; }\n\n.border-bottom-secondary.border-bottom-lighten-1 {\n  border-bottom: 1px solid #c7cfd7 !important; }\n\n.border-left-secondary.border-left-lighten-1 {\n  border-left: 1px solid #c7cfd7 !important; }\n\n.border-right-secondary.border-right-lighten-1 {\n  border-right: 1px solid #c7cfd7 !important; }\n\n.overlay-secondary.overlay-lighten-1 {\n  background: #c7cfd7;\n  /* The Fallback */\n  background: rgba(199, 207, 215, 0.6); }\n\n.secondary {\n  color: #b8c2cc !important; }\n\n.bg-secondary {\n  background-color: #b8c2cc !important; }\n  .bg-secondary .card-header,\n  .bg-secondary .card-footer {\n    background-color: transparent; }\n\n.alert-secondary {\n  background: rgba(184, 194, 204, 0.2) !important;\n  color: #b8c2cc !important; }\n  .alert-secondary .alert-heading {\n    box-shadow: rgba(184, 194, 204, 0.4) 0px 6px 15px -7px; }\n  .alert-secondary .alert-link {\n    color: #a9b5c1 !important; }\n\n.bg-rgba-secondary {\n  background: rgba(184, 194, 204, 0.15) !important; }\n\n.border-secondary {\n  border: 1px solid #b8c2cc !important; }\n\n.border-top-secondary {\n  border-top: 1px solid #b8c2cc; }\n\n.border-bottom-secondary {\n  border-bottom: 1px solid #b8c2cc; }\n\n.border-left-secondary {\n  border-left: 1px solid #b8c2cc; }\n\n.border-right-secondary {\n  border-right: 1px solid #b8c2cc; }\n\n.bg-secondary.badge-glow,\n.border-secondary.badge-glow,\n.badge-secondary.badge-glow {\n  box-shadow: 0px 0px 10px #b8c2cc; }\n\n.badge.badge-secondary {\n  background-color: #b8c2cc; }\n\n.badge.badge-light-secondary {\n  background-color: white;\n  color: #b8c2cc !important;\n  font-weight: 500; }\n\n.overlay-secondary {\n  background: #b8c2cc;\n  /* The Fallback */\n  background: rgba(184, 194, 204, 0.6); }\n\n.btn-secondary {\n  border-color: #9aa9b7 !important;\n  background-color: #b8c2cc !important;\n  color: #fff; }\n  .btn-secondary:hover {\n    border-color: #a9b5c1 !important;\n    color: #fff !important;\n    box-shadow: 0 8px 25px -8px #b8c2cc; }\n  .btn-secondary:focus, .btn-secondary:active {\n    color: #fff !important; }\n\n.btn-flat-secondary {\n  background-color: transparent;\n  color: #b8c2cc; }\n  .btn-flat-secondary:hover {\n    color: #b8c2cc;\n    background-color: rgba(184, 194, 204, 0.1); }\n  .btn-flat-secondary:active, .btn-flat-secondary:focus {\n    background-color: #b8c2cc;\n    color: #fff !important; }\n\n.btn-relief-secondary {\n  background-color: #b8c2cc;\n  box-shadow: inset 0 -3px 0 0 rgba(0, 0, 0, 0.2);\n  color: #fff; }\n  .btn-relief-secondary:hover {\n    color: #fff; }\n  .btn-relief-secondary:active, .btn-relief-secondary:focus {\n    outline: none;\n    transform: translateY(3px); }\n\n.btn-outline-secondary {\n  border: 1px solid #b8c2cc;\n  background-color: transparent;\n  color: #b8c2cc; }\n  .btn-outline-secondary:hover {\n    background-color: rgba(184, 194, 204, 0.08);\n    color: #b8c2cc; }\n  .btn-outline-secondary:active {\n    color: #fff !important; }\n\n.btn-secondary ~ .dropdown-menu .dropdown-item.active,\n.btn-outline-secondary ~ .dropdown-menu .dropdown-item.active,\n.btn-flat-secondary ~ .dropdown-menu .dropdown-item.active {\n  background-color: #b8c2cc;\n  color: #fff; }\n  .btn-secondary ~ .dropdown-menu .dropdown-item.active:hover,\n  .btn-outline-secondary ~ .dropdown-menu .dropdown-item.active:hover,\n  .btn-flat-secondary ~ .dropdown-menu .dropdown-item.active:hover {\n    color: #fff; }\n\n.btn-secondary ~ .dropdown-menu .dropdown-item:not(.active):not(:active):hover,\n.btn-outline-secondary ~ .dropdown-menu .dropdown-item:not(.active):not(:active):hover,\n.btn-flat-secondary ~ .dropdown-menu .dropdown-item:not(.active):not(:active):hover {\n  color: #b8c2cc; }\n\n.dropdown.dropdown-icon-wrapper .btn-secondary ~ .dropdown-menu .dropdown-item:hover i,\n.dropdown.dropdown-icon-wrapper .btn-outline-secondary ~ .dropdown-menu .dropdown-item:hover i,\n.dropdown.dropdown-icon-wrapper .btn-flat-secondary ~ .dropdown-menu .dropdown-item:hover i,\n.dropup.dropdown-icon-wrapper .btn-secondary ~ .dropdown-menu .dropdown-item:hover i,\n.dropup.dropdown-icon-wrapper .btn-outline-secondary ~ .dropdown-menu .dropdown-item:hover i,\n.dropup.dropdown-icon-wrapper .btn-flat-secondary ~ .dropdown-menu .dropdown-item:hover i,\n.dropright.dropdown-icon-wrapper .btn-secondary ~ .dropdown-menu .dropdown-item:hover i,\n.dropright.dropdown-icon-wrapper .btn-outline-secondary ~ .dropdown-menu .dropdown-item:hover i,\n.dropright.dropdown-icon-wrapper .btn-flat-secondary ~ .dropdown-menu .dropdown-item:hover i,\n.dropleft.dropdown-icon-wrapper .btn-secondary ~ .dropdown-menu .dropdown-item:hover i,\n.dropleft.dropdown-icon-wrapper .btn-outline-secondary ~ .dropdown-menu .dropdown-item:hover i,\n.dropleft.dropdown-icon-wrapper .btn-flat-secondary ~ .dropdown-menu .dropdown-item:hover i {\n  color: #b8c2cc; }\n\n.dropdown.dropdown-icon-wrapper .btn-secondary ~ .dropdown-menu .dropdown-item:active i,\n.dropdown.dropdown-icon-wrapper .btn-outline-secondary ~ .dropdown-menu .dropdown-item:active i,\n.dropdown.dropdown-icon-wrapper .btn-flat-secondary ~ .dropdown-menu .dropdown-item:active i,\n.dropup.dropdown-icon-wrapper .btn-secondary ~ .dropdown-menu .dropdown-item:active i,\n.dropup.dropdown-icon-wrapper .btn-outline-secondary ~ .dropdown-menu .dropdown-item:active i,\n.dropup.dropdown-icon-wrapper .btn-flat-secondary ~ .dropdown-menu .dropdown-item:active i,\n.dropright.dropdown-icon-wrapper .btn-secondary ~ .dropdown-menu .dropdown-item:active i,\n.dropright.dropdown-icon-wrapper .btn-outline-secondary ~ .dropdown-menu .dropdown-item:active i,\n.dropright.dropdown-icon-wrapper .btn-flat-secondary ~ .dropdown-menu .dropdown-item:active i,\n.dropleft.dropdown-icon-wrapper .btn-secondary ~ .dropdown-menu .dropdown-item:active i,\n.dropleft.dropdown-icon-wrapper .btn-outline-secondary ~ .dropdown-menu .dropdown-item:active i,\n.dropleft.dropdown-icon-wrapper .btn-flat-secondary ~ .dropdown-menu .dropdown-item:active i {\n  color: #fff; }\n\n.bullet.bullet-secondary {\n  background-color: #b8c2cc; }\n\n.pagination-secondary .page-item.active .page-link {\n  background: #b8c2cc;\n  color: #fff; }\n  .pagination-secondary .page-item.active .page-link:hover {\n    color: #fff; }\n\n.pagination-secondary .page-item .page-link:hover {\n  color: #b8c2cc; }\n\n.pagination-secondary .page-item.prev-item .page-link:hover, .pagination-secondary .page-item.next-item .page-link:hover {\n  background: #b8c2cc;\n  color: #fff; }\n\n.nav-pill-secondary .nav-item .nav-link.active {\n  color: #fff;\n  background-color: #b8c2cc !important; }\n\n.progress-bar-secondary {\n  background-color: rgba(184, 194, 204, 0.1); }\n  .progress-bar-secondary .progress-bar {\n    background-color: #b8c2cc; }\n\n.chip-secondary {\n  background-color: #b8c2cc !important; }\n  .chip-secondary .chip-body {\n    color: #fff !important; }\n\n.divider.divider-secondary .divider-text:before, .divider.divider-secondary .divider-text:after {\n  border-color: #b8c2cc !important; }\n\ninput[type=\"checkbox\"].bg-secondary + .custom-control-label:before, input[type=\"radio\"].bg-secondary + .custom-control-label:before {\n  background-color: #b8c2cc !important; }\n\ninput:focus ~ .bg-secondary {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #b8c2cc !important; }\n\n.vs-checkbox-secondary input:checked ~ .vs-checkbox {\n  border-color: #b8c2cc !important; }\n  .vs-checkbox-secondary input:checked ~ .vs-checkbox .vs-checkbox--check {\n    background-color: #b8c2cc !important; }\n\n.vs-checkbox-secondary input:active:checked + .vs-checkbox .vs-checkbox--check {\n  background-color: #b8c2cc !important; }\n\n.custom-switch-secondary .custom-control-input:checked ~ .custom-control-label::before {\n  background-color: #b8c2cc !important;\n  color: #fff;\n  transition: all .2s ease-out; }\n\n.vs-radio-secondary input:checked ~ .vs-radio .vs-radio--circle {\n  background: #b8c2cc !important;\n  box-shadow: 0 3px 12px 0 rgba(184, 194, 204, 0.4) !important; }\n\n.secondary.darken-1 {\n  color: #a9b5c1 !important; }\n\n.bg-secondary.bg-darken-1 {\n  background-color: #a9b5c1 !important; }\n\n.btn-secondary.btn-darken-1 {\n  border-color: #9aa9b7 !important;\n  background-color: #a9b5c1 !important; }\n  .btn-secondary.btn-darken-1:hover {\n    border-color: #9aa9b7 !important;\n    background-color: #8b9cac !important; }\n  .btn-secondary.btn-darken-1:focus, .btn-secondary.btn-darken-1:active {\n    border-color: #8b9cac !important;\n    background-color: #7d8fa1 !important; }\n\n.btn-outline-secondary.btn-outline-darken-1 {\n  border-color: #a9b5c1 !important;\n  color: #a9b5c1 !important; }\n  .btn-outline-secondary.btn-outline-darken-1:hover {\n    background-color: #a9b5c1 !important; }\n\ninput:focus ~ .bg-secondary {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #a9b5c1 !important; }\n\n.border-secondary.border-darken-1 {\n  border: 1px solid #a9b5c1 !important; }\n\n.border-top-secondary.border-top-darken-1 {\n  border-top: 1px solid #a9b5c1 !important; }\n\n.border-bottom-secondary.border-bottom-darken-1 {\n  border-bottom: 1px solid #a9b5c1 !important; }\n\n.border-left-secondary.border-left-darken-1 {\n  border-left: 1px solid #a9b5c1 !important; }\n\n.border-right-secondary.border-right-darken-1 {\n  border-right: 1px solid #a9b5c1 !important; }\n\n.overlay-secondary.overlay-darken-1 {\n  background: #a9b5c1;\n  /* The Fallback */\n  background: rgba(169, 181, 193, 0.6); }\n\n.secondary.darken-2 {\n  color: #9aa9b7 !important; }\n\n.bg-secondary.bg-darken-2 {\n  background-color: #9aa9b7 !important; }\n\n.btn-secondary.btn-darken-2 {\n  border-color: #9aa9b7 !important;\n  background-color: #9aa9b7 !important; }\n  .btn-secondary.btn-darken-2:hover {\n    border-color: #9aa9b7 !important;\n    background-color: #8b9cac !important; }\n  .btn-secondary.btn-darken-2:focus, .btn-secondary.btn-darken-2:active {\n    border-color: #8b9cac !important;\n    background-color: #7d8fa1 !important; }\n\n.btn-outline-secondary.btn-outline-darken-2 {\n  border-color: #9aa9b7 !important;\n  color: #9aa9b7 !important; }\n  .btn-outline-secondary.btn-outline-darken-2:hover {\n    background-color: #9aa9b7 !important; }\n\ninput:focus ~ .bg-secondary {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #9aa9b7 !important; }\n\n.border-secondary.border-darken-2 {\n  border: 1px solid #9aa9b7 !important; }\n\n.border-top-secondary.border-top-darken-2 {\n  border-top: 1px solid #9aa9b7 !important; }\n\n.border-bottom-secondary.border-bottom-darken-2 {\n  border-bottom: 1px solid #9aa9b7 !important; }\n\n.border-left-secondary.border-left-darken-2 {\n  border-left: 1px solid #9aa9b7 !important; }\n\n.border-right-secondary.border-right-darken-2 {\n  border-right: 1px solid #9aa9b7 !important; }\n\n.overlay-secondary.overlay-darken-2 {\n  background: #9aa9b7;\n  /* The Fallback */\n  background: rgba(154, 169, 183, 0.6); }\n\n.secondary.darken-3 {\n  color: #8b9cac !important; }\n\n.bg-secondary.bg-darken-3 {\n  background-color: #8b9cac !important; }\n\n.btn-secondary.btn-darken-3 {\n  border-color: #9aa9b7 !important;\n  background-color: #8b9cac !important; }\n  .btn-secondary.btn-darken-3:hover {\n    border-color: #9aa9b7 !important;\n    background-color: #8b9cac !important; }\n  .btn-secondary.btn-darken-3:focus, .btn-secondary.btn-darken-3:active {\n    border-color: #8b9cac !important;\n    background-color: #7d8fa1 !important; }\n\n.btn-outline-secondary.btn-outline-darken-3 {\n  border-color: #8b9cac !important;\n  color: #8b9cac !important; }\n  .btn-outline-secondary.btn-outline-darken-3:hover {\n    background-color: #8b9cac !important; }\n\ninput:focus ~ .bg-secondary {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #8b9cac !important; }\n\n.border-secondary.border-darken-3 {\n  border: 1px solid #8b9cac !important; }\n\n.border-top-secondary.border-top-darken-3 {\n  border-top: 1px solid #8b9cac !important; }\n\n.border-bottom-secondary.border-bottom-darken-3 {\n  border-bottom: 1px solid #8b9cac !important; }\n\n.border-left-secondary.border-left-darken-3 {\n  border-left: 1px solid #8b9cac !important; }\n\n.border-right-secondary.border-right-darken-3 {\n  border-right: 1px solid #8b9cac !important; }\n\n.overlay-secondary.overlay-darken-3 {\n  background: #8b9cac;\n  /* The Fallback */\n  background: rgba(139, 156, 172, 0.6); }\n\n.secondary.darken-4 {\n  color: #7d8fa1 !important; }\n\n.bg-secondary.bg-darken-4 {\n  background-color: #7d8fa1 !important; }\n\n.btn-secondary.btn-darken-4 {\n  border-color: #9aa9b7 !important;\n  background-color: #7d8fa1 !important; }\n  .btn-secondary.btn-darken-4:hover {\n    border-color: #9aa9b7 !important;\n    background-color: #8b9cac !important; }\n  .btn-secondary.btn-darken-4:focus, .btn-secondary.btn-darken-4:active {\n    border-color: #8b9cac !important;\n    background-color: #7d8fa1 !important; }\n\n.btn-outline-secondary.btn-outline-darken-4 {\n  border-color: #7d8fa1 !important;\n  color: #7d8fa1 !important; }\n  .btn-outline-secondary.btn-outline-darken-4:hover {\n    background-color: #7d8fa1 !important; }\n\ninput:focus ~ .bg-secondary {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #7d8fa1 !important; }\n\n.border-secondary.border-darken-4 {\n  border: 1px solid #7d8fa1 !important; }\n\n.border-top-secondary.border-top-darken-4 {\n  border-top: 1px solid #7d8fa1 !important; }\n\n.border-bottom-secondary.border-bottom-darken-4 {\n  border-bottom: 1px solid #7d8fa1 !important; }\n\n.border-left-secondary.border-left-darken-4 {\n  border-left: 1px solid #7d8fa1 !important; }\n\n.border-right-secondary.border-right-darken-4 {\n  border-right: 1px solid #7d8fa1 !important; }\n\n.overlay-secondary.overlay-darken-4 {\n  background: #7d8fa1;\n  /* The Fallback */\n  background: rgba(125, 143, 161, 0.6); }\n\n.secondary.gradient-bg {\n  color: #640064 !important; }\n\n.bg-secondary.bg-gradient-bg {\n  background-color: #640064 !important; }\n\n.btn-secondary.btn-gradient-bg {\n  border-color: #9aa9b7 !important;\n  background-color: #640064 !important; }\n  .btn-secondary.btn-gradient-bg:hover {\n    border-color: #9aa9b7 !important;\n    background-color: #8b9cac !important; }\n  .btn-secondary.btn-gradient-bg:focus, .btn-secondary.btn-gradient-bg:active {\n    border-color: #8b9cac !important;\n    background-color: #7d8fa1 !important; }\n\n.btn-outline-secondary.btn-outline-gradient-bg {\n  border-color: #640064 !important;\n  color: #640064 !important; }\n  .btn-outline-secondary.btn-outline-gradient-bg:hover {\n    background-color: #640064 !important; }\n\ninput:focus ~ .bg-secondary {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #640064 !important; }\n\n.border-secondary.border-gradient-bg {\n  border: 1px solid #640064 !important; }\n\n.border-top-secondary.border-top-gradient-bg {\n  border-top: 1px solid #640064 !important; }\n\n.border-bottom-secondary.border-bottom-gradient-bg {\n  border-bottom: 1px solid #640064 !important; }\n\n.border-left-secondary.border-left-gradient-bg {\n  border-left: 1px solid #640064 !important; }\n\n.border-right-secondary.border-right-gradient-bg {\n  border-right: 1px solid #640064 !important; }\n\n.overlay-secondary.overlay-gradient-bg {\n  background: #640064;\n  /* The Fallback */\n  background: rgba(100, 0, 100, 0.6); }\n\n.success.gradient-light {\n  color: #4ae9d3 !important; }\n\n.bg-success.bg-gradient-light {\n  background-color: #4ae9d3 !important; }\n\n.btn-success.btn-gradient-light {\n  border-color: #1f9d57 !important;\n  background-color: #4ae9d3 !important; }\n  .btn-success.btn-gradient-light:hover {\n    border-color: #1f9d57 !important;\n    background-color: #1b874b !important; }\n  .btn-success.btn-gradient-light:focus, .btn-success.btn-gradient-light:active {\n    border-color: #1b874b !important;\n    background-color: #177240 !important; }\n\n.btn-outline-success.btn-outline-gradient-light {\n  border-color: #4ae9d3 !important;\n  color: #4ae9d3 !important; }\n  .btn-outline-success.btn-outline-gradient-light:hover {\n    background-color: #4ae9d3 !important; }\n\ninput:focus ~ .bg-success {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #4ae9d3 !important; }\n\n.border-success.border-gradient-light {\n  border: 1px solid #4ae9d3 !important; }\n\n.border-top-success.border-top-gradient-light {\n  border-top: 1px solid #4ae9d3 !important; }\n\n.border-bottom-success.border-bottom-gradient-light {\n  border-bottom: 1px solid #4ae9d3 !important; }\n\n.border-left-success.border-left-gradient-light {\n  border-left: 1px solid #4ae9d3 !important; }\n\n.border-right-success.border-right-gradient-light {\n  border-right: 1px solid #4ae9d3 !important; }\n\n.overlay-success.overlay-gradient-light {\n  background: #4ae9d3;\n  /* The Fallback */\n  background: rgba(74, 233, 211, 0.6); }\n\n.success.light-badge {\n  color: #c7f4db !important; }\n\n.bg-success.bg-light-badge {\n  background-color: #c7f4db !important; }\n\n.btn-success.btn-light-badge {\n  border-color: #1f9d57 !important;\n  background-color: #c7f4db !important; }\n  .btn-success.btn-light-badge:hover {\n    border-color: #1f9d57 !important;\n    background-color: #1b874b !important; }\n  .btn-success.btn-light-badge:focus, .btn-success.btn-light-badge:active {\n    border-color: #1b874b !important;\n    background-color: #177240 !important; }\n\n.btn-outline-success.btn-outline-light-badge {\n  border-color: #c7f4db !important;\n  color: #c7f4db !important; }\n  .btn-outline-success.btn-outline-light-badge:hover {\n    background-color: #c7f4db !important; }\n\ninput:focus ~ .bg-success {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #c7f4db !important; }\n\n.border-success.border-light-badge {\n  border: 1px solid #c7f4db !important; }\n\n.border-top-success.border-top-light-badge {\n  border-top: 1px solid #c7f4db !important; }\n\n.border-bottom-success.border-bottom-light-badge {\n  border-bottom: 1px solid #c7f4db !important; }\n\n.border-left-success.border-left-light-badge {\n  border-left: 1px solid #c7f4db !important; }\n\n.border-right-success.border-right-light-badge {\n  border-right: 1px solid #c7f4db !important; }\n\n.overlay-success.overlay-light-badge {\n  background: #c7f4db;\n  /* The Fallback */\n  background: rgba(199, 244, 219, 0.6); }\n\n.success.lighten-5 {\n  color: #88e7b2 !important; }\n\n.bg-success.bg-lighten-5 {\n  background-color: #88e7b2 !important; }\n\n.btn-success.btn-lighten-5 {\n  border-color: #1f9d57 !important;\n  background-color: #88e7b2 !important; }\n  .btn-success.btn-lighten-5:hover {\n    border-color: #1f9d57 !important;\n    background-color: #1b874b !important; }\n  .btn-success.btn-lighten-5:focus, .btn-success.btn-lighten-5:active {\n    border-color: #1b874b !important;\n    background-color: #177240 !important; }\n\n.btn-outline-success.btn-outline-lighten-5 {\n  border-color: #88e7b2 !important;\n  color: #88e7b2 !important; }\n  .btn-outline-success.btn-outline-lighten-5:hover {\n    background-color: #88e7b2 !important; }\n\ninput:focus ~ .bg-success {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #88e7b2 !important; }\n\n.border-success.border-lighten-5 {\n  border: 1px solid #88e7b2 !important; }\n\n.border-top-success.border-top-lighten-5 {\n  border-top: 1px solid #88e7b2 !important; }\n\n.border-bottom-success.border-bottom-lighten-5 {\n  border-bottom: 1px solid #88e7b2 !important; }\n\n.border-left-success.border-left-lighten-5 {\n  border-left: 1px solid #88e7b2 !important; }\n\n.border-right-success.border-right-lighten-5 {\n  border-right: 1px solid #88e7b2 !important; }\n\n.overlay-success.overlay-lighten-5 {\n  background: #88e7b2;\n  /* The Fallback */\n  background: rgba(136, 231, 178, 0.6); }\n\n.success.lighten-4 {\n  color: #72e3a4 !important; }\n\n.bg-success.bg-lighten-4 {\n  background-color: #72e3a4 !important; }\n\n.btn-success.btn-lighten-4 {\n  border-color: #1f9d57 !important;\n  background-color: #72e3a4 !important; }\n  .btn-success.btn-lighten-4:hover {\n    border-color: #1f9d57 !important;\n    background-color: #1b874b !important; }\n  .btn-success.btn-lighten-4:focus, .btn-success.btn-lighten-4:active {\n    border-color: #1b874b !important;\n    background-color: #177240 !important; }\n\n.btn-outline-success.btn-outline-lighten-4 {\n  border-color: #72e3a4 !important;\n  color: #72e3a4 !important; }\n  .btn-outline-success.btn-outline-lighten-4:hover {\n    background-color: #72e3a4 !important; }\n\ninput:focus ~ .bg-success {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #72e3a4 !important; }\n\n.border-success.border-lighten-4 {\n  border: 1px solid #72e3a4 !important; }\n\n.border-top-success.border-top-lighten-4 {\n  border-top: 1px solid #72e3a4 !important; }\n\n.border-bottom-success.border-bottom-lighten-4 {\n  border-bottom: 1px solid #72e3a4 !important; }\n\n.border-left-success.border-left-lighten-4 {\n  border-left: 1px solid #72e3a4 !important; }\n\n.border-right-success.border-right-lighten-4 {\n  border-right: 1px solid #72e3a4 !important; }\n\n.overlay-success.overlay-lighten-4 {\n  background: #72e3a4;\n  /* The Fallback */\n  background: rgba(114, 227, 164, 0.6); }\n\n.success.lighten-3 {\n  color: #5dde97 !important; }\n\n.bg-success.bg-lighten-3 {\n  background-color: #5dde97 !important; }\n\n.btn-success.btn-lighten-3 {\n  border-color: #1f9d57 !important;\n  background-color: #5dde97 !important; }\n  .btn-success.btn-lighten-3:hover {\n    border-color: #1f9d57 !important;\n    background-color: #1b874b !important; }\n  .btn-success.btn-lighten-3:focus, .btn-success.btn-lighten-3:active {\n    border-color: #1b874b !important;\n    background-color: #177240 !important; }\n\n.btn-outline-success.btn-outline-lighten-3 {\n  border-color: #5dde97 !important;\n  color: #5dde97 !important; }\n  .btn-outline-success.btn-outline-lighten-3:hover {\n    background-color: #5dde97 !important; }\n\ninput:focus ~ .bg-success {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #5dde97 !important; }\n\n.border-success.border-lighten-3 {\n  border: 1px solid #5dde97 !important; }\n\n.border-top-success.border-top-lighten-3 {\n  border-top: 1px solid #5dde97 !important; }\n\n.border-bottom-success.border-bottom-lighten-3 {\n  border-bottom: 1px solid #5dde97 !important; }\n\n.border-left-success.border-left-lighten-3 {\n  border-left: 1px solid #5dde97 !important; }\n\n.border-right-success.border-right-lighten-3 {\n  border-right: 1px solid #5dde97 !important; }\n\n.overlay-success.overlay-lighten-3 {\n  background: #5dde97;\n  /* The Fallback */\n  background: rgba(93, 222, 151, 0.6); }\n\n.success.lighten-2 {\n  color: #48da89 !important; }\n\n.bg-success.bg-lighten-2 {\n  background-color: #48da89 !important; }\n\n.btn-success.btn-lighten-2 {\n  border-color: #1f9d57 !important;\n  background-color: #48da89 !important; }\n  .btn-success.btn-lighten-2:hover {\n    border-color: #1f9d57 !important;\n    background-color: #1b874b !important; }\n  .btn-success.btn-lighten-2:focus, .btn-success.btn-lighten-2:active {\n    border-color: #1b874b !important;\n    background-color: #177240 !important; }\n\n.btn-outline-success.btn-outline-lighten-2 {\n  border-color: #48da89 !important;\n  color: #48da89 !important; }\n  .btn-outline-success.btn-outline-lighten-2:hover {\n    background-color: #48da89 !important; }\n\ninput:focus ~ .bg-success {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #48da89 !important; }\n\n.border-success.border-lighten-2 {\n  border: 1px solid #48da89 !important; }\n\n.border-top-success.border-top-lighten-2 {\n  border-top: 1px solid #48da89 !important; }\n\n.border-bottom-success.border-bottom-lighten-2 {\n  border-bottom: 1px solid #48da89 !important; }\n\n.border-left-success.border-left-lighten-2 {\n  border-left: 1px solid #48da89 !important; }\n\n.border-right-success.border-right-lighten-2 {\n  border-right: 1px solid #48da89 !important; }\n\n.overlay-success.overlay-lighten-2 {\n  background: #48da89;\n  /* The Fallback */\n  background: rgba(72, 218, 137, 0.6); }\n\n.success.lighten-1 {\n  color: #33d67c !important; }\n\n.bg-success.bg-lighten-1 {\n  background-color: #33d67c !important; }\n\n.btn-success.btn-lighten-1 {\n  border-color: #1f9d57 !important;\n  background-color: #33d67c !important; }\n  .btn-success.btn-lighten-1:hover {\n    border-color: #1f9d57 !important;\n    background-color: #1b874b !important; }\n  .btn-success.btn-lighten-1:focus, .btn-success.btn-lighten-1:active {\n    border-color: #1b874b !important;\n    background-color: #177240 !important; }\n\n.btn-outline-success.btn-outline-lighten-1 {\n  border-color: #33d67c !important;\n  color: #33d67c !important; }\n  .btn-outline-success.btn-outline-lighten-1:hover {\n    background-color: #33d67c !important; }\n\ninput:focus ~ .bg-success {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #33d67c !important; }\n\n.border-success.border-lighten-1 {\n  border: 1px solid #33d67c !important; }\n\n.border-top-success.border-top-lighten-1 {\n  border-top: 1px solid #33d67c !important; }\n\n.border-bottom-success.border-bottom-lighten-1 {\n  border-bottom: 1px solid #33d67c !important; }\n\n.border-left-success.border-left-lighten-1 {\n  border-left: 1px solid #33d67c !important; }\n\n.border-right-success.border-right-lighten-1 {\n  border-right: 1px solid #33d67c !important; }\n\n.overlay-success.overlay-lighten-1 {\n  background: #33d67c;\n  /* The Fallback */\n  background: rgba(51, 214, 124, 0.6); }\n\n.success {\n  color: #28c76f !important; }\n\n.bg-success {\n  background-color: #28c76f !important; }\n  .bg-success .card-header,\n  .bg-success .card-footer {\n    background-color: transparent; }\n\n.alert-success {\n  background: rgba(40, 199, 111, 0.2) !important;\n  color: #28c76f !important; }\n  .alert-success .alert-heading {\n    box-shadow: rgba(40, 199, 111, 0.4) 0px 6px 15px -7px; }\n  .alert-success .alert-link {\n    color: #24b263 !important; }\n\n.bg-rgba-success {\n  background: rgba(40, 199, 111, 0.15) !important; }\n\n.border-success {\n  border: 1px solid #28c76f !important; }\n\n.border-top-success {\n  border-top: 1px solid #28c76f; }\n\n.border-bottom-success {\n  border-bottom: 1px solid #28c76f; }\n\n.border-left-success {\n  border-left: 1px solid #28c76f; }\n\n.border-right-success {\n  border-right: 1px solid #28c76f; }\n\n.bg-success.badge-glow,\n.border-success.badge-glow,\n.badge-success.badge-glow {\n  box-shadow: 0px 0px 10px #28c76f; }\n\n.badge.badge-success {\n  background-color: #28c76f; }\n\n.badge.badge-light-success {\n  background-color: #c7f4db;\n  color: #28c76f !important;\n  font-weight: 500; }\n\n.overlay-success {\n  background: #28c76f;\n  /* The Fallback */\n  background: rgba(40, 199, 111, 0.6); }\n\n.btn-success {\n  border-color: #1f9d57 !important;\n  background-color: #28c76f !important;\n  color: #fff; }\n  .btn-success:hover {\n    border-color: #24b263 !important;\n    color: #fff !important;\n    box-shadow: 0 8px 25px -8px #28c76f; }\n  .btn-success:focus, .btn-success:active {\n    color: #fff !important; }\n\n.btn-flat-success {\n  background-color: transparent;\n  color: #28c76f; }\n  .btn-flat-success:hover {\n    color: #28c76f;\n    background-color: rgba(40, 199, 111, 0.1); }\n  .btn-flat-success:active, .btn-flat-success:focus {\n    background-color: #28c76f;\n    color: #fff !important; }\n\n.btn-relief-success {\n  background-color: #28c76f;\n  box-shadow: inset 0 -3px 0 0 rgba(0, 0, 0, 0.2);\n  color: #fff; }\n  .btn-relief-success:hover {\n    color: #fff; }\n  .btn-relief-success:active, .btn-relief-success:focus {\n    outline: none;\n    transform: translateY(3px); }\n\n.btn-outline-success {\n  border: 1px solid #28c76f;\n  background-color: transparent;\n  color: #28c76f; }\n  .btn-outline-success:hover {\n    background-color: rgba(40, 199, 111, 0.08);\n    color: #28c76f; }\n  .btn-outline-success:active {\n    color: #fff !important; }\n\n.btn-success ~ .dropdown-menu .dropdown-item.active,\n.btn-outline-success ~ .dropdown-menu .dropdown-item.active,\n.btn-flat-success ~ .dropdown-menu .dropdown-item.active {\n  background-color: #28c76f;\n  color: #fff; }\n  .btn-success ~ .dropdown-menu .dropdown-item.active:hover,\n  .btn-outline-success ~ .dropdown-menu .dropdown-item.active:hover,\n  .btn-flat-success ~ .dropdown-menu .dropdown-item.active:hover {\n    color: #fff; }\n\n.btn-success ~ .dropdown-menu .dropdown-item:not(.active):not(:active):hover,\n.btn-outline-success ~ .dropdown-menu .dropdown-item:not(.active):not(:active):hover,\n.btn-flat-success ~ .dropdown-menu .dropdown-item:not(.active):not(:active):hover {\n  color: #28c76f; }\n\n.dropdown.dropdown-icon-wrapper .btn-success ~ .dropdown-menu .dropdown-item:hover i,\n.dropdown.dropdown-icon-wrapper .btn-outline-success ~ .dropdown-menu .dropdown-item:hover i,\n.dropdown.dropdown-icon-wrapper .btn-flat-success ~ .dropdown-menu .dropdown-item:hover i,\n.dropup.dropdown-icon-wrapper .btn-success ~ .dropdown-menu .dropdown-item:hover i,\n.dropup.dropdown-icon-wrapper .btn-outline-success ~ .dropdown-menu .dropdown-item:hover i,\n.dropup.dropdown-icon-wrapper .btn-flat-success ~ .dropdown-menu .dropdown-item:hover i,\n.dropright.dropdown-icon-wrapper .btn-success ~ .dropdown-menu .dropdown-item:hover i,\n.dropright.dropdown-icon-wrapper .btn-outline-success ~ .dropdown-menu .dropdown-item:hover i,\n.dropright.dropdown-icon-wrapper .btn-flat-success ~ .dropdown-menu .dropdown-item:hover i,\n.dropleft.dropdown-icon-wrapper .btn-success ~ .dropdown-menu .dropdown-item:hover i,\n.dropleft.dropdown-icon-wrapper .btn-outline-success ~ .dropdown-menu .dropdown-item:hover i,\n.dropleft.dropdown-icon-wrapper .btn-flat-success ~ .dropdown-menu .dropdown-item:hover i {\n  color: #28c76f; }\n\n.dropdown.dropdown-icon-wrapper .btn-success ~ .dropdown-menu .dropdown-item:active i,\n.dropdown.dropdown-icon-wrapper .btn-outline-success ~ .dropdown-menu .dropdown-item:active i,\n.dropdown.dropdown-icon-wrapper .btn-flat-success ~ .dropdown-menu .dropdown-item:active i,\n.dropup.dropdown-icon-wrapper .btn-success ~ .dropdown-menu .dropdown-item:active i,\n.dropup.dropdown-icon-wrapper .btn-outline-success ~ .dropdown-menu .dropdown-item:active i,\n.dropup.dropdown-icon-wrapper .btn-flat-success ~ .dropdown-menu .dropdown-item:active i,\n.dropright.dropdown-icon-wrapper .btn-success ~ .dropdown-menu .dropdown-item:active i,\n.dropright.dropdown-icon-wrapper .btn-outline-success ~ .dropdown-menu .dropdown-item:active i,\n.dropright.dropdown-icon-wrapper .btn-flat-success ~ .dropdown-menu .dropdown-item:active i,\n.dropleft.dropdown-icon-wrapper .btn-success ~ .dropdown-menu .dropdown-item:active i,\n.dropleft.dropdown-icon-wrapper .btn-outline-success ~ .dropdown-menu .dropdown-item:active i,\n.dropleft.dropdown-icon-wrapper .btn-flat-success ~ .dropdown-menu .dropdown-item:active i {\n  color: #fff; }\n\n.bullet.bullet-success {\n  background-color: #28c76f; }\n\n.pagination-success .page-item.active .page-link {\n  background: #28c76f;\n  color: #fff; }\n  .pagination-success .page-item.active .page-link:hover {\n    color: #fff; }\n\n.pagination-success .page-item .page-link:hover {\n  color: #28c76f; }\n\n.pagination-success .page-item.prev-item .page-link:hover, .pagination-success .page-item.next-item .page-link:hover {\n  background: #28c76f;\n  color: #fff; }\n\n.nav-pill-success .nav-item .nav-link.active {\n  color: #fff;\n  background-color: #28c76f !important; }\n\n.progress-bar-success {\n  background-color: rgba(40, 199, 111, 0.1); }\n  .progress-bar-success .progress-bar {\n    background-color: #28c76f; }\n\n.chip-success {\n  background-color: #28c76f !important; }\n  .chip-success .chip-body {\n    color: #fff !important; }\n\n.divider.divider-success .divider-text:before, .divider.divider-success .divider-text:after {\n  border-color: #28c76f !important; }\n\ninput[type=\"checkbox\"].bg-success + .custom-control-label:before, input[type=\"radio\"].bg-success + .custom-control-label:before {\n  background-color: #28c76f !important; }\n\ninput:focus ~ .bg-success {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #28c76f !important; }\n\n.vs-checkbox-success input:checked ~ .vs-checkbox {\n  border-color: #28c76f !important; }\n  .vs-checkbox-success input:checked ~ .vs-checkbox .vs-checkbox--check {\n    background-color: #28c76f !important; }\n\n.vs-checkbox-success input:active:checked + .vs-checkbox .vs-checkbox--check {\n  background-color: #28c76f !important; }\n\n.custom-switch-success .custom-control-input:checked ~ .custom-control-label::before {\n  background-color: #28c76f !important;\n  color: #fff;\n  transition: all .2s ease-out; }\n\n.vs-radio-success input:checked ~ .vs-radio .vs-radio--circle {\n  background: #28c76f !important;\n  box-shadow: 0 3px 12px 0 rgba(40, 199, 111, 0.4) !important; }\n\n.success.darken-1 {\n  color: #24b263 !important; }\n\n.bg-success.bg-darken-1 {\n  background-color: #24b263 !important; }\n\n.btn-success.btn-darken-1 {\n  border-color: #1f9d57 !important;\n  background-color: #24b263 !important; }\n  .btn-success.btn-darken-1:hover {\n    border-color: #1f9d57 !important;\n    background-color: #1b874b !important; }\n  .btn-success.btn-darken-1:focus, .btn-success.btn-darken-1:active {\n    border-color: #1b874b !important;\n    background-color: #177240 !important; }\n\n.btn-outline-success.btn-outline-darken-1 {\n  border-color: #24b263 !important;\n  color: #24b263 !important; }\n  .btn-outline-success.btn-outline-darken-1:hover {\n    background-color: #24b263 !important; }\n\ninput:focus ~ .bg-success {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #24b263 !important; }\n\n.border-success.border-darken-1 {\n  border: 1px solid #24b263 !important; }\n\n.border-top-success.border-top-darken-1 {\n  border-top: 1px solid #24b263 !important; }\n\n.border-bottom-success.border-bottom-darken-1 {\n  border-bottom: 1px solid #24b263 !important; }\n\n.border-left-success.border-left-darken-1 {\n  border-left: 1px solid #24b263 !important; }\n\n.border-right-success.border-right-darken-1 {\n  border-right: 1px solid #24b263 !important; }\n\n.overlay-success.overlay-darken-1 {\n  background: #24b263;\n  /* The Fallback */\n  background: rgba(36, 178, 99, 0.6); }\n\n.success.darken-2 {\n  color: #1f9d57 !important; }\n\n.bg-success.bg-darken-2 {\n  background-color: #1f9d57 !important; }\n\n.btn-success.btn-darken-2 {\n  border-color: #1f9d57 !important;\n  background-color: #1f9d57 !important; }\n  .btn-success.btn-darken-2:hover {\n    border-color: #1f9d57 !important;\n    background-color: #1b874b !important; }\n  .btn-success.btn-darken-2:focus, .btn-success.btn-darken-2:active {\n    border-color: #1b874b !important;\n    background-color: #177240 !important; }\n\n.btn-outline-success.btn-outline-darken-2 {\n  border-color: #1f9d57 !important;\n  color: #1f9d57 !important; }\n  .btn-outline-success.btn-outline-darken-2:hover {\n    background-color: #1f9d57 !important; }\n\ninput:focus ~ .bg-success {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #1f9d57 !important; }\n\n.border-success.border-darken-2 {\n  border: 1px solid #1f9d57 !important; }\n\n.border-top-success.border-top-darken-2 {\n  border-top: 1px solid #1f9d57 !important; }\n\n.border-bottom-success.border-bottom-darken-2 {\n  border-bottom: 1px solid #1f9d57 !important; }\n\n.border-left-success.border-left-darken-2 {\n  border-left: 1px solid #1f9d57 !important; }\n\n.border-right-success.border-right-darken-2 {\n  border-right: 1px solid #1f9d57 !important; }\n\n.overlay-success.overlay-darken-2 {\n  background: #1f9d57;\n  /* The Fallback */\n  background: rgba(31, 157, 87, 0.6); }\n\n.success.darken-3 {\n  color: #1b874b !important; }\n\n.bg-success.bg-darken-3 {\n  background-color: #1b874b !important; }\n\n.btn-success.btn-darken-3 {\n  border-color: #1f9d57 !important;\n  background-color: #1b874b !important; }\n  .btn-success.btn-darken-3:hover {\n    border-color: #1f9d57 !important;\n    background-color: #1b874b !important; }\n  .btn-success.btn-darken-3:focus, .btn-success.btn-darken-3:active {\n    border-color: #1b874b !important;\n    background-color: #177240 !important; }\n\n.btn-outline-success.btn-outline-darken-3 {\n  border-color: #1b874b !important;\n  color: #1b874b !important; }\n  .btn-outline-success.btn-outline-darken-3:hover {\n    background-color: #1b874b !important; }\n\ninput:focus ~ .bg-success {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #1b874b !important; }\n\n.border-success.border-darken-3 {\n  border: 1px solid #1b874b !important; }\n\n.border-top-success.border-top-darken-3 {\n  border-top: 1px solid #1b874b !important; }\n\n.border-bottom-success.border-bottom-darken-3 {\n  border-bottom: 1px solid #1b874b !important; }\n\n.border-left-success.border-left-darken-3 {\n  border-left: 1px solid #1b874b !important; }\n\n.border-right-success.border-right-darken-3 {\n  border-right: 1px solid #1b874b !important; }\n\n.overlay-success.overlay-darken-3 {\n  background: #1b874b;\n  /* The Fallback */\n  background: rgba(27, 135, 75, 0.6); }\n\n.success.darken-4 {\n  color: #177240 !important; }\n\n.bg-success.bg-darken-4 {\n  background-color: #177240 !important; }\n\n.btn-success.btn-darken-4 {\n  border-color: #1f9d57 !important;\n  background-color: #177240 !important; }\n  .btn-success.btn-darken-4:hover {\n    border-color: #1f9d57 !important;\n    background-color: #1b874b !important; }\n  .btn-success.btn-darken-4:focus, .btn-success.btn-darken-4:active {\n    border-color: #1b874b !important;\n    background-color: #177240 !important; }\n\n.btn-outline-success.btn-outline-darken-4 {\n  border-color: #177240 !important;\n  color: #177240 !important; }\n  .btn-outline-success.btn-outline-darken-4:hover {\n    background-color: #177240 !important; }\n\ninput:focus ~ .bg-success {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #177240 !important; }\n\n.border-success.border-darken-4 {\n  border: 1px solid #177240 !important; }\n\n.border-top-success.border-top-darken-4 {\n  border-top: 1px solid #177240 !important; }\n\n.border-bottom-success.border-bottom-darken-4 {\n  border-bottom: 1px solid #177240 !important; }\n\n.border-left-success.border-left-darken-4 {\n  border-left: 1px solid #177240 !important; }\n\n.border-right-success.border-right-darken-4 {\n  border-right: 1px solid #177240 !important; }\n\n.overlay-success.overlay-darken-4 {\n  background: #177240;\n  /* The Fallback */\n  background: rgba(23, 114, 64, 0.6); }\n\n.success.accent-1 {\n  color: #E1FFF1 !important; }\n\n.bg-success.bg-accent-1 {\n  background-color: #E1FFF1 !important; }\n\n.btn-success.btn-accent-1 {\n  border-color: #1f9d57 !important;\n  background-color: #E1FFF1 !important; }\n  .btn-success.btn-accent-1:hover {\n    border-color: #1f9d57 !important;\n    background-color: #1b874b !important; }\n  .btn-success.btn-accent-1:focus, .btn-success.btn-accent-1:active {\n    border-color: #1b874b !important;\n    background-color: #177240 !important; }\n\n.btn-outline-success.btn-outline-accent-1 {\n  border-color: #E1FFF1 !important;\n  color: #E1FFF1 !important; }\n  .btn-outline-success.btn-outline-accent-1:hover {\n    background-color: #E1FFF1 !important; }\n\ninput:focus ~ .bg-success {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #E1FFF1 !important; }\n\n.border-success.border-accent-1 {\n  border: 1px solid #E1FFF1 !important; }\n\n.border-top-success.border-top-accent-1 {\n  border-top: 1px solid #E1FFF1 !important; }\n\n.border-bottom-success.border-bottom-accent-1 {\n  border-bottom: 1px solid #E1FFF1 !important; }\n\n.border-left-success.border-left-accent-1 {\n  border-left: 1px solid #E1FFF1 !important; }\n\n.border-right-success.border-right-accent-1 {\n  border-right: 1px solid #E1FFF1 !important; }\n\n.overlay-success.overlay-accent-1 {\n  background: #E1FFF1;\n  /* The Fallback */\n  background: rgba(225, 255, 241, 0.6); }\n\n.success.accent-2 {\n  color: #AEFFD9 !important; }\n\n.bg-success.bg-accent-2 {\n  background-color: #AEFFD9 !important; }\n\n.btn-success.btn-accent-2 {\n  border-color: #1f9d57 !important;\n  background-color: #AEFFD9 !important; }\n  .btn-success.btn-accent-2:hover {\n    border-color: #1f9d57 !important;\n    background-color: #1b874b !important; }\n  .btn-success.btn-accent-2:focus, .btn-success.btn-accent-2:active {\n    border-color: #1b874b !important;\n    background-color: #177240 !important; }\n\n.btn-outline-success.btn-outline-accent-2 {\n  border-color: #AEFFD9 !important;\n  color: #AEFFD9 !important; }\n  .btn-outline-success.btn-outline-accent-2:hover {\n    background-color: #AEFFD9 !important; }\n\ninput:focus ~ .bg-success {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #AEFFD9 !important; }\n\n.border-success.border-accent-2 {\n  border: 1px solid #AEFFD9 !important; }\n\n.border-top-success.border-top-accent-2 {\n  border-top: 1px solid #AEFFD9 !important; }\n\n.border-bottom-success.border-bottom-accent-2 {\n  border-bottom: 1px solid #AEFFD9 !important; }\n\n.border-left-success.border-left-accent-2 {\n  border-left: 1px solid #AEFFD9 !important; }\n\n.border-right-success.border-right-accent-2 {\n  border-right: 1px solid #AEFFD9 !important; }\n\n.overlay-success.overlay-accent-2 {\n  background: #AEFFD9;\n  /* The Fallback */\n  background: rgba(174, 255, 217, 0.6); }\n\n.success.accent-3 {\n  color: #7BFFC1 !important; }\n\n.bg-success.bg-accent-3 {\n  background-color: #7BFFC1 !important; }\n\n.btn-success.btn-accent-3 {\n  border-color: #1f9d57 !important;\n  background-color: #7BFFC1 !important; }\n  .btn-success.btn-accent-3:hover {\n    border-color: #1f9d57 !important;\n    background-color: #1b874b !important; }\n  .btn-success.btn-accent-3:focus, .btn-success.btn-accent-3:active {\n    border-color: #1b874b !important;\n    background-color: #177240 !important; }\n\n.btn-outline-success.btn-outline-accent-3 {\n  border-color: #7BFFC1 !important;\n  color: #7BFFC1 !important; }\n  .btn-outline-success.btn-outline-accent-3:hover {\n    background-color: #7BFFC1 !important; }\n\ninput:focus ~ .bg-success {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #7BFFC1 !important; }\n\n.border-success.border-accent-3 {\n  border: 1px solid #7BFFC1 !important; }\n\n.border-top-success.border-top-accent-3 {\n  border-top: 1px solid #7BFFC1 !important; }\n\n.border-bottom-success.border-bottom-accent-3 {\n  border-bottom: 1px solid #7BFFC1 !important; }\n\n.border-left-success.border-left-accent-3 {\n  border-left: 1px solid #7BFFC1 !important; }\n\n.border-right-success.border-right-accent-3 {\n  border-right: 1px solid #7BFFC1 !important; }\n\n.overlay-success.overlay-accent-3 {\n  background: #7BFFC1;\n  /* The Fallback */\n  background: rgba(123, 255, 193, 0.6); }\n\n.success.accent-4 {\n  color: #62FFB5 !important; }\n\n.bg-success.bg-accent-4 {\n  background-color: #62FFB5 !important; }\n\n.btn-success.btn-accent-4 {\n  border-color: #1f9d57 !important;\n  background-color: #62FFB5 !important; }\n  .btn-success.btn-accent-4:hover {\n    border-color: #1f9d57 !important;\n    background-color: #1b874b !important; }\n  .btn-success.btn-accent-4:focus, .btn-success.btn-accent-4:active {\n    border-color: #1b874b !important;\n    background-color: #177240 !important; }\n\n.btn-outline-success.btn-outline-accent-4 {\n  border-color: #62FFB5 !important;\n  color: #62FFB5 !important; }\n  .btn-outline-success.btn-outline-accent-4:hover {\n    background-color: #62FFB5 !important; }\n\ninput:focus ~ .bg-success {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #62FFB5 !important; }\n\n.border-success.border-accent-4 {\n  border: 1px solid #62FFB5 !important; }\n\n.border-top-success.border-top-accent-4 {\n  border-top: 1px solid #62FFB5 !important; }\n\n.border-bottom-success.border-bottom-accent-4 {\n  border-bottom: 1px solid #62FFB5 !important; }\n\n.border-left-success.border-left-accent-4 {\n  border-left: 1px solid #62FFB5 !important; }\n\n.border-right-success.border-right-accent-4 {\n  border-right: 1px solid #62FFB5 !important; }\n\n.overlay-success.overlay-accent-4 {\n  background: #62FFB5;\n  /* The Fallback */\n  background: rgba(98, 255, 181, 0.6); }\n\n.success.gradient-bg {\n  color: #0064fa !important; }\n\n.bg-success.bg-gradient-bg {\n  background-color: #0064fa !important; }\n\n.btn-success.btn-gradient-bg {\n  border-color: #1f9d57 !important;\n  background-color: #0064fa !important; }\n  .btn-success.btn-gradient-bg:hover {\n    border-color: #1f9d57 !important;\n    background-color: #1b874b !important; }\n  .btn-success.btn-gradient-bg:focus, .btn-success.btn-gradient-bg:active {\n    border-color: #1b874b !important;\n    background-color: #177240 !important; }\n\n.btn-outline-success.btn-outline-gradient-bg {\n  border-color: #0064fa !important;\n  color: #0064fa !important; }\n  .btn-outline-success.btn-outline-gradient-bg:hover {\n    background-color: #0064fa !important; }\n\ninput:focus ~ .bg-success {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #0064fa !important; }\n\n.border-success.border-gradient-bg {\n  border: 1px solid #0064fa !important; }\n\n.border-top-success.border-top-gradient-bg {\n  border-top: 1px solid #0064fa !important; }\n\n.border-bottom-success.border-bottom-gradient-bg {\n  border-bottom: 1px solid #0064fa !important; }\n\n.border-left-success.border-left-gradient-bg {\n  border-left: 1px solid #0064fa !important; }\n\n.border-right-success.border-right-gradient-bg {\n  border-right: 1px solid #0064fa !important; }\n\n.overlay-success.overlay-gradient-bg {\n  background: #0064fa;\n  /* The Fallback */\n  background: rgba(0, 100, 250, 0.6); }\n\n.info.gradient-light {\n  color: #2d91ff !important; }\n\n.bg-info.bg-gradient-light {\n  background-color: #2d91ff !important; }\n\n.btn-info.btn-gradient-light {\n  border-color: #00a1b5 !important;\n  background-color: #2d91ff !important; }\n  .btn-info.btn-gradient-light:hover {\n    border-color: #00a1b5 !important;\n    background-color: #008b9c !important; }\n  .btn-info.btn-gradient-light:focus, .btn-info.btn-gradient-light:active {\n    border-color: #008b9c !important;\n    background-color: #007482 !important; }\n\n.btn-outline-info.btn-outline-gradient-light {\n  border-color: #2d91ff !important;\n  color: #2d91ff !important; }\n  .btn-outline-info.btn-outline-gradient-light:hover {\n    background-color: #2d91ff !important; }\n\ninput:focus ~ .bg-info {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #2d91ff !important; }\n\n.border-info.border-gradient-light {\n  border: 1px solid #2d91ff !important; }\n\n.border-top-info.border-top-gradient-light {\n  border-top: 1px solid #2d91ff !important; }\n\n.border-bottom-info.border-bottom-gradient-light {\n  border-bottom: 1px solid #2d91ff !important; }\n\n.border-left-info.border-left-gradient-light {\n  border-left: 1px solid #2d91ff !important; }\n\n.border-right-info.border-right-gradient-light {\n  border-right: 1px solid #2d91ff !important; }\n\n.overlay-info.overlay-gradient-light {\n  background: #2d91ff;\n  /* The Fallback */\n  background: rgba(45, 145, 255, 0.6); }\n\n.info.light-badge {\n  color: #b5f7ff !important; }\n\n.bg-info.bg-light-badge {\n  background-color: #b5f7ff !important; }\n\n.btn-info.btn-light-badge {\n  border-color: #00a1b5 !important;\n  background-color: #b5f7ff !important; }\n  .btn-info.btn-light-badge:hover {\n    border-color: #00a1b5 !important;\n    background-color: #008b9c !important; }\n  .btn-info.btn-light-badge:focus, .btn-info.btn-light-badge:active {\n    border-color: #008b9c !important;\n    background-color: #007482 !important; }\n\n.btn-outline-info.btn-outline-light-badge {\n  border-color: #b5f7ff !important;\n  color: #b5f7ff !important; }\n  .btn-outline-info.btn-outline-light-badge:hover {\n    background-color: #b5f7ff !important; }\n\ninput:focus ~ .bg-info {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #b5f7ff !important; }\n\n.border-info.border-light-badge {\n  border: 1px solid #b5f7ff !important; }\n\n.border-top-info.border-top-light-badge {\n  border-top: 1px solid #b5f7ff !important; }\n\n.border-bottom-info.border-bottom-light-badge {\n  border-bottom: 1px solid #b5f7ff !important; }\n\n.border-left-info.border-left-light-badge {\n  border-left: 1px solid #b5f7ff !important; }\n\n.border-right-info.border-right-light-badge {\n  border-right: 1px solid #b5f7ff !important; }\n\n.overlay-info.overlay-light-badge {\n  background: #b5f7ff;\n  /* The Fallback */\n  background: rgba(181, 247, 255, 0.6); }\n\n.info.lighten-5 {\n  color: #69efff !important; }\n\n.bg-info.bg-lighten-5 {\n  background-color: #69efff !important; }\n\n.btn-info.btn-lighten-5 {\n  border-color: #00a1b5 !important;\n  background-color: #69efff !important; }\n  .btn-info.btn-lighten-5:hover {\n    border-color: #00a1b5 !important;\n    background-color: #008b9c !important; }\n  .btn-info.btn-lighten-5:focus, .btn-info.btn-lighten-5:active {\n    border-color: #008b9c !important;\n    background-color: #007482 !important; }\n\n.btn-outline-info.btn-outline-lighten-5 {\n  border-color: #69efff !important;\n  color: #69efff !important; }\n  .btn-outline-info.btn-outline-lighten-5:hover {\n    background-color: #69efff !important; }\n\ninput:focus ~ .bg-info {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #69efff !important; }\n\n.border-info.border-lighten-5 {\n  border: 1px solid #69efff !important; }\n\n.border-top-info.border-top-lighten-5 {\n  border-top: 1px solid #69efff !important; }\n\n.border-bottom-info.border-bottom-lighten-5 {\n  border-bottom: 1px solid #69efff !important; }\n\n.border-left-info.border-left-lighten-5 {\n  border-left: 1px solid #69efff !important; }\n\n.border-right-info.border-right-lighten-5 {\n  border-right: 1px solid #69efff !important; }\n\n.overlay-info.overlay-lighten-5 {\n  background: #69efff;\n  /* The Fallback */\n  background: rgba(105, 239, 255, 0.6); }\n\n.info.lighten-4 {\n  color: #4fecff !important; }\n\n.bg-info.bg-lighten-4 {\n  background-color: #4fecff !important; }\n\n.btn-info.btn-lighten-4 {\n  border-color: #00a1b5 !important;\n  background-color: #4fecff !important; }\n  .btn-info.btn-lighten-4:hover {\n    border-color: #00a1b5 !important;\n    background-color: #008b9c !important; }\n  .btn-info.btn-lighten-4:focus, .btn-info.btn-lighten-4:active {\n    border-color: #008b9c !important;\n    background-color: #007482 !important; }\n\n.btn-outline-info.btn-outline-lighten-4 {\n  border-color: #4fecff !important;\n  color: #4fecff !important; }\n  .btn-outline-info.btn-outline-lighten-4:hover {\n    background-color: #4fecff !important; }\n\ninput:focus ~ .bg-info {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #4fecff !important; }\n\n.border-info.border-lighten-4 {\n  border: 1px solid #4fecff !important; }\n\n.border-top-info.border-top-lighten-4 {\n  border-top: 1px solid #4fecff !important; }\n\n.border-bottom-info.border-bottom-lighten-4 {\n  border-bottom: 1px solid #4fecff !important; }\n\n.border-left-info.border-left-lighten-4 {\n  border-left: 1px solid #4fecff !important; }\n\n.border-right-info.border-right-lighten-4 {\n  border-right: 1px solid #4fecff !important; }\n\n.overlay-info.overlay-lighten-4 {\n  background: #4fecff;\n  /* The Fallback */\n  background: rgba(79, 236, 255, 0.6); }\n\n.info.lighten-3 {\n  color: #36e9ff !important; }\n\n.bg-info.bg-lighten-3 {\n  background-color: #36e9ff !important; }\n\n.btn-info.btn-lighten-3 {\n  border-color: #00a1b5 !important;\n  background-color: #36e9ff !important; }\n  .btn-info.btn-lighten-3:hover {\n    border-color: #00a1b5 !important;\n    background-color: #008b9c !important; }\n  .btn-info.btn-lighten-3:focus, .btn-info.btn-lighten-3:active {\n    border-color: #008b9c !important;\n    background-color: #007482 !important; }\n\n.btn-outline-info.btn-outline-lighten-3 {\n  border-color: #36e9ff !important;\n  color: #36e9ff !important; }\n  .btn-outline-info.btn-outline-lighten-3:hover {\n    background-color: #36e9ff !important; }\n\ninput:focus ~ .bg-info {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #36e9ff !important; }\n\n.border-info.border-lighten-3 {\n  border: 1px solid #36e9ff !important; }\n\n.border-top-info.border-top-lighten-3 {\n  border-top: 1px solid #36e9ff !important; }\n\n.border-bottom-info.border-bottom-lighten-3 {\n  border-bottom: 1px solid #36e9ff !important; }\n\n.border-left-info.border-left-lighten-3 {\n  border-left: 1px solid #36e9ff !important; }\n\n.border-right-info.border-right-lighten-3 {\n  border-right: 1px solid #36e9ff !important; }\n\n.overlay-info.overlay-lighten-3 {\n  background: #36e9ff;\n  /* The Fallback */\n  background: rgba(54, 233, 255, 0.6); }\n\n.info.lighten-2 {\n  color: #1ce7ff !important; }\n\n.bg-info.bg-lighten-2 {\n  background-color: #1ce7ff !important; }\n\n.btn-info.btn-lighten-2 {\n  border-color: #00a1b5 !important;\n  background-color: #1ce7ff !important; }\n  .btn-info.btn-lighten-2:hover {\n    border-color: #00a1b5 !important;\n    background-color: #008b9c !important; }\n  .btn-info.btn-lighten-2:focus, .btn-info.btn-lighten-2:active {\n    border-color: #008b9c !important;\n    background-color: #007482 !important; }\n\n.btn-outline-info.btn-outline-lighten-2 {\n  border-color: #1ce7ff !important;\n  color: #1ce7ff !important; }\n  .btn-outline-info.btn-outline-lighten-2:hover {\n    background-color: #1ce7ff !important; }\n\ninput:focus ~ .bg-info {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #1ce7ff !important; }\n\n.border-info.border-lighten-2 {\n  border: 1px solid #1ce7ff !important; }\n\n.border-top-info.border-top-lighten-2 {\n  border-top: 1px solid #1ce7ff !important; }\n\n.border-bottom-info.border-bottom-lighten-2 {\n  border-bottom: 1px solid #1ce7ff !important; }\n\n.border-left-info.border-left-lighten-2 {\n  border-left: 1px solid #1ce7ff !important; }\n\n.border-right-info.border-right-lighten-2 {\n  border-right: 1px solid #1ce7ff !important; }\n\n.overlay-info.overlay-lighten-2 {\n  background: #1ce7ff;\n  /* The Fallback */\n  background: rgba(28, 231, 255, 0.6); }\n\n.info.lighten-1 {\n  color: #03e4ff !important; }\n\n.bg-info.bg-lighten-1 {\n  background-color: #03e4ff !important; }\n\n.btn-info.btn-lighten-1 {\n  border-color: #00a1b5 !important;\n  background-color: #03e4ff !important; }\n  .btn-info.btn-lighten-1:hover {\n    border-color: #00a1b5 !important;\n    background-color: #008b9c !important; }\n  .btn-info.btn-lighten-1:focus, .btn-info.btn-lighten-1:active {\n    border-color: #008b9c !important;\n    background-color: #007482 !important; }\n\n.btn-outline-info.btn-outline-lighten-1 {\n  border-color: #03e4ff !important;\n  color: #03e4ff !important; }\n  .btn-outline-info.btn-outline-lighten-1:hover {\n    background-color: #03e4ff !important; }\n\ninput:focus ~ .bg-info {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #03e4ff !important; }\n\n.border-info.border-lighten-1 {\n  border: 1px solid #03e4ff !important; }\n\n.border-top-info.border-top-lighten-1 {\n  border-top: 1px solid #03e4ff !important; }\n\n.border-bottom-info.border-bottom-lighten-1 {\n  border-bottom: 1px solid #03e4ff !important; }\n\n.border-left-info.border-left-lighten-1 {\n  border-left: 1px solid #03e4ff !important; }\n\n.border-right-info.border-right-lighten-1 {\n  border-right: 1px solid #03e4ff !important; }\n\n.overlay-info.overlay-lighten-1 {\n  background: #03e4ff;\n  /* The Fallback */\n  background: rgba(3, 228, 255, 0.6); }\n\n.info {\n  color: #00cfe8 !important; }\n\n.bg-info {\n  background-color: #00cfe8 !important; }\n  .bg-info .card-header,\n  .bg-info .card-footer {\n    background-color: transparent; }\n\n.alert-info {\n  background: rgba(0, 207, 232, 0.2) !important;\n  color: #00cfe8 !important; }\n  .alert-info .alert-heading {\n    box-shadow: rgba(0, 207, 232, 0.4) 0px 6px 15px -7px; }\n  .alert-info .alert-link {\n    color: #00b8cf !important; }\n\n.bg-rgba-info {\n  background: rgba(0, 207, 232, 0.15) !important; }\n\n.border-info {\n  border: 1px solid #00cfe8 !important; }\n\n.border-top-info {\n  border-top: 1px solid #00cfe8; }\n\n.border-bottom-info {\n  border-bottom: 1px solid #00cfe8; }\n\n.border-left-info {\n  border-left: 1px solid #00cfe8; }\n\n.border-right-info {\n  border-right: 1px solid #00cfe8; }\n\n.bg-info.badge-glow,\n.border-info.badge-glow,\n.badge-info.badge-glow {\n  box-shadow: 0px 0px 10px #00cfe8; }\n\n.badge.badge-info {\n  background-color: #00cfe8; }\n\n.badge.badge-light-info {\n  background-color: #b5f7ff;\n  color: #00cfe8 !important;\n  font-weight: 500; }\n\n.overlay-info {\n  background: #00cfe8;\n  /* The Fallback */\n  background: rgba(0, 207, 232, 0.6); }\n\n.btn-info {\n  border-color: #00a1b5 !important;\n  background-color: #00cfe8 !important;\n  color: #fff; }\n  .btn-info:hover {\n    border-color: #00b8cf !important;\n    color: #fff !important;\n    box-shadow: 0 8px 25px -8px #00cfe8; }\n  .btn-info:focus, .btn-info:active {\n    color: #fff !important; }\n\n.btn-flat-info {\n  background-color: transparent;\n  color: #00cfe8; }\n  .btn-flat-info:hover {\n    color: #00cfe8;\n    background-color: rgba(0, 207, 232, 0.1); }\n  .btn-flat-info:active, .btn-flat-info:focus {\n    background-color: #00cfe8;\n    color: #fff !important; }\n\n.btn-relief-info {\n  background-color: #00cfe8;\n  box-shadow: inset 0 -3px 0 0 rgba(0, 0, 0, 0.2);\n  color: #fff; }\n  .btn-relief-info:hover {\n    color: #fff; }\n  .btn-relief-info:active, .btn-relief-info:focus {\n    outline: none;\n    transform: translateY(3px); }\n\n.btn-outline-info {\n  border: 1px solid #00cfe8;\n  background-color: transparent;\n  color: #00cfe8; }\n  .btn-outline-info:hover {\n    background-color: rgba(0, 207, 232, 0.08);\n    color: #00cfe8; }\n  .btn-outline-info:active {\n    color: #fff !important; }\n\n.btn-info ~ .dropdown-menu .dropdown-item.active,\n.btn-outline-info ~ .dropdown-menu .dropdown-item.active,\n.btn-flat-info ~ .dropdown-menu .dropdown-item.active {\n  background-color: #00cfe8;\n  color: #fff; }\n  .btn-info ~ .dropdown-menu .dropdown-item.active:hover,\n  .btn-outline-info ~ .dropdown-menu .dropdown-item.active:hover,\n  .btn-flat-info ~ .dropdown-menu .dropdown-item.active:hover {\n    color: #fff; }\n\n.btn-info ~ .dropdown-menu .dropdown-item:not(.active):not(:active):hover,\n.btn-outline-info ~ .dropdown-menu .dropdown-item:not(.active):not(:active):hover,\n.btn-flat-info ~ .dropdown-menu .dropdown-item:not(.active):not(:active):hover {\n  color: #00cfe8; }\n\n.dropdown.dropdown-icon-wrapper .btn-info ~ .dropdown-menu .dropdown-item:hover i,\n.dropdown.dropdown-icon-wrapper .btn-outline-info ~ .dropdown-menu .dropdown-item:hover i,\n.dropdown.dropdown-icon-wrapper .btn-flat-info ~ .dropdown-menu .dropdown-item:hover i,\n.dropup.dropdown-icon-wrapper .btn-info ~ .dropdown-menu .dropdown-item:hover i,\n.dropup.dropdown-icon-wrapper .btn-outline-info ~ .dropdown-menu .dropdown-item:hover i,\n.dropup.dropdown-icon-wrapper .btn-flat-info ~ .dropdown-menu .dropdown-item:hover i,\n.dropright.dropdown-icon-wrapper .btn-info ~ .dropdown-menu .dropdown-item:hover i,\n.dropright.dropdown-icon-wrapper .btn-outline-info ~ .dropdown-menu .dropdown-item:hover i,\n.dropright.dropdown-icon-wrapper .btn-flat-info ~ .dropdown-menu .dropdown-item:hover i,\n.dropleft.dropdown-icon-wrapper .btn-info ~ .dropdown-menu .dropdown-item:hover i,\n.dropleft.dropdown-icon-wrapper .btn-outline-info ~ .dropdown-menu .dropdown-item:hover i,\n.dropleft.dropdown-icon-wrapper .btn-flat-info ~ .dropdown-menu .dropdown-item:hover i {\n  color: #00cfe8; }\n\n.dropdown.dropdown-icon-wrapper .btn-info ~ .dropdown-menu .dropdown-item:active i,\n.dropdown.dropdown-icon-wrapper .btn-outline-info ~ .dropdown-menu .dropdown-item:active i,\n.dropdown.dropdown-icon-wrapper .btn-flat-info ~ .dropdown-menu .dropdown-item:active i,\n.dropup.dropdown-icon-wrapper .btn-info ~ .dropdown-menu .dropdown-item:active i,\n.dropup.dropdown-icon-wrapper .btn-outline-info ~ .dropdown-menu .dropdown-item:active i,\n.dropup.dropdown-icon-wrapper .btn-flat-info ~ .dropdown-menu .dropdown-item:active i,\n.dropright.dropdown-icon-wrapper .btn-info ~ .dropdown-menu .dropdown-item:active i,\n.dropright.dropdown-icon-wrapper .btn-outline-info ~ .dropdown-menu .dropdown-item:active i,\n.dropright.dropdown-icon-wrapper .btn-flat-info ~ .dropdown-menu .dropdown-item:active i,\n.dropleft.dropdown-icon-wrapper .btn-info ~ .dropdown-menu .dropdown-item:active i,\n.dropleft.dropdown-icon-wrapper .btn-outline-info ~ .dropdown-menu .dropdown-item:active i,\n.dropleft.dropdown-icon-wrapper .btn-flat-info ~ .dropdown-menu .dropdown-item:active i {\n  color: #fff; }\n\n.bullet.bullet-info {\n  background-color: #00cfe8; }\n\n.pagination-info .page-item.active .page-link {\n  background: #00cfe8;\n  color: #fff; }\n  .pagination-info .page-item.active .page-link:hover {\n    color: #fff; }\n\n.pagination-info .page-item .page-link:hover {\n  color: #00cfe8; }\n\n.pagination-info .page-item.prev-item .page-link:hover, .pagination-info .page-item.next-item .page-link:hover {\n  background: #00cfe8;\n  color: #fff; }\n\n.nav-pill-info .nav-item .nav-link.active {\n  color: #fff;\n  background-color: #00cfe8 !important; }\n\n.progress-bar-info {\n  background-color: rgba(0, 207, 232, 0.1); }\n  .progress-bar-info .progress-bar {\n    background-color: #00cfe8; }\n\n.chip-info {\n  background-color: #00cfe8 !important; }\n  .chip-info .chip-body {\n    color: #fff !important; }\n\n.divider.divider-info .divider-text:before, .divider.divider-info .divider-text:after {\n  border-color: #00cfe8 !important; }\n\ninput[type=\"checkbox\"].bg-info + .custom-control-label:before, input[type=\"radio\"].bg-info + .custom-control-label:before {\n  background-color: #00cfe8 !important; }\n\ninput:focus ~ .bg-info {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #00cfe8 !important; }\n\n.vs-checkbox-info input:checked ~ .vs-checkbox {\n  border-color: #00cfe8 !important; }\n  .vs-checkbox-info input:checked ~ .vs-checkbox .vs-checkbox--check {\n    background-color: #00cfe8 !important; }\n\n.vs-checkbox-info input:active:checked + .vs-checkbox .vs-checkbox--check {\n  background-color: #00cfe8 !important; }\n\n.custom-switch-info .custom-control-input:checked ~ .custom-control-label::before {\n  background-color: #00cfe8 !important;\n  color: #fff;\n  transition: all .2s ease-out; }\n\n.vs-radio-info input:checked ~ .vs-radio .vs-radio--circle {\n  background: #00cfe8 !important;\n  box-shadow: 0 3px 12px 0 rgba(0, 207, 232, 0.4) !important; }\n\n.info.darken-1 {\n  color: #00b8cf !important; }\n\n.bg-info.bg-darken-1 {\n  background-color: #00b8cf !important; }\n\n.btn-info.btn-darken-1 {\n  border-color: #00a1b5 !important;\n  background-color: #00b8cf !important; }\n  .btn-info.btn-darken-1:hover {\n    border-color: #00a1b5 !important;\n    background-color: #008b9c !important; }\n  .btn-info.btn-darken-1:focus, .btn-info.btn-darken-1:active {\n    border-color: #008b9c !important;\n    background-color: #007482 !important; }\n\n.btn-outline-info.btn-outline-darken-1 {\n  border-color: #00b8cf !important;\n  color: #00b8cf !important; }\n  .btn-outline-info.btn-outline-darken-1:hover {\n    background-color: #00b8cf !important; }\n\ninput:focus ~ .bg-info {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #00b8cf !important; }\n\n.border-info.border-darken-1 {\n  border: 1px solid #00b8cf !important; }\n\n.border-top-info.border-top-darken-1 {\n  border-top: 1px solid #00b8cf !important; }\n\n.border-bottom-info.border-bottom-darken-1 {\n  border-bottom: 1px solid #00b8cf !important; }\n\n.border-left-info.border-left-darken-1 {\n  border-left: 1px solid #00b8cf !important; }\n\n.border-right-info.border-right-darken-1 {\n  border-right: 1px solid #00b8cf !important; }\n\n.overlay-info.overlay-darken-1 {\n  background: #00b8cf;\n  /* The Fallback */\n  background: rgba(0, 184, 207, 0.6); }\n\n.info.darken-2 {\n  color: #00a1b5 !important; }\n\n.bg-info.bg-darken-2 {\n  background-color: #00a1b5 !important; }\n\n.btn-info.btn-darken-2 {\n  border-color: #00a1b5 !important;\n  background-color: #00a1b5 !important; }\n  .btn-info.btn-darken-2:hover {\n    border-color: #00a1b5 !important;\n    background-color: #008b9c !important; }\n  .btn-info.btn-darken-2:focus, .btn-info.btn-darken-2:active {\n    border-color: #008b9c !important;\n    background-color: #007482 !important; }\n\n.btn-outline-info.btn-outline-darken-2 {\n  border-color: #00a1b5 !important;\n  color: #00a1b5 !important; }\n  .btn-outline-info.btn-outline-darken-2:hover {\n    background-color: #00a1b5 !important; }\n\ninput:focus ~ .bg-info {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #00a1b5 !important; }\n\n.border-info.border-darken-2 {\n  border: 1px solid #00a1b5 !important; }\n\n.border-top-info.border-top-darken-2 {\n  border-top: 1px solid #00a1b5 !important; }\n\n.border-bottom-info.border-bottom-darken-2 {\n  border-bottom: 1px solid #00a1b5 !important; }\n\n.border-left-info.border-left-darken-2 {\n  border-left: 1px solid #00a1b5 !important; }\n\n.border-right-info.border-right-darken-2 {\n  border-right: 1px solid #00a1b5 !important; }\n\n.overlay-info.overlay-darken-2 {\n  background: #00a1b5;\n  /* The Fallback */\n  background: rgba(0, 161, 181, 0.6); }\n\n.info.darken-3 {\n  color: #008b9c !important; }\n\n.bg-info.bg-darken-3 {\n  background-color: #008b9c !important; }\n\n.btn-info.btn-darken-3 {\n  border-color: #00a1b5 !important;\n  background-color: #008b9c !important; }\n  .btn-info.btn-darken-3:hover {\n    border-color: #00a1b5 !important;\n    background-color: #008b9c !important; }\n  .btn-info.btn-darken-3:focus, .btn-info.btn-darken-3:active {\n    border-color: #008b9c !important;\n    background-color: #007482 !important; }\n\n.btn-outline-info.btn-outline-darken-3 {\n  border-color: #008b9c !important;\n  color: #008b9c !important; }\n  .btn-outline-info.btn-outline-darken-3:hover {\n    background-color: #008b9c !important; }\n\ninput:focus ~ .bg-info {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #008b9c !important; }\n\n.border-info.border-darken-3 {\n  border: 1px solid #008b9c !important; }\n\n.border-top-info.border-top-darken-3 {\n  border-top: 1px solid #008b9c !important; }\n\n.border-bottom-info.border-bottom-darken-3 {\n  border-bottom: 1px solid #008b9c !important; }\n\n.border-left-info.border-left-darken-3 {\n  border-left: 1px solid #008b9c !important; }\n\n.border-right-info.border-right-darken-3 {\n  border-right: 1px solid #008b9c !important; }\n\n.overlay-info.overlay-darken-3 {\n  background: #008b9c;\n  /* The Fallback */\n  background: rgba(0, 139, 156, 0.6); }\n\n.info.darken-4 {\n  color: #007482 !important; }\n\n.bg-info.bg-darken-4 {\n  background-color: #007482 !important; }\n\n.btn-info.btn-darken-4 {\n  border-color: #00a1b5 !important;\n  background-color: #007482 !important; }\n  .btn-info.btn-darken-4:hover {\n    border-color: #00a1b5 !important;\n    background-color: #008b9c !important; }\n  .btn-info.btn-darken-4:focus, .btn-info.btn-darken-4:active {\n    border-color: #008b9c !important;\n    background-color: #007482 !important; }\n\n.btn-outline-info.btn-outline-darken-4 {\n  border-color: #007482 !important;\n  color: #007482 !important; }\n  .btn-outline-info.btn-outline-darken-4:hover {\n    background-color: #007482 !important; }\n\ninput:focus ~ .bg-info {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #007482 !important; }\n\n.border-info.border-darken-4 {\n  border: 1px solid #007482 !important; }\n\n.border-top-info.border-top-darken-4 {\n  border-top: 1px solid #007482 !important; }\n\n.border-bottom-info.border-bottom-darken-4 {\n  border-bottom: 1px solid #007482 !important; }\n\n.border-left-info.border-left-darken-4 {\n  border-left: 1px solid #007482 !important; }\n\n.border-right-info.border-right-darken-4 {\n  border-right: 1px solid #007482 !important; }\n\n.overlay-info.overlay-darken-4 {\n  background: #007482;\n  /* The Fallback */\n  background: rgba(0, 116, 130, 0.6); }\n\n.info.accent-1 {\n  color: #FEFFFF !important; }\n\n.bg-info.bg-accent-1 {\n  background-color: #FEFFFF !important; }\n\n.btn-info.btn-accent-1 {\n  border-color: #00a1b5 !important;\n  background-color: #FEFFFF !important; }\n  .btn-info.btn-accent-1:hover {\n    border-color: #00a1b5 !important;\n    background-color: #008b9c !important; }\n  .btn-info.btn-accent-1:focus, .btn-info.btn-accent-1:active {\n    border-color: #008b9c !important;\n    background-color: #007482 !important; }\n\n.btn-outline-info.btn-outline-accent-1 {\n  border-color: #FEFFFF !important;\n  color: #FEFFFF !important; }\n  .btn-outline-info.btn-outline-accent-1:hover {\n    background-color: #FEFFFF !important; }\n\ninput:focus ~ .bg-info {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #FEFFFF !important; }\n\n.border-info.border-accent-1 {\n  border: 1px solid #FEFFFF !important; }\n\n.border-top-info.border-top-accent-1 {\n  border-top: 1px solid #FEFFFF !important; }\n\n.border-bottom-info.border-bottom-accent-1 {\n  border-bottom: 1px solid #FEFFFF !important; }\n\n.border-left-info.border-left-accent-1 {\n  border-left: 1px solid #FEFFFF !important; }\n\n.border-right-info.border-right-accent-1 {\n  border-right: 1px solid #FEFFFF !important; }\n\n.overlay-info.overlay-accent-1 {\n  background: #FEFFFF;\n  /* The Fallback */\n  background: rgba(254, 255, 255, 0.6); }\n\n.info.accent-2 {\n  color: #CBF5FF !important; }\n\n.bg-info.bg-accent-2 {\n  background-color: #CBF5FF !important; }\n\n.btn-info.btn-accent-2 {\n  border-color: #00a1b5 !important;\n  background-color: #CBF5FF !important; }\n  .btn-info.btn-accent-2:hover {\n    border-color: #00a1b5 !important;\n    background-color: #008b9c !important; }\n  .btn-info.btn-accent-2:focus, .btn-info.btn-accent-2:active {\n    border-color: #008b9c !important;\n    background-color: #007482 !important; }\n\n.btn-outline-info.btn-outline-accent-2 {\n  border-color: #CBF5FF !important;\n  color: #CBF5FF !important; }\n  .btn-outline-info.btn-outline-accent-2:hover {\n    background-color: #CBF5FF !important; }\n\ninput:focus ~ .bg-info {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #CBF5FF !important; }\n\n.border-info.border-accent-2 {\n  border: 1px solid #CBF5FF !important; }\n\n.border-top-info.border-top-accent-2 {\n  border-top: 1px solid #CBF5FF !important; }\n\n.border-bottom-info.border-bottom-accent-2 {\n  border-bottom: 1px solid #CBF5FF !important; }\n\n.border-left-info.border-left-accent-2 {\n  border-left: 1px solid #CBF5FF !important; }\n\n.border-right-info.border-right-accent-2 {\n  border-right: 1px solid #CBF5FF !important; }\n\n.overlay-info.overlay-accent-2 {\n  background: #CBF5FF;\n  /* The Fallback */\n  background: rgba(203, 245, 255, 0.6); }\n\n.info.accent-3 {\n  color: #98ECFF !important; }\n\n.bg-info.bg-accent-3 {\n  background-color: #98ECFF !important; }\n\n.btn-info.btn-accent-3 {\n  border-color: #00a1b5 !important;\n  background-color: #98ECFF !important; }\n  .btn-info.btn-accent-3:hover {\n    border-color: #00a1b5 !important;\n    background-color: #008b9c !important; }\n  .btn-info.btn-accent-3:focus, .btn-info.btn-accent-3:active {\n    border-color: #008b9c !important;\n    background-color: #007482 !important; }\n\n.btn-outline-info.btn-outline-accent-3 {\n  border-color: #98ECFF !important;\n  color: #98ECFF !important; }\n  .btn-outline-info.btn-outline-accent-3:hover {\n    background-color: #98ECFF !important; }\n\ninput:focus ~ .bg-info {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #98ECFF !important; }\n\n.border-info.border-accent-3 {\n  border: 1px solid #98ECFF !important; }\n\n.border-top-info.border-top-accent-3 {\n  border-top: 1px solid #98ECFF !important; }\n\n.border-bottom-info.border-bottom-accent-3 {\n  border-bottom: 1px solid #98ECFF !important; }\n\n.border-left-info.border-left-accent-3 {\n  border-left: 1px solid #98ECFF !important; }\n\n.border-right-info.border-right-accent-3 {\n  border-right: 1px solid #98ECFF !important; }\n\n.overlay-info.overlay-accent-3 {\n  background: #98ECFF;\n  /* The Fallback */\n  background: rgba(152, 236, 255, 0.6); }\n\n.info.accent-4 {\n  color: #7FE7FF !important; }\n\n.bg-info.bg-accent-4 {\n  background-color: #7FE7FF !important; }\n\n.btn-info.btn-accent-4 {\n  border-color: #00a1b5 !important;\n  background-color: #7FE7FF !important; }\n  .btn-info.btn-accent-4:hover {\n    border-color: #00a1b5 !important;\n    background-color: #008b9c !important; }\n  .btn-info.btn-accent-4:focus, .btn-info.btn-accent-4:active {\n    border-color: #008b9c !important;\n    background-color: #007482 !important; }\n\n.btn-outline-info.btn-outline-accent-4 {\n  border-color: #7FE7FF !important;\n  color: #7FE7FF !important; }\n  .btn-outline-info.btn-outline-accent-4:hover {\n    background-color: #7FE7FF !important; }\n\ninput:focus ~ .bg-info {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #7FE7FF !important; }\n\n.border-info.border-accent-4 {\n  border: 1px solid #7FE7FF !important; }\n\n.border-top-info.border-top-accent-4 {\n  border-top: 1px solid #7FE7FF !important; }\n\n.border-bottom-info.border-bottom-accent-4 {\n  border-bottom: 1px solid #7FE7FF !important; }\n\n.border-left-info.border-left-accent-4 {\n  border-left: 1px solid #7FE7FF !important; }\n\n.border-right-info.border-right-accent-4 {\n  border-right: 1px solid #7FE7FF !important; }\n\n.overlay-info.overlay-accent-4 {\n  background: #7FE7FF;\n  /* The Fallback */\n  background: rgba(127, 231, 255, 0.6); }\n\n.info.gradient-bg {\n  color: #640064 !important; }\n\n.bg-info.bg-gradient-bg {\n  background-color: #640064 !important; }\n\n.btn-info.btn-gradient-bg {\n  border-color: #00a1b5 !important;\n  background-color: #640064 !important; }\n  .btn-info.btn-gradient-bg:hover {\n    border-color: #00a1b5 !important;\n    background-color: #008b9c !important; }\n  .btn-info.btn-gradient-bg:focus, .btn-info.btn-gradient-bg:active {\n    border-color: #008b9c !important;\n    background-color: #007482 !important; }\n\n.btn-outline-info.btn-outline-gradient-bg {\n  border-color: #640064 !important;\n  color: #640064 !important; }\n  .btn-outline-info.btn-outline-gradient-bg:hover {\n    background-color: #640064 !important; }\n\ninput:focus ~ .bg-info {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #640064 !important; }\n\n.border-info.border-gradient-bg {\n  border: 1px solid #640064 !important; }\n\n.border-top-info.border-top-gradient-bg {\n  border-top: 1px solid #640064 !important; }\n\n.border-bottom-info.border-bottom-gradient-bg {\n  border-bottom: 1px solid #640064 !important; }\n\n.border-left-info.border-left-gradient-bg {\n  border-left: 1px solid #640064 !important; }\n\n.border-right-info.border-right-gradient-bg {\n  border-right: 1px solid #640064 !important; }\n\n.overlay-info.overlay-gradient-bg {\n  background: #640064;\n  /* The Fallback */\n  background: rgba(100, 0, 100, 0.6); }\n\n.warning.gradient-light {\n  color: #fff487 !important; }\n\n.bg-warning.bg-gradient-light {\n  background-color: #fff487 !important; }\n\n.btn-warning.btn-gradient-light {\n  border-color: #ff8510 !important;\n  background-color: #fff487 !important; }\n  .btn-warning.btn-gradient-light:hover {\n    border-color: #ff8510 !important;\n    background-color: #f67800 !important; }\n  .btn-warning.btn-gradient-light:focus, .btn-warning.btn-gradient-light:active {\n    border-color: #f67800 !important;\n    background-color: #dc6c00 !important; }\n\n.btn-outline-warning.btn-outline-gradient-light {\n  border-color: #fff487 !important;\n  color: #fff487 !important; }\n  .btn-outline-warning.btn-outline-gradient-light:hover {\n    background-color: #fff487 !important; }\n\ninput:focus ~ .bg-warning {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #fff487 !important; }\n\n.border-warning.border-gradient-light {\n  border: 1px solid #fff487 !important; }\n\n.border-top-warning.border-top-gradient-light {\n  border-top: 1px solid #fff487 !important; }\n\n.border-bottom-warning.border-bottom-gradient-light {\n  border-bottom: 1px solid #fff487 !important; }\n\n.border-left-warning.border-left-gradient-light {\n  border-left: 1px solid #fff487 !important; }\n\n.border-right-warning.border-right-gradient-light {\n  border-right: 1px solid #fff487 !important; }\n\n.overlay-warning.overlay-gradient-light {\n  background: #fff487;\n  /* The Fallback */\n  background: rgba(255, 244, 135, 0.6); }\n\n.warning.light-badge {\n  color: #ffe0c3 !important; }\n\n.bg-warning.bg-light-badge {\n  background-color: #ffe0c3 !important; }\n\n.btn-warning.btn-light-badge {\n  border-color: #ff8510 !important;\n  background-color: #ffe0c3 !important; }\n  .btn-warning.btn-light-badge:hover {\n    border-color: #ff8510 !important;\n    background-color: #f67800 !important; }\n  .btn-warning.btn-light-badge:focus, .btn-warning.btn-light-badge:active {\n    border-color: #f67800 !important;\n    background-color: #dc6c00 !important; }\n\n.btn-outline-warning.btn-outline-light-badge {\n  border-color: #ffe0c3 !important;\n  color: #ffe0c3 !important; }\n  .btn-outline-warning.btn-outline-light-badge:hover {\n    background-color: #ffe0c3 !important; }\n\ninput:focus ~ .bg-warning {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #ffe0c3 !important; }\n\n.border-warning.border-light-badge {\n  border: 1px solid #ffe0c3 !important; }\n\n.border-top-warning.border-top-light-badge {\n  border-top: 1px solid #ffe0c3 !important; }\n\n.border-bottom-warning.border-bottom-light-badge {\n  border-bottom: 1px solid #ffe0c3 !important; }\n\n.border-left-warning.border-left-light-badge {\n  border-left: 1px solid #ffe0c3 !important; }\n\n.border-right-warning.border-right-light-badge {\n  border-right: 1px solid #ffe0c3 !important; }\n\n.overlay-warning.overlay-light-badge {\n  background: #ffe0c3;\n  /* The Fallback */\n  background: rgba(255, 224, 195, 0.6); }\n\n.warning.lighten-5 {\n  color: #ffe0c3 !important; }\n\n.bg-warning.bg-lighten-5 {\n  background-color: #ffe0c3 !important; }\n\n.btn-warning.btn-lighten-5 {\n  border-color: #ff8510 !important;\n  background-color: #ffe0c3 !important; }\n  .btn-warning.btn-lighten-5:hover {\n    border-color: #ff8510 !important;\n    background-color: #f67800 !important; }\n  .btn-warning.btn-lighten-5:focus, .btn-warning.btn-lighten-5:active {\n    border-color: #f67800 !important;\n    background-color: #dc6c00 !important; }\n\n.btn-outline-warning.btn-outline-lighten-5 {\n  border-color: #ffe0c3 !important;\n  color: #ffe0c3 !important; }\n  .btn-outline-warning.btn-outline-lighten-5:hover {\n    background-color: #ffe0c3 !important; }\n\ninput:focus ~ .bg-warning {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #ffe0c3 !important; }\n\n.border-warning.border-lighten-5 {\n  border: 1px solid #ffe0c3 !important; }\n\n.border-top-warning.border-top-lighten-5 {\n  border-top: 1px solid #ffe0c3 !important; }\n\n.border-bottom-warning.border-bottom-lighten-5 {\n  border-bottom: 1px solid #ffe0c3 !important; }\n\n.border-left-warning.border-left-lighten-5 {\n  border-left: 1px solid #ffe0c3 !important; }\n\n.border-right-warning.border-right-lighten-5 {\n  border-right: 1px solid #ffe0c3 !important; }\n\n.overlay-warning.overlay-lighten-5 {\n  background: #ffe0c3;\n  /* The Fallback */\n  background: rgba(255, 224, 195, 0.6); }\n\n.warning.lighten-4 {\n  color: #ffd3a9 !important; }\n\n.bg-warning.bg-lighten-4 {\n  background-color: #ffd3a9 !important; }\n\n.btn-warning.btn-lighten-4 {\n  border-color: #ff8510 !important;\n  background-color: #ffd3a9 !important; }\n  .btn-warning.btn-lighten-4:hover {\n    border-color: #ff8510 !important;\n    background-color: #f67800 !important; }\n  .btn-warning.btn-lighten-4:focus, .btn-warning.btn-lighten-4:active {\n    border-color: #f67800 !important;\n    background-color: #dc6c00 !important; }\n\n.btn-outline-warning.btn-outline-lighten-4 {\n  border-color: #ffd3a9 !important;\n  color: #ffd3a9 !important; }\n  .btn-outline-warning.btn-outline-lighten-4:hover {\n    background-color: #ffd3a9 !important; }\n\ninput:focus ~ .bg-warning {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #ffd3a9 !important; }\n\n.border-warning.border-lighten-4 {\n  border: 1px solid #ffd3a9 !important; }\n\n.border-top-warning.border-top-lighten-4 {\n  border-top: 1px solid #ffd3a9 !important; }\n\n.border-bottom-warning.border-bottom-lighten-4 {\n  border-bottom: 1px solid #ffd3a9 !important; }\n\n.border-left-warning.border-left-lighten-4 {\n  border-left: 1px solid #ffd3a9 !important; }\n\n.border-right-warning.border-right-lighten-4 {\n  border-right: 1px solid #ffd3a9 !important; }\n\n.overlay-warning.overlay-lighten-4 {\n  background: #ffd3a9;\n  /* The Fallback */\n  background: rgba(255, 211, 169, 0.6); }\n\n.warning.lighten-3 {\n  color: #ffc690 !important; }\n\n.bg-warning.bg-lighten-3 {\n  background-color: #ffc690 !important; }\n\n.btn-warning.btn-lighten-3 {\n  border-color: #ff8510 !important;\n  background-color: #ffc690 !important; }\n  .btn-warning.btn-lighten-3:hover {\n    border-color: #ff8510 !important;\n    background-color: #f67800 !important; }\n  .btn-warning.btn-lighten-3:focus, .btn-warning.btn-lighten-3:active {\n    border-color: #f67800 !important;\n    background-color: #dc6c00 !important; }\n\n.btn-outline-warning.btn-outline-lighten-3 {\n  border-color: #ffc690 !important;\n  color: #ffc690 !important; }\n  .btn-outline-warning.btn-outline-lighten-3:hover {\n    background-color: #ffc690 !important; }\n\ninput:focus ~ .bg-warning {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #ffc690 !important; }\n\n.border-warning.border-lighten-3 {\n  border: 1px solid #ffc690 !important; }\n\n.border-top-warning.border-top-lighten-3 {\n  border-top: 1px solid #ffc690 !important; }\n\n.border-bottom-warning.border-bottom-lighten-3 {\n  border-bottom: 1px solid #ffc690 !important; }\n\n.border-left-warning.border-left-lighten-3 {\n  border-left: 1px solid #ffc690 !important; }\n\n.border-right-warning.border-right-lighten-3 {\n  border-right: 1px solid #ffc690 !important; }\n\n.overlay-warning.overlay-lighten-3 {\n  background: #ffc690;\n  /* The Fallback */\n  background: rgba(255, 198, 144, 0.6); }\n\n.warning.lighten-2 {\n  color: #ffb976 !important; }\n\n.bg-warning.bg-lighten-2 {\n  background-color: #ffb976 !important; }\n\n.btn-warning.btn-lighten-2 {\n  border-color: #ff8510 !important;\n  background-color: #ffb976 !important; }\n  .btn-warning.btn-lighten-2:hover {\n    border-color: #ff8510 !important;\n    background-color: #f67800 !important; }\n  .btn-warning.btn-lighten-2:focus, .btn-warning.btn-lighten-2:active {\n    border-color: #f67800 !important;\n    background-color: #dc6c00 !important; }\n\n.btn-outline-warning.btn-outline-lighten-2 {\n  border-color: #ffb976 !important;\n  color: #ffb976 !important; }\n  .btn-outline-warning.btn-outline-lighten-2:hover {\n    background-color: #ffb976 !important; }\n\ninput:focus ~ .bg-warning {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #ffb976 !important; }\n\n.border-warning.border-lighten-2 {\n  border: 1px solid #ffb976 !important; }\n\n.border-top-warning.border-top-lighten-2 {\n  border-top: 1px solid #ffb976 !important; }\n\n.border-bottom-warning.border-bottom-lighten-2 {\n  border-bottom: 1px solid #ffb976 !important; }\n\n.border-left-warning.border-left-lighten-2 {\n  border-left: 1px solid #ffb976 !important; }\n\n.border-right-warning.border-right-lighten-2 {\n  border-right: 1px solid #ffb976 !important; }\n\n.overlay-warning.overlay-lighten-2 {\n  background: #ffb976;\n  /* The Fallback */\n  background: rgba(255, 185, 118, 0.6); }\n\n.warning.lighten-1 {\n  color: #ffac5d !important; }\n\n.bg-warning.bg-lighten-1 {\n  background-color: #ffac5d !important; }\n\n.btn-warning.btn-lighten-1 {\n  border-color: #ff8510 !important;\n  background-color: #ffac5d !important; }\n  .btn-warning.btn-lighten-1:hover {\n    border-color: #ff8510 !important;\n    background-color: #f67800 !important; }\n  .btn-warning.btn-lighten-1:focus, .btn-warning.btn-lighten-1:active {\n    border-color: #f67800 !important;\n    background-color: #dc6c00 !important; }\n\n.btn-outline-warning.btn-outline-lighten-1 {\n  border-color: #ffac5d !important;\n  color: #ffac5d !important; }\n  .btn-outline-warning.btn-outline-lighten-1:hover {\n    background-color: #ffac5d !important; }\n\ninput:focus ~ .bg-warning {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #ffac5d !important; }\n\n.border-warning.border-lighten-1 {\n  border: 1px solid #ffac5d !important; }\n\n.border-top-warning.border-top-lighten-1 {\n  border-top: 1px solid #ffac5d !important; }\n\n.border-bottom-warning.border-bottom-lighten-1 {\n  border-bottom: 1px solid #ffac5d !important; }\n\n.border-left-warning.border-left-lighten-1 {\n  border-left: 1px solid #ffac5d !important; }\n\n.border-right-warning.border-right-lighten-1 {\n  border-right: 1px solid #ffac5d !important; }\n\n.overlay-warning.overlay-lighten-1 {\n  background: #ffac5d;\n  /* The Fallback */\n  background: rgba(255, 172, 93, 0.6); }\n\n.warning {\n  color: #ff9f43 !important; }\n\n.bg-warning {\n  background-color: #ff9f43 !important; }\n  .bg-warning .card-header,\n  .bg-warning .card-footer {\n    background-color: transparent; }\n\n.alert-warning {\n  background: rgba(255, 159, 67, 0.2) !important;\n  color: #ff9f43 !important; }\n  .alert-warning .alert-heading {\n    box-shadow: rgba(255, 159, 67, 0.4) 0px 6px 15px -7px; }\n  .alert-warning .alert-link {\n    color: #ff922a !important; }\n\n.bg-rgba-warning {\n  background: rgba(255, 159, 67, 0.15) !important; }\n\n.border-warning {\n  border: 1px solid #ff9f43 !important; }\n\n.border-top-warning {\n  border-top: 1px solid #ff9f43; }\n\n.border-bottom-warning {\n  border-bottom: 1px solid #ff9f43; }\n\n.border-left-warning {\n  border-left: 1px solid #ff9f43; }\n\n.border-right-warning {\n  border-right: 1px solid #ff9f43; }\n\n.bg-warning.badge-glow,\n.border-warning.badge-glow,\n.badge-warning.badge-glow {\n  box-shadow: 0px 0px 10px #ff9f43; }\n\n.badge.badge-warning {\n  background-color: #ff9f43; }\n\n.badge.badge-light-warning {\n  background-color: #ffe0c3;\n  color: #ff9f43 !important;\n  font-weight: 500; }\n\n.overlay-warning {\n  background: #ff9f43;\n  /* The Fallback */\n  background: rgba(255, 159, 67, 0.6); }\n\n.btn-warning {\n  border-color: #ff8510 !important;\n  background-color: #ff9f43 !important;\n  color: #fff; }\n  .btn-warning:hover {\n    border-color: #ff922a !important;\n    color: #fff !important;\n    box-shadow: 0 8px 25px -8px #ff9f43; }\n  .btn-warning:focus, .btn-warning:active {\n    color: #fff !important; }\n\n.btn-flat-warning {\n  background-color: transparent;\n  color: #ff9f43; }\n  .btn-flat-warning:hover {\n    color: #ff9f43;\n    background-color: rgba(255, 159, 67, 0.1); }\n  .btn-flat-warning:active, .btn-flat-warning:focus {\n    background-color: #ff9f43;\n    color: #fff !important; }\n\n.btn-relief-warning {\n  background-color: #ff9f43;\n  box-shadow: inset 0 -3px 0 0 rgba(0, 0, 0, 0.2);\n  color: #fff; }\n  .btn-relief-warning:hover {\n    color: #fff; }\n  .btn-relief-warning:active, .btn-relief-warning:focus {\n    outline: none;\n    transform: translateY(3px); }\n\n.btn-outline-warning {\n  border: 1px solid #ff9f43;\n  background-color: transparent;\n  color: #ff9f43; }\n  .btn-outline-warning:hover {\n    background-color: rgba(255, 159, 67, 0.08);\n    color: #ff9f43; }\n  .btn-outline-warning:active {\n    color: #fff !important; }\n\n.btn-warning ~ .dropdown-menu .dropdown-item.active,\n.btn-outline-warning ~ .dropdown-menu .dropdown-item.active,\n.btn-flat-warning ~ .dropdown-menu .dropdown-item.active {\n  background-color: #ff9f43;\n  color: #fff; }\n  .btn-warning ~ .dropdown-menu .dropdown-item.active:hover,\n  .btn-outline-warning ~ .dropdown-menu .dropdown-item.active:hover,\n  .btn-flat-warning ~ .dropdown-menu .dropdown-item.active:hover {\n    color: #fff; }\n\n.btn-warning ~ .dropdown-menu .dropdown-item:not(.active):not(:active):hover,\n.btn-outline-warning ~ .dropdown-menu .dropdown-item:not(.active):not(:active):hover,\n.btn-flat-warning ~ .dropdown-menu .dropdown-item:not(.active):not(:active):hover {\n  color: #ff9f43; }\n\n.dropdown.dropdown-icon-wrapper .btn-warning ~ .dropdown-menu .dropdown-item:hover i,\n.dropdown.dropdown-icon-wrapper .btn-outline-warning ~ .dropdown-menu .dropdown-item:hover i,\n.dropdown.dropdown-icon-wrapper .btn-flat-warning ~ .dropdown-menu .dropdown-item:hover i,\n.dropup.dropdown-icon-wrapper .btn-warning ~ .dropdown-menu .dropdown-item:hover i,\n.dropup.dropdown-icon-wrapper .btn-outline-warning ~ .dropdown-menu .dropdown-item:hover i,\n.dropup.dropdown-icon-wrapper .btn-flat-warning ~ .dropdown-menu .dropdown-item:hover i,\n.dropright.dropdown-icon-wrapper .btn-warning ~ .dropdown-menu .dropdown-item:hover i,\n.dropright.dropdown-icon-wrapper .btn-outline-warning ~ .dropdown-menu .dropdown-item:hover i,\n.dropright.dropdown-icon-wrapper .btn-flat-warning ~ .dropdown-menu .dropdown-item:hover i,\n.dropleft.dropdown-icon-wrapper .btn-warning ~ .dropdown-menu .dropdown-item:hover i,\n.dropleft.dropdown-icon-wrapper .btn-outline-warning ~ .dropdown-menu .dropdown-item:hover i,\n.dropleft.dropdown-icon-wrapper .btn-flat-warning ~ .dropdown-menu .dropdown-item:hover i {\n  color: #ff9f43; }\n\n.dropdown.dropdown-icon-wrapper .btn-warning ~ .dropdown-menu .dropdown-item:active i,\n.dropdown.dropdown-icon-wrapper .btn-outline-warning ~ .dropdown-menu .dropdown-item:active i,\n.dropdown.dropdown-icon-wrapper .btn-flat-warning ~ .dropdown-menu .dropdown-item:active i,\n.dropup.dropdown-icon-wrapper .btn-warning ~ .dropdown-menu .dropdown-item:active i,\n.dropup.dropdown-icon-wrapper .btn-outline-warning ~ .dropdown-menu .dropdown-item:active i,\n.dropup.dropdown-icon-wrapper .btn-flat-warning ~ .dropdown-menu .dropdown-item:active i,\n.dropright.dropdown-icon-wrapper .btn-warning ~ .dropdown-menu .dropdown-item:active i,\n.dropright.dropdown-icon-wrapper .btn-outline-warning ~ .dropdown-menu .dropdown-item:active i,\n.dropright.dropdown-icon-wrapper .btn-flat-warning ~ .dropdown-menu .dropdown-item:active i,\n.dropleft.dropdown-icon-wrapper .btn-warning ~ .dropdown-menu .dropdown-item:active i,\n.dropleft.dropdown-icon-wrapper .btn-outline-warning ~ .dropdown-menu .dropdown-item:active i,\n.dropleft.dropdown-icon-wrapper .btn-flat-warning ~ .dropdown-menu .dropdown-item:active i {\n  color: #fff; }\n\n.bullet.bullet-warning {\n  background-color: #ff9f43; }\n\n.pagination-warning .page-item.active .page-link {\n  background: #ff9f43;\n  color: #fff; }\n  .pagination-warning .page-item.active .page-link:hover {\n    color: #fff; }\n\n.pagination-warning .page-item .page-link:hover {\n  color: #ff9f43; }\n\n.pagination-warning .page-item.prev-item .page-link:hover, .pagination-warning .page-item.next-item .page-link:hover {\n  background: #ff9f43;\n  color: #fff; }\n\n.nav-pill-warning .nav-item .nav-link.active {\n  color: #fff;\n  background-color: #ff9f43 !important; }\n\n.progress-bar-warning {\n  background-color: rgba(255, 159, 67, 0.1); }\n  .progress-bar-warning .progress-bar {\n    background-color: #ff9f43; }\n\n.chip-warning {\n  background-color: #ff9f43 !important; }\n  .chip-warning .chip-body {\n    color: #fff !important; }\n\n.divider.divider-warning .divider-text:before, .divider.divider-warning .divider-text:after {\n  border-color: #ff9f43 !important; }\n\ninput[type=\"checkbox\"].bg-warning + .custom-control-label:before, input[type=\"radio\"].bg-warning + .custom-control-label:before {\n  background-color: #ff9f43 !important; }\n\ninput:focus ~ .bg-warning {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #ff9f43 !important; }\n\n.vs-checkbox-warning input:checked ~ .vs-checkbox {\n  border-color: #ff9f43 !important; }\n  .vs-checkbox-warning input:checked ~ .vs-checkbox .vs-checkbox--check {\n    background-color: #ff9f43 !important; }\n\n.vs-checkbox-warning input:active:checked + .vs-checkbox .vs-checkbox--check {\n  background-color: #ff9f43 !important; }\n\n.custom-switch-warning .custom-control-input:checked ~ .custom-control-label::before {\n  background-color: #ff9f43 !important;\n  color: #fff;\n  transition: all .2s ease-out; }\n\n.vs-radio-warning input:checked ~ .vs-radio .vs-radio--circle {\n  background: #ff9f43 !important;\n  box-shadow: 0 3px 12px 0 rgba(255, 159, 67, 0.4) !important; }\n\n.warning.darken-1 {\n  color: #ff922a !important; }\n\n.bg-warning.bg-darken-1 {\n  background-color: #ff922a !important; }\n\n.btn-warning.btn-darken-1 {\n  border-color: #ff8510 !important;\n  background-color: #ff922a !important; }\n  .btn-warning.btn-darken-1:hover {\n    border-color: #ff8510 !important;\n    background-color: #f67800 !important; }\n  .btn-warning.btn-darken-1:focus, .btn-warning.btn-darken-1:active {\n    border-color: #f67800 !important;\n    background-color: #dc6c00 !important; }\n\n.btn-outline-warning.btn-outline-darken-1 {\n  border-color: #ff922a !important;\n  color: #ff922a !important; }\n  .btn-outline-warning.btn-outline-darken-1:hover {\n    background-color: #ff922a !important; }\n\ninput:focus ~ .bg-warning {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #ff922a !important; }\n\n.border-warning.border-darken-1 {\n  border: 1px solid #ff922a !important; }\n\n.border-top-warning.border-top-darken-1 {\n  border-top: 1px solid #ff922a !important; }\n\n.border-bottom-warning.border-bottom-darken-1 {\n  border-bottom: 1px solid #ff922a !important; }\n\n.border-left-warning.border-left-darken-1 {\n  border-left: 1px solid #ff922a !important; }\n\n.border-right-warning.border-right-darken-1 {\n  border-right: 1px solid #ff922a !important; }\n\n.overlay-warning.overlay-darken-1 {\n  background: #ff922a;\n  /* The Fallback */\n  background: rgba(255, 146, 42, 0.6); }\n\n.warning.darken-2 {\n  color: #ff8510 !important; }\n\n.bg-warning.bg-darken-2 {\n  background-color: #ff8510 !important; }\n\n.btn-warning.btn-darken-2 {\n  border-color: #ff8510 !important;\n  background-color: #ff8510 !important; }\n  .btn-warning.btn-darken-2:hover {\n    border-color: #ff8510 !important;\n    background-color: #f67800 !important; }\n  .btn-warning.btn-darken-2:focus, .btn-warning.btn-darken-2:active {\n    border-color: #f67800 !important;\n    background-color: #dc6c00 !important; }\n\n.btn-outline-warning.btn-outline-darken-2 {\n  border-color: #ff8510 !important;\n  color: #ff8510 !important; }\n  .btn-outline-warning.btn-outline-darken-2:hover {\n    background-color: #ff8510 !important; }\n\ninput:focus ~ .bg-warning {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #ff8510 !important; }\n\n.border-warning.border-darken-2 {\n  border: 1px solid #ff8510 !important; }\n\n.border-top-warning.border-top-darken-2 {\n  border-top: 1px solid #ff8510 !important; }\n\n.border-bottom-warning.border-bottom-darken-2 {\n  border-bottom: 1px solid #ff8510 !important; }\n\n.border-left-warning.border-left-darken-2 {\n  border-left: 1px solid #ff8510 !important; }\n\n.border-right-warning.border-right-darken-2 {\n  border-right: 1px solid #ff8510 !important; }\n\n.overlay-warning.overlay-darken-2 {\n  background: #ff8510;\n  /* The Fallback */\n  background: rgba(255, 133, 16, 0.6); }\n\n.warning.darken-3 {\n  color: #f67800 !important; }\n\n.bg-warning.bg-darken-3 {\n  background-color: #f67800 !important; }\n\n.btn-warning.btn-darken-3 {\n  border-color: #ff8510 !important;\n  background-color: #f67800 !important; }\n  .btn-warning.btn-darken-3:hover {\n    border-color: #ff8510 !important;\n    background-color: #f67800 !important; }\n  .btn-warning.btn-darken-3:focus, .btn-warning.btn-darken-3:active {\n    border-color: #f67800 !important;\n    background-color: #dc6c00 !important; }\n\n.btn-outline-warning.btn-outline-darken-3 {\n  border-color: #f67800 !important;\n  color: #f67800 !important; }\n  .btn-outline-warning.btn-outline-darken-3:hover {\n    background-color: #f67800 !important; }\n\ninput:focus ~ .bg-warning {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #f67800 !important; }\n\n.border-warning.border-darken-3 {\n  border: 1px solid #f67800 !important; }\n\n.border-top-warning.border-top-darken-3 {\n  border-top: 1px solid #f67800 !important; }\n\n.border-bottom-warning.border-bottom-darken-3 {\n  border-bottom: 1px solid #f67800 !important; }\n\n.border-left-warning.border-left-darken-3 {\n  border-left: 1px solid #f67800 !important; }\n\n.border-right-warning.border-right-darken-3 {\n  border-right: 1px solid #f67800 !important; }\n\n.overlay-warning.overlay-darken-3 {\n  background: #f67800;\n  /* The Fallback */\n  background: rgba(246, 120, 0, 0.6); }\n\n.warning.darken-4 {\n  color: #dc6c00 !important; }\n\n.bg-warning.bg-darken-4 {\n  background-color: #dc6c00 !important; }\n\n.btn-warning.btn-darken-4 {\n  border-color: #ff8510 !important;\n  background-color: #dc6c00 !important; }\n  .btn-warning.btn-darken-4:hover {\n    border-color: #ff8510 !important;\n    background-color: #f67800 !important; }\n  .btn-warning.btn-darken-4:focus, .btn-warning.btn-darken-4:active {\n    border-color: #f67800 !important;\n    background-color: #dc6c00 !important; }\n\n.btn-outline-warning.btn-outline-darken-4 {\n  border-color: #dc6c00 !important;\n  color: #dc6c00 !important; }\n  .btn-outline-warning.btn-outline-darken-4:hover {\n    background-color: #dc6c00 !important; }\n\ninput:focus ~ .bg-warning {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #dc6c00 !important; }\n\n.border-warning.border-darken-4 {\n  border: 1px solid #dc6c00 !important; }\n\n.border-top-warning.border-top-darken-4 {\n  border-top: 1px solid #dc6c00 !important; }\n\n.border-bottom-warning.border-bottom-darken-4 {\n  border-bottom: 1px solid #dc6c00 !important; }\n\n.border-left-warning.border-left-darken-4 {\n  border-left: 1px solid #dc6c00 !important; }\n\n.border-right-warning.border-right-darken-4 {\n  border-right: 1px solid #dc6c00 !important; }\n\n.overlay-warning.overlay-darken-4 {\n  background: #dc6c00;\n  /* The Fallback */\n  background: rgba(220, 108, 0, 0.6); }\n\n.warning.accent-1 {\n  color: #FFF5EF !important; }\n\n.bg-warning.bg-accent-1 {\n  background-color: #FFF5EF !important; }\n\n.btn-warning.btn-accent-1 {\n  border-color: #ff8510 !important;\n  background-color: #FFF5EF !important; }\n  .btn-warning.btn-accent-1:hover {\n    border-color: #ff8510 !important;\n    background-color: #f67800 !important; }\n  .btn-warning.btn-accent-1:focus, .btn-warning.btn-accent-1:active {\n    border-color: #f67800 !important;\n    background-color: #dc6c00 !important; }\n\n.btn-outline-warning.btn-outline-accent-1 {\n  border-color: #FFF5EF !important;\n  color: #FFF5EF !important; }\n  .btn-outline-warning.btn-outline-accent-1:hover {\n    background-color: #FFF5EF !important; }\n\ninput:focus ~ .bg-warning {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #FFF5EF !important; }\n\n.border-warning.border-accent-1 {\n  border: 1px solid #FFF5EF !important; }\n\n.border-top-warning.border-top-accent-1 {\n  border-top: 1px solid #FFF5EF !important; }\n\n.border-bottom-warning.border-bottom-accent-1 {\n  border-bottom: 1px solid #FFF5EF !important; }\n\n.border-left-warning.border-left-accent-1 {\n  border-left: 1px solid #FFF5EF !important; }\n\n.border-right-warning.border-right-accent-1 {\n  border-right: 1px solid #FFF5EF !important; }\n\n.overlay-warning.overlay-accent-1 {\n  background: #FFF5EF;\n  /* The Fallback */\n  background: rgba(255, 245, 239, 0.6); }\n\n.warning.accent-2 {\n  color: #FFE5D8 !important; }\n\n.bg-warning.bg-accent-2 {\n  background-color: #FFE5D8 !important; }\n\n.btn-warning.btn-accent-2 {\n  border-color: #ff8510 !important;\n  background-color: #FFE5D8 !important; }\n  .btn-warning.btn-accent-2:hover {\n    border-color: #ff8510 !important;\n    background-color: #f67800 !important; }\n  .btn-warning.btn-accent-2:focus, .btn-warning.btn-accent-2:active {\n    border-color: #f67800 !important;\n    background-color: #dc6c00 !important; }\n\n.btn-outline-warning.btn-outline-accent-2 {\n  border-color: #FFE5D8 !important;\n  color: #FFE5D8 !important; }\n  .btn-outline-warning.btn-outline-accent-2:hover {\n    background-color: #FFE5D8 !important; }\n\ninput:focus ~ .bg-warning {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #FFE5D8 !important; }\n\n.border-warning.border-accent-2 {\n  border: 1px solid #FFE5D8 !important; }\n\n.border-top-warning.border-top-accent-2 {\n  border-top: 1px solid #FFE5D8 !important; }\n\n.border-bottom-warning.border-bottom-accent-2 {\n  border-bottom: 1px solid #FFE5D8 !important; }\n\n.border-left-warning.border-left-accent-2 {\n  border-left: 1px solid #FFE5D8 !important; }\n\n.border-right-warning.border-right-accent-2 {\n  border-right: 1px solid #FFE5D8 !important; }\n\n.overlay-warning.overlay-accent-2 {\n  background: #FFE5D8;\n  /* The Fallback */\n  background: rgba(255, 229, 216, 0.6); }\n\n.warning.accent-3 {\n  color: #FFF6F3 !important; }\n\n.bg-warning.bg-accent-3 {\n  background-color: #FFF6F3 !important; }\n\n.btn-warning.btn-accent-3 {\n  border-color: #ff8510 !important;\n  background-color: #FFF6F3 !important; }\n  .btn-warning.btn-accent-3:hover {\n    border-color: #ff8510 !important;\n    background-color: #f67800 !important; }\n  .btn-warning.btn-accent-3:focus, .btn-warning.btn-accent-3:active {\n    border-color: #f67800 !important;\n    background-color: #dc6c00 !important; }\n\n.btn-outline-warning.btn-outline-accent-3 {\n  border-color: #FFF6F3 !important;\n  color: #FFF6F3 !important; }\n  .btn-outline-warning.btn-outline-accent-3:hover {\n    background-color: #FFF6F3 !important; }\n\ninput:focus ~ .bg-warning {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #FFF6F3 !important; }\n\n.border-warning.border-accent-3 {\n  border: 1px solid #FFF6F3 !important; }\n\n.border-top-warning.border-top-accent-3 {\n  border-top: 1px solid #FFF6F3 !important; }\n\n.border-bottom-warning.border-bottom-accent-3 {\n  border-bottom: 1px solid #FFF6F3 !important; }\n\n.border-left-warning.border-left-accent-3 {\n  border-left: 1px solid #FFF6F3 !important; }\n\n.border-right-warning.border-right-accent-3 {\n  border-right: 1px solid #FFF6F3 !important; }\n\n.overlay-warning.overlay-accent-3 {\n  background: #FFF6F3;\n  /* The Fallback */\n  background: rgba(255, 246, 243, 0.6); }\n\n.warning.accent-4 {\n  color: #FFE3DA !important; }\n\n.bg-warning.bg-accent-4 {\n  background-color: #FFE3DA !important; }\n\n.btn-warning.btn-accent-4 {\n  border-color: #ff8510 !important;\n  background-color: #FFE3DA !important; }\n  .btn-warning.btn-accent-4:hover {\n    border-color: #ff8510 !important;\n    background-color: #f67800 !important; }\n  .btn-warning.btn-accent-4:focus, .btn-warning.btn-accent-4:active {\n    border-color: #f67800 !important;\n    background-color: #dc6c00 !important; }\n\n.btn-outline-warning.btn-outline-accent-4 {\n  border-color: #FFE3DA !important;\n  color: #FFE3DA !important; }\n  .btn-outline-warning.btn-outline-accent-4:hover {\n    background-color: #FFE3DA !important; }\n\ninput:focus ~ .bg-warning {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #FFE3DA !important; }\n\n.border-warning.border-accent-4 {\n  border: 1px solid #FFE3DA !important; }\n\n.border-top-warning.border-top-accent-4 {\n  border-top: 1px solid #FFE3DA !important; }\n\n.border-bottom-warning.border-bottom-accent-4 {\n  border-bottom: 1px solid #FFE3DA !important; }\n\n.border-left-warning.border-left-accent-4 {\n  border-left: 1px solid #FFE3DA !important; }\n\n.border-right-warning.border-right-accent-4 {\n  border-right: 1px solid #FFE3DA !important; }\n\n.overlay-warning.overlay-accent-4 {\n  background: #FFE3DA;\n  /* The Fallback */\n  background: rgba(255, 227, 218, 0.6); }\n\n.warning.gradient-bg {\n  color: #fafafa !important; }\n\n.bg-warning.bg-gradient-bg {\n  background-color: #fafafa !important; }\n\n.btn-warning.btn-gradient-bg {\n  border-color: #ff8510 !important;\n  background-color: #fafafa !important; }\n  .btn-warning.btn-gradient-bg:hover {\n    border-color: #ff8510 !important;\n    background-color: #f67800 !important; }\n  .btn-warning.btn-gradient-bg:focus, .btn-warning.btn-gradient-bg:active {\n    border-color: #f67800 !important;\n    background-color: #dc6c00 !important; }\n\n.btn-outline-warning.btn-outline-gradient-bg {\n  border-color: #fafafa !important;\n  color: #fafafa !important; }\n  .btn-outline-warning.btn-outline-gradient-bg:hover {\n    background-color: #fafafa !important; }\n\ninput:focus ~ .bg-warning {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #fafafa !important; }\n\n.border-warning.border-gradient-bg {\n  border: 1px solid #fafafa !important; }\n\n.border-top-warning.border-top-gradient-bg {\n  border-top: 1px solid #fafafa !important; }\n\n.border-bottom-warning.border-bottom-gradient-bg {\n  border-bottom: 1px solid #fafafa !important; }\n\n.border-left-warning.border-left-gradient-bg {\n  border-left: 1px solid #fafafa !important; }\n\n.border-right-warning.border-right-gradient-bg {\n  border-right: 1px solid #fafafa !important; }\n\n.overlay-warning.overlay-gradient-bg {\n  background: #fafafa;\n  /* The Fallback */\n  background: rgba(250, 250, 250, 0.6); }\n\n.danger.gradient-light {\n  color: #f9b789 !important; }\n\n.bg-danger.bg-gradient-light {\n  background-color: #f9b789 !important; }\n\n.btn-danger.btn-gradient-light {\n  border-color: #e42728 !important;\n  background-color: #f9b789 !important; }\n  .btn-danger.btn-gradient-light:hover {\n    border-color: #e42728 !important;\n    background-color: #d71a1c !important; }\n  .btn-danger.btn-gradient-light:focus, .btn-danger.btn-gradient-light:active {\n    border-color: #d71a1c !important;\n    background-color: #c01819 !important; }\n\n.btn-outline-danger.btn-outline-gradient-light {\n  border-color: #f9b789 !important;\n  color: #f9b789 !important; }\n  .btn-outline-danger.btn-outline-gradient-light:hover {\n    background-color: #f9b789 !important; }\n\ninput:focus ~ .bg-danger {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #f9b789 !important; }\n\n.border-danger.border-gradient-light {\n  border: 1px solid #f9b789 !important; }\n\n.border-top-danger.border-top-gradient-light {\n  border-top: 1px solid #f9b789 !important; }\n\n.border-bottom-danger.border-bottom-gradient-light {\n  border-bottom: 1px solid #f9b789 !important; }\n\n.border-left-danger.border-left-gradient-light {\n  border-left: 1px solid #f9b789 !important; }\n\n.border-right-danger.border-right-gradient-light {\n  border-right: 1px solid #f9b789 !important; }\n\n.overlay-danger.overlay-gradient-light {\n  background: #f9b789;\n  /* The Fallback */\n  background: rgba(249, 183, 137, 0.6); }\n\n.danger.light-badge {\n  color: #fbdcdc !important; }\n\n.bg-danger.bg-light-badge {\n  background-color: #fbdcdc !important; }\n\n.btn-danger.btn-light-badge {\n  border-color: #e42728 !important;\n  background-color: #fbdcdc !important; }\n  .btn-danger.btn-light-badge:hover {\n    border-color: #e42728 !important;\n    background-color: #d71a1c !important; }\n  .btn-danger.btn-light-badge:focus, .btn-danger.btn-light-badge:active {\n    border-color: #d71a1c !important;\n    background-color: #c01819 !important; }\n\n.btn-outline-danger.btn-outline-light-badge {\n  border-color: #fbdcdc !important;\n  color: #fbdcdc !important; }\n  .btn-outline-danger.btn-outline-light-badge:hover {\n    background-color: #fbdcdc !important; }\n\ninput:focus ~ .bg-danger {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #fbdcdc !important; }\n\n.border-danger.border-light-badge {\n  border: 1px solid #fbdcdc !important; }\n\n.border-top-danger.border-top-light-badge {\n  border-top: 1px solid #fbdcdc !important; }\n\n.border-bottom-danger.border-bottom-light-badge {\n  border-bottom: 1px solid #fbdcdc !important; }\n\n.border-left-danger.border-left-light-badge {\n  border-left: 1px solid #fbdcdc !important; }\n\n.border-right-danger.border-right-light-badge {\n  border-right: 1px solid #fbdcdc !important; }\n\n.overlay-danger.overlay-light-badge {\n  background: #fbdcdc;\n  /* The Fallback */\n  background: rgba(251, 220, 220, 0.6); }\n\n.danger.lighten-5 {\n  color: #f8c6c6 !important; }\n\n.bg-danger.bg-lighten-5 {\n  background-color: #f8c6c6 !important; }\n\n.btn-danger.btn-lighten-5 {\n  border-color: #e42728 !important;\n  background-color: #f8c6c6 !important; }\n  .btn-danger.btn-lighten-5:hover {\n    border-color: #e42728 !important;\n    background-color: #d71a1c !important; }\n  .btn-danger.btn-lighten-5:focus, .btn-danger.btn-lighten-5:active {\n    border-color: #d71a1c !important;\n    background-color: #c01819 !important; }\n\n.btn-outline-danger.btn-outline-lighten-5 {\n  border-color: #f8c6c6 !important;\n  color: #f8c6c6 !important; }\n  .btn-outline-danger.btn-outline-lighten-5:hover {\n    background-color: #f8c6c6 !important; }\n\ninput:focus ~ .bg-danger {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #f8c6c6 !important; }\n\n.border-danger.border-lighten-5 {\n  border: 1px solid #f8c6c6 !important; }\n\n.border-top-danger.border-top-lighten-5 {\n  border-top: 1px solid #f8c6c6 !important; }\n\n.border-bottom-danger.border-bottom-lighten-5 {\n  border-bottom: 1px solid #f8c6c6 !important; }\n\n.border-left-danger.border-left-lighten-5 {\n  border-left: 1px solid #f8c6c6 !important; }\n\n.border-right-danger.border-right-lighten-5 {\n  border-right: 1px solid #f8c6c6 !important; }\n\n.overlay-danger.overlay-lighten-5 {\n  background: #f8c6c6;\n  /* The Fallback */\n  background: rgba(248, 198, 198, 0.6); }\n\n.danger.lighten-4 {\n  color: #f5afaf !important; }\n\n.bg-danger.bg-lighten-4 {\n  background-color: #f5afaf !important; }\n\n.btn-danger.btn-lighten-4 {\n  border-color: #e42728 !important;\n  background-color: #f5afaf !important; }\n  .btn-danger.btn-lighten-4:hover {\n    border-color: #e42728 !important;\n    background-color: #d71a1c !important; }\n  .btn-danger.btn-lighten-4:focus, .btn-danger.btn-lighten-4:active {\n    border-color: #d71a1c !important;\n    background-color: #c01819 !important; }\n\n.btn-outline-danger.btn-outline-lighten-4 {\n  border-color: #f5afaf !important;\n  color: #f5afaf !important; }\n  .btn-outline-danger.btn-outline-lighten-4:hover {\n    background-color: #f5afaf !important; }\n\ninput:focus ~ .bg-danger {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #f5afaf !important; }\n\n.border-danger.border-lighten-4 {\n  border: 1px solid #f5afaf !important; }\n\n.border-top-danger.border-top-lighten-4 {\n  border-top: 1px solid #f5afaf !important; }\n\n.border-bottom-danger.border-bottom-lighten-4 {\n  border-bottom: 1px solid #f5afaf !important; }\n\n.border-left-danger.border-left-lighten-4 {\n  border-left: 1px solid #f5afaf !important; }\n\n.border-right-danger.border-right-lighten-4 {\n  border-right: 1px solid #f5afaf !important; }\n\n.overlay-danger.overlay-lighten-4 {\n  background: #f5afaf;\n  /* The Fallback */\n  background: rgba(245, 175, 175, 0.6); }\n\n.danger.lighten-3 {\n  color: #f29899 !important; }\n\n.bg-danger.bg-lighten-3 {\n  background-color: #f29899 !important; }\n\n.btn-danger.btn-lighten-3 {\n  border-color: #e42728 !important;\n  background-color: #f29899 !important; }\n  .btn-danger.btn-lighten-3:hover {\n    border-color: #e42728 !important;\n    background-color: #d71a1c !important; }\n  .btn-danger.btn-lighten-3:focus, .btn-danger.btn-lighten-3:active {\n    border-color: #d71a1c !important;\n    background-color: #c01819 !important; }\n\n.btn-outline-danger.btn-outline-lighten-3 {\n  border-color: #f29899 !important;\n  color: #f29899 !important; }\n  .btn-outline-danger.btn-outline-lighten-3:hover {\n    background-color: #f29899 !important; }\n\ninput:focus ~ .bg-danger {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #f29899 !important; }\n\n.border-danger.border-lighten-3 {\n  border: 1px solid #f29899 !important; }\n\n.border-top-danger.border-top-lighten-3 {\n  border-top: 1px solid #f29899 !important; }\n\n.border-bottom-danger.border-bottom-lighten-3 {\n  border-bottom: 1px solid #f29899 !important; }\n\n.border-left-danger.border-left-lighten-3 {\n  border-left: 1px solid #f29899 !important; }\n\n.border-right-danger.border-right-lighten-3 {\n  border-right: 1px solid #f29899 !important; }\n\n.overlay-danger.overlay-lighten-3 {\n  background: #f29899;\n  /* The Fallback */\n  background: rgba(242, 152, 153, 0.6); }\n\n.danger.lighten-2 {\n  color: #f08182 !important; }\n\n.bg-danger.bg-lighten-2 {\n  background-color: #f08182 !important; }\n\n.btn-danger.btn-lighten-2 {\n  border-color: #e42728 !important;\n  background-color: #f08182 !important; }\n  .btn-danger.btn-lighten-2:hover {\n    border-color: #e42728 !important;\n    background-color: #d71a1c !important; }\n  .btn-danger.btn-lighten-2:focus, .btn-danger.btn-lighten-2:active {\n    border-color: #d71a1c !important;\n    background-color: #c01819 !important; }\n\n.btn-outline-danger.btn-outline-lighten-2 {\n  border-color: #f08182 !important;\n  color: #f08182 !important; }\n  .btn-outline-danger.btn-outline-lighten-2:hover {\n    background-color: #f08182 !important; }\n\ninput:focus ~ .bg-danger {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #f08182 !important; }\n\n.border-danger.border-lighten-2 {\n  border: 1px solid #f08182 !important; }\n\n.border-top-danger.border-top-lighten-2 {\n  border-top: 1px solid #f08182 !important; }\n\n.border-bottom-danger.border-bottom-lighten-2 {\n  border-bottom: 1px solid #f08182 !important; }\n\n.border-left-danger.border-left-lighten-2 {\n  border-left: 1px solid #f08182 !important; }\n\n.border-right-danger.border-right-lighten-2 {\n  border-right: 1px solid #f08182 !important; }\n\n.overlay-danger.overlay-lighten-2 {\n  background: #f08182;\n  /* The Fallback */\n  background: rgba(240, 129, 130, 0.6); }\n\n.danger.lighten-1 {\n  color: #ed6b6c !important; }\n\n.bg-danger.bg-lighten-1 {\n  background-color: #ed6b6c !important; }\n\n.btn-danger.btn-lighten-1 {\n  border-color: #e42728 !important;\n  background-color: #ed6b6c !important; }\n  .btn-danger.btn-lighten-1:hover {\n    border-color: #e42728 !important;\n    background-color: #d71a1c !important; }\n  .btn-danger.btn-lighten-1:focus, .btn-danger.btn-lighten-1:active {\n    border-color: #d71a1c !important;\n    background-color: #c01819 !important; }\n\n.btn-outline-danger.btn-outline-lighten-1 {\n  border-color: #ed6b6c !important;\n  color: #ed6b6c !important; }\n  .btn-outline-danger.btn-outline-lighten-1:hover {\n    background-color: #ed6b6c !important; }\n\ninput:focus ~ .bg-danger {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #ed6b6c !important; }\n\n.border-danger.border-lighten-1 {\n  border: 1px solid #ed6b6c !important; }\n\n.border-top-danger.border-top-lighten-1 {\n  border-top: 1px solid #ed6b6c !important; }\n\n.border-bottom-danger.border-bottom-lighten-1 {\n  border-bottom: 1px solid #ed6b6c !important; }\n\n.border-left-danger.border-left-lighten-1 {\n  border-left: 1px solid #ed6b6c !important; }\n\n.border-right-danger.border-right-lighten-1 {\n  border-right: 1px solid #ed6b6c !important; }\n\n.overlay-danger.overlay-lighten-1 {\n  background: #ed6b6c;\n  /* The Fallback */\n  background: rgba(237, 107, 108, 0.6); }\n\n.danger {\n  color: #ea5455 !important; }\n\n.bg-danger {\n  background-color: #ea5455 !important; }\n  .bg-danger .card-header,\n  .bg-danger .card-footer {\n    background-color: transparent; }\n\n.alert-danger {\n  background: rgba(234, 84, 85, 0.2) !important;\n  color: #ea5455 !important; }\n  .alert-danger .alert-heading {\n    box-shadow: rgba(234, 84, 85, 0.4) 0px 6px 15px -7px; }\n  .alert-danger .alert-link {\n    color: #e73d3e !important; }\n\n.bg-rgba-danger {\n  background: rgba(234, 84, 85, 0.15) !important; }\n\n.border-danger {\n  border: 1px solid #ea5455 !important; }\n\n.border-top-danger {\n  border-top: 1px solid #ea5455; }\n\n.border-bottom-danger {\n  border-bottom: 1px solid #ea5455; }\n\n.border-left-danger {\n  border-left: 1px solid #ea5455; }\n\n.border-right-danger {\n  border-right: 1px solid #ea5455; }\n\n.bg-danger.badge-glow,\n.border-danger.badge-glow,\n.badge-danger.badge-glow {\n  box-shadow: 0px 0px 10px #ea5455; }\n\n.badge.badge-danger {\n  background-color: #ea5455; }\n\n.badge.badge-light-danger {\n  background-color: #fbdcdc;\n  color: #ea5455 !important;\n  font-weight: 500; }\n\n.overlay-danger {\n  background: #ea5455;\n  /* The Fallback */\n  background: rgba(234, 84, 85, 0.6); }\n\n.btn-danger {\n  border-color: #e42728 !important;\n  background-color: #ea5455 !important;\n  color: #fff; }\n  .btn-danger:hover {\n    border-color: #e73d3e !important;\n    color: #fff !important;\n    box-shadow: 0 8px 25px -8px #ea5455; }\n  .btn-danger:focus, .btn-danger:active {\n    color: #fff !important; }\n\n.btn-flat-danger {\n  background-color: transparent;\n  color: #ea5455; }\n  .btn-flat-danger:hover {\n    color: #ea5455;\n    background-color: rgba(234, 84, 85, 0.1); }\n  .btn-flat-danger:active, .btn-flat-danger:focus {\n    background-color: #ea5455;\n    color: #fff !important; }\n\n.btn-relief-danger {\n  background-color: #ea5455;\n  box-shadow: inset 0 -3px 0 0 rgba(0, 0, 0, 0.2);\n  color: #fff; }\n  .btn-relief-danger:hover {\n    color: #fff; }\n  .btn-relief-danger:active, .btn-relief-danger:focus {\n    outline: none;\n    transform: translateY(3px); }\n\n.btn-outline-danger {\n  border: 1px solid #ea5455;\n  background-color: transparent;\n  color: #ea5455; }\n  .btn-outline-danger:hover {\n    background-color: rgba(234, 84, 85, 0.08);\n    color: #ea5455; }\n  .btn-outline-danger:active {\n    color: #fff !important; }\n\n.btn-danger ~ .dropdown-menu .dropdown-item.active,\n.btn-outline-danger ~ .dropdown-menu .dropdown-item.active,\n.btn-flat-danger ~ .dropdown-menu .dropdown-item.active {\n  background-color: #ea5455;\n  color: #fff; }\n  .btn-danger ~ .dropdown-menu .dropdown-item.active:hover,\n  .btn-outline-danger ~ .dropdown-menu .dropdown-item.active:hover,\n  .btn-flat-danger ~ .dropdown-menu .dropdown-item.active:hover {\n    color: #fff; }\n\n.btn-danger ~ .dropdown-menu .dropdown-item:not(.active):not(:active):hover,\n.btn-outline-danger ~ .dropdown-menu .dropdown-item:not(.active):not(:active):hover,\n.btn-flat-danger ~ .dropdown-menu .dropdown-item:not(.active):not(:active):hover {\n  color: #ea5455; }\n\n.dropdown.dropdown-icon-wrapper .btn-danger ~ .dropdown-menu .dropdown-item:hover i,\n.dropdown.dropdown-icon-wrapper .btn-outline-danger ~ .dropdown-menu .dropdown-item:hover i,\n.dropdown.dropdown-icon-wrapper .btn-flat-danger ~ .dropdown-menu .dropdown-item:hover i,\n.dropup.dropdown-icon-wrapper .btn-danger ~ .dropdown-menu .dropdown-item:hover i,\n.dropup.dropdown-icon-wrapper .btn-outline-danger ~ .dropdown-menu .dropdown-item:hover i,\n.dropup.dropdown-icon-wrapper .btn-flat-danger ~ .dropdown-menu .dropdown-item:hover i,\n.dropright.dropdown-icon-wrapper .btn-danger ~ .dropdown-menu .dropdown-item:hover i,\n.dropright.dropdown-icon-wrapper .btn-outline-danger ~ .dropdown-menu .dropdown-item:hover i,\n.dropright.dropdown-icon-wrapper .btn-flat-danger ~ .dropdown-menu .dropdown-item:hover i,\n.dropleft.dropdown-icon-wrapper .btn-danger ~ .dropdown-menu .dropdown-item:hover i,\n.dropleft.dropdown-icon-wrapper .btn-outline-danger ~ .dropdown-menu .dropdown-item:hover i,\n.dropleft.dropdown-icon-wrapper .btn-flat-danger ~ .dropdown-menu .dropdown-item:hover i {\n  color: #ea5455; }\n\n.dropdown.dropdown-icon-wrapper .btn-danger ~ .dropdown-menu .dropdown-item:active i,\n.dropdown.dropdown-icon-wrapper .btn-outline-danger ~ .dropdown-menu .dropdown-item:active i,\n.dropdown.dropdown-icon-wrapper .btn-flat-danger ~ .dropdown-menu .dropdown-item:active i,\n.dropup.dropdown-icon-wrapper .btn-danger ~ .dropdown-menu .dropdown-item:active i,\n.dropup.dropdown-icon-wrapper .btn-outline-danger ~ .dropdown-menu .dropdown-item:active i,\n.dropup.dropdown-icon-wrapper .btn-flat-danger ~ .dropdown-menu .dropdown-item:active i,\n.dropright.dropdown-icon-wrapper .btn-danger ~ .dropdown-menu .dropdown-item:active i,\n.dropright.dropdown-icon-wrapper .btn-outline-danger ~ .dropdown-menu .dropdown-item:active i,\n.dropright.dropdown-icon-wrapper .btn-flat-danger ~ .dropdown-menu .dropdown-item:active i,\n.dropleft.dropdown-icon-wrapper .btn-danger ~ .dropdown-menu .dropdown-item:active i,\n.dropleft.dropdown-icon-wrapper .btn-outline-danger ~ .dropdown-menu .dropdown-item:active i,\n.dropleft.dropdown-icon-wrapper .btn-flat-danger ~ .dropdown-menu .dropdown-item:active i {\n  color: #fff; }\n\n.bullet.bullet-danger {\n  background-color: #ea5455; }\n\n.pagination-danger .page-item.active .page-link {\n  background: #ea5455;\n  color: #fff; }\n  .pagination-danger .page-item.active .page-link:hover {\n    color: #fff; }\n\n.pagination-danger .page-item .page-link:hover {\n  color: #ea5455; }\n\n.pagination-danger .page-item.prev-item .page-link:hover, .pagination-danger .page-item.next-item .page-link:hover {\n  background: #ea5455;\n  color: #fff; }\n\n.nav-pill-danger .nav-item .nav-link.active {\n  color: #fff;\n  background-color: #ea5455 !important; }\n\n.progress-bar-danger {\n  background-color: rgba(234, 84, 85, 0.1); }\n  .progress-bar-danger .progress-bar {\n    background-color: #ea5455; }\n\n.chip-danger {\n  background-color: #ea5455 !important; }\n  .chip-danger .chip-body {\n    color: #fff !important; }\n\n.divider.divider-danger .divider-text:before, .divider.divider-danger .divider-text:after {\n  border-color: #ea5455 !important; }\n\ninput[type=\"checkbox\"].bg-danger + .custom-control-label:before, input[type=\"radio\"].bg-danger + .custom-control-label:before {\n  background-color: #ea5455 !important; }\n\ninput:focus ~ .bg-danger {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #ea5455 !important; }\n\n.vs-checkbox-danger input:checked ~ .vs-checkbox {\n  border-color: #ea5455 !important; }\n  .vs-checkbox-danger input:checked ~ .vs-checkbox .vs-checkbox--check {\n    background-color: #ea5455 !important; }\n\n.vs-checkbox-danger input:active:checked + .vs-checkbox .vs-checkbox--check {\n  background-color: #ea5455 !important; }\n\n.custom-switch-danger .custom-control-input:checked ~ .custom-control-label::before {\n  background-color: #ea5455 !important;\n  color: #fff;\n  transition: all .2s ease-out; }\n\n.vs-radio-danger input:checked ~ .vs-radio .vs-radio--circle {\n  background: #ea5455 !important;\n  box-shadow: 0 3px 12px 0 rgba(234, 84, 85, 0.4) !important; }\n\n.danger.darken-1 {\n  color: #e73d3e !important; }\n\n.bg-danger.bg-darken-1 {\n  background-color: #e73d3e !important; }\n\n.btn-danger.btn-darken-1 {\n  border-color: #e42728 !important;\n  background-color: #e73d3e !important; }\n  .btn-danger.btn-darken-1:hover {\n    border-color: #e42728 !important;\n    background-color: #d71a1c !important; }\n  .btn-danger.btn-darken-1:focus, .btn-danger.btn-darken-1:active {\n    border-color: #d71a1c !important;\n    background-color: #c01819 !important; }\n\n.btn-outline-danger.btn-outline-darken-1 {\n  border-color: #e73d3e !important;\n  color: #e73d3e !important; }\n  .btn-outline-danger.btn-outline-darken-1:hover {\n    background-color: #e73d3e !important; }\n\ninput:focus ~ .bg-danger {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #e73d3e !important; }\n\n.border-danger.border-darken-1 {\n  border: 1px solid #e73d3e !important; }\n\n.border-top-danger.border-top-darken-1 {\n  border-top: 1px solid #e73d3e !important; }\n\n.border-bottom-danger.border-bottom-darken-1 {\n  border-bottom: 1px solid #e73d3e !important; }\n\n.border-left-danger.border-left-darken-1 {\n  border-left: 1px solid #e73d3e !important; }\n\n.border-right-danger.border-right-darken-1 {\n  border-right: 1px solid #e73d3e !important; }\n\n.overlay-danger.overlay-darken-1 {\n  background: #e73d3e;\n  /* The Fallback */\n  background: rgba(231, 61, 62, 0.6); }\n\n.danger.darken-2 {\n  color: #e42728 !important; }\n\n.bg-danger.bg-darken-2 {\n  background-color: #e42728 !important; }\n\n.btn-danger.btn-darken-2 {\n  border-color: #e42728 !important;\n  background-color: #e42728 !important; }\n  .btn-danger.btn-darken-2:hover {\n    border-color: #e42728 !important;\n    background-color: #d71a1c !important; }\n  .btn-danger.btn-darken-2:focus, .btn-danger.btn-darken-2:active {\n    border-color: #d71a1c !important;\n    background-color: #c01819 !important; }\n\n.btn-outline-danger.btn-outline-darken-2 {\n  border-color: #e42728 !important;\n  color: #e42728 !important; }\n  .btn-outline-danger.btn-outline-darken-2:hover {\n    background-color: #e42728 !important; }\n\ninput:focus ~ .bg-danger {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #e42728 !important; }\n\n.border-danger.border-darken-2 {\n  border: 1px solid #e42728 !important; }\n\n.border-top-danger.border-top-darken-2 {\n  border-top: 1px solid #e42728 !important; }\n\n.border-bottom-danger.border-bottom-darken-2 {\n  border-bottom: 1px solid #e42728 !important; }\n\n.border-left-danger.border-left-darken-2 {\n  border-left: 1px solid #e42728 !important; }\n\n.border-right-danger.border-right-darken-2 {\n  border-right: 1px solid #e42728 !important; }\n\n.overlay-danger.overlay-darken-2 {\n  background: #e42728;\n  /* The Fallback */\n  background: rgba(228, 39, 40, 0.6); }\n\n.danger.darken-3 {\n  color: #d71a1c !important; }\n\n.bg-danger.bg-darken-3 {\n  background-color: #d71a1c !important; }\n\n.btn-danger.btn-darken-3 {\n  border-color: #e42728 !important;\n  background-color: #d71a1c !important; }\n  .btn-danger.btn-darken-3:hover {\n    border-color: #e42728 !important;\n    background-color: #d71a1c !important; }\n  .btn-danger.btn-darken-3:focus, .btn-danger.btn-darken-3:active {\n    border-color: #d71a1c !important;\n    background-color: #c01819 !important; }\n\n.btn-outline-danger.btn-outline-darken-3 {\n  border-color: #d71a1c !important;\n  color: #d71a1c !important; }\n  .btn-outline-danger.btn-outline-darken-3:hover {\n    background-color: #d71a1c !important; }\n\ninput:focus ~ .bg-danger {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #d71a1c !important; }\n\n.border-danger.border-darken-3 {\n  border: 1px solid #d71a1c !important; }\n\n.border-top-danger.border-top-darken-3 {\n  border-top: 1px solid #d71a1c !important; }\n\n.border-bottom-danger.border-bottom-darken-3 {\n  border-bottom: 1px solid #d71a1c !important; }\n\n.border-left-danger.border-left-darken-3 {\n  border-left: 1px solid #d71a1c !important; }\n\n.border-right-danger.border-right-darken-3 {\n  border-right: 1px solid #d71a1c !important; }\n\n.overlay-danger.overlay-darken-3 {\n  background: #d71a1c;\n  /* The Fallback */\n  background: rgba(215, 26, 28, 0.6); }\n\n.danger.darken-4 {\n  color: #c01819 !important; }\n\n.bg-danger.bg-darken-4 {\n  background-color: #c01819 !important; }\n\n.btn-danger.btn-darken-4 {\n  border-color: #e42728 !important;\n  background-color: #c01819 !important; }\n  .btn-danger.btn-darken-4:hover {\n    border-color: #e42728 !important;\n    background-color: #d71a1c !important; }\n  .btn-danger.btn-darken-4:focus, .btn-danger.btn-darken-4:active {\n    border-color: #d71a1c !important;\n    background-color: #c01819 !important; }\n\n.btn-outline-danger.btn-outline-darken-4 {\n  border-color: #c01819 !important;\n  color: #c01819 !important; }\n  .btn-outline-danger.btn-outline-darken-4:hover {\n    background-color: #c01819 !important; }\n\ninput:focus ~ .bg-danger {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #c01819 !important; }\n\n.border-danger.border-darken-4 {\n  border: 1px solid #c01819 !important; }\n\n.border-top-danger.border-top-darken-4 {\n  border-top: 1px solid #c01819 !important; }\n\n.border-bottom-danger.border-bottom-darken-4 {\n  border-bottom: 1px solid #c01819 !important; }\n\n.border-left-danger.border-left-darken-4 {\n  border-left: 1px solid #c01819 !important; }\n\n.border-right-danger.border-right-darken-4 {\n  border-right: 1px solid #c01819 !important; }\n\n.overlay-danger.overlay-darken-4 {\n  background: #c01819;\n  /* The Fallback */\n  background: rgba(192, 24, 25, 0.6); }\n\n.danger.accent-1 {\n  color: #FFEEF1 !important; }\n\n.bg-danger.bg-accent-1 {\n  background-color: #FFEEF1 !important; }\n\n.btn-danger.btn-accent-1 {\n  border-color: #e42728 !important;\n  background-color: #FFEEF1 !important; }\n  .btn-danger.btn-accent-1:hover {\n    border-color: #e42728 !important;\n    background-color: #d71a1c !important; }\n  .btn-danger.btn-accent-1:focus, .btn-danger.btn-accent-1:active {\n    border-color: #d71a1c !important;\n    background-color: #c01819 !important; }\n\n.btn-outline-danger.btn-outline-accent-1 {\n  border-color: #FFEEF1 !important;\n  color: #FFEEF1 !important; }\n  .btn-outline-danger.btn-outline-accent-1:hover {\n    background-color: #FFEEF1 !important; }\n\ninput:focus ~ .bg-danger {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #FFEEF1 !important; }\n\n.border-danger.border-accent-1 {\n  border: 1px solid #FFEEF1 !important; }\n\n.border-top-danger.border-top-accent-1 {\n  border-top: 1px solid #FFEEF1 !important; }\n\n.border-bottom-danger.border-bottom-accent-1 {\n  border-bottom: 1px solid #FFEEF1 !important; }\n\n.border-left-danger.border-left-accent-1 {\n  border-left: 1px solid #FFEEF1 !important; }\n\n.border-right-danger.border-right-accent-1 {\n  border-right: 1px solid #FFEEF1 !important; }\n\n.overlay-danger.overlay-accent-1 {\n  background: #FFEEF1;\n  /* The Fallback */\n  background: rgba(255, 238, 241, 0.6); }\n\n.danger.accent-2 {\n  color: #FFD6DB !important; }\n\n.bg-danger.bg-accent-2 {\n  background-color: #FFD6DB !important; }\n\n.btn-danger.btn-accent-2 {\n  border-color: #e42728 !important;\n  background-color: #FFD6DB !important; }\n  .btn-danger.btn-accent-2:hover {\n    border-color: #e42728 !important;\n    background-color: #d71a1c !important; }\n  .btn-danger.btn-accent-2:focus, .btn-danger.btn-accent-2:active {\n    border-color: #d71a1c !important;\n    background-color: #c01819 !important; }\n\n.btn-outline-danger.btn-outline-accent-2 {\n  border-color: #FFD6DB !important;\n  color: #FFD6DB !important; }\n  .btn-outline-danger.btn-outline-accent-2:hover {\n    background-color: #FFD6DB !important; }\n\ninput:focus ~ .bg-danger {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #FFD6DB !important; }\n\n.border-danger.border-accent-2 {\n  border: 1px solid #FFD6DB !important; }\n\n.border-top-danger.border-top-accent-2 {\n  border-top: 1px solid #FFD6DB !important; }\n\n.border-bottom-danger.border-bottom-accent-2 {\n  border-bottom: 1px solid #FFD6DB !important; }\n\n.border-left-danger.border-left-accent-2 {\n  border-left: 1px solid #FFD6DB !important; }\n\n.border-right-danger.border-right-accent-2 {\n  border-right: 1px solid #FFD6DB !important; }\n\n.overlay-danger.overlay-accent-2 {\n  background: #FFD6DB;\n  /* The Fallback */\n  background: rgba(255, 214, 219, 0.6); }\n\n.danger.accent-3 {\n  color: #FFECEE !important; }\n\n.bg-danger.bg-accent-3 {\n  background-color: #FFECEE !important; }\n\n.btn-danger.btn-accent-3 {\n  border-color: #e42728 !important;\n  background-color: #FFECEE !important; }\n  .btn-danger.btn-accent-3:hover {\n    border-color: #e42728 !important;\n    background-color: #d71a1c !important; }\n  .btn-danger.btn-accent-3:focus, .btn-danger.btn-accent-3:active {\n    border-color: #d71a1c !important;\n    background-color: #c01819 !important; }\n\n.btn-outline-danger.btn-outline-accent-3 {\n  border-color: #FFECEE !important;\n  color: #FFECEE !important; }\n  .btn-outline-danger.btn-outline-accent-3:hover {\n    background-color: #FFECEE !important; }\n\ninput:focus ~ .bg-danger {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #FFECEE !important; }\n\n.border-danger.border-accent-3 {\n  border: 1px solid #FFECEE !important; }\n\n.border-top-danger.border-top-accent-3 {\n  border-top: 1px solid #FFECEE !important; }\n\n.border-bottom-danger.border-bottom-accent-3 {\n  border-bottom: 1px solid #FFECEE !important; }\n\n.border-left-danger.border-left-accent-3 {\n  border-left: 1px solid #FFECEE !important; }\n\n.border-right-danger.border-right-accent-3 {\n  border-right: 1px solid #FFECEE !important; }\n\n.overlay-danger.overlay-accent-3 {\n  background: #FFECEE;\n  /* The Fallback */\n  background: rgba(255, 236, 238, 0.6); }\n\n.danger.accent-4 {\n  color: #FFD3D7 !important; }\n\n.bg-danger.bg-accent-4 {\n  background-color: #FFD3D7 !important; }\n\n.btn-danger.btn-accent-4 {\n  border-color: #e42728 !important;\n  background-color: #FFD3D7 !important; }\n  .btn-danger.btn-accent-4:hover {\n    border-color: #e42728 !important;\n    background-color: #d71a1c !important; }\n  .btn-danger.btn-accent-4:focus, .btn-danger.btn-accent-4:active {\n    border-color: #d71a1c !important;\n    background-color: #c01819 !important; }\n\n.btn-outline-danger.btn-outline-accent-4 {\n  border-color: #FFD3D7 !important;\n  color: #FFD3D7 !important; }\n  .btn-outline-danger.btn-outline-accent-4:hover {\n    background-color: #FFD3D7 !important; }\n\ninput:focus ~ .bg-danger {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #FFD3D7 !important; }\n\n.border-danger.border-accent-4 {\n  border: 1px solid #FFD3D7 !important; }\n\n.border-top-danger.border-top-accent-4 {\n  border-top: 1px solid #FFD3D7 !important; }\n\n.border-bottom-danger.border-bottom-accent-4 {\n  border-bottom: 1px solid #FFD3D7 !important; }\n\n.border-left-danger.border-left-accent-4 {\n  border-left: 1px solid #FFD3D7 !important; }\n\n.border-right-danger.border-right-accent-4 {\n  border-right: 1px solid #FFD3D7 !important; }\n\n.overlay-danger.overlay-accent-4 {\n  background: #FFD3D7;\n  /* The Fallback */\n  background: rgba(255, 211, 215, 0.6); }\n\n.danger.gradient-bg {\n  color: #640064 !important; }\n\n.bg-danger.bg-gradient-bg {\n  background-color: #640064 !important; }\n\n.btn-danger.btn-gradient-bg {\n  border-color: #e42728 !important;\n  background-color: #640064 !important; }\n  .btn-danger.btn-gradient-bg:hover {\n    border-color: #e42728 !important;\n    background-color: #d71a1c !important; }\n  .btn-danger.btn-gradient-bg:focus, .btn-danger.btn-gradient-bg:active {\n    border-color: #d71a1c !important;\n    background-color: #c01819 !important; }\n\n.btn-outline-danger.btn-outline-gradient-bg {\n  border-color: #640064 !important;\n  color: #640064 !important; }\n  .btn-outline-danger.btn-outline-gradient-bg:hover {\n    background-color: #640064 !important; }\n\ninput:focus ~ .bg-danger {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.21rem #640064 !important; }\n\n.border-danger.border-gradient-bg {\n  border: 1px solid #640064 !important; }\n\n.border-top-danger.border-top-gradient-bg {\n  border-top: 1px solid #640064 !important; }\n\n.border-bottom-danger.border-bottom-gradient-bg {\n  border-bottom: 1px solid #640064 !important; }\n\n.border-left-danger.border-left-gradient-bg {\n  border-left: 1px solid #640064 !important; }\n\n.border-right-danger.border-right-gradient-bg {\n  border-right: 1px solid #640064 !important; }\n\n.overlay-danger.overlay-gradient-bg {\n  background: #640064;\n  /* The Fallback */\n  background: rgba(100, 0, 100, 0.6); }\n"
  },
  {
    "path": "public/backend/css/components.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\nhtml {\n  font-size: 14px;\n  height: 100%;\n  letter-spacing: .01rem; }\n  html body {\n    height: 100%;\n    background-color: #f8f8f8;\n    direction: ltr;\n    /*\n      * Blank page\n      */ }\n    html body .content {\n      padding: 0;\n      position: relative;\n      transition: 300ms ease all;\n      backface-visibility: hidden;\n      min-height: calc(100% - 4rem);\n      margin-left: 260px; }\n      html body .content.app-content {\n        overflow: hidden; }\n        html body .content.app-content.show-overlay .content-overlay {\n          z-index: 10;\n          opacity: 1; }\n          html body .content.app-content.show-overlay .content-overlay ~ .header-navbar-shadow {\n            background: linear-gradient(180deg, rgba(44, 48, 60, 0.9) 44%, rgba(44, 48, 60, 0.43) 73%, rgba(44, 48, 60, 0)); }\n        html body .content.app-content .content-overlay {\n          position: fixed;\n          opacity: 0;\n          width: 100%;\n          height: 100%;\n          top: 0;\n          left: 0;\n          right: 0;\n          bottom: 0;\n          background-color: rgba(0, 0, 0, 0.5);\n          cursor: pointer;\n          transition: all .7s;\n          z-index: -1; }\n        html body .content.app-content .content-area-wrapper {\n          height: calc(100% - 5rem);\n          margin: calc(5rem + 2.7rem) 2.2rem 0;\n          display: flex;\n          position: relative; }\n          html body .content.app-content .content-area-wrapper .content-wrapper {\n            margin-top: 0;\n            height: calc(100vh - 13rem);\n            height: calc(var(--vh, 1vh) * 100 - 13rem); }\n      html body .content .content-wrapper {\n        padding: calc(2.2rem - 0.4rem) 2.2rem 0;\n        margin-top: 6rem; }\n        html body .content .content-wrapper .content-header-title {\n          font-weight: 500;\n          color: #636363;\n          margin-right: 1rem; }\n        html body .content .content-wrapper .content-header-right .dropdown-toggle::after {\n          display: none; }\n        html body .content .content-wrapper .content-header-right .dropdown-toggle i {\n          margin-right: 0; }\n        html body .content .content-wrapper .content-header-right .btn-icon {\n          padding: .8rem; }\n          html body .content .content-wrapper .content-header-right .btn-icon i {\n            font-size: 1rem; }\n    html body.navbar-hidden .app-content .content-wrapper {\n      padding: 2.2rem;\n      margin-top: 0; }\n    html body.navbar-hidden .app-content .content-area-wrapper {\n      padding: 0;\n      margin-top: 2.5rem; }\n    html body.navbar-static .main-menu {\n      top: 0; }\n    html body.navbar-static .app-content .navbar-container {\n      padding-left: 2.2rem;\n      padding-right: 1.2rem; }\n    html body.navbar-static .app-content .content-wrapper {\n      padding: 2.2rem;\n      margin-top: 0;\n      padding-top: 1rem; }\n    html body.navbar-static .app-content .content-area-wrapper {\n      margin-top: 1rem; }\n    html body.navbar-sticky .app-content .navbar-container {\n      padding-left: 2.2rem;\n      padding-right: 1rem; }\n      html body.navbar-sticky .app-content .navbar-container .search-input .search-list.show {\n        width: 98%;\n        left: 1%; }\n    html body.navbar-sticky .app-content .content-wrapper {\n      padding: 2.2rem;\n      margin-top: 4.65rem; }\n    html body.navbar-static .navbar-container, html body.navbar-sticky .navbar-container {\n      padding-left: 2.2rem;\n      padding-right: 1rem; }\n      html body.navbar-static .navbar-container .search-input .search-list.show, html body.navbar-sticky .navbar-container .search-input .search-list.show {\n        width: 98%;\n        left: 1%; }\n    html body.fixed-footer .content.app-content {\n      margin-bottom: 3rem; }\n    html body p {\n      line-height: 1.5rem; }\n    html body.bg-full-screen-image {\n      background: url('../images/pages/vuexy-login-bg.jpg') no-repeat center center;\n      background-size: cover; }\n    html body.blank-page .content {\n      margin-left: 0; }\n      html body.blank-page .content.app-content {\n        overflow: overlay;\n        overflow-x: hidden; }\n        html body.blank-page .content.app-content .header-navbar-shadow {\n          display: none; }\n    html body.blank-page .content-wrapper {\n      padding: 0 !important;\n      margin-top: 0; }\n      html body.blank-page .content-wrapper .flexbox-container {\n        display: flex;\n        align-items: center;\n        height: 100vh;\n        height: calc(var(--vh, 1vh) * 100);\n        justify-content: center; }\n    html body[data-col=\"1-column\"] .content, html body[data-col=\"1-column\"] .footer {\n      margin-left: 0px !important; }\n  html .pace .pace-progress {\n    background: #7367f0; }\n\n.app-content.center-layout {\n  overflow: hidden; }\n\n/*\n* Col 3 layout for detached and general type\n*/\n@media (min-width: 992px) {\n  body .content-right {\n    width: calc(100vw - (100vw - 100%) - 260px);\n    float: right; }\n  body .content-left {\n    width: calc(100vw - (100vw - 100%) - 260px);\n    float: left; }\n  body .content-detached {\n    width: 100%; }\n    body .content-detached.content-right {\n      float: right;\n      margin-left: -260px; }\n      body .content-detached.content-right .content-body {\n        margin-left: calc(260px + 2.2rem); }\n    body .content-detached.content-left {\n      float: left;\n      margin-right: -260px; }\n      body .content-detached.content-left .content-body {\n        margin-right: calc(260px + 2.2rem); }\n  .sidebar-right.sidebar-sticky {\n    float: right !important;\n    margin-left: -260px;\n    width: 260px !important;\n    margin-top: 6rem; } }\n\n.truncate {\n  overflow: hidden !important;\n  text-overflow: ellipsis !important;\n  white-space: nowrap !important; }\n\n@media (max-width: 575.98px) {\n  html body .content .content-wrapper {\n    padding: calc(2.2rem - 0.4rem) calc(2.2rem - 1rem) 0; } }\n\n@media (max-width: 575.98px) {\n  body.navbar-static .app-content .header-navbar .navbar-container, body.navbar-sticky .app-content .header-navbar .navbar-container {\n    padding-left: 1rem;\n    padding-right: .5rem; } }\n\n@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {\n  html.full-screen {\n    width: 100%; }\n    html.full-screen .content.app-content {\n      height: 100%;\n      overflow: scroll;\n      overflow-x: hidden; } }\n\n/*=========================================================================================\n    File Name: sidebar.scss\n    Description: content sidebar specific scss.\n    ----------------------------------------------------------------------------------------\n    Item Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n    Author: PIXINVENT\n    Author URL: http://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n.sidebar {\n  position: relative;\n  width: 100%; }\n  @media (min-width: 992px) {\n    .sidebar {\n      vertical-align: top; } }\n\n.sidebar-fixed {\n  position: fixed;\n  height: 100%;\n  overflow: scroll; }\n\n.sidenav-overlay {\n  position: fixed;\n  top: 0;\n  left: 0;\n  right: 0;\n  height: 120vh;\n  background-color: rgba(0, 0, 0, 0.5);\n  z-index: 997;\n  display: none; }\n\n.drag-target {\n  height: 100%;\n  width: 40px;\n  position: fixed;\n  top: 0;\n  left: -10px;\n  z-index: 1036; }\n\n@media (min-width: 992px) {\n  .sidebar-left {\n    float: left; }\n  .sidebar-right {\n    float: right; } }\n\nfooter.footer {\n  padding: 1rem 2.2rem; }\n  footer.footer a {\n    margin: 0 0.3rem; }\n  footer.footer span i {\n    margin-left: 0.5rem;\n    font-size: 1.51rem;\n    color: #ea5455;\n    position: relative;\n    top: 2px; }\n  footer.footer .scroll-top {\n    padding: .81rem .83rem; }\n\nfooter.navbar-shadow {\n  box-shadow: 0px -1px 4px 0px rgba(0, 0, 0, 0.15); }\n\nfooter.navbar-border {\n  border-top: 1px solid #E4E7ED; }\n\nbody.fixed-footer footer.footer-light {\n  background: #fff;\n  box-shadow: 0px -1px 4px 0px rgba(0, 0, 0, 0.15); }\n\nbody.fixed-footer footer.footer-dark {\n  background: #b8c2cc;\n  color: #fff; }\n\n.scroll-top {\n  position: fixed;\n  bottom: 5%;\n  right: 30px;\n  display: none;\n  z-index: 99; }\n\n/*=========================================================================================\n    File Name: navigations.scss\n    Description: Common mixin for menus, contain dark and light version scss.\n    ----------------------------------------------------------------------------------------\n    Item Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n    Author: PIXINVENT\n    Author URL: http://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n.main-menu {\n  z-index: 1031;\n  position: absolute;\n  display: table-cell;\n  height: 100%;\n  overflow: hidden; }\n  .main-menu.menu-light {\n    color: #626262;\n    background: #fff; }\n    .main-menu.menu-light .main-menu-header {\n      padding: 20px; }\n      .main-menu.menu-light .main-menu-header .menu-search {\n        background: #e6e6e6;\n        padding: 0.5rem 1rem;\n        color: #494949; }\n        .main-menu.menu-light .main-menu-header .menu-search:focus {\n          border-color: #d9d9d9; }\n    .main-menu.menu-light .navigation {\n      background: #fff; }\n      .main-menu.menu-light .navigation .navigation-header {\n        color: #999999;\n        margin: calc(2.2rem - 0.2rem) 0 0.8rem 2.2rem;\n        padding: 0;\n        line-height: 1.5;\n        letter-spacing: .01rem; }\n        .main-menu.menu-light .navigation .navigation-header span {\n          font-weight: 500; }\n      .main-menu.menu-light .navigation li.has-sub ul.menu-content {\n        padding: 7px;\n        margin: -7px -7px 0 -7px; }\n      .main-menu.menu-light .navigation li a {\n        color: #565656;\n        padding: 10px 15px 10px 15px;\n        line-height: 1.45;\n        transition: padding 0.35s ease 0s !important; }\n        .main-menu.menu-light .navigation li a span.menu-sub-title {\n          color: #afafaf; }\n      .main-menu.menu-light .navigation li.hover > a {\n        padding-left: 25px;\n        transition: padding 0.35s ease 0s !important; }\n      .main-menu.menu-light .navigation > li {\n        padding: 0 15px; }\n        .main-menu.menu-light .navigation > li > a .label {\n          margin-top: 4px;\n          margin-right: 5px; }\n        .main-menu.menu-light .navigation > li > a i {\n          position: relative;\n          top: 1px; }\n        .main-menu.menu-light .navigation > li.open > a, .main-menu.menu-light .navigation > li.sidebar-group-active > a {\n          color: #494949;\n          background: whitesmoke;\n          transition: transform 0.25s ease 0s, -webkit-transform 0.25s ease 0s;\n          border-radius: 6px;\n          margin-bottom: 7px; }\n        .main-menu.menu-light .navigation > li:not(.open) > ul {\n          display: none; }\n        .main-menu.menu-light .navigation > li.active > a {\n          background: linear-gradient(118deg, #7367f0, rgba(115, 103, 240, 0.7));\n          box-shadow: 0 0 10px 1px rgba(115, 103, 240, 0.7);\n          color: #fff;\n          font-weight: 400;\n          border-radius: 4px; }\n        .main-menu.menu-light .navigation > li .active {\n          background: #f0f0f0; }\n          .main-menu.menu-light .navigation > li .active > a {\n            color: #7367f0;\n            margin-bottom: 0; }\n          .main-menu.menu-light .navigation > li .active .hover > a {\n            background: whitesmoke; }\n        .main-menu.menu-light .navigation > li ul {\n          padding: 0;\n          margin: 0; }\n          .main-menu.menu-light .navigation > li ul li {\n            color: #626262;\n            background: transparent; }\n            .main-menu.menu-light .navigation > li ul li > a {\n              padding: 10px 15px 10px 20px; }\n          .main-menu.menu-light .navigation > li ul .has-sub:not(.open) > ul {\n            display: none; }\n          .main-menu.menu-light .navigation > li ul .open > a, .main-menu.menu-light .navigation > li ul .sidebar-group-active > a {\n            color: #626262; }\n          .main-menu.menu-light .navigation > li ul .open > ul, .main-menu.menu-light .navigation > li ul .sidebar-group-active > ul {\n            display: block; }\n            .main-menu.menu-light .navigation > li ul .open > ul .open > ul, .main-menu.menu-light .navigation > li ul .sidebar-group-active > ul .open > ul {\n              display: block; }\n          .main-menu.menu-light .navigation > li ul .hover > a, .main-menu.menu-light .navigation > li ul:hover > a {\n            color: #6c6c6c; }\n          .main-menu.menu-light .navigation > li ul .active {\n            background: linear-gradient(118deg, #7367f0, rgba(115, 103, 240, 0.7));\n            box-shadow: 0 0 10px 1px rgba(115, 103, 240, 0.7);\n            border-radius: 4px; }\n            .main-menu.menu-light .navigation > li ul .active > a {\n              color: #fff; }\n        .main-menu.menu-light .navigation > li > ul {\n          background: #fff; }\n    .main-menu.menu-light ul.menu-popout {\n      background: #fff; }\n      .main-menu.menu-light ul.menu-popout li a {\n        color: #626262; }\n        .main-menu.menu-light ul.menu-popout li a span.menu-sub-title {\n          color: #afafaf; }\n      .main-menu.menu-light ul.menu-popout li.hover > a, .main-menu.menu-light ul.menu-popout li:hover > a, .main-menu.menu-light ul.menu-popout li.open > a {\n        background: #f0f0f0; }\n      .main-menu.menu-light ul.menu-popout .has-sub:not(.open) > ul {\n        display: none; }\n      .main-menu.menu-light ul.menu-popout .open > a {\n        color: #626262; }\n      .main-menu.menu-light ul.menu-popout .open > ul {\n        display: block; }\n        .main-menu.menu-light ul.menu-popout .open > ul .open {\n          background: #e8e8e8; }\n          .main-menu.menu-light ul.menu-popout .open > ul .open > ul {\n            display: block;\n            background: #e8e8e8; }\n      .main-menu.menu-light ul.menu-popout .hover > a, .main-menu.menu-light ul.menu-popout:hover > a {\n        color: #6c6c6c;\n        background-color: whitesmoke; }\n      .main-menu.menu-light ul.menu-popout .active {\n        background: rgba(0, 0, 0, 0.06); }\n        .main-menu.menu-light ul.menu-popout .active > a {\n          color: #7c7c7c;\n          background-color: whitesmoke; }\n        .main-menu.menu-light ul.menu-popout .active .hover > a, .main-menu.menu-light ul.menu-popout .active :hover > a {\n          background-color: transparent; }\n  .main-menu.menu-dark {\n    color: #dcdcdc;\n    background: #10163a; }\n    .main-menu.menu-dark .main-menu-header {\n      padding: 20px; }\n      .main-menu.menu-dark .main-menu-header .menu-search {\n        background: #050712;\n        padding: 0.5rem 1rem;\n        color: #c3c3c3; }\n        .main-menu.menu-dark .main-menu-header .menu-search:focus {\n          border-color: black; }\n    .main-menu.menu-dark .navigation {\n      background: #10163a; }\n      .main-menu.menu-dark .navigation .navigation-header {\n        color: white;\n        margin: calc(2.2rem - 0.2rem) 0 0.8rem 2.2rem;\n        padding: 0;\n        line-height: 1.5;\n        letter-spacing: .01rem; }\n        .main-menu.menu-dark .navigation .navigation-header span {\n          font-weight: 500; }\n      .main-menu.menu-dark .navigation li.has-sub ul.menu-content {\n        padding: 7px;\n        margin: -7px -7px 0 -7px; }\n      .main-menu.menu-dark .navigation li a {\n        color: #d0d0d0;\n        padding: 10px 15px 10px 15px;\n        line-height: 1.45;\n        transition: padding 0.35s ease 0s !important; }\n        .main-menu.menu-dark .navigation li a span.menu-sub-title {\n          color: white; }\n      .main-menu.menu-dark .navigation li.hover > a {\n        padding-left: 25px;\n        transition: padding 0.35s ease 0s !important; }\n      .main-menu.menu-dark .navigation > li {\n        padding: 0 15px; }\n        .main-menu.menu-dark .navigation > li > a .label {\n          margin-top: 4px;\n          margin-right: 5px; }\n        .main-menu.menu-dark .navigation > li > a i {\n          position: relative;\n          top: 1px; }\n        .main-menu.menu-dark .navigation > li.open > a, .main-menu.menu-dark .navigation > li.sidebar-group-active > a {\n          color: #c3c3c3;\n          background: #0c102a;\n          transition: transform 0.25s ease 0s, -webkit-transform 0.25s ease 0s;\n          border-radius: 6px;\n          margin-bottom: 7px; }\n        .main-menu.menu-dark .navigation > li:not(.open) > ul {\n          display: none; }\n        .main-menu.menu-dark .navigation > li.active > a {\n          background: linear-gradient(118deg, #7367f0, rgba(115, 103, 240, 0.7));\n          box-shadow: 0 0 10px 1px rgba(115, 103, 240, 0.7);\n          color: #fff;\n          font-weight: 400;\n          border-radius: 4px; }\n        .main-menu.menu-dark .navigation > li .active {\n          background: #090d22; }\n          .main-menu.menu-dark .navigation > li .active > a {\n            color: #7367f0;\n            margin-bottom: 0; }\n          .main-menu.menu-dark .navigation > li .active .hover > a {\n            background: #0c102a; }\n        .main-menu.menu-dark .navigation > li ul {\n          padding: 0;\n          margin: 0; }\n          .main-menu.menu-dark .navigation > li ul li {\n            color: #dcdcdc;\n            background: transparent; }\n            .main-menu.menu-dark .navigation > li ul li > a {\n              padding: 10px 15px 10px 20px; }\n          .main-menu.menu-dark .navigation > li ul .has-sub:not(.open) > ul {\n            display: none; }\n          .main-menu.menu-dark .navigation > li ul .open > a, .main-menu.menu-dark .navigation > li ul .sidebar-group-active > a {\n            color: #dcdcdc; }\n          .main-menu.menu-dark .navigation > li ul .open > ul, .main-menu.menu-dark .navigation > li ul .sidebar-group-active > ul {\n            display: block; }\n            .main-menu.menu-dark .navigation > li ul .open > ul .open > ul, .main-menu.menu-dark .navigation > li ul .sidebar-group-active > ul .open > ul {\n              display: block; }\n          .main-menu.menu-dark .navigation > li ul .hover > a, .main-menu.menu-dark .navigation > li ul:hover > a {\n            color: #e6e6e6; }\n          .main-menu.menu-dark .navigation > li ul .active {\n            background: linear-gradient(118deg, #7367f0, rgba(115, 103, 240, 0.7));\n            box-shadow: 0 0 10px 1px rgba(115, 103, 240, 0.7);\n            border-radius: 4px; }\n            .main-menu.menu-dark .navigation > li ul .active > a {\n              color: #fff; }\n        .main-menu.menu-dark .navigation > li > ul {\n          background: #10163a; }\n    .main-menu.menu-dark ul.menu-popout {\n      background: #10163a; }\n      .main-menu.menu-dark ul.menu-popout li a {\n        color: #dcdcdc; }\n        .main-menu.menu-dark ul.menu-popout li a span.menu-sub-title {\n          color: white; }\n      .main-menu.menu-dark ul.menu-popout li.hover > a, .main-menu.menu-dark ul.menu-popout li:hover > a, .main-menu.menu-dark ul.menu-popout li.open > a {\n        background: #090d22; }\n      .main-menu.menu-dark ul.menu-popout .has-sub:not(.open) > ul {\n        display: none; }\n      .main-menu.menu-dark ul.menu-popout .open > a {\n        color: #dcdcdc; }\n      .main-menu.menu-dark ul.menu-popout .open > ul {\n        display: block; }\n        .main-menu.menu-dark ul.menu-popout .open > ul .open {\n          background: #060816; }\n          .main-menu.menu-dark ul.menu-popout .open > ul .open > ul {\n            display: block;\n            background: #060816; }\n      .main-menu.menu-dark ul.menu-popout .hover > a, .main-menu.menu-dark ul.menu-popout:hover > a {\n        color: #e6e6e6;\n        background-color: #0c102a; }\n      .main-menu.menu-dark ul.menu-popout .active {\n        background: rgba(0, 0, 0, 0.06); }\n        .main-menu.menu-dark ul.menu-popout .active > a {\n          color: #f6f6f6;\n          background-color: #0c102a; }\n        .main-menu.menu-dark ul.menu-popout .active .hover > a, .main-menu.menu-dark ul.menu-popout .active :hover > a {\n          background-color: transparent; }\n  .main-menu.menu-fixed {\n    position: fixed;\n    /* fallback if needed */ }\n    .main-menu.menu-fixed .main-menu-footer {\n      position: fixed; }\n  .main-menu.menu-static {\n    height: 100%;\n    padding-bottom: calc(100% - 20rem); }\n    .main-menu.menu-static .main-menu-content {\n      height: unset !important; }\n  .main-menu.menu-shadow {\n    box-shadow: 0 0 15px 0 rgba(0, 0, 0, 0.05); }\n  .main-menu.menu-border {\n    border-right: 1px solid #E4E7ED; }\n  .main-menu .shadow-bottom {\n    display: none;\n    position: absolute;\n    z-index: 2;\n    height: 60px;\n    width: 100%;\n    pointer-events: none;\n    margin-top: -1.3rem;\n    filter: blur(5px);\n    background: linear-gradient(#fff 41%, rgba(255, 255, 255, 0.11) 95%, rgba(255, 255, 255, 0)); }\n  .main-menu.menu-native-scroll .main-menu-content {\n    overflow-y: scroll; }\n  .main-menu .navbar-header {\n    height: 100%;\n    width: 260px;\n    height: 5rem;\n    position: relative;\n    padding: 0.35rem 1rem 0.3rem 1.64rem;\n    transition: 300ms ease all; }\n    .main-menu .navbar-header .navbar-brand {\n      display: flex;\n      align-items: center;\n      margin-top: 1.35rem; }\n      .main-menu .navbar-header .navbar-brand .brand-logo {\n        /* background: url(\"../../app-assets/images/logo/vuexy-logo.png\") no-repeat; */\n        background-position: -65px -54px;\n        height: 24px;\n        width: 35px; }\n      .main-menu .navbar-header .navbar-brand .brand-text {\n        color: #7367f0;\n        padding-left: 1rem;\n        font-weight: 600;\n        letter-spacing: 0.01rem;\n        font-size: 1.57rem;\n        animation: 0.3s cubic-bezier(0.25, 0.8, 0.25, 1) 0s normal forwards 1 fadein; }\n    .main-menu .navbar-header .modern-nav-toggle {\n      animation: 0.3s cubic-bezier(0.25, 0.8, 0.25, 1) 0s normal forwards 1 fadein; }\n  .main-menu .main-menu-content {\n    height: calc(100% - 6rem) !important;\n    position: relative; }\n  .main-menu ul {\n    list-style: none;\n    margin: 0;\n    padding: 0; }\n    .main-menu ul.navigation-main {\n      overflow-x: hidden; }\n      .main-menu ul.navigation-main > li:first-child {\n        margin-top: .5rem; }\n  .main-menu a {\n    outline: none; }\n    .main-menu a:hover, .main-menu a:focus {\n      text-decoration: none; }\n\n.navigation {\n  font-size: 1.1rem;\n  font-family: \"Montserrat\", Helvetica, Arial, serif;\n  font-weight: 400;\n  overflow-y: hidden;\n  padding-bottom: 20px; }\n  .navigation .navigation-header {\n    font-family: \"Montserrat\", Helvetica, Arial, serif;\n    font-weight: 500;\n    line-height: 1.2;\n    padding: 12px 22px;\n    font-size: .9rem;\n    text-transform: uppercase; }\n  .navigation li {\n    position: relative;\n    white-space: nowrap; }\n    .navigation li a {\n      display: block;\n      text-overflow: ellipsis;\n      overflow: hidden; }\n      .navigation li a i {\n        font-size: 0.8rem;\n        margin-right: 1.38rem; }\n    .navigation li.disabled a {\n      cursor: not-allowed; }\n\n.menu-popout li.disabled a {\n  cursor: not-allowed; }\n\n.dropdown-notification .nav-link-label {\n  position: relative; }\n\n.dropdown-notification .notification-text {\n  margin-bottom: 0.5rem;\n  font-size: smaller;\n  color: #626262; }\n\n.dropdown-notification .notification-title {\n  color: rgba(255, 255, 255, 0.75); }\n\n.dropdown-notification .notification-tag {\n  position: relative;\n  top: -4px; }\n\n.dropdown-notification .dropdown-menu.dropdown-menu-right {\n  right: -2px;\n  padding: 0; }\n  .dropdown-notification .dropdown-menu.dropdown-menu-right::before {\n    background: #7367f0;\n    border-color: #7367f0; }\n\n.dropdown-notification .dropdown-menu-header {\n  border-top-left-radius: 5px;\n  border-top-right-radius: 5px;\n  background: #7367f0;\n  color: #fff;\n  text-align: center; }\n  .dropdown-notification .dropdown-menu-header .dropdown-header h3 {\n    margin-bottom: 0.25rem; }\n\n.main-menu-header .user-content {\n  padding: 20px; }\n  .main-menu-header .user-content .media {\n    overflow: inherit; }\n  .main-menu-header .user-content .media-body {\n    vertical-align: bottom;\n    opacity: 1;\n    width: 150px;\n    white-space: nowrap;\n    transition: all .3s ease .15s; }\n\n.main-menu-footer {\n  position: relative;\n  overflow: hidden;\n  bottom: 0;\n  display: block;\n  z-index: 1000;\n  color: white;\n  background-color: #9aa9b7; }\n  .main-menu-footer.footer-open {\n    max-height: 500px;\n    transition: max-height 0.2s ease-in-out; }\n  .main-menu-footer a {\n    color: white; }\n    .main-menu-footer a:hover, .main-menu-footer a:focus {\n      color: #fff; }\n  .main-menu-footer .header {\n    height: 19px;\n    border-bottom: 1px solid #a9b5c1; }\n  .main-menu-footer .toggle {\n    transform: rotate(0deg);\n    transition: -webkit-transform 0.2s ease-in-out; }\n  .main-menu-footer .content {\n    padding: 0; }\n    .main-menu-footer .content .actions > a {\n      display: block;\n      float: left;\n      width: 33.33333%;\n      padding: 1rem 0;\n      color: white;\n      text-align: center;\n      border-top: 1px solid #a9b5c1;\n      border-left: 1px solid #a9b5c1; }\n      .main-menu-footer .content .actions > a > span {\n        font-size: 1.35rem; }\n      .main-menu-footer .content .actions > a:hover, .main-menu-footer .content .actions > a:focus {\n        color: #fff; }\n\nbody.vertical-layout.vertical-menu.menu-expanded .main-menu-footer .content {\n  margin-left: 0; }\n\nbody.menu-collapsed .menu-static {\n  padding-bottom: calc(100% - 14rem); }\n\n@media (max-width: 767.98px) {\n  .menu-hide .main-menu,\n  .menu-open .main-menu {\n    transition: transform .25s, top .35s, height .35s; }\n  .main-menu {\n    transform: translate3d(-240px, 0, 0);\n    backface-visibility: hidden;\n    perspective: 1000; }\n  .menu-open .main-menu {\n    transform: translate3d(0, 0, 0); } }\n\n@media (min-width: 768px) {\n  .drag-target {\n    z-index: 0; } }\n\nbody.fixed-footer .main-menu.menu-fixed {\n  height: 100%; }\n\n@media (max-width: 1200px) {\n  body .main-menu.menu-static {\n    padding-bottom: 100%; } }\n\n.display-inline {\n  display: inline !important; }\n\n.display-block {\n  display: block !important; }\n\n.display-inline-block {\n  display: inline-block !important; }\n\n.display-hidden {\n  display: none !important; }\n\n.display-table-cell {\n  display: table-cell !important; }\n\n.position-top-0 {\n  top: 0; }\n\n.position-right-0 {\n  right: 0; }\n\n.position-bottom-0 {\n  bottom: 0; }\n\n.position-left-0 {\n  left: 0; }\n\n.zindex-1 {\n  z-index: 1 !important; }\n\n.zindex-2 {\n  z-index: 2 !important; }\n\n.zindex-3 {\n  z-index: 3 !important; }\n\n.zindex-4 {\n  z-index: 4 !important; }\n\n.zindex-0 {\n  z-index: 0 !important; }\n\n.zindex-minus-1 {\n  z-index: -1 !important; }\n\n.zindex-minus-2 {\n  z-index: -2 !important; }\n\n.zindex-minus-3 {\n  z-index: -3 !important; }\n\n.zindex-minus-4 {\n  z-index: -4 !important; }\n\n.no-edge-top {\n  top: 0 !important; }\n\n.no-edge-bottom {\n  bottom: 0 !important; }\n\n.no-edge-left {\n  left: 0 !important; }\n\n.no-edge-right {\n  right: 0 !important; }\n\n.cursor-pointer {\n  cursor: pointer; }\n\n.cursor-move {\n  cursor: move; }\n\n.cursor-default {\n  cursor: default; }\n\n.cursor-progress {\n  cursor: progress; }\n\n.cursor-not-allowed {\n  cursor: not-allowed; }\n\n.overflow-hidden {\n  overflow: hidden; }\n\n.overflow-visible {\n  overflow: visible; }\n\n.overflow-auto {\n  overflow: auto; }\n\n.overflow-scroll {\n  overflow: scroll; }\n\n.overflow-x-scroll {\n  overflow: scroll; }\n\n.overflow-y-scroll {\n  overflow: scroll; }\n\n.bullets-inside {\n  list-style: inside; }\n\n.list-style-circle {\n  list-style: circle; }\n\n.list-style-square {\n  list-style: square; }\n\n.list-style-icons {\n  padding-left: 10px;\n  margin-left: 0;\n  list-style: none; }\n  .list-style-icons > li i {\n    float: left;\n    width: 1em;\n    margin: 0 6px 0 0; }\n\n.border {\n  border: 1px solid; }\n\n.border-top {\n  border-top: 1px solid; }\n\n.border-bottom {\n  border-bottom: 1px solid; }\n\n.border-left {\n  border-left: 1px solid; }\n\n.border-right {\n  border-right: 1px solid; }\n\n.border-2 {\n  border-width: 2px !important; }\n\n.border-top-2 {\n  border-top-width: 2px !important; }\n\n.border-bottom-2 {\n  border-bottom-width: 2px !important; }\n\n.border-left-2 {\n  border-left-width: 2px !important; }\n\n.border-right-2 {\n  border-right-width: 2px !important; }\n\n.border-3 {\n  border-width: 3px !important; }\n\n.border-top-3 {\n  border-top-width: 3px !important; }\n\n.border-bottom-3 {\n  border-bottom-width: 3px !important; }\n\n.border-left-3 {\n  border-left-width: 3px !important; }\n\n.border-right-3 {\n  border-right-width: 3px !important; }\n\n.no-border-top-radius {\n  border-top-left-radius: 0 !important;\n  border-top-right-radius: 0 !important; }\n\n.no-border-bottom-radius {\n  border-bottom-left-radius: 0 !important;\n  border-bottom-right-radius: 0 !important; }\n\n.no-border-top-left-radius {\n  border-top-left-radius: 0 !important; }\n\n.no-border-top-right-radius {\n  border-top-right-radius: 0 !important; }\n\n.no-border-bottom-left-radius {\n  border-bottom-left-radius: 0 !important; }\n\n.no-border-bottom-right-radius {\n  border-bottom-right-radius: 0 !important; }\n\n.box-shadow-0 {\n  box-shadow: none !important; }\n\n.box-shadow-1 {\n  box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12); }\n\n.box-shadow-2 {\n  box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); }\n\n.box-shadow-3 {\n  box-shadow: 0 12px 15px 0 rgba(0, 0, 0, 0.24), 0 17px 50px 0 rgba(0, 0, 0, 0.19); }\n\n.box-shadow-4 {\n  box-shadow: 0 16px 28px 0 rgba(0, 0, 0, 0.22), 0 25px 55px 0 rgba(0, 0, 0, 0.21); }\n\n.box-shadow-5 {\n  box-shadow: 0 27px 24px 0 rgba(0, 0, 0, 0.2), 0 40px 77px 0 rgba(0, 0, 0, 0.22); }\n\n.box-shadow-6 {\n  box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.12), 0 2px 4px 0 rgba(0, 0, 0, 0.08); }\n\n.fit {\n  max-width: 100% !important; }\n\n.half-width {\n  width: 50% !important; }\n\n.full-width {\n  width: 100% !important; }\n\n.full-height {\n  height: 100% !important; }\n\n.width-50 {\n  width: 50px !important; }\n\n.width-100 {\n  width: 100px !important; }\n\n.width-150 {\n  width: 150px !important; }\n\n.width-200 {\n  width: 200px !important; }\n\n.width-250 {\n  width: 250px !important; }\n\n.width-300 {\n  width: 300px !important; }\n\n.width-350 {\n  width: 350px !important; }\n\n.width-400 {\n  width: 400px !important; }\n\n.width-450 {\n  width: 450px !important; }\n\n.width-500 {\n  width: 500px !important; }\n\n.width-550 {\n  width: 550px !important; }\n\n.width-600 {\n  width: 600px !important; }\n\n.width-650 {\n  width: 650px !important; }\n\n.width-700 {\n  width: 700px !important; }\n\n.width-750 {\n  width: 750px !important; }\n\n.width-800 {\n  width: 800px !important; }\n\n.width-5-per {\n  width: 5% !important; }\n\n.width-10-per {\n  width: 10% !important; }\n\n.width-15-per {\n  width: 15% !important; }\n\n.width-20-per {\n  width: 20% !important; }\n\n.width-25-per {\n  width: 25% !important; }\n\n.width-30-per {\n  width: 30% !important; }\n\n.width-35-per {\n  width: 35% !important; }\n\n.width-40-per {\n  width: 40% !important; }\n\n.width-45-per {\n  width: 45% !important; }\n\n.width-50-per {\n  width: 50% !important; }\n\n.width-55-per {\n  width: 55% !important; }\n\n.width-60-per {\n  width: 60% !important; }\n\n.width-65-per {\n  width: 65% !important; }\n\n.width-70-per {\n  width: 70% !important; }\n\n.width-75-per {\n  width: 75% !important; }\n\n.width-80-per {\n  width: 80% !important; }\n\n.width-90-per {\n  width: 90% !important; }\n\n.width-95-per {\n  width: 95% !important; }\n\n.height-50 {\n  height: 50px !important; }\n\n.height-75 {\n  height: 75px !important; }\n\n.height-100 {\n  height: 100px !important; }\n\n.height-150 {\n  height: 150px !important; }\n\n.height-200 {\n  height: 200px !important; }\n\n.height-250 {\n  height: 250px !important; }\n\n.height-300 {\n  height: 300px !important; }\n\n.height-350 {\n  height: 350px !important; }\n\n.height-400 {\n  height: 400px !important; }\n\n.height-450 {\n  height: 450px !important; }\n\n.height-500 {\n  height: 500px !important; }\n\n.height-550 {\n  height: 550px !important; }\n\n.height-600 {\n  height: 600px !important; }\n\n.height-650 {\n  height: 650px !important; }\n\n.height-700 {\n  height: 700px !important; }\n\n.height-750 {\n  height: 750px !important; }\n\n.height-800 {\n  height: 800px !important; }\n\n.height-5-per {\n  height: 5% !important; }\n\n.height-10-per {\n  height: 10% !important; }\n\n.height-15-per {\n  height: 15% !important; }\n\n.height-20-per {\n  height: 20% !important; }\n\n.height-25-per {\n  height: 25% !important; }\n\n.height-30-per {\n  height: 30% !important; }\n\n.height-35-per {\n  height: 35% !important; }\n\n.height-40-per {\n  height: 40% !important; }\n\n.height-45-per {\n  height: 45% !important; }\n\n.height-50-per {\n  height: 50% !important; }\n\n.height-55-per {\n  height: 55% !important; }\n\n.height-60-per {\n  height: 60% !important; }\n\n.height-65-per {\n  height: 65% !important; }\n\n.height-70-per {\n  height: 70% !important; }\n\n.height-75-per {\n  height: 75% !important; }\n\n.height-80-per {\n  height: 80% !important; }\n\n.full-height-vh-with-nav {\n  height: calc(100vh - 5rem - 4rem);\n  height: calc(var(--vh, 1vh) * 100 - 5rem - 4rem); }\n\n.full-height-vh {\n  height: 100vh;\n  height: calc(var(--vh, 1vh) * 100); }\n\n.line-height-1 {\n  line-height: 1 !important; }\n\n.line-height-2 {\n  line-height: 2 !important; }\n\n.rotate-45 {\n  transform: rotate(45deg); }\n\n.rotate-45-inverse {\n  transform: rotate(-45deg); }\n\n.rotate-90 {\n  transform: rotate(45deg); }\n\n.rotate-90-inverse {\n  transform: rotate(-45deg); }\n\n.rotate-180 {\n  transform: rotate(45deg); }\n\n.rotate-180-inverse {\n  transform: rotate(-45deg); }\n\n.pull-up {\n  transition: all 0.25s ease; }\n  .pull-up:hover {\n    transform: translateY(-4px) scale(1.02);\n    box-shadow: 0px 14px 24px rgba(62, 57, 107, 0.2);\n    z-index: 30; }\n\n.spinner {\n  display: inline-block;\n  animation: spin 1s linear infinite; }\n\n@keyframes spin {\n  0% {\n    transform: rotate(0deg); }\n  100% {\n    transform: rotate(360deg); } }\n\n.spinner-reverse {\n  display: inline-block;\n  animation: spin-reverse 1s linear infinite; }\n\n@keyframes spin-reverse {\n  0% {\n    transform: rotate(0deg); }\n  100% {\n    transform: rotate(-360deg); } }\n\n.bg-cover {\n  background-size: cover !important; }\n\n.background-repeat {\n  background-repeat: repeat !important; }\n\n.background-no-repeat {\n  background-repeat: no-repeat !important; }\n\n.img-xl {\n  width: 64px !important;\n  height: 64px !important; }\n\n.img-lg {\n  width: 44px !important;\n  height: 44px !important; }\n\n.img-sm {\n  width: 36px !important;\n  height: 36px !important; }\n\n.img-xs {\n  width: 32px !important;\n  height: 32px !important; }\n\n.bullet {\n  width: 1rem;\n  height: 1rem;\n  border-radius: 50%;\n  display: inline-block; }\n  .bullet.bullet-xs {\n    width: 0.5rem;\n    height: 0.5rem; }\n  .bullet.bullet-sm {\n    width: 0.714rem;\n    height: 0.714rem; }\n  .bullet.bullet-lg {\n    width: 1.25rem;\n    height: 1.25rem; }\n\n.avatar {\n  white-space: nowrap;\n  background-color: #c3c3c3;\n  border-radius: 50%;\n  position: relative;\n  cursor: pointer;\n  color: #fff;\n  display: inline-flex;\n  font-size: .75rem;\n  text-align: center;\n  vertical-align: middle;\n  margin: 5px; }\n  .avatar .avatar-content {\n    width: 32px;\n    height: 32px;\n    display: flex;\n    justify-content: center;\n    align-items: center; }\n    .avatar .avatar-content .avatar-icon {\n      font-size: 1.2rem; }\n  .avatar [class*=\"avatar-status-\"] {\n    border-radius: 50%;\n    width: 11px;\n    height: 11px;\n    position: absolute;\n    right: 0;\n    bottom: 0;\n    border: 1px solid #fff; }\n    .avatar [class*=\"avatar-status-\"].avatar-status-lg {\n      width: 17px;\n      height: 17px;\n      border-width: 2px; }\n  .avatar .avatar-status-online {\n    background-color: #28c76f; }\n  .avatar .avatar-status-busy {\n    background-color: #ea5455; }\n  .avatar .avatar-status-away {\n    background-color: #ff9f43; }\n  .avatar .avatar-status-offline {\n    background-color: #b8c2cc; }\n  .avatar img {\n    border-radius: 50%; }\n  .avatar.avatar-xl {\n    font-size: 1.5rem; }\n    .avatar.avatar-xl img {\n      width: 70px;\n      height: 70px; }\n    .avatar.avatar-xl .avatar-content {\n      height: 70px;\n      width: 70px; }\n      .avatar.avatar-xl .avatar-content .avatar-icon {\n        font-size: 3rem; }\n  .avatar.avatar-lg {\n    font-size: 1.2rem; }\n    .avatar.avatar-lg img {\n      width: 50px;\n      height: 50px; }\n    .avatar.avatar-lg .avatar-content {\n      width: 50px;\n      height: 50px; }\n      .avatar.avatar-lg .avatar-content .avatar-icon {\n        font-size: 2rem; }\n  .avatar.avatar-sm .avatar-content {\n    width: 24px;\n    height: 24px; }\n    .avatar.avatar-sm .avatar-content .avatar-icon {\n      font-size: 1rem; }\n  .avatar.avatar-sm img {\n    width: 24px;\n    height: 24px; }\n\n/*=========================================================================================\n\tFile Name: search.scss\n\tDescription: Search  functionality.\n\t----------------------------------------------------------------------------------------\n\tItem Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n\tAuthor: PIXINVENT\n\tAuthor URL: http://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n.navbar-container a.nav-link-search {\n  float: left; }\n\n.navbar-container .search-input {\n  float: left;\n  width: 0; }\n  .navbar-container .search-input input {\n    width: 0;\n    border: none;\n    background: none;\n    transition: all 0.2s ease-out;\n    line-height: 16px;\n    padding: 1.6rem 3.6rem; }\n  .navbar-container .search-input.open {\n    position: absolute;\n    left: 0;\n    background: #fff;\n    right: 0;\n    width: 100%;\n    z-index: 1000;\n    border-radius: 0.5rem; }\n    .navbar-container .search-input.open .search-input-close,\n    .navbar-container .search-input.open .search-input-icon {\n      display: block; }\n    .navbar-container .search-input.open input {\n      width: 100%;\n      outline: none;\n      background: none;\n      transition: all 0.3s ease-out; }\n  .navbar-container .search-input .search-list {\n    max-height: 450px;\n    height: calc(100vh - 11rem);\n    position: absolute;\n    top: 100%;\n    left: 0;\n    background: #fff;\n    width: 100%;\n    margin-top: .5rem;\n    padding-left: 0;\n    border-radius: 0.5rem;\n    display: none; }\n    .navbar-container .search-input .search-list.search-list-bookmark {\n      height: auto !important; }\n    .navbar-container .search-input .search-list.show {\n      display: block; }\n    .navbar-container .search-input .search-list li a {\n      padding: .9rem 1rem;\n      color: #626262; }\n      .navbar-container .search-input .search-list li a span[class*=\"feather icon-\"] {\n        font-size: 1.25rem; }\n    .navbar-container .search-input .search-list li:first-child {\n      border-top-left-radius: 0.5rem;\n      border-top-right-radius: 0.5rem; }\n    .navbar-container .search-input .search-list li:last-child {\n      border-bottom-left-radius: 0.5rem;\n      border-bottom-right-radius: 0.5rem; }\n    .navbar-container .search-input .search-list li.auto-suggestion:hover, .navbar-container .search-input .search-list li.auto-suggestion.current_item {\n      background-color: #f1f1f1; }\n  .navbar-container .search-input .search-input-icon {\n    z-index: 2;\n    display: none;\n    position: absolute;\n    left: 1.5rem;\n    top: 37%;\n    cursor: pointer; }\n    .navbar-container .search-input .search-input-icon i {\n      font-size: 1.25rem; }\n  .navbar-container .search-input .search-input-close {\n    z-index: 1;\n    display: none;\n    position: absolute;\n    right: 2rem;\n    top: 32%;\n    cursor: pointer; }\n    .navbar-container .search-input .search-input-close i {\n      font-size: 1.75rem; }\n\n.navbar-container .bookmark-input {\n  position: absolute;\n  top: 102%;\n  width: 25%;\n  display: none; }\n  .navbar-container .bookmark-input.show {\n    display: block; }\n  .navbar-container .bookmark-input .bookmark-input-icon {\n    position: absolute;\n    z-index: 1;\n    top: .85rem;\n    left: 1rem; }\n  .navbar-container .bookmark-input input {\n    padding: .7rem .7rem .7rem 2.5rem;\n    width: 100%;\n    background: #fff;\n    border: 1px solid rgba(0, 0, 0, 0.2); }\n    .navbar-container .bookmark-input input:focus {\n      border: 1px solid #7367f0; }\n  .navbar-container .bookmark-input .search-list {\n    box-shadow: 0 15px 30px 0 rgba(0, 0, 0, 0.11), 0 5px 15px 0 rgba(0, 0, 0, 0.08); }\n\n.navbar-container .bookmark-icon {\n  cursor: pointer; }\n\n.navbar-container .dropdown.bookmark-dropdown {\n  padding: 1.4rem 0.5rem 1.35rem; }\n  .navbar-container .dropdown.bookmark-dropdown .dropdown-toggle:after {\n    display: none; }\n\n.navbar-container .search-data-title {\n  line-height: 1.25rem; }\n\n.navbar-dark .search-input .input,\n.navbar-semi-light .search-input .input {\n  color: #F5F7FA;\n  border-radius: .5rem; }\n\n.navbar-dark .search-input.open .input,\n.navbar-semi-light .search-input.open .input {\n  color: #F5F7FA;\n  border: 1px solid #F5F7FA; }\n\nbody.navbar-static .navbar-container .search-input.open {\n  border-radius: 0; }\n\n.apexcharts-canvas .apexcharts-tooltip {\n  color: #626262 !important; }\n  .apexcharts-canvas .apexcharts-tooltip.dark {\n    color: #fff !important; }\n\n.apexcharts-canvas .apexcharts-toolbar .apexcharts-menu .apexcharts-menu-item {\n  color: #626262; }\n\n.apexcharts-xaxistooltip {\n  color: #626262 !important; }\n\n#client-retention-chart .apexcharts-canvas .apexcharts-legend {\n  left: -14px !important; }\n\n.apexcharts-toolbar {\n  z-index: 10; }\n\n.btn-social, .btn-social-icon {\n  position: relative;\n  padding-left: 4.95rem;\n  text-align: left;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis; }\n  .btn-social > :first-child, .btn-social-icon > :first-child {\n    position: absolute;\n    left: 0;\n    top: 2px;\n    bottom: 0;\n    width: 2.95rem;\n    line-height: 2.7rem;\n    font-size: 1rem;\n    text-align: center;\n    border-right: 1px solid rgba(0, 0, 0, 0.2); }\n\n.btn-social-icon {\n  height: 2.95rem;\n  width: 2.95rem;\n  padding: 0; }\n  .btn-social-icon > :first-child {\n    border: none;\n    text-align: center;\n    width: 100% !important; }\n\n.btn-adn {\n  background-color: #d87a68;\n  color: #fff;\n  background-color: #d87a68;\n  border-color: #fff; }\n  .btn-adn:hover {\n    color: #fff;\n    background-color: #d87a68;\n    border-color: #d87a68; }\n  .btn-adn:focus, .btn-adn.focus {\n    box-shadow: 0 0 0 0.2rem rgba(255, 255, 255, 0.5); }\n  .btn-adn.disabled, .btn-adn:disabled {\n    color: #fff;\n    background-color: #d87a68;\n    border-color: #fff; }\n  .btn-adn:not(:disabled):not(.disabled):active, .btn-adn:not(:disabled):not(.disabled).active,\n  .show > .btn-adn.dropdown-toggle {\n    color: #fff;\n    background-color: #ce563f;\n    border-color: #dfdfdf; }\n    .btn-adn:not(:disabled):not(.disabled):active:focus, .btn-adn:not(:disabled):not(.disabled).active:focus,\n    .show > .btn-adn.dropdown-toggle:focus {\n      box-shadow: 0 0 0 0.2rem rgba(255, 255, 255, 0.5); }\n\n.btn-bitbucket {\n  background-color: #205081;\n  color: #fff;\n  background-color: #205081;\n  border-color: #fff; }\n  .btn-bitbucket:hover {\n    color: #fff;\n    background-color: #205081;\n    border-color: #205081; }\n  .btn-bitbucket:focus, .btn-bitbucket.focus {\n    box-shadow: 0 0 0 0.2rem rgba(255, 255, 255, 0.5); }\n  .btn-bitbucket.disabled, .btn-bitbucket:disabled {\n    color: #fff;\n    background-color: #205081;\n    border-color: #fff; }\n  .btn-bitbucket:not(:disabled):not(.disabled):active, .btn-bitbucket:not(:disabled):not(.disabled).active,\n  .show > .btn-bitbucket.dropdown-toggle {\n    color: #fff;\n    background-color: #163758;\n    border-color: #dfdfdf; }\n    .btn-bitbucket:not(:disabled):not(.disabled):active:focus, .btn-bitbucket:not(:disabled):not(.disabled).active:focus,\n    .show > .btn-bitbucket.dropdown-toggle:focus {\n      box-shadow: 0 0 0 0.2rem rgba(255, 255, 255, 0.5); }\n\n.btn-dropbox {\n  background-color: #1087dd;\n  color: #fff;\n  background-color: #1087dd;\n  border-color: #fff; }\n  .btn-dropbox:hover {\n    color: #fff;\n    background-color: #1087dd;\n    border-color: #1087dd; }\n  .btn-dropbox:focus, .btn-dropbox.focus {\n    box-shadow: 0 0 0 0.2rem rgba(255, 255, 255, 0.5); }\n  .btn-dropbox.disabled, .btn-dropbox:disabled {\n    color: #fff;\n    background-color: #1087dd;\n    border-color: #fff; }\n  .btn-dropbox:not(:disabled):not(.disabled):active, .btn-dropbox:not(:disabled):not(.disabled).active,\n  .show > .btn-dropbox.dropdown-toggle {\n    color: #fff;\n    background-color: #0d6aad;\n    border-color: #dfdfdf; }\n    .btn-dropbox:not(:disabled):not(.disabled):active:focus, .btn-dropbox:not(:disabled):not(.disabled).active:focus,\n    .show > .btn-dropbox.dropdown-toggle:focus {\n      box-shadow: 0 0 0 0.2rem rgba(255, 255, 255, 0.5); }\n\n.btn-facebook {\n  background-color: #3b5998;\n  color: #fff;\n  background-color: #3b5998;\n  border-color: #fff; }\n  .btn-facebook:hover {\n    color: #fff;\n    background-color: #3b5998;\n    border-color: #3b5998; }\n  .btn-facebook:focus, .btn-facebook.focus {\n    box-shadow: 0 0 0 0.2rem rgba(255, 255, 255, 0.5); }\n  .btn-facebook.disabled, .btn-facebook:disabled {\n    color: #fff;\n    background-color: #3b5998;\n    border-color: #fff; }\n  .btn-facebook:not(:disabled):not(.disabled):active, .btn-facebook:not(:disabled):not(.disabled).active,\n  .show > .btn-facebook.dropdown-toggle {\n    color: #fff;\n    background-color: #2d4373;\n    border-color: #dfdfdf; }\n    .btn-facebook:not(:disabled):not(.disabled):active:focus, .btn-facebook:not(:disabled):not(.disabled).active:focus,\n    .show > .btn-facebook.dropdown-toggle:focus {\n      box-shadow: 0 0 0 0.2rem rgba(255, 255, 255, 0.5); }\n\n.btn-flickr {\n  background-color: #ff0084;\n  color: #fff;\n  background-color: #ff0084;\n  border-color: #fff; }\n  .btn-flickr:hover {\n    color: #fff;\n    background-color: #ff0084;\n    border-color: #ff0084; }\n  .btn-flickr:focus, .btn-flickr.focus {\n    box-shadow: 0 0 0 0.2rem rgba(255, 255, 255, 0.5); }\n  .btn-flickr.disabled, .btn-flickr:disabled {\n    color: #fff;\n    background-color: #ff0084;\n    border-color: #fff; }\n  .btn-flickr:not(:disabled):not(.disabled):active, .btn-flickr:not(:disabled):not(.disabled).active,\n  .show > .btn-flickr.dropdown-toggle {\n    color: #fff;\n    background-color: #cc006a;\n    border-color: #dfdfdf; }\n    .btn-flickr:not(:disabled):not(.disabled):active:focus, .btn-flickr:not(:disabled):not(.disabled).active:focus,\n    .show > .btn-flickr.dropdown-toggle:focus {\n      box-shadow: 0 0 0 0.2rem rgba(255, 255, 255, 0.5); }\n\n.btn-foursquare {\n  background-color: #f94877;\n  color: #fff;\n  background-color: #f94877;\n  border-color: #fff; }\n  .btn-foursquare:hover {\n    color: #fff;\n    background-color: #f94877;\n    border-color: #f94877; }\n  .btn-foursquare:focus, .btn-foursquare.focus {\n    box-shadow: 0 0 0 0.2rem rgba(255, 255, 255, 0.5); }\n  .btn-foursquare.disabled, .btn-foursquare:disabled {\n    color: #fff;\n    background-color: #f94877;\n    border-color: #fff; }\n  .btn-foursquare:not(:disabled):not(.disabled):active, .btn-foursquare:not(:disabled):not(.disabled).active,\n  .show > .btn-foursquare.dropdown-toggle {\n    color: #fff;\n    background-color: #f71752;\n    border-color: #dfdfdf; }\n    .btn-foursquare:not(:disabled):not(.disabled):active:focus, .btn-foursquare:not(:disabled):not(.disabled).active:focus,\n    .show > .btn-foursquare.dropdown-toggle:focus {\n      box-shadow: 0 0 0 0.2rem rgba(255, 255, 255, 0.5); }\n\n.btn-github {\n  background-color: #444444;\n  color: #fff;\n  background-color: #444444;\n  border-color: #fff; }\n  .btn-github:hover {\n    color: #fff;\n    background-color: #444444;\n    border-color: #444444; }\n  .btn-github:focus, .btn-github.focus {\n    box-shadow: 0 0 0 0.2rem rgba(255, 255, 255, 0.5); }\n  .btn-github.disabled, .btn-github:disabled {\n    color: #fff;\n    background-color: #444444;\n    border-color: #fff; }\n  .btn-github:not(:disabled):not(.disabled):active, .btn-github:not(:disabled):not(.disabled).active,\n  .show > .btn-github.dropdown-toggle {\n    color: #fff;\n    background-color: #2b2b2b;\n    border-color: #dfdfdf; }\n    .btn-github:not(:disabled):not(.disabled):active:focus, .btn-github:not(:disabled):not(.disabled).active:focus,\n    .show > .btn-github.dropdown-toggle:focus {\n      box-shadow: 0 0 0 0.2rem rgba(255, 255, 255, 0.5); }\n\n.btn-google {\n  background-color: #dd4b39;\n  color: #fff;\n  background-color: #dd4b39;\n  border-color: #fff; }\n  .btn-google:hover {\n    color: #fff;\n    background-color: #dd4b39;\n    border-color: #dd4b39; }\n  .btn-google:focus, .btn-google.focus {\n    box-shadow: 0 0 0 0.2rem rgba(255, 255, 255, 0.5); }\n  .btn-google.disabled, .btn-google:disabled {\n    color: #fff;\n    background-color: #dd4b39;\n    border-color: #fff; }\n  .btn-google:not(:disabled):not(.disabled):active, .btn-google:not(:disabled):not(.disabled).active,\n  .show > .btn-google.dropdown-toggle {\n    color: #fff;\n    background-color: #c23321;\n    border-color: #dfdfdf; }\n    .btn-google:not(:disabled):not(.disabled):active:focus, .btn-google:not(:disabled):not(.disabled).active:focus,\n    .show > .btn-google.dropdown-toggle:focus {\n      box-shadow: 0 0 0 0.2rem rgba(255, 255, 255, 0.5); }\n\n.btn-instagram {\n  background-color: #3f729b;\n  color: #fff;\n  background-color: #3f729b;\n  border-color: #fff; }\n  .btn-instagram:hover {\n    color: #fff;\n    background-color: #3f729b;\n    border-color: #3f729b; }\n  .btn-instagram:focus, .btn-instagram.focus {\n    box-shadow: 0 0 0 0.2rem rgba(255, 255, 255, 0.5); }\n  .btn-instagram.disabled, .btn-instagram:disabled {\n    color: #fff;\n    background-color: #3f729b;\n    border-color: #fff; }\n  .btn-instagram:not(:disabled):not(.disabled):active, .btn-instagram:not(:disabled):not(.disabled).active,\n  .show > .btn-instagram.dropdown-toggle {\n    color: #fff;\n    background-color: #305777;\n    border-color: #dfdfdf; }\n    .btn-instagram:not(:disabled):not(.disabled):active:focus, .btn-instagram:not(:disabled):not(.disabled).active:focus,\n    .show > .btn-instagram.dropdown-toggle:focus {\n      box-shadow: 0 0 0 0.2rem rgba(255, 255, 255, 0.5); }\n\n.btn-linkedin {\n  background-color: #007bb6;\n  color: #fff;\n  background-color: #007bb6;\n  border-color: #fff; }\n  .btn-linkedin:hover {\n    color: #fff;\n    background-color: #007bb6;\n    border-color: #007bb6; }\n  .btn-linkedin:focus, .btn-linkedin.focus {\n    box-shadow: 0 0 0 0.2rem rgba(255, 255, 255, 0.5); }\n  .btn-linkedin.disabled, .btn-linkedin:disabled {\n    color: #fff;\n    background-color: #007bb6;\n    border-color: #fff; }\n  .btn-linkedin:not(:disabled):not(.disabled):active, .btn-linkedin:not(:disabled):not(.disabled).active,\n  .show > .btn-linkedin.dropdown-toggle {\n    color: #fff;\n    background-color: #005983;\n    border-color: #dfdfdf; }\n    .btn-linkedin:not(:disabled):not(.disabled):active:focus, .btn-linkedin:not(:disabled):not(.disabled).active:focus,\n    .show > .btn-linkedin.dropdown-toggle:focus {\n      box-shadow: 0 0 0 0.2rem rgba(255, 255, 255, 0.5); }\n\n.btn-microsoft {\n  background-color: #2672ec;\n  color: #fff;\n  background-color: #2672ec;\n  border-color: #fff; }\n  .btn-microsoft:hover {\n    color: #fff;\n    background-color: #2672ec;\n    border-color: #2672ec; }\n  .btn-microsoft:focus, .btn-microsoft.focus {\n    box-shadow: 0 0 0 0.2rem rgba(255, 255, 255, 0.5); }\n  .btn-microsoft.disabled, .btn-microsoft:disabled {\n    color: #fff;\n    background-color: #2672ec;\n    border-color: #fff; }\n  .btn-microsoft:not(:disabled):not(.disabled):active, .btn-microsoft:not(:disabled):not(.disabled).active,\n  .show > .btn-microsoft.dropdown-toggle {\n    color: #fff;\n    background-color: #125acd;\n    border-color: #dfdfdf; }\n    .btn-microsoft:not(:disabled):not(.disabled):active:focus, .btn-microsoft:not(:disabled):not(.disabled).active:focus,\n    .show > .btn-microsoft.dropdown-toggle:focus {\n      box-shadow: 0 0 0 0.2rem rgba(255, 255, 255, 0.5); }\n\n.btn-odnoklassniki {\n  background-color: #f4731c;\n  color: #fff;\n  background-color: #f4731c;\n  border-color: #fff; }\n  .btn-odnoklassniki:hover {\n    color: #fff;\n    background-color: #f4731c;\n    border-color: #f4731c; }\n  .btn-odnoklassniki:focus, .btn-odnoklassniki.focus {\n    box-shadow: 0 0 0 0.2rem rgba(255, 255, 255, 0.5); }\n  .btn-odnoklassniki.disabled, .btn-odnoklassniki:disabled {\n    color: #fff;\n    background-color: #f4731c;\n    border-color: #fff; }\n  .btn-odnoklassniki:not(:disabled):not(.disabled):active, .btn-odnoklassniki:not(:disabled):not(.disabled).active,\n  .show > .btn-odnoklassniki.dropdown-toggle {\n    color: #fff;\n    background-color: #d35b0a;\n    border-color: #dfdfdf; }\n    .btn-odnoklassniki:not(:disabled):not(.disabled):active:focus, .btn-odnoklassniki:not(:disabled):not(.disabled).active:focus,\n    .show > .btn-odnoklassniki.dropdown-toggle:focus {\n      box-shadow: 0 0 0 0.2rem rgba(255, 255, 255, 0.5); }\n\n.btn-openid {\n  background-color: #f7931e;\n  color: #2a2e30;\n  background-color: #f7931e;\n  border-color: #fff; }\n  .btn-openid:hover {\n    color: #2a2e30;\n    background-color: #f7931e;\n    border-color: #f7931e; }\n  .btn-openid:focus, .btn-openid.focus {\n    box-shadow: 0 0 0 0.2rem rgba(223, 224, 224, 0.5); }\n  .btn-openid.disabled, .btn-openid:disabled {\n    color: #2a2e30;\n    background-color: #f7931e;\n    border-color: #fff; }\n  .btn-openid:not(:disabled):not(.disabled):active, .btn-openid:not(:disabled):not(.disabled).active,\n  .show > .btn-openid.dropdown-toggle {\n    color: #fff;\n    background-color: #da7908;\n    border-color: #dfdfdf; }\n    .btn-openid:not(:disabled):not(.disabled):active:focus, .btn-openid:not(:disabled):not(.disabled).active:focus,\n    .show > .btn-openid.dropdown-toggle:focus {\n      box-shadow: 0 0 0 0.2rem rgba(223, 224, 224, 0.5); }\n\n.btn-pinterest {\n  background-color: #cb2027;\n  color: #fff;\n  background-color: #cb2027;\n  border-color: #fff; }\n  .btn-pinterest:hover {\n    color: #fff;\n    background-color: #cb2027;\n    border-color: #cb2027; }\n  .btn-pinterest:focus, .btn-pinterest.focus {\n    box-shadow: 0 0 0 0.2rem rgba(255, 255, 255, 0.5); }\n  .btn-pinterest.disabled, .btn-pinterest:disabled {\n    color: #fff;\n    background-color: #cb2027;\n    border-color: #fff; }\n  .btn-pinterest:not(:disabled):not(.disabled):active, .btn-pinterest:not(:disabled):not(.disabled).active,\n  .show > .btn-pinterest.dropdown-toggle {\n    color: #fff;\n    background-color: #9f191f;\n    border-color: #dfdfdf; }\n    .btn-pinterest:not(:disabled):not(.disabled):active:focus, .btn-pinterest:not(:disabled):not(.disabled).active:focus,\n    .show > .btn-pinterest.dropdown-toggle:focus {\n      box-shadow: 0 0 0 0.2rem rgba(255, 255, 255, 0.5); }\n\n.btn-reddit {\n  background-color: #eff7ff;\n  color: #2a2e30;\n  background-color: #eff7ff;\n  border-color: #000; }\n  .btn-reddit:hover {\n    color: #fff;\n    background-color: #000;\n    border-color: #000; }\n  .btn-reddit:focus, .btn-reddit.focus {\n    box-shadow: 0 0 0 0.2rem rgba(6, 7, 7, 0.5); }\n  .btn-reddit.disabled, .btn-reddit:disabled {\n    color: #2a2e30;\n    background-color: #eff7ff;\n    border-color: #000; }\n  .btn-reddit:not(:disabled):not(.disabled):active, .btn-reddit:not(:disabled):not(.disabled).active,\n  .show > .btn-reddit.dropdown-toggle {\n    color: #2a2e30;\n    background-color: #bcdeff;\n    border-color: black; }\n    .btn-reddit:not(:disabled):not(.disabled):active:focus, .btn-reddit:not(:disabled):not(.disabled).active:focus,\n    .show > .btn-reddit.dropdown-toggle:focus {\n      box-shadow: 0 0 0 0.2rem rgba(6, 7, 7, 0.5); }\n\n.btn-soundcloud {\n  background-color: #ff5500;\n  color: #fff;\n  background-color: #ff5500;\n  border-color: #fff; }\n  .btn-soundcloud:hover {\n    color: #fff;\n    background-color: #ff5500;\n    border-color: #ff5500; }\n  .btn-soundcloud:focus, .btn-soundcloud.focus {\n    box-shadow: 0 0 0 0.2rem rgba(255, 255, 255, 0.5); }\n  .btn-soundcloud.disabled, .btn-soundcloud:disabled {\n    color: #fff;\n    background-color: #ff5500;\n    border-color: #fff; }\n  .btn-soundcloud:not(:disabled):not(.disabled):active, .btn-soundcloud:not(:disabled):not(.disabled).active,\n  .show > .btn-soundcloud.dropdown-toggle {\n    color: #fff;\n    background-color: #cc4400;\n    border-color: #dfdfdf; }\n    .btn-soundcloud:not(:disabled):not(.disabled):active:focus, .btn-soundcloud:not(:disabled):not(.disabled).active:focus,\n    .show > .btn-soundcloud.dropdown-toggle:focus {\n      box-shadow: 0 0 0 0.2rem rgba(255, 255, 255, 0.5); }\n\n.btn-tumblr {\n  background-color: #2c4762;\n  color: #fff;\n  background-color: #2c4762;\n  border-color: #fff; }\n  .btn-tumblr:hover {\n    color: #fff;\n    background-color: #2c4762;\n    border-color: #2c4762; }\n  .btn-tumblr:focus, .btn-tumblr.focus {\n    box-shadow: 0 0 0 0.2rem rgba(255, 255, 255, 0.5); }\n  .btn-tumblr.disabled, .btn-tumblr:disabled {\n    color: #fff;\n    background-color: #2c4762;\n    border-color: #fff; }\n  .btn-tumblr:not(:disabled):not(.disabled):active, .btn-tumblr:not(:disabled):not(.disabled).active,\n  .show > .btn-tumblr.dropdown-toggle {\n    color: #fff;\n    background-color: #1c2e3f;\n    border-color: #dfdfdf; }\n    .btn-tumblr:not(:disabled):not(.disabled):active:focus, .btn-tumblr:not(:disabled):not(.disabled).active:focus,\n    .show > .btn-tumblr.dropdown-toggle:focus {\n      box-shadow: 0 0 0 0.2rem rgba(255, 255, 255, 0.5); }\n\n.btn-twitter {\n  background-color: #55acee;\n  color: #2a2e30;\n  background-color: #55acee;\n  border-color: #fff; }\n  .btn-twitter:hover {\n    color: #2a2e30;\n    background-color: #55acee;\n    border-color: #55acee; }\n  .btn-twitter:focus, .btn-twitter.focus {\n    box-shadow: 0 0 0 0.2rem rgba(223, 224, 224, 0.5); }\n  .btn-twitter.disabled, .btn-twitter:disabled {\n    color: #2a2e30;\n    background-color: #55acee;\n    border-color: #fff; }\n  .btn-twitter:not(:disabled):not(.disabled):active, .btn-twitter:not(:disabled):not(.disabled).active,\n  .show > .btn-twitter.dropdown-toggle {\n    color: #fff;\n    background-color: #2795e9;\n    border-color: #dfdfdf; }\n    .btn-twitter:not(:disabled):not(.disabled):active:focus, .btn-twitter:not(:disabled):not(.disabled).active:focus,\n    .show > .btn-twitter.dropdown-toggle:focus {\n      box-shadow: 0 0 0 0.2rem rgba(223, 224, 224, 0.5); }\n\n.btn-vimeo {\n  background-color: #1ab7ea;\n  color: #fff;\n  background-color: #1ab7ea;\n  border-color: #fff; }\n  .btn-vimeo:hover {\n    color: #fff;\n    background-color: #1ab7ea;\n    border-color: #1ab7ea; }\n  .btn-vimeo:focus, .btn-vimeo.focus {\n    box-shadow: 0 0 0 0.2rem rgba(255, 255, 255, 0.5); }\n  .btn-vimeo.disabled, .btn-vimeo:disabled {\n    color: #fff;\n    background-color: #1ab7ea;\n    border-color: #fff; }\n  .btn-vimeo:not(:disabled):not(.disabled):active, .btn-vimeo:not(:disabled):not(.disabled).active,\n  .show > .btn-vimeo.dropdown-toggle {\n    color: #fff;\n    background-color: #1295bf;\n    border-color: #dfdfdf; }\n    .btn-vimeo:not(:disabled):not(.disabled):active:focus, .btn-vimeo:not(:disabled):not(.disabled).active:focus,\n    .show > .btn-vimeo.dropdown-toggle:focus {\n      box-shadow: 0 0 0 0.2rem rgba(255, 255, 255, 0.5); }\n\n.btn-vk {\n  background-color: #587ea3;\n  color: #fff;\n  background-color: #587ea3;\n  border-color: #fff; }\n  .btn-vk:hover {\n    color: #fff;\n    background-color: #587ea3;\n    border-color: #587ea3; }\n  .btn-vk:focus, .btn-vk.focus {\n    box-shadow: 0 0 0 0.2rem rgba(255, 255, 255, 0.5); }\n  .btn-vk.disabled, .btn-vk:disabled {\n    color: #fff;\n    background-color: #587ea3;\n    border-color: #fff; }\n  .btn-vk:not(:disabled):not(.disabled):active, .btn-vk:not(:disabled):not(.disabled).active,\n  .show > .btn-vk.dropdown-toggle {\n    color: #fff;\n    background-color: #466482;\n    border-color: #dfdfdf; }\n    .btn-vk:not(:disabled):not(.disabled):active:focus, .btn-vk:not(:disabled):not(.disabled).active:focus,\n    .show > .btn-vk.dropdown-toggle:focus {\n      box-shadow: 0 0 0 0.2rem rgba(255, 255, 255, 0.5); }\n\n.btn-yahoo {\n  background-color: #720e9e;\n  color: #fff;\n  background-color: #720e9e;\n  border-color: #fff; }\n  .btn-yahoo:hover {\n    color: #fff;\n    background-color: #720e9e;\n    border-color: #720e9e; }\n  .btn-yahoo:focus, .btn-yahoo.focus {\n    box-shadow: 0 0 0 0.2rem rgba(255, 255, 255, 0.5); }\n  .btn-yahoo.disabled, .btn-yahoo:disabled {\n    color: #fff;\n    background-color: #720e9e;\n    border-color: #fff; }\n  .btn-yahoo:not(:disabled):not(.disabled):active, .btn-yahoo:not(:disabled):not(.disabled).active,\n  .show > .btn-yahoo.dropdown-toggle {\n    color: #fff;\n    background-color: #500a6f;\n    border-color: #dfdfdf; }\n    .btn-yahoo:not(:disabled):not(.disabled):active:focus, .btn-yahoo:not(:disabled):not(.disabled).active:focus,\n    .show > .btn-yahoo.dropdown-toggle:focus {\n      box-shadow: 0 0 0 0.2rem rgba(255, 255, 255, 0.5); }\n\n.btn-outline-adn {\n  border: 1px solid #d87a68 !important;\n  color: #d87a68; }\n\n.btn-outline-bitbucket {\n  border: 1px solid #205081 !important;\n  color: #205081; }\n\n.btn-outline-dropbox {\n  border: 1px solid #1087dd !important;\n  color: #1087dd; }\n\n.btn-outline-facebook {\n  border: 1px solid #3b5998 !important;\n  color: #3b5998; }\n\n.btn-outline-flickr {\n  border: 1px solid #ff0084 !important;\n  color: #ff0084; }\n\n.btn-outline-foursquare {\n  border: 1px solid #f94877 !important;\n  color: #f94877; }\n\n.btn-outline-github {\n  border: 1px solid #444444 !important;\n  color: #444444; }\n\n.btn-outline-google {\n  border: 1px solid #dd4b39 !important;\n  color: #dd4b39; }\n\n.btn-outline-instagram {\n  border: 1px solid #3f729b !important;\n  color: #3f729b; }\n\n.btn-outline-linkedin {\n  border: 1px solid #007bb6 !important;\n  color: #007bb6; }\n\n.btn-outline-microsoft {\n  border: 1px solid #2672ec !important;\n  color: #2672ec; }\n\n.btn-outline-odnoklassniki {\n  border: 1px solid #f4731c !important;\n  color: #f4731c; }\n\n.btn-outline-openid {\n  border: 1px solid #f7931e !important;\n  color: #f7931e; }\n\n.btn-outline-pinterest {\n  border: 1px solid #cb2027 !important;\n  color: #cb2027; }\n\n.btn-outline-reddit {\n  border: 1px solid #ff4500 !important;\n  color: #ff4500; }\n\n.btn-outline-soundcloud {\n  border: 1px solid #ff5500 !important;\n  color: #ff5500; }\n\n.btn-outline-tumblr {\n  border: 1px solid #2c4762 !important;\n  color: #2c4762; }\n\n.btn-outline-twitter {\n  border: 1px solid #55acee !important;\n  color: #55acee; }\n\n.btn-outline-vimeo {\n  border: 1px solid #1ab7ea !important;\n  color: #1ab7ea; }\n\n.btn-outline-vk {\n  border: 1px solid #587ea3 !important;\n  color: #587ea3; }\n\n.btn-outline-yahoo {\n  border: 1px solid #720e9e !important;\n  color: #720e9e; }\n\n.btn-outline-adn:hover {\n  color: #ad412d;\n  border: 1px solid #ad412d !important; }\n\n.btn-outline-bitbucket:hover {\n  color: #0c1d2f;\n  border: 1px solid #0c1d2f !important; }\n\n.btn-outline-dropbox:hover {\n  color: #094d7e;\n  border: 1px solid #094d7e !important; }\n\n.btn-outline-facebook:hover {\n  color: #1e2e4f;\n  border: 1px solid #1e2e4f !important; }\n\n.btn-outline-flickr:hover {\n  color: #99004f;\n  border: 1px solid #99004f !important; }\n\n.btn-outline-foursquare:hover {\n  color: #d4073d;\n  border: 1px solid #d4073d !important; }\n\n.btn-outline-github:hover {\n  color: #111111;\n  border: 1px solid #111111 !important; }\n\n.btn-outline-google:hover {\n  color: #96271a;\n  border: 1px solid #96271a !important; }\n\n.btn-outline-instagram:hover {\n  color: #223d52;\n  border: 1px solid #223d52 !important; }\n\n.btn-outline-linkedin:hover {\n  color: #003650;\n  border: 1px solid #003650 !important; }\n\n.btn-outline-microsoft:hover {\n  color: #0e459e;\n  border: 1px solid #0e459e !important; }\n\n.btn-outline-odnoklassniki:hover {\n  color: #a24608;\n  border: 1px solid #a24608 !important; }\n\n.btn-outline-openid:hover {\n  color: #a95e06;\n  border: 1px solid #a95e06 !important; }\n\n.btn-outline-pinterest:hover {\n  color: #731216;\n  border: 1px solid #731216 !important; }\n\n.btn-outline-reddit:hover {\n  color: #992900;\n  border: 1px solid #992900 !important; }\n\n.btn-outline-soundcloud:hover {\n  color: #993300;\n  border: 1px solid #993300 !important; }\n\n.btn-outline-tumblr:hover {\n  color: #0c141c;\n  border: 1px solid #0c141c !important; }\n\n.btn-outline-twitter:hover {\n  color: #147bc9;\n  border: 1px solid #147bc9 !important; }\n\n.btn-outline-vimeo:hover {\n  color: #0d7091;\n  border: 1px solid #0d7091 !important; }\n\n.btn-outline-vk:hover {\n  color: #344b61;\n  border: 1px solid #344b61 !important; }\n\n.btn-outline-yahoo:hover {\n  color: #2e0640;\n  border: 1px solid #2e0640 !important; }\n\n.bg-adn {\n  background-color: #d87a68; }\n\n.bg-bitbucket {\n  background-color: #205081; }\n\n.bg-dropbox {\n  background-color: #1087dd; }\n\n.bg-facebook {\n  background-color: #3b5998; }\n\n.bg-flickr {\n  background-color: #ff0084; }\n\n.bg-foursquare {\n  background-color: #f94877; }\n\n.bg-github {\n  background-color: #444444; }\n\n.bg-google {\n  background-color: #dd4b39; }\n\n.bg-instagram {\n  background-color: #3f729b; }\n\n.bg-linkedin {\n  background-color: #007bb6; }\n\n.bg-microsoft {\n  background-color: #2672ec; }\n\n.bg-odnoklassniki {\n  background-color: #f4731c; }\n\n.bg-openid {\n  background-color: #f7931e; }\n\n.bg-pinterest {\n  background-color: #cb2027; }\n\n.bg-reddit {\n  background-color: #ff4500; }\n\n.bg-soundcloud {\n  background-color: #ff5500; }\n\n.bg-tumblr {\n  background-color: #2c4762; }\n\n.bg-twitter {\n  background-color: #55acee; }\n\n.bg-vimeo {\n  background-color: #1ab7ea; }\n\n.bg-vk {\n  background-color: #587ea3; }\n\n.bg-yahoo {\n  background-color: #720e9e; }\n\n/*=========================================================================================\n    File Name: demo.scss\n    Description: CSS used for demo purpose only. Remove this css from your project.\n    ----------------------------------------------------------------------------------------\n    Item Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n    Author: PIXINVENT\n    Author URL: http://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n.fonticon-container > .fonticon-wrap {\n  float: left;\n  width: 60px;\n  height: 60px;\n  line-height: 4.8rem;\n  text-align: center;\n  border-radius: 0.1875rem;\n  margin-right: 1rem;\n  margin-bottom: 1.5rem; }\n  .fonticon-container > .fonticon-wrap > i {\n    font-size: 2.28rem;\n    transition: all .2s ease-in-out; }\n  .fonticon-container > .fonticon-wrap.youtube {\n    width: 100px; }\n\n.fonticon-container:hover i {\n  color: #7367f0;\n  font-size: 2.9rem;\n  transform: scale(1.3); }\n\n.fonticon-container > .fonticon-classname, .fonticon-container > .fonticon-unit {\n  display: block;\n  font-size: 1.5rem;\n  line-height: 1.2; }\n\n.fonticon-container > .fonticon-unit {\n  font-size: 1rem;\n  font-style: italic; }\n\n.scroll-example {\n  padding: 0.5rem;\n  position: relative;\n  border: 2px solid #dfdfdf;\n  overflow: auto; }\n  .scroll-example .horz-scroll-content {\n    width: 1200px; }\n\n.browser {\n  background: #e0e0e0;\n  border: 4px solid #e0e0e0;\n  width: 100%;\n  height: 12rem;\n  padding-top: 20px;\n  margin: 0 0 10px;\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box; }\n\n.browser iframe {\n  border: 0;\n  background: #fff;\n  height: 100%;\n  width: 100%; }\n\n.loader-wrapper {\n  height: 8em; }\n\n.maintenance-icon {\n  font-size: 4rem; }\n\n.animationIcon {\n  right: 30px;\n  bottom: 10px; }\n\n/*=========================================================================================\n\tFile Name: customizer.scss\n\tDescription: CSS used for demo purpose only. Remove this css from your project.\n\t----------------------------------------------------------------------------------------\n\tItem Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n\tAuthor: PIXINVENT\n\tAuthor URL: http://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n.customizer {\n  width: 400px;\n  right: -400px;\n  padding: 0;\n  background-color: #fff;\n  z-index: 1051;\n  position: fixed;\n  top: 0;\n  bottom: 0;\n  height: 100vh;\n  height: calc(var(--vh, 1vh) * 100);\n  transition: right 0.4s cubic-bezier(0.05, 0.74, 0.2, 0.99);\n  backface-visibility: hidden;\n  border-left: 1px solid rgba(0, 0, 0, 0.05);\n  box-shadow: 0 15px 30px 0 rgba(0, 0, 0, 0.11), 0 5px 15px 0 rgba(0, 0, 0, 0.08); }\n  .customizer.open {\n    right: 0; }\n  .customizer .customizer-content {\n    position: relative;\n    height: 100%; }\n  .customizer .customizer-close {\n    position: absolute;\n    right: 30px;\n    top: 20px;\n    padding: 7px;\n    width: auto;\n    z-index: 10;\n    color: #626262; }\n    .customizer .customizer-close i {\n      font-size: 1.71rem; }\n  .customizer .customizer-toggle {\n    background: #7367f0;\n    color: #fff;\n    display: block;\n    box-shadow: -3px 0px 8px rgba(0, 0, 0, 0.1);\n    border-top-left-radius: 6px;\n    border-bottom-left-radius: 6px;\n    position: absolute;\n    top: 50%;\n    width: 38px;\n    height: 38px;\n    left: -39px;\n    text-align: center;\n    line-height: 40px;\n    cursor: pointer; }\n  .customizer .color-box {\n    height: 35px;\n    width: 35px;\n    margin: .5rem;\n    border-radius: .5rem;\n    cursor: pointer; }\n    .customizer .color-box.selected {\n      box-shadow: 0 0 0 3px rgba(52, 144, 220, 0.5); }\n\nbody.dark-layout .hide-scroll-top-switch .custom-switch .custom-control-label:before,\nbody.dark-layout .collapse-sidebar .custom-switch .custom-control-label:before {\n  background-color: #10163a; }\n\n.buy-now {\n  position: fixed;\n  bottom: 5%;\n  right: 79px;\n  z-index: 1031; }\n  .buy-now .btn {\n    box-shadow: 0 1px 20px 1px #ea5455 !important; }\n    .buy-now .btn:hover {\n      box-shadow: none !important; }\n\n.chip {\n  background-color: #f0f0f0;\n  font-size: 0.8rem;\n  border-radius: 1.428rem;\n  display: inline-flex;\n  padding: 0 10px;\n  margin-bottom: 5px;\n  vertical-align: middle;\n  justify-content: center; }\n  .chip .chip-body {\n    color: rgba(0, 0, 0, 0.7);\n    display: flex;\n    justify-content: space-between;\n    min-height: 1.857rem;\n    min-width: 1.857rem; }\n    .chip .chip-body .avatar {\n      background-color: #c3c3c3;\n      display: flex;\n      width: 24px;\n      height: 24px;\n      margin: 2px 0;\n      border-radius: 50%;\n      justify-content: center;\n      align-items: center;\n      color: #fff;\n      transform: translate(-8px); }\n      .chip .chip-body .avatar .avatar-content {\n        top: 0; }\n      .chip .chip-body .avatar img {\n        border-radius: 50%;\n        height: 24px;\n        width: 24px; }\n    .chip .chip-body .chip-text {\n      vertical-align: middle;\n      align-self: center; }\n    .chip .chip-body .chip-closeable {\n      min-height: 1.428rem;\n      min-width: 1.428rem;\n      margin: 0 4px;\n      display: flex;\n      justify-content: center;\n      align-items: center;\n      align-self: center;\n      border-radius: 50%;\n      background: rgba(0, 0, 0, 0.15);\n      color: #fff;\n      transform: translate(10px);\n      cursor: pointer; }\n      .chip .chip-body .chip-closeable i {\n        margin-left: 1px;\n        margin-top: 1px; }\n\n@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {\n  .chip .chip-closeable i {\n    position: relative;\n    top: 3px; } }\n\n.divider {\n  display: block;\n  text-align: center;\n  overflow: hidden;\n  white-space: nowrap;\n  margin: 1rem 0; }\n  .divider .divider-text {\n    position: relative;\n    display: inline-block;\n    font-size: .9375rem;\n    padding: 0 1rem;\n    background-color: #fff; }\n    .divider .divider-text i {\n      font-size: 1rem; }\n    .divider .divider-text:before, .divider .divider-text:after {\n      content: \"\";\n      position: absolute;\n      top: 50%;\n      width: 9999px;\n      border-top: 1px solid rgba(0, 0, 0, 0.1); }\n    .divider .divider-text:before {\n      right: 100%; }\n    .divider .divider-text:after {\n      left: 100%; }\n  .divider.divider-left .divider-text {\n    float: left;\n    padding-left: 0; }\n    .divider.divider-left .divider-text:before {\n      display: none; }\n  .divider.divider-left-center .divider-text {\n    left: -25%; }\n  .divider.divider-right .divider-text {\n    float: right;\n    padding-right: 0; }\n    .divider.divider-right .divider-text:after {\n      display: none; }\n  .divider.divider-right-center .divider-text {\n    right: -25%; }\n  .divider.divider-dotted .divider-text:before, .divider.divider-dotted .divider-text:after {\n    border-style: dotted;\n    border-width: 1px;\n    border-top-width: 0;\n    border-color: black; }\n  .divider.divider-dashed .divider-text:before, .divider.divider-dashed .divider-text:after {\n    border-style: dashed;\n    border-width: 1px;\n    border-top-width: 0;\n    border-color: black; }\n\n@media screen and (min-width: 0px) {\n  head {\n    font-family: \"xs 0px\"; }\n  body:after {\n    content: \"xs - min-width: 0px\"; } }\n\n@media screen and (min-width: 544px) {\n  head {\n    font-family: \"sm 544px\"; }\n  body:after {\n    content: \"sm - min-width: 544px\"; } }\n\n@media screen and (min-width: 768px) {\n  head {\n    font-family: \"md 768px\"; }\n  body:after {\n    content: \"md - min-width: 768px\"; } }\n\n@media screen and (min-width: 992px) {\n  head {\n    font-family: \"lg 992px\"; }\n  body:after {\n    content: \"lg - min-width: 992px\"; } }\n\n@media screen and (min-width: 1200px) {\n  head {\n    font-family: \"xl 1200px\"; }\n  body:after {\n    content: \"xl - min-width: 1200px\"; } }\n\nhead {\n  clear: both; }\n  head title {\n    font-family: \"xs 0px, sm 544px, md 768px, lg 992px, xl 1200px\"; }\n\nbody:after {\n  display: none; }\n\n*[data-usn-if] {\n  display: none; }\n\n.group-area {\n  margin-bottom: 3rem; }\n\n.block {\n  display: block;\n  width: 100%; }\n\n/* Input with icon */\n.form-control-position {\n  position: absolute;\n  top: 2px;\n  right: 0;\n  z-index: 2;\n  display: block;\n  width: 2.5rem;\n  height: 2.5rem;\n  line-height: 2.5rem;\n  text-align: center; }\n\n/*---------------------------------\nInput Icon\n---------------------------------*/\n.position-relative .form-control {\n  padding-right: calc( 1.25em + 1.4rem + 1px); }\n  .position-relative .form-control.form-control-lg ~ .form-control-position {\n    top: 10px; }\n  .position-relative .form-control.form-control-sm ~ .form-control-position {\n    top: -3px; }\n\n/* Input Icon left */\n.has-icon-left .form-control {\n  padding-right: 2rem;\n  padding-left: 3rem; }\n\n.has-icon-left .form-control-position {\n  right: auto;\n  left: inherit; }\n  .has-icon-left .form-control-position i {\n    position: relative;\n    left: 5px;\n    color: rgba(34, 41, 47, 0.4); }\n\ninput[type=\"color\"] {\n  height: calc( 1.25em + 1.4rem + 1px); }\n\ninput[type=\"date\"].form-control,\ninput[type=\"time\"].form-control,\ninput[type=\"datetime-local\"].form-control,\ninput[type=\"month\"].form-control {\n  line-height: 1.45; }\n\n.font-size-large {\n  font-size: 2rem; }\n\n.font-size-base {\n  font-size: 1rem; }\n\n.font-size-small {\n  font-size: 1rem; }\n\n.font-size-xsmall {\n  font-size: 0.75rem; }\n\n.input-group-xs .form-control,\n.input-group-xs .input-group-addon,\n.input-group-xs .input-group-btn > button {\n  padding: 0.175rem 0.5rem;\n  font-size: 0.725rem;\n  line-height: 1.677777;\n  border-bottom-left-radius: 0.175rem;\n  border-top-left-radius: 0.175rem; }\n\n.input-group-xs .input-group-btn > button {\n  border-radius: 0.175rem; }\n\n.input-group-addon {\n  padding-top: 0.2rem;\n  padding-bottom: 0.2rem; }\n\n.floating-label-form-group-with-focus label,\n.floating-label-form-group-with-value label {\n  color: #7367f0 !important;\n  text-transform: uppercase;\n  font-weight: 400; }\n\n.select2-container--classic .select2-selection--single {\n  min-height: 40px !important; }\n\n.select2-container--classic:focus,\n.select2-container--default:focus {\n  outline: none; }\n\n.select2-container--classic .select2-selection--single,\n.select2-container--default .select2-selection--single {\n  min-height: 38px;\n  padding: 5px;\n  border: 1px solid rgba(0, 0, 0, 0.2); }\n  .select2-container--classic .select2-selection--single:focus,\n  .select2-container--default .select2-selection--single:focus {\n    outline: 0;\n    border-color: #7367f0 !important;\n    box-shadow: 0 3px 10px 0 rgba(0, 0, 0, 0.15) !important; }\n  .select2-container--classic .select2-selection--single .select2-selection__rendered i,\n  .select2-container--default .select2-selection--single .select2-selection__rendered i {\n    margin-right: 0.5rem; }\n  .select2-container--classic .select2-selection--single .select2-selection__arrow,\n  .select2-container--default .select2-selection--single .select2-selection__arrow {\n    min-height: 38px !important; }\n\n.select2-container--classic.select2-container--open .select2-selection--single,\n.select2-container--default.select2-container--open .select2-selection--single {\n  border-color: #7367f0 !important;\n  outline: 0; }\n\n.select2-container--classic.select2-container--focus,\n.select2-container--default.select2-container--focus {\n  outline: 0; }\n  .select2-container--classic.select2-container--focus .select2-selection--multiple,\n  .select2-container--default.select2-container--focus .select2-selection--multiple {\n    border-color: #7367f0 !important;\n    outline: 0; }\n\n.select2-container--classic .select2-selection--multiple,\n.select2-container--default .select2-selection--multiple {\n  min-height: 38px !important;\n  border: 1px solid rgba(0, 0, 0, 0.2); }\n  .select2-container--classic .select2-selection--multiple:focus,\n  .select2-container--default .select2-selection--multiple:focus {\n    outline: 0;\n    border-color: #7367f0 !important;\n    box-shadow: 0 3px 10px 0 rgba(0, 0, 0, 0.15) !important; }\n  .select2-container--classic .select2-selection--multiple .select2-selection__choice,\n  .select2-container--default .select2-selection--multiple .select2-selection__choice {\n    background-color: #7367f0 !important;\n    border-color: #4839eb !important;\n    color: #fff;\n    padding: 5px; }\n  .select2-container--classic .select2-selection--multiple .select2-selection__rendered li .select2-search__field,\n  .select2-container--default .select2-selection--multiple .select2-selection__rendered li .select2-search__field {\n    margin-top: 10px; }\n  .select2-container--classic .select2-selection--multiple .select2-selection__choice__remove,\n  .select2-container--default .select2-selection--multiple .select2-selection__choice__remove {\n    color: #fff !important;\n    float: right;\n    margin-left: 0.5rem; }\n  .select2-container--classic .select2-selection--multiple i,\n  .select2-container--default .select2-selection--multiple i {\n    position: relative;\n    top: 1px;\n    margin-right: 0.5rem;\n    padding-left: 1px; }\n  .select2-container--classic .select2-selection--multiple[class*=bg-] .select2-selection__choice,\n  .select2-container--default .select2-selection--multiple[class*=bg-] .select2-selection__choice {\n    background-color: rgba(0, 0, 0, 0.15) !important;\n    border-color: rgba(0, 0, 0, 0.2) !important; }\n\n.select2-container--classic .select2-results__options .select2-results__option i,\n.select2-container--default .select2-results__options .select2-results__option i {\n  margin-right: 0.5rem; }\n\n.select2-container--classic .select2-result-repository__avatar img,\n.select2-container--default .select2-result-repository__avatar img {\n  width: 50px; }\n\n.select2-container--classic [class*=\"icon-\"],\n.select2-container--default [class*=\"icon-\"] {\n  font-family: 'feather'; }\n\n.select2-container--classic .select-lg,\n.select2-container--default .select-lg {\n  min-height: calc( 1.25em + 1.4rem + 1px) !important;\n  font-size: 1.2rem;\n  margin-bottom: 0 !important;\n  padding: 0.3rem 0.7rem; }\n  .select2-container--classic .select-lg.select2-selection--single .select2-selection__rendered,\n  .select2-container--default .select-lg.select2-selection--single .select2-selection__rendered {\n    padding-top: 0.1rem; }\n  .select2-container--classic .select-lg.select2-selection--single .select2-selection__arrow,\n  .select2-container--default .select-lg.select2-selection--single .select2-selection__arrow {\n    top: 0.2rem !important; }\n  .select2-container--classic .select-lg.select2-selection--multiple,\n  .select2-container--default .select-lg.select2-selection--multiple {\n    padding: 0 0.2rem; }\n    .select2-container--classic .select-lg.select2-selection--multiple .select2-selection__rendered,\n    .select2-container--default .select-lg.select2-selection--multiple .select2-selection__rendered {\n      padding-top: 0 !important; }\n      .select2-container--classic .select-lg.select2-selection--multiple .select2-selection__rendered li,\n      .select2-container--default .select-lg.select2-selection--multiple .select2-selection__rendered li {\n        font-size: 1.2rem; }\n      .select2-container--classic .select-lg.select2-selection--multiple .select2-selection__rendered .select2-selection__choice,\n      .select2-container--default .select-lg.select2-selection--multiple .select2-selection__rendered .select2-selection__choice {\n        padding: 5px; }\n\n.select2-container--classic .select-sm,\n.select2-container--default .select-sm {\n  min-height: calc(1em + 1rem + 2px) !important;\n  padding: 0 0.2rem;\n  font-size: 0.75rem;\n  margin-bottom: 0 !important;\n  line-height: 1.5; }\n  .select2-container--classic .select-sm.select2-selection--single .select2-selection__arrow,\n  .select2-container--default .select-sm.select2-selection--single .select2-selection__arrow {\n    top: -0.3rem !important; }\n  .select2-container--classic .select-sm.select2-selection--multiple,\n  .select2-container--default .select-sm.select2-selection--multiple {\n    line-height: 1.3; }\n    .select2-container--classic .select-sm.select2-selection--multiple .select2-selection__rendered,\n    .select2-container--default .select-sm.select2-selection--multiple .select2-selection__rendered {\n      padding: 3px; }\n      .select2-container--classic .select-sm.select2-selection--multiple .select2-selection__rendered li,\n      .select2-container--default .select-sm.select2-selection--multiple .select2-selection__rendered li {\n        font-size: 0.75rem;\n        margin-top: 2px; }\n    .select2-container--classic .select-sm.select2-selection--multiple .select2-selection__choice,\n    .select2-container--default .select-sm.select2-selection--multiple .select2-selection__choice {\n      padding: 0 0.2rem; }\n    .select2-container--classic .select-sm.select2-selection--multiple .select2-search--inline .select2-search__field,\n    .select2-container--default .select-sm.select2-selection--multiple .select2-search--inline .select2-search__field {\n      margin-top: 0; }\n\n.select2 .form-control::focus {\n  border-color: #7367f0 !important; }\n\ntable.dataTable {\n  border: 2px solid #f8f8f8; }\n  table.dataTable th, table.dataTable td {\n    border-bottom: 1px solid #f8f8f8;\n    border-top: 0; }\n  table.dataTable thead th, table.dataTable thead td, table.dataTable tfoot th, table.dataTable tfoot td {\n    font-size: 0.85rem;\n    border: 0; }\n  table.dataTable thead tr {\n    background-color: #f8f8f8; }\n  table.dataTable thead .sorting, table.dataTable thead .sorting_asc, table.dataTable thead .sorting_desc {\n    padding-right: inherit; }\n    table.dataTable thead .sorting:before, table.dataTable thead .sorting_asc:before, table.dataTable thead .sorting_desc:before {\n      font-family: 'feather';\n      content: \"\\e845\";\n      padding-right: 0.3rem;\n      font-size: .7rem;\n      left: 0;\n      top: .9rem; }\n    table.dataTable thead .sorting:after, table.dataTable thead .sorting_asc:after, table.dataTable thead .sorting_desc:after {\n      font-family: 'feather';\n      content: \"\\e842\";\n      font-size: .7rem;\n      left: 0;\n      top: 1.3rem; }\n  table.dataTable.table-striped tbody tr:nth-of-type(even) {\n    background-color: #f8f8f8; }\n  table.dataTable.table-striped tbody tr:nth-of-type(odd) {\n    background-color: #fff; }\n  table.dataTable.complex-headers {\n    border: 1px solid #dae1e7; }\n    table.dataTable.complex-headers thead th, table.dataTable.complex-headers thead td, table.dataTable.complex-headers tfoot th, table.dataTable.complex-headers tfoot td {\n      border-bottom: 1px solid #dae1e7;\n      border-right: 1px solid #dae1e7; }\n  table.dataTable tbody tr.selected {\n    background-color: rgba(115, 103, 240, 0.05) !important;\n    color: #7367f0 !important;\n    box-shadow: 0 0 1px 0 #7367f0 !important;\n    border-radius: 5px; }\n    table.dataTable tbody tr.selected td, table.dataTable tbody tr.selected th {\n      border-bottom: 0; }\n\ndiv.dataTables_wrapper div.dataTables_filter label, div.dataTables_wrapper div.dataTables_length label {\n  margin-top: 1rem; }\n\ndiv.dataTables_wrapper div.dataTables_filter select, div.dataTables_wrapper div.dataTables_length select {\n  background-position: calc(100% - 3px) 5px, calc(100% - 20px) 13px, 100% 0;\n  padding: 0 0.8rem; }\n\ndiv.dataTables_wrapper div.dataTables_paginate ul.pagination {\n  margin-top: 1rem;\n  padding-bottom: 7px; }\n  div.dataTables_wrapper div.dataTables_paginate ul.pagination li a {\n    font-size: 0.8rem; }\n\ntr.group {\n  background-color: #ededed; }\n\n@media only screen and (max-width: 768px) {\n  div.dataTables_wrapper div.dataTables_paginate ul.pagination {\n    justify-content: center; } }\n"
  },
  {
    "path": "public/backend/css/core/colors/palette-gradient.css",
    "content": ".bg-gradient-white {\n  color: #fff;\n  background-image: linear-gradient(30deg, #FFFFFF, rgba(255, 255, 255, 0.5));\n  background-repeat: repeat-x; }\n  .bg-gradient-white:hover, .bg-gradient-white:active {\n    color: #fff; }\n\n.gradient-light-white {\n  background: linear-gradient(30deg, #FFFFFF 0%, 100%);\n  color: #fff; }\n  .gradient-light-white:hover, .gradient-light-white:active {\n    color: #fff; }\n\n.bg-gradient-black {\n  color: #fff;\n  background-image: linear-gradient(30deg, #000000, rgba(0, 0, 0, 0.5));\n  background-repeat: repeat-x; }\n  .bg-gradient-black:hover, .bg-gradient-black:active {\n    color: #fff; }\n\n.gradient-light-black {\n  background: linear-gradient(30deg, #000000 0%, 100%);\n  color: #fff; }\n  .gradient-light-black:hover, .gradient-light-black:active {\n    color: #fff; }\n\n.bg-gradient-dark {\n  background: #640064;\n  color: #fff;\n  background-image: linear-gradient(30deg, #1e1e1e, rgba(30, 30, 30, 0.5));\n  background-repeat: repeat-x; }\n  .bg-gradient-dark:hover, .bg-gradient-dark:active {\n    color: #fff; }\n\n.gradient-light-dark {\n  background: linear-gradient(30deg, #1e1e1e 0%, 100%);\n  color: #fff; }\n  .gradient-light-dark:hover, .gradient-light-dark:active {\n    color: #fff; }\n\n.bg-gradient-light {\n  background: #640064;\n  color: #fff;\n  background-image: linear-gradient(30deg, #babfc7, rgba(186, 191, 199, 0.5));\n  background-repeat: repeat-x; }\n  .bg-gradient-light:hover, .bg-gradient-light:active {\n    color: #fff; }\n\n.gradient-light-light {\n  background: linear-gradient(30deg, #babfc7 0%, 100%);\n  color: #fff; }\n  .gradient-light-light:hover, .gradient-light-light:active {\n    color: #fff; }\n\n.bg-gradient-primary {\n  background: #640064;\n  color: #fff;\n  background-image: linear-gradient(30deg, #7367f0, rgba(115, 103, 240, 0.5));\n  background-repeat: repeat-x; }\n  .bg-gradient-primary:hover, .bg-gradient-primary:active {\n    color: #fff; }\n\n.gradient-light-primary {\n  background: linear-gradient(30deg, #7367f0 0%, #ce9ffc 100%);\n  color: #fff; }\n  .gradient-light-primary:hover, .gradient-light-primary:active {\n    color: #fff; }\n\n.bg-gradient-secondary {\n  background: #640064;\n  color: #fff;\n  background-image: linear-gradient(30deg, #b8c2cc, rgba(184, 194, 204, 0.5));\n  background-repeat: repeat-x; }\n  .bg-gradient-secondary:hover, .bg-gradient-secondary:active {\n    color: #fff; }\n\n.gradient-light-secondary {\n  background: linear-gradient(30deg, #b8c2cc 0%, #dcdeec 100%);\n  color: #fff; }\n  .gradient-light-secondary:hover, .gradient-light-secondary:active {\n    color: #fff; }\n\n.bg-gradient-success {\n  background: #0064fa;\n  color: #fff;\n  background-image: linear-gradient(30deg, #28c76f, rgba(40, 199, 111, 0.5));\n  background-repeat: repeat-x; }\n  .bg-gradient-success:hover, .bg-gradient-success:active {\n    color: #fff; }\n\n.gradient-light-success {\n  background: linear-gradient(30deg, #28c76f 0%, #4ae9d3 100%);\n  color: #fff; }\n  .gradient-light-success:hover, .gradient-light-success:active {\n    color: #fff; }\n\n.bg-gradient-info {\n  background: #640064;\n  color: #fff;\n  background-image: linear-gradient(30deg, #00cfe8, rgba(0, 207, 232, 0.5));\n  background-repeat: repeat-x; }\n  .bg-gradient-info:hover, .bg-gradient-info:active {\n    color: #fff; }\n\n.gradient-light-info {\n  background: linear-gradient(30deg, #00cfe8 0%, #2d91ff 100%);\n  color: #fff; }\n  .gradient-light-info:hover, .gradient-light-info:active {\n    color: #fff; }\n\n.bg-gradient-warning {\n  background: #fafafa;\n  color: #fff;\n  background-image: linear-gradient(30deg, #ff9f43, rgba(255, 159, 67, 0.5));\n  background-repeat: repeat-x; }\n  .bg-gradient-warning:hover, .bg-gradient-warning:active {\n    color: #fff; }\n\n.gradient-light-warning {\n  background: linear-gradient(30deg, #ff9f43 0%, #fff487 100%);\n  color: #fff; }\n  .gradient-light-warning:hover, .gradient-light-warning:active {\n    color: #fff; }\n\n.bg-gradient-danger {\n  background: #640064;\n  color: #fff;\n  background-image: linear-gradient(30deg, #ea5455, rgba(234, 84, 85, 0.5));\n  background-repeat: repeat-x; }\n  .bg-gradient-danger:hover, .bg-gradient-danger:active {\n    color: #fff; }\n\n.gradient-light-danger {\n  background: linear-gradient(30deg, #ea5455 0%, #f9b789 100%);\n  color: #fff; }\n  .gradient-light-danger:hover, .gradient-light-danger:active {\n    color: #fff; }\n"
  },
  {
    "path": "public/backend/css/core/colors/palette-noui.css",
    "content": ".slider-white .noUi-connect {\n  background: #FFFFFF !important; }\n\n.slider-white.noUi-connect {\n  background: #FFFFFF !important; }\n\n.slider-white .noUi-handle {\n  border-color: #FFFFFF !important; }\n\n.slider-white.circle-filled .noUi-handle, .slider-white.square .noUi-handle {\n  background: #FFFFFF !important; }\n\n.slider-black .noUi-connect {\n  background: #000000 !important; }\n\n.slider-black.noUi-connect {\n  background: #000000 !important; }\n\n.slider-black .noUi-handle {\n  border-color: #000000 !important; }\n\n.slider-black.circle-filled .noUi-handle, .slider-black.square .noUi-handle {\n  background: #000000 !important; }\n\n.slider-dark .noUi-connect {\n  background: #1e1e1e !important; }\n\n.slider-dark.noUi-connect {\n  background: #1e1e1e !important; }\n\n.slider-dark .noUi-handle {\n  border-color: #1e1e1e !important; }\n\n.slider-dark.circle-filled .noUi-handle, .slider-dark.square .noUi-handle {\n  background: #1e1e1e !important; }\n\n.slider-light .noUi-connect {\n  background: #babfc7 !important; }\n\n.slider-light.noUi-connect {\n  background: #babfc7 !important; }\n\n.slider-light .noUi-handle {\n  border-color: #babfc7 !important; }\n\n.slider-light.circle-filled .noUi-handle, .slider-light.square .noUi-handle {\n  background: #babfc7 !important; }\n\n.slider-primary .noUi-connect {\n  background: #7367f0 !important; }\n\n.slider-primary.noUi-connect {\n  background: #7367f0 !important; }\n\n.slider-primary .noUi-handle {\n  border-color: #7367f0 !important; }\n\n.slider-primary.circle-filled .noUi-handle, .slider-primary.square .noUi-handle {\n  background: #7367f0 !important; }\n\n.slider-secondary .noUi-connect {\n  background: #b8c2cc !important; }\n\n.slider-secondary.noUi-connect {\n  background: #b8c2cc !important; }\n\n.slider-secondary .noUi-handle {\n  border-color: #b8c2cc !important; }\n\n.slider-secondary.circle-filled .noUi-handle, .slider-secondary.square .noUi-handle {\n  background: #b8c2cc !important; }\n\n.slider-success .noUi-connect {\n  background: #28c76f !important; }\n\n.slider-success.noUi-connect {\n  background: #28c76f !important; }\n\n.slider-success .noUi-handle {\n  border-color: #28c76f !important; }\n\n.slider-success.circle-filled .noUi-handle, .slider-success.square .noUi-handle {\n  background: #28c76f !important; }\n\n.slider-info .noUi-connect {\n  background: #00cfe8 !important; }\n\n.slider-info.noUi-connect {\n  background: #00cfe8 !important; }\n\n.slider-info .noUi-handle {\n  border-color: #00cfe8 !important; }\n\n.slider-info.circle-filled .noUi-handle, .slider-info.square .noUi-handle {\n  background: #00cfe8 !important; }\n\n.slider-warning .noUi-connect {\n  background: #ff9f43 !important; }\n\n.slider-warning.noUi-connect {\n  background: #ff9f43 !important; }\n\n.slider-warning .noUi-handle {\n  border-color: #ff9f43 !important; }\n\n.slider-warning.circle-filled .noUi-handle, .slider-warning.square .noUi-handle {\n  background: #ff9f43 !important; }\n\n.slider-danger .noUi-connect {\n  background: #ea5455 !important; }\n\n.slider-danger.noUi-connect {\n  background: #ea5455 !important; }\n\n.slider-danger .noUi-handle {\n  border-color: #ea5455 !important; }\n\n.slider-danger.circle-filled .noUi-handle, .slider-danger.square .noUi-handle {\n  background: #ea5455 !important; }\n"
  },
  {
    "path": "public/backend/css/core/colors/palette-variables.css",
    "content": ""
  },
  {
    "path": "public/backend/css/core/menu/menu-types/horizontal-menu.css",
    "content": "/*=========================================================================================\n\tFile Name: horizontal-menu.scss\n\tDescription: A classic horizontal menu for easy navingation & support all devices.\n\tIt support light & dark version, filpped layout, right side icons, borders menu for\n\titem seperation.\n\t----------------------------------------------------------------------------------------\n\tItem Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard TemplateTheme\n\tAuthor: PIXINVENT\n\tAuthor URL: http://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n/*========================================================\n        DARK LAYOUT\n=========================================================*/\n.horizontal-menu .content {\n  margin-left: 0; }\n  .horizontal-menu .content .content-wrapper {\n    margin-top: 0 !important; }\n\n.horizontal-menu footer {\n  position: static; }\n\n.horizontal-menu.navbar-floating:not(.blank-page) .app-content {\n  padding-top: 9.75rem; }\n\n.horizontal-menu.navbar-floating .horizontal-menu-wrapper {\n  background: linear-gradient(to bottom, rgba(248, 248, 248, 0.95) 44%, rgba(248, 248, 248, 0.46) 73%, rgba(255, 255, 255, 0) 100%);\n  background-repeat: repeat-x; }\n  .horizontal-menu.navbar-floating .horizontal-menu-wrapper .navbar-horizontal.floating-nav {\n    margin: 1.3rem 2.2rem 0; }\n\n.horizontal-menu.dark-layout .header-navbar {\n  background: inherit !important; }\n\n.horizontal-menu.dark-layout .horizontal-menu-wrapper {\n  background: linear-gradient(to bottom, rgba(37, 43, 71, 0.76) 44%, rgba(56, 53, 53, 0.46) 73%, rgba(255, 255, 255, 0) 100%); }\n  .horizontal-menu.dark-layout .horizontal-menu-wrapper .header-navbar {\n    background: #10163a !important; }\n    .horizontal-menu.dark-layout .horizontal-menu-wrapper .header-navbar.navbar-horizontal ul#main-menu-navigation > li:hover:not(.active) > a {\n      background: #262c49; }\n\n.horizontal-menu.semi-dark-layout .header-navbar {\n  background: linear-gradient(to bottom, rgba(37, 43, 71, 0.76) 44%, rgba(56, 53, 53, 0.46) 73%, rgba(255, 255, 255, 0) 100%); }\n\n.horizontal-menu.semi-dark-layout .horizontal-menu-wrapper .header-navbar {\n  background: #10163a !important; }\n  .horizontal-menu.semi-dark-layout .horizontal-menu-wrapper .header-navbar.navbar-horizontal ul#main-menu-navigation > li:hover > a {\n    background: #262c49; }\n  .horizontal-menu.semi-dark-layout .horizontal-menu-wrapper .header-navbar i, .horizontal-menu.semi-dark-layout .horizontal-menu-wrapper .header-navbar span, .horizontal-menu.semi-dark-layout .horizontal-menu-wrapper .header-navbar .nav-link {\n    color: #c2c6dc; }\n\n.horizontal-menu.semi-dark-layout .horizontal-menu-wrapper .dropdown-menu {\n  background-color: #262c49; }\n\n.horizontal-menu.navbar-sticky .app-content {\n  padding-top: 8.5rem; }\n\n.horizontal-menu.navbar-sticky .header-navbar {\n  background-color: #f8f8f8; }\n\n.horizontal-menu.navbar-sticky .horizontal-menu-wrapper .navbar-horizontal.header-navbar.fixed-top {\n  left: 0;\n  top: 62px;\n  background-color: #fff; }\n\n.horizontal-menu.navbar-static .app-content {\n  padding-top: 2.5rem; }\n\n.horizontal-menu.navbar-static .header-navbar {\n  background-color: #f8f8f8; }\n  .horizontal-menu.navbar-static .header-navbar .navbar-wrapper {\n    width: 100%; }\n\n.horizontal-menu.navbar-static .horizontal-menu-wrapper {\n  position: relative; }\n  .horizontal-menu.navbar-static .horizontal-menu-wrapper .navbar-horizontal.header-navbar {\n    background: #fff; }\n    .horizontal-menu.navbar-static .horizontal-menu-wrapper .navbar-horizontal.header-navbar.navbar-static-top {\n      position: static;\n      background: #fff;\n      left: 0; }\n\n.horizontal-menu .horizontal-menu-wrapper {\n  position: fixed;\n  top: 62px;\n  z-index: 990;\n  width: 100%;\n  height: 99px; }\n  .horizontal-menu .horizontal-menu-wrapper .header-navbar .navbar-container {\n    padding-left: 1rem;\n    padding-right: 1rem;\n    width: 100%; }\n  .horizontal-menu .horizontal-menu-wrapper .header-navbar .navbar-header {\n    display: none; }\n\n.horizontal-menu .header-navbar {\n  background: #fff;\n  z-index: 999 !important;\n  line-height: 1;\n  min-height: auto; }\n  .horizontal-menu .header-navbar.navbar-horizontal.floating-nav {\n    width: calc(100vw - (100vw - 100%) - calc(2.2rem * 2));\n    background: #fff; }\n  .horizontal-menu .header-navbar .navbar-container {\n    padding-left: 2.2rem;\n    padding-right: calc(2.2rem - 1rem);\n    border-radius: 0.5rem; }\n  .horizontal-menu .header-navbar.navbar-fixed {\n    position: fixed;\n    width: 100%; }\n  .horizontal-menu .header-navbar.navbar-brand-center .navbar-header {\n    position: absolute;\n    left: 50%;\n    margin-left: -65px;\n    padding: 0;\n    z-index: 1000; }\n    .horizontal-menu .header-navbar.navbar-brand-center .navbar-header .navbar-brand {\n      display: flex;\n      align-items: center;\n      margin-right: 0; }\n      .horizontal-menu .header-navbar.navbar-brand-center .navbar-header .navbar-brand .brand-logo {\n        background: url(\"../../../../../app-assets/images/logo/vuexy-logo.png\") no-repeat;\n        background-position: -65px -54px;\n        height: 24px;\n        width: 35px; }\n      .horizontal-menu .header-navbar.navbar-brand-center .navbar-header .navbar-brand .brand-text {\n        color: #fff;\n        padding-left: 1rem;\n        letter-spacing: 0.01rem;\n        font-size: 1.57rem; }\n  .horizontal-menu .header-navbar.navbar-horizontal .nav-link.dropdown-toggle::after {\n    left: 0.4rem; }\n  .horizontal-menu .header-navbar.navbar-horizontal .dropdown-menu::before {\n    display: none; }\n  .horizontal-menu .header-navbar.navbar-horizontal .dropdown-menu {\n    min-width: 215px;\n    border: none;\n    margin-top: 0;\n    min-height: 52px; }\n    .horizontal-menu .header-navbar.navbar-horizontal .dropdown-menu .disabled {\n      pointer-events: none !important; }\n      .horizontal-menu .header-navbar.navbar-horizontal .dropdown-menu .disabled a {\n        color: #b8c2cc; }\n    .horizontal-menu .header-navbar.navbar-horizontal .dropdown-menu .dropdown-toggle::after {\n      left: auto;\n      position: absolute;\n      top: 50%;\n      margin-top: -7px;\n      right: 1rem;\n      content: \"\\e844\" !important; }\n    .horizontal-menu .header-navbar.navbar-horizontal .dropdown-menu .dropdown-item {\n      font-size: 1rem;\n      padding: 0.965rem 1.428rem;\n      display: flex;\n      align-items: center; }\n    .horizontal-menu .header-navbar.navbar-horizontal .dropdown-menu .dropdown-submenu {\n      position: relative; }\n      .horizontal-menu .header-navbar.navbar-horizontal .dropdown-menu .dropdown-submenu.openLeft .dropdown-menu {\n        left: auto;\n        right: 100%; }\n      .horizontal-menu .header-navbar.navbar-horizontal .dropdown-menu .dropdown-submenu.show {\n        background: #f8f8f8; }\n      .horizontal-menu .header-navbar.navbar-horizontal .dropdown-menu .dropdown-submenu > .dropdown-menu {\n        position: absolute;\n        top: 0 !important;\n        left: 100% !important; }\n        .horizontal-menu .header-navbar.navbar-horizontal .dropdown-menu .dropdown-submenu > .dropdown-menu i {\n          font-size: 0.75rem !important; }\n  .horizontal-menu .header-navbar.navbar-horizontal ul#main-menu-navigation > li {\n    padding-top: 0.965rem;\n    padding-bottom: 0.965rem; }\n    .horizontal-menu .header-navbar.navbar-horizontal ul#main-menu-navigation > li > .dropdown-menu {\n      margin-top: 0.75rem; }\n      .horizontal-menu .header-navbar.navbar-horizontal ul#main-menu-navigation > li > .dropdown-menu a {\n        transition: padding 0.35s ease 0s !important; }\n        .horizontal-menu .header-navbar.navbar-horizontal ul#main-menu-navigation > li > .dropdown-menu a:hover {\n          padding-left: 25px;\n          transition: padding 0.35s ease 0s !important;\n          background-color: transparent;\n          color: #626262; }\n      .horizontal-menu .header-navbar.navbar-horizontal ul#main-menu-navigation > li > .dropdown-menu .active > a {\n        background: #f8f8f8;\n        color: #7367f0;\n        font-weight: 500; }\n      .horizontal-menu .header-navbar.navbar-horizontal ul#main-menu-navigation > li > .dropdown-menu .open.active > a {\n        color: #626262;\n        font-weight: normal; }\n    .horizontal-menu .header-navbar.navbar-horizontal ul#main-menu-navigation > li i {\n      font-size: 1.11rem;\n      margin-right: 0.75rem; }\n    .horizontal-menu .header-navbar.navbar-horizontal ul#main-menu-navigation > li > a {\n      padding: 0.75rem 1.25rem 0.75rem 1.25rem;\n      display: flex;\n      margin-right: 0.5rem; }\n    .horizontal-menu .header-navbar.navbar-horizontal ul#main-menu-navigation > li:hover > a {\n      background: #f8f8f8;\n      border-radius: 4px; }\n    .horizontal-menu .header-navbar.navbar-horizontal ul#main-menu-navigation > li.active > a {\n      background: linear-gradient(118deg, #7367f0, rgba(115, 103, 240, 0.7));\n      box-shadow: 0px 0px 6px 1px rgba(115, 103, 240, 0.6);\n      color: #fff;\n      border-radius: 4px; }\n\n.horizontal-menu.menu-collapsed #main-menu-navigation .nav-item > a span {\n  display: none; }\n\n.horizontal-menu .navigation-header {\n  font-family: inherit;\n  color: #929292;\n  padding: 8px 20px;\n  font-size: 1rem;\n  text-transform: uppercase; }\n\n.horizontal-menu .navbar-dark .nav-item.active > a {\n  border-bottom: 2px solid #7367f0;\n  background-color: #313c50; }\n\n.horizontal-menu .content.app-content .content-area-wrapper {\n  margin-top: 2.2rem; }\n  .horizontal-menu .content.app-content .content-area-wrapper .content-wrapper {\n    height: calc(100vh - 16rem);\n    height: calc(var(--vh, 1vh) * 100 - 16rem); }\n\n.horizontal-menu.chat-application .sidebar-content,\n.horizontal-menu.email-application .content-area-wrapper .sidebar .email-app-sidebar,\n.horizontal-menu.todo-application .content-area-wrapper .sidebar .todo-sidebar {\n  height: calc(100vh - 16rem);\n  height: calc(var(--vh, 1vh) * 100 - 16rem); }\n\n.horizontal-menu.todo-application .content-area-wrapper .content-right .todo-task-list {\n  height: calc(100vh - 19.5rem);\n  height: calc(var(--vh, 1vh) * 100 - 19.5rem); }\n\n.horizontal-menu.email-application .app-content .content-area-wrapper .email-user-list {\n  height: calc(100vh - 23.3rem);\n  height: calc(var(--vh, 1vh) * 100 - 23.3rem); }\n\n.horizontal-menu.chat-application .user-profile-sidebar {\n  height: calc(100vh - 16.1rem);\n  height: calc(var(--vh, 1vh) * 100 - 16.1rem);\n  bottom: 4.1rem; }\n\n.horizontal-menu.chat-application .chat-profile-sidebar {\n  height: calc(100vh - 16rem);\n  height: calc(var(--vh, 1vh) * 100 - 16rem); }\n\n.horizontal-menu.chat-application .chat-app-window .user-chats {\n  height: calc(100vh - 26.5rem);\n  height: calc(var(--vh, 1vh) * 100 - 26.5rem); }\n\n@media (max-width: 1199.98px) {\n  body.horizontal-layout.horizontal-menu .horizontal-menu-wrapper .header-navbar {\n    display: none; }\n  body.horizontal-layout .header-navbar {\n    background: #fff; }\n  body.horizontal-layout .content .content-wrapper {\n    margin-top: 5rem; } }\n\n/*=========================================================================================\n    File Name: vertical-overlay-menu.scss\n    Description: A overlay style vertical menu with show and hide support. It support\n    light & dark version, filpped layout, right side icons, native scroll and borders menu\n    item seperation.\n    ----------------------------------------------------------------------------------------\n    Item Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n    Author: PIXINVENT\n    Author URL: http://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n/*========================================================\n        DARK LAYOUT\n=========================================================*/\n.vertical-overlay-menu .content {\n  margin-left: 0; }\n\n.vertical-overlay-menu .navbar .navbar-header {\n  float: left;\n  width: 260px; }\n\n.vertical-overlay-menu .navbar.header-navbar.floating-nav {\n  width: calc(100vw - (100vw - 100%) - calc(2.2rem * 2)); }\n\n.vertical-overlay-menu .main-menu, .vertical-overlay-menu.menu-hide .main-menu {\n  opacity: 0;\n  transform: translate3d(0, 0, 0);\n  transition: width .25s,opacity .25s,transform .25s;\n  width: 260px;\n  left: -260px; }\n  .vertical-overlay-menu .main-menu .navigation .navigation-header .icon-minus {\n    display: none; }\n  .vertical-overlay-menu .main-menu .navigation > li > a > i {\n    margin-right: 14px;\n    float: left; }\n    .vertical-overlay-menu .main-menu .navigation > li > a > i:before {\n      transition: 200ms ease all;\n      font-size: 1.429rem; }\n  .vertical-overlay-menu .main-menu .navigation li.has-sub > a:not(.mm-next):after {\n    content: \"\\f105\";\n    font-family: 'FontAwesome';\n    font-size: 1rem;\n    display: inline-block;\n    position: absolute;\n    right: 25px;\n    top: 10px;\n    transform: rotate(0deg);\n    transition: -webkit-transform 0.2s ease-in-out; }\n  .vertical-overlay-menu .main-menu .navigation li.open > a:not(.mm-next):after {\n    transform: rotate(90deg); }\n  .vertical-overlay-menu .main-menu .navigation li a i {\n    font-size: 1.1rem; }\n  .vertical-overlay-menu .main-menu .main-menu-footer {\n    bottom: 55px; }\n  .vertical-overlay-menu .main-menu .main-menu-footer {\n    width: 260px; }\n\n.vertical-overlay-menu.menu-open .main-menu {\n  opacity: 1;\n  transform: translate3d(260px, 0, 0);\n  transition: width .25s,opacity .25s,transform .25s; }\n\n.vertical-overlay-menu.menu-flipped .main-menu {\n  right: -260px;\n  left: inherit; }\n\n.vertical-overlay-menu.menu-flipped .navbar .navbar-container {\n  margin: 0;\n  margin-right: 260px; }\n\n.vertical-overlay-menu.menu-flipped .navbar .navbar-header {\n  float: right; }\n\n.vertical-overlay-menu.menu-flipped.menu-open .main-menu {\n  transform: translate3d(-260px, 0, 0); }\n\n@media (max-width: 991.98px) {\n  .vertical-overlay-menu .main-menu .main-menu-footer {\n    bottom: 0px; } }\n"
  },
  {
    "path": "public/backend/css/core/menu/menu-types/vertical-menu.css",
    "content": "/*=========================================================================================\n    File Name: vertical-menu.scss\n    Description: A calssic vertical modern style menu with expand and collops support. It support\n    light & dark version, filpped layout, right side icons, native scroll and borders menu\n    item seperation.\n    ----------------------------------------------------------------------------------------\n    Item Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n    Author: PIXINVENT\n    Author URL: http://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n/*========================================================\n        DARK LAYOUT\n=========================================================*/\nbody.vertical-layout.vertical-menu-modern .main-menu .navigation > li > a > i {\n  font-size: 1.2rem;\n  margin-right: 1rem;\n  float: left; }\n\nbody.vertical-layout.vertical-menu-modern .main-menu .navigation .menu-content > li > a > i {\n  margin-right: 1.38rem;\n  font-size: 0.8rem; }\n\nbody.vertical-layout.vertical-menu-modern .toggle-icon {\n  margin-right: 0.425rem; }\n  body.vertical-layout.vertical-menu-modern .toggle-icon:focus {\n    outline: none; }\n\n@media (min-width: 576px) {\n  body.vertical-layout.vertical-menu-modern.menu-flipped .main-menu {\n    right: 0; } }\n\nbody.vertical-layout.vertical-menu-modern .navbar .navbar-brand {\n  white-space: nowrap; }\n\nbody.vertical-layout.vertical-menu-modern .navbar .navbar-header .nav-toggle {\n  position: absolute;\n  right: 0; }\n\nbody.vertical-layout.vertical-menu-modern .main-menu {\n  transition: 0.4s cubic-bezier(0.25, 0.8, 0.25, 1);\n  transform: translate3d(0, 0, 0);\n  backface-visibility: hidden; }\n\nbody.vertical-layout.vertical-menu-modern.menu-expanded .navbar .navbar-header {\n  float: left;\n  width: 260px; }\n\nbody.vertical-layout.vertical-menu-modern.menu-expanded .navbar .navbar-brand .brand-text {\n  animation: 0.3s cubic-bezier(0.25, 0.8, 0.25, 1) 0s normal forwards 1 fadein; }\n\nbody.vertical-layout.vertical-menu-modern.menu-expanded .main-menu {\n  width: 260px; }\n  body.vertical-layout.vertical-menu-modern.menu-expanded .main-menu .navigation .navigation-header .icon-minus {\n    display: none; }\n  body.vertical-layout.vertical-menu-modern.menu-expanded .main-menu .navigation > li > a > i {\n    margin-right: 1rem;\n    float: left; }\n    body.vertical-layout.vertical-menu-modern.menu-expanded .main-menu .navigation > li > a > i:before {\n      font-size: 1.429rem; }\n  body.vertical-layout.vertical-menu-modern.menu-expanded .main-menu .navigation > li > a > span {\n    animation: 0.3s cubic-bezier(0.25, 0.8, 0.25, 1) 0s normal forwards 1 fadein; }\n    body.vertical-layout.vertical-menu-modern.menu-expanded .main-menu .navigation > li > a > span.badge {\n      position: absolute;\n      right: 20px; }\n  body.vertical-layout.vertical-menu-modern.menu-expanded .main-menu .navigation li.has-sub > a:not(.mm-next):after {\n    content: \"\\f105\";\n    font-family: 'FontAwesome';\n    font-size: 1.1rem;\n    display: inline-block;\n    position: absolute;\n    right: 25px;\n    top: 10px;\n    transform: rotate(0deg);\n    transition: -webkit-transform 0.2s ease-in-out; }\n  body.vertical-layout.vertical-menu-modern.menu-expanded .main-menu .navigation li.open > a:not(.mm-next):after {\n    transform: rotate(90deg); }\n  body.vertical-layout.vertical-menu-modern.menu-expanded .main-menu .main-menu-footer {\n    width: 260px; }\n\nbody.vertical-layout.vertical-menu-modern.menu-expanded .footer {\n  margin-left: 260px; }\n\nbody.vertical-layout.vertical-menu-modern.menu-collapsed .navbar .navbar-header {\n  float: left;\n  width: 80px; }\n  body.vertical-layout.vertical-menu-modern.menu-collapsed .navbar .navbar-header .modern-nav-toggle {\n    display: none; }\n  body.vertical-layout.vertical-menu-modern.menu-collapsed .navbar .navbar-header.expanded {\n    width: 260px;\n    z-index: 1000; }\n    body.vertical-layout.vertical-menu-modern.menu-collapsed .navbar .navbar-header.expanded .modern-nav-toggle {\n      display: block; }\n    body.vertical-layout.vertical-menu-modern.menu-collapsed .navbar .navbar-header.expanded .navbar-brand .brand-text {\n      animation: 0.3s cubic-bezier(0.25, 0.8, 0.25, 1) 0s normal forwards 1 fadein; }\n  body.vertical-layout.vertical-menu-modern.menu-collapsed .navbar .navbar-header .navbar-brand .brand-text {\n    animation: 0.3s cubic-bezier(0.25, 0.8, 0.25, 1) 0s normal forwards 1 fadeout; }\n\nbody.vertical-layout.vertical-menu-modern.menu-collapsed .navbar .navbar-brand {\n  padding: 15px 0px; }\n\nbody.vertical-layout.vertical-menu-modern.menu-collapsed .navbar.fixed-top {\n  left: 80px; }\n\nbody.vertical-layout.vertical-menu-modern.menu-collapsed .main-menu {\n  width: 80px;\n  transition: 300ms ease all;\n  backface-visibility: hidden;\n  transform: translate3d(0, 0, 0); }\n  body.vertical-layout.vertical-menu-modern.menu-collapsed .main-menu .main-menu-footer {\n    width: 80px; }\n  body.vertical-layout.vertical-menu-modern.menu-collapsed .main-menu .main-menu-footer,\n  body.vertical-layout.vertical-menu-modern.menu-collapsed .main-menu .main-menu-header .media-body .media-heading,\n  body.vertical-layout.vertical-menu-modern.menu-collapsed .main-menu .main-menu-header .media-body .text-muted,\n  body.vertical-layout.vertical-menu-modern.menu-collapsed .main-menu .main-menu-header .media-right {\n    display: none; }\n  body.vertical-layout.vertical-menu-modern.menu-collapsed .main-menu .main-menu-header .media-body {\n    opacity: 0; }\n  body.vertical-layout.vertical-menu-modern.menu-collapsed .main-menu .navbar-header .brand-text,\n  body.vertical-layout.vertical-menu-modern.menu-collapsed .main-menu .modern-nav-toggle {\n    display: none; }\n  body.vertical-layout.vertical-menu-modern.menu-collapsed .main-menu .user-content {\n    padding: 20px 10px; }\n  body.vertical-layout.vertical-menu-modern.menu-collapsed .main-menu:not(.expanded) .navigation-header {\n    margin: 0; }\n  body.vertical-layout.vertical-menu-modern.menu-collapsed .main-menu:not(.expanded) .navigation li a {\n    line-height: 1; }\n  body.vertical-layout.vertical-menu-modern.menu-collapsed .main-menu:not(.expanded) .navigation li:last-child {\n    margin-bottom: 1.25rem !important; }\n  body.vertical-layout.vertical-menu-modern.menu-collapsed .main-menu:not(.expanded) .navigation li.active a {\n    background: whitesmoke;\n    box-shadow: none;\n    color: #565656; }\n  body.vertical-layout.vertical-menu-modern.menu-collapsed .main-menu .navigation {\n    overflow: visible; }\n    body.vertical-layout.vertical-menu-modern.menu-collapsed .main-menu .navigation > li.navigation-header .icon-minus {\n      display: block;\n      font-size: 1.2rem; }\n    body.vertical-layout.vertical-menu-modern.menu-collapsed .main-menu .navigation > li.navigation-header span {\n      display: none; }\n    body.vertical-layout.vertical-menu-modern.menu-collapsed .main-menu .navigation > li > a {\n      text-overflow: inherit; }\n      body.vertical-layout.vertical-menu-modern.menu-collapsed .main-menu .navigation > li > a > span {\n        animation: 0.3s cubic-bezier(0.25, 0.8, 0.25, 1) 0s normal forwards 1 fadeout; }\n        body.vertical-layout.vertical-menu-modern.menu-collapsed .main-menu .navigation > li > a > span.badge {\n          float: none !important; }\n      body.vertical-layout.vertical-menu-modern.menu-collapsed .main-menu .navigation > li > a i {\n        margin-right: 1rem;\n        float: left; }\n        body.vertical-layout.vertical-menu-modern.menu-collapsed .main-menu .navigation > li > a i:before {\n          font-size: 1.429rem; }\n  body.vertical-layout.vertical-menu-modern.menu-collapsed .main-menu .mTSWrapper {\n    overflow: visible; }\n  body.vertical-layout.vertical-menu-modern.menu-collapsed .main-menu.expanded {\n    width: 260px; }\n    body.vertical-layout.vertical-menu-modern.menu-collapsed .main-menu.expanded .navigation > li.navigation-header .icon-minus {\n      display: none; }\n    body.vertical-layout.vertical-menu-modern.menu-collapsed .main-menu.expanded .navigation > li.navigation-header span {\n      display: block; }\n    body.vertical-layout.vertical-menu-modern.menu-collapsed .main-menu.expanded .navigation > li > a > span {\n      animation: 0.3s cubic-bezier(0.25, 0.8, 0.25, 1) 0s normal forwards 1 fadein; }\n      body.vertical-layout.vertical-menu-modern.menu-collapsed .main-menu.expanded .navigation > li > a > span.badge {\n        position: absolute;\n        right: 20px; }\n    body.vertical-layout.vertical-menu-modern.menu-collapsed .main-menu.expanded .navigation li.has-sub > a:not(.mm-next):after {\n      content: \"\\f105\";\n      font-family: 'FontAwesome';\n      font-size: 1rem;\n      display: inline-block;\n      position: absolute;\n      right: 25px;\n      top: 10px;\n      transform: rotate(0deg);\n      transition: -webkit-transform 0.2s ease-in-out; }\n    body.vertical-layout.vertical-menu-modern.menu-collapsed .main-menu.expanded .navigation li.open > a:not(.mm-next):after {\n      transform: rotate(90deg); }\n    body.vertical-layout.vertical-menu-modern.menu-collapsed .main-menu.expanded .navbar-header .brand-text {\n      display: inline; }\n    body.vertical-layout.vertical-menu-modern.menu-collapsed .main-menu.expanded .modern-nav-toggle {\n      display: block; }\n\nbody.vertical-layout.vertical-menu-modern.menu-collapsed .app-content,\nbody.vertical-layout.vertical-menu-modern.menu-collapsed .footer {\n  margin-left: 80px; }\n\nbody.vertical-layout.vertical-menu-modern.menu-collapsed .header-navbar.floating-nav {\n  width: calc(100vw - (100vw - 100%) - 4.4rem - 80px); }\n\nbody.vertical-layout.vertical-menu-modern.menu-collapsed .header-navbar.navbar-static-top {\n  width: calc(100vw - (100vw - 100%) - 80px);\n  left: 80px; }\n\nbody.vertical-layout.vertical-menu-modern.menu-collapsed.menu-flipped .content {\n  margin: 0;\n  margin-right: 80px; }\n\n@media (min-width: 576px) {\n  body.vertical-layout.vertical-menu-modern.menu-collapsed.menu-flipped .main-menu {\n    right: 0; }\n    body.vertical-layout.vertical-menu-modern.menu-collapsed.menu-flipped .main-menu span.menu-title {\n      right: 80px; }\n    body.vertical-layout.vertical-menu-modern.menu-collapsed.menu-flipped .main-menu ul.menu-content {\n      right: 80px;\n      left: inherit; } }\n\nbody.vertical-layout.vertical-menu-modern.menu-collapsed.menu-flipped .navbar .navbar-header {\n  float: right; }\n\nbody.vertical-layout.vertical-menu-modern.menu-collapsed.menu-flipped .navbar .navbar-container {\n  margin: 0;\n  margin-right: 80px; }\n\nbody.vertical-layout.vertical-menu-modern.menu-collapsed.menu-flipped .footer {\n  margin: 0;\n  margin-right: 80px; }\n\n@media (min-width: 992px) {\n  body.vertical-layout.vertical-menu-modern .main-menu {\n    width: 260px; }\n    body.vertical-layout.vertical-menu-modern .main-menu .navigation li.navigation-header .icon-minus {\n      display: none; }\n  body.vertical-layout.vertical-menu-modern .navbar .navbar-header {\n    width: 260px; }\n  body.vertical-layout.vertical-menu-modern .footer {\n    margin-left: 260px; }\n  body.vertical-layout.vertical-menu-modern.menu-flipped .content {\n    margin: 0;\n    margin-right: 260px; }\n  body.vertical-layout.vertical-menu-modern.menu-flipped .navbar .navbar-header {\n    float: right; }\n  body.vertical-layout.vertical-menu-modern.menu-flipped .navbar .navbar-container {\n    margin: 0;\n    margin-right: 260px; }\n  body.vertical-layout.vertical-menu-modern.menu-flipped .footer {\n    margin: 0;\n    margin-right: 260px; } }\n\n@media (max-width: 1199.98px) {\n  body.vertical-layout.vertical-menu-modern .main-menu {\n    width: 0;\n    opacity: 0;\n    left: -260px; }\n    body.vertical-layout.vertical-menu-modern .main-menu .navigation > li > a > span {\n      animation: 0.1s cubic-bezier(0.25, 0.8, 0.25, 1) 0s normal forwards 1 fadeout; }\n    body.vertical-layout.vertical-menu-modern .main-menu .navigation li.navigation-header span {\n      display: none; }\n  body.vertical-layout.vertical-menu-modern .navbar .navbar-header {\n    width: 0; }\n  body.vertical-layout.vertical-menu-modern .content,\n  body.vertical-layout.vertical-menu-modern .footer {\n    margin-left: 0; }\n  body.vertical-layout.vertical-menu-modern.menu-collapsed .app-content,\n  body.vertical-layout.vertical-menu-modern.menu-collapsed .footer {\n    margin-left: 0; }\n  body.vertical-layout.vertical-menu-modern.menu-collapsed .main-menu {\n    width: 0; } }\n\n@media (max-width: 767.98px) {\n  body.vertical-layout.vertical-menu-modern .main-menu {\n    width: 0; }\n  body.vertical-layout.vertical-menu-modern .navbar .navbar-header {\n    width: 0; }\n  body.vertical-layout.vertical-menu-modern .content,\n  body.vertical-layout.vertical-menu-modern .footer {\n    margin-left: 0; } }\n\n@keyframes fadein {\n  from {\n    opacity: 0; }\n  to {\n    opacity: 1; } }\n\n@keyframes fadeout {\n  from {\n    opacity: 1; }\n  to {\n    opacity: 0; } }\n\n@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {\n  body.vertical-menu-modern.vertical-layout .main-menu .navigation > li > a > span {\n    animation: none; } }\n\n/*=========================================================================================\n    File Name: vertical-overlay-menu.scss\n    Description: A overlay style vertical menu with show and hide support. It support\n    light & dark version, filpped layout, right side icons, native scroll and borders menu\n    item seperation.\n    ----------------------------------------------------------------------------------------\n    Item Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n    Author: PIXINVENT\n    Author URL: http://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n/*========================================================\n        DARK LAYOUT\n=========================================================*/\n.vertical-overlay-menu .content {\n  margin-left: 0; }\n\n.vertical-overlay-menu .navbar .navbar-header {\n  float: left;\n  width: 260px; }\n\n.vertical-overlay-menu .navbar.header-navbar.floating-nav {\n  width: calc(100vw - (100vw - 100%) - calc(2.2rem * 2)); }\n\n.vertical-overlay-menu .main-menu, .vertical-overlay-menu.menu-hide .main-menu {\n  opacity: 0;\n  transform: translate3d(0, 0, 0);\n  transition: width .25s,opacity .25s,transform .25s;\n  width: 260px;\n  left: -260px; }\n  .vertical-overlay-menu .main-menu .navigation .navigation-header .icon-minus {\n    display: none; }\n  .vertical-overlay-menu .main-menu .navigation > li > a > i {\n    margin-right: 14px;\n    float: left; }\n    .vertical-overlay-menu .main-menu .navigation > li > a > i:before {\n      transition: 200ms ease all;\n      font-size: 1.429rem; }\n  .vertical-overlay-menu .main-menu .navigation li.has-sub > a:not(.mm-next):after {\n    content: \"\\f105\";\n    font-family: 'FontAwesome';\n    font-size: 1rem;\n    display: inline-block;\n    position: absolute;\n    right: 25px;\n    top: 10px;\n    transform: rotate(0deg);\n    transition: -webkit-transform 0.2s ease-in-out; }\n  .vertical-overlay-menu .main-menu .navigation li.open > a:not(.mm-next):after {\n    transform: rotate(90deg); }\n  .vertical-overlay-menu .main-menu .navigation li a i {\n    font-size: 1.1rem; }\n  .vertical-overlay-menu .main-menu .main-menu-footer {\n    bottom: 55px; }\n  .vertical-overlay-menu .main-menu .main-menu-footer {\n    width: 260px; }\n\n.vertical-overlay-menu.menu-open .main-menu {\n  opacity: 1;\n  transform: translate3d(260px, 0, 0);\n  transition: width .25s,opacity .25s,transform .25s; }\n\n.vertical-overlay-menu.menu-flipped .main-menu {\n  right: -260px;\n  left: inherit; }\n\n.vertical-overlay-menu.menu-flipped .navbar .navbar-container {\n  margin: 0;\n  margin-right: 260px; }\n\n.vertical-overlay-menu.menu-flipped .navbar .navbar-header {\n  float: right; }\n\n.vertical-overlay-menu.menu-flipped.menu-open .main-menu {\n  transform: translate3d(-260px, 0, 0); }\n\n@media (max-width: 991.98px) {\n  .vertical-overlay-menu .main-menu .main-menu-footer {\n    bottom: 0px; } }\n"
  },
  {
    "path": "public/backend/css/core/menu/menu-types/vertical-overlay-menu.css",
    "content": "/*=========================================================================================\n    File Name: vertical-overlay-menu.scss\n    Description: A overlay style vertical menu with show and hide support. It support\n    light & dark version, filpped layout, right side icons, native scroll and borders menu\n    item seperation.\n    ----------------------------------------------------------------------------------------\n    Item Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n    Author: PIXINVENT\n    Author URL: http://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n/*========================================================\n        DARK LAYOUT\n=========================================================*/\n.vertical-overlay-menu .content {\n  margin-left: 0; }\n\n.vertical-overlay-menu .navbar .navbar-header {\n  float: left;\n  width: 260px; }\n\n.vertical-overlay-menu .navbar.header-navbar.floating-nav {\n  width: calc(100vw - (100vw - 100%) - calc(2.2rem * 2)); }\n\n.vertical-overlay-menu .main-menu, .vertical-overlay-menu.menu-hide .main-menu {\n  opacity: 0;\n  transform: translate3d(0, 0, 0);\n  transition: width .25s,opacity .25s,transform .25s;\n  width: 260px;\n  left: -260px; }\n  .vertical-overlay-menu .main-menu .navigation .navigation-header .icon-minus {\n    display: none; }\n  .vertical-overlay-menu .main-menu .navigation > li > a > i {\n    margin-right: 14px;\n    float: left; }\n    .vertical-overlay-menu .main-menu .navigation > li > a > i:before {\n      transition: 200ms ease all;\n      font-size: 1.429rem; }\n  .vertical-overlay-menu .main-menu .navigation li.has-sub > a:not(.mm-next):after {\n    content: \"\\f105\";\n    font-family: 'FontAwesome';\n    font-size: 1rem;\n    display: inline-block;\n    position: absolute;\n    right: 25px;\n    top: 10px;\n    transform: rotate(0deg);\n    transition: -webkit-transform 0.2s ease-in-out; }\n  .vertical-overlay-menu .main-menu .navigation li.open > a:not(.mm-next):after {\n    transform: rotate(90deg); }\n  .vertical-overlay-menu .main-menu .navigation li a i {\n    font-size: 1.1rem; }\n  .vertical-overlay-menu .main-menu .main-menu-footer {\n    bottom: 55px; }\n  .vertical-overlay-menu .main-menu .main-menu-footer {\n    width: 260px; }\n\n.vertical-overlay-menu.menu-open .main-menu {\n  opacity: 1;\n  transform: translate3d(260px, 0, 0);\n  transition: width .25s,opacity .25s,transform .25s; }\n\n.vertical-overlay-menu.menu-flipped .main-menu {\n  right: -260px;\n  left: inherit; }\n\n.vertical-overlay-menu.menu-flipped .navbar .navbar-container {\n  margin: 0;\n  margin-right: 260px; }\n\n.vertical-overlay-menu.menu-flipped .navbar .navbar-header {\n  float: right; }\n\n.vertical-overlay-menu.menu-flipped.menu-open .main-menu {\n  transform: translate3d(-260px, 0, 0); }\n\n@media (max-width: 991.98px) {\n  .vertical-overlay-menu .main-menu .main-menu-footer {\n    bottom: 0px; } }\n"
  },
  {
    "path": "public/backend/css/core/mixins/alert.css",
    "content": ""
  },
  {
    "path": "public/backend/css/core/mixins/hex2rgb.css",
    "content": ""
  },
  {
    "path": "public/backend/css/core/mixins/main-menu-mixin.css",
    "content": ""
  },
  {
    "path": "public/backend/css/core/mixins/transitions.css",
    "content": ""
  },
  {
    "path": "public/backend/css/pages/aggrid.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\n.aggrid {\n  height: 600px;\n  font-size: 1rem;\n  color: #626262;\n  /*** TABLE BODY HEIGHT - FOOTER HEIGHT ***/\n  /*** HEADER TEXT  ***/\n  /*** PAGINATION STYLING ***/\n  /*** TABLE SCROLLBAR ***/ }\n  .aggrid .ag-icon-checkbox-checked,\n  .aggrid .ag-icon-checkbox-indeterminate {\n    color: #7367f0 !important; }\n  .aggrid .ag-root-wrapper-body {\n    min-height: calc(100% - 56px); }\n  .aggrid .ag-header-cell-text {\n    font-size: 1rem;\n    font-family: \"Montserrat\", Helvetica, Arial, serif; }\n  .aggrid .ag-paging-panel {\n    display: block !important;\n    align-items: center;\n    height: 98px; }\n    .aggrid .ag-paging-panel .ag-paging-row-summary-panel {\n      display: none; }\n    .aggrid .ag-paging-panel .ag-paging-page-summary-panel {\n      justify-content: center;\n      margin-left: 0;\n      margin-top: 18px; }\n      .aggrid .ag-paging-panel .ag-paging-page-summary-panel [ref=\"lbCurrent\"],\n      .aggrid .ag-paging-panel .ag-paging-page-summary-panel [ref=\"lbTotal\"] {\n        color: #fff;\n        padding: 0.7rem 0.95rem;\n        border-radius: 0.5rem; }\n    .aggrid .ag-paging-panel .ag-paging-button {\n      background-color: #dae1e7;\n      border-radius: 50%;\n      padding: 0.5rem 0rem;\n      margin: 0 0.5rem;\n      color: #626262 !important; }\n      .aggrid .ag-paging-panel .ag-paging-button .ag-icon {\n        color: #626262 !important;\n        opacity: 1 !important; }\n      .aggrid .ag-paging-panel .ag-paging-button.ag-disabled {\n        opacity: 0.5 !important; }\n    .aggrid .ag-paging-panel span[ref=\"lbCurrent\"] {\n      background-color: #7367f0; }\n    .aggrid .ag-paging-panel span[ref=\"lbTotal\"] {\n      background-color: #dae1e7;\n      color: #626262 !important; }\n  .aggrid ::-webkit-scrollbar {\n    width: 10px;\n    height: 10px; }\n  .aggrid ::-webkit-scrollbar-thumb {\n    background: #dae1e7;\n    border-radius: 20px; }\n  .aggrid ::-webkit-scrollbar-track {\n    background: #f8f8f8;\n    border-radius: 20px; }\n\n/*** PAGE FILTER DROPDOWN ***/\n.filter-btn {\n  padding: 1.2rem !important;\n  border-radius: 5rem;\n  font-size: 0.95rem; }\n  .filter-btn:after {\n    left: 5px; }\n\n/*** SORTING DROPDOWN WIDTH ***/\n.sort-dropdown .dropdown-menu {\n  min-width: 4rem; }\n"
  },
  {
    "path": "public/backend/css/pages/app-chat.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\n.chat-application .content-area-wrapper .content-right .content-wrapper {\n  padding: 0; }\n\n.chat-application .content-area-wrapper {\n  border: 1px solid #dae1e7;\n  border-radius: 0.25rem; }\n\n.chat-application .chat-profile-sidebar {\n  border-right: 1px solid #E4E7ED;\n  height: calc(100vh - 13rem);\n  height: calc(var(--vh, 1vh) * 100 - 13rem);\n  width: 400px;\n  border-radius: .25rem;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  margin: 0;\n  background-color: #fff;\n  position: fixed;\n  transform: translateX(-110%);\n  transition: all .3s ease;\n  z-index: 6; }\n  .chat-application .chat-profile-sidebar.show {\n    transform: translateX(0);\n    transition: all .3s ease; }\n  .chat-application .chat-profile-sidebar .chat-profile-header {\n    display: flex;\n    text-align: center;\n    border-bottom: 1px solid rgba(0, 0, 0, 0.06); }\n    .chat-application .chat-profile-sidebar .chat-profile-header .header-profile-sidebar {\n      margin: 2rem auto .5rem; }\n    .chat-application .chat-profile-sidebar .chat-profile-header .avatar {\n      margin-bottom: 1.25rem; }\n    .chat-application .chat-profile-sidebar .chat-profile-header .close-icon {\n      position: absolute;\n      top: 14px;\n      right: 13px;\n      font-size: 1.75rem;\n      cursor: pointer; }\n  .chat-application .chat-profile-sidebar .profile-sidebar-area .scroll-area {\n    padding: 2rem;\n    height: calc(100vh - 24.25rem);\n    height: calc(var(--vh, 1vh) * 100 - 24.25rem);\n    position: relative; }\n\n.chat-application .sidebar-content {\n  border-right: 1px solid #E4E7ED;\n  height: calc(100vh - 13rem);\n  height: calc(var(--vh, 1vh) * 100 - 13rem);\n  width: 400px;\n  border-radius: .25rem;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  margin: 0;\n  box-shadow: none; }\n  .chat-application .sidebar-content .sidebar-close-icon {\n    position: absolute;\n    right: .25rem;\n    top: .25rem;\n    font-size: 1.25rem;\n    z-index: 1;\n    cursor: pointer;\n    visibility: hidden; }\n  .chat-application .sidebar-content .chat-fixed-search {\n    position: fixed;\n    width: 400px;\n    border-bottom: 1px solid #E4E7ED;\n    padding: .65rem; }\n    .chat-application .sidebar-content .chat-fixed-search .sidebar-profile-toggle .avatar {\n      display: inline-table;\n      width: calc(32px + 8px); }\n    .chat-application .sidebar-content .chat-fixed-search input.form-control {\n      padding: .9rem 1rem .9rem 3rem;\n      height: calc(1.25em + 1.4rem + 4px); }\n    .chat-application .sidebar-content .chat-fixed-search .form-control-position {\n      top: 5px; }\n      .chat-application .sidebar-content .chat-fixed-search .form-control-position i {\n        left: 9px; }\n  .chat-application .sidebar-content .chat-user-list {\n    height: calc(100% - 5rem);\n    margin-top: 5rem;\n    width: 400px; }\n    .chat-application .sidebar-content .chat-user-list ul {\n      padding-left: 0;\n      margin-bottom: 0; }\n    .chat-application .sidebar-content .chat-user-list li {\n      display: flex;\n      justify-content: space-between;\n      align-items: center;\n      padding: 1.322rem .85rem;\n      margin-right: 1px; }\n      .chat-application .sidebar-content .chat-user-list li:not(:first-child) {\n        border-top: 1px solid #E4E7ED; }\n      .chat-application .sidebar-content .chat-user-list li .user-chat-info {\n        width: 100%;\n        display: flex;\n        justify-content: space-between;\n        overflow: hidden; }\n      .chat-application .sidebar-content .chat-user-list li .contact-info {\n        width: calc(100vw - (100vw - 100%) - 1rem - 50px);\n        margin-top: .3rem; }\n        .chat-application .sidebar-content .chat-user-list li .contact-info .truncate {\n          margin: 0; }\n      .chat-application .sidebar-content .chat-user-list li:hover {\n        cursor: pointer;\n        background: #eee; }\n      .chat-application .sidebar-content .chat-user-list li.active {\n        background: linear-gradient(118deg, #7367f0, rgba(115, 103, 240, 0.7));\n        box-shadow: 0 15px 30px 0 rgba(0, 0, 0, 0.11), 0 5px 15px 0 rgba(0, 0, 0, 0.08);\n        color: #fff; }\n        .chat-application .sidebar-content .chat-user-list li.active h1, .chat-application .sidebar-content .chat-user-list li.active h2, .chat-application .sidebar-content .chat-user-list li.active h3, .chat-application .sidebar-content .chat-user-list li.active h4, .chat-application .sidebar-content .chat-user-list li.active h5, .chat-application .sidebar-content .chat-user-list li.active h6 {\n          color: #fff; }\n      .chat-application .sidebar-content .chat-user-list li img {\n        border: 2px solid #fff; }\n  .chat-application .sidebar-content .card {\n    margin-bottom: 0; }\n\n.chat-application .chat-overlay {\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  position: absolute;\n  display: block;\n  z-index: 2;\n  visibility: hidden;\n  border-radius: 0.25rem; }\n  .chat-application .chat-overlay.show {\n    visibility: visible;\n    background-color: rgba(0, 0, 0, 0.2); }\n\n.chat-application .chat-app-window .favorite, .chat-application .chat-app-window .sidebar-toggle {\n  cursor: pointer; }\n\n.chat-application .chat-app-window .user-chats {\n  padding: 20px 30px;\n  position: relative;\n  text-align: center;\n  height: calc(100vh - 23.5rem);\n  height: calc(var(--vh, 1vh) * 100 - 23.5rem); }\n\n.chat-application .chat-app-window .start-chat-area, .chat-application .chat-app-window .user-chats {\n  background-image: url(\"../../images/backgrounds/chat-bg.svg\");\n  background-color: #dfdbe5; }\n\n.chat-application .chat-app-window .start-chat-area {\n  height: calc(100vh - 13rem);\n  height: calc(var(--vh, 1vh) * 100 - 13rem);\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  flex-direction: column; }\n  .chat-application .chat-app-window .start-chat-area .start-chat-icon, .chat-application .chat-app-window .start-chat-area .start-chat-text {\n    background: white;\n    box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.12), 0 2px 4px 0 rgba(0, 0, 0, 0.08) !important; }\n  .chat-application .chat-app-window .start-chat-area .start-chat-text {\n    border-radius: calc(0.5rem * 4);\n    cursor: pointer; }\n  .chat-application .chat-app-window .start-chat-area .start-chat-icon {\n    border-radius: 50%;\n    font-size: 4rem;\n    padding: 2rem; }\n\n.chat-application .chat-app-form {\n  padding: 20px 10px;\n  background-color: white; }\n\n.chat-application .chats {\n  padding: 0; }\n  .chat-application .chats .chat-body {\n    display: block;\n    margin: 10px 30px 0 0;\n    overflow: hidden; }\n    .chat-application .chats .chat-body .chat-content {\n      text-align: right;\n      display: block;\n      float: right;\n      padding: .75rem 1rem;\n      margin: 0 20px 10px 0;\n      clear: both;\n      color: #fff;\n      background: linear-gradient(118deg, #7367f0, rgba(115, 103, 240, 0.7));\n      border-radius: .5rem;\n      box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.12), 0 2px 4px 0 rgba(0, 0, 0, 0.08); }\n      .chat-application .chats .chat-body .chat-content p {\n        margin: 0; }\n  .chat-application .chats .chat-avatar {\n    float: right; }\n  .chat-application .chats .chat-left .chat-avatar {\n    float: left; }\n  .chat-application .chats .chat-left .chat-body {\n    margin-right: 0;\n    margin-left: 30px; }\n  .chat-application .chats .chat-left .chat-content {\n    text-align: left;\n    float: left;\n    margin: 0 0 10px 20px;\n    color: #626262;\n    background: none;\n    background-color: white; }\n\n.chat-application .user-profile-sidebar {\n  border-right: 1px solid #E4E7ED;\n  height: calc(100vh - 13rem);\n  height: calc(var(--vh, 1vh) * 100 - 13rem);\n  width: 400px;\n  border-radius: .25rem;\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n  margin: 0;\n  background-color: #fff;\n  position: fixed;\n  transform: translateX(110%);\n  transition: all .3s ease;\n  z-index: 6;\n  right: 4.2rem;\n  bottom: 5.25rem;\n  opacity: 0; }\n  .chat-application .user-profile-sidebar.show {\n    opacity: 1;\n    transform: translateX(7%);\n    transition: all .3s ease; }\n  .chat-application .user-profile-sidebar .user-profile-header {\n    display: flex;\n    text-align: center;\n    border-bottom: 1px solid rgba(0, 0, 0, 0.06); }\n    .chat-application .user-profile-sidebar .user-profile-header .header-profile-sidebar {\n      margin: 2rem auto .5rem; }\n    .chat-application .user-profile-sidebar .user-profile-header .avatar {\n      margin-bottom: 1.25rem; }\n    .chat-application .user-profile-sidebar .user-profile-header .close-icon {\n      position: absolute;\n      top: 14px;\n      right: 13px;\n      font-size: 1.75rem;\n      cursor: pointer; }\n  .chat-application .user-profile-sidebar .user-profile-sidebar-area {\n    height: calc(100vh - 24.25rem);\n    height: calc(var(--vh, 1vh) * 100 - 24.25rem);\n    position: relative; }\n\n@media (max-width: 767.98px) {\n  .chat-application .chat-app-window {\n    height: calc(100% - 132px); }\n  .chat-application .sidebar-content .sidebar-close-icon {\n    visibility: visible; } }\n\n@media (max-width: 575.98px) {\n  .chat-application .sidebar-content {\n    width: 260px;\n    left: -4px !important; }\n    .chat-application .sidebar-content .chat-fixed-search, .chat-application .sidebar-content .chat-user-list {\n      width: 260px; }\n  .chat-application .chat-profile-sidebar {\n    width: 260px; }\n  .chat-application .user-profile-sidebar {\n    width: 260px;\n    right: 2.35rem; } }\n\n@media (max-width: 991.98px) {\n  .content-right {\n    width: 100%; }\n  .chat-application .sidebar-content {\n    transform: translateX(-110%);\n    transition: all .3s ease-in-out;\n    left: 0;\n    position: fixed;\n    z-index: 5;\n    left: -2px; }\n    .chat-application .sidebar-content.show {\n      transform: translateX(8.5%);\n      transition: all .3s ease;\n      display: block; } }\n\n@media (max-width: 349.98px) {\n  .chat-application .sidebar-content {\n    width: 230px;\n    left: -2px !important; }\n    .chat-application .sidebar-content .chat-fixed-search, .chat-application .sidebar-content .chat-user-list {\n      width: 230px; }\n  .chat-application .chat-profile-sidebar {\n    width: 230px; }\n  .chat-application .user-profile-sidebar {\n    width: 230px; } }\n"
  },
  {
    "path": "public/backend/css/pages/app-ecommerce-details.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\n/* app ecommerce details css */\n/*---------------*/\n.app-ecommerce-details .item-features {\n  background-color: #f7f7f7; }\n\n/* swiper slide shadow */\n.swiper-container .swiper-shadow {\n  box-shadow: 2px 8px 10px 0 rgba(25, 42, 70, 0.13) !important; }\n\n.swiper-responsive-breakpoints.swiper-container .swiper-slide {\n  text-align: center;\n  font-weight: 500;\n  background-color: #f7f7f7;\n  padding: 1.5rem;\n  cursor: pointer; }\n\n.swiper-button-prev,\n.swiper-button-next,\n.swiper-container-rtl .swiper-button-prev,\n.swiper-container-rtl .swiper-button-next {\n  background-image: none;\n  width: 35px;\n  font-size: 2rem; }\n  .swiper-button-prev:focus,\n  .swiper-button-next:focus,\n  .swiper-container-rtl .swiper-button-prev:focus,\n  .swiper-container-rtl .swiper-button-next:focus {\n    outline: none; }\n  .swiper-button-prev:after,\n  .swiper-button-next:after,\n  .swiper-container-rtl .swiper-button-prev:after,\n  .swiper-container-rtl .swiper-button-next:after {\n    font-family: 'feather'; }\n\n.swiper-button-prev {\n  left: 0; }\n  .swiper-button-prev:after {\n    content: \"\\e843\"; }\n\n.swiper-button-next {\n  right: 0; }\n  .swiper-button-next:after {\n    content: \"\\e844\"; }\n\n.swiper-container-rtl .swiper-button-prev:after {\n  content: \"\\e844\"; }\n\n.swiper-container-rtl .swiper-button-next:after {\n  content: \"\\e843\"; }\n\n.product-color-options .color-option {\n  border: 2px solid transparent;\n  border-radius: 50%;\n  position: relative;\n  cursor: pointer;\n  padding: .3rem; }\n  .product-color-options .color-option .filloption {\n    height: 21px;\n    width: 21px;\n    border-radius: 50%; }\n\n.product-color-options .selected .b-primary {\n  border-color: #7367f0; }\n\n.product-color-options .selected .b-success {\n  border-color: #28c76f; }\n\n.product-color-options .selected .b-danger {\n  border-color: #ea5455; }\n\n.product-color-options .selected .b-warning {\n  border-color: #ff9f43; }\n\n.product-color-options .selected .b-black {\n  border-color: #22292f; }\n"
  },
  {
    "path": "public/backend/css/pages/app-ecommerce-shop.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\n.ecommerce-application .content-body {\n  position: relative; }\n\n.ecommerce-application .shop-content-overlay {\n  position: absolute;\n  top: 4.2rem;\n  height: 100%;\n  width: 100%;\n  background: rgba(0, 0, 0, 0.2);\n  z-index: 0;\n  opacity: 0; }\n  .ecommerce-application .shop-content-overlay.show {\n    opacity: 1;\n    z-index: 1; }\n\n.ecommerce-application .sidebar-shop .sidebar-close-icon {\n  position: absolute;\n  top: 0.25rem;\n  right: 0.25rem;\n  font-size: 1.25rem;\n  z-index: 5;\n  cursor: pointer; }\n\n.ecommerce-application .sidebar-shop .filter-heading {\n  font-weight: 700;\n  color: #626262;\n  position: relative;\n  top: -7px; }\n\n.ecommerce-application .sidebar-shop .vs-radio-con input:checked ~ span {\n  color: #7367f0; }\n\n.ecommerce-application .sidebar-shop .filter-title {\n  font-weight: 700; }\n\n.ecommerce-application .sidebar-shop .range-slider.noUi-horizontal {\n  height: .285rem; }\n  .ecommerce-application .sidebar-shop .range-slider.noUi-horizontal .noUi-base {\n    height: .285rem; }\n  .ecommerce-application .sidebar-shop .range-slider.noUi-horizontal .noUi-handle {\n    right: -1.071rem !important;\n    top: -.428rem;\n    width: 16px;\n    height: 16px;\n    border-width: .142rem;\n    line-height: 1.15;\n    cursor: pointer; }\n    .ecommerce-application .sidebar-shop .range-slider.noUi-horizontal .noUi-handle .noUi-tooltip {\n      opacity: 0;\n      font-size: .75rem;\n      background-color: #7367f0;\n      color: #fff;\n      border-radius: .357rem;\n      border: none;\n      padding: .142rem .357rem;\n      transform: translate(-50%, -50%); }\n      .ecommerce-application .sidebar-shop .range-slider.noUi-horizontal .noUi-handle .noUi-tooltip:before {\n        content: \"$ \"; }\n    .ecommerce-application .sidebar-shop .range-slider.noUi-horizontal .noUi-handle:hover {\n      transform: scale(1.2); }\n    .ecommerce-application .sidebar-shop .range-slider.noUi-horizontal .noUi-handle:active {\n      transform: scale(1);\n      border-width: .5rem;\n      transition: .25s ease; }\n      .ecommerce-application .sidebar-shop .range-slider.noUi-horizontal .noUi-handle:active .noUi-tooltip {\n        opacity: 1; }\n\n.ecommerce-application .sidebar-shop .ratings-list .ratings-list-item {\n  font-size: 1.5rem;\n  cursor: pointer; }\n\n.ecommerce-application .sidebar-shop .ratings-list ~ .stars-received {\n  margin-top: .35rem; }\n\n.ecommerce-application .sidebar-shop {\n  margin-top: 2rem;\n  width: 260px;\n  z-index: 4; }\n\n.ecommerce-application .ecommerce-header-items {\n  display: flex;\n  justify-content: space-between; }\n  .ecommerce-application .ecommerce-header-items .view-options .view-btn-option {\n    display: inline-block; }\n    .ecommerce-application .ecommerce-header-items .view-options .view-btn-option .btn.view-btn {\n      margin-right: 10px;\n      background-color: #fff;\n      padding: .5rem;\n      color: #626262;\n      box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.14) !important; }\n      .ecommerce-application .ecommerce-header-items .view-options .view-btn-option .btn.view-btn i {\n        font-size: 1.7rem; }\n      .ecommerce-application .ecommerce-header-items .view-options .view-btn-option .btn.view-btn.active {\n        color: #7367f0 !important; }\n        .ecommerce-application .ecommerce-header-items .view-options .view-btn-option .btn.view-btn.active:hover, .ecommerce-application .ecommerce-header-items .view-options .view-btn-option .btn.view-btn.active:active {\n          color: #7367f0 !important; }\n      .ecommerce-application .ecommerce-header-items .view-options .view-btn-option .btn.view-btn:hover, .ecommerce-application .ecommerce-header-items .view-options .view-btn-option .btn.view-btn:active {\n        color: #626262; }\n  .ecommerce-application .ecommerce-header-items .view-options .select2 {\n    margin-right: 10px;\n    width: auto !important; }\n    .ecommerce-application .ecommerce-header-items .view-options .select2 .select2-selection--single {\n      border: none !important;\n      box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.14);\n      border-radius: 5px; }\n  .ecommerce-application .ecommerce-header-items .result-toggler {\n    display: flex;\n    align-items: flex-end; }\n    .ecommerce-application .ecommerce-header-items .result-toggler .shop-sidebar-toggler {\n      font-size: 1.7rem;\n      padding-left: 0;\n      margin-left: -6px; }\n      .ecommerce-application .ecommerce-header-items .result-toggler .shop-sidebar-toggler:active, .ecommerce-application .ecommerce-header-items .result-toggler .shop-sidebar-toggler:focus {\n        outline: 0; }\n      .ecommerce-application .ecommerce-header-items .result-toggler .shop-sidebar-toggler .navbar-toggler-icon i {\n        color: #626262;\n        vertical-align: middle; }\n    .ecommerce-application .ecommerce-header-items .result-toggler .search-results {\n      font-weight: 700;\n      color: #626262;\n      display: inline-block; }\n\n.ecommerce-application .search-product {\n  height: 48px;\n  border: none;\n  box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.14);\n  font-size: 1.2rem;\n  padding-left: 1rem; }\n  .ecommerce-application .search-product ~ .form-control-position {\n    top: 10px;\n    right: 10px; }\n    .ecommerce-application .search-product ~ .form-control-position i {\n      font-size: 1.5rem; }\n  .ecommerce-application .search-product::placeholder {\n    font-size: .95rem; }\n\n.ecommerce-application .ecommerce-card:hover {\n  transform: translateY(-5px);\n  box-shadow: 0 4px 25px 0 rgba(0, 0, 0, 0.25); }\n\n.ecommerce-application .ecommerce-card .item-price {\n  font-weight: 700; }\n\n.ecommerce-application .ecommerce-card .item-rating i {\n  margin-left: .25rem;\n  vertical-align: top; }\n\n.ecommerce-application .ecommerce-card .item-name {\n  font-weight: 600;\n  color: #2c2c2c; }\n  .ecommerce-application .ecommerce-card .item-name a {\n    color: #626262; }\n    .ecommerce-application .ecommerce-card .item-name a:hover {\n      color: #7367f0; }\n\n.ecommerce-application .ecommerce-card .item-description {\n  font-size: .875rem; }\n\n.ecommerce-application .ecommerce-card .wishlist,\n.ecommerce-application .ecommerce-card .cart {\n  padding: .8rem 1rem;\n  cursor: pointer;\n  font-weight: 600;\n  font-size: .875rem;\n  text-transform: uppercase; }\n  .ecommerce-application .ecommerce-card .wishlist i,\n  .ecommerce-application .ecommerce-card .cart i {\n    font-size: 1rem;\n    margin-right: .25rem; }\n\n.ecommerce-application .ecommerce-card .wishlist {\n  background-color: #f6f6f6;\n  color: #2c2c2c;\n  user-select: none; }\n  .ecommerce-application .ecommerce-card .wishlist.added i {\n    color: #ea5455; }\n\n.ecommerce-application .ecommerce-card .cart {\n  background-color: #7367f0;\n  color: #fff; }\n  .ecommerce-application .ecommerce-card .cart .view-in-cart {\n    color: #fff; }\n\n.ecommerce-application .grid-view,\n.ecommerce-application .list-view {\n  margin-top: .7rem; }\n\n.ecommerce-application .grid-view {\n  display: grid;\n  grid-template-columns: 1fr 1fr 1fr;\n  column-gap: 28px; }\n  .ecommerce-application .grid-view .ecommerce-card {\n    overflow: hidden; }\n    .ecommerce-application .grid-view .ecommerce-card .card-content .item-img {\n      padding-top: .5rem;\n      min-height: 15.85rem; }\n    .ecommerce-application .grid-view .ecommerce-card .card-content .item-wrapper {\n      display: flex;\n      justify-content: space-between; }\n      .ecommerce-application .grid-view .ecommerce-card .card-content .item-wrapper .item-price {\n        position: relative;\n        top: 5px; }\n      .ecommerce-application .grid-view .ecommerce-card .card-content .item-wrapper .shipping {\n        display: none; }\n    .ecommerce-application .grid-view .ecommerce-card .card-content .item-company {\n      display: none; }\n    .ecommerce-application .grid-view .ecommerce-card .card-content .item-options {\n      display: flex;\n      flex-wrap: wrap; }\n      .ecommerce-application .grid-view .ecommerce-card .card-content .item-options .cart,\n      .ecommerce-application .grid-view .ecommerce-card .card-content .item-options .wishlist {\n        flex-grow: 1; }\n      .ecommerce-application .grid-view .ecommerce-card .card-content .item-options .wishlist {\n        padding: .8rem 2rem; }\n      .ecommerce-application .grid-view .ecommerce-card .card-content .item-options .item-wrapper .item-rating {\n        display: none; }\n      .ecommerce-application .grid-view .ecommerce-card .card-content .item-options .item-wrapper .item-price {\n        display: none; }\n    .ecommerce-application .grid-view .ecommerce-card .card-content .item-name {\n      margin-top: 1rem; }\n    .ecommerce-application .grid-view .ecommerce-card .card-content .item-name,\n    .ecommerce-application .grid-view .ecommerce-card .card-content .item-description {\n      overflow: hidden;\n      white-space: nowrap;\n      text-overflow: ellipsis; }\n    .ecommerce-application .grid-view .ecommerce-card .card-body {\n      padding: 1rem;\n      padding-bottom: 0; }\n\n.ecommerce-application .list-view {\n  display: grid;\n  grid-template-columns: 1fr; }\n  .ecommerce-application .list-view .ecommerce-card {\n    overflow: hidden; }\n    .ecommerce-application .list-view .ecommerce-card .card-content {\n      display: grid;\n      grid-template-columns: 1fr 2fr 1fr; }\n      .ecommerce-application .list-view .ecommerce-card .card-content .item-img {\n        align-self: center;\n        padding-left: 1rem;\n        padding-right: 1rem;\n        display: flex;\n        justify-content: center;\n        align-items: center;\n        height: 100%; }\n      .ecommerce-application .list-view .ecommerce-card .card-content .card-body {\n        padding: 1rem;\n        padding-bottom: .5rem;\n        border-right: 1px solid #dae1e7; }\n        .ecommerce-application .list-view .ecommerce-card .card-content .card-body .item-rating {\n          display: none; }\n        .ecommerce-application .list-view .ecommerce-card .card-content .card-body .item-price {\n          display: none; }\n        .ecommerce-application .list-view .ecommerce-card .card-content .card-body .item-name {\n          margin-bottom: .25rem;\n          font-size: .95rem; }\n        .ecommerce-application .list-view .ecommerce-card .card-content .card-body .item-company {\n          display: block;\n          cursor: pointer;\n          font-size: .875rem; }\n          .ecommerce-application .list-view .ecommerce-card .card-content .card-body .item-company .company-name {\n            color: #7367f0; }\n      .ecommerce-application .list-view .ecommerce-card .card-content .item-options {\n        padding: 1rem; }\n        .ecommerce-application .list-view .ecommerce-card .card-content .item-options .item-wrapper {\n          position: relative; }\n          .ecommerce-application .list-view .ecommerce-card .card-content .item-options .item-wrapper .item-rating {\n            position: absolute;\n            right: 0; }\n          .ecommerce-application .list-view .ecommerce-card .card-content .item-options .item-wrapper .item-cost .item-price {\n            position: relative;\n            top: 55px;\n            font-size: 16px; }\n        .ecommerce-application .list-view .ecommerce-card .card-content .item-options .shipping {\n          position: relative;\n          top: 50px;\n          color: #b8c2cc; }\n        .ecommerce-application .list-view .ecommerce-card .card-content .item-options .wishlist {\n          margin-top: 84px;\n          margin-bottom: 10px; }\n        .ecommerce-application .list-view .ecommerce-card .card-content .item-options .wishlist,\n        .ecommerce-application .list-view .ecommerce-card .card-content .item-options .cart {\n          border-radius: 6px; }\n\n.ecommerce-application .checkout-items .ecommerce-card .card-content .item-company {\n  margin-bottom: 0; }\n\n.ecommerce-application .checkout-items .ecommerce-card .card-content .stock-status-in {\n  color: #28c76f;\n  font-weight: 400;\n  font-size: .875rem; }\n\n.ecommerce-application .checkout-items .ecommerce-card .card-content .stock-status-out {\n  color: #ea5455;\n  font-weight: 400;\n  font-size: .875rem; }\n\n.ecommerce-application .checkout-items .ecommerce-card .card-content .item-quantity {\n  font-weight: 700;\n  font-size: .875rem; }\n  .ecommerce-application .checkout-items .ecommerce-card .card-content .item-quantity .quantity-title {\n    margin-bottom: 0.5rem; }\n  .ecommerce-application .checkout-items .ecommerce-card .card-content .item-quantity .quantity-counter-wrapper {\n    margin-left: -10px; }\n\n.ecommerce-application .checkout-items .ecommerce-card .card-content .delivery-date,\n.ecommerce-application .checkout-items .ecommerce-card .card-content .offers {\n  font-weight: 500;\n  margin-bottom: 0;\n  font-size: 1rem; }\n\n.ecommerce-application .checkout-items .ecommerce-card .card-content .delivery-date {\n  color: #b8c2cc;\n  margin-top: 1.8rem; }\n\n.ecommerce-application .checkout-items .ecommerce-card .card-content .offers {\n  color: #28c76f; }\n\n.ecommerce-application .checkout-options .options-title {\n  color: #b8c2cc; }\n\n.ecommerce-application .checkout-options .coupons {\n  display: flex;\n  justify-content: space-between; }\n  .ecommerce-application .checkout-options .coupons .coupons-title {\n    font-weight: 600; }\n    .ecommerce-application .checkout-options .coupons .coupons-title p {\n      margin-bottom: .5rem; }\n  .ecommerce-application .checkout-options .coupons .apply-coupon {\n    color: #7367f0;\n    font-weight: 500;\n    cursor: pointer; }\n    .ecommerce-application .checkout-options .coupons .apply-coupon p {\n      margin-bottom: .5rem; }\n\n.ecommerce-application .checkout-options .price-details {\n  font-weight: 600;\n  margin-bottom: .75rem; }\n\n.ecommerce-application .checkout-options .detail {\n  display: flex;\n  justify-content: space-between;\n  margin-bottom: .75rem; }\n  .ecommerce-application .checkout-options .detail .detail-title {\n    color: #b8c2cc; }\n    .ecommerce-application .checkout-options .detail .detail-title.detail-total {\n      color: #626262;\n      font-weight: 600; }\n  .ecommerce-application .checkout-options .detail .detail-amt.discount-amt {\n    color: #28c76f; }\n  .ecommerce-application .checkout-options .detail .detail-amt.emi-details {\n    color: #7367f0;\n    cursor: pointer; }\n  .ecommerce-application .checkout-options .detail .detail-amt.total-amt {\n    font-weight: 600; }\n\n.ecommerce-application .payment-type .gift-card {\n  cursor: pointer; }\n  .ecommerce-application .payment-type .gift-card i {\n    position: relative;\n    top: 3px; }\n\n.ecommerce-application .wizard.checkout-tab-steps .steps ul li.error > a {\n  color: #7367f0; }\n  .ecommerce-application .wizard.checkout-tab-steps .steps ul li.error > a .step {\n    border-color: #7367f0;\n    background-color: #7367f0; }\n\n.ecommerce-application .wizard.checkout-tab-steps #checkout-address .form-group .error {\n  color: #ea5455; }\n\n@media (max-width: 1200px) {\n  .ecommerce-application .app-content {\n    overflow: scroll; } }\n\n@media (max-width: 991.98px) {\n  .ecommerce-application .sidebar-left .sidebar {\n    position: absolute;\n    top: 14rem; }\n    .ecommerce-application .sidebar-left .sidebar .card {\n      border-radius: 0;\n      padding-bottom: 100vh;\n      padding-bottom: calc(var(--vh, 1vh) * 100); }\n      .ecommerce-application .sidebar-left .sidebar .card .card-body {\n        padding-bottom: 100%; }\n    .ecommerce-application .sidebar-left .sidebar .sidebar-shop {\n      transform: translateX(-112%);\n      transition: all .25s ease;\n      position: absolute; }\n      .ecommerce-application .sidebar-left .sidebar .sidebar-shop.show {\n        transition: all .25s ease;\n        transform: translateX(0); }\n  .ecommerce-application .ecommerce-header-items .result-toggler .shop-sidebar-toggler {\n    position: relative;\n    top: 1.2rem; }\n  .ecommerce-application .grid-view {\n    grid-template-columns: 1fr 1fr; } }\n\n@media (max-width: 991.98px) {\n  .ecommerce-application .ecommerce-header-items .result-toggler .search-results {\n    display: none; }\n  .ecommerce-application .ecommerce-header-items .result-toggler .shop-sidebar-toggler {\n    top: .5rem; }\n  .ecommerce-application .ecommerce-header-items .sidebar-shop {\n    transform: translateX(-123%);\n    transition: all .2s ease;\n    z-index: 5; }\n    .ecommerce-application .ecommerce-header-items .sidebar-shop.show {\n      position: absolute;\n      transform: translateX(0);\n      transition: all .2s ease; }\n  .ecommerce-application .list-view .ecommerce-card .card-content {\n    grid-template-columns: 1fr; }\n    .ecommerce-application .list-view .ecommerce-card .card-content .item-img {\n      padding-top: 2rem;\n      padding-bottom: 2rem; }\n    .ecommerce-application .list-view .ecommerce-card .card-content .card-body {\n      border: none; } }\n\n@media (max-width: 576px) {\n  .ecommerce-application .sidebar-shop {\n    top: 0; }\n  .ecommerce-application .grid-view {\n    grid-template-columns: 1fr; } }\n\n@media (min-width: 992px) {\n  .ecommerce-application .ecommerce-header-items .shop-sidebar-toggler {\n    display: none; }\n  .ecommerce-application .wishlist-items.grid-view {\n    grid-template-columns: 1fr 1fr 1fr 1fr; }\n  .ecommerce-application .product-checkout.list-view {\n    grid-template-columns: 2fr 1fr;\n    column-gap: 20px; } }\n\n@media (max-width: 360px) {\n  .ecommerce-application .sidebar-shop {\n    top: 1.5rem; } }\n\n@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {\n  .ecommerce-application .grid-view {\n    display: block; }\n    .ecommerce-application .grid-view .ecommerce-card {\n      float: left;\n      width: 31%;\n      margin-left: 1%;\n      margin-right: 1%; }\n  .ecommerce-application .list-view {\n    display: block; }\n    .ecommerce-application .list-view .ecommerce-card .card-content {\n      display: flex; }\n      .ecommerce-application .list-view .ecommerce-card .card-content .item-options .wishlist,\n      .ecommerce-application .list-view .ecommerce-card .card-content .item-options .cart {\n        padding: .8rem 3rem;\n        display: flex;\n        justify-content: center; }\n  .ecommerce-application #ecommerce-pagination .row {\n    clear: both; } }\n"
  },
  {
    "path": "public/backend/css/pages/app-email.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\n.email-application .content-area-wrapper {\n  border: 1px solid #dae1e7;\n  border-radius: 0.25rem; }\n  .email-application .content-area-wrapper .sidebar .email-app-sidebar {\n    width: 260px;\n    height: calc(100vh - 13rem);\n    height: calc(var(--vh, 1vh) * 100 - 13rem);\n    background-color: #fff;\n    border-top-left-radius: 0.25rem;\n    border-bottom-left-radius: 0.25rem;\n    transition: all .3s ease; }\n    .email-application .content-area-wrapper .sidebar .email-app-sidebar .sidebar-close-icon {\n      position: absolute;\n      right: .25rem;\n      top: .25rem;\n      cursor: pointer;\n      font-size: 1.25rem;\n      z-index: 5;\n      visibility: hidden; }\n    .email-application .content-area-wrapper .sidebar .email-app-sidebar .email-app-menu {\n      width: 100%;\n      padding-bottom: .5rem;\n      box-shadow: 0 0 15px 0 rgba(0, 0, 0, 0.05);\n      z-index: 3; }\n      .email-application .content-area-wrapper .sidebar .email-app-sidebar .email-app-menu .compose-btn {\n        padding: 1px 1.5rem;\n        margin-bottom: 0.25rem; }\n      .email-application .content-area-wrapper .sidebar .email-app-sidebar .email-app-menu .badge {\n        padding: 0.5rem 0.68rem; }\n      .email-application .content-area-wrapper .sidebar .email-app-sidebar .email-app-menu .sidebar-menu-list {\n        padding: 0 1.5rem;\n        position: relative;\n        height: calc(100% - 6.4rem); }\n      .email-application .content-area-wrapper .sidebar .email-app-sidebar .email-app-menu .list-group .list-group-item i {\n        top: 3px; }\n      .email-application .content-area-wrapper .sidebar .email-app-sidebar .email-app-menu hr {\n        margin-left: -1.5rem;\n        margin-right: -1.5rem; }\n  .email-application .content-area-wrapper .sidebar .list-group .list-group-item {\n    padding-left: 0;\n    padding-right: 0; }\n    .email-application .content-area-wrapper .sidebar .list-group .list-group-item:hover, .email-application .content-area-wrapper .sidebar .list-group .list-group-item:focus {\n      background-color: transparent;\n      color: #626262; }\n    .email-application .content-area-wrapper .sidebar .list-group .list-group-item.active {\n      background: transparent;\n      color: #7367f0; }\n  .email-application .content-area-wrapper .content-right {\n    width: calc(100% - 260px); }\n    .email-application .content-area-wrapper .content-right .content-wrapper {\n      padding: 0; }\n    .email-application .content-area-wrapper .content-right .email-app-list-wrapper {\n      border-left: 1px solid #dae1e7; }\n    .email-application .content-area-wrapper .content-right .app-fixed-search {\n      padding: .35rem .1rem;\n      border-bottom: 1px solid #dae1e7;\n      background-color: #fff;\n      border-top-right-radius: 0.5rem; }\n      .email-application .content-area-wrapper .content-right .app-fixed-search .form-control-position {\n        font-size: calc(1rem * 1.1); }\n      .email-application .content-area-wrapper .content-right .app-fixed-search input {\n        border: 0;\n        background-color: transparent; }\n        .email-application .content-area-wrapper .content-right .app-fixed-search input:focus {\n          border-color: transparent;\n          box-shadow: none; }\n    .email-application .content-area-wrapper .content-right .action-icon {\n      cursor: pointer; }\n\n.email-application .app-content .content-area-wrapper {\n  position: relative; }\n  .email-application .app-content .content-area-wrapper .sidebar-toggle {\n    cursor: pointer;\n    margin: 0.5rem 0.99rem;\n    float: left;\n    line-height: 1; }\n    .email-application .app-content .content-area-wrapper .sidebar-toggle i {\n      font-size: 1.75rem; }\n  .email-application .app-content .content-area-wrapper .go-back {\n    cursor: pointer; }\n  .email-application .app-content .content-area-wrapper .app-content-overlay {\n    top: 0;\n    left: 0;\n    right: 0;\n    bottom: 0;\n    position: absolute;\n    display: block;\n    z-index: 2;\n    visibility: hidden;\n    opacity: 0;\n    transition: all .3s ease; }\n    .email-application .app-content .content-area-wrapper .app-content-overlay.show {\n      visibility: visible;\n      transition: all .3s ease;\n      opacity: 1;\n      background-color: rgba(0, 0, 0, 0.2);\n      border-radius: 0.5rem; }\n  .email-application .app-content .content-area-wrapper .email-user-list {\n    position: relative;\n    height: calc(100vh - 20.3rem);\n    height: calc(var(--vh, 1vh) * 100 - 20.3rem); }\n    .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper {\n      padding: 0;\n      margin: 0; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1) {\n        animation-delay: 0.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2) {\n        animation-delay: 0.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3) {\n        animation-delay: 0.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4) {\n        animation-delay: 0.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(5) {\n        animation-delay: 0.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(6) {\n        animation-delay: 0.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(7) {\n        animation-delay: 0.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(8) {\n        animation-delay: 0.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(9) {\n        animation-delay: 0.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(10) {\n        animation-delay: 1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(11) {\n        animation-delay: 1.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(12) {\n        animation-delay: 1.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(13) {\n        animation-delay: 1.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(14) {\n        animation-delay: 1.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(15) {\n        animation-delay: 1.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(16) {\n        animation-delay: 1.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(17) {\n        animation-delay: 1.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(18) {\n        animation-delay: 1.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(19) {\n        animation-delay: 1.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(20) {\n        animation-delay: 2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(21) {\n        animation-delay: 2.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(22) {\n        animation-delay: 2.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(23) {\n        animation-delay: 2.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(24) {\n        animation-delay: 2.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(25) {\n        animation-delay: 2.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(26) {\n        animation-delay: 2.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(27) {\n        animation-delay: 2.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(28) {\n        animation-delay: 2.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(29) {\n        animation-delay: 2.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(30) {\n        animation-delay: 3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(31) {\n        animation-delay: 3.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(32) {\n        animation-delay: 3.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(33) {\n        animation-delay: 3.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(34) {\n        animation-delay: 3.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(35) {\n        animation-delay: 3.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(36) {\n        animation-delay: 3.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(37) {\n        animation-delay: 3.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(38) {\n        animation-delay: 3.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(39) {\n        animation-delay: 3.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(40) {\n        animation-delay: 4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(41) {\n        animation-delay: 4.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(42) {\n        animation-delay: 4.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(43) {\n        animation-delay: 4.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(44) {\n        animation-delay: 4.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(45) {\n        animation-delay: 4.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(46) {\n        animation-delay: 4.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(47) {\n        animation-delay: 4.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(48) {\n        animation-delay: 4.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(49) {\n        animation-delay: 4.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(50) {\n        animation-delay: 5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(51) {\n        animation-delay: 5.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(52) {\n        animation-delay: 5.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(53) {\n        animation-delay: 5.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(54) {\n        animation-delay: 5.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(55) {\n        animation-delay: 5.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(56) {\n        animation-delay: 5.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(57) {\n        animation-delay: 5.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(58) {\n        animation-delay: 5.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(59) {\n        animation-delay: 5.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(60) {\n        animation-delay: 6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(61) {\n        animation-delay: 6.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(62) {\n        animation-delay: 6.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(63) {\n        animation-delay: 6.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(64) {\n        animation-delay: 6.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(65) {\n        animation-delay: 6.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(66) {\n        animation-delay: 6.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(67) {\n        animation-delay: 6.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(68) {\n        animation-delay: 6.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(69) {\n        animation-delay: 6.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(70) {\n        animation-delay: 7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(71) {\n        animation-delay: 7.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(72) {\n        animation-delay: 7.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(73) {\n        animation-delay: 7.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(74) {\n        animation-delay: 7.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(75) {\n        animation-delay: 7.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(76) {\n        animation-delay: 7.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(77) {\n        animation-delay: 7.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(78) {\n        animation-delay: 7.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(79) {\n        animation-delay: 7.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(80) {\n        animation-delay: 8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(81) {\n        animation-delay: 8.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(82) {\n        animation-delay: 8.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(83) {\n        animation-delay: 8.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(84) {\n        animation-delay: 8.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(85) {\n        animation-delay: 8.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(86) {\n        animation-delay: 8.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(87) {\n        animation-delay: 8.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(88) {\n        animation-delay: 8.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(89) {\n        animation-delay: 8.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(90) {\n        animation-delay: 9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(91) {\n        animation-delay: 9.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(92) {\n        animation-delay: 9.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(93) {\n        animation-delay: 9.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(94) {\n        animation-delay: 9.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(95) {\n        animation-delay: 9.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(96) {\n        animation-delay: 9.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(97) {\n        animation-delay: 9.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(98) {\n        animation-delay: 9.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(99) {\n        animation-delay: 9.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(100) {\n        animation-delay: 10s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(101) {\n        animation-delay: 10.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(102) {\n        animation-delay: 10.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(103) {\n        animation-delay: 10.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(104) {\n        animation-delay: 10.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(105) {\n        animation-delay: 10.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(106) {\n        animation-delay: 10.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(107) {\n        animation-delay: 10.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(108) {\n        animation-delay: 10.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(109) {\n        animation-delay: 10.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(110) {\n        animation-delay: 11s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(111) {\n        animation-delay: 11.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(112) {\n        animation-delay: 11.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(113) {\n        animation-delay: 11.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(114) {\n        animation-delay: 11.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(115) {\n        animation-delay: 11.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(116) {\n        animation-delay: 11.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(117) {\n        animation-delay: 11.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(118) {\n        animation-delay: 11.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(119) {\n        animation-delay: 11.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(120) {\n        animation-delay: 12s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(121) {\n        animation-delay: 12.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(122) {\n        animation-delay: 12.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(123) {\n        animation-delay: 12.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(124) {\n        animation-delay: 12.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(125) {\n        animation-delay: 12.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(126) {\n        animation-delay: 12.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(127) {\n        animation-delay: 12.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(128) {\n        animation-delay: 12.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(129) {\n        animation-delay: 12.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(130) {\n        animation-delay: 13s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(131) {\n        animation-delay: 13.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(132) {\n        animation-delay: 13.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(133) {\n        animation-delay: 13.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(134) {\n        animation-delay: 13.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(135) {\n        animation-delay: 13.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(136) {\n        animation-delay: 13.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(137) {\n        animation-delay: 13.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(138) {\n        animation-delay: 13.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(139) {\n        animation-delay: 13.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(140) {\n        animation-delay: 14s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(141) {\n        animation-delay: 14.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(142) {\n        animation-delay: 14.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(143) {\n        animation-delay: 14.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(144) {\n        animation-delay: 14.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(145) {\n        animation-delay: 14.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(146) {\n        animation-delay: 14.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(147) {\n        animation-delay: 14.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(148) {\n        animation-delay: 14.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(149) {\n        animation-delay: 14.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(150) {\n        animation-delay: 15s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(151) {\n        animation-delay: 15.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(152) {\n        animation-delay: 15.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(153) {\n        animation-delay: 15.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(154) {\n        animation-delay: 15.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(155) {\n        animation-delay: 15.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(156) {\n        animation-delay: 15.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(157) {\n        animation-delay: 15.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(158) {\n        animation-delay: 15.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(159) {\n        animation-delay: 15.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(160) {\n        animation-delay: 16s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(161) {\n        animation-delay: 16.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(162) {\n        animation-delay: 16.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(163) {\n        animation-delay: 16.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(164) {\n        animation-delay: 16.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(165) {\n        animation-delay: 16.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(166) {\n        animation-delay: 16.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(167) {\n        animation-delay: 16.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(168) {\n        animation-delay: 16.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(169) {\n        animation-delay: 16.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(170) {\n        animation-delay: 17s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(171) {\n        animation-delay: 17.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(172) {\n        animation-delay: 17.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(173) {\n        animation-delay: 17.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(174) {\n        animation-delay: 17.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(175) {\n        animation-delay: 17.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(176) {\n        animation-delay: 17.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(177) {\n        animation-delay: 17.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(178) {\n        animation-delay: 17.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(179) {\n        animation-delay: 17.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(180) {\n        animation-delay: 18s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(181) {\n        animation-delay: 18.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(182) {\n        animation-delay: 18.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(183) {\n        animation-delay: 18.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(184) {\n        animation-delay: 18.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(185) {\n        animation-delay: 18.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(186) {\n        animation-delay: 18.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(187) {\n        animation-delay: 18.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(188) {\n        animation-delay: 18.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(189) {\n        animation-delay: 18.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(190) {\n        animation-delay: 19s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(191) {\n        animation-delay: 19.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(192) {\n        animation-delay: 19.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(193) {\n        animation-delay: 19.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(194) {\n        animation-delay: 19.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(195) {\n        animation-delay: 19.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(196) {\n        animation-delay: 19.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(197) {\n        animation-delay: 19.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(198) {\n        animation-delay: 19.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(199) {\n        animation-delay: 19.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(200) {\n        animation-delay: 20s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(201) {\n        animation-delay: 20.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(202) {\n        animation-delay: 20.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(203) {\n        animation-delay: 20.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(204) {\n        animation-delay: 20.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(205) {\n        animation-delay: 20.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(206) {\n        animation-delay: 20.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(207) {\n        animation-delay: 20.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(208) {\n        animation-delay: 20.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(209) {\n        animation-delay: 20.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(210) {\n        animation-delay: 21s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(211) {\n        animation-delay: 21.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(212) {\n        animation-delay: 21.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(213) {\n        animation-delay: 21.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(214) {\n        animation-delay: 21.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(215) {\n        animation-delay: 21.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(216) {\n        animation-delay: 21.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(217) {\n        animation-delay: 21.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(218) {\n        animation-delay: 21.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(219) {\n        animation-delay: 21.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(220) {\n        animation-delay: 22s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(221) {\n        animation-delay: 22.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(222) {\n        animation-delay: 22.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(223) {\n        animation-delay: 22.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(224) {\n        animation-delay: 22.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(225) {\n        animation-delay: 22.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(226) {\n        animation-delay: 22.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(227) {\n        animation-delay: 22.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(228) {\n        animation-delay: 22.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(229) {\n        animation-delay: 22.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(230) {\n        animation-delay: 23s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(231) {\n        animation-delay: 23.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(232) {\n        animation-delay: 23.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(233) {\n        animation-delay: 23.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(234) {\n        animation-delay: 23.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(235) {\n        animation-delay: 23.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(236) {\n        animation-delay: 23.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(237) {\n        animation-delay: 23.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(238) {\n        animation-delay: 23.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(239) {\n        animation-delay: 23.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(240) {\n        animation-delay: 24s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(241) {\n        animation-delay: 24.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(242) {\n        animation-delay: 24.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(243) {\n        animation-delay: 24.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(244) {\n        animation-delay: 24.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(245) {\n        animation-delay: 24.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(246) {\n        animation-delay: 24.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(247) {\n        animation-delay: 24.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(248) {\n        animation-delay: 24.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(249) {\n        animation-delay: 24.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(250) {\n        animation-delay: 25s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(251) {\n        animation-delay: 25.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(252) {\n        animation-delay: 25.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(253) {\n        animation-delay: 25.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(254) {\n        animation-delay: 25.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(255) {\n        animation-delay: 25.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(256) {\n        animation-delay: 25.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(257) {\n        animation-delay: 25.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(258) {\n        animation-delay: 25.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(259) {\n        animation-delay: 25.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(260) {\n        animation-delay: 26s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(261) {\n        animation-delay: 26.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(262) {\n        animation-delay: 26.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(263) {\n        animation-delay: 26.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(264) {\n        animation-delay: 26.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(265) {\n        animation-delay: 26.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(266) {\n        animation-delay: 26.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(267) {\n        animation-delay: 26.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(268) {\n        animation-delay: 26.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(269) {\n        animation-delay: 26.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(270) {\n        animation-delay: 27s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(271) {\n        animation-delay: 27.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(272) {\n        animation-delay: 27.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(273) {\n        animation-delay: 27.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(274) {\n        animation-delay: 27.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(275) {\n        animation-delay: 27.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(276) {\n        animation-delay: 27.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(277) {\n        animation-delay: 27.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(278) {\n        animation-delay: 27.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(279) {\n        animation-delay: 27.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(280) {\n        animation-delay: 28s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(281) {\n        animation-delay: 28.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(282) {\n        animation-delay: 28.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(283) {\n        animation-delay: 28.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(284) {\n        animation-delay: 28.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(285) {\n        animation-delay: 28.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(286) {\n        animation-delay: 28.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(287) {\n        animation-delay: 28.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(288) {\n        animation-delay: 28.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(289) {\n        animation-delay: 28.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(290) {\n        animation-delay: 29s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(291) {\n        animation-delay: 29.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(292) {\n        animation-delay: 29.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(293) {\n        animation-delay: 29.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(294) {\n        animation-delay: 29.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(295) {\n        animation-delay: 29.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(296) {\n        animation-delay: 29.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(297) {\n        animation-delay: 29.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(298) {\n        animation-delay: 29.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(299) {\n        animation-delay: 29.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(300) {\n        animation-delay: 30s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(301) {\n        animation-delay: 30.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(302) {\n        animation-delay: 30.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(303) {\n        animation-delay: 30.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(304) {\n        animation-delay: 30.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(305) {\n        animation-delay: 30.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(306) {\n        animation-delay: 30.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(307) {\n        animation-delay: 30.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(308) {\n        animation-delay: 30.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(309) {\n        animation-delay: 30.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(310) {\n        animation-delay: 31s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(311) {\n        animation-delay: 31.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(312) {\n        animation-delay: 31.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(313) {\n        animation-delay: 31.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(314) {\n        animation-delay: 31.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(315) {\n        animation-delay: 31.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(316) {\n        animation-delay: 31.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(317) {\n        animation-delay: 31.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(318) {\n        animation-delay: 31.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(319) {\n        animation-delay: 31.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(320) {\n        animation-delay: 32s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(321) {\n        animation-delay: 32.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(322) {\n        animation-delay: 32.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(323) {\n        animation-delay: 32.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(324) {\n        animation-delay: 32.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(325) {\n        animation-delay: 32.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(326) {\n        animation-delay: 32.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(327) {\n        animation-delay: 32.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(328) {\n        animation-delay: 32.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(329) {\n        animation-delay: 32.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(330) {\n        animation-delay: 33s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(331) {\n        animation-delay: 33.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(332) {\n        animation-delay: 33.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(333) {\n        animation-delay: 33.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(334) {\n        animation-delay: 33.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(335) {\n        animation-delay: 33.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(336) {\n        animation-delay: 33.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(337) {\n        animation-delay: 33.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(338) {\n        animation-delay: 33.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(339) {\n        animation-delay: 33.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(340) {\n        animation-delay: 34s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(341) {\n        animation-delay: 34.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(342) {\n        animation-delay: 34.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(343) {\n        animation-delay: 34.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(344) {\n        animation-delay: 34.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(345) {\n        animation-delay: 34.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(346) {\n        animation-delay: 34.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(347) {\n        animation-delay: 34.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(348) {\n        animation-delay: 34.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(349) {\n        animation-delay: 34.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(350) {\n        animation-delay: 35s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(351) {\n        animation-delay: 35.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(352) {\n        animation-delay: 35.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(353) {\n        animation-delay: 35.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(354) {\n        animation-delay: 35.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(355) {\n        animation-delay: 35.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(356) {\n        animation-delay: 35.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(357) {\n        animation-delay: 35.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(358) {\n        animation-delay: 35.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(359) {\n        animation-delay: 35.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(360) {\n        animation-delay: 36s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(361) {\n        animation-delay: 36.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(362) {\n        animation-delay: 36.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(363) {\n        animation-delay: 36.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(364) {\n        animation-delay: 36.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(365) {\n        animation-delay: 36.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(366) {\n        animation-delay: 36.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(367) {\n        animation-delay: 36.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(368) {\n        animation-delay: 36.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(369) {\n        animation-delay: 36.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(370) {\n        animation-delay: 37s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(371) {\n        animation-delay: 37.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(372) {\n        animation-delay: 37.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(373) {\n        animation-delay: 37.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(374) {\n        animation-delay: 37.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(375) {\n        animation-delay: 37.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(376) {\n        animation-delay: 37.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(377) {\n        animation-delay: 37.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(378) {\n        animation-delay: 37.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(379) {\n        animation-delay: 37.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(380) {\n        animation-delay: 38s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(381) {\n        animation-delay: 38.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(382) {\n        animation-delay: 38.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(383) {\n        animation-delay: 38.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(384) {\n        animation-delay: 38.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(385) {\n        animation-delay: 38.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(386) {\n        animation-delay: 38.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(387) {\n        animation-delay: 38.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(388) {\n        animation-delay: 38.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(389) {\n        animation-delay: 38.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(390) {\n        animation-delay: 39s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(391) {\n        animation-delay: 39.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(392) {\n        animation-delay: 39.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(393) {\n        animation-delay: 39.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(394) {\n        animation-delay: 39.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(395) {\n        animation-delay: 39.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(396) {\n        animation-delay: 39.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(397) {\n        animation-delay: 39.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(398) {\n        animation-delay: 39.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(399) {\n        animation-delay: 39.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(400) {\n        animation-delay: 40s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(401) {\n        animation-delay: 40.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(402) {\n        animation-delay: 40.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(403) {\n        animation-delay: 40.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(404) {\n        animation-delay: 40.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(405) {\n        animation-delay: 40.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(406) {\n        animation-delay: 40.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(407) {\n        animation-delay: 40.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(408) {\n        animation-delay: 40.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(409) {\n        animation-delay: 40.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(410) {\n        animation-delay: 41s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(411) {\n        animation-delay: 41.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(412) {\n        animation-delay: 41.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(413) {\n        animation-delay: 41.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(414) {\n        animation-delay: 41.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(415) {\n        animation-delay: 41.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(416) {\n        animation-delay: 41.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(417) {\n        animation-delay: 41.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(418) {\n        animation-delay: 41.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(419) {\n        animation-delay: 41.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(420) {\n        animation-delay: 42s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(421) {\n        animation-delay: 42.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(422) {\n        animation-delay: 42.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(423) {\n        animation-delay: 42.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(424) {\n        animation-delay: 42.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(425) {\n        animation-delay: 42.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(426) {\n        animation-delay: 42.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(427) {\n        animation-delay: 42.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(428) {\n        animation-delay: 42.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(429) {\n        animation-delay: 42.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(430) {\n        animation-delay: 43s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(431) {\n        animation-delay: 43.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(432) {\n        animation-delay: 43.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(433) {\n        animation-delay: 43.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(434) {\n        animation-delay: 43.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(435) {\n        animation-delay: 43.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(436) {\n        animation-delay: 43.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(437) {\n        animation-delay: 43.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(438) {\n        animation-delay: 43.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(439) {\n        animation-delay: 43.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(440) {\n        animation-delay: 44s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(441) {\n        animation-delay: 44.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(442) {\n        animation-delay: 44.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(443) {\n        animation-delay: 44.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(444) {\n        animation-delay: 44.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(445) {\n        animation-delay: 44.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(446) {\n        animation-delay: 44.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(447) {\n        animation-delay: 44.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(448) {\n        animation-delay: 44.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(449) {\n        animation-delay: 44.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(450) {\n        animation-delay: 45s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(451) {\n        animation-delay: 45.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(452) {\n        animation-delay: 45.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(453) {\n        animation-delay: 45.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(454) {\n        animation-delay: 45.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(455) {\n        animation-delay: 45.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(456) {\n        animation-delay: 45.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(457) {\n        animation-delay: 45.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(458) {\n        animation-delay: 45.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(459) {\n        animation-delay: 45.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(460) {\n        animation-delay: 46s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(461) {\n        animation-delay: 46.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(462) {\n        animation-delay: 46.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(463) {\n        animation-delay: 46.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(464) {\n        animation-delay: 46.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(465) {\n        animation-delay: 46.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(466) {\n        animation-delay: 46.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(467) {\n        animation-delay: 46.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(468) {\n        animation-delay: 46.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(469) {\n        animation-delay: 46.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(470) {\n        animation-delay: 47s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(471) {\n        animation-delay: 47.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(472) {\n        animation-delay: 47.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(473) {\n        animation-delay: 47.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(474) {\n        animation-delay: 47.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(475) {\n        animation-delay: 47.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(476) {\n        animation-delay: 47.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(477) {\n        animation-delay: 47.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(478) {\n        animation-delay: 47.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(479) {\n        animation-delay: 47.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(480) {\n        animation-delay: 48s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(481) {\n        animation-delay: 48.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(482) {\n        animation-delay: 48.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(483) {\n        animation-delay: 48.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(484) {\n        animation-delay: 48.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(485) {\n        animation-delay: 48.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(486) {\n        animation-delay: 48.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(487) {\n        animation-delay: 48.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(488) {\n        animation-delay: 48.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(489) {\n        animation-delay: 48.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(490) {\n        animation-delay: 49s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(491) {\n        animation-delay: 49.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(492) {\n        animation-delay: 49.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(493) {\n        animation-delay: 49.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(494) {\n        animation-delay: 49.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(495) {\n        animation-delay: 49.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(496) {\n        animation-delay: 49.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(497) {\n        animation-delay: 49.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(498) {\n        animation-delay: 49.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(499) {\n        animation-delay: 49.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(500) {\n        animation-delay: 50s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(501) {\n        animation-delay: 50.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(502) {\n        animation-delay: 50.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(503) {\n        animation-delay: 50.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(504) {\n        animation-delay: 50.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(505) {\n        animation-delay: 50.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(506) {\n        animation-delay: 50.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(507) {\n        animation-delay: 50.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(508) {\n        animation-delay: 50.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(509) {\n        animation-delay: 50.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(510) {\n        animation-delay: 51s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(511) {\n        animation-delay: 51.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(512) {\n        animation-delay: 51.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(513) {\n        animation-delay: 51.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(514) {\n        animation-delay: 51.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(515) {\n        animation-delay: 51.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(516) {\n        animation-delay: 51.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(517) {\n        animation-delay: 51.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(518) {\n        animation-delay: 51.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(519) {\n        animation-delay: 51.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(520) {\n        animation-delay: 52s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(521) {\n        animation-delay: 52.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(522) {\n        animation-delay: 52.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(523) {\n        animation-delay: 52.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(524) {\n        animation-delay: 52.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(525) {\n        animation-delay: 52.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(526) {\n        animation-delay: 52.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(527) {\n        animation-delay: 52.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(528) {\n        animation-delay: 52.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(529) {\n        animation-delay: 52.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(530) {\n        animation-delay: 53s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(531) {\n        animation-delay: 53.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(532) {\n        animation-delay: 53.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(533) {\n        animation-delay: 53.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(534) {\n        animation-delay: 53.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(535) {\n        animation-delay: 53.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(536) {\n        animation-delay: 53.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(537) {\n        animation-delay: 53.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(538) {\n        animation-delay: 53.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(539) {\n        animation-delay: 53.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(540) {\n        animation-delay: 54s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(541) {\n        animation-delay: 54.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(542) {\n        animation-delay: 54.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(543) {\n        animation-delay: 54.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(544) {\n        animation-delay: 54.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(545) {\n        animation-delay: 54.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(546) {\n        animation-delay: 54.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(547) {\n        animation-delay: 54.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(548) {\n        animation-delay: 54.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(549) {\n        animation-delay: 54.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(550) {\n        animation-delay: 55s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(551) {\n        animation-delay: 55.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(552) {\n        animation-delay: 55.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(553) {\n        animation-delay: 55.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(554) {\n        animation-delay: 55.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(555) {\n        animation-delay: 55.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(556) {\n        animation-delay: 55.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(557) {\n        animation-delay: 55.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(558) {\n        animation-delay: 55.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(559) {\n        animation-delay: 55.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(560) {\n        animation-delay: 56s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(561) {\n        animation-delay: 56.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(562) {\n        animation-delay: 56.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(563) {\n        animation-delay: 56.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(564) {\n        animation-delay: 56.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(565) {\n        animation-delay: 56.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(566) {\n        animation-delay: 56.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(567) {\n        animation-delay: 56.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(568) {\n        animation-delay: 56.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(569) {\n        animation-delay: 56.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(570) {\n        animation-delay: 57s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(571) {\n        animation-delay: 57.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(572) {\n        animation-delay: 57.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(573) {\n        animation-delay: 57.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(574) {\n        animation-delay: 57.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(575) {\n        animation-delay: 57.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(576) {\n        animation-delay: 57.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(577) {\n        animation-delay: 57.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(578) {\n        animation-delay: 57.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(579) {\n        animation-delay: 57.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(580) {\n        animation-delay: 58s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(581) {\n        animation-delay: 58.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(582) {\n        animation-delay: 58.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(583) {\n        animation-delay: 58.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(584) {\n        animation-delay: 58.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(585) {\n        animation-delay: 58.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(586) {\n        animation-delay: 58.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(587) {\n        animation-delay: 58.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(588) {\n        animation-delay: 58.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(589) {\n        animation-delay: 58.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(590) {\n        animation-delay: 59s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(591) {\n        animation-delay: 59.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(592) {\n        animation-delay: 59.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(593) {\n        animation-delay: 59.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(594) {\n        animation-delay: 59.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(595) {\n        animation-delay: 59.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(596) {\n        animation-delay: 59.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(597) {\n        animation-delay: 59.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(598) {\n        animation-delay: 59.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(599) {\n        animation-delay: 59.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(600) {\n        animation-delay: 60s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(601) {\n        animation-delay: 60.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(602) {\n        animation-delay: 60.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(603) {\n        animation-delay: 60.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(604) {\n        animation-delay: 60.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(605) {\n        animation-delay: 60.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(606) {\n        animation-delay: 60.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(607) {\n        animation-delay: 60.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(608) {\n        animation-delay: 60.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(609) {\n        animation-delay: 60.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(610) {\n        animation-delay: 61s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(611) {\n        animation-delay: 61.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(612) {\n        animation-delay: 61.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(613) {\n        animation-delay: 61.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(614) {\n        animation-delay: 61.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(615) {\n        animation-delay: 61.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(616) {\n        animation-delay: 61.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(617) {\n        animation-delay: 61.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(618) {\n        animation-delay: 61.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(619) {\n        animation-delay: 61.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(620) {\n        animation-delay: 62s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(621) {\n        animation-delay: 62.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(622) {\n        animation-delay: 62.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(623) {\n        animation-delay: 62.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(624) {\n        animation-delay: 62.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(625) {\n        animation-delay: 62.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(626) {\n        animation-delay: 62.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(627) {\n        animation-delay: 62.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(628) {\n        animation-delay: 62.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(629) {\n        animation-delay: 62.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(630) {\n        animation-delay: 63s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(631) {\n        animation-delay: 63.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(632) {\n        animation-delay: 63.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(633) {\n        animation-delay: 63.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(634) {\n        animation-delay: 63.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(635) {\n        animation-delay: 63.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(636) {\n        animation-delay: 63.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(637) {\n        animation-delay: 63.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(638) {\n        animation-delay: 63.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(639) {\n        animation-delay: 63.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(640) {\n        animation-delay: 64s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(641) {\n        animation-delay: 64.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(642) {\n        animation-delay: 64.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(643) {\n        animation-delay: 64.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(644) {\n        animation-delay: 64.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(645) {\n        animation-delay: 64.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(646) {\n        animation-delay: 64.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(647) {\n        animation-delay: 64.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(648) {\n        animation-delay: 64.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(649) {\n        animation-delay: 64.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(650) {\n        animation-delay: 65s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(651) {\n        animation-delay: 65.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(652) {\n        animation-delay: 65.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(653) {\n        animation-delay: 65.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(654) {\n        animation-delay: 65.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(655) {\n        animation-delay: 65.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(656) {\n        animation-delay: 65.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(657) {\n        animation-delay: 65.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(658) {\n        animation-delay: 65.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(659) {\n        animation-delay: 65.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(660) {\n        animation-delay: 66s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(661) {\n        animation-delay: 66.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(662) {\n        animation-delay: 66.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(663) {\n        animation-delay: 66.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(664) {\n        animation-delay: 66.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(665) {\n        animation-delay: 66.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(666) {\n        animation-delay: 66.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(667) {\n        animation-delay: 66.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(668) {\n        animation-delay: 66.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(669) {\n        animation-delay: 66.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(670) {\n        animation-delay: 67s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(671) {\n        animation-delay: 67.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(672) {\n        animation-delay: 67.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(673) {\n        animation-delay: 67.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(674) {\n        animation-delay: 67.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(675) {\n        animation-delay: 67.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(676) {\n        animation-delay: 67.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(677) {\n        animation-delay: 67.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(678) {\n        animation-delay: 67.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(679) {\n        animation-delay: 67.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(680) {\n        animation-delay: 68s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(681) {\n        animation-delay: 68.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(682) {\n        animation-delay: 68.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(683) {\n        animation-delay: 68.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(684) {\n        animation-delay: 68.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(685) {\n        animation-delay: 68.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(686) {\n        animation-delay: 68.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(687) {\n        animation-delay: 68.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(688) {\n        animation-delay: 68.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(689) {\n        animation-delay: 68.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(690) {\n        animation-delay: 69s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(691) {\n        animation-delay: 69.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(692) {\n        animation-delay: 69.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(693) {\n        animation-delay: 69.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(694) {\n        animation-delay: 69.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(695) {\n        animation-delay: 69.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(696) {\n        animation-delay: 69.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(697) {\n        animation-delay: 69.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(698) {\n        animation-delay: 69.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(699) {\n        animation-delay: 69.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(700) {\n        animation-delay: 70s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(701) {\n        animation-delay: 70.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(702) {\n        animation-delay: 70.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(703) {\n        animation-delay: 70.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(704) {\n        animation-delay: 70.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(705) {\n        animation-delay: 70.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(706) {\n        animation-delay: 70.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(707) {\n        animation-delay: 70.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(708) {\n        animation-delay: 70.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(709) {\n        animation-delay: 70.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(710) {\n        animation-delay: 71s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(711) {\n        animation-delay: 71.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(712) {\n        animation-delay: 71.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(713) {\n        animation-delay: 71.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(714) {\n        animation-delay: 71.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(715) {\n        animation-delay: 71.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(716) {\n        animation-delay: 71.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(717) {\n        animation-delay: 71.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(718) {\n        animation-delay: 71.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(719) {\n        animation-delay: 71.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(720) {\n        animation-delay: 72s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(721) {\n        animation-delay: 72.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(722) {\n        animation-delay: 72.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(723) {\n        animation-delay: 72.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(724) {\n        animation-delay: 72.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(725) {\n        animation-delay: 72.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(726) {\n        animation-delay: 72.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(727) {\n        animation-delay: 72.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(728) {\n        animation-delay: 72.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(729) {\n        animation-delay: 72.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(730) {\n        animation-delay: 73s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(731) {\n        animation-delay: 73.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(732) {\n        animation-delay: 73.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(733) {\n        animation-delay: 73.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(734) {\n        animation-delay: 73.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(735) {\n        animation-delay: 73.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(736) {\n        animation-delay: 73.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(737) {\n        animation-delay: 73.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(738) {\n        animation-delay: 73.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(739) {\n        animation-delay: 73.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(740) {\n        animation-delay: 74s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(741) {\n        animation-delay: 74.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(742) {\n        animation-delay: 74.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(743) {\n        animation-delay: 74.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(744) {\n        animation-delay: 74.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(745) {\n        animation-delay: 74.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(746) {\n        animation-delay: 74.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(747) {\n        animation-delay: 74.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(748) {\n        animation-delay: 74.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(749) {\n        animation-delay: 74.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(750) {\n        animation-delay: 75s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(751) {\n        animation-delay: 75.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(752) {\n        animation-delay: 75.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(753) {\n        animation-delay: 75.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(754) {\n        animation-delay: 75.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(755) {\n        animation-delay: 75.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(756) {\n        animation-delay: 75.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(757) {\n        animation-delay: 75.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(758) {\n        animation-delay: 75.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(759) {\n        animation-delay: 75.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(760) {\n        animation-delay: 76s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(761) {\n        animation-delay: 76.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(762) {\n        animation-delay: 76.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(763) {\n        animation-delay: 76.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(764) {\n        animation-delay: 76.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(765) {\n        animation-delay: 76.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(766) {\n        animation-delay: 76.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(767) {\n        animation-delay: 76.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(768) {\n        animation-delay: 76.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(769) {\n        animation-delay: 76.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(770) {\n        animation-delay: 77s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(771) {\n        animation-delay: 77.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(772) {\n        animation-delay: 77.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(773) {\n        animation-delay: 77.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(774) {\n        animation-delay: 77.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(775) {\n        animation-delay: 77.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(776) {\n        animation-delay: 77.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(777) {\n        animation-delay: 77.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(778) {\n        animation-delay: 77.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(779) {\n        animation-delay: 77.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(780) {\n        animation-delay: 78s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(781) {\n        animation-delay: 78.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(782) {\n        animation-delay: 78.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(783) {\n        animation-delay: 78.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(784) {\n        animation-delay: 78.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(785) {\n        animation-delay: 78.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(786) {\n        animation-delay: 78.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(787) {\n        animation-delay: 78.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(788) {\n        animation-delay: 78.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(789) {\n        animation-delay: 78.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(790) {\n        animation-delay: 79s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(791) {\n        animation-delay: 79.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(792) {\n        animation-delay: 79.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(793) {\n        animation-delay: 79.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(794) {\n        animation-delay: 79.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(795) {\n        animation-delay: 79.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(796) {\n        animation-delay: 79.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(797) {\n        animation-delay: 79.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(798) {\n        animation-delay: 79.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(799) {\n        animation-delay: 79.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(800) {\n        animation-delay: 80s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(801) {\n        animation-delay: 80.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(802) {\n        animation-delay: 80.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(803) {\n        animation-delay: 80.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(804) {\n        animation-delay: 80.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(805) {\n        animation-delay: 80.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(806) {\n        animation-delay: 80.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(807) {\n        animation-delay: 80.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(808) {\n        animation-delay: 80.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(809) {\n        animation-delay: 80.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(810) {\n        animation-delay: 81s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(811) {\n        animation-delay: 81.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(812) {\n        animation-delay: 81.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(813) {\n        animation-delay: 81.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(814) {\n        animation-delay: 81.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(815) {\n        animation-delay: 81.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(816) {\n        animation-delay: 81.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(817) {\n        animation-delay: 81.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(818) {\n        animation-delay: 81.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(819) {\n        animation-delay: 81.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(820) {\n        animation-delay: 82s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(821) {\n        animation-delay: 82.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(822) {\n        animation-delay: 82.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(823) {\n        animation-delay: 82.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(824) {\n        animation-delay: 82.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(825) {\n        animation-delay: 82.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(826) {\n        animation-delay: 82.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(827) {\n        animation-delay: 82.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(828) {\n        animation-delay: 82.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(829) {\n        animation-delay: 82.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(830) {\n        animation-delay: 83s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(831) {\n        animation-delay: 83.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(832) {\n        animation-delay: 83.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(833) {\n        animation-delay: 83.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(834) {\n        animation-delay: 83.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(835) {\n        animation-delay: 83.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(836) {\n        animation-delay: 83.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(837) {\n        animation-delay: 83.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(838) {\n        animation-delay: 83.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(839) {\n        animation-delay: 83.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(840) {\n        animation-delay: 84s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(841) {\n        animation-delay: 84.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(842) {\n        animation-delay: 84.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(843) {\n        animation-delay: 84.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(844) {\n        animation-delay: 84.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(845) {\n        animation-delay: 84.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(846) {\n        animation-delay: 84.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(847) {\n        animation-delay: 84.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(848) {\n        animation-delay: 84.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(849) {\n        animation-delay: 84.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(850) {\n        animation-delay: 85s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(851) {\n        animation-delay: 85.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(852) {\n        animation-delay: 85.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(853) {\n        animation-delay: 85.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(854) {\n        animation-delay: 85.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(855) {\n        animation-delay: 85.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(856) {\n        animation-delay: 85.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(857) {\n        animation-delay: 85.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(858) {\n        animation-delay: 85.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(859) {\n        animation-delay: 85.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(860) {\n        animation-delay: 86s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(861) {\n        animation-delay: 86.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(862) {\n        animation-delay: 86.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(863) {\n        animation-delay: 86.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(864) {\n        animation-delay: 86.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(865) {\n        animation-delay: 86.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(866) {\n        animation-delay: 86.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(867) {\n        animation-delay: 86.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(868) {\n        animation-delay: 86.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(869) {\n        animation-delay: 86.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(870) {\n        animation-delay: 87s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(871) {\n        animation-delay: 87.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(872) {\n        animation-delay: 87.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(873) {\n        animation-delay: 87.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(874) {\n        animation-delay: 87.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(875) {\n        animation-delay: 87.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(876) {\n        animation-delay: 87.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(877) {\n        animation-delay: 87.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(878) {\n        animation-delay: 87.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(879) {\n        animation-delay: 87.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(880) {\n        animation-delay: 88s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(881) {\n        animation-delay: 88.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(882) {\n        animation-delay: 88.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(883) {\n        animation-delay: 88.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(884) {\n        animation-delay: 88.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(885) {\n        animation-delay: 88.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(886) {\n        animation-delay: 88.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(887) {\n        animation-delay: 88.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(888) {\n        animation-delay: 88.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(889) {\n        animation-delay: 88.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(890) {\n        animation-delay: 89s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(891) {\n        animation-delay: 89.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(892) {\n        animation-delay: 89.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(893) {\n        animation-delay: 89.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(894) {\n        animation-delay: 89.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(895) {\n        animation-delay: 89.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(896) {\n        animation-delay: 89.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(897) {\n        animation-delay: 89.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(898) {\n        animation-delay: 89.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(899) {\n        animation-delay: 89.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(900) {\n        animation-delay: 90s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(901) {\n        animation-delay: 90.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(902) {\n        animation-delay: 90.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(903) {\n        animation-delay: 90.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(904) {\n        animation-delay: 90.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(905) {\n        animation-delay: 90.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(906) {\n        animation-delay: 90.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(907) {\n        animation-delay: 90.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(908) {\n        animation-delay: 90.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(909) {\n        animation-delay: 90.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(910) {\n        animation-delay: 91s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(911) {\n        animation-delay: 91.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(912) {\n        animation-delay: 91.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(913) {\n        animation-delay: 91.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(914) {\n        animation-delay: 91.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(915) {\n        animation-delay: 91.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(916) {\n        animation-delay: 91.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(917) {\n        animation-delay: 91.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(918) {\n        animation-delay: 91.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(919) {\n        animation-delay: 91.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(920) {\n        animation-delay: 92s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(921) {\n        animation-delay: 92.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(922) {\n        animation-delay: 92.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(923) {\n        animation-delay: 92.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(924) {\n        animation-delay: 92.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(925) {\n        animation-delay: 92.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(926) {\n        animation-delay: 92.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(927) {\n        animation-delay: 92.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(928) {\n        animation-delay: 92.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(929) {\n        animation-delay: 92.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(930) {\n        animation-delay: 93s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(931) {\n        animation-delay: 93.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(932) {\n        animation-delay: 93.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(933) {\n        animation-delay: 93.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(934) {\n        animation-delay: 93.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(935) {\n        animation-delay: 93.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(936) {\n        animation-delay: 93.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(937) {\n        animation-delay: 93.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(938) {\n        animation-delay: 93.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(939) {\n        animation-delay: 93.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(940) {\n        animation-delay: 94s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(941) {\n        animation-delay: 94.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(942) {\n        animation-delay: 94.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(943) {\n        animation-delay: 94.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(944) {\n        animation-delay: 94.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(945) {\n        animation-delay: 94.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(946) {\n        animation-delay: 94.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(947) {\n        animation-delay: 94.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(948) {\n        animation-delay: 94.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(949) {\n        animation-delay: 94.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(950) {\n        animation-delay: 95s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(951) {\n        animation-delay: 95.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(952) {\n        animation-delay: 95.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(953) {\n        animation-delay: 95.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(954) {\n        animation-delay: 95.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(955) {\n        animation-delay: 95.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(956) {\n        animation-delay: 95.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(957) {\n        animation-delay: 95.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(958) {\n        animation-delay: 95.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(959) {\n        animation-delay: 95.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(960) {\n        animation-delay: 96s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(961) {\n        animation-delay: 96.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(962) {\n        animation-delay: 96.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(963) {\n        animation-delay: 96.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(964) {\n        animation-delay: 96.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(965) {\n        animation-delay: 96.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(966) {\n        animation-delay: 96.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(967) {\n        animation-delay: 96.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(968) {\n        animation-delay: 96.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(969) {\n        animation-delay: 96.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(970) {\n        animation-delay: 97s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(971) {\n        animation-delay: 97.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(972) {\n        animation-delay: 97.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(973) {\n        animation-delay: 97.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(974) {\n        animation-delay: 97.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(975) {\n        animation-delay: 97.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(976) {\n        animation-delay: 97.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(977) {\n        animation-delay: 97.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(978) {\n        animation-delay: 97.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(979) {\n        animation-delay: 97.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(980) {\n        animation-delay: 98s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(981) {\n        animation-delay: 98.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(982) {\n        animation-delay: 98.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(983) {\n        animation-delay: 98.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(984) {\n        animation-delay: 98.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(985) {\n        animation-delay: 98.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(986) {\n        animation-delay: 98.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(987) {\n        animation-delay: 98.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(988) {\n        animation-delay: 98.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(989) {\n        animation-delay: 98.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(990) {\n        animation-delay: 99s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(991) {\n        animation-delay: 99.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(992) {\n        animation-delay: 99.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(993) {\n        animation-delay: 99.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(994) {\n        animation-delay: 99.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(995) {\n        animation-delay: 99.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(996) {\n        animation-delay: 99.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(997) {\n        animation-delay: 99.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(998) {\n        animation-delay: 99.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(999) {\n        animation-delay: 99.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1000) {\n        animation-delay: 100s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1001) {\n        animation-delay: 100.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1002) {\n        animation-delay: 100.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1003) {\n        animation-delay: 100.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1004) {\n        animation-delay: 100.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1005) {\n        animation-delay: 100.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1006) {\n        animation-delay: 100.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1007) {\n        animation-delay: 100.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1008) {\n        animation-delay: 100.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1009) {\n        animation-delay: 100.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1010) {\n        animation-delay: 101s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1011) {\n        animation-delay: 101.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1012) {\n        animation-delay: 101.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1013) {\n        animation-delay: 101.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1014) {\n        animation-delay: 101.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1015) {\n        animation-delay: 101.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1016) {\n        animation-delay: 101.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1017) {\n        animation-delay: 101.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1018) {\n        animation-delay: 101.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1019) {\n        animation-delay: 101.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1020) {\n        animation-delay: 102s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1021) {\n        animation-delay: 102.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1022) {\n        animation-delay: 102.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1023) {\n        animation-delay: 102.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1024) {\n        animation-delay: 102.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1025) {\n        animation-delay: 102.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1026) {\n        animation-delay: 102.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1027) {\n        animation-delay: 102.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1028) {\n        animation-delay: 102.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1029) {\n        animation-delay: 102.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1030) {\n        animation-delay: 103s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1031) {\n        animation-delay: 103.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1032) {\n        animation-delay: 103.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1033) {\n        animation-delay: 103.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1034) {\n        animation-delay: 103.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1035) {\n        animation-delay: 103.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1036) {\n        animation-delay: 103.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1037) {\n        animation-delay: 103.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1038) {\n        animation-delay: 103.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1039) {\n        animation-delay: 103.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1040) {\n        animation-delay: 104s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1041) {\n        animation-delay: 104.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1042) {\n        animation-delay: 104.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1043) {\n        animation-delay: 104.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1044) {\n        animation-delay: 104.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1045) {\n        animation-delay: 104.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1046) {\n        animation-delay: 104.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1047) {\n        animation-delay: 104.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1048) {\n        animation-delay: 104.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1049) {\n        animation-delay: 104.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1050) {\n        animation-delay: 105s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1051) {\n        animation-delay: 105.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1052) {\n        animation-delay: 105.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1053) {\n        animation-delay: 105.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1054) {\n        animation-delay: 105.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1055) {\n        animation-delay: 105.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1056) {\n        animation-delay: 105.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1057) {\n        animation-delay: 105.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1058) {\n        animation-delay: 105.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1059) {\n        animation-delay: 105.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1060) {\n        animation-delay: 106s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1061) {\n        animation-delay: 106.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1062) {\n        animation-delay: 106.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1063) {\n        animation-delay: 106.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1064) {\n        animation-delay: 106.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1065) {\n        animation-delay: 106.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1066) {\n        animation-delay: 106.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1067) {\n        animation-delay: 106.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1068) {\n        animation-delay: 106.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1069) {\n        animation-delay: 106.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1070) {\n        animation-delay: 107s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1071) {\n        animation-delay: 107.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1072) {\n        animation-delay: 107.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1073) {\n        animation-delay: 107.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1074) {\n        animation-delay: 107.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1075) {\n        animation-delay: 107.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1076) {\n        animation-delay: 107.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1077) {\n        animation-delay: 107.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1078) {\n        animation-delay: 107.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1079) {\n        animation-delay: 107.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1080) {\n        animation-delay: 108s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1081) {\n        animation-delay: 108.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1082) {\n        animation-delay: 108.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1083) {\n        animation-delay: 108.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1084) {\n        animation-delay: 108.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1085) {\n        animation-delay: 108.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1086) {\n        animation-delay: 108.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1087) {\n        animation-delay: 108.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1088) {\n        animation-delay: 108.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1089) {\n        animation-delay: 108.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1090) {\n        animation-delay: 109s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1091) {\n        animation-delay: 109.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1092) {\n        animation-delay: 109.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1093) {\n        animation-delay: 109.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1094) {\n        animation-delay: 109.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1095) {\n        animation-delay: 109.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1096) {\n        animation-delay: 109.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1097) {\n        animation-delay: 109.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1098) {\n        animation-delay: 109.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1099) {\n        animation-delay: 109.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1100) {\n        animation-delay: 110s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1101) {\n        animation-delay: 110.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1102) {\n        animation-delay: 110.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1103) {\n        animation-delay: 110.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1104) {\n        animation-delay: 110.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1105) {\n        animation-delay: 110.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1106) {\n        animation-delay: 110.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1107) {\n        animation-delay: 110.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1108) {\n        animation-delay: 110.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1109) {\n        animation-delay: 110.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1110) {\n        animation-delay: 111s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1111) {\n        animation-delay: 111.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1112) {\n        animation-delay: 111.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1113) {\n        animation-delay: 111.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1114) {\n        animation-delay: 111.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1115) {\n        animation-delay: 111.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1116) {\n        animation-delay: 111.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1117) {\n        animation-delay: 111.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1118) {\n        animation-delay: 111.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1119) {\n        animation-delay: 111.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1120) {\n        animation-delay: 112s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1121) {\n        animation-delay: 112.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1122) {\n        animation-delay: 112.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1123) {\n        animation-delay: 112.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1124) {\n        animation-delay: 112.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1125) {\n        animation-delay: 112.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1126) {\n        animation-delay: 112.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1127) {\n        animation-delay: 112.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1128) {\n        animation-delay: 112.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1129) {\n        animation-delay: 112.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1130) {\n        animation-delay: 113s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1131) {\n        animation-delay: 113.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1132) {\n        animation-delay: 113.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1133) {\n        animation-delay: 113.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1134) {\n        animation-delay: 113.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1135) {\n        animation-delay: 113.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1136) {\n        animation-delay: 113.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1137) {\n        animation-delay: 113.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1138) {\n        animation-delay: 113.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1139) {\n        animation-delay: 113.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1140) {\n        animation-delay: 114s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1141) {\n        animation-delay: 114.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1142) {\n        animation-delay: 114.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1143) {\n        animation-delay: 114.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1144) {\n        animation-delay: 114.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1145) {\n        animation-delay: 114.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1146) {\n        animation-delay: 114.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1147) {\n        animation-delay: 114.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1148) {\n        animation-delay: 114.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1149) {\n        animation-delay: 114.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1150) {\n        animation-delay: 115s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1151) {\n        animation-delay: 115.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1152) {\n        animation-delay: 115.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1153) {\n        animation-delay: 115.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1154) {\n        animation-delay: 115.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1155) {\n        animation-delay: 115.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1156) {\n        animation-delay: 115.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1157) {\n        animation-delay: 115.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1158) {\n        animation-delay: 115.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1159) {\n        animation-delay: 115.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1160) {\n        animation-delay: 116s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1161) {\n        animation-delay: 116.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1162) {\n        animation-delay: 116.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1163) {\n        animation-delay: 116.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1164) {\n        animation-delay: 116.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1165) {\n        animation-delay: 116.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1166) {\n        animation-delay: 116.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1167) {\n        animation-delay: 116.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1168) {\n        animation-delay: 116.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1169) {\n        animation-delay: 116.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1170) {\n        animation-delay: 117s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1171) {\n        animation-delay: 117.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1172) {\n        animation-delay: 117.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1173) {\n        animation-delay: 117.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1174) {\n        animation-delay: 117.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1175) {\n        animation-delay: 117.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1176) {\n        animation-delay: 117.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1177) {\n        animation-delay: 117.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1178) {\n        animation-delay: 117.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1179) {\n        animation-delay: 117.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1180) {\n        animation-delay: 118s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1181) {\n        animation-delay: 118.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1182) {\n        animation-delay: 118.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1183) {\n        animation-delay: 118.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1184) {\n        animation-delay: 118.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1185) {\n        animation-delay: 118.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1186) {\n        animation-delay: 118.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1187) {\n        animation-delay: 118.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1188) {\n        animation-delay: 118.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1189) {\n        animation-delay: 118.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1190) {\n        animation-delay: 119s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1191) {\n        animation-delay: 119.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1192) {\n        animation-delay: 119.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1193) {\n        animation-delay: 119.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1194) {\n        animation-delay: 119.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1195) {\n        animation-delay: 119.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1196) {\n        animation-delay: 119.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1197) {\n        animation-delay: 119.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1198) {\n        animation-delay: 119.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1199) {\n        animation-delay: 119.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1200) {\n        animation-delay: 120s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1201) {\n        animation-delay: 120.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1202) {\n        animation-delay: 120.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1203) {\n        animation-delay: 120.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1204) {\n        animation-delay: 120.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1205) {\n        animation-delay: 120.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1206) {\n        animation-delay: 120.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1207) {\n        animation-delay: 120.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1208) {\n        animation-delay: 120.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1209) {\n        animation-delay: 120.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1210) {\n        animation-delay: 121s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1211) {\n        animation-delay: 121.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1212) {\n        animation-delay: 121.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1213) {\n        animation-delay: 121.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1214) {\n        animation-delay: 121.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1215) {\n        animation-delay: 121.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1216) {\n        animation-delay: 121.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1217) {\n        animation-delay: 121.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1218) {\n        animation-delay: 121.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1219) {\n        animation-delay: 121.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1220) {\n        animation-delay: 122s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1221) {\n        animation-delay: 122.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1222) {\n        animation-delay: 122.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1223) {\n        animation-delay: 122.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1224) {\n        animation-delay: 122.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1225) {\n        animation-delay: 122.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1226) {\n        animation-delay: 122.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1227) {\n        animation-delay: 122.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1228) {\n        animation-delay: 122.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1229) {\n        animation-delay: 122.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1230) {\n        animation-delay: 123s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1231) {\n        animation-delay: 123.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1232) {\n        animation-delay: 123.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1233) {\n        animation-delay: 123.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1234) {\n        animation-delay: 123.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1235) {\n        animation-delay: 123.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1236) {\n        animation-delay: 123.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1237) {\n        animation-delay: 123.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1238) {\n        animation-delay: 123.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1239) {\n        animation-delay: 123.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1240) {\n        animation-delay: 124s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1241) {\n        animation-delay: 124.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1242) {\n        animation-delay: 124.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1243) {\n        animation-delay: 124.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1244) {\n        animation-delay: 124.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1245) {\n        animation-delay: 124.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1246) {\n        animation-delay: 124.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1247) {\n        animation-delay: 124.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1248) {\n        animation-delay: 124.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1249) {\n        animation-delay: 124.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1250) {\n        animation-delay: 125s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1251) {\n        animation-delay: 125.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1252) {\n        animation-delay: 125.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1253) {\n        animation-delay: 125.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1254) {\n        animation-delay: 125.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1255) {\n        animation-delay: 125.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1256) {\n        animation-delay: 125.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1257) {\n        animation-delay: 125.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1258) {\n        animation-delay: 125.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1259) {\n        animation-delay: 125.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1260) {\n        animation-delay: 126s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1261) {\n        animation-delay: 126.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1262) {\n        animation-delay: 126.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1263) {\n        animation-delay: 126.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1264) {\n        animation-delay: 126.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1265) {\n        animation-delay: 126.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1266) {\n        animation-delay: 126.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1267) {\n        animation-delay: 126.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1268) {\n        animation-delay: 126.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1269) {\n        animation-delay: 126.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1270) {\n        animation-delay: 127s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1271) {\n        animation-delay: 127.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1272) {\n        animation-delay: 127.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1273) {\n        animation-delay: 127.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1274) {\n        animation-delay: 127.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1275) {\n        animation-delay: 127.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1276) {\n        animation-delay: 127.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1277) {\n        animation-delay: 127.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1278) {\n        animation-delay: 127.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1279) {\n        animation-delay: 127.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1280) {\n        animation-delay: 128s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1281) {\n        animation-delay: 128.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1282) {\n        animation-delay: 128.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1283) {\n        animation-delay: 128.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1284) {\n        animation-delay: 128.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1285) {\n        animation-delay: 128.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1286) {\n        animation-delay: 128.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1287) {\n        animation-delay: 128.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1288) {\n        animation-delay: 128.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1289) {\n        animation-delay: 128.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1290) {\n        animation-delay: 129s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1291) {\n        animation-delay: 129.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1292) {\n        animation-delay: 129.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1293) {\n        animation-delay: 129.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1294) {\n        animation-delay: 129.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1295) {\n        animation-delay: 129.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1296) {\n        animation-delay: 129.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1297) {\n        animation-delay: 129.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1298) {\n        animation-delay: 129.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1299) {\n        animation-delay: 129.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1300) {\n        animation-delay: 130s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1301) {\n        animation-delay: 130.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1302) {\n        animation-delay: 130.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1303) {\n        animation-delay: 130.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1304) {\n        animation-delay: 130.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1305) {\n        animation-delay: 130.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1306) {\n        animation-delay: 130.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1307) {\n        animation-delay: 130.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1308) {\n        animation-delay: 130.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1309) {\n        animation-delay: 130.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1310) {\n        animation-delay: 131s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1311) {\n        animation-delay: 131.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1312) {\n        animation-delay: 131.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1313) {\n        animation-delay: 131.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1314) {\n        animation-delay: 131.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1315) {\n        animation-delay: 131.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1316) {\n        animation-delay: 131.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1317) {\n        animation-delay: 131.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1318) {\n        animation-delay: 131.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1319) {\n        animation-delay: 131.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1320) {\n        animation-delay: 132s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1321) {\n        animation-delay: 132.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1322) {\n        animation-delay: 132.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1323) {\n        animation-delay: 132.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1324) {\n        animation-delay: 132.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1325) {\n        animation-delay: 132.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1326) {\n        animation-delay: 132.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1327) {\n        animation-delay: 132.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1328) {\n        animation-delay: 132.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1329) {\n        animation-delay: 132.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1330) {\n        animation-delay: 133s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1331) {\n        animation-delay: 133.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1332) {\n        animation-delay: 133.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1333) {\n        animation-delay: 133.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1334) {\n        animation-delay: 133.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1335) {\n        animation-delay: 133.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1336) {\n        animation-delay: 133.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1337) {\n        animation-delay: 133.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1338) {\n        animation-delay: 133.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1339) {\n        animation-delay: 133.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1340) {\n        animation-delay: 134s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1341) {\n        animation-delay: 134.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1342) {\n        animation-delay: 134.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1343) {\n        animation-delay: 134.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1344) {\n        animation-delay: 134.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1345) {\n        animation-delay: 134.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1346) {\n        animation-delay: 134.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1347) {\n        animation-delay: 134.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1348) {\n        animation-delay: 134.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1349) {\n        animation-delay: 134.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1350) {\n        animation-delay: 135s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1351) {\n        animation-delay: 135.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1352) {\n        animation-delay: 135.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1353) {\n        animation-delay: 135.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1354) {\n        animation-delay: 135.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1355) {\n        animation-delay: 135.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1356) {\n        animation-delay: 135.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1357) {\n        animation-delay: 135.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1358) {\n        animation-delay: 135.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1359) {\n        animation-delay: 135.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1360) {\n        animation-delay: 136s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1361) {\n        animation-delay: 136.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1362) {\n        animation-delay: 136.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1363) {\n        animation-delay: 136.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1364) {\n        animation-delay: 136.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1365) {\n        animation-delay: 136.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1366) {\n        animation-delay: 136.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1367) {\n        animation-delay: 136.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1368) {\n        animation-delay: 136.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1369) {\n        animation-delay: 136.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1370) {\n        animation-delay: 137s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1371) {\n        animation-delay: 137.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1372) {\n        animation-delay: 137.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1373) {\n        animation-delay: 137.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1374) {\n        animation-delay: 137.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1375) {\n        animation-delay: 137.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1376) {\n        animation-delay: 137.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1377) {\n        animation-delay: 137.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1378) {\n        animation-delay: 137.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1379) {\n        animation-delay: 137.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1380) {\n        animation-delay: 138s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1381) {\n        animation-delay: 138.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1382) {\n        animation-delay: 138.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1383) {\n        animation-delay: 138.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1384) {\n        animation-delay: 138.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1385) {\n        animation-delay: 138.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1386) {\n        animation-delay: 138.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1387) {\n        animation-delay: 138.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1388) {\n        animation-delay: 138.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1389) {\n        animation-delay: 138.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1390) {\n        animation-delay: 139s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1391) {\n        animation-delay: 139.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1392) {\n        animation-delay: 139.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1393) {\n        animation-delay: 139.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1394) {\n        animation-delay: 139.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1395) {\n        animation-delay: 139.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1396) {\n        animation-delay: 139.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1397) {\n        animation-delay: 139.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1398) {\n        animation-delay: 139.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1399) {\n        animation-delay: 139.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1400) {\n        animation-delay: 140s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1401) {\n        animation-delay: 140.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1402) {\n        animation-delay: 140.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1403) {\n        animation-delay: 140.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1404) {\n        animation-delay: 140.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1405) {\n        animation-delay: 140.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1406) {\n        animation-delay: 140.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1407) {\n        animation-delay: 140.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1408) {\n        animation-delay: 140.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1409) {\n        animation-delay: 140.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1410) {\n        animation-delay: 141s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1411) {\n        animation-delay: 141.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1412) {\n        animation-delay: 141.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1413) {\n        animation-delay: 141.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1414) {\n        animation-delay: 141.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1415) {\n        animation-delay: 141.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1416) {\n        animation-delay: 141.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1417) {\n        animation-delay: 141.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1418) {\n        animation-delay: 141.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1419) {\n        animation-delay: 141.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1420) {\n        animation-delay: 142s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1421) {\n        animation-delay: 142.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1422) {\n        animation-delay: 142.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1423) {\n        animation-delay: 142.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1424) {\n        animation-delay: 142.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1425) {\n        animation-delay: 142.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1426) {\n        animation-delay: 142.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1427) {\n        animation-delay: 142.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1428) {\n        animation-delay: 142.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1429) {\n        animation-delay: 142.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1430) {\n        animation-delay: 143s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1431) {\n        animation-delay: 143.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1432) {\n        animation-delay: 143.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1433) {\n        animation-delay: 143.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1434) {\n        animation-delay: 143.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1435) {\n        animation-delay: 143.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1436) {\n        animation-delay: 143.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1437) {\n        animation-delay: 143.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1438) {\n        animation-delay: 143.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1439) {\n        animation-delay: 143.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1440) {\n        animation-delay: 144s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1441) {\n        animation-delay: 144.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1442) {\n        animation-delay: 144.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1443) {\n        animation-delay: 144.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1444) {\n        animation-delay: 144.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1445) {\n        animation-delay: 144.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1446) {\n        animation-delay: 144.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1447) {\n        animation-delay: 144.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1448) {\n        animation-delay: 144.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1449) {\n        animation-delay: 144.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1450) {\n        animation-delay: 145s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1451) {\n        animation-delay: 145.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1452) {\n        animation-delay: 145.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1453) {\n        animation-delay: 145.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1454) {\n        animation-delay: 145.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1455) {\n        animation-delay: 145.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1456) {\n        animation-delay: 145.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1457) {\n        animation-delay: 145.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1458) {\n        animation-delay: 145.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1459) {\n        animation-delay: 145.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1460) {\n        animation-delay: 146s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1461) {\n        animation-delay: 146.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1462) {\n        animation-delay: 146.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1463) {\n        animation-delay: 146.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1464) {\n        animation-delay: 146.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1465) {\n        animation-delay: 146.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1466) {\n        animation-delay: 146.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1467) {\n        animation-delay: 146.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1468) {\n        animation-delay: 146.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1469) {\n        animation-delay: 146.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1470) {\n        animation-delay: 147s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1471) {\n        animation-delay: 147.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1472) {\n        animation-delay: 147.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1473) {\n        animation-delay: 147.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1474) {\n        animation-delay: 147.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1475) {\n        animation-delay: 147.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1476) {\n        animation-delay: 147.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1477) {\n        animation-delay: 147.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1478) {\n        animation-delay: 147.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1479) {\n        animation-delay: 147.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1480) {\n        animation-delay: 148s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1481) {\n        animation-delay: 148.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1482) {\n        animation-delay: 148.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1483) {\n        animation-delay: 148.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1484) {\n        animation-delay: 148.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1485) {\n        animation-delay: 148.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1486) {\n        animation-delay: 148.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1487) {\n        animation-delay: 148.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1488) {\n        animation-delay: 148.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1489) {\n        animation-delay: 148.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1490) {\n        animation-delay: 149s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1491) {\n        animation-delay: 149.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1492) {\n        animation-delay: 149.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1493) {\n        animation-delay: 149.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1494) {\n        animation-delay: 149.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1495) {\n        animation-delay: 149.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1496) {\n        animation-delay: 149.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1497) {\n        animation-delay: 149.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1498) {\n        animation-delay: 149.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1499) {\n        animation-delay: 149.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1500) {\n        animation-delay: 150s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1501) {\n        animation-delay: 150.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1502) {\n        animation-delay: 150.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1503) {\n        animation-delay: 150.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1504) {\n        animation-delay: 150.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1505) {\n        animation-delay: 150.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1506) {\n        animation-delay: 150.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1507) {\n        animation-delay: 150.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1508) {\n        animation-delay: 150.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1509) {\n        animation-delay: 150.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1510) {\n        animation-delay: 151s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1511) {\n        animation-delay: 151.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1512) {\n        animation-delay: 151.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1513) {\n        animation-delay: 151.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1514) {\n        animation-delay: 151.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1515) {\n        animation-delay: 151.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1516) {\n        animation-delay: 151.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1517) {\n        animation-delay: 151.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1518) {\n        animation-delay: 151.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1519) {\n        animation-delay: 151.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1520) {\n        animation-delay: 152s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1521) {\n        animation-delay: 152.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1522) {\n        animation-delay: 152.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1523) {\n        animation-delay: 152.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1524) {\n        animation-delay: 152.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1525) {\n        animation-delay: 152.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1526) {\n        animation-delay: 152.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1527) {\n        animation-delay: 152.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1528) {\n        animation-delay: 152.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1529) {\n        animation-delay: 152.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1530) {\n        animation-delay: 153s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1531) {\n        animation-delay: 153.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1532) {\n        animation-delay: 153.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1533) {\n        animation-delay: 153.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1534) {\n        animation-delay: 153.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1535) {\n        animation-delay: 153.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1536) {\n        animation-delay: 153.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1537) {\n        animation-delay: 153.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1538) {\n        animation-delay: 153.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1539) {\n        animation-delay: 153.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1540) {\n        animation-delay: 154s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1541) {\n        animation-delay: 154.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1542) {\n        animation-delay: 154.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1543) {\n        animation-delay: 154.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1544) {\n        animation-delay: 154.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1545) {\n        animation-delay: 154.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1546) {\n        animation-delay: 154.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1547) {\n        animation-delay: 154.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1548) {\n        animation-delay: 154.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1549) {\n        animation-delay: 154.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1550) {\n        animation-delay: 155s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1551) {\n        animation-delay: 155.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1552) {\n        animation-delay: 155.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1553) {\n        animation-delay: 155.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1554) {\n        animation-delay: 155.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1555) {\n        animation-delay: 155.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1556) {\n        animation-delay: 155.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1557) {\n        animation-delay: 155.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1558) {\n        animation-delay: 155.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1559) {\n        animation-delay: 155.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1560) {\n        animation-delay: 156s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1561) {\n        animation-delay: 156.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1562) {\n        animation-delay: 156.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1563) {\n        animation-delay: 156.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1564) {\n        animation-delay: 156.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1565) {\n        animation-delay: 156.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1566) {\n        animation-delay: 156.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1567) {\n        animation-delay: 156.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1568) {\n        animation-delay: 156.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1569) {\n        animation-delay: 156.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1570) {\n        animation-delay: 157s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1571) {\n        animation-delay: 157.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1572) {\n        animation-delay: 157.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1573) {\n        animation-delay: 157.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1574) {\n        animation-delay: 157.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1575) {\n        animation-delay: 157.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1576) {\n        animation-delay: 157.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1577) {\n        animation-delay: 157.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1578) {\n        animation-delay: 157.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1579) {\n        animation-delay: 157.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1580) {\n        animation-delay: 158s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1581) {\n        animation-delay: 158.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1582) {\n        animation-delay: 158.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1583) {\n        animation-delay: 158.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1584) {\n        animation-delay: 158.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1585) {\n        animation-delay: 158.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1586) {\n        animation-delay: 158.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1587) {\n        animation-delay: 158.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1588) {\n        animation-delay: 158.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1589) {\n        animation-delay: 158.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1590) {\n        animation-delay: 159s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1591) {\n        animation-delay: 159.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1592) {\n        animation-delay: 159.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1593) {\n        animation-delay: 159.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1594) {\n        animation-delay: 159.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1595) {\n        animation-delay: 159.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1596) {\n        animation-delay: 159.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1597) {\n        animation-delay: 159.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1598) {\n        animation-delay: 159.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1599) {\n        animation-delay: 159.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1600) {\n        animation-delay: 160s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1601) {\n        animation-delay: 160.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1602) {\n        animation-delay: 160.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1603) {\n        animation-delay: 160.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1604) {\n        animation-delay: 160.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1605) {\n        animation-delay: 160.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1606) {\n        animation-delay: 160.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1607) {\n        animation-delay: 160.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1608) {\n        animation-delay: 160.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1609) {\n        animation-delay: 160.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1610) {\n        animation-delay: 161s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1611) {\n        animation-delay: 161.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1612) {\n        animation-delay: 161.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1613) {\n        animation-delay: 161.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1614) {\n        animation-delay: 161.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1615) {\n        animation-delay: 161.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1616) {\n        animation-delay: 161.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1617) {\n        animation-delay: 161.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1618) {\n        animation-delay: 161.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1619) {\n        animation-delay: 161.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1620) {\n        animation-delay: 162s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1621) {\n        animation-delay: 162.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1622) {\n        animation-delay: 162.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1623) {\n        animation-delay: 162.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1624) {\n        animation-delay: 162.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1625) {\n        animation-delay: 162.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1626) {\n        animation-delay: 162.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1627) {\n        animation-delay: 162.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1628) {\n        animation-delay: 162.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1629) {\n        animation-delay: 162.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1630) {\n        animation-delay: 163s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1631) {\n        animation-delay: 163.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1632) {\n        animation-delay: 163.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1633) {\n        animation-delay: 163.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1634) {\n        animation-delay: 163.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1635) {\n        animation-delay: 163.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1636) {\n        animation-delay: 163.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1637) {\n        animation-delay: 163.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1638) {\n        animation-delay: 163.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1639) {\n        animation-delay: 163.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1640) {\n        animation-delay: 164s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1641) {\n        animation-delay: 164.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1642) {\n        animation-delay: 164.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1643) {\n        animation-delay: 164.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1644) {\n        animation-delay: 164.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1645) {\n        animation-delay: 164.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1646) {\n        animation-delay: 164.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1647) {\n        animation-delay: 164.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1648) {\n        animation-delay: 164.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1649) {\n        animation-delay: 164.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1650) {\n        animation-delay: 165s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1651) {\n        animation-delay: 165.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1652) {\n        animation-delay: 165.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1653) {\n        animation-delay: 165.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1654) {\n        animation-delay: 165.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1655) {\n        animation-delay: 165.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1656) {\n        animation-delay: 165.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1657) {\n        animation-delay: 165.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1658) {\n        animation-delay: 165.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1659) {\n        animation-delay: 165.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1660) {\n        animation-delay: 166s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1661) {\n        animation-delay: 166.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1662) {\n        animation-delay: 166.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1663) {\n        animation-delay: 166.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1664) {\n        animation-delay: 166.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1665) {\n        animation-delay: 166.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1666) {\n        animation-delay: 166.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1667) {\n        animation-delay: 166.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1668) {\n        animation-delay: 166.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1669) {\n        animation-delay: 166.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1670) {\n        animation-delay: 167s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1671) {\n        animation-delay: 167.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1672) {\n        animation-delay: 167.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1673) {\n        animation-delay: 167.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1674) {\n        animation-delay: 167.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1675) {\n        animation-delay: 167.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1676) {\n        animation-delay: 167.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1677) {\n        animation-delay: 167.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1678) {\n        animation-delay: 167.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1679) {\n        animation-delay: 167.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1680) {\n        animation-delay: 168s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1681) {\n        animation-delay: 168.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1682) {\n        animation-delay: 168.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1683) {\n        animation-delay: 168.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1684) {\n        animation-delay: 168.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1685) {\n        animation-delay: 168.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1686) {\n        animation-delay: 168.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1687) {\n        animation-delay: 168.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1688) {\n        animation-delay: 168.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1689) {\n        animation-delay: 168.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1690) {\n        animation-delay: 169s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1691) {\n        animation-delay: 169.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1692) {\n        animation-delay: 169.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1693) {\n        animation-delay: 169.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1694) {\n        animation-delay: 169.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1695) {\n        animation-delay: 169.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1696) {\n        animation-delay: 169.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1697) {\n        animation-delay: 169.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1698) {\n        animation-delay: 169.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1699) {\n        animation-delay: 169.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1700) {\n        animation-delay: 170s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1701) {\n        animation-delay: 170.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1702) {\n        animation-delay: 170.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1703) {\n        animation-delay: 170.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1704) {\n        animation-delay: 170.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1705) {\n        animation-delay: 170.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1706) {\n        animation-delay: 170.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1707) {\n        animation-delay: 170.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1708) {\n        animation-delay: 170.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1709) {\n        animation-delay: 170.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1710) {\n        animation-delay: 171s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1711) {\n        animation-delay: 171.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1712) {\n        animation-delay: 171.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1713) {\n        animation-delay: 171.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1714) {\n        animation-delay: 171.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1715) {\n        animation-delay: 171.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1716) {\n        animation-delay: 171.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1717) {\n        animation-delay: 171.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1718) {\n        animation-delay: 171.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1719) {\n        animation-delay: 171.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1720) {\n        animation-delay: 172s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1721) {\n        animation-delay: 172.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1722) {\n        animation-delay: 172.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1723) {\n        animation-delay: 172.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1724) {\n        animation-delay: 172.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1725) {\n        animation-delay: 172.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1726) {\n        animation-delay: 172.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1727) {\n        animation-delay: 172.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1728) {\n        animation-delay: 172.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1729) {\n        animation-delay: 172.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1730) {\n        animation-delay: 173s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1731) {\n        animation-delay: 173.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1732) {\n        animation-delay: 173.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1733) {\n        animation-delay: 173.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1734) {\n        animation-delay: 173.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1735) {\n        animation-delay: 173.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1736) {\n        animation-delay: 173.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1737) {\n        animation-delay: 173.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1738) {\n        animation-delay: 173.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1739) {\n        animation-delay: 173.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1740) {\n        animation-delay: 174s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1741) {\n        animation-delay: 174.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1742) {\n        animation-delay: 174.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1743) {\n        animation-delay: 174.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1744) {\n        animation-delay: 174.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1745) {\n        animation-delay: 174.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1746) {\n        animation-delay: 174.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1747) {\n        animation-delay: 174.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1748) {\n        animation-delay: 174.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1749) {\n        animation-delay: 174.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1750) {\n        animation-delay: 175s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1751) {\n        animation-delay: 175.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1752) {\n        animation-delay: 175.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1753) {\n        animation-delay: 175.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1754) {\n        animation-delay: 175.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1755) {\n        animation-delay: 175.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1756) {\n        animation-delay: 175.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1757) {\n        animation-delay: 175.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1758) {\n        animation-delay: 175.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1759) {\n        animation-delay: 175.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1760) {\n        animation-delay: 176s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1761) {\n        animation-delay: 176.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1762) {\n        animation-delay: 176.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1763) {\n        animation-delay: 176.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1764) {\n        animation-delay: 176.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1765) {\n        animation-delay: 176.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1766) {\n        animation-delay: 176.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1767) {\n        animation-delay: 176.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1768) {\n        animation-delay: 176.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1769) {\n        animation-delay: 176.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1770) {\n        animation-delay: 177s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1771) {\n        animation-delay: 177.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1772) {\n        animation-delay: 177.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1773) {\n        animation-delay: 177.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1774) {\n        animation-delay: 177.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1775) {\n        animation-delay: 177.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1776) {\n        animation-delay: 177.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1777) {\n        animation-delay: 177.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1778) {\n        animation-delay: 177.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1779) {\n        animation-delay: 177.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1780) {\n        animation-delay: 178s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1781) {\n        animation-delay: 178.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1782) {\n        animation-delay: 178.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1783) {\n        animation-delay: 178.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1784) {\n        animation-delay: 178.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1785) {\n        animation-delay: 178.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1786) {\n        animation-delay: 178.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1787) {\n        animation-delay: 178.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1788) {\n        animation-delay: 178.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1789) {\n        animation-delay: 178.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1790) {\n        animation-delay: 179s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1791) {\n        animation-delay: 179.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1792) {\n        animation-delay: 179.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1793) {\n        animation-delay: 179.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1794) {\n        animation-delay: 179.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1795) {\n        animation-delay: 179.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1796) {\n        animation-delay: 179.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1797) {\n        animation-delay: 179.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1798) {\n        animation-delay: 179.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1799) {\n        animation-delay: 179.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1800) {\n        animation-delay: 180s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1801) {\n        animation-delay: 180.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1802) {\n        animation-delay: 180.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1803) {\n        animation-delay: 180.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1804) {\n        animation-delay: 180.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1805) {\n        animation-delay: 180.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1806) {\n        animation-delay: 180.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1807) {\n        animation-delay: 180.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1808) {\n        animation-delay: 180.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1809) {\n        animation-delay: 180.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1810) {\n        animation-delay: 181s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1811) {\n        animation-delay: 181.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1812) {\n        animation-delay: 181.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1813) {\n        animation-delay: 181.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1814) {\n        animation-delay: 181.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1815) {\n        animation-delay: 181.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1816) {\n        animation-delay: 181.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1817) {\n        animation-delay: 181.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1818) {\n        animation-delay: 181.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1819) {\n        animation-delay: 181.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1820) {\n        animation-delay: 182s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1821) {\n        animation-delay: 182.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1822) {\n        animation-delay: 182.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1823) {\n        animation-delay: 182.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1824) {\n        animation-delay: 182.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1825) {\n        animation-delay: 182.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1826) {\n        animation-delay: 182.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1827) {\n        animation-delay: 182.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1828) {\n        animation-delay: 182.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1829) {\n        animation-delay: 182.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1830) {\n        animation-delay: 183s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1831) {\n        animation-delay: 183.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1832) {\n        animation-delay: 183.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1833) {\n        animation-delay: 183.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1834) {\n        animation-delay: 183.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1835) {\n        animation-delay: 183.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1836) {\n        animation-delay: 183.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1837) {\n        animation-delay: 183.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1838) {\n        animation-delay: 183.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1839) {\n        animation-delay: 183.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1840) {\n        animation-delay: 184s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1841) {\n        animation-delay: 184.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1842) {\n        animation-delay: 184.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1843) {\n        animation-delay: 184.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1844) {\n        animation-delay: 184.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1845) {\n        animation-delay: 184.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1846) {\n        animation-delay: 184.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1847) {\n        animation-delay: 184.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1848) {\n        animation-delay: 184.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1849) {\n        animation-delay: 184.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1850) {\n        animation-delay: 185s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1851) {\n        animation-delay: 185.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1852) {\n        animation-delay: 185.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1853) {\n        animation-delay: 185.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1854) {\n        animation-delay: 185.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1855) {\n        animation-delay: 185.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1856) {\n        animation-delay: 185.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1857) {\n        animation-delay: 185.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1858) {\n        animation-delay: 185.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1859) {\n        animation-delay: 185.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1860) {\n        animation-delay: 186s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1861) {\n        animation-delay: 186.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1862) {\n        animation-delay: 186.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1863) {\n        animation-delay: 186.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1864) {\n        animation-delay: 186.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1865) {\n        animation-delay: 186.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1866) {\n        animation-delay: 186.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1867) {\n        animation-delay: 186.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1868) {\n        animation-delay: 186.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1869) {\n        animation-delay: 186.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1870) {\n        animation-delay: 187s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1871) {\n        animation-delay: 187.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1872) {\n        animation-delay: 187.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1873) {\n        animation-delay: 187.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1874) {\n        animation-delay: 187.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1875) {\n        animation-delay: 187.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1876) {\n        animation-delay: 187.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1877) {\n        animation-delay: 187.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1878) {\n        animation-delay: 187.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1879) {\n        animation-delay: 187.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1880) {\n        animation-delay: 188s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1881) {\n        animation-delay: 188.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1882) {\n        animation-delay: 188.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1883) {\n        animation-delay: 188.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1884) {\n        animation-delay: 188.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1885) {\n        animation-delay: 188.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1886) {\n        animation-delay: 188.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1887) {\n        animation-delay: 188.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1888) {\n        animation-delay: 188.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1889) {\n        animation-delay: 188.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1890) {\n        animation-delay: 189s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1891) {\n        animation-delay: 189.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1892) {\n        animation-delay: 189.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1893) {\n        animation-delay: 189.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1894) {\n        animation-delay: 189.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1895) {\n        animation-delay: 189.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1896) {\n        animation-delay: 189.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1897) {\n        animation-delay: 189.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1898) {\n        animation-delay: 189.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1899) {\n        animation-delay: 189.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1900) {\n        animation-delay: 190s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1901) {\n        animation-delay: 190.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1902) {\n        animation-delay: 190.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1903) {\n        animation-delay: 190.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1904) {\n        animation-delay: 190.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1905) {\n        animation-delay: 190.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1906) {\n        animation-delay: 190.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1907) {\n        animation-delay: 190.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1908) {\n        animation-delay: 190.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1909) {\n        animation-delay: 190.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1910) {\n        animation-delay: 191s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1911) {\n        animation-delay: 191.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1912) {\n        animation-delay: 191.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1913) {\n        animation-delay: 191.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1914) {\n        animation-delay: 191.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1915) {\n        animation-delay: 191.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1916) {\n        animation-delay: 191.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1917) {\n        animation-delay: 191.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1918) {\n        animation-delay: 191.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1919) {\n        animation-delay: 191.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1920) {\n        animation-delay: 192s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1921) {\n        animation-delay: 192.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1922) {\n        animation-delay: 192.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1923) {\n        animation-delay: 192.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1924) {\n        animation-delay: 192.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1925) {\n        animation-delay: 192.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1926) {\n        animation-delay: 192.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1927) {\n        animation-delay: 192.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1928) {\n        animation-delay: 192.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1929) {\n        animation-delay: 192.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1930) {\n        animation-delay: 193s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1931) {\n        animation-delay: 193.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1932) {\n        animation-delay: 193.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1933) {\n        animation-delay: 193.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1934) {\n        animation-delay: 193.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1935) {\n        animation-delay: 193.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1936) {\n        animation-delay: 193.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1937) {\n        animation-delay: 193.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1938) {\n        animation-delay: 193.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1939) {\n        animation-delay: 193.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1940) {\n        animation-delay: 194s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1941) {\n        animation-delay: 194.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1942) {\n        animation-delay: 194.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1943) {\n        animation-delay: 194.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1944) {\n        animation-delay: 194.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1945) {\n        animation-delay: 194.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1946) {\n        animation-delay: 194.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1947) {\n        animation-delay: 194.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1948) {\n        animation-delay: 194.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1949) {\n        animation-delay: 194.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1950) {\n        animation-delay: 195s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1951) {\n        animation-delay: 195.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1952) {\n        animation-delay: 195.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1953) {\n        animation-delay: 195.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1954) {\n        animation-delay: 195.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1955) {\n        animation-delay: 195.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1956) {\n        animation-delay: 195.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1957) {\n        animation-delay: 195.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1958) {\n        animation-delay: 195.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1959) {\n        animation-delay: 195.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1960) {\n        animation-delay: 196s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1961) {\n        animation-delay: 196.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1962) {\n        animation-delay: 196.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1963) {\n        animation-delay: 196.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1964) {\n        animation-delay: 196.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1965) {\n        animation-delay: 196.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1966) {\n        animation-delay: 196.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1967) {\n        animation-delay: 196.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1968) {\n        animation-delay: 196.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1969) {\n        animation-delay: 196.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1970) {\n        animation-delay: 197s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1971) {\n        animation-delay: 197.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1972) {\n        animation-delay: 197.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1973) {\n        animation-delay: 197.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1974) {\n        animation-delay: 197.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1975) {\n        animation-delay: 197.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1976) {\n        animation-delay: 197.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1977) {\n        animation-delay: 197.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1978) {\n        animation-delay: 197.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1979) {\n        animation-delay: 197.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1980) {\n        animation-delay: 198s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1981) {\n        animation-delay: 198.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1982) {\n        animation-delay: 198.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1983) {\n        animation-delay: 198.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1984) {\n        animation-delay: 198.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1985) {\n        animation-delay: 198.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1986) {\n        animation-delay: 198.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1987) {\n        animation-delay: 198.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1988) {\n        animation-delay: 198.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1989) {\n        animation-delay: 198.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1990) {\n        animation-delay: 199s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1991) {\n        animation-delay: 199.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1992) {\n        animation-delay: 199.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1993) {\n        animation-delay: 199.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1994) {\n        animation-delay: 199.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1995) {\n        animation-delay: 199.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1996) {\n        animation-delay: 199.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1997) {\n        animation-delay: 199.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1998) {\n        animation-delay: 199.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(1999) {\n        animation-delay: 199.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2000) {\n        animation-delay: 200s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2001) {\n        animation-delay: 200.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2002) {\n        animation-delay: 200.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2003) {\n        animation-delay: 200.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2004) {\n        animation-delay: 200.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2005) {\n        animation-delay: 200.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2006) {\n        animation-delay: 200.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2007) {\n        animation-delay: 200.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2008) {\n        animation-delay: 200.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2009) {\n        animation-delay: 200.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2010) {\n        animation-delay: 201s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2011) {\n        animation-delay: 201.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2012) {\n        animation-delay: 201.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2013) {\n        animation-delay: 201.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2014) {\n        animation-delay: 201.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2015) {\n        animation-delay: 201.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2016) {\n        animation-delay: 201.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2017) {\n        animation-delay: 201.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2018) {\n        animation-delay: 201.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2019) {\n        animation-delay: 201.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2020) {\n        animation-delay: 202s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2021) {\n        animation-delay: 202.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2022) {\n        animation-delay: 202.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2023) {\n        animation-delay: 202.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2024) {\n        animation-delay: 202.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2025) {\n        animation-delay: 202.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2026) {\n        animation-delay: 202.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2027) {\n        animation-delay: 202.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2028) {\n        animation-delay: 202.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2029) {\n        animation-delay: 202.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2030) {\n        animation-delay: 203s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2031) {\n        animation-delay: 203.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2032) {\n        animation-delay: 203.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2033) {\n        animation-delay: 203.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2034) {\n        animation-delay: 203.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2035) {\n        animation-delay: 203.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2036) {\n        animation-delay: 203.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2037) {\n        animation-delay: 203.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2038) {\n        animation-delay: 203.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2039) {\n        animation-delay: 203.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2040) {\n        animation-delay: 204s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2041) {\n        animation-delay: 204.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2042) {\n        animation-delay: 204.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2043) {\n        animation-delay: 204.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2044) {\n        animation-delay: 204.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2045) {\n        animation-delay: 204.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2046) {\n        animation-delay: 204.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2047) {\n        animation-delay: 204.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2048) {\n        animation-delay: 204.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2049) {\n        animation-delay: 204.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2050) {\n        animation-delay: 205s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2051) {\n        animation-delay: 205.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2052) {\n        animation-delay: 205.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2053) {\n        animation-delay: 205.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2054) {\n        animation-delay: 205.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2055) {\n        animation-delay: 205.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2056) {\n        animation-delay: 205.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2057) {\n        animation-delay: 205.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2058) {\n        animation-delay: 205.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2059) {\n        animation-delay: 205.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2060) {\n        animation-delay: 206s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2061) {\n        animation-delay: 206.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2062) {\n        animation-delay: 206.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2063) {\n        animation-delay: 206.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2064) {\n        animation-delay: 206.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2065) {\n        animation-delay: 206.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2066) {\n        animation-delay: 206.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2067) {\n        animation-delay: 206.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2068) {\n        animation-delay: 206.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2069) {\n        animation-delay: 206.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2070) {\n        animation-delay: 207s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2071) {\n        animation-delay: 207.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2072) {\n        animation-delay: 207.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2073) {\n        animation-delay: 207.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2074) {\n        animation-delay: 207.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2075) {\n        animation-delay: 207.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2076) {\n        animation-delay: 207.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2077) {\n        animation-delay: 207.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2078) {\n        animation-delay: 207.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2079) {\n        animation-delay: 207.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2080) {\n        animation-delay: 208s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2081) {\n        animation-delay: 208.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2082) {\n        animation-delay: 208.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2083) {\n        animation-delay: 208.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2084) {\n        animation-delay: 208.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2085) {\n        animation-delay: 208.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2086) {\n        animation-delay: 208.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2087) {\n        animation-delay: 208.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2088) {\n        animation-delay: 208.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2089) {\n        animation-delay: 208.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2090) {\n        animation-delay: 209s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2091) {\n        animation-delay: 209.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2092) {\n        animation-delay: 209.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2093) {\n        animation-delay: 209.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2094) {\n        animation-delay: 209.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2095) {\n        animation-delay: 209.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2096) {\n        animation-delay: 209.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2097) {\n        animation-delay: 209.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2098) {\n        animation-delay: 209.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2099) {\n        animation-delay: 209.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2100) {\n        animation-delay: 210s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2101) {\n        animation-delay: 210.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2102) {\n        animation-delay: 210.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2103) {\n        animation-delay: 210.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2104) {\n        animation-delay: 210.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2105) {\n        animation-delay: 210.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2106) {\n        animation-delay: 210.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2107) {\n        animation-delay: 210.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2108) {\n        animation-delay: 210.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2109) {\n        animation-delay: 210.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2110) {\n        animation-delay: 211s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2111) {\n        animation-delay: 211.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2112) {\n        animation-delay: 211.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2113) {\n        animation-delay: 211.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2114) {\n        animation-delay: 211.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2115) {\n        animation-delay: 211.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2116) {\n        animation-delay: 211.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2117) {\n        animation-delay: 211.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2118) {\n        animation-delay: 211.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2119) {\n        animation-delay: 211.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2120) {\n        animation-delay: 212s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2121) {\n        animation-delay: 212.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2122) {\n        animation-delay: 212.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2123) {\n        animation-delay: 212.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2124) {\n        animation-delay: 212.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2125) {\n        animation-delay: 212.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2126) {\n        animation-delay: 212.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2127) {\n        animation-delay: 212.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2128) {\n        animation-delay: 212.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2129) {\n        animation-delay: 212.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2130) {\n        animation-delay: 213s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2131) {\n        animation-delay: 213.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2132) {\n        animation-delay: 213.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2133) {\n        animation-delay: 213.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2134) {\n        animation-delay: 213.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2135) {\n        animation-delay: 213.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2136) {\n        animation-delay: 213.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2137) {\n        animation-delay: 213.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2138) {\n        animation-delay: 213.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2139) {\n        animation-delay: 213.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2140) {\n        animation-delay: 214s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2141) {\n        animation-delay: 214.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2142) {\n        animation-delay: 214.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2143) {\n        animation-delay: 214.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2144) {\n        animation-delay: 214.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2145) {\n        animation-delay: 214.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2146) {\n        animation-delay: 214.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2147) {\n        animation-delay: 214.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2148) {\n        animation-delay: 214.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2149) {\n        animation-delay: 214.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2150) {\n        animation-delay: 215s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2151) {\n        animation-delay: 215.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2152) {\n        animation-delay: 215.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2153) {\n        animation-delay: 215.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2154) {\n        animation-delay: 215.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2155) {\n        animation-delay: 215.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2156) {\n        animation-delay: 215.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2157) {\n        animation-delay: 215.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2158) {\n        animation-delay: 215.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2159) {\n        animation-delay: 215.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2160) {\n        animation-delay: 216s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2161) {\n        animation-delay: 216.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2162) {\n        animation-delay: 216.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2163) {\n        animation-delay: 216.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2164) {\n        animation-delay: 216.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2165) {\n        animation-delay: 216.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2166) {\n        animation-delay: 216.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2167) {\n        animation-delay: 216.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2168) {\n        animation-delay: 216.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2169) {\n        animation-delay: 216.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2170) {\n        animation-delay: 217s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2171) {\n        animation-delay: 217.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2172) {\n        animation-delay: 217.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2173) {\n        animation-delay: 217.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2174) {\n        animation-delay: 217.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2175) {\n        animation-delay: 217.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2176) {\n        animation-delay: 217.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2177) {\n        animation-delay: 217.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2178) {\n        animation-delay: 217.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2179) {\n        animation-delay: 217.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2180) {\n        animation-delay: 218s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2181) {\n        animation-delay: 218.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2182) {\n        animation-delay: 218.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2183) {\n        animation-delay: 218.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2184) {\n        animation-delay: 218.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2185) {\n        animation-delay: 218.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2186) {\n        animation-delay: 218.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2187) {\n        animation-delay: 218.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2188) {\n        animation-delay: 218.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2189) {\n        animation-delay: 218.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2190) {\n        animation-delay: 219s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2191) {\n        animation-delay: 219.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2192) {\n        animation-delay: 219.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2193) {\n        animation-delay: 219.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2194) {\n        animation-delay: 219.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2195) {\n        animation-delay: 219.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2196) {\n        animation-delay: 219.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2197) {\n        animation-delay: 219.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2198) {\n        animation-delay: 219.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2199) {\n        animation-delay: 219.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2200) {\n        animation-delay: 220s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2201) {\n        animation-delay: 220.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2202) {\n        animation-delay: 220.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2203) {\n        animation-delay: 220.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2204) {\n        animation-delay: 220.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2205) {\n        animation-delay: 220.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2206) {\n        animation-delay: 220.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2207) {\n        animation-delay: 220.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2208) {\n        animation-delay: 220.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2209) {\n        animation-delay: 220.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2210) {\n        animation-delay: 221s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2211) {\n        animation-delay: 221.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2212) {\n        animation-delay: 221.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2213) {\n        animation-delay: 221.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2214) {\n        animation-delay: 221.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2215) {\n        animation-delay: 221.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2216) {\n        animation-delay: 221.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2217) {\n        animation-delay: 221.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2218) {\n        animation-delay: 221.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2219) {\n        animation-delay: 221.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2220) {\n        animation-delay: 222s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2221) {\n        animation-delay: 222.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2222) {\n        animation-delay: 222.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2223) {\n        animation-delay: 222.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2224) {\n        animation-delay: 222.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2225) {\n        animation-delay: 222.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2226) {\n        animation-delay: 222.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2227) {\n        animation-delay: 222.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2228) {\n        animation-delay: 222.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2229) {\n        animation-delay: 222.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2230) {\n        animation-delay: 223s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2231) {\n        animation-delay: 223.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2232) {\n        animation-delay: 223.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2233) {\n        animation-delay: 223.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2234) {\n        animation-delay: 223.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2235) {\n        animation-delay: 223.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2236) {\n        animation-delay: 223.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2237) {\n        animation-delay: 223.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2238) {\n        animation-delay: 223.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2239) {\n        animation-delay: 223.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2240) {\n        animation-delay: 224s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2241) {\n        animation-delay: 224.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2242) {\n        animation-delay: 224.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2243) {\n        animation-delay: 224.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2244) {\n        animation-delay: 224.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2245) {\n        animation-delay: 224.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2246) {\n        animation-delay: 224.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2247) {\n        animation-delay: 224.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2248) {\n        animation-delay: 224.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2249) {\n        animation-delay: 224.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2250) {\n        animation-delay: 225s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2251) {\n        animation-delay: 225.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2252) {\n        animation-delay: 225.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2253) {\n        animation-delay: 225.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2254) {\n        animation-delay: 225.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2255) {\n        animation-delay: 225.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2256) {\n        animation-delay: 225.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2257) {\n        animation-delay: 225.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2258) {\n        animation-delay: 225.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2259) {\n        animation-delay: 225.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2260) {\n        animation-delay: 226s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2261) {\n        animation-delay: 226.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2262) {\n        animation-delay: 226.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2263) {\n        animation-delay: 226.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2264) {\n        animation-delay: 226.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2265) {\n        animation-delay: 226.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2266) {\n        animation-delay: 226.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2267) {\n        animation-delay: 226.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2268) {\n        animation-delay: 226.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2269) {\n        animation-delay: 226.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2270) {\n        animation-delay: 227s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2271) {\n        animation-delay: 227.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2272) {\n        animation-delay: 227.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2273) {\n        animation-delay: 227.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2274) {\n        animation-delay: 227.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2275) {\n        animation-delay: 227.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2276) {\n        animation-delay: 227.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2277) {\n        animation-delay: 227.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2278) {\n        animation-delay: 227.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2279) {\n        animation-delay: 227.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2280) {\n        animation-delay: 228s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2281) {\n        animation-delay: 228.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2282) {\n        animation-delay: 228.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2283) {\n        animation-delay: 228.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2284) {\n        animation-delay: 228.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2285) {\n        animation-delay: 228.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2286) {\n        animation-delay: 228.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2287) {\n        animation-delay: 228.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2288) {\n        animation-delay: 228.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2289) {\n        animation-delay: 228.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2290) {\n        animation-delay: 229s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2291) {\n        animation-delay: 229.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2292) {\n        animation-delay: 229.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2293) {\n        animation-delay: 229.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2294) {\n        animation-delay: 229.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2295) {\n        animation-delay: 229.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2296) {\n        animation-delay: 229.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2297) {\n        animation-delay: 229.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2298) {\n        animation-delay: 229.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2299) {\n        animation-delay: 229.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2300) {\n        animation-delay: 230s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2301) {\n        animation-delay: 230.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2302) {\n        animation-delay: 230.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2303) {\n        animation-delay: 230.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2304) {\n        animation-delay: 230.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2305) {\n        animation-delay: 230.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2306) {\n        animation-delay: 230.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2307) {\n        animation-delay: 230.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2308) {\n        animation-delay: 230.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2309) {\n        animation-delay: 230.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2310) {\n        animation-delay: 231s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2311) {\n        animation-delay: 231.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2312) {\n        animation-delay: 231.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2313) {\n        animation-delay: 231.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2314) {\n        animation-delay: 231.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2315) {\n        animation-delay: 231.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2316) {\n        animation-delay: 231.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2317) {\n        animation-delay: 231.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2318) {\n        animation-delay: 231.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2319) {\n        animation-delay: 231.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2320) {\n        animation-delay: 232s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2321) {\n        animation-delay: 232.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2322) {\n        animation-delay: 232.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2323) {\n        animation-delay: 232.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2324) {\n        animation-delay: 232.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2325) {\n        animation-delay: 232.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2326) {\n        animation-delay: 232.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2327) {\n        animation-delay: 232.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2328) {\n        animation-delay: 232.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2329) {\n        animation-delay: 232.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2330) {\n        animation-delay: 233s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2331) {\n        animation-delay: 233.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2332) {\n        animation-delay: 233.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2333) {\n        animation-delay: 233.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2334) {\n        animation-delay: 233.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2335) {\n        animation-delay: 233.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2336) {\n        animation-delay: 233.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2337) {\n        animation-delay: 233.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2338) {\n        animation-delay: 233.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2339) {\n        animation-delay: 233.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2340) {\n        animation-delay: 234s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2341) {\n        animation-delay: 234.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2342) {\n        animation-delay: 234.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2343) {\n        animation-delay: 234.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2344) {\n        animation-delay: 234.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2345) {\n        animation-delay: 234.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2346) {\n        animation-delay: 234.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2347) {\n        animation-delay: 234.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2348) {\n        animation-delay: 234.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2349) {\n        animation-delay: 234.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2350) {\n        animation-delay: 235s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2351) {\n        animation-delay: 235.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2352) {\n        animation-delay: 235.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2353) {\n        animation-delay: 235.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2354) {\n        animation-delay: 235.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2355) {\n        animation-delay: 235.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2356) {\n        animation-delay: 235.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2357) {\n        animation-delay: 235.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2358) {\n        animation-delay: 235.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2359) {\n        animation-delay: 235.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2360) {\n        animation-delay: 236s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2361) {\n        animation-delay: 236.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2362) {\n        animation-delay: 236.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2363) {\n        animation-delay: 236.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2364) {\n        animation-delay: 236.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2365) {\n        animation-delay: 236.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2366) {\n        animation-delay: 236.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2367) {\n        animation-delay: 236.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2368) {\n        animation-delay: 236.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2369) {\n        animation-delay: 236.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2370) {\n        animation-delay: 237s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2371) {\n        animation-delay: 237.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2372) {\n        animation-delay: 237.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2373) {\n        animation-delay: 237.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2374) {\n        animation-delay: 237.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2375) {\n        animation-delay: 237.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2376) {\n        animation-delay: 237.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2377) {\n        animation-delay: 237.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2378) {\n        animation-delay: 237.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2379) {\n        animation-delay: 237.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2380) {\n        animation-delay: 238s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2381) {\n        animation-delay: 238.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2382) {\n        animation-delay: 238.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2383) {\n        animation-delay: 238.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2384) {\n        animation-delay: 238.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2385) {\n        animation-delay: 238.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2386) {\n        animation-delay: 238.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2387) {\n        animation-delay: 238.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2388) {\n        animation-delay: 238.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2389) {\n        animation-delay: 238.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2390) {\n        animation-delay: 239s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2391) {\n        animation-delay: 239.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2392) {\n        animation-delay: 239.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2393) {\n        animation-delay: 239.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2394) {\n        animation-delay: 239.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2395) {\n        animation-delay: 239.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2396) {\n        animation-delay: 239.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2397) {\n        animation-delay: 239.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2398) {\n        animation-delay: 239.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2399) {\n        animation-delay: 239.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2400) {\n        animation-delay: 240s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2401) {\n        animation-delay: 240.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2402) {\n        animation-delay: 240.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2403) {\n        animation-delay: 240.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2404) {\n        animation-delay: 240.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2405) {\n        animation-delay: 240.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2406) {\n        animation-delay: 240.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2407) {\n        animation-delay: 240.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2408) {\n        animation-delay: 240.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2409) {\n        animation-delay: 240.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2410) {\n        animation-delay: 241s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2411) {\n        animation-delay: 241.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2412) {\n        animation-delay: 241.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2413) {\n        animation-delay: 241.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2414) {\n        animation-delay: 241.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2415) {\n        animation-delay: 241.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2416) {\n        animation-delay: 241.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2417) {\n        animation-delay: 241.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2418) {\n        animation-delay: 241.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2419) {\n        animation-delay: 241.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2420) {\n        animation-delay: 242s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2421) {\n        animation-delay: 242.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2422) {\n        animation-delay: 242.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2423) {\n        animation-delay: 242.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2424) {\n        animation-delay: 242.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2425) {\n        animation-delay: 242.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2426) {\n        animation-delay: 242.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2427) {\n        animation-delay: 242.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2428) {\n        animation-delay: 242.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2429) {\n        animation-delay: 242.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2430) {\n        animation-delay: 243s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2431) {\n        animation-delay: 243.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2432) {\n        animation-delay: 243.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2433) {\n        animation-delay: 243.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2434) {\n        animation-delay: 243.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2435) {\n        animation-delay: 243.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2436) {\n        animation-delay: 243.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2437) {\n        animation-delay: 243.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2438) {\n        animation-delay: 243.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2439) {\n        animation-delay: 243.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2440) {\n        animation-delay: 244s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2441) {\n        animation-delay: 244.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2442) {\n        animation-delay: 244.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2443) {\n        animation-delay: 244.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2444) {\n        animation-delay: 244.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2445) {\n        animation-delay: 244.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2446) {\n        animation-delay: 244.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2447) {\n        animation-delay: 244.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2448) {\n        animation-delay: 244.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2449) {\n        animation-delay: 244.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2450) {\n        animation-delay: 245s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2451) {\n        animation-delay: 245.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2452) {\n        animation-delay: 245.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2453) {\n        animation-delay: 245.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2454) {\n        animation-delay: 245.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2455) {\n        animation-delay: 245.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2456) {\n        animation-delay: 245.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2457) {\n        animation-delay: 245.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2458) {\n        animation-delay: 245.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2459) {\n        animation-delay: 245.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2460) {\n        animation-delay: 246s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2461) {\n        animation-delay: 246.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2462) {\n        animation-delay: 246.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2463) {\n        animation-delay: 246.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2464) {\n        animation-delay: 246.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2465) {\n        animation-delay: 246.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2466) {\n        animation-delay: 246.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2467) {\n        animation-delay: 246.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2468) {\n        animation-delay: 246.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2469) {\n        animation-delay: 246.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2470) {\n        animation-delay: 247s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2471) {\n        animation-delay: 247.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2472) {\n        animation-delay: 247.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2473) {\n        animation-delay: 247.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2474) {\n        animation-delay: 247.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2475) {\n        animation-delay: 247.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2476) {\n        animation-delay: 247.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2477) {\n        animation-delay: 247.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2478) {\n        animation-delay: 247.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2479) {\n        animation-delay: 247.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2480) {\n        animation-delay: 248s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2481) {\n        animation-delay: 248.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2482) {\n        animation-delay: 248.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2483) {\n        animation-delay: 248.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2484) {\n        animation-delay: 248.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2485) {\n        animation-delay: 248.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2486) {\n        animation-delay: 248.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2487) {\n        animation-delay: 248.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2488) {\n        animation-delay: 248.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2489) {\n        animation-delay: 248.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2490) {\n        animation-delay: 249s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2491) {\n        animation-delay: 249.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2492) {\n        animation-delay: 249.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2493) {\n        animation-delay: 249.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2494) {\n        animation-delay: 249.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2495) {\n        animation-delay: 249.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2496) {\n        animation-delay: 249.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2497) {\n        animation-delay: 249.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2498) {\n        animation-delay: 249.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2499) {\n        animation-delay: 249.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2500) {\n        animation-delay: 250s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2501) {\n        animation-delay: 250.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2502) {\n        animation-delay: 250.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2503) {\n        animation-delay: 250.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2504) {\n        animation-delay: 250.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2505) {\n        animation-delay: 250.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2506) {\n        animation-delay: 250.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2507) {\n        animation-delay: 250.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2508) {\n        animation-delay: 250.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2509) {\n        animation-delay: 250.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2510) {\n        animation-delay: 251s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2511) {\n        animation-delay: 251.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2512) {\n        animation-delay: 251.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2513) {\n        animation-delay: 251.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2514) {\n        animation-delay: 251.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2515) {\n        animation-delay: 251.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2516) {\n        animation-delay: 251.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2517) {\n        animation-delay: 251.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2518) {\n        animation-delay: 251.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2519) {\n        animation-delay: 251.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2520) {\n        animation-delay: 252s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2521) {\n        animation-delay: 252.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2522) {\n        animation-delay: 252.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2523) {\n        animation-delay: 252.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2524) {\n        animation-delay: 252.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2525) {\n        animation-delay: 252.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2526) {\n        animation-delay: 252.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2527) {\n        animation-delay: 252.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2528) {\n        animation-delay: 252.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2529) {\n        animation-delay: 252.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2530) {\n        animation-delay: 253s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2531) {\n        animation-delay: 253.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2532) {\n        animation-delay: 253.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2533) {\n        animation-delay: 253.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2534) {\n        animation-delay: 253.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2535) {\n        animation-delay: 253.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2536) {\n        animation-delay: 253.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2537) {\n        animation-delay: 253.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2538) {\n        animation-delay: 253.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2539) {\n        animation-delay: 253.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2540) {\n        animation-delay: 254s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2541) {\n        animation-delay: 254.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2542) {\n        animation-delay: 254.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2543) {\n        animation-delay: 254.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2544) {\n        animation-delay: 254.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2545) {\n        animation-delay: 254.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2546) {\n        animation-delay: 254.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2547) {\n        animation-delay: 254.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2548) {\n        animation-delay: 254.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2549) {\n        animation-delay: 254.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2550) {\n        animation-delay: 255s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2551) {\n        animation-delay: 255.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2552) {\n        animation-delay: 255.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2553) {\n        animation-delay: 255.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2554) {\n        animation-delay: 255.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2555) {\n        animation-delay: 255.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2556) {\n        animation-delay: 255.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2557) {\n        animation-delay: 255.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2558) {\n        animation-delay: 255.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2559) {\n        animation-delay: 255.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2560) {\n        animation-delay: 256s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2561) {\n        animation-delay: 256.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2562) {\n        animation-delay: 256.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2563) {\n        animation-delay: 256.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2564) {\n        animation-delay: 256.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2565) {\n        animation-delay: 256.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2566) {\n        animation-delay: 256.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2567) {\n        animation-delay: 256.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2568) {\n        animation-delay: 256.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2569) {\n        animation-delay: 256.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2570) {\n        animation-delay: 257s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2571) {\n        animation-delay: 257.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2572) {\n        animation-delay: 257.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2573) {\n        animation-delay: 257.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2574) {\n        animation-delay: 257.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2575) {\n        animation-delay: 257.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2576) {\n        animation-delay: 257.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2577) {\n        animation-delay: 257.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2578) {\n        animation-delay: 257.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2579) {\n        animation-delay: 257.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2580) {\n        animation-delay: 258s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2581) {\n        animation-delay: 258.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2582) {\n        animation-delay: 258.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2583) {\n        animation-delay: 258.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2584) {\n        animation-delay: 258.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2585) {\n        animation-delay: 258.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2586) {\n        animation-delay: 258.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2587) {\n        animation-delay: 258.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2588) {\n        animation-delay: 258.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2589) {\n        animation-delay: 258.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2590) {\n        animation-delay: 259s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2591) {\n        animation-delay: 259.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2592) {\n        animation-delay: 259.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2593) {\n        animation-delay: 259.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2594) {\n        animation-delay: 259.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2595) {\n        animation-delay: 259.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2596) {\n        animation-delay: 259.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2597) {\n        animation-delay: 259.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2598) {\n        animation-delay: 259.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2599) {\n        animation-delay: 259.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2600) {\n        animation-delay: 260s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2601) {\n        animation-delay: 260.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2602) {\n        animation-delay: 260.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2603) {\n        animation-delay: 260.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2604) {\n        animation-delay: 260.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2605) {\n        animation-delay: 260.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2606) {\n        animation-delay: 260.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2607) {\n        animation-delay: 260.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2608) {\n        animation-delay: 260.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2609) {\n        animation-delay: 260.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2610) {\n        animation-delay: 261s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2611) {\n        animation-delay: 261.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2612) {\n        animation-delay: 261.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2613) {\n        animation-delay: 261.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2614) {\n        animation-delay: 261.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2615) {\n        animation-delay: 261.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2616) {\n        animation-delay: 261.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2617) {\n        animation-delay: 261.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2618) {\n        animation-delay: 261.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2619) {\n        animation-delay: 261.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2620) {\n        animation-delay: 262s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2621) {\n        animation-delay: 262.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2622) {\n        animation-delay: 262.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2623) {\n        animation-delay: 262.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2624) {\n        animation-delay: 262.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2625) {\n        animation-delay: 262.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2626) {\n        animation-delay: 262.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2627) {\n        animation-delay: 262.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2628) {\n        animation-delay: 262.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2629) {\n        animation-delay: 262.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2630) {\n        animation-delay: 263s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2631) {\n        animation-delay: 263.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2632) {\n        animation-delay: 263.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2633) {\n        animation-delay: 263.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2634) {\n        animation-delay: 263.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2635) {\n        animation-delay: 263.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2636) {\n        animation-delay: 263.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2637) {\n        animation-delay: 263.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2638) {\n        animation-delay: 263.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2639) {\n        animation-delay: 263.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2640) {\n        animation-delay: 264s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2641) {\n        animation-delay: 264.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2642) {\n        animation-delay: 264.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2643) {\n        animation-delay: 264.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2644) {\n        animation-delay: 264.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2645) {\n        animation-delay: 264.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2646) {\n        animation-delay: 264.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2647) {\n        animation-delay: 264.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2648) {\n        animation-delay: 264.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2649) {\n        animation-delay: 264.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2650) {\n        animation-delay: 265s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2651) {\n        animation-delay: 265.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2652) {\n        animation-delay: 265.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2653) {\n        animation-delay: 265.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2654) {\n        animation-delay: 265.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2655) {\n        animation-delay: 265.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2656) {\n        animation-delay: 265.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2657) {\n        animation-delay: 265.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2658) {\n        animation-delay: 265.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2659) {\n        animation-delay: 265.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2660) {\n        animation-delay: 266s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2661) {\n        animation-delay: 266.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2662) {\n        animation-delay: 266.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2663) {\n        animation-delay: 266.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2664) {\n        animation-delay: 266.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2665) {\n        animation-delay: 266.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2666) {\n        animation-delay: 266.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2667) {\n        animation-delay: 266.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2668) {\n        animation-delay: 266.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2669) {\n        animation-delay: 266.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2670) {\n        animation-delay: 267s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2671) {\n        animation-delay: 267.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2672) {\n        animation-delay: 267.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2673) {\n        animation-delay: 267.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2674) {\n        animation-delay: 267.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2675) {\n        animation-delay: 267.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2676) {\n        animation-delay: 267.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2677) {\n        animation-delay: 267.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2678) {\n        animation-delay: 267.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2679) {\n        animation-delay: 267.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2680) {\n        animation-delay: 268s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2681) {\n        animation-delay: 268.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2682) {\n        animation-delay: 268.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2683) {\n        animation-delay: 268.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2684) {\n        animation-delay: 268.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2685) {\n        animation-delay: 268.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2686) {\n        animation-delay: 268.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2687) {\n        animation-delay: 268.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2688) {\n        animation-delay: 268.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2689) {\n        animation-delay: 268.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2690) {\n        animation-delay: 269s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2691) {\n        animation-delay: 269.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2692) {\n        animation-delay: 269.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2693) {\n        animation-delay: 269.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2694) {\n        animation-delay: 269.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2695) {\n        animation-delay: 269.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2696) {\n        animation-delay: 269.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2697) {\n        animation-delay: 269.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2698) {\n        animation-delay: 269.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2699) {\n        animation-delay: 269.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2700) {\n        animation-delay: 270s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2701) {\n        animation-delay: 270.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2702) {\n        animation-delay: 270.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2703) {\n        animation-delay: 270.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2704) {\n        animation-delay: 270.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2705) {\n        animation-delay: 270.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2706) {\n        animation-delay: 270.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2707) {\n        animation-delay: 270.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2708) {\n        animation-delay: 270.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2709) {\n        animation-delay: 270.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2710) {\n        animation-delay: 271s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2711) {\n        animation-delay: 271.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2712) {\n        animation-delay: 271.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2713) {\n        animation-delay: 271.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2714) {\n        animation-delay: 271.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2715) {\n        animation-delay: 271.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2716) {\n        animation-delay: 271.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2717) {\n        animation-delay: 271.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2718) {\n        animation-delay: 271.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2719) {\n        animation-delay: 271.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2720) {\n        animation-delay: 272s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2721) {\n        animation-delay: 272.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2722) {\n        animation-delay: 272.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2723) {\n        animation-delay: 272.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2724) {\n        animation-delay: 272.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2725) {\n        animation-delay: 272.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2726) {\n        animation-delay: 272.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2727) {\n        animation-delay: 272.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2728) {\n        animation-delay: 272.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2729) {\n        animation-delay: 272.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2730) {\n        animation-delay: 273s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2731) {\n        animation-delay: 273.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2732) {\n        animation-delay: 273.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2733) {\n        animation-delay: 273.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2734) {\n        animation-delay: 273.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2735) {\n        animation-delay: 273.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2736) {\n        animation-delay: 273.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2737) {\n        animation-delay: 273.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2738) {\n        animation-delay: 273.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2739) {\n        animation-delay: 273.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2740) {\n        animation-delay: 274s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2741) {\n        animation-delay: 274.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2742) {\n        animation-delay: 274.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2743) {\n        animation-delay: 274.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2744) {\n        animation-delay: 274.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2745) {\n        animation-delay: 274.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2746) {\n        animation-delay: 274.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2747) {\n        animation-delay: 274.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2748) {\n        animation-delay: 274.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2749) {\n        animation-delay: 274.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2750) {\n        animation-delay: 275s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2751) {\n        animation-delay: 275.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2752) {\n        animation-delay: 275.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2753) {\n        animation-delay: 275.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2754) {\n        animation-delay: 275.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2755) {\n        animation-delay: 275.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2756) {\n        animation-delay: 275.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2757) {\n        animation-delay: 275.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2758) {\n        animation-delay: 275.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2759) {\n        animation-delay: 275.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2760) {\n        animation-delay: 276s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2761) {\n        animation-delay: 276.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2762) {\n        animation-delay: 276.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2763) {\n        animation-delay: 276.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2764) {\n        animation-delay: 276.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2765) {\n        animation-delay: 276.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2766) {\n        animation-delay: 276.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2767) {\n        animation-delay: 276.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2768) {\n        animation-delay: 276.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2769) {\n        animation-delay: 276.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2770) {\n        animation-delay: 277s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2771) {\n        animation-delay: 277.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2772) {\n        animation-delay: 277.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2773) {\n        animation-delay: 277.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2774) {\n        animation-delay: 277.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2775) {\n        animation-delay: 277.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2776) {\n        animation-delay: 277.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2777) {\n        animation-delay: 277.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2778) {\n        animation-delay: 277.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2779) {\n        animation-delay: 277.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2780) {\n        animation-delay: 278s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2781) {\n        animation-delay: 278.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2782) {\n        animation-delay: 278.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2783) {\n        animation-delay: 278.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2784) {\n        animation-delay: 278.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2785) {\n        animation-delay: 278.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2786) {\n        animation-delay: 278.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2787) {\n        animation-delay: 278.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2788) {\n        animation-delay: 278.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2789) {\n        animation-delay: 278.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2790) {\n        animation-delay: 279s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2791) {\n        animation-delay: 279.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2792) {\n        animation-delay: 279.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2793) {\n        animation-delay: 279.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2794) {\n        animation-delay: 279.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2795) {\n        animation-delay: 279.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2796) {\n        animation-delay: 279.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2797) {\n        animation-delay: 279.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2798) {\n        animation-delay: 279.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2799) {\n        animation-delay: 279.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2800) {\n        animation-delay: 280s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2801) {\n        animation-delay: 280.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2802) {\n        animation-delay: 280.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2803) {\n        animation-delay: 280.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2804) {\n        animation-delay: 280.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2805) {\n        animation-delay: 280.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2806) {\n        animation-delay: 280.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2807) {\n        animation-delay: 280.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2808) {\n        animation-delay: 280.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2809) {\n        animation-delay: 280.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2810) {\n        animation-delay: 281s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2811) {\n        animation-delay: 281.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2812) {\n        animation-delay: 281.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2813) {\n        animation-delay: 281.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2814) {\n        animation-delay: 281.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2815) {\n        animation-delay: 281.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2816) {\n        animation-delay: 281.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2817) {\n        animation-delay: 281.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2818) {\n        animation-delay: 281.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2819) {\n        animation-delay: 281.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2820) {\n        animation-delay: 282s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2821) {\n        animation-delay: 282.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2822) {\n        animation-delay: 282.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2823) {\n        animation-delay: 282.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2824) {\n        animation-delay: 282.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2825) {\n        animation-delay: 282.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2826) {\n        animation-delay: 282.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2827) {\n        animation-delay: 282.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2828) {\n        animation-delay: 282.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2829) {\n        animation-delay: 282.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2830) {\n        animation-delay: 283s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2831) {\n        animation-delay: 283.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2832) {\n        animation-delay: 283.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2833) {\n        animation-delay: 283.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2834) {\n        animation-delay: 283.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2835) {\n        animation-delay: 283.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2836) {\n        animation-delay: 283.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2837) {\n        animation-delay: 283.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2838) {\n        animation-delay: 283.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2839) {\n        animation-delay: 283.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2840) {\n        animation-delay: 284s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2841) {\n        animation-delay: 284.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2842) {\n        animation-delay: 284.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2843) {\n        animation-delay: 284.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2844) {\n        animation-delay: 284.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2845) {\n        animation-delay: 284.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2846) {\n        animation-delay: 284.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2847) {\n        animation-delay: 284.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2848) {\n        animation-delay: 284.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2849) {\n        animation-delay: 284.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2850) {\n        animation-delay: 285s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2851) {\n        animation-delay: 285.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2852) {\n        animation-delay: 285.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2853) {\n        animation-delay: 285.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2854) {\n        animation-delay: 285.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2855) {\n        animation-delay: 285.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2856) {\n        animation-delay: 285.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2857) {\n        animation-delay: 285.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2858) {\n        animation-delay: 285.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2859) {\n        animation-delay: 285.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2860) {\n        animation-delay: 286s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2861) {\n        animation-delay: 286.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2862) {\n        animation-delay: 286.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2863) {\n        animation-delay: 286.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2864) {\n        animation-delay: 286.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2865) {\n        animation-delay: 286.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2866) {\n        animation-delay: 286.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2867) {\n        animation-delay: 286.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2868) {\n        animation-delay: 286.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2869) {\n        animation-delay: 286.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2870) {\n        animation-delay: 287s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2871) {\n        animation-delay: 287.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2872) {\n        animation-delay: 287.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2873) {\n        animation-delay: 287.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2874) {\n        animation-delay: 287.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2875) {\n        animation-delay: 287.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2876) {\n        animation-delay: 287.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2877) {\n        animation-delay: 287.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2878) {\n        animation-delay: 287.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2879) {\n        animation-delay: 287.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2880) {\n        animation-delay: 288s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2881) {\n        animation-delay: 288.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2882) {\n        animation-delay: 288.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2883) {\n        animation-delay: 288.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2884) {\n        animation-delay: 288.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2885) {\n        animation-delay: 288.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2886) {\n        animation-delay: 288.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2887) {\n        animation-delay: 288.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2888) {\n        animation-delay: 288.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2889) {\n        animation-delay: 288.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2890) {\n        animation-delay: 289s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2891) {\n        animation-delay: 289.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2892) {\n        animation-delay: 289.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2893) {\n        animation-delay: 289.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2894) {\n        animation-delay: 289.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2895) {\n        animation-delay: 289.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2896) {\n        animation-delay: 289.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2897) {\n        animation-delay: 289.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2898) {\n        animation-delay: 289.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2899) {\n        animation-delay: 289.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2900) {\n        animation-delay: 290s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2901) {\n        animation-delay: 290.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2902) {\n        animation-delay: 290.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2903) {\n        animation-delay: 290.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2904) {\n        animation-delay: 290.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2905) {\n        animation-delay: 290.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2906) {\n        animation-delay: 290.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2907) {\n        animation-delay: 290.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2908) {\n        animation-delay: 290.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2909) {\n        animation-delay: 290.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2910) {\n        animation-delay: 291s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2911) {\n        animation-delay: 291.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2912) {\n        animation-delay: 291.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2913) {\n        animation-delay: 291.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2914) {\n        animation-delay: 291.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2915) {\n        animation-delay: 291.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2916) {\n        animation-delay: 291.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2917) {\n        animation-delay: 291.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2918) {\n        animation-delay: 291.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2919) {\n        animation-delay: 291.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2920) {\n        animation-delay: 292s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2921) {\n        animation-delay: 292.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2922) {\n        animation-delay: 292.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2923) {\n        animation-delay: 292.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2924) {\n        animation-delay: 292.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2925) {\n        animation-delay: 292.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2926) {\n        animation-delay: 292.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2927) {\n        animation-delay: 292.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2928) {\n        animation-delay: 292.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2929) {\n        animation-delay: 292.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2930) {\n        animation-delay: 293s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2931) {\n        animation-delay: 293.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2932) {\n        animation-delay: 293.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2933) {\n        animation-delay: 293.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2934) {\n        animation-delay: 293.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2935) {\n        animation-delay: 293.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2936) {\n        animation-delay: 293.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2937) {\n        animation-delay: 293.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2938) {\n        animation-delay: 293.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2939) {\n        animation-delay: 293.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2940) {\n        animation-delay: 294s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2941) {\n        animation-delay: 294.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2942) {\n        animation-delay: 294.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2943) {\n        animation-delay: 294.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2944) {\n        animation-delay: 294.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2945) {\n        animation-delay: 294.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2946) {\n        animation-delay: 294.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2947) {\n        animation-delay: 294.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2948) {\n        animation-delay: 294.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2949) {\n        animation-delay: 294.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2950) {\n        animation-delay: 295s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2951) {\n        animation-delay: 295.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2952) {\n        animation-delay: 295.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2953) {\n        animation-delay: 295.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2954) {\n        animation-delay: 295.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2955) {\n        animation-delay: 295.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2956) {\n        animation-delay: 295.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2957) {\n        animation-delay: 295.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2958) {\n        animation-delay: 295.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2959) {\n        animation-delay: 295.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2960) {\n        animation-delay: 296s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2961) {\n        animation-delay: 296.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2962) {\n        animation-delay: 296.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2963) {\n        animation-delay: 296.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2964) {\n        animation-delay: 296.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2965) {\n        animation-delay: 296.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2966) {\n        animation-delay: 296.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2967) {\n        animation-delay: 296.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2968) {\n        animation-delay: 296.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2969) {\n        animation-delay: 296.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2970) {\n        animation-delay: 297s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2971) {\n        animation-delay: 297.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2972) {\n        animation-delay: 297.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2973) {\n        animation-delay: 297.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2974) {\n        animation-delay: 297.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2975) {\n        animation-delay: 297.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2976) {\n        animation-delay: 297.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2977) {\n        animation-delay: 297.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2978) {\n        animation-delay: 297.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2979) {\n        animation-delay: 297.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2980) {\n        animation-delay: 298s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2981) {\n        animation-delay: 298.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2982) {\n        animation-delay: 298.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2983) {\n        animation-delay: 298.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2984) {\n        animation-delay: 298.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2985) {\n        animation-delay: 298.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2986) {\n        animation-delay: 298.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2987) {\n        animation-delay: 298.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2988) {\n        animation-delay: 298.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2989) {\n        animation-delay: 298.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2990) {\n        animation-delay: 299s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2991) {\n        animation-delay: 299.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2992) {\n        animation-delay: 299.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2993) {\n        animation-delay: 299.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2994) {\n        animation-delay: 299.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2995) {\n        animation-delay: 299.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2996) {\n        animation-delay: 299.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2997) {\n        animation-delay: 299.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2998) {\n        animation-delay: 299.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(2999) {\n        animation-delay: 299.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3000) {\n        animation-delay: 300s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3001) {\n        animation-delay: 300.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3002) {\n        animation-delay: 300.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3003) {\n        animation-delay: 300.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3004) {\n        animation-delay: 300.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3005) {\n        animation-delay: 300.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3006) {\n        animation-delay: 300.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3007) {\n        animation-delay: 300.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3008) {\n        animation-delay: 300.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3009) {\n        animation-delay: 300.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3010) {\n        animation-delay: 301s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3011) {\n        animation-delay: 301.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3012) {\n        animation-delay: 301.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3013) {\n        animation-delay: 301.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3014) {\n        animation-delay: 301.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3015) {\n        animation-delay: 301.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3016) {\n        animation-delay: 301.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3017) {\n        animation-delay: 301.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3018) {\n        animation-delay: 301.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3019) {\n        animation-delay: 301.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3020) {\n        animation-delay: 302s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3021) {\n        animation-delay: 302.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3022) {\n        animation-delay: 302.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3023) {\n        animation-delay: 302.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3024) {\n        animation-delay: 302.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3025) {\n        animation-delay: 302.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3026) {\n        animation-delay: 302.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3027) {\n        animation-delay: 302.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3028) {\n        animation-delay: 302.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3029) {\n        animation-delay: 302.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3030) {\n        animation-delay: 303s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3031) {\n        animation-delay: 303.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3032) {\n        animation-delay: 303.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3033) {\n        animation-delay: 303.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3034) {\n        animation-delay: 303.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3035) {\n        animation-delay: 303.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3036) {\n        animation-delay: 303.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3037) {\n        animation-delay: 303.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3038) {\n        animation-delay: 303.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3039) {\n        animation-delay: 303.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3040) {\n        animation-delay: 304s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3041) {\n        animation-delay: 304.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3042) {\n        animation-delay: 304.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3043) {\n        animation-delay: 304.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3044) {\n        animation-delay: 304.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3045) {\n        animation-delay: 304.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3046) {\n        animation-delay: 304.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3047) {\n        animation-delay: 304.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3048) {\n        animation-delay: 304.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3049) {\n        animation-delay: 304.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3050) {\n        animation-delay: 305s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3051) {\n        animation-delay: 305.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3052) {\n        animation-delay: 305.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3053) {\n        animation-delay: 305.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3054) {\n        animation-delay: 305.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3055) {\n        animation-delay: 305.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3056) {\n        animation-delay: 305.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3057) {\n        animation-delay: 305.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3058) {\n        animation-delay: 305.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3059) {\n        animation-delay: 305.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3060) {\n        animation-delay: 306s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3061) {\n        animation-delay: 306.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3062) {\n        animation-delay: 306.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3063) {\n        animation-delay: 306.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3064) {\n        animation-delay: 306.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3065) {\n        animation-delay: 306.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3066) {\n        animation-delay: 306.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3067) {\n        animation-delay: 306.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3068) {\n        animation-delay: 306.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3069) {\n        animation-delay: 306.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3070) {\n        animation-delay: 307s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3071) {\n        animation-delay: 307.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3072) {\n        animation-delay: 307.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3073) {\n        animation-delay: 307.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3074) {\n        animation-delay: 307.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3075) {\n        animation-delay: 307.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3076) {\n        animation-delay: 307.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3077) {\n        animation-delay: 307.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3078) {\n        animation-delay: 307.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3079) {\n        animation-delay: 307.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3080) {\n        animation-delay: 308s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3081) {\n        animation-delay: 308.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3082) {\n        animation-delay: 308.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3083) {\n        animation-delay: 308.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3084) {\n        animation-delay: 308.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3085) {\n        animation-delay: 308.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3086) {\n        animation-delay: 308.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3087) {\n        animation-delay: 308.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3088) {\n        animation-delay: 308.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3089) {\n        animation-delay: 308.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3090) {\n        animation-delay: 309s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3091) {\n        animation-delay: 309.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3092) {\n        animation-delay: 309.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3093) {\n        animation-delay: 309.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3094) {\n        animation-delay: 309.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3095) {\n        animation-delay: 309.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3096) {\n        animation-delay: 309.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3097) {\n        animation-delay: 309.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3098) {\n        animation-delay: 309.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3099) {\n        animation-delay: 309.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3100) {\n        animation-delay: 310s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3101) {\n        animation-delay: 310.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3102) {\n        animation-delay: 310.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3103) {\n        animation-delay: 310.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3104) {\n        animation-delay: 310.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3105) {\n        animation-delay: 310.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3106) {\n        animation-delay: 310.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3107) {\n        animation-delay: 310.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3108) {\n        animation-delay: 310.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3109) {\n        animation-delay: 310.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3110) {\n        animation-delay: 311s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3111) {\n        animation-delay: 311.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3112) {\n        animation-delay: 311.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3113) {\n        animation-delay: 311.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3114) {\n        animation-delay: 311.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3115) {\n        animation-delay: 311.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3116) {\n        animation-delay: 311.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3117) {\n        animation-delay: 311.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3118) {\n        animation-delay: 311.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3119) {\n        animation-delay: 311.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3120) {\n        animation-delay: 312s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3121) {\n        animation-delay: 312.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3122) {\n        animation-delay: 312.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3123) {\n        animation-delay: 312.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3124) {\n        animation-delay: 312.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3125) {\n        animation-delay: 312.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3126) {\n        animation-delay: 312.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3127) {\n        animation-delay: 312.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3128) {\n        animation-delay: 312.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3129) {\n        animation-delay: 312.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3130) {\n        animation-delay: 313s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3131) {\n        animation-delay: 313.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3132) {\n        animation-delay: 313.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3133) {\n        animation-delay: 313.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3134) {\n        animation-delay: 313.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3135) {\n        animation-delay: 313.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3136) {\n        animation-delay: 313.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3137) {\n        animation-delay: 313.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3138) {\n        animation-delay: 313.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3139) {\n        animation-delay: 313.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3140) {\n        animation-delay: 314s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3141) {\n        animation-delay: 314.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3142) {\n        animation-delay: 314.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3143) {\n        animation-delay: 314.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3144) {\n        animation-delay: 314.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3145) {\n        animation-delay: 314.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3146) {\n        animation-delay: 314.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3147) {\n        animation-delay: 314.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3148) {\n        animation-delay: 314.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3149) {\n        animation-delay: 314.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3150) {\n        animation-delay: 315s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3151) {\n        animation-delay: 315.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3152) {\n        animation-delay: 315.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3153) {\n        animation-delay: 315.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3154) {\n        animation-delay: 315.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3155) {\n        animation-delay: 315.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3156) {\n        animation-delay: 315.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3157) {\n        animation-delay: 315.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3158) {\n        animation-delay: 315.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3159) {\n        animation-delay: 315.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3160) {\n        animation-delay: 316s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3161) {\n        animation-delay: 316.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3162) {\n        animation-delay: 316.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3163) {\n        animation-delay: 316.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3164) {\n        animation-delay: 316.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3165) {\n        animation-delay: 316.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3166) {\n        animation-delay: 316.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3167) {\n        animation-delay: 316.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3168) {\n        animation-delay: 316.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3169) {\n        animation-delay: 316.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3170) {\n        animation-delay: 317s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3171) {\n        animation-delay: 317.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3172) {\n        animation-delay: 317.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3173) {\n        animation-delay: 317.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3174) {\n        animation-delay: 317.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3175) {\n        animation-delay: 317.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3176) {\n        animation-delay: 317.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3177) {\n        animation-delay: 317.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3178) {\n        animation-delay: 317.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3179) {\n        animation-delay: 317.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3180) {\n        animation-delay: 318s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3181) {\n        animation-delay: 318.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3182) {\n        animation-delay: 318.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3183) {\n        animation-delay: 318.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3184) {\n        animation-delay: 318.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3185) {\n        animation-delay: 318.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3186) {\n        animation-delay: 318.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3187) {\n        animation-delay: 318.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3188) {\n        animation-delay: 318.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3189) {\n        animation-delay: 318.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3190) {\n        animation-delay: 319s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3191) {\n        animation-delay: 319.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3192) {\n        animation-delay: 319.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3193) {\n        animation-delay: 319.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3194) {\n        animation-delay: 319.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3195) {\n        animation-delay: 319.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3196) {\n        animation-delay: 319.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3197) {\n        animation-delay: 319.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3198) {\n        animation-delay: 319.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3199) {\n        animation-delay: 319.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3200) {\n        animation-delay: 320s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3201) {\n        animation-delay: 320.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3202) {\n        animation-delay: 320.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3203) {\n        animation-delay: 320.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3204) {\n        animation-delay: 320.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3205) {\n        animation-delay: 320.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3206) {\n        animation-delay: 320.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3207) {\n        animation-delay: 320.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3208) {\n        animation-delay: 320.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3209) {\n        animation-delay: 320.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3210) {\n        animation-delay: 321s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3211) {\n        animation-delay: 321.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3212) {\n        animation-delay: 321.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3213) {\n        animation-delay: 321.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3214) {\n        animation-delay: 321.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3215) {\n        animation-delay: 321.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3216) {\n        animation-delay: 321.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3217) {\n        animation-delay: 321.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3218) {\n        animation-delay: 321.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3219) {\n        animation-delay: 321.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3220) {\n        animation-delay: 322s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3221) {\n        animation-delay: 322.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3222) {\n        animation-delay: 322.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3223) {\n        animation-delay: 322.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3224) {\n        animation-delay: 322.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3225) {\n        animation-delay: 322.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3226) {\n        animation-delay: 322.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3227) {\n        animation-delay: 322.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3228) {\n        animation-delay: 322.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3229) {\n        animation-delay: 322.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3230) {\n        animation-delay: 323s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3231) {\n        animation-delay: 323.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3232) {\n        animation-delay: 323.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3233) {\n        animation-delay: 323.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3234) {\n        animation-delay: 323.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3235) {\n        animation-delay: 323.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3236) {\n        animation-delay: 323.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3237) {\n        animation-delay: 323.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3238) {\n        animation-delay: 323.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3239) {\n        animation-delay: 323.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3240) {\n        animation-delay: 324s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3241) {\n        animation-delay: 324.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3242) {\n        animation-delay: 324.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3243) {\n        animation-delay: 324.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3244) {\n        animation-delay: 324.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3245) {\n        animation-delay: 324.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3246) {\n        animation-delay: 324.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3247) {\n        animation-delay: 324.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3248) {\n        animation-delay: 324.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3249) {\n        animation-delay: 324.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3250) {\n        animation-delay: 325s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3251) {\n        animation-delay: 325.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3252) {\n        animation-delay: 325.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3253) {\n        animation-delay: 325.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3254) {\n        animation-delay: 325.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3255) {\n        animation-delay: 325.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3256) {\n        animation-delay: 325.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3257) {\n        animation-delay: 325.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3258) {\n        animation-delay: 325.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3259) {\n        animation-delay: 325.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3260) {\n        animation-delay: 326s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3261) {\n        animation-delay: 326.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3262) {\n        animation-delay: 326.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3263) {\n        animation-delay: 326.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3264) {\n        animation-delay: 326.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3265) {\n        animation-delay: 326.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3266) {\n        animation-delay: 326.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3267) {\n        animation-delay: 326.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3268) {\n        animation-delay: 326.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3269) {\n        animation-delay: 326.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3270) {\n        animation-delay: 327s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3271) {\n        animation-delay: 327.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3272) {\n        animation-delay: 327.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3273) {\n        animation-delay: 327.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3274) {\n        animation-delay: 327.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3275) {\n        animation-delay: 327.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3276) {\n        animation-delay: 327.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3277) {\n        animation-delay: 327.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3278) {\n        animation-delay: 327.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3279) {\n        animation-delay: 327.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3280) {\n        animation-delay: 328s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3281) {\n        animation-delay: 328.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3282) {\n        animation-delay: 328.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3283) {\n        animation-delay: 328.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3284) {\n        animation-delay: 328.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3285) {\n        animation-delay: 328.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3286) {\n        animation-delay: 328.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3287) {\n        animation-delay: 328.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3288) {\n        animation-delay: 328.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3289) {\n        animation-delay: 328.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3290) {\n        animation-delay: 329s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3291) {\n        animation-delay: 329.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3292) {\n        animation-delay: 329.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3293) {\n        animation-delay: 329.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3294) {\n        animation-delay: 329.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3295) {\n        animation-delay: 329.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3296) {\n        animation-delay: 329.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3297) {\n        animation-delay: 329.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3298) {\n        animation-delay: 329.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3299) {\n        animation-delay: 329.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3300) {\n        animation-delay: 330s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3301) {\n        animation-delay: 330.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3302) {\n        animation-delay: 330.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3303) {\n        animation-delay: 330.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3304) {\n        animation-delay: 330.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3305) {\n        animation-delay: 330.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3306) {\n        animation-delay: 330.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3307) {\n        animation-delay: 330.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3308) {\n        animation-delay: 330.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3309) {\n        animation-delay: 330.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3310) {\n        animation-delay: 331s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3311) {\n        animation-delay: 331.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3312) {\n        animation-delay: 331.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3313) {\n        animation-delay: 331.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3314) {\n        animation-delay: 331.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3315) {\n        animation-delay: 331.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3316) {\n        animation-delay: 331.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3317) {\n        animation-delay: 331.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3318) {\n        animation-delay: 331.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3319) {\n        animation-delay: 331.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3320) {\n        animation-delay: 332s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3321) {\n        animation-delay: 332.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3322) {\n        animation-delay: 332.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3323) {\n        animation-delay: 332.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3324) {\n        animation-delay: 332.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3325) {\n        animation-delay: 332.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3326) {\n        animation-delay: 332.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3327) {\n        animation-delay: 332.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3328) {\n        animation-delay: 332.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3329) {\n        animation-delay: 332.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3330) {\n        animation-delay: 333s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3331) {\n        animation-delay: 333.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3332) {\n        animation-delay: 333.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3333) {\n        animation-delay: 333.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3334) {\n        animation-delay: 333.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3335) {\n        animation-delay: 333.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3336) {\n        animation-delay: 333.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3337) {\n        animation-delay: 333.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3338) {\n        animation-delay: 333.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3339) {\n        animation-delay: 333.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3340) {\n        animation-delay: 334s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3341) {\n        animation-delay: 334.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3342) {\n        animation-delay: 334.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3343) {\n        animation-delay: 334.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3344) {\n        animation-delay: 334.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3345) {\n        animation-delay: 334.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3346) {\n        animation-delay: 334.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3347) {\n        animation-delay: 334.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3348) {\n        animation-delay: 334.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3349) {\n        animation-delay: 334.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3350) {\n        animation-delay: 335s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3351) {\n        animation-delay: 335.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3352) {\n        animation-delay: 335.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3353) {\n        animation-delay: 335.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3354) {\n        animation-delay: 335.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3355) {\n        animation-delay: 335.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3356) {\n        animation-delay: 335.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3357) {\n        animation-delay: 335.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3358) {\n        animation-delay: 335.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3359) {\n        animation-delay: 335.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3360) {\n        animation-delay: 336s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3361) {\n        animation-delay: 336.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3362) {\n        animation-delay: 336.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3363) {\n        animation-delay: 336.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3364) {\n        animation-delay: 336.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3365) {\n        animation-delay: 336.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3366) {\n        animation-delay: 336.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3367) {\n        animation-delay: 336.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3368) {\n        animation-delay: 336.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3369) {\n        animation-delay: 336.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3370) {\n        animation-delay: 337s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3371) {\n        animation-delay: 337.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3372) {\n        animation-delay: 337.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3373) {\n        animation-delay: 337.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3374) {\n        animation-delay: 337.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3375) {\n        animation-delay: 337.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3376) {\n        animation-delay: 337.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3377) {\n        animation-delay: 337.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3378) {\n        animation-delay: 337.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3379) {\n        animation-delay: 337.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3380) {\n        animation-delay: 338s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3381) {\n        animation-delay: 338.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3382) {\n        animation-delay: 338.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3383) {\n        animation-delay: 338.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3384) {\n        animation-delay: 338.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3385) {\n        animation-delay: 338.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3386) {\n        animation-delay: 338.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3387) {\n        animation-delay: 338.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3388) {\n        animation-delay: 338.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3389) {\n        animation-delay: 338.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3390) {\n        animation-delay: 339s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3391) {\n        animation-delay: 339.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3392) {\n        animation-delay: 339.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3393) {\n        animation-delay: 339.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3394) {\n        animation-delay: 339.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3395) {\n        animation-delay: 339.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3396) {\n        animation-delay: 339.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3397) {\n        animation-delay: 339.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3398) {\n        animation-delay: 339.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3399) {\n        animation-delay: 339.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3400) {\n        animation-delay: 340s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3401) {\n        animation-delay: 340.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3402) {\n        animation-delay: 340.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3403) {\n        animation-delay: 340.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3404) {\n        animation-delay: 340.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3405) {\n        animation-delay: 340.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3406) {\n        animation-delay: 340.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3407) {\n        animation-delay: 340.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3408) {\n        animation-delay: 340.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3409) {\n        animation-delay: 340.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3410) {\n        animation-delay: 341s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3411) {\n        animation-delay: 341.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3412) {\n        animation-delay: 341.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3413) {\n        animation-delay: 341.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3414) {\n        animation-delay: 341.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3415) {\n        animation-delay: 341.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3416) {\n        animation-delay: 341.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3417) {\n        animation-delay: 341.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3418) {\n        animation-delay: 341.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3419) {\n        animation-delay: 341.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3420) {\n        animation-delay: 342s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3421) {\n        animation-delay: 342.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3422) {\n        animation-delay: 342.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3423) {\n        animation-delay: 342.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3424) {\n        animation-delay: 342.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3425) {\n        animation-delay: 342.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3426) {\n        animation-delay: 342.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3427) {\n        animation-delay: 342.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3428) {\n        animation-delay: 342.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3429) {\n        animation-delay: 342.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3430) {\n        animation-delay: 343s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3431) {\n        animation-delay: 343.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3432) {\n        animation-delay: 343.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3433) {\n        animation-delay: 343.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3434) {\n        animation-delay: 343.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3435) {\n        animation-delay: 343.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3436) {\n        animation-delay: 343.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3437) {\n        animation-delay: 343.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3438) {\n        animation-delay: 343.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3439) {\n        animation-delay: 343.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3440) {\n        animation-delay: 344s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3441) {\n        animation-delay: 344.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3442) {\n        animation-delay: 344.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3443) {\n        animation-delay: 344.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3444) {\n        animation-delay: 344.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3445) {\n        animation-delay: 344.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3446) {\n        animation-delay: 344.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3447) {\n        animation-delay: 344.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3448) {\n        animation-delay: 344.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3449) {\n        animation-delay: 344.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3450) {\n        animation-delay: 345s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3451) {\n        animation-delay: 345.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3452) {\n        animation-delay: 345.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3453) {\n        animation-delay: 345.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3454) {\n        animation-delay: 345.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3455) {\n        animation-delay: 345.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3456) {\n        animation-delay: 345.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3457) {\n        animation-delay: 345.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3458) {\n        animation-delay: 345.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3459) {\n        animation-delay: 345.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3460) {\n        animation-delay: 346s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3461) {\n        animation-delay: 346.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3462) {\n        animation-delay: 346.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3463) {\n        animation-delay: 346.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3464) {\n        animation-delay: 346.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3465) {\n        animation-delay: 346.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3466) {\n        animation-delay: 346.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3467) {\n        animation-delay: 346.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3468) {\n        animation-delay: 346.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3469) {\n        animation-delay: 346.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3470) {\n        animation-delay: 347s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3471) {\n        animation-delay: 347.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3472) {\n        animation-delay: 347.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3473) {\n        animation-delay: 347.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3474) {\n        animation-delay: 347.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3475) {\n        animation-delay: 347.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3476) {\n        animation-delay: 347.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3477) {\n        animation-delay: 347.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3478) {\n        animation-delay: 347.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3479) {\n        animation-delay: 347.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3480) {\n        animation-delay: 348s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3481) {\n        animation-delay: 348.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3482) {\n        animation-delay: 348.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3483) {\n        animation-delay: 348.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3484) {\n        animation-delay: 348.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3485) {\n        animation-delay: 348.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3486) {\n        animation-delay: 348.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3487) {\n        animation-delay: 348.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3488) {\n        animation-delay: 348.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3489) {\n        animation-delay: 348.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3490) {\n        animation-delay: 349s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3491) {\n        animation-delay: 349.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3492) {\n        animation-delay: 349.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3493) {\n        animation-delay: 349.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3494) {\n        animation-delay: 349.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3495) {\n        animation-delay: 349.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3496) {\n        animation-delay: 349.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3497) {\n        animation-delay: 349.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3498) {\n        animation-delay: 349.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3499) {\n        animation-delay: 349.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3500) {\n        animation-delay: 350s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3501) {\n        animation-delay: 350.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3502) {\n        animation-delay: 350.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3503) {\n        animation-delay: 350.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3504) {\n        animation-delay: 350.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3505) {\n        animation-delay: 350.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3506) {\n        animation-delay: 350.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3507) {\n        animation-delay: 350.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3508) {\n        animation-delay: 350.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3509) {\n        animation-delay: 350.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3510) {\n        animation-delay: 351s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3511) {\n        animation-delay: 351.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3512) {\n        animation-delay: 351.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3513) {\n        animation-delay: 351.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3514) {\n        animation-delay: 351.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3515) {\n        animation-delay: 351.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3516) {\n        animation-delay: 351.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3517) {\n        animation-delay: 351.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3518) {\n        animation-delay: 351.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3519) {\n        animation-delay: 351.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3520) {\n        animation-delay: 352s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3521) {\n        animation-delay: 352.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3522) {\n        animation-delay: 352.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3523) {\n        animation-delay: 352.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3524) {\n        animation-delay: 352.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3525) {\n        animation-delay: 352.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3526) {\n        animation-delay: 352.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3527) {\n        animation-delay: 352.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3528) {\n        animation-delay: 352.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3529) {\n        animation-delay: 352.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3530) {\n        animation-delay: 353s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3531) {\n        animation-delay: 353.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3532) {\n        animation-delay: 353.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3533) {\n        animation-delay: 353.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3534) {\n        animation-delay: 353.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3535) {\n        animation-delay: 353.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3536) {\n        animation-delay: 353.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3537) {\n        animation-delay: 353.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3538) {\n        animation-delay: 353.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3539) {\n        animation-delay: 353.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3540) {\n        animation-delay: 354s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3541) {\n        animation-delay: 354.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3542) {\n        animation-delay: 354.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3543) {\n        animation-delay: 354.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3544) {\n        animation-delay: 354.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3545) {\n        animation-delay: 354.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3546) {\n        animation-delay: 354.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3547) {\n        animation-delay: 354.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3548) {\n        animation-delay: 354.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3549) {\n        animation-delay: 354.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3550) {\n        animation-delay: 355s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3551) {\n        animation-delay: 355.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3552) {\n        animation-delay: 355.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3553) {\n        animation-delay: 355.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3554) {\n        animation-delay: 355.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3555) {\n        animation-delay: 355.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3556) {\n        animation-delay: 355.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3557) {\n        animation-delay: 355.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3558) {\n        animation-delay: 355.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3559) {\n        animation-delay: 355.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3560) {\n        animation-delay: 356s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3561) {\n        animation-delay: 356.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3562) {\n        animation-delay: 356.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3563) {\n        animation-delay: 356.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3564) {\n        animation-delay: 356.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3565) {\n        animation-delay: 356.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3566) {\n        animation-delay: 356.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3567) {\n        animation-delay: 356.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3568) {\n        animation-delay: 356.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3569) {\n        animation-delay: 356.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3570) {\n        animation-delay: 357s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3571) {\n        animation-delay: 357.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3572) {\n        animation-delay: 357.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3573) {\n        animation-delay: 357.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3574) {\n        animation-delay: 357.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3575) {\n        animation-delay: 357.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3576) {\n        animation-delay: 357.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3577) {\n        animation-delay: 357.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3578) {\n        animation-delay: 357.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3579) {\n        animation-delay: 357.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3580) {\n        animation-delay: 358s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3581) {\n        animation-delay: 358.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3582) {\n        animation-delay: 358.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3583) {\n        animation-delay: 358.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3584) {\n        animation-delay: 358.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3585) {\n        animation-delay: 358.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3586) {\n        animation-delay: 358.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3587) {\n        animation-delay: 358.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3588) {\n        animation-delay: 358.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3589) {\n        animation-delay: 358.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3590) {\n        animation-delay: 359s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3591) {\n        animation-delay: 359.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3592) {\n        animation-delay: 359.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3593) {\n        animation-delay: 359.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3594) {\n        animation-delay: 359.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3595) {\n        animation-delay: 359.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3596) {\n        animation-delay: 359.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3597) {\n        animation-delay: 359.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3598) {\n        animation-delay: 359.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3599) {\n        animation-delay: 359.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3600) {\n        animation-delay: 360s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3601) {\n        animation-delay: 360.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3602) {\n        animation-delay: 360.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3603) {\n        animation-delay: 360.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3604) {\n        animation-delay: 360.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3605) {\n        animation-delay: 360.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3606) {\n        animation-delay: 360.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3607) {\n        animation-delay: 360.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3608) {\n        animation-delay: 360.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3609) {\n        animation-delay: 360.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3610) {\n        animation-delay: 361s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3611) {\n        animation-delay: 361.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3612) {\n        animation-delay: 361.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3613) {\n        animation-delay: 361.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3614) {\n        animation-delay: 361.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3615) {\n        animation-delay: 361.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3616) {\n        animation-delay: 361.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3617) {\n        animation-delay: 361.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3618) {\n        animation-delay: 361.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3619) {\n        animation-delay: 361.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3620) {\n        animation-delay: 362s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3621) {\n        animation-delay: 362.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3622) {\n        animation-delay: 362.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3623) {\n        animation-delay: 362.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3624) {\n        animation-delay: 362.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3625) {\n        animation-delay: 362.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3626) {\n        animation-delay: 362.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3627) {\n        animation-delay: 362.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3628) {\n        animation-delay: 362.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3629) {\n        animation-delay: 362.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3630) {\n        animation-delay: 363s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3631) {\n        animation-delay: 363.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3632) {\n        animation-delay: 363.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3633) {\n        animation-delay: 363.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3634) {\n        animation-delay: 363.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3635) {\n        animation-delay: 363.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3636) {\n        animation-delay: 363.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3637) {\n        animation-delay: 363.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3638) {\n        animation-delay: 363.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3639) {\n        animation-delay: 363.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3640) {\n        animation-delay: 364s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3641) {\n        animation-delay: 364.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3642) {\n        animation-delay: 364.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3643) {\n        animation-delay: 364.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3644) {\n        animation-delay: 364.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3645) {\n        animation-delay: 364.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3646) {\n        animation-delay: 364.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3647) {\n        animation-delay: 364.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3648) {\n        animation-delay: 364.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3649) {\n        animation-delay: 364.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3650) {\n        animation-delay: 365s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3651) {\n        animation-delay: 365.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3652) {\n        animation-delay: 365.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3653) {\n        animation-delay: 365.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3654) {\n        animation-delay: 365.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3655) {\n        animation-delay: 365.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3656) {\n        animation-delay: 365.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3657) {\n        animation-delay: 365.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3658) {\n        animation-delay: 365.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3659) {\n        animation-delay: 365.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3660) {\n        animation-delay: 366s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3661) {\n        animation-delay: 366.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3662) {\n        animation-delay: 366.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3663) {\n        animation-delay: 366.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3664) {\n        animation-delay: 366.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3665) {\n        animation-delay: 366.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3666) {\n        animation-delay: 366.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3667) {\n        animation-delay: 366.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3668) {\n        animation-delay: 366.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3669) {\n        animation-delay: 366.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3670) {\n        animation-delay: 367s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3671) {\n        animation-delay: 367.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3672) {\n        animation-delay: 367.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3673) {\n        animation-delay: 367.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3674) {\n        animation-delay: 367.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3675) {\n        animation-delay: 367.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3676) {\n        animation-delay: 367.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3677) {\n        animation-delay: 367.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3678) {\n        animation-delay: 367.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3679) {\n        animation-delay: 367.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3680) {\n        animation-delay: 368s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3681) {\n        animation-delay: 368.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3682) {\n        animation-delay: 368.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3683) {\n        animation-delay: 368.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3684) {\n        animation-delay: 368.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3685) {\n        animation-delay: 368.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3686) {\n        animation-delay: 368.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3687) {\n        animation-delay: 368.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3688) {\n        animation-delay: 368.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3689) {\n        animation-delay: 368.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3690) {\n        animation-delay: 369s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3691) {\n        animation-delay: 369.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3692) {\n        animation-delay: 369.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3693) {\n        animation-delay: 369.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3694) {\n        animation-delay: 369.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3695) {\n        animation-delay: 369.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3696) {\n        animation-delay: 369.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3697) {\n        animation-delay: 369.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3698) {\n        animation-delay: 369.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3699) {\n        animation-delay: 369.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3700) {\n        animation-delay: 370s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3701) {\n        animation-delay: 370.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3702) {\n        animation-delay: 370.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3703) {\n        animation-delay: 370.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3704) {\n        animation-delay: 370.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3705) {\n        animation-delay: 370.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3706) {\n        animation-delay: 370.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3707) {\n        animation-delay: 370.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3708) {\n        animation-delay: 370.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3709) {\n        animation-delay: 370.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3710) {\n        animation-delay: 371s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3711) {\n        animation-delay: 371.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3712) {\n        animation-delay: 371.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3713) {\n        animation-delay: 371.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3714) {\n        animation-delay: 371.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3715) {\n        animation-delay: 371.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3716) {\n        animation-delay: 371.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3717) {\n        animation-delay: 371.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3718) {\n        animation-delay: 371.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3719) {\n        animation-delay: 371.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3720) {\n        animation-delay: 372s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3721) {\n        animation-delay: 372.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3722) {\n        animation-delay: 372.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3723) {\n        animation-delay: 372.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3724) {\n        animation-delay: 372.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3725) {\n        animation-delay: 372.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3726) {\n        animation-delay: 372.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3727) {\n        animation-delay: 372.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3728) {\n        animation-delay: 372.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3729) {\n        animation-delay: 372.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3730) {\n        animation-delay: 373s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3731) {\n        animation-delay: 373.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3732) {\n        animation-delay: 373.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3733) {\n        animation-delay: 373.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3734) {\n        animation-delay: 373.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3735) {\n        animation-delay: 373.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3736) {\n        animation-delay: 373.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3737) {\n        animation-delay: 373.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3738) {\n        animation-delay: 373.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3739) {\n        animation-delay: 373.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3740) {\n        animation-delay: 374s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3741) {\n        animation-delay: 374.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3742) {\n        animation-delay: 374.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3743) {\n        animation-delay: 374.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3744) {\n        animation-delay: 374.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3745) {\n        animation-delay: 374.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3746) {\n        animation-delay: 374.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3747) {\n        animation-delay: 374.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3748) {\n        animation-delay: 374.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3749) {\n        animation-delay: 374.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3750) {\n        animation-delay: 375s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3751) {\n        animation-delay: 375.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3752) {\n        animation-delay: 375.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3753) {\n        animation-delay: 375.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3754) {\n        animation-delay: 375.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3755) {\n        animation-delay: 375.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3756) {\n        animation-delay: 375.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3757) {\n        animation-delay: 375.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3758) {\n        animation-delay: 375.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3759) {\n        animation-delay: 375.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3760) {\n        animation-delay: 376s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3761) {\n        animation-delay: 376.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3762) {\n        animation-delay: 376.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3763) {\n        animation-delay: 376.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3764) {\n        animation-delay: 376.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3765) {\n        animation-delay: 376.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3766) {\n        animation-delay: 376.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3767) {\n        animation-delay: 376.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3768) {\n        animation-delay: 376.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3769) {\n        animation-delay: 376.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3770) {\n        animation-delay: 377s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3771) {\n        animation-delay: 377.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3772) {\n        animation-delay: 377.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3773) {\n        animation-delay: 377.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3774) {\n        animation-delay: 377.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3775) {\n        animation-delay: 377.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3776) {\n        animation-delay: 377.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3777) {\n        animation-delay: 377.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3778) {\n        animation-delay: 377.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3779) {\n        animation-delay: 377.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3780) {\n        animation-delay: 378s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3781) {\n        animation-delay: 378.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3782) {\n        animation-delay: 378.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3783) {\n        animation-delay: 378.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3784) {\n        animation-delay: 378.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3785) {\n        animation-delay: 378.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3786) {\n        animation-delay: 378.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3787) {\n        animation-delay: 378.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3788) {\n        animation-delay: 378.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3789) {\n        animation-delay: 378.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3790) {\n        animation-delay: 379s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3791) {\n        animation-delay: 379.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3792) {\n        animation-delay: 379.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3793) {\n        animation-delay: 379.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3794) {\n        animation-delay: 379.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3795) {\n        animation-delay: 379.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3796) {\n        animation-delay: 379.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3797) {\n        animation-delay: 379.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3798) {\n        animation-delay: 379.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3799) {\n        animation-delay: 379.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3800) {\n        animation-delay: 380s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3801) {\n        animation-delay: 380.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3802) {\n        animation-delay: 380.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3803) {\n        animation-delay: 380.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3804) {\n        animation-delay: 380.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3805) {\n        animation-delay: 380.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3806) {\n        animation-delay: 380.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3807) {\n        animation-delay: 380.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3808) {\n        animation-delay: 380.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3809) {\n        animation-delay: 380.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3810) {\n        animation-delay: 381s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3811) {\n        animation-delay: 381.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3812) {\n        animation-delay: 381.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3813) {\n        animation-delay: 381.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3814) {\n        animation-delay: 381.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3815) {\n        animation-delay: 381.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3816) {\n        animation-delay: 381.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3817) {\n        animation-delay: 381.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3818) {\n        animation-delay: 381.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3819) {\n        animation-delay: 381.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3820) {\n        animation-delay: 382s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3821) {\n        animation-delay: 382.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3822) {\n        animation-delay: 382.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3823) {\n        animation-delay: 382.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3824) {\n        animation-delay: 382.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3825) {\n        animation-delay: 382.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3826) {\n        animation-delay: 382.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3827) {\n        animation-delay: 382.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3828) {\n        animation-delay: 382.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3829) {\n        animation-delay: 382.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3830) {\n        animation-delay: 383s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3831) {\n        animation-delay: 383.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3832) {\n        animation-delay: 383.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3833) {\n        animation-delay: 383.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3834) {\n        animation-delay: 383.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3835) {\n        animation-delay: 383.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3836) {\n        animation-delay: 383.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3837) {\n        animation-delay: 383.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3838) {\n        animation-delay: 383.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3839) {\n        animation-delay: 383.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3840) {\n        animation-delay: 384s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3841) {\n        animation-delay: 384.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3842) {\n        animation-delay: 384.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3843) {\n        animation-delay: 384.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3844) {\n        animation-delay: 384.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3845) {\n        animation-delay: 384.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3846) {\n        animation-delay: 384.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3847) {\n        animation-delay: 384.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3848) {\n        animation-delay: 384.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3849) {\n        animation-delay: 384.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3850) {\n        animation-delay: 385s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3851) {\n        animation-delay: 385.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3852) {\n        animation-delay: 385.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3853) {\n        animation-delay: 385.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3854) {\n        animation-delay: 385.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3855) {\n        animation-delay: 385.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3856) {\n        animation-delay: 385.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3857) {\n        animation-delay: 385.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3858) {\n        animation-delay: 385.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3859) {\n        animation-delay: 385.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3860) {\n        animation-delay: 386s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3861) {\n        animation-delay: 386.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3862) {\n        animation-delay: 386.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3863) {\n        animation-delay: 386.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3864) {\n        animation-delay: 386.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3865) {\n        animation-delay: 386.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3866) {\n        animation-delay: 386.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3867) {\n        animation-delay: 386.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3868) {\n        animation-delay: 386.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3869) {\n        animation-delay: 386.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3870) {\n        animation-delay: 387s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3871) {\n        animation-delay: 387.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3872) {\n        animation-delay: 387.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3873) {\n        animation-delay: 387.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3874) {\n        animation-delay: 387.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3875) {\n        animation-delay: 387.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3876) {\n        animation-delay: 387.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3877) {\n        animation-delay: 387.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3878) {\n        animation-delay: 387.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3879) {\n        animation-delay: 387.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3880) {\n        animation-delay: 388s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3881) {\n        animation-delay: 388.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3882) {\n        animation-delay: 388.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3883) {\n        animation-delay: 388.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3884) {\n        animation-delay: 388.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3885) {\n        animation-delay: 388.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3886) {\n        animation-delay: 388.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3887) {\n        animation-delay: 388.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3888) {\n        animation-delay: 388.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3889) {\n        animation-delay: 388.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3890) {\n        animation-delay: 389s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3891) {\n        animation-delay: 389.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3892) {\n        animation-delay: 389.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3893) {\n        animation-delay: 389.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3894) {\n        animation-delay: 389.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3895) {\n        animation-delay: 389.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3896) {\n        animation-delay: 389.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3897) {\n        animation-delay: 389.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3898) {\n        animation-delay: 389.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3899) {\n        animation-delay: 389.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3900) {\n        animation-delay: 390s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3901) {\n        animation-delay: 390.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3902) {\n        animation-delay: 390.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3903) {\n        animation-delay: 390.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3904) {\n        animation-delay: 390.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3905) {\n        animation-delay: 390.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3906) {\n        animation-delay: 390.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3907) {\n        animation-delay: 390.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3908) {\n        animation-delay: 390.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3909) {\n        animation-delay: 390.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3910) {\n        animation-delay: 391s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3911) {\n        animation-delay: 391.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3912) {\n        animation-delay: 391.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3913) {\n        animation-delay: 391.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3914) {\n        animation-delay: 391.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3915) {\n        animation-delay: 391.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3916) {\n        animation-delay: 391.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3917) {\n        animation-delay: 391.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3918) {\n        animation-delay: 391.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3919) {\n        animation-delay: 391.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3920) {\n        animation-delay: 392s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3921) {\n        animation-delay: 392.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3922) {\n        animation-delay: 392.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3923) {\n        animation-delay: 392.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3924) {\n        animation-delay: 392.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3925) {\n        animation-delay: 392.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3926) {\n        animation-delay: 392.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3927) {\n        animation-delay: 392.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3928) {\n        animation-delay: 392.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3929) {\n        animation-delay: 392.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3930) {\n        animation-delay: 393s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3931) {\n        animation-delay: 393.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3932) {\n        animation-delay: 393.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3933) {\n        animation-delay: 393.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3934) {\n        animation-delay: 393.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3935) {\n        animation-delay: 393.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3936) {\n        animation-delay: 393.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3937) {\n        animation-delay: 393.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3938) {\n        animation-delay: 393.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3939) {\n        animation-delay: 393.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3940) {\n        animation-delay: 394s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3941) {\n        animation-delay: 394.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3942) {\n        animation-delay: 394.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3943) {\n        animation-delay: 394.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3944) {\n        animation-delay: 394.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3945) {\n        animation-delay: 394.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3946) {\n        animation-delay: 394.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3947) {\n        animation-delay: 394.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3948) {\n        animation-delay: 394.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3949) {\n        animation-delay: 394.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3950) {\n        animation-delay: 395s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3951) {\n        animation-delay: 395.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3952) {\n        animation-delay: 395.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3953) {\n        animation-delay: 395.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3954) {\n        animation-delay: 395.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3955) {\n        animation-delay: 395.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3956) {\n        animation-delay: 395.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3957) {\n        animation-delay: 395.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3958) {\n        animation-delay: 395.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3959) {\n        animation-delay: 395.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3960) {\n        animation-delay: 396s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3961) {\n        animation-delay: 396.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3962) {\n        animation-delay: 396.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3963) {\n        animation-delay: 396.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3964) {\n        animation-delay: 396.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3965) {\n        animation-delay: 396.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3966) {\n        animation-delay: 396.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3967) {\n        animation-delay: 396.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3968) {\n        animation-delay: 396.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3969) {\n        animation-delay: 396.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3970) {\n        animation-delay: 397s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3971) {\n        animation-delay: 397.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3972) {\n        animation-delay: 397.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3973) {\n        animation-delay: 397.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3974) {\n        animation-delay: 397.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3975) {\n        animation-delay: 397.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3976) {\n        animation-delay: 397.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3977) {\n        animation-delay: 397.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3978) {\n        animation-delay: 397.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3979) {\n        animation-delay: 397.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3980) {\n        animation-delay: 398s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3981) {\n        animation-delay: 398.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3982) {\n        animation-delay: 398.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3983) {\n        animation-delay: 398.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3984) {\n        animation-delay: 398.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3985) {\n        animation-delay: 398.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3986) {\n        animation-delay: 398.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3987) {\n        animation-delay: 398.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3988) {\n        animation-delay: 398.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3989) {\n        animation-delay: 398.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3990) {\n        animation-delay: 399s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3991) {\n        animation-delay: 399.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3992) {\n        animation-delay: 399.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3993) {\n        animation-delay: 399.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3994) {\n        animation-delay: 399.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3995) {\n        animation-delay: 399.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3996) {\n        animation-delay: 399.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3997) {\n        animation-delay: 399.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3998) {\n        animation-delay: 399.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(3999) {\n        animation-delay: 399.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4000) {\n        animation-delay: 400s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4001) {\n        animation-delay: 400.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4002) {\n        animation-delay: 400.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4003) {\n        animation-delay: 400.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4004) {\n        animation-delay: 400.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4005) {\n        animation-delay: 400.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4006) {\n        animation-delay: 400.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4007) {\n        animation-delay: 400.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4008) {\n        animation-delay: 400.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4009) {\n        animation-delay: 400.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4010) {\n        animation-delay: 401s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4011) {\n        animation-delay: 401.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4012) {\n        animation-delay: 401.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4013) {\n        animation-delay: 401.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4014) {\n        animation-delay: 401.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4015) {\n        animation-delay: 401.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4016) {\n        animation-delay: 401.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4017) {\n        animation-delay: 401.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4018) {\n        animation-delay: 401.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4019) {\n        animation-delay: 401.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4020) {\n        animation-delay: 402s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4021) {\n        animation-delay: 402.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4022) {\n        animation-delay: 402.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4023) {\n        animation-delay: 402.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4024) {\n        animation-delay: 402.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4025) {\n        animation-delay: 402.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4026) {\n        animation-delay: 402.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4027) {\n        animation-delay: 402.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4028) {\n        animation-delay: 402.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4029) {\n        animation-delay: 402.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4030) {\n        animation-delay: 403s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4031) {\n        animation-delay: 403.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4032) {\n        animation-delay: 403.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4033) {\n        animation-delay: 403.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4034) {\n        animation-delay: 403.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4035) {\n        animation-delay: 403.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4036) {\n        animation-delay: 403.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4037) {\n        animation-delay: 403.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4038) {\n        animation-delay: 403.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4039) {\n        animation-delay: 403.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4040) {\n        animation-delay: 404s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4041) {\n        animation-delay: 404.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4042) {\n        animation-delay: 404.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4043) {\n        animation-delay: 404.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4044) {\n        animation-delay: 404.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4045) {\n        animation-delay: 404.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4046) {\n        animation-delay: 404.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4047) {\n        animation-delay: 404.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4048) {\n        animation-delay: 404.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4049) {\n        animation-delay: 404.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4050) {\n        animation-delay: 405s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4051) {\n        animation-delay: 405.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4052) {\n        animation-delay: 405.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4053) {\n        animation-delay: 405.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4054) {\n        animation-delay: 405.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4055) {\n        animation-delay: 405.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4056) {\n        animation-delay: 405.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4057) {\n        animation-delay: 405.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4058) {\n        animation-delay: 405.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4059) {\n        animation-delay: 405.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4060) {\n        animation-delay: 406s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4061) {\n        animation-delay: 406.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4062) {\n        animation-delay: 406.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4063) {\n        animation-delay: 406.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4064) {\n        animation-delay: 406.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4065) {\n        animation-delay: 406.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4066) {\n        animation-delay: 406.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4067) {\n        animation-delay: 406.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4068) {\n        animation-delay: 406.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4069) {\n        animation-delay: 406.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4070) {\n        animation-delay: 407s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4071) {\n        animation-delay: 407.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4072) {\n        animation-delay: 407.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4073) {\n        animation-delay: 407.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4074) {\n        animation-delay: 407.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4075) {\n        animation-delay: 407.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4076) {\n        animation-delay: 407.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4077) {\n        animation-delay: 407.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4078) {\n        animation-delay: 407.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4079) {\n        animation-delay: 407.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4080) {\n        animation-delay: 408s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4081) {\n        animation-delay: 408.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4082) {\n        animation-delay: 408.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4083) {\n        animation-delay: 408.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4084) {\n        animation-delay: 408.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4085) {\n        animation-delay: 408.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4086) {\n        animation-delay: 408.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4087) {\n        animation-delay: 408.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4088) {\n        animation-delay: 408.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4089) {\n        animation-delay: 408.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4090) {\n        animation-delay: 409s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4091) {\n        animation-delay: 409.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4092) {\n        animation-delay: 409.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4093) {\n        animation-delay: 409.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4094) {\n        animation-delay: 409.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4095) {\n        animation-delay: 409.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4096) {\n        animation-delay: 409.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4097) {\n        animation-delay: 409.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4098) {\n        animation-delay: 409.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4099) {\n        animation-delay: 409.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4100) {\n        animation-delay: 410s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4101) {\n        animation-delay: 410.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4102) {\n        animation-delay: 410.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4103) {\n        animation-delay: 410.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4104) {\n        animation-delay: 410.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4105) {\n        animation-delay: 410.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4106) {\n        animation-delay: 410.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4107) {\n        animation-delay: 410.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4108) {\n        animation-delay: 410.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4109) {\n        animation-delay: 410.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4110) {\n        animation-delay: 411s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4111) {\n        animation-delay: 411.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4112) {\n        animation-delay: 411.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4113) {\n        animation-delay: 411.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4114) {\n        animation-delay: 411.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4115) {\n        animation-delay: 411.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4116) {\n        animation-delay: 411.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4117) {\n        animation-delay: 411.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4118) {\n        animation-delay: 411.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4119) {\n        animation-delay: 411.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4120) {\n        animation-delay: 412s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4121) {\n        animation-delay: 412.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4122) {\n        animation-delay: 412.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4123) {\n        animation-delay: 412.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4124) {\n        animation-delay: 412.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4125) {\n        animation-delay: 412.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4126) {\n        animation-delay: 412.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4127) {\n        animation-delay: 412.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4128) {\n        animation-delay: 412.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4129) {\n        animation-delay: 412.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4130) {\n        animation-delay: 413s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4131) {\n        animation-delay: 413.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4132) {\n        animation-delay: 413.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4133) {\n        animation-delay: 413.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4134) {\n        animation-delay: 413.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4135) {\n        animation-delay: 413.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4136) {\n        animation-delay: 413.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4137) {\n        animation-delay: 413.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4138) {\n        animation-delay: 413.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4139) {\n        animation-delay: 413.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4140) {\n        animation-delay: 414s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4141) {\n        animation-delay: 414.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4142) {\n        animation-delay: 414.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4143) {\n        animation-delay: 414.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4144) {\n        animation-delay: 414.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4145) {\n        animation-delay: 414.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4146) {\n        animation-delay: 414.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4147) {\n        animation-delay: 414.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4148) {\n        animation-delay: 414.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4149) {\n        animation-delay: 414.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4150) {\n        animation-delay: 415s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4151) {\n        animation-delay: 415.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4152) {\n        animation-delay: 415.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4153) {\n        animation-delay: 415.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4154) {\n        animation-delay: 415.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4155) {\n        animation-delay: 415.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4156) {\n        animation-delay: 415.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4157) {\n        animation-delay: 415.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4158) {\n        animation-delay: 415.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4159) {\n        animation-delay: 415.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4160) {\n        animation-delay: 416s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4161) {\n        animation-delay: 416.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4162) {\n        animation-delay: 416.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4163) {\n        animation-delay: 416.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4164) {\n        animation-delay: 416.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4165) {\n        animation-delay: 416.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4166) {\n        animation-delay: 416.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4167) {\n        animation-delay: 416.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4168) {\n        animation-delay: 416.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4169) {\n        animation-delay: 416.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4170) {\n        animation-delay: 417s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4171) {\n        animation-delay: 417.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4172) {\n        animation-delay: 417.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4173) {\n        animation-delay: 417.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4174) {\n        animation-delay: 417.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4175) {\n        animation-delay: 417.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4176) {\n        animation-delay: 417.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4177) {\n        animation-delay: 417.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4178) {\n        animation-delay: 417.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4179) {\n        animation-delay: 417.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4180) {\n        animation-delay: 418s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4181) {\n        animation-delay: 418.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4182) {\n        animation-delay: 418.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4183) {\n        animation-delay: 418.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4184) {\n        animation-delay: 418.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4185) {\n        animation-delay: 418.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4186) {\n        animation-delay: 418.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4187) {\n        animation-delay: 418.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4188) {\n        animation-delay: 418.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4189) {\n        animation-delay: 418.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4190) {\n        animation-delay: 419s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4191) {\n        animation-delay: 419.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4192) {\n        animation-delay: 419.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4193) {\n        animation-delay: 419.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4194) {\n        animation-delay: 419.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4195) {\n        animation-delay: 419.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4196) {\n        animation-delay: 419.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4197) {\n        animation-delay: 419.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4198) {\n        animation-delay: 419.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4199) {\n        animation-delay: 419.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4200) {\n        animation-delay: 420s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4201) {\n        animation-delay: 420.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4202) {\n        animation-delay: 420.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4203) {\n        animation-delay: 420.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4204) {\n        animation-delay: 420.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4205) {\n        animation-delay: 420.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4206) {\n        animation-delay: 420.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4207) {\n        animation-delay: 420.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4208) {\n        animation-delay: 420.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4209) {\n        animation-delay: 420.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4210) {\n        animation-delay: 421s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4211) {\n        animation-delay: 421.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4212) {\n        animation-delay: 421.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4213) {\n        animation-delay: 421.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4214) {\n        animation-delay: 421.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4215) {\n        animation-delay: 421.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4216) {\n        animation-delay: 421.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4217) {\n        animation-delay: 421.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4218) {\n        animation-delay: 421.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4219) {\n        animation-delay: 421.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4220) {\n        animation-delay: 422s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4221) {\n        animation-delay: 422.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4222) {\n        animation-delay: 422.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4223) {\n        animation-delay: 422.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4224) {\n        animation-delay: 422.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4225) {\n        animation-delay: 422.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4226) {\n        animation-delay: 422.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4227) {\n        animation-delay: 422.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4228) {\n        animation-delay: 422.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4229) {\n        animation-delay: 422.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4230) {\n        animation-delay: 423s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4231) {\n        animation-delay: 423.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4232) {\n        animation-delay: 423.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4233) {\n        animation-delay: 423.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4234) {\n        animation-delay: 423.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4235) {\n        animation-delay: 423.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4236) {\n        animation-delay: 423.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4237) {\n        animation-delay: 423.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4238) {\n        animation-delay: 423.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4239) {\n        animation-delay: 423.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4240) {\n        animation-delay: 424s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4241) {\n        animation-delay: 424.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4242) {\n        animation-delay: 424.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4243) {\n        animation-delay: 424.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4244) {\n        animation-delay: 424.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4245) {\n        animation-delay: 424.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4246) {\n        animation-delay: 424.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4247) {\n        animation-delay: 424.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4248) {\n        animation-delay: 424.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4249) {\n        animation-delay: 424.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4250) {\n        animation-delay: 425s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4251) {\n        animation-delay: 425.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4252) {\n        animation-delay: 425.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4253) {\n        animation-delay: 425.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4254) {\n        animation-delay: 425.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4255) {\n        animation-delay: 425.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4256) {\n        animation-delay: 425.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4257) {\n        animation-delay: 425.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4258) {\n        animation-delay: 425.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4259) {\n        animation-delay: 425.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4260) {\n        animation-delay: 426s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4261) {\n        animation-delay: 426.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4262) {\n        animation-delay: 426.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4263) {\n        animation-delay: 426.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4264) {\n        animation-delay: 426.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4265) {\n        animation-delay: 426.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4266) {\n        animation-delay: 426.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4267) {\n        animation-delay: 426.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4268) {\n        animation-delay: 426.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4269) {\n        animation-delay: 426.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4270) {\n        animation-delay: 427s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4271) {\n        animation-delay: 427.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4272) {\n        animation-delay: 427.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4273) {\n        animation-delay: 427.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4274) {\n        animation-delay: 427.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4275) {\n        animation-delay: 427.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4276) {\n        animation-delay: 427.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4277) {\n        animation-delay: 427.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4278) {\n        animation-delay: 427.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4279) {\n        animation-delay: 427.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4280) {\n        animation-delay: 428s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4281) {\n        animation-delay: 428.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4282) {\n        animation-delay: 428.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4283) {\n        animation-delay: 428.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4284) {\n        animation-delay: 428.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4285) {\n        animation-delay: 428.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4286) {\n        animation-delay: 428.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4287) {\n        animation-delay: 428.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4288) {\n        animation-delay: 428.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4289) {\n        animation-delay: 428.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4290) {\n        animation-delay: 429s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4291) {\n        animation-delay: 429.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4292) {\n        animation-delay: 429.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4293) {\n        animation-delay: 429.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4294) {\n        animation-delay: 429.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4295) {\n        animation-delay: 429.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4296) {\n        animation-delay: 429.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4297) {\n        animation-delay: 429.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4298) {\n        animation-delay: 429.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4299) {\n        animation-delay: 429.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4300) {\n        animation-delay: 430s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4301) {\n        animation-delay: 430.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4302) {\n        animation-delay: 430.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4303) {\n        animation-delay: 430.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4304) {\n        animation-delay: 430.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4305) {\n        animation-delay: 430.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4306) {\n        animation-delay: 430.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4307) {\n        animation-delay: 430.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4308) {\n        animation-delay: 430.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4309) {\n        animation-delay: 430.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4310) {\n        animation-delay: 431s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4311) {\n        animation-delay: 431.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4312) {\n        animation-delay: 431.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4313) {\n        animation-delay: 431.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4314) {\n        animation-delay: 431.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4315) {\n        animation-delay: 431.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4316) {\n        animation-delay: 431.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4317) {\n        animation-delay: 431.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4318) {\n        animation-delay: 431.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4319) {\n        animation-delay: 431.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4320) {\n        animation-delay: 432s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4321) {\n        animation-delay: 432.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4322) {\n        animation-delay: 432.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4323) {\n        animation-delay: 432.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4324) {\n        animation-delay: 432.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4325) {\n        animation-delay: 432.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4326) {\n        animation-delay: 432.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4327) {\n        animation-delay: 432.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4328) {\n        animation-delay: 432.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4329) {\n        animation-delay: 432.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4330) {\n        animation-delay: 433s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4331) {\n        animation-delay: 433.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4332) {\n        animation-delay: 433.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4333) {\n        animation-delay: 433.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4334) {\n        animation-delay: 433.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4335) {\n        animation-delay: 433.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4336) {\n        animation-delay: 433.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4337) {\n        animation-delay: 433.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4338) {\n        animation-delay: 433.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4339) {\n        animation-delay: 433.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4340) {\n        animation-delay: 434s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4341) {\n        animation-delay: 434.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4342) {\n        animation-delay: 434.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4343) {\n        animation-delay: 434.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4344) {\n        animation-delay: 434.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4345) {\n        animation-delay: 434.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4346) {\n        animation-delay: 434.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4347) {\n        animation-delay: 434.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4348) {\n        animation-delay: 434.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4349) {\n        animation-delay: 434.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4350) {\n        animation-delay: 435s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4351) {\n        animation-delay: 435.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4352) {\n        animation-delay: 435.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4353) {\n        animation-delay: 435.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4354) {\n        animation-delay: 435.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4355) {\n        animation-delay: 435.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4356) {\n        animation-delay: 435.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4357) {\n        animation-delay: 435.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4358) {\n        animation-delay: 435.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4359) {\n        animation-delay: 435.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4360) {\n        animation-delay: 436s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4361) {\n        animation-delay: 436.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4362) {\n        animation-delay: 436.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4363) {\n        animation-delay: 436.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4364) {\n        animation-delay: 436.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4365) {\n        animation-delay: 436.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4366) {\n        animation-delay: 436.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4367) {\n        animation-delay: 436.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4368) {\n        animation-delay: 436.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4369) {\n        animation-delay: 436.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4370) {\n        animation-delay: 437s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4371) {\n        animation-delay: 437.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4372) {\n        animation-delay: 437.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4373) {\n        animation-delay: 437.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4374) {\n        animation-delay: 437.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4375) {\n        animation-delay: 437.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4376) {\n        animation-delay: 437.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4377) {\n        animation-delay: 437.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4378) {\n        animation-delay: 437.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4379) {\n        animation-delay: 437.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4380) {\n        animation-delay: 438s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4381) {\n        animation-delay: 438.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4382) {\n        animation-delay: 438.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4383) {\n        animation-delay: 438.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4384) {\n        animation-delay: 438.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4385) {\n        animation-delay: 438.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4386) {\n        animation-delay: 438.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4387) {\n        animation-delay: 438.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4388) {\n        animation-delay: 438.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4389) {\n        animation-delay: 438.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4390) {\n        animation-delay: 439s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4391) {\n        animation-delay: 439.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4392) {\n        animation-delay: 439.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4393) {\n        animation-delay: 439.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4394) {\n        animation-delay: 439.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4395) {\n        animation-delay: 439.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4396) {\n        animation-delay: 439.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4397) {\n        animation-delay: 439.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4398) {\n        animation-delay: 439.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4399) {\n        animation-delay: 439.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4400) {\n        animation-delay: 440s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4401) {\n        animation-delay: 440.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4402) {\n        animation-delay: 440.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4403) {\n        animation-delay: 440.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4404) {\n        animation-delay: 440.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4405) {\n        animation-delay: 440.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4406) {\n        animation-delay: 440.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4407) {\n        animation-delay: 440.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4408) {\n        animation-delay: 440.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4409) {\n        animation-delay: 440.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4410) {\n        animation-delay: 441s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4411) {\n        animation-delay: 441.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4412) {\n        animation-delay: 441.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4413) {\n        animation-delay: 441.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4414) {\n        animation-delay: 441.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4415) {\n        animation-delay: 441.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4416) {\n        animation-delay: 441.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4417) {\n        animation-delay: 441.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4418) {\n        animation-delay: 441.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4419) {\n        animation-delay: 441.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4420) {\n        animation-delay: 442s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4421) {\n        animation-delay: 442.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4422) {\n        animation-delay: 442.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4423) {\n        animation-delay: 442.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4424) {\n        animation-delay: 442.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4425) {\n        animation-delay: 442.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4426) {\n        animation-delay: 442.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4427) {\n        animation-delay: 442.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4428) {\n        animation-delay: 442.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4429) {\n        animation-delay: 442.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4430) {\n        animation-delay: 443s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4431) {\n        animation-delay: 443.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4432) {\n        animation-delay: 443.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4433) {\n        animation-delay: 443.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4434) {\n        animation-delay: 443.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4435) {\n        animation-delay: 443.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4436) {\n        animation-delay: 443.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4437) {\n        animation-delay: 443.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4438) {\n        animation-delay: 443.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4439) {\n        animation-delay: 443.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4440) {\n        animation-delay: 444s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4441) {\n        animation-delay: 444.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4442) {\n        animation-delay: 444.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4443) {\n        animation-delay: 444.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4444) {\n        animation-delay: 444.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4445) {\n        animation-delay: 444.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4446) {\n        animation-delay: 444.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4447) {\n        animation-delay: 444.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4448) {\n        animation-delay: 444.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4449) {\n        animation-delay: 444.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4450) {\n        animation-delay: 445s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4451) {\n        animation-delay: 445.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4452) {\n        animation-delay: 445.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4453) {\n        animation-delay: 445.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4454) {\n        animation-delay: 445.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4455) {\n        animation-delay: 445.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4456) {\n        animation-delay: 445.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4457) {\n        animation-delay: 445.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4458) {\n        animation-delay: 445.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4459) {\n        animation-delay: 445.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4460) {\n        animation-delay: 446s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4461) {\n        animation-delay: 446.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4462) {\n        animation-delay: 446.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4463) {\n        animation-delay: 446.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4464) {\n        animation-delay: 446.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4465) {\n        animation-delay: 446.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4466) {\n        animation-delay: 446.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4467) {\n        animation-delay: 446.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4468) {\n        animation-delay: 446.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4469) {\n        animation-delay: 446.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4470) {\n        animation-delay: 447s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4471) {\n        animation-delay: 447.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4472) {\n        animation-delay: 447.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4473) {\n        animation-delay: 447.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4474) {\n        animation-delay: 447.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4475) {\n        animation-delay: 447.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4476) {\n        animation-delay: 447.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4477) {\n        animation-delay: 447.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4478) {\n        animation-delay: 447.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4479) {\n        animation-delay: 447.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4480) {\n        animation-delay: 448s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4481) {\n        animation-delay: 448.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4482) {\n        animation-delay: 448.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4483) {\n        animation-delay: 448.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4484) {\n        animation-delay: 448.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4485) {\n        animation-delay: 448.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4486) {\n        animation-delay: 448.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4487) {\n        animation-delay: 448.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4488) {\n        animation-delay: 448.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4489) {\n        animation-delay: 448.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4490) {\n        animation-delay: 449s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4491) {\n        animation-delay: 449.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4492) {\n        animation-delay: 449.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4493) {\n        animation-delay: 449.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4494) {\n        animation-delay: 449.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4495) {\n        animation-delay: 449.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4496) {\n        animation-delay: 449.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4497) {\n        animation-delay: 449.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4498) {\n        animation-delay: 449.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4499) {\n        animation-delay: 449.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4500) {\n        animation-delay: 450s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4501) {\n        animation-delay: 450.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4502) {\n        animation-delay: 450.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4503) {\n        animation-delay: 450.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4504) {\n        animation-delay: 450.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4505) {\n        animation-delay: 450.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4506) {\n        animation-delay: 450.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4507) {\n        animation-delay: 450.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4508) {\n        animation-delay: 450.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4509) {\n        animation-delay: 450.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4510) {\n        animation-delay: 451s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4511) {\n        animation-delay: 451.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4512) {\n        animation-delay: 451.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4513) {\n        animation-delay: 451.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4514) {\n        animation-delay: 451.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4515) {\n        animation-delay: 451.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4516) {\n        animation-delay: 451.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4517) {\n        animation-delay: 451.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4518) {\n        animation-delay: 451.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4519) {\n        animation-delay: 451.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4520) {\n        animation-delay: 452s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4521) {\n        animation-delay: 452.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4522) {\n        animation-delay: 452.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4523) {\n        animation-delay: 452.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4524) {\n        animation-delay: 452.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4525) {\n        animation-delay: 452.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4526) {\n        animation-delay: 452.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4527) {\n        animation-delay: 452.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4528) {\n        animation-delay: 452.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4529) {\n        animation-delay: 452.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4530) {\n        animation-delay: 453s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4531) {\n        animation-delay: 453.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4532) {\n        animation-delay: 453.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4533) {\n        animation-delay: 453.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4534) {\n        animation-delay: 453.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4535) {\n        animation-delay: 453.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4536) {\n        animation-delay: 453.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4537) {\n        animation-delay: 453.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4538) {\n        animation-delay: 453.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4539) {\n        animation-delay: 453.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4540) {\n        animation-delay: 454s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4541) {\n        animation-delay: 454.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4542) {\n        animation-delay: 454.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4543) {\n        animation-delay: 454.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4544) {\n        animation-delay: 454.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4545) {\n        animation-delay: 454.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4546) {\n        animation-delay: 454.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4547) {\n        animation-delay: 454.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4548) {\n        animation-delay: 454.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4549) {\n        animation-delay: 454.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4550) {\n        animation-delay: 455s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4551) {\n        animation-delay: 455.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4552) {\n        animation-delay: 455.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4553) {\n        animation-delay: 455.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4554) {\n        animation-delay: 455.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4555) {\n        animation-delay: 455.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4556) {\n        animation-delay: 455.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4557) {\n        animation-delay: 455.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4558) {\n        animation-delay: 455.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4559) {\n        animation-delay: 455.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4560) {\n        animation-delay: 456s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4561) {\n        animation-delay: 456.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4562) {\n        animation-delay: 456.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4563) {\n        animation-delay: 456.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4564) {\n        animation-delay: 456.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4565) {\n        animation-delay: 456.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4566) {\n        animation-delay: 456.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4567) {\n        animation-delay: 456.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4568) {\n        animation-delay: 456.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4569) {\n        animation-delay: 456.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4570) {\n        animation-delay: 457s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4571) {\n        animation-delay: 457.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4572) {\n        animation-delay: 457.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4573) {\n        animation-delay: 457.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4574) {\n        animation-delay: 457.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4575) {\n        animation-delay: 457.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4576) {\n        animation-delay: 457.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4577) {\n        animation-delay: 457.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4578) {\n        animation-delay: 457.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4579) {\n        animation-delay: 457.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4580) {\n        animation-delay: 458s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4581) {\n        animation-delay: 458.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4582) {\n        animation-delay: 458.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4583) {\n        animation-delay: 458.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4584) {\n        animation-delay: 458.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4585) {\n        animation-delay: 458.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4586) {\n        animation-delay: 458.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4587) {\n        animation-delay: 458.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4588) {\n        animation-delay: 458.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4589) {\n        animation-delay: 458.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4590) {\n        animation-delay: 459s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4591) {\n        animation-delay: 459.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4592) {\n        animation-delay: 459.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4593) {\n        animation-delay: 459.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4594) {\n        animation-delay: 459.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4595) {\n        animation-delay: 459.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4596) {\n        animation-delay: 459.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4597) {\n        animation-delay: 459.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4598) {\n        animation-delay: 459.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4599) {\n        animation-delay: 459.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4600) {\n        animation-delay: 460s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4601) {\n        animation-delay: 460.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4602) {\n        animation-delay: 460.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4603) {\n        animation-delay: 460.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4604) {\n        animation-delay: 460.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4605) {\n        animation-delay: 460.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4606) {\n        animation-delay: 460.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4607) {\n        animation-delay: 460.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4608) {\n        animation-delay: 460.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4609) {\n        animation-delay: 460.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4610) {\n        animation-delay: 461s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4611) {\n        animation-delay: 461.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4612) {\n        animation-delay: 461.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4613) {\n        animation-delay: 461.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4614) {\n        animation-delay: 461.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4615) {\n        animation-delay: 461.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4616) {\n        animation-delay: 461.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4617) {\n        animation-delay: 461.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4618) {\n        animation-delay: 461.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4619) {\n        animation-delay: 461.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4620) {\n        animation-delay: 462s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4621) {\n        animation-delay: 462.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4622) {\n        animation-delay: 462.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4623) {\n        animation-delay: 462.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4624) {\n        animation-delay: 462.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4625) {\n        animation-delay: 462.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4626) {\n        animation-delay: 462.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4627) {\n        animation-delay: 462.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4628) {\n        animation-delay: 462.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4629) {\n        animation-delay: 462.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4630) {\n        animation-delay: 463s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4631) {\n        animation-delay: 463.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4632) {\n        animation-delay: 463.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4633) {\n        animation-delay: 463.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4634) {\n        animation-delay: 463.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4635) {\n        animation-delay: 463.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4636) {\n        animation-delay: 463.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4637) {\n        animation-delay: 463.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4638) {\n        animation-delay: 463.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4639) {\n        animation-delay: 463.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4640) {\n        animation-delay: 464s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4641) {\n        animation-delay: 464.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4642) {\n        animation-delay: 464.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4643) {\n        animation-delay: 464.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4644) {\n        animation-delay: 464.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4645) {\n        animation-delay: 464.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4646) {\n        animation-delay: 464.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4647) {\n        animation-delay: 464.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4648) {\n        animation-delay: 464.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4649) {\n        animation-delay: 464.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4650) {\n        animation-delay: 465s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4651) {\n        animation-delay: 465.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4652) {\n        animation-delay: 465.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4653) {\n        animation-delay: 465.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4654) {\n        animation-delay: 465.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4655) {\n        animation-delay: 465.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4656) {\n        animation-delay: 465.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4657) {\n        animation-delay: 465.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4658) {\n        animation-delay: 465.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4659) {\n        animation-delay: 465.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4660) {\n        animation-delay: 466s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4661) {\n        animation-delay: 466.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4662) {\n        animation-delay: 466.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4663) {\n        animation-delay: 466.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4664) {\n        animation-delay: 466.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4665) {\n        animation-delay: 466.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4666) {\n        animation-delay: 466.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4667) {\n        animation-delay: 466.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4668) {\n        animation-delay: 466.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4669) {\n        animation-delay: 466.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4670) {\n        animation-delay: 467s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4671) {\n        animation-delay: 467.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4672) {\n        animation-delay: 467.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4673) {\n        animation-delay: 467.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4674) {\n        animation-delay: 467.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4675) {\n        animation-delay: 467.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4676) {\n        animation-delay: 467.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4677) {\n        animation-delay: 467.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4678) {\n        animation-delay: 467.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4679) {\n        animation-delay: 467.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4680) {\n        animation-delay: 468s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4681) {\n        animation-delay: 468.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4682) {\n        animation-delay: 468.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4683) {\n        animation-delay: 468.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4684) {\n        animation-delay: 468.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4685) {\n        animation-delay: 468.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4686) {\n        animation-delay: 468.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4687) {\n        animation-delay: 468.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4688) {\n        animation-delay: 468.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4689) {\n        animation-delay: 468.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4690) {\n        animation-delay: 469s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4691) {\n        animation-delay: 469.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4692) {\n        animation-delay: 469.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4693) {\n        animation-delay: 469.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4694) {\n        animation-delay: 469.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4695) {\n        animation-delay: 469.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4696) {\n        animation-delay: 469.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4697) {\n        animation-delay: 469.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4698) {\n        animation-delay: 469.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4699) {\n        animation-delay: 469.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4700) {\n        animation-delay: 470s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4701) {\n        animation-delay: 470.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4702) {\n        animation-delay: 470.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4703) {\n        animation-delay: 470.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4704) {\n        animation-delay: 470.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4705) {\n        animation-delay: 470.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4706) {\n        animation-delay: 470.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4707) {\n        animation-delay: 470.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4708) {\n        animation-delay: 470.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4709) {\n        animation-delay: 470.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4710) {\n        animation-delay: 471s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4711) {\n        animation-delay: 471.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4712) {\n        animation-delay: 471.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4713) {\n        animation-delay: 471.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4714) {\n        animation-delay: 471.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4715) {\n        animation-delay: 471.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4716) {\n        animation-delay: 471.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4717) {\n        animation-delay: 471.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4718) {\n        animation-delay: 471.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4719) {\n        animation-delay: 471.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4720) {\n        animation-delay: 472s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4721) {\n        animation-delay: 472.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4722) {\n        animation-delay: 472.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4723) {\n        animation-delay: 472.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4724) {\n        animation-delay: 472.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4725) {\n        animation-delay: 472.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4726) {\n        animation-delay: 472.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4727) {\n        animation-delay: 472.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4728) {\n        animation-delay: 472.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4729) {\n        animation-delay: 472.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4730) {\n        animation-delay: 473s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4731) {\n        animation-delay: 473.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4732) {\n        animation-delay: 473.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4733) {\n        animation-delay: 473.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4734) {\n        animation-delay: 473.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4735) {\n        animation-delay: 473.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4736) {\n        animation-delay: 473.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4737) {\n        animation-delay: 473.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4738) {\n        animation-delay: 473.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4739) {\n        animation-delay: 473.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4740) {\n        animation-delay: 474s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4741) {\n        animation-delay: 474.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4742) {\n        animation-delay: 474.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4743) {\n        animation-delay: 474.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4744) {\n        animation-delay: 474.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4745) {\n        animation-delay: 474.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4746) {\n        animation-delay: 474.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4747) {\n        animation-delay: 474.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4748) {\n        animation-delay: 474.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4749) {\n        animation-delay: 474.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4750) {\n        animation-delay: 475s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4751) {\n        animation-delay: 475.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4752) {\n        animation-delay: 475.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4753) {\n        animation-delay: 475.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4754) {\n        animation-delay: 475.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4755) {\n        animation-delay: 475.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4756) {\n        animation-delay: 475.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4757) {\n        animation-delay: 475.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4758) {\n        animation-delay: 475.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4759) {\n        animation-delay: 475.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4760) {\n        animation-delay: 476s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4761) {\n        animation-delay: 476.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4762) {\n        animation-delay: 476.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4763) {\n        animation-delay: 476.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4764) {\n        animation-delay: 476.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4765) {\n        animation-delay: 476.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4766) {\n        animation-delay: 476.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4767) {\n        animation-delay: 476.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4768) {\n        animation-delay: 476.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4769) {\n        animation-delay: 476.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4770) {\n        animation-delay: 477s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4771) {\n        animation-delay: 477.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4772) {\n        animation-delay: 477.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4773) {\n        animation-delay: 477.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4774) {\n        animation-delay: 477.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4775) {\n        animation-delay: 477.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4776) {\n        animation-delay: 477.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4777) {\n        animation-delay: 477.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4778) {\n        animation-delay: 477.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4779) {\n        animation-delay: 477.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4780) {\n        animation-delay: 478s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4781) {\n        animation-delay: 478.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4782) {\n        animation-delay: 478.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4783) {\n        animation-delay: 478.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4784) {\n        animation-delay: 478.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4785) {\n        animation-delay: 478.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4786) {\n        animation-delay: 478.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4787) {\n        animation-delay: 478.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4788) {\n        animation-delay: 478.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4789) {\n        animation-delay: 478.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4790) {\n        animation-delay: 479s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4791) {\n        animation-delay: 479.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4792) {\n        animation-delay: 479.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4793) {\n        animation-delay: 479.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4794) {\n        animation-delay: 479.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4795) {\n        animation-delay: 479.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4796) {\n        animation-delay: 479.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4797) {\n        animation-delay: 479.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4798) {\n        animation-delay: 479.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4799) {\n        animation-delay: 479.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4800) {\n        animation-delay: 480s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4801) {\n        animation-delay: 480.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4802) {\n        animation-delay: 480.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4803) {\n        animation-delay: 480.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4804) {\n        animation-delay: 480.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4805) {\n        animation-delay: 480.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4806) {\n        animation-delay: 480.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4807) {\n        animation-delay: 480.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4808) {\n        animation-delay: 480.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4809) {\n        animation-delay: 480.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4810) {\n        animation-delay: 481s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4811) {\n        animation-delay: 481.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4812) {\n        animation-delay: 481.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4813) {\n        animation-delay: 481.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4814) {\n        animation-delay: 481.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4815) {\n        animation-delay: 481.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4816) {\n        animation-delay: 481.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4817) {\n        animation-delay: 481.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4818) {\n        animation-delay: 481.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4819) {\n        animation-delay: 481.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4820) {\n        animation-delay: 482s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4821) {\n        animation-delay: 482.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4822) {\n        animation-delay: 482.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4823) {\n        animation-delay: 482.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4824) {\n        animation-delay: 482.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4825) {\n        animation-delay: 482.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4826) {\n        animation-delay: 482.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4827) {\n        animation-delay: 482.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4828) {\n        animation-delay: 482.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4829) {\n        animation-delay: 482.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4830) {\n        animation-delay: 483s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4831) {\n        animation-delay: 483.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4832) {\n        animation-delay: 483.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4833) {\n        animation-delay: 483.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4834) {\n        animation-delay: 483.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4835) {\n        animation-delay: 483.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4836) {\n        animation-delay: 483.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4837) {\n        animation-delay: 483.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4838) {\n        animation-delay: 483.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4839) {\n        animation-delay: 483.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4840) {\n        animation-delay: 484s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4841) {\n        animation-delay: 484.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4842) {\n        animation-delay: 484.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4843) {\n        animation-delay: 484.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4844) {\n        animation-delay: 484.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4845) {\n        animation-delay: 484.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4846) {\n        animation-delay: 484.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4847) {\n        animation-delay: 484.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4848) {\n        animation-delay: 484.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4849) {\n        animation-delay: 484.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4850) {\n        animation-delay: 485s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4851) {\n        animation-delay: 485.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4852) {\n        animation-delay: 485.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4853) {\n        animation-delay: 485.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4854) {\n        animation-delay: 485.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4855) {\n        animation-delay: 485.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4856) {\n        animation-delay: 485.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4857) {\n        animation-delay: 485.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4858) {\n        animation-delay: 485.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4859) {\n        animation-delay: 485.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4860) {\n        animation-delay: 486s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4861) {\n        animation-delay: 486.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4862) {\n        animation-delay: 486.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4863) {\n        animation-delay: 486.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4864) {\n        animation-delay: 486.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4865) {\n        animation-delay: 486.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4866) {\n        animation-delay: 486.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4867) {\n        animation-delay: 486.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4868) {\n        animation-delay: 486.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4869) {\n        animation-delay: 486.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4870) {\n        animation-delay: 487s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4871) {\n        animation-delay: 487.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4872) {\n        animation-delay: 487.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4873) {\n        animation-delay: 487.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4874) {\n        animation-delay: 487.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4875) {\n        animation-delay: 487.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4876) {\n        animation-delay: 487.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4877) {\n        animation-delay: 487.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4878) {\n        animation-delay: 487.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4879) {\n        animation-delay: 487.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4880) {\n        animation-delay: 488s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4881) {\n        animation-delay: 488.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4882) {\n        animation-delay: 488.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4883) {\n        animation-delay: 488.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4884) {\n        animation-delay: 488.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4885) {\n        animation-delay: 488.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4886) {\n        animation-delay: 488.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4887) {\n        animation-delay: 488.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4888) {\n        animation-delay: 488.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4889) {\n        animation-delay: 488.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4890) {\n        animation-delay: 489s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4891) {\n        animation-delay: 489.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4892) {\n        animation-delay: 489.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4893) {\n        animation-delay: 489.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4894) {\n        animation-delay: 489.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4895) {\n        animation-delay: 489.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4896) {\n        animation-delay: 489.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4897) {\n        animation-delay: 489.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4898) {\n        animation-delay: 489.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4899) {\n        animation-delay: 489.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4900) {\n        animation-delay: 490s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4901) {\n        animation-delay: 490.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4902) {\n        animation-delay: 490.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4903) {\n        animation-delay: 490.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4904) {\n        animation-delay: 490.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4905) {\n        animation-delay: 490.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4906) {\n        animation-delay: 490.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4907) {\n        animation-delay: 490.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4908) {\n        animation-delay: 490.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4909) {\n        animation-delay: 490.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4910) {\n        animation-delay: 491s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4911) {\n        animation-delay: 491.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4912) {\n        animation-delay: 491.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4913) {\n        animation-delay: 491.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4914) {\n        animation-delay: 491.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4915) {\n        animation-delay: 491.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4916) {\n        animation-delay: 491.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4917) {\n        animation-delay: 491.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4918) {\n        animation-delay: 491.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4919) {\n        animation-delay: 491.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4920) {\n        animation-delay: 492s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4921) {\n        animation-delay: 492.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4922) {\n        animation-delay: 492.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4923) {\n        animation-delay: 492.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4924) {\n        animation-delay: 492.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4925) {\n        animation-delay: 492.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4926) {\n        animation-delay: 492.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4927) {\n        animation-delay: 492.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4928) {\n        animation-delay: 492.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4929) {\n        animation-delay: 492.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4930) {\n        animation-delay: 493s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4931) {\n        animation-delay: 493.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4932) {\n        animation-delay: 493.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4933) {\n        animation-delay: 493.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4934) {\n        animation-delay: 493.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4935) {\n        animation-delay: 493.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4936) {\n        animation-delay: 493.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4937) {\n        animation-delay: 493.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4938) {\n        animation-delay: 493.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4939) {\n        animation-delay: 493.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4940) {\n        animation-delay: 494s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4941) {\n        animation-delay: 494.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4942) {\n        animation-delay: 494.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4943) {\n        animation-delay: 494.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4944) {\n        animation-delay: 494.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4945) {\n        animation-delay: 494.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4946) {\n        animation-delay: 494.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4947) {\n        animation-delay: 494.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4948) {\n        animation-delay: 494.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4949) {\n        animation-delay: 494.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4950) {\n        animation-delay: 495s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4951) {\n        animation-delay: 495.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4952) {\n        animation-delay: 495.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4953) {\n        animation-delay: 495.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4954) {\n        animation-delay: 495.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4955) {\n        animation-delay: 495.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4956) {\n        animation-delay: 495.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4957) {\n        animation-delay: 495.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4958) {\n        animation-delay: 495.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4959) {\n        animation-delay: 495.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4960) {\n        animation-delay: 496s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4961) {\n        animation-delay: 496.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4962) {\n        animation-delay: 496.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4963) {\n        animation-delay: 496.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4964) {\n        animation-delay: 496.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4965) {\n        animation-delay: 496.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4966) {\n        animation-delay: 496.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4967) {\n        animation-delay: 496.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4968) {\n        animation-delay: 496.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4969) {\n        animation-delay: 496.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4970) {\n        animation-delay: 497s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4971) {\n        animation-delay: 497.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4972) {\n        animation-delay: 497.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4973) {\n        animation-delay: 497.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4974) {\n        animation-delay: 497.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4975) {\n        animation-delay: 497.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4976) {\n        animation-delay: 497.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4977) {\n        animation-delay: 497.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4978) {\n        animation-delay: 497.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4979) {\n        animation-delay: 497.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4980) {\n        animation-delay: 498s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4981) {\n        animation-delay: 498.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4982) {\n        animation-delay: 498.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4983) {\n        animation-delay: 498.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4984) {\n        animation-delay: 498.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4985) {\n        animation-delay: 498.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4986) {\n        animation-delay: 498.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4987) {\n        animation-delay: 498.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4988) {\n        animation-delay: 498.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4989) {\n        animation-delay: 498.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4990) {\n        animation-delay: 499s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4991) {\n        animation-delay: 499.1s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4992) {\n        animation-delay: 499.2s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4993) {\n        animation-delay: 499.3s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4994) {\n        animation-delay: 499.4s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4995) {\n        animation-delay: 499.5s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4996) {\n        animation-delay: 499.6s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4997) {\n        animation-delay: 499.7s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4998) {\n        animation-delay: 499.8s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(4999) {\n        animation-delay: 499.9s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:nth-child(5000) {\n        animation-delay: 500s; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li {\n        cursor: pointer;\n        transition: all .2s;\n        animation: fadeIn 0.5s linear;\n        animation-fill-mode: both;\n        position: relative; }\n        .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li.media {\n          padding: 1.5rem 1rem; }\n          .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li.media:hover {\n            transform: translateY(-4px);\n            box-shadow: 0 3px 10px 0 #ccc;\n            transition: all .2s; }\n          .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li.media .media-left {\n            display: flex;\n            align-items: center;\n            flex-direction: column; }\n          .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li.media .media-body {\n            width: calc(100vw - (100vw - 100%) - 60px);\n            overflow: hidden; }\n        .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li .avatar, .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li .avatar img {\n          height: 40px;\n          width: 40px; }\n        .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li .avatar img {\n          border: 2px solid #fff; }\n        .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li.mail-read {\n          background-color: #ededed; }\n        .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li:not(:first-child) {\n          border-top: 1px solid #dae1e7; }\n        .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li .user-details {\n          display: flex;\n          justify-content: space-between;\n          margin-bottom: .75rem; }\n          .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li .user-details .list-group-item-text {\n            color: #626262; }\n        .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li .mail-date {\n          color: #626262; }\n        .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li .mail-message p {\n          color: #626262; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper .user-action {\n        display: flex;\n        align-items: center; }\n        .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper .user-action .favorite i {\n          font-size: 1.2rem;\n          line-height: 1.5; }\n    .email-application .app-content .content-area-wrapper .email-user-list .no-results {\n      display: none;\n      padding: 1.5rem;\n      text-align: center; }\n      .email-application .app-content .content-area-wrapper .email-user-list .no-results.show {\n        display: block; }\n\n.email-application .app-action {\n  padding: 1rem;\n  display: flex;\n  justify-content: space-between;\n  border-bottom: 1px solid #dae1e7; }\n  .email-application .app-action .action-left .selectAll {\n    margin: .25rem 0 0.108rem; }\n    .email-application .app-action .action-left .selectAll .vs-checkbox {\n      margin-right: 1rem; }\n  .email-application .app-action .action-right ul li:not(:last-child) {\n    margin-right: 1rem; }\n  .email-application .app-action .action-right .dropdown-toggle {\n    color: #626262;\n    white-space: normal; }\n    .email-application .app-action .action-right .dropdown-toggle::after {\n      display: none; }\n  .email-application .app-action .action-right i {\n    font-size: 1.5rem;\n    margin-right: 0; }\n\n.email-application .email-app-details {\n  position: absolute;\n  display: block;\n  z-index: 2;\n  visibility: hidden;\n  opacity: 0;\n  top: 0;\n  width: calc(100% - 260px);\n  background-color: #f8f8f8;\n  transform: translateX(100%);\n  transition: all .3s ease;\n  height: 100%;\n  border-left: 1px solid #dae1e7; }\n  .email-application .email-app-details.show {\n    visibility: visible;\n    transition: all .3s ease;\n    opacity: 1;\n    transform: translateX(0%);\n    transition: all .3s ease; }\n  .email-application .email-app-details .email-detail-header {\n    display: flex;\n    flex-wrap: wrap;\n    justify-content: space-between;\n    box-shadow: 0 4px 6px rgba(0, 0, 0, 0.04);\n    border-bottom: 1px solid #eee;\n    position: relative;\n    padding: 1.643rem 2rem 0;\n    background-color: #fff; }\n  .email-application .email-app-details .email-header-right .dropdown-toggle {\n    color: #626262; }\n  .email-application .email-app-details .email-scroll-area {\n    padding: 0 2rem;\n    position: relative;\n    height: calc(100vh - 18.75rem);\n    height: calc(var(--vh, 1vh) * 100 - 18.75rem); }\n    .email-application .email-app-details .email-scroll-area .email-detail-head {\n      border-bottom: 1px solid #dae1e7;\n      padding: 1.5rem 1rem .75rem; }\n      .email-application .email-app-details .email-scroll-area .email-detail-head .mail-meta-item {\n        text-align: right; }\n    .email-application .email-app-details .email-scroll-area .card-body.mail-message-wrapper {\n      border-bottom: 1px solid #dae1e7 !important; }\n    .email-application .email-app-details .email-scroll-area .mail-label {\n      letter-spacing: .25px; }\n    .email-application .email-app-details .email-scroll-area .email-info-dropup .dropdown-toggle::after {\n      left: 0;\n      margin: 0; }\n    .email-application .email-app-details .email-scroll-area .mail-message p {\n      margin-bottom: 1.5rem; }\n    .email-application .email-app-details .email-scroll-area .mail-attachements {\n      text-transform: uppercase; }\n\n.email-application .ql-editor {\n  height: 150px; }\n\n@media (max-width: 767.98px) {\n  .email-application .sidebar-content .sidebar-close-icon {\n    visibility: visible !important; } }\n\n@media (max-width: 991.98px) {\n  .email-application .app-content .sidebar-left {\n    position: relative; }\n    .email-application .app-content .sidebar-left .email-app-sidebar {\n      transform: translateX(-110%);\n      transition: all .3s ease-in-out;\n      left: 0;\n      position: fixed;\n      z-index: 5;\n      left: -2px; }\n    .email-application .app-content .sidebar-left.show .email-app-sidebar {\n      transform: translateX(13%);\n      transition: all .3s ease;\n      display: block; }\n  .email-application .app-content .content-right {\n    width: 100%; }\n    .email-application .app-content .content-right .app-fixed-search {\n      border-top-left-radius: 0.5rem; }\n    .email-application .app-content .content-right .email-app-details {\n      width: 100%;\n      border-radius: 0.5rem; }\n      .email-application .app-content .content-right .email-app-details .email-scroll-area {\n        height: calc(100vh - 21.5rem);\n        height: calc(var(--vh, 1vh) * 100 - 21.5rem); } }\n\n@media (max-width: 575.98px) {\n  .email-application .sidebar-left .email-app-sidebar {\n    left: -1.12rem !important; }\n  .email-application .email-detail-head .mail-meta-item {\n    display: flex;\n    justify-content: space-between; }\n    .email-application .email-detail-head .mail-meta-item .mail-date, .email-application .email-detail-head .mail-meta-item .mail-time {\n      margin: 1rem .75rem 0 0; }\n  .email-application .app-content .content-right .email-app-details .email-scroll-area {\n    height: calc(100vh - 23.25rem);\n    height: calc(var(--vh, 1vh) * 100 - 23.25rem); }\n  .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li .user-details {\n    display: block; }\n    .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li .user-details .mail-items {\n      width: 70%;\n      display: inline-grid; }\n    .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li .user-details .mail-meta-item {\n      width: 15%;\n      position: absolute;\n      right: 1rem;\n      top: 1.5rem; }\n      .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li .user-details .mail-meta-item i, .email-application .app-content .content-area-wrapper .email-user-list .users-list-wrapper li .user-details .mail-meta-item .bullet {\n        display: none; } }\n\n@media (max-width: 349.98px) {\n  .email-application .content-area-wrapper .sidebar .email-app-sidebar {\n    width: 230px;\n    left: 3px; }\n  .email-application .app-content .content-area-wrapper .email-user-list {\n    height: calc(100vh - 22.3rem);\n    height: calc(var(--vh, 1vh) * 100 - 22.3rem); }\n  .email-application .email-app-details .email-detail-header {\n    padding: 0 1.2rem; }\n    .email-application .email-app-details .email-detail-header .email-prev, .email-application .email-app-details .email-detail-header .email-next {\n      display: none; } }\n\n@-webkit-keyframes fadeIn {\n  0% {\n    opacity: 0;\n    top: 100px; }\n  75% {\n    opacity: 0.5;\n    top: 0px; }\n  100% {\n    opacity: 1; } }\n"
  },
  {
    "path": "public/backend/css/pages/app-todo.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\n.todo-application .content-area-wrapper {\n  border: 1px solid #dae1e7;\n  border-radius: 0.25rem; }\n  .todo-application .content-area-wrapper .sidebar .todo-sidebar {\n    width: 260px;\n    height: calc(100vh - 13rem);\n    height: calc(var(--vh, 1vh) * 100 - 13rem);\n    background-color: #fff;\n    border-top-left-radius: 0.25rem;\n    border-bottom-left-radius: 0.25rem;\n    transition: all .3s ease; }\n    .todo-application .content-area-wrapper .sidebar .todo-sidebar .sidebar-close-icon {\n      position: absolute;\n      right: .25rem;\n      top: .25rem;\n      cursor: pointer;\n      font-size: 1.25rem;\n      z-index: 5;\n      visibility: hidden; }\n    .todo-application .content-area-wrapper .sidebar .todo-sidebar .todo-app-menu {\n      width: 100%;\n      box-shadow: 0 0 15px 0 rgba(0, 0, 0, 0.05);\n      padding: .5rem 0;\n      z-index: 3; }\n      .todo-application .content-area-wrapper .sidebar .todo-sidebar .todo-app-menu .add-task {\n        padding: 1px 1.5rem;\n        margin-bottom: 0.25rem; }\n      .todo-application .content-area-wrapper .sidebar .todo-sidebar .todo-app-menu .sidebar-menu-list {\n        padding: 0 1.5rem;\n        position: relative;\n        overflow: scroll;\n        height: calc(100% - 5.4rem); }\n      .todo-application .content-area-wrapper .sidebar .todo-sidebar .todo-app-menu .list-group .list-group-item {\n        padding-left: 0;\n        padding-right: 0; }\n        .todo-application .content-area-wrapper .sidebar .todo-sidebar .todo-app-menu .list-group .list-group-item:focus {\n          background-color: transparent; }\n        .todo-application .content-area-wrapper .sidebar .todo-sidebar .todo-app-menu .list-group .list-group-item:hover {\n          background-color: transparent;\n          color: #626262; }\n        .todo-application .content-area-wrapper .sidebar .todo-sidebar .todo-app-menu .list-group .list-group-item.active {\n          background-color: transparent;\n          color: #7367f0; }\n        .todo-application .content-area-wrapper .sidebar .todo-sidebar .todo-app-menu .list-group .list-group-item i {\n          top: 3px; }\n      .todo-application .content-area-wrapper .sidebar .todo-sidebar .todo-app-menu hr {\n        margin-left: -1.5rem;\n        margin-right: -1.5rem; }\n  .todo-application .content-area-wrapper .modal .todo-item-action {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    width: 6rem;\n    margin-bottom: 1.25rem; }\n    .todo-application .content-area-wrapper .modal .todo-item-action .todo-item-info, .todo-application .content-area-wrapper .modal .todo-item-action .todo-item-favorite, .todo-application .content-area-wrapper .modal .todo-item-action .dropdown {\n      cursor: pointer;\n      font-size: 1.2rem;\n      line-height: 1.5; }\n    .todo-application .content-area-wrapper .modal .todo-item-action .dropdown .dropdown-menu .dropdown-item {\n      padding: .14rem 1.428rem; }\n    .todo-application .content-area-wrapper .modal .todo-item-action .dropdown-toggle::after {\n      display: none; }\n  .todo-application .content-area-wrapper .app-content .content-area-wrapper {\n    position: relative; }\n  .todo-application .content-area-wrapper .completed .todo-title, .todo-application .content-area-wrapper .completed .todo-desc {\n    text-decoration: line-through; }\n  .todo-application .content-area-wrapper .content-right {\n    width: calc(100% - 260px); }\n    .todo-application .content-area-wrapper .content-right .content-wrapper {\n      padding: 0; }\n    .todo-application .content-area-wrapper .content-right .todo-app-list-wrapper {\n      border-left: 1px solid #dae1e7; }\n    .todo-application .content-area-wrapper .content-right .app-fixed-search {\n      padding: .35rem .1rem;\n      border-bottom: 1px solid #dae1e7;\n      background-color: #fff;\n      border-top-right-radius: 0.5rem; }\n      .todo-application .content-area-wrapper .content-right .app-fixed-search .form-control-position {\n        font-size: calc(1rem * 1.1); }\n      .todo-application .content-area-wrapper .content-right .app-fixed-search input {\n        border: 0;\n        background-color: transparent; }\n        .todo-application .content-area-wrapper .content-right .app-fixed-search input:focus {\n          border-color: transparent;\n          box-shadow: none; }\n    .todo-application .content-area-wrapper .content-right .sidebar-toggle {\n      cursor: pointer;\n      margin: 0.5rem 0.99rem;\n      float: left;\n      line-height: 1; }\n      .todo-application .content-area-wrapper .content-right .sidebar-toggle i {\n        font-size: 1.75rem; }\n    .todo-application .content-area-wrapper .content-right .app-content-overlay {\n      top: 0;\n      left: 0;\n      right: 0;\n      bottom: 0;\n      position: absolute;\n      display: block;\n      z-index: 2;\n      visibility: hidden;\n      opacity: 0;\n      transition: all .3s ease; }\n      .todo-application .content-area-wrapper .content-right .app-content-overlay.show {\n        visibility: visible;\n        transition: all .3s ease;\n        opacity: 1;\n        background-color: rgba(0, 0, 0, 0.2);\n        border-radius: .25rem; }\n    .todo-application .content-area-wrapper .content-right .todo-task-list {\n      position: relative;\n      height: calc(100vh - 16.35rem);\n      height: calc(var(--vh, 1vh) * 100 - 16.35rem); }\n      .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper {\n        padding: 0;\n        margin: 0; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li {\n          cursor: pointer;\n          transition: all .2s;\n          animation: fadeIn 0.5s linear;\n          animation-fill-mode: both;\n          position: relative;\n          padding: 1.1rem 3rem 1.2rem 2rem;\n          border-top: 1px solid #dae1e7; }\n          .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:hover {\n            transform: translateY(-4px);\n            box-shadow: 0 3px 10px 0 #ccc;\n            transition: all .2s; }\n          .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li .chip-wrapper {\n            display: flex; }\n            .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li .chip-wrapper .chip {\n              margin-right: 0.25rem; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1) {\n          animation-delay: 0.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2) {\n          animation-delay: 0.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3) {\n          animation-delay: 0.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4) {\n          animation-delay: 0.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(5) {\n          animation-delay: 0.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(6) {\n          animation-delay: 0.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(7) {\n          animation-delay: 0.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(8) {\n          animation-delay: 0.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(9) {\n          animation-delay: 0.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(10) {\n          animation-delay: 1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(11) {\n          animation-delay: 1.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(12) {\n          animation-delay: 1.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(13) {\n          animation-delay: 1.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(14) {\n          animation-delay: 1.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(15) {\n          animation-delay: 1.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(16) {\n          animation-delay: 1.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(17) {\n          animation-delay: 1.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(18) {\n          animation-delay: 1.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(19) {\n          animation-delay: 1.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(20) {\n          animation-delay: 2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(21) {\n          animation-delay: 2.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(22) {\n          animation-delay: 2.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(23) {\n          animation-delay: 2.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(24) {\n          animation-delay: 2.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(25) {\n          animation-delay: 2.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(26) {\n          animation-delay: 2.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(27) {\n          animation-delay: 2.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(28) {\n          animation-delay: 2.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(29) {\n          animation-delay: 2.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(30) {\n          animation-delay: 3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(31) {\n          animation-delay: 3.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(32) {\n          animation-delay: 3.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(33) {\n          animation-delay: 3.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(34) {\n          animation-delay: 3.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(35) {\n          animation-delay: 3.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(36) {\n          animation-delay: 3.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(37) {\n          animation-delay: 3.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(38) {\n          animation-delay: 3.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(39) {\n          animation-delay: 3.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(40) {\n          animation-delay: 4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(41) {\n          animation-delay: 4.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(42) {\n          animation-delay: 4.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(43) {\n          animation-delay: 4.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(44) {\n          animation-delay: 4.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(45) {\n          animation-delay: 4.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(46) {\n          animation-delay: 4.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(47) {\n          animation-delay: 4.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(48) {\n          animation-delay: 4.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(49) {\n          animation-delay: 4.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(50) {\n          animation-delay: 5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(51) {\n          animation-delay: 5.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(52) {\n          animation-delay: 5.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(53) {\n          animation-delay: 5.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(54) {\n          animation-delay: 5.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(55) {\n          animation-delay: 5.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(56) {\n          animation-delay: 5.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(57) {\n          animation-delay: 5.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(58) {\n          animation-delay: 5.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(59) {\n          animation-delay: 5.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(60) {\n          animation-delay: 6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(61) {\n          animation-delay: 6.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(62) {\n          animation-delay: 6.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(63) {\n          animation-delay: 6.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(64) {\n          animation-delay: 6.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(65) {\n          animation-delay: 6.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(66) {\n          animation-delay: 6.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(67) {\n          animation-delay: 6.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(68) {\n          animation-delay: 6.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(69) {\n          animation-delay: 6.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(70) {\n          animation-delay: 7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(71) {\n          animation-delay: 7.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(72) {\n          animation-delay: 7.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(73) {\n          animation-delay: 7.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(74) {\n          animation-delay: 7.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(75) {\n          animation-delay: 7.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(76) {\n          animation-delay: 7.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(77) {\n          animation-delay: 7.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(78) {\n          animation-delay: 7.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(79) {\n          animation-delay: 7.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(80) {\n          animation-delay: 8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(81) {\n          animation-delay: 8.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(82) {\n          animation-delay: 8.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(83) {\n          animation-delay: 8.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(84) {\n          animation-delay: 8.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(85) {\n          animation-delay: 8.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(86) {\n          animation-delay: 8.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(87) {\n          animation-delay: 8.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(88) {\n          animation-delay: 8.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(89) {\n          animation-delay: 8.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(90) {\n          animation-delay: 9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(91) {\n          animation-delay: 9.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(92) {\n          animation-delay: 9.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(93) {\n          animation-delay: 9.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(94) {\n          animation-delay: 9.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(95) {\n          animation-delay: 9.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(96) {\n          animation-delay: 9.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(97) {\n          animation-delay: 9.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(98) {\n          animation-delay: 9.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(99) {\n          animation-delay: 9.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(100) {\n          animation-delay: 10s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(101) {\n          animation-delay: 10.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(102) {\n          animation-delay: 10.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(103) {\n          animation-delay: 10.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(104) {\n          animation-delay: 10.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(105) {\n          animation-delay: 10.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(106) {\n          animation-delay: 10.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(107) {\n          animation-delay: 10.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(108) {\n          animation-delay: 10.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(109) {\n          animation-delay: 10.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(110) {\n          animation-delay: 11s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(111) {\n          animation-delay: 11.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(112) {\n          animation-delay: 11.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(113) {\n          animation-delay: 11.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(114) {\n          animation-delay: 11.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(115) {\n          animation-delay: 11.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(116) {\n          animation-delay: 11.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(117) {\n          animation-delay: 11.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(118) {\n          animation-delay: 11.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(119) {\n          animation-delay: 11.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(120) {\n          animation-delay: 12s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(121) {\n          animation-delay: 12.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(122) {\n          animation-delay: 12.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(123) {\n          animation-delay: 12.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(124) {\n          animation-delay: 12.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(125) {\n          animation-delay: 12.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(126) {\n          animation-delay: 12.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(127) {\n          animation-delay: 12.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(128) {\n          animation-delay: 12.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(129) {\n          animation-delay: 12.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(130) {\n          animation-delay: 13s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(131) {\n          animation-delay: 13.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(132) {\n          animation-delay: 13.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(133) {\n          animation-delay: 13.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(134) {\n          animation-delay: 13.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(135) {\n          animation-delay: 13.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(136) {\n          animation-delay: 13.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(137) {\n          animation-delay: 13.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(138) {\n          animation-delay: 13.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(139) {\n          animation-delay: 13.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(140) {\n          animation-delay: 14s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(141) {\n          animation-delay: 14.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(142) {\n          animation-delay: 14.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(143) {\n          animation-delay: 14.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(144) {\n          animation-delay: 14.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(145) {\n          animation-delay: 14.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(146) {\n          animation-delay: 14.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(147) {\n          animation-delay: 14.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(148) {\n          animation-delay: 14.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(149) {\n          animation-delay: 14.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(150) {\n          animation-delay: 15s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(151) {\n          animation-delay: 15.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(152) {\n          animation-delay: 15.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(153) {\n          animation-delay: 15.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(154) {\n          animation-delay: 15.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(155) {\n          animation-delay: 15.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(156) {\n          animation-delay: 15.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(157) {\n          animation-delay: 15.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(158) {\n          animation-delay: 15.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(159) {\n          animation-delay: 15.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(160) {\n          animation-delay: 16s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(161) {\n          animation-delay: 16.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(162) {\n          animation-delay: 16.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(163) {\n          animation-delay: 16.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(164) {\n          animation-delay: 16.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(165) {\n          animation-delay: 16.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(166) {\n          animation-delay: 16.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(167) {\n          animation-delay: 16.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(168) {\n          animation-delay: 16.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(169) {\n          animation-delay: 16.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(170) {\n          animation-delay: 17s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(171) {\n          animation-delay: 17.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(172) {\n          animation-delay: 17.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(173) {\n          animation-delay: 17.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(174) {\n          animation-delay: 17.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(175) {\n          animation-delay: 17.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(176) {\n          animation-delay: 17.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(177) {\n          animation-delay: 17.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(178) {\n          animation-delay: 17.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(179) {\n          animation-delay: 17.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(180) {\n          animation-delay: 18s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(181) {\n          animation-delay: 18.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(182) {\n          animation-delay: 18.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(183) {\n          animation-delay: 18.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(184) {\n          animation-delay: 18.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(185) {\n          animation-delay: 18.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(186) {\n          animation-delay: 18.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(187) {\n          animation-delay: 18.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(188) {\n          animation-delay: 18.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(189) {\n          animation-delay: 18.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(190) {\n          animation-delay: 19s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(191) {\n          animation-delay: 19.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(192) {\n          animation-delay: 19.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(193) {\n          animation-delay: 19.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(194) {\n          animation-delay: 19.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(195) {\n          animation-delay: 19.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(196) {\n          animation-delay: 19.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(197) {\n          animation-delay: 19.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(198) {\n          animation-delay: 19.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(199) {\n          animation-delay: 19.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(200) {\n          animation-delay: 20s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(201) {\n          animation-delay: 20.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(202) {\n          animation-delay: 20.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(203) {\n          animation-delay: 20.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(204) {\n          animation-delay: 20.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(205) {\n          animation-delay: 20.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(206) {\n          animation-delay: 20.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(207) {\n          animation-delay: 20.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(208) {\n          animation-delay: 20.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(209) {\n          animation-delay: 20.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(210) {\n          animation-delay: 21s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(211) {\n          animation-delay: 21.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(212) {\n          animation-delay: 21.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(213) {\n          animation-delay: 21.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(214) {\n          animation-delay: 21.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(215) {\n          animation-delay: 21.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(216) {\n          animation-delay: 21.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(217) {\n          animation-delay: 21.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(218) {\n          animation-delay: 21.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(219) {\n          animation-delay: 21.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(220) {\n          animation-delay: 22s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(221) {\n          animation-delay: 22.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(222) {\n          animation-delay: 22.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(223) {\n          animation-delay: 22.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(224) {\n          animation-delay: 22.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(225) {\n          animation-delay: 22.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(226) {\n          animation-delay: 22.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(227) {\n          animation-delay: 22.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(228) {\n          animation-delay: 22.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(229) {\n          animation-delay: 22.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(230) {\n          animation-delay: 23s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(231) {\n          animation-delay: 23.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(232) {\n          animation-delay: 23.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(233) {\n          animation-delay: 23.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(234) {\n          animation-delay: 23.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(235) {\n          animation-delay: 23.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(236) {\n          animation-delay: 23.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(237) {\n          animation-delay: 23.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(238) {\n          animation-delay: 23.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(239) {\n          animation-delay: 23.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(240) {\n          animation-delay: 24s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(241) {\n          animation-delay: 24.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(242) {\n          animation-delay: 24.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(243) {\n          animation-delay: 24.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(244) {\n          animation-delay: 24.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(245) {\n          animation-delay: 24.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(246) {\n          animation-delay: 24.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(247) {\n          animation-delay: 24.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(248) {\n          animation-delay: 24.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(249) {\n          animation-delay: 24.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(250) {\n          animation-delay: 25s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(251) {\n          animation-delay: 25.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(252) {\n          animation-delay: 25.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(253) {\n          animation-delay: 25.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(254) {\n          animation-delay: 25.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(255) {\n          animation-delay: 25.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(256) {\n          animation-delay: 25.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(257) {\n          animation-delay: 25.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(258) {\n          animation-delay: 25.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(259) {\n          animation-delay: 25.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(260) {\n          animation-delay: 26s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(261) {\n          animation-delay: 26.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(262) {\n          animation-delay: 26.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(263) {\n          animation-delay: 26.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(264) {\n          animation-delay: 26.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(265) {\n          animation-delay: 26.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(266) {\n          animation-delay: 26.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(267) {\n          animation-delay: 26.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(268) {\n          animation-delay: 26.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(269) {\n          animation-delay: 26.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(270) {\n          animation-delay: 27s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(271) {\n          animation-delay: 27.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(272) {\n          animation-delay: 27.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(273) {\n          animation-delay: 27.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(274) {\n          animation-delay: 27.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(275) {\n          animation-delay: 27.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(276) {\n          animation-delay: 27.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(277) {\n          animation-delay: 27.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(278) {\n          animation-delay: 27.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(279) {\n          animation-delay: 27.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(280) {\n          animation-delay: 28s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(281) {\n          animation-delay: 28.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(282) {\n          animation-delay: 28.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(283) {\n          animation-delay: 28.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(284) {\n          animation-delay: 28.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(285) {\n          animation-delay: 28.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(286) {\n          animation-delay: 28.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(287) {\n          animation-delay: 28.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(288) {\n          animation-delay: 28.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(289) {\n          animation-delay: 28.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(290) {\n          animation-delay: 29s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(291) {\n          animation-delay: 29.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(292) {\n          animation-delay: 29.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(293) {\n          animation-delay: 29.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(294) {\n          animation-delay: 29.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(295) {\n          animation-delay: 29.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(296) {\n          animation-delay: 29.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(297) {\n          animation-delay: 29.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(298) {\n          animation-delay: 29.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(299) {\n          animation-delay: 29.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(300) {\n          animation-delay: 30s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(301) {\n          animation-delay: 30.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(302) {\n          animation-delay: 30.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(303) {\n          animation-delay: 30.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(304) {\n          animation-delay: 30.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(305) {\n          animation-delay: 30.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(306) {\n          animation-delay: 30.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(307) {\n          animation-delay: 30.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(308) {\n          animation-delay: 30.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(309) {\n          animation-delay: 30.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(310) {\n          animation-delay: 31s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(311) {\n          animation-delay: 31.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(312) {\n          animation-delay: 31.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(313) {\n          animation-delay: 31.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(314) {\n          animation-delay: 31.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(315) {\n          animation-delay: 31.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(316) {\n          animation-delay: 31.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(317) {\n          animation-delay: 31.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(318) {\n          animation-delay: 31.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(319) {\n          animation-delay: 31.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(320) {\n          animation-delay: 32s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(321) {\n          animation-delay: 32.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(322) {\n          animation-delay: 32.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(323) {\n          animation-delay: 32.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(324) {\n          animation-delay: 32.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(325) {\n          animation-delay: 32.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(326) {\n          animation-delay: 32.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(327) {\n          animation-delay: 32.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(328) {\n          animation-delay: 32.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(329) {\n          animation-delay: 32.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(330) {\n          animation-delay: 33s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(331) {\n          animation-delay: 33.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(332) {\n          animation-delay: 33.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(333) {\n          animation-delay: 33.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(334) {\n          animation-delay: 33.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(335) {\n          animation-delay: 33.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(336) {\n          animation-delay: 33.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(337) {\n          animation-delay: 33.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(338) {\n          animation-delay: 33.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(339) {\n          animation-delay: 33.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(340) {\n          animation-delay: 34s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(341) {\n          animation-delay: 34.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(342) {\n          animation-delay: 34.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(343) {\n          animation-delay: 34.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(344) {\n          animation-delay: 34.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(345) {\n          animation-delay: 34.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(346) {\n          animation-delay: 34.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(347) {\n          animation-delay: 34.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(348) {\n          animation-delay: 34.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(349) {\n          animation-delay: 34.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(350) {\n          animation-delay: 35s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(351) {\n          animation-delay: 35.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(352) {\n          animation-delay: 35.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(353) {\n          animation-delay: 35.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(354) {\n          animation-delay: 35.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(355) {\n          animation-delay: 35.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(356) {\n          animation-delay: 35.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(357) {\n          animation-delay: 35.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(358) {\n          animation-delay: 35.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(359) {\n          animation-delay: 35.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(360) {\n          animation-delay: 36s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(361) {\n          animation-delay: 36.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(362) {\n          animation-delay: 36.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(363) {\n          animation-delay: 36.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(364) {\n          animation-delay: 36.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(365) {\n          animation-delay: 36.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(366) {\n          animation-delay: 36.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(367) {\n          animation-delay: 36.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(368) {\n          animation-delay: 36.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(369) {\n          animation-delay: 36.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(370) {\n          animation-delay: 37s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(371) {\n          animation-delay: 37.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(372) {\n          animation-delay: 37.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(373) {\n          animation-delay: 37.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(374) {\n          animation-delay: 37.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(375) {\n          animation-delay: 37.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(376) {\n          animation-delay: 37.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(377) {\n          animation-delay: 37.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(378) {\n          animation-delay: 37.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(379) {\n          animation-delay: 37.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(380) {\n          animation-delay: 38s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(381) {\n          animation-delay: 38.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(382) {\n          animation-delay: 38.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(383) {\n          animation-delay: 38.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(384) {\n          animation-delay: 38.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(385) {\n          animation-delay: 38.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(386) {\n          animation-delay: 38.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(387) {\n          animation-delay: 38.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(388) {\n          animation-delay: 38.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(389) {\n          animation-delay: 38.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(390) {\n          animation-delay: 39s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(391) {\n          animation-delay: 39.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(392) {\n          animation-delay: 39.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(393) {\n          animation-delay: 39.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(394) {\n          animation-delay: 39.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(395) {\n          animation-delay: 39.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(396) {\n          animation-delay: 39.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(397) {\n          animation-delay: 39.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(398) {\n          animation-delay: 39.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(399) {\n          animation-delay: 39.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(400) {\n          animation-delay: 40s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(401) {\n          animation-delay: 40.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(402) {\n          animation-delay: 40.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(403) {\n          animation-delay: 40.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(404) {\n          animation-delay: 40.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(405) {\n          animation-delay: 40.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(406) {\n          animation-delay: 40.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(407) {\n          animation-delay: 40.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(408) {\n          animation-delay: 40.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(409) {\n          animation-delay: 40.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(410) {\n          animation-delay: 41s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(411) {\n          animation-delay: 41.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(412) {\n          animation-delay: 41.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(413) {\n          animation-delay: 41.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(414) {\n          animation-delay: 41.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(415) {\n          animation-delay: 41.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(416) {\n          animation-delay: 41.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(417) {\n          animation-delay: 41.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(418) {\n          animation-delay: 41.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(419) {\n          animation-delay: 41.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(420) {\n          animation-delay: 42s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(421) {\n          animation-delay: 42.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(422) {\n          animation-delay: 42.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(423) {\n          animation-delay: 42.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(424) {\n          animation-delay: 42.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(425) {\n          animation-delay: 42.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(426) {\n          animation-delay: 42.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(427) {\n          animation-delay: 42.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(428) {\n          animation-delay: 42.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(429) {\n          animation-delay: 42.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(430) {\n          animation-delay: 43s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(431) {\n          animation-delay: 43.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(432) {\n          animation-delay: 43.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(433) {\n          animation-delay: 43.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(434) {\n          animation-delay: 43.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(435) {\n          animation-delay: 43.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(436) {\n          animation-delay: 43.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(437) {\n          animation-delay: 43.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(438) {\n          animation-delay: 43.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(439) {\n          animation-delay: 43.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(440) {\n          animation-delay: 44s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(441) {\n          animation-delay: 44.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(442) {\n          animation-delay: 44.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(443) {\n          animation-delay: 44.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(444) {\n          animation-delay: 44.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(445) {\n          animation-delay: 44.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(446) {\n          animation-delay: 44.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(447) {\n          animation-delay: 44.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(448) {\n          animation-delay: 44.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(449) {\n          animation-delay: 44.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(450) {\n          animation-delay: 45s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(451) {\n          animation-delay: 45.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(452) {\n          animation-delay: 45.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(453) {\n          animation-delay: 45.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(454) {\n          animation-delay: 45.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(455) {\n          animation-delay: 45.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(456) {\n          animation-delay: 45.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(457) {\n          animation-delay: 45.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(458) {\n          animation-delay: 45.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(459) {\n          animation-delay: 45.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(460) {\n          animation-delay: 46s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(461) {\n          animation-delay: 46.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(462) {\n          animation-delay: 46.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(463) {\n          animation-delay: 46.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(464) {\n          animation-delay: 46.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(465) {\n          animation-delay: 46.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(466) {\n          animation-delay: 46.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(467) {\n          animation-delay: 46.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(468) {\n          animation-delay: 46.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(469) {\n          animation-delay: 46.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(470) {\n          animation-delay: 47s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(471) {\n          animation-delay: 47.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(472) {\n          animation-delay: 47.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(473) {\n          animation-delay: 47.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(474) {\n          animation-delay: 47.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(475) {\n          animation-delay: 47.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(476) {\n          animation-delay: 47.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(477) {\n          animation-delay: 47.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(478) {\n          animation-delay: 47.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(479) {\n          animation-delay: 47.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(480) {\n          animation-delay: 48s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(481) {\n          animation-delay: 48.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(482) {\n          animation-delay: 48.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(483) {\n          animation-delay: 48.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(484) {\n          animation-delay: 48.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(485) {\n          animation-delay: 48.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(486) {\n          animation-delay: 48.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(487) {\n          animation-delay: 48.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(488) {\n          animation-delay: 48.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(489) {\n          animation-delay: 48.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(490) {\n          animation-delay: 49s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(491) {\n          animation-delay: 49.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(492) {\n          animation-delay: 49.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(493) {\n          animation-delay: 49.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(494) {\n          animation-delay: 49.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(495) {\n          animation-delay: 49.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(496) {\n          animation-delay: 49.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(497) {\n          animation-delay: 49.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(498) {\n          animation-delay: 49.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(499) {\n          animation-delay: 49.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(500) {\n          animation-delay: 50s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(501) {\n          animation-delay: 50.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(502) {\n          animation-delay: 50.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(503) {\n          animation-delay: 50.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(504) {\n          animation-delay: 50.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(505) {\n          animation-delay: 50.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(506) {\n          animation-delay: 50.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(507) {\n          animation-delay: 50.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(508) {\n          animation-delay: 50.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(509) {\n          animation-delay: 50.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(510) {\n          animation-delay: 51s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(511) {\n          animation-delay: 51.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(512) {\n          animation-delay: 51.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(513) {\n          animation-delay: 51.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(514) {\n          animation-delay: 51.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(515) {\n          animation-delay: 51.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(516) {\n          animation-delay: 51.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(517) {\n          animation-delay: 51.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(518) {\n          animation-delay: 51.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(519) {\n          animation-delay: 51.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(520) {\n          animation-delay: 52s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(521) {\n          animation-delay: 52.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(522) {\n          animation-delay: 52.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(523) {\n          animation-delay: 52.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(524) {\n          animation-delay: 52.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(525) {\n          animation-delay: 52.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(526) {\n          animation-delay: 52.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(527) {\n          animation-delay: 52.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(528) {\n          animation-delay: 52.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(529) {\n          animation-delay: 52.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(530) {\n          animation-delay: 53s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(531) {\n          animation-delay: 53.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(532) {\n          animation-delay: 53.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(533) {\n          animation-delay: 53.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(534) {\n          animation-delay: 53.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(535) {\n          animation-delay: 53.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(536) {\n          animation-delay: 53.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(537) {\n          animation-delay: 53.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(538) {\n          animation-delay: 53.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(539) {\n          animation-delay: 53.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(540) {\n          animation-delay: 54s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(541) {\n          animation-delay: 54.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(542) {\n          animation-delay: 54.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(543) {\n          animation-delay: 54.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(544) {\n          animation-delay: 54.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(545) {\n          animation-delay: 54.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(546) {\n          animation-delay: 54.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(547) {\n          animation-delay: 54.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(548) {\n          animation-delay: 54.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(549) {\n          animation-delay: 54.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(550) {\n          animation-delay: 55s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(551) {\n          animation-delay: 55.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(552) {\n          animation-delay: 55.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(553) {\n          animation-delay: 55.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(554) {\n          animation-delay: 55.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(555) {\n          animation-delay: 55.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(556) {\n          animation-delay: 55.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(557) {\n          animation-delay: 55.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(558) {\n          animation-delay: 55.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(559) {\n          animation-delay: 55.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(560) {\n          animation-delay: 56s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(561) {\n          animation-delay: 56.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(562) {\n          animation-delay: 56.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(563) {\n          animation-delay: 56.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(564) {\n          animation-delay: 56.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(565) {\n          animation-delay: 56.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(566) {\n          animation-delay: 56.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(567) {\n          animation-delay: 56.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(568) {\n          animation-delay: 56.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(569) {\n          animation-delay: 56.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(570) {\n          animation-delay: 57s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(571) {\n          animation-delay: 57.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(572) {\n          animation-delay: 57.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(573) {\n          animation-delay: 57.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(574) {\n          animation-delay: 57.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(575) {\n          animation-delay: 57.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(576) {\n          animation-delay: 57.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(577) {\n          animation-delay: 57.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(578) {\n          animation-delay: 57.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(579) {\n          animation-delay: 57.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(580) {\n          animation-delay: 58s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(581) {\n          animation-delay: 58.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(582) {\n          animation-delay: 58.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(583) {\n          animation-delay: 58.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(584) {\n          animation-delay: 58.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(585) {\n          animation-delay: 58.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(586) {\n          animation-delay: 58.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(587) {\n          animation-delay: 58.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(588) {\n          animation-delay: 58.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(589) {\n          animation-delay: 58.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(590) {\n          animation-delay: 59s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(591) {\n          animation-delay: 59.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(592) {\n          animation-delay: 59.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(593) {\n          animation-delay: 59.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(594) {\n          animation-delay: 59.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(595) {\n          animation-delay: 59.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(596) {\n          animation-delay: 59.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(597) {\n          animation-delay: 59.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(598) {\n          animation-delay: 59.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(599) {\n          animation-delay: 59.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(600) {\n          animation-delay: 60s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(601) {\n          animation-delay: 60.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(602) {\n          animation-delay: 60.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(603) {\n          animation-delay: 60.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(604) {\n          animation-delay: 60.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(605) {\n          animation-delay: 60.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(606) {\n          animation-delay: 60.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(607) {\n          animation-delay: 60.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(608) {\n          animation-delay: 60.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(609) {\n          animation-delay: 60.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(610) {\n          animation-delay: 61s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(611) {\n          animation-delay: 61.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(612) {\n          animation-delay: 61.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(613) {\n          animation-delay: 61.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(614) {\n          animation-delay: 61.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(615) {\n          animation-delay: 61.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(616) {\n          animation-delay: 61.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(617) {\n          animation-delay: 61.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(618) {\n          animation-delay: 61.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(619) {\n          animation-delay: 61.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(620) {\n          animation-delay: 62s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(621) {\n          animation-delay: 62.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(622) {\n          animation-delay: 62.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(623) {\n          animation-delay: 62.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(624) {\n          animation-delay: 62.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(625) {\n          animation-delay: 62.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(626) {\n          animation-delay: 62.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(627) {\n          animation-delay: 62.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(628) {\n          animation-delay: 62.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(629) {\n          animation-delay: 62.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(630) {\n          animation-delay: 63s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(631) {\n          animation-delay: 63.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(632) {\n          animation-delay: 63.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(633) {\n          animation-delay: 63.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(634) {\n          animation-delay: 63.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(635) {\n          animation-delay: 63.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(636) {\n          animation-delay: 63.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(637) {\n          animation-delay: 63.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(638) {\n          animation-delay: 63.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(639) {\n          animation-delay: 63.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(640) {\n          animation-delay: 64s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(641) {\n          animation-delay: 64.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(642) {\n          animation-delay: 64.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(643) {\n          animation-delay: 64.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(644) {\n          animation-delay: 64.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(645) {\n          animation-delay: 64.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(646) {\n          animation-delay: 64.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(647) {\n          animation-delay: 64.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(648) {\n          animation-delay: 64.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(649) {\n          animation-delay: 64.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(650) {\n          animation-delay: 65s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(651) {\n          animation-delay: 65.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(652) {\n          animation-delay: 65.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(653) {\n          animation-delay: 65.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(654) {\n          animation-delay: 65.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(655) {\n          animation-delay: 65.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(656) {\n          animation-delay: 65.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(657) {\n          animation-delay: 65.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(658) {\n          animation-delay: 65.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(659) {\n          animation-delay: 65.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(660) {\n          animation-delay: 66s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(661) {\n          animation-delay: 66.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(662) {\n          animation-delay: 66.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(663) {\n          animation-delay: 66.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(664) {\n          animation-delay: 66.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(665) {\n          animation-delay: 66.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(666) {\n          animation-delay: 66.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(667) {\n          animation-delay: 66.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(668) {\n          animation-delay: 66.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(669) {\n          animation-delay: 66.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(670) {\n          animation-delay: 67s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(671) {\n          animation-delay: 67.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(672) {\n          animation-delay: 67.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(673) {\n          animation-delay: 67.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(674) {\n          animation-delay: 67.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(675) {\n          animation-delay: 67.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(676) {\n          animation-delay: 67.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(677) {\n          animation-delay: 67.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(678) {\n          animation-delay: 67.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(679) {\n          animation-delay: 67.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(680) {\n          animation-delay: 68s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(681) {\n          animation-delay: 68.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(682) {\n          animation-delay: 68.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(683) {\n          animation-delay: 68.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(684) {\n          animation-delay: 68.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(685) {\n          animation-delay: 68.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(686) {\n          animation-delay: 68.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(687) {\n          animation-delay: 68.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(688) {\n          animation-delay: 68.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(689) {\n          animation-delay: 68.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(690) {\n          animation-delay: 69s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(691) {\n          animation-delay: 69.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(692) {\n          animation-delay: 69.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(693) {\n          animation-delay: 69.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(694) {\n          animation-delay: 69.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(695) {\n          animation-delay: 69.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(696) {\n          animation-delay: 69.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(697) {\n          animation-delay: 69.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(698) {\n          animation-delay: 69.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(699) {\n          animation-delay: 69.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(700) {\n          animation-delay: 70s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(701) {\n          animation-delay: 70.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(702) {\n          animation-delay: 70.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(703) {\n          animation-delay: 70.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(704) {\n          animation-delay: 70.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(705) {\n          animation-delay: 70.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(706) {\n          animation-delay: 70.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(707) {\n          animation-delay: 70.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(708) {\n          animation-delay: 70.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(709) {\n          animation-delay: 70.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(710) {\n          animation-delay: 71s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(711) {\n          animation-delay: 71.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(712) {\n          animation-delay: 71.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(713) {\n          animation-delay: 71.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(714) {\n          animation-delay: 71.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(715) {\n          animation-delay: 71.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(716) {\n          animation-delay: 71.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(717) {\n          animation-delay: 71.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(718) {\n          animation-delay: 71.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(719) {\n          animation-delay: 71.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(720) {\n          animation-delay: 72s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(721) {\n          animation-delay: 72.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(722) {\n          animation-delay: 72.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(723) {\n          animation-delay: 72.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(724) {\n          animation-delay: 72.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(725) {\n          animation-delay: 72.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(726) {\n          animation-delay: 72.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(727) {\n          animation-delay: 72.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(728) {\n          animation-delay: 72.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(729) {\n          animation-delay: 72.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(730) {\n          animation-delay: 73s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(731) {\n          animation-delay: 73.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(732) {\n          animation-delay: 73.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(733) {\n          animation-delay: 73.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(734) {\n          animation-delay: 73.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(735) {\n          animation-delay: 73.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(736) {\n          animation-delay: 73.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(737) {\n          animation-delay: 73.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(738) {\n          animation-delay: 73.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(739) {\n          animation-delay: 73.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(740) {\n          animation-delay: 74s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(741) {\n          animation-delay: 74.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(742) {\n          animation-delay: 74.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(743) {\n          animation-delay: 74.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(744) {\n          animation-delay: 74.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(745) {\n          animation-delay: 74.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(746) {\n          animation-delay: 74.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(747) {\n          animation-delay: 74.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(748) {\n          animation-delay: 74.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(749) {\n          animation-delay: 74.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(750) {\n          animation-delay: 75s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(751) {\n          animation-delay: 75.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(752) {\n          animation-delay: 75.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(753) {\n          animation-delay: 75.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(754) {\n          animation-delay: 75.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(755) {\n          animation-delay: 75.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(756) {\n          animation-delay: 75.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(757) {\n          animation-delay: 75.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(758) {\n          animation-delay: 75.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(759) {\n          animation-delay: 75.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(760) {\n          animation-delay: 76s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(761) {\n          animation-delay: 76.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(762) {\n          animation-delay: 76.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(763) {\n          animation-delay: 76.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(764) {\n          animation-delay: 76.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(765) {\n          animation-delay: 76.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(766) {\n          animation-delay: 76.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(767) {\n          animation-delay: 76.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(768) {\n          animation-delay: 76.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(769) {\n          animation-delay: 76.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(770) {\n          animation-delay: 77s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(771) {\n          animation-delay: 77.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(772) {\n          animation-delay: 77.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(773) {\n          animation-delay: 77.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(774) {\n          animation-delay: 77.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(775) {\n          animation-delay: 77.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(776) {\n          animation-delay: 77.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(777) {\n          animation-delay: 77.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(778) {\n          animation-delay: 77.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(779) {\n          animation-delay: 77.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(780) {\n          animation-delay: 78s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(781) {\n          animation-delay: 78.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(782) {\n          animation-delay: 78.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(783) {\n          animation-delay: 78.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(784) {\n          animation-delay: 78.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(785) {\n          animation-delay: 78.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(786) {\n          animation-delay: 78.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(787) {\n          animation-delay: 78.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(788) {\n          animation-delay: 78.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(789) {\n          animation-delay: 78.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(790) {\n          animation-delay: 79s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(791) {\n          animation-delay: 79.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(792) {\n          animation-delay: 79.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(793) {\n          animation-delay: 79.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(794) {\n          animation-delay: 79.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(795) {\n          animation-delay: 79.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(796) {\n          animation-delay: 79.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(797) {\n          animation-delay: 79.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(798) {\n          animation-delay: 79.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(799) {\n          animation-delay: 79.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(800) {\n          animation-delay: 80s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(801) {\n          animation-delay: 80.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(802) {\n          animation-delay: 80.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(803) {\n          animation-delay: 80.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(804) {\n          animation-delay: 80.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(805) {\n          animation-delay: 80.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(806) {\n          animation-delay: 80.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(807) {\n          animation-delay: 80.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(808) {\n          animation-delay: 80.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(809) {\n          animation-delay: 80.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(810) {\n          animation-delay: 81s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(811) {\n          animation-delay: 81.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(812) {\n          animation-delay: 81.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(813) {\n          animation-delay: 81.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(814) {\n          animation-delay: 81.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(815) {\n          animation-delay: 81.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(816) {\n          animation-delay: 81.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(817) {\n          animation-delay: 81.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(818) {\n          animation-delay: 81.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(819) {\n          animation-delay: 81.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(820) {\n          animation-delay: 82s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(821) {\n          animation-delay: 82.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(822) {\n          animation-delay: 82.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(823) {\n          animation-delay: 82.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(824) {\n          animation-delay: 82.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(825) {\n          animation-delay: 82.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(826) {\n          animation-delay: 82.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(827) {\n          animation-delay: 82.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(828) {\n          animation-delay: 82.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(829) {\n          animation-delay: 82.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(830) {\n          animation-delay: 83s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(831) {\n          animation-delay: 83.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(832) {\n          animation-delay: 83.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(833) {\n          animation-delay: 83.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(834) {\n          animation-delay: 83.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(835) {\n          animation-delay: 83.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(836) {\n          animation-delay: 83.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(837) {\n          animation-delay: 83.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(838) {\n          animation-delay: 83.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(839) {\n          animation-delay: 83.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(840) {\n          animation-delay: 84s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(841) {\n          animation-delay: 84.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(842) {\n          animation-delay: 84.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(843) {\n          animation-delay: 84.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(844) {\n          animation-delay: 84.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(845) {\n          animation-delay: 84.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(846) {\n          animation-delay: 84.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(847) {\n          animation-delay: 84.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(848) {\n          animation-delay: 84.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(849) {\n          animation-delay: 84.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(850) {\n          animation-delay: 85s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(851) {\n          animation-delay: 85.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(852) {\n          animation-delay: 85.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(853) {\n          animation-delay: 85.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(854) {\n          animation-delay: 85.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(855) {\n          animation-delay: 85.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(856) {\n          animation-delay: 85.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(857) {\n          animation-delay: 85.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(858) {\n          animation-delay: 85.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(859) {\n          animation-delay: 85.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(860) {\n          animation-delay: 86s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(861) {\n          animation-delay: 86.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(862) {\n          animation-delay: 86.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(863) {\n          animation-delay: 86.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(864) {\n          animation-delay: 86.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(865) {\n          animation-delay: 86.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(866) {\n          animation-delay: 86.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(867) {\n          animation-delay: 86.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(868) {\n          animation-delay: 86.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(869) {\n          animation-delay: 86.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(870) {\n          animation-delay: 87s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(871) {\n          animation-delay: 87.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(872) {\n          animation-delay: 87.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(873) {\n          animation-delay: 87.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(874) {\n          animation-delay: 87.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(875) {\n          animation-delay: 87.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(876) {\n          animation-delay: 87.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(877) {\n          animation-delay: 87.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(878) {\n          animation-delay: 87.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(879) {\n          animation-delay: 87.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(880) {\n          animation-delay: 88s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(881) {\n          animation-delay: 88.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(882) {\n          animation-delay: 88.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(883) {\n          animation-delay: 88.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(884) {\n          animation-delay: 88.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(885) {\n          animation-delay: 88.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(886) {\n          animation-delay: 88.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(887) {\n          animation-delay: 88.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(888) {\n          animation-delay: 88.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(889) {\n          animation-delay: 88.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(890) {\n          animation-delay: 89s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(891) {\n          animation-delay: 89.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(892) {\n          animation-delay: 89.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(893) {\n          animation-delay: 89.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(894) {\n          animation-delay: 89.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(895) {\n          animation-delay: 89.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(896) {\n          animation-delay: 89.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(897) {\n          animation-delay: 89.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(898) {\n          animation-delay: 89.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(899) {\n          animation-delay: 89.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(900) {\n          animation-delay: 90s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(901) {\n          animation-delay: 90.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(902) {\n          animation-delay: 90.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(903) {\n          animation-delay: 90.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(904) {\n          animation-delay: 90.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(905) {\n          animation-delay: 90.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(906) {\n          animation-delay: 90.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(907) {\n          animation-delay: 90.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(908) {\n          animation-delay: 90.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(909) {\n          animation-delay: 90.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(910) {\n          animation-delay: 91s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(911) {\n          animation-delay: 91.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(912) {\n          animation-delay: 91.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(913) {\n          animation-delay: 91.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(914) {\n          animation-delay: 91.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(915) {\n          animation-delay: 91.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(916) {\n          animation-delay: 91.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(917) {\n          animation-delay: 91.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(918) {\n          animation-delay: 91.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(919) {\n          animation-delay: 91.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(920) {\n          animation-delay: 92s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(921) {\n          animation-delay: 92.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(922) {\n          animation-delay: 92.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(923) {\n          animation-delay: 92.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(924) {\n          animation-delay: 92.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(925) {\n          animation-delay: 92.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(926) {\n          animation-delay: 92.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(927) {\n          animation-delay: 92.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(928) {\n          animation-delay: 92.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(929) {\n          animation-delay: 92.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(930) {\n          animation-delay: 93s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(931) {\n          animation-delay: 93.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(932) {\n          animation-delay: 93.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(933) {\n          animation-delay: 93.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(934) {\n          animation-delay: 93.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(935) {\n          animation-delay: 93.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(936) {\n          animation-delay: 93.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(937) {\n          animation-delay: 93.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(938) {\n          animation-delay: 93.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(939) {\n          animation-delay: 93.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(940) {\n          animation-delay: 94s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(941) {\n          animation-delay: 94.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(942) {\n          animation-delay: 94.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(943) {\n          animation-delay: 94.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(944) {\n          animation-delay: 94.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(945) {\n          animation-delay: 94.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(946) {\n          animation-delay: 94.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(947) {\n          animation-delay: 94.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(948) {\n          animation-delay: 94.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(949) {\n          animation-delay: 94.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(950) {\n          animation-delay: 95s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(951) {\n          animation-delay: 95.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(952) {\n          animation-delay: 95.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(953) {\n          animation-delay: 95.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(954) {\n          animation-delay: 95.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(955) {\n          animation-delay: 95.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(956) {\n          animation-delay: 95.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(957) {\n          animation-delay: 95.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(958) {\n          animation-delay: 95.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(959) {\n          animation-delay: 95.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(960) {\n          animation-delay: 96s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(961) {\n          animation-delay: 96.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(962) {\n          animation-delay: 96.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(963) {\n          animation-delay: 96.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(964) {\n          animation-delay: 96.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(965) {\n          animation-delay: 96.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(966) {\n          animation-delay: 96.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(967) {\n          animation-delay: 96.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(968) {\n          animation-delay: 96.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(969) {\n          animation-delay: 96.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(970) {\n          animation-delay: 97s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(971) {\n          animation-delay: 97.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(972) {\n          animation-delay: 97.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(973) {\n          animation-delay: 97.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(974) {\n          animation-delay: 97.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(975) {\n          animation-delay: 97.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(976) {\n          animation-delay: 97.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(977) {\n          animation-delay: 97.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(978) {\n          animation-delay: 97.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(979) {\n          animation-delay: 97.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(980) {\n          animation-delay: 98s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(981) {\n          animation-delay: 98.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(982) {\n          animation-delay: 98.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(983) {\n          animation-delay: 98.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(984) {\n          animation-delay: 98.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(985) {\n          animation-delay: 98.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(986) {\n          animation-delay: 98.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(987) {\n          animation-delay: 98.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(988) {\n          animation-delay: 98.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(989) {\n          animation-delay: 98.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(990) {\n          animation-delay: 99s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(991) {\n          animation-delay: 99.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(992) {\n          animation-delay: 99.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(993) {\n          animation-delay: 99.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(994) {\n          animation-delay: 99.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(995) {\n          animation-delay: 99.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(996) {\n          animation-delay: 99.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(997) {\n          animation-delay: 99.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(998) {\n          animation-delay: 99.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(999) {\n          animation-delay: 99.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1000) {\n          animation-delay: 100s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1001) {\n          animation-delay: 100.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1002) {\n          animation-delay: 100.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1003) {\n          animation-delay: 100.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1004) {\n          animation-delay: 100.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1005) {\n          animation-delay: 100.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1006) {\n          animation-delay: 100.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1007) {\n          animation-delay: 100.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1008) {\n          animation-delay: 100.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1009) {\n          animation-delay: 100.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1010) {\n          animation-delay: 101s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1011) {\n          animation-delay: 101.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1012) {\n          animation-delay: 101.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1013) {\n          animation-delay: 101.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1014) {\n          animation-delay: 101.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1015) {\n          animation-delay: 101.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1016) {\n          animation-delay: 101.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1017) {\n          animation-delay: 101.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1018) {\n          animation-delay: 101.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1019) {\n          animation-delay: 101.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1020) {\n          animation-delay: 102s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1021) {\n          animation-delay: 102.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1022) {\n          animation-delay: 102.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1023) {\n          animation-delay: 102.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1024) {\n          animation-delay: 102.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1025) {\n          animation-delay: 102.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1026) {\n          animation-delay: 102.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1027) {\n          animation-delay: 102.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1028) {\n          animation-delay: 102.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1029) {\n          animation-delay: 102.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1030) {\n          animation-delay: 103s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1031) {\n          animation-delay: 103.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1032) {\n          animation-delay: 103.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1033) {\n          animation-delay: 103.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1034) {\n          animation-delay: 103.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1035) {\n          animation-delay: 103.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1036) {\n          animation-delay: 103.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1037) {\n          animation-delay: 103.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1038) {\n          animation-delay: 103.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1039) {\n          animation-delay: 103.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1040) {\n          animation-delay: 104s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1041) {\n          animation-delay: 104.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1042) {\n          animation-delay: 104.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1043) {\n          animation-delay: 104.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1044) {\n          animation-delay: 104.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1045) {\n          animation-delay: 104.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1046) {\n          animation-delay: 104.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1047) {\n          animation-delay: 104.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1048) {\n          animation-delay: 104.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1049) {\n          animation-delay: 104.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1050) {\n          animation-delay: 105s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1051) {\n          animation-delay: 105.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1052) {\n          animation-delay: 105.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1053) {\n          animation-delay: 105.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1054) {\n          animation-delay: 105.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1055) {\n          animation-delay: 105.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1056) {\n          animation-delay: 105.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1057) {\n          animation-delay: 105.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1058) {\n          animation-delay: 105.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1059) {\n          animation-delay: 105.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1060) {\n          animation-delay: 106s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1061) {\n          animation-delay: 106.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1062) {\n          animation-delay: 106.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1063) {\n          animation-delay: 106.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1064) {\n          animation-delay: 106.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1065) {\n          animation-delay: 106.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1066) {\n          animation-delay: 106.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1067) {\n          animation-delay: 106.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1068) {\n          animation-delay: 106.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1069) {\n          animation-delay: 106.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1070) {\n          animation-delay: 107s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1071) {\n          animation-delay: 107.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1072) {\n          animation-delay: 107.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1073) {\n          animation-delay: 107.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1074) {\n          animation-delay: 107.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1075) {\n          animation-delay: 107.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1076) {\n          animation-delay: 107.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1077) {\n          animation-delay: 107.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1078) {\n          animation-delay: 107.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1079) {\n          animation-delay: 107.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1080) {\n          animation-delay: 108s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1081) {\n          animation-delay: 108.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1082) {\n          animation-delay: 108.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1083) {\n          animation-delay: 108.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1084) {\n          animation-delay: 108.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1085) {\n          animation-delay: 108.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1086) {\n          animation-delay: 108.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1087) {\n          animation-delay: 108.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1088) {\n          animation-delay: 108.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1089) {\n          animation-delay: 108.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1090) {\n          animation-delay: 109s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1091) {\n          animation-delay: 109.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1092) {\n          animation-delay: 109.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1093) {\n          animation-delay: 109.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1094) {\n          animation-delay: 109.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1095) {\n          animation-delay: 109.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1096) {\n          animation-delay: 109.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1097) {\n          animation-delay: 109.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1098) {\n          animation-delay: 109.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1099) {\n          animation-delay: 109.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1100) {\n          animation-delay: 110s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1101) {\n          animation-delay: 110.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1102) {\n          animation-delay: 110.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1103) {\n          animation-delay: 110.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1104) {\n          animation-delay: 110.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1105) {\n          animation-delay: 110.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1106) {\n          animation-delay: 110.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1107) {\n          animation-delay: 110.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1108) {\n          animation-delay: 110.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1109) {\n          animation-delay: 110.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1110) {\n          animation-delay: 111s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1111) {\n          animation-delay: 111.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1112) {\n          animation-delay: 111.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1113) {\n          animation-delay: 111.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1114) {\n          animation-delay: 111.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1115) {\n          animation-delay: 111.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1116) {\n          animation-delay: 111.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1117) {\n          animation-delay: 111.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1118) {\n          animation-delay: 111.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1119) {\n          animation-delay: 111.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1120) {\n          animation-delay: 112s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1121) {\n          animation-delay: 112.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1122) {\n          animation-delay: 112.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1123) {\n          animation-delay: 112.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1124) {\n          animation-delay: 112.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1125) {\n          animation-delay: 112.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1126) {\n          animation-delay: 112.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1127) {\n          animation-delay: 112.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1128) {\n          animation-delay: 112.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1129) {\n          animation-delay: 112.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1130) {\n          animation-delay: 113s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1131) {\n          animation-delay: 113.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1132) {\n          animation-delay: 113.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1133) {\n          animation-delay: 113.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1134) {\n          animation-delay: 113.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1135) {\n          animation-delay: 113.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1136) {\n          animation-delay: 113.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1137) {\n          animation-delay: 113.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1138) {\n          animation-delay: 113.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1139) {\n          animation-delay: 113.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1140) {\n          animation-delay: 114s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1141) {\n          animation-delay: 114.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1142) {\n          animation-delay: 114.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1143) {\n          animation-delay: 114.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1144) {\n          animation-delay: 114.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1145) {\n          animation-delay: 114.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1146) {\n          animation-delay: 114.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1147) {\n          animation-delay: 114.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1148) {\n          animation-delay: 114.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1149) {\n          animation-delay: 114.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1150) {\n          animation-delay: 115s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1151) {\n          animation-delay: 115.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1152) {\n          animation-delay: 115.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1153) {\n          animation-delay: 115.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1154) {\n          animation-delay: 115.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1155) {\n          animation-delay: 115.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1156) {\n          animation-delay: 115.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1157) {\n          animation-delay: 115.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1158) {\n          animation-delay: 115.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1159) {\n          animation-delay: 115.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1160) {\n          animation-delay: 116s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1161) {\n          animation-delay: 116.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1162) {\n          animation-delay: 116.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1163) {\n          animation-delay: 116.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1164) {\n          animation-delay: 116.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1165) {\n          animation-delay: 116.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1166) {\n          animation-delay: 116.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1167) {\n          animation-delay: 116.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1168) {\n          animation-delay: 116.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1169) {\n          animation-delay: 116.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1170) {\n          animation-delay: 117s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1171) {\n          animation-delay: 117.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1172) {\n          animation-delay: 117.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1173) {\n          animation-delay: 117.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1174) {\n          animation-delay: 117.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1175) {\n          animation-delay: 117.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1176) {\n          animation-delay: 117.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1177) {\n          animation-delay: 117.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1178) {\n          animation-delay: 117.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1179) {\n          animation-delay: 117.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1180) {\n          animation-delay: 118s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1181) {\n          animation-delay: 118.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1182) {\n          animation-delay: 118.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1183) {\n          animation-delay: 118.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1184) {\n          animation-delay: 118.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1185) {\n          animation-delay: 118.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1186) {\n          animation-delay: 118.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1187) {\n          animation-delay: 118.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1188) {\n          animation-delay: 118.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1189) {\n          animation-delay: 118.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1190) {\n          animation-delay: 119s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1191) {\n          animation-delay: 119.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1192) {\n          animation-delay: 119.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1193) {\n          animation-delay: 119.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1194) {\n          animation-delay: 119.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1195) {\n          animation-delay: 119.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1196) {\n          animation-delay: 119.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1197) {\n          animation-delay: 119.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1198) {\n          animation-delay: 119.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1199) {\n          animation-delay: 119.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1200) {\n          animation-delay: 120s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1201) {\n          animation-delay: 120.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1202) {\n          animation-delay: 120.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1203) {\n          animation-delay: 120.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1204) {\n          animation-delay: 120.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1205) {\n          animation-delay: 120.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1206) {\n          animation-delay: 120.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1207) {\n          animation-delay: 120.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1208) {\n          animation-delay: 120.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1209) {\n          animation-delay: 120.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1210) {\n          animation-delay: 121s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1211) {\n          animation-delay: 121.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1212) {\n          animation-delay: 121.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1213) {\n          animation-delay: 121.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1214) {\n          animation-delay: 121.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1215) {\n          animation-delay: 121.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1216) {\n          animation-delay: 121.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1217) {\n          animation-delay: 121.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1218) {\n          animation-delay: 121.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1219) {\n          animation-delay: 121.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1220) {\n          animation-delay: 122s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1221) {\n          animation-delay: 122.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1222) {\n          animation-delay: 122.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1223) {\n          animation-delay: 122.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1224) {\n          animation-delay: 122.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1225) {\n          animation-delay: 122.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1226) {\n          animation-delay: 122.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1227) {\n          animation-delay: 122.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1228) {\n          animation-delay: 122.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1229) {\n          animation-delay: 122.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1230) {\n          animation-delay: 123s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1231) {\n          animation-delay: 123.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1232) {\n          animation-delay: 123.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1233) {\n          animation-delay: 123.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1234) {\n          animation-delay: 123.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1235) {\n          animation-delay: 123.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1236) {\n          animation-delay: 123.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1237) {\n          animation-delay: 123.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1238) {\n          animation-delay: 123.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1239) {\n          animation-delay: 123.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1240) {\n          animation-delay: 124s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1241) {\n          animation-delay: 124.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1242) {\n          animation-delay: 124.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1243) {\n          animation-delay: 124.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1244) {\n          animation-delay: 124.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1245) {\n          animation-delay: 124.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1246) {\n          animation-delay: 124.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1247) {\n          animation-delay: 124.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1248) {\n          animation-delay: 124.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1249) {\n          animation-delay: 124.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1250) {\n          animation-delay: 125s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1251) {\n          animation-delay: 125.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1252) {\n          animation-delay: 125.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1253) {\n          animation-delay: 125.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1254) {\n          animation-delay: 125.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1255) {\n          animation-delay: 125.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1256) {\n          animation-delay: 125.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1257) {\n          animation-delay: 125.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1258) {\n          animation-delay: 125.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1259) {\n          animation-delay: 125.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1260) {\n          animation-delay: 126s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1261) {\n          animation-delay: 126.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1262) {\n          animation-delay: 126.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1263) {\n          animation-delay: 126.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1264) {\n          animation-delay: 126.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1265) {\n          animation-delay: 126.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1266) {\n          animation-delay: 126.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1267) {\n          animation-delay: 126.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1268) {\n          animation-delay: 126.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1269) {\n          animation-delay: 126.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1270) {\n          animation-delay: 127s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1271) {\n          animation-delay: 127.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1272) {\n          animation-delay: 127.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1273) {\n          animation-delay: 127.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1274) {\n          animation-delay: 127.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1275) {\n          animation-delay: 127.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1276) {\n          animation-delay: 127.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1277) {\n          animation-delay: 127.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1278) {\n          animation-delay: 127.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1279) {\n          animation-delay: 127.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1280) {\n          animation-delay: 128s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1281) {\n          animation-delay: 128.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1282) {\n          animation-delay: 128.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1283) {\n          animation-delay: 128.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1284) {\n          animation-delay: 128.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1285) {\n          animation-delay: 128.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1286) {\n          animation-delay: 128.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1287) {\n          animation-delay: 128.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1288) {\n          animation-delay: 128.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1289) {\n          animation-delay: 128.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1290) {\n          animation-delay: 129s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1291) {\n          animation-delay: 129.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1292) {\n          animation-delay: 129.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1293) {\n          animation-delay: 129.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1294) {\n          animation-delay: 129.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1295) {\n          animation-delay: 129.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1296) {\n          animation-delay: 129.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1297) {\n          animation-delay: 129.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1298) {\n          animation-delay: 129.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1299) {\n          animation-delay: 129.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1300) {\n          animation-delay: 130s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1301) {\n          animation-delay: 130.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1302) {\n          animation-delay: 130.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1303) {\n          animation-delay: 130.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1304) {\n          animation-delay: 130.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1305) {\n          animation-delay: 130.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1306) {\n          animation-delay: 130.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1307) {\n          animation-delay: 130.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1308) {\n          animation-delay: 130.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1309) {\n          animation-delay: 130.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1310) {\n          animation-delay: 131s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1311) {\n          animation-delay: 131.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1312) {\n          animation-delay: 131.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1313) {\n          animation-delay: 131.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1314) {\n          animation-delay: 131.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1315) {\n          animation-delay: 131.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1316) {\n          animation-delay: 131.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1317) {\n          animation-delay: 131.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1318) {\n          animation-delay: 131.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1319) {\n          animation-delay: 131.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1320) {\n          animation-delay: 132s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1321) {\n          animation-delay: 132.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1322) {\n          animation-delay: 132.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1323) {\n          animation-delay: 132.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1324) {\n          animation-delay: 132.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1325) {\n          animation-delay: 132.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1326) {\n          animation-delay: 132.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1327) {\n          animation-delay: 132.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1328) {\n          animation-delay: 132.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1329) {\n          animation-delay: 132.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1330) {\n          animation-delay: 133s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1331) {\n          animation-delay: 133.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1332) {\n          animation-delay: 133.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1333) {\n          animation-delay: 133.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1334) {\n          animation-delay: 133.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1335) {\n          animation-delay: 133.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1336) {\n          animation-delay: 133.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1337) {\n          animation-delay: 133.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1338) {\n          animation-delay: 133.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1339) {\n          animation-delay: 133.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1340) {\n          animation-delay: 134s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1341) {\n          animation-delay: 134.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1342) {\n          animation-delay: 134.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1343) {\n          animation-delay: 134.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1344) {\n          animation-delay: 134.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1345) {\n          animation-delay: 134.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1346) {\n          animation-delay: 134.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1347) {\n          animation-delay: 134.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1348) {\n          animation-delay: 134.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1349) {\n          animation-delay: 134.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1350) {\n          animation-delay: 135s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1351) {\n          animation-delay: 135.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1352) {\n          animation-delay: 135.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1353) {\n          animation-delay: 135.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1354) {\n          animation-delay: 135.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1355) {\n          animation-delay: 135.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1356) {\n          animation-delay: 135.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1357) {\n          animation-delay: 135.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1358) {\n          animation-delay: 135.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1359) {\n          animation-delay: 135.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1360) {\n          animation-delay: 136s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1361) {\n          animation-delay: 136.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1362) {\n          animation-delay: 136.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1363) {\n          animation-delay: 136.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1364) {\n          animation-delay: 136.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1365) {\n          animation-delay: 136.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1366) {\n          animation-delay: 136.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1367) {\n          animation-delay: 136.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1368) {\n          animation-delay: 136.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1369) {\n          animation-delay: 136.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1370) {\n          animation-delay: 137s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1371) {\n          animation-delay: 137.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1372) {\n          animation-delay: 137.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1373) {\n          animation-delay: 137.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1374) {\n          animation-delay: 137.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1375) {\n          animation-delay: 137.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1376) {\n          animation-delay: 137.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1377) {\n          animation-delay: 137.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1378) {\n          animation-delay: 137.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1379) {\n          animation-delay: 137.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1380) {\n          animation-delay: 138s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1381) {\n          animation-delay: 138.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1382) {\n          animation-delay: 138.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1383) {\n          animation-delay: 138.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1384) {\n          animation-delay: 138.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1385) {\n          animation-delay: 138.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1386) {\n          animation-delay: 138.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1387) {\n          animation-delay: 138.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1388) {\n          animation-delay: 138.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1389) {\n          animation-delay: 138.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1390) {\n          animation-delay: 139s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1391) {\n          animation-delay: 139.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1392) {\n          animation-delay: 139.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1393) {\n          animation-delay: 139.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1394) {\n          animation-delay: 139.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1395) {\n          animation-delay: 139.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1396) {\n          animation-delay: 139.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1397) {\n          animation-delay: 139.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1398) {\n          animation-delay: 139.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1399) {\n          animation-delay: 139.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1400) {\n          animation-delay: 140s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1401) {\n          animation-delay: 140.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1402) {\n          animation-delay: 140.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1403) {\n          animation-delay: 140.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1404) {\n          animation-delay: 140.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1405) {\n          animation-delay: 140.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1406) {\n          animation-delay: 140.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1407) {\n          animation-delay: 140.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1408) {\n          animation-delay: 140.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1409) {\n          animation-delay: 140.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1410) {\n          animation-delay: 141s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1411) {\n          animation-delay: 141.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1412) {\n          animation-delay: 141.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1413) {\n          animation-delay: 141.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1414) {\n          animation-delay: 141.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1415) {\n          animation-delay: 141.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1416) {\n          animation-delay: 141.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1417) {\n          animation-delay: 141.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1418) {\n          animation-delay: 141.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1419) {\n          animation-delay: 141.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1420) {\n          animation-delay: 142s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1421) {\n          animation-delay: 142.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1422) {\n          animation-delay: 142.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1423) {\n          animation-delay: 142.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1424) {\n          animation-delay: 142.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1425) {\n          animation-delay: 142.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1426) {\n          animation-delay: 142.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1427) {\n          animation-delay: 142.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1428) {\n          animation-delay: 142.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1429) {\n          animation-delay: 142.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1430) {\n          animation-delay: 143s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1431) {\n          animation-delay: 143.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1432) {\n          animation-delay: 143.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1433) {\n          animation-delay: 143.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1434) {\n          animation-delay: 143.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1435) {\n          animation-delay: 143.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1436) {\n          animation-delay: 143.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1437) {\n          animation-delay: 143.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1438) {\n          animation-delay: 143.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1439) {\n          animation-delay: 143.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1440) {\n          animation-delay: 144s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1441) {\n          animation-delay: 144.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1442) {\n          animation-delay: 144.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1443) {\n          animation-delay: 144.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1444) {\n          animation-delay: 144.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1445) {\n          animation-delay: 144.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1446) {\n          animation-delay: 144.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1447) {\n          animation-delay: 144.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1448) {\n          animation-delay: 144.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1449) {\n          animation-delay: 144.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1450) {\n          animation-delay: 145s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1451) {\n          animation-delay: 145.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1452) {\n          animation-delay: 145.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1453) {\n          animation-delay: 145.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1454) {\n          animation-delay: 145.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1455) {\n          animation-delay: 145.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1456) {\n          animation-delay: 145.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1457) {\n          animation-delay: 145.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1458) {\n          animation-delay: 145.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1459) {\n          animation-delay: 145.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1460) {\n          animation-delay: 146s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1461) {\n          animation-delay: 146.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1462) {\n          animation-delay: 146.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1463) {\n          animation-delay: 146.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1464) {\n          animation-delay: 146.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1465) {\n          animation-delay: 146.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1466) {\n          animation-delay: 146.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1467) {\n          animation-delay: 146.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1468) {\n          animation-delay: 146.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1469) {\n          animation-delay: 146.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1470) {\n          animation-delay: 147s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1471) {\n          animation-delay: 147.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1472) {\n          animation-delay: 147.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1473) {\n          animation-delay: 147.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1474) {\n          animation-delay: 147.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1475) {\n          animation-delay: 147.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1476) {\n          animation-delay: 147.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1477) {\n          animation-delay: 147.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1478) {\n          animation-delay: 147.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1479) {\n          animation-delay: 147.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1480) {\n          animation-delay: 148s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1481) {\n          animation-delay: 148.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1482) {\n          animation-delay: 148.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1483) {\n          animation-delay: 148.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1484) {\n          animation-delay: 148.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1485) {\n          animation-delay: 148.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1486) {\n          animation-delay: 148.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1487) {\n          animation-delay: 148.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1488) {\n          animation-delay: 148.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1489) {\n          animation-delay: 148.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1490) {\n          animation-delay: 149s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1491) {\n          animation-delay: 149.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1492) {\n          animation-delay: 149.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1493) {\n          animation-delay: 149.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1494) {\n          animation-delay: 149.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1495) {\n          animation-delay: 149.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1496) {\n          animation-delay: 149.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1497) {\n          animation-delay: 149.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1498) {\n          animation-delay: 149.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1499) {\n          animation-delay: 149.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1500) {\n          animation-delay: 150s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1501) {\n          animation-delay: 150.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1502) {\n          animation-delay: 150.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1503) {\n          animation-delay: 150.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1504) {\n          animation-delay: 150.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1505) {\n          animation-delay: 150.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1506) {\n          animation-delay: 150.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1507) {\n          animation-delay: 150.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1508) {\n          animation-delay: 150.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1509) {\n          animation-delay: 150.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1510) {\n          animation-delay: 151s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1511) {\n          animation-delay: 151.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1512) {\n          animation-delay: 151.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1513) {\n          animation-delay: 151.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1514) {\n          animation-delay: 151.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1515) {\n          animation-delay: 151.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1516) {\n          animation-delay: 151.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1517) {\n          animation-delay: 151.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1518) {\n          animation-delay: 151.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1519) {\n          animation-delay: 151.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1520) {\n          animation-delay: 152s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1521) {\n          animation-delay: 152.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1522) {\n          animation-delay: 152.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1523) {\n          animation-delay: 152.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1524) {\n          animation-delay: 152.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1525) {\n          animation-delay: 152.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1526) {\n          animation-delay: 152.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1527) {\n          animation-delay: 152.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1528) {\n          animation-delay: 152.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1529) {\n          animation-delay: 152.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1530) {\n          animation-delay: 153s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1531) {\n          animation-delay: 153.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1532) {\n          animation-delay: 153.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1533) {\n          animation-delay: 153.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1534) {\n          animation-delay: 153.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1535) {\n          animation-delay: 153.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1536) {\n          animation-delay: 153.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1537) {\n          animation-delay: 153.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1538) {\n          animation-delay: 153.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1539) {\n          animation-delay: 153.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1540) {\n          animation-delay: 154s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1541) {\n          animation-delay: 154.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1542) {\n          animation-delay: 154.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1543) {\n          animation-delay: 154.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1544) {\n          animation-delay: 154.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1545) {\n          animation-delay: 154.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1546) {\n          animation-delay: 154.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1547) {\n          animation-delay: 154.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1548) {\n          animation-delay: 154.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1549) {\n          animation-delay: 154.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1550) {\n          animation-delay: 155s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1551) {\n          animation-delay: 155.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1552) {\n          animation-delay: 155.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1553) {\n          animation-delay: 155.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1554) {\n          animation-delay: 155.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1555) {\n          animation-delay: 155.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1556) {\n          animation-delay: 155.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1557) {\n          animation-delay: 155.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1558) {\n          animation-delay: 155.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1559) {\n          animation-delay: 155.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1560) {\n          animation-delay: 156s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1561) {\n          animation-delay: 156.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1562) {\n          animation-delay: 156.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1563) {\n          animation-delay: 156.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1564) {\n          animation-delay: 156.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1565) {\n          animation-delay: 156.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1566) {\n          animation-delay: 156.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1567) {\n          animation-delay: 156.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1568) {\n          animation-delay: 156.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1569) {\n          animation-delay: 156.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1570) {\n          animation-delay: 157s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1571) {\n          animation-delay: 157.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1572) {\n          animation-delay: 157.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1573) {\n          animation-delay: 157.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1574) {\n          animation-delay: 157.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1575) {\n          animation-delay: 157.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1576) {\n          animation-delay: 157.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1577) {\n          animation-delay: 157.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1578) {\n          animation-delay: 157.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1579) {\n          animation-delay: 157.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1580) {\n          animation-delay: 158s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1581) {\n          animation-delay: 158.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1582) {\n          animation-delay: 158.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1583) {\n          animation-delay: 158.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1584) {\n          animation-delay: 158.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1585) {\n          animation-delay: 158.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1586) {\n          animation-delay: 158.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1587) {\n          animation-delay: 158.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1588) {\n          animation-delay: 158.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1589) {\n          animation-delay: 158.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1590) {\n          animation-delay: 159s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1591) {\n          animation-delay: 159.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1592) {\n          animation-delay: 159.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1593) {\n          animation-delay: 159.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1594) {\n          animation-delay: 159.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1595) {\n          animation-delay: 159.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1596) {\n          animation-delay: 159.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1597) {\n          animation-delay: 159.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1598) {\n          animation-delay: 159.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1599) {\n          animation-delay: 159.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1600) {\n          animation-delay: 160s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1601) {\n          animation-delay: 160.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1602) {\n          animation-delay: 160.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1603) {\n          animation-delay: 160.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1604) {\n          animation-delay: 160.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1605) {\n          animation-delay: 160.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1606) {\n          animation-delay: 160.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1607) {\n          animation-delay: 160.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1608) {\n          animation-delay: 160.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1609) {\n          animation-delay: 160.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1610) {\n          animation-delay: 161s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1611) {\n          animation-delay: 161.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1612) {\n          animation-delay: 161.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1613) {\n          animation-delay: 161.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1614) {\n          animation-delay: 161.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1615) {\n          animation-delay: 161.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1616) {\n          animation-delay: 161.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1617) {\n          animation-delay: 161.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1618) {\n          animation-delay: 161.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1619) {\n          animation-delay: 161.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1620) {\n          animation-delay: 162s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1621) {\n          animation-delay: 162.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1622) {\n          animation-delay: 162.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1623) {\n          animation-delay: 162.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1624) {\n          animation-delay: 162.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1625) {\n          animation-delay: 162.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1626) {\n          animation-delay: 162.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1627) {\n          animation-delay: 162.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1628) {\n          animation-delay: 162.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1629) {\n          animation-delay: 162.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1630) {\n          animation-delay: 163s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1631) {\n          animation-delay: 163.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1632) {\n          animation-delay: 163.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1633) {\n          animation-delay: 163.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1634) {\n          animation-delay: 163.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1635) {\n          animation-delay: 163.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1636) {\n          animation-delay: 163.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1637) {\n          animation-delay: 163.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1638) {\n          animation-delay: 163.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1639) {\n          animation-delay: 163.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1640) {\n          animation-delay: 164s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1641) {\n          animation-delay: 164.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1642) {\n          animation-delay: 164.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1643) {\n          animation-delay: 164.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1644) {\n          animation-delay: 164.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1645) {\n          animation-delay: 164.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1646) {\n          animation-delay: 164.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1647) {\n          animation-delay: 164.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1648) {\n          animation-delay: 164.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1649) {\n          animation-delay: 164.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1650) {\n          animation-delay: 165s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1651) {\n          animation-delay: 165.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1652) {\n          animation-delay: 165.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1653) {\n          animation-delay: 165.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1654) {\n          animation-delay: 165.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1655) {\n          animation-delay: 165.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1656) {\n          animation-delay: 165.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1657) {\n          animation-delay: 165.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1658) {\n          animation-delay: 165.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1659) {\n          animation-delay: 165.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1660) {\n          animation-delay: 166s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1661) {\n          animation-delay: 166.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1662) {\n          animation-delay: 166.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1663) {\n          animation-delay: 166.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1664) {\n          animation-delay: 166.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1665) {\n          animation-delay: 166.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1666) {\n          animation-delay: 166.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1667) {\n          animation-delay: 166.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1668) {\n          animation-delay: 166.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1669) {\n          animation-delay: 166.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1670) {\n          animation-delay: 167s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1671) {\n          animation-delay: 167.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1672) {\n          animation-delay: 167.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1673) {\n          animation-delay: 167.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1674) {\n          animation-delay: 167.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1675) {\n          animation-delay: 167.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1676) {\n          animation-delay: 167.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1677) {\n          animation-delay: 167.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1678) {\n          animation-delay: 167.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1679) {\n          animation-delay: 167.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1680) {\n          animation-delay: 168s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1681) {\n          animation-delay: 168.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1682) {\n          animation-delay: 168.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1683) {\n          animation-delay: 168.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1684) {\n          animation-delay: 168.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1685) {\n          animation-delay: 168.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1686) {\n          animation-delay: 168.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1687) {\n          animation-delay: 168.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1688) {\n          animation-delay: 168.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1689) {\n          animation-delay: 168.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1690) {\n          animation-delay: 169s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1691) {\n          animation-delay: 169.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1692) {\n          animation-delay: 169.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1693) {\n          animation-delay: 169.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1694) {\n          animation-delay: 169.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1695) {\n          animation-delay: 169.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1696) {\n          animation-delay: 169.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1697) {\n          animation-delay: 169.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1698) {\n          animation-delay: 169.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1699) {\n          animation-delay: 169.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1700) {\n          animation-delay: 170s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1701) {\n          animation-delay: 170.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1702) {\n          animation-delay: 170.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1703) {\n          animation-delay: 170.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1704) {\n          animation-delay: 170.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1705) {\n          animation-delay: 170.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1706) {\n          animation-delay: 170.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1707) {\n          animation-delay: 170.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1708) {\n          animation-delay: 170.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1709) {\n          animation-delay: 170.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1710) {\n          animation-delay: 171s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1711) {\n          animation-delay: 171.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1712) {\n          animation-delay: 171.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1713) {\n          animation-delay: 171.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1714) {\n          animation-delay: 171.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1715) {\n          animation-delay: 171.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1716) {\n          animation-delay: 171.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1717) {\n          animation-delay: 171.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1718) {\n          animation-delay: 171.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1719) {\n          animation-delay: 171.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1720) {\n          animation-delay: 172s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1721) {\n          animation-delay: 172.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1722) {\n          animation-delay: 172.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1723) {\n          animation-delay: 172.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1724) {\n          animation-delay: 172.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1725) {\n          animation-delay: 172.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1726) {\n          animation-delay: 172.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1727) {\n          animation-delay: 172.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1728) {\n          animation-delay: 172.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1729) {\n          animation-delay: 172.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1730) {\n          animation-delay: 173s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1731) {\n          animation-delay: 173.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1732) {\n          animation-delay: 173.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1733) {\n          animation-delay: 173.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1734) {\n          animation-delay: 173.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1735) {\n          animation-delay: 173.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1736) {\n          animation-delay: 173.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1737) {\n          animation-delay: 173.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1738) {\n          animation-delay: 173.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1739) {\n          animation-delay: 173.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1740) {\n          animation-delay: 174s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1741) {\n          animation-delay: 174.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1742) {\n          animation-delay: 174.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1743) {\n          animation-delay: 174.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1744) {\n          animation-delay: 174.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1745) {\n          animation-delay: 174.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1746) {\n          animation-delay: 174.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1747) {\n          animation-delay: 174.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1748) {\n          animation-delay: 174.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1749) {\n          animation-delay: 174.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1750) {\n          animation-delay: 175s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1751) {\n          animation-delay: 175.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1752) {\n          animation-delay: 175.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1753) {\n          animation-delay: 175.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1754) {\n          animation-delay: 175.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1755) {\n          animation-delay: 175.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1756) {\n          animation-delay: 175.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1757) {\n          animation-delay: 175.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1758) {\n          animation-delay: 175.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1759) {\n          animation-delay: 175.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1760) {\n          animation-delay: 176s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1761) {\n          animation-delay: 176.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1762) {\n          animation-delay: 176.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1763) {\n          animation-delay: 176.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1764) {\n          animation-delay: 176.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1765) {\n          animation-delay: 176.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1766) {\n          animation-delay: 176.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1767) {\n          animation-delay: 176.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1768) {\n          animation-delay: 176.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1769) {\n          animation-delay: 176.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1770) {\n          animation-delay: 177s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1771) {\n          animation-delay: 177.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1772) {\n          animation-delay: 177.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1773) {\n          animation-delay: 177.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1774) {\n          animation-delay: 177.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1775) {\n          animation-delay: 177.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1776) {\n          animation-delay: 177.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1777) {\n          animation-delay: 177.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1778) {\n          animation-delay: 177.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1779) {\n          animation-delay: 177.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1780) {\n          animation-delay: 178s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1781) {\n          animation-delay: 178.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1782) {\n          animation-delay: 178.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1783) {\n          animation-delay: 178.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1784) {\n          animation-delay: 178.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1785) {\n          animation-delay: 178.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1786) {\n          animation-delay: 178.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1787) {\n          animation-delay: 178.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1788) {\n          animation-delay: 178.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1789) {\n          animation-delay: 178.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1790) {\n          animation-delay: 179s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1791) {\n          animation-delay: 179.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1792) {\n          animation-delay: 179.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1793) {\n          animation-delay: 179.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1794) {\n          animation-delay: 179.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1795) {\n          animation-delay: 179.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1796) {\n          animation-delay: 179.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1797) {\n          animation-delay: 179.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1798) {\n          animation-delay: 179.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1799) {\n          animation-delay: 179.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1800) {\n          animation-delay: 180s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1801) {\n          animation-delay: 180.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1802) {\n          animation-delay: 180.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1803) {\n          animation-delay: 180.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1804) {\n          animation-delay: 180.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1805) {\n          animation-delay: 180.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1806) {\n          animation-delay: 180.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1807) {\n          animation-delay: 180.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1808) {\n          animation-delay: 180.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1809) {\n          animation-delay: 180.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1810) {\n          animation-delay: 181s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1811) {\n          animation-delay: 181.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1812) {\n          animation-delay: 181.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1813) {\n          animation-delay: 181.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1814) {\n          animation-delay: 181.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1815) {\n          animation-delay: 181.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1816) {\n          animation-delay: 181.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1817) {\n          animation-delay: 181.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1818) {\n          animation-delay: 181.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1819) {\n          animation-delay: 181.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1820) {\n          animation-delay: 182s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1821) {\n          animation-delay: 182.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1822) {\n          animation-delay: 182.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1823) {\n          animation-delay: 182.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1824) {\n          animation-delay: 182.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1825) {\n          animation-delay: 182.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1826) {\n          animation-delay: 182.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1827) {\n          animation-delay: 182.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1828) {\n          animation-delay: 182.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1829) {\n          animation-delay: 182.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1830) {\n          animation-delay: 183s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1831) {\n          animation-delay: 183.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1832) {\n          animation-delay: 183.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1833) {\n          animation-delay: 183.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1834) {\n          animation-delay: 183.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1835) {\n          animation-delay: 183.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1836) {\n          animation-delay: 183.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1837) {\n          animation-delay: 183.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1838) {\n          animation-delay: 183.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1839) {\n          animation-delay: 183.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1840) {\n          animation-delay: 184s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1841) {\n          animation-delay: 184.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1842) {\n          animation-delay: 184.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1843) {\n          animation-delay: 184.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1844) {\n          animation-delay: 184.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1845) {\n          animation-delay: 184.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1846) {\n          animation-delay: 184.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1847) {\n          animation-delay: 184.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1848) {\n          animation-delay: 184.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1849) {\n          animation-delay: 184.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1850) {\n          animation-delay: 185s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1851) {\n          animation-delay: 185.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1852) {\n          animation-delay: 185.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1853) {\n          animation-delay: 185.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1854) {\n          animation-delay: 185.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1855) {\n          animation-delay: 185.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1856) {\n          animation-delay: 185.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1857) {\n          animation-delay: 185.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1858) {\n          animation-delay: 185.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1859) {\n          animation-delay: 185.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1860) {\n          animation-delay: 186s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1861) {\n          animation-delay: 186.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1862) {\n          animation-delay: 186.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1863) {\n          animation-delay: 186.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1864) {\n          animation-delay: 186.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1865) {\n          animation-delay: 186.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1866) {\n          animation-delay: 186.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1867) {\n          animation-delay: 186.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1868) {\n          animation-delay: 186.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1869) {\n          animation-delay: 186.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1870) {\n          animation-delay: 187s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1871) {\n          animation-delay: 187.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1872) {\n          animation-delay: 187.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1873) {\n          animation-delay: 187.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1874) {\n          animation-delay: 187.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1875) {\n          animation-delay: 187.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1876) {\n          animation-delay: 187.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1877) {\n          animation-delay: 187.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1878) {\n          animation-delay: 187.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1879) {\n          animation-delay: 187.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1880) {\n          animation-delay: 188s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1881) {\n          animation-delay: 188.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1882) {\n          animation-delay: 188.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1883) {\n          animation-delay: 188.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1884) {\n          animation-delay: 188.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1885) {\n          animation-delay: 188.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1886) {\n          animation-delay: 188.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1887) {\n          animation-delay: 188.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1888) {\n          animation-delay: 188.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1889) {\n          animation-delay: 188.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1890) {\n          animation-delay: 189s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1891) {\n          animation-delay: 189.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1892) {\n          animation-delay: 189.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1893) {\n          animation-delay: 189.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1894) {\n          animation-delay: 189.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1895) {\n          animation-delay: 189.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1896) {\n          animation-delay: 189.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1897) {\n          animation-delay: 189.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1898) {\n          animation-delay: 189.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1899) {\n          animation-delay: 189.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1900) {\n          animation-delay: 190s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1901) {\n          animation-delay: 190.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1902) {\n          animation-delay: 190.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1903) {\n          animation-delay: 190.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1904) {\n          animation-delay: 190.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1905) {\n          animation-delay: 190.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1906) {\n          animation-delay: 190.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1907) {\n          animation-delay: 190.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1908) {\n          animation-delay: 190.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1909) {\n          animation-delay: 190.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1910) {\n          animation-delay: 191s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1911) {\n          animation-delay: 191.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1912) {\n          animation-delay: 191.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1913) {\n          animation-delay: 191.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1914) {\n          animation-delay: 191.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1915) {\n          animation-delay: 191.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1916) {\n          animation-delay: 191.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1917) {\n          animation-delay: 191.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1918) {\n          animation-delay: 191.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1919) {\n          animation-delay: 191.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1920) {\n          animation-delay: 192s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1921) {\n          animation-delay: 192.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1922) {\n          animation-delay: 192.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1923) {\n          animation-delay: 192.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1924) {\n          animation-delay: 192.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1925) {\n          animation-delay: 192.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1926) {\n          animation-delay: 192.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1927) {\n          animation-delay: 192.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1928) {\n          animation-delay: 192.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1929) {\n          animation-delay: 192.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1930) {\n          animation-delay: 193s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1931) {\n          animation-delay: 193.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1932) {\n          animation-delay: 193.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1933) {\n          animation-delay: 193.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1934) {\n          animation-delay: 193.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1935) {\n          animation-delay: 193.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1936) {\n          animation-delay: 193.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1937) {\n          animation-delay: 193.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1938) {\n          animation-delay: 193.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1939) {\n          animation-delay: 193.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1940) {\n          animation-delay: 194s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1941) {\n          animation-delay: 194.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1942) {\n          animation-delay: 194.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1943) {\n          animation-delay: 194.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1944) {\n          animation-delay: 194.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1945) {\n          animation-delay: 194.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1946) {\n          animation-delay: 194.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1947) {\n          animation-delay: 194.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1948) {\n          animation-delay: 194.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1949) {\n          animation-delay: 194.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1950) {\n          animation-delay: 195s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1951) {\n          animation-delay: 195.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1952) {\n          animation-delay: 195.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1953) {\n          animation-delay: 195.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1954) {\n          animation-delay: 195.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1955) {\n          animation-delay: 195.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1956) {\n          animation-delay: 195.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1957) {\n          animation-delay: 195.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1958) {\n          animation-delay: 195.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1959) {\n          animation-delay: 195.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1960) {\n          animation-delay: 196s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1961) {\n          animation-delay: 196.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1962) {\n          animation-delay: 196.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1963) {\n          animation-delay: 196.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1964) {\n          animation-delay: 196.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1965) {\n          animation-delay: 196.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1966) {\n          animation-delay: 196.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1967) {\n          animation-delay: 196.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1968) {\n          animation-delay: 196.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1969) {\n          animation-delay: 196.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1970) {\n          animation-delay: 197s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1971) {\n          animation-delay: 197.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1972) {\n          animation-delay: 197.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1973) {\n          animation-delay: 197.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1974) {\n          animation-delay: 197.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1975) {\n          animation-delay: 197.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1976) {\n          animation-delay: 197.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1977) {\n          animation-delay: 197.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1978) {\n          animation-delay: 197.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1979) {\n          animation-delay: 197.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1980) {\n          animation-delay: 198s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1981) {\n          animation-delay: 198.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1982) {\n          animation-delay: 198.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1983) {\n          animation-delay: 198.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1984) {\n          animation-delay: 198.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1985) {\n          animation-delay: 198.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1986) {\n          animation-delay: 198.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1987) {\n          animation-delay: 198.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1988) {\n          animation-delay: 198.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1989) {\n          animation-delay: 198.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1990) {\n          animation-delay: 199s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1991) {\n          animation-delay: 199.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1992) {\n          animation-delay: 199.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1993) {\n          animation-delay: 199.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1994) {\n          animation-delay: 199.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1995) {\n          animation-delay: 199.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1996) {\n          animation-delay: 199.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1997) {\n          animation-delay: 199.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1998) {\n          animation-delay: 199.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(1999) {\n          animation-delay: 199.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2000) {\n          animation-delay: 200s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2001) {\n          animation-delay: 200.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2002) {\n          animation-delay: 200.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2003) {\n          animation-delay: 200.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2004) {\n          animation-delay: 200.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2005) {\n          animation-delay: 200.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2006) {\n          animation-delay: 200.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2007) {\n          animation-delay: 200.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2008) {\n          animation-delay: 200.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2009) {\n          animation-delay: 200.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2010) {\n          animation-delay: 201s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2011) {\n          animation-delay: 201.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2012) {\n          animation-delay: 201.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2013) {\n          animation-delay: 201.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2014) {\n          animation-delay: 201.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2015) {\n          animation-delay: 201.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2016) {\n          animation-delay: 201.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2017) {\n          animation-delay: 201.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2018) {\n          animation-delay: 201.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2019) {\n          animation-delay: 201.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2020) {\n          animation-delay: 202s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2021) {\n          animation-delay: 202.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2022) {\n          animation-delay: 202.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2023) {\n          animation-delay: 202.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2024) {\n          animation-delay: 202.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2025) {\n          animation-delay: 202.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2026) {\n          animation-delay: 202.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2027) {\n          animation-delay: 202.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2028) {\n          animation-delay: 202.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2029) {\n          animation-delay: 202.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2030) {\n          animation-delay: 203s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2031) {\n          animation-delay: 203.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2032) {\n          animation-delay: 203.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2033) {\n          animation-delay: 203.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2034) {\n          animation-delay: 203.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2035) {\n          animation-delay: 203.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2036) {\n          animation-delay: 203.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2037) {\n          animation-delay: 203.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2038) {\n          animation-delay: 203.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2039) {\n          animation-delay: 203.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2040) {\n          animation-delay: 204s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2041) {\n          animation-delay: 204.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2042) {\n          animation-delay: 204.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2043) {\n          animation-delay: 204.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2044) {\n          animation-delay: 204.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2045) {\n          animation-delay: 204.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2046) {\n          animation-delay: 204.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2047) {\n          animation-delay: 204.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2048) {\n          animation-delay: 204.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2049) {\n          animation-delay: 204.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2050) {\n          animation-delay: 205s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2051) {\n          animation-delay: 205.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2052) {\n          animation-delay: 205.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2053) {\n          animation-delay: 205.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2054) {\n          animation-delay: 205.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2055) {\n          animation-delay: 205.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2056) {\n          animation-delay: 205.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2057) {\n          animation-delay: 205.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2058) {\n          animation-delay: 205.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2059) {\n          animation-delay: 205.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2060) {\n          animation-delay: 206s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2061) {\n          animation-delay: 206.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2062) {\n          animation-delay: 206.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2063) {\n          animation-delay: 206.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2064) {\n          animation-delay: 206.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2065) {\n          animation-delay: 206.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2066) {\n          animation-delay: 206.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2067) {\n          animation-delay: 206.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2068) {\n          animation-delay: 206.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2069) {\n          animation-delay: 206.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2070) {\n          animation-delay: 207s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2071) {\n          animation-delay: 207.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2072) {\n          animation-delay: 207.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2073) {\n          animation-delay: 207.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2074) {\n          animation-delay: 207.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2075) {\n          animation-delay: 207.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2076) {\n          animation-delay: 207.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2077) {\n          animation-delay: 207.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2078) {\n          animation-delay: 207.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2079) {\n          animation-delay: 207.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2080) {\n          animation-delay: 208s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2081) {\n          animation-delay: 208.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2082) {\n          animation-delay: 208.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2083) {\n          animation-delay: 208.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2084) {\n          animation-delay: 208.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2085) {\n          animation-delay: 208.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2086) {\n          animation-delay: 208.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2087) {\n          animation-delay: 208.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2088) {\n          animation-delay: 208.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2089) {\n          animation-delay: 208.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2090) {\n          animation-delay: 209s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2091) {\n          animation-delay: 209.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2092) {\n          animation-delay: 209.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2093) {\n          animation-delay: 209.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2094) {\n          animation-delay: 209.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2095) {\n          animation-delay: 209.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2096) {\n          animation-delay: 209.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2097) {\n          animation-delay: 209.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2098) {\n          animation-delay: 209.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2099) {\n          animation-delay: 209.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2100) {\n          animation-delay: 210s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2101) {\n          animation-delay: 210.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2102) {\n          animation-delay: 210.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2103) {\n          animation-delay: 210.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2104) {\n          animation-delay: 210.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2105) {\n          animation-delay: 210.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2106) {\n          animation-delay: 210.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2107) {\n          animation-delay: 210.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2108) {\n          animation-delay: 210.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2109) {\n          animation-delay: 210.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2110) {\n          animation-delay: 211s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2111) {\n          animation-delay: 211.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2112) {\n          animation-delay: 211.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2113) {\n          animation-delay: 211.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2114) {\n          animation-delay: 211.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2115) {\n          animation-delay: 211.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2116) {\n          animation-delay: 211.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2117) {\n          animation-delay: 211.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2118) {\n          animation-delay: 211.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2119) {\n          animation-delay: 211.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2120) {\n          animation-delay: 212s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2121) {\n          animation-delay: 212.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2122) {\n          animation-delay: 212.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2123) {\n          animation-delay: 212.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2124) {\n          animation-delay: 212.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2125) {\n          animation-delay: 212.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2126) {\n          animation-delay: 212.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2127) {\n          animation-delay: 212.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2128) {\n          animation-delay: 212.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2129) {\n          animation-delay: 212.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2130) {\n          animation-delay: 213s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2131) {\n          animation-delay: 213.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2132) {\n          animation-delay: 213.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2133) {\n          animation-delay: 213.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2134) {\n          animation-delay: 213.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2135) {\n          animation-delay: 213.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2136) {\n          animation-delay: 213.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2137) {\n          animation-delay: 213.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2138) {\n          animation-delay: 213.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2139) {\n          animation-delay: 213.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2140) {\n          animation-delay: 214s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2141) {\n          animation-delay: 214.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2142) {\n          animation-delay: 214.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2143) {\n          animation-delay: 214.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2144) {\n          animation-delay: 214.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2145) {\n          animation-delay: 214.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2146) {\n          animation-delay: 214.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2147) {\n          animation-delay: 214.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2148) {\n          animation-delay: 214.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2149) {\n          animation-delay: 214.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2150) {\n          animation-delay: 215s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2151) {\n          animation-delay: 215.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2152) {\n          animation-delay: 215.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2153) {\n          animation-delay: 215.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2154) {\n          animation-delay: 215.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2155) {\n          animation-delay: 215.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2156) {\n          animation-delay: 215.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2157) {\n          animation-delay: 215.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2158) {\n          animation-delay: 215.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2159) {\n          animation-delay: 215.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2160) {\n          animation-delay: 216s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2161) {\n          animation-delay: 216.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2162) {\n          animation-delay: 216.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2163) {\n          animation-delay: 216.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2164) {\n          animation-delay: 216.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2165) {\n          animation-delay: 216.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2166) {\n          animation-delay: 216.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2167) {\n          animation-delay: 216.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2168) {\n          animation-delay: 216.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2169) {\n          animation-delay: 216.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2170) {\n          animation-delay: 217s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2171) {\n          animation-delay: 217.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2172) {\n          animation-delay: 217.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2173) {\n          animation-delay: 217.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2174) {\n          animation-delay: 217.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2175) {\n          animation-delay: 217.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2176) {\n          animation-delay: 217.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2177) {\n          animation-delay: 217.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2178) {\n          animation-delay: 217.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2179) {\n          animation-delay: 217.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2180) {\n          animation-delay: 218s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2181) {\n          animation-delay: 218.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2182) {\n          animation-delay: 218.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2183) {\n          animation-delay: 218.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2184) {\n          animation-delay: 218.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2185) {\n          animation-delay: 218.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2186) {\n          animation-delay: 218.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2187) {\n          animation-delay: 218.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2188) {\n          animation-delay: 218.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2189) {\n          animation-delay: 218.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2190) {\n          animation-delay: 219s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2191) {\n          animation-delay: 219.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2192) {\n          animation-delay: 219.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2193) {\n          animation-delay: 219.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2194) {\n          animation-delay: 219.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2195) {\n          animation-delay: 219.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2196) {\n          animation-delay: 219.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2197) {\n          animation-delay: 219.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2198) {\n          animation-delay: 219.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2199) {\n          animation-delay: 219.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2200) {\n          animation-delay: 220s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2201) {\n          animation-delay: 220.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2202) {\n          animation-delay: 220.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2203) {\n          animation-delay: 220.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2204) {\n          animation-delay: 220.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2205) {\n          animation-delay: 220.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2206) {\n          animation-delay: 220.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2207) {\n          animation-delay: 220.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2208) {\n          animation-delay: 220.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2209) {\n          animation-delay: 220.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2210) {\n          animation-delay: 221s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2211) {\n          animation-delay: 221.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2212) {\n          animation-delay: 221.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2213) {\n          animation-delay: 221.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2214) {\n          animation-delay: 221.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2215) {\n          animation-delay: 221.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2216) {\n          animation-delay: 221.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2217) {\n          animation-delay: 221.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2218) {\n          animation-delay: 221.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2219) {\n          animation-delay: 221.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2220) {\n          animation-delay: 222s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2221) {\n          animation-delay: 222.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2222) {\n          animation-delay: 222.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2223) {\n          animation-delay: 222.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2224) {\n          animation-delay: 222.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2225) {\n          animation-delay: 222.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2226) {\n          animation-delay: 222.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2227) {\n          animation-delay: 222.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2228) {\n          animation-delay: 222.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2229) {\n          animation-delay: 222.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2230) {\n          animation-delay: 223s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2231) {\n          animation-delay: 223.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2232) {\n          animation-delay: 223.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2233) {\n          animation-delay: 223.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2234) {\n          animation-delay: 223.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2235) {\n          animation-delay: 223.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2236) {\n          animation-delay: 223.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2237) {\n          animation-delay: 223.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2238) {\n          animation-delay: 223.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2239) {\n          animation-delay: 223.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2240) {\n          animation-delay: 224s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2241) {\n          animation-delay: 224.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2242) {\n          animation-delay: 224.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2243) {\n          animation-delay: 224.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2244) {\n          animation-delay: 224.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2245) {\n          animation-delay: 224.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2246) {\n          animation-delay: 224.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2247) {\n          animation-delay: 224.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2248) {\n          animation-delay: 224.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2249) {\n          animation-delay: 224.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2250) {\n          animation-delay: 225s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2251) {\n          animation-delay: 225.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2252) {\n          animation-delay: 225.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2253) {\n          animation-delay: 225.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2254) {\n          animation-delay: 225.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2255) {\n          animation-delay: 225.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2256) {\n          animation-delay: 225.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2257) {\n          animation-delay: 225.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2258) {\n          animation-delay: 225.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2259) {\n          animation-delay: 225.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2260) {\n          animation-delay: 226s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2261) {\n          animation-delay: 226.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2262) {\n          animation-delay: 226.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2263) {\n          animation-delay: 226.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2264) {\n          animation-delay: 226.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2265) {\n          animation-delay: 226.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2266) {\n          animation-delay: 226.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2267) {\n          animation-delay: 226.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2268) {\n          animation-delay: 226.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2269) {\n          animation-delay: 226.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2270) {\n          animation-delay: 227s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2271) {\n          animation-delay: 227.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2272) {\n          animation-delay: 227.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2273) {\n          animation-delay: 227.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2274) {\n          animation-delay: 227.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2275) {\n          animation-delay: 227.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2276) {\n          animation-delay: 227.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2277) {\n          animation-delay: 227.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2278) {\n          animation-delay: 227.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2279) {\n          animation-delay: 227.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2280) {\n          animation-delay: 228s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2281) {\n          animation-delay: 228.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2282) {\n          animation-delay: 228.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2283) {\n          animation-delay: 228.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2284) {\n          animation-delay: 228.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2285) {\n          animation-delay: 228.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2286) {\n          animation-delay: 228.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2287) {\n          animation-delay: 228.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2288) {\n          animation-delay: 228.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2289) {\n          animation-delay: 228.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2290) {\n          animation-delay: 229s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2291) {\n          animation-delay: 229.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2292) {\n          animation-delay: 229.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2293) {\n          animation-delay: 229.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2294) {\n          animation-delay: 229.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2295) {\n          animation-delay: 229.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2296) {\n          animation-delay: 229.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2297) {\n          animation-delay: 229.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2298) {\n          animation-delay: 229.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2299) {\n          animation-delay: 229.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2300) {\n          animation-delay: 230s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2301) {\n          animation-delay: 230.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2302) {\n          animation-delay: 230.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2303) {\n          animation-delay: 230.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2304) {\n          animation-delay: 230.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2305) {\n          animation-delay: 230.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2306) {\n          animation-delay: 230.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2307) {\n          animation-delay: 230.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2308) {\n          animation-delay: 230.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2309) {\n          animation-delay: 230.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2310) {\n          animation-delay: 231s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2311) {\n          animation-delay: 231.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2312) {\n          animation-delay: 231.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2313) {\n          animation-delay: 231.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2314) {\n          animation-delay: 231.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2315) {\n          animation-delay: 231.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2316) {\n          animation-delay: 231.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2317) {\n          animation-delay: 231.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2318) {\n          animation-delay: 231.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2319) {\n          animation-delay: 231.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2320) {\n          animation-delay: 232s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2321) {\n          animation-delay: 232.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2322) {\n          animation-delay: 232.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2323) {\n          animation-delay: 232.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2324) {\n          animation-delay: 232.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2325) {\n          animation-delay: 232.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2326) {\n          animation-delay: 232.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2327) {\n          animation-delay: 232.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2328) {\n          animation-delay: 232.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2329) {\n          animation-delay: 232.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2330) {\n          animation-delay: 233s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2331) {\n          animation-delay: 233.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2332) {\n          animation-delay: 233.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2333) {\n          animation-delay: 233.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2334) {\n          animation-delay: 233.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2335) {\n          animation-delay: 233.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2336) {\n          animation-delay: 233.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2337) {\n          animation-delay: 233.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2338) {\n          animation-delay: 233.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2339) {\n          animation-delay: 233.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2340) {\n          animation-delay: 234s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2341) {\n          animation-delay: 234.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2342) {\n          animation-delay: 234.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2343) {\n          animation-delay: 234.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2344) {\n          animation-delay: 234.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2345) {\n          animation-delay: 234.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2346) {\n          animation-delay: 234.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2347) {\n          animation-delay: 234.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2348) {\n          animation-delay: 234.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2349) {\n          animation-delay: 234.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2350) {\n          animation-delay: 235s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2351) {\n          animation-delay: 235.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2352) {\n          animation-delay: 235.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2353) {\n          animation-delay: 235.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2354) {\n          animation-delay: 235.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2355) {\n          animation-delay: 235.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2356) {\n          animation-delay: 235.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2357) {\n          animation-delay: 235.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2358) {\n          animation-delay: 235.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2359) {\n          animation-delay: 235.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2360) {\n          animation-delay: 236s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2361) {\n          animation-delay: 236.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2362) {\n          animation-delay: 236.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2363) {\n          animation-delay: 236.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2364) {\n          animation-delay: 236.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2365) {\n          animation-delay: 236.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2366) {\n          animation-delay: 236.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2367) {\n          animation-delay: 236.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2368) {\n          animation-delay: 236.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2369) {\n          animation-delay: 236.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2370) {\n          animation-delay: 237s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2371) {\n          animation-delay: 237.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2372) {\n          animation-delay: 237.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2373) {\n          animation-delay: 237.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2374) {\n          animation-delay: 237.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2375) {\n          animation-delay: 237.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2376) {\n          animation-delay: 237.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2377) {\n          animation-delay: 237.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2378) {\n          animation-delay: 237.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2379) {\n          animation-delay: 237.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2380) {\n          animation-delay: 238s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2381) {\n          animation-delay: 238.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2382) {\n          animation-delay: 238.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2383) {\n          animation-delay: 238.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2384) {\n          animation-delay: 238.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2385) {\n          animation-delay: 238.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2386) {\n          animation-delay: 238.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2387) {\n          animation-delay: 238.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2388) {\n          animation-delay: 238.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2389) {\n          animation-delay: 238.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2390) {\n          animation-delay: 239s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2391) {\n          animation-delay: 239.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2392) {\n          animation-delay: 239.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2393) {\n          animation-delay: 239.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2394) {\n          animation-delay: 239.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2395) {\n          animation-delay: 239.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2396) {\n          animation-delay: 239.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2397) {\n          animation-delay: 239.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2398) {\n          animation-delay: 239.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2399) {\n          animation-delay: 239.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2400) {\n          animation-delay: 240s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2401) {\n          animation-delay: 240.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2402) {\n          animation-delay: 240.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2403) {\n          animation-delay: 240.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2404) {\n          animation-delay: 240.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2405) {\n          animation-delay: 240.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2406) {\n          animation-delay: 240.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2407) {\n          animation-delay: 240.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2408) {\n          animation-delay: 240.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2409) {\n          animation-delay: 240.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2410) {\n          animation-delay: 241s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2411) {\n          animation-delay: 241.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2412) {\n          animation-delay: 241.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2413) {\n          animation-delay: 241.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2414) {\n          animation-delay: 241.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2415) {\n          animation-delay: 241.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2416) {\n          animation-delay: 241.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2417) {\n          animation-delay: 241.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2418) {\n          animation-delay: 241.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2419) {\n          animation-delay: 241.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2420) {\n          animation-delay: 242s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2421) {\n          animation-delay: 242.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2422) {\n          animation-delay: 242.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2423) {\n          animation-delay: 242.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2424) {\n          animation-delay: 242.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2425) {\n          animation-delay: 242.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2426) {\n          animation-delay: 242.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2427) {\n          animation-delay: 242.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2428) {\n          animation-delay: 242.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2429) {\n          animation-delay: 242.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2430) {\n          animation-delay: 243s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2431) {\n          animation-delay: 243.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2432) {\n          animation-delay: 243.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2433) {\n          animation-delay: 243.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2434) {\n          animation-delay: 243.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2435) {\n          animation-delay: 243.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2436) {\n          animation-delay: 243.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2437) {\n          animation-delay: 243.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2438) {\n          animation-delay: 243.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2439) {\n          animation-delay: 243.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2440) {\n          animation-delay: 244s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2441) {\n          animation-delay: 244.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2442) {\n          animation-delay: 244.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2443) {\n          animation-delay: 244.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2444) {\n          animation-delay: 244.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2445) {\n          animation-delay: 244.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2446) {\n          animation-delay: 244.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2447) {\n          animation-delay: 244.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2448) {\n          animation-delay: 244.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2449) {\n          animation-delay: 244.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2450) {\n          animation-delay: 245s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2451) {\n          animation-delay: 245.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2452) {\n          animation-delay: 245.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2453) {\n          animation-delay: 245.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2454) {\n          animation-delay: 245.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2455) {\n          animation-delay: 245.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2456) {\n          animation-delay: 245.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2457) {\n          animation-delay: 245.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2458) {\n          animation-delay: 245.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2459) {\n          animation-delay: 245.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2460) {\n          animation-delay: 246s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2461) {\n          animation-delay: 246.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2462) {\n          animation-delay: 246.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2463) {\n          animation-delay: 246.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2464) {\n          animation-delay: 246.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2465) {\n          animation-delay: 246.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2466) {\n          animation-delay: 246.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2467) {\n          animation-delay: 246.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2468) {\n          animation-delay: 246.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2469) {\n          animation-delay: 246.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2470) {\n          animation-delay: 247s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2471) {\n          animation-delay: 247.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2472) {\n          animation-delay: 247.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2473) {\n          animation-delay: 247.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2474) {\n          animation-delay: 247.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2475) {\n          animation-delay: 247.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2476) {\n          animation-delay: 247.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2477) {\n          animation-delay: 247.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2478) {\n          animation-delay: 247.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2479) {\n          animation-delay: 247.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2480) {\n          animation-delay: 248s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2481) {\n          animation-delay: 248.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2482) {\n          animation-delay: 248.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2483) {\n          animation-delay: 248.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2484) {\n          animation-delay: 248.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2485) {\n          animation-delay: 248.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2486) {\n          animation-delay: 248.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2487) {\n          animation-delay: 248.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2488) {\n          animation-delay: 248.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2489) {\n          animation-delay: 248.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2490) {\n          animation-delay: 249s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2491) {\n          animation-delay: 249.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2492) {\n          animation-delay: 249.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2493) {\n          animation-delay: 249.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2494) {\n          animation-delay: 249.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2495) {\n          animation-delay: 249.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2496) {\n          animation-delay: 249.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2497) {\n          animation-delay: 249.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2498) {\n          animation-delay: 249.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2499) {\n          animation-delay: 249.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2500) {\n          animation-delay: 250s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2501) {\n          animation-delay: 250.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2502) {\n          animation-delay: 250.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2503) {\n          animation-delay: 250.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2504) {\n          animation-delay: 250.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2505) {\n          animation-delay: 250.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2506) {\n          animation-delay: 250.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2507) {\n          animation-delay: 250.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2508) {\n          animation-delay: 250.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2509) {\n          animation-delay: 250.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2510) {\n          animation-delay: 251s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2511) {\n          animation-delay: 251.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2512) {\n          animation-delay: 251.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2513) {\n          animation-delay: 251.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2514) {\n          animation-delay: 251.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2515) {\n          animation-delay: 251.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2516) {\n          animation-delay: 251.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2517) {\n          animation-delay: 251.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2518) {\n          animation-delay: 251.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2519) {\n          animation-delay: 251.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2520) {\n          animation-delay: 252s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2521) {\n          animation-delay: 252.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2522) {\n          animation-delay: 252.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2523) {\n          animation-delay: 252.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2524) {\n          animation-delay: 252.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2525) {\n          animation-delay: 252.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2526) {\n          animation-delay: 252.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2527) {\n          animation-delay: 252.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2528) {\n          animation-delay: 252.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2529) {\n          animation-delay: 252.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2530) {\n          animation-delay: 253s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2531) {\n          animation-delay: 253.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2532) {\n          animation-delay: 253.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2533) {\n          animation-delay: 253.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2534) {\n          animation-delay: 253.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2535) {\n          animation-delay: 253.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2536) {\n          animation-delay: 253.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2537) {\n          animation-delay: 253.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2538) {\n          animation-delay: 253.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2539) {\n          animation-delay: 253.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2540) {\n          animation-delay: 254s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2541) {\n          animation-delay: 254.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2542) {\n          animation-delay: 254.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2543) {\n          animation-delay: 254.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2544) {\n          animation-delay: 254.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2545) {\n          animation-delay: 254.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2546) {\n          animation-delay: 254.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2547) {\n          animation-delay: 254.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2548) {\n          animation-delay: 254.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2549) {\n          animation-delay: 254.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2550) {\n          animation-delay: 255s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2551) {\n          animation-delay: 255.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2552) {\n          animation-delay: 255.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2553) {\n          animation-delay: 255.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2554) {\n          animation-delay: 255.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2555) {\n          animation-delay: 255.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2556) {\n          animation-delay: 255.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2557) {\n          animation-delay: 255.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2558) {\n          animation-delay: 255.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2559) {\n          animation-delay: 255.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2560) {\n          animation-delay: 256s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2561) {\n          animation-delay: 256.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2562) {\n          animation-delay: 256.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2563) {\n          animation-delay: 256.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2564) {\n          animation-delay: 256.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2565) {\n          animation-delay: 256.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2566) {\n          animation-delay: 256.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2567) {\n          animation-delay: 256.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2568) {\n          animation-delay: 256.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2569) {\n          animation-delay: 256.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2570) {\n          animation-delay: 257s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2571) {\n          animation-delay: 257.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2572) {\n          animation-delay: 257.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2573) {\n          animation-delay: 257.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2574) {\n          animation-delay: 257.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2575) {\n          animation-delay: 257.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2576) {\n          animation-delay: 257.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2577) {\n          animation-delay: 257.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2578) {\n          animation-delay: 257.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2579) {\n          animation-delay: 257.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2580) {\n          animation-delay: 258s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2581) {\n          animation-delay: 258.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2582) {\n          animation-delay: 258.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2583) {\n          animation-delay: 258.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2584) {\n          animation-delay: 258.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2585) {\n          animation-delay: 258.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2586) {\n          animation-delay: 258.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2587) {\n          animation-delay: 258.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2588) {\n          animation-delay: 258.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2589) {\n          animation-delay: 258.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2590) {\n          animation-delay: 259s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2591) {\n          animation-delay: 259.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2592) {\n          animation-delay: 259.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2593) {\n          animation-delay: 259.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2594) {\n          animation-delay: 259.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2595) {\n          animation-delay: 259.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2596) {\n          animation-delay: 259.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2597) {\n          animation-delay: 259.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2598) {\n          animation-delay: 259.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2599) {\n          animation-delay: 259.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2600) {\n          animation-delay: 260s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2601) {\n          animation-delay: 260.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2602) {\n          animation-delay: 260.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2603) {\n          animation-delay: 260.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2604) {\n          animation-delay: 260.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2605) {\n          animation-delay: 260.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2606) {\n          animation-delay: 260.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2607) {\n          animation-delay: 260.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2608) {\n          animation-delay: 260.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2609) {\n          animation-delay: 260.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2610) {\n          animation-delay: 261s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2611) {\n          animation-delay: 261.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2612) {\n          animation-delay: 261.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2613) {\n          animation-delay: 261.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2614) {\n          animation-delay: 261.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2615) {\n          animation-delay: 261.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2616) {\n          animation-delay: 261.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2617) {\n          animation-delay: 261.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2618) {\n          animation-delay: 261.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2619) {\n          animation-delay: 261.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2620) {\n          animation-delay: 262s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2621) {\n          animation-delay: 262.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2622) {\n          animation-delay: 262.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2623) {\n          animation-delay: 262.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2624) {\n          animation-delay: 262.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2625) {\n          animation-delay: 262.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2626) {\n          animation-delay: 262.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2627) {\n          animation-delay: 262.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2628) {\n          animation-delay: 262.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2629) {\n          animation-delay: 262.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2630) {\n          animation-delay: 263s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2631) {\n          animation-delay: 263.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2632) {\n          animation-delay: 263.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2633) {\n          animation-delay: 263.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2634) {\n          animation-delay: 263.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2635) {\n          animation-delay: 263.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2636) {\n          animation-delay: 263.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2637) {\n          animation-delay: 263.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2638) {\n          animation-delay: 263.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2639) {\n          animation-delay: 263.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2640) {\n          animation-delay: 264s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2641) {\n          animation-delay: 264.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2642) {\n          animation-delay: 264.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2643) {\n          animation-delay: 264.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2644) {\n          animation-delay: 264.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2645) {\n          animation-delay: 264.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2646) {\n          animation-delay: 264.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2647) {\n          animation-delay: 264.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2648) {\n          animation-delay: 264.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2649) {\n          animation-delay: 264.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2650) {\n          animation-delay: 265s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2651) {\n          animation-delay: 265.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2652) {\n          animation-delay: 265.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2653) {\n          animation-delay: 265.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2654) {\n          animation-delay: 265.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2655) {\n          animation-delay: 265.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2656) {\n          animation-delay: 265.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2657) {\n          animation-delay: 265.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2658) {\n          animation-delay: 265.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2659) {\n          animation-delay: 265.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2660) {\n          animation-delay: 266s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2661) {\n          animation-delay: 266.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2662) {\n          animation-delay: 266.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2663) {\n          animation-delay: 266.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2664) {\n          animation-delay: 266.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2665) {\n          animation-delay: 266.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2666) {\n          animation-delay: 266.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2667) {\n          animation-delay: 266.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2668) {\n          animation-delay: 266.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2669) {\n          animation-delay: 266.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2670) {\n          animation-delay: 267s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2671) {\n          animation-delay: 267.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2672) {\n          animation-delay: 267.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2673) {\n          animation-delay: 267.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2674) {\n          animation-delay: 267.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2675) {\n          animation-delay: 267.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2676) {\n          animation-delay: 267.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2677) {\n          animation-delay: 267.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2678) {\n          animation-delay: 267.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2679) {\n          animation-delay: 267.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2680) {\n          animation-delay: 268s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2681) {\n          animation-delay: 268.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2682) {\n          animation-delay: 268.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2683) {\n          animation-delay: 268.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2684) {\n          animation-delay: 268.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2685) {\n          animation-delay: 268.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2686) {\n          animation-delay: 268.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2687) {\n          animation-delay: 268.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2688) {\n          animation-delay: 268.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2689) {\n          animation-delay: 268.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2690) {\n          animation-delay: 269s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2691) {\n          animation-delay: 269.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2692) {\n          animation-delay: 269.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2693) {\n          animation-delay: 269.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2694) {\n          animation-delay: 269.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2695) {\n          animation-delay: 269.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2696) {\n          animation-delay: 269.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2697) {\n          animation-delay: 269.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2698) {\n          animation-delay: 269.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2699) {\n          animation-delay: 269.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2700) {\n          animation-delay: 270s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2701) {\n          animation-delay: 270.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2702) {\n          animation-delay: 270.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2703) {\n          animation-delay: 270.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2704) {\n          animation-delay: 270.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2705) {\n          animation-delay: 270.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2706) {\n          animation-delay: 270.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2707) {\n          animation-delay: 270.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2708) {\n          animation-delay: 270.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2709) {\n          animation-delay: 270.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2710) {\n          animation-delay: 271s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2711) {\n          animation-delay: 271.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2712) {\n          animation-delay: 271.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2713) {\n          animation-delay: 271.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2714) {\n          animation-delay: 271.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2715) {\n          animation-delay: 271.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2716) {\n          animation-delay: 271.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2717) {\n          animation-delay: 271.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2718) {\n          animation-delay: 271.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2719) {\n          animation-delay: 271.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2720) {\n          animation-delay: 272s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2721) {\n          animation-delay: 272.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2722) {\n          animation-delay: 272.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2723) {\n          animation-delay: 272.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2724) {\n          animation-delay: 272.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2725) {\n          animation-delay: 272.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2726) {\n          animation-delay: 272.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2727) {\n          animation-delay: 272.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2728) {\n          animation-delay: 272.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2729) {\n          animation-delay: 272.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2730) {\n          animation-delay: 273s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2731) {\n          animation-delay: 273.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2732) {\n          animation-delay: 273.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2733) {\n          animation-delay: 273.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2734) {\n          animation-delay: 273.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2735) {\n          animation-delay: 273.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2736) {\n          animation-delay: 273.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2737) {\n          animation-delay: 273.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2738) {\n          animation-delay: 273.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2739) {\n          animation-delay: 273.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2740) {\n          animation-delay: 274s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2741) {\n          animation-delay: 274.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2742) {\n          animation-delay: 274.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2743) {\n          animation-delay: 274.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2744) {\n          animation-delay: 274.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2745) {\n          animation-delay: 274.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2746) {\n          animation-delay: 274.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2747) {\n          animation-delay: 274.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2748) {\n          animation-delay: 274.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2749) {\n          animation-delay: 274.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2750) {\n          animation-delay: 275s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2751) {\n          animation-delay: 275.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2752) {\n          animation-delay: 275.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2753) {\n          animation-delay: 275.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2754) {\n          animation-delay: 275.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2755) {\n          animation-delay: 275.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2756) {\n          animation-delay: 275.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2757) {\n          animation-delay: 275.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2758) {\n          animation-delay: 275.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2759) {\n          animation-delay: 275.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2760) {\n          animation-delay: 276s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2761) {\n          animation-delay: 276.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2762) {\n          animation-delay: 276.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2763) {\n          animation-delay: 276.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2764) {\n          animation-delay: 276.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2765) {\n          animation-delay: 276.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2766) {\n          animation-delay: 276.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2767) {\n          animation-delay: 276.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2768) {\n          animation-delay: 276.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2769) {\n          animation-delay: 276.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2770) {\n          animation-delay: 277s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2771) {\n          animation-delay: 277.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2772) {\n          animation-delay: 277.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2773) {\n          animation-delay: 277.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2774) {\n          animation-delay: 277.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2775) {\n          animation-delay: 277.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2776) {\n          animation-delay: 277.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2777) {\n          animation-delay: 277.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2778) {\n          animation-delay: 277.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2779) {\n          animation-delay: 277.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2780) {\n          animation-delay: 278s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2781) {\n          animation-delay: 278.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2782) {\n          animation-delay: 278.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2783) {\n          animation-delay: 278.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2784) {\n          animation-delay: 278.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2785) {\n          animation-delay: 278.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2786) {\n          animation-delay: 278.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2787) {\n          animation-delay: 278.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2788) {\n          animation-delay: 278.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2789) {\n          animation-delay: 278.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2790) {\n          animation-delay: 279s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2791) {\n          animation-delay: 279.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2792) {\n          animation-delay: 279.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2793) {\n          animation-delay: 279.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2794) {\n          animation-delay: 279.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2795) {\n          animation-delay: 279.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2796) {\n          animation-delay: 279.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2797) {\n          animation-delay: 279.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2798) {\n          animation-delay: 279.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2799) {\n          animation-delay: 279.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2800) {\n          animation-delay: 280s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2801) {\n          animation-delay: 280.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2802) {\n          animation-delay: 280.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2803) {\n          animation-delay: 280.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2804) {\n          animation-delay: 280.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2805) {\n          animation-delay: 280.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2806) {\n          animation-delay: 280.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2807) {\n          animation-delay: 280.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2808) {\n          animation-delay: 280.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2809) {\n          animation-delay: 280.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2810) {\n          animation-delay: 281s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2811) {\n          animation-delay: 281.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2812) {\n          animation-delay: 281.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2813) {\n          animation-delay: 281.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2814) {\n          animation-delay: 281.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2815) {\n          animation-delay: 281.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2816) {\n          animation-delay: 281.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2817) {\n          animation-delay: 281.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2818) {\n          animation-delay: 281.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2819) {\n          animation-delay: 281.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2820) {\n          animation-delay: 282s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2821) {\n          animation-delay: 282.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2822) {\n          animation-delay: 282.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2823) {\n          animation-delay: 282.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2824) {\n          animation-delay: 282.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2825) {\n          animation-delay: 282.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2826) {\n          animation-delay: 282.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2827) {\n          animation-delay: 282.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2828) {\n          animation-delay: 282.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2829) {\n          animation-delay: 282.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2830) {\n          animation-delay: 283s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2831) {\n          animation-delay: 283.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2832) {\n          animation-delay: 283.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2833) {\n          animation-delay: 283.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2834) {\n          animation-delay: 283.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2835) {\n          animation-delay: 283.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2836) {\n          animation-delay: 283.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2837) {\n          animation-delay: 283.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2838) {\n          animation-delay: 283.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2839) {\n          animation-delay: 283.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2840) {\n          animation-delay: 284s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2841) {\n          animation-delay: 284.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2842) {\n          animation-delay: 284.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2843) {\n          animation-delay: 284.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2844) {\n          animation-delay: 284.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2845) {\n          animation-delay: 284.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2846) {\n          animation-delay: 284.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2847) {\n          animation-delay: 284.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2848) {\n          animation-delay: 284.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2849) {\n          animation-delay: 284.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2850) {\n          animation-delay: 285s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2851) {\n          animation-delay: 285.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2852) {\n          animation-delay: 285.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2853) {\n          animation-delay: 285.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2854) {\n          animation-delay: 285.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2855) {\n          animation-delay: 285.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2856) {\n          animation-delay: 285.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2857) {\n          animation-delay: 285.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2858) {\n          animation-delay: 285.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2859) {\n          animation-delay: 285.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2860) {\n          animation-delay: 286s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2861) {\n          animation-delay: 286.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2862) {\n          animation-delay: 286.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2863) {\n          animation-delay: 286.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2864) {\n          animation-delay: 286.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2865) {\n          animation-delay: 286.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2866) {\n          animation-delay: 286.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2867) {\n          animation-delay: 286.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2868) {\n          animation-delay: 286.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2869) {\n          animation-delay: 286.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2870) {\n          animation-delay: 287s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2871) {\n          animation-delay: 287.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2872) {\n          animation-delay: 287.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2873) {\n          animation-delay: 287.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2874) {\n          animation-delay: 287.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2875) {\n          animation-delay: 287.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2876) {\n          animation-delay: 287.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2877) {\n          animation-delay: 287.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2878) {\n          animation-delay: 287.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2879) {\n          animation-delay: 287.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2880) {\n          animation-delay: 288s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2881) {\n          animation-delay: 288.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2882) {\n          animation-delay: 288.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2883) {\n          animation-delay: 288.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2884) {\n          animation-delay: 288.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2885) {\n          animation-delay: 288.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2886) {\n          animation-delay: 288.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2887) {\n          animation-delay: 288.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2888) {\n          animation-delay: 288.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2889) {\n          animation-delay: 288.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2890) {\n          animation-delay: 289s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2891) {\n          animation-delay: 289.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2892) {\n          animation-delay: 289.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2893) {\n          animation-delay: 289.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2894) {\n          animation-delay: 289.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2895) {\n          animation-delay: 289.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2896) {\n          animation-delay: 289.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2897) {\n          animation-delay: 289.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2898) {\n          animation-delay: 289.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2899) {\n          animation-delay: 289.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2900) {\n          animation-delay: 290s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2901) {\n          animation-delay: 290.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2902) {\n          animation-delay: 290.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2903) {\n          animation-delay: 290.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2904) {\n          animation-delay: 290.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2905) {\n          animation-delay: 290.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2906) {\n          animation-delay: 290.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2907) {\n          animation-delay: 290.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2908) {\n          animation-delay: 290.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2909) {\n          animation-delay: 290.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2910) {\n          animation-delay: 291s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2911) {\n          animation-delay: 291.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2912) {\n          animation-delay: 291.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2913) {\n          animation-delay: 291.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2914) {\n          animation-delay: 291.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2915) {\n          animation-delay: 291.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2916) {\n          animation-delay: 291.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2917) {\n          animation-delay: 291.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2918) {\n          animation-delay: 291.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2919) {\n          animation-delay: 291.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2920) {\n          animation-delay: 292s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2921) {\n          animation-delay: 292.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2922) {\n          animation-delay: 292.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2923) {\n          animation-delay: 292.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2924) {\n          animation-delay: 292.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2925) {\n          animation-delay: 292.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2926) {\n          animation-delay: 292.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2927) {\n          animation-delay: 292.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2928) {\n          animation-delay: 292.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2929) {\n          animation-delay: 292.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2930) {\n          animation-delay: 293s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2931) {\n          animation-delay: 293.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2932) {\n          animation-delay: 293.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2933) {\n          animation-delay: 293.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2934) {\n          animation-delay: 293.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2935) {\n          animation-delay: 293.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2936) {\n          animation-delay: 293.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2937) {\n          animation-delay: 293.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2938) {\n          animation-delay: 293.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2939) {\n          animation-delay: 293.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2940) {\n          animation-delay: 294s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2941) {\n          animation-delay: 294.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2942) {\n          animation-delay: 294.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2943) {\n          animation-delay: 294.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2944) {\n          animation-delay: 294.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2945) {\n          animation-delay: 294.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2946) {\n          animation-delay: 294.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2947) {\n          animation-delay: 294.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2948) {\n          animation-delay: 294.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2949) {\n          animation-delay: 294.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2950) {\n          animation-delay: 295s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2951) {\n          animation-delay: 295.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2952) {\n          animation-delay: 295.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2953) {\n          animation-delay: 295.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2954) {\n          animation-delay: 295.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2955) {\n          animation-delay: 295.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2956) {\n          animation-delay: 295.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2957) {\n          animation-delay: 295.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2958) {\n          animation-delay: 295.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2959) {\n          animation-delay: 295.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2960) {\n          animation-delay: 296s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2961) {\n          animation-delay: 296.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2962) {\n          animation-delay: 296.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2963) {\n          animation-delay: 296.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2964) {\n          animation-delay: 296.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2965) {\n          animation-delay: 296.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2966) {\n          animation-delay: 296.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2967) {\n          animation-delay: 296.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2968) {\n          animation-delay: 296.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2969) {\n          animation-delay: 296.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2970) {\n          animation-delay: 297s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2971) {\n          animation-delay: 297.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2972) {\n          animation-delay: 297.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2973) {\n          animation-delay: 297.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2974) {\n          animation-delay: 297.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2975) {\n          animation-delay: 297.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2976) {\n          animation-delay: 297.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2977) {\n          animation-delay: 297.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2978) {\n          animation-delay: 297.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2979) {\n          animation-delay: 297.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2980) {\n          animation-delay: 298s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2981) {\n          animation-delay: 298.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2982) {\n          animation-delay: 298.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2983) {\n          animation-delay: 298.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2984) {\n          animation-delay: 298.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2985) {\n          animation-delay: 298.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2986) {\n          animation-delay: 298.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2987) {\n          animation-delay: 298.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2988) {\n          animation-delay: 298.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2989) {\n          animation-delay: 298.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2990) {\n          animation-delay: 299s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2991) {\n          animation-delay: 299.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2992) {\n          animation-delay: 299.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2993) {\n          animation-delay: 299.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2994) {\n          animation-delay: 299.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2995) {\n          animation-delay: 299.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2996) {\n          animation-delay: 299.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2997) {\n          animation-delay: 299.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2998) {\n          animation-delay: 299.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(2999) {\n          animation-delay: 299.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3000) {\n          animation-delay: 300s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3001) {\n          animation-delay: 300.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3002) {\n          animation-delay: 300.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3003) {\n          animation-delay: 300.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3004) {\n          animation-delay: 300.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3005) {\n          animation-delay: 300.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3006) {\n          animation-delay: 300.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3007) {\n          animation-delay: 300.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3008) {\n          animation-delay: 300.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3009) {\n          animation-delay: 300.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3010) {\n          animation-delay: 301s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3011) {\n          animation-delay: 301.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3012) {\n          animation-delay: 301.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3013) {\n          animation-delay: 301.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3014) {\n          animation-delay: 301.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3015) {\n          animation-delay: 301.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3016) {\n          animation-delay: 301.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3017) {\n          animation-delay: 301.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3018) {\n          animation-delay: 301.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3019) {\n          animation-delay: 301.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3020) {\n          animation-delay: 302s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3021) {\n          animation-delay: 302.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3022) {\n          animation-delay: 302.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3023) {\n          animation-delay: 302.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3024) {\n          animation-delay: 302.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3025) {\n          animation-delay: 302.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3026) {\n          animation-delay: 302.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3027) {\n          animation-delay: 302.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3028) {\n          animation-delay: 302.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3029) {\n          animation-delay: 302.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3030) {\n          animation-delay: 303s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3031) {\n          animation-delay: 303.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3032) {\n          animation-delay: 303.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3033) {\n          animation-delay: 303.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3034) {\n          animation-delay: 303.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3035) {\n          animation-delay: 303.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3036) {\n          animation-delay: 303.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3037) {\n          animation-delay: 303.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3038) {\n          animation-delay: 303.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3039) {\n          animation-delay: 303.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3040) {\n          animation-delay: 304s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3041) {\n          animation-delay: 304.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3042) {\n          animation-delay: 304.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3043) {\n          animation-delay: 304.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3044) {\n          animation-delay: 304.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3045) {\n          animation-delay: 304.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3046) {\n          animation-delay: 304.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3047) {\n          animation-delay: 304.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3048) {\n          animation-delay: 304.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3049) {\n          animation-delay: 304.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3050) {\n          animation-delay: 305s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3051) {\n          animation-delay: 305.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3052) {\n          animation-delay: 305.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3053) {\n          animation-delay: 305.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3054) {\n          animation-delay: 305.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3055) {\n          animation-delay: 305.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3056) {\n          animation-delay: 305.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3057) {\n          animation-delay: 305.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3058) {\n          animation-delay: 305.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3059) {\n          animation-delay: 305.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3060) {\n          animation-delay: 306s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3061) {\n          animation-delay: 306.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3062) {\n          animation-delay: 306.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3063) {\n          animation-delay: 306.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3064) {\n          animation-delay: 306.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3065) {\n          animation-delay: 306.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3066) {\n          animation-delay: 306.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3067) {\n          animation-delay: 306.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3068) {\n          animation-delay: 306.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3069) {\n          animation-delay: 306.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3070) {\n          animation-delay: 307s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3071) {\n          animation-delay: 307.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3072) {\n          animation-delay: 307.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3073) {\n          animation-delay: 307.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3074) {\n          animation-delay: 307.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3075) {\n          animation-delay: 307.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3076) {\n          animation-delay: 307.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3077) {\n          animation-delay: 307.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3078) {\n          animation-delay: 307.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3079) {\n          animation-delay: 307.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3080) {\n          animation-delay: 308s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3081) {\n          animation-delay: 308.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3082) {\n          animation-delay: 308.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3083) {\n          animation-delay: 308.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3084) {\n          animation-delay: 308.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3085) {\n          animation-delay: 308.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3086) {\n          animation-delay: 308.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3087) {\n          animation-delay: 308.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3088) {\n          animation-delay: 308.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3089) {\n          animation-delay: 308.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3090) {\n          animation-delay: 309s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3091) {\n          animation-delay: 309.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3092) {\n          animation-delay: 309.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3093) {\n          animation-delay: 309.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3094) {\n          animation-delay: 309.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3095) {\n          animation-delay: 309.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3096) {\n          animation-delay: 309.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3097) {\n          animation-delay: 309.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3098) {\n          animation-delay: 309.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3099) {\n          animation-delay: 309.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3100) {\n          animation-delay: 310s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3101) {\n          animation-delay: 310.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3102) {\n          animation-delay: 310.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3103) {\n          animation-delay: 310.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3104) {\n          animation-delay: 310.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3105) {\n          animation-delay: 310.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3106) {\n          animation-delay: 310.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3107) {\n          animation-delay: 310.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3108) {\n          animation-delay: 310.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3109) {\n          animation-delay: 310.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3110) {\n          animation-delay: 311s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3111) {\n          animation-delay: 311.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3112) {\n          animation-delay: 311.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3113) {\n          animation-delay: 311.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3114) {\n          animation-delay: 311.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3115) {\n          animation-delay: 311.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3116) {\n          animation-delay: 311.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3117) {\n          animation-delay: 311.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3118) {\n          animation-delay: 311.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3119) {\n          animation-delay: 311.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3120) {\n          animation-delay: 312s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3121) {\n          animation-delay: 312.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3122) {\n          animation-delay: 312.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3123) {\n          animation-delay: 312.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3124) {\n          animation-delay: 312.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3125) {\n          animation-delay: 312.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3126) {\n          animation-delay: 312.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3127) {\n          animation-delay: 312.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3128) {\n          animation-delay: 312.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3129) {\n          animation-delay: 312.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3130) {\n          animation-delay: 313s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3131) {\n          animation-delay: 313.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3132) {\n          animation-delay: 313.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3133) {\n          animation-delay: 313.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3134) {\n          animation-delay: 313.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3135) {\n          animation-delay: 313.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3136) {\n          animation-delay: 313.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3137) {\n          animation-delay: 313.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3138) {\n          animation-delay: 313.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3139) {\n          animation-delay: 313.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3140) {\n          animation-delay: 314s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3141) {\n          animation-delay: 314.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3142) {\n          animation-delay: 314.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3143) {\n          animation-delay: 314.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3144) {\n          animation-delay: 314.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3145) {\n          animation-delay: 314.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3146) {\n          animation-delay: 314.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3147) {\n          animation-delay: 314.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3148) {\n          animation-delay: 314.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3149) {\n          animation-delay: 314.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3150) {\n          animation-delay: 315s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3151) {\n          animation-delay: 315.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3152) {\n          animation-delay: 315.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3153) {\n          animation-delay: 315.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3154) {\n          animation-delay: 315.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3155) {\n          animation-delay: 315.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3156) {\n          animation-delay: 315.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3157) {\n          animation-delay: 315.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3158) {\n          animation-delay: 315.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3159) {\n          animation-delay: 315.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3160) {\n          animation-delay: 316s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3161) {\n          animation-delay: 316.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3162) {\n          animation-delay: 316.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3163) {\n          animation-delay: 316.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3164) {\n          animation-delay: 316.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3165) {\n          animation-delay: 316.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3166) {\n          animation-delay: 316.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3167) {\n          animation-delay: 316.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3168) {\n          animation-delay: 316.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3169) {\n          animation-delay: 316.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3170) {\n          animation-delay: 317s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3171) {\n          animation-delay: 317.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3172) {\n          animation-delay: 317.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3173) {\n          animation-delay: 317.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3174) {\n          animation-delay: 317.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3175) {\n          animation-delay: 317.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3176) {\n          animation-delay: 317.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3177) {\n          animation-delay: 317.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3178) {\n          animation-delay: 317.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3179) {\n          animation-delay: 317.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3180) {\n          animation-delay: 318s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3181) {\n          animation-delay: 318.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3182) {\n          animation-delay: 318.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3183) {\n          animation-delay: 318.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3184) {\n          animation-delay: 318.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3185) {\n          animation-delay: 318.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3186) {\n          animation-delay: 318.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3187) {\n          animation-delay: 318.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3188) {\n          animation-delay: 318.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3189) {\n          animation-delay: 318.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3190) {\n          animation-delay: 319s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3191) {\n          animation-delay: 319.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3192) {\n          animation-delay: 319.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3193) {\n          animation-delay: 319.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3194) {\n          animation-delay: 319.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3195) {\n          animation-delay: 319.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3196) {\n          animation-delay: 319.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3197) {\n          animation-delay: 319.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3198) {\n          animation-delay: 319.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3199) {\n          animation-delay: 319.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3200) {\n          animation-delay: 320s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3201) {\n          animation-delay: 320.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3202) {\n          animation-delay: 320.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3203) {\n          animation-delay: 320.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3204) {\n          animation-delay: 320.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3205) {\n          animation-delay: 320.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3206) {\n          animation-delay: 320.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3207) {\n          animation-delay: 320.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3208) {\n          animation-delay: 320.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3209) {\n          animation-delay: 320.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3210) {\n          animation-delay: 321s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3211) {\n          animation-delay: 321.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3212) {\n          animation-delay: 321.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3213) {\n          animation-delay: 321.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3214) {\n          animation-delay: 321.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3215) {\n          animation-delay: 321.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3216) {\n          animation-delay: 321.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3217) {\n          animation-delay: 321.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3218) {\n          animation-delay: 321.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3219) {\n          animation-delay: 321.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3220) {\n          animation-delay: 322s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3221) {\n          animation-delay: 322.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3222) {\n          animation-delay: 322.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3223) {\n          animation-delay: 322.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3224) {\n          animation-delay: 322.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3225) {\n          animation-delay: 322.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3226) {\n          animation-delay: 322.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3227) {\n          animation-delay: 322.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3228) {\n          animation-delay: 322.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3229) {\n          animation-delay: 322.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3230) {\n          animation-delay: 323s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3231) {\n          animation-delay: 323.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3232) {\n          animation-delay: 323.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3233) {\n          animation-delay: 323.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3234) {\n          animation-delay: 323.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3235) {\n          animation-delay: 323.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3236) {\n          animation-delay: 323.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3237) {\n          animation-delay: 323.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3238) {\n          animation-delay: 323.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3239) {\n          animation-delay: 323.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3240) {\n          animation-delay: 324s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3241) {\n          animation-delay: 324.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3242) {\n          animation-delay: 324.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3243) {\n          animation-delay: 324.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3244) {\n          animation-delay: 324.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3245) {\n          animation-delay: 324.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3246) {\n          animation-delay: 324.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3247) {\n          animation-delay: 324.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3248) {\n          animation-delay: 324.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3249) {\n          animation-delay: 324.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3250) {\n          animation-delay: 325s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3251) {\n          animation-delay: 325.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3252) {\n          animation-delay: 325.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3253) {\n          animation-delay: 325.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3254) {\n          animation-delay: 325.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3255) {\n          animation-delay: 325.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3256) {\n          animation-delay: 325.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3257) {\n          animation-delay: 325.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3258) {\n          animation-delay: 325.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3259) {\n          animation-delay: 325.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3260) {\n          animation-delay: 326s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3261) {\n          animation-delay: 326.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3262) {\n          animation-delay: 326.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3263) {\n          animation-delay: 326.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3264) {\n          animation-delay: 326.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3265) {\n          animation-delay: 326.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3266) {\n          animation-delay: 326.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3267) {\n          animation-delay: 326.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3268) {\n          animation-delay: 326.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3269) {\n          animation-delay: 326.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3270) {\n          animation-delay: 327s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3271) {\n          animation-delay: 327.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3272) {\n          animation-delay: 327.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3273) {\n          animation-delay: 327.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3274) {\n          animation-delay: 327.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3275) {\n          animation-delay: 327.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3276) {\n          animation-delay: 327.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3277) {\n          animation-delay: 327.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3278) {\n          animation-delay: 327.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3279) {\n          animation-delay: 327.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3280) {\n          animation-delay: 328s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3281) {\n          animation-delay: 328.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3282) {\n          animation-delay: 328.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3283) {\n          animation-delay: 328.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3284) {\n          animation-delay: 328.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3285) {\n          animation-delay: 328.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3286) {\n          animation-delay: 328.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3287) {\n          animation-delay: 328.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3288) {\n          animation-delay: 328.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3289) {\n          animation-delay: 328.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3290) {\n          animation-delay: 329s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3291) {\n          animation-delay: 329.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3292) {\n          animation-delay: 329.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3293) {\n          animation-delay: 329.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3294) {\n          animation-delay: 329.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3295) {\n          animation-delay: 329.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3296) {\n          animation-delay: 329.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3297) {\n          animation-delay: 329.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3298) {\n          animation-delay: 329.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3299) {\n          animation-delay: 329.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3300) {\n          animation-delay: 330s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3301) {\n          animation-delay: 330.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3302) {\n          animation-delay: 330.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3303) {\n          animation-delay: 330.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3304) {\n          animation-delay: 330.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3305) {\n          animation-delay: 330.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3306) {\n          animation-delay: 330.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3307) {\n          animation-delay: 330.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3308) {\n          animation-delay: 330.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3309) {\n          animation-delay: 330.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3310) {\n          animation-delay: 331s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3311) {\n          animation-delay: 331.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3312) {\n          animation-delay: 331.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3313) {\n          animation-delay: 331.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3314) {\n          animation-delay: 331.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3315) {\n          animation-delay: 331.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3316) {\n          animation-delay: 331.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3317) {\n          animation-delay: 331.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3318) {\n          animation-delay: 331.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3319) {\n          animation-delay: 331.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3320) {\n          animation-delay: 332s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3321) {\n          animation-delay: 332.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3322) {\n          animation-delay: 332.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3323) {\n          animation-delay: 332.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3324) {\n          animation-delay: 332.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3325) {\n          animation-delay: 332.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3326) {\n          animation-delay: 332.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3327) {\n          animation-delay: 332.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3328) {\n          animation-delay: 332.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3329) {\n          animation-delay: 332.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3330) {\n          animation-delay: 333s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3331) {\n          animation-delay: 333.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3332) {\n          animation-delay: 333.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3333) {\n          animation-delay: 333.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3334) {\n          animation-delay: 333.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3335) {\n          animation-delay: 333.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3336) {\n          animation-delay: 333.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3337) {\n          animation-delay: 333.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3338) {\n          animation-delay: 333.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3339) {\n          animation-delay: 333.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3340) {\n          animation-delay: 334s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3341) {\n          animation-delay: 334.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3342) {\n          animation-delay: 334.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3343) {\n          animation-delay: 334.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3344) {\n          animation-delay: 334.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3345) {\n          animation-delay: 334.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3346) {\n          animation-delay: 334.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3347) {\n          animation-delay: 334.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3348) {\n          animation-delay: 334.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3349) {\n          animation-delay: 334.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3350) {\n          animation-delay: 335s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3351) {\n          animation-delay: 335.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3352) {\n          animation-delay: 335.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3353) {\n          animation-delay: 335.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3354) {\n          animation-delay: 335.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3355) {\n          animation-delay: 335.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3356) {\n          animation-delay: 335.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3357) {\n          animation-delay: 335.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3358) {\n          animation-delay: 335.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3359) {\n          animation-delay: 335.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3360) {\n          animation-delay: 336s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3361) {\n          animation-delay: 336.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3362) {\n          animation-delay: 336.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3363) {\n          animation-delay: 336.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3364) {\n          animation-delay: 336.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3365) {\n          animation-delay: 336.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3366) {\n          animation-delay: 336.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3367) {\n          animation-delay: 336.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3368) {\n          animation-delay: 336.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3369) {\n          animation-delay: 336.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3370) {\n          animation-delay: 337s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3371) {\n          animation-delay: 337.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3372) {\n          animation-delay: 337.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3373) {\n          animation-delay: 337.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3374) {\n          animation-delay: 337.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3375) {\n          animation-delay: 337.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3376) {\n          animation-delay: 337.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3377) {\n          animation-delay: 337.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3378) {\n          animation-delay: 337.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3379) {\n          animation-delay: 337.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3380) {\n          animation-delay: 338s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3381) {\n          animation-delay: 338.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3382) {\n          animation-delay: 338.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3383) {\n          animation-delay: 338.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3384) {\n          animation-delay: 338.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3385) {\n          animation-delay: 338.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3386) {\n          animation-delay: 338.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3387) {\n          animation-delay: 338.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3388) {\n          animation-delay: 338.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3389) {\n          animation-delay: 338.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3390) {\n          animation-delay: 339s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3391) {\n          animation-delay: 339.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3392) {\n          animation-delay: 339.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3393) {\n          animation-delay: 339.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3394) {\n          animation-delay: 339.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3395) {\n          animation-delay: 339.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3396) {\n          animation-delay: 339.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3397) {\n          animation-delay: 339.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3398) {\n          animation-delay: 339.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3399) {\n          animation-delay: 339.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3400) {\n          animation-delay: 340s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3401) {\n          animation-delay: 340.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3402) {\n          animation-delay: 340.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3403) {\n          animation-delay: 340.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3404) {\n          animation-delay: 340.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3405) {\n          animation-delay: 340.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3406) {\n          animation-delay: 340.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3407) {\n          animation-delay: 340.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3408) {\n          animation-delay: 340.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3409) {\n          animation-delay: 340.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3410) {\n          animation-delay: 341s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3411) {\n          animation-delay: 341.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3412) {\n          animation-delay: 341.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3413) {\n          animation-delay: 341.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3414) {\n          animation-delay: 341.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3415) {\n          animation-delay: 341.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3416) {\n          animation-delay: 341.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3417) {\n          animation-delay: 341.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3418) {\n          animation-delay: 341.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3419) {\n          animation-delay: 341.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3420) {\n          animation-delay: 342s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3421) {\n          animation-delay: 342.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3422) {\n          animation-delay: 342.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3423) {\n          animation-delay: 342.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3424) {\n          animation-delay: 342.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3425) {\n          animation-delay: 342.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3426) {\n          animation-delay: 342.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3427) {\n          animation-delay: 342.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3428) {\n          animation-delay: 342.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3429) {\n          animation-delay: 342.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3430) {\n          animation-delay: 343s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3431) {\n          animation-delay: 343.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3432) {\n          animation-delay: 343.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3433) {\n          animation-delay: 343.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3434) {\n          animation-delay: 343.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3435) {\n          animation-delay: 343.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3436) {\n          animation-delay: 343.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3437) {\n          animation-delay: 343.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3438) {\n          animation-delay: 343.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3439) {\n          animation-delay: 343.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3440) {\n          animation-delay: 344s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3441) {\n          animation-delay: 344.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3442) {\n          animation-delay: 344.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3443) {\n          animation-delay: 344.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3444) {\n          animation-delay: 344.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3445) {\n          animation-delay: 344.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3446) {\n          animation-delay: 344.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3447) {\n          animation-delay: 344.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3448) {\n          animation-delay: 344.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3449) {\n          animation-delay: 344.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3450) {\n          animation-delay: 345s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3451) {\n          animation-delay: 345.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3452) {\n          animation-delay: 345.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3453) {\n          animation-delay: 345.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3454) {\n          animation-delay: 345.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3455) {\n          animation-delay: 345.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3456) {\n          animation-delay: 345.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3457) {\n          animation-delay: 345.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3458) {\n          animation-delay: 345.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3459) {\n          animation-delay: 345.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3460) {\n          animation-delay: 346s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3461) {\n          animation-delay: 346.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3462) {\n          animation-delay: 346.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3463) {\n          animation-delay: 346.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3464) {\n          animation-delay: 346.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3465) {\n          animation-delay: 346.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3466) {\n          animation-delay: 346.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3467) {\n          animation-delay: 346.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3468) {\n          animation-delay: 346.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3469) {\n          animation-delay: 346.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3470) {\n          animation-delay: 347s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3471) {\n          animation-delay: 347.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3472) {\n          animation-delay: 347.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3473) {\n          animation-delay: 347.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3474) {\n          animation-delay: 347.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3475) {\n          animation-delay: 347.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3476) {\n          animation-delay: 347.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3477) {\n          animation-delay: 347.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3478) {\n          animation-delay: 347.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3479) {\n          animation-delay: 347.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3480) {\n          animation-delay: 348s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3481) {\n          animation-delay: 348.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3482) {\n          animation-delay: 348.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3483) {\n          animation-delay: 348.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3484) {\n          animation-delay: 348.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3485) {\n          animation-delay: 348.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3486) {\n          animation-delay: 348.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3487) {\n          animation-delay: 348.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3488) {\n          animation-delay: 348.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3489) {\n          animation-delay: 348.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3490) {\n          animation-delay: 349s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3491) {\n          animation-delay: 349.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3492) {\n          animation-delay: 349.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3493) {\n          animation-delay: 349.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3494) {\n          animation-delay: 349.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3495) {\n          animation-delay: 349.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3496) {\n          animation-delay: 349.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3497) {\n          animation-delay: 349.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3498) {\n          animation-delay: 349.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3499) {\n          animation-delay: 349.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3500) {\n          animation-delay: 350s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3501) {\n          animation-delay: 350.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3502) {\n          animation-delay: 350.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3503) {\n          animation-delay: 350.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3504) {\n          animation-delay: 350.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3505) {\n          animation-delay: 350.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3506) {\n          animation-delay: 350.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3507) {\n          animation-delay: 350.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3508) {\n          animation-delay: 350.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3509) {\n          animation-delay: 350.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3510) {\n          animation-delay: 351s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3511) {\n          animation-delay: 351.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3512) {\n          animation-delay: 351.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3513) {\n          animation-delay: 351.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3514) {\n          animation-delay: 351.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3515) {\n          animation-delay: 351.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3516) {\n          animation-delay: 351.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3517) {\n          animation-delay: 351.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3518) {\n          animation-delay: 351.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3519) {\n          animation-delay: 351.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3520) {\n          animation-delay: 352s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3521) {\n          animation-delay: 352.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3522) {\n          animation-delay: 352.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3523) {\n          animation-delay: 352.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3524) {\n          animation-delay: 352.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3525) {\n          animation-delay: 352.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3526) {\n          animation-delay: 352.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3527) {\n          animation-delay: 352.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3528) {\n          animation-delay: 352.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3529) {\n          animation-delay: 352.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3530) {\n          animation-delay: 353s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3531) {\n          animation-delay: 353.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3532) {\n          animation-delay: 353.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3533) {\n          animation-delay: 353.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3534) {\n          animation-delay: 353.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3535) {\n          animation-delay: 353.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3536) {\n          animation-delay: 353.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3537) {\n          animation-delay: 353.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3538) {\n          animation-delay: 353.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3539) {\n          animation-delay: 353.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3540) {\n          animation-delay: 354s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3541) {\n          animation-delay: 354.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3542) {\n          animation-delay: 354.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3543) {\n          animation-delay: 354.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3544) {\n          animation-delay: 354.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3545) {\n          animation-delay: 354.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3546) {\n          animation-delay: 354.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3547) {\n          animation-delay: 354.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3548) {\n          animation-delay: 354.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3549) {\n          animation-delay: 354.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3550) {\n          animation-delay: 355s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3551) {\n          animation-delay: 355.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3552) {\n          animation-delay: 355.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3553) {\n          animation-delay: 355.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3554) {\n          animation-delay: 355.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3555) {\n          animation-delay: 355.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3556) {\n          animation-delay: 355.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3557) {\n          animation-delay: 355.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3558) {\n          animation-delay: 355.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3559) {\n          animation-delay: 355.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3560) {\n          animation-delay: 356s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3561) {\n          animation-delay: 356.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3562) {\n          animation-delay: 356.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3563) {\n          animation-delay: 356.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3564) {\n          animation-delay: 356.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3565) {\n          animation-delay: 356.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3566) {\n          animation-delay: 356.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3567) {\n          animation-delay: 356.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3568) {\n          animation-delay: 356.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3569) {\n          animation-delay: 356.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3570) {\n          animation-delay: 357s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3571) {\n          animation-delay: 357.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3572) {\n          animation-delay: 357.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3573) {\n          animation-delay: 357.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3574) {\n          animation-delay: 357.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3575) {\n          animation-delay: 357.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3576) {\n          animation-delay: 357.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3577) {\n          animation-delay: 357.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3578) {\n          animation-delay: 357.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3579) {\n          animation-delay: 357.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3580) {\n          animation-delay: 358s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3581) {\n          animation-delay: 358.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3582) {\n          animation-delay: 358.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3583) {\n          animation-delay: 358.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3584) {\n          animation-delay: 358.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3585) {\n          animation-delay: 358.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3586) {\n          animation-delay: 358.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3587) {\n          animation-delay: 358.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3588) {\n          animation-delay: 358.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3589) {\n          animation-delay: 358.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3590) {\n          animation-delay: 359s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3591) {\n          animation-delay: 359.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3592) {\n          animation-delay: 359.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3593) {\n          animation-delay: 359.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3594) {\n          animation-delay: 359.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3595) {\n          animation-delay: 359.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3596) {\n          animation-delay: 359.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3597) {\n          animation-delay: 359.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3598) {\n          animation-delay: 359.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3599) {\n          animation-delay: 359.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3600) {\n          animation-delay: 360s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3601) {\n          animation-delay: 360.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3602) {\n          animation-delay: 360.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3603) {\n          animation-delay: 360.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3604) {\n          animation-delay: 360.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3605) {\n          animation-delay: 360.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3606) {\n          animation-delay: 360.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3607) {\n          animation-delay: 360.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3608) {\n          animation-delay: 360.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3609) {\n          animation-delay: 360.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3610) {\n          animation-delay: 361s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3611) {\n          animation-delay: 361.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3612) {\n          animation-delay: 361.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3613) {\n          animation-delay: 361.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3614) {\n          animation-delay: 361.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3615) {\n          animation-delay: 361.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3616) {\n          animation-delay: 361.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3617) {\n          animation-delay: 361.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3618) {\n          animation-delay: 361.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3619) {\n          animation-delay: 361.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3620) {\n          animation-delay: 362s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3621) {\n          animation-delay: 362.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3622) {\n          animation-delay: 362.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3623) {\n          animation-delay: 362.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3624) {\n          animation-delay: 362.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3625) {\n          animation-delay: 362.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3626) {\n          animation-delay: 362.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3627) {\n          animation-delay: 362.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3628) {\n          animation-delay: 362.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3629) {\n          animation-delay: 362.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3630) {\n          animation-delay: 363s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3631) {\n          animation-delay: 363.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3632) {\n          animation-delay: 363.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3633) {\n          animation-delay: 363.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3634) {\n          animation-delay: 363.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3635) {\n          animation-delay: 363.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3636) {\n          animation-delay: 363.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3637) {\n          animation-delay: 363.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3638) {\n          animation-delay: 363.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3639) {\n          animation-delay: 363.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3640) {\n          animation-delay: 364s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3641) {\n          animation-delay: 364.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3642) {\n          animation-delay: 364.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3643) {\n          animation-delay: 364.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3644) {\n          animation-delay: 364.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3645) {\n          animation-delay: 364.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3646) {\n          animation-delay: 364.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3647) {\n          animation-delay: 364.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3648) {\n          animation-delay: 364.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3649) {\n          animation-delay: 364.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3650) {\n          animation-delay: 365s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3651) {\n          animation-delay: 365.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3652) {\n          animation-delay: 365.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3653) {\n          animation-delay: 365.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3654) {\n          animation-delay: 365.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3655) {\n          animation-delay: 365.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3656) {\n          animation-delay: 365.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3657) {\n          animation-delay: 365.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3658) {\n          animation-delay: 365.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3659) {\n          animation-delay: 365.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3660) {\n          animation-delay: 366s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3661) {\n          animation-delay: 366.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3662) {\n          animation-delay: 366.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3663) {\n          animation-delay: 366.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3664) {\n          animation-delay: 366.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3665) {\n          animation-delay: 366.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3666) {\n          animation-delay: 366.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3667) {\n          animation-delay: 366.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3668) {\n          animation-delay: 366.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3669) {\n          animation-delay: 366.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3670) {\n          animation-delay: 367s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3671) {\n          animation-delay: 367.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3672) {\n          animation-delay: 367.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3673) {\n          animation-delay: 367.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3674) {\n          animation-delay: 367.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3675) {\n          animation-delay: 367.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3676) {\n          animation-delay: 367.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3677) {\n          animation-delay: 367.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3678) {\n          animation-delay: 367.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3679) {\n          animation-delay: 367.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3680) {\n          animation-delay: 368s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3681) {\n          animation-delay: 368.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3682) {\n          animation-delay: 368.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3683) {\n          animation-delay: 368.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3684) {\n          animation-delay: 368.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3685) {\n          animation-delay: 368.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3686) {\n          animation-delay: 368.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3687) {\n          animation-delay: 368.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3688) {\n          animation-delay: 368.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3689) {\n          animation-delay: 368.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3690) {\n          animation-delay: 369s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3691) {\n          animation-delay: 369.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3692) {\n          animation-delay: 369.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3693) {\n          animation-delay: 369.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3694) {\n          animation-delay: 369.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3695) {\n          animation-delay: 369.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3696) {\n          animation-delay: 369.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3697) {\n          animation-delay: 369.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3698) {\n          animation-delay: 369.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3699) {\n          animation-delay: 369.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3700) {\n          animation-delay: 370s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3701) {\n          animation-delay: 370.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3702) {\n          animation-delay: 370.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3703) {\n          animation-delay: 370.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3704) {\n          animation-delay: 370.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3705) {\n          animation-delay: 370.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3706) {\n          animation-delay: 370.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3707) {\n          animation-delay: 370.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3708) {\n          animation-delay: 370.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3709) {\n          animation-delay: 370.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3710) {\n          animation-delay: 371s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3711) {\n          animation-delay: 371.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3712) {\n          animation-delay: 371.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3713) {\n          animation-delay: 371.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3714) {\n          animation-delay: 371.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3715) {\n          animation-delay: 371.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3716) {\n          animation-delay: 371.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3717) {\n          animation-delay: 371.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3718) {\n          animation-delay: 371.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3719) {\n          animation-delay: 371.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3720) {\n          animation-delay: 372s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3721) {\n          animation-delay: 372.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3722) {\n          animation-delay: 372.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3723) {\n          animation-delay: 372.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3724) {\n          animation-delay: 372.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3725) {\n          animation-delay: 372.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3726) {\n          animation-delay: 372.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3727) {\n          animation-delay: 372.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3728) {\n          animation-delay: 372.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3729) {\n          animation-delay: 372.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3730) {\n          animation-delay: 373s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3731) {\n          animation-delay: 373.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3732) {\n          animation-delay: 373.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3733) {\n          animation-delay: 373.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3734) {\n          animation-delay: 373.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3735) {\n          animation-delay: 373.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3736) {\n          animation-delay: 373.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3737) {\n          animation-delay: 373.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3738) {\n          animation-delay: 373.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3739) {\n          animation-delay: 373.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3740) {\n          animation-delay: 374s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3741) {\n          animation-delay: 374.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3742) {\n          animation-delay: 374.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3743) {\n          animation-delay: 374.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3744) {\n          animation-delay: 374.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3745) {\n          animation-delay: 374.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3746) {\n          animation-delay: 374.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3747) {\n          animation-delay: 374.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3748) {\n          animation-delay: 374.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3749) {\n          animation-delay: 374.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3750) {\n          animation-delay: 375s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3751) {\n          animation-delay: 375.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3752) {\n          animation-delay: 375.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3753) {\n          animation-delay: 375.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3754) {\n          animation-delay: 375.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3755) {\n          animation-delay: 375.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3756) {\n          animation-delay: 375.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3757) {\n          animation-delay: 375.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3758) {\n          animation-delay: 375.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3759) {\n          animation-delay: 375.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3760) {\n          animation-delay: 376s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3761) {\n          animation-delay: 376.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3762) {\n          animation-delay: 376.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3763) {\n          animation-delay: 376.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3764) {\n          animation-delay: 376.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3765) {\n          animation-delay: 376.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3766) {\n          animation-delay: 376.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3767) {\n          animation-delay: 376.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3768) {\n          animation-delay: 376.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3769) {\n          animation-delay: 376.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3770) {\n          animation-delay: 377s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3771) {\n          animation-delay: 377.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3772) {\n          animation-delay: 377.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3773) {\n          animation-delay: 377.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3774) {\n          animation-delay: 377.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3775) {\n          animation-delay: 377.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3776) {\n          animation-delay: 377.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3777) {\n          animation-delay: 377.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3778) {\n          animation-delay: 377.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3779) {\n          animation-delay: 377.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3780) {\n          animation-delay: 378s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3781) {\n          animation-delay: 378.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3782) {\n          animation-delay: 378.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3783) {\n          animation-delay: 378.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3784) {\n          animation-delay: 378.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3785) {\n          animation-delay: 378.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3786) {\n          animation-delay: 378.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3787) {\n          animation-delay: 378.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3788) {\n          animation-delay: 378.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3789) {\n          animation-delay: 378.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3790) {\n          animation-delay: 379s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3791) {\n          animation-delay: 379.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3792) {\n          animation-delay: 379.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3793) {\n          animation-delay: 379.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3794) {\n          animation-delay: 379.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3795) {\n          animation-delay: 379.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3796) {\n          animation-delay: 379.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3797) {\n          animation-delay: 379.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3798) {\n          animation-delay: 379.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3799) {\n          animation-delay: 379.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3800) {\n          animation-delay: 380s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3801) {\n          animation-delay: 380.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3802) {\n          animation-delay: 380.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3803) {\n          animation-delay: 380.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3804) {\n          animation-delay: 380.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3805) {\n          animation-delay: 380.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3806) {\n          animation-delay: 380.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3807) {\n          animation-delay: 380.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3808) {\n          animation-delay: 380.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3809) {\n          animation-delay: 380.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3810) {\n          animation-delay: 381s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3811) {\n          animation-delay: 381.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3812) {\n          animation-delay: 381.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3813) {\n          animation-delay: 381.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3814) {\n          animation-delay: 381.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3815) {\n          animation-delay: 381.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3816) {\n          animation-delay: 381.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3817) {\n          animation-delay: 381.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3818) {\n          animation-delay: 381.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3819) {\n          animation-delay: 381.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3820) {\n          animation-delay: 382s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3821) {\n          animation-delay: 382.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3822) {\n          animation-delay: 382.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3823) {\n          animation-delay: 382.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3824) {\n          animation-delay: 382.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3825) {\n          animation-delay: 382.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3826) {\n          animation-delay: 382.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3827) {\n          animation-delay: 382.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3828) {\n          animation-delay: 382.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3829) {\n          animation-delay: 382.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3830) {\n          animation-delay: 383s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3831) {\n          animation-delay: 383.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3832) {\n          animation-delay: 383.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3833) {\n          animation-delay: 383.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3834) {\n          animation-delay: 383.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3835) {\n          animation-delay: 383.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3836) {\n          animation-delay: 383.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3837) {\n          animation-delay: 383.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3838) {\n          animation-delay: 383.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3839) {\n          animation-delay: 383.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3840) {\n          animation-delay: 384s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3841) {\n          animation-delay: 384.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3842) {\n          animation-delay: 384.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3843) {\n          animation-delay: 384.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3844) {\n          animation-delay: 384.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3845) {\n          animation-delay: 384.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3846) {\n          animation-delay: 384.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3847) {\n          animation-delay: 384.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3848) {\n          animation-delay: 384.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3849) {\n          animation-delay: 384.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3850) {\n          animation-delay: 385s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3851) {\n          animation-delay: 385.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3852) {\n          animation-delay: 385.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3853) {\n          animation-delay: 385.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3854) {\n          animation-delay: 385.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3855) {\n          animation-delay: 385.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3856) {\n          animation-delay: 385.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3857) {\n          animation-delay: 385.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3858) {\n          animation-delay: 385.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3859) {\n          animation-delay: 385.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3860) {\n          animation-delay: 386s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3861) {\n          animation-delay: 386.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3862) {\n          animation-delay: 386.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3863) {\n          animation-delay: 386.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3864) {\n          animation-delay: 386.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3865) {\n          animation-delay: 386.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3866) {\n          animation-delay: 386.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3867) {\n          animation-delay: 386.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3868) {\n          animation-delay: 386.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3869) {\n          animation-delay: 386.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3870) {\n          animation-delay: 387s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3871) {\n          animation-delay: 387.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3872) {\n          animation-delay: 387.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3873) {\n          animation-delay: 387.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3874) {\n          animation-delay: 387.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3875) {\n          animation-delay: 387.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3876) {\n          animation-delay: 387.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3877) {\n          animation-delay: 387.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3878) {\n          animation-delay: 387.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3879) {\n          animation-delay: 387.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3880) {\n          animation-delay: 388s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3881) {\n          animation-delay: 388.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3882) {\n          animation-delay: 388.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3883) {\n          animation-delay: 388.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3884) {\n          animation-delay: 388.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3885) {\n          animation-delay: 388.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3886) {\n          animation-delay: 388.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3887) {\n          animation-delay: 388.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3888) {\n          animation-delay: 388.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3889) {\n          animation-delay: 388.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3890) {\n          animation-delay: 389s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3891) {\n          animation-delay: 389.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3892) {\n          animation-delay: 389.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3893) {\n          animation-delay: 389.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3894) {\n          animation-delay: 389.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3895) {\n          animation-delay: 389.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3896) {\n          animation-delay: 389.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3897) {\n          animation-delay: 389.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3898) {\n          animation-delay: 389.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3899) {\n          animation-delay: 389.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3900) {\n          animation-delay: 390s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3901) {\n          animation-delay: 390.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3902) {\n          animation-delay: 390.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3903) {\n          animation-delay: 390.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3904) {\n          animation-delay: 390.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3905) {\n          animation-delay: 390.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3906) {\n          animation-delay: 390.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3907) {\n          animation-delay: 390.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3908) {\n          animation-delay: 390.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3909) {\n          animation-delay: 390.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3910) {\n          animation-delay: 391s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3911) {\n          animation-delay: 391.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3912) {\n          animation-delay: 391.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3913) {\n          animation-delay: 391.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3914) {\n          animation-delay: 391.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3915) {\n          animation-delay: 391.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3916) {\n          animation-delay: 391.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3917) {\n          animation-delay: 391.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3918) {\n          animation-delay: 391.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3919) {\n          animation-delay: 391.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3920) {\n          animation-delay: 392s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3921) {\n          animation-delay: 392.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3922) {\n          animation-delay: 392.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3923) {\n          animation-delay: 392.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3924) {\n          animation-delay: 392.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3925) {\n          animation-delay: 392.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3926) {\n          animation-delay: 392.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3927) {\n          animation-delay: 392.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3928) {\n          animation-delay: 392.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3929) {\n          animation-delay: 392.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3930) {\n          animation-delay: 393s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3931) {\n          animation-delay: 393.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3932) {\n          animation-delay: 393.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3933) {\n          animation-delay: 393.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3934) {\n          animation-delay: 393.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3935) {\n          animation-delay: 393.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3936) {\n          animation-delay: 393.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3937) {\n          animation-delay: 393.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3938) {\n          animation-delay: 393.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3939) {\n          animation-delay: 393.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3940) {\n          animation-delay: 394s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3941) {\n          animation-delay: 394.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3942) {\n          animation-delay: 394.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3943) {\n          animation-delay: 394.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3944) {\n          animation-delay: 394.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3945) {\n          animation-delay: 394.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3946) {\n          animation-delay: 394.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3947) {\n          animation-delay: 394.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3948) {\n          animation-delay: 394.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3949) {\n          animation-delay: 394.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3950) {\n          animation-delay: 395s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3951) {\n          animation-delay: 395.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3952) {\n          animation-delay: 395.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3953) {\n          animation-delay: 395.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3954) {\n          animation-delay: 395.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3955) {\n          animation-delay: 395.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3956) {\n          animation-delay: 395.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3957) {\n          animation-delay: 395.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3958) {\n          animation-delay: 395.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3959) {\n          animation-delay: 395.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3960) {\n          animation-delay: 396s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3961) {\n          animation-delay: 396.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3962) {\n          animation-delay: 396.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3963) {\n          animation-delay: 396.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3964) {\n          animation-delay: 396.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3965) {\n          animation-delay: 396.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3966) {\n          animation-delay: 396.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3967) {\n          animation-delay: 396.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3968) {\n          animation-delay: 396.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3969) {\n          animation-delay: 396.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3970) {\n          animation-delay: 397s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3971) {\n          animation-delay: 397.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3972) {\n          animation-delay: 397.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3973) {\n          animation-delay: 397.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3974) {\n          animation-delay: 397.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3975) {\n          animation-delay: 397.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3976) {\n          animation-delay: 397.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3977) {\n          animation-delay: 397.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3978) {\n          animation-delay: 397.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3979) {\n          animation-delay: 397.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3980) {\n          animation-delay: 398s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3981) {\n          animation-delay: 398.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3982) {\n          animation-delay: 398.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3983) {\n          animation-delay: 398.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3984) {\n          animation-delay: 398.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3985) {\n          animation-delay: 398.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3986) {\n          animation-delay: 398.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3987) {\n          animation-delay: 398.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3988) {\n          animation-delay: 398.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3989) {\n          animation-delay: 398.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3990) {\n          animation-delay: 399s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3991) {\n          animation-delay: 399.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3992) {\n          animation-delay: 399.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3993) {\n          animation-delay: 399.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3994) {\n          animation-delay: 399.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3995) {\n          animation-delay: 399.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3996) {\n          animation-delay: 399.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3997) {\n          animation-delay: 399.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3998) {\n          animation-delay: 399.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(3999) {\n          animation-delay: 399.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4000) {\n          animation-delay: 400s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4001) {\n          animation-delay: 400.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4002) {\n          animation-delay: 400.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4003) {\n          animation-delay: 400.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4004) {\n          animation-delay: 400.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4005) {\n          animation-delay: 400.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4006) {\n          animation-delay: 400.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4007) {\n          animation-delay: 400.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4008) {\n          animation-delay: 400.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4009) {\n          animation-delay: 400.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4010) {\n          animation-delay: 401s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4011) {\n          animation-delay: 401.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4012) {\n          animation-delay: 401.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4013) {\n          animation-delay: 401.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4014) {\n          animation-delay: 401.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4015) {\n          animation-delay: 401.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4016) {\n          animation-delay: 401.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4017) {\n          animation-delay: 401.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4018) {\n          animation-delay: 401.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4019) {\n          animation-delay: 401.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4020) {\n          animation-delay: 402s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4021) {\n          animation-delay: 402.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4022) {\n          animation-delay: 402.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4023) {\n          animation-delay: 402.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4024) {\n          animation-delay: 402.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4025) {\n          animation-delay: 402.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4026) {\n          animation-delay: 402.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4027) {\n          animation-delay: 402.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4028) {\n          animation-delay: 402.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4029) {\n          animation-delay: 402.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4030) {\n          animation-delay: 403s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4031) {\n          animation-delay: 403.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4032) {\n          animation-delay: 403.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4033) {\n          animation-delay: 403.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4034) {\n          animation-delay: 403.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4035) {\n          animation-delay: 403.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4036) {\n          animation-delay: 403.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4037) {\n          animation-delay: 403.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4038) {\n          animation-delay: 403.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4039) {\n          animation-delay: 403.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4040) {\n          animation-delay: 404s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4041) {\n          animation-delay: 404.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4042) {\n          animation-delay: 404.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4043) {\n          animation-delay: 404.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4044) {\n          animation-delay: 404.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4045) {\n          animation-delay: 404.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4046) {\n          animation-delay: 404.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4047) {\n          animation-delay: 404.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4048) {\n          animation-delay: 404.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4049) {\n          animation-delay: 404.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4050) {\n          animation-delay: 405s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4051) {\n          animation-delay: 405.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4052) {\n          animation-delay: 405.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4053) {\n          animation-delay: 405.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4054) {\n          animation-delay: 405.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4055) {\n          animation-delay: 405.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4056) {\n          animation-delay: 405.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4057) {\n          animation-delay: 405.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4058) {\n          animation-delay: 405.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4059) {\n          animation-delay: 405.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4060) {\n          animation-delay: 406s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4061) {\n          animation-delay: 406.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4062) {\n          animation-delay: 406.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4063) {\n          animation-delay: 406.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4064) {\n          animation-delay: 406.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4065) {\n          animation-delay: 406.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4066) {\n          animation-delay: 406.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4067) {\n          animation-delay: 406.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4068) {\n          animation-delay: 406.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4069) {\n          animation-delay: 406.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4070) {\n          animation-delay: 407s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4071) {\n          animation-delay: 407.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4072) {\n          animation-delay: 407.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4073) {\n          animation-delay: 407.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4074) {\n          animation-delay: 407.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4075) {\n          animation-delay: 407.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4076) {\n          animation-delay: 407.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4077) {\n          animation-delay: 407.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4078) {\n          animation-delay: 407.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4079) {\n          animation-delay: 407.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4080) {\n          animation-delay: 408s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4081) {\n          animation-delay: 408.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4082) {\n          animation-delay: 408.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4083) {\n          animation-delay: 408.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4084) {\n          animation-delay: 408.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4085) {\n          animation-delay: 408.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4086) {\n          animation-delay: 408.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4087) {\n          animation-delay: 408.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4088) {\n          animation-delay: 408.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4089) {\n          animation-delay: 408.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4090) {\n          animation-delay: 409s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4091) {\n          animation-delay: 409.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4092) {\n          animation-delay: 409.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4093) {\n          animation-delay: 409.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4094) {\n          animation-delay: 409.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4095) {\n          animation-delay: 409.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4096) {\n          animation-delay: 409.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4097) {\n          animation-delay: 409.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4098) {\n          animation-delay: 409.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4099) {\n          animation-delay: 409.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4100) {\n          animation-delay: 410s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4101) {\n          animation-delay: 410.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4102) {\n          animation-delay: 410.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4103) {\n          animation-delay: 410.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4104) {\n          animation-delay: 410.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4105) {\n          animation-delay: 410.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4106) {\n          animation-delay: 410.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4107) {\n          animation-delay: 410.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4108) {\n          animation-delay: 410.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4109) {\n          animation-delay: 410.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4110) {\n          animation-delay: 411s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4111) {\n          animation-delay: 411.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4112) {\n          animation-delay: 411.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4113) {\n          animation-delay: 411.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4114) {\n          animation-delay: 411.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4115) {\n          animation-delay: 411.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4116) {\n          animation-delay: 411.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4117) {\n          animation-delay: 411.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4118) {\n          animation-delay: 411.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4119) {\n          animation-delay: 411.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4120) {\n          animation-delay: 412s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4121) {\n          animation-delay: 412.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4122) {\n          animation-delay: 412.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4123) {\n          animation-delay: 412.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4124) {\n          animation-delay: 412.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4125) {\n          animation-delay: 412.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4126) {\n          animation-delay: 412.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4127) {\n          animation-delay: 412.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4128) {\n          animation-delay: 412.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4129) {\n          animation-delay: 412.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4130) {\n          animation-delay: 413s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4131) {\n          animation-delay: 413.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4132) {\n          animation-delay: 413.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4133) {\n          animation-delay: 413.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4134) {\n          animation-delay: 413.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4135) {\n          animation-delay: 413.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4136) {\n          animation-delay: 413.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4137) {\n          animation-delay: 413.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4138) {\n          animation-delay: 413.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4139) {\n          animation-delay: 413.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4140) {\n          animation-delay: 414s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4141) {\n          animation-delay: 414.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4142) {\n          animation-delay: 414.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4143) {\n          animation-delay: 414.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4144) {\n          animation-delay: 414.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4145) {\n          animation-delay: 414.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4146) {\n          animation-delay: 414.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4147) {\n          animation-delay: 414.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4148) {\n          animation-delay: 414.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4149) {\n          animation-delay: 414.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4150) {\n          animation-delay: 415s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4151) {\n          animation-delay: 415.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4152) {\n          animation-delay: 415.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4153) {\n          animation-delay: 415.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4154) {\n          animation-delay: 415.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4155) {\n          animation-delay: 415.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4156) {\n          animation-delay: 415.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4157) {\n          animation-delay: 415.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4158) {\n          animation-delay: 415.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4159) {\n          animation-delay: 415.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4160) {\n          animation-delay: 416s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4161) {\n          animation-delay: 416.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4162) {\n          animation-delay: 416.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4163) {\n          animation-delay: 416.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4164) {\n          animation-delay: 416.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4165) {\n          animation-delay: 416.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4166) {\n          animation-delay: 416.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4167) {\n          animation-delay: 416.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4168) {\n          animation-delay: 416.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4169) {\n          animation-delay: 416.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4170) {\n          animation-delay: 417s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4171) {\n          animation-delay: 417.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4172) {\n          animation-delay: 417.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4173) {\n          animation-delay: 417.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4174) {\n          animation-delay: 417.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4175) {\n          animation-delay: 417.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4176) {\n          animation-delay: 417.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4177) {\n          animation-delay: 417.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4178) {\n          animation-delay: 417.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4179) {\n          animation-delay: 417.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4180) {\n          animation-delay: 418s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4181) {\n          animation-delay: 418.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4182) {\n          animation-delay: 418.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4183) {\n          animation-delay: 418.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4184) {\n          animation-delay: 418.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4185) {\n          animation-delay: 418.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4186) {\n          animation-delay: 418.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4187) {\n          animation-delay: 418.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4188) {\n          animation-delay: 418.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4189) {\n          animation-delay: 418.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4190) {\n          animation-delay: 419s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4191) {\n          animation-delay: 419.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4192) {\n          animation-delay: 419.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4193) {\n          animation-delay: 419.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4194) {\n          animation-delay: 419.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4195) {\n          animation-delay: 419.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4196) {\n          animation-delay: 419.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4197) {\n          animation-delay: 419.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4198) {\n          animation-delay: 419.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4199) {\n          animation-delay: 419.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4200) {\n          animation-delay: 420s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4201) {\n          animation-delay: 420.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4202) {\n          animation-delay: 420.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4203) {\n          animation-delay: 420.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4204) {\n          animation-delay: 420.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4205) {\n          animation-delay: 420.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4206) {\n          animation-delay: 420.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4207) {\n          animation-delay: 420.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4208) {\n          animation-delay: 420.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4209) {\n          animation-delay: 420.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4210) {\n          animation-delay: 421s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4211) {\n          animation-delay: 421.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4212) {\n          animation-delay: 421.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4213) {\n          animation-delay: 421.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4214) {\n          animation-delay: 421.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4215) {\n          animation-delay: 421.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4216) {\n          animation-delay: 421.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4217) {\n          animation-delay: 421.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4218) {\n          animation-delay: 421.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4219) {\n          animation-delay: 421.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4220) {\n          animation-delay: 422s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4221) {\n          animation-delay: 422.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4222) {\n          animation-delay: 422.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4223) {\n          animation-delay: 422.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4224) {\n          animation-delay: 422.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4225) {\n          animation-delay: 422.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4226) {\n          animation-delay: 422.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4227) {\n          animation-delay: 422.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4228) {\n          animation-delay: 422.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4229) {\n          animation-delay: 422.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4230) {\n          animation-delay: 423s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4231) {\n          animation-delay: 423.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4232) {\n          animation-delay: 423.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4233) {\n          animation-delay: 423.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4234) {\n          animation-delay: 423.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4235) {\n          animation-delay: 423.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4236) {\n          animation-delay: 423.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4237) {\n          animation-delay: 423.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4238) {\n          animation-delay: 423.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4239) {\n          animation-delay: 423.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4240) {\n          animation-delay: 424s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4241) {\n          animation-delay: 424.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4242) {\n          animation-delay: 424.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4243) {\n          animation-delay: 424.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4244) {\n          animation-delay: 424.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4245) {\n          animation-delay: 424.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4246) {\n          animation-delay: 424.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4247) {\n          animation-delay: 424.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4248) {\n          animation-delay: 424.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4249) {\n          animation-delay: 424.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4250) {\n          animation-delay: 425s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4251) {\n          animation-delay: 425.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4252) {\n          animation-delay: 425.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4253) {\n          animation-delay: 425.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4254) {\n          animation-delay: 425.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4255) {\n          animation-delay: 425.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4256) {\n          animation-delay: 425.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4257) {\n          animation-delay: 425.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4258) {\n          animation-delay: 425.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4259) {\n          animation-delay: 425.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4260) {\n          animation-delay: 426s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4261) {\n          animation-delay: 426.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4262) {\n          animation-delay: 426.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4263) {\n          animation-delay: 426.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4264) {\n          animation-delay: 426.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4265) {\n          animation-delay: 426.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4266) {\n          animation-delay: 426.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4267) {\n          animation-delay: 426.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4268) {\n          animation-delay: 426.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4269) {\n          animation-delay: 426.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4270) {\n          animation-delay: 427s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4271) {\n          animation-delay: 427.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4272) {\n          animation-delay: 427.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4273) {\n          animation-delay: 427.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4274) {\n          animation-delay: 427.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4275) {\n          animation-delay: 427.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4276) {\n          animation-delay: 427.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4277) {\n          animation-delay: 427.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4278) {\n          animation-delay: 427.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4279) {\n          animation-delay: 427.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4280) {\n          animation-delay: 428s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4281) {\n          animation-delay: 428.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4282) {\n          animation-delay: 428.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4283) {\n          animation-delay: 428.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4284) {\n          animation-delay: 428.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4285) {\n          animation-delay: 428.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4286) {\n          animation-delay: 428.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4287) {\n          animation-delay: 428.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4288) {\n          animation-delay: 428.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4289) {\n          animation-delay: 428.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4290) {\n          animation-delay: 429s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4291) {\n          animation-delay: 429.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4292) {\n          animation-delay: 429.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4293) {\n          animation-delay: 429.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4294) {\n          animation-delay: 429.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4295) {\n          animation-delay: 429.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4296) {\n          animation-delay: 429.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4297) {\n          animation-delay: 429.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4298) {\n          animation-delay: 429.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4299) {\n          animation-delay: 429.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4300) {\n          animation-delay: 430s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4301) {\n          animation-delay: 430.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4302) {\n          animation-delay: 430.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4303) {\n          animation-delay: 430.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4304) {\n          animation-delay: 430.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4305) {\n          animation-delay: 430.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4306) {\n          animation-delay: 430.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4307) {\n          animation-delay: 430.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4308) {\n          animation-delay: 430.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4309) {\n          animation-delay: 430.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4310) {\n          animation-delay: 431s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4311) {\n          animation-delay: 431.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4312) {\n          animation-delay: 431.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4313) {\n          animation-delay: 431.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4314) {\n          animation-delay: 431.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4315) {\n          animation-delay: 431.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4316) {\n          animation-delay: 431.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4317) {\n          animation-delay: 431.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4318) {\n          animation-delay: 431.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4319) {\n          animation-delay: 431.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4320) {\n          animation-delay: 432s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4321) {\n          animation-delay: 432.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4322) {\n          animation-delay: 432.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4323) {\n          animation-delay: 432.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4324) {\n          animation-delay: 432.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4325) {\n          animation-delay: 432.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4326) {\n          animation-delay: 432.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4327) {\n          animation-delay: 432.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4328) {\n          animation-delay: 432.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4329) {\n          animation-delay: 432.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4330) {\n          animation-delay: 433s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4331) {\n          animation-delay: 433.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4332) {\n          animation-delay: 433.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4333) {\n          animation-delay: 433.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4334) {\n          animation-delay: 433.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4335) {\n          animation-delay: 433.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4336) {\n          animation-delay: 433.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4337) {\n          animation-delay: 433.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4338) {\n          animation-delay: 433.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4339) {\n          animation-delay: 433.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4340) {\n          animation-delay: 434s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4341) {\n          animation-delay: 434.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4342) {\n          animation-delay: 434.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4343) {\n          animation-delay: 434.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4344) {\n          animation-delay: 434.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4345) {\n          animation-delay: 434.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4346) {\n          animation-delay: 434.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4347) {\n          animation-delay: 434.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4348) {\n          animation-delay: 434.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4349) {\n          animation-delay: 434.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4350) {\n          animation-delay: 435s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4351) {\n          animation-delay: 435.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4352) {\n          animation-delay: 435.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4353) {\n          animation-delay: 435.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4354) {\n          animation-delay: 435.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4355) {\n          animation-delay: 435.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4356) {\n          animation-delay: 435.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4357) {\n          animation-delay: 435.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4358) {\n          animation-delay: 435.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4359) {\n          animation-delay: 435.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4360) {\n          animation-delay: 436s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4361) {\n          animation-delay: 436.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4362) {\n          animation-delay: 436.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4363) {\n          animation-delay: 436.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4364) {\n          animation-delay: 436.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4365) {\n          animation-delay: 436.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4366) {\n          animation-delay: 436.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4367) {\n          animation-delay: 436.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4368) {\n          animation-delay: 436.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4369) {\n          animation-delay: 436.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4370) {\n          animation-delay: 437s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4371) {\n          animation-delay: 437.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4372) {\n          animation-delay: 437.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4373) {\n          animation-delay: 437.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4374) {\n          animation-delay: 437.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4375) {\n          animation-delay: 437.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4376) {\n          animation-delay: 437.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4377) {\n          animation-delay: 437.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4378) {\n          animation-delay: 437.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4379) {\n          animation-delay: 437.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4380) {\n          animation-delay: 438s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4381) {\n          animation-delay: 438.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4382) {\n          animation-delay: 438.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4383) {\n          animation-delay: 438.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4384) {\n          animation-delay: 438.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4385) {\n          animation-delay: 438.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4386) {\n          animation-delay: 438.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4387) {\n          animation-delay: 438.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4388) {\n          animation-delay: 438.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4389) {\n          animation-delay: 438.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4390) {\n          animation-delay: 439s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4391) {\n          animation-delay: 439.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4392) {\n          animation-delay: 439.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4393) {\n          animation-delay: 439.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4394) {\n          animation-delay: 439.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4395) {\n          animation-delay: 439.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4396) {\n          animation-delay: 439.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4397) {\n          animation-delay: 439.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4398) {\n          animation-delay: 439.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4399) {\n          animation-delay: 439.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4400) {\n          animation-delay: 440s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4401) {\n          animation-delay: 440.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4402) {\n          animation-delay: 440.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4403) {\n          animation-delay: 440.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4404) {\n          animation-delay: 440.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4405) {\n          animation-delay: 440.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4406) {\n          animation-delay: 440.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4407) {\n          animation-delay: 440.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4408) {\n          animation-delay: 440.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4409) {\n          animation-delay: 440.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4410) {\n          animation-delay: 441s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4411) {\n          animation-delay: 441.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4412) {\n          animation-delay: 441.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4413) {\n          animation-delay: 441.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4414) {\n          animation-delay: 441.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4415) {\n          animation-delay: 441.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4416) {\n          animation-delay: 441.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4417) {\n          animation-delay: 441.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4418) {\n          animation-delay: 441.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4419) {\n          animation-delay: 441.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4420) {\n          animation-delay: 442s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4421) {\n          animation-delay: 442.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4422) {\n          animation-delay: 442.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4423) {\n          animation-delay: 442.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4424) {\n          animation-delay: 442.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4425) {\n          animation-delay: 442.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4426) {\n          animation-delay: 442.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4427) {\n          animation-delay: 442.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4428) {\n          animation-delay: 442.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4429) {\n          animation-delay: 442.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4430) {\n          animation-delay: 443s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4431) {\n          animation-delay: 443.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4432) {\n          animation-delay: 443.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4433) {\n          animation-delay: 443.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4434) {\n          animation-delay: 443.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4435) {\n          animation-delay: 443.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4436) {\n          animation-delay: 443.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4437) {\n          animation-delay: 443.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4438) {\n          animation-delay: 443.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4439) {\n          animation-delay: 443.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4440) {\n          animation-delay: 444s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4441) {\n          animation-delay: 444.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4442) {\n          animation-delay: 444.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4443) {\n          animation-delay: 444.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4444) {\n          animation-delay: 444.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4445) {\n          animation-delay: 444.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4446) {\n          animation-delay: 444.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4447) {\n          animation-delay: 444.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4448) {\n          animation-delay: 444.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4449) {\n          animation-delay: 444.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4450) {\n          animation-delay: 445s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4451) {\n          animation-delay: 445.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4452) {\n          animation-delay: 445.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4453) {\n          animation-delay: 445.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4454) {\n          animation-delay: 445.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4455) {\n          animation-delay: 445.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4456) {\n          animation-delay: 445.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4457) {\n          animation-delay: 445.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4458) {\n          animation-delay: 445.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4459) {\n          animation-delay: 445.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4460) {\n          animation-delay: 446s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4461) {\n          animation-delay: 446.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4462) {\n          animation-delay: 446.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4463) {\n          animation-delay: 446.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4464) {\n          animation-delay: 446.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4465) {\n          animation-delay: 446.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4466) {\n          animation-delay: 446.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4467) {\n          animation-delay: 446.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4468) {\n          animation-delay: 446.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4469) {\n          animation-delay: 446.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4470) {\n          animation-delay: 447s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4471) {\n          animation-delay: 447.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4472) {\n          animation-delay: 447.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4473) {\n          animation-delay: 447.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4474) {\n          animation-delay: 447.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4475) {\n          animation-delay: 447.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4476) {\n          animation-delay: 447.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4477) {\n          animation-delay: 447.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4478) {\n          animation-delay: 447.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4479) {\n          animation-delay: 447.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4480) {\n          animation-delay: 448s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4481) {\n          animation-delay: 448.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4482) {\n          animation-delay: 448.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4483) {\n          animation-delay: 448.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4484) {\n          animation-delay: 448.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4485) {\n          animation-delay: 448.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4486) {\n          animation-delay: 448.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4487) {\n          animation-delay: 448.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4488) {\n          animation-delay: 448.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4489) {\n          animation-delay: 448.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4490) {\n          animation-delay: 449s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4491) {\n          animation-delay: 449.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4492) {\n          animation-delay: 449.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4493) {\n          animation-delay: 449.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4494) {\n          animation-delay: 449.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4495) {\n          animation-delay: 449.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4496) {\n          animation-delay: 449.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4497) {\n          animation-delay: 449.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4498) {\n          animation-delay: 449.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4499) {\n          animation-delay: 449.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4500) {\n          animation-delay: 450s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4501) {\n          animation-delay: 450.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4502) {\n          animation-delay: 450.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4503) {\n          animation-delay: 450.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4504) {\n          animation-delay: 450.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4505) {\n          animation-delay: 450.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4506) {\n          animation-delay: 450.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4507) {\n          animation-delay: 450.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4508) {\n          animation-delay: 450.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4509) {\n          animation-delay: 450.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4510) {\n          animation-delay: 451s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4511) {\n          animation-delay: 451.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4512) {\n          animation-delay: 451.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4513) {\n          animation-delay: 451.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4514) {\n          animation-delay: 451.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4515) {\n          animation-delay: 451.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4516) {\n          animation-delay: 451.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4517) {\n          animation-delay: 451.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4518) {\n          animation-delay: 451.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4519) {\n          animation-delay: 451.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4520) {\n          animation-delay: 452s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4521) {\n          animation-delay: 452.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4522) {\n          animation-delay: 452.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4523) {\n          animation-delay: 452.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4524) {\n          animation-delay: 452.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4525) {\n          animation-delay: 452.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4526) {\n          animation-delay: 452.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4527) {\n          animation-delay: 452.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4528) {\n          animation-delay: 452.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4529) {\n          animation-delay: 452.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4530) {\n          animation-delay: 453s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4531) {\n          animation-delay: 453.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4532) {\n          animation-delay: 453.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4533) {\n          animation-delay: 453.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4534) {\n          animation-delay: 453.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4535) {\n          animation-delay: 453.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4536) {\n          animation-delay: 453.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4537) {\n          animation-delay: 453.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4538) {\n          animation-delay: 453.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4539) {\n          animation-delay: 453.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4540) {\n          animation-delay: 454s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4541) {\n          animation-delay: 454.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4542) {\n          animation-delay: 454.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4543) {\n          animation-delay: 454.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4544) {\n          animation-delay: 454.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4545) {\n          animation-delay: 454.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4546) {\n          animation-delay: 454.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4547) {\n          animation-delay: 454.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4548) {\n          animation-delay: 454.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4549) {\n          animation-delay: 454.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4550) {\n          animation-delay: 455s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4551) {\n          animation-delay: 455.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4552) {\n          animation-delay: 455.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4553) {\n          animation-delay: 455.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4554) {\n          animation-delay: 455.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4555) {\n          animation-delay: 455.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4556) {\n          animation-delay: 455.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4557) {\n          animation-delay: 455.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4558) {\n          animation-delay: 455.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4559) {\n          animation-delay: 455.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4560) {\n          animation-delay: 456s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4561) {\n          animation-delay: 456.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4562) {\n          animation-delay: 456.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4563) {\n          animation-delay: 456.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4564) {\n          animation-delay: 456.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4565) {\n          animation-delay: 456.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4566) {\n          animation-delay: 456.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4567) {\n          animation-delay: 456.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4568) {\n          animation-delay: 456.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4569) {\n          animation-delay: 456.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4570) {\n          animation-delay: 457s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4571) {\n          animation-delay: 457.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4572) {\n          animation-delay: 457.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4573) {\n          animation-delay: 457.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4574) {\n          animation-delay: 457.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4575) {\n          animation-delay: 457.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4576) {\n          animation-delay: 457.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4577) {\n          animation-delay: 457.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4578) {\n          animation-delay: 457.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4579) {\n          animation-delay: 457.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4580) {\n          animation-delay: 458s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4581) {\n          animation-delay: 458.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4582) {\n          animation-delay: 458.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4583) {\n          animation-delay: 458.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4584) {\n          animation-delay: 458.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4585) {\n          animation-delay: 458.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4586) {\n          animation-delay: 458.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4587) {\n          animation-delay: 458.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4588) {\n          animation-delay: 458.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4589) {\n          animation-delay: 458.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4590) {\n          animation-delay: 459s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4591) {\n          animation-delay: 459.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4592) {\n          animation-delay: 459.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4593) {\n          animation-delay: 459.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4594) {\n          animation-delay: 459.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4595) {\n          animation-delay: 459.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4596) {\n          animation-delay: 459.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4597) {\n          animation-delay: 459.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4598) {\n          animation-delay: 459.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4599) {\n          animation-delay: 459.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4600) {\n          animation-delay: 460s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4601) {\n          animation-delay: 460.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4602) {\n          animation-delay: 460.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4603) {\n          animation-delay: 460.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4604) {\n          animation-delay: 460.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4605) {\n          animation-delay: 460.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4606) {\n          animation-delay: 460.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4607) {\n          animation-delay: 460.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4608) {\n          animation-delay: 460.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4609) {\n          animation-delay: 460.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4610) {\n          animation-delay: 461s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4611) {\n          animation-delay: 461.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4612) {\n          animation-delay: 461.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4613) {\n          animation-delay: 461.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4614) {\n          animation-delay: 461.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4615) {\n          animation-delay: 461.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4616) {\n          animation-delay: 461.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4617) {\n          animation-delay: 461.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4618) {\n          animation-delay: 461.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4619) {\n          animation-delay: 461.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4620) {\n          animation-delay: 462s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4621) {\n          animation-delay: 462.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4622) {\n          animation-delay: 462.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4623) {\n          animation-delay: 462.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4624) {\n          animation-delay: 462.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4625) {\n          animation-delay: 462.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4626) {\n          animation-delay: 462.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4627) {\n          animation-delay: 462.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4628) {\n          animation-delay: 462.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4629) {\n          animation-delay: 462.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4630) {\n          animation-delay: 463s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4631) {\n          animation-delay: 463.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4632) {\n          animation-delay: 463.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4633) {\n          animation-delay: 463.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4634) {\n          animation-delay: 463.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4635) {\n          animation-delay: 463.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4636) {\n          animation-delay: 463.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4637) {\n          animation-delay: 463.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4638) {\n          animation-delay: 463.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4639) {\n          animation-delay: 463.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4640) {\n          animation-delay: 464s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4641) {\n          animation-delay: 464.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4642) {\n          animation-delay: 464.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4643) {\n          animation-delay: 464.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4644) {\n          animation-delay: 464.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4645) {\n          animation-delay: 464.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4646) {\n          animation-delay: 464.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4647) {\n          animation-delay: 464.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4648) {\n          animation-delay: 464.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4649) {\n          animation-delay: 464.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4650) {\n          animation-delay: 465s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4651) {\n          animation-delay: 465.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4652) {\n          animation-delay: 465.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4653) {\n          animation-delay: 465.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4654) {\n          animation-delay: 465.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4655) {\n          animation-delay: 465.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4656) {\n          animation-delay: 465.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4657) {\n          animation-delay: 465.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4658) {\n          animation-delay: 465.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4659) {\n          animation-delay: 465.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4660) {\n          animation-delay: 466s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4661) {\n          animation-delay: 466.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4662) {\n          animation-delay: 466.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4663) {\n          animation-delay: 466.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4664) {\n          animation-delay: 466.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4665) {\n          animation-delay: 466.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4666) {\n          animation-delay: 466.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4667) {\n          animation-delay: 466.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4668) {\n          animation-delay: 466.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4669) {\n          animation-delay: 466.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4670) {\n          animation-delay: 467s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4671) {\n          animation-delay: 467.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4672) {\n          animation-delay: 467.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4673) {\n          animation-delay: 467.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4674) {\n          animation-delay: 467.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4675) {\n          animation-delay: 467.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4676) {\n          animation-delay: 467.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4677) {\n          animation-delay: 467.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4678) {\n          animation-delay: 467.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4679) {\n          animation-delay: 467.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4680) {\n          animation-delay: 468s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4681) {\n          animation-delay: 468.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4682) {\n          animation-delay: 468.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4683) {\n          animation-delay: 468.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4684) {\n          animation-delay: 468.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4685) {\n          animation-delay: 468.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4686) {\n          animation-delay: 468.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4687) {\n          animation-delay: 468.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4688) {\n          animation-delay: 468.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4689) {\n          animation-delay: 468.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4690) {\n          animation-delay: 469s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4691) {\n          animation-delay: 469.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4692) {\n          animation-delay: 469.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4693) {\n          animation-delay: 469.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4694) {\n          animation-delay: 469.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4695) {\n          animation-delay: 469.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4696) {\n          animation-delay: 469.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4697) {\n          animation-delay: 469.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4698) {\n          animation-delay: 469.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4699) {\n          animation-delay: 469.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4700) {\n          animation-delay: 470s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4701) {\n          animation-delay: 470.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4702) {\n          animation-delay: 470.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4703) {\n          animation-delay: 470.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4704) {\n          animation-delay: 470.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4705) {\n          animation-delay: 470.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4706) {\n          animation-delay: 470.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4707) {\n          animation-delay: 470.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4708) {\n          animation-delay: 470.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4709) {\n          animation-delay: 470.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4710) {\n          animation-delay: 471s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4711) {\n          animation-delay: 471.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4712) {\n          animation-delay: 471.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4713) {\n          animation-delay: 471.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4714) {\n          animation-delay: 471.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4715) {\n          animation-delay: 471.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4716) {\n          animation-delay: 471.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4717) {\n          animation-delay: 471.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4718) {\n          animation-delay: 471.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4719) {\n          animation-delay: 471.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4720) {\n          animation-delay: 472s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4721) {\n          animation-delay: 472.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4722) {\n          animation-delay: 472.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4723) {\n          animation-delay: 472.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4724) {\n          animation-delay: 472.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4725) {\n          animation-delay: 472.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4726) {\n          animation-delay: 472.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4727) {\n          animation-delay: 472.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4728) {\n          animation-delay: 472.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4729) {\n          animation-delay: 472.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4730) {\n          animation-delay: 473s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4731) {\n          animation-delay: 473.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4732) {\n          animation-delay: 473.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4733) {\n          animation-delay: 473.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4734) {\n          animation-delay: 473.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4735) {\n          animation-delay: 473.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4736) {\n          animation-delay: 473.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4737) {\n          animation-delay: 473.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4738) {\n          animation-delay: 473.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4739) {\n          animation-delay: 473.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4740) {\n          animation-delay: 474s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4741) {\n          animation-delay: 474.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4742) {\n          animation-delay: 474.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4743) {\n          animation-delay: 474.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4744) {\n          animation-delay: 474.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4745) {\n          animation-delay: 474.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4746) {\n          animation-delay: 474.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4747) {\n          animation-delay: 474.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4748) {\n          animation-delay: 474.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4749) {\n          animation-delay: 474.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4750) {\n          animation-delay: 475s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4751) {\n          animation-delay: 475.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4752) {\n          animation-delay: 475.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4753) {\n          animation-delay: 475.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4754) {\n          animation-delay: 475.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4755) {\n          animation-delay: 475.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4756) {\n          animation-delay: 475.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4757) {\n          animation-delay: 475.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4758) {\n          animation-delay: 475.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4759) {\n          animation-delay: 475.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4760) {\n          animation-delay: 476s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4761) {\n          animation-delay: 476.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4762) {\n          animation-delay: 476.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4763) {\n          animation-delay: 476.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4764) {\n          animation-delay: 476.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4765) {\n          animation-delay: 476.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4766) {\n          animation-delay: 476.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4767) {\n          animation-delay: 476.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4768) {\n          animation-delay: 476.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4769) {\n          animation-delay: 476.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4770) {\n          animation-delay: 477s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4771) {\n          animation-delay: 477.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4772) {\n          animation-delay: 477.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4773) {\n          animation-delay: 477.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4774) {\n          animation-delay: 477.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4775) {\n          animation-delay: 477.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4776) {\n          animation-delay: 477.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4777) {\n          animation-delay: 477.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4778) {\n          animation-delay: 477.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4779) {\n          animation-delay: 477.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4780) {\n          animation-delay: 478s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4781) {\n          animation-delay: 478.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4782) {\n          animation-delay: 478.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4783) {\n          animation-delay: 478.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4784) {\n          animation-delay: 478.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4785) {\n          animation-delay: 478.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4786) {\n          animation-delay: 478.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4787) {\n          animation-delay: 478.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4788) {\n          animation-delay: 478.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4789) {\n          animation-delay: 478.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4790) {\n          animation-delay: 479s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4791) {\n          animation-delay: 479.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4792) {\n          animation-delay: 479.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4793) {\n          animation-delay: 479.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4794) {\n          animation-delay: 479.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4795) {\n          animation-delay: 479.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4796) {\n          animation-delay: 479.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4797) {\n          animation-delay: 479.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4798) {\n          animation-delay: 479.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4799) {\n          animation-delay: 479.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4800) {\n          animation-delay: 480s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4801) {\n          animation-delay: 480.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4802) {\n          animation-delay: 480.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4803) {\n          animation-delay: 480.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4804) {\n          animation-delay: 480.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4805) {\n          animation-delay: 480.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4806) {\n          animation-delay: 480.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4807) {\n          animation-delay: 480.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4808) {\n          animation-delay: 480.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4809) {\n          animation-delay: 480.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4810) {\n          animation-delay: 481s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4811) {\n          animation-delay: 481.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4812) {\n          animation-delay: 481.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4813) {\n          animation-delay: 481.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4814) {\n          animation-delay: 481.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4815) {\n          animation-delay: 481.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4816) {\n          animation-delay: 481.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4817) {\n          animation-delay: 481.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4818) {\n          animation-delay: 481.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4819) {\n          animation-delay: 481.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4820) {\n          animation-delay: 482s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4821) {\n          animation-delay: 482.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4822) {\n          animation-delay: 482.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4823) {\n          animation-delay: 482.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4824) {\n          animation-delay: 482.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4825) {\n          animation-delay: 482.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4826) {\n          animation-delay: 482.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4827) {\n          animation-delay: 482.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4828) {\n          animation-delay: 482.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4829) {\n          animation-delay: 482.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4830) {\n          animation-delay: 483s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4831) {\n          animation-delay: 483.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4832) {\n          animation-delay: 483.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4833) {\n          animation-delay: 483.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4834) {\n          animation-delay: 483.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4835) {\n          animation-delay: 483.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4836) {\n          animation-delay: 483.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4837) {\n          animation-delay: 483.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4838) {\n          animation-delay: 483.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4839) {\n          animation-delay: 483.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4840) {\n          animation-delay: 484s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4841) {\n          animation-delay: 484.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4842) {\n          animation-delay: 484.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4843) {\n          animation-delay: 484.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4844) {\n          animation-delay: 484.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4845) {\n          animation-delay: 484.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4846) {\n          animation-delay: 484.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4847) {\n          animation-delay: 484.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4848) {\n          animation-delay: 484.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4849) {\n          animation-delay: 484.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4850) {\n          animation-delay: 485s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4851) {\n          animation-delay: 485.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4852) {\n          animation-delay: 485.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4853) {\n          animation-delay: 485.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4854) {\n          animation-delay: 485.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4855) {\n          animation-delay: 485.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4856) {\n          animation-delay: 485.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4857) {\n          animation-delay: 485.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4858) {\n          animation-delay: 485.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4859) {\n          animation-delay: 485.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4860) {\n          animation-delay: 486s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4861) {\n          animation-delay: 486.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4862) {\n          animation-delay: 486.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4863) {\n          animation-delay: 486.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4864) {\n          animation-delay: 486.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4865) {\n          animation-delay: 486.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4866) {\n          animation-delay: 486.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4867) {\n          animation-delay: 486.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4868) {\n          animation-delay: 486.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4869) {\n          animation-delay: 486.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4870) {\n          animation-delay: 487s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4871) {\n          animation-delay: 487.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4872) {\n          animation-delay: 487.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4873) {\n          animation-delay: 487.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4874) {\n          animation-delay: 487.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4875) {\n          animation-delay: 487.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4876) {\n          animation-delay: 487.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4877) {\n          animation-delay: 487.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4878) {\n          animation-delay: 487.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4879) {\n          animation-delay: 487.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4880) {\n          animation-delay: 488s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4881) {\n          animation-delay: 488.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4882) {\n          animation-delay: 488.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4883) {\n          animation-delay: 488.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4884) {\n          animation-delay: 488.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4885) {\n          animation-delay: 488.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4886) {\n          animation-delay: 488.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4887) {\n          animation-delay: 488.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4888) {\n          animation-delay: 488.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4889) {\n          animation-delay: 488.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4890) {\n          animation-delay: 489s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4891) {\n          animation-delay: 489.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4892) {\n          animation-delay: 489.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4893) {\n          animation-delay: 489.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4894) {\n          animation-delay: 489.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4895) {\n          animation-delay: 489.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4896) {\n          animation-delay: 489.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4897) {\n          animation-delay: 489.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4898) {\n          animation-delay: 489.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4899) {\n          animation-delay: 489.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4900) {\n          animation-delay: 490s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4901) {\n          animation-delay: 490.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4902) {\n          animation-delay: 490.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4903) {\n          animation-delay: 490.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4904) {\n          animation-delay: 490.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4905) {\n          animation-delay: 490.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4906) {\n          animation-delay: 490.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4907) {\n          animation-delay: 490.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4908) {\n          animation-delay: 490.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4909) {\n          animation-delay: 490.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4910) {\n          animation-delay: 491s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4911) {\n          animation-delay: 491.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4912) {\n          animation-delay: 491.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4913) {\n          animation-delay: 491.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4914) {\n          animation-delay: 491.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4915) {\n          animation-delay: 491.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4916) {\n          animation-delay: 491.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4917) {\n          animation-delay: 491.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4918) {\n          animation-delay: 491.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4919) {\n          animation-delay: 491.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4920) {\n          animation-delay: 492s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4921) {\n          animation-delay: 492.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4922) {\n          animation-delay: 492.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4923) {\n          animation-delay: 492.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4924) {\n          animation-delay: 492.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4925) {\n          animation-delay: 492.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4926) {\n          animation-delay: 492.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4927) {\n          animation-delay: 492.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4928) {\n          animation-delay: 492.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4929) {\n          animation-delay: 492.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4930) {\n          animation-delay: 493s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4931) {\n          animation-delay: 493.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4932) {\n          animation-delay: 493.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4933) {\n          animation-delay: 493.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4934) {\n          animation-delay: 493.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4935) {\n          animation-delay: 493.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4936) {\n          animation-delay: 493.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4937) {\n          animation-delay: 493.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4938) {\n          animation-delay: 493.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4939) {\n          animation-delay: 493.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4940) {\n          animation-delay: 494s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4941) {\n          animation-delay: 494.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4942) {\n          animation-delay: 494.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4943) {\n          animation-delay: 494.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4944) {\n          animation-delay: 494.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4945) {\n          animation-delay: 494.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4946) {\n          animation-delay: 494.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4947) {\n          animation-delay: 494.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4948) {\n          animation-delay: 494.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4949) {\n          animation-delay: 494.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4950) {\n          animation-delay: 495s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4951) {\n          animation-delay: 495.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4952) {\n          animation-delay: 495.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4953) {\n          animation-delay: 495.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4954) {\n          animation-delay: 495.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4955) {\n          animation-delay: 495.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4956) {\n          animation-delay: 495.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4957) {\n          animation-delay: 495.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4958) {\n          animation-delay: 495.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4959) {\n          animation-delay: 495.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4960) {\n          animation-delay: 496s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4961) {\n          animation-delay: 496.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4962) {\n          animation-delay: 496.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4963) {\n          animation-delay: 496.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4964) {\n          animation-delay: 496.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4965) {\n          animation-delay: 496.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4966) {\n          animation-delay: 496.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4967) {\n          animation-delay: 496.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4968) {\n          animation-delay: 496.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4969) {\n          animation-delay: 496.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4970) {\n          animation-delay: 497s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4971) {\n          animation-delay: 497.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4972) {\n          animation-delay: 497.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4973) {\n          animation-delay: 497.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4974) {\n          animation-delay: 497.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4975) {\n          animation-delay: 497.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4976) {\n          animation-delay: 497.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4977) {\n          animation-delay: 497.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4978) {\n          animation-delay: 497.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4979) {\n          animation-delay: 497.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4980) {\n          animation-delay: 498s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4981) {\n          animation-delay: 498.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4982) {\n          animation-delay: 498.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4983) {\n          animation-delay: 498.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4984) {\n          animation-delay: 498.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4985) {\n          animation-delay: 498.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4986) {\n          animation-delay: 498.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4987) {\n          animation-delay: 498.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4988) {\n          animation-delay: 498.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4989) {\n          animation-delay: 498.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4990) {\n          animation-delay: 499s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4991) {\n          animation-delay: 499.1s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4992) {\n          animation-delay: 499.2s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4993) {\n          animation-delay: 499.3s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4994) {\n          animation-delay: 499.4s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4995) {\n          animation-delay: 499.5s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4996) {\n          animation-delay: 499.6s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4997) {\n          animation-delay: 499.7s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4998) {\n          animation-delay: 499.8s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(4999) {\n          animation-delay: 499.9s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li:nth-child(5000) {\n          animation-delay: 500s; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper .todo-item-action {\n          display: flex;\n          align-items: center;\n          justify-content: space-between;\n          width: 5.75rem; }\n          .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper .todo-item-action a {\n            cursor: pointer;\n            font-size: 1.2rem;\n            line-height: 1.5; }\n      .todo-application .content-area-wrapper .content-right .todo-task-list .no-results {\n        display: none;\n        padding: 1.5rem;\n        text-align: center; }\n        .todo-application .content-area-wrapper .content-right .todo-task-list .no-results.show {\n          display: block; }\n\n@-webkit-keyframes fadeIn {\n  0% {\n    opacity: 0;\n    top: 100px; }\n  75% {\n    opacity: 0.5;\n    top: 0px; }\n  100% {\n    opacity: 1; } }\n\n@media (max-width: 575.98px) {\n  .todo-application .app-content .sidebar-left .todo-sidebar {\n    left: -1.12rem !important; } }\n\n@media (max-width: 767.98px) {\n  .todo-application .sidebar-content .sidebar-close-icon {\n    visibility: visible !important; } }\n\n@media (max-width: 991.98px) {\n  .todo-application .app-content .sidebar-left .todo-sidebar {\n    transform: translateX(-110%);\n    transition: all .3s ease-in-out;\n    left: 0;\n    position: fixed;\n    z-index: 5;\n    left: -2px; }\n  .todo-application .app-content .sidebar-left.show .todo-sidebar {\n    transform: translateX(13%);\n    transition: all .3s ease;\n    display: block; }\n  .todo-application .app-content .content-right {\n    width: 100%; }\n    .todo-application .app-content .content-right .todo-app-list-wrapper {\n      border-left: 0; }\n    .todo-application .app-content .content-right .app-fixed-search {\n      border-top-left-radius: 0.5rem; } }\n\n@media (max-width: 575.98px) {\n  .content-right .todo-task-list .todo-title-wrapper, .todo-title-area {\n    display: block !important; }\n  .content-right .todo-task-list .todo-title-wrapper .todo-item-action {\n    float: none !important;\n    width: 100% !important;\n    display: block !important;\n    margin-top: .5rem; }\n    .content-right .todo-task-list .todo-title-wrapper .todo-item-action a {\n      margin-right: 1rem; } }\n\n@media (max-width: 349.98px) {\n  .todo-application .content-area-wrapper .sidebar .todo-sidebar {\n    width: 230px; } }\n\n@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {\n  .todo-application .content-area-wrapper .content-right .todo-task-list .todo-task-list-wrapper li {\n    padding-top: 0; } }\n"
  },
  {
    "path": "public/backend/css/pages/app-user.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\n/* user page css */\n/*---------------*/\n.users-list-wrapper .actions-dropodown {\n  box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.14);\n  border-radius: 0.5rem; }\n\n.users-list-wrapper a,\n.users-list-wrapper span {\n  color: inherit; }\n  .users-list-wrapper a i,\n  .users-list-wrapper span i {\n    cursor: pointer;\n    font-size: 1.2rem; }\n    .users-list-wrapper a i.users-delete-icon,\n    .users-list-wrapper span i.users-delete-icon {\n      font-size: 1.2rem; }\n      .users-list-wrapper a i.users-delete-icon:hover,\n      .users-list-wrapper span i.users-delete-icon:hover {\n        color: #ea5455; }\n    .users-list-wrapper a i.users-edit-icon:hover,\n    .users-list-wrapper span i.users-edit-icon:hover {\n      color: #7367f0; }\n\n.users-list-wrapper .badge {\n  text-transform: uppercase; }\n\n.users-list-wrapper .ag-icon-checkbox-unchecked {\n  color: #b8c2cc !important;\n  font-size: 22px; }\n\n.users-list-wrapper .ag-icon-checkbox-checked,\n.users-list-wrapper .ag-icon-checkbox-indeterminate {\n  font-size: 22px; }\n\n.page-users-view .users-view-image {\n  width: 150px; }\n\n.page-users-view table td {\n  padding-bottom: .8rem;\n  min-width: 140px;\n  word-break: break-word; }\n\n.page-users-view .users-view-permission table td,\n.page-users-view .users-view-permission table th {\n  padding-bottom: 0; }\n\n.page-users-edit .users-avatar-shadow {\n  box-shadow: 2px 4px 14px 0 rgba(34, 41, 47, 0.4); }\n"
  },
  {
    "path": "public/backend/css/pages/app-users.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\n.dataTables_wrapper .dataTables_length {\n  display: inline-block; }\n  .dataTables_wrapper .dataTables_length .custom-select {\n    width: 6.714rem !important;\n    height: 3rem;\n    border-radius: 1.428rem;\n    border: 1px solid #dae1e7;\n    font-size: 1rem;\n    margin-bottom: 1.5rem;\n    background-position: calc(100% - 8px) 13px, calc(100% - 13px) 13px, 100% 0 !important; }\n    .dataTables_wrapper .dataTables_length .custom-select:focus {\n      box-shadow: none; }\n\n.dataTables_wrapper .dataTables_filter {\n  display: flex;\n  justify-content: flex-end; }\n  .dataTables_wrapper .dataTables_filter .form-control {\n    border-radius: 1.428rem;\n    border: 1px solid #dae1e7;\n    font-size: 1rem;\n    width: 197px;\n    height: 40px;\n    padding-left: 2.2rem; }\n  .dataTables_wrapper .dataTables_filter label {\n    position: relative; }\n    .dataTables_wrapper .dataTables_filter label:after {\n      content: \"\\e8bd\";\n      font-family: \"feather\";\n      position: absolute;\n      left: 1.428rem;\n      top: 10px;\n      font-size: 1.1rem;\n      color: #dae1e7; }\n\n.dataTables_wrapper .dt-checkboxes-select-all input,\n.dataTables_wrapper .dt-checkboxes-select input {\n  width: 0;\n  position: relative; }\n  .dataTables_wrapper .dt-checkboxes-select-all input:before,\n  .dataTables_wrapper .dt-checkboxes-select input:before {\n    border: 2px solid #b4b4b4;\n    content: \"\";\n    width: 1.071rem;\n    height: 1.071rem;\n    padding: 0;\n    border-radius: 2px;\n    transition: all 0.2s ease;\n    transform: rotate(-90deg);\n    overflow: hidden;\n    transition: all 0.2s ease;\n    position: absolute; }\n  .dataTables_wrapper .dt-checkboxes-select-all input:after,\n  .dataTables_wrapper .dt-checkboxes-select input:after {\n    background-color: #7367f0;\n    border: 2px solid #7367f0;\n    font-family: \"feather\";\n    content: \"\\e83f\";\n    font-size: 0.75rem;\n    line-height: 1.2;\n    color: #fff;\n    opacity: 0;\n    position: absolute;\n    width: 0.928rem;\n    height: 1rem;\n    transform: translate(100%);\n    transform-origin: right;\n    transition: all 0.2s ease;\n    overflow: hidden; }\n  .dataTables_wrapper .dt-checkboxes-select-all input:active:checked:after,\n  .dataTables_wrapper .dt-checkboxes-select input:active:checked:after {\n    transform: translate(3px); }\n  .dataTables_wrapper .dt-checkboxes-select-all input:checked:before,\n  .dataTables_wrapper .dt-checkboxes-select input:checked:before {\n    border: 2px solid #7367f0;\n    transform: rotate(0deg); }\n  .dataTables_wrapper .dt-checkboxes-select-all input:checked:after,\n  .dataTables_wrapper .dt-checkboxes-select input:checked:after {\n    transition: all 0.2s ease;\n    opacity: 1;\n    transform: translate(0); }\n\n.dataTables_wrapper .dataTable thead tr th:first-child {\n  padding-right: 2rem; }\n\n.dataTables_wrapper .dataTable tbody .select-checkbox:before, .dataTables_wrapper .dataTable tbody .select-checkbox:after {\n  display: none !important; }\n\n.dataTables_wrapper .dataTable tbody tr.selected {\n  border-radius: 0; }\n\n.dataTables_wrapper .dataTable tbody tr td:first-child {\n  padding-right: 2rem; }\n\n.dataTables_wrapper .dataTable tbody tr td .user-info {\n  display: flex;\n  justify-content: flex-start;\n  align-items: center; }\n\n.dataTables_wrapper .dataTables_paginate .pagination {\n  justify-content: center !important; }\n\n@media (max-width: 1199.98px) {\n  .dataTables_wrapper .dataTable tbody tr td:nth-child(2) {\n    display: flex;\n    flex-wrap: wrap; } }\n\n_:-ms-lang(x) tbody tr td.dt-checkboxes-cell input,\n_:-ms-lang(x) tbody tr th.dt-checkboxes-cell input,\n_:-ms-lang(x) thead tr td.dt-checkboxes-cell input,\n_:-ms-lang(x) thead tr th.dt-checkboxes-cell input,\n.dataTable tbody tr td.dt-checkboxes-cell input,\n.dataTable tbody tr th.dt-checkboxes-cell input,\n.dataTable thead tr td.dt-checkboxes-cell input,\n.dataTable thead tr th.dt-checkboxes-cell input {\n  width: auto !important; }\n\n@supports (-moz-osx-font-smoothing: auto) {\n  .dataTable input {\n    width: auto !important; } }\n\n@media not all and (min-resolution: 0.001dpcm) {\n  @supports (-webkit-appearance: none) {\n    .dataTable tbody td.dt-checkboxes-cell input:after {\n      left: -0.485rem; }\n    .dataTable .dt-checkboxes-cell input {\n      -webkit-appearance: none;\n      top: -10px; } } }\n\n.dataTable .mac-checkbox {\n  -webkit-appearance: none;\n  outline: none;\n  width: auto; }\n"
  },
  {
    "path": "public/backend/css/pages/authentication.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\n.bg-authentication {\n  background-color: #eff2f7; }\n  .bg-authentication .login-footer {\n    padding: 0rem 1.5rem 0.5rem; }\n    .bg-authentication .login-footer .footer-btn .btn {\n      padding: 0.9rem 1.2rem !important;\n      margin: 1rem 1rem 1rem 0rem; }\n\n@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {\n  .bg-authentication {\n    width: 100%; } }\n"
  },
  {
    "path": "public/backend/css/pages/card-analytics.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\n.customer-info.list-group .list-group-item:last-child {\n  border-bottom-left-radius: 0.5rem;\n  border-bottom-right-radius: 0.5rem; }\n\n.customer-info.list-group .list-group-item .series-info i {\n  top: 0;\n  margin-right: 0.3rem; }\n\n.avg-sessions .progress {\n  margin-top: 0.5rem; }\n\n.analytics-list.list-group .list-group-item {\n  border: 0; }\n  .analytics-list.list-group .list-group-item:first-child {\n    border-top-left-radius: 0;\n    border-top-right-radius: 0; }\n  .analytics-list.list-group .list-group-item .btn {\n    display: none; }\n  .analytics-list.list-group .list-group-item:hover .btn {\n    display: inline-block; }\n\n.chart-dropdown .btn {\n  font-size: 0.8rem;\n  font-weight: 500; }\n  .chart-dropdown .btn:after {\n    left: 0;\n    position: relative; }\n\n@media only screen and (max-width: 992px) and (min-width: 768px) {\n  .analytics-list .float-left, .analytics-list .float-right {\n    display: block; } }\n\n@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {\n  #dashboard-analytics .avatar .avatar-content, #statistics-card .avatar .avatar-content {\n    padding: 0 !important; } }\n"
  },
  {
    "path": "public/backend/css/pages/colors.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\n.colors-list li {\n  padding: 0.4rem; }\n  .colors-list li i {\n    font-size: 1.2rem;\n    top: 2px;\n    position: relative;\n    margin-right: 0.25rem; }\n"
  },
  {
    "path": "public/backend/css/pages/coming-soon.css",
    "content": "/*========== Coming Soon Background Image =========*/\n.clockCard {\n  float: left; }\n\n.getting-started {\n  font-size: 3rem; }\n\n.lead {\n  font-size: 1rem; }\n"
  },
  {
    "path": "public/backend/css/pages/dashboard-analytics.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\n#dashboard-analytics .img-left {\n  width: 200px;\n  position: absolute;\n  top: 0;\n  left: 0; }\n\n#dashboard-analytics .img-right {\n  width: 175px;\n  position: absolute;\n  top: 0;\n  right: 0; }\n\n#dashboard-analytics .bg-analytics {\n  background: linear-gradient(118deg, #7367f0, rgba(115, 103, 240, 0.7)); }\n  #dashboard-analytics .bg-analytics .avatar {\n    margin-bottom: 2rem; }\n\n#dashboard-analytics table tr th:first-child, #dashboard-analytics table tr td:first-child {\n  padding-left: 2rem; }\n\n#dashboard-analytics table tr th:last-child, #dashboard-analytics table tr td:last-child {\n  padding-right: 2rem; }\n\n#dashboard-analytics table td {\n  padding: .75rem; }\n\n@media only screen and (max-width: 576px) {\n  #dashboard-analytics .img-left, #dashboard-analytics .img-right {\n    width: 140px; } }\n"
  },
  {
    "path": "public/backend/css/pages/dashboard-ecommerce.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\n.chat-application .chat-app-window .user-chats {\n  padding: 10px 20px;\n  position: relative;\n  text-align: center;\n  height: 415px; }\n  .chat-application .chat-app-window .user-chats .chats {\n    padding: 0; }\n    .chat-application .chat-app-window .user-chats .chats .chat-body {\n      display: block;\n      margin: 10px 30px 0 0;\n      overflow: hidden; }\n      .chat-application .chat-app-window .user-chats .chats .chat-body .chat-content {\n        text-align: left;\n        display: block;\n        float: right;\n        padding: .75rem 1rem;\n        margin: 0 20px 10px 0;\n        clear: both;\n        color: #fff;\n        background: linear-gradient(118deg, #7367f0, rgba(115, 103, 240, 0.7));\n        border-radius: .5rem;\n        box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.12), 0 2px 4px 0 rgba(0, 0, 0, 0.08); }\n        .chat-application .chat-app-window .user-chats .chats .chat-body .chat-content p {\n          margin: 0; }\n    .chat-application .chat-app-window .user-chats .chats .chat-avatar {\n      float: right; }\n    .chat-application .chat-app-window .user-chats .chats .chat-left .chat-avatar {\n      float: left; }\n    .chat-application .chat-app-window .user-chats .chats .chat-left .chat-body {\n      margin: 0; }\n    .chat-application .chat-app-window .user-chats .chats .chat-left .chat-content {\n      text-align: left;\n      float: left;\n      margin: 10px 10px 10px 20px;\n      color: #626262;\n      background: none;\n      background-color: white;\n      border: 1px solid #dae1e7; }\n"
  },
  {
    "path": "public/backend/css/pages/data-list-view.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\n.data-list-view-header .table-responsive .top,\n.data-thumb-view-header .table-responsive .top {\n  display: flex;\n  justify-content: space-between;\n  padding: 0 1rem;\n  margin-bottom: 1rem; }\n  .data-list-view-header .table-responsive .top .action-btns,\n  .data-thumb-view-header .table-responsive .top .action-btns {\n    margin-top: 1.5rem;\n    display: flex; }\n    .data-list-view-header .table-responsive .top .action-btns .actions-dropodown,\n    .data-thumb-view-header .table-responsive .top .action-btns .actions-dropodown {\n      box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.14);\n      border-radius: 0.5rem;\n      margin-right: 0.75rem; }\n      .data-list-view-header .table-responsive .top .action-btns .actions-dropodown .dropdown-toggle,\n      .data-thumb-view-header .table-responsive .top .action-btns .actions-dropodown .dropdown-toggle {\n        font-size: 1.125rem;\n        font-weight: 500; }\n        .data-list-view-header .table-responsive .top .action-btns .actions-dropodown .dropdown-toggle:after,\n        .data-thumb-view-header .table-responsive .top .action-btns .actions-dropodown .dropdown-toggle:after {\n          left: 0; }\n    .data-list-view-header .table-responsive .top .action-btns .dt-buttons .btn,\n    .data-thumb-view-header .table-responsive .top .action-btns .dt-buttons .btn {\n      padding: 0.9rem 0.938rem; }\n  .data-list-view-header .table-responsive .top .dataTables_length,\n  .data-thumb-view-header .table-responsive .top .dataTables_length {\n    display: inline-block; }\n    .data-list-view-header .table-responsive .top .dataTables_length .custom-select,\n    .data-thumb-view-header .table-responsive .top .dataTables_length .custom-select {\n      width: 8.714rem;\n      height: 3rem;\n      border-radius: 1.428rem;\n      border: 1px solid #dae1e7;\n      font-size: 1rem;\n      background-position: calc(100% - 12px) 13px, calc(100% - 20px) 13px, 100% 0; }\n      .data-list-view-header .table-responsive .top .dataTables_length .custom-select:focus,\n      .data-thumb-view-header .table-responsive .top .dataTables_length .custom-select:focus {\n        box-shadow: none; }\n  .data-list-view-header .table-responsive .top .dataTables_filter,\n  .data-thumb-view-header .table-responsive .top .dataTables_filter {\n    display: inline-block; }\n    .data-list-view-header .table-responsive .top .dataTables_filter .form-control,\n    .data-thumb-view-header .table-responsive .top .dataTables_filter .form-control {\n      padding: 1.45rem 2.8rem !important;\n      border-radius: 1.428rem;\n      border: 1px solid #dae1e7; }\n    .data-list-view-header .table-responsive .top .dataTables_filter label,\n    .data-thumb-view-header .table-responsive .top .dataTables_filter label {\n      position: relative; }\n      .data-list-view-header .table-responsive .top .dataTables_filter label:after,\n      .data-thumb-view-header .table-responsive .top .dataTables_filter label:after {\n        content: \"\\e8bd\";\n        font-family: \"feather\";\n        position: absolute;\n        left: 1.428rem;\n        top: 0.928rem; }\n\n.data-list-view-header .table-responsive .dataTables_wrapper .dataTables_paginate ul.pagination,\n.data-thumb-view-header .table-responsive .dataTables_wrapper .dataTables_paginate ul.pagination {\n  justify-content: center; }\n\n.data-list-view-header .add-new-data-sidebar .overlay-bg,\n.data-thumb-view-header .add-new-data-sidebar .overlay-bg {\n  background: rgba(0, 0, 0, 0.2);\n  width: 100%;\n  height: 100%;\n  position: fixed;\n  top: 0;\n  left: 0;\n  display: none;\n  transition: all 0.3s ease;\n  opacity: 0;\n  z-index: 1032; }\n  .data-list-view-header .add-new-data-sidebar .overlay-bg.show,\n  .data-thumb-view-header .add-new-data-sidebar .overlay-bg.show {\n    opacity: 1;\n    display: block; }\n\n.data-list-view-header .add-new-data-sidebar .add-new-data,\n.data-thumb-view-header .add-new-data-sidebar .add-new-data {\n  width: 28.57rem;\n  max-width: 90vw;\n  height: 100vh;\n  height: calc(var(--vh, 1vh) * 100);\n  background: #fff;\n  position: fixed;\n  left: auto;\n  right: 0;\n  top: 0;\n  z-index: 1033;\n  box-shadow: 0 0 15px 0 rgba(0, 0, 0, 0.05);\n  transform: translateX(100%);\n  transition: all 0.25s ease;\n  overflow: hidden; }\n  .data-list-view-header .add-new-data-sidebar .add-new-data.show,\n  .data-thumb-view-header .add-new-data-sidebar .add-new-data.show {\n    transform: translateX(0%); }\n  .data-list-view-header .add-new-data-sidebar .add-new-data .new-data-title,\n  .data-thumb-view-header .add-new-data-sidebar .add-new-data .new-data-title {\n    padding-bottom: 0.714rem;\n    border-bottom: 1px solid rgba(0, 0, 0, 0.1); }\n    .data-list-view-header .add-new-data-sidebar .add-new-data .new-data-title .hide-data-sidebar,\n    .data-thumb-view-header .add-new-data-sidebar .add-new-data .new-data-title .hide-data-sidebar {\n      position: relative; }\n      .data-list-view-header .add-new-data-sidebar .add-new-data .new-data-title .hide-data-sidebar i,\n      .data-thumb-view-header .add-new-data-sidebar .add-new-data .new-data-title .hide-data-sidebar i {\n        position: absolute;\n        font-size: 1.71rem;\n        right: 0;\n        top: -0.1428rem;\n        cursor: pointer; }\n  .data-list-view-header .add-new-data-sidebar .add-new-data .data-items,\n  .data-thumb-view-header .add-new-data-sidebar .add-new-data .data-items {\n    border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n    height: calc(100% - 10rem);\n    position: relative; }\n    .data-list-view-header .add-new-data-sidebar .add-new-data .data-items .data-field-col,\n    .data-thumb-view-header .add-new-data-sidebar .add-new-data .data-items .data-field-col {\n      margin-top: 1.25rem; }\n      .data-list-view-header .add-new-data-sidebar .add-new-data .data-items .data-field-col.data-list-upload,\n      .data-thumb-view-header .add-new-data-sidebar .add-new-data .data-items .data-field-col.data-list-upload {\n        margin-top: 2rem; }\n      .data-list-view-header .add-new-data-sidebar .add-new-data .data-items .data-field-col .dropzone,\n      .data-thumb-view-header .add-new-data-sidebar .add-new-data .data-items .data-field-col .dropzone {\n        min-height: 14.285rem; }\n        .data-list-view-header .add-new-data-sidebar .add-new-data .data-items .data-field-col .dropzone .dz-message,\n        .data-thumb-view-header .add-new-data-sidebar .add-new-data .data-items .data-field-col .dropzone .dz-message {\n          height: auto; }\n          .data-list-view-header .add-new-data-sidebar .add-new-data .data-items .data-field-col .dropzone .dz-message:before,\n          .data-thumb-view-header .add-new-data-sidebar .add-new-data .data-items .data-field-col .dropzone .dz-message:before {\n            font-size: 2.857rem; }\n\ntable.data-list-view.dataTable,\ntable.data-thumb-view.dataTable {\n  border-spacing: 0 1.3rem;\n  padding: 0 0.7rem; }\n  table.data-list-view.dataTable thead th,\n  table.data-thumb-view.dataTable thead th {\n    padding: 0.714rem 1.785rem;\n    font-weight: 600; }\n    table.data-list-view.dataTable thead th input:focus,\n    table.data-thumb-view.dataTable thead th input:focus {\n      outline: 0; }\n  table.data-list-view.dataTable thead th:first-child,\n  table.data-thumb-view.dataTable thead th:first-child {\n    padding-left: 0; }\n  table.data-list-view.dataTable thead .sorting_asc,\n  table.data-list-view.dataTable thead .sorting_desc,\n  table.data-list-view.dataTable thead .sorting,\n  table.data-thumb-view.dataTable thead .sorting_asc,\n  table.data-thumb-view.dataTable thead .sorting_desc,\n  table.data-thumb-view.dataTable thead .sorting {\n    padding-right: inherit; }\n    table.data-list-view.dataTable thead .sorting_asc:before,\n    table.data-list-view.dataTable thead .sorting_desc:before,\n    table.data-list-view.dataTable thead .sorting:before,\n    table.data-thumb-view.dataTable thead .sorting_asc:before,\n    table.data-thumb-view.dataTable thead .sorting_desc:before,\n    table.data-thumb-view.dataTable thead .sorting:before {\n      font-size: 0.7rem;\n      left: 0.857rem;\n      top: 0.642rem; }\n    table.data-list-view.dataTable thead .sorting_asc:after,\n    table.data-list-view.dataTable thead .sorting_desc:after,\n    table.data-list-view.dataTable thead .sorting:after,\n    table.data-thumb-view.dataTable thead .sorting_asc:after,\n    table.data-thumb-view.dataTable thead .sorting_desc:after,\n    table.data-thumb-view.dataTable thead .sorting:after {\n      font-size: 0.7rem;\n      left: 0.857rem;\n      top: 1.071rem; }\n  table.data-list-view.dataTable thead .dt-checkboxes-select-all input,\n  table.data-thumb-view.dataTable thead .dt-checkboxes-select-all input {\n    width: 0;\n    position: relative; }\n    table.data-list-view.dataTable thead .dt-checkboxes-select-all input:before,\n    table.data-thumb-view.dataTable thead .dt-checkboxes-select-all input:before {\n      border: 2px solid #b4b4b4;\n      content: \"\";\n      width: 1.071rem;\n      height: 1.071rem;\n      padding: 0;\n      border-radius: 2px;\n      transition: all 0.2s ease;\n      transform: rotate(-90deg);\n      overflow: hidden;\n      transition: all 0.2s ease;\n      position: absolute; }\n    table.data-list-view.dataTable thead .dt-checkboxes-select-all input:after,\n    table.data-thumb-view.dataTable thead .dt-checkboxes-select-all input:after {\n      background-color: #7367f0;\n      border: 2px solid #7367f0;\n      font-family: \"feather\";\n      content: \"\\e83f\";\n      font-size: 0.75rem;\n      line-height: 1.2;\n      color: #fff;\n      opacity: 0;\n      position: absolute;\n      width: 0.928rem;\n      height: 1rem;\n      transform: translate(100%);\n      transform-origin: right;\n      transition: all 0.2s ease;\n      overflow: hidden; }\n    table.data-list-view.dataTable thead .dt-checkboxes-select-all input:active:checked:after,\n    table.data-thumb-view.dataTable thead .dt-checkboxes-select-all input:active:checked:after {\n      transform: translate(3px); }\n    table.data-list-view.dataTable thead .dt-checkboxes-select-all input:checked:before,\n    table.data-thumb-view.dataTable thead .dt-checkboxes-select-all input:checked:before {\n      border: 2px solid #7367f0;\n      transform: rotate(0deg); }\n    table.data-list-view.dataTable thead .dt-checkboxes-select-all input:checked:after,\n    table.data-thumb-view.dataTable thead .dt-checkboxes-select-all input:checked:after {\n      transition: all 0.2s ease;\n      opacity: 1;\n      transform: translate(0); }\n  table.data-list-view.dataTable tbody tr,\n  table.data-thumb-view.dataTable tbody tr {\n    background-color: #fff;\n    box-shadow: rgba(0, 0, 0, 0.05) 0px 4px 20px 0px;\n    cursor: pointer;\n    transition: all 0.3s ease;\n    border-radius: 0.5rem; }\n    table.data-list-view.dataTable tbody tr:hover,\n    table.data-thumb-view.dataTable tbody tr:hover {\n      transform: translateY(-4px);\n      transition: all 0.3s ease; }\n    table.data-list-view.dataTable tbody tr td:first-child,\n    table.data-thumb-view.dataTable tbody tr td:first-child {\n      padding-left: 1rem;\n      border-top-left-radius: 0.5rem;\n      border-bottom-left-radius: 0.5rem; }\n    table.data-list-view.dataTable tbody tr td:last-child,\n    table.data-thumb-view.dataTable tbody tr td:last-child {\n      border-top-right-radius: 0.5rem;\n      border-bottom-right-radius: 0.5rem; }\n    table.data-list-view.dataTable tbody tr.selected td,\n    table.data-thumb-view.dataTable tbody tr.selected td {\n      border-radius: 0; }\n  table.data-list-view.dataTable tbody td,\n  table.data-thumb-view.dataTable tbody td {\n    padding: 1.357rem;\n    border: none;\n    vertical-align: middle; }\n    table.data-list-view.dataTable tbody td input:focus,\n    table.data-thumb-view.dataTable tbody td input:focus {\n      outline: 0; }\n    table.data-list-view.dataTable tbody td.product-name,\n    table.data-thumb-view.dataTable tbody td.product-name {\n      font-weight: 500; }\n    table.data-list-view.dataTable tbody td:focus,\n    table.data-thumb-view.dataTable tbody td:focus {\n      outline: 0; }\n    table.data-list-view.dataTable tbody td.dt-checkboxes-cell input,\n    table.data-thumb-view.dataTable tbody td.dt-checkboxes-cell input {\n      width: 0;\n      position: relative; }\n      table.data-list-view.dataTable tbody td.dt-checkboxes-cell input:before,\n      table.data-thumb-view.dataTable tbody td.dt-checkboxes-cell input:before {\n        border: 2px solid #b4b4b4;\n        position: absolute;\n        left: -8px;\n        content: \"\";\n        width: 1.071rem;\n        height: 1.071rem;\n        padding: 0;\n        border-radius: 2px;\n        transform: rotate(-90deg);\n        overflow: hidden;\n        transition: all 0.2s ease; }\n      table.data-list-view.dataTable tbody td.dt-checkboxes-cell input:after,\n      table.data-thumb-view.dataTable tbody td.dt-checkboxes-cell input:after {\n        background-color: #7367f0;\n        font-family: \"feather\";\n        content: \"\\e83f\";\n        font-size: 0.75rem;\n        color: #fff;\n        opacity: 0;\n        position: absolute;\n        left: -0.4285rem;\n        width: 0.857rem;\n        height: 1rem;\n        overflow: hidden;\n        transform: rotate(-90deg) translate(100%);\n        transform-origin: right;\n        transition: all 0.2s ease; }\n      table.data-list-view.dataTable tbody td.dt-checkboxes-cell input:active:checked:after,\n      table.data-thumb-view.dataTable tbody td.dt-checkboxes-cell input:active:checked:after {\n        transform: translate(3px); }\n      table.data-list-view.dataTable tbody td.dt-checkboxes-cell input:checked:before,\n      table.data-thumb-view.dataTable tbody td.dt-checkboxes-cell input:checked:before {\n        transform: rotate(0deg);\n        border: 2px solid #7367f0;\n        transition: all 0.2s ease; }\n      table.data-list-view.dataTable tbody td.dt-checkboxes-cell input:checked:after,\n      table.data-thumb-view.dataTable tbody td.dt-checkboxes-cell input:checked:after {\n        opacity: 1;\n        transition: all 0.2s ease;\n        transform: rotate(0deg) translate(0); }\n    table.data-list-view.dataTable tbody td .progress,\n    table.data-thumb-view.dataTable tbody td .progress {\n      margin-bottom: 0;\n      box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.12), 0 2px 4px 0 rgba(0, 0, 0, 0.08); }\n\ntable.data-thumb-view.dataTable tbody tr td {\n  padding-top: 0.714rem;\n  padding-bottom: 0.714rem; }\n  table.data-thumb-view.dataTable tbody tr td.product-img img {\n    height: 7.857rem; }\n\n@media (max-width: 768px) {\n  #data-list-view .table-responsive .top,\n  #data-thumb-view .table-responsive .top {\n    flex-direction: column; }\n  #data-list-view .table-responsive .dt-buttons,\n  #data-thumb-view .table-responsive .dt-buttons {\n    width: auto;\n    text-align: left; }\n  #data-list-view .table-responsive .dataTables_length,\n  #data-list-view .table-responsive .dataTables_filter,\n  #data-thumb-view .table-responsive .dataTables_length,\n  #data-thumb-view .table-responsive .dataTables_filter {\n    text-align: right; } }\n\n@media (max-width: 576px) {\n  .add-new-data-sidebar .data-items .data-list-upload .dropzone .dz-message:before {\n    top: 3.428rem; } }\n\n_:-ms-lang(x) tbody tr td.dt-checkboxes-cell input,\n_:-ms-lang(x) tbody tr th.dt-checkboxes-cell input,\n_:-ms-lang(x) thead tr td.dt-checkboxes-cell input,\n_:-ms-lang(x) thead tr th.dt-checkboxes-cell input,\n.data-list-view.dataTable tbody tr td.dt-checkboxes-cell input,\n.data-list-view.dataTable tbody tr th.dt-checkboxes-cell input,\n.data-list-view.dataTable thead tr td.dt-checkboxes-cell input,\n.data-list-view.dataTable thead tr th.dt-checkboxes-cell input,\n.data-thumb-view.dataTable tbody tr td.dt-checkboxes-cell input,\n.data-thumb-view.dataTable tbody tr th.dt-checkboxes-cell input,\n.data-thumb-view.dataTable thead tr td.dt-checkboxes-cell input,\n.data-thumb-view.dataTable thead tr th.dt-checkboxes-cell input {\n  width: auto; }\n\n_:-ms-lang(x) .table-responsive .top .dataTables_filter .form-control,\n.data-list-view.dataTable .table-responsive .top .dataTables_filter .form-control,\n.data-thumb-view.dataTable .table-responsive .top .dataTables_filter .form-control {\n  height: 1.4rem !important;\n  padding: 0rem 0.5rem !important; }\n  _:-ms-lang(x) .table-responsive .top .dataTables_filter .form-control:after,\n  .data-list-view.dataTable .table-responsive .top .dataTables_filter .form-control:after,\n  .data-thumb-view.dataTable .table-responsive .top .dataTables_filter .form-control:after {\n    display: none; }\n\n@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {\n  #data-list-view .table-responsive .top .dataTables_filter .form-control,\n  #data-thumb-view .table-responsive .top .dataTables_filter .form-control {\n    height: 3rem !important;\n    padding: 0rem 1rem !important; }\n  #data-list-view .table-responsive .top .dataTables_filter label:after,\n  #data-thumb-view .table-responsive .top .dataTables_filter label:after {\n    display: none; } }\n\n@supports (-moz-osx-font-smoothing: auto) {\n  .data-list-view input,\n  .data-thumb-view input {\n    width: auto !important; } }\n\n@media not all and (min-resolution: 0.001dpcm) {\n  @supports (-webkit-appearance: none) {\n    table.data-list-view tbody td.dt-checkboxes-cell input:after, table.data-thumb-view tbody td.dt-checkboxes-cell input:after {\n      left: -0.485rem; }\n    .data-list-view .dt-checkboxes-cell input,\n    .data-thumb-view .dt-checkboxes-cell input {\n      -webkit-appearance: none;\n      top: -10px; } } }\n\n.data-list-view .mac-checkbox,\n.data-thumb-view .mac-checkbox {\n  -webkit-appearance: none;\n  top: -10px; }\n"
  },
  {
    "path": "public/backend/css/pages/error.css",
    "content": ".error-code {\n  font-size: 10rem; }\n"
  },
  {
    "path": "public/backend/css/pages/faq.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\n.faq-bg {\n  background: url(../../../app-assets/images/pages/faq.jpg) no-repeat;\n  background-size: cover; }\n  .faq-bg .form-control:focus ~ .form-control-position i {\n    color: #7367f0; }\n\n.faq .faq-content .faq-table-content {\n  cursor: pointer;\n  padding: 0.5rem;\n  font-weight: 500; }\n  .faq .faq-content .faq-table-content i {\n    margin-right: 0.5rem; }\n\n.faq .supporter-details .supporter-img img {\n  width: 35px;\n  height: 35px;\n  margin-right: 0.5rem;\n  cursor: pointer; }\n\n.faq .supporter-info {\n  vertical-align: middle; }\n\n.faq .accordion .collapse-title {\n  font-weight: 500;\n  color: #2c2c2c; }\n\n.faq .accordion .collapse-margin {\n  background-color: #fff; }\n\n@media only screen and (min-width: 992px) {\n  .faq-bg .card-body {\n    padding: 8rem !important; } }\n\n@media only screen and (min-width: 768px) and (max-width: 991px) {\n  .faq-bg .card-body {\n    padding: 6rem !important; } }\n"
  },
  {
    "path": "public/backend/css/pages/invoice.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\n.invoice-page {\n  padding: 2.2rem; }\n  .invoice-page .recipient-contact i,\n  .invoice-page .company-contact i {\n    padding-right: 0.2rem;\n    position: relative;\n    top: 2px; }\n  .invoice-page .recipient-info p,\n  .invoice-page .company-info p,\n  .invoice-page .company-contact p,\n  .invoice-page .recipient-contact p {\n    line-height: 2;\n    margin-bottom: 0; }\n  .invoice-page .invoice-items-table table,\n  .invoice-page .invoice-total-table table {\n    border: 2px solid #f8f8f8; }\n\n@media print {\n  .content-header,\n  .buy-now,\n  .btn-print,\n  .footer,\n  .open,\n  .main-menu,\n  .invoice-print {\n    display: none; }\n  .app-content,\n  #invoice-template,\n  .navbar-container,\n  .navbar-wrapper,\n  .header-navbar,\n  .invoice-print,\n  .content-wrapper {\n    margin: 0 !important;\n    padding: 0 !important; }\n  #invoice-footer {\n    position: relative;\n    top: -80px !important; }\n  #invoice-company-details,\n  #invoice-footer {\n    margin-top: 5rem !important; }\n  .table-responsive {\n    -ms-overflow-style: none; } }\n\n@page {\n  margin: 10px; }\n"
  },
  {
    "path": "public/backend/css/pages/knowledge-base.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\n.knowledge-base-bg {\n  background: url(../../../app-assets/images/pages/knowledge-base-cover.jpg) no-repeat;\n  background-size: cover; }\n\n.knowledge-base-category .list-group-item, .knowledge-base-question .list-group-item {\n  padding: 0.5rem 0; }\n  .knowledge-base-category .list-group-item:hover, .knowledge-base-question .list-group-item:hover {\n    background-color: transparent; }\n\n.article-question li {\n  margin-bottom: 0.5rem;\n  display: flex; }\n\n.article-question i {\n  font-size: 1.2rem;\n  top: 2px;\n  position: relative;\n  margin: 0 0.5rem; }\n\n@media only screen and (min-width: 992px) {\n  .knowledge-base-bg .card-body {\n    padding: 8rem !important; } }\n\n@media only screen and (min-width: 768px) and (max-width: 991px) {\n  .knowledge-base-bg .card-body {\n    padding: 6rem !important; } }\n"
  },
  {
    "path": "public/backend/css/pages/page-auth.css",
    "content": ".auth-wrapper {\n  display: flex;\n  flex-basis: 100%;\n  min-height: 100vh;\n  min-height: calc(var(--vh, 1vh) * 100);\n  width: 100%; }\n\n.auth-wrapper .auth-inner {\n  width: 100%;\n  position: relative; }\n\n.auth-wrapper.auth-v1 {\n  align-items: center;\n  justify-content: center;\n  overflow: hidden; }\n\n.auth-wrapper.auth-v1 .auth-inner:before {\n  width: 244px;\n  height: 243px;\n  content: ' ';\n  position: absolute;\n  top: -54px;\n  left: -46px;\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPQAAADzCAMAAACG9Mt0AAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAA9KADAAQAAAABAAAA8wAAAADhQHfUAAAAyVBMVEUAAAD///+AgP+AgP9mZv+AgNWAgP9tbf9gYP+AgP9xcf9mZv+AZuaAgP9dXf90dOhiYv92dv9mZu5mZv93d+53d/9paf94afCAcfFrXvJra/9mZvJzZvJzc/JoaP96b/Rqav91aupsYvV2bOt2bPVxaPZ7cfZqavZyau1waPd4aO9xafBxafh4afB1bfh4avFuZ/F2afJzZvJzZ/N0aPN0bvN3bPR0ae5yZ/R3be93bfR1au9zafBxbPVzavV0a/F0a/ZyafFwaPKZm3nTAAAAQ3RSTlMAAQIEBQYGBwgICQoKCgsLDQ0PDw8PERESExMUFBQWFxgYGhoaGxsdHSAgIiIiIyQlJygqLCwtLi8vLzAzNDU3Nzg7h9vbHgAAA9RJREFUeNrt3ftS2kAUx/Fc1gSyWsErtuJdRDQiiteolb7/QzUoTm07k4AzObuu3/MCez45yWbzT36eZ6b8erO1e1B97baadd+zocJWmg0HaXe/+uqmg2GWtkLT5Lle1m9LdhG2+1lvzuiUO1knEF81yFc1N+35m15kZOGodz1vyLx+v2Lseq/erxtZd/NuweCTtfiwaWLOD5FnsqI7+VnP3y8afnEs3Es/1+H1qvETwuq18B7e6VlwLup1ZM8kWWQBOsrmHL7GVtxvYRZYgQ4ywae61ffsqH5Lbq20bQm6ncp9P2ehJegwE/u+rl95ttSwLrVSc2ANetAU28dSa9Cp2E623bUG3d2VWmn/wBq0XCugQYMGLdVKoOJaoiuok1NdXSW1WAUfRPtRUllflaJf5ZE/O9pXVbZUPTov5c+IDqvtRwStdTgLutoxy6GnGfYb2o+1I2gd+1OiqzfLocvVE7TSDqG1mgodaqfQZbvZC9rXjqG1X45WzqFVKVpk0LLo4lGP0ZGD6KgMnTiITkrQgXYQrYNitHISrYrRsZPouBhdcxJdK0YnTqKTYrR2Eq1BgwYNGjRo0KBBgwYNGjRo0KBBgwYNGjRo0KBBgwYNGjRo0KBBgwYNGjRo0KBBgwYNGjRo0KBBgwYNGjRo0KBBgwYNGjRo0KBBgwYNGjRoh9DH59ag86ACoSYOL61B55EUQk1s3VqDzsNHhJpYe7QGncfMSHUxaliCHgcKSXVxeWQJehwdJdXF4dAS9DgkTKqLxuibFeiXODixNi7OrEC/BP+JtbE0WrYA/RrxKNfH2YUF6NegSbk+Gk87xtErN6EsWm88fzeMXpwE9EruLns/l42io4dJFLPo2/Po1w+D6IW7t9Bt2SPx3vOOMfS7eHVZtN54ulg2go56138Ct4XRunE2Ovsmjg46WeddUoUWr6WL0fCoIYgO2/2s91fstDZQjcPL0ePt5flpdXUwqW46uMrS1j95JNpQrW0dHp9UV/uT2m416/8HVGg3qzhpBjRo0KBBgwYNGjRo0KBBgwYNGjRo0KBBgwYNGjRo0KBBgwYNGjRo0KBBgwYNGjRo0KBBgwYNGjRo0KBBgwYNGjRo0KBBgwYNGjRo0KBBgwYNGjRo0KC/FDpx0pwUo2tOomvF6NhJdFyMVk6iVTE6cBIdeF9vJyvZx/I/AzuIjsrQvoNovwzt4FamSs0Ojrp80PmvoB0zh940pb7azf1yg7t0LIt978uppzbnalfucDW92ZndLPRmKweGPduYJ+zoM5/Dk+gD5NdvLhXXPp88qcUqmEH5G5JZRs6cuxwIAAAAAElFTkSuQmCC\"); }\n\n@media (max-width: 575.98px) {\n  .auth-wrapper.auth-v1 .auth-inner:before {\n    display: none; } }\n\n.auth-wrapper.auth-v1 .auth-inner:after {\n  width: 272px;\n  height: 272px;\n  content: ' ';\n  position: absolute;\n  bottom: -55px;\n  right: -75px;\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAARAAAAEQCAMAAABP1NsnAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAABEKADAAQAAAABAAABEAAAAAAQWxS2AAAAwFBMVEUAAAD///+AgICAgP9VVaqqVf+qqv+AgL+AgP9mZsxmZv+ZZv+AgNWAgP9tbdttbf+Sbf+AYN+AgN+AgP9xceNmZv+AZuaAZv90dOh0dP9qav+AauqAav+AgP92dv9tbf+Abe2Abf93Zu53d+6AcO94afCAcfF5a+R5a/JzZuaAZvKAc/J5bed5bfOAaPN6b/R1auqAavR6ZvV6cPV2bOuAbPV7aPZ2be2AbfZ7au17avZ3Zu53b+57a+97a/d4aO9J6CoeAAAAQHRSTlMAAQICAwMDBAQFBQUGBgcHBwgICAkKCgoLCwwMDAwNDg4ODw8QERITExQUFBUVFhcYGBkZGhobHBwdHR4eHx8gJ5uMWwAAA/FJREFUeNrt2G1XEkEYxvHZNk2xHGzdbKFl0cTwgdSkCKzu7/+t4pw6sAjtjIueE/f8r3fMO35nZnbuy5gVGcvfzJe0rnTfGI+MggGJRUZnbpPIhJKt88nU53JnFULvyISY6KAv8vPj0vr2rYwiE2Z2B9J+uNYcyyQxwWZvaeGH3G4bMjsvI/kcwTC/V+7kLoahlITzQojP3ZFgsJCh7IJQzpX0QFj4uMiY18eDMZ9bZCF9OQahnK6cm/Y7js0sh/LF3Auv1PlQd3MxbdXYIQspV44EEEAAAWTNDAYYkKdJbNMsLzYueZbaZ2iM46RVbHBaiZ9Js+nHEdli42N9XuSen5hGp1CQTuOJQDRsD99N4gMSpYWapNH6IJo83CIeILZQFesEaber79NCWRoukOpNEnW0gXQqD81w6ACxhbrYde7VuFCYeA2QRCNIsgZISyNIqz6IyhPjOjNVIFYniK3dmKU6QdLaJUimEySrDZLrBMlrgxRKU7sxCw/EMe0CAggggADySJCqxixIkKpNEh6IozELD8RxjQACCCCAAPJIkKrGLEgQXqqAAEJjxrQLCCCAAEJjRmNGY8a0CwgggABCYwYIfQgggNCYMe0CAggggNCY0ZjRmDHtAgIIIIAAQmNGHwIIIDRmTLuAAAIIIDRmNGY0Zky7gAACCCCA0JjRhwACCI0Z0y4ggAACCI0ZjRmNGdMuIIAAAgggNGb0IYAAQmPGtAsIIIAAQmNGY0ZjxrQLCCCAAAIIjRl9CCCA0Jgx7QICCCCA0JjRmNGYMe0CAggggABCY0YfAgggNGZMu4AAAgggNGY0ZjRmTLuAAAIIIIDQmNGHAAIIjRnTLiCAAAIIjRmNGY0ZIEy7gAACCCA0ZvQhgABCY8a0CwgggABCY0ZjBgiNGdMuIIAAAgiN2f/Sh+Q6PfLaIJlOkKw2SKoTJK3dmFmdILb2tBvrBIlrg5iWRo+WqQ+SaARJ1gCJAzsxThCN16p1vNurGjNjoo42j07kAHFskoY2kEbl33U0ZgoPjXW+Rl0gkarnahqtDaJKxMPDDWIiNafGenh4gExvVhXfmk7Da6L1AVGxSby2h6MxK79Zk42ea1pJbJ48sU2zDezQ8iy1z6BBwoyjMQsvXp8YQAAhgADilRfyy+wf8WqZZUfGZihvgZiB3FybC+kCUU5XLkAo50C+gbBQdUzkAIVyejIAYfFTI1solHP2HgNCnHn5AYNy4jvpoVB6fVzL91cwzLJ9Lfd7S0jhehxO5H5/yePr1W6gHonI7fJ5ORSR/n6Q2yQanq763zuXU5LJZRKiyD/W9/pjkdPZz0/yJ8fqVyry+qQZDMjJKoDfy8bRVhHhQTwAAAAASUVORK5CYII=\");\n  z-index: -1; }\n\n@media (max-width: 575.98px) {\n  .auth-wrapper.auth-v1 .auth-inner:after {\n    display: none; } }\n\n.auth-wrapper.auth-v2 {\n  align-items: flex-start; }\n\n.auth-wrapper.auth-v2 .auth-inner {\n  height: 100vh;\n  overflow-y: auto;\n  height: calc(var(--vh, 1vh) * 100); }\n\n.auth-wrapper.auth-v2 .brand-logo {\n  position: absolute;\n  top: 2rem;\n  left: 2rem;\n  margin: 0;\n  z-index: 1; }\n\n.auth-wrapper.auth-v1 .auth-inner {\n  max-width: 400px; }\n\n.auth-wrapper .brand-logo {\n  display: flex;\n  justify-content: center;\n  margin: 1rem 0 2rem 0; }\n\n.auth-wrapper .brand-logo .brand-text {\n  font-weight: 600; }\n\n.auth-wrapper .auth-footer-btn .btn {\n  padding: 0.6rem !important; }\n\n.auth-wrapper .auth-footer-btn .btn:not(:last-child) {\n  margin-right: 1rem; }\n\n@media (min-width: 1200px) {\n  .auth-wrapper.auth-v2 .auth-card {\n    width: 400px; } }\n\n.auth-wrapper .auth-bg {\n  background-color: #fff; }\n\n.dark-layout .auth-wrapper .auth-bg {\n  background-color: #283046; }\n\n@media (max-height: 625px) {\n  .dark-layout .auth-wrapper .auth-inner {\n    background-color: #283046; }\n  .auth-wrapper .auth-bg {\n    padding-top: 3rem; }\n  .auth-wrapper .auth-inner {\n    background-color: #fff;\n    padding-bottom: 1rem; }\n  .auth-wrapper.auth-v2 .brand-logo {\n    width: 100%;\n    display: flex;\n    justify-content: unset;\n    position: relative;\n    left: 0;\n    padding-left: 1.5rem; } }\n"
  },
  {
    "path": "public/backend/css/pages/register.css",
    "content": ""
  },
  {
    "path": "public/backend/css/pages/search.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\n#search-results .media-list .media {\n  padding: 0.5rem 1rem; }\n\n#search-results .media-list .media-body .list-inline i {\n  font-size: 1.2rem; }\n\n.search-menu .search-filter, .search-menu .dropdown-toggle {\n  padding: 0.55rem 1rem !important;\n  cursor: pointer;\n  background-color: #fff;\n  box-shadow: 0 15px 30px 0 rgba(0, 0, 0, 0.11), 0 5px 15px 0 rgba(0, 0, 0, 0.08); }\n\n.search-menu .dropdown-toggle {\n  border-radius: 1.5rem !important; }\n  .search-menu .dropdown-toggle::after {\n    display: none; }\n\n.search-result-info .btn.dropdown-toggle::after {\n  left: 0; }\n\n@media only screen and (min-width: 577px) {\n  #search-results li.media .media-object {\n    width: 100px; }\n  #search-results li.media iframe {\n    width: 100px;\n    height: 65px; } }\n\n@media only screen and (max-width: 576px) {\n  #search-results li.media .media-left {\n    width: 100%; }\n    #search-results li.media .media-left img, #search-results li.media .media-left iframe {\n      width: 100%;\n      text-align: center; } }\n"
  },
  {
    "path": "public/backend/css/pages/timeline.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\n/* Timeline */\n.timeline {\n  position: relative;\n  display: block;\n  margin: 0;\n  padding: 10px 0;\n  list-style: none; }\n  .timeline:after {\n    content: \" \";\n    display: table;\n    clear: both; }\n  .timeline:before {\n    content: \" \";\n    display: table; }\n  .timeline > li {\n    list-style: none; }\n    .timeline > li:nth-child(even) {\n      float: left;\n      clear: left; }\n    .timeline > li:nth-child(odd) {\n      float: right;\n      clear: right; }\n  .timeline .media {\n    border-bottom: 1px solid #eee;\n    font-size: 13px; }\n    .timeline .media p {\n      font-size: 13px; }\n    .timeline .media:last-child {\n      border-bottom: 0; }\n\n.timeline-line + .timeline-item {\n  margin-top: -20px; }\n\n.timeline-group {\n  display: block;\n  position: relative;\n  margin: 20px 0;\n  text-align: center;\n  float: none !important;\n  z-index: 1; }\n\n.timeline-poster {\n  margin-top: -20px; }\n  .timeline-poster .btn-link {\n    color: #a1aab0; }\n    .timeline-poster .btn-link:active {\n      color: #3e5771; }\n    .timeline-poster .btn-link:focus {\n      color: #3e5771; }\n    .timeline-poster .btn-link:hover {\n      color: #3e5771; }\n  .timeline-poster .btn-link.active {\n    color: #3e5771; }\n\n#timeline.timeline-center .timeline-line {\n  display: inline-block;\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 50%;\n  width: 2px;\n  background-color: #ddd;\n  transform: translate(-50%, 0); }\n\n#timeline.timeline-center .timeline-item {\n  position: relative;\n  display: inline-block;\n  width: 50%;\n  padding: 0 50px 35px; }\n  #timeline.timeline-center .timeline-item:nth-child(even) {\n    padding: 0px 35px 50px 0px; }\n    #timeline.timeline-center .timeline-item:nth-child(even):after {\n      content: '';\n      position: absolute;\n      right: 19px;\n      top: 10px;\n      width: 0;\n      height: 0;\n      border-top: 12px solid transparent;\n      border-bottom: 12px solid transparent;\n      border-left: 12px solid #ccc;\n      z-index: 1;\n      right: 25px;\n      top: 20px;\n      border-left: 11px solid #fff; }\n    #timeline.timeline-center .timeline-item:nth-child(even):before {\n      content: '';\n      position: absolute;\n      right: 24px;\n      top: 20px;\n      width: 0;\n      height: 0;\n      border-top: 12px solid transparent;\n      border-bottom: 12px solid transparent;\n      border-left: 12px solid #ccc;\n      z-index: 1; }\n    #timeline.timeline-center .timeline-item:nth-child(even) > .timeline-badge {\n      right: -20px; }\n  #timeline.timeline-center .timeline-item:nth-child(odd) {\n    padding: 0px 0px 50px 35px; }\n    #timeline.timeline-center .timeline-item:nth-child(odd):after {\n      content: '';\n      position: absolute;\n      left: 19px;\n      top: 10px;\n      width: 0;\n      height: 0;\n      border-top: 12px solid transparent;\n      border-bottom: 12px solid transparent;\n      border-right: 12px solid #ccc;\n      z-index: 1;\n      left: 25px;\n      top: 20px;\n      border-right: 11px solid #fff; }\n    #timeline.timeline-center .timeline-item:nth-child(odd):before {\n      content: '';\n      position: absolute;\n      left: 24px;\n      top: 20px;\n      width: 0;\n      height: 0;\n      border-top: 12px solid transparent;\n      border-bottom: 12px solid transparent;\n      border-right: 12px solid #ccc;\n      z-index: 1; }\n    #timeline.timeline-center .timeline-item:nth-child(odd) > .timeline-badge {\n      left: -20px; }\n  #timeline.timeline-center .timeline-item > .timeline-badge {\n    position: absolute;\n    top: 12px;\n    z-index: 1; }\n    #timeline.timeline-center .timeline-item > .timeline-badge > span {\n      display: inline-block;\n      width: 40px;\n      height: 40px;\n      border-radius: 50%;\n      text-align: center;\n      text-decoration: none;\n      transition: all ease .3s; }\n      #timeline.timeline-center .timeline-item > .timeline-badge > span i {\n        color: #fff;\n        font-size: 1.6rem;\n        display: block;\n        line-height: 40px;\n        top: 0; }\n      #timeline.timeline-center .timeline-item > .timeline-badge > span:active {\n        transform: scale(1.1); }\n      #timeline.timeline-center .timeline-item > .timeline-badge > span:focus {\n        transform: scale(1.1); }\n      #timeline.timeline-center .timeline-item > .timeline-badge > span:hover {\n        transform: scale(1.1); }\n    #timeline.timeline-center .timeline-item > .timeline-badge > a.active {\n      transform: scale(1.1); }\n  #timeline.timeline-center .timeline-item > .timeline-panel {\n    position: relative;\n    background-color: #fff;\n    border: 1px solid #ddd;\n    border-radius: 4px; }\n    #timeline.timeline-center .timeline-item > .timeline-panel:hover .timeline-actions {\n      display: block; }\n\n#timeline.timeline-right .timeline-line {\n  display: inline-block;\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  right: 12px;\n  width: 2px;\n  background-color: #ddd;\n  transform: translate(-50%, 0); }\n\n#timeline.timeline-right .timeline-group {\n  text-align: right; }\n\n#timeline.timeline-right .timeline-item {\n  position: relative;\n  display: inline-block;\n  width: 100%;\n  padding: 0px 43px 35px 0px; }\n  #timeline.timeline-right .timeline-item:after {\n    content: '';\n    position: absolute;\n    right: 33px;\n    top: 21px;\n    width: 0;\n    height: 0;\n    z-index: 1;\n    border-top: 11px solid #f8f8f8;\n    border-bottom: 11px solid #f8f8f8;\n    border-left: 11px solid #fff; }\n  #timeline.timeline-right .timeline-item:before {\n    content: '';\n    position: absolute;\n    right: 32px;\n    top: 20px;\n    width: 0;\n    height: 0;\n    border-top: 12px solid transparent;\n    border-bottom: 12px solid transparent;\n    border-left: 12px solid #ccc;\n    z-index: 1; }\n  #timeline.timeline-right .timeline-item > .timeline-badge {\n    right: -8px; }\n  #timeline.timeline-right .timeline-item > .timeline-badge {\n    position: absolute;\n    top: 12px;\n    z-index: 1; }\n    #timeline.timeline-right .timeline-item > .timeline-badge > span {\n      display: inline-block;\n      width: 40px;\n      height: 40px;\n      border-radius: 50%;\n      text-align: center;\n      text-decoration: none;\n      transition: all ease .3s; }\n      #timeline.timeline-right .timeline-item > .timeline-badge > span i {\n        color: #fff;\n        font-size: 1.6rem;\n        display: block;\n        line-height: 40px;\n        top: 0; }\n      #timeline.timeline-right .timeline-item > .timeline-badge > span:active {\n        transform: scale(1.1); }\n      #timeline.timeline-right .timeline-item > .timeline-badge > span:focus {\n        transform: scale(1.1); }\n      #timeline.timeline-right .timeline-item > .timeline-badge > span:hover {\n        transform: scale(1.1); }\n    #timeline.timeline-right .timeline-item > .timeline-badge > a.active {\n      transform: scale(1.1); }\n  #timeline.timeline-right .timeline-item > .timeline-panel {\n    position: relative;\n    background-color: #fff;\n    border: 1px solid #ddd;\n    border-radius: 4px; }\n    #timeline.timeline-right .timeline-item > .timeline-panel:hover .timeline-actions {\n      display: block; }\n\n#timeline.timeline-right .timeline-item.block:nth-child(even):before {\n  right: 8px;\n  left: auto; }\n\n#timeline.timeline-right .timeline-item.block:nth-child(even):after {\n  right: 11px;\n  left: auto; }\n\n#timeline.timeline-right .timeline-item.block:nth-child(odd):after {\n  right: 8px;\n  right: auto; }\n\n#timeline.timeline-left .timeline-line {\n  display: inline-block;\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 12px;\n  width: 2px;\n  background-color: #ddd;\n  transform: translate(-50%, 0); }\n\n#timeline.timeline-left .timeline-group {\n  text-align: left; }\n\n#timeline.timeline-left .timeline-item {\n  position: relative;\n  display: inline-block;\n  width: 100%;\n  padding: 0 0 35px 43px; }\n  #timeline.timeline-left .timeline-item:after {\n    content: '';\n    position: absolute;\n    left: 33px;\n    top: 21px;\n    width: 0;\n    height: 0;\n    z-index: 1;\n    border-top: 11px solid #f8f8f8;\n    border-bottom: 11px solid #f8f8f8;\n    border-right: 11px solid #fff; }\n  #timeline.timeline-left .timeline-item:before {\n    content: '';\n    position: absolute;\n    left: 32px;\n    top: 20px;\n    width: 0;\n    height: 0;\n    border-top: 12px solid transparent;\n    border-bottom: 12px solid transparent;\n    border-right: 12px solid #ccc;\n    z-index: 1; }\n  #timeline.timeline-left .timeline-item > .timeline-badge {\n    left: -8px; }\n  #timeline.timeline-left .timeline-item > .timeline-badge {\n    position: absolute;\n    top: 12px;\n    z-index: 1; }\n    #timeline.timeline-left .timeline-item > .timeline-badge > span {\n      display: inline-block;\n      width: 40px;\n      height: 40px;\n      border-radius: 50%;\n      text-align: center;\n      text-decoration: none;\n      transition: all ease .3s; }\n      #timeline.timeline-left .timeline-item > .timeline-badge > span i {\n        color: #fff;\n        font-size: 1.6rem;\n        display: block;\n        line-height: 40px;\n        top: 0; }\n      #timeline.timeline-left .timeline-item > .timeline-badge > span:active {\n        transform: scale(1.1); }\n      #timeline.timeline-left .timeline-item > .timeline-badge > span:focus {\n        transform: scale(1.1); }\n      #timeline.timeline-left .timeline-item > .timeline-badge > span:hover {\n        transform: scale(1.1); }\n    #timeline.timeline-left .timeline-item > .timeline-badge > a.active {\n      transform: scale(1.1); }\n  #timeline.timeline-left .timeline-item > .timeline-panel {\n    position: relative;\n    background-color: #fff;\n    border: 1px solid #ddd;\n    border-radius: 4px; }\n    #timeline.timeline-left .timeline-item > .timeline-panel:hover .timeline-actions {\n      display: block; }\n\n#timeline .timeline-item.block:nth-child(even) {\n  width: 100% !important;\n  margin-top: 5px; }\n  #timeline .timeline-item.block:nth-child(even):after {\n    left: 50%;\n    right: auto;\n    top: -11px;\n    border: 0;\n    border-left: 12px solid transparent;\n    border-right: 12px solid transparent;\n    border-bottom: 12px solid #ccc;\n    transform: translate(-50%, 0);\n    top: -10px;\n    border: 0;\n    border-left: 11px solid #f8f8f8;\n    border-right: 11px solid #f8f8f8;\n    border-bottom: 11px solid #fff; }\n  #timeline .timeline-item.block:nth-child(even):before {\n    left: 50%;\n    right: auto;\n    top: -11px;\n    border: 0;\n    border-left: 12px solid transparent;\n    border-right: 12px solid transparent;\n    border-bottom: 12px solid #ccc;\n    transform: translate(-50%, 0); }\n  #timeline .timeline-item.block:nth-child(even) > .timeline-badge {\n    top: -28px;\n    left: 50%;\n    right: auto;\n    transform: translate(-50%, 0); }\n\n#timeline .timeline-item.block:nth-child(odd) {\n  width: 100% !important;\n  margin-top: 5px; }\n  #timeline .timeline-item.block:nth-child(odd):after {\n    left: 50%;\n    right: auto;\n    top: -11px;\n    border: 0;\n    border-left: 12px solid transparent;\n    border-right: 12px solid transparent;\n    border-bottom: 12px solid #ccc;\n    transform: translate(-50%, 0);\n    top: -10px;\n    border: 0;\n    border-left: 11px solid #f8f8f8;\n    border-right: 11px solid #f8f8f8;\n    border-bottom: 11px solid #fff; }\n  #timeline .timeline-item.block:nth-child(odd):before {\n    left: 50%;\n    right: auto;\n    top: -11px;\n    border: 0;\n    border-left: 12px solid transparent;\n    border-right: 12px solid transparent;\n    border-bottom: 12px solid #ccc;\n    transform: translate(-50%, 0); }\n  #timeline .timeline-item.block:nth-child(odd) > .timeline-badge {\n    top: -28px;\n    left: 50%;\n    right: auto;\n    transform: translate(-50%, 0); }\n\n.timeline-actions {\n  display: none; }\n\n.timeline-content {\n  padding: 15px; }\n\n.timeline-footer {\n  padding: 15px;\n  border-top: 1px solid #eee;\n  background-color: #fbfcfc;\n  border-radius: 0 0 5px 5px; }\n\n.timeline-heading {\n  padding: 15px;\n  font-size: 20px; }\n\n.timeline-liveliness {\n  padding: 15px;\n  border-top: 1px solid #eee;\n  background-color: #fbfcfc; }\n\n.timeline-heading + .timeline-content {\n  padding-top: 0; }\n\n.timeline-date {\n  font-size: 14px;\n  color: #aaa; }\n\n.timeline-embed {\n  position: relative;\n  padding-bottom: 56.25%;\n  padding-top: 25px;\n  height: 0; }\n  .timeline-embed .embed-element {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%; }\n  .timeline-embed embed {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%; }\n  .timeline-embed iframe {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%; }\n  .timeline-embed object {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%; }\n\n.timeline-img {\n  display: block;\n  padding: 5px 0; }\n\n.timeline-img.first {\n  margin-right: -10px; }\n\n.timeline-img.middle {\n  margin-right: -10px;\n  margin-left: -10px; }\n\n.timeline-img.last {\n  margin-left: -10px; }\n\n.timeline-resume {\n  border-top: 1px solid #eee;\n  background-color: #fbfcfc; }\n\n.timeline-avatar {\n  margin-top: -2px;\n  margin-right: 10px; }\n\n.timeline-title {\n  margin: 0;\n  padding: 0;\n  font-size: 14px;\n  line-height: 1.42857;\n  font-weight: 600;\n  color: #3e5771;\n  text-decoration: none; }\n  .timeline-title > small {\n    display: block;\n    font-size: 12px;\n    line-height: 1.5;\n    color: #a1aab0;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap; }\n\n.wrapkit-content-rtl .timeline-avatar {\n  margin-right: 0;\n  margin-left: 10px; }\n\n@media (min-width: 992px) {\n  .timeline-item:nth-child(even) {\n    padding: 0px 35px 50px 0px; }\n  .timeline-item:nth-child(odd) {\n    padding: 0 0px 50px 35px; } }\n\n@media (max-width: 991.98px) {\n  .timeline {\n    padding-left: 15px; }\n  .timeline-line {\n    left: 15px; }\n  .timeline-group {\n    display: inline-block;\n    margin-left: -22px; }\n  .timeline-item {\n    width: 100% !important;\n    margin-top: 0 !important;\n    padding-right: 10px; }\n    .timeline-item:nth-child(even):after {\n      left: 19px;\n      top: 10px;\n      border: 0;\n      border-top: 12px solid transparent;\n      border-bottom: 12px solid transparent;\n      border-right: 12px solid #ccc;\n      transform: translate(0, 0);\n      left: 40px;\n      top: 21px;\n      border-top: 11px solid #f8f8f8;\n      border-bottom: 11px solid #f8f8f8;\n      border-right: 11px solid #fff; }\n    .timeline-item:nth-child(even):before {\n      left: 39px;\n      top: 20px;\n      border: 0;\n      border-top: 12px solid transparent;\n      border-bottom: 12px solid transparent;\n      border-right: 12px solid #ccc;\n      transform: translate(0, 0); }\n    .timeline-item:nth-child(even) > .timeline-badge {\n      top: 12px;\n      left: -20px;\n      right: auto;\n      transform: translate(0, 0); }\n    .timeline-item:nth-child(odd):after {\n      left: 19px;\n      top: 10px;\n      border: 0;\n      border-top: 12px solid transparent;\n      border-bottom: 12px solid transparent;\n      border-right: 12px solid #ccc;\n      transform: translate(0, 0);\n      left: 40px;\n      top: 21px;\n      border-top: 11px solid #f8f8f8;\n      border-bottom: 11px solid #f8f8f8;\n      border-right: 11px solid #fff; }\n    .timeline-item:nth-child(odd):before {\n      left: 39px;\n      top: 20px;\n      border: 0;\n      border-top: 12px solid transparent;\n      border-bottom: 12px solid transparent;\n      border-right: 12px solid #ccc;\n      transform: translate(0, 0); }\n    .timeline-item:nth-child(odd) > .timeline-badge {\n      top: 12px;\n      left: -20px;\n      right: auto;\n      transform: translate(0, 0); }\n  .timeline-item.block:nth-child(even) {\n    padding-bottom: 0; }\n    .timeline-item.block:nth-child(even):after {\n      left: 19px;\n      top: 10px;\n      border: 0;\n      border-top: 12px solid transparent;\n      border-bottom: 12px solid transparent;\n      border-right: 12px solid #ccc;\n      transform: translate(0, 0);\n      left: 20px;\n      top: 11px;\n      border-top: 11px solid #f8f8f8;\n      border-bottom: 11px solid #f8f8f8;\n      border-right: 11px solid #fff; }\n    .timeline-item.block:nth-child(even):before {\n      left: 19px;\n      top: 10px;\n      border: 0;\n      border-top: 12px solid transparent;\n      border-bottom: 12px solid transparent;\n      border-right: 12px solid #ccc;\n      transform: translate(0, 0); }\n    .timeline-item.block:nth-child(even) > .timeline-badge {\n      top: 12px;\n      left: -6px;\n      right: auto;\n      transform: translate(0, 0); }\n  .timeline-item.block:nth-child(odd) {\n    padding-bottom: 0; }\n    .timeline-item.block:nth-child(odd):after {\n      left: 19px;\n      top: 10px;\n      border: 0;\n      border-top: 12px solid transparent;\n      border-bottom: 12px solid transparent;\n      border-right: 12px solid #ccc;\n      transform: translate(0, 0);\n      left: 20px;\n      top: 11px;\n      border-top: 11px solid #f8f8f8;\n      border-bottom: 11px solid #f8f8f8;\n      border-right: 11px solid #fff; }\n    .timeline-item.block:nth-child(odd):before {\n      left: 19px;\n      top: 10px;\n      border: 0;\n      border-top: 12px solid transparent;\n      border-bottom: 12px solid transparent;\n      border-right: 12px solid #ccc;\n      transform: translate(0, 0); }\n    .timeline-item.block:nth-child(odd) > .timeline-badge {\n      top: 12px;\n      left: -6px;\n      right: auto;\n      transform: translate(0, 0); } }\n\n@media (max-width: 991.98px) {\n  #timeline.timeline-wrapper .timeline {\n    padding: 0; }\n    #timeline.timeline-wrapper .timeline .card-body {\n      text-align: left; }\n  #timeline.timeline-wrapper .timeline-line {\n    display: inline-block;\n    position: absolute;\n    top: 0;\n    bottom: 0;\n    left: 50%;\n    width: 2px;\n    background-color: #ddd;\n    transform: translate(-50%, 0); }\n  #timeline.timeline-wrapper .timeline-group {\n    display: block;\n    margin-left: -6px;\n    text-align: center; }\n  #timeline.timeline-wrapper .timeline-item {\n    display: block;\n    padding: 20px 0 20px !important; }\n    #timeline.timeline-wrapper .timeline-item:nth-child(even) {\n      float: none;\n      clear: both; }\n      #timeline.timeline-wrapper .timeline-item:nth-child(even):after {\n        display: none; }\n      #timeline.timeline-wrapper .timeline-item:nth-child(even):before {\n        display: none; }\n    #timeline.timeline-wrapper .timeline-item:nth-child(odd) {\n      float: none;\n      clear: both; }\n      #timeline.timeline-wrapper .timeline-item:nth-child(odd):after {\n        display: none; }\n      #timeline.timeline-wrapper .timeline-item:nth-child(odd):before {\n        display: none; }\n    #timeline.timeline-wrapper .timeline-item > .timeline-badge {\n      top: 0px !important;\n      left: 45% !important; }\n  #timeline.timeline-wrapper .timeline-item.block:nth-child(even) {\n    float: none;\n    clear: both; }\n    #timeline.timeline-wrapper .timeline-item.block:nth-child(even):after {\n      display: none; }\n    #timeline.timeline-wrapper .timeline-item.block:nth-child(even):before {\n      display: none; }\n  #timeline.timeline-wrapper .timeline-item.block:nth-child(odd) {\n    float: none;\n    clear: both; }\n    #timeline.timeline-wrapper .timeline-item.block:nth-child(odd):after {\n      display: none; }\n    #timeline.timeline-wrapper .timeline-item.block:nth-child(odd):before {\n      display: none; }\n  #timeline.timeline-wrapper .timeline-item.timeline-poster > .timeline-badge {\n    display: none; } }\n\n@media (max-width: 575.98px) {\n  .timeline-item > .timeline-badge {\n    top: 0px !important;\n    left: 44% !important; } }\n"
  },
  {
    "path": "public/backend/css/pages/user-settings.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\n.user-form .dropzone {\n  min-height: 200px;\n  width: 200px; }\n  .user-form .dropzone .dz-message {\n    font-size: 1rem;\n    height: auto; }\n    .user-form .dropzone .dz-message:before {\n      font-size: 2rem; }\n"
  },
  {
    "path": "public/backend/css/pages/users.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\n#user-profile .profile-img-container {\n  position: absolute;\n  bottom: -3rem;\n  left: 10%;\n  width: 80%; }\n  #user-profile .profile-img-container img {\n    border: 0.3rem solid #fff;\n    height: 85px;\n    width: 85px; }\n\n#user-profile #profile-info .card-header i {\n  position: relative;\n  top: -3px; }\n\n#user-profile #profile-info .user-like i {\n  font-size: 1.7rem; }\n\n#user-profile #profile-info .suggested-block .user-page-info p {\n  margin-bottom: 0;\n  font-weight: 500; }\n\n#user-profile #profile-info .suggested-block i {\n  cursor: pointer; }\n\n#user-profile .relative {\n  position: relative; }\n\n#user-profile .profile-header-nav {\n  background-color: #fff;\n  padding: 0.75rem 1rem; }\n  #user-profile .profile-header-nav .navbar {\n    justify-content: flex-end; }\n    #user-profile .profile-header-nav .navbar .navbar-toggler {\n      font-size: 1.7rem;\n      color: #626262; }\n      #user-profile .profile-header-nav .navbar .navbar-toggler:focus {\n        outline: none; }\n\n#user-profile .user-latest-img {\n  transition: all .2s ease-in-out; }\n  #user-profile .user-latest-img:hover {\n    transform: translateY(-4px) scale(1.2);\n    z-index: 30; }\n\n#user-profile .block-element .spinner-border {\n  border-width: 2px; }\n\n@media only screen and (min-width: 992px) {\n  #user-profile .profile-header-nav .navbar .nav-item {\n    padding-left: 2.25rem !important;\n    padding-right: 2.25rem !important; } }\n\n@media only screen and (max-width: 992px) {\n  #user-profile .user-latest-img img {\n    width: 100%; } }\n\n@media only screen and (max-width: 991px) and (min-width: 768px) {\n  #user-profile .profile-header-nav .navbar .nav-item {\n    padding-left: 1.5rem !important;\n    padding-right: 1.5rem !important; } }\n"
  },
  {
    "path": "public/backend/css/plugins/animate/animate.css",
    "content": ".animated {\n  -webkit-animation-duration: 1s;\n  animation-duration: 1s;\n  -webkit-animation-fill-mode: both;\n  animation-fill-mode: both; }\n  .animated.infinite {\n    -webkit-animation-iteration-count: infinite;\n    animation-iteration-count: infinite; }\n  .animated.hinge {\n    -webkit-animation-duration: 2s;\n    animation-duration: 2s; }\n  .animated.flipOutX, .animated.flipOutY, .animated.bounceIn, .animated.bounceOut {\n    -webkit-animation-duration: .75s;\n    animation-duration: .75s; }\n\n@-webkit-keyframes bounce {\n  from, 20%, 53%, 80%, to {\n    -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n    animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0); }\n  40%, 43% {\n    -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n    animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n    -webkit-transform: translate3d(0, -30px, 0);\n    transform: translate3d(0, -30px, 0); }\n  70% {\n    -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n    animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n    -webkit-transform: translate3d(0, -15px, 0);\n    transform: translate3d(0, -15px, 0); }\n  90% {\n    -webkit-transform: translate3d(0, -4px, 0);\n    transform: translate3d(0, -4px, 0); } }\n\n@keyframes bounce {\n  from, 20%, 53%, 80%, to {\n    -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n    animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0); }\n  40%, 43% {\n    -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n    animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n    -webkit-transform: translate3d(0, -30px, 0);\n    transform: translate3d(0, -30px, 0); }\n  70% {\n    -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n    animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n    -webkit-transform: translate3d(0, -15px, 0);\n    transform: translate3d(0, -15px, 0); }\n  90% {\n    -webkit-transform: translate3d(0, -4px, 0);\n    transform: translate3d(0, -4px, 0); } }\n\n.bounce {\n  -webkit-animation-name: bounce;\n  animation-name: bounce;\n  -webkit-transform-origin: center bottom;\n  transform-origin: center bottom; }\n\n@-webkit-keyframes flash {\n  from, 50%, to {\n    opacity: 1; }\n  25%, 75% {\n    opacity: 0; } }\n\n@keyframes flash {\n  from, 50%, to {\n    opacity: 1; }\n  25%, 75% {\n    opacity: 0; } }\n\n.flash {\n  -webkit-animation-name: flash;\n  animation-name: flash; }\n\n/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */\n@-webkit-keyframes pulse {\n  from {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1); }\n  50% {\n    -webkit-transform: scale3d(1.05, 1.05, 1.05);\n    transform: scale3d(1.05, 1.05, 1.05); }\n  to {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1); } }\n\n@keyframes pulse {\n  from {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1); }\n  50% {\n    -webkit-transform: scale3d(1.05, 1.05, 1.05);\n    transform: scale3d(1.05, 1.05, 1.05); }\n  to {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1); } }\n\n.pulse {\n  -webkit-animation-name: pulse;\n  animation-name: pulse; }\n\n@-webkit-keyframes rubberBand {\n  from {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1); }\n  30% {\n    -webkit-transform: scale3d(1.25, 0.75, 1);\n    transform: scale3d(1.25, 0.75, 1); }\n  40% {\n    -webkit-transform: scale3d(0.75, 1.25, 1);\n    transform: scale3d(0.75, 1.25, 1); }\n  50% {\n    -webkit-transform: scale3d(1.15, 0.85, 1);\n    transform: scale3d(1.15, 0.85, 1); }\n  65% {\n    -webkit-transform: scale3d(0.95, 1.05, 1);\n    transform: scale3d(0.95, 1.05, 1); }\n  75% {\n    -webkit-transform: scale3d(1.05, 0.95, 1);\n    transform: scale3d(1.05, 0.95, 1); }\n  to {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1); } }\n\n@keyframes rubberBand {\n  from {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1); }\n  30% {\n    -webkit-transform: scale3d(1.25, 0.75, 1);\n    transform: scale3d(1.25, 0.75, 1); }\n  40% {\n    -webkit-transform: scale3d(0.75, 1.25, 1);\n    transform: scale3d(0.75, 1.25, 1); }\n  50% {\n    -webkit-transform: scale3d(1.15, 0.85, 1);\n    transform: scale3d(1.15, 0.85, 1); }\n  65% {\n    -webkit-transform: scale3d(0.95, 1.05, 1);\n    transform: scale3d(0.95, 1.05, 1); }\n  75% {\n    -webkit-transform: scale3d(1.05, 0.95, 1);\n    transform: scale3d(1.05, 0.95, 1); }\n  to {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1); } }\n\n.rubberBand {\n  -webkit-animation-name: rubberBand;\n  animation-name: rubberBand; }\n\n@-webkit-keyframes shake {\n  from, to {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0); }\n  10%, 30%, 50%, 70%, 90% {\n    -webkit-transform: translate3d(-10px, 0, 0);\n    transform: translate3d(-10px, 0, 0); }\n  20%, 40%, 60%, 80% {\n    -webkit-transform: translate3d(10px, 0, 0);\n    transform: translate3d(10px, 0, 0); } }\n\n@keyframes shake {\n  from, to {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0); }\n  10%, 30%, 50%, 70%, 90% {\n    -webkit-transform: translate3d(-10px, 0, 0);\n    transform: translate3d(-10px, 0, 0); }\n  20%, 40%, 60%, 80% {\n    -webkit-transform: translate3d(10px, 0, 0);\n    transform: translate3d(10px, 0, 0); } }\n\n.shake {\n  -webkit-animation-name: shake;\n  animation-name: shake; }\n\n@-webkit-keyframes headShake {\n  0% {\n    -webkit-transform: translateX(0);\n    transform: translateX(0); }\n  6.5% {\n    -webkit-transform: translateX(-6px) rotateY(-9deg);\n    transform: translateX(-6px) rotateY(-9deg); }\n  18.5% {\n    -webkit-transform: translateX(5px) rotateY(7deg);\n    transform: translateX(5px) rotateY(7deg); }\n  31.5% {\n    -webkit-transform: translateX(-3px) rotateY(-5deg);\n    transform: translateX(-3px) rotateY(-5deg); }\n  43.5% {\n    -webkit-transform: translateX(2px) rotateY(3deg);\n    transform: translateX(2px) rotateY(3deg); }\n  50% {\n    -webkit-transform: translateX(0);\n    transform: translateX(0); } }\n\n@keyframes headShake {\n  0% {\n    -webkit-transform: translateX(0);\n    transform: translateX(0); }\n  6.5% {\n    -webkit-transform: translateX(-6px) rotateY(-9deg);\n    transform: translateX(-6px) rotateY(-9deg); }\n  18.5% {\n    -webkit-transform: translateX(5px) rotateY(7deg);\n    transform: translateX(5px) rotateY(7deg); }\n  31.5% {\n    -webkit-transform: translateX(-3px) rotateY(-5deg);\n    transform: translateX(-3px) rotateY(-5deg); }\n  43.5% {\n    -webkit-transform: translateX(2px) rotateY(3deg);\n    transform: translateX(2px) rotateY(3deg); }\n  50% {\n    -webkit-transform: translateX(0);\n    transform: translateX(0); } }\n\n.headShake {\n  -webkit-animation-timing-function: ease-in-out;\n  animation-timing-function: ease-in-out;\n  -webkit-animation-name: headShake;\n  animation-name: headShake; }\n\n@-webkit-keyframes swing {\n  20% {\n    -webkit-transform: rotate3d(0, 0, 1, 15deg);\n    transform: rotate3d(0, 0, 1, 15deg); }\n  40% {\n    -webkit-transform: rotate3d(0, 0, 1, -10deg);\n    transform: rotate3d(0, 0, 1, -10deg); }\n  60% {\n    -webkit-transform: rotate3d(0, 0, 1, 5deg);\n    transform: rotate3d(0, 0, 1, 5deg); }\n  80% {\n    -webkit-transform: rotate3d(0, 0, 1, -5deg);\n    transform: rotate3d(0, 0, 1, -5deg); }\n  to {\n    -webkit-transform: rotate3d(0, 0, 1, 0deg);\n    transform: rotate3d(0, 0, 1, 0deg); } }\n\n@keyframes swing {\n  20% {\n    -webkit-transform: rotate3d(0, 0, 1, 15deg);\n    transform: rotate3d(0, 0, 1, 15deg); }\n  40% {\n    -webkit-transform: rotate3d(0, 0, 1, -10deg);\n    transform: rotate3d(0, 0, 1, -10deg); }\n  60% {\n    -webkit-transform: rotate3d(0, 0, 1, 5deg);\n    transform: rotate3d(0, 0, 1, 5deg); }\n  80% {\n    -webkit-transform: rotate3d(0, 0, 1, -5deg);\n    transform: rotate3d(0, 0, 1, -5deg); }\n  to {\n    -webkit-transform: rotate3d(0, 0, 1, 0deg);\n    transform: rotate3d(0, 0, 1, 0deg); } }\n\n.swing {\n  -webkit-transform-origin: top center;\n  transform-origin: top center;\n  -webkit-animation-name: swing;\n  animation-name: swing; }\n\n@-webkit-keyframes tada {\n  from {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1); }\n  10%, 20% {\n    -webkit-transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg);\n    transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg); }\n  30%, 50%, 70%, 90% {\n    -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);\n    transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); }\n  40%, 60%, 80% {\n    -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);\n    transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); }\n  to {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1); } }\n\n@keyframes tada {\n  from {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1); }\n  10%, 20% {\n    -webkit-transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg);\n    transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg); }\n  30%, 50%, 70%, 90% {\n    -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);\n    transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); }\n  40%, 60%, 80% {\n    -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);\n    transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); }\n  to {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1); } }\n\n.tada {\n  -webkit-animation-name: tada;\n  animation-name: tada; }\n\n/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */\n@-webkit-keyframes wobble {\n  from {\n    -webkit-transform: none;\n    transform: none; }\n  15% {\n    -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);\n    transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); }\n  30% {\n    -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);\n    transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); }\n  45% {\n    -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);\n    transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); }\n  60% {\n    -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);\n    transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); }\n  75% {\n    -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);\n    transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); }\n  to {\n    -webkit-transform: none;\n    transform: none; } }\n\n@keyframes wobble {\n  from {\n    -webkit-transform: none;\n    transform: none; }\n  15% {\n    -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);\n    transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); }\n  30% {\n    -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);\n    transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); }\n  45% {\n    -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);\n    transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); }\n  60% {\n    -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);\n    transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); }\n  75% {\n    -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);\n    transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); }\n  to {\n    -webkit-transform: none;\n    transform: none; } }\n\n.wobble {\n  -webkit-animation-name: wobble;\n  animation-name: wobble; }\n\n@-webkit-keyframes jello {\n  from, 11.1%, to {\n    -webkit-transform: none;\n    transform: none; }\n  22.2% {\n    -webkit-transform: skewX(-12.5deg) skewY(-12.5deg);\n    transform: skewX(-12.5deg) skewY(-12.5deg); }\n  33.3% {\n    -webkit-transform: skewX(6.25deg) skewY(6.25deg);\n    transform: skewX(6.25deg) skewY(6.25deg); }\n  44.4% {\n    -webkit-transform: skewX(-3.125deg) skewY(-3.125deg);\n    transform: skewX(-3.125deg) skewY(-3.125deg); }\n  55.5% {\n    -webkit-transform: skewX(1.5625deg) skewY(1.5625deg);\n    transform: skewX(1.5625deg) skewY(1.5625deg); }\n  66.6% {\n    -webkit-transform: skewX(-0.78125deg) skewY(-0.78125deg);\n    transform: skewX(-0.78125deg) skewY(-0.78125deg); }\n  77.7% {\n    -webkit-transform: skewX(0.39063deg) skewY(0.39063deg);\n    transform: skewX(0.39063deg) skewY(0.39063deg); }\n  88.8% {\n    -webkit-transform: skewX(-0.19531deg) skewY(-0.19531deg);\n    transform: skewX(-0.19531deg) skewY(-0.19531deg); } }\n\n@keyframes jello {\n  from, 11.1%, to {\n    -webkit-transform: none;\n    transform: none; }\n  22.2% {\n    -webkit-transform: skewX(-12.5deg) skewY(-12.5deg);\n    transform: skewX(-12.5deg) skewY(-12.5deg); }\n  33.3% {\n    -webkit-transform: skewX(6.25deg) skewY(6.25deg);\n    transform: skewX(6.25deg) skewY(6.25deg); }\n  44.4% {\n    -webkit-transform: skewX(-3.125deg) skewY(-3.125deg);\n    transform: skewX(-3.125deg) skewY(-3.125deg); }\n  55.5% {\n    -webkit-transform: skewX(1.5625deg) skewY(1.5625deg);\n    transform: skewX(1.5625deg) skewY(1.5625deg); }\n  66.6% {\n    -webkit-transform: skewX(-0.78125deg) skewY(-0.78125deg);\n    transform: skewX(-0.78125deg) skewY(-0.78125deg); }\n  77.7% {\n    -webkit-transform: skewX(0.39063deg) skewY(0.39063deg);\n    transform: skewX(0.39063deg) skewY(0.39063deg); }\n  88.8% {\n    -webkit-transform: skewX(-0.19531deg) skewY(-0.19531deg);\n    transform: skewX(-0.19531deg) skewY(-0.19531deg); } }\n\n.jello {\n  -webkit-animation-name: jello;\n  animation-name: jello;\n  -webkit-transform-origin: center;\n  transform-origin: center; }\n\n@-webkit-keyframes bounceIn {\n  from, 20%, 40%, 60%, 80%, to {\n    -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n    animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); }\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  20% {\n    -webkit-transform: scale3d(1.1, 1.1, 1.1);\n    transform: scale3d(1.1, 1.1, 1.1); }\n  40% {\n    -webkit-transform: scale3d(0.9, 0.9, 0.9);\n    transform: scale3d(0.9, 0.9, 0.9); }\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  80% {\n    -webkit-transform: scale3d(0.97, 0.97, 0.97);\n    transform: scale3d(0.97, 0.97, 0.97); }\n  to {\n    opacity: 1;\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1); } }\n\n@keyframes bounceIn {\n  from, 20%, 40%, 60%, 80%, to {\n    -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n    animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); }\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  20% {\n    -webkit-transform: scale3d(1.1, 1.1, 1.1);\n    transform: scale3d(1.1, 1.1, 1.1); }\n  40% {\n    -webkit-transform: scale3d(0.9, 0.9, 0.9);\n    transform: scale3d(0.9, 0.9, 0.9); }\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  80% {\n    -webkit-transform: scale3d(0.97, 0.97, 0.97);\n    transform: scale3d(0.97, 0.97, 0.97); }\n  to {\n    opacity: 1;\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1); } }\n\n.bounceIn {\n  -webkit-animation-name: bounceIn;\n  animation-name: bounceIn; }\n\n@-webkit-keyframes bounceInDown {\n  from, 60%, 75%, 90%, to {\n    -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n    animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); }\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -3000px, 0);\n    transform: translate3d(0, -3000px, 0); }\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 25px, 0);\n    transform: translate3d(0, 25px, 0); }\n  75% {\n    -webkit-transform: translate3d(0, -10px, 0);\n    transform: translate3d(0, -10px, 0); }\n  90% {\n    -webkit-transform: translate3d(0, 5px, 0);\n    transform: translate3d(0, 5px, 0); }\n  to {\n    -webkit-transform: none;\n    transform: none; } }\n\n@keyframes bounceInDown {\n  from, 60%, 75%, 90%, to {\n    -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n    animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); }\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -3000px, 0);\n    transform: translate3d(0, -3000px, 0); }\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 25px, 0);\n    transform: translate3d(0, 25px, 0); }\n  75% {\n    -webkit-transform: translate3d(0, -10px, 0);\n    transform: translate3d(0, -10px, 0); }\n  90% {\n    -webkit-transform: translate3d(0, 5px, 0);\n    transform: translate3d(0, 5px, 0); }\n  to {\n    -webkit-transform: none;\n    transform: none; } }\n\n.bounceInDown {\n  -webkit-animation-name: bounceInDown;\n  animation-name: bounceInDown; }\n\n@-webkit-keyframes bounceInLeft {\n  from, 60%, 75%, 90%, to {\n    -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n    animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); }\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(-3000px, 0, 0);\n    transform: translate3d(-3000px, 0, 0); }\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(25px, 0, 0);\n    transform: translate3d(25px, 0, 0); }\n  75% {\n    -webkit-transform: translate3d(-10px, 0, 0);\n    transform: translate3d(-10px, 0, 0); }\n  90% {\n    -webkit-transform: translate3d(5px, 0, 0);\n    transform: translate3d(5px, 0, 0); }\n  to {\n    -webkit-transform: none;\n    transform: none; } }\n\n@keyframes bounceInLeft {\n  from, 60%, 75%, 90%, to {\n    -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n    animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); }\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(-3000px, 0, 0);\n    transform: translate3d(-3000px, 0, 0); }\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(25px, 0, 0);\n    transform: translate3d(25px, 0, 0); }\n  75% {\n    -webkit-transform: translate3d(-10px, 0, 0);\n    transform: translate3d(-10px, 0, 0); }\n  90% {\n    -webkit-transform: translate3d(5px, 0, 0);\n    transform: translate3d(5px, 0, 0); }\n  to {\n    -webkit-transform: none;\n    transform: none; } }\n\n.bounceInLeft {\n  -webkit-animation-name: bounceInLeft;\n  animation-name: bounceInLeft; }\n\n@-webkit-keyframes bounceInRight {\n  from, 60%, 75%, 90%, to {\n    -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n    animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); }\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(3000px, 0, 0);\n    transform: translate3d(3000px, 0, 0); }\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(-25px, 0, 0);\n    transform: translate3d(-25px, 0, 0); }\n  75% {\n    -webkit-transform: translate3d(10px, 0, 0);\n    transform: translate3d(10px, 0, 0); }\n  90% {\n    -webkit-transform: translate3d(-5px, 0, 0);\n    transform: translate3d(-5px, 0, 0); }\n  to {\n    -webkit-transform: none;\n    transform: none; } }\n\n@keyframes bounceInRight {\n  from, 60%, 75%, 90%, to {\n    -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n    animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); }\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(3000px, 0, 0);\n    transform: translate3d(3000px, 0, 0); }\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(-25px, 0, 0);\n    transform: translate3d(-25px, 0, 0); }\n  75% {\n    -webkit-transform: translate3d(10px, 0, 0);\n    transform: translate3d(10px, 0, 0); }\n  90% {\n    -webkit-transform: translate3d(-5px, 0, 0);\n    transform: translate3d(-5px, 0, 0); }\n  to {\n    -webkit-transform: none;\n    transform: none; } }\n\n.bounceInRight {\n  -webkit-animation-name: bounceInRight;\n  animation-name: bounceInRight; }\n\n@-webkit-keyframes bounceInUp {\n  from, 60%, 75%, 90%, to {\n    -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n    animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); }\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 3000px, 0);\n    transform: translate3d(0, 3000px, 0); }\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, -20px, 0);\n    transform: translate3d(0, -20px, 0); }\n  75% {\n    -webkit-transform: translate3d(0, 10px, 0);\n    transform: translate3d(0, 10px, 0); }\n  90% {\n    -webkit-transform: translate3d(0, -5px, 0);\n    transform: translate3d(0, -5px, 0); }\n  to {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0); } }\n\n@keyframes bounceInUp {\n  from, 60%, 75%, 90%, to {\n    -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n    animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); }\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 3000px, 0);\n    transform: translate3d(0, 3000px, 0); }\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, -20px, 0);\n    transform: translate3d(0, -20px, 0); }\n  75% {\n    -webkit-transform: translate3d(0, 10px, 0);\n    transform: translate3d(0, 10px, 0); }\n  90% {\n    -webkit-transform: translate3d(0, -5px, 0);\n    transform: translate3d(0, -5px, 0); }\n  to {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0); } }\n\n.bounceInUp {\n  -webkit-animation-name: bounceInUp;\n  animation-name: bounceInUp; }\n\n@-webkit-keyframes bounceOut {\n  20% {\n    -webkit-transform: scale3d(0.9, 0.9, 0.9);\n    transform: scale3d(0.9, 0.9, 0.9); }\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  to {\n    opacity: 0;\n    -webkit-transform: scale3d(0.3, 0.3, 0.3);\n    transform: scale3d(0.3, 0.3, 0.3); } }\n\n@keyframes bounceOut {\n  20% {\n    -webkit-transform: scale3d(0.9, 0.9, 0.9);\n    transform: scale3d(0.9, 0.9, 0.9); }\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  to {\n    opacity: 0;\n    -webkit-transform: scale3d(0.3, 0.3, 0.3);\n    transform: scale3d(0.3, 0.3, 0.3); } }\n\n.bounceOut {\n  -webkit-animation-name: bounceOut;\n  animation-name: bounceOut; }\n\n@-webkit-keyframes bounceOutDown {\n  20% {\n    -webkit-transform: translate3d(0, 10px, 0);\n    transform: translate3d(0, 10px, 0); }\n  40%, 45% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, -20px, 0);\n    transform: translate3d(0, -20px, 0); }\n  to {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 2000px, 0);\n    transform: translate3d(0, 2000px, 0); } }\n\n@keyframes bounceOutDown {\n  20% {\n    -webkit-transform: translate3d(0, 10px, 0);\n    transform: translate3d(0, 10px, 0); }\n  40%, 45% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, -20px, 0);\n    transform: translate3d(0, -20px, 0); }\n  to {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 2000px, 0);\n    transform: translate3d(0, 2000px, 0); } }\n\n.bounceOutDown {\n  -webkit-animation-name: bounceOutDown;\n  animation-name: bounceOutDown; }\n\n@-webkit-keyframes bounceOutLeft {\n  20% {\n    opacity: 1;\n    -webkit-transform: translate3d(20px, 0, 0);\n    transform: translate3d(20px, 0, 0); }\n  to {\n    opacity: 0;\n    -webkit-transform: translate3d(-2000px, 0, 0);\n    transform: translate3d(-2000px, 0, 0); } }\n\n@keyframes bounceOutLeft {\n  20% {\n    opacity: 1;\n    -webkit-transform: translate3d(20px, 0, 0);\n    transform: translate3d(20px, 0, 0); }\n  to {\n    opacity: 0;\n    -webkit-transform: translate3d(-2000px, 0, 0);\n    transform: translate3d(-2000px, 0, 0); } }\n\n.bounceOutLeft {\n  -webkit-animation-name: bounceOutLeft;\n  animation-name: bounceOutLeft; }\n\n@-webkit-keyframes bounceOutRight {\n  20% {\n    opacity: 1;\n    -webkit-transform: translate3d(-20px, 0, 0);\n    transform: translate3d(-20px, 0, 0); }\n  to {\n    opacity: 0;\n    -webkit-transform: translate3d(2000px, 0, 0);\n    transform: translate3d(2000px, 0, 0); } }\n\n@keyframes bounceOutRight {\n  20% {\n    opacity: 1;\n    -webkit-transform: translate3d(-20px, 0, 0);\n    transform: translate3d(-20px, 0, 0); }\n  to {\n    opacity: 0;\n    -webkit-transform: translate3d(2000px, 0, 0);\n    transform: translate3d(2000px, 0, 0); } }\n\n.bounceOutRight {\n  -webkit-animation-name: bounceOutRight;\n  animation-name: bounceOutRight; }\n\n@-webkit-keyframes bounceOutUp {\n  20% {\n    -webkit-transform: translate3d(0, -10px, 0);\n    transform: translate3d(0, -10px, 0); }\n  40%, 45% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 20px, 0);\n    transform: translate3d(0, 20px, 0); }\n  to {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -2000px, 0);\n    transform: translate3d(0, -2000px, 0); } }\n\n@keyframes bounceOutUp {\n  20% {\n    -webkit-transform: translate3d(0, -10px, 0);\n    transform: translate3d(0, -10px, 0); }\n  40%, 45% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 20px, 0);\n    transform: translate3d(0, 20px, 0); }\n  to {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -2000px, 0);\n    transform: translate3d(0, -2000px, 0); } }\n\n.bounceOutUp {\n  -webkit-animation-name: bounceOutUp;\n  animation-name: bounceOutUp; }\n\n@-webkit-keyframes fadeIn {\n  from {\n    opacity: 0; }\n  to {\n    opacity: 1; } }\n\n@keyframes fadeIn {\n  from {\n    opacity: 0; }\n  to {\n    opacity: 1; } }\n\n.fadeIn {\n  -webkit-animation-name: fadeIn;\n  animation-name: fadeIn; }\n\n@-webkit-keyframes fadeInDown {\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -100%, 0);\n    transform: translate3d(0, -100%, 0); }\n  to {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none; } }\n\n@keyframes fadeInDown {\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -100%, 0);\n    transform: translate3d(0, -100%, 0); }\n  to {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none; } }\n\n.fadeInDown {\n  -webkit-animation-name: fadeInDown;\n  animation-name: fadeInDown; }\n\n@-webkit-keyframes fadeInDownBig {\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -2000px, 0);\n    transform: translate3d(0, -2000px, 0); }\n  to {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none; } }\n\n@keyframes fadeInDownBig {\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -2000px, 0);\n    transform: translate3d(0, -2000px, 0); }\n  to {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none; } }\n\n.fadeInDownBig {\n  -webkit-animation-name: fadeInDownBig;\n  animation-name: fadeInDownBig; }\n\n@-webkit-keyframes fadeInLeft {\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(-100%, 0, 0);\n    transform: translate3d(-100%, 0, 0); }\n  to {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none; } }\n\n@keyframes fadeInLeft {\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(-100%, 0, 0);\n    transform: translate3d(-100%, 0, 0); }\n  to {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none; } }\n\n.fadeInLeft {\n  -webkit-animation-name: fadeInLeft;\n  animation-name: fadeInLeft; }\n\n@-webkit-keyframes fadeInLeftBig {\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(-2000px, 0, 0);\n    transform: translate3d(-2000px, 0, 0); }\n  to {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none; } }\n\n@keyframes fadeInLeftBig {\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(-2000px, 0, 0);\n    transform: translate3d(-2000px, 0, 0); }\n  to {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none; } }\n\n.fadeInLeftBig {\n  -webkit-animation-name: fadeInLeftBig;\n  animation-name: fadeInLeftBig; }\n\n@-webkit-keyframes fadeInRight {\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(100%, 0, 0);\n    transform: translate3d(100%, 0, 0); }\n  to {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none; } }\n\n@keyframes fadeInRight {\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(100%, 0, 0);\n    transform: translate3d(100%, 0, 0); }\n  to {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none; } }\n\n.fadeInRight {\n  -webkit-animation-name: fadeInRight;\n  animation-name: fadeInRight; }\n\n@-webkit-keyframes fadeInRightBig {\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(2000px, 0, 0);\n    transform: translate3d(2000px, 0, 0); }\n  to {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none; } }\n\n@keyframes fadeInRightBig {\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(2000px, 0, 0);\n    transform: translate3d(2000px, 0, 0); }\n  to {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none; } }\n\n.fadeInRightBig {\n  -webkit-animation-name: fadeInRightBig;\n  animation-name: fadeInRightBig; }\n\n@-webkit-keyframes fadeInUp {\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 100%, 0);\n    transform: translate3d(0, 100%, 0); }\n  to {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none; } }\n\n@keyframes fadeInUp {\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 100%, 0);\n    transform: translate3d(0, 100%, 0); }\n  to {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none; } }\n\n.fadeInUp {\n  -webkit-animation-name: fadeInUp;\n  animation-name: fadeInUp; }\n\n@-webkit-keyframes fadeInUpBig {\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 2000px, 0);\n    transform: translate3d(0, 2000px, 0); }\n  to {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none; } }\n\n@keyframes fadeInUpBig {\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 2000px, 0);\n    transform: translate3d(0, 2000px, 0); }\n  to {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none; } }\n\n.fadeInUpBig {\n  -webkit-animation-name: fadeInUpBig;\n  animation-name: fadeInUpBig; }\n\n@-webkit-keyframes fadeOut {\n  from {\n    opacity: 1; }\n  to {\n    opacity: 0; } }\n\n@keyframes fadeOut {\n  from {\n    opacity: 1; }\n  to {\n    opacity: 0; } }\n\n.fadeOut {\n  -webkit-animation-name: fadeOut;\n  animation-name: fadeOut; }\n\n@-webkit-keyframes fadeOutDown {\n  from {\n    opacity: 1; }\n  to {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 100%, 0);\n    transform: translate3d(0, 100%, 0); } }\n\n@keyframes fadeOutDown {\n  from {\n    opacity: 1; }\n  to {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 100%, 0);\n    transform: translate3d(0, 100%, 0); } }\n\n.fadeOutDown {\n  -webkit-animation-name: fadeOutDown;\n  animation-name: fadeOutDown; }\n\n@-webkit-keyframes fadeOutDownBig {\n  from {\n    opacity: 1; }\n  to {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 2000px, 0);\n    transform: translate3d(0, 2000px, 0); } }\n\n@keyframes fadeOutDownBig {\n  from {\n    opacity: 1; }\n  to {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 2000px, 0);\n    transform: translate3d(0, 2000px, 0); } }\n\n.fadeOutDownBig {\n  -webkit-animation-name: fadeOutDownBig;\n  animation-name: fadeOutDownBig; }\n\n@-webkit-keyframes fadeOutLeft {\n  from {\n    opacity: 1; }\n  to {\n    opacity: 0;\n    -webkit-transform: translate3d(-100%, 0, 0);\n    transform: translate3d(-100%, 0, 0); } }\n\n@keyframes fadeOutLeft {\n  from {\n    opacity: 1; }\n  to {\n    opacity: 0;\n    -webkit-transform: translate3d(-100%, 0, 0);\n    transform: translate3d(-100%, 0, 0); } }\n\n.fadeOutLeft {\n  -webkit-animation-name: fadeOutLeft;\n  animation-name: fadeOutLeft; }\n\n@-webkit-keyframes fadeOutLeftBig {\n  from {\n    opacity: 1; }\n  to {\n    opacity: 0;\n    -webkit-transform: translate3d(-2000px, 0, 0);\n    transform: translate3d(-2000px, 0, 0); } }\n\n@keyframes fadeOutLeftBig {\n  from {\n    opacity: 1; }\n  to {\n    opacity: 0;\n    -webkit-transform: translate3d(-2000px, 0, 0);\n    transform: translate3d(-2000px, 0, 0); } }\n\n.fadeOutLeftBig {\n  -webkit-animation-name: fadeOutLeftBig;\n  animation-name: fadeOutLeftBig; }\n\n@-webkit-keyframes fadeOutRight {\n  from {\n    opacity: 1; }\n  to {\n    opacity: 0;\n    -webkit-transform: translate3d(100%, 0, 0);\n    transform: translate3d(100%, 0, 0); } }\n\n@keyframes fadeOutRight {\n  from {\n    opacity: 1; }\n  to {\n    opacity: 0;\n    -webkit-transform: translate3d(100%, 0, 0);\n    transform: translate3d(100%, 0, 0); } }\n\n.fadeOutRight {\n  -webkit-animation-name: fadeOutRight;\n  animation-name: fadeOutRight; }\n\n@-webkit-keyframes fadeOutRightBig {\n  from {\n    opacity: 1; }\n  to {\n    opacity: 0;\n    -webkit-transform: translate3d(2000px, 0, 0);\n    transform: translate3d(2000px, 0, 0); } }\n\n@keyframes fadeOutRightBig {\n  from {\n    opacity: 1; }\n  to {\n    opacity: 0;\n    -webkit-transform: translate3d(2000px, 0, 0);\n    transform: translate3d(2000px, 0, 0); } }\n\n.fadeOutRightBig {\n  -webkit-animation-name: fadeOutRightBig;\n  animation-name: fadeOutRightBig; }\n\n@-webkit-keyframes fadeOutUp {\n  from {\n    opacity: 1; }\n  to {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -100%, 0);\n    transform: translate3d(0, -100%, 0); } }\n\n@keyframes fadeOutUp {\n  from {\n    opacity: 1; }\n  to {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -100%, 0);\n    transform: translate3d(0, -100%, 0); } }\n\n.fadeOutUp {\n  -webkit-animation-name: fadeOutUp;\n  animation-name: fadeOutUp; }\n\n@-webkit-keyframes fadeOutUpBig {\n  from {\n    opacity: 1; }\n  to {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -2000px, 0);\n    transform: translate3d(0, -2000px, 0); } }\n\n@keyframes fadeOutUpBig {\n  from {\n    opacity: 1; }\n  to {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -2000px, 0);\n    transform: translate3d(0, -2000px, 0); } }\n\n.fadeOutUpBig {\n  -webkit-animation-name: fadeOutUpBig;\n  animation-name: fadeOutUpBig; }\n\n@-webkit-keyframes flip {\n  from {\n    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -360deg);\n    transform: perspective(400px) rotate3d(0, 1, 0, -360deg);\n    -webkit-animation-timing-function: ease-out;\n    animation-timing-function: ease-out; }\n  40% {\n    -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg);\n    transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg);\n    -webkit-animation-timing-function: ease-out;\n    animation-timing-function: ease-out; }\n  50% {\n    -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg);\n    transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg);\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in; }\n  80% {\n    -webkit-transform: perspective(400px) scale3d(0.95, 0.95, 0.95);\n    transform: perspective(400px) scale3d(0.95, 0.95, 0.95);\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in; }\n  to {\n    -webkit-transform: perspective(400px);\n    transform: perspective(400px);\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in; } }\n\n@keyframes flip {\n  from {\n    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -360deg);\n    transform: perspective(400px) rotate3d(0, 1, 0, -360deg);\n    -webkit-animation-timing-function: ease-out;\n    animation-timing-function: ease-out; }\n  40% {\n    -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg);\n    transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg);\n    -webkit-animation-timing-function: ease-out;\n    animation-timing-function: ease-out; }\n  50% {\n    -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg);\n    transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg);\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in; }\n  80% {\n    -webkit-transform: perspective(400px) scale3d(0.95, 0.95, 0.95);\n    transform: perspective(400px) scale3d(0.95, 0.95, 0.95);\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in; }\n  to {\n    -webkit-transform: perspective(400px);\n    transform: perspective(400px);\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in; } }\n\n.animated.flip {\n  -webkit-backface-visibility: visible;\n  backface-visibility: visible;\n  -webkit-animation-name: flip;\n  animation-name: flip; }\n\n@-webkit-keyframes flipInX {\n  from {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n    transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in;\n    opacity: 0; }\n  40% {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n    transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in; }\n  60% {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);\n    transform: perspective(400px) rotate3d(1, 0, 0, 10deg);\n    opacity: 1; }\n  80% {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);\n    transform: perspective(400px) rotate3d(1, 0, 0, -5deg); }\n  to {\n    -webkit-transform: perspective(400px);\n    transform: perspective(400px); } }\n\n@keyframes flipInX {\n  from {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n    transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in;\n    opacity: 0; }\n  40% {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n    transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in; }\n  60% {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);\n    transform: perspective(400px) rotate3d(1, 0, 0, 10deg);\n    opacity: 1; }\n  80% {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);\n    transform: perspective(400px) rotate3d(1, 0, 0, -5deg); }\n  to {\n    -webkit-transform: perspective(400px);\n    transform: perspective(400px); } }\n\n.flipInX {\n  -webkit-backface-visibility: visible !important;\n  backface-visibility: visible !important;\n  -webkit-animation-name: flipInX;\n  animation-name: flipInX; }\n\n@-webkit-keyframes flipInY {\n  from {\n    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);\n    transform: perspective(400px) rotate3d(0, 1, 0, 90deg);\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in;\n    opacity: 0; }\n  40% {\n    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg);\n    transform: perspective(400px) rotate3d(0, 1, 0, -20deg);\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in; }\n  60% {\n    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg);\n    transform: perspective(400px) rotate3d(0, 1, 0, 10deg);\n    opacity: 1; }\n  80% {\n    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg);\n    transform: perspective(400px) rotate3d(0, 1, 0, -5deg); }\n  to {\n    -webkit-transform: perspective(400px);\n    transform: perspective(400px); } }\n\n@keyframes flipInY {\n  from {\n    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);\n    transform: perspective(400px) rotate3d(0, 1, 0, 90deg);\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in;\n    opacity: 0; }\n  40% {\n    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg);\n    transform: perspective(400px) rotate3d(0, 1, 0, -20deg);\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in; }\n  60% {\n    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg);\n    transform: perspective(400px) rotate3d(0, 1, 0, 10deg);\n    opacity: 1; }\n  80% {\n    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg);\n    transform: perspective(400px) rotate3d(0, 1, 0, -5deg); }\n  to {\n    -webkit-transform: perspective(400px);\n    transform: perspective(400px); } }\n\n.flipInY {\n  -webkit-backface-visibility: visible !important;\n  backface-visibility: visible !important;\n  -webkit-animation-name: flipInY;\n  animation-name: flipInY; }\n\n@-webkit-keyframes flipOutX {\n  from {\n    -webkit-transform: perspective(400px);\n    transform: perspective(400px); }\n  30% {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n    transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n    opacity: 1; }\n  to {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n    transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n    opacity: 0; } }\n\n@keyframes flipOutX {\n  from {\n    -webkit-transform: perspective(400px);\n    transform: perspective(400px); }\n  30% {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n    transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n    opacity: 1; }\n  to {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n    transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n    opacity: 0; } }\n\n.flipOutX {\n  -webkit-animation-name: flipOutX;\n  animation-name: flipOutX;\n  -webkit-backface-visibility: visible !important;\n  backface-visibility: visible !important; }\n\n@-webkit-keyframes flipOutY {\n  from {\n    -webkit-transform: perspective(400px);\n    transform: perspective(400px); }\n  30% {\n    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg);\n    transform: perspective(400px) rotate3d(0, 1, 0, -15deg);\n    opacity: 1; }\n  to {\n    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);\n    transform: perspective(400px) rotate3d(0, 1, 0, 90deg);\n    opacity: 0; } }\n\n@keyframes flipOutY {\n  from {\n    -webkit-transform: perspective(400px);\n    transform: perspective(400px); }\n  30% {\n    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg);\n    transform: perspective(400px) rotate3d(0, 1, 0, -15deg);\n    opacity: 1; }\n  to {\n    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);\n    transform: perspective(400px) rotate3d(0, 1, 0, 90deg);\n    opacity: 0; } }\n\n.flipOutY {\n  -webkit-backface-visibility: visible !important;\n  backface-visibility: visible !important;\n  -webkit-animation-name: flipOutY;\n  animation-name: flipOutY; }\n\n@-webkit-keyframes lightSpeedIn {\n  from {\n    -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg);\n    transform: translate3d(100%, 0, 0) skewX(-30deg);\n    opacity: 0; }\n  60% {\n    -webkit-transform: skewX(20deg);\n    transform: skewX(20deg);\n    opacity: 1; }\n  80% {\n    -webkit-transform: skewX(-5deg);\n    transform: skewX(-5deg);\n    opacity: 1; }\n  to {\n    -webkit-transform: none;\n    transform: none;\n    opacity: 1; } }\n\n@keyframes lightSpeedIn {\n  from {\n    -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg);\n    transform: translate3d(100%, 0, 0) skewX(-30deg);\n    opacity: 0; }\n  60% {\n    -webkit-transform: skewX(20deg);\n    transform: skewX(20deg);\n    opacity: 1; }\n  80% {\n    -webkit-transform: skewX(-5deg);\n    transform: skewX(-5deg);\n    opacity: 1; }\n  to {\n    -webkit-transform: none;\n    transform: none;\n    opacity: 1; } }\n\n.lightSpeedIn {\n  -webkit-animation-name: lightSpeedIn;\n  animation-name: lightSpeedIn;\n  -webkit-animation-timing-function: ease-out;\n  animation-timing-function: ease-out; }\n\n@-webkit-keyframes lightSpeedOut {\n  from {\n    opacity: 1; }\n  to {\n    -webkit-transform: translate3d(100%, 0, 0) skewX(30deg);\n    transform: translate3d(100%, 0, 0) skewX(30deg);\n    opacity: 0; } }\n\n@keyframes lightSpeedOut {\n  from {\n    opacity: 1; }\n  to {\n    -webkit-transform: translate3d(100%, 0, 0) skewX(30deg);\n    transform: translate3d(100%, 0, 0) skewX(30deg);\n    opacity: 0; } }\n\n.lightSpeedOut {\n  -webkit-animation-name: lightSpeedOut;\n  animation-name: lightSpeedOut;\n  -webkit-animation-timing-function: ease-in;\n  animation-timing-function: ease-in; }\n\n@-webkit-keyframes rotateIn {\n  from {\n    -webkit-transform-origin: center;\n    transform-origin: center;\n    -webkit-transform: rotate3d(0, 0, 1, -200deg);\n    transform: rotate3d(0, 0, 1, -200deg);\n    opacity: 0; }\n  to {\n    -webkit-transform-origin: center;\n    transform-origin: center;\n    -webkit-transform: none;\n    transform: none;\n    opacity: 1; } }\n\n@keyframes rotateIn {\n  from {\n    -webkit-transform-origin: center;\n    transform-origin: center;\n    -webkit-transform: rotate3d(0, 0, 1, -200deg);\n    transform: rotate3d(0, 0, 1, -200deg);\n    opacity: 0; }\n  to {\n    -webkit-transform-origin: center;\n    transform-origin: center;\n    -webkit-transform: none;\n    transform: none;\n    opacity: 1; } }\n\n.rotateIn {\n  -webkit-animation-name: rotateIn;\n  animation-name: rotateIn; }\n\n@-webkit-keyframes rotateInDownLeft {\n  from {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: rotate3d(0, 0, 1, -45deg);\n    transform: rotate3d(0, 0, 1, -45deg);\n    opacity: 0; }\n  to {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: none;\n    transform: none;\n    opacity: 1; } }\n\n@keyframes rotateInDownLeft {\n  from {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: rotate3d(0, 0, 1, -45deg);\n    transform: rotate3d(0, 0, 1, -45deg);\n    opacity: 0; }\n  to {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: none;\n    transform: none;\n    opacity: 1; } }\n\n.rotateInDownLeft {\n  -webkit-animation-name: rotateInDownLeft;\n  animation-name: rotateInDownLeft; }\n\n@-webkit-keyframes rotateInDownRight {\n  from {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: rotate3d(0, 0, 1, 45deg);\n    transform: rotate3d(0, 0, 1, 45deg);\n    opacity: 0; }\n  to {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: none;\n    transform: none;\n    opacity: 1; } }\n\n@keyframes rotateInDownRight {\n  from {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: rotate3d(0, 0, 1, 45deg);\n    transform: rotate3d(0, 0, 1, 45deg);\n    opacity: 0; }\n  to {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: none;\n    transform: none;\n    opacity: 1; } }\n\n.rotateInDownRight {\n  -webkit-animation-name: rotateInDownRight;\n  animation-name: rotateInDownRight; }\n\n@-webkit-keyframes rotateInUpLeft {\n  from {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: rotate3d(0, 0, 1, 45deg);\n    transform: rotate3d(0, 0, 1, 45deg);\n    opacity: 0; }\n  to {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: none;\n    transform: none;\n    opacity: 1; } }\n\n@keyframes rotateInUpLeft {\n  from {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: rotate3d(0, 0, 1, 45deg);\n    transform: rotate3d(0, 0, 1, 45deg);\n    opacity: 0; }\n  to {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: none;\n    transform: none;\n    opacity: 1; } }\n\n.rotateInUpLeft {\n  -webkit-animation-name: rotateInUpLeft;\n  animation-name: rotateInUpLeft; }\n\n@-webkit-keyframes rotateInUpRight {\n  from {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: rotate3d(0, 0, 1, -90deg);\n    transform: rotate3d(0, 0, 1, -90deg);\n    opacity: 0; }\n  to {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: none;\n    transform: none;\n    opacity: 1; } }\n\n@keyframes rotateInUpRight {\n  from {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: rotate3d(0, 0, 1, -90deg);\n    transform: rotate3d(0, 0, 1, -90deg);\n    opacity: 0; }\n  to {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: none;\n    transform: none;\n    opacity: 1; } }\n\n.rotateInUpRight {\n  -webkit-animation-name: rotateInUpRight;\n  animation-name: rotateInUpRight; }\n\n@-webkit-keyframes rotateOut {\n  from {\n    -webkit-transform-origin: center;\n    transform-origin: center;\n    opacity: 1; }\n  to {\n    -webkit-transform-origin: center;\n    transform-origin: center;\n    -webkit-transform: rotate3d(0, 0, 1, 200deg);\n    transform: rotate3d(0, 0, 1, 200deg);\n    opacity: 0; } }\n\n@keyframes rotateOut {\n  from {\n    -webkit-transform-origin: center;\n    transform-origin: center;\n    opacity: 1; }\n  to {\n    -webkit-transform-origin: center;\n    transform-origin: center;\n    -webkit-transform: rotate3d(0, 0, 1, 200deg);\n    transform: rotate3d(0, 0, 1, 200deg);\n    opacity: 0; } }\n\n.rotateOut {\n  -webkit-animation-name: rotateOut;\n  animation-name: rotateOut; }\n\n@-webkit-keyframes rotateOutDownLeft {\n  from {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    opacity: 1; }\n  to {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: rotate3d(0, 0, 1, 45deg);\n    transform: rotate3d(0, 0, 1, 45deg);\n    opacity: 0; } }\n\n@keyframes rotateOutDownLeft {\n  from {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    opacity: 1; }\n  to {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: rotate3d(0, 0, 1, 45deg);\n    transform: rotate3d(0, 0, 1, 45deg);\n    opacity: 0; } }\n\n.rotateOutDownLeft {\n  -webkit-animation-name: rotateOutDownLeft;\n  animation-name: rotateOutDownLeft; }\n\n@-webkit-keyframes rotateOutDownRight {\n  from {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    opacity: 1; }\n  to {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: rotate3d(0, 0, 1, -45deg);\n    transform: rotate3d(0, 0, 1, -45deg);\n    opacity: 0; } }\n\n@keyframes rotateOutDownRight {\n  from {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    opacity: 1; }\n  to {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: rotate3d(0, 0, 1, -45deg);\n    transform: rotate3d(0, 0, 1, -45deg);\n    opacity: 0; } }\n\n.rotateOutDownRight {\n  -webkit-animation-name: rotateOutDownRight;\n  animation-name: rotateOutDownRight; }\n\n@-webkit-keyframes rotateOutUpLeft {\n  from {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    opacity: 1; }\n  to {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: rotate3d(0, 0, 1, -45deg);\n    transform: rotate3d(0, 0, 1, -45deg);\n    opacity: 0; } }\n\n@keyframes rotateOutUpLeft {\n  from {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    opacity: 1; }\n  to {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: rotate3d(0, 0, 1, -45deg);\n    transform: rotate3d(0, 0, 1, -45deg);\n    opacity: 0; } }\n\n.rotateOutUpLeft {\n  -webkit-animation-name: rotateOutUpLeft;\n  animation-name: rotateOutUpLeft; }\n\n@-webkit-keyframes rotateOutUpRight {\n  from {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    opacity: 1; }\n  to {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: rotate3d(0, 0, 1, 90deg);\n    transform: rotate3d(0, 0, 1, 90deg);\n    opacity: 0; } }\n\n@keyframes rotateOutUpRight {\n  from {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    opacity: 1; }\n  to {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: rotate3d(0, 0, 1, 90deg);\n    transform: rotate3d(0, 0, 1, 90deg);\n    opacity: 0; } }\n\n.rotateOutUpRight {\n  -webkit-animation-name: rotateOutUpRight;\n  animation-name: rotateOutUpRight; }\n\n@-webkit-keyframes hinge {\n  0% {\n    -webkit-transform-origin: top left;\n    transform-origin: top left;\n    -webkit-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out; }\n  20%, 60% {\n    -webkit-transform: rotate3d(0, 0, 1, 80deg);\n    transform: rotate3d(0, 0, 1, 80deg);\n    -webkit-transform-origin: top left;\n    transform-origin: top left;\n    -webkit-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out; }\n  40%, 80% {\n    -webkit-transform: rotate3d(0, 0, 1, 60deg);\n    transform: rotate3d(0, 0, 1, 60deg);\n    -webkit-transform-origin: top left;\n    transform-origin: top left;\n    -webkit-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out;\n    opacity: 1; }\n  to {\n    -webkit-transform: translate3d(0, 700px, 0);\n    transform: translate3d(0, 700px, 0);\n    opacity: 0; } }\n\n@keyframes hinge {\n  0% {\n    -webkit-transform-origin: top left;\n    transform-origin: top left;\n    -webkit-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out; }\n  20%, 60% {\n    -webkit-transform: rotate3d(0, 0, 1, 80deg);\n    transform: rotate3d(0, 0, 1, 80deg);\n    -webkit-transform-origin: top left;\n    transform-origin: top left;\n    -webkit-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out; }\n  40%, 80% {\n    -webkit-transform: rotate3d(0, 0, 1, 60deg);\n    transform: rotate3d(0, 0, 1, 60deg);\n    -webkit-transform-origin: top left;\n    transform-origin: top left;\n    -webkit-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out;\n    opacity: 1; }\n  to {\n    -webkit-transform: translate3d(0, 700px, 0);\n    transform: translate3d(0, 700px, 0);\n    opacity: 0; } }\n\n.hinge {\n  -webkit-animation-name: hinge;\n  animation-name: hinge; }\n\n/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */\n@-webkit-keyframes rollIn {\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);\n    transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); }\n  to {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none; } }\n\n@keyframes rollIn {\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);\n    transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); }\n  to {\n    opacity: 1;\n    -webkit-transform: none;\n    transform: none; } }\n\n.rollIn {\n  -webkit-animation-name: rollIn;\n  animation-name: rollIn; }\n\n/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */\n@-webkit-keyframes rollOut {\n  from {\n    opacity: 1; }\n  to {\n    opacity: 0;\n    -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);\n    transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); } }\n\n@keyframes rollOut {\n  from {\n    opacity: 1; }\n  to {\n    opacity: 0;\n    -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);\n    transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); } }\n\n.rollOut {\n  -webkit-animation-name: rollOut;\n  animation-name: rollOut; }\n\n@-webkit-keyframes zoomIn {\n  from {\n    opacity: 0;\n    -webkit-transform: scale3d(0.3, 0.3, 0.3);\n    transform: scale3d(0.3, 0.3, 0.3); }\n  50% {\n    opacity: 1; } }\n\n@keyframes zoomIn {\n  from {\n    opacity: 0;\n    -webkit-transform: scale3d(0.3, 0.3, 0.3);\n    transform: scale3d(0.3, 0.3, 0.3); }\n  50% {\n    opacity: 1; } }\n\n.zoomIn {\n  -webkit-animation-name: zoomIn;\n  animation-name: zoomIn; }\n\n@-webkit-keyframes zoomInDown {\n  from {\n    opacity: 0;\n    -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0);\n    transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n    animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); }\n  60% {\n    opacity: 1;\n    -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);\n    transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n    animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); } }\n\n@keyframes zoomInDown {\n  from {\n    opacity: 0;\n    -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0);\n    transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n    animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); }\n  60% {\n    opacity: 1;\n    -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);\n    transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n    animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); } }\n\n.zoomInDown {\n  -webkit-animation-name: zoomInDown;\n  animation-name: zoomInDown; }\n\n@-webkit-keyframes zoomInLeft {\n  from {\n    opacity: 0;\n    -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0);\n    transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n    animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); }\n  60% {\n    opacity: 1;\n    -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0);\n    transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n    animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); } }\n\n@keyframes zoomInLeft {\n  from {\n    opacity: 0;\n    -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0);\n    transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n    animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); }\n  60% {\n    opacity: 1;\n    -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0);\n    transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n    animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); } }\n\n.zoomInLeft {\n  -webkit-animation-name: zoomInLeft;\n  animation-name: zoomInLeft; }\n\n@-webkit-keyframes zoomInRight {\n  from {\n    opacity: 0;\n    -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0);\n    transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n    animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); }\n  60% {\n    opacity: 1;\n    -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0);\n    transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n    animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); } }\n\n@keyframes zoomInRight {\n  from {\n    opacity: 0;\n    -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0);\n    transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n    animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); }\n  60% {\n    opacity: 1;\n    -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0);\n    transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n    animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); } }\n\n.zoomInRight {\n  -webkit-animation-name: zoomInRight;\n  animation-name: zoomInRight; }\n\n@-webkit-keyframes zoomInUp {\n  from {\n    opacity: 0;\n    -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0);\n    transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n    animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); }\n  60% {\n    opacity: 1;\n    -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);\n    transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n    animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); } }\n\n@keyframes zoomInUp {\n  from {\n    opacity: 0;\n    -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0);\n    transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n    animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); }\n  60% {\n    opacity: 1;\n    -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);\n    transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n    animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); } }\n\n.zoomInUp {\n  -webkit-animation-name: zoomInUp;\n  animation-name: zoomInUp; }\n\n@-webkit-keyframes zoomOut {\n  from {\n    opacity: 1; }\n  50% {\n    opacity: 0;\n    -webkit-transform: scale3d(0.3, 0.3, 0.3);\n    transform: scale3d(0.3, 0.3, 0.3); }\n  to {\n    opacity: 0; } }\n\n@keyframes zoomOut {\n  from {\n    opacity: 1; }\n  50% {\n    opacity: 0;\n    -webkit-transform: scale3d(0.3, 0.3, 0.3);\n    transform: scale3d(0.3, 0.3, 0.3); }\n  to {\n    opacity: 0; } }\n\n.zoomOut {\n  -webkit-animation-name: zoomOut;\n  animation-name: zoomOut; }\n\n@-webkit-keyframes zoomOutDown {\n  40% {\n    opacity: 1;\n    -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);\n    transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n    animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); }\n  to {\n    opacity: 0;\n    -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0);\n    transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0);\n    -webkit-transform-origin: center bottom;\n    transform-origin: center bottom;\n    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n    animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); } }\n\n@keyframes zoomOutDown {\n  40% {\n    opacity: 1;\n    -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);\n    transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n    animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); }\n  to {\n    opacity: 0;\n    -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0);\n    transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0);\n    -webkit-transform-origin: center bottom;\n    transform-origin: center bottom;\n    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n    animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); } }\n\n.zoomOutDown {\n  -webkit-animation-name: zoomOutDown;\n  animation-name: zoomOutDown; }\n\n@-webkit-keyframes zoomOutLeft {\n  40% {\n    opacity: 1;\n    -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0);\n    transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0); }\n  to {\n    opacity: 0;\n    -webkit-transform: scale(0.1) translate3d(-2000px, 0, 0);\n    transform: scale(0.1) translate3d(-2000px, 0, 0);\n    -webkit-transform-origin: left center;\n    transform-origin: left center; } }\n\n@keyframes zoomOutLeft {\n  40% {\n    opacity: 1;\n    -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0);\n    transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0); }\n  to {\n    opacity: 0;\n    -webkit-transform: scale(0.1) translate3d(-2000px, 0, 0);\n    transform: scale(0.1) translate3d(-2000px, 0, 0);\n    -webkit-transform-origin: left center;\n    transform-origin: left center; } }\n\n.zoomOutLeft {\n  -webkit-animation-name: zoomOutLeft;\n  animation-name: zoomOutLeft; }\n\n@-webkit-keyframes zoomOutRight {\n  40% {\n    opacity: 1;\n    -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0);\n    transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0); }\n  to {\n    opacity: 0;\n    -webkit-transform: scale(0.1) translate3d(2000px, 0, 0);\n    transform: scale(0.1) translate3d(2000px, 0, 0);\n    -webkit-transform-origin: right center;\n    transform-origin: right center; } }\n\n@keyframes zoomOutRight {\n  40% {\n    opacity: 1;\n    -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0);\n    transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0); }\n  to {\n    opacity: 0;\n    -webkit-transform: scale(0.1) translate3d(2000px, 0, 0);\n    transform: scale(0.1) translate3d(2000px, 0, 0);\n    -webkit-transform-origin: right center;\n    transform-origin: right center; } }\n\n.zoomOutRight {\n  -webkit-animation-name: zoomOutRight;\n  animation-name: zoomOutRight; }\n\n@-webkit-keyframes zoomOutUp {\n  40% {\n    opacity: 1;\n    -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);\n    transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n    animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); }\n  to {\n    opacity: 0;\n    -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0);\n    transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0);\n    -webkit-transform-origin: center bottom;\n    transform-origin: center bottom;\n    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n    animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); } }\n\n@keyframes zoomOutUp {\n  40% {\n    opacity: 1;\n    -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);\n    transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n    animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); }\n  to {\n    opacity: 0;\n    -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0);\n    transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0);\n    -webkit-transform-origin: center bottom;\n    transform-origin: center bottom;\n    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n    animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); } }\n\n.zoomOutUp {\n  -webkit-animation-name: zoomOutUp;\n  animation-name: zoomOutUp; }\n\n@-webkit-keyframes slideInDown {\n  from {\n    -webkit-transform: translate3d(0, -100%, 0);\n    transform: translate3d(0, -100%, 0);\n    visibility: visible; }\n  to {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0); } }\n\n@keyframes slideInDown {\n  from {\n    -webkit-transform: translate3d(0, -100%, 0);\n    transform: translate3d(0, -100%, 0);\n    visibility: visible; }\n  to {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0); } }\n\n.slideInDown {\n  -webkit-animation-name: slideInDown;\n  animation-name: slideInDown; }\n\n@-webkit-keyframes slideInLeft {\n  from {\n    -webkit-transform: translate3d(-100%, 0, 0);\n    transform: translate3d(-100%, 0, 0);\n    visibility: visible; }\n  to {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0); } }\n\n@keyframes slideInLeft {\n  from {\n    -webkit-transform: translate3d(-100%, 0, 0);\n    transform: translate3d(-100%, 0, 0);\n    visibility: visible; }\n  to {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0); } }\n\n.slideInLeft {\n  -webkit-animation-name: slideInLeft;\n  animation-name: slideInLeft; }\n\n@-webkit-keyframes slideInRight {\n  from {\n    -webkit-transform: translate3d(100%, 0, 0);\n    transform: translate3d(100%, 0, 0);\n    visibility: visible; }\n  to {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0); } }\n\n@keyframes slideInRight {\n  from {\n    -webkit-transform: translate3d(100%, 0, 0);\n    transform: translate3d(100%, 0, 0);\n    visibility: visible; }\n  to {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0); } }\n\n.slideInRight {\n  -webkit-animation-name: slideInRight;\n  animation-name: slideInRight; }\n\n@-webkit-keyframes slideInUp {\n  from {\n    -webkit-transform: translate3d(0, 100%, 0);\n    transform: translate3d(0, 100%, 0);\n    visibility: visible; }\n  to {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0); } }\n\n@keyframes slideInUp {\n  from {\n    -webkit-transform: translate3d(0, 100%, 0);\n    transform: translate3d(0, 100%, 0);\n    visibility: visible; }\n  to {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0); } }\n\n.slideInUp {\n  -webkit-animation-name: slideInUp;\n  animation-name: slideInUp; }\n\n@-webkit-keyframes slideOutDown {\n  from {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0); }\n  to {\n    visibility: hidden;\n    -webkit-transform: translate3d(0, 100%, 0);\n    transform: translate3d(0, 100%, 0); } }\n\n@keyframes slideOutDown {\n  from {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0); }\n  to {\n    visibility: hidden;\n    -webkit-transform: translate3d(0, 100%, 0);\n    transform: translate3d(0, 100%, 0); } }\n\n.slideOutDown {\n  -webkit-animation-name: slideOutDown;\n  animation-name: slideOutDown; }\n\n@-webkit-keyframes slideOutLeft {\n  from {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0); }\n  to {\n    visibility: hidden;\n    -webkit-transform: translate3d(-100%, 0, 0);\n    transform: translate3d(-100%, 0, 0); } }\n\n@keyframes slideOutLeft {\n  from {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0); }\n  to {\n    visibility: hidden;\n    -webkit-transform: translate3d(-100%, 0, 0);\n    transform: translate3d(-100%, 0, 0); } }\n\n.slideOutLeft {\n  -webkit-animation-name: slideOutLeft;\n  animation-name: slideOutLeft; }\n\n@-webkit-keyframes slideOutRight {\n  from {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0); }\n  to {\n    visibility: hidden;\n    -webkit-transform: translate3d(100%, 0, 0);\n    transform: translate3d(100%, 0, 0); } }\n\n@keyframes slideOutRight {\n  from {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0); }\n  to {\n    visibility: hidden;\n    -webkit-transform: translate3d(100%, 0, 0);\n    transform: translate3d(100%, 0, 0); } }\n\n.slideOutRight {\n  -webkit-animation-name: slideOutRight;\n  animation-name: slideOutRight; }\n\n@-webkit-keyframes slideOutUp {\n  from {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0); }\n  to {\n    visibility: hidden;\n    -webkit-transform: translate3d(0, -100%, 0);\n    transform: translate3d(0, -100%, 0); } }\n\n@keyframes slideOutUp {\n  from {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0); }\n  to {\n    visibility: hidden;\n    -webkit-transform: translate3d(0, -100%, 0);\n    transform: translate3d(0, -100%, 0); } }\n\n.slideOutUp {\n  -webkit-animation-name: slideOutUp;\n  animation-name: slideOutUp; }\n"
  },
  {
    "path": "public/backend/css/plugins/extensions/context-menu.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\n/********* CONTEXT MENU *********/\n.context-menu-list {\n  width: 248px; }\n  .context-menu-list .context-menu-item {\n    padding: .6rem 2rem; }\n    .context-menu-list .context-menu-item:not(:last-child) {\n      border-bottom: 1px solid #dae1e7; }\n"
  },
  {
    "path": "public/backend/css/plugins/extensions/drag-and-drop.css",
    "content": "#draggable-cards .card {\n  cursor: grab; }\n\n#basic-list-group .list-group-item, #multiple-list-group-a .list-group-item, #multiple-list-group-b .list-group-item {\n  cursor: grab; }\n\n#clone-lists .chip {\n  cursor: grab; }\n\n#multiple-list-group-a, #multiple-list-group-b {\n  min-height: 5.714rem; }\n\n#dd-with-handle .list-group {\n  min-height: 5.714rem; }\n  #dd-with-handle .list-group .handle {\n    padding: 0 5px;\n    margin-right: 5px;\n    background-color: rgba(0, 0, 0, 0.1);\n    cursor: move;\n    font-size: 1.2rem; }\n"
  },
  {
    "path": "public/backend/css/plugins/extensions/media-plyr.css",
    "content": ".audio-player:focus {\n  outline: 0; }\n\n.plyr__controls {\n  justify-content: flex-start; }\n\n.plyr__progress {\n  flex-grow: 1; }\n"
  },
  {
    "path": "public/backend/css/plugins/extensions/noui-slider.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\n.noUi-background {\n  background: #f0f0f0; }\n\n.noUi-target {\n  background-color: #ebebeb;\n  border: none;\n  box-shadow: none;\n  border-radius: 1rem; }\n  .noUi-target.noUi-connect {\n    box-shadow: none; }\n\n.noUi-horizontal {\n  height: 10px;\n  padding-right: 17px; }\n  .noUi-horizontal .noUi-handle {\n    width: 20px;\n    height: 20px;\n    top: -5px;\n    left: -1px;\n    cursor: pointer; }\n  .noUi-horizontal .noUi-origin {\n    left: 17px;\n    right: -17px; }\n  .noUi-horizontal.slider-xl {\n    height: 14px; }\n    .noUi-horizontal.slider-xl .noUi-handle {\n      width: 28px;\n      height: 28px;\n      top: -7px; }\n  .noUi-horizontal.slider-lg {\n    height: 12px; }\n    .noUi-horizontal.slider-lg .noUi-handle {\n      width: 24px;\n      height: 24px;\n      top: -6px; }\n  .noUi-horizontal.slider-sm {\n    height: 6px; }\n    .noUi-horizontal.slider-sm .noUi-handle {\n      height: 15px;\n      width: 15px;\n      right: -2px !important; }\n  .noUi-horizontal.slider-xs {\n    height: 3px; }\n    .noUi-horizontal.slider-xs .noUi-handle {\n      height: 10px;\n      width: 10px;\n      top: -4px;\n      right: -2px !important; }\n\n.noUi-handle {\n  box-shadow: none;\n  border: none;\n  border-radius: 50%;\n  background: #fff;\n  border: 5px solid #7367f0; }\n  .noUi-handle:after, .noUi-handle:before {\n    display: none; }\n\n.circle-filled .noUi-handle {\n  background: #7367f0;\n  border-radius: 50%; }\n  .circle-filled .noUi-handle:after, .circle-filled .noUi-handle:before {\n    display: none; }\n\n.square .noUi-handle {\n  background: #7367f0;\n  border-radius: 3px; }\n  .square .noUi-handle:before {\n    display: block;\n    width: 2px;\n    height: 10px;\n    left: 2px;\n    top: 0px; }\n  .square .noUi-handle:after {\n    display: block;\n    width: 2px;\n    height: 10px;\n    left: 7px;\n    top: 0px; }\n\n.square.slider-xl .noUi-handle:before {\n  left: 5px;\n  top: 4px; }\n\n.square.slider-xl .noUi-handle:after {\n  left: 10px;\n  top: 4px; }\n\n.square.slider-lg .noUi-handle:before {\n  left: 3px;\n  top: 2px; }\n\n.square.slider-lg .noUi-handle:after {\n  left: 8px;\n  top: 2px; }\n\n.square.slider-sm .noUi-handle:before {\n  left: -1px;\n  top: -1px;\n  height: 7px; }\n\n.square.slider-sm .noUi-handle:after {\n  left: 4px;\n  top: -1px;\n  height: 7px; }\n\n.square.slider-xs .noUi-handle:before {\n  left: -3px;\n  top: -3px;\n  height: 5px; }\n\n.square.slider-xs .noUi-handle:after {\n  left: 1px;\n  top: -3px;\n  height: 5px; }\n\n.noUi-connect {\n  background: #7367f0;\n  box-shadow: none; }\n\n.noUi-vertical {\n  display: inline-block;\n  width: 8px;\n  height: 150px; }\n  .noUi-vertical .noUi-handle {\n    width: 20px;\n    height: 20px;\n    top: -5px;\n    left: -6px; }\n  .noUi-vertical.square .noUi-handle {\n    background: #7367f0;\n    border-radius: 3px; }\n    .noUi-vertical.square .noUi-handle:before {\n      display: block;\n      width: 12px;\n      height: 2px;\n      left: -1px;\n      top: 2px; }\n    .noUi-vertical.square .noUi-handle:after {\n      display: block;\n      width: 12px;\n      height: 2px;\n      left: -1px;\n      top: 7px; }\n  .noUi-vertical .noUi-tooltip {\n    transform: translate(-10%, -50%); }\n\n.example-val {\n  font: 400 12px Arial;\n  color: #888;\n  display: block;\n  margin: 15px 0; }\n\n.noUi-handle:focus {\n  outline: 0; }\n\n_:-ms-lang(x),\n.slider-select {\n  flex: 0 0 10%;\n  max-width: 10%; }\n"
  },
  {
    "path": "public/backend/css/plugins/extensions/swiper.css",
    "content": "/*=========================================================================================\n    File Name: swiper.scss\n    Description: swiper plugin scss.\n    ----------------------------------------------------------------------------------------\n    Item Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n    Author: PIXINVENT\n    Author URL: http://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n/*========================================================\n        DARK LAYOUT\n=========================================================*/\n/* Swiper css */\n/* ---------- */\n/* swiper slide shadow */\n.swiper-container .swiper-shadow {\n  box-shadow: 2px 8px 10px 0 rgba(25, 42, 70, 0.13) !important; }\n\n.swiper-centered-slides.swiper-container .swiper-slide {\n  text-align: center;\n  font-weight: 500;\n  background-color: #fff;\n  height: auto;\n  width: auto !important;\n  padding: 2rem 5.5rem;\n  cursor: pointer; }\n  .swiper-centered-slides.swiper-container .swiper-slide.swiper-slide-active {\n    border: 2px solid #7367f0; }\n    .swiper-centered-slides.swiper-container .swiper-slide.swiper-slide-active i {\n      color: #7367f0; }\n\n.swiper-centered-slides .swiper-button-next:after,\n.swiper-centered-slides .swiper-button-prev:after {\n  border-radius: 50%;\n  background-color: #7367f0;\n  box-shadow: 0 2px 4px 0 rgba(34, 41, 47, 0.5) !important; }\n\n.swiper-centered-slides-2.swiper-container .swiper-slide {\n  font-weight: 500;\n  background-color: #f2f4f4;\n  height: auto;\n  width: auto !important;\n  cursor: pointer; }\n  .swiper-centered-slides-2.swiper-container .swiper-slide.swiper-slide-active {\n    color: #fff;\n    background-color: #7367f0;\n    box-shadow: 0 3px 6px 0 rgba(115, 103, 240, 0.5) !important; }\n\n/* cube effect */\n.swiper-cube-effect.swiper-container {\n  width: 300px;\n  left: 50%;\n  margin-left: -150px;\n  margin-top: -12px; }\n\n/* swiper coverflow slide width */\n.swiper-coverflow.swiper-container .swiper-slide {\n  width: 300px; }\n\n.gallery-thumbs {\n  padding: 10px 0;\n  background: #22292f; }\n  .gallery-thumbs .swiper-slide {\n    opacity: 0.4; }\n  .gallery-thumbs .swiper-slide-thumb-active {\n    opacity: 1; }\n\n.swiper-parallax .swiper-slide {\n  padding: 2.67rem 4rem; }\n  .swiper-parallax .swiper-slide .title {\n    font-size: 1.14rem;\n    padding: .5rem 0; }\n  .swiper-parallax .swiper-slide .text {\n    font-size: 1rem; }\n\n.swiper-parallax .parallax-bg {\n  position: absolute;\n  width: 130%; }\n\n.swiper-virtual.swiper-container {\n  height: 300px; }\n  .swiper-virtual.swiper-container .swiper-slide {\n    /* virtual slides  */\n    font-size: 1.51rem;\n    background-color: #eee;\n    display: flex;\n    justify-content: center;\n    align-items: center; }\n\n.swiper-button-prev,\n.swiper-button-next,\n.swiper-container-rtl .swiper-button-prev,\n.swiper-container-rtl .swiper-button-next {\n  background-image: none;\n  color: #fff;\n  width: 35px;\n  font-size: 2rem; }\n  .swiper-button-prev:focus,\n  .swiper-button-next:focus,\n  .swiper-container-rtl .swiper-button-prev:focus,\n  .swiper-container-rtl .swiper-button-next:focus {\n    outline: none; }\n  .swiper-button-prev:after,\n  .swiper-button-next:after,\n  .swiper-container-rtl .swiper-button-prev:after,\n  .swiper-container-rtl .swiper-button-next:after {\n    font-family: 'feather'; }\n\n.swiper-button-prev:after {\n  content: \"\\e843\";\n  padding-right: 1px; }\n\n.swiper-button-next:after {\n  content: \"\\e844\";\n  padding-left: 2px; }\n\n.swiper-container-rtl .swiper-button-prev:after {\n  content: \"\\e844\"; }\n\n.swiper-container-rtl .swiper-button-next:after {\n  content: \"\\e843\"; }\n\n@media only screen and (max-width: 768px) {\n  .swiper-button-prev {\n    font-size: 1.32rem;\n    top: 55%; }\n  .swiper-button-next {\n    font-size: 1.32rem;\n    top: 55%;\n    width: 15px; }\n  .swiper-parallax .swiper-slide {\n    padding: 1rem 1.2rem; }\n  .swiper-parallax img {\n    height: 100% !important; } }\n\n@media only screen and (max-width: 576px) {\n  .swiper-centered-slides.swiper-container .swiper-slide {\n    padding: 1.6rem 2.5rem; }\n    .swiper-centered-slides.swiper-container .swiper-slide i {\n      font-size: 1.14rem !important; }\n  .swiper-cube-effect.swiper-container {\n    width: 150px;\n    left: 70%; }\n  .swiper-parallax .swiper-slide {\n    padding: 1rem 1.3rem; }\n  .swiper-virtual.swiper-container .swiper-slide {\n    font-size: 1rem; } }\n"
  },
  {
    "path": "public/backend/css/plugins/extensions/toastr.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\n#toast-container > div {\n  opacity: 0.9;\n  -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=90);\n  filter: alpha(opacity=90);\n  max-width: none; }\n\n#toast-container > div:hover {\n  -webkit-box-shadow: 2px 2px 10px 0px rgba(0, 0, 0, 0.75);\n  -moz-box-shadow: 2px 2px 10px 0px rgba(0, 0, 0, 0.75);\n  box-shadow: 2px 2px 10px 0px rgba(0, 0, 0, 0.75); }\n\n.toast {\n  background-color: #7367f0; }\n\n.toast-success {\n  background-color: #28c76f; }\n\n.toast-error {\n  background-color: #ea5455; }\n\n.toast-info {\n  background-color: #00cfe8; }\n\n.toast-warning {\n  background-color: #ff9f43; }\n"
  },
  {
    "path": "public/backend/css/plugins/forms/extended/typeahed.css",
    "content": "/* Typeahead Starts */\n.typeahead .twitter-typeahead {\n  width: 100%; }\n  .typeahead .twitter-typeahead .tt-menu {\n    width: 100%; }\n  .typeahead .twitter-typeahead .empty-message {\n    padding: 5px 10px;\n    text-align: center; }\n  .typeahead .twitter-typeahead .rtl-typeahead .tt-menu {\n    text-align: right; }\n  .typeahead .twitter-typeahead .league-name {\n    margin: 0 10px 5px 10px;\n    padding: 7px 5px 10px;\n    border-bottom: 1px solid #ccc; }\n\n.typeahead .scrollable-dropdown .twitter-typeahead .tt-menu {\n  max-height: 150px;\n  overflow-y: auto; }\n\n/* Typeahead Ends */\n/* MaxLength Starts */\n.bootstrap-maxlength {\n  margin-top: 0.5rem; }\n\n/* MaxLength Ends */\n"
  },
  {
    "path": "public/backend/css/plugins/forms/form-inputs-groups.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\n/* For Input Group TouchPin */\n#touchspin .input-group.bootstrap-touchspin .input-group-prepend, #touchspin .input-group.bootstrap-touchspin .input-group-append {\n  display: block; }\n\n/* For Input Group TouchPin */\n.segmented-buttons-with-dropdown .input-group .form-control, .buttons-with-dropdown .input-group .form-control {\n  height: 3rem; }\n\n.bootstrap-touchspin.touchspin-with-icon .input-group-append .input-group-text i {\n  font-size: 1.25rem; }\n\n.bootstrap-touchspin-spinners .touchspin-spinners-wrapper .input-group .touchspin, .bootstrap-touchspin-spinners .touchspin-spinners-wrapper .input-group .touchspin-stop-mousewheel {\n  height: calc(calc(1.25em + 1.4rem)-0.05rem + 2.2px); }\n\n.bootstrap-touchspin-spinners .touchspin-spinners-wrapper .input-group.touchspin-with-icon .input-group-text.bootstrap-touchspin-postfix {\n  padding: 0.85rem 1rem; }\n\n.bootstrap-touchspin-spinners .touchspin-spinners-wrapper .default-height .input-group.touchspin-vertical {\n  height: calc(2.9rem + 2px); }\n"
  },
  {
    "path": "public/backend/css/plugins/forms/validation/form-validation.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\n.form-group.issue .help-block, .form-group.issue .help-inline, .form-group.error .help-block, .form-group.error .help-inline {\n  color: #ea5455; }\n\n.form-group.issue input, .form-group.issue select, .form-group.issue textarea, .form-group.error input, .form-group.error select, .form-group.error textarea {\n  border-color: #ea5455; }\n\n.form-group.issue input:focus, .form-group.issue select:focus, .form-group.issue textarea:focus, .form-group.error input:focus, .form-group.error select:focus, .form-group.error textarea:focus {\n  border-color: #ea5455;\n  -webkit-box-shadow: 0 3 10px 0 #ea5455;\n  -moz-box-shadow: 0 3 10px 0 #ea5455;\n  box-shadow: 0 3 10px 0 #ea5455; }\n\n.form-group .help-block ul {\n  padding-left: 0; }\n  .form-group .help-block ul li {\n    list-style-type: none;\n    font-size: 0.875rem;\n    padding-top: 0.2rem; }\n"
  },
  {
    "path": "public/backend/css/plugins/forms/wizard.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\n.app-content .wizard {\n  width: 100%; }\n  .app-content .wizard .content {\n    margin-left: 0 !important; }\n  .app-content .wizard > .steps {\n    position: relative;\n    display: block;\n    width: 100%; }\n    .app-content .wizard > .steps .current-info {\n      position: absolute;\n      left: -99999px; }\n    .app-content .wizard > .steps > ul {\n      display: table;\n      width: 100%;\n      table-layout: fixed;\n      margin: 0;\n      padding: 0;\n      list-style: none; }\n      .app-content .wizard > .steps > ul > li {\n        display: table-cell;\n        width: auto;\n        vertical-align: top;\n        text-align: center;\n        position: relative; }\n        .app-content .wizard > .steps > ul > li a {\n          position: relative;\n          padding-top: 52px;\n          margin-top: 20px;\n          margin-bottom: 20px;\n          display: block; }\n        .app-content .wizard > .steps > ul > li:before {\n          content: '';\n          display: block;\n          position: absolute;\n          z-index: 9;\n          left: 0; }\n        .app-content .wizard > .steps > ul > li:after {\n          content: '';\n          display: block;\n          position: absolute;\n          z-index: 9;\n          right: 0; }\n        .app-content .wizard > .steps > ul > li:last-child:after {\n          content: none; }\n      .app-content .wizard > .steps > ul > li.current > a {\n        color: #7367f0;\n        cursor: default; }\n      .app-content .wizard > .steps > ul > li.current .step {\n        border-color: #7367f0;\n        background-color: #7367f0;\n        color: #fff; }\n      .app-content .wizard > .steps > ul > li.disabled a {\n        color: #636363;\n        cursor: default; }\n        .app-content .wizard > .steps > ul > li.disabled a:hover {\n          color: #636363;\n          cursor: default; }\n        .app-content .wizard > .steps > ul > li.disabled a:focus {\n          color: #636363;\n          cursor: default; }\n      .app-content .wizard > .steps > ul > li.disabled .step {\n        color: #b8c2cc; }\n      .app-content .wizard > .steps > ul > li.done a {\n        color: #636363; }\n        .app-content .wizard > .steps > ul > li.done a:hover {\n          color: #636363; }\n        .app-content .wizard > .steps > ul > li.done a:focus {\n          color: #636363; }\n      .app-content .wizard > .steps > ul > li.done .step {\n        background-color: #fff;\n        border-color: #7367f0;\n        color: #b8c2cc; }\n      .app-content .wizard > .steps > ul > li.done:last-child .step {\n        background-color: #7367f0;\n        border-color: #7367f0;\n        color: #fff; }\n      .app-content .wizard > .steps > ul > li.error > a {\n        color: #ea5455; }\n      .app-content .wizard > .steps > ul > li.error .step {\n        border-color: #ea5455;\n        color: #fff;\n        background-color: #ea5455; }\n    .app-content .wizard > .steps .step {\n      background-color: #fff;\n      display: inline-block;\n      position: absolute;\n      top: 0;\n      left: 50%;\n      margin-left: -24px;\n      z-index: 10;\n      text-align: center; }\n      .app-content .wizard > .steps .step i {\n        position: relative;\n        top: 2px; }\n  .app-content .wizard > .content {\n    position: relative;\n    width: auto;\n    padding: 0;\n    margin: 0; }\n    .app-content .wizard > .content > .title {\n      position: absolute;\n      left: -99999px; }\n    .app-content .wizard > .content > .body {\n      padding: 0 20px; }\n    .app-content .wizard > .content > iframe {\n      border: 0 none;\n      width: 100%;\n      height: 100%; }\n  .app-content .wizard > .actions {\n    position: relative;\n    display: block;\n    text-align: right;\n    padding: 20px;\n    padding-top: 0; }\n    .app-content .wizard > .actions > ul {\n      list-style: none;\n      padding: 0;\n      margin: 0; }\n      .app-content .wizard > .actions > ul:after {\n        content: '';\n        display: table;\n        clear: both; }\n      .app-content .wizard > .actions > ul > li {\n        float: left; }\n        .app-content .wizard > .actions > ul > li + li {\n          margin-left: 10px;\n          float: right; }\n        .app-content .wizard > .actions > ul > li > a {\n          background: #7367f0;\n          color: #fff;\n          display: block;\n          padding: 7px 12px;\n          border-radius: 0.42rem;\n          border: 1px solid transparent; }\n          .app-content .wizard > .actions > ul > li > a:hover {\n            -webkit-box-shadow: 0 0 0 100px rgba(0, 0, 0, 0.05) inset;\n            box-shadow: 0 0 0 100px rgba(0, 0, 0, 0.05) inset; }\n          .app-content .wizard > .actions > ul > li > a:focus {\n            -webkit-box-shadow: 0 0 0 100px rgba(0, 0, 0, 0.05) inset;\n            box-shadow: 0 0 0 100px rgba(0, 0, 0, 0.05) inset; }\n          .app-content .wizard > .actions > ul > li > a:active {\n            -webkit-box-shadow: 0 0 0 100px rgba(0, 0, 0, 0.1) inset;\n            box-shadow: 0 0 0 100px rgba(0, 0, 0, 0.1) inset; }\n        .app-content .wizard > .actions > ul > li > a[href=\"#previous\"] {\n          background-color: #7367f0;\n          color: #fff;\n          border-radius: 0.42rem; }\n          .app-content .wizard > .actions > ul > li > a[href=\"#previous\"]:hover {\n            -webkit-box-shadow: 0 0 0 100px rgba(0, 0, 0, 0.02) inset;\n            box-shadow: 0 0 0 100px rgba(0, 0, 0, 0.02) inset; }\n          .app-content .wizard > .actions > ul > li > a[href=\"#previous\"]:focus {\n            -webkit-box-shadow: 0 0 0 100px rgba(0, 0, 0, 0.02) inset;\n            box-shadow: 0 0 0 100px rgba(0, 0, 0, 0.02) inset; }\n          .app-content .wizard > .actions > ul > li > a[href=\"#previous\"]:active {\n            -webkit-box-shadow: 0 0 0 100px rgba(0, 0, 0, 0.04) inset;\n            box-shadow: 0 0 0 100px rgba(0, 0, 0, 0.04) inset; }\n      .app-content .wizard > .actions > ul > li.disabled > a {\n        color: #fff; }\n        .app-content .wizard > .actions > ul > li.disabled > a:hover {\n          color: #fff; }\n        .app-content .wizard > .actions > ul > li.disabled > a:focus {\n          color: #fff; }\n      .app-content .wizard > .actions > ul > li.disabled > a[href=\"#previous\"] {\n        -webkit-box-shadow: none;\n        box-shadow: none; }\n        .app-content .wizard > .actions > ul > li.disabled > a[href=\"#previous\"]:hover {\n          -webkit-box-shadow: none;\n          box-shadow: none; }\n        .app-content .wizard > .actions > ul > li.disabled > a[href=\"#previous\"]:focus {\n          -webkit-box-shadow: none;\n          box-shadow: none; }\n  .app-content .wizard.wizard-circle > .steps > ul > li:before, .app-content .wizard.wizard-circle > .steps > ul > li:after {\n    top: 43px;\n    width: 50%;\n    height: 3px;\n    background-color: #7367f0; }\n  .app-content .wizard.wizard-circle > .steps > ul > li.current:after {\n    background-color: transparent; }\n  .app-content .wizard.wizard-circle > .steps > ul > li.current ~ li:before {\n    background-color: transparent; }\n  .app-content .wizard.wizard-circle > .steps > ul > li.current ~ li:after {\n    background-color: transparent; }\n  .app-content .wizard.wizard-circle > .steps .step {\n    width: 50px;\n    height: 50px;\n    line-height: 3rem;\n    border: 3px solid #b8c2cc;\n    font-size: 1.5rem;\n    font-weight: 500;\n    border-radius: 50%; }\n\n@media (max-width: 768px) {\n  .app-content .wizard > .steps > ul {\n    margin-bottom: 20px; }\n    .app-content .wizard > .steps > ul > li {\n      display: block;\n      float: left;\n      width: 33%; }\n      .app-content .wizard > .steps > ul > li > a {\n        margin-bottom: 0; }\n      .app-content .wizard > .steps > ul > li:last-child:after {\n        content: '';\n        background-color: #7367f0; } }\n\n@media (max-width: 480px) {\n  .app-content .wizard > .steps > ul > li.current:after {\n    background-color: #7367f0; } }\n"
  },
  {
    "path": "public/backend/css/plugins/loaders/animations/ball-beat.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes ball-beat {\n  50% {\n    opacity: 0.2;\n    transform: scale(0.75); }\n  100% {\n    opacity: 1;\n    transform: scale(1); } }\n\n.ball-beat > div {\n  background-color: #b8c2cc;\n  width: 15px;\n  height: 15px;\n  border-radius: 100%;\n  margin: 2px;\n  animation-fill-mode: both;\n  display: inline-block;\n  animation: ball-beat 0.7s 0s infinite linear; }\n  .ball-beat > div:nth-child(2n-1) {\n    animation-delay: -0.35s !important; }\n"
  },
  {
    "path": "public/backend/css/plugins/loaders/animations/ball-clip-rotate-multiple.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes rotate {\n  0% {\n    transform: rotate(0deg) scale(1); }\n  50% {\n    transform: rotate(180deg) scale(0.6); }\n  100% {\n    transform: rotate(360deg) scale(1); } }\n\n.ball-clip-rotate-multiple {\n  position: relative; }\n  .ball-clip-rotate-multiple > div {\n    animation-fill-mode: both;\n    position: absolute;\n    left: -20px;\n    top: -20px;\n    border: 2px solid #b8c2cc;\n    border-bottom-color: transparent;\n    border-top-color: transparent;\n    border-radius: 100%;\n    height: 35px;\n    width: 35px;\n    animation: rotate 1s 0s ease-in-out infinite; }\n    .ball-clip-rotate-multiple > div:last-child {\n      display: inline-block;\n      top: -10px;\n      left: -10px;\n      width: 15px;\n      height: 15px;\n      animation-duration: 0.5s;\n      border-color: #b8c2cc transparent #b8c2cc transparent;\n      animation-direction: reverse; }\n"
  },
  {
    "path": "public/backend/css/plugins/loaders/animations/ball-clip-rotate-pulse.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes rotate {\n  0% {\n    transform: rotate(0deg) scale(1); }\n  50% {\n    transform: rotate(180deg) scale(0.6); }\n  100% {\n    transform: rotate(360deg) scale(1); } }\n\n@keyframes scale {\n  30% {\n    transform: scale(0.3); }\n  100% {\n    transform: scale(1); } }\n\n.ball-clip-rotate-pulse {\n  position: relative;\n  transform: translateY(-15px); }\n  .ball-clip-rotate-pulse > div {\n    animation-fill-mode: both;\n    position: absolute;\n    top: 0px;\n    left: 0px;\n    border-radius: 100%; }\n    .ball-clip-rotate-pulse > div:first-child {\n      background: #b8c2cc;\n      height: 16px;\n      width: 16px;\n      top: 7px;\n      left: -7px;\n      animation: scale 1s 0s cubic-bezier(0.09, 0.57, 0.49, 0.9) infinite; }\n    .ball-clip-rotate-pulse > div:last-child {\n      position: absolute;\n      border: 2px solid #b8c2cc;\n      width: 30px;\n      height: 30px;\n      left: -16px;\n      top: -2px;\n      background: transparent;\n      border: 2px solid;\n      border-color: #b8c2cc transparent #b8c2cc transparent;\n      animation: rotate 1s 0s cubic-bezier(0.09, 0.57, 0.49, 0.9) infinite;\n      animation-duration: 1s; }\n"
  },
  {
    "path": "public/backend/css/plugins/loaders/animations/ball-clip-rotate.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes rotate {\n  0% {\n    transform: rotate(0deg) scale(1); }\n  50% {\n    transform: rotate(180deg) scale(0.6); }\n  100% {\n    transform: rotate(360deg) scale(1); } }\n\n.ball-clip-rotate > div {\n  background-color: #b8c2cc;\n  width: 15px;\n  height: 15px;\n  border-radius: 100%;\n  margin: 2px;\n  animation-fill-mode: both;\n  border: 2px solid #b8c2cc;\n  border-bottom-color: transparent;\n  height: 25px;\n  width: 25px;\n  background: transparent !important;\n  display: inline-block;\n  animation: rotate 0.75s 0s linear infinite; }\n"
  },
  {
    "path": "public/backend/css/plugins/loaders/animations/ball-grid-beat.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes ball-grid-beat {\n  50% {\n    opacity: 0.7; }\n  100% {\n    opacity: 1; } }\n\n.ball-grid-beat {\n  width: 57px; }\n  .ball-grid-beat > div:nth-child(1) {\n    animation-delay: 0.13s;\n    animation-duration: 1.32s; }\n  .ball-grid-beat > div:nth-child(2) {\n    animation-delay: -0.11s;\n    animation-duration: 1.17s; }\n  .ball-grid-beat > div:nth-child(3) {\n    animation-delay: 0.09s;\n    animation-duration: 1.19s; }\n  .ball-grid-beat > div:nth-child(4) {\n    animation-delay: -0.13s;\n    animation-duration: 1.32s; }\n  .ball-grid-beat > div:nth-child(5) {\n    animation-delay: 0.76s;\n    animation-duration: 0.66s; }\n  .ball-grid-beat > div:nth-child(6) {\n    animation-delay: 0.69s;\n    animation-duration: 1.34s; }\n  .ball-grid-beat > div:nth-child(7) {\n    animation-delay: 0.17s;\n    animation-duration: 1.47s; }\n  .ball-grid-beat > div:nth-child(8) {\n    animation-delay: 0.47s;\n    animation-duration: 0.81s; }\n  .ball-grid-beat > div:nth-child(9) {\n    animation-delay: -0.19s;\n    animation-duration: 1.42s; }\n  .ball-grid-beat > div {\n    background-color: #b8c2cc;\n    width: 15px;\n    height: 15px;\n    border-radius: 100%;\n    margin: 2px;\n    animation-fill-mode: both;\n    display: inline-block;\n    float: left;\n    animation-name: ball-grid-beat;\n    animation-iteration-count: infinite;\n    animation-delay: 0; }\n"
  },
  {
    "path": "public/backend/css/plugins/loaders/animations/ball-grid-pulse.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes ball-grid-pulse {\n  0% {\n    transform: scale(1); }\n  50% {\n    transform: scale(0.5);\n    opacity: 0.7; }\n  100% {\n    transform: scale(1);\n    opacity: 1; } }\n\n.ball-grid-pulse {\n  width: 57px; }\n  .ball-grid-pulse > div:nth-child(1) {\n    animation-delay: 0.21s;\n    animation-duration: 0.68s; }\n  .ball-grid-pulse > div:nth-child(2) {\n    animation-delay: 0.74s;\n    animation-duration: 0.61s; }\n  .ball-grid-pulse > div:nth-child(3) {\n    animation-delay: 0.49s;\n    animation-duration: 0.92s; }\n  .ball-grid-pulse > div:nth-child(4) {\n    animation-delay: 0.73s;\n    animation-duration: 1.55s; }\n  .ball-grid-pulse > div:nth-child(5) {\n    animation-delay: -0.12s;\n    animation-duration: 1.49s; }\n  .ball-grid-pulse > div:nth-child(6) {\n    animation-delay: 0.09s;\n    animation-duration: 0.68s; }\n  .ball-grid-pulse > div:nth-child(7) {\n    animation-delay: -0.16s;\n    animation-duration: 1.44s; }\n  .ball-grid-pulse > div:nth-child(8) {\n    animation-delay: 0.63s;\n    animation-duration: 1.11s; }\n  .ball-grid-pulse > div:nth-child(9) {\n    animation-delay: -0.09s;\n    animation-duration: 0.65s; }\n  .ball-grid-pulse > div {\n    background-color: #b8c2cc;\n    width: 15px;\n    height: 15px;\n    border-radius: 100%;\n    margin: 2px;\n    animation-fill-mode: both;\n    display: inline-block;\n    float: left;\n    animation-name: ball-grid-pulse;\n    animation-iteration-count: infinite;\n    animation-delay: 0; }\n"
  },
  {
    "path": "public/backend/css/plugins/loaders/animations/ball-pulse-rise.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes ball-pulse-rise-even {\n  0% {\n    transform: scale(1.1); }\n  25% {\n    transform: translateY(-30px); }\n  50% {\n    transform: scale(0.4); }\n  75% {\n    transform: translateY(30px); }\n  100% {\n    transform: translateY(0);\n    transform: scale(1); } }\n\n@keyframes ball-pulse-rise-odd {\n  0% {\n    transform: scale(0.4); }\n  25% {\n    transform: translateY(30px); }\n  50% {\n    transform: scale(1.1); }\n  75% {\n    transform: translateY(-30px); }\n  100% {\n    transform: translateY(0);\n    transform: scale(0.75); } }\n\n.ball-pulse-rise > div {\n  background-color: #b8c2cc;\n  width: 15px;\n  height: 15px;\n  border-radius: 100%;\n  margin: 2px;\n  animation-fill-mode: both;\n  display: inline-block;\n  animation-duration: 1s;\n  animation-timing-function: cubic-bezier(0.15, 0.46, 0.9, 0.6);\n  animation-iteration-count: infinite;\n  animation-delay: 0; }\n  .ball-pulse-rise > div:nth-child(2n) {\n    animation-name: ball-pulse-rise-even; }\n  .ball-pulse-rise > div:nth-child(2n-1) {\n    animation-name: ball-pulse-rise-odd; }\n"
  },
  {
    "path": "public/backend/css/plugins/loaders/animations/ball-pulse-round.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes ball-pulse-round {\n  0%, 80%, 100% {\n    transform: scale(0);\n    -webkit-transform: scale(0); }\n  40% {\n    transform: scale(1);\n    -webkit-transform: scale(1); } }\n\n.ball-pulse-round > div {\n  animation-fill-mode: both;\n  width: 10px;\n  height: 10px;\n  animation: ball-pulse-round 1.2s infinite ease-in-out; }\n"
  },
  {
    "path": "public/backend/css/plugins/loaders/animations/ball-pulse-sync.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes ball-pulse-sync {\n  33% {\n    transform: translateY(10px); }\n  66% {\n    transform: translateY(-10px); }\n  100% {\n    transform: translateY(0); } }\n\n.ball-pulse-sync > div:nth-child(1) {\n  animation: ball-pulse-sync 0.6s -0.14s infinite ease-in-out; }\n\n.ball-pulse-sync > div:nth-child(2) {\n  animation: ball-pulse-sync 0.6s -0.07s infinite ease-in-out; }\n\n.ball-pulse-sync > div:nth-child(3) {\n  animation: ball-pulse-sync 0.6s 0s infinite ease-in-out; }\n\n.ball-pulse-sync > div {\n  background-color: #b8c2cc;\n  width: 15px;\n  height: 15px;\n  border-radius: 100%;\n  margin: 2px;\n  animation-fill-mode: both;\n  display: inline-block; }\n"
  },
  {
    "path": "public/backend/css/plugins/loaders/animations/ball-pulse.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes scale {\n  0% {\n    transform: scale(1);\n    opacity: 1; }\n  45% {\n    transform: scale(0.1);\n    opacity: 0.7; }\n  80% {\n    transform: scale(1);\n    opacity: 1; } }\n\n.ball-pulse > div:nth-child(1) {\n  animation: scale 0.75s -0.24s infinite cubic-bezier(0.2, 0.68, 0.18, 1.08); }\n\n.ball-pulse > div:nth-child(2) {\n  animation: scale 0.75s -0.12s infinite cubic-bezier(0.2, 0.68, 0.18, 1.08); }\n\n.ball-pulse > div:nth-child(3) {\n  animation: scale 0.75s 0s infinite cubic-bezier(0.2, 0.68, 0.18, 1.08); }\n\n.ball-pulse > div {\n  background-color: #b8c2cc;\n  width: 15px;\n  height: 15px;\n  border-radius: 100%;\n  margin: 2px;\n  animation-fill-mode: both;\n  display: inline-block; }\n"
  },
  {
    "path": "public/backend/css/plugins/loaders/animations/ball-rotate.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes rotate {\n  0% {\n    transform: rotate(0deg); }\n  50% {\n    transform: rotate(180deg); }\n  100% {\n    transform: rotate(360deg); } }\n\n.ball-rotate {\n  position: relative; }\n  .ball-rotate > div {\n    background-color: #b8c2cc;\n    width: 15px;\n    height: 15px;\n    border-radius: 100%;\n    margin: 2px;\n    animation-fill-mode: both;\n    position: relative; }\n    .ball-rotate > div:first-child {\n      animation: rotate 1s 0s cubic-bezier(0.7, -0.13, 0.22, 0.86) infinite; }\n    .ball-rotate > div:before, .ball-rotate > div:after {\n      background-color: #b8c2cc;\n      width: 15px;\n      height: 15px;\n      border-radius: 100%;\n      margin: 2px;\n      content: \"\";\n      position: absolute;\n      opacity: 0.8; }\n    .ball-rotate > div:before {\n      top: 0px;\n      left: -28px; }\n    .ball-rotate > div:after {\n      top: 0px;\n      left: 25px; }\n"
  },
  {
    "path": "public/backend/css/plugins/loaders/animations/ball-scale-multiple.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes ball-scale-multiple {\n  0% {\n    transform: scale(0);\n    opacity: 0; }\n  5% {\n    opacity: 1; }\n  100% {\n    transform: scale(1);\n    opacity: 0; } }\n\n.ball-scale-multiple {\n  position: relative; }\n  .ball-scale-multiple > div:nth-child(2) {\n    animation-delay: -0.4s; }\n  .ball-scale-multiple > div:nth-child(3) {\n    animation-delay: -0.2s; }\n  .ball-scale-multiple > div {\n    background-color: #b8c2cc;\n    width: 15px;\n    height: 15px;\n    border-radius: 100%;\n    margin: 2px;\n    animation-fill-mode: both;\n    position: absolute;\n    top: 0px;\n    opacity: 0;\n    margin: 0;\n    width: 60px;\n    height: 60px;\n    animation: ball-scale-multiple 1s 0s linear infinite; }\n"
  },
  {
    "path": "public/backend/css/plugins/loaders/animations/ball-scale-random.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes ball-scale {\n  0% {\n    transform: scale(0); }\n  100% {\n    transform: scale(1);\n    opacity: 0; } }\n\n.ball-scale > div {\n  background-color: #b8c2cc;\n  width: 15px;\n  height: 15px;\n  border-radius: 100%;\n  margin: 2px;\n  animation-fill-mode: both;\n  display: inline-block;\n  height: 60px;\n  width: 60px;\n  animation: ball-scale 1s 0s ease-in-out infinite; }\n\n.ball-scale-random {\n  width: 37px;\n  height: 40px; }\n  .ball-scale-random > div {\n    background-color: #b8c2cc;\n    width: 15px;\n    height: 15px;\n    border-radius: 100%;\n    margin: 2px;\n    animation-fill-mode: both;\n    position: absolute;\n    display: inline-block;\n    height: 30px;\n    width: 30px;\n    animation: ball-scale 1s 0s ease-in-out infinite; }\n    .ball-scale-random > div:nth-child(1) {\n      margin-left: -7px;\n      animation: ball-scale 1s 0.2s ease-in-out infinite; }\n    .ball-scale-random > div:nth-child(3) {\n      margin-left: -2px;\n      margin-top: 9px;\n      animation: ball-scale 1s 0.5s ease-in-out infinite; }\n"
  },
  {
    "path": "public/backend/css/plugins/loaders/animations/ball-scale-ripple-multiple.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes ball-scale-ripple-multiple {\n  0% {\n    transform: scale(0.1);\n    opacity: 1; }\n  70% {\n    transform: scale(1);\n    opacity: 0.7; }\n  100% {\n    opacity: 0.0; } }\n\n.ball-scale-ripple-multiple {\n  position: relative;\n  transform: translateY(-25px); }\n  .ball-scale-ripple-multiple > div:nth-child(0) {\n    animation-delay: -0.8s; }\n  .ball-scale-ripple-multiple > div:nth-child(1) {\n    animation-delay: -0.6s; }\n  .ball-scale-ripple-multiple > div:nth-child(2) {\n    animation-delay: -0.4s; }\n  .ball-scale-ripple-multiple > div:nth-child(3) {\n    animation-delay: -0.2s; }\n  .ball-scale-ripple-multiple > div {\n    animation-fill-mode: both;\n    position: absolute;\n    top: -2px;\n    left: -26px;\n    width: 50px;\n    height: 50px;\n    border-radius: 100%;\n    border: 2px solid #b8c2cc;\n    animation: ball-scale-ripple-multiple 1.25s 0s infinite cubic-bezier(0.21, 0.53, 0.56, 0.8); }\n"
  },
  {
    "path": "public/backend/css/plugins/loaders/animations/ball-scale-ripple.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes ball-scale-ripple {\n  0% {\n    transform: scale(0.1);\n    opacity: 1; }\n  70% {\n    transform: scale(1);\n    opacity: 0.7; }\n  100% {\n    opacity: 0.0; } }\n\n.ball-scale-ripple > div {\n  animation-fill-mode: both;\n  height: 50px;\n  width: 50px;\n  border-radius: 100%;\n  border: 2px solid #b8c2cc;\n  animation: ball-scale-ripple 1s 0s infinite cubic-bezier(0.21, 0.53, 0.56, 0.8); }\n"
  },
  {
    "path": "public/backend/css/plugins/loaders/animations/ball-scale.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes ball-scale {\n  0% {\n    transform: scale(0); }\n  100% {\n    transform: scale(1);\n    opacity: 0; } }\n\n.ball-scale > div {\n  background-color: #b8c2cc;\n  width: 15px;\n  height: 15px;\n  border-radius: 100%;\n  margin: 2px;\n  animation-fill-mode: both;\n  display: inline-block;\n  height: 60px;\n  width: 60px;\n  animation: ball-scale 1s 0s ease-in-out infinite; }\n"
  },
  {
    "path": "public/backend/css/plugins/loaders/animations/ball-spin-fade-loader.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes ball-spin-fade-loader {\n  50% {\n    opacity: 0.3;\n    transform: scale(0.4); }\n  100% {\n    opacity: 1;\n    transform: scale(1); } }\n\n.ball-spin-fade-loader {\n  position: relative;\n  top: -10px;\n  left: -10px; }\n  .ball-spin-fade-loader > div:nth-child(1) {\n    top: 25px;\n    left: 0;\n    animation: ball-spin-fade-loader 1s -0.96s infinite linear; }\n  .ball-spin-fade-loader > div:nth-child(2) {\n    top: 17.04545px;\n    left: 17.04545px;\n    animation: ball-spin-fade-loader 1s -0.84s infinite linear; }\n  .ball-spin-fade-loader > div:nth-child(3) {\n    top: 0;\n    left: 25px;\n    animation: ball-spin-fade-loader 1s -0.72s infinite linear; }\n  .ball-spin-fade-loader > div:nth-child(4) {\n    top: -17.04545px;\n    left: 17.04545px;\n    animation: ball-spin-fade-loader 1s -0.6s infinite linear; }\n  .ball-spin-fade-loader > div:nth-child(5) {\n    top: -25px;\n    left: 0;\n    animation: ball-spin-fade-loader 1s -0.48s infinite linear; }\n  .ball-spin-fade-loader > div:nth-child(6) {\n    top: -17.04545px;\n    left: -17.04545px;\n    animation: ball-spin-fade-loader 1s -0.36s infinite linear; }\n  .ball-spin-fade-loader > div:nth-child(7) {\n    top: 0;\n    left: -25px;\n    animation: ball-spin-fade-loader 1s -0.24s infinite linear; }\n  .ball-spin-fade-loader > div:nth-child(8) {\n    top: 17.04545px;\n    left: -17.04545px;\n    animation: ball-spin-fade-loader 1s -0.12s infinite linear; }\n  .ball-spin-fade-loader > div {\n    background-color: #b8c2cc;\n    width: 15px;\n    height: 15px;\n    border-radius: 100%;\n    margin: 2px;\n    animation-fill-mode: both;\n    position: absolute; }\n"
  },
  {
    "path": "public/backend/css/plugins/loaders/animations/ball-spin-loader.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes ball-spin-loader {\n  75% {\n    opacity: 0.2; }\n  100% {\n    opacity: 1; } }\n\n.ball-spin-loader {\n  position: relative; }\n  .ball-spin-loader > span:nth-child(1) {\n    top: 45px;\n    left: 0;\n    animation: ball-spin-loader 2s 0.9s infinite linear; }\n  .ball-spin-loader > span:nth-child(2) {\n    top: 30.68182px;\n    left: 30.68182px;\n    animation: ball-spin-loader 2s 1.8s infinite linear; }\n  .ball-spin-loader > span:nth-child(3) {\n    top: 0;\n    left: 45px;\n    animation: ball-spin-loader 2s 2.7s infinite linear; }\n  .ball-spin-loader > span:nth-child(4) {\n    top: -30.68182px;\n    left: 30.68182px;\n    animation: ball-spin-loader 2s 3.6s infinite linear; }\n  .ball-spin-loader > span:nth-child(5) {\n    top: -45px;\n    left: 0;\n    animation: ball-spin-loader 2s 4.5s infinite linear; }\n  .ball-spin-loader > span:nth-child(6) {\n    top: -30.68182px;\n    left: -30.68182px;\n    animation: ball-spin-loader 2s 5.4s infinite linear; }\n  .ball-spin-loader > span:nth-child(7) {\n    top: 0;\n    left: -45px;\n    animation: ball-spin-loader 2s 6.3s infinite linear; }\n  .ball-spin-loader > span:nth-child(8) {\n    top: 30.68182px;\n    left: -30.68182px;\n    animation: ball-spin-loader 2s 7.2s infinite linear; }\n  .ball-spin-loader > div {\n    animation-fill-mode: both;\n    position: absolute;\n    width: 15px;\n    height: 15px;\n    border-radius: 100%;\n    background: green; }\n"
  },
  {
    "path": "public/backend/css/plugins/loaders/animations/ball-triangle-trace.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes ball-triangle-path-1 {\n  33% {\n    transform: translate(25px, -50px); }\n  66% {\n    transform: translate(50px, 0px); }\n  100% {\n    transform: translate(0px, 0px); } }\n\n@keyframes ball-triangle-path-2 {\n  33% {\n    transform: translate(25px, 50px); }\n  66% {\n    transform: translate(-25px, 50px); }\n  100% {\n    transform: translate(0px, 0px); } }\n\n@keyframes ball-triangle-path-3 {\n  33% {\n    transform: translate(-50px, 0px); }\n  66% {\n    transform: translate(-25px, -50px); }\n  100% {\n    transform: translate(0px, 0px); } }\n\n.ball-triangle-path {\n  position: relative;\n  transform: translate(-29.994px, -37.50938px); }\n  .ball-triangle-path > div:nth-child(1) {\n    animation-name: ball-triangle-path-1;\n    animation-delay: 0;\n    animation-duration: 2s;\n    animation-timing-function: ease-in-out;\n    animation-iteration-count: infinite; }\n  .ball-triangle-path > div:nth-child(2) {\n    animation-name: ball-triangle-path-2;\n    animation-delay: 0;\n    animation-duration: 2s;\n    animation-timing-function: ease-in-out;\n    animation-iteration-count: infinite; }\n  .ball-triangle-path > div:nth-child(3) {\n    animation-name: ball-triangle-path-3;\n    animation-delay: 0;\n    animation-duration: 2s;\n    animation-timing-function: ease-in-out;\n    animation-iteration-count: infinite; }\n  .ball-triangle-path > div {\n    animation-fill-mode: both;\n    position: absolute;\n    width: 10px;\n    height: 10px;\n    border-radius: 100%;\n    border: 1px solid #b8c2cc; }\n    .ball-triangle-path > div:nth-of-type(1) {\n      top: 50px; }\n    .ball-triangle-path > div:nth-of-type(2) {\n      left: 25px; }\n    .ball-triangle-path > div:nth-of-type(3) {\n      top: 50px;\n      left: 50px; }\n"
  },
  {
    "path": "public/backend/css/plugins/loaders/animations/ball-zig-zag-deflect.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes ball-zig-deflect {\n  17% {\n    transform: translate(-15px, -30px); }\n  34% {\n    transform: translate(15px, -30px); }\n  50% {\n    transform: translate(0, 0); }\n  67% {\n    transform: translate(15px, -30px); }\n  84% {\n    transform: translate(-15px, -30px); }\n  100% {\n    transform: translate(0, 0); } }\n\n@keyframes ball-zag-deflect {\n  17% {\n    transform: translate(15px, 30px); }\n  34% {\n    transform: translate(-15px, 30px); }\n  50% {\n    transform: translate(0, 0); }\n  67% {\n    transform: translate(-15px, 30px); }\n  84% {\n    transform: translate(15px, 30px); }\n  100% {\n    transform: translate(0, 0); } }\n\n.ball-zig-zag-deflect {\n  position: relative;\n  transform: translate(-15px, -15px); }\n  .ball-zig-zag-deflect > div {\n    background-color: #b8c2cc;\n    width: 15px;\n    height: 15px;\n    border-radius: 100%;\n    margin: 2px;\n    animation-fill-mode: both;\n    position: absolute;\n    margin-left: 15px;\n    top: 4px;\n    left: -7px; }\n    .ball-zig-zag-deflect > div:first-child {\n      animation: ball-zig-deflect 1.5s 0s infinite linear; }\n    .ball-zig-zag-deflect > div:last-child {\n      animation: ball-zag-deflect 1.5s 0s infinite linear; }\n"
  },
  {
    "path": "public/backend/css/plugins/loaders/animations/ball-zig-zag.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes ball-zig {\n  33% {\n    transform: translate(-15px, -30px); }\n  66% {\n    transform: translate(15px, -30px); }\n  100% {\n    transform: translate(0, 0); } }\n\n@keyframes ball-zag {\n  33% {\n    transform: translate(15px, 30px); }\n  66% {\n    transform: translate(-15px, 30px); }\n  100% {\n    transform: translate(0, 0); } }\n\n.ball-zig-zag {\n  position: relative;\n  transform: translate(-15px, -15px); }\n  .ball-zig-zag > div {\n    background-color: #b8c2cc;\n    width: 15px;\n    height: 15px;\n    border-radius: 100%;\n    margin: 2px;\n    animation-fill-mode: both;\n    position: absolute;\n    margin-left: 15px;\n    top: 4px;\n    left: -7px; }\n    .ball-zig-zag > div:first-child {\n      animation: ball-zig 0.7s 0s infinite linear; }\n    .ball-zig-zag > div:last-child {\n      animation: ball-zag 0.7s 0s infinite linear; }\n"
  },
  {
    "path": "public/backend/css/plugins/loaders/animations/cube-transition.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes cube-transition {\n  25% {\n    transform: translateX(50px) scale(0.5) rotate(-90deg); }\n  50% {\n    transform: translate(50px, 50px) rotate(-180deg); }\n  75% {\n    transform: translateY(50px) scale(0.5) rotate(-270deg); }\n  100% {\n    transform: rotate(-360deg); } }\n\n.cube-transition {\n  position: relative;\n  transform: translate(-25px, -25px); }\n  .cube-transition > div {\n    animation-fill-mode: both;\n    width: 10px;\n    height: 10px;\n    position: absolute;\n    top: -5px;\n    left: -5px;\n    background-color: #b8c2cc;\n    animation: cube-transition 1.6s 0s infinite ease-in-out; }\n    .cube-transition > div:last-child {\n      animation-delay: -0.8s; }\n"
  },
  {
    "path": "public/backend/css/plugins/loaders/animations/line-scale-pulse-out-rapid.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes line-scale-pulse-out-rapid {\n  0% {\n    transform: scaley(1); }\n  80% {\n    transform: scaley(0.3); }\n  90% {\n    transform: scaley(1); } }\n\n.line-scale-pulse-out-rapid > div {\n  background-color: #b8c2cc;\n  width: 4px;\n  height: 3.45rem;\n  border-radius: 2px;\n  margin: 2px;\n  animation-fill-mode: both;\n  display: inline-block;\n  vertical-align: middle;\n  animation: line-scale-pulse-out-rapid 0.9s -0.5s infinite cubic-bezier(0.11, 0.49, 0.38, 0.78); }\n  .line-scale-pulse-out-rapid > div:nth-child(2), .line-scale-pulse-out-rapid > div:nth-child(4) {\n    animation-delay: -0.25s !important; }\n  .line-scale-pulse-out-rapid > div:nth-child(1), .line-scale-pulse-out-rapid > div:nth-child(5) {\n    animation-delay: 0s !important; }\n"
  },
  {
    "path": "public/backend/css/plugins/loaders/animations/line-scale-pulse-out.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes line-scale-pulse-out {\n  0% {\n    transform: scaley(1); }\n  50% {\n    transform: scaley(0.4); }\n  100% {\n    transform: scaley(1); } }\n\n.line-scale-pulse-out > div {\n  background-color: #b8c2cc;\n  width: 4px;\n  height: 3.45rem;\n  border-radius: 2px;\n  margin: 2px;\n  animation-fill-mode: both;\n  display: inline-block;\n  animation: line-scale-pulse-out 0.9s -0.6s infinite cubic-bezier(0.85, 0.25, 0.37, 0.85); }\n  .line-scale-pulse-out > div:nth-child(2), .line-scale-pulse-out > div:nth-child(4) {\n    animation-delay: -0.4s !important; }\n  .line-scale-pulse-out > div:nth-child(1), .line-scale-pulse-out > div:nth-child(5) {\n    animation-delay: -0.2s !important; }\n"
  },
  {
    "path": "public/backend/css/plugins/loaders/animations/line-scale-random.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes line-scale-party {\n  0% {\n    transform: scale(1); }\n  50% {\n    transform: scale(0.5); }\n  100% {\n    transform: scale(1); } }\n\n.line-scale-party > div:nth-child(1) {\n  animation-delay: -0.08s;\n  animation-duration: 1.27s; }\n\n.line-scale-party > div:nth-child(2) {\n  animation-delay: 0.04s;\n  animation-duration: 0.74s; }\n\n.line-scale-party > div:nth-child(3) {\n  animation-delay: 0.67s;\n  animation-duration: 1.09s; }\n\n.line-scale-party > div:nth-child(4) {\n  animation-delay: 0.34s;\n  animation-duration: 0.37s; }\n\n.line-scale-party > div {\n  background-color: #b8c2cc;\n  width: 4px;\n  height: 3.45rem;\n  border-radius: 2px;\n  margin: 2px;\n  animation-fill-mode: both;\n  display: inline-block;\n  animation-name: line-scale-party;\n  animation-iteration-count: infinite;\n  animation-delay: 0; }\n"
  },
  {
    "path": "public/backend/css/plugins/loaders/animations/line-scale.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes line-scale {\n  0% {\n    transform: scaley(1); }\n  50% {\n    transform: scaley(0.4); }\n  100% {\n    transform: scaley(1); } }\n\n.line-scale > div:nth-child(1) {\n  animation: line-scale 1s -0.4s infinite cubic-bezier(0.2, 0.68, 0.18, 1.08); }\n\n.line-scale > div:nth-child(2) {\n  animation: line-scale 1s -0.3s infinite cubic-bezier(0.2, 0.68, 0.18, 1.08); }\n\n.line-scale > div:nth-child(3) {\n  animation: line-scale 1s -0.2s infinite cubic-bezier(0.2, 0.68, 0.18, 1.08); }\n\n.line-scale > div:nth-child(4) {\n  animation: line-scale 1s -0.1s infinite cubic-bezier(0.2, 0.68, 0.18, 1.08); }\n\n.line-scale > div:nth-child(5) {\n  animation: line-scale 1s 0s infinite cubic-bezier(0.2, 0.68, 0.18, 1.08); }\n\n.line-scale > div {\n  background-color: #b8c2cc;\n  width: 4px;\n  height: 3.45rem;\n  border-radius: 2px;\n  margin: 2px;\n  animation-fill-mode: both;\n  display: inline-block; }\n"
  },
  {
    "path": "public/backend/css/plugins/loaders/animations/line-spin-fade-loader.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes line-spin-fade-loader {\n  50% {\n    opacity: 0.3; }\n  100% {\n    opacity: 1; } }\n\n.line-spin-fade-loader {\n  position: relative;\n  top: -10px;\n  left: -4px; }\n  .line-spin-fade-loader > div:nth-child(1) {\n    top: 20px;\n    left: 0;\n    animation: line-spin-fade-loader 1.2s -0.84s infinite ease-in-out; }\n  .line-spin-fade-loader > div:nth-child(2) {\n    top: 13.63636px;\n    left: 13.63636px;\n    transform: rotate(-45deg);\n    animation: line-spin-fade-loader 1.2s -0.72s infinite ease-in-out; }\n  .line-spin-fade-loader > div:nth-child(3) {\n    top: 0;\n    left: 20px;\n    transform: rotate(90deg);\n    animation: line-spin-fade-loader 1.2s -0.6s infinite ease-in-out; }\n  .line-spin-fade-loader > div:nth-child(4) {\n    top: -13.63636px;\n    left: 13.63636px;\n    transform: rotate(45deg);\n    animation: line-spin-fade-loader 1.2s -0.48s infinite ease-in-out; }\n  .line-spin-fade-loader > div:nth-child(5) {\n    top: -20px;\n    left: 0;\n    animation: line-spin-fade-loader 1.2s -0.36s infinite ease-in-out; }\n  .line-spin-fade-loader > div:nth-child(6) {\n    top: -13.63636px;\n    left: -13.63636px;\n    transform: rotate(-45deg);\n    animation: line-spin-fade-loader 1.2s -0.24s infinite ease-in-out; }\n  .line-spin-fade-loader > div:nth-child(7) {\n    top: 0;\n    left: -20px;\n    transform: rotate(90deg);\n    animation: line-spin-fade-loader 1.2s -0.12s infinite ease-in-out; }\n  .line-spin-fade-loader > div:nth-child(8) {\n    top: 13.63636px;\n    left: -13.63636px;\n    transform: rotate(45deg);\n    animation: line-spin-fade-loader 1.2s 0s infinite ease-in-out; }\n  .line-spin-fade-loader > div {\n    background-color: #b8c2cc;\n    width: 4px;\n    height: 3.45rem;\n    border-radius: 2px;\n    margin: 2px;\n    animation-fill-mode: both;\n    position: absolute;\n    width: 5px;\n    height: 15px; }\n"
  },
  {
    "path": "public/backend/css/plugins/loaders/animations/pacman.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes rotate_pacman_half_up {\n  0% {\n    transform: rotate(270deg); }\n  50% {\n    transform: rotate(360deg); }\n  100% {\n    transform: rotate(270deg); } }\n\n@keyframes rotate_pacman_half_down {\n  0% {\n    transform: rotate(90deg); }\n  50% {\n    transform: rotate(0deg); }\n  100% {\n    transform: rotate(90deg); } }\n\n@keyframes pacman-balls {\n  75% {\n    opacity: 0.7; }\n  100% {\n    transform: translate(-100px, -6.25px); } }\n\n.pacman {\n  position: relative; }\n  .pacman > div:nth-child(2) {\n    animation: pacman-balls 1s -0.99s infinite linear; }\n  .pacman > div:nth-child(3) {\n    animation: pacman-balls 1s -0.66s infinite linear; }\n  .pacman > div:nth-child(4) {\n    animation: pacman-balls 1s -0.33s infinite linear; }\n  .pacman > div:nth-child(5) {\n    animation: pacman-balls 1s 0s infinite linear; }\n  .pacman > div:first-of-type {\n    width: 0px;\n    height: 0px;\n    border-right: 25px solid transparent;\n    border-top: 25px solid #b8c2cc;\n    border-left: 25px solid #b8c2cc;\n    border-bottom: 25px solid #b8c2cc;\n    border-radius: 25px;\n    animation: rotate_pacman_half_up 0.5s 0s infinite;\n    position: relative;\n    left: -30px; }\n  .pacman > div:nth-child(2) {\n    width: 0px;\n    height: 0px;\n    border-right: 25px solid transparent;\n    border-top: 25px solid #b8c2cc;\n    border-left: 25px solid #b8c2cc;\n    border-bottom: 25px solid #b8c2cc;\n    border-radius: 25px;\n    animation: rotate_pacman_half_down 0.5s 0s infinite;\n    margin-top: -50px;\n    position: relative;\n    left: -30px; }\n  .pacman > div:nth-child(3),\n  .pacman > div:nth-child(4),\n  .pacman > div:nth-child(5),\n  .pacman > div:nth-child(6) {\n    background-color: #b8c2cc;\n    width: 15px;\n    height: 15px;\n    border-radius: 100%;\n    margin: 2px;\n    width: 10px;\n    height: 10px;\n    position: absolute;\n    transform: translate(0, -6.25px);\n    top: 25px;\n    left: 70px; }\n"
  },
  {
    "path": "public/backend/css/plugins/loaders/animations/semi-circle-spin.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes spin-rotate {\n  0% {\n    transform: rotate(0deg); }\n  50% {\n    transform: rotate(180deg); }\n  100% {\n    transform: rotate(360deg); } }\n\n.semi-circle-spin {\n  position: relative;\n  width: 35px;\n  height: 35px;\n  overflow: hidden; }\n  .semi-circle-spin > div {\n    position: absolute;\n    border-width: 0px;\n    border-radius: 100%;\n    animation: spin-rotate 0.6s 0s infinite linear;\n    background-image: linear-gradient(transparent 0%, transparent 70%, #b8c2cc 30%, #b8c2cc 100%);\n    width: 100%;\n    height: 100%; }\n"
  },
  {
    "path": "public/backend/css/plugins/loaders/animations/square-spin.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes square-spin {\n  25% {\n    transform: perspective(100px) rotateX(180deg) rotateY(0); }\n  50% {\n    transform: perspective(100px) rotateX(180deg) rotateY(180deg); }\n  75% {\n    transform: perspective(100px) rotateX(0) rotateY(180deg); }\n  100% {\n    transform: perspective(100px) rotateX(0) rotateY(0); } }\n\n.square-spin > div {\n  animation-fill-mode: both;\n  width: 50px;\n  height: 50px;\n  background: #b8c2cc;\n  animation: square-spin 3s 0s cubic-bezier(0.09, 0.57, 0.49, 0.9) infinite; }\n"
  },
  {
    "path": "public/backend/css/plugins/loaders/animations/triangle-skew-spin.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes triangle-skew-spin {\n  25% {\n    transform: perspective(100px) rotateX(180deg) rotateY(0); }\n  50% {\n    transform: perspective(100px) rotateX(180deg) rotateY(180deg); }\n  75% {\n    transform: perspective(100px) rotateX(0) rotateY(180deg); }\n  100% {\n    transform: perspective(100px) rotateX(0) rotateY(0); } }\n\n.triangle-skew-spin > div {\n  animation-fill-mode: both;\n  width: 0;\n  height: 0;\n  border-left: 20px solid transparent;\n  border-right: 20px solid transparent;\n  border-bottom: 20px solid #b8c2cc;\n  animation: triangle-skew-spin 3s 0s cubic-bezier(0.09, 0.57, 0.49, 0.9) infinite; }\n"
  },
  {
    "path": "public/backend/css/plugins/loaders/loaders.css",
    "content": "/**\n * Copyright (c) 2016 Connor Atherton\n *\n * All animations must live in their own file\n * in the animations directory and be included\n * here.\n *\n */\n/**\n * Styles shared by multiple animations\n */\n/*========================================================\n        DARK LAYOUT\n=========================================================*/\n/* Custom Loader.CSS */\n.loader-container {\n  position: absolute;\n  top: 50%;\n  left: 50%; }\n\n.double-bounce {\n  width: 40px;\n  height: 40px;\n  position: relative;\n  margin: 40px auto; }\n  .double-bounce .child {\n    width: 100%;\n    height: 100%;\n    border-radius: 50%;\n    background-color: #333;\n    opacity: 0.6;\n    position: absolute;\n    top: 0;\n    left: 0;\n    animation: doubleBounce 2s infinite ease-in-out; }\n  .double-bounce .double-bounce2 {\n    animation-delay: -1.0s; }\n\n@-webkit-keyframes doubleBounce {\n  0%, 100% {\n    transform: scale(0); }\n  50% {\n    transform: scale(1); } }\n\n@keyframes doubleBounce {\n  0%, 100% {\n    transform: scale(0); }\n  50% {\n    transform: scale(1); } }\n\n.chasing-dots {\n  width: 40px;\n  height: 40px;\n  position: relative;\n  text-align: center;\n  animation: chasingDotsRotate 2s infinite linear; }\n  .chasing-dots .child {\n    width: 60%;\n    height: 60%;\n    display: inline-block;\n    position: absolute;\n    top: 0;\n    background-color: #333;\n    border-radius: 100%;\n    animation: chasingDotsBounce 2s infinite ease-in-out; }\n  .chasing-dots .dot2 {\n    top: auto;\n    bottom: 0;\n    animation-delay: -1s; }\n\n@-webkit-keyframes chasingDotsRotate {\n  100% {\n    transform: rotate(360deg); } }\n\n@keyframes chasingDotsRotate {\n  100% {\n    transform: rotate(360deg); } }\n\n@-webkit-keyframes chasingDotsBounce {\n  0%, 100% {\n    transform: scale(0); }\n  50% {\n    transform: scale(1); } }\n\n@keyframes chasingDotsBounce {\n  0%, 100% {\n    transform: scale(0); }\n  50% {\n    transform: scale(1); } }\n\n/*\n * Spinner positions\n * 1 2 3\n * 4 5 6\n * 7 8 9\n */\n.cube-grid {\n  width: 40px;\n  height: 40px;\n  margin: 40px auto; }\n  .cube-grid .cube {\n    width: 33.33%;\n    height: 33.33%;\n    background-color: #333;\n    float: left;\n    animation: cubeGridScaleDelay 1.3s infinite ease-in-out; }\n  .cube-grid .cube1 {\n    animation-delay: 0.2s; }\n  .cube-grid .cube2 {\n    animation-delay: 0.3s; }\n  .cube-grid .cube3 {\n    animation-delay: 0.4s; }\n  .cube-grid .cube4 {\n    animation-delay: 0.1s; }\n  .cube-grid .cube5 {\n    animation-delay: 0.2s; }\n  .cube-grid .cube6 {\n    animation-delay: 0.3s; }\n  .cube-grid .cube7 {\n    animation-delay: 0.0s; }\n  .cube-grid .cube8 {\n    animation-delay: 0.1s; }\n  .cube-grid .cube9 {\n    animation-delay: 0.2s; }\n\n@-webkit-keyframes cubeGridScaleDelay {\n  0%, 70%, 100% {\n    transform: scale3D(1, 1, 1); }\n  35% {\n    transform: scale3D(0, 0, 1); } }\n\n@keyframes cubeGridScaleDelay {\n  0%, 70%, 100% {\n    transform: scale3D(1, 1, 1); }\n  35% {\n    transform: scale3D(0, 0, 1); } }\n\n.fading-circle {\n  margin: 40px auto;\n  width: 40px;\n  height: 40px;\n  position: relative; }\n  .fading-circle .circle {\n    width: 100%;\n    height: 100%;\n    position: absolute;\n    left: 0;\n    top: 0; }\n    .fading-circle .circle:before {\n      content: '';\n      display: block;\n      margin: 0 auto;\n      width: 15%;\n      height: 15%;\n      background-color: #333;\n      border-radius: 100%;\n      animation: circleFadeDelay 1.2s infinite ease-in-out both; }\n  .fading-circle .circle2 {\n    transform: rotate(30deg); }\n    .fading-circle .circle2:before {\n      animation-delay: -1.1s; }\n  .fading-circle .circle3 {\n    transform: rotate(60deg); }\n    .fading-circle .circle3:before {\n      animation-delay: -1s; }\n  .fading-circle .circle4 {\n    transform: rotate(90deg); }\n    .fading-circle .circle4:before {\n      animation-delay: -0.9s; }\n  .fading-circle .circle5 {\n    transform: rotate(120deg); }\n    .fading-circle .circle5:before {\n      animation-delay: -0.8s; }\n  .fading-circle .circle6 {\n    transform: rotate(150deg); }\n    .fading-circle .circle6:before {\n      animation-delay: -0.7s; }\n  .fading-circle .circle7 {\n    transform: rotate(180deg); }\n    .fading-circle .circle7:before {\n      animation-delay: -0.6s; }\n  .fading-circle .circle8 {\n    transform: rotate(210deg); }\n    .fading-circle .circle8:before {\n      animation-delay: -0.5s; }\n  .fading-circle .circle9 {\n    transform: rotate(240deg); }\n    .fading-circle .circle9:before {\n      animation-delay: -0.4s; }\n  .fading-circle .circle10 {\n    transform: rotate(270deg); }\n    .fading-circle .circle10:before {\n      animation-delay: -0.3s; }\n  .fading-circle .circle11 {\n    transform: rotate(300deg); }\n    .fading-circle .circle11:before {\n      animation-delay: -0.2s; }\n  .fading-circle .circle12 {\n    transform: rotate(330deg); }\n    .fading-circle .circle12:before {\n      animation-delay: -0.1s; }\n\n@-webkit-keyframes circleFadeDelay {\n  0%, 39%, 100% {\n    opacity: 0; }\n  40% {\n    opacity: 1; } }\n\n@keyframes circleFadeDelay {\n  0%, 39%, 100% {\n    opacity: 0; }\n  40% {\n    opacity: 1; } }\n\n.folding-cube {\n  width: 40px;\n  height: 40px;\n  position: relative;\n  transform: rotateZ(45deg); }\n  .folding-cube .cube {\n    float: left;\n    width: 50%;\n    height: 50%;\n    position: relative;\n    transform: scale(1.1); }\n    .folding-cube .cube:before {\n      content: '';\n      position: absolute;\n      top: 0;\n      left: 0;\n      width: 100%;\n      height: 100%;\n      background-color: #333;\n      animation: foldCubeAngle 2.4s infinite linear both;\n      transform-origin: 100% 100%; }\n  .folding-cube .cube2 {\n    transform: scale(1.1) rotateZ(90deg); }\n    .folding-cube .cube2:before {\n      animation-delay: 0.3s; }\n  .folding-cube .cube3 {\n    transform: scale(1.1) rotateZ(180deg); }\n    .folding-cube .cube3:before {\n      animation-delay: 0.6s; }\n  .folding-cube .cube4 {\n    transform: scale(1.1) rotateZ(270deg); }\n    .folding-cube .cube4:before {\n      animation-delay: 0.9s; }\n\n@-webkit-keyframes foldCubeAngle {\n  0%, 10% {\n    transform: perspective(140px) rotateX(-180deg);\n    opacity: 0; }\n  25%, 75% {\n    transform: perspective(140px) rotateX(0deg);\n    opacity: 1; }\n  90%, 100% {\n    transform: perspective(140px) rotateY(180deg);\n    opacity: 0; } }\n\n@keyframes foldCubeAngle {\n  0%, 10% {\n    transform: perspective(140px) rotateX(-180deg);\n    opacity: 0; }\n  25%, 75% {\n    transform: perspective(140px) rotateX(0deg);\n    opacity: 1; }\n  90%, 100% {\n    transform: perspective(140px) rotateY(180deg);\n    opacity: 0; } }\n\n/**\n * Dots\n */\n/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes scale {\n  0% {\n    transform: scale(1);\n    opacity: 1; }\n  45% {\n    transform: scale(0.1);\n    opacity: 0.7; }\n  80% {\n    transform: scale(1);\n    opacity: 1; } }\n\n.ball-pulse > div:nth-child(1) {\n  animation: scale 0.75s -0.24s infinite cubic-bezier(0.2, 0.68, 0.18, 1.08); }\n\n.ball-pulse > div:nth-child(2) {\n  animation: scale 0.75s -0.12s infinite cubic-bezier(0.2, 0.68, 0.18, 1.08); }\n\n.ball-pulse > div:nth-child(3) {\n  animation: scale 0.75s 0s infinite cubic-bezier(0.2, 0.68, 0.18, 1.08); }\n\n.ball-pulse > div {\n  background-color: #b8c2cc;\n  width: 15px;\n  height: 15px;\n  border-radius: 100%;\n  margin: 2px;\n  animation-fill-mode: both;\n  display: inline-block; }\n\n/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes ball-pulse-sync {\n  33% {\n    transform: translateY(10px); }\n  66% {\n    transform: translateY(-10px); }\n  100% {\n    transform: translateY(0); } }\n\n.ball-pulse-sync > div:nth-child(1) {\n  animation: ball-pulse-sync 0.6s -0.14s infinite ease-in-out; }\n\n.ball-pulse-sync > div:nth-child(2) {\n  animation: ball-pulse-sync 0.6s -0.07s infinite ease-in-out; }\n\n.ball-pulse-sync > div:nth-child(3) {\n  animation: ball-pulse-sync 0.6s 0s infinite ease-in-out; }\n\n.ball-pulse-sync > div {\n  background-color: #b8c2cc;\n  width: 15px;\n  height: 15px;\n  border-radius: 100%;\n  margin: 2px;\n  animation-fill-mode: both;\n  display: inline-block; }\n\n/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes ball-scale {\n  0% {\n    transform: scale(0); }\n  100% {\n    transform: scale(1);\n    opacity: 0; } }\n\n.ball-scale > div {\n  background-color: #b8c2cc;\n  width: 15px;\n  height: 15px;\n  border-radius: 100%;\n  margin: 2px;\n  animation-fill-mode: both;\n  display: inline-block;\n  height: 60px;\n  width: 60px;\n  animation: ball-scale 1s 0s ease-in-out infinite; }\n\n/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes ball-scale {\n  0% {\n    transform: scale(0); }\n  100% {\n    transform: scale(1);\n    opacity: 0; } }\n\n.ball-scale > div {\n  background-color: #b8c2cc;\n  width: 15px;\n  height: 15px;\n  border-radius: 100%;\n  margin: 2px;\n  animation-fill-mode: both;\n  display: inline-block;\n  height: 60px;\n  width: 60px;\n  animation: ball-scale 1s 0s ease-in-out infinite; }\n\n.ball-scale-random {\n  width: 37px;\n  height: 40px; }\n  .ball-scale-random > div {\n    background-color: #b8c2cc;\n    width: 15px;\n    height: 15px;\n    border-radius: 100%;\n    margin: 2px;\n    animation-fill-mode: both;\n    position: absolute;\n    display: inline-block;\n    height: 30px;\n    width: 30px;\n    animation: ball-scale 1s 0s ease-in-out infinite; }\n    .ball-scale-random > div:nth-child(1) {\n      margin-left: -7px;\n      animation: ball-scale 1s 0.2s ease-in-out infinite; }\n    .ball-scale-random > div:nth-child(3) {\n      margin-left: -2px;\n      margin-top: 9px;\n      animation: ball-scale 1s 0.5s ease-in-out infinite; }\n\n/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes rotate {\n  0% {\n    transform: rotate(0deg); }\n  50% {\n    transform: rotate(180deg); }\n  100% {\n    transform: rotate(360deg); } }\n\n.ball-rotate {\n  position: relative; }\n  .ball-rotate > div {\n    background-color: #b8c2cc;\n    width: 15px;\n    height: 15px;\n    border-radius: 100%;\n    margin: 2px;\n    animation-fill-mode: both;\n    position: relative; }\n    .ball-rotate > div:first-child {\n      animation: rotate 1s 0s cubic-bezier(0.7, -0.13, 0.22, 0.86) infinite; }\n    .ball-rotate > div:before, .ball-rotate > div:after {\n      background-color: #b8c2cc;\n      width: 15px;\n      height: 15px;\n      border-radius: 100%;\n      margin: 2px;\n      content: \"\";\n      position: absolute;\n      opacity: 0.8; }\n    .ball-rotate > div:before {\n      top: 0px;\n      left: -28px; }\n    .ball-rotate > div:after {\n      top: 0px;\n      left: 25px; }\n\n/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes rotate {\n  0% {\n    transform: rotate(0deg) scale(1); }\n  50% {\n    transform: rotate(180deg) scale(0.6); }\n  100% {\n    transform: rotate(360deg) scale(1); } }\n\n.ball-clip-rotate > div {\n  background-color: #b8c2cc;\n  width: 15px;\n  height: 15px;\n  border-radius: 100%;\n  margin: 2px;\n  animation-fill-mode: both;\n  border: 2px solid #b8c2cc;\n  border-bottom-color: transparent;\n  height: 25px;\n  width: 25px;\n  background: transparent !important;\n  display: inline-block;\n  animation: rotate 0.75s 0s linear infinite; }\n\n/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes rotate {\n  0% {\n    transform: rotate(0deg) scale(1); }\n  50% {\n    transform: rotate(180deg) scale(0.6); }\n  100% {\n    transform: rotate(360deg) scale(1); } }\n\n@keyframes scale {\n  30% {\n    transform: scale(0.3); }\n  100% {\n    transform: scale(1); } }\n\n.ball-clip-rotate-pulse {\n  position: relative;\n  transform: translateY(-15px); }\n  .ball-clip-rotate-pulse > div {\n    animation-fill-mode: both;\n    position: absolute;\n    top: 0px;\n    left: 0px;\n    border-radius: 100%; }\n    .ball-clip-rotate-pulse > div:first-child {\n      background: #b8c2cc;\n      height: 16px;\n      width: 16px;\n      top: 7px;\n      left: -7px;\n      animation: scale 1s 0s cubic-bezier(0.09, 0.57, 0.49, 0.9) infinite; }\n    .ball-clip-rotate-pulse > div:last-child {\n      position: absolute;\n      border: 2px solid #b8c2cc;\n      width: 30px;\n      height: 30px;\n      left: -16px;\n      top: -2px;\n      background: transparent;\n      border: 2px solid;\n      border-color: #b8c2cc transparent #b8c2cc transparent;\n      animation: rotate 1s 0s cubic-bezier(0.09, 0.57, 0.49, 0.9) infinite;\n      animation-duration: 1s; }\n\n/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes rotate {\n  0% {\n    transform: rotate(0deg) scale(1); }\n  50% {\n    transform: rotate(180deg) scale(0.6); }\n  100% {\n    transform: rotate(360deg) scale(1); } }\n\n.ball-clip-rotate-multiple {\n  position: relative; }\n  .ball-clip-rotate-multiple > div {\n    animation-fill-mode: both;\n    position: absolute;\n    left: -20px;\n    top: -20px;\n    border: 2px solid #b8c2cc;\n    border-bottom-color: transparent;\n    border-top-color: transparent;\n    border-radius: 100%;\n    height: 35px;\n    width: 35px;\n    animation: rotate 1s 0s ease-in-out infinite; }\n    .ball-clip-rotate-multiple > div:last-child {\n      display: inline-block;\n      top: -10px;\n      left: -10px;\n      width: 15px;\n      height: 15px;\n      animation-duration: 0.5s;\n      border-color: #b8c2cc transparent #b8c2cc transparent;\n      animation-direction: reverse; }\n\n/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes ball-scale-ripple {\n  0% {\n    transform: scale(0.1);\n    opacity: 1; }\n  70% {\n    transform: scale(1);\n    opacity: 0.7; }\n  100% {\n    opacity: 0.0; } }\n\n.ball-scale-ripple > div {\n  animation-fill-mode: both;\n  height: 50px;\n  width: 50px;\n  border-radius: 100%;\n  border: 2px solid #b8c2cc;\n  animation: ball-scale-ripple 1s 0s infinite cubic-bezier(0.21, 0.53, 0.56, 0.8); }\n\n/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes ball-scale-ripple-multiple {\n  0% {\n    transform: scale(0.1);\n    opacity: 1; }\n  70% {\n    transform: scale(1);\n    opacity: 0.7; }\n  100% {\n    opacity: 0.0; } }\n\n.ball-scale-ripple-multiple {\n  position: relative;\n  transform: translateY(-25px); }\n  .ball-scale-ripple-multiple > div:nth-child(0) {\n    animation-delay: -0.8s; }\n  .ball-scale-ripple-multiple > div:nth-child(1) {\n    animation-delay: -0.6s; }\n  .ball-scale-ripple-multiple > div:nth-child(2) {\n    animation-delay: -0.4s; }\n  .ball-scale-ripple-multiple > div:nth-child(3) {\n    animation-delay: -0.2s; }\n  .ball-scale-ripple-multiple > div {\n    animation-fill-mode: both;\n    position: absolute;\n    top: -2px;\n    left: -26px;\n    width: 50px;\n    height: 50px;\n    border-radius: 100%;\n    border: 2px solid #b8c2cc;\n    animation: ball-scale-ripple-multiple 1.25s 0s infinite cubic-bezier(0.21, 0.53, 0.56, 0.8); }\n\n/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes ball-beat {\n  50% {\n    opacity: 0.2;\n    transform: scale(0.75); }\n  100% {\n    opacity: 1;\n    transform: scale(1); } }\n\n.ball-beat > div {\n  background-color: #b8c2cc;\n  width: 15px;\n  height: 15px;\n  border-radius: 100%;\n  margin: 2px;\n  animation-fill-mode: both;\n  display: inline-block;\n  animation: ball-beat 0.7s 0s infinite linear; }\n  .ball-beat > div:nth-child(2n-1) {\n    animation-delay: -0.35s !important; }\n\n/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes ball-scale-multiple {\n  0% {\n    transform: scale(0);\n    opacity: 0; }\n  5% {\n    opacity: 1; }\n  100% {\n    transform: scale(1);\n    opacity: 0; } }\n\n.ball-scale-multiple {\n  position: relative; }\n  .ball-scale-multiple > div:nth-child(2) {\n    animation-delay: -0.4s; }\n  .ball-scale-multiple > div:nth-child(3) {\n    animation-delay: -0.2s; }\n  .ball-scale-multiple > div {\n    background-color: #b8c2cc;\n    width: 15px;\n    height: 15px;\n    border-radius: 100%;\n    margin: 2px;\n    animation-fill-mode: both;\n    position: absolute;\n    top: 0px;\n    opacity: 0;\n    margin: 0;\n    width: 60px;\n    height: 60px;\n    animation: ball-scale-multiple 1s 0s linear infinite; }\n\n/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes ball-triangle-path-1 {\n  33% {\n    transform: translate(25px, -50px); }\n  66% {\n    transform: translate(50px, 0px); }\n  100% {\n    transform: translate(0px, 0px); } }\n\n@keyframes ball-triangle-path-2 {\n  33% {\n    transform: translate(25px, 50px); }\n  66% {\n    transform: translate(-25px, 50px); }\n  100% {\n    transform: translate(0px, 0px); } }\n\n@keyframes ball-triangle-path-3 {\n  33% {\n    transform: translate(-50px, 0px); }\n  66% {\n    transform: translate(-25px, -50px); }\n  100% {\n    transform: translate(0px, 0px); } }\n\n.ball-triangle-path {\n  position: relative;\n  transform: translate(-29.994px, -37.50938px); }\n  .ball-triangle-path > div:nth-child(1) {\n    animation-name: ball-triangle-path-1;\n    animation-delay: 0;\n    animation-duration: 2s;\n    animation-timing-function: ease-in-out;\n    animation-iteration-count: infinite; }\n  .ball-triangle-path > div:nth-child(2) {\n    animation-name: ball-triangle-path-2;\n    animation-delay: 0;\n    animation-duration: 2s;\n    animation-timing-function: ease-in-out;\n    animation-iteration-count: infinite; }\n  .ball-triangle-path > div:nth-child(3) {\n    animation-name: ball-triangle-path-3;\n    animation-delay: 0;\n    animation-duration: 2s;\n    animation-timing-function: ease-in-out;\n    animation-iteration-count: infinite; }\n  .ball-triangle-path > div {\n    animation-fill-mode: both;\n    position: absolute;\n    width: 10px;\n    height: 10px;\n    border-radius: 100%;\n    border: 1px solid #b8c2cc; }\n    .ball-triangle-path > div:nth-of-type(1) {\n      top: 50px; }\n    .ball-triangle-path > div:nth-of-type(2) {\n      left: 25px; }\n    .ball-triangle-path > div:nth-of-type(3) {\n      top: 50px;\n      left: 50px; }\n\n/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes ball-pulse-rise-even {\n  0% {\n    transform: scale(1.1); }\n  25% {\n    transform: translateY(-30px); }\n  50% {\n    transform: scale(0.4); }\n  75% {\n    transform: translateY(30px); }\n  100% {\n    transform: translateY(0);\n    transform: scale(1); } }\n\n@keyframes ball-pulse-rise-odd {\n  0% {\n    transform: scale(0.4); }\n  25% {\n    transform: translateY(30px); }\n  50% {\n    transform: scale(1.1); }\n  75% {\n    transform: translateY(-30px); }\n  100% {\n    transform: translateY(0);\n    transform: scale(0.75); } }\n\n.ball-pulse-rise > div {\n  background-color: #b8c2cc;\n  width: 15px;\n  height: 15px;\n  border-radius: 100%;\n  margin: 2px;\n  animation-fill-mode: both;\n  display: inline-block;\n  animation-duration: 1s;\n  animation-timing-function: cubic-bezier(0.15, 0.46, 0.9, 0.6);\n  animation-iteration-count: infinite;\n  animation-delay: 0; }\n  .ball-pulse-rise > div:nth-child(2n) {\n    animation-name: ball-pulse-rise-even; }\n  .ball-pulse-rise > div:nth-child(2n-1) {\n    animation-name: ball-pulse-rise-odd; }\n\n/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes ball-grid-beat {\n  50% {\n    opacity: 0.7; }\n  100% {\n    opacity: 1; } }\n\n.ball-grid-beat {\n  width: 57px; }\n  .ball-grid-beat > div:nth-child(1) {\n    animation-delay: 0.46s;\n    animation-duration: 1.36s; }\n  .ball-grid-beat > div:nth-child(2) {\n    animation-delay: 0.67s;\n    animation-duration: 0.71s; }\n  .ball-grid-beat > div:nth-child(3) {\n    animation-delay: 0.35s;\n    animation-duration: 1.51s; }\n  .ball-grid-beat > div:nth-child(4) {\n    animation-delay: 0.3s;\n    animation-duration: 1.06s; }\n  .ball-grid-beat > div:nth-child(5) {\n    animation-delay: -0.01s;\n    animation-duration: 1.59s; }\n  .ball-grid-beat > div:nth-child(6) {\n    animation-delay: 0.57s;\n    animation-duration: 1.14s; }\n  .ball-grid-beat > div:nth-child(7) {\n    animation-delay: 0.53s;\n    animation-duration: 1s; }\n  .ball-grid-beat > div:nth-child(8) {\n    animation-delay: 0.01s;\n    animation-duration: 1s; }\n  .ball-grid-beat > div:nth-child(9) {\n    animation-delay: 0.13s;\n    animation-duration: 0.96s; }\n  .ball-grid-beat > div {\n    background-color: #b8c2cc;\n    width: 15px;\n    height: 15px;\n    border-radius: 100%;\n    margin: 2px;\n    animation-fill-mode: both;\n    display: inline-block;\n    float: left;\n    animation-name: ball-grid-beat;\n    animation-iteration-count: infinite;\n    animation-delay: 0; }\n\n/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes ball-grid-pulse {\n  0% {\n    transform: scale(1); }\n  50% {\n    transform: scale(0.5);\n    opacity: 0.7; }\n  100% {\n    transform: scale(1);\n    opacity: 1; } }\n\n.ball-grid-pulse {\n  width: 57px; }\n  .ball-grid-pulse > div:nth-child(1) {\n    animation-delay: 0.63s;\n    animation-duration: 1.43s; }\n  .ball-grid-pulse > div:nth-child(2) {\n    animation-delay: 0.29s;\n    animation-duration: 0.64s; }\n  .ball-grid-pulse > div:nth-child(3) {\n    animation-delay: 0.35s;\n    animation-duration: 1.47s; }\n  .ball-grid-pulse > div:nth-child(4) {\n    animation-delay: 0.21s;\n    animation-duration: 1.38s; }\n  .ball-grid-pulse > div:nth-child(5) {\n    animation-delay: 0.24s;\n    animation-duration: 0.62s; }\n  .ball-grid-pulse > div:nth-child(6) {\n    animation-delay: 0.37s;\n    animation-duration: 0.92s; }\n  .ball-grid-pulse > div:nth-child(7) {\n    animation-delay: 0.48s;\n    animation-duration: 0.96s; }\n  .ball-grid-pulse > div:nth-child(8) {\n    animation-delay: -0.1s;\n    animation-duration: 1s; }\n  .ball-grid-pulse > div:nth-child(9) {\n    animation-delay: 0.52s;\n    animation-duration: 1.36s; }\n  .ball-grid-pulse > div {\n    background-color: #b8c2cc;\n    width: 15px;\n    height: 15px;\n    border-radius: 100%;\n    margin: 2px;\n    animation-fill-mode: both;\n    display: inline-block;\n    float: left;\n    animation-name: ball-grid-pulse;\n    animation-iteration-count: infinite;\n    animation-delay: 0; }\n\n/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes ball-spin-fade-loader {\n  50% {\n    opacity: 0.3;\n    transform: scale(0.4); }\n  100% {\n    opacity: 1;\n    transform: scale(1); } }\n\n.ball-spin-fade-loader {\n  position: relative;\n  top: -10px;\n  left: -10px; }\n  .ball-spin-fade-loader > div:nth-child(1) {\n    top: 25px;\n    left: 0;\n    animation: ball-spin-fade-loader 1s -0.96s infinite linear; }\n  .ball-spin-fade-loader > div:nth-child(2) {\n    top: 17.04545px;\n    left: 17.04545px;\n    animation: ball-spin-fade-loader 1s -0.84s infinite linear; }\n  .ball-spin-fade-loader > div:nth-child(3) {\n    top: 0;\n    left: 25px;\n    animation: ball-spin-fade-loader 1s -0.72s infinite linear; }\n  .ball-spin-fade-loader > div:nth-child(4) {\n    top: -17.04545px;\n    left: 17.04545px;\n    animation: ball-spin-fade-loader 1s -0.6s infinite linear; }\n  .ball-spin-fade-loader > div:nth-child(5) {\n    top: -25px;\n    left: 0;\n    animation: ball-spin-fade-loader 1s -0.48s infinite linear; }\n  .ball-spin-fade-loader > div:nth-child(6) {\n    top: -17.04545px;\n    left: -17.04545px;\n    animation: ball-spin-fade-loader 1s -0.36s infinite linear; }\n  .ball-spin-fade-loader > div:nth-child(7) {\n    top: 0;\n    left: -25px;\n    animation: ball-spin-fade-loader 1s -0.24s infinite linear; }\n  .ball-spin-fade-loader > div:nth-child(8) {\n    top: 17.04545px;\n    left: -17.04545px;\n    animation: ball-spin-fade-loader 1s -0.12s infinite linear; }\n  .ball-spin-fade-loader > div {\n    background-color: #b8c2cc;\n    width: 15px;\n    height: 15px;\n    border-radius: 100%;\n    margin: 2px;\n    animation-fill-mode: both;\n    position: absolute; }\n\n/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes ball-spin-loader {\n  75% {\n    opacity: 0.2; }\n  100% {\n    opacity: 1; } }\n\n.ball-spin-loader {\n  position: relative; }\n  .ball-spin-loader > span:nth-child(1) {\n    top: 45px;\n    left: 0;\n    animation: ball-spin-loader 2s 0.9s infinite linear; }\n  .ball-spin-loader > span:nth-child(2) {\n    top: 30.68182px;\n    left: 30.68182px;\n    animation: ball-spin-loader 2s 1.8s infinite linear; }\n  .ball-spin-loader > span:nth-child(3) {\n    top: 0;\n    left: 45px;\n    animation: ball-spin-loader 2s 2.7s infinite linear; }\n  .ball-spin-loader > span:nth-child(4) {\n    top: -30.68182px;\n    left: 30.68182px;\n    animation: ball-spin-loader 2s 3.6s infinite linear; }\n  .ball-spin-loader > span:nth-child(5) {\n    top: -45px;\n    left: 0;\n    animation: ball-spin-loader 2s 4.5s infinite linear; }\n  .ball-spin-loader > span:nth-child(6) {\n    top: -30.68182px;\n    left: -30.68182px;\n    animation: ball-spin-loader 2s 5.4s infinite linear; }\n  .ball-spin-loader > span:nth-child(7) {\n    top: 0;\n    left: -45px;\n    animation: ball-spin-loader 2s 6.3s infinite linear; }\n  .ball-spin-loader > span:nth-child(8) {\n    top: 30.68182px;\n    left: -30.68182px;\n    animation: ball-spin-loader 2s 7.2s infinite linear; }\n  .ball-spin-loader > div {\n    animation-fill-mode: both;\n    position: absolute;\n    width: 15px;\n    height: 15px;\n    border-radius: 100%;\n    background: green; }\n\n/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes ball-zig {\n  33% {\n    transform: translate(-15px, -30px); }\n  66% {\n    transform: translate(15px, -30px); }\n  100% {\n    transform: translate(0, 0); } }\n\n@keyframes ball-zag {\n  33% {\n    transform: translate(15px, 30px); }\n  66% {\n    transform: translate(-15px, 30px); }\n  100% {\n    transform: translate(0, 0); } }\n\n.ball-zig-zag {\n  position: relative;\n  transform: translate(-15px, -15px); }\n  .ball-zig-zag > div {\n    background-color: #b8c2cc;\n    width: 15px;\n    height: 15px;\n    border-radius: 100%;\n    margin: 2px;\n    animation-fill-mode: both;\n    position: absolute;\n    margin-left: 15px;\n    top: 4px;\n    left: -7px; }\n    .ball-zig-zag > div:first-child {\n      animation: ball-zig 0.7s 0s infinite linear; }\n    .ball-zig-zag > div:last-child {\n      animation: ball-zag 0.7s 0s infinite linear; }\n\n/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes ball-zig-deflect {\n  17% {\n    transform: translate(-15px, -30px); }\n  34% {\n    transform: translate(15px, -30px); }\n  50% {\n    transform: translate(0, 0); }\n  67% {\n    transform: translate(15px, -30px); }\n  84% {\n    transform: translate(-15px, -30px); }\n  100% {\n    transform: translate(0, 0); } }\n\n@keyframes ball-zag-deflect {\n  17% {\n    transform: translate(15px, 30px); }\n  34% {\n    transform: translate(-15px, 30px); }\n  50% {\n    transform: translate(0, 0); }\n  67% {\n    transform: translate(-15px, 30px); }\n  84% {\n    transform: translate(15px, 30px); }\n  100% {\n    transform: translate(0, 0); } }\n\n.ball-zig-zag-deflect {\n  position: relative;\n  transform: translate(-15px, -15px); }\n  .ball-zig-zag-deflect > div {\n    background-color: #b8c2cc;\n    width: 15px;\n    height: 15px;\n    border-radius: 100%;\n    margin: 2px;\n    animation-fill-mode: both;\n    position: absolute;\n    margin-left: 15px;\n    top: 4px;\n    left: -7px; }\n    .ball-zig-zag-deflect > div:first-child {\n      animation: ball-zig-deflect 1.5s 0s infinite linear; }\n    .ball-zig-zag-deflect > div:last-child {\n      animation: ball-zag-deflect 1.5s 0s infinite linear; }\n\n/**\n * Lines\n */\n/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes line-scale {\n  0% {\n    transform: scaley(1); }\n  50% {\n    transform: scaley(0.4); }\n  100% {\n    transform: scaley(1); } }\n\n.line-scale > div:nth-child(1) {\n  animation: line-scale 1s -0.4s infinite cubic-bezier(0.2, 0.68, 0.18, 1.08); }\n\n.line-scale > div:nth-child(2) {\n  animation: line-scale 1s -0.3s infinite cubic-bezier(0.2, 0.68, 0.18, 1.08); }\n\n.line-scale > div:nth-child(3) {\n  animation: line-scale 1s -0.2s infinite cubic-bezier(0.2, 0.68, 0.18, 1.08); }\n\n.line-scale > div:nth-child(4) {\n  animation: line-scale 1s -0.1s infinite cubic-bezier(0.2, 0.68, 0.18, 1.08); }\n\n.line-scale > div:nth-child(5) {\n  animation: line-scale 1s 0s infinite cubic-bezier(0.2, 0.68, 0.18, 1.08); }\n\n.line-scale > div {\n  background-color: #b8c2cc;\n  width: 4px;\n  height: 3.45rem;\n  border-radius: 2px;\n  margin: 2px;\n  animation-fill-mode: both;\n  display: inline-block; }\n\n/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes line-scale-party {\n  0% {\n    transform: scale(1); }\n  50% {\n    transform: scale(0.5); }\n  100% {\n    transform: scale(1); } }\n\n.line-scale-party > div:nth-child(1) {\n  animation-delay: 0.64s;\n  animation-duration: 0.76s; }\n\n.line-scale-party > div:nth-child(2) {\n  animation-delay: -0.14s;\n  animation-duration: 0.78s; }\n\n.line-scale-party > div:nth-child(3) {\n  animation-delay: -0.11s;\n  animation-duration: 0.76s; }\n\n.line-scale-party > div:nth-child(4) {\n  animation-delay: 0.21s;\n  animation-duration: 1.23s; }\n\n.line-scale-party > div {\n  background-color: #b8c2cc;\n  width: 4px;\n  height: 3.45rem;\n  border-radius: 2px;\n  margin: 2px;\n  animation-fill-mode: both;\n  display: inline-block;\n  animation-name: line-scale-party;\n  animation-iteration-count: infinite;\n  animation-delay: 0; }\n\n/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes line-scale-pulse-out {\n  0% {\n    transform: scaley(1); }\n  50% {\n    transform: scaley(0.4); }\n  100% {\n    transform: scaley(1); } }\n\n.line-scale-pulse-out > div {\n  background-color: #b8c2cc;\n  width: 4px;\n  height: 3.45rem;\n  border-radius: 2px;\n  margin: 2px;\n  animation-fill-mode: both;\n  display: inline-block;\n  animation: line-scale-pulse-out 0.9s -0.6s infinite cubic-bezier(0.85, 0.25, 0.37, 0.85); }\n  .line-scale-pulse-out > div:nth-child(2), .line-scale-pulse-out > div:nth-child(4) {\n    animation-delay: -0.4s !important; }\n  .line-scale-pulse-out > div:nth-child(1), .line-scale-pulse-out > div:nth-child(5) {\n    animation-delay: -0.2s !important; }\n\n/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes line-scale-pulse-out-rapid {\n  0% {\n    transform: scaley(1); }\n  80% {\n    transform: scaley(0.3); }\n  90% {\n    transform: scaley(1); } }\n\n.line-scale-pulse-out-rapid > div {\n  background-color: #b8c2cc;\n  width: 4px;\n  height: 3.45rem;\n  border-radius: 2px;\n  margin: 2px;\n  animation-fill-mode: both;\n  display: inline-block;\n  vertical-align: middle;\n  animation: line-scale-pulse-out-rapid 0.9s -0.5s infinite cubic-bezier(0.11, 0.49, 0.38, 0.78); }\n  .line-scale-pulse-out-rapid > div:nth-child(2), .line-scale-pulse-out-rapid > div:nth-child(4) {\n    animation-delay: -0.25s !important; }\n  .line-scale-pulse-out-rapid > div:nth-child(1), .line-scale-pulse-out-rapid > div:nth-child(5) {\n    animation-delay: 0s !important; }\n\n/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes line-spin-fade-loader {\n  50% {\n    opacity: 0.3; }\n  100% {\n    opacity: 1; } }\n\n.line-spin-fade-loader {\n  position: relative;\n  top: -10px;\n  left: -4px; }\n  .line-spin-fade-loader > div:nth-child(1) {\n    top: 20px;\n    left: 0;\n    animation: line-spin-fade-loader 1.2s -0.84s infinite ease-in-out; }\n  .line-spin-fade-loader > div:nth-child(2) {\n    top: 13.63636px;\n    left: 13.63636px;\n    transform: rotate(-45deg);\n    animation: line-spin-fade-loader 1.2s -0.72s infinite ease-in-out; }\n  .line-spin-fade-loader > div:nth-child(3) {\n    top: 0;\n    left: 20px;\n    transform: rotate(90deg);\n    animation: line-spin-fade-loader 1.2s -0.6s infinite ease-in-out; }\n  .line-spin-fade-loader > div:nth-child(4) {\n    top: -13.63636px;\n    left: 13.63636px;\n    transform: rotate(45deg);\n    animation: line-spin-fade-loader 1.2s -0.48s infinite ease-in-out; }\n  .line-spin-fade-loader > div:nth-child(5) {\n    top: -20px;\n    left: 0;\n    animation: line-spin-fade-loader 1.2s -0.36s infinite ease-in-out; }\n  .line-spin-fade-loader > div:nth-child(6) {\n    top: -13.63636px;\n    left: -13.63636px;\n    transform: rotate(-45deg);\n    animation: line-spin-fade-loader 1.2s -0.24s infinite ease-in-out; }\n  .line-spin-fade-loader > div:nth-child(7) {\n    top: 0;\n    left: -20px;\n    transform: rotate(90deg);\n    animation: line-spin-fade-loader 1.2s -0.12s infinite ease-in-out; }\n  .line-spin-fade-loader > div:nth-child(8) {\n    top: 13.63636px;\n    left: -13.63636px;\n    transform: rotate(45deg);\n    animation: line-spin-fade-loader 1.2s 0s infinite ease-in-out; }\n  .line-spin-fade-loader > div {\n    background-color: #b8c2cc;\n    width: 4px;\n    height: 3.45rem;\n    border-radius: 2px;\n    margin: 2px;\n    animation-fill-mode: both;\n    position: absolute;\n    width: 5px;\n    height: 15px; }\n\n/**\n * Misc\n */\n/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes triangle-skew-spin {\n  25% {\n    transform: perspective(100px) rotateX(180deg) rotateY(0); }\n  50% {\n    transform: perspective(100px) rotateX(180deg) rotateY(180deg); }\n  75% {\n    transform: perspective(100px) rotateX(0) rotateY(180deg); }\n  100% {\n    transform: perspective(100px) rotateX(0) rotateY(0); } }\n\n.triangle-skew-spin > div {\n  animation-fill-mode: both;\n  width: 0;\n  height: 0;\n  border-left: 20px solid transparent;\n  border-right: 20px solid transparent;\n  border-bottom: 20px solid #b8c2cc;\n  animation: triangle-skew-spin 3s 0s cubic-bezier(0.09, 0.57, 0.49, 0.9) infinite; }\n\n/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes square-spin {\n  25% {\n    transform: perspective(100px) rotateX(180deg) rotateY(0); }\n  50% {\n    transform: perspective(100px) rotateX(180deg) rotateY(180deg); }\n  75% {\n    transform: perspective(100px) rotateX(0) rotateY(180deg); }\n  100% {\n    transform: perspective(100px) rotateX(0) rotateY(0); } }\n\n.square-spin > div {\n  animation-fill-mode: both;\n  width: 50px;\n  height: 50px;\n  background: #b8c2cc;\n  animation: square-spin 3s 0s cubic-bezier(0.09, 0.57, 0.49, 0.9) infinite; }\n\n/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes rotate_pacman_half_up {\n  0% {\n    transform: rotate(270deg); }\n  50% {\n    transform: rotate(360deg); }\n  100% {\n    transform: rotate(270deg); } }\n\n@keyframes rotate_pacman_half_down {\n  0% {\n    transform: rotate(90deg); }\n  50% {\n    transform: rotate(0deg); }\n  100% {\n    transform: rotate(90deg); } }\n\n@keyframes pacman-balls {\n  75% {\n    opacity: 0.7; }\n  100% {\n    transform: translate(-100px, -6.25px); } }\n\n.pacman {\n  position: relative; }\n  .pacman > div:nth-child(2) {\n    animation: pacman-balls 1s -0.99s infinite linear; }\n  .pacman > div:nth-child(3) {\n    animation: pacman-balls 1s -0.66s infinite linear; }\n  .pacman > div:nth-child(4) {\n    animation: pacman-balls 1s -0.33s infinite linear; }\n  .pacman > div:nth-child(5) {\n    animation: pacman-balls 1s 0s infinite linear; }\n  .pacman > div:first-of-type {\n    width: 0px;\n    height: 0px;\n    border-right: 25px solid transparent;\n    border-top: 25px solid #b8c2cc;\n    border-left: 25px solid #b8c2cc;\n    border-bottom: 25px solid #b8c2cc;\n    border-radius: 25px;\n    animation: rotate_pacman_half_up 0.5s 0s infinite;\n    position: relative;\n    left: -30px; }\n  .pacman > div:nth-child(2) {\n    width: 0px;\n    height: 0px;\n    border-right: 25px solid transparent;\n    border-top: 25px solid #b8c2cc;\n    border-left: 25px solid #b8c2cc;\n    border-bottom: 25px solid #b8c2cc;\n    border-radius: 25px;\n    animation: rotate_pacman_half_down 0.5s 0s infinite;\n    margin-top: -50px;\n    position: relative;\n    left: -30px; }\n  .pacman > div:nth-child(3),\n  .pacman > div:nth-child(4),\n  .pacman > div:nth-child(5),\n  .pacman > div:nth-child(6) {\n    background-color: #b8c2cc;\n    width: 15px;\n    height: 15px;\n    border-radius: 100%;\n    margin: 2px;\n    width: 10px;\n    height: 10px;\n    position: absolute;\n    transform: translate(0, -6.25px);\n    top: 25px;\n    left: 70px; }\n\n/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes cube-transition {\n  25% {\n    transform: translateX(50px) scale(0.5) rotate(-90deg); }\n  50% {\n    transform: translate(50px, 50px) rotate(-180deg); }\n  75% {\n    transform: translateY(50px) scale(0.5) rotate(-270deg); }\n  100% {\n    transform: rotate(-360deg); } }\n\n.cube-transition {\n  position: relative;\n  transform: translate(-25px, -25px); }\n  .cube-transition > div {\n    animation-fill-mode: both;\n    width: 10px;\n    height: 10px;\n    position: absolute;\n    top: -5px;\n    left: -5px;\n    background-color: #b8c2cc;\n    animation: cube-transition 1.6s 0s infinite ease-in-out; }\n    .cube-transition > div:last-child {\n      animation-delay: -0.8s; }\n\n/*========================================================\n        DARK LAYOUT\n=========================================================*/\n@keyframes spin-rotate {\n  0% {\n    transform: rotate(0deg); }\n  50% {\n    transform: rotate(180deg); }\n  100% {\n    transform: rotate(360deg); } }\n\n.semi-circle-spin {\n  position: relative;\n  width: 35px;\n  height: 35px;\n  overflow: hidden; }\n  .semi-circle-spin > div {\n    position: absolute;\n    border-width: 0px;\n    border-radius: 100%;\n    animation: spin-rotate 0.6s 0s infinite linear;\n    background-image: linear-gradient(transparent 0%, transparent 70%, #b8c2cc 30%, #b8c2cc 100%);\n    width: 100%;\n    height: 100%; }\n\n.loader-wrapper {\n  position: relative; }\n\n.loader-container {\n  margin: 0;\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  margin-right: -50%;\n  transform: translate(-50%, -50%); }\n\n#preloader-wrapper {\n  position: fixed;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  z-index: 1050; }\n\n#preloader-wrapper .loader-section {\n  position: fixed;\n  width: 100%;\n  height: 51%;\n  background: #222222;\n  z-index: 1050; }\n\n#preloader-wrapper .loader-section.section-top {\n  top: 0; }\n\n#preloader-wrapper .loader-section.section-bottom {\n  bottom: 0; }\n\n#loader {\n  display: block;\n  position: absolute;\n  left: 50%;\n  top: 50%;\n  width: 60px;\n  height: 60px;\n  margin-right: -50%;\n  transform: translate(-50%, -50%);\n  z-index: 1051;\n  /* anything higher than z-index: 1000 of .loader-section */ }\n\n/* Loaded */\n.loaded #preloader-wrapper .loader-section.section-top {\n  -webkit-transform: translateY(-100%);\n  /* Chrome, Opera 15+, Safari 3.1+ */\n  -ms-transform: translateY(-100%);\n  /* IE 9 */\n  transform: translateY(-100%);\n  /* Firefox 16+, IE 10+, Opera */ }\n\n.loaded #preloader-wrapper .loader-section.section-bottom {\n  -webkit-transform: translateY(100%);\n  /* Chrome, Opera 15+, Safari 3.1+ */\n  -ms-transform: translateY(100%);\n  /* IE 9 */\n  transform: translateY(100%);\n  /* Firefox 16+, IE 10+, Opera */ }\n\n.loaded #loader {\n  opacity: 0; }\n\n.loaded #preloader-wrapper {\n  visibility: hidden; }\n\n.loaded #loader {\n  opacity: 0;\n  -webkit-transition: all 0.3s ease-out;\n  transition: all 0.3s ease-out; }\n\n.loaded #preloader-wrapper .loader-section.section-bottom,\n.loaded #preloader-wrapper .loader-section.section-top {\n  -webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\n  transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); }\n"
  },
  {
    "path": "public/backend/css/plugins/pickers/bootstrap-datetimepicker-build.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\n.sr-only, .bootstrap-datetimepicker-widget .btn[data-action=\"incrementHours\"]::after, .bootstrap-datetimepicker-widget .btn[data-action=\"incrementMinutes\"]::after, .bootstrap-datetimepicker-widget .btn[data-action=\"decrementHours\"]::after, .bootstrap-datetimepicker-widget .btn[data-action=\"decrementMinutes\"]::after, .bootstrap-datetimepicker-widget .btn[data-action=\"showHours\"]::after, .bootstrap-datetimepicker-widget .btn[data-action=\"showMinutes\"]::after, .bootstrap-datetimepicker-widget .btn[data-action=\"togglePeriod\"]::after, .bootstrap-datetimepicker-widget .btn[data-action=\"clear\"]::after, .bootstrap-datetimepicker-widget .btn[data-action=\"today\"]::after, .bootstrap-datetimepicker-widget .picker-switch::after, .bootstrap-datetimepicker-widget table th.prev::after, .bootstrap-datetimepicker-widget table th.next::after {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  margin: -1px;\n  padding: 0;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0; }\n\n/*!\n * Datetimepicker for Bootstrap 3\n * ! version : 4.7.14\n * https://github.com/Eonasdan/bootstrap-datetimepicker/\n */\n.bootstrap-datetimepicker-widget {\n  list-style: none; }\n  .bootstrap-datetimepicker-widget.dropdown-menu {\n    margin: 2px 0;\n    padding: 4px;\n    width: 19em; }\n    @media (max-width: 767.98px) {\n      .bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs {\n        width: 38em; } }\n    @media (max-width: 991.98px) {\n      .bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs {\n        width: 38em; } }\n    @media (max-width: 1199.98px) {\n      .bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs {\n        width: 38em; } }\n    .bootstrap-datetimepicker-widget.dropdown-menu:before, .bootstrap-datetimepicker-widget.dropdown-menu:after {\n      content: '';\n      display: inline-block;\n      position: absolute; }\n    .bootstrap-datetimepicker-widget.dropdown-menu.bottom:before {\n      border-left: 7px solid transparent;\n      border-right: 7px solid transparent;\n      border-bottom: 7px solid #ccc;\n      border-bottom-color: rgba(0, 0, 0, 0.2);\n      top: -7px;\n      left: 7px; }\n    .bootstrap-datetimepicker-widget.dropdown-menu.bottom:after {\n      border-left: 6px solid transparent;\n      border-right: 6px solid transparent;\n      border-bottom: 6px solid white;\n      top: -6px;\n      left: 8px; }\n    .bootstrap-datetimepicker-widget.dropdown-menu.top:before {\n      border-left: 7px solid transparent;\n      border-right: 7px solid transparent;\n      border-top: 7px solid #ccc;\n      border-top-color: rgba(0, 0, 0, 0.2);\n      bottom: -7px;\n      left: 6px; }\n    .bootstrap-datetimepicker-widget.dropdown-menu.top:after {\n      border-left: 6px solid transparent;\n      border-right: 6px solid transparent;\n      border-top: 6px solid white;\n      bottom: -6px;\n      left: 7px; }\n    .bootstrap-datetimepicker-widget.dropdown-menu.float-right:before {\n      left: auto;\n      right: 6px; }\n    .bootstrap-datetimepicker-widget.dropdown-menu.float-right:after {\n      left: auto;\n      right: 7px; }\n  .bootstrap-datetimepicker-widget .list-unstyled {\n    margin: 0; }\n  .bootstrap-datetimepicker-widget a[data-action] {\n    padding: 6px 0; }\n  .bootstrap-datetimepicker-widget a[data-action]:active {\n    box-shadow: none; }\n  .bootstrap-datetimepicker-widget .timepicker-hour, .bootstrap-datetimepicker-widget .timepicker-minute, .bootstrap-datetimepicker-widget .timepicker-second {\n    width: 54px;\n    font-weight: bold;\n    font-size: 1.2em;\n    margin: 0; }\n  .bootstrap-datetimepicker-widget button[data-action] {\n    padding: 6px; }\n  .bootstrap-datetimepicker-widget .btn[data-action=\"incrementHours\"]::after {\n    content: \"Increment Hours\"; }\n  .bootstrap-datetimepicker-widget .btn[data-action=\"incrementMinutes\"]::after {\n    content: \"Increment Minutes\"; }\n  .bootstrap-datetimepicker-widget .btn[data-action=\"decrementHours\"]::after {\n    content: \"Decrement Hours\"; }\n  .bootstrap-datetimepicker-widget .btn[data-action=\"decrementMinutes\"]::after {\n    content: \"Decrement Minutes\"; }\n  .bootstrap-datetimepicker-widget .btn[data-action=\"showHours\"]::after {\n    content: \"Show Hours\"; }\n  .bootstrap-datetimepicker-widget .btn[data-action=\"showMinutes\"]::after {\n    content: \"Show Minutes\"; }\n  .bootstrap-datetimepicker-widget .btn[data-action=\"togglePeriod\"]::after {\n    content: \"Toggle AM/PM\"; }\n  .bootstrap-datetimepicker-widget .btn[data-action=\"clear\"]::after {\n    content: \"Clear the picker\"; }\n  .bootstrap-datetimepicker-widget .btn[data-action=\"today\"]::after {\n    content: \"Set the date to today\"; }\n  .bootstrap-datetimepicker-widget .picker-switch {\n    text-align: center; }\n    .bootstrap-datetimepicker-widget .picker-switch::after {\n      content: \"Toggle Date and Time Screens\"; }\n    .bootstrap-datetimepicker-widget .picker-switch td {\n      padding: 0;\n      margin: 0;\n      height: auto;\n      width: auto;\n      line-height: inherit; }\n      .bootstrap-datetimepicker-widget .picker-switch td span {\n        line-height: 2.5;\n        height: 2.5em;\n        width: 100%; }\n  .bootstrap-datetimepicker-widget table {\n    width: 100%;\n    margin: 0; }\n    .bootstrap-datetimepicker-widget table td,\n    .bootstrap-datetimepicker-widget table th {\n      text-align: center;\n      border-radius: 0.5rem; }\n    .bootstrap-datetimepicker-widget table th {\n      height: 20px;\n      line-height: 20px;\n      width: 20px; }\n      .bootstrap-datetimepicker-widget table th.picker-switch {\n        width: 145px; }\n      .bootstrap-datetimepicker-widget table th.disabled, .bootstrap-datetimepicker-widget table th.disabled:hover {\n        background: none;\n        color: #1e1e1e;\n        cursor: not-allowed; }\n      .bootstrap-datetimepicker-widget table th.prev::after {\n        content: \"Previous Month\"; }\n      .bootstrap-datetimepicker-widget table th.next::after {\n        content: \"Next Month\"; }\n    .bootstrap-datetimepicker-widget table thead tr:first-child th {\n      cursor: pointer; }\n      .bootstrap-datetimepicker-widget table thead tr:first-child th:hover {\n        background: #ededed; }\n    .bootstrap-datetimepicker-widget table td {\n      height: 54px;\n      line-height: 54px;\n      width: 54px; }\n      .bootstrap-datetimepicker-widget table td.cw {\n        font-size: .8em;\n        height: 20px;\n        line-height: 20px;\n        color: #1e1e1e; }\n      .bootstrap-datetimepicker-widget table td.day {\n        height: 20px;\n        line-height: 20px;\n        width: 20px; }\n      .bootstrap-datetimepicker-widget table td.day:hover, .bootstrap-datetimepicker-widget table td.hour:hover, .bootstrap-datetimepicker-widget table td.minute:hover, .bootstrap-datetimepicker-widget table td.second:hover {\n        background: #ededed;\n        cursor: pointer; }\n      .bootstrap-datetimepicker-widget table td.old, .bootstrap-datetimepicker-widget table td.new {\n        color: #1e1e1e; }\n      .bootstrap-datetimepicker-widget table td.today {\n        position: relative; }\n        .bootstrap-datetimepicker-widget table td.today:before {\n          content: '';\n          display: inline-block;\n          border: 0 0 7px 7px solid transparent;\n          border-bottom-color: #7367f0;\n          border-top-color: rgba(0, 0, 0, 0.2);\n          position: absolute;\n          bottom: 4px;\n          right: 4px; }\n      .bootstrap-datetimepicker-widget table td.active, .bootstrap-datetimepicker-widget table td.active:hover {\n        background-color: #7367f0;\n        color: #fff;\n        text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); }\n      .bootstrap-datetimepicker-widget table td.active.today:before {\n        border-bottom-color: #fff; }\n      .bootstrap-datetimepicker-widget table td.disabled, .bootstrap-datetimepicker-widget table td.disabled:hover {\n        background: none;\n        color: #1e1e1e;\n        cursor: not-allowed; }\n      .bootstrap-datetimepicker-widget table td span {\n        display: inline-block;\n        width: 54px;\n        height: 54px;\n        line-height: 54px;\n        margin: 2px 1.5px;\n        cursor: pointer;\n        border-radius: 0.5rem; }\n        .bootstrap-datetimepicker-widget table td span:hover {\n          background: #ededed; }\n        .bootstrap-datetimepicker-widget table td span.active {\n          background-color: #7367f0;\n          color: #fff;\n          text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); }\n        .bootstrap-datetimepicker-widget table td span.old {\n          color: #1e1e1e; }\n        .bootstrap-datetimepicker-widget table td span.disabled, .bootstrap-datetimepicker-widget table td span.disabled:hover {\n          background: none;\n          color: #1e1e1e;\n          cursor: not-allowed; }\n  .bootstrap-datetimepicker-widget.usetwentyfour td.hour {\n    height: 27px;\n    line-height: 27px; }\n\n.input-group.date .input-group-addon {\n  cursor: pointer; }\n"
  },
  {
    "path": "public/backend/css/plugins/ui/coming-soon.css",
    "content": "@media screen and (min-width: 0px) {\n  head {\n    font-family: \"xs 0px\"; }\n  body:after {\n    content: \"xs - min-width: 0px\"; } }\n\n@media screen and (min-width: 544px) {\n  head {\n    font-family: \"sm 544px\"; }\n  body:after {\n    content: \"sm - min-width: 544px\"; } }\n\n@media screen and (min-width: 768px) {\n  head {\n    font-family: \"md 768px\"; }\n  body:after {\n    content: \"md - min-width: 768px\"; } }\n\n@media screen and (min-width: 992px) {\n  head {\n    font-family: \"lg 992px\"; }\n  body:after {\n    content: \"lg - min-width: 992px\"; } }\n\n@media screen and (min-width: 1200px) {\n  head {\n    font-family: \"xl 1200px\"; }\n  body:after {\n    content: \"xl - min-width: 1200px\"; } }\n\nhead {\n  clear: both; }\n  head title {\n    font-family: \"xs 0px, sm 544px, md 768px, lg 992px, xl 1200px\"; }\n\nbody:after {\n  display: none; }\n\n*[data-usn-if] {\n  display: none; }\n"
  },
  {
    "path": "public/backend/css/themes/dark-layout.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\nbody.dark-layout {\n  background-color: #262c49;\n  /********* UI ELEMENTS *********/\n  /********* COMPONENTS *********/\n  /********** FORMS **********/\n  /********** TABLE **********/\n  /********** PAGES **********/\n  /********** CHARTS **********/\n  /********** APPLICATIONS **********/\n  /********** EXTENSIONS **********/\n  /********** CUSTOMIZER **********/\n  /********** HORIZONTAL LAYOUT **********/ }\n  body.dark-layout h1,\n  body.dark-layout h2,\n  body.dark-layout h3,\n  body.dark-layout h4,\n  body.dark-layout h5,\n  body.dark-layout h6 {\n    color: #ebeefd; }\n  body.dark-layout [class*=\"border\"] {\n    border-color: #414561 !important; }\n  body.dark-layout a:hover {\n    color: #7367f0; }\n  body.dark-layout p,\n  body.dark-layout small,\n  body.dark-layout span,\n  body.dark-layout label {\n    color: #c2c6dc; }\n  body.dark-layout hr {\n    border-color: #414561; }\n  body.dark-layout pre {\n    background-color: #262c49;\n    border: 0; }\n    body.dark-layout pre code {\n      background-color: inherit;\n      text-shadow: none; }\n      body.dark-layout pre code .operator,\n      body.dark-layout pre code .url {\n        background-color: #262c49; }\n  body.dark-layout code {\n    background-color: #262c49;\n    color: #b8c2cc; }\n  body.dark-layout kbd {\n    background-color: #262c49; }\n  body.dark-layout .text-dark {\n    color: #b8c2cc !important; }\n  body.dark-layout .header-navbar-shadow {\n    background: linear-gradient(180deg, rgba(44, 48, 60, 0.9) 44%, rgba(44, 48, 60, 0.43) 73%, rgba(44, 48, 60, 0)); }\n  body.dark-layout .header-navbar {\n    background-color: #10163a; }\n    body.dark-layout .header-navbar .navbar-container .nav .nav-item .nav-link {\n      color: #c2c6dc;\n      background-color: transparent; }\n      body.dark-layout .header-navbar .navbar-container .nav .nav-item .nav-link i {\n        color: #c2c6dc; }\n      body.dark-layout .header-navbar .navbar-container .nav .nav-item .nav-link.bookmark-star i {\n        color: #fff !important; }\n    body.dark-layout .header-navbar .navbar-container .nav .nav-item.nav-search .search-input.open {\n      background-color: #10163a; }\n      body.dark-layout .header-navbar .navbar-container .nav .nav-item.nav-search .search-input.open .input {\n        border-color: #414561; }\n      body.dark-layout .header-navbar .navbar-container .nav .nav-item.nav-search .search-input.open .input,\n      body.dark-layout .header-navbar .navbar-container .nav .nav-item.nav-search .search-input.open .input::placeholder,\n      body.dark-layout .header-navbar .navbar-container .nav .nav-item.nav-search .search-input.open .search-input-close {\n        color: #c2c6dc; }\n    body.dark-layout .header-navbar .navbar-container .nav .nav-item .bookmark-input .form-control {\n      background-color: #10163a; }\n    body.dark-layout .header-navbar .navbar-container .nav .nav-item .search-list {\n      background-color: #262c49; }\n      body.dark-layout .header-navbar .navbar-container .nav .nav-item .search-list .current_item {\n        background-color: #10163a; }\n    body.dark-layout .header-navbar .navbar-container .nav .dropdown-notification .dropdown-menu.dropdown-menu-media {\n      overflow: hidden; }\n      body.dark-layout .header-navbar .navbar-container .nav .dropdown-notification .dropdown-menu.dropdown-menu-media .media {\n        border-color: #414561; }\n        body.dark-layout .header-navbar .navbar-container .nav .dropdown-notification .dropdown-menu.dropdown-menu-media .media .media-body .notification-text {\n          color: #c2c6dc; }\n        body.dark-layout .header-navbar .navbar-container .nav .dropdown-notification .dropdown-menu.dropdown-menu-media .media .media-meta {\n          color: #c2c6dc; }\n        body.dark-layout .header-navbar .navbar-container .nav .dropdown-notification .dropdown-menu.dropdown-menu-media .media:hover {\n          background-color: #10163a; }\n      body.dark-layout .header-navbar .navbar-container .nav .dropdown-notification .dropdown-menu.dropdown-menu-media .dropdown-menu-footer {\n        background-color: #10163a; }\n        body.dark-layout .header-navbar .navbar-container .nav .dropdown-notification .dropdown-menu.dropdown-menu-media .dropdown-menu-footer .dropdown-item {\n          color: #fff;\n          border-color: #414561; }\n          body.dark-layout .header-navbar .navbar-container .nav .dropdown-notification .dropdown-menu.dropdown-menu-media .dropdown-menu-footer .dropdown-item:hover {\n            background-color: #10163a; }\n    body.dark-layout .header-navbar.navbar-static-top {\n      background-color: transparent; }\n    body.dark-layout .header-navbar[class*=\"bg-\"] .navbar-nav .nav-item .nav-link {\n      background-color: inherit; }\n  body.dark-layout.blank-page .card.bg-transparent h1,\n  body.dark-layout.blank-page .card.bg-transparent h2,\n  body.dark-layout.blank-page .card.bg-transparent h3,\n  body.dark-layout.blank-page .card.bg-transparent h4,\n  body.dark-layout.blank-page .card.bg-transparent h5,\n  body.dark-layout.blank-page .card.bg-transparent h6 {\n    color: #10163a; }\n  body.dark-layout.blank-page .card.bg-transparent p {\n    color: #262c49; }\n  body.dark-layout .main-menu {\n    background-color: #10163a; }\n    body.dark-layout .main-menu .shadow-bottom {\n      background: linear-gradient(180deg, #0f1642 44%, rgba(15, 22, 66, 0.51) 73%, rgba(44, 48, 60, 0)); }\n    body.dark-layout .main-menu:not(.expanded) .navigation .sidebar-group-active > a {\n      background-color: #262c49; }\n  body.dark-layout .main-menu-content .navigation-main {\n    background-color: #10163a; }\n    body.dark-layout .main-menu-content .navigation-main .nav-item i {\n      color: #c2c6dc; }\n    body.dark-layout .main-menu-content .navigation-main .nav-item.open a {\n      background-color: #262c49; }\n    body.dark-layout .main-menu-content .navigation-main .nav-item a:after {\n      color: #c2c6dc; }\n    body.dark-layout .main-menu-content .navigation-main .nav-item .menu-content {\n      background-color: #10163a; }\n      body.dark-layout .main-menu-content .navigation-main .nav-item .menu-content .active .menu-item {\n        color: #fff; }\n      body.dark-layout .main-menu-content .navigation-main .nav-item .menu-content li:not(.active) a {\n        background-color: #10163a; }\n    body.dark-layout .main-menu-content .navigation-main .active .menu-title,\n    body.dark-layout .main-menu-content .navigation-main .active i {\n      color: #fff; }\n    body.dark-layout .main-menu-content .navigation-main .sidebar-group-active a {\n      background: #10163a;\n      border-radius: 4px; }\n    body.dark-layout .main-menu-content .navigation-main .sidebar-group-active .menu-content {\n      background-color: #10163a; }\n      body.dark-layout .main-menu-content .navigation-main .sidebar-group-active .menu-content .active {\n        z-index: 1; }\n        body.dark-layout .main-menu-content .navigation-main .sidebar-group-active .menu-content .active a {\n          background-color: transparent; }\n  body.dark-layout.menu-collapsed .main-menu:not(.expanded) .navigation-main li.active > a {\n    background: #262c49 !important; }\n  body.dark-layout .data-list-view-header .dataTables_wrapper .top .action-btns .dropdown .dropdown-toggle,\n  body.dark-layout .data-thumb-view-header .dataTables_wrapper .top .action-btns .dropdown .dropdown-toggle {\n    background-color: #10163a !important;\n    color: #c2c6dc; }\n    body.dark-layout .data-list-view-header .dataTables_wrapper .top .action-btns .dropdown .dropdown-toggle:hover, body.dark-layout .data-list-view-header .dataTables_wrapper .top .action-btns .dropdown .dropdown-toggle:active,\n    body.dark-layout .data-thumb-view-header .dataTables_wrapper .top .action-btns .dropdown .dropdown-toggle:hover,\n    body.dark-layout .data-thumb-view-header .dataTables_wrapper .top .action-btns .dropdown .dropdown-toggle:active {\n      box-shadow: none;\n      color: #c2c6dc !important; }\n  body.dark-layout .data-list-view-header .dataTables_wrapper .top .action-btns .dt-buttons .btn.btn-outline-primary span,\n  body.dark-layout .data-thumb-view-header .dataTables_wrapper .top .action-btns .dt-buttons .btn.btn-outline-primary span {\n    color: #7367f0; }\n  body.dark-layout .data-list-view-header .dataTables_wrapper .top .action-btns .dt-buttons .btn.btn-outline-primary:hover,\n  body.dark-layout .data-thumb-view-header .dataTables_wrapper .top .action-btns .dt-buttons .btn.btn-outline-primary:hover {\n    background-color: transparent; }\n  body.dark-layout .data-list-view-header .dataTables_wrapper .top .dataTables_length .form-control,\n  body.dark-layout .data-list-view-header .dataTables_wrapper .top .dataTables_filter .form-control,\n  body.dark-layout .data-thumb-view-header .dataTables_wrapper .top .dataTables_length .form-control,\n  body.dark-layout .data-thumb-view-header .dataTables_wrapper .top .dataTables_filter .form-control {\n    background-color: #10163a; }\n  body.dark-layout .data-list-view-header .dataTables_wrapper .top .dataTables_filter .form-control,\n  body.dark-layout .data-thumb-view-header .dataTables_wrapper .top .dataTables_filter .form-control {\n    border: 0; }\n  body.dark-layout .data-list-view-header .dataTables_wrapper .pagination .page-item,\n  body.dark-layout .data-thumb-view-header .dataTables_wrapper .pagination .page-item {\n    background-color: #10163a !important; }\n    body.dark-layout .data-list-view-header .dataTables_wrapper .pagination .page-item.active .page-link,\n    body.dark-layout .data-thumb-view-header .dataTables_wrapper .pagination .page-item.active .page-link {\n      background-color: #7367f0; }\n    body.dark-layout .data-list-view-header .dataTables_wrapper .pagination .page-item .page-link,\n    body.dark-layout .data-thumb-view-header .dataTables_wrapper .pagination .page-item .page-link {\n      background-color: #10163a; }\n  body.dark-layout .data-list-view-header .dataTable tbody tr,\n  body.dark-layout .data-thumb-view-header .dataTable tbody tr {\n    background-color: transparent; }\n    body.dark-layout .data-list-view-header .dataTable tbody tr.selected td,\n    body.dark-layout .data-thumb-view-header .dataTable tbody tr.selected td {\n      background-color: rgba(115, 103, 240, 0.05);\n      color: #7367f0; }\n  body.dark-layout .data-list-view-header .add-new-data,\n  body.dark-layout .data-thumb-view-header .add-new-data {\n    background-color: #262c49; }\n    body.dark-layout .data-list-view-header .add-new-data .new-data-title,\n    body.dark-layout .data-thumb-view-header .add-new-data .new-data-title {\n      border-color: #414561; }\n      body.dark-layout .data-list-view-header .add-new-data .new-data-title .hide-data-sidebar i,\n      body.dark-layout .data-thumb-view-header .add-new-data .new-data-title .hide-data-sidebar i {\n        color: #c2c6dc; }\n    body.dark-layout .data-list-view-header .add-new-data .data-items .form-control,\n    body.dark-layout .data-list-view-header .add-new-data .data-items .custom-select,\n    body.dark-layout .data-thumb-view-header .add-new-data .data-items .form-control,\n    body.dark-layout .data-thumb-view-header .add-new-data .data-items .custom-select {\n      background-color: #10163a; }\n  body.dark-layout .bd-example .row,\n  body.dark-layout .bd-example .d-flex {\n    background-color: #262c49; }\n    body.dark-layout .bd-example .row .col,\n    body.dark-layout .bd-example .row [class*=\"col-\"],\n    body.dark-layout .bd-example .row .bd-highlight,\n    body.dark-layout .bd-example .d-flex .col,\n    body.dark-layout .bd-example .d-flex [class*=\"col-\"],\n    body.dark-layout .bd-example .d-flex .bd-highlight {\n      background-color: #262c49;\n      border-color: #808080; }\n  body.dark-layout .bd-example .height-example-wrapper {\n    background-color: #343661 !important; }\n  body.dark-layout .bd-example .width-example,\n  body.dark-layout .bd-example .height-example {\n    background-color: #262c49 !important; }\n  body.dark-layout .bd-example-row-flex-cols .row {\n    background-color: #262c49; }\n  body.dark-layout .colors-container span {\n    color: #fff; }\n  body.dark-layout .alert .alert-heading,\n  body.dark-layout .alert p {\n    color: inherit; }\n  body.dark-layout .alert.alert-dark .alert-heading,\n  body.dark-layout .alert.alert-dark p {\n    color: #b8c2cc; }\n  body.dark-layout .content-header-left .breadcrumbs-top .content-header-title {\n    color: #ebeefd; }\n  body.dark-layout .content-header-left .breadcrumbs-top .breadcrumb-wrapper .breadcrumb .breadcrumb-item {\n    color: #c2c6dc; }\n    body.dark-layout .content-header-left .breadcrumbs-top .breadcrumb-wrapper .breadcrumb .breadcrumb-item:before {\n      color: #c2c6dc; }\n    body.dark-layout .content-header-left .breadcrumbs-top .breadcrumb-wrapper .breadcrumb .breadcrumb-item:not(.active) a:hover {\n      color: #7367f0; }\n  body.dark-layout #default-breadcrumb .breadcrumb .breadcrumb-item,\n  body.dark-layout #breadcrumb-alignment .breadcrumb .breadcrumb-item {\n    color: #c2c6dc; }\n    body.dark-layout #default-breadcrumb .breadcrumb .breadcrumb-item:before,\n    body.dark-layout #breadcrumb-alignment .breadcrumb .breadcrumb-item:before {\n      color: #c2c6dc; }\n    body.dark-layout #default-breadcrumb .breadcrumb .breadcrumb-item:not(.active) a:hover,\n    body.dark-layout #breadcrumb-alignment .breadcrumb .breadcrumb-item:not(.active) a:hover {\n      color: #7367f0; }\n  body.dark-layout #component-breadcrumbs .breadcrumb .breadcrumb-item {\n    color: #c2c6dc; }\n    body.dark-layout #component-breadcrumbs .breadcrumb .breadcrumb-item a {\n      color: #c2c6dc; }\n    body.dark-layout #component-breadcrumbs .breadcrumb .breadcrumb-item:before {\n      color: #c2c6dc; }\n    body.dark-layout #component-breadcrumbs .breadcrumb .breadcrumb-item.active {\n      color: #7367f0; }\n  body.dark-layout .collapse-bordered .collapse-header {\n    border-color: rgba(255, 255, 255, 0.04); }\n  body.dark-layout .collapse-bordered.accordion-shadow {\n    box-shadow: 0 0 8px 0 rgba(255, 255, 255, 0.1); }\n  body.dark-layout .accordion .collapse-border-item {\n    border-color: rgba(255, 255, 255, 0.04); }\n  body.dark-layout .collapse-margin {\n    box-shadow: 0 2px 15px 0 rgba(255, 255, 255, 0.1); }\n  body.dark-layout .accordion[data-toggle-hover=\"true\"] .card,\n  body.dark-layout .collapse[data-toggle-hover=\"true\"] .card {\n    border-color: rgba(255, 255, 255, 0.04); }\n  body.dark-layout .collapse-icon .card-header a {\n    color: #c2c6dc; }\n  body.dark-layout .btn.btn-icon i {\n    color: #fff; }\n  body.dark-layout .btn.btn-dark, body.dark-layout .btn.btn-outline-dark, body.dark-layout .btn.btn-flat-dark {\n    color: #b8c2cc; }\n  body.dark-layout .btn.btn-dark {\n    background-color: #4e5154 !important; }\n  body.dark-layout .btn.btn-outline-dark {\n    border-color: #4e5154;\n    color: #b8c2cc; }\n  body.dark-layout .btn.btn-flat-dark:active, body.dark-layout .btn.btn-flat-dark:focus {\n    background: #4e5154; }\n  body.dark-layout .btn.btn-white {\n    color: #626262; }\n  body.dark-layout .dropdown-toggle:hover i, body.dark-layout .dropdown-toggle:hover:after {\n    color: #fff; }\n  body.dark-layout .dropdown-menu {\n    background-color: #262c49; }\n    body.dark-layout .dropdown-menu:before,\n    body.dark-layout .dropdown-menu .dropdown-item:hover,\n    body.dark-layout .dropdown-menu .dropdown-item:focus {\n      background: #262c49; }\n    body.dark-layout .dropdown-menu .dropdown-item {\n      color: #c2c6dc; }\n    body.dark-layout .dropdown-menu .form-control {\n      background-color: #10163a; }\n    body.dark-layout .dropdown-menu .dropdown-divider {\n      border-color: #414561; }\n  body.dark-layout .search-bar .form-control {\n    background-color: #10163a; }\n  body.dark-layout .btn-white ~ .dropdown-menu .dropdown-item:not(.acitve):hover {\n    color: #7367f0 !important; }\n  body.dark-layout .btn-dark ~ .dropdown-menu .dropdown-item:hover,\n  body.dark-layout .btn-outline-dark ~ .dropdown-menu .dropdown-item:hover,\n  body.dark-layout .btn-flat-dark ~ .dropdown-menu .dropdown-item:hover {\n    color: #c2c6dc; }\n  body.dark-layout .dropup.dropdown-icon-wrapper .dropdown-menu .dropdown-item i {\n    color: #c2c6dc; }\n  body.dark-layout .modal .modal-header,\n  body.dark-layout .modal .modal-header[class*=\"bg-\"] {\n    background-color: #10163a; }\n    body.dark-layout .modal .modal-header .close,\n    body.dark-layout .modal .modal-header[class*=\"bg-\"] .close {\n      background-color: #262c49;\n      text-shadow: none; }\n      body.dark-layout .modal .modal-header .close span,\n      body.dark-layout .modal .modal-header[class*=\"bg-\"] .close span {\n        color: #fff; }\n  body.dark-layout .modal .modal-content,\n  body.dark-layout .modal .modal-body,\n  body.dark-layout .modal .modal-footer {\n    background-color: #262c49; }\n    body.dark-layout .modal .modal-content .form-control,\n    body.dark-layout .modal .modal-content .picker__input,\n    body.dark-layout .modal .modal-content .custom-file-label,\n    body.dark-layout .modal .modal-content .custom-file-label:after,\n    body.dark-layout .modal .modal-body .form-control,\n    body.dark-layout .modal .modal-body .picker__input,\n    body.dark-layout .modal .modal-body .custom-file-label,\n    body.dark-layout .modal .modal-body .custom-file-label:after,\n    body.dark-layout .modal .modal-footer .form-control,\n    body.dark-layout .modal .modal-footer .picker__input,\n    body.dark-layout .modal .modal-footer .custom-file-label,\n    body.dark-layout .modal .modal-footer .custom-file-label:after {\n      background-color: #10163a !important; }\n  body.dark-layout .pagination:not([class*=\"pagination-\"]) .page-item.active {\n    background-color: #262c49; }\n    body.dark-layout .pagination:not([class*=\"pagination-\"]) .page-item.active .page-link {\n      background-color: #7367f0; }\n      body.dark-layout .pagination:not([class*=\"pagination-\"]) .page-item.active .page-link:hover {\n        color: #fff; }\n  body.dark-layout .pagination:not([class*=\"pagination-\"]) .page-item .page-link {\n    background-color: #262c49;\n    color: #fff; }\n    body.dark-layout .pagination:not([class*=\"pagination-\"]) .page-item .page-link:hover {\n      color: #7367f0; }\n  body.dark-layout .pagination:not([class*=\"pagination-\"]) .page-item.prev-item .page-link:hover, body.dark-layout .pagination:not([class*=\"pagination-\"]) .page-item.next-item .page-link:hover {\n    color: #fff; }\n  body.dark-layout .pagination[class*=\"pagination-\"] .page-item:not(.active):not(:hover) .page-link {\n    background-color: #262c49;\n    color: #fff; }\n  body.dark-layout .pagination[class*=\"pagination-\"] .page-item:not(.active) .page-link:hover {\n    background-color: #262c49; }\n  body.dark-layout .pagination[class*=\"pagination-\"] .page-item.active {\n    background-color: #262c49; }\n  body.dark-layout .nav .nav-item .nav-link {\n    color: #c2c6dc; }\n    body.dark-layout .nav .nav-item .nav-link.active, body.dark-layout .nav .nav-item .nav-link:hover {\n      color: #7367f0; }\n  body.dark-layout #navbar-component #basic-navbar .navbar {\n    background-color: #262c49; }\n  body.dark-layout #navbar-component .navbar .nav .nav-item a {\n    color: #c2c6dc !important; }\n  body.dark-layout #navbar-component .navbar .nav .nav-item .nav-link {\n    background-color: inherit; }\n    body.dark-layout #navbar-component .navbar .nav .nav-item .nav-link span {\n      color: inherit; }\n    body.dark-layout #navbar-component .navbar .nav .nav-item .nav-link .badge {\n      color: #fff; }\n  body.dark-layout .nav-tabs .nav-item .nav-link,\n  body.dark-layout .nav-tabs.nav-justified .nav-item .nav-link,\n  body.dark-layout .nav .nav-item .nav-link {\n    background-color: #10163a; }\n    body.dark-layout .nav-tabs .nav-item .nav-link.active,\n    body.dark-layout .nav-tabs.nav-justified .nav-item .nav-link.active,\n    body.dark-layout .nav .nav-item .nav-link.active {\n      background-color: #10163a; }\n    body.dark-layout .nav-tabs .nav-item .nav-link.disabled,\n    body.dark-layout .nav-tabs.nav-justified .nav-item .nav-link.disabled,\n    body.dark-layout .nav .nav-item .nav-link.disabled {\n      opacity: 0.5; }\n  body.dark-layout .nav-tabs ~ .tab-content .tab-pane,\n  body.dark-layout .nav-tabs.nav-justified ~ .tab-content .tab-pane,\n  body.dark-layout .nav ~ .tab-content .tab-pane {\n    background-color: #10163a; }\n  body.dark-layout .nav-vertical .nav.nav-tabs.nav-left ~ .tab-content .tab-pane, body.dark-layout .nav-vertical .nav.nav-tabs.nav-right ~ .tab-content .tab-pane {\n    background-color: #10163a; }\n  body.dark-layout .nav-pills .nav-item .nav-link.active {\n    color: #fff;\n    background-color: #7367f0; }\n  body.dark-layout .nav-pills.nav-active-bordered-pill .nav-item .nav-link.active {\n    background-color: transparent; }\n  body.dark-layout .card {\n    background-color: #10163a; }\n    body.dark-layout .card .card-header,\n    body.dark-layout .card .card-footer {\n      color: #c2c6dc;\n      background-color: #10163a; }\n    body.dark-layout .card .card-header .heading-elements.visible ul li {\n      background-color: #10163a; }\n    body.dark-layout .card .heading-elements.visible .list-inline {\n      background-color: #10163a; }\n    body.dark-layout .card .card-body,\n    body.dark-layout .card .card-footer {\n      color: #c2c6dc;\n      border-color: #414561; }\n    body.dark-layout .card.overlay-img-card .card-img-overlay span,\n    body.dark-layout .card.overlay-img-card .card-img-overlay p {\n      color: #fff; }\n  body.dark-layout .media-bordered .media {\n    border-color: #414561; }\n  body.dark-layout .activity-timeline {\n    border-color: #414561; }\n  body.dark-layout #dashboard-analytics .bg-analytics {\n    background: linear-gradient(118deg, #7367f0, rgba(115, 103, 240, 0.7)); }\n    body.dark-layout #dashboard-analytics .bg-analytics p {\n      color: #fff; }\n    body.dark-layout #dashboard-analytics .bg-analytics .card-body {\n      background-color: transparent; }\n  body.dark-layout #dashboard-ecommerce .chat-application .chat-app-window .user-chats .chats .chat-body .chat-content p,\n  body.dark-layout #overlay-image-chat-cards .chat-application .chat-app-window .user-chats .chats .chat-body .chat-content p {\n    color: #fff; }\n  body.dark-layout #dashboard-ecommerce .chat-application .chat-app-window .user-chats .chats .chat-left .chat-content,\n  body.dark-layout #overlay-image-chat-cards .chat-application .chat-app-window .user-chats .chats .chat-left .chat-content {\n    background-color: #171e49;\n    border: 1px solid #414561; }\n    body.dark-layout #dashboard-ecommerce .chat-application .chat-app-window .user-chats .chats .chat-left .chat-content p,\n    body.dark-layout #overlay-image-chat-cards .chat-application .chat-app-window .user-chats .chats .chat-left .chat-content p {\n      color: #c2c6dc; }\n  body.dark-layout #dashboard-ecommerce .chat-application .chat-app-window .chat-footer,\n  body.dark-layout #overlay-image-chat-cards .chat-application .chat-app-window .chat-footer {\n    border-top: 1px solid #414561; }\n    body.dark-layout #dashboard-ecommerce .chat-application .chat-app-window .chat-footer .card-body,\n    body.dark-layout #overlay-image-chat-cards .chat-application .chat-app-window .chat-footer .card-body {\n      padding-top: 1.5rem !important; }\n  body.dark-layout .badge {\n    color: #fff; }\n    body.dark-layout .badge span {\n      color: #fff; }\n    body.dark-layout .badge:hover i {\n      color: #fff; }\n  body.dark-layout .popover[x-placement=\"top\"] .arrow:after {\n    border-top-color: #262c49; }\n  body.dark-layout .popover[x-placement=\"bottom\"] .arrow:after {\n    border-bottom-color: #7367f0; }\n  body.dark-layout .popover[x-placement=\"left\"] .arrow:after {\n    border-left-color: #262c49; }\n  body.dark-layout .popover[x-placement=\"right\"] .arrow:after {\n    border-right-color: #262c49; }\n  body.dark-layout .popover .popover-body {\n    background-color: #262c49;\n    color: #c2c6dc; }\n  body.dark-layout .toast {\n    background-color: #262c49;\n    box-shadow: -5px 5px 5px 0px rgba(0, 0, 0, 0.3); }\n    body.dark-layout .toast .toast-header {\n      background-color: #262c49;\n      color: #c2c6dc;\n      border-color: #414561; }\n      body.dark-layout .toast .toast-header .close {\n        text-shadow: none;\n        opacity: 1; }\n    body.dark-layout .toast .toast-body {\n      background-color: #262c49;\n      color: #c2c6dc; }\n  body.dark-layout .avatar {\n    background-color: #262c49; }\n    body.dark-layout .avatar .avatar-content {\n      color: #fff; }\n  body.dark-layout .chip {\n    background-color: #262c49; }\n    body.dark-layout .chip .avatar {\n      background-color: #10163a; }\n    body.dark-layout .chip .chip-body .chip-text,\n    body.dark-layout .chip .chip-body span {\n      color: #fff; }\n  body.dark-layout .divider .divider-text {\n    background-color: transparent;\n    color: #c2c6dc; }\n    body.dark-layout .divider .divider-text::before, body.dark-layout .divider .divider-text::after {\n      border-color: #414561; }\n  body.dark-layout .divider.divider-dark .divider-text::before, body.dark-layout .divider.divider-dark .divider-text::after {\n    border-color: #4e5154 !important; }\n  body.dark-layout .list-group .list-group-item:not([class*=\"list-group-item-\"]), body.dark-layout .list-group .list-group-item.list-group-item-action {\n    background-color: #10163a;\n    border-color: #414561;\n    color: #c2c6dc; }\n    body.dark-layout .list-group .list-group-item:not([class*=\"list-group-item-\"]):hover, body.dark-layout .list-group .list-group-item.list-group-item-action:hover {\n      background-color: #262c49; }\n  body.dark-layout .list-group .list-group-item.active {\n    background-color: #7367f0;\n    color: #fff; }\n    body.dark-layout .list-group .list-group-item.active:hover {\n      background-color: #7367f0; }\n    body.dark-layout .list-group .list-group-item.active p,\n    body.dark-layout .list-group .list-group-item.active small {\n      color: #fff; }\n  body.dark-layout .list-group .list-group-item.disabled {\n    background-color: #262c49; }\n  body.dark-layout .spinner-border {\n    border-color: currentColor !important;\n    border-right-color: transparent !important; }\n  body.dark-layout input.form-control,\n  body.dark-layout .custom-file-label,\n  body.dark-layout textarea.form-control {\n    background-color: #262c49;\n    color: #c2c6dc; }\n    body.dark-layout input.form-control:not(:focus),\n    body.dark-layout .custom-file-label:not(:focus),\n    body.dark-layout textarea.form-control:not(:focus) {\n      border: 0; }\n    body.dark-layout input.form-control::placeholder,\n    body.dark-layout .custom-file-label::placeholder,\n    body.dark-layout textarea.form-control::placeholder {\n      color: #c2c6dc; }\n    body.dark-layout input.form-control ~ .form-control-position i,\n    body.dark-layout .custom-file-label ~ .form-control-position i,\n    body.dark-layout textarea.form-control ~ .form-control-position i {\n      color: #c2c6dc; }\n    body.dark-layout input.form-control:focus ~ .form-control-position i,\n    body.dark-layout .custom-file-label:focus ~ .form-control-position i,\n    body.dark-layout textarea.form-control:focus ~ .form-control-position i {\n      color: #7367f0; }\n    body.dark-layout input.form-control:disabled, body.dark-layout input.form-control[readonly=\"readonly\"],\n    body.dark-layout .custom-file-label:disabled,\n    body.dark-layout .custom-file-label[readonly=\"readonly\"],\n    body.dark-layout textarea.form-control:disabled,\n    body.dark-layout textarea.form-control[readonly=\"readonly\"] {\n      opacity: 0.5; }\n  body.dark-layout .char-textarea.active {\n    color: #c2c6dc !important; }\n  body.dark-layout .char-textarea.max-limit {\n    color: #ea5455 !important; }\n  body.dark-layout .custom-file-label:after {\n    background-color: #262c49;\n    border-left: 1px solid #414561;\n    color: #c2c6dc; }\n  body.dark-layout .has-icon-left.input-divider-left .form-control-position i {\n    border-right-color: #414561; }\n  body.dark-layout .has-icon-left.input-divider-right .form-control-position i {\n    border-left-color: #414561; }\n  body.dark-layout .bootstrap-touchspin .form-control {\n    background-color: #262c49; }\n  body.dark-layout .bootstrap-touchspin.disabled-touchspin .bootstrap-touchspin-injected .bootstrap-touchspin-down,\n  body.dark-layout .bootstrap-touchspin.disabled-touchspin .bootstrap-touchspin-injected .bootstrap-touchspin-up,\n  body.dark-layout .bootstrap-touchspin.disabled-touchspin .bootstrap-touchspin-injected .disabled-max-min {\n    background-color: #b8c2cc !important;\n    opacity: 1; }\n  body.dark-layout .bootstrap-touchspin .bootstrap-touchspin-injected .disabled-max-min {\n    background-color: #b8c2cc !important;\n    opacity: 1; }\n  body.dark-layout select.form-control,\n  body.dark-layout .custom-select {\n    background-color: #262c49;\n    color: #c2c6dc;\n    border: 0; }\n    body.dark-layout select.form-control option:checked,\n    body.dark-layout .custom-select option:checked {\n      background-color: #10163a; }\n  body.dark-layout .select2-container .select2-selection {\n    background: #262c49; }\n    body.dark-layout .select2-container .select2-selection .select2-selection__rendered {\n      color: #c2c6dc; }\n      body.dark-layout .select2-container .select2-selection .select2-selection__rendered .select2-search__field {\n        color: #fff; }\n    body.dark-layout .select2-container .select2-selection .select2-selection__arrow b {\n      border-top-color: #414561; }\n  body.dark-layout .select2-container .select2-dropdown {\n    background-color: #10163a; }\n    body.dark-layout .select2-container .select2-dropdown .select2-search__field {\n      background-color: #262c49;\n      color: #c2c6dc; }\n    body.dark-layout .select2-container .select2-dropdown.bg-info .select2-results__options .select2-results__option {\n      color: #fff; }\n    body.dark-layout .select2-container .select2-dropdown .select2-results .select2-results__options .select2-results__option[aria-selected=\"true\"] {\n      background-color: #7367f0; }\n  body.dark-layout .select2-container.select2-container--classic .selection .select2-selection__arrow {\n    background-image: none;\n    background-color: #262c49;\n    border-color: rgba(255, 255, 255, 0.1); }\n  body.dark-layout .custom-switch .custom-control-input[disabled] ~ .custom-control-label {\n    opacity: 0.5; }\n  body.dark-layout .custom-switch .custom-control-input:not(:disabled):active ~ .custom-control-label::before {\n    background-color: #7367f0; }\n  body.dark-layout .custom-switch .custom-control-input:checked ~ .custom-control-label::before {\n    background-color: #7367f0; }\n  body.dark-layout .custom-switch .custom-control-label:before {\n    background-color: #262c49; }\n  body.dark-layout .picker__input {\n    background-color: #262c49 !important; }\n  body.dark-layout .picker__holder {\n    background-color: #262c49; }\n    body.dark-layout .picker__holder .picker__header .picker__month,\n    body.dark-layout .picker__holder .picker__header .picker__year {\n      color: #c2c6dc; }\n    body.dark-layout .picker__holder .picker__header .picker__select--year,\n    body.dark-layout .picker__holder .picker__header .picker__select--month {\n      color: #c2c6dc;\n      background-color: #262c49; }\n    body.dark-layout .picker__holder .picker__header .picker__nav--next:hover,\n    body.dark-layout .picker__holder .picker__header .picker__nav--prev:hover {\n      background-color: #10163a; }\n    body.dark-layout .picker__holder .picker__table thead tr .picker__weekday {\n      color: #c2c6dc; }\n    body.dark-layout .picker__holder .picker__table tbody tr td .picker__day {\n      color: #c2c6dc; }\n      body.dark-layout .picker__holder .picker__table tbody tr td .picker__day:hover {\n        background-color: transparent;\n        border: 1px solid #4ec6e8;\n        color: #c2c6dc; }\n      body.dark-layout .picker__holder .picker__table tbody tr td .picker__day.picker__day--disabled {\n        color: #c2c6dc;\n        opacity: 0.5;\n        background: #10163a; }\n    body.dark-layout .picker__holder .picker__table tbody tr td .picker__day--today {\n      background-color: #10163a; }\n    body.dark-layout .picker__holder .picker__footer .picker__button--today,\n    body.dark-layout .picker__holder .picker__footer .picker__button--clear,\n    body.dark-layout .picker__holder .picker__footer .picker__button--close {\n      background-color: #262c49;\n      color: #c2c6dc; }\n  body.dark-layout .picker--time .picker__holder .picker__list {\n    background-color: #262c49; }\n    body.dark-layout .picker--time .picker__holder .picker__list .picker__list-item.picker__list-item--selected, body.dark-layout .picker--time .picker__holder .picker__list .picker__list-item:hover {\n      background-color: #10163a; }\n    body.dark-layout .picker--time .picker__holder .picker__list .picker__list-item.picker__list-item--disabled {\n      background-color: #10163a;\n      color: #b8c2cc;\n      opacity: 0.5; }\n    body.dark-layout .picker--time .picker__holder .picker__list .picker__button--clear {\n      background-color: #262c49;\n      color: #c2c6dc; }\n  body.dark-layout .custom-control-label::before {\n    background-color: #414561; }\n  body.dark-layout .custom-control-input:disabled ~ .custom-control-label::before {\n    background-color: rgba(65, 69, 97, 0.5);\n    border-color: #414561; }\n  body.dark-layout .wizard .steps ul .disabled a,\n  body.dark-layout .wizard .steps ul .done a {\n    color: #c2c6dc !important; }\n    body.dark-layout .wizard .steps ul .disabled a:hover,\n    body.dark-layout .wizard .steps ul .done a:hover {\n      color: #c2c6dc; }\n    body.dark-layout .wizard .steps ul .disabled a .step,\n    body.dark-layout .wizard .steps ul .done a .step {\n      background-color: #262c49;\n      color: #fff; }\n  body.dark-layout .input-group .input-group-prepend .input-group-text,\n  body.dark-layout .input-group .input-group-append .input-group-text {\n    background-color: #10163a;\n    border: 1px solid #414561; }\n  body.dark-layout .input-group .input-group-prepend ~ .form-control {\n    border-left: 1px solid #414561; }\n  body.dark-layout .input-group .form-control ~ .input-group-append {\n    border-left: 1px solid #414561; }\n  body.dark-layout .form-label-group > input:not(:focus):not(:placeholder-shown) ~ label,\n  body.dark-layout .form-label-group > textarea:not(:focus):not(:placeholder-shown) ~ label {\n    color: #c2c6dc !important; }\n  body.dark-layout .table {\n    background-color: #212744; }\n    body.dark-layout .table .thead tr:not([class*=\"table-\"]) th,\n    body.dark-layout .table .thead tr:not([class*=\"table-\"]) td,\n    body.dark-layout .table tbody tr:not([class*=\"table-\"]) th,\n    body.dark-layout .table tbody tr:not([class*=\"table-\"]) td {\n      border: 0;\n      color: #c2c6dc; }\n      body.dark-layout .table .thead tr:not([class*=\"table-\"]) th code,\n      body.dark-layout .table .thead tr:not([class*=\"table-\"]) td code,\n      body.dark-layout .table tbody tr:not([class*=\"table-\"]) th code,\n      body.dark-layout .table tbody tr:not([class*=\"table-\"]) td code {\n        background-color: #10163a; }\n    body.dark-layout .table thead tr th {\n      border: 0;\n      background-color: #212744;\n      color: #c2c6dc; }\n    body.dark-layout .table tbody tr[class*=\"table-\"] td,\n    body.dark-layout .table tbody tr[class*=\"table-\"] th {\n      background-color: unset;\n      color: #22292f;\n      border-color: #414561; }\n    body.dark-layout .table tbody tr.table-dark td,\n    body.dark-layout .table tbody tr.table-dark th {\n      color: #fff; }\n    body.dark-layout .table tbody tr.table-active td,\n    body.dark-layout .table tbody tr.table-active th {\n      color: #c2c6dc; }\n    body.dark-layout .table tbody tr th {\n      background-color: #262c49; }\n    body.dark-layout .table tbody tr td {\n      background-color: #262c49;\n      color: #c2c6dc; }\n    body.dark-layout .table.table-bordered {\n      border: 1px solid #414561; }\n      body.dark-layout .table.table-bordered thead tr th,\n      body.dark-layout .table.table-bordered thead tr td,\n      body.dark-layout .table.table-bordered tbody tr th,\n      body.dark-layout .table.table-bordered tbody tr td {\n        border: 1px solid #414561; }\n    body.dark-layout .table.table-hover tbody tr:hover {\n      background-color: #10163a; }\n    body.dark-layout .table.table-hover tbody tr th,\n    body.dark-layout .table.table-hover tbody tr td {\n      background-color: unset; }\n    body.dark-layout .table.table-striped tbody tr:nth-of-type(odd) {\n      background-color: #10163a; }\n    body.dark-layout .table.table-striped tbody tr td,\n    body.dark-layout .table.table-striped tbody tr th {\n      background-color: unset; }\n    body.dark-layout .table.table-mx-0 {\n      background-color: #10163a; }\n      body.dark-layout .table.table-mx-0 thead tr th,\n      body.dark-layout .table.table-mx-0 thead tr td,\n      body.dark-layout .table.table-mx-0 tbody tr th,\n      body.dark-layout .table.table-mx-0 tbody tr td {\n        background-color: #10163a; }\n  body.dark-layout .dataTables_wrapper .dt-buttons .buttons-copy,\n  body.dark-layout .dataTables_wrapper .dt-buttons .buttons-excel,\n  body.dark-layout .dataTables_wrapper .dt-buttons .buttons-pdf,\n  body.dark-layout .dataTables_wrapper .dt-buttons .buttons-print,\n  body.dark-layout .dataTables_wrapper .dt-buttons .btn-secondary {\n    background-color: #262c49 !important; }\n  body.dark-layout .dataTables_wrapper .table.dataTable {\n    border: 0; }\n    body.dark-layout .dataTables_wrapper .table.dataTable tbody td,\n    body.dark-layout .dataTables_wrapper .table.dataTable tbody th,\n    body.dark-layout .dataTables_wrapper .table.dataTable thead td,\n    body.dark-layout .dataTables_wrapper .table.dataTable thead th {\n      border: 0;\n      color: #c2c6dc; }\n    body.dark-layout .dataTables_wrapper .table.dataTable tfoot tr th {\n      color: #c2c6dc; }\n    body.dark-layout .dataTables_wrapper .table.dataTable tr.group td {\n      background-color: #212744;\n      color: #fff; }\n    body.dark-layout .dataTables_wrapper .table.dataTable.complex-headers tbody tr:nth-of-type(even), body.dark-layout .dataTables_wrapper .table.dataTable.table-striped tbody tr:nth-of-type(even) {\n      background-color: #262c49; }\n    body.dark-layout .dataTables_wrapper .table.dataTable.complex-headers tfoot tr th, body.dark-layout .dataTables_wrapper .table.dataTable.table-striped tfoot tr th {\n      border: 0; }\n    body.dark-layout .dataTables_wrapper .table.dataTable.complex-headers {\n      border: 1px solid #414561; }\n      body.dark-layout .dataTables_wrapper .table.dataTable.complex-headers thead th,\n      body.dark-layout .dataTables_wrapper .table.dataTable.complex-headers thead td,\n      body.dark-layout .dataTables_wrapper .table.dataTable.complex-headers tfoot th,\n      body.dark-layout .dataTables_wrapper .table.dataTable.complex-headers tfoot td {\n        border-bottom: 1px solid #414561;\n        border-right: 1px solid #414561; }\n  body.dark-layout .dt-button-info {\n    background-color: #262c49; }\n    body.dark-layout .dt-button-info h2 {\n      background-color: #262c49; }\n    body.dark-layout .dt-button-info div {\n      color: #c2c6dc; }\n  body.dark-layout .ag-grid-btns .filter-btn {\n    background-color: transparent !important; }\n    body.dark-layout .ag-grid-btns .filter-btn:focus {\n      color: #c2c6dc !important; }\n    body.dark-layout .ag-grid-btns .filter-btn:hover {\n      box-shadow: none;\n      color: #c2c6dc !important; }\n  body.dark-layout .aggrid,\n  body.dark-layout .ag-header {\n    background-color: #10163a;\n    color: #c2c6dc;\n    border-color: #414561; }\n    body.dark-layout .aggrid .ag-row-hover,\n    body.dark-layout .aggrid .ag-row-selected,\n    body.dark-layout .ag-header .ag-row-hover,\n    body.dark-layout .ag-header .ag-row-selected {\n      background-color: #262c49 !important; }\n    body.dark-layout .aggrid .ag-icon,\n    body.dark-layout .ag-header .ag-icon {\n      color: #c2c6dc; }\n      body.dark-layout .aggrid .ag-icon.ag-icon-checkbox-checked, body.dark-layout .aggrid .ag-icon.ag-icon-checkbox-indeterminate,\n      body.dark-layout .ag-header .ag-icon.ag-icon-checkbox-checked,\n      body.dark-layout .ag-header .ag-icon.ag-icon-checkbox-indeterminate {\n        color: #7367f0; }\n    body.dark-layout .aggrid .ag-header-cell,\n    body.dark-layout .aggrid .ag-cell,\n    body.dark-layout .aggrid .ag-row,\n    body.dark-layout .aggrid .ag-pinned-left-header,\n    body.dark-layout .aggrid .ag-pinned-left-cols-container,\n    body.dark-layout .aggrid .ag-horizontal-left-spacer,\n    body.dark-layout .aggrid .ag-paging-panel,\n    body.dark-layout .aggrid .ag-floating-filter-input,\n    body.dark-layout .ag-header .ag-header-cell,\n    body.dark-layout .ag-header .ag-cell,\n    body.dark-layout .ag-header .ag-row,\n    body.dark-layout .ag-header .ag-pinned-left-header,\n    body.dark-layout .ag-header .ag-pinned-left-cols-container,\n    body.dark-layout .ag-header .ag-horizontal-left-spacer,\n    body.dark-layout .ag-header .ag-paging-panel,\n    body.dark-layout .ag-header .ag-floating-filter-input {\n      border-color: #414561 !important;\n      color: #c2c6dc; }\n    body.dark-layout .aggrid .ag-popup .ag-menu,\n    body.dark-layout .ag-header .ag-popup .ag-menu {\n      background-color: #262c49; }\n      body.dark-layout .aggrid .ag-popup .ag-menu .ag-filter-filter,\n      body.dark-layout .aggrid .ag-popup .ag-menu .ag-filter-select,\n      body.dark-layout .ag-header .ag-popup .ag-menu .ag-filter-filter,\n      body.dark-layout .ag-header .ag-popup .ag-menu .ag-filter-select {\n        background-color: transparent;\n        border-color: #414561;\n        color: #c2c6dc; }\n        body.dark-layout .aggrid .ag-popup .ag-menu .ag-filter-filter::placeholder,\n        body.dark-layout .aggrid .ag-popup .ag-menu .ag-filter-select::placeholder,\n        body.dark-layout .ag-header .ag-popup .ag-menu .ag-filter-filter::placeholder,\n        body.dark-layout .ag-header .ag-popup .ag-menu .ag-filter-select::placeholder {\n          color: #c2c6dc; }\n      body.dark-layout .aggrid .ag-popup .ag-menu .ag-filter-select option,\n      body.dark-layout .ag-header .ag-popup .ag-menu .ag-filter-select option {\n        background-color: #262c49; }\n    body.dark-layout .aggrid .ag-paging-panel .ag-disabled,\n    body.dark-layout .ag-header .ag-paging-panel .ag-disabled {\n      background-color: #373f6d; }\n      body.dark-layout .aggrid .ag-paging-panel .ag-disabled .ag-icon,\n      body.dark-layout .ag-header .ag-paging-panel .ag-disabled .ag-icon {\n        color: #c2c6dc !important; }\n    body.dark-layout .aggrid .ag-paging-panel span[ref=\"lbTotal\"],\n    body.dark-layout .ag-header .ag-paging-panel span[ref=\"lbTotal\"] {\n      background-color: #373f6d;\n      color: #c2c6dc !important; }\n    body.dark-layout .aggrid ::-webkit-scrollbar-track,\n    body.dark-layout .ag-header ::-webkit-scrollbar-track {\n      background: #262c49; }\n    body.dark-layout .aggrid ::-webkit-scrollbar-thumb,\n    body.dark-layout .ag-header ::-webkit-scrollbar-thumb {\n      background: #7367f0; }\n  body.dark-layout .bg-authentication {\n    background-color: #eff2f7; }\n    body.dark-layout .bg-authentication .form-group.row,\n    body.dark-layout .bg-authentication .card-footer {\n      background-color: #10163a; }\n      body.dark-layout .bg-authentication .form-group.row .btn-facebook span,\n      body.dark-layout .bg-authentication .form-group.row .btn-twitter span,\n      body.dark-layout .bg-authentication .card-footer .btn-facebook span,\n      body.dark-layout .bg-authentication .card-footer .btn-twitter span {\n        color: #fff; }\n  body.dark-layout .getting-started .clockCard p {\n    color: #c2c6dc !important; }\n  body.dark-layout #user-profile .profile-header .profile-header-nav {\n    background-color: #10163a; }\n  body.dark-layout #search-website .search-bar .form-control {\n    background-color: #10163a; }\n  body.dark-layout #search-website .search-menu .search-filter {\n    background-color: #10163a;\n    color: #c2c6dc; }\n  body.dark-layout #search-website .search-result-info .dropdown-toggle {\n    color: #c2c6dc; }\n  body.dark-layout #search-website .search-pagination .pagination .page-item {\n    background-color: #10163a; }\n    body.dark-layout #search-website .search-pagination .pagination .page-item.active .page-link {\n      background-color: #7367f0; }\n    body.dark-layout #search-website .search-pagination .pagination .page-item .page-link {\n      background-color: #10163a; }\n  body.dark-layout .faq .accordion .collapse-margin {\n    background-color: #10163a; }\n  body.dark-layout .faq .accordion .collapse-title {\n    color: #ebeefd; }\n  body.dark-layout .faq-bg .card-body .card-text,\n  body.dark-layout .knowledge-base-bg .card-body .card-text {\n    color: #fff; }\n  body.dark-layout .search-content .card .card-body .text-dark {\n    color: #c2c6dc !important; }\n  body.dark-layout .knowledge-base-category .list-group .list-group-item,\n  body.dark-layout .knowledge-base-question .list-group .list-group-item {\n    color: #7367f0; }\n  body.dark-layout .invoice-items-table .table-borderless,\n  body.dark-layout .invoice-total-table .table-borderless {\n    border: 0; }\n  body.dark-layout .invoice-print .form-control {\n    background-color: #10163a; }\n  body.dark-layout .apexcharts-canvas .apexcharts-gridlines-horizontal .apexcharts-gridline {\n    stroke: #414561; }\n  body.dark-layout .apexcharts-canvas .apexcharts-tooltip.light,\n  body.dark-layout .apexcharts-canvas .apexcharts-yaxistooltip,\n  body.dark-layout .apexcharts-canvas .apexcharts-xaxistooltip {\n    background-color: #212744;\n    border-color: #262c49; }\n    body.dark-layout .apexcharts-canvas .apexcharts-tooltip.light .apexcharts-tooltip-title,\n    body.dark-layout .apexcharts-canvas .apexcharts-tooltip.light .apexcharts-tooltip-text,\n    body.dark-layout .apexcharts-canvas .apexcharts-yaxistooltip .apexcharts-tooltip-title,\n    body.dark-layout .apexcharts-canvas .apexcharts-yaxistooltip .apexcharts-tooltip-text,\n    body.dark-layout .apexcharts-canvas .apexcharts-xaxistooltip .apexcharts-tooltip-title,\n    body.dark-layout .apexcharts-canvas .apexcharts-xaxistooltip .apexcharts-tooltip-text {\n      background-color: #212744;\n      color: #c2c6dc; }\n  body.dark-layout .apexcharts-canvas .apexcharts-tooltip.dark .apexcharts-tooltip-text .apexcharts-tooltip-text-label,\n  body.dark-layout .apexcharts-canvas .apexcharts-tooltip.dark .apexcharts-tooltip-text .apexcharts-tooltip-text-value {\n    color: #fff; }\n  body.dark-layout .apexcharts-canvas .apexcharts-xaxistooltip-bottom:before {\n    border-bottom-color: transparent; }\n  body.dark-layout .apexcharts-canvas .apexcharts-xaxistooltip-bottom:after {\n    border-bottom-color: #262c49; }\n  body.dark-layout .apexcharts-canvas .apexcharts-yaxistooltip-left:before {\n    border-left-color: transparent; }\n  body.dark-layout .apexcharts-canvas .apexcharts-yaxistooltip-left:after {\n    border-left-color: #262c49; }\n  body.dark-layout .apexcharts-canvas text {\n    fill: #fff !important; }\n  body.dark-layout .apexcharts-canvas .apexcharts-legend-series .apexcharts-legend-text {\n    color: #c2c6dc !important; }\n  body.dark-layout .apexcharts-canvas .apexcharts-radialbar-track path {\n    stroke: #262c49; }\n  body.dark-layout .apexcharts-canvas .apexcharts-inner polygon {\n    stroke: #212744 !important;\n    fill: #262c49 !important; }\n  body.dark-layout .apexcharts-canvas .apexcharts-pie-series path {\n    stroke: #262c49; }\n  body.dark-layout .apexcharts-canvas .apexcharts-menu {\n    background-color: #262c49;\n    border: 0; }\n  body.dark-layout .apexcharts-canvas .apexcharts-toolbar .apexcharts-zoom-in-icon:hover svg,\n  body.dark-layout .apexcharts-canvas .apexcharts-toolbar .apexcharts-zoom-out-icon:hover svg,\n  body.dark-layout .apexcharts-canvas .apexcharts-toolbar .apexcharts-zoom-icon:hover svg,\n  body.dark-layout .apexcharts-canvas .apexcharts-toolbar .apexcharts-menu-icon:hover svg,\n  body.dark-layout .apexcharts-canvas .apexcharts-toolbar .apexcharts-reset-zoom-icon:hover svg {\n    fill: #c2c6dc; }\n  body.dark-layout.email-application .app-content .content-area-wrapper {\n    border-color: #414561; }\n    body.dark-layout.email-application .app-content .content-area-wrapper .email-app-sidebar {\n      background-color: #262c49; }\n    body.dark-layout.email-application .app-content .content-area-wrapper .app-fixed-search {\n      background-color: #10163a;\n      border-color: #414561; }\n      body.dark-layout.email-application .app-content .content-area-wrapper .app-fixed-search .form-control {\n        color: #c2c6dc; }\n        body.dark-layout.email-application .app-content .content-area-wrapper .app-fixed-search .form-control::placeholder {\n          color: #c2c6dc; }\n        body.dark-layout.email-application .app-content .content-area-wrapper .app-fixed-search .form-control:focus ~ .form-control-position i {\n          color: #7367f0; }\n      body.dark-layout.email-application .app-content .content-area-wrapper .app-fixed-search .form-control-position i {\n        color: #c2c6dc; }\n    body.dark-layout.email-application .app-content .content-area-wrapper .email-app-list-wrapper {\n      border-color: #414561; }\n      body.dark-layout.email-application .app-content .content-area-wrapper .email-app-list-wrapper .app-action {\n        border-color: #414561; }\n    body.dark-layout.email-application .app-content .content-area-wrapper .email-app-menu .sidebar-menu-list .list-group-messages .list-group-item,\n    body.dark-layout.email-application .app-content .content-area-wrapper .email-app-menu .sidebar-menu-list .list-group-labels .list-group-item {\n      background: #262c49; }\n      body.dark-layout.email-application .app-content .content-area-wrapper .email-app-menu .sidebar-menu-list .list-group-messages .list-group-item.active, body.dark-layout.email-application .app-content .content-area-wrapper .email-app-menu .sidebar-menu-list .list-group-messages .list-group-item.active:hover,\n      body.dark-layout.email-application .app-content .content-area-wrapper .email-app-menu .sidebar-menu-list .list-group-labels .list-group-item.active,\n      body.dark-layout.email-application .app-content .content-area-wrapper .email-app-menu .sidebar-menu-list .list-group-labels .list-group-item.active:hover {\n        color: #7367f0; }\n      body.dark-layout.email-application .app-content .content-area-wrapper .email-app-menu .sidebar-menu-list .list-group-messages .list-group-item:hover,\n      body.dark-layout.email-application .app-content .content-area-wrapper .email-app-menu .sidebar-menu-list .list-group-labels .list-group-item:hover {\n        color: #c2c6dc; }\n    body.dark-layout.email-application .app-content .content-area-wrapper .email-app-list .app-action .action-right .list-inline-item .dropdown-toggle {\n      color: #c2c6dc; }\n    body.dark-layout.email-application .app-content .content-area-wrapper .email-app-list .email-user-list .media {\n      border-color: #414561; }\n      body.dark-layout.email-application .app-content .content-area-wrapper .email-app-list .email-user-list .media:hover {\n        box-shadow: 0 0 0 0 #1e1e1e; }\n    body.dark-layout.email-application .app-content .content-area-wrapper .email-app-list .email-user-list .mail-read,\n    body.dark-layout.email-application .app-content .content-area-wrapper .email-app-list .email-user-list .media {\n      background-color: #262c49; }\n      body.dark-layout.email-application .app-content .content-area-wrapper .email-app-list .email-user-list .mail-read .user-details p,\n      body.dark-layout.email-application .app-content .content-area-wrapper .email-app-list .email-user-list .mail-read .user-details .list-group-item-text,\n      body.dark-layout.email-application .app-content .content-area-wrapper .email-app-list .email-user-list .mail-read .mail-message p,\n      body.dark-layout.email-application .app-content .content-area-wrapper .email-app-list .email-user-list .mail-read .mail-message .list-group-item-text,\n      body.dark-layout.email-application .app-content .content-area-wrapper .email-app-list .email-user-list .media .user-details p,\n      body.dark-layout.email-application .app-content .content-area-wrapper .email-app-list .email-user-list .media .user-details .list-group-item-text,\n      body.dark-layout.email-application .app-content .content-area-wrapper .email-app-list .email-user-list .media .mail-message p,\n      body.dark-layout.email-application .app-content .content-area-wrapper .email-app-list .email-user-list .media .mail-message .list-group-item-text {\n        color: #c2c6dc; }\n      body.dark-layout.email-application .app-content .content-area-wrapper .email-app-list .email-user-list .mail-read .user-details .mail-meta-item .mail-date,\n      body.dark-layout.email-application .app-content .content-area-wrapper .email-app-list .email-user-list .mail-read .mail-message .mail-meta-item .mail-date,\n      body.dark-layout.email-application .app-content .content-area-wrapper .email-app-list .email-user-list .media .user-details .mail-meta-item .mail-date,\n      body.dark-layout.email-application .app-content .content-area-wrapper .email-app-list .email-user-list .media .mail-message .mail-meta-item .mail-date {\n        color: #c2c6dc; }\n    body.dark-layout.email-application .app-content .content-area-wrapper .email-app-list .email-user-list .mail-read {\n      background-color: #414561; }\n    body.dark-layout.email-application .app-content .content-area-wrapper .email-app-details.show {\n      background-color: #212744; }\n    body.dark-layout.email-application .app-content .content-area-wrapper .email-app-details .email-detail-header {\n      background-color: #10163a;\n      border-color: #414561; }\n      body.dark-layout.email-application .app-content .content-area-wrapper .email-app-details .email-detail-header .email-header-right .list-inline-item .dropdown-toggle {\n        color: #c2c6dc; }\n    body.dark-layout.email-application .app-content .content-area-wrapper .email-app-details .mail-message-wrapper,\n    body.dark-layout.email-application .app-content .content-area-wrapper .email-app-details .email-detail-head {\n      border-color: #414561 !important; }\n  body.dark-layout.chat-application .content-area-wrapper {\n    border-color: #414561; }\n  body.dark-layout.chat-application .sidebar .chat-profile-sidebar {\n    background-color: #262c49;\n    border-color: #343661; }\n  body.dark-layout.chat-application .sidebar .sidebar-content {\n    background-color: #262c49;\n    border-color: #414561; }\n    body.dark-layout.chat-application .sidebar .sidebar-content .chat-fixed-search {\n      border-color: #414561; }\n      body.dark-layout.chat-application .sidebar .sidebar-content .chat-fixed-search .form-control {\n        background-color: #10163a;\n        border-color: #414561; }\n    body.dark-layout.chat-application .sidebar .sidebar-content .chat-user-list .chat-users-list-wrapper li {\n      border-color: #414561; }\n      body.dark-layout.chat-application .sidebar .sidebar-content .chat-user-list .chat-users-list-wrapper li:not(.active):hover {\n        background: #10163a; }\n      body.dark-layout.chat-application .sidebar .sidebar-content .chat-user-list .chat-users-list-wrapper li.active .contact-info p {\n        color: #fff; }\n  body.dark-layout.chat-application .content-right .chat-app-window .start-chat-area {\n    background-color: #171e49; }\n    body.dark-layout.chat-application .content-right .chat-app-window .start-chat-area .start-chat-icon,\n    body.dark-layout.chat-application .content-right .chat-app-window .start-chat-area .start-chat-text {\n      background: #262c49; }\n  body.dark-layout.chat-application .content-right .chat-app-window .active-chat .user-chats {\n    background-color: #171e49; }\n    body.dark-layout.chat-application .content-right .chat-app-window .active-chat .user-chats .chat-left .chat-content {\n      border: 1px solid #414561; }\n      body.dark-layout.chat-application .content-right .chat-app-window .active-chat .user-chats .chat-left .chat-content p {\n        color: #c2c6dc; }\n    body.dark-layout.chat-application .content-right .chat-app-window .active-chat .user-chats .chat-content p {\n      color: #fff; }\n    body.dark-layout.chat-application .content-right .chat-app-window .active-chat .user-chats .chat-content {\n      background-color: #262c49; }\n  body.dark-layout.chat-application .content-right .chat-app-window .active-chat .chat-app-form {\n    background-color: #10163a; }\n    body.dark-layout.chat-application .content-right .chat-app-window .active-chat .chat-app-form .form-control {\n      background-color: #343661; }\n  body.dark-layout.chat-application .content-right .user-profile-sidebar {\n    background-color: #262c49;\n    border-color: #343661; }\n  body.dark-layout.todo-application .content-area-wrapper {\n    border-color: #414561; }\n    body.dark-layout.todo-application .content-area-wrapper .sidebar .todo-sidebar {\n      background-color: #262c49; }\n      body.dark-layout.todo-application .content-area-wrapper .sidebar .todo-sidebar .list-group-filters .list-group-item,\n      body.dark-layout.todo-application .content-area-wrapper .sidebar .todo-sidebar .list-group-labels .list-group-item {\n        background-color: #262c49; }\n        body.dark-layout.todo-application .content-area-wrapper .sidebar .todo-sidebar .list-group-filters .list-group-item:hover,\n        body.dark-layout.todo-application .content-area-wrapper .sidebar .todo-sidebar .list-group-labels .list-group-item:hover {\n          color: #c2c6dc; }\n    body.dark-layout.todo-application .content-area-wrapper .sidebar .todo-form .todo-item-action {\n      color: #c2c6dc; }\n    body.dark-layout.todo-application .content-area-wrapper .todo-app-area .todo-app-list-wrapper {\n      border-color: #414561; }\n    body.dark-layout.todo-application .content-area-wrapper .todo-app-area .app-fixed-search {\n      background-color: #10163a;\n      border-color: #414561; }\n    body.dark-layout.todo-application .content-area-wrapper .todo-app-area .todo-task-list .todo-item {\n      border-color: #414561; }\n      body.dark-layout.todo-application .content-area-wrapper .todo-app-area .todo-task-list .todo-item:hover {\n        box-shadow: none; }\n      body.dark-layout.todo-application .content-area-wrapper .todo-app-area .todo-task-list .todo-item .chip {\n        background-color: #10163a; }\n      body.dark-layout.todo-application .content-area-wrapper .todo-app-area .todo-task-list .todo-item .todo-item-action .todo-item-favorite:not(.warning) i,\n      body.dark-layout.todo-application .content-area-wrapper .todo-app-area .todo-task-list .todo-item .todo-item-action .todo-item-delete i,\n      body.dark-layout.todo-application .content-area-wrapper .todo-app-area .todo-task-list .todo-item .todo-item-action .todo-item-info:not(.success) i {\n        color: #c2c6dc; }\n  body.dark-layout.ecommerce-application .sidebar-left .sidebar-shop .filter-heading {\n    color: #c2c6dc; }\n  body.dark-layout.ecommerce-application .sidebar-left .sidebar-shop .price-slider .range-slider {\n    background-color: #262c49; }\n  body.dark-layout.ecommerce-application .sidebar-left .sidebar-shop .ratings-list li,\n  body.dark-layout.ecommerce-application .sidebar-left .sidebar-shop .ratings-list ~ .stars-received {\n    color: #c2c6dc; }\n  body.dark-layout.ecommerce-application .content-right .ecommerce-header-items .result-toggler .search-results,\n  body.dark-layout.ecommerce-application .content-body .ecommerce-header-items .result-toggler .search-results {\n    color: #c2c6dc; }\n  body.dark-layout.ecommerce-application .content-right .ecommerce-header-items .result-toggler .shop-sidebar-toggler i,\n  body.dark-layout.ecommerce-application .content-body .ecommerce-header-items .result-toggler .shop-sidebar-toggler i {\n    color: #c2c6dc; }\n  body.dark-layout.ecommerce-application .content-right .ecommerce-header-items .view-options .select2 .select2-selection,\n  body.dark-layout.ecommerce-application .content-body .ecommerce-header-items .view-options .select2 .select2-selection {\n    background-color: #10163a; }\n  body.dark-layout.ecommerce-application .content-right .ecommerce-header-items .view-options .view-btn-option .grid-view-btn,\n  body.dark-layout.ecommerce-application .content-right .ecommerce-header-items .view-options .view-btn-option .list-view-btn,\n  body.dark-layout.ecommerce-application .content-body .ecommerce-header-items .view-options .view-btn-option .grid-view-btn,\n  body.dark-layout.ecommerce-application .content-body .ecommerce-header-items .view-options .view-btn-option .list-view-btn {\n    background-color: #10163a !important; }\n    body.dark-layout.ecommerce-application .content-right .ecommerce-header-items .view-options .view-btn-option .grid-view-btn:not(.active) i,\n    body.dark-layout.ecommerce-application .content-right .ecommerce-header-items .view-options .view-btn-option .list-view-btn:not(.active) i,\n    body.dark-layout.ecommerce-application .content-body .ecommerce-header-items .view-options .view-btn-option .grid-view-btn:not(.active) i,\n    body.dark-layout.ecommerce-application .content-body .ecommerce-header-items .view-options .view-btn-option .list-view-btn:not(.active) i {\n      color: #c2c6dc; }\n  body.dark-layout.ecommerce-application .content-right .search-product,\n  body.dark-layout.ecommerce-application .content-body .search-product {\n    background-color: #10163a; }\n  body.dark-layout.ecommerce-application .content-right .grid-view .ecommerce-card .card-body,\n  body.dark-layout.ecommerce-application .content-right .list-view .ecommerce-card .card-body,\n  body.dark-layout.ecommerce-application .content-body .grid-view .ecommerce-card .card-body,\n  body.dark-layout.ecommerce-application .content-body .list-view .ecommerce-card .card-body {\n    border-color: #414561; }\n  body.dark-layout.ecommerce-application .content-right .grid-view .ecommerce-card .item-img,\n  body.dark-layout.ecommerce-application .content-right .list-view .ecommerce-card .item-img,\n  body.dark-layout.ecommerce-application .content-body .grid-view .ecommerce-card .item-img,\n  body.dark-layout.ecommerce-application .content-body .list-view .ecommerce-card .item-img {\n    background-color: #fff; }\n  body.dark-layout.ecommerce-application .content-right .grid-view .ecommerce-card .item-name,\n  body.dark-layout.ecommerce-application .content-right .list-view .ecommerce-card .item-name,\n  body.dark-layout.ecommerce-application .content-body .grid-view .ecommerce-card .item-name,\n  body.dark-layout.ecommerce-application .content-body .list-view .ecommerce-card .item-name {\n    color: #fff; }\n  body.dark-layout.ecommerce-application .content-right .grid-view .ecommerce-card .item-options .wishlist span,\n  body.dark-layout.ecommerce-application .content-right .list-view .ecommerce-card .item-options .wishlist span,\n  body.dark-layout.ecommerce-application .content-body .grid-view .ecommerce-card .item-options .wishlist span,\n  body.dark-layout.ecommerce-application .content-body .list-view .ecommerce-card .item-options .wishlist span {\n    color: #2c2c2c; }\n  body.dark-layout.ecommerce-application .content-right .grid-view .ecommerce-card .item-options .cart span,\n  body.dark-layout.ecommerce-application .content-right .list-view .ecommerce-card .item-options .cart span,\n  body.dark-layout.ecommerce-application .content-body .grid-view .ecommerce-card .item-options .cart span,\n  body.dark-layout.ecommerce-application .content-body .list-view .ecommerce-card .item-options .cart span {\n    color: #fff; }\n  body.dark-layout.ecommerce-application .content-right .pagination .page-item,\n  body.dark-layout.ecommerce-application .content-body .pagination .page-item {\n    background-color: #10163a; }\n    body.dark-layout.ecommerce-application .content-right .pagination .page-item.active,\n    body.dark-layout.ecommerce-application .content-body .pagination .page-item.active {\n      background-color: #10163a; }\n      body.dark-layout.ecommerce-application .content-right .pagination .page-item.active .page-link,\n      body.dark-layout.ecommerce-application .content-body .pagination .page-item.active .page-link {\n        background-color: #7367f0; }\n    body.dark-layout.ecommerce-application .content-right .pagination .page-item .page-link,\n    body.dark-layout.ecommerce-application .content-body .pagination .page-item .page-link {\n      background-color: #10163a; }\n  body.dark-layout.ecommerce-application .wishlist-items .ecommerce-card .move-cart .move-to-cart {\n    color: #fff; }\n  body.dark-layout.ecommerce-application .product-checkout .checkout-options .detail-total {\n    color: #c2c6dc; }\n  body.dark-layout.ecommerce-application .item-features {\n    background-color: #171e49; }\n  body.dark-layout .fc .fc-header-toolbar .fc-button span {\n    color: #fff; }\n  body.dark-layout .fc .fc-view-container .fc-body .fc-week table tbody .fc-other-month {\n    background-color: #6a6d83; }\n  body.dark-layout .fc .fc-divider {\n    background: #262c49; }\n  body.dark-layout .fc .fc-widget-content,\n  body.dark-layout .fc .fc-widget-header {\n    border-color: #414561; }\n  body.dark-layout .noUi-target {\n    background-color: #262c49; }\n  body.dark-layout .swal2-container .swal2-modal {\n    background-color: #262c49; }\n    body.dark-layout .swal2-container .swal2-modal .swal2-header {\n      background-color: #262c49; }\n      body.dark-layout .swal2-container .swal2-modal .swal2-header .swal2-title {\n        color: #c2c6dc; }\n      body.dark-layout .swal2-container .swal2-modal .swal2-header .swal2-icon-text {\n        color: inherit; }\n      body.dark-layout .swal2-container .swal2-modal .swal2-header .swal2-success-circular-line-left,\n      body.dark-layout .swal2-container .swal2-modal .swal2-header .swal2-success-circular-line-right,\n      body.dark-layout .swal2-container .swal2-modal .swal2-header .swal2-success-fix,\n      body.dark-layout .swal2-container .swal2-modal .swal2-header .swal2-animate-success-icon {\n        background-color: #262c49 !important; }\n    body.dark-layout .swal2-container .swal2-modal .swal2-content {\n      color: #c2c6dc; }\n      body.dark-layout .swal2-container .swal2-modal .swal2-content pre,\n      body.dark-layout .swal2-container .swal2-modal .swal2-content code,\n      body.dark-layout .swal2-container .swal2-modal .swal2-content .swal2-input {\n        background-color: #10163a; }\n      body.dark-layout .swal2-container .swal2-modal .swal2-content .swal2-input {\n        color: #fff; }\n  body.dark-layout .toast-container .toast.toast-info {\n    background-color: #00cfe8; }\n  body.dark-layout .toast-container .toast.toast-success {\n    background-color: #28c76f; }\n  body.dark-layout .toast-container .toast.toast-error {\n    background-color: #ea5455; }\n  body.dark-layout .toast-container .toast.toast-warning {\n    background-color: #ff9f43; }\n  body.dark-layout .dropzone {\n    background-color: #262c49; }\n  body.dark-layout .quill-toolbar,\n  body.dark-layout .ql-toolbar {\n    border-color: #414561; }\n    body.dark-layout .quill-toolbar .ql-formats .ql-picker-label,\n    body.dark-layout .ql-toolbar .ql-formats .ql-picker-label {\n      color: #fff; }\n    body.dark-layout .quill-toolbar .ql-formats .ql-stroke,\n    body.dark-layout .quill-toolbar .ql-formats .ql-fill,\n    body.dark-layout .ql-toolbar .ql-formats .ql-stroke,\n    body.dark-layout .ql-toolbar .ql-formats .ql-fill {\n      stroke: #fff; }\n    body.dark-layout .quill-toolbar .ql-formats .ql-fill,\n    body.dark-layout .ql-toolbar .ql-formats .ql-fill {\n      fill: #fff; }\n    body.dark-layout .quill-toolbar .ql-header.ql-expanded .ql-picker-options,\n    body.dark-layout .ql-toolbar .ql-header.ql-expanded .ql-picker-options {\n      background-color: #10163a; }\n      body.dark-layout .quill-toolbar .ql-header.ql-expanded .ql-picker-options span:not(:hover),\n      body.dark-layout .ql-toolbar .ql-header.ql-expanded .ql-picker-options span:not(:hover) {\n        color: #fff; }\n  body.dark-layout .ql-container {\n    border-color: #414561; }\n  body.dark-layout .ql-editor .ql-syntax {\n    background-color: #262c49; }\n  body.dark-layout .ql-editor.ql-blank:before {\n    color: #c2c6dc; }\n  body.dark-layout .shepherd-content .shepherd-text p {\n    color: #fff; }\n  body.dark-layout .context-menu-list .context-menu-item.context-menu-hover span {\n    color: #fff; }\n  body.dark-layout .context-menu-list .context-menu-item.context-menu-hover .context-menu-list .context-menu-item span {\n    color: #c2c6dc; }\n  body.dark-layout .swiper-slide {\n    background-color: #262c49 !important; }\n  body.dark-layout .customizer {\n    background-color: #262c49; }\n    body.dark-layout .customizer .customizer-close i {\n      color: #c2c6dc; }\n  body.dark-layout.fixed-footer .footer {\n    background-color: #10163a; }\n  body.dark-layout.horizontal-layout .main-menu-content .navbar-nav .dropdown-submenu.show {\n    background-color: #10163a !important;\n    color: #c2c6dc; }\n  body.dark-layout.horizontal-layout .main-menu-content .navbar-nav .dropdown-menu a:hover {\n    color: #c2c6dc !important; }\n  body.dark-layout.horizontal-layout .main-menu-content .navbar-nav li.active i,\n  body.dark-layout.horizontal-layout .main-menu-content .navbar-nav li.active span {\n    color: #fff !important; }\n  body.dark-layout.horizontal-layout .main-menu-content .navbar-nav li.active .dropdown-menu li.active a {\n    background-color: #10163a !important;\n    color: #c2c6dc; }\n  body.dark-layout.horizontal-layout .main-menu-content .navbar-nav li.active .dropdown-menu li:not(.active) a {\n    background-color: #262c49 !important; }\n  body.dark-layout.horizontal-layout .main-menu-content .navbar-nav li.active .dropdown-menu li.open.active > a {\n    color: #c2c6dc !important; }\n  body.dark-layout.horizontal-layout.vertical-overlay-menu .main-menu .navigation > li ul .active {\n    box-shadow: none; }\n    body.dark-layout.horizontal-layout.vertical-overlay-menu .main-menu .navigation > li ul .active .hover > a {\n      background-color: transparent; }\n  body.dark-layout.horizontal-layout.vertical-overlay-menu .main-menu .nav-item.active a {\n    box-shadow: none; }\n  body.dark-layout.horizontal-layout.vertical-overlay-menu .main-menu .nav-item.active ul li.active {\n    border-radius: 0; }\n  body.dark-layout.horizontal-layout.vertical-overlay-menu .main-menu .nav-item.active.sidebar-group-active .open ul li.active a {\n    background: linear-gradient(118deg, #7367f0, rgba(115, 103, 240, 0.7)) !important;\n    margin-bottom: 7px;\n    box-shadow: 0px 0px 6px 1px rgba(115, 103, 240, 0.6) !important;\n    color: #fff; }\n  body.dark-layout.horizontal-layout.vertical-overlay-menu .main-menu ul li {\n    background: #10163a !important;\n    background-color: #10163a !important; }\n    body.dark-layout.horizontal-layout.vertical-overlay-menu .main-menu ul li a {\n      color: #c2c6dc !important; }\n"
  },
  {
    "path": "public/backend/css/themes/semi-dark-layout.css",
    "content": "/*========================================================\n        DARK LAYOUT\n=========================================================*/\nbody.semi-dark-layout {\n  /************ Main Menu **************/ }\n  body.semi-dark-layout .main-menu {\n    background-color: #10163a; }\n    body.semi-dark-layout .main-menu .shadow-bottom {\n      background: linear-gradient(180deg, #0f1642 44%, rgba(15, 22, 66, 0.51) 73%, rgba(44, 48, 60, 0)); }\n    body.semi-dark-layout .main-menu:not(.expanded) .navigation .sidebar-group-active a {\n      background-color: #262c49; }\n  body.semi-dark-layout .main-menu-content .navigation-main {\n    background-color: #10163a; }\n    body.semi-dark-layout .main-menu-content .navigation-main .nav-item i {\n      color: #c2c6dc; }\n    body.semi-dark-layout .main-menu-content .navigation-main .nav-item.open a {\n      background-color: #262c49; }\n    body.semi-dark-layout .main-menu-content .navigation-main .nav-item a:after, body.semi-dark-layout .main-menu-content .navigation-main .nav-item a {\n      color: #c2c6dc; }\n    body.semi-dark-layout .main-menu-content .navigation-main .nav-item .menu-content {\n      background-color: #10163a; }\n      body.semi-dark-layout .main-menu-content .navigation-main .nav-item .menu-content .active .menu-item {\n        color: #fff; }\n      body.semi-dark-layout .main-menu-content .navigation-main .nav-item .menu-content li:not(.active) a {\n        background-color: #10163a; }\n    body.semi-dark-layout .main-menu-content .navigation-main .active .menu-title,\n    body.semi-dark-layout .main-menu-content .navigation-main .active i {\n      color: #fff; }\n    body.semi-dark-layout .main-menu-content .navigation-main .sidebar-group-active a {\n      background: #10163a;\n      border-radius: 4px; }\n    body.semi-dark-layout .main-menu-content .navigation-main .sidebar-group-active .menu-content {\n      background-color: #10163a; }\n      body.semi-dark-layout .main-menu-content .navigation-main .sidebar-group-active .menu-content .active {\n        z-index: 1; }\n        body.semi-dark-layout .main-menu-content .navigation-main .sidebar-group-active .menu-content .active a {\n          background-color: transparent; }\n  body.semi-dark-layout.menu-collapsed .main-menu:not(.expanded) .navigation-main li.active a {\n    background: #262c49 !important; }\n"
  },
  {
    "path": "public/backend/fonts/feather/iconfont.css",
    "content": "\n@font-face {\n  font-family: \"feather\";\n  src: url('fonts/feather.eot?t=1525787366991'); /* IE9*/\n  src: url('fonts/feather.eot?t=1525787366991#iefix') format('embedded-opentype'), /* IE6-IE8 */\n  url('fonts/feather.woff?t=1525787366991') format('woff'), /* chrome, firefox */\n  url('fonts/feather.ttf?t=1525787366991') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/\n  url('fonts/feather.svg?t=1525787366991#feather') format('svg'); /* iOS 4.1- */\n}\n\n.feather {\n  /* use !important to prevent issues with browser extensions that change fonts */\n  font-family: 'feather' !important;\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\n.icon-alert-octagon:before { content: \"\\e81b\"; }\n\n.icon-alert-circle:before { content: \"\\e81c\"; }\n\n.icon-activity:before { content: \"\\e81d\"; }\n\n.icon-alert-triangle:before { content: \"\\e81e\"; }\n\n.icon-align-center:before { content: \"\\e81f\"; }\n\n.icon-airplay:before { content: \"\\e820\"; }\n\n.icon-align-justify:before { content: \"\\e821\"; }\n\n.icon-align-left:before { content: \"\\e822\"; }\n\n.icon-align-right:before { content: \"\\e823\"; }\n\n.icon-arrow-down-left:before { content: \"\\e824\"; }\n\n.icon-arrow-down-right:before { content: \"\\e825\"; }\n\n.icon-anchor:before { content: \"\\e826\"; }\n\n.icon-aperture:before { content: \"\\e827\"; }\n\n.icon-arrow-left:before { content: \"\\e828\"; }\n\n.icon-arrow-right:before { content: \"\\e829\"; }\n\n.icon-arrow-down:before { content: \"\\e82a\"; }\n\n.icon-arrow-up-left:before { content: \"\\e82b\"; }\n\n.icon-arrow-up-right:before { content: \"\\e82c\"; }\n\n.icon-arrow-up:before { content: \"\\e82d\"; }\n\n.icon-award:before { content: \"\\e82e\"; }\n\n.icon-bar-chart:before { content: \"\\e82f\"; }\n\n.icon-at-sign:before { content: \"\\e830\"; }\n\n.icon-bar-chart-2:before { content: \"\\e831\"; }\n\n.icon-battery-charging:before { content: \"\\e832\"; }\n\n.icon-bell-off:before { content: \"\\e833\"; }\n\n.icon-battery:before { content: \"\\e834\"; }\n\n.icon-bluetooth:before { content: \"\\e835\"; }\n\n.icon-bell:before { content: \"\\e836\"; }\n\n.icon-book:before { content: \"\\e837\"; }\n\n.icon-briefcase:before { content: \"\\e838\"; }\n\n.icon-camera-off:before { content: \"\\e839\"; }\n\n.icon-calendar:before { content: \"\\e83a\"; }\n\n.icon-bookmark:before { content: \"\\e83b\"; }\n\n.icon-box:before { content: \"\\e83c\"; }\n\n.icon-camera:before { content: \"\\e83d\"; }\n\n.icon-check-circle:before { content: \"\\e83e\"; }\n\n.icon-check:before { content: \"\\e83f\"; }\n\n.icon-check-square:before { content: \"\\e840\"; }\n\n.icon-cast:before { content: \"\\e841\"; }\n\n.icon-chevron-down:before { content: \"\\e842\"; }\n\n.icon-chevron-left:before { content: \"\\e843\"; }\n\n.icon-chevron-right:before { content: \"\\e844\"; }\n\n.icon-chevron-up:before { content: \"\\e845\"; }\n\n.icon-chevrons-down:before { content: \"\\e846\"; }\n\n.icon-chevrons-right:before { content: \"\\e847\"; }\n\n.icon-chevrons-up:before { content: \"\\e848\"; }\n\n.icon-chevrons-left:before { content: \"\\e849\"; }\n\n.icon-circle:before { content: \"\\e84a\"; }\n\n.icon-clipboard:before { content: \"\\e84b\"; }\n\n.icon-chrome:before { content: \"\\e84c\"; }\n\n.icon-clock:before { content: \"\\e84d\"; }\n\n.icon-cloud-lightning:before { content: \"\\e84e\"; }\n\n.icon-cloud-drizzle:before { content: \"\\e84f\"; }\n\n.icon-cloud-rain:before { content: \"\\e850\"; }\n\n.icon-cloud-off:before { content: \"\\e851\"; }\n\n.icon-codepen:before { content: \"\\e852\"; }\n\n.icon-cloud-snow:before { content: \"\\e853\"; }\n\n.icon-compass:before { content: \"\\e854\"; }\n\n.icon-copy:before { content: \"\\e855\"; }\n\n.icon-corner-down-right:before { content: \"\\e856\"; }\n\n.icon-corner-down-left:before { content: \"\\e857\"; }\n\n.icon-corner-left-down:before { content: \"\\e858\"; }\n\n.icon-corner-left-up:before { content: \"\\e859\"; }\n\n.icon-corner-up-left:before { content: \"\\e85a\"; }\n\n.icon-corner-up-right:before { content: \"\\e85b\"; }\n\n.icon-corner-right-down:before { content: \"\\e85c\"; }\n\n.icon-corner-right-up:before { content: \"\\e85d\"; }\n\n.icon-cpu:before { content: \"\\e85e\"; }\n\n.icon-credit-card:before { content: \"\\e85f\"; }\n\n.icon-crosshair:before { content: \"\\e860\"; }\n\n.icon-disc:before { content: \"\\e861\"; }\n\n.icon-delete:before { content: \"\\e862\"; }\n\n.icon-download-cloud:before { content: \"\\e863\"; }\n\n.icon-download:before { content: \"\\e864\"; }\n\n.icon-droplet:before { content: \"\\e865\"; }\n\n.icon-edit-2:before { content: \"\\e866\"; }\n\n.icon-edit:before { content: \"\\e867\"; }\n\n.icon-edit-1:before { content: \"\\e868\"; }\n\n.icon-external-link:before { content: \"\\e869\"; }\n\n.icon-eye:before { content: \"\\e86a\"; }\n\n.icon-feather:before { content: \"\\e86b\"; }\n\n.icon-facebook:before { content: \"\\e86c\"; }\n\n.icon-file-minus:before { content: \"\\e86d\"; }\n\n.icon-eye-off:before { content: \"\\e86e\"; }\n\n.icon-fast-forward:before { content: \"\\e86f\"; }\n\n.icon-file-text:before { content: \"\\e870\"; }\n\n.icon-film:before { content: \"\\e871\"; }\n\n.icon-file:before { content: \"\\e872\"; }\n\n.icon-file-plus:before { content: \"\\e873\"; }\n\n.icon-folder:before { content: \"\\e874\"; }\n\n.icon-filter:before { content: \"\\e875\"; }\n\n.icon-flag:before { content: \"\\e876\"; }\n\n.icon-globe:before { content: \"\\e877\"; }\n\n.icon-grid:before { content: \"\\e878\"; }\n\n.icon-heart:before { content: \"\\e879\"; }\n\n.icon-home:before { content: \"\\e87a\"; }\n\n.icon-github:before { content: \"\\e87b\"; }\n\n.icon-image:before { content: \"\\e87c\"; }\n\n.icon-inbox:before { content: \"\\e87d\"; }\n\n.icon-layers:before { content: \"\\e87e\"; }\n\n.icon-info:before { content: \"\\e87f\"; }\n\n.icon-instagram:before { content: \"\\e880\"; }\n\n.icon-layout:before { content: \"\\e881\"; }\n\n.icon-link-2:before { content: \"\\e882\"; }\n\n.icon-life-buoy:before { content: \"\\e883\"; }\n\n.icon-link:before { content: \"\\e884\"; }\n\n.icon-log-in:before { content: \"\\e885\"; }\n\n.icon-list:before { content: \"\\e886\"; }\n\n.icon-lock:before { content: \"\\e887\"; }\n\n.icon-log-out:before { content: \"\\e888\"; }\n\n.icon-loader:before { content: \"\\e889\"; }\n\n.icon-mail:before { content: \"\\e88a\"; }\n\n.icon-maximize-2:before { content: \"\\e88b\"; }\n\n.icon-map:before { content: \"\\e88c\"; }\n\n.icon-map-pin:before { content: \"\\e88e\"; }\n\n.icon-menu:before { content: \"\\e88f\"; }\n\n.icon-message-circle:before { content: \"\\e890\"; }\n\n.icon-message-square:before { content: \"\\e891\"; }\n\n.icon-minimize-2:before { content: \"\\e892\"; }\n\n.icon-mic-off:before { content: \"\\e893\"; }\n\n.icon-minus-circle:before { content: \"\\e894\"; }\n\n.icon-mic:before { content: \"\\e895\"; }\n\n.icon-minus-square:before { content: \"\\e896\"; }\n\n.icon-minus:before { content: \"\\e897\"; }\n\n.icon-moon:before { content: \"\\e898\"; }\n\n.icon-monitor:before { content: \"\\e899\"; }\n\n.icon-more-vertical:before { content: \"\\e89a\"; }\n\n.icon-more-horizontal:before { content: \"\\e89b\"; }\n\n.icon-move:before { content: \"\\e89c\"; }\n\n.icon-music:before { content: \"\\e89d\"; }\n\n.icon-navigation-2:before { content: \"\\e89e\"; }\n\n.icon-navigation:before { content: \"\\e89f\"; }\n\n.icon-octagon:before { content: \"\\e8a0\"; }\n\n.icon-package:before { content: \"\\e8a1\"; }\n\n.icon-pause-circle:before { content: \"\\e8a2\"; }\n\n.icon-pause:before { content: \"\\e8a3\"; }\n\n.icon-percent:before { content: \"\\e8a4\"; }\n\n.icon-phone-call:before { content: \"\\e8a5\"; }\n\n.icon-phone-forwarded:before { content: \"\\e8a6\"; }\n\n.icon-phone-missed:before { content: \"\\e8a7\"; }\n\n.icon-phone-off:before { content: \"\\e8a8\"; }\n\n.icon-phone-incoming:before { content: \"\\e8a9\"; }\n\n.icon-phone:before { content: \"\\e8aa\"; }\n\n.icon-phone-outgoing:before { content: \"\\e8ab\"; }\n\n.icon-pie-chart:before { content: \"\\e8ac\"; }\n\n.icon-play-circle:before { content: \"\\e8ad\"; }\n\n.icon-play:before { content: \"\\e8ae\"; }\n\n.icon-plus-square:before { content: \"\\e8af\"; }\n\n.icon-plus-circle:before { content: \"\\e8b0\"; }\n\n.icon-plus:before { content: \"\\e8b1\"; }\n\n.icon-pocket:before { content: \"\\e8b2\"; }\n\n.icon-printer:before { content: \"\\e8b3\"; }\n\n.icon-power:before { content: \"\\e8b4\"; }\n\n.icon-radio:before { content: \"\\e8b5\"; }\n\n.icon-repeat:before { content: \"\\e8b6\"; }\n\n.icon-refresh-ccw:before { content: \"\\e8b7\"; }\n\n.icon-rewind:before { content: \"\\e8b8\"; }\n\n.icon-rotate-ccw:before { content: \"\\e8b9\"; }\n\n.icon-refresh-cw:before { content: \"\\e8ba\"; }\n\n.icon-rotate-cw:before { content: \"\\e8bb\"; }\n\n.icon-save:before { content: \"\\e8bc\"; }\n\n.icon-search:before { content: \"\\e8bd\"; }\n\n.icon-server:before { content: \"\\e8be\"; }\n\n.icon-scissors:before { content: \"\\e8bf\"; }\n\n.icon-share-2:before { content: \"\\e8c0\"; }\n\n.icon-share:before { content: \"\\e8c1\"; }\n\n.icon-shield:before { content: \"\\e8c2\"; }\n\n.icon-settings:before { content: \"\\e8c3\"; }\n\n.icon-skip-back:before { content: \"\\e8c4\"; }\n\n.icon-shuffle:before { content: \"\\e8c5\"; }\n\n.icon-sidebar:before { content: \"\\e8c6\"; }\n\n.icon-skip-forward:before { content: \"\\e8c7\"; }\n\n.icon-slack:before { content: \"\\e8c8\"; }\n\n.icon-slash:before { content: \"\\e8c9\"; }\n\n.icon-smartphone:before { content: \"\\e8ca\"; }\n\n.icon-square:before { content: \"\\e8cb\"; }\n\n.icon-speaker:before { content: \"\\e8cc\"; }\n\n.icon-star:before { content: \"\\e8cd\"; }\n\n.icon-stop-circle:before { content: \"\\e8ce\"; }\n\n.icon-sun:before { content: \"\\e8cf\"; }\n\n.icon-sunrise:before { content: \"\\e8d0\"; }\n\n.icon-tablet:before { content: \"\\e8d1\"; }\n\n.icon-tag:before { content: \"\\e8d2\"; }\n\n.icon-sunset:before { content: \"\\e8d3\"; }\n\n.icon-target:before { content: \"\\e8d4\"; }\n\n.icon-thermometer:before { content: \"\\e8d5\"; }\n\n.icon-thumbs-up:before { content: \"\\e8d6\"; }\n\n.icon-thumbs-down:before { content: \"\\e8d7\"; }\n\n.icon-toggle-left:before { content: \"\\e8d8\"; }\n\n.icon-toggle-right:before { content: \"\\e8d9\"; }\n\n.icon-trash-2:before { content: \"\\e8da\"; }\n\n.icon-trash:before { content: \"\\e8db\"; }\n\n.icon-trending-up:before { content: \"\\e8dc\"; }\n\n.icon-trending-down:before { content: \"\\e8dd\"; }\n\n.icon-triangle:before { content: \"\\e8de\"; }\n\n.icon-type:before { content: \"\\e8df\"; }\n\n.icon-twitter:before { content: \"\\e8e0\"; }\n\n.icon-upload:before { content: \"\\e8e1\"; }\n\n.icon-umbrella:before { content: \"\\e8e2\"; }\n\n.icon-upload-cloud:before { content: \"\\e8e3\"; }\n\n.icon-unlock:before { content: \"\\e8e4\"; }\n\n.icon-user-check:before { content: \"\\e8e5\"; }\n\n.icon-user-minus:before { content: \"\\e8e6\"; }\n\n.icon-user-plus:before { content: \"\\e8e7\"; }\n\n.icon-user-x:before { content: \"\\e8e8\"; }\n\n.icon-user:before { content: \"\\e8e9\"; }\n\n.icon-users:before { content: \"\\e8ea\"; }\n\n.icon-video-off:before { content: \"\\e8eb\"; }\n\n.icon-video:before { content: \"\\e8ec\"; }\n\n.icon-voicemail:before { content: \"\\e8ed\"; }\n\n.icon-volume-x:before { content: \"\\e8ee\"; }\n\n.icon-volume-2:before { content: \"\\e8ef\"; }\n\n.icon-volume-1:before { content: \"\\e8f0\"; }\n\n.icon-volume:before { content: \"\\e8f1\"; }\n\n.icon-watch:before { content: \"\\e8f2\"; }\n\n.icon-wifi:before { content: \"\\e8f3\"; }\n\n.icon-x-square:before { content: \"\\e8f4\"; }\n\n.icon-wind:before { content: \"\\e8f5\"; }\n\n.icon-x:before { content: \"\\e8f6\"; }\n\n.icon-x-circle:before { content: \"\\e8f7\"; }\n\n.icon-zap:before { content: \"\\e8f8\"; }\n\n.icon-zoom-in:before { content: \"\\e8f9\"; }\n\n.icon-zoom-out:before { content: \"\\e8fa\"; }\n\n.icon-command:before { content: \"\\e8fb\"; }\n\n.icon-cloud:before { content: \"\\e8fc\"; }\n\n.icon-hash:before { content: \"\\e8fd\"; }\n\n.icon-headphones:before { content: \"\\e8fe\"; }\n\n.icon-underline:before { content: \"\\e8ff\"; }\n\n.icon-italic:before { content: \"\\e900\"; }\n\n.icon-bold:before { content: \"\\e901\"; }\n\n.icon-crop:before { content: \"\\e902\"; }\n\n.icon-help-circle:before { content: \"\\e903\"; }\n\n.icon-paperclip:before { content: \"\\e904\"; }\n\n.icon-shopping-cart:before { content: \"\\e905\"; }\n\n.icon-tv:before { content: \"\\e906\"; }\n\n.icon-wifi-off:before { content: \"\\e907\"; }\n\n.icon-minimize:before { content: \"\\e88d\"; }\n\n.icon-maximize:before { content: \"\\e908\"; }\n\n.icon-gitlab:before { content: \"\\e909\"; }\n\n.icon-sliders:before { content: \"\\e90a\"; }\n\n.icon-star-on:before { content: \"\\e90b\"; }\n\n.icon-heart-on:before { content: \"\\e90c\"; }\n\n.icon-archive:before { content: \"\\e90d\"; }\n\n.icon-arrow-down-circle:before { content: \"\\e90e\"; }\n\n.icon-arrow-up-circle:before { content: \"\\e90f\"; }\n\n.icon-arrow-left-circle:before { content: \"\\e910\"; }\n\n.icon-arrow-right-circle:before { content: \"\\e911\"; }\n\n.icon-bar-chart-line-:before { content: \"\\e912\"; }\n\n.icon-bar-chart-line:before { content: \"\\e913\"; }\n\n.icon-book-open:before { content: \"\\e914\"; }\n\n.icon-code:before { content: \"\\e915\"; }\n\n.icon-database:before { content: \"\\e916\"; }\n\n.icon-dollar-sign:before { content: \"\\e917\"; }\n\n.icon-folder-plus:before { content: \"\\e918\"; }\n\n.icon-gift:before { content: \"\\e919\"; }\n\n.icon-folder-minus:before { content: \"\\e91a\"; }\n\n.icon-git-commit:before { content: \"\\e91b\"; }\n\n.icon-git-branch:before { content: \"\\e91c\"; }\n\n.icon-git-pull-request:before { content: \"\\e91d\"; }\n\n.icon-git-merge:before { content: \"\\e91e\"; }\n\n.icon-linkedin:before { content: \"\\e91f\"; }\n\n.icon-hard-drive:before { content: \"\\e920\"; }\n\n.icon-more-vertical-:before { content: \"\\e921\"; }\n\n.icon-more-horizontal-:before { content: \"\\e922\"; }\n\n.icon-rss:before { content: \"\\e923\"; }\n\n.icon-send:before { content: \"\\e924\"; }\n\n.icon-shield-off:before { content: \"\\e925\"; }\n\n.icon-shopping-bag:before { content: \"\\e926\"; }\n\n.icon-terminal:before { content: \"\\e927\"; }\n\n.icon-truck:before { content: \"\\e928\"; }\n\n.icon-zap-off:before { content: \"\\e929\"; }\n\n.icon-youtube:before { content: \"\\e92a\"; }\n"
  },
  {
    "path": "public/backend/fonts/flag-icon-css/LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2013 Panayiotis Lipiridis\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\nof the Software, and to permit persons to whom the Software is furnished to do\nso, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "public/backend/fonts/flag-icon-css/README.md",
    "content": "flag-icon-css\n=============\n[![npm version](https://badge.fury.io/js/flag-icon-css.svg)](https://badge.fury.io/js/flag-icon-css)\n[![Bower version](https://badge.fury.io/bo/flag-icon-css.svg)](https://badge.fury.io/bo/flag-icon-css)\n\nA collection of all country flags in SVG — plus the CSS for easier integration.\nSee the [demo](http://lipis.github.io/flag-icon-css/).\n\nUsage\n-----\n\nFor using the flags inline with text add the classes `.flag-icon` and\n`.flag-icon-xx` (where `xx` is the\n[ISO 3166-1-alpha-2 code](http://www.iso.org/iso/country_names_and_code_elements)\nof a country) to an empty `<span>`. If you want to have a squared version flag\nthen add the class `flag-icon-squared` as well. Example:\n\n```html\n<span class=\"flag-icon flag-icon-gr\"></span>\n<span class=\"flag-icon flag-icon-gr flag-icon-squared\"></span>\n```\n\nYou could also apply this to any element, but in that case you'll have to use the\n`flag-icon-background` instead of `flag-icon` and you're set. This will add the\ncorrect background with the following CSS properties:\n\n```css\nbackground-size: contain;\nbackground-position: 50%;\nbackground-repeat: no-repeat;\n```\n\nWhich means that the flag is just going to appear in the middle of an element, so\nyou will have to set manually the correct size of 4 by 3 ratio or if it's squared\nadd also the `flag-icon-squared` class.\n\nDevelopment\n-----------\n\nRun the `npm install` to install the dependencies after cloning the project and\nyou'll be able to:\n\nTo watch for changes and live reload if served\n\n```bash\n$ grunt\n```\n\nTo build `*.less` files\n\n```bash\n$ grunt build\n```\n\nTo serve it on `localhost:8000`\n\n```bash\n$ grunt connect\n```\n\nTo have only specific countries in the css file, remove the ones that you don't\nneed from the\n[`flag-icon-list.less`](https://github.com/lipis/flag-icon-css/blob/master/less/flag-icon-list.less)\nfile and build it again.\n\nCredits\n-------\n\nThis project wouldn't exist without the awesome and now deleted collection of\nSVG flags by [koppi](https://github.com/koppi).\n"
  },
  {
    "path": "public/backend/fonts/flag-icon-css/css/flag-icon.css",
    "content": ".flag-icon-background {\n  background-size: contain;\n  background-position: 50%;\n  background-repeat: no-repeat;\n}\n.flag-icon {\n  background-size: contain;\n  background-position: 50%;\n  background-repeat: no-repeat;\n  position: relative;\n  display: inline-block;\n  width: 1.33333333em;\n  line-height: 1em;\n}\n.flag-icon:before {\n  content: \"\\00a0\";\n}\n.flag-icon.flag-icon-squared {\n  width: 1em;\n}\n.flag-icon-ad {\n  background-image: url(../flags/4x3/ad.svg);\n}\n.flag-icon-ad.flag-icon-squared {\n  background-image: url(../flags/1x1/ad.svg);\n}\n.flag-icon-ae {\n  background-image: url(../flags/4x3/ae.svg);\n}\n.flag-icon-ae.flag-icon-squared {\n  background-image: url(../flags/1x1/ae.svg);\n}\n.flag-icon-af {\n  background-image: url(../flags/4x3/af.svg);\n}\n.flag-icon-af.flag-icon-squared {\n  background-image: url(../flags/1x1/af.svg);\n}\n.flag-icon-ag {\n  background-image: url(../flags/4x3/ag.svg);\n}\n.flag-icon-ag.flag-icon-squared {\n  background-image: url(../flags/1x1/ag.svg);\n}\n.flag-icon-ai {\n  background-image: url(../flags/4x3/ai.svg);\n}\n.flag-icon-ai.flag-icon-squared {\n  background-image: url(../flags/1x1/ai.svg);\n}\n.flag-icon-al {\n  background-image: url(../flags/4x3/al.svg);\n}\n.flag-icon-al.flag-icon-squared {\n  background-image: url(../flags/1x1/al.svg);\n}\n.flag-icon-am {\n  background-image: url(../flags/4x3/am.svg);\n}\n.flag-icon-am.flag-icon-squared {\n  background-image: url(../flags/1x1/am.svg);\n}\n.flag-icon-ao {\n  background-image: url(../flags/4x3/ao.svg);\n}\n.flag-icon-ao.flag-icon-squared {\n  background-image: url(../flags/1x1/ao.svg);\n}\n.flag-icon-aq {\n  background-image: url(../flags/4x3/aq.svg);\n}\n.flag-icon-aq.flag-icon-squared {\n  background-image: url(../flags/1x1/aq.svg);\n}\n.flag-icon-ar {\n  background-image: url(../flags/4x3/ar.svg);\n}\n.flag-icon-ar.flag-icon-squared {\n  background-image: url(../flags/1x1/ar.svg);\n}\n.flag-icon-as {\n  background-image: url(../flags/4x3/as.svg);\n}\n.flag-icon-as.flag-icon-squared {\n  background-image: url(../flags/1x1/as.svg);\n}\n.flag-icon-at {\n  background-image: url(../flags/4x3/at.svg);\n}\n.flag-icon-at.flag-icon-squared {\n  background-image: url(../flags/1x1/at.svg);\n}\n.flag-icon-au {\n  background-image: url(../flags/4x3/au.svg);\n}\n.flag-icon-au.flag-icon-squared {\n  background-image: url(../flags/1x1/au.svg);\n}\n.flag-icon-aw {\n  background-image: url(../flags/4x3/aw.svg);\n}\n.flag-icon-aw.flag-icon-squared {\n  background-image: url(../flags/1x1/aw.svg);\n}\n.flag-icon-ax {\n  background-image: url(../flags/4x3/ax.svg);\n}\n.flag-icon-ax.flag-icon-squared {\n  background-image: url(../flags/1x1/ax.svg);\n}\n.flag-icon-az {\n  background-image: url(../flags/4x3/az.svg);\n}\n.flag-icon-az.flag-icon-squared {\n  background-image: url(../flags/1x1/az.svg);\n}\n.flag-icon-ba {\n  background-image: url(../flags/4x3/ba.svg);\n}\n.flag-icon-ba.flag-icon-squared {\n  background-image: url(../flags/1x1/ba.svg);\n}\n.flag-icon-bb {\n  background-image: url(../flags/4x3/bb.svg);\n}\n.flag-icon-bb.flag-icon-squared {\n  background-image: url(../flags/1x1/bb.svg);\n}\n.flag-icon-bd {\n  background-image: url(../flags/4x3/bd.svg);\n}\n.flag-icon-bd.flag-icon-squared {\n  background-image: url(../flags/1x1/bd.svg);\n}\n.flag-icon-be {\n  background-image: url(../flags/4x3/be.svg);\n}\n.flag-icon-be.flag-icon-squared {\n  background-image: url(../flags/1x1/be.svg);\n}\n.flag-icon-bf {\n  background-image: url(../flags/4x3/bf.svg);\n}\n.flag-icon-bf.flag-icon-squared {\n  background-image: url(../flags/1x1/bf.svg);\n}\n.flag-icon-bg {\n  background-image: url(../flags/4x3/bg.svg);\n}\n.flag-icon-bg.flag-icon-squared {\n  background-image: url(../flags/1x1/bg.svg);\n}\n.flag-icon-bh {\n  background-image: url(../flags/4x3/bh.svg);\n}\n.flag-icon-bh.flag-icon-squared {\n  background-image: url(../flags/1x1/bh.svg);\n}\n.flag-icon-bi {\n  background-image: url(../flags/4x3/bi.svg);\n}\n.flag-icon-bi.flag-icon-squared {\n  background-image: url(../flags/1x1/bi.svg);\n}\n.flag-icon-bj {\n  background-image: url(../flags/4x3/bj.svg);\n}\n.flag-icon-bj.flag-icon-squared {\n  background-image: url(../flags/1x1/bj.svg);\n}\n.flag-icon-bl {\n  background-image: url(../flags/4x3/bl.svg);\n}\n.flag-icon-bl.flag-icon-squared {\n  background-image: url(../flags/1x1/bl.svg);\n}\n.flag-icon-bm {\n  background-image: url(../flags/4x3/bm.svg);\n}\n.flag-icon-bm.flag-icon-squared {\n  background-image: url(../flags/1x1/bm.svg);\n}\n.flag-icon-bn {\n  background-image: url(../flags/4x3/bn.svg);\n}\n.flag-icon-bn.flag-icon-squared {\n  background-image: url(../flags/1x1/bn.svg);\n}\n.flag-icon-bo {\n  background-image: url(../flags/4x3/bo.svg);\n}\n.flag-icon-bo.flag-icon-squared {\n  background-image: url(../flags/1x1/bo.svg);\n}\n.flag-icon-bq {\n  background-image: url(../flags/4x3/bq.svg);\n}\n.flag-icon-bq.flag-icon-squared {\n  background-image: url(../flags/1x1/bq.svg);\n}\n.flag-icon-br {\n  background-image: url(../flags/4x3/br.svg);\n}\n.flag-icon-br.flag-icon-squared {\n  background-image: url(../flags/1x1/br.svg);\n}\n.flag-icon-bs {\n  background-image: url(../flags/4x3/bs.svg);\n}\n.flag-icon-bs.flag-icon-squared {\n  background-image: url(../flags/1x1/bs.svg);\n}\n.flag-icon-bt {\n  background-image: url(../flags/4x3/bt.svg);\n}\n.flag-icon-bt.flag-icon-squared {\n  background-image: url(../flags/1x1/bt.svg);\n}\n.flag-icon-bv {\n  background-image: url(../flags/4x3/bv.svg);\n}\n.flag-icon-bv.flag-icon-squared {\n  background-image: url(../flags/1x1/bv.svg);\n}\n.flag-icon-bw {\n  background-image: url(../flags/4x3/bw.svg);\n}\n.flag-icon-bw.flag-icon-squared {\n  background-image: url(../flags/1x1/bw.svg);\n}\n.flag-icon-by {\n  background-image: url(../flags/4x3/by.svg);\n}\n.flag-icon-by.flag-icon-squared {\n  background-image: url(../flags/1x1/by.svg);\n}\n.flag-icon-bz {\n  background-image: url(../flags/4x3/bz.svg);\n}\n.flag-icon-bz.flag-icon-squared {\n  background-image: url(../flags/1x1/bz.svg);\n}\n.flag-icon-ca {\n  background-image: url(../flags/4x3/ca.svg);\n}\n.flag-icon-ca.flag-icon-squared {\n  background-image: url(../flags/1x1/ca.svg);\n}\n.flag-icon-cc {\n  background-image: url(../flags/4x3/cc.svg);\n}\n.flag-icon-cc.flag-icon-squared {\n  background-image: url(../flags/1x1/cc.svg);\n}\n.flag-icon-cd {\n  background-image: url(../flags/4x3/cd.svg);\n}\n.flag-icon-cd.flag-icon-squared {\n  background-image: url(../flags/1x1/cd.svg);\n}\n.flag-icon-cf {\n  background-image: url(../flags/4x3/cf.svg);\n}\n.flag-icon-cf.flag-icon-squared {\n  background-image: url(../flags/1x1/cf.svg);\n}\n.flag-icon-cg {\n  background-image: url(../flags/4x3/cg.svg);\n}\n.flag-icon-cg.flag-icon-squared {\n  background-image: url(../flags/1x1/cg.svg);\n}\n.flag-icon-ch {\n  background-image: url(../flags/4x3/ch.svg);\n}\n.flag-icon-ch.flag-icon-squared {\n  background-image: url(../flags/1x1/ch.svg);\n}\n.flag-icon-ci {\n  background-image: url(../flags/4x3/ci.svg);\n}\n.flag-icon-ci.flag-icon-squared {\n  background-image: url(../flags/1x1/ci.svg);\n}\n.flag-icon-ck {\n  background-image: url(../flags/4x3/ck.svg);\n}\n.flag-icon-ck.flag-icon-squared {\n  background-image: url(../flags/1x1/ck.svg);\n}\n.flag-icon-cl {\n  background-image: url(../flags/4x3/cl.svg);\n}\n.flag-icon-cl.flag-icon-squared {\n  background-image: url(../flags/1x1/cl.svg);\n}\n.flag-icon-cm {\n  background-image: url(../flags/4x3/cm.svg);\n}\n.flag-icon-cm.flag-icon-squared {\n  background-image: url(../flags/1x1/cm.svg);\n}\n.flag-icon-cn {\n  background-image: url(../flags/4x3/cn.svg);\n}\n.flag-icon-cn.flag-icon-squared {\n  background-image: url(../flags/1x1/cn.svg);\n}\n.flag-icon-co {\n  background-image: url(../flags/4x3/co.svg);\n}\n.flag-icon-co.flag-icon-squared {\n  background-image: url(../flags/1x1/co.svg);\n}\n.flag-icon-cr {\n  background-image: url(../flags/4x3/cr.svg);\n}\n.flag-icon-cr.flag-icon-squared {\n  background-image: url(../flags/1x1/cr.svg);\n}\n.flag-icon-cu {\n  background-image: url(../flags/4x3/cu.svg);\n}\n.flag-icon-cu.flag-icon-squared {\n  background-image: url(../flags/1x1/cu.svg);\n}\n.flag-icon-cv {\n  background-image: url(../flags/4x3/cv.svg);\n}\n.flag-icon-cv.flag-icon-squared {\n  background-image: url(../flags/1x1/cv.svg);\n}\n.flag-icon-cw {\n  background-image: url(../flags/4x3/cw.svg);\n}\n.flag-icon-cw.flag-icon-squared {\n  background-image: url(../flags/1x1/cw.svg);\n}\n.flag-icon-cx {\n  background-image: url(../flags/4x3/cx.svg);\n}\n.flag-icon-cx.flag-icon-squared {\n  background-image: url(../flags/1x1/cx.svg);\n}\n.flag-icon-cy {\n  background-image: url(../flags/4x3/cy.svg);\n}\n.flag-icon-cy.flag-icon-squared {\n  background-image: url(../flags/1x1/cy.svg);\n}\n.flag-icon-cz {\n  background-image: url(../flags/4x3/cz.svg);\n}\n.flag-icon-cz.flag-icon-squared {\n  background-image: url(../flags/1x1/cz.svg);\n}\n.flag-icon-de {\n  background-image: url(../flags/4x3/de.svg);\n}\n.flag-icon-de.flag-icon-squared {\n  background-image: url(../flags/1x1/de.svg);\n}\n.flag-icon-dj {\n  background-image: url(../flags/4x3/dj.svg);\n}\n.flag-icon-dj.flag-icon-squared {\n  background-image: url(../flags/1x1/dj.svg);\n}\n.flag-icon-dk {\n  background-image: url(../flags/4x3/dk.svg);\n}\n.flag-icon-dk.flag-icon-squared {\n  background-image: url(../flags/1x1/dk.svg);\n}\n.flag-icon-dm {\n  background-image: url(../flags/4x3/dm.svg);\n}\n.flag-icon-dm.flag-icon-squared {\n  background-image: url(../flags/1x1/dm.svg);\n}\n.flag-icon-do {\n  background-image: url(../flags/4x3/do.svg);\n}\n.flag-icon-do.flag-icon-squared {\n  background-image: url(../flags/1x1/do.svg);\n}\n.flag-icon-dz {\n  background-image: url(../flags/4x3/dz.svg);\n}\n.flag-icon-dz.flag-icon-squared {\n  background-image: url(../flags/1x1/dz.svg);\n}\n.flag-icon-ec {\n  background-image: url(../flags/4x3/ec.svg);\n}\n.flag-icon-ec.flag-icon-squared {\n  background-image: url(../flags/1x1/ec.svg);\n}\n.flag-icon-ee {\n  background-image: url(../flags/4x3/ee.svg);\n}\n.flag-icon-ee.flag-icon-squared {\n  background-image: url(../flags/1x1/ee.svg);\n}\n.flag-icon-eg {\n  background-image: url(../flags/4x3/eg.svg);\n}\n.flag-icon-eg.flag-icon-squared {\n  background-image: url(../flags/1x1/eg.svg);\n}\n.flag-icon-eh {\n  background-image: url(../flags/4x3/eh.svg);\n}\n.flag-icon-eh.flag-icon-squared {\n  background-image: url(../flags/1x1/eh.svg);\n}\n.flag-icon-er {\n  background-image: url(../flags/4x3/er.svg);\n}\n.flag-icon-er.flag-icon-squared {\n  background-image: url(../flags/1x1/er.svg);\n}\n.flag-icon-es {\n  background-image: url(../flags/4x3/es.svg);\n}\n.flag-icon-es.flag-icon-squared {\n  background-image: url(../flags/1x1/es.svg);\n}\n.flag-icon-et {\n  background-image: url(../flags/4x3/et.svg);\n}\n.flag-icon-et.flag-icon-squared {\n  background-image: url(../flags/1x1/et.svg);\n}\n.flag-icon-fi {\n  background-image: url(../flags/4x3/fi.svg);\n}\n.flag-icon-fi.flag-icon-squared {\n  background-image: url(../flags/1x1/fi.svg);\n}\n.flag-icon-fj {\n  background-image: url(../flags/4x3/fj.svg);\n}\n.flag-icon-fj.flag-icon-squared {\n  background-image: url(../flags/1x1/fj.svg);\n}\n.flag-icon-fk {\n  background-image: url(../flags/4x3/fk.svg);\n}\n.flag-icon-fk.flag-icon-squared {\n  background-image: url(../flags/1x1/fk.svg);\n}\n.flag-icon-fm {\n  background-image: url(../flags/4x3/fm.svg);\n}\n.flag-icon-fm.flag-icon-squared {\n  background-image: url(../flags/1x1/fm.svg);\n}\n.flag-icon-fo {\n  background-image: url(../flags/4x3/fo.svg);\n}\n.flag-icon-fo.flag-icon-squared {\n  background-image: url(../flags/1x1/fo.svg);\n}\n.flag-icon-fr {\n  background-image: url(../flags/4x3/fr.svg);\n}\n.flag-icon-fr.flag-icon-squared {\n  background-image: url(../flags/1x1/fr.svg);\n}\n.flag-icon-ga {\n  background-image: url(../flags/4x3/ga.svg);\n}\n.flag-icon-ga.flag-icon-squared {\n  background-image: url(../flags/1x1/ga.svg);\n}\n.flag-icon-gb {\n  background-image: url(../flags/4x3/gb.svg);\n}\n.flag-icon-gb.flag-icon-squared {\n  background-image: url(../flags/1x1/gb.svg);\n}\n.flag-icon-gd {\n  background-image: url(../flags/4x3/gd.svg);\n}\n.flag-icon-gd.flag-icon-squared {\n  background-image: url(../flags/1x1/gd.svg);\n}\n.flag-icon-ge {\n  background-image: url(../flags/4x3/ge.svg);\n}\n.flag-icon-ge.flag-icon-squared {\n  background-image: url(../flags/1x1/ge.svg);\n}\n.flag-icon-gf {\n  background-image: url(../flags/4x3/gf.svg);\n}\n.flag-icon-gf.flag-icon-squared {\n  background-image: url(../flags/1x1/gf.svg);\n}\n.flag-icon-gg {\n  background-image: url(../flags/4x3/gg.svg);\n}\n.flag-icon-gg.flag-icon-squared {\n  background-image: url(../flags/1x1/gg.svg);\n}\n.flag-icon-gh {\n  background-image: url(../flags/4x3/gh.svg);\n}\n.flag-icon-gh.flag-icon-squared {\n  background-image: url(../flags/1x1/gh.svg);\n}\n.flag-icon-gi {\n  background-image: url(../flags/4x3/gi.svg);\n}\n.flag-icon-gi.flag-icon-squared {\n  background-image: url(../flags/1x1/gi.svg);\n}\n.flag-icon-gl {\n  background-image: url(../flags/4x3/gl.svg);\n}\n.flag-icon-gl.flag-icon-squared {\n  background-image: url(../flags/1x1/gl.svg);\n}\n.flag-icon-gm {\n  background-image: url(../flags/4x3/gm.svg);\n}\n.flag-icon-gm.flag-icon-squared {\n  background-image: url(../flags/1x1/gm.svg);\n}\n.flag-icon-gn {\n  background-image: url(../flags/4x3/gn.svg);\n}\n.flag-icon-gn.flag-icon-squared {\n  background-image: url(../flags/1x1/gn.svg);\n}\n.flag-icon-gp {\n  background-image: url(../flags/4x3/gp.svg);\n}\n.flag-icon-gp.flag-icon-squared {\n  background-image: url(../flags/1x1/gp.svg);\n}\n.flag-icon-gq {\n  background-image: url(../flags/4x3/gq.svg);\n}\n.flag-icon-gq.flag-icon-squared {\n  background-image: url(../flags/1x1/gq.svg);\n}\n.flag-icon-gr {\n  background-image: url(../flags/4x3/gr.svg);\n}\n.flag-icon-gr.flag-icon-squared {\n  background-image: url(../flags/1x1/gr.svg);\n}\n.flag-icon-gs {\n  background-image: url(../flags/4x3/gs.svg);\n}\n.flag-icon-gs.flag-icon-squared {\n  background-image: url(../flags/1x1/gs.svg);\n}\n.flag-icon-gt {\n  background-image: url(../flags/4x3/gt.svg);\n}\n.flag-icon-gt.flag-icon-squared {\n  background-image: url(../flags/1x1/gt.svg);\n}\n.flag-icon-gu {\n  background-image: url(../flags/4x3/gu.svg);\n}\n.flag-icon-gu.flag-icon-squared {\n  background-image: url(../flags/1x1/gu.svg);\n}\n.flag-icon-gw {\n  background-image: url(../flags/4x3/gw.svg);\n}\n.flag-icon-gw.flag-icon-squared {\n  background-image: url(../flags/1x1/gw.svg);\n}\n.flag-icon-gy {\n  background-image: url(../flags/4x3/gy.svg);\n}\n.flag-icon-gy.flag-icon-squared {\n  background-image: url(../flags/1x1/gy.svg);\n}\n.flag-icon-hk {\n  background-image: url(../flags/4x3/hk.svg);\n}\n.flag-icon-hk.flag-icon-squared {\n  background-image: url(../flags/1x1/hk.svg);\n}\n.flag-icon-hm {\n  background-image: url(../flags/4x3/hm.svg);\n}\n.flag-icon-hm.flag-icon-squared {\n  background-image: url(../flags/1x1/hm.svg);\n}\n.flag-icon-hn {\n  background-image: url(../flags/4x3/hn.svg);\n}\n.flag-icon-hn.flag-icon-squared {\n  background-image: url(../flags/1x1/hn.svg);\n}\n.flag-icon-hr {\n  background-image: url(../flags/4x3/hr.svg);\n}\n.flag-icon-hr.flag-icon-squared {\n  background-image: url(../flags/1x1/hr.svg);\n}\n.flag-icon-ht {\n  background-image: url(../flags/4x3/ht.svg);\n}\n.flag-icon-ht.flag-icon-squared {\n  background-image: url(../flags/1x1/ht.svg);\n}\n.flag-icon-hu {\n  background-image: url(../flags/4x3/hu.svg);\n}\n.flag-icon-hu.flag-icon-squared {\n  background-image: url(../flags/1x1/hu.svg);\n}\n.flag-icon-id {\n  background-image: url(../flags/4x3/id.svg);\n}\n.flag-icon-id.flag-icon-squared {\n  background-image: url(../flags/1x1/id.svg);\n}\n.flag-icon-ie {\n  background-image: url(../flags/4x3/ie.svg);\n}\n.flag-icon-ie.flag-icon-squared {\n  background-image: url(../flags/1x1/ie.svg);\n}\n.flag-icon-il {\n  background-image: url(../flags/4x3/il.svg);\n}\n.flag-icon-il.flag-icon-squared {\n  background-image: url(../flags/1x1/il.svg);\n}\n.flag-icon-im {\n  background-image: url(../flags/4x3/im.svg);\n}\n.flag-icon-im.flag-icon-squared {\n  background-image: url(../flags/1x1/im.svg);\n}\n.flag-icon-in {\n  background-image: url(../flags/4x3/in.svg);\n}\n.flag-icon-in.flag-icon-squared {\n  background-image: url(../flags/1x1/in.svg);\n}\n.flag-icon-io {\n  background-image: url(../flags/4x3/io.svg);\n}\n.flag-icon-io.flag-icon-squared {\n  background-image: url(../flags/1x1/io.svg);\n}\n.flag-icon-iq {\n  background-image: url(../flags/4x3/iq.svg);\n}\n.flag-icon-iq.flag-icon-squared {\n  background-image: url(../flags/1x1/iq.svg);\n}\n.flag-icon-ir {\n  background-image: url(../flags/4x3/ir.svg);\n}\n.flag-icon-ir.flag-icon-squared {\n  background-image: url(../flags/1x1/ir.svg);\n}\n.flag-icon-is {\n  background-image: url(../flags/4x3/is.svg);\n}\n.flag-icon-is.flag-icon-squared {\n  background-image: url(../flags/1x1/is.svg);\n}\n.flag-icon-it {\n  background-image: url(../flags/4x3/it.svg);\n}\n.flag-icon-it.flag-icon-squared {\n  background-image: url(../flags/1x1/it.svg);\n}\n.flag-icon-je {\n  background-image: url(../flags/4x3/je.svg);\n}\n.flag-icon-je.flag-icon-squared {\n  background-image: url(../flags/1x1/je.svg);\n}\n.flag-icon-jm {\n  background-image: url(../flags/4x3/jm.svg);\n}\n.flag-icon-jm.flag-icon-squared {\n  background-image: url(../flags/1x1/jm.svg);\n}\n.flag-icon-jo {\n  background-image: url(../flags/4x3/jo.svg);\n}\n.flag-icon-jo.flag-icon-squared {\n  background-image: url(../flags/1x1/jo.svg);\n}\n.flag-icon-jp {\n  background-image: url(../flags/4x3/jp.svg);\n}\n.flag-icon-jp.flag-icon-squared {\n  background-image: url(../flags/1x1/jp.svg);\n}\n.flag-icon-ke {\n  background-image: url(../flags/4x3/ke.svg);\n}\n.flag-icon-ke.flag-icon-squared {\n  background-image: url(../flags/1x1/ke.svg);\n}\n.flag-icon-kg {\n  background-image: url(../flags/4x3/kg.svg);\n}\n.flag-icon-kg.flag-icon-squared {\n  background-image: url(../flags/1x1/kg.svg);\n}\n.flag-icon-kh {\n  background-image: url(../flags/4x3/kh.svg);\n}\n.flag-icon-kh.flag-icon-squared {\n  background-image: url(../flags/1x1/kh.svg);\n}\n.flag-icon-ki {\n  background-image: url(../flags/4x3/ki.svg);\n}\n.flag-icon-ki.flag-icon-squared {\n  background-image: url(../flags/1x1/ki.svg);\n}\n.flag-icon-km {\n  background-image: url(../flags/4x3/km.svg);\n}\n.flag-icon-km.flag-icon-squared {\n  background-image: url(../flags/1x1/km.svg);\n}\n.flag-icon-kn {\n  background-image: url(../flags/4x3/kn.svg);\n}\n.flag-icon-kn.flag-icon-squared {\n  background-image: url(../flags/1x1/kn.svg);\n}\n.flag-icon-kp {\n  background-image: url(../flags/4x3/kp.svg);\n}\n.flag-icon-kp.flag-icon-squared {\n  background-image: url(../flags/1x1/kp.svg);\n}\n.flag-icon-kr {\n  background-image: url(../flags/4x3/kr.svg);\n}\n.flag-icon-kr.flag-icon-squared {\n  background-image: url(../flags/1x1/kr.svg);\n}\n.flag-icon-kw {\n  background-image: url(../flags/4x3/kw.svg);\n}\n.flag-icon-kw.flag-icon-squared {\n  background-image: url(../flags/1x1/kw.svg);\n}\n.flag-icon-ky {\n  background-image: url(../flags/4x3/ky.svg);\n}\n.flag-icon-ky.flag-icon-squared {\n  background-image: url(../flags/1x1/ky.svg);\n}\n.flag-icon-kz {\n  background-image: url(../flags/4x3/kz.svg);\n}\n.flag-icon-kz.flag-icon-squared {\n  background-image: url(../flags/1x1/kz.svg);\n}\n.flag-icon-la {\n  background-image: url(../flags/4x3/la.svg);\n}\n.flag-icon-la.flag-icon-squared {\n  background-image: url(../flags/1x1/la.svg);\n}\n.flag-icon-lb {\n  background-image: url(../flags/4x3/lb.svg);\n}\n.flag-icon-lb.flag-icon-squared {\n  background-image: url(../flags/1x1/lb.svg);\n}\n.flag-icon-lc {\n  background-image: url(../flags/4x3/lc.svg);\n}\n.flag-icon-lc.flag-icon-squared {\n  background-image: url(../flags/1x1/lc.svg);\n}\n.flag-icon-li {\n  background-image: url(../flags/4x3/li.svg);\n}\n.flag-icon-li.flag-icon-squared {\n  background-image: url(../flags/1x1/li.svg);\n}\n.flag-icon-lk {\n  background-image: url(../flags/4x3/lk.svg);\n}\n.flag-icon-lk.flag-icon-squared {\n  background-image: url(../flags/1x1/lk.svg);\n}\n.flag-icon-lr {\n  background-image: url(../flags/4x3/lr.svg);\n}\n.flag-icon-lr.flag-icon-squared {\n  background-image: url(../flags/1x1/lr.svg);\n}\n.flag-icon-ls {\n  background-image: url(../flags/4x3/ls.svg);\n}\n.flag-icon-ls.flag-icon-squared {\n  background-image: url(../flags/1x1/ls.svg);\n}\n.flag-icon-lt {\n  background-image: url(../flags/4x3/lt.svg);\n}\n.flag-icon-lt.flag-icon-squared {\n  background-image: url(../flags/1x1/lt.svg);\n}\n.flag-icon-lu {\n  background-image: url(../flags/4x3/lu.svg);\n}\n.flag-icon-lu.flag-icon-squared {\n  background-image: url(../flags/1x1/lu.svg);\n}\n.flag-icon-lv {\n  background-image: url(../flags/4x3/lv.svg);\n}\n.flag-icon-lv.flag-icon-squared {\n  background-image: url(../flags/1x1/lv.svg);\n}\n.flag-icon-ly {\n  background-image: url(../flags/4x3/ly.svg);\n}\n.flag-icon-ly.flag-icon-squared {\n  background-image: url(../flags/1x1/ly.svg);\n}\n.flag-icon-ma {\n  background-image: url(../flags/4x3/ma.svg);\n}\n.flag-icon-ma.flag-icon-squared {\n  background-image: url(../flags/1x1/ma.svg);\n}\n.flag-icon-mc {\n  background-image: url(../flags/4x3/mc.svg);\n}\n.flag-icon-mc.flag-icon-squared {\n  background-image: url(../flags/1x1/mc.svg);\n}\n.flag-icon-md {\n  background-image: url(../flags/4x3/md.svg);\n}\n.flag-icon-md.flag-icon-squared {\n  background-image: url(../flags/1x1/md.svg);\n}\n.flag-icon-me {\n  background-image: url(../flags/4x3/me.svg);\n}\n.flag-icon-me.flag-icon-squared {\n  background-image: url(../flags/1x1/me.svg);\n}\n.flag-icon-mf {\n  background-image: url(../flags/4x3/mf.svg);\n}\n.flag-icon-mf.flag-icon-squared {\n  background-image: url(../flags/1x1/mf.svg);\n}\n.flag-icon-mg {\n  background-image: url(../flags/4x3/mg.svg);\n}\n.flag-icon-mg.flag-icon-squared {\n  background-image: url(../flags/1x1/mg.svg);\n}\n.flag-icon-mh {\n  background-image: url(../flags/4x3/mh.svg);\n}\n.flag-icon-mh.flag-icon-squared {\n  background-image: url(../flags/1x1/mh.svg);\n}\n.flag-icon-mk {\n  background-image: url(../flags/4x3/mk.svg);\n}\n.flag-icon-mk.flag-icon-squared {\n  background-image: url(../flags/1x1/mk.svg);\n}\n.flag-icon-ml {\n  background-image: url(../flags/4x3/ml.svg);\n}\n.flag-icon-ml.flag-icon-squared {\n  background-image: url(../flags/1x1/ml.svg);\n}\n.flag-icon-mm {\n  background-image: url(../flags/4x3/mm.svg);\n}\n.flag-icon-mm.flag-icon-squared {\n  background-image: url(../flags/1x1/mm.svg);\n}\n.flag-icon-mn {\n  background-image: url(../flags/4x3/mn.svg);\n}\n.flag-icon-mn.flag-icon-squared {\n  background-image: url(../flags/1x1/mn.svg);\n}\n.flag-icon-mo {\n  background-image: url(../flags/4x3/mo.svg);\n}\n.flag-icon-mo.flag-icon-squared {\n  background-image: url(../flags/1x1/mo.svg);\n}\n.flag-icon-mp {\n  background-image: url(../flags/4x3/mp.svg);\n}\n.flag-icon-mp.flag-icon-squared {\n  background-image: url(../flags/1x1/mp.svg);\n}\n.flag-icon-mq {\n  background-image: url(../flags/4x3/mq.svg);\n}\n.flag-icon-mq.flag-icon-squared {\n  background-image: url(../flags/1x1/mq.svg);\n}\n.flag-icon-mr {\n  background-image: url(../flags/4x3/mr.svg);\n}\n.flag-icon-mr.flag-icon-squared {\n  background-image: url(../flags/1x1/mr.svg);\n}\n.flag-icon-ms {\n  background-image: url(../flags/4x3/ms.svg);\n}\n.flag-icon-ms.flag-icon-squared {\n  background-image: url(../flags/1x1/ms.svg);\n}\n.flag-icon-mt {\n  background-image: url(../flags/4x3/mt.svg);\n}\n.flag-icon-mt.flag-icon-squared {\n  background-image: url(../flags/1x1/mt.svg);\n}\n.flag-icon-mu {\n  background-image: url(../flags/4x3/mu.svg);\n}\n.flag-icon-mu.flag-icon-squared {\n  background-image: url(../flags/1x1/mu.svg);\n}\n.flag-icon-mv {\n  background-image: url(../flags/4x3/mv.svg);\n}\n.flag-icon-mv.flag-icon-squared {\n  background-image: url(../flags/1x1/mv.svg);\n}\n.flag-icon-mw {\n  background-image: url(../flags/4x3/mw.svg);\n}\n.flag-icon-mw.flag-icon-squared {\n  background-image: url(../flags/1x1/mw.svg);\n}\n.flag-icon-mx {\n  background-image: url(../flags/4x3/mx.svg);\n}\n.flag-icon-mx.flag-icon-squared {\n  background-image: url(../flags/1x1/mx.svg);\n}\n.flag-icon-my {\n  background-image: url(../flags/4x3/my.svg);\n}\n.flag-icon-my.flag-icon-squared {\n  background-image: url(../flags/1x1/my.svg);\n}\n.flag-icon-mz {\n  background-image: url(../flags/4x3/mz.svg);\n}\n.flag-icon-mz.flag-icon-squared {\n  background-image: url(../flags/1x1/mz.svg);\n}\n.flag-icon-na {\n  background-image: url(../flags/4x3/na.svg);\n}\n.flag-icon-na.flag-icon-squared {\n  background-image: url(../flags/1x1/na.svg);\n}\n.flag-icon-nc {\n  background-image: url(../flags/4x3/nc.svg);\n}\n.flag-icon-nc.flag-icon-squared {\n  background-image: url(../flags/1x1/nc.svg);\n}\n.flag-icon-ne {\n  background-image: url(../flags/4x3/ne.svg);\n}\n.flag-icon-ne.flag-icon-squared {\n  background-image: url(../flags/1x1/ne.svg);\n}\n.flag-icon-nf {\n  background-image: url(../flags/4x3/nf.svg);\n}\n.flag-icon-nf.flag-icon-squared {\n  background-image: url(../flags/1x1/nf.svg);\n}\n.flag-icon-ng {\n  background-image: url(../flags/4x3/ng.svg);\n}\n.flag-icon-ng.flag-icon-squared {\n  background-image: url(../flags/1x1/ng.svg);\n}\n.flag-icon-ni {\n  background-image: url(../flags/4x3/ni.svg);\n}\n.flag-icon-ni.flag-icon-squared {\n  background-image: url(../flags/1x1/ni.svg);\n}\n.flag-icon-nl {\n  background-image: url(../flags/4x3/nl.svg);\n}\n.flag-icon-nl.flag-icon-squared {\n  background-image: url(../flags/1x1/nl.svg);\n}\n.flag-icon-no {\n  background-image: url(../flags/4x3/no.svg);\n}\n.flag-icon-no.flag-icon-squared {\n  background-image: url(../flags/1x1/no.svg);\n}\n.flag-icon-np {\n  background-image: url(../flags/4x3/np.svg);\n}\n.flag-icon-np.flag-icon-squared {\n  background-image: url(../flags/1x1/np.svg);\n}\n.flag-icon-nr {\n  background-image: url(../flags/4x3/nr.svg);\n}\n.flag-icon-nr.flag-icon-squared {\n  background-image: url(../flags/1x1/nr.svg);\n}\n.flag-icon-nu {\n  background-image: url(../flags/4x3/nu.svg);\n}\n.flag-icon-nu.flag-icon-squared {\n  background-image: url(../flags/1x1/nu.svg);\n}\n.flag-icon-nz {\n  background-image: url(../flags/4x3/nz.svg);\n}\n.flag-icon-nz.flag-icon-squared {\n  background-image: url(../flags/1x1/nz.svg);\n}\n.flag-icon-om {\n  background-image: url(../flags/4x3/om.svg);\n}\n.flag-icon-om.flag-icon-squared {\n  background-image: url(../flags/1x1/om.svg);\n}\n.flag-icon-pa {\n  background-image: url(../flags/4x3/pa.svg);\n}\n.flag-icon-pa.flag-icon-squared {\n  background-image: url(../flags/1x1/pa.svg);\n}\n.flag-icon-pe {\n  background-image: url(../flags/4x3/pe.svg);\n}\n.flag-icon-pe.flag-icon-squared {\n  background-image: url(../flags/1x1/pe.svg);\n}\n.flag-icon-pf {\n  background-image: url(../flags/4x3/pf.svg);\n}\n.flag-icon-pf.flag-icon-squared {\n  background-image: url(../flags/1x1/pf.svg);\n}\n.flag-icon-pg {\n  background-image: url(../flags/4x3/pg.svg);\n}\n.flag-icon-pg.flag-icon-squared {\n  background-image: url(../flags/1x1/pg.svg);\n}\n.flag-icon-ph {\n  background-image: url(../flags/4x3/ph.svg);\n}\n.flag-icon-ph.flag-icon-squared {\n  background-image: url(../flags/1x1/ph.svg);\n}\n.flag-icon-pk {\n  background-image: url(../flags/4x3/pk.svg);\n}\n.flag-icon-pk.flag-icon-squared {\n  background-image: url(../flags/1x1/pk.svg);\n}\n.flag-icon-pl {\n  background-image: url(../flags/4x3/pl.svg);\n}\n.flag-icon-pl.flag-icon-squared {\n  background-image: url(../flags/1x1/pl.svg);\n}\n.flag-icon-pm {\n  background-image: url(../flags/4x3/pm.svg);\n}\n.flag-icon-pm.flag-icon-squared {\n  background-image: url(../flags/1x1/pm.svg);\n}\n.flag-icon-pn {\n  background-image: url(../flags/4x3/pn.svg);\n}\n.flag-icon-pn.flag-icon-squared {\n  background-image: url(../flags/1x1/pn.svg);\n}\n.flag-icon-pr {\n  background-image: url(../flags/4x3/pr.svg);\n}\n.flag-icon-pr.flag-icon-squared {\n  background-image: url(../flags/1x1/pr.svg);\n}\n.flag-icon-ps {\n  background-image: url(../flags/4x3/ps.svg);\n}\n.flag-icon-ps.flag-icon-squared {\n  background-image: url(../flags/1x1/ps.svg);\n}\n.flag-icon-pt {\n  background-image: url(../flags/4x3/pt.svg);\n}\n.flag-icon-pt.flag-icon-squared {\n  background-image: url(../flags/1x1/pt.svg);\n}\n.flag-icon-pw {\n  background-image: url(../flags/4x3/pw.svg);\n}\n.flag-icon-pw.flag-icon-squared {\n  background-image: url(../flags/1x1/pw.svg);\n}\n.flag-icon-py {\n  background-image: url(../flags/4x3/py.svg);\n}\n.flag-icon-py.flag-icon-squared {\n  background-image: url(../flags/1x1/py.svg);\n}\n.flag-icon-qa {\n  background-image: url(../flags/4x3/qa.svg);\n}\n.flag-icon-qa.flag-icon-squared {\n  background-image: url(../flags/1x1/qa.svg);\n}\n.flag-icon-re {\n  background-image: url(../flags/4x3/re.svg);\n}\n.flag-icon-re.flag-icon-squared {\n  background-image: url(../flags/1x1/re.svg);\n}\n.flag-icon-ro {\n  background-image: url(../flags/4x3/ro.svg);\n}\n.flag-icon-ro.flag-icon-squared {\n  background-image: url(../flags/1x1/ro.svg);\n}\n.flag-icon-rs {\n  background-image: url(../flags/4x3/rs.svg);\n}\n.flag-icon-rs.flag-icon-squared {\n  background-image: url(../flags/1x1/rs.svg);\n}\n.flag-icon-ru {\n  background-image: url(../flags/4x3/ru.svg);\n}\n.flag-icon-ru.flag-icon-squared {\n  background-image: url(../flags/1x1/ru.svg);\n}\n.flag-icon-rw {\n  background-image: url(../flags/4x3/rw.svg);\n}\n.flag-icon-rw.flag-icon-squared {\n  background-image: url(../flags/1x1/rw.svg);\n}\n.flag-icon-sa {\n  background-image: url(../flags/4x3/sa.svg);\n}\n.flag-icon-sa.flag-icon-squared {\n  background-image: url(../flags/1x1/sa.svg);\n}\n.flag-icon-sb {\n  background-image: url(../flags/4x3/sb.svg);\n}\n.flag-icon-sb.flag-icon-squared {\n  background-image: url(../flags/1x1/sb.svg);\n}\n.flag-icon-sc {\n  background-image: url(../flags/4x3/sc.svg);\n}\n.flag-icon-sc.flag-icon-squared {\n  background-image: url(../flags/1x1/sc.svg);\n}\n.flag-icon-sd {\n  background-image: url(../flags/4x3/sd.svg);\n}\n.flag-icon-sd.flag-icon-squared {\n  background-image: url(../flags/1x1/sd.svg);\n}\n.flag-icon-se {\n  background-image: url(../flags/4x3/se.svg);\n}\n.flag-icon-se.flag-icon-squared {\n  background-image: url(../flags/1x1/se.svg);\n}\n.flag-icon-sg {\n  background-image: url(../flags/4x3/sg.svg);\n}\n.flag-icon-sg.flag-icon-squared {\n  background-image: url(../flags/1x1/sg.svg);\n}\n.flag-icon-sh {\n  background-image: url(../flags/4x3/sh.svg);\n}\n.flag-icon-sh.flag-icon-squared {\n  background-image: url(../flags/1x1/sh.svg);\n}\n.flag-icon-si {\n  background-image: url(../flags/4x3/si.svg);\n}\n.flag-icon-si.flag-icon-squared {\n  background-image: url(../flags/1x1/si.svg);\n}\n.flag-icon-sj {\n  background-image: url(../flags/4x3/sj.svg);\n}\n.flag-icon-sj.flag-icon-squared {\n  background-image: url(../flags/1x1/sj.svg);\n}\n.flag-icon-sk {\n  background-image: url(../flags/4x3/sk.svg);\n}\n.flag-icon-sk.flag-icon-squared {\n  background-image: url(../flags/1x1/sk.svg);\n}\n.flag-icon-sl {\n  background-image: url(../flags/4x3/sl.svg);\n}\n.flag-icon-sl.flag-icon-squared {\n  background-image: url(../flags/1x1/sl.svg);\n}\n.flag-icon-sm {\n  background-image: url(../flags/4x3/sm.svg);\n}\n.flag-icon-sm.flag-icon-squared {\n  background-image: url(../flags/1x1/sm.svg);\n}\n.flag-icon-sn {\n  background-image: url(../flags/4x3/sn.svg);\n}\n.flag-icon-sn.flag-icon-squared {\n  background-image: url(../flags/1x1/sn.svg);\n}\n.flag-icon-so {\n  background-image: url(../flags/4x3/so.svg);\n}\n.flag-icon-so.flag-icon-squared {\n  background-image: url(../flags/1x1/so.svg);\n}\n.flag-icon-sr {\n  background-image: url(../flags/4x3/sr.svg);\n}\n.flag-icon-sr.flag-icon-squared {\n  background-image: url(../flags/1x1/sr.svg);\n}\n.flag-icon-ss {\n  background-image: url(../flags/4x3/ss.svg);\n}\n.flag-icon-ss.flag-icon-squared {\n  background-image: url(../flags/1x1/ss.svg);\n}\n.flag-icon-st {\n  background-image: url(../flags/4x3/st.svg);\n}\n.flag-icon-st.flag-icon-squared {\n  background-image: url(../flags/1x1/st.svg);\n}\n.flag-icon-sv {\n  background-image: url(../flags/4x3/sv.svg);\n}\n.flag-icon-sv.flag-icon-squared {\n  background-image: url(../flags/1x1/sv.svg);\n}\n.flag-icon-sx {\n  background-image: url(../flags/4x3/sx.svg);\n}\n.flag-icon-sx.flag-icon-squared {\n  background-image: url(../flags/1x1/sx.svg);\n}\n.flag-icon-sy {\n  background-image: url(../flags/4x3/sy.svg);\n}\n.flag-icon-sy.flag-icon-squared {\n  background-image: url(../flags/1x1/sy.svg);\n}\n.flag-icon-sz {\n  background-image: url(../flags/4x3/sz.svg);\n}\n.flag-icon-sz.flag-icon-squared {\n  background-image: url(../flags/1x1/sz.svg);\n}\n.flag-icon-tc {\n  background-image: url(../flags/4x3/tc.svg);\n}\n.flag-icon-tc.flag-icon-squared {\n  background-image: url(../flags/1x1/tc.svg);\n}\n.flag-icon-td {\n  background-image: url(../flags/4x3/td.svg);\n}\n.flag-icon-td.flag-icon-squared {\n  background-image: url(../flags/1x1/td.svg);\n}\n.flag-icon-tf {\n  background-image: url(../flags/4x3/tf.svg);\n}\n.flag-icon-tf.flag-icon-squared {\n  background-image: url(../flags/1x1/tf.svg);\n}\n.flag-icon-tg {\n  background-image: url(../flags/4x3/tg.svg);\n}\n.flag-icon-tg.flag-icon-squared {\n  background-image: url(../flags/1x1/tg.svg);\n}\n.flag-icon-th {\n  background-image: url(../flags/4x3/th.svg);\n}\n.flag-icon-th.flag-icon-squared {\n  background-image: url(../flags/1x1/th.svg);\n}\n.flag-icon-tj {\n  background-image: url(../flags/4x3/tj.svg);\n}\n.flag-icon-tj.flag-icon-squared {\n  background-image: url(../flags/1x1/tj.svg);\n}\n.flag-icon-tk {\n  background-image: url(../flags/4x3/tk.svg);\n}\n.flag-icon-tk.flag-icon-squared {\n  background-image: url(../flags/1x1/tk.svg);\n}\n.flag-icon-tl {\n  background-image: url(../flags/4x3/tl.svg);\n}\n.flag-icon-tl.flag-icon-squared {\n  background-image: url(../flags/1x1/tl.svg);\n}\n.flag-icon-tm {\n  background-image: url(../flags/4x3/tm.svg);\n}\n.flag-icon-tm.flag-icon-squared {\n  background-image: url(../flags/1x1/tm.svg);\n}\n.flag-icon-tn {\n  background-image: url(../flags/4x3/tn.svg);\n}\n.flag-icon-tn.flag-icon-squared {\n  background-image: url(../flags/1x1/tn.svg);\n}\n.flag-icon-to {\n  background-image: url(../flags/4x3/to.svg);\n}\n.flag-icon-to.flag-icon-squared {\n  background-image: url(../flags/1x1/to.svg);\n}\n.flag-icon-tr {\n  background-image: url(../flags/4x3/tr.svg);\n}\n.flag-icon-tr.flag-icon-squared {\n  background-image: url(../flags/1x1/tr.svg);\n}\n.flag-icon-tt {\n  background-image: url(../flags/4x3/tt.svg);\n}\n.flag-icon-tt.flag-icon-squared {\n  background-image: url(../flags/1x1/tt.svg);\n}\n.flag-icon-tv {\n  background-image: url(../flags/4x3/tv.svg);\n}\n.flag-icon-tv.flag-icon-squared {\n  background-image: url(../flags/1x1/tv.svg);\n}\n.flag-icon-tw {\n  background-image: url(../flags/4x3/tw.svg);\n}\n.flag-icon-tw.flag-icon-squared {\n  background-image: url(../flags/1x1/tw.svg);\n}\n.flag-icon-tz {\n  background-image: url(../flags/4x3/tz.svg);\n}\n.flag-icon-tz.flag-icon-squared {\n  background-image: url(../flags/1x1/tz.svg);\n}\n.flag-icon-ua {\n  background-image: url(../flags/4x3/ua.svg);\n}\n.flag-icon-ua.flag-icon-squared {\n  background-image: url(../flags/1x1/ua.svg);\n}\n.flag-icon-ug {\n  background-image: url(../flags/4x3/ug.svg);\n}\n.flag-icon-ug.flag-icon-squared {\n  background-image: url(../flags/1x1/ug.svg);\n}\n.flag-icon-um {\n  background-image: url(../flags/4x3/um.svg);\n}\n.flag-icon-um.flag-icon-squared {\n  background-image: url(../flags/1x1/um.svg);\n}\n.flag-icon-us {\n  background-image: url(../flags/4x3/us.svg);\n}\n.flag-icon-us.flag-icon-squared {\n  background-image: url(../flags/1x1/us.svg);\n}\n.flag-icon-uy {\n  background-image: url(../flags/4x3/uy.svg);\n}\n.flag-icon-uy.flag-icon-squared {\n  background-image: url(../flags/1x1/uy.svg);\n}\n.flag-icon-uz {\n  background-image: url(../flags/4x3/uz.svg);\n}\n.flag-icon-uz.flag-icon-squared {\n  background-image: url(../flags/1x1/uz.svg);\n}\n.flag-icon-va {\n  background-image: url(../flags/4x3/va.svg);\n}\n.flag-icon-va.flag-icon-squared {\n  background-image: url(../flags/1x1/va.svg);\n}\n.flag-icon-vc {\n  background-image: url(../flags/4x3/vc.svg);\n}\n.flag-icon-vc.flag-icon-squared {\n  background-image: url(../flags/1x1/vc.svg);\n}\n.flag-icon-ve {\n  background-image: url(../flags/4x3/ve.svg);\n}\n.flag-icon-ve.flag-icon-squared {\n  background-image: url(../flags/1x1/ve.svg);\n}\n.flag-icon-vg {\n  background-image: url(../flags/4x3/vg.svg);\n}\n.flag-icon-vg.flag-icon-squared {\n  background-image: url(../flags/1x1/vg.svg);\n}\n.flag-icon-vi {\n  background-image: url(../flags/4x3/vi.svg);\n}\n.flag-icon-vi.flag-icon-squared {\n  background-image: url(../flags/1x1/vi.svg);\n}\n.flag-icon-vn {\n  background-image: url(../flags/4x3/vn.svg);\n}\n.flag-icon-vn.flag-icon-squared {\n  background-image: url(../flags/1x1/vn.svg);\n}\n.flag-icon-vu {\n  background-image: url(../flags/4x3/vu.svg);\n}\n.flag-icon-vu.flag-icon-squared {\n  background-image: url(../flags/1x1/vu.svg);\n}\n.flag-icon-wf {\n  background-image: url(../flags/4x3/wf.svg);\n}\n.flag-icon-wf.flag-icon-squared {\n  background-image: url(../flags/1x1/wf.svg);\n}\n.flag-icon-ws {\n  background-image: url(../flags/4x3/ws.svg);\n}\n.flag-icon-ws.flag-icon-squared {\n  background-image: url(../flags/1x1/ws.svg);\n}\n.flag-icon-ye {\n  background-image: url(../flags/4x3/ye.svg);\n}\n.flag-icon-ye.flag-icon-squared {\n  background-image: url(../flags/1x1/ye.svg);\n}\n.flag-icon-yt {\n  background-image: url(../flags/4x3/yt.svg);\n}\n.flag-icon-yt.flag-icon-squared {\n  background-image: url(../flags/1x1/yt.svg);\n}\n.flag-icon-za {\n  background-image: url(../flags/4x3/za.svg);\n}\n.flag-icon-za.flag-icon-squared {\n  background-image: url(../flags/1x1/za.svg);\n}\n.flag-icon-zm {\n  background-image: url(../flags/4x3/zm.svg);\n}\n.flag-icon-zm.flag-icon-squared {\n  background-image: url(../flags/1x1/zm.svg);\n}\n.flag-icon-zw {\n  background-image: url(../flags/4x3/zw.svg);\n}\n.flag-icon-zw.flag-icon-squared {\n  background-image: url(../flags/1x1/zw.svg);\n}\n.flag-icon-eu {\n  background-image: url(../flags/4x3/eu.svg);\n}\n.flag-icon-eu.flag-icon-squared {\n  background-image: url(../flags/1x1/eu.svg);\n}\n.flag-icon-gb-eng {\n  background-image: url(../flags/4x3/gb-eng.svg);\n}\n.flag-icon-gb-eng.flag-icon-squared {\n  background-image: url(../flags/1x1/gb-eng.svg);\n}\n.flag-icon-gb-sct {\n  background-image: url(../flags/4x3/gb-sct.svg);\n}\n.flag-icon-gb-sct.flag-icon-squared {\n  background-image: url(../flags/1x1/gb-sct.svg);\n}\n.flag-icon-gb-wls {\n  background-image: url(../flags/4x3/gb-wls.svg);\n}\n.flag-icon-gb-wls.flag-icon-squared {\n  background-image: url(../flags/1x1/gb-wls.svg);\n}\n"
  },
  {
    "path": "public/backend/fonts/flag-icon-css/sass/flag-icon-base.scss",
    "content": "@mixin flag-icon-background {\n  background-size: contain;\n  background-position: 50%;\n  background-repeat: no-repeat;\n}\n\n.flag-icon {\n  @include flag-icon-background();\n  position: relative;\n  display: inline-block;\n  width: (4 / 3) * 1em;\n  line-height: 1em;\n  &:before {\n    content: '\\00a0';\n  }\n  &.flag-icon-squared {\n    width: 1em;\n  }\n}\n\n@mixin flag-icon($country) {\n  .flag-icon-#{$country} {\n    background-image: url(#{$flag-icon-css-path}#{$flag-icon-rect-path}/#{$country}.svg);\n    &.flag-icon-squared {\n      background-image: url(#{$flag-icon-css-path}#{$flag-icon-square-path}/#{$country}.svg);\n    }\n  }\n}\n"
  },
  {
    "path": "public/backend/fonts/flag-icon-css/sass/flag-icon-list.scss",
    "content": "@include flag-icon(ad);\n@include flag-icon(ae);\n@include flag-icon(af);\n@include flag-icon(ag);\n@include flag-icon(ai);\n@include flag-icon(al);\n@include flag-icon(am);\n@include flag-icon(ao);\n@include flag-icon(aq);\n@include flag-icon(ar);\n@include flag-icon(as);\n@include flag-icon(at);\n@include flag-icon(au);\n@include flag-icon(aw);\n@include flag-icon(ax);\n@include flag-icon(az);\n@include flag-icon(ba);\n@include flag-icon(bb);\n@include flag-icon(bd);\n@include flag-icon(be);\n@include flag-icon(bf);\n@include flag-icon(bg);\n@include flag-icon(bh);\n@include flag-icon(bi);\n@include flag-icon(bj);\n@include flag-icon(bl);\n@include flag-icon(bm);\n@include flag-icon(bn);\n@include flag-icon(bo);\n@include flag-icon(bq);\n@include flag-icon(br);\n@include flag-icon(bs);\n@include flag-icon(bt);\n@include flag-icon(bv);\n@include flag-icon(bw);\n@include flag-icon(by);\n@include flag-icon(bz);\n@include flag-icon(ca);\n@include flag-icon(cc);\n@include flag-icon(cd);\n@include flag-icon(cf);\n@include flag-icon(cg);\n@include flag-icon(ch);\n@include flag-icon(ci);\n@include flag-icon(ck);\n@include flag-icon(cl);\n@include flag-icon(cm);\n@include flag-icon(cn);\n@include flag-icon(co);\n@include flag-icon(cr);\n@include flag-icon(cu);\n@include flag-icon(cv);\n@include flag-icon(cw);\n@include flag-icon(cx);\n@include flag-icon(cy);\n@include flag-icon(cz);\n@include flag-icon(de);\n@include flag-icon(dj);\n@include flag-icon(dk);\n@include flag-icon(dm);\n@include flag-icon(do);\n@include flag-icon(dz);\n@include flag-icon(ec);\n@include flag-icon(ee);\n@include flag-icon(eg);\n@include flag-icon(eh);\n@include flag-icon(er);\n@include flag-icon(es);\n@include flag-icon(et);\n@include flag-icon(fi);\n@include flag-icon(fj);\n@include flag-icon(fk);\n@include flag-icon(fm);\n@include flag-icon(fo);\n@include flag-icon(fr);\n@include flag-icon(ga);\n@include flag-icon(gb);\n@include flag-icon(gd);\n@include flag-icon(ge);\n@include flag-icon(gf);\n@include flag-icon(gg);\n@include flag-icon(gh);\n@include flag-icon(gi);\n@include flag-icon(gl);\n@include flag-icon(gm);\n@include flag-icon(gn);\n@include flag-icon(gp);\n@include flag-icon(gq);\n@include flag-icon(gr);\n@include flag-icon(gs);\n@include flag-icon(gt);\n@include flag-icon(gu);\n@include flag-icon(gw);\n@include flag-icon(gy);\n@include flag-icon(hk);\n@include flag-icon(hm);\n@include flag-icon(hn);\n@include flag-icon(hr);\n@include flag-icon(ht);\n@include flag-icon(hu);\n@include flag-icon(id);\n@include flag-icon(ie);\n@include flag-icon(il);\n@include flag-icon(im);\n@include flag-icon(in);\n@include flag-icon(io);\n@include flag-icon(iq);\n@include flag-icon(ir);\n@include flag-icon(is);\n@include flag-icon(it);\n@include flag-icon(je);\n@include flag-icon(jm);\n@include flag-icon(jo);\n@include flag-icon(jp);\n@include flag-icon(ke);\n@include flag-icon(kg);\n@include flag-icon(kh);\n@include flag-icon(ki);\n@include flag-icon(km);\n@include flag-icon(kn);\n@include flag-icon(kp);\n@include flag-icon(kr);\n@include flag-icon(kw);\n@include flag-icon(ky);\n@include flag-icon(kz);\n@include flag-icon(la);\n@include flag-icon(lb);\n@include flag-icon(lc);\n@include flag-icon(li);\n@include flag-icon(lk);\n@include flag-icon(lr);\n@include flag-icon(ls);\n@include flag-icon(lt);\n@include flag-icon(lu);\n@include flag-icon(lv);\n@include flag-icon(ly);\n@include flag-icon(ma);\n@include flag-icon(mc);\n@include flag-icon(md);\n@include flag-icon(me);\n@include flag-icon(mf);\n@include flag-icon(mg);\n@include flag-icon(mh);\n@include flag-icon(mk);\n@include flag-icon(ml);\n@include flag-icon(mm);\n@include flag-icon(mn);\n@include flag-icon(mo);\n@include flag-icon(mp);\n@include flag-icon(mq);\n@include flag-icon(mr);\n@include flag-icon(ms);\n@include flag-icon(mt);\n@include flag-icon(mu);\n@include flag-icon(mv);\n@include flag-icon(mw);\n@include flag-icon(mx);\n@include flag-icon(my);\n@include flag-icon(mz);\n@include flag-icon(na);\n@include flag-icon(nc);\n@include flag-icon(ne);\n@include flag-icon(nf);\n@include flag-icon(ng);\n@include flag-icon(ni);\n@include flag-icon(nl);\n@include flag-icon(no);\n@include flag-icon(np);\n@include flag-icon(nr);\n@include flag-icon(nu);\n@include flag-icon(nz);\n@include flag-icon(om);\n@include flag-icon(pa);\n@include flag-icon(pe);\n@include flag-icon(pf);\n@include flag-icon(pg);\n@include flag-icon(ph);\n@include flag-icon(pk);\n@include flag-icon(pl);\n@include flag-icon(pm);\n@include flag-icon(pn);\n@include flag-icon(pr);\n@include flag-icon(ps);\n@include flag-icon(pt);\n@include flag-icon(pw);\n@include flag-icon(py);\n@include flag-icon(qa);\n@include flag-icon(re);\n@include flag-icon(ro);\n@include flag-icon(rs);\n@include flag-icon(ru);\n@include flag-icon(rw);\n@include flag-icon(sa);\n@include flag-icon(sb);\n@include flag-icon(sc);\n@include flag-icon(sd);\n@include flag-icon(se);\n@include flag-icon(sg);\n@include flag-icon(sh);\n@include flag-icon(si);\n@include flag-icon(sj);\n@include flag-icon(sk);\n@include flag-icon(sl);\n@include flag-icon(sm);\n@include flag-icon(sn);\n@include flag-icon(so);\n@include flag-icon(sr);\n@include flag-icon(ss);\n@include flag-icon(st);\n@include flag-icon(sv);\n@include flag-icon(sx);\n@include flag-icon(sy);\n@include flag-icon(sz);\n@include flag-icon(tc);\n@include flag-icon(td);\n@include flag-icon(tf);\n@include flag-icon(tg);\n@include flag-icon(th);\n@include flag-icon(tj);\n@include flag-icon(tk);\n@include flag-icon(tl);\n@include flag-icon(tm);\n@include flag-icon(tn);\n@include flag-icon(to);\n@include flag-icon(tr);\n@include flag-icon(tt);\n@include flag-icon(tv);\n@include flag-icon(tw);\n@include flag-icon(tz);\n@include flag-icon(ua);\n@include flag-icon(ug);\n@include flag-icon(um);\n@include flag-icon(us);\n@include flag-icon(uy);\n@include flag-icon(uz);\n@include flag-icon(va);\n@include flag-icon(vc);\n@include flag-icon(ve);\n@include flag-icon(vg);\n@include flag-icon(vi);\n@include flag-icon(vn);\n@include flag-icon(vu);\n@include flag-icon(wf);\n@include flag-icon(ws);\n@include flag-icon(ye);\n@include flag-icon(yt);\n@include flag-icon(za);\n@include flag-icon(zm);\n@include flag-icon(zw);\n"
  },
  {
    "path": "public/backend/fonts/flag-icon-css/sass/flag-icon-more.scss",
    "content": "@include flag-icon(eu);\n@include flag-icon(gb-eng);\n@include flag-icon(gb-sct);\n@include flag-icon(gb-wls);\n"
  },
  {
    "path": "public/backend/fonts/flag-icon-css/sass/flag-icon.scss",
    "content": "@import \"variables\";\n@import \"flag-icon-base\";\n@import \"flag-icon-list\";\n@import \"flag-icon-more\";\n"
  },
  {
    "path": "public/backend/fonts/flag-icon-css/sass/variables.scss",
    "content": "$flag-icon-css-path: '../flags' !default;\n$flag-icon-rect-path: '/4x3' !default;\n$flag-icon-square-path: '/1x1' !default;\n"
  },
  {
    "path": "public/backend/fonts/font-awesome/css/font-awesome.css",
    "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/* FONT PATH\n * -------------------------- */\n@font-face {\n  font-family: 'FontAwesome';\n  src: url('../fonts/fontawesome-webfont.eot?v=4.7.0');\n  src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'), url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');\n  font-weight: normal;\n  font-style: normal;\n}\n.fa {\n  display: inline-block;\n  font: normal normal normal 14px/1 FontAwesome;\n  font-size: inherit;\n  text-rendering: auto;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n/* makes the font 33% larger relative to the icon container */\n.fa-lg {\n  font-size: 1.33333333em;\n  line-height: 0.75em;\n  vertical-align: -15%;\n}\n.fa-2x {\n  font-size: 2em;\n}\n.fa-3x {\n  font-size: 3em;\n}\n.fa-4x {\n  font-size: 4em;\n}\n.fa-5x {\n  font-size: 5em;\n}\n.fa-fw {\n  width: 1.28571429em;\n  text-align: center;\n}\n.fa-ul {\n  padding-left: 0;\n  margin-left: 2.14285714em;\n  list-style-type: none;\n}\n.fa-ul > li {\n  position: relative;\n}\n.fa-li {\n  position: absolute;\n  left: -2.14285714em;\n  width: 2.14285714em;\n  top: 0.14285714em;\n  text-align: center;\n}\n.fa-li.fa-lg {\n  left: -1.85714286em;\n}\n.fa-border {\n  padding: .2em .25em .15em;\n  border: solid 0.08em #eeeeee;\n  border-radius: .1em;\n}\n.fa-pull-left {\n  float: left;\n}\n.fa-pull-right {\n  float: right;\n}\n.fa.fa-pull-left {\n  margin-right: .3em;\n}\n.fa.fa-pull-right {\n  margin-left: .3em;\n}\n/* Deprecated as of 4.4.0 */\n.pull-right {\n  float: right;\n}\n.pull-left {\n  float: left;\n}\n.fa.pull-left {\n  margin-right: .3em;\n}\n.fa.pull-right {\n  margin-left: .3em;\n}\n.fa-spin {\n  -webkit-animation: fa-spin 2s infinite linear;\n  animation: fa-spin 2s infinite linear;\n}\n.fa-pulse {\n  -webkit-animation: fa-spin 1s infinite steps(8);\n  animation: fa-spin 1s infinite steps(8);\n}\n@-webkit-keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(359deg);\n    transform: rotate(359deg);\n  }\n}\n@keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(359deg);\n    transform: rotate(359deg);\n  }\n}\n.fa-rotate-90 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\";\n  -webkit-transform: rotate(90deg);\n  -ms-transform: rotate(90deg);\n  transform: rotate(90deg);\n}\n.fa-rotate-180 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\";\n  -webkit-transform: rotate(180deg);\n  -ms-transform: rotate(180deg);\n  transform: rotate(180deg);\n}\n.fa-rotate-270 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\";\n  -webkit-transform: rotate(270deg);\n  -ms-transform: rotate(270deg);\n  transform: rotate(270deg);\n}\n.fa-flip-horizontal {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\";\n  -webkit-transform: scale(-1, 1);\n  -ms-transform: scale(-1, 1);\n  transform: scale(-1, 1);\n}\n.fa-flip-vertical {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n  -webkit-transform: scale(1, -1);\n  -ms-transform: scale(1, -1);\n  transform: scale(1, -1);\n}\n:root .fa-rotate-90,\n:root .fa-rotate-180,\n:root .fa-rotate-270,\n:root .fa-flip-horizontal,\n:root .fa-flip-vertical {\n  filter: none;\n}\n.fa-stack {\n  position: relative;\n  display: inline-block;\n  width: 2em;\n  height: 2em;\n  line-height: 2em;\n  vertical-align: middle;\n}\n.fa-stack-1x,\n.fa-stack-2x {\n  position: absolute;\n  left: 0;\n  width: 100%;\n  text-align: center;\n}\n.fa-stack-1x {\n  line-height: inherit;\n}\n.fa-stack-2x {\n  font-size: 2em;\n}\n.fa-inverse {\n  color: #ffffff;\n}\n/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\n   readers do not read off random characters that represent icons */\n.fa-glass:before {\n  content: \"\\f000\";\n}\n.fa-music:before {\n  content: \"\\f001\";\n}\n.fa-search:before {\n  content: \"\\f002\";\n}\n.fa-envelope-o:before {\n  content: \"\\f003\";\n}\n.fa-heart:before {\n  content: \"\\f004\";\n}\n.fa-star:before {\n  content: \"\\f005\";\n}\n.fa-star-o:before {\n  content: \"\\f006\";\n}\n.fa-user:before {\n  content: \"\\f007\";\n}\n.fa-film:before {\n  content: \"\\f008\";\n}\n.fa-th-large:before {\n  content: \"\\f009\";\n}\n.fa-th:before {\n  content: \"\\f00a\";\n}\n.fa-th-list:before {\n  content: \"\\f00b\";\n}\n.fa-check:before {\n  content: \"\\f00c\";\n}\n.fa-remove:before,\n.fa-close:before,\n.fa-times:before {\n  content: \"\\f00d\";\n}\n.fa-search-plus:before {\n  content: \"\\f00e\";\n}\n.fa-search-minus:before {\n  content: \"\\f010\";\n}\n.fa-power-off:before {\n  content: \"\\f011\";\n}\n.fa-signal:before {\n  content: \"\\f012\";\n}\n.fa-gear:before,\n.fa-cog:before {\n  content: \"\\f013\";\n}\n.fa-trash-o:before {\n  content: \"\\f014\";\n}\n.fa-home:before {\n  content: \"\\f015\";\n}\n.fa-file-o:before {\n  content: \"\\f016\";\n}\n.fa-clock-o:before {\n  content: \"\\f017\";\n}\n.fa-road:before {\n  content: \"\\f018\";\n}\n.fa-download:before {\n  content: \"\\f019\";\n}\n.fa-arrow-circle-o-down:before {\n  content: \"\\f01a\";\n}\n.fa-arrow-circle-o-up:before {\n  content: \"\\f01b\";\n}\n.fa-inbox:before {\n  content: \"\\f01c\";\n}\n.fa-play-circle-o:before {\n  content: \"\\f01d\";\n}\n.fa-rotate-right:before,\n.fa-repeat:before {\n  content: \"\\f01e\";\n}\n.fa-refresh:before {\n  content: \"\\f021\";\n}\n.fa-list-alt:before {\n  content: \"\\f022\";\n}\n.fa-lock:before {\n  content: \"\\f023\";\n}\n.fa-flag:before {\n  content: \"\\f024\";\n}\n.fa-headphones:before {\n  content: \"\\f025\";\n}\n.fa-volume-off:before {\n  content: \"\\f026\";\n}\n.fa-volume-down:before {\n  content: \"\\f027\";\n}\n.fa-volume-up:before {\n  content: \"\\f028\";\n}\n.fa-qrcode:before {\n  content: \"\\f029\";\n}\n.fa-barcode:before {\n  content: \"\\f02a\";\n}\n.fa-tag:before {\n  content: \"\\f02b\";\n}\n.fa-tags:before {\n  content: \"\\f02c\";\n}\n.fa-book:before {\n  content: \"\\f02d\";\n}\n.fa-bookmark:before {\n  content: \"\\f02e\";\n}\n.fa-print:before {\n  content: \"\\f02f\";\n}\n.fa-camera:before {\n  content: \"\\f030\";\n}\n.fa-font:before {\n  content: \"\\f031\";\n}\n.fa-bold:before {\n  content: \"\\f032\";\n}\n.fa-italic:before {\n  content: \"\\f033\";\n}\n.fa-text-height:before {\n  content: \"\\f034\";\n}\n.fa-text-width:before {\n  content: \"\\f035\";\n}\n.fa-align-left:before {\n  content: \"\\f036\";\n}\n.fa-align-center:before {\n  content: \"\\f037\";\n}\n.fa-align-right:before {\n  content: \"\\f038\";\n}\n.fa-align-justify:before {\n  content: \"\\f039\";\n}\n.fa-list:before {\n  content: \"\\f03a\";\n}\n.fa-dedent:before,\n.fa-outdent:before {\n  content: \"\\f03b\";\n}\n.fa-indent:before {\n  content: \"\\f03c\";\n}\n.fa-video-camera:before {\n  content: \"\\f03d\";\n}\n.fa-photo:before,\n.fa-image:before,\n.fa-picture-o:before {\n  content: \"\\f03e\";\n}\n.fa-pencil:before {\n  content: \"\\f040\";\n}\n.fa-map-marker:before {\n  content: \"\\f041\";\n}\n.fa-adjust:before {\n  content: \"\\f042\";\n}\n.fa-tint:before {\n  content: \"\\f043\";\n}\n.fa-edit:before,\n.fa-pencil-square-o:before {\n  content: \"\\f044\";\n}\n.fa-share-square-o:before {\n  content: \"\\f045\";\n}\n.fa-check-square-o:before {\n  content: \"\\f046\";\n}\n.fa-arrows:before {\n  content: \"\\f047\";\n}\n.fa-step-backward:before {\n  content: \"\\f048\";\n}\n.fa-fast-backward:before {\n  content: \"\\f049\";\n}\n.fa-backward:before {\n  content: \"\\f04a\";\n}\n.fa-play:before {\n  content: \"\\f04b\";\n}\n.fa-pause:before {\n  content: \"\\f04c\";\n}\n.fa-stop:before {\n  content: \"\\f04d\";\n}\n.fa-forward:before {\n  content: \"\\f04e\";\n}\n.fa-fast-forward:before {\n  content: \"\\f050\";\n}\n.fa-step-forward:before {\n  content: \"\\f051\";\n}\n.fa-eject:before {\n  content: \"\\f052\";\n}\n.fa-chevron-left:before {\n  content: \"\\f053\";\n}\n.fa-chevron-right:before {\n  content: \"\\f054\";\n}\n.fa-plus-circle:before {\n  content: \"\\f055\";\n}\n.fa-minus-circle:before {\n  content: \"\\f056\";\n}\n.fa-times-circle:before {\n  content: \"\\f057\";\n}\n.fa-check-circle:before {\n  content: \"\\f058\";\n}\n.fa-question-circle:before {\n  content: \"\\f059\";\n}\n.fa-info-circle:before {\n  content: \"\\f05a\";\n}\n.fa-crosshairs:before {\n  content: \"\\f05b\";\n}\n.fa-times-circle-o:before {\n  content: \"\\f05c\";\n}\n.fa-check-circle-o:before {\n  content: \"\\f05d\";\n}\n.fa-ban:before {\n  content: \"\\f05e\";\n}\n.fa-arrow-left:before {\n  content: \"\\f060\";\n}\n.fa-arrow-right:before {\n  content: \"\\f061\";\n}\n.fa-arrow-up:before {\n  content: \"\\f062\";\n}\n.fa-arrow-down:before {\n  content: \"\\f063\";\n}\n.fa-mail-forward:before,\n.fa-share:before {\n  content: \"\\f064\";\n}\n.fa-expand:before {\n  content: \"\\f065\";\n}\n.fa-compress:before {\n  content: \"\\f066\";\n}\n.fa-plus:before {\n  content: \"\\f067\";\n}\n.fa-minus:before {\n  content: \"\\f068\";\n}\n.fa-asterisk:before {\n  content: \"\\f069\";\n}\n.fa-exclamation-circle:before {\n  content: \"\\f06a\";\n}\n.fa-gift:before {\n  content: \"\\f06b\";\n}\n.fa-leaf:before {\n  content: \"\\f06c\";\n}\n.fa-fire:before {\n  content: \"\\f06d\";\n}\n.fa-eye:before {\n  content: \"\\f06e\";\n}\n.fa-eye-slash:before {\n  content: \"\\f070\";\n}\n.fa-warning:before,\n.fa-exclamation-triangle:before {\n  content: \"\\f071\";\n}\n.fa-plane:before {\n  content: \"\\f072\";\n}\n.fa-calendar:before {\n  content: \"\\f073\";\n}\n.fa-random:before {\n  content: \"\\f074\";\n}\n.fa-comment:before {\n  content: \"\\f075\";\n}\n.fa-magnet:before {\n  content: \"\\f076\";\n}\n.fa-chevron-up:before {\n  content: \"\\f077\";\n}\n.fa-chevron-down:before {\n  content: \"\\f078\";\n}\n.fa-retweet:before {\n  content: \"\\f079\";\n}\n.fa-shopping-cart:before {\n  content: \"\\f07a\";\n}\n.fa-folder:before {\n  content: \"\\f07b\";\n}\n.fa-folder-open:before {\n  content: \"\\f07c\";\n}\n.fa-arrows-v:before {\n  content: \"\\f07d\";\n}\n.fa-arrows-h:before {\n  content: \"\\f07e\";\n}\n.fa-bar-chart-o:before,\n.fa-bar-chart:before {\n  content: \"\\f080\";\n}\n.fa-twitter-square:before {\n  content: \"\\f081\";\n}\n.fa-facebook-square:before {\n  content: \"\\f082\";\n}\n.fa-camera-retro:before {\n  content: \"\\f083\";\n}\n.fa-key:before {\n  content: \"\\f084\";\n}\n.fa-gears:before,\n.fa-cogs:before {\n  content: \"\\f085\";\n}\n.fa-comments:before {\n  content: \"\\f086\";\n}\n.fa-thumbs-o-up:before {\n  content: \"\\f087\";\n}\n.fa-thumbs-o-down:before {\n  content: \"\\f088\";\n}\n.fa-star-half:before {\n  content: \"\\f089\";\n}\n.fa-heart-o:before {\n  content: \"\\f08a\";\n}\n.fa-sign-out:before {\n  content: \"\\f08b\";\n}\n.fa-linkedin-square:before {\n  content: \"\\f08c\";\n}\n.fa-thumb-tack:before {\n  content: \"\\f08d\";\n}\n.fa-external-link:before {\n  content: \"\\f08e\";\n}\n.fa-sign-in:before {\n  content: \"\\f090\";\n}\n.fa-trophy:before {\n  content: \"\\f091\";\n}\n.fa-github-square:before {\n  content: \"\\f092\";\n}\n.fa-upload:before {\n  content: \"\\f093\";\n}\n.fa-lemon-o:before {\n  content: \"\\f094\";\n}\n.fa-phone:before {\n  content: \"\\f095\";\n}\n.fa-square-o:before {\n  content: \"\\f096\";\n}\n.fa-bookmark-o:before {\n  content: \"\\f097\";\n}\n.fa-phone-square:before {\n  content: \"\\f098\";\n}\n.fa-twitter:before {\n  content: \"\\f099\";\n}\n.fa-facebook-f:before,\n.fa-facebook:before {\n  content: \"\\f09a\";\n}\n.fa-github:before {\n  content: \"\\f09b\";\n}\n.fa-unlock:before {\n  content: \"\\f09c\";\n}\n.fa-credit-card:before {\n  content: \"\\f09d\";\n}\n.fa-feed:before,\n.fa-rss:before {\n  content: \"\\f09e\";\n}\n.fa-hdd-o:before {\n  content: \"\\f0a0\";\n}\n.fa-bullhorn:before {\n  content: \"\\f0a1\";\n}\n.fa-bell:before {\n  content: \"\\f0f3\";\n}\n.fa-certificate:before {\n  content: \"\\f0a3\";\n}\n.fa-hand-o-right:before {\n  content: \"\\f0a4\";\n}\n.fa-hand-o-left:before {\n  content: \"\\f0a5\";\n}\n.fa-hand-o-up:before {\n  content: \"\\f0a6\";\n}\n.fa-hand-o-down:before {\n  content: \"\\f0a7\";\n}\n.fa-arrow-circle-left:before {\n  content: \"\\f0a8\";\n}\n.fa-arrow-circle-right:before {\n  content: \"\\f0a9\";\n}\n.fa-arrow-circle-up:before {\n  content: \"\\f0aa\";\n}\n.fa-arrow-circle-down:before {\n  content: \"\\f0ab\";\n}\n.fa-globe:before {\n  content: \"\\f0ac\";\n}\n.fa-wrench:before {\n  content: \"\\f0ad\";\n}\n.fa-tasks:before {\n  content: \"\\f0ae\";\n}\n.fa-filter:before {\n  content: \"\\f0b0\";\n}\n.fa-briefcase:before {\n  content: \"\\f0b1\";\n}\n.fa-arrows-alt:before {\n  content: \"\\f0b2\";\n}\n.fa-group:before,\n.fa-users:before {\n  content: \"\\f0c0\";\n}\n.fa-chain:before,\n.fa-link:before {\n  content: \"\\f0c1\";\n}\n.fa-cloud:before {\n  content: \"\\f0c2\";\n}\n.fa-flask:before {\n  content: \"\\f0c3\";\n}\n.fa-cut:before,\n.fa-scissors:before {\n  content: \"\\f0c4\";\n}\n.fa-copy:before,\n.fa-files-o:before {\n  content: \"\\f0c5\";\n}\n.fa-paperclip:before {\n  content: \"\\f0c6\";\n}\n.fa-save:before,\n.fa-floppy-o:before {\n  content: \"\\f0c7\";\n}\n.fa-square:before {\n  content: \"\\f0c8\";\n}\n.fa-navicon:before,\n.fa-reorder:before,\n.fa-bars:before {\n  content: \"\\f0c9\";\n}\n.fa-list-ul:before {\n  content: \"\\f0ca\";\n}\n.fa-list-ol:before {\n  content: \"\\f0cb\";\n}\n.fa-strikethrough:before {\n  content: \"\\f0cc\";\n}\n.fa-underline:before {\n  content: \"\\f0cd\";\n}\n.fa-table:before {\n  content: \"\\f0ce\";\n}\n.fa-magic:before {\n  content: \"\\f0d0\";\n}\n.fa-truck:before {\n  content: \"\\f0d1\";\n}\n.fa-pinterest:before {\n  content: \"\\f0d2\";\n}\n.fa-pinterest-square:before {\n  content: \"\\f0d3\";\n}\n.fa-google-plus-square:before {\n  content: \"\\f0d4\";\n}\n.fa-google-plus:before {\n  content: \"\\f0d5\";\n}\n.fa-money:before {\n  content: \"\\f0d6\";\n}\n.fa-caret-down:before {\n  content: \"\\f0d7\";\n}\n.fa-caret-up:before {\n  content: \"\\f0d8\";\n}\n.fa-caret-left:before {\n  content: \"\\f0d9\";\n}\n.fa-caret-right:before {\n  content: \"\\f0da\";\n}\n.fa-columns:before {\n  content: \"\\f0db\";\n}\n.fa-unsorted:before,\n.fa-sort:before {\n  content: \"\\f0dc\";\n}\n.fa-sort-down:before,\n.fa-sort-desc:before {\n  content: \"\\f0dd\";\n}\n.fa-sort-up:before,\n.fa-sort-asc:before {\n  content: \"\\f0de\";\n}\n.fa-envelope:before {\n  content: \"\\f0e0\";\n}\n.fa-linkedin:before {\n  content: \"\\f0e1\";\n}\n.fa-rotate-left:before,\n.fa-undo:before {\n  content: \"\\f0e2\";\n}\n.fa-legal:before,\n.fa-gavel:before {\n  content: \"\\f0e3\";\n}\n.fa-dashboard:before,\n.fa-tachometer:before {\n  content: \"\\f0e4\";\n}\n.fa-comment-o:before {\n  content: \"\\f0e5\";\n}\n.fa-comments-o:before {\n  content: \"\\f0e6\";\n}\n.fa-flash:before,\n.fa-bolt:before {\n  content: \"\\f0e7\";\n}\n.fa-sitemap:before {\n  content: \"\\f0e8\";\n}\n.fa-umbrella:before {\n  content: \"\\f0e9\";\n}\n.fa-paste:before,\n.fa-clipboard:before {\n  content: \"\\f0ea\";\n}\n.fa-lightbulb-o:before {\n  content: \"\\f0eb\";\n}\n.fa-exchange:before {\n  content: \"\\f0ec\";\n}\n.fa-cloud-download:before {\n  content: \"\\f0ed\";\n}\n.fa-cloud-upload:before {\n  content: \"\\f0ee\";\n}\n.fa-user-md:before {\n  content: \"\\f0f0\";\n}\n.fa-stethoscope:before {\n  content: \"\\f0f1\";\n}\n.fa-suitcase:before {\n  content: \"\\f0f2\";\n}\n.fa-bell-o:before {\n  content: \"\\f0a2\";\n}\n.fa-coffee:before {\n  content: \"\\f0f4\";\n}\n.fa-cutlery:before {\n  content: \"\\f0f5\";\n}\n.fa-file-text-o:before {\n  content: \"\\f0f6\";\n}\n.fa-building-o:before {\n  content: \"\\f0f7\";\n}\n.fa-hospital-o:before {\n  content: \"\\f0f8\";\n}\n.fa-ambulance:before {\n  content: \"\\f0f9\";\n}\n.fa-medkit:before {\n  content: \"\\f0fa\";\n}\n.fa-fighter-jet:before {\n  content: \"\\f0fb\";\n}\n.fa-beer:before {\n  content: \"\\f0fc\";\n}\n.fa-h-square:before {\n  content: \"\\f0fd\";\n}\n.fa-plus-square:before {\n  content: \"\\f0fe\";\n}\n.fa-angle-double-left:before {\n  content: \"\\f100\";\n}\n.fa-angle-double-right:before {\n  content: \"\\f101\";\n}\n.fa-angle-double-up:before {\n  content: \"\\f102\";\n}\n.fa-angle-double-down:before {\n  content: \"\\f103\";\n}\n.fa-angle-left:before {\n  content: \"\\f104\";\n}\n.fa-angle-right:before {\n  content: \"\\f105\";\n}\n.fa-angle-up:before {\n  content: \"\\f106\";\n}\n.fa-angle-down:before {\n  content: \"\\f107\";\n}\n.fa-desktop:before {\n  content: \"\\f108\";\n}\n.fa-laptop:before {\n  content: \"\\f109\";\n}\n.fa-tablet:before {\n  content: \"\\f10a\";\n}\n.fa-mobile-phone:before,\n.fa-mobile:before {\n  content: \"\\f10b\";\n}\n.fa-circle-o:before {\n  content: \"\\f10c\";\n}\n.fa-quote-left:before {\n  content: \"\\f10d\";\n}\n.fa-quote-right:before {\n  content: \"\\f10e\";\n}\n.fa-spinner:before {\n  content: \"\\f110\";\n}\n.fa-circle:before {\n  content: \"\\f111\";\n}\n.fa-mail-reply:before,\n.fa-reply:before {\n  content: \"\\f112\";\n}\n.fa-github-alt:before {\n  content: \"\\f113\";\n}\n.fa-folder-o:before {\n  content: \"\\f114\";\n}\n.fa-folder-open-o:before {\n  content: \"\\f115\";\n}\n.fa-smile-o:before {\n  content: \"\\f118\";\n}\n.fa-frown-o:before {\n  content: \"\\f119\";\n}\n.fa-meh-o:before {\n  content: \"\\f11a\";\n}\n.fa-gamepad:before {\n  content: \"\\f11b\";\n}\n.fa-keyboard-o:before {\n  content: \"\\f11c\";\n}\n.fa-flag-o:before {\n  content: \"\\f11d\";\n}\n.fa-flag-checkered:before {\n  content: \"\\f11e\";\n}\n.fa-terminal:before {\n  content: \"\\f120\";\n}\n.fa-code:before {\n  content: \"\\f121\";\n}\n.fa-mail-reply-all:before,\n.fa-reply-all:before {\n  content: \"\\f122\";\n}\n.fa-star-half-empty:before,\n.fa-star-half-full:before,\n.fa-star-half-o:before {\n  content: \"\\f123\";\n}\n.fa-location-arrow:before {\n  content: \"\\f124\";\n}\n.fa-crop:before {\n  content: \"\\f125\";\n}\n.fa-code-fork:before {\n  content: \"\\f126\";\n}\n.fa-unlink:before,\n.fa-chain-broken:before {\n  content: \"\\f127\";\n}\n.fa-question:before {\n  content: \"\\f128\";\n}\n.fa-info:before {\n  content: \"\\f129\";\n}\n.fa-exclamation:before {\n  content: \"\\f12a\";\n}\n.fa-superscript:before {\n  content: \"\\f12b\";\n}\n.fa-subscript:before {\n  content: \"\\f12c\";\n}\n.fa-eraser:before {\n  content: \"\\f12d\";\n}\n.fa-puzzle-piece:before {\n  content: \"\\f12e\";\n}\n.fa-microphone:before {\n  content: \"\\f130\";\n}\n.fa-microphone-slash:before {\n  content: \"\\f131\";\n}\n.fa-shield:before {\n  content: \"\\f132\";\n}\n.fa-calendar-o:before {\n  content: \"\\f133\";\n}\n.fa-fire-extinguisher:before {\n  content: \"\\f134\";\n}\n.fa-rocket:before {\n  content: \"\\f135\";\n}\n.fa-maxcdn:before {\n  content: \"\\f136\";\n}\n.fa-chevron-circle-left:before {\n  content: \"\\f137\";\n}\n.fa-chevron-circle-right:before {\n  content: \"\\f138\";\n}\n.fa-chevron-circle-up:before {\n  content: \"\\f139\";\n}\n.fa-chevron-circle-down:before {\n  content: \"\\f13a\";\n}\n.fa-html5:before {\n  content: \"\\f13b\";\n}\n.fa-css3:before {\n  content: \"\\f13c\";\n}\n.fa-anchor:before {\n  content: \"\\f13d\";\n}\n.fa-unlock-alt:before {\n  content: \"\\f13e\";\n}\n.fa-bullseye:before {\n  content: \"\\f140\";\n}\n.fa-ellipsis-h:before {\n  content: \"\\f141\";\n}\n.fa-ellipsis-v:before {\n  content: \"\\f142\";\n}\n.fa-rss-square:before {\n  content: \"\\f143\";\n}\n.fa-play-circle:before {\n  content: \"\\f144\";\n}\n.fa-ticket:before {\n  content: \"\\f145\";\n}\n.fa-minus-square:before {\n  content: \"\\f146\";\n}\n.fa-minus-square-o:before {\n  content: \"\\f147\";\n}\n.fa-level-up:before {\n  content: \"\\f148\";\n}\n.fa-level-down:before {\n  content: \"\\f149\";\n}\n.fa-check-square:before {\n  content: \"\\f14a\";\n}\n.fa-pencil-square:before {\n  content: \"\\f14b\";\n}\n.fa-external-link-square:before {\n  content: \"\\f14c\";\n}\n.fa-share-square:before {\n  content: \"\\f14d\";\n}\n.fa-compass:before {\n  content: \"\\f14e\";\n}\n.fa-toggle-down:before,\n.fa-caret-square-o-down:before {\n  content: \"\\f150\";\n}\n.fa-toggle-up:before,\n.fa-caret-square-o-up:before {\n  content: \"\\f151\";\n}\n.fa-toggle-right:before,\n.fa-caret-square-o-right:before {\n  content: \"\\f152\";\n}\n.fa-euro:before,\n.fa-eur:before {\n  content: \"\\f153\";\n}\n.fa-gbp:before {\n  content: \"\\f154\";\n}\n.fa-dollar:before,\n.fa-usd:before {\n  content: \"\\f155\";\n}\n.fa-rupee:before,\n.fa-inr:before {\n  content: \"\\f156\";\n}\n.fa-cny:before,\n.fa-rmb:before,\n.fa-yen:before,\n.fa-jpy:before {\n  content: \"\\f157\";\n}\n.fa-ruble:before,\n.fa-rouble:before,\n.fa-rub:before {\n  content: \"\\f158\";\n}\n.fa-won:before,\n.fa-krw:before {\n  content: \"\\f159\";\n}\n.fa-bitcoin:before,\n.fa-btc:before {\n  content: \"\\f15a\";\n}\n.fa-file:before {\n  content: \"\\f15b\";\n}\n.fa-file-text:before {\n  content: \"\\f15c\";\n}\n.fa-sort-alpha-asc:before {\n  content: \"\\f15d\";\n}\n.fa-sort-alpha-desc:before {\n  content: \"\\f15e\";\n}\n.fa-sort-amount-asc:before {\n  content: \"\\f160\";\n}\n.fa-sort-amount-desc:before {\n  content: \"\\f161\";\n}\n.fa-sort-numeric-asc:before {\n  content: \"\\f162\";\n}\n.fa-sort-numeric-desc:before {\n  content: \"\\f163\";\n}\n.fa-thumbs-up:before {\n  content: \"\\f164\";\n}\n.fa-thumbs-down:before {\n  content: \"\\f165\";\n}\n.fa-youtube-square:before {\n  content: \"\\f166\";\n}\n.fa-youtube:before {\n  content: \"\\f167\";\n}\n.fa-xing:before {\n  content: \"\\f168\";\n}\n.fa-xing-square:before {\n  content: \"\\f169\";\n}\n.fa-youtube-play:before {\n  content: \"\\f16a\";\n}\n.fa-dropbox:before {\n  content: \"\\f16b\";\n}\n.fa-stack-overflow:before {\n  content: \"\\f16c\";\n}\n.fa-instagram:before {\n  content: \"\\f16d\";\n}\n.fa-flickr:before {\n  content: \"\\f16e\";\n}\n.fa-adn:before {\n  content: \"\\f170\";\n}\n.fa-bitbucket:before {\n  content: \"\\f171\";\n}\n.fa-bitbucket-square:before {\n  content: \"\\f172\";\n}\n.fa-tumblr:before {\n  content: \"\\f173\";\n}\n.fa-tumblr-square:before {\n  content: \"\\f174\";\n}\n.fa-long-arrow-down:before {\n  content: \"\\f175\";\n}\n.fa-long-arrow-up:before {\n  content: \"\\f176\";\n}\n.fa-long-arrow-left:before {\n  content: \"\\f177\";\n}\n.fa-long-arrow-right:before {\n  content: \"\\f178\";\n}\n.fa-apple:before {\n  content: \"\\f179\";\n}\n.fa-windows:before {\n  content: \"\\f17a\";\n}\n.fa-android:before {\n  content: \"\\f17b\";\n}\n.fa-linux:before {\n  content: \"\\f17c\";\n}\n.fa-dribbble:before {\n  content: \"\\f17d\";\n}\n.fa-skype:before {\n  content: \"\\f17e\";\n}\n.fa-foursquare:before {\n  content: \"\\f180\";\n}\n.fa-trello:before {\n  content: \"\\f181\";\n}\n.fa-female:before {\n  content: \"\\f182\";\n}\n.fa-male:before {\n  content: \"\\f183\";\n}\n.fa-gittip:before,\n.fa-gratipay:before {\n  content: \"\\f184\";\n}\n.fa-sun-o:before {\n  content: \"\\f185\";\n}\n.fa-moon-o:before {\n  content: \"\\f186\";\n}\n.fa-archive:before {\n  content: \"\\f187\";\n}\n.fa-bug:before {\n  content: \"\\f188\";\n}\n.fa-vk:before {\n  content: \"\\f189\";\n}\n.fa-weibo:before {\n  content: \"\\f18a\";\n}\n.fa-renren:before {\n  content: \"\\f18b\";\n}\n.fa-pagelines:before {\n  content: \"\\f18c\";\n}\n.fa-stack-exchange:before {\n  content: \"\\f18d\";\n}\n.fa-arrow-circle-o-right:before {\n  content: \"\\f18e\";\n}\n.fa-arrow-circle-o-left:before {\n  content: \"\\f190\";\n}\n.fa-toggle-left:before,\n.fa-caret-square-o-left:before {\n  content: \"\\f191\";\n}\n.fa-dot-circle-o:before {\n  content: \"\\f192\";\n}\n.fa-wheelchair:before {\n  content: \"\\f193\";\n}\n.fa-vimeo-square:before {\n  content: \"\\f194\";\n}\n.fa-turkish-lira:before,\n.fa-try:before {\n  content: \"\\f195\";\n}\n.fa-plus-square-o:before {\n  content: \"\\f196\";\n}\n.fa-space-shuttle:before {\n  content: \"\\f197\";\n}\n.fa-slack:before {\n  content: \"\\f198\";\n}\n.fa-envelope-square:before {\n  content: \"\\f199\";\n}\n.fa-wordpress:before {\n  content: \"\\f19a\";\n}\n.fa-openid:before {\n  content: \"\\f19b\";\n}\n.fa-institution:before,\n.fa-bank:before,\n.fa-university:before {\n  content: \"\\f19c\";\n}\n.fa-mortar-board:before,\n.fa-graduation-cap:before {\n  content: \"\\f19d\";\n}\n.fa-yahoo:before {\n  content: \"\\f19e\";\n}\n.fa-google:before {\n  content: \"\\f1a0\";\n}\n.fa-reddit:before {\n  content: \"\\f1a1\";\n}\n.fa-reddit-square:before {\n  content: \"\\f1a2\";\n}\n.fa-stumbleupon-circle:before {\n  content: \"\\f1a3\";\n}\n.fa-stumbleupon:before {\n  content: \"\\f1a4\";\n}\n.fa-delicious:before {\n  content: \"\\f1a5\";\n}\n.fa-digg:before {\n  content: \"\\f1a6\";\n}\n.fa-pied-piper-pp:before {\n  content: \"\\f1a7\";\n}\n.fa-pied-piper-alt:before {\n  content: \"\\f1a8\";\n}\n.fa-drupal:before {\n  content: \"\\f1a9\";\n}\n.fa-joomla:before {\n  content: \"\\f1aa\";\n}\n.fa-language:before {\n  content: \"\\f1ab\";\n}\n.fa-fax:before {\n  content: \"\\f1ac\";\n}\n.fa-building:before {\n  content: \"\\f1ad\";\n}\n.fa-child:before {\n  content: \"\\f1ae\";\n}\n.fa-paw:before {\n  content: \"\\f1b0\";\n}\n.fa-spoon:before {\n  content: \"\\f1b1\";\n}\n.fa-cube:before {\n  content: \"\\f1b2\";\n}\n.fa-cubes:before {\n  content: \"\\f1b3\";\n}\n.fa-behance:before {\n  content: \"\\f1b4\";\n}\n.fa-behance-square:before {\n  content: \"\\f1b5\";\n}\n.fa-steam:before {\n  content: \"\\f1b6\";\n}\n.fa-steam-square:before {\n  content: \"\\f1b7\";\n}\n.fa-recycle:before {\n  content: \"\\f1b8\";\n}\n.fa-automobile:before,\n.fa-car:before {\n  content: \"\\f1b9\";\n}\n.fa-cab:before,\n.fa-taxi:before {\n  content: \"\\f1ba\";\n}\n.fa-tree:before {\n  content: \"\\f1bb\";\n}\n.fa-spotify:before {\n  content: \"\\f1bc\";\n}\n.fa-deviantart:before {\n  content: \"\\f1bd\";\n}\n.fa-soundcloud:before {\n  content: \"\\f1be\";\n}\n.fa-database:before {\n  content: \"\\f1c0\";\n}\n.fa-file-pdf-o:before {\n  content: \"\\f1c1\";\n}\n.fa-file-word-o:before {\n  content: \"\\f1c2\";\n}\n.fa-file-excel-o:before {\n  content: \"\\f1c3\";\n}\n.fa-file-powerpoint-o:before {\n  content: \"\\f1c4\";\n}\n.fa-file-photo-o:before,\n.fa-file-picture-o:before,\n.fa-file-image-o:before {\n  content: \"\\f1c5\";\n}\n.fa-file-zip-o:before,\n.fa-file-archive-o:before {\n  content: \"\\f1c6\";\n}\n.fa-file-sound-o:before,\n.fa-file-audio-o:before {\n  content: \"\\f1c7\";\n}\n.fa-file-movie-o:before,\n.fa-file-video-o:before {\n  content: \"\\f1c8\";\n}\n.fa-file-code-o:before {\n  content: \"\\f1c9\";\n}\n.fa-vine:before {\n  content: \"\\f1ca\";\n}\n.fa-codepen:before {\n  content: \"\\f1cb\";\n}\n.fa-jsfiddle:before {\n  content: \"\\f1cc\";\n}\n.fa-life-bouy:before,\n.fa-life-buoy:before,\n.fa-life-saver:before,\n.fa-support:before,\n.fa-life-ring:before {\n  content: \"\\f1cd\";\n}\n.fa-circle-o-notch:before {\n  content: \"\\f1ce\";\n}\n.fa-ra:before,\n.fa-resistance:before,\n.fa-rebel:before {\n  content: \"\\f1d0\";\n}\n.fa-ge:before,\n.fa-empire:before {\n  content: \"\\f1d1\";\n}\n.fa-git-square:before {\n  content: \"\\f1d2\";\n}\n.fa-git:before {\n  content: \"\\f1d3\";\n}\n.fa-y-combinator-square:before,\n.fa-yc-square:before,\n.fa-hacker-news:before {\n  content: \"\\f1d4\";\n}\n.fa-tencent-weibo:before {\n  content: \"\\f1d5\";\n}\n.fa-qq:before {\n  content: \"\\f1d6\";\n}\n.fa-wechat:before,\n.fa-weixin:before {\n  content: \"\\f1d7\";\n}\n.fa-send:before,\n.fa-paper-plane:before {\n  content: \"\\f1d8\";\n}\n.fa-send-o:before,\n.fa-paper-plane-o:before {\n  content: \"\\f1d9\";\n}\n.fa-history:before {\n  content: \"\\f1da\";\n}\n.fa-circle-thin:before {\n  content: \"\\f1db\";\n}\n.fa-header:before {\n  content: \"\\f1dc\";\n}\n.fa-paragraph:before {\n  content: \"\\f1dd\";\n}\n.fa-sliders:before {\n  content: \"\\f1de\";\n}\n.fa-share-alt:before {\n  content: \"\\f1e0\";\n}\n.fa-share-alt-square:before {\n  content: \"\\f1e1\";\n}\n.fa-bomb:before {\n  content: \"\\f1e2\";\n}\n.fa-soccer-ball-o:before,\n.fa-futbol-o:before {\n  content: \"\\f1e3\";\n}\n.fa-tty:before {\n  content: \"\\f1e4\";\n}\n.fa-binoculars:before {\n  content: \"\\f1e5\";\n}\n.fa-plug:before {\n  content: \"\\f1e6\";\n}\n.fa-slideshare:before {\n  content: \"\\f1e7\";\n}\n.fa-twitch:before {\n  content: \"\\f1e8\";\n}\n.fa-yelp:before {\n  content: \"\\f1e9\";\n}\n.fa-newspaper-o:before {\n  content: \"\\f1ea\";\n}\n.fa-wifi:before {\n  content: \"\\f1eb\";\n}\n.fa-calculator:before {\n  content: \"\\f1ec\";\n}\n.fa-paypal:before {\n  content: \"\\f1ed\";\n}\n.fa-google-wallet:before {\n  content: \"\\f1ee\";\n}\n.fa-cc-visa:before {\n  content: \"\\f1f0\";\n}\n.fa-cc-mastercard:before {\n  content: \"\\f1f1\";\n}\n.fa-cc-discover:before {\n  content: \"\\f1f2\";\n}\n.fa-cc-amex:before {\n  content: \"\\f1f3\";\n}\n.fa-cc-paypal:before {\n  content: \"\\f1f4\";\n}\n.fa-cc-stripe:before {\n  content: \"\\f1f5\";\n}\n.fa-bell-slash:before {\n  content: \"\\f1f6\";\n}\n.fa-bell-slash-o:before {\n  content: \"\\f1f7\";\n}\n.fa-trash:before {\n  content: \"\\f1f8\";\n}\n.fa-copyright:before {\n  content: \"\\f1f9\";\n}\n.fa-at:before {\n  content: \"\\f1fa\";\n}\n.fa-eyedropper:before {\n  content: \"\\f1fb\";\n}\n.fa-paint-brush:before {\n  content: \"\\f1fc\";\n}\n.fa-birthday-cake:before {\n  content: \"\\f1fd\";\n}\n.fa-area-chart:before {\n  content: \"\\f1fe\";\n}\n.fa-pie-chart:before {\n  content: \"\\f200\";\n}\n.fa-line-chart:before {\n  content: \"\\f201\";\n}\n.fa-lastfm:before {\n  content: \"\\f202\";\n}\n.fa-lastfm-square:before {\n  content: \"\\f203\";\n}\n.fa-toggle-off:before {\n  content: \"\\f204\";\n}\n.fa-toggle-on:before {\n  content: \"\\f205\";\n}\n.fa-bicycle:before {\n  content: \"\\f206\";\n}\n.fa-bus:before {\n  content: \"\\f207\";\n}\n.fa-ioxhost:before {\n  content: \"\\f208\";\n}\n.fa-angellist:before {\n  content: \"\\f209\";\n}\n.fa-cc:before {\n  content: \"\\f20a\";\n}\n.fa-shekel:before,\n.fa-sheqel:before,\n.fa-ils:before {\n  content: \"\\f20b\";\n}\n.fa-meanpath:before {\n  content: \"\\f20c\";\n}\n.fa-buysellads:before {\n  content: \"\\f20d\";\n}\n.fa-connectdevelop:before {\n  content: \"\\f20e\";\n}\n.fa-dashcube:before {\n  content: \"\\f210\";\n}\n.fa-forumbee:before {\n  content: \"\\f211\";\n}\n.fa-leanpub:before {\n  content: \"\\f212\";\n}\n.fa-sellsy:before {\n  content: \"\\f213\";\n}\n.fa-shirtsinbulk:before {\n  content: \"\\f214\";\n}\n.fa-simplybuilt:before {\n  content: \"\\f215\";\n}\n.fa-skyatlas:before {\n  content: \"\\f216\";\n}\n.fa-cart-plus:before {\n  content: \"\\f217\";\n}\n.fa-cart-arrow-down:before {\n  content: \"\\f218\";\n}\n.fa-diamond:before {\n  content: \"\\f219\";\n}\n.fa-ship:before {\n  content: \"\\f21a\";\n}\n.fa-user-secret:before {\n  content: \"\\f21b\";\n}\n.fa-motorcycle:before {\n  content: \"\\f21c\";\n}\n.fa-street-view:before {\n  content: \"\\f21d\";\n}\n.fa-heartbeat:before {\n  content: \"\\f21e\";\n}\n.fa-venus:before {\n  content: \"\\f221\";\n}\n.fa-mars:before {\n  content: \"\\f222\";\n}\n.fa-mercury:before {\n  content: \"\\f223\";\n}\n.fa-intersex:before,\n.fa-transgender:before {\n  content: \"\\f224\";\n}\n.fa-transgender-alt:before {\n  content: \"\\f225\";\n}\n.fa-venus-double:before {\n  content: \"\\f226\";\n}\n.fa-mars-double:before {\n  content: \"\\f227\";\n}\n.fa-venus-mars:before {\n  content: \"\\f228\";\n}\n.fa-mars-stroke:before {\n  content: \"\\f229\";\n}\n.fa-mars-stroke-v:before {\n  content: \"\\f22a\";\n}\n.fa-mars-stroke-h:before {\n  content: \"\\f22b\";\n}\n.fa-neuter:before {\n  content: \"\\f22c\";\n}\n.fa-genderless:before {\n  content: \"\\f22d\";\n}\n.fa-facebook-official:before {\n  content: \"\\f230\";\n}\n.fa-pinterest-p:before {\n  content: \"\\f231\";\n}\n.fa-whatsapp:before {\n  content: \"\\f232\";\n}\n.fa-server:before {\n  content: \"\\f233\";\n}\n.fa-user-plus:before {\n  content: \"\\f234\";\n}\n.fa-user-times:before {\n  content: \"\\f235\";\n}\n.fa-hotel:before,\n.fa-bed:before {\n  content: \"\\f236\";\n}\n.fa-viacoin:before {\n  content: \"\\f237\";\n}\n.fa-train:before {\n  content: \"\\f238\";\n}\n.fa-subway:before {\n  content: \"\\f239\";\n}\n.fa-medium:before {\n  content: \"\\f23a\";\n}\n.fa-yc:before,\n.fa-y-combinator:before {\n  content: \"\\f23b\";\n}\n.fa-optin-monster:before {\n  content: \"\\f23c\";\n}\n.fa-opencart:before {\n  content: \"\\f23d\";\n}\n.fa-expeditedssl:before {\n  content: \"\\f23e\";\n}\n.fa-battery-4:before,\n.fa-battery:before,\n.fa-battery-full:before {\n  content: \"\\f240\";\n}\n.fa-battery-3:before,\n.fa-battery-three-quarters:before {\n  content: \"\\f241\";\n}\n.fa-battery-2:before,\n.fa-battery-half:before {\n  content: \"\\f242\";\n}\n.fa-battery-1:before,\n.fa-battery-quarter:before {\n  content: \"\\f243\";\n}\n.fa-battery-0:before,\n.fa-battery-empty:before {\n  content: \"\\f244\";\n}\n.fa-mouse-pointer:before {\n  content: \"\\f245\";\n}\n.fa-i-cursor:before {\n  content: \"\\f246\";\n}\n.fa-object-group:before {\n  content: \"\\f247\";\n}\n.fa-object-ungroup:before {\n  content: \"\\f248\";\n}\n.fa-sticky-note:before {\n  content: \"\\f249\";\n}\n.fa-sticky-note-o:before {\n  content: \"\\f24a\";\n}\n.fa-cc-jcb:before {\n  content: \"\\f24b\";\n}\n.fa-cc-diners-club:before {\n  content: \"\\f24c\";\n}\n.fa-clone:before {\n  content: \"\\f24d\";\n}\n.fa-balance-scale:before {\n  content: \"\\f24e\";\n}\n.fa-hourglass-o:before {\n  content: \"\\f250\";\n}\n.fa-hourglass-1:before,\n.fa-hourglass-start:before {\n  content: \"\\f251\";\n}\n.fa-hourglass-2:before,\n.fa-hourglass-half:before {\n  content: \"\\f252\";\n}\n.fa-hourglass-3:before,\n.fa-hourglass-end:before {\n  content: \"\\f253\";\n}\n.fa-hourglass:before {\n  content: \"\\f254\";\n}\n.fa-hand-grab-o:before,\n.fa-hand-rock-o:before {\n  content: \"\\f255\";\n}\n.fa-hand-stop-o:before,\n.fa-hand-paper-o:before {\n  content: \"\\f256\";\n}\n.fa-hand-scissors-o:before {\n  content: \"\\f257\";\n}\n.fa-hand-lizard-o:before {\n  content: \"\\f258\";\n}\n.fa-hand-spock-o:before {\n  content: \"\\f259\";\n}\n.fa-hand-pointer-o:before {\n  content: \"\\f25a\";\n}\n.fa-hand-peace-o:before {\n  content: \"\\f25b\";\n}\n.fa-trademark:before {\n  content: \"\\f25c\";\n}\n.fa-registered:before {\n  content: \"\\f25d\";\n}\n.fa-creative-commons:before {\n  content: \"\\f25e\";\n}\n.fa-gg:before {\n  content: \"\\f260\";\n}\n.fa-gg-circle:before {\n  content: \"\\f261\";\n}\n.fa-tripadvisor:before {\n  content: \"\\f262\";\n}\n.fa-odnoklassniki:before {\n  content: \"\\f263\";\n}\n.fa-odnoklassniki-square:before {\n  content: \"\\f264\";\n}\n.fa-get-pocket:before {\n  content: \"\\f265\";\n}\n.fa-wikipedia-w:before {\n  content: \"\\f266\";\n}\n.fa-safari:before {\n  content: \"\\f267\";\n}\n.fa-chrome:before {\n  content: \"\\f268\";\n}\n.fa-firefox:before {\n  content: \"\\f269\";\n}\n.fa-opera:before {\n  content: \"\\f26a\";\n}\n.fa-internet-explorer:before {\n  content: \"\\f26b\";\n}\n.fa-tv:before,\n.fa-television:before {\n  content: \"\\f26c\";\n}\n.fa-contao:before {\n  content: \"\\f26d\";\n}\n.fa-500px:before {\n  content: \"\\f26e\";\n}\n.fa-amazon:before {\n  content: \"\\f270\";\n}\n.fa-calendar-plus-o:before {\n  content: \"\\f271\";\n}\n.fa-calendar-minus-o:before {\n  content: \"\\f272\";\n}\n.fa-calendar-times-o:before {\n  content: \"\\f273\";\n}\n.fa-calendar-check-o:before {\n  content: \"\\f274\";\n}\n.fa-industry:before {\n  content: \"\\f275\";\n}\n.fa-map-pin:before {\n  content: \"\\f276\";\n}\n.fa-map-signs:before {\n  content: \"\\f277\";\n}\n.fa-map-o:before {\n  content: \"\\f278\";\n}\n.fa-map:before {\n  content: \"\\f279\";\n}\n.fa-commenting:before {\n  content: \"\\f27a\";\n}\n.fa-commenting-o:before {\n  content: \"\\f27b\";\n}\n.fa-houzz:before {\n  content: \"\\f27c\";\n}\n.fa-vimeo:before {\n  content: \"\\f27d\";\n}\n.fa-black-tie:before {\n  content: \"\\f27e\";\n}\n.fa-fonticons:before {\n  content: \"\\f280\";\n}\n.fa-reddit-alien:before {\n  content: \"\\f281\";\n}\n.fa-edge:before {\n  content: \"\\f282\";\n}\n.fa-credit-card-alt:before {\n  content: \"\\f283\";\n}\n.fa-codiepie:before {\n  content: \"\\f284\";\n}\n.fa-modx:before {\n  content: \"\\f285\";\n}\n.fa-fort-awesome:before {\n  content: \"\\f286\";\n}\n.fa-usb:before {\n  content: \"\\f287\";\n}\n.fa-product-hunt:before {\n  content: \"\\f288\";\n}\n.fa-mixcloud:before {\n  content: \"\\f289\";\n}\n.fa-scribd:before {\n  content: \"\\f28a\";\n}\n.fa-pause-circle:before {\n  content: \"\\f28b\";\n}\n.fa-pause-circle-o:before {\n  content: \"\\f28c\";\n}\n.fa-stop-circle:before {\n  content: \"\\f28d\";\n}\n.fa-stop-circle-o:before {\n  content: \"\\f28e\";\n}\n.fa-shopping-bag:before {\n  content: \"\\f290\";\n}\n.fa-shopping-basket:before {\n  content: \"\\f291\";\n}\n.fa-hashtag:before {\n  content: \"\\f292\";\n}\n.fa-bluetooth:before {\n  content: \"\\f293\";\n}\n.fa-bluetooth-b:before {\n  content: \"\\f294\";\n}\n.fa-percent:before {\n  content: \"\\f295\";\n}\n.fa-gitlab:before {\n  content: \"\\f296\";\n}\n.fa-wpbeginner:before {\n  content: \"\\f297\";\n}\n.fa-wpforms:before {\n  content: \"\\f298\";\n}\n.fa-envira:before {\n  content: \"\\f299\";\n}\n.fa-universal-access:before {\n  content: \"\\f29a\";\n}\n.fa-wheelchair-alt:before {\n  content: \"\\f29b\";\n}\n.fa-question-circle-o:before {\n  content: \"\\f29c\";\n}\n.fa-blind:before {\n  content: \"\\f29d\";\n}\n.fa-audio-description:before {\n  content: \"\\f29e\";\n}\n.fa-volume-control-phone:before {\n  content: \"\\f2a0\";\n}\n.fa-braille:before {\n  content: \"\\f2a1\";\n}\n.fa-assistive-listening-systems:before {\n  content: \"\\f2a2\";\n}\n.fa-asl-interpreting:before,\n.fa-american-sign-language-interpreting:before {\n  content: \"\\f2a3\";\n}\n.fa-deafness:before,\n.fa-hard-of-hearing:before,\n.fa-deaf:before {\n  content: \"\\f2a4\";\n}\n.fa-glide:before {\n  content: \"\\f2a5\";\n}\n.fa-glide-g:before {\n  content: \"\\f2a6\";\n}\n.fa-signing:before,\n.fa-sign-language:before {\n  content: \"\\f2a7\";\n}\n.fa-low-vision:before {\n  content: \"\\f2a8\";\n}\n.fa-viadeo:before {\n  content: \"\\f2a9\";\n}\n.fa-viadeo-square:before {\n  content: \"\\f2aa\";\n}\n.fa-snapchat:before {\n  content: \"\\f2ab\";\n}\n.fa-snapchat-ghost:before {\n  content: \"\\f2ac\";\n}\n.fa-snapchat-square:before {\n  content: \"\\f2ad\";\n}\n.fa-pied-piper:before {\n  content: \"\\f2ae\";\n}\n.fa-first-order:before {\n  content: \"\\f2b0\";\n}\n.fa-yoast:before {\n  content: \"\\f2b1\";\n}\n.fa-themeisle:before {\n  content: \"\\f2b2\";\n}\n.fa-google-plus-circle:before,\n.fa-google-plus-official:before {\n  content: \"\\f2b3\";\n}\n.fa-fa:before,\n.fa-font-awesome:before {\n  content: \"\\f2b4\";\n}\n.fa-handshake-o:before {\n  content: \"\\f2b5\";\n}\n.fa-envelope-open:before {\n  content: \"\\f2b6\";\n}\n.fa-envelope-open-o:before {\n  content: \"\\f2b7\";\n}\n.fa-linode:before {\n  content: \"\\f2b8\";\n}\n.fa-address-book:before {\n  content: \"\\f2b9\";\n}\n.fa-address-book-o:before {\n  content: \"\\f2ba\";\n}\n.fa-vcard:before,\n.fa-address-card:before {\n  content: \"\\f2bb\";\n}\n.fa-vcard-o:before,\n.fa-address-card-o:before {\n  content: \"\\f2bc\";\n}\n.fa-user-circle:before {\n  content: \"\\f2bd\";\n}\n.fa-user-circle-o:before {\n  content: \"\\f2be\";\n}\n.fa-user-o:before {\n  content: \"\\f2c0\";\n}\n.fa-id-badge:before {\n  content: \"\\f2c1\";\n}\n.fa-drivers-license:before,\n.fa-id-card:before {\n  content: \"\\f2c2\";\n}\n.fa-drivers-license-o:before,\n.fa-id-card-o:before {\n  content: \"\\f2c3\";\n}\n.fa-quora:before {\n  content: \"\\f2c4\";\n}\n.fa-free-code-camp:before {\n  content: \"\\f2c5\";\n}\n.fa-telegram:before {\n  content: \"\\f2c6\";\n}\n.fa-thermometer-4:before,\n.fa-thermometer:before,\n.fa-thermometer-full:before {\n  content: \"\\f2c7\";\n}\n.fa-thermometer-3:before,\n.fa-thermometer-three-quarters:before {\n  content: \"\\f2c8\";\n}\n.fa-thermometer-2:before,\n.fa-thermometer-half:before {\n  content: \"\\f2c9\";\n}\n.fa-thermometer-1:before,\n.fa-thermometer-quarter:before {\n  content: \"\\f2ca\";\n}\n.fa-thermometer-0:before,\n.fa-thermometer-empty:before {\n  content: \"\\f2cb\";\n}\n.fa-shower:before {\n  content: \"\\f2cc\";\n}\n.fa-bathtub:before,\n.fa-s15:before,\n.fa-bath:before {\n  content: \"\\f2cd\";\n}\n.fa-podcast:before {\n  content: \"\\f2ce\";\n}\n.fa-window-maximize:before {\n  content: \"\\f2d0\";\n}\n.fa-window-minimize:before {\n  content: \"\\f2d1\";\n}\n.fa-window-restore:before {\n  content: \"\\f2d2\";\n}\n.fa-times-rectangle:before,\n.fa-window-close:before {\n  content: \"\\f2d3\";\n}\n.fa-times-rectangle-o:before,\n.fa-window-close-o:before {\n  content: \"\\f2d4\";\n}\n.fa-bandcamp:before {\n  content: \"\\f2d5\";\n}\n.fa-grav:before {\n  content: \"\\f2d6\";\n}\n.fa-etsy:before {\n  content: \"\\f2d7\";\n}\n.fa-imdb:before {\n  content: \"\\f2d8\";\n}\n.fa-ravelry:before {\n  content: \"\\f2d9\";\n}\n.fa-eercast:before {\n  content: \"\\f2da\";\n}\n.fa-microchip:before {\n  content: \"\\f2db\";\n}\n.fa-snowflake-o:before {\n  content: \"\\f2dc\";\n}\n.fa-superpowers:before {\n  content: \"\\f2dd\";\n}\n.fa-wpexplorer:before {\n  content: \"\\f2de\";\n}\n.fa-meetup:before {\n  content: \"\\f2e0\";\n}\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n  position: static;\n  width: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  clip: auto;\n}\n"
  },
  {
    "path": "public/backend/js/core/app-menu.js",
    "content": "/*=========================================================================================\n  File Name: app-menu.js\n  Description: Menu navigation, custom scrollbar, hover scroll bar, multilevel menu\n  initialization and manipulations\n  ----------------------------------------------------------------------------------------\n  Item Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n  Author: Pixinvent\n  Author URL: hhttp://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n(function (window, document, $) {\n  'use strict';\n\n  var vh = window.innerHeight * 0.01;\n  document.documentElement.style.setProperty('--vh', vh + \"px\");\n\n  $.app = $.app || {};\n\n  var $body = $('body');\n  var $window = $(window);\n  var menuWrapper_el = $('div[data-menu=\"menu-wrapper\"]').html();\n  var menuWrapperClasses = $('div[data-menu=\"menu-wrapper\"]').attr('class');\n\n  // Main menu\n  $.app.menu = {\n    expanded: null,\n    collapsed: null,\n    hidden: null,\n    container: null,\n    horizontalMenu: false,\n\n    manualScroller: {\n      obj: null,\n\n      init: function () {\n        var scroll_theme = ($('.main-menu').hasClass('menu-dark')) ? 'light' : 'dark';\n        this.obj = new PerfectScrollbar(\".main-menu-content\", {\n          suppressScrollX: true,\n          wheelPropagation: false\n        });\n      },\n\n      update: function () {\n        if (this.obj) {\n          // Scroll to currently active menu on page load if data-scroll-to-active is true\n          if ($('.main-menu').data('scroll-to-active') === true) {\n            var activeEl, menu, activeElHeight;\n            activeEl = document.querySelector('.main-menu-content li.active');\n            if ($body.hasClass('menu-collapsed')) {\n              if ($('.main-menu-content li.sidebar-group-active').length) {\n                activeEl = document.querySelector('.main-menu-content li.sidebar-group-active');\n              }\n            } else {\n              menu = document.querySelector('.main-menu-content');\n              if (activeEl) {\n                activeElHeight = activeEl.getBoundingClientRect().top + menu.scrollTop;\n              }\n              // If active element's top position is less than 2/3 (66%) of menu height than do not scroll\n              if (activeElHeight > parseInt((menu.clientHeight * 2) / 3)) {\n                var start = menu.scrollTop,\n                  change = activeElHeight - start - parseInt(menu.clientHeight / 2);\n              }\n            }\n            setTimeout(function () {\n              $.app.menu.container.stop().animate({\n                scrollTop: change\n              }, 300);\n              $('.main-menu').data('scroll-to-active', 'false');\n            }, 300);\n          }\n          this.obj.update();\n        }\n      },\n\n      enable: function () {\n        if (!$('.main-menu-content').hasClass('ps')) {\n          this.init();\n        }\n      },\n\n      disable: function () {\n        if (this.obj) {\n          this.obj.destroy();\n        }\n      },\n\n      updateHeight: function () {\n        if (($body.data('menu') == 'vertical-menu' || $body.data('menu') == 'vertical-menu-modern' || $body.data('menu') == 'vertical-overlay-menu') && $('.main-menu').hasClass('menu-fixed')) {\n          $('.main-menu-content').css('height', $(window).height() - $('.header-navbar').height() - $('.main-menu-header').outerHeight() - $('.main-menu-footer').outerHeight());\n          this.update();\n        }\n      }\n    },\n\n    init: function (compactMenu) {\n      if ($('.main-menu-content').length > 0) {\n        this.container = $('.main-menu-content');\n\n        var menuObj = this;\n        var defMenu = '';\n\n        if (compactMenu === true) {\n          defMenu = 'collapsed';\n        }\n\n        if ($body.data('menu') == 'vertical-menu-modern') {\n          var menuToggle = '';\n          if (menuToggle === \"false\") {\n            this.change('collapsed');\n          } else {\n            this.change(defMenu);\n          }\n        } else {\n          this.change(defMenu);\n        }\n      }\n    },\n\n    drillDownMenu: function (screenSize) {\n      if ($('.drilldown-menu').length) {\n        if (screenSize == 'sm' || screenSize == 'xs') {\n          if ($('#navbar-mobile').attr('aria-expanded') == 'true') {\n\n            $('.drilldown-menu').slidingMenu({\n              backLabel: true\n            });\n          }\n        } else {\n          $('.drilldown-menu').slidingMenu({\n            backLabel: true\n          });\n        }\n      }\n    },\n\n    change: function (defMenu) {\n      var currentBreakpoint = Unison.fetch.now(); // Current Breakpoint\n\n      this.reset();\n\n      var menuType = $body.data('menu');\n\n      if (currentBreakpoint) {\n        switch (currentBreakpoint.name) {\n          case 'xl':\n            if (menuType === 'vertical-overlay-menu') {\n              this.hide();\n            } else {\n              if (defMenu === 'collapsed')\n                this.collapse(defMenu);\n              else\n                this.expand();\n            }\n            break;\n          case 'lg':\n            if (menuType === 'vertical-overlay-menu' || menuType === 'vertical-menu-modern' || menuType === 'horizontal-menu') {\n              this.hide();\n            } else {\n              this.collapse();\n            }\n            break;\n          case 'md':\n          case 'sm':\n            this.hide();\n            break;\n          case 'xs':\n            this.hide();\n            break;\n        }\n      }\n\n      // On the small and extra small screen make them overlay menu\n      if (menuType === 'vertical-menu' || menuType === 'vertical-menu-modern') {\n        this.toOverlayMenu(currentBreakpoint.name, menuType);\n      }\n\n      if ($body.is('.horizontal-layout') && !$body.hasClass('.horizontal-menu-demo')) {\n        this.changeMenu(currentBreakpoint.name);\n\n        $('.menu-toggle').removeClass('is-active');\n      }\n\n      // Initialize drill down menu for vertical layouts, for horizontal layouts drilldown menu is intitialized in changemenu function\n      if (menuType != 'horizontal-menu') {\n        // Drill down menu\n        // ------------------------------\n        this.drillDownMenu(currentBreakpoint.name);\n      }\n\n      // Dropdown submenu on large screen on hover For Large screen only\n      // ---------------------------------------------------------------\n      if (currentBreakpoint.name == 'xl') {\n        $('body[data-open=\"hover\"] .header-navbar .dropdown').on('mouseenter', function () {\n          if (!($(this).hasClass('show'))) {\n            $(this).addClass('show');\n          } else {\n            $(this).removeClass('show');\n          }\n        }).on('mouseleave', function (event) {\n          $(this).removeClass('show');\n        });\n\n        $('body[data-open=\"hover\"] .dropdown a').on('click', function (e) {\n          if (menuType == 'horizontal-menu') {\n            var $this = $(this);\n            if ($this.hasClass('dropdown-toggle')) {\n              return false;\n            }\n          }\n        });\n      }\n\n      // Added data attribute brand-center for navbar-brand-center\n      // TODO:AJ: Shift this feature in JADE.\n      if ($('.header-navbar').hasClass('navbar-brand-center')) {\n        $('.header-navbar').attr('data-nav', 'brand-center');\n      }\n      if (currentBreakpoint.name == 'sm' || currentBreakpoint.name == 'xs') {\n        $('.header-navbar[data-nav=brand-center]').removeClass('navbar-brand-center');\n      } else {\n        $('.header-navbar[data-nav=brand-center]').addClass('navbar-brand-center');\n      }\n      // On screen width change, current active menu in horizontal\n      if (currentBreakpoint.name == 'xl' && menuType == 'horizontal-menu') {\n        $(\".main-menu-content\").find('li.active').parents('li').addClass('sidebar-group-active active');\n      }\n\n      if (currentBreakpoint.name !== 'xl' && menuType == 'horizontal-menu') {\n        $(\"#navbar-type\").toggleClass('d-none d-xl-block');\n      }\n\n      // Dropdown submenu on small screen on click\n      // --------------------------------------------------\n      $('ul.dropdown-menu [data-toggle=dropdown]').on('click', function (event) {\n        if ($(this).siblings('ul.dropdown-menu').length > 0) {\n          event.preventDefault();\n        }\n        event.stopPropagation();\n        $(this).parent().siblings().removeClass('show');\n        $(this).parent().toggleClass('show');\n      });\n\n\n      // Horizontal layout submenu drawer scrollbar\n      if (menuType == 'horizontal-menu') {\n        $('li.dropdown-submenu').on('mouseenter', function () {\n          if (!$(this).parent('.dropdown').hasClass('show')) {\n            $(this).removeClass('openLeft');\n          }\n          var dd = $(this).find('.dropdown-menu');\n          if (dd) {\n            var pageHeight = $(window).height(),\n              // ddTop = dd.offset().top,\n              ddTop = $(this).position().top,\n              ddLeft = dd.offset().left,\n              ddWidth = dd.width(),\n              ddHeight = dd.height();\n            if (((pageHeight - ddTop) - ddHeight - 28) < 1) {\n              var maxHeight = (pageHeight - ddTop - 170);\n              $(this).find('.dropdown-menu').css({\n                'max-height': maxHeight + 'px',\n                'overflow-y': 'auto',\n                'overflow-x': 'hidden'\n              });\n              var menu_content = new PerfectScrollbar('li.dropdown-submenu.show .dropdown-menu', {\n                wheelPropagation: false\n              });\n            }\n            // Add class to horizontal sub menu if screen width is small\n            if (ddLeft + ddWidth - (window.innerWidth - 16) >= 0) {\n              $(this).addClass('openLeft');\n            }\n          }\n        });\n        $('.theme-layouts').find('.semi-dark').hide();\n        $('#customizer-navbar-colors').hide();\n      }\n\n\n      // Horizontal Fixed Nav Sticky hight issue on small screens\n      // if (menuType == 'horizontal-menu') {\n      //   if (currentBreakpoint.name == 'sm' || currentBreakpoint.name == 'xs') {\n      //     if ($(\".menu-fixed\").length) {\n      //       $(\".menu-fixed\").unstick();\n      //     }\n      //   }\n      //   else {\n      //     if ($(\".navbar-fixed\").length) {\n      //       $(\".navbar-fixed\").sticky();\n      //     }\n      //   }\n      // }\n\n      /********************************************\n       *             Searchable Menu               *\n       ********************************************/\n\n      function searchMenu(list) {\n\n        var input = $(\".menu-search\");\n        $(input)\n          .change(function () {\n            var filter = $(this).val();\n            if (filter) {\n              // Hide Main Navigation Headers\n              $('.navigation-header').hide();\n              // this finds all links in a list that contain the input,\n              // and hide the ones not containing the input while showing the ones that do\n              $(list).find(\"li a:not(:Contains(\" + filter + \"))\").hide().parent().hide();\n              // $(list).find(\"li a:Contains(\" + filter + \")\").show().parents('li').show().addClass('open').closest('li').children('a').show();\n              var searchFilter = $(list).find(\"li a:Contains(\" + filter + \")\");\n              if (searchFilter.parent().hasClass('has-sub')) {\n                searchFilter.show()\n                  .parents('li').show()\n                  .addClass('open')\n                  .closest('li')\n                  .children('a').show()\n                  .children('li').show();\n\n                // searchFilter.parents('li').find('li').show().children('a').show();\n                if (searchFilter.siblings('ul').length > 0) {\n                  searchFilter.siblings('ul').children('li').show().children('a').show();\n                }\n\n              } else {\n                searchFilter.show().parents('li').show().addClass('open').closest('li').children('a').show();\n              }\n            } else {\n              // return to default\n              $('.navigation-header').show();\n              $(list).find(\"li a\").show().parent().show().removeClass('open');\n            }\n            $.app.menu.manualScroller.update();\n            return false;\n          })\n          .keyup(function () {\n            // fire the above change event after every letter\n            $(this).change();\n          });\n      }\n\n      if (menuType === 'vertical-menu' || menuType === 'vertical-overlay-menu') {\n        // custom css expression for a case-insensitive contains()\n        jQuery.expr[':'].Contains = function (a, i, m) {\n          return (a.textContent || a.innerText || \"\").toUpperCase().indexOf(m[3].toUpperCase()) >= 0;\n        };\n\n        searchMenu($(\"#main-menu-navigation\"));\n      }\n    },\n\n    transit: function (callback1, callback2) {\n      var menuObj = this;\n      $body.addClass('changing-menu');\n\n      callback1.call(menuObj);\n\n      if ($body.hasClass('vertical-layout')) {\n        if ($body.hasClass('menu-open') || $body.hasClass('menu-expanded')) {\n          $('.menu-toggle').addClass('is-active');\n\n          // Show menu header search when menu is normally visible\n          if ($body.data('menu') === 'vertical-menu') {\n            if ($('.main-menu-header')) {\n              $('.main-menu-header').show();\n            }\n          }\n        } else {\n          $('.menu-toggle').removeClass('is-active');\n\n          // Hide menu header search when only menu icons are visible\n          if ($body.data('menu') === 'vertical-menu') {\n            if ($('.main-menu-header')) {\n              $('.main-menu-header').hide();\n            }\n          }\n        }\n      }\n\n      setTimeout(function () {\n        callback2.call(menuObj);\n        $body.removeClass('changing-menu');\n\n        menuObj.update();\n      }, 500);\n    },\n\n    open: function () {\n      this.transit(function () {\n        $body.removeClass('menu-hide menu-collapsed').addClass('menu-open');\n        this.hidden = false;\n        this.expanded = true;\n\n        if ($body.hasClass('vertical-overlay-menu')) {\n          $('.sidenav-overlay').removeClass('d-none').addClass('d-block');\n          $('body').css('overflow', 'hidden');\n        }\n      }, function () {\n        if (!$('.main-menu').hasClass('menu-native-scroll') && $('.main-menu').hasClass('menu-fixed')) {\n          this.manualScroller.enable();\n          $('.main-menu-content').css('height', $(window).height() - $('.header-navbar').height() - $('.main-menu-header').outerHeight() - $('.main-menu-footer').outerHeight());\n          // this.manualScroller.update();\n        }\n\n        if (!$body.hasClass('vertical-overlay-menu')) {\n          $('.sidenav-overlay').removeClass('d-block d-none');\n          $('body').css('overflow', 'auto');\n        }\n      });\n    },\n\n    hide: function () {\n\n      this.transit(function () {\n        $body.removeClass('menu-open menu-expanded').addClass('menu-hide');\n        this.hidden = true;\n        this.expanded = false;\n\n        if ($body.hasClass('vertical-overlay-menu')) {\n          $('.sidenav-overlay').removeClass('d-block').addClass('d-none');\n          $('body').css('overflow', 'auto');\n        }\n      }, function () {\n        if (!$('.main-menu').hasClass('menu-native-scroll') && $('.main-menu').hasClass('menu-fixed')) {\n          this.manualScroller.enable();\n        }\n\n        if (!$body.hasClass('vertical-overlay-menu')) {\n          $('.sidenav-overlay').removeClass('d-block d-none');\n          $('body').css('overflow', 'auto');\n        }\n      });\n    },\n\n    expand: function () {\n      if (this.expanded === false) {\n        if ($body.data('menu') == 'vertical-menu-modern') {\n          $('.modern-nav-toggle').find('.toggle-icon')\n            .removeClass('feather icon-circle').addClass('feather icon-disc');\n        }\n        this.transit(function () {\n          $body.removeClass('menu-collapsed').addClass('menu-expanded');\n          this.collapsed = false;\n          this.expanded = true;\n\n          $('.sidenav-overlay').removeClass('d-block d-none');\n        }, function () {\n\n          if (($('.main-menu').hasClass('menu-native-scroll') || $body.data('menu') == 'horizontal-menu')) {\n            this.manualScroller.disable();\n          } else {\n            if ($('.main-menu').hasClass('menu-fixed'))\n              this.manualScroller.enable();\n          }\n\n          if (($body.data('menu') == 'vertical-menu' || $body.data('menu') == 'vertical-menu-modern') && $('.main-menu').hasClass('menu-fixed')) {\n            $('.main-menu-content').css('height', $(window).height() - $('.header-navbar').height() - $('.main-menu-header').outerHeight() - $('.main-menu-footer').outerHeight());\n            // this.manualScroller.update();\n          }\n\n        });\n      }\n    },\n\n    collapse: function (defMenu) {\n      if (this.collapsed === false) {\n        if ($body.data('menu') == 'vertical-menu-modern') {\n          $('.modern-nav-toggle').find('.toggle-icon')\n            .removeClass('feather icon-disc').addClass('feather icon-circle');\n        }\n        this.transit(function () {\n          $body.removeClass('menu-expanded').addClass('menu-collapsed');\n          this.collapsed = true;\n          this.expanded = false;\n\n          $('.content-overlay').removeClass('d-block d-none');\n        }, function () {\n\n          if (($body.data('menu') == 'horizontal-menu') && $body.hasClass('vertical-overlay-menu')) {\n            if ($('.main-menu').hasClass('menu-fixed'))\n              this.manualScroller.enable();\n          }\n          if (($body.data('menu') == 'vertical-menu' || $body.data('menu') == 'vertical-menu-modern') && $('.main-menu').hasClass('menu-fixed')) {\n            $('.main-menu-content').css('height', $(window).height() - $('.header-navbar').height());\n            // this.manualScroller.update();\n          }\n          if ($body.data('menu') == 'vertical-menu-modern') {\n            if ($('.main-menu').hasClass('menu-fixed'))\n              this.manualScroller.enable();\n          }\n        });\n      }\n    },\n\n    toOverlayMenu: function (screen, menuType) {\n      var menu = $body.data('menu');\n      if (menuType == 'vertical-menu-modern') {\n        if (screen == 'lg' || screen == 'md' || screen == 'sm' || screen == 'xs') {\n          if ($body.hasClass(menu)) {\n            $body.removeClass(menu).addClass('vertical-overlay-menu');\n          }\n        } else {\n          if ($body.hasClass('vertical-overlay-menu')) {\n            $body.removeClass('vertical-overlay-menu').addClass(menu);\n          }\n        }\n      } else {\n        if (screen == 'sm' || screen == 'xs') {\n          if ($body.hasClass(menu)) {\n            $body.removeClass(menu).addClass('vertical-overlay-menu');\n          }\n        } else {\n          if ($body.hasClass('vertical-overlay-menu')) {\n            $body.removeClass('vertical-overlay-menu').addClass(menu);\n          }\n        }\n      }\n    },\n\n    changeMenu: function (screen) {\n      // Replace menu html\n      $('div[data-menu=\"menu-wrapper\"]').html('');\n      $('div[data-menu=\"menu-wrapper\"]').html(menuWrapper_el);\n\n      var menuWrapper = $('div[data-menu=\"menu-wrapper\"]'),\n        menuContainer = $('div[data-menu=\"menu-container\"]'),\n        menuNavigation = $('ul[data-menu=\"menu-navigation\"]'),\n        /*megaMenu           = $('li[data-menu=\"megamenu\"]'),\n        megaMenuCol        = $('li[data-mega-col]'),*/\n        dropdownMenu = $('li[data-menu=\"dropdown\"]'),\n        dropdownSubMenu = $('li[data-menu=\"dropdown-submenu\"]');\n\n      if (screen === 'xl') {\n\n        // Change body classes\n        $body.removeClass('vertical-layout vertical-overlay-menu fixed-navbar').addClass($body.data('menu'));\n\n        // Remove navbar-fix-top class on large screens\n        $('nav.header-navbar').removeClass('fixed-top');\n\n        // Change menu wrapper, menu container, menu navigation classes\n        menuWrapper.removeClass().addClass(menuWrapperClasses);\n\n        // Intitialize drill down menu for horizontal layouts\n        // --------------------------------------------------\n        this.drillDownMenu(screen);\n\n        $('a.dropdown-item.nav-has-children').on('click', function () {\n          event.preventDefault();\n          event.stopPropagation();\n        });\n        $('a.dropdown-item.nav-has-parent').on('click', function () {\n          event.preventDefault();\n          event.stopPropagation();\n        });\n      } else {\n        // Change body classes\n        $body.removeClass($body.data('menu')).addClass('vertical-layout vertical-overlay-menu fixed-navbar');\n\n        // Add navbar-fix-top class on small screens\n        $('nav.header-navbar').addClass('fixed-top');\n\n        // Change menu wrapper, menu container, menu navigation classes\n        menuWrapper.removeClass().addClass('main-menu menu-light menu-fixed menu-shadow');\n        // menuContainer.removeClass().addClass('main-menu-content');\n        menuNavigation.removeClass().addClass('navigation navigation-main');\n\n        // If Dropdown Menu\n        dropdownMenu.removeClass('dropdown').addClass('has-sub');\n        dropdownMenu.find('a').removeClass('dropdown-toggle nav-link');\n        dropdownMenu.children('ul').find('a').removeClass('dropdown-item');\n        dropdownMenu.find('ul').removeClass('dropdown-menu');\n        dropdownSubMenu.removeClass().addClass('has-sub');\n\n        $.app.nav.init();\n\n        // Dropdown submenu on small screen on click\n        // --------------------------------------------------\n        $('ul.dropdown-menu [data-toggle=dropdown]').on('click', function (event) {\n          event.preventDefault();\n          event.stopPropagation();\n          $(this).parent().siblings().removeClass('open');\n          $(this).parent().toggleClass('open');\n        });\n\n        $(\".main-menu-content\").find('li.active').parents('li').addClass('sidebar-group-active');\n\n        $(\".main-menu-content\").find(\"li.active\").closest(\"li.nav-item\").addClass(\"open\");\n      }\n    },\n\n    toggle: function () {\n      var currentBreakpoint = Unison.fetch.now(); // Current Breakpoint\n      var collapsed = this.collapsed;\n      var expanded = this.expanded;\n      var hidden = this.hidden;\n      var menu = $body.data('menu');\n\n      switch (currentBreakpoint.name) {\n        case 'xl':\n          if (expanded === true) {\n            if (menu == 'vertical-overlay-menu') {\n              this.hide();\n            } else {\n              this.collapse();\n            }\n          } else {\n            if (menu == 'vertical-overlay-menu') {\n              this.open();\n            } else {\n              this.expand();\n            }\n          }\n          break;\n        case 'lg':\n          if (expanded === true) {\n            if (menu == 'vertical-overlay-menu' || menu == 'vertical-menu-modern' || menu == 'horizontal-menu') {\n              this.hide();\n            } else {\n              this.collapse();\n            }\n          } else {\n            if (menu == 'vertical-overlay-menu' || menu == 'vertical-menu-modern' || menu == 'horizontal-menu') {\n              this.open();\n            } else {\n              this.expand();\n            }\n          }\n          break;\n        case 'md':\n        case 'sm':\n          if (hidden === true) {\n            this.open();\n          } else {\n            this.hide();\n          }\n          break;\n        case 'xs':\n          if (hidden === true) {\n            this.open();\n          } else {\n            this.hide();\n          }\n          break;\n      }\n\n      // Re-init sliding menu to update width\n      this.drillDownMenu(currentBreakpoint.name);\n    },\n\n    update: function () {\n      this.manualScroller.update();\n    },\n\n    reset: function () {\n      this.expanded = false;\n      this.collapsed = false;\n      this.hidden = false;\n      $body.removeClass('menu-hide menu-open menu-collapsed menu-expanded');\n    },\n  };\n\n  // Navigation Menu\n  $.app.nav = {\n    container: $('.navigation-main'),\n    initialized: false,\n    navItem: $('.navigation-main').find('li').not('.navigation-category'),\n\n    config: {\n      speed: 300,\n    },\n\n    init: function (config) {\n      this.initialized = true; // Set to true when initialized\n      $.extend(this.config, config);\n\n      this.bind_events();\n    },\n\n    bind_events: function () {\n      var menuObj = this;\n\n      $('.navigation-main').on('mouseenter.app.menu', 'li', function () {\n        var $this = $(this);\n        $('.hover', '.navigation-main').removeClass('hover');\n        if ($body.hasClass('menu-collapsed') && $body.data('menu') != 'vertical-menu-modern') {\n          $('.main-menu-content').children('span.menu-title').remove();\n          $('.main-menu-content').children('a.menu-title').remove();\n          $('.main-menu-content').children('ul.menu-content').remove();\n\n          // Title\n          var menuTitle = $this.find('span.menu-title').clone(),\n            tempTitle,\n            tempLink;\n          if (!$this.hasClass('has-sub')) {\n            tempTitle = $this.find('span.menu-title').text();\n            tempLink = $this.children('a').attr('href');\n            if (tempTitle !== '') {\n              menuTitle = $(\"<a>\");\n              menuTitle.attr(\"href\", tempLink);\n              menuTitle.attr(\"title\", tempTitle);\n              menuTitle.text(tempTitle);\n              menuTitle.addClass(\"menu-title\");\n            }\n          }\n          // menu_header_height = ($('.main-menu-header').length) ? $('.main-menu-header').height() : 0,\n          // fromTop = menu_header_height + $this.position().top + parseInt($this.css( \"border-top\" ),10);\n          var fromTop;\n          if ($this.css(\"border-top\")) {\n            fromTop = $this.position().top + parseInt($this.css(\"border-top\"), 10);\n          } else {\n            fromTop = $this.position().top;\n          }\n          if ($body.data('menu') !== 'vertical-compact-menu') {\n            menuTitle.appendTo('.main-menu-content').css({\n              position: 'fixed',\n              top: fromTop,\n            });\n          }\n\n          // Content\n          if ($this.hasClass('has-sub') && $this.hasClass('nav-item')) {\n            var menuContent = $this.children('ul:first');\n            menuObj.adjustSubmenu($this);\n          }\n        }\n        $this.addClass('hover');\n      }).on('mouseleave.app.menu', 'li', function () {\n        // $(this).removeClass('hover');\n      }).on('active.app.menu', 'li', function (e) {\n        $(this).addClass('active');\n        e.stopPropagation();\n      }).on('deactive.app.menu', 'li.active', function (e) {\n        $(this).removeClass('active');\n        e.stopPropagation();\n      }).on('open.app.menu', 'li', function (e) {\n\n        var $listItem = $(this);\n        $listItem.addClass('open');\n\n        menuObj.expand($listItem);\n\n        // If menu collapsible then do not take any action\n        if ($('.main-menu').hasClass('menu-collapsible')) {\n          return false;\n        }\n        // If menu accordion then close all except clicked once\n        else {\n          $listItem.siblings('.open').find('li.open').trigger('close.app.menu');\n          $listItem.siblings('.open').trigger('close.app.menu');\n        }\n\n        e.stopPropagation();\n      }).on('close.app.menu', 'li.open', function (e) {\n        var $listItem = $(this);\n\n        $listItem.removeClass('open');\n        menuObj.collapse($listItem);\n\n        e.stopPropagation();\n      }).on('click.app.menu', 'li', function (e) {\n        var $listItem = $(this);\n        if ($listItem.is('.disabled')) {\n          e.preventDefault();\n        } else {\n          if ($body.hasClass('menu-collapsed') && $body.data('menu') != 'vertical-menu-modern') {\n            e.preventDefault();\n          } else {\n            if ($listItem.has('ul').length) {\n              if ($listItem.is('.open')) {\n                $listItem.trigger('close.app.menu');\n              } else {\n                $listItem.trigger('open.app.menu');\n              }\n            } else {\n              if (!$listItem.is('.active')) {\n                $listItem.siblings('.active').trigger('deactive.app.menu');\n                $listItem.trigger('active.app.menu');\n              }\n            }\n          }\n        }\n\n        e.stopPropagation();\n      });\n\n\n      $('.navbar-header, .main-menu').on('mouseenter', modernMenuExpand).on('mouseleave', modernMenuCollapse);\n\n      function modernMenuExpand() {\n        if ($body.data('menu') == 'vertical-menu-modern') {\n          $('.main-menu, .navbar-header').addClass('expanded');\n          if ($body.hasClass('menu-collapsed')) {\n            if ($('.main-menu li.open').length === 0) {\n              $(\".main-menu-content\").find('li.active').parents('li').addClass('open');\n            }\n            var $listItem = $('.main-menu li.menu-collapsed-open'),\n              $subList = $listItem.children('ul');\n\n            $subList.hide().slideDown(200, function () {\n              $(this).css('display', '');\n            });\n\n            $listItem.addClass('open').removeClass('menu-collapsed-open');\n            // $.app.menu.changeLogo('expand');\n          }\n        }\n      }\n\n      function modernMenuCollapse() {\n        if ($body.hasClass('menu-collapsed') && $body.data('menu') == 'vertical-menu-modern') {\n          setTimeout(function () {\n            if ($('.main-menu:hover').length === 0 && $('.navbar-header:hover').length === 0) {\n\n              $('.main-menu, .navbar-header').removeClass('expanded');\n              if ($body.hasClass('menu-collapsed')) {\n                var $listItem = $('.main-menu li.open'),\n                  $subList = $listItem.children('ul');\n                $listItem.addClass('menu-collapsed-open');\n\n                $subList.show().slideUp(200, function () {\n                  $(this).css('display', '');\n                });\n\n                $listItem.removeClass('open');\n                // $.app.menu.changeLogo();\n              }\n            }\n          }, 1);\n        }\n      }\n\n      $('.main-menu-content').on('mouseleave', function () {\n        if ($body.hasClass('menu-collapsed')) {\n          $('.main-menu-content').children('span.menu-title').remove();\n          $('.main-menu-content').children('a.menu-title').remove();\n          $('.main-menu-content').children('ul.menu-content').remove();\n        }\n        $('.hover', '.navigation-main').removeClass('hover');\n      });\n\n      // If list item has sub menu items then prevent redirection.\n      $('.navigation-main li.has-sub > a').on('click', function (e) {\n        e.preventDefault();\n      });\n\n      $('ul.menu-content').on('click', 'li', function (e) {\n        var $listItem = $(this);\n        if ($listItem.is('.disabled')) {\n          e.preventDefault();\n        } else {\n          if ($listItem.has('ul')) {\n            if ($listItem.is('.open')) {\n              $listItem.removeClass('open');\n              menuObj.collapse($listItem);\n            } else {\n              $listItem.addClass('open');\n\n              menuObj.expand($listItem);\n\n              // If menu collapsible then do not take any action\n              if ($('.main-menu').hasClass('menu-collapsible')) {\n                return false;\n              }\n              // If menu accordion then close all except clicked once\n              else {\n                $listItem.siblings('.open').find('li.open').trigger('close.app.menu');\n                $listItem.siblings('.open').trigger('close.app.menu');\n              }\n\n              e.stopPropagation();\n            }\n          } else {\n            if (!$listItem.is('.active')) {\n              $listItem.siblings('.active').trigger('deactive.app.menu');\n              $listItem.trigger('active.app.menu');\n            }\n          }\n        }\n\n        e.stopPropagation();\n      });\n    },\n\n    /**\n     * Ensure an admin submenu is within the visual viewport.\n     * @param {jQuery} $menuItem The parent menu item containing the submenu.\n     */\n    adjustSubmenu: function ($menuItem) {\n      var menuHeaderHeight, menutop, topPos, winHeight,\n        bottomOffset, subMenuHeight, popOutMenuHeight, borderWidth, scroll_theme,\n        $submenu = $menuItem.children('ul:first'),\n        ul = $submenu.clone(true);\n\n      menuHeaderHeight = $('.main-menu-header').height();\n      menutop = $menuItem.position().top;\n      winHeight = $window.height() - $('.header-navbar').height();\n      borderWidth = 0;\n      subMenuHeight = $submenu.height();\n\n      if (parseInt($menuItem.css(\"border-top\"), 10) > 0) {\n        borderWidth = parseInt($menuItem.css(\"border-top\"), 10);\n      }\n\n      popOutMenuHeight = winHeight - menutop - $menuItem.height() - 30;\n      scroll_theme = ($('.main-menu').hasClass('menu-dark')) ? 'light' : 'dark';\n\n      topPos = menutop + $menuItem.height() + borderWidth;\n\n      ul.addClass('menu-popout').appendTo('.main-menu-content').css({\n        'top': topPos,\n        'position': 'fixed',\n        'max-height': popOutMenuHeight,\n      });\n\n      var menu_content = new PerfectScrollbar('.main-menu-content > ul.menu-content', {\n        wheelPropagation: false\n      });\n    },\n\n    collapse: function ($listItem, callback) {\n      var $subList = $listItem.children('ul');\n\n      $subList.show().slideUp($.app.nav.config.speed, function () {\n        $(this).css('display', '');\n\n        $(this).find('> li').removeClass('is-shown');\n\n        if (callback) {\n          callback();\n        }\n\n        $.app.nav.container.trigger('collapsed.app.menu');\n      });\n    },\n\n    expand: function ($listItem, callback) {\n      var $subList = $listItem.children('ul');\n      var $children = $subList.children('li').addClass('is-hidden');\n\n      $subList.hide().slideDown($.app.nav.config.speed, function () {\n        $(this).css('display', '');\n\n        if (callback) {\n          callback();\n        }\n\n        $.app.nav.container.trigger('expanded.app.menu');\n      });\n\n      setTimeout(function () {\n        $children.addClass('is-shown');\n        $children.removeClass('is-hidden');\n      }, 0);\n    },\n\n    refresh: function () {\n      $.app.nav.container.find('.open').removeClass('open');\n    },\n  };\n\n})(window, document, jQuery);\n\n// We listen to the resize event\nwindow.addEventListener('resize', function() {\n  // We execute the same script as before\n  var vh = window.innerHeight * 0.01;\n  document.documentElement.style.setProperty('--vh', vh + \"px\");\n});"
  },
  {
    "path": "public/backend/js/core/app.js",
    "content": "/*=========================================================================================\n  File Name: app.js\n  Description: Template related app JS.\n  ----------------------------------------------------------------------------------------\n  Item Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n  Author: Pixinvent\n  Author URL: hhttp://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n\n(function (window, document, $) {\n  \"use strict\";\n  var $html = $(\"html\");\n  var $body = $(\"body\");\n  var $danger = \"#ea5455\";\n  var $primary = \"#7367f0\";\n  var $textcolor = \"#4e5154\";\n\n  $(window).on(\"load\", function () {\n    var rtl;\n    var compactMenu = false; // Set it to true, if you want default menu to be compact\n\n    if ($body.hasClass(\"menu-collapsed\")) {\n      compactMenu = true;\n    }\n\n    if ($(\"html\").data(\"textdirection\") == \"rtl\") {\n      rtl = true;\n    }\n\n    setTimeout(function () {\n      $html.removeClass(\"loading\").addClass(\"loaded\");\n    }, 1200);\n\n    $.app.menu.init(compactMenu);\n\n    // Navigation configurations\n    var config = {\n      speed: 300 // set speed to expand / collpase menu\n    };\n    if ($.app.nav.initialized === false) {\n      $.app.nav.init(config);\n    }\n\n    Unison.on(\"change\", function (bp) {\n      $.app.menu.change();\n    });\n\n    // Tooltip Initialization\n    $('[data-toggle=\"tooltip\"]').tooltip({\n      container: \"body\"\n    });\n\n    // Top Navbars - Hide on Scroll\n    if ($(\".navbar-hide-on-scroll\").length > 0) {\n      $(\".navbar-hide-on-scroll.fixed-top\").headroom({\n        offset: 205,\n        tolerance: 5,\n        classes: {\n          // when element is initialised\n          initial: \"headroom\",\n          // when scrolling up\n          pinned: \"headroom--pinned-top\",\n          // when scrolling down\n          unpinned: \"headroom--unpinned-top\"\n        }\n      });\n      // Bottom Navbars - Hide on Scroll\n      $(\".navbar-hide-on-scroll.fixed-bottom\").headroom({\n        offset: 205,\n        tolerance: 5,\n        classes: {\n          // when element is initialised\n          initial: \"headroom\",\n          // when scrolling up\n          pinned: \"headroom--pinned-bottom\",\n          // when scrolling down\n          unpinned: \"headroom--unpinned-bottom\"\n        }\n      });\n    }\n\n    // Collapsible Card\n    $('a[data-action=\"collapse\"]').on(\"click\", function (e) {\n      e.preventDefault();\n      $(this)\n        .closest(\".card\")\n        .children(\".card-content\")\n        .collapse(\"toggle\");\n      // Adding bottom padding on card collapse\n      $(this)\n        .closest(\".card\")\n        .children(\".card-header\")\n        .css(\"padding-bottom\", \"1.5rem\");\n      $(this)\n        .closest(\".card\")\n        .find('[data-action=\"collapse\"]')\n        .toggleClass(\"rotate\");\n    });\n\n    // Toggle fullscreen\n    $('a[data-action=\"expand\"]').on(\"click\", function (e) {\n      e.preventDefault();\n      $(this)\n        .closest(\".card\")\n        .find('[data-action=\"expand\"] i')\n        .toggleClass(\"icon-maximize icon-minimize\");\n      $(this)\n        .closest(\".card\")\n        .toggleClass(\"card-fullscreen\");\n    });\n\n    //  Notifications & messages scrollable\n    $(\".scrollable-container\").each(function () {\n      var scrollable_container = new PerfectScrollbar($(this)[0], {\n        wheelPropagation: false\n      });\n    });\n\n    // Reload Card\n    $('a[data-action=\"reload\"]').on(\"click\", function () {\n      var block_ele = $(this)\n        .closest(\".card\")\n        .find(\".card-content\");\n      var reloadActionOverlay;\n      if ($body.hasClass(\"dark-layout\")) {\n        var reloadActionOverlay = \"#10163a\";\n      } else {\n        var reloadActionOverlay = \"#fff\";\n      }\n      // Block Element\n      block_ele.block({\n        message: '<div class=\"feather icon-refresh-cw icon-spin font-medium-2 text-primary\"></div>',\n        timeout: 2000, //unblock after 2 seconds\n        overlayCSS: {\n          backgroundColor: reloadActionOverlay,\n          cursor: \"wait\"\n        },\n        css: {\n          border: 0,\n          padding: 0,\n          backgroundColor: \"none\"\n        }\n      });\n    });\n\n    // Close Card\n    $('a[data-action=\"close\"]').on(\"click\", function () {\n      $(this).closest(\".card\").removeClass().slideUp(\"fast\");\n    });\n\n    // Match the height of each card in a row\n    setTimeout(function () {\n      $(\".row.match-height\").each(function () {\n        $(this).find(\".card\").not(\".card .card\").matchHeight(); // Not .card .card prevents collapsible cards from taking height\n      });\n    }, 500);\n\n    $('.card .heading-elements a[data-action=\"collapse\"]').on(\n      \"click\",\n      function () {\n        var $this = $(this),\n          card = $this.closest(\".card\");\n        var cardHeight;\n\n        if (parseInt(card[0].style.height, 10) > 0) {\n          cardHeight = card.css(\"height\");\n          card.css(\"height\", \"\").attr(\"data-height\", cardHeight);\n        } else {\n          if (card.data(\"height\")) {\n            cardHeight = card.data(\"height\");\n            card.css(\"height\", cardHeight).attr(\"data-height\", \"\");\n          }\n        }\n      }\n    );\n\n    // Add sidebar group active class to active menu\n    $(\".main-menu-content\").find(\"li.active\").parents(\"li\").addClass(\"sidebar-group-active\");\n\n    // Add open class to parent list item if subitem is active except compact menu\n    var menuType = $body.data(\"menu\");\n    if (menuType != \"horizontal-menu\" && compactMenu === false) {\n      $(\".main-menu-content\").find(\"li.active\").parents(\"li\").addClass(\"open\");\n    }\n    if (menuType == \"horizontal-menu\") {\n      $(\".main-menu-content\").find(\"li.active\").parents(\"li:not(.nav-item)\").addClass(\"open\");\n      $(\".main-menu-content\").find('li.active').closest('li.nav-item').addClass('sidebar-group-active open');\n      // $(\".main-menu-content\")\n      //   .find(\"li.active\")\n      //   .parents(\"li\")\n      //   .addClass(\"active\");\n    }\n\n    //card heading actions buttons small screen support\n    $(\".heading-elements-toggle\").on(\"click\", function () {\n      $(this)\n        .next(\".heading-elements\")\n        .toggleClass(\"visible\");\n    });\n\n    //  Dynamic height for the chartjs div for the chart animations to work\n    var chartjsDiv = $(\".chartjs\"),\n      canvasHeight = chartjsDiv.children(\"canvas\").attr(\"height\"),\n      mainMenu = $(\".main-menu\");\n    chartjsDiv.css(\"height\", canvasHeight);\n\n    if ($body.hasClass(\"boxed-layout\")) {\n      if ($body.hasClass(\"vertical-overlay-menu\")) {\n        var menuWidth = mainMenu.width();\n        var contentPosition = $(\".app-content\").position().left;\n        var menuPositionAdjust = contentPosition - menuWidth;\n        if ($body.hasClass(\"menu-flipped\")) {\n          mainMenu.css(\"right\", menuPositionAdjust + \"px\");\n        } else {\n          mainMenu.css(\"left\", menuPositionAdjust + \"px\");\n        }\n      }\n    }\n\n    //Custom File Input\n    $(\".custom-file input\").change(function (e) {\n      $(this)\n        .next(\".custom-file-label\")\n        .html(e.target.files[0].name);\n    });\n\n    /* Text Area Counter Set Start */\n\n    $(\".char-textarea\").on(\"keyup\", function (event) {\n      checkTextAreaMaxLength(this, event);\n      // to later change text color in dark layout\n      $(this).addClass(\"active\");\n    });\n\n    /*\n    Checks the MaxLength of the Textarea\n    -----------------------------------------------------\n    @prerequisite:  textBox = textarea dom element\n            e = textarea event\n                    length = Max length of characters\n    */\n    function checkTextAreaMaxLength(textBox, e) {\n      var maxLength = parseInt($(textBox).data(\"length\")),\n        counterValue = $(\".counter-value\"),\n        charTextarea = $(\".char-textarea\");\n\n      if (!checkSpecialKeys(e)) {\n        if (textBox.value.length < maxLength - 1)\n          textBox.value = textBox.value.substring(0, maxLength);\n      }\n      $(\".char-count\").html(textBox.value.length);\n\n      if (textBox.value.length > maxLength) {\n        counterValue.css(\"background-color\", $danger);\n        charTextarea.css(\"color\", $danger);\n        // to change text color after limit is maxedout out\n        charTextarea.addClass(\"max-limit\");\n      } else {\n        counterValue.css(\"background-color\", $primary);\n        charTextarea.css(\"color\", $textcolor);\n        charTextarea.removeClass(\"max-limit\");\n      }\n\n      return true;\n    }\n    /*\n    Checks if the keyCode pressed is inside special chars\n    -------------------------------------------------------\n    @prerequisite:  e = e.keyCode object for the key pressed\n    */\n    function checkSpecialKeys(e) {\n      if (\n        e.keyCode != 8 &&\n        e.keyCode != 46 &&\n        e.keyCode != 37 &&\n        e.keyCode != 38 &&\n        e.keyCode != 39 &&\n        e.keyCode != 40\n      )\n        return false;\n      else return true;\n    }\n\n    $(\".content-overlay\").on(\"click\", function () {\n      $(\".search-list\").removeClass(\"show\");\n      $(\".app-content\").removeClass(\"show-overlay\");\n      $(\".bookmark-wrapper .bookmark-input\").removeClass(\"show\");\n    });\n\n    // To show shadow in main menu when menu scrolls\n    var container = document.getElementsByClassName(\"main-menu-content\");\n    if (container.length > 0) {\n      container[0].addEventListener(\"ps-scroll-y\", function () {\n        if (\n          $(this)\n          .find(\".ps__thumb-y\")\n          .position().top > 0\n        ) {\n          $(\".shadow-bottom\").css(\"display\", \"block\");\n        } else {\n          $(\".shadow-bottom\").css(\"display\", \"none\");\n        }\n      });\n    }\n  });\n\n  // Hide overlay menu on content overlay click on small screens\n  $(document).on(\"click\", \".sidenav-overlay\", function (e) {\n    // Hide menu\n    $.app.menu.hide();\n    return false;\n  });\n\n  // Execute below code only if we find hammer js for touch swipe feature on small screen\n  if (typeof Hammer !== \"undefined\") {\n    // Swipe menu gesture\n    var swipeInElement = document.querySelector(\".drag-target\");\n\n    if ($(swipeInElement).length > 0) {\n      var swipeInMenu = new Hammer(swipeInElement);\n\n      swipeInMenu.on(\"panright\", function (ev) {\n        if ($body.hasClass(\"vertical-overlay-menu\")) {\n          $.app.menu.open();\n          return false;\n        }\n      });\n    }\n\n    // menu swipe out gesture\n    setTimeout(function () {\n      var swipeOutElement = document.querySelector(\".main-menu\");\n      var swipeOutMenu;\n\n      if ($(swipeOutElement).length > 0) {\n        swipeOutMenu = new Hammer(swipeOutElement);\n\n        swipeOutMenu.get(\"pan\").set({\n          direction: Hammer.DIRECTION_ALL,\n          threshold: 100\n        });\n\n        swipeOutMenu.on(\"panleft\", function (ev) {\n          if ($body.hasClass(\"vertical-overlay-menu\")) {\n            $.app.menu.hide();\n            return false;\n          }\n        });\n      }\n    }, 300);\n\n    // menu overlay swipe out gestrue\n    var swipeOutOverlayElement = document.querySelector(\".sidenav-overlay\");\n\n    if ($(swipeOutOverlayElement).length > 0) {\n      var swipeOutOverlayMenu = new Hammer(swipeOutOverlayElement);\n\n      swipeOutOverlayMenu.on(\"panleft\", function (ev) {\n        if ($body.hasClass(\"vertical-overlay-menu\")) {\n          $.app.menu.hide();\n          return false;\n        }\n      });\n    }\n  }\n\n  $(document).on(\"click\", \".menu-toggle, .modern-nav-toggle\", function (e) {\n    e.preventDefault();\n\n    // Toggle menu\n    $.app.menu.toggle();\n\n    setTimeout(function () {\n      $(window).trigger(\"resize\");\n    }, 200);\n\n    if ($(\"#collapse-sidebar-switch\").length > 0) {\n      setTimeout(function () {\n        if ($body.hasClass(\"menu-expanded\") || $body.hasClass(\"menu-open\")) {\n          $(\"#collapse-sidebar-switch\").prop(\"checked\", false);\n        } else {\n          $(\"#collapse-sidebar-switch\").prop(\"checked\", true);\n        }\n      }, 50);\n    }\n\n    // Hides dropdown on click of menu toggle\n    // $('[data-toggle=\"dropdown\"]').dropdown('hide');\n\n    // Hides collapse dropdown on click of menu toggle\n    if (\n      $(\".vertical-overlay-menu .navbar-with-menu .navbar-container .navbar-collapse\").hasClass(\"show\")\n    ) {\n      $(\".vertical-overlay-menu .navbar-with-menu .navbar-container .navbar-collapse\").removeClass(\"show\");\n    }\n\n    return false;\n  });\n\n  // Add Children Class\n  $(\".navigation\")\n    .find(\"li\")\n    .has(\"ul\")\n    .addClass(\"has-sub\");\n\n  $(\".carousel\").carousel({\n    interval: 2000\n  });\n\n  // Page full screen\n  $(\".nav-link-expand\").on(\"click\", function (e) {\n    if (typeof screenfull != \"undefined\") {\n      if (screenfull.isEnabled) {\n        screenfull.toggle();\n      }\n    }\n  });\n  if (typeof screenfull != \"undefined\") {\n    if (screenfull.isEnabled) {\n      $(document).on(screenfull.raw.fullscreenchange, function () {\n        if (screenfull.isFullscreen) {\n          $(\".nav-link-expand\")\n            .find(\"i\")\n            .toggleClass(\"icon-minimize icon-maximize\");\n          $(\"html\").addClass(\"full-screen\");\n        } else {\n          $(\".nav-link-expand\")\n            .find(\"i\")\n            .toggleClass(\"icon-maximize icon-minimize\");\n          $(\"html\").removeClass(\"full-screen\");\n        }\n      });\n    }\n  }\n  $(document).ready(function () {\n    /**********************************\n     *   Form Wizard Step Icon\n     **********************************/\n    $(\".step-icon\").each(function () {\n      var $this = $(this);\n      if ($this.siblings(\"span.step\").length > 0) {\n        $this.siblings(\"span.step\").empty();\n        $(this).appendTo($(this).siblings(\"span.step\"));\n      }\n    });\n  });\n\n  // Update manual scroller when window is resized\n  $(window).resize(function () {\n    $.app.menu.manualScroller.updateHeight();\n  });\n\n  $(\"#sidebar-page-navigation\").on(\"click\", \"a.nav-link\", function (e) {\n    e.preventDefault();\n    e.stopPropagation();\n    var $this = $(this),\n      href = $this.attr(\"href\");\n    var offset = $(href).offset();\n    var scrollto = offset.top - 80; // minus fixed header height\n    $(\"html, body\").animate({\n        scrollTop: scrollto\n      },\n      0\n    );\n    setTimeout(function () {\n      $this\n        .parent(\".nav-item\")\n        .siblings(\".nav-item\")\n        .children(\".nav-link\")\n        .removeClass(\"active\");\n      $this.addClass(\"active\");\n    }, 100);\n  });\n\n  // main menu internationalization\n\n  // init i18n and load language file\n  i18next.use(window.i18nextXHRBackend).init({\n      debug: false,\n      fallbackLng: \"en\",\n      backend: {\n        loadPath: \"../../../app-assets/data/locales/{{lng}}.json\"\n      },\n      returnObjects: true\n    },\n    function (err, t) {\n      // resources have been loaded\n      jqueryI18next.init(i18next, $);\n    }\n  );\n\n  // change language according to data-language of dropdown item\n  $(\".dropdown-language .dropdown-item\").on(\"click\", function () {\n    var $this = $(this);\n    $this.siblings(\".selected\").removeClass(\"selected\");\n    $this.addClass(\"selected\");\n    var selectedLang = $this.text();\n    var selectedFlag = $this.find(\".flag-icon\").attr(\"class\");\n    $(\"#dropdown-flag .selected-language\").text(selectedLang);\n    $(\"#dropdown-flag .flag-icon\")\n      .removeClass()\n      .addClass(selectedFlag);\n    var currentLanguage = $this.data(\"language\");\n    i18next.changeLanguage(currentLanguage, function (err, t) {\n      $(\".main-menu, .horizontal-menu-wrapper\").localize();\n    });\n  });\n\n  /********************* Bookmark & Search ***********************/\n  // This variable is used for mouseenter and mouseleave events of search list\n  var $filename = $(\".search-input input\").data(\"search\"),\n    bookmarkWrapper = $(\".bookmark-wrapper\"),\n    bookmarkStar = $(\".bookmark-wrapper .bookmark-star\"),\n    bookmarkInput = $(\".bookmark-wrapper .bookmark-input\"),\n    navLinkSearch = $(\".nav-link-search\"),\n    searchInput = $(\".search-input\"),\n    searchInputInputfield = $(\".search-input input\"),\n    searchList = $(\".search-input .search-list\"),\n    appContent = $(\".app-content\"),\n    bookmarkSearchList = $(\".bookmark-input .search-list\");\n\n  // Bookmark icon click\n  bookmarkStar.on(\"click\", function (e) {\n    e.stopPropagation();\n    bookmarkInput.toggleClass(\"show\");\n    bookmarkInput.find(\"input\").val(\"\");\n    bookmarkInput.find(\"input\").blur();\n    bookmarkInput.find(\"input\").focus();\n    bookmarkWrapper.find(\".search-list\").addClass(\"show\");\n\n    var arrList = $(\"ul.nav.navbar-nav.bookmark-icons li\"),\n      $arrList = \"\",\n      $activeItemClass = \"\";\n\n    $(\"ul.search-list li\").remove();\n\n    for (var i = 0; i < arrList.length; i++) {\n      if (i === 0) {\n        $activeItemClass = \"current_item\";\n      } else {\n        $activeItemClass = \"\";\n      }\n      $arrList +=\n        '<li class=\"auto-suggestion d-flex align-items-center justify-content-between cursor-pointer ' +\n        $activeItemClass +\n        '\">' +\n        '<a class=\"d-flex align-items-center justify-content-between w-100\" href=' +\n        arrList[i].firstChild.href +\n        \">\" +\n        '<div class=\"d-flex justify-content-start align-items-center\">' +\n        '<span class=\"mr-75 ' +\n        arrList[i].firstChild.firstChild.className +\n        '\"  data-icon=\"' +\n        arrList[i].firstChild.firstChild.className +\n        '\"></span>' +\n        \"<span>\" +\n        arrList[i].firstChild.dataset.originalTitle +\n        \"</span>\" +\n        \"</div>\" +\n        '<span class=\"float-right bookmark-icon feather icon-star warning\"></span>' +\n        \"</a>\" +\n        \"</li>\";\n    }\n    $(\"ul.search-list\").append($arrList);\n  });\n\n  // Navigation Search area Open\n  navLinkSearch.on(\"click\", function () {\n    var $this = $(this);\n    var searchInput = $(this).parent(\".nav-search\").find(\".search-input\");\n    searchInput.addClass(\"open\");\n    searchInputInputfield.focus();\n    searchList.find(\"li\").remove();\n    bookmarkInput.removeClass(\"show\");\n  });\n\n  // Navigation Search area Close\n  $(\".search-input-close i\").on(\"click\", function () {\n    var $this = $(this),\n      searchInput = $(this).closest(\".search-input\");\n    if (searchInput.hasClass(\"open\")) {\n      searchInput.removeClass(\"open\");\n      searchInputInputfield.val(\"\");\n      searchInputInputfield.blur();\n      searchList.removeClass(\"show\");\n      appContent.removeClass(\"show-overlay\");\n    }\n  });\n\n  // Filter\n  if ($('.search-list-main').length) {\n    var searchListMain = new PerfectScrollbar(\".search-list-main\", {\n      wheelPropagation: false\n    });\n  }\n  if ($('.search-list-bookmark').length) {\n    var searchListBookmark = new PerfectScrollbar(\".search-list-bookmark\", {\n      wheelPropagation: false\n    });\n  }\n  // update Perfect Scrollbar on hover\n  $(\".search-list-main\").mouseenter(function () {\n    searchListMain.update();\n  });\n\n  searchInputInputfield.on(\"keyup\", function (e) {\n    $(this).closest(\".search-list\").addClass(\"show\");\n    if (e.keyCode !== 38 && e.keyCode !== 40 && e.keyCode !== 13) {\n      if (e.keyCode == 27) {\n        appContent.removeClass(\"show-overlay\");\n        bookmarkInput.find(\"input\").val(\"\");\n        bookmarkInput.find(\"input\").blur();\n        searchInputInputfield.val(\"\");\n        searchInputInputfield.blur();\n        searchInput.removeClass(\"open\");\n        if (searchInput.hasClass(\"show\")) {\n          $(this).removeClass(\"show\");\n          searchInput.removeClass(\"show\");\n        }\n      }\n\n      // Define variables\n      var value = $(this).val().toLowerCase(), //get values of input on keyup\n        activeClass = \"\",\n        bookmark = false,\n        liList = $(\"ul.search-list li\"); // get all the list items of the search\n      liList.remove();\n      // To check if current is bookmark input\n      if (\n        $(this)\n        .parent()\n        .hasClass(\"bookmark-input\")\n      ) {\n        bookmark = true;\n      }\n\n      // If input value is blank\n      if (value != \"\") {\n        appContent.addClass(\"show-overlay\");\n\n        // condition for bookmark and search input click\n        if (bookmarkInput.focus()) {\n          bookmarkSearchList.addClass(\"show\");\n        } else {\n          searchList.addClass(\"show\");\n          bookmarkSearchList.removeClass(\"show\");\n        }\n        if (bookmark === false) {\n          searchList.addClass(\"show\");\n          bookmarkSearchList.removeClass(\"show\");\n        }\n\n        var $startList = \"\",\n          $otherList = \"\",\n          $htmlList = \"\",\n          $bookmarkhtmlList = \"\",\n          $pageList = '<li class=\" d-flex align-items-center\">' +\n          '<a href=\"#\" class=\"pb-25\">' +\n          '<h6 class=\"text-primary mb-0\">Pages</h6>' +\n          '</a>' +\n          '</li>',\n          $activeItemClass = \"\",\n          $bookmarkIcon = \"\",\n          $defaultList = \"\",\n          a = 0;\n\n        // getting json data from file for search results\n        $.getJSON(\"../../../app-assets/data/\" + $filename + \".json\", function (\n          data\n        ) {\n          for (var i = 0; i < data.listItems.length; i++) {\n            // if current is bookmark then give class to star icon\n            if (bookmark === true) {\n              activeClass = \"\"; // resetting active bookmark class\n              var arrList = $(\"ul.nav.navbar-nav.bookmark-icons li\"),\n                $arrList = \"\";\n              // Loop to check if current seach value match with the bookmarks already there in navbar\n              for (var j = 0; j < arrList.length; j++) {\n                if (\n                  data.listItems[i].name ===\n                  arrList[j].firstChild.dataset.originalTitle\n                ) {\n                  activeClass = \" warning\";\n                  break;\n                } else {\n                  activeClass = \"\";\n                }\n              }\n              $bookmarkIcon =\n                '<span class=\"float-right bookmark-icon feather icon-star' +\n                activeClass +\n                '\"></span>';\n            }\n            // Search list item start with entered letters and create list\n            if (\n              data.listItems[i].name.toLowerCase().indexOf(value) == 0 &&\n              a < 5\n            ) {\n              if (a === 0) {\n                $activeItemClass = \"current_item\";\n              } else {\n                $activeItemClass = \"\";\n              }\n              $startList +=\n                '<li class=\"auto-suggestion d-flex align-items-center justify-content-between cursor-pointer ' +\n                $activeItemClass +\n                '\">' +\n                '<a class=\"d-flex align-items-center justify-content-between w-100\" href=' +\n                data.listItems[i].url +\n                \">\" +\n                '<div class=\"d-flex justify-content-start align-items-center\">' +\n                '<span class=\"mr-75 ' +\n                data.listItems[i].icon +\n                '\" data-icon=\"' +\n                data.listItems[i].icon +\n                '\"></span>' +\n                \"<span>\" +\n                data.listItems[i].name +\n                \"</span>\" +\n                \"</div>\" +\n                $bookmarkIcon +\n                \"</a>\" +\n                \"</li>\";\n              a++;\n            }\n          }\n          for (var i = 0; i < data.listItems.length; i++) {\n            if (bookmark === true) {\n              activeClass = \"\"; // resetting active bookmark class\n              var arrList = $(\"ul.nav.navbar-nav.bookmark-icons li\"),\n                $arrList = \"\";\n              // Loop to check if current seach value match with the bookmarks already there in navbar\n              for (var j = 0; j < arrList.length; j++) {\n                if (\n                  data.listItems[i].name ===\n                  arrList[j].firstChild.dataset.originalTitle\n                ) {\n                  activeClass = \" warning\";\n                } else {\n                  activeClass = \"\";\n                }\n              }\n              $bookmarkIcon =\n                '<span class=\"float-right bookmark-icon feather icon-star' +\n                activeClass +\n                '\"></span>';\n            }\n            // Search list item not start with letters and create list\n            if (\n              !(data.listItems[i].name.toLowerCase().indexOf(value) == 0) &&\n              data.listItems[i].name.toLowerCase().indexOf(value) > -1 &&\n              a < 5\n            ) {\n              if (a === 0) {\n                $activeItemClass = \"current_item\";\n              } else {\n                $activeItemClass = \"\";\n              }\n              $otherList +=\n                '<li class=\"auto-suggestion d-flex align-items-center justify-content-between cursor-pointer ' +\n                $activeItemClass +\n                '\">' +\n                '<a class=\"d-flex align-items-center justify-content-between w-100\" href=' +\n                data.listItems[i].url +\n                \">\" +\n                '<div class=\"d-flex justify-content-start align-items-center\">' +\n                '<span class=\"mr-75 ' +\n                data.listItems[i].icon +\n                '\" data-icon=\"' +\n                data.listItems[i].icon +\n                '\"></span>' +\n                \"<span>\" +\n                data.listItems[i].name +\n                \"</span>\" +\n                \"</div>\" +\n                $bookmarkIcon +\n                \"</a>\" +\n                \"</li>\";\n              a++;\n            }\n          }\n          $defaultList = $(\".main-search-list-defaultlist\").html();\n          if ($startList == \"\" && $otherList == \"\") {\n            $otherList = $(\".main-search-list-defaultlist-other-list\").html();\n          }\n          // concatinating startlist, otherlist, defalutlist with pagelist\n          $htmlList = $pageList.concat($startList, $otherList, $defaultList);\n          $(\"ul.search-list\").html($htmlList);\n          // concatinating otherlist with startlist\n          $bookmarkhtmlList = $startList.concat($otherList);\n          $(\"ul.search-list-bookmark\").html($bookmarkhtmlList);\n        });\n      } else {\n        if (bookmark === true) {\n          var arrList = $(\"ul.nav.navbar-nav.bookmark-iconss li\"),\n            $arrList = \"\";\n          for (var i = 0; i < arrList.length; i++) {\n            if (i === 0) {\n              $activeItemClass = \"current_item\";\n            } else {\n              $activeItemClass = \"\";\n            }\n            $arrList +=\n              '<li class=\"auto-suggestion d-flex align-items-center justify-content-between cursor-pointer\">' +\n              '<a class=\"d-flex align-items-center justify-content-between w-100\" href=' +\n              arrList[i].firstChild.href +\n              \">\" +\n              '<div class=\"d-flex justify-content-start align-items-center\">' +\n              '<span class=\"mr-75 ' +\n              arrList[i].firstChild.firstChild.className +\n              '\"  data-icon=\"' +\n              arrList[i].firstChild.firstChild.className +\n              '\"></span>' +\n              \"<span>\" +\n              arrList[i].firstChild.dataset.originalTitle +\n              \"</span>\" +\n              \"</div>\" +\n              '<span class=\"float-right bookmark-icon feather icon-star warning\"></span>' +\n              \"</a>\" +\n              \"</li>\";\n          }\n          $(\"ul.search-list\").append($arrList);\n        } else {\n          // if search input blank, hide overlay\n          if (appContent.hasClass(\"show-overlay\")) {\n            appContent.removeClass(\"show-overlay\");\n          }\n          // If filter box is empty\n          if (searchList.hasClass(\"show\")) {\n            searchList.removeClass(\"show\");\n          }\n        }\n      }\n    }\n  });\n\n  // Add class on hover of the list\n  $(document).on(\"mouseenter\", \".search-list li\", function (e) {\n    $(this)\n      .siblings()\n      .removeClass(\"current_item\");\n    $(this).addClass(\"current_item\");\n  });\n  $(document).on(\"click\", \".search-list li\", function (e) {\n    e.stopPropagation();\n  });\n\n  $(\"html\").on(\"click\", function ($this) {\n    if (!$($this.target).hasClass(\"bookmark-icon\")) {\n      if (bookmarkSearchList.hasClass(\"show\")) {\n        bookmarkSearchList.removeClass(\"show\");\n      }\n      if (bookmarkInput.hasClass(\"show\")) {\n        bookmarkInput.removeClass(\"show\");\n      }\n    }\n  });\n\n  // Prevent closing bookmark dropdown on input textbox click\n  $(document).on(\"click\", \".bookmark-input input\", function (e) {\n    bookmarkInput.addClass(\"show\");\n    bookmarkSearchList.addClass(\"show\");\n  });\n\n  // Favorite star click\n  $(document).on(\"click\", \".bookmark-input .search-list .bookmark-icon\", function (e) {\n    e.stopPropagation();\n    if ($(this).hasClass(\"warning\")) {\n      $(this).removeClass(\"warning\");\n      var arrList = $(\"ul.nav.navbar-nav.bookmark-icons li\");\n      for (var i = 0; i < arrList.length; i++) {\n        if (\n          arrList[i].firstChild.dataset.originalTitle ==\n          $(this).parent()[0].innerText\n        ) {\n          arrList[i].remove();\n        }\n      }\n      e.preventDefault();\n    } else {\n      var arrList = $(\"ul.nav.navbar-nav.bookmark-icons li\");\n      $(this).addClass(\"warning\");\n      e.preventDefault();\n      var $url = $(this).parent()[0].href,\n        $name = $(this).parent()[0].innerText,\n        $icon = $(this).parent()[0].firstChild.firstChild.dataset.icon,\n        $listItem = \"\",\n        $listItemDropdown = \"\";\n      $listItem =\n        '<li class=\"nav-item d-none d-lg-block\">' +\n        '<a class=\"nav-link\" href=\"' +\n        $url +\n        '\" data-toggle=\"tooltip\" data-placement=\"top\" title=\"\" data-original-title=\"' +\n        $name +\n        '\">' +\n        '<i class=\"ficon ' +\n        $icon +\n        '\"></i>' +\n        \"</a>\" +\n        \"</li>\";\n      $(\"ul.nav.bookmark-icons\").append($listItem);\n      $('[data-toggle=\"tooltip\"]').tooltip();\n    }\n  });\n\n  // If we use up key(38) Down key (40) or Enter key(13)\n  $(window).on(\"keydown\", function (e) {\n    var $current = $(\".search-list li.current_item\"),\n      $next,\n      $prev;\n    if (e.keyCode === 40) {\n      $next = $current.next();\n      $current.removeClass(\"current_item\");\n      $current = $next.addClass(\"current_item\");\n    } else if (e.keyCode === 38) {\n      $prev = $current.prev();\n      $current.removeClass(\"current_item\");\n      $current = $prev.addClass(\"current_item\");\n    }\n\n    if (e.keyCode === 13 && $(\".search-list li.current_item\").length > 0) {\n      var selected_item = $(\".search-list li.current_item a\");\n      window.location = selected_item.attr(\"href\");\n      $(selected_item).trigger(\"click\");\n    }\n  });\n\n  // Waves Effect\n  Waves.init();\n  Waves.attach(\".btn\", [\"waves-light\"]);\n})(window, document, jQuery);\n"
  },
  {
    "path": "public/backend/js/scripts/ag-grid/ag-grid.js",
    "content": "/*=========================================================================================\n    File Name: ag-grid.js\n    Description: Aggrid Table\n    --------------------------------------------------------------------------------------\n    Item Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n    Author: PIXINVENT\n    Author URL: http://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n\n$(document).ready(function() {\n  /*** COLUMN DEFINE ***/\n  var columnDefs = [\n    {\n      headerName: \"First Name\",\n      field: \"firstname\",\n      editable: true,\n      sortable: true,\n      filter: true,\n      width: 175,\n      filter: true,\n      checkboxSelection: true,\n      headerCheckboxSelectionFilteredOnly: true,\n      headerCheckboxSelection: true\n    },\n    {\n      headerName: \"Last Name\",\n      field: \"lastname\",\n      editable: true,\n      sortable: true,\n      filter: true,\n      width: 175\n    },\n    {\n      headerName: \"Company\",\n      field: \"company\",\n      editable: true,\n      sortable: true,\n      filter: true,\n      width: 250\n    },\n    {\n      headerName: \"City\",\n      field: \"city\",\n      editable: true,\n      sortable: true,\n      filter: true,\n      width: 125\n    },\n    {\n      headerName: \"Country\",\n      field: \"country\",\n      editable: true,\n      sortable: true,\n      filter: true,\n      width: 150\n    },\n    {\n      headerName: \"State\",\n      field: \"state\",\n      editable: true,\n      sortable: true,\n      filter: true,\n      width: 125\n    },\n    {\n      headerName: \"Zip\",\n      field: \"zip\",\n      editable: true,\n      sortable: true,\n      filter: true,\n      width: 125\n    },\n    {\n      headerName: \"Email\",\n      field: \"email\",\n      editable: true,\n      sortable: true,\n      filter: true,\n      width: 260,\n      pinned: \"left\"\n    },\n    {\n      headerName: \"Followers\",\n      field: \"followers\",\n      editable: true,\n      sortable: true,\n      filter: true,\n      width: 150\n    }\n  ];\n\n  /*** GRID OPTIONS ***/\n  var gridOptions = {\n    columnDefs: columnDefs,\n    rowSelection: \"multiple\",\n    floatingFilter: true,\n    filter: true,\n    pagination: true,\n    paginationPageSize: 20,\n    pivotPanelShow: \"always\",\n    colResizeDefault: \"shift\",\n    animateRows: true,\n    resizable: true\n  };\n\n  /*** DEFINED TABLE VARIABLE ***/\n  var gridTable = document.getElementById(\"myGrid\");\n\n  /*** GET TABLE DATA FROM URL ***/\n\n  agGrid\n    .simpleHttpRequest({ url: \"../../../app-assets/data/ag-grid-data.json\" })\n    .then(function(data) {\n      gridOptions.api.setRowData(data);\n    });\n\n  /*** FILTER TABLE ***/\n  function updateSearchQuery(val) {\n    gridOptions.api.setQuickFilter(val);\n  }\n\n  $(\".ag-grid-filter\").on(\"keyup\", function() {\n    updateSearchQuery($(this).val());\n  });\n\n  /*** CHANGE DATA PER PAGE ***/\n  function changePageSize(value) {\n    gridOptions.api.paginationSetPageSize(Number(value));\n  }\n\n  $(\".sort-dropdown .dropdown-item\").on(\"click\", function() {\n    var $this = $(this);\n    changePageSize($this.text());\n    $(\".filter-btn\").text(\"1 - \" + $this.text() + \" of 500\");\n  });\n\n  /*** EXPORT AS CSV BTN ***/\n  $(\".ag-grid-export-btn\").on(\"click\", function(params) {\n    gridOptions.api.exportDataAsCsv();\n  });\n\n  /*** INIT TABLE ***/\n  new agGrid.Grid(gridTable, gridOptions);\n\n  /*** SET OR REMOVE EMAIL AS PINNED DEPENDING ON DEVICE SIZE ***/\n\n  if ($(window).width() < 768) {\n    gridOptions.columnApi.setColumnPinned(\"email\", null);\n  } else {\n    gridOptions.columnApi.setColumnPinned(\"email\", \"left\");\n  }\n  $(window).on(\"resize\", function() {\n    if ($(window).width() < 768) {\n      gridOptions.columnApi.setColumnPinned(\"email\", null);\n    } else {\n      gridOptions.columnApi.setColumnPinned(\"email\", \"left\");\n    }\n  });\n});\n"
  },
  {
    "path": "public/backend/js/scripts/cards/card-analytics.js",
    "content": "/*=========================================================================================\n    File Name: card-statistics.js\n    Description: Card-statistics page content with Apexchart Examples\n    ----------------------------------------------------------------------------------------\n    Item Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n    Author: PIXINVENT\n    Author URL: http://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n\n$(window).on(\"load\", function(){\n\n  var $primary = '#7367F0';\n  var $danger = '#EA5455';\n  var $warning = '#FF9F43';\n  var $info = '#00cfe8';\n  var $success = '#00db89';\n  var $primary_light = '#9c8cfc';\n  var $warning_light = '#FFC085';\n  var $danger_light = '#f29292';\n  var $info_light = '#1edec5';\n  var $strok_color = '#b9c3cd';\n  var $label_color = '#e7eef7';\n  var $purple = '#df87f2';\n  var $white = '#fff';\n\n\n    // Session Chart\n    // ----------------------------------\n\n    var sessionChartoptions = {\n        chart: {\n            type: 'donut',\n            height: 315,\n            toolbar: {\n                show: false\n            }\n        },\n        dataLabels: {\n            enabled: false\n        },\n        series: [58.6, 34.9, 6.5],\n        legend: { show: false },\n        comparedResult: [2, -3, 8],\n        labels: ['Desktop', 'Mobile', 'Tablet'],\n        stroke: { width: 0 },\n        colors: [$primary, $warning, $danger],\n        fill: {\n            type: 'gradient',\n            gradient: {\n                gradientToColors: [$primary_light, $warning_light, $danger_light]\n            }\n        }\n    }\n\n   var sessionChart = new ApexCharts(\n        document.querySelector(\"#session-chart\"),\n        sessionChartoptions\n    );\n\n    sessionChart.render();\n\n    // Product Order Chart\n    // -----------------------------\n\n    var orderChartoptions = {\n        chart: {\n            height: 325,\n            type: 'radialBar',\n        },\n        colors: [$primary, $warning, $danger],\n        fill: {\n            type: 'gradient',\n            gradient: {\n                // enabled: true,\n                shade: 'dark',\n                type: 'vertical',\n                shadeIntensity: 0.5,\n                gradientToColors: [$primary_light, $warning_light, $danger_light],\n                inverseColors: false,\n                opacityFrom: 1,\n                opacityTo: 1,\n                stops: [0, 100]\n            },\n        },\n        stroke: {\n            lineCap: 'round'\n        },\n        plotOptions: {\n            radialBar: {\n              size: 150,\n                hollow: {\n                    size: '20%'\n                },\n                track: {\n                    strokeWidth: '100%',\n                    margin: 15,\n                },\n                dataLabels: {\n                    name: {\n                        fontSize: '18px',\n                    },\n                    value: {\n                        fontSize: '16px',\n                    },\n                    total: {\n                        show: true,\n                        label: 'Total',\n\n                        formatter: function (w) {\n                            // By default this function returns the average of all series. The below is just an example to show the use of custom formatter function\n                            return 42459\n                        }\n                    }\n                }\n            }\n        },\n        series: [70, 52, 26],\n        labels: ['Finished', 'Pending', 'Rejected'],\n\n    }\n\n   var orderChart = new ApexCharts(\n        document.querySelector(\"#product-order-chart\"),\n        orderChartoptions\n    );\n\n    orderChart.render();\n\n\n    // Customer Chart\n    // -----------------------------\n\n    var customerChartoptions = {\n        chart: {\n            type: 'pie',\n            height: 325,\n            dropShadow: {\n                enabled: false,\n                blur: 5,\n                left: 1,\n                top: 1,\n                opacity: 0.2\n            },\n            toolbar: {\n                show: false\n            }\n        },\n        labels: ['New', 'Returning', 'Referrals'],\n        series: [690, 258, 149],\n        dataLabels: {\n            enabled: false\n        },\n        legend: { show: false },\n        stroke: {\n            width: 5\n        },\n        colors: [$primary, $warning, $danger],\n        fill: {\n            type: 'gradient',\n            gradient: {\n                gradientToColors: [$primary_light, $warning_light, $danger_light]\n            }\n        }\n    }\n\n    var customerChart = new ApexCharts(\n        document.querySelector(\"#customer-chart\"),\n        customerChartoptions\n    );\n\n    customerChart.render();\n\n    // Sales Chart\n    // -----------------------------\n\n    var salesChartoptions = {\n        chart: {\n            height: 300,\n            type: 'radar',\n            dropShadow: {\n                enabled: true,\n                blur: 8,\n                left: 1,\n                top: 1,\n                opacity: 0.2\n            },\n            toolbar: {\n                show: false\n            }\n        },\n        toolbar: { show: false },\n        series: [{\n            name: 'Sales',\n            data: [90, 50, 86, 40, 100, 20],\n        }, {\n            name: 'Visit',\n            data: [70, 75, 70, 76, 20, 85],\n        }],\n        stroke: {\n            width: 0\n        },\n        colors: [$primary, $info],\n        plotOptions: {\n            radar: {\n                polygons: {\n                    strokeColors: [$strok_color, 'transparent', 'transparent', 'transparent', 'transparent', 'transparent'],\n                    connectorColors: 'transparent'\n                }\n            }\n        },\n        fill: {\n            type: 'gradient',\n            gradient: {\n                shade: 'dark',\n                gradientToColors: ['#9f8ed7', $info_light],\n                shadeIntensity: 1,\n                type: 'horizontal',\n                opacityFrom: 1,\n                opacityTo: 1,\n                stops: [0, 100, 100, 100]\n            },\n        },\n        markers: {\n            size: 0,\n        },\n        legend: {\n            show: false,\n        },\n        labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'],\n        dataLabels: {\n            style: {\n                colors: [$strok_color, $strok_color, $strok_color, $strok_color, $strok_color, $strok_color]\n            }\n        },\n        yaxis: {\n            show: false,\n        },\n        grid: {\n            show: false,\n        },\n\n    }\n\n    var salesChart = new ApexCharts(\n        document.querySelector(\"#sales-chart\"),\n        salesChartoptions\n    );\n\n    salesChart.render();\n\n    // Support Tracker Chart\n    // -----------------------------\n\n   var supportChartoptions = {\n      chart: {\n          height: 270,\n          type: 'radialBar',\n          sparkline:{\n            enabled: false,\n          }\n      },\n      plotOptions: {\n          radialBar: {\n              size: 150,\n              offsetY: 20,\n              startAngle: -150,\n              endAngle: 150,\n              hollow: {\n                  size: '65%',\n              },\n              track: {\n                  background: $white,\n                  strokeWidth: '100%',\n\n              },\n              dataLabels: {\n                  value: {\n                      offsetY: 30,\n                      color: '#99a2ac',\n                      fontSize: '2rem'\n                  }\n              }\n          },\n      },\n      colors: [$danger],\n      fill: {\n          type: 'gradient',\n          gradient: {\n              // enabled: true,\n              shade: 'dark',\n              type: 'horizontal',\n              shadeIntensity: 0.5,\n              gradientToColors: [$primary],\n              inverseColors: true,\n              opacityFrom: 1,\n              opacityTo: 1,\n              stops: [0, 100]\n          },\n      },\n      stroke: {\n          dashArray: 8\n      },\n      series: [83],\n      labels: ['Completed Tickets'],\n    }\n\n   var supportChart = new ApexCharts(\n        document.querySelector(\"#support-tracker-chart\"),\n        supportChartoptions\n    );\n\n    supportChart.render();\n\n    // Revenue  Chart\n    // -----------------------------\n\n   var revenueChartoptions = {\n      chart: {\n        height: 260,\n        toolbar: { show: false },\n        type: 'line',\n      },\n      stroke: {\n          curve: 'smooth',\n          dashArray: [0, 8],\n          width: [4, 2],\n      },\n      grid: {\n          borderColor: $label_color,\n      },\n      legend: {\n          show: false,\n      },\n      colors: [$danger_light, $strok_color],\n\n      fill: {\n          type: 'gradient',\n          gradient: {\n              shade: 'dark',\n              inverseColors: false,\n              gradientToColors: [$primary, $strok_color],\n              shadeIntensity: 1,\n              type: 'horizontal',\n              opacityFrom: 1,\n              opacityTo: 1,\n              stops: [0, 100, 100, 100]\n          },\n      },\n      markers: {\n          size: 0,\n          hover: {\n              size: 5\n          }\n      },\n      xaxis: {\n          labels: {\n              style: {\n                  colors: $strok_color,\n              }\n          },\n          axisTicks: {\n              show: false,\n          },\n          categories: ['01', '05', '09', '13', '17', '21', '26', '31'],\n          axisBorder: {\n              show: false,\n          },\n          tickPlacement: 'on',\n      },\n      yaxis: {\n          tickAmount: 5,\n          labels: {\n              style: {\n                  color: $strok_color,\n              },\n              formatter: function(val) {\n                  return val > 999 ? (val / 1000).toFixed(1) + 'k' : val;\n              }\n          }\n      },\n      tooltip: {\n          x: { show: false }\n      },\n      series: [{\n              name: \"This Month\",\n              data: [45000, 47000, 44800, 47500, 45500, 48000, 46500, 48600]\n          },\n          {\n              name: \"Last Month\",\n              data: [46000, 48000, 45500, 46600, 44500, 46500, 45000, 47000]\n          }\n      ],\n\n    }\n\n   var revenueChart = new ApexCharts(\n        document.querySelector(\"#revenue-chart\"),\n        revenueChartoptions\n    );\n\n    revenueChart.render();\n\n\n    // Goal Overview  Chart\n    // -----------------------------\n\n    var goalChartoptions = {\n      chart: {\n        height: 250,\n        type: 'radialBar',\n        sparkline: {\n            enabled: true,\n        },\n        dropShadow: {\n            enabled: true,\n            blur: 3,\n            left: 1,\n            top: 1,\n            opacity: 0.1\n        },\n      },\n      colors: [$success],\n      plotOptions: {\n          radialBar: {\n              size: 110,\n              startAngle: -150,\n              endAngle: 150,\n              hollow: {\n                  size: '77%',\n              },\n              track: {\n                  background: $strok_color,\n                  strokeWidth: '50%',\n              },\n              dataLabels: {\n                  name: {\n                      show: false\n                  },\n                  value: {\n                      offsetY: 18,\n                      color: $strok_color,\n                      fontSize: '4rem'\n                  }\n              }\n          }\n      },\n      fill: {\n          type: 'gradient',\n          gradient: {\n              shade: 'dark',\n              type: 'horizontal',\n              shadeIntensity: 0.5,\n              gradientToColors: ['#00b5b5'],\n              inverseColors: true,\n              opacityFrom: 1,\n              opacityTo: 1,\n              stops: [0, 100]\n          },\n      },\n      series: [83],\n      stroke: {\n        lineCap: 'round'\n      },\n\n    }\n\n    var goalChart = new ApexCharts(\n      document.querySelector(\"#goal-overview-chart\"),\n      goalChartoptions\n    );\n\n    goalChart.render();\n\n\n    // Average Session Chart\n    // ----------------------------------\n\n    var avgsessionChartoptions = {\n        chart: {\n            type: 'bar',\n            height: 200,\n            sparkline: { enabled: true },\n            toolbar: { show: false },\n        },\n        states: {\n            hover: {\n                filter: 'none'\n            }\n        },\n        colors: [$label_color, $label_color, $primary, $label_color, $label_color, $label_color],\n        series: [{\n            name: 'Sessions',\n            data: [75, 125, 225, 175, 125, 75, 25]\n        }],\n        grid: {\n            show: false,\n            padding: {\n                left: 0,\n                right: 0\n            }\n        },\n\n        plotOptions: {\n            bar: {\n                columnWidth: '45%',\n                distributed: true,\n                endingShape: 'rounded'\n            }\n        },\n        tooltip: {\n            x: { show: false }\n        },\n        xaxis: {\n          type: 'numeric',\n        }\n    }\n\n   var avgsessionChart = new ApexCharts(\n        document.querySelector(\"#avg-session-chart\"),\n        avgsessionChartoptions\n    );\n\n    avgsessionChart.render();\n\n    // Sales  Chart\n    // -----------------------------\n\n   var salesavgChartoptions = {\n      chart: {\n        height: 270,\n        toolbar: { show: false },\n        type: 'line',\n        dropShadow: {\n            enabled: true,\n            top: 20,\n            left: 2,\n            blur: 6,\n            opacity: 0.20\n        },\n      },\n      stroke: {\n          curve: 'smooth',\n          width: 4,\n      },\n      grid: {\n          borderColor: $label_color,\n      },\n      legend: {\n          show: false,\n      },\n     colors: [$purple],\n      fill: {\n          type: 'gradient',\n          gradient: {\n              shade: 'dark',\n              inverseColors: false,\n              gradientToColors: [$primary],\n              shadeIntensity: 1,\n              type: 'horizontal',\n              opacityFrom: 1,\n              opacityTo: 1,\n              stops: [0, 100, 100, 100]\n          },\n      },\n      markers: {\n          size: 0,\n          hover: {\n              size: 5\n          }\n      },\n      xaxis: {\n          labels: {\n              style: {\n                  colors: $strok_color,\n              }\n          },\n          axisTicks: {\n              show: false,\n          },\n          categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'July', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n          axisBorder: {\n              show: false,\n          },\n          tickPlacement: 'on'\n      },\n      yaxis: {\n          tickAmount: 5,\n          labels: {\n              style: {\n                  color: $strok_color,\n              },\n              formatter: function(val) {\n                  return val > 999 ? (val / 1000).toFixed(1) + 'k' : val;\n              }\n          }\n      },\n      tooltip: {\n          x: { show: false }\n      },\n      series: [{\n            name: \"Sales\",\n            data: [140, 180, 150, 205, 160, 295, 125, 255, 205, 305, 240, 295]\n        }],\n\n    }\n\n   var salesavgChart = new ApexCharts(\n        document.querySelector(\"#sales-line-chart\"),\n        salesavgChartoptions\n    );\n\n    salesavgChart.render();\n\n    // Client Retention Chart\n    // ----------------------------------\n\n    var retentionChartoptions = {\n        chart: {\n            stacked: true,\n            type: 'bar',\n            toolbar: { show: false },\n            height: 290,\n        },\n        plotOptions: {\n            bar: {\n                columnWidth: '10%'\n            }\n        },\n        colors: [$primary, $danger],\n        series: [{\n            name: 'New Clients',\n            data: [175, 125, 225, 175, 160, 189, 206, 134, 159, 216, 148, 123]\n        }, {\n            name: 'Retained Clients',\n            data: [-144, -155, -141, -167, -122, -143, -158, -107, -126, -131, -140, -137]\n        }],\n        grid: {\n            borderColor: $label_color,\n            padding: {\n                left: 0,\n                right: 0\n            }\n        },\n        legend: {\n            show: true,\n            position: 'top',\n            horizontalAlign: 'left',\n            offsetX: 0,\n            fontSize: '14px',\n            markers: {\n              radius: 50,\n              width: 10,\n              height: 10,\n            }\n        },\n        dataLabels: {\n            enabled: false\n        },\n        xaxis: {\n            labels: {\n                style: {\n                    colors: $strok_color,\n                }\n            },\n            axisTicks: {\n                show: false,\n            },\n            categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n            axisBorder: {\n                show: false,\n            },\n        },\n        yaxis: {\n            tickAmount: 5,\n            labels: {\n                style: {\n                    color: $strok_color,\n                }\n            }\n        },\n        tooltip: {\n            x: { show: false }\n        },\n    }\n\n   var retentionChart = new ApexCharts(\n        document.querySelector(\"#client-retention-chart\"),\n        retentionChartoptions\n    );\n\n    retentionChart.render();\n\n});\n"
  },
  {
    "path": "public/backend/js/scripts/cards/card-statistics.js",
    "content": "/*=========================================================================================\n    File Name: card-statistics.js\n    Description: Card-statistics page content with Apexchart Examples\n    ----------------------------------------------------------------------------------------\n    Item Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n    Author: PIXINVENT\n    Author URL: http://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n\n$(window).on(\"load\", function(){\n\n  var $primary = '#7367F0';\n  var $success = '#28C76F';\n  var $danger = '#EA5455';\n  var $warning = '#FF9F43';\n  var $primary_light = '#A9A2F6';\n  var $success_light = '#55DD92';\n  var $warning_light = '#ffc085';\n\n    // Subscribed Gained Chart\n    // ----------------------------------\n\n    var gainedChartoptions = {\n        chart: {\n            height: 100,\n            type: 'area',\n            toolbar:{\n              show: false,\n            },\n            sparkline: {\n                enabled: true\n            },\n            grid: {\n                show: false,\n                padding: {\n                    left: 0,\n                    right: 0\n                }\n            },\n        },\n        colors: [$primary],\n        dataLabels: {\n            enabled: false\n        },\n        stroke: {\n            curve: 'smooth',\n            width: 2.5\n        },\n        fill: {\n            type: 'gradient',\n            gradient: {\n                shadeIntensity: 0.9,\n                opacityFrom: 0.7,\n                opacityTo: 0.5,\n                stops: [0, 80, 100]\n            }\n        },\n        series: [{\n            name: 'Subscribers',\n            data: [28, 40, 36, 52, 38, 60, 55]\n        }],\n\n        xaxis: {\n          labels: {\n            show: false,\n          },\n          axisBorder: {\n            show: false,\n          }\n        },\n        yaxis: [{\n            y: 0,\n            offsetX: 0,\n            offsetY: 0,\n            padding: { left: 0, right: 0 },\n        }],\n        tooltip: {\n            x: { show: false }\n        },\n    }\n\n    var gainedChart = new ApexCharts(\n        document.querySelector(\"#line-area-chart-1\"),\n        gainedChartoptions\n    );\n\n    gainedChart.render();\n\n\n\n    // Revenue Generated Chart\n    // ----------------------------------\n\n    var revenueChartoptions = {\n        chart: {\n            height: 100,\n            type: 'area',\n            toolbar:{\n              show: false,\n            },\n            sparkline: {\n                enabled: true\n            },\n            grid: {\n                show: false,\n                padding: {\n                    left: 0,\n                    right: 0\n                }\n            },\n        },\n        colors: [$success],\n        dataLabels: {\n            enabled: false\n        },\n        stroke: {\n            curve: 'smooth',\n            width: 2.5\n        },\n        fill: {\n            type: 'gradient',\n            gradient: {\n                shadeIntensity: 0.9,\n                opacityFrom: 0.7,\n                opacityTo: 0.5,\n                stops: [0, 80, 100]\n            }\n        },\n        series: [{\n            name: 'Revenue',\n            data: [350, 275, 400, 300, 350, 300, 450]\n        }],\n\n        xaxis: {\n          labels: {\n            show: false,\n          },\n          axisBorder: {\n            show: false,\n          }\n        },\n        yaxis: [{\n            y: 0,\n            offsetX: 0,\n            offsetY: 0,\n            padding: { left: 0, right: 0 },\n        }],\n        tooltip: {\n            x: { show: false }\n        },\n    }\n\n    var revenueChart = new ApexCharts(\n        document.querySelector(\"#line-area-chart-2\"),\n        revenueChartoptions\n    );\n\n    revenueChart.render();\n\n\n    // Quaterly Sales Chart\n    // ----------------------------------\n\n    var salesChartoptions = {\n        chart: {\n            height: 100,\n            type: 'area',\n            toolbar:{\n              show: false,\n            },\n            sparkline: {\n                enabled: true\n            },\n            grid: {\n                show: false,\n                padding: {\n                    left: 0,\n                    right: 0\n                }\n            },\n        },\n        colors: [$danger],\n        dataLabels: {\n            enabled: false\n        },\n        stroke: {\n            curve: 'smooth',\n            width: 2.5\n        },\n        fill: {\n            type: 'gradient',\n            gradient: {\n                shadeIntensity: 0.9,\n                opacityFrom: 0.7,\n                opacityTo: 0.5,\n                stops: [0, 80, 100]\n            }\n        },\n        series: [{\n            name: 'Sales',\n            data: [10, 15, 7, 12, 3, 16]\n        }],\n\n        xaxis: {\n          labels: {\n            show: false,\n          },\n          axisBorder: {\n            show: false,\n          }\n        },\n        yaxis: [{\n            y: 0,\n            offsetX: 0,\n            offsetY: 0,\n            padding: { left: 0, right: 0 },\n        }],\n        tooltip: {\n            x: { show: false }\n        },\n    }\n\n    var salesChart = new ApexCharts(\n        document.querySelector(\"#line-area-chart-3\"),\n        salesChartoptions\n    );\n\n    salesChart.render();\n\n    // Order Received Chart\n    // ----------------------------------\n\n    var orderChartoptions = {\n        chart: {\n            height: 100,\n            type: 'area',\n            toolbar:{\n              show: false,\n            },\n            sparkline: {\n                enabled: true\n            },\n            grid: {\n                show: false,\n                padding: {\n                    left: 0,\n                    right: 0\n                }\n            },\n        },\n        colors: [$warning],\n        dataLabels: {\n            enabled: false\n        },\n        stroke: {\n            curve: 'smooth',\n            width: 2.5\n        },\n        fill: {\n            type: 'gradient',\n            gradient: {\n                shadeIntensity: 0.9,\n                opacityFrom: 0.7,\n                opacityTo: 0.5,\n                stops: [0, 80, 100]\n            }\n        },\n        series: [{\n            name: 'Orders',\n            data: [10, 15, 8, 15, 7, 12, 8]\n        }],\n\n        xaxis: {\n          labels: {\n            show: false,\n          },\n          axisBorder: {\n            show: false,\n          }\n        },\n        yaxis: [{\n            y: 0,\n            offsetX: 0,\n            offsetY: 0,\n            padding: { left: 0, right: 0 },\n        }],\n        tooltip: {\n            x: { show: false }\n        },\n    }\n\n    var orderChart = new ApexCharts(\n        document.querySelector(\"#line-area-chart-4\"),\n        orderChartoptions\n    );\n\n    orderChart.render();\n\n\n    // Site Traffic Chart\n    // ----------------------------------\n\n    var trafficChartoptions = {\n        chart: {\n            height: 100,\n            type: 'line',\n            dropShadow: {\n                enabled: true,\n                top: 5,\n                left: 0,\n                blur: 4,\n                opacity: 0.10,\n            },\n            toolbar:{\n              show: false,\n            },\n            sparkline: {\n                enabled: true\n            },\n            grid: {\n                show: false,\n                padding: {\n                    left: 0,\n                    right: 0\n                }\n            },\n        },\n        colors: [$primary],\n        dataLabels: {\n            enabled: false\n        },\n        stroke: {\n            curve: 'smooth',\n            width: 5\n        },\n        fill: {\n            type: 'gradient',\n            gradient: {\n                shadeIntensity: 1,\n                gradientToColors: [$primary_light],\n                opacityFrom: 1,\n                opacityTo: 1,\n                stops: [0, 100, 100, 100]\n            }\n        },\n        series: [{\n            name: 'Traffic Rate',\n            data: [150, 200, 125, 225, 200, 250]\n        }],\n\n        xaxis: {\n          labels: {\n            show: false,\n          },\n          axisBorder: {\n            show: false,\n          }\n        },\n        yaxis: [{\n            y: 0,\n            offsetX: 0,\n            offsetY: 0,\n            padding: { left: 0, right: 0 },\n        }],\n        tooltip: {\n            x: { show: false }\n        },\n    }\n\n    var trafficChart = new ApexCharts(\n        document.querySelector(\"#line-area-chart-5\"),\n        trafficChartoptions\n    );\n\n    trafficChart.render();\n\n\n    // Active Users Chart\n    // ----------------------------------\n\n    var userChartoptions = {\n        chart: {\n            height: 100,\n            type: 'line',\n            dropShadow: {\n                enabled: true,\n                top: 5,\n                left: 0,\n                blur: 4,\n                opacity: 0.10,\n            },\n            toolbar:{\n              show: false,\n            },\n            sparkline: {\n                enabled: true\n            },\n            grid: {\n                show: false,\n                padding: {\n                    left: 0,\n                    right: 0\n                }\n            },\n        },\n        colors: [$success],\n        dataLabels: {\n            enabled: false\n        },\n        stroke: {\n            curve: 'smooth',\n            width: 5\n        },\n        fill: {\n            type: 'gradient',\n            gradient: {\n                shadeIntensity: 1,\n                gradientToColors: [$success_light],\n                opacityFrom: 1,\n                opacityTo: 1,\n                stops: [0, 100, 100, 100]\n            }\n        },\n        series: [{\n            name: 'Active Users',\n            data: [750, 1000, 900, 1250, 1000, 1200, 1100]\n        }],\n\n        xaxis: {\n          labels: {\n            show: false,\n          },\n          axisBorder: {\n            show: false,\n          }\n        },\n        yaxis: [{\n            y: 0,\n            offsetX: 0,\n            offsetY: 0,\n            padding: { left: 0, right: 0 },\n        }],\n        tooltip: {\n            x: { show: false }\n        },\n    }\n\n    var userChart = new ApexCharts(\n        document.querySelector(\"#line-area-chart-6\"),\n        userChartoptions\n    );\n\n    userChart.render();\n\n\n    // News Letter Chart\n    // ----------------------------------\n\n    var newsletterChartoptions = {\n        chart: {\n            height: 100,\n            type: 'line',\n            dropShadow: {\n                enabled: true,\n                top: 5,\n                left: 0,\n                blur: 4,\n                opacity: 0.10,\n            },\n            toolbar:{\n              show: false,\n            },\n            sparkline: {\n                enabled: true\n            },\n            grid: {\n                show: false,\n                padding: {\n                    left: 0,\n                    right: 0\n                }\n            },\n        },\n        colors: [$warning],\n        dataLabels: {\n            enabled: false\n        },\n        stroke: {\n            curve: 'smooth',\n            width: 5\n        },\n        fill: {\n            type: 'gradient',\n            gradient: {\n                shadeIntensity: 1,\n                gradientToColors: [$warning_light],\n                opacityFrom: 1,\n                opacityTo: 1,\n                stops: [0, 100, 100, 100]\n            }\n        },\n        series: [{\n            name: 'Newsletter',\n            data: [365, 390, 365, 400, 375, 400]\n        }],\n\n        xaxis: {\n          labels: {\n            show: false,\n          },\n          axisBorder: {\n            show: false,\n          }\n        },\n        yaxis: [{\n            y: 0,\n            offsetX: 0,\n            offsetY: 0,\n            padding: { left: 0, right: 0 },\n        }],\n        tooltip: {\n            x: { show: false }\n        },\n    }\n\n    var newsletterChart = new ApexCharts(\n        document.querySelector(\"#line-area-chart-7\"),\n        newsletterChartoptions\n    );\n\n    newsletterChart.render();\n\n});\n"
  },
  {
    "path": "public/backend/js/scripts/charts/chart-apex.js",
    "content": "/*=========================================================================================\n    File Name: chart-apex.js\n    Description: Apexchart Examples\n    ----------------------------------------------------------------------------------------\n    Item Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n    Author: PIXINVENT\n    Author URL: http://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n\n$(document).ready(function () {\n\n  var $primary = '#7367F0',\n    $success = '#28C76F',\n    $danger = '#EA5455',\n    $warning = '#FF9F43',\n    $info = '#00cfe8',\n    $label_color_light = '#dae1e7';\n\n  var themeColors = [$primary, $success, $danger, $warning, $info];\n\n  // RTL Support\n  var yaxis_opposite = false;\n  if($('html').data('textdirection') == 'rtl'){\n    yaxis_opposite = true;\n  }\n\n  // Line Chart\n  // ----------------------------------\n  var lineChartOptions = {\n    chart: {\n      height: 350,\n      type: 'line',\n      zoom: {\n        enabled: false\n      }\n    },\n    colors: themeColors,\n    dataLabels: {\n      enabled: false\n    },\n    stroke: {\n      curve: 'straight'\n    },\n    series: [{\n      name: \"Desktops\",\n      data: [10, 41, 35, 51, 49, 62, 69, 91, 148],\n    }],\n    title: {\n      text: 'Product Trends by Month',\n      align: 'left'\n    },\n    grid: {\n      row: {\n        colors: ['#f3f3f3', 'transparent'], // takes an array which will be repeated on columns\n        opacity: 0.5\n      },\n    },\n    xaxis: {\n      categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep'],\n    },\n    yaxis: {\n      tickAmount: 5,\n      opposite: yaxis_opposite\n    }\n  }\n  var lineChart = new ApexCharts(\n    document.querySelector(\"#line-chart\"),\n    lineChartOptions\n  );\n  lineChart.render();\n\n  // Line Area Chart\n  // ----------------------------------\n  var lineAreaOptions = {\n    chart: {\n      height: 350,\n      type: 'area',\n    },\n    colors: themeColors,\n    dataLabels: {\n      enabled: false\n    },\n    stroke: {\n      curve: 'smooth'\n    },\n    series: [{\n      name: 'series1',\n      data: [31, 40, 28, 51, 42, 109, 100]\n    }, {\n      name: 'series2',\n      data: [11, 32, 45, 32, 34, 52, 41]\n    }],\n    legend: {\n      offsetY: -10\n    },\n    xaxis: {\n      type: 'datetime',\n      categories: [\"2019-09-18T00:00:00\", \"2019-09-18T01:00:00\", \"2019-09-18T02:00:00\",\n        \"2019-09-18T03:00:00\", \"2019-09-18T04:00:00\", \"2019-09-18T05:00:00\",\n        \"2019-09-18T06:00:00\"\n      ],\n    },\n    yaxis: {\n      opposite: yaxis_opposite\n    },\n    tooltip: {\n      x: {\n        format: 'dd/MM/yy HH:mm'\n      },\n    }\n  }\n  var lineAreaChart = new ApexCharts(\n    document.querySelector(\"#line-area-chart\"),\n    lineAreaOptions\n  );\n  lineAreaChart.render();\n\n  // Column Chart\n  // ----------------------------------\n  var columnChartOptions = {\n    chart: {\n      height: 350,\n      type: 'bar',\n    },\n    colors: themeColors,\n    plotOptions: {\n      bar: {\n        horizontal: false,\n        endingShape: 'rounded',\n        columnWidth: '55%',\n      },\n    },\n    dataLabels: {\n      enabled: false\n    },\n    stroke: {\n      show: true,\n      width: 2,\n      colors: ['transparent']\n    },\n    series: [{\n      name: 'Net Profit',\n      data: [44, 55, 57, 56, 61, 58, 63, 60, 66]\n    }, {\n      name: 'Revenue',\n      data: [76, 85, 101, 98, 87, 105, 91, 114, 94]\n    }, {\n      name: 'Free Cash Flow',\n      data: [35, 41, 36, 26, 45, 48, 52, 53, 41]\n    }],\n    legend: {\n      offsetY: -10\n    },\n    xaxis: {\n      categories: ['Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct'],\n    },\n    yaxis: {\n      title: {\n        text: '$ (thousands)'\n      },\n      opposite: yaxis_opposite\n    },\n    fill: {\n      opacity: 1\n\n    },\n    tooltip: {\n      y: {\n        formatter: function (val) {\n          return \"$ \" + val + \" thousands\"\n        }\n      }\n    }\n  }\n  var columnChart = new ApexCharts(\n    document.querySelector(\"#column-chart\"),\n    columnChartOptions\n  );\n\n  columnChart.render();\n\n  // Bar Chart\n  // ----------------------------------\n  var barChartOptions = {\n    chart: {\n      height: 350,\n      type: 'bar',\n    },\n    colors: themeColors,\n    plotOptions: {\n      bar: {\n        horizontal: true,\n      }\n    },\n    dataLabels: {\n      enabled: false\n    },\n    series: [{\n      data: [400, 430, 448, 470, 540, 580, 690, 1100, 1200, 1380]\n    }],\n    xaxis: {\n      categories: ['South Korea', 'Canada', 'United Kingdom', 'Netherlands', 'Italy', 'France', 'Japan', 'United States', 'China', 'Germany'],\n      tickAmount: 5\n    },\n    yaxis: {\n      opposite: yaxis_opposite\n    }\n  }\n  var barChart = new ApexCharts(\n    document.querySelector(\"#bar-chart\"),\n    barChartOptions\n  );\n  barChart.render();\n\n\n  // Mixed Chart\n  // -----------------------------\n  var mixedChartOptions = {\n    chart: {\n      height: 350,\n      type: 'line',\n      stacked: false,\n    },\n    colors: themeColors,\n    stroke: {\n      width: [0, 2, 5],\n      curve: 'smooth'\n    },\n    plotOptions: {\n      bar: {\n        columnWidth: '50%'\n      }\n    },\n    // colors: ['#3A5794', '#A5C351', '#E14A84'],\n    series: [{\n      name: 'TEAM A',\n      type: 'column',\n      data: [23, 11, 22, 27, 13, 22, 37, 21, 44, 22, 30]\n    }, {\n      name: 'TEAM B',\n      type: 'area',\n      data: [44, 55, 41, 67, 22, 43, 21, 41, 56, 27, 43]\n    }, {\n      name: 'TEAM C',\n      type: 'line',\n      data: [30, 25, 36, 30, 45, 35, 64, 52, 59, 36, 39]\n    }],\n    fill: {\n      opacity: [0.85, 0.25, 1],\n      gradient: {\n        inverseColors: false,\n        shade: 'light',\n        type: \"vertical\",\n        opacityFrom: 0.85,\n        opacityTo: 0.55,\n        stops: [0, 100, 100, 100]\n      }\n    },\n    labels: ['01/01/2003', '02/01/2003', '03/01/2003', '04/01/2003', '05/01/2003', '06/01/2003', '07/01/2003', '08/01/2003', '09/01/2003', '10/01/2003', '11/01/2003'],\n    markers: {\n      size: 0\n    },\n    legend: {\n      offsetY: -10\n    },\n    xaxis: {\n      type: 'datetime'\n    },\n    yaxis: {\n      min: 0,\n      tickAmount: 5,\n      title: {\n        text: 'Points'\n      },\n      opposite: yaxis_opposite\n    },\n    tooltip: {\n      shared: true,\n      intersect: false,\n      y: {\n        formatter: function (y) {\n          if (typeof y !== \"undefined\") {\n            return y.toFixed(0) + \" views\";\n          }\n          return y;\n\n        }\n      }\n    }\n  }\n  var mixedChart = new ApexCharts(\n    document.querySelector(\"#mixed-chart\"),\n    mixedChartOptions\n  );\n  mixedChart.render();\n\n  // Candlestick Chart\n  // -----------------------------\n  var candleStickOptions = {\n    chart: {\n      height: 350,\n      type: 'candlestick',\n    },\n    colors: themeColors,\n    series: [{\n      data: [{\n        x: new Date(1538778600000),\n        y: [6629.81, 6650.5, 6623.04, 6633.33]\n      },\n      {\n        x: new Date(1538780400000),\n        y: [6632.01, 6643.59, 6620, 6630.11]\n      },\n      {\n        x: new Date(1538782200000),\n        y: [6630.71, 6648.95, 6623.34, 6635.65]\n      },\n      {\n        x: new Date(1538784000000),\n        y: [6635.65, 6651, 6629.67, 6638.24]\n      },\n      {\n        x: new Date(1538785800000),\n        y: [6638.24, 6640, 6620, 6624.47]\n      },\n      {\n        x: new Date(1538787600000),\n        y: [6624.53, 6636.03, 6621.68, 6624.31]\n      },\n      {\n        x: new Date(1538789400000),\n        y: [6624.61, 6632.2, 6617, 6626.02]\n      },\n      {\n        x: new Date(1538791200000),\n        y: [6627, 6627.62, 6584.22, 6603.02]\n      },\n      {\n        x: new Date(1538793000000),\n        y: [6605, 6608.03, 6598.95, 6604.01]\n      },\n      {\n        x: new Date(1538794800000),\n        y: [6604.5, 6614.4, 6602.26, 6608.02]\n      },\n      {\n        x: new Date(1538796600000),\n        y: [6608.02, 6610.68, 6601.99, 6608.91]\n      },\n      {\n        x: new Date(1538798400000),\n        y: [6608.91, 6618.99, 6608.01, 6612]\n      },\n      {\n        x: new Date(1538800200000),\n        y: [6612, 6615.13, 6605.09, 6612]\n      },\n      {\n        x: new Date(1538802000000),\n        y: [6612, 6624.12, 6608.43, 6622.95]\n      },\n      {\n        x: new Date(1538803800000),\n        y: [6623.91, 6623.91, 6615, 6615.67]\n      },\n      {\n        x: new Date(1538805600000),\n        y: [6618.69, 6618.74, 6610, 6610.4]\n      },\n      {\n        x: new Date(1538807400000),\n        y: [6611, 6622.78, 6610.4, 6614.9]\n      },\n      {\n        x: new Date(1538809200000),\n        y: [6614.9, 6626.2, 6613.33, 6623.45]\n      },\n      {\n        x: new Date(1538811000000),\n        y: [6623.48, 6627, 6618.38, 6620.35]\n      },\n      {\n        x: new Date(1538812800000),\n        y: [6619.43, 6620.35, 6610.05, 6615.53]\n      },\n      {\n        x: new Date(1538814600000),\n        y: [6615.53, 6617.93, 6610, 6615.19]\n      },\n      {\n        x: new Date(1538816400000),\n        y: [6615.19, 6621.6, 6608.2, 6620]\n      },\n      {\n        x: new Date(1538818200000),\n        y: [6619.54, 6625.17, 6614.15, 6620]\n      },\n      {\n        x: new Date(1538820000000),\n        y: [6620.33, 6634.15, 6617.24, 6624.61]\n      },\n      {\n        x: new Date(1538821800000),\n        y: [6625.95, 6626, 6611.66, 6617.58]\n      },\n      {\n        x: new Date(1538823600000),\n        y: [6619, 6625.97, 6595.27, 6598.86]\n      },\n      {\n        x: new Date(1538825400000),\n        y: [6598.86, 6598.88, 6570, 6587.16]\n      },\n      {\n        x: new Date(1538827200000),\n        y: [6588.86, 6600, 6580, 6593.4]\n      },\n      {\n        x: new Date(1538829000000),\n        y: [6593.99, 6598.89, 6585, 6587.81]\n      },\n      {\n        x: new Date(1538830800000),\n        y: [6587.81, 6592.73, 6567.14, 6578]\n      },\n      {\n        x: new Date(1538832600000),\n        y: [6578.35, 6581.72, 6567.39, 6579]\n      },\n      {\n        x: new Date(1538834400000),\n        y: [6579.38, 6580.92, 6566.77, 6575.96]\n      },\n      {\n        x: new Date(1538836200000),\n        y: [6575.96, 6589, 6571.77, 6588.92]\n      },\n      {\n        x: new Date(1538838000000),\n        y: [6588.92, 6594, 6577.55, 6589.22]\n      },\n      {\n        x: new Date(1538839800000),\n        y: [6589.3, 6598.89, 6589.1, 6596.08]\n      },\n      {\n        x: new Date(1538841600000),\n        y: [6597.5, 6600, 6588.39, 6596.25]\n      },\n      {\n        x: new Date(1538843400000),\n        y: [6598.03, 6600, 6588.73, 6595.97]\n      },\n      {\n        x: new Date(1538845200000),\n        y: [6595.97, 6602.01, 6588.17, 6602]\n      },\n      {\n        x: new Date(1538847000000),\n        y: [6602, 6607, 6596.51, 6599.95]\n      },\n      {\n        x: new Date(1538848800000),\n        y: [6600.63, 6601.21, 6590.39, 6591.02]\n      },\n      {\n        x: new Date(1538850600000),\n        y: [6591.02, 6603.08, 6591, 6591]\n      },\n      {\n        x: new Date(1538852400000),\n        y: [6591, 6601.32, 6585, 6592]\n      },\n      {\n        x: new Date(1538854200000),\n        y: [6593.13, 6596.01, 6590, 6593.34]\n      },\n      {\n        x: new Date(1538856000000),\n        y: [6593.34, 6604.76, 6582.63, 6593.86]\n      },\n      {\n        x: new Date(1538857800000),\n        y: [6593.86, 6604.28, 6586.57, 6600.01]\n      },\n      {\n        x: new Date(1538859600000),\n        y: [6601.81, 6603.21, 6592.78, 6596.25]\n      },\n      {\n        x: new Date(1538861400000),\n        y: [6596.25, 6604.2, 6590, 6602.99]\n      },\n      {\n        x: new Date(1538863200000),\n        y: [6602.99, 6606, 6584.99, 6587.81]\n      },\n      {\n        x: new Date(1538865000000),\n        y: [6587.81, 6595, 6583.27, 6591.96]\n      },\n      {\n        x: new Date(1538866800000),\n        y: [6591.97, 6596.07, 6585, 6588.39]\n      },\n      {\n        x: new Date(1538868600000),\n        y: [6587.6, 6598.21, 6587.6, 6594.27]\n      },\n      {\n        x: new Date(1538870400000),\n        y: [6596.44, 6601, 6590, 6596.55]\n      },\n      {\n        x: new Date(1538872200000),\n        y: [6598.91, 6605, 6596.61, 6600.02]\n      },\n      {\n        x: new Date(1538874000000),\n        y: [6600.55, 6605, 6589.14, 6593.01]\n      },\n      {\n        x: new Date(1538875800000),\n        y: [6593.15, 6605, 6592, 6603.06]\n      },\n      {\n        x: new Date(1538877600000),\n        y: [6603.07, 6604.5, 6599.09, 6603.89]\n      },\n      {\n        x: new Date(1538879400000),\n        y: [6604.44, 6604.44, 6600, 6603.5]\n      },\n      {\n        x: new Date(1538881200000),\n        y: [6603.5, 6603.99, 6597.5, 6603.86]\n      },\n      {\n        x: new Date(1538883000000),\n        y: [6603.85, 6605, 6600, 6604.07]\n      },\n      {\n        x: new Date(1538884800000),\n        y: [6604.98, 6606, 6604.07, 6606]\n      },\n      ]\n    }],\n    xaxis: {\n      type: 'datetime'\n    },\n    yaxis: {\n      tickAmount: 5,\n      tooltip: {\n        enabled: true\n      },\n      opposite: yaxis_opposite\n    }\n  }\n  var candleStickChart = new ApexCharts(\n    document.querySelector(\"#candlestick-chart\"),\n    candleStickOptions\n  );\n  candleStickChart.render();\n\n  // 3D Bubble Chart\n  // -----------------------------\n\n  function generateDataBubbleChart(baseval, count, yrange) {\n    var i = 0;\n    var seriesBubbleChart = [];\n    while (i < count) {\n      // var x = Math.floor(Math.random() * (750 - 1 + 1)) + 1;\n      var y = Math.floor(Math.random() * (yrange.max - yrange.min + 1)) + yrange.min;\n      var z = Math.floor(Math.random() * (75 - 15 + 1)) + 15;\n\n      seriesBubbleChart.push([baseval, y, z]);\n      baseval += 86400000;\n      i++;\n    }\n    return seriesBubbleChart;\n  }\n  var bubbleChartOptions = {\n    chart: {\n      height: 350,\n      type: 'bubble',\n    },\n    colors: themeColors,\n    dataLabels: {\n      enabled: false\n    },\n    legend: {\n      offsetY: -10\n    },\n    series: [{\n      name: 'Product1',\n      data: generateDataBubbleChart(new Date('11 Feb 2017 GMT').getTime(), 20, {\n        min: 10,\n        max: 60\n      })\n    },\n    {\n      name: 'Product2',\n      data: generateDataBubbleChart(new Date('11 Feb 2017 GMT').getTime(), 20, {\n        min: 10,\n        max: 60\n      })\n    },\n    {\n      name: 'Product3',\n      data: generateDataBubbleChart(new Date('11 Feb 2017 GMT').getTime(), 20, {\n        min: 10,\n        max: 60\n      })\n    },\n    {\n      name: 'Product4',\n      data: generateDataBubbleChart(new Date('11 Feb 2017 GMT').getTime(), 20, {\n        min: 10,\n        max: 60\n      })\n    }\n    ],\n    fill: {\n      type: 'gradient',\n    },\n    xaxis: {\n      tickAmount: 12,\n      type: 'datetime',\n\n      labels: {\n        rotate: 0,\n      }\n    },\n    yaxis: {\n      max: 70,\n      tickAmount: 5,\n      opposite: yaxis_opposite\n    },\n    theme: {\n      palette: 'palette2'\n    }\n  }\n  var bubbleChart = new ApexCharts(\n    document.querySelector(\"#bubble-chart\"),\n    bubbleChartOptions\n  );\n  bubbleChart.render();\n\n  // Scatter Chart\n  // -----------------------------\n\n  var scatterChartOptions = {\n    chart: {\n      height: 350,\n      type: 'scatter',\n      zoom: {\n        enabled: true,\n        type: 'xy'\n      },\n    },\n    colors: themeColors,\n    series: [{\n      name: \"SAMPLE A\",\n      data: [\n        [16.4, 5.4],\n        [21.7, 2],\n        [25.4, 3],\n        [19, 2],\n        [10.9, 1],\n        [13.6, 3.2],\n        [10.9, 7.4],\n        [10.9, 0],\n        [10.9, 8.2],\n        [16.4, 0],\n        [16.4, 1.8],\n        [13.6, 0.3],\n        [13.6, 0],\n        [29.9, 0],\n        [27.1, 2.3],\n        [16.4, 0],\n        [13.6, 3.7],\n        [10.9, 5.2],\n        [16.4, 6.5],\n        [10.9, 0],\n        [24.5, 7.1],\n        [10.9, 0],\n        [8.1, 4.7],\n        [19, 0],\n        [21.7, 1.8],\n        [27.1, 0],\n        [24.5, 0],\n        [27.1, 0],\n        [29.9, 1.5],\n        [27.1, 0.8],\n        [22.1, 2]\n      ]\n    }, {\n      name: \"SAMPLE B\",\n      data: [\n        [6.4, 13.4],\n        [1.7, 11],\n        [5.4, 8],\n        [9, 17],\n        [1.9, 4],\n        [3.6, 12.2],\n        [1.9, 14.4],\n        [1.9, 9],\n        [1.9, 13.2],\n        [1.4, 7],\n        [6.4, 8.8],\n        [3.6, 4.3],\n        [1.6, 10],\n        [9.9, 2],\n        [7.1, 15],\n        [1.4, 0],\n        [3.6, 13.7],\n        [1.9, 15.2],\n        [6.4, 16.5],\n        [0.9, 10],\n        [4.5, 17.1],\n        [10.9, 10],\n        [0.1, 14.7],\n        [9, 10],\n        [12.7, 11.8],\n        [2.1, 10],\n        [2.5, 10],\n        [27.1, 10],\n        [2.9, 11.5],\n        [7.1, 10.8],\n        [2.1, 12]\n      ]\n    }, {\n      name: \"SAMPLE C\",\n      data: [\n        [21.7, 3],\n        [23.6, 3.5],\n        [24.6, 3],\n        [29.9, 3],\n        [21.7, 20],\n        [23, 2],\n        [10.9, 3],\n        [28, 4],\n        [27.1, 0.3],\n        [16.4, 4],\n        [13.6, 0],\n        [19, 5],\n        [22.4, 3],\n        [24.5, 3],\n        [32.6, 3],\n        [27.1, 4],\n        [29.6, 6],\n        [31.6, 8],\n        [21.6, 5],\n        [20.9, 4],\n        [22.4, 0],\n        [32.6, 10.3],\n        [29.7, 20.8],\n        [24.5, 0.8],\n        [21.4, 0],\n        [21.7, 6.9],\n        [28.6, 7.7],\n        [15.4, 0],\n        [18.1, 0],\n        [33.4, 0],\n        [16.4, 0]\n      ]\n    }],\n    legend: {\n      offsetY: -10\n    },\n    xaxis: {\n      tickAmount: 10\n    },\n    yaxis: {\n      tickAmount: 7,\n      opposite: yaxis_opposite\n    }\n  }\n  var scatterChart = new ApexCharts(\n    document.querySelector(\"#scatter-chart\"),\n    scatterChartOptions\n  );\n  scatterChart.render();\n\n  // Pie Chart\n  // -----------------------------\n  var pieChartOptions = {\n    chart: {\n      type: 'pie',\n      height: 350\n    },\n    colors: themeColors,\n    labels: ['Team A', 'Team B', 'Team C', 'Team D'],\n    series: [44, 55, 13, 43],\n    legend: {\n      itemMargin: {\n        horizontal: 2\n      },\n    },\n    responsive: [{\n      breakpoint: 480,\n      options: {\n        chart: {\n          width: 350\n        },\n        legend: {\n          position: 'bottom'\n        }\n      }\n    }]\n  }\n  var pieChart = new ApexCharts(\n    document.querySelector(\"#pie-chart\"),\n    pieChartOptions\n  );\n  pieChart.render();\n\n  // Donut Chart\n  // -----------------------------\n  var donutChartOptions = {\n    chart: {\n      type: 'donut',\n      height: 350\n    },\n    colors: themeColors,\n    series: [44, 55, 41, 17],\n    legend: {\n      itemMargin: {\n        horizontal: 2\n      },\n    },\n    responsive: [{\n      breakpoint: 480,\n      options: {\n        chart: {\n          width: 350\n        },\n        legend: {\n          position: 'bottom'\n        }\n      }\n    }]\n  }\n  var donutChart = new ApexCharts(\n    document.querySelector(\"#donut-chart\"),\n    donutChartOptions\n  );\n\n  donutChart.render();\n\n  // Radial Bar Chart\n  // -----------------------------\n  var radialBarChartOptions = {\n    chart: {\n      height: 350,\n      type: 'radialBar',\n    },\n    colors: themeColors,\n    plotOptions: {\n      radialBar: {\n        dataLabels: {\n          name: {\n            fontSize: '22px',\n          },\n          value: {\n            fontSize: '16px',\n          },\n          total: {\n            show: true,\n            label: 'Total',\n            // color: $label_color,\n            formatter: function (w) {\n              // By default this function returns the average of all series. The below is just an example to show the use of custom formatter function\n              return 249\n            }\n          }\n        }\n      }\n    },\n    series: [44, 55, 67, 83],\n    labels: ['Apples', 'Oranges', 'Bananas', 'Berries'],\n  }\n  var radialBarChart = new ApexCharts(\n    document.querySelector(\"#radial-bar-chart\"),\n    radialBarChartOptions\n  );\n  radialBarChart.render();\n\n  // Radar Chart\n  // -----------------------------\n  var radarChartOptions = {\n    chart: {\n      height: 350,\n      type: 'radar',\n    },\n    colors: themeColors,\n    series: [{\n      name: 'Series 1',\n      data: [80, 50, 30, 40, 100, 20],\n    }],\n    labels: ['January', 'February', 'March', 'April', 'May', 'June'],\n    dataLabels: {\n      style: {\n        color: $label_color_light\n      }\n    }\n  }\n  var radarChart = new ApexCharts(document.querySelector(\"#radar-chart\"), radarChartOptions);\n  radarChart.render();\n\n  // Heat Map Chart\n  // -----------------------------\n  function generateData(count, yrange) {\n    var i = 0,\n      series = [];\n    while (i < count) {\n      var x = 'w' + (i + 1).toString(),\n        y = Math.floor(Math.random() * (yrange.max - yrange.min + 1)) + yrange.min;\n\n      series.push({\n        x: x,\n        y: y\n      });\n      i++;\n    }\n    return series;\n  }\n  var heatChartOptions = {\n    chart: {\n      height: 350,\n      type: 'heatmap',\n    },\n    dataLabels: {\n      enabled: false\n    },\n    colors: [$primary],\n    series: [{\n      name: 'Metric1',\n      data: generateData(18, {\n        min: 0,\n        max: 90\n      })\n    },\n    {\n      name: 'Metric2',\n      data: generateData(18, {\n        min: 0,\n        max: 90\n      })\n    },\n    {\n      name: 'Metric3',\n      data: generateData(18, {\n        min: 0,\n        max: 90\n      })\n    },\n    {\n      name: 'Metric4',\n      data: generateData(18, {\n        min: 0,\n        max: 90\n      })\n    },\n    {\n      name: 'Metric5',\n      data: generateData(18, {\n        min: 0,\n        max: 90\n      })\n    },\n    {\n      name: 'Metric6',\n      data: generateData(18, {\n        min: 0,\n        max: 90\n      })\n    },\n    {\n      name: 'Metric7',\n      data: generateData(18, {\n        min: 0,\n        max: 90\n      })\n    },\n    {\n      name: 'Metric8',\n      data: generateData(18, {\n        min: 0,\n        max: 90\n      })\n    },\n    {\n      name: 'Metric9',\n      data: generateData(18, {\n        min: 0,\n        max: 90\n      })\n    }\n    ],\n    yaxis: {\n      opposite: yaxis_opposite\n    }\n  }\n  var heatChart = new ApexCharts(\n    document.querySelector(\"#heat-map-chart\"),\n    heatChartOptions);\n  heatChart.render();\n});\n"
  },
  {
    "path": "public/backend/js/scripts/charts/chart-chartjs.js",
    "content": "/*=========================================================================================\n    File Name: chart-chartjs.js\n    Description: Chartjs Examples\n    ----------------------------------------------------------------------------------------\n    Item Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n    Author: PIXINVENT\n    Author URL: http://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n\n$(window).on(\"load\", function () {\n\n  var $primary = '#7367F0';\n  var $success = '#28C76F';\n  var $danger = '#EA5455';\n  var $warning = '#FF9F43';\n  var $label_color = '#1E1E1E';\n  var grid_line_color = '#dae1e7';\n  var scatter_grid_color = '#f3f3f3';\n  var $scatter_point_light = '#D1D4DB';\n  var $scatter_point_dark = '#5175E0';\n  var $white = '#fff';\n  var $black = '#000';\n\n  var themeColors = [$primary, $success, $danger, $warning, $label_color];\n\n  // Line Chart\n  // ------------------------------------------\n\n  //Get the context of the Chart canvas element we want to select\n  var lineChartctx = $(\"#line-chart\");\n\n  // Chart Options\n  var linechartOptions = {\n    responsive: true,\n    maintainAspectRatio: false,\n    legend: {\n      position: 'top',\n    },\n    hover: {\n      mode: 'label'\n    },\n    scales: {\n      xAxes: [{\n        display: true,\n        gridLines: {\n          color: grid_line_color,\n        },\n        scaleLabel: {\n          display: true,\n        }\n      }],\n      yAxes: [{\n        display: true,\n        gridLines: {\n          color: grid_line_color,\n        },\n        scaleLabel: {\n          display: true,\n        }\n      }]\n    },\n    title: {\n      display: true,\n      text: 'World population per region (in millions)'\n    }\n  };\n\n  // Chart Data\n  var linechartData = {\n    labels: [1500, 1600, 1700, 1750, 1800, 1850, 1900, 1950, 1999, 2050],\n    datasets: [{\n      label: \"Africa\",\n      data: [86, 114, 106, 106, 107, 111, 133, 221, 783, 2478],\n      borderColor: $primary,\n      fill: false\n    }, {\n      data: [282, 350, 411, 502, 635, 809, 947, 1402, 3700, 5267],\n      label: \"Asia\",\n      borderColor: $success,\n      fill: false\n    }, {\n      data: [168, 170, 178, 190, 203, 276, 408, 547, 675, 734],\n      label: \"Europe\",\n      borderColor: $danger,\n      fill: false\n    }, {\n      data: [40, 20, 10, 16, 24, 38, 74, 167, 508, 784],\n      label: \"Latin America\",\n      borderColor: $warning,\n      fill: false\n    }, {\n      data: [6, 3, 2, 2, 7, 26, 82, 172, 312, 433],\n      label: \"North America\",\n      borderColor: $label_color,\n      fill: false\n    }]\n  };\n\n  var lineChartconfig = {\n    type: 'line',\n\n    // Chart Options\n    options: linechartOptions,\n\n    data: linechartData\n  };\n\n  // Create the chart\n  var lineChart = new Chart(lineChartctx, lineChartconfig);\n\n\n\n\n  // Bar Chart\n  // ------------------------------------------\n\n  //Get the context of the Chart canvas element we want to select\n  var barChartctx = $(\"#bar-chart\");\n\n  // Chart Options\n  var barchartOptions = {\n    // Elements options apply to all of the options unless overridden in a dataset\n    // In this case, we are setting the border of each bar to be 2px wide\n    elements: {\n      rectangle: {\n        borderWidth: 2,\n        borderSkipped: 'left'\n      }\n    },\n    responsive: true,\n    maintainAspectRatio: false,\n    responsiveAnimationDuration: 500,\n    legend: { display: false },\n    scales: {\n      xAxes: [{\n        display: true,\n        gridLines: {\n          color: grid_line_color,\n        },\n        scaleLabel: {\n          display: true,\n        }\n      }],\n      yAxes: [{\n        display: true,\n        gridLines: {\n          color: grid_line_color,\n        },\n        scaleLabel: {\n          display: true,\n        },\n        ticks: {\n          stepSize: 1000\n        },\n      }],\n    },\n    title: {\n      display: true,\n      text: 'Predicted world population (millions) in 2050'\n    },\n\n  };\n\n  // Chart Data\n  var barchartData = {\n    labels: [\"Africa\", \"Asia\", \"Europe\", \"Latin America\", \"North America\"],\n    datasets: [{\n      label: \"Population (millions)\",\n      data: [2478, 5267, 734, 784, 433],\n      backgroundColor: themeColors,\n      borderColor: \"transparent\"\n    }]\n  };\n\n  var barChartconfig = {\n    type: 'bar',\n\n    // Chart Options\n    options: barchartOptions,\n\n    data: barchartData\n  };\n\n  // Create the chart\n  var barChart = new Chart(barChartctx, barChartconfig);\n\n\n\n  // Horizontal Chart\n  // -------------------------------------\n\n  // Get the context of the Chart canvas element we want to select\n  var horizontalChartctx = $(\"#horizontal-bar\");\n\n  var horizontalchartOptions = {\n    // Elements options apply to all of the options unless overridden in a dataset\n    // In this case, we are setting the border of each horizontal bar to be 2px wide\n    elements: {\n      rectangle: {\n        borderWidth: 2,\n        borderSkipped: 'right',\n        borderSkipped: 'top',\n      }\n    },\n    responsive: true,\n    maintainAspectRatio: false,\n    responsiveAnimationDuration: 500,\n    legend: {\n      display: false,\n    },\n    scales: {\n      xAxes: [{\n        display: true,\n        gridLines: {\n          color: grid_line_color,\n        },\n        scaleLabel: {\n          display: true,\n        }\n      }],\n      yAxes: [{\n        display: true,\n        gridLines: {\n          color: grid_line_color,\n        },\n        scaleLabel: {\n          display: true,\n        }\n      }]\n    },\n    title: {\n      display: true,\n      text: 'Predicted world population (millions) in 2050'\n    }\n  };\n\n  // Chart Data\n  var horizontalchartData = {\n    labels: [\"Africa\", \"Asia\", \"Europe\", \"Latin America\", \"North America\"],\n    datasets: [{\n      label: \"Population (millions)\",\n      data: [2478, 5267, 734, 784, 433],\n      backgroundColor: themeColors,\n      borderColor: \"transparent\"\n    }]\n  };\n\n  var horizontalChartconfig = {\n    type: 'horizontalBar',\n\n    // Chart Options\n    options: horizontalchartOptions,\n\n    data: horizontalchartData\n  };\n\n  // Create the chart\n  var horizontalChart = new Chart(horizontalChartctx, horizontalChartconfig);\n\n\n\n  // Pie Chart\n  // --------------------------------\n\n\n  //Get the context of the Chart canvas element we want to select\n  var pieChartctx = $(\"#simple-pie-chart\");\n\n  // Chart Options\n  var piechartOptions = {\n    responsive: true,\n    maintainAspectRatio: false,\n    responsiveAnimationDuration: 500,\n    title: {\n      display: true,\n      text: 'Predicted world population (millions) in 2050'\n    }\n  };\n\n  // Chart Data\n  var piechartData = {\n    labels: [\"Africa\", \"Asia\", \"Europe\", \"Latin America\", \"North America\"],\n    datasets: [{\n      label: \"My First dataset\",\n      data: [2478, 5267, 734, 784, 433],\n      backgroundColor: themeColors,\n    }]\n  };\n\n  var pieChartconfig = {\n    type: 'pie',\n\n    // Chart Options\n    options: piechartOptions,\n\n    data: piechartData\n  };\n\n  // Create the chart\n  var pieSimpleChart = new Chart(pieChartctx, pieChartconfig);\n\n\n\n  // Doughnut Chart\n  // ---------------------------------------------\n\n  //Get the context of the Chart canvas element we want to select\n  var doughnutChartctx = $(\"#simple-doughnut-chart\");\n\n  // Chart Options\n  var doughnutchartOptions = {\n    responsive: true,\n    maintainAspectRatio: false,\n    responsiveAnimationDuration: 500,\n    title: {\n      display: true,\n      text: 'Predicted world population (millions) in 2050'\n    }\n  };\n\n  // Chart Data\n  var doughnutchartData = {\n    labels: [\"Africa\", \"Asia\", \"Europe\", \"Latin America\", \"North America\"],\n    datasets: [{\n      label: \"My First dataset\",\n      data: [2478, 5267, 734, 784, 433],\n      backgroundColor: themeColors,\n    }]\n  };\n\n  var doughnutChartconfig = {\n    type: 'doughnut',\n\n    // Chart Options\n    options: doughnutchartOptions,\n\n    data: doughnutchartData\n  };\n\n  // Create the chart\n  var doughnutSimpleChart = new Chart(doughnutChartctx, doughnutChartconfig);\n\n\n  // Radar Chart\n  // ----------------------------------------\n\n  //Get the context of the Chart canvas element we want to select\n  var radarChartctx = $(\"#radar-chart\");\n\n  // Chart Options\n  var radarchartOptions = {\n    responsive: true,\n    maintainAspectRatio: false,\n    responsiveAnimationDuration: 500,\n    legend: {\n      position: 'top',\n    },\n    tooltips: {\n      callbacks: {\n        label: function (tooltipItems, data) {\n          return data.datasets[tooltipItems.datasetIndex].label + \": \" + tooltipItems.yLabel;\n        }\n      }\n    },\n    title: {\n      display: true,\n      text: 'Distribution in % of world population'\n    },\n    scale: {\n      reverse: false,\n      ticks: {\n        beginAtZero: true,\n        stepSize: 10\n      }\n    }\n  };\n\n  // Chart Data\n  var radarchartData = {\n    labels: [\"Africa\", \"Asia\", \"Europe\", \"Latin America\", \"North America\"],\n    datasets: [{\n      label: \"1950\",\n      fill: true,\n      backgroundColor: \"rgba(179,181,198,0.2)\",\n      borderColor: \"rgba(179,181,198,1)\",\n      pointBorderColor: $white,\n      pointBackgroundColor: \"rgba(179,181,198,1)\",\n      data: [8.77, 55.61, 21.69, 6.62, 6.82],\n    }, {\n      label: \"2050\",\n      fill: true,\n      backgroundColor: \"rgba(255,99,132,0.2)\",\n      borderColor: \"rgba(255,99,132,1)\",\n      pointBorderColor: $white,\n      pointBackgroundColor: \"rgba(255,99,132,1)\",\n      data: [25.48, 54.16, 7.61, 8.06, 4.45],\n    },]\n  };\n\n  var radarChartconfig = {\n    type: 'radar',\n\n    // Chart Options\n    options: radarchartOptions,\n\n    data: radarchartData\n  };\n\n  // Create the chart\n  var polarChart = new Chart(radarChartctx, radarChartconfig);\n\n\n\n  // Polar Chart\n  // -----------------------------------\n\n  //Get the context of the Chart canvas element we want to select\n  var polarChartctx = $(\"#polar-chart\");\n\n  // Chart Options\n  var polarchartOptions = {\n    responsive: true,\n    maintainAspectRatio: false,\n    responsiveAnimationDuration: 500,\n    legend: {\n      position: 'top',\n    },\n    title: {\n      display: true,\n      text: 'Predicted world population (millions) in 2050'\n    },\n    scale: {\n      ticks: {\n        beginAtZero: true,\n        stepSize: 2000\n      },\n      reverse: false\n    },\n    animation: {\n      animateRotate: false\n    }\n  };\n\n  // Chart Data\n  var polarchartData = {\n    labels: [\"Africa\", \"Asia\", \"Europe\", \"Latin America\", \"North America\"],\n    datasets: [{\n      label: \"Population (millions)\",\n      backgroundColor: themeColors,\n      data: [2478, 5267, 734, 784, 433]\n    }],\n  };\n\n  var polarChartconfig = {\n    type: 'polarArea',\n\n    // Chart Options\n    options: polarchartOptions,\n\n    data: polarchartData\n  };\n\n  // Create the chart\n  var polarChart = new Chart(polarChartctx, polarChartconfig);\n\n\n\n\n  // Bubble Chart\n  // ---------------------------------------\n\n  //Get the context of the Chart canvas element we want to select\n  var bubbleChartctx = $(\"#bubble-chart\");\n\n  var randomScalingFactor = function () {\n    return (Math.random() > 0.5 ? 1.0 : -1.0) * Math.round(Math.random() * 100);\n  };\n\n  // Chart Options\n  var bubblechartOptions = {\n    responsive: true,\n    maintainAspectRatio: false,\n    scales: {\n      xAxes: [{\n        display: true,\n        gridLines: {\n          color: grid_line_color,\n        },\n        scaleLabel: {\n          display: true,\n          labelString: \"GDP (PPP)\"\n        }\n      }],\n      yAxes: [{\n        display: true,\n        gridLines: {\n          color: grid_line_color,\n        },\n        scaleLabel: {\n          display: true,\n          labelString: \"Happiness\"\n        },\n        ticks: {\n          stepSize: 0.5\n        },\n      }]\n    },\n    title: {\n      display: true,\n      text: 'Predicted world population (millions) in 2050'\n    }\n  };\n\n  // Chart Data\n  var bubblechartData = {\n    animation: {\n      duration: 10000\n    },\n    datasets: [{\n      label: [\"China\"],\n      backgroundColor: \"rgba(255,221,50,0.2)\",\n      borderColor: \"rgba(255,221,50,1)\",\n      data: [{\n        x: 21269017,\n        y: 5.245,\n        r: 15\n      }],\n    }, {\n      label: [\"Denmark\"],\n      backgroundColor: \"rgba(60,186,159,0.2)\",\n      borderColor: \"rgba(60,186,159,1)\",\n      data: [{\n        x: 258702,\n        y: 7.526,\n        r: 10\n      }]\n    }, {\n      label: [\"Germany\"],\n      backgroundColor: \"rgba(0,0,0,0.2)\",\n      borderColor: $black,\n      data: [{\n        x: 3979083,\n        y: 6.994,\n        r: 15\n      }]\n    }, {\n      label: [\"Japan\"],\n      backgroundColor: \"rgba(193,46,12,0.2)\",\n      borderColor: \"rgba(193,46,12,1)\",\n      data: [{\n        x: 4931877,\n        y: 5.921,\n        r: 15\n      }]\n    }]\n  };\n\n  var bubbleChartconfig = {\n    type: 'bubble',\n\n    // Chart Options\n    options: bubblechartOptions,\n\n    data: bubblechartData\n  };\n\n  // Create the chart\n  var bubbleChart = new Chart(bubbleChartctx, bubbleChartconfig);\n\n\n\n  // Scatter Chart\n  // ------------------------------------\n\n  //Get the context of the Chart canvas element we want to select\n  var scatterChartctx = $(\"#scatter-chart\");\n\n  // Chart Options\n  var scatterchartOptions = {\n    responsive: true,\n    maintainAspectRatio: false,\n    responsiveAnimationDuration: 800,\n    title: {\n      display: false,\n      text: 'Chart.js Scatter Chart'\n    },\n    scales: {\n      xAxes: [{\n        position: 'top',\n        gridLines: {\n          color: scatter_grid_color,\n          drawTicks: false,\n        },\n        scaleLabel: {\n          display: true,\n          labelString: 'x axis'\n        }\n      }],\n      yAxes: [{\n        position: 'right',\n        gridLines: {\n          color: scatter_grid_color,\n          drawTicks: false,\n        },\n        scaleLabel: {\n          display: true,\n          labelString: 'y axis'\n        }\n      }]\n    }\n  };\n\n  // Chart Data\n  var scatterchartData = {\n    datasets: [{\n      label: \"My First dataset\",\n      data: [{\n        x: 65,\n        y: 28,\n      }, {\n        x: 59,\n        y: 48,\n      }, {\n        x: 80,\n        y: 40,\n      }, {\n        x: 81,\n        y: 19,\n      }, {\n        x: 56,\n        y: 86,\n      }, {\n        x: 55,\n        y: 27,\n      }, {\n        x: 40,\n        y: 89,\n      }],\n      backgroundColor: \"rgba(209,212,219,.3)\",\n      borderColor: \"transparent\",\n      pointBorderColor: $scatter_point_light,\n      pointBackgroundColor: $white,\n      pointBorderWidth: 2,\n      pointHoverBorderWidth: 2,\n      pointRadius: 4,\n    }, {\n      label: \"My Second dataset\",\n      data: [{\n        x: 45,\n        y: 17,\n      }, {\n        x: 25,\n        y: 62,\n      }, {\n        x: 16,\n        y: 78,\n      }, {\n        x: 36,\n        y: 88,\n      }, {\n        x: 67,\n        y: 26,\n      }, {\n        x: 18,\n        y: 48,\n      }, {\n        x: 76,\n        y: 73,\n      }],\n      backgroundColor: \"rgba(81,117,224,.6)\",\n      borderColor: \"transparent\",\n      pointBorderColor: $scatter_point_dark,\n      pointBackgroundColor: $white,\n      pointBorderWidth: 2,\n      pointHoverBorderWidth: 2,\n      pointRadius: 4,\n    }]\n  };\n\n  var scatterChartconfig = {\n    type: 'scatter',\n\n    // Chart Options\n    options: scatterchartOptions,\n\n    data: scatterchartData\n  };\n\n  // Create the chart\n  var scatterChart = new Chart(scatterChartctx, scatterChartconfig);\n\n});\n"
  },
  {
    "path": "public/backend/js/scripts/charts/chart-echart.js",
    "content": "/*=========================================================================================\n    File Name: chart-echart.js\n    Description: echarts examples\n    ----------------------------------------------------------------------------------------\n    Item Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n    Author: PIXINVENT\n    Author URL: http://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n\n$(window).on(\"load\", function(){\n\n    var $dark_green = '#4ea397';\n    var $green = '#22c3aa';\n    var $light_green = '#7bd9a5';\n    var $lighten_green = '#a8e7d2';\n\n\n\n    // Bar chart\n    // ------------------------------\n\n    var barChart = echarts.init(document.getElementById('bar-chart'));\n\n\n    // var i;\n    function randomize() {\n        return Math.round(300 + Math.random() * 700) / 10\n    };\n\n    var barChartoption = {\n        legend: {},\n        tooltip: {},\n        dataset: {\n            source: [\n                ['product', '2015', '2016', '2017'],\n                ['Matcha Latte', randomize(), randomize(), randomize()],\n                ['Milk Tea', randomize(), randomize(), randomize()],\n                ['Cheese Cocoa', randomize(), randomize(), randomize()],\n                ['Walnut Brownie', randomize(), randomize(), randomize()],\n            ],\n        },\n\n\n        xAxis: {\n            type: 'category',\n            splitLine: { show: true },\n        },\n        yAxis: {},\n        // Declare several bar series, each will be mapped\n        // to a column of dataset.source by default.\n        series: [\n            {\n                type: 'bar',\n                itemStyle: {color: $dark_green},\n            },\n            {\n                type: 'bar',\n                itemStyle: {color: $green},\n            },\n            {\n                type: 'bar',\n                itemStyle: {color: $light_green},\n            }\n        ]\n    };\n    barChart.setOption(barChartoption);\n\n\n\n    // Line chart\n    // ------------------------------\n\n    var lineChart = echarts.init(document.getElementById('line-chart'));\n\n    data = [[\"2000-06-05\",116],[\"2000-06-06\",129],[\"2000-06-07\",135],[\"2000-06-08\",86],[\"2000-06-09\",73],[\"2000-06-10\",85],[\"2000-06-11\",73],[\"2000-06-12\",68],[\"2000-06-13\",92],[\"2000-06-14\",130],[\"2000-06-15\",245],[\"2000-06-16\",139],[\"2000-06-17\",115],[\"2000-06-18\",111],[\"2000-06-19\",309],[\"2000-06-20\",206],[\"2000-06-21\",137],[\"2000-06-22\",128],[\"2000-06-23\",85],[\"2000-06-24\",94],[\"2000-06-25\",71],[\"2000-06-26\",106],[\"2000-06-27\",84],[\"2000-06-28\",93],[\"2000-06-29\",85],[\"2000-06-30\",73],[\"2000-07-01\",83],[\"2000-07-02\",125],[\"2000-07-03\",107],[\"2000-07-04\",82],[\"2000-07-05\",44],[\"2000-07-06\",72],[\"2000-07-07\",106],[\"2000-07-08\",107],[\"2000-07-09\",66],[\"2000-07-10\",91],[\"2000-07-11\",92],[\"2000-07-12\",113],[\"2000-07-13\",107],[\"2000-07-14\",131],[\"2000-07-15\",111],[\"2000-07-16\",64],[\"2000-07-17\",69],[\"2000-07-18\",88],[\"2000-07-19\",77],[\"2000-07-20\",83],[\"2000-07-21\",111],[\"2000-07-22\",57],[\"2000-07-23\",55],[\"2000-07-24\",60]];\n\n    var dateList = data.map(function (item) {\n        return item[0];\n    });\n    var valueList = data.map(function (item) {\n        return item[1];\n    });\n\n    var lineChartoption = {\n\n        // Make gradient line here\n        visualMap: [{\n            show: false,\n            type: 'continuous',\n            seriesIndex: 0,\n            min: 0,\n            max: 400,\n            color: [$dark_green, $lighten_green]\n        }],\n        tooltip: {\n            trigger: 'axis'\n        },\n        xAxis: [{\n            data: dateList,\n            splitLine: {show: true}\n        }],\n        yAxis: [{\n            splitLine: {show: false}\n        }],\n        series: [{\n            type: 'line',\n            showSymbol: false,\n            data: valueList\n        }]\n    };\n\n    lineChart.setOption(lineChartoption);\n\n\n    // Pie chart\n    // ------------------------------\n\n    var pieChart = echarts.init(document.getElementById('pie-chart'));\n\n    var pieChartoption = {\n        tooltip : {\n            trigger: 'item',\n            formatter: \"{a} <br/>{b} : {c} ({d}%)\"\n        },\n        legend: {\n            orient: 'vertical',\n            left: 'left',\n            data: ['Direct interview', 'Email marketing', 'Alliance advertising', 'Video ad', 'Search engine']\n        },\n        series : [\n            {\n                name: 'Access source',\n                type: 'pie',\n                radius : '55%',\n                center: ['50%', '60%'],\n                color: ['#FF9F43','#28C76F','#EA5455','#87ceeb','#7367F0'],\n                data: [\n                  {value: 335, name: 'Direct interview'},\n                  {value: 310, name: 'Email marketing'},\n                  {value: 234, name: 'Alliance advertising'},\n                  {value: 135, name: 'Video ad'},\n                  {value: 1548, name: 'Search engine'}\n                ],\n                itemStyle: {\n                    emphasis: {\n                        shadowBlur: 10,\n                        shadowOffsetX: 0,\n                        shadowColor: 'rgba(0, 0, 0, 0.5)'\n                    }\n                }\n            }\n        ],\n    };\n\n    pieChart.setOption(pieChartoption);\n\n\n    // Scatter chart\n    // ------------------------------\n\n    var scatterChart = echarts.init(document.getElementById('scatter-chart'));\n\n    var data = [\n        [[28604,77,17096869,'Australia',1990],[31163,77.4,27662440,'Canada',1990],[1516,68,1154605773,'China',1990],[13670,74.7,10582082,'Cuba',1990],[28599,75,4986705,'Finland',1990],[29476,77.1,56943299,'France',1990],[31476,75.4,78958237,'Germany',1990],[28666,78.1,254830,'Iceland',1990],[1777,57.7,870601776,'India',1990],[29550,79.1,122249285,'Japan',1990],[2076,67.9,20194354,'North Korea',1990],[12087,72,42972254,'South Korea',1990],[24021,75.4,3397534,'New Zealand',1990],[43296,76.8,4240375,'Norway',1990],[10088,70.8,38195258,'Poland',1990],[19349,69.6,147568552,'Russia',1990],[10670,67.3,53994605,'Turkey',1990],[26424,75.7,57110117,'United Kingdom',1990],[37062,75.4,252847810,'United States',1990]],\n        [[44056,81.8,23968973,'Australia',2015],[43294,81.7,35939927,'Canada',2015],[13334,76.9,1376048943,'China',2015],[21291,78.5,11389562,'Cuba',2015],[38923,80.8,5503457,'Finland',2015],[37599,81.9,64395345,'France',2015],[44053,81.1,80688545,'Germany',2015],[42182,82.8,329425,'Iceland',2015],[5903,66.8,1311050527,'India',2015],[36162,83.5,126573481,'Japan',2015],[1390,71.4,25155317,'North Korea',2015],[34644,80.7,50293439,'South Korea',2015],[34186,80.6,4528526,'New Zealand',2015],[64304,81.6,5210967,'Norway',2015],[24787,77.3,38611794,'Poland',2015],[23038,73.13,143456918,'Russia',2015],[19360,76.5,78665830,'Turkey',2015],[38225,81.4,64715810,'United Kingdom',2015],[53354,79.1,321773631,'United States',2015]]\n    ];\n\n    var scatterChartoption = {\n\n        legend: {\n            right: 10,\n            data: ['1990', '2015']\n        },\n        xAxis: {\n            splitLine: {\n                lineStyle: {\n                    type: 'dashed'\n                }\n            }\n        },\n        yAxis: {\n            splitLine: {\n                lineStyle: {\n                    type: 'dashed'\n                }\n            },\n            scale: true\n        },\n        series: [{\n            name: '1990',\n            data: data[0],\n            type: 'scatter',\n            symbolSize: function (data) {\n                return Math.sqrt(data[2]) / 5e2;\n            },\n            label: {\n                emphasis: {\n                    show: true,\n                    formatter: function (param) {\n                        return param.data[3];\n                    },\n                    position: 'top'\n                }\n            },\n            itemStyle: {\n                normal: {\n                    shadowBlur: 10,\n                    shadowColor: 'rgba(120, 36, 50, 0.5)',\n                    shadowOffsetY: 5,\n                    color: new echarts.graphic.RadialGradient(0.4, 0.3, 1, [{\n                        offset: 0,\n                        color: 'rgb(251, 118, 123)'\n                    }, {\n                        offset: 1,\n                        color: 'rgb(204, 46, 72)'\n                    }])\n                }\n            }\n        }, {\n            name: '2015',\n            data: data[1],\n            type: 'scatter',\n            symbolSize: function (data) {\n                return Math.sqrt(data[2]) / 5e2;\n            },\n            label: {\n                emphasis: {\n                    show: true,\n                    formatter: function (param) {\n                        return param.data[3];\n                    },\n                    position: 'top'\n                }\n            },\n            itemStyle: {\n                normal: {\n                    shadowBlur: 10,\n                    shadowColor: 'rgba(25, 100, 150, 0.5)',\n                    shadowOffsetY: 5,\n                    color: new echarts.graphic.RadialGradient(0.4, 0.3, 1, [{\n                        offset: 0,\n                        color: 'rgb(129, 227, 238)'\n                    }, {\n                        offset: 1,\n                        color: 'rgb(25, 183, 207)'\n                    }])\n                }\n            }\n        }]\n    };\n\n    scatterChart.setOption(scatterChartoption);\n\n\n    // Polar chart\n    // ------------------------------\n\n    var polarChart = echarts.init(document.getElementById('polar-chart'));\n\n    var data = [];\n\n    for (var i = 0; i <= 360; i++) {\n        var t = i / 180 * Math.PI;\n        var r = Math.sin(2 * t) * Math.cos(2 * t);\n        data.push([r, i]);\n    }\n\n    var polarChartoption = {\n        legend: {\n            data: ['line']\n        },\n        polar: {\n            center: ['50%', '54%']\n        },\n        tooltip: {\n            trigger: 'axis',\n            axisPointer: {\n                type: 'cross'\n            }\n        },\n        angleAxis: {\n            type: 'value',\n            startAngle: 0\n        },\n        radiusAxis: {\n            min: 0\n        },\n        series: [{\n            coordinateSystem: 'polar',\n            name: 'line',\n            type: 'line',\n            showSymbol: false,\n            data: data\n        }],\n        animationDuration: 2000\n    };\n\n    polarChart.setOption(polarChartoption);\n\n\n    // Radar chart\n    // ------------------------------\n\n    var radarChart = echarts.init(document.getElementById('radar-chart'));\n\n    var radarChartoption = {\n        tooltip: {},\n        radar: {\n            indicator: [\n                { name: 'Attack', max: 20 },\n                { name: 'Defensive', max: 20 },\n                { name: 'Speed', max: 20 },\n                { name: 'Power', max: 20 },\n                { name: 'Endurance', max: 20 },\n                { name: 'Agile', max: 20 }\n            ]\n        },\n        series: [{\n           name: 'Ability value',\n            type: 'radar',\n            data: [{ value: [19, 9, 18, 16, 16, 20] }]\n        }]\n    };\n\n    radarChart.setOption(radarChartoption);\n\n});\n"
  },
  {
    "path": "public/backend/js/scripts/charts/gmaps/maps.js",
    "content": "/*=========================================================================================\n    File Name: maps.js\n    Description: google maps\n    ----------------------------------------------------------------------------------------\n    Item Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n    Author: PIXINVENT\n    Author URL: http://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n\n// Gmaps Maps\n// ------------------------------\n\n$(window).on(\"load\", function(){\n\n    // Basic Map\n    // ------------------------------\n\n    map = new GMaps({\n        div: '#basic-map',\n        lat: 9.0820,\n        lng: 8.6753,\n        zoom: 7\n    });\n    map.addMarker({\n        lat: 9.0765,\n        lng: 7.3986,\n        title: 'Marker1',\n        draggable: true,\n    });\n\n    // Info Window\n    // ------------------------------\n\n    map = new GMaps({\n        div: '#info-window',\n        lat: 47.4073,\n        lng: 7.7526,\n        zoom: 7\n    });\n    map.addMarker({\n        lat: 47.4073,\n        lng: 7.76,\n        title: 'Marker1',\n        infoWindow: {\n            content: '<p>Marker1</p>'\n        }\n    });\n    map.addMarker({\n        lat: 47.3769,\n        lng: 8.5417,\n        title: 'Marker2',\n        infoWindow: {\n            content: '<p>Marker2</p>'\n        }\n    });\n    map.addMarker({\n        lat: 46.9480,\n        lng: 7.4474,\n        title: 'Marker3',\n        infoWindow: {\n            content: '<p>Marker3</p>'\n        }\n    });\n\n    // Street View Markers\n    // ------------------------------\n\n    map = GMaps.createPanorama({\n      el: '#street-view',\n      lat : 52.201272,\n      lng: 0.118720,\n    });\n\n    // Random Value for street heading\n\n    $(\".street-heading\").on(\"click\", function(){\n      map = GMaps.createPanorama({\n        el: '#street-view',\n        lat : 52.201272,\n        lng: 0.118720,\n        pov: { heading: Math.random() * 360, pitch: 5 }\n      });\n    });\n\n    // Random Value for street Pitch\n\n    $(\".street-pitch\").on(\"click\", function(){\n      map = GMaps.createPanorama({\n        el: '#street-view',\n        lat : 52.201272,\n        lng: 0.118720,\n        pov: { heading: 20, pitch: Math.random() * 180 - 90 }\n      });\n    });\n\n    // Random Value for both street heading and street pitch\n\n    $(\".street-both\").on(\"click\", function(){\n      map = GMaps.createPanorama({\n        el: '#street-view',\n        lat : 52.201272,\n        lng: 0.118720,\n        pov: { heading: Math.random() * 360, pitch: Math.random() * 180 - 90 }\n      });\n    });\n\n});\n\n"
  },
  {
    "path": "public/backend/js/scripts/components.js",
    "content": "/*=========================================================================================\n  File Name: Components.js\n  Description: For Generic Components.\n  ----------------------------------------------------------------------------------------\n  Item Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n  Author: Pixinvent\n  Author URL: http://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n\n(function (window, document, $) {\n  /***** Component Variables *****/\n  var alertValidationInput = $(\".alert-validation\"),\n    alertRegex = /^[0-9]+$/,\n    alertValidationMsg = $(\".alert-validation-msg\"),\n    accordion = $(\".accordion\"),\n    collapseTitle = $(\".collapse-title\"),\n    collapseHoverTitle = $(\".collapse-hover-title\"),\n    dropdownMenuIcon = $(\".dropdown-icon-wrapper .dropdown-item\");\n\n  /***** Alerts *****/\n  /* validation with alert */\n  alertValidationInput.on('input', function () {\n    if (alertValidationInput.val().match(alertRegex)) {\n      alertValidationMsg.css(\"display\", \"none\");\n    } else {\n      alertValidationMsg.css(\"display\", \"block\");\n    }\n  });\n\n  /***** Carousel *****/\n  // For Carousel With Enabled Keyboard Controls\n  $(document).on(\"keyup\", function (e) {\n    if (e.which == 39) {\n      $('.carousel[data-keyboard=\"true\"]').carousel('next');\n    } else if (e.which == 37) {\n      $('.carousel[data-keyboard=\"true\"]').carousel('prev');\n    }\n  })\n\n  // To open Collapse on hover\n  if (accordion.attr(\"data-toggle-hover\", \"true\")) {\n    collapseHoverTitle.closest(\".card\").on(\"mouseenter\", function () {\n      $(this).children(\".collapse\").collapse(\"show\");\n    });\n  }\n  // Accordion with Shadow - When Collapse open\n  $('.accordion-shadow .collapse-header .card-header').on(\"click\", function () {\n    var $this = $(this);\n    $this.parent().siblings(\".collapse-header.open\").removeClass(\"open\");\n    $this.parent(\".collapse-header\").toggleClass(\"open\");\n  });\n\n  /***** Dropdown *****/\n  // For Dropdown With Icons\n  dropdownMenuIcon.on(\"click\", function () {\n    $(\".dropdown-icon-wrapper .dropdown-toggle i\").remove();\n    $(this).find(\"i\").clone().appendTo(\".dropdown-icon-wrapper .dropdown-toggle\");\n    $(\".dropdown-icon-wrapper .dropdown-toggle .dropdown-item\").removeClass(\"dropdown-item\");\n  });\n+\n\n\n  /***** Chips *****/\n  // To close chips\n  $('.chip-closeable').on('click', function () {\n    $(this).closest('.chip').remove();\n  })\n})(window, document, jQuery);\n"
  },
  {
    "path": "public/backend/js/scripts/customizer.js",
    "content": "/*=========================================================================================\n  File Name: customizer.js\n  Description: Template customizer js.\n  ----------------------------------------------------------------------------------------\n  Item Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n  Author: Pixinvent\n  Author URL: hhttp://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n\n(function (window, document, $) {\n  'use strict';\n  // main menu active gradient colors object\n  var themeColor = {\n    \"theme-primary\": \"linear-gradient(118deg, #7367f0, rgba(115, 103, 240, 0.7))\",\n    \"theme-success\": \"linear-gradient(118deg, #28c76f, rgba(40, 199, 111, 0.7))\",\n    \"theme-danger\": \"linear-gradient(118deg, #ea5455, rgba(234, 84, 85, 0.7))\",\n    \"theme-info\": \"linear-gradient(118deg, #00cfe8, rgba(0, 207, 232, 0.7))\",\n    \"theme-warning\": \"linear-gradient(118deg, #ff9f43, rgba(255, 159, 67, 0.7))\",\n    \"theme-dark\": \"linear-gradient(118deg, #1e1e1e, rgba(30, 30, 30, 0.7))\"\n  }\n  // main menu active box shadow object\n  var themeBoxShadow = {\n    \"theme-primary\": \"0 0 10px 1px rgba(115, 103, 240, 0.7)\",\n    \"theme-success\": \"0 0 10px 1px rgba(40, 199, 111, 0.7)\",\n    \"theme-danger\": \"0 0 10px 1px rgba(234, 84, 85, 0.7)\",\n    \"theme-info\": \"0 0 10px 1px rgba(0, 207, 232, 0.7)\",\n    \"theme-warning\": \"0 0 10px 1px rgba(255, 159, 67, 0.7)\",\n    \"theme-dark\": \"0 0 10px 1px rgba(30, 30, 30, 0.7)\"\n  }\n  // colors for navbar header text of main menu\n  var currentColor = {\n    \"theme-default\": \"#fff\",\n    \"theme-primary\": \"#7367f0\",\n    \"theme-success\": \"#28c76f\",\n    \"theme-danger\": \"#ea5455\",\n    \"theme-info\": \"#00cfe8\",\n    \"theme-warning\": \"#ff9f43\",\n    \"theme-dark\": \"#adb5bd\"\n  }\n  // Brand Logo Poisitons\n  var LogoPosition = {\n    \"theme-primary\": \"-65px -54px\",\n    \"theme-success\": \"-120px -10px\",\n    \"theme-danger\": \"-10px -10px\",\n    \"theme-info\": \"-10px -54px\",\n    \"theme-warning\": \"-120px -54px\",\n    \"theme-dark\": \"-65px -10px\"\n  }\n\n  var body = $(\"body\"),\n    appContent = $(\".app-content\"),\n    mainMenu = $(\".main-menu\"),\n    menuContent = $(\".menu-content\"),\n    footer = $(\".footer\"),\n    navbar = $(\".header-navbar\"),\n    horizontalNavbar = $(\".horizontal-menu-wrapper .header-navbar\"),\n    navBarShadow = $(\".header-navbar-shadow\"),\n    toggleIcon = $(\".toggle-icon\"),\n    collapseSidebar = $(\"#collapse-sidebar-switch\"),\n    customizer = $(\".customizer\"),\n    brandLogo = $(\".brand-logo\");\n\n  // Customizer toggle & close button click events  [Remove customizer code from production]\n  $('.customizer-toggle').on('click', function (e) {\n    e.preventDefault();\n    $(customizer).toggleClass('open');\n  });\n  $('.customizer-close').on('click', function () {\n    $(customizer).removeClass('open');\n  });\n\n  // perfect scrollbar for customizer\n  if ($('.customizer-content').length > 0) {\n    var customizer_content = new PerfectScrollbar('.customizer-content');\n  }\n\n  /***** Theme Colors Options *****/\n  $(document).on(\"click\", \"#customizer-theme-colors .color-box\", function () {\n    var $this = $(this);\n    $this.siblings().removeClass('selected');\n    $this.addClass(\"selected\");\n    var selectedColor = $(this).data(\"color\"),\n      changeColor = themeColor[selectedColor],\n      selectedShadow = themeBoxShadow[selectedColor],\n      selectedTextColor = currentColor[selectedColor],\n      selectedLogo = LogoPosition[selectedColor];\n\n    // main-menu\n    if(body.data('menu')==\"horizontal-menu\"){\n      if(horizontalNavbar.find(\"li.sidebar-group-active:not(.dropdown-submenu)\").length) {\n        horizontalNavbar.find(\"li.sidebar-group-active:not(.dropdown-submenu)  > a\").css(\n          {\n            \"background\": changeColor,\n            \"box-shadow\": selectedShadow\n          }\n        );\n        horizontalNavbar.find(\"li.sidebar-group-active:not(.dropdown-submenu)  > ul li.active > a\").css(\n          {\n            \"color\": selectedTextColor\n          }\n        );\n      }\n    }\n    else{\n      if (menuContent.find(\"li.active\").length) {\n        menuContent.find(\"li.active\").css(\n          {\n            \"background\": changeColor,\n            \"box-shadow\": selectedShadow\n          }\n        );\n\n      }\n      else if($(\".main-menu-content\").find(\"li.sidebar-group-active\").length) {\n        $(\".main-menu-content\").find(\"li.sidebar-group-active > a\").css(\n          {\n            \"background\": changeColor,\n            \"box-shadow\": selectedShadow\n          }\n        );\n\n      }\n      else {\n        mainMenu.find(\".nav-item.active a\").css(\n          {\n            \"background\": changeColor,\n            \"box-shadow\": selectedShadow\n          }\n        );\n      }\n    }\n    // Text with logo\n    $(\".brand-text\").css(\"color\", selectedTextColor);\n    // toggle icon\n    toggleIcon.removeClass(\"primary\").css(\"color\", selectedTextColor);\n    // Changes logo color\n    brandLogo.css(\"background-position\", selectedLogo);\n  });\n\n  /***** Theme Layout Options *****/\n  $(\".layout-name\").on(\"click\", function () {\n    var $this = $(this);\n    var currentLayout = $this.data(\"layout\");\n    body.removeClass(\"dark-layout semi-dark-layout\").addClass(currentLayout);\n    if (currentLayout === \"\") {\n      mainMenu.removeClass(\"menu-dark\").addClass(\"menu-light\");\n      navbar.removeClass(\"navbar-dark\").addClass(\"navbar-light\");\n    }\n  })\n\n  // checks right radio if layout type matches\n  var layout = body.data(\"layout\");\n  $(\".layout-name[data-layout='\" + layout + \"']\").prop('checked', true);\n\n\n  collapseSidebar.on(\"click\", function(){\n    $(\".modern-nav-toggle\").trigger(\"click\");\n    $(\".main-menu\").trigger('mouseleave');\n  });\n\n  // checks if main menu is collapsed by default\n  if (body.hasClass(\"menu-collapsed\")) {\n    collapseSidebar.prop(\"checked\", true);\n  }\n  else {\n    collapseSidebar.prop(\"checked\", false);\n  }\n\n  /***** Navbar Color Options *****/\n  $(\"#customizer-navbar-colors .color-box\").on(\"click\", function () {\n    var $this = $(this);\n    $this.siblings().removeClass('selected');\n    $this.addClass(\"selected\");\n    var navbarColor = $this.data(\"navbar-color\");\n    // changes navbar colors\n    if (navbarColor) {\n      body\n        .find(navbar)\n        .removeClass(\"bg-primary bg-success bg-danger bg-info bg-warning bg-dark\")\n        .addClass(navbarColor + \" navbar-dark\");\n    }\n    else {\n      body\n        .find(navbar)\n        .removeClass(\"bg-primary bg-success bg-danger bg-info bg-warning bg-dark navbar-dark\");\n    }\n    if (body.hasClass(\"dark-layout\")) {\n      navbar.addClass(\"navbar-dark\")\n    }\n  })\n\n  /***** Navbar Type *****/\n  if(body.hasClass('horizontal-menu')){\n    $('.collapse_menu').removeClass('d-none');\n    $('.collapse_sidebar').addClass('d-none');\n\n    $('.menu_type').removeClass('d-none');\n    $('.navbar_type').addClass('d-none');\n    // Hides hidden option in Horizontal layout\n    $('.navbar-type #navbar-hidden').closest('fieldset').parent('div').css('display','none');\n\n    // On Scroll navbar color on horizontal menu\n    $(window).scroll(function(){\n      if(body.hasClass('navbar-static')){\n        var scroll = $(window).scrollTop();\n        if (scroll > 65) {\n          $(\".horizontal-menu .header-navbar.navbar-fixed\").css({\"background\":\"#fff\", \"box-shadow\":\"0 4px 20px 0 rgba(0,0,0,.05)\"});\n          $(\".horizontal-menu .horizontal-menu-wrapper.header-navbar\").css(\"background\" , \"#fff\");\n        }\n        else{\n          $(\".horizontal-menu .header-navbar.navbar-fixed\").css({\"background\":\"#f8f8f8\", \"box-shadow\":\"none\"});\n          $(\".horizontal-menu .horizontal-menu-wrapper.header-navbar\").css(\"background\" , \"#fff\");\n        }\n      }\n    })\n  }\n  // Hides Navbar\n  $(\"#navbar-hidden\").on(\"click\", function () {\n    navbar.addClass(\"d-none\");\n    navBarShadow.addClass(\"d-none\");\n    body.removeClass(\"navbar-static navbar-floating navbar-sticky\").addClass(\"navbar-hidden\");\n  });\n  // changes to Static navbar\n  $(\"#navbar-static\").on(\"click\", function () {\n    if(body.hasClass('horizontal-menu')){\n      horizontalNavbar\n        .removeClass(\"d-none floating-nav fixed-top navbar-fixed\");\n      body.removeClass(\"navbar-hidden navbar-floating navbar-sticky\").addClass(\"navbar-static\");\n    }\n    else{\n      navBarShadow.addClass(\"d-none\");\n      navbar\n        .removeClass(\"d-none floating-nav fixed-top\")\n        .addClass(\"navbar-static-top\");\n      body.removeClass(\"navbar-hidden navbar-floating navbar-sticky\").addClass(\"navbar-static\");\n    }\n  });\n  // change to floating navbar\n  $(\"#navbar-floating\").on(\"click\", function () {\n    if(body.hasClass('horizontal-menu')){\n      horizontalNavbar\n        .removeClass(\"d-none fixed-top navbar-static-top\")\n        .addClass(\"floating-nav\");\n      body.removeClass(\"navbar-static navbar-hidden navbar-sticky\").addClass(\"navbar-floating\");\n    }\n    else{\n      navBarShadow.removeClass(\"d-none\");\n      navbar\n        .removeClass(\"d-none navbar-static-top fixed-top\")\n        .addClass(\"floating-nav\");\n      body.removeClass(\"navbar-static navbar-hidden navbar-sticky\").addClass(\"navbar-floating\");\n    }\n  });\n  // changes to Static navbar\n  $(\"#navbar-sticky\").on(\"click\", function () {\n    if(body.hasClass('horizontal-menu')){\n      horizontalNavbar\n        .removeClass(\"d-none floating-nav navbar-static-top navbar-fixed\")\n        .addClass(\"fixed-top\");\n      body.removeClass(\"navbar-static navbar-floating navbar-hidden\").addClass(\"navbar-sticky\");\n    }\n    else{\n      navBarShadow.addClass(\"d-none\");\n      navbar\n        .removeClass(\"d-none floating-nav navbar-static-top\")\n        .addClass(\"fixed-top\");\n      body.removeClass(\"navbar-static navbar-floating navbar-hidden\").addClass(\"navbar-sticky\");\n    }\n  });\n\n  /***** Footer Type *****/\n  // Hides footer\n  $(\"#footer-hidden\").on(\"click\", function () {\n    footer.addClass(\"d-none\");\n    body.removeClass(\"footer-static fixed-footer\").addClass(\"footer-hidden\");\n  });\n  // changes to Static footer\n  $(\"#footer-static\").on(\"click\", function () {\n    body.removeClass(\"fixed-footer\");\n    footer.removeClass(\"d-none\").addClass(\"footer-static\");\n    body.removeClass(\"footer-hidden fixed-footer\").addClass(\"footer-static\");\n  });\n  // changes to Sticky footer\n  $(\"#footer-sticky\").on(\"click\", function () {\n    body.removeClass(\"footer-static footer-hidden\").addClass(\"fixed-footer\");\n    footer.removeClass(\"d-none footer-static\");\n  });\n\n  /***** Hide Scroll To Top *****/\n  $(\"#hide-scroll-top-switch\").on(\"click\", function () {\n    var scrollTopBtn = $(\".scroll-top\")\n    if ($(this).prop(\"checked\")) {\n      scrollTopBtn.addClass(\"d-none\");\n    }\n    else {\n      scrollTopBtn.removeClass(\"d-none\");\n    }\n  });\n})(window, document, jQuery);\n"
  },
  {
    "path": "public/backend/js/scripts/datatables/datatable.js",
    "content": "/*=========================================================================================\n    File Name: datatables-basic.js\n    Description: Basic Datatable\n    ----------------------------------------------------------------------------------------\n    Item Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n    Author: PIXINVENT\n    Author URL: http://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n\n$(document).ready(function() {\n\n    /****************************************\n    *       js of zero configuration        *\n    ****************************************/\n\n    $('.zero-configuration').DataTable();\n\n    /********************************************\n     *        js of Order by the grouping        *\n     ********************************************/\n\n    var groupingTable = $('.row-grouping').DataTable({\n        \"columnDefs\": [{\n            \"visible\": false,\n            \"targets\": 2\n        }],\n        \"order\": [\n            [2, 'asc']\n        ],\n        \"displayLength\": 10,\n        \"drawCallback\": function(settings) {\n            var api = this.api();\n            var rows = api.rows({\n                page: 'current'\n            }).nodes();\n            var last = null;\n\n            api.column(2, {\n                page: 'current'\n            }).data().each(function(group, i) {\n                if (last !== group) {\n                    $(rows).eq(i).before(\n                        '<tr class=\"group\"><td colspan=\"5\">' + group + '</td></tr>'\n                    );\n\n                    last = group;\n                }\n            });\n        }\n    });\n\n    $('.row-grouping tbody').on('click', 'tr.group', function() {\n        var currentOrder = groupingTable.order()[0];\n        if (currentOrder[0] === 2 && currentOrder[1] === 'asc') {\n            groupingTable.order([2, 'desc']).draw();\n        }\n        else {\n            groupingTable.order([2, 'asc']).draw();\n        }\n    });\n\n    /*************************************\n    *       js of complex headers        *\n    *************************************/\n\n    $('.complex-headers').DataTable();\n\n\n    /*****************************\n    *       js of Add Row        *\n    ******************************/\n\n    var t = $('.add-rows').DataTable();\n    var counter = 2;\n\n    $('#addRow').on( 'click', function () {\n        t.row.add( [\n            counter +'.1',\n            counter +'.2',\n            counter +'.3',\n            counter +'.4',\n            counter +'.5'\n        ] ).draw( false );\n\n        counter++;\n    });\n\n\n    /**************************************************************\n    * js of Tab for COLUMN SELECTORS WITH EXPORT AND PRINT OPTIONS *\n    ***************************************************************/\n\n    $('.dataex-html5-selectors').DataTable( {\n        dom: 'Bfrtip',\n        buttons: [\n            {\n                extend: 'copyHtml5',\n                exportOptions: {\n                    columns: [ 0, ':visible' ]\n                }\n            },\n            {\n                extend: 'pdfHtml5',\n                exportOptions: {\n                    columns: ':visible'\n                }\n            },\n            {\n                text: 'JSON',\n                action: function ( e, dt, button, config ) {\n                    var data = dt.buttons.exportData();\n\n                    $.fn.dataTable.fileSave(\n                        new Blob( [ JSON.stringify( data ) ] ),\n                        'Export.json'\n                    );\n                }\n            },\n            {\n                extend: 'print',\n                exportOptions: {\n                    columns: ':visible'\n                }\n            }\n        ]\n    });\n\n    /**************************************************\n    *       js of scroll horizontal & vertical        *\n    **************************************************/\n\n    $('.scroll-horizontal-vertical').DataTable( {\n        \"scrollY\": 200,\n        \"scrollX\": true\n    });\n\n\n\n\n});\n"
  },
  {
    "path": "public/backend/js/scripts/documentation.js",
    "content": "/*=========================================================================================\n    File Name: documentation.js\n    Description: Theme documentation js file\n    ----------------------------------------------------------------------------------------\n    Item Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n    Author: PIXINVENT\n    Author URL: http://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n\n$(document).ready(function(){\n   $('body').scrollspy({ target: '#sidebar-page-navigation' });\n});\n"
  },
  {
    "path": "public/backend/js/scripts/editors/editor-quill.js",
    "content": "/*=========================================================================================\n\tFile Name: editor-quill.js\n\tDescription: Quill is a modern rich text editor built for compatibility and extensibility.\n\t----------------------------------------------------------------------------------------\n\tItem Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n\tAuthor: PIXINVENT\n  Author URL: http://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n(function (window, document, $) {\n  'use strict';\n\n  var Font = Quill.import('formats/font');\n  Font.whitelist = ['sofia', 'slabo', 'roboto', 'inconsolata', 'ubuntu'];\n  Quill.register(Font, true);\n\n  // Bubble Editor\n\n  var bubbleEditor = new Quill('#bubble-container .editor', {\n    bounds: '#bubble-container .editor',\n    modules: {\n      'formula': true,\n      'syntax': true\n    },\n    theme: 'bubble'\n  });\n\n  // Snow Editor\n\n  var snowEditor = new Quill('#snow-container .editor', {\n    bounds: '#snow-container .editor',\n    modules: {\n      'formula': true,\n      'syntax': true,\n      'toolbar': '#snow-container .quill-toolbar'\n    },\n    theme: 'snow'\n  });\n\n  // Full Editor\n\n  var fullEditor = new Quill('#full-container .editor', {\n    bounds: '#full-container .editor',\n    modules: {\n      'formula': true,\n      'syntax': true,\n      'toolbar': [\n        [{\n          'font': []\n        }, {\n          'size': []\n        }],\n        ['bold', 'italic', 'underline', 'strike'],\n        [{\n          'color': []\n        }, {\n          'background': []\n        }],\n        [{\n          'script': 'super'\n        }, {\n          'script': 'sub'\n        }],\n        [{\n          'header': '1'\n        }, {\n          'header': '2'\n        }, 'blockquote', 'code-block'],\n        [{\n          'list': 'ordered'\n        }, {\n          'list': 'bullet'\n        }, {\n          'indent': '-1'\n        }, {\n          'indent': '+1'\n        }],\n        ['direction', {\n          'align': []\n        }],\n        ['link', 'image', 'video', 'formula'],\n        ['clean']\n      ],\n    },\n    theme: 'snow'\n  });\n\n  var editors = [bubbleEditor, snowEditor, fullEditor];\n\n})(window, document, jQuery);\n"
  },
  {
    "path": "public/backend/js/scripts/extensions/context-menu.js",
    "content": "/*=========================================================================================\n    File Name: context-menu.js\n    Description: Context Menu\n    --------------------------------------------------------------------------------------\n    Item Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n    Author: PIXINVENT\n    Author URL: http://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n\n// Basic Context Menu\n$.contextMenu({\n  selector: \"#basic-context-menu\",\n  callback: function (key, options) {\n    var r = \"clicked \" + key;\n    window.console && toastr.success(r);\n  },\n  items: {\n    \"Option 1\": { name: \"Option 1\" },\n    \"Option 2\": { name: \"Option 2\" },\n  }\n})\n\n// Left Click Trigger\n$.contextMenu({\n  selector: '#left-click-context-menu',\n  trigger: \"left\",\n  callback: function (key, options) {\n    var r = \"clicked \" + key\n    window.console && toastr.success(r);\n  },\n  items: {\n    \"Option 1\": { name: \"Option 1\" },\n    \"Option 2\": { name: \"Option 2\" },\n  }\n});\n\n// Hover Trigger\n$.contextMenu({\n  selector: '#hover-context-menu',\n  trigger: 'hover',\n  autoHide: true,\n  callback: function (key, options) {\n    var r = \"clicked \" + key\n    window.console && toastr.success(r);\n  },\n  items: {\n    \"Option 1\": { name: \"Option 1\" },\n    \"Option 2\": { name: \"Option 2\" },\n  }\n});\n\n\n// Submenu\n$.contextMenu({\n  selector: '#submenu-context-menu',\n  callback: function (key, options) {\n    var r = \"clicked \" + key\n    window.console && toastr.success(r);\n  },\n  items: {\n    \"Option 1\": { name: \"Option 1\" },\n    \"name\": { name: \"Option 2\" },\n    \"fold1\": {\n      \"name\": \"Sub Group\",\n      \"items\": {\n        \"Foo Bar\": { \"name\": \"Foo bar\" },\n        \"fold1a\": {\n          \"name\": \"Other group\",\n          \"items\": {\n            \"Echo\": { \"name\": \"echo\" },\n            \"Foxtrot\": { \"name\": \"foxtrot\" },\n            \"Golf\": { \"name\": \"golf\" }\n          }\n        }\n      }\n    }\n  }\n})\n"
  },
  {
    "path": "public/backend/js/scripts/extensions/copy-to-clipboard.js",
    "content": "/*=========================================================================================\n    File Name: copy-to-clipboard.js\n    Description: Copy to clipboard\n    --------------------------------------------------------------------------------------\n    Item Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n    Author: PIXINVENT\n    Author URL: http://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n\nvar userText = $(\"#copy-to-clipboard-input\");\nvar btnCopy = $(\"#btn-copy\");\n\n// copy text on click\nbtnCopy.on(\"click\", function () {\n  userText.select();\n  document.execCommand(\"copy\");\n})\n"
  },
  {
    "path": "public/backend/js/scripts/extensions/drag-drop.js",
    "content": "/*=========================================================================================\n    File Name: drag-drop.js\n    Description: drag & drop elements using dragula js\n    --------------------------------------------------------------------------------------\n    Item Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n    Author: PIXINVENT\n    Author URL: http://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n\n\n$(document).ready(function () {\n\n  // Draggable Cards\n  dragula([document.getElementById('card-drag-area')]);\n\n  // Sortable Lists\n  dragula([document.getElementById('basic-list-group')]);\n  dragula([document.getElementById('multiple-list-group-a'), document.getElementById('multiple-list-group-b')]);\n\n  // Cloning\n  dragula([document.getElementById('chips-list-1'), document.getElementById('chips-list-2')], {\n    copy: true\n  });\n\n  // With Handles\n\n  dragula([document.getElementById(\"handle-list-1\"), document.getElementById(\"handle-list-2\")], {\n    moves: function (el, container, handle) {\n      return handle.classList.contains('handle');\n    }\n  });\n\n});\n"
  },
  {
    "path": "public/backend/js/scripts/extensions/dropzone.js",
    "content": "/*=========================================================================================\n    File Name: dropzone.js\n    Description: dropzone\n    --------------------------------------------------------------------------------------\n    Item Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n    Author: PIXINVENT\n    Author URL: http://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n\nDropzone.options.dpzSingleFile = {\n  paramName: \"file\", // The name that will be used to transfer the file\n  maxFiles: 1,\n  init: function () {\n    this.on(\"maxfilesexceeded\", function (file) {\n      this.removeAllFiles();\n      this.addFile(file);\n    });\n  }\n};\n\n/********************************************\n*               Multiple Files              *\n********************************************/\nDropzone.options.dpzMultipleFiles = {\n  paramName: \"file\", // The name that will be used to transfer the file\n  maxFilesize: 0.5, // MB\n  clickable: true\n}\n\n\n/********************************************************\n*               Use Button To Select Files              *\n********************************************************/\nnew Dropzone(document.body, { // Make the whole body a dropzone\n  url: \"#\", // Set the url\n  previewsContainer: \"#dpz-btn-select-files\", // Define the container to display the previews\n  clickable: \"#select-files\" // Define the element that should be used as click trigger to select files.\n});\n\n\n/****************************************************************\n*               Limit File Size and No. Of Files                *\n****************************************************************/\nDropzone.options.dpzFileLimits = {\n  paramName: \"file\", // The name that will be used to transfer the file\n  maxFilesize: 0.5, // MB\n  maxFiles: 5,\n  maxThumbnailFilesize: 1, // MB\n}\n\n\n/********************************************\n*               Accepted Files              *\n********************************************/\nDropzone.options.dpAcceptFiles = {\n  paramName: \"file\", // The name that will be used to transfer the file\n  maxFilesize: 1, // MB\n  acceptedFiles: 'image/*'\n}\n\n\n/************************************************\n*               Remove Thumbnail                *\n************************************************/\nDropzone.options.dpzRemoveThumb = {\n  paramName: \"file\", // The name that will be used to transfer the file\n  maxFilesize: 1, // MB\n  addRemoveLinks: true,\n  dictRemoveFile: \" Trash\"\n}\n\n/*****************************************************\n*               Remove All Thumbnails                *\n*****************************************************/\nDropzone.options.dpzRemoveAllThumb = {\n  paramName: \"file\", // The name that will be used to transfer the file\n  maxFilesize: 1, // MB\n  init: function () {\n\n    // Using a closure.\n    var _this = this;\n\n    // Setup the observer for the button.\n    $(\"#clear-dropzone\").on(\"click\", function () {\n      // Using \"_this\" here, because \"this\" doesn't point to the dropzone anymore\n      _this.removeAllFiles();\n      // If you want to cancel uploads as well, you\n      // could also call _this.removeAllFiles(true);\n    });\n  }\n}\n"
  },
  {
    "path": "public/backend/js/scripts/extensions/fullcalendar.js",
    "content": "/*=========================================================================================\n    File Name: fullcalendar.js\n    Description: Fullcalendar\n    --------------------------------------------------------------------------------------\n    Item Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n    Author: PIXINVENT\n    Author URL: http://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n\ndocument.addEventListener('DOMContentLoaded', function () {\n\n  // color object for different event types\n  var colors = {\n    primary: \"#7367f0\",\n    success: \"#28c76f\",\n    danger: \"#ea5455\",\n    warning: \"#ff9f43\"\n  };\n\n  // chip text object for different event types\n  var categoryText = {\n    primary: \"Others\",\n    success: \"Business\",\n    danger: \"Personal\",\n    warning: \"Work\"\n  };\n  var categoryBullets = $(\".cal-category-bullets\").html(),\n    evtColor = \"\",\n    eventColor = \"\";\n\n  // calendar init\n  var calendarEl = document.getElementById('fc-default');\n\n  var calendar = new FullCalendar.Calendar(calendarEl, {\n    plugins: [\"dayGrid\", \"timeGrid\", \"interaction\"],\n    customButtons: {\n      addNew: {\n        text: ' Add',\n        click: function () {\n          var calDate = new Date,\n            todaysDate = calDate.toISOString().slice(0, 10);\n          $(\".modal-calendar\").modal(\"show\");\n          $(\".modal-calendar .cal-submit-event\").addClass(\"d-none\");\n          $(\".modal-calendar .remove-event\").addClass(\"d-none\");\n          $(\".modal-calendar .cal-add-event\").removeClass(\"d-none\")\n          $(\".modal-calendar .cancel-event\").removeClass(\"d-none\")\n          $(\".modal-calendar .add-category .chip\").remove();\n          $(\"#cal-start-date\").val(todaysDate);\n          $(\"#cal-end-date\").val(todaysDate);\n          $(\".modal-calendar #cal-start-date\").attr(\"disabled\", false);\n        }\n      }\n    },\n    header: {\n      left: \"addNew\",\n      center: \"dayGridMonth,timeGridWeek,timeGridDay\",\n      right: \"prev,title,next\"\n    },\n    displayEventTime: false,\n    navLinks: true,\n    editable: true,\n    allDay: true,\n    navLinkDayClick: function (date) {\n      $(\".modal-calendar\").modal(\"show\");\n    },\n    dateClick: function (info) {\n      $(\".modal-calendar #cal-start-date\").val(info.dateStr).attr(\"disabled\", true);\n      $(\".modal-calendar #cal-end-date\").val(info.dateStr);\n    },\n    // displays saved event values on click\n    eventClick: function (info) {\n      $(\".modal-calendar\").modal(\"show\");\n      $(\".modal-calendar #cal-event-title\").val(info.event.title);\n      $(\".modal-calendar #cal-start-date\").val(moment(info.event.start).format('YYYY-MM-DD'));\n      $(\".modal-calendar #cal-end-date\").val(moment(info.event.end).format('YYYY-MM-DD'));\n      $(\".modal-calendar #cal-description\").val(info.event.extendedProps.description);\n      $(\".modal-calendar .cal-submit-event\").removeClass(\"d-none\");\n      $(\".modal-calendar .remove-event\").removeClass(\"d-none\");\n      $(\".modal-calendar .cal-add-event\").addClass(\"d-none\");\n      $(\".modal-calendar .cancel-event\").addClass(\"d-none\");\n      $(\".calendar-dropdown .dropdown-menu\").find(\".selected\").removeClass(\"selected\");\n      var eventCategory = info.event.extendedProps.dataEventColor;\n      var eventText = categoryText[eventCategory]\n      $(\".modal-calendar .chip-wrapper .chip\").remove();\n      $(\".modal-calendar .chip-wrapper\").append($(\"<div class='chip chip-\" + eventCategory + \"'>\" +\n        \"<div class='chip-body'>\" +\n        \"<span class='chip-text'> \" + eventText + \" </span>\" +\n        \"</div>\" +\n        \"</div>\"));\n    },\n  });\n\n  // render calendar\n  calendar.render();\n\n  // appends bullets to left class of header\n  $(\"#basic-examples .fc-right\").append(categoryBullets);\n\n  // Close modal on submit button\n  $(\".modal-calendar .cal-submit-event\").on(\"click\", function () {\n    $(\".modal-calendar\").modal(\"hide\");\n  });\n\n  // Remove Event\n  $(\".remove-event\").on(\"click\", function () {\n    var removeEvent = calendar.getEventById('newEvent');\n    removeEvent.remove();\n  });\n\n\n  // reset input element's value for new event\n  if ($(\"td:not(.fc-event-container)\").length > 0) {\n    $(\".modal-calendar\").on('hidden.bs.modal', function (e) {\n      $('.modal-calendar .form-control').val('');\n    })\n  }\n\n  // remove disabled attr from button after entering info\n  $(\".modal-calendar .form-control\").on(\"keyup\", function () {\n    if ($(\".modal-calendar #cal-event-title\").val().length >= 1) {\n      $(\".modal-calendar .modal-footer .btn\").removeAttr(\"disabled\");\n    }\n    else {\n      $(\".modal-calendar .modal-footer .btn\").attr(\"disabled\", true);\n    }\n  });\n\n  // open add event modal on click of day\n  $(document).on(\"click\", \".fc-day\", function () {\n    $(\".modal-calendar\").modal(\"show\");\n    $(\".calendar-dropdown .dropdown-menu\").find(\".selected\").removeClass(\"selected\");\n    $(\".modal-calendar .cal-submit-event\").addClass(\"d-none\");\n    $(\".modal-calendar .remove-event\").addClass(\"d-none\");\n    $(\".modal-calendar .cal-add-event\").removeClass(\"d-none\");\n    $(\".modal-calendar .cancel-event\").removeClass(\"d-none\");\n    $(\".modal-calendar .add-category .chip\").remove();\n    $(\".modal-calendar .modal-footer .btn\").attr(\"disabled\", true);\n    evtColor = colors.primary;\n    eventColor = \"primary\";\n  });\n\n  // change chip's and event's color according to event type\n  $(\".calendar-dropdown .dropdown-menu .dropdown-item\").on(\"click\", function () {\n    var selectedColor = $(this).data(\"color\");\n    evtColor = colors[selectedColor];\n    eventTag = categoryText[selectedColor];\n    eventColor = selectedColor;\n\n    // changes event color after selecting category\n    $(\".cal-add-event\").on(\"click\", function () {\n      calendar.addEvent({\n        color: evtColor,\n        dataEventColor: eventColor,\n        className: eventColor\n      });\n    })\n\n    $(\".calendar-dropdown .dropdown-menu\").find(\".selected\").removeClass(\"selected\");\n    $(this).addClass(\"selected\");\n\n    // add chip according to category\n    $(\".modal-calendar .chip-wrapper .chip\").remove();\n    $(\".modal-calendar .chip-wrapper\").append($(\"<div class='chip chip-\" + selectedColor + \"'>\" +\n      \"<div class='chip-body'>\" +\n      \"<span class='chip-text'> \" + eventTag + \" </span>\" +\n      \"</div>\" +\n      \"</div>\"));\n  });\n\n  // calendar add event\n  $(\".cal-add-event\").on(\"click\", function () {\n    $(\".modal-calendar\").modal(\"hide\");\n    var eventTitle = $(\"#cal-event-title\").val(),\n      startDate = $(\"#cal-start-date\").val(),\n      endDate = $(\"#cal-end-date\").val(),\n      eventDescription = $(\"#cal-description\").val(),\n      correctEndDate = new Date(endDate);\n    calendar.addEvent({\n      id: \"newEvent\",\n      title: eventTitle,\n      start: startDate,\n      end: correctEndDate,\n      description: eventDescription,\n      color: evtColor,\n      dataEventColor: eventColor,\n      allDay: true\n    });\n  });\n\n  // date picker\n  $(\".pickadate\").pickadate({\n    format: 'yyyy-mm-dd'\n  });\n});\n"
  },
  {
    "path": "public/backend/js/scripts/extensions/i18n.js",
    "content": "/*=========================================================================================\n    File Name: i18n.js\n    Description: Internationalization\n    --------------------------------------------------------------------------------------\n    Item Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n    Author: PIXINVENT\n    Author URL: http://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n\n// For Language Select\nvar changeText = $('.card-localization .card-text')\n\n// for extensions i18n page\n// i18n has been initialized already we have have to add resource bundle\ni18next.addResourceBundle('en_p', 'translation', {\n  key: \"Cake sesame snaps cupcake gingerbread danish I love gingerbread. Apple pie pie jujubes chupa chups muffin halvah lollipop. Chocolate cake oat cake tiramisu marzipan sugar plum. Donut sweet pie oat cake dragée fruitcake cotton candy lemon drops.\"\n});\n\ni18next.addResourceBundle('pt_p', 'translation', {\n  key: \"O sésamo do bolo agarra dinamarquês do pão-de-espécie do queque eu amo o pão-de-espécie. Torta de torta de maçã jujubes chupa chups  pirulito halvah muffin. Ameixa do açúcar do maçapão do tiramisu do bolo da aveia do bolo de chocolate. Donut doce aveia torta  dragée fruitcake algodão doce gotas de limão.\"\n});\n\ni18next.addResourceBundle('fr_p', 'translation', {\n  key: \"Gâteau au sésame s'enclenche petit pain au pain d'épices danois J'adore le pain d'épices. Tarte aux pommes jujubes chupa chups  muffin halva sucette. Gateau au chocolat gateau d \\ 'avoine tiramisu prune sucre. Donut tourte sucrée gateau dragée fruit gateau barbe a papa citron gouttes..\"\n});\ni18next.addResourceBundle('de_p', 'translation', {\n  key: \"Kuchen Sesam Snaps Cupcake Lebkuchen dänisch Ich liebe Lebkuchen. Apfelkuchen Jujubes Chupa Chups Muffin Halwa Lutscher. Schokoladenkuchen-Haferkuchen-Tiramisumarzipanzuckerpflaume. Donut süße Torte Hafer Kuchen Dragée Obstkuchen Zuckerwatte Zitronentropfen.\"\n});\n\n// Change Card Text Language On Click\n$(\".language-options\").on(\"click\", \".i18n-lang-option\", function () {\n  var selected_lng = $(this).data('lng');\n  i18next.changeLanguage(selected_lng, function (err, t) {\n    // resources have been loaded\n    changeText.localize();\n  });\n})\n"
  },
  {
    "path": "public/backend/js/scripts/extensions/media-plyr.js",
    "content": "/*=========================================================================================\n    File Name: media-plyr.js\n    Description: Media Plyr Extenstion\n    --------------------------------------------------------------------------------------\n    Item Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n    Author: PIXINVENT\n    Author URL: http://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n\n$(document).ready(function () {\n  // video player  define\n  var player = new Plyr(\".video-player\");\n  // audio player define\n  var player1 = new Plyr(\".audio-player\");\n\n});\n"
  },
  {
    "path": "public/backend/js/scripts/extensions/noui-slider.js",
    "content": "/*=========================================================================================\n\tFile Name: noui-slider.js\n\tDescription: noUiSlider is a lightweight JavaScript range slider library.\n\t----------------------------------------------------------------------------------------\n\tItem Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n\tAuthor: PIXINVENT\n\tAuthor URL: http://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n$(document).ready(function () {\n\n  // RTL Support\n  var direction = 'ltr';\n  if($('html').data('textdirection') == 'rtl'){\n    direction = 'rtl';\n  }\n\n\t/********************************************\n\t*\t\t\t\tSlider values\t\t\t\t*\n\t********************************************/\n\n  // Handles\n  var handlesSlider = document.getElementById('slider-handles');\n\n  noUiSlider.create(handlesSlider, {\n    start: [4000, 8000],\n    direction: direction,\n    range: {\n      'min': [2000],\n      'max': [10000]\n    }\n  });\n\n\n  // Snapping between steps\n  var snapSlider = document.getElementById('slider-snap');\n\n  noUiSlider.create(snapSlider, {\n    start: [0, 500],\n    direction: direction,\n    snap: true,\n    connect: true,\n    range: {\n      'min': 0,\n      '10%': 50,\n      '20%': 100,\n      '30%': 150,\n      '40%': 500,\n      '50%': 800,\n      'max': 1000\n    }\n  });\n\n\n\n\t/************************************************\n\t*\t\t\t\tSlider behaviour\t\t\t\t*\n\t************************************************/\n\n  // Tap\n  tapSlider = document.getElementById('tap');\n\n  noUiSlider.create(tapSlider, {\n    start: 40,\n    direction: direction,\n    behaviour: 'tap',\n    connect: 'upper',\n    range: {\n      'min': 20,\n      'max': 80\n    }\n  });\n\n\n  // Drag\n  var dragSlider = document.getElementById('drag');\n\n  noUiSlider.create(dragSlider, {\n    start: [40, 60],\n    direction: direction,\n    behaviour: 'drag',\n    connect: true,\n    range: {\n      'min': 20,\n      'max': 80\n    }\n  });\n\n\n  // Fixed dragging\n  dragFixedSlider = document.getElementById('drag-fixed');\n\n  noUiSlider.create(dragFixedSlider, {\n    start: [40, 60],\n    direction: direction,\n    behaviour: 'drag-fixed',\n    connect: true,\n    range: {\n      'min': 20,\n      'max': 80\n    }\n  });\n\n\n\n\n  // Hover\n  var hoverSlider = document.getElementById('hover'),\n    field = document.getElementById('hover-val');\n\n  noUiSlider.create(hoverSlider, {\n    start: 20,\n    direction: direction,\n    behaviour: 'hover-snap',\n    range: {\n      'min': 0,\n      'max': 10\n    }\n  });\n\n  hoverSlider.noUiSlider.on('hover', function (value) {\n    field.innerHTML = value;\n  });\n\n\n  // Combined options\n  dragTapSlider = document.getElementById('combined');\n\n  noUiSlider.create(dragTapSlider, {\n    start: [40, 60],\n    direction: direction,\n    behaviour: 'drag-tap',\n    connect: true,\n    range: {\n      'min': 20,\n      'max': 80\n    }\n  });\n\n\n\n\t/****************************************************\n\t*\t\t\t\tSlider Scales / Pips\t\t\t\t*\n\t****************************************************/\n\n  var range_all_sliders = {\n    'min': [0],\n    '10%': [5, 5],\n    '50%': [40, 10],\n    'max': [100]\n  };\n\n  // Range\n  var pipsRange = document.getElementById('pips-range');\n\n  noUiSlider.create(pipsRange, {\n    range: range_all_sliders,\n    start: 0,\n    direction: direction,\n    pips: {\n      mode: 'range',\n      density: 3\n    }\n  });\n\n\n  // Steps\n  var range_step_sliders = {\n    'min': [0],\n    '10%': [5, 5],\n    '50%': [25, 20],\n    'max': [50, 50]\n  };\n  function filter500(value, type) {\n    if (type === 0) {\n      return value < 50 ? -1 : 0;\n    }\n    return value % 50 ? 2 : 1;\n  }\n\n  var pipsStepsFilter = document.getElementById('pips-steps-filter');\n\n  noUiSlider.create(pipsStepsFilter, {\n    range: range_step_sliders,\n    start: 0,\n    direction: direction,\n    pips: {\n      mode: 'steps',\n      density: 5,\n      filter: filter500,\n      format: wNumb({\n        decimals: 0,\n        prefix: '$'\n      })\n    }\n  });\n\n\n\n\t/********************************************\n\t*\t\t\t\tSlider Colors\t\t\t\t*\n\t********************************************/\n\n  // Default\n  var defaultColorSlider = document.getElementById('default-color-slider');\n\n  noUiSlider.create(defaultColorSlider, {\n    start: [45, 55],\n    direction: direction,\n    behaviour: 'drag',\n    connect: true,\n    range: {\n      'min': 20,\n      'max': 80\n    }\n  });\n\n\n  // Success\n  var successColorSlider = document.getElementById('success-color-slider');\n\n  noUiSlider.create(successColorSlider, {\n    start: [40, 60],\n    direction: direction,\n    behaviour: 'drag',\n    connect: true,\n    range: {\n      'min': 20,\n      'max': 80\n    }\n  });\n\n\n  // Info\n  var infoColorSlider = document.getElementById('info-color-slider');\n\n  noUiSlider.create(infoColorSlider, {\n    start: [35, 65],\n    direction: direction,\n    behaviour: 'drag',\n    connect: true,\n    range: {\n      'min': 20,\n      'max': 80\n    }\n  });\n\n\n  // Warning\n  var warningColorSlider = document.getElementById('warning-color-slider');\n\n  noUiSlider.create(warningColorSlider, {\n    start: [45, 55],\n    direction: direction,\n    behaviour: 'drag',\n    connect: true,\n    range: {\n      'min': 20,\n      'max': 80\n    }\n  });\n\n\n  // Danger\n  var dangerColorSlider = document.getElementById('danger-color-slider');\n\n  noUiSlider.create(dangerColorSlider, {\n    start: [40, 60],\n    direction: direction,\n    behaviour: 'drag',\n    connect: true,\n    range: {\n      'min': 20,\n      'max': 80\n    }\n  });\n\n  // Colored Connects\n\n  var sliderColoredConnects = document.getElementById('colored-connect');\n\n  noUiSlider.create(sliderColoredConnects, {\n    start: [4000, 8000, 12000, 16000],\n    direction: direction,\n    connect: [false, true, true, true, true],\n    range: {\n      'min': [2000],\n      'max': [20000]\n    }\n  });\n\n  var connect = sliderColoredConnects.querySelectorAll('.noUi-connect');\n  var classes = ['bg-primary', 'bg-success', 'bg-info', 'bg-danger', 'bg-warning'];\n\n  for (var i = 0; i < connect.length; i++) {\n    connect[i].classList.add(classes[i]);\n  }\n\n\n\t/********************************************\n\t*\t\t\t\tSlider Sizing\t\t\t\t*\n\t********************************************/\n\n  // Extra large options\n  var xl_options = {\n    start: [45, 55],\n    direction: direction,\n    behaviour: 'drag',\n    connect: true,\n    range: {\n      'min': 20,\n      'max': 80\n    }\n  };\n\n  var lg_options = {\n    start: [40, 60],\n    direction: direction,\n    behaviour: 'drag',\n    connect: true,\n    range: {\n      'min': 20,\n      'max': 80\n    }\n  };\n\n  var default_options = {\n    start: [35, 65],\n    direction: direction,\n    behaviour: 'drag',\n    connect: true,\n    range: {\n      'min': 20,\n      'max': 80\n    }\n  };\n\n  var sm_options = {\n    start: [30, 70],\n    direction: direction,\n    behaviour: 'drag',\n    connect: true,\n    range: {\n      'min': 20,\n      'max': 80\n    }\n  };\n\n  var xs_options = {\n    start: [25, 75],\n    direction: direction,\n    behaviour: 'drag',\n    connect: true,\n    range: {\n      'min': 20,\n      'max': 80\n    }\n  };\n\n  // Extra Large\n  var extraLargeSlider = document.getElementById('extra-large-slider');\n  var circleExtraLargeSlider = document.getElementById('circle-extra-large-slider');\n  var squareExtraLargeSlider = document.getElementById('square-extra-large-slider');\n\n  noUiSlider.create(extraLargeSlider, xl_options);\n  noUiSlider.create(circleExtraLargeSlider, xl_options);\n  noUiSlider.create(squareExtraLargeSlider, xl_options);\n\n  // Large\n  var largeSlider = document.getElementById('large-slider');\n  var circleLargeSlider = document.getElementById('circle-large-slider');\n  var squareLargeSlider = document.getElementById('square-large-slider');\n\n  noUiSlider.create(largeSlider, lg_options);\n  noUiSlider.create(circleLargeSlider, lg_options);\n  noUiSlider.create(squareLargeSlider, lg_options);\n\n  // Default\n  var defaultSlider = document.getElementById('default-slider');\n  var circleDefaultSlider = document.getElementById('circle-default-slider');\n  var squareDefaultSlider = document.getElementById('square-default-slider');\n\n  noUiSlider.create(defaultSlider, default_options);\n  noUiSlider.create(circleDefaultSlider, default_options);\n  noUiSlider.create(squareDefaultSlider, default_options);\n\n  // Small\n  var smallSlider = document.getElementById('small-slider');\n  var circleSmallSlider = document.getElementById('circle-small-slider');\n  var squareSmallSlider = document.getElementById('square-small-slider');\n\n  noUiSlider.create(smallSlider, sm_options);\n  noUiSlider.create(circleSmallSlider, sm_options);\n  noUiSlider.create(squareSmallSlider, sm_options);\n\n  // Extra Small\n  var extraSmallSlider = document.getElementById('extra-small-slider');\n  var circleExtraSmallSlider = document.getElementById('circle-extra-small-slider');\n  var squareExtraSmallSlider = document.getElementById('square-extra-small-slider');\n\n  noUiSlider.create(extraSmallSlider, xs_options);\n  noUiSlider.create(circleExtraSmallSlider, xs_options);\n  noUiSlider.create(squareExtraSmallSlider, xs_options);\n\n\n\t/********************************************\n\t*\t\t\t\tVertical Slider\t\t\t\t*\n\t********************************************/\n\n  // Default\n  var vertical_slider_1 = document.getElementById('slider-vertical-1');\n\n  noUiSlider.create(vertical_slider_1, {\n    start: 20,\n    direction: direction,\n    orientation: 'vertical',\n    range: {\n      'min': 0,\n      'max': 100\n    }\n  });\n\n  var vertical_slider_2 = document.getElementById('slider-vertical-2');\n\n  noUiSlider.create(vertical_slider_2, {\n    start: 50,\n    direction: direction,\n    orientation: 'vertical',\n    range: {\n      'min': 0,\n      'max': 100\n    }\n  });\n\n  var vertical_slider_3 = document.getElementById('slider-vertical-3');\n\n  noUiSlider.create(vertical_slider_3, {\n    start: 20,\n    direction: direction,\n    orientation: 'vertical',\n    range: {\n      'min': 0,\n      'max': 100\n    }\n  });\n\n  var vertical_slider_4 = document.getElementById('slider-vertical-4');\n\n  noUiSlider.create(vertical_slider_4, {\n    start: 50,\n    direction: direction,\n    orientation: 'vertical',\n    range: {\n      'min': 0,\n      'max': 100\n    }\n  });\n\n  var vertical_slider_5 = document.getElementById('slider-vertical-5');\n\n  noUiSlider.create(vertical_slider_5, {\n    start: 20,\n    direction: direction,\n    orientation: 'vertical',\n    range: {\n      'min': 0,\n      'max': 100\n    }\n  });\n\n\n  // Connect to lower\n  var connectLowerSlider1 = document.getElementById('connect-lower-1');\n\n  noUiSlider.create(connectLowerSlider1, {\n    start: 30,\n    direction: direction,\n    orientation: 'vertical',\n    connect: 'lower',\n    range: {\n      'min': 0,\n      'max': 100\n    }\n  });\n\n  var connectLowerSlider2 = document.getElementById('connect-lower-2');\n\n  noUiSlider.create(connectLowerSlider2, {\n    start: 40,\n    direction: direction,\n    orientation: 'vertical',\n    connect: 'lower',\n    range: {\n      'min': 0,\n      'max': 100\n    }\n  });\n\n  var connectLowerSlider3 = document.getElementById('connect-lower-3');\n\n  noUiSlider.create(connectLowerSlider3, {\n    start: 50,\n    direction: direction,\n    orientation: 'vertical',\n    connect: 'lower',\n    range: {\n      'min': 0,\n      'max': 100\n    }\n  });\n\n  var connectLowerSlider4 = document.getElementById('connect-lower-4');\n\n  noUiSlider.create(connectLowerSlider4, {\n    start: 60,\n    direction: direction,\n    orientation: 'vertical',\n    connect: 'lower',\n    range: {\n      'min': 0,\n      'max': 100\n    }\n  });\n\n  var connectLowerSlider5 = document.getElementById('connect-lower-5');\n\n  noUiSlider.create(connectLowerSlider5, {\n    start: 70,\n    direction: direction,\n    orientation: 'vertical',\n    connect: 'lower',\n    range: {\n      'min': 0,\n      'max': 100\n    }\n  });\n\n\n  // Connect to upper\n  var connectUpperSlider1 = document.getElementById('connect-upper-1');\n\n  noUiSlider.create(connectUpperSlider1, {\n    start: 30,\n    direction: direction,\n    orientation: 'vertical',\n    connect: 'upper',\n    range: {\n      'min': 0,\n      'max': 100\n    }\n  });\n\n  var connectUpperSlider2 = document.getElementById('connect-upper-2');\n\n  noUiSlider.create(connectUpperSlider2, {\n    start: 40,\n    direction: direction,\n    orientation: 'vertical',\n    connect: 'upper',\n    range: {\n      'min': 0,\n      'max': 100\n    }\n  });\n\n  var connectUpperSlider3 = document.getElementById('connect-upper-3');\n\n  noUiSlider.create(connectUpperSlider3, {\n    start: 50,\n    direction: direction,\n    orientation: 'vertical',\n    connect: 'upper',\n    range: {\n      'min': 0,\n      'max': 100\n    }\n  });\n\n  var connectUpperSlider4 = document.getElementById('connect-upper-4');\n\n  noUiSlider.create(connectUpperSlider4, {\n    start: 60,\n    direction: direction,\n    orientation: 'vertical',\n    connect: 'upper',\n    range: {\n      'min': 0,\n      'max': 100\n    }\n  });\n\n  var connectUpperSlider5 = document.getElementById('connect-upper-5');\n\n  noUiSlider.create(connectUpperSlider5, {\n    start: 70,\n    direction: direction,\n    orientation: 'vertical',\n    connect: 'upper',\n    range: {\n      'min': 0,\n      'max': 100\n    }\n  });\n\n\n  // Tooltips\n  var tooltipSlider1 = document.getElementById('slider-tooltips-1');\n\n  noUiSlider.create(tooltipSlider1, {\n    start: [20, 80],\n    direction: direction,\n    orientation: 'vertical',\n    tooltips: [false, wNumb({\n      decimals: 1\n    })],\n    range: {\n      'min': 0,\n      'max': 100\n    }\n  });\n\n  var tooltipSlider2 = document.getElementById('slider-tooltips-2');\n\n  noUiSlider.create(tooltipSlider2, {\n    start: [20, 80],\n    direction: direction,\n    orientation: 'vertical',\n    tooltips: [false, wNumb({\n      decimals: 1\n    })],\n    range: {\n      'min': 0,\n      'max': 100\n    }\n  });\n\n  var tooltipSlider3 = document.getElementById('slider-tooltips-3');\n\n  noUiSlider.create(tooltipSlider3, {\n    start: [20, 80],\n    direction: direction,\n    orientation: 'vertical',\n    tooltips: [false, wNumb({\n      decimals: 1\n    })],\n    range: {\n      'min': 0,\n      'max': 100\n    }\n  });\n\n  // Direction top to bottom\n  var directionTopBottom1 = document.getElementById('slider-direction-top-bottom-1');\n\n  noUiSlider.create(directionTopBottom1, {\n    range: range_all_sliders,\n    start: 30,\n    direction: direction,\n    connect: 'lower',\n    orientation: 'vertical',\n    pips: {\n      mode: 'range',\n      density: 5\n    }\n  });\n\n  var directionTopBottom2 = document.getElementById('slider-direction-top-bottom-2');\n\n  noUiSlider.create(directionTopBottom2, {\n    range: range_all_sliders,\n    start: 50,\n    direction: direction,\n    connect: 'lower',\n    orientation: 'vertical',\n    pips: {\n      mode: 'range',\n      density: 5\n    }\n  });\n\n  var directionTopBottom3 = document.getElementById('slider-direction-top-bottom-3');\n\n  noUiSlider.create(directionTopBottom3, {\n    range: range_all_sliders,\n    start: 70,\n    direction: direction,\n    connect: 'lower',\n    orientation: 'vertical',\n    pips: {\n      mode: 'range',\n      density: 5\n    }\n  });\n\n\n\n  // Limit\n  var verticalLimitSlider1 = document.getElementById('vertical-limit-1');\n\n  noUiSlider.create(verticalLimitSlider1, {\n    start: [40, 60],\n    direction: direction,\n    orientation: 'vertical',\n    limit: 40,\n    behaviour: 'drag',\n    connect: true,\n    range: {\n      'min': 0,\n      'max': 100\n    }\n  });\n\n  var verticalLimitSlider2 = document.getElementById('vertical-limit-2');\n\n  noUiSlider.create(verticalLimitSlider2, {\n    start: [35, 65],\n    direction: direction,\n    orientation: 'vertical',\n    limit: 40,\n    behaviour: 'drag',\n    connect: true,\n    range: {\n      'min': 0,\n      'max': 100\n    }\n  });\n\n  var verticalLimitSlider3 = document.getElementById('vertical-limit-3');\n\n  noUiSlider.create(verticalLimitSlider3, {\n    start: [30, 70],\n    direction: direction,\n    orientation: 'vertical',\n    limit: 50,\n    behaviour: 'drag',\n    connect: true,\n    range: {\n      'min': 0,\n      'max': 100\n    }\n  });\n\n  var verticalLimitSlider4 = document.getElementById('vertical-limit-4');\n\n  noUiSlider.create(verticalLimitSlider4, {\n    start: [25, 75],\n    direction: direction,\n    orientation: 'vertical',\n    limit: 50,\n    behaviour: 'drag',\n    connect: true,\n    range: {\n      'min': 0,\n      'max': 100\n    }\n  });\n\n  var verticalLimitSlider5 = document.getElementById('vertical-limit-5');\n\n  noUiSlider.create(verticalLimitSlider5, {\n    start: [20, 80],\n    direction: direction,\n    orientation: 'vertical',\n    limit: 70,\n    behaviour: 'drag',\n    connect: true,\n    range: {\n      'min': 0,\n      'max': 100\n    }\n  });\n\n  /****************************************************\n\t*\t\t\t\tHorizontal Slider With Time\t\t\t\t*\n\t****************************************************/\n  // Create a new date from a string, return as a timestamp.\n  function timestamp(str) {\n    return new Date(str).getTime();\n  }\n  1\n  function timestamp(str) {\n    2\n    return new Date(str).getTime();\n    3\n  }\n\n  // weekdays and months\n\n  var weekdays = [\n    \"Sunday\", \"Monday\", \"Tuesday\",\n    \"Wednesday\", \"Thursday\", \"Friday\",\n    \"Saturday\"\n  ];\n\n  var months = [\n    \"January\", \"February\", \"March\",\n    \"April\", \"May\", \"June\", \"July\",\n    \"August\", \"September\", \"October\",\n    \"November\", \"December\"\n  ];\n\n  // Append a suffix to dates.\n  // Example: 23 => 23rd, 1 => 1st.\n  function nth(d) {\n    if (d > 3 && d < 21) return 'th';\n    switch (d % 10) {\n      case 1:\n        return \"st\";\n      case 2:\n        return \"nd\";\n      case 3:\n        return \"rd\";\n      default:\n        return \"th\";\n    }\n  }\n\n  // Create a string representation of the date.\n  function formatDate(date) {\n    return weekdays[date.getDay()] + \", \" +\n      date.getDate() + nth(date.getDate()) + \" \" +\n      months[date.getMonth()] + \" \" +\n      date.getFullYear();\n  }\n  var date = new Date();\n\n  // set previous month\n  var previousMonth = new Date();\n  previousMonth.setMonth(previousMonth.getMonth() - 1);\n\n  var dateSlider = document.getElementById('slider-with-date');\n\n  // nouislider settings\n  noUiSlider.create(dateSlider, {\n    behaviour: 'tap',\n    connect: true,\n    range: {\n      min: timestamp('2016-06-01') + 24 * 60 * 60 * 1000,\n      max: timestamp(date)\n    },\n    step: 1 * 24 * 60 * 60 * 1000,\n    start: [timestamp(previousMonth), timestamp(date)],\n    direction: direction,\n  });\n\n  // get range infos at html\n  var dateValues = [\n    document.getElementById('event-start'), document.getElementById('event-end')\n  ];\n\n  dateSlider.noUiSlider.on('update', function (values, handle) {\n    dateValues[handle].innerHTML = formatDate(new Date(+values[handle]));\n  });\n\n\t/****************************************************\n\t*\t\t\t\t Slider With Input\t\t\t\t*\n\t****************************************************/\n\n  var select = document.getElementById('slider-select');\n\n  // Append the option elements\n  for (var i = -20; i <= 40; i++) {\n\n    var option = document.createElement(\"option\");\n    option.text = i;\n    option.value = i;\n\n    select.appendChild(option);\n  }\n\n  var sliderWithInput = document.getElementById('slider-with-input');\n\n  noUiSlider.create(sliderWithInput, {\n    start: [10, 30],\n    direction: direction,\n    connect: true,\n    range: {\n      'min': -20,\n      'max': 40\n    }\n  });\n\n  var inputNumber = document.getElementById('slider-input-number');\n\n  sliderWithInput.noUiSlider.on('update', function (values, handle) {\n\n    var value = values[handle];\n\n    if (handle) {\n      inputNumber.value = value;\n    } else {\n      select.value = Math.round(value);\n    }\n  });\n\n  select.addEventListener('change', function () {\n    sliderWithInput.noUiSlider.set([this.value, null]);\n  });\n\n  inputNumber.addEventListener('change', function () {\n    sliderWithInput.noUiSlider.set([null, this.value]);\n  });\n\n});\n"
  },
  {
    "path": "public/backend/js/scripts/extensions/sweet-alerts.js",
    "content": "/*=========================================================================================\n\tFile Name: sweet-alerts.js\n\tDescription: A beautiful replacement for javascript alerts\n\t----------------------------------------------------------------------------------------\n\tItem Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n\tAuthor: Pixinvent\n\tAuthor URL: hhttp://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n$(document).ready(function () {\n\n  // Basic\n\n  $('#basic-alert').on('click', function () {\n    Swal.fire({\n      title: 'Any fool can use a computer',\n      confirmButtonClass: 'btn btn-primary',\n      buttonsStyling: false,\n    })\n  });\n\n  $('#with-title').on('click', function () {\n    Swal.fire({\n      title: 'The Internet?,',\n      text: \"That thing is still around?\",\n      confirmButtonClass: 'btn btn-primary',\n      buttonsStyling: false,\n    }\n    )\n  });\n\n  $('#footer-alert').on('click', function () {\n    Swal.fire({\n      type: 'error',\n      title: 'Oops...',\n      text: 'Something went wrong!',\n      footer: '<a href>Why do I have this issue?</a>',\n      confirmButtonClass: 'btn btn-primary',\n      buttonsStyling: false,\n    })\n  });\n\n  $('#html-alert').on('click', function () {\n    Swal.fire({\n      title: '<strong>HTML <u>example</u></strong>',\n      type: 'info',\n      html:\n        'You can use <b>bold text</b>, ' +\n        '<a href=\"https://pixinvent.com/\" target=\"_blank\">links</a> ' +\n        'and other HTML tags',\n      showCloseButton: true,\n      showCancelButton: true,\n      focusConfirm: false,\n      confirmButtonText:\n        '<i class=\"fa fa-thumbs-up\"></i> Great!',\n      confirmButtonAriaLabel: 'Thumbs up, great!',\n      cancelButtonText:\n        '<i class=\"fa fa-thumbs-down\"></i>',\n      cancelButtonAriaLabel: 'Thumbs down',\n      confirmButtonClass: 'btn btn-primary',\n      buttonsStyling: false,\n      cancelButtonClass: 'btn btn-danger ml-1',\n    })\n  });\n\n  // Position\n\n  $('#position-top-start').on('click', function () {\n    Swal.fire({\n      position: 'top-start',\n      type: 'success',\n      title: 'Your work has been saved',\n      showConfirmButton: false,\n      timer: 1500,\n      confirmButtonClass: 'btn btn-primary',\n      buttonsStyling: false,\n    })\n  })\n\n  $('#position-top-end').on('click', function () {\n    Swal.fire({\n      position: 'top-end',\n      type: 'success',\n      title: 'Your work has been saved',\n      showConfirmButton: false,\n      timer: 1500,\n      confirmButtonClass: 'btn btn-primary',\n      buttonsStyling: false,\n    })\n  })\n\n  $('#position-bottom-start').on('click', function () {\n    Swal.fire({\n      position: 'bottom-start',\n      type: 'success',\n      title: 'Your work has been saved',\n      showConfirmButton: false,\n      timer: 1500,\n      confirmButtonClass: 'btn btn-primary',\n      buttonsStyling: false,\n    })\n  })\n  $('#position-bottom-end').on('click', function () {\n    Swal.fire({\n      position: 'bottom-end',\n      type: 'success',\n      title: 'Your work has been saved',\n      showConfirmButton: false,\n      timer: 1500,\n      confirmButtonClass: 'btn btn-primary',\n      buttonsStyling: false,\n    })\n  })\n\n  // Animations\n\n  $(\"#bounce-in-animation\").on('click', function () {\n    Swal.fire({\n      title: 'Bounce In Animation',\n      animation: false,\n      customClass: 'animated bounceIn',\n      confirmButtonClass: 'btn btn-primary',\n      buttonsStyling: false,\n    })\n\n  })\n  $(\"#fade-in-animation\").on('click', function () {\n    Swal.fire({\n      title: 'Fade In Animation',\n      animation: false,\n      customClass: 'animated fadeIn',\n      confirmButtonClass: 'btn btn-primary',\n      buttonsStyling: false,\n    })\n  })\n  $(\"#flip-x-animation\").on('click', function () {\n    Swal.fire({\n      title: 'Flip In Animation',\n      animation: false,\n      customClass: 'animated flipInX',\n      confirmButtonClass: 'btn btn-primary',\n      buttonsStyling: false,\n    })\n  })\n  $(\"#tada-animation\").on('click', function () {\n    Swal.fire({\n      title: 'Tada Animation',\n      animation: false,\n      customClass: 'animated tada',\n      confirmButtonClass: 'btn btn-primary',\n      buttonsStyling: false,\n    })\n  })\n  $(\"#shake-animation\").on('click', function () {\n    Swal.fire({\n      title: 'Shake Animation',\n      animation: false,\n      customClass: 'animated shake',\n      confirmButtonClass: 'btn btn-primary',\n      buttonsStyling: false,\n    })\n  })\n\n  // type\n\n  $('#type-success').on('click', function () {\n    Swal.fire({\n      title: \"Good job!\",\n      text: \"You clicked the button!\",\n      type: \"success\",\n      confirmButtonClass: 'btn btn-primary',\n      buttonsStyling: false,\n    });\n  });\n\n  $('#type-info').on('click', function () {\n    Swal.fire({\n      title: \"Info!\",\n      text: \"You clicked the button!\",\n      type: \"info\",\n      confirmButtonClass: 'btn btn-primary',\n      buttonsStyling: false,\n    });\n  });\n\n  $('#type-warning').on('click', function () {\n    Swal.fire({\n      title: \"Warning!\",\n      text: \" You clicked the button!\",\n      type: \"warning\",\n      confirmButtonClass: 'btn btn-primary',\n      buttonsStyling: false,\n    });\n  });\n\n  $('#type-error').on('click', function () {\n    Swal.fire({\n      title: \"Error!\",\n      text: \" You clicked the button!\",\n      type: \"error\",\n      confirmButtonClass: 'btn btn-primary',\n      buttonsStyling: false,\n    });\n  });\n\n  // options\n\n  $('#custom-icon').on('click', function () {\n    Swal.fire({\n      title: 'Sweet!',\n      text: 'Modal with a custom image.',\n      imageUrl: '../../../app-assets/images/slider/04.jpg',\n      imageWidth: 400,\n      imageHeight: 200,\n      imageAlt: 'Custom image',\n      animation: false,\n      confirmButtonClass: 'btn btn-primary',\n      buttonsStyling: false,\n    })\n  });\n\n  $('#auto-close').on('click', function () {\n    var timerInterval\n    Swal.fire({\n      title: 'Auto close alert!',\n      html: 'I will close in <strong></strong> seconds.',\n      timer: 2000,\n      confirmButtonClass: 'btn btn-primary',\n      buttonsStyling: false,\n      onBeforeOpen: function () {\n        Swal.showLoading()\n        timerInterval = setInterval(function () {\n          Swal.getContent().querySelector('strong')\n            .textContent = Swal.getTimerLeft()\n        }, 100)\n      },\n      onClose: function () {\n        clearInterval(timerInterval)\n      }\n    }).then(function (result) {\n      if (\n        // Read more about handling dismissals\n        result.dismiss === Swal.DismissReason.timer\n      ) {\n        console.log('I was closed by the timer')\n      }\n    })\n  });\n\n  $('#outside-click').on('click', function () {\n    Swal.fire({\n      title: 'Click outside to close!',\n      text: 'This is a cool message!',\n      allowOutsideClick: true,\n      confirmButtonClass: 'btn btn-primary',\n      buttonsStyling: false,\n    });\n  });\n\n  $('#prompt-function').on('click', function () {\n    Swal.mixin({\n      input: 'text',\n      confirmButtonText: 'Next &rarr;',\n      showCancelButton: true,\n      progressSteps: ['1', '2', '3'],\n      confirmButtonClass: 'btn btn-primary',\n      buttonsStyling: false,\n      cancelButtonClass: \"btn btn-danger ml-1\"\n    }).queue([\n      {\n        title: 'Question 1',\n        text: 'Chaining swal2 modals is easy'\n      },\n      'Question 2',\n      'Question 3'\n    ]).then(function (result) {\n      if (result.value) {\n        Swal.fire({\n          title: 'All done!',\n          html:\n            'Your answers: <pre><code>' +\n            JSON.stringify(result.value) +\n            '</code></pre>',\n          confirmButtonText: 'Lovely!'\n        })\n      }\n    })\n  });\n\n  $('#ajax-request').on('click', function () {\n    Swal.fire({\n      title: 'Search for a user',\n      input: 'text',\n      confirmButtonClass: 'btn btn-primary',\n      buttonsStyling: false,\n      inputAttributes: {\n        autocapitalize: 'off'\n      },\n      showCancelButton: true,\n      confirmButtonText: 'Look up',\n      showLoaderOnConfirm: true,\n      cancelButtonClass: \"btn btn-danger ml-1\",\n      preConfirm: function (login) {\n        return fetch(\"//api.github.com/users/\" + login + \"\")\n          .then(function (response) {\n            if (!response.ok) {\n              console.log(response)\n              throw new Error(response.statusText)\n            }\n            return response.json()\n          })\n          .catch(function (error) {\n            Swal.showValidationMessage(\n              \"Request failed:  \" + error + \"\"\n            )\n          })\n      },\n      allowOutsideClick: function () {\n        !Swal.isLoading()\n      }\n    }).then(function (result) {\n      if (result.value) {\n        Swal.fire({\n          title: \"\" + result.value.login + \"'s avatar\",\n          imageUrl: result.value.avatar_url\n        })\n      }\n    })\n  });\n\n  // confirm options\n\n  $('#confirm-text').on('click', function () {\n    Swal.fire({\n      title: 'Are you sure?',\n      text: \"You won't be able to revert this!\",\n      type: 'warning',\n      showCancelButton: true,\n      confirmButtonColor: '#3085d6',\n      cancelButtonColor: '#d33',\n      confirmButtonText: 'Yes, delete it!',\n      confirmButtonClass: 'btn btn-primary',\n      cancelButtonClass: 'btn btn-danger ml-1',\n      buttonsStyling: false,\n    }).then(function (result) {\n      if (result.value) {\n        Swal.fire(\n          {\n            type: \"success\",\n            title: 'Deleted!',\n            text: 'Your file has been deleted.',\n            confirmButtonClass: 'btn btn-success',\n          }\n        )\n      }\n    })\n  });\n\n  $('#confirm-color').on('click', function () {\n    Swal.fire({\n      title: 'Are you sure?',\n      text: \"You won't be able to revert this!\",\n      type: 'warning',\n      showCancelButton: true,\n      confirmButtonColor: '#3085d6',\n      cancelButtonColor: '#d33',\n      confirmButtonText: 'Yes, delete it!',\n      confirmButtonClass: 'btn btn-primary',\n      cancelButtonClass: 'btn btn-danger ml-1',\n      buttonsStyling: false,\n    }).then(function (result) {\n      if (result.value) {\n        Swal.fire({\n          type: \"success\",\n          title: 'Deleted!',\n          text: 'Your file has been deleted.',\n          confirmButtonClass: 'btn btn-success',\n        })\n      }\n      else if (result.dismiss === Swal.DismissReason.cancel) {\n        Swal.fire({\n          title: 'Cancelled',\n          text: 'Your imaginary file is safe :)',\n          type: 'error',\n          confirmButtonClass: 'btn btn-success',\n        })\n      }\n    })\n  });\n\n});\n"
  },
  {
    "path": "public/backend/js/scripts/extensions/swiper.js",
    "content": "/*=========================================================================================\n    File Name: swiper.js\n    Description: swiper plugin\n    ----------------------------------------------------------------------------------------\n    Item Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n    Author: PIXINVENT\n    Author URL: http://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n$(document).ready(function () {\n  //initialize swiper when document ready\n\n  // default\n  var mySwiper = new Swiper('.swiper-default');\n\n  // navigation\n  var mySwiper1 = new Swiper('.swiper-navigations', {\n    navigation: {\n      nextEl: '.swiper-button-next',\n      prevEl: '.swiper-button-prev',\n    },\n  });\n\n  // pagination\n  var mySwiper2 = new Swiper('.swiper-paginations', {\n    pagination: {\n      el: '.swiper-pagination',\n    },\n  });\n\n  // progress\n  var mySwiper3 = new Swiper('.swiper-progress', {\n    pagination: {\n      el: '.swiper-pagination',\n      type: 'progressbar',\n    },\n    navigation: {\n      nextEl: '.swiper-button-next',\n      prevEl: '.swiper-button-prev',\n    },\n  });\n\n  // multiple\n  var mySwiper4 = new Swiper('.swiper-multiple', {\n    slidesPerView: 3,\n    spaceBetween: 30,\n    pagination: {\n      el: '.swiper-pagination',\n      clickable: true,\n    },\n  });\n\n  // multi row\n  var mySwiper5 = new Swiper('.swiper-multi-row', {\n    slidesPerView: 3,\n    slidesPerColumn: 2,\n    spaceBetween: 30,\n    pagination: {\n      el: '.swiper-pagination',\n      clickable: true,\n    },\n  });\n\n  // centered slides option-1\n  var mySwiperOpt1 = new Swiper('.swiper-centered-slides', {\n    slidesPerView: 'auto',\n    centeredSlides: true,\n    spaceBetween: 30,\n    navigation: {\n      nextEl: '.swiper-button-next',\n      prevEl: '.swiper-button-prev',\n    },\n  });\n\n  // centered slides option-2\n\n  var swiperLength = $(\".swiper-slide\").length;\n  if (swiperLength) {\n    swiperLength = Math.floor(swiperLength / 2)\n  }\n\n  var mySwiperOpt2 = new Swiper('.swiper-centered-slides-2', {\n    slidesPerView: 'auto',\n    initialSlide: swiperLength,\n    centeredSlides: true,\n    spaceBetween: 30,\n    slideToClickedSlide: true,\n  });\n  activeSlide(swiperLength);\n\n  // Active slide change on swipe\n  mySwiper.on('slideChange', function () {\n    activeSlide(mySwiper.realIndex);\n  });\n\n  //add class active content of active slide\n  function activeSlide(index) {\n    var slideEl = mySwiper.slides[index]\n    var slideId = $(slideEl).attr('id');\n    $(\".wrapper-content\").removeClass(\"active\");\n    $(\"[data-faq=\" + slideId + \"]\").addClass('active')\n  };\n\n  // fade effect\n  var mySwiper7 = new Swiper('.swiper-fade-effect', {\n    spaceBetween: 30,\n    effect: 'fade',\n    pagination: {\n      el: '.swiper-pagination',\n      clickable: true,\n    },\n    navigation: {\n      nextEl: '.swiper-button-next',\n      prevEl: '.swiper-button-prev',\n    },\n  });\n\n  // cube effect\n  var mySwiper8 = new Swiper('.swiper-cube-effect', {\n    effect: 'cube',\n    grabCursor: true,\n    cubeEffect: {\n      shadow: true,\n      slideShadows: true,\n      shadowOffset: 20,\n      shadowScale: 0.94,\n    },\n    pagination: {\n      el: '.swiper-pagination',\n    },\n  });\n\n  // coverflow effect\n  var mySwiper9 = new Swiper('.swiper-coverflow', {\n    effect: 'coverflow',\n    grabCursor: true,\n    centeredSlides: true,\n    slidesPerView: 'auto',\n    coverflowEffect: {\n      rotate: 50,\n      stretch: 0,\n      depth: 100,\n      modifier: 1,\n      slideShadows: true,\n    },\n    pagination: {\n      el: '.swiper-pagination',\n    },\n  });\n\n  // autoplay\n  var mySwiper10 = new Swiper('.swiper-autoplay', {\n    spaceBetween: 30,\n    centeredSlides: true,\n    autoplay: {\n      delay: 2500,\n      disableOnInteraction: false,\n    },\n    pagination: {\n      el: '.swiper-pagination',\n      clickable: true,\n    },\n    navigation: {\n      nextEl: '.swiper-button-next',\n      prevEl: '.swiper-button-prev',\n    },\n  });\n\n  // gallery\n  var galleryThumbs = new Swiper('.gallery-thumbs', {\n    spaceBetween: 10,\n    slidesPerView: 4,\n    freeMode: true,\n    watchSlidesVisibility: true,\n    watchSlidesProgress: true,\n  });\n  var galleryTop = new Swiper('.gallery-top', {\n    spaceBetween: 10,\n    navigation: {\n      nextEl: '.swiper-button-next',\n      prevEl: '.swiper-button-prev',\n    },\n    thumbs: {\n      swiper: galleryThumbs\n    }\n  });\n\n  // parallax\n  var mySwiper12 = new Swiper('.swiper-parallax', {\n    speed: 600,\n    parallax: true,\n    pagination: {\n      el: '.swiper-pagination',\n      clickable: true,\n    },\n    navigation: {\n      nextEl: '.swiper-button-next',\n      prevEl: '.swiper-button-prev',\n    },\n  });\n\n  // lazy loading\n  var mySwiper13 = new Swiper('.swiper-lazy-loading', {\n    // Enable lazy loading\n    lazy: true,\n    pagination: {\n      el: '.swiper-pagination',\n      clickable: true,\n    },\n    navigation: {\n      nextEl: '.swiper-button-next',\n      prevEl: '.swiper-button-prev',\n    },\n  });\n\n  // Responsive Breakpoints\n  var mySwiper14 = new Swiper('.swiper-responsive-breakpoints', {\n    slidesPerView: 5,\n    spaceBetween: 50,\n    // init: false,\n    pagination: {\n      el: '.swiper-pagination',\n      clickable: true,\n    },\n    breakpoints: {\n      1024: {\n        slidesPerView: 4,\n        spaceBetween: 40,\n      },\n      768: {\n        slidesPerView: 3,\n        spaceBetween: 30,\n      },\n      640: {\n        slidesPerView: 2,\n        spaceBetween: 20,\n      },\n      320: {\n        slidesPerView: 1,\n        spaceBetween: 10,\n      }\n    }\n  });\n\n  // virtual slides\n  var appendNumber = 600;\n  var prependNumber = 1;\n  var mySwiper15 = new Swiper('.swiper-virtual', {\n\n    slidesPerView: 3,\n    centeredSlides: true,\n    spaceBetween: 30,\n    pagination: {\n      el: '.swiper-pagination',\n      type: 'fraction',\n    },\n    navigation: {\n      nextEl: '.swiper-button-next',\n      prevEl: '.swiper-button-prev',\n    },\n    virtual: {\n      slides: (function () {\n        var slides = [];\n        for (var i = 0; i < 600; i += 1) {\n          slides.push('Slide ' + (i + 1));\n        }\n        return slides;\n      }()),\n    },\n  });\n  $('.slide-1').on('click', function (e) {\n    e.preventDefault();\n    mySwiper15.slideTo(0, 0);\n  });\n  $('.slide-250').on('click', function (e) {\n    e.preventDefault();\n    mySwiper15.slideTo(249, 0);\n  });\n  $('.slide-500').on('click', function (e) {\n    e.preventDefault();\n    mySwiper15.slideTo(499, 0);\n  });\n  $('.prepend-2-slides').on('click', function (e) {\n    e.preventDefault();\n    mySwiper15.virtual.prependSlide([\n      'Slide ' + (--prependNumber),\n      'Slide ' + (--prependNumber)\n    ]);\n  });\n  $('.append-slide').on('click', function (e) {\n    e.preventDefault();\n    mySwiper15.virtual.appendSlide('Slide ' + (++appendNumber));\n  });\n});\n"
  },
  {
    "path": "public/backend/js/scripts/extensions/toastr.js",
    "content": "/*=========================================================================================\n\tFile Name: toastr.js\n\tDescription: Toastr notifications\n\t----------------------------------------------------------------------------------------\n\tItem Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n\tAuthor: Pixinvent\n\tAuthor URL: hhttp://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n$(document).ready(function () {\n\n  // Success Type\n  $('#type-success').on('click', function () {\n    toastr.success('Have fun storming the castle!', 'Miracle Max Says');\n  });\n\n  // Info Type\n  $('#type-info').on('click', function () {\n    toastr.info('We do have the Kapua suite available.', 'Turtle Bay Resort');\n  });\n\n  // Warning Type\n  $('#type-warning').on('click', function () {\n    toastr.warning('My name is Inigo Montoya. You killed my father, prepare to die!');\n  });\n\n  // Error Type\n  $('#type-error').on('click', function () {\n    toastr.error('I do not think that word means what you think it means.', 'Inconceivable!');\n  });\n\n  // Position Top Left\n  $('#position-top-left').on('click', function () {\n    toastr.info('I do not think that word means what you think it means.', 'Top Left!', { positionClass: 'toast-top-left', containerId: 'toast-top-left' });\n  });\n\n  // Position Top Center\n  $('#position-top-center').on('click', function () {\n    toastr.info('I do not think that word means what you think it means.', 'Top Center!', { positionClass: 'toast-top-center', containerId: 'toast-top-center' });\n  });\n\n  // Position Top Right\n  $('#position-top-right').on('click', function () {\n    toastr.info('I do not think that word means what you think it means.', 'Top Right!', { positionClass: 'toast-top-right', containerId: 'toast-top-right' });\n  });\n\n  // Position Top Full Width\n  $('#position-top-full').on('click', function () {\n    toastr.info('I do not think that word means what you think it means.', 'Top Full Width!', { positionClass: 'toast-top-full-width', });\n  });\n\n  // Position Bottom Left\n  $('#position-bottom-left').on('click', function () {\n    toastr.info('I do not think that word means what you think it means.', 'Bottom Left!', { positionClass: 'toast-bottom-left', containerId: 'toast-bottom-left' });\n  });\n\n  // Position Bottom Center\n  $('#position-bottom-center').on('click', function () {\n    toastr.info('I do not think that word means what you think it means.', 'Bottom Center!', { positionClass: 'toast-bottom-center', containerId: 'toast-bottom-center' });\n  });\n\n  // Position Bottom Right\n  $('#position-bottom-right').on('click', function () {\n    toastr.info('I do not think that word means what you think it means.', 'Bottom Right!', { positionClass: 'toast-bottom-right', containerId: 'toast-bottom-right' });\n  });\n\n  // Position Bottom Full Width\n  $('#position-bottom-full').on('click', function () {\n    toastr.info('I do not think that word means what you think it means.', 'Bottom Full Width!', { positionClass: 'toast-bottom-full-width' });\n  });\n\n  // Text Notification\n  $('#text-notification').on('click', function () {\n    toastr.info('Have fun storming the castle!', 'Miracle Max Says');\n  });\n\n  // Close Button\n  $('#close-button').on('click', function () {\n    toastr.success('Have fun storming the castle!', 'With Close Button', { \"closeButton\": true });\n  });\n\n  // Progress Bar\n  $('#progress-bar').on('click', function () {\n    toastr.warning('Have fun storming the castle!', 'Progress Bar', { \"progressBar\": true });\n  });\n\n  // Clear Toast Button\n  $('#clear-toast-btn').on('click', function () {\n    toastr.error('Clear itself?<br /><br /><button type=\"button\" class=\"btn btn-primary clear\">Yes</button>', 'Clear Toast Button');\n  });\n\n\n  // Immediately remove current toasts without using animation\n  $('#show-remove-toast').on('click', function () {\n    toastr.info('Have fun storming the castle!', 'Miracle Max Says');\n  });\n\n  $('#remove-toast').on('click', function () {\n    toastr.remove();\n  });\n\n  // Remove current toasts using animation\n  $('#show-clear-toast').on('click', function () {\n    toastr.info('Have fun storming the castle!', 'Miracle Max Says');\n  });\n\n  $('#clear-toast').on('click', function () {\n    toastr.clear();\n  });\n\n\n  // Fast Duration\n  $('#fast-duration').on('click', function () {\n    toastr.success('Have fun storming the castle!', 'Fast Duration', { \"showDuration\": 500 });\n  });\n\n  // Slow Duration\n  $('#slow-duration').on('click', function () {\n    toastr.warning('Have fun storming the castle!', 'Slow Duration', { \"hideDuration\": 3000 });\n  });\n\n  // Timeout\n  $('#timeout').on('click', function () {\n    toastr.error('I do not think that word means what you think it means.', 'Timeout!', { \"timeOut\": 5000 });\n  });\n\n  // Sticky\n  $('#sticky').on('click', function () {\n    toastr.info('I do not think that word means what you think it means.', 'Sticky!', { \"timeOut\": 0 });\n  });\n\n  // Slide Down / Slide Up\n  $('#slide-toast').on('click', function () {\n    toastr.success('I do not think that word means what you think it means.', 'Slide Down / Slide Up!', { \"showMethod\": \"slideDown\", \"hideMethod\": \"slideUp\", timeOut: 2000 });\n  });\n\n  // Fade In / Fade Out\n  $('#fade-toast').on('click', function () {\n    toastr.success('I do not think that word means what you think it means.', 'Slide Down / Slide Up!', { \"showMethod\": \"fadeIn\", \"hideMethod\": \"fadeOut\", timeOut: 2000 });\n  });\n});\n"
  },
  {
    "path": "public/backend/js/scripts/extensions/tour.js",
    "content": "/*=========================================================================================\n\tFile Name: tour.js\n\tDescription: tour\n\t----------------------------------------------------------------------------------------\n\tItem Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n\tAuthor: Pixinvent\n\tAuthor URL: hhttp://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n\n$(document).ready(function () {\n  displayTour();\n  $(window).resize(displayTour)\n  var tour = new Shepherd.Tour({\n    classes: 'shadow-md bg-purple-dark',\n    scrollTo: true\n  })\n\n  // tour steps\n  tour.addStep('step-1', {\n    text: 'Here is page title.',\n    attachTo: '.breadcrumbs-top .content-header-title bottom',\n    buttons: [\n\n      {\n        text: \"Skip\",\n        action: tour.complete\n      },\n      {\n        text: 'Next',\n        action: tour.next\n      },\n    ]\n  });\n\n  tour.addStep('step-2', {\n    text: 'Check your notifications from here.',\n    attachTo: '.dropdown-notification .icon-bell bottom',\n    buttons: [\n\n      {\n        text: \"Skip\",\n        action: tour.complete\n      },\n\n      {\n        text: \"previous\",\n        action: tour.back\n      },\n      {\n        text: 'Next',\n        action: tour.next\n      },\n    ]\n  });\n\n  tour.addStep('step-3', {\n    text: 'Click here for user options.',\n    attachTo: '.dropdown-user-link img bottom',\n    buttons: [\n\n      {\n        text: \"Skip\",\n        action: tour.complete\n      },\n\n      {\n        text: \"previous\",\n        action: tour.back\n      },\n      {\n        text: 'Next',\n        action: tour.next\n      },\n    ]\n  });\n\n  tour.addStep('step-4', {\n    text: 'Buy this awesomeness at affordable price!',\n    attachTo: '.buy-now bottom',\n    buttons: [\n\n      {\n        text: \"previous\",\n        action: tour.back\n      },\n\n      {\n        text: \"Finish\",\n        action: tour.complete\n      },\n    ]\n  });\n\n  // function to remove tour on small screen\n  function displayTour() {\n    window.resizeEvt;\n    if ($(window).width() > 576) {\n      $('#tour').on(\"click\", function () {\n        clearTimeout(window.resizeEvt);\n        tour.start();\n      })\n    }\n    else {\n      $('#tour').on(\"click\", function () {\n        clearTimeout(window.resizeEvt);\n        tour.cancel()\n        window.resizeEvt = setTimeout(function () {\n          alert(\"Tour only works for large screens!\");\n        }, 250);;\n      })\n    }\n  }\n\n});\n"
  },
  {
    "path": "public/backend/js/scripts/extensions/unslider.js",
    "content": "/*=========================================================================================\n    File Name: sweet-alerts.js\n    Description: A beautiful replacement for javascript alerts\n    ----------------------------------------------------------------------------------------\n    Item Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n    Author: PIXINVENT\n    Author URL: http://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n$(document).ready(function(){\n\n    // RTL Support\n    var rtl = false;\n    if($('html').data('textdirection') == 'rtl'){\n        rtl = true;\n    }\n    if(rtl === true){\n        $(\"#default-slider\").attr('dir', 'rtl');\n        $(\"#automatic-slider\").attr('dir', 'rtl');\n        $(\"#vertical-slider\").attr('dir', 'rtl');\n        $(\"#automcatic-anim-slider\").attr('dir', 'rtl');\n        $(\"#infinite-slider\").attr('dir', 'rtl');\n        $(\"#manual-slider\").attr('dir', 'rtl');\n        $(\"#manual\").attr('dir', 'rtl');\n    }\n\n\n    // Default\n    $(\"#default-slider\").unslider({\n        animation: 'fade'\n    });\n\n    // Automatic\n    $(\"#automatic-slider\").unslider({\n        autoplay: true,\n        animation: \"fade\"\n    });\n\n    // Vertical\n    $(\"#vertical-slider\").unslider({\n        animation: 'vertical',\n        autoplay: true,\n        infinite: true\n    });\n\n    // Automatic Animation\n    $(\"#automcatic-anim-slider\").unslider({\n        animation: 'fade',\n        autoplay: true,\n        arrows: false\n    });\n\n    // Infinite\n    $(\"#infinite-slider\").unslider({\n        animation: \"fade\",\n        infinite: true\n    });\n\n    // Manual Slider\n    $(\"#manual-slider\").unslider({\n        keys: false,\n        arrows: false,\n        nav: false\n    });\n\n    $('#manual').on('keyup', function() {\n        $('.manual-slider').unslider('animate:' + $(this).val());\n    });\n});\n"
  },
  {
    "path": "public/backend/js/scripts/footer.js",
    "content": "/*=========================================================================================\n  File Name: footer.js\n  Description: Template footer js.\n  ----------------------------------------------------------------------------------------\n  Item Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n  Author: Pixinvent\n  Author URL: hhttp://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n\n//Check to see if the window is top if not then display button\n$(document).ready(function(){\n    $(window).scroll(function(){\n        if ($(this).scrollTop() > 400) {\n            $('.scroll-top').fadeIn();\n        } else {\n            $('.scroll-top').fadeOut();\n        }\n    });\n\n    //Click event to scroll to top\n    $('.scroll-top').click(function(){\n        $('html, body').animate({scrollTop : 0},1000);\n    });\n\n});\n"
  },
  {
    "path": "public/backend/js/scripts/forms/basic-inputs.js",
    "content": "/*=========================================================================================\n        File Name: basic-inputs.js\n        Description: Input field js for label type\n        ----------------------------------------------------------------------------------------\n        Item Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n        Author: Pixinvent\n        Author URL: hhttp://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n\n(function(window, document, $) {\n    'use strict';\n    var $html = $('html');\n\n        //label Positions\n    $(\".labelUp\").labelinplace();\n    $(\".labelDown\").labelinplace({\n        labelPosition: \"down\"\n    });\n\n    // Label Icons\n    $(\".labelIcon\").labelinplace({\n        labelArrowRight: ' <i class=\"icon-hand-o-right\"></i> ',\n        labelArrowDown: ' <i class=\"icon-hand-o-down\"></i> ',\n        labelArrowUp: ' <i class=\"icon-hand-o-up\"></i> '\n    });\n\n    // Icons After Label\n    $(\".labelIconAfter\").labelinplace({\n        labelArrowRight: ' <i class=\"icon-caret-right\"></i> ',\n        labelArrowDown: ' <i class=\"icon-caret-down\"></i> ',\n        labelArrowUp: ' <i class=\"icon-caret-up\"></i> ',\n        labelIconPosition: \"after\",\n        inputAttr: \"id\"\n    });\n\n})(window, document, jQuery);\n"
  },
  {
    "path": "public/backend/js/scripts/forms/form-maxlength.js",
    "content": "/*=========================================================================================\n\tFile Name: form-maxlength.js\n\tDescription: Bootstrap-Maxlength uses a Twitter Bootstrap label to show a visual\n\t\tfeedback to the user about the maximum length of the field where the user is\n\t\tinserting text. Uses the HTML5 attribute \"maxlength\" to work.\n\t----------------------------------------------------------------------------------------\n\tItem Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n\tAuthor: Pixinvent\n\tAuthor URL: hhttp://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n(function (window, document, $) {\n  'use strict';\n\n  var $danger = \"#ea5455\";\n  var $primary = \"#7367f0\";\n  var $textcolor = \"#4e5154\";\n\n  $(\".char-textarea\").on(\"keyup\", function (event) {\n    checkTextAreaMaxLength(this, event);\n    // to later change text color in dark layout\n    $(this).addClass(\"active\")\n  });\n\n  /*\n  Checks the MaxLength of the Textarea\n  -----------------------------------------------------\n  @prerequisite:\ttextBox = textarea dom element\n          e = textarea event\n                  length = Max length of characters\n  */\n  function checkTextAreaMaxLength(textBox, e) {\n\n    var maxLength = parseInt($(textBox).data(\"length\"));\n\n\n    if (!checkSpecialKeys(e)) {\n      if (textBox.value.length < maxLength - 1) textBox.value = textBox.value.substring(0, maxLength);\n    }\n    $(\".char-count\").html(textBox.value.length);\n\n    if (textBox.value.length > maxLength) {\n      $(\".counter-value\").css(\"background-color\", $danger);\n      $(\".char-textarea\").css(\"color\", $danger);\n      // to change text color after limit is maxedout out\n      $(\".char-textarea\").addClass(\"max-limit\")\n    }\n    else {\n      $(\".counter-value\").css(\"background-color\", $primary);\n      $(\".char-textarea\").css(\"color\", $textcolor);\n      $(\".char-textarea\").removeClass(\"max-limit\")\n\n    }\n\n    return true;\n  }\n  /*\n  Checks if the keyCode pressed is inside special chars\n  -------------------------------------------------------\n  @prerequisite:\te = e.keyCode object for the key pressed\n  */\n  function checkSpecialKeys(e) {\n    if (e.keyCode != 8 && e.keyCode != 46 && e.keyCode != 37 && e.keyCode != 38 && e.keyCode != 39 && e.keyCode != 40)\n      return false;\n    else\n      return true;\n  }\n\n})(window, document, jQuery);\n"
  },
  {
    "path": "public/backend/js/scripts/forms/form-tooltip-valid.js",
    "content": "/*=========================================================================================\n    File Name: form-tooltip-valid.js\n    Description: form tooltip validation etc..\n    ----------------------------------------------------------------------------------------\n    Item Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n    Author: Pixinvent\n    Author URL: hhttp://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n(function(window, document, $) {\n  'use strict';\n\n  // Fetch all the forms we want to apply custom Bootstrap validation styles to\n  // Loop over them and prevent submission\n  $(\"button\").click(function () {\n    var form = $(\".needs-validation\");\n    if (form[0].checkValidity() === false) {\n        event.preventDefault();\n        event.stopPropagation();\n    }\n    form.addClass('was-validated');\n  });\n\n})(window, document, jQuery);\n"
  },
  {
    "path": "public/backend/js/scripts/forms/number-input.js",
    "content": "/*=========================================================================================\n\tFile Name: input-groups.js\n\tDescription: Input Groups js\n\t----------------------------------------------------------------------------------------\n\tItem Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n\tAuthor: PIXINVENT\n\tAuthor URL: http://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n\n(function (window, document, $) {\n  'use strict';\n  var $html = $('html');\n\n  // Default Spin\n  $(\".touchspin\").TouchSpin({\n    buttondown_class: \"btn btn-primary\",\n    buttonup_class: \"btn btn-primary\",\n  });\n\n  // Icon Change\n  $(\".touchspin-icon\").TouchSpin({\n    buttondown_txt: '<i class=\"feather icon-chevron-down\"></i>',\n    buttonup_txt: '<i class=\"feather icon-chevron-up\"></i>'\n  });\n\n  // Min - Max\n\n  var touchspinValue = $(\".touchspin-min-max\"),\n    counterMin = 15,\n    counterMax = 21;\n  if (touchspinValue.length > 0) {\n    touchspinValue.TouchSpin({\n      min: counterMin,\n      max: counterMax\n    }).on('touchspin.on.startdownspin', function () {\n      var $this = $(this);\n      $('.bootstrap-touchspin-up').removeClass(\"disabled-max-min\");\n      if ($this.val() == counterMin) {\n        $(this).siblings().find('.bootstrap-touchspin-down').addClass(\"disabled-max-min\");\n      }\n    }).on('touchspin.on.startupspin', function () {\n      var $this = $(this);\n      $('.bootstrap-touchspin-down').removeClass(\"disabled-max-min\");\n      if ($this.val() == counterMax) {\n        $(this).siblings().find('.bootstrap-touchspin-up').addClass(\"disabled-max-min\");\n      }\n    });\n  }\n\n\n  // Step\n  $(\".touchspin-step\").TouchSpin({\n    step: 5\n  });\n\n  // Color Options\n  $(\".touchspin-color\").each(function (index) {\n    var down = \"btn btn-primary\",\n      up = \"btn btn-primary\",\n      $this = $(this);\n    if ($this.data('bts-button-down-class')) {\n      down = $this.data('bts-button-down-class');\n    }\n    if ($this.data('bts-button-up-class')) {\n      up = $this.data('bts-button-up-class');\n    }\n    $this.TouchSpin({\n      mousewheel: false,\n      buttondown_class: down,\n      buttonup_class: up,\n      buttondown_txt: '<i class=\"feather icon-minus\"></i>',\n      buttonup_txt: '<i class=\"feather icon-plus\"></i>'\n    });\n  });\n\n})(window, document, jQuery);\n"
  },
  {
    "path": "public/backend/js/scripts/forms/select/form-select2.js",
    "content": "/*=========================================================================================\n    File Name: form-select2.js\n    Description: Select2 is a jQuery-based replacement for select boxes.\n    It supports searching, remote data sets, and pagination of results.\n    ----------------------------------------------------------------------------------------\n    Item Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n    Author: Pixinvent\n    Author URL: hhttp://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n(function(window, document, $) {\n\t'use strict';\n\n  // Basic Select2 select\n\t$(\".select2\").select2({\n    // the following code is used to disable x-scrollbar when click in select input and\n    // take 100% width in responsive also\n    dropdownAutoWidth: true,\n    width: '100%'\n  });\n\n    // Select With Icon\n    $(\".select2-icons\").select2({\n        dropdownAutoWidth: true,\n        width: '100%',\n        minimumResultsForSearch: Infinity,\n        templateResult: iconFormat,\n        templateSelection: iconFormat,\n        escapeMarkup: function(es) { return es; }\n    });\n\n    // Format icon\n    function iconFormat(icon) {\n        var originalOption = icon.element;\n        if (!icon.id) { return icon.text; }\n        var $icon = \"<i class='\" + $(icon.element).data('icon') + \"'></i>\" + icon.text;\n\n        return $icon;\n    }\n\n\n    // Limiting the number of selections\n    $(\".max-length\").select2({\n      dropdownAutoWidth: true,\n      width: '100%',\n      maximumSelectionLength: 2,\n      placeholder: \"Select maximum 2 items\"\n    });\n\n\n    // Programmatic access\n    var $select = $(\".js-example-programmatic\").select2({\n      dropdownAutoWidth: true,\n      width: '100%'\n    });\n    var $selectMulti = $(\".js-example-programmatic-multi\").select2();\n    $selectMulti.select2({\n      dropdownAutoWidth: true,\n      width: '100%',\n      placeholder: \"Programmatic Events\"\n    });\n    $(\".js-programmatic-set-val\").on(\"click\", function () { $select.val(\"CA\").trigger(\"change\"); });\n\n    $(\".js-programmatic-open\").on(\"click\", function () { $select.select2(\"open\"); });\n    $(\".js-programmatic-close\").on(\"click\", function () { $select.select2(\"close\"); });\n\n    $(\".js-programmatic-init\").on(\"click\", function () { $select.select2(); });\n    $(\".js-programmatic-destroy\").on(\"click\", function () { $select.select2(\"destroy\"); });\n\n    $(\".js-programmatic-multi-set-val\").on(\"click\", function () { $selectMulti.val([\"CA\", \"AL\"]).trigger(\"change\"); });\n    $(\".js-programmatic-multi-clear\").on(\"click\", function () { $selectMulti.val(null).trigger(\"change\"); });\n\n    // Loading array data\n    var data = [\n        { id: 0, text: 'enhancement' },\n        { id: 1, text: 'bug' },\n        { id: 2, text: 'duplicate' },\n        { id: 3, text: 'invalid' },\n        { id: 4, text: 'wontfix' }\n    ];\n\n    $(\".select2-data-array\").select2({\n      dropdownAutoWidth: true,\n      width: '100%',\n      data: data\n    });\n\n    // Loading remote data\n    $(\".select2-data-ajax\").select2({\n        dropdownAutoWidth: true,\n        width: '100%',\n        ajax: {\n        url: \"https://api.github.com/search/repositories\",\n        dataType: 'json',\n        delay: 250,\n        data: function (params) {\n          return {\n            q: params.term, // search term\n            page: params.page\n          };\n        },\n        processResults: function (data, params) {\n          // parse the results into the format expected by Select2\n          // since we are using custom formatting functions we do not need to\n          // alter the remote JSON data, except to indicate that infinite\n          // scrolling can be used\n          params.page = params.page || 1;\n\n          return {\n            results: data.items,\n            pagination: {\n              more: (params.page * 30) < data.total_count\n            }\n          };\n        },\n        cache: true\n      },\n      placeholder: 'Search for a repository',\n      escapeMarkup: function (markup) { return markup; }, // let our custom formatter work\n      minimumInputLength: 1,\n      templateResult: formatRepo,\n      templateSelection: formatRepoSelection\n  });\n\n    function formatRepo (repo) {\n      if (repo.loading) return repo.text;\n\n      var markup = \"<div class='select2-result-repository clearfix'>\" +\n        \"<div class='select2-result-repository__avatar'><img src='\" + repo.owner.avatar_url + \"' /></div>\" +\n        \"<div class='select2-result-repository__meta'>\" +\n          \"<div class='select2-result-repository__title'>\" + repo.full_name + \"</div>\";\n\n      if (repo.description) {\n        markup += \"<div class='select2-result-repository__description'>\" + repo.description + \"</div>\";\n      }\n\n      markup += \"<div class='select2-result-repository__statistics'>\" +\n        \"<div class='select2-result-repository__forks'><i class='icon-code-fork mr-0'></i> \" + repo.forks_count + \" Forks</div>\" +\n        \"<div class='select2-result-repository__stargazers'><i class='icon-star5 mr-0'></i> \" + repo.stargazers_count + \" Stars</div>\" +\n        \"<div class='select2-result-repository__watchers'><i class='icon-eye mr-0'></i> \" + repo.watchers_count + \" Watchers</div>\" +\n      \"</div>\" +\n      \"</div></div>\";\n\n      return markup;\n    }\n\n    function formatRepoSelection (repo) {\n      return repo.full_name || repo.text;\n    }\n\n\n    // Customizing how results are matched\n    function matchStart (term, text) {\n      if (text.toUpperCase().indexOf(term.toUpperCase()) === 0) {\n        return true;\n      }\n\n      return false;\n    }\n\n    $.fn.select2.amd.require(['select2/compat/matcher'], function (oldMatcher) {\n      $(\".select2-customize-result\").select2({\n        dropdownAutoWidth: true,\n        width: '100%',\n        placeholder: \"Search by 'r'\",\n        matcher: oldMatcher(matchStart)\n      });\n    });\n\n    // Theme support\n    $(\".select2-theme\").select2({\n      dropdownAutoWidth: true,\n      width: '100%',\n      placeholder: \"Classic Theme\",\n      theme: \"classic\"\n    });\n\n\n    // Sizing options\n\n    // Large\n    $('.select2-size-lg').select2({\n        dropdownAutoWidth: true,\n        width: '100%',\n        containerCssClass: 'select-lg'\n    });\n\n    // Small\n    $('.select2-size-sm').select2({\n        dropdownAutoWidth: true,\n        width: '100%',\n        containerCssClass: 'select-sm'\n    });\n\n    // Color Options\n\n    // Background Color\n    $('.select2-bg').each(function(i, obj) {\n      var variation = \"\",\n      textVariation = \"\",\n      textColor = \"\";\n      var color = $(this).data('bgcolor');\n      variation = $(this).data('bgcolor-variation');\n      textVariation = $(this).data('text-variation');\n      textColor = $(this).data('text-color');\n      if(textVariation !== \"\"){\n        textVariation = \" \"+textVariation;\n      }\n      if(variation !== \"\"){\n        variation = \" bg-\"+variation;\n      }\n      var className = \"bg-\"+color + variation + \" \" + textColor + textVariation + \" border-\"+color + ' border-darken-2 ';\n\n      $(this).select2({\n        dropdownAutoWidth: true,\n        width: '100%',\n        containerCssClass: className\n      });\n    });\n\n    // Border Color\n    $('.select2-border').each(function(i, obj) {\n      var variation = \"\",\n      textVariation = \"\",\n      textColor = \"\";\n      var color = $(this).data('border-color');\n      textVariation = $(this).data('text-variation');\n      variation = $(this).data('border-variation');\n      textColor = $(this).data('text-color');\n      if(textVariation !== \"\"){\n        textVariation = \" \"+textVariation;\n      }\n      if(variation !== \"\"){\n        variation = \" border-\"+variation;\n      }\n\n      var className = \"border-\"+color + \" \" +variation + \" \" + textColor + textVariation;\n\n      $(this).select2({\n        dropdownAutoWidth: true,\n        width: '100%',\n        containerCssClass: className\n      });\n    });\n\n    // Full Background Color\n    $('.select2-full-bg').each(function(i, obj) {\n      var variation = \"\",\n      textVariation = \"\",\n      textColor = \"\";\n      var color = $(this).data('bgcolor');\n      variation = $(this).data('bgcolor-variation');\n      textVariation = $(this).data('text-variation');\n      textColor = $(this).data('text-color');\n      if(variation !== \"\"){\n        variation = \" bg-\"+variation;\n      }\n      if(textVariation !== \"\"){\n        textVariation = \" \"+textVariation;\n      }\n      var className = \"bg-\"+color + variation + \" \" + textColor + textVariation + \" border-\"+color + ' border-darken-2 ';\n\n      $(this).select2({\n        dropdownAutoWidth: true,\n        width: '100%',\n        containerCssClass: className,\n        dropdownCssClass: className\n      });\n    });\n\n    $('select[data-text-color]').each(function(i, obj) {\n      var text = $(this).data('text-color'),textVariation;\n      textVariation = $(this).data('text-variation');\n      if(textVariation !== \"\"){\n        textVariation = \" \"+textVariation;\n      }\n      $(this).next(\".select2\").find(\".select2-selection__rendered\").addClass(text+textVariation);\n    });\n\n})(window, document, jQuery);\n"
  },
  {
    "path": "public/backend/js/scripts/forms/validation/form-validation.js",
    "content": "/*=========================================================================================\n  File Name: form-validation.js\n  Description: jquery bootsreap validation js\n  ----------------------------------------------------------------------------------------\n  Item Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n  Author: PIXINVENT\n  Author URL: http://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n\n(function(window, document, $) {\n  'use strict';\n\n  // Input, Select, Textarea validations except submit button\n  $(\"input,select,textarea\").not(\"[type=submit]\").jqBootstrapValidation();\n\n})(window, document, jQuery);\n"
  },
  {
    "path": "public/backend/js/scripts/forms/wizard-steps.js",
    "content": "/*=========================================================================================\n    File Name: wizard-steps.js\n    Description: wizard steps page specific js\n    ----------------------------------------------------------------------------------------\n    Item Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n    Author: PIXINVENT\n    Author URL: http://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n\n// Wizard tabs with numbers setup\n$(\".number-tab-steps\").steps({\n    headerTag: \"h6\",\n    bodyTag: \"fieldset\",\n    transitionEffect: \"fade\",\n    titleTemplate: '<span class=\"step\">#index#</span> #title#',\n    labels: {\n        finish: 'Submit'\n    },\n    onFinished: function (event, currentIndex) {\n        alert(\"Form submitted.\");\n    }\n});\n\n// Wizard tabs with icons setup\n$(\".icons-tab-steps\").steps({\n    headerTag: \"h6\",\n    bodyTag: \"fieldset\",\n    transitionEffect: \"fade\",\n    titleTemplate: '<span class=\"step\">#index#</span> #title#',\n    labels: {\n        finish: 'Submit'\n    },\n    onFinished: function (event, currentIndex) {\n        alert(\"Form submitted.\");\n    }\n});\n\n// Validate steps wizard\n\n// Show form\nvar form = $(\".steps-validation\").show();\n\n$(\".steps-validation\").steps({\n    headerTag: \"h6\",\n    bodyTag: \"fieldset\",\n    transitionEffect: \"fade\",\n    titleTemplate: '<span class=\"step\">#index#</span> #title#',\n    labels: {\n        finish: 'Submit'\n    },\n    onStepChanging: function (event, currentIndex, newIndex) {\n        // Allways allow previous action even if the current form is not valid!\n        if (currentIndex > newIndex) {\n            return true;\n        }\n\n        // Needed in some cases if the user went back (clean up)\n        if (currentIndex < newIndex) {\n            // To remove error styles\n            form.find(\".body:eq(\" + newIndex + \") label.error\").remove();\n            form.find(\".body:eq(\" + newIndex + \") .error\").removeClass(\"error\");\n        }\n        form.validate().settings.ignore = \":disabled,:hidden\";\n        return form.valid();\n    },\n    onFinishing: function (event, currentIndex) {\n        form.validate().settings.ignore = \":disabled\";\n        return form.valid();\n    },\n    onFinished: function (event, currentIndex) {\n        alert(\"Submitted!\");\n    }\n});\n\n// Initialize validation\n$(\".steps-validation\").validate({\n    ignore: 'input[type=hidden]', // ignore hidden fields\n    errorClass: 'danger',\n    successClass: 'success',\n    highlight: function (element, errorClass) {\n        $(element).removeClass(errorClass);\n    },\n    unhighlight: function (element, errorClass) {\n        $(element).removeClass(errorClass);\n    },\n    errorPlacement: function (error, element) {\n        error.insertAfter(element);\n    },\n    rules: {\n        email: {\n            email: true\n        }\n    }\n});\n"
  },
  {
    "path": "public/backend/js/scripts/modal/components-modal.js",
    "content": "/*=========================================================================================\n    File Name: components-modal.js\n    Description: Modals are streamlined, but flexible, dialog prompts with the minimum\n\t\t\t\trequired functionality and smart defaults.\n    ----------------------------------------------------------------------------------------\n    Item Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n    Author: Pixinvent\n    Author URL: hhttp://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n(function(window, document, $) {\n\t'use strict';\n\n     // onShow event\n    $('#onshowbtn').on('click', function() {\n        $('#onshow').on('show.bs.modal', function() {\n            alert('onShow event fired.');\n        });\n    });\n\n    // onShown event\n    $('#onshownbtn').on('click', function() {\n        $('#onshown').on('shown.bs.modal', function() {\n            alert('onShown event fired.');\n        });\n    });\n\n    // onHide event\n    $('#onhidebtn').on('click', function() {\n        $('#onhide').on('hide.bs.modal', function() {\n            alert('onHide event fired.');\n        });\n    });\n\n    // onHidden event\n    $('#onhiddenbtn').on('click', function() {\n        $('#onhidden').on('hidden.bs.modal', function() {\n            alert('onHidden event fired.');\n        });\n    });\n})(window, document, jQuery);\n"
  },
  {
    "path": "public/backend/js/scripts/navs/navs.js",
    "content": "/*=========================================================================================\n    File Name: nav.js\n    Description: Navigation available in Bootstrap share general markup and styles,\n                 from the base .nav class to the active and disabled states.\n                 Swap modifier classes to switch between each style.\n    ----------------------------------------------------------------------------------------\n    Item Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n    Author: PIXINVENT\n    Author URL: http://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n(function(window, document, $) {\n    'use strict';\n\n    var heightLeft = $('.nav-left + .tab-content').height();\n    $('ul.nav-left').height(heightLeft);\n    var heightRight = $('.nav-right + .tab-content').height();\n    $('ul.nav-right').height(heightRight);\n})(window, document, jQuery);\n"
  },
  {
    "path": "public/backend/js/scripts/pages/3-columns-left-sidebar.js",
    "content": "/*=========================================================================================\n    File Name: 3-columns-left-sidebar.js\n    Description: Invoices list datables configurations\n    ----------------------------------------------------------------------------------------\n    Item Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n    Author: Pixinvent\n    Author URL: hhttp://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n\n$(document).ready(function() {\n    /***********************************\n    *        js of small Slider        *\n    ************************************/\n\n    var sm_options = {\n        start: [30,70],\n        behaviour: 'drag',\n        connect: true,\n        range: {\n            'min': 20,\n            'max': 80\n        }\n    };\n    var smallSlider = document.getElementById('small-slider');\n    noUiSlider.create(smallSlider, sm_options);\n\n\n    /*************************************\n    *        Default Score Rating        *\n    **************************************/\n    $.fn.raty.defaults.path = '../../../app-assets/images/raty/';\n\n    $('#score-rating').raty({\n        score: 3\n    });\n\n    $(\".sidebar-sticky\").sticky();\n});\n"
  },
  {
    "path": "public/backend/js/scripts/pages/account-setting.js",
    "content": "/*=========================================================================================\n\tFile Name: account-setting.js\n\tDescription: Account setting.\n\t----------------------------------------------------------------------------------------\n\tItem Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n\tAuthor: PIXINVENT\n\tAuthor URL: http://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n\n$(document).ready(function () {\n  // language select\n  var languageselect = $(\"#languageselect2\").select2({\n    dropdownAutoWidth: true,\n    width: '100%'\n  });\n  // music select\n  var musicselect = $(\"#musicselect2\").select2({\n    dropdownAutoWidth: true,\n    width: '100%'\n  });\n  // movies select\n  var moviesselect = $(\"#moviesselect2\").select2({\n    dropdownAutoWidth: true,\n    width: '100%'\n  });\n  // birthdate date\n  $('.birthdate-picker').pickadate({\n    format: 'mmmm, d, yyyy'\n  });\n});\n"
  },
  {
    "path": "public/backend/js/scripts/pages/app-chat.js",
    "content": "(function($) {\n  \"use strict\";\n\n  // Chat user list\n  if($('.chat-application .chat-user-list').length > 0){\n    var chat_user_list = new PerfectScrollbar(\".chat-user-list\");\n  }\n\n  // Chat user profile\n  if($('.chat-application .profile-sidebar-area .scroll-area').length > 0){\n    var chat_user_list = new PerfectScrollbar(\".profile-sidebar-area .scroll-area\");\n  }\n\n  // Chat area\n  if($('.chat-application .user-chats').length > 0){\n    var chat_user = new PerfectScrollbar(\".user-chats\", {\n      wheelPropagation: false\n    });\n  }\n\n  // User profile right area\n  if($('.chat-application .user-profile-sidebar-area').length > 0){\n    var user_profile = new PerfectScrollbar(\".user-profile-sidebar-area\");\n  }\n\n  // Chat Profile sidebar toggle\n  $('.chat-application .sidebar-profile-toggle').on('click',function(){\n    $('.chat-profile-sidebar').addClass('show');\n    $('.chat-overlay').addClass('show');\n  });\n\n  // User Profile sidebar toggle\n  $('.chat-application .user-profile-toggle').on('click',function(){\n    $('.user-profile-sidebar').addClass('show');\n    $('.chat-overlay').addClass('show');\n  });\n\n  // Update status by clickin on Radio\n  $('.chat-application .user-status input:radio[name=userStatus]').on('change', function(){\n    var $className = \"avatar-status-\"+this.value;\n    $(\".header-profile-sidebar .avatar span\").removeClass();\n    $(\".sidebar-profile-toggle .avatar span\").removeClass();\n    $(\".header-profile-sidebar .avatar span\").addClass($className+\" avatar-status-lg\");\n    $(\".sidebar-profile-toggle .avatar span\").addClass($className);\n  });\n\n  // On Profile close click\n  $(\".chat-application .close-icon\").on('click',function(){\n    $('.chat-profile-sidebar').removeClass('show');\n    $('.user-profile-sidebar').removeClass('show');\n    if(!$(\".sidebar-content\").hasClass(\"show\")){\n      $('.chat-overlay').removeClass('show');\n    }\n  });\n\n  // On sidebar close click\n  $(\".chat-application .sidebar-close-icon\").on('click',function(){\n    $('.sidebar-content').removeClass('show');\n    $('.chat-overlay').removeClass('show');\n  });\n\n  // On overlay click\n  $(\".chat-application .chat-overlay\").on('click',function(){\n    $('.app-content .sidebar-content').removeClass('show');\n    $('.chat-application .chat-overlay').removeClass('show');\n    $('.chat-profile-sidebar').removeClass('show');\n    $('.user-profile-sidebar').removeClass('show');\n  });\n\n  // Add class active on click of Chat users list\n  $(\".chat-application .chat-user-list ul li\").on('click', function(){\n    if($('.chat-user-list ul li').hasClass('active')){\n      $('.chat-user-list ul li').removeClass('active');\n    }\n    $(this).addClass(\"active\");\n    $(this).find(\".badge\").remove();\n    if($('.chat-user-list ul li').hasClass('active')){\n      $('.start-chat-area').addClass('d-none');\n      $('.active-chat').removeClass('d-none');\n    }\n    else{\n      $('.start-chat-area').removeClass('d-none');\n      $('.active-chat').addClass('d-none');\n    }\n  });\n\n  // autoscroll to bottom of Chat area\n  var chatContainer = $(\".user-chats\");\n  $(\".chat-users-list-wrapper li\").on(\"click\", function () {\n    chatContainer.animate({ scrollTop: chatContainer[0].scrollHeight }, 400)\n  });\n\n  // Favorite star click\n  $(\".chat-application .favorite i\").on(\"click\", function(e) {\n    $(this).parent('.favorite').toggleClass(\"warning\");\n    e.stopPropagation();\n  });\n\n  // Main menu toggle should hide app menu\n  $('.chat-application .menu-toggle').on('click',function(e){\n    $('.app-content .sidebar-left').removeClass('show');\n    $('.chat-application .chat-overlay').removeClass('show');\n  });\n\n  // Chat sidebar toggle\n  if ($(window).width() < 992) {\n    $('.chat-application .sidebar-toggle').on('click',function(){\n      $('.app-content .sidebar-content').addClass('show');\n      $('.chat-application .chat-overlay').addClass('show');\n    });\n  }\n\n  // For chat sidebar on small screen\n  if ($(window).width() > 992) {\n    if($('.chat-application .chat-overlay').hasClass('show')){\n      $('.chat-application .chat-overlay').removeClass('show');\n    }\n  }\n\n  // Scroll Chat area\n  $(\".user-chats\").scrollTop($(\".user-chats > .chats\").height());\n\n  // Filter\n  $(\".chat-application #chat-search\").on(\"keyup\", function() {\n    var value = $(this).val().toLowerCase();\n    if(value!=\"\"){\n      $(\".chat-user-list .chat-users-list-wrapper li\").filter(function() {\n        $(this).toggle($(this).text().toLowerCase().indexOf(value) > -1);\n      });\n    }\n    else{\n      // If filter box is empty\n      $(\".chat-user-list .chat-users-list-wrapper li\").show();\n    }\n  });\n\n})(jQuery);\n\n$(window).on(\"resize\", function() {\n  // remove show classes from sidebar and overlay if size is > 992\n  if ($(window).width() > 992) {\n    if($('.chat-application .chat-overlay').hasClass('show')){\n      $('.app-content .sidebar-left').removeClass('show');\n      $('.chat-application .chat-overlay').removeClass('show');\n    }\n  }\n\n  // Chat sidebar toggle\n  if ($(window).width() < 992) {\n    if($('.chat-application .chat-profile-sidebar').hasClass('show')){\n      $('.chat-profile-sidebar').removeClass('show');\n    }\n    $('.chat-application .sidebar-toggle').on('click',function(){\n      $('.app-content .sidebar-content').addClass('show');\n      $('.chat-application .chat-overlay').addClass('show');\n    });\n  }\n});\n\n// Add message to chat\nfunction enter_chat(source) {\n   var message = $(\".message\").val();\n   if(message != \"\"){\n  var html = '<div class=\"chat-content\">' + \"<p>\" + message + \"</p>\" + \"</div>\";\n  $(\".chat:last-child .chat-body\").append(html);\n  $(\".message\").val(\"\");\n  $(\".user-chats\").scrollTop($(\".user-chats > .chats\").height());\n   }\n}\n"
  },
  {
    "path": "public/backend/js/scripts/pages/app-ecommerce-details.js",
    "content": "//  File Name: app-ecommerce-details.js\n//  Description: App Ecommerce Details js.\n//  ----------------------------------------------------------------------------------------------\n//  Item Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n//  Author: PIXINVENT\n//  Author URL: http://www.themeforest.net/user/pixinvent\n// ================================================================================================\n$(document).ready(function () {\n  var mySwiper14 = new Swiper('.swiper-responsive-breakpoints', {\n    slidesPerView: 5,\n    spaceBetween: 55,\n    // init: false,\n    navigation: {\n      nextEl: '.swiper-button-next',\n      prevEl: '.swiper-button-prev',\n    },\n    breakpoints: {\n      1600: {\n        slidesPerView: 4,\n        spaceBetween: 55,\n      },\n      1300: {\n        slidesPerView: 3,\n        spaceBetween: 55,\n      },\n      900: {\n        slidesPerView: 2,\n        spaceBetween: 55,\n      },\n      768: {\n        slidesPerView: 1,\n        spaceBetween: 55,\n      }\n    }\n  });\n  // product color options\n  $(\".product-color-options li\").on(\"click\", function () {\n    $this = $(this);\n    $this.addClass('selected').siblings().removeClass('selected');\n  })\n})\n"
  },
  {
    "path": "public/backend/js/scripts/pages/app-ecommerce-shop.js",
    "content": "/*=========================================================================================\n    File Name: app-ecommerce-shop.js\n    Description: Ecommerce Shop\n    ----------------------------------------------------------------------------------------\n    Item Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n    Author: PIXINVENT\n    Author URL: http://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n$(document).ready(function () {\n  \"use strict\";\n  // RTL Support\n  var direction = 'ltr';\n  if ($('html').data('textdirection') == 'rtl') {\n    direction = 'rtl';\n  }\n\n  var sidebarShop = $(\".sidebar-shop\"),\n    shopOverlay = $(\".shop-content-overlay\"),\n    sidebarToggler = $(\".shop-sidebar-toggler\"),\n    priceFilter = $(\".price-options\"),\n    gridViewBtn = $(\".grid-view-btn\"),\n    listViewBtn = $(\".list-view-btn\"),\n    ecommerceProducts = $(\"#ecommerce-products\"),\n    cart = $(\".cart\"),\n    wishlist = $(\".wishlist\");\n\n\n  // show sidebar\n  sidebarToggler.on(\"click\", function () {\n    sidebarShop.toggleClass(\"show\");\n    shopOverlay.toggleClass(\"show\");\n  });\n\n  // remove sidebar\n  $(\".shop-content-overlay, .sidebar-close-icon\").on(\"click\", function () {\n    sidebarShop.removeClass(\"show\");\n    shopOverlay.removeClass(\"show\");\n  })\n\n  //price slider\n  var slider = document.getElementById(\"price-slider\");\n  if (slider) {\n    noUiSlider.create(slider, {\n      start: [51, 5000],\n      direction: direction,\n      connect: true,\n      tooltips: [true, true],\n      format: wNumb({\n        decimals: 0,\n      }),\n      range: {\n        \"min\": 51,\n        \"max\": 5000\n      }\n    });\n  }\n  // for select in ecommerce header\n  if (priceFilter.length > 0) {\n    priceFilter.select2({\n      minimumResultsForSearch: -1,\n      dropdownAutoWidth: true,\n      width: '100%'\n    });\n  }\n\n  /***** CHANGE VIEW *****/\n  // Grid View\n  gridViewBtn.on(\"click\", function () {\n    ecommerceProducts.removeClass(\"list-view\").addClass(\"grid-view\");\n    listViewBtn.removeClass(\"active\");\n    gridViewBtn.addClass(\"active\");\n  });\n\n  // List View\n  listViewBtn.on(\"click\", function () {\n    ecommerceProducts.removeClass(\"grid-view\").addClass(\"list-view\");\n    gridViewBtn.removeClass(\"active\");\n    listViewBtn.addClass(\"active\");\n  });\n\n  // For View in cart\n  cart.on(\"click\", function () {\n    var $this = $(this),\n    addToCart = $this.find(\".add-to-cart\"),\n    viewInCart = $this.find(\".view-in-cart\");\n    if(addToCart.is(':visible')) {\n      addToCart.addClass(\"d-none\");\n      viewInCart.addClass(\"d-inline-block\");\n    }\n    else{\n      var href= viewInCart.attr('href');\n      window.location.href = href;\n    }\n  });\n\n  $(\".view-in-cart\").on('click', function(e){\n    e.preventDefault();\n  });\n\n  // For Wishlist Icon\n  wishlist.on(\"click\", function () {\n    var $this = $(this)\n    $this.find(\"i\").toggleClass(\"fa-heart-o fa-heart\")\n    $this.toggleClass(\"added\");\n  })\n\n  // Checkout Wizard\n  var checkoutWizard = $(\".checkout-tab-steps\"),\n    checkoutValidation = checkoutWizard.show();\n  if (checkoutWizard.length > 0) {\n    $(checkoutWizard).steps({\n      headerTag: \"h6\",\n      bodyTag: \"fieldset\",\n      transitionEffect: \"fade\",\n      titleTemplate: '<span class=\"step\">#index#</span> #title#',\n      enablePagination: false,\n      onStepChanging: function (event, currentIndex, newIndex) {\n        // allows to go back to previous step if form is\n        if (currentIndex > newIndex) {\n          return true;\n        }\n        // Needed in some cases if the user went back (clean up)\n        if (currentIndex < newIndex) {\n          // To remove error styles\n          checkoutValidation.find(\".body:eq(\" + newIndex + \") label.error\").remove();\n          checkoutValidation.find(\".body:eq(\" + newIndex + \") .error\").removeClass(\"error\");\n        }\n        // check for valid details and show notification accordingly\n        if (currentIndex === 1 && Number($(\".form-control.required\").val().length) < 1) {\n          toastr.warning('Error', 'Please Enter Valid Details', { \"positionClass\": \"toast-bottom-right\" });\n        }\n        checkoutValidation.validate().settings.ignore = \":disabled,:hidden\";\n        return checkoutValidation.valid();\n      },\n    });\n    // to move to next step on place order and save address click\n    $(\".place-order, .delivery-address\").on(\"click\", function () {\n      $(\".checkout-tab-steps\").steps(\"next\", {});\n    });\n    // check if user has entered valid cvv\n    $(\".btn-cvv\").on(\"click\", function () {\n      if ($(\".input-cvv\").val().length == 3) {\n        toastr.success('Success', 'Payment received Successfully', { \"positionClass\": \"toast-bottom-right\" });\n      }\n      else {\n        toastr.warning('Error', 'Please Enter Valid Details', { \"positionClass\": \"toast-bottom-right\" });\n      }\n    })\n  }\n\n  // checkout quantity counter\n  var quantityCounter = $(\".quantity-counter\"),\n    CounterMin = 1,\n    CounterMax = 10;\n  if (quantityCounter.length > 0) {\n    quantityCounter.TouchSpin({\n      min: CounterMin,\n      max: CounterMax\n    }).on('touchspin.on.startdownspin', function () {\n      var $this = $(this);\n      $('.bootstrap-touchspin-up').removeClass(\"disabled-max-min\");\n      if ($this.val() == 1) {\n        $(this).siblings().find('.bootstrap-touchspin-down').addClass(\"disabled-max-min\");\n      }\n    }).on('touchspin.on.startupspin', function () {\n      var $this = $(this);\n      $('.bootstrap-touchspin-down').removeClass(\"disabled-max-min\");\n      if ($this.val() == 10) {\n        $(this).siblings().find('.bootstrap-touchspin-up').addClass(\"disabled-max-min\");\n      }\n    });\n  }\n\n  // remove items from wishlist page\n  $(\".remove-wishlist , .move-cart\").on(\"click\", function () {\n    $(this).closest(\".ecommerce-card\").remove();\n  })\n})\n// on window resize hide sidebar\n$(window).on(\"resize\", function () {\n  if ($(window).width() <= 991) {\n    $(\".sidebar-shop\").removeClass(\"show\");\n    $(\".shop-content-overlay\").removeClass(\"show\");\n  }\n  else {\n    $(\".sidebar-shop\").addClass(\"show\");\n  }\n});\n"
  },
  {
    "path": "public/backend/js/scripts/pages/app-email.js",
    "content": "//  Notifications & messages scrollable\n\n$(function () {\n  \"use strict\";\n\n  var Font = Quill.import('formats/font');\n  Font.whitelist = ['sofia', 'slabo', 'roboto', 'inconsolata', 'ubuntu'];\n  Quill.register(Font, true);\n\n  // Email left Sidebar\n  if ($('.sidebar-menu-list').length > 0) {\n    var sidebar_menu_list = new PerfectScrollbar(\".sidebar-menu-list\");\n  }\n\n  // User list scroll\n  if ($('.email-user-list').length > 0) {\n    var users_list = new PerfectScrollbar(\".email-user-list\");\n  }\n\n  // Email detail section\n  if ($('.email-scroll-area').length > 0) {\n    var users_list = new PerfectScrollbar(\".email-scroll-area\");\n  }\n\n  // Modal dialog scroll\n  if ($('.modal-dialog-scrollable .modal-body').length > 0) {\n    var sidebar_menu_list = new PerfectScrollbar(\".modal-dialog-scrollable .modal-body\");\n  }\n\n  // Compose Modal - Reset Input Value on Click compose btn\n  $('.compose-btn .btn').on('click', function (e) {\n      // all input forms\n      $(\".modal .modal-body input\").val(\"\");\n      // quill editor content\n      var quill_editor = $(\".modal .modal-body .ql-editor\");\n      quill_editor[0].innerHTML = \"\";\n      // file input content\n      var file_input = $(\".modal .modal-body .custom-file .custom-file-label\");\n      file_input[0].innerHTML = \"\";\n  });\n\n  // Main menu toggle should hide app menu\n  $('.menu-toggle').on('click', function (e) {\n    $('.app-content .sidebar-left').removeClass('show');\n    $('.app-content .app-content-overlay').removeClass('show');\n  });\n\n  // On sidebar close click\n  $(\".email-application .sidebar-close-icon\").on('click', function () {\n    $('.sidebar-left').removeClass('show');\n    $('.app-content-overlay').removeClass('show');\n  });\n\n  // Email sidebar toggle\n  $('.sidebar-toggle').on('click', function (e) {\n    e.stopPropagation();\n    $('.app-content .sidebar-left').toggleClass('show');\n    $('.app-content .app-content-overlay').addClass('show');\n  });\n  $('.app-content .app-content-overlay').on('click', function (e) {\n    $('.app-content .sidebar-left').removeClass('show');\n    $('.app-content .app-content-overlay').removeClass('show');\n  });\n\n  // Email Right sidebar toggle\n  $('.email-app-list .email-user-list li').on('click', function (e) {\n    $('.app-content .email-app-details').toggleClass('show');\n  });\n\n  // Add class active on click of sidebar list\n  $(\".email-application .list-group-messages a\").on('click', function () {\n    if ($('.email-application .list-group-messages a').hasClass('active')) {\n      $('.email-application .list-group-messages a').removeClass('active');\n    }\n    $(this).addClass(\"active\");\n  });\n\n  // Email detail view back button click\n  $('.go-back').on('click', function (e) {\n    e.stopPropagation();\n    $('.app-content .email-app-details').removeClass('show');\n  });\n\n  // For app sidebar on small screen\n  if ($(window).width() > 768) {\n    if ($('.app-content .app-content-overlay').hasClass('show')) {\n      $('.app-content .app-content-overlay').removeClass('show');\n    }\n  }\n  // Favorite star click\n  $(\".email-application .favorite i\").on(\"click\", function (e) {\n    $(this).parent('.favorite').toggleClass(\"warning\");\n    e.stopPropagation();\n  });\n\n  // On checkbox click stop propogation\n  $(\".email-user-list .vs-checkbox-con input\").on(\"click\", function (e) {\n    e.stopPropagation();\n  });\n\n  // Select all checkbox\n  $(document).on(\"click\", \".email-app-list .selectAll input\", function () {\n    $(\".user-action .vs-checkbox-con input\").prop('checked', this.checked);\n  });\n\n  // Delete Mail from list\n  $(\".email-application .mail-delete\").on(\"click\", function () {\n    $(\".email-application .user-action .vs-checkbox-con input:checked\").closest(\"li\").remove();\n    $(\".email-application .selectAll input\").prop('checked', \"\");\n  });\n\n  // Mark mail unread\n  $(\".email-application .mail-unread\").on(\"click\", function () {\n    $(\".email-application .user-action .vs-checkbox-con input:checked\").closest(\"li\").removeClass(\"mail-read\");\n  });\n\n  // Filter\n  $(\".email-app-list #email-search\").on(\"keyup\", function () {\n    var value = $(this).val().toLowerCase();\n    if (value != \"\") {\n      $(\".email-user-list .users-list-wrapper li\").filter(function () {\n        $(this).toggle($(this).text().toLowerCase().indexOf(value) > -1);\n      });\n      var tbl_row = $(\".email-user-list .users-list-wrapper li:visible\").length; //here tbl_test is table name\n\n      //Check if table has row or not\n      if (tbl_row == 0) {\n        $('.email-user-list .no-results').addClass('show');\n      }\n      else {\n        if ($('.email-user-list .no-results').hasClass('show')) {\n          $('.email-user-list .no-results').removeClass('show');\n        }\n      }\n    }\n    else {\n      // If filter box is empty\n      $(\".email-user-list .users-list-wrapper li\").show();\n      if ($('.email-user-list .no-results').hasClass('show')) {\n        $('.email-user-list .no-results').removeClass('show');\n      }\n    }\n  });\n\n  // Email compose Editor\n\n  var emailEditor = new Quill('#email-container .editor', {\n    bounds: '#email-container .editor',\n    modules: {\n      'formula': true,\n      'syntax': true,\n      'toolbar': [\n        ['bold', 'italic', 'underline', 'strike', 'link', 'blockquote', 'code-block',\n          {\n            'header': '1'\n          }, {\n            'header': '2'\n          }, {\n            'list': 'ordered'\n          }, {\n            'list': 'bullet'\n          }],\n        [{\n          'font': []\n        }]\n      ],\n    },\n    placeholder: 'Message',\n    theme: 'snow'\n  });\n\n  var editors = [emailEditor];\n\n});\n\n$(window).on(\"resize\", function () {\n  // remove show classes from sidebar and overlay if size is > 992\n  if ($(window).width() > 768) {\n    if ($('.app-content .app-content-overlay').hasClass('show')) {\n      $('.app-content .sidebar-left').removeClass('show');\n      $('.app-content .app-content-overlay').removeClass('show');\n    }\n  }\n});\n\n"
  },
  {
    "path": "public/backend/js/scripts/pages/app-todo.js",
    "content": "/*=========================================================================================\n    File Name: app-todo.js\n    Description: app-todo\n    ----------------------------------------------------------------------------------------\n    Item Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n    Author: PIXINVENT\n    Author URL: http://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n\n$(function() {\n  \"use strict\";\n\n  var $curr_title, $curr_desc, $curr_info, $curr_fav, $curr_chipVal;\n\n  // --------------------------------------------\n  // Sidebar menu scrollbar\n  // --------------------------------------------\n  if($('.todo-application .sidebar-menu-list').length > 0){\n      var content = new PerfectScrollbar('.sidebar-menu-list',{\n         theme: \"dark\"\n      });\n  }\n\n  // --------------------------------------------\n  // Todo task list scrollbar\n  // --------------------------------------------\n  if($('.todo-application .todo-task-list').length > 0){\n      var sidebar_todo = new PerfectScrollbar('.todo-task-list',{\n         theme: \"dark\"\n      });\n  }\n\n\n  // --------------------------------------------\n  // Info star click\n  // --------------------------------------------\n  $(document).on(\"click\", \".todo-application .todo-item-info i\", function(e) {\n    $(this).parent('.todo-item-info').toggleClass(\"success\");\n    e.stopPropagation();\n  });\n\n\n  // --------------------------------------------\n  // Favorite star click\n  // --------------------------------------------\n  $(document).on(\"click\", \".todo-application .todo-item-favorite i\", function(e) {\n    $(this).parent('.todo-item-favorite').toggleClass(\"warning\");\n    e.stopPropagation();\n  });\n\n  // --------------------------------------------\n  // Main menu toggle should hide app menu\n  // --------------------------------------------\n  $('.menu-toggle').on('click',function(e){\n    $('.app-content .sidebar-left').removeClass('show');\n    $('.app-content .app-content-overlay').removeClass('show');\n  });\n\n  // --------------------------------------------\n  // On sidebar close click\n  // --------------------------------------------\n  $(\".todo-application .sidebar-close-icon\").on('click',function(){\n    $('.sidebar-left').removeClass('show');\n    $('.app-content-overlay').removeClass('show');\n  });\n\n  // --------------------------------------------\n  // Todo sidebar toggle\n  // --------------------------------------------\n  $('.sidebar-toggle').on('click',function(e){\n    e.stopPropagation();\n    $('.app-content .sidebar-left').toggleClass('show');\n    $('.app-content .app-content-overlay').addClass('show');\n  });\n  $('.app-content .app-content-overlay').on('click',function(e){\n    $('.app-content .sidebar-left').removeClass('show');\n    $('.app-content .app-content-overlay').removeClass('show');\n  });\n\n  // --------------------------------------------\n  // Add class active on click of sidebar filters list\n  // --------------------------------------------\n  $(\".todo-application .list-group-filters a\").on('click', function(){\n    if($('.todo-application .list-group-filters a').hasClass('active')){\n      $('.todo-application .list-group-filters a').removeClass('active');\n    }\n    $(this).addClass(\"active\");\n  });\n\n  // --------------------------------------------\n  // For chat sidebar on small screen\n  // --------------------------------------------\n  if ($(window).width() > 992) {\n      if($('.todo-application .app-content-overlay').hasClass('show')){\n          $('.todo-application .app-content-overlay').removeClass('show');\n      }\n  }\n\n  // --------------------------------------------\n  // On add new item, clear modal popup fields\n  // --------------------------------------------\n  $(\".add-task button\").on('click', function(e){\n    $('.modal .new-todo-item-title').val(\"\");\n    $('.modal .new-todo-item-desc').val(\"\");\n    $('.modal .dropdown-menu input').prop(\"checked\", false);\n    if($('.modal .todo-item-info').hasClass('success')){$('.modal .todo-item-info').removeClass('success')}\n    if($('.modal .todo-item-favorite').hasClass('warning')){$('.modal .todo-item-favorite').removeClass('warning')}\n  });\n\n\n  // --------------------------------------------\n  // Add New ToDo List Item\n  // --------------------------------------------\n\n\n  // To add new todo list item\n  $(\".add-todo-item\").on('click', function(e){\n    e.preventDefault();\n    var todoInfo = \"\",\n    todoFav = \"\",\n    todoChip = \"\";\n\n    var todoTitle = $(\".new-todo-item-title\").val();\n    var todoDesc = $(\".new-todo-item-desc\").val();\n    if($(\".modal.show .todo-item-info\").hasClass('success')){\n      todoInfo = \" success\";\n    }\n    if($(\".modal.show .todo-item-favorite\").hasClass('warning')){\n      todoFav = \" warning\";\n    }\n\n    // Chip calculation loop\n    var selected  = $('.modal .dropdown-menu input:checked');\n\n    selected.each(function(){\n      todoChip += '<div class=\"chip mb-0\">' +\n        '<div class=\"chip-body\">' +\n          '<span class=\"chip-text\" data-value=\"'+$(this).data('value')+'\"><span class=\"bullet bullet-'+$(this).data('color')+' bullet-xs\"></span> '+$(this).data('value')+'</span>' +\n        '</div>' +\n      '</div>';\n    });\n    // HTML Output\n    if(todoTitle != \"\"){\n      $(\".todo-task-list-wrapper\").append('<li class=\"todo-item\" style=\"animation-delay: 0s;\"  data-toggle=\"modal\" data-target=\"#editTaskModal\">' +\n        '<div class=\"todo-title-wrapper d-flex justify-content-between mb-50\">' +\n          '<div class=\"todo-title-area d-flex align-items-center\">' +\n            '<div class=\"title-wrapper d-flex\">'+\n              '<div class=\"vs-checkbox-con\">' +\n                  '<input type=\"checkbox\" >' +\n                  '<span class=\"vs-checkbox vs-checkbox-sm\">' +\n                    '<span class=\"vs-checkbox--check\">' +\n                      '<i class=\"vs-icon feather icon-check\"></i>' +\n                    '</span>' +\n                  '</span>' +\n              '</div>' +\n              '<h6 class=\"todo-title mt-50 mx-50\">'+ todoTitle +'</h6>' +\n            '</div>' +\n            '<div class=\"chip-wrapper\">' + todoChip + '</div>' +\n          '</div>' +\n          '<div class=\"float-right todo-item-action d-flex\">' +\n            '<a class=\"todo-item-info'+ todoInfo +'\"><i class=\"feather icon-info\"></i></a>' +\n            '<a class=\"todo-item-favorite'+ todoFav +'\"><i class=\"feather icon-star\"></i></a>' +\n            '<a class=\"todo-item-delete\"><i class=\"feather icon-trash\"></i></a>' +\n          '</div>' +\n        '</div>' +\n        '<p class=\"mb-0 todo-desc truncate\">'+ todoDesc +'</p>' +\n      '</li>');\n    }\n\n    $('#form-edit-todo .edit-todo-item-title').val(todoTitle);\n    $('#form-edit-todo .edit-todo-item-desc').val(todoDesc);\n    $('#form-edit-todo .dropdown-menu input').prop(\"checked\", false);\n    if($('#form-edit-todo .edit-todo-item-info').hasClass('success')){$('#form-edit-todo .edit-todo-item-info').addClass('success')}\n    if($('#form-edit-todo .edit-todo-item-favorite').hasClass('warning')){$('#form-edit-todo .edit-todo-item-favorite').addClass('warning')}\n  });\n\n\n  // --------------------------------------------\n  // To update todo list item\n  // --------------------------------------------\n  $(document).on('click',\".todo-task-list-wrapper .todo-item\", function(e){\n\n    // Saving all values in variable\n    $curr_title = $(this).find('.todo-title');  // Set path for Current Title, use this variable when updating title\n    $curr_desc = $(this).find('.todo-desc');  // Set path for Current Description, use this variable when updating Description\n    $curr_info = $(this).find('.todo-item-info');  // Set path for Current info, use this variable when updating info\n    $curr_fav = $(this).find('.todo-item-favorite'); // Set path for Current favorite, use this variable when updating favorite\n    $curr_chipVal = $(this).find('.chip-wrapper'); // Set path for Chips, use this variable when updating chip value\n\n    var $title = $(this).find('.todo-title').html();\n    var $desc = $(this).find('.todo-desc').html();\n    var $info = $(this).find('.todo-item-info');\n    var $fav = $(this).find('.todo-item-favorite');\n    $('#form-edit-todo .dropdown-menu input').prop(\"checked\",false);\n\n\n    // Checkbox checked as per chips\n\n    var selected  = $(this).find('.chip');\n    selected.each(function(){\n\n      var chipVal = $(this).find('.chip-text').data('value');\n      $('#form-edit-todo .dropdown-menu input[data-value=\"'+chipVal+'\"]').prop(\"checked\",true);\n    });\n\n    // apply all variable values to fields\n    $('#form-edit-todo .edit-todo-item-title').val($title);\n    $('#form-edit-todo .edit-todo-item-desc').val($desc);\n\n    if($('#form-edit-todo .todo-item-info').hasClass('success')){$('#form-edit-todo .todo-item-info').removeClass('success')}\n    if($('#form-edit-todo .edit-todo-item-favorite').hasClass('warning')){$('#form-edit-todo .edit-todo-item-favorite').removeClass('warning')}\n\n    if( $($info).hasClass('success') ) {\n      $('#form-edit-todo .todo-item-info').addClass('success');\n    }\n\n    if( $($fav).hasClass('warning') ) {\n      $('#form-edit-todo .edit-todo-item-favorite').addClass('warning');\n    }\n  });\n\n\n  // --------------------------------------------\n  // Updating Data Values to Fields\n  // --------------------------------------------\n  $('.update-todo-item').on('click', function(){\n    var $edit_title = $('#form-edit-todo .edit-todo-item-title').val();\n    var $edit_desc = $('#form-edit-todo .edit-todo-item-desc').val();\n    var $edit_info = $('#form-edit-todo .todo-item-info i');\n    var $edit_fav = $('#form-edit-todo .todo-item-favorite i');\n\n    $($curr_title).text($edit_title);\n    $($curr_desc).text($edit_desc);\n\n    if($($curr_info).hasClass('success')){$($curr_info).removeClass('success')}\n    if($($curr_fav).hasClass('warning')){$($curr_fav).removeClass('warning')}\n\n    if( $($edit_info).parent('.todo-item-info').hasClass('success')) {\n      $curr_info.addClass('success');\n    }\n\n    if( $($edit_fav).parent('.todo-item-favorite').hasClass('warning')) {\n      $curr_fav.addClass('warning');\n    }\n\n    // Chip calculation loop\n    var $edit_selected  = $('#form-edit-todo .dropdown-menu input:checked');\n    var $edit_todoChip = \"\";\n\n        $edit_selected.each(function(){\n          $edit_todoChip += '<div class=\"chip mb-0\">' +\n            '<div class=\"chip-body\">' +\n              '<span class=\"chip-text\" data-value=\"'+$(this).data('value')+'\"><span class=\"bullet bullet-'+$(this).data('color')+' bullet-xs\"></span> '+$(this).data('value')+'</span>' +\n            '</div>' +\n          '</div>';\n        });\n\n    $curr_chipVal.empty();\n\n    $($curr_chipVal).append($edit_todoChip);\n\n\n  });\n\n\n  // --------------------------------------------\n  //EVENT DELETION\n  // --------------------------------------------\n  $(document).on('click', '.todo-item-delete', function(e){\n    var item = this;\n    e.stopPropagation();\n    $(item).closest('.todo-item').remove();\n  })\n\n  // Complete task strike through\n  $(document).on('click', '.todo-item input', function(event){\n    event.stopPropagation();\n    $(this).closest('.todo-item').toggleClass(\"completed\");\n  });\n\n\n  // --------------------------------------------\n  // Filter\n  // --------------------------------------------\n  $(\"#todo-search\").on(\"keyup\", function() {\n    var value = $(this).val().toLowerCase();\n    if(value!=\"\"){\n      $(\".todo-item\").filter(function() {\n        $(this).toggle($(this).text().toLowerCase().indexOf(value) > -1);\n      });\n      var tbl_row = $(\".todo-item:visible\").length; //here tbl_test is table name\n\n      //Check if table has row or not\n      if ( tbl_row == 0 ){\n        if(!$('.no-results').hasClass('show') ){\n          $('.no-results').addClass('show');\n        }\n      }\n      else{\n        $('.no-results').removeClass('show');\n\n      }\n    }\n    else{\n      // If filter box is empty\n      $(\".todo-item\").show();\n      if($('.no-results').hasClass('show') ){\n        $('.no-results').removeClass('show');\n      }\n    }\n  });\n\n});\n\n$(window).on(\"resize\", function() {\n    // remove show classes from sidebar and overlay if size is > 992\n    if ($(window).width() > 992) {\n        if($('.app-content .app-content-overlay').hasClass('show')){\n            $('.app-content .sidebar-left').removeClass('show');\n            $('.app-content .app-content-overlay').removeClass('show');\n        }\n    }\n});\n"
  },
  {
    "path": "public/backend/js/scripts/pages/app-user.js",
    "content": "/*=========================================================================================\n    File Name: app-user.js\n    Description: User page\n    --------------------------------------------------------------------------------------\n    Item Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n    Author: PIXINVENT\n    Author URL: http://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n$(document).ready(function () {\n\n  var isRtl;\n  if ( $('html').attr('data-textdirection') == 'rtl' ) {\n    isRtl = true;\n  } else {\n    isRtl = false;\n  }\n\n  //  Rendering badge in status column\n  var customBadgeHTML = function (params) {\n    var color = \"\";\n    if (params.value == \"active\") {\n      color = \"success\"\n      return \"<div class='badge badge-pill badge-light-\" + color + \"' >\" + params.value + \"</div>\"\n    } else if (params.value == \"blocked\") {\n      color = \"danger\";\n      return \"<div class='badge badge-pill badge-light-\" + color + \"' >\" + params.value + \"</div>\"\n    } else if (params.value == \"deactivated\") {\n      color = \"warning\";\n      return \"<div class='badge badge-pill badge-light-\" + color + \"' >\" + params.value + \"</div>\"\n    }\n  }\n\n  //  Rendering bullet in verified column\n  var customBulletHTML = function (params) {\n    var color = \"\";\n    if (params.value == true) {\n      color = \"success\"\n      return \"<div class='bullet bullet-sm bullet-\" + color + \"' >\" + \"</div>\"\n    } else if (params.value == false) {\n      color = \"secondary\";\n      return \"<div class='bullet bullet-sm bullet-\" + color + \"' >\" + \"</div>\"\n    }\n  }\n\n  // Renering Icons in Actions column\n  var customIconsHTML = function (params) {\n    var usersIcons = document.createElement(\"span\");\n    var editIconHTML = \"<a href='app-user-edit.html'><i class= 'users-edit-icon feather icon-edit-1 mr-50'></i></a>\"\n    var deleteIconHTML = document.createElement('i');\n    var attr = document.createAttribute(\"class\")\n    attr.value = \"users-delete-icon feather icon-trash-2\"\n    deleteIconHTML.setAttributeNode(attr);\n    // selected row delete functionality\n    deleteIconHTML.addEventListener(\"click\", function () {\n      deleteArr = [\n        params.data\n      ];\n      // var selectedData = gridOptions.api.getSelectedRows();\n      gridOptions.api.updateRowData({\n        remove: deleteArr\n      });\n    });\n    usersIcons.appendChild($.parseHTML(editIconHTML)[0]);\n    usersIcons.appendChild(deleteIconHTML);\n    return usersIcons\n  }\n\n  //  Rendering avatar in username column\n  var customAvatarHTML = function (params) {\n    return \"<span class='avatar'><img src='\" + params.data.avatar + \"' height='32' width='32'></span>\" + params.value\n  }\n\n  // ag-grid\n  /*** COLUMN DEFINE ***/\n\n  var columnDefs = [{\n      headerName: 'ID',\n      field: 'id',\n      width: 125,\n      filter: true,\n      checkboxSelection: true,\n      headerCheckboxSelectionFilteredOnly: true,\n      headerCheckboxSelection: true,\n    },\n    {\n      headerName: 'Username',\n      field: 'username',\n      filter: true,\n      width: 175,\n      cellRenderer: customAvatarHTML,\n    },\n    {\n      headerName: 'Email',\n      field: 'email',\n      filter: true,\n      width: 225,\n    },\n    {\n      headerName: 'Name',\n      field: 'name',\n      filter: true,\n      width: 200,\n    },\n    {\n      headerName: 'Country',\n      field: 'country',\n      filter: true,\n      width: 150,\n    },\n    {\n      headerName: 'Role',\n      field: 'role',\n      filter: true,\n      width: 150,\n    },\n    {\n      headerName: 'Status',\n      field: 'status',\n      filter: true,\n      width: 150,\n      cellRenderer: customBadgeHTML,\n      cellStyle: {\n        \"text-align\": \"center\"\n      }\n    },\n    {\n      headerName: 'Verified',\n      field: 'is_verified',\n      filter: true,\n      width: 125,\n      cellRenderer: customBulletHTML,\n      cellStyle: {\n        \"text-align\": \"center\"\n      }\n    },\n    {\n      headerName: 'Department',\n      field: 'department',\n      filter: true,\n      width: 150,\n    },\n    {\n      headerName: 'Actions',\n      field: 'transactions',\n      width: 150,\n      cellRenderer: customIconsHTML,\n    }\n  ];\n\n  /*** GRID OPTIONS ***/\n  var gridOptions = {\n    defaultColDef: {\n      sortable: true\n    },\n    enableRtl: isRtl,\n    columnDefs: columnDefs,\n    rowSelection: \"multiple\",\n    floatingFilter: true,\n    filter: true,\n    pagination: true,\n    paginationPageSize: 20,\n    pivotPanelShow: \"always\",\n    colResizeDefault: \"shift\",\n    animateRows: true,\n    resizable: true\n  };\n  if (document.getElementById(\"myGrid\")) {\n    /*** DEFINED TABLE VARIABLE ***/\n    var gridTable = document.getElementById(\"myGrid\");\n\n    /*** GET TABLE DATA FROM URL ***/\n    agGrid\n      .simpleHttpRequest({\n        url: \"../../../app-assets/data/users-list.json\"\n      })\n      .then(function (data) {\n        gridOptions.api.setRowData(data);\n      });\n\n    /*** FILTER TABLE ***/\n    function updateSearchQuery(val) {\n      gridOptions.api.setQuickFilter(val);\n    }\n\n    $(\".ag-grid-filter\").on(\"keyup\", function () {\n      updateSearchQuery($(this).val());\n    });\n\n    /*** CHANGE DATA PER PAGE ***/\n    function changePageSize(value) {\n      gridOptions.api.paginationSetPageSize(Number(value));\n    }\n\n    $(\".sort-dropdown .dropdown-item\").on(\"click\", function () {\n      var $this = $(this);\n      changePageSize($this.text());\n      $(\".filter-btn\").text(\"1 - \" + $this.text() + \" of 50\");\n    });\n\n    /*** EXPORT AS CSV BTN ***/\n    $(\".ag-grid-export-btn\").on(\"click\", function (params) {\n      gridOptions.api.exportDataAsCsv();\n    });\n\n    //  filter data function\n    var filterData = function agSetColumnFilter(column, val) {\n      var filter = gridOptions.api.getFilterInstance(column)\n      var modelObj = null\n      if (val !== \"all\") {\n        modelObj = {\n          type: \"equals\",\n          filter: val\n        }\n      }\n      filter.setModel(modelObj)\n      gridOptions.api.onFilterChanged()\n    }\n    //  filter inside role\n    $(\"#users-list-role\").on(\"change\", function () {\n      var usersListRole = $(\"#users-list-role\").val();\n      filterData(\"role\", usersListRole)\n    });\n    //  filter inside verified\n    $(\"#users-list-verified\").on(\"change\", function () {\n      var usersListVerified = $(\"#users-list-verified\").val();\n      filterData(\"is_verified\", usersListVerified)\n    });\n    //  filter inside status\n    $(\"#users-list-status\").on(\"change\", function () {\n      var usersListStatus = $(\"#users-list-status\").val();\n      filterData(\"status\", usersListStatus)\n    });\n    //  filter inside department\n    $(\"#users-list-department\").on(\"change\", function () {\n      var usersListDepartment = $(\"#users-list-department\").val();\n      filterData(\"department\", usersListDepartment)\n    });\n    // filter reset\n    $(\".users-data-filter\").click(function () {\n      $('#users-list-role').prop('selectedIndex', 0);\n      $('#users-list-role').change();\n      $('#users-list-status').prop('selectedIndex', 0);\n      $('#users-list-status').change();\n      $('#users-list-verified').prop('selectedIndex', 0);\n      $('#users-list-verified').change();\n      $('#users-list-department').prop('selectedIndex', 0);\n      $('#users-list-department').change();\n    });\n\n    /*** INIT TABLE ***/\n    new agGrid.Grid(gridTable, gridOptions);\n  }\n  // users language select\n  if ($(\"#users-language-select2\").length > 0) {\n    $(\"#users-language-select2\").select2({\n      dropdownAutoWidth: true,\n      width: '100%'\n    });\n  }\n  // users music select\n  if ($(\"#users-music-select2\").length > 0) {\n    $(\"#users-music-select2\").select2({\n      dropdownAutoWidth: true,\n      width: '100%'\n    });\n  }\n  // users movies select\n  if ($(\"#users-movies-select2\").length > 0) {\n    $(\"#users-movies-select2\").select2({\n      dropdownAutoWidth: true,\n      width: '100%'\n    });\n  }\n  // users birthdate date\n  if ($(\".birthdate-picker\").length > 0) {\n    $('.birthdate-picker').pickadate({\n      format: 'mmmm, d, yyyy'\n    });\n  }\n  // Input, Select, Textarea validations except submit button validation initialization\n  if ($(\".users-edit\").length > 0) {\n    $(\"input,select,textarea\").not(\"[type=submit]\").jqBootstrapValidation();\n  }\n});\n"
  },
  {
    "path": "public/backend/js/scripts/pages/bootstrap-toast.js",
    "content": "$('.toast-toggler').on('click', function () {\n  $(this).next('.toast').prependTo('.toast-bs-container .toast-position').toast('show')\n\n  // if ($('.toast-bs-container .toast-position .toast').hasClass('hide')) {\n  //   $('.toast-bs-container .toast-position .toast').toast('show')\n  // }\n});\n\n$('.placement').on('click', function () {\n  $('.toast-placement').toast('show');\n  $('.toast-placement .toast').toast('show');\n});\n\n"
  },
  {
    "path": "public/backend/js/scripts/pages/coming-soon.js",
    "content": "/*=========================================================================================\n    File Name: page-coming-soon.js\n    Description: Coming Soon\n    ----------------------------------------------------------------------------------------\n    Item Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n    Author: PIXINVENT\n    Author URL: http://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n\n/*******************************\n*       js of Countdown        *\n********************************/\n\n$(document).ready(function() {\n\n  var todayDate = new Date();\n  var releaseDate = new Date(todayDate.setDate(todayDate.getDate()+5));\n\n  var dd = releaseDate.getDate();\n  var mm = releaseDate.getMonth() + 1;\n  var yy = releaseDate.getFullYear();\n  var releaseDate = yy + \"/\" + mm + \"/\" + dd;\n\n\n  $('#clockFlat').countdown(releaseDate).on('update.countdown', function(event) {\n    var $this = $(this).html(event.strftime('<div class=\"clockCard px-1\"> <span>%d</span> <br> <p class=\"bg-amber clockFormat lead px-1 black\"> Day%!d </p> </div>'\n      + '<div class=\"clockCard px-1\"> <span>%H</span> <br> <p class=\"bg-amber clockFormat lead px-1 black\"> Hour%!H </p> </div>'\n      + '<div class=\"clockCard px-1\"> <span>%M</span> <br> <p class=\"bg-amber clockFormat lead px-1 black\"> Minute%!M </p> </div>'\n      + '<div class=\"clockCard px-1\"> <span>%S</span> <br> <p class=\"bg-amber clockFormat lead px-1 black\"> Second%!S </p> </div>'))\n  });\n\n\n});\n"
  },
  {
    "path": "public/backend/js/scripts/pages/content-sidebar.js",
    "content": "/*=========================================================================================\n    File Name: content-sidebar.js\n    Description: Invoices list datables configurations\n    ----------------------------------------------------------------------------------------\n    Item Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n    Author: PIXINVENT\n    Author URL: http://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n\n$(document).ready(function() {\n    /***********************************\n    *        js of small Slider        *\n    ************************************/\n\n    var sm_options = {\n        start: [30,70],\n        behaviour: 'drag',\n        connect: true,\n        range: {\n            'min': 20,\n            'max': 80\n        }\n    };\n    var smallSlider = document.getElementById('small-slider');\n    noUiSlider.create(smallSlider, sm_options);\n\n\n    /*************************************\n    *        Default Score Rating        *\n    **************************************/\n    $.fn.raty.defaults.path = '../../../app-assets/images/raty/';\n\n    $('#score-rating').raty({\n        score: 3\n    });\n\n    if($(\".sidebar-sticky\").length){\n        var headerNavbarHeight,\n            footerNavbarHeight;\n\n        // Header & Footer offset only for right & left sticky sidebar\n        if($(\"body\").hasClass('content-right-sidebar') || $(\"body\").hasClass('content-left-sidebar')){\n            headerNavbarHeight = $('.header-navbar').height();\n            footerNavbarHeight = $('footer.footer').height();\n        }\n        // Header & Footer offset with padding for detached right & left dsticky sidebar\n        else{\n            headerNavbarHeight = $('.header-navbar').height()+24;\n            footerNavbarHeight = $('footer.footer').height()+10;\n        }\n\n        $(\".sidebar-sticky\").sticky({\n            topSpacing: headerNavbarHeight,\n            bottomSpacing: footerNavbarHeight\n        });\n\n    }\n});\n"
  },
  {
    "path": "public/backend/js/scripts/pages/dashboard-analytics.js",
    "content": "/*=========================================================================================\n    File Name: dashboard-analytics.js\n    Description: dashboard analytics page content with Apexchart Examples\n    ----------------------------------------------------------------------------------------\n    Item Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n    Author: PIXINVENT\n    Author URL: http://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n\n$(window).on(\"load\", function () {\n\n  var $primary = '#7367F0';\n  var $danger = '#EA5455';\n  var $warning = '#FF9F43';\n  var $info = '#0DCCE1';\n  var $primary_light = '#8F80F9';\n  var $warning_light = '#FFC085';\n  var $danger_light = '#f29292';\n  var $info_light = '#1edec5';\n  var $strok_color = '#b9c3cd';\n  var $label_color = '#e7eef7';\n  var $white = '#fff';\n\n\n  // Subscribers Gained Chart starts //\n  // ----------------------------------\n\n  var gainedChartoptions = {\n    chart: {\n      height: 100,\n      type: 'area',\n      toolbar: {\n        show: false,\n      },\n      sparkline: {\n        enabled: true\n      },\n      grid: {\n        show: false,\n        padding: {\n          left: 0,\n          right: 0\n        }\n      },\n    },\n    colors: [$primary],\n    dataLabels: {\n      enabled: false\n    },\n    stroke: {\n      curve: 'smooth',\n      width: 2.5\n    },\n    fill: {\n      type: 'gradient',\n      gradient: {\n        shadeIntensity: 0.9,\n        opacityFrom: 0.7,\n        opacityTo: 0.5,\n        stops: [0, 80, 100]\n      }\n    },\n    series: [{\n      name: 'Subscribers',\n      data: [28, 40, 36, 52, 38, 60, 55]\n    }],\n\n    xaxis: {\n      labels: {\n        show: false,\n      },\n      axisBorder: {\n        show: false,\n      }\n    },\n    yaxis: [{\n      y: 0,\n      offsetX: 0,\n      offsetY: 0,\n      padding: { left: 0, right: 0 },\n    }],\n    tooltip: {\n      x: { show: false }\n    },\n  }\n\n  var gainedChart = new ApexCharts(\n    document.querySelector(\"#subscribe-gain-chart\"),\n    gainedChartoptions\n  );\n\n  gainedChart.render();\n\n  // Subscribers Gained Chart ends //\n\n\n\n  // Orders Received Chart starts //\n  // ----------------------------------\n\n  var orderChartoptions = {\n    chart: {\n      height: 100,\n      type: 'area',\n      toolbar: {\n        show: false,\n      },\n      sparkline: {\n        enabled: true\n      },\n      grid: {\n        show: false,\n        padding: {\n          left: 0,\n          right: 0\n        }\n      },\n    },\n    colors: [$warning],\n    dataLabels: {\n      enabled: false\n    },\n    stroke: {\n      curve: 'smooth',\n      width: 2.5\n    },\n    fill: {\n      type: 'gradient',\n      gradient: {\n        shadeIntensity: 0.9,\n        opacityFrom: 0.7,\n        opacityTo: 0.5,\n        stops: [0, 80, 100]\n      }\n    },\n    series: [{\n      name: 'Orders',\n      data: [10, 15, 8, 15, 7, 12, 8]\n    }],\n\n    xaxis: {\n      labels: {\n        show: false,\n      },\n      axisBorder: {\n        show: false,\n      }\n    },\n    yaxis: [{\n      y: 0,\n      offsetX: 0,\n      offsetY: 0,\n      padding: { left: 0, right: 0 },\n    }],\n    tooltip: {\n      x: { show: false }\n    },\n  }\n\n  var orderChart = new ApexCharts(\n    document.querySelector(\"#orders-received-chart\"),\n    orderChartoptions\n  );\n\n  orderChart.render();\n\n  // Orders Received Chart ends //\n\n\n\n  // Avg Session Chart Starts\n  // ----------------------------------\n\n  var sessionChartoptions = {\n    chart: {\n      type: 'bar',\n      height: 200,\n      sparkline: { enabled: true },\n      toolbar: { show: false },\n    },\n    states: {\n      hover: {\n        filter: 'none'\n      }\n    },\n    colors: [$label_color, $label_color, $primary, $label_color, $label_color, $label_color],\n    series: [{\n      name: 'Sessions',\n      data: [75, 125, 225, 175, 125, 75, 25]\n    }],\n    grid: {\n      show: false,\n      padding: {\n        left: 0,\n        right: 0\n      }\n    },\n\n    plotOptions: {\n      bar: {\n        columnWidth: '45%',\n        distributed: true,\n        endingShape: 'rounded'\n      }\n    },\n    tooltip: {\n      x: { show: false }\n    },\n    xaxis: {\n      type: 'numeric',\n    }\n  }\n\n  var sessionChart = new ApexCharts(\n    document.querySelector(\"#avg-session-chart\"),\n    sessionChartoptions\n  );\n\n  sessionChart.render();\n\n  // Avg Session Chart ends //\n\n\n  // Support Tracker Chart starts\n  // -----------------------------\n\n  var supportChartoptions = {\n    chart: {\n      height: 270,\n      type: 'radialBar',\n    },\n    plotOptions: {\n      radialBar: {\n        size: 150,\n        startAngle: -150,\n        endAngle: 150,\n        offsetY: 20,\n        hollow: {\n          size: '65%',\n        },\n        track: {\n          background: $white,\n          strokeWidth: '100%',\n\n        },\n        dataLabels: {\n          value: {\n            offsetY: 30,\n            color: '#99a2ac',\n            fontSize: '2rem'\n          }\n        }\n      },\n    },\n    colors: [$danger],\n    fill: {\n      type: 'gradient',\n      gradient: {\n        // enabled: true,\n        shade: 'dark',\n        type: 'horizontal',\n        shadeIntensity: 0.5,\n        gradientToColors: [$primary],\n        inverseColors: true,\n        opacityFrom: 1,\n        opacityTo: 1,\n        stops: [0, 100]\n      },\n    },\n    stroke: {\n      dashArray: 8\n    },\n    series: [83],\n    labels: ['Completed Tickets'],\n\n  }\n\n  var supportChart = new ApexCharts(\n    document.querySelector(\"#support-tracker-chart\"),\n    supportChartoptions\n  );\n\n  supportChart.render();\n\n  // Support Tracker Chart ends\n\n\n  // Product Order Chart starts\n  // -----------------------------\n\n  var productChartoptions = {\n    chart: {\n      height: 325,\n      type: 'radialBar',\n    },\n    colors: [$primary, $warning, $danger],\n    fill: {\n      type: 'gradient',\n      gradient: {\n        // enabled: true,\n        shade: 'dark',\n        type: 'vertical',\n        shadeIntensity: 0.5,\n        gradientToColors: [$primary_light, $warning_light, $danger_light],\n        inverseColors: false,\n        opacityFrom: 1,\n        opacityTo: 1,\n        stops: [0, 100]\n      },\n    },\n    stroke: {\n      lineCap: 'round'\n    },\n    plotOptions: {\n      radialBar: {\n        size: 165,\n        hollow: {\n          size: '20%'\n        },\n        track: {\n          strokeWidth: '100%',\n          margin: 15,\n        },\n        dataLabels: {\n          name: {\n            fontSize: '18px',\n          },\n          value: {\n            fontSize: '16px',\n          },\n          total: {\n            show: true,\n            label: 'Total',\n\n            formatter: function (w) {\n              // By default this function returns the average of all series. The below is just an example to show the use of custom formatter function\n              return 42459\n            }\n          }\n        }\n      }\n    },\n    series: [70, 52, 26],\n    labels: ['Finished', 'Pending', 'Rejected'],\n\n  }\n\n  var productChart = new ApexCharts(\n    document.querySelector(\"#product-order-chart\"),\n    productChartoptions\n  );\n\n  productChart.render();\n\n  // Product Order Chart ends //\n\n\n  // Sales Chart starts\n  // -----------------------------\n\n  var salesChartoptions = {\n    chart: {\n      height: 400,\n      type: 'radar',\n      dropShadow: {\n        enabled: true,\n        blur: 8,\n        left: 1,\n        top: 1,\n        opacity: 0.2\n      },\n      toolbar: {\n        show: false\n      },\n    },\n    toolbar: { show: false },\n    series: [{\n      name: 'Sales',\n      data: [90, 50, 86, 40, 100, 20],\n    }, {\n      name: 'Visit',\n      data: [70, 75, 70, 76, 20, 85],\n    }],\n    stroke: {\n      width: 0\n    },\n    colors: [$primary, $info],\n    plotOptions: {\n      radar: {\n        polygons: {\n          strokeColors: ['#e8e8e8', 'transparent', 'transparent', 'transparent', 'transparent', 'transparent'],\n          connectorColors: 'transparent'\n        }\n      }\n    },\n    fill: {\n      type: 'gradient',\n      gradient: {\n        shade: 'dark',\n        gradientToColors: ['#9f8ed7', $info_light],\n        shadeIntensity: 1,\n        type: 'horizontal',\n        opacityFrom: 1,\n        opacityTo: 1,\n        stops: [0, 100, 100, 100]\n      },\n    },\n    markers: {\n      size: 0,\n    },\n    legend: {\n      show: true,\n      position: 'top',\n      horizontalAlign: 'left',\n      fontSize: '16px',\n      markers: {\n        width: 10,\n        height: 10,\n      }\n    },\n    labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun'],\n    dataLabels: {\n      style: {\n        colors: [$strok_color, $strok_color, $strok_color, $strok_color, $strok_color, $strok_color]\n      }\n    },\n    yaxis: {\n      show: false,\n    },\n    grid: {\n      show: false,\n    },\n\n  }\n\n  var salesChart = new ApexCharts(\n    document.querySelector(\"#sales-chart\"),\n    salesChartoptions\n  );\n\n  salesChart.render();\n\n  // Sales Chart ends //\n\n  /***** TOUR ******/\n  var tour = new Shepherd.Tour({\n    classes: 'shadow-md bg-purple-dark',\n    scrollTo: true\n  })\n\n  // tour steps\n  tour.addStep('step-1', {\n    text: 'Toggle Collapse Sidebar.',\n    attachTo: '.modern-nav-toggle .collapse-toggle-icon bottom',\n    buttons: [\n\n      {\n        text: \"Skip\",\n        action: tour.complete\n      },\n      {\n        text: 'Next',\n        action: tour.next\n      },\n    ]\n  });\n\n  tour.addStep('step-2', {\n    text: 'Create your own bookmarks. You can also re-arrange them using drag & drop.',\n    attachTo: '.bookmark-icons .icon-mail bottom',\n    buttons: [\n\n      {\n        text: \"Skip\",\n        action: tour.complete\n      },\n\n      {\n        text: \"previous\",\n        action: tour.back\n      },\n      {\n        text: 'Next',\n        action: tour.next\n      },\n    ]\n  });\n\n  tour.addStep('step-3', {\n    text: 'You can change language from here.',\n    attachTo: '.dropdown-language .flag-icon bottom',\n    buttons: [\n\n      {\n        text: \"Skip\",\n        action: tour.complete\n      },\n\n      {\n        text: \"previous\",\n        action: tour.back\n      },\n      {\n        text: 'Next',\n        action: tour.next\n      },\n    ]\n  });\n\n  tour.addStep('step-4', {\n    text: 'Try fuzzy search to visit pages in flash.',\n    attachTo: '.nav-link-search .icon-search bottom',\n    buttons: [\n\n      {\n        text: \"Skip\",\n        action: tour.complete\n      },\n\n      {\n        text: \"previous\",\n        action: tour.back\n      },\n      {\n        text: 'Next',\n        action: tour.next\n      },\n    ]\n  });\n\n  tour.addStep('step-5', {\n    text: 'Buy this awesomeness at affordable price!',\n    attachTo: '.buy-now bottom',\n    buttons: [\n\n      {\n        text: \"previous\",\n        action: tour.back\n      },\n\n      {\n        text: \"Finish\",\n        action: tour.complete\n      },\n    ]\n  });\n\n  if ($(window).width() > 1200 && !$(\"body\").hasClass(\"menu-collapsed\")) {\n    tour.start()\n  }\n  else {\n    tour.cancel()\n  }\n  if($(\"body\").hasClass(\"horizontal-menu\")){\n    tour.cancel()\n  }\n  $(window).on(\"resize\", function () {\n    tour.cancel()\n  })\n\n});\n"
  },
  {
    "path": "public/backend/js/scripts/pages/dashboard-ecommerce.js",
    "content": "/*=========================================================================================\n    File Name: dashboard-ecommerce.js\n    Description: dashboard ecommerce page content with Apexchart Examples\n    ----------------------------------------------------------------------------------------\n    Item Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n    Author: PIXINVENT\n    Author URL: http://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n\n$(window).on(\"load\", function () {\n\n  var $primary = '#7367F0';\n  var $success = '#28C76F';\n  var $danger = '#EA5455';\n  var $warning = '#FF9F43';\n  var $info = '#00cfe8';\n  var $primary_light = '#A9A2F6';\n  var $danger_light = '#f29292';\n  var $success_light = '#55DD92';\n  var $warning_light = '#ffc085';\n  var $info_light = '#1fcadb';\n  var $strok_color = '#b9c3cd';\n  var $label_color = '#e7e7e7';\n  var $white = '#fff';\n\n\n  // Line Area Chart - 1\n  // ----------------------------------\n\n  var gainedlineChartoptions = {\n    chart: {\n      height: 100,\n      type: 'area',\n      toolbar: {\n        show: false,\n      },\n      sparkline: {\n        enabled: true\n      },\n      grid: {\n        show: false,\n        padding: {\n          left: 0,\n          right: 0\n        }\n      },\n    },\n    colors: [$primary],\n    dataLabels: {\n      enabled: false\n    },\n    stroke: {\n      curve: 'smooth',\n      width: 2.5\n    },\n    fill: {\n      type: 'gradient',\n      gradient: {\n        shadeIntensity: 0.9,\n        opacityFrom: 0.7,\n        opacityTo: 0.5,\n        stops: [0, 80, 100]\n      }\n    },\n    series: [{\n      name: 'Subscribers',\n      data: [28, 40, 36, 52, 38, 60, 55]\n    }],\n\n    xaxis: {\n      labels: {\n        show: false,\n      },\n      axisBorder: {\n        show: false,\n      }\n    },\n    yaxis: [{\n      y: 0,\n      offsetX: 0,\n      offsetY: 0,\n      padding: { left: 0, right: 0 },\n    }],\n    tooltip: {\n      x: { show: false }\n    },\n  }\n\n  var gainedlineChart = new ApexCharts(\n    document.querySelector(\"#line-area-chart-1\"),\n    gainedlineChartoptions\n  );\n\n  gainedlineChart.render();\n\n\n\n  // Line Area Chart - 2\n  // ----------------------------------\n\n  var revenuelineChartoptions = {\n    chart: {\n      height: 100,\n      type: 'area',\n      toolbar: {\n        show: false,\n      },\n      sparkline: {\n        enabled: true\n      },\n      grid: {\n        show: false,\n        padding: {\n          left: 0,\n          right: 0\n        }\n      },\n    },\n    colors: [$success],\n    dataLabels: {\n      enabled: false\n    },\n    stroke: {\n      curve: 'smooth',\n      width: 2.5\n    },\n    fill: {\n      type: 'gradient',\n      gradient: {\n        shadeIntensity: 0.9,\n        opacityFrom: 0.7,\n        opacityTo: 0.5,\n        stops: [0, 80, 100]\n      }\n    },\n    series: [{\n      name: 'Revenue',\n      data: [350, 275, 400, 300, 350, 300, 450]\n    }],\n\n    xaxis: {\n      labels: {\n        show: false,\n      },\n      axisBorder: {\n        show: false,\n      }\n    },\n    yaxis: [{\n      y: 0,\n      offsetX: 0,\n      offsetY: 0,\n      padding: { left: 0, right: 0 },\n    }],\n    tooltip: {\n      x: { show: false }\n    },\n  }\n\n  var revenuelineChart = new ApexCharts(\n    document.querySelector(\"#line-area-chart-2\"),\n    revenuelineChartoptions\n  );\n\n  revenuelineChart.render();\n\n\n  // Line Area Chart - 3\n  // ----------------------------------\n\n  var saleslineChartoptions = {\n    chart: {\n      height: 100,\n      type: 'area',\n      toolbar: {\n        show: false,\n      },\n      sparkline: {\n        enabled: true\n      },\n      grid: {\n        show: false,\n        padding: {\n          left: 0,\n          right: 0\n        }\n      },\n    },\n    colors: [$danger],\n    dataLabels: {\n      enabled: false\n    },\n    stroke: {\n      curve: 'smooth',\n      width: 2.5\n    },\n    fill: {\n      type: 'gradient',\n      gradient: {\n        shadeIntensity: 0.9,\n        opacityFrom: 0.7,\n        opacityTo: 0.5,\n        stops: [0, 80, 100]\n      }\n    },\n    series: [{\n      name: 'Sales',\n      data: [10, 15, 7, 12, 3, 16]\n    }],\n\n    xaxis: {\n      labels: {\n        show: false,\n      },\n      axisBorder: {\n        show: false,\n      }\n    },\n    yaxis: [{\n      y: 0,\n      offsetX: 0,\n      offsetY: 0,\n      padding: { left: 0, right: 0 },\n    }],\n    tooltip: {\n      x: { show: false }\n    },\n  }\n\n  var saleslineChart = new ApexCharts(\n    document.querySelector(\"#line-area-chart-3\"),\n    saleslineChartoptions\n  );\n\n  saleslineChart.render();\n\n  // Line Area Chart - 4\n  // ----------------------------------\n\n  var orderlineChartoptions = {\n    chart: {\n      height: 100,\n      type: 'area',\n      toolbar: {\n        show: false,\n      },\n      sparkline: {\n        enabled: true\n      },\n      grid: {\n        show: false,\n        padding: {\n          left: 0,\n          right: 0\n        }\n      },\n    },\n    colors: [$warning],\n    dataLabels: {\n      enabled: false\n    },\n    stroke: {\n      curve: 'smooth',\n      width: 2.5\n    },\n    fill: {\n      type: 'gradient',\n      gradient: {\n        shadeIntensity: 0.9,\n        opacityFrom: 0.7,\n        opacityTo: 0.5,\n        stops: [0, 80, 100]\n      }\n    },\n    series: [{\n      name: 'Orders',\n      data: [10, 15, 8, 15, 7, 12, 8]\n    }],\n\n    xaxis: {\n      labels: {\n        show: false,\n      },\n      axisBorder: {\n        show: false,\n      }\n    },\n    yaxis: [{\n      y: 0,\n      offsetX: 0,\n      offsetY: 0,\n      padding: { left: 0, right: 0 },\n    }],\n    tooltip: {\n      x: { show: false }\n    },\n  }\n\n  var orderlineChart = new ApexCharts(\n    document.querySelector(\"#line-area-chart-4\"),\n    orderlineChartoptions\n  );\n\n  orderlineChart.render();\n\n  // revenue-chart Chart\n  // -----------------------------\n\n  var revenueChartoptions = {\n    chart: {\n      height: 270,\n      toolbar: { show: false },\n      type: 'line',\n    },\n    stroke: {\n      curve: 'smooth',\n      dashArray: [0, 8],\n      width: [4, 2],\n    },\n    grid: {\n      borderColor: $label_color,\n    },\n    legend: {\n      show: false,\n    },\n    colors: [$danger_light, $strok_color],\n\n    fill: {\n      type: 'gradient',\n      gradient: {\n        shade: 'dark',\n        inverseColors: false,\n        gradientToColors: [$primary, $strok_color],\n        shadeIntensity: 1,\n        type: 'horizontal',\n        opacityFrom: 1,\n        opacityTo: 1,\n        stops: [0, 100, 100, 100]\n      },\n    },\n    markers: {\n      size: 0,\n      hover: {\n        size: 5\n      }\n    },\n    xaxis: {\n      labels: {\n        style: {\n          colors: $strok_color,\n        }\n      },\n      axisTicks: {\n        show: false,\n      },\n      categories: ['01', '05', '09', '13', '17', '21', '26', '31'],\n      axisBorder: {\n        show: false,\n      },\n      tickPlacement: 'on',\n    },\n    yaxis: {\n      tickAmount: 5,\n      labels: {\n        style: {\n          color: $strok_color,\n        },\n        formatter: function (val) {\n          return val > 999 ? (val / 1000).toFixed(1) + 'k' : val;\n        }\n      }\n    },\n    tooltip: {\n      x: { show: false }\n    },\n    series: [{\n      name: \"This Month\",\n      data: [45000, 47000, 44800, 47500, 45500, 48000, 46500, 48600]\n    },\n    {\n      name: \"Last Month\",\n      data: [46000, 48000, 45500, 46600, 44500, 46500, 45000, 47000]\n    }\n    ],\n\n  }\n\n  var revenueChart = new ApexCharts(\n    document.querySelector(\"#revenue-chart\"),\n    revenueChartoptions\n  );\n\n  revenueChart.render();\n\n\n  // Goal Overview  Chart\n  // -----------------------------\n\n  var goalChartoptions = {\n    chart: {\n      height: 250,\n      type: 'radialBar',\n      sparkline: {\n        enabled: true,\n      },\n      dropShadow: {\n        enabled: true,\n        blur: 3,\n        left: 1,\n        top: 1,\n        opacity: 0.1\n      },\n    },\n    colors: [$success],\n    plotOptions: {\n      radialBar: {\n        size: 110,\n        startAngle: -150,\n        endAngle: 150,\n        hollow: {\n          size: '77%',\n        },\n        track: {\n          background: $strok_color,\n          strokeWidth: '50%',\n        },\n        dataLabels: {\n          name: {\n            show: false\n          },\n          value: {\n            offsetY: 18,\n            color: '#99a2ac',\n            fontSize: '4rem'\n          }\n        }\n      }\n    },\n    fill: {\n      type: 'gradient',\n      gradient: {\n        shade: 'dark',\n        type: 'horizontal',\n        shadeIntensity: 0.5,\n        gradientToColors: ['#00b5b5'],\n        inverseColors: true,\n        opacityFrom: 1,\n        opacityTo: 1,\n        stops: [0, 100]\n      },\n    },\n    series: [83],\n    stroke: {\n      lineCap: 'round'\n    },\n\n  }\n\n  var goalChart = new ApexCharts(\n    document.querySelector(\"#goal-overview-chart\"),\n    goalChartoptions\n  );\n\n  goalChart.render();\n\n  // Client Retention Chart\n  // ----------------------------------\n\n  var clientChartoptions = {\n    chart: {\n      stacked: true,\n      type: 'bar',\n      toolbar: { show: false },\n      height: 300,\n    },\n    plotOptions: {\n      bar: {\n        columnWidth: '10%'\n      }\n    },\n    colors: [$primary, $danger],\n    series: [{\n      name: 'New Clients',\n      data: [175, 125, 225, 175, 160, 189, 206, 134, 159, 216, 148, 123]\n    }, {\n      name: 'Retained Clients',\n      data: [-144, -155, -141, -167, -122, -143, -158, -107, -126, -131, -140, -137]\n    }],\n    grid: {\n      borderColor: $label_color,\n      padding: {\n        left: 0,\n        right: 0\n      }\n    },\n    legend: {\n      show: true,\n      position: 'top',\n      horizontalAlign: 'left',\n      offsetX: 0,\n      fontSize: '14px',\n      markers: {\n        radius: 50,\n        width: 10,\n        height: 10,\n      }\n    },\n    dataLabels: {\n      enabled: false\n    },\n    xaxis: {\n      labels: {\n        style: {\n          colors: $strok_color,\n        }\n      },\n      axisTicks: {\n        show: false,\n      },\n      categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n      axisBorder: {\n        show: false,\n      },\n    },\n    yaxis: {\n      tickAmount: 5,\n      labels: {\n        style: {\n          color: $strok_color,\n        }\n      }\n    },\n    tooltip: {\n      x: { show: false }\n    },\n  }\n\n  var clientChart = new ApexCharts(\n    document.querySelector(\"#client-retention-chart\"),\n    clientChartoptions\n  );\n\n  clientChart.render();\n\n  // Session Chart\n  // ----------------------------------\n\n  var sessionChartoptions = {\n    chart: {\n      type: 'donut',\n      height: 325,\n      toolbar: {\n        show: false\n      }\n    },\n    dataLabels: {\n      enabled: false\n    },\n    series: [58.6, 34.9, 6.5],\n    legend: { show: false },\n    comparedResult: [2, -3, 8],\n    labels: ['Desktop', 'Mobile', 'Tablet'],\n    stroke: { width: 0 },\n    colors: [$primary, $warning, $danger],\n    fill: {\n      type: 'gradient',\n      gradient: {\n        gradientToColors: [$primary_light, $warning_light, $danger_light]\n      }\n    }\n  }\n\n  var sessionChart = new ApexCharts(\n    document.querySelector(\"#session-chart\"),\n    sessionChartoptions\n  );\n\n  sessionChart.render();\n\n  // Customer Chart\n  // -----------------------------\n\n  var customerChartoptions = {\n    chart: {\n      type: 'pie',\n      height: 330,\n      dropShadow: {\n        enabled: false,\n        blur: 5,\n        left: 1,\n        top: 1,\n        opacity: 0.2\n      },\n      toolbar: {\n        show: false\n      }\n    },\n    labels: ['New', 'Returning', 'Referrals'],\n    series: [690, 258, 149],\n    dataLabels: {\n      enabled: false\n    },\n    legend: { show: false },\n    stroke: {\n      width: 5\n    },\n    colors: [$primary, $warning, $danger],\n    fill: {\n      type: 'gradient',\n      gradient: {\n        gradientToColors: [$primary_light, $warning_light, $danger_light]\n      }\n    }\n  }\n\n  var customerChart = new ApexCharts(\n    document.querySelector(\"#customer-chart\"),\n    customerChartoptions\n  );\n\n  customerChart.render();\n\n});\n\n\n// Chat Application\n(function ($) {\n  \"use strict\";\n  // Chat area\n  if ($('.chat-application .user-chats').length > 0) {\n    var chat_user = new PerfectScrollbar(\".user-chats\", { wheelPropagation: false });\n  }\n\n})(jQuery);\n\n"
  },
  {
    "path": "public/backend/js/scripts/pages/faq-kb.js",
    "content": "/*=========================================================================================\n    File Name: app-todo.js\n    Description: app-todo\n    ----------------------------------------------------------------------------------------\n    Item Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n    Author: PIXINVENT\n    Author URL: http://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n\n$(function() {\n  \"use strict\";\n\n  // Filter\n  $(\"#searchbar\").on(\"keyup\", function() {\n    var value = $(this).val().toLowerCase();\n    if(value!=\"\"){\n      $(\".search-content-info .search-content\").filter(function() {\n        $(this).toggle($(this).text().toLowerCase().indexOf(value) > -1);\n      });\n      var search_row = $(\".search-content-info .search-content:visible\").length;\n\n      //Check if search-content has row or not\n      if ( search_row == 0 ){\n        $('.search-content-info .no-result').removeClass('no-items');\n      }\n      else{\n        if(!$('.search-content-info .no-result').hasClass('no-items') ){\n          $('.search-content-info .no-result').addClass('no-items');\n        }\n      }\n    }\n    else {\n      // If filter box is empty\n      $(\".search-content-info .search-content\").show();\n      if ($('.search-content-info .no-results').hasClass('no-items')) {\n        $('.search-content-info .no-results').removeClass('no-items');\n      }\n    }\n  });\n\n});\n"
  },
  {
    "path": "public/backend/js/scripts/pages/invoice.js",
    "content": "// =========================================================================================\n//     File Name: invoice-template.js\n//     Description: Treeview.\n//     --------------------------------------------------------------------------------------\n//     Item Name: Vuexy - Vuejs, HTML & Laravel Admin Dashboard Template\n//     Author: PIXINVENT\n//     Author URL: http://www.themeforest.net/user/pixinvent\n// ==========================================================================================\n\n$(document).ready(function () {\n  // print invoice with button\n  $(\".btn-print\").click(function () {\n    window.print();\n  });\n});\n"
  },
  {
    "path": "public/backend/js/scripts/pages/page-auth-reset-password.js",
    "content": "/*=========================================================================================\n  File Name: form-validation.js\n  Description: jquery bootstrap validation js\n  ----------------------------------------------------------------------------------------\n  Item Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n  Author: PIXINVENT\n  Author URL: http://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n\n$(function () {\n  'use strict';\n\n  var pageResetPasswordForm = $('.auth-reset-password-form');\n\n  // jQuery Validation\n  // --------------------------------------------------------------------\n  if (pageResetPasswordForm.length) {\n    pageResetPasswordForm.validate({\n      /*\n      * ? To enable validation onkeyup\n      onkeyup: function (element) {\n        $(element).valid();\n      },*/\n      /*\n      * ? To enable validation on focusout\n      onfocusout: function (element) {\n        $(element).valid();\n      }, */\n      rules: {\n        'reset-password-new': {\n          required: true\n        },\n        'reset-password-confirm': {\n          required: true,\n          equalTo: '#reset-password-new'\n        }\n      }\n    });\n  }\n});\n"
  },
  {
    "path": "public/backend/js/scripts/pages/sk-content-sidebar.js",
    "content": "/*=========================================================================================\n    File Name: content-sidebar.js\n    Description: Invoices list datables configurations\n    ----------------------------------------------------------------------------------------\n    Item Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n    Author: PIXINVENT\n    Author URL: http://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n\n$(document).ready(function() {\n\n    if($(\".sidebar-sticky\").length){\n        var headerNavbarHeight,\n            footerNavbarHeight;\n\n        // Header & Footer offset only for right & left sticky sidebar\n        if($(\"body\").hasClass('content-right-sidebar') || $(\"body\").hasClass('content-left-sidebar')){\n            headerNavbarHeight = $('.header-navbar').height();\n            footerNavbarHeight = $('footer.footer').height();\n        }\n        // Header & Footer offset with padding for detached right & left dsticky sidebar\n        else{\n            headerNavbarHeight = $('.header-navbar').height()+24;\n            footerNavbarHeight = $('footer.footer').height()+10;\n        }\n\n        $(\".sidebar-sticky\").sticky({\n            topSpacing: headerNavbarHeight,\n            bottomSpacing: footerNavbarHeight\n        });\n    }\n});\n"
  },
  {
    "path": "public/backend/js/scripts/pages/user-profile.js",
    "content": "/*=========================================================================================\n    File Name: user-profile.js\n    Description: User Profile jQuery Plugin Intialization\n    --------------------------------------------------------------------------------------\n    Item Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n    Author: PIXINVENT\n    Author URL: http://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n\n\n$(document).ready(function(){\n\n  /************************************\n  *     Block Examples      *\n  ************************************/\n    $('.block-element').on('click', function() {\n        var block_ele = $(this);\n        $(block_ele).block({\n            message: '<div class=\"spinner-border text-primary\"></div>',\n            timeout: 2000, //unblock after 2 seconds\n            overlayCSS: {\n                backgroundColor: '#fff',\n                opacity: 0.8,\n                cursor: 'wait'\n            },\n            css: {\n                border: 0,\n                padding: 0,\n                backgroundColor: 'transparent'\n            }\n        });\n    });\n\n    // profile-header-nav toggle\n  $('.navbar-toggler').on('click',function(){\n    $('.navbar-collapse').toggleClass('show');\n    $('.navbar-toggler-icon i').toggleClass('icon-x icon-align-justify');\n  });\n\n});\n"
  },
  {
    "path": "public/backend/js/scripts/pages/user-settings.js",
    "content": "/*=========================================================================================\n    File Name: user-settings.js\n    Description: User Settings jQuery Plugin Intialization\n    --------------------------------------------------------------------------------------\n    Item Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n    Author: PIXINVENT\n    Author URL: http://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n\n// profile picture upload\nDropzone.options.profilePicUpload = {\n  paramName: \"file\", // The name that will be used to transfer the file\n  maxFiles: 1,\n  init: function () {\n    this.on(\"maxfilesexceeded\", function (file) {\n      this.removeAllFiles();\n      this.addFile(file);\n    });\n  }\n};\n"
  },
  {
    "path": "public/backend/js/scripts/pagination/pagination.js",
    "content": "/*=========================================================================================\n    File Name: pagination.js\n    Description: Provide pagination links for your site or app with the multi-page\n                pagination component.\n    ----------------------------------------------------------------------------------------\n    Item Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n    Author: Pixinvent\n    Author URL: hhttp://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n(function (window, document, $) {\n  'use strict';\n  // default pagination\n  $('.page1-links').twbsPagination({\n    totalPages: 5,\n    visiblePages: 4,\n    prev: 'Prev',\n    first: null,\n    last: null,\n    startPage: 2,\n    onPageClick: function (event, page) {\n      $('#page1-content').text('You are on Page ' + page);\n      $(\".pagination\").find('li').addClass('page-item');\n      $(\".pagination\").find('a').addClass(\"page-link\");\n    }\n  });\n\n  //Default Pagination with last & first\n  $('.firstLast1-links').twbsPagination({\n    totalPages: 5,\n    visiblePages: 4,\n    prev: 'Prev',\n    first: 'First',\n    last: 'Last',\n    startPage: 2,\n    onPageClick: function (event, page) {\n      $('#firstLast1-content').text('You are on Page ' + page);\n      $(\".pagination\").find('li').addClass('page-item');\n      $(\".pagination\").find('a').addClass(\"page-link\");\n    }\n  });\n  //Set Start Page Of Pagination\n  $('.start-links').twbsPagination({\n    totalPages: 10,\n    visiblePages: 6,\n    startPage: 5,\n    prev: 'Prev',\n    first: 'First',\n    last: 'Last',\n    onPageClick: function (event, page) {\n      $('#start-content').text('Your start Page ' + page);\n      $(\".pagination\").find('li').addClass('page-item');\n      $(\".pagination\").find('a').addClass(\"page-link\");\n    }\n  });\n\n  // Pagination drop after reload\n  $('.url1-links').twbsPagination({\n    totalPages: 10,\n    visiblePages: 5,\n    prev: 'Prev',\n    first: 'First',\n    last: 'Last',\n    href: '?page={{page}}&#url1-content',\n    hrefVariable: '{{page}}',\n    onPageClick: function (event, page) {\n      $('#url1-content').text('You are on Page ' + page);\n      $(\".pagination\").find('li').addClass('page-item');\n      $(\".pagination\").find('a').addClass(\"page-link\");\n    }\n  });\n\n})(window, document, jQuery);\n"
  },
  {
    "path": "public/backend/js/scripts/pickers/dateTime/pick-a-datetime.js",
    "content": "/*=========================================================================================\n    File Name: picker-date-time.js\n    Description: Pick a date/time Picker, Date Range Picker JS\n    ----------------------------------------------------------------------------------------\n    Item Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n    Author: Pixinvent\n    Author URL: hhttp://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n(function(window, document, $) {\n    'use strict';\n\n    /*******    Pick-a-date Picker  *****/\n    // Basic date\n    $('.pickadate').pickadate();\n\n    // Format Date Picker\n    $('.format-picker').pickadate({\n        format: 'mmmm, d, yyyy'\n    });\n\n    // Date limits\n    $('.pickadate-limits').pickadate({\n        min: [2019,3,20],\n        max: [2019,5,28]\n    });\n\n    // Disabled Dates & Weeks\n\n    $('.pickadate-disable').pickadate({\n        disable: [\n            1,\n            [2019,3,6],\n            [2019,3,20]\n        ]\n    });\n\n    // Picker Translations\n    $( '.pickadate-translations' ).pickadate({\n        formatSubmit: 'dd/mm/yyyy',\n        monthsFull: [ 'Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre' ],\n        monthsShort: [ 'Jan', 'Fev', 'Mar', 'Avr', 'Mai', 'Juin', 'Juil', 'Aou', 'Sep', 'Oct', 'Nov', 'Dec' ],\n        weekdaysShort: [ 'Dim', 'Lun', 'Mar', 'Mer', 'Jeu', 'Ven', 'Sam' ],\n        today: 'aujourd\\'hui',\n        clear: 'clair',\n        close: 'Fermer'\n    });\n\n    // Month Select Picker\n    $('.pickadate-months').pickadate({\n        selectYears: false,\n        selectMonths: true\n    });\n\n    // Month and Year Select Picker\n    $('.pickadate-months-year').pickadate({\n        selectYears: true,\n        selectMonths: true\n    });\n\n    // Short String Date Picker\n    $('.pickadate-short-string').pickadate({\n        weekdaysShort: ['S', 'M', 'Tu', 'W', 'Th', 'F', 'S'],\n        showMonthsShort: true\n    });\n\n    // Change first weekday\n    $('.pickadate-firstday').pickadate({\n        firstDay: 1\n    });\n\n\n\n    /*******    Pick-a-time Picker  *****/\n    // Basic time\n    $('.pickatime').pickatime();\n\n    // Format options\n    $('.pickatime-format').pickatime({\n        // Escape any “rule” characters with an exclamation mark (!).\n        format: 'T!ime selected: h:i a',\n        formatLabel: 'HH:i a',\n        formatSubmit: 'HH:i',\n        hiddenPrefix: 'prefix__',\n        hiddenSuffix: '__suffix'\n    });\n\n\n    // Format options\n    $('.pickatime-formatlabel').pickatime({\n        formatLabel: function(time) {\n            var hours = ( time.pick - this.get('now').pick ) / 60,\n                label = hours < 0 ? ' !hours to now' : hours > 0 ? ' !hours from now' : 'now';\n            return  'h:i a <sm!all>' + ( hours ? Math.abs(hours) : '' ) + label +'</sm!all>';\n        }\n    });\n\n    // Min - Max Time to select\n    $( '.pickatime-min-max').pickatime({\n\n        // Using Javascript\n        min: new Date(2015,3,20,7),\n        max: new Date(2015,7,14,18,30)\n\n        // Using Array\n        // min: [7,30],\n        // max: [14,0]\n    });\n\n    // Intervals\n    $('.pickatime-intervals').pickatime({\n        interval: 150\n    });\n\n    // Disable Time\n    $('.pickatime-disable').pickatime({\n        disable: [\n        // Disable Using Integers\n            3, 5, 7, 13, 17, 21\n\n        /* Using Array */\n            // [0,30],\n            // [2,0],\n            // [8,30],\n            // [9,0]\n        ]\n    });\n\n\n    // Close on a user action\n    $('.pickatime-close-action').pickatime({\n        closeOnSelect: false,\n        closeOnClear: false\n    });\n\n\n})(window, document, jQuery);\n"
  },
  {
    "path": "public/backend/js/scripts/popover/popover.js",
    "content": "/*=========================================================================================\n    File Name: popover.js\n    Description: Popovers are an updated version, which don’t rely on images,\n                use CSS3 for animations, and data-attributes for local title storage.\n    ----------------------------------------------------------------------------------------\n    Item Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n    Author: PIXINVENT\n    Author URL: http://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n(function(window, document, $) {\n'use strict';\n    $('[data-toggle=\"popover\"]').popover();\n\n\n    /******************/\n    // Popover events //\n    /******************/\n\n    // onShow event\n    $('#show-popover').popover({\n        title: 'Popover Show Event',\n        content: 'Bonbon chocolate cake. Pudding halvah pie apple pie topping marzipan pastry marzipan cupcake.',\n        trigger: 'click',\n        placement: 'right'\n        }).on('show.bs.popover', function() {\n            alert('Show event fired.');\n    });\n\n    // onShown event\n    $('#shown-popover').popover({\n        title: 'Popover Shown Event',\n        content: 'Bonbon chocolate cake. Pudding halvah pie apple pie topping marzipan pastry marzipan cupcake.',\n        trigger: 'click',\n        placement: 'bottom'\n    }).on('shown.bs.popover', function() {\n        alert('Shown event fired.');\n    });\n\n    // onHide event\n    $('#hide-popover').popover({\n        title: 'Popover Hide Event',\n        content: 'Bonbon chocolate cake. Pudding halvah pie apple pie topping marzipan pastry marzipan cupcake.',\n        trigger: 'click',\n        placement: 'bottom'\n    }).on('hide.bs.popover', function() {\n        alert('Hide event fired.');\n    });\n\n    // onHidden event\n    $('#hidden-popover').popover({\n        title: 'Popover Hidden Event',\n        content: 'Bonbon chocolate cake. Pudding halvah pie apple pie topping marzipan pastry marzipan cupcake.',\n        trigger: 'click',\n        placement: 'left'\n    }).on('hidden.bs.popover', function() {\n        alert('Hidden event fired.');\n    });\n\n    /*******************/\n    // Tooltip methods //\n    /*******************/\n\n    // Show method\n    $('#show-method').on('click', function() {\n        $(this).popover('show');\n    });\n    // Hide method\n    $('#hide-method').on('mouseenter', function() {\n        $(this).popover('show');\n    });\n    $('#hide-method').on('click', function() {\n        $(this).popover('hide');\n    });\n    // Toggle method\n    $('#toggle-method').on('click', function() {\n        $(this).popover('toggle');\n    });\n    // Dispose method\n    $('#dispose').on('click', function() {\n        $('#dispose-method').popover('dispose');\n    });\n\n\n    /* Trigger*/\n    $('.manual').on('click', function() {\n        $(this).popover('show');\n    });\n    $('.manual').on('mouseout', function() {\n        $(this).popover('hide');\n    });\n\n    /****************/\n    // Custom color //\n    /****************/\n    $('[data-popup=popover-color]').popover({\n        template: '<div class=\"popover\"><div class=\"bg-teal\"><div class=\"popover-arrow\"></div><div class=\"popover-inner\"></div></div></div>'\n    });\n\n    /**********************/\n    // Custom borer color //\n    /**********************/\n    $('[data-popup=popover-border]').popover({\n        template: '<div class=\"popover\"><div class=\"border-orange\"><div class=\"popover-arrow\"></div><div class=\"popover-inner\"></div></div></div>'\n    });\n\n})(window, document, jQuery);\n"
  },
  {
    "path": "public/backend/js/scripts/tooltip/tooltip.js",
    "content": "/*=========================================================================================\n    File Name: tooltip.js\n    Description: Tooltips are an updated version, which don’t rely on images,\n                use CSS3 for animations, and data-attributes for local title storage.\n    ----------------------------------------------------------------------------------------\n    Item Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n    Author: Pixinvent\n    Author URL: hhttp://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n    (function(window, document, $) {\n    'use strict';\n\n    /******************/\n    // Tooltip events //\n    /******************/\n\n    // onShow event\n    $('#show-tooltip').tooltip({\n        title: 'Tooltip Show Event',\n        trigger: 'click',\n        placement: 'right'\n        }).on('show.bs.tooltip', function() {\n            alert('Show event fired.');\n    });\n\n    // onShown event\n    $('#shown-tooltip').tooltip({\n        title: 'Tooltip Shown Event',\n        trigger: 'click',\n        placement: 'top'\n    }).on('shown.bs.tooltip', function() {\n        alert('Shown event fired.');\n    });\n\n    // onHide event\n    $('#hide-tooltip').tooltip({\n        title: 'Tooltip Hide Event',\n        trigger: 'click',\n        placement: 'bottom'\n    }).on('hide.bs.tooltip', function() {\n        alert('Hide event fired.');\n    });\n\n    // onHidden event\n    $('#hidden-tooltip').tooltip({\n        title: 'Tooltip Hidden Event',\n        trigger: 'click',\n        placement: 'left'\n    }).on('hidden.bs.tooltip', function() {\n        alert('Hidden event fired.');\n    });\n\n\n    /*******************/\n    // Tooltip methods //\n    /*******************/\n\n    // Show method\n    $('#show-method').on('click', function() {\n        $(this).tooltip('show');\n    });\n    // Hide method\n    $('#hide-method').on('mouseenter', function() {\n        $(this).tooltip('show');\n    });\n    $('#hide-method').on('click', function() {\n        $(this).tooltip('hide');\n    });\n    // Toggle method\n    $('#toggle-method').on('click', function() {\n        $(this).tooltip('toggle');\n    });\n    // Dispose method\n    $('#dispose').on('click', function() {\n        $('#dispose-method').tooltip('dispose');\n    });\n\n    /* Trigger*/\n    $('.manual').on('click', function() {\n        $(this).tooltip('show');\n    });\n    $('.manual').on('mouseout', function() {\n        $(this).tooltip('hide');\n    });\n\n    /* Default template */\n    $(\".template\").on('click', function(){\n        console.log(\n            '<div class=\"tooltip\" role=\"tooltip\">' +\n            '<div class=\"tooltip-arrow\"></div>' +\n            '<div class=\"tooltip-inner\"></div>' +\n            '</div>'\n        );\n    });\n\n})(window, document, jQuery);\n"
  },
  {
    "path": "public/backend/js/scripts/ui/data-list-view.js",
    "content": "/*=========================================================================================\n    File Name: data-list-view.js\n    Description: List View\n    ----------------------------------------------------------------------------------------\n    Item Name: Vuexy  - Vuejs, HTML & Laravel Admin Dashboard Template\n    Author: PIXINVENT\n    Author URL: http://www.themeforest.net/user/pixinvent\n==========================================================================================*/\n\n$(document).ready(function() {\n  \"use strict\"\n  // init list view datatable\n  var dataListView = $(\".data-list-view\").DataTable({\n    responsive: false,\n    columnDefs: [\n      {\n        orderable: true,\n        targets: 0,\n        checkboxes: { selectRow: true }\n      }\n    ],\n    dom:\n      '<\"top\"<\"actions action-btns\"B><\"action-filters\"lf>><\"clear\">rt<\"bottom\"<\"actions\">p>',\n    oLanguage: {\n      sLengthMenu: \"_MENU_\",\n      sSearch: \"\"\n    },\n    aLengthMenu: [[4, 10, 15, 20], [4, 10, 15, 20]],\n    select: {\n      style: \"multi\"\n    },\n    order: [[1, \"asc\"]],\n    bInfo: false,\n    pageLength: 4,\n    buttons: [\n      {\n        text: \"<i class='feather icon-plus'></i> Add New\",\n        action: function() {\n          $(this).removeClass(\"btn-secondary\")\n          $(\".add-new-data\").addClass(\"show\")\n          $(\".overlay-bg\").addClass(\"show\")\n          $(\"#data-name, #data-price\").val(\"\")\n          $(\"#data-category, #data-status\").prop(\"selectedIndex\", 0)\n        },\n        className: \"btn-outline-primary\"\n      }\n    ],\n    initComplete: function(settings, json) {\n      $(\".dt-buttons .btn\").removeClass(\"btn-secondary\")\n    }\n  });\n\n  dataListView.on('draw.dt', function(){\n    setTimeout(function(){\n      if (navigator.userAgent.indexOf(\"Mac OS X\") != -1) {\n        $(\".dt-checkboxes-cell input, .dt-checkboxes\").addClass(\"mac-checkbox\")\n      }\n    }, 50);\n  });\n\n  // init thumb view datatable\n  var dataThumbView = $(\".data-thumb-view\").DataTable({\n    responsive: false,\n    columnDefs: [\n      {\n        orderable: true,\n        targets: 0,\n        checkboxes: { selectRow: true }\n      }\n    ],\n    dom:\n      '<\"top\"<\"actions action-btns\"B><\"action-filters\"lf>><\"clear\">rt<\"bottom\"<\"actions\">p>',\n    oLanguage: {\n      sLengthMenu: \"_MENU_\",\n      sSearch: \"\"\n    },\n    aLengthMenu: [[4, 10, 15, 20], [4, 10, 15, 20]],\n    select: {\n      style: \"multi\"\n    },\n    order: [[1, \"asc\"]],\n    bInfo: false,\n    pageLength: 4,\n    buttons: [\n      {\n        text: \"<i class='feather icon-plus'></i> Add New\",\n        action: function() {\n          $(this).removeClass(\"btn-secondary\")\n          $(\".add-new-data\").addClass(\"show\")\n          $(\".overlay-bg\").addClass(\"show\")\n        },\n        className: \"btn-outline-primary\"\n      }\n    ],\n    initComplete: function(settings, json) {\n      $(\".dt-buttons .btn\").removeClass(\"btn-secondary\")\n    }\n  })\n\n  dataThumbView.on('draw.dt', function(){\n    setTimeout(function(){\n      if (navigator.userAgent.indexOf(\"Mac OS X\") != -1) {\n        $(\".dt-checkboxes-cell input, .dt-checkboxes\").addClass(\"mac-checkbox\")\n      }\n    }, 50);\n  });\n\n  // To append actions dropdown before add new button\n  var actionDropdown = $(\".actions-dropodown\")\n  actionDropdown.insertBefore($(\".top .actions .dt-buttons\"))\n\n\n  // Scrollbar\n  if ($(\".data-items\").length > 0) {\n    new PerfectScrollbar(\".data-items\", { wheelPropagation: false })\n  }\n\n  // Close sidebar\n  $(\".hide-data-sidebar, .cancel-data-btn, .overlay-bg\").on(\"click\", function() {\n    $(\".add-new-data\").removeClass(\"show\")\n    $(\".overlay-bg\").removeClass(\"show\")\n    $(\"#data-name, #data-price\").val(\"\")\n    $(\"#data-category, #data-status\").prop(\"selectedIndex\", 0)\n  })\n\n  // On Edit\n  $('.action-edit').on(\"click\",function(e){\n    e.stopPropagation();\n    $('#data-name').val('Altec Lansing - Bluetooth Speaker');\n    $('#data-price').val('$99');\n    $(\".add-new-data\").addClass(\"show\");\n    $(\".overlay-bg\").addClass(\"show\");\n  });\n\n  // On Delete\n  $('.action-delete').on(\"click\", function(e){\n    e.stopPropagation();\n    $(this).closest('td').parent('tr').fadeOut();\n  });\n\n  // dropzone init\n  Dropzone.options.dataListUpload = {\n    complete: function(files) {\n      var _this = this\n      // checks files in class dropzone and remove that files\n      $(\".hide-data-sidebar, .cancel-data-btn, .actions .dt-buttons\").on(\n        \"click\",\n        function() {\n          $(\".dropzone\")[0].dropzone.files.forEach(function(file) {\n            file.previewElement.remove()\n          })\n          $(\".dropzone\").removeClass(\"dz-started\")\n        }\n      )\n    }\n  }\n  Dropzone.options.dataListUpload.complete()\n\n  // mac chrome checkbox fix\n  if (navigator.userAgent.indexOf(\"Mac OS X\") != -1) {\n    $(\".dt-checkboxes-cell input, .dt-checkboxes\").addClass(\"mac-checkbox\")\n  }\n})\n"
  },
  {
    "path": "public/backend/vendors/css/animate/animate.css",
    "content": "@charset \"UTF-8\";\n\n/*!\n * animate.css -https://daneden.github.io/animate.css/\n * Version - 3.7.2\n * Licensed under the MIT license - http://opensource.org/licenses/MIT\n *\n * Copyright (c) 2019 Daniel Eden\n */\n\n@-webkit-keyframes bounce {\n  from,\n  20%,\n  53%,\n  80%,\n  to {\n    -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n    animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n\n  40%,\n  43% {\n    -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n    animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n    -webkit-transform: translate3d(0, -30px, 0);\n    transform: translate3d(0, -30px, 0);\n  }\n\n  70% {\n    -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n    animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n    -webkit-transform: translate3d(0, -15px, 0);\n    transform: translate3d(0, -15px, 0);\n  }\n\n  90% {\n    -webkit-transform: translate3d(0, -4px, 0);\n    transform: translate3d(0, -4px, 0);\n  }\n}\n\n@keyframes bounce {\n  from,\n  20%,\n  53%,\n  80%,\n  to {\n    -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n    animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n\n  40%,\n  43% {\n    -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n    animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n    -webkit-transform: translate3d(0, -30px, 0);\n    transform: translate3d(0, -30px, 0);\n  }\n\n  70% {\n    -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n    animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);\n    -webkit-transform: translate3d(0, -15px, 0);\n    transform: translate3d(0, -15px, 0);\n  }\n\n  90% {\n    -webkit-transform: translate3d(0, -4px, 0);\n    transform: translate3d(0, -4px, 0);\n  }\n}\n\n.bounce {\n  -webkit-animation-name: bounce;\n  animation-name: bounce;\n  -webkit-transform-origin: center bottom;\n  transform-origin: center bottom;\n}\n\n@-webkit-keyframes flash {\n  from,\n  50%,\n  to {\n    opacity: 1;\n  }\n\n  25%,\n  75% {\n    opacity: 0;\n  }\n}\n\n@keyframes flash {\n  from,\n  50%,\n  to {\n    opacity: 1;\n  }\n\n  25%,\n  75% {\n    opacity: 0;\n  }\n}\n\n.flash {\n  -webkit-animation-name: flash;\n  animation-name: flash;\n}\n\n/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */\n\n@-webkit-keyframes pulse {\n  from {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n  }\n\n  50% {\n    -webkit-transform: scale3d(1.05, 1.05, 1.05);\n    transform: scale3d(1.05, 1.05, 1.05);\n  }\n\n  to {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n  }\n}\n\n@keyframes pulse {\n  from {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n  }\n\n  50% {\n    -webkit-transform: scale3d(1.05, 1.05, 1.05);\n    transform: scale3d(1.05, 1.05, 1.05);\n  }\n\n  to {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n  }\n}\n\n.pulse {\n  -webkit-animation-name: pulse;\n  animation-name: pulse;\n}\n\n@-webkit-keyframes rubberBand {\n  from {\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  to {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n  }\n}\n\n@keyframes rubberBand {\n  from {\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  to {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n  }\n}\n\n.rubberBand {\n  -webkit-animation-name: rubberBand;\n  animation-name: rubberBand;\n}\n\n@-webkit-keyframes shake {\n  from,\n  to {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n\n  10%,\n  30%,\n  50%,\n  70%,\n  90% {\n    -webkit-transform: translate3d(-10px, 0, 0);\n    transform: translate3d(-10px, 0, 0);\n  }\n\n  20%,\n  40%,\n  60%,\n  80% {\n    -webkit-transform: translate3d(10px, 0, 0);\n    transform: translate3d(10px, 0, 0);\n  }\n}\n\n@keyframes shake {\n  from,\n  to {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n\n  10%,\n  30%,\n  50%,\n  70%,\n  90% {\n    -webkit-transform: translate3d(-10px, 0, 0);\n    transform: translate3d(-10px, 0, 0);\n  }\n\n  20%,\n  40%,\n  60%,\n  80% {\n    -webkit-transform: translate3d(10px, 0, 0);\n    transform: translate3d(10px, 0, 0);\n  }\n}\n\n.shake {\n  -webkit-animation-name: shake;\n  animation-name: shake;\n}\n\n@-webkit-keyframes headShake {\n  0% {\n    -webkit-transform: translateX(0);\n    transform: translateX(0);\n  }\n\n  6.5% {\n    -webkit-transform: translateX(-6px) rotateY(-9deg);\n    transform: translateX(-6px) rotateY(-9deg);\n  }\n\n  18.5% {\n    -webkit-transform: translateX(5px) rotateY(7deg);\n    transform: translateX(5px) rotateY(7deg);\n  }\n\n  31.5% {\n    -webkit-transform: translateX(-3px) rotateY(-5deg);\n    transform: translateX(-3px) rotateY(-5deg);\n  }\n\n  43.5% {\n    -webkit-transform: translateX(2px) rotateY(3deg);\n    transform: translateX(2px) rotateY(3deg);\n  }\n\n  50% {\n    -webkit-transform: translateX(0);\n    transform: translateX(0);\n  }\n}\n\n@keyframes headShake {\n  0% {\n    -webkit-transform: translateX(0);\n    transform: translateX(0);\n  }\n\n  6.5% {\n    -webkit-transform: translateX(-6px) rotateY(-9deg);\n    transform: translateX(-6px) rotateY(-9deg);\n  }\n\n  18.5% {\n    -webkit-transform: translateX(5px) rotateY(7deg);\n    transform: translateX(5px) rotateY(7deg);\n  }\n\n  31.5% {\n    -webkit-transform: translateX(-3px) rotateY(-5deg);\n    transform: translateX(-3px) rotateY(-5deg);\n  }\n\n  43.5% {\n    -webkit-transform: translateX(2px) rotateY(3deg);\n    transform: translateX(2px) rotateY(3deg);\n  }\n\n  50% {\n    -webkit-transform: translateX(0);\n    transform: translateX(0);\n  }\n}\n\n.headShake {\n  -webkit-animation-timing-function: ease-in-out;\n  animation-timing-function: ease-in-out;\n  -webkit-animation-name: headShake;\n  animation-name: headShake;\n}\n\n@-webkit-keyframes swing {\n  20% {\n    -webkit-transform: rotate3d(0, 0, 1, 15deg);\n    transform: rotate3d(0, 0, 1, 15deg);\n  }\n\n  40% {\n    -webkit-transform: rotate3d(0, 0, 1, -10deg);\n    transform: rotate3d(0, 0, 1, -10deg);\n  }\n\n  60% {\n    -webkit-transform: rotate3d(0, 0, 1, 5deg);\n    transform: rotate3d(0, 0, 1, 5deg);\n  }\n\n  80% {\n    -webkit-transform: rotate3d(0, 0, 1, -5deg);\n    transform: rotate3d(0, 0, 1, -5deg);\n  }\n\n  to {\n    -webkit-transform: rotate3d(0, 0, 1, 0deg);\n    transform: rotate3d(0, 0, 1, 0deg);\n  }\n}\n\n@keyframes swing {\n  20% {\n    -webkit-transform: rotate3d(0, 0, 1, 15deg);\n    transform: rotate3d(0, 0, 1, 15deg);\n  }\n\n  40% {\n    -webkit-transform: rotate3d(0, 0, 1, -10deg);\n    transform: rotate3d(0, 0, 1, -10deg);\n  }\n\n  60% {\n    -webkit-transform: rotate3d(0, 0, 1, 5deg);\n    transform: rotate3d(0, 0, 1, 5deg);\n  }\n\n  80% {\n    -webkit-transform: rotate3d(0, 0, 1, -5deg);\n    transform: rotate3d(0, 0, 1, -5deg);\n  }\n\n  to {\n    -webkit-transform: rotate3d(0, 0, 1, 0deg);\n    transform: rotate3d(0, 0, 1, 0deg);\n  }\n}\n\n.swing {\n  -webkit-transform-origin: top center;\n  transform-origin: top center;\n  -webkit-animation-name: swing;\n  animation-name: swing;\n}\n\n@-webkit-keyframes tada {\n  from {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n  }\n\n  10%,\n  20% {\n    -webkit-transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg);\n    transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg);\n  }\n\n  30%,\n  50%,\n  70%,\n  90% {\n    -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);\n    transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);\n  }\n\n  40%,\n  60%,\n  80% {\n    -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);\n    transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);\n  }\n\n  to {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n  }\n}\n\n@keyframes tada {\n  from {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n  }\n\n  10%,\n  20% {\n    -webkit-transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg);\n    transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg);\n  }\n\n  30%,\n  50%,\n  70%,\n  90% {\n    -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);\n    transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);\n  }\n\n  40%,\n  60%,\n  80% {\n    -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);\n    transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);\n  }\n\n  to {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n  }\n}\n\n.tada {\n  -webkit-animation-name: tada;\n  animation-name: tada;\n}\n\n/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */\n\n@-webkit-keyframes wobble {\n  from {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n\n  15% {\n    -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);\n    transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);\n  }\n\n  30% {\n    -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);\n    transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);\n  }\n\n  45% {\n    -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);\n    transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);\n  }\n\n  60% {\n    -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);\n    transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);\n  }\n\n  75% {\n    -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);\n    transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);\n  }\n\n  to {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n}\n\n@keyframes wobble {\n  from {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n\n  15% {\n    -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);\n    transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);\n  }\n\n  30% {\n    -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);\n    transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);\n  }\n\n  45% {\n    -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);\n    transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);\n  }\n\n  60% {\n    -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);\n    transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);\n  }\n\n  75% {\n    -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);\n    transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);\n  }\n\n  to {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n}\n\n.wobble {\n  -webkit-animation-name: wobble;\n  animation-name: wobble;\n}\n\n@-webkit-keyframes jello {\n  from,\n  11.1%,\n  to {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n\n  22.2% {\n    -webkit-transform: skewX(-12.5deg) skewY(-12.5deg);\n    transform: skewX(-12.5deg) skewY(-12.5deg);\n  }\n\n  33.3% {\n    -webkit-transform: skewX(6.25deg) skewY(6.25deg);\n    transform: skewX(6.25deg) skewY(6.25deg);\n  }\n\n  44.4% {\n    -webkit-transform: skewX(-3.125deg) skewY(-3.125deg);\n    transform: skewX(-3.125deg) skewY(-3.125deg);\n  }\n\n  55.5% {\n    -webkit-transform: skewX(1.5625deg) skewY(1.5625deg);\n    transform: skewX(1.5625deg) skewY(1.5625deg);\n  }\n\n  66.6% {\n    -webkit-transform: skewX(-0.78125deg) skewY(-0.78125deg);\n    transform: skewX(-0.78125deg) skewY(-0.78125deg);\n  }\n\n  77.7% {\n    -webkit-transform: skewX(0.390625deg) skewY(0.390625deg);\n    transform: skewX(0.390625deg) skewY(0.390625deg);\n  }\n\n  88.8% {\n    -webkit-transform: skewX(-0.1953125deg) skewY(-0.1953125deg);\n    transform: skewX(-0.1953125deg) skewY(-0.1953125deg);\n  }\n}\n\n@keyframes jello {\n  from,\n  11.1%,\n  to {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n\n  22.2% {\n    -webkit-transform: skewX(-12.5deg) skewY(-12.5deg);\n    transform: skewX(-12.5deg) skewY(-12.5deg);\n  }\n\n  33.3% {\n    -webkit-transform: skewX(6.25deg) skewY(6.25deg);\n    transform: skewX(6.25deg) skewY(6.25deg);\n  }\n\n  44.4% {\n    -webkit-transform: skewX(-3.125deg) skewY(-3.125deg);\n    transform: skewX(-3.125deg) skewY(-3.125deg);\n  }\n\n  55.5% {\n    -webkit-transform: skewX(1.5625deg) skewY(1.5625deg);\n    transform: skewX(1.5625deg) skewY(1.5625deg);\n  }\n\n  66.6% {\n    -webkit-transform: skewX(-0.78125deg) skewY(-0.78125deg);\n    transform: skewX(-0.78125deg) skewY(-0.78125deg);\n  }\n\n  77.7% {\n    -webkit-transform: skewX(0.390625deg) skewY(0.390625deg);\n    transform: skewX(0.390625deg) skewY(0.390625deg);\n  }\n\n  88.8% {\n    -webkit-transform: skewX(-0.1953125deg) skewY(-0.1953125deg);\n    transform: skewX(-0.1953125deg) skewY(-0.1953125deg);\n  }\n}\n\n.jello {\n  -webkit-animation-name: jello;\n  animation-name: jello;\n  -webkit-transform-origin: center;\n  transform-origin: center;\n}\n\n@-webkit-keyframes heartBeat {\n  0% {\n    -webkit-transform: scale(1);\n    transform: scale(1);\n  }\n\n  14% {\n    -webkit-transform: scale(1.3);\n    transform: scale(1.3);\n  }\n\n  28% {\n    -webkit-transform: scale(1);\n    transform: scale(1);\n  }\n\n  42% {\n    -webkit-transform: scale(1.3);\n    transform: scale(1.3);\n  }\n\n  70% {\n    -webkit-transform: scale(1);\n    transform: scale(1);\n  }\n}\n\n@keyframes heartBeat {\n  0% {\n    -webkit-transform: scale(1);\n    transform: scale(1);\n  }\n\n  14% {\n    -webkit-transform: scale(1.3);\n    transform: scale(1.3);\n  }\n\n  28% {\n    -webkit-transform: scale(1);\n    transform: scale(1);\n  }\n\n  42% {\n    -webkit-transform: scale(1.3);\n    transform: scale(1.3);\n  }\n\n  70% {\n    -webkit-transform: scale(1);\n    transform: scale(1);\n  }\n}\n\n.heartBeat {\n  -webkit-animation-name: heartBeat;\n  animation-name: heartBeat;\n  -webkit-animation-duration: 1.3s;\n  animation-duration: 1.3s;\n  -webkit-animation-timing-function: ease-in-out;\n  animation-timing-function: ease-in-out;\n}\n\n@-webkit-keyframes bounceIn {\n  from,\n  20%,\n  40%,\n  60%,\n  80%,\n  to {\n    -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n    animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n  }\n\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  to {\n    opacity: 1;\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n  }\n}\n\n@keyframes bounceIn {\n  from,\n  20%,\n  40%,\n  60%,\n  80%,\n  to {\n    -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n    animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n  }\n\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  to {\n    opacity: 1;\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n  }\n}\n\n.bounceIn {\n  -webkit-animation-duration: 0.75s;\n  animation-duration: 0.75s;\n  -webkit-animation-name: bounceIn;\n  animation-name: bounceIn;\n}\n\n@-webkit-keyframes bounceInDown {\n  from,\n  60%,\n  75%,\n  90%,\n  to {\n    -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n    animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n  }\n\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -3000px, 0);\n    transform: translate3d(0, -3000px, 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  to {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n}\n\n@keyframes bounceInDown {\n  from,\n  60%,\n  75%,\n  90%,\n  to {\n    -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n    animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n  }\n\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -3000px, 0);\n    transform: translate3d(0, -3000px, 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  to {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n}\n\n.bounceInDown {\n  -webkit-animation-name: bounceInDown;\n  animation-name: bounceInDown;\n}\n\n@-webkit-keyframes bounceInLeft {\n  from,\n  60%,\n  75%,\n  90%,\n  to {\n    -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n    animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n  }\n\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(-3000px, 0, 0);\n    transform: translate3d(-3000px, 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  to {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n}\n\n@keyframes bounceInLeft {\n  from,\n  60%,\n  75%,\n  90%,\n  to {\n    -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n    animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n  }\n\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(-3000px, 0, 0);\n    transform: translate3d(-3000px, 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  to {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n}\n\n.bounceInLeft {\n  -webkit-animation-name: bounceInLeft;\n  animation-name: bounceInLeft;\n}\n\n@-webkit-keyframes bounceInRight {\n  from,\n  60%,\n  75%,\n  90%,\n  to {\n    -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n    animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n  }\n\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(3000px, 0, 0);\n    transform: translate3d(3000px, 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  to {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n}\n\n@keyframes bounceInRight {\n  from,\n  60%,\n  75%,\n  90%,\n  to {\n    -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n    animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n  }\n\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(3000px, 0, 0);\n    transform: translate3d(3000px, 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  to {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n}\n\n.bounceInRight {\n  -webkit-animation-name: bounceInRight;\n  animation-name: bounceInRight;\n}\n\n@-webkit-keyframes bounceInUp {\n  from,\n  60%,\n  75%,\n  90%,\n  to {\n    -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n    animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n  }\n\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 3000px, 0);\n    transform: translate3d(0, 3000px, 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  to {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n}\n\n@keyframes bounceInUp {\n  from,\n  60%,\n  75%,\n  90%,\n  to {\n    -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n    animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n  }\n\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 3000px, 0);\n    transform: translate3d(0, 3000px, 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  to {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n}\n\n.bounceInUp {\n  -webkit-animation-name: bounceInUp;\n  animation-name: bounceInUp;\n}\n\n@-webkit-keyframes bounceOut {\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%,\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\n  to {\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 bounceOut {\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%,\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\n  to {\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.bounceOut {\n  -webkit-animation-duration: 0.75s;\n  animation-duration: 0.75s;\n  -webkit-animation-name: bounceOut;\n  animation-name: bounceOut;\n}\n\n@-webkit-keyframes bounceOutDown {\n  20% {\n    -webkit-transform: translate3d(0, 10px, 0);\n    transform: translate3d(0, 10px, 0);\n  }\n\n  40%,\n  45% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, -20px, 0);\n    transform: translate3d(0, -20px, 0);\n  }\n\n  to {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 2000px, 0);\n    transform: translate3d(0, 2000px, 0);\n  }\n}\n\n@keyframes bounceOutDown {\n  20% {\n    -webkit-transform: translate3d(0, 10px, 0);\n    transform: translate3d(0, 10px, 0);\n  }\n\n  40%,\n  45% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, -20px, 0);\n    transform: translate3d(0, -20px, 0);\n  }\n\n  to {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 2000px, 0);\n    transform: translate3d(0, 2000px, 0);\n  }\n}\n\n.bounceOutDown {\n  -webkit-animation-name: bounceOutDown;\n  animation-name: bounceOutDown;\n}\n\n@-webkit-keyframes bounceOutLeft {\n  20% {\n    opacity: 1;\n    -webkit-transform: translate3d(20px, 0, 0);\n    transform: translate3d(20px, 0, 0);\n  }\n\n  to {\n    opacity: 0;\n    -webkit-transform: translate3d(-2000px, 0, 0);\n    transform: translate3d(-2000px, 0, 0);\n  }\n}\n\n@keyframes bounceOutLeft {\n  20% {\n    opacity: 1;\n    -webkit-transform: translate3d(20px, 0, 0);\n    transform: translate3d(20px, 0, 0);\n  }\n\n  to {\n    opacity: 0;\n    -webkit-transform: translate3d(-2000px, 0, 0);\n    transform: translate3d(-2000px, 0, 0);\n  }\n}\n\n.bounceOutLeft {\n  -webkit-animation-name: bounceOutLeft;\n  animation-name: bounceOutLeft;\n}\n\n@-webkit-keyframes bounceOutRight {\n  20% {\n    opacity: 1;\n    -webkit-transform: translate3d(-20px, 0, 0);\n    transform: translate3d(-20px, 0, 0);\n  }\n\n  to {\n    opacity: 0;\n    -webkit-transform: translate3d(2000px, 0, 0);\n    transform: translate3d(2000px, 0, 0);\n  }\n}\n\n@keyframes bounceOutRight {\n  20% {\n    opacity: 1;\n    -webkit-transform: translate3d(-20px, 0, 0);\n    transform: translate3d(-20px, 0, 0);\n  }\n\n  to {\n    opacity: 0;\n    -webkit-transform: translate3d(2000px, 0, 0);\n    transform: translate3d(2000px, 0, 0);\n  }\n}\n\n.bounceOutRight {\n  -webkit-animation-name: bounceOutRight;\n  animation-name: bounceOutRight;\n}\n\n@-webkit-keyframes bounceOutUp {\n  20% {\n    -webkit-transform: translate3d(0, -10px, 0);\n    transform: translate3d(0, -10px, 0);\n  }\n\n  40%,\n  45% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 20px, 0);\n    transform: translate3d(0, 20px, 0);\n  }\n\n  to {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -2000px, 0);\n    transform: translate3d(0, -2000px, 0);\n  }\n}\n\n@keyframes bounceOutUp {\n  20% {\n    -webkit-transform: translate3d(0, -10px, 0);\n    transform: translate3d(0, -10px, 0);\n  }\n\n  40%,\n  45% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 20px, 0);\n    transform: translate3d(0, 20px, 0);\n  }\n\n  to {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -2000px, 0);\n    transform: translate3d(0, -2000px, 0);\n  }\n}\n\n.bounceOutUp {\n  -webkit-animation-name: bounceOutUp;\n  animation-name: bounceOutUp;\n}\n\n@-webkit-keyframes fadeIn {\n  from {\n    opacity: 0;\n  }\n\n  to {\n    opacity: 1;\n  }\n}\n\n@keyframes fadeIn {\n  from {\n    opacity: 0;\n  }\n\n  to {\n    opacity: 1;\n  }\n}\n\n.fadeIn {\n  -webkit-animation-name: fadeIn;\n  animation-name: fadeIn;\n}\n\n@-webkit-keyframes fadeInDown {\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -100%, 0);\n    transform: translate3d(0, -100%, 0);\n  }\n\n  to {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n}\n\n@keyframes fadeInDown {\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -100%, 0);\n    transform: translate3d(0, -100%, 0);\n  }\n\n  to {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n}\n\n.fadeInDown {\n  -webkit-animation-name: fadeInDown;\n  animation-name: fadeInDown;\n}\n\n@-webkit-keyframes fadeInDownBig {\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -2000px, 0);\n    transform: translate3d(0, -2000px, 0);\n  }\n\n  to {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n}\n\n@keyframes fadeInDownBig {\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -2000px, 0);\n    transform: translate3d(0, -2000px, 0);\n  }\n\n  to {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n}\n\n.fadeInDownBig {\n  -webkit-animation-name: fadeInDownBig;\n  animation-name: fadeInDownBig;\n}\n\n@-webkit-keyframes fadeInLeft {\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(-100%, 0, 0);\n    transform: translate3d(-100%, 0, 0);\n  }\n\n  to {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n}\n\n@keyframes fadeInLeft {\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(-100%, 0, 0);\n    transform: translate3d(-100%, 0, 0);\n  }\n\n  to {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n}\n\n.fadeInLeft {\n  -webkit-animation-name: fadeInLeft;\n  animation-name: fadeInLeft;\n}\n\n@-webkit-keyframes fadeInLeftBig {\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(-2000px, 0, 0);\n    transform: translate3d(-2000px, 0, 0);\n  }\n\n  to {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n}\n\n@keyframes fadeInLeftBig {\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(-2000px, 0, 0);\n    transform: translate3d(-2000px, 0, 0);\n  }\n\n  to {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n}\n\n.fadeInLeftBig {\n  -webkit-animation-name: fadeInLeftBig;\n  animation-name: fadeInLeftBig;\n}\n\n@-webkit-keyframes fadeInRight {\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(100%, 0, 0);\n    transform: translate3d(100%, 0, 0);\n  }\n\n  to {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n}\n\n@keyframes fadeInRight {\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(100%, 0, 0);\n    transform: translate3d(100%, 0, 0);\n  }\n\n  to {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n}\n\n.fadeInRight {\n  -webkit-animation-name: fadeInRight;\n  animation-name: fadeInRight;\n}\n\n@-webkit-keyframes fadeInRightBig {\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(2000px, 0, 0);\n    transform: translate3d(2000px, 0, 0);\n  }\n\n  to {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n}\n\n@keyframes fadeInRightBig {\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(2000px, 0, 0);\n    transform: translate3d(2000px, 0, 0);\n  }\n\n  to {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n}\n\n.fadeInRightBig {\n  -webkit-animation-name: fadeInRightBig;\n  animation-name: fadeInRightBig;\n}\n\n@-webkit-keyframes fadeInUp {\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 100%, 0);\n    transform: translate3d(0, 100%, 0);\n  }\n\n  to {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n}\n\n@keyframes fadeInUp {\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 100%, 0);\n    transform: translate3d(0, 100%, 0);\n  }\n\n  to {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n}\n\n.fadeInUp {\n  -webkit-animation-name: fadeInUp;\n  animation-name: fadeInUp;\n}\n\n@-webkit-keyframes fadeInUpBig {\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 2000px, 0);\n    transform: translate3d(0, 2000px, 0);\n  }\n\n  to {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n}\n\n@keyframes fadeInUpBig {\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 2000px, 0);\n    transform: translate3d(0, 2000px, 0);\n  }\n\n  to {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n}\n\n.fadeInUpBig {\n  -webkit-animation-name: fadeInUpBig;\n  animation-name: fadeInUpBig;\n}\n\n@-webkit-keyframes fadeOut {\n  from {\n    opacity: 1;\n  }\n\n  to {\n    opacity: 0;\n  }\n}\n\n@keyframes fadeOut {\n  from {\n    opacity: 1;\n  }\n\n  to {\n    opacity: 0;\n  }\n}\n\n.fadeOut {\n  -webkit-animation-name: fadeOut;\n  animation-name: fadeOut;\n}\n\n@-webkit-keyframes fadeOutDown {\n  from {\n    opacity: 1;\n  }\n\n  to {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 100%, 0);\n    transform: translate3d(0, 100%, 0);\n  }\n}\n\n@keyframes fadeOutDown {\n  from {\n    opacity: 1;\n  }\n\n  to {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 100%, 0);\n    transform: translate3d(0, 100%, 0);\n  }\n}\n\n.fadeOutDown {\n  -webkit-animation-name: fadeOutDown;\n  animation-name: fadeOutDown;\n}\n\n@-webkit-keyframes fadeOutDownBig {\n  from {\n    opacity: 1;\n  }\n\n  to {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 2000px, 0);\n    transform: translate3d(0, 2000px, 0);\n  }\n}\n\n@keyframes fadeOutDownBig {\n  from {\n    opacity: 1;\n  }\n\n  to {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 2000px, 0);\n    transform: translate3d(0, 2000px, 0);\n  }\n}\n\n.fadeOutDownBig {\n  -webkit-animation-name: fadeOutDownBig;\n  animation-name: fadeOutDownBig;\n}\n\n@-webkit-keyframes fadeOutLeft {\n  from {\n    opacity: 1;\n  }\n\n  to {\n    opacity: 0;\n    -webkit-transform: translate3d(-100%, 0, 0);\n    transform: translate3d(-100%, 0, 0);\n  }\n}\n\n@keyframes fadeOutLeft {\n  from {\n    opacity: 1;\n  }\n\n  to {\n    opacity: 0;\n    -webkit-transform: translate3d(-100%, 0, 0);\n    transform: translate3d(-100%, 0, 0);\n  }\n}\n\n.fadeOutLeft {\n  -webkit-animation-name: fadeOutLeft;\n  animation-name: fadeOutLeft;\n}\n\n@-webkit-keyframes fadeOutLeftBig {\n  from {\n    opacity: 1;\n  }\n\n  to {\n    opacity: 0;\n    -webkit-transform: translate3d(-2000px, 0, 0);\n    transform: translate3d(-2000px, 0, 0);\n  }\n}\n\n@keyframes fadeOutLeftBig {\n  from {\n    opacity: 1;\n  }\n\n  to {\n    opacity: 0;\n    -webkit-transform: translate3d(-2000px, 0, 0);\n    transform: translate3d(-2000px, 0, 0);\n  }\n}\n\n.fadeOutLeftBig {\n  -webkit-animation-name: fadeOutLeftBig;\n  animation-name: fadeOutLeftBig;\n}\n\n@-webkit-keyframes fadeOutRight {\n  from {\n    opacity: 1;\n  }\n\n  to {\n    opacity: 0;\n    -webkit-transform: translate3d(100%, 0, 0);\n    transform: translate3d(100%, 0, 0);\n  }\n}\n\n@keyframes fadeOutRight {\n  from {\n    opacity: 1;\n  }\n\n  to {\n    opacity: 0;\n    -webkit-transform: translate3d(100%, 0, 0);\n    transform: translate3d(100%, 0, 0);\n  }\n}\n\n.fadeOutRight {\n  -webkit-animation-name: fadeOutRight;\n  animation-name: fadeOutRight;\n}\n\n@-webkit-keyframes fadeOutRightBig {\n  from {\n    opacity: 1;\n  }\n\n  to {\n    opacity: 0;\n    -webkit-transform: translate3d(2000px, 0, 0);\n    transform: translate3d(2000px, 0, 0);\n  }\n}\n\n@keyframes fadeOutRightBig {\n  from {\n    opacity: 1;\n  }\n\n  to {\n    opacity: 0;\n    -webkit-transform: translate3d(2000px, 0, 0);\n    transform: translate3d(2000px, 0, 0);\n  }\n}\n\n.fadeOutRightBig {\n  -webkit-animation-name: fadeOutRightBig;\n  animation-name: fadeOutRightBig;\n}\n\n@-webkit-keyframes fadeOutUp {\n  from {\n    opacity: 1;\n  }\n\n  to {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -100%, 0);\n    transform: translate3d(0, -100%, 0);\n  }\n}\n\n@keyframes fadeOutUp {\n  from {\n    opacity: 1;\n  }\n\n  to {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -100%, 0);\n    transform: translate3d(0, -100%, 0);\n  }\n}\n\n.fadeOutUp {\n  -webkit-animation-name: fadeOutUp;\n  animation-name: fadeOutUp;\n}\n\n@-webkit-keyframes fadeOutUpBig {\n  from {\n    opacity: 1;\n  }\n\n  to {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -2000px, 0);\n    transform: translate3d(0, -2000px, 0);\n  }\n}\n\n@keyframes fadeOutUpBig {\n  from {\n    opacity: 1;\n  }\n\n  to {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -2000px, 0);\n    transform: translate3d(0, -2000px, 0);\n  }\n}\n\n.fadeOutUpBig {\n  -webkit-animation-name: fadeOutUpBig;\n  animation-name: fadeOutUpBig;\n}\n\n@-webkit-keyframes flip {\n  from {\n    -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0)\n      rotate3d(0, 1, 0, -360deg);\n    transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) rotate3d(0, 1, 0, -360deg);\n    -webkit-animation-timing-function: ease-out;\n    animation-timing-function: ease-out;\n  }\n\n  40% {\n    -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px)\n      rotate3d(0, 1, 0, -190deg);\n    transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px)\n      rotate3d(0, 1, 0, -190deg);\n    -webkit-animation-timing-function: ease-out;\n    animation-timing-function: ease-out;\n  }\n\n  50% {\n    -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px)\n      rotate3d(0, 1, 0, -170deg);\n    transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px)\n      rotate3d(0, 1, 0, -170deg);\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in;\n  }\n\n  80% {\n    -webkit-transform: perspective(400px) scale3d(0.95, 0.95, 0.95) translate3d(0, 0, 0)\n      rotate3d(0, 1, 0, 0deg);\n    transform: perspective(400px) scale3d(0.95, 0.95, 0.95) translate3d(0, 0, 0)\n      rotate3d(0, 1, 0, 0deg);\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in;\n  }\n\n  to {\n    -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0)\n      rotate3d(0, 1, 0, 0deg);\n    transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) rotate3d(0, 1, 0, 0deg);\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in;\n  }\n}\n\n@keyframes flip {\n  from {\n    -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0)\n      rotate3d(0, 1, 0, -360deg);\n    transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) rotate3d(0, 1, 0, -360deg);\n    -webkit-animation-timing-function: ease-out;\n    animation-timing-function: ease-out;\n  }\n\n  40% {\n    -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px)\n      rotate3d(0, 1, 0, -190deg);\n    transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px)\n      rotate3d(0, 1, 0, -190deg);\n    -webkit-animation-timing-function: ease-out;\n    animation-timing-function: ease-out;\n  }\n\n  50% {\n    -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px)\n      rotate3d(0, 1, 0, -170deg);\n    transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px)\n      rotate3d(0, 1, 0, -170deg);\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in;\n  }\n\n  80% {\n    -webkit-transform: perspective(400px) scale3d(0.95, 0.95, 0.95) translate3d(0, 0, 0)\n      rotate3d(0, 1, 0, 0deg);\n    transform: perspective(400px) scale3d(0.95, 0.95, 0.95) translate3d(0, 0, 0)\n      rotate3d(0, 1, 0, 0deg);\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in;\n  }\n\n  to {\n    -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0)\n      rotate3d(0, 1, 0, 0deg);\n    transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) rotate3d(0, 1, 0, 0deg);\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in;\n  }\n}\n\n.animated.flip {\n  -webkit-backface-visibility: visible;\n  backface-visibility: visible;\n  -webkit-animation-name: flip;\n  animation-name: flip;\n}\n\n@-webkit-keyframes flipInX {\n  from {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n    transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in;\n    opacity: 0;\n  }\n\n  40% {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n    transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in;\n  }\n\n  60% {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);\n    transform: perspective(400px) rotate3d(1, 0, 0, 10deg);\n    opacity: 1;\n  }\n\n  80% {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);\n    transform: perspective(400px) rotate3d(1, 0, 0, -5deg);\n  }\n\n  to {\n    -webkit-transform: perspective(400px);\n    transform: perspective(400px);\n  }\n}\n\n@keyframes flipInX {\n  from {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n    transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in;\n    opacity: 0;\n  }\n\n  40% {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n    transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in;\n  }\n\n  60% {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);\n    transform: perspective(400px) rotate3d(1, 0, 0, 10deg);\n    opacity: 1;\n  }\n\n  80% {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);\n    transform: perspective(400px) rotate3d(1, 0, 0, -5deg);\n  }\n\n  to {\n    -webkit-transform: perspective(400px);\n    transform: perspective(400px);\n  }\n}\n\n.flipInX {\n  -webkit-backface-visibility: visible !important;\n  backface-visibility: visible !important;\n  -webkit-animation-name: flipInX;\n  animation-name: flipInX;\n}\n\n@-webkit-keyframes flipInY {\n  from {\n    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);\n    transform: perspective(400px) rotate3d(0, 1, 0, 90deg);\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in;\n    opacity: 0;\n  }\n\n  40% {\n    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg);\n    transform: perspective(400px) rotate3d(0, 1, 0, -20deg);\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in;\n  }\n\n  60% {\n    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg);\n    transform: perspective(400px) rotate3d(0, 1, 0, 10deg);\n    opacity: 1;\n  }\n\n  80% {\n    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg);\n    transform: perspective(400px) rotate3d(0, 1, 0, -5deg);\n  }\n\n  to {\n    -webkit-transform: perspective(400px);\n    transform: perspective(400px);\n  }\n}\n\n@keyframes flipInY {\n  from {\n    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);\n    transform: perspective(400px) rotate3d(0, 1, 0, 90deg);\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in;\n    opacity: 0;\n  }\n\n  40% {\n    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg);\n    transform: perspective(400px) rotate3d(0, 1, 0, -20deg);\n    -webkit-animation-timing-function: ease-in;\n    animation-timing-function: ease-in;\n  }\n\n  60% {\n    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg);\n    transform: perspective(400px) rotate3d(0, 1, 0, 10deg);\n    opacity: 1;\n  }\n\n  80% {\n    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg);\n    transform: perspective(400px) rotate3d(0, 1, 0, -5deg);\n  }\n\n  to {\n    -webkit-transform: perspective(400px);\n    transform: perspective(400px);\n  }\n}\n\n.flipInY {\n  -webkit-backface-visibility: visible !important;\n  backface-visibility: visible !important;\n  -webkit-animation-name: flipInY;\n  animation-name: flipInY;\n}\n\n@-webkit-keyframes flipOutX {\n  from {\n    -webkit-transform: perspective(400px);\n    transform: perspective(400px);\n  }\n\n  30% {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n    transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n    opacity: 1;\n  }\n\n  to {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n    transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n    opacity: 0;\n  }\n}\n\n@keyframes flipOutX {\n  from {\n    -webkit-transform: perspective(400px);\n    transform: perspective(400px);\n  }\n\n  30% {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n    transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n    opacity: 1;\n  }\n\n  to {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n    transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n    opacity: 0;\n  }\n}\n\n.flipOutX {\n  -webkit-animation-duration: 0.75s;\n  animation-duration: 0.75s;\n  -webkit-animation-name: flipOutX;\n  animation-name: flipOutX;\n  -webkit-backface-visibility: visible !important;\n  backface-visibility: visible !important;\n}\n\n@-webkit-keyframes flipOutY {\n  from {\n    -webkit-transform: perspective(400px);\n    transform: perspective(400px);\n  }\n\n  30% {\n    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg);\n    transform: perspective(400px) rotate3d(0, 1, 0, -15deg);\n    opacity: 1;\n  }\n\n  to {\n    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);\n    transform: perspective(400px) rotate3d(0, 1, 0, 90deg);\n    opacity: 0;\n  }\n}\n\n@keyframes flipOutY {\n  from {\n    -webkit-transform: perspective(400px);\n    transform: perspective(400px);\n  }\n\n  30% {\n    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg);\n    transform: perspective(400px) rotate3d(0, 1, 0, -15deg);\n    opacity: 1;\n  }\n\n  to {\n    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);\n    transform: perspective(400px) rotate3d(0, 1, 0, 90deg);\n    opacity: 0;\n  }\n}\n\n.flipOutY {\n  -webkit-animation-duration: 0.75s;\n  animation-duration: 0.75s;\n  -webkit-backface-visibility: visible !important;\n  backface-visibility: visible !important;\n  -webkit-animation-name: flipOutY;\n  animation-name: flipOutY;\n}\n\n@-webkit-keyframes lightSpeedIn {\n  from {\n    -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg);\n    transform: translate3d(100%, 0, 0) skewX(-30deg);\n    opacity: 0;\n  }\n\n  60% {\n    -webkit-transform: skewX(20deg);\n    transform: skewX(20deg);\n    opacity: 1;\n  }\n\n  80% {\n    -webkit-transform: skewX(-5deg);\n    transform: skewX(-5deg);\n  }\n\n  to {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n}\n\n@keyframes lightSpeedIn {\n  from {\n    -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg);\n    transform: translate3d(100%, 0, 0) skewX(-30deg);\n    opacity: 0;\n  }\n\n  60% {\n    -webkit-transform: skewX(20deg);\n    transform: skewX(20deg);\n    opacity: 1;\n  }\n\n  80% {\n    -webkit-transform: skewX(-5deg);\n    transform: skewX(-5deg);\n  }\n\n  to {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n}\n\n.lightSpeedIn {\n  -webkit-animation-name: lightSpeedIn;\n  animation-name: lightSpeedIn;\n  -webkit-animation-timing-function: ease-out;\n  animation-timing-function: ease-out;\n}\n\n@-webkit-keyframes lightSpeedOut {\n  from {\n    opacity: 1;\n  }\n\n  to {\n    -webkit-transform: translate3d(100%, 0, 0) skewX(30deg);\n    transform: translate3d(100%, 0, 0) skewX(30deg);\n    opacity: 0;\n  }\n}\n\n@keyframes lightSpeedOut {\n  from {\n    opacity: 1;\n  }\n\n  to {\n    -webkit-transform: translate3d(100%, 0, 0) skewX(30deg);\n    transform: translate3d(100%, 0, 0) skewX(30deg);\n    opacity: 0;\n  }\n}\n\n.lightSpeedOut {\n  -webkit-animation-name: lightSpeedOut;\n  animation-name: lightSpeedOut;\n  -webkit-animation-timing-function: ease-in;\n  animation-timing-function: ease-in;\n}\n\n@-webkit-keyframes rotateIn {\n  from {\n    -webkit-transform-origin: center;\n    transform-origin: center;\n    -webkit-transform: rotate3d(0, 0, 1, -200deg);\n    transform: rotate3d(0, 0, 1, -200deg);\n    opacity: 0;\n  }\n\n  to {\n    -webkit-transform-origin: center;\n    transform-origin: center;\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n    opacity: 1;\n  }\n}\n\n@keyframes rotateIn {\n  from {\n    -webkit-transform-origin: center;\n    transform-origin: center;\n    -webkit-transform: rotate3d(0, 0, 1, -200deg);\n    transform: rotate3d(0, 0, 1, -200deg);\n    opacity: 0;\n  }\n\n  to {\n    -webkit-transform-origin: center;\n    transform-origin: center;\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n    opacity: 1;\n  }\n}\n\n.rotateIn {\n  -webkit-animation-name: rotateIn;\n  animation-name: rotateIn;\n}\n\n@-webkit-keyframes rotateInDownLeft {\n  from {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: rotate3d(0, 0, 1, -45deg);\n    transform: rotate3d(0, 0, 1, -45deg);\n    opacity: 0;\n  }\n\n  to {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n    opacity: 1;\n  }\n}\n\n@keyframes rotateInDownLeft {\n  from {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: rotate3d(0, 0, 1, -45deg);\n    transform: rotate3d(0, 0, 1, -45deg);\n    opacity: 0;\n  }\n\n  to {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n    opacity: 1;\n  }\n}\n\n.rotateInDownLeft {\n  -webkit-animation-name: rotateInDownLeft;\n  animation-name: rotateInDownLeft;\n}\n\n@-webkit-keyframes rotateInDownRight {\n  from {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: rotate3d(0, 0, 1, 45deg);\n    transform: rotate3d(0, 0, 1, 45deg);\n    opacity: 0;\n  }\n\n  to {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n    opacity: 1;\n  }\n}\n\n@keyframes rotateInDownRight {\n  from {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: rotate3d(0, 0, 1, 45deg);\n    transform: rotate3d(0, 0, 1, 45deg);\n    opacity: 0;\n  }\n\n  to {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n    opacity: 1;\n  }\n}\n\n.rotateInDownRight {\n  -webkit-animation-name: rotateInDownRight;\n  animation-name: rotateInDownRight;\n}\n\n@-webkit-keyframes rotateInUpLeft {\n  from {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: rotate3d(0, 0, 1, 45deg);\n    transform: rotate3d(0, 0, 1, 45deg);\n    opacity: 0;\n  }\n\n  to {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n    opacity: 1;\n  }\n}\n\n@keyframes rotateInUpLeft {\n  from {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: rotate3d(0, 0, 1, 45deg);\n    transform: rotate3d(0, 0, 1, 45deg);\n    opacity: 0;\n  }\n\n  to {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n    opacity: 1;\n  }\n}\n\n.rotateInUpLeft {\n  -webkit-animation-name: rotateInUpLeft;\n  animation-name: rotateInUpLeft;\n}\n\n@-webkit-keyframes rotateInUpRight {\n  from {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: rotate3d(0, 0, 1, -90deg);\n    transform: rotate3d(0, 0, 1, -90deg);\n    opacity: 0;\n  }\n\n  to {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n    opacity: 1;\n  }\n}\n\n@keyframes rotateInUpRight {\n  from {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: rotate3d(0, 0, 1, -90deg);\n    transform: rotate3d(0, 0, 1, -90deg);\n    opacity: 0;\n  }\n\n  to {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n    opacity: 1;\n  }\n}\n\n.rotateInUpRight {\n  -webkit-animation-name: rotateInUpRight;\n  animation-name: rotateInUpRight;\n}\n\n@-webkit-keyframes rotateOut {\n  from {\n    -webkit-transform-origin: center;\n    transform-origin: center;\n    opacity: 1;\n  }\n\n  to {\n    -webkit-transform-origin: center;\n    transform-origin: center;\n    -webkit-transform: rotate3d(0, 0, 1, 200deg);\n    transform: rotate3d(0, 0, 1, 200deg);\n    opacity: 0;\n  }\n}\n\n@keyframes rotateOut {\n  from {\n    -webkit-transform-origin: center;\n    transform-origin: center;\n    opacity: 1;\n  }\n\n  to {\n    -webkit-transform-origin: center;\n    transform-origin: center;\n    -webkit-transform: rotate3d(0, 0, 1, 200deg);\n    transform: rotate3d(0, 0, 1, 200deg);\n    opacity: 0;\n  }\n}\n\n.rotateOut {\n  -webkit-animation-name: rotateOut;\n  animation-name: rotateOut;\n}\n\n@-webkit-keyframes rotateOutDownLeft {\n  from {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    opacity: 1;\n  }\n\n  to {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: rotate3d(0, 0, 1, 45deg);\n    transform: rotate3d(0, 0, 1, 45deg);\n    opacity: 0;\n  }\n}\n\n@keyframes rotateOutDownLeft {\n  from {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    opacity: 1;\n  }\n\n  to {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: rotate3d(0, 0, 1, 45deg);\n    transform: rotate3d(0, 0, 1, 45deg);\n    opacity: 0;\n  }\n}\n\n.rotateOutDownLeft {\n  -webkit-animation-name: rotateOutDownLeft;\n  animation-name: rotateOutDownLeft;\n}\n\n@-webkit-keyframes rotateOutDownRight {\n  from {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    opacity: 1;\n  }\n\n  to {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: rotate3d(0, 0, 1, -45deg);\n    transform: rotate3d(0, 0, 1, -45deg);\n    opacity: 0;\n  }\n}\n\n@keyframes rotateOutDownRight {\n  from {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    opacity: 1;\n  }\n\n  to {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: rotate3d(0, 0, 1, -45deg);\n    transform: rotate3d(0, 0, 1, -45deg);\n    opacity: 0;\n  }\n}\n\n.rotateOutDownRight {\n  -webkit-animation-name: rotateOutDownRight;\n  animation-name: rotateOutDownRight;\n}\n\n@-webkit-keyframes rotateOutUpLeft {\n  from {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    opacity: 1;\n  }\n\n  to {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: rotate3d(0, 0, 1, -45deg);\n    transform: rotate3d(0, 0, 1, -45deg);\n    opacity: 0;\n  }\n}\n\n@keyframes rotateOutUpLeft {\n  from {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    opacity: 1;\n  }\n\n  to {\n    -webkit-transform-origin: left bottom;\n    transform-origin: left bottom;\n    -webkit-transform: rotate3d(0, 0, 1, -45deg);\n    transform: rotate3d(0, 0, 1, -45deg);\n    opacity: 0;\n  }\n}\n\n.rotateOutUpLeft {\n  -webkit-animation-name: rotateOutUpLeft;\n  animation-name: rotateOutUpLeft;\n}\n\n@-webkit-keyframes rotateOutUpRight {\n  from {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    opacity: 1;\n  }\n\n  to {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: rotate3d(0, 0, 1, 90deg);\n    transform: rotate3d(0, 0, 1, 90deg);\n    opacity: 0;\n  }\n}\n\n@keyframes rotateOutUpRight {\n  from {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    opacity: 1;\n  }\n\n  to {\n    -webkit-transform-origin: right bottom;\n    transform-origin: right bottom;\n    -webkit-transform: rotate3d(0, 0, 1, 90deg);\n    transform: rotate3d(0, 0, 1, 90deg);\n    opacity: 0;\n  }\n}\n\n.rotateOutUpRight {\n  -webkit-animation-name: rotateOutUpRight;\n  animation-name: rotateOutUpRight;\n}\n\n@-webkit-keyframes hinge {\n  0% {\n    -webkit-transform-origin: top left;\n    transform-origin: top left;\n    -webkit-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out;\n  }\n\n  20%,\n  60% {\n    -webkit-transform: rotate3d(0, 0, 1, 80deg);\n    transform: rotate3d(0, 0, 1, 80deg);\n    -webkit-transform-origin: top left;\n    transform-origin: top left;\n    -webkit-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out;\n  }\n\n  40%,\n  80% {\n    -webkit-transform: rotate3d(0, 0, 1, 60deg);\n    transform: rotate3d(0, 0, 1, 60deg);\n    -webkit-transform-origin: top left;\n    transform-origin: top left;\n    -webkit-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out;\n    opacity: 1;\n  }\n\n  to {\n    -webkit-transform: translate3d(0, 700px, 0);\n    transform: translate3d(0, 700px, 0);\n    opacity: 0;\n  }\n}\n\n@keyframes hinge {\n  0% {\n    -webkit-transform-origin: top left;\n    transform-origin: top left;\n    -webkit-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out;\n  }\n\n  20%,\n  60% {\n    -webkit-transform: rotate3d(0, 0, 1, 80deg);\n    transform: rotate3d(0, 0, 1, 80deg);\n    -webkit-transform-origin: top left;\n    transform-origin: top left;\n    -webkit-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out;\n  }\n\n  40%,\n  80% {\n    -webkit-transform: rotate3d(0, 0, 1, 60deg);\n    transform: rotate3d(0, 0, 1, 60deg);\n    -webkit-transform-origin: top left;\n    transform-origin: top left;\n    -webkit-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out;\n    opacity: 1;\n  }\n\n  to {\n    -webkit-transform: translate3d(0, 700px, 0);\n    transform: translate3d(0, 700px, 0);\n    opacity: 0;\n  }\n}\n\n.hinge {\n  -webkit-animation-duration: 2s;\n  animation-duration: 2s;\n  -webkit-animation-name: hinge;\n  animation-name: hinge;\n}\n\n@-webkit-keyframes jackInTheBox {\n  from {\n    opacity: 0;\n    -webkit-transform: scale(0.1) rotate(30deg);\n    transform: scale(0.1) rotate(30deg);\n    -webkit-transform-origin: center bottom;\n    transform-origin: center bottom;\n  }\n\n  50% {\n    -webkit-transform: rotate(-10deg);\n    transform: rotate(-10deg);\n  }\n\n  70% {\n    -webkit-transform: rotate(3deg);\n    transform: rotate(3deg);\n  }\n\n  to {\n    opacity: 1;\n    -webkit-transform: scale(1);\n    transform: scale(1);\n  }\n}\n\n@keyframes jackInTheBox {\n  from {\n    opacity: 0;\n    -webkit-transform: scale(0.1) rotate(30deg);\n    transform: scale(0.1) rotate(30deg);\n    -webkit-transform-origin: center bottom;\n    transform-origin: center bottom;\n  }\n\n  50% {\n    -webkit-transform: rotate(-10deg);\n    transform: rotate(-10deg);\n  }\n\n  70% {\n    -webkit-transform: rotate(3deg);\n    transform: rotate(3deg);\n  }\n\n  to {\n    opacity: 1;\n    -webkit-transform: scale(1);\n    transform: scale(1);\n  }\n}\n\n.jackInTheBox {\n  -webkit-animation-name: jackInTheBox;\n  animation-name: jackInTheBox;\n}\n\n/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */\n\n@-webkit-keyframes rollIn {\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);\n    transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);\n  }\n\n  to {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n}\n\n@keyframes rollIn {\n  from {\n    opacity: 0;\n    -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);\n    transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);\n  }\n\n  to {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n}\n\n.rollIn {\n  -webkit-animation-name: rollIn;\n  animation-name: rollIn;\n}\n\n/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */\n\n@-webkit-keyframes rollOut {\n  from {\n    opacity: 1;\n  }\n\n  to {\n    opacity: 0;\n    -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);\n    transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);\n  }\n}\n\n@keyframes rollOut {\n  from {\n    opacity: 1;\n  }\n\n  to {\n    opacity: 0;\n    -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);\n    transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);\n  }\n}\n\n.rollOut {\n  -webkit-animation-name: rollOut;\n  animation-name: rollOut;\n}\n\n@-webkit-keyframes zoomIn {\n  from {\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  50% {\n    opacity: 1;\n  }\n}\n\n@keyframes zoomIn {\n  from {\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  50% {\n    opacity: 1;\n  }\n}\n\n.zoomIn {\n  -webkit-animation-name: zoomIn;\n  animation-name: zoomIn;\n}\n\n@-webkit-keyframes zoomInDown {\n  from {\n    opacity: 0;\n    -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0);\n    transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n    animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);\n    transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n    animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n  }\n}\n\n@keyframes zoomInDown {\n  from {\n    opacity: 0;\n    -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0);\n    transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n    animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);\n    transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n    animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n  }\n}\n\n.zoomInDown {\n  -webkit-animation-name: zoomInDown;\n  animation-name: zoomInDown;\n}\n\n@-webkit-keyframes zoomInLeft {\n  from {\n    opacity: 0;\n    -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0);\n    transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n    animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0);\n    transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n    animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n  }\n}\n\n@keyframes zoomInLeft {\n  from {\n    opacity: 0;\n    -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0);\n    transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n    animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0);\n    transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n    animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n  }\n}\n\n.zoomInLeft {\n  -webkit-animation-name: zoomInLeft;\n  animation-name: zoomInLeft;\n}\n\n@-webkit-keyframes zoomInRight {\n  from {\n    opacity: 0;\n    -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0);\n    transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n    animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0);\n    transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n    animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n  }\n}\n\n@keyframes zoomInRight {\n  from {\n    opacity: 0;\n    -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0);\n    transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n    animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0);\n    transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n    animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n  }\n}\n\n.zoomInRight {\n  -webkit-animation-name: zoomInRight;\n  animation-name: zoomInRight;\n}\n\n@-webkit-keyframes zoomInUp {\n  from {\n    opacity: 0;\n    -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0);\n    transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n    animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);\n    transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n    animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n  }\n}\n\n@keyframes zoomInUp {\n  from {\n    opacity: 0;\n    -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0);\n    transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n    animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);\n    transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n    animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n  }\n}\n\n.zoomInUp {\n  -webkit-animation-name: zoomInUp;\n  animation-name: zoomInUp;\n}\n\n@-webkit-keyframes zoomOut {\n  from {\n    opacity: 1;\n  }\n\n  50% {\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  to {\n    opacity: 0;\n  }\n}\n\n@keyframes zoomOut {\n  from {\n    opacity: 1;\n  }\n\n  50% {\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  to {\n    opacity: 0;\n  }\n}\n\n.zoomOut {\n  -webkit-animation-name: zoomOut;\n  animation-name: zoomOut;\n}\n\n@-webkit-keyframes zoomOutDown {\n  40% {\n    opacity: 1;\n    -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);\n    transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n    animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n  }\n\n  to {\n    opacity: 0;\n    -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0);\n    transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0);\n    -webkit-transform-origin: center bottom;\n    transform-origin: center bottom;\n    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n    animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n  }\n}\n\n@keyframes zoomOutDown {\n  40% {\n    opacity: 1;\n    -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);\n    transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n    animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n  }\n\n  to {\n    opacity: 0;\n    -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0);\n    transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0);\n    -webkit-transform-origin: center bottom;\n    transform-origin: center bottom;\n    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n    animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n  }\n}\n\n.zoomOutDown {\n  -webkit-animation-name: zoomOutDown;\n  animation-name: zoomOutDown;\n}\n\n@-webkit-keyframes zoomOutLeft {\n  40% {\n    opacity: 1;\n    -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0);\n    transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0);\n  }\n\n  to {\n    opacity: 0;\n    -webkit-transform: scale(0.1) translate3d(-2000px, 0, 0);\n    transform: scale(0.1) translate3d(-2000px, 0, 0);\n    -webkit-transform-origin: left center;\n    transform-origin: left center;\n  }\n}\n\n@keyframes zoomOutLeft {\n  40% {\n    opacity: 1;\n    -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0);\n    transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0);\n  }\n\n  to {\n    opacity: 0;\n    -webkit-transform: scale(0.1) translate3d(-2000px, 0, 0);\n    transform: scale(0.1) translate3d(-2000px, 0, 0);\n    -webkit-transform-origin: left center;\n    transform-origin: left center;\n  }\n}\n\n.zoomOutLeft {\n  -webkit-animation-name: zoomOutLeft;\n  animation-name: zoomOutLeft;\n}\n\n@-webkit-keyframes zoomOutRight {\n  40% {\n    opacity: 1;\n    -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0);\n    transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0);\n  }\n\n  to {\n    opacity: 0;\n    -webkit-transform: scale(0.1) translate3d(2000px, 0, 0);\n    transform: scale(0.1) translate3d(2000px, 0, 0);\n    -webkit-transform-origin: right center;\n    transform-origin: right center;\n  }\n}\n\n@keyframes zoomOutRight {\n  40% {\n    opacity: 1;\n    -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0);\n    transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0);\n  }\n\n  to {\n    opacity: 0;\n    -webkit-transform: scale(0.1) translate3d(2000px, 0, 0);\n    transform: scale(0.1) translate3d(2000px, 0, 0);\n    -webkit-transform-origin: right center;\n    transform-origin: right center;\n  }\n}\n\n.zoomOutRight {\n  -webkit-animation-name: zoomOutRight;\n  animation-name: zoomOutRight;\n}\n\n@-webkit-keyframes zoomOutUp {\n  40% {\n    opacity: 1;\n    -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);\n    transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n    animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n  }\n\n  to {\n    opacity: 0;\n    -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0);\n    transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0);\n    -webkit-transform-origin: center bottom;\n    transform-origin: center bottom;\n    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n    animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n  }\n}\n\n@keyframes zoomOutUp {\n  40% {\n    opacity: 1;\n    -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);\n    transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);\n    -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n    animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);\n  }\n\n  to {\n    opacity: 0;\n    -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0);\n    transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0);\n    -webkit-transform-origin: center bottom;\n    transform-origin: center bottom;\n    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n    animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);\n  }\n}\n\n.zoomOutUp {\n  -webkit-animation-name: zoomOutUp;\n  animation-name: zoomOutUp;\n}\n\n@-webkit-keyframes slideInDown {\n  from {\n    -webkit-transform: translate3d(0, -100%, 0);\n    transform: translate3d(0, -100%, 0);\n    visibility: visible;\n  }\n\n  to {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n}\n\n@keyframes slideInDown {\n  from {\n    -webkit-transform: translate3d(0, -100%, 0);\n    transform: translate3d(0, -100%, 0);\n    visibility: visible;\n  }\n\n  to {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n}\n\n.slideInDown {\n  -webkit-animation-name: slideInDown;\n  animation-name: slideInDown;\n}\n\n@-webkit-keyframes slideInLeft {\n  from {\n    -webkit-transform: translate3d(-100%, 0, 0);\n    transform: translate3d(-100%, 0, 0);\n    visibility: visible;\n  }\n\n  to {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n}\n\n@keyframes slideInLeft {\n  from {\n    -webkit-transform: translate3d(-100%, 0, 0);\n    transform: translate3d(-100%, 0, 0);\n    visibility: visible;\n  }\n\n  to {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n}\n\n.slideInLeft {\n  -webkit-animation-name: slideInLeft;\n  animation-name: slideInLeft;\n}\n\n@-webkit-keyframes slideInRight {\n  from {\n    -webkit-transform: translate3d(100%, 0, 0);\n    transform: translate3d(100%, 0, 0);\n    visibility: visible;\n  }\n\n  to {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n}\n\n@keyframes slideInRight {\n  from {\n    -webkit-transform: translate3d(100%, 0, 0);\n    transform: translate3d(100%, 0, 0);\n    visibility: visible;\n  }\n\n  to {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n}\n\n.slideInRight {\n  -webkit-animation-name: slideInRight;\n  animation-name: slideInRight;\n}\n\n@-webkit-keyframes slideInUp {\n  from {\n    -webkit-transform: translate3d(0, 100%, 0);\n    transform: translate3d(0, 100%, 0);\n    visibility: visible;\n  }\n\n  to {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n}\n\n@keyframes slideInUp {\n  from {\n    -webkit-transform: translate3d(0, 100%, 0);\n    transform: translate3d(0, 100%, 0);\n    visibility: visible;\n  }\n\n  to {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n}\n\n.slideInUp {\n  -webkit-animation-name: slideInUp;\n  animation-name: slideInUp;\n}\n\n@-webkit-keyframes slideOutDown {\n  from {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n\n  to {\n    visibility: hidden;\n    -webkit-transform: translate3d(0, 100%, 0);\n    transform: translate3d(0, 100%, 0);\n  }\n}\n\n@keyframes slideOutDown {\n  from {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n\n  to {\n    visibility: hidden;\n    -webkit-transform: translate3d(0, 100%, 0);\n    transform: translate3d(0, 100%, 0);\n  }\n}\n\n.slideOutDown {\n  -webkit-animation-name: slideOutDown;\n  animation-name: slideOutDown;\n}\n\n@-webkit-keyframes slideOutLeft {\n  from {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n\n  to {\n    visibility: hidden;\n    -webkit-transform: translate3d(-100%, 0, 0);\n    transform: translate3d(-100%, 0, 0);\n  }\n}\n\n@keyframes slideOutLeft {\n  from {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n\n  to {\n    visibility: hidden;\n    -webkit-transform: translate3d(-100%, 0, 0);\n    transform: translate3d(-100%, 0, 0);\n  }\n}\n\n.slideOutLeft {\n  -webkit-animation-name: slideOutLeft;\n  animation-name: slideOutLeft;\n}\n\n@-webkit-keyframes slideOutRight {\n  from {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n\n  to {\n    visibility: hidden;\n    -webkit-transform: translate3d(100%, 0, 0);\n    transform: translate3d(100%, 0, 0);\n  }\n}\n\n@keyframes slideOutRight {\n  from {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n\n  to {\n    visibility: hidden;\n    -webkit-transform: translate3d(100%, 0, 0);\n    transform: translate3d(100%, 0, 0);\n  }\n}\n\n.slideOutRight {\n  -webkit-animation-name: slideOutRight;\n  animation-name: slideOutRight;\n}\n\n@-webkit-keyframes slideOutUp {\n  from {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n\n  to {\n    visibility: hidden;\n    -webkit-transform: translate3d(0, -100%, 0);\n    transform: translate3d(0, -100%, 0);\n  }\n}\n\n@keyframes slideOutUp {\n  from {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n\n  to {\n    visibility: hidden;\n    -webkit-transform: translate3d(0, -100%, 0);\n    transform: translate3d(0, -100%, 0);\n  }\n}\n\n.slideOutUp {\n  -webkit-animation-name: slideOutUp;\n  animation-name: slideOutUp;\n}\n\n.animated {\n  -webkit-animation-duration: 1s;\n  animation-duration: 1s;\n  -webkit-animation-fill-mode: both;\n  animation-fill-mode: both;\n}\n\n.animated.infinite {\n  -webkit-animation-iteration-count: infinite;\n  animation-iteration-count: infinite;\n}\n\n.animated.delay-1s {\n  -webkit-animation-delay: 1s;\n  animation-delay: 1s;\n}\n\n.animated.delay-2s {\n  -webkit-animation-delay: 2s;\n  animation-delay: 2s;\n}\n\n.animated.delay-3s {\n  -webkit-animation-delay: 3s;\n  animation-delay: 3s;\n}\n\n.animated.delay-4s {\n  -webkit-animation-delay: 4s;\n  animation-delay: 4s;\n}\n\n.animated.delay-5s {\n  -webkit-animation-delay: 5s;\n  animation-delay: 5s;\n}\n\n.animated.fast {\n  -webkit-animation-duration: 800ms;\n  animation-duration: 800ms;\n}\n\n.animated.faster {\n  -webkit-animation-duration: 500ms;\n  animation-duration: 500ms;\n}\n\n.animated.slow {\n  -webkit-animation-duration: 2s;\n  animation-duration: 2s;\n}\n\n.animated.slower {\n  -webkit-animation-duration: 3s;\n  animation-duration: 3s;\n}\n\n@media (print), (prefers-reduced-motion: reduce) {\n  .animated {\n    -webkit-animation-duration: 1ms !important;\n    animation-duration: 1ms !important;\n    -webkit-transition-duration: 1ms !important;\n    transition-duration: 1ms !important;\n    -webkit-animation-iteration-count: 1 !important;\n    animation-iteration-count: 1 !important;\n  }\n}\n"
  },
  {
    "path": "public/backend/vendors/css/charts/apexcharts.css",
    "content": ".apexcharts-canvas {\n  position: relative;\n  user-select: none;\n  /* cannot give overflow: hidden as it will crop tooltips which overflow outside chart area */\n}\n\n/* scrollbar is not visible by default for legend, hence forcing the visibility */\n.apexcharts-canvas ::-webkit-scrollbar {\n  -webkit-appearance: none;\n  width: 6px;\n}\n.apexcharts-canvas ::-webkit-scrollbar-thumb {\n  border-radius: 4px;\n  background-color: rgba(0,0,0,.5);\n  box-shadow: 0 0 1px rgba(255,255,255,.5);\n  -webkit-box-shadow: 0 0 1px rgba(255,255,255,.5);\n}\n.apexcharts-canvas.dark {\n  background: #343F57;\n}\n\n.apexcharts-inner {\n  position: relative;\n}\n\n.legend-mouseover-inactive {\n  transition: 0.15s ease all;\n  opacity: 0.20;\n}\n\n.apexcharts-series-collapsed {\n  opacity: 0;\n}\n\n.apexcharts-gridline, .apexcharts-text {\n  pointer-events: none;\n}\n\n.apexcharts-tooltip {\n  border-radius: 5px;\n  box-shadow: 2px 2px 6px -4px #999;\n  cursor: default;\n  font-size: 14px;\n  left: 62px;\n  opacity: 0;\n  pointer-events: none;\n  position: absolute;\n  top: 20px;\n  overflow: hidden;\n  white-space: nowrap;\n  z-index: 12;\n  transition: 0.15s ease all;\n}\n.apexcharts-tooltip.light {\n  border: 1px solid #e3e3e3;\n  background: rgba(255, 255, 255, 0.96);\n}\n.apexcharts-tooltip.dark {\n  color: #fff;\n  background: rgba(30,30,30, 0.8);\n}\n.apexcharts-tooltip * {\n  font-family: inherit;\n}\n\n.apexcharts-tooltip .apexcharts-marker,\n.apexcharts-area-series .apexcharts-area,\n.apexcharts-line {\n  pointer-events: none;\n}\n\n.apexcharts-tooltip.active {\n  opacity: 1;\n  transition: 0.15s ease all;\n}\n\n.apexcharts-tooltip-title {\n  padding: 6px;\n  font-size: 15px;\n  margin-bottom: 4px;\n}\n.apexcharts-tooltip.light .apexcharts-tooltip-title {\n  background: #ECEFF1;\n  border-bottom: 1px solid #ddd;\n}\n.apexcharts-tooltip.dark .apexcharts-tooltip-title {\n  background: rgba(0, 0, 0, 0.7);\n  border-bottom: 1px solid #333;\n}\n\n.apexcharts-tooltip-text-value,\n.apexcharts-tooltip-text-z-value {\n  display: inline-block;\n  font-weight: 600;\n  margin-left: 5px;\n}\n\n.apexcharts-tooltip-text-z-label:empty,\n.apexcharts-tooltip-text-z-value:empty {\n  display: none;\n}\n\n.apexcharts-tooltip-text-value, \n.apexcharts-tooltip-text-z-value {\n  font-weight: 600;\n}\n\n.apexcharts-tooltip-marker {\n  width: 12px;\n  height: 12px;\n  position: relative;\n  top: 0px;\n  margin-right: 10px;\n  border-radius: 50%;\n}\n\n.apexcharts-tooltip-series-group {\n  padding: 0 10px;\n  display: none;\n  text-align: left;\n  justify-content: left;\n  align-items: center;\n}\n\n.apexcharts-tooltip-series-group.active .apexcharts-tooltip-marker {\n  opacity: 1;\n}\n.apexcharts-tooltip-series-group.active, .apexcharts-tooltip-series-group:last-child {\n  padding-bottom: 4px;\n}\n.apexcharts-tooltip-series-group-hidden {\n  opacity: 0;\n  height: 0;\n  line-height: 0;\n  padding: 0 !important;\n}\n.apexcharts-tooltip-y-group {\n  padding: 6px 0 5px;\n}\n.apexcharts-tooltip-candlestick {\n  padding: 4px 8px;\n}\n.apexcharts-tooltip-candlestick > div {\n  margin: 4px 0;\n}\n.apexcharts-tooltip-candlestick span.value {\n  font-weight: bold;\n}\n\n.apexcharts-tooltip-rangebar {\n  padding: 5px 8px;\n}\n\n.apexcharts-tooltip-rangebar .category {\n  font-weight: 600;\n  color: #777;\n}\n\n.apexcharts-tooltip-rangebar .series-name {\n  font-weight: bold;\n  display: block;\n  margin-bottom: 5px;\n}\n\n.apexcharts-xaxistooltip {\n  opacity: 0;\n  padding: 9px 10px;\n  pointer-events: none;\n  color: #373d3f;\n  font-size: 13px;\n  text-align: center;\n  border-radius: 2px;\n  position: absolute;\n  z-index: 10;\n\tbackground: #ECEFF1;\n  border: 1px solid #90A4AE;\n  transition: 0.15s ease all;\n}\n\n.apexcharts-xaxistooltip.dark {\n  background: rgba(0, 0, 0, 0.7);\n  border: 1px solid rgba(0, 0, 0, 0.5);\n  color: #fff;\n}\n\n.apexcharts-xaxistooltip:after, .apexcharts-xaxistooltip:before {\n\tleft: 50%;\n\tborder: solid transparent;\n\tcontent: \" \";\n\theight: 0;\n\twidth: 0;\n\tposition: absolute;\n\tpointer-events: none;\n}\n\n.apexcharts-xaxistooltip:after {\n\tborder-color: rgba(236, 239, 241, 0);\n\tborder-width: 6px;\n\tmargin-left: -6px;\n}\n.apexcharts-xaxistooltip:before {\n\tborder-color: rgba(144, 164, 174, 0);\n\tborder-width: 7px;\n\tmargin-left: -7px;\n}\n\n.apexcharts-xaxistooltip-bottom:after, .apexcharts-xaxistooltip-bottom:before {\n  bottom: 100%;\n}\n\n.apexcharts-xaxistooltip-top:after, .apexcharts-xaxistooltip-top:before {\n  top: 100%;\n}\n\n.apexcharts-xaxistooltip-bottom:after {\n  border-bottom-color: #ECEFF1;\n}\n.apexcharts-xaxistooltip-bottom:before {\n  border-bottom-color: #90A4AE;\n}\n\n.apexcharts-xaxistooltip-bottom.dark:after {\n  border-bottom-color: rgba(0, 0, 0, 0.5);\n}\n.apexcharts-xaxistooltip-bottom.dark:before {\n  border-bottom-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-xaxistooltip-top:after {\n  border-top-color:#ECEFF1\n}\n.apexcharts-xaxistooltip-top:before {\n  border-top-color: #90A4AE;\n}\n.apexcharts-xaxistooltip-top.dark:after {\n  border-top-color:rgba(0, 0, 0, 0.5);\n}\n.apexcharts-xaxistooltip-top.dark:before {\n  border-top-color: rgba(0, 0, 0, 0.5);\n}\n\n\n.apexcharts-xaxistooltip.active {\n  opacity: 1;\n  transition: 0.15s ease all;\n}\n\n.apexcharts-yaxistooltip {\n  opacity: 0;\n  padding: 4px 10px;\n  pointer-events: none;\n  color: #373d3f;\n  font-size: 13px;\n  text-align: center;\n  border-radius: 2px;\n  position: absolute;\n  z-index: 10;\n\tbackground: #ECEFF1;\n  border: 1px solid #90A4AE;\n}\n\n.apexcharts-yaxistooltip.dark {\n  background: rgba(0, 0, 0, 0.7);\n  border: 1px solid rgba(0, 0, 0, 0.5);\n  color: #fff;\n}\n\n.apexcharts-yaxistooltip:after, .apexcharts-yaxistooltip:before {\n\ttop: 50%;\n\tborder: solid transparent;\n\tcontent: \" \";\n\theight: 0;\n\twidth: 0;\n\tposition: absolute;\n\tpointer-events: none;\n}\n.apexcharts-yaxistooltip:after {\n\tborder-color: rgba(236, 239, 241, 0);\n\tborder-width: 6px;\n\tmargin-top: -6px;\n}\n.apexcharts-yaxistooltip:before {\n\tborder-color: rgba(144, 164, 174, 0);\n\tborder-width: 7px;\n\tmargin-top: -7px;\n}\n\n.apexcharts-yaxistooltip-left:after, .apexcharts-yaxistooltip-left:before {\n  left: 100%;\n}\n\n.apexcharts-yaxistooltip-right:after, .apexcharts-yaxistooltip-right:before {\n  right: 100%;\n}\n\n.apexcharts-yaxistooltip-left:after {\n  border-left-color: #ECEFF1;\n}\n.apexcharts-yaxistooltip-left:before {\n  border-left-color: #90A4AE;\n}\n.apexcharts-yaxistooltip-left.dark:after {\n  border-left-color: rgba(0, 0, 0, 0.5);\n}\n.apexcharts-yaxistooltip-left.dark:before {\n  border-left-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-yaxistooltip-right:after {\n  border-right-color: #ECEFF1;\n}\n.apexcharts-yaxistooltip-right:before {\n  border-right-color: #90A4AE;\n}\n.apexcharts-yaxistooltip-right.dark:after {\n  border-right-color: rgba(0, 0, 0, 0.5);\n}\n.apexcharts-yaxistooltip-right.dark:before {\n  border-right-color: rgba(0, 0, 0, 0.5);\n}\n\n.apexcharts-yaxistooltip.active {\n  opacity: 1;\n}\n.apexcharts-yaxistooltip-hidden {\n  display: none;\n}\n\n.apexcharts-xcrosshairs, .apexcharts-ycrosshairs {\n  pointer-events: none;\n  opacity: 0;\n  transition: 0.15s ease all;\n}\n\n.apexcharts-xcrosshairs.active, .apexcharts-ycrosshairs.active {\n  opacity: 1;\n  transition: 0.15s ease all;\n}\n\n.apexcharts-ycrosshairs-hidden {\n  opacity: 0;\n}\n\n.apexcharts-zoom-rect {\n  pointer-events: none;\n}\n.apexcharts-selection-rect {\n  cursor: move;\n}\n\n.svg_select_points, .svg_select_points_rot {\n  opacity: 0;\n  visibility: hidden;\n}\n.svg_select_points_l, .svg_select_points_r {\n  cursor: ew-resize;\n  opacity: 1;\n  visibility: visible;\n  fill: #888;\n}\n.apexcharts-canvas.zoomable .hovering-zoom {\n  cursor: crosshair\n}\n.apexcharts-canvas.zoomable .hovering-pan {\n  cursor: move\n}\n\n.apexcharts-xaxis,\n.apexcharts-yaxis {\n  pointer-events: none;\n}\n\n.apexcharts-zoom-icon, \n.apexcharts-zoom-in-icon,\n.apexcharts-zoom-out-icon,\n.apexcharts-reset-zoom-icon, \n.apexcharts-pan-icon, \n.apexcharts-selection-icon,\n.apexcharts-menu-icon, \n.apexcharts-toolbar-custom-icon {\n  cursor: pointer;\n  width: 20px;\n  height: 20px;\n  line-height: 24px;\n  color: #6E8192;\n  text-align: center;\n}\n\n\n.apexcharts-zoom-icon svg, \n.apexcharts-zoom-in-icon svg,\n.apexcharts-zoom-out-icon svg,\n.apexcharts-reset-zoom-icon svg,\n.apexcharts-menu-icon svg {\n  fill: #6E8192;\n}\n.apexcharts-selection-icon svg {\n  fill: #444;\n  transform: scale(0.76)\n}\n\n.dark .apexcharts-zoom-icon svg, \n.dark .apexcharts-zoom-in-icon svg,\n.dark .apexcharts-zoom-out-icon svg,\n.dark .apexcharts-reset-zoom-icon svg, \n.dark .apexcharts-pan-icon svg, \n.dark .apexcharts-selection-icon svg,\n.dark .apexcharts-menu-icon svg, \n.dark .apexcharts-toolbar-custom-icon svg{\n  fill: #f3f4f5;\n}\n\n.apexcharts-canvas .apexcharts-zoom-icon.selected svg, \n.apexcharts-canvas .apexcharts-selection-icon.selected svg, \n.apexcharts-canvas .apexcharts-reset-zoom-icon.selected svg {\n  fill: #008FFB;\n}\n.light .apexcharts-selection-icon:not(.selected):hover svg,\n.light .apexcharts-zoom-icon:not(.selected):hover svg, \n.light .apexcharts-zoom-in-icon:hover svg, \n.light .apexcharts-zoom-out-icon:hover svg, \n.light .apexcharts-reset-zoom-icon:hover svg, \n.light .apexcharts-menu-icon:hover svg {\n  fill: #333;\n}\n\n.apexcharts-selection-icon, .apexcharts-menu-icon {\n  position: relative;\n}\n.apexcharts-reset-zoom-icon {\n  margin-left: 5px;\n}\n.apexcharts-zoom-icon, .apexcharts-reset-zoom-icon, .apexcharts-menu-icon {\n  transform: scale(0.85);\n}\n\n.apexcharts-zoom-in-icon, .apexcharts-zoom-out-icon {\n  transform: scale(0.7)\n}\n\n.apexcharts-zoom-out-icon {\n  margin-right: 3px;\n}\n\n.apexcharts-pan-icon {\n  transform: scale(0.62);\n  position: relative;\n  left: 1px;\n  top: 0px;\n}\n.apexcharts-pan-icon svg {\n  fill: #fff;\n  stroke: #6E8192;\n  stroke-width: 2;\n}\n.apexcharts-pan-icon.selected svg {\n  stroke: #008FFB;\n}\n.apexcharts-pan-icon:not(.selected):hover svg {\n  stroke: #333;\n}\n\n.apexcharts-toolbar {\n  position: absolute;\n  z-index: 11;\n  top: 0px;\n  right: 3px;\n  max-width: 176px;\n  text-align: right;\n  border-radius: 3px;\n  padding: 0px 6px 2px 6px;\n  display: flex;\n  justify-content: space-between;\n  align-items: center; \n}\n\n.apexcharts-toolbar svg {\n  pointer-events: none;\n}\n\n.apexcharts-menu {\n  background: #fff;\n  position: absolute;\n  top: 100%;\n  border: 1px solid #ddd;\n  border-radius: 3px;\n  padding: 3px;\n  right: 10px;\n  opacity: 0;\n  min-width: 110px;\n  transition: 0.15s ease all;\n  pointer-events: none;\n}\n\n.apexcharts-menu.open {\n  opacity: 1;\n  pointer-events: all;\n  transition: 0.15s ease all;\n}\n\n.apexcharts-menu-item {\n  padding: 6px 7px;\n  font-size: 12px;\n  cursor: pointer;\n}\n.light .apexcharts-menu-item:hover {\n  background: #eee;\n}\n.dark .apexcharts-menu {\n  background: rgba(0, 0, 0, 0.7);\n  color: #fff;\n}\n\n@media screen and (min-width: 768px) {\n  .apexcharts-toolbar {\n    /*opacity: 0;*/\n  }\n\n  .apexcharts-canvas:hover .apexcharts-toolbar {\n    opacity: 1;\n  } \n}\n\n.apexcharts-datalabel.hidden {\n  opacity: 0;\n}\n\n.apexcharts-pie-label,\n.apexcharts-datalabel, .apexcharts-datalabel-label, .apexcharts-datalabel-value {\n  cursor: default;\n  pointer-events: none;\n}\n\n.apexcharts-pie-label-delay {\n  opacity: 0;\n  animation-name: opaque;\n  animation-duration: 0.3s;\n  animation-fill-mode: forwards;\n  animation-timing-function: ease;\n}\n\n.apexcharts-canvas .hidden {\n  opacity: 0;\n}\n\n.apexcharts-hide .apexcharts-series-points {\n  opacity: 0;\n}\n\n.apexcharts-area-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events,\n.apexcharts-line-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events, .apexcharts-radar-series path, .apexcharts-radar-series polygon {\n  pointer-events: none;\n}\n\n/* markers */\n\n.apexcharts-marker {\n  transition: 0.15s ease all;\n}\n\n@keyframes opaque {\n  0% {\n    opacity: 0;\n  }\n  100% {\n    opacity: 1;\n  }\n}"
  },
  {
    "path": "public/backend/vendors/css/documentation.css",
    "content": "/*================================================================================================\n  File Name: documentation.scss\n  Description: This is only documentation related css file, this is theme related css.\n  ----------------------------------------------------------------------------------------------\n  Item Name: Vusax - Vuejs, HTML & Laravel Admin Dashboard Template\n  Version: 1.0\n  Author: PIXINVENT\n  Author URL: http://www.themeforest.net/user/pixinvent\n================================================================================================*/\n\nbody {\n  position: relative;\n}\n/* Right Sidebar */\n.affix {\n    position: fixed;\n    margin: 0 1.5rem 0 0;\n    width: 240px;\n}\n/* navbar buttons */\n.btn-doc-header{\n    margin-right: 1rem;\n}\n\nul#page-navigation-list{\n  display: block !important;\n}\nul#page-navigation-list li ul.nav{\n  display:none;\n}\nul#page-navigation-list li ul.nav{\n  display:none;\n}\nul#page-navigation-list li a.active + ul.nav{\n  display:block;\n}\nul#page-navigation-list li a.nav-link{\n  padding:0;\n  padding-left:10px;\n  line-height: 1.8;\n  color: #626262;\n}\nul#page-navigation-list li a{\n  border-left:2px solid #fff;\n}\nul#page-navigation-list li a.active{\n  border-left:2px solid black;\n}\nul#page-navigation-list li ul li a{\n  border-left:1px solid #fff;\n  padding-left:30px;\n  font-size: 85%;\n}\nul#page-navigation-list li ul li a.active{\n  border-left:1px solid black;\n}\n\n.token.footer, .token.content{\n  margin:0 !important;\n}\n.sidebar-right .component-sidebar .card-content{\n  position: relative;\n  height: calc(100vh - 230px);\n  overflow-y: auto;\n}\n"
  },
  {
    "path": "public/backend/vendors/css/extensions/dataTables.checkboxes.css",
    "content": "table.dataTable.dt-checkboxes-select tbody tr,\ntable.dataTable thead th.dt-checkboxes-select-all,\ntable.dataTable tbody td.dt-checkboxes-cell {\n  cursor: pointer;\n}\n\ntable.dataTable thead th.dt-checkboxes-select-all,\ntable.dataTable tbody td.dt-checkboxes-cell {\n  text-align: center;\n}\n\ndiv.dataTables_wrapper span.select-info,\ndiv.dataTables_wrapper span.select-item {\n  margin-left: 0.5em;\n}\n\n@media screen and (max-width: 640px) {\n  div.dataTables_wrapper span.select-info,\n  div.dataTables_wrapper span.select-item {\n    margin-left: 0;\n    display: block;\n  }\n}\n"
  },
  {
    "path": "public/backend/vendors/css/extensions/pace.css",
    "content": ".pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace-inactive {\n  display: none;\n}\n\n.pace .pace-progress {\n  background: #ff6275;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  right: 100%;\n  width: 100%;\n  height: 3px;\n}"
  },
  {
    "path": "public/backend/vendors/css/extensions/plyr.css",
    "content": "@keyframes plyr-progress{to{background-position:25px 0}}@keyframes plyr-popup{0%{opacity:.5;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes plyr-fade-in{from{opacity:0}to{opacity:1}}.plyr{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:subpixel-antialiased;direction:ltr;font-family:Avenir,\"Avenir Next\",\"Helvetica Neue\",\"Segoe UI\",Helvetica,Arial,sans-serif;font-variant-numeric:tabular-nums;font-weight:500;line-height:1.7;max-width:100%;min-width:200px;position:relative;text-shadow:none;transition:box-shadow .3s ease}.plyr audio,.plyr video{border-radius:inherit;height:auto;vertical-align:middle;width:100%}.plyr button{font:inherit;line-height:inherit;width:auto}.plyr:focus{outline:0}.plyr--full-ui{box-sizing:border-box}.plyr--full-ui *,.plyr--full-ui ::after,.plyr--full-ui ::before{box-sizing:inherit}.plyr--full-ui a,.plyr--full-ui button,.plyr--full-ui input,.plyr--full-ui label{touch-action:manipulation}.plyr__badge{background:#4f5b5f;border-radius:2px;color:#fff;font-size:9px;line-height:1;padding:3px 4px}.plyr--full-ui ::-webkit-media-text-track-container{display:none}.plyr__captions{animation:plyr-fade-in .3s ease;bottom:0;color:#fff;display:none;font-size:14px;left:0;padding:10px;position:absolute;text-align:center;transition:transform .4s ease-in-out;width:100%}.plyr__captions .plyr__caption{background:rgba(0,0,0,.8);border-radius:2px;-webkit-box-decoration-break:clone;box-decoration-break:clone;line-height:185%;padding:.2em .5em;white-space:pre-wrap}.plyr__captions .plyr__caption div{display:inline}.plyr__captions span:empty{display:none}@media (min-width:480px){.plyr__captions{font-size:16px;padding:20px}}@media (min-width:768px){.plyr__captions{font-size:18px}}.plyr--captions-active .plyr__captions{display:block}.plyr:not(.plyr--hide-controls) .plyr__controls:not(:empty)~.plyr__captions{transform:translateY(-40px)}.plyr__control{background:0 0;border:0;border-radius:3px;color:inherit;cursor:pointer;flex-shrink:0;overflow:visible;padding:7px;position:relative;transition:all .3s ease}.plyr__control svg{display:block;fill:currentColor;height:18px;pointer-events:none;width:18px}.plyr__control:focus{outline:0}.plyr__control.plyr__tab-focus{box-shadow:0 0 0 5px rgba(26,175,255,.5);outline:0}a.plyr__control{text-decoration:none}a.plyr__control::after,a.plyr__control::before{display:none}.plyr__control.plyr__control--pressed .icon--not-pressed,.plyr__control.plyr__control--pressed .label--not-pressed,.plyr__control:not(.plyr__control--pressed) .icon--pressed,.plyr__control:not(.plyr__control--pressed) .label--pressed{display:none}.plyr--audio .plyr__control.plyr__tab-focus,.plyr--audio .plyr__control:hover,.plyr--audio .plyr__control[aria-expanded=true]{background:#1aafff;color:#fff}.plyr--video .plyr__control svg{filter:drop-shadow(0 1px 1px rgba(0, 0, 0, .15))}.plyr--video .plyr__control.plyr__tab-focus,.plyr--video .plyr__control:hover,.plyr--video .plyr__control[aria-expanded=true]{background:#1aafff;color:#fff}.plyr__control--overlaid{background:rgba(26,175,255,.8);border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15);color:#fff;display:none;left:50%;padding:15px;position:absolute;top:50%;transform:translate(-50%,-50%);z-index:2}.plyr__control--overlaid svg{left:2px;position:relative}.plyr__control--overlaid:focus,.plyr__control--overlaid:hover{background:#1aafff}.plyr--playing .plyr__control--overlaid{opacity:0;visibility:hidden}.plyr--full-ui.plyr--video .plyr__control--overlaid{display:block}.plyr--full-ui ::-webkit-media-controls{display:none}.plyr__controls{align-items:center;display:flex;justify-content:flex-end;text-align:center}.plyr__controls .plyr__progress__container{flex:1}.plyr__controls .plyr__controls__item{margin-left:2.5px}.plyr__controls .plyr__controls__item:first-child{margin-left:0;margin-right:auto}.plyr__controls .plyr__controls__item.plyr__progress__container{padding-left:2.5px}.plyr__controls .plyr__controls__item.plyr__time{padding:0 5px}.plyr__controls .plyr__controls__item.plyr__progress__container:first-child,.plyr__controls .plyr__controls__item.plyr__time+.plyr__time,.plyr__controls .plyr__controls__item.plyr__time:first-child{padding-left:0}.plyr__controls .plyr__controls__item.plyr__volume{padding-right:5px}.plyr__controls .plyr__controls__item.plyr__volume:first-child{padding-right:0}.plyr__controls:empty{display:none}.plyr--audio .plyr__controls{background:#fff;border-radius:inherit;color:#4f5b5f;padding:10px}.plyr--video .plyr__controls{background:linear-gradient(rgba(0,0,0,0),rgba(0,0,0,.7));border-bottom-left-radius:inherit;border-bottom-right-radius:inherit;bottom:0;color:#fff;left:0;padding:20px 5px 5px;position:absolute;right:0;transition:opacity .4s ease-in-out,transform .4s ease-in-out;z-index:3}@media (min-width:480px){.plyr--video .plyr__controls{padding:35px 10px 10px}}.plyr--video.plyr--hide-controls .plyr__controls{opacity:0;pointer-events:none;transform:translateY(100%)}.plyr [data-plyr=airplay],.plyr [data-plyr=captions],.plyr [data-plyr=fullscreen],.plyr [data-plyr=pip]{display:none}.plyr--airplay-supported [data-plyr=airplay],.plyr--captions-enabled [data-plyr=captions],.plyr--fullscreen-enabled [data-plyr=fullscreen],.plyr--pip-supported [data-plyr=pip]{display:inline-block}.plyr__menu{display:flex;position:relative}.plyr__menu .plyr__control svg{transition:transform .3s ease}.plyr__menu .plyr__control[aria-expanded=true] svg{transform:rotate(90deg)}.plyr__menu .plyr__control[aria-expanded=true] .plyr__tooltip{display:none}.plyr__menu__container{animation:plyr-popup .2s ease;background:rgba(255,255,255,.9);border-radius:4px;bottom:100%;box-shadow:0 1px 2px rgba(0,0,0,.15);color:#4f5b5f;font-size:16px;margin-bottom:10px;position:absolute;right:-3px;text-align:left;white-space:nowrap;z-index:3}.plyr__menu__container>div{overflow:hidden;transition:height .35s cubic-bezier(.4,0,.2,1),width .35s cubic-bezier(.4,0,.2,1)}.plyr__menu__container::after{border:4px solid transparent;border-top-color:rgba(255,255,255,.9);content:'';height:0;position:absolute;right:15px;top:100%;width:0}.plyr__menu__container [role=menu]{padding:7px}.plyr__menu__container [role=menuitem],.plyr__menu__container [role=menuitemradio]{margin-top:2px}.plyr__menu__container [role=menuitem]:first-child,.plyr__menu__container [role=menuitemradio]:first-child{margin-top:0}.plyr__menu__container .plyr__control{align-items:center;color:#4f5b5f;display:flex;font-size:14px;padding:4px 11px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.plyr__menu__container .plyr__control>span{align-items:inherit;display:flex;width:100%}.plyr__menu__container .plyr__control::after{border:4px solid transparent;content:'';position:absolute;top:50%;transform:translateY(-50%)}.plyr__menu__container .plyr__control--forward{padding-right:28px}.plyr__menu__container .plyr__control--forward::after{border-left-color:rgba(79,91,95,.8);right:5px}.plyr__menu__container .plyr__control--forward.plyr__tab-focus::after,.plyr__menu__container .plyr__control--forward:hover::after{border-left-color:currentColor}.plyr__menu__container .plyr__control--back{font-weight:500;margin:7px;margin-bottom:3px;padding-left:28px;position:relative;width:calc(100% - 14px)}.plyr__menu__container .plyr__control--back::after{border-right-color:rgba(79,91,95,.8);left:7px}.plyr__menu__container .plyr__control--back::before{background:#b7c5cd;box-shadow:0 1px 0 #fff;content:'';height:1px;left:0;margin-top:4px;overflow:hidden;position:absolute;right:0;top:100%}.plyr__menu__container .plyr__control--back.plyr__tab-focus::after,.plyr__menu__container .plyr__control--back:hover::after{border-right-color:currentColor}.plyr__menu__container .plyr__control[role=menuitemradio]{padding-left:7px}.plyr__menu__container .plyr__control[role=menuitemradio]::after,.plyr__menu__container .plyr__control[role=menuitemradio]::before{border-radius:100%}.plyr__menu__container .plyr__control[role=menuitemradio]::before{background:rgba(0,0,0,.1);content:'';display:block;flex-shrink:0;height:16px;margin-right:10px;transition:all .3s ease;width:16px}.plyr__menu__container .plyr__control[role=menuitemradio]::after{background:#fff;border:0;height:6px;left:12px;opacity:0;top:50%;transform:translateY(-50%) scale(0);transition:transform .3s ease,opacity .3s ease;width:6px}.plyr__menu__container .plyr__control[role=menuitemradio][aria-checked=true]::before{background:#1aafff}.plyr__menu__container .plyr__control[role=menuitemradio][aria-checked=true]::after{opacity:1;transform:translateY(-50%) scale(1)}.plyr__menu__container .plyr__control[role=menuitemradio].plyr__tab-focus::before,.plyr__menu__container .plyr__control[role=menuitemradio]:hover::before{background:rgba(0,0,0,.1)}.plyr__menu__container .plyr__menu__value{align-items:center;display:flex;margin-left:auto;margin-right:-5px;overflow:hidden;padding-left:25px;pointer-events:none}.plyr--full-ui input[type=range]{-webkit-appearance:none;background:0 0;border:0;border-radius:26px;color:#1aafff;display:block;height:19px;margin:0;padding:0;transition:box-shadow .3s ease;width:100%}.plyr--full-ui input[type=range]::-webkit-slider-runnable-track{background:0 0;border:0;border-radius:2.5px;height:5px;transition:box-shadow .3s ease;-webkit-user-select:none;user-select:none;background-image:linear-gradient(to right,currentColor var(--value,0),transparent var(--value,0))}.plyr--full-ui input[type=range]::-webkit-slider-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);height:13px;position:relative;transition:all .2s ease;width:13px;-webkit-appearance:none;margin-top:-4px}.plyr--full-ui input[type=range]::-moz-range-track{background:0 0;border:0;border-radius:2.5px;height:5px;transition:box-shadow .3s ease;-moz-user-select:none;user-select:none}.plyr--full-ui input[type=range]::-moz-range-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);height:13px;position:relative;transition:all .2s ease;width:13px}.plyr--full-ui input[type=range]::-moz-range-progress{background:currentColor;border-radius:2.5px;height:5px}.plyr--full-ui input[type=range]::-ms-track{background:0 0;border:0;border-radius:2.5px;height:5px;transition:box-shadow .3s ease;-ms-user-select:none;user-select:none;color:transparent}.plyr--full-ui input[type=range]::-ms-fill-upper{background:0 0;border:0;border-radius:2.5px;height:5px;transition:box-shadow .3s ease;-ms-user-select:none;user-select:none}.plyr--full-ui input[type=range]::-ms-fill-lower{background:0 0;border:0;border-radius:2.5px;height:5px;transition:box-shadow .3s ease;-ms-user-select:none;user-select:none;background:currentColor}.plyr--full-ui input[type=range]::-ms-thumb{background:#fff;border:0;border-radius:100%;box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2);height:13px;position:relative;transition:all .2s ease;width:13px;margin-top:0}.plyr--full-ui input[type=range]::-ms-tooltip{display:none}.plyr--full-ui input[type=range]:focus{outline:0}.plyr--full-ui input[type=range]::-moz-focus-outer{border:0}.plyr--full-ui input[type=range].plyr__tab-focus::-webkit-slider-runnable-track{box-shadow:0 0 0 5px rgba(26,175,255,.5);outline:0}.plyr--full-ui input[type=range].plyr__tab-focus::-moz-range-track{box-shadow:0 0 0 5px rgba(26,175,255,.5);outline:0}.plyr--full-ui input[type=range].plyr__tab-focus::-ms-track{box-shadow:0 0 0 5px rgba(26,175,255,.5);outline:0}.plyr--full-ui.plyr--video input[type=range]::-webkit-slider-runnable-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]::-moz-range-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]::-ms-track{background-color:rgba(255,255,255,.25)}.plyr--full-ui.plyr--video input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--video input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--video input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(255,255,255,.5)}.plyr--full-ui.plyr--audio input[type=range]::-webkit-slider-runnable-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]::-moz-range-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]::-ms-track{background-color:rgba(183,197,205,.66)}.plyr--full-ui.plyr--audio input[type=range]:active::-webkit-slider-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr--full-ui.plyr--audio input[type=range]:active::-moz-range-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr--full-ui.plyr--audio input[type=range]:active::-ms-thumb{box-shadow:0 1px 1px rgba(0,0,0,.15),0 0 0 1px rgba(47,52,61,.2),0 0 0 3px rgba(0,0,0,.1)}.plyr__poster{background-color:#000;background-position:50% 50%;background-repeat:no-repeat;background-size:contain;height:100%;left:0;opacity:0;position:absolute;top:0;transition:opacity .2s ease;width:100%;z-index:1}.plyr--stopped.plyr__poster-enabled .plyr__poster{opacity:1}.plyr__time{font-size:14px}.plyr__time+.plyr__time::before{content:'\\2044';margin-right:10px}@media (max-width:767px){.plyr__time+.plyr__time{display:none}}.plyr--video .plyr__time{text-shadow:0 1px 1px rgba(0,0,0,.15)}.plyr__tooltip{background:rgba(255,255,255,.9);border-radius:3px;bottom:100%;box-shadow:0 1px 2px rgba(0,0,0,.15);color:#4f5b5f;font-size:14px;font-weight:500;left:50%;line-height:1.3;margin-bottom:10px;opacity:0;padding:5px 7.5px;pointer-events:none;position:absolute;transform:translate(-50%,10px) scale(.8);transform-origin:50% 100%;transition:transform .2s .1s ease,opacity .2s .1s ease;white-space:nowrap;z-index:2}.plyr__tooltip::before{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(255,255,255,.9);bottom:-4px;content:'';height:0;left:50%;position:absolute;transform:translateX(-50%);width:0;z-index:2}.plyr .plyr__control.plyr__tab-focus .plyr__tooltip,.plyr .plyr__control:hover .plyr__tooltip,.plyr__tooltip--visible{opacity:1;transform:translate(-50%,0) scale(1)}.plyr .plyr__control:hover .plyr__tooltip{z-index:3}.plyr__controls>.plyr__control:first-child .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip{left:0;transform:translate(0,10px) scale(.8);transform-origin:0 100%}.plyr__controls>.plyr__control:first-child .plyr__tooltip::before,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip::before{left:16px}.plyr__controls>.plyr__control:last-child .plyr__tooltip{left:auto;right:0;transform:translate(0,10px) scale(.8);transform-origin:100% 100%}.plyr__controls>.plyr__control:last-child .plyr__tooltip::before{left:auto;right:16px;transform:translateX(50%)}.plyr__controls>.plyr__control:first-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control .plyr__tooltip--visible,.plyr__controls>.plyr__control:first-child+.plyr__control.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child+.plyr__control:hover .plyr__tooltip,.plyr__controls>.plyr__control:first-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:first-child:hover .plyr__tooltip,.plyr__controls>.plyr__control:last-child .plyr__tooltip--visible,.plyr__controls>.plyr__control:last-child.plyr__tab-focus .plyr__tooltip,.plyr__controls>.plyr__control:last-child:hover .plyr__tooltip{transform:translate(0,0) scale(1)}.plyr--video{background:#000;overflow:hidden}.plyr--video.plyr--menu-open{overflow:visible}.plyr__video-wrapper{background:#000;border-radius:inherit;overflow:hidden;position:relative;z-index:0}.plyr__video-embed,.plyr__video-wrapper--fixed-ratio{height:0;padding-bottom:56.25%}.plyr__video-embed iframe,.plyr__video-wrapper--fixed-ratio video{border:0;height:100%;left:0;position:absolute;top:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.plyr--full-ui .plyr__video-embed>.plyr__video-embed__container{padding-bottom:240%;position:relative;transform:translateY(-38.28125%)}.plyr__progress{left:6.5px;margin-right:13px;position:relative}.plyr__progress input[type=range],.plyr__progress__buffer{margin-left:-6.5px;margin-right:-6.5px;width:calc(100% + 13px)}.plyr__progress input[type=range]{position:relative;z-index:2}.plyr__progress .plyr__tooltip{font-size:14px;left:0}.plyr__progress__buffer{-webkit-appearance:none;background:0 0;border:0;border-radius:100px;height:5px;left:0;margin-top:-2.5px;padding:0;position:absolute;top:50%}.plyr__progress__buffer::-webkit-progress-bar{background:0 0}.plyr__progress__buffer::-webkit-progress-value{background:currentColor;border-radius:100px;min-width:5px;transition:width .2s ease}.plyr__progress__buffer::-moz-progress-bar{background:currentColor;border-radius:100px;min-width:5px;transition:width .2s ease}.plyr__progress__buffer::-ms-fill{border-radius:100px;transition:width .2s ease}.plyr--video .plyr__progress__buffer{box-shadow:0 1px 1px rgba(0,0,0,.15);color:rgba(255,255,255,.25)}.plyr--audio .plyr__progress__buffer{color:rgba(183,197,205,.66)}.plyr--loading .plyr__progress__buffer{animation:plyr-progress 1s linear infinite;background-image:linear-gradient(-45deg,rgba(47,52,61,.6) 25%,transparent 25%,transparent 50%,rgba(47,52,61,.6) 50%,rgba(47,52,61,.6) 75%,transparent 75%,transparent);background-repeat:repeat-x;background-size:25px 25px;color:transparent}.plyr--video.plyr--loading .plyr__progress__buffer{background-color:rgba(255,255,255,.25)}.plyr--audio.plyr--loading .plyr__progress__buffer{background-color:rgba(183,197,205,.66)}.plyr__volume{align-items:center;display:flex;flex:1;position:relative}.plyr__volume input[type=range]{margin-left:5px;position:relative;z-index:2}@media (min-width:480px){.plyr__volume{max-width:90px}}@media (min-width:768px){.plyr__volume{max-width:110px}}.plyr--is-ios .plyr__volume{display:none!important}.plyr--is-ios.plyr--vimeo [data-plyr=mute]{display:none!important}.plyr:-webkit-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-ms-fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-webkit-full-screen video{height:100%}.plyr:-ms-fullscreen video{height:100%}.plyr:fullscreen video{height:100%}.plyr:-webkit-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-ms-fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:-webkit-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-ms-fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-webkit-full-screen.plyr--hide-controls{cursor:none}.plyr:-ms-fullscreen.plyr--hide-controls{cursor:none}.plyr:fullscreen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-webkit-full-screen .plyr__captions{font-size:21px}.plyr:-ms-fullscreen .plyr__captions{font-size:21px}.plyr:fullscreen .plyr__captions{font-size:21px}}.plyr:-webkit-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-webkit-full-screen video{height:100%}.plyr:-webkit-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-webkit-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-webkit-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-webkit-full-screen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-webkit-full-screen .plyr__captions{font-size:21px}}.plyr:-moz-full-screen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-moz-full-screen video{height:100%}.plyr:-moz-full-screen .plyr__video-wrapper{height:100%;width:100%}.plyr:-moz-full-screen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-moz-full-screen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-moz-full-screen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-moz-full-screen .plyr__captions{font-size:21px}}.plyr:-ms-fullscreen{background:#000;border-radius:0!important;height:100%;margin:0;width:100%}.plyr:-ms-fullscreen video{height:100%}.plyr:-ms-fullscreen .plyr__video-wrapper{height:100%;width:100%}.plyr:-ms-fullscreen.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen{display:block}.plyr:-ms-fullscreen .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr:-ms-fullscreen.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr:-ms-fullscreen .plyr__captions{font-size:21px}}.plyr--fullscreen-fallback{background:#000;border-radius:0!important;height:100%;margin:0;width:100%;bottom:0;left:0;position:fixed;right:0;top:0;z-index:10000000}.plyr--fullscreen-fallback video{height:100%}.plyr--fullscreen-fallback .plyr__video-wrapper{height:100%;width:100%}.plyr--fullscreen-fallback.plyr--vimeo .plyr__video-wrapper{height:0;top:50%;transform:translateY(-50%)}.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen{display:block}.plyr--fullscreen-fallback .plyr__control .icon--exit-fullscreen+svg{display:none}.plyr--fullscreen-fallback.plyr--hide-controls{cursor:none}@media (min-width:1024px){.plyr--fullscreen-fallback .plyr__captions{font-size:21px}}.plyr__ads{border-radius:inherit;bottom:0;cursor:pointer;left:0;overflow:hidden;position:absolute;right:0;top:0;z-index:-1}.plyr__ads>div,.plyr__ads>div iframe{height:100%;position:absolute;width:100%}.plyr__ads::after{background:rgba(47,52,61,.8);border-radius:2px;bottom:10px;color:#fff;content:attr(data-badge-text);font-size:11px;padding:2px 6px;pointer-events:none;position:absolute;right:10px;z-index:3}.plyr__ads::after:empty{display:none}.plyr__cues{background:currentColor;display:block;height:5px;left:0;margin:-2.5px 0 0;opacity:.8;position:absolute;top:50%;width:3px;z-index:3}.plyr__preview-thumb{background-color:rgba(255,255,255,.9);border-radius:3px;bottom:100%;box-shadow:0 1px 2px rgba(0,0,0,.15);margin-bottom:10px;opacity:0;padding:3px;pointer-events:none;position:absolute;transform:translate(0,10px) scale(.8);transform-origin:50% 100%;transition:transform .2s .1s ease,opacity .2s .1s ease;z-index:2}.plyr__preview-thumb--is-shown{opacity:1;transform:translate(0,0) scale(1)}.plyr__preview-thumb::before{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(255,255,255,.9);bottom:-4px;content:'';height:0;left:50%;position:absolute;transform:translateX(-50%);width:0;z-index:2}.plyr__preview-thumb__image-container{background:#b7c5cd;border-radius:2px;overflow:hidden;position:relative;z-index:0}.plyr__preview-thumb__image-container img{height:100%;left:0;max-height:none;max-width:none;position:absolute;top:0;width:100%}.plyr__preview-thumb__time-container{bottom:6px;left:0;position:absolute;right:0;white-space:nowrap;z-index:3}.plyr__preview-thumb__time-container span{background-color:rgba(0,0,0,.55);border-radius:2px;color:#fff;font-size:14px;padding:3px 6px}.plyr__preview-scrubbing{bottom:0;filter:blur(1px);height:100%;left:0;margin:auto;opacity:0;overflow:hidden;position:absolute;right:0;top:0;transition:opacity .3s ease;width:100%;z-index:1}.plyr__preview-scrubbing--is-shown{opacity:1}.plyr__preview-scrubbing img{height:100%;left:0;max-height:none;max-width:none;-o-object-fit:contain;object-fit:contain;position:absolute;top:0;width:100%}.plyr--no-transition{transition:none!important}.plyr__sr-only{clip:rect(1px,1px,1px,1px);overflow:hidden;border:0!important;height:1px!important;padding:0!important;position:absolute!important;width:1px!important}.plyr [hidden]{display:none!important}"
  },
  {
    "path": "public/backend/vendors/css/extensions/shepherd-theme-default.css",
    "content": "@charset \"UTF-8\";#shepherdModalOverlayContainer{-ms-filter:\"progid:dximagetransform.microsoft.gradient.alpha(Opacity=50)\";filter:alpha(opacity=50);height:100vh;left:0;opacity:.5;position:fixed;top:0;transition:all .3s ease-out;width:100vw;z-index:9997}#shepherdModalOverlayContainer #shepherdModalMask,#shepherdModalOverlayContainer #shepherdModalMaskRect{height:100vh;width:100vw}.shepherd-modal.shepherd-enabled{position:relative;z-index:9998}.shepherd-active.shepherd-modal-is-visible :not(.shepherd-target){pointer-events:none}.shepherd-active.shepherd-modal-is-visible .shepherd-button,.shepherd-active.shepherd-modal-is-visible .shepherd-button *,.shepherd-active.shepherd-modal-is-visible .shepherd-cancel-link,.shepherd-active.shepherd-modal-is-visible .shepherd-cancel-link *,.shepherd-active.shepherd-modal-is-visible .shepherd-element,.shepherd-active.shepherd-modal-is-visible .shepherd-element *,.shepherd-active.shepherd-modal-is-visible .shepherd-target,.shepherd-active.shepherd-modal-is-visible .shepherd-target *{pointer-events:auto}.tippy-arrow{transform:scale(2)}.tippy-popper{z-index:9999}.tippy-popper .tippy-arrow{border:16px solid transparent;content:\"\";display:block;height:0;pointer-events:none;position:absolute;width:0}.tippy-popper[x-placement^=top]{margin-bottom:16px}.tippy-popper[x-placement^=top] .tippy-arrow{border-bottom:0;border-top-color:#f6f6f6;left:calc(50% - 16px)}.tippy-popper[x-placement^=bottom]{margin-top:16px}.tippy-popper[x-placement^=bottom] .tippy-arrow{border-bottom-color:#e6e6e6;border-top:0;left:calc(50% - 16px)}.tippy-popper[x-placement^=left]{margin-right:16px}.tippy-popper[x-placement^=left] .tippy-arrow{border-left-color:#f6f6f6;border-right:0;margin-top:-16px;top:calc(50% - 16px)}.tippy-popper[x-placement^=right]{margin-left:16px}.tippy-popper[x-placement^=right] .tippy-arrow{border-left:0;border-right-color:#f6f6f6;top:calc(50% - 16px)}.tippy-popper .tippy-tooltip{background-color:transparent;max-height:100%;max-width:100%;padding:0;width:400px}.shepherd-element,.shepherd-element *,.shepherd-element:after,.shepherd-element :after,.shepherd-element:before,.shepherd-element :before{box-sizing:border-box}.shepherd-element{filter:drop-shadow(0 1px 4px rgba(0,0,0,.2))}.shepherd-element.shepherd-has-title .shepherd-content header{background:#e6e6e6;padding:1em}.shepherd-element .shepherd-content{background:#f6f6f6;font-size:inherit;padding:0}.shepherd-element .shepherd-content header{*zoom:1;align-items:center;border-top-left-radius:5px;border-top-right-radius:5px;display:flex;justify-content:center;line-height:2em;padding:.75em .75em 0}.shepherd-element .shepherd-content header:after{clear:both;content:\"\";display:table}.shepherd-element .shepherd-content header .shepherd-cancel-link,.shepherd-element .shepherd-content header .shepherd-title{font-weight:400;margin:0;padding:0;position:relative;vertical-align:middle}.shepherd-element .shepherd-content header .shepherd-title{color:rgba(0,0,0,.75);display:flex;flex:1 0 auto;font-size:1.1em}.shepherd-element .shepherd-content header .shepherd-cancel-link{color:hsla(0,0%,70.2%,.75);font-size:2em;margin-left:auto;text-decoration:none;transition:color .5s ease}.shepherd-element .shepherd-content header .shepherd-cancel-link:before{content:\"×\"}.shepherd-element .shepherd-content header .shepherd-cancel-link:hover{color:rgba(0,0,0,.75)}.shepherd-element .shepherd-content .shepherd-text{color:rgba(0,0,0,.75);line-height:1.3em;padding:.75em}.shepherd-element .shepherd-content .shepherd-text a,.shepherd-element .shepherd-content .shepherd-text a:active,.shepherd-element .shepherd-content .shepherd-text a:visited{border-bottom:1px dotted rgba(0,0,0,.75);color:rgba(0,0,0,.75);text-decoration:none}.shepherd-element .shepherd-content .shepherd-text a:active:hover,.shepherd-element .shepherd-content .shepherd-text a:hover,.shepherd-element .shepherd-content .shepherd-text a:visited:hover{border-bottom-style:solid}.shepherd-element .shepherd-content .shepherd-text p{margin-top:0}.shepherd-element .shepherd-content .shepherd-text p:last-child{margin-bottom:0}.shepherd-element .shepherd-content footer{border-bottom-left-radius:5px;border-bottom-right-radius:5px;padding:0 .75em .75em}.shepherd-element .shepherd-content footer .shepherd-buttons{list-style:none;margin:0;padding:0;text-align:right}.shepherd-element .shepherd-content footer .shepherd-buttons li{display:inline;margin:0 .5em 0 0}.shepherd-element .shepherd-content footer .shepherd-buttons li:last-child{margin-right:0}.shepherd-element .shepherd-content footer .shepherd-buttons li .shepherd-button{display:inline-block;*display:inline;vertical-align:middle;*vertical-align:auto;*zoom:1;background:#3288e6;border:0;border-radius:3px;color:hsla(0,0%,100%,.75);cursor:pointer;font-family:inherit;font-size:.8em;letter-spacing:.1em;line-height:1em;padding:.75em 2em;text-transform:uppercase;transition:all .5s ease}.shepherd-element .shepherd-content footer .shepherd-buttons li .shepherd-button:hover{background:#196fcc}.shepherd-element .shepherd-content footer .shepherd-buttons li .shepherd-button.shepherd-button-secondary{background:#f1f2f3;color:rgba(0,0,0,.75)}.shepherd-element .shepherd-content footer .shepherd-buttons li .shepherd-button.shepherd-button-secondary:hover{background:#d5d8dc;color:rgba(0,0,0,.75)}"
  },
  {
    "path": "public/backend/vendors/css/extensions/tether-theme-arrows.css",
    "content": ".tether-element, .tether-element:after, .tether-element:before, .tether-element *, .tether-element *:after, .tether-element *:before {\n  box-sizing: border-box; }\n\n.tether-element {\n  position: absolute;\n  display: none; }\n  .tether-element.tether-open {\n    display: block; }\n\n.tether-element.tether-theme-arrows {\n  max-width: 100%;\n  max-height: 100%; }\n  .tether-element.tether-theme-arrows .tether-content {\n    border-radius: 5px;\n    position: relative;\n    font-family: inherit;\n    background: #fff;\n    color: inherit;\n    padding: 1em;\n    font-size: 1.1em;\n    line-height: 1.5em;\n    -webkit-transform: translateZ(0);\n            transform: translateZ(0);\n    -webkit-filter: drop-shadow(0 1px 4px rgba(0, 0, 0, 0.2));\n            filter: drop-shadow(0 1px 4px rgba(0, 0, 0, 0.2)); }\n    .tether-element.tether-theme-arrows .tether-content:before {\n      content: \"\";\n      display: block;\n      position: absolute;\n      width: 0;\n      height: 0;\n      border-color: transparent;\n      border-width: 16px;\n      border-style: solid; }\n  .tether-element.tether-theme-arrows.tether-element-attached-bottom.tether-element-attached-center .tether-content {\n    margin-bottom: 16px; }\n    .tether-element.tether-theme-arrows.tether-element-attached-bottom.tether-element-attached-center .tether-content:before {\n      top: 100%;\n      left: 50%;\n      margin-left: -16px;\n      border-top-color: #fff; }\n  .tether-element.tether-theme-arrows.tether-element-attached-top.tether-element-attached-center .tether-content {\n    margin-top: 16px; }\n    .tether-element.tether-theme-arrows.tether-element-attached-top.tether-element-attached-center .tether-content:before {\n      bottom: 100%;\n      left: 50%;\n      margin-left: -16px;\n      border-bottom-color: #fff; }\n  .tether-element.tether-theme-arrows.tether-element-attached-right.tether-element-attached-middle .tether-content {\n    margin-right: 16px; }\n    .tether-element.tether-theme-arrows.tether-element-attached-right.tether-element-attached-middle .tether-content:before {\n      left: 100%;\n      top: 50%;\n      margin-top: -16px;\n      border-left-color: #fff; }\n  .tether-element.tether-theme-arrows.tether-element-attached-left.tether-element-attached-middle .tether-content {\n    margin-left: 16px; }\n    .tether-element.tether-theme-arrows.tether-element-attached-left.tether-element-attached-middle .tether-content:before {\n      right: 100%;\n      top: 50%;\n      margin-top: -16px;\n      border-right-color: #fff; }\n  .tether-element.tether-theme-arrows.tether-element-attached-left.tether-target-attached-center .tether-content {\n    left: -32px; }\n  .tether-element.tether-theme-arrows.tether-element-attached-right.tether-target-attached-center .tether-content {\n    left: 32px; }\n  .tether-element.tether-theme-arrows.tether-element-attached-top.tether-element-attached-left.tether-target-attached-middle .tether-content {\n    margin-top: 16px; }\n    .tether-element.tether-theme-arrows.tether-element-attached-top.tether-element-attached-left.tether-target-attached-middle .tether-content:before {\n      bottom: 100%;\n      left: 16px;\n      border-bottom-color: #fff; }\n  .tether-element.tether-theme-arrows.tether-element-attached-top.tether-element-attached-right.tether-target-attached-middle .tether-content {\n    margin-top: 16px; }\n    .tether-element.tether-theme-arrows.tether-element-attached-top.tether-element-attached-right.tether-target-attached-middle .tether-content:before {\n      bottom: 100%;\n      right: 16px;\n      border-bottom-color: #fff; }\n  .tether-element.tether-theme-arrows.tether-element-attached-bottom.tether-element-attached-left.tether-target-attached-middle .tether-content {\n    margin-bottom: 16px; }\n    .tether-element.tether-theme-arrows.tether-element-attached-bottom.tether-element-attached-left.tether-target-attached-middle .tether-content:before {\n      top: 100%;\n      left: 16px;\n      border-top-color: #fff; }\n  .tether-element.tether-theme-arrows.tether-element-attached-bottom.tether-element-attached-right.tether-target-attached-middle .tether-content {\n    margin-bottom: 16px; }\n    .tether-element.tether-theme-arrows.tether-element-attached-bottom.tether-element-attached-right.tether-target-attached-middle .tether-content:before {\n      top: 100%;\n      right: 16px;\n      border-top-color: #fff; }\n  .tether-element.tether-theme-arrows.tether-element-attached-top.tether-element-attached-left.tether-target-attached-bottom .tether-content {\n    margin-top: 16px; }\n    .tether-element.tether-theme-arrows.tether-element-attached-top.tether-element-attached-left.tether-target-attached-bottom .tether-content:before {\n      bottom: 100%;\n      left: 16px;\n      border-bottom-color: #fff; }\n  .tether-element.tether-theme-arrows.tether-element-attached-top.tether-element-attached-right.tether-target-attached-bottom .tether-content {\n    margin-top: 16px; }\n    .tether-element.tether-theme-arrows.tether-element-attached-top.tether-element-attached-right.tether-target-attached-bottom .tether-content:before {\n      bottom: 100%;\n      right: 16px;\n      border-bottom-color: #fff; }\n  .tether-element.tether-theme-arrows.tether-element-attached-bottom.tether-element-attached-left.tether-target-attached-top .tether-content {\n    margin-bottom: 16px; }\n    .tether-element.tether-theme-arrows.tether-element-attached-bottom.tether-element-attached-left.tether-target-attached-top .tether-content:before {\n      top: 100%;\n      left: 16px;\n      border-top-color: #fff; }\n  .tether-element.tether-theme-arrows.tether-element-attached-bottom.tether-element-attached-right.tether-target-attached-top .tether-content {\n    margin-bottom: 16px; }\n    .tether-element.tether-theme-arrows.tether-element-attached-bottom.tether-element-attached-right.tether-target-attached-top .tether-content:before {\n      top: 100%;\n      right: 16px;\n      border-top-color: #fff; }\n  .tether-element.tether-theme-arrows.tether-element-attached-top.tether-element-attached-right.tether-target-attached-left .tether-content {\n    margin-right: 16px; }\n    .tether-element.tether-theme-arrows.tether-element-attached-top.tether-element-attached-right.tether-target-attached-left .tether-content:before {\n      top: 16px;\n      left: 100%;\n      border-left-color: #fff; }\n  .tether-element.tether-theme-arrows.tether-element-attached-top.tether-element-attached-left.tether-target-attached-right .tether-content {\n    margin-left: 16px; }\n    .tether-element.tether-theme-arrows.tether-element-attached-top.tether-element-attached-left.tether-target-attached-right .tether-content:before {\n      top: 16px;\n      right: 100%;\n      border-right-color: #fff; }\n  .tether-element.tether-theme-arrows.tether-element-attached-bottom.tether-element-attached-right.tether-target-attached-left .tether-content {\n    margin-right: 16px; }\n    .tether-element.tether-theme-arrows.tether-element-attached-bottom.tether-element-attached-right.tether-target-attached-left .tether-content:before {\n      bottom: 16px;\n      left: 100%;\n      border-left-color: #fff; }\n  .tether-element.tether-theme-arrows.tether-element-attached-bottom.tether-element-attached-left.tether-target-attached-right .tether-content {\n    margin-left: 16px; }\n    .tether-element.tether-theme-arrows.tether-element-attached-bottom.tether-element-attached-left.tether-target-attached-right .tether-content:before {\n      bottom: 16px;\n      right: 100%;\n      border-right-color: #fff; }\n"
  },
  {
    "path": "public/backend/vendors/css/extensions/toastr.css",
    "content": "/* Version 2.1.4 */\n\n.toast-title {\n  font-weight: bold;\n}\n.toast-message {\n  -ms-word-wrap: break-word;\n  word-wrap: break-word;\n}\n.toast-message a,\n.toast-message label {\n  color: #FFFFFF;\n}\n.toast-message a:hover {\n  color: #CCCCCC;\n  text-decoration: none;\n}\n.toast-close-button {\n  position: relative;\n  right: -0.3em;\n  top: -0.3em;\n  float: right;\n  font-size: 20px;\n  font-weight: bold;\n  color: #FFFFFF;\n  -webkit-text-shadow: 0 1px 0 #ffffff;\n  text-shadow: 0 1px 0 #ffffff;\n  opacity: 0.8;\n  -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80);\n  filter: alpha(opacity=80);\n  line-height: 1;\n}\n.toast-close-button:hover,\n.toast-close-button:focus {\n  color: #000000;\n  text-decoration: none;\n  cursor: pointer;\n  opacity: 0.4;\n  -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=40);\n  filter: alpha(opacity=40);\n}\n.rtl .toast-close-button {\n  left: -0.3em;\n  float: left;\n  right: 0.3em;\n}\n/*Additional properties for button version\n iOS requires the button element instead of an anchor tag.\n If you want the anchor version, it requires `href=\"#\"`.*/\nbutton.toast-close-button {\n  padding: 0;\n  cursor: pointer;\n  background: transparent;\n  border: 0;\n  -webkit-appearance: none;\n}\n.toast-top-center {\n  top: 0;\n  right: 0;\n  width: 100%;\n}\n.toast-bottom-center {\n  bottom: 0;\n  right: 0;\n  width: 100%;\n}\n.toast-top-full-width {\n  top: 0;\n  right: 0;\n  width: 100%;\n}\n.toast-bottom-full-width {\n  bottom: 0;\n  right: 0;\n  width: 100%;\n}\n.toast-top-left {\n  top: 12px;\n  left: 12px;\n}\n.toast-top-right {\n  top: 12px;\n  right: 12px;\n}\n.toast-bottom-right {\n  right: 12px;\n  bottom: 12px;\n}\n.toast-bottom-left {\n  bottom: 12px;\n  left: 12px;\n}\n.toast-container {\n  position: fixed;\n  z-index: 999999;\n  pointer-events: none;\n  /*overrides*/\n}\n.toast-container * {\n  -moz-box-sizing: border-box;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\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 3px 3px 3px;\n  -webkit-border-radius: 3px 3px 3px 3px;\n  border-radius: 3px 3px 3px 3px;\n  background-position: 15px center;\n  background-repeat: no-repeat;\n  -moz-box-shadow: 0 0 12px #999999;\n  -webkit-box-shadow: 0 0 12px #999999;\n  box-shadow: 0 0 12px #999999;\n  color: #FFFFFF;\n  opacity: 0.8;\n  -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80);\n  filter: alpha(opacity=80);\n}\n.toast-container > div.rtl {\n  direction: rtl;\n  padding: 15px 50px 15px 15px;\n  background-position: right 15px center;\n}\n.toast-container > div:hover {\n  -moz-box-shadow: 0 0 12px #000000;\n  -webkit-box-shadow: 0 0 12px #000000;\n  box-shadow: 0 0 12px #000000;\n  opacity: 1;\n  -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n  filter: alpha(opacity=100);\n  cursor: pointer;\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.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.toast-container > .toast-success {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==\") !important;\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.toast-container.toast-top-center > div,\n.toast-container.toast-bottom-center > div {\n  width: 300px;\n  margin-left: auto;\n  margin-right: auto;\n}\n.toast-container.toast-top-full-width > div,\n.toast-container.toast-bottom-full-width > div {\n  width: 96%;\n  margin-left: auto;\n  margin-right: auto;\n}\n.toast {\n  background-color: #030303;\n}\n.toast-success {\n  background-color: #51A351;\n}\n.toast-error {\n  background-color: #BD362F;\n}\n.toast-info {\n  background-color: #2F96B4;\n}\n.toast-warning {\n  background-color: #F89406;\n}\n.toast-progress {\n  position: absolute;\n  left: 0;\n  bottom: 0;\n  height: 4px;\n  background-color: #000000;\n  opacity: 0.4;\n  -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=40);\n  filter: alpha(opacity=40);\n}\n/*Responsive Design*/\n@media all and (max-width: 240px) {\n  .toast-container > div {\n    padding: 8px 8px 8px 50px;\n    width: 11em;\n  }\n  .toast-container > div.rtl {\n    padding: 8px 50px 8px 8px;\n  }\n  .toast-container .toast-close-button {\n    right: -0.2em;\n    top: -0.2em;\n  }\n  .toast-container .rtl .toast-close-button {\n    left: -0.2em;\n    right: 0.2em;\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 > div.rtl {\n    padding: 8px 50px 8px 8px;\n  }\n  .toast-container .toast-close-button {\n    right: -0.2em;\n    top: -0.2em;\n  }\n  .toast-container .rtl .toast-close-button {\n    left: -0.2em;\n    right: 0.2em;\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  .toast-container > div.rtl {\n    padding: 15px 50px 15px 15px;\n  }\n}\n"
  },
  {
    "path": "public/backend/vendors/css/extensions/unslider.css",
    "content": "/**\n *   Here's where everything gets included. You don't need\n *   to change anything here, and doing so might break\n *   stuff. Here be dragons and all that.\n */\n/**\n *   Default variables\n *\n *   While these can be set with JavaScript, it's probably\n *   better and faster to just set them here, compile to\n *   CSS and include that instead to use some of that\n *   hardware-accelerated goodness.\n */\n.unslider {\n  position: relative;\n  text-align: center;\n  overflow: auto;\n  margin: 0;\n  padding: 0;\n}\n.unslider-wrap {\n  position: relative;\n}\n.unslider-wrap.unslider-carousel > li {\n  float: left;\n}\n.unslider-vertical > ul {\n  height: 100%;\n}\n.unslider-vertical li {\n  float: none;\n  width: 100%;\n}\n.unslider-fade {\n  position: relative;\n}\n.unslider-fade .unslider-wrap li {\n  position: absolute;\n  left: 0;\n  top: 0;\n  right: 0;\n  z-index: 8;\n}\n.unslider-fade .unslider-wrap li.unslider-active {\n  z-index: 10;\n}\n.unslider ul, .unslider ol, .unslider li {\n  list-style: none;\n  /* Reset any weird spacing */\n  margin: 0;\n  padding: 0;\n  border: none;\n}\n.unslider-arrow {\n  position: absolute;\n  left: 20px;\n  z-index: 10;\n  cursor: pointer;\n}\n.unslider-arrow.next {\n  left: auto;\n  right: 20px;\n}\n\n.unslider-nav ol {\n  list-style: none;\n  text-align: center;\n}\n.unslider-nav ol li {\n  display: inline-block;\n  width: 6px;\n  height: 6px;\n  margin: 0 4px;\n  background: transparent;\n  border-radius: 5px;\n  overflow: hidden;\n  text-indent: -999em;\n  border: 2px solid #1D2B36;\n  cursor: pointer;\n}\n.unslider-nav ol li.unslider-active {\n  background: #1D2B36;\n  cursor: default;\n}\n\n.unslider-arrow {\n  display: block;\n  width: 32px;\n  height: 32px;\n  top: 50%;\n  right: -50px;\n  left: auto;\n  margin-top: -16px;\n  overflow: hidden;\n  border-radius: 32px;\n  background: rgba(0,0,0,.2);\n  /*text-indent: -999em;*/\n  font-size: 0;\n  opacity: .6;\n  transition: opacity .2s;\n  text-align: center;\n  line-height: 32px;\n}\n\n.unslider-arrow.prev {\n  left: 20px;\n  right: auto;\n}\n.unslider-arrow.prev:before {\n  font-family: 'icomoon';\n  font-size: 1.3rem;\n  content: '\\ea07';\n  color: #1D2B36;\n}\n\n.unslider-arrow.next:before {\n  font-family: 'icomoon';\n  font-size: 1.3rem;\n  content: '\\ea09';\n  color: #1D2B36;\n}"
  },
  {
    "path": "public/backend/vendors/css/forms/select/select2.css",
    "content": ".select2-container {\n  box-sizing: border-box;\n  display: inline-block;\n  margin: 0;\n  position: relative;\n  vertical-align: middle; }\n  .select2-container .select2-selection--single {\n    box-sizing: border-box;\n    cursor: pointer;\n    display: block;\n    height: 28px;\n    user-select: none;\n    -webkit-user-select: none; }\n    .select2-container .select2-selection--single .select2-selection__rendered {\n      display: block;\n      padding-left: 8px;\n      padding-right: 20px;\n      overflow: hidden;\n      text-overflow: ellipsis;\n      white-space: nowrap; }\n    .select2-container .select2-selection--single .select2-selection__clear {\n      position: relative; }\n  .select2-container[dir=\"rtl\"] .select2-selection--single .select2-selection__rendered {\n    padding-right: 8px;\n    padding-left: 20px; }\n  .select2-container .select2-selection--multiple {\n    box-sizing: border-box;\n    cursor: pointer;\n    display: block;\n    min-height: 32px;\n    user-select: none;\n    -webkit-user-select: none; }\n    .select2-container .select2-selection--multiple .select2-selection__rendered {\n      display: inline-block;\n      overflow: hidden;\n      padding-left: 8px;\n      text-overflow: ellipsis;\n      white-space: nowrap; }\n  .select2-container .select2-search--inline {\n    float: left; }\n    .select2-container .select2-search--inline .select2-search__field {\n      box-sizing: border-box;\n      border: none;\n      font-size: 100%;\n      margin-top: 5px;\n      padding: 0; }\n      .select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button {\n        -webkit-appearance: none; }\n\n.select2-dropdown {\n  background-color: white;\n  border: 1px solid #aaa;\n  border-radius: 4px;\n  box-sizing: border-box;\n  display: block;\n  position: absolute;\n  left: -100000px;\n  width: 100%;\n  z-index: 1051; }\n\n.select2-results {\n  display: block; }\n\n.select2-results__options {\n  list-style: none;\n  margin: 0;\n  padding: 0; }\n\n.select2-results__option {\n  padding: 6px;\n  user-select: none;\n  -webkit-user-select: none; }\n  .select2-results__option[aria-selected] {\n    cursor: pointer; }\n\n.select2-container--open .select2-dropdown {\n  left: 0; }\n\n.select2-container--open .select2-dropdown--above {\n  border-bottom: none;\n  border-bottom-left-radius: 0;\n  border-bottom-right-radius: 0; }\n\n.select2-container--open .select2-dropdown--below {\n  border-top: none;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0; }\n\n.select2-search--dropdown {\n  display: block;\n  padding: 4px; }\n  .select2-search--dropdown .select2-search__field {\n    padding: 4px;\n    width: 100%;\n    box-sizing: border-box; }\n    .select2-search--dropdown .select2-search__field::-webkit-search-cancel-button {\n      -webkit-appearance: none; }\n  .select2-search--dropdown.select2-search--hide {\n    display: none; }\n\n.select2-close-mask {\n  border: 0;\n  margin: 0;\n  padding: 0;\n  display: block;\n  position: fixed;\n  left: 0;\n  top: 0;\n  min-height: 100%;\n  min-width: 100%;\n  height: auto;\n  width: auto;\n  opacity: 0;\n  z-index: 99;\n  background-color: #fff;\n  filter: alpha(opacity=0); }\n\n.select2-hidden-accessible {\n  border: 0 !important;\n  clip: rect(0 0 0 0) !important;\n  -webkit-clip-path: inset(50%) !important;\n  clip-path: inset(50%) !important;\n  height: 1px !important;\n  overflow: hidden !important;\n  padding: 0 !important;\n  position: absolute !important;\n  width: 1px !important;\n  white-space: nowrap !important; }\n\n.select2-container--default .select2-selection--single {\n  background-color: #fff;\n  border: 1px solid #aaa;\n  border-radius: 4px; }\n  .select2-container--default .select2-selection--single .select2-selection__rendered {\n    color: #444;\n    line-height: 28px; }\n  .select2-container--default .select2-selection--single .select2-selection__clear {\n    cursor: pointer;\n    float: right;\n    font-weight: bold; }\n  .select2-container--default .select2-selection--single .select2-selection__placeholder {\n    color: #999; }\n  .select2-container--default .select2-selection--single .select2-selection__arrow {\n    height: 26px;\n    position: absolute;\n    top: 1px;\n    right: 1px;\n    width: 20px; }\n    .select2-container--default .select2-selection--single .select2-selection__arrow b {\n      border-color: #888 transparent transparent transparent;\n      border-style: solid;\n      border-width: 5px 4px 0 4px;\n      height: 0;\n      left: 50%;\n      margin-left: -4px;\n      margin-top: -2px;\n      position: absolute;\n      top: 50%;\n      width: 0; }\n\n.select2-container--default[dir=\"rtl\"] .select2-selection--single .select2-selection__clear {\n  float: left; }\n\n.select2-container--default[dir=\"rtl\"] .select2-selection--single .select2-selection__arrow {\n  left: 1px;\n  right: auto; }\n\n.select2-container--default.select2-container--disabled .select2-selection--single {\n  background-color: #eee;\n  cursor: default; }\n  .select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear {\n    display: none; }\n\n.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b {\n  border-color: transparent transparent #888 transparent;\n  border-width: 0 4px 5px 4px; }\n\n.select2-container--default .select2-selection--multiple {\n  background-color: white;\n  border: 1px solid #aaa;\n  border-radius: 4px;\n  cursor: text; }\n  .select2-container--default .select2-selection--multiple .select2-selection__rendered {\n    box-sizing: border-box;\n    list-style: none;\n    margin: 0;\n    padding: 0 5px;\n    width: 100%; }\n    .select2-container--default .select2-selection--multiple .select2-selection__rendered li {\n      list-style: none; }\n  .select2-container--default .select2-selection--multiple .select2-selection__clear {\n    cursor: pointer;\n    float: right;\n    font-weight: bold;\n    margin-top: 5px;\n    margin-right: 10px;\n    padding: 1px; }\n  .select2-container--default .select2-selection--multiple .select2-selection__choice {\n    background-color: #e4e4e4;\n    border: 1px solid #aaa;\n    border-radius: 4px;\n    cursor: default;\n    float: left;\n    margin-right: 5px;\n    margin-top: 5px;\n    padding: 0 5px; }\n  .select2-container--default .select2-selection--multiple .select2-selection__choice__remove {\n    color: #999;\n    cursor: pointer;\n    display: inline-block;\n    font-weight: bold;\n    margin-right: 2px; }\n    .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover {\n      color: #333; }\n\n.select2-container--default[dir=\"rtl\"] .select2-selection--multiple .select2-selection__choice, .select2-container--default[dir=\"rtl\"] .select2-selection--multiple .select2-search--inline {\n  float: right; }\n\n.select2-container--default[dir=\"rtl\"] .select2-selection--multiple .select2-selection__choice {\n  margin-left: 5px;\n  margin-right: auto; }\n\n.select2-container--default[dir=\"rtl\"] .select2-selection--multiple .select2-selection__choice__remove {\n  margin-left: 2px;\n  margin-right: auto; }\n\n.select2-container--default.select2-container--focus .select2-selection--multiple {\n  border: solid black 1px;\n  outline: 0; }\n\n.select2-container--default.select2-container--disabled .select2-selection--multiple {\n  background-color: #eee;\n  cursor: default; }\n\n.select2-container--default.select2-container--disabled .select2-selection__choice__remove {\n  display: none; }\n\n.select2-container--default.select2-container--open.select2-container--above .select2-selection--single, .select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0; }\n\n.select2-container--default.select2-container--open.select2-container--below .select2-selection--single, .select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple {\n  border-bottom-left-radius: 0;\n  border-bottom-right-radius: 0; }\n\n.select2-container--default .select2-search--dropdown .select2-search__field {\n  border: 1px solid #aaa; }\n\n.select2-container--default .select2-search--inline .select2-search__field {\n  background: transparent;\n  border: none;\n  outline: 0;\n  box-shadow: none;\n  -webkit-appearance: textfield; }\n\n.select2-container--default .select2-results > .select2-results__options {\n  max-height: 200px;\n  overflow-y: auto; }\n\n.select2-container--default .select2-results__option[role=group] {\n  padding: 0; }\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 .select2-results__option {\n  padding-left: 1em; }\n  .select2-container--default .select2-results__option .select2-results__option .select2-results__group {\n    padding-left: 0; }\n  .select2-container--default .select2-results__option .select2-results__option .select2-results__option {\n    margin-left: -1em;\n    padding-left: 2em; }\n    .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option {\n      margin-left: -2em;\n      padding-left: 3em; }\n      .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {\n        margin-left: -3em;\n        padding-left: 4em; }\n        .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {\n          margin-left: -4em;\n          padding-left: 5em; }\n          .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option {\n            margin-left: -5em;\n            padding-left: 6em; }\n\n.select2-container--default .select2-results__option--highlighted[aria-selected] {\n  background-color: #5897fb;\n  color: white; }\n\n.select2-container--default .select2-results__group {\n  cursor: default;\n  display: block;\n  padding: 6px; }\n\n.select2-container--classic .select2-selection--single {\n  background-color: #f7f7f7;\n  border: 1px solid #aaa;\n  border-radius: 4px;\n  outline: 0;\n  background-image: -webkit-linear-gradient(top, white 50%, #eeeeee 100%);\n  background-image: -o-linear-gradient(top, white 50%, #eeeeee 100%);\n  background-image: linear-gradient(to bottom, white 50%, #eeeeee 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0); }\n  .select2-container--classic .select2-selection--single:focus {\n    border: 1px solid #5897fb; }\n  .select2-container--classic .select2-selection--single .select2-selection__rendered {\n    color: #444;\n    line-height: 28px; }\n  .select2-container--classic .select2-selection--single .select2-selection__clear {\n    cursor: pointer;\n    float: right;\n    font-weight: bold;\n    margin-right: 10px; }\n  .select2-container--classic .select2-selection--single .select2-selection__placeholder {\n    color: #999; }\n  .select2-container--classic .select2-selection--single .select2-selection__arrow {\n    background-color: #ddd;\n    border: none;\n    border-left: 1px solid #aaa;\n    border-top-right-radius: 4px;\n    border-bottom-right-radius: 4px;\n    height: 26px;\n    position: absolute;\n    top: 1px;\n    right: 1px;\n    width: 20px;\n    background-image: -webkit-linear-gradient(top, #eeeeee 50%, #cccccc 100%);\n    background-image: -o-linear-gradient(top, #eeeeee 50%, #cccccc 100%);\n    background-image: linear-gradient(to bottom, #eeeeee 50%, #cccccc 100%);\n    background-repeat: repeat-x;\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0); }\n    .select2-container--classic .select2-selection--single .select2-selection__arrow b {\n      border-color: #888 transparent transparent transparent;\n      border-style: solid;\n      border-width: 5px 4px 0 4px;\n      height: 0;\n      left: 50%;\n      margin-left: -4px;\n      margin-top: -2px;\n      position: absolute;\n      top: 50%;\n      width: 0; }\n\n.select2-container--classic[dir=\"rtl\"] .select2-selection--single .select2-selection__clear {\n  float: left; }\n\n.select2-container--classic[dir=\"rtl\"] .select2-selection--single .select2-selection__arrow {\n  border: none;\n  border-right: 1px solid #aaa;\n  border-radius: 0;\n  border-top-left-radius: 4px;\n  border-bottom-left-radius: 4px;\n  left: 1px;\n  right: auto; }\n\n.select2-container--classic.select2-container--open .select2-selection--single {\n  border: 1px solid #5897fb; }\n  .select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow {\n    background: transparent;\n    border: none; }\n    .select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b {\n      border-color: transparent transparent #888 transparent;\n      border-width: 0 4px 5px 4px; }\n\n.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single {\n  border-top: none;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  background-image: -webkit-linear-gradient(top, white 0%, #eeeeee 50%);\n  background-image: -o-linear-gradient(top, white 0%, #eeeeee 50%);\n  background-image: linear-gradient(to bottom, white 0%, #eeeeee 50%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0); }\n\n.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single {\n  border-bottom: none;\n  border-bottom-left-radius: 0;\n  border-bottom-right-radius: 0;\n  background-image: -webkit-linear-gradient(top, #eeeeee 50%, white 100%);\n  background-image: -o-linear-gradient(top, #eeeeee 50%, white 100%);\n  background-image: linear-gradient(to bottom, #eeeeee 50%, white 100%);\n  background-repeat: repeat-x;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0); }\n\n.select2-container--classic .select2-selection--multiple {\n  background-color: white;\n  border: 1px solid #aaa;\n  border-radius: 4px;\n  cursor: text;\n  outline: 0; }\n  .select2-container--classic .select2-selection--multiple:focus {\n    border: 1px solid #5897fb; }\n  .select2-container--classic .select2-selection--multiple .select2-selection__rendered {\n    list-style: none;\n    margin: 0;\n    padding: 0 5px; }\n  .select2-container--classic .select2-selection--multiple .select2-selection__clear {\n    display: none; }\n  .select2-container--classic .select2-selection--multiple .select2-selection__choice {\n    background-color: #e4e4e4;\n    border: 1px solid #aaa;\n    border-radius: 4px;\n    cursor: default;\n    float: left;\n    margin-right: 5px;\n    margin-top: 5px;\n    padding: 0 5px; }\n  .select2-container--classic .select2-selection--multiple .select2-selection__choice__remove {\n    color: #888;\n    cursor: pointer;\n    display: inline-block;\n    font-weight: bold;\n    margin-right: 2px; }\n    .select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover {\n      color: #555; }\n\n.select2-container--classic[dir=\"rtl\"] .select2-selection--multiple .select2-selection__choice {\n  float: right;\n  margin-left: 5px;\n  margin-right: auto; }\n\n.select2-container--classic[dir=\"rtl\"] .select2-selection--multiple .select2-selection__choice__remove {\n  margin-left: 2px;\n  margin-right: auto; }\n\n.select2-container--classic.select2-container--open .select2-selection--multiple {\n  border: 1px solid #5897fb; }\n\n.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple {\n  border-top: none;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0; }\n\n.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple {\n  border-bottom: none;\n  border-bottom-left-radius: 0;\n  border-bottom-right-radius: 0; }\n\n.select2-container--classic .select2-search--dropdown .select2-search__field {\n  border: 1px solid #aaa;\n  outline: 0; }\n\n.select2-container--classic .select2-search--inline .select2-search__field {\n  outline: 0;\n  box-shadow: none; }\n\n.select2-container--classic .select2-dropdown {\n  background-color: white;\n  border: 1px solid transparent; }\n\n.select2-container--classic .select2-dropdown--above {\n  border-bottom: none; }\n\n.select2-container--classic .select2-dropdown--below {\n  border-top: none; }\n\n.select2-container--classic .select2-results > .select2-results__options {\n  max-height: 200px;\n  overflow-y: auto; }\n\n.select2-container--classic .select2-results__option[role=group] {\n  padding: 0; }\n\n.select2-container--classic .select2-results__option[aria-disabled=true] {\n  color: grey; }\n\n.select2-container--classic .select2-results__option--highlighted[aria-selected] {\n  background-color: #3875d7;\n  color: white; }\n\n.select2-container--classic .select2-results__group {\n  cursor: default;\n  display: block;\n  padding: 6px; }\n\n.select2-container--classic.select2-container--open .select2-dropdown {\n  border-color: #5897fb; }\n"
  },
  {
    "path": "public/backend/vendors/css/forms/spinner/jquery.bootstrap-touchspin.css",
    "content": "/*\n *  Bootstrap TouchSpin - v4.2.5\n *  A mobile and touch friendly input spinner component for Bootstrap 3 & 4.\n *  http://www.virtuosoft.eu/code/bootstrap-touchspin/\n *\n *  Made by István Ujj-Mészáros\n *  Under Apache License v2.0 License\n */\n/* This CSS file is unnecessary if you are not using vertical buttons functionality */\n\n.bootstrap-touchspin .input-group-btn-vertical {\n  position: absolute;\n  right: 0;\n  height: 100%;\n  z-index: 11;\n}\n\n.bootstrap-touchspin .input-group-btn-vertical > .btn {\n  position: absolute;\n  right: 0;\n  height: 50%;\n  padding: 0;\n  width: 2em;\n  text-align: center;\n  line-height: 1;\n}\n\n.bootstrap-touchspin .input-group-btn-vertical .bootstrap-touchspin-up {\n  border-radius: 0 4px 0 0;\n  top: 0;\n}\n\n.bootstrap-touchspin .input-group-btn-vertical .bootstrap-touchspin-down {\n  border-radius: 0 0 4px 0;\n  bottom: 0;\n}"
  },
  {
    "path": "public/backend/vendors/css/forms/toggle/switchery.css",
    "content": "/*\n *\n * Main stylesheet for Switchery.\n * http://abpetkov.github.io/switchery/\n *\n */\n\n/* Switchery defaults. */\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  -moz-user-select: none;\n  -khtml-user-select: none;\n  -webkit-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  box-sizing: content-box;\n  background-clip: 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\n/* Switchery sizes. */\n\n.switchery-small {\n  border-radius: 20px;\n  height: 20px;\n  width: 33px;\n}\n\n.switchery-small > small {\n  height: 20px;\n  width: 20px;\n}\n\n.switchery-large {\n  border-radius: 40px;\n  height: 40px;\n  width: 66px;\n}\n\n.switchery-large > small {\n  height: 40px;\n  width: 40px;\n}\n\n\n"
  },
  {
    "path": "public/backend/vendors/css/modal/facebook.css",
    "content": ".sweet-overlay {\n  border-radius: 3px; }\n\n.sweet-alert {\n  font-family: Helvetica, Arial, 'lucida grande', tahoma, verdana, arial, sans-serif;\n  padding: 12px;\n  padding-top: 53px;\n  text-align: right;\n  box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.11), 0px 6px 30px rgba(0, 0, 0, 0.14); }\n  .sweet-alert h2 {\n    position: absolute;\n    top: 0;\n    left: 0;\n    right: 0;\n    height: 41px;\n    background-color: #f6f7f8;\n    margin: 0;\n    font-size: 15px;\n    text-align: left;\n    padding-left: 12px;\n    color: #131722;\n    border-bottom: 1px solid #e5e5e5; }\n  .sweet-alert p {\n    display: block;\n    text-align: center;\n    color: #131722;\n    font-weight: 400;\n    font-size: 15px;\n    margin-top: 7px; }\n  .sweet-alert .sa-button-container {\n    border-top: 1px solid #dcdee3; }\n  .sweet-alert[data-has-confirm-button=false][data-has-cancel-button=false] {\n    padding-bottom: 10px; }\n    .sweet-alert[data-has-confirm-button=false][data-has-cancel-button=false] .sa-button-container {\n      display: none; }\n  .sweet-alert button {\n    font-size: 12px;\n    padding: 5px 10px;\n    border-radius: 2px;\n    box-shadow: none !important;\n    text-shadow: 0px -1px 0px rgba(0, 0, 0, 0.3);\n    font-weight: 500;\n    margin: 0;\n    margin-top: 12px; }\n    .sweet-alert button:focus, .sweet-alert button.cancel:focus {\n      box-shadow: 0 0 1px 2px rgba(88, 144, 255, 0.75), 0 1px 1px rgba(0, 0, 0, 0.15) !important; }\n    .sweet-alert button.confirm {\n      border: 1px solid #3d5586;\n      background-color: #47639c !important;\n      margin-left: 4px; }\n    .sweet-alert button.cancel {\n      color: #4e5664;\n      background-color: #fafbfb;\n      text-shadow: 0px -1px 0px white;\n      border: 1px solid #c5c6c8;\n      box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.04) !important;\n      font-weight: 600; }\n      .sweet-alert button.cancel:hover {\n        background-color: #fafbfb; }\n  .sweet-alert .sa-icon:not(.sa-custom) {\n    transform: scale(0.7);\n    margin-bottom: -10px;\n    margin-top: -10px; }\n  .sweet-alert input {\n    border: 1px solid #bdc7d8;\n    padding: 3px;\n    border-radius: 0;\n    box-shadow: none;\n    font-size: 15px;\n    height: 33px;\n    margin: 10px 0; }\n    .sweet-alert input:focus {\n      box-shadow: 0 0 1px 2px rgba(88, 144, 255, 0.75), 0 1px 1px rgba(0, 0, 0, 0.15) !important; }\n  .sweet-alert fieldset .sa-input-error {\n    display: none; }\n  .sweet-alert .sa-error-container {\n    text-align: center;\n    background-color: #fdebe8;\n    margin: 0;\n    border: none; }\n    .sweet-alert .sa-error-container.show {\n      margin: 14px;\n      margin-top: 0;\n      border: 1px solid #d5512d; }\n    .sweet-alert .sa-error-container .icon {\n      display: none; }\n    .sweet-alert .sa-error-container p {\n      color: #303b44;\n      margin-top: 3px; }\n\n@-webkit-keyframes animateErrorIcon {\n  0% {\n    transform: rotateX(100deg), scale(0.5);\n    -webkit-transform: rotateX(100deg), scale(0.5);\n    opacity: 0; }\n\n  100% {\n    transform: rotateX(0deg), scale(0.5);\n    -webkit-transform: rotateX(0deg), scale(0.5);\n    opacity: 1; } }\n\n@keyframes animateErrorIcon {\n  0% {\n    transform: rotateX(100deg), scale(0.5);\n    -webkit-transform: rotateX(100deg), scale(0.5);\n    opacity: 0; }\n\n  100% {\n    transform: rotateX(0deg), scale(0.5);\n    -webkit-transform: rotateX(0deg), scale(0.5);\n    opacity: 1; } }\n"
  },
  {
    "path": "public/backend/vendors/css/modal/google.css",
    "content": ".sweet-overlay {\n  background: rgba(10, 10, 10, 0.6); }\n\n.sweet-alert {\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  padding: 24px;\n  padding-top: 64px;\n  padding-bottom: 13px;\n  text-align: right;\n  border-radius: 0;\n  box-shadow: 0 0 14px rgba(0, 0, 0, 0.24), 0 14px 28px rgba(0, 0, 0, 0.48); }\n  .sweet-alert h2 {\n    position: absolute;\n    top: 0;\n    left: 0;\n    right: 0;\n    height: auto;\n    font-weight: 400;\n    color: #212121;\n    margin: 20px 0;\n    font-size: 1.2em;\n    line-height: 1.25;\n    text-align: left;\n    padding: 0 24px; }\n  .sweet-alert p {\n    display: block;\n    text-align: center;\n    color: #212121;\n    font-weight: 400;\n    font-size: 14px;\n    margin: 20px 0; }\n  .sweet-alert button {\n    border-radius: 2px;\n    box-shadow: none !important;\n    background: none !important;\n    border-radius: 2px;\n    text-transform: uppercase;\n    font-size: 14px;\n    font-weight: 600;\n    padding: 8px 16px;\n    position: relative;\n    margin-top: 0; }\n    .sweet-alert button:hover, .sweet-alert button:focus {\n      background-color: #f6f6f6 !important; }\n    .sweet-alert button.confirm {\n      color: #3c80f6; }\n    .sweet-alert button.cancel {\n      color: #757575; }\n      .sweet-alert button.cancel:focus {\n        box-shadow: none !important; }\n  .sweet-alert .sa-icon:not(.sa-custom) {\n    transform: scale(0.8);\n    margin-bottom: -10px;\n    margin-top: -10px; }\n  .sweet-alert input {\n    border: none;\n    border-radius: 0;\n    border-bottom: 1px solid #c9c9c9;\n    color: #212121;\n    margin-bottom: 8px;\n    padding: 1px;\n    padding-bottom: 8px;\n    height: auto;\n    box-shadow: none;\n    font-size: 13px;\n    margin: 10px 0; }\n    .sweet-alert input:focus {\n      border: none;\n      border-bottom: 1px solid #3c80f6;\n      box-shadow: inset 0 -1px 0 #3c80f6; }\n  .sweet-alert fieldset {\n    padding: 0; }\n    .sweet-alert fieldset .sa-input-error {\n      display: none; }\n  .sweet-alert .sa-error-container {\n    display: none;\n    background: none;\n    height: auto;\n    padding: 0 24px;\n    margin: 0 -20px;\n    text-align: left; }\n    .sweet-alert .sa-error-container.show {\n      padding: 0 24px;\n      display: block; }\n      .sweet-alert .sa-error-container.show ~ fieldset input {\n        background: red;\n        border-bottom: 1px solid #d9453c;\n        box-shadow: inset 0 -1px 0 #d9453c; }\n    .sweet-alert .sa-error-container .icon {\n      display: none; }\n    .sweet-alert .sa-error-container p {\n      color: #d9453c;\n      margin-top: 0; }\n\n@-webkit-keyframes animateErrorIcon {\n  0% {\n    transform: rotateX(100deg), scale(0.5);\n    -webkit-transform: rotateX(100deg), scale(0.5);\n    opacity: 0; }\n\n  100% {\n    transform: rotateX(0deg), scale(0.5);\n    -webkit-transform: rotateX(0deg), scale(0.5);\n    opacity: 1; } }\n\n@keyframes animateErrorIcon {\n  0% {\n    transform: rotateX(100deg), scale(0.5);\n    -webkit-transform: rotateX(100deg), scale(0.5);\n    opacity: 0; }\n\n  100% {\n    transform: rotateX(0deg), scale(0.5);\n    -webkit-transform: rotateX(0deg), scale(0.5);\n    opacity: 1; } }\n"
  },
  {
    "path": "public/backend/vendors/css/modal/twitter.css",
    "content": ".sweet-overlay {\n  background: rgba(41, 47, 51, 0.9); }\n\n.sweet-alert {\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  padding: 15px;\n  padding-top: 55px;\n  text-align: right;\n  border-radius: 6px;\n  box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.11), 0px 6px 30px rgba(0, 0, 0, 0.14); }\n  .sweet-alert h2 {\n    position: absolute;\n    top: 0;\n    left: 0;\n    right: 0;\n    height: 40px;\n    line-height: 40px;\n    font-size: 16px;\n    font-weight: 400;\n    color: #8899a6;\n    margin: 0;\n    color: #66757f;\n    border-bottom: 1px solid #e1e8ed; }\n  .sweet-alert p {\n    display: block;\n    text-align: center;\n    color: #66757f;\n    font-weight: 400;\n    font-size: 13px;\n    margin-top: 7px; }\n  .sweet-alert .sa-button-container {\n    background-color: #f5f8fa;\n    border-top: 1px solid #e1e8ed;\n    box-shadow: 0px -1px 0px white;\n    margin: -15px;\n    margin-top: 0; }\n  .sweet-alert[data-has-confirm-button=false][data-has-cancel-button=false] {\n    padding-bottom: 10px; }\n    .sweet-alert[data-has-confirm-button=false][data-has-cancel-button=false] .sa-button-container {\n      display: none; }\n  .sweet-alert button {\n    border-radius: 2px;\n    box-shadow: none !important;\n    text-shadow: 0px -1px 0px rgba(0, 0, 0, 0.3);\n    margin: 17px 0px;\n    border-radius: 4px;\n    font-size: 14px;\n    font-weight: 600;\n    padding: 8px 16px;\n    position: relative; }\n    .sweet-alert button:focus, .sweet-alert button.cancel:focus {\n      box-shadow: none !important; }\n      .sweet-alert button:focus::before, .sweet-alert button.cancel:focus::before {\n        content: \"\";\n        position: absolute;\n        left: -5px;\n        top: -5px;\n        right: -5px;\n        bottom: -5px;\n        border: 2px solid #a5b0b4;\n        border-radius: 8px; }\n    .sweet-alert button.confirm {\n      background-color: #55acee !important;\n      background-image: linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n      -ms-filter: \"progid:DXImageTransform.Microsoft.gradient(startColorstr=#00000000, endColorstr=#0C000000)\";\n      border: 1px solid #3b88c3;\n      box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15);\n      margin-right: 15px; }\n      .sweet-alert button.confirm:hover {\n        background-color: #55acee;\n        background-image: linear-gradient(transparent, rgba(0, 0, 0, 0.15));\n        -ms-filter: \"progid:DXImageTransform.Microsoft.gradient(startColorstr=#00000000, endColorstr=#26000000)\";\n        border-color: #3b88c3; }\n    .sweet-alert button.cancel {\n      color: #66757e;\n      background-color: #f5f8fa;\n      background-image: linear-gradient(#fff, #f5f8fa);\n      text-shadow: 0px -1px 0px white;\n      margin-right: 9px;\n      border: 1px solid #e1e8ed; }\n      .sweet-alert button.cancel:hover, .sweet-alert button.cancel:focus:hover {\n        background-color: #e1e8ed;\n        background-image: linear-gradient(#fff, #e1e8ed);\n        -ms-filter: \"progid:DXImageTransform.Microsoft.gradient(enabled=false)\";\n        border-color: #e1e8ed; }\n      .sweet-alert button.cancel:focus {\n        background: #fff;\n        border-color: #fff; }\n  .sweet-alert .sa-icon:not(.sa-custom) {\n    transform: scale(0.72);\n    margin-bottom: -2px;\n    margin-top: -10px; }\n  .sweet-alert input {\n    border: 1px solid #e1e8ed;\n    border-radius: 3px;\n    padding: 10px 7px;\n    height: auto;\n    box-shadow: none;\n    font-size: 13px;\n    margin: 10px 0; }\n    .sweet-alert input:focus {\n      border-color: #94A1A6;\n      box-shadow: inset 0 0 0 1px rgba(77, 99, 107, 0.7); }\n  .sweet-alert fieldset .sa-input-error {\n    display: none; }\n  .sweet-alert .sa-error-container {\n    text-align: center;\n    border: none;\n    background-color: #fbedc0;\n    margin-bottom: 6px; }\n    .sweet-alert .sa-error-container.show {\n      border: 1px solid #f0e1b9; }\n    .sweet-alert .sa-error-container .icon {\n      display: none; }\n    .sweet-alert .sa-error-container p {\n      color: #292f33;\n      font-weight: 600;\n      margin-top: 0; }\n\n@-webkit-keyframes animateErrorIcon {\n  0% {\n    transform: rotateX(100deg), scale(0.5);\n    -webkit-transform: rotateX(100deg), scale(0.5);\n    opacity: 0; }\n\n  100% {\n    transform: rotateX(0deg), scale(0.5);\n    -webkit-transform: rotateX(0deg), scale(0.5);\n    opacity: 1; } }\n\n@keyframes animateErrorIcon {\n  0% {\n    transform: rotateX(100deg), scale(0.5);\n    -webkit-transform: rotateX(100deg), scale(0.5);\n    opacity: 0; }\n\n  100% {\n    transform: rotateX(0deg), scale(0.5);\n    -webkit-transform: rotateX(0deg), scale(0.5);\n    opacity: 1; } }\n"
  },
  {
    "path": "public/backend/vendors/css/pickers/pickadate/classic.css",
    "content": "/* ==========================================================================\n   $BASE-PICKER\n   ========================================================================== */\n/**\n * Note: the root picker element should *NOT* be styled more than what’s here.\n */\n.picker {\n  font-size: 16px;\n  text-align: left;\n  line-height: 1.2;\n  color: #000;\n  position: absolute;\n  z-index: 10000;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n  outline: none;\n}\n/**\n * The picker input element.\n */\n.picker__input {\n  cursor: default;\n}\n/**\n * When the picker is opened, the input element is “activated”.\n */\n.picker__input.picker__input--active {\n  border-color: #0089ec;\n}\n/**\n * The holder is the only “scrollable” top-level container element.\n */\n.picker__holder {\n  width: 100%;\n  overflow-y: auto;\n  -webkit-overflow-scrolling: touch;\n}\n\n/*!\n * Classic picker styling for pickadate.js\n * Demo: http://amsul.github.io/pickadate.js\n */\n/**\n * Note: the root picker element should *NOT* be styled more than what’s here.\n */\n.picker {\n  width: 100%;\n}\n/**\n * The holder is the base of the picker.\n */\n.picker__holder {\n  position: absolute;\n  background: #fff;\n  border: 1px solid #aaaaaa;\n  border-top-width: 0;\n  border-bottom-width: 0;\n  border-radius: 0 0 5px 5px;\n  box-sizing: border-box;\n  min-width: 176px;\n  max-width: 466px;\n  max-height: 0;\n  -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\n  filter: alpha(opacity=0);\n  -moz-opacity: 0;\n  opacity: 0;\n  transform: translateY(-1em) perspective(600px) rotateX(10deg);\n  transition: transform 0.15s ease-out, opacity 0.15s ease-out, max-height 0s 0.15s, border-width 0s 0.15s;\n}\n/**\n * The frame and wrap work together to ensure that\n * clicks within the picker don’t reach the holder.\n */\n.picker__frame {\n  padding: 1px;\n}\n.picker__wrap {\n  margin: -1px;\n}\n/**\n * When the picker opens...\n */\n.picker--opened .picker__holder {\n  max-height: 25em;\n  -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)\";\n  filter: alpha(opacity=100);\n  -moz-opacity: 1;\n  opacity: 1;\n  border-top-width: 1px;\n  border-bottom-width: 1px;\n  transform: translateY(0) perspective(600px) rotateX(0);\n  transition: transform 0.15s ease-out, opacity 0.15s ease-out, max-height 0s, border-width 0s;\n  box-shadow: 0 6px 18px 1px rgba(0, 0, 0, 0.12);\n}\n"
  },
  {
    "path": "public/backend/vendors/css/pickers/pickadate/classic.date.css",
    "content": "/* ==========================================================================\n   $BASE-DATE-PICKER\n   ========================================================================== */\n/**\n * The picker box.\n */\n.picker__box {\n  padding: 0 1em;\n}\n/**\n * The header containing the month and year stuff.\n */\n.picker__header {\n  text-align: center;\n  position: relative;\n  margin-top: .75em;\n}\n/**\n * The month and year labels.\n */\n.picker__month,\n.picker__year {\n  font-weight: 500;\n  display: inline-block;\n  margin-left: .25em;\n  margin-right: .25em;\n}\n.picker__year {\n  color: #999;\n  font-size: .8em;\n  font-style: italic;\n}\n/**\n * The month and year selectors.\n */\n.picker__select--month,\n.picker__select--year {\n  border: 1px solid #b7b7b7;\n  height: 2em;\n  padding: .5em;\n  margin-left: .25em;\n  margin-right: .25em;\n}\n@media (min-width: 24.5em) {\n  .picker__select--month,\n  .picker__select--year {\n    margin-top: -0.5em;\n  }\n}\n.picker__select--month {\n  width: 35%;\n}\n.picker__select--year {\n  width: 22.5%;\n}\n.picker__select--month:focus,\n.picker__select--year:focus {\n  border-color: #0089ec;\n}\n/**\n * The month navigation buttons.\n */\n.picker__nav--prev,\n.picker__nav--next {\n  position: absolute;\n  padding: .5em 1.25em;\n  width: 1em;\n  height: 1em;\n  box-sizing: content-box;\n  top: -0.25em;\n}\n@media (min-width: 24.5em) {\n  .picker__nav--prev,\n  .picker__nav--next {\n    top: -0.33em;\n  }\n}\n.picker__nav--prev {\n  left: -1em;\n  padding-right: 1.25em;\n}\n@media (min-width: 24.5em) {\n  .picker__nav--prev {\n    padding-right: 1.5em;\n  }\n}\n.picker__nav--next {\n  right: -1em;\n  padding-left: 1.25em;\n}\n@media (min-width: 24.5em) {\n  .picker__nav--next {\n    padding-left: 1.5em;\n  }\n}\n.picker__nav--prev:before,\n.picker__nav--next:before {\n  content: \" \";\n  border-top: .5em solid transparent;\n  border-bottom: .5em solid transparent;\n  border-right: 0.75em solid #000;\n  width: 0;\n  height: 0;\n  display: block;\n  margin: 0 auto;\n}\n.picker__nav--next:before {\n  border-right: 0;\n  border-left: 0.75em solid #000;\n}\n.picker__nav--prev:hover,\n.picker__nav--next:hover {\n  cursor: pointer;\n  color: #000;\n  background: #b1dcfb;\n}\n.picker__nav--disabled,\n.picker__nav--disabled:hover,\n.picker__nav--disabled:before,\n.picker__nav--disabled:before:hover {\n  cursor: default;\n  background: none;\n  border-right-color: #f5f5f5;\n  border-left-color: #f5f5f5;\n}\n/**\n * The calendar table of dates\n */\n.picker__table {\n  text-align: center;\n  border-collapse: collapse;\n  border-spacing: 0;\n  table-layout: fixed;\n  font-size: inherit;\n  width: 100%;\n  margin-top: .75em;\n  margin-bottom: .5em;\n}\n@media (min-height: 33.875em) {\n  .picker__table {\n    margin-bottom: .75em;\n  }\n}\n.picker__table td {\n  margin: 0;\n  padding: 0;\n}\n/**\n * The weekday labels\n */\n.picker__weekday {\n  width: 14.285714286%;\n  font-size: .75em;\n  padding-bottom: .25em;\n  color: #999;\n  font-weight: 500;\n  /* Increase the spacing a tad */\n}\n@media (min-height: 33.875em) {\n  .picker__weekday {\n    padding-bottom: .5em;\n  }\n}\n/**\n * The days on the calendar\n */\n.picker__day {\n  padding: .3125em 0;\n  font-weight: 200;\n  border: 1px solid transparent;\n}\n.picker__day--today {\n  position: relative;\n}\n.picker__day--today:before {\n  content: \" \";\n  position: absolute;\n  top: 2px;\n  right: 2px;\n  width: 0;\n  height: 0;\n  border-top: 0.5em solid #0059bc;\n  border-left: .5em solid transparent;\n}\n.picker__day--disabled:before {\n  border-top-color: #aaa;\n}\n.picker__day--outfocus {\n  color: #ddd;\n}\n.picker__day--infocus:hover,\n.picker__day--outfocus:hover {\n  cursor: pointer;\n  color: #000;\n  background: #b1dcfb;\n}\n.picker__day--highlighted {\n  border-color: #0089ec;\n}\n.picker__day--highlighted:hover,\n.picker--focused .picker__day--highlighted {\n  cursor: pointer;\n  color: #000;\n  background: #b1dcfb;\n}\n.picker__day--selected,\n.picker__day--selected:hover,\n.picker--focused .picker__day--selected {\n  background: #0089ec;\n  color: #fff;\n}\n.picker__day--disabled,\n.picker__day--disabled:hover,\n.picker--focused .picker__day--disabled {\n  background: #f5f5f5;\n  border-color: #f5f5f5;\n  color: #ddd;\n  cursor: default;\n}\n.picker__day--highlighted.picker__day--disabled,\n.picker__day--highlighted.picker__day--disabled:hover {\n  background: #bbb;\n}\n/**\n * The footer containing the \"today\", \"clear\", and \"close\" buttons.\n */\n.picker__footer {\n  text-align: center;\n}\n.picker__button--today,\n.picker__button--clear,\n.picker__button--close {\n  border: 1px solid #fff;\n  background: #fff;\n  font-size: .8em;\n  padding: .66em 0;\n  font-weight: bold;\n  width: 33%;\n  display: inline-block;\n  vertical-align: bottom;\n}\n.picker__button--today:hover,\n.picker__button--clear:hover,\n.picker__button--close:hover {\n  cursor: pointer;\n  color: #000;\n  background: #b1dcfb;\n  border-bottom-color: #b1dcfb;\n}\n.picker__button--today:focus,\n.picker__button--clear:focus,\n.picker__button--close:focus {\n  background: #b1dcfb;\n  border-color: #0089ec;\n  outline: none;\n}\n.picker__button--today:before,\n.picker__button--clear:before,\n.picker__button--close:before {\n  position: relative;\n  display: inline-block;\n  height: 0;\n}\n.picker__button--today:before,\n.picker__button--clear:before {\n  content: \" \";\n  margin-right: .45em;\n}\n.picker__button--today:before {\n  top: -0.05em;\n  width: 0;\n  border-top: 0.66em solid #0059bc;\n  border-left: .66em solid transparent;\n}\n.picker__button--clear:before {\n  top: -0.25em;\n  width: .66em;\n  border-top: 3px solid #e20;\n}\n.picker__button--close:before {\n  content: \"\\D7\";\n  top: -0.1em;\n  vertical-align: top;\n  font-size: 1.1em;\n  margin-right: .35em;\n  color: #777;\n}\n.picker__button--today[disabled],\n.picker__button--today[disabled]:hover {\n  background: #f5f5f5;\n  border-color: #f5f5f5;\n  color: #ddd;\n  cursor: default;\n}\n.picker__button--today[disabled]:before {\n  border-top-color: #aaa;\n}\n\n/* ==========================================================================\n   $CLASSIC-DATE-PICKER\n   ========================================================================== */\n"
  },
  {
    "path": "public/backend/vendors/css/pickers/pickadate/classic.time.css",
    "content": "/* ==========================================================================\n   $BASE-TIME-PICKER\n   ========================================================================== */\n/**\n * The list of times.\n */\n.picker__list {\n  list-style: none;\n  padding: 0.75em 0 4.2em;\n  margin: 0;\n}\n/**\n * The times on the clock.\n */\n.picker__list-item {\n  border-bottom: 1px solid #ddd;\n  border-top: 1px solid #ddd;\n  margin-bottom: -1px;\n  position: relative;\n  background: #fff;\n  padding: .75em 1.25em;\n}\n@media (min-height: 46.75em) {\n  .picker__list-item {\n    padding: .5em 1em;\n  }\n}\n/* Hovered time */\n.picker__list-item:hover {\n  cursor: pointer;\n  color: #000;\n  background: #b1dcfb;\n  border-color: #0089ec;\n  z-index: 10;\n}\n/* Highlighted and hovered/focused time */\n.picker__list-item--highlighted {\n  border-color: #0089ec;\n  z-index: 10;\n}\n.picker__list-item--highlighted:hover,\n.picker--focused .picker__list-item--highlighted {\n  cursor: pointer;\n  color: #000;\n  background: #b1dcfb;\n}\n/* Selected and hovered/focused time */\n.picker__list-item--selected,\n.picker__list-item--selected:hover,\n.picker--focused .picker__list-item--selected {\n  background: #0089ec;\n  color: #fff;\n  z-index: 10;\n}\n/* Disabled time */\n.picker__list-item--disabled,\n.picker__list-item--disabled:hover,\n.picker--focused .picker__list-item--disabled {\n  background: #f5f5f5;\n  border-color: #f5f5f5;\n  color: #ddd;\n  cursor: default;\n  border-color: #ddd;\n  z-index: auto;\n}\n/**\n * The clear button\n */\n.picker--time .picker__button--clear {\n  display: block;\n  width: 80%;\n  margin: 1em auto 0;\n  padding: 1em 1.25em;\n  background: none;\n  border: 0;\n  font-weight: 500;\n  font-size: .67em;\n  text-align: center;\n  text-transform: uppercase;\n  color: #666;\n}\n.picker--time .picker__button--clear:hover,\n.picker--time .picker__button--clear:focus {\n  color: #000;\n  background: #b1dcfb;\n  background: #e20;\n  border-color: #e20;\n  cursor: pointer;\n  color: #fff;\n  outline: none;\n}\n.picker--time .picker__button--clear:before {\n  top: -0.25em;\n  color: #666;\n  font-size: 1.25em;\n  font-weight: bold;\n}\n.picker--time .picker__button--clear:hover:before,\n.picker--time .picker__button--clear:focus:before {\n  color: #fff;\n  border-color: #fff;\n}\n\n/* ==========================================================================\n   $CLASSIC-TIME-PICKER\n   ========================================================================== */\n/**\n * Note: the root picker element should __NOT__ be styled\n * more than what’s here. Style the `.picker__holder` instead.\n */\n.picker--time {\n  min-width: 256px;\n  max-width: 320px;\n}\n/**\n * The holder is the base of the picker.\n */\n.picker--time .picker__holder {\n  background: #f2f2f2;\n}\n@media (min-height: 40.125em) {\n  .picker--time .picker__holder {\n    font-size: .875em;\n  }\n}\n/**\n * The box contains the list of times.\n */\n.picker--time .picker__box {\n  padding: 0;\n  position: relative;\n}\n"
  },
  {
    "path": "public/backend/vendors/css/pickers/pickadate/default.css",
    "content": "/* ==========================================================================\n   $BASE-PICKER\n   ========================================================================== */\n/**\n * Note: the root picker element should *NOT* be styled more than what’s here.\n */\n.picker {\n  font-size: 16px;\n  text-align: left;\n  line-height: 1.2;\n  color: #000;\n  position: absolute;\n  z-index: 10000;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n  outline: none;\n}\n/**\n * The picker input element.\n */\n.picker__input {\n  cursor: default;\n}\n/**\n * When the picker is opened, the input element is “activated”.\n */\n.picker__input.picker__input--active {\n  border-color: #0089ec;\n}\n/**\n * The holder is the only “scrollable” top-level container element.\n */\n.picker__holder {\n  width: 100%;\n  overflow-y: auto;\n  -webkit-overflow-scrolling: touch;\n}\n\n/*!\n * Default mobile-first, responsive styling for pickadate.js\n * Demo: http://amsul.github.io/pickadate.js\n */\n/**\n * Note: the root picker element should *NOT* be styled more than what’s here.\n */\n/**\n * Make the holder and frame fullscreen.\n */\n.picker__holder,\n.picker__frame {\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  -ms-transform: translateY(100%);\n      transform: translateY(100%);\n}\n/**\n * The holder should overlay the entire screen.\n */\n.picker__holder {\n  position: fixed;\n  transition: background 0.15s ease-out, transform 0s 0.15s;\n  -webkit-backface-visibility: hidden;\n}\n/**\n * The frame that bounds the box contents of the picker.\n */\n.picker__frame {\n  position: absolute;\n  margin: 0 auto;\n  min-width: 256px;\n  max-width: 666px;\n  width: 100%;\n  -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\n  filter: alpha(opacity=0);\n  -moz-opacity: 0;\n  opacity: 0;\n  transition: all 0.15s ease-out;\n}\n@media (min-height: 33.875em) {\n  .picker__frame {\n    overflow: visible;\n    top: auto;\n    bottom: -100%;\n    max-height: 80%;\n  }\n}\n@media (min-height: 40.125em) {\n  .picker__frame {\n    margin-bottom: 7.5%;\n  }\n}\n/**\n * The wrapper sets the stage to vertically align the box contents.\n */\n.picker__wrap {\n  display: table;\n  width: 100%;\n  height: 100%;\n}\n@media (min-height: 33.875em) {\n  .picker__wrap {\n    display: block;\n  }\n}\n/**\n * The box contains all the picker contents.\n */\n.picker__box {\n  background: #fff;\n  display: table-cell;\n  vertical-align: middle;\n}\n@media (min-height: 26.5em) {\n  .picker__box {\n    font-size: 1.25em;\n  }\n}\n@media (min-height: 33.875em) {\n  .picker__box {\n    display: block;\n    font-size: 1.33em;\n    border: 1px solid #777;\n    border-top-color: #898989;\n    border-bottom-width: 0;\n    border-radius: 5px 5px 0 0;\n    box-shadow: 0 12px 36px 16px rgba(0, 0, 0, 0.24);\n  }\n}\n@media (min-height: 40.125em) {\n  .picker__box {\n    font-size: 1.5em;\n    border-bottom-width: 1px;\n    border-radius: 5px;\n  }\n}\n/**\n * When the picker opens...\n */\n.picker--opened .picker__holder {\n  -ms-transform: translateY(0);\n      transform: translateY(0);\n  background: transparent;\n  -ms-filter: \"progid:DXImageTransform.Microsoft.gradient(startColorstr=#1E000000,endColorstr=#1E000000)\";\n  zoom: 1;\n  background: rgba(0, 0, 0, 0.32);\n  transition: background 0.15s ease-out;\n}\n.picker--opened .picker__frame {\n  -ms-transform: translateY(0);\n      transform: translateY(0);\n  -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)\";\n  filter: alpha(opacity=100);\n  -moz-opacity: 1;\n  opacity: 1;\n}\n@media (min-height: 33.875em) {\n  .picker--opened .picker__frame {\n    top: auto;\n    bottom: 0;\n  }\n}\n"
  },
  {
    "path": "public/backend/vendors/css/pickers/pickadate/default.time.css",
    "content": "/* ==========================================================================\n   $BASE-TIME-PICKER\n   ========================================================================== */\n/**\n * The list of times.\n */\n.picker__list {\n  list-style: none;\n  padding: 0.75em 0 4.2em;\n  margin: 0;\n}\n/**\n * The times on the clock.\n */\n.picker__list-item {\n  border-bottom: 1px solid #ddd;\n  border-top: 1px solid #ddd;\n  margin-bottom: -1px;\n  position: relative;\n  background: #fff;\n  padding: .75em 1.25em;\n}\n@media (min-height: 46.75em) {\n  .picker__list-item {\n    padding: .5em 1em;\n  }\n}\n/* Hovered time */\n.picker__list-item:hover {\n  cursor: pointer;\n  color: #000;\n  background: #b1dcfb;\n  border-color: #0089ec;\n  z-index: 10;\n}\n/* Highlighted and hovered/focused time */\n.picker__list-item--highlighted {\n  border-color: #0089ec;\n  z-index: 10;\n}\n.picker__list-item--highlighted:hover,\n.picker--focused .picker__list-item--highlighted {\n  cursor: pointer;\n  color: #000;\n  background: #b1dcfb;\n}\n/* Selected and hovered/focused time */\n.picker__list-item--selected,\n.picker__list-item--selected:hover,\n.picker--focused .picker__list-item--selected {\n  background: #0089ec;\n  color: #fff;\n  z-index: 10;\n}\n/* Disabled time */\n.picker__list-item--disabled,\n.picker__list-item--disabled:hover,\n.picker--focused .picker__list-item--disabled {\n  background: #f5f5f5;\n  border-color: #f5f5f5;\n  color: #ddd;\n  cursor: default;\n  border-color: #ddd;\n  z-index: auto;\n}\n/**\n * The clear button\n */\n.picker--time .picker__button--clear {\n  display: block;\n  width: 80%;\n  margin: 1em auto 0;\n  padding: 1em 1.25em;\n  background: none;\n  border: 0;\n  font-weight: 500;\n  font-size: .67em;\n  text-align: center;\n  text-transform: uppercase;\n  color: #666;\n}\n.picker--time .picker__button--clear:hover,\n.picker--time .picker__button--clear:focus {\n  color: #000;\n  background: #b1dcfb;\n  background: #e20;\n  border-color: #e20;\n  cursor: pointer;\n  color: #fff;\n  outline: none;\n}\n.picker--time .picker__button--clear:before {\n  top: -0.25em;\n  color: #666;\n  font-size: 1.25em;\n  font-weight: bold;\n}\n.picker--time .picker__button--clear:hover:before,\n.picker--time .picker__button--clear:focus:before {\n  color: #fff;\n  border-color: #fff;\n}\n\n/* ==========================================================================\n   $DEFAULT-TIME-PICKER\n   ========================================================================== */\n/**\n * The frame the bounds the time picker.\n */\n.picker--time .picker__frame {\n  min-width: 256px;\n  max-width: 320px;\n}\n/**\n * The picker box.\n */\n.picker--time .picker__box {\n  font-size: 1em;\n  background: #f2f2f2;\n  padding: 0;\n}\n@media (min-height: 40.125em) {\n  .picker--time .picker__box {\n    margin-bottom: 5em;\n  }\n}\n"
  },
  {
    "path": "public/backend/vendors/css/pickers/pickadate/pickadate.css",
    "content": "/****************************************************/\n/*\t\t\t\tPick-a-date - Picker base\t\t\t*/\n/****************************************************/\n.picker {\n\twidth: 100%;\n\ttext-align: left;\n\tposition: absolute;\n\ttop: 100%;\n\tmargin-top: -1px;\n\tz-index: 990;\n\t-webkit-user-select: none;\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n\tuser-select: none;\n}\n.picker__input {\n\tcursor: default;\n}\n.picker__holder {\n\twidth: 100%;\n\toverflow-y: auto;\n\tposition: absolute;\n\tdisplay: none;\n\tbackground-color: #fff;\n\tborder: 1px solid #ddd;\n\tborder-top-width: 0;\n\tborder-bottom-width: 0;\n\tmax-width: 280px;\n\tmax-height: 0;\n\t-webkit-overflow-scrolling: touch;\n}\n.picker--opened .picker__holder {\n\tmax-height: 480px;\n\tborder-top-width: 1px;\n\tborder-bottom-width: 1px;\n\tdisplay: block;\n}\n/****************************************************/\n/*\t\t\t\tPick-a-date - Date picker\t\t\t*/\n/****************************************************/\n.picker__box {\n\tpadding: 5px;\n}\n.picker__header {\n\ttext-align: center;\n\tposition: relative;\n\tfont-size: 15px;\n\tpadding-top: 15px;\n\tpadding-bottom: 15px;\n}\n.picker__month,\n.picker__year {\n\tfont-weight: 500;\n\tdisplay: inline-block;\n\tmargin-left: 5px;\n\tmargin-right: 5px;\n}\n.picker__year {\n\tcolor: #999999;\n\tfont-size: 12px;\n\tfont-weight: normal;\n}\n.picker__select--month,\n.picker__select--year {\n\tborder-color: #ddd;\n\theight: 32px;\n\tfont-size: 13px;\n\tline-height: 1.6666667;\n\tmargin-left: 5px;\n\tmargin-right: 5px;\n\toutline: 0;\n}\n.picker__select--month {\n\twidth: 35%;\n}\n.picker__select--year {\n\twidth: 22.5%;\n}\n.picker__nav--prev,\n.picker__nav--next {\n\tposition: absolute;\n\tpadding: 8px;\n\ttop: 50%;\n\tmargin-top: -16px;\n\tborder-radius: 2px;\n\tline-height: 1;\n}\n.picker__nav--prev:before,\n.picker__nav--next:before {\n\tfont-family: 'FontAwesome';\n\tdisplay: block;\n\tfont-size: 14px;\n\twidth: 14px;\n\ttext-align: center;\n\t-webkit-font-smoothing: antialiased;\n\t-moz-osx-font-smoothing: grayscale;\n}\n.picker__nav--prev:hover,\n.picker__nav--next:hover {\n\tcursor: pointer;\n\tbackground-color: #f5f5f5;\n}\n.picker__nav--prev {\n\tleft: 0;\n}\n.picker__nav--prev:before {\n\tcontent: '\\f060';\n}\n.picker__nav--next {\n\tright: 0;\n}\n.picker__nav--next:before {\n\tcontent: '\\f061';\n}\n.picker__nav--disabled,\n.picker__nav--disabled:hover,\n.picker__nav--disabled:before,\n.picker__nav--disabled:before:hover {\n\tcursor: default;\n\tbackground: none;\n\tborder-right-color: #f5f5f5;\n\tborder-left-color: #f5f5f5;\n}\n.picker__table {\n\ttext-align: center;\n\tborder-collapse: collapse;\n\tborder-spacing: 0;\n\ttable-layout: fixed;\n\tfont-size: inherit;\n\twidth: 100%;\n\tmargin-bottom: 10px;\n}\n.picker__table td {\n\tmargin: 0;\n\tpadding: 0;\n}\n.picker__weekday {\n\twidth: 14.285714286%;\n\tfont-size: 12px;\n\ttext-align: center;\n\tpadding-bottom: 10px;\n\tcolor: #999999;\n\tfont-weight: 400;\n}\n.picker__day {\n\tpadding: 7px;\n}\n.picker__day--today {\n\tposition: relative;\n\tbackground-color: #f5f5f5;\n}\n.picker__day--today:before {\n\tcontent: \"\";\n\tposition: absolute;\n\ttop: 2px;\n\tright: 2px;\n\twidth: 0;\n\theight: 0;\n\tborder-top: 6px solid #4EC6E8;\n\tborder-left: 6px solid transparent;\n}\n.picker__day--outfocus {\n\tcolor: #ccc;\n}\n.picker__day--infocus:hover,\n.picker__day--outfocus:hover {\n\tcursor: pointer;\n\tcolor: #333333;\n\tbackground-color: #f5f5f5;\n}\n.picker__day--highlighted:before {\n\tborder-top-color: #fff;\n}\n.picker__day--highlighted,\n.picker__day--selected {\n\tborder-radius: 3px;\n}\n.picker__day--highlighted,\n.picker__day--highlighted:hover,\n.picker--focused .picker__day--highlighted {\n\tcursor: pointer;\n\tcolor: #fff;\n\tbackground-color: #4EC6E8;\n}\n.picker__day--selected,\n.picker__day--selected:hover,\n.picker--focused .picker__day--selected {\n\tbackground-color: #4EC6E8;\n\tcolor: #fff;\n}\n.picker__day--disabled,\n.picker__day--disabled:hover {\n\tbackground: #fafafa;\n\tcolor: #999999;\n\tcursor: default;\n}\n.picker__day--disabled:before {\n\tborder-top-color: #999;\n}\n.picker__day--highlighted .picker__day--disabled,\n.picker__day--highlighted .picker__day--disabled:hover {\n\tbackground-color: #bbbbbb;\n}\n.picker__footer {\n\ttext-align: center;\n}\n.picker__footer button {\n\tborder: 0;\n\tbackground: #fff;\n\tpadding: 7px 12px;\n\tborder-radius: 3px;\n\tfont-weight: 500;\n\tcursor: pointer;\n\tdisplay: inline-block;\n}\n.picker__footer button:hover,\n.picker__footer button:focus {\n\toutline: 0;\n\tbackground-color: #f5f5f5;\n}\n.picker__footer button:before {\n\theight: 0;\n}\n.picker__button--today:before {\n\tcontent: '';\n\tmargin-right: 5px;\n\tposition: relative;\n\tdisplay: inline-block;\n\ttop: -1px;\n\twidth: 0;\n\tborder-top: 6px solid #2196F3;\n\tborder-left: 6px solid transparent;\n}\n.picker__button--close:before {\n\tcontent: '\\f00d';\n\tdisplay: inline-block;\n\tposition: relative;\n\tmargin-right: 5px;\n\ttop: 1px;\n\tfont-family: FontAwesome;\n\tfont-size: 14px;\n\tcolor: red;\n}\n.picker__button--clear:before {\n\tcontent: '';\n\tdisplay: inline-block;\n\tposition: relative;\n\ttop: -3px;\n\twidth: 8px;\n\tmargin-right: 5px;\n\tborder-top: 2px solid #F44336;\n}\n/****************************************************/\n/*\t\t\t\tPick-a-date - Time picker\t\t\t*/\n/****************************************************/\n.picker--time {\n\tmin-width: 256px;\n\tmax-width: 320px;\n}\n.picker--time .picker__box {\n\tpadding: 0;\n}\n.picker__list {\n\tlist-style: none;\n\tpadding: 5px 0;\n\tmargin: 0;\n\tbackground-color: #fff;\n\tmax-height: 250px;\n\toverflow-y: auto;\n}\n.picker__list-item {\n\tposition: relative;\n\tpadding: 7px 12px;\n}\n.picker__list-item:hover,\n.picker__list-item:focus {\n\tcursor: pointer;\n\tbackground-color: #f5f5f5;\n\tz-index: 10;\n}\n.picker--time .picker__button--clear {\n\tdisplay: block;\n\twidth: 100%;\n\tmargin: 0;\n\tpadding: 7px 12px;\n\tbackground-color: #fcfcfc;\n\tmargin-top: 1px;\n\toutline: 0;\n\tborder: 0;\n\tborder-top: 1px solid #eeeeee;\n\ttext-align: center;\n\tmargin-bottom: -5px;\n\tmargin-top: 5px;\n}\n.picker--time .picker__button--clear:hover,\n.picker--time .picker__button--clear:focus {\n\tbackground-color: #f5f5f5;\n}\n.picker__list-item--highlighted {\n\tz-index: 10;\n}\n.picker__list-item--highlighted,\n.picker__list-item--highlighted:hover,\n.picker--focused .picker__list-item--highlighted {\n\tcursor: pointer;\n\tcolor: #fff;\n\tbackground-color: #4EC6E8;\n}\n.picker__list-item--selected,\n.picker__list-item--selected:hover,\n.picker--focused .picker__list-item--selected {\n\tbackground-color: #4EC6E8;\n\tcolor: #fff;\n\tz-index: 10;\n}\n.picker__list-item--disabled,\n.picker__list-item--disabled:hover,\n.picker--focused .picker__list-item--disabled {\n\tbackground-color: #fafafa;\n\tcolor: #999999;\n\tcursor: default;\n\tz-index: auto;\n}"
  },
  {
    "path": "public/backend/vendors/css/tables/ag-grid/ag-grid.css",
    "content": "/**\n ****************************\n * Generic Styles\n ****************************\n*/\nag-grid, ag-grid-angular, ag-grid-ng2, ag-grid-polymer, ag-grid-aurelia {\n  display: block; }\n\n.ag-hidden {\n  display: none !important; }\n\n.ag-invisible {\n  visibility: hidden !important; }\n\n.ag-faded {\n  opacity: 0.3; }\n\n.ag-width-half {\n  display: inline-block;\n  width: 50% !important; }\n\n.ag-unselectable {\n  -webkit-user-select: none !important;\n  -moz-user-select: none !important;\n  -ms-user-select: none !important;\n  user-select: none !important; }\n\n.ag-selectable {\n  -webkit-user-select: text !important;\n  -moz-user-select: text !important;\n  -ms-user-select: text !important;\n  user-select: text !important; }\n\n.ag-select-agg-func-popup {\n  position: absolute; }\n\n.ag-input-wrapper {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-flex: 1;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  align-items: center;\n  line-height: normal;\n  position: relative;\n  overflow: hidden; }\n\n.ag-shake-left-to-right {\n  -webkit-animation-direction: alternate;\n  animation-direction: alternate;\n  -webkit-animation-duration: 0.2s;\n  animation-duration: 0.2s;\n  -webkit-animation-iteration-count: infinite;\n  animation-iteration-count: infinite;\n  -webkit-animation-name: ag-shake-left-to-right;\n  animation-name: ag-shake-left-to-right; }\n\n@-webkit-keyframes ag-shake-left-to-right {\n  from {\n    padding-left: 6px;\n    padding-right: 2px; }\n  to {\n    padding-left: 2px;\n    padding-right: 6px; } }\n\n@keyframes ag-shake-left-to-right {\n  from {\n    padding-left: 6px;\n    padding-right: 2px; }\n  to {\n    padding-left: 2px;\n    padding-right: 6px; } }\n\n.ag-root-wrapper {\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  overflow: hidden; }\n  .ag-root-wrapper.ag-layout-normal {\n    height: 100%; }\n  .ag-root-wrapper .ag-watermark {\n    position: absolute;\n    bottom: 10px;\n    right: 25px;\n    opacity: 0.5;\n    -webkit-transition: opacity 1s ease-out 3s;\n    transition: opacity 1s ease-out 3s; }\n    .ag-root-wrapper .ag-watermark:before {\n      content: '';\n      background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iNDk0cHgiIGhlaWdodD0iMjM5cHgiIHZpZXdCb3g9IjAgMCA0OTQgMjM5IiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogICAgPCEtLSBHZW5lcmF0b3I6IFNrZXRjaCA0Ny4xICg0NTQyMikgLSBodHRwOi8vd3d3LmJvaGVtaWFuY29kaW5nLmNvbS9za2V0Y2ggLS0+CiAgICA8dGl0bGU+TG9nbzwvdGl0bGU+CiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4KICAgIDxkZWZzPgogICAgICAgIDxwYXRoIGQ9Ik0wLjYxMjg0OTkzMSwxMDggTDAuNjEyODQ5OTMxLDY3LjQ1OTYzNzQgTDAuNjEyODQ5OTMxLDY3LjQ1OTYzNzQgQzAuNjEyODQ5OTMxLDYyLjEwMDY1MzYgMy40NzE4MzM3OCw1Ny4xNDg3NDgzIDguMTEyODQ5OTMsNTQuNDY5MjU2NCBMOTguMzA2NDI1LDIuMzk1OTcxNTcgTDk4LjMwNjQyNSwyLjM5NTk3MTU3IEMxMDIuOTQ3NDQxLC0wLjI4MzUyMDM1OCAxMDguNjY1NDA5LC0wLjI4MzUyMDM1OCAxMTMuMzA2NDI1LDIuMzk1OTcxNTcgTDExMy4zMDY0MjUsMi4zOTU5NzE1NyBMMjAzLjUsNTQuNDY5MjU2NCBMMjAzLjUsNTQuNDY5MjU2NCBDMjA4LjE0MTAxNiw1Ny4xNDg3NDgzIDIxMSw2Mi4xMDA2NTM2IDIxMSw2Ny40NTk2Mzc0IEwyMTEsMTM4IEwxODEsMTM4IEwxODAuOTk3MDQxLDkzLjk5OTk5OTggTDE4MC45OTYwMzIsOTMuOTk5OTk5OSBDMTgwLjk5NTQ3NSw4NS43MTYxMjI2IDE3NC4yNzk5MDksNzkuMDAxMDA4NyAxNjUuOTk2MDMyLDc5LjAwMTAwODcgTDEyMiw3OC45OTk5OTk5IEMxMTMuNzE1NzI5LDc4Ljk5OTk5OTkgMTA3LDg1LjcxNTcyODYgMTA3LDkzLjk5OTk5OTkgTDEwNywxMzYuMDE1NjIzIEwxMDcsMTM2LjAxNTYyMyBDMTA3LDE0NC4yOTk4OTUgMTEzLjcxNTcyOSwxNTEuMDE1NjIzIDEyMiwxNTEuMDE1NjIzIEwxNjgsMTUxLjAxNTYyMyBMMTY4LDE2MyBDMTY4LDE2NC42NTY4NTQgMTY2LjY1Njg1NCwxNjYgMTY1LDE2NiBMMTIwLDE2NiBMMTIwLDE3OSBMMTY1Ljk5NjAzMiwxNzkgTDE2NS45OTYwMzIsMTc4Ljk5Nzg3NyBDMTc0LjI3OTQ3NCwxNzguOTk3ODc3IDE4MC45OTQ4NiwxNzIuMjgzNDQyIDE4MC45OTYwMzIsMTY0IEwxODEsMTUwLjk2MDU1NCBMMjExLDE1MC45NjA1NTQgTDIxMSwxNzEuNjA2MjA3IEwyMTEsMTcxLjYwNjIwNyBDMjExLDE3Ni45NjUxOTEgMjA4LjE0MTAxNiwxODEuOTE3MDk2IDIwMy41LDE4NC41OTY1ODggTDExMy4zMDY0MjUsMjM2LjY2OTg3MyBMMTEzLjMwNjQyNSwyMzYuNjY5ODczIEMxMDguNjY1NDA5LDIzOS4zNDkzNjUgMTAyLjk0NzQ0MSwyMzkuMzQ5MzY1IDk4LjMwNjQyNSwyMzYuNjY5ODczIEw4LjExMjg0OTkzLDE4NC41OTY1ODggTDguMTEyODQ5OTMsMTg0LjU5NjU4OCBDMy40NzE4MzM3OCwxODEuOTE3MDk2IDAuNjEyODQ5OTMxLDE3Ni45NjUxOTEgMC42MTI4NDk5MzEsMTcxLjYwNjIwNyBMMC42MTI4NDk5MzEsMTIxIEwyNywxMjEgTDI3LDEzNiBDMjcsMTQ0LjI4NDI3MSAzMy43MTU3Mjg3LDE1MSA0MiwxNTEgTDQyLDE1MSBMMTAwLDE1MSBMMTAwLDk0IEMxMDAsODUuNzE1NzI4OCA5My4yODQyNzEyLDc5IDg1LDc5IEwyNyw3OSBMMjcsOTIgTDg0LDkyIEM4NS42NTY4NTQyLDkyIDg3LDkzLjM0MzE0NTggODcsOTUgTDg3LDk1IEw4NywxMDggTDAuNjEyODQ5OTMxLDEwOCBaIiBpZD0icGF0aC0xIj48L3BhdGg+CiAgICA8L2RlZnM+CiAgICA8ZyBpZD0iU3ltYm9scyIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgICAgICAgPGcgaWQ9IkxvZ28iPgogICAgICAgICAgICA8cGF0aCBkPSJNNDc3LDU1IEw0OTQsNTUgTDQ5NCwxNTEgTDQzNSwxNTEgQzQyNi43MTU3MjksMTUxIDQyMCwxNDQuMjg0MjcxIDQyMCwxMzYgTDQyMCw5NiBDNDIwLDg3LjcxNTcyODggNDI2LjcxNTcyOSw4MSA0MzUsODEgTDQzNSw4MSBMNDc3LDgxIEw0NzcsNTUgWiBNNDQwLDk4IEM0MzguMzQzMTQ2LDk4IDQzNyw5OS4zNDMxNDU4IDQzNywxMDEgTDQzNywxMzEgQzQzNywxMzIuNjU2ODU0IDQzOC4zNDMxNDYsMTM0IDQ0MCwxMzQgTDQ3NywxMzQgTDQ3Nyw5OCBMNDQwLDk4IFoiIGlkPSJkIiBmaWxsPSIjRkZGRkZGIj48L3BhdGg+CiAgICAgICAgICAgIDxnIGlkPSJpIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzOTYuMDAwMDAwLCA1NS4wMDAwMDApIj4KICAgICAgICAgICAgICAgIDxwb2x5Z29uIGlkPSJQYXRoLTYiIGZpbGw9IiNGRkZGRkYiIHBvaW50cz0iMCAyNiAxNyAyNiAxNyA5NiAwIDk2Ij48L3BvbHlnb24+CiAgICAgICAgICAgICAgICA8cG9seWdvbiBpZD0iUGF0aC03IiBmaWxsPSIjRTExRjIyIiBwb2ludHM9IjAgMS4xMzY4NjgzOGUtMTMgMTcgMS4xMzY4NjgzOGUtMTMgMTcgMTcgMCAxNyI+PC9wb2x5Z29uPgogICAgICAgICAgICA8L2c+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMzEsMTUxIEwzNDgsMTUxIEwzNDgsMTAxIEwzNDgsMTAxIEMzNDgsOTkuMzQzMTQ1OCAzNDkuMzQzMTQ2LDk4IDM1MSw5OCBMMzg5LDk4IEwzODksODEgTDM0Niw4MSBMMzQ2LDgxIEMzMzcuNzE1NzI5LDgxIDMzMSw4Ny43MTU3Mjg4IDMzMSw5NiBMMzMxLDE1MSBaIiBpZD0iciIgZmlsbD0iI0ZGRkZGRiI+PC9wYXRoPgogICAgICAgICAgICA8cGF0aCBkPSJNMzI0LDg2IEwzMjQsNzYgTDMyNCw3NiBDMzI0LDY3LjcxNTcyODggMzE3LjI4NDI3MSw2MSAzMDksNjEgTDI0OSw2MSBMMjQ5LDYxIEMyNDAuNzE1NzI5LDYxIDIzNCw2Ny43MTU3Mjg4IDIzNCw3NiBMMjM0LDEzNiBMMjM0LDEzNiBDMjM0LDE0NC4yODQyNzEgMjQwLjcxNTcyOSwxNTEgMjQ5LDE1MSBMMzA5LDE1MSBMMzA5LDE1MSBDMzE3LjI4NDI3MSwxNTEgMzI0LDE0NC4yODQyNzEgMzI0LDEzNiBMMzI0LDEwMCBMMjg3LDEwMCBMMjg3LDExNyBMMzA3LDExNyBMMzA3LDEzMSBMMzA3LDEzMSBDMzA3LDEzMi42NTY4NTQgMzA1LjY1Njg1NCwxMzQgMzA0LDEzNCBMMjU0LDEzNCBMMjU0LDEzNCBDMjUyLjM0MzE0NiwxMzQgMjUxLDEzMi42NTY4NTQgMjUxLDEzMSBMMjUxLDgxIEwyNTEsODEgQzI1MSw3OS4zNDMxNDU4IDI1Mi4zNDMxNDYsNzggMjU0LDc4IEwzMDQsNzggTDMwNCw3OCBDMzA1LjY1Njg1NCw3OCAzMDcsNzkuMzQzMTQ1OCAzMDcsODEgTDMwNyw4NiBMMzI0LDg2IFoiIGlkPSJHIiBmaWxsPSIjRkZGRkZGIj48L3BhdGg+CiAgICAgICAgICAgIDxnIGlkPSJhZyI+CiAgICAgICAgICAgICAgICA8ZyBpZD0iQ29tYmluZWQtU2hhcGUiPgogICAgICAgICAgICAgICAgICAgIDxtYXNrIGlkPSJtYXNrLTIiIGZpbGw9IndoaXRlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHVzZSB4bGluazpocmVmPSIjcGF0aC0xIj48L3VzZT4KICAgICAgICAgICAgICAgICAgICA8L21hc2s+CiAgICAgICAgICAgICAgICAgICAgPHVzZSBmaWxsPSIjRTExRjIyIiB4bGluazpocmVmPSIjcGF0aC0xIj48L3VzZT4KICAgICAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAgICAgIDxyZWN0IGlkPSJnIiBmaWxsPSIjRTExRjIyIiB4PSIxMjAiIHk9IjkyIiB3aWR0aD0iNDgiIGhlaWdodD0iNDYiIHJ4PSIzIj48L3JlY3Q+CiAgICAgICAgICAgICAgICA8cGF0aCBkPSJNNDAsMTIxIEw4NywxMjEgTDg3LDEzOCBMNDMsMTM4IEw0MywxMzggQzQxLjM0MzE0NTgsMTM4IDQwLDEzNi42NTY4NTQgNDAsMTM1IEw0MCwxMjEgWiIgaWQ9IkNvbWJpbmVkLVNoYXBlIiBmaWxsPSIjRTExRjIyIj48L3BhdGg+CiAgICAgICAgICAgIDwvZz4KICAgICAgICA8L2c+CiAgICA8L2c+Cjwvc3ZnPg==);\n      -webkit-filter: invert(50%);\n      filter: invert(50%);\n      background-repeat: no-repeat;\n      background-size: 110px 60px;\n      display: block;\n      height: 60px;\n      width: 110px; }\n    .ag-root-wrapper .ag-watermark .ag-watermark-text {\n      opacity: 0.5;\n      font-weight: bold;\n      font-family: Impact;\n      font-size: 19px; }\n\n.ag-root-wrapper-body {\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  .ag-root-wrapper-body.ag-layout-normal {\n    -webkit-box-flex: 1;\n    -ms-flex: 1 1 auto;\n    flex: 1 1 auto;\n    height: 0;\n    min-height: 0; }\n\n.ag-root {\n  cursor: default;\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  .ag-root.ag-layout-normal, .ag-root.ag-layout-auto-height {\n    overflow: hidden;\n    -webkit-box-flex: 1;\n    -ms-flex: 1 1 auto;\n    flex: 1 1 auto;\n    width: 0; }\n  .ag-root.ag-layout-normal {\n    height: 100%; }\n\n/**\n ****************************\n * Viewports\n ****************************\n*/\n.ag-header-viewport,\n.ag-floating-top-viewport,\n.ag-body-viewport,\n.ag-pinned-left-cols-viewport,\n.ag-center-cols-viewport,\n.ag-pinned-right-cols-viewport,\n.ag-floating-bottom-viewport,\n.ag-body-horizontal-scroll-viewport,\n.ag-virtual-list-viewport {\n  position: relative;\n  height: 100%;\n  min-width: 0px;\n  overflow: hidden;\n  -webkit-box-flex: 1;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto; }\n\n.ag-body-viewport {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex; }\n  .ag-body-viewport.ag-layout-normal {\n    overflow-y: auto;\n    -webkit-overflow-scrolling: touch; }\n  .ag-body-viewport:not(.ag-layout-print).ag-force-vertical-scroll {\n    overflow-y: scroll; }\n\n.ag-pinned-left-cols-viewport, .ag-pinned-right-cols-viewport {\n  -webkit-box-flex: 1000;\n  -ms-flex-positive: 1000;\n  flex-grow: 1000; }\n\n.ag-center-cols-viewport {\n  width: 100%;\n  overflow-x: auto; }\n\n.ag-body-horizontal-scroll-viewport {\n  overflow-x: scroll; }\n\n.ag-virtual-list-viewport {\n  overflow: auto;\n  width: 100%; }\n\n/**\n ****************************\n * Containers\n ****************************\n*/\n.ag-header-container,\n.ag-floating-top-container,\n.ag-body-container,\n.ag-pinned-right-cols-container,\n.ag-center-cols-container,\n.ag-pinned-left-cols-container,\n.ag-floating-bottom-container,\n.ag-body-horizontal-scroll-container,\n.ag-full-width-container,\n.ag-floating-bottom-full-width-container,\n.ag-virtual-list-container {\n  position: relative; }\n\n.ag-header-container, .ag-floating-top-container, .ag-floating-bottom-container {\n  height: 100%;\n  white-space: nowrap; }\n\n.ag-body-viewport .ag-center-cols-clipper {\n  min-height: 100%; }\n\n.ag-body-viewport.ag-layout-auto-height .ag-center-cols-clipper, .ag-body-viewport.ag-layout-auto-height .ag-center-cols-container {\n  min-height: 50px; }\n\n.ag-body-viewport .ag-center-cols-container {\n  display: block; }\n\n.ag-body-viewport.ag-layout-print {\n  -webkit-box-flex: 0;\n  -ms-flex: none;\n  flex: none; }\n  .ag-body-viewport.ag-layout-print .ag-center-cols-clipper {\n    min-width: 100%; }\n\n.ag-pinned-right-cols-container {\n  display: block; }\n\n.ag-body-horizontal-scroll-container {\n  height: 100%; }\n\n.ag-full-width-container,\n.ag-floating-top-full-width-container,\n.ag-floating-bottom-full-width-container {\n  position: absolute;\n  top: 0px;\n  left: 0px;\n  pointer-events: none; }\n\n.ag-full-width-container {\n  width: 100%; }\n\n.ag-floating-bottom-full-width-container, .ag-floating-top-full-width-container {\n  display: inline-block;\n  overflow: hidden;\n  height: 100%;\n  width: 100%; }\n\n.ag-virtual-list-container {\n  overflow: hidden; }\n\n/**\n ****************************\n * Scrollers\n ****************************\n*/\n.ag-center-cols-clipper {\n  -webkit-box-flex: 1;\n  -ms-flex: 1;\n  flex: 1;\n  min-width: 0;\n  overflow: hidden; }\n\n.ag-body-horizontal-scroll {\n  min-height: 0;\n  min-width: 0;\n  width: 100%;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  position: relative; }\n\n.ag-layout-print .ag-body-horizontal-scroll {\n  display: none; }\n\n.ag-horizontal-left-spacer, .ag-horizontal-right-spacer {\n  height: 100%;\n  min-width: 0;\n  -webkit-box-flex: 1000;\n  -ms-flex-positive: 1000;\n  flex-grow: 1000;\n  overflow-x: scroll; }\n  .ag-horizontal-left-spacer.ag-scroller-corner, .ag-horizontal-right-spacer.ag-scroller-corner {\n    overflow-x: hidden; }\n\n/**\n ****************************\n * Headers\n ****************************\n*/\n.ag-header, .ag-pinned-left-header, .ag-pinned-right-header {\n  display: inline-block;\n  overflow: hidden; }\n  .ag-header .ag-header-cell-sortable, .ag-pinned-left-header .ag-header-cell-sortable, .ag-pinned-right-header .ag-header-cell-sortable {\n    cursor: pointer; }\n\n.ag-header {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  width: 100%;\n  white-space: nowrap; }\n\n.ag-header-icon {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex; }\n\n.ag-pinned-left-header {\n  height: 100%; }\n\n.ag-pinned-right-header {\n  height: 100%; }\n\n.ag-header-row {\n  position: absolute;\n  overflow: hidden; }\n\n.ag-header-overlay {\n  display: block;\n  position: absolute; }\n\n.ag-header-cell {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  align-items: center;\n  position: absolute;\n  height: 100%;\n  overflow: hidden; }\n\n.ag-header-group-cell-label, .ag-header-cell-label {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-flex: 1;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  overflow: hidden;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  align-items: center;\n  text-overflow: ellipsis;\n  -ms-flex-item-align: stretch;\n  align-self: stretch; }\n\n.ag-header-cell-label .ag-header-cell-text {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap; }\n\n.ag-numeric-header .ag-header-cell-label {\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: reverse;\n  -ms-flex-direction: row-reverse;\n  flex-direction: row-reverse; }\n\n.ag-header-group-text {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap; }\n\n.ag-header-cell-resize {\n  position: absolute;\n  z-index: 1;\n  height: 100%;\n  width: 4px; }\n\n.ag-header-expand-icon {\n  padding-left: 4px; }\n\n.ag-header-select-all {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex; }\n\n/**\n ****************************\n * Columns\n ****************************\n*/\n.ag-column-moving .ag-cell {\n  -webkit-transition: left 0.2s;\n  transition: left 0.2s; }\n\n.ag-column-moving .ag-header-cell {\n  -webkit-transition: left 0.2s;\n  transition: left 0.2s; }\n\n.ag-column-moving .ag-header-group-cell {\n  -webkit-transition: left 0.2s, width 0.2s;\n  transition: left 0.2s, width 0.2s; }\n\n/**\n ****************************\n * Column Panel\n ****************************\n*/\n.ag-column-panel {\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  overflow: hidden;\n  -webkit-box-flex: 1;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto; }\n\n.ag-column-select-panel {\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  overflow: hidden;\n  -webkit-box-flex: 4;\n  -ms-flex-positive: 4;\n  flex-grow: 4;\n  -ms-flex-negative: 1;\n  flex-shrink: 1;\n  -ms-flex-preferred-size: 0;\n  flex-basis: 0; }\n  .ag-column-select-panel .ag-primary-cols-header-panel {\n    display: -webkit-box;\n    display: -ms-flexbox;\n    display: flex;\n    -webkit-box-flex: 0;\n    -ms-flex: none;\n    flex: none; }\n    .ag-column-select-panel .ag-primary-cols-header-panel .ag-column-name-filter {\n      -webkit-box-flex: 1;\n      -ms-flex: 1 1 auto;\n      flex: 1 1 auto; }\n    .ag-column-select-panel .ag-primary-cols-header-panel .ag-primary-cols-filter-wrapper {\n      -webkit-box-flex: 1;\n      -ms-flex: 1 1 auto;\n      flex: 1 1 auto; }\n      .ag-column-select-panel .ag-primary-cols-header-panel .ag-primary-cols-filter-wrapper input {\n        width: 100%; }\n  .ag-column-select-panel .ag-primary-cols-list-panel {\n    -webkit-box-flex: 1;\n    -ms-flex: 1 1 auto;\n    flex: 1 1 auto;\n    overflow: auto; }\n\n.ag-column-drop {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  align-items: center;\n  overflow: auto;\n  width: 100%; }\n  .ag-column-drop .ag-column-drop-list {\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    .ag-column-drop .ag-column-drop-list .ag-column-drop-cell {\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      .ag-column-drop .ag-column-drop-list .ag-column-drop-cell .ag-column-drop-cell-text {\n        overflow: hidden;\n        -webkit-box-flex: 1;\n        -ms-flex: 1 1 auto;\n        flex: 1 1 auto;\n        text-overflow: ellipsis;\n        white-space: nowrap; }\n\n.ag-column-drop.ag-column-drop-vertical {\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  overflow: hidden;\n  -webkit-box-flex: 1;\n  -ms-flex: 1 1 0px;\n  flex: 1 1 0;\n  -webkit-box-align: stretch;\n  -ms-flex-align: stretch;\n  align-items: stretch; }\n  .ag-column-drop.ag-column-drop-vertical > div {\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  .ag-column-drop.ag-column-drop-vertical .ag-column-drop-list {\n    -webkit-box-align: stretch;\n    -ms-flex-align: stretch;\n    align-items: stretch;\n    -webkit-box-flex: 1;\n    -ms-flex-positive: 1;\n    flex-grow: 1;\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -ms-flex-direction: column;\n    flex-direction: column;\n    overflow-x: auto; }\n  .ag-column-drop.ag-column-drop-vertical .ag-column-drop-empty-message {\n    display: block; }\n\n.ag-column-drop.ag-column-drop-horizontal {\n  white-space: nowrap;\n  overflow: hidden; }\n\n/**\n ****************************\n * Rows\n ****************************\n*/\n.ag-row-animation .ag-row {\n  -webkit-transition: top 0.4s, height 0.4s, background-color 0.1s, opacity 0.2s, -webkit-transform 0.4s;\n  transition: top 0.4s, height 0.4s, background-color 0.1s, opacity 0.2s, -webkit-transform 0.4s;\n  transition: transform 0.4s, top 0.4s, height 0.4s, background-color 0.1s, opacity 0.2s;\n  transition: transform 0.4s, top 0.4s, height 0.4s, background-color 0.1s, opacity 0.2s, -webkit-transform 0.4s; }\n\n.ag-row-no-animation .ag-row {\n  -webkit-transition: background-color 0.1s;\n  transition: background-color 0.1s; }\n\n.ag-row {\n  white-space: nowrap;\n  width: 100%; }\n\n.ag-row-position-absolute {\n  position: absolute; }\n\n.ag-row-position-relative {\n  position: relative; }\n\n.ag-full-width-row {\n  overflow: hidden;\n  pointer-events: all; }\n\n.ag-row-inline-editing {\n  z-index: 1; }\n\n.ag-row-dragging {\n  z-index: 2; }\n\n.ag-stub-cell {\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 ****************************\n * Cells\n ****************************\n*/\n.ag-cell {\n  display: inline-block;\n  overflow: hidden;\n  position: absolute;\n  text-overflow: ellipsis;\n  white-space: nowrap; }\n\n.ag-cell-wrapper {\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  width: 100%;\n  height: 100%; }\n  .ag-cell-wrapper.ag-row-group {\n    -webkit-box-align: start;\n    -ms-flex-align: start;\n    align-items: flex-start; }\n  .ag-cell-wrapper .ag-cell-value, .ag-cell-wrapper .ag-group-value {\n    overflow: hidden;\n    text-overflow: ellipsis; }\n\n.ag-full-width-row.ag-row-group .ag-cell-wrapper {\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  align-items: center; }\n\n.ag-cell-with-height {\n  height: 100%; }\n\n.ag-group-cell-entire-row {\n  display: inline-block;\n  height: 100%;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  width: 100%; }\n\n.ag-footer-cell-entire-row {\n  display: inline-block;\n  height: 100%;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  width: 100%; }\n\n.ag-cell-inline-editing {\n  z-index: 1; }\n  .ag-cell-inline-editing .ag-cell-edit-input, .ag-cell-inline-editing .ag-input-wrapper {\n    height: 100%;\n    width: 100%;\n    line-height: normal; }\n\n/**\n ****************************\n * Filters\n ****************************\n*/\n.ag-set-filter-item {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\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  .ag-set-filter-item > div, .ag-set-filter-item > span {\n    display: -webkit-box;\n    display: -ms-flexbox;\n    display: flex; }\n\n.ag-filter .ag-filter-checkbox {\n  pointer-events: none; }\n\n.ag-filter .ag-filter-body-wrapper {\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\n.ag-filter .ag-filter-filter {\n  -webkit-box-flex: 1;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto; }\n\n/**\n ****************************\n * Floating Filter\n ****************************\n*/\n.ag-floating-filter-full-body .ag-react-container, .ag-floating-filter-body .ag-react-container {\n  height: 100%; }\n\n.ag-floating-filter-body {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-flex: 1;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  height: 100%; }\n  .ag-floating-filter-body input {\n    margin: 0;\n    -webkit-box-flex: 1;\n    -ms-flex: 1 1 auto;\n    flex: 1 1 auto;\n    max-height: calc(100% - 1px); }\n\n.ag-floating-filter-full-body {\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  height: 100%;\n  width: 100%; }\n  .ag-floating-filter-full-body > div {\n    -webkit-box-flex: 1;\n    -ms-flex: 1 1 auto;\n    flex: 1 1 auto; }\n  .ag-floating-filter-full-body input {\n    margin: 0;\n    width: 100%; }\n  .ag-floating-filter-full-body input[type=\"range\"] {\n    height: 100%; }\n\n.ag-floating-filter {\n  display: inline-block;\n  position: absolute; }\n\n.ag-floating-filter-input {\n  width: 100%; }\n\n.ag-floating-filter-input:-moz-read-only {\n  background-color: #eee; }\n\n.ag-floating-filter-input:read-only {\n  background-color: #eee; }\n\n.ag-floating-filter-menu {\n  position: absolute;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none; }\n\n.ag-floating-filter-button {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-flex: 0;\n  -ms-flex: none;\n  flex: none; }\n\n/**\n ****************************\n * Drag & Drop\n ****************************\n*/\n.ag-dnd-ghost {\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  background: #e5e5e5;\n  border: 1px solid black;\n  cursor: move;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 14px;\n  overflow: hidden;\n  padding: 3px;\n  position: absolute;\n  text-overflow: ellipsis;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  z-index: 10; }\n\n.ag-dnd-ghost-icon {\n  padding: 2px; }\n\n/**\n ****************************\n * Overlay\n ****************************\n*/\n.ag-overlay {\n  height: 100%;\n  left: 0;\n  pointer-events: none;\n  position: absolute;\n  top: 0;\n  width: 100%; }\n\n.ag-overlay-panel {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  height: 100%;\n  pointer-events: none;\n  width: 100%; }\n\n.ag-overlay-wrapper {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-flex: 0;\n  -ms-flex: none;\n  flex: none;\n  width: 100%;\n  height: 100%;\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  text-align: center; }\n  .ag-overlay-wrapper.ag-overlay-loading-wrapper {\n    pointer-events: all; }\n\n.ag-overlay-no-rows-wrapper.ag-layout-auto-height {\n  padding-top: 30px; }\n\n/**\n ****************************\n * Popup\n ****************************\n*/\n.ag-popup > div {\n  z-index: 5; }\n\n.ag-popup-backdrop {\n  height: 100%;\n  left: 0;\n  position: fixed;\n  top: 0;\n  width: 100%; }\n\n.ag-popup-editor {\n  position: absolute;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  z-index: 1; }\n\n/**\n ****************************\n * Virtual Lists\n ****************************\n*/\n.ag-virtual-list-item {\n  position: absolute;\n  width: 100%; }\n  .ag-virtual-list-item span:empty:not(.ag-icon) {\n    border-left: 1px solid transparent; }\n\n/**\n ****************************\n * Floating Top and Bottom\n ****************************\n*/\n.ag-floating-top {\n  overflow: hidden;\n  white-space: nowrap;\n  width: 100%;\n  position: relative;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex; }\n\n.ag-pinned-left-floating-top {\n  display: inline-block;\n  overflow: hidden;\n  position: relative;\n  min-width: 0px;\n  -webkit-box-flex: 1000;\n  -ms-flex-positive: 1000;\n  flex-grow: 1000; }\n\n.ag-pinned-right-floating-top {\n  display: inline-block;\n  overflow: hidden;\n  position: relative;\n  min-width: 0px;\n  -webkit-box-flex: 1000;\n  -ms-flex-positive: 1000;\n  flex-grow: 1000; }\n\n.ag-floating-bottom {\n  overflow: hidden;\n  white-space: nowrap;\n  width: 100%;\n  position: relative;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex; }\n\n.ag-pinned-left-floating-bottom {\n  display: inline-block;\n  overflow: hidden;\n  position: relative;\n  min-width: 0px;\n  -webkit-box-flex: 1000;\n  -ms-flex-positive: 1000;\n  flex-grow: 1000; }\n\n.ag-pinned-right-floating-bottom {\n  display: inline-block;\n  overflow: hidden;\n  position: relative;\n  min-width: 0px;\n  -webkit-box-flex: 1000;\n  -ms-flex-positive: 1000;\n  flex-grow: 1000; }\n\n/**\n ****************************\n * Dialog\n ****************************\n*/\n.ag-dialog, .ag-panel {\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  position: relative;\n  overflow: hidden; }\n  .ag-dialog .ag-title-bar, .ag-panel .ag-title-bar {\n    display: -webkit-box;\n    display: -ms-flexbox;\n    display: flex;\n    -webkit-box-flex: 0;\n    -ms-flex: none;\n    flex: none;\n    -webkit-box-align: center;\n    -ms-flex-align: center;\n    align-items: center;\n    cursor: default; }\n    .ag-dialog .ag-title-bar .ag-title-bar-title, .ag-panel .ag-title-bar .ag-title-bar-title {\n      -webkit-box-flex: 1;\n      -ms-flex: 1 1 auto;\n      flex: 1 1 auto; }\n    .ag-dialog .ag-title-bar .ag-title-bar-buttons, .ag-panel .ag-title-bar .ag-title-bar-buttons {\n      display: -webkit-box;\n      display: -ms-flexbox;\n      display: flex; }\n      .ag-dialog .ag-title-bar .ag-title-bar-buttons .ag-button, .ag-panel .ag-title-bar .ag-title-bar-buttons .ag-button {\n        cursor: pointer; }\n  .ag-dialog .ag-panel-content-wrapper, .ag-panel .ag-panel-content-wrapper {\n    display: -webkit-box;\n    display: -ms-flexbox;\n    display: flex;\n    -webkit-box-flex: 1;\n    -ms-flex: 1 1 auto;\n    flex: 1 1 auto;\n    position: relative;\n    overflow: hidden; }\n    .ag-dialog .ag-panel-content-wrapper > div, .ag-panel .ag-panel-content-wrapper > div {\n      width: 100%;\n      height: 100%; }\n\n.ag-dialog {\n  position: absolute; }\n  .ag-dialog .ag-resizer {\n    position: absolute;\n    pointer-events: none;\n    z-index: 1; }\n    .ag-dialog .ag-resizer.ag-resizer-topLeft {\n      top: 0;\n      left: 0;\n      height: 5px;\n      width: 5px;\n      cursor: nwse-resize; }\n    .ag-dialog .ag-resizer.ag-resizer-top {\n      top: 0;\n      left: 5px;\n      right: 5px;\n      height: 5px;\n      cursor: ns-resize; }\n    .ag-dialog .ag-resizer.ag-resizer-topRight {\n      top: 0;\n      right: 0;\n      height: 5px;\n      width: 5px;\n      cursor: nesw-resize; }\n    .ag-dialog .ag-resizer.ag-resizer-right {\n      top: 5px;\n      right: 0;\n      bottom: 5px;\n      width: 5px;\n      cursor: ew-resize; }\n    .ag-dialog .ag-resizer.ag-resizer-bottomRight {\n      bottom: 0;\n      right: 0;\n      height: 5px;\n      width: 5px;\n      cursor: nwse-resize; }\n    .ag-dialog .ag-resizer.ag-resizer-bottom {\n      bottom: 0;\n      left: 5px;\n      right: 5px;\n      height: 5px;\n      cursor: ns-resize; }\n    .ag-dialog .ag-resizer.ag-resizer-bottomLeft {\n      bottom: 0;\n      left: 0;\n      height: 5px;\n      width: 5px;\n      cursor: nesw-resize; }\n    .ag-dialog .ag-resizer.ag-resizer-left {\n      left: 0;\n      top: 5px;\n      bottom: 5px;\n      width: 5px;\n      cursor: ew-resize; }\n  .ag-dialog .ag-message-box {\n    width: 100%;\n    height: 100%;\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    .ag-dialog .ag-message-box .ag-message-box-content {\n      display: -webkit-box;\n      display: -ms-flexbox;\n      display: flex;\n      -webkit-box-flex: 1;\n      -ms-flex: 1 1 auto;\n      flex: 1 1 auto;\n      -webkit-box-pack: center;\n      -ms-flex-pack: center;\n      justify-content: center;\n      -webkit-box-align: center;\n      -ms-flex-align: center;\n      align-items: center; }\n    .ag-dialog .ag-message-box .ag-message-box-button-bar {\n      display: -webkit-box;\n      display: -ms-flexbox;\n      display: flex;\n      -webkit-box-pack: center;\n      -ms-flex-pack: center;\n      justify-content: center; }\n\n/**\n ****************************\n * Tooltip\n ****************************\n*/\n.ag-tooltip {\n  position: absolute;\n  pointer-events: none;\n  z-index: 99999; }\n\n.ag-chart-tooltip {\n  display: table;\n  position: absolute;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  pointer-events: none;\n  white-space: nowrap;\n  z-index: 99999;\n  font: 12px Verdana, sans-serif;\n  color: black;\n  background: #f4f4f4;\n  border-radius: 5px;\n  -webkit-box-shadow: 0 0 1px rgba(3, 3, 3, 0.7), 0.5vh 0.5vh 1vh rgba(3, 3, 3, 0.25);\n  box-shadow: 0 0 1px rgba(3, 3, 3, 0.7), 0.5vh 0.5vh 1vh rgba(3, 3, 3, 0.25);\n  opacity: 0;\n  -webkit-transform: scale(0.9);\n  transform: scale(0.9);\n  -webkit-transition: 0.3s cubic-bezier(0.19, 1, 0.22, 1);\n  transition: 0.3s cubic-bezier(0.19, 1, 0.22, 1);\n  -webkit-transition-property: opacity, -webkit-transform;\n  transition-property: opacity, -webkit-transform;\n  transition-property: opacity, transform;\n  transition-property: opacity, transform, -webkit-transform; }\n  .ag-chart-tooltip.visible {\n    opacity: 1;\n    -webkit-transform: scale(1);\n    transform: scale(1); }\n  .ag-chart-tooltip .title {\n    font-weight: bold;\n    padding: 7px;\n    border-top-left-radius: 5px;\n    border-top-right-radius: 5px;\n    color: white;\n    background-color: #888888; }\n  .ag-chart-tooltip .content {\n    padding: 7px;\n    line-height: 1.7em; }\n\n/**\n ****************************\n * Animations\n ****************************\n*/\n.ag-value-slide-out {\n  margin-right: 5px;\n  opacity: 1;\n  -webkit-transition: opacity 3s, margin-right 3s;\n  transition: opacity 3s, margin-right 3s;\n  -webkit-transition-timing-function: linear;\n  transition-timing-function: linear; }\n\n.ag-value-slide-out-end {\n  margin-right: 10px;\n  opacity: 0; }\n\n.ag-opacity-zero {\n  opacity: 0 !important; }\n\n/**\n ****************************\n * Menu\n ****************************\n*/\n.ag-menu {\n  max-height: 100%;\n  overflow-y: auto;\n  position: absolute;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none; }\n\n.ag-menu-column-select-wrapper {\n  height: 265px;\n  overflow: auto;\n  width: 200px; }\n\n.ag-menu-list {\n  display: table; }\n\n.ag-menu-option, .ag-menu-separator {\n  display: table-row; }\n  .ag-menu-option > span, .ag-menu-separator > span {\n    display: table-cell;\n    vertical-align: middle; }\n\n.ag-menu-option-text {\n  white-space: nowrap; }\n\n.ag-menu-column-select-wrapper .ag-column-select-panel {\n  height: 100%; }\n\n/**\n ****************************\n * Rich Select\n ****************************\n*/\n.ag-rich-select {\n  cursor: default;\n  outline: none; }\n  .ag-rich-select .ag-rich-select-value {\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    .ag-rich-select .ag-rich-select-value > span {\n      -webkit-box-flex: 1;\n      -ms-flex: 1 1 auto;\n      flex: 1 1 auto; }\n      .ag-rich-select .ag-rich-select-value > span.ag-icon {\n        -webkit-box-ordinal-group: 2;\n        -ms-flex-order: 1;\n        order: 1;\n        -webkit-box-flex: 0;\n        -ms-flex: none;\n        flex: none; }\n  .ag-rich-select .ag-rich-select-list .ag-virtual-list-item {\n    display: -webkit-box;\n    display: -ms-flexbox;\n    display: flex; }\n    .ag-rich-select .ag-rich-select-list .ag-virtual-list-item .ag-rich-select-row {\n      display: -webkit-box;\n      display: -ms-flexbox;\n      display: flex;\n      -webkit-box-flex: 1;\n      -ms-flex: 1 1 auto;\n      flex: 1 1 auto;\n      -webkit-box-align: center;\n      -ms-flex-align: center;\n      align-items: center;\n      white-space: nowrap; }\n\n/**\n ****************************\n * Pagination\n ****************************\n*/\n.ag-paging-panel {\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  align-items: center;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-pack: end;\n  -ms-flex-pack: end;\n  justify-content: flex-end; }\n  .ag-paging-panel .ag-paging-row-summary-panel {\n    display: -webkit-box;\n    display: -ms-flexbox;\n    display: flex; }\n    .ag-paging-panel .ag-paging-row-summary-panel span {\n      margin: 0 3px; }\n\n.ag-paging-page-summary-panel {\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  .ag-paging-page-summary-panel .ag-disabled {\n    pointer-events: none; }\n  .ag-paging-page-summary-panel .ag-paging-button {\n    position: relative;\n    overflow: hidden; }\n    .ag-paging-page-summary-panel .ag-paging-button button {\n      position: absolute; }\n\n/**\n ****************************\n * Tool Panel\n ****************************\n*/\n.ag-tool-panel-wrapper {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  overflow-y: auto;\n  cursor: default;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  width: 200px; }\n  .ag-tool-panel-wrapper .ag-filter-toolpanel-header {\n    line-height: 1.5;\n    cursor: pointer; }\n\n.ag-column-tool-panel-column,\n.ag-column-tool-panel-column-group {\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  align-items: center;\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: nowrap;\n  flex-wrap: nowrap;\n  text-overflow: ellipsis;\n  white-space: nowrap; }\n  .ag-column-tool-panel-column .ag-column-tool-panel-column,\n  .ag-column-tool-panel-column .ag-column-tool-panel-column-group,\n  .ag-column-tool-panel-column-group .ag-column-tool-panel-column,\n  .ag-column-tool-panel-column-group .ag-column-tool-panel-column-group {\n    -webkit-box-flex: 1;\n    -ms-flex: 1 1 auto;\n    flex: 1 1 auto;\n    overflow: hidden;\n    text-overflow: ellipsis; }\n\n.ag-column-select-checkbox {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex; }\n\n.ag-tool-panel-horizontal-resize {\n  cursor: col-resize;\n  height: 100%;\n  position: absolute;\n  top: 0;\n  width: 5px;\n  z-index: 1; }\n\n.ag-rtl .ag-tool-panel-horizontal-resize {\n  -webkit-transform: translateX(3px);\n  transform: translateX(3px); }\n\n.ag-ltr .ag-tool-panel-horizontal-resize {\n  -webkit-transform: translateX(-3px);\n  transform: translateX(-3px); }\n\n.loading-filter {\n  background-color: #e6e6e6;\n  height: 100%;\n  padding: 5px;\n  position: absolute;\n  top: 34px;\n  width: 100%;\n  z-index: 1; }\n\n.ag-details-row {\n  height: 100%;\n  width: 100%; }\n\n.ag-details-grid {\n  height: 100%;\n  width: 100%; }\n\n.ag-header-group-cell {\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  height: 100%;\n  overflow: hidden;\n  position: absolute;\n  text-overflow: ellipsis; }\n\n.ag-cell-label-container {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-pack: justify;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: reverse;\n  -ms-flex-direction: row-reverse;\n  flex-direction: row-reverse;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  align-items: center;\n  width: 100%; }\n\n.ag-numeric-header .ag-cell-label-container {\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  -ms-flex-direction: row;\n  flex-direction: row; }\n\n/**\n ****************************\n * Side Bar\n ****************************\n*/\n.ag-side-bar {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: reverse;\n  -ms-flex-direction: row-reverse;\n  flex-direction: row-reverse; }\n  .ag-side-bar .ag-side-buttons div button {\n    display: block;\n    white-space: nowrap;\n    outline: none;\n    cursor: pointer; }\n    .ag-side-bar .ag-side-buttons div button span:not(.ag-icon) {\n      -webkit-writing-mode: tb;\n      -ms-writing-mode: tb;\n      writing-mode: tb;\n      -webkit-writing-mode: vertical-lr;\n      -ms-writing-mode: tb-lr;\n      writing-mode: vertical-lr; }\n  .ag-side-bar .panel-container {\n    width: 180px; }\n  .ag-side-bar.full-width .panel-container {\n    width: 200px; }\n\n.ag-rtl .ag-side-bar .ag-side-buttons button span:not(.ag-icon) {\n  -webkit-writing-mode: tb-rl;\n  -ms-writing-mode: tb-rl;\n  writing-mode: tb-rl;\n  -webkit-writing-mode: vertical-rl;\n  -ms-writing-mode: tb-rl;\n  writing-mode: vertical-rl; }\n\n/**\n ****************************\n * Status Bar\n ****************************\n*/\n.ag-status-bar {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-pack: justify;\n  -ms-flex-pack: justify;\n  justify-content: space-between;\n  overflow: hidden; }\n  .ag-status-bar .ag-status-panel {\n    display: -webkit-inline-box;\n    display: -ms-inline-flexbox;\n    display: inline-flex; }\n\n.ag-status-bar-left {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex; }\n\n.ag-status-bar-center {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex; }\n\n.ag-status-bar-right {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex; }\n\n/**\n ****************************\n * Widgets\n ****************************\n*/\n.ag-group-component {\n  position: relative;\n  -webkit-box-flex: 1;\n  -ms-flex: 1 1 100%;\n  flex: 1 1 100%; }\n  .ag-group-component .ag-group-component-title-bar {\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  .ag-group-component .ag-group-component-toolbar {\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  .ag-group-component .ag-group-component-container {\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    .ag-group-component .ag-group-component-container .ag-group-subgroup {\n      display: -webkit-box;\n      display: -ms-flexbox;\n      display: flex;\n      -ms-flex-item-align: stretch;\n      align-self: stretch; }\n  .ag-group-component .ag-group-item {\n    display: -webkit-box;\n    display: -ms-flexbox;\n    display: flex;\n    -webkit-box-flex: 1;\n    -ms-flex: 1 1 auto;\n    flex: 1 1 auto;\n    -webkit-box-align: center;\n    -ms-flex-align: center;\n    align-items: center; }\n  .ag-group-component.ag-disabled .ag-group-component-container {\n    pointer-events: none; }\n  .ag-group-component.ag-collapsed .ag-group-component-toolbar, .ag-group-component.ag-collapsed .ag-group-component-container {\n    display: none; }\n\n.ag-toggle-button .ag-input-wrapper .ag-icon {\n  -webkit-transition: right 0.3s;\n  transition: right 0.3s;\n  position: absolute;\n  top: -1px; }\n\n.ag-input-field {\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  -webkit-box-align: center;\n  -ms-flex-align: center;\n  align-items: center; }\n  .ag-input-field input, .ag-input-field select, .ag-input-field textarea {\n    -webkit-box-flex: 1;\n    -ms-flex: 1 1 auto;\n    flex: 1 1 auto;\n    width: 100%;\n    min-width: 0; }\n\n.ag-range-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.ag-picker-field > .ag-wrapper, .ag-slider > .ag-wrapper, .ag-angle-select > .ag-wrapper {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex; }\n  .ag-picker-field > .ag-wrapper > div, .ag-slider > .ag-wrapper > div, .ag-angle-select > .ag-wrapper > div {\n    -webkit-box-flex: 1;\n    -ms-flex: 1 1 auto;\n    flex: 1 1 auto; }\n\n.ag-angle-select {\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  .ag-angle-select .ag-angle-select-field .ag-parent-circle {\n    display: block;\n    position: relative; }\n  .ag-angle-select .ag-angle-select-field .ag-child-circle {\n    position: absolute; }\n\n.ag-picker-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  .ag-picker-field > .ag-wrapper > button {\n    display: -webkit-box;\n    display: -ms-flexbox;\n    display: flex;\n    border: 0;\n    padding: 0;\n    margin: 0; }\n\n.ag-color-picker > .ag-wrapper {\n  -webkit-box-align: stretch;\n  -ms-flex-align: stretch;\n  align-items: stretch;\n  overflow: hidden; }\n\n.ag-color-picker button {\n  cursor: pointer; }\n\n.ag-labeled.ag-label-align-right label {\n  -webkit-box-ordinal-group: 2;\n  -ms-flex-order: 1;\n  order: 1; }\n\n.ag-labeled.ag-label-align-right > div {\n  -webkit-box-flex: 0;\n  -ms-flex: none;\n  flex: none; }\n\n.ag-labeled.ag-label-align-top {\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  -webkit-box-align: start;\n  -ms-flex-align: start;\n  align-items: flex-start; }\n  .ag-labeled.ag-label-align-top > div {\n    -ms-flex-item-align: stretch;\n    align-self: stretch; }\n\n.ag-color-panel {\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  text-align: center; }\n  .ag-color-panel .ag-spectrum-color {\n    -webkit-box-flex: 1;\n    -ms-flex: 1 1 auto;\n    flex: 1 1 auto;\n    position: relative;\n    overflow: hidden;\n    cursor: default; }\n  .ag-color-panel .ag-fill {\n    position: absolute;\n    top: 0;\n    left: 0;\n    right: 0;\n    bottom: 0; }\n  .ag-color-panel .ag-spectrum-val {\n    cursor: pointer; }\n  .ag-color-panel .ag-spectrum-dragger {\n    position: absolute;\n    pointer-events: none;\n    cursor: pointer; }\n  .ag-color-panel .ag-spectrum-hue {\n    cursor: default;\n    background: -webkit-gradient(linear, right top, left top, color-stop(3%, #ff0000), color-stop(17%, #ffff00), color-stop(33%, #00ff00), color-stop(50%, #00ffff), color-stop(67%, #0000ff), color-stop(83%, #ff00ff), to(#ff0000));\n    background: linear-gradient(to left, #ff0000 3%, #ffff00 17%, #00ff00 33%, #00ffff 50%, #0000ff 67%, #ff00ff 83%, #ff0000 100%); }\n  .ag-color-panel .ag-spectrum-alpha {\n    cursor: default; }\n  .ag-color-panel .ag-spectrum-hue-background {\n    width: 100%;\n    height: 100%; }\n  .ag-color-panel .ag-spectrum-alpha-background {\n    background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0)), to(black));\n    background-image: linear-gradient(to right, rgba(0, 0, 0, 0), black);\n    width: 100%;\n    height: 100%; }\n  .ag-color-panel .ag-hue-alpha {\n    cursor: pointer; }\n  .ag-color-panel .ag-spectrum-slider {\n    position: absolute;\n    pointer-events: none; }\n  .ag-color-panel .ag-spectrum-text-value {\n    display: inline-block;\n    text-align: center;\n    overflow: hidden;\n    white-space: nowrap; }\n  .ag-color-panel .ag-spectrum-text-value:focus {\n    outline: none;\n    outline-offset: 0; }\n  .ag-color-panel .ag-recent-colors {\n    display: -webkit-box;\n    display: -ms-flexbox;\n    display: flex; }\n    .ag-color-panel .ag-recent-colors > div {\n      cursor: pointer; }\n\n.ag-ltr .ag-toolpanel-indent-1 {\n  padding-left: 10px; }\n\n.ag-rtl .ag-toolpanel-indent-1 {\n  padding-right: 10px; }\n\n.ag-ltr .ag-row-group-indent-1 {\n  padding-left: 10px; }\n\n.ag-rtl .ag-row-group-indent-1 {\n  padding-right: 10px; }\n\n.ag-ltr .ag-toolpanel-indent-2 {\n  padding-left: 20px; }\n\n.ag-rtl .ag-toolpanel-indent-2 {\n  padding-right: 20px; }\n\n.ag-ltr .ag-row-group-indent-2 {\n  padding-left: 20px; }\n\n.ag-rtl .ag-row-group-indent-2 {\n  padding-right: 20px; }\n\n.ag-ltr .ag-toolpanel-indent-3 {\n  padding-left: 30px; }\n\n.ag-rtl .ag-toolpanel-indent-3 {\n  padding-right: 30px; }\n\n.ag-ltr .ag-row-group-indent-3 {\n  padding-left: 30px; }\n\n.ag-rtl .ag-row-group-indent-3 {\n  padding-right: 30px; }\n\n.ag-ltr .ag-toolpanel-indent-4 {\n  padding-left: 40px; }\n\n.ag-rtl .ag-toolpanel-indent-4 {\n  padding-right: 40px; }\n\n.ag-ltr .ag-row-group-indent-4 {\n  padding-left: 40px; }\n\n.ag-rtl .ag-row-group-indent-4 {\n  padding-right: 40px; }\n\n.ag-ltr .ag-toolpanel-indent-5 {\n  padding-left: 50px; }\n\n.ag-rtl .ag-toolpanel-indent-5 {\n  padding-right: 50px; }\n\n.ag-ltr .ag-row-group-indent-5 {\n  padding-left: 50px; }\n\n.ag-rtl .ag-row-group-indent-5 {\n  padding-right: 50px; }\n\n.ag-ltr .ag-toolpanel-indent-6 {\n  padding-left: 60px; }\n\n.ag-rtl .ag-toolpanel-indent-6 {\n  padding-right: 60px; }\n\n.ag-ltr .ag-row-group-indent-6 {\n  padding-left: 60px; }\n\n.ag-rtl .ag-row-group-indent-6 {\n  padding-right: 60px; }\n\n.ag-ltr .ag-toolpanel-indent-7 {\n  padding-left: 70px; }\n\n.ag-rtl .ag-toolpanel-indent-7 {\n  padding-right: 70px; }\n\n.ag-ltr .ag-row-group-indent-7 {\n  padding-left: 70px; }\n\n.ag-rtl .ag-row-group-indent-7 {\n  padding-right: 70px; }\n\n.ag-ltr .ag-toolpanel-indent-8 {\n  padding-left: 80px; }\n\n.ag-rtl .ag-toolpanel-indent-8 {\n  padding-right: 80px; }\n\n.ag-ltr .ag-row-group-indent-8 {\n  padding-left: 80px; }\n\n.ag-rtl .ag-row-group-indent-8 {\n  padding-right: 80px; }\n\n.ag-ltr .ag-toolpanel-indent-9 {\n  padding-left: 90px; }\n\n.ag-rtl .ag-toolpanel-indent-9 {\n  padding-right: 90px; }\n\n.ag-ltr .ag-row-group-indent-9 {\n  padding-left: 90px; }\n\n.ag-rtl .ag-row-group-indent-9 {\n  padding-right: 90px; }\n\n.ag-ltr .ag-toolpanel-indent-10 {\n  padding-left: 100px; }\n\n.ag-rtl .ag-toolpanel-indent-10 {\n  padding-right: 100px; }\n\n.ag-ltr .ag-row-group-indent-10 {\n  padding-left: 100px; }\n\n.ag-rtl .ag-row-group-indent-10 {\n  padding-right: 100px; }\n\n.ag-ltr .ag-toolpanel-indent-11 {\n  padding-left: 110px; }\n\n.ag-rtl .ag-toolpanel-indent-11 {\n  padding-right: 110px; }\n\n.ag-ltr .ag-row-group-indent-11 {\n  padding-left: 110px; }\n\n.ag-rtl .ag-row-group-indent-11 {\n  padding-right: 110px; }\n\n.ag-ltr .ag-toolpanel-indent-12 {\n  padding-left: 120px; }\n\n.ag-rtl .ag-toolpanel-indent-12 {\n  padding-right: 120px; }\n\n.ag-ltr .ag-row-group-indent-12 {\n  padding-left: 120px; }\n\n.ag-rtl .ag-row-group-indent-12 {\n  padding-right: 120px; }\n\n.ag-ltr .ag-toolpanel-indent-13 {\n  padding-left: 130px; }\n\n.ag-rtl .ag-toolpanel-indent-13 {\n  padding-right: 130px; }\n\n.ag-ltr .ag-row-group-indent-13 {\n  padding-left: 130px; }\n\n.ag-rtl .ag-row-group-indent-13 {\n  padding-right: 130px; }\n\n.ag-ltr .ag-toolpanel-indent-14 {\n  padding-left: 140px; }\n\n.ag-rtl .ag-toolpanel-indent-14 {\n  padding-right: 140px; }\n\n.ag-ltr .ag-row-group-indent-14 {\n  padding-left: 140px; }\n\n.ag-rtl .ag-row-group-indent-14 {\n  padding-right: 140px; }\n\n.ag-ltr .ag-toolpanel-indent-15 {\n  padding-left: 150px; }\n\n.ag-rtl .ag-toolpanel-indent-15 {\n  padding-right: 150px; }\n\n.ag-ltr .ag-row-group-indent-15 {\n  padding-left: 150px; }\n\n.ag-rtl .ag-row-group-indent-15 {\n  padding-right: 150px; }\n\n.ag-ltr .ag-toolpanel-indent-16 {\n  padding-left: 160px; }\n\n.ag-rtl .ag-toolpanel-indent-16 {\n  padding-right: 160px; }\n\n.ag-ltr .ag-row-group-indent-16 {\n  padding-left: 160px; }\n\n.ag-rtl .ag-row-group-indent-16 {\n  padding-right: 160px; }\n\n.ag-ltr .ag-toolpanel-indent-17 {\n  padding-left: 170px; }\n\n.ag-rtl .ag-toolpanel-indent-17 {\n  padding-right: 170px; }\n\n.ag-ltr .ag-row-group-indent-17 {\n  padding-left: 170px; }\n\n.ag-rtl .ag-row-group-indent-17 {\n  padding-right: 170px; }\n\n.ag-ltr .ag-toolpanel-indent-18 {\n  padding-left: 180px; }\n\n.ag-rtl .ag-toolpanel-indent-18 {\n  padding-right: 180px; }\n\n.ag-ltr .ag-row-group-indent-18 {\n  padding-left: 180px; }\n\n.ag-rtl .ag-row-group-indent-18 {\n  padding-right: 180px; }\n\n.ag-ltr .ag-toolpanel-indent-19 {\n  padding-left: 190px; }\n\n.ag-rtl .ag-toolpanel-indent-19 {\n  padding-right: 190px; }\n\n.ag-ltr .ag-row-group-indent-19 {\n  padding-left: 190px; }\n\n.ag-rtl .ag-row-group-indent-19 {\n  padding-right: 190px; }\n\n.ag-ltr .ag-toolpanel-indent-20 {\n  padding-left: 200px; }\n\n.ag-rtl .ag-toolpanel-indent-20 {\n  padding-right: 200px; }\n\n.ag-ltr .ag-row-group-indent-20 {\n  padding-left: 200px; }\n\n.ag-rtl .ag-row-group-indent-20 {\n  padding-right: 200px; }\n\n.ag-ltr .ag-toolpanel-indent-21 {\n  padding-left: 210px; }\n\n.ag-rtl .ag-toolpanel-indent-21 {\n  padding-right: 210px; }\n\n.ag-ltr .ag-row-group-indent-21 {\n  padding-left: 210px; }\n\n.ag-rtl .ag-row-group-indent-21 {\n  padding-right: 210px; }\n\n.ag-ltr .ag-toolpanel-indent-22 {\n  padding-left: 220px; }\n\n.ag-rtl .ag-toolpanel-indent-22 {\n  padding-right: 220px; }\n\n.ag-ltr .ag-row-group-indent-22 {\n  padding-left: 220px; }\n\n.ag-rtl .ag-row-group-indent-22 {\n  padding-right: 220px; }\n\n.ag-ltr .ag-toolpanel-indent-23 {\n  padding-left: 230px; }\n\n.ag-rtl .ag-toolpanel-indent-23 {\n  padding-right: 230px; }\n\n.ag-ltr .ag-row-group-indent-23 {\n  padding-left: 230px; }\n\n.ag-rtl .ag-row-group-indent-23 {\n  padding-right: 230px; }\n\n.ag-ltr .ag-toolpanel-indent-24 {\n  padding-left: 240px; }\n\n.ag-rtl .ag-toolpanel-indent-24 {\n  padding-right: 240px; }\n\n.ag-ltr .ag-row-group-indent-24 {\n  padding-left: 240px; }\n\n.ag-rtl .ag-row-group-indent-24 {\n  padding-right: 240px; }\n\n.ag-ltr .ag-toolpanel-indent-25 {\n  padding-left: 250px; }\n\n.ag-rtl .ag-toolpanel-indent-25 {\n  padding-right: 250px; }\n\n.ag-ltr .ag-row-group-indent-25 {\n  padding-left: 250px; }\n\n.ag-rtl .ag-row-group-indent-25 {\n  padding-right: 250px; }\n\n.ag-ltr .ag-toolpanel-indent-26 {\n  padding-left: 260px; }\n\n.ag-rtl .ag-toolpanel-indent-26 {\n  padding-right: 260px; }\n\n.ag-ltr .ag-row-group-indent-26 {\n  padding-left: 260px; }\n\n.ag-rtl .ag-row-group-indent-26 {\n  padding-right: 260px; }\n\n.ag-ltr .ag-toolpanel-indent-27 {\n  padding-left: 270px; }\n\n.ag-rtl .ag-toolpanel-indent-27 {\n  padding-right: 270px; }\n\n.ag-ltr .ag-row-group-indent-27 {\n  padding-left: 270px; }\n\n.ag-rtl .ag-row-group-indent-27 {\n  padding-right: 270px; }\n\n.ag-ltr .ag-toolpanel-indent-28 {\n  padding-left: 280px; }\n\n.ag-rtl .ag-toolpanel-indent-28 {\n  padding-right: 280px; }\n\n.ag-ltr .ag-row-group-indent-28 {\n  padding-left: 280px; }\n\n.ag-rtl .ag-row-group-indent-28 {\n  padding-right: 280px; }\n\n.ag-ltr .ag-toolpanel-indent-29 {\n  padding-left: 290px; }\n\n.ag-rtl .ag-toolpanel-indent-29 {\n  padding-right: 290px; }\n\n.ag-ltr .ag-row-group-indent-29 {\n  padding-left: 290px; }\n\n.ag-rtl .ag-row-group-indent-29 {\n  padding-right: 290px; }\n\n.ag-ltr .ag-toolpanel-indent-30 {\n  padding-left: 300px; }\n\n.ag-rtl .ag-toolpanel-indent-30 {\n  padding-right: 300px; }\n\n.ag-ltr .ag-row-group-indent-30 {\n  padding-left: 300px; }\n\n.ag-rtl .ag-row-group-indent-30 {\n  padding-right: 300px; }\n\n.ag-ltr .ag-toolpanel-indent-31 {\n  padding-left: 310px; }\n\n.ag-rtl .ag-toolpanel-indent-31 {\n  padding-right: 310px; }\n\n.ag-ltr .ag-row-group-indent-31 {\n  padding-left: 310px; }\n\n.ag-rtl .ag-row-group-indent-31 {\n  padding-right: 310px; }\n\n.ag-ltr .ag-toolpanel-indent-32 {\n  padding-left: 320px; }\n\n.ag-rtl .ag-toolpanel-indent-32 {\n  padding-right: 320px; }\n\n.ag-ltr .ag-row-group-indent-32 {\n  padding-left: 320px; }\n\n.ag-rtl .ag-row-group-indent-32 {\n  padding-right: 320px; }\n\n.ag-ltr .ag-toolpanel-indent-33 {\n  padding-left: 330px; }\n\n.ag-rtl .ag-toolpanel-indent-33 {\n  padding-right: 330px; }\n\n.ag-ltr .ag-row-group-indent-33 {\n  padding-left: 330px; }\n\n.ag-rtl .ag-row-group-indent-33 {\n  padding-right: 330px; }\n\n.ag-ltr .ag-toolpanel-indent-34 {\n  padding-left: 340px; }\n\n.ag-rtl .ag-toolpanel-indent-34 {\n  padding-right: 340px; }\n\n.ag-ltr .ag-row-group-indent-34 {\n  padding-left: 340px; }\n\n.ag-rtl .ag-row-group-indent-34 {\n  padding-right: 340px; }\n\n.ag-ltr .ag-toolpanel-indent-35 {\n  padding-left: 350px; }\n\n.ag-rtl .ag-toolpanel-indent-35 {\n  padding-right: 350px; }\n\n.ag-ltr .ag-row-group-indent-35 {\n  padding-left: 350px; }\n\n.ag-rtl .ag-row-group-indent-35 {\n  padding-right: 350px; }\n\n.ag-ltr .ag-toolpanel-indent-36 {\n  padding-left: 360px; }\n\n.ag-rtl .ag-toolpanel-indent-36 {\n  padding-right: 360px; }\n\n.ag-ltr .ag-row-group-indent-36 {\n  padding-left: 360px; }\n\n.ag-rtl .ag-row-group-indent-36 {\n  padding-right: 360px; }\n\n.ag-ltr .ag-toolpanel-indent-37 {\n  padding-left: 370px; }\n\n.ag-rtl .ag-toolpanel-indent-37 {\n  padding-right: 370px; }\n\n.ag-ltr .ag-row-group-indent-37 {\n  padding-left: 370px; }\n\n.ag-rtl .ag-row-group-indent-37 {\n  padding-right: 370px; }\n\n.ag-ltr .ag-toolpanel-indent-38 {\n  padding-left: 380px; }\n\n.ag-rtl .ag-toolpanel-indent-38 {\n  padding-right: 380px; }\n\n.ag-ltr .ag-row-group-indent-38 {\n  padding-left: 380px; }\n\n.ag-rtl .ag-row-group-indent-38 {\n  padding-right: 380px; }\n\n.ag-ltr .ag-toolpanel-indent-39 {\n  padding-left: 390px; }\n\n.ag-rtl .ag-toolpanel-indent-39 {\n  padding-right: 390px; }\n\n.ag-ltr .ag-row-group-indent-39 {\n  padding-left: 390px; }\n\n.ag-rtl .ag-row-group-indent-39 {\n  padding-right: 390px; }\n\n.ag-ltr .ag-toolpanel-indent-40 {\n  padding-left: 400px; }\n\n.ag-rtl .ag-toolpanel-indent-40 {\n  padding-right: 400px; }\n\n.ag-ltr .ag-row-group-indent-40 {\n  padding-left: 400px; }\n\n.ag-rtl .ag-row-group-indent-40 {\n  padding-right: 400px; }\n\n.ag-ltr .ag-toolpanel-indent-41 {\n  padding-left: 410px; }\n\n.ag-rtl .ag-toolpanel-indent-41 {\n  padding-right: 410px; }\n\n.ag-ltr .ag-row-group-indent-41 {\n  padding-left: 410px; }\n\n.ag-rtl .ag-row-group-indent-41 {\n  padding-right: 410px; }\n\n.ag-ltr .ag-toolpanel-indent-42 {\n  padding-left: 420px; }\n\n.ag-rtl .ag-toolpanel-indent-42 {\n  padding-right: 420px; }\n\n.ag-ltr .ag-row-group-indent-42 {\n  padding-left: 420px; }\n\n.ag-rtl .ag-row-group-indent-42 {\n  padding-right: 420px; }\n\n.ag-ltr .ag-toolpanel-indent-43 {\n  padding-left: 430px; }\n\n.ag-rtl .ag-toolpanel-indent-43 {\n  padding-right: 430px; }\n\n.ag-ltr .ag-row-group-indent-43 {\n  padding-left: 430px; }\n\n.ag-rtl .ag-row-group-indent-43 {\n  padding-right: 430px; }\n\n.ag-ltr .ag-toolpanel-indent-44 {\n  padding-left: 440px; }\n\n.ag-rtl .ag-toolpanel-indent-44 {\n  padding-right: 440px; }\n\n.ag-ltr .ag-row-group-indent-44 {\n  padding-left: 440px; }\n\n.ag-rtl .ag-row-group-indent-44 {\n  padding-right: 440px; }\n\n.ag-ltr .ag-toolpanel-indent-45 {\n  padding-left: 450px; }\n\n.ag-rtl .ag-toolpanel-indent-45 {\n  padding-right: 450px; }\n\n.ag-ltr .ag-row-group-indent-45 {\n  padding-left: 450px; }\n\n.ag-rtl .ag-row-group-indent-45 {\n  padding-right: 450px; }\n\n.ag-ltr .ag-toolpanel-indent-46 {\n  padding-left: 460px; }\n\n.ag-rtl .ag-toolpanel-indent-46 {\n  padding-right: 460px; }\n\n.ag-ltr .ag-row-group-indent-46 {\n  padding-left: 460px; }\n\n.ag-rtl .ag-row-group-indent-46 {\n  padding-right: 460px; }\n\n.ag-ltr .ag-toolpanel-indent-47 {\n  padding-left: 470px; }\n\n.ag-rtl .ag-toolpanel-indent-47 {\n  padding-right: 470px; }\n\n.ag-ltr .ag-row-group-indent-47 {\n  padding-left: 470px; }\n\n.ag-rtl .ag-row-group-indent-47 {\n  padding-right: 470px; }\n\n.ag-ltr .ag-toolpanel-indent-48 {\n  padding-left: 480px; }\n\n.ag-rtl .ag-toolpanel-indent-48 {\n  padding-right: 480px; }\n\n.ag-ltr .ag-row-group-indent-48 {\n  padding-left: 480px; }\n\n.ag-rtl .ag-row-group-indent-48 {\n  padding-right: 480px; }\n\n.ag-ltr .ag-toolpanel-indent-49 {\n  padding-left: 490px; }\n\n.ag-rtl .ag-toolpanel-indent-49 {\n  padding-right: 490px; }\n\n.ag-ltr .ag-row-group-indent-49 {\n  padding-left: 490px; }\n\n.ag-rtl .ag-row-group-indent-49 {\n  padding-right: 490px; }\n\n.ag-ltr {\n  direction: ltr; }\n  .ag-ltr .ag-body, .ag-ltr .ag-floating-top, .ag-ltr .ag-floating-bottom, .ag-ltr .ag-header, .ag-ltr .ag-body-viewport, .ag-ltr .ag-body-horizontal-scroll {\n    -webkit-box-orient: horizontal;\n    -webkit-box-direction: normal;\n    -ms-flex-direction: row;\n    flex-direction: row; }\n  .ag-ltr .ag-header-cell-resize {\n    right: -4px; }\n  .ag-ltr .ag-pinned-right-header .ag-header-cell-resize {\n    left: -4px; }\n\n.ag-rtl {\n  direction: rtl; }\n  .ag-rtl .ag-body, .ag-rtl .ag-floating-top, .ag-rtl .ag-floating-bottom, .ag-rtl .ag-header, .ag-rtl .ag-body-viewport, .ag-rtl .ag-body-horizontal-scroll {\n    -webkit-box-orient: horizontal;\n    -webkit-box-direction: reverse;\n    -ms-flex-direction: row-reverse;\n    flex-direction: row-reverse; }\n  .ag-rtl .ag-header-cell-resize {\n    left: -4px; }\n  .ag-rtl .ag-pinned-left-header .ag-header-cell-resize {\n    right: -4px; }\n\n@media print {\n  .ag-body-viewport {\n    display: block; }\n  .ag-row {\n    page-break-inside: avoid; } }\n\n.ag-body .ag-pinned-left-cols-viewport, .ag-body .ag-body-viewport, .ag-body .ag-pinned-right-cols-viewport {\n  -webkit-overflow-scrolling: touch; }\n\n.ag-chart {\n  position: relative;\n  display: flex;\n  overflow: hidden;\n  width: 100%;\n  height: 100%; }\n  .ag-chart .ag-chart-components-wrapper {\n    position: relative;\n    display: flex;\n    flex: 1 1 auto;\n    overflow: hidden; }\n    .ag-chart .ag-chart-components-wrapper .ag-chart-canvas-wrapper {\n      position: relative;\n      flex: 1 1 auto;\n      overflow: hidden; }\n      .ag-chart .ag-chart-components-wrapper .ag-chart-canvas-wrapper canvas {\n        display: block; }\n    .ag-chart .ag-chart-components-wrapper .ag-chart-menu {\n      position: absolute;\n      top: 10px;\n      right: 20px;\n      width: 24px;\n      overflow: hidden;\n      display: flex;\n      flex-direction: column; }\n  .ag-chart:not(.ag-has-menu):hover .ag-chart-menu {\n    opacity: 1;\n    pointer-events: all; }\n  .ag-chart .ag-chart-docked-container {\n    position: relative;\n    width: 0;\n    min-width: 0;\n    transition: min-width 0.4s; }\n    .ag-chart .ag-chart-docked-container .ag-panel {\n      border-width: 0 0 0 1px; }\n\n.ag-chart-tabbed-menu > div {\n  width: 100%;\n  height: 100%;\n  display: flex;\n  flex-direction: column;\n  overflow: hidden; }\n\n.ag-chart-tabbed-menu .ag-tab-header {\n  flex: none;\n  user-select: none;\n  cursor: default; }\n\n.ag-chart-tabbed-menu .ag-tab-body {\n  display: flex;\n  flex: 1 1 auto;\n  align-items: stretch;\n  overflow: hidden; }\n  .ag-chart-tabbed-menu .ag-tab-body > div {\n    width: 100%;\n    overflow: hidden;\n    overflow-y: auto; }\n\n.ag-chart-tabbed-menu .ag-chart-settings {\n  overflow-x: hidden; }\n  .ag-chart-tabbed-menu .ag-chart-settings .ag-chart-settings-wrapper {\n    position: relative;\n    flex-direction: column;\n    width: 100%;\n    height: 100%;\n    display: flex;\n    overflow: hidden; }\n    .ag-chart-tabbed-menu .ag-chart-settings .ag-chart-settings-wrapper .ag-chart-settings-nav-bar {\n      width: 100%;\n      display: flex;\n      height: 30px;\n      align-items: center; }\n      .ag-chart-tabbed-menu .ag-chart-settings .ag-chart-settings-wrapper .ag-chart-settings-nav-bar .ag-nav-card-selector {\n        display: flex;\n        align-items: center;\n        justify-content: space-around;\n        flex: 1 1 auto;\n        height: 100%; }\n        .ag-chart-tabbed-menu .ag-chart-settings .ag-chart-settings-wrapper .ag-chart-settings-nav-bar .ag-nav-card-selector .ag-nav-card-item {\n          opacity: 0.2; }\n          .ag-chart-tabbed-menu .ag-chart-settings .ag-chart-settings-wrapper .ag-chart-settings-nav-bar .ag-nav-card-selector .ag-nav-card-item.ag-selected {\n            opacity: 1; }\n      .ag-chart-tabbed-menu .ag-chart-settings .ag-chart-settings-wrapper .ag-chart-settings-nav-bar .ag-chart-settings-prev-btn, .ag-chart-tabbed-menu .ag-chart-settings .ag-chart-settings-wrapper .ag-chart-settings-nav-bar .ag-chart-settings-next-btn {\n        position: relative;\n        flex: none; }\n        .ag-chart-tabbed-menu .ag-chart-settings .ag-chart-settings-wrapper .ag-chart-settings-nav-bar .ag-chart-settings-prev-btn button, .ag-chart-tabbed-menu .ag-chart-settings .ag-chart-settings-wrapper .ag-chart-settings-nav-bar .ag-chart-settings-next-btn button {\n          position: absolute;\n          top: 0;\n          left: 0;\n          width: 100%;\n          height: 100%;\n          cursor: pointer;\n          opacity: 0; }\n    .ag-chart-tabbed-menu .ag-chart-settings .ag-chart-settings-wrapper .ag-chart-settings-mini-charts-container {\n      position: relative;\n      flex: 1 1 auto;\n      overflow-x: hidden;\n      overflow-y: auto; }\n      .ag-chart-tabbed-menu .ag-chart-settings .ag-chart-settings-wrapper .ag-chart-settings-mini-charts-container .ag-chart-settings-mini-wrapper {\n        position: absolute;\n        top: 0;\n        left: 0;\n        display: flex;\n        flex-direction: column;\n        width: 100%;\n        min-height: 100%;\n        overflow: hidden; }\n        .ag-chart-tabbed-menu .ag-chart-settings .ag-chart-settings-wrapper .ag-chart-settings-mini-charts-container .ag-chart-settings-mini-wrapper .ag-group-component {\n          flex: none; }\n        .ag-chart-tabbed-menu .ag-chart-settings .ag-chart-settings-wrapper .ag-chart-settings-mini-charts-container .ag-chart-settings-mini-wrapper .ag-group-component-container {\n          flex-direction: row;\n          flex-wrap: wrap; }\n          .ag-chart-tabbed-menu .ag-chart-settings .ag-chart-settings-wrapper .ag-chart-settings-mini-charts-container .ag-chart-settings-mini-wrapper .ag-group-component-container .ag-chart-mini-thumbnail {\n            flex: none; }\n        .ag-chart-tabbed-menu .ag-chart-settings .ag-chart-settings-wrapper .ag-chart-settings-mini-charts-container .ag-chart-settings-mini-wrapper.ag-animating, .ag-chart-tabbed-menu .ag-chart-settings .ag-chart-settings-wrapper .ag-chart-settings-mini-charts-container .ag-chart-settings-mini-wrapper.ag-animating {\n          transition: left 0.3s;\n          transition-timing-function: ease-in-out; }\n        .ag-chart-tabbed-menu .ag-chart-settings .ag-chart-settings-wrapper .ag-chart-settings-mini-charts-container .ag-chart-settings-mini-wrapper .ag-chart-mini-thumbnail {\n          cursor: pointer; }\n          .ag-chart-tabbed-menu .ag-chart-settings .ag-chart-settings-wrapper .ag-chart-settings-mini-charts-container .ag-chart-settings-mini-wrapper .ag-chart-mini-thumbnail canvas {\n            display: block; }\n\n.ag-chart-tabbed-menu .ag-chart-data-wrapper, .ag-chart-tabbed-menu .ag-chart-format-wrapper {\n  display: flex;\n  flex-direction: column;\n  position: relative;\n  user-select: none; }\n  .ag-chart-tabbed-menu .ag-chart-data-wrapper > div, .ag-chart-tabbed-menu .ag-chart-format-wrapper > div {\n    display: flex;\n    margin: 0;\n    padding-bottom: 2px; }\n    .ag-chart-tabbed-menu .ag-chart-data-wrapper > div:not(:first-child), .ag-chart-tabbed-menu .ag-chart-format-wrapper > div:not(:first-child) {\n      margin-top: 0; }\n\n.ag-chart-tabbed-menu .ag-chart-format-wrapper {\n  overflow-x: hidden; }\n  .ag-chart-tabbed-menu .ag-chart-format-wrapper .ag-group-component .ag-group-subgroup {\n    justify-content: space-between; }\n\n.ag-chart .ag-chart-canvas-wrapper.ag-chart-empty > canvas {\n  visibility: hidden; }\n\n.ag-chart .ag-chart-canvas-wrapper.ag-chart-empty .ag-chart-empty-text {\n  display: flex; }\n\n.ag-chart .ag-chart-empty-text {\n  display: none;\n  position: absolute;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  align-items: center;\n  justify-content: center; }\n\n.ag-chart .ag-chart-menu {\n  opacity: 0;\n  pointer-events: none; }\n  .ag-chart .ag-chart-menu > span {\n    opacity: 0.5;\n    line-height: 24px;\n    font-size: 24px;\n    width: 24px;\n    height: 24px;\n    margin: 2px 0;\n    cursor: pointer; }\n    .ag-chart .ag-chart-menu > span:hover {\n      border-radius: 5px; }\n\n.ag-chart .ag-chart-docked-container {\n  min-width: 0;\n  width: 0; }\n\n.ag-chart-tabbed-menu .ag-tab-body {\n  padding: 0; }\n\n.ag-chart-tabbed-menu .ag-chart-settings .ag-chart-settings-nav-bar {\n  padding: 0 10px;\n  user-select: none; }\n  .ag-chart-tabbed-menu .ag-chart-settings .ag-chart-settings-nav-bar .ag-nav-card-selector {\n    padding: 0 10px; }\n    .ag-chart-tabbed-menu .ag-chart-settings .ag-chart-settings-nav-bar .ag-nav-card-selector .ag-nav-card-item {\n      cursor: pointer; }\n\n"
  },
  {
    "path": "public/backend/vendors/css/tables/ag-grid/ag-theme-material.css",
    "content": "@charset \"UTF-8\";\n@font-face {\n  font-family: \"agGridMaterial\";\n  src: url(\"data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8SBlYAAAC8AAAAYGNtYXAXVtK8AAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5ZuX9LmgAAAF4AAASrGhlYWQVtyBHAAAUJAAAADZoaGVhB4kD+wAAFFwAAAAkaG10eN4AJ0kAABSAAAAA6GxvY2GGnoHMAAAVaAAAAHZtYXhwAEQAWQAAFeAAAAAgbmFtZVm8q3EAABYAAAABqnBvc3QAAwAAAAAXrAAAACAAAwP3AZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADpNQPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6TX//f//AAAAAAAg6QD//f//AAH/4xcEAAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAQAAawMAAxUACwAAASEVCQEVITUhNychAwD+AAEV/usCAP7V1tYBKwMVVf8A/wBVgNXVAAAAAAQAOf/5A8cDhwAIAA8AFwAfAAABMzUzJwczFTEHIzUHFzUzJScVIxUzFTcFIxUjFzcjNQGrqnLHx3I5csfHcgJVx3Jyx/6OqnLHx3ICTnLHx3I5csfHclXHcqpyx45yx8dyAAABAKsAawNVAxUACQAAExc3ETMRFzcJAas87lbuPP6r/qsBwDzu/fkCB+89AVX+qwACAFUAFQOrA2sAHAAoAAABIgcOAQcGFRQXHgEXFjMyNz4BNzY1NCcuAScmIxMHJwcnNyc3FzcXBwIAWE5OdCEiIiF0Tk5YWE5OdCEiIiF0Tk5Y1TyZmTyZmTyZmTyZA2siIXROTlhYTk50ISIiIXROTlhYTk50ISL9vDyZmTyZmTyZmTyZAAAAAwDVAJUDKwLrAAQACQANAAATMxEjETczESMREzMRI9WAgO94eO94eAI3/l4BorT9qgJW/qr/AAACAIAAQAOAA0AADwAWAAABISIGFREUFjMhMjY1ETQmASc3FwEXAQMr/aojMjIjAlYjMjL+XdY8mgFEPP6AA0AyI/2qIzIyIwJWIzL9q9U8mQFEPP6AAAAAAgCAAEADgANAAA8AEwAAASEiBhURFBYzITI2NRE0JgMhNSEDK/2qIzIyIwJWIzIyef5WAaoDQDIj/aojMjIjAlYjMv5VVgAAAgCAAEADgANAAAMAEwAAAREhESUhIgYVERQWMyEyNjURNCYDK/2qAlb9qiMyMiMCViMyMgLr/aoCVlUyI/2qIzIyIwJWIzIAAwBzAEgDjQM4AAYACgAWAAAJAQcXCQIhNxchBTAGFRQWMzI2NTQmAv3+VTxm/vcBRQFF/e/MzP5oAkxVMiMjMlUBjQGrPGb+9/67AUXNzUBrKiMyMiMqawAAAAACAKsAawFVAxUAAwAHAAAlIxEzNRUjNQFVqqqqawH/q1dXAAAJAKsAawNVAxUAAwAIAAwAEAAVABkAHgAiACYAABMzNSMBMzUjFSEzNSM1MzUjBTM1IxUBFTM1BTM1IxUBMzUjETM1I6uqqgEAqqr/AKqqqqoBAKqqAQCq/laqqgEAqqqqqgJrqv1WqqqqVqqqqqoBqqqqqqqq/wCq/laqAAAAAAEBYgDAAp4CwAAGAAABJwkBNyc3Ap48/wABADzDwwKEPP8A/wA8xMQAAAAAAwBr/+sDlQOVAAgAGQAdAAABISIGFREzESEXISIGFREUFjMhMjY1ETQmIxEhESECwP4AIzJVAgCA/iskMjIkAdUjMjIj/isB1QOVMiP9qwJVVTIk/asjMjIjAlUkMv1VAlUAAAEA1QCVAysC6wAMAAABJwcnBxcHFzcXNyc3Ays87+887+887+887+8Crzzv7zzv7zzv7zzv7wAABQBVABUDqwNrACUAMgA/AEsAUQAAAT4BNTQmIyIGFRQWMzI2NxcHLgEjIgYVFBYzMjY1NCYnNwEzNQEHIiY1NDYzMhYVFAYjESImNTQ2MzIWFRQGIwEiJjU0NjMyFhUUBgkBFwE1IwGbCAhkR0dkZEcTIxBlZRAjE0dkZEdHZAgIZQErgP3wmyMyMiMjMjIjIzIyIyMyMiMBAAkMDAkJDAwBIv8AVQErgAJ6ECMTR2RkR0dkCAhlZQgIZEdHZGRHEyMQZf7VKwIPDzEkJDExJCQx/gAxJCQxMSQkMQFADAkJDAwJCQwBlf8AVQEqKwAABwCXAL8DaQLBAAwAEAAdACEALQA6AD4AABMiBhUUFjMyNjU0JiMFNSEVAyIGFRQWMzI2NTQmIwUhNSEFMhYVFAYjIiY1NDY3MhYVFAYjIiY1NDYzBSE1IcISGRkSEhkZEgKn/dd+EhkZEhIZGRIB0v6sAVT+Lg0TEw0NExMNEhkZEhIZGRICp/3XAikBFRkSERoaERIZVVZWASsZEhIZGRISGVVVCxMNDRMTDQ0T4RoREhkZEhEaVlUAAAABAKsAawNVAxUACQAAAScHESMRJwcJAQNVPO5W7jwBVQFVAcA87gIH/fnvPf6rAVUAAAAAAQFiAMACngLAAAYAAAEHFwcXCQEBnjzDwzwBAP8AAsA8xMQ8AQABAAAAAAABAJMAxwNtArkARwAAAS4BIyIGByc+ATMyFx4BFxYXDgEHJz4BNyMOAQcnIxcOASMiJicjHgEzMjY3Fw4BIyInLgEnJic+ATcXDgEHMyc+ATMyFhczAqMKXD0iPRZPK2M2Pjk5XyQlFRhYOU8SGAVEBA0IK1BGBAkFIjUJRApcPhMjEEghRyY+OTlfJCUVEz4oXgUGAoYpDSQVIjQJRAHdOk8aF08ZHBMSQi4tNz5lIU8SLRoMFQkqRgEBKR86UAgISA0OExJCLi03MFQgXgoUCyoNECgfAAADAJMAxwNtArkAHAApADUAAAEiBw4BBwYHFhceARcWMzI3PgE3NjcmJy4BJyYjESImNTQ2MzIWFRQGIxEiBhUUFjMyNjU0JgIAPjk5XyQlFRUlJF85OT4+OTlfJCUVFSUkXzk5PkVhYUVFYWFFKTs7KSk7OwK5ExJCLi03Ny0uQhITExJCLi03Ny0uQhIT/mFhRUVhYUVFYQEKOykpOzspKTsAAAMAgADAA4ACwAAEAAgADAAAJTM1IxUBFSE1ASE1IQGrqqr+1QMA/YACAP4AwFVVAgBVVf7VVgAAAgD3AMADCQLAAAUACgAAJSc3JwkBATMRIxEDCcTEPP8AAQD+KlZW/MTEPP8A/wACAP4AAgAAAAACAKsBQANVAkAAAwAIAAABIRUhBSE1IRUDVf1WAqr9VgKq/VYCQFWrVVUAAAYAjgCkA3IC3AAHAAwAEwAXABsAIQAAASEUBisBNTElFSE1IScyFhUhNSEBIzUzNSM1MycjNDYzFQJVAR1DL6sBHf7jAR1yL0P+AAGO/uRycnJy5HJDLwEVL0Jx5HJy40Ivcf3IcXJyci9CcQAAAAACAJMAxwNtArkAHAApAAABIgcOAQcGBxYXHgEXFjMyNz4BNzY3JicuAScmIxEiJjU0NjMyFhUUBiMCAD45OV8kJRUVJSRfOTk+Pjk5XyQlFRUlJF85OT5FYWFFRWFhRQK5ExJCLi03Ny0uQhITExJCLi03Ny0uQhIT/mFhRUVhYUVFYQACAPcAwAMJAsAABgAKAAATFwcXCQEHJTMRI/fExDwBAP8APAG8VlYChMTEPAEAAQA8PP4AAAAAAAEAqwBrA1UDFQAJAAABITcnCQE3JyE1A1X9+e89/qsBVTzuAgcB6+48/qv+qzzuVgAAAAACAOQApAMcAtwAHAAmAAABNxcHMxUjHgEXBycVIzUHJzcjNTMnNx4BFzUzFQczNzUnIwcVHgECOWhQaJOTGjQaUGhyaFBok5NoUBo0GnJoXkNDXkMRIQJJaFBocho0GlBok5NoUGhyaFAaNBqTk/tDXkNDXhEhAAABAIAC6wOAA0AAAwAAEyEVIYADAP0AA0BVAAAAAwCAAMADgALAAAMABwALAAA3ITUhNSE1ITUVITWAAwD9AAMA/QADAMBVgFbVVVUAAQEAAEADAACVAAMAACUhFSEBAAIA/gCVVQAAAAEA1QGVAysB6wAEAAATIRUhNdUCVv2qAetWVgABAWIAwAKeAsAABgAAAQcXBxcJAQGePMPDPAEA/wACwDzExDwBAAEAAAAAAAMAgADAA4ACwAADAAcACwAANyE1IREVITUBITUhgAIA/gADAP0AAwD9AMBVAatVVf7VVgADAFUAFQOrA2sAHAArADoAAAEiBw4BBwYVFBceARcWMzI3PgE3NjU0Jy4BJyYjATQ3PgE3NjMyFhcBLgE1ASImJwEeARUUBw4BBwYjAgBYTk50ISIiIXROTlhYTk50ISIiIXROTlj+qxobXT4+RztrK/4iIiYBVTtrKwHeIiYaG10+PkcDayIhdE5OWFhOTnQhIiIhdE5OWFhOTnQhIv5VRz4+XRsaJiL+IitrO/6rJiIB3itrO0c+Pl0bGgAAAAADAID/6wOAA5UAGAAkACwAAAEjLgEjIgYHIyIGFREUFjMhMjY1ETQmIzEhMhYVFAYjIiY1NDYBIREzFSE1MwMrsw1BKipBDbMjMjIjAlYjMjIj/tUSGRkSEhkZAT39qlYBqlYDQCUwMCUyI/1VIzIyIwKrIzIZEhEZGRESGf0AAquAgAACAK0AbwNTAxEABQASAAAlByc3HgETAQcnBxcHJzcXNyc3AWOOKI4KFMYBNB8e9z5Y9lg9ex4e/Y4ojgoUAgr+zB4eez1Y9lg+9x4fAAAAAAkAOf/5A8cDhwAPABMAFwAgACQALgAyADYAOgAABSEiJjURNDYzITIWFREUBgEjFTMBIREhJQcXByc3HgEXJyMVMyUHJwcnNx4BFzEBIxUzJSMVMzcjFTMDVf1WL0NDLwKqL0ND/dGqqgIA/jkBx/7cQkIpaWkKFQrcqqoB+ChBQihqGjUa/giqqgEd5OTjqqoHQy8Cqi9DQy/9Vi9DARyqAY7+crNCQShpagoUCturMShBQShpGjUaAZaqqqqqqgAAAAABANUAlQMrAusACwAAASERIxEhNSERMxEhAyv/AFb/AAEAVgEAAZX/AAEAVgEA/wAAAAAAAQFiAMACngLAAAYAAAEnCQE3JzcCnjz/AAEAPMPDAoQ8/wD/ADzExAAAAAACAFUAFQOrA2sAHAA5AAABIgcOAQcGFRQXHgEXFjMyNz4BNzY1NCcuAScmIxEiJy4BJyY1NDc+ATc2MzIXHgEXFhUUBw4BBwYjAgBYTk50ISIiIXROTlhYTk50ISIiIXROTlhHPj5dGxoaG10+PkdHPj5dGxoaG10+PkcDayIhdE5OWFhOTnQhIiIhdE5OWFhOTnQhIv0AGhtdPj5HRz4+XRsaGhtdPj5HRz4+XRsaAAMAVQAVA6sDawAcADkAVgAAASIHDgEHBhUUFx4BFxYzMjc+ATc2NTQnLgEnJiM1IgcOAQcGFRQXHgEXFjMyNz4BNzY1NCcuAScmIxEiJy4BJyY1NDc+ATc2MzIXHgEXFhUUBw4BBwYjAgAsJyc6ERAQETonJywsJyc6ERAQETonJyxYTk50ISIiIXROTlhYTk50ISIiIXROTlhHPj5dGxoaG10+PkdHPj5dGxoaG10+PkcClRAROicnLCwnJzoREBAROicnLCwnJzoRENYiIXROTlhYTk50ISIiIXROTlhYTk50ISL9ABobXT4+R0c+Pl0bGhobXT4+R0c+Pl0bGgABAKsAawNVAxUACQAAAQcXIRUhBxcJAQIAPO79+QIH7jwBVf6rAxU87lbuPAFVAVUAAAAAAgCAAEADgANAAA4AGQAAAREhESMRFBYzITI2NREjBTcXByc3FxEzETEDK/2qVTIjAlYjMlX/AG481dU8blYBwP7VASv+1SMyMiMBKx1uPNXVPG4Bnf5jAAEBKwFVAtUCKwADAAABFzchASvV1f5WAivW1gABAZUA6wJrApUAAwAAAQcXEQJr1tYCldXVAaoAAQGVAOsCawKVAAMAACU3JxEBldbW69XV/lYAAAEBKwFVAtUCKwADAAABNxchASvV1f5WAVXW1gABAIkAogN3At4ABgAAAScHFwEnAQF3sjzuAgA8/jwBG7I97gIAPP49AAAAAAEBYgDAAp4CwAAGAAABBxcHFwkBAZ48w8M8AQD/AALAPMTEPAEAAQAAAAAAAQDVAZUDKwHrAAQAABMhFSE11QJW/aoB61ZWAAEBAAEiAwACXgAFAAABBycHCQECxMTEPAEAAQACXsPDPP8AAQAAAAADAFUA6wOrApUAGgAeADkAABM0NjsBNSMiBw4BBwYVFBceARcWOwE1IyImNRchNSElIxUzMhYVFAYrARUzMjc+ATc2NTQnLgEnJiOmTjeqqiwnJzoREREROicnLKqqN06vAVb+qgGAqqo3Tk43qqosJyc6ERERETonJywBwDdNURAROicnLCwnJzoREFFNNytWqlFNNzdNURAROicnLCwnJzoREAAAAAADAFUAQAOrA0AAFAAYADgAAAEjFTMyFhUUBgcXPgE1NCcuAScmIwcjFzMBFw4BFRQXHgEXFjsBNSMiJjU0NjcXIxUzFxUzFzcBBwLVqqo3TjgrPjRCERE6JycsKl5WCP2qhTpLERE6Jycsqqo3TkUxWB91YUmsNf03NwKVUU03LkYLPhplPiwnJzoREKpWAXWFGGpDLCcnOhEQUU03M0sFWFZhSas2Aso2AAAAAQAAAAEAAG2khpdfDzz1AAsEAAAAAADZaG3lAAAAANlobeUAAP/rA8cDlQAAAAgAAgAAAAAAAAABAAADwP/AAAAEAAAAAAADxwABAAAAAAAAAAAAAAAAAAAAOgQAAAAAAAAAAAAAAAIAAAAEAAEABAAAOQQAAKsEAABVBAAA1QQAAIAEAACABAAAgAQAAHMEAACrBAAAqwQAAWIEAABrBAAA1QQAAFUEAACXBAAAqwQAAWIEAACTBAAAkwQAAIAEAAD3BAAAqwQAAI4EAACTBAAA9wQAAKsEAADkBAAAgAQAAIAEAAEABAAA1QQAAWIEAACABAAAVQQAAIAEAACtBAAAOQQAANUEAAFiBAAAVQQAAFUEAACrBAAAgAQAASsEAAGVBAABlQQAASsEAACJBAABYgQAANUEAAEABAAAVQQAAFUAAAAAAAoAFAAeADoAbACEAMgA5AEQATQBWAGGAZgB2AHuAiACPAK0AxIDLANCA64EAAQcBDgETgSGBMgE5AT+BToFSAVgBW4FfAWSBawGDAZOBnYG2AbyBwgHYAfgB/oIJgg0CEIIUAheCHQIigiYCKwJAAlWAAAAAQAAADoAVwAJAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAA4ArgABAAAAAAABAAoAAAABAAAAAAACAAcAewABAAAAAAADAAoAPwABAAAAAAAEAAoAkAABAAAAAAAFAAsAHgABAAAAAAAGAAoAXQABAAAAAAAKABoArgADAAEECQABABQACgADAAEECQACAA4AggADAAEECQADABQASQADAAEECQAEABQAmgADAAEECQAFABYAKQADAAEECQAGABQAZwADAAEECQAKADQAyEFnTWF0ZXJpYWwAQQBnAE0AYQB0AGUAcgBpAGEAbFZlcnNpb24gMS4wAFYAZQByAHMAaQBvAG4AIAAxAC4AMEFnTWF0ZXJpYWwAQQBnAE0AYQB0AGUAcgBpAGEAbEFnTWF0ZXJpYWwAQQBnAE0AYQB0AGUAcgBpAGEAbFJlZ3VsYXIAUgBlAGcAdQBsAGEAckFnTWF0ZXJpYWwAQQBnAE0AYQB0AGUAcgBpAGEAbEZvbnQgZ2VuZXJhdGVkIGJ5IEljb01vb24uAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\") format(\"truetype\");\n  font-weight: normal;\n  font-style: normal; }\n\n.ag-theme-material {\n  -webkit-font-smoothing: antialiased;\n  background-color: #fff;\n  color: rgba(0, 0, 0, 0.87);\n  font-family: \"Roboto\", sans-serif;\n  font-weight: 400;\n  font-size: 13px;\n  line-height: normal; }\n  .ag-theme-material .ag-tab-header .ag-tab.ag-tab-selected {\n    border-bottom: 2px solid #3f51b5; }\n  .ag-theme-material label {\n    margin-bottom: 0; }\n  .ag-theme-material * {\n    box-sizing: border-box; }\n    .ag-theme-material *:focus, .ag-theme-material * *:before, .ag-theme-material * *:after {\n      outline: none;\n      box-sizing: border-box; }\n  .ag-theme-material .ag-tab {\n    box-sizing: content-box; }\n  .ag-theme-material .ag-ltr .ag-toolpanel-indent-1 {\n    padding-left: 26px; }\n  .ag-theme-material .ag-rtl .ag-toolpanel-indent-1 {\n    padding-right: 26px; }\n  .ag-theme-material .ag-ltr .ag-row-group-indent-1 {\n    padding-left: 42px; }\n  .ag-theme-material .ag-rtl .ag-row-group-indent-1 {\n    padding-right: 42px; }\n  .ag-theme-material .ag-ltr .ag-toolpanel-indent-2 {\n    padding-left: 52px; }\n  .ag-theme-material .ag-rtl .ag-toolpanel-indent-2 {\n    padding-right: 52px; }\n  .ag-theme-material .ag-ltr .ag-row-group-indent-2 {\n    padding-left: 84px; }\n  .ag-theme-material .ag-rtl .ag-row-group-indent-2 {\n    padding-right: 84px; }\n  .ag-theme-material .ag-ltr .ag-toolpanel-indent-3 {\n    padding-left: 78px; }\n  .ag-theme-material .ag-rtl .ag-toolpanel-indent-3 {\n    padding-right: 78px; }\n  .ag-theme-material .ag-ltr .ag-row-group-indent-3 {\n    padding-left: 126px; }\n  .ag-theme-material .ag-rtl .ag-row-group-indent-3 {\n    padding-right: 126px; }\n  .ag-theme-material .ag-ltr .ag-toolpanel-indent-4 {\n    padding-left: 104px; }\n  .ag-theme-material .ag-rtl .ag-toolpanel-indent-4 {\n    padding-right: 104px; }\n  .ag-theme-material .ag-ltr .ag-row-group-indent-4 {\n    padding-left: 168px; }\n  .ag-theme-material .ag-rtl .ag-row-group-indent-4 {\n    padding-right: 168px; }\n  .ag-theme-material .ag-ltr .ag-toolpanel-indent-5 {\n    padding-left: 130px; }\n  .ag-theme-material .ag-rtl .ag-toolpanel-indent-5 {\n    padding-right: 130px; }\n  .ag-theme-material .ag-ltr .ag-row-group-indent-5 {\n    padding-left: 210px; }\n  .ag-theme-material .ag-rtl .ag-row-group-indent-5 {\n    padding-right: 210px; }\n  .ag-theme-material .ag-ltr .ag-toolpanel-indent-6 {\n    padding-left: 156px; }\n  .ag-theme-material .ag-rtl .ag-toolpanel-indent-6 {\n    padding-right: 156px; }\n  .ag-theme-material .ag-ltr .ag-row-group-indent-6 {\n    padding-left: 252px; }\n  .ag-theme-material .ag-rtl .ag-row-group-indent-6 {\n    padding-right: 252px; }\n  .ag-theme-material .ag-ltr .ag-toolpanel-indent-7 {\n    padding-left: 182px; }\n  .ag-theme-material .ag-rtl .ag-toolpanel-indent-7 {\n    padding-right: 182px; }\n  .ag-theme-material .ag-ltr .ag-row-group-indent-7 {\n    padding-left: 294px; }\n  .ag-theme-material .ag-rtl .ag-row-group-indent-7 {\n    padding-right: 294px; }\n  .ag-theme-material .ag-ltr .ag-toolpanel-indent-8 {\n    padding-left: 208px; }\n  .ag-theme-material .ag-rtl .ag-toolpanel-indent-8 {\n    padding-right: 208px; }\n  .ag-theme-material .ag-ltr .ag-row-group-indent-8 {\n    padding-left: 336px; }\n  .ag-theme-material .ag-rtl .ag-row-group-indent-8 {\n    padding-right: 336px; }\n  .ag-theme-material .ag-ltr .ag-toolpanel-indent-9 {\n    padding-left: 234px; }\n  .ag-theme-material .ag-rtl .ag-toolpanel-indent-9 {\n    padding-right: 234px; }\n  .ag-theme-material .ag-ltr .ag-row-group-indent-9 {\n    padding-left: 378px; }\n  .ag-theme-material .ag-rtl .ag-row-group-indent-9 {\n    padding-right: 378px; }\n  .ag-theme-material .ag-ltr .ag-toolpanel-indent-10 {\n    padding-left: 260px; }\n  .ag-theme-material .ag-rtl .ag-toolpanel-indent-10 {\n    padding-right: 260px; }\n  .ag-theme-material .ag-ltr .ag-row-group-indent-10 {\n    padding-left: 420px; }\n  .ag-theme-material .ag-rtl .ag-row-group-indent-10 {\n    padding-right: 420px; }\n  .ag-theme-material .ag-ltr .ag-toolpanel-indent-11 {\n    padding-left: 286px; }\n  .ag-theme-material .ag-rtl .ag-toolpanel-indent-11 {\n    padding-right: 286px; }\n  .ag-theme-material .ag-ltr .ag-row-group-indent-11 {\n    padding-left: 462px; }\n  .ag-theme-material .ag-rtl .ag-row-group-indent-11 {\n    padding-right: 462px; }\n  .ag-theme-material .ag-ltr .ag-toolpanel-indent-12 {\n    padding-left: 312px; }\n  .ag-theme-material .ag-rtl .ag-toolpanel-indent-12 {\n    padding-right: 312px; }\n  .ag-theme-material .ag-ltr .ag-row-group-indent-12 {\n    padding-left: 504px; }\n  .ag-theme-material .ag-rtl .ag-row-group-indent-12 {\n    padding-right: 504px; }\n  .ag-theme-material .ag-ltr .ag-toolpanel-indent-13 {\n    padding-left: 338px; }\n  .ag-theme-material .ag-rtl .ag-toolpanel-indent-13 {\n    padding-right: 338px; }\n  .ag-theme-material .ag-ltr .ag-row-group-indent-13 {\n    padding-left: 546px; }\n  .ag-theme-material .ag-rtl .ag-row-group-indent-13 {\n    padding-right: 546px; }\n  .ag-theme-material .ag-ltr .ag-toolpanel-indent-14 {\n    padding-left: 364px; }\n  .ag-theme-material .ag-rtl .ag-toolpanel-indent-14 {\n    padding-right: 364px; }\n  .ag-theme-material .ag-ltr .ag-row-group-indent-14 {\n    padding-left: 588px; }\n  .ag-theme-material .ag-rtl .ag-row-group-indent-14 {\n    padding-right: 588px; }\n  .ag-theme-material .ag-ltr .ag-toolpanel-indent-15 {\n    padding-left: 390px; }\n  .ag-theme-material .ag-rtl .ag-toolpanel-indent-15 {\n    padding-right: 390px; }\n  .ag-theme-material .ag-ltr .ag-row-group-indent-15 {\n    padding-left: 630px; }\n  .ag-theme-material .ag-rtl .ag-row-group-indent-15 {\n    padding-right: 630px; }\n  .ag-theme-material .ag-ltr .ag-toolpanel-indent-16 {\n    padding-left: 416px; }\n  .ag-theme-material .ag-rtl .ag-toolpanel-indent-16 {\n    padding-right: 416px; }\n  .ag-theme-material .ag-ltr .ag-row-group-indent-16 {\n    padding-left: 672px; }\n  .ag-theme-material .ag-rtl .ag-row-group-indent-16 {\n    padding-right: 672px; }\n  .ag-theme-material .ag-ltr .ag-toolpanel-indent-17 {\n    padding-left: 442px; }\n  .ag-theme-material .ag-rtl .ag-toolpanel-indent-17 {\n    padding-right: 442px; }\n  .ag-theme-material .ag-ltr .ag-row-group-indent-17 {\n    padding-left: 714px; }\n  .ag-theme-material .ag-rtl .ag-row-group-indent-17 {\n    padding-right: 714px; }\n  .ag-theme-material .ag-ltr .ag-toolpanel-indent-18 {\n    padding-left: 468px; }\n  .ag-theme-material .ag-rtl .ag-toolpanel-indent-18 {\n    padding-right: 468px; }\n  .ag-theme-material .ag-ltr .ag-row-group-indent-18 {\n    padding-left: 756px; }\n  .ag-theme-material .ag-rtl .ag-row-group-indent-18 {\n    padding-right: 756px; }\n  .ag-theme-material .ag-ltr .ag-toolpanel-indent-19 {\n    padding-left: 494px; }\n  .ag-theme-material .ag-rtl .ag-toolpanel-indent-19 {\n    padding-right: 494px; }\n  .ag-theme-material .ag-ltr .ag-row-group-indent-19 {\n    padding-left: 798px; }\n  .ag-theme-material .ag-rtl .ag-row-group-indent-19 {\n    padding-right: 798px; }\n  .ag-theme-material .ag-ltr .ag-toolpanel-indent-20 {\n    padding-left: 520px; }\n  .ag-theme-material .ag-rtl .ag-toolpanel-indent-20 {\n    padding-right: 520px; }\n  .ag-theme-material .ag-ltr .ag-row-group-indent-20 {\n    padding-left: 840px; }\n  .ag-theme-material .ag-rtl .ag-row-group-indent-20 {\n    padding-right: 840px; }\n  .ag-theme-material .ag-ltr .ag-toolpanel-indent-21 {\n    padding-left: 546px; }\n  .ag-theme-material .ag-rtl .ag-toolpanel-indent-21 {\n    padding-right: 546px; }\n  .ag-theme-material .ag-ltr .ag-row-group-indent-21 {\n    padding-left: 882px; }\n  .ag-theme-material .ag-rtl .ag-row-group-indent-21 {\n    padding-right: 882px; }\n  .ag-theme-material .ag-ltr .ag-toolpanel-indent-22 {\n    padding-left: 572px; }\n  .ag-theme-material .ag-rtl .ag-toolpanel-indent-22 {\n    padding-right: 572px; }\n  .ag-theme-material .ag-ltr .ag-row-group-indent-22 {\n    padding-left: 924px; }\n  .ag-theme-material .ag-rtl .ag-row-group-indent-22 {\n    padding-right: 924px; }\n  .ag-theme-material .ag-ltr .ag-toolpanel-indent-23 {\n    padding-left: 598px; }\n  .ag-theme-material .ag-rtl .ag-toolpanel-indent-23 {\n    padding-right: 598px; }\n  .ag-theme-material .ag-ltr .ag-row-group-indent-23 {\n    padding-left: 966px; }\n  .ag-theme-material .ag-rtl .ag-row-group-indent-23 {\n    padding-right: 966px; }\n  .ag-theme-material .ag-ltr .ag-toolpanel-indent-24 {\n    padding-left: 624px; }\n  .ag-theme-material .ag-rtl .ag-toolpanel-indent-24 {\n    padding-right: 624px; }\n  .ag-theme-material .ag-ltr .ag-row-group-indent-24 {\n    padding-left: 1008px; }\n  .ag-theme-material .ag-rtl .ag-row-group-indent-24 {\n    padding-right: 1008px; }\n  .ag-theme-material .ag-ltr .ag-toolpanel-indent-25 {\n    padding-left: 650px; }\n  .ag-theme-material .ag-rtl .ag-toolpanel-indent-25 {\n    padding-right: 650px; }\n  .ag-theme-material .ag-ltr .ag-row-group-indent-25 {\n    padding-left: 1050px; }\n  .ag-theme-material .ag-rtl .ag-row-group-indent-25 {\n    padding-right: 1050px; }\n  .ag-theme-material .ag-ltr .ag-toolpanel-indent-26 {\n    padding-left: 676px; }\n  .ag-theme-material .ag-rtl .ag-toolpanel-indent-26 {\n    padding-right: 676px; }\n  .ag-theme-material .ag-ltr .ag-row-group-indent-26 {\n    padding-left: 1092px; }\n  .ag-theme-material .ag-rtl .ag-row-group-indent-26 {\n    padding-right: 1092px; }\n  .ag-theme-material .ag-ltr .ag-toolpanel-indent-27 {\n    padding-left: 702px; }\n  .ag-theme-material .ag-rtl .ag-toolpanel-indent-27 {\n    padding-right: 702px; }\n  .ag-theme-material .ag-ltr .ag-row-group-indent-27 {\n    padding-left: 1134px; }\n  .ag-theme-material .ag-rtl .ag-row-group-indent-27 {\n    padding-right: 1134px; }\n  .ag-theme-material .ag-ltr .ag-toolpanel-indent-28 {\n    padding-left: 728px; }\n  .ag-theme-material .ag-rtl .ag-toolpanel-indent-28 {\n    padding-right: 728px; }\n  .ag-theme-material .ag-ltr .ag-row-group-indent-28 {\n    padding-left: 1176px; }\n  .ag-theme-material .ag-rtl .ag-row-group-indent-28 {\n    padding-right: 1176px; }\n  .ag-theme-material .ag-ltr .ag-toolpanel-indent-29 {\n    padding-left: 754px; }\n  .ag-theme-material .ag-rtl .ag-toolpanel-indent-29 {\n    padding-right: 754px; }\n  .ag-theme-material .ag-ltr .ag-row-group-indent-29 {\n    padding-left: 1218px; }\n  .ag-theme-material .ag-rtl .ag-row-group-indent-29 {\n    padding-right: 1218px; }\n  .ag-theme-material .ag-ltr .ag-toolpanel-indent-30 {\n    padding-left: 780px; }\n  .ag-theme-material .ag-rtl .ag-toolpanel-indent-30 {\n    padding-right: 780px; }\n  .ag-theme-material .ag-ltr .ag-row-group-indent-30 {\n    padding-left: 1260px; }\n  .ag-theme-material .ag-rtl .ag-row-group-indent-30 {\n    padding-right: 1260px; }\n  .ag-theme-material .ag-ltr .ag-toolpanel-indent-31 {\n    padding-left: 806px; }\n  .ag-theme-material .ag-rtl .ag-toolpanel-indent-31 {\n    padding-right: 806px; }\n  .ag-theme-material .ag-ltr .ag-row-group-indent-31 {\n    padding-left: 1302px; }\n  .ag-theme-material .ag-rtl .ag-row-group-indent-31 {\n    padding-right: 1302px; }\n  .ag-theme-material .ag-ltr .ag-toolpanel-indent-32 {\n    padding-left: 832px; }\n  .ag-theme-material .ag-rtl .ag-toolpanel-indent-32 {\n    padding-right: 832px; }\n  .ag-theme-material .ag-ltr .ag-row-group-indent-32 {\n    padding-left: 1344px; }\n  .ag-theme-material .ag-rtl .ag-row-group-indent-32 {\n    padding-right: 1344px; }\n  .ag-theme-material .ag-ltr .ag-toolpanel-indent-33 {\n    padding-left: 858px; }\n  .ag-theme-material .ag-rtl .ag-toolpanel-indent-33 {\n    padding-right: 858px; }\n  .ag-theme-material .ag-ltr .ag-row-group-indent-33 {\n    padding-left: 1386px; }\n  .ag-theme-material .ag-rtl .ag-row-group-indent-33 {\n    padding-right: 1386px; }\n  .ag-theme-material .ag-ltr .ag-toolpanel-indent-34 {\n    padding-left: 884px; }\n  .ag-theme-material .ag-rtl .ag-toolpanel-indent-34 {\n    padding-right: 884px; }\n  .ag-theme-material .ag-ltr .ag-row-group-indent-34 {\n    padding-left: 1428px; }\n  .ag-theme-material .ag-rtl .ag-row-group-indent-34 {\n    padding-right: 1428px; }\n  .ag-theme-material .ag-ltr .ag-toolpanel-indent-35 {\n    padding-left: 910px; }\n  .ag-theme-material .ag-rtl .ag-toolpanel-indent-35 {\n    padding-right: 910px; }\n  .ag-theme-material .ag-ltr .ag-row-group-indent-35 {\n    padding-left: 1470px; }\n  .ag-theme-material .ag-rtl .ag-row-group-indent-35 {\n    padding-right: 1470px; }\n  .ag-theme-material .ag-ltr .ag-toolpanel-indent-36 {\n    padding-left: 936px; }\n  .ag-theme-material .ag-rtl .ag-toolpanel-indent-36 {\n    padding-right: 936px; }\n  .ag-theme-material .ag-ltr .ag-row-group-indent-36 {\n    padding-left: 1512px; }\n  .ag-theme-material .ag-rtl .ag-row-group-indent-36 {\n    padding-right: 1512px; }\n  .ag-theme-material .ag-ltr .ag-toolpanel-indent-37 {\n    padding-left: 962px; }\n  .ag-theme-material .ag-rtl .ag-toolpanel-indent-37 {\n    padding-right: 962px; }\n  .ag-theme-material .ag-ltr .ag-row-group-indent-37 {\n    padding-left: 1554px; }\n  .ag-theme-material .ag-rtl .ag-row-group-indent-37 {\n    padding-right: 1554px; }\n  .ag-theme-material .ag-ltr .ag-toolpanel-indent-38 {\n    padding-left: 988px; }\n  .ag-theme-material .ag-rtl .ag-toolpanel-indent-38 {\n    padding-right: 988px; }\n  .ag-theme-material .ag-ltr .ag-row-group-indent-38 {\n    padding-left: 1596px; }\n  .ag-theme-material .ag-rtl .ag-row-group-indent-38 {\n    padding-right: 1596px; }\n  .ag-theme-material .ag-ltr .ag-toolpanel-indent-39 {\n    padding-left: 1014px; }\n  .ag-theme-material .ag-rtl .ag-toolpanel-indent-39 {\n    padding-right: 1014px; }\n  .ag-theme-material .ag-ltr .ag-row-group-indent-39 {\n    padding-left: 1638px; }\n  .ag-theme-material .ag-rtl .ag-row-group-indent-39 {\n    padding-right: 1638px; }\n  .ag-theme-material .ag-ltr .ag-toolpanel-indent-40 {\n    padding-left: 1040px; }\n  .ag-theme-material .ag-rtl .ag-toolpanel-indent-40 {\n    padding-right: 1040px; }\n  .ag-theme-material .ag-ltr .ag-row-group-indent-40 {\n    padding-left: 1680px; }\n  .ag-theme-material .ag-rtl .ag-row-group-indent-40 {\n    padding-right: 1680px; }\n  .ag-theme-material .ag-ltr .ag-toolpanel-indent-41 {\n    padding-left: 1066px; }\n  .ag-theme-material .ag-rtl .ag-toolpanel-indent-41 {\n    padding-right: 1066px; }\n  .ag-theme-material .ag-ltr .ag-row-group-indent-41 {\n    padding-left: 1722px; }\n  .ag-theme-material .ag-rtl .ag-row-group-indent-41 {\n    padding-right: 1722px; }\n  .ag-theme-material .ag-ltr .ag-toolpanel-indent-42 {\n    padding-left: 1092px; }\n  .ag-theme-material .ag-rtl .ag-toolpanel-indent-42 {\n    padding-right: 1092px; }\n  .ag-theme-material .ag-ltr .ag-row-group-indent-42 {\n    padding-left: 1764px; }\n  .ag-theme-material .ag-rtl .ag-row-group-indent-42 {\n    padding-right: 1764px; }\n  .ag-theme-material .ag-ltr .ag-toolpanel-indent-43 {\n    padding-left: 1118px; }\n  .ag-theme-material .ag-rtl .ag-toolpanel-indent-43 {\n    padding-right: 1118px; }\n  .ag-theme-material .ag-ltr .ag-row-group-indent-43 {\n    padding-left: 1806px; }\n  .ag-theme-material .ag-rtl .ag-row-group-indent-43 {\n    padding-right: 1806px; }\n  .ag-theme-material .ag-ltr .ag-toolpanel-indent-44 {\n    padding-left: 1144px; }\n  .ag-theme-material .ag-rtl .ag-toolpanel-indent-44 {\n    padding-right: 1144px; }\n  .ag-theme-material .ag-ltr .ag-row-group-indent-44 {\n    padding-left: 1848px; }\n  .ag-theme-material .ag-rtl .ag-row-group-indent-44 {\n    padding-right: 1848px; }\n  .ag-theme-material .ag-ltr .ag-toolpanel-indent-45 {\n    padding-left: 1170px; }\n  .ag-theme-material .ag-rtl .ag-toolpanel-indent-45 {\n    padding-right: 1170px; }\n  .ag-theme-material .ag-ltr .ag-row-group-indent-45 {\n    padding-left: 1890px; }\n  .ag-theme-material .ag-rtl .ag-row-group-indent-45 {\n    padding-right: 1890px; }\n  .ag-theme-material .ag-ltr .ag-toolpanel-indent-46 {\n    padding-left: 1196px; }\n  .ag-theme-material .ag-rtl .ag-toolpanel-indent-46 {\n    padding-right: 1196px; }\n  .ag-theme-material .ag-ltr .ag-row-group-indent-46 {\n    padding-left: 1932px; }\n  .ag-theme-material .ag-rtl .ag-row-group-indent-46 {\n    padding-right: 1932px; }\n  .ag-theme-material .ag-ltr .ag-toolpanel-indent-47 {\n    padding-left: 1222px; }\n  .ag-theme-material .ag-rtl .ag-toolpanel-indent-47 {\n    padding-right: 1222px; }\n  .ag-theme-material .ag-ltr .ag-row-group-indent-47 {\n    padding-left: 1974px; }\n  .ag-theme-material .ag-rtl .ag-row-group-indent-47 {\n    padding-right: 1974px; }\n  .ag-theme-material .ag-ltr .ag-toolpanel-indent-48 {\n    padding-left: 1248px; }\n  .ag-theme-material .ag-rtl .ag-toolpanel-indent-48 {\n    padding-right: 1248px; }\n  .ag-theme-material .ag-ltr .ag-row-group-indent-48 {\n    padding-left: 2016px; }\n  .ag-theme-material .ag-rtl .ag-row-group-indent-48 {\n    padding-right: 2016px; }\n  .ag-theme-material .ag-ltr .ag-toolpanel-indent-49 {\n    padding-left: 1274px; }\n  .ag-theme-material .ag-rtl .ag-toolpanel-indent-49 {\n    padding-right: 1274px; }\n  .ag-theme-material .ag-ltr .ag-row-group-indent-49 {\n    padding-left: 2058px; }\n  .ag-theme-material .ag-rtl .ag-row-group-indent-49 {\n    padding-right: 2058px; }\n  .ag-theme-material .ag-cell .ag-icon {\n    display: inline-block;\n    vertical-align: middle; }\n  .ag-theme-material .ag-checkbox, .ag-theme-material .ag-radio-button, .ag-theme-material .ag-toggle-button {\n    display: flex;\n    align-items: center;\n    cursor: default; }\n    .ag-theme-material .ag-checkbox label, .ag-theme-material .ag-radio-button label, .ag-theme-material .ag-toggle-button label {\n      cursor: default; }\n      .ag-theme-material .ag-checkbox label:empty, .ag-theme-material .ag-radio-button label:empty, .ag-theme-material .ag-toggle-button label:empty {\n        margin: 0; }\n    .ag-theme-material .ag-checkbox:not(.ag-label-align-left) label, .ag-theme-material .ag-radio-button:not(.ag-label-align-left) label, .ag-theme-material .ag-toggle-button:not(.ag-label-align-left) label {\n      margin-left: 8px; }\n  .ag-theme-material .ag-cell {\n    -webkit-font-smoothing: subpixel-antialiased; }\n  .ag-theme-material .ag-ltr .ag-row-group-leaf-indent {\n    margin-left: 42px; }\n  .ag-theme-material .ag-ltr .ag-cell {\n    border-right: 1px solid transparent; }\n  .ag-theme-material .ag-ltr .ag-cell:not(.ag-cell-focus).ag-cell-first-right-pinned:not(.ag-cell-range-left),\n  .ag-theme-material .ag-ltr .ag-cell.ag-cell-range-selected:not(.ag-cell-range-single-cell).ag-cell-first-right-pinned:not(.ag-cell-range-left),\n  .ag-theme-material .ag-ltr .ag-root:not(.ag-has-focus) .ag-cell.ag-cell-first-right-pinned:not(.ag-cell-range-left) {\n    border-left: 1px solid #e2e2e2; }\n  .ag-theme-material .ag-ltr .ag-cell:not(.ag-cell-focus).ag-cell-last-left-pinned:not(.ag-cell-range-right),\n  .ag-theme-material .ag-ltr .ag-cell.ag-cell-range-selected:not(.ag-cell-range-single-cell).ag-cell-last-left-pinned:not(.ag-cell-range-right),\n  .ag-theme-material .ag-ltr .ag-root:not(.ag-has-focus) .ag-cell.ag-cell-last-left-pinned:not(.ag-cell-range-right) {\n    border-right: 1px solid #e2e2e2; }\n  .ag-theme-material .ag-rtl .ag-row-group-leaf-indent {\n    margin-right: 42px; }\n  .ag-theme-material .ag-rtl .ag-cell {\n    border-left: 1px solid transparent; }\n  .ag-theme-material .ag-rtl .ag-cell:not(.ag-cell-focus).ag-cell-first-right-pinned:not(.ag-cell-range-left),\n  .ag-theme-material .ag-rtl .ag-cell.ag-cell-range-selected:not(.ag-cell-range-single-cell).ag-cell-first-right-pinned:not(.ag-cell-range-left),\n  .ag-theme-material .ag-rtl .ag-root:not(.ag-has-focus) .ag-cell.ag-cell-first-right-pinned:not(.ag-cell-range-left) {\n    border-left: 1px solid #e2e2e2; }\n  .ag-theme-material .ag-rtl .ag-cell:not(.ag-cell-focus).ag-cell-last-left-pinned:not(.ag-cell-range-right),\n  .ag-theme-material .ag-rtl .ag-cell.ag-cell-range-selected:not(.ag-cell-range-single-cell).ag-cell-last-left-pinned:not(.ag-cell-range-right),\n  .ag-theme-material .ag-rtl .ag-root:not(.ag-has-focus) .ag-cell.ag-cell-last-left-pinned:not(.ag-cell-range-right) {\n    border-right: 1px solid #e2e2e2; }\n  .ag-theme-material .ag-value-change-delta {\n    padding-right: 2px; }\n  .ag-theme-material .ag-value-change-delta-up {\n    color: #43a047; }\n  .ag-theme-material .ag-value-change-delta-down {\n    color: #e53935; }\n  .ag-theme-material .ag-value-change-value {\n    background-color: transparent;\n    border-radius: 1px;\n    padding-left: 1px;\n    padding-right: 1px;\n    transition: background-color 1s; }\n  .ag-theme-material .ag-value-change-value-highlight {\n    background-color: #00acc1;\n    transition: background-color 0.1s; }\n  .ag-theme-material .ag-input-wrapper input:not([type]),\n  .ag-theme-material .ag-input-wrapper input[type=\"text\"],\n  .ag-theme-material .ag-input-wrapper input[type=\"number\"],\n  .ag-theme-material .ag-input-wrapper input[type=\"tel\"],\n  .ag-theme-material .ag-input-wrapper input[type=\"date\"],\n  .ag-theme-material .ag-input-wrapper input[type=\"datetime-local\"] {\n    background: transparent;\n    color: rgba(0, 0, 0, 0.87);\n    font-family: inherit;\n    font-size: inherit;\n    height: 40px;\n    padding-bottom: 8px;\n    border-width: 0;\n    border-bottom: 2px solid #e2e2e2; }\n    .ag-theme-material .ag-input-wrapper input:not([type]):focus,\n    .ag-theme-material .ag-input-wrapper input[type=\"text\"]:focus,\n    .ag-theme-material .ag-input-wrapper input[type=\"number\"]:focus,\n    .ag-theme-material .ag-input-wrapper input[type=\"tel\"]:focus,\n    .ag-theme-material .ag-input-wrapper input[type=\"date\"]:focus,\n    .ag-theme-material .ag-input-wrapper input[type=\"datetime-local\"]:focus {\n      border-bottom: 2px solid #3f51b5;\n      outline: none; }\n    .ag-theme-material .ag-input-wrapper input:not([type])::placeholder,\n    .ag-theme-material .ag-input-wrapper input[type=\"text\"]::placeholder,\n    .ag-theme-material .ag-input-wrapper input[type=\"number\"]::placeholder,\n    .ag-theme-material .ag-input-wrapper input[type=\"tel\"]::placeholder,\n    .ag-theme-material .ag-input-wrapper input[type=\"date\"]::placeholder,\n    .ag-theme-material .ag-input-wrapper input[type=\"datetime-local\"]::placeholder {\n      color: rgba(0, 0, 0, 0.38); }\n    .ag-theme-material .ag-input-wrapper input:not([type]):disabled,\n    .ag-theme-material .ag-input-wrapper input[type=\"text\"]:disabled,\n    .ag-theme-material .ag-input-wrapper input[type=\"number\"]:disabled,\n    .ag-theme-material .ag-input-wrapper input[type=\"tel\"]:disabled,\n    .ag-theme-material .ag-input-wrapper input[type=\"date\"]:disabled,\n    .ag-theme-material .ag-input-wrapper input[type=\"datetime-local\"]:disabled {\n      border-bottom: 1px solid #e2e2e2; }\n    .ag-theme-material .ag-input-wrapper input:not([type]):disabled,\n    .ag-theme-material .ag-input-wrapper input[type=\"text\"]:disabled,\n    .ag-theme-material .ag-input-wrapper input[type=\"number\"]:disabled,\n    .ag-theme-material .ag-input-wrapper input[type=\"tel\"]:disabled,\n    .ag-theme-material .ag-input-wrapper input[type=\"date\"]:disabled,\n    .ag-theme-material .ag-input-wrapper input[type=\"datetime-local\"]:disabled {\n      color: rgba(0, 0, 0, 0.38); }\n  .ag-theme-material .ag-input-wrapper input[type=\"date\"] {\n    flex: 1 1 auto; }\n  .ag-theme-material .ag-input-wrapper input[type=\"range\"] {\n    padding: 0; }\n  .ag-theme-material .ag-input-wrapper textarea {\n    background: transparent;\n    color: rgba(0, 0, 0, 0.87);\n    font-family: inherit;\n    font-size: inherit;\n    height: 40px;\n    padding-bottom: 8px;\n    border-width: 0;\n    border-bottom: 2px solid #e2e2e2; }\n    .ag-theme-material .ag-input-wrapper textarea:focus {\n      border-bottom: 2px solid #3f51b5;\n      outline: none; }\n    .ag-theme-material .ag-input-wrapper textarea::placeholder {\n      color: rgba(0, 0, 0, 0.38); }\n    .ag-theme-material .ag-input-wrapper textarea:disabled {\n      border-bottom: 1px solid #e2e2e2; }\n    .ag-theme-material .ag-input-wrapper textarea:disabled {\n      color: rgba(0, 0, 0, 0.38); }\n  .ag-theme-material .ag-header {\n    background-color: #fff;\n    color: rgba(0, 0, 0, 0.54);\n    font-weight: 700;\n    font-size: 12px;\n    font-family: \"Roboto\", sans-serif;\n    border-bottom: 1px solid #e2e2e2; }\n  .ag-theme-material .ag-pinned-right-header {\n    border-left: 1px solid #e2e2e2; }\n  .ag-theme-material .ag-pinned-left-header {\n    border-right: 1px solid #e2e2e2; }\n  .ag-theme-material .ag-header-row {\n    border: none;\n    height: 56px; }\n  .ag-theme-material .ag-row {\n    border-style: solid;\n    border-color: #e2e2e2;\n    height: 48px;\n    border-width: 0; }\n    .ag-theme-material .ag-row:not(.ag-row-first) {\n      border-width: 1px 0 0; }\n    .ag-theme-material .ag-row.ag-row-last {\n      border-bottom-width: 1px; }\n  .ag-theme-material .ag-horizontal-left-spacer {\n    border-right: 1px solid #e2e2e2; }\n    .ag-theme-material .ag-horizontal-left-spacer.ag-scroller-corner {\n      border-right: none; }\n  .ag-theme-material .ag-horizontal-right-spacer {\n    border-left: 1px solid #e2e2e2; }\n    .ag-theme-material .ag-horizontal-right-spacer.ag-scroller-corner {\n      border-left: none; }\n  .ag-theme-material .ag-row-hover {\n    background-color: #fafafa; }\n  .ag-theme-material .ag-numeric-cell {\n    text-align: right; }\n  .ag-theme-material .ag-header-cell-label .ag-header-icon {\n    margin-left: 8px;\n    opacity: 0.87; }\n  .ag-theme-material .ag-header-cell,\n  .ag-theme-material .ag-header-group-cell {\n    border-style: solid;\n    border-color: #e2e2e2;\n    padding-left: 24px;\n    padding-right: 24px;\n    border-width: 0; }\n    .ag-theme-material .ag-header-cell.ag-header-cell-moving,\n    .ag-theme-material .ag-header-group-cell.ag-header-cell-moving {\n      background-color: #f2f2f2; }\n    .ag-theme-material .ag-header-cell:not(.ag-header-group-cell-no-group),\n    .ag-theme-material .ag-header-group-cell:not(.ag-header-group-cell-no-group) {\n      border-top-width: 1px; }\n  .ag-theme-material .ag-header-row:first-child .ag-header-cell, .ag-theme-material .ag-header-row:first-child .ag-header-group-cell {\n    border-top-width: 0; }\n  .ag-theme-material .ag-header-group-cell:not(.ag-column-resizing) + .ag-header-group-cell:hover, .ag-theme-material .ag-header-group-cell:not(.ag-column-resizing) + .ag-header-group-cell.ag-column-resizing,\n  .ag-theme-material .ag-header-cell:not(.ag-column-resizing) + .ag-header-cell:hover,\n  .ag-theme-material .ag-header-cell:not(.ag-column-resizing) + .ag-header-cell.ag-column-resizing,\n  .ag-theme-material .ag-header-group-cell:first-of-type:hover,\n  .ag-theme-material .ag-header-group-cell:first-of-type.ag-column-resizing,\n  .ag-theme-material .ag-header-cell:first-of-type:hover,\n  .ag-theme-material .ag-header-cell:first-of-type.ag-column-resizing {\n    background-color: #f2f2f2; }\n  .ag-theme-material .ag-header-cell-resize {\n    cursor: col-resize; }\n  .ag-theme-material .ag-header-select-all {\n    margin-right: 24px; }\n  .ag-theme-material .ag-cell {\n    line-height: 46px;\n    padding-left: 24px;\n    padding-right: 24px;\n    border: 1px solid transparent;\n    padding-left: 23px;\n    padding-right: 23px; }\n  .ag-theme-material .ag-row-drag {\n    cursor: move;\n    cursor: grab;\n    min-width: 42px; }\n  .ag-theme-material .ag-row-dragging, .ag-theme-material .ag-row-dragging .ag-row-drag {\n    cursor: move; }\n  .ag-theme-material .ag-column-drag {\n    cursor: move;\n    cursor: grab; }\n  .ag-theme-material .ag-row-dragging {\n    opacity: 0.5; }\n  .ag-theme-material .ag-ltr .ag-has-focus .ag-cell-focus:not(.ag-cell-range-selected),\n  .ag-theme-material .ag-ltr .ag-has-focus .ag-cell-focus.ag-cell-range-single-cell,\n  .ag-theme-material .ag-ltr .ag-cell-focus.ag-cell-range-single-cell.ag-cell-range-handle, .ag-theme-material .ag-rtl .ag-has-focus .ag-cell-focus:not(.ag-cell-range-selected),\n  .ag-theme-material .ag-rtl .ag-has-focus .ag-cell-focus.ag-cell-range-single-cell,\n  .ag-theme-material .ag-rtl .ag-cell-focus.ag-cell-range-single-cell.ag-cell-range-handle {\n    border: 1px solid #3f51b5;\n    outline: initial; }\n  .ag-theme-material .ag-header-cell-resize {\n    width: 16px; }\n  .ag-theme-material .ag-menu {\n    background: #fff;\n    border-radius: 2px;\n    box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12);\n    padding: 8px;\n    padding: 0; }\n    .ag-theme-material .ag-menu .ag-menu-list {\n      cursor: default;\n      margin-bottom: 8px;\n      margin-top: 8px;\n      width: 100%; }\n    .ag-theme-material .ag-menu .ag-menu-option-active {\n      background-color: #fafafa; }\n    .ag-theme-material .ag-menu .ag-menu-option-disabled {\n      opacity: 0.5; }\n    .ag-theme-material .ag-menu .ag-menu-option-text {\n      margin-left: 8px; }\n    .ag-theme-material .ag-menu .ag-menu-option-icon {\n      padding-left: 8px;\n      padding-right: 8px;\n      min-width: 34px; }\n    .ag-theme-material .ag-menu .ag-menu-option-shortcut {\n      padding-left: 16px; }\n    .ag-theme-material .ag-menu .ag-menu-separator {\n      height: 16px; }\n      .ag-theme-material .ag-menu .ag-menu-separator > span {\n        background-image: url(\"data:image/svg+xml,%3Csvg%20width%3D'1'%20height%3D'16px'%20viewBox%3D'0%200%201%2016px'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cline%20x1%3D'0'%20y1%3D'8px'%20x2%3D'1'%20y2%3D'8px'%20stroke-width%3D'1'%20stroke%3D'%23E2E2E2'%2F%3E%3C%2Fsvg%3E\"); }\n    .ag-theme-material .ag-menu .ag-menu-option-popup-pointer {\n      width: 34px;\n      text-align: center; }\n  .ag-theme-material.ag-dnd-ghost {\n    background: #fff;\n    border-radius: 2px;\n    box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12);\n    padding: 8px;\n    border: 1px solid #e2e2e2;\n    color: rgba(0, 0, 0, 0.54);\n    font-weight: 700;\n    font-size: 12px;\n    font-family: \"Roboto\", sans-serif;\n    height: 56px !important;\n    line-height: 56px;\n    margin: 0;\n    padding: 0 16px;\n    transform: translateY(16px); }\n    .ag-theme-material.ag-dnd-ghost span,\n    .ag-theme-material.ag-dnd-ghost div {\n      height: 100%;\n      margin: 0;\n      padding: 0; }\n    .ag-theme-material.ag-dnd-ghost .ag-dnd-ghost-icon {\n      margin-right: 8px;\n      opacity: 0.87; }\n  .ag-theme-material .ag-tab-header {\n    background: #eee;\n    min-width: 220px;\n    width: 100%;\n    display: flex; }\n    .ag-theme-material .ag-tab-header .ag-tab {\n      display: flex;\n      border-bottom: 2px solid transparent;\n      height: 32px;\n      flex: none;\n      align-items: center;\n      justify-content: center;\n      flex: 1 1 auto; }\n  .ag-theme-material .ag-tab-body {\n    padding: 4px 0; }\n    .ag-theme-material .ag-tab-body .ag-menu-list {\n      margin-bottom: 0;\n      margin-top: 0; }\n      .ag-theme-material .ag-tab-body .ag-menu-list > div:first-child > span {\n        padding-top: 0; }\n      .ag-theme-material .ag-tab-body .ag-menu-list > div:last-child > span {\n        padding-bottom: 0; }\n      .ag-theme-material .ag-tab-body .ag-menu-list > div:last-child > .ag-menu-option-popup-pointer {\n        background-position-y: 0; }\n  .ag-theme-material .ag-filter .ag-filter-select, .ag-theme-material .ag-filter .ag-filter-body {\n    margin-bottom: 8px; }\n  .ag-theme-material .ag-filter .ag-filter-body {\n    margin-top: 0; }\n  .ag-theme-material .ag-filter .ag-filter-filter {\n    margin-left: 8px;\n    margin-right: 8px; }\n  .ag-theme-material .ag-filter .ag-filter-select {\n    margin: 8px; }\n  .ag-theme-material .ag-filter input[type=\"radio\"] {\n    margin: 0 3px 0 6px;\n    width: 12px;\n    height: 17px;\n    vertical-align: top; }\n  .ag-theme-material .ag-filter input[type=\"text\"],\n  .ag-theme-material .ag-filter input[type=\"date\"] {\n    padding-left: 8px; }\n  .ag-theme-material .ag-filter .ag-set-filter-list {\n    height: 240px; }\n  .ag-theme-material .ag-filter .ag-set-filter-item {\n    height: 40px; }\n    .ag-theme-material .ag-filter .ag-set-filter-item > div, .ag-theme-material .ag-filter .ag-set-filter-item > span {\n      margin-left: 5px; }\n  .ag-theme-material .ag-filter .ag-filter-header-container {\n    border-bottom: 1px solid #e2e2e2;\n    padding-bottom: 4px; }\n  .ag-theme-material .ag-filter .ag-filter-apply-panel {\n    display: flex;\n    justify-content: flex-end;\n    padding: 8px;\n    padding-top: 16px; }\n    .ag-theme-material .ag-filter .ag-filter-apply-panel button {\n      line-height: 1.5;\n      appearance: none;\n      background-color: transparent;\n      border: 0;\n      color: #3f51b5;\n      font-family: inherit;\n      font-size: inherit;\n      margin: 0;\n      padding: 0;\n      text-transform: uppercase; }\n    .ag-theme-material .ag-filter .ag-filter-apply-panel button + button {\n      margin-left: 16px; }\n  .ag-theme-material .ag-column-select-panel .ag-column-tool-panel-column-group,\n  .ag-theme-material .ag-column-select-panel .ag-column-tool-panel-column {\n    height: 32px; }\n    .ag-theme-material .ag-column-select-panel .ag-column-tool-panel-column-group .ag-column-select-checkbox,\n    .ag-theme-material .ag-column-select-panel .ag-column-tool-panel-column-group .ag-column-tool-panel-column-label,\n    .ag-theme-material .ag-column-select-panel .ag-column-tool-panel-column-group .ag-column-group-icons,\n    .ag-theme-material .ag-column-select-panel .ag-column-tool-panel-column .ag-column-select-checkbox,\n    .ag-theme-material .ag-column-select-panel .ag-column-tool-panel-column .ag-column-tool-panel-column-label,\n    .ag-theme-material .ag-column-select-panel .ag-column-tool-panel-column .ag-column-group-icons {\n      margin-left: 8px;\n      margin-right: 8px; }\n  .ag-theme-material .ag-column-select-panel .ag-primary-cols-list-panel {\n    border-top: 1px solid #e2e2e2;\n    padding-top: 8px; }\n    .ag-theme-material .ag-column-select-panel .ag-primary-cols-list-panel > div {\n      cursor: pointer; }\n  .ag-theme-material .ag-column-select-panel .ag-column-tool-panel-column.ag-toolpanel-add-group-indent {\n    margin-left: 34px; }\n  .ag-theme-material .ag-primary-cols-header-panel {\n    border-top: 1px solid #e2e2e2;\n    height: 56px;\n    align-items: center; }\n    .ag-theme-material .ag-primary-cols-header-panel > div {\n      cursor: pointer;\n      margin: 0 8px; }\n    .ag-theme-material .ag-primary-cols-header-panel .ag-filter-body {\n      margin-left: 8px;\n      margin-right: 8px; }\n  .ag-theme-material .ag-tool-panel-wrapper {\n    border-right: 0; }\n    .ag-theme-material .ag-tool-panel-wrapper .ag-filter-panel {\n      width: 100%; }\n      .ag-theme-material .ag-tool-panel-wrapper .ag-filter-panel .ag-filter-toolpanel-instance {\n        color: rgba(0, 0, 0, 0.54);\n        font-weight: 600;\n        flex: auto;\n        flex-direction: column;\n        flex-wrap: nowrap;\n        display: flex;\n        flex-flow: column nowrap; }\n        .ag-theme-material .ag-tool-panel-wrapper .ag-filter-panel .ag-filter-toolpanel-instance .ag-filter-toolpanel-header {\n          padding: 0 5px; }\n          .ag-theme-material .ag-tool-panel-wrapper .ag-filter-panel .ag-filter-toolpanel-instance .ag-filter-toolpanel-header > div {\n            margin: auto 0; }\n      .ag-theme-material .ag-tool-panel-wrapper .ag-filter-panel .ag-filter-body-wrapper {\n        padding-top: 5px; }\n      .ag-theme-material .ag-tool-panel-wrapper .ag-filter-panel .ag-filter-air {\n        border: 1px solid #e2e2e2;\n        border-left: 0;\n        border-right: 0;\n        padding: 8px 0; }\n    .ag-theme-material .ag-tool-panel-wrapper .ag-pivot-mode-panel {\n      height: 56px;\n      display: flex;\n      flex: none; }\n      .ag-theme-material .ag-tool-panel-wrapper .ag-pivot-mode-panel .ag-pivot-mode-select {\n        display: flex;\n        align-items: center;\n        margin-left: 8px; }\n    .ag-theme-material .ag-tool-panel-wrapper .ag-column-select-panel {\n      border-bottom: 1px solid #e2e2e2;\n      padding-bottom: 7px;\n      padding-top: 0; }\n    .ag-theme-material .ag-tool-panel-wrapper .ag-column-drop {\n      border-bottom: 1px solid #e2e2e2;\n      padding: 8px 0;\n      padding-bottom: 16px; }\n      .ag-theme-material .ag-tool-panel-wrapper .ag-column-drop .ag-column-drop-empty-message {\n        color: rgba(0, 0, 0, 0.38);\n        font-weight: 700;\n        font-size: 12px;\n        font-family: \"Roboto\", sans-serif;\n        padding-left: 34px;\n        padding-right: 8px;\n        margin-top: 8px; }\n      .ag-theme-material .ag-tool-panel-wrapper .ag-column-drop .ag-column-drop-list {\n        cursor: default;\n        margin-top: 8px; }\n      .ag-theme-material .ag-tool-panel-wrapper .ag-column-drop > div:first-child > span:first-child {\n        margin-left: 8px;\n        margin-right: 8px; }\n      .ag-theme-material .ag-tool-panel-wrapper .ag-column-drop:last-child {\n        border-bottom: 0; }\n  .ag-theme-material .ag-numeric-header .ag-header-cell-label .ag-header-icon {\n    margin-left: 0;\n    margin-right: 8px; }\n  .ag-theme-material .ag-paging-panel {\n    border-top: 1px solid #e2e2e2;\n    color: rgba(0, 0, 0, 0.54);\n    height: 56px;\n    padding: 0 24px; }\n    .ag-theme-material .ag-paging-panel > span {\n      margin-left: 32px; }\n  .ag-theme-material .ag-paging-page-summary-panel .ag-icon {\n    width: 18px;\n    height: 18px; }\n  .ag-theme-material .ag-paging-page-summary-panel .ag-paging-button button {\n    cursor: pointer;\n    opacity: 0;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    padding: 0; }\n  .ag-theme-material .ag-paging-page-summary-panel .ag-paging-button.ag-disabled .ag-icon {\n    color: rgba(0, 0, 0, 0.38);\n    opacity: 0.38; }\n  .ag-theme-material .ag-paging-page-summary-panel .ag-paging-button.ag-disabled button {\n    cursor: default; }\n  .ag-theme-material .ag-paging-page-summary-panel span {\n    margin: 0 8px; }\n  .ag-theme-material .ag-row-selected {\n    background-color: #eee; }\n  .ag-theme-material .ag-ltr .ag-cell.ag-cell-range-selected:not(.ag-cell-range-single-cell), .ag-theme-material .ag-rtl .ag-cell.ag-cell-range-selected:not(.ag-cell-range-single-cell) {\n    border: 1px solid transparent; }\n    .ag-theme-material .ag-ltr .ag-cell.ag-cell-range-selected:not(.ag-cell-range-single-cell).ag-cell-range-top, .ag-theme-material .ag-rtl .ag-cell.ag-cell-range-selected:not(.ag-cell-range-single-cell).ag-cell-range-top {\n      border-top-color: #3f51b5; }\n    .ag-theme-material .ag-ltr .ag-cell.ag-cell-range-selected:not(.ag-cell-range-single-cell).ag-cell-range-right, .ag-theme-material .ag-rtl .ag-cell.ag-cell-range-selected:not(.ag-cell-range-single-cell).ag-cell-range-right {\n      border-right-color: #3f51b5; }\n    .ag-theme-material .ag-ltr .ag-cell.ag-cell-range-selected:not(.ag-cell-range-single-cell).ag-cell-range-bottom, .ag-theme-material .ag-rtl .ag-cell.ag-cell-range-selected:not(.ag-cell-range-single-cell).ag-cell-range-bottom {\n      border-bottom-color: #3f51b5; }\n    .ag-theme-material .ag-ltr .ag-cell.ag-cell-range-selected:not(.ag-cell-range-single-cell).ag-cell-range-left, .ag-theme-material .ag-rtl .ag-cell.ag-cell-range-selected:not(.ag-cell-range-single-cell).ag-cell-range-left {\n      border-left-color: #3f51b5; }\n  .ag-theme-material .ag-cell-range-selected:not(.ag-cell-focus) {\n    background-color: rgba(122, 134, 203, 0.1); }\n    .ag-theme-material .ag-cell-range-selected:not(.ag-cell-focus).ag-cell-range-chart {\n      background-color: rgba(0, 88, 255, 0.1); }\n    .ag-theme-material .ag-cell-range-selected:not(.ag-cell-focus).ag-cell-range-chart.ag-cell-range-chart-category {\n      background-color: rgba(0, 255, 132, 0.1); }\n  .ag-theme-material .ag-cell-range-selected-1:not(.ag-cell-focus) {\n    background-color: rgba(122, 134, 203, 0.2); }\n  .ag-theme-material .ag-cell-range-selected-2:not(.ag-cell-focus) {\n    background-color: rgba(122, 134, 203, 0.3); }\n  .ag-theme-material .ag-cell-range-selected-3:not(.ag-cell-focus) {\n    background-color: rgba(122, 134, 203, 0.4); }\n  .ag-theme-material .ag-cell-range-selected-4:not(.ag-cell-focus) {\n    background-color: rgba(122, 134, 203, 0.5); }\n  .ag-theme-material .ag-ltr .ag-selection-fill-top, .ag-theme-material .ag-rtl .ag-selection-fill-top {\n    border-top: 1px dashed #3f51b5; }\n    .ag-theme-material .ag-ltr .ag-selection-fill-top.ag-cell.ag-cell-range-selected, .ag-theme-material .ag-rtl .ag-selection-fill-top.ag-cell.ag-cell-range-selected {\n      border-top: 1px dashed #afafaf; }\n  .ag-theme-material .ag-ltr .ag-selection-fill-right, .ag-theme-material .ag-rtl .ag-selection-fill-right {\n    border-right: 1px dashed #3f51b5; }\n    .ag-theme-material .ag-ltr .ag-selection-fill-right.ag-cell.ag-cell-range-selected, .ag-theme-material .ag-rtl .ag-selection-fill-right.ag-cell.ag-cell-range-selected {\n      border-right: 1px dashed #afafaf; }\n  .ag-theme-material .ag-ltr .ag-selection-fill-bottom, .ag-theme-material .ag-rtl .ag-selection-fill-bottom {\n    border-bottom: 1px dashed #3f51b5; }\n    .ag-theme-material .ag-ltr .ag-selection-fill-bottom.ag-cell.ag-cell-range-selected, .ag-theme-material .ag-rtl .ag-selection-fill-bottom.ag-cell.ag-cell-range-selected {\n      border-bottom: 1px dashed #afafaf; }\n  .ag-theme-material .ag-ltr .ag-selection-fill-left, .ag-theme-material .ag-rtl .ag-selection-fill-left {\n    border-left: 1px dashed #3f51b5; }\n    .ag-theme-material .ag-ltr .ag-selection-fill-left.ag-cell.ag-cell-range-selected, .ag-theme-material .ag-rtl .ag-selection-fill-left.ag-cell.ag-cell-range-selected {\n      border-left: 1px dashed #afafaf; }\n  .ag-theme-material .ag-fill-handle, .ag-theme-material .ag-range-handle {\n    position: absolute;\n    width: 6px;\n    height: 6px;\n    bottom: -1px;\n    right: -1px;\n    background-color: #3f51b5; }\n  .ag-theme-material .ag-fill-handle {\n    cursor: cell; }\n  .ag-theme-material .ag-range-handle {\n    cursor: nwse-resize; }\n  .ag-theme-material .ag-cell.ag-cell-inline-editing {\n    padding: 24px;\n    height: 72px; }\n  .ag-theme-material .ag-cell.ag-cell-inline-editing {\n    background: #fff;\n    border-radius: 2px;\n    box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12);\n    padding: 8px;\n    background-color: #fafafa; }\n  .ag-theme-material .ag-popup-editor {\n    background: #fff;\n    border-radius: 2px;\n    box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12);\n    padding: 8px;\n    background-color: #fafafa;\n    padding: 0; }\n    .ag-theme-material .ag-popup-editor .ag-large-textarea textarea {\n      height: auto;\n      padding: 24px; }\n  .ag-theme-material .ag-virtual-list-container .ag-virtual-list-item {\n    height: 40px; }\n  .ag-theme-material .ag-rich-select {\n    background-color: #fafafa; }\n    .ag-theme-material .ag-rich-select .ag-rich-select-list {\n      width: 200px;\n      height: 312px; }\n    .ag-theme-material .ag-rich-select .ag-rich-select-value {\n      padding: 0 8px 0 24px;\n      height: 48px; }\n    .ag-theme-material .ag-rich-select .ag-virtual-list-item {\n      cursor: default;\n      height: 48px; }\n      .ag-theme-material .ag-rich-select .ag-virtual-list-item:hover {\n        background-color: #fafafa; }\n    .ag-theme-material .ag-rich-select .ag-rich-select-row {\n      padding-left: 24px; }\n    .ag-theme-material .ag-rich-select .ag-rich-select-row-selected {\n      background-color: #eee; }\n  .ag-theme-material .ag-ltr .ag-floating-filter-button {\n    margin-left: 24px; }\n  .ag-theme-material .ag-floating-filter-button button {\n    appearance: none;\n    background: transparent;\n    border: 0;\n    height: 18px;\n    padding: 0;\n    width: 18px; }\n  .ag-theme-material .ag-selection-checkbox:not(.ag-hidden) ~ .ag-cell-value:not(:empty), .ag-theme-material .ag-selection-checkbox:not(.ag-hidden) + .ag-group-value:not(:empty),\n  .ag-theme-material .ag-group-expanded:not(.ag-hidden) ~ .ag-cell-value:not(:empty),\n  .ag-theme-material .ag-group-expanded:not(.ag-hidden) + .ag-group-value:not(:empty),\n  .ag-theme-material .ag-group-contracted:not(.ag-hidden) ~ .ag-cell-value:not(:empty),\n  .ag-theme-material .ag-group-contracted:not(.ag-hidden) + .ag-group-value:not(:empty),\n  .ag-theme-material .ag-group-checkbox:not(.ag-invisible) ~ .ag-cell-value:not(:empty),\n  .ag-theme-material .ag-group-checkbox:not(.ag-invisible) + .ag-group-value:not(:empty) {\n    margin-left: 24px; }\n  .ag-theme-material .ag-selection-checkbox:not(.ag-hidden) ~ .ag-group-checkbox,\n  .ag-theme-material .ag-group-expanded:not(.ag-hidden) ~ .ag-group-checkbox,\n  .ag-theme-material .ag-group-contracted:not(.ag-hidden) ~ .ag-group-checkbox,\n  .ag-theme-material .ag-group-checkbox:not(.ag-invisible) ~ .ag-group-checkbox {\n    margin-left: 24px; }\n  .ag-theme-material .ag-group-child-count {\n    margin-left: 2px; }\n  .ag-theme-material .ag-selection-checkbox span {\n    position: relative; }\n  .ag-theme-material .ag-column-drop-horizontal {\n    background-color: #eee;\n    height: 48px;\n    padding-left: 24px; }\n    .ag-theme-material .ag-column-drop-horizontal .ag-icon-group,\n    .ag-theme-material .ag-column-drop-horizontal .ag-icon-pivot {\n      margin-right: 24px; }\n    .ag-theme-material .ag-column-drop-horizontal .ag-icon-small-left,\n    .ag-theme-material .ag-column-drop-horizontal .ag-icon-small-right {\n      margin: 0 8px;\n      opacity: 0.54; }\n    .ag-theme-material .ag-column-drop-horizontal .ag-column-drop-empty-message {\n      opacity: 0.38; }\n  .ag-theme-material .ag-column-drop-cell {\n    background: #e2e2e2;\n    border-radius: 32px;\n    min-height: 32px;\n    padding: 0 4px; }\n    .ag-theme-material .ag-column-drop-cell .ag-column-drop-cell-text {\n      margin: 0 8px; }\n    .ag-theme-material .ag-column-drop-cell .ag-column-drop-cell-button {\n      min-width: 32px;\n      margin: 0 4px;\n      opacity: 0.54; }\n      .ag-theme-material .ag-column-drop-cell .ag-column-drop-cell-button:hover {\n        opacity: 0.87; }\n    .ag-theme-material .ag-column-drop-cell .ag-column-drag {\n      margin-left: 16px; }\n  .ag-theme-material .ag-column-drop-vertical .ag-column-drop-cell {\n    margin-top: 8px; }\n  .ag-theme-material .ag-select-agg-func-popup {\n    background: #fff;\n    border-radius: 2px;\n    box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12);\n    padding: 8px;\n    background: #fff;\n    height: 140px;\n    padding: 0; }\n    .ag-theme-material .ag-select-agg-func-popup .ag-virtual-list-item {\n      cursor: default;\n      line-height: 40px;\n      padding-left: 16px; }\n  .ag-theme-material .ag-set-filter-list,\n  .ag-theme-material .ag-menu-column-select-wrapper {\n    width: auto; }\n  .ag-theme-material .ag-column-drop-vertical > .ag-column-drop-cell {\n    margin-left: 8px;\n    margin-top: 0; }\n  .ag-theme-material .ag-cell-data-changed {\n    background-color: #00acc1 !important; }\n  .ag-theme-material .ag-cell-data-changed-animation {\n    background-color: transparent;\n    transition: background-color 1s; }\n  .ag-theme-material .ag-stub-cell {\n    padding-left: 24px;\n    padding-top: 8px; }\n    .ag-theme-material .ag-stub-cell .ag-loading-icon {\n      animation-name: spin;\n      animation-duration: 1000ms;\n      animation-iteration-count: infinite;\n      animation-timing-function: linear; }\n\n@keyframes spin {\n  from {\n    transform: rotate(0deg); }\n  to {\n    transform: rotate(360deg); } }\n    .ag-theme-material .ag-stub-cell .ag-loading-text {\n      margin-left: 8px;\n      margin-top: 8px; }\n  .ag-theme-material .ag-floating-top {\n    border-bottom: 1px solid #e2e2e2; }\n  .ag-theme-material .ag-floating-bottom {\n    border-top: 1px solid #e2e2e2; }\n  .ag-theme-material .ag-status-bar {\n    background: #fff;\n    border: 1px solid #e2e2e2;\n    border-top-width: 0;\n    color: rgba(0, 0, 0, 0.38);\n    font-weight: 700;\n    font-size: 12px;\n    font-family: \"Roboto\", sans-serif;\n    padding-right: 32px;\n    padding-left: 32px;\n    line-height: 1.5; }\n  .ag-theme-material .ag-name-value-value {\n    color: rgba(0, 0, 0, 0.87); }\n  .ag-theme-material .ag-status-bar-center {\n    text-align: center; }\n  .ag-theme-material .ag-name-value {\n    margin-left: 8px;\n    margin-right: 8px;\n    padding-top: 16px;\n    padding-bottom: 16px; }\n  .ag-theme-material .ag-details-row {\n    padding: 40px; }\n  .ag-theme-material .ag-overlay-loading-wrapper {\n    background-color: rgba(255, 255, 255, 0.5); }\n  .ag-theme-material .ag-overlay-loading-center {\n    background: #fff;\n    border-radius: 2px;\n    box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12);\n    padding: 8px; }\n  .ag-theme-material .ag-side-bar {\n    background-color: #fafafa;\n    border: 1px solid #e2e2e2;\n    border-left-width: 0;\n    position: relative; }\n    .ag-theme-material .ag-side-bar .ag-side-buttons {\n      padding-top: 32px;\n      background: #fff;\n      width: 22px;\n      position: relative; }\n      .ag-theme-material .ag-side-bar .ag-side-buttons .ag-side-button button {\n        background: transparent;\n        border: 0;\n        color: rgba(0, 0, 0, 0.87);\n        padding: 16px 0 16px 0;\n        width: 100%;\n        margin: 0;\n        min-height: 144px;\n        border-width: 1px 0 1px 0;\n        border-style: solid;\n        border-color: transparent;\n        background-position-y: center;\n        background-position-x: center;\n        background-repeat: no-repeat; }\n      .ag-theme-material .ag-side-bar .ag-side-buttons .ag-selected button {\n        background-color: #fafafa;\n        margin-left: -1px;\n        padding-left: 1px;\n        border-color: #e2e2e2; }\n    .ag-theme-material .ag-side-bar .ag-panel-container {\n      border-right: 1px solid #e2e2e2; }\n    .ag-theme-material .ag-side-bar.full-width .ag-panel-container {\n      border-right: 0; }\n    .ag-theme-material .ag-side-bar .ag-column-drop {\n      min-height: 50px; }\n  .ag-theme-material .ag-primary-cols-filter-wrapper {\n    margin-left: 8px;\n    margin-right: 8px; }\n  .ag-theme-material .ag-group-component {\n    background-color: #fdfdfd;\n    padding: 0px;\n    border: 0 solid #efefef;\n    border-top-width: 1px; }\n    .ag-theme-material .ag-group-component.ag-disabled > .ag-group-component-label .ag-group-component-title, .ag-theme-material .ag-group-component.ag-disabled > .ag-group-component-container {\n      opacity: 0.5; }\n    .ag-theme-material .ag-group-component .ag-group-component-title-bar {\n      background-color: #f0f0f0;\n      height: 18px;\n      font-size: 13px;\n      font-family: \"Roboto\", sans-serif;\n      height: 26px; }\n    .ag-theme-material .ag-group-component:not(.ag-collapsible) > div {\n      margin-left: 0; }\n    .ag-theme-material .ag-group-component:not(.ag-collapsible) > .ag-group-component-title-bar {\n      margin-left: 0;\n      padding: 8px; }\n      .ag-theme-material .ag-group-component:not(.ag-collapsible) > .ag-group-component-title-bar .ag-column-group-icons {\n        display: none; }\n    .ag-theme-material .ag-group-component .ag-group-component-toolbar {\n      background-color: #f7f7f7;\n      padding: 8px;\n      border: 0 solid #e2e2e2; }\n    .ag-theme-material .ag-group-component > .ag-group-component-container {\n      margin-left: 16px;\n      padding: 8px; }\n    .ag-theme-material .ag-group-component .ag-group-item {\n      margin: 4px 0; }\n      .ag-theme-material .ag-group-component .ag-group-item .ag-group-component-title-bar {\n        height: 18px; }\n  .ag-theme-material .ag-labeled label {\n    margin-right: 8px;\n    white-space: nowrap; }\n  .ag-theme-material .ag-labeled.ag-label-align-top label {\n    margin-bottom: 4px; }\n  .ag-theme-material .ag-slider > .ag-wrapper > div:not(:first-of-type), .ag-theme-material .ag-angle-select > .ag-wrapper > div:not(:first-of-type) {\n    margin-left: 16px; }\n  .ag-theme-material .ag-angle-select .ag-angle-select-field .ag-parent-circle {\n    width: 24px;\n    height: 24px;\n    border-radius: 12px;\n    box-shadow: 0 0 2px rgba(0, 0, 0, 0.9);\n    background-color: #ffffff; }\n  .ag-theme-material .ag-angle-select .ag-angle-select-field .ag-child-circle {\n    top: 4px;\n    left: 12px;\n    width: 6px;\n    height: 6px;\n    margin-left: -3px;\n    margin-top: -4px;\n    border-radius: 3px;\n    background-color: #4c4c4c; }\n  .ag-theme-material .ag-toggle-button .ag-input-wrapper {\n    height: 18px;\n    width: 40px;\n    background-color: #fff;\n    border: 1px solid #333;\n    border-radius: 500rem; }\n    .ag-theme-material .ag-toggle-button .ag-input-wrapper .ag-icon {\n      width: 18px;\n      height: 18px;\n      border: 1px solid #333;\n      border-radius: 500rem;\n      right: calc(100% - 18px); }\n  .ag-theme-material .ag-toggle-button.ag-selected .ag-input-wrapper {\n    background-color: #ff4081; }\n    .ag-theme-material .ag-toggle-button.ag-selected .ag-input-wrapper .ag-icon {\n      background: #fff;\n      right: -1px; }\n  .ag-theme-material .ag-color-picker > .ag-wrapper {\n    border: 1px solid #e2e2e2;\n    border-radius: 5px; }\n    .ag-theme-material .ag-color-picker > .ag-wrapper > div {\n      width: 18px;\n      height: 18px; }\n    .ag-theme-material .ag-color-picker > .ag-wrapper button {\n      background-color: #fff; }\n    .ag-theme-material .ag-color-picker > .ag-wrapper button:hover {\n      background-color: #fafafa; }\n  .ag-theme-material .ag-dialog.ag-color-dialog {\n    border-radius: 5px; }\n  .ag-theme-material .ag-color-panel {\n    padding: 8px; }\n    .ag-theme-material .ag-color-panel .ag-spectrum-color {\n      background-color: red;\n      border-radius: 2px; }\n    .ag-theme-material .ag-color-panel .ag-spectrum-tools {\n      padding: 10px; }\n    .ag-theme-material .ag-color-panel .ag-spectrum-sat {\n      background-image: linear-gradient(to right, white, rgba(204, 154, 129, 0)); }\n    .ag-theme-material .ag-color-panel .ag-spectrum-val {\n      background-image: linear-gradient(to top, black, rgba(204, 154, 129, 0)); }\n    .ag-theme-material .ag-color-panel .ag-spectrum-dragger {\n      border-radius: 12px;\n      height: 12px;\n      width: 12px;\n      border: 1px solid white;\n      background: black;\n      box-shadow: 0 0 2px 0px rgba(0, 0, 0, 0.24); }\n    .ag-theme-material .ag-color-panel .ag-spectrum-hue-background {\n      border-radius: 2px; }\n    .ag-theme-material .ag-color-panel .ag-spectrum-alpha-background {\n      border-radius: 2px; }\n    .ag-theme-material .ag-color-panel .ag-hue-alpha {\n      margin-bottom: 10px;\n      height: 11px;\n      border-radius: 2px; }\n    .ag-theme-material .ag-color-panel .ag-spectrum-slider {\n      margin-top: -12px;\n      width: 13px;\n      height: 13px;\n      border-radius: 13px;\n      background-color: #f8f8f8;\n      box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.37); }\n    .ag-theme-material .ag-color-panel .ag-spectrum-text-value {\n      font-weight: bold;\n      line-height: 20px;\n      color: #333; }\n    .ag-theme-material .ag-color-panel .ag-spectrum-text-value:focus {\n      border: 1px solid #0d77e4;\n      padding: 2px; }\n    .ag-theme-material .ag-color-panel .ag-recent-colors > div {\n      margin: 0 3px; }\n      .ag-theme-material .ag-color-panel .ag-recent-colors > div:first-child {\n        margin-left: 0; }\n      .ag-theme-material .ag-color-panel .ag-recent-colors > div:last-child {\n        margin-right: 0; }\n  .ag-theme-material.ag-popup > div:not(.ag-tooltip-custom) {\n    box-shadow: 5px 5px 10px rgba(0, 0, 0, 0.3); }\n  .ag-theme-material .ag-panel {\n    background-color: #fff;\n    border: 1px solid #e2e2e2; }\n    .ag-dragging-range-handle .ag-theme-material .ag-panel.ag-dialog, .ag-dragging-fill-handle .ag-theme-material .ag-panel.ag-dialog {\n      opacity: 0.7;\n      pointer-events: none; }\n    .ag-theme-material .ag-panel .ag-title-bar {\n      background-color: #fff;\n      border-bottom: 1px solid #fcfcfc;\n      color: rgba(0, 0, 0, 0.54);\n      height: 56px;\n      font-size: 12px;\n      font-weight: 700;\n      font-family: \"Roboto\", sans-serif;\n      padding-left: 24px;\n      padding: 5px 10px; }\n      .ag-theme-material .ag-panel .ag-title-bar .ag-title-bar-buttons .ag-button {\n        height: 20px;\n        width: 20px;\n        border-radius: 5px; }\n        .ag-theme-material .ag-panel .ag-title-bar .ag-title-bar-buttons .ag-button .ag-icon {\n          line-height: 20px;\n          font-size: 20px; }\n        .ag-theme-material .ag-panel .ag-title-bar .ag-title-bar-buttons .ag-button:hover, .ag-theme-material .ag-panel .ag-title-bar .ag-title-bar-buttons .ag-button.ag-has-popup {\n          background-color: #e6e6e6; }\n        .ag-theme-material .ag-panel .ag-title-bar .ag-title-bar-buttons .ag-button:not(:last-child) {\n          margin-right: 5px; }\n    .ag-theme-material .ag-panel .ag-message-box .ag-message-box-button-bar {\n      height: 30px;\n      background-color: #fff;\n      padding: 2px; }\n      .ag-theme-material .ag-panel .ag-message-box .ag-message-box-button-bar button {\n        border-radius: 2px; }\n  .ag-theme-material .ag-tooltip {\n    background-color: #535353;\n    color: rgba(0, 0, 0, 0.87);\n    border-radius: 2px;\n    padding: 5px;\n    border-width: 1px;\n    border-style: solid;\n    border-color: #ebebeb;\n    transition: opacity 1s; }\n    .ag-theme-material .ag-tooltip.ag-tooltip-hiding {\n      opacity: 0; }\n  .ag-theme-material .ag-chart .ag-chart-menu {\n    border-radius: 5px;\n    background: #fff; }\n    .ag-theme-material .ag-chart .ag-chart-menu > span:hover {\n      background-color: #e6e6e6; }\n  .ag-theme-material .ag-chart-tabbed-menu .ag-chart-settings .ag-chart-settings-mini-wrapper .ag-group-component-container {\n    margin-left: 0; }\n  .ag-theme-material .ag-chart-tabbed-menu .ag-chart-settings .ag-chart-settings-mini-wrapper .ag-chart-mini-thumbnail {\n    border: 1px solid #e2e2e2;\n    border-radius: 5px;\n    margin: 5px; }\n    .ag-theme-material .ag-chart-tabbed-menu .ag-chart-settings .ag-chart-settings-mini-wrapper .ag-chart-mini-thumbnail:nth-child(2n + 2):not(:last-child) {\n      margin-left: auto;\n      margin-right: auto; }\n    .ag-theme-material .ag-chart-tabbed-menu .ag-chart-settings .ag-chart-settings-mini-wrapper .ag-chart-mini-thumbnail:nth-child(3n + 1) {\n      margin-left: 2px; }\n    .ag-theme-material .ag-chart-tabbed-menu .ag-chart-settings .ag-chart-settings-mini-wrapper .ag-chart-mini-thumbnail:nth-child(3n) {\n      margin-right: 2px; }\n    .ag-theme-material .ag-chart-tabbed-menu .ag-chart-settings .ag-chart-settings-mini-wrapper .ag-chart-mini-thumbnail.ag-selected {\n      border-color: #3f51b5; }\n  .ag-theme-material .ag-chart-tabbed-menu .ag-chart-settings .ag-chart-settings-nav-bar .ag-nav-card-selector .ag-nav-card-item {\n    color: rgba(0, 0, 0, 0.87);\n    font-size: 11px; }\n    .ag-theme-material .ag-chart-tabbed-menu .ag-chart-settings .ag-chart-settings-nav-bar .ag-nav-card-selector .ag-nav-card-item.ag-selected {\n      color: #3f51b5; }\n  .ag-theme-material .ag-chart-tabbed-menu .ag-chart-format .ag-chart-format-wrapper .ag-group-item {\n    margin: 9.6px 0; }\n  .ag-theme-material .ag-icon {\n    /* use !important to prevent issues with browser extensions that change fonts */\n    font-family: \"agGridMaterial\";\n    speak: none;\n    font-size: 18px;\n    color: #333;\n    font-style: normal;\n    font-weight: normal;\n    font-variant: normal;\n    text-transform: none;\n    /* Better Font Rendering =========== */\n    -webkit-font-smoothing: antialiased;\n    -moz-osx-font-smoothing: grayscale; }\n  .ag-theme-material .ag-icon-aggregation:before {\n    content: \"\\E900\"; }\n  .ag-theme-material .ag-icon-arrows:before {\n    content: \"\\E901\"; }\n  .ag-theme-material .ag-icon-asc:before {\n    content: \"\\E902\"; }\n  .ag-theme-material .ag-icon-cancel:before {\n    content: \"\\E903\"; }\n  .ag-theme-material .ag-icon-chart:before {\n    content: \"\\E904\"; }\n  .ag-theme-material .ag-icon-checkbox-checked:before {\n    content: \"\\E905\"; }\n  .ag-theme-material .ag-icon-checkbox-indeterminate:before {\n    content: \"\\E906\"; }\n  .ag-theme-material .ag-icon-checkbox-unchecked:before {\n    content: \"\\E907\"; }\n  .ag-theme-material .ag-icon-color-picker:before {\n    content: \"\\E908\"; }\n  .ag-theme-material .ag-icon-column:before {\n    content: \"\\E909\"; }\n  .ag-theme-material .ag-icon-columns:before {\n    content: \"\\E90A\"; }\n  .ag-theme-material .ag-icon-contracted:before {\n    content: \"\\E90B\"; }\n  .ag-theme-material .ag-icon-copy:before {\n    content: \"\\E90C\"; }\n  .ag-theme-material .ag-icon-cross:before {\n    content: \"\\E90D\"; }\n  .ag-theme-material .ag-icon-cut:before {\n    content: \"\\E90E\"; }\n  .ag-theme-material .ag-icon-data:before {\n    content: \"\\E90F\"; }\n  .ag-theme-material .ag-icon-desc:before {\n    content: \"\\E910\"; }\n  .ag-theme-material .ag-icon-expanded:before {\n    content: \"\\E911\"; }\n  .ag-theme-material .ag-icon-eye-slash:before {\n    content: \"\\E912\"; }\n  .ag-theme-material .ag-icon-eye:before {\n    content: \"\\E913\"; }\n  .ag-theme-material .ag-icon-filter:before {\n    content: \"\\E914\"; }\n  .ag-theme-material .ag-icon-first:before {\n    content: \"\\E915\"; }\n  .ag-theme-material .ag-icon-grip:before {\n    content: \"\\E916\"; }\n  .ag-theme-material .ag-icon-group:before {\n    content: \"\\E917\"; }\n  .ag-theme-material .ag-icon-indeterminate:before {\n    content: \"\\E918\"; }\n  .ag-theme-material .ag-icon-last:before {\n    content: \"\\E919\"; }\n  .ag-theme-material .ag-icon-left:before {\n    content: \"\\E91A\"; }\n  .ag-theme-material .ag-icon-linked:before {\n    content: \"\\E934\"; }\n  .ag-theme-material .ag-icon-loading:before {\n    content: \"\\E91B\"; }\n  .ag-theme-material .ag-icon-maximize:before {\n    content: \"\\E91C\"; }\n  .ag-theme-material .ag-icon-menu:before {\n    content: \"\\E91D\"; }\n  .ag-theme-material .ag-icon-minimize:before {\n    content: \"\\E91E\"; }\n  .ag-theme-material .ag-icon-minus:before {\n    content: \"\\E91F\"; }\n  .ag-theme-material .ag-icon-next:before {\n    content: \"\\E920\"; }\n  .ag-theme-material .ag-icon-none:before {\n    content: \"\\E921\"; }\n  .ag-theme-material .ag-icon-not-allowed:before {\n    content: \"\\E922\"; }\n  .ag-theme-material .ag-icon-paste:before {\n    content: \"\\E923\"; }\n  .ag-theme-material .ag-icon-pin:before {\n    content: \"\\E924\"; }\n  .ag-theme-material .ag-icon-pivot:before {\n    content: \"\\E925\"; }\n  .ag-theme-material .ag-icon-plus:before {\n    content: \"\\E926\"; }\n  .ag-theme-material .ag-icon-previous:before {\n    content: \"\\E927\"; }\n  .ag-theme-material .ag-icon-radio-button-off:before {\n    content: \"\\E928\"; }\n  .ag-theme-material .ag-icon-radio-button-on:before {\n    content: \"\\E929\"; }\n  .ag-theme-material .ag-icon-right:before {\n    content: \"\\E92A\"; }\n  .ag-theme-material .ag-icon-save:before {\n    content: \"\\E92B\"; }\n  .ag-theme-material .ag-icon-small-down:before {\n    content: \"\\E92C\"; }\n  .ag-theme-material .ag-icon-small-left:before {\n    content: \"\\E92D\"; }\n  .ag-theme-material .ag-icon-small-right:before {\n    content: \"\\E92E\"; }\n  .ag-theme-material .ag-icon-small-up:before {\n    content: \"\\E92F\"; }\n  .ag-theme-material .ag-icon-tick:before {\n    content: \"\\E930\"; }\n  .ag-theme-material .ag-icon-tree-closed:before {\n    content: \"\\E931\"; }\n  .ag-theme-material .ag-icon-tree-indeterminate:before {\n    content: \"\\E932\"; }\n  .ag-theme-material .ag-icon-tree-open:before {\n    content: \"\\E933\"; }\n  .ag-theme-material .ag-icon-unlinked:before {\n    content: \"\\E935\"; }\n  .ag-theme-material .ag-icon-checkbox-checked,\n  .ag-theme-material .ag-icon-checkbox-indeterminate,\n  .ag-theme-material .ag-icon-checkbox-unchecked {\n    background-color: transparent;\n    line-height: 18px;\n    border-radius: 3px; }\n    .ag-theme-material .ag-icon-checkbox-checked-readonly,\n    .ag-theme-material .ag-icon-checkbox-indeterminate-readonly,\n    .ag-theme-material .ag-icon-checkbox-unchecked-readonly {\n      cursor: default;\n      opacity: 0.38; }\n  .ag-theme-material .ag-icon-checkbox-checked {\n    color: #ff4081; }\n    .ag-theme-material .ag-icon-checkbox-checked-readonly:before {\n      content: \"\\E905\"; }\n  .ag-theme-material .ag-icon-checkbox-indeterminate-readonly:before {\n    content: \"\\E906\"; }\n  .ag-theme-material .ag-icon-checkbox-unchecked-readonly:before {\n    content: \"\\E907\"; }\n  .ag-theme-material .ag-icon-row-drag:before {\n    content: \"\\E916\"; }\n  .ag-theme-material .ag-right-arrow:before {\n    content: \"\\E91A\"; }\n  .ag-theme-material .ag-icon-radio-button-on {\n    color: #ff4081; }\n  .ag-theme-material .ag-right-arrow:before {\n    content: \"\\E92A\"; }\n  .ag-theme-material .ag-rtl {\n    text-align: right; }\n    .ag-theme-material .ag-rtl .ag-numeric-cell {\n      text-align: left; }\n    .ag-theme-material .ag-rtl .ag-checkbox:not(.ag-label-align-left) label, .ag-theme-material .ag-rtl .ag-radio-button:not(.ag-label-align-left) label, .ag-theme-material .ag-rtl .ag-toggle-button:not(.ag-label-align-left) label {\n      margin-right: 8px;\n      margin-left: 0; }\n    .ag-theme-material .ag-rtl .ag-tool-panel-wrapper .ag-pivot-mode-panel .ag-pivot-mode-select {\n      margin-right: 8px; }\n    .ag-theme-material .ag-rtl .ag-tool-panel-wrapper .ag-column-drop .ag-column-drop-empty-message {\n      padding-left: 8px;\n      padding-right: 32px; }\n    .ag-theme-material .ag-rtl .ag-column-select-panel .ag-column-tool-panel-column-group .ag-column-select-checkbox,\n    .ag-theme-material .ag-rtl .ag-column-select-panel .ag-column-tool-panel-column-group .ag-column-group-icons,\n    .ag-theme-material .ag-rtl .ag-column-select-panel .ag-column-tool-panel-column .ag-column-select-checkbox,\n    .ag-theme-material .ag-rtl .ag-column-select-panel .ag-column-tool-panel-column .ag-column-group-icons {\n      margin-left: 8px;\n      margin-right: 8px; }\n    .ag-theme-material .ag-rtl .ag-column-select-panel .ag-column-tool-panel-column.ag-toolpanel-add-group-indent {\n      margin-left: 0;\n      margin-right: 34px; }\n    .ag-theme-material .ag-rtl .ag-header-select-all {\n      margin-left: 24px;\n      margin-right: 0; }\n    .ag-theme-material .ag-rtl .ag-selection-checkbox,\n    .ag-theme-material .ag-rtl .ag-group-checkbox,\n    .ag-theme-material .ag-rtl .ag-group-expanded,\n    .ag-theme-material .ag-rtl .ag-group-contracted {\n      display: inline-flex; }\n      .ag-theme-material .ag-rtl .ag-selection-checkbox + .ag-cell-value:not(:empty), .ag-theme-material .ag-rtl .ag-selection-checkbox + .ag-group-value:not(:empty),\n      .ag-theme-material .ag-rtl .ag-group-checkbox + .ag-cell-value:not(:empty),\n      .ag-theme-material .ag-rtl .ag-group-checkbox + .ag-group-value:not(:empty),\n      .ag-theme-material .ag-rtl .ag-group-expanded + .ag-cell-value:not(:empty),\n      .ag-theme-material .ag-rtl .ag-group-expanded + .ag-group-value:not(:empty),\n      .ag-theme-material .ag-rtl .ag-group-contracted + .ag-cell-value:not(:empty),\n      .ag-theme-material .ag-rtl .ag-group-contracted + .ag-group-value:not(:empty) {\n        margin-right: 24px;\n        margin-left: initial; }\n      .ag-theme-material .ag-rtl .ag-selection-checkbox + .ag-group-checkbox,\n      .ag-theme-material .ag-rtl .ag-group-checkbox + .ag-group-checkbox,\n      .ag-theme-material .ag-rtl .ag-group-expanded + .ag-group-checkbox,\n      .ag-theme-material .ag-rtl .ag-group-contracted + .ag-group-checkbox {\n        margin-right: 24px;\n        margin-left: initial; }\n    .ag-theme-material .ag-rtl .ag-group-child-count {\n      margin-left: unset;\n      margin-right: 2px; }\n    .ag-theme-material .ag-rtl .ag-column-drop-horizontal {\n      padding-right: 24px; }\n      .ag-theme-material .ag-rtl .ag-column-drop-horizontal .ag-icon-group,\n      .ag-theme-material .ag-rtl .ag-column-drop-horizontal .ag-icon-pivot {\n        margin-left: 24px;\n        margin-right: 0; }\n    .ag-theme-material .ag-rtl .ag-floating-filter-button {\n      margin-right: 24px; }\n    .ag-theme-material .ag-rtl .ag-set-filter-item > div, .ag-theme-material .ag-rtl .ag-set-filter-item > span {\n      margin-left: 0;\n      margin-right: 5px; }\n    .ag-theme-material .ag-rtl .ag-header .ag-header-cell-resize::after {\n      border-left: 1px solid #e2e2e2;\n      border-right: 0; }\n    .ag-theme-material .ag-rtl .ag-side-bar .ag-panel-container {\n      border-left: 1px solid #e2e2e2;\n      border-right: 0; }\n    .ag-theme-material .ag-rtl .ag-side-bar.full-width .ag-panel-container {\n      border-left: 0; }\n  .ag-theme-material .sass-variables::after {\n    content: '{ \"autoSizePadding\": \"24px\", \"headerHeight\": \"56px\", \"groupPaddingSize\": \"42px\", \"footerPaddingAddition\": \"32px\", \"virtualItemHeight\": \"40px\", \"aggFuncPopupHeight\": \"140px\", \"checkboxIndentWidth\": \"26px\", \"leafNodePadding\": \"24px\", \"rowHeight\": \"48px\", \"gridSize\": \"8px\", \"iconSize\": \"18px\" }';\n    display: none; }\n  .ag-theme-material .ag-icon-checkbox-checked,\n  .ag-theme-material .ag-icon-checkbox-checked-readonly,\n  .ag-theme-material .ag-icon-checkbox-unchecked,\n  .ag-theme-material .ag-icon-checkbox-unchecked-readonly,\n  .ag-theme-material .ag-icon-checkbox-indeterminate,\n  .ag-theme-material .ag-icon-checkbox-indeterminate-readonly,\n  .ag-theme-material .ag-icon-radio-button-on,\n  .ag-theme-material .ag-icon-radio-button-off {\n    height: 24px;\n    width: 24px;\n    font-size: 24px;\n    line-height: 24px; }\n  .ag-theme-material .ag-header-cell,\n  .ag-theme-material .ag-header-group-cell {\n    -webkit-transition: background-color 0.5s;\n    transition: background-color 0.5s; }\n  .ag-theme-material .ag-cell-highlight {\n    background-color: #fce4ec !important; }\n  .ag-theme-material .ag-cell-highlight-animation {\n    -webkit-transition: background-color 1s;\n    transition: background-color 1s; }\n  .ag-theme-material .ag-menu-option {\n    height: 38px; }\n  .ag-theme-material .ag-side-bar {\n    border-bottom: 0;\n    border-right: 0;\n    border-top: 0; }\n    .ag-theme-material .ag-side-bar .ag-side-buttons button {\n      border: 0;\n      color: rgba(0, 0, 0, 0.54);\n      font-family: \"Roboto\", sans-serif;\n      font-size: 12px;\n      font-weight: 700;\n      background: transparent; }\n    .ag-theme-material .ag-side-bar .ag-side-buttons .ag-side-button button {\n      background-color: transparent;\n      border-width: 0; }\n    .ag-theme-material .ag-side-bar .ag-side-buttons .ag-selected button {\n      border-left: 2px solid #3f51b5;\n      background-color: #fafafa;\n      margin-left: -2px;\n      padding-left: 1px; }\n    .ag-theme-material .ag-side-bar .ag-filter-toolpanel-body {\n      background-color: #fff; }\n  .ag-theme-material .ag-status-bar {\n    border-top-width: 1px; }\n  .ag-theme-material .ag-rtl .ag-side-bar .ag-side-buttons .ag-selected button {\n    border-left: 0;\n    margin-left: 0;\n    padding-left: 0;\n    border-right: 2px solid #3f51b5;\n    margin-right: -2px;\n    padding-right: 1px; }\n  .ag-theme-material .ag-group-expanded .ag-icon-contracted:empty:before {\n    content: \"\\E933\"; }\n\n"
  },
  {
    "path": "public/backend/vendors/css/tables/datatable/extensions/dataTables.checkboxes.css",
    "content": "table.dataTable.dt-checkboxes-select tbody tr,\ntable.dataTable thead th.dt-checkboxes-select-all,\ntable.dataTable tbody td.dt-checkboxes-cell {\n  cursor: pointer;\n}\n\ntable.dataTable thead th.dt-checkboxes-select-all,\ntable.dataTable tbody td.dt-checkboxes-cell {\n  text-align: center;\n}\n\ndiv.dataTables_wrapper span.select-info,\ndiv.dataTables_wrapper span.select-item {\n  margin-left: 0.5em;\n}\n\n@media screen and (max-width: 640px) {\n  div.dataTables_wrapper span.select-info,\n  div.dataTables_wrapper span.select-item {\n    margin-left: 0;\n    display: block;\n  }\n}\n"
  },
  {
    "path": "public/backend/vendors/css/ui/prism-treeview.css",
    "content": ".treeview-part .entry-line {\n\tposition: relative;\n\ttext-indent: -99em;\n\tdisplay: inline-block;\n\tvertical-align: top;\n\twidth: 1.2em;\n}\n.treeview-part .entry-line:before,\n.treeview-part .line-h:after {\n\tcontent: '';\n\tposition: absolute;\n\ttop: 0;\n\tleft: 50%;\n\twidth: 50%;\n\theight: 100%;\n}\n.treeview-part .line-h:before,\n.treeview-part .line-v:before {\n\tborder-left: 1px solid #ccc;\n}\n.treeview-part .line-v-last:before {\n\theight: 50%;\n\tborder-left: 1px solid #ccc;\n\tborder-bottom: 1px solid #ccc;\n}\n.treeview-part .line-h:after {\n\theight: 50%;\n\tborder-bottom: 1px solid #ccc;\n}\n.treeview-part .entry-name {\n\tposition: relative;\n\tdisplay: inline-block;\n\tvertical-align: top;\n\tpadding: 0 0 0 1.5em;\n}\n.treeview-part .entry-name:before {\n\tcontent: '';\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0.25em;\n\theight: 100%;\n\twidth: 1em;\n\tbackground: no-repeat 50% 50% / contain;\n}\n\n.treeview-part .entry-name.dotfile {\n\topacity: 0.5;\n}\n\n.treeview-part .entry-name:before {\n\tbackground-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIiA+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIxNzkuMiIgd2lkdGg9IjE3OS4yIj4NCgk8Zz4NCgkJPHBhdGggdHJhbnNmb3JtPSJzY2FsZSgwLjEsLTAuMSkgdHJhbnNsYXRlKDAsLTE1MzYpIiBkPSJNMTQ2OCAxMTU2cTI4IC0yOCA0OCAtNzZ0MjAgLTg4di0xMTUycTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMTM0NHEtNDAgMCAtNjggMjh0LTI4IDY4djE2MDBxMCA0MCAyOCA2OHQ2OCAyOGg4OTZxNDAgMCA4OCAtMjB0NzYgLTQ4ek0xMDI0IDE0MDB2LTM3NmgzNzZxLTEwIDI5IC0yMiA0MWwtMzEzIDMxM3EtMTIgMTIgLTQxIDIyek0xNDA4IC0xMjh2MTAyNGgtNDE2cS00MCAwIC02OCAyOHQtMjggNjh2NDE2aC03Njh2LTE1MzZoMTI4MHogIiAvPg0KCTwvZz4NCjwvc3ZnPg==');\n}\n.treeview-part .entry-name.dir:before {\n\tbackground-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIiA+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIxNzkuMiIgd2lkdGg9IjE3OS4yIj4NCgk8Zz4NCgkJPHBhdGggdHJhbnNmb3JtPSJzY2FsZSgwLjEsLTAuMSkgdHJhbnNsYXRlKDAsLTE1MzYpIiBkPSJNMTUzNiAyMjR2NzA0cTAgNDAgLTI4IDY4dC02OCAyOGgtNzA0cS00MCAwIC02OCAyOHQtMjggNjh2NjRxMCA0MCAtMjggNjh0LTY4IDI4aC0zMjBxLTQwIDAgLTY4IC0yOHQtMjggLTY4di05NjBxMCAtNDAgMjggLTY4dDY4IC0yOGgxMjE2cTQwIDAgNjggMjh0MjggNjh6TTE2NjQgOTI4di03MDRxMCAtOTIgLTY2IC0xNTh0LTE1OCAtNjZoLTEyMTZxLTkyIDAgLTE1OCA2NnQtNjYgMTU4djk2MHEwIDkyIDY2IDE1OHQxNTggNjZoMzIwIHE5MiAwIDE1OCAtNjZ0NjYgLTE1OHYtMzJoNjcycTkyIDAgMTU4IC02NnQ2NiAtMTU4eiIgLz4NCgk8L2c+DQo8L3N2Zz4=');\n\n}\n.treeview-part .entry-name.ext-bmp:before,\n.treeview-part .entry-name.ext-eps:before,\n.treeview-part .entry-name.ext-gif:before,\n.treeview-part .entry-name.ext-jpe:before,\n.treeview-part .entry-name.ext-jpg:before,\n.treeview-part .entry-name.ext-jpeg:before,\n.treeview-part .entry-name.ext-png:before,\n.treeview-part .entry-name.ext-svg:before,\n.treeview-part .entry-name.ext-tiff:before {\n\tbackground-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIiA+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIxNzkuMiIgd2lkdGg9IjE3OS4yIj4NCgk8Zz4NCgkJPHBhdGggdHJhbnNmb3JtPSJzY2FsZSgwLjEsLTAuMSkgdHJhbnNsYXRlKDAsLTE1MzYpIiBkPSJNMTQ2OCAxMTU2cTI4IC0yOCA0OCAtNzZ0MjAgLTg4di0xMTUycTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMTM0NHEtNDAgMCAtNjggMjh0LTI4IDY4djE2MDBxMCA0MCAyOCA2OHQ2OCAyOGg4OTZxNDAgMCA4OCAtMjB0NzYgLTQ4ek0xMDI0IDE0MDB2LTM3NmgzNzZxLTEwIDI5IC0yMiA0MWwtMzEzIDMxM3EtMTIgMTIgLTQxIDIyek0xNDA4IC0xMjh2MTAyNGgtNDE2cS00MCAwIC02OCAyOHQtMjggNjh2NDE2aC03Njh2LTE1MzZoMTI4MHogTTEyODAgMzIwdi0zMjBoLTEwMjR2MTkybDE5MiAxOTJsMTI4IC0xMjhsMzg0IDM4NHpNNDQ4IDUxMnEtODAgMCAtMTM2IDU2dC01NiAxMzZ0NTYgMTM2dDEzNiA1NnQxMzYgLTU2dDU2IC0xMzZ0LTU2IC0xMzZ0LTEzNiAtNTZ6IiAvPg0KCTwvZz4NCjwvc3ZnPg==');\n}\n.treeview-part .entry-name.ext-cfg:before,\n.treeview-part .entry-name.ext-conf:before,\n.treeview-part .entry-name.ext-config:before,\n.treeview-part .entry-name.ext-csv:before,\n.treeview-part .entry-name.ext-ini:before,\n.treeview-part .entry-name.ext-log:before,\n.treeview-part .entry-name.ext-md:before,\n.treeview-part .entry-name.ext-nfo:before,\n.treeview-part .entry-name.ext-txt:before {\n\tbackground-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIiA+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIxNzkuMiIgd2lkdGg9IjE3OS4yIj4NCgk8Zz4NCgkJPHBhdGggdHJhbnNmb3JtPSJzY2FsZSgwLjEsLTAuMSkgdHJhbnNsYXRlKDAsLTE1MzYpIiBkPSJNMTQ2OCAxMTU2cTI4IC0yOCA0OCAtNzZ0MjAgLTg4di0xMTUycTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMTM0NHEtNDAgMCAtNjggMjh0LTI4IDY4djE2MDBxMCA0MCAyOCA2OHQ2OCAyOGg4OTZxNDAgMCA4OCAtMjB0NzYgLTQ4ek0xMDI0IDE0MDB2LTM3NmgzNzZxLTEwIDI5IC0yMiA0MWwtMzEzIDMxM3EtMTIgMTIgLTQxIDIyek0xNDA4IC0xMjh2MTAyNGgtNDE2cS00MCAwIC02OCAyOHQtMjggNjh2NDE2aC03Njh2LTE1MzZoMTI4MHogTTM4NCA3MzZxMCAxNCA5IDIzdDIzIDloNzA0cTE0IDAgMjMgLTl0OSAtMjN2LTY0cTAgLTE0IC05IC0yM3QtMjMgLTloLTcwNHEtMTQgMCAtMjMgOXQtOSAyM3Y2NHpNMTEyMCA1MTJxMTQgMCAyMyAtOXQ5IC0yM3YtNjRxMCAtMTQgLTkgLTIzdC0yMyAtOWgtNzA0cS0xNCAwIC0yMyA5dC05IDIzdjY0cTAgMTQgOSAyM3QyMyA5aDcwNHpNMTEyMCAyNTZxMTQgMCAyMyAtOXQ5IC0yM3YtNjRxMCAtMTQgLTkgLTIzdC0yMyAtOWgtNzA0IHEtMTQgMCAtMjMgOXQtOSAyM3Y2NHEwIDE0IDkgMjN0MjMgOWg3MDR6IiAvPg0KCTwvZz4NCjwvc3ZnPg==');\n}\n.treeview-part .entry-name.ext-asp:before,\n.treeview-part .entry-name.ext-aspx:before,\n.treeview-part .entry-name.ext-c:before,\n.treeview-part .entry-name.ext-cc:before,\n.treeview-part .entry-name.ext-cpp:before,\n.treeview-part .entry-name.ext-cs:before,\n.treeview-part .entry-name.ext-css:before,\n.treeview-part .entry-name.ext-h:before,\n.treeview-part .entry-name.ext-hh:before,\n.treeview-part .entry-name.ext-htm:before,\n.treeview-part .entry-name.ext-html:before,\n.treeview-part .entry-name.ext-jav:before,\n.treeview-part .entry-name.ext-java:before,\n.treeview-part .entry-name.ext-js:before,\n.treeview-part .entry-name.ext-php:before,\n.treeview-part .entry-name.ext-rb:before,\n.treeview-part .entry-name.ext-xml:before {\n\tbackground-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIiA+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIxNzkuMiIgd2lkdGg9IjE3OS4yIj4NCgk8Zz4NCgkJPHBhdGggdHJhbnNmb3JtPSJzY2FsZSgwLjEsLTAuMSkgdHJhbnNsYXRlKDAsLTE1MzYpIiBkPSJNMTQ2OCAxMTU2cTI4IC0yOCA0OCAtNzZ0MjAgLTg4di0xMTUycTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMTM0NHEtNDAgMCAtNjggMjh0LTI4IDY4djE2MDBxMCA0MCAyOCA2OHQ2OCAyOGg4OTZxNDAgMCA4OCAtMjB0NzYgLTQ4ek0xMDI0IDE0MDB2LTM3NmgzNzZxLTEwIDI5IC0yMiA0MWwtMzEzIDMxM3EtMTIgMTIgLTQxIDIyek0xNDA4IC0xMjh2MTAyNGgtNDE2cS00MCAwIC02OCAyOHQtMjggNjh2NDE2aC03Njh2LTE1MzZoMTI4MHogTTQ4MCA3NjhxOCAxMSAyMSAxMi41dDI0IC02LjVsNTEgLTM4cTExIC04IDEyLjUgLTIxdC02LjUgLTI0bC0xODIgLTI0M2wxODIgLTI0M3E4IC0xMSA2LjUgLTI0dC0xMi41IC0yMWwtNTEgLTM4cS0xMSAtOCAtMjQgLTYuNXQtMjEgMTIuNWwtMjI2IDMwMXEtMTQgMTkgMCAzOHpNMTI4MiA0NjdxMTQgLTE5IDAgLTM4bC0yMjYgLTMwMXEtOCAtMTEgLTIxIC0xMi41dC0yNCA2LjVsLTUxIDM4cS0xMSA4IC0xMi41IDIxdDYuNSAyNGwxODIgMjQzIGwtMTgyIDI0M3EtOCAxMSAtNi41IDI0dDEyLjUgMjFsNTEgMzhxMTEgOCAyNCA2LjV0MjEgLTEyLjV6TTY2MiA2cS0xMyAyIC0yMC41IDEzdC01LjUgMjRsMTM4IDgzMXEyIDEzIDEzIDIwLjV0MjQgNS41bDYzIC0xMHExMyAtMiAyMC41IC0xM3Q1LjUgLTI0bC0xMzggLTgzMXEtMiAtMTMgLTEzIC0yMC41dC0yNCAtNS41eiIgLz4NCgk8L2c+DQo8L3N2Zz4=');\n}\n.treeview-part .entry-name.ext-7z:before,\n.treeview-part .entry-name.ext-bz:before,\n.treeview-part .entry-name.ext-bz2:before,\n.treeview-part .entry-name.ext-gz:before,\n.treeview-part .entry-name.ext-rar:before,\n.treeview-part .entry-name.ext-tar:before,\n.treeview-part .entry-name.ext-tgz:before,\n.treeview-part .entry-name.ext-zip:before {\n\tbackground-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIiA+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIxNzkuMiIgd2lkdGg9IjE3OS4yIj4NCgk8Zz4NCgkJPHBhdGggdHJhbnNmb3JtPSJzY2FsZSgwLjEsLTAuMSkgdHJhbnNsYXRlKDAsLTE1MzYpIiBkPSJNNjQwIDExNTJ2MTI4aC0xMjh2LTEyOGgxMjh6TTc2OCAxMDI0djEyOGgtMTI4di0xMjhoMTI4ek02NDAgODk2djEyOGgtMTI4di0xMjhoMTI4ek03NjggNzY4djEyOGgtMTI4di0xMjhoMTI4ek0xNDY4IDExNTZxMjggLTI4IDQ4IC03NnQyMCAtODh2LTExNTJxMCAtNDAgLTI4IC02OHQtNjggLTI4aC0xMzQ0cS00MCAwIC02OCAyOHQtMjggNjh2MTYwMHEwIDQwIDI4IDY4dDY4IDI4aDg5NnE0MCAwIDg4IC0yMHQ3NiAtNDh6TTEwMjQgMTQwMCB2LTM3NmgzNzZxLTEwIDI5IC0yMiA0MWwtMzEzIDMxM3EtMTIgMTIgLTQxIDIyek0xNDA4IC0xMjh2MTAyNGgtNDE2cS00MCAwIC02OCAyOHQtMjggNjh2NDE2aC0xMjh2LTEyOGgtMTI4djEyOGgtNTEydi0xNTM2aDEyODB6TTc4MSA1OTNsMTA3IC0zNDlxOCAtMjcgOCAtNTJxMCAtODMgLTcyLjUgLTEzNy41dC0xODMuNSAtNTQuNXQtMTgzLjUgNTQuNXQtNzIuNSAxMzcuNXEwIDI1IDggNTJxMjEgNjMgMTIwIDM5NnYxMjhoMTI4di0xMjhoNzkgcTIyIDAgMzkgLTEzdDIzIC0zNHpNNjQwIDEyOHE1MyAwIDkwLjUgMTl0MzcuNSA0NXQtMzcuNSA0NXQtOTAuNSAxOXQtOTAuNSAtMTl0LTM3LjUgLTQ1dDM3LjUgLTQ1dDkwLjUgLTE5eiIgLz4NCgk8L2c+DQo8L3N2Zz4=');\n}\n.treeview-part .entry-name.ext-aac:before,\n.treeview-part .entry-name.ext-au:before,\n.treeview-part .entry-name.ext-cda:before,\n.treeview-part .entry-name.ext-flac:before,\n.treeview-part .entry-name.ext-mp3:before,\n.treeview-part .entry-name.ext-oga:before,\n.treeview-part .entry-name.ext-ogg:before,\n.treeview-part .entry-name.ext-wav:before,\n.treeview-part .entry-name.ext-wma:before {\n\tbackground-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIiA+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIxNzkuMiIgd2lkdGg9IjE3OS4yIj4NCgk8Zz4NCgkJPHBhdGggdHJhbnNmb3JtPSJzY2FsZSgwLjEsLTAuMSkgdHJhbnNsYXRlKDAsLTE1MzYpIiBkPSJNMTQ2OCAxMTU2cTI4IC0yOCA0OCAtNzZ0MjAgLTg4di0xMTUycTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMTM0NHEtNDAgMCAtNjggMjh0LTI4IDY4djE2MDBxMCA0MCAyOCA2OHQ2OCAyOGg4OTZxNDAgMCA4OCAtMjB0NzYgLTQ4ek0xMDI0IDE0MDB2LTM3NmgzNzZxLTEwIDI5IC0yMiA0MWwtMzEzIDMxM3EtMTIgMTIgLTQxIDIyek0xNDA4IC0xMjh2MTAyNGgtNDE2cS00MCAwIC02OCAyOHQtMjggNjh2NDE2aC03Njh2LTE1MzZoMTI4MHogTTYyMCA2ODZxMjAgLTggMjAgLTMwdi01NDRxMCAtMjIgLTIwIC0zMHEtOCAtMiAtMTIgLTJxLTEyIDAgLTIzIDlsLTE2NiAxNjdoLTEzMXEtMTQgMCAtMjMgOXQtOSAyM3YxOTJxMCAxNCA5IDIzdDIzIDloMTMxbDE2NiAxNjdxMTYgMTUgMzUgN3pNMTAzNyAtM3EzMSAwIDUwIDI0cTEyOSAxNTkgMTI5IDM2M3QtMTI5IDM2M3EtMTYgMjEgLTQzIDI0dC00NyAtMTRxLTIxIC0xNyAtMjMuNSAtNDMuNXQxNC41IC00Ny41IHExMDAgLTEyMyAxMDAgLTI4MnQtMTAwIC0yODJxLTE3IC0yMSAtMTQuNSAtNDcuNXQyMy41IC00Mi41cTE4IC0xNSA0MCAtMTV6TTgyNiAxNDVxMjcgMCA0NyAyMHE4NyA5MyA4NyAyMTl0LTg3IDIxOXEtMTggMTkgLTQ1IDIwdC00NiAtMTd0LTIwIC00NC41dDE4IC00Ni41cTUyIC01NyA1MiAtMTMxdC01MiAtMTMxcS0xOSAtMjAgLTE4IC00Ni41dDIwIC00NC41cTIwIC0xNyA0NCAtMTd6IiAvPg0KCTwvZz4NCjwvc3ZnPg==');\n}\n.treeview-part .entry-name.ext-avi:before,\n.treeview-part .entry-name.ext-flv:before,\n.treeview-part .entry-name.ext-mkv:before,\n.treeview-part .entry-name.ext-mov:before,\n.treeview-part .entry-name.ext-mp4:before,\n.treeview-part .entry-name.ext-mpeg:before,\n.treeview-part .entry-name.ext-mpg:before,\n.treeview-part .entry-name.ext-ogv:before,\n.treeview-part .entry-name.ext-webm:before {\n\tbackground-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIiA+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIxNzkuMiIgd2lkdGg9IjE3OS4yIj4NCgk8Zz4NCgkJPHBhdGggdHJhbnNmb3JtPSJzY2FsZSgwLjEsLTAuMSkgdHJhbnNsYXRlKDAsLTE1MzYpIiBkPSJNMTQ2OCAxMTU2cTI4IC0yOCA0OCAtNzZ0MjAgLTg4di0xMTUycTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMTM0NHEtNDAgMCAtNjggMjh0LTI4IDY4djE2MDBxMCA0MCAyOCA2OHQ2OCAyOGg4OTZxNDAgMCA4OCAtMjB0NzYgLTQ4ek0xMDI0IDE0MDB2LTM3NmgzNzZxLTEwIDI5IC0yMiA0MWwtMzEzIDMxM3EtMTIgMTIgLTQxIDIyek0xNDA4IC0xMjh2MTAyNGgtNDE2cS00MCAwIC02OCAyOHQtMjggNjh2NDE2aC03Njh2LTE1MzZoMTI4MHogTTc2OCA3NjhxNTIgMCA5MCAtMzh0MzggLTkwdi0zODRxMCAtNTIgLTM4IC05MHQtOTAgLTM4aC0zODRxLTUyIDAgLTkwIDM4dC0zOCA5MHYzODRxMCA1MiAzOCA5MHQ5MCAzOGgzODR6TTEyNjAgNzY2cTIwIC04IDIwIC0zMHYtNTc2cTAgLTIyIC0yMCAtMzBxLTggLTIgLTEyIC0ycS0xNCAwIC0yMyA5bC0yNjUgMjY2djkwbDI2NSAyNjZxOSA5IDIzIDlxNCAwIDEyIC0yeiIgLz4NCgk8L2c+DQo8L3N2Zz4=');\n}\n.treeview-part .entry-name.ext-pdf:before {\n\tbackground-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIiA+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIxNzkuMiIgd2lkdGg9IjE3OS4yIj4NCgk8Zz4NCgkJPHBhdGggdHJhbnNmb3JtPSJzY2FsZSgwLjEsLTAuMSkgdHJhbnNsYXRlKDAsLTE1MzYpIiBkPSJNMTQ2OCAxMTU2cTI4IC0yOCA0OCAtNzZ0MjAgLTg4di0xMTUycTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMTM0NHEtNDAgMCAtNjggMjh0LTI4IDY4djE2MDBxMCA0MCAyOCA2OHQ2OCAyOGg4OTZxNDAgMCA4OCAtMjB0NzYgLTQ4ek0xMDI0IDE0MDB2LTM3NmgzNzZxLTEwIDI5IC0yMiA0MWwtMzEzIDMxM3EtMTIgMTIgLTQxIDIyek0xNDA4IC0xMjh2MTAyNGgtNDE2cS00MCAwIC02OCAyOHQtMjggNjh2NDE2aC03Njh2LTE1MzZoMTI4MHogTTg5NCA0NjVxMzMgLTI2IDg0IC01NnE1OSA3IDExNyA3cTE0NyAwIDE3NyAtNDlxMTYgLTIyIDIgLTUycTAgLTEgLTEgLTJsLTIgLTJ2LTFxLTYgLTM4IC03MSAtMzhxLTQ4IDAgLTExNSAyMHQtMTMwIDUzcS0yMjEgLTI0IC0zOTIgLTgzcS0xNTMgLTI2MiAtMjQyIC0yNjJxLTE1IDAgLTI4IDdsLTI0IDEycS0xIDEgLTYgNXEtMTAgMTAgLTYgMzZxOSA0MCA1NiA5MS41dDEzMiA5Ni41cTE0IDkgMjMgLTZxMiAtMiAyIC00cTUyIDg1IDEwNyAxOTcgcTY4IDEzNiAxMDQgMjYycS0yNCA4MiAtMzAuNSAxNTkuNXQ2LjUgMTI3LjVxMTEgNDAgNDIgNDBoMjFoMXEyMyAwIDM1IC0xNXExOCAtMjEgOSAtNjhxLTIgLTYgLTQgLThxMSAtMyAxIC04di0zMHEtMiAtMTIzIC0xNCAtMTkycTU1IC0xNjQgMTQ2IC0yMzh6TTMxOCA1NHE1MiAyNCAxMzcgMTU4cS01MSAtNDAgLTg3LjUgLTg0dC00OS41IC03NHpNNzE2IDk3NHEtMTUgLTQyIC0yIC0xMzJxMSA3IDcgNDRxMCAzIDcgNDNxMSA0IDQgOCBxLTEgMSAtMSAydC0wLjUgMS41dC0wLjUgMS41cS0xIDIyIC0xMyAzNnEwIC0xIC0xIC0ydi0yek01OTIgMzEzcTEzNSA1NCAyODQgODFxLTIgMSAtMTMgOS41dC0xNiAxMy41cS03NiA2NyAtMTI3IDE3NnEtMjcgLTg2IC04MyAtMTk3cS0zMCAtNTYgLTQ1IC04M3pNMTIzOCAzMjlxLTI0IDI0IC0xNDAgMjRxNzYgLTI4IDEyNCAtMjhxMTQgMCAxOCAxcTAgMSAtMiAzeiIgLz4NCgk8L2c+DQo8L3N2Zz4=');\n}\n.treeview-part .entry-name.ext-xls:before,\n.treeview-part .entry-name.ext-xlsx:before {\n\tbackground-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIiA+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIxNzkuMiIgd2lkdGg9IjE3OS4yIj4NCgk8Zz4NCgkJPHBhdGggdHJhbnNmb3JtPSJzY2FsZSgwLjEsLTAuMSkgdHJhbnNsYXRlKDAsLTE1MzYpIiBkPSJNMTQ2OCAxMTU2cTI4IC0yOCA0OCAtNzZ0MjAgLTg4di0xMTUycTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMTM0NHEtNDAgMCAtNjggMjh0LTI4IDY4djE2MDBxMCA0MCAyOCA2OHQ2OCAyOGg4OTZxNDAgMCA4OCAtMjB0NzYgLTQ4ek0xMDI0IDE0MDB2LTM3NmgzNzZxLTEwIDI5IC0yMiA0MWwtMzEzIDMxM3EtMTIgMTIgLTQxIDIyek0xNDA4IC0xMjh2MTAyNGgtNDE2cS00MCAwIC02OCAyOHQtMjggNjh2NDE2aC03Njh2LTE1MzZoMTI4MHogTTQyOSAxMDZ2LTEwNmgyODF2MTA2aC03NWwxMDMgMTYxcTUgNyAxMCAxNi41dDcuNSAxMy41dDMuNSA0aDJxMSAtNCA1IC0xMHEyIC00IDQuNSAtNy41dDYgLTh0Ni41IC04LjVsMTA3IC0xNjFoLTc2di0xMDZoMjkxdjEwNmgtNjhsLTE5MiAyNzNsMTk1IDI4Mmg2N3YxMDdoLTI3OXYtMTA3aDc0bC0xMDMgLTE1OXEtNCAtNyAtMTAgLTE2LjV0LTkgLTEzLjVsLTIgLTNoLTJxLTEgNCAtNSAxMHEtNiAxMSAtMTcgMjNsLTEwNiAxNTloNzZ2MTA3IGgtMjkwdi0xMDdoNjhsMTg5IC0yNzJsLTE5NCAtMjgzaC02OHoiIC8+DQoJPC9nPg0KPC9zdmc+');\n}\n.treeview-part .entry-name.ext-doc:before,\n.treeview-part .entry-name.ext-docm:before,\n.treeview-part .entry-name.ext-docx:before {\n\tbackground-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIiA+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIxNzkuMiIgd2lkdGg9IjE3OS4yIj4NCgk8Zz4NCgkJPHBhdGggdHJhbnNmb3JtPSJzY2FsZSgwLjEsLTAuMSkgdHJhbnNsYXRlKDAsLTE1MzYpIiBkPSJNMTQ2OCAxMTU2cTI4IC0yOCA0OCAtNzZ0MjAgLTg4di0xMTUycTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMTM0NHEtNDAgMCAtNjggMjh0LTI4IDY4djE2MDBxMCA0MCAyOCA2OHQ2OCAyOGg4OTZxNDAgMCA4OCAtMjB0NzYgLTQ4ek0xMDI0IDE0MDB2LTM3NmgzNzZxLTEwIDI5IC0yMiA0MWwtMzEzIDMxM3EtMTIgMTIgLTQxIDIyek0xNDA4IC0xMjh2MTAyNGgtNDE2cS00MCAwIC02OCAyOHQtMjggNjh2NDE2aC03Njh2LTE1MzZoMTI4MHogTTIzMyA3Njh2LTEwN2g3MGwxNjQgLTY2MWgxNTlsMTI4IDQ4NXE3IDIwIDEwIDQ2cTIgMTYgMiAyNGg0bDMgLTI0cTEgLTMgMy41IC0yMHQ1LjUgLTI2bDEyOCAtNDg1aDE1OWwxNjQgNjYxaDcwdjEwN2gtMzAwdi0xMDdoOTBsLTk5IC00MzhxLTUgLTIwIC03IC00NmwtMiAtMjFoLTRsLTMgMjFxLTEgNSAtNCAyMXQtNSAyNWwtMTQ0IDU0NWgtMTE0bC0xNDQgLTU0NXEtMiAtOSAtNC41IC0yNC41dC0zLjUgLTIxLjVsLTQgLTIxaC00bC0yIDIxIHEtMiAyNiAtNyA0NmwtOTkgNDM4aDkwdjEwN2gtMzAweiIgLz4NCgk8L2c+DQo8L3N2Zz4=');\n}\n.treeview-part .entry-name.ext-pps:before,\n.treeview-part .entry-name.ext-ppt:before,\n.treeview-part .entry-name.ext-pptx:before {\n\tbackground-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIiA+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgaGVpZ2h0PSIxNzkuMiIgd2lkdGg9IjE3OS4yIj4NCgk8Zz4NCgkJPHBhdGggdHJhbnNmb3JtPSJzY2FsZSgwLjEsLTAuMSkgdHJhbnNsYXRlKDAsLTE1MzYpIiBkPSJNMTQ2OCAxMTU2cTI4IC0yOCA0OCAtNzZ0MjAgLTg4di0xMTUycTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMTM0NHEtNDAgMCAtNjggMjh0LTI4IDY4djE2MDBxMCA0MCAyOCA2OHQ2OCAyOGg4OTZxNDAgMCA4OCAtMjB0NzYgLTQ4ek0xMDI0IDE0MDB2LTM3NmgzNzZxLTEwIDI5IC0yMiA0MWwtMzEzIDMxM3EtMTIgMTIgLTQxIDIyek0xNDA4IC0xMjh2MTAyNGgtNDE2cS00MCAwIC02OCAyOHQtMjggNjh2NDE2aC03Njh2LTE1MzZoMTI4MHogTTQxNiAxMDZ2LTEwNmgzMjd2MTA2aC05M3YxNjdoMTM3cTc2IDAgMTE4IDE1cTY3IDIzIDEwNi41IDg3dDM5LjUgMTQ2cTAgODEgLTM3IDE0MXQtMTAwIDg3cS00OCAxOSAtMTMwIDE5aC0zNjh2LTEwN2g5MnYtNTU1aC05MnpNNzY5IDM4NmgtMTE5djI2OGgxMjBxNTIgMCA4MyAtMThxNTYgLTMzIDU2IC0xMTVxMCAtODkgLTYyIC0xMjBxLTMxIC0xNSAtNzggLTE1eiIgLz4NCgk8L2c+DQo8L3N2Zz4=');\n}"
  },
  {
    "path": "public/backend/vendors/js/charts/apexcharts.js",
    "content": "/*!\n * ApexCharts v3.8.6\n * (c) 2018-2019 Juned Chhipa\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 = global || self, global.ApexCharts = factory());\n}(this, function () { 'use strict';\n\n  function _typeof(obj) {\n    if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n      _typeof = function (obj) {\n        return typeof obj;\n      };\n    } else {\n      _typeof = function (obj) {\n        return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n      };\n    }\n\n    return _typeof(obj);\n  }\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  function _defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  function _createClass(Constructor, protoProps, staticProps) {\n    if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) _defineProperties(Constructor, staticProps);\n    return Constructor;\n  }\n\n  function _defineProperty(obj, key, value) {\n    if (key in obj) {\n      Object.defineProperty(obj, key, {\n        value: value,\n        enumerable: true,\n        configurable: true,\n        writable: true\n      });\n    } else {\n      obj[key] = value;\n    }\n\n    return obj;\n  }\n\n  function _objectSpread(target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i] != null ? arguments[i] : {};\n      var ownKeys = Object.keys(source);\n\n      if (typeof Object.getOwnPropertySymbols === 'function') {\n        ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n          return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n        }));\n      }\n\n      ownKeys.forEach(function (key) {\n        _defineProperty(target, key, source[key]);\n      });\n    }\n\n    return target;\n  }\n\n  function _inherits(subClass, superClass) {\n    if (typeof superClass !== \"function\" && superClass !== null) {\n      throw new TypeError(\"Super expression must either be null or a function\");\n    }\n\n    subClass.prototype = Object.create(superClass && superClass.prototype, {\n      constructor: {\n        value: subClass,\n        writable: true,\n        configurable: true\n      }\n    });\n    if (superClass) _setPrototypeOf(subClass, superClass);\n  }\n\n  function _getPrototypeOf(o) {\n    _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n      return o.__proto__ || Object.getPrototypeOf(o);\n    };\n    return _getPrototypeOf(o);\n  }\n\n  function _setPrototypeOf(o, p) {\n    _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n      o.__proto__ = p;\n      return o;\n    };\n\n    return _setPrototypeOf(o, p);\n  }\n\n  function _assertThisInitialized(self) {\n    if (self === void 0) {\n      throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n    }\n\n    return self;\n  }\n\n  function _possibleConstructorReturn(self, call) {\n    if (call && (typeof call === \"object\" || typeof call === \"function\")) {\n      return call;\n    }\n\n    return _assertThisInitialized(self);\n  }\n\n  function _toConsumableArray(arr) {\n    return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n  }\n\n  function _arrayWithoutHoles(arr) {\n    if (Array.isArray(arr)) {\n      for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n      return arr2;\n    }\n  }\n\n  function _iterableToArray(iter) {\n    if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n  }\n\n  function _nonIterableSpread() {\n    throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n  }\n\n  /*\n   ** Generic functions which are not dependent on ApexCharts\n   */\n  var Utils =\n  /*#__PURE__*/\n  function () {\n    function Utils() {\n      _classCallCheck(this, Utils);\n    }\n\n    _createClass(Utils, [{\n      key: \"shadeRGBColor\",\n      value: function shadeRGBColor(percent, color) {\n        var f = color.split(','),\n            t = percent < 0 ? 0 : 255,\n            p = percent < 0 ? percent * -1 : percent,\n            R = parseInt(f[0].slice(4)),\n            G = parseInt(f[1]),\n            B = parseInt(f[2]);\n        return 'rgb(' + (Math.round((t - R) * p) + R) + ',' + (Math.round((t - G) * p) + G) + ',' + (Math.round((t - B) * p) + B) + ')';\n      }\n    }, {\n      key: \"shadeHexColor\",\n      value: function shadeHexColor(percent, color) {\n        var f = parseInt(color.slice(1), 16),\n            t = percent < 0 ? 0 : 255,\n            p = percent < 0 ? percent * -1 : percent,\n            R = f >> 16,\n            G = f >> 8 & 0x00ff,\n            B = f & 0x0000ff;\n        return '#' + (0x1000000 + (Math.round((t - R) * p) + R) * 0x10000 + (Math.round((t - G) * p) + G) * 0x100 + (Math.round((t - B) * p) + B)).toString(16).slice(1);\n      } // beautiful color shading blending code\n      // http://stackoverflow.com/questions/5560248/programmatically-lighten-or-darken-a-hex-color-or-rgb-and-blend-colors\n\n    }, {\n      key: \"shadeColor\",\n      value: function shadeColor(p, color) {\n        if (color.length > 7) return this.shadeRGBColor(p, color);else return this.shadeHexColor(p, color);\n      }\n    }], [{\n      key: \"bind\",\n      value: function bind(fn, me) {\n        return function () {\n          return fn.apply(me, arguments);\n        };\n      }\n    }, {\n      key: \"isObject\",\n      value: function isObject(item) {\n        return item && _typeof(item) === 'object' && !Array.isArray(item) && item != null;\n      }\n    }, {\n      key: \"listToArray\",\n      value: function listToArray(list) {\n        var i,\n            array = [];\n\n        for (i = 0; i < list.length; i++) {\n          array[i] = list[i];\n        }\n\n        return array;\n      } // to extend defaults with user options\n      // credit: http://stackoverflow.com/questions/27936772/deep-object-merging-in-es6-es7#answer-34749873\n\n    }, {\n      key: \"extend\",\n      value: function extend(target, source) {\n        var _this = this;\n\n        if (typeof Object.assign !== 'function') {\n\n          (function () {\n            Object.assign = function (target) {\n\n              if (target === undefined || target === null) {\n                throw new TypeError('Cannot convert undefined or null to object');\n              }\n\n              var output = Object(target);\n\n              for (var index = 1; index < arguments.length; index++) {\n                var _source = arguments[index];\n\n                if (_source !== undefined && _source !== null) {\n                  for (var nextKey in _source) {\n                    if (_source.hasOwnProperty(nextKey)) {\n                      output[nextKey] = _source[nextKey];\n                    }\n                  }\n                }\n              }\n\n              return output;\n            };\n          })();\n        }\n\n        var output = Object.assign({}, target);\n\n        if (this.isObject(target) && this.isObject(source)) {\n          Object.keys(source).forEach(function (key) {\n            if (_this.isObject(source[key])) {\n              if (!(key in target)) {\n                Object.assign(output, _defineProperty({}, key, source[key]));\n              } else {\n                output[key] = _this.extend(target[key], source[key]);\n              }\n            } else {\n              Object.assign(output, _defineProperty({}, key, source[key]));\n            }\n          });\n        }\n\n        return output;\n      }\n    }, {\n      key: \"extendArray\",\n      value: function extendArray(arrToExtend, resultArr) {\n        var extendedArr = [];\n        arrToExtend.map(function (item) {\n          extendedArr.push(Utils.extend(resultArr, item));\n        });\n        arrToExtend = extendedArr;\n        return arrToExtend;\n      } // If month counter exceeds 12, it starts again from 1\n\n    }, {\n      key: \"monthMod\",\n      value: function monthMod(month) {\n        return month % 12;\n      }\n    }, {\n      key: \"addProps\",\n      value: function addProps(obj, arr, val) {\n        if (typeof arr === 'string') {\n          arr = arr.split('.');\n        }\n\n        obj[arr[0]] = obj[arr[0]] || {};\n        var tmpObj = obj[arr[0]];\n\n        if (arr.length > 1) {\n          arr.shift();\n          this.addProps(tmpObj, arr, val);\n        } else {\n          obj[arr[0]] = val;\n        }\n\n        return obj;\n      }\n    }, {\n      key: \"clone\",\n      value: function clone(source) {\n        if (Object.prototype.toString.call(source) === '[object Array]') {\n          var cloneResult = [];\n\n          for (var i = 0; i < source.length; i++) {\n            cloneResult[i] = this.clone(source[i]);\n          }\n\n          return cloneResult;\n        } else if (_typeof(source) === 'object') {\n          var _cloneResult = {};\n\n          for (var prop in source) {\n            if (source.hasOwnProperty(prop)) {\n              _cloneResult[prop] = this.clone(source[prop]);\n            }\n          }\n\n          return _cloneResult;\n        } else {\n          return source;\n        }\n      }\n    }, {\n      key: \"log10\",\n      value: function log10(x) {\n        return Math.log(x) / Math.LN10;\n      }\n    }, {\n      key: \"roundToBase10\",\n      value: function roundToBase10(x) {\n        return Math.pow(10, Math.floor(Math.log10(x)));\n      }\n    }, {\n      key: \"roundToBase\",\n      value: function roundToBase(x, base) {\n        return Math.pow(base, Math.floor(Math.log(x) / Math.log(base)));\n      }\n    }, {\n      key: \"parseNumber\",\n      value: function parseNumber(val) {\n        if (val === null) return val;\n        return parseFloat(val);\n      }\n    }, {\n      key: \"noExponents\",\n      value: function noExponents(val) {\n        var data = String(val).split(/[eE]/);\n        if (data.length == 1) return data[0];\n        var z = '',\n            sign = val < 0 ? '-' : '',\n            str = data[0].replace('.', ''),\n            mag = Number(data[1]) + 1;\n\n        if (mag < 0) {\n          z = sign + '0.';\n\n          while (mag++) {\n            z += '0';\n          }\n\n          return z + str.replace(/^\\-/, '');\n        }\n\n        mag -= str.length;\n\n        while (mag--) {\n          z += '0';\n        }\n\n        return str + z;\n      }\n    }, {\n      key: \"getDimensions\",\n      value: function getDimensions(el) {\n        var computedStyle = getComputedStyle(el);\n        var ret = [];\n        var elementHeight = el.clientHeight;\n        var elementWidth = el.clientWidth;\n        elementHeight -= parseFloat(computedStyle.paddingTop) + parseFloat(computedStyle.paddingBottom);\n        elementWidth -= parseFloat(computedStyle.paddingLeft) + parseFloat(computedStyle.paddingRight);\n        ret.push(elementWidth);\n        ret.push(elementHeight);\n        return ret;\n      }\n    }, {\n      key: \"getBoundingClientRect\",\n      value: function getBoundingClientRect(element) {\n        var rect = element.getBoundingClientRect();\n        return {\n          top: rect.top,\n          right: rect.right,\n          bottom: rect.bottom,\n          left: rect.left,\n          width: rect.width,\n          height: rect.height,\n          x: rect.x,\n          y: rect.y\n        };\n      } // http://stackoverflow.com/questions/5623838/rgb-to-hex-and-hex-to-rgb#answer-12342275\n\n    }, {\n      key: \"hexToRgba\",\n      value: function hexToRgba() {\n        var hex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '#999999';\n        var opacity = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0.6;\n\n        if (hex.substring(0, 1) !== '#') {\n          hex = '#999999';\n        }\n\n        var h = hex.replace('#', '');\n        h = h.match(new RegExp('(.{' + h.length / 3 + '})', 'g'));\n\n        for (var i = 0; i < h.length; i++) {\n          h[i] = parseInt(h[i].length === 1 ? h[i] + h[i] : h[i], 16);\n        }\n\n        if (typeof opacity !== 'undefined') h.push(opacity);\n        return 'rgba(' + h.join(',') + ')';\n      }\n    }, {\n      key: \"getOpacityFromRGBA\",\n      value: function getOpacityFromRGBA(rgba) {\n        rgba = rgba.match(/^rgba?[\\s+]?\\([\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?/i);\n        return rgba[3];\n      }\n    }, {\n      key: \"rgb2hex\",\n      value: function rgb2hex(rgb) {\n        rgb = rgb.match(/^rgba?[\\s+]?\\([\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?/i);\n        return rgb && rgb.length === 4 ? '#' + ('0' + parseInt(rgb[1], 10).toString(16)).slice(-2) + ('0' + parseInt(rgb[2], 10).toString(16)).slice(-2) + ('0' + parseInt(rgb[3], 10).toString(16)).slice(-2) : '';\n      }\n    }, {\n      key: \"isColorHex\",\n      value: function isColorHex(color) {\n        return /(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(color);\n      }\n    }, {\n      key: \"polarToCartesian\",\n      value: function polarToCartesian(centerX, centerY, radius, angleInDegrees) {\n        var angleInRadians = (angleInDegrees - 90) * Math.PI / 180.0;\n        return {\n          x: centerX + radius * Math.cos(angleInRadians),\n          y: centerY + radius * Math.sin(angleInRadians)\n        };\n      }\n    }, {\n      key: \"escapeString\",\n      value: function escapeString(str) {\n        var escapeWith = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'x';\n        var newStr = str.toString().slice();\n        newStr = newStr.replace(/[` ~!@#$%^&*()_|+\\-=?;:'\",.<>\\{\\}\\[\\]\\\\\\/]/gi, escapeWith);\n        return newStr;\n      }\n    }, {\n      key: \"negToZero\",\n      value: function negToZero(val) {\n        return val < 0 ? 0 : val;\n      }\n    }, {\n      key: \"moveIndexInArray\",\n      value: function moveIndexInArray(arr, old_index, new_index) {\n        if (new_index >= arr.length) {\n          var k = new_index - arr.length + 1;\n\n          while (k--) {\n            arr.push(undefined);\n          }\n        }\n\n        arr.splice(new_index, 0, arr.splice(old_index, 1)[0]);\n        return arr;\n      }\n    }, {\n      key: \"extractNumber\",\n      value: function extractNumber(s) {\n        return parseFloat(s.replace(/[^\\d\\.]*/g, ''));\n      }\n    }, {\n      key: \"randomString\",\n      value: function randomString(len) {\n        var text = '';\n        var possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';\n\n        for (var i = 0; i < len; i++) {\n          text += possible.charAt(Math.floor(Math.random() * possible.length));\n        }\n\n        return text;\n      }\n    }, {\n      key: \"findAncestor\",\n      value: function findAncestor(el, cls) {\n        while ((el = el.parentElement) && !el.classList.contains(cls)) {\n        }\n\n        return el;\n      }\n    }, {\n      key: \"setELstyles\",\n      value: function setELstyles(el, styles) {\n        for (var key in styles) {\n          if (styles.hasOwnProperty(key)) {\n            el.style.key = styles[key];\n          }\n        }\n      }\n    }, {\n      key: \"isNumber\",\n      value: function isNumber(value) {\n        return !isNaN(value) && parseFloat(Number(value)) === value && !isNaN(parseInt(value, 10));\n      }\n    }, {\n      key: \"isFloat\",\n      value: function isFloat(n) {\n        return Number(n) === n && n % 1 !== 0;\n      }\n    }, {\n      key: \"isSafari\",\n      value: function isSafari() {\n        return /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n      }\n    }, {\n      key: \"isFirefox\",\n      value: function isFirefox() {\n        return navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\n      }\n    }, {\n      key: \"isIE11\",\n      value: function isIE11() {\n        if (window.navigator.userAgent.indexOf('MSIE') !== -1 || window.navigator.appVersion.indexOf('Trident/') > -1) {\n          return true;\n        }\n      }\n    }, {\n      key: \"isIE\",\n      value: function isIE() {\n        var ua = window.navigator.userAgent;\n        var msie = ua.indexOf('MSIE ');\n\n        if (msie > 0) {\n          // IE 10 or older => return version number\n          return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);\n        }\n\n        var trident = ua.indexOf('Trident/');\n\n        if (trident > 0) {\n          // IE 11 => return version number\n          var rv = ua.indexOf('rv:');\n          return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);\n        }\n\n        var edge = ua.indexOf('Edge/');\n\n        if (edge > 0) {\n          // Edge (IE 12+) => return version number\n          return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);\n        } // other browser\n\n\n        return false;\n      }\n    }]);\n\n    return Utils;\n  }();\n\n  /**\n   * ApexCharts Filters Class for setting hover/active states on the paths.\n   *\n   * @module Formatters\n   **/\n\n  var Filters =\n  /*#__PURE__*/\n  function () {\n    function Filters(ctx) {\n      _classCallCheck(this, Filters);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n    } // create a re-usable filter which can be appended other filter effects and applied to multiple elements\n\n\n    _createClass(Filters, [{\n      key: \"getDefaultFilter\",\n      value: function getDefaultFilter(el, i) {\n        var w = this.w;\n        el.unfilter(true);\n        var filter = new window.SVG.Filter();\n        filter.size('120%', '180%', '-5%', '-40%');\n\n        if (w.config.states.normal.filter !== 'none') {\n          this.applyFilter(el, i, w.config.states.normal.filter.type, w.config.states.normal.filter.value);\n        } else {\n          if (w.config.chart.dropShadow.enabled) {\n            this.dropShadow(el, w.config.chart.dropShadow, i);\n          }\n        }\n      }\n    }, {\n      key: \"addNormalFilter\",\n      value: function addNormalFilter(el, i) {\n        var w = this.w;\n\n        if (w.config.chart.dropShadow.enabled) {\n          this.dropShadow(el, w.config.chart.dropShadow, i);\n        }\n      } // appends dropShadow to the filter object which can be chained with other filter effects\n\n    }, {\n      key: \"addLightenFilter\",\n      value: function addLightenFilter(el, i, attrs) {\n        var _this = this;\n\n        var w = this.w;\n        var intensity = attrs.intensity;\n\n        if (Utils.isFirefox()) {\n          return;\n        }\n\n        el.unfilter(true);\n        var filter = new window.SVG.Filter();\n        filter.size('120%', '180%', '-5%', '-40%');\n        el.filter(function (add) {\n          var shadowAttr = w.config.chart.dropShadow;\n\n          if (shadowAttr.enabled) {\n            filter = _this.addShadow(add, i, shadowAttr);\n          } else {\n            filter = add;\n          }\n\n          filter.componentTransfer({\n            rgb: {\n              type: 'linear',\n              slope: 1.5,\n              intercept: intensity\n            }\n          });\n        });\n        el.filterer.node.setAttribute('filterUnits', 'userSpaceOnUse');\n      } // appends dropShadow to the filter object which can be chained with other filter effects\n\n    }, {\n      key: \"addDarkenFilter\",\n      value: function addDarkenFilter(el, i, attrs) {\n        var _this2 = this;\n\n        var w = this.w;\n        var intensity = attrs.intensity;\n\n        if (Utils.isFirefox()) {\n          return;\n        }\n\n        el.unfilter(true);\n        var filter = new window.SVG.Filter();\n        filter.size('120%', '180%', '-5%', '-40%');\n        el.filter(function (add) {\n          var shadowAttr = w.config.chart.dropShadow;\n\n          if (shadowAttr.enabled) {\n            filter = _this2.addShadow(add, i, shadowAttr);\n          } else {\n            filter = add;\n          }\n\n          filter.componentTransfer({\n            rgb: {\n              type: 'linear',\n              slope: intensity\n            }\n          });\n        });\n        el.filterer.node.setAttribute('filterUnits', 'userSpaceOnUse');\n      }\n    }, {\n      key: \"applyFilter\",\n      value: function applyFilter(el, i, filter) {\n        var intensity = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0.5;\n\n        switch (filter) {\n          case 'none':\n            {\n              this.addNormalFilter(el, i);\n              break;\n            }\n\n          case 'lighten':\n            {\n              this.addLightenFilter(el, i, {\n                intensity: intensity\n              });\n              break;\n            }\n\n          case 'darken':\n            {\n              this.addDarkenFilter(el, i, {\n                intensity: intensity\n              });\n              break;\n            }\n\n          default:\n            // do nothing\n            break;\n        }\n      } // appends dropShadow to the filter object which can be chained with other filter effects\n\n    }, {\n      key: \"addShadow\",\n      value: function addShadow(add, i, attrs) {\n        var blur = attrs.blur,\n            top = attrs.top,\n            left = attrs.left,\n            color = attrs.color,\n            opacity = attrs.opacity;\n        var shadowBlur = add.flood(Array.isArray(color) ? color[i] : color, opacity).composite(add.sourceAlpha, 'in').offset(left, top).gaussianBlur(blur).merge(add.source);\n        return add.blend(add.source, shadowBlur);\n      } // directly adds dropShadow to the element and returns the same element.\n      // the only way it is different from the addShadow() function is that addShadow is chainable to other filters, while this function discards all filters and add dropShadow\n\n    }, {\n      key: \"dropShadow\",\n      value: function dropShadow(el, attrs) {\n        var i = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n        var top = attrs.top,\n            left = attrs.left,\n            blur = attrs.blur,\n            color = attrs.color,\n            opacity = attrs.opacity,\n            noUserSpaceOnUse = attrs.noUserSpaceOnUse;\n        var w = this.w;\n        el.unfilter(true);\n\n        if (Utils.isIE() && w.config.chart.type === 'radialBar') {\n          // in radialbar charts, dropshadow is clipping actual drawing in IE\n          return el;\n        }\n\n        color = Array.isArray(color) ? color[i] : color;\n        var filter = new window.SVG.Filter();\n        filter.size('120%', '180%', '-5%', '-40%');\n        el.filter(function (add) {\n          var shadowBlur = null;\n\n          if (Utils.isSafari() || Utils.isFirefox() || Utils.isIE()) {\n            // safari/firefox has some alternative way to use this filter\n            shadowBlur = add.flood(color, opacity).composite(add.sourceAlpha, 'in').offset(left, top).gaussianBlur(blur);\n          } else {\n            shadowBlur = add.flood(color, opacity).composite(add.sourceAlpha, 'in').offset(left, top).gaussianBlur(blur).merge(add.source);\n          }\n\n          add.blend(add.source, shadowBlur);\n        });\n\n        if (!noUserSpaceOnUse) {\n          el.filterer.node.setAttribute('filterUnits', 'userSpaceOnUse');\n        }\n\n        return el;\n      }\n    }, {\n      key: \"setSelectionFilter\",\n      value: function setSelectionFilter(el, realIndex, dataPointIndex) {\n        var w = this.w;\n\n        if (typeof w.globals.selectedDataPoints[realIndex] !== 'undefined') {\n          if (w.globals.selectedDataPoints[realIndex].indexOf(dataPointIndex) > -1) {\n            el.node.setAttribute('selected', true);\n            var activeFilter = w.config.states.active.filter;\n\n            if (activeFilter !== 'none') {\n              this.applyFilter(el, realIndex, activeFilter.type, activeFilter.value);\n            }\n          }\n        }\n      }\n    }]);\n\n    return Filters;\n  }();\n\n  /**\n   * ApexCharts Animation Class.\n   *\n   * @module Animations\n   **/\n\n  var Animations =\n  /*#__PURE__*/\n  function () {\n    function Animations(ctx) {\n      _classCallCheck(this, Animations);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n      this.setEasingFunctions();\n    }\n\n    _createClass(Animations, [{\n      key: \"setEasingFunctions\",\n      value: function setEasingFunctions() {\n        var easing;\n        if (this.w.globals.easing) return;\n        var userDefinedEasing = this.w.config.chart.animations.easing;\n\n        switch (userDefinedEasing) {\n          case 'linear':\n            {\n              easing = '-';\n              break;\n            }\n\n          case 'easein':\n            {\n              easing = '<';\n              break;\n            }\n\n          case 'easeout':\n            {\n              easing = '>';\n              break;\n            }\n\n          case 'easeinout':\n            {\n              easing = '<>';\n              break;\n            }\n\n          case 'swing':\n            {\n              easing = function easing(pos) {\n                var s = 1.70158;\n                return (pos -= 1) * pos * ((s + 1) * pos + s) + 1;\n              };\n\n              break;\n            }\n\n          case 'bounce':\n            {\n              easing = function easing(pos) {\n                if (pos < 1 / 2.75) {\n                  return 7.5625 * pos * pos;\n                } else if (pos < 2 / 2.75) {\n                  return 7.5625 * (pos -= 1.5 / 2.75) * pos + 0.75;\n                } else if (pos < 2.5 / 2.75) {\n                  return 7.5625 * (pos -= 2.25 / 2.75) * pos + 0.9375;\n                } else {\n                  return 7.5625 * (pos -= 2.625 / 2.75) * pos + 0.984375;\n                }\n              };\n\n              break;\n            }\n\n          case 'elastic':\n            {\n              easing = function easing(pos) {\n                if (pos === !!pos) return pos;\n                return Math.pow(2, -10 * pos) * Math.sin((pos - 0.075) * (2 * Math.PI) / 0.3) + 1;\n              };\n\n              break;\n            }\n\n          default:\n            {\n              easing = '<>';\n            }\n        }\n\n        this.w.globals.easing = easing;\n      }\n    }, {\n      key: \"animateLine\",\n      value: function animateLine(el, from, to, speed) {\n        el.attr(from).animate(speed).attr(to);\n      }\n      /*\n       ** Animate radius of a circle element\n       */\n\n    }, {\n      key: \"animateCircleRadius\",\n      value: function animateCircleRadius(el, from, to, speed, easing) {\n        if (!from) from = 0;\n        el.attr({\n          r: from\n        }).animate(speed, easing).attr({\n          r: to\n        });\n      }\n      /*\n       ** Animate radius and position of a circle element\n       */\n\n    }, {\n      key: \"animateCircle\",\n      value: function animateCircle(el, from, to, speed, easing) {\n        el.attr({\n          r: from.r,\n          cx: from.cx,\n          cy: from.cy\n        }).animate(speed, easing).attr({\n          r: to.r,\n          cx: to.cx,\n          cy: to.cy\n        });\n      }\n      /*\n       ** Animate rect properties\n       */\n\n    }, {\n      key: \"animateRect\",\n      value: function animateRect(el, from, to, speed, fn) {\n        el.attr(from).animate(speed).attr(to).afterAll(function () {\n          fn();\n        });\n      }\n    }, {\n      key: \"animatePathsGradually\",\n      value: function animatePathsGradually(params) {\n        var el = params.el,\n            j = params.j,\n            pathFrom = params.pathFrom,\n            pathTo = params.pathTo,\n            speed = params.speed,\n            delay = params.delay,\n            strokeWidth = params.strokeWidth;\n        var me = this;\n        var w = this.w;\n        var delayFactor = 0;\n\n        if (w.config.chart.animations.animateGradually.enabled) {\n          delayFactor = w.config.chart.animations.animateGradually.delay;\n        }\n\n        if (w.config.chart.animations.dynamicAnimation.enabled && w.globals.dataChanged) {\n          delayFactor = 0;\n        }\n\n        me.morphSVG(el, j, pathFrom, pathTo, speed, strokeWidth, delay * delayFactor);\n      }\n    }, {\n      key: \"showDelayedElements\",\n      value: function showDelayedElements() {\n        this.w.globals.delayedElements.forEach(function (d) {\n          var ele = d.el;\n          ele.classList.remove('hidden');\n        });\n      }\n    }, {\n      key: \"animationCompleted\",\n      value: function animationCompleted() {\n        var w = this.w;\n        w.globals.animationEnded = true;\n\n        if (typeof w.config.chart.events.animationEnd === 'function') {\n          w.config.chart.events.animationEnd(this.ctx, w);\n        }\n      } // SVG.js animation for morphing one path to another\n\n    }, {\n      key: \"morphSVG\",\n      value: function morphSVG(el, j, pathFrom, pathTo, speed, strokeWidth, delay) {\n        var _this = this;\n\n        var w = this.w;\n\n        if (!pathFrom) {\n          pathFrom = el.attr('pathFrom');\n        }\n\n        if (!pathTo) {\n          pathTo = el.attr('pathTo');\n        }\n\n        if (!pathFrom || pathFrom.indexOf('undefined') > -1 || pathFrom.indexOf('NaN') > -1) {\n          pathFrom = \"M 0 \".concat(w.globals.gridHeight);\n          speed = 1;\n        }\n\n        if (pathTo.indexOf('undefined') > -1 || pathTo.indexOf('NaN') > -1) {\n          pathTo = \"M 0 \".concat(w.globals.gridHeight);\n          speed = 1;\n        }\n\n        if (!w.globals.shouldAnimate) {\n          speed = 1;\n        }\n\n        el.plot(pathFrom).animate(1, w.globals.easing, delay).plot(pathFrom).animate(speed, w.globals.easing, delay).plot(pathTo).afterAll(function () {\n          // a flag to indicate that the original mount function can return true now as animation finished here\n          if (Utils.isNumber(j)) {\n            if (j === w.globals.series[w.globals.maxValsInArrayIndex].length - 2 && w.globals.shouldAnimate) {\n              _this.animationCompleted();\n            }\n          } else if (w.globals.shouldAnimate) {\n            _this.animationCompleted();\n          }\n\n          _this.showDelayedElements();\n        });\n      }\n    }]);\n\n    return Animations;\n  }();\n\n  /**\n   * ApexCharts Graphics Class for all drawing operations.\n   *\n   * @module Graphics\n   **/\n\n  var Graphics =\n  /*#__PURE__*/\n  function () {\n    function Graphics(ctx) {\n      _classCallCheck(this, Graphics);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n    }\n\n    _createClass(Graphics, [{\n      key: \"drawLine\",\n      value: function drawLine(x1, y1, x2, y2) {\n        var lineColor = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : '#a8a8a8';\n        var dashArray = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n        var strokeWidth = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : null;\n        var w = this.w;\n        var line = w.globals.dom.Paper.line().attr({\n          x1: x1,\n          y1: y1,\n          x2: x2,\n          y2: y2,\n          stroke: lineColor,\n          'stroke-dasharray': dashArray,\n          'stroke-width': strokeWidth\n        });\n        return line;\n      }\n    }, {\n      key: \"drawRect\",\n      value: function drawRect() {\n        var x1 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n        var y1 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n        var x2 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n        var y2 = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n        var radius = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;\n        var color = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : '#fefefe';\n        var opacity = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 1;\n        var strokeWidth = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : null;\n        var strokeColor = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : null;\n        var strokeDashArray = arguments.length > 9 && arguments[9] !== undefined ? arguments[9] : 0;\n        var w = this.w;\n        var rect = w.globals.dom.Paper.rect();\n        rect.attr({\n          x: x1,\n          y: y1,\n          width: x2 > 0 ? x2 : 0,\n          height: y2 > 0 ? y2 : 0,\n          rx: radius,\n          ry: radius,\n          fill: color,\n          opacity: opacity,\n          'stroke-width': strokeWidth !== null ? strokeWidth : 0,\n          stroke: strokeColor !== null ? strokeColor : 'none',\n          'stroke-dasharray': strokeDashArray\n        });\n        return rect;\n      }\n    }, {\n      key: \"drawPolygon\",\n      value: function drawPolygon(polygonString) {\n        var stroke = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '#e1e1e1';\n        var fill = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'none';\n        var w = this.w;\n        var polygon = w.globals.dom.Paper.polygon(polygonString).attr({\n          fill: fill,\n          stroke: stroke\n        });\n        return polygon;\n      }\n    }, {\n      key: \"drawCircle\",\n      value: function drawCircle(radius) {\n        var attrs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n        var w = this.w;\n        var c = w.globals.dom.Paper.circle(radius * 2);\n\n        if (attrs !== null) {\n          c.attr(attrs);\n        }\n\n        return c;\n      }\n    }, {\n      key: \"drawPath\",\n      value: function drawPath(_ref) {\n        var _ref$d = _ref.d,\n            d = _ref$d === void 0 ? '' : _ref$d,\n            _ref$stroke = _ref.stroke,\n            stroke = _ref$stroke === void 0 ? '#a8a8a8' : _ref$stroke,\n            _ref$strokeWidth = _ref.strokeWidth,\n            strokeWidth = _ref$strokeWidth === void 0 ? 1 : _ref$strokeWidth,\n            fill = _ref.fill,\n            _ref$fillOpacity = _ref.fillOpacity,\n            fillOpacity = _ref$fillOpacity === void 0 ? 1 : _ref$fillOpacity,\n            _ref$strokeOpacity = _ref.strokeOpacity,\n            strokeOpacity = _ref$strokeOpacity === void 0 ? 1 : _ref$strokeOpacity,\n            classes = _ref.classes,\n            _ref$strokeLinecap = _ref.strokeLinecap,\n            strokeLinecap = _ref$strokeLinecap === void 0 ? null : _ref$strokeLinecap,\n            _ref$strokeDashArray = _ref.strokeDashArray,\n            strokeDashArray = _ref$strokeDashArray === void 0 ? 0 : _ref$strokeDashArray;\n        var w = this.w;\n\n        if (strokeLinecap === null) {\n          strokeLinecap = w.config.stroke.lineCap;\n        }\n\n        if (d.indexOf('undefined') > -1 || d.indexOf('NaN') > -1) {\n          d = \"M 0 \".concat(w.globals.gridHeight);\n        }\n\n        var p = w.globals.dom.Paper.path(d).attr({\n          fill: fill,\n          'fill-opacity': fillOpacity,\n          stroke: stroke,\n          'stroke-opacity': strokeOpacity,\n          'stroke-linecap': strokeLinecap,\n          'stroke-width': strokeWidth,\n          'stroke-dasharray': strokeDashArray,\n          class: classes\n        });\n        return p;\n      }\n    }, {\n      key: \"group\",\n      value: function group() {\n        var attrs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n        var w = this.w;\n        var g = w.globals.dom.Paper.group();\n\n        if (attrs !== null) {\n          g.attr(attrs);\n        }\n\n        return g;\n      }\n    }, {\n      key: \"move\",\n      value: function move(x, y) {\n        var move = ['M', x, y].join(' ');\n        return move;\n      }\n    }, {\n      key: \"line\",\n      value: function line(x, y) {\n        var hORv = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n        var line = null;\n\n        if (hORv === null) {\n          line = ['L', x, y].join(' ');\n        } else if (hORv === 'H') {\n          line = ['H', x].join(' ');\n        } else if (hORv === 'V') {\n          line = ['V', y].join(' ');\n        }\n\n        return line;\n      }\n    }, {\n      key: \"curve\",\n      value: function curve(x1, y1, x2, y2, x, y) {\n        var curve = ['C', x1, y1, x2, y2, x, y].join(' ');\n        return curve;\n      }\n    }, {\n      key: \"quadraticCurve\",\n      value: function quadraticCurve(x1, y1, x, y) {\n        var curve = ['Q', x1, y1, x, y].join(' ');\n        return curve;\n      }\n    }, {\n      key: \"arc\",\n      value: function arc(rx, ry, axisRotation, largeArcFlag, sweepFlag, x, y) {\n        var relative = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : false;\n        var coord = 'A';\n        if (relative) coord = 'a';\n        var arc = [coord, rx, ry, axisRotation, largeArcFlag, sweepFlag, x, y].join(' ');\n        return arc;\n      }\n      /**\n       * @memberof Graphics\n       * @param {object}\n       *  i = series's index\n       *  realIndex = realIndex is series's actual index when it was drawn time. After several redraws, the iterating \"i\" may change in loops, but realIndex doesn't\n       *  pathFrom = existing pathFrom to animateTo\n       *  pathTo = new Path to which d attr will be animated from pathFrom to pathTo\n       *  stroke = line Color\n       *  strokeWidth = width of path Line\n       *  fill = it can be gradient, single color, pattern or image\n       *  animationDelay = how much to delay when starting animation (in milliseconds)\n       *  dataChangeSpeed = for dynamic animations, when data changes\n       *  className = class attribute to add\n       * @return {object} svg.js path object\n       **/\n\n    }, {\n      key: \"renderPaths\",\n      value: function renderPaths(_ref2) {\n        var j = _ref2.j,\n            realIndex = _ref2.realIndex,\n            pathFrom = _ref2.pathFrom,\n            pathTo = _ref2.pathTo,\n            stroke = _ref2.stroke,\n            strokeWidth = _ref2.strokeWidth,\n            strokeLinecap = _ref2.strokeLinecap,\n            fill = _ref2.fill,\n            animationDelay = _ref2.animationDelay,\n            initialSpeed = _ref2.initialSpeed,\n            dataChangeSpeed = _ref2.dataChangeSpeed,\n            className = _ref2.className,\n            _ref2$shouldClipToGri = _ref2.shouldClipToGrid,\n            shouldClipToGrid = _ref2$shouldClipToGri === void 0 ? true : _ref2$shouldClipToGri,\n            _ref2$bindEventsOnPat = _ref2.bindEventsOnPaths,\n            bindEventsOnPaths = _ref2$bindEventsOnPat === void 0 ? true : _ref2$bindEventsOnPat,\n            _ref2$drawShadow = _ref2.drawShadow,\n            drawShadow = _ref2$drawShadow === void 0 ? true : _ref2$drawShadow;\n        var w = this.w;\n        var filters = new Filters(this.ctx);\n        var anim = new Animations(this.ctx);\n        var initialAnim = this.w.config.chart.animations.enabled;\n        var dynamicAnim = initialAnim && this.w.config.chart.animations.dynamicAnimation.enabled;\n        var d;\n        var shouldAnimate = !!(initialAnim && !w.globals.resized || dynamicAnim && w.globals.dataChanged && w.globals.shouldAnimate);\n\n        if (shouldAnimate) {\n          d = pathFrom;\n        } else {\n          d = pathTo;\n          anim.animationCompleted();\n        }\n\n        var strokeDashArrayOpt = w.config.stroke.dashArray;\n        var strokeDashArray = 0;\n\n        if (Array.isArray(strokeDashArrayOpt)) {\n          strokeDashArray = strokeDashArrayOpt[realIndex];\n        } else {\n          strokeDashArray = w.config.stroke.dashArray;\n        }\n\n        var el = this.drawPath({\n          d: d,\n          stroke: stroke,\n          strokeWidth: strokeWidth,\n          fill: fill,\n          fillOpacity: 1,\n          classes: className,\n          strokeLinecap: strokeLinecap,\n          strokeDashArray: strokeDashArray\n        });\n        el.attr('index', realIndex);\n\n        if (shouldClipToGrid) {\n          el.attr({\n            'clip-path': \"url(#gridRectMask\".concat(w.globals.cuid, \")\")\n          });\n        } // const defaultFilter = el.filterer\n\n\n        if (w.config.states.normal.filter.type !== 'none') {\n          filters.getDefaultFilter(el, realIndex);\n        } else {\n          if (w.config.chart.dropShadow.enabled && drawShadow) {\n            if (!w.config.chart.dropShadow.enabledSeries || w.config.chart.dropShadow.enabledSeries && w.config.chart.dropShadow.enabledSeries.indexOf(realIndex) !== -1) {\n              var shadow = w.config.chart.dropShadow;\n              filters.dropShadow(el, shadow, realIndex);\n            }\n          }\n        }\n\n        if (bindEventsOnPaths) {\n          el.node.addEventListener('mouseenter', this.pathMouseEnter.bind(this, el));\n          el.node.addEventListener('mouseleave', this.pathMouseLeave.bind(this, el));\n          el.node.addEventListener('mousedown', this.pathMouseDown.bind(this, el));\n        }\n\n        el.attr({\n          pathTo: pathTo,\n          pathFrom: pathFrom\n        });\n        var defaultAnimateOpts = {\n          el: el,\n          j: j,\n          pathFrom: pathFrom,\n          pathTo: pathTo,\n          strokeWidth: strokeWidth\n        };\n\n        if (initialAnim && !w.globals.resized && !w.globals.dataChanged) {\n          anim.animatePathsGradually(_objectSpread({}, defaultAnimateOpts, {\n            speed: initialSpeed,\n            delay: animationDelay\n          }));\n        } else {\n          if (w.globals.resized || !w.globals.dataChanged) {\n            anim.showDelayedElements();\n          }\n        }\n\n        if (w.globals.dataChanged && dynamicAnim && shouldAnimate) {\n          anim.animatePathsGradually(_objectSpread({}, defaultAnimateOpts, {\n            speed: dataChangeSpeed\n          }));\n        }\n\n        return el;\n      }\n    }, {\n      key: \"drawPattern\",\n      value: function drawPattern(style, width, height) {\n        var stroke = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '#a8a8a8';\n        var strokeWidth = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;\n        var w = this.w;\n        var p = w.globals.dom.Paper.pattern(width, height, function (add) {\n          if (style === 'horizontalLines') {\n            add.line(0, 0, height, 0).stroke({\n              color: stroke,\n              width: strokeWidth + 1\n            });\n          } else if (style === 'verticalLines') {\n            add.line(0, 0, 0, width).stroke({\n              color: stroke,\n              width: strokeWidth + 1\n            });\n          } else if (style === 'slantedLines') {\n            add.line(0, 0, width, height).stroke({\n              color: stroke,\n              width: strokeWidth\n            });\n          } else if (style === 'squares') {\n            add.rect(width, height).fill('none').stroke({\n              color: stroke,\n              width: strokeWidth\n            });\n          } else if (style === 'circles') {\n            add.circle(width).fill('none').stroke({\n              color: stroke,\n              width: strokeWidth\n            });\n          }\n        });\n        return p;\n      }\n    }, {\n      key: \"drawGradient\",\n      value: function drawGradient(style, gfrom, gto, opacityFrom, opacityTo) {\n        var size = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : null;\n        var stops = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : null;\n        var colorStops = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : null;\n        var i = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : 0;\n        var w = this.w;\n        var g;\n        gfrom = Utils.hexToRgba(gfrom, opacityFrom);\n        gto = Utils.hexToRgba(gto, opacityTo);\n        var stop1 = 0;\n        var stop2 = 1;\n        var stop3 = 1;\n        var stop4 = null;\n\n        if (stops !== null) {\n          stop1 = typeof stops[0] !== 'undefined' ? stops[0] / 100 : 0;\n          stop2 = typeof stops[1] !== 'undefined' ? stops[1] / 100 : 1;\n          stop3 = typeof stops[2] !== 'undefined' ? stops[2] / 100 : 1;\n          stop4 = typeof stops[3] !== 'undefined' ? stops[3] / 100 : null;\n        }\n\n        var radial = !!(w.config.chart.type === 'donut' || w.config.chart.type === 'pie' || w.config.chart.type === 'bubble');\n\n        if (colorStops === null || colorStops.length === 0) {\n          g = w.globals.dom.Paper.gradient(radial ? 'radial' : 'linear', function (stop) {\n            stop.at(stop1, gfrom, opacityFrom);\n            stop.at(stop2, gto, opacityTo);\n            stop.at(stop3, gto, opacityTo);\n\n            if (stop4 !== null) {\n              stop.at(stop4, gfrom, opacityFrom);\n            }\n          });\n        } else {\n          g = w.globals.dom.Paper.gradient(radial ? 'radial' : 'linear', function (stop) {\n            var stops = Array.isArray(colorStops[i]) ? colorStops[i] : colorStops;\n            stops.forEach(function (s) {\n              stop.at(s.offset / 100, s.color, s.opacity);\n            });\n          });\n        }\n\n        if (!radial) {\n          if (style === 'vertical') {\n            g.from(0, 0).to(0, 1);\n          } else if (style === 'diagonal') {\n            g.from(0, 0).to(1, 1);\n          } else if (style === 'horizontal') {\n            g.from(0, 1).to(1, 1);\n          } else if (style === 'diagonal2') {\n            g.from(0, 1).to(2, 2);\n          }\n        } else {\n          var offx = w.globals.gridWidth / 2;\n          var offy = w.globals.gridHeight / 2;\n\n          if (w.config.chart.type !== 'bubble') {\n            g.attr({\n              gradientUnits: 'userSpaceOnUse',\n              cx: offx,\n              cy: offy,\n              r: size\n            });\n          } else {\n            g.attr({\n              cx: 0.5,\n              cy: 0.5,\n              r: 0.8,\n              fx: 0.2,\n              fy: 0.2\n            });\n          }\n        }\n\n        return g;\n      }\n    }, {\n      key: \"drawText\",\n      value: function drawText(opts) {\n        var w = this.w;\n        var x = opts.x,\n            y = opts.y,\n            text = opts.text,\n            textAnchor = opts.textAnchor,\n            fontSize = opts.fontSize,\n            fontFamily = opts.fontFamily,\n            fontWeight = opts.fontWeight,\n            foreColor = opts.foreColor,\n            opacity = opts.opacity;\n        if (typeof text === 'undefined') text = '';\n\n        if (!textAnchor) {\n          textAnchor = 'start';\n        }\n\n        if (!foreColor) {\n          foreColor = w.config.chart.foreColor;\n        }\n\n        fontFamily = fontFamily || w.config.chart.fontFamily;\n        fontWeight = fontWeight || 'regular';\n        var elText;\n\n        if (Array.isArray(text)) {\n          elText = w.globals.dom.Paper.text(function (add) {\n            for (var i = 0; i < text.length; i++) {\n              add.tspan(text[i]);\n            }\n          });\n        } else {\n          elText = w.globals.dom.Paper.plain(text);\n        }\n\n        elText.attr({\n          x: x,\n          y: y,\n          'text-anchor': textAnchor,\n          'dominant-baseline': 'auto',\n          'font-size': fontSize,\n          'font-family': fontFamily,\n          'font-weight': fontWeight,\n          fill: foreColor,\n          class: 'apexcharts-text ' + opts.cssClass ? opts.cssClass : ''\n        });\n        elText.node.style.fontFamily = fontFamily;\n        elText.node.style.opacity = opacity;\n        return elText;\n      }\n    }, {\n      key: \"addTspan\",\n      value: function addTspan(textEl, text, fontFamily) {\n        var tspan = textEl.tspan(text);\n\n        if (!fontFamily) {\n          fontFamily = this.w.config.chart.fontFamily;\n        }\n\n        tspan.node.style.fontFamily = fontFamily;\n      }\n    }, {\n      key: \"drawMarker\",\n      value: function drawMarker(x, y, opts) {\n        x = x || 0;\n        var size = opts.pSize || 0;\n        var elPoint = null;\n\n        if (opts.shape === 'square') {\n          var radius = opts.pRadius === undefined ? size / 2 : opts.pRadius;\n\n          if (y === null) {\n            size = 0;\n            radius = 0;\n          }\n\n          var nSize = size * 1.2 + radius;\n          var p = this.drawRect(nSize, nSize, nSize, nSize, radius);\n          p.attr({\n            x: x - nSize / 2,\n            y: y - nSize / 2,\n            cx: x,\n            cy: y,\n            class: opts.class ? opts.class : '',\n            fill: opts.pointFillColor,\n            'fill-opacity': opts.pointFillOpacity ? opts.pointFillOpacity : 1,\n            stroke: opts.pointStrokeColor,\n            'stroke-width': opts.pWidth ? opts.pWidth : 0,\n            'stroke-opacity': opts.pointStrokeOpacity ? opts.pointStrokeOpacity : 1\n          });\n          elPoint = p;\n        } else if (opts.shape === 'circle') {\n          if (!Utils.isNumber(y)) {\n            size = 0;\n            y = 0;\n          } // let nSize = size - opts.pRadius / 2 < 0 ? 0 : size - opts.pRadius / 2\n\n\n          elPoint = this.drawCircle(size, {\n            cx: x,\n            cy: y,\n            class: opts.class ? opts.class : '',\n            stroke: opts.pointStrokeColor,\n            fill: opts.pointFillColor,\n            'fill-opacity': opts.pointFillOpacity ? opts.pointFillOpacity : 1,\n            'stroke-width': opts.pWidth ? opts.pWidth : 0,\n            'stroke-opacity': opts.pointStrokeOpacity ? opts.pointStrokeOpacity : 1\n          });\n        }\n\n        return elPoint;\n      }\n    }, {\n      key: \"pathMouseEnter\",\n      value: function pathMouseEnter(path, e) {\n        var w = this.w;\n        var filters = new Filters(this.ctx);\n        var i = parseInt(path.node.getAttribute('index'));\n        var j = parseInt(path.node.getAttribute('j'));\n\n        if (typeof w.config.chart.events.dataPointMouseEnter === 'function') {\n          w.config.chart.events.dataPointMouseEnter(e, this.ctx, {\n            seriesIndex: i,\n            dataPointIndex: j,\n            w: w\n          });\n        }\n\n        this.ctx.fireEvent('dataPointMouseEnter', [e, this.ctx, {\n          seriesIndex: i,\n          dataPointIndex: j,\n          w: w\n        }]);\n\n        if (w.config.states.active.filter.type !== 'none') {\n          if (path.node.getAttribute('selected') === 'true') {\n            return;\n          }\n        }\n\n        if (w.config.states.hover.filter.type !== 'none') {\n          if (w.config.states.active.filter.type !== 'none' && !w.globals.isTouchDevice) {\n            var hoverFilter = w.config.states.hover.filter;\n            filters.applyFilter(path, i, hoverFilter.type, hoverFilter.value);\n          }\n        }\n      }\n    }, {\n      key: \"pathMouseLeave\",\n      value: function pathMouseLeave(path, e) {\n        var w = this.w;\n        var filters = new Filters(this.ctx);\n        var i = parseInt(path.node.getAttribute('index'));\n        var j = parseInt(path.node.getAttribute('j'));\n\n        if (typeof w.config.chart.events.dataPointMouseLeave === 'function') {\n          w.config.chart.events.dataPointMouseLeave(e, this.ctx, {\n            seriesIndex: i,\n            dataPointIndex: j,\n            w: w\n          });\n        }\n\n        this.ctx.fireEvent('dataPointMouseLeave', [e, this.ctx, {\n          seriesIndex: i,\n          dataPointIndex: j,\n          w: w\n        }]);\n\n        if (w.config.states.active.filter.type !== 'none') {\n          if (path.node.getAttribute('selected') === 'true') {\n            return;\n          }\n        }\n\n        if (w.config.states.hover.filter.type !== 'none') {\n          filters.getDefaultFilter(path, i);\n        }\n      }\n    }, {\n      key: \"pathMouseDown\",\n      value: function pathMouseDown(path, e) {\n        var w = this.w;\n        var filters = new Filters(this.ctx);\n        var i = parseInt(path.node.getAttribute('index'));\n        var j = parseInt(path.node.getAttribute('j'));\n        var selected = 'false';\n\n        if (path.node.getAttribute('selected') === 'true') {\n          path.node.setAttribute('selected', 'false');\n\n          if (w.globals.selectedDataPoints[i].indexOf(j) > -1) {\n            var index = w.globals.selectedDataPoints[i].indexOf(j);\n            w.globals.selectedDataPoints[i].splice(index, 1);\n          }\n        } else {\n          if (!w.config.states.active.allowMultipleDataPointsSelection && w.globals.selectedDataPoints.length > 0) {\n            w.globals.selectedDataPoints = [];\n            var elPaths = w.globals.dom.Paper.select('.apexcharts-series path').members;\n            var elCircles = w.globals.dom.Paper.select('.apexcharts-series circle, .apexcharts-series rect').members;\n            elPaths.forEach(function (elPath) {\n              elPath.node.setAttribute('selected', 'false');\n              filters.getDefaultFilter(elPath, i);\n            });\n            elCircles.forEach(function (circle) {\n              circle.node.setAttribute('selected', 'false');\n              filters.getDefaultFilter(circle, i);\n            });\n          }\n\n          path.node.setAttribute('selected', 'true');\n          selected = 'true';\n\n          if (typeof w.globals.selectedDataPoints[i] === 'undefined') {\n            w.globals.selectedDataPoints[i] = [];\n          }\n\n          w.globals.selectedDataPoints[i].push(j);\n        }\n\n        if (selected === 'true') {\n          var activeFilter = w.config.states.active.filter;\n\n          if (activeFilter !== 'none') {\n            filters.applyFilter(path, i, activeFilter.type, activeFilter.value);\n          }\n        } else {\n          if (w.config.states.active.filter.type !== 'none') {\n            filters.getDefaultFilter(path, i);\n          }\n        }\n\n        if (typeof w.config.chart.events.dataPointSelection === 'function') {\n          w.config.chart.events.dataPointSelection(e, this.ctx, {\n            selectedDataPoints: w.globals.selectedDataPoints,\n            seriesIndex: i,\n            dataPointIndex: j,\n            w: w\n          });\n        }\n\n        if (e) {\n          this.ctx.fireEvent('dataPointSelection', [e, this.ctx, {\n            selectedDataPoints: w.globals.selectedDataPoints,\n            seriesIndex: i,\n            dataPointIndex: j,\n            w: w\n          }]);\n        }\n      }\n    }, {\n      key: \"rotateAroundCenter\",\n      value: function rotateAroundCenter(el) {\n        var coord = el.getBBox();\n        var x = coord.x + coord.width / 2;\n        var y = coord.y + coord.height / 2;\n        return {\n          x: x,\n          y: y\n        };\n      }\n    }, {\n      key: \"getTextRects\",\n      value: function getTextRects(text, fontSize, fontFamily, transform) {\n        var useBBox = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n        var w = this.w;\n        var virtualText = this.drawText({\n          x: -200,\n          y: -200,\n          text: text,\n          textAnchor: 'start',\n          fontSize: fontSize,\n          fontFamily: fontFamily,\n          foreColor: '#fff',\n          opacity: 0\n        });\n\n        if (transform) {\n          virtualText.attr('transform', transform);\n        }\n\n        w.globals.dom.Paper.add(virtualText);\n        var rect = virtualText.bbox();\n\n        if (!useBBox) {\n          rect = virtualText.node.getBoundingClientRect();\n        }\n\n        virtualText.remove();\n        return {\n          width: rect.width,\n          height: rect.height\n        };\n      }\n      /**\n       * append ... to long text\n       * http://stackoverflow.com/questions/9241315/trimming-text-to-a-given-pixel-width-in-svg\n       * @memberof Graphics\n       **/\n\n    }, {\n      key: \"placeTextWithEllipsis\",\n      value: function placeTextWithEllipsis(textObj, textString, width) {\n        textObj.textContent = textString;\n\n        if (textString.length > 0) {\n          // ellipsis is needed\n          if (textObj.getComputedTextLength() >= width) {\n            for (var x = textString.length - 3; x > 0; x -= 3) {\n              if (textObj.getSubStringLength(0, x) <= width) {\n                textObj.textContent = textString.substring(0, x) + '...';\n                return;\n              }\n            }\n\n            textObj.textContent = '...'; // can't place at all\n          }\n        }\n      }\n    }], [{\n      key: \"setAttrs\",\n      value: function setAttrs(el, attrs) {\n        for (var key in attrs) {\n          if (attrs.hasOwnProperty(key)) {\n            el.setAttribute(key, attrs[key]);\n          }\n        }\n      }\n    }]);\n\n    return Graphics;\n  }();\n\n  const name = \"en\";\n  const options = {\n  \tmonths: [\n  \t\t\"January\",\n  \t\t\"February\",\n  \t\t\"March\",\n  \t\t\"April\",\n  \t\t\"May\",\n  \t\t\"June\",\n  \t\t\"July\",\n  \t\t\"August\",\n  \t\t\"September\",\n  \t\t\"October\",\n  \t\t\"November\",\n  \t\t\"December\"\n  \t],\n  \tshortMonths: [\n  \t\t\"Jan\",\n  \t\t\"Feb\",\n  \t\t\"Mar\",\n  \t\t\"Apr\",\n  \t\t\"May\",\n  \t\t\"Jun\",\n  \t\t\"Jul\",\n  \t\t\"Aug\",\n  \t\t\"Sep\",\n  \t\t\"Oct\",\n  \t\t\"Nov\",\n  \t\t\"Dec\"\n  \t],\n  \tdays: [\n  \t\t\"Sunday\",\n  \t\t\"Monday\",\n  \t\t\"Tuesday\",\n  \t\t\"Wednesday\",\n  \t\t\"Thursday\",\n  \t\t\"Friday\",\n  \t\t\"Saturday\"\n  \t],\n  \tshortDays: [\n  \t\t\"Sun\",\n  \t\t\"Mon\",\n  \t\t\"Tue\",\n  \t\t\"Wed\",\n  \t\t\"Thu\",\n  \t\t\"Fri\",\n  \t\t\"Sat\"\n  \t],\n  \ttoolbar: {\n  \t\texportToSVG: \"Download SVG\",\n  \t\texportToPNG: \"Download PNG\",\n  \t\tmenu: \"Menu\",\n  \t\tselection: \"Selection\",\n  \t\tselectionZoom: \"Selection Zoom\",\n  \t\tzoomIn: \"Zoom In\",\n  \t\tzoomOut: \"Zoom Out\",\n  \t\tpan: \"Panning\",\n  \t\treset: \"Reset Zoom\"\n  \t}\n  };\n  var en = {\n  \tname: name,\n  \toptions: options\n  };\n\n  var Options =\n  /*#__PURE__*/\n  function () {\n    function Options() {\n      _classCallCheck(this, Options);\n\n      this.yAxis = {\n        show: true,\n        showAlways: false,\n        seriesName: undefined,\n        opposite: false,\n        reversed: false,\n        logarithmic: false,\n        tickAmount: undefined,\n        forceNiceScale: false,\n        max: undefined,\n        min: undefined,\n        floating: false,\n        decimalsInFloat: undefined,\n        labels: {\n          show: true,\n          minWidth: 0,\n          maxWidth: 160,\n          offsetX: 0,\n          offsetY: 0,\n          align: undefined,\n          rotate: 0,\n          padding: 20,\n          style: {\n            colors: [],\n            fontSize: '11px',\n            fontFamily: undefined,\n            cssClass: ''\n          },\n          formatter: undefined\n        },\n        axisBorder: {\n          show: false,\n          color: '#78909C',\n          offsetX: 0,\n          offsetY: 0\n        },\n        axisTicks: {\n          show: false,\n          color: '#78909C',\n          width: 6,\n          offsetX: 0,\n          offsetY: 0\n        },\n        title: {\n          text: undefined,\n          rotate: 90,\n          offsetY: 0,\n          offsetX: 0,\n          style: {\n            color: undefined,\n            fontSize: '11px',\n            fontFamily: undefined,\n            cssClass: ''\n          }\n        },\n        tooltip: {\n          enabled: false,\n          offsetX: 0\n        },\n        crosshairs: {\n          show: true,\n          position: 'front',\n          stroke: {\n            color: '#b6b6b6',\n            width: 1,\n            dashArray: 0\n          }\n        }\n      };\n      this.xAxisAnnotation = {\n        x: 0,\n        x2: null,\n        strokeDashArray: 1,\n        fillColor: '#c2c2c2',\n        borderColor: '#c2c2c2',\n        opacity: 0.3,\n        offsetX: 0,\n        offsetY: 0,\n        label: {\n          borderColor: '#c2c2c2',\n          borderWidth: 1,\n          text: undefined,\n          textAnchor: 'middle',\n          orientation: 'vertical',\n          position: 'top',\n          offsetX: 0,\n          offsetY: 0,\n          style: {\n            background: '#fff',\n            color: undefined,\n            fontSize: '11px',\n            fontFamily: undefined,\n            cssClass: '',\n            padding: {\n              left: 5,\n              right: 5,\n              top: 2,\n              bottom: 2\n            }\n          }\n        }\n      };\n      this.yAxisAnnotation = {\n        y: 0,\n        y2: null,\n        strokeDashArray: 1,\n        fillColor: '#c2c2c2',\n        borderColor: '#c2c2c2',\n        opacity: 0.3,\n        offsetX: 0,\n        offsetY: 0,\n        yAxisIndex: 0,\n        label: {\n          borderColor: '#c2c2c2',\n          borderWidth: 1,\n          text: undefined,\n          textAnchor: 'end',\n          position: 'right',\n          offsetX: 0,\n          offsetY: -3,\n          style: {\n            background: '#fff',\n            color: undefined,\n            fontSize: '11px',\n            fontFamily: undefined,\n            cssClass: '',\n            padding: {\n              left: 5,\n              right: 5,\n              top: 0,\n              bottom: 2\n            }\n          }\n        }\n      };\n      this.pointAnnotation = {\n        x: 0,\n        y: null,\n        yAxisIndex: 0,\n        seriesIndex: 0,\n        marker: {\n          size: 4,\n          fillColor: '#fff',\n          strokeWidth: 2,\n          strokeColor: '#333',\n          shape: 'circle',\n          offsetX: 0,\n          offsetY: 0,\n          radius: 2,\n          cssClass: ''\n        },\n        label: {\n          borderColor: '#c2c2c2',\n          borderWidth: 1,\n          text: undefined,\n          textAnchor: 'middle',\n          offsetX: 0,\n          offsetY: -15,\n          style: {\n            background: '#fff',\n            color: undefined,\n            fontSize: '11px',\n            fontFamily: undefined,\n            cssClass: '',\n            padding: {\n              left: 5,\n              right: 5,\n              top: 0,\n              bottom: 2\n            }\n          }\n        },\n        customSVG: {\n          SVG: undefined,\n          cssClass: undefined,\n          offsetX: 0,\n          offsetY: 0\n        }\n      };\n    }\n\n    _createClass(Options, [{\n      key: \"init\",\n      value: function init() {\n        return {\n          annotations: {\n            position: 'front',\n            yaxis: [this.yAxisAnnotation],\n            xaxis: [this.xAxisAnnotation],\n            points: [this.pointAnnotation]\n          },\n          chart: {\n            animations: {\n              enabled: true,\n              easing: 'easeinout',\n              // linear, easeout, easein, easeinout, swing, bounce, elastic\n              speed: 800,\n              animateGradually: {\n                delay: 150,\n                enabled: true\n              },\n              dynamicAnimation: {\n                enabled: true,\n                speed: 350\n              }\n            },\n            background: 'transparent',\n            locales: [en],\n            defaultLocale: 'en',\n            dropShadow: {\n              enabled: false,\n              enabledSeries: undefined,\n              top: 2,\n              left: 2,\n              blur: 4,\n              color: '#000',\n              opacity: 0.35\n            },\n            events: {\n              animationEnd: undefined,\n              beforeMount: undefined,\n              mounted: undefined,\n              updated: undefined,\n              click: undefined,\n              mouseMove: undefined,\n              legendClick: undefined,\n              markerClick: undefined,\n              selection: undefined,\n              dataPointSelection: undefined,\n              dataPointMouseEnter: undefined,\n              dataPointMouseLeave: undefined,\n              beforeZoom: undefined,\n              zoomed: undefined,\n              scrolled: undefined\n            },\n            foreColor: '#373d3f',\n            fontFamily: 'Helvetica, Arial, sans-serif',\n            height: 'auto',\n            parentHeightOffset: 15,\n            id: undefined,\n            group: undefined,\n            offsetX: 0,\n            offsetY: 0,\n            selection: {\n              enabled: false,\n              type: 'x',\n              // selectedPoints: undefined, // default datapoints that should be selected automatically\n              fill: {\n                color: '#24292e',\n                opacity: 0.1\n              },\n              stroke: {\n                width: 1,\n                color: '#24292e',\n                opacity: 0.4,\n                dashArray: 3\n              },\n              xaxis: {\n                min: undefined,\n                max: undefined\n              },\n              yaxis: {\n                min: undefined,\n                max: undefined\n              }\n            },\n            sparkline: {\n              enabled: false\n            },\n            brush: {\n              enabled: false,\n              autoScaleYaxis: true,\n              target: undefined\n            },\n            stacked: false,\n            stackType: 'normal',\n            toolbar: {\n              show: true,\n              tools: {\n                download: true,\n                selection: true,\n                zoom: true,\n                zoomin: true,\n                zoomout: true,\n                pan: true,\n                reset: true,\n                customIcons: []\n              },\n              autoSelected: 'zoom' // accepts -> zoom, pan, selection\n\n            },\n            type: 'line',\n            width: '100%',\n            zoom: {\n              enabled: true,\n              type: 'x',\n              autoScaleYaxis: false,\n              zoomedArea: {\n                fill: {\n                  color: '#90CAF9',\n                  opacity: 0.4\n                },\n                stroke: {\n                  color: '#0D47A1',\n                  opacity: 0.4,\n                  width: 1\n                }\n              }\n            }\n          },\n          plotOptions: {\n            bar: {\n              horizontal: false,\n              columnWidth: '70%',\n              // should be in percent 0 - 100\n              barHeight: '70%',\n              // should be in percent 0 - 100\n              distributed: false,\n              endingShape: 'flat',\n              colors: {\n                ranges: [],\n                backgroundBarColors: [],\n                backgroundBarOpacity: 1\n              },\n              dataLabels: {\n                maxItems: 100,\n                hideOverflowingLabels: true,\n                position: 'top' // top, center, bottom\n                // TODO: provide stackedLabels for stacked charts which gives additions of values\n\n              }\n            },\n            candlestick: {\n              colors: {\n                upward: '#00B746',\n                downward: '#EF403C'\n              },\n              wick: {\n                useFillColor: true\n              }\n            },\n            heatmap: {\n              radius: 2,\n              enableShades: true,\n              shadeIntensity: 0.5,\n              reverseNegativeShade: true,\n              distributed: false,\n              colorScale: {\n                inverse: false,\n                ranges: [],\n                min: undefined,\n                max: undefined\n              }\n            },\n            radialBar: {\n              size: undefined,\n              inverseOrder: false,\n              startAngle: 0,\n              endAngle: 360,\n              offsetX: 0,\n              offsetY: 0,\n              hollow: {\n                margin: 5,\n                size: '50%',\n                background: 'transparent',\n                image: undefined,\n                imageWidth: 150,\n                imageHeight: 150,\n                imageOffsetX: 0,\n                imageOffsetY: 0,\n                imageClipped: true,\n                position: 'front',\n                dropShadow: {\n                  enabled: false,\n                  top: 0,\n                  left: 0,\n                  blur: 3,\n                  color: '#000',\n                  opacity: 0.5\n                }\n              },\n              track: {\n                show: true,\n                startAngle: undefined,\n                endAngle: undefined,\n                background: '#f2f2f2',\n                strokeWidth: '97%',\n                opacity: 1,\n                margin: 5,\n                // margin is in pixels\n                dropShadow: {\n                  enabled: false,\n                  top: 0,\n                  left: 0,\n                  blur: 3,\n                  color: '#000',\n                  opacity: 0.5\n                }\n              },\n              dataLabels: {\n                show: true,\n                name: {\n                  show: true,\n                  fontSize: '16px',\n                  fontFamily: undefined,\n                  color: undefined,\n                  offsetY: 0\n                },\n                value: {\n                  show: true,\n                  fontSize: '14px',\n                  fontFamily: undefined,\n                  color: undefined,\n                  offsetY: 16,\n                  formatter: function formatter(val) {\n                    return val + '%';\n                  }\n                },\n                total: {\n                  show: false,\n                  label: 'Total',\n                  color: undefined,\n                  formatter: function formatter(w) {\n                    return w.globals.seriesTotals.reduce(function (a, b) {\n                      return a + b;\n                    }, 0) / w.globals.series.length + '%';\n                  }\n                }\n              }\n            },\n            rangeBar: {},\n            pie: {\n              size: undefined,\n              customScale: 1,\n              offsetX: 0,\n              offsetY: 0,\n              expandOnClick: true,\n              dataLabels: {\n                // These are the percentage values which are displayed on slice\n                offset: 0,\n                // offset by which labels will move outside\n                minAngleToShowLabel: 10\n              },\n              donut: {\n                size: '65%',\n                background: 'transparent',\n                labels: {\n                  // These are the inner labels appearing inside donut\n                  show: false,\n                  name: {\n                    show: true,\n                    fontSize: '16px',\n                    fontFamily: undefined,\n                    color: undefined,\n                    offsetY: -10\n                  },\n                  value: {\n                    show: true,\n                    fontSize: '20px',\n                    fontFamily: undefined,\n                    color: undefined,\n                    offsetY: 10,\n                    formatter: function formatter(val) {\n                      return val;\n                    }\n                  },\n                  total: {\n                    show: false,\n                    label: 'Total',\n                    color: undefined,\n                    formatter: function formatter(w) {\n                      return w.globals.seriesTotals.reduce(function (a, b) {\n                        return a + b;\n                      }, 0);\n                    }\n                  }\n                }\n              }\n            },\n            radar: {\n              size: undefined,\n              offsetX: 0,\n              offsetY: 0,\n              polygons: {\n                // strokeColor: '#e8e8e8', // should be deprecated in the minor version i.e 3.2\n                strokeColors: '#e8e8e8',\n                connectorColors: '#e8e8e8',\n                fill: {\n                  colors: undefined\n                }\n              }\n            }\n          },\n          colors: undefined,\n          dataLabels: {\n            enabled: true,\n            enabledOnSeries: undefined,\n            formatter: function formatter(val) {\n              return val !== null ? val : '';\n            },\n            textAnchor: 'middle',\n            offsetX: 0,\n            offsetY: 0,\n            style: {\n              fontSize: '12px',\n              fontFamily: undefined,\n              colors: undefined\n            },\n            dropShadow: {\n              enabled: false,\n              top: 1,\n              left: 1,\n              blur: 1,\n              color: '#000',\n              opacity: 0.45\n            }\n          },\n          fill: {\n            type: 'solid',\n            colors: undefined,\n            // array of colors\n            opacity: 0.85,\n            gradient: {\n              shade: 'dark',\n              type: 'horizontal',\n              shadeIntensity: 0.5,\n              gradientToColors: undefined,\n              inverseColors: true,\n              opacityFrom: 1,\n              opacityTo: 1,\n              stops: [0, 50, 100],\n              colorStops: []\n            },\n            image: {\n              src: [],\n              width: undefined,\n              // optional\n              height: undefined // optional\n\n            },\n            pattern: {\n              style: 'sqaures',\n              // String | Array of Strings\n              width: 6,\n              height: 6,\n              strokeWidth: 2\n            }\n          },\n          grid: {\n            show: true,\n            borderColor: '#e0e0e0',\n            strokeDashArray: 0,\n            position: 'back',\n            xaxis: {\n              lines: {\n                show: false,\n                animate: false\n              }\n            },\n            yaxis: {\n              lines: {\n                show: true,\n                animate: false\n              }\n            },\n            row: {\n              colors: undefined,\n              // takes as array which will be repeated on rows\n              opacity: 0.5\n            },\n            column: {\n              colors: undefined,\n              // takes an array which will be repeated on columns\n              opacity: 0.5\n            },\n            padding: {\n              top: 0,\n              right: 10,\n              bottom: 0,\n              left: 12\n            }\n          },\n          labels: [],\n          legend: {\n            show: true,\n            showForSingleSeries: false,\n            showForNullSeries: true,\n            showForZeroSeries: true,\n            floating: false,\n            position: 'bottom',\n            // whether to position legends in 1 of 4\n            // direction - top, bottom, left, right\n            horizontalAlign: 'center',\n            // when position top/bottom, you can specify whether to align legends left, right or center\n            inverseOrder: false,\n            fontSize: '12px',\n            fontFamily: undefined,\n            width: undefined,\n            height: undefined,\n            formatter: undefined,\n            tooltipHoverFormatter: undefined,\n            offsetX: -20,\n            offsetY: 0,\n            labels: {\n              colors: undefined,\n              useSeriesColors: false\n            },\n            markers: {\n              width: 12,\n              height: 12,\n              strokeWidth: 0,\n              strokeColor: '#fff',\n              radius: 12,\n              customHTML: undefined,\n              offsetX: 0,\n              offsetY: 0,\n              onClick: undefined\n            },\n            itemMargin: {\n              horizontal: 0,\n              vertical: 5\n            },\n            onItemClick: {\n              toggleDataSeries: true\n            },\n            onItemHover: {\n              highlightDataSeries: true\n            }\n          },\n          markers: {\n            discrete: [],\n            size: 0,\n            colors: undefined,\n            //strokeColor: '#fff', // TODO: deprecate in major version 4.0\n            strokeColors: '#fff',\n            strokeWidth: 2,\n            strokeOpacity: 0.9,\n            fillOpacity: 1,\n            shape: 'circle',\n            radius: 2,\n            offsetX: 0,\n            offsetY: 0,\n            onClick: undefined,\n            onDblClick: undefined,\n            hover: {\n              size: undefined,\n              sizeOffset: 3\n            }\n          },\n          noData: {\n            text: undefined,\n            align: 'center',\n            verticalAlign: 'middle',\n            offsetX: 0,\n            offsetY: 0,\n            style: {\n              color: undefined,\n              fontSize: '14px',\n              fontFamily: undefined\n            }\n          },\n          responsive: [],\n          // breakpoints should follow ascending order 400, then 700, then 1000\n          series: undefined,\n          states: {\n            normal: {\n              filter: {\n                type: 'none',\n                value: 0\n              }\n            },\n            hover: {\n              filter: {\n                type: 'lighten',\n                value: 0.15\n              }\n            },\n            active: {\n              allowMultipleDataPointsSelection: false,\n              filter: {\n                type: 'darken',\n                value: 0.65\n              }\n            }\n          },\n          title: {\n            text: undefined,\n            align: 'left',\n            margin: 10,\n            offsetX: 0,\n            offsetY: 0,\n            floating: false,\n            style: {\n              fontSize: '14px',\n              fontFamily: undefined,\n              color: undefined\n            }\n          },\n          subtitle: {\n            text: undefined,\n            align: 'left',\n            margin: 10,\n            offsetX: 0,\n            offsetY: 30,\n            floating: false,\n            style: {\n              fontSize: '12px',\n              fontFamily: undefined,\n              color: undefined\n            }\n          },\n          stroke: {\n            show: true,\n            curve: 'smooth',\n            // \"smooth\" / \"straight\" / \"stepline\"\n            lineCap: 'butt',\n            // round, butt , square\n            width: 2,\n            colors: undefined,\n            // array of colors\n            dashArray: 0 // single value or array of values\n\n          },\n          tooltip: {\n            enabled: true,\n            enabledOnSeries: undefined,\n            shared: true,\n            followCursor: false,\n            // when disabled, the tooltip will show on top of the series instead of mouse position\n            intersect: false,\n            // when enabled, tooltip will only show when user directly hovers over point\n            inverseOrder: false,\n            custom: undefined,\n            fillSeriesColor: false,\n            theme: 'light',\n            style: {\n              fontSize: '12px',\n              fontFamily: undefined\n            },\n            onDatasetHover: {\n              highlightDataSeries: false\n            },\n            x: {\n              // x value\n              show: true,\n              format: 'dd MMM',\n              // dd/MM, dd MMM yy, dd MMM yyyy\n              formatter: undefined // a custom user supplied formatter function\n\n            },\n            y: {\n              formatter: undefined,\n              title: {\n                formatter: function formatter(seriesName) {\n                  return seriesName;\n                }\n              }\n            },\n            z: {\n              formatter: undefined,\n              title: 'Size: '\n            },\n            marker: {\n              show: true\n            },\n            items: {\n              display: 'flex'\n            },\n            fixed: {\n              enabled: false,\n              position: 'topRight',\n              // topRight, topLeft, bottomRight, bottomLeft\n              offsetX: 0,\n              offsetY: 0\n            }\n          },\n          xaxis: {\n            type: 'category',\n            categories: [],\n            offsetX: 0,\n            offsetY: 0,\n            labels: {\n              show: true,\n              rotate: -45,\n              rotateAlways: false,\n              hideOverlappingLabels: true,\n              trim: true,\n              minHeight: undefined,\n              maxHeight: 120,\n              showDuplicates: true,\n              style: {\n                colors: [],\n                fontSize: '12px',\n                fontFamily: undefined,\n                cssClass: ''\n              },\n              offsetX: 0,\n              offsetY: 0,\n              format: undefined,\n              formatter: undefined,\n              // custom formatter function which will override format\n              datetimeFormatter: {\n                year: 'yyyy',\n                month: \"MMM 'yy\",\n                day: 'dd MMM',\n                hour: 'HH:mm',\n                minute: 'HH:mm:ss'\n              }\n            },\n            axisBorder: {\n              show: true,\n              color: '#78909C',\n              width: '100%',\n              height: 1,\n              offsetX: 0,\n              offsetY: 0\n            },\n            axisTicks: {\n              show: true,\n              color: '#78909C',\n              height: 6,\n              offsetX: 0,\n              offsetY: 0\n            },\n            tickAmount: undefined,\n            tickPlacement: 'on',\n            min: undefined,\n            max: undefined,\n            range: undefined,\n            floating: false,\n            position: 'bottom',\n            title: {\n              text: undefined,\n              offsetX: 0,\n              offsetY: 0,\n              style: {\n                color: undefined,\n                fontSize: '12px',\n                fontFamily: undefined,\n                cssClass: ''\n              }\n            },\n            crosshairs: {\n              show: true,\n              width: 1,\n              // tickWidth/barWidth or an integer\n              position: 'back',\n              opacity: 0.9,\n              stroke: {\n                color: '#b6b6b6',\n                width: 1,\n                dashArray: 3\n              },\n              fill: {\n                type: 'solid',\n                // solid, gradient\n                color: '#B1B9C4',\n                gradient: {\n                  colorFrom: '#D8E3F0',\n                  colorTo: '#BED1E6',\n                  stops: [0, 100],\n                  opacityFrom: 0.4,\n                  opacityTo: 0.5\n                }\n              },\n              dropShadow: {\n                enabled: false,\n                left: 0,\n                top: 0,\n                blur: 1,\n                opacity: 0.4\n              }\n            },\n            tooltip: {\n              enabled: true,\n              offsetY: 0,\n              formatter: undefined,\n              style: {\n                fontSize: '12px',\n                fontFamily: undefined\n              }\n            }\n          },\n          yaxis: this.yAxis,\n          theme: {\n            mode: 'light',\n            palette: 'palette1',\n            // If defined, it will overwrite globals.colors variable\n            monochrome: {\n              // monochrome allows you to select just 1 color and fill out the rest with light/dark shade (intensity can be selected)\n              enabled: false,\n              color: '#008FFB',\n              shadeTo: 'light',\n              shadeIntensity: 0.65\n            }\n          }\n        };\n      }\n    }]);\n\n    return Options;\n  }();\n\n  /**\n   * ApexCharts Annotations Class for drawing lines/rects on both xaxis and yaxis.\n   *\n   * @module Annotations\n   **/\n\n  var Annotations =\n  /*#__PURE__*/\n  function () {\n    function Annotations(ctx) {\n      _classCallCheck(this, Annotations);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n      this.graphics = new Graphics(this.ctx);\n\n      if (this.w.globals.isBarHorizontal) {\n        this.invertAxis = true;\n      }\n\n      this.xDivision = this.w.globals.gridWidth / this.w.globals.dataPoints;\n    }\n\n    _createClass(Annotations, [{\n      key: \"drawAnnotations\",\n      value: function drawAnnotations() {\n        var w = this.w;\n\n        if (w.globals.axisCharts) {\n          var yAnnotations = this.drawYAxisAnnotations();\n          var xAnnotations = this.drawXAxisAnnotations();\n          var pointAnnotations = this.drawPointAnnotations();\n          var initialAnim = w.config.chart.animations.enabled;\n          var annoArray = [yAnnotations, xAnnotations, pointAnnotations];\n          var annoElArray = [xAnnotations.node, yAnnotations.node, pointAnnotations.node];\n\n          for (var i = 0; i < 3; i++) {\n            w.globals.dom.elGraphical.add(annoArray[i]);\n\n            if (initialAnim && !w.globals.resized && !w.globals.dataChanged) {\n              // fixes apexcharts/apexcharts.js#685\n              if (w.config.chart.type !== 'scatter' && w.config.chart.type !== 'bubble') {\n                annoElArray[i].classList.add('hidden');\n              }\n            }\n\n            w.globals.delayedElements.push({\n              el: annoElArray[i],\n              index: 0\n            });\n          } // background sizes needs to be calculated after text is drawn, so calling them last\n\n\n          this.annotationsBackground();\n        }\n      }\n    }, {\n      key: \"getStringX\",\n      value: function getStringX(x) {\n        var w = this.w;\n        var rX = x;\n        var catIndex = w.globals.labels.indexOf(x);\n        var xLabel = w.globals.dom.baseEl.querySelector('.apexcharts-xaxis-texts-g text:nth-child(' + (catIndex + 1) + ')');\n\n        if (xLabel) {\n          rX = parseFloat(xLabel.getAttribute('x'));\n        }\n\n        return rX;\n      }\n    }, {\n      key: \"addXaxisAnnotation\",\n      value: function addXaxisAnnotation(anno, parent, index) {\n        var w = this.w;\n        var min = this.invertAxis ? w.globals.minY : w.globals.minX;\n        var range = this.invertAxis ? w.globals.yRange[0] : w.globals.xRange;\n        var x1 = (anno.x - min) / (range / w.globals.gridWidth);\n        var text = anno.label.text;\n\n        if ((w.config.xaxis.type === 'category' || w.config.xaxis.convertedCatToNumeric) && !this.invertAxis && !w.globals.isXNumeric) {\n          x1 = this.getStringX(anno.x);\n        }\n\n        var strokeDashArray = anno.strokeDashArray;\n        if (x1 < 0 || x1 > w.globals.gridWidth) return;\n\n        if (anno.x2 === null) {\n          var line = this.graphics.drawLine(x1 + anno.offsetX, // x1\n          0 + anno.offsetY, // y1\n          x1 + anno.offsetX, // x2\n          w.globals.gridHeight + anno.offsetY, // y2\n          anno.borderColor, // lineColor\n          strokeDashArray //dashArray\n          );\n          parent.appendChild(line.node);\n        } else {\n          var x2 = (anno.x2 - min) / (range / w.globals.gridWidth);\n\n          if ((w.config.xaxis.type === 'category' || w.config.xaxis.convertedCatToNumeric) && !this.invertAxis && !w.globals.isXNumeric) {\n            x2 = this.getStringX(anno.x2);\n          }\n\n          if (x2 < x1) {\n            var temp = x1;\n            x1 = x2;\n            x2 = temp;\n          }\n\n          if (text) {\n            var rect = this.graphics.drawRect(x1 + anno.offsetX, // x1\n            0 + anno.offsetY, // y1\n            x2 - x1, // x2\n            w.globals.gridHeight + anno.offsetY, // y2\n            0, // radius\n            anno.fillColor, // color\n            anno.opacity, // opacity,\n            1, // strokeWidth\n            anno.borderColor, // strokeColor\n            strokeDashArray // stokeDashArray\n            );\n            parent.appendChild(rect.node);\n          }\n        }\n\n        var textY = anno.label.position === 'top' ? -3 : w.globals.gridHeight;\n        var elText = this.graphics.drawText({\n          x: x1 + anno.label.offsetX,\n          y: textY + anno.label.offsetY,\n          text: text,\n          textAnchor: anno.label.textAnchor,\n          fontSize: anno.label.style.fontSize,\n          fontFamily: anno.label.style.fontFamily,\n          foreColor: anno.label.style.color,\n          cssClass: 'apexcharts-xaxis-annotation-label ' + anno.label.style.cssClass\n        });\n        elText.attr({\n          rel: index\n        });\n        parent.appendChild(elText.node); // after placing the annotations on svg, set any vertically placed annotations\n\n        this.setOrientations(anno, index);\n      }\n    }, {\n      key: \"drawXAxisAnnotations\",\n      value: function drawXAxisAnnotations() {\n        var _this = this;\n\n        var w = this.w;\n        var elg = this.graphics.group({\n          class: 'apexcharts-xaxis-annotations'\n        });\n        w.config.annotations.xaxis.map(function (anno, index) {\n          _this.addXaxisAnnotation(anno, elg.node, index);\n        });\n        return elg;\n      }\n    }, {\n      key: \"addYaxisAnnotation\",\n      value: function addYaxisAnnotation(anno, parent, index) {\n        var w = this.w;\n        var strokeDashArray = anno.strokeDashArray;\n        var y1;\n        var y2;\n\n        if (this.invertAxis) {\n          var catIndex = w.globals.labels.indexOf(anno.y);\n          var xLabel = w.globals.dom.baseEl.querySelector('.apexcharts-yaxis-texts-g text:nth-child(' + (catIndex + 1) + ')');\n\n          if (xLabel) {\n            y1 = parseFloat(xLabel.getAttribute('y'));\n          }\n        } else {\n          y1 = w.globals.gridHeight - (anno.y - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight);\n\n          if (w.config.yaxis[anno.yAxisIndex] && w.config.yaxis[anno.yAxisIndex].reversed) {\n            y1 = (anno.y - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight);\n          }\n        }\n\n        var text = anno.label.text;\n\n        if (anno.y2 === null) {\n          var line = this.graphics.drawLine(0 + anno.offsetX, // x1\n          y1 + anno.offsetY, // y1\n          w.globals.gridWidth + anno.offsetX, // x2\n          y1 + anno.offsetY, // y2\n          anno.borderColor, // lineColor\n          strokeDashArray // dashArray\n          );\n          parent.appendChild(line.node);\n        } else {\n          if (this.invertAxis) {\n            var _catIndex = w.globals.labels.indexOf(anno.y2);\n\n            var _xLabel = w.globals.dom.baseEl.querySelector('.apexcharts-yaxis-texts-g text:nth-child(' + (_catIndex + 1) + ')');\n\n            if (_xLabel) {\n              y2 = parseFloat(_xLabel.getAttribute('y'));\n            }\n          } else {\n            y2 = w.globals.gridHeight - (anno.y2 - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight);\n\n            if (w.config.yaxis[anno.yAxisIndex] && w.config.yaxis[anno.yAxisIndex].reversed) {\n              y2 = (anno.y2 - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight);\n            }\n          }\n\n          if (y2 > y1) {\n            var temp = y1;\n            y1 = y2;\n            y2 = temp;\n          }\n\n          if (text) {\n            var rect = this.graphics.drawRect(0 + anno.offsetX, // x1\n            y2 + anno.offsetY, // y1\n            w.globals.gridWidth + anno.offsetX, // x2\n            y1 - y2, // y2\n            0, // radius\n            anno.fillColor, // color\n            anno.opacity, // opacity,\n            1, // strokeWidth\n            anno.borderColor, // strokeColor\n            strokeDashArray // stokeDashArray\n            );\n            parent.appendChild(rect.node);\n          }\n        }\n\n        var textX = anno.label.position === 'right' ? w.globals.gridWidth : 0;\n        var elText = this.graphics.drawText({\n          x: textX + anno.label.offsetX,\n          y: (y2 || y1) + anno.label.offsetY - 3,\n          text: text,\n          textAnchor: anno.label.textAnchor,\n          fontSize: anno.label.style.fontSize,\n          fontFamily: anno.label.style.fontFamily,\n          foreColor: anno.label.style.color,\n          cssClass: 'apexcharts-yaxis-annotation-label ' + anno.label.style.cssClass\n        });\n        elText.attr({\n          rel: index\n        });\n        parent.appendChild(elText.node);\n      }\n    }, {\n      key: \"drawYAxisAnnotations\",\n      value: function drawYAxisAnnotations() {\n        var _this2 = this;\n\n        var w = this.w;\n        var elg = this.graphics.group({\n          class: 'apexcharts-yaxis-annotations'\n        });\n        w.config.annotations.yaxis.map(function (anno, index) {\n          _this2.addYaxisAnnotation(anno, elg.node, index);\n        });\n        return elg;\n      }\n    }, {\n      key: \"clearAnnotations\",\n      value: function clearAnnotations(ctx) {\n        var w = ctx.w;\n        var annos = w.globals.dom.baseEl.querySelectorAll('.apexcharts-yaxis-annotations, .apexcharts-xaxis-annotations, .apexcharts-point-annotations');\n        annos = Utils.listToArray(annos);\n        annos.forEach(function (a) {\n          while (a.firstChild) {\n            a.removeChild(a.firstChild);\n          }\n        });\n      }\n    }, {\n      key: \"addPointAnnotation\",\n      value: function addPointAnnotation(anno, parent, index) {\n        var w = this.w;\n        var x = 0;\n        var y = 0;\n        var pointY = 0;\n\n        if (this.invertAxis) {\n          console.warn('Point annotation is not supported in horizontal bar charts.');\n        }\n\n        if (typeof anno.x === 'string') {\n          var catIndex = w.globals.labels.indexOf(anno.x);\n          var xLabel = w.globals.dom.baseEl.querySelector('.apexcharts-xaxis-texts-g text:nth-child(' + (catIndex + 1) + ')');\n          var xPos = parseFloat(xLabel.getAttribute('x'));\n          x = xPos;\n          var annoY = anno.y;\n\n          if (anno.y === null) {\n            annoY = w.globals.series[anno.seriesIndex][catIndex];\n          }\n\n          y = w.globals.gridHeight - (annoY - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight) - parseInt(anno.label.style.fontSize) - anno.marker.size;\n          pointY = w.globals.gridHeight - (annoY - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight);\n\n          if (w.config.yaxis[anno.yAxisIndex] && w.config.yaxis[anno.yAxisIndex].reversed) {\n            y = (annoY - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight) + parseInt(anno.label.style.fontSize) + anno.marker.size;\n            pointY = (annoY - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight);\n          }\n        } else {\n          x = (anno.x - w.globals.minX) / (w.globals.xRange / w.globals.gridWidth);\n          y = w.globals.gridHeight - (parseFloat(anno.y) - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight) - parseInt(anno.label.style.fontSize) - anno.marker.size;\n          pointY = w.globals.gridHeight - (anno.y - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight);\n\n          if (w.config.yaxis[anno.yAxisIndex] && w.config.yaxis[anno.yAxisIndex].reversed) {\n            y = (parseFloat(anno.y) - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight) - parseInt(anno.label.style.fontSize) - anno.marker.size;\n            pointY = (anno.y - w.globals.minYArr[anno.yAxisIndex]) / (w.globals.yRange[anno.yAxisIndex] / w.globals.gridHeight);\n          }\n        }\n\n        if (x < 0 || x > w.globals.gridWidth) return;\n        var optsPoints = {\n          pSize: anno.marker.size,\n          pWidth: anno.marker.strokeWidth,\n          pointFillColor: anno.marker.fillColor,\n          pointStrokeColor: anno.marker.strokeColor,\n          shape: anno.marker.shape,\n          radius: anno.marker.radius,\n          class: 'apexcharts-point-annotation-marker ' + anno.marker.cssClass\n        };\n        var point = this.graphics.drawMarker(x + anno.marker.offsetX, pointY + anno.marker.offsetY, optsPoints);\n        parent.appendChild(point.node);\n        var text = anno.label.text ? anno.label.text : '';\n        var elText = this.graphics.drawText({\n          x: x + anno.label.offsetX,\n          y: y + anno.label.offsetY,\n          text: text,\n          textAnchor: anno.label.textAnchor,\n          fontSize: anno.label.style.fontSize,\n          fontFamily: anno.label.style.fontFamily,\n          foreColor: anno.label.style.color,\n          cssClass: 'apexcharts-point-annotation-label ' + anno.label.style.cssClass\n        });\n        elText.attr({\n          rel: index\n        });\n        parent.appendChild(elText.node);\n\n        if (anno.customSVG.SVG) {\n          var g = this.graphics.group({\n            class: 'apexcharts-point-annotations-custom-svg ' + anno.customSVG.cssClass\n          });\n          g.attr({\n            transform: \"translate(\".concat(x + anno.customSVG.offsetX, \", \").concat(y + anno.customSVG.offsetY, \")\")\n          });\n          g.node.innerHTML = anno.customSVG.SVG;\n          parent.appendChild(g.node);\n        }\n      }\n    }, {\n      key: \"drawPointAnnotations\",\n      value: function drawPointAnnotations() {\n        var _this3 = this;\n\n        var w = this.w;\n        var elg = this.graphics.group({\n          class: 'apexcharts-point-annotations'\n        });\n        w.config.annotations.points.map(function (anno, index) {\n          _this3.addPointAnnotation(anno, elg.node, index);\n        });\n        return elg;\n      }\n    }, {\n      key: \"setOrientations\",\n      value: function setOrientations(anno) {\n        var annoIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n        var w = this.w;\n\n        if (anno.label.orientation === 'vertical') {\n          var i = annoIndex !== null ? annoIndex : 0;\n          var xAnno = w.globals.dom.baseEl.querySelector(\".apexcharts-xaxis-annotations .apexcharts-xaxis-annotation-label[rel='\".concat(i, \"']\"));\n\n          if (xAnno !== null) {\n            var xAnnoCoord = xAnno.getBoundingClientRect();\n            xAnno.setAttribute('x', parseFloat(xAnno.getAttribute('x')) - xAnnoCoord.height + 4);\n\n            if (anno.label.position === 'top') {\n              xAnno.setAttribute('y', parseFloat(xAnno.getAttribute('y')) + xAnnoCoord.width);\n            } else {\n              xAnno.setAttribute('y', parseFloat(xAnno.getAttribute('y')) - xAnnoCoord.width);\n            }\n\n            var annoRotatingCenter = this.graphics.rotateAroundCenter(xAnno);\n            var x = annoRotatingCenter.x;\n            var y = annoRotatingCenter.y;\n            xAnno.setAttribute('transform', \"rotate(-90 \".concat(x, \" \").concat(y, \")\"));\n          }\n        }\n      }\n    }, {\n      key: \"addBackgroundToAnno\",\n      value: function addBackgroundToAnno(annoEl, anno) {\n        var w = this.w;\n        if (!anno.label.text || anno.label.text && !anno.label.text.trim()) return null;\n        var elGridRect = w.globals.dom.baseEl.querySelector('.apexcharts-grid').getBoundingClientRect();\n        var coords = annoEl.getBoundingClientRect();\n        var pleft = anno.label.style.padding.left;\n        var pright = anno.label.style.padding.right;\n        var ptop = anno.label.style.padding.top;\n        var pbottom = anno.label.style.padding.bottom;\n\n        if (anno.label.orientation === 'vertical') {\n          ptop = anno.label.style.padding.left;\n          pbottom = anno.label.style.padding.right;\n          pleft = anno.label.style.padding.top;\n          pright = anno.label.style.padding.bottom;\n        }\n\n        var x1 = coords.left - elGridRect.left - pleft;\n        var y1 = coords.top - elGridRect.top - ptop;\n        var elRect = this.graphics.drawRect(x1, y1, coords.width + pleft + pright, coords.height + ptop + pbottom, 0, anno.label.style.background, 1, anno.label.borderWidth, anno.label.borderColor, 0);\n        return elRect;\n      }\n    }, {\n      key: \"annotationsBackground\",\n      value: function annotationsBackground() {\n        var _this4 = this;\n\n        var w = this.w;\n\n        var add = function add(anno, i, type) {\n          var annoLabel = w.globals.dom.baseEl.querySelector(\".apexcharts-\".concat(type, \"-annotations .apexcharts-\").concat(type, \"-annotation-label[rel='\").concat(i, \"']\"));\n\n          if (annoLabel) {\n            var parent = annoLabel.parentNode;\n\n            var elRect = _this4.addBackgroundToAnno(annoLabel, anno);\n\n            if (elRect) {\n              parent.insertBefore(elRect.node, annoLabel);\n            }\n          }\n        };\n\n        w.config.annotations.xaxis.map(function (anno, i) {\n          add(anno, i, 'xaxis');\n        });\n        w.config.annotations.yaxis.map(function (anno, i) {\n          add(anno, i, 'yaxis');\n        });\n        w.config.annotations.points.map(function (anno, i) {\n          add(anno, i, 'point');\n        });\n      }\n    }, {\n      key: \"addText\",\n      value: function addText(params, pushToMemory, context) {\n        var x = params.x,\n            y = params.y,\n            text = params.text,\n            textAnchor = params.textAnchor,\n            _params$appendTo = params.appendTo,\n            appendTo = _params$appendTo === void 0 ? '.apexcharts-inner' : _params$appendTo,\n            foreColor = params.foreColor,\n            fontSize = params.fontSize,\n            fontFamily = params.fontFamily,\n            cssClass = params.cssClass,\n            backgroundColor = params.backgroundColor,\n            borderWidth = params.borderWidth,\n            strokeDashArray = params.strokeDashArray,\n            radius = params.radius,\n            borderColor = params.borderColor,\n            _params$paddingLeft = params.paddingLeft,\n            paddingLeft = _params$paddingLeft === void 0 ? 4 : _params$paddingLeft,\n            _params$paddingRight = params.paddingRight,\n            paddingRight = _params$paddingRight === void 0 ? 4 : _params$paddingRight,\n            _params$paddingBottom = params.paddingBottom,\n            paddingBottom = _params$paddingBottom === void 0 ? 2 : _params$paddingBottom,\n            _params$paddingTop = params.paddingTop,\n            paddingTop = _params$paddingTop === void 0 ? 2 : _params$paddingTop;\n        var me = context;\n        var w = me.w;\n        var parentNode = w.globals.dom.baseEl.querySelector(appendTo);\n        var elText = this.graphics.drawText({\n          x: x,\n          y: y,\n          text: text,\n          textAnchor: textAnchor || 'start',\n          fontSize: fontSize || '12px',\n          fontFamily: fontFamily || w.config.chart.fontFamily,\n          foreColor: foreColor || w.config.chart.foreColor,\n          cssClass: 'apexcharts-text ' + cssClass ? cssClass : ''\n        });\n        parentNode.appendChild(elText.node);\n        var textRect = elText.bbox();\n\n        if (text) {\n          var elRect = this.graphics.drawRect(textRect.x - paddingLeft, textRect.y - paddingTop, textRect.width + paddingLeft + paddingRight, textRect.height + paddingBottom + paddingTop, radius, backgroundColor, 1, borderWidth, borderColor, strokeDashArray);\n          elText.before(elRect);\n        }\n\n        if (pushToMemory) {\n          w.globals.memory.methodsToExec.push({\n            context: me,\n            method: me.addText,\n            params: {\n              x: x,\n              y: y,\n              text: text,\n              textAnchor: textAnchor,\n              appendTo: appendTo,\n              foreColor: foreColor,\n              fontSize: fontSize,\n              cssClass: cssClass,\n              backgroundColor: backgroundColor,\n              borderWidth: borderWidth,\n              strokeDashArray: strokeDashArray,\n              radius: radius,\n              borderColor: borderColor,\n              paddingLeft: paddingLeft,\n              paddingRight: paddingRight,\n              paddingBottom: paddingBottom,\n              paddingTop: paddingTop\n            }\n          });\n        }\n\n        return context;\n      }\n    }, {\n      key: \"addPointAnnotationExternal\",\n      value: function addPointAnnotationExternal(params, pushToMemory, context) {\n        if (typeof this.invertAxis === 'undefined') {\n          this.invertAxis = context.w.globals.isBarHorizontal;\n        }\n\n        this.addAnnotationExternal({\n          params: params,\n          pushToMemory: pushToMemory,\n          context: context,\n          type: 'point',\n          contextMethod: context.addPointAnnotation\n        });\n        return context;\n      }\n    }, {\n      key: \"addYaxisAnnotationExternal\",\n      value: function addYaxisAnnotationExternal(params, pushToMemory, context) {\n        this.addAnnotationExternal({\n          params: params,\n          pushToMemory: pushToMemory,\n          context: context,\n          type: 'yaxis',\n          contextMethod: context.addYaxisAnnotation\n        });\n        return context;\n      } // The addXaxisAnnotation method requires a parent class, and user calling this method externally on the chart instance may not specify parent, hence a different method\n\n    }, {\n      key: \"addXaxisAnnotationExternal\",\n      value: function addXaxisAnnotationExternal(params, pushToMemory, context) {\n        this.addAnnotationExternal({\n          params: params,\n          pushToMemory: pushToMemory,\n          context: context,\n          type: 'xaxis',\n          contextMethod: context.addXaxisAnnotation\n        });\n        return context;\n      }\n    }, {\n      key: \"addAnnotationExternal\",\n      value: function addAnnotationExternal(_ref) {\n        var params = _ref.params,\n            pushToMemory = _ref.pushToMemory,\n            context = _ref.context,\n            type = _ref.type,\n            contextMethod = _ref.contextMethod;\n        var me = context;\n        var w = me.w;\n        var parent = w.globals.dom.baseEl.querySelector(\".apexcharts-\".concat(type, \"-annotations\"));\n        var index = parent.childNodes.length + 1;\n        var opt = new Options();\n        var axesAnno = Object.assign({}, type === 'xaxis' ? opt.xAxisAnnotation : type === 'yaxis' ? opt.yAxisAnnotation : opt.pointAnnotation);\n        var anno = Utils.extend(axesAnno, params);\n\n        switch (type) {\n          case 'xaxis':\n            this.addXaxisAnnotation(anno, parent, index);\n            break;\n\n          case 'yaxis':\n            this.addYaxisAnnotation(anno, parent, index);\n            break;\n\n          case 'point':\n            this.addPointAnnotation(anno, parent, index);\n            break;\n        } // add background\n\n\n        var axesAnnoLabel = w.globals.dom.baseEl.querySelector(\".apexcharts-\".concat(type, \"-annotations .apexcharts-\").concat(type, \"-annotation-label[rel='\").concat(index, \"']\"));\n        var elRect = this.addBackgroundToAnno(axesAnnoLabel, anno);\n\n        if (elRect) {\n          parent.insertBefore(elRect.node, axesAnnoLabel);\n        }\n\n        if (pushToMemory) {\n          w.globals.memory.methodsToExec.push({\n            context: me,\n            method: contextMethod,\n            params: params\n          });\n        }\n\n        return context;\n      }\n    }]);\n\n    return Annotations;\n  }();\n\n  /**\n   * DateTime Class to manipulate datetime values.\n   *\n   * @module DateTime\n   **/\n\n  var DateTime =\n  /*#__PURE__*/\n  function () {\n    function DateTime(ctx) {\n      _classCallCheck(this, DateTime);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n      this.months31 = [1, 3, 5, 7, 8, 10, 12];\n      this.months30 = [2, 4, 6, 9, 11];\n      this.daysCntOfYear = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];\n    }\n\n    _createClass(DateTime, [{\n      key: \"isValidDate\",\n      value: function isValidDate(date) {\n        return !isNaN(this.parseDate(date));\n      }\n    }, {\n      key: \"getUTCTimeStamp\",\n      value: function getUTCTimeStamp(dateStr) {\n        if (!Date.parse(dateStr)) {\n          return dateStr;\n        }\n\n        return new Date(new Date(dateStr).toISOString().substr(0, 25)).getTime();\n      }\n    }, {\n      key: \"parseDate\",\n      value: function parseDate(dateStr) {\n        var parsed = Date.parse(dateStr);\n\n        if (!isNaN(parsed)) {\n          return this.getUTCTimeStamp(dateStr);\n        }\n\n        var output = Date.parse(dateStr.replace(/-/g, '/').replace(/[a-z]+/gi, ' '));\n        output = this.getUTCTimeStamp(output);\n        return output;\n      } // https://stackoverflow.com/a/11252167/6495043\n\n    }, {\n      key: \"treatAsUtc\",\n      value: function treatAsUtc(dateStr) {\n        var result = new Date(dateStr);\n        result.setMinutes(result.getMinutes() - result.getTimezoneOffset());\n        return result;\n      } // http://stackoverflow.com/questions/14638018/current-time-formatting-with-javascript#answer-14638191\n\n    }, {\n      key: \"formatDate\",\n      value: function formatDate(date, format) {\n        var utc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n        var convertToUTC = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n        var locale = this.w.globals.locale;\n        var MMMM = ['\\x00'].concat(_toConsumableArray(locale.months));\n        var MMM = ['\\x01'].concat(_toConsumableArray(locale.shortMonths));\n        var dddd = ['\\x02'].concat(_toConsumableArray(locale.days));\n        var ddd = ['\\x03'].concat(_toConsumableArray(locale.shortDays));\n\n        function ii(i, len) {\n          var s = i + '';\n          len = len || 2;\n\n          while (s.length < len) {\n            s = '0' + s;\n          }\n\n          return s;\n        }\n\n        if (convertToUTC) {\n          date = this.treatAsUtc(date);\n        }\n\n        var y = utc ? date.getUTCFullYear() : date.getFullYear();\n        format = format.replace(/(^|[^\\\\])yyyy+/g, '$1' + y);\n        format = format.replace(/(^|[^\\\\])yy/g, '$1' + y.toString().substr(2, 2));\n        format = format.replace(/(^|[^\\\\])y/g, '$1' + y);\n        var M = (utc ? date.getUTCMonth() : date.getMonth()) + 1;\n        format = format.replace(/(^|[^\\\\])MMMM+/g, '$1' + MMMM[0]);\n        format = format.replace(/(^|[^\\\\])MMM/g, '$1' + MMM[0]);\n        format = format.replace(/(^|[^\\\\])MM/g, '$1' + ii(M));\n        format = format.replace(/(^|[^\\\\])M/g, '$1' + M);\n        var d = utc ? date.getUTCDate() : date.getDate();\n        format = format.replace(/(^|[^\\\\])dddd+/g, '$1' + dddd[0]);\n        format = format.replace(/(^|[^\\\\])ddd/g, '$1' + ddd[0]);\n        format = format.replace(/(^|[^\\\\])dd/g, '$1' + ii(d));\n        format = format.replace(/(^|[^\\\\])d/g, '$1' + d);\n        var H = utc ? date.getUTCHours() : date.getHours();\n        format = format.replace(/(^|[^\\\\])HH+/g, '$1' + ii(H));\n        format = format.replace(/(^|[^\\\\])H/g, '$1' + H);\n        var h = H > 12 ? H - 12 : H === 0 ? 12 : H;\n        format = format.replace(/(^|[^\\\\])hh+/g, '$1' + ii(h));\n        format = format.replace(/(^|[^\\\\])h/g, '$1' + h);\n        var m = utc ? date.getUTCMinutes() : date.getMinutes();\n        format = format.replace(/(^|[^\\\\])mm+/g, '$1' + ii(m));\n        format = format.replace(/(^|[^\\\\])m/g, '$1' + m);\n        var s = utc ? date.getUTCSeconds() : date.getSeconds();\n        format = format.replace(/(^|[^\\\\])ss+/g, '$1' + ii(s));\n        format = format.replace(/(^|[^\\\\])s/g, '$1' + s);\n        var f = utc ? date.getUTCMilliseconds() : date.getMilliseconds();\n        format = format.replace(/(^|[^\\\\])fff+/g, '$1' + ii(f, 3));\n        f = Math.round(f / 10);\n        format = format.replace(/(^|[^\\\\])ff/g, '$1' + ii(f));\n        f = Math.round(f / 10);\n        format = format.replace(/(^|[^\\\\])f/g, '$1' + f);\n        var T = H < 12 ? 'AM' : 'PM';\n        format = format.replace(/(^|[^\\\\])TT+/g, '$1' + T);\n        format = format.replace(/(^|[^\\\\])T/g, '$1' + T.charAt(0));\n        var t = T.toLowerCase();\n        format = format.replace(/(^|[^\\\\])tt+/g, '$1' + t);\n        format = format.replace(/(^|[^\\\\])t/g, '$1' + t.charAt(0));\n        var tz = -date.getTimezoneOffset();\n        var K = utc || !tz ? 'Z' : tz > 0 ? '+' : '-';\n\n        if (!utc) {\n          tz = Math.abs(tz);\n          var tzHrs = Math.floor(tz / 60);\n          var tzMin = tz % 60;\n          K += ii(tzHrs) + ':' + ii(tzMin);\n        }\n\n        format = format.replace(/(^|[^\\\\])K/g, '$1' + K);\n        var day = (utc ? date.getUTCDay() : date.getDay()) + 1;\n        format = format.replace(new RegExp(dddd[0], 'g'), dddd[day]);\n        format = format.replace(new RegExp(ddd[0], 'g'), ddd[day]);\n        format = format.replace(new RegExp(MMMM[0], 'g'), MMMM[M]);\n        format = format.replace(new RegExp(MMM[0], 'g'), MMM[M]);\n        format = format.replace(/\\\\(.)/g, '$1');\n        return format;\n      }\n    }, {\n      key: \"getTimeUnitsfromTimestamp\",\n      value: function getTimeUnitsfromTimestamp(minX, maxX) {\n        var w = this.w;\n\n        if (w.config.xaxis.min !== undefined) {\n          minX = w.config.xaxis.min;\n        }\n\n        if (w.config.xaxis.max !== undefined) {\n          maxX = w.config.xaxis.max;\n        }\n\n        var minYear = new Date(minX).getFullYear();\n        var maxYear = new Date(maxX).getFullYear();\n        var minMonth = new Date(minX).getMonth();\n        var maxMonth = new Date(maxX).getMonth();\n        var minDate = new Date(minX).getDate();\n        var maxDate = new Date(maxX).getDate();\n        var minHour = new Date(minX).getHours();\n        var maxHour = new Date(maxX).getHours();\n        var minMinute = new Date(minX).getMinutes();\n        var maxMinute = new Date(maxX).getMinutes();\n        return {\n          minMinute: minMinute,\n          maxMinute: maxMinute,\n          minHour: minHour,\n          maxHour: maxHour,\n          minDate: minDate,\n          maxDate: maxDate,\n          minMonth: minMonth,\n          maxMonth: maxMonth,\n          minYear: minYear,\n          maxYear: maxYear\n        };\n      }\n    }, {\n      key: \"isLeapYear\",\n      value: function isLeapYear(year) {\n        return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;\n      }\n    }, {\n      key: \"calculcateLastDaysOfMonth\",\n      value: function calculcateLastDaysOfMonth(month, year, subtract) {\n        var days = this.determineDaysOfMonths(month, year); // whatever days we get, subtract the number of days asked\n\n        return days - subtract;\n      }\n    }, {\n      key: \"determineDaysOfYear\",\n      value: function determineDaysOfYear(year) {\n        var days = 365;\n\n        if (this.isLeapYear(year)) {\n          days = 366;\n        }\n\n        return days;\n      }\n    }, {\n      key: \"determineRemainingDaysOfYear\",\n      value: function determineRemainingDaysOfYear(year, month, date) {\n        var dayOfYear = this.daysCntOfYear[month] + date;\n        if (month > 1 && this.isLeapYear()) dayOfYear++;\n        return dayOfYear;\n      }\n    }, {\n      key: \"determineDaysOfMonths\",\n      value: function determineDaysOfMonths(month, year) {\n        var days = 30;\n        month = Utils.monthMod(month);\n\n        switch (true) {\n          case this.months30.indexOf(month) > -1:\n            if (month === 2) {\n              if (this.isLeapYear(year)) {\n                days = 29;\n              } else {\n                days = 28;\n              }\n            }\n\n            break;\n\n          case this.months31.indexOf(month) > -1:\n            days = 31;\n            break;\n\n          default:\n            days = 31;\n            break;\n        }\n\n        return days;\n      }\n    }]);\n\n    return DateTime;\n  }();\n\n  /**\n   * ApexCharts Default Class for setting default options for all chart types.\n   *\n   * @module Defaults\n   **/\n\n  var Defaults =\n  /*#__PURE__*/\n  function () {\n    function Defaults(opts) {\n      _classCallCheck(this, Defaults);\n\n      this.opts = opts;\n    }\n\n    _createClass(Defaults, [{\n      key: \"line\",\n      value: function line() {\n        return {\n          chart: {\n            animations: {\n              easing: 'swing'\n            }\n          },\n          dataLabels: {\n            enabled: false\n          },\n          stroke: {\n            width: 5,\n            curve: 'straight'\n          },\n          markers: {\n            size: 0,\n            hover: {\n              sizeOffset: 6\n            }\n          },\n          xaxis: {\n            crosshairs: {\n              width: 1\n            }\n          }\n        };\n      }\n    }, {\n      key: \"sparkline\",\n      value: function sparkline(defaults) {\n        this.opts.yaxis[0].labels.show = false;\n        this.opts.yaxis[0].floating = true;\n        var ret = {\n          grid: {\n            show: false,\n            padding: {\n              left: 0,\n              right: 0,\n              top: 0,\n              bottom: 0\n            }\n          },\n          legend: {\n            show: false\n          },\n          xaxis: {\n            labels: {\n              show: false\n            },\n            tooltip: {\n              enabled: false\n            },\n            axisBorder: {\n              show: false\n            }\n          },\n          chart: {\n            toolbar: {\n              show: false\n            },\n            zoom: {\n              enabled: false\n            }\n          },\n          dataLabels: {\n            enabled: false\n          }\n        };\n        return Utils.extend(defaults, ret);\n      }\n    }, {\n      key: \"bar\",\n      value: function bar() {\n        return {\n          chart: {\n            stacked: false,\n            animations: {\n              easing: 'swing'\n            }\n          },\n          plotOptions: {\n            bar: {\n              dataLabels: {\n                position: 'center'\n              }\n            }\n          },\n          dataLabels: {\n            style: {\n              colors: ['#fff']\n            }\n          },\n          stroke: {\n            width: 0\n          },\n          fill: {\n            opacity: 0.85\n          },\n          legend: {\n            markers: {\n              shape: 'square',\n              radius: 2,\n              size: 8\n            }\n          },\n          tooltip: {\n            shared: false\n          },\n          xaxis: {\n            tooltip: {\n              enabled: false\n            },\n            crosshairs: {\n              width: 'barWidth',\n              position: 'back',\n              fill: {\n                type: 'gradient'\n              },\n              dropShadow: {\n                enabled: false\n              },\n              stroke: {\n                width: 0\n              }\n            }\n          }\n        };\n      }\n    }, {\n      key: \"candlestick\",\n      value: function candlestick() {\n        return {\n          stroke: {\n            width: 1,\n            colors: ['#333']\n          },\n          dataLabels: {\n            enabled: false\n          },\n          tooltip: {\n            shared: true,\n            custom: function custom(_ref) {\n              var seriesIndex = _ref.seriesIndex,\n                  dataPointIndex = _ref.dataPointIndex,\n                  w = _ref.w;\n              var o = w.globals.seriesCandleO[seriesIndex][dataPointIndex];\n              var h = w.globals.seriesCandleH[seriesIndex][dataPointIndex];\n              var l = w.globals.seriesCandleL[seriesIndex][dataPointIndex];\n              var c = w.globals.seriesCandleC[seriesIndex][dataPointIndex];\n              return '<div class=\"apexcharts-tooltip-candlestick\">' + '<div>Open: <span class=\"value\">' + o + '</span></div>' + '<div>High: <span class=\"value\">' + h + '</span></div>' + '<div>Low: <span class=\"value\">' + l + '</span></div>' + '<div>Close: <span class=\"value\">' + c + '</span></div>' + '</div>';\n            }\n          },\n          states: {\n            active: {\n              filter: {\n                type: 'none'\n              }\n            }\n          },\n          xaxis: {\n            crosshairs: {\n              width: 1\n            }\n          }\n        };\n      }\n    }, {\n      key: \"rangeBar\",\n      value: function rangeBar() {\n        return {\n          stroke: {\n            width: 0\n          },\n          plotOptions: {\n            bar: {\n              dataLabels: {\n                position: 'center'\n              }\n            }\n          },\n          dataLabels: {\n            enabled: false,\n            formatter: function formatter(val, _ref2) {\n              var ctx = _ref2.ctx,\n                  seriesIndex = _ref2.seriesIndex,\n                  dataPointIndex = _ref2.dataPointIndex,\n                  w = _ref2.w;\n              var start = w.globals.seriesRangeStart[seriesIndex][dataPointIndex];\n              var end = w.globals.seriesRangeEnd[seriesIndex][dataPointIndex];\n              return end - start;\n            },\n            style: {\n              colors: ['#fff']\n            }\n          },\n          tooltip: {\n            shared: false,\n            followCursor: true,\n            custom: function custom(_ref3) {\n              var ctx = _ref3.ctx,\n                  seriesIndex = _ref3.seriesIndex,\n                  dataPointIndex = _ref3.dataPointIndex,\n                  w = _ref3.w;\n              var start = w.globals.seriesRangeStart[seriesIndex][dataPointIndex];\n              var end = w.globals.seriesRangeEnd[seriesIndex][dataPointIndex];\n              var startVal = '';\n              var endVal = '';\n              var color = w.globals.colors[seriesIndex];\n\n              if (w.config.tooltip.x.formatter === undefined) {\n                if (w.config.xaxis.type === 'datetime') {\n                  var datetimeObj = new DateTime(ctx);\n                  startVal = datetimeObj.formatDate(new Date(start), w.config.tooltip.x.format, true, true);\n                  endVal = datetimeObj.formatDate(new Date(end), w.config.tooltip.x.format, true, true);\n                } else {\n                  startVal = start;\n                  endVal = end;\n                }\n              } else {\n                startVal = w.config.tooltip.x.formatter(start);\n                endVal = w.config.tooltip.x.formatter(end);\n              }\n\n              var ylabel = w.globals.labels[dataPointIndex];\n              return '<div class=\"apexcharts-tooltip-rangebar\">' + '<div> <span class=\"series-name\" style=\"color: ' + color + '\">' + (w.config.series[seriesIndex].name ? w.config.series[seriesIndex].name : '') + '</span></div>' + '<div> <span class=\"category\">' + ylabel + ': </span> <span class=\"value start-value\">' + startVal + '</span> <span class=\"separator\">-</span> <span class=\"value end-value\">' + endVal + '</span></div>' + '</div>';\n            }\n          },\n          xaxis: {\n            tooltip: {\n              enabled: false\n            },\n            crosshairs: {\n              stroke: {\n                width: 0\n              }\n            }\n          }\n        };\n      }\n    }, {\n      key: \"area\",\n      value: function area() {\n        return {\n          stroke: {\n            width: 4\n          },\n          fill: {\n            type: 'gradient',\n            gradient: {\n              inverseColors: false,\n              shade: 'light',\n              type: 'vertical',\n              opacityFrom: 0.65,\n              opacityTo: 0.5,\n              stops: [0, 100, 100]\n            }\n          },\n          markers: {\n            size: 0,\n            hover: {\n              sizeOffset: 6\n            }\n          },\n          tooltip: {\n            followCursor: false\n          }\n        };\n      }\n    }, {\n      key: \"brush\",\n      value: function brush(defaults) {\n        var ret = {\n          chart: {\n            toolbar: {\n              autoSelected: 'selection',\n              show: false\n            },\n            zoom: {\n              enabled: false\n            }\n          },\n          dataLabels: {\n            enabled: false\n          },\n          stroke: {\n            width: 1\n          },\n          tooltip: {\n            enabled: false\n          },\n          xaxis: {\n            tooltip: {\n              enabled: false\n            }\n          }\n        };\n        return Utils.extend(defaults, ret);\n      }\n    }, {\n      key: \"stacked100\",\n      value: function stacked100() {\n        var _this = this;\n\n        this.opts.dataLabels = this.opts.dataLabels || {};\n        this.opts.dataLabels.formatter = this.opts.dataLabels.formatter || undefined;\n        var existingDataLabelFormatter = this.opts.dataLabels.formatter;\n        this.opts.yaxis.forEach(function (yaxe, index) {\n          _this.opts.yaxis[index].min = 0;\n          _this.opts.yaxis[index].max = 100;\n        });\n        var isBar = this.opts.chart.type === 'bar';\n\n        if (isBar) {\n          this.opts.dataLabels.formatter = existingDataLabelFormatter || function (val) {\n            if (typeof val === 'number') {\n              return val ? val.toFixed(0) + '%' : val;\n            }\n\n            return val;\n          };\n        }\n      } // This function removes the left and right spacing in chart for line/area/scatter if xaxis type = category for those charts by converting xaxis = numeric. Numeric/Datetime xaxis prevents the unnecessary spacing in the left/right of the chart area\n\n    }, {\n      key: \"bubble\",\n      value: function bubble() {\n        return {\n          dataLabels: {\n            style: {\n              colors: ['#fff']\n            }\n          },\n          tooltip: {\n            shared: false,\n            intersect: true\n          },\n          xaxis: {\n            crosshairs: {\n              width: 0\n            }\n          },\n          fill: {\n            type: 'solid',\n            gradient: {\n              shade: 'light',\n              inverse: true,\n              shadeIntensity: 0.55,\n              opacityFrom: 0.4,\n              opacityTo: 0.8\n            }\n          }\n        };\n      }\n    }, {\n      key: \"scatter\",\n      value: function scatter() {\n        return {\n          dataLabels: {\n            enabled: false\n          },\n          tooltip: {\n            shared: false,\n            intersect: true\n          },\n          markers: {\n            size: 6,\n            strokeWidth: 2,\n            hover: {\n              sizeOffset: 2\n            }\n          }\n        };\n      }\n    }, {\n      key: \"heatmap\",\n      value: function heatmap() {\n        return {\n          chart: {\n            stacked: false,\n            zoom: {\n              enabled: false\n            }\n          },\n          fill: {\n            opacity: 1\n          },\n          dataLabels: {\n            style: {\n              colors: ['#fff']\n            }\n          },\n          stroke: {\n            colors: ['#fff']\n          },\n          tooltip: {\n            followCursor: true,\n            marker: {\n              show: false\n            },\n            x: {\n              show: false\n            }\n          },\n          legend: {\n            position: 'top',\n            markers: {\n              shape: 'square',\n              size: 10,\n              offsetY: 2\n            }\n          },\n          grid: {\n            padding: {\n              right: 20\n            }\n          }\n        };\n      }\n    }, {\n      key: \"pie\",\n      value: function pie() {\n        return {\n          chart: {\n            toolbar: {\n              show: false\n            }\n          },\n          plotOptions: {\n            pie: {\n              donut: {\n                labels: {\n                  show: false\n                }\n              }\n            }\n          },\n          dataLabels: {\n            formatter: function formatter(val) {\n              return val.toFixed(1) + '%';\n            },\n            style: {\n              colors: ['#fff']\n            },\n            dropShadow: {\n              enabled: true\n            }\n          },\n          stroke: {\n            colors: ['#fff']\n          },\n          fill: {\n            opacity: 1,\n            gradient: {\n              shade: 'dark',\n              shadeIntensity: 0.35,\n              inverseColors: false,\n              stops: [0, 100, 100]\n            }\n          },\n          padding: {\n            right: 0,\n            left: 0\n          },\n          tooltip: {\n            theme: 'dark',\n            fillSeriesColor: true\n          },\n          legend: {\n            position: 'right'\n          }\n        };\n      }\n    }, {\n      key: \"donut\",\n      value: function donut() {\n        return {\n          chart: {\n            toolbar: {\n              show: false\n            }\n          },\n          dataLabels: {\n            formatter: function formatter(val) {\n              return val.toFixed(1) + '%';\n            },\n            style: {\n              colors: ['#fff']\n            },\n            dropShadow: {\n              enabled: true\n            }\n          },\n          stroke: {\n            colors: ['#fff']\n          },\n          fill: {\n            opacity: 1,\n            gradient: {\n              shade: 'dark',\n              shadeIntensity: 0.4,\n              inverseColors: false,\n              type: 'vertical',\n              opacityFrom: 1,\n              opacityTo: 1,\n              stops: [70, 98, 100]\n            }\n          },\n          padding: {\n            right: 0,\n            left: 0\n          },\n          tooltip: {\n            theme: 'dark',\n            fillSeriesColor: true\n          },\n          legend: {\n            position: 'right'\n          }\n        };\n      }\n    }, {\n      key: \"radar\",\n      value: function radar() {\n        this.opts.yaxis[0].labels.style.fontSize = '13px';\n        this.opts.yaxis[0].labels.offsetY = 6;\n        return {\n          dataLabels: {\n            enabled: true,\n            style: {\n              colors: ['#a8a8a8'],\n              fontSize: '11px'\n            }\n          },\n          stroke: {\n            width: 2\n          },\n          markers: {\n            size: 3,\n            strokeWidth: 1,\n            strokeOpacity: 1\n          },\n          fill: {\n            opacity: 0.2\n          },\n          tooltip: {\n            shared: false,\n            intersect: true,\n            followCursor: true\n          },\n          grid: {\n            show: false\n          },\n          xaxis: {\n            tooltip: {\n              enabled: false\n            },\n            crosshairs: {\n              show: false\n            }\n          }\n        };\n      }\n    }, {\n      key: \"radialBar\",\n      value: function radialBar() {\n        return {\n          chart: {\n            animations: {\n              dynamicAnimation: {\n                enabled: true,\n                speed: 800\n              }\n            },\n            toolbar: {\n              show: false\n            }\n          },\n          fill: {\n            gradient: {\n              shade: 'dark',\n              shadeIntensity: 0.4,\n              inverseColors: false,\n              type: 'diagonal2',\n              opacityFrom: 1,\n              opacityTo: 1,\n              stops: [70, 98, 100]\n            }\n          },\n          padding: {\n            right: 0,\n            left: 0\n          },\n          legend: {\n            show: false,\n            position: 'right'\n          },\n          tooltip: {\n            enabled: false,\n            fillSeriesColor: true\n          }\n        };\n      }\n    }], [{\n      key: \"convertCatToNumeric\",\n      value: function convertCatToNumeric(opts) {\n        opts.xaxis.type = 'numeric';\n        opts.xaxis.convertedCatToNumeric = true;\n        opts.xaxis.labels = opts.xaxis.labels || {};\n\n        opts.xaxis.labels.formatter = opts.xaxis.labels.formatter || function (val) {\n          return val;\n        };\n\n        opts.chart = opts.chart || {};\n        opts.chart.zoom = opts.chart.zoom || window.Apex.chart && window.Apex.chart.zoom || {};\n        var defaultFormatter = opts.xaxis.labels.formatter;\n        var labels = opts.xaxis.categories && opts.xaxis.categories.length ? opts.xaxis.categories : opts.labels;\n\n        if (labels && labels.length) {\n          opts.xaxis.labels.formatter = function (val) {\n            return defaultFormatter(labels[val - 1]);\n          };\n        }\n\n        opts.xaxis.categories = [];\n        opts.labels = [];\n        opts.chart.zoom.enabled = opts.chart.zoom.enabled || false;\n        return opts;\n      }\n    }]);\n\n    return Defaults;\n  }();\n\n  /*\n   ** Util functions which are dependent on ApexCharts instance\n   */\n  var CoreUtils =\n  /*#__PURE__*/\n  function () {\n    function CoreUtils(ctx) {\n      _classCallCheck(this, CoreUtils);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n    }\n\n    _createClass(CoreUtils, [{\n      key: \"getStackedSeriesTotals\",\n\n      /**\n       * @memberof CoreUtils\n       * returns the sum of all individual values in a multiple stacked series\n       * Eg. w.globals.series = [[32,33,43,12], [2,3,5,1]]\n       *  @return [34,36,48,13]\n       **/\n      value: function getStackedSeriesTotals() {\n        var w = this.w;\n        var total = [];\n        if (w.globals.series.length === 0) return total;\n\n        for (var i = 0; i < w.globals.series[w.globals.maxValsInArrayIndex].length; i++) {\n          var t = 0;\n\n          for (var j = 0; j < w.globals.series.length; j++) {\n            t += w.globals.series[j][i];\n          }\n\n          total.push(t);\n        }\n\n        w.globals.stackedSeriesTotals = total;\n        return total;\n      } // get total of the all values inside all series\n\n    }, {\n      key: \"getSeriesTotalByIndex\",\n      value: function getSeriesTotalByIndex() {\n        var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n\n        if (index === null) {\n          // non-plot chart types - pie / donut / circle\n          return this.w.config.series.reduce(function (acc, cur) {\n            return acc + cur;\n          }, 0);\n        } else {\n          // axis charts - supporting multiple series\n          return this.w.globals.series[index].reduce(function (acc, cur) {\n            return acc + cur;\n          }, 0);\n        }\n      }\n    }, {\n      key: \"isSeriesNull\",\n      value: function isSeriesNull() {\n        var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n        var r = [];\n\n        if (index === null) {\n          // non-plot chart types - pie / donut / circle\n          r = this.w.config.series.filter(function (d) {\n            return d !== null;\n          });\n        } else {\n          // axis charts - supporting multiple series\n          r = this.w.globals.series[index].filter(function (d) {\n            return d !== null;\n          });\n        }\n\n        return r.length === 0;\n      }\n    }, {\n      key: \"seriesHaveSameValues\",\n      value: function seriesHaveSameValues(index) {\n        return this.w.globals.series[index].every(function (val, i, arr) {\n          return val === arr[0];\n        });\n      } // maxValsInArrayIndex is the index of series[] which has the largest number of items\n\n    }, {\n      key: \"getLargestSeries\",\n      value: function getLargestSeries() {\n        var w = this.w;\n        w.globals.maxValsInArrayIndex = w.globals.series.map(function (a) {\n          return a.length;\n        }).indexOf(Math.max.apply(Math, w.globals.series.map(function (a) {\n          return a.length;\n        })));\n      }\n    }, {\n      key: \"getLargestMarkerSize\",\n      value: function getLargestMarkerSize() {\n        var w = this.w;\n        var size = 0;\n        w.globals.markers.size.forEach(function (m) {\n          size = Math.max(size, m);\n        });\n        w.globals.markers.largestSize = size;\n        return size;\n      }\n      /**\n       * @memberof Core\n       * returns the sum of all values in a series\n       * Eg. w.globals.series = [[32,33,43,12], [2,3,5,1]]\n       *  @return [120, 11]\n       **/\n\n    }, {\n      key: \"getSeriesTotals\",\n      value: function getSeriesTotals() {\n        var w = this.w;\n        w.globals.seriesTotals = w.globals.series.map(function (ser, index) {\n          var total = 0;\n\n          if (Array.isArray(ser)) {\n            for (var j = 0; j < ser.length; j++) {\n              total += ser[j];\n            }\n          } else {\n            // for pie/donuts/gauges\n            total += ser;\n          }\n\n          return total;\n        });\n      }\n    }, {\n      key: \"getSeriesTotalsXRange\",\n      value: function getSeriesTotalsXRange(minX, maxX) {\n        var w = this.w;\n        var seriesTotalsXRange = w.globals.series.map(function (ser, index) {\n          var total = 0;\n\n          for (var j = 0; j < ser.length; j++) {\n            if (w.globals.seriesX[index][j] > minX && w.globals.seriesX[index][j] < maxX) {\n              total += ser[j];\n            }\n          }\n\n          return total;\n        });\n        return seriesTotalsXRange;\n      }\n      /**\n       * @memberof CoreUtils\n       * returns the percentage value of all individual values which can be used in a 100% stacked series\n       * Eg. w.globals.series = [[32, 33, 43, 12], [2, 3, 5, 1]]\n       *  @return [[94.11, 91.66, 89.58, 92.30], [5.88, 8.33, 10.41, 7.7]]\n       **/\n\n    }, {\n      key: \"getPercentSeries\",\n      value: function getPercentSeries() {\n        var w = this.w;\n        w.globals.seriesPercent = w.globals.series.map(function (ser, index) {\n          var seriesPercent = [];\n\n          if (Array.isArray(ser)) {\n            for (var j = 0; j < ser.length; j++) {\n              var total = w.globals.stackedSeriesTotals[j];\n              var percent = 0;\n\n              if (total) {\n                percent = 100 * ser[j] / total;\n              }\n\n              seriesPercent.push(percent);\n            }\n          } else {\n            var _total = w.globals.seriesTotals.reduce(function (acc, val) {\n              return acc + val;\n            }, 0);\n\n            var _percent = 100 * ser / _total;\n\n            seriesPercent.push(_percent);\n          }\n\n          return seriesPercent;\n        });\n      }\n    }, {\n      key: \"getCalculatedRatios\",\n      value: function getCalculatedRatios() {\n        var gl = this.w.globals;\n        var yRatio = [];\n        var invertedYRatio = 0;\n        var xRatio = 0;\n        var initialXRatio = 0;\n        var invertedXRatio = 0;\n        var zRatio = 0;\n        var baseLineY = [];\n        var baseLineInvertedY = 0.1;\n        var baseLineX = 0;\n        gl.yRange = [];\n\n        if (gl.isMultipleYAxis) {\n          for (var i = 0; i < gl.minYArr.length; i++) {\n            gl.yRange.push(Math.abs(gl.minYArr[i] - gl.maxYArr[i]));\n            baseLineY.push(0);\n          }\n        } else {\n          gl.yRange.push(Math.abs(gl.minY - gl.maxY));\n        }\n\n        gl.xRange = Math.abs(gl.maxX - gl.minX);\n        gl.zRange = Math.abs(gl.maxZ - gl.minZ); // multiple y axis\n\n        for (var _i = 0; _i < gl.yRange.length; _i++) {\n          yRatio.push(gl.yRange[_i] / gl.gridHeight);\n        }\n\n        xRatio = gl.xRange / gl.gridWidth;\n        initialXRatio = Math.abs(gl.initialmaxX - gl.initialminX) / gl.gridWidth;\n        invertedYRatio = gl.yRange / gl.gridWidth;\n        invertedXRatio = gl.xRange / gl.gridHeight;\n        zRatio = gl.zRange / gl.gridHeight * 16;\n\n        if (gl.minY !== Number.MIN_VALUE && Math.abs(gl.minY) !== 0) {\n          // Negative numbers present in series\n          gl.hasNegs = true;\n        }\n\n        if (gl.isMultipleYAxis) {\n          baseLineY = []; // baseline variables is the 0 of the yaxis which will be needed when there are negatives\n\n          for (var _i2 = 0; _i2 < yRatio.length; _i2++) {\n            baseLineY.push(-gl.minYArr[_i2] / yRatio[_i2]);\n          }\n        } else {\n          baseLineY.push(-gl.minY / yRatio[0]);\n\n          if (gl.minY !== Number.MIN_VALUE && Math.abs(gl.minY) !== 0) {\n            baseLineInvertedY = -gl.minY / invertedYRatio; // this is for bar chart\n\n            baseLineX = gl.minX / xRatio;\n          }\n        }\n\n        return {\n          yRatio: yRatio,\n          invertedYRatio: invertedYRatio,\n          zRatio: zRatio,\n          xRatio: xRatio,\n          initialXRatio: initialXRatio,\n          invertedXRatio: invertedXRatio,\n          baseLineInvertedY: baseLineInvertedY,\n          baseLineY: baseLineY,\n          baseLineX: baseLineX\n        };\n      }\n    }, {\n      key: \"getLogSeries\",\n      value: function getLogSeries(series) {\n        var w = this.w;\n        w.globals.seriesLog = series.map(function (s, i) {\n          if (w.config.yaxis[i] && w.config.yaxis[i].logarithmic) {\n            return s.map(function (d) {\n              if (d === null) return null;\n              var logVal = (Math.log(d) - Math.log(w.globals.minYArr[i])) / (Math.log(w.globals.maxYArr[i]) - Math.log(w.globals.minYArr[i]));\n              return logVal;\n            });\n          } else {\n            return s;\n          }\n        });\n        return w.globals.seriesLog;\n      }\n    }, {\n      key: \"getLogYRatios\",\n      value: function getLogYRatios(yRatio) {\n        var _this = this;\n\n        var w = this.w;\n        var gl = this.w.globals;\n        gl.yLogRatio = yRatio.slice();\n        gl.logYRange = gl.yRange.map(function (yRange, i) {\n          if (w.config.yaxis[i] && _this.w.config.yaxis[i].logarithmic) {\n            var maxY = -Number.MAX_VALUE;\n            var minY = Number.MIN_VALUE;\n            var range = 1;\n            gl.seriesLog.forEach(function (s, si) {\n              s.forEach(function (v) {\n                if (w.config.yaxis[si] && w.config.yaxis[si].logarithmic) {\n                  maxY = Math.max(v, maxY);\n                  minY = Math.min(v, minY);\n                }\n              });\n            });\n            range = Math.pow(gl.yRange[i], Math.abs(minY - maxY) / gl.yRange[i]);\n            gl.yLogRatio[i] = range / gl.gridHeight;\n            return range;\n          }\n        });\n        return gl.yLogRatio;\n      } // Some config objects can be array - and we need to extend them correctly\n\n    }], [{\n      key: \"checkComboSeries\",\n      value: function checkComboSeries(series) {\n        var comboCharts = false;\n        var comboChartsHasBars = false; // if user specified a type in series too, turn on comboCharts flag\n\n        if (series.length && typeof series[0].type !== 'undefined') {\n          comboCharts = true;\n          series.forEach(function (s) {\n            if (s.type === 'bar' || s.type === 'column') {\n              comboChartsHasBars = true;\n            }\n          });\n        }\n\n        return {\n          comboCharts: comboCharts,\n          comboChartsHasBars: comboChartsHasBars\n        };\n      }\n    }, {\n      key: \"extendArrayProps\",\n      value: function extendArrayProps(configInstance, options) {\n        if (options.yaxis) {\n          options = configInstance.extendYAxis(options);\n        }\n\n        if (options.annotations) {\n          if (options.annotations.yaxis) {\n            options = configInstance.extendYAxisAnnotations(options);\n          }\n\n          if (options.annotations.xaxis) {\n            options = configInstance.extendXAxisAnnotations(options);\n          }\n\n          if (options.annotations.points) {\n            options = configInstance.extendPointAnnotations(options);\n          }\n        }\n\n        return options;\n      }\n    }]);\n\n    return CoreUtils;\n  }();\n\n  /**\n   * ApexCharts Config Class for extending user options with pre-defined ApexCharts config.\n   *\n   * @module Config\n   **/\n\n  var Config =\n  /*#__PURE__*/\n  function () {\n    function Config(opts) {\n      _classCallCheck(this, Config);\n\n      this.opts = opts;\n    }\n\n    _createClass(Config, [{\n      key: \"init\",\n      value: function init() {\n        var opts = this.opts;\n        var options = new Options();\n        var defaults = new Defaults(opts);\n        this.chartType = opts.chart.type;\n\n        if (this.chartType === 'histogram') {\n          // technically, a histogram can be drawn by a column chart with no spaces in between\n          opts.chart.type = 'bar';\n          opts = Utils.extend({\n            plotOptions: {\n              bar: {\n                columnWidth: '99.99%'\n              }\n            }\n          }, opts);\n        }\n\n        opts = this.extendYAxis(opts);\n        opts = this.extendAnnotations(opts);\n        var config = options.init();\n        var newDefaults = {};\n\n        if (opts && _typeof(opts) === 'object') {\n          var chartDefaults = {};\n\n          switch (this.chartType) {\n            case 'line':\n              chartDefaults = defaults.line();\n              break;\n\n            case 'area':\n              chartDefaults = defaults.area();\n              break;\n\n            case 'bar':\n              chartDefaults = defaults.bar();\n              break;\n\n            case 'candlestick':\n              chartDefaults = defaults.candlestick();\n              break;\n\n            case 'rangeBar':\n              chartDefaults = defaults.rangeBar();\n              break;\n\n            case 'histogram':\n              chartDefaults = defaults.bar();\n              break;\n\n            case 'bubble':\n              chartDefaults = defaults.bubble();\n              break;\n\n            case 'scatter':\n              chartDefaults = defaults.scatter();\n              break;\n\n            case 'heatmap':\n              chartDefaults = defaults.heatmap();\n              break;\n\n            case 'pie':\n              chartDefaults = defaults.pie();\n              break;\n\n            case 'donut':\n              chartDefaults = defaults.donut();\n              break;\n\n            case 'radar':\n              chartDefaults = defaults.radar();\n              break;\n\n            case 'radialBar':\n              chartDefaults = defaults.radialBar();\n              break;\n\n            default:\n              chartDefaults = defaults.line();\n          }\n\n          if (opts.chart.brush && opts.chart.brush.enabled) {\n            chartDefaults = defaults.brush(chartDefaults);\n          }\n\n          if (opts.chart.stacked && opts.chart.stackType === '100%') {\n            defaults.stacked100();\n          } // If user has specified a dark theme, make the tooltip dark too\n\n\n          this.checkForDarkTheme(window.Apex); // check global window Apex options\n\n          this.checkForDarkTheme(opts); // check locally passed options\n\n          opts.xaxis = opts.xaxis || window.Apex.xaxis || {};\n          var combo = CoreUtils.checkComboSeries(opts.series);\n\n          if ((opts.chart.type === 'line' || opts.chart.type === 'area' || opts.chart.type === 'scatter') && !combo.comboChartsHasBars && opts.xaxis.type !== 'datetime' && opts.xaxis.type !== 'numeric' && opts.xaxis.tickPlacement !== 'between') {\n            opts = Defaults.convertCatToNumeric(opts);\n          }\n\n          if (opts.chart.sparkline && opts.chart.sparkline.enabled || window.Apex.chart && window.Apex.chart.sparkline && window.Apex.chart.sparkline.enabled) {\n            chartDefaults = defaults.sparkline(chartDefaults);\n          }\n\n          newDefaults = Utils.extend(config, chartDefaults);\n        } // config should cascade in this fashion\n        // default-config < global-apex-variable-config < user-defined-config\n        // get GLOBALLY defined options and merge with the default config\n\n\n        var mergedWithDefaultConfig = Utils.extend(newDefaults, window.Apex); // get the merged config and extend with user defined config\n\n        config = Utils.extend(mergedWithDefaultConfig, opts); // some features are not supported. those mismatches should be handled\n\n        config = this.handleUserInputErrors(config);\n        return config;\n      }\n    }, {\n      key: \"extendYAxis\",\n      value: function extendYAxis(opts) {\n        var options = new Options();\n\n        if (typeof opts.yaxis === 'undefined') {\n          opts.yaxis = {};\n        } // extend global yaxis config (only if object is provided / not an array)\n\n\n        if (opts.yaxis.constructor !== Array && window.Apex.yaxis && window.Apex.yaxis.constructor !== Array) {\n          opts.yaxis = Utils.extend(opts.yaxis, window.Apex.yaxis);\n        } // as we can't extend nested object's array with extend, we need to do it first\n        // user can provide either an array or object in yaxis config\n\n\n        if (opts.yaxis.constructor !== Array) {\n          // convert the yaxis to array if user supplied object\n          opts.yaxis = [Utils.extend(options.yAxis, opts.yaxis)];\n        } else {\n          opts.yaxis = Utils.extendArray(opts.yaxis, options.yAxis);\n        }\n\n        return opts;\n      } // annotations also accepts array, so we need to extend them manually\n\n    }, {\n      key: \"extendAnnotations\",\n      value: function extendAnnotations(opts) {\n        if (typeof opts.annotations === 'undefined') {\n          opts.annotations = {};\n          opts.annotations.yaxis = [];\n          opts.annotations.xaxis = [];\n          opts.annotations.points = [];\n        }\n\n        opts = this.extendYAxisAnnotations(opts);\n        opts = this.extendXAxisAnnotations(opts);\n        opts = this.extendPointAnnotations(opts);\n        return opts;\n      }\n    }, {\n      key: \"extendYAxisAnnotations\",\n      value: function extendYAxisAnnotations(opts) {\n        var options = new Options();\n        opts.annotations.yaxis = Utils.extendArray(typeof opts.annotations.yaxis !== 'undefined' ? opts.annotations.yaxis : [], options.yAxisAnnotation);\n        return opts;\n      }\n    }, {\n      key: \"extendXAxisAnnotations\",\n      value: function extendXAxisAnnotations(opts) {\n        var options = new Options();\n        opts.annotations.xaxis = Utils.extendArray(typeof opts.annotations.xaxis !== 'undefined' ? opts.annotations.xaxis : [], options.xAxisAnnotation);\n        return opts;\n      }\n    }, {\n      key: \"extendPointAnnotations\",\n      value: function extendPointAnnotations(opts) {\n        var options = new Options();\n        opts.annotations.points = Utils.extendArray(typeof opts.annotations.points !== 'undefined' ? opts.annotations.points : [], options.pointAnnotation);\n        return opts;\n      }\n    }, {\n      key: \"checkForDarkTheme\",\n      value: function checkForDarkTheme(opts) {\n        if (opts.theme && opts.theme.mode === 'dark') {\n          if (!opts.tooltip) {\n            opts.tooltip = {};\n          }\n\n          if (opts.tooltip.theme !== 'light') {\n            opts.tooltip.theme = 'dark';\n          }\n\n          if (!opts.chart.foreColor) {\n            opts.chart.foreColor = '#f6f7f8';\n          }\n\n          if (!opts.theme.palette) {\n            opts.theme.palette = 'palette4';\n          }\n        }\n      }\n    }, {\n      key: \"handleUserInputErrors\",\n      value: function handleUserInputErrors(opts) {\n        var config = opts; // conflicting tooltip option. intersect makes sure to focus on 1 point at a time. Shared cannot be used along with it\n\n        if (config.tooltip.shared && config.tooltip.intersect) {\n          throw new Error('tooltip.shared cannot be enabled when tooltip.intersect is true. Turn off any other option by setting it to false.');\n        }\n\n        if (config.chart.scroller) {\n          console.warn('Scroller has been deprecated since v2.0.0. Please remove the configuration for chart.scroller');\n        }\n\n        if ((config.chart.type === 'bar' || config.chart.type === 'rangeBar') && config.plotOptions.bar.horizontal) {\n          // No multiple yaxis for bars\n          if (config.yaxis.length > 1) {\n            throw new Error('Multiple Y Axis for bars are not supported. Switch to column chart by setting plotOptions.bar.horizontal=false');\n          } // if yaxis is reversed in horizontal bar chart, you should draw the y-axis on right side\n\n\n          if (config.yaxis[0].reversed) {\n            config.yaxis[0].opposite = true;\n          }\n\n          config.xaxis.tooltip.enabled = false; // no xaxis tooltip for horizontal bar\n\n          config.yaxis[0].tooltip.enabled = false; // no xaxis tooltip for horizontal bar\n\n          config.chart.zoom.enabled = false; // no zooming for horz bars\n        }\n\n        if (config.chart.type === 'bar' || config.chart.type === 'rangeBar') {\n          if (config.tooltip.shared) {\n            if (config.xaxis.crosshairs.width === 'barWidth' && config.series.length > 1) {\n              console.warn('crosshairs.width = \"barWidth\" is only supported in single series, not in a multi-series barChart.');\n              config.xaxis.crosshairs.width = 'tickWidth';\n            }\n\n            if (config.plotOptions.bar.horizontal) {\n              config.states.hover.type = 'none';\n              config.tooltip.shared = false;\n            }\n\n            if (!config.tooltip.followCursor) {\n              console.warn('followCursor option in shared columns cannot be turned off. Please set %ctooltip.followCursor: true', 'color: blue;');\n              config.tooltip.followCursor = true;\n            }\n          }\n        }\n\n        if (config.chart.type === 'candlestick') {\n          if (config.yaxis[0].reversed) {\n            console.warn('Reversed y-axis in candlestick chart is not supported.');\n            config.yaxis[0].reversed = false;\n          }\n        }\n\n        if (config.chart.group && config.yaxis[0].labels.minWidth === 0) {\n          console.warn('It looks like you have multiple charts in synchronization. You must provide yaxis.labels.minWidth which must be EQUAL for all grouped charts to prevent incorrect behaviour.');\n        } // if user supplied array for stroke width, it will only be applicable to line/area charts, for any other charts, revert back to Number\n\n\n        if (Array.isArray(config.stroke.width)) {\n          if (config.chart.type !== 'line' && config.chart.type !== 'area') {\n            console.warn('stroke.width option accepts array only for line and area charts. Reverted back to Number');\n            config.stroke.width = config.stroke.width[0];\n          }\n        }\n\n        return config;\n      }\n    }]);\n\n    return Config;\n  }();\n\n  var Globals =\n  /*#__PURE__*/\n  function () {\n    function Globals() {\n      _classCallCheck(this, Globals);\n    }\n\n    _createClass(Globals, [{\n      key: \"globalVars\",\n      value: function globalVars(config) {\n        return {\n          chartID: null,\n          // chart ID - apexcharts-cuid\n          cuid: null,\n          // chart ID - random numbers excluding \"apexcharts\" part\n          events: {\n            beforeMount: [],\n            mounted: [],\n            updated: [],\n            clicked: [],\n            selection: [],\n            dataPointSelection: [],\n            zoomed: [],\n            scrolled: []\n          },\n          colors: [],\n          clientX: null,\n          clientY: null,\n          fill: {\n            colors: []\n          },\n          stroke: {\n            colors: []\n          },\n          dataLabels: {\n            style: {\n              colors: []\n            }\n          },\n          radarPolygons: {\n            fill: {\n              colors: []\n            }\n          },\n          markers: {\n            colors: [],\n            size: config.markers.size,\n            largestSize: 0\n          },\n          animationEnded: false,\n          isTouchDevice: 'ontouchstart' in window || navigator.msMaxTouchPoints,\n          isDirty: false,\n          // chart has been updated after the initial render. This is different than dataChanged property. isDirty means user manually called some method to update\n          isExecCalled: false,\n          // whether user updated the chart through the exec method\n          initialConfig: null,\n          // we will store the first config user has set to go back when user finishes interactions like zooming and come out of it\n          lastXAxis: [],\n          lastYAxis: [],\n          series: [],\n          // the MAIN series array (y values)\n          seriesRangeStart: [],\n          // the clone of series becomes the start in range\n          seriesRangeEnd: [],\n          // the end values in range chart\n          seriesPercent: [],\n          // the percentage values of the given series\n          seriesTotals: [],\n          stackedSeriesTotals: [],\n          seriesX: [],\n          // store the numeric x values in this array (x values)\n          seriesZ: [],\n          // The 3rd \"Z\" dimension for bubbles chart (z values)\n          labels: [],\n          // store the text to draw on x axis\n          // Don't mutate the labels, many things including tooltips depends on it!\n          timelineLabels: [],\n          // store the timeline Labels in another variable\n          invertedTimelineLabels: [],\n          // for rangebar timeline\n          seriesNames: [],\n          // same as labels, used in non axis charts\n          noLabelsProvided: false,\n          // if user didn't provide any categories/labels or x values, fallback to 1,2,3,4...\n          allSeriesCollapsed: false,\n          collapsedSeries: [],\n          // when user collapses a series, it goes into this array\n          collapsedSeriesIndices: [],\n          // this stores the index of the collapsedSeries instead of whole object for quick access\n          ancillaryCollapsedSeries: [],\n          // when user collapses an \"alwaysVisible\" series, it goes into this array\n          ancillaryCollapsedSeriesIndices: [],\n          // this stores the index of the ancillaryCollapsedSeries whose y-axis is always visible\n          risingSeries: [],\n          // when user re-opens a collapsed series, it goes here\n          dataFormatXNumeric: false,\n          // boolean value to indicate user has passed numeric x values\n          capturedSeriesIndex: -1,\n          capturedDataPointIndex: -1,\n          selectedDataPoints: [],\n          ignoreYAxisIndexes: [],\n          // when series are being collapsed in multiple y axes, ignore certain index\n          yAxisSameScaleIndices: [],\n          padHorizontal: 0,\n          maxValsInArrayIndex: 0,\n          radialSize: 0,\n          zoomEnabled: config.chart.toolbar.autoSelected === 'zoom' && config.chart.toolbar.tools.zoom && config.chart.zoom.enabled,\n          panEnabled: config.chart.toolbar.autoSelected === 'pan' && config.chart.toolbar.tools.pan,\n          selectionEnabled: config.chart.toolbar.autoSelected === 'selection' && config.chart.toolbar.tools.selection,\n          yaxis: null,\n          minY: Number.MIN_VALUE,\n          //  is 5e-324, i.e. the smallest positive number\n          // NOTE: If there are multiple y axis, the first yaxis array element will be considered for all y values calculations. Rest all will be calculated based on that\n          maxY: -Number.MAX_VALUE,\n          // is -1.7976931348623157e+308\n          // NOTE: The above note for minY applies here as well\n          minYArr: [],\n          maxYArr: [],\n          maxX: -Number.MAX_VALUE,\n          // is -1.7976931348623157e+308\n          initialmaxX: -Number.MAX_VALUE,\n          minX: Number.MIN_VALUE,\n          //  is 5e-324, i.e. the smallest positive number\n          initialminX: Number.MIN_VALUE,\n          minZ: Number.MIN_VALUE,\n          // Max Z value in charts with Z axis\n          maxZ: -Number.MAX_VALUE,\n          // Max Z value in charts with Z axis\n          minXDiff: Number.MAX_VALUE,\n          mousedown: false,\n          lastClientPosition: {},\n          // don't reset this variable this the chart is destroyed. It is used to detect right or left mousemove in panning\n          visibleXRange: undefined,\n          yRange: [],\n          // this property is the absolute sum of positive and negative values [eg (-100 + 200 = 300)] - yAxis\n          zRange: 0,\n          // zAxis Range (for bubble charts)\n          xRange: 0,\n          // xAxis range\n          yValueDecimal: 0,\n          // are there floating numbers in the series. If yes, this represent the len of the decimals\n          total: 0,\n          SVGNS: 'http://www.w3.org/2000/svg',\n          // svg namespace\n          svgWidth: 0,\n          // the whole svg width\n          svgHeight: 0,\n          // the whole svg height\n          noData: false,\n          // whether there is any data to display or not\n          locale: {},\n          // the current locale values will be preserved here for global access\n          dom: {},\n          // for storing all dom nodes in this particular property\n          // elWrap: null, // the element that wraps everything\n          // elGraphical: null, // this contains lines/areas/bars/pies\n          // elGridRect: null, // paths going outside this area will be clipped\n          // elGridRectMask: null, // clipping will happen with this mask\n          // elGridRectMarkerMask: null, // clipping will happen with this mask\n          // elLegendWrap: null, // the whole legend area\n          // elDefs: null, // [defs] element\n          memory: {\n            methodsToExec: []\n          },\n          shouldAnimate: true,\n          skipLastTimelinelabel: false,\n          // when last label is cropped, skip drawing it\n          delayedElements: [],\n          // element which appear after animation has finished\n          axisCharts: true,\n          // chart type = line or area or bar\n          // (refer them also as plot charts in the code)\n          isXNumeric: false,\n          // bool: data was provided in a {[x,y], [x,y]} pattern\n          isDataXYZ: false,\n          // bool: data was provided in a {[x,y,z]} pattern\n          resized: false,\n          // bool: user has resized\n          resizeTimer: null,\n          // timeout function to make a small delay before\n          // drawing when user resized\n          comboCharts: false,\n          // bool: whether it's a combination of line/column\n          comboChartsHasBars: false,\n          // bool: whether it's a combination of line/column\n          dataChanged: false,\n          // bool: has data changed dynamically\n          previousPaths: [],\n          // array: when data is changed, it will animate from\n          // previous paths\n          seriesXvalues: [],\n          // we will need this in tooltip (it's x position)\n          // when we will have unequal x values, we will need\n          // some way to get x value depending on mouse pointer\n          seriesYvalues: [],\n          // we will need this when deciding which series\n          // user hovered on\n          seriesCandleO: [],\n          // candle stick open values\n          seriesCandleH: [],\n          // candle stick high values\n          seriesCandleL: [],\n          // candle stick low values\n          seriesCandleC: [],\n          // candle stick close values\n          allSeriesHasEqualX: true,\n          dataPoints: 0,\n          // the longest series length\n          pointsArray: [],\n          // store the points positions here to draw later on hover\n          // format is - [[x,y],[x,y]... [x,y]]\n          dataLabelsRects: [],\n          // store the positions of datalabels to prevent collision\n          lastDrawnDataLabelsIndexes: [],\n          hasNullValues: false,\n          // bool: whether series contains null values\n          easing: null,\n          // function: animation effect to apply\n          zoomed: false,\n          // whether user has zoomed or not\n          gridWidth: 0,\n          // drawable width of actual graphs (series paths)\n          gridHeight: 0,\n          // drawable height of actual graphs (series paths)\n          yAxisScale: [],\n          xAxisScale: null,\n          xAxisTicksPositions: [],\n          timescaleTicks: [],\n          rotateXLabels: false,\n          defaultLabels: false,\n          xLabelFormatter: undefined,\n          // formatter for x axis labels\n          yLabelFormatters: [],\n          xaxisTooltipFormatter: undefined,\n          // formatter for x axis tooltip\n          ttKeyFormatter: undefined,\n          ttVal: undefined,\n          ttZFormatter: undefined,\n          LINE_HEIGHT_RATIO: 1.618,\n          xAxisLabelsHeight: 0,\n          yAxisLabelsWidth: 0,\n          scaleX: 1,\n          scaleY: 1,\n          translateX: 0,\n          translateY: 0,\n          translateYAxisX: [],\n          yLabelsCoords: [],\n          yTitleCoords: [],\n          yAxisWidths: [],\n          translateXAxisY: 0,\n          translateXAxisX: 0,\n          tooltip: null,\n          tooltipOpts: null\n        };\n      }\n    }, {\n      key: \"init\",\n      value: function init(config) {\n        var globals = this.globalVars(config);\n        globals.initialConfig = Utils.extend({}, config);\n        globals.initialSeries = JSON.parse(JSON.stringify(globals.initialConfig.series));\n        globals.lastXAxis = JSON.parse(JSON.stringify(globals.initialConfig.xaxis));\n        globals.lastYAxis = JSON.parse(JSON.stringify(globals.initialConfig.yaxis));\n        return globals;\n      }\n    }]);\n\n    return Globals;\n  }();\n\n  /**\n   * ApexCharts Base Class for extending user options with pre-defined ApexCharts config.\n   *\n   * @module Base\n   **/\n\n  var Base =\n  /*#__PURE__*/\n  function () {\n    function Base(opts) {\n      _classCallCheck(this, Base);\n\n      this.opts = opts;\n    }\n\n    _createClass(Base, [{\n      key: \"init\",\n      value: function init() {\n        var config = new Config(this.opts).init();\n        var globals = new Globals().init(config);\n        var w = {\n          config: config,\n          globals: globals\n        };\n        return w;\n      }\n    }]);\n\n    return Base;\n  }();\n\n  /**\n   * ApexCharts Fill Class for setting fill options of the paths.\n   *\n   * @module Fill\n   **/\n\n  var Fill =\n  /*#__PURE__*/\n  function () {\n    function Fill(ctx) {\n      _classCallCheck(this, Fill);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n      this.opts = null;\n      this.seriesIndex = 0;\n    }\n\n    _createClass(Fill, [{\n      key: \"clippedImgArea\",\n      value: function clippedImgArea(params) {\n        var w = this.w;\n        var cnf = w.config;\n        var svgW = parseInt(w.globals.gridWidth);\n        var svgH = parseInt(w.globals.gridHeight);\n        var size = svgW > svgH ? svgW : svgH;\n        var fillImg = params.image;\n        var imgWidth = 0;\n        var imgHeight = 0;\n\n        if (typeof params.width === 'undefined' && typeof params.height === 'undefined') {\n          if (cnf.fill.image.width !== undefined && cnf.fill.image.height !== undefined) {\n            imgWidth = cnf.fill.image.width + 1;\n            imgHeight = cnf.fill.image.height;\n          } else {\n            imgWidth = size + 1;\n            imgHeight = size;\n          }\n        } else {\n          imgWidth = params.width;\n          imgHeight = params.height;\n        }\n\n        var elPattern = document.createElementNS(w.globals.SVGNS, 'pattern');\n        Graphics.setAttrs(elPattern, {\n          id: params.patternID,\n          patternUnits: params.patternUnits ? params.patternUnits : 'userSpaceOnUse',\n          width: imgWidth + 'px',\n          height: imgHeight + 'px'\n        });\n        var elImage = document.createElementNS(w.globals.SVGNS, 'image');\n        elPattern.appendChild(elImage);\n        elImage.setAttributeNS('http://www.w3.org/1999/xlink', 'href', fillImg);\n        Graphics.setAttrs(elImage, {\n          x: 0,\n          y: 0,\n          preserveAspectRatio: 'none',\n          width: imgWidth + 'px',\n          height: imgHeight + 'px'\n        });\n        elImage.style.opacity = params.opacity;\n        w.globals.dom.elDefs.node.appendChild(elPattern);\n      }\n    }, {\n      key: \"getSeriesIndex\",\n      value: function getSeriesIndex(opts) {\n        var w = this.w;\n\n        if (w.config.chart.type === 'bar' && w.config.plotOptions.bar.distributed || w.config.chart.type === 'heatmap') {\n          this.seriesIndex = opts.seriesNumber;\n        } else {\n          this.seriesIndex = opts.seriesNumber % w.globals.series.length;\n        }\n\n        return this.seriesIndex;\n      }\n    }, {\n      key: \"fillPath\",\n      value: function fillPath(opts) {\n        var w = this.w;\n        this.opts = opts;\n        var cnf = this.w.config;\n        var pathFill;\n        var patternFill, gradientFill;\n        this.seriesIndex = this.getSeriesIndex(opts);\n        var fillColors = this.getFillColors();\n        var fillColor = fillColors[this.seriesIndex];\n\n        if (typeof fillColor === 'function') {\n          fillColor = fillColor({\n            seriesIndex: this.seriesIndex,\n            value: opts.value,\n            w: w\n          });\n        }\n\n        var fillType = this.getFillType(this.seriesIndex);\n        var fillOpacity = Array.isArray(cnf.fill.opacity) ? cnf.fill.opacity[this.seriesIndex] : cnf.fill.opacity;\n        var defaultColor = fillColor;\n\n        if (opts.color) {\n          fillColor = opts.color;\n        }\n\n        if (fillColor.indexOf('rgb') === -1) {\n          defaultColor = Utils.hexToRgba(fillColor, fillOpacity);\n        } else {\n          if (fillColor.indexOf('rgba') > -1) {\n            fillOpacity = 0 + '.' + Utils.getOpacityFromRGBA(fillColor);\n          }\n        }\n\n        if (fillType === 'pattern') {\n          patternFill = this.handlePatternFill(patternFill, fillColor, fillOpacity, defaultColor);\n        }\n\n        if (fillType === 'gradient') {\n          gradientFill = this.handleGradientFill(gradientFill, fillColor, fillOpacity, this.seriesIndex);\n        }\n\n        if (cnf.fill.image.src.length > 0 && fillType === 'image') {\n          if (opts.seriesNumber < cnf.fill.image.src.length) {\n            this.clippedImgArea({\n              opacity: fillOpacity,\n              image: cnf.fill.image.src[opts.seriesNumber],\n              patternUnits: opts.patternUnits,\n              patternID: \"pattern\".concat(w.globals.cuid).concat(opts.seriesNumber + 1)\n            });\n            pathFill = \"url(#pattern\".concat(w.globals.cuid).concat(opts.seriesNumber + 1, \")\");\n          } else {\n            pathFill = defaultColor;\n          }\n        } else if (fillType === 'gradient') {\n          pathFill = gradientFill;\n        } else if (fillType === 'pattern') {\n          pathFill = patternFill;\n        } else {\n          pathFill = defaultColor;\n        } // override pattern/gradient if opts.solid is true\n\n\n        if (opts.solid) {\n          pathFill = defaultColor;\n        }\n\n        return pathFill;\n      }\n    }, {\n      key: \"getFillType\",\n      value: function getFillType(seriesIndex) {\n        var w = this.w;\n\n        if (Array.isArray(w.config.fill.type)) {\n          return w.config.fill.type[seriesIndex];\n        } else {\n          return w.config.fill.type;\n        }\n      }\n    }, {\n      key: \"getFillColors\",\n      value: function getFillColors() {\n        var w = this.w;\n        var cnf = w.config;\n        var opts = this.opts;\n        var fillColors = [];\n\n        if (w.globals.comboCharts) {\n          if (w.config.series[this.seriesIndex].type === 'line') {\n            if (w.globals.stroke.colors instanceof Array) {\n              fillColors = w.globals.stroke.colors;\n            } else {\n              fillColors.push(w.globals.stroke.colors);\n            }\n          } else {\n            if (w.globals.fill.colors instanceof Array) {\n              fillColors = w.globals.fill.colors;\n            } else {\n              fillColors.push(w.globals.fill.colors);\n            }\n          }\n        } else {\n          if (cnf.chart.type === 'line') {\n            if (w.globals.stroke.colors instanceof Array) {\n              fillColors = w.globals.stroke.colors;\n            } else {\n              fillColors.push(w.globals.stroke.colors);\n            }\n          } else {\n            if (w.globals.fill.colors instanceof Array) {\n              fillColors = w.globals.fill.colors;\n            } else {\n              fillColors.push(w.globals.fill.colors);\n            }\n          }\n        } // colors passed in arguments\n\n\n        if (typeof opts.fillColors !== 'undefined') {\n          fillColors = [];\n\n          if (opts.fillColors instanceof Array) {\n            fillColors = opts.fillColors.slice();\n          } else {\n            fillColors.push(opts.fillColors);\n          }\n        }\n\n        return fillColors;\n      }\n    }, {\n      key: \"handlePatternFill\",\n      value: function handlePatternFill(patternFill, fillColor, fillOpacity, defaultColor) {\n        var cnf = this.w.config;\n        var opts = this.opts;\n        var graphics = new Graphics(this.ctx);\n        var patternStrokeWidth = cnf.fill.pattern.strokeWidth === undefined ? Array.isArray(cnf.stroke.width) ? cnf.stroke.width[this.seriesIndex] : cnf.stroke.width : Array.isArray(cnf.fill.pattern.strokeWidth) ? cnf.fill.pattern.strokeWidth[this.seriesIndex] : cnf.fill.pattern.strokeWidth;\n        var patternLineColor = fillColor;\n\n        if (cnf.fill.pattern.style instanceof Array) {\n          if (typeof cnf.fill.pattern.style[opts.seriesNumber] !== 'undefined') {\n            var pf = graphics.drawPattern(cnf.fill.pattern.style[opts.seriesNumber], cnf.fill.pattern.width, cnf.fill.pattern.height, patternLineColor, patternStrokeWidth, fillOpacity);\n            patternFill = pf;\n          } else {\n            patternFill = defaultColor;\n          }\n        } else {\n          patternFill = graphics.drawPattern(cnf.fill.pattern.style, cnf.fill.pattern.width, cnf.fill.pattern.height, patternLineColor, patternStrokeWidth, fillOpacity);\n        }\n\n        return patternFill;\n      }\n    }, {\n      key: \"handleGradientFill\",\n      value: function handleGradientFill(gradientFill, fillColor, fillOpacity, i) {\n        var cnf = this.w.config;\n        var opts = this.opts;\n        var graphics = new Graphics(this.ctx);\n        var utils = new Utils();\n        var type = cnf.fill.gradient.type;\n        var gradientFrom, gradientTo;\n        var opacityFrom = cnf.fill.gradient.opacityFrom === undefined ? fillOpacity : Array.isArray(cnf.fill.gradient.opacityFrom) ? cnf.fill.gradient.opacityFrom[i] : cnf.fill.gradient.opacityFrom;\n        var opacityTo = cnf.fill.gradient.opacityTo === undefined ? fillOpacity : Array.isArray(cnf.fill.gradient.opacityTo) ? cnf.fill.gradient.opacityTo[i] : cnf.fill.gradient.opacityTo;\n        gradientFrom = fillColor;\n\n        if (cnf.fill.gradient.gradientToColors === undefined || cnf.fill.gradient.gradientToColors.length === 0) {\n          if (cnf.fill.gradient.shade === 'dark') {\n            gradientTo = utils.shadeColor(parseFloat(cnf.fill.gradient.shadeIntensity) * -1, fillColor);\n          } else {\n            gradientTo = utils.shadeColor(parseFloat(cnf.fill.gradient.shadeIntensity), fillColor);\n          }\n        } else {\n          gradientTo = cnf.fill.gradient.gradientToColors[opts.seriesNumber];\n        }\n\n        if (cnf.fill.gradient.inverseColors) {\n          var t = gradientFrom;\n          gradientFrom = gradientTo;\n          gradientTo = t;\n        }\n\n        gradientFill = graphics.drawGradient(type, gradientFrom, gradientTo, opacityFrom, opacityTo, opts.size, cnf.fill.gradient.stops, cnf.fill.gradient.colorStops, i);\n        return gradientFill;\n      }\n    }]);\n\n    return Fill;\n  }();\n\n  /**\n   * ApexCharts Markers Class for drawing points on y values in axes charts.\n   *\n   * @module Markers\n   **/\n\n  var Markers =\n  /*#__PURE__*/\n  function () {\n    function Markers(ctx, opts) {\n      _classCallCheck(this, Markers);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n    }\n\n    _createClass(Markers, [{\n      key: \"setGlobalMarkerSize\",\n      value: function setGlobalMarkerSize() {\n        var w = this.w;\n        w.globals.markers.size = Array.isArray(w.config.markers.size) ? w.config.markers.size : [w.config.markers.size];\n\n        if (w.globals.markers.size.length > 0) {\n          if (w.globals.markers.size.length < w.globals.series.length + 1) {\n            for (var i = 0; i <= w.globals.series.length; i++) {\n              if (typeof w.globals.markers.size[i] === 'undefined') {\n                w.globals.markers.size.push(w.globals.markers.size[0]);\n              }\n            }\n          }\n        } else {\n          w.globals.markers.size = w.config.series.map(function (s) {\n            return w.config.markers.size;\n          });\n        }\n      }\n    }, {\n      key: \"plotChartMarkers\",\n      value: function plotChartMarkers(pointsPos, seriesIndex, j) {\n        var w = this.w;\n        var i = seriesIndex;\n        var p = pointsPos;\n        var elPointsWrap = null;\n        var graphics = new Graphics(this.ctx);\n        var point;\n\n        if (w.globals.markers.size[seriesIndex] > 0) {\n          elPointsWrap = graphics.group({\n            class: 'apexcharts-series-markers'\n          });\n          elPointsWrap.attr('clip-path', \"url(#gridRectMarkerMask\".concat(w.globals.cuid, \")\"));\n        }\n\n        if (p.x instanceof Array) {\n          for (var q = 0; q < p.x.length; q++) {\n            var dataPointIndex = j; // a small hack as we have 2 points for the first val to connect it\n\n            if (j === 1 && q === 0) dataPointIndex = 0;\n            if (j === 1 && q === 1) dataPointIndex = 1;\n            var PointClasses = 'apexcharts-marker';\n\n            if ((w.config.chart.type === 'line' || w.config.chart.type === 'area') && !w.globals.comboCharts && !w.config.tooltip.intersect) {\n              PointClasses += ' no-pointer-events';\n            }\n\n            var shouldMarkerDraw = Array.isArray(w.config.markers.size) ? w.globals.markers.size[seriesIndex] > 0 : w.config.markers.size > 0;\n\n            if (shouldMarkerDraw) {\n              if (Utils.isNumber(p.y[q])) {\n                PointClasses += \" w\".concat((Math.random() + 1).toString(36).substring(4));\n              } else {\n                PointClasses = 'apexcharts-nullpoint';\n              }\n\n              var opts = this.getMarkerConfig(PointClasses, seriesIndex, dataPointIndex);\n\n              if (w.config.series[i].data[j]) {\n                if (w.config.series[i].data[j].fillColor) {\n                  opts.pointFillColor = w.config.series[i].data[j].fillColor;\n                }\n\n                if (w.config.series[i].data[j].strokeColor) {\n                  opts.pointStrokeColor = w.config.series[i].data[j].strokeColor;\n                }\n              }\n\n              point = graphics.drawMarker(p.x[q], p.y[q], opts);\n              point.attr('rel', dataPointIndex);\n              point.attr('j', dataPointIndex);\n              point.attr('index', seriesIndex);\n              point.node.setAttribute('default-marker-size', opts.pSize);\n              var filters = new Filters(this.ctx);\n              filters.setSelectionFilter(point, seriesIndex, dataPointIndex);\n              this.addEvents(point);\n\n              if (elPointsWrap) {\n                elPointsWrap.add(point);\n              }\n            } else {\n              // dynamic array creation - multidimensional\n              if (typeof w.globals.pointsArray[seriesIndex] === 'undefined') w.globals.pointsArray[seriesIndex] = [];\n              w.globals.pointsArray[seriesIndex].push([p.x[q], p.y[q]]);\n            }\n          }\n        }\n\n        return elPointsWrap;\n      }\n    }, {\n      key: \"getMarkerConfig\",\n      value: function getMarkerConfig(cssClass, seriesIndex) {\n        var dataPointIndex = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n        var w = this.w;\n        var pStyle = this.getMarkerStyle(seriesIndex);\n        var pSize = w.globals.markers.size[seriesIndex]; // discrete markers is an option where user can specify a particular marker with different size and color\n\n        if (dataPointIndex !== null && w.config.markers.discrete.length) {\n          w.config.markers.discrete.map(function (marker) {\n            if (marker.seriesIndex === seriesIndex && marker.dataPointIndex === dataPointIndex) {\n              pStyle.pointStrokeColor = marker.strokeColor;\n              pStyle.pointFillColor = marker.fillColor;\n              pSize = marker.size;\n            }\n          });\n        }\n\n        return {\n          pSize: pSize,\n          pRadius: w.config.markers.radius,\n          pWidth: w.config.markers.strokeWidth,\n          pointStrokeColor: pStyle.pointStrokeColor,\n          pointFillColor: pStyle.pointFillColor,\n          shape: w.config.markers.shape instanceof Array ? w.config.markers.shape[seriesIndex] : w.config.markers.shape,\n          class: cssClass,\n          pointStrokeOpacity: w.config.markers.strokeOpacity,\n          pointFillOpacity: w.config.markers.fillOpacity,\n          seriesIndex: seriesIndex\n        };\n      }\n    }, {\n      key: \"addEvents\",\n      value: function addEvents(circle) {\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        circle.node.addEventListener('mouseenter', graphics.pathMouseEnter.bind(this.ctx, circle));\n        circle.node.addEventListener('mouseleave', graphics.pathMouseLeave.bind(this.ctx, circle));\n        circle.node.addEventListener('mousedown', graphics.pathMouseDown.bind(this.ctx, circle));\n        circle.node.addEventListener('click', w.config.markers.onClick);\n        circle.node.addEventListener('dblclick', w.config.markers.onDblClick);\n        circle.node.addEventListener('touchstart', graphics.pathMouseDown.bind(this.ctx, circle), {\n          passive: true\n        });\n      }\n    }, {\n      key: \"getMarkerStyle\",\n      value: function getMarkerStyle(seriesIndex) {\n        var w = this.w;\n        var colors = w.globals.markers.colors;\n        var strokeColors = w.config.markers.strokeColor || w.config.markers.strokeColors;\n        var pointStrokeColor = strokeColors instanceof Array ? strokeColors[seriesIndex] : strokeColors;\n        var pointFillColor = colors instanceof Array ? colors[seriesIndex] : colors;\n        return {\n          pointStrokeColor: pointStrokeColor,\n          pointFillColor: pointFillColor\n        };\n      }\n    }]);\n\n    return Markers;\n  }();\n\n  /**\n   * ApexCharts Scatter Class.\n   * This Class also handles bubbles chart as currently there is no major difference in drawing them,\n   * @module Scatter\n   **/\n\n  var Scatter =\n  /*#__PURE__*/\n  function () {\n    function Scatter(ctx) {\n      _classCallCheck(this, Scatter);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n      this.initialAnim = this.w.config.chart.animations.enabled;\n      this.dynamicAnim = this.initialAnim && this.w.config.chart.animations.dynamicAnimation.enabled; // this array will help in centering the label in bubbles\n\n      this.radiusSizes = [];\n    }\n\n    _createClass(Scatter, [{\n      key: \"draw\",\n      value: function draw(elSeries, j, opts) {\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var realIndex = opts.realIndex;\n        var pointsPos = opts.pointsPos;\n        var zRatio = opts.zRatio;\n        var elPointsMain = opts.elParent;\n        var elPointsWrap = graphics.group({\n          class: \"apexcharts-series-markers apexcharts-series-\".concat(w.config.chart.type)\n        });\n        elPointsWrap.attr('clip-path', \"url(#gridRectMarkerMask\".concat(w.globals.cuid, \")\"));\n\n        if (pointsPos.x instanceof Array) {\n          for (var q = 0; q < pointsPos.x.length; q++) {\n            var dataPointIndex = j + 1;\n            var shouldDraw = true; // a small hack as we have 2 points for the first val to connect it\n\n            if (j === 0 && q === 0) dataPointIndex = 0;\n            if (j === 0 && q === 1) dataPointIndex = 1;\n            var radius = 0;\n            var finishRadius = w.globals.markers.size[realIndex];\n\n            if (zRatio !== Infinity) {\n              // means we have a bubble\n              finishRadius = w.globals.seriesZ[realIndex][dataPointIndex] / zRatio;\n\n              if (typeof this.radiusSizes[realIndex] === 'undefined') {\n                this.radiusSizes.push([]);\n              }\n\n              this.radiusSizes[realIndex].push(finishRadius);\n            }\n\n            if (!w.config.chart.animations.enabled) {\n              radius = finishRadius;\n            }\n\n            var x = pointsPos.x[q];\n            var y = pointsPos.y[q];\n            radius = radius || 0;\n\n            if (x === 0 && y === 0 || y === null || typeof w.globals.series[realIndex][dataPointIndex] === 'undefined') {\n              shouldDraw = false;\n            }\n\n            if (shouldDraw) {\n              var circle = this.drawPoint(x, y, radius, finishRadius, realIndex, dataPointIndex, j);\n              elPointsWrap.add(circle);\n            }\n\n            elPointsMain.add(elPointsWrap);\n          }\n        }\n      }\n    }, {\n      key: \"drawPoint\",\n      value: function drawPoint(x, y, radius, finishRadius, realIndex, dataPointIndex, j) {\n        var w = this.w;\n        var i = realIndex;\n        var anim = new Animations(this.ctx);\n        var filters = new Filters(this.ctx);\n        var fill = new Fill(this.ctx);\n        var markers = new Markers(this.ctx);\n        var graphics = new Graphics(this.ctx);\n        var markerConfig = markers.getMarkerConfig('apexcharts-marker', i);\n        var pathFillCircle = fill.fillPath({\n          seriesNumber: realIndex,\n          patternUnits: 'objectBoundingBox',\n          value: w.globals.series[realIndex][j]\n        });\n        var circle = graphics.drawCircle(radius);\n\n        if (w.config.series[i].data[dataPointIndex]) {\n          if (w.config.series[i].data[dataPointIndex].fillColor) {\n            pathFillCircle = w.config.series[i].data[dataPointIndex].fillColor;\n          }\n        }\n\n        circle.attr({\n          cx: x,\n          cy: y,\n          fill: pathFillCircle,\n          stroke: markerConfig.pointStrokeColor,\n          strokeWidth: markerConfig.pWidth\n        });\n\n        if (w.config.chart.dropShadow.enabled) {\n          var dropShadow = w.config.chart.dropShadow;\n          filters.dropShadow(circle, dropShadow, realIndex);\n        }\n\n        if (this.initialAnim && !w.globals.dataChanged) {\n          var speed = 1;\n\n          if (!w.globals.resized) {\n            speed = w.config.chart.animations.speed;\n          }\n\n          anim.animateCircleRadius(circle, 0, finishRadius, speed, w.globals.easing);\n        }\n\n        if (w.globals.dataChanged) {\n          if (this.dynamicAnim) {\n            var _speed = w.config.chart.animations.dynamicAnimation.speed;\n            var prevX, prevY, prevR;\n            var prevPathJ = null;\n            prevPathJ = w.globals.previousPaths[realIndex] && w.globals.previousPaths[realIndex][j];\n\n            if (typeof prevPathJ !== 'undefined' && prevPathJ !== null) {\n              // series containing less elements will ignore these values and revert to 0\n              prevX = prevPathJ.x;\n              prevY = prevPathJ.y;\n              prevR = typeof prevPathJ.r !== 'undefined' ? prevPathJ.r : finishRadius;\n            }\n\n            for (var cs = 0; cs < w.globals.collapsedSeries.length; cs++) {\n              if (w.globals.collapsedSeries[cs].index === realIndex) {\n                _speed = 1;\n                finishRadius = 0;\n              }\n            }\n\n            if (x === 0 && y === 0) finishRadius = 0;\n            anim.animateCircle(circle, {\n              cx: prevX,\n              cy: prevY,\n              r: prevR\n            }, {\n              cx: x,\n              cy: y,\n              r: finishRadius\n            }, _speed, w.globals.easing);\n          } else {\n            circle.attr({\n              r: finishRadius\n            });\n          }\n        }\n\n        circle.attr({\n          rel: dataPointIndex,\n          j: dataPointIndex,\n          index: realIndex,\n          'default-marker-size': finishRadius\n        });\n        filters.setSelectionFilter(circle, realIndex, dataPointIndex);\n        markers.addEvents(circle);\n        circle.node.classList.add('apexcharts-marker');\n        return circle;\n      }\n    }, {\n      key: \"centerTextInBubble\",\n      value: function centerTextInBubble(y) {\n        var w = this.w;\n        y = y + parseInt(w.config.dataLabels.style.fontSize) / 4;\n        return {\n          y: y\n        };\n      }\n    }]);\n\n    return Scatter;\n  }();\n\n  /**\n   * ApexCharts DataLabels Class for drawing dataLabels on Axes based Charts.\n   *\n   * @module DataLabels\n   **/\n\n  var DataLabels =\n  /*#__PURE__*/\n  function () {\n    function DataLabels(ctx) {\n      _classCallCheck(this, DataLabels);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n    } // When there are many datalabels to be printed, and some of them overlaps each other in the same series, this method will take care of that\n    // Also, when datalabels exceeds the drawable area and get clipped off, we need to adjust and move some pixels to make them visible again\n\n\n    _createClass(DataLabels, [{\n      key: \"dataLabelsCorrection\",\n      value: function dataLabelsCorrection(x, y, val, i, dataPointIndex, alwaysDrawDataLabel, fontSize) {\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var drawnextLabel = false; //\n\n        var textRects = graphics.getTextRects(val, fontSize);\n        var width = textRects.width;\n        var height = textRects.height; // first value in series, so push an empty array\n\n        if (typeof w.globals.dataLabelsRects[i] === 'undefined') w.globals.dataLabelsRects[i] = []; // then start pushing actual rects in that sub-array\n\n        w.globals.dataLabelsRects[i].push({\n          x: x,\n          y: y,\n          width: width,\n          height: height\n        });\n        var len = w.globals.dataLabelsRects[i].length - 2;\n        var lastDrawnIndex = typeof w.globals.lastDrawnDataLabelsIndexes[i] !== 'undefined' ? w.globals.lastDrawnDataLabelsIndexes[i][w.globals.lastDrawnDataLabelsIndexes[i].length - 1] : 0;\n\n        if (typeof w.globals.dataLabelsRects[i][len] !== 'undefined') {\n          var lastDataLabelRect = w.globals.dataLabelsRects[i][lastDrawnIndex];\n\n          if ( // next label forward and x not intersecting\n          x > lastDataLabelRect.x + lastDataLabelRect.width + 2 || y > lastDataLabelRect.y + lastDataLabelRect.height + 2 || x + width < lastDataLabelRect.x // next label is going to be drawn backwards\n          ) {\n              // the 2 indexes don't override, so OK to draw next label\n              drawnextLabel = true;\n            }\n        }\n\n        if (dataPointIndex === 0 || alwaysDrawDataLabel) {\n          drawnextLabel = true;\n        }\n\n        return {\n          x: x,\n          y: y,\n          textRects: textRects,\n          drawnextLabel: drawnextLabel\n        };\n      }\n    }, {\n      key: \"drawDataLabel\",\n      value: function drawDataLabel(pos, i, j) {\n        var align = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 'top';\n        // this method handles line, area, bubble, scatter charts as those charts contains markers/points which have pre-defined x/y positions\n        // all other charts like bars / heatmaps will define their own drawDataLabel routine\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var dataLabelsConfig = w.config.dataLabels;\n        var x = 0;\n        var y = 0;\n        var dataPointIndex = j;\n        var elDataLabelsWrap = null;\n\n        if (!dataLabelsConfig.enabled || pos.x instanceof Array !== true) {\n          return elDataLabelsWrap;\n        }\n\n        elDataLabelsWrap = graphics.group({\n          class: 'apexcharts-data-labels'\n        });\n\n        for (var q = 0; q < pos.x.length; q++) {\n          x = pos.x[q] + dataLabelsConfig.offsetX;\n          y = pos.y[q] + dataLabelsConfig.offsetY - w.globals.markers.size[i] - 5;\n\n          if (align === 'bottom') {\n            y = y + w.globals.markers.size[i] * 2 + parseInt(dataLabelsConfig.style.fontSize) * 1.4;\n          }\n\n          if (!isNaN(x)) {\n            // a small hack as we have 2 points for the first val to connect it\n            if (j === 1 && q === 0) dataPointIndex = 0;\n            if (j === 1 && q === 1) dataPointIndex = 1;\n            var val = w.globals.series[i][dataPointIndex];\n            var text = '';\n\n            if (w.config.chart.type === 'bubble') {\n              text = w.globals.seriesZ[i][dataPointIndex];\n              y = pos.y[q] + w.config.dataLabels.offsetY;\n              var scatter = new Scatter(this.ctx);\n              var centerTextInBubbleCoords = scatter.centerTextInBubble(y, i, dataPointIndex);\n              y = centerTextInBubbleCoords.y;\n            } else {\n              if (typeof val !== 'undefined') {\n                text = w.config.dataLabels.formatter(val, {\n                  ctx: this.ctx,\n                  seriesIndex: i,\n                  dataPointIndex: dataPointIndex,\n                  w: w\n                });\n              }\n            }\n\n            this.plotDataLabelsText({\n              x: x,\n              y: y,\n              text: text,\n              i: i,\n              j: dataPointIndex,\n              parent: elDataLabelsWrap,\n              offsetCorrection: true,\n              dataLabelsConfig: w.config.dataLabels\n            });\n          }\n        }\n\n        return elDataLabelsWrap;\n      }\n    }, {\n      key: \"plotDataLabelsText\",\n      value: function plotDataLabelsText(opts) {\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var x = opts.x,\n            y = opts.y,\n            i = opts.i,\n            j = opts.j,\n            text = opts.text,\n            textAnchor = opts.textAnchor,\n            parent = opts.parent,\n            dataLabelsConfig = opts.dataLabelsConfig,\n            alwaysDrawDataLabel = opts.alwaysDrawDataLabel,\n            offsetCorrection = opts.offsetCorrection;\n\n        if (Array.isArray(w.config.dataLabels.enabledOnSeries)) {\n          if (w.config.dataLabels.enabledOnSeries.indexOf(i) < 0) {\n            return;\n          }\n        }\n\n        var correctedLabels = {\n          x: x,\n          y: y,\n          drawnextLabel: true\n        };\n\n        if (offsetCorrection) {\n          correctedLabels = this.dataLabelsCorrection(x, y, text, i, j, alwaysDrawDataLabel, parseInt(dataLabelsConfig.style.fontSize));\n        } // when zoomed, we don't need to correct labels offsets,\n        // but if normally, labels get cropped, correct them\n\n\n        if (!w.globals.zoomed) {\n          x = correctedLabels.x;\n          y = correctedLabels.y;\n        }\n\n        if (correctedLabels.textRects) {\n          if (x + correctedLabels.textRects.width < 10 || x > w.globals.gridWidth + 10) {\n            // datalabels fall outside drawing area, so draw a blank label\n            text = '';\n          }\n        }\n\n        if (correctedLabels.drawnextLabel) {\n          var dataLabelText = graphics.drawText({\n            width: 100,\n            height: parseInt(dataLabelsConfig.style.fontSize),\n            x: x,\n            y: y,\n            foreColor: w.globals.dataLabels.style.colors[i],\n            textAnchor: textAnchor || dataLabelsConfig.textAnchor,\n            text: text,\n            fontSize: dataLabelsConfig.style.fontSize,\n            fontFamily: dataLabelsConfig.style.fontFamily\n          });\n          dataLabelText.attr({\n            class: 'apexcharts-datalabel',\n            cx: x,\n            cy: y\n          });\n\n          if (dataLabelsConfig.dropShadow.enabled) {\n            var textShadow = dataLabelsConfig.dropShadow;\n            var filters = new Filters(this.ctx);\n            filters.dropShadow(dataLabelText, textShadow);\n          }\n\n          parent.add(dataLabelText);\n\n          if (typeof w.globals.lastDrawnDataLabelsIndexes[i] === 'undefined') {\n            w.globals.lastDrawnDataLabelsIndexes[i] = [];\n          }\n\n          w.globals.lastDrawnDataLabelsIndexes[i].push(j);\n        }\n      }\n    }]);\n\n    return DataLabels;\n  }();\n\n  /**\n   * ApexCharts Bar Class responsible for drawing both Columns and Bars.\n   *\n   * @module Bar\n   **/\n\n  var Bar =\n  /*#__PURE__*/\n  function () {\n    function Bar(ctx, xyRatios) {\n      _classCallCheck(this, Bar);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n      var w = this.w;\n      this.barOptions = w.config.plotOptions.bar;\n      this.isHorizontal = this.barOptions.horizontal;\n      this.strokeWidth = w.config.stroke.width;\n      this.isNullValue = false;\n      this.xyRatios = xyRatios;\n\n      if (this.xyRatios !== null) {\n        this.xRatio = xyRatios.xRatio;\n        this.yRatio = xyRatios.yRatio;\n        this.invertedXRatio = xyRatios.invertedXRatio;\n        this.invertedYRatio = xyRatios.invertedYRatio;\n        this.baseLineY = xyRatios.baseLineY;\n        this.baseLineInvertedY = xyRatios.baseLineInvertedY;\n      }\n\n      this.yaxisIndex = 0;\n      this.seriesLen = 0;\n    }\n    /** primary draw method which is called on bar object\n     * @memberof Bar\n     * @param {array} series - user supplied series values\n     * @param {int} seriesIndex - the index by which series will be drawn on the svg\n     * @return {node} element which is supplied to parent chart draw method for appending\n     **/\n\n\n    _createClass(Bar, [{\n      key: \"draw\",\n      value: function draw(series, seriesIndex) {\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var coreUtils = new CoreUtils(this.ctx, w);\n        series = coreUtils.getLogSeries(series);\n        this.series = series;\n        this.yRatio = coreUtils.getLogYRatios(this.yRatio);\n        this.initVariables(series);\n        var ret = graphics.group({\n          class: 'apexcharts-bar-series apexcharts-plot-series'\n        });\n\n        if (w.config.dataLabels.enabled) {\n          if (this.totalItems > w.config.plotOptions.bar.dataLabels.maxItems) {\n            console.warn('WARNING: DataLabels are enabled but there are too many to display. This may cause performance issue when rendering.');\n          }\n        }\n\n        for (var i = 0, bc = 0; i < series.length; i++, bc++) {\n          var pathTo = void 0,\n              pathFrom = void 0;\n          var x = void 0,\n              y = void 0,\n              xDivision = void 0,\n              // xDivision is the GRIDWIDTH divided by number of datapoints (columns)\n          yDivision = void 0,\n              // yDivision is the GRIDHEIGHT divided by number of datapoints (bars)\n          zeroH = void 0,\n              // zeroH is the baseline where 0 meets y axis\n          zeroW = void 0; // zeroW is the baseline where 0 meets x axis\n\n          var yArrj = []; // hold y values of current iterating series\n\n          var xArrj = []; // hold x values of current iterating series\n\n          var realIndex = w.globals.comboCharts ? seriesIndex[i] : i; // el to which series will be drawn\n\n          var elSeries = graphics.group({\n            class: \"apexcharts-series\",\n            rel: i + 1,\n            seriesName: Utils.escapeString(w.globals.seriesNames[realIndex]),\n            'data:realIndex': realIndex\n          });\n          this.ctx.series.addCollapsedClassToSeries(elSeries, realIndex);\n\n          if (series[i].length > 0) {\n            this.visibleI = this.visibleI + 1;\n          }\n\n          var strokeWidth = 0;\n          var barHeight = 0;\n          var barWidth = 0;\n\n          if (this.yRatio.length > 1) {\n            this.yaxisIndex = realIndex;\n          }\n\n          this.isReversed = w.config.yaxis[this.yaxisIndex] && w.config.yaxis[this.yaxisIndex].reversed;\n          var initPositions = this.initialPositions();\n          y = initPositions.y;\n          barHeight = initPositions.barHeight;\n          yDivision = initPositions.yDivision;\n          zeroW = initPositions.zeroW;\n          x = initPositions.x;\n          barWidth = initPositions.barWidth;\n          xDivision = initPositions.xDivision;\n          zeroH = initPositions.zeroH;\n\n          if (!this.horizontal) {\n            xArrj.push(x + barWidth / 2);\n          } // eldatalabels\n\n\n          var elDataLabelsWrap = graphics.group({\n            class: 'apexcharts-datalabels'\n          });\n\n          for (var j = 0, tj = w.globals.dataPoints; j < w.globals.dataPoints; j++, tj--) {\n            if (typeof this.series[i][j] === 'undefined' || series[i][j] === null) {\n              this.isNullValue = true;\n            } else {\n              this.isNullValue = false;\n            }\n\n            if (w.config.stroke.show) {\n              if (this.isNullValue) {\n                strokeWidth = 0;\n              } else {\n                strokeWidth = Array.isArray(this.strokeWidth) ? this.strokeWidth[realIndex] : this.strokeWidth;\n              }\n            }\n\n            var paths = null;\n\n            if (this.isHorizontal) {\n              paths = this.drawBarPaths({\n                indexes: {\n                  i: i,\n                  j: j,\n                  realIndex: realIndex,\n                  bc: bc\n                },\n                barHeight: barHeight,\n                strokeWidth: strokeWidth,\n                pathTo: pathTo,\n                pathFrom: pathFrom,\n                zeroW: zeroW,\n                x: x,\n                y: y,\n                yDivision: yDivision,\n                elSeries: elSeries\n              });\n              barWidth = this.series[i][j] / this.invertedYRatio;\n            } else {\n              paths = this.drawColumnPaths({\n                indexes: {\n                  i: i,\n                  j: j,\n                  realIndex: realIndex,\n                  bc: bc\n                },\n                x: x,\n                y: y,\n                xDivision: xDivision,\n                pathTo: pathTo,\n                pathFrom: pathFrom,\n                barWidth: barWidth,\n                zeroH: zeroH,\n                strokeWidth: strokeWidth,\n                elSeries: elSeries\n              });\n              barHeight = this.series[i][j] / this.yRatio[this.yaxisIndex];\n            }\n\n            pathTo = paths.pathTo;\n            pathFrom = paths.pathFrom;\n            y = paths.y;\n            x = paths.x; // push current X\n\n            if (j > 0) {\n              xArrj.push(x + barWidth / 2);\n            }\n\n            yArrj.push(y);\n            var pathFill = this.getPathFillColor(series, i, j, realIndex);\n            elSeries = this.renderSeries({\n              realIndex: realIndex,\n              pathFill: pathFill,\n              j: j,\n              i: i,\n              pathFrom: pathFrom,\n              pathTo: pathTo,\n              strokeWidth: strokeWidth,\n              elSeries: elSeries,\n              x: x,\n              y: y,\n              series: series,\n              barHeight: barHeight,\n              barWidth: barWidth,\n              elDataLabelsWrap: elDataLabelsWrap,\n              visibleSeries: this.visibleI,\n              type: 'bar'\n            });\n          } // push all x val arrays into main xArr\n\n\n          w.globals.seriesXvalues[realIndex] = xArrj;\n          w.globals.seriesYvalues[realIndex] = yArrj;\n          ret.add(elSeries);\n        }\n\n        return ret;\n      }\n    }, {\n      key: \"getPathFillColor\",\n      value: function getPathFillColor(series, i, j, realIndex) {\n        var w = this.w;\n        var fill = new Fill(this.ctx);\n        var fillColor = null;\n        var seriesNumber = this.barOptions.distributed ? j : i;\n\n        if (this.barOptions.colors.ranges.length > 0) {\n          var colorRange = this.barOptions.colors.ranges;\n          colorRange.map(function (range) {\n            if (series[i][j] >= range.from && series[i][j] <= range.to) {\n              fillColor = range.color;\n            }\n          });\n        }\n\n        if (w.config.series[i].data[j] && w.config.series[i].data[j].fillColor) {\n          fillColor = w.config.series[i].data[j].fillColor;\n        }\n\n        var pathFill = fill.fillPath({\n          seriesNumber: this.barOptions.distributed ? seriesNumber : realIndex,\n          color: fillColor,\n          value: series[i][j]\n        });\n        return pathFill;\n      }\n    }, {\n      key: \"renderSeries\",\n      value: function renderSeries(_ref) {\n        var realIndex = _ref.realIndex,\n            pathFill = _ref.pathFill,\n            lineFill = _ref.lineFill,\n            j = _ref.j,\n            i = _ref.i,\n            pathFrom = _ref.pathFrom,\n            pathTo = _ref.pathTo,\n            strokeWidth = _ref.strokeWidth,\n            elSeries = _ref.elSeries,\n            x = _ref.x,\n            y = _ref.y,\n            series = _ref.series,\n            barHeight = _ref.barHeight,\n            barWidth = _ref.barWidth,\n            elDataLabelsWrap = _ref.elDataLabelsWrap,\n            visibleSeries = _ref.visibleSeries,\n            type = _ref.type;\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n\n        if (!lineFill) {\n          /* fix apexcharts#341 */\n          lineFill = this.barOptions.distributed ? w.globals.stroke.colors[j] : w.globals.stroke.colors[realIndex];\n        }\n\n        if (w.config.series[i].data[j] && w.config.series[i].data[j].strokeColor) {\n          lineFill = w.config.series[i].data[j].strokeColor;\n        }\n\n        if (this.isNullValue) {\n          pathFill = 'none';\n        }\n\n        var delay = j / w.config.chart.animations.animateGradually.delay * (w.config.chart.animations.speed / w.globals.dataPoints) / 2.4;\n        var renderedPath = graphics.renderPaths({\n          i: i,\n          j: j,\n          realIndex: realIndex,\n          pathFrom: pathFrom,\n          pathTo: pathTo,\n          stroke: lineFill,\n          strokeWidth: strokeWidth,\n          strokeLineCap: w.config.stroke.lineCap,\n          fill: pathFill,\n          animationDelay: delay,\n          initialSpeed: w.config.chart.animations.speed,\n          dataChangeSpeed: w.config.chart.animations.dynamicAnimation.speed,\n          className: \"apexcharts-\".concat(type, \"-area\")\n        });\n        renderedPath.attr('clip-path', \"url(#gridRectMask\".concat(w.globals.cuid, \")\"));\n        var filters = new Filters(this.ctx);\n        filters.setSelectionFilter(renderedPath, realIndex, j);\n        elSeries.add(renderedPath);\n        var dataLabels = this.calculateDataLabelsPos({\n          x: x,\n          y: y,\n          i: i,\n          j: j,\n          series: series,\n          realIndex: realIndex,\n          barHeight: barHeight,\n          barWidth: barWidth,\n          renderedPath: renderedPath,\n          visibleSeries: visibleSeries\n        });\n\n        if (dataLabels !== null) {\n          elDataLabelsWrap.add(dataLabels);\n        }\n\n        elSeries.add(elDataLabelsWrap);\n        return elSeries;\n      }\n    }, {\n      key: \"initVariables\",\n      value: function initVariables(series) {\n        var w = this.w;\n        this.series = series;\n        this.totalItems = 0;\n        this.seriesLen = 0;\n        this.visibleI = -1;\n        this.visibleItems = 1; // number of visible bars after user zoomed in/out\n\n        for (var sl = 0; sl < series.length; sl++) {\n          if (series[sl].length > 0) {\n            this.seriesLen = this.seriesLen + 1;\n            this.totalItems += series[sl].length;\n          }\n\n          if (w.globals.isXNumeric) {\n            // get max visible items\n            for (var j = 0; j < series[sl].length; j++) {\n              if (w.globals.seriesX[sl][j] > w.globals.minX && w.globals.seriesX[sl][j] < w.globals.maxX) {\n                this.visibleItems++;\n              }\n            }\n          } else {\n            this.visibleItems = w.globals.dataPoints;\n          }\n        }\n\n        if (this.seriesLen === 0) {\n          // A small adjustment when combo charts are used\n          this.seriesLen = 1;\n        }\n      }\n    }, {\n      key: \"initialPositions\",\n      value: function initialPositions() {\n        var w = this.w;\n        var x, y, yDivision, xDivision, barHeight, barWidth, zeroH, zeroW;\n\n        if (this.isHorizontal) {\n          // height divided into equal parts\n          yDivision = w.globals.gridHeight / w.globals.dataPoints;\n          barHeight = yDivision / this.seriesLen;\n\n          if (w.globals.isXNumeric) {\n            yDivision = w.globals.gridHeight / this.totalItems;\n            barHeight = yDivision / this.seriesLen;\n          }\n\n          barHeight = barHeight * parseInt(this.barOptions.barHeight) / 100;\n          zeroW = this.baseLineInvertedY + w.globals.padHorizontal + (this.isReversed ? w.globals.gridWidth : 0) - (this.isReversed ? this.baseLineInvertedY * 2 : 0);\n          y = (yDivision - barHeight * this.seriesLen) / 2;\n        } else {\n          // width divided into equal parts\n          xDivision = w.globals.gridWidth / this.visibleItems;\n          barWidth = xDivision / this.seriesLen * parseInt(this.barOptions.columnWidth) / 100;\n\n          if (w.globals.isXNumeric) {\n            // max barwidth should be equal to minXDiff to avoid overlap\n            if (w.globals.minXDiff) {\n              xDivision = w.globals.minXDiff / this.xRatio;\n            }\n\n            barWidth = xDivision / this.seriesLen * parseInt(this.barOptions.columnWidth) / 100;\n          }\n\n          zeroH = w.globals.gridHeight - this.baseLineY[this.yaxisIndex] - (this.isReversed ? w.globals.gridHeight : 0) + (this.isReversed ? this.baseLineY[this.yaxisIndex] * 2 : 0);\n          x = w.globals.padHorizontal + (xDivision - barWidth * this.seriesLen) / 2;\n        }\n\n        return {\n          x: x,\n          y: y,\n          yDivision: yDivision,\n          xDivision: xDivision,\n          barHeight: barHeight,\n          barWidth: barWidth,\n          zeroH: zeroH,\n          zeroW: zeroW\n        };\n      }\n    }, {\n      key: \"drawBarPaths\",\n      value: function drawBarPaths(_ref2) {\n        var indexes = _ref2.indexes,\n            barHeight = _ref2.barHeight,\n            strokeWidth = _ref2.strokeWidth,\n            pathTo = _ref2.pathTo,\n            pathFrom = _ref2.pathFrom,\n            zeroW = _ref2.zeroW,\n            x = _ref2.x,\n            y = _ref2.y,\n            yDivision = _ref2.yDivision,\n            elSeries = _ref2.elSeries;\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var i = indexes.i;\n        var j = indexes.j;\n        var realIndex = indexes.realIndex;\n        var bc = indexes.bc;\n\n        if (w.globals.isXNumeric) {\n          y = (w.globals.seriesX[i][j] - w.globals.minX) / this.invertedXRatio - barHeight;\n        }\n\n        var barYPosition = y + barHeight * this.visibleI;\n        pathTo = graphics.move(zeroW, barYPosition);\n        pathFrom = graphics.move(zeroW, barYPosition);\n\n        if (w.globals.previousPaths.length > 0) {\n          pathFrom = this.getPathFrom(realIndex, j);\n        }\n\n        if (typeof this.series[i][j] === 'undefined' || this.series[i][j] === null) {\n          x = zeroW;\n        } else {\n          x = zeroW + this.series[i][j] / this.invertedYRatio - (this.isReversed ? this.series[i][j] / this.invertedYRatio : 0) * 2;\n        }\n\n        var endingShapeOpts = {\n          barHeight: barHeight,\n          strokeWidth: strokeWidth,\n          barYPosition: barYPosition,\n          x: x,\n          zeroW: zeroW\n        };\n        var endingShape = this.barEndingShape(w, endingShapeOpts, this.series, i, j);\n        pathTo = pathTo + graphics.line(endingShape.newX, barYPosition) + endingShape.path + graphics.line(zeroW, barYPosition + barHeight - strokeWidth) + graphics.line(zeroW, barYPosition);\n        pathFrom = pathFrom + graphics.line(zeroW, barYPosition) + endingShape.ending_p_from + graphics.line(zeroW, barYPosition + barHeight - strokeWidth) + graphics.line(zeroW, barYPosition + barHeight - strokeWidth) + graphics.line(zeroW, barYPosition);\n\n        if (!w.globals.isXNumeric) {\n          y = y + yDivision;\n        }\n\n        if (this.barOptions.colors.backgroundBarColors.length > 0 && i === 0) {\n          if (bc >= this.barOptions.colors.backgroundBarColors.length) {\n            bc = 0;\n          }\n\n          var bcolor = this.barOptions.colors.backgroundBarColors[bc];\n          var rect = graphics.drawRect(0, barYPosition - barHeight * this.visibleI, w.globals.gridWidth, barHeight * this.seriesLen, 0, bcolor, this.barOptions.colors.backgroundBarOpacity);\n          elSeries.add(rect);\n          rect.node.classList.add('apexcharts-backgroundBar');\n        }\n\n        return {\n          pathTo: pathTo,\n          pathFrom: pathFrom,\n          x: x,\n          y: y,\n          barYPosition: barYPosition\n        };\n      }\n    }, {\n      key: \"drawColumnPaths\",\n      value: function drawColumnPaths(_ref3) {\n        var indexes = _ref3.indexes,\n            x = _ref3.x,\n            y = _ref3.y,\n            xDivision = _ref3.xDivision,\n            pathTo = _ref3.pathTo,\n            pathFrom = _ref3.pathFrom,\n            barWidth = _ref3.barWidth,\n            zeroH = _ref3.zeroH,\n            strokeWidth = _ref3.strokeWidth,\n            elSeries = _ref3.elSeries;\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var i = indexes.i;\n        var j = indexes.j;\n        var realIndex = indexes.realIndex;\n        var bc = indexes.bc;\n        var barXPosition = x + barWidth * this.visibleI;\n\n        if (w.globals.isXNumeric) {\n          var sxI = i;\n\n          if (!w.globals.seriesX[i].length) {\n            sxI = w.globals.maxValsInArrayIndex;\n          }\n\n          x = (w.globals.seriesX[sxI][j] - w.globals.minX) / this.xRatio;\n          barXPosition = x + barWidth * this.visibleI - barWidth * this.seriesLen / 2;\n        }\n\n        pathTo = graphics.move(barXPosition, zeroH);\n        pathFrom = graphics.move(barXPosition, zeroH);\n\n        if (w.globals.previousPaths.length > 0) {\n          pathFrom = this.getPathFrom(realIndex, j);\n        }\n\n        if (typeof this.series[i][j] === 'undefined' || this.series[i][j] === null) {\n          y = zeroH;\n        } else {\n          y = zeroH - this.series[i][j] / this.yRatio[this.yaxisIndex] + (this.isReversed ? this.series[i][j] / this.yRatio[this.yaxisIndex] : 0) * 2;\n        }\n\n        var endingShapeOpts = {\n          barWidth: barWidth,\n          strokeWidth: strokeWidth,\n          barXPosition: barXPosition,\n          y: y,\n          zeroH: zeroH\n        };\n        var endingShape = this.barEndingShape(w, endingShapeOpts, this.series, i, j);\n        pathTo = pathTo + graphics.line(barXPosition, endingShape.newY) + endingShape.path + graphics.line(barXPosition + barWidth - strokeWidth, zeroH) + graphics.line(barXPosition - strokeWidth / 2, zeroH);\n        pathFrom = pathFrom + graphics.line(barXPosition, zeroH) + endingShape.ending_p_from + graphics.line(barXPosition + barWidth - strokeWidth, zeroH) + graphics.line(barXPosition + barWidth - strokeWidth, zeroH) + graphics.line(barXPosition - strokeWidth / 2, zeroH);\n\n        if (!w.globals.isXNumeric) {\n          x = x + xDivision;\n        }\n\n        if (this.barOptions.colors.backgroundBarColors.length > 0 && i === 0) {\n          if (bc >= this.barOptions.colors.backgroundBarColors.length) {\n            bc = 0;\n          }\n\n          var bcolor = this.barOptions.colors.backgroundBarColors[bc];\n          var rect = graphics.drawRect(barXPosition - barWidth * this.visibleI, 0, barWidth * this.seriesLen, w.globals.gridHeight, 0, bcolor, this.barOptions.colors.backgroundBarOpacity);\n          elSeries.add(rect);\n          rect.node.classList.add('apexcharts-backgroundBar');\n        }\n\n        return {\n          pathTo: pathTo,\n          pathFrom: pathFrom,\n          x: x,\n          y: y,\n          barXPosition: barXPosition\n        };\n      }\n      /** getPathFrom is a common function for bars/columns which is used to get previous paths when data changes.\n       * @memberof Bar\n       * @param {int} realIndex - current iterating i\n       * @param {int} j - current iterating series's j index\n       * @return {string} pathFrom is the string which will be appended in animations\n       **/\n\n    }, {\n      key: \"getPathFrom\",\n      value: function getPathFrom(realIndex, j) {\n        var w = this.w;\n        var pathFrom;\n\n        for (var pp = 0; pp < w.globals.previousPaths.length; pp++) {\n          var gpp = w.globals.previousPaths[pp];\n\n          if (gpp.paths.length > 0 && parseInt(gpp.realIndex) === parseInt(realIndex)) {\n            if (typeof w.globals.previousPaths[pp].paths[j] !== 'undefined') {\n              pathFrom = w.globals.previousPaths[pp].paths[j].d;\n            }\n          }\n        }\n\n        return pathFrom;\n      }\n      /** calculateBarDataLabels is used to calculate the positions for the data-labels\n       * It also sets the element's data attr for bars and calls drawCalculatedBarDataLabels()\n       * @memberof Bar\n       * @param {object} {barProps} most of the bar properties used throughout the bar\n       * drawing function\n       * @return {object} dataLabels node-element which you can append later\n       **/\n\n    }, {\n      key: \"calculateDataLabelsPos\",\n      value: function calculateDataLabelsPos(_ref4) {\n        var x = _ref4.x,\n            y = _ref4.y,\n            i = _ref4.i,\n            j = _ref4.j,\n            realIndex = _ref4.realIndex,\n            series = _ref4.series,\n            barHeight = _ref4.barHeight,\n            barWidth = _ref4.barWidth,\n            visibleSeries = _ref4.visibleSeries,\n            renderedPath = _ref4.renderedPath;\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var strokeWidth = Array.isArray(this.strokeWidth) ? this.strokeWidth[realIndex] : this.strokeWidth;\n        var bcx = x + parseFloat(barWidth * visibleSeries);\n        var bcy = y + parseFloat(barHeight * visibleSeries);\n\n        if (w.globals.isXNumeric && !w.globals.isBarHorizontal) {\n          bcx = x + parseFloat(barWidth * (visibleSeries + 1)) / 2;\n          bcy = y + parseFloat(barHeight * (visibleSeries + 1)) - strokeWidth;\n        }\n\n        var dataLabels = null;\n        var dataLabelsX = x;\n        var dataLabelsY = y;\n        var dataLabelsPos = {};\n        var dataLabelsConfig = w.config.dataLabels;\n        var barDataLabelsConfig = this.barOptions.dataLabels;\n        var offX = dataLabelsConfig.offsetX;\n        var offY = dataLabelsConfig.offsetY;\n        var textRects = {\n          width: 0,\n          height: 0\n        };\n\n        if (w.config.dataLabels.enabled) {\n          textRects = graphics.getTextRects(w.globals.yLabelFormatters[0](w.globals.maxY), parseInt(dataLabelsConfig.style.fontSize));\n        }\n\n        if (this.isHorizontal) {\n          dataLabelsPos = this.calculateBarsDataLabelsPosition({\n            x: x,\n            y: y,\n            i: i,\n            j: j,\n            renderedPath: renderedPath,\n            bcy: bcy,\n            barHeight: barHeight,\n            barWidth: barWidth,\n            textRects: textRects,\n            strokeWidth: strokeWidth,\n            dataLabelsX: dataLabelsX,\n            dataLabelsY: dataLabelsY,\n            barDataLabelsConfig: barDataLabelsConfig,\n            offX: offX,\n            offY: offY\n          });\n        } else {\n          dataLabelsPos = this.calculateColumnsDataLabelsPosition({\n            x: x,\n            y: y,\n            i: i,\n            j: j,\n            renderedPath: renderedPath,\n            realIndex: realIndex,\n            bcx: bcx,\n            bcy: bcy,\n            barHeight: barHeight,\n            barWidth: barWidth,\n            textRects: textRects,\n            strokeWidth: strokeWidth,\n            dataLabelsY: dataLabelsY,\n            barDataLabelsConfig: barDataLabelsConfig,\n            offX: offX,\n            offY: offY\n          });\n        }\n\n        renderedPath.attr({\n          cy: dataLabelsPos.bcy,\n          cx: dataLabelsPos.bcx,\n          j: j,\n          val: series[i][j],\n          barHeight: barHeight,\n          barWidth: barWidth\n        });\n        dataLabels = this.drawCalculatedDataLabels({\n          x: dataLabelsPos.dataLabelsX,\n          y: dataLabelsPos.dataLabelsY,\n          val: series[i][j],\n          i: realIndex,\n          j: j,\n          barWidth: barWidth,\n          barHeight: barHeight,\n          textRects: textRects,\n          dataLabelsConfig: dataLabelsConfig\n        });\n        return dataLabels;\n      }\n    }, {\n      key: \"calculateColumnsDataLabelsPosition\",\n      value: function calculateColumnsDataLabelsPosition(opts) {\n        var w = this.w;\n        var i = opts.i,\n            j = opts.j,\n            y = opts.y,\n            bcx = opts.bcx,\n            barWidth = opts.barWidth,\n            barHeight = opts.barHeight,\n            textRects = opts.textRects,\n            dataLabelsY = opts.dataLabelsY,\n            barDataLabelsConfig = opts.barDataLabelsConfig,\n            strokeWidth = opts.strokeWidth,\n            offX = opts.offX,\n            offY = opts.offY;\n        var dataLabelsX;\n        var dataPointsDividedWidth = w.globals.gridWidth / w.globals.dataPoints;\n        bcx = bcx - strokeWidth / 2;\n\n        if (w.globals.isXNumeric) {\n          dataLabelsX = bcx - barWidth / 2 + offX;\n        } else {\n          dataLabelsX = bcx - dataPointsDividedWidth + barWidth / 2 + offX;\n        }\n\n        var valIsNegative = this.series[i][j] <= 0;\n\n        if (this.isReversed) {\n          y = y - barHeight;\n        }\n\n        switch (barDataLabelsConfig.position) {\n          case 'center':\n            if (valIsNegative) {\n              dataLabelsY = y + barHeight / 2 + textRects.height / 2 + offY;\n            } else {\n              dataLabelsY = y + barHeight / 2 + textRects.height / 2 - offY;\n            }\n\n            break;\n\n          case 'bottom':\n            if (valIsNegative) {\n              dataLabelsY = y + barHeight + textRects.height + strokeWidth + offY;\n            } else {\n              dataLabelsY = y + barHeight - textRects.height / 2 + strokeWidth - offY;\n            }\n\n            break;\n\n          case 'top':\n            if (valIsNegative) {\n              dataLabelsY = y - textRects.height / 2 - offY;\n            } else {\n              dataLabelsY = y + textRects.height + offY;\n            }\n\n            break;\n        }\n\n        if (!w.config.chart.stacked) {\n          if (dataLabelsY < 0) {\n            dataLabelsY = 0 + strokeWidth;\n          } else if (dataLabelsY + textRects.height / 3 > w.globals.gridHeight) {\n            dataLabelsY = w.globals.gridHeight - strokeWidth;\n          }\n        }\n\n        return {\n          bcx: bcx,\n          bcy: y,\n          dataLabelsX: dataLabelsX,\n          dataLabelsY: dataLabelsY\n        };\n      }\n    }, {\n      key: \"calculateBarsDataLabelsPosition\",\n      value: function calculateBarsDataLabelsPosition(opts) {\n        var w = this.w;\n        var x = opts.x,\n            i = opts.i,\n            j = opts.j,\n            bcy = opts.bcy,\n            barHeight = opts.barHeight,\n            barWidth = opts.barWidth,\n            textRects = opts.textRects,\n            dataLabelsX = opts.dataLabelsX,\n            strokeWidth = opts.strokeWidth,\n            barDataLabelsConfig = opts.barDataLabelsConfig,\n            offX = opts.offX,\n            offY = opts.offY;\n        var dataPointsDividedHeight = w.globals.gridHeight / w.globals.dataPoints;\n        var dataLabelsY = bcy - dataPointsDividedHeight + barHeight / 2 + textRects.height / 2 + offY - 3;\n        var valIsNegative = this.series[i][j] <= 0;\n\n        if (this.isReversed) {\n          x = x + barWidth;\n        }\n\n        switch (barDataLabelsConfig.position) {\n          case 'center':\n            if (valIsNegative) {\n              dataLabelsX = x - barWidth / 2 - offX;\n            } else {\n              dataLabelsX = x - barWidth / 2 + offX;\n            }\n\n            break;\n\n          case 'bottom':\n            if (valIsNegative) {\n              dataLabelsX = x - barWidth - strokeWidth - Math.round(textRects.width / 2) - offX;\n            } else {\n              dataLabelsX = x - barWidth + strokeWidth + Math.round(textRects.width / 2) + offX;\n            }\n\n            break;\n\n          case 'top':\n            if (valIsNegative) {\n              dataLabelsX = x - strokeWidth + Math.round(textRects.width / 2) - offX;\n            } else {\n              dataLabelsX = x - strokeWidth - Math.round(textRects.width / 2) + offX;\n            }\n\n            break;\n        }\n\n        if (!w.config.chart.stacked) {\n          if (dataLabelsX < 0) {\n            dataLabelsX = dataLabelsX + textRects.width + strokeWidth;\n          } else if (dataLabelsX + textRects.width / 2 > w.globals.gridWidth) {\n            dataLabelsX = w.globals.gridWidth - textRects.width - strokeWidth;\n          }\n        }\n\n        return {\n          bcx: x,\n          bcy: bcy,\n          dataLabelsX: dataLabelsX,\n          dataLabelsY: dataLabelsY\n        };\n      }\n    }, {\n      key: \"drawCalculatedDataLabels\",\n      value: function drawCalculatedDataLabels(_ref5) {\n        var x = _ref5.x,\n            y = _ref5.y,\n            val = _ref5.val,\n            i = _ref5.i,\n            j = _ref5.j,\n            textRects = _ref5.textRects,\n            barHeight = _ref5.barHeight,\n            barWidth = _ref5.barWidth,\n            dataLabelsConfig = _ref5.dataLabelsConfig;\n        var w = this.w;\n        var dataLabels = new DataLabels(this.ctx);\n        var graphics = new Graphics(this.ctx);\n        var formatter = dataLabelsConfig.formatter;\n        var elDataLabelsWrap = null;\n        var isSeriesNotCollapsed = w.globals.collapsedSeriesIndices.indexOf(i) > -1;\n\n        if (dataLabelsConfig.enabled && !isSeriesNotCollapsed) {\n          elDataLabelsWrap = graphics.group({\n            class: 'apexcharts-data-labels'\n          });\n          var text = '';\n\n          if (typeof val !== 'undefined') {\n            text = formatter(val, {\n              seriesIndex: i,\n              dataPointIndex: j,\n              w: w\n            });\n          }\n\n          if (val === 0 && w.config.chart.stacked) {\n            // in a stacked bar/column chart, 0 value should be neglected as it will overlap on the next element\n            text = '';\n          }\n\n          if (w.config.chart.stacked && this.barOptions.dataLabels.hideOverflowingLabels) {\n            // if there is not enough space to draw the label in the bar/column rect, check hideOverflowingLabels property to prevent overflowing on wrong rect\n            // Note: This issue is only seen in stacked charts\n            if (this.isHorizontal) {\n              barWidth = this.series[i][j] / this.yRatio[this.yaxisIndex]; // FIXED: Don't always hide the stacked negative side label\n              // A negative value will result in a negative bar width\n              // Only hide the text when the width is smaller (a higher negative number) than the negative bar width.\n\n              if (barWidth > 0 && textRects.width / 1.6 > barWidth || barWidth < 0 && textRects.width / 1.6 < barWidth) {\n                text = '';\n              }\n            } else {\n              barHeight = this.series[i][j] / this.yRatio[this.yaxisIndex];\n\n              if (textRects.height / 1.6 > barHeight) {\n                text = '';\n              }\n            }\n          }\n\n          var modifiedDataLabelsConfig = _objectSpread({}, dataLabelsConfig);\n\n          if (this.isHorizontal) {\n            if (val < 0) {\n              if (dataLabelsConfig.textAnchor === 'start') {\n                modifiedDataLabelsConfig.textAnchor = 'end';\n              } else if (dataLabelsConfig.textAnchor === 'end') {\n                modifiedDataLabelsConfig.textAnchor = 'start';\n              }\n            }\n          }\n\n          dataLabels.plotDataLabelsText({\n            x: x,\n            y: y,\n            text: text,\n            i: i,\n            j: j,\n            parent: elDataLabelsWrap,\n            dataLabelsConfig: modifiedDataLabelsConfig,\n            alwaysDrawDataLabel: true,\n            offsetCorrection: true\n          });\n        }\n\n        return elDataLabelsWrap;\n      }\n      /** barEndingShape draws the various shapes on top of bars/columns\n       * @memberof Bar\n       * @param {object} w - chart context\n       * @param {object} opts - consists several properties like barHeight/barWidth\n       * @param {array} series - global primary series\n       * @param {int} i - current iterating series's index\n       * @param {int} j - series's j of i\n       * @return {object} path - ending shape whether round/arrow\n       *         ending_p_from - similar to pathFrom\n       *         newY - which is calculated from existing y and new shape's top\n       **/\n\n    }, {\n      key: \"barEndingShape\",\n      value: function barEndingShape(w, opts, series, i, j) {\n        var graphics = new Graphics(this.ctx);\n\n        if (this.isHorizontal) {\n          var endingShape = null;\n          var endingShapeFrom = '';\n          var x = opts.x;\n\n          if (typeof series[i][j] !== 'undefined' || series[i][j] !== null) {\n            var inverse = series[i][j] < 0;\n            var eX = opts.barHeight / 2 - opts.strokeWidth;\n            if (inverse) eX = -opts.barHeight / 2 - opts.strokeWidth;\n\n            if (!w.config.chart.stacked) {\n              if (this.barOptions.endingShape === 'rounded') {\n                x = opts.x - eX / 2;\n              }\n            }\n\n            switch (this.barOptions.endingShape) {\n              case 'flat':\n                endingShape = graphics.line(x, opts.barYPosition + opts.barHeight - opts.strokeWidth);\n                break;\n\n              case 'rounded':\n                endingShape = graphics.quadraticCurve(x + eX, opts.barYPosition + (opts.barHeight - opts.strokeWidth) / 2, x, opts.barYPosition + opts.barHeight - opts.strokeWidth);\n                break;\n            }\n          }\n\n          return {\n            path: endingShape,\n            ending_p_from: endingShapeFrom,\n            newX: x\n          };\n        } else {\n          var _endingShape = null;\n          var _endingShapeFrom = '';\n          var y = opts.y;\n\n          if (typeof series[i][j] !== 'undefined' || series[i][j] !== null) {\n            var _inverse = series[i][j] < 0;\n\n            var eY = opts.barWidth / 2 - opts.strokeWidth;\n            if (_inverse) eY = -opts.barWidth / 2 - opts.strokeWidth;\n\n            if (!w.config.chart.stacked) {\n              // the shape exceeds the chart height, hence reduce y\n              if (this.barOptions.endingShape === 'rounded') {\n                y = y + eY / 2;\n              }\n            }\n\n            switch (this.barOptions.endingShape) {\n              case 'flat':\n                _endingShape = graphics.line(opts.barXPosition + opts.barWidth - opts.strokeWidth, y);\n                break;\n\n              case 'rounded':\n                _endingShape = graphics.quadraticCurve(opts.barXPosition + (opts.barWidth - opts.strokeWidth) / 2, y - eY, opts.barXPosition + opts.barWidth - opts.strokeWidth, y);\n                break;\n            }\n          }\n\n          return {\n            path: _endingShape,\n            ending_p_from: _endingShapeFrom,\n            newY: y\n          };\n        }\n      }\n    }]);\n\n    return Bar;\n  }();\n\n  /**\n   * ApexCharts BarStacked Class responsible for drawing both Stacked Columns and Bars.\n   *\n   * @module BarStacked\n   * The whole calculation for stacked bar/column is different from normal bar/column,\n   * hence it makes sense to derive a new class for it extending most of the props of Parent Bar\n   **/\n\n  var BarStacked =\n  /*#__PURE__*/\n  function (_Bar) {\n    _inherits(BarStacked, _Bar);\n\n    function BarStacked() {\n      _classCallCheck(this, BarStacked);\n\n      return _possibleConstructorReturn(this, _getPrototypeOf(BarStacked).apply(this, arguments));\n    }\n\n    _createClass(BarStacked, [{\n      key: \"draw\",\n      value: function draw(series, seriesIndex) {\n        var w = this.w;\n        this.graphics = new Graphics(this.ctx);\n        this.fill = new Fill(this.ctx);\n        this.bar = new Bar(this.ctx, this.xyRatios);\n        var coreUtils = new CoreUtils(this.ctx, w);\n        series = coreUtils.getLogSeries(series);\n        this.yRatio = coreUtils.getLogYRatios(this.yRatio);\n        this.initVariables(series);\n\n        if (w.config.chart.stackType === '100%') {\n          series = w.globals.seriesPercent.slice();\n        }\n\n        this.series = series;\n        this.totalItems = 0;\n        this.prevY = []; // y position on chart\n\n        this.prevX = []; // x position on chart\n\n        this.prevYF = []; // y position including shapes on chart\n\n        this.prevXF = []; // x position including shapes on chart\n\n        this.prevYVal = []; // y values (series[i][j]) in columns\n\n        this.prevXVal = []; // x values (series[i][j]) in bars\n\n        this.xArrj = []; // xj indicates x position on graph in bars\n\n        this.xArrjF = []; // xjF indicates bar's x position + endingshape's positions in bars\n\n        this.xArrjVal = []; // x val means the actual series's y values in horizontal/bars\n\n        this.yArrj = []; // yj indicates y position on graph in columns\n\n        this.yArrjF = []; // yjF indicates bar's y position + endingshape's positions in columns\n\n        this.yArrjVal = []; // y val means the actual series's y values in columns\n\n        for (var sl = 0; sl < series.length; sl++) {\n          if (series[sl].length > 0) {\n            this.totalItems += series[sl].length;\n          }\n        }\n\n        var ret = this.graphics.group({\n          class: 'apexcharts-bar-series apexcharts-plot-series'\n        });\n        var x = 0;\n        var y = 0;\n\n        for (var i = 0, bc = 0; i < series.length; i++, bc++) {\n          var pathTo = void 0,\n              pathFrom = void 0;\n          var xDivision = void 0; // xDivision is the GRIDWIDTH divided by number of datapoints (columns)\n\n          var yDivision = void 0; // yDivision is the GRIDHEIGHT divided by number of datapoints (bars)\n\n          var zeroH = void 0; // zeroH is the baseline where 0 meets y axis\n\n          var zeroW = void 0; // zeroW is the baseline where 0 meets x axis\n\n          var xArrValues = [];\n          var yArrValues = [];\n          var realIndex = w.globals.comboCharts ? seriesIndex[i] : i;\n\n          if (this.yRatio.length > 1) {\n            this.yaxisIndex = realIndex;\n          }\n\n          this.isReversed = w.config.yaxis[this.yaxisIndex] && w.config.yaxis[this.yaxisIndex].reversed; // el to which series will be drawn\n\n          var elSeries = this.graphics.group({\n            class: \"apexcharts-series\",\n            seriesName: Utils.escapeString(w.globals.seriesNames[realIndex]),\n            rel: i + 1,\n            'data:realIndex': realIndex\n          }); // eldatalabels\n\n          var elDataLabelsWrap = this.graphics.group({\n            class: 'apexcharts-datalabels'\n          });\n          var strokeWidth = 0;\n          var barHeight = 0;\n          var barWidth = 0;\n          var initPositions = this.initialPositions(x, y, xDivision, yDivision, zeroH, zeroW);\n          y = initPositions.y;\n          barHeight = initPositions.barHeight;\n          yDivision = initPositions.yDivision;\n          zeroW = initPositions.zeroW;\n          x = initPositions.x;\n          barWidth = initPositions.barWidth;\n          xDivision = initPositions.xDivision;\n          zeroH = initPositions.zeroH;\n          this.yArrj = [];\n          this.yArrjF = [];\n          this.yArrjVal = [];\n          this.xArrj = [];\n          this.xArrjF = [];\n          this.xArrjVal = []; // if (!this.horizontal) {\n          // this.xArrj.push(x + barWidth / 2)\n          // }\n\n          for (var j = 0; j < w.globals.dataPoints; j++) {\n            if (w.config.stroke.show) {\n              if (this.isNullValue) {\n                strokeWidth = 0;\n              } else {\n                strokeWidth = Array.isArray(this.strokeWidth) ? this.strokeWidth[realIndex] : this.strokeWidth;\n              }\n            }\n\n            var paths = null;\n\n            if (this.isHorizontal) {\n              paths = this.drawBarPaths({\n                indexes: {\n                  i: i,\n                  j: j,\n                  realIndex: realIndex,\n                  bc: bc\n                },\n                barHeight: barHeight,\n                strokeWidth: strokeWidth,\n                pathTo: pathTo,\n                pathFrom: pathFrom,\n                zeroW: zeroW,\n                x: x,\n                y: y,\n                yDivision: yDivision,\n                elSeries: elSeries\n              });\n              barWidth = this.series[i][j] / this.invertedYRatio;\n            } else {\n              paths = this.drawColumnPaths({\n                indexes: {\n                  i: i,\n                  j: j,\n                  realIndex: realIndex,\n                  bc: bc\n                },\n                x: x,\n                y: y,\n                xDivision: xDivision,\n                pathTo: pathTo,\n                pathFrom: pathFrom,\n                barWidth: barWidth,\n                zeroH: zeroH,\n                strokeWidth: strokeWidth,\n                elSeries: elSeries\n              });\n              barHeight = this.series[i][j] / this.yRatio[this.yaxisIndex];\n            }\n\n            pathTo = paths.pathTo;\n            pathFrom = paths.pathFrom;\n            y = paths.y;\n            x = paths.x;\n            xArrValues.push(x);\n            yArrValues.push(y);\n            var pathFill = this.bar.getPathFillColor(series, i, j, realIndex);\n            elSeries = this.renderSeries({\n              realIndex: realIndex,\n              pathFill: pathFill,\n              j: j,\n              i: i,\n              pathFrom: pathFrom,\n              pathTo: pathTo,\n              strokeWidth: strokeWidth,\n              elSeries: elSeries,\n              x: x,\n              y: y,\n              series: series,\n              barHeight: barHeight,\n              barWidth: barWidth,\n              elDataLabelsWrap: elDataLabelsWrap,\n              type: 'bar',\n              visibleSeries: 0\n            });\n          } // push all x val arrays into main xArr\n\n\n          w.globals.seriesXvalues[realIndex] = xArrValues;\n          w.globals.seriesYvalues[realIndex] = yArrValues; // push all current y values array to main PrevY Array\n\n          this.prevY.push(this.yArrj);\n          this.prevYF.push(this.yArrjF);\n          this.prevYVal.push(this.yArrjVal);\n          this.prevX.push(this.xArrj);\n          this.prevXF.push(this.xArrjF);\n          this.prevXVal.push(this.xArrjVal);\n          ret.add(elSeries);\n        }\n\n        return ret;\n      }\n    }, {\n      key: \"initialPositions\",\n      value: function initialPositions(x, y, xDivision, yDivision, zeroH, zeroW) {\n        var w = this.w;\n        var barHeight, barWidth;\n\n        if (this.isHorizontal) {\n          // height divided into equal parts\n          yDivision = w.globals.gridHeight / w.globals.dataPoints;\n          barHeight = yDivision;\n          barHeight = barHeight * parseInt(w.config.plotOptions.bar.barHeight) / 100;\n          zeroW = this.baseLineInvertedY + w.globals.padHorizontal + (this.isReversed ? w.globals.gridWidth : 0) - (this.isReversed ? this.baseLineInvertedY * 2 : 0); // initial y position is half of barHeight * half of number of Bars\n\n          y = (yDivision - barHeight) / 2;\n        } else {\n          // width divided into equal parts\n          xDivision = w.globals.gridWidth / w.globals.dataPoints;\n          barWidth = xDivision;\n\n          if (w.globals.isXNumeric) {\n            xDivision = w.globals.minXDiff / this.xRatio;\n            barWidth = xDivision * parseInt(this.barOptions.columnWidth) / 100;\n          } else {\n            barWidth = barWidth * parseInt(w.config.plotOptions.bar.columnWidth) / 100;\n          }\n\n          zeroH = this.baseLineY[this.yaxisIndex] + (this.isReversed ? w.globals.gridHeight : 0) - (this.isReversed ? this.baseLineY[this.yaxisIndex] * 2 : 0); // initial x position is one third of barWidth\n\n          x = w.globals.padHorizontal + (xDivision - barWidth) / 2;\n        }\n\n        return {\n          x: x,\n          y: y,\n          yDivision: yDivision,\n          xDivision: xDivision,\n          barHeight: barHeight,\n          barWidth: barWidth,\n          zeroH: zeroH,\n          zeroW: zeroW\n        };\n      }\n    }, {\n      key: \"drawBarPaths\",\n      value: function drawBarPaths(_ref) {\n        var indexes = _ref.indexes,\n            barHeight = _ref.barHeight,\n            strokeWidth = _ref.strokeWidth,\n            pathTo = _ref.pathTo,\n            pathFrom = _ref.pathFrom,\n            zeroW = _ref.zeroW,\n            x = _ref.x,\n            y = _ref.y,\n            yDivision = _ref.yDivision,\n            elSeries = _ref.elSeries;\n        var w = this.w;\n        var barYPosition = y;\n        var barXPosition;\n        var i = indexes.i;\n        var j = indexes.j;\n        var realIndex = indexes.realIndex;\n        var bc = indexes.bc;\n        var prevBarW = 0;\n\n        for (var k = 0; k < this.prevXF.length; k++) {\n          prevBarW = prevBarW + this.prevXF[k][j];\n        }\n\n        if (i > 0) {\n          var bXP = zeroW;\n\n          if (this.prevXVal[i - 1][j] < 0) {\n            if (this.series[i][j] >= 0) {\n              bXP = this.prevX[i - 1][j] + prevBarW - (this.isReversed ? prevBarW : 0) * 2;\n            } else {\n              bXP = this.prevX[i - 1][j];\n            }\n          } else if (this.prevXVal[i - 1][j] >= 0) {\n            if (this.series[i][j] >= 0) {\n              bXP = this.prevX[i - 1][j];\n            } else {\n              bXP = this.prevX[i - 1][j] - prevBarW + (this.isReversed ? prevBarW : 0) * 2;\n            }\n          }\n\n          barXPosition = bXP;\n        } else {\n          // the first series will not have prevX values\n          barXPosition = zeroW;\n        }\n\n        if (this.series[i][j] === null) {\n          x = barXPosition;\n        } else {\n          x = barXPosition + this.series[i][j] / this.invertedYRatio - (this.isReversed ? this.series[i][j] / this.invertedYRatio : 0) * 2;\n        }\n\n        var endingShapeOpts = {\n          barHeight: barHeight,\n          strokeWidth: strokeWidth,\n          invertedYRatio: this.invertedYRatio,\n          barYPosition: barYPosition,\n          x: x\n        };\n        var endingShape = this.bar.barEndingShape(w, endingShapeOpts, this.series, i, j);\n\n        if (this.series.length > 1 && i !== this.endingShapeOnSeriesNumber) {\n          // revert back to flat shape if not last series\n          endingShape.path = this.graphics.line(endingShape.newX, barYPosition + barHeight - strokeWidth);\n        }\n\n        this.xArrj.push(endingShape.newX);\n        this.xArrjF.push(Math.abs(barXPosition - endingShape.newX));\n        this.xArrjVal.push(this.series[i][j]);\n        pathTo = this.graphics.move(barXPosition, barYPosition);\n        pathFrom = this.graphics.move(barXPosition, barYPosition);\n\n        if (w.globals.previousPaths.length > 0) {\n          pathFrom = this.bar.getPathFrom(realIndex, j, false);\n        }\n\n        pathTo = pathTo + this.graphics.line(endingShape.newX, barYPosition) + endingShape.path + this.graphics.line(barXPosition, barYPosition + barHeight - strokeWidth) + this.graphics.line(barXPosition, barYPosition);\n        pathFrom = pathFrom + this.graphics.line(barXPosition, barYPosition) + this.graphics.line(barXPosition, barYPosition + barHeight - strokeWidth) + this.graphics.line(barXPosition, barYPosition + barHeight - strokeWidth) + this.graphics.line(barXPosition, barYPosition + barHeight - strokeWidth) + this.graphics.line(barXPosition, barYPosition);\n\n        if (w.config.plotOptions.bar.colors.backgroundBarColors.length > 0 && i === 0) {\n          if (bc >= w.config.plotOptions.bar.colors.backgroundBarColors.length) {\n            bc = 0;\n          }\n\n          var bcolor = w.config.plotOptions.bar.colors.backgroundBarColors[bc];\n          var rect = this.graphics.drawRect(0, barYPosition, w.globals.gridWidth, barHeight, 0, bcolor, w.config.plotOptions.bar.colors.backgroundBarOpacity);\n          elSeries.add(rect);\n          rect.node.classList.add('apexcharts-backgroundBar');\n        }\n\n        y = y + yDivision;\n        return {\n          pathTo: pathTo,\n          pathFrom: pathFrom,\n          x: x,\n          y: y\n        };\n      }\n    }, {\n      key: \"drawColumnPaths\",\n      value: function drawColumnPaths(_ref2) {\n        var indexes = _ref2.indexes,\n            x = _ref2.x,\n            y = _ref2.y,\n            xDivision = _ref2.xDivision,\n            pathTo = _ref2.pathTo,\n            pathFrom = _ref2.pathFrom,\n            barWidth = _ref2.barWidth,\n            zeroH = _ref2.zeroH,\n            strokeWidth = _ref2.strokeWidth,\n            elSeries = _ref2.elSeries;\n        var w = this.w;\n        var i = indexes.i;\n        var j = indexes.j;\n        var realIndex = indexes.realIndex;\n        var bc = indexes.bc;\n\n        if (w.globals.isXNumeric) {\n          var seriesVal = w.globals.seriesX[i][j];\n          if (!seriesVal) seriesVal = 0;\n          x = (seriesVal - w.globals.minX) / this.xRatio - barWidth / 2;\n        }\n\n        var barXPosition = x;\n        var barYPosition;\n        var prevBarH = 0;\n\n        for (var k = 0; k < this.prevYF.length; k++) {\n          prevBarH = prevBarH + this.prevYF[k][j];\n        }\n\n        if (i > 0 && !w.globals.isXNumeric || i > 0 && w.globals.isXNumeric && w.globals.seriesX[i - 1][j] === w.globals.seriesX[i][j]) {\n          var bYP;\n          var prevYValue = this.prevY[i - 1][j];\n\n          if (this.prevYVal[i - 1][j] < 0) {\n            if (this.series[i][j] >= 0) {\n              bYP = prevYValue - prevBarH + (this.isReversed ? prevBarH : 0) * 2;\n            } else {\n              bYP = prevYValue;\n            }\n          } else {\n            if (this.series[i][j] >= 0) {\n              bYP = prevYValue;\n            } else {\n              bYP = prevYValue + prevBarH - (this.isReversed ? prevBarH : 0) * 2;\n            }\n          }\n\n          barYPosition = bYP;\n        } else {\n          // the first series will not have prevY values, also if the prev index's series X doesn't matches the current index's series X, then start from zero\n          barYPosition = w.globals.gridHeight - zeroH;\n        }\n\n        y = barYPosition - this.series[i][j] / this.yRatio[this.yaxisIndex] + (this.isReversed ? this.series[i][j] / this.yRatio[this.yaxisIndex] : 0) * 2;\n        var endingShapeOpts = {\n          barWidth: barWidth,\n          strokeWidth: strokeWidth,\n          yRatio: this.yRatio[this.yaxisIndex],\n          barXPosition: barXPosition,\n          y: y\n        };\n        var endingShape = this.bar.barEndingShape(w, endingShapeOpts, this.series, i, j);\n        this.yArrj.push(endingShape.newY);\n        this.yArrjF.push(Math.abs(barYPosition - endingShape.newY));\n        this.yArrjVal.push(this.series[i][j]);\n        pathTo = this.graphics.move(barXPosition, barYPosition);\n        pathFrom = this.graphics.move(barXPosition, barYPosition);\n\n        if (w.globals.previousPaths.length > 0) {\n          pathFrom = this.bar.getPathFrom(realIndex, j, false);\n        }\n\n        pathTo = pathTo + this.graphics.line(barXPosition, endingShape.newY) + endingShape.path + this.graphics.line(barXPosition + barWidth - strokeWidth, barYPosition) + this.graphics.line(barXPosition - strokeWidth / 2, barYPosition);\n        pathFrom = pathFrom + this.graphics.line(barXPosition, barYPosition) + this.graphics.line(barXPosition + barWidth - strokeWidth, barYPosition) + this.graphics.line(barXPosition + barWidth - strokeWidth, barYPosition) + this.graphics.line(barXPosition + barWidth - strokeWidth, barYPosition) + this.graphics.line(barXPosition - strokeWidth / 2, barYPosition);\n\n        if (w.config.plotOptions.bar.colors.backgroundBarColors.length > 0 && i === 0) {\n          if (bc >= w.config.plotOptions.bar.colors.backgroundBarColors.length) {\n            bc = 0;\n          }\n\n          var bcolor = w.config.plotOptions.bar.colors.backgroundBarColors[bc];\n          var rect = this.graphics.drawRect(barXPosition, 0, barWidth, w.globals.gridHeight, 0, bcolor, w.config.plotOptions.bar.colors.backgroundBarOpacity);\n          elSeries.add(rect);\n          rect.node.classList.add('apexcharts-backgroundBar');\n        }\n\n        x = x + xDivision;\n        return {\n          pathTo: pathTo,\n          pathFrom: pathFrom,\n          x: w.globals.isXNumeric ? x - xDivision : x,\n          y: y\n        };\n      }\n      /*\n       * When user clicks on legends, the collapsed series will be filled with [0,0,0,...,0]\n       * We need to make sure, that the last series is not [0,0,0,...,0]\n       * as we need to draw shapes on the last series (for stacked bars/columns only)\n       * Hence, we are collecting all inner arrays in series which has [0,0,0...,0]\n       **/\n\n    }, {\n      key: \"checkZeroSeries\",\n      value: function checkZeroSeries(_ref3) {\n        var series = _ref3.series;\n        var w = this.w;\n\n        for (var zs = 0; zs < series.length; zs++) {\n          var total = 0;\n\n          for (var zsj = 0; zsj < series[w.globals.maxValsInArrayIndex].length; zsj++) {\n            total += series[zs][zsj];\n          }\n\n          if (total === 0) {\n            this.zeroSerieses.push(zs);\n          }\n        } // After getting all zeroserieses, we need to ensure whether endingshapeonSeries is not in that zeroseries array\n\n\n        for (var s = series.length - 1; s >= 0; s--) {\n          if (this.zeroSerieses.indexOf(s) > -1 && s === this.endingShapeOnSeriesNumber) {\n            this.endingShapeOnSeriesNumber -= 1;\n          }\n        }\n      }\n    }]);\n\n    return BarStacked;\n  }(Bar);\n\n  /**\n   * ApexCharts CandleStick Class responsible for drawing both Stacked Columns and Bars.\n   *\n   * @module CandleStick\n   **/\n\n  var CandleStick =\n  /*#__PURE__*/\n  function (_Bar) {\n    _inherits(CandleStick, _Bar);\n\n    function CandleStick() {\n      _classCallCheck(this, CandleStick);\n\n      return _possibleConstructorReturn(this, _getPrototypeOf(CandleStick).apply(this, arguments));\n    }\n\n    _createClass(CandleStick, [{\n      key: \"draw\",\n      value: function draw(series, seriesIndex) {\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var fill = new Fill(this.ctx);\n        this.candlestickOptions = this.w.config.plotOptions.candlestick;\n        var coreUtils = new CoreUtils(this.ctx, w);\n        series = coreUtils.getLogSeries(series);\n        this.series = series;\n        this.yRatio = coreUtils.getLogYRatios(this.yRatio);\n        this.initVariables(series);\n        var ret = graphics.group({\n          class: 'apexcharts-candlestick-series apexcharts-plot-series'\n        });\n\n        for (var i = 0, bc = 0; i < series.length; i++, bc++) {\n          var pathTo = void 0,\n              pathFrom = void 0;\n          var x = void 0,\n              y = void 0,\n              xDivision = void 0,\n              // xDivision is the GRIDWIDTH divided by number of datapoints (columns)\n          zeroH = void 0; // zeroH is the baseline where 0 meets y axis\n\n          var yArrj = []; // hold y values of current iterating series\n\n          var xArrj = []; // hold x values of current iterating series\n\n          var realIndex = w.globals.comboCharts ? seriesIndex[i] : i; // el to which series will be drawn\n\n          var elSeries = graphics.group({\n            class: \"apexcharts-series\",\n            seriesName: Utils.escapeString(w.globals.seriesNames[realIndex]),\n            rel: i + 1,\n            'data:realIndex': realIndex\n          });\n\n          if (series[i].length > 0) {\n            this.visibleI = this.visibleI + 1;\n          }\n\n          var strokeWidth = 0;\n          var barHeight = 0;\n          var barWidth = 0;\n\n          if (this.yRatio.length > 1) {\n            this.yaxisIndex = realIndex;\n          }\n\n          var initPositions = this.initialPositions();\n          y = initPositions.y;\n          barHeight = initPositions.barHeight;\n          x = initPositions.x;\n          barWidth = initPositions.barWidth;\n          xDivision = initPositions.xDivision;\n          zeroH = initPositions.zeroH;\n          xArrj.push(x + barWidth / 2); // eldatalabels\n\n          var elDataLabelsWrap = graphics.group({\n            class: 'apexcharts-datalabels'\n          });\n\n          for (var j = 0, tj = w.globals.dataPoints; j < w.globals.dataPoints; j++, tj--) {\n            if (typeof this.series[i][j] === 'undefined' || series[i][j] === null) {\n              this.isNullValue = true;\n            } else {\n              this.isNullValue = false;\n            }\n\n            if (w.config.stroke.show) {\n              if (this.isNullValue) {\n                strokeWidth = 0;\n              } else {\n                strokeWidth = Array.isArray(this.strokeWidth) ? this.strokeWidth[realIndex] : this.strokeWidth;\n              }\n            }\n\n            var color = void 0;\n            var paths = this.drawCandleStickPaths({\n              indexes: {\n                i: i,\n                j: j,\n                realIndex: realIndex,\n                bc: bc\n              },\n              x: x,\n              y: y,\n              xDivision: xDivision,\n              pathTo: pathTo,\n              pathFrom: pathFrom,\n              barWidth: barWidth,\n              zeroH: zeroH,\n              strokeWidth: strokeWidth,\n              elSeries: elSeries\n            });\n            pathTo = paths.pathTo;\n            pathFrom = paths.pathFrom;\n            y = paths.y;\n            x = paths.x;\n            color = paths.color; // push current X\n\n            if (j > 0) {\n              xArrj.push(x + barWidth / 2);\n            }\n\n            yArrj.push(y);\n            var pathFill = fill.fillPath({\n              seriesNumber: realIndex,\n              color: color,\n              value: series[i][j]\n            });\n            var lineFill = this.candlestickOptions.wick.useFillColor ? color : undefined;\n            elSeries = this.renderSeries({\n              realIndex: realIndex,\n              pathFill: pathFill,\n              lineFill: lineFill,\n              j: j,\n              i: i,\n              pathFrom: pathFrom,\n              pathTo: pathTo,\n              strokeWidth: strokeWidth,\n              elSeries: elSeries,\n              x: x,\n              y: y,\n              series: series,\n              barHeight: barHeight,\n              barWidth: barWidth,\n              elDataLabelsWrap: elDataLabelsWrap,\n              visibleSeries: this.visibleI,\n              type: 'candlestick'\n            });\n          } // push all x val arrays into main xArr\n\n\n          w.globals.seriesXvalues[realIndex] = xArrj;\n          w.globals.seriesYvalues[realIndex] = yArrj;\n          ret.add(elSeries);\n        }\n\n        return ret;\n      }\n    }, {\n      key: \"drawCandleStickPaths\",\n      value: function drawCandleStickPaths(_ref) {\n        var indexes = _ref.indexes,\n            x = _ref.x,\n            y = _ref.y,\n            xDivision = _ref.xDivision,\n            pathTo = _ref.pathTo,\n            pathFrom = _ref.pathFrom,\n            barWidth = _ref.barWidth,\n            zeroH = _ref.zeroH,\n            strokeWidth = _ref.strokeWidth;\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var i = indexes.i;\n        var j = indexes.j;\n        var isPositive = true;\n        var colorPos = w.config.plotOptions.candlestick.colors.upward;\n        var colorNeg = w.config.plotOptions.candlestick.colors.downward;\n        var yRatio = this.yRatio[this.yaxisIndex];\n        var realIndex = indexes.realIndex;\n        var ohlc = this.getOHLCValue(realIndex, j);\n        var l1 = zeroH;\n        var l2 = zeroH;\n\n        if (ohlc.o > ohlc.c) {\n          isPositive = false;\n        }\n\n        var y1 = Math.min(ohlc.o, ohlc.c);\n        var y2 = Math.max(ohlc.o, ohlc.c);\n\n        if (w.globals.isXNumeric) {\n          x = (w.globals.seriesX[i][j] - w.globals.minX) / this.xRatio - barWidth / 2;\n        }\n\n        var barXPosition = x + barWidth * this.visibleI;\n\n        if (typeof this.series[i][j] === 'undefined' || this.series[i][j] === null) {\n          y1 = zeroH;\n        } else {\n          y1 = zeroH - y1 / yRatio;\n          y2 = zeroH - y2 / yRatio;\n          l1 = zeroH - ohlc.h / yRatio;\n          l2 = zeroH - ohlc.l / yRatio;\n        }\n\n        pathTo = graphics.move(barXPosition, zeroH);\n        pathFrom = graphics.move(barXPosition, y1);\n\n        if (w.globals.previousPaths.length > 0) {\n          pathFrom = this.getPathFrom(realIndex, j, true);\n        }\n\n        pathTo = graphics.move(barXPosition, y2) + graphics.line(barXPosition + barWidth / 2, y2) + graphics.line(barXPosition + barWidth / 2, l1) + graphics.line(barXPosition + barWidth / 2, y2) + graphics.line(barXPosition + barWidth, y2) + graphics.line(barXPosition + barWidth, y1) + graphics.line(barXPosition + barWidth / 2, y1) + graphics.line(barXPosition + barWidth / 2, l2) + graphics.line(barXPosition + barWidth / 2, y1) + graphics.line(barXPosition, y1) + graphics.line(barXPosition, y2 - strokeWidth / 2);\n        pathFrom = pathFrom + graphics.move(barXPosition, y1);\n\n        if (!w.globals.isXNumeric) {\n          x = x + xDivision;\n        }\n\n        return {\n          pathTo: pathTo,\n          pathFrom: pathFrom,\n          x: x,\n          y: y2,\n          barXPosition: barXPosition,\n          color: isPositive ? colorPos : colorNeg\n        };\n      }\n    }, {\n      key: \"getOHLCValue\",\n      value: function getOHLCValue(i, j) {\n        var w = this.w;\n        return {\n          o: w.globals.seriesCandleO[i][j],\n          h: w.globals.seriesCandleH[i][j],\n          l: w.globals.seriesCandleL[i][j],\n          c: w.globals.seriesCandleC[i][j]\n        };\n      }\n    }]);\n\n    return CandleStick;\n  }(Bar);\n\n  var Crosshairs =\n  /*#__PURE__*/\n  function () {\n    function Crosshairs(ctx) {\n      _classCallCheck(this, Crosshairs);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n    }\n\n    _createClass(Crosshairs, [{\n      key: \"drawXCrosshairs\",\n      value: function drawXCrosshairs() {\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var filters = new Filters(this.ctx);\n        var crosshairGradient = w.config.xaxis.crosshairs.fill.gradient;\n        var crosshairShadow = w.config.xaxis.crosshairs.dropShadow;\n        var fillType = w.config.xaxis.crosshairs.fill.type;\n        var gradientFrom = crosshairGradient.colorFrom;\n        var gradientTo = crosshairGradient.colorTo;\n        var opacityFrom = crosshairGradient.opacityFrom;\n        var opacityTo = crosshairGradient.opacityTo;\n        var stops = crosshairGradient.stops;\n        var shadow = 'none';\n        var dropShadow = crosshairShadow.enabled;\n        var shadowLeft = crosshairShadow.left;\n        var shadowTop = crosshairShadow.top;\n        var shadowBlur = crosshairShadow.blur;\n        var shadowColor = crosshairShadow.color;\n        var shadowOpacity = crosshairShadow.opacity;\n        var xcrosshairsFill = w.config.xaxis.crosshairs.fill.color;\n\n        if (w.config.xaxis.crosshairs.show) {\n          if (fillType === 'gradient') {\n            xcrosshairsFill = graphics.drawGradient('vertical', gradientFrom, gradientTo, opacityFrom, opacityTo, null, stops, null);\n          }\n\n          var xcrosshairs = graphics.drawRect();\n\n          if (w.config.xaxis.crosshairs.width === 1) {\n            // to prevent drawing 2 lines, convert rect to line\n            xcrosshairs = graphics.drawLine();\n          }\n\n          xcrosshairs.attr({\n            class: 'apexcharts-xcrosshairs',\n            x: 0,\n            y: 0,\n            y2: w.globals.gridHeight,\n            width: Utils.isNumber(w.config.xaxis.crosshairs.width) ? w.config.xaxis.crosshairs.width : 0,\n            height: w.globals.gridHeight,\n            fill: xcrosshairsFill,\n            filter: shadow,\n            'fill-opacity': w.config.xaxis.crosshairs.opacity,\n            stroke: w.config.xaxis.crosshairs.stroke.color,\n            'stroke-width': w.config.xaxis.crosshairs.stroke.width,\n            'stroke-dasharray': w.config.xaxis.crosshairs.stroke.dashArray\n          });\n\n          if (dropShadow) {\n            xcrosshairs = filters.dropShadow(xcrosshairs, {\n              left: shadowLeft,\n              top: shadowTop,\n              blur: shadowBlur,\n              color: shadowColor,\n              opacity: shadowOpacity\n            });\n          }\n\n          w.globals.dom.elGraphical.add(xcrosshairs);\n        }\n      }\n    }, {\n      key: \"drawYCrosshairs\",\n      value: function drawYCrosshairs() {\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var crosshair = w.config.yaxis[0].crosshairs;\n\n        if (w.config.yaxis[0].crosshairs.show) {\n          var ycrosshairs = graphics.drawLine(0, 0, w.globals.gridWidth, 0, crosshair.stroke.color, crosshair.stroke.dashArray, crosshair.stroke.width);\n          ycrosshairs.attr({\n            class: 'apexcharts-ycrosshairs'\n          });\n          w.globals.dom.elGraphical.add(ycrosshairs);\n        } // draw an invisible crosshair to help in positioning the yaxis tooltip\n\n\n        var ycrosshairsHidden = graphics.drawLine(0, 0, w.globals.gridWidth, 0, crosshair.stroke.color, 0, 0);\n        ycrosshairsHidden.attr({\n          class: 'apexcharts-ycrosshairs-hidden'\n        });\n        w.globals.dom.elGraphical.add(ycrosshairsHidden);\n      }\n    }]);\n\n    return Crosshairs;\n  }();\n\n  /**\n   * ApexCharts HeatMap Class.\n   * @module HeatMap\n   **/\n\n  var HeatMap =\n  /*#__PURE__*/\n  function () {\n    function HeatMap(ctx, xyRatios) {\n      _classCallCheck(this, HeatMap);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n      this.xRatio = xyRatios.xRatio;\n      this.yRatio = xyRatios.yRatio;\n      this.negRange = false;\n      this.dynamicAnim = this.w.config.chart.animations.dynamicAnimation;\n      this.rectRadius = this.w.config.plotOptions.heatmap.radius;\n      this.strokeWidth = this.w.config.stroke.width;\n    }\n\n    _createClass(HeatMap, [{\n      key: \"draw\",\n      value: function draw(series) {\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var ret = graphics.group({\n          class: 'apexcharts-heatmap'\n        });\n        ret.attr('clip-path', \"url(#gridRectMask\".concat(w.globals.cuid, \")\")); // width divided into equal parts\n\n        var xDivision = w.globals.gridWidth / w.globals.dataPoints;\n        var yDivision = w.globals.gridHeight / w.globals.series.length;\n        var y1 = 0;\n        var rev = false;\n        this.checkColorRange();\n        var heatSeries = series.slice();\n\n        if (w.config.yaxis[0].reversed) {\n          rev = true;\n          heatSeries.reverse();\n        }\n\n        for (var i = rev ? 0 : heatSeries.length - 1; rev ? i < heatSeries.length : i >= 0; rev ? i++ : i--) {\n          // el to which series will be drawn\n          var elSeries = graphics.group({\n            class: \"apexcharts-series apexcharts-heatmap-series\",\n            seriesName: Utils.escapeString(w.globals.seriesNames[i]),\n            rel: i + 1,\n            'data:realIndex': i\n          });\n\n          if (w.config.chart.dropShadow.enabled) {\n            var shadow = w.config.chart.dropShadow;\n            var filters = new Filters(this.ctx);\n            filters.dropShadow(elSeries, shadow, i);\n          }\n\n          var x1 = 0;\n\n          for (var j = 0; j < heatSeries[i].length; j++) {\n            var colorShadePercent = 1;\n            var heatColorProps = this.determineHeatColor(i, j);\n\n            if (w.globals.hasNegs || this.negRange) {\n              var shadeIntensity = w.config.plotOptions.heatmap.shadeIntensity;\n\n              if (w.config.plotOptions.heatmap.reverseNegativeShade) {\n                if (heatColorProps.percent < 0) {\n                  colorShadePercent = heatColorProps.percent / 100 * (shadeIntensity * 1.25);\n                } else {\n                  colorShadePercent = (1 - heatColorProps.percent / 100) * (shadeIntensity * 1.25);\n                }\n              } else {\n                if (heatColorProps.percent < 0) {\n                  colorShadePercent = 1 - (1 + heatColorProps.percent / 100) * shadeIntensity;\n                } else {\n                  colorShadePercent = (1 - heatColorProps.percent / 100) * shadeIntensity;\n                }\n              }\n            } else {\n              colorShadePercent = 1 - heatColorProps.percent / 100;\n            }\n\n            var color = heatColorProps.color;\n\n            if (w.config.plotOptions.heatmap.enableShades) {\n              var utils = new Utils();\n              color = Utils.hexToRgba(utils.shadeColor(colorShadePercent, heatColorProps.color), w.config.fill.opacity);\n            }\n\n            var radius = this.rectRadius;\n            var rect = graphics.drawRect(x1, y1, xDivision, yDivision, radius);\n            rect.attr({\n              cx: x1,\n              cy: y1\n            });\n            rect.node.classList.add('apexcharts-heatmap-rect');\n            elSeries.add(rect);\n            rect.attr({\n              fill: color,\n              i: i,\n              index: i,\n              j: j,\n              val: heatSeries[i][j],\n              'stroke-width': this.strokeWidth,\n              stroke: w.globals.stroke.colors[0],\n              color: color\n            });\n            rect.node.addEventListener('mouseenter', graphics.pathMouseEnter.bind(this, rect));\n            rect.node.addEventListener('mouseleave', graphics.pathMouseLeave.bind(this, rect));\n            rect.node.addEventListener('mousedown', graphics.pathMouseDown.bind(this, rect));\n\n            if (w.config.chart.animations.enabled && !w.globals.dataChanged) {\n              var speed = 1;\n\n              if (!w.globals.resized) {\n                speed = w.config.chart.animations.speed;\n              }\n\n              this.animateHeatMap(rect, x1, y1, xDivision, yDivision, speed);\n            }\n\n            if (w.globals.dataChanged) {\n              var _speed = 1;\n\n              if (this.dynamicAnim.enabled && w.globals.shouldAnimate) {\n                _speed = this.dynamicAnim.speed;\n                var colorFrom = w.globals.previousPaths[i] && w.globals.previousPaths[i][j] && w.globals.previousPaths[i][j].color;\n                if (!colorFrom) colorFrom = 'rgba(255, 255, 255, 0)';\n                this.animateHeatColor(rect, Utils.isColorHex(colorFrom) ? colorFrom : Utils.rgb2hex(colorFrom), Utils.isColorHex(color) ? color : Utils.rgb2hex(color), _speed);\n              }\n            }\n\n            var dataLabels = this.calculateHeatmapDataLabels({\n              x: x1,\n              y: y1,\n              i: i,\n              j: j,\n              series: heatSeries,\n              rectHeight: yDivision,\n              rectWidth: xDivision\n            });\n\n            if (dataLabels !== null) {\n              elSeries.add(dataLabels);\n            }\n\n            x1 = x1 + xDivision;\n          }\n\n          y1 = y1 + yDivision;\n          ret.add(elSeries);\n        } // adjust yaxis labels for heatmap\n\n\n        var yAxisScale = w.globals.yAxisScale[0].result.slice();\n\n        if (w.config.yaxis[0].reversed) {\n          yAxisScale.unshift('');\n        } else {\n          yAxisScale.push('');\n        }\n\n        w.globals.yAxisScale[0].result = yAxisScale;\n        var divisor = w.globals.gridHeight / w.globals.series.length;\n        w.config.yaxis[0].labels.offsetY = -(divisor / 2);\n        return ret;\n      }\n    }, {\n      key: \"checkColorRange\",\n      value: function checkColorRange() {\n        var _this = this;\n\n        var w = this.w;\n        var heatmap = w.config.plotOptions.heatmap;\n\n        if (heatmap.colorScale.ranges.length > 0) {\n          heatmap.colorScale.ranges.map(function (range, index) {\n            if (range.from < 0) {\n              _this.negRange = true;\n            }\n          });\n        }\n      }\n    }, {\n      key: \"determineHeatColor\",\n      value: function determineHeatColor(i, j) {\n        var w = this.w;\n        var val = w.globals.series[i][j];\n        var heatmap = w.config.plotOptions.heatmap;\n        var seriesNumber = heatmap.colorScale.inverse ? j : i;\n        var color = w.globals.colors[seriesNumber];\n        var min = Math.min.apply(Math, _toConsumableArray(w.globals.series[i]));\n        var max = Math.max.apply(Math, _toConsumableArray(w.globals.series[i]));\n\n        if (!heatmap.distributed) {\n          min = w.globals.minY;\n          max = w.globals.maxY;\n        }\n\n        if (typeof heatmap.colorScale.min !== 'undefined') {\n          min = heatmap.colorScale.min < w.globals.minY ? heatmap.colorScale.min : w.globals.minY;\n          max = heatmap.colorScale.max > w.globals.maxY ? heatmap.colorScale.max : w.globals.maxY;\n        }\n\n        var total = Math.abs(max) + Math.abs(min);\n        var percent = 100 * val / (total === 0 ? total - 0.000001 : total);\n\n        if (heatmap.colorScale.ranges.length > 0) {\n          var colorRange = heatmap.colorScale.ranges;\n          colorRange.map(function (range, index) {\n            if (val >= range.from && val <= range.to) {\n              color = range.color;\n              min = range.from;\n              max = range.to;\n\n              var _total = Math.abs(max) + Math.abs(min);\n\n              percent = 100 * val / (_total === 0 ? _total - 0.000001 : _total);\n            }\n          });\n        }\n\n        return {\n          color: color,\n          percent: percent\n        };\n      }\n    }, {\n      key: \"calculateHeatmapDataLabels\",\n      value: function calculateHeatmapDataLabels(_ref) {\n        var x = _ref.x,\n            y = _ref.y,\n            i = _ref.i,\n            j = _ref.j,\n            series = _ref.series,\n            rectHeight = _ref.rectHeight,\n            rectWidth = _ref.rectWidth;\n        var w = this.w; // let graphics = new Graphics(this.ctx)\n\n        var dataLabelsConfig = w.config.dataLabels;\n        var graphics = new Graphics(this.ctx);\n        var dataLabels = new DataLabels(this.ctx);\n        var formatter = dataLabelsConfig.formatter;\n        var elDataLabelsWrap = null;\n\n        if (dataLabelsConfig.enabled) {\n          elDataLabelsWrap = graphics.group({\n            class: 'apexcharts-data-labels'\n          });\n          var offX = dataLabelsConfig.offsetX;\n          var offY = dataLabelsConfig.offsetY;\n          var dataLabelsX = x + rectWidth / 2 + offX;\n          var dataLabelsY = y + rectHeight / 2 + parseInt(dataLabelsConfig.style.fontSize) / 3 + offY;\n          var text = formatter(w.globals.series[i][j], {\n            seriesIndex: i,\n            dataPointIndex: j,\n            w: w\n          });\n          dataLabels.plotDataLabelsText({\n            x: dataLabelsX,\n            y: dataLabelsY,\n            text: text,\n            i: i,\n            j: j,\n            parent: elDataLabelsWrap,\n            dataLabelsConfig: dataLabelsConfig\n          });\n        }\n\n        return elDataLabelsWrap;\n      }\n    }, {\n      key: \"animateHeatMap\",\n      value: function animateHeatMap(el, x, y, width, height, speed) {\n        var animations = new Animations(this.ctx);\n        animations.animateRect(el, {\n          x: x + width / 2,\n          y: y + height / 2,\n          width: 0,\n          height: 0\n        }, {\n          x: x,\n          y: y,\n          width: width,\n          height: height\n        }, speed, function () {\n          animations.animationCompleted();\n        });\n      }\n    }, {\n      key: \"animateHeatColor\",\n      value: function animateHeatColor(el, colorFrom, colorTo, speed) {\n        el.attr({\n          fill: colorFrom\n        }).animate(speed).attr({\n          fill: colorTo\n        });\n      }\n    }]);\n\n    return HeatMap;\n  }();\n\n  /**\n   * ApexCharts Pie Class for drawing Pie / Donut Charts.\n   * @module Pie\n   **/\n\n  var Pie =\n  /*#__PURE__*/\n  function () {\n    function Pie(ctx) {\n      _classCallCheck(this, Pie);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n      this.chartType = this.w.config.chart.type;\n      this.initialAnim = this.w.config.chart.animations.enabled;\n      this.dynamicAnim = this.initialAnim && this.w.config.chart.animations.dynamicAnimation.enabled;\n      this.animBeginArr = [0];\n      this.animDur = 0;\n      this.donutDataLabels = this.w.config.plotOptions.pie.donut.labels;\n      var w = this.w;\n      this.lineColorArr = w.globals.stroke.colors !== undefined ? w.globals.stroke.colors : w.globals.colors;\n      this.defaultSize = w.globals.svgHeight < w.globals.svgWidth ? w.globals.svgHeight - 35 : w.globals.gridWidth;\n      this.centerY = this.defaultSize / 2;\n      this.centerX = w.globals.gridWidth / 2;\n      this.fullAngle = 360;\n      w.globals.radialSize = this.defaultSize / 2.05 - w.config.stroke.width - w.config.chart.dropShadow.blur;\n\n      if (w.config.plotOptions.pie.size !== undefined) {\n        w.globals.radialSize = w.config.plotOptions.pie.size;\n      }\n\n      this.donutSize = w.globals.radialSize * parseInt(w.config.plotOptions.pie.donut.size) / 100;\n      this.sliceLabels = [];\n      this.prevSectorAngleArr = []; // for dynamic animations\n    }\n\n    _createClass(Pie, [{\n      key: \"draw\",\n      value: function draw(series) {\n        var self = this;\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var ret = graphics.group({\n          class: 'apexcharts-pie'\n        });\n        if (w.globals.noData) return ret;\n        var total = 0;\n\n        for (var k = 0; k < series.length; k++) {\n          // CALCULATE THE TOTAL\n          total += Utils.negToZero(series[k]);\n        }\n\n        var sectorAngleArr = []; // el to which series will be drawn\n\n        var elSeries = graphics.group(); // prevent division by zero error if there is no data\n\n        if (total === 0) {\n          total = 0.00001;\n        }\n\n        for (var i = 0; i < series.length; i++) {\n          // CALCULATE THE ANGLES\n          var angle = this.fullAngle * Utils.negToZero(series[i]) / total;\n          sectorAngleArr.push(angle);\n        }\n\n        if (w.globals.dataChanged) {\n          var prevTotal = 0;\n\n          for (var _k = 0; _k < w.globals.previousPaths.length; _k++) {\n            // CALCULATE THE PREV TOTAL\n            prevTotal += Utils.negToZero(w.globals.previousPaths[_k]);\n          }\n\n          var previousAngle;\n\n          for (var _i = 0; _i < w.globals.previousPaths.length; _i++) {\n            // CALCULATE THE PREVIOUS ANGLES\n            previousAngle = this.fullAngle * Utils.negToZero(w.globals.previousPaths[_i]) / prevTotal;\n            this.prevSectorAngleArr.push(previousAngle);\n          }\n        } // on small chart size after few count of resizes browser window donutSize can be negative\n\n\n        if (this.donutSize < 0) {\n          this.donutSize = 0;\n        }\n\n        var scaleSize = w.config.plotOptions.pie.customScale;\n        var halfW = w.globals.gridWidth / 2;\n        var halfH = w.globals.gridHeight / 2;\n        var translateX = halfW - w.globals.gridWidth / 2 * scaleSize;\n        var translateY = halfH - w.globals.gridHeight / 2 * scaleSize;\n\n        if (w.config.chart.type === 'donut') {\n          // draw the inner circle and add some text to it\n          var circle = graphics.drawCircle(this.donutSize);\n          circle.attr({\n            cx: this.centerX,\n            cy: this.centerY,\n            fill: w.config.plotOptions.pie.donut.background\n          });\n          elSeries.add(circle);\n        }\n\n        var elG = self.drawArcs(sectorAngleArr, series); // add slice dataLabels at the end\n\n        this.sliceLabels.forEach(function (s) {\n          elG.add(s);\n        });\n        elSeries.attr({\n          transform: \"translate(\".concat(translateX, \", \").concat(translateY - 5, \") scale(\").concat(scaleSize, \")\")\n        });\n        ret.attr({\n          'data:innerTranslateX': translateX,\n          'data:innerTranslateY': translateY - 25\n        });\n        elSeries.add(elG);\n        ret.add(elSeries);\n\n        if (this.donutDataLabels.show) {\n          var dataLabels = this.renderInnerDataLabels(this.donutDataLabels, {\n            hollowSize: this.donutSize,\n            centerX: this.centerX,\n            centerY: this.centerY,\n            opacity: this.donutDataLabels.show,\n            translateX: translateX,\n            translateY: translateY\n          });\n          ret.add(dataLabels);\n        }\n\n        return ret;\n      } // core function for drawing pie arcs\n\n    }, {\n      key: \"drawArcs\",\n      value: function drawArcs(sectorAngleArr, series) {\n        var w = this.w;\n        var filters = new Filters(this.ctx);\n        var graphics = new Graphics(this.ctx);\n        var fill = new Fill(this.ctx);\n        var g = graphics.group({\n          class: 'apexcharts-slices'\n        });\n        var startAngle = 0;\n        var prevStartAngle = 0;\n        var endAngle = 0;\n        var prevEndAngle = 0;\n        this.strokeWidth = w.config.stroke.show ? w.config.stroke.width : 0;\n\n        for (var i = 0; i < sectorAngleArr.length; i++) {\n          // if(sectorAngleArr[i]>0) {\n          var elPieArc = graphics.group({\n            class: \"apexcharts-series apexcharts-pie-series\",\n            seriesName: Utils.escapeString(w.globals.seriesNames[i]),\n            rel: i + 1,\n            'data:realIndex': i\n          });\n          g.add(elPieArc);\n          startAngle = endAngle;\n          prevStartAngle = prevEndAngle;\n          endAngle = startAngle + sectorAngleArr[i];\n          prevEndAngle = prevStartAngle + this.prevSectorAngleArr[i];\n          var angle = endAngle - startAngle;\n          var pathFill = fill.fillPath({\n            seriesNumber: i,\n            size: w.globals.radialSize,\n            value: series[i]\n          }); // additionaly, pass size for gradient drawing in the fillPath function\n\n          var path = this.getChangedPath(prevStartAngle, prevEndAngle);\n          var elPath = graphics.drawPath({\n            d: path,\n            stroke: this.lineColorArr instanceof Array ? this.lineColorArr[i] : this.lineColorArr,\n            strokeWidth: this.strokeWidth,\n            fill: pathFill,\n            fillOpacity: w.config.fill.opacity,\n            classes: \"apexcharts-pie-area apexcharts-\".concat(w.config.chart.type, \"-slice-\").concat(i)\n          });\n          elPath.attr({\n            index: 0,\n            j: i\n          });\n\n          if (w.config.chart.dropShadow.enabled) {\n            var shadow = w.config.chart.dropShadow;\n            filters.dropShadow(elPath, shadow, i);\n          }\n\n          this.addListeners(elPath, this.donutDataLabels);\n          Graphics.setAttrs(elPath.node, {\n            'data:angle': angle,\n            'data:startAngle': startAngle,\n            'data:strokeWidth': this.strokeWidth,\n            'data:value': series[i]\n          });\n          var labelPosition = {\n            x: 0,\n            y: 0\n          };\n\n          if (w.config.chart.type === 'pie') {\n            labelPosition = Utils.polarToCartesian(this.centerX, this.centerY, w.globals.radialSize / 1.25 + w.config.plotOptions.pie.dataLabels.offset, startAngle + (endAngle - startAngle) / 2);\n          } else if (w.config.chart.type === 'donut') {\n            labelPosition = Utils.polarToCartesian(this.centerX, this.centerY, (w.globals.radialSize + this.donutSize) / 2 + w.config.plotOptions.pie.dataLabels.offset, startAngle + (endAngle - startAngle) / 2);\n          }\n\n          elPieArc.add(elPath); // Animation code starts\n\n          var dur = 0;\n\n          if (this.initialAnim && !w.globals.resized && !w.globals.dataChanged) {\n            dur = (endAngle - startAngle) / this.fullAngle * w.config.chart.animations.speed;\n            this.animDur = dur + this.animDur;\n            this.animBeginArr.push(this.animDur);\n          } else {\n            this.animBeginArr.push(0);\n          }\n\n          if (this.dynamicAnim && w.globals.dataChanged) {\n            this.animatePaths(elPath, {\n              size: w.globals.radialSize,\n              endAngle: endAngle,\n              startAngle: startAngle,\n              prevStartAngle: prevStartAngle,\n              prevEndAngle: prevEndAngle,\n              animateStartingPos: true,\n              i: i,\n              animBeginArr: this.animBeginArr,\n              dur: w.config.chart.animations.dynamicAnimation.speed\n            });\n          } else {\n            this.animatePaths(elPath, {\n              size: w.globals.radialSize,\n              endAngle: endAngle,\n              startAngle: startAngle,\n              i: i,\n              totalItems: sectorAngleArr.length - 1,\n              animBeginArr: this.animBeginArr,\n              dur: dur\n            });\n          } // animation code ends\n\n\n          if (w.config.plotOptions.pie.expandOnClick) {\n            elPath.click(this.pieClicked.bind(this, i));\n          }\n\n          if (w.config.dataLabels.enabled) {\n            var xPos = labelPosition.x;\n            var yPos = labelPosition.y;\n            var text = 100 * (endAngle - startAngle) / 360 + '%';\n\n            if (angle !== 0 && w.config.plotOptions.pie.dataLabels.minAngleToShowLabel < sectorAngleArr[i]) {\n              var formatter = w.config.dataLabels.formatter;\n\n              if (formatter !== undefined) {\n                text = formatter(w.globals.seriesPercent[i][0], {\n                  seriesIndex: i,\n                  w: w\n                });\n              }\n\n              var foreColor = w.globals.dataLabels.style.colors[i];\n              var elPieLabel = graphics.drawText({\n                x: xPos,\n                y: yPos,\n                text: text,\n                textAnchor: 'middle',\n                fontSize: w.config.dataLabels.style.fontSize,\n                fontFamily: w.config.dataLabels.style.fontFamily,\n                foreColor: foreColor\n              });\n\n              if (w.config.dataLabels.dropShadow.enabled) {\n                var textShadow = w.config.dataLabels.dropShadow;\n\n                var _filters = new Filters(this.ctx);\n\n                _filters.dropShadow(elPieLabel, textShadow);\n              }\n\n              elPieLabel.node.classList.add('apexcharts-pie-label');\n\n              if (w.config.chart.animations.animate && w.globals.resized === false) {\n                elPieLabel.node.classList.add('apexcharts-pie-label-delay');\n                elPieLabel.node.style.animationDelay = w.config.chart.animations.speed / 940 + 's';\n              }\n\n              this.sliceLabels.push(elPieLabel);\n            }\n          } // }\n\n        }\n\n        return g;\n      }\n    }, {\n      key: \"addListeners\",\n      value: function addListeners(elPath, dataLabels) {\n        var graphics = new Graphics(this.ctx); // append filters on mouseenter and mouseleave\n\n        elPath.node.addEventListener('mouseenter', graphics.pathMouseEnter.bind(this, elPath));\n        elPath.node.addEventListener('mouseenter', this.printDataLabelsInner.bind(this, elPath.node, dataLabels));\n        elPath.node.addEventListener('mouseleave', graphics.pathMouseLeave.bind(this, elPath));\n        elPath.node.addEventListener('mouseleave', this.revertDataLabelsInner.bind(this, elPath.node, dataLabels));\n        elPath.node.addEventListener('mousedown', graphics.pathMouseDown.bind(this, elPath));\n        elPath.node.addEventListener('mousedown', this.printDataLabelsInner.bind(this, elPath.node, dataLabels));\n      } // This function can be used for other circle charts too\n\n    }, {\n      key: \"animatePaths\",\n      value: function animatePaths(el, opts) {\n        var w = this.w;\n        var me = this;\n        var angle = opts.endAngle - opts.startAngle;\n        var prevAngle = angle;\n        var fromStartAngle = opts.startAngle;\n        var toStartAngle = opts.startAngle;\n\n        if (opts.prevStartAngle !== undefined && opts.prevEndAngle !== undefined) {\n          fromStartAngle = opts.prevEndAngle;\n          prevAngle = opts.prevEndAngle - opts.prevStartAngle;\n        }\n\n        if (opts.i === w.config.series.length - 1) {\n          // some adjustments for the last overlapping paths\n          if (angle + toStartAngle > this.fullAngle) {\n            opts.endAngle = opts.endAngle - (angle + toStartAngle);\n          } else if (angle + toStartAngle < this.fullAngle) {\n            opts.endAngle = opts.endAngle + (this.fullAngle - (angle + toStartAngle));\n          }\n        }\n\n        if (angle === this.fullAngle) angle = this.fullAngle - 0.01;\n        me.animateArc(el, fromStartAngle, toStartAngle, angle, prevAngle, opts);\n      }\n    }, {\n      key: \"animateArc\",\n      value: function animateArc(el, fromStartAngle, toStartAngle, angle, prevAngle, opts) {\n        var me = this;\n        var w = this.w;\n        var animations = new Animations(this.ctx);\n        var size = opts.size;\n        var path;\n\n        if (isNaN(fromStartAngle) || isNaN(prevAngle)) {\n          fromStartAngle = toStartAngle;\n          prevAngle = angle;\n          opts.dur = 0;\n        }\n\n        var currAngle = angle;\n        var startAngle = toStartAngle;\n        var fromAngle = fromStartAngle - toStartAngle;\n\n        if (w.globals.dataChanged && opts.shouldSetPrevPaths) {\n          // to avoid flickering, set prev path first and then we will animate from there\n          path = me.getPiePath({\n            me: me,\n            startAngle: startAngle,\n            angle: prevAngle,\n            size: size\n          });\n          el.attr({\n            d: path\n          });\n        }\n\n        if (opts.dur !== 0) {\n          el.animate(opts.dur, w.globals.easing, opts.animBeginArr[opts.i]).afterAll(function () {\n            if (w.config.chart.type === 'pie' || w.config.chart.type === 'donut') {\n              this.animate(300).attr({\n                'stroke-width': w.config.stroke.width\n              });\n            }\n\n            if (opts.i === w.config.series.length - 1) {\n              animations.animationCompleted();\n            }\n          }).during(function (pos) {\n            currAngle = fromAngle + (angle - fromAngle) * pos;\n\n            if (opts.animateStartingPos) {\n              currAngle = prevAngle + (angle - prevAngle) * pos;\n              startAngle = fromStartAngle - prevAngle + (toStartAngle - (fromStartAngle - prevAngle)) * pos;\n            }\n\n            path = me.getPiePath({\n              me: me,\n              startAngle: startAngle,\n              angle: currAngle,\n              size: size\n            });\n            el.node.setAttribute('data:pathOrig', path);\n            el.attr({\n              d: path\n            });\n          });\n        } else {\n          path = me.getPiePath({\n            me: me,\n            startAngle: startAngle,\n            angle: angle,\n            size: size\n          });\n\n          if (!opts.isTrack) {\n            w.globals.animationEnded = true;\n          }\n\n          el.node.setAttribute('data:pathOrig', path);\n          el.attr({\n            d: path\n          });\n        }\n      }\n    }, {\n      key: \"pieClicked\",\n      value: function pieClicked(i) {\n        var w = this.w;\n        var me = this;\n        var path;\n        var size = me.w.globals.radialSize + 4;\n        var elPath = w.globals.dom.Paper.select(\".apexcharts-\".concat(w.config.chart.type.toLowerCase(), \"-slice-\").concat(i)).members[0];\n        var pathFrom = elPath.attr('d');\n\n        if (elPath.attr('data:pieClicked') === 'true') {\n          elPath.attr({\n            'data:pieClicked': 'false'\n          });\n          this.revertDataLabelsInner(elPath.node, this.donutDataLabels);\n          var origPath = elPath.attr('data:pathOrig');\n          elPath.attr({\n            d: origPath\n          });\n          return;\n        } else {\n          // reset all elems\n          var allEls = w.globals.dom.baseEl.querySelectorAll('.apexcharts-pie-area');\n          Array.prototype.forEach.call(allEls, function (pieSlice) {\n            pieSlice.setAttribute('data:pieClicked', 'false');\n            var origPath = pieSlice.getAttribute('data:pathOrig');\n            pieSlice.setAttribute('d', origPath);\n          });\n          elPath.attr('data:pieClicked', 'true');\n        }\n\n        var startAngle = parseInt(elPath.attr('data:startAngle'));\n        var angle = parseInt(elPath.attr('data:angle'));\n        path = me.getPiePath({\n          me: me,\n          startAngle: startAngle,\n          angle: angle,\n          size: size\n        });\n        if (angle === 360) return;\n        elPath.plot(path).animate(1).plot(pathFrom).animate(100).plot(path);\n      }\n    }, {\n      key: \"getChangedPath\",\n      value: function getChangedPath(prevStartAngle, prevEndAngle) {\n        var path = '';\n\n        if (this.dynamicAnim && this.w.globals.dataChanged) {\n          path = this.getPiePath({\n            me: this,\n            startAngle: prevStartAngle,\n            angle: prevEndAngle - prevStartAngle,\n            size: this.size\n          });\n        }\n\n        return path;\n      }\n    }, {\n      key: \"getPiePath\",\n      value: function getPiePath(_ref) {\n        var me = _ref.me,\n            startAngle = _ref.startAngle,\n            angle = _ref.angle,\n            size = _ref.size;\n        var w = this.w;\n        var path;\n        var startDeg = startAngle;\n        var startRadians = Math.PI * (startDeg - 90) / 180;\n        var endDeg = angle + startAngle;\n        if (Math.ceil(endDeg) >= 360) endDeg = 359.99;\n        var endRadians = Math.PI * (endDeg - 90) / 180;\n        var x1 = me.centerX + size * Math.cos(startRadians);\n        var y1 = me.centerY + size * Math.sin(startRadians);\n        var x2 = me.centerX + size * Math.cos(endRadians);\n        var y2 = me.centerY + size * Math.sin(endRadians);\n        var startInner = Utils.polarToCartesian(me.centerX, me.centerY, me.donutSize, endDeg);\n        var endInner = Utils.polarToCartesian(me.centerX, me.centerY, me.donutSize, startDeg);\n        var largeArc = angle > 180 ? 1 : 0;\n\n        if (w.config.chart.type === 'donut') {\n          path = ['M', x1, y1, 'A', size, size, 0, largeArc, 1, x2, y2, 'L', startInner.x, startInner.y, 'A', me.donutSize, me.donutSize, 0, largeArc, 0, endInner.x, endInner.y, 'L', x1, y1, 'z'].join(' ');\n        } else if (w.config.chart.type === 'pie') {\n          path = ['M', x1, y1, 'A', size, size, 0, largeArc, 1, x2, y2, 'L', me.centerX, me.centerY, 'L', x1, y1].join(' ');\n        } else {\n          path = ['M', x1, y1, 'A', size, size, 0, largeArc, 1, x2, y2].join(' ');\n        }\n\n        return path;\n      }\n    }, {\n      key: \"renderInnerDataLabels\",\n      value: function renderInnerDataLabels(dataLabelsConfig, opts) {\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var g = graphics.group({\n          class: 'apexcharts-datalabels-group',\n          transform: \"translate(\".concat(opts.translateX ? opts.translateX : 0, \", \").concat(opts.translateY ? opts.translateY : 0, \")\")\n        });\n        var showTotal = dataLabelsConfig.total.show;\n        g.node.style.opacity = opts.opacity;\n        var x = opts.centerX;\n        var y = opts.centerY;\n        var labelColor, valueColor;\n\n        if (dataLabelsConfig.name.color === undefined) {\n          labelColor = w.globals.colors[0];\n        } else {\n          labelColor = dataLabelsConfig.name.color;\n        }\n\n        if (dataLabelsConfig.value.color === undefined) {\n          valueColor = w.config.chart.foreColor;\n        } else {\n          valueColor = dataLabelsConfig.value.color;\n        }\n\n        var lbFormatter = dataLabelsConfig.value.formatter;\n        var val = '';\n        var name = '';\n\n        if (showTotal) {\n          labelColor = dataLabelsConfig.total.color;\n          name = dataLabelsConfig.total.label;\n          val = dataLabelsConfig.total.formatter(w);\n        } else {\n          if (w.globals.series.length === 1) {\n            val = lbFormatter(w.globals.series[0], w);\n            name = w.globals.seriesNames[0];\n          }\n        }\n\n        if (dataLabelsConfig.name.show) {\n          var elLabel = graphics.drawText({\n            x: x,\n            y: y + parseInt(dataLabelsConfig.name.offsetY),\n            text: name,\n            textAnchor: 'middle',\n            foreColor: labelColor,\n            fontSize: dataLabelsConfig.name.fontSize,\n            fontFamily: dataLabelsConfig.name.fontFamily\n          });\n          elLabel.node.classList.add('apexcharts-datalabel-label');\n          g.add(elLabel);\n        }\n\n        if (dataLabelsConfig.value.show) {\n          var valOffset = dataLabelsConfig.name.show ? parseInt(dataLabelsConfig.value.offsetY) + 16 : dataLabelsConfig.value.offsetY;\n          var elValue = graphics.drawText({\n            x: x,\n            y: y + valOffset,\n            text: val,\n            textAnchor: 'middle',\n            foreColor: valueColor,\n            fontSize: dataLabelsConfig.value.fontSize,\n            fontFamily: dataLabelsConfig.value.fontFamily\n          });\n          elValue.node.classList.add('apexcharts-datalabel-value');\n          g.add(elValue);\n        } // for a multi-series circle chart, we need to show total value instead of first series labels\n\n\n        return g;\n      }\n      /**\n       *\n       * @param {string} name - The name of the series\n       * @param {string} val - The value of that series\n       * @param {object} el - Optional el (indicates which series was hovered/clicked). If this param is not present, means we need to show total\n       */\n\n    }, {\n      key: \"printInnerLabels\",\n      value: function printInnerLabels(labelsConfig, name, val, el) {\n        var w = this.w;\n        var labelColor;\n\n        if (el) {\n          if (labelsConfig.name.color === undefined) {\n            labelColor = w.globals.colors[parseInt(el.parentNode.getAttribute('rel')) - 1];\n          } else {\n            labelColor = labelsConfig.name.color;\n          }\n        } else {\n          if (w.globals.series.length > 1 && labelsConfig.total.show) {\n            labelColor = labelsConfig.total.color;\n          }\n        }\n\n        var elLabel = w.globals.dom.baseEl.querySelector('.apexcharts-datalabel-label');\n        var elValue = w.globals.dom.baseEl.querySelector('.apexcharts-datalabel-value');\n        var lbFormatter = labelsConfig.value.formatter;\n        val = lbFormatter(val, w); // we need to show Total Val - so get the formatter of it\n\n        if (!el && typeof labelsConfig.total.formatter === 'function') {\n          val = labelsConfig.total.formatter(w);\n        }\n\n        if (elLabel !== null) {\n          elLabel.textContent = name;\n        }\n\n        if (elValue !== null) {\n          elValue.textContent = val;\n        }\n\n        if (elLabel !== null) {\n          elLabel.style.fill = labelColor;\n        }\n      }\n    }, {\n      key: \"printDataLabelsInner\",\n      value: function printDataLabelsInner(el, dataLabelsConfig) {\n        var w = this.w;\n        var val = el.getAttribute('data:value');\n        var name = w.globals.seriesNames[parseInt(el.parentNode.getAttribute('rel')) - 1];\n\n        if (w.globals.series.length > 1) {\n          this.printInnerLabels(dataLabelsConfig, name, val, el);\n        }\n\n        var dataLabelsGroup = w.globals.dom.baseEl.querySelector('.apexcharts-datalabels-group');\n\n        if (dataLabelsGroup !== null) {\n          dataLabelsGroup.style.opacity = 1;\n        }\n      }\n    }, {\n      key: \"revertDataLabelsInner\",\n      value: function revertDataLabelsInner(el, dataLabelsConfig, event) {\n        var _this = this;\n\n        var w = this.w;\n        var dataLabelsGroup = w.globals.dom.baseEl.querySelector('.apexcharts-datalabels-group');\n\n        if (dataLabelsConfig.total.show && w.globals.series.length > 1) {\n          var pie = new Pie(this.ctx);\n          pie.printInnerLabels(dataLabelsConfig, dataLabelsConfig.total.label, dataLabelsConfig.total.formatter(w));\n        } else {\n          var slices = document.querySelectorAll(\".apexcharts-pie-area\");\n          var sliceOut = false;\n          Array.prototype.forEach.call(slices, function (s) {\n            if (s.getAttribute('data:pieClicked') === 'true') {\n              sliceOut = true;\n\n              _this.printDataLabelsInner(s, dataLabelsConfig);\n            }\n          });\n\n          if (!sliceOut) {\n            if (w.globals.selectedDataPoints.length && w.globals.series.length > 1) {\n              if (w.globals.selectedDataPoints[0].length > 0) {\n                var index = w.globals.selectedDataPoints[0];\n\n                var _el = w.globals.dom.baseEl.querySelector(\".apexcharts-\".concat(w.config.chart.type.toLowerCase(), \"-slice-\").concat(index));\n\n                this.printDataLabelsInner(_el, dataLabelsConfig);\n              } else if (dataLabelsGroup && w.globals.selectedDataPoints.length && w.globals.selectedDataPoints[0].length === 0) {\n                dataLabelsGroup.style.opacity = 0;\n              }\n            } else {\n              if (dataLabelsGroup && w.globals.series.length > 1) {\n                dataLabelsGroup.style.opacity = 0;\n              }\n            }\n          }\n        }\n      }\n    }]);\n\n    return Pie;\n  }();\n\n  /**\n   * ApexCharts Radar Class for Spider/Radar Charts.\n   * @module Radar\n   **/\n\n  var Radar =\n  /*#__PURE__*/\n  function () {\n    function Radar(ctx) {\n      _classCallCheck(this, Radar);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n      this.chartType = this.w.config.chart.type;\n      this.initialAnim = this.w.config.chart.animations.enabled;\n      this.dynamicAnim = this.initialAnim && this.w.config.chart.animations.dynamicAnimation.enabled;\n      this.animDur = 0;\n      var w = this.w;\n      this.graphics = new Graphics(this.ctx);\n      this.lineColorArr = w.globals.stroke.colors !== undefined ? w.globals.stroke.colors : w.globals.colors;\n      this.defaultSize = w.globals.svgHeight < w.globals.svgWidth ? w.globals.svgHeight - 35 : w.globals.gridWidth;\n      this.maxValue = this.w.globals.maxY;\n      this.polygons = w.config.plotOptions.radar.polygons;\n      this.maxLabelWidth = 20;\n      var longestLabel = w.globals.labels.slice().sort(function (a, b) {\n        return b.length - a.length;\n      })[0];\n      var labelWidth = this.graphics.getTextRects(longestLabel, w.config.dataLabels.style.fontSize);\n      this.size = this.defaultSize / 2.1 - w.config.stroke.width - w.config.chart.dropShadow.blur - labelWidth.width / 1.75;\n\n      if (w.config.plotOptions.radar.size !== undefined) {\n        this.size = w.config.plotOptions.radar.size;\n      }\n\n      this.dataRadiusOfPercent = [];\n      this.dataRadius = [];\n      this.angleArr = [];\n      this.yaxisLabelsTextsPos = [];\n    }\n\n    _createClass(Radar, [{\n      key: \"draw\",\n      value: function draw(series) {\n        var _this = this;\n\n        var w = this.w;\n        var fill = new Fill(this.ctx);\n        var allSeries = [];\n\n        if (series.length) {\n          this.dataPointsLen = series[w.globals.maxValsInArrayIndex].length;\n        }\n\n        this.disAngle = Math.PI * 2 / this.dataPointsLen;\n        var halfW = w.globals.gridWidth / 2;\n        var halfH = w.globals.gridHeight / 2;\n        var translateX = halfW;\n        var translateY = halfH;\n        var ret = this.graphics.group({\n          class: 'apexcharts-radar-series',\n          'data:innerTranslateX': translateX,\n          'data:innerTranslateY': translateY - 25,\n          transform: \"translate(\".concat(translateX || 0, \", \").concat(translateY || 0, \")\")\n        });\n        var dataPointsPos = [];\n        var elPointsMain = null;\n        this.yaxisLabels = this.graphics.group({\n          class: 'apexcharts-yaxis'\n        });\n        series.forEach(function (s, i) {\n          // el to which series will be drawn\n          var elSeries = _this.graphics.group().attr({\n            class: \"apexcharts-series\",\n            seriesName: Utils.escapeString(w.globals.seriesNames[i]),\n            rel: i + 1,\n            'data:realIndex': i\n          });\n\n          _this.dataRadiusOfPercent[i] = [];\n          _this.dataRadius[i] = [];\n          _this.angleArr[i] = [];\n          s.forEach(function (dv, j) {\n            _this.dataRadiusOfPercent[i][j] = dv / _this.maxValue;\n            _this.dataRadius[i][j] = _this.dataRadiusOfPercent[i][j] * _this.size;\n            _this.angleArr[i][j] = j * _this.disAngle;\n          });\n          dataPointsPos = _this.getDataPointsPos(_this.dataRadius[i], _this.angleArr[i]);\n\n          var paths = _this.createPaths(dataPointsPos, {\n            x: 0,\n            y: 0\n          }); // points\n\n\n          elPointsMain = _this.graphics.group({\n            class: 'apexcharts-series-markers-wrap hidden'\n          });\n          w.globals.delayedElements.push({\n            el: elPointsMain.node,\n            index: i\n          });\n          var defaultRenderedPathOptions = {\n            i: i,\n            realIndex: i,\n            animationDelay: i,\n            initialSpeed: w.config.chart.animations.speed,\n            dataChangeSpeed: w.config.chart.animations.dynamicAnimation.speed,\n            className: \"apexcharts-radar\",\n            shouldClipToGrid: false,\n            bindEventsOnPaths: false,\n            stroke: w.globals.stroke.colors[i],\n            strokeLineCap: w.config.stroke.lineCap\n          };\n          var pathFrom = null;\n\n          if (w.globals.previousPaths.length > 0) {\n            pathFrom = _this.getPathFrom(i);\n          }\n\n          for (var p = 0; p < paths.linePathsTo.length; p++) {\n            var renderedLinePath = _this.graphics.renderPaths(_objectSpread({}, defaultRenderedPathOptions, {\n              pathFrom: pathFrom === null ? paths.linePathsFrom[p] : pathFrom,\n              pathTo: paths.linePathsTo[p],\n              strokeWidth: Array.isArray(w.config.stroke.width) ? w.config.stroke.width[i] : w.config.stroke.width,\n              fill: 'none',\n              drawShadow: false\n            }));\n\n            elSeries.add(renderedLinePath);\n            var pathFill = fill.fillPath({\n              seriesNumber: i\n            });\n\n            var renderedAreaPath = _this.graphics.renderPaths(_objectSpread({}, defaultRenderedPathOptions, {\n              pathFrom: pathFrom === null ? paths.areaPathsFrom[p] : pathFrom,\n              pathTo: paths.areaPathsTo[p],\n              strokeWidth: 0,\n              fill: pathFill,\n              drawShadow: false\n            }));\n\n            if (w.config.chart.dropShadow.enabled) {\n              var filters = new Filters(_this.ctx);\n              var shadow = w.config.chart.dropShadow;\n              filters.dropShadow(renderedAreaPath, Object.assign({}, shadow, {\n                noUserSpaceOnUse: true\n              }), i);\n            }\n\n            elSeries.add(renderedAreaPath);\n          }\n\n          s.forEach(function (sj, j) {\n            var markers = new Markers(_this.ctx);\n            var opts = markers.getMarkerConfig('apexcharts-marker', i, j);\n\n            var point = _this.graphics.drawMarker(dataPointsPos[j].x, dataPointsPos[j].y, opts);\n\n            point.attr('rel', j);\n            point.attr('j', j);\n            point.attr('index', i);\n            point.node.setAttribute('default-marker-size', opts.pSize);\n\n            var elPointsWrap = _this.graphics.group({\n              class: 'apexcharts-series-markers'\n            });\n\n            if (elPointsWrap) {\n              elPointsWrap.add(point);\n            }\n\n            elPointsMain.add(elPointsWrap);\n            elSeries.add(elPointsMain);\n          });\n          allSeries.push(elSeries);\n        });\n        this.drawPolygons({\n          parent: ret\n        });\n\n        if (w.config.dataLabels.enabled) {\n          var dataLabels = this.drawLabels();\n          ret.add(dataLabels);\n        }\n\n        ret.add(this.yaxisLabels);\n        allSeries.forEach(function (elS) {\n          ret.add(elS);\n        });\n        return ret;\n      }\n    }, {\n      key: \"drawPolygons\",\n      value: function drawPolygons(opts) {\n        var _this2 = this;\n\n        var w = this.w;\n        var parent = opts.parent;\n        var yaxisTexts = w.globals.yAxisScale[0].result.reverse();\n        var layers = yaxisTexts.length;\n        var radiusSizes = [];\n        var layerDis = this.size / (layers - 1);\n\n        for (var i = 0; i < layers; i++) {\n          radiusSizes[i] = layerDis * i;\n        }\n\n        radiusSizes.reverse();\n        var polygonStrings = [];\n        var lines = [];\n        radiusSizes.forEach(function (radiusSize, r) {\n          var polygon = _this2.getPolygonPos(radiusSize);\n\n          var string = '';\n          polygon.forEach(function (p, i) {\n            if (r === 0) {\n              var line = _this2.graphics.drawLine(p.x, p.y, 0, 0, Array.isArray(_this2.polygons.connectorColors) ? _this2.polygons.connectorColors[i] : _this2.polygons.connectorColors);\n\n              lines.push(line);\n            }\n\n            if (i === 0) {\n              _this2.yaxisLabelsTextsPos.push({\n                x: p.x,\n                y: p.y\n              });\n            }\n\n            string += p.x + ',' + p.y + ' ';\n          });\n          polygonStrings.push(string);\n        });\n        polygonStrings.forEach(function (p, i) {\n          var strokeColors = _this2.polygons.strokeColors;\n\n          var polygon = _this2.graphics.drawPolygon(p, Array.isArray(strokeColors) ? strokeColors[i] : strokeColors, w.globals.radarPolygons.fill.colors[i]);\n\n          parent.add(polygon);\n        });\n        lines.forEach(function (l) {\n          parent.add(l);\n        });\n\n        if (w.config.yaxis[0].show) {\n          this.yaxisLabelsTextsPos.forEach(function (p, i) {\n            var yText = _this2.drawYAxisText(p.x, p.y, i, yaxisTexts[i]);\n\n            _this2.yaxisLabels.add(yText);\n          });\n        }\n      }\n    }, {\n      key: \"drawYAxisText\",\n      value: function drawYAxisText(x, y, i, text) {\n        var w = this.w;\n        var yaxisConfig = w.config.yaxis[0];\n        var formatter = w.globals.yLabelFormatters[0];\n        var yaxisLabel = this.graphics.drawText({\n          x: x + yaxisConfig.labels.offsetX,\n          y: y + yaxisConfig.labels.offsetY,\n          text: formatter(text, i),\n          textAnchor: 'middle',\n          fontSize: yaxisConfig.labels.style.fontSize,\n          fontFamily: yaxisConfig.labels.style.fontFamily,\n          foreColor: yaxisConfig.labels.style.color\n        });\n        return yaxisLabel;\n      }\n    }, {\n      key: \"drawLabels\",\n      value: function drawLabels() {\n        var _this3 = this;\n\n        var w = this.w;\n        var limit = 10;\n        var textAnchor = 'middle';\n        var dataLabelsConfig = w.config.dataLabels;\n        var elDataLabelsWrap = this.graphics.group({\n          class: 'apexcharts-datalabels'\n        });\n        var polygonPos = this.getPolygonPos(this.size);\n        var currPosX = 0;\n        var currPosY = 0;\n        w.globals.labels.forEach(function (label, i) {\n          var formatter = dataLabelsConfig.formatter;\n          var dataLabels = new DataLabels(_this3.ctx);\n\n          if (polygonPos[i]) {\n            currPosX = polygonPos[i].x;\n            currPosY = polygonPos[i].y;\n\n            if (Math.abs(polygonPos[i].x) >= limit) {\n              if (polygonPos[i].x > 0) {\n                textAnchor = 'start';\n                currPosX += 10;\n              } else if (polygonPos[i].x < 0) {\n                textAnchor = 'end';\n                currPosX -= 10;\n              }\n            } else {\n              textAnchor = 'middle';\n            }\n\n            if (Math.abs(polygonPos[i].y) >= _this3.size - limit) {\n              if (polygonPos[i].y < 0) {\n                currPosY -= 10;\n              } else if (polygonPos[i].y > 0) {\n                currPosY += 10;\n              }\n            }\n\n            var text = formatter(label, {\n              seriesIndex: -1,\n              dataPointIndex: i,\n              w: w\n            });\n            dataLabels.plotDataLabelsText({\n              x: currPosX,\n              y: currPosY,\n              text: text,\n              textAnchor: textAnchor,\n              i: i,\n              j: i,\n              parent: elDataLabelsWrap,\n              dataLabelsConfig: dataLabelsConfig,\n              offsetCorrection: false\n            });\n          }\n        });\n        return elDataLabelsWrap;\n      }\n    }, {\n      key: \"createPaths\",\n      value: function createPaths(pos, origin) {\n        var _this4 = this;\n\n        var linePathsTo = [];\n        var linePathsFrom = [];\n        var areaPathsTo = [];\n        var areaPathsFrom = [];\n\n        if (pos.length) {\n          linePathsFrom = [this.graphics.move(origin.x, origin.y)];\n          areaPathsFrom = [this.graphics.move(origin.x, origin.y)];\n          var linePathTo = this.graphics.move(pos[0].x, pos[0].y);\n          var areaPathTo = this.graphics.move(pos[0].x, pos[0].y);\n          pos.forEach(function (p, i) {\n            linePathTo += _this4.graphics.line(p.x, p.y);\n            areaPathTo += _this4.graphics.line(p.x, p.y);\n\n            if (i === pos.length - 1) {\n              linePathTo += 'Z';\n              areaPathTo += 'Z';\n            }\n          });\n          linePathsTo.push(linePathTo);\n          areaPathsTo.push(areaPathTo);\n        }\n\n        return {\n          linePathsFrom: linePathsFrom,\n          linePathsTo: linePathsTo,\n          areaPathsFrom: areaPathsFrom,\n          areaPathsTo: areaPathsTo\n        };\n      }\n    }, {\n      key: \"getPathFrom\",\n      value: function getPathFrom(realIndex) {\n        var w = this.w;\n        var pathFrom = null;\n\n        for (var pp = 0; pp < w.globals.previousPaths.length; pp++) {\n          var gpp = w.globals.previousPaths[pp];\n\n          if (gpp.paths.length > 0 && parseInt(gpp.realIndex) === parseInt(realIndex)) {\n            if (typeof w.globals.previousPaths[pp].paths[0] !== 'undefined') {\n              pathFrom = w.globals.previousPaths[pp].paths[0].d;\n            }\n          }\n        }\n\n        return pathFrom;\n      }\n    }, {\n      key: \"getDataPointsPos\",\n      value: function getDataPointsPos(dataRadiusArr, angleArr) {\n        var dataPointsLen = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.dataPointsLen;\n        dataRadiusArr = dataRadiusArr || [];\n        angleArr = angleArr || [];\n        var dataPointsPosArray = [];\n\n        for (var j = 0; j < dataPointsLen; j++) {\n          var curPointPos = {};\n          curPointPos.x = dataRadiusArr[j] * Math.sin(angleArr[j]);\n          curPointPos.y = -dataRadiusArr[j] * Math.cos(angleArr[j]);\n          dataPointsPosArray.push(curPointPos);\n        }\n\n        return dataPointsPosArray;\n      }\n    }, {\n      key: \"getPolygonPos\",\n      value: function getPolygonPos(size) {\n        var dotsArray = [];\n        var angle = Math.PI * 2 / this.dataPointsLen;\n\n        for (var i = 0; i < this.dataPointsLen; i++) {\n          var curPos = {};\n          curPos.x = size * Math.sin(i * angle);\n          curPos.y = -size * Math.cos(i * angle);\n          dotsArray.push(curPos);\n        }\n\n        return dotsArray;\n      }\n    }]);\n\n    return Radar;\n  }();\n\n  /**\n   * ApexCharts Radial Class for drawing Circle / Semi Circle Charts.\n   * @module Radial\n   **/\n\n  var Radial =\n  /*#__PURE__*/\n  function (_Pie) {\n    _inherits(Radial, _Pie);\n\n    function Radial(ctx) {\n      var _this;\n\n      _classCallCheck(this, Radial);\n\n      _this = _possibleConstructorReturn(this, _getPrototypeOf(Radial).call(this, ctx));\n      _this.ctx = ctx;\n      _this.w = ctx.w;\n      _this.animBeginArr = [0];\n      _this.animDur = 0;\n      var w = _this.w;\n      _this.startAngle = w.config.plotOptions.radialBar.startAngle;\n      _this.endAngle = w.config.plotOptions.radialBar.endAngle;\n      _this.trackStartAngle = w.config.plotOptions.radialBar.track.startAngle;\n      _this.trackEndAngle = w.config.plotOptions.radialBar.track.endAngle;\n      _this.radialDataLabels = w.config.plotOptions.radialBar.dataLabels;\n      if (!_this.trackStartAngle) _this.trackStartAngle = _this.startAngle;\n      if (!_this.trackEndAngle) _this.trackEndAngle = _this.endAngle;\n      if (_this.endAngle === 360) _this.endAngle = 359.99;\n      _this.fullAngle = 360 - w.config.plotOptions.radialBar.endAngle - w.config.plotOptions.radialBar.startAngle;\n      _this.margin = parseInt(w.config.plotOptions.radialBar.track.margin);\n      return _this;\n    }\n\n    _createClass(Radial, [{\n      key: \"draw\",\n      value: function draw(series) {\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var ret = graphics.group({\n          class: 'apexcharts-radialbar'\n        });\n        if (w.globals.noData) return ret;\n        var elSeries = graphics.group();\n        var centerY = this.defaultSize / 2;\n        var centerX = w.globals.gridWidth / 2;\n        var size = this.defaultSize / 2.05 - w.config.stroke.width - w.config.chart.dropShadow.blur;\n\n        if (w.config.plotOptions.radialBar.size !== undefined) {\n          size = w.config.plotOptions.radialBar.size;\n        }\n\n        var colorArr = w.globals.fill.colors;\n\n        if (w.config.plotOptions.radialBar.track.show) {\n          var elTracks = this.drawTracks({\n            size: size,\n            centerX: centerX,\n            centerY: centerY,\n            colorArr: colorArr,\n            series: series\n          });\n          elSeries.add(elTracks);\n        }\n\n        var elG = this.drawArcs({\n          size: size,\n          centerX: centerX,\n          centerY: centerY,\n          colorArr: colorArr,\n          series: series\n        });\n        var totalAngle = 360;\n\n        if (w.config.plotOptions.radialBar.startAngle < 0) {\n          totalAngle = Math.abs(w.config.plotOptions.radialBar.endAngle - w.config.plotOptions.radialBar.startAngle);\n        }\n\n        w.globals.radialSize = size - size / (360 / (360 - totalAngle));\n        elSeries.add(elG.g);\n\n        if (w.config.plotOptions.radialBar.hollow.position === 'front') {\n          elG.g.add(elG.elHollow);\n\n          if (elG.dataLabels) {\n            elG.g.add(elG.dataLabels);\n          }\n        }\n\n        ret.add(elSeries);\n        return ret;\n      }\n    }, {\n      key: \"drawTracks\",\n      value: function drawTracks(opts) {\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var g = graphics.group({\n          class: 'apexcharts-tracks'\n        });\n        var filters = new Filters(this.ctx);\n        var fill = new Fill(this.ctx);\n        var strokeWidth = this.getStrokeWidth(opts);\n        opts.size = opts.size - strokeWidth / 2;\n\n        for (var i = 0; i < opts.series.length; i++) {\n          var elRadialBarTrack = graphics.group({\n            class: 'apexcharts-radialbar-track apexcharts-track'\n          });\n          g.add(elRadialBarTrack);\n          elRadialBarTrack.attr({\n            rel: i + 1\n          });\n          opts.size = opts.size - strokeWidth - this.margin;\n          var trackConfig = w.config.plotOptions.radialBar.track;\n          var pathFill = fill.fillPath({\n            seriesNumber: 0,\n            size: opts.size,\n            fillColors: Array.isArray(trackConfig.background) ? trackConfig.background[i] : trackConfig.background,\n            solid: true\n          });\n          var startAngle = this.trackStartAngle;\n          var endAngle = this.trackEndAngle;\n          if (Math.abs(endAngle) + Math.abs(startAngle) >= 360) endAngle = 360 - Math.abs(this.startAngle) - 0.1;\n          var elPath = graphics.drawPath({\n            d: '',\n            stroke: pathFill,\n            strokeWidth: strokeWidth * parseInt(trackConfig.strokeWidth) / 100,\n            fill: 'none',\n            strokeOpacity: trackConfig.opacity,\n            classes: 'apexcharts-radialbar-area'\n          });\n\n          if (trackConfig.dropShadow.enabled) {\n            var shadow = trackConfig.dropShadow;\n            filters.dropShadow(elPath, shadow);\n          }\n\n          elRadialBarTrack.add(elPath);\n          elPath.attr('id', 'apexcharts-radialbarTrack-' + i);\n          this.animatePaths(elPath, {\n            centerX: opts.centerX,\n            centerY: opts.centerY,\n            endAngle: endAngle,\n            startAngle: startAngle,\n            size: opts.size,\n            i: i,\n            totalItems: 2,\n            animBeginArr: 0,\n            dur: 0,\n            isTrack: true,\n            easing: w.globals.easing\n          });\n        }\n\n        return g;\n      }\n    }, {\n      key: \"drawArcs\",\n      value: function drawArcs(opts) {\n        var w = this.w; // size, donutSize, centerX, centerY, colorArr, lineColorArr, sectorAngleArr, series\n\n        var graphics = new Graphics(this.ctx);\n        var fill = new Fill(this.ctx);\n        var filters = new Filters(this.ctx);\n        var g = graphics.group();\n        var strokeWidth = this.getStrokeWidth(opts);\n        opts.size = opts.size - strokeWidth / 2;\n        var hollowFillID = w.config.plotOptions.radialBar.hollow.background;\n        var hollowSize = opts.size - strokeWidth * opts.series.length - this.margin * opts.series.length - strokeWidth * parseInt(w.config.plotOptions.radialBar.track.strokeWidth) / 100 / 2;\n        var hollowRadius = hollowSize - w.config.plotOptions.radialBar.hollow.margin;\n\n        if (w.config.plotOptions.radialBar.hollow.image !== undefined) {\n          hollowFillID = this.drawHollowImage(opts, g, hollowSize, hollowFillID);\n        }\n\n        var elHollow = this.drawHollow({\n          size: hollowRadius,\n          centerX: opts.centerX,\n          centerY: opts.centerY,\n          fill: hollowFillID\n        });\n\n        if (w.config.plotOptions.radialBar.hollow.dropShadow.enabled) {\n          var shadow = w.config.plotOptions.radialBar.hollow.dropShadow;\n          filters.dropShadow(elHollow, shadow);\n        }\n\n        var shown = 1;\n\n        if (!this.radialDataLabels.total.show && w.globals.series.length > 1) {\n          shown = 0;\n        }\n\n        var dataLabels = null;\n\n        if (this.radialDataLabels.show) {\n          dataLabels = this.renderInnerDataLabels(this.radialDataLabels, {\n            hollowSize: hollowSize,\n            centerX: opts.centerX,\n            centerY: opts.centerY,\n            opacity: shown\n          });\n        }\n\n        if (w.config.plotOptions.radialBar.hollow.position === 'back') {\n          g.add(elHollow);\n\n          if (dataLabels) {\n            g.add(dataLabels);\n          }\n        }\n\n        var reverseLoop = false;\n\n        if (w.config.plotOptions.radialBar.inverseOrder) {\n          reverseLoop = true;\n        }\n\n        for (var i = reverseLoop ? opts.series.length - 1 : 0; reverseLoop ? i >= 0 : i < opts.series.length; reverseLoop ? i-- : i++) {\n          var elRadialBarArc = graphics.group({\n            class: \"apexcharts-series apexcharts-radial-series\",\n            seriesName: Utils.escapeString(w.globals.seriesNames[i])\n          });\n          g.add(elRadialBarArc);\n          elRadialBarArc.attr({\n            rel: i + 1,\n            'data:realIndex': i\n          });\n          this.ctx.series.addCollapsedClassToSeries(elRadialBarArc, i);\n          opts.size = opts.size - strokeWidth - this.margin;\n          var pathFill = fill.fillPath({\n            seriesNumber: i,\n            size: opts.size,\n            value: opts.series[i]\n          });\n          var startAngle = this.startAngle;\n          var prevStartAngle = void 0;\n          var totalAngle = Math.abs(w.config.plotOptions.radialBar.endAngle - w.config.plotOptions.radialBar.startAngle); // if data exceeds 100, make it 100\n\n          var dataValue = Utils.negToZero(opts.series[i] > 100 ? 100 : opts.series[i]) / 100;\n          var endAngle = Math.round(totalAngle * dataValue) + this.startAngle;\n          var prevEndAngle = void 0;\n\n          if (w.globals.dataChanged) {\n            prevStartAngle = this.startAngle;\n            prevEndAngle = Math.round(totalAngle * Utils.negToZero(w.globals.previousPaths[i]) / 100) + prevStartAngle;\n          }\n\n          var currFullAngle = Math.abs(endAngle) + Math.abs(startAngle);\n\n          if (currFullAngle >= 360) {\n            endAngle = endAngle - 0.01;\n          }\n\n          var prevFullAngle = Math.abs(prevEndAngle) + Math.abs(prevStartAngle);\n\n          if (prevFullAngle >= 360) {\n            prevEndAngle = prevEndAngle - 0.01;\n          }\n\n          var angle = endAngle - startAngle;\n          var dashArray = Array.isArray(w.config.stroke.dashArray) ? w.config.stroke.dashArray[i] : w.config.stroke.dashArray;\n          var elPath = graphics.drawPath({\n            d: '',\n            stroke: pathFill,\n            strokeWidth: strokeWidth,\n            fill: 'none',\n            fillOpacity: w.config.fill.opacity,\n            classes: 'apexcharts-radialbar-area apexcharts-radialbar-slice-' + i,\n            strokeDashArray: dashArray\n          });\n          Graphics.setAttrs(elPath.node, {\n            'data:angle': angle,\n            'data:value': opts.series[i]\n          });\n\n          if (w.config.chart.dropShadow.enabled) {\n            var _shadow = w.config.chart.dropShadow;\n            filters.dropShadow(elPath, _shadow, i);\n          }\n\n          this.addListeners(elPath, this.radialDataLabels);\n          elRadialBarArc.add(elPath);\n          elPath.attr({\n            index: 0,\n            j: i\n          });\n          var dur = 0;\n\n          if (this.initialAnim && !w.globals.resized && !w.globals.dataChanged) {\n            dur = (endAngle - startAngle) / 360 * w.config.chart.animations.speed;\n            this.animDur = dur / (opts.series.length * 1.2) + this.animDur;\n            this.animBeginArr.push(this.animDur);\n          }\n\n          if (w.globals.dataChanged) {\n            dur = (endAngle - startAngle) / 360 * w.config.chart.animations.dynamicAnimation.speed;\n            this.animDur = dur / (opts.series.length * 1.2) + this.animDur;\n            this.animBeginArr.push(this.animDur);\n          }\n\n          this.animatePaths(elPath, {\n            centerX: opts.centerX,\n            centerY: opts.centerY,\n            endAngle: endAngle,\n            startAngle: startAngle,\n            prevEndAngle: prevEndAngle,\n            prevStartAngle: prevStartAngle,\n            size: opts.size,\n            i: i,\n            totalItems: 2,\n            animBeginArr: this.animBeginArr,\n            dur: dur,\n            shouldSetPrevPaths: true,\n            easing: w.globals.easing\n          });\n        }\n\n        return {\n          g: g,\n          elHollow: elHollow,\n          dataLabels: dataLabels\n        };\n      }\n    }, {\n      key: \"drawHollow\",\n      value: function drawHollow(opts) {\n        var graphics = new Graphics(this.ctx);\n        var circle = graphics.drawCircle(opts.size * 2);\n        circle.attr({\n          class: 'apexcharts-radialbar-hollow',\n          cx: opts.centerX,\n          cy: opts.centerY,\n          r: opts.size,\n          fill: opts.fill\n        });\n        return circle;\n      }\n    }, {\n      key: \"drawHollowImage\",\n      value: function drawHollowImage(opts, g, hollowSize, hollowFillID) {\n        var w = this.w;\n        var fill = new Fill(this.ctx);\n        var randID = (Math.random() + 1).toString(36).substring(4);\n        var hollowFillImg = w.config.plotOptions.radialBar.hollow.image;\n\n        if (w.config.plotOptions.radialBar.hollow.imageClipped) {\n          fill.clippedImgArea({\n            width: hollowSize,\n            height: hollowSize,\n            image: hollowFillImg,\n            patternID: \"pattern\".concat(w.globals.cuid).concat(randID)\n          });\n          hollowFillID = \"url(#pattern\".concat(w.globals.cuid).concat(randID, \")\");\n        } else {\n          var imgWidth = w.config.plotOptions.radialBar.hollow.imageWidth;\n          var imgHeight = w.config.plotOptions.radialBar.hollow.imageHeight;\n\n          if (imgWidth === undefined && imgHeight === undefined) {\n            var image = w.globals.dom.Paper.image(hollowFillImg).loaded(function (loader) {\n              this.move(opts.centerX - loader.width / 2 + w.config.plotOptions.radialBar.hollow.imageOffsetX, opts.centerY - loader.height / 2 + w.config.plotOptions.radialBar.hollow.imageOffsetY);\n            });\n            g.add(image);\n          } else {\n            var _image = w.globals.dom.Paper.image(hollowFillImg).loaded(function (loader) {\n              this.move(opts.centerX - imgWidth / 2 + w.config.plotOptions.radialBar.hollow.imageOffsetX, opts.centerY - imgHeight / 2 + w.config.plotOptions.radialBar.hollow.imageOffsetY);\n              this.size(imgWidth, imgHeight);\n            });\n\n            g.add(_image);\n          }\n        }\n\n        return hollowFillID;\n      }\n    }, {\n      key: \"getStrokeWidth\",\n      value: function getStrokeWidth(opts) {\n        var w = this.w;\n        return opts.size * (100 - parseInt(w.config.plotOptions.radialBar.hollow.size)) / 100 / (opts.series.length + 1) - this.margin;\n      }\n    }]);\n\n    return Radial;\n  }(Pie);\n\n  /**\n   * ApexCharts RangeBar Class responsible for drawing Range/Timeline Bars.\n   *\n   * @module RangeBar\n   **/\n\n  var RangeBar =\n  /*#__PURE__*/\n  function (_Bar) {\n    _inherits(RangeBar, _Bar);\n\n    function RangeBar() {\n      _classCallCheck(this, RangeBar);\n\n      return _possibleConstructorReturn(this, _getPrototypeOf(RangeBar).apply(this, arguments));\n    }\n\n    _createClass(RangeBar, [{\n      key: \"draw\",\n      value: function draw(series, seriesIndex) {\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var fill = new Fill(this.ctx);\n        this.rangeBarOptions = this.w.config.plotOptions.rangeBar;\n        this.series = series;\n        this.seriesRangeStart = w.globals.seriesRangeStart;\n        this.seriesRangeEnd = w.globals.seriesRangeEnd;\n        this.initVariables(series);\n        var ret = graphics.group({\n          class: 'apexcharts-rangebar-series apexcharts-plot-series'\n        });\n\n        for (var i = 0, bc = 0; i < series.length; i++, bc++) {\n          var pathTo = void 0,\n              pathFrom = void 0;\n          var x = void 0,\n              y = void 0,\n              xDivision = void 0,\n              // xDivision is the GRIDWIDTH divided by number of datapoints (columns)\n          yDivision = void 0,\n              // yDivision is the GRIDHEIGHT divided by number of datapoints (bars)\n          zeroH = void 0,\n              // zeroH is the baseline where 0 meets y axis\n          zeroW = void 0; // zeroW is the baseline where 0 meets x axis\n\n          var yArrj = []; // hold y values of current iterating series\n\n          var xArrj = []; // hold x values of current iterating series\n\n          var realIndex = w.globals.comboCharts ? seriesIndex[i] : i; // el to which series will be drawn\n\n          var elSeries = graphics.group({\n            class: \"apexcharts-series\",\n            seriesName: Utils.escapeString(w.globals.seriesNames[realIndex]),\n            rel: i + 1,\n            'data:realIndex': realIndex\n          });\n\n          if (series[i].length > 0) {\n            this.visibleI = this.visibleI + 1;\n          }\n\n          var strokeWidth = 0;\n          var barHeight = 0;\n          var barWidth = 0;\n\n          if (this.yRatio.length > 1) {\n            this.yaxisIndex = realIndex;\n          }\n\n          var initPositions = this.initialPositions();\n          y = initPositions.y;\n          yDivision = initPositions.yDivision;\n          barHeight = initPositions.barHeight;\n          zeroW = initPositions.zeroW;\n          x = initPositions.x;\n          barWidth = initPositions.barWidth;\n          xDivision = initPositions.xDivision;\n          zeroH = initPositions.zeroH;\n          xArrj.push(x + barWidth / 2); // eldatalabels\n\n          var elDataLabelsWrap = graphics.group({\n            class: 'apexcharts-datalabels'\n          });\n\n          for (var j = 0, tj = w.globals.dataPoints; j < w.globals.dataPoints; j++, tj--) {\n            if (typeof this.series[i][j] === 'undefined' || series[i][j] === null) {\n              this.isNullValue = true;\n            } else {\n              this.isNullValue = false;\n            }\n\n            if (w.config.stroke.show) {\n              if (this.isNullValue) {\n                strokeWidth = 0;\n              } else {\n                strokeWidth = Array.isArray(this.strokeWidth) ? this.strokeWidth[realIndex] : this.strokeWidth;\n              }\n            }\n\n            var paths = null;\n\n            if (this.isHorizontal) {\n              paths = this.drawRangeBarPaths({\n                indexes: {\n                  i: i,\n                  j: j,\n                  realIndex: realIndex,\n                  bc: bc\n                },\n                barHeight: barHeight,\n                strokeWidth: strokeWidth,\n                pathTo: pathTo,\n                pathFrom: pathFrom,\n                zeroW: zeroW,\n                x: x,\n                y: y,\n                yDivision: yDivision,\n                elSeries: elSeries\n              });\n              barWidth = paths.barWidth;\n            } else {\n              paths = this.drawRangeColumnPaths({\n                indexes: {\n                  i: i,\n                  j: j,\n                  realIndex: realIndex,\n                  bc: bc\n                },\n                x: x,\n                y: y,\n                xDivision: xDivision,\n                pathTo: pathTo,\n                pathFrom: pathFrom,\n                barWidth: barWidth,\n                zeroH: zeroH,\n                strokeWidth: strokeWidth,\n                elSeries: elSeries\n              });\n              barHeight = paths.barHeight;\n            }\n\n            pathTo = paths.pathTo;\n            pathFrom = paths.pathFrom;\n            y = paths.y;\n            x = paths.x; // push current X\n\n            if (j > 0) {\n              xArrj.push(x + barWidth / 2);\n            }\n\n            yArrj.push(y);\n            var pathFill = fill.fillPath({\n              seriesNumber: realIndex\n            });\n            var lineFill = w.globals.stroke.colors[realIndex];\n            elSeries = this.renderSeries({\n              realIndex: realIndex,\n              pathFill: pathFill,\n              lineFill: lineFill,\n              j: j,\n              i: i,\n              pathFrom: pathFrom,\n              pathTo: pathTo,\n              strokeWidth: strokeWidth,\n              elSeries: elSeries,\n              x: x,\n              y: y,\n              series: series,\n              barHeight: barHeight,\n              barWidth: barWidth,\n              elDataLabelsWrap: elDataLabelsWrap,\n              visibleSeries: this.visibleI,\n              type: 'rangebar'\n            });\n          } // push all x val arrays into main xArr\n\n\n          w.globals.seriesXvalues[realIndex] = xArrj;\n          w.globals.seriesYvalues[realIndex] = yArrj;\n          ret.add(elSeries);\n        }\n\n        return ret;\n      }\n    }, {\n      key: \"drawRangeColumnPaths\",\n      value: function drawRangeColumnPaths(_ref) {\n        var indexes = _ref.indexes,\n            x = _ref.x,\n            y = _ref.y,\n            strokeWidth = _ref.strokeWidth,\n            xDivision = _ref.xDivision,\n            pathTo = _ref.pathTo,\n            pathFrom = _ref.pathFrom,\n            barWidth = _ref.barWidth,\n            zeroH = _ref.zeroH;\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var i = indexes.i;\n        var j = indexes.j;\n        var yRatio = this.yRatio[this.yaxisIndex];\n        var realIndex = indexes.realIndex;\n        var range = this.getRangeValue(realIndex, j);\n        var y1 = Math.min(range.start, range.end);\n        var y2 = Math.max(range.start, range.end);\n\n        if (w.globals.isXNumeric) {\n          x = (w.globals.seriesX[i][j] - w.globals.minX) / this.xRatio - barWidth / 2;\n        }\n\n        var barXPosition = x + barWidth * this.visibleI;\n\n        if (typeof this.series[i][j] === 'undefined' || this.series[i][j] === null) {\n          y1 = zeroH;\n        } else {\n          y1 = zeroH - y1 / yRatio;\n          y2 = zeroH - y2 / yRatio;\n        }\n\n        var barHeight = Math.abs(y2 - y1);\n        pathTo = graphics.move(barXPosition, zeroH);\n        pathFrom = graphics.move(barXPosition, y1);\n\n        if (w.globals.previousPaths.length > 0) {\n          pathFrom = this.getPathFrom(realIndex, j, true);\n        }\n\n        pathTo = graphics.move(barXPosition, y2) + graphics.line(barXPosition + barWidth, y2) + graphics.line(barXPosition + barWidth, y1) + graphics.line(barXPosition, y1) + graphics.line(barXPosition, y2 - strokeWidth / 2);\n        pathFrom = pathFrom + graphics.move(barXPosition, y1) + graphics.line(barXPosition + barWidth, y1) + graphics.line(barXPosition + barWidth, y1) + graphics.line(barXPosition, y1);\n\n        if (!w.globals.isXNumeric) {\n          x = x + xDivision;\n        }\n\n        return {\n          pathTo: pathTo,\n          pathFrom: pathFrom,\n          barHeight: barHeight,\n          x: x,\n          y: y2,\n          barXPosition: barXPosition\n        };\n      }\n    }, {\n      key: \"drawRangeBarPaths\",\n      value: function drawRangeBarPaths(_ref2) {\n        var indexes = _ref2.indexes,\n            x = _ref2.x,\n            y = _ref2.y,\n            yDivision = _ref2.yDivision,\n            pathTo = _ref2.pathTo,\n            pathFrom = _ref2.pathFrom,\n            barHeight = _ref2.barHeight,\n            zeroW = _ref2.zeroW;\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var i = indexes.i;\n        var j = indexes.j;\n        var realIndex = indexes.realIndex;\n        var x1 = zeroW;\n        var x2 = zeroW;\n\n        if (w.globals.isXNumeric) {\n          y = (w.globals.seriesX[i][j] - w.globals.minX) / this.invertedXRatio - barHeight;\n        }\n\n        var barYPosition = y + barHeight * this.visibleI;\n\n        if (typeof this.series[i][j] !== 'undefined' && this.series[i][j] !== null) {\n          x1 = zeroW + this.seriesRangeStart[i][j] / this.invertedYRatio;\n          x2 = zeroW + this.seriesRangeEnd[i][j] / this.invertedYRatio;\n        }\n\n        pathTo = graphics.move(zeroW, barYPosition);\n        pathFrom = graphics.move(zeroW, barYPosition);\n\n        if (w.globals.previousPaths.length > 0) {\n          pathFrom = this.getPathFrom(realIndex, j);\n        }\n\n        var barWidth = Math.abs(x2 - x1);\n        pathTo = graphics.move(x1, barYPosition) + graphics.line(x2, barYPosition) + graphics.line(x2, barYPosition + barHeight) + graphics.line(x1, barYPosition + barHeight) + graphics.line(x1, barYPosition);\n        pathFrom = pathFrom + graphics.line(x1, barYPosition) + graphics.line(x1, barYPosition + barHeight) + graphics.line(x1, barYPosition + barHeight) + graphics.line(x1, barYPosition);\n\n        if (!w.globals.isXNumeric) {\n          y = y + yDivision;\n        }\n\n        return {\n          pathTo: pathTo,\n          pathFrom: pathFrom,\n          barWidth: barWidth,\n          x: x2,\n          y: y,\n          barYPosition: barYPosition\n        };\n      }\n    }, {\n      key: \"getRangeValue\",\n      value: function getRangeValue(i, j) {\n        var w = this.w;\n        return {\n          start: w.globals.seriesRangeStart[i][j],\n          end: w.globals.seriesRangeEnd[i][j]\n        };\n      }\n    }]);\n\n    return RangeBar;\n  }(Bar);\n\n  /**\n   * ApexCharts Formatter Class for setting value formatters for axes as well as tooltips.\n   *\n   * @module Formatters\n   **/\n\n  var Formatters =\n  /*#__PURE__*/\n  function () {\n    function Formatters(ctx) {\n      _classCallCheck(this, Formatters);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n      this.tooltipKeyFormat = 'dd MMM';\n    }\n\n    _createClass(Formatters, [{\n      key: \"xLabelFormat\",\n      value: function xLabelFormat(fn, val, timestamp) {\n        var w = this.w;\n\n        if (w.config.xaxis.type === 'datetime') {\n          if (w.config.xaxis.labels.formatter === undefined) {\n            // if user has not specified a custom formatter, use the default tooltip.x.format\n            if (w.config.tooltip.x.formatter === undefined) {\n              var datetimeObj = new DateTime(this.ctx);\n              return datetimeObj.formatDate(new Date(val), w.config.tooltip.x.format, true, true);\n            }\n          }\n        }\n\n        return fn(val, timestamp);\n      }\n    }, {\n      key: \"setLabelFormatters\",\n      value: function setLabelFormatters() {\n        var w = this.w;\n\n        w.globals.xLabelFormatter = function (val) {\n          return val;\n        };\n\n        w.globals.xaxisTooltipFormatter = function (val) {\n          return val;\n        };\n\n        w.globals.ttKeyFormatter = function (val) {\n          return val;\n        };\n\n        w.globals.ttZFormatter = function (val) {\n          return val;\n        };\n\n        w.globals.legendFormatter = function (val) {\n          return val;\n        }; // formatter function will always overwrite format property\n\n\n        if (w.config.xaxis.labels.formatter !== undefined) {\n          w.globals.xLabelFormatter = w.config.xaxis.labels.formatter;\n        } else {\n          w.globals.xLabelFormatter = function (val) {\n            if (Utils.isNumber(val)) {\n              // numeric xaxis may have smaller range, so defaulting to 1 decimal\n              if (w.config.xaxis.type === 'numeric' && w.globals.dataPoints < 50) {\n                return val.toFixed(1);\n              }\n\n              if (w.globals.isBarHorizontal) {\n                var range = w.globals.maxY - w.globals.minYArr;\n\n                if (range < 4) {\n                  return val.toFixed(1);\n                }\n              }\n\n              return val.toFixed(0);\n            }\n\n            return val;\n          };\n        }\n\n        if (typeof w.config.tooltip.x.formatter === 'function') {\n          w.globals.ttKeyFormatter = w.config.tooltip.x.formatter;\n        } else {\n          w.globals.ttKeyFormatter = w.globals.xLabelFormatter;\n        }\n\n        if (typeof w.config.xaxis.tooltip.formatter === 'function') {\n          w.globals.xaxisTooltipFormatter = w.config.xaxis.tooltip.formatter;\n        }\n\n        if (Array.isArray(w.config.tooltip.y)) {\n          w.globals.ttVal = w.config.tooltip.y;\n        } else {\n          if (w.config.tooltip.y.formatter !== undefined) {\n            w.globals.ttVal = w.config.tooltip.y;\n          }\n        }\n\n        if (w.config.tooltip.z.formatter !== undefined) {\n          w.globals.ttZFormatter = w.config.tooltip.z.formatter;\n        } // legend formatter - if user wants to append any global values of series to legend text\n\n\n        if (w.config.legend.formatter !== undefined) {\n          w.globals.legendFormatter = w.config.legend.formatter;\n        } // formatter function will always overwrite format property\n\n\n        w.config.yaxis.forEach(function (yaxe, i) {\n          if (yaxe.labels.formatter !== undefined) {\n            w.globals.yLabelFormatters[i] = yaxe.labels.formatter;\n          } else {\n            w.globals.yLabelFormatters[i] = function (val) {\n              if (!w.globals.xyCharts) return val;\n\n              if (Utils.isNumber(val)) {\n                if (w.globals.yValueDecimal !== 0) {\n                  return val.toFixed(yaxe.decimalsInFloat !== undefined ? yaxe.decimalsInFloat : w.globals.yValueDecimal);\n                } else if (w.globals.maxYArr[i] - w.globals.minYArr[i] < 10) {\n                  return val.toFixed(1);\n                } else {\n                  return val.toFixed(0);\n                }\n              }\n\n              return val;\n            };\n          }\n        });\n        return w.globals;\n      }\n    }, {\n      key: \"heatmapLabelFormatters\",\n      value: function heatmapLabelFormatters() {\n        var w = this.w;\n\n        if (w.config.chart.type === 'heatmap') {\n          w.globals.yAxisScale[0].result = w.globals.seriesNames.slice(); //  get the longest string from the labels array and also apply label formatter to it\n\n          var longest = w.globals.seriesNames.reduce(function (a, b) {\n            return a.length > b.length ? a : b;\n          }, 0);\n          w.globals.yAxisScale[0].niceMax = longest;\n          w.globals.yAxisScale[0].niceMin = longest;\n        }\n      }\n    }]);\n\n    return Formatters;\n  }();\n\n  var AxesUtils =\n  /*#__PURE__*/\n  function () {\n    function AxesUtils(ctx) {\n      _classCallCheck(this, AxesUtils);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n    } // Based on the formatter function, get the label text and position\n\n\n    _createClass(AxesUtils, [{\n      key: \"getLabel\",\n      value: function getLabel(labels, timelineLabels, x, i) {\n        var drawnLabels = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : [];\n        var w = this.w;\n        var rawLabel = typeof labels[i] === 'undefined' ? '' : labels[i];\n        var label;\n        var xlbFormatter = w.globals.xLabelFormatter;\n        var customFormatter = w.config.xaxis.labels.formatter;\n        var isBold = false;\n        var xFormat = new Formatters(this.ctx);\n        var timestamp = rawLabel;\n        label = xFormat.xLabelFormat(xlbFormatter, rawLabel, timestamp);\n\n        if (customFormatter !== undefined) {\n          label = customFormatter(rawLabel, labels[i], i);\n        }\n\n        var determineHighestUnit = function determineHighestUnit(unit) {\n          var highestUnit = null;\n          timelineLabels.forEach(function (t) {\n            if (t.unit === 'month') {\n              highestUnit = 'year';\n            } else if (t.unit === 'day') {\n              highestUnit = 'month';\n            } else if (t.unit === 'hour') {\n              highestUnit = 'day';\n            } else if (t.unit === 'minute') {\n              highestUnit = 'hour';\n            }\n          });\n          return highestUnit === unit;\n        };\n\n        if (timelineLabels.length > 0) {\n          isBold = determineHighestUnit(timelineLabels[i].unit);\n          x = timelineLabels[i].position;\n          label = timelineLabels[i].value;\n        } else {\n          if (w.config.xaxis.type === 'datetime' && customFormatter === undefined) {\n            label = '';\n          }\n        }\n\n        if (typeof label === 'undefined') label = '';\n        label = label.toString();\n\n        if (label.indexOf('NaN') === 0 || label.toLowerCase().indexOf('invalid') === 0 || label.toLowerCase().indexOf('infinity') >= 0 || drawnLabels.indexOf(label) >= 0 && !w.config.xaxis.labels.showDuplicates) {\n          label = '';\n        }\n\n        return {\n          x: x,\n          text: label,\n          isBold: isBold\n        };\n      }\n    }, {\n      key: \"drawYAxisTicks\",\n      value: function drawYAxisTicks(x, tickAmount, axisBorder, axisTicks, realIndex, labelsDivider, elYaxis) {\n        var w = this.w;\n        var graphics = new Graphics(this.ctx); // initial label position = 0;\n\n        var t = w.globals.translateY;\n\n        if (axisTicks.show) {\n          if (w.config.yaxis[realIndex].opposite === true) x = x + axisTicks.width;\n\n          for (var i = tickAmount; i >= 0; i--) {\n            var tY = t + tickAmount / 10 + w.config.yaxis[realIndex].labels.offsetY - 1;\n\n            if (w.globals.isBarHorizontal) {\n              tY = labelsDivider * i;\n            }\n\n            var elTick = graphics.drawLine(x + axisBorder.offsetX - axisTicks.width + axisTicks.offsetX, tY + axisTicks.offsetY, x + axisBorder.offsetX + axisTicks.offsetX, tY + axisTicks.offsetY, axisBorder.color);\n            elYaxis.add(elTick);\n            t = t + labelsDivider;\n          }\n        }\n      }\n    }]);\n\n    return AxesUtils;\n  }();\n\n  /**\n   * ApexCharts YAxis Class for drawing Y-Axis.\n   *\n   * @module YAxis\n   **/\n\n  var YAxis =\n  /*#__PURE__*/\n  function () {\n    function YAxis(ctx) {\n      _classCallCheck(this, YAxis);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n      var w = this.w;\n      this.xaxisFontSize = w.config.xaxis.labels.style.fontSize;\n      this.axisFontFamily = w.config.xaxis.labels.style.fontFamily;\n      this.xaxisForeColors = w.config.xaxis.labels.style.colors;\n      this.xAxisoffX = 0;\n\n      if (w.config.xaxis.position === 'bottom') {\n        this.xAxisoffX = w.globals.gridHeight;\n      }\n\n      this.drawnLabels = [];\n      this.axesUtils = new AxesUtils(ctx);\n    }\n\n    _createClass(YAxis, [{\n      key: \"drawYaxis\",\n      value: function drawYaxis(realIndex) {\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var yaxisFontSize = w.config.yaxis[realIndex].labels.style.fontSize;\n        var yaxisFontFamily = w.config.yaxis[realIndex].labels.style.fontFamily;\n        var elYaxis = graphics.group({\n          class: 'apexcharts-yaxis',\n          rel: realIndex,\n          transform: 'translate(' + w.globals.translateYAxisX[realIndex] + ', 0)'\n        });\n\n        if (!w.config.yaxis[realIndex].show) {\n          return elYaxis;\n        }\n\n        var elYaxisTexts = graphics.group({\n          class: 'apexcharts-yaxis-texts-g'\n        });\n        elYaxis.add(elYaxisTexts);\n        var tickAmount = w.globals.yAxisScale[realIndex].result.length - 1; // labelsDivider is simply svg height/number of ticks\n\n        var labelsDivider = w.globals.gridHeight / tickAmount + 0.1; // initial label position = 0;\n\n        var l = w.globals.translateY;\n        var lbFormatter = w.globals.yLabelFormatters[realIndex];\n        var labels = w.globals.yAxisScale[realIndex].result.slice();\n\n        if (w.config.yaxis[realIndex] && w.config.yaxis[realIndex].reversed) {\n          labels.reverse();\n        }\n\n        if (w.config.yaxis[realIndex].labels.show) {\n          for (var i = tickAmount; i >= 0; i--) {\n            var val = labels[i];\n            val = lbFormatter(val, i);\n            var xPad = w.config.yaxis[realIndex].labels.padding;\n\n            if (w.config.yaxis[realIndex].opposite && w.config.yaxis.length !== 0) {\n              xPad = xPad * -1;\n            }\n\n            var label = graphics.drawText({\n              x: xPad,\n              y: l + tickAmount / 10 + w.config.yaxis[realIndex].labels.offsetY + 1,\n              text: val,\n              textAnchor: w.config.yaxis[realIndex].opposite ? 'start' : 'end',\n              fontSize: yaxisFontSize,\n              fontFamily: yaxisFontFamily,\n              foreColor: w.config.yaxis[realIndex].labels.style.color,\n              cssClass: 'apexcharts-yaxis-label ' + w.config.yaxis[realIndex].labels.style.cssClass\n            });\n            elYaxisTexts.add(label);\n            var labelRotatingCenter = graphics.rotateAroundCenter(label.node);\n\n            if (w.config.yaxis[realIndex].labels.rotate !== 0) {\n              label.node.setAttribute('transform', \"rotate(\".concat(w.config.yaxis[realIndex].labels.rotate, \" \").concat(labelRotatingCenter.x, \" \").concat(labelRotatingCenter.y, \")\"));\n            }\n\n            l = l + labelsDivider;\n          }\n        }\n\n        if (w.config.yaxis[realIndex].title.text !== undefined) {\n          var elYaxisTitle = graphics.group({\n            class: 'apexcharts-yaxis-title'\n          });\n          var x = 0;\n\n          if (w.config.yaxis[realIndex].opposite) {\n            x = w.globals.translateYAxisX[realIndex];\n          }\n\n          var elYAxisTitleText = graphics.drawText({\n            x: x,\n            y: w.globals.gridHeight / 2 + w.globals.translateY,\n            text: w.config.yaxis[realIndex].title.text,\n            textAnchor: 'end',\n            foreColor: w.config.yaxis[realIndex].title.style.color,\n            fontSize: w.config.yaxis[realIndex].title.style.fontSize,\n            fontFamily: w.config.yaxis[realIndex].title.style.fontFamily,\n            cssClass: 'apexcharts-yaxis-title-text ' + w.config.yaxis[realIndex].title.style.cssClass\n          });\n          elYaxisTitle.add(elYAxisTitleText);\n          elYaxis.add(elYaxisTitle);\n        }\n\n        var axisBorder = w.config.yaxis[realIndex].axisBorder;\n\n        if (axisBorder.show) {\n          var _x = 31 + axisBorder.offsetX;\n\n          if (w.config.yaxis[realIndex].opposite) {\n            _x = -31 - axisBorder.offsetX;\n          }\n\n          var elVerticalLine = graphics.drawLine(_x, w.globals.translateY + axisBorder.offsetY - 2, _x, w.globals.gridHeight + w.globals.translateY + axisBorder.offsetY + 2, axisBorder.color);\n          elYaxis.add(elVerticalLine);\n          this.axesUtils.drawYAxisTicks(_x, tickAmount, axisBorder, w.config.yaxis[realIndex].axisTicks, realIndex, labelsDivider, elYaxis);\n        }\n\n        return elYaxis;\n      } // This actually becomes horizonal axis (for bar charts)\n\n    }, {\n      key: \"drawYaxisInversed\",\n      value: function drawYaxisInversed(realIndex) {\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var elXaxis = graphics.group({\n          class: 'apexcharts-xaxis apexcharts-yaxis-inversed'\n        });\n        var elXaxisTexts = graphics.group({\n          class: 'apexcharts-xaxis-texts-g',\n          transform: \"translate(\".concat(w.globals.translateXAxisX, \", \").concat(w.globals.translateXAxisY, \")\")\n        });\n        elXaxis.add(elXaxisTexts);\n        var tickAmount = w.globals.yAxisScale[realIndex].result.length - 1; // labelsDivider is simply svg width/number of ticks\n\n        var labelsDivider = w.globals.gridWidth / tickAmount + 0.1; // initial label position;\n\n        var l = labelsDivider + w.config.xaxis.labels.offsetX;\n        var lbFormatter = w.globals.xLabelFormatter;\n        var labels = w.globals.yAxisScale[realIndex].result.slice();\n        var timelineLabels = w.globals.invertedTimelineLabels;\n\n        if (timelineLabels.length > 0) {\n          this.xaxisLabels = timelineLabels.slice();\n          labels = timelineLabels.slice();\n          tickAmount = labels.length;\n        }\n\n        if (w.config.yaxis[realIndex] && w.config.yaxis[realIndex].reversed) {\n          labels.reverse();\n        }\n\n        var tl = timelineLabels.length;\n\n        if (w.config.xaxis.labels.show) {\n          for (var i = tl ? 0 : tickAmount; tl ? i < tl - 1 : i >= 0; tl ? i++ : i--) {\n            var val = labels[i];\n            val = lbFormatter(val, i);\n            var x = w.globals.gridWidth + w.globals.padHorizontal - (l - labelsDivider + w.config.xaxis.labels.offsetX);\n\n            if (timelineLabels.length) {\n              var label = this.axesUtils.getLabel(labels, timelineLabels, x, i, this.drawnLabels);\n              x = label.x;\n              val = label.text;\n              this.drawnLabels.push(label.text);\n            }\n\n            var elTick = graphics.drawText({\n              x: x,\n              y: this.xAxisoffX + w.config.xaxis.labels.offsetY + 30,\n              text: '',\n              textAnchor: 'middle',\n              foreColor: Array.isArray(this.xaxisForeColors) ? this.xaxisForeColors[realIndex] : this.xaxisForeColors,\n              fontSize: this.xaxisFontSize,\n              fontFamily: this.xaxisFontFamily,\n              cssClass: 'apexcharts-xaxis-label ' + w.config.xaxis.labels.style.cssClass\n            });\n            elXaxisTexts.add(elTick);\n            elTick.tspan(val);\n            var elTooltipTitle = document.createElementNS(w.globals.SVGNS, 'title');\n            elTooltipTitle.textContent = val;\n            elTick.node.appendChild(elTooltipTitle);\n            l = l + labelsDivider;\n          }\n        }\n\n        if (w.config.xaxis.title.text !== undefined) {\n          var elYaxisTitle = graphics.group({\n            class: 'apexcharts-xaxis-title apexcharts-yaxis-title-inversed'\n          });\n          var elYAxisTitleText = graphics.drawText({\n            x: w.globals.gridWidth / 2,\n            y: this.xAxisoffX + parseInt(this.xaxisFontSize) + parseInt(w.config.xaxis.title.style.fontSize) + 20,\n            text: w.config.xaxis.title.text,\n            textAnchor: 'middle',\n            fontSize: w.config.xaxis.title.style.fontSize,\n            fontFamily: w.config.xaxis.title.style.fontFamily,\n            cssClass: 'apexcharts-xaxis-title-text ' + w.config.xaxis.title.style.cssClass\n          });\n          elYaxisTitle.add(elYAxisTitleText);\n          elXaxis.add(elYaxisTitle);\n        }\n\n        var axisBorder = w.config.yaxis[realIndex].axisBorder;\n\n        if (axisBorder.show) {\n          var elVerticalLine = graphics.drawLine(w.globals.padHorizontal + axisBorder.offsetX, 1 + axisBorder.offsetY, w.globals.padHorizontal + axisBorder.offsetX, w.globals.gridHeight + axisBorder.offsetY, axisBorder.color);\n          elXaxis.add(elVerticalLine);\n        }\n\n        return elXaxis;\n      }\n    }, {\n      key: \"yAxisTitleRotate\",\n      value: function yAxisTitleRotate(realIndex, yAxisOpposite) {\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var yAxisLabelsCoord = {\n          width: 0,\n          height: 0\n        };\n        var yAxisTitleCoord = {\n          width: 0,\n          height: 0\n        };\n        var elYAxisLabelsWrap = w.globals.dom.baseEl.querySelector(\" .apexcharts-yaxis[rel='\".concat(realIndex, \"'] .apexcharts-yaxis-texts-g\"));\n\n        if (elYAxisLabelsWrap !== null) {\n          yAxisLabelsCoord = elYAxisLabelsWrap.getBoundingClientRect();\n        }\n\n        var yAxisTitle = w.globals.dom.baseEl.querySelector(\".apexcharts-yaxis[rel='\".concat(realIndex, \"'] .apexcharts-yaxis-title text\"));\n\n        if (yAxisTitle !== null) {\n          yAxisTitleCoord = yAxisTitle.getBoundingClientRect();\n        }\n\n        if (yAxisTitle !== null) {\n          var x = this.xPaddingForYAxisTitle(realIndex, yAxisLabelsCoord, yAxisTitleCoord, yAxisOpposite);\n          yAxisTitle.setAttribute('x', x.xPos - (yAxisOpposite ? 10 : 0));\n        }\n\n        if (yAxisTitle !== null) {\n          var titleRotatingCenter = graphics.rotateAroundCenter(yAxisTitle);\n\n          if (!yAxisOpposite) {\n            yAxisTitle.setAttribute('transform', \"rotate(-\".concat(w.config.yaxis[realIndex].title.rotate, \" \").concat(titleRotatingCenter.x, \" \").concat(titleRotatingCenter.y, \")\"));\n          } else {\n            yAxisTitle.setAttribute('transform', \"rotate(\".concat(w.config.yaxis[realIndex].title.rotate, \" \").concat(titleRotatingCenter.x, \" \").concat(titleRotatingCenter.y, \")\"));\n          }\n        }\n      }\n    }, {\n      key: \"xPaddingForYAxisTitle\",\n      value: function xPaddingForYAxisTitle(realIndex, yAxisLabelsCoord, yAxisTitleCoord, yAxisOpposite) {\n        var w = this.w;\n        var oppositeAxisCount = 0;\n        var x = 0;\n        var padd = 10;\n\n        if (w.config.yaxis[realIndex].title.text === undefined || realIndex < 0) {\n          return {\n            xPos: x,\n            padd: 0\n          };\n        }\n\n        if (yAxisOpposite) {\n          x = yAxisLabelsCoord.width + w.config.yaxis[realIndex].title.offsetX + yAxisTitleCoord.width / 2 + padd / 2;\n          oppositeAxisCount += 1;\n\n          if (oppositeAxisCount === 0) {\n            x = x - padd / 2;\n          }\n        } else {\n          x = yAxisLabelsCoord.width * -1 + w.config.yaxis[realIndex].title.offsetX + padd / 2 + yAxisTitleCoord.width / 2;\n\n          if (w.globals.isBarHorizontal) {\n            padd = 25;\n            x = yAxisLabelsCoord.width * -1 - w.config.yaxis[realIndex].title.offsetX - padd;\n          }\n        }\n\n        return {\n          xPos: x,\n          padd: padd\n        };\n      } // sets the x position of the y-axis by counting the labels width, title width and any offset\n\n    }, {\n      key: \"setYAxisXPosition\",\n      value: function setYAxisXPosition(yaxisLabelCoords, yTitleCoords) {\n        var w = this.w;\n        var xLeft = 0;\n        var xRight = 0;\n        var leftOffsetX = 21;\n        var rightOffsetX = 1;\n\n        if (w.config.yaxis.length > 1) {\n          this.multipleYs = true;\n        }\n\n        w.config.yaxis.map(function (yaxe, index) {\n          var shouldNotDrawAxis = w.globals.ignoreYAxisIndexes.indexOf(index) > -1 || !yaxe.show || yaxe.floating || yaxisLabelCoords[index].width === 0;\n          var axisWidth = yaxisLabelCoords[index].width + yTitleCoords[index].width;\n\n          if (!yaxe.opposite) {\n            xLeft = w.globals.translateX - leftOffsetX;\n\n            if (!shouldNotDrawAxis) {\n              leftOffsetX = leftOffsetX + axisWidth + 20;\n            }\n\n            w.globals.translateYAxisX[index] = xLeft + yaxe.labels.offsetX;\n          } else {\n            if (w.globals.isBarHorizontal) {\n              xRight = w.globals.gridWidth + w.globals.translateX - 1;\n              w.globals.translateYAxisX[index] = xRight - yaxe.labels.offsetX;\n            } else {\n              xRight = w.globals.gridWidth + w.globals.translateX + rightOffsetX;\n\n              if (!shouldNotDrawAxis) {\n                rightOffsetX = rightOffsetX + axisWidth + 20;\n              }\n\n              w.globals.translateYAxisX[index] = xRight - yaxe.labels.offsetX + 20;\n            }\n          }\n        });\n      }\n    }, {\n      key: \"setYAxisTextAlignments\",\n      value: function setYAxisTextAlignments() {\n        var w = this.w;\n        var yaxis = w.globals.dom.baseEl.querySelectorAll(\".apexcharts-yaxis\");\n        yaxis = Utils.listToArray(yaxis);\n        yaxis.forEach(function (y, index) {\n          var yaxe = w.config.yaxis[index]; // proceed only if user has specified alignment\n\n          if (yaxe.labels.align !== undefined) {\n            var yAxisInner = w.globals.dom.baseEl.querySelector(\".apexcharts-yaxis[rel='\".concat(index, \"'] .apexcharts-yaxis-texts-g\"));\n            var yAxisTexts = w.globals.dom.baseEl.querySelectorAll(\".apexcharts-yaxis[rel='\".concat(index, \"'] .apexcharts-yaxis-label\"));\n            yAxisTexts = Utils.listToArray(yAxisTexts);\n            var rect = yAxisInner.getBoundingClientRect();\n\n            if (yaxe.labels.align === 'left') {\n              yAxisTexts.forEach(function (label, lI) {\n                label.setAttribute('text-anchor', 'start');\n              });\n\n              if (!yaxe.opposite) {\n                yAxisInner.setAttribute('transform', \"translate(-\".concat(rect.width, \", 0)\"));\n              }\n            } else if (yaxe.labels.align === 'center') {\n              yAxisTexts.forEach(function (label, lI) {\n                label.setAttribute('text-anchor', 'middle');\n              });\n              yAxisInner.setAttribute('transform', \"translate(\".concat(rect.width / 2 * (!yaxe.opposite ? -1 : 1), \", 0)\"));\n            } else if (yaxe.labels.align === 'right') {\n              yAxisTexts.forEach(function (label, lI) {\n                label.setAttribute('text-anchor', 'end');\n              });\n\n              if (yaxe.opposite) {\n                yAxisInner.setAttribute('transform', \"translate(\".concat(rect.width, \", 0)\"));\n              }\n            }\n          }\n        });\n      }\n    }]);\n\n    return YAxis;\n  }();\n\n  /**\n   * ApexCharts Dimensions Class for calculating rects of all elements that are drawn and will be drawn.\n   *\n   * @module Dimensions\n   **/\n\n  var Dimensions =\n  /*#__PURE__*/\n  function () {\n    function Dimensions(ctx) {\n      _classCallCheck(this, Dimensions);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n      this.lgRect = {};\n      this.yAxisWidth = 0;\n      this.xAxisHeight = 0;\n      this.isSparkline = this.w.config.chart.sparkline.enabled;\n      this.xPadRight = 0;\n      this.xPadLeft = 0;\n    }\n    /**\n     * @memberof Dimensions\n     * @param {object} w - chart context\n     **/\n\n\n    _createClass(Dimensions, [{\n      key: \"plotCoords\",\n      value: function plotCoords() {\n        var w = this.w;\n        var gl = w.globals;\n        var lgRect = this.getLegendsRect();\n\n        if (gl.axisCharts) {\n          // for line / area / scatter / column\n          this.setGridCoordsForAxisCharts(lgRect);\n        } else {\n          // for pie / donuts / circle\n          this.setGridCoordsForNonAxisCharts(lgRect);\n        }\n\n        this.titleSubtitleOffset(); // after calculating everything, apply padding set by user\n\n        gl.gridHeight = gl.gridHeight - w.config.grid.padding.top - w.config.grid.padding.bottom;\n        gl.gridWidth = gl.gridWidth - w.config.grid.padding.left - w.config.grid.padding.right - this.xPadRight - this.xPadLeft;\n        gl.translateX = gl.translateX + w.config.grid.padding.left + this.xPadLeft;\n        gl.translateY = gl.translateY + w.config.grid.padding.top;\n      }\n    }, {\n      key: \"conditionalChecksForAxisCoords\",\n      value: function conditionalChecksForAxisCoords(xaxisLabelCoords, xtitleCoords) {\n        var w = this.w;\n        this.xAxisHeight = (xaxisLabelCoords.height + xtitleCoords.height) * w.globals.LINE_HEIGHT_RATIO + 15;\n        this.xAxisWidth = xaxisLabelCoords.width;\n\n        if (this.xAxisHeight - xtitleCoords.height > w.config.xaxis.labels.maxHeight) {\n          this.xAxisHeight = w.config.xaxis.labels.maxHeight;\n        }\n\n        if (w.config.xaxis.labels.minHeight && this.xAxisHeight < w.config.xaxis.labels.minHeight) {\n          this.xAxisHeight = w.config.xaxis.labels.minHeight;\n        }\n\n        if (w.config.xaxis.floating) {\n          this.xAxisHeight = 0;\n        }\n\n        if (!w.globals.isBarHorizontal) {\n          this.yAxisWidth = this.getTotalYAxisWidth();\n        } else {\n          this.yAxisWidth = w.globals.yLabelsCoords[0].width + w.globals.yTitleCoords[0].width + 15;\n        }\n\n        var minYAxisWidth = 0;\n        var maxYAxisWidth = 0;\n        w.config.yaxis.forEach(function (y) {\n          minYAxisWidth += y.labels.minWidth;\n          maxYAxisWidth += y.labels.maxWidth;\n        });\n\n        if (this.yAxisWidth < minYAxisWidth) {\n          this.yAxisWidth = minYAxisWidth;\n        }\n\n        if (this.yAxisWidth > maxYAxisWidth) {\n          this.yAxisWidth = maxYAxisWidth;\n        }\n      }\n    }, {\n      key: \"setGridCoordsForAxisCharts\",\n      value: function setGridCoordsForAxisCharts(lgRect) {\n        var w = this.w;\n        var gl = w.globals;\n        var yaxisLabelCoords = this.getyAxisLabelsCoords();\n        var xaxisLabelCoords = this.getxAxisLabelsCoords();\n        var yTitleCoords = this.getyAxisTitleCoords();\n        var xtitleCoords = this.getxAxisTitleCoords();\n        w.globals.yLabelsCoords = [];\n        w.globals.yTitleCoords = [];\n        w.config.yaxis.map(function (yaxe, index) {\n          // store the labels and titles coords in global vars\n          w.globals.yLabelsCoords.push({\n            width: yaxisLabelCoords[index].width,\n            index: index\n          });\n          w.globals.yTitleCoords.push({\n            width: yTitleCoords[index].width,\n            index: index\n          });\n        });\n        this.conditionalChecksForAxisCoords(xaxisLabelCoords, xtitleCoords);\n        gl.translateXAxisY = w.globals.rotateXLabels ? this.xAxisHeight / 8 : -4;\n        gl.translateXAxisX = w.globals.rotateXLabels && w.globals.isXNumeric && w.config.xaxis.labels.rotate <= -45 ? -this.xAxisWidth / 4 : 0;\n\n        if (w.globals.isBarHorizontal) {\n          gl.rotateXLabels = false;\n          gl.translateXAxisY = -1 * (parseInt(w.config.xaxis.labels.style.fontSize) / 1.5);\n        }\n\n        gl.translateXAxisY = gl.translateXAxisY + w.config.xaxis.labels.offsetY;\n        gl.translateXAxisX = gl.translateXAxisX + w.config.xaxis.labels.offsetX;\n        var yAxisWidth = this.yAxisWidth;\n        var xAxisHeight = this.xAxisHeight;\n        gl.xAxisLabelsHeight = this.xAxisHeight;\n        gl.xAxisHeight = this.xAxisHeight;\n        var translateY = 10;\n\n        if (!w.config.grid.show || w.config.chart.type === 'radar') {\n          yAxisWidth = 0;\n          xAxisHeight = 35;\n        }\n\n        if (this.isSparkline) {\n          lgRect = {\n            height: 0,\n            width: 0\n          };\n          xAxisHeight = 0;\n          yAxisWidth = 0;\n          translateY = 0;\n        }\n\n        this.additionalPaddingXLabels(xaxisLabelCoords);\n\n        switch (w.config.legend.position) {\n          case 'bottom':\n            gl.translateY = translateY;\n            gl.translateX = yAxisWidth;\n            gl.gridHeight = gl.svgHeight - lgRect.height - xAxisHeight - (!this.isSparkline ? w.globals.rotateXLabels ? 10 : 15 : 0);\n            gl.gridWidth = gl.svgWidth - yAxisWidth;\n            break;\n\n          case 'top':\n            gl.translateY = lgRect.height + translateY;\n            gl.translateX = yAxisWidth;\n            gl.gridHeight = gl.svgHeight - lgRect.height - xAxisHeight - (!this.isSparkline ? w.globals.rotateXLabels ? 10 : 15 : 0);\n            gl.gridWidth = gl.svgWidth - yAxisWidth;\n            break;\n\n          case 'left':\n            gl.translateY = translateY;\n            gl.translateX = lgRect.width + yAxisWidth;\n            gl.gridHeight = gl.svgHeight - xAxisHeight - 12;\n            gl.gridWidth = gl.svgWidth - lgRect.width - yAxisWidth;\n            break;\n\n          case 'right':\n            gl.translateY = translateY;\n            gl.translateX = yAxisWidth;\n            gl.gridHeight = gl.svgHeight - xAxisHeight - 12;\n            gl.gridWidth = gl.svgWidth - lgRect.width - yAxisWidth - 5;\n            break;\n\n          default:\n            throw new Error('Legend position not supported');\n        }\n\n        this.setGridXPosForDualYAxis(yTitleCoords, yaxisLabelCoords); // after drawing everything, set the Y axis positions\n\n        var objyAxis = new YAxis(this.ctx);\n        objyAxis.setYAxisXPosition(yaxisLabelCoords, yTitleCoords);\n      }\n    }, {\n      key: \"setGridCoordsForNonAxisCharts\",\n      value: function setGridCoordsForNonAxisCharts(lgRect) {\n        var w = this.w;\n        var gl = w.globals;\n        var xPad = 0;\n\n        if (w.config.legend.show && !w.config.legend.floating) {\n          xPad = 20;\n        }\n\n        var offY = 10;\n        var offX = 0;\n\n        if (w.config.chart.type === 'pie' || w.config.chart.type === 'donut') {\n          offY = offY + w.config.plotOptions.pie.offsetY;\n          offX = offX + w.config.plotOptions.pie.offsetX;\n        } else if (w.config.chart.type === 'radialBar') {\n          offY = offY + w.config.plotOptions.radialBar.offsetY;\n          offX = offX + w.config.plotOptions.radialBar.offsetX;\n        }\n\n        if (!w.config.legend.show) {\n          gl.gridHeight = gl.svgHeight - 35;\n          gl.gridWidth = gl.gridHeight;\n          gl.translateY = offY - 10;\n          gl.translateX = offX + (gl.svgWidth - gl.gridWidth) / 2;\n          return;\n        }\n\n        switch (w.config.legend.position) {\n          case 'bottom':\n            gl.gridHeight = gl.svgHeight - lgRect.height - 35;\n            gl.gridWidth = gl.gridHeight;\n            gl.translateY = offY - 20;\n            gl.translateX = offX + (gl.svgWidth - gl.gridWidth) / 2;\n            break;\n\n          case 'top':\n            gl.gridHeight = gl.svgHeight - lgRect.height - 35;\n            gl.gridWidth = gl.gridHeight;\n            gl.translateY = lgRect.height + offY + 10;\n            gl.translateX = offX + (gl.svgWidth - gl.gridWidth) / 2;\n            break;\n\n          case 'left':\n            gl.gridWidth = gl.svgWidth - lgRect.width - xPad;\n            gl.gridHeight = gl.gridWidth;\n            gl.translateY = offY;\n            gl.translateX = offX + lgRect.width + xPad;\n            break;\n\n          case 'right':\n            gl.gridWidth = gl.svgWidth - lgRect.width - xPad - 5;\n            gl.gridHeight = gl.gridWidth;\n            gl.translateY = offY;\n            gl.translateX = offX + 10;\n            break;\n\n          default:\n            throw new Error('Legend position not supported');\n        }\n      }\n    }, {\n      key: \"setGridXPosForDualYAxis\",\n      value: function setGridXPosForDualYAxis(yTitleCoords, yaxisLabelCoords) {\n        var w = this.w;\n        w.config.yaxis.map(function (yaxe, index) {\n          if (w.globals.ignoreYAxisIndexes.indexOf(index) === -1 && !w.config.yaxis[index].floating && w.config.yaxis[index].show) {\n            if (yaxe.opposite) {\n              w.globals.translateX = w.globals.translateX - (yaxisLabelCoords[index].width + yTitleCoords[index].width) - parseInt(w.config.yaxis[index].labels.style.fontSize) / 1.2 - 12;\n            }\n          }\n        });\n      } // Sometimes, the last labels gets cropped in category/numeric xaxis.\n      // Hence, we add some additional padding based on the label length to avoid the last label being cropped.\n      // NOTE: datetime x-axis won't have any effect with this as we don't know the label length there due to many constraints.\n\n    }, {\n      key: \"additionalPaddingXLabels\",\n      value: function additionalPaddingXLabels(xaxisLabelCoords) {\n        var _this = this;\n\n        var w = this.w;\n\n        if (w.config.xaxis.type === 'category' && w.globals.isBarHorizontal || w.config.xaxis.type === 'numeric' || w.config.xaxis.type === 'datetime') {\n          var rightPad = function rightPad(labels) {\n            if (_this.timescaleLabels) {\n              // for timeline labels, we take the last label and check if it exceeds gridWidth\n              var lastTimescaleLabel = _this.timescaleLabels[_this.timescaleLabels.length - 1];\n              var labelPosition = lastTimescaleLabel.position + labels.width;\n\n              if (labelPosition > w.globals.gridWidth) {\n                w.globals.skipLastTimelinelabel = true;\n              } else {\n                // we have to make it false again in case of zooming/panning\n                w.globals.skipLastTimelinelabel = false;\n              }\n            } else if (w.config.xaxis.type === 'datetime') {\n              if (w.config.grid.padding.right < labels.width) {\n                w.globals.skipLastTimelinelabel = true;\n              }\n            } else if (w.config.xaxis.type !== 'datetime') {\n              if (w.config.grid.padding.right < labels.width) {\n                _this.xPadRight = labels.width / 2 + 1;\n              }\n            }\n          };\n\n          var leftPad = function leftPad(labels) {\n            if (w.config.grid.padding.left < labels.width) {\n              _this.xPadLeft = labels.width / 2 + 1;\n            }\n          };\n\n          var isXNumeric = w.globals.isXNumeric;\n          w.config.yaxis.forEach(function (yaxe, i) {\n            var shouldPad = !yaxe.show || yaxe.floating || w.globals.collapsedSeriesIndices.indexOf(i) !== -1 || isXNumeric || yaxe.opposite && w.globals.isBarHorizontal;\n\n            if (shouldPad) {\n              if (isXNumeric && w.globals.isMultipleYAxis && w.globals.collapsedSeriesIndices.indexOf(i) !== -1 || w.globals.isBarHorizontal && yaxe.opposite) {\n                leftPad(xaxisLabelCoords);\n              }\n\n              if (!w.globals.isBarHorizontal && yaxe.opposite && w.globals.collapsedSeriesIndices.indexOf(i) !== -1 || isXNumeric && !w.globals.isMultipleYAxis) {\n                rightPad(xaxisLabelCoords);\n              }\n            }\n          });\n        }\n      }\n    }, {\n      key: \"titleSubtitleOffset\",\n      value: function titleSubtitleOffset() {\n        var w = this.w;\n        var gl = w.globals;\n        var gridShrinkOffset = this.isSparkline || !w.globals.axisCharts ? 0 : 10;\n\n        if (w.config.title.text !== undefined) {\n          gridShrinkOffset += w.config.title.margin;\n        } else {\n          gridShrinkOffset += this.isSparkline || !w.globals.axisCharts ? 0 : 5;\n        }\n\n        if (w.config.subtitle.text !== undefined) {\n          gridShrinkOffset += w.config.subtitle.margin;\n        } else {\n          gridShrinkOffset += this.isSparkline || !w.globals.axisCharts ? 0 : 5;\n        }\n\n        if (w.config.legend.show && w.config.legend.position === 'bottom' && !w.config.legend.floating && (w.config.series.length > 1 || !w.globals.axisCharts || w.config.legend.showForSingleSeries)) {\n          gridShrinkOffset += 10;\n        }\n\n        var titleCoords = this.getTitleSubtitleCoords('title');\n        var subtitleCoords = this.getTitleSubtitleCoords('subtitle');\n        gl.gridHeight = gl.gridHeight - titleCoords.height - subtitleCoords.height - gridShrinkOffset;\n        gl.translateY = gl.translateY + titleCoords.height + subtitleCoords.height + gridShrinkOffset;\n      }\n    }, {\n      key: \"getTotalYAxisWidth\",\n      value: function getTotalYAxisWidth() {\n        var w = this.w;\n        var yAxisWidth = 0;\n        var padding = 10;\n\n        var isHiddenYAxis = function isHiddenYAxis(index) {\n          return w.globals.ignoreYAxisIndexes.indexOf(index) > -1;\n        };\n\n        w.globals.yLabelsCoords.map(function (yLabelCoord, index) {\n          var floating = w.config.yaxis[index].floating;\n\n          if (yLabelCoord.width > 0 && !floating) {\n            yAxisWidth = yAxisWidth + yLabelCoord.width + padding;\n\n            if (isHiddenYAxis(index)) {\n              yAxisWidth = yAxisWidth - yLabelCoord.width - padding;\n            }\n          } else {\n            yAxisWidth = yAxisWidth + (floating || !w.config.yaxis[index].show ? 0 : 5);\n          }\n        });\n        w.globals.yTitleCoords.map(function (yTitleCoord, index) {\n          var floating = w.config.yaxis[index].floating;\n          padding = parseInt(w.config.yaxis[index].title.style.fontSize);\n\n          if (yTitleCoord.width > 0 && !floating) {\n            yAxisWidth = yAxisWidth + yTitleCoord.width + padding;\n\n            if (isHiddenYAxis(index)) {\n              yAxisWidth = yAxisWidth - yTitleCoord.width - padding;\n            }\n          } else {\n            yAxisWidth = yAxisWidth + (floating || !w.config.yaxis[index].show ? 0 : 5);\n          }\n        });\n        return yAxisWidth;\n      }\n    }, {\n      key: \"getxAxisTimeScaleLabelsCoords\",\n      value: function getxAxisTimeScaleLabelsCoords() {\n        var w = this.w;\n        var rect;\n        this.timescaleLabels = w.globals.timelineLabels.slice();\n\n        if (w.globals.isBarHorizontal && w.config.xaxis.type === 'datetime') {\n          this.timescaleLabels = w.globals.invertedTimelineLabels.slice();\n        }\n\n        var labels = this.timescaleLabels.map(function (label) {\n          return label.value;\n        }); //  get the longest string from the labels array and also apply label formatter to it\n\n        var val = labels.reduce(function (a, b) {\n          // if undefined, maybe user didn't pass the datetime(x) values\n          if (typeof a === 'undefined') {\n            console.error('You have possibly supplied invalid Date format. Please supply a valid JavaScript Date');\n            return 0;\n          } else {\n            return a.length > b.length ? a : b;\n          }\n        }, 0);\n        var graphics = new Graphics(this.ctx);\n        rect = graphics.getTextRects(val, w.config.xaxis.labels.style.fontSize);\n        var totalWidthRotated = rect.width * 1.05 * labels.length;\n\n        if (totalWidthRotated > w.globals.gridWidth && w.config.xaxis.labels.rotate !== 0) {\n          w.globals.overlappingXLabels = true;\n        }\n\n        return rect;\n      }\n      /**\n       * Get X Axis Dimensions\n       * @memberof Dimensions\n       * @return {{width, height}}\n       **/\n\n    }, {\n      key: \"getxAxisLabelsCoords\",\n      value: function getxAxisLabelsCoords() {\n        var w = this.w;\n        var xaxisLabels = w.globals.labels.slice();\n        var rect;\n\n        if (w.globals.timelineLabels.length > 0) {\n          var coords = this.getxAxisTimeScaleLabelsCoords();\n          rect = {\n            width: coords.width,\n            height: coords.height\n          };\n        } else {\n          var lgWidthForSideLegends = w.config.legend.position === 'left' && w.config.legend.position === 'right' && !w.config.legend.floating ? this.lgRect.width : 0; // get the longest string from the labels array and also apply label formatter\n\n          var xlbFormatter = w.globals.xLabelFormatter; // prevent changing xaxisLabels to avoid issues in multi-yaxies - fix #522\n\n          var val = xaxisLabels.reduce(function (a, b) {\n            return a.length > b.length ? a : b;\n          }, 0); // the labels gets changed for bar charts\n\n          if (w.globals.isBarHorizontal) {\n            val = w.globals.yAxisScale[0].result.reduce(function (a, b) {\n              return a.length > b.length ? a : b;\n            }, 0);\n          }\n\n          var xFormat = new Formatters(this.ctx);\n          var timestamp = val;\n          val = xFormat.xLabelFormat(xlbFormatter, val, timestamp);\n          var graphics = new Graphics(this.ctx);\n          var xLabelrect = graphics.getTextRects(val, w.config.xaxis.labels.style.fontSize);\n          rect = {\n            width: xLabelrect.width,\n            height: xLabelrect.height\n          };\n\n          if (rect.width * xaxisLabels.length > w.globals.svgWidth - lgWidthForSideLegends - this.yAxisWidth && w.config.xaxis.labels.rotate !== 0) {\n            if (!w.globals.isBarHorizontal) {\n              w.globals.rotateXLabels = true;\n              xLabelrect = graphics.getTextRects(val, w.config.xaxis.labels.style.fontSize, w.config.xaxis.labels.style.fontFamily, \"rotate(\".concat(w.config.xaxis.labels.rotate, \" 0 0)\"), false);\n              rect.height = xLabelrect.height / 1.66;\n            }\n          } else {\n            w.globals.rotateXLabels = false;\n          }\n        }\n\n        if (!w.config.xaxis.labels.show) {\n          rect = {\n            width: 0,\n            height: 0\n          };\n        }\n\n        return {\n          width: rect.width,\n          height: rect.height\n        };\n      }\n      /**\n       * Get Y Axis Dimensions\n       * @memberof Dimensions\n       * @return {{width, height}}\n       **/\n\n    }, {\n      key: \"getyAxisLabelsCoords\",\n      value: function getyAxisLabelsCoords() {\n        var _this2 = this;\n\n        var w = this.w;\n        var width = 0;\n        var height = 0;\n        var ret = [];\n        var labelPad = 10;\n        w.config.yaxis.map(function (yaxe, index) {\n          if (yaxe.show && yaxe.labels.show && w.globals.yAxisScale[index].result.length) {\n            var lbFormatter = w.globals.yLabelFormatters[index]; // the second parameter -1 is the index of tick which user can use in the formatter\n\n            var val = lbFormatter(w.globals.yAxisScale[index].niceMax, -1); // if user has specified a custom formatter, and the result is null or empty, we need to discard the formatter and take the value as it is.\n\n            if (typeof val === 'undefined' || val.length === 0) {\n              val = w.globals.yAxisScale[index].niceMax;\n            }\n\n            if (w.globals.isBarHorizontal) {\n              labelPad = 0;\n              var barYaxisLabels = w.globals.labels.slice(); //  get the longest string from the labels array and also apply label formatter to it\n\n              val = barYaxisLabels.reduce(function (a, b) {\n                return a.length > b.length ? a : b;\n              }, 0);\n              val = lbFormatter(val, -1);\n            }\n\n            var graphics = new Graphics(_this2.ctx);\n            var rect = graphics.getTextRects(val, yaxe.labels.style.fontSize);\n            ret.push({\n              width: rect.width + labelPad,\n              height: rect.height\n            });\n          } else {\n            ret.push({\n              width: width,\n              height: height\n            });\n          }\n        });\n        return ret;\n      }\n      /**\n       * Get X Axis Title Dimensions\n       * @memberof Dimensions\n       * @return {{width, height}}\n       **/\n\n    }, {\n      key: \"getxAxisTitleCoords\",\n      value: function getxAxisTitleCoords() {\n        var w = this.w;\n        var width = 0;\n        var height = 0;\n\n        if (w.config.xaxis.title.text !== undefined) {\n          var graphics = new Graphics(this.ctx);\n          var rect = graphics.getTextRects(w.config.xaxis.title.text, w.config.xaxis.title.style.fontSize);\n          width = rect.width;\n          height = rect.height;\n        }\n\n        return {\n          width: width,\n          height: height\n        };\n      }\n      /**\n       * Get Y Axis Dimensions\n       * @memberof Dimensions\n       * @return {{width, height}}\n       **/\n\n    }, {\n      key: \"getyAxisTitleCoords\",\n      value: function getyAxisTitleCoords() {\n        var _this3 = this;\n\n        var w = this.w;\n        var ret = [];\n        w.config.yaxis.map(function (yaxe, index) {\n          if (yaxe.show && yaxe.title.text !== undefined) {\n            var graphics = new Graphics(_this3.ctx);\n            var rect = graphics.getTextRects(yaxe.title.text, yaxe.title.style.fontSize, yaxe.title.style.fontFamily, 'rotate(-90 0 0)', false);\n            ret.push({\n              width: rect.width,\n              height: rect.height\n            });\n          } else {\n            ret.push({\n              width: 0,\n              height: 0\n            });\n          }\n        });\n        return ret;\n      }\n      /**\n       * Get Chart Title/Subtitle Dimensions\n       * @memberof Dimensions\n       * @return {{width, height}}\n       **/\n\n    }, {\n      key: \"getTitleSubtitleCoords\",\n      value: function getTitleSubtitleCoords(type) {\n        var w = this.w;\n        var width = 0;\n        var height = 0;\n        var floating = type === 'title' ? w.config.title.floating : w.config.subtitle.floating;\n        var el = w.globals.dom.baseEl.querySelector(\".apexcharts-\".concat(type, \"-text\"));\n\n        if (el !== null && !floating) {\n          var coord = el.getBoundingClientRect();\n          width = coord.width;\n          height = w.globals.axisCharts ? coord.height + 5 : coord.height;\n        }\n\n        return {\n          width: width,\n          height: height\n        };\n      }\n    }, {\n      key: \"getLegendsRect\",\n      value: function getLegendsRect() {\n        var w = this.w;\n        var elLegendWrap = w.globals.dom.baseEl.querySelector('.apexcharts-legend');\n        var lgRect = Object.assign({}, Utils.getBoundingClientRect(elLegendWrap));\n\n        if (elLegendWrap !== null && !w.config.legend.floating && w.config.legend.show) {\n          this.lgRect = {\n            x: lgRect.x,\n            y: lgRect.y,\n            height: lgRect.height,\n            width: lgRect.height === 0 ? 0 : lgRect.width\n          };\n        } else {\n          this.lgRect = {\n            x: 0,\n            y: 0,\n            height: 0,\n            width: 0\n          };\n        }\n\n        return this.lgRect;\n      }\n    }]);\n\n    return Dimensions;\n  }();\n\n  /**\n   * ApexCharts Series Class for interation with the Series of the chart.\n   *\n   * @module Series\n   **/\n\n  var Series =\n  /*#__PURE__*/\n  function () {\n    function Series(ctx) {\n      _classCallCheck(this, Series);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n    }\n\n    _createClass(Series, [{\n      key: \"getAllSeriesEls\",\n      value: function getAllSeriesEls() {\n        return this.w.globals.dom.baseEl.querySelectorAll(\".apexcharts-series\");\n      }\n    }, {\n      key: \"getSeriesByName\",\n      value: function getSeriesByName(seriesName) {\n        return this.w.globals.dom.baseEl.querySelector(\"[seriesName='\".concat(Utils.escapeString(seriesName), \"']\"));\n      }\n    }, {\n      key: \"addCollapsedClassToSeries\",\n      value: function addCollapsedClassToSeries(elSeries, index) {\n        var w = this.w;\n\n        function iterateOnAllCollapsedSeries(series) {\n          for (var cs = 0; cs < series.length; cs++) {\n            if (series[cs].index === index) {\n              elSeries.node.classList.add('apexcharts-series-collapsed');\n            }\n          }\n        }\n\n        iterateOnAllCollapsedSeries(w.globals.collapsedSeries);\n        iterateOnAllCollapsedSeries(w.globals.ancillaryCollapsedSeries);\n      }\n    }, {\n      key: \"resetSeries\",\n      value: function resetSeries() {\n        var shouldUpdateChart = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n        var w = this.w;\n        var series = w.globals.initialSeries.slice();\n        w.config.series = series;\n        w.globals.collapsedSeries = [];\n        w.globals.ancillaryCollapsedSeries = [];\n        w.globals.collapsedSeriesIndices = [];\n        w.globals.ancillaryCollapsedSeriesIndices = [];\n        w.globals.previousPaths = [];\n\n        if (shouldUpdateChart) {\n          this.ctx._updateSeries(series, w.config.chart.animations.dynamicAnimation.enabled);\n        }\n      }\n    }, {\n      key: \"toggleSeriesOnHover\",\n      value: function toggleSeriesOnHover(e, targetElement) {\n        var w = this.w;\n        var allSeriesEls = w.globals.dom.baseEl.querySelectorAll(\".apexcharts-series\");\n\n        if (e.type === 'mousemove') {\n          var seriesCnt = parseInt(targetElement.getAttribute('rel')) - 1;\n          var seriesEl = null;\n\n          if (w.globals.axisCharts || w.config.chart.type === 'radialBar') {\n            if (w.globals.axisCharts) {\n              seriesEl = w.globals.dom.baseEl.querySelector(\".apexcharts-series[data\\\\:realIndex='\".concat(seriesCnt, \"']\"));\n            } else {\n              seriesEl = w.globals.dom.baseEl.querySelector(\".apexcharts-series[rel='\".concat(seriesCnt + 1, \"']\"));\n            }\n          } else {\n            seriesEl = w.globals.dom.baseEl.querySelector(\".apexcharts-series[rel='\".concat(seriesCnt + 1, \"'] path\"));\n          }\n\n          for (var se = 0; se < allSeriesEls.length; se++) {\n            allSeriesEls[se].classList.add('legend-mouseover-inactive');\n          }\n\n          if (seriesEl !== null) {\n            if (!w.globals.axisCharts) {\n              seriesEl.parentNode.classList.remove('legend-mouseover-inactive');\n            }\n\n            seriesEl.classList.remove('legend-mouseover-inactive');\n          }\n        } else if (e.type === 'mouseout') {\n          for (var _se = 0; _se < allSeriesEls.length; _se++) {\n            allSeriesEls[_se].classList.remove('legend-mouseover-inactive');\n          }\n        }\n      }\n    }, {\n      key: \"highlightRangeInSeries\",\n      value: function highlightRangeInSeries(e, targetElement) {\n        var w = this.w;\n        var allHeatMapElements = w.globals.dom.baseEl.querySelectorAll('.apexcharts-heatmap-rect');\n\n        var allActive = function allActive() {\n          for (var i = 0; i < allHeatMapElements.length; i++) {\n            allHeatMapElements[i].classList.remove('legend-mouseover-inactive');\n          }\n        };\n\n        var allInactive = function allInactive() {\n          for (var i = 0; i < allHeatMapElements.length; i++) {\n            allHeatMapElements[i].classList.add('legend-mouseover-inactive');\n          }\n        };\n\n        var selectedActive = function selectedActive(range) {\n          for (var i = 0; i < allHeatMapElements.length; i++) {\n            var val = parseInt(allHeatMapElements[i].getAttribute('val'));\n\n            if (val >= range.from && val <= range.to) {\n              allHeatMapElements[i].classList.remove('legend-mouseover-inactive');\n            }\n          }\n        };\n\n        if (e.type === 'mousemove') {\n          var seriesCnt = parseInt(targetElement.getAttribute('rel')) - 1;\n          allActive();\n          allInactive();\n          var range = w.config.plotOptions.heatmap.colorScale.ranges[seriesCnt];\n          selectedActive(range);\n        } else if (e.type === 'mouseout') {\n          allActive();\n        }\n      }\n    }, {\n      key: \"getActiveSeriesIndex\",\n      value: function getActiveSeriesIndex() {\n        var w = this.w;\n        var activeIndex = 0;\n\n        if (w.globals.series.length > 1) {\n          // active series flag is required to know if user has not deactivated via legend click\n          var firstActiveSeriesIndex = w.globals.series.map(function (series, index) {\n            if (series.length > 0 && w.config.series[index].type !== 'bar' && w.config.series[index].type !== 'column') {\n              return index;\n            } else {\n              return -1;\n            }\n          });\n\n          for (var a = 0; a < firstActiveSeriesIndex.length; a++) {\n            if (firstActiveSeriesIndex[a] !== -1) {\n              activeIndex = firstActiveSeriesIndex[a];\n              break;\n            }\n          }\n        }\n\n        return activeIndex;\n      }\n    }, {\n      key: \"getActiveConfigSeriesIndex\",\n      value: function getActiveConfigSeriesIndex() {\n        var w = this.w;\n        var activeIndex = 0;\n\n        if (w.config.series.length > 1) {\n          // active series flag is required to know if user has not deactivated via legend click\n          var firstActiveSeriesIndex = w.config.series.map(function (series, index) {\n            if (series.data && series.data.length > 0) {\n              return index;\n            } else {\n              return -1;\n            }\n          });\n\n          for (var a = 0; a < firstActiveSeriesIndex.length; a++) {\n            if (firstActiveSeriesIndex[a] !== -1) {\n              activeIndex = firstActiveSeriesIndex[a];\n              break;\n            }\n          }\n        }\n\n        return activeIndex;\n      }\n    }, {\n      key: \"getPreviousPaths\",\n      value: function getPreviousPaths() {\n        var w = this.w;\n        w.globals.previousPaths = [];\n\n        function pushPaths(seriesEls, i, type) {\n          var paths = seriesEls[i].childNodes;\n          var dArr = {\n            type: type,\n            paths: [],\n            realIndex: seriesEls[i].getAttribute('data:realIndex')\n          };\n\n          for (var j = 0; j < paths.length; j++) {\n            if (paths[j].hasAttribute('pathTo')) {\n              var d = paths[j].getAttribute('pathTo');\n              dArr.paths.push({\n                d: d\n              });\n            }\n          }\n\n          w.globals.previousPaths.push(dArr);\n        }\n\n        var linePaths = w.globals.dom.baseEl.querySelectorAll('.apexcharts-line-series .apexcharts-series');\n\n        if (linePaths.length > 0) {\n          for (var p = linePaths.length - 1; p >= 0; p--) {\n            pushPaths(linePaths, p, 'line');\n          }\n        }\n\n        var areapaths = w.globals.dom.baseEl.querySelectorAll('.apexcharts-area-series .apexcharts-series');\n\n        if (areapaths.length > 0) {\n          for (var i = areapaths.length - 1; i >= 0; i--) {\n            pushPaths(areapaths, i, 'area');\n          }\n        }\n\n        var barPaths = w.globals.dom.baseEl.querySelectorAll('.apexcharts-bar-series .apexcharts-series');\n\n        if (barPaths.length > 0) {\n          for (var _p = 0; _p < barPaths.length; _p++) {\n            pushPaths(barPaths, _p, 'bar');\n          }\n        }\n\n        var candlestickPaths = w.globals.dom.baseEl.querySelectorAll('.apexcharts-candlestick-series .apexcharts-series');\n\n        if (candlestickPaths.length > 0) {\n          for (var _p2 = 0; _p2 < candlestickPaths.length; _p2++) {\n            pushPaths(candlestickPaths, _p2, 'candlestick');\n          }\n        }\n\n        var radarPaths = w.globals.dom.baseEl.querySelectorAll('.apexcharts-radar-series .apexcharts-series');\n\n        if (radarPaths.length > 0) {\n          for (var _p3 = 0; _p3 < radarPaths.length; _p3++) {\n            pushPaths(radarPaths, _p3, 'radar');\n          }\n        }\n\n        var bubblepaths = w.globals.dom.baseEl.querySelectorAll('.apexcharts-bubble-series .apexcharts-series');\n\n        if (bubblepaths.length > 0) {\n          for (var s = 0; s < bubblepaths.length; s++) {\n            var seriesEls = w.globals.dom.baseEl.querySelectorAll(\".apexcharts-bubble-series .apexcharts-series[data\\\\:realIndex='\".concat(s, \"'] circle\"));\n            var dArr = [];\n\n            for (var _i = 0; _i < seriesEls.length; _i++) {\n              dArr.push({\n                x: seriesEls[_i].getAttribute('cx'),\n                y: seriesEls[_i].getAttribute('cy'),\n                r: seriesEls[_i].getAttribute('r')\n              });\n            }\n\n            w.globals.previousPaths.push(dArr);\n          }\n        }\n\n        var scatterpaths = w.globals.dom.baseEl.querySelectorAll('.apexcharts-scatter-series .apexcharts-series');\n\n        if (scatterpaths.length > 0) {\n          for (var _s = 0; _s < scatterpaths.length; _s++) {\n            var _seriesEls = w.globals.dom.baseEl.querySelectorAll(\".apexcharts-scatter-series .apexcharts-series[data\\\\:realIndex='\".concat(_s, \"'] circle\"));\n\n            var _dArr = [];\n\n            for (var _i2 = 0; _i2 < _seriesEls.length; _i2++) {\n              _dArr.push({\n                x: _seriesEls[_i2].getAttribute('cx'),\n                y: _seriesEls[_i2].getAttribute('cy'),\n                r: _seriesEls[_i2].getAttribute('r')\n              });\n            }\n\n            w.globals.previousPaths.push(_dArr);\n          }\n        }\n\n        var heatmapColors = w.globals.dom.baseEl.querySelectorAll('.apexcharts-heatmap .apexcharts-series');\n\n        if (heatmapColors.length > 0) {\n          for (var h = 0; h < heatmapColors.length; h++) {\n            var _seriesEls2 = w.globals.dom.baseEl.querySelectorAll(\".apexcharts-heatmap .apexcharts-series[data\\\\:realIndex='\".concat(h, \"'] rect\"));\n\n            var _dArr2 = [];\n\n            for (var _i3 = 0; _i3 < _seriesEls2.length; _i3++) {\n              _dArr2.push({\n                color: _seriesEls2[_i3].getAttribute('color')\n              });\n            }\n\n            w.globals.previousPaths.push(_dArr2);\n          }\n        }\n\n        if (!w.globals.axisCharts) {\n          // for non-axis charts (i.e., circular charts, pathFrom is not usable. We need whole series)\n          w.globals.previousPaths = w.globals.series;\n        }\n      }\n    }, {\n      key: \"handleNoData\",\n      value: function handleNoData() {\n        var w = this.w;\n        var me = this;\n        var noDataOpts = w.config.noData;\n        var graphics = new Graphics(me.ctx);\n        var x = w.globals.svgWidth / 2;\n        var y = w.globals.svgHeight / 2;\n        var textAnchor = 'middle';\n        w.globals.noData = true;\n        w.globals.animationEnded = true;\n\n        if (noDataOpts.align === 'left') {\n          x = 10;\n          textAnchor = 'start';\n        } else if (noDataOpts.align === 'right') {\n          x = w.globals.svgWidth - 10;\n          textAnchor = 'end';\n        }\n\n        if (noDataOpts.verticalAlign === 'top') {\n          y = 50;\n        } else if (noDataOpts.verticalAlign === 'bottom') {\n          y = w.globals.svgHeight - 50;\n        }\n\n        x = x + noDataOpts.offsetX;\n        y = y + parseInt(noDataOpts.style.fontSize) + 2;\n\n        if (noDataOpts.text !== undefined && noDataOpts.text !== '') {\n          var titleText = graphics.drawText({\n            x: x,\n            y: y,\n            text: noDataOpts.text,\n            textAnchor: textAnchor,\n            fontSize: noDataOpts.style.fontSize,\n            fontFamily: noDataOpts.style.fontFamily,\n            foreColor: noDataOpts.style.color,\n            opacity: 1,\n            class: 'apexcharts-text-nodata'\n          });\n          titleText.node.setAttribute('class', 'apexcharts-title-text');\n          w.globals.dom.Paper.add(titleText);\n        }\n      } // When user clicks on legends, the collapsed series is filled with [0,0,0,...,0]\n      // This is because we don't want to alter the series' length as it is used at many places\n\n    }, {\n      key: \"setNullSeriesToZeroValues\",\n      value: function setNullSeriesToZeroValues(series) {\n        var w = this.w;\n\n        for (var sl = 0; sl < series.length; sl++) {\n          if (series[sl].length === 0) {\n            for (var j = 0; j < series[w.globals.maxValsInArrayIndex].length; j++) {\n              series[sl].push(0);\n            }\n          }\n        }\n\n        return series;\n      }\n    }, {\n      key: \"hasAllSeriesEqualX\",\n      value: function hasAllSeriesEqualX() {\n        var equalLen = true;\n        var w = this.w;\n        var filteredSerX = this.filteredSeriesX();\n\n        for (var i = 0; i < filteredSerX.length - 1; i++) {\n          if (filteredSerX[i][0] !== filteredSerX[i + 1][0]) {\n            equalLen = false;\n            break;\n          }\n        }\n\n        w.globals.allSeriesHasEqualX = equalLen;\n        return equalLen;\n      }\n    }, {\n      key: \"filteredSeriesX\",\n      value: function filteredSeriesX() {\n        var w = this.w;\n        var filteredSeriesX = w.globals.seriesX.map(function (ser, index) {\n          if (ser.length > 0) {\n            return ser;\n          } else {\n            return [];\n          }\n        });\n        return filteredSeriesX;\n      }\n    }]);\n\n    return Series;\n  }();\n\n  /**\n   * ApexCharts Legend Class to draw legend.\n   *\n   * @module Legend\n   **/\n\n  var Legend =\n  /*#__PURE__*/\n  function () {\n    function Legend(ctx, opts) {\n      _classCallCheck(this, Legend);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n      this.onLegendClick = this.onLegendClick.bind(this);\n      this.onLegendHovered = this.onLegendHovered.bind(this);\n    }\n\n    _createClass(Legend, [{\n      key: \"init\",\n      value: function init() {\n        var w = this.w;\n        var gl = w.globals;\n        var cnf = w.config;\n        var showLegendAlways = cnf.legend.showForSingleSeries && gl.series.length === 1 || gl.series.length > 1;\n\n        if ((showLegendAlways || !gl.axisCharts) && cnf.legend.show) {\n          while (gl.dom.elLegendWrap.firstChild) {\n            gl.dom.elLegendWrap.removeChild(gl.dom.elLegendWrap.firstChild);\n          }\n\n          this.drawLegends();\n\n          if (!Utils.isIE11()) {\n            this.appendToForeignObject();\n          } else {\n            // IE11 doesn't supports foreignObject, hence append it to <head>\n            document.getElementsByTagName('head')[0].appendChild(this.getLegendStyles());\n          }\n\n          if (cnf.legend.position === 'bottom' || cnf.legend.position === 'top') {\n            this.legendAlignHorizontal();\n          } else if (cnf.legend.position === 'right' || cnf.legend.position === 'left') {\n            this.legendAlignVertical();\n          }\n        }\n      }\n    }, {\n      key: \"appendToForeignObject\",\n      value: function appendToForeignObject() {\n        var gl = this.w.globals;\n        gl.dom.elLegendForeign = document.createElementNS(gl.SVGNS, 'foreignObject');\n        var elForeign = gl.dom.elLegendForeign;\n        elForeign.setAttribute('x', 0);\n        elForeign.setAttribute('y', 0);\n        elForeign.setAttribute('width', gl.svgWidth);\n        elForeign.setAttribute('height', gl.svgHeight);\n        gl.dom.elLegendWrap.setAttribute('xmlns', 'http://www.w3.org/1999/xhtml');\n        elForeign.appendChild(gl.dom.elLegendWrap);\n        elForeign.appendChild(this.getLegendStyles());\n        gl.dom.Paper.node.insertBefore(elForeign, gl.dom.elGraphical.node);\n      }\n    }, {\n      key: \"drawLegends\",\n      value: function drawLegends() {\n        var self = this;\n        var w = this.w;\n        var fontFamily = w.config.legend.fontFamily;\n        var legendNames = w.globals.seriesNames;\n        var fillcolor = w.globals.colors.slice();\n\n        if (w.config.chart.type === 'heatmap') {\n          var ranges = w.config.plotOptions.heatmap.colorScale.ranges;\n          legendNames = ranges.map(function (colorScale) {\n            return colorScale.name ? colorScale.name : colorScale.from + ' - ' + colorScale.to;\n          });\n          fillcolor = ranges.map(function (color) {\n            return color.color;\n          });\n        }\n\n        var legendFormatter = w.globals.legendFormatter;\n        var isLegendInversed = w.config.legend.inverseOrder;\n\n        for (var i = isLegendInversed ? legendNames.length - 1 : 0; isLegendInversed ? i >= 0 : i <= legendNames.length - 1; isLegendInversed ? i-- : i++) {\n          var text = legendFormatter(legendNames[i], {\n            seriesIndex: i,\n            w: w\n          });\n          var collapsedSeries = false;\n          var ancillaryCollapsedSeries = false;\n\n          if (w.globals.collapsedSeries.length > 0) {\n            for (var c = 0; c < w.globals.collapsedSeries.length; c++) {\n              if (w.globals.collapsedSeries[c].index === i) {\n                collapsedSeries = true;\n              }\n            }\n          }\n\n          if (w.globals.ancillaryCollapsedSeriesIndices.length > 0) {\n            for (var _c = 0; _c < w.globals.ancillaryCollapsedSeriesIndices.length; _c++) {\n              if (w.globals.ancillaryCollapsedSeriesIndices[_c] === i) {\n                ancillaryCollapsedSeries = true;\n              }\n            }\n          }\n\n          var elMarker = document.createElement('span');\n          elMarker.classList.add('apexcharts-legend-marker');\n          var mOffsetX = w.config.legend.markers.offsetX;\n          var mOffsetY = w.config.legend.markers.offsetY;\n          var mHeight = w.config.legend.markers.height;\n          var mWidth = w.config.legend.markers.width;\n          var mBorderWidth = w.config.legend.markers.strokeWidth;\n          var mBorderColor = w.config.legend.markers.strokeColor;\n          var mBorderRadius = w.config.legend.markers.radius;\n          var mStyle = elMarker.style;\n          mStyle.background = fillcolor[i];\n          mStyle.color = fillcolor[i];\n          mStyle.height = Array.isArray(mHeight) ? parseFloat(mHeight[i]) + 'px' : parseFloat(mHeight) + 'px';\n          mStyle.width = Array.isArray(mWidth) ? parseFloat(mWidth[i]) + 'px' : parseFloat(mWidth) + 'px';\n          mStyle.left = Array.isArray(mOffsetX) ? mOffsetX[i] : mOffsetX;\n          mStyle.top = Array.isArray(mOffsetY) ? mOffsetY[i] : mOffsetY;\n          mStyle.borderWidth = Array.isArray(mBorderWidth) ? mBorderWidth[i] : mBorderWidth;\n          mStyle.borderColor = Array.isArray(mBorderColor) ? mBorderColor[i] : mBorderColor;\n          mStyle.borderRadius = Array.isArray(mBorderRadius) ? parseFloat(mBorderRadius[i]) + 'px' : parseFloat(mBorderRadius) + 'px';\n\n          if (w.config.legend.markers.customHTML) {\n            if (Array.isArray(w.config.legend.markers.customHTML)) {\n              elMarker.innerHTML = w.config.legend.markers.customHTML[i]();\n            } else {\n              elMarker.innerHTML = w.config.legend.markers.customHTML();\n            }\n          }\n\n          Graphics.setAttrs(elMarker, {\n            rel: i + 1,\n            'data:collapsed': collapsedSeries || ancillaryCollapsedSeries\n          });\n\n          if (collapsedSeries || ancillaryCollapsedSeries) {\n            elMarker.classList.add('inactive-legend');\n          }\n\n          var elLegend = document.createElement('div');\n          var elLegendText = document.createElement('span');\n          elLegendText.classList.add('apexcharts-legend-text');\n          elLegendText.innerHTML = text;\n          var textColor = w.config.legend.labels.useSeriesColors ? w.globals.colors[i] : w.config.legend.labels.colors;\n\n          if (!textColor) {\n            textColor = w.config.chart.foreColor;\n          }\n\n          elLegendText.style.color = textColor;\n          elLegendText.style.fontSize = parseFloat(w.config.legend.fontSize) + 'px';\n          elLegendText.style.fontFamily = fontFamily || w.config.chart.fontFamily;\n          Graphics.setAttrs(elLegendText, {\n            rel: i + 1,\n            i: i,\n            'data:default-text': text,\n            'data:collapsed': collapsedSeries || ancillaryCollapsedSeries\n          });\n          elLegend.appendChild(elMarker);\n          elLegend.appendChild(elLegendText);\n          var coreUtils = new CoreUtils(this.ctx);\n\n          if (!w.config.legend.showForZeroSeries) {\n            var total = coreUtils.getSeriesTotalByIndex(i);\n\n            if (total === 0 && coreUtils.seriesHaveSameValues(i) && !coreUtils.isSeriesNull(i) && w.globals.collapsedSeriesIndices.indexOf(i) === -1 && w.globals.ancillaryCollapsedSeriesIndices.indexOf(i) === -1) {\n              elLegend.classList.add('apexcharts-hidden-zero-series');\n            }\n          }\n\n          if (!w.config.legend.showForNullSeries) {\n            if (coreUtils.isSeriesNull(i) && w.globals.collapsedSeriesIndices.indexOf(i) === -1 && w.globals.ancillaryCollapsedSeriesIndices.indexOf(i) === -1) {\n              elLegend.classList.add('apexcharts-hidden-null-series');\n            }\n          }\n\n          w.globals.dom.elLegendWrap.appendChild(elLegend);\n          w.globals.dom.elLegendWrap.classList.add(w.config.legend.horizontalAlign); // w.globals.dom.elLegendWrap.classList.add(w.config.legend.verticalAlign)\n\n          w.globals.dom.elLegendWrap.classList.add('position-' + w.config.legend.position);\n          elLegend.classList.add('apexcharts-legend-series');\n          elLegend.style.margin = \"\".concat(w.config.legend.itemMargin.horizontal, \"px \").concat(w.config.legend.itemMargin.vertical, \"px\");\n          w.globals.dom.elLegendWrap.style.width = w.config.legend.width ? w.config.legend.width + 'px' : '';\n          w.globals.dom.elLegendWrap.style.height = w.config.legend.height ? w.config.legend.height + 'px' : '';\n          Graphics.setAttrs(elLegend, {\n            rel: i + 1,\n            'data:collapsed': collapsedSeries || ancillaryCollapsedSeries\n          });\n\n          if (collapsedSeries || ancillaryCollapsedSeries) {\n            elLegend.classList.add('inactive-legend');\n          }\n\n          if (!w.config.legend.onItemClick.toggleDataSeries) {\n            elLegend.classList.add('no-click');\n          }\n        } // for now - just prevent click on heatmap legend - and allow hover only\n\n\n        var clickAllowed = w.config.chart.type !== 'heatmap';\n\n        if (clickAllowed && w.config.legend.onItemClick.toggleDataSeries) {\n          w.globals.dom.elWrap.addEventListener('click', self.onLegendClick, true);\n        }\n\n        if (w.config.legend.onItemHover.highlightDataSeries) {\n          w.globals.dom.elWrap.addEventListener('mousemove', self.onLegendHovered, true);\n          w.globals.dom.elWrap.addEventListener('mouseout', self.onLegendHovered, true);\n        }\n      }\n    }, {\n      key: \"getLegendBBox\",\n      value: function getLegendBBox() {\n        var w = this.w;\n        var currLegendsWrap = w.globals.dom.baseEl.querySelector('.apexcharts-legend');\n        var currLegendsWrapRect = currLegendsWrap.getBoundingClientRect();\n        var currLegendsWrapWidth = currLegendsWrapRect.width;\n        var currLegendsWrapHeight = currLegendsWrapRect.height;\n        return {\n          clwh: currLegendsWrapHeight,\n          clww: currLegendsWrapWidth\n        };\n      }\n    }, {\n      key: \"setLegendWrapXY\",\n      value: function setLegendWrapXY(offsetX, offsetY) {\n        var w = this.w;\n        var elLegendWrap = w.globals.dom.baseEl.querySelector('.apexcharts-legend');\n        var legendRect = elLegendWrap.getBoundingClientRect();\n        var x = 0;\n        var y = 0;\n\n        if (w.config.legend.position === 'bottom') {\n          y = y + (w.globals.svgHeight - legendRect.height / 2);\n        } else if (w.config.legend.position === 'top') {\n          var dim = new Dimensions(this.ctx);\n          var titleH = dim.getTitleSubtitleCoords('title').height;\n          var subtitleH = dim.getTitleSubtitleCoords('subtitle').height;\n          y = y + (titleH > 0 ? titleH - 10 : 0) + (subtitleH > 0 ? subtitleH - 10 : 0);\n        }\n\n        elLegendWrap.style.position = 'absolute';\n        x = x + offsetX + w.config.legend.offsetX;\n        y = y + offsetY + w.config.legend.offsetY;\n        elLegendWrap.style.left = x + 'px';\n        elLegendWrap.style.top = y + 'px';\n\n        if (w.config.legend.position === 'bottom') {\n          elLegendWrap.style.top = 'auto';\n          elLegendWrap.style.bottom = 10 + w.config.legend.offsetY + 'px';\n        } else if (w.config.legend.position === 'right') {\n          elLegendWrap.style.left = 'auto';\n          elLegendWrap.style.right = 25 + w.config.legend.offsetX + 'px';\n        }\n\n        if (elLegendWrap.style.width) {\n          elLegendWrap.style.width = parseInt(w.config.legend.width) + 'px';\n        }\n\n        if (elLegendWrap.style.height) {\n          elLegendWrap.style.height = parseInt(w.config.legend.height) + 'px';\n        }\n      }\n    }, {\n      key: \"legendAlignHorizontal\",\n      value: function legendAlignHorizontal() {\n        var w = this.w;\n        var elLegendWrap = w.globals.dom.baseEl.querySelector('.apexcharts-legend');\n        elLegendWrap.style.right = 0;\n        var lRect = this.getLegendBBox();\n        var dimensions = new Dimensions(this.ctx);\n        var titleRect = dimensions.getTitleSubtitleCoords('title');\n        var subtitleRect = dimensions.getTitleSubtitleCoords('subtitle');\n        var offsetX = 20;\n        var offsetY = 0; // the whole legend box is set to bottom\n\n        if (w.config.legend.position === 'bottom') {\n          offsetY = -lRect.clwh / 1.8;\n        } else if (w.config.legend.position === 'top') {\n          offsetY = titleRect.height + subtitleRect.height + w.config.title.margin + w.config.subtitle.margin - 15;\n        }\n\n        this.setLegendWrapXY(offsetX, offsetY);\n      }\n    }, {\n      key: \"legendAlignVertical\",\n      value: function legendAlignVertical() {\n        var w = this.w;\n        var lRect = this.getLegendBBox();\n        var offsetY = 20;\n        var offsetX = 0;\n\n        if (w.config.legend.position === 'left') {\n          offsetX = 20;\n        }\n\n        if (w.config.legend.position === 'right') {\n          offsetX = w.globals.svgWidth - lRect.clww - 10;\n        }\n\n        this.setLegendWrapXY(offsetX, offsetY);\n      }\n    }, {\n      key: \"onLegendHovered\",\n      value: function onLegendHovered(e) {\n        var w = this.w;\n        var hoverOverLegend = e.target.classList.contains('apexcharts-legend-text') || e.target.classList.contains('apexcharts-legend-marker');\n\n        if (w.config.chart.type !== 'heatmap') {\n          if (!e.target.classList.contains('inactive-legend') && hoverOverLegend) {\n            var series = new Series(this.ctx);\n            series.toggleSeriesOnHover(e, e.target);\n          }\n        } else {\n          // for heatmap handling\n          if (hoverOverLegend) {\n            var seriesCnt = parseInt(e.target.getAttribute('rel')) - 1;\n            this.ctx.fireEvent('legendHover', [this.ctx, seriesCnt, this.w]);\n\n            var _series = new Series(this.ctx);\n\n            _series.highlightRangeInSeries(e, e.target);\n          }\n        }\n      }\n    }, {\n      key: \"onLegendClick\",\n      value: function onLegendClick(e) {\n        if (e.target.classList.contains('apexcharts-legend-text') || e.target.classList.contains('apexcharts-legend-marker')) {\n          var seriesCnt = parseInt(e.target.getAttribute('rel')) - 1;\n          var isHidden = e.target.getAttribute('data:collapsed') === 'true';\n          var legendClick = this.w.config.chart.events.legendClick;\n\n          if (typeof legendClick === 'function') {\n            legendClick(this.ctx, seriesCnt, this.w);\n          }\n\n          this.ctx.fireEvent('legendClick', [this.ctx, seriesCnt, this.w]);\n          var markerClick = this.w.config.legend.markers.onClick;\n\n          if (typeof markerClick === 'function' && e.target.classList.contains('apexcharts-legend-marker')) {\n            markerClick(this.ctx, seriesCnt, this.w);\n            this.ctx.fireEvent('legendMarkerClick', [this.ctx, seriesCnt, this.w]);\n          }\n\n          this.toggleDataSeries(seriesCnt, isHidden);\n        }\n      }\n    }, {\n      key: \"getLegendStyles\",\n      value: function getLegendStyles() {\n        var stylesheet = document.createElement('style');\n        stylesheet.setAttribute('type', 'text/css');\n        var text = \"\\n    \\n      .apexcharts-legend {\\n        display: flex;\\n        overflow: auto;\\n        padding: 0 10px;\\n      }\\n\\n      .apexcharts-legend.position-bottom, .apexcharts-legend.position-top {\\n        flex-wrap: wrap\\n      }\\n      .apexcharts-legend.position-right, .apexcharts-legend.position-left {\\n        flex-direction: column;\\n        bottom: 0;\\n      }\\n\\n      .apexcharts-legend.position-bottom.left, .apexcharts-legend.position-top.left, .apexcharts-legend.position-right, .apexcharts-legend.position-left {\\n        justify-content: flex-start;\\n      }\\n\\n      .apexcharts-legend.position-bottom.center, .apexcharts-legend.position-top.center {\\n        justify-content: center;  \\n      }\\n\\n      .apexcharts-legend.position-bottom.right, .apexcharts-legend.position-top.right {\\n        justify-content: flex-end;\\n      }\\n\\n      .apexcharts-legend-series {\\n        cursor: pointer;\\n        line-height: normal;\\n      }\\n\\n      .apexcharts-legend.position-bottom .apexcharts-legend-series, .apexcharts-legend.position-top .apexcharts-legend-series{\\n        display: flex;\\n        align-items: center;\\n      }\\n\\n      .apexcharts-legend-text {\\n        position: relative;\\n        font-size: 14px;\\n      }\\n\\n      .apexcharts-legend-text *, .apexcharts-legend-marker * {\\n        pointer-events: none;\\n      }\\n\\n      .apexcharts-legend-marker {\\n        position: relative;\\n        display: inline-block;\\n        cursor: pointer;\\n        margin-right: 3px;\\n      }\\n      \\n      .apexcharts-legend.right .apexcharts-legend-series, .apexcharts-legend.left .apexcharts-legend-series{\\n        display: inline-block;\\n      }\\n\\n      .apexcharts-legend-series.no-click {\\n        cursor: auto;\\n      }\\n\\n      .apexcharts-legend .apexcharts-hidden-zero-series, .apexcharts-legend .apexcharts-hidden-null-series {\\n        display: none !important;\\n      }\\n\\n      .inactive-legend {\\n        opacity: 0.45;\\n      }\";\n        var rules = document.createTextNode(text);\n        stylesheet.appendChild(rules);\n        return stylesheet;\n      }\n    }, {\n      key: \"toggleDataSeries\",\n      value: function toggleDataSeries(seriesCnt, isHidden) {\n        var w = this.w;\n\n        if (w.globals.axisCharts || w.config.chart.type === 'radialBar') {\n          w.globals.resized = true; // we don't want initial animations again\n\n          var seriesEl = null;\n          var realIndex = null; // yes, make it null. 1 series will rise at a time\n\n          w.globals.risingSeries = [];\n\n          if (w.globals.axisCharts) {\n            seriesEl = w.globals.dom.baseEl.querySelector(\".apexcharts-series[data\\\\:realIndex='\".concat(seriesCnt, \"']\"));\n            realIndex = parseInt(seriesEl.getAttribute('data:realIndex'));\n          } else {\n            seriesEl = w.globals.dom.baseEl.querySelector(\".apexcharts-series[rel='\".concat(seriesCnt + 1, \"']\"));\n            realIndex = parseInt(seriesEl.getAttribute('rel')) - 1;\n          }\n\n          if (isHidden) {\n            this.riseCollapsedSeries(w.globals.collapsedSeries, w.globals.collapsedSeriesIndices, realIndex);\n            this.riseCollapsedSeries(w.globals.ancillaryCollapsedSeries, w.globals.ancillaryCollapsedSeriesIndices, realIndex);\n          } else {\n            if (w.globals.axisCharts) {\n              var shouldNotHideYAxis = false;\n\n              if (w.config.yaxis[realIndex] && w.config.yaxis[realIndex].show && w.config.yaxis[realIndex].showAlways) {\n                shouldNotHideYAxis = true;\n\n                if (w.globals.ancillaryCollapsedSeriesIndices.indexOf(realIndex) < 0) {\n                  w.globals.ancillaryCollapsedSeries.push({\n                    index: realIndex,\n                    data: w.config.series[realIndex].data.slice(),\n                    type: seriesEl.parentNode.className.baseVal.split('-')[1]\n                  });\n                  w.globals.ancillaryCollapsedSeriesIndices.push(realIndex);\n                }\n              }\n\n              if (!shouldNotHideYAxis) {\n                w.globals.collapsedSeries.push({\n                  index: realIndex,\n                  data: w.config.series[realIndex].data.slice(),\n                  type: seriesEl.parentNode.className.baseVal.split('-')[1]\n                });\n                w.globals.collapsedSeriesIndices.push(realIndex);\n                var removeIndexOfRising = w.globals.risingSeries.indexOf(realIndex);\n                w.globals.risingSeries.splice(removeIndexOfRising, 1);\n              } // TODO: AVOID mutating the user's config object below\n\n\n              w.config.series[realIndex].data = [];\n            } else {\n              w.globals.collapsedSeries.push({\n                index: realIndex,\n                data: w.config.series[realIndex]\n              });\n              w.globals.collapsedSeriesIndices.push(realIndex);\n              w.config.series[realIndex] = 0;\n            }\n\n            var seriesChildren = seriesEl.childNodes;\n\n            for (var sc = 0; sc < seriesChildren.length; sc++) {\n              if (seriesChildren[sc].classList.contains('apexcharts-series-markers-wrap')) {\n                if (seriesChildren[sc].classList.contains('apexcharts-hide')) {\n                  seriesChildren[sc].classList.remove('apexcharts-hide');\n                } else {\n                  seriesChildren[sc].classList.add('apexcharts-hide');\n                }\n              }\n            }\n\n            w.globals.allSeriesCollapsed = w.globals.collapsedSeries.length === w.globals.series.length;\n\n            this.ctx._updateSeries(w.config.series, w.config.chart.animations.dynamicAnimation.enabled);\n          }\n        } else {\n          // for non-axis charts i.e pie / donuts\n          var _seriesEl = w.globals.dom.Paper.select(\" .apexcharts-series[rel='\".concat(seriesCnt + 1, \"'] path\"));\n\n          var type = w.config.chart.type;\n\n          if (type === 'pie' || type === 'donut') {\n            var dataLabels = w.config.plotOptions.pie.donut.labels;\n            var graphics = new Graphics(this.ctx);\n            var pie = new Pie(this.ctx);\n            graphics.pathMouseDown(_seriesEl.members[0], null);\n            pie.printDataLabelsInner(_seriesEl.members[0].node, dataLabels);\n          }\n\n          _seriesEl.fire('click');\n        }\n      }\n    }, {\n      key: \"riseCollapsedSeries\",\n      value: function riseCollapsedSeries(series, seriesIndices, realIndex) {\n        var w = this.w;\n\n        if (series.length > 0) {\n          for (var c = 0; c < series.length; c++) {\n            if (series[c].index === realIndex) {\n              if (w.globals.axisCharts) {\n                w.config.series[realIndex].data = series[c].data.slice();\n                series.splice(c, 1);\n                seriesIndices.splice(c, 1);\n                w.globals.risingSeries.push(realIndex);\n              } else {\n                w.config.series[realIndex] = series[c].data;\n                series.splice(c, 1);\n                seriesIndices.splice(c, 1);\n                w.globals.risingSeries.push(realIndex);\n              }\n\n              this.ctx._updateSeries(w.config.series, w.config.chart.animations.dynamicAnimation.enabled);\n            }\n          }\n        }\n      }\n    }]);\n\n    return Legend;\n  }();\n\n  /**\n   * ApexCharts Line Class responsible for drawing Line / Area Charts.\n   * This class is also responsible for generating values for Bubble/Scatter charts, so need to rename it to Axis Charts to avoid confusions\n   * @module Line\n   **/\n\n  var Line =\n  /*#__PURE__*/\n  function () {\n    function Line(ctx, xyRatios, isPointsChart) {\n      _classCallCheck(this, Line);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n      this.xyRatios = xyRatios;\n      this.pointsChart = !(this.w.config.chart.type !== 'bubble' && this.w.config.chart.type !== 'scatter') || isPointsChart;\n      this.scatter = new Scatter(this.ctx);\n      this.noNegatives = this.w.globals.minX === Number.MAX_VALUE;\n      this.yaxisIndex = 0;\n    }\n\n    _createClass(Line, [{\n      key: \"draw\",\n      value: function draw(series, ptype, seriesIndex) {\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var fill = new Fill(this.ctx);\n        var type = w.globals.comboCharts ? ptype : w.config.chart.type;\n        var ret = graphics.group({\n          class: \"apexcharts-\".concat(type, \"-series apexcharts-plot-series\")\n        });\n        var coreUtils = new CoreUtils(this.ctx, w);\n        series = coreUtils.getLogSeries(series);\n        var yRatio = this.xyRatios.yRatio;\n        yRatio = coreUtils.getLogYRatios(yRatio);\n        var zRatio = this.xyRatios.zRatio;\n        var xRatio = this.xyRatios.xRatio;\n        var baseLineY = this.xyRatios.baseLineY; // push all series in an array, so we can draw in reverse order (for stacked charts)\n\n        var allSeries = [];\n        var prevSeriesY = [];\n        var categoryAxisCorrection = 0;\n\n        for (var i = 0; i < series.length; i++) {\n          // width divided into equal parts\n          if (type === 'line' && (w.config.fill.type === 'gradient' || w.config.fill.type[i] === 'gradient')) {\n            // a small adjustment to allow gradient line to draw correctly for all same values\n\n            /* #fix https://github.com/apexcharts/apexcharts.js/issues/358 */\n            if (coreUtils.seriesHaveSameValues(i)) {\n              var gSeries = series[i].slice();\n              gSeries[gSeries.length - 1] = gSeries[gSeries.length - 1] + 0.000001;\n              series[i] = gSeries;\n            }\n          }\n\n          var xDivision = w.globals.gridWidth / w.globals.dataPoints;\n          var realIndex = w.globals.comboCharts ? seriesIndex[i] : i;\n\n          if (yRatio.length > 1) {\n            this.yaxisIndex = realIndex;\n          }\n\n          this.isReversed = w.config.yaxis[this.yaxisIndex] && w.config.yaxis[this.yaxisIndex].reversed;\n          var yArrj = []; // hold y values of current iterating series\n\n          var xArrj = []; // hold x values of current iterating series\n          // zeroY is the 0 value in y series which can be used in negative charts\n\n          var zeroY = w.globals.gridHeight - baseLineY[this.yaxisIndex] - (this.isReversed ? w.globals.gridHeight : 0) + (this.isReversed ? baseLineY[this.yaxisIndex] * 2 : 0);\n          var areaBottomY = zeroY;\n\n          if (zeroY > w.globals.gridHeight) {\n            areaBottomY = w.globals.gridHeight;\n          }\n\n          categoryAxisCorrection = xDivision / 2;\n          var x = w.globals.padHorizontal + categoryAxisCorrection;\n          var y = 1;\n\n          if (w.globals.isXNumeric && w.globals.seriesX.length > 0) {\n            x = (w.globals.seriesX[realIndex][0] - w.globals.minX) / xRatio;\n          }\n\n          xArrj.push(x);\n          var linePath = void 0,\n              areaPath = void 0,\n              pathFromLine = void 0,\n              pathFromArea = void 0;\n          var linePaths = [];\n          var areaPaths = []; // el to which series will be drawn\n\n          var elSeries = graphics.group({\n            class: \"apexcharts-series\",\n            seriesName: Utils.escapeString(w.globals.seriesNames[realIndex])\n          }); // points\n\n          var elPointsMain = graphics.group({\n            class: 'apexcharts-series-markers-wrap'\n          }); // eldatalabels\n\n          var elDataLabelsWrap = graphics.group({\n            class: 'apexcharts-datalabels'\n          });\n          this.ctx.series.addCollapsedClassToSeries(elSeries, realIndex);\n          var longestSeries = series[i].length === w.globals.dataPoints;\n          elSeries.attr({\n            'data:longestSeries': longestSeries,\n            rel: i + 1,\n            'data:realIndex': realIndex\n          });\n          this.appendPathFrom = true;\n          var pX = x;\n          var pY = void 0;\n          var prevX = pX;\n          var prevY = zeroY; // w.globals.svgHeight;\n\n          var lineYPosition = 0; // the first value in the current series is not null or undefined\n\n          var firstPrevY = this.determineFirstPrevY({\n            i: i,\n            series: series,\n            yRatio: yRatio[this.yaxisIndex],\n            zeroY: zeroY,\n            prevY: prevY,\n            prevSeriesY: prevSeriesY,\n            lineYPosition: lineYPosition\n          });\n          prevY = firstPrevY.prevY;\n          yArrj.push(prevY);\n          pY = prevY;\n\n          if (series[i][0] === null) {\n            // when the first value itself is null, we need to move the pointer to a location where a null value is not found\n            for (var s = 0; s < series[i].length; s++) {\n              if (series[i][s] !== null) {\n                prevX = xDivision * s;\n                prevY = zeroY - series[i][s] / yRatio[this.yaxisIndex];\n                linePath = graphics.move(prevX, prevY);\n                areaPath = graphics.move(prevX, areaBottomY);\n                break;\n              }\n            }\n          } else {\n            linePath = graphics.move(prevX, prevY);\n            areaPath = graphics.move(prevX, areaBottomY) + graphics.line(prevX, prevY);\n          }\n\n          pathFromLine = graphics.move(-1, zeroY) + graphics.line(-1, zeroY);\n          pathFromArea = graphics.move(-1, zeroY) + graphics.line(-1, zeroY);\n\n          if (w.globals.previousPaths.length > 0) {\n            var pathFrom = this.checkPreviousPaths({\n              pathFromLine: pathFromLine,\n              pathFromArea: pathFromArea,\n              realIndex: realIndex\n            });\n            pathFromLine = pathFrom.pathFromLine;\n            pathFromArea = pathFrom.pathFromArea;\n          }\n\n          var iterations = w.globals.dataPoints > 1 ? w.globals.dataPoints - 1 : w.globals.dataPoints;\n\n          for (var j = 0; j < iterations; j++) {\n            if (w.globals.isXNumeric) {\n              var sX = w.globals.seriesX[realIndex][j + 1];\n\n              if (typeof w.globals.seriesX[realIndex][j + 1] === 'undefined') {\n                /* fix #374 */\n                sX = w.globals.seriesX[realIndex][iterations - 1];\n              }\n\n              x = (sX - w.globals.minX) / xRatio;\n            } else {\n              x = x + xDivision;\n            }\n\n            var minY = Utils.isNumber(w.globals.minYArr[realIndex]) ? w.globals.minYArr[realIndex] : w.globals.minY;\n\n            if (w.config.chart.stacked) {\n              if (i > 0 && w.globals.collapsedSeries.length < w.config.series.length - 1) {\n                lineYPosition = prevSeriesY[i - 1][j + 1];\n              } else {\n                // the first series will not have prevY values\n                lineYPosition = zeroY;\n              }\n\n              if (typeof series[i][j + 1] === 'undefined' || series[i][j + 1] === null) {\n                y = lineYPosition - minY / yRatio[this.yaxisIndex] + (this.isReversed ? minY / yRatio[this.yaxisIndex] : 0) * 2;\n              } else {\n                y = lineYPosition - series[i][j + 1] / yRatio[this.yaxisIndex] + (this.isReversed ? series[i][j + 1] / yRatio[this.yaxisIndex] : 0) * 2;\n              }\n            } else {\n              if (typeof series[i][j + 1] === 'undefined' || series[i][j + 1] === null) {\n                y = zeroY - minY / yRatio[this.yaxisIndex] + (this.isReversed ? minY / yRatio[this.yaxisIndex] : 0) * 2;\n              } else {\n                y = zeroY - series[i][j + 1] / yRatio[this.yaxisIndex] + (this.isReversed ? series[i][j + 1] / yRatio[this.yaxisIndex] : 0) * 2;\n              }\n            } // push current X\n\n\n            xArrj.push(x); // push current Y that will be used as next series's bottom position\n\n            yArrj.push(y);\n            var calculatedPaths = this.createPaths({\n              series: series,\n              i: i,\n              j: j,\n              x: x,\n              y: y,\n              xDivision: xDivision,\n              pX: pX,\n              pY: pY,\n              areaBottomY: areaBottomY,\n              linePath: linePath,\n              areaPath: areaPath,\n              linePaths: linePaths,\n              areaPaths: areaPaths,\n              seriesIndex: seriesIndex\n            });\n            areaPaths = calculatedPaths.areaPaths;\n            linePaths = calculatedPaths.linePaths;\n            pX = calculatedPaths.pX;\n            pY = calculatedPaths.pY;\n            areaPath = calculatedPaths.areaPath;\n            linePath = calculatedPaths.linePath;\n\n            if (this.appendPathFrom) {\n              pathFromLine = pathFromLine + graphics.line(x, zeroY);\n              pathFromArea = pathFromArea + graphics.line(x, zeroY);\n            }\n\n            var pointsPos = this.calculatePoints({\n              series: series,\n              x: x,\n              y: y,\n              realIndex: realIndex,\n              i: i,\n              j: j,\n              prevY: prevY,\n              categoryAxisCorrection: categoryAxisCorrection,\n              xRatio: xRatio\n            });\n\n            if (!this.pointsChart) {\n              var markers = new Markers(this.ctx);\n\n              if (w.globals.dataPoints > 1) {\n                elPointsMain.node.classList.add('hidden');\n              }\n\n              var elPointsWrap = markers.plotChartMarkers(pointsPos, realIndex, j + 1);\n\n              if (elPointsWrap !== null) {\n                elPointsMain.add(elPointsWrap);\n              }\n            } else {\n              // scatter / bubble chart points creation\n              this.scatter.draw(elSeries, j, {\n                realIndex: realIndex,\n                pointsPos: pointsPos,\n                zRatio: zRatio,\n                elParent: elPointsMain\n              });\n            }\n\n            var dataLabelAlign = !series[i][j + 1] || series[i][j + 1] > series[i][j] ? 'top' : 'bottom';\n            var dataLabels = new DataLabels(this.ctx);\n            var drawnLabels = dataLabels.drawDataLabel(pointsPos, realIndex, j + 1, null, dataLabelAlign);\n\n            if (drawnLabels !== null) {\n              elDataLabelsWrap.add(drawnLabels);\n            }\n          } // push all current y values array to main PrevY Array\n\n\n          prevSeriesY.push(yArrj); // push all x val arrays into main xArr\n\n          w.globals.seriesXvalues[realIndex] = xArrj;\n          w.globals.seriesYvalues[realIndex] = yArrj; // these elements will be shown after area path animation completes\n\n          if (!this.pointsChart) {\n            w.globals.delayedElements.push({\n              el: elPointsMain.node,\n              index: realIndex\n            });\n          }\n\n          var defaultRenderedPathOptions = {\n            i: i,\n            realIndex: realIndex,\n            animationDelay: i,\n            initialSpeed: w.config.chart.animations.speed,\n            dataChangeSpeed: w.config.chart.animations.dynamicAnimation.speed,\n            className: \"apexcharts-\".concat(type)\n          };\n\n          if (type === 'area') {\n            var pathFill = fill.fillPath({\n              seriesNumber: realIndex\n            });\n\n            for (var p = 0; p < areaPaths.length; p++) {\n              var renderedPath = graphics.renderPaths(_objectSpread({}, defaultRenderedPathOptions, {\n                pathFrom: pathFromArea,\n                pathTo: areaPaths[p],\n                stroke: 'none',\n                strokeWidth: 0,\n                strokeLineCap: null,\n                fill: pathFill\n              }));\n              elSeries.add(renderedPath);\n            }\n          }\n\n          if (w.config.stroke.show && !this.pointsChart) {\n            var lineFill = null;\n\n            if (type === 'line') {\n              // fillable lines only for lineChart\n              lineFill = fill.fillPath({\n                seriesNumber: realIndex,\n                i: i\n              });\n            } else {\n              lineFill = w.globals.stroke.colors[realIndex];\n            }\n\n            for (var _p = 0; _p < linePaths.length; _p++) {\n              var _renderedPath = graphics.renderPaths(_objectSpread({}, defaultRenderedPathOptions, {\n                pathFrom: pathFromLine,\n                pathTo: linePaths[_p],\n                stroke: lineFill,\n                strokeWidth: Array.isArray(w.config.stroke.width) ? w.config.stroke.width[realIndex] : w.config.stroke.width,\n                strokeLineCap: w.config.stroke.lineCap,\n                fill: 'none'\n              }));\n\n              elSeries.add(_renderedPath);\n            }\n          }\n\n          elSeries.add(elPointsMain);\n          elSeries.add(elDataLabelsWrap);\n          allSeries.push(elSeries);\n        }\n\n        for (var _s = allSeries.length; _s > 0; _s--) {\n          ret.add(allSeries[_s - 1]);\n        }\n\n        return ret;\n      }\n    }, {\n      key: \"createPaths\",\n      value: function createPaths(_ref) {\n        var series = _ref.series,\n            i = _ref.i,\n            j = _ref.j,\n            x = _ref.x,\n            y = _ref.y,\n            pX = _ref.pX,\n            pY = _ref.pY,\n            xDivision = _ref.xDivision,\n            areaBottomY = _ref.areaBottomY,\n            linePath = _ref.linePath,\n            areaPath = _ref.areaPath,\n            linePaths = _ref.linePaths,\n            areaPaths = _ref.areaPaths,\n            seriesIndex = _ref.seriesIndex;\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var curve = w.config.stroke.curve;\n\n        if (Array.isArray(w.config.stroke.curve)) {\n          if (Array.isArray(seriesIndex)) {\n            curve = w.config.stroke.curve[seriesIndex[i]];\n          } else {\n            curve = w.config.stroke.curve[i];\n          }\n        } // logic of smooth curve derived from chartist\n        // CREDITS: https://gionkunz.github.io/chartist-js/\n\n\n        if (curve === 'smooth') {\n          var length = (x - pX) * 0.35;\n\n          if (w.globals.hasNullValues) {\n            if (series[i][j] !== null) {\n              if (series[i][j + 1] !== null) {\n                linePath = graphics.move(pX, pY) + graphics.curve(pX + length, pY, x - length, y, x + 1, y);\n                areaPath = graphics.move(pX + 1, pY) + graphics.curve(pX + length, pY, x - length, y, x + 1, y) + graphics.line(x, areaBottomY) + graphics.line(pX, areaBottomY) + 'z';\n              } else {\n                linePath = graphics.move(pX, pY);\n                areaPath = graphics.move(pX, pY) + 'z';\n              }\n            }\n\n            linePaths.push(linePath);\n            areaPaths.push(areaPath);\n          } else {\n            linePath = linePath + graphics.curve(pX + length, pY, x - length, y, x, y);\n            areaPath = areaPath + graphics.curve(pX + length, pY, x - length, y, x, y);\n          }\n\n          pX = x;\n          pY = y;\n\n          if (j === series[i].length - 2) {\n            // last loop, close path\n            areaPath = areaPath + graphics.curve(pX, pY, x, y, x, areaBottomY) + graphics.move(x, y) + 'z';\n\n            if (!w.globals.hasNullValues) {\n              linePaths.push(linePath);\n              areaPaths.push(areaPath);\n            }\n          }\n        } else {\n          if (series[i][j + 1] === null) {\n            linePath = linePath + graphics.move(x, y);\n            areaPath = areaPath + graphics.line(x - xDivision, areaBottomY) + graphics.move(x, y);\n          }\n\n          if (series[i][j] === null) {\n            linePath = linePath + graphics.move(x, y);\n            areaPath = areaPath + graphics.move(x, areaBottomY);\n          }\n\n          if (curve === 'stepline') {\n            linePath = linePath + graphics.line(x, null, 'H') + graphics.line(null, y, 'V');\n            areaPath = areaPath + graphics.line(x, null, 'H') + graphics.line(null, y, 'V');\n          } else if (curve === 'straight') {\n            linePath = linePath + graphics.line(x, y);\n            areaPath = areaPath + graphics.line(x, y);\n          }\n\n          if (j === series[i].length - 2) {\n            // last loop, close path\n            areaPath = areaPath + graphics.line(x, areaBottomY) + graphics.move(x, y) + 'z';\n            linePaths.push(linePath);\n            areaPaths.push(areaPath);\n          }\n        }\n\n        return {\n          linePaths: linePaths,\n          areaPaths: areaPaths,\n          pX: pX,\n          pY: pY,\n          linePath: linePath,\n          areaPath: areaPath\n        };\n      }\n    }, {\n      key: \"calculatePoints\",\n      value: function calculatePoints(_ref2) {\n        var series = _ref2.series,\n            realIndex = _ref2.realIndex,\n            x = _ref2.x,\n            y = _ref2.y,\n            i = _ref2.i,\n            j = _ref2.j,\n            prevY = _ref2.prevY,\n            categoryAxisCorrection = _ref2.categoryAxisCorrection,\n            xRatio = _ref2.xRatio;\n        var w = this.w;\n        var ptX = [];\n        var ptY = [];\n\n        if (j === 0) {\n          var xPT1st = categoryAxisCorrection + w.config.markers.offsetX; // the first point for line series\n          // we need to check whether it's not a time series, because a time series may\n          // start from the middle of the x axis\n\n          if (w.globals.isXNumeric) {\n            xPT1st = (w.globals.seriesX[realIndex][0] - w.globals.minX) / xRatio + w.config.markers.offsetX;\n          } // push 2 points for the first data values\n\n\n          ptX.push(xPT1st);\n          ptY.push(Utils.isNumber(series[i][0]) ? prevY + w.config.markers.offsetY : null);\n          ptX.push(x + w.config.markers.offsetX);\n          ptY.push(Utils.isNumber(series[i][j + 1]) ? y + w.config.markers.offsetY : null);\n        } else {\n          ptX.push(x + w.config.markers.offsetX);\n          ptY.push(Utils.isNumber(series[i][j + 1]) ? y + w.config.markers.offsetY : null);\n        }\n\n        var pointsPos = {\n          x: ptX,\n          y: ptY\n        };\n        return pointsPos;\n      }\n    }, {\n      key: \"checkPreviousPaths\",\n      value: function checkPreviousPaths(_ref3) {\n        var pathFromLine = _ref3.pathFromLine,\n            pathFromArea = _ref3.pathFromArea,\n            realIndex = _ref3.realIndex;\n        var w = this.w;\n\n        for (var pp = 0; pp < w.globals.previousPaths.length; pp++) {\n          var gpp = w.globals.previousPaths[pp];\n\n          if ((gpp.type === 'line' || gpp.type === 'area') && gpp.paths.length > 0 && parseInt(gpp.realIndex) === parseInt(realIndex)) {\n            if (gpp.type === 'line') {\n              this.appendPathFrom = false;\n              pathFromLine = w.globals.previousPaths[pp].paths[0].d;\n            } else if (gpp.type === 'area') {\n              this.appendPathFrom = false;\n              pathFromArea = w.globals.previousPaths[pp].paths[0].d;\n\n              if (w.config.stroke.show) {\n                pathFromLine = w.globals.previousPaths[pp].paths[1].d;\n              }\n            }\n          }\n        }\n\n        return {\n          pathFromLine: pathFromLine,\n          pathFromArea: pathFromArea\n        };\n      }\n    }, {\n      key: \"determineFirstPrevY\",\n      value: function determineFirstPrevY(_ref4) {\n        var i = _ref4.i,\n            series = _ref4.series,\n            yRatio = _ref4.yRatio,\n            zeroY = _ref4.zeroY,\n            prevY = _ref4.prevY,\n            prevSeriesY = _ref4.prevSeriesY,\n            lineYPosition = _ref4.lineYPosition;\n        var w = this.w;\n\n        if (typeof series[i][0] !== 'undefined') {\n          if (w.config.chart.stacked) {\n            if (i > 0) {\n              // 1st y value of previous series\n              lineYPosition = prevSeriesY[i - 1][0];\n            } else {\n              // the first series will not have prevY values\n              lineYPosition = zeroY;\n            }\n\n            prevY = lineYPosition - series[i][0] / yRatio + (this.isReversed ? series[i][0] / yRatio : 0) * 2;\n          } else {\n            prevY = zeroY - series[i][0] / yRatio + (this.isReversed ? series[i][0] / yRatio : 0) * 2;\n          }\n        } else {\n          // the first value in the current series is null\n          if (w.config.chart.stacked && i > 0 && typeof series[i][0] === 'undefined') {\n            // check for undefined value (undefined value will occur when we clear the series while user clicks on legend to hide serieses)\n            for (var s = i - 1; s >= 0; s--) {\n              // for loop to get to 1st previous value until we get it\n              if (series[s][0] !== null && typeof series[s][0] !== 'undefined') {\n                lineYPosition = prevSeriesY[s][0];\n                prevY = lineYPosition;\n                break;\n              }\n            }\n          }\n        }\n\n        return {\n          prevY: prevY,\n          lineYPosition: lineYPosition\n        };\n      }\n    }]);\n\n    return Line;\n  }();\n\n  /**\n   * ApexCharts XAxis Class for drawing X-Axis.\n   *\n   * @module XAxis\n   **/\n\n  var XAxis =\n  /*#__PURE__*/\n  function () {\n    function XAxis(ctx) {\n      _classCallCheck(this, XAxis);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n      var w = this.w;\n      this.xaxisLabels = w.globals.labels.slice();\n\n      if (w.globals.timelineLabels.length > 0) {\n        //  timeline labels are there\n        this.xaxisLabels = w.globals.timelineLabels.slice();\n      }\n\n      this.drawnLabels = [];\n\n      if (w.config.xaxis.position === 'top') {\n        this.offY = 0;\n      } else {\n        this.offY = w.globals.gridHeight + 1;\n      }\n\n      this.offY = this.offY + w.config.xaxis.axisBorder.offsetY;\n      this.xaxisFontSize = w.config.xaxis.labels.style.fontSize;\n      this.xaxisFontFamily = w.config.xaxis.labels.style.fontFamily;\n      this.xaxisForeColors = w.config.xaxis.labels.style.colors;\n      this.xaxisBorderWidth = w.config.xaxis.axisBorder.width;\n\n      if (this.xaxisBorderWidth.indexOf('%') > -1) {\n        this.xaxisBorderWidth = w.globals.gridWidth * parseInt(this.xaxisBorderWidth) / 100;\n      } else {\n        this.xaxisBorderWidth = parseInt(this.xaxisBorderWidth);\n      }\n\n      this.xaxisBorderHeight = w.config.xaxis.axisBorder.height; // For bars, we will only consider single y xais,\n      // as we are not providing multiple yaxis for bar charts\n\n      this.yaxis = w.config.yaxis[0];\n      this.axesUtils = new AxesUtils(ctx);\n    }\n\n    _createClass(XAxis, [{\n      key: \"drawXaxis\",\n      value: function drawXaxis() {\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var elXaxis = graphics.group({\n          class: 'apexcharts-xaxis',\n          transform: \"translate(\".concat(w.config.xaxis.offsetX, \", \").concat(w.config.xaxis.offsetY, \")\")\n        });\n        var elXaxisTexts = graphics.group({\n          class: 'apexcharts-xaxis-texts-g',\n          transform: \"translate(\".concat(w.globals.translateXAxisX, \", \").concat(w.globals.translateXAxisY, \")\")\n        });\n        elXaxis.add(elXaxisTexts);\n        var colWidth; // initial x Position (keep adding column width in the loop)\n\n        var xPos = w.globals.padHorizontal;\n        var labels = [];\n\n        for (var i = 0; i < this.xaxisLabels.length; i++) {\n          labels.push(this.xaxisLabels[i]);\n        }\n\n        if (w.globals.isXNumeric) {\n          colWidth = w.globals.gridWidth / (labels.length - 1);\n          xPos = xPos + colWidth / 2 + w.config.xaxis.labels.offsetX;\n        } else {\n          colWidth = w.globals.gridWidth / labels.length;\n          xPos = xPos + colWidth + w.config.xaxis.labels.offsetX;\n        }\n\n        var labelsLen = labels.length;\n\n        if (w.config.xaxis.labels.show) {\n          for (var _i = 0; _i <= labelsLen - 1; _i++) {\n            var x = xPos - colWidth / 2 + w.config.xaxis.labels.offsetX;\n            var label = this.axesUtils.getLabel(labels, w.globals.timelineLabels, x, _i, this.drawnLabels);\n            this.drawnLabels.push(label.text);\n            var offsetYCorrection = 28;\n\n            if (w.globals.rotateXLabels) {\n              offsetYCorrection = 22;\n            }\n\n            var elTick = graphics.drawText({\n              x: label.x,\n              y: this.offY + w.config.xaxis.labels.offsetY + offsetYCorrection,\n              text: '',\n              textAnchor: 'middle',\n              fontWeight: label.isBold ? 600 : 400,\n              fontSize: this.xaxisFontSize,\n              fontFamily: this.xaxisFontFamily,\n              foreColor: Array.isArray(this.xaxisForeColors) ? this.xaxisForeColors[_i] : this.xaxisForeColors,\n              cssClass: 'apexcharts-xaxis-label ' + w.config.xaxis.labels.style.cssClass\n            });\n\n            if (_i === labelsLen - 1) {\n              if (w.globals.skipLastTimelinelabel) {\n                label.text = '';\n              }\n            }\n\n            elXaxisTexts.add(elTick);\n            graphics.addTspan(elTick, label.text, this.xaxisFontFamily);\n            var elTooltipTitle = document.createElementNS(w.globals.SVGNS, 'title');\n            elTooltipTitle.textContent = label.text;\n            elTick.node.appendChild(elTooltipTitle);\n            xPos = xPos + colWidth;\n          }\n        }\n\n        if (w.config.xaxis.title.text !== undefined) {\n          var elXaxisTitle = graphics.group({\n            class: 'apexcharts-xaxis-title'\n          });\n          var elXAxisTitleText = graphics.drawText({\n            x: w.globals.gridWidth / 2 + w.config.xaxis.title.offsetX,\n            y: this.offY - parseInt(this.xaxisFontSize) + w.globals.xAxisLabelsHeight + w.config.xaxis.title.offsetY,\n            text: w.config.xaxis.title.text,\n            textAnchor: 'middle',\n            fontSize: w.config.xaxis.title.style.fontSize,\n            fontFamily: w.config.xaxis.title.style.fontFamily,\n            foreColor: w.config.xaxis.title.style.color,\n            cssClass: 'apexcharts-xaxis-title-text ' + w.config.xaxis.title.style.cssClass\n          });\n          elXaxisTitle.add(elXAxisTitleText);\n          elXaxis.add(elXaxisTitle);\n        }\n\n        if (w.config.xaxis.axisBorder.show) {\n          var lineCorrection = 0;\n\n          if (w.config.chart.type === 'bar' && w.globals.isXNumeric) {\n            lineCorrection = lineCorrection - 15;\n          }\n\n          var elHorzLine = graphics.drawLine(w.globals.padHorizontal + lineCorrection + w.config.xaxis.axisBorder.offsetX, this.offY, this.xaxisBorderWidth, this.offY, w.config.xaxis.axisBorder.color, 0, this.xaxisBorderHeight);\n          elXaxis.add(elHorzLine);\n        }\n\n        return elXaxis;\n      } // this actually becomes the vertical axis (for bar charts)\n\n    }, {\n      key: \"drawXaxisInversed\",\n      value: function drawXaxisInversed(realIndex) {\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var translateYAxisX = w.config.yaxis[0].opposite ? w.globals.translateYAxisX[realIndex] : 0;\n        var elYaxis = graphics.group({\n          class: 'apexcharts-yaxis apexcharts-xaxis-inversed',\n          rel: realIndex\n        });\n        var elYaxisTexts = graphics.group({\n          class: 'apexcharts-yaxis-texts-g apexcharts-xaxis-inversed-texts-g',\n          transform: 'translate(' + translateYAxisX + ', 0)'\n        });\n        elYaxis.add(elYaxisTexts);\n        var colHeight; // initial x Position (keep adding column width in the loop)\n\n        var yPos;\n        var labels = [];\n\n        for (var i = 0; i < this.xaxisLabels.length; i++) {\n          labels.push(this.xaxisLabels[i]);\n        }\n\n        colHeight = w.globals.gridHeight / labels.length;\n        yPos = -(colHeight / 2.2);\n        var lbFormatter = w.globals.yLabelFormatters[0];\n        var ylabels = w.config.yaxis[0].labels;\n\n        if (ylabels.show) {\n          for (var _i2 = 0; _i2 <= labels.length - 1; _i2++) {\n            var label = typeof labels[_i2] === 'undefined' ? '' : labels[_i2];\n            label = lbFormatter(label);\n            var elLabel = graphics.drawText({\n              x: ylabels.offsetX - 15,\n              y: yPos + colHeight + ylabels.offsetY,\n              text: label,\n              textAnchor: this.yaxis.opposite ? 'start' : 'end',\n              foreColor: ylabels.style.color ? ylabels.style.color : ylabels.style.colors[_i2],\n              fontSize: ylabels.style.fontSize,\n              fontFamily: ylabels.style.fontFamily,\n              cssClass: 'apexcharts-yaxis-label ' + ylabels.style.cssClass\n            });\n            elYaxisTexts.add(elLabel);\n\n            if (w.config.yaxis[realIndex].labels.rotate !== 0) {\n              var labelRotatingCenter = graphics.rotateAroundCenter(elLabel.node);\n              elLabel.node.setAttribute('transform', \"rotate(\".concat(w.config.yaxis[realIndex].labels.rotate, \" \").concat(labelRotatingCenter.x, \" \").concat(labelRotatingCenter.y, \")\"));\n            }\n\n            yPos = yPos + colHeight;\n          }\n        }\n\n        if (w.config.yaxis[0].title.text !== undefined) {\n          var elXaxisTitle = graphics.group({\n            class: 'apexcharts-yaxis-title apexcharts-xaxis-title-inversed',\n            transform: 'translate(' + translateYAxisX + ', 0)'\n          });\n          var elXAxisTitleText = graphics.drawText({\n            x: 0,\n            y: w.globals.gridHeight / 2,\n            text: w.config.yaxis[0].title.text,\n            textAnchor: 'middle',\n            foreColor: w.config.yaxis[0].title.style.color,\n            fontSize: w.config.yaxis[0].title.style.fontSize,\n            fontFamily: w.config.yaxis[0].title.style.fontFamily,\n            cssClass: 'apexcharts-yaxis-title-text ' + w.config.yaxis[0].title.style.cssClass\n          });\n          elXaxisTitle.add(elXAxisTitleText);\n          elYaxis.add(elXaxisTitle);\n        }\n\n        if (w.config.xaxis.axisBorder.show) {\n          var elHorzLine = graphics.drawLine(w.globals.padHorizontal + w.config.xaxis.axisBorder.offsetX, this.offY, this.xaxisBorderWidth, this.offY, this.yaxis.axisBorder.color, 0, this.xaxisBorderHeight);\n          elYaxis.add(elHorzLine);\n          this.axesUtils.drawYAxisTicks(0, labels.length, w.config.yaxis[0].axisBorder, w.config.yaxis[0].axisTicks, 0, colHeight, elYaxis);\n        }\n\n        return elYaxis;\n      }\n    }, {\n      key: \"drawXaxisTicks\",\n      value: function drawXaxisTicks(x1, appendToElement) {\n        var w = this.w;\n        var x2 = x1;\n        if (x1 < 0 || x1 > w.globals.gridWidth) return;\n        var y1 = this.offY + w.config.xaxis.axisTicks.offsetY;\n        var y2 = y1 + w.config.xaxis.axisTicks.height;\n\n        if (w.config.xaxis.axisTicks.show) {\n          var graphics = new Graphics(this.ctx);\n          var line = graphics.drawLine(x1 + w.config.xaxis.axisTicks.offsetX, y1 + w.config.xaxis.offsetY, x2 + w.config.xaxis.axisTicks.offsetX, y2 + w.config.xaxis.offsetY, w.config.xaxis.axisTicks.color); // we are not returning anything, but appending directly to the element pased in param\n\n          appendToElement.add(line);\n          line.node.classList.add('apexcharts-xaxis-tick');\n        }\n      }\n    }, {\n      key: \"getXAxisTicksPositions\",\n      value: function getXAxisTicksPositions() {\n        var w = this.w;\n        var xAxisTicksPositions = [];\n        var xCount = this.xaxisLabels.length;\n        var x1 = w.globals.padHorizontal;\n\n        if (w.globals.timelineLabels.length > 0) {\n          for (var i = 0; i < xCount; i++) {\n            x1 = this.xaxisLabels[i].position;\n            xAxisTicksPositions.push(x1);\n          }\n        } else {\n          var xCountForCategoryCharts = xCount;\n\n          for (var _i3 = 0; _i3 < xCountForCategoryCharts; _i3++) {\n            var x1Count = xCountForCategoryCharts;\n\n            if (w.globals.isXNumeric && w.config.chart.type !== 'bar') {\n              x1Count -= 1;\n            }\n\n            x1 = x1 + w.globals.gridWidth / x1Count;\n            xAxisTicksPositions.push(x1);\n          }\n        }\n\n        return xAxisTicksPositions;\n      } // to rotate x-axis labels or to put ... for longer text in xaxis\n\n    }, {\n      key: \"xAxisLabelCorrections\",\n      value: function xAxisLabelCorrections() {\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var xAxis = w.globals.dom.baseEl.querySelector('.apexcharts-xaxis-texts-g');\n        var xAxisTexts = w.globals.dom.baseEl.querySelectorAll('.apexcharts-xaxis-texts-g text');\n        var yAxisTextsInversed = w.globals.dom.baseEl.querySelectorAll('.apexcharts-yaxis-inversed text');\n        var xAxisTextsInversed = w.globals.dom.baseEl.querySelectorAll('.apexcharts-xaxis-inversed-texts-g text');\n\n        if (w.globals.rotateXLabels || w.config.xaxis.labels.rotateAlways) {\n          for (var xat = 0; xat < xAxisTexts.length; xat++) {\n            var textRotatingCenter = graphics.rotateAroundCenter(xAxisTexts[xat]);\n            textRotatingCenter.y = textRotatingCenter.y - 1; // + tickWidth/4;\n\n            textRotatingCenter.x = textRotatingCenter.x + 1;\n            xAxisTexts[xat].setAttribute('transform', \"rotate(\".concat(w.config.xaxis.labels.rotate, \" \").concat(textRotatingCenter.x, \" \").concat(textRotatingCenter.y, \")\"));\n            xAxisTexts[xat].setAttribute('text-anchor', \"end\");\n            var offsetHeight = 10;\n            xAxis.setAttribute('transform', \"translate(0, \".concat(-offsetHeight, \")\"));\n            var tSpan = xAxisTexts[xat].childNodes;\n\n            if (w.config.xaxis.labels.trim) {\n              graphics.placeTextWithEllipsis(tSpan[0], tSpan[0].textContent, w.config.xaxis.labels.maxHeight - 40);\n            }\n          }\n        } else {\n          var width = w.globals.gridWidth / w.globals.labels.length;\n\n          for (var _xat = 0; _xat < xAxisTexts.length; _xat++) {\n            var _tSpan = xAxisTexts[_xat].childNodes;\n\n            if (w.config.xaxis.labels.trim && w.config.xaxis.type !== 'datetime') {\n              graphics.placeTextWithEllipsis(_tSpan[0], _tSpan[0].textContent, width);\n            }\n          }\n        }\n\n        if (yAxisTextsInversed.length > 0) {\n          // truncate rotated y axis in bar chart (x axis)\n          var firstLabelPosX = yAxisTextsInversed[yAxisTextsInversed.length - 1].getBBox();\n          var lastLabelPosX = yAxisTextsInversed[0].getBBox();\n\n          if (firstLabelPosX.x < -20) {\n            yAxisTextsInversed[yAxisTextsInversed.length - 1].parentNode.removeChild(yAxisTextsInversed[yAxisTextsInversed.length - 1]);\n          }\n\n          if (lastLabelPosX.x + lastLabelPosX.width > w.globals.gridWidth) {\n            yAxisTextsInversed[0].parentNode.removeChild(yAxisTextsInversed[0]);\n          } // truncate rotated x axis in bar chart (y axis)\n\n\n          for (var _xat2 = 0; _xat2 < xAxisTextsInversed.length; _xat2++) {\n            graphics.placeTextWithEllipsis(xAxisTextsInversed[_xat2], xAxisTextsInversed[_xat2].textContent, w.config.yaxis[0].labels.maxWidth - parseInt(w.config.yaxis[0].title.style.fontSize) * 2 - 20);\n          }\n        }\n      } // renderXAxisBands() {\n      //   let w = this.w;\n      //   let plotBand = document.createElementNS(w.globals.SVGNS, 'rect')\n      //   w.globals.dom.elGraphical.add(plotBand)\n      // }\n\n    }]);\n\n    return XAxis;\n  }();\n\n  var Range =\n  /*#__PURE__*/\n  function () {\n    function Range(ctx) {\n      _classCallCheck(this, Range);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n    } // http://stackoverflow.com/questions/326679/choosing-an-attractive-linear-scale-for-a-graphs-y-axiss\n    // This routine creates the Y axis values for a graph.\n\n\n    _createClass(Range, [{\n      key: \"niceScale\",\n      value: function niceScale(yMin, yMax, diff) {\n        var index = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n        var ticks = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 10;\n        var w = this.w;\n        var NO_MIN_MAX_PROVIDED = this.w.config.yaxis[index].max === undefined && this.w.config.yaxis[index].min === undefined || this.w.config.yaxis[index].forceNiceScale;\n\n        if (yMin === Number.MIN_VALUE && yMax === 0 || !Utils.isNumber(yMin) && !Utils.isNumber(yMax) || yMin === Number.MIN_VALUE && yMax === -Number.MAX_VALUE) {\n          // when all values are 0\n          yMin = 0;\n          yMax = ticks;\n          var linearScale = this.linearScale(yMin, yMax, ticks);\n          return linearScale;\n        }\n\n        if (yMin > yMax) {\n          // if somehow due to some wrong config, user sent max less than min,\n          // adjust the min/max again\n          console.warn('yaxis.min cannot be greater than yaxis.max');\n          yMax = yMin + 0.1;\n        } else if (yMin === yMax) {\n          // If yMin and yMax are identical, then\n          // adjust the yMin and yMax values to actually\n          // make a graph. Also avoids division by zero errors.\n          yMin = yMin === 0 ? 0 : yMin - 0.5; // some small value\n\n          yMax = yMax === 0 ? 2 : yMax + 0.5; // some small value\n        } // Calculate Min amd Max graphical labels and graph\n        // increments.  The number of ticks defaults to\n        // 10 which is the SUGGESTED value.  Any tick value\n        // entered is used as a suggested value which is\n        // adjusted to be a 'pretty' value.\n        //\n        // Output will be an array of the Y axis values that\n        // encompass the Y values.\n\n\n        var result = []; // Determine Range\n\n        var range = Math.abs(yMax - yMin);\n\n        if (range < 1 && NO_MIN_MAX_PROVIDED && (w.config.chart.type === 'candlestick' || w.config.series[index].type === 'candlestick' || w.globals.isRangeData)) {\n          /* fix https://github.com/apexcharts/apexcharts.js/issues/430 */\n          yMax = yMax * 1.01;\n        }\n\n        var tiks = ticks + 1; // Adjust ticks if needed\n\n        if (tiks < 2) {\n          tiks = 2;\n        } else if (tiks > 2) {\n          tiks -= 2;\n        } // Get raw step value\n\n\n        var tempStep = range / tiks; // Calculate pretty step value\n\n        var mag = Math.floor(Utils.log10(tempStep));\n        var magPow = Math.pow(10, mag);\n        var magMsd = Math.round(tempStep / magPow);\n\n        if (magMsd < 1) {\n          magMsd = 1;\n        }\n\n        var stepSize = magMsd * magPow; // build Y label array.\n        // Lower and upper bounds calculations\n\n        var lb = stepSize * Math.floor(yMin / stepSize);\n        var ub = stepSize * Math.ceil(yMax / stepSize); // Build array\n\n        var val = lb;\n\n        if (NO_MIN_MAX_PROVIDED && range > 2) {\n          while (1) {\n            result.push(val);\n            val += stepSize;\n\n            if (val > ub) {\n              break;\n            }\n          }\n\n          return {\n            result: result,\n            niceMin: result[0],\n            niceMax: result[result.length - 1]\n          };\n        } else {\n          result = [];\n          var v = yMin;\n          result.push(v);\n          var valuesDivider = Math.abs(yMax - yMin) / ticks;\n\n          for (var i = 0; i <= ticks; i++) {\n            v = v + valuesDivider;\n            result.push(v);\n          }\n\n          if (result[result.length - 2] >= yMax) {\n            result.pop();\n          }\n\n          return {\n            result: result,\n            niceMin: result[0],\n            niceMax: result[result.length - 1]\n          };\n        }\n      }\n    }, {\n      key: \"linearScale\",\n      value: function linearScale(yMin, yMax) {\n        var ticks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 10;\n        var range = Math.abs(yMax - yMin);\n        var step = range / ticks;\n\n        if (ticks === Number.MAX_VALUE) {\n          ticks = 10;\n          step = 1;\n        }\n\n        var result = [];\n        var v = yMin;\n\n        while (ticks >= 0) {\n          result.push(v);\n          v = v + step;\n          ticks -= 1;\n        }\n\n        return {\n          result: result,\n          niceMin: result[0],\n          niceMax: result[result.length - 1]\n        };\n      }\n    }, {\n      key: \"logarithmicScale\",\n      value: function logarithmicScale(index, yMin, yMax, ticks) {\n        if (yMin < 0 || yMin === Number.MIN_VALUE) yMin = 0.01;\n        var base = 10;\n        var min = Math.log(yMin) / Math.log(base);\n        var max = Math.log(yMax) / Math.log(base);\n        var range = Math.abs(yMax - yMin);\n        var step = range / ticks;\n        var result = [];\n        var v = yMin;\n\n        while (ticks >= 0) {\n          result.push(v);\n          v = v + step;\n          ticks -= 1;\n        }\n\n        var logs = result.map(function (niceNumber, i) {\n          if (niceNumber <= 0) {\n            niceNumber = 0.01;\n          } // calculate adjustment factor\n\n\n          var scale = (max - min) / (yMax - yMin);\n          var logVal = Math.pow(base, min + scale * (niceNumber - min));\n          return Math.round(logVal / Utils.roundToBase(logVal, base)) * Utils.roundToBase(logVal, base);\n        }); // Math.floor may have rounded the value to 0, revert back to 1\n\n        if (logs[0] === 0) logs[0] = 1;\n        return {\n          result: logs,\n          niceMin: logs[0],\n          niceMax: logs[logs.length - 1]\n        };\n      }\n    }, {\n      key: \"setYScaleForIndex\",\n      value: function setYScaleForIndex(index, minY, maxY) {\n        var gl = this.w.globals;\n        var cnf = this.w.config;\n        var y = gl.isBarHorizontal ? cnf.xaxis : cnf.yaxis[index];\n\n        if (typeof gl.yAxisScale[index] === 'undefined') {\n          gl.yAxisScale[index] = [];\n        }\n\n        if (y.logarithmic) {\n          gl.allSeriesCollapsed = false;\n          gl.yAxisScale[index] = this.logarithmicScale(index, minY, maxY, y.tickAmount ? y.tickAmount : Math.floor(Math.log10(maxY)));\n        } else {\n          if (maxY === -Number.MAX_VALUE || !Utils.isNumber(maxY)) {\n            // no data in the chart. Either all series collapsed or user passed a blank array\n            gl.yAxisScale[index] = this.linearScale(0, 5, 5);\n          } else {\n            // there is some data. Turn off the allSeriesCollapsed flag\n            gl.allSeriesCollapsed = false;\n\n            if ((y.min !== undefined || y.max !== undefined) && !y.forceNiceScale) {\n              // fix https://github.com/apexcharts/apexcharts.js/issues/492\n              gl.yAxisScale[index] = this.linearScale(minY, maxY, y.tickAmount);\n            } else {\n              var diff = Math.abs(maxY - minY);\n              gl.yAxisScale[index] = this.niceScale(minY, maxY, diff, index, // fix https://github.com/apexcharts/apexcharts.js/issues/397\n              y.tickAmount ? y.tickAmount : diff < 5 && diff > 1 ? diff + 1 : 5);\n            }\n          }\n        }\n      }\n    }, {\n      key: \"setMultipleYScales\",\n      value: function setMultipleYScales() {\n        var _this = this;\n\n        var gl = this.w.globals;\n        var cnf = this.w.config;\n        var minYArr = gl.minYArr.concat([]);\n        var maxYArr = gl.maxYArr.concat([]);\n        var scalesIndices = []; // here, we loop through the yaxis array and find the item which has \"seriesName\" property\n\n        cnf.yaxis.forEach(function (yaxe, i) {\n          var index = i;\n          cnf.series.forEach(function (s, si) {\n            // if seriesName matches and that series is not collapsed, we use that scale\n            if (s.name === yaxe.seriesName && gl.collapsedSeriesIndices.indexOf(si) === -1) {\n              index = si;\n\n              if (i !== si) {\n                scalesIndices.push({\n                  index: si,\n                  similarIndex: i,\n                  alreadyExists: true\n                });\n              } else {\n                scalesIndices.push({\n                  index: si\n                });\n              }\n            }\n          });\n          var minY = minYArr[index];\n          var maxY = maxYArr[index];\n\n          _this.setYScaleForIndex(i, minY, maxY);\n        });\n        this.sameScaleInMultipleAxes(minYArr, maxYArr, scalesIndices);\n      }\n    }, {\n      key: \"sameScaleInMultipleAxes\",\n      value: function sameScaleInMultipleAxes(minYArr, maxYArr, scalesIndices) {\n        var _this2 = this;\n\n        var cnf = this.w.config;\n        var gl = this.w.globals; // we got the scalesIndices array in the above code, but we need to filter out the items which doesn't have same scales\n\n        var similarIndices = [];\n        scalesIndices.forEach(function (scale) {\n          if (scale.alreadyExists) {\n            if (typeof similarIndices[scale.index] === 'undefined') {\n              similarIndices[scale.index] = [];\n            }\n\n            similarIndices[scale.index].push(scale.index);\n            similarIndices[scale.index].push(scale.similarIndex);\n          }\n        });\n\n        function intersect(a, b) {\n          return a.filter(function (value) {\n            return b.indexOf(value) !== -1;\n          });\n        }\n\n        gl.yAxisSameScaleIndices = similarIndices;\n        similarIndices.forEach(function (si, i) {\n          similarIndices.forEach(function (sj, j) {\n            if (i !== j) {\n              if (intersect(si, sj).length > 0) {\n                similarIndices[i] = similarIndices[i].concat(similarIndices[j]);\n              }\n            }\n          });\n        }); // then, we remove duplicates from the similarScale array\n\n        var uniqueSimilarIndices = similarIndices.map(function (item) {\n          return item.filter(function (i, pos) {\n            return item.indexOf(i) === pos;\n          });\n        }); // sort further to remove whole duplicate arrays later\n\n        var sortedIndices = uniqueSimilarIndices.map(function (s) {\n          return s.sort();\n        }); // remove undefined items\n\n        similarIndices = similarIndices.filter(function (s) {\n          return !!s;\n        });\n        var indices = sortedIndices.slice();\n        var stringIndices = indices.map(function (ind) {\n          return JSON.stringify(ind);\n        });\n        indices = indices.filter(function (ind, p) {\n          return stringIndices.indexOf(JSON.stringify(ind)) === p;\n        });\n        var sameScaleMinYArr = [];\n        var sameScaleMaxYArr = [];\n        minYArr.forEach(function (minYValue, yi) {\n          indices.forEach(function (scale, i) {\n            // we compare only the yIndex which exists in the indices array\n            if (scale.indexOf(yi) > -1) {\n              if (typeof sameScaleMinYArr[i] === 'undefined') {\n                sameScaleMinYArr[i] = [];\n                sameScaleMaxYArr[i] = [];\n              }\n\n              sameScaleMinYArr[i].push({\n                key: yi,\n                value: minYValue\n              });\n              sameScaleMaxYArr[i].push({\n                key: yi,\n                value: maxYArr[yi]\n              });\n            }\n          });\n        });\n        var sameScaleMin = Array.apply(null, Array(indices.length)).map(Number.prototype.valueOf, Number.MIN_VALUE);\n        var sameScaleMax = Array.apply(null, Array(indices.length)).map(Number.prototype.valueOf, -Number.MAX_VALUE);\n        sameScaleMinYArr.forEach(function (s, i) {\n          s.forEach(function (sc, j) {\n            sameScaleMin[i] = Math.min(sc.value, sameScaleMin[i]);\n          });\n        });\n        sameScaleMaxYArr.forEach(function (s, i) {\n          s.forEach(function (sc, j) {\n            sameScaleMax[i] = Math.max(sc.value, sameScaleMax[i]);\n          });\n        });\n        minYArr.forEach(function (min, i) {\n          sameScaleMaxYArr.forEach(function (s, si) {\n            var minY = sameScaleMin[si];\n            var maxY = sameScaleMax[si];\n\n            if (cnf.chart.stacked) {\n              // for stacked charts, we need to add the values\n              maxY = 0;\n              s.forEach(function (ind, k) {\n                maxY += ind.value;\n\n                if (minY !== Number.MIN_VALUE) {\n                  minY += sameScaleMinYArr[si][k].value;\n                }\n              });\n            }\n\n            s.forEach(function (ind, k) {\n              if (s[k].key === i) {\n                if (cnf.yaxis[i].min !== undefined) {\n                  if (typeof cnf.yaxis[i].min === 'function') {\n                    minY = cnf.yaxis[i].min(gl.minY);\n                  } else {\n                    minY = cnf.yaxis[i].min;\n                  }\n                }\n\n                if (cnf.yaxis[i].max !== undefined) {\n                  if (typeof cnf.yaxis[i].max === 'function') {\n                    maxY = cnf.yaxis[i].max(gl.maxY);\n                  } else {\n                    maxY = cnf.yaxis[i].max;\n                  }\n                }\n\n                _this2.setYScaleForIndex(i, minY, maxY);\n              }\n            });\n          });\n        });\n      }\n    }, {\n      key: \"autoScaleY\",\n      value: function autoScaleY(ctx, yaxis, e) {\n        if (!ctx) {\n          ctx = this;\n        }\n\n        var w = ctx.w;\n\n        if (w.globals.isMultipleYAxis || w.globals.collapsedSeries.length) {\n          // The autoScale option for multiple y-axis is turned off as it leads to buggy behavior.\n          // Also, when a series is collapsed, it results in incorrect behavior. Hence turned it off for that too - fixes apexcharts.js#795\n          return yaxis;\n        }\n\n        var seriesX = w.globals.seriesX[0];\n        var isStacked = w.config.chart.stacked;\n        yaxis.forEach(function (yaxe, yI) {\n          var firstXIndex = 0;\n\n          for (var xi = 0; xi < seriesX.length; xi++) {\n            if (seriesX[xi] >= e.xaxis.min) {\n              firstXIndex = xi;\n              break;\n            }\n          }\n\n          var initialMin = w.globals.minYArr[yI];\n          var initialMax = w.globals.maxYArr[yI];\n          var min, max;\n          var stackedSer = w.globals.stackedSeriesTotals;\n          w.globals.series.forEach(function (serie, sI) {\n            var firstValue = serie[firstXIndex];\n\n            if (isStacked) {\n              firstValue = stackedSer[firstXIndex];\n              min = max = firstValue;\n              stackedSer.forEach(function (y, yI) {\n                if (seriesX[yI] <= e.xaxis.max && seriesX[yI] >= e.xaxis.min) {\n                  if (y > max && y !== null) max = y;\n                  if (serie[yI] < min && serie[yI] !== null) min = serie[yI];\n                }\n              });\n            } else {\n              min = max = firstValue;\n              serie.forEach(function (y, yI) {\n                if (seriesX[yI] <= e.xaxis.max && seriesX[yI] >= e.xaxis.min) {\n                  var valMin = y;\n                  var valMax = y;\n                  w.globals.series.forEach(function (wS, wSI) {\n                    if (y !== null) {\n                      valMin = Math.min(wS[yI], valMin);\n                      valMax = Math.max(wS[yI], valMax);\n                    }\n                  });\n                  if (valMax > max && valMax !== null) max = valMax;\n                  if (valMin < min && valMin !== null) min = valMin;\n                }\n              });\n            }\n\n            if (min === undefined && max === undefined) {\n              min = initialMin;\n              max = initialMax;\n            }\n\n            min *= min < 0 ? 1.1 : 0.9;\n            max *= max < 0 ? 0.9 : 1.1;\n\n            if (max < 0 && max < initialMax) {\n              max = initialMax;\n            }\n\n            if (min < 0 && min > initialMin) {\n              min = initialMin;\n            }\n\n            if (yaxis.length > 1) {\n              yaxis[sI].min = yaxe.min === undefined ? min : yaxe.min;\n              yaxis[sI].max = yaxe.max === undefined ? max : yaxe.max;\n            } else {\n              yaxis[0].min = yaxe.min === undefined ? min : yaxe.min;\n              yaxis[0].max = yaxe.max === undefined ? max : yaxe.max;\n            }\n          });\n        });\n        return yaxis;\n      }\n    }]);\n\n    return Range;\n  }();\n\n  /**\n   * Range is used to generates values between min and max.\n   *\n   * @module Range\n   **/\n\n  var Range$1 =\n  /*#__PURE__*/\n  function () {\n    function Range$$1(ctx) {\n      _classCallCheck(this, Range$$1);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n      this.scales = new Range(ctx);\n    }\n\n    _createClass(Range$$1, [{\n      key: \"init\",\n      value: function init() {\n        this.setYRange();\n        this.setXRange();\n        this.setZRange();\n      }\n    }, {\n      key: \"getMinYMaxY\",\n      value: function getMinYMaxY(startingIndex) {\n        var lowestY = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Number.MAX_VALUE;\n        var highestY = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : -Number.MAX_VALUE;\n        var len = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n        var gl = this.w.globals;\n        var maxY = -Number.MAX_VALUE;\n        var minY = Number.MIN_VALUE;\n\n        if (len === null) {\n          len = startingIndex + 1;\n        }\n\n        var series = gl.series;\n        var seriesMin = series;\n        var seriesMax = series;\n\n        if (this.w.config.chart.type === 'candlestick') {\n          seriesMin = gl.seriesCandleL;\n          seriesMax = gl.seriesCandleH;\n        } else if (gl.isRangeData) {\n          seriesMin = gl.seriesRangeStart;\n          seriesMax = gl.seriesRangeEnd;\n        }\n\n        for (var i = startingIndex; i < len; i++) {\n          gl.dataPoints = Math.max(gl.dataPoints, series[i].length);\n\n          for (var j = 0; j < gl.series[i].length; j++) {\n            var val = series[i][j];\n\n            if (val !== null && Utils.isNumber(val)) {\n              maxY = Math.max(maxY, seriesMax[i][j]);\n              lowestY = Math.min(lowestY, seriesMin[i][j]);\n              highestY = Math.max(highestY, seriesMin[i][j]);\n\n              if (this.w.config.chart.type === 'candlestick') {\n                maxY = Math.max(maxY, gl.seriesCandleO[i][j]);\n                maxY = Math.max(maxY, gl.seriesCandleH[i][j]);\n                maxY = Math.max(maxY, gl.seriesCandleL[i][j]);\n                maxY = Math.max(maxY, gl.seriesCandleC[i][j]);\n                highestY = maxY;\n              }\n\n              if (Utils.isFloat(val)) {\n                val = Utils.noExponents(val);\n                gl.yValueDecimal = Math.max(gl.yValueDecimal, val.toString().split('.')[1].length);\n              }\n\n              if (minY > seriesMin[i][j] && seriesMin[i][j] < 0) {\n                minY = seriesMin[i][j];\n              }\n            } else {\n              gl.hasNullValues = true;\n            }\n          }\n        }\n\n        return {\n          minY: minY,\n          maxY: maxY,\n          lowestY: lowestY,\n          highestY: highestY\n        };\n      }\n    }, {\n      key: \"setYRange\",\n      value: function setYRange() {\n        var gl = this.w.globals;\n        var cnf = this.w.config;\n        gl.maxY = -Number.MAX_VALUE;\n        gl.minY = Number.MIN_VALUE;\n        var lowestYInAllSeries = Number.MAX_VALUE;\n\n        if (gl.isMultipleYAxis) {\n          // we need to get minY and maxY for multiple y axis\n          for (var i = 0; i < gl.series.length; i++) {\n            var minYMaxYArr = this.getMinYMaxY(i, lowestYInAllSeries, null, i + 1);\n            gl.minYArr.push(minYMaxYArr.minY);\n            gl.maxYArr.push(minYMaxYArr.maxY);\n            lowestYInAllSeries = minYMaxYArr.lowestY;\n          }\n        } // and then, get the minY and maxY from all series\n\n\n        var minYMaxY = this.getMinYMaxY(0, lowestYInAllSeries, null, gl.series.length);\n        gl.minY = minYMaxY.minY;\n        gl.maxY = minYMaxY.maxY;\n        lowestYInAllSeries = minYMaxY.lowestY;\n\n        if (cnf.chart.stacked) {\n          // for stacked charts, we calculate each series's parallel values. i.e, series[0][j] + series[1][j] .... [series[i.length][j]] and get the max out of it\n          var stackedPoss = [];\n          var stackedNegs = [];\n\n          if (gl.series.length) {\n            for (var j = 0; j < gl.series[gl.maxValsInArrayIndex].length; j++) {\n              var poss = 0;\n              var negs = 0;\n\n              for (var _i = 0; _i < gl.series.length; _i++) {\n                if (gl.series[_i][j] !== null && Utils.isNumber(gl.series[_i][j])) {\n                  if (gl.series[_i][j] > 0) {\n                    // 0.0001 fixes #185 when values are very small\n                    poss = poss + parseFloat(gl.series[_i][j]) + 0.0001;\n                  } else {\n                    negs = negs + parseFloat(gl.series[_i][j]);\n                  }\n                }\n\n                if (_i === gl.series.length - 1) {\n                  // push all the totals to the array for future use\n                  stackedPoss.push(poss);\n                  stackedNegs.push(negs);\n                }\n              }\n            }\n          } // get the max/min out of the added parallel values\n\n\n          for (var z = 0; z < stackedPoss.length; z++) {\n            gl.maxY = Math.max(gl.maxY, stackedPoss[z]);\n            gl.minY = Math.min(gl.minY, stackedNegs[z]);\n          }\n        } // if the numbers are too big, reduce the range\n        // for eg, if number is between 100000-110000, putting 0 as the lowest value is not so good idea. So change the gl.minY for line/area/candlesticks\n\n\n        if (cnf.chart.type === 'line' || cnf.chart.type === 'area' || cnf.chart.type === 'candlestick') {\n          if (gl.minY === Number.MIN_VALUE && lowestYInAllSeries !== -Number.MAX_VALUE && lowestYInAllSeries !== gl.maxY // single value possibility\n          ) {\n              var diff = gl.maxY - lowestYInAllSeries;\n\n              if (lowestYInAllSeries >= 0 && lowestYInAllSeries <= 10) {\n                // if minY is already 0/low value, we don't want to go negatives here - so this check is essential.\n                diff = 0;\n              }\n\n              gl.minY = lowestYInAllSeries - diff * 5 / 100; // if (lowestYInAllSeries > 0 && gl.minY < 0) {\n\n              /* fix https://github.com/apexcharts/apexcharts.js/issues/614 */\n              //  gl.minY = 0\n              // }\n\n              /* fix https://github.com/apexcharts/apexcharts.js/issues/426 */\n\n              gl.maxY = gl.maxY + diff * 5 / 100;\n            }\n        }\n\n        cnf.yaxis.map(function (yaxe, index) {\n          // override all min/max values by user defined values (y axis)\n          if (yaxe.max !== undefined) {\n            if (typeof yaxe.max === 'number') {\n              gl.maxYArr[index] = yaxe.max;\n            } else if (typeof yaxe.max === 'function') {\n              gl.maxYArr[index] = yaxe.max(gl.maxY);\n            } // gl.maxY is for single y-axis chart, it will be ignored in multi-yaxis\n\n\n            gl.maxY = gl.maxYArr[index];\n          }\n\n          if (yaxe.min !== undefined) {\n            if (typeof yaxe.min === 'number') {\n              gl.minYArr[index] = yaxe.min;\n            } else if (typeof yaxe.min === 'function') {\n              gl.minYArr[index] = yaxe.min(gl.minY);\n            } // gl.minY is for single y-axis chart, it will be ignored in multi-yaxis\n\n\n            gl.minY = gl.minYArr[index];\n          }\n        }); // for horizontal bar charts, we need to check xaxis min/max as user may have specified there\n\n        if (gl.isBarHorizontal) {\n          if (cnf.xaxis.min !== undefined && typeof cnf.xaxis.min === 'number') {\n            gl.minY = cnf.xaxis.min;\n          }\n\n          if (cnf.xaxis.max !== undefined && typeof cnf.xaxis.max === 'number') {\n            gl.maxY = cnf.xaxis.max;\n          }\n        } // for multi y-axis we need different scales for each\n\n\n        if (gl.isMultipleYAxis) {\n          this.scales.setMultipleYScales();\n          gl.minY = lowestYInAllSeries;\n          gl.yAxisScale.forEach(function (scale, i) {\n            gl.minYArr[i] = scale.niceMin;\n            gl.maxYArr[i] = scale.niceMax;\n          });\n        } else {\n          this.scales.setYScaleForIndex(0, gl.minY, gl.maxY);\n          gl.minY = gl.yAxisScale[0].niceMin;\n          gl.maxY = gl.yAxisScale[0].niceMax;\n          gl.minYArr[0] = gl.yAxisScale[0].niceMin;\n          gl.maxYArr[0] = gl.yAxisScale[0].niceMax;\n        }\n\n        return {\n          minY: gl.minY,\n          maxY: gl.maxY,\n          minYArr: gl.minYArr,\n          maxYArr: gl.maxYArr\n        };\n      }\n    }, {\n      key: \"setXRange\",\n      value: function setXRange() {\n        var gl = this.w.globals;\n        var cnf = this.w.config;\n        var isXNumeric = cnf.xaxis.type === 'numeric' || cnf.xaxis.type === 'datetime' || cnf.xaxis.type === 'category' && !gl.noLabelsProvided || gl.noLabelsProvided || gl.isXNumeric; // minX maxX starts here\n\n        if (gl.isXNumeric) {\n          for (var i = 0; i < gl.series.length; i++) {\n            if (gl.labels[i]) {\n              for (var j = 0; j < gl.labels[i].length; j++) {\n                if (gl.labels[i][j] !== null && Utils.isNumber(gl.labels[i][j])) {\n                  gl.maxX = Math.max(gl.maxX, gl.labels[i][j]);\n                  gl.initialmaxX = Math.max(gl.maxX, gl.labels[i][j]);\n                  gl.minX = Math.min(gl.minX, gl.labels[i][j]);\n                  gl.initialminX = Math.min(gl.minX, gl.labels[i][j]);\n                }\n              }\n            }\n          }\n        }\n\n        if (gl.noLabelsProvided) {\n          if (cnf.xaxis.categories.length === 0) {\n            gl.maxX = gl.labels[gl.labels.length - 1];\n            gl.initialmaxX = gl.labels[gl.labels.length - 1];\n            gl.minX = 1;\n            gl.initialminX = 1;\n          }\n        } // bar chart specific\n        // for numeric xaxis, we need to adjust some padding left and right for bar charts\n\n\n        if (gl.comboChartsHasBars || cnf.chart.type === 'candlestick' || cnf.chart.type === 'bar' && gl.isXNumeric) {\n          if (cnf.xaxis.type !== 'category' || gl.isXNumeric) {\n            var t = gl.svgWidth / gl.dataPoints * (Math.abs(gl.maxX - gl.minX) / gl.svgWidth); // some padding to the left to prevent cropping of the bars\n\n            var minX = gl.minX - t / 2;\n            gl.minX = minX;\n            gl.initialminX = minX; // some padding to the right to prevent cropping of the bars\n\n            var maxX = gl.maxX + t / ((gl.series.length + 1) / gl.series.length);\n            gl.maxX = maxX;\n            gl.initialmaxX = maxX;\n          }\n        }\n\n        if ((gl.isXNumeric || gl.noLabelsProvided) && (!cnf.xaxis.convertedCatToNumeric || gl.dataFormatXNumeric)) {\n          var ticks;\n\n          if (cnf.xaxis.tickAmount === undefined) {\n            ticks = Math.round(gl.svgWidth / 150); // no labels provided and total number of dataPoints is less than 20\n\n            if (cnf.xaxis.type === 'numeric' && gl.dataPoints < 20) {\n              ticks = gl.dataPoints - 1;\n            } // this check is for when ticks exceeds total datapoints and that would result in duplicate labels\n\n\n            if (ticks > gl.dataPoints && gl.dataPoints !== 0) {\n              ticks = gl.dataPoints - 1;\n            }\n          } else if (cnf.xaxis.tickAmount === 'dataPoints') {\n            ticks = gl.series[gl.maxValsInArrayIndex].length - 1;\n          } else {\n            ticks = cnf.xaxis.tickAmount;\n          } // override all min/max values by user defined values (x axis)\n\n\n          if (cnf.xaxis.max !== undefined && typeof cnf.xaxis.max === 'number') {\n            gl.maxX = cnf.xaxis.max;\n          }\n\n          if (cnf.xaxis.min !== undefined && typeof cnf.xaxis.min === 'number') {\n            gl.minX = cnf.xaxis.min;\n          } // if range is provided, adjust the new minX\n\n\n          if (cnf.xaxis.range !== undefined) {\n            gl.minX = gl.maxX - cnf.xaxis.range;\n          }\n\n          if (gl.minX !== Number.MAX_VALUE && gl.maxX !== -Number.MAX_VALUE) {\n            gl.xAxisScale = this.scales.linearScale(gl.minX, gl.maxX, ticks);\n          } else {\n            gl.xAxisScale = this.scales.linearScale(1, ticks, ticks);\n\n            if (gl.noLabelsProvided && gl.labels.length > 0) {\n              gl.xAxisScale = this.scales.linearScale(1, gl.labels.length, ticks - 1); // this is the only place seriesX is again mutated\n\n              gl.seriesX = gl.labels.slice();\n            }\n          } // we will still store these labels as the count for this will be different (to draw grid and labels placement)\n\n\n          if (isXNumeric) {\n            gl.labels = gl.xAxisScale.result.slice();\n          }\n        }\n\n        if (gl.minX === gl.maxX) {\n          // single dataPoint\n          if (cnf.xaxis.type === 'datetime') {\n            var newMinX = new Date(gl.minX);\n            newMinX.setDate(newMinX.getDate() - 2);\n            gl.minX = new Date(newMinX).getTime();\n            var newMaxX = new Date(gl.maxX);\n            newMaxX.setDate(newMaxX.getDate() + 2);\n            gl.maxX = new Date(newMaxX).getTime();\n          } else if (cnf.xaxis.type === 'numeric' || cnf.xaxis.type === 'category' && !gl.noLabelsProvided) {\n            gl.minX = gl.minX - 2;\n            gl.maxX = gl.maxX + 2;\n          }\n        }\n\n        if (gl.isXNumeric) {\n          // get the least x diff if numeric x axis is present\n          gl.seriesX.forEach(function (sX, i) {\n            if (sX.length === 1) {\n              // a small hack to prevent overlapping multiple bars when there is just 1 datapoint in bar series.\n              // fix #811\n              sX.push(gl.seriesX[gl.maxValsInArrayIndex][gl.seriesX[gl.maxValsInArrayIndex].length - 1]);\n            }\n\n            sX.forEach(function (s, j) {\n              if (j > 0) {\n                var xDiff = s - gl.seriesX[i][j - 1];\n                gl.minXDiff = Math.min(xDiff, gl.minXDiff);\n              }\n            });\n          });\n          this.calcMinXDiffForTinySeries();\n        }\n\n        return {\n          minX: gl.minX,\n          maxX: gl.maxX\n        };\n      }\n    }, {\n      key: \"calcMinXDiffForTinySeries\",\n      value: function calcMinXDiffForTinySeries() {\n        var w = this.w;\n        var len = w.globals.labels.length;\n\n        if (w.globals.labels.length === 1) {\n          w.globals.minXDiff = (w.globals.maxX - w.globals.minX) / len / 3;\n        } else {\n          if (w.globals.minXDiff === Number.MAX_VALUE) {\n            // possibly a single dataPoint (fixes react-apexcharts/issue#34)\n            if (w.globals.timelineLabels.length > 0) {\n              len = w.globals.timelineLabels.length;\n            }\n\n            if (len < 3) {\n              len = 3;\n            }\n\n            w.globals.minXDiff = (w.globals.maxX - w.globals.minX) / len;\n          }\n        }\n\n        return w.globals.minXDiff;\n      }\n    }, {\n      key: \"setZRange\",\n      value: function setZRange() {\n        var gl = this.w.globals; // minZ, maxZ starts here\n\n        if (gl.isDataXYZ) {\n          for (var i = 0; i < gl.series.length; i++) {\n            if (typeof gl.seriesZ[i] !== 'undefined') {\n              for (var j = 0; j < gl.seriesZ[i].length; j++) {\n                if (gl.seriesZ[i][j] !== null && Utils.isNumber(gl.seriesZ[i][j])) {\n                  gl.maxZ = Math.max(gl.maxZ, gl.seriesZ[i][j]);\n                  gl.minZ = Math.min(gl.minZ, gl.seriesZ[i][j]);\n                }\n              }\n            }\n          }\n        }\n      }\n    }]);\n\n    return Range$$1;\n  }();\n\n  /**\n   * ApexCharts TimeScale Class for generating time ticks for x-axis.\n   *\n   * @module TimeScale\n   **/\n\n  var TimeScale =\n  /*#__PURE__*/\n  function () {\n    function TimeScale(ctx) {\n      _classCallCheck(this, TimeScale);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n      this.timeScaleArray = [];\n    }\n\n    _createClass(TimeScale, [{\n      key: \"calculateTimeScaleTicks\",\n      value: function calculateTimeScaleTicks(minX, maxX) {\n        var _this = this;\n\n        var w = this.w; // null check when no series to show\n\n        if (w.globals.allSeriesCollapsed) {\n          w.globals.labels = [];\n          w.globals.timelineLabels = [];\n          return [];\n        }\n\n        var dt = new DateTime(this.ctx);\n        var daysDiff = (maxX - minX) / (1000 * 60 * 60 * 24);\n        this.determineInterval(daysDiff);\n        w.globals.disableZoomIn = false;\n        w.globals.disableZoomOut = false;\n\n        if (daysDiff < 0.005) {\n          w.globals.disableZoomIn = true;\n        } else if (daysDiff > 50000) {\n          w.globals.disableZoomOut = true;\n        }\n\n        var timeIntervals = dt.getTimeUnitsfromTimestamp(minX, maxX);\n        var daysWidthOnXAxis = w.globals.gridWidth / daysDiff;\n        var hoursWidthOnXAxis = daysWidthOnXAxis / 24;\n        var minutesWidthOnXAxis = hoursWidthOnXAxis / 60;\n        var numberOfHours = Math.floor(daysDiff * 24);\n        var numberOfMinutes = Math.floor(daysDiff * 24 * 60);\n        var numberOfDays = Math.floor(daysDiff);\n        var numberOfMonths = Math.floor(daysDiff / 30);\n        var numberOfYears = Math.floor(daysDiff / 365);\n        var firstVal = {\n          minMinute: timeIntervals.minMinute,\n          minHour: timeIntervals.minHour,\n          minDate: timeIntervals.minDate,\n          minMonth: timeIntervals.minMonth,\n          minYear: timeIntervals.minYear\n        };\n        var currentMinute = firstVal.minMinute;\n        var currentHour = firstVal.minHour;\n        var currentMonthDate = firstVal.minDate;\n        var currentDate = firstVal.minDate;\n        var currentMonth = firstVal.minMonth;\n        var currentYear = firstVal.minYear;\n        var params = {\n          firstVal: firstVal,\n          currentMinute: currentMinute,\n          currentHour: currentHour,\n          currentMonthDate: currentMonthDate,\n          currentDate: currentDate,\n          currentMonth: currentMonth,\n          currentYear: currentYear,\n          daysWidthOnXAxis: daysWidthOnXAxis,\n          hoursWidthOnXAxis: hoursWidthOnXAxis,\n          minutesWidthOnXAxis: minutesWidthOnXAxis,\n          numberOfMinutes: numberOfMinutes,\n          numberOfHours: numberOfHours,\n          numberOfDays: numberOfDays,\n          numberOfMonths: numberOfMonths,\n          numberOfYears: numberOfYears\n        };\n\n        switch (this.tickInterval) {\n          case 'years':\n            {\n              this.generateYearScale(params);\n              break;\n            }\n\n          case 'months':\n          case 'half_year':\n            {\n              this.generateMonthScale(params);\n              break;\n            }\n\n          case 'months_days':\n          case 'months_fortnight':\n          case 'days':\n          case 'week_days':\n            {\n              this.generateDayScale(params);\n              break;\n            }\n\n          case 'hours':\n            {\n              this.generateHourScale(params);\n              break;\n            }\n\n          case 'minutes':\n            this.generateMinuteScale(params);\n            break;\n        } // first, we will adjust the month values index\n        // as in the upper function, it is starting from 0\n        // we will start them from 1\n\n\n        var adjustedMonthInTimeScaleArray = this.timeScaleArray.map(function (ts) {\n          var defaultReturn = {\n            position: ts.position,\n            unit: ts.unit,\n            year: ts.year,\n            day: ts.day ? ts.day : 1,\n            hour: ts.hour ? ts.hour : 0,\n            month: ts.month + 1\n          };\n\n          if (ts.unit === 'month') {\n            return _objectSpread({}, defaultReturn, {\n              day: 1,\n              value: ts.value + 1\n            });\n          } else if (ts.unit === 'day' || ts.unit === 'hour') {\n            return _objectSpread({}, defaultReturn, {\n              value: ts.value\n            });\n          } else if (ts.unit === 'minute') {\n            return _objectSpread({}, defaultReturn, {\n              value: ts.value,\n              minute: ts.value\n            });\n          }\n\n          return ts;\n        });\n        var filteredTimeScale = adjustedMonthInTimeScaleArray.filter(function (ts) {\n          var modulo = 1;\n          var ticks = Math.ceil(w.globals.gridWidth / 120);\n          var value = ts.value;\n\n          if (w.config.xaxis.tickAmount !== undefined) {\n            ticks = w.config.xaxis.tickAmount;\n          }\n\n          if (adjustedMonthInTimeScaleArray.length > ticks) {\n            modulo = Math.floor(adjustedMonthInTimeScaleArray.length / ticks);\n          }\n\n          var shouldNotSkipUnit = false; // there is a big change in unit i.e days to months\n\n          var shouldNotPrint = false; // should skip these values\n\n          switch (_this.tickInterval) {\n            case 'half_year':\n              modulo = 7;\n\n              if (ts.unit === 'year') {\n                shouldNotSkipUnit = true;\n              }\n\n              break;\n\n            case 'months':\n              modulo = 1;\n\n              if (ts.unit === 'year') {\n                shouldNotSkipUnit = true;\n              }\n\n              break;\n\n            case 'months_fortnight':\n              modulo = 15;\n\n              if (ts.unit === 'year' || ts.unit === 'month') {\n                shouldNotSkipUnit = true;\n              }\n\n              if (value === 30) {\n                shouldNotPrint = true;\n              }\n\n              break;\n\n            case 'months_days':\n              modulo = 10;\n\n              if (ts.unit === 'month') {\n                shouldNotSkipUnit = true;\n              }\n\n              if (value === 30) {\n                shouldNotPrint = true;\n              }\n\n              break;\n\n            case 'week_days':\n              modulo = 8;\n\n              if (ts.unit === 'month') {\n                shouldNotSkipUnit = true;\n              }\n\n              break;\n\n            case 'days':\n              modulo = 1;\n\n              if (ts.unit === 'month') {\n                shouldNotSkipUnit = true;\n              }\n\n              break;\n\n            case 'hours':\n              if (ts.unit === 'day') {\n                shouldNotSkipUnit = true;\n              }\n\n              break;\n\n            case 'minutes':\n              if (value % 5 !== 0) {\n                shouldNotPrint = true;\n              }\n\n              break;\n          }\n\n          if (_this.tickInterval === 'minutes' || _this.tickInterval === 'hours') {\n            if (!shouldNotPrint) {\n              return true;\n            }\n          } else {\n            if ((value % modulo === 0 || shouldNotSkipUnit) && !shouldNotPrint) {\n              return true;\n            }\n          }\n        });\n        return filteredTimeScale;\n      }\n    }, {\n      key: \"recalcDimensionsBasedOnFormat\",\n      value: function recalcDimensionsBasedOnFormat(filteredTimeScale, inverted) {\n        var w = this.w;\n        var reformattedTimescaleArray = this.formatDates(filteredTimeScale);\n        var removedOverlappingTS = this.removeOverlappingTS(reformattedTimescaleArray);\n\n        if (!inverted) {\n          w.globals.timelineLabels = removedOverlappingTS.slice();\n        } else {\n          w.globals.invertedTimelineLabels = removedOverlappingTS.slice();\n        } // at this stage, we need to re-calculate coords of the grid as timeline labels may have altered the xaxis labels coords\n        // The reason we can't do this prior to this stage is because timeline labels depends on gridWidth, and as the ticks are calculated based on available gridWidth, there can be unknown number of ticks generated for different minX and maxX\n        // Dependency on Dimensions(), need to refactor correctly\n        // TODO - find an alternate way to avoid calling this Heavy method twice\n\n\n        var dimensions = new Dimensions(this.ctx);\n        dimensions.plotCoords();\n      }\n    }, {\n      key: \"determineInterval\",\n      value: function determineInterval(daysDiff) {\n        switch (true) {\n          case daysDiff > 1825:\n            // difference is more than 5 years\n            this.tickInterval = 'years';\n            break;\n\n          case daysDiff > 800 && daysDiff <= 1825:\n            this.tickInterval = 'half_year';\n            break;\n\n          case daysDiff > 180 && daysDiff <= 800:\n            this.tickInterval = 'months';\n            break;\n\n          case daysDiff > 90 && daysDiff <= 180:\n            this.tickInterval = 'months_fortnight';\n            break;\n\n          case daysDiff > 60 && daysDiff <= 90:\n            this.tickInterval = 'months_days';\n            break;\n\n          case daysDiff > 30 && daysDiff <= 60:\n            this.tickInterval = 'week_days';\n            break;\n\n          case daysDiff > 2 && daysDiff <= 30:\n            this.tickInterval = 'days';\n            break;\n\n          case daysDiff > 0.1 && daysDiff <= 2:\n            // less than  2 days\n            this.tickInterval = 'hours';\n            break;\n\n          case daysDiff < 0.1:\n            this.tickInterval = 'minutes';\n            break;\n\n          default:\n            this.tickInterval = 'days';\n            break;\n        }\n      }\n    }, {\n      key: \"generateYearScale\",\n      value: function generateYearScale(params) {\n        var firstVal = params.firstVal,\n            currentMonth = params.currentMonth,\n            currentYear = params.currentYear,\n            daysWidthOnXAxis = params.daysWidthOnXAxis,\n            numberOfYears = params.numberOfYears;\n        var firstTickValue = firstVal.minYear;\n        var firstTickPosition = 0;\n        var dt = new DateTime(this.ctx);\n        var unit = 'year';\n\n        if (firstVal.minDate > 1 && firstVal.minMonth > 0) {\n          var remainingDays = dt.determineRemainingDaysOfYear(firstVal.minYear, firstVal.minMonth, firstVal.minDate); // remainingDaysofFirstMonth is used to reacht the 2nd tick position\n\n          var remainingDaysOfFirstYear = dt.determineDaysOfYear(firstVal.minYear) - remainingDays + 1; // calculate the first tick position\n\n          firstTickPosition = remainingDaysOfFirstYear * daysWidthOnXAxis;\n          firstTickValue = firstVal.minYear + 1; // push the first tick in the array\n\n          this.timeScaleArray.push({\n            position: firstTickPosition,\n            value: firstTickValue,\n            unit: unit,\n            year: firstTickValue,\n            month: Utils.monthMod(currentMonth + 1)\n          });\n        } else if (firstVal.minDate === 1 && firstVal.minMonth === 0) {\n          // push the first tick in the array\n          this.timeScaleArray.push({\n            position: firstTickPosition,\n            value: firstTickValue,\n            unit: unit,\n            year: currentYear,\n            month: Utils.monthMod(currentMonth + 1)\n          });\n        }\n\n        var year = firstTickValue;\n        var pos = firstTickPosition; // keep drawing rest of the ticks\n\n        for (var i = 0; i < numberOfYears; i++) {\n          year++;\n          pos = dt.determineDaysOfYear(year - 1) * daysWidthOnXAxis + pos;\n          this.timeScaleArray.push({\n            position: pos,\n            value: year,\n            unit: unit,\n            year: year,\n            month: 1\n          });\n        }\n      }\n    }, {\n      key: \"generateMonthScale\",\n      value: function generateMonthScale(params) {\n        var firstVal = params.firstVal,\n            currentMonthDate = params.currentMonthDate,\n            currentMonth = params.currentMonth,\n            currentYear = params.currentYear,\n            daysWidthOnXAxis = params.daysWidthOnXAxis,\n            numberOfMonths = params.numberOfMonths;\n        var firstTickValue = currentMonth;\n        var firstTickPosition = 0;\n        var dt = new DateTime(this.ctx);\n        var unit = 'month';\n        var yrCounter = 0;\n\n        if (firstVal.minDate > 1) {\n          // remainingDaysofFirstMonth is used to reacht the 2nd tick position\n          var remainingDaysOfFirstMonth = dt.determineDaysOfMonths(currentMonth + 1, firstVal.minYear) - currentMonthDate + 1; // calculate the first tick position\n\n          firstTickPosition = remainingDaysOfFirstMonth * daysWidthOnXAxis;\n          firstTickValue = Utils.monthMod(currentMonth + 1);\n          var year = currentYear + yrCounter;\n\n          var _month = Utils.monthMod(firstTickValue);\n\n          var value = firstTickValue; // it's Jan, so update the year\n\n          if (firstTickValue === 0) {\n            unit = 'year';\n            value = year;\n            _month = 1;\n            yrCounter += 1;\n            year = year + yrCounter;\n          } // push the first tick in the array\n\n\n          this.timeScaleArray.push({\n            position: firstTickPosition,\n            value: value,\n            unit: unit,\n            year: year,\n            month: _month\n          });\n        } else {\n          // push the first tick in the array\n          this.timeScaleArray.push({\n            position: firstTickPosition,\n            value: firstTickValue,\n            unit: unit,\n            year: currentYear,\n            month: Utils.monthMod(currentMonth)\n          });\n        }\n\n        var month = firstTickValue + 1;\n        var pos = firstTickPosition; // keep drawing rest of the ticks\n\n        for (var i = 0, j = 1; i < numberOfMonths; i++, j++) {\n          month = Utils.monthMod(month);\n\n          if (month === 0) {\n            unit = 'year';\n            yrCounter += 1;\n          } else {\n            unit = 'month';\n          }\n\n          var _year = currentYear + Math.floor(month / 12) + yrCounter;\n\n          pos = dt.determineDaysOfMonths(month, _year) * daysWidthOnXAxis + pos;\n          var monthVal = month === 0 ? _year : month;\n          this.timeScaleArray.push({\n            position: pos,\n            value: monthVal,\n            unit: unit,\n            year: _year,\n            month: month === 0 ? 1 : month\n          });\n          month++;\n        }\n      }\n    }, {\n      key: \"generateDayScale\",\n      value: function generateDayScale(params) {\n        var firstVal = params.firstVal,\n            currentMonth = params.currentMonth,\n            currentYear = params.currentYear,\n            hoursWidthOnXAxis = params.hoursWidthOnXAxis,\n            numberOfDays = params.numberOfDays;\n        var dt = new DateTime(this.ctx);\n        var unit = 'day';\n        var remainingHours = 24 - firstVal.minHour;\n        var yrCounter = 0; // calculate the first tick position\n\n        var firstTickPosition = remainingHours * hoursWidthOnXAxis;\n        var firstTickValue = firstVal.minDate + 1;\n        var val = firstTickValue;\n\n        var changeMonth = function changeMonth(dateVal, month, year) {\n          var monthdays = dt.determineDaysOfMonths(month + 1, year);\n\n          if (dateVal > monthdays) {\n            month = month + 1;\n            date = 1;\n            unit = 'month';\n            val = month;\n            return month;\n          }\n\n          return month;\n        };\n\n        var date = firstTickValue;\n        var month = changeMonth(date, currentMonth, currentYear); // push the first tick in the array\n\n        this.timeScaleArray.push({\n          position: firstTickPosition,\n          value: val,\n          unit: unit,\n          year: currentYear,\n          month: Utils.monthMod(month),\n          day: date\n        });\n        var pos = firstTickPosition; // keep drawing rest of the ticks\n\n        for (var i = 0; i < numberOfDays; i++) {\n          date += 1;\n          unit = 'day';\n          month = changeMonth(date, month, currentYear + Math.floor(month / 12) + yrCounter);\n          var year = currentYear + Math.floor(month / 12) + yrCounter;\n          pos = 24 * hoursWidthOnXAxis + pos;\n\n          var _val = date === 1 ? Utils.monthMod(month) : date;\n\n          this.timeScaleArray.push({\n            position: pos,\n            value: _val,\n            unit: unit,\n            year: year,\n            month: Utils.monthMod(month),\n            day: _val\n          });\n        }\n      }\n    }, {\n      key: \"generateHourScale\",\n      value: function generateHourScale(params) {\n        var firstVal = params.firstVal,\n            currentDate = params.currentDate,\n            currentMonth = params.currentMonth,\n            currentYear = params.currentYear,\n            minutesWidthOnXAxis = params.minutesWidthOnXAxis,\n            numberOfHours = params.numberOfHours;\n        var dt = new DateTime(this.ctx);\n        var yrCounter = 0;\n        var unit = 'hour';\n\n        var changeDate = function changeDate(dateVal, month) {\n          var monthdays = dt.determineDaysOfMonths(month + 1, currentYear);\n\n          if (dateVal > monthdays) {\n            date = 1;\n            month = month + 1;\n          }\n\n          return {\n            month: month,\n            date: date\n          };\n        };\n\n        var changeMonth = function changeMonth(dateVal, month) {\n          var monthdays = dt.determineDaysOfMonths(month + 1, currentYear);\n\n          if (dateVal > monthdays) {\n            month = month + 1;\n            return month;\n          }\n\n          return month;\n        };\n\n        var remainingMins = 60 - firstVal.minMinute;\n        var firstTickPosition = remainingMins * minutesWidthOnXAxis;\n        var firstTickValue = firstVal.minHour + 1;\n        var hour = firstTickValue + 1;\n\n        if (remainingMins === 60) {\n          firstTickPosition = 0;\n          firstTickValue = firstVal.minHour;\n          hour = firstTickValue + 1;\n        }\n\n        var date = currentDate;\n        var month = changeMonth(date, currentMonth); // push the first tick in the array\n\n        this.timeScaleArray.push({\n          position: firstTickPosition,\n          value: firstTickValue,\n          unit: unit,\n          day: date,\n          hour: hour,\n          year: currentYear,\n          month: Utils.monthMod(month)\n        });\n        var pos = firstTickPosition; // keep drawing rest of the ticks\n\n        for (var i = 0; i < numberOfHours; i++) {\n          unit = 'hour';\n\n          if (hour >= 24) {\n            hour = 0;\n            date += 1;\n            unit = 'day';\n            var checkNextMonth = changeDate(date, month);\n            month = checkNextMonth.month;\n            month = changeMonth(date, month);\n          }\n\n          var year = currentYear + Math.floor(month / 12) + yrCounter;\n          pos = hour === 0 && i === 0 ? remainingMins * minutesWidthOnXAxis : 60 * minutesWidthOnXAxis + pos;\n          var val = hour === 0 ? date : hour;\n          this.timeScaleArray.push({\n            position: pos,\n            value: val,\n            unit: unit,\n            hour: hour,\n            day: date,\n            year: year,\n            month: Utils.monthMod(month)\n          });\n          hour++;\n        }\n      }\n    }, {\n      key: \"generateMinuteScale\",\n      value: function generateMinuteScale(params) {\n        var firstVal = params.firstVal,\n            currentMinute = params.currentMinute,\n            currentHour = params.currentHour,\n            currentDate = params.currentDate,\n            currentMonth = params.currentMonth,\n            currentYear = params.currentYear,\n            minutesWidthOnXAxis = params.minutesWidthOnXAxis,\n            numberOfMinutes = params.numberOfMinutes;\n        var yrCounter = 0;\n        var unit = 'minute';\n        var remainingMins = currentMinute - firstVal.minMinute;\n        var firstTickPosition = minutesWidthOnXAxis - remainingMins;\n        var firstTickValue = firstVal.minMinute + 1;\n        var minute = firstTickValue + 1;\n        var date = currentDate;\n        var month = currentMonth;\n        var year = currentYear;\n        var hour = currentHour; // push the first tick in the array\n\n        this.timeScaleArray.push({\n          position: firstTickPosition,\n          value: firstTickValue,\n          unit: unit,\n          day: date,\n          hour: hour,\n          minute: minute,\n          year: year,\n          month: Utils.monthMod(month)\n        });\n        var pos = firstTickPosition; // keep drawing rest of the ticks\n\n        for (var i = 0; i < numberOfMinutes; i++) {\n          if (minute >= 60) {\n            minute = 0;\n            hour += 1;\n\n            if (hour === 24) {\n              hour = 0;\n            }\n          }\n\n          var _year2 = currentYear + Math.floor(month / 12) + yrCounter;\n\n          pos = minutesWidthOnXAxis + pos;\n          var val = minute;\n          this.timeScaleArray.push({\n            position: pos,\n            value: val,\n            unit: unit,\n            hour: hour,\n            minute: minute,\n            day: date,\n            year: _year2,\n            month: Utils.monthMod(month)\n          });\n          minute++;\n        }\n      }\n    }, {\n      key: \"createRawDateString\",\n      value: function createRawDateString(ts, value) {\n        var raw = ts.year;\n        raw += '-' + ('0' + ts.month.toString()).slice(-2); // unit is day\n\n        if (ts.unit === 'day') {\n          raw += ts.unit === 'day' ? '-' + ('0' + value).slice(-2) : '-01';\n        } else {\n          raw += '-' + ('0' + (ts.day ? ts.day : '1')).slice(-2);\n        } // unit is hour\n\n\n        if (ts.unit === 'hour') {\n          raw += ts.unit === 'hour' ? 'T' + ('0' + value).slice(-2) : 'T00';\n        } else {\n          raw += 'T' + ('0' + (ts.hour ? ts.hour : '0')).slice(-2);\n        } // unit is minute\n\n\n        raw += ts.unit === 'minute' ? ':' + ('0' + value).slice(-2) + ':00.000Z' : ':00:00.000Z';\n        return raw;\n      }\n    }, {\n      key: \"formatDates\",\n      value: function formatDates(filteredTimeScale) {\n        var _this2 = this;\n\n        var w = this.w;\n        var reformattedTimescaleArray = filteredTimeScale.map(function (ts) {\n          var value = ts.value.toString();\n          var dt = new DateTime(_this2.ctx);\n\n          var raw = _this2.createRawDateString(ts, value); // parse the whole ISO datestring\n\n\n          var dateString = new Date(Date.parse(raw));\n\n          if (w.config.xaxis.labels.format === undefined) {\n            var customFormat = 'dd MMM';\n            var dtFormatter = w.config.xaxis.labels.datetimeFormatter;\n            if (ts.unit === 'year') customFormat = dtFormatter.year;\n            if (ts.unit === 'month') customFormat = dtFormatter.month;\n            if (ts.unit === 'day') customFormat = dtFormatter.day;\n            if (ts.unit === 'hour') customFormat = dtFormatter.hour;\n            if (ts.unit === 'minute') customFormat = dtFormatter.minute;\n            value = dt.formatDate(dateString, customFormat, true, false);\n          } else {\n            value = dt.formatDate(dateString, w.config.xaxis.labels.format);\n          }\n\n          return {\n            dateString: raw,\n            position: ts.position,\n            value: value,\n            unit: ts.unit,\n            year: ts.year,\n            month: ts.month\n          };\n        });\n        return reformattedTimescaleArray;\n      }\n    }, {\n      key: \"removeOverlappingTS\",\n      value: function removeOverlappingTS(arr) {\n        var _this3 = this;\n\n        var graphics = new Graphics(this.ctx);\n        var lastDrawnIndex = 0;\n        var filteredArray = arr.map(function (item, index) {\n          if (index > 0 && _this3.w.config.xaxis.labels.hideOverlappingLabels) {\n            var prevLabelWidth = graphics.getTextRects(arr[lastDrawnIndex].value).width;\n            var prevPos = arr[lastDrawnIndex].position;\n            var pos = item.position;\n\n            if (pos > prevPos + prevLabelWidth + 10) {\n              lastDrawnIndex = index;\n              return item;\n            } else {\n              return null;\n            }\n          } else {\n            return item;\n          }\n        });\n        filteredArray = filteredArray.filter(function (f) {\n          return f !== null;\n        });\n        return filteredArray;\n      }\n    }]);\n\n    return TimeScale;\n  }();\n\n  /**\n   * ApexCharts Core Class responsible for major calculations and creating elements.\n   *\n   * @module Core\n   **/\n\n  var Core =\n  /*#__PURE__*/\n  function () {\n    function Core(el, ctx) {\n      _classCallCheck(this, Core);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n      this.el = el;\n      this.coreUtils = new CoreUtils(this.ctx);\n      this.twoDSeries = [];\n      this.threeDSeries = [];\n      this.twoDSeriesX = [];\n    } // get data and store into appropriate vars\n\n\n    _createClass(Core, [{\n      key: \"setupElements\",\n      value: function setupElements() {\n        var gl = this.w.globals;\n        var cnf = this.w.config; // const graphics = new Graphics(this.ctx)\n\n        var ct = cnf.chart.type;\n        var axisChartsArrTypes = ['line', 'area', 'bar', 'rangeBar', // 'rangeArea',\n        'candlestick', 'radar', 'scatter', 'bubble', 'heatmap'];\n        var xyChartsArrTypes = ['line', 'area', 'bar', 'rangeBar', // 'rangeArea',\n        'candlestick', 'scatter', 'bubble'];\n        gl.axisCharts = axisChartsArrTypes.indexOf(ct) > -1;\n        gl.xyCharts = xyChartsArrTypes.indexOf(ct) > -1;\n        gl.isBarHorizontal = (cnf.chart.type === 'bar' || cnf.chart.type === 'rangeBar') && cnf.plotOptions.bar.horizontal;\n        gl.chartClass = '.apexcharts' + gl.cuid;\n        gl.dom.baseEl = this.el;\n        gl.dom.elWrap = document.createElement('div');\n        Graphics.setAttrs(gl.dom.elWrap, {\n          id: gl.chartClass.substring(1),\n          class: 'apexcharts-canvas ' + gl.chartClass.substring(1)\n        });\n        this.el.appendChild(gl.dom.elWrap);\n        gl.dom.Paper = new window.SVG.Doc(gl.dom.elWrap);\n        gl.dom.Paper.attr({\n          class: 'apexcharts-svg',\n          'xmlns:data': 'ApexChartsNS',\n          transform: \"translate(\".concat(cnf.chart.offsetX, \", \").concat(cnf.chart.offsetY, \")\")\n        });\n        gl.dom.Paper.node.style.background = cnf.chart.background;\n        this.setSVGDimensions();\n        gl.dom.elGraphical = gl.dom.Paper.group().attr({\n          class: 'apexcharts-inner apexcharts-graphical'\n        });\n        gl.dom.elDefs = gl.dom.Paper.defs();\n        gl.dom.elLegendWrap = document.createElement('div');\n        gl.dom.elLegendWrap.classList.add('apexcharts-legend');\n        gl.dom.elWrap.appendChild(gl.dom.elLegendWrap); // gl.dom.Paper.add(gl.dom.elLegendWrap)\n\n        gl.dom.Paper.add(gl.dom.elGraphical);\n        gl.dom.elGraphical.add(gl.dom.elDefs);\n      }\n    }, {\n      key: \"plotChartType\",\n      value: function plotChartType(ser, xyRatios) {\n        var w = this.w;\n        var cnf = w.config;\n        var gl = w.globals;\n        var lineSeries = {\n          series: [],\n          i: []\n        };\n        var areaSeries = {\n          series: [],\n          i: []\n        };\n        var scatterSeries = {\n          series: [],\n          i: []\n        };\n        var columnSeries = {\n          series: [],\n          i: []\n        };\n        var candlestickSeries = {\n          series: [],\n          i: []\n        };\n        gl.series.map(function (series, st) {\n          // if user has specified a particular type for particular series\n          if (typeof ser[st].type !== 'undefined') {\n            if (ser[st].type === 'column' || ser[st].type === 'bar') {\n              w.config.plotOptions.bar.horizontal = false; // horizontal bars not supported in mixed charts, hence forcefully set to false\n\n              columnSeries.series.push(series);\n              columnSeries.i.push(st);\n            } else if (ser[st].type === 'area') {\n              areaSeries.series.push(series);\n              areaSeries.i.push(st);\n            } else if (ser[st].type === 'line') {\n              lineSeries.series.push(series);\n              lineSeries.i.push(st);\n            } else if (ser[st].type === 'scatter') {\n              scatterSeries.series.push(series);\n              scatterSeries.i.push(st);\n            } else if (ser[st].type === 'bubble') ; else if (ser[st].type === 'candlestick') {\n              candlestickSeries.series.push(series);\n              candlestickSeries.i.push(st);\n            } else {\n              // user has specified type, but it is not valid (other than line/area/column)\n              console.warn('You have specified an unrecognized chart type. Available types for this propery are line/area/column/bar/scatter/bubble');\n            }\n\n            gl.comboCharts = true;\n          } else {\n            lineSeries.series.push(series);\n            lineSeries.i.push(st);\n          }\n        });\n        var line = new Line(this.ctx, xyRatios);\n        var candlestick = new CandleStick(this.ctx, xyRatios);\n        var pie = new Pie(this.ctx);\n        var radialBar = new Radial(this.ctx);\n        var rangeBar = new RangeBar(this.ctx, xyRatios);\n        var radar = new Radar(this.ctx);\n        var elGraph = [];\n\n        if (gl.comboCharts) {\n          if (areaSeries.series.length > 0) {\n            elGraph.push(line.draw(areaSeries.series, 'area', areaSeries.i));\n          }\n\n          if (columnSeries.series.length > 0) {\n            if (w.config.chart.stacked) {\n              var barStacked = new BarStacked(this.ctx, xyRatios);\n              elGraph.push(barStacked.draw(columnSeries.series, columnSeries.i));\n            } else {\n              var bar = new Bar(this.ctx, xyRatios);\n              elGraph.push(bar.draw(columnSeries.series, columnSeries.i));\n            }\n          }\n\n          if (lineSeries.series.length > 0) {\n            elGraph.push(line.draw(lineSeries.series, 'line', lineSeries.i));\n          }\n\n          if (candlestickSeries.series.length > 0) {\n            elGraph.push(candlestick.draw(candlestickSeries.series, candlestickSeries.i));\n          }\n\n          if (scatterSeries.series.length > 0) {\n            var scatterLine = new Line(this.ctx, xyRatios, true);\n            elGraph.push(scatterLine.draw(scatterSeries.series, 'scatter', scatterSeries.i));\n          } // TODO: allow bubble series in a combo chart\n          // if (bubbleSeries.series.length > 0) {\n          //   const bubbleLine = new Line(this.ctx, xyRatios, true)\n          //   elGraph.push(\n          //     bubbleLine.draw(bubbleSeries.series, 'bubble', bubbleSeries.i)\n          //   )\n          // }\n\n        } else {\n          switch (cnf.chart.type) {\n            case 'line':\n              elGraph = line.draw(gl.series, 'line');\n              break;\n\n            case 'area':\n              elGraph = line.draw(gl.series, 'area');\n              break;\n\n            case 'bar':\n              if (cnf.chart.stacked) {\n                var _barStacked = new BarStacked(this.ctx, xyRatios);\n\n                elGraph = _barStacked.draw(gl.series);\n              } else {\n                var _bar = new Bar(this.ctx, xyRatios);\n\n                elGraph = _bar.draw(gl.series);\n              }\n\n              break;\n\n            case 'candlestick':\n              var candleStick = new CandleStick(this.ctx, xyRatios);\n              elGraph = candleStick.draw(gl.series);\n              break;\n\n            case 'rangeBar':\n              elGraph = rangeBar.draw(gl.series);\n              break;\n\n            case 'heatmap':\n              var heatmap = new HeatMap(this.ctx, xyRatios);\n              elGraph = heatmap.draw(gl.series);\n              break;\n\n            case 'pie':\n            case 'donut':\n              elGraph = pie.draw(gl.series);\n              break;\n\n            case 'radialBar':\n              elGraph = radialBar.draw(gl.series);\n              break;\n\n            case 'radar':\n              elGraph = radar.draw(gl.series);\n              break;\n\n            default:\n              elGraph = line.draw(gl.series);\n          }\n        }\n\n        return elGraph;\n      }\n    }, {\n      key: \"setSVGDimensions\",\n      value: function setSVGDimensions() {\n        var gl = this.w.globals;\n        var cnf = this.w.config;\n        gl.svgWidth = cnf.chart.width;\n        gl.svgHeight = cnf.chart.height;\n        var elDim = Utils.getDimensions(this.el);\n        var widthUnit = cnf.chart.width.toString().split(/[0-9]+/g).pop();\n\n        if (widthUnit === '%') {\n          if (Utils.isNumber(elDim[0])) {\n            if (elDim[0].width === 0) {\n              elDim = Utils.getDimensions(this.el.parentNode);\n            }\n\n            gl.svgWidth = elDim[0] * parseInt(cnf.chart.width) / 100;\n          }\n        } else if (widthUnit === 'px' || widthUnit === '') {\n          gl.svgWidth = parseInt(cnf.chart.width);\n        }\n\n        if (gl.svgHeight !== 'auto' && gl.svgHeight !== '') {\n          var heightUnit = cnf.chart.height.toString().split(/[0-9]+/g).pop();\n\n          if (heightUnit === '%') {\n            var elParentDim = Utils.getDimensions(this.el.parentNode);\n            gl.svgHeight = elParentDim[1] * parseInt(cnf.chart.height) / 100;\n          } else {\n            gl.svgHeight = parseInt(cnf.chart.height);\n          }\n        } else {\n          if (gl.axisCharts) {\n            gl.svgHeight = gl.svgWidth / 1.61;\n          } else {\n            gl.svgHeight = gl.svgWidth;\n          }\n        }\n\n        if (gl.svgWidth < 0) gl.svgWidth = 0;\n        if (gl.svgHeight < 0) gl.svgHeight = 0;\n        Graphics.setAttrs(gl.dom.Paper.node, {\n          width: gl.svgWidth,\n          height: gl.svgHeight\n        }); // gl.dom.Paper.node.parentNode.parentNode.style.minWidth = gl.svgWidth + \"px\";\n\n        var offsetY = cnf.chart.sparkline.enabled ? 0 : gl.axisCharts ? cnf.chart.parentHeightOffset : 0;\n        gl.dom.Paper.node.parentNode.parentNode.style.minHeight = gl.svgHeight + offsetY + 'px';\n        gl.dom.elWrap.style.width = gl.svgWidth + 'px';\n        gl.dom.elWrap.style.height = gl.svgHeight + 'px';\n      }\n    }, {\n      key: \"shiftGraphPosition\",\n      value: function shiftGraphPosition() {\n        var gl = this.w.globals;\n        var tY = gl.translateY;\n        var tX = gl.translateX;\n        var scalingAttrs = {\n          transform: 'translate(' + tX + ', ' + tY + ')'\n        };\n        Graphics.setAttrs(gl.dom.elGraphical.node, scalingAttrs);\n      } // To prevent extra spacings in the bottom of the chart, we need to recalculate the height for pie/donut/radialbar charts\n\n    }, {\n      key: \"resizeNonAxisCharts\",\n      value: function resizeNonAxisCharts() {\n        var w = this.w;\n        var gl = w.globals;\n        var legendHeight = 0;\n        var offY = 20;\n\n        if (w.config.legend.position === 'top' || w.config.legend.position === 'bottom') {\n          legendHeight = new Legend(this.ctx).getLegendBBox().clwh + 10;\n        }\n\n        var radialEl = w.globals.dom.baseEl.querySelector('.apexcharts-radialbar');\n        var elRadialSize = w.globals.radialSize * 2;\n\n        if (radialEl && w.config.plotOptions.radialBar.startAngle !== -90) {\n          elRadialSize = Utils.getBoundingClientRect(radialEl).height;\n        }\n\n        var chartInnerDimensions = Math.max(elRadialSize, w.globals.radialSize * 2);\n        var newHeight = chartInnerDimensions + gl.translateY + legendHeight + offY;\n\n        if (gl.dom.elLegendForeign) {\n          gl.dom.elLegendForeign.setAttribute('height', newHeight);\n        }\n\n        gl.dom.elWrap.style.height = newHeight + 'px';\n        Graphics.setAttrs(gl.dom.Paper.node, {\n          height: newHeight\n        });\n        gl.dom.Paper.node.parentNode.parentNode.style.minHeight = newHeight + 'px';\n      }\n      /*\n       ** All the calculations for setting range in charts will be done here\n       */\n\n    }, {\n      key: \"coreCalculations\",\n      value: function coreCalculations() {\n        var range = new Range$1(this.ctx);\n        range.init();\n      }\n    }, {\n      key: \"resetGlobals\",\n      value: function resetGlobals() {\n        var _this = this;\n\n        var gl = this.w.globals;\n        gl.series = [];\n        gl.seriesCandleO = [];\n        gl.seriesCandleH = [];\n        gl.seriesCandleL = [];\n        gl.seriesCandleC = [];\n        gl.seriesRangeStart = [];\n        gl.seriesRangeEnd = [];\n        gl.seriesPercent = [];\n        gl.seriesX = [];\n        gl.seriesZ = [];\n        gl.seriesNames = [];\n        gl.seriesTotals = [];\n        gl.stackedSeriesTotals = [];\n        gl.labels = [];\n        gl.timelineLabels = [];\n        gl.noLabelsProvided = false;\n        gl.timescaleTicks = [];\n        gl.resizeTimer = null;\n        gl.selectionResizeTimer = null;\n\n        gl.seriesXvalues = function () {\n          return _this.w.config.series.map(function (s) {\n            return [];\n          });\n        }();\n\n        gl.seriesYvalues = function () {\n          return _this.w.config.series.map(function (s) {\n            return [];\n          });\n        }();\n\n        gl.delayedElements = [];\n        gl.pointsArray = [];\n        gl.dataLabelsRects = [];\n        gl.isXNumeric = false;\n        gl.isDataXYZ = false;\n        gl.maxY = -Number.MAX_VALUE;\n        gl.minY = Number.MIN_VALUE;\n        gl.minYArr = [];\n        gl.maxYArr = [];\n        gl.maxX = -Number.MAX_VALUE;\n        gl.minX = Number.MAX_VALUE;\n        gl.initialmaxX = -Number.MAX_VALUE;\n        gl.initialminX = Number.MAX_VALUE;\n        gl.maxDate = 0;\n        gl.minDate = Number.MAX_VALUE;\n        gl.minZ = Number.MAX_VALUE;\n        gl.maxZ = -Number.MAX_VALUE;\n        gl.minXDiff = Number.MAX_VALUE;\n        gl.yAxisScale = [];\n        gl.xAxisScale = null;\n        gl.xAxisTicksPositions = [];\n        gl.yLabelsCoords = [];\n        gl.yTitleCoords = [];\n        gl.xRange = 0;\n        gl.yRange = [];\n        gl.zRange = 0;\n        gl.dataPoints = 0;\n      }\n    }, {\n      key: \"isMultipleY\",\n      value: function isMultipleY() {\n        // user has supplied an array in yaxis property. So, turn on multipleYAxis flag\n        if (this.w.config.yaxis.constructor === Array && this.w.config.yaxis.length > 1) {\n          this.w.globals.isMultipleYAxis = true;\n          return true;\n        }\n      }\n    }, {\n      key: \"excludeCollapsedSeriesInYAxis\",\n      value: function excludeCollapsedSeriesInYAxis() {\n        var _this2 = this;\n\n        var w = this.w;\n        w.globals.ignoreYAxisIndexes = w.globals.collapsedSeries.map(function (collapsed, i) {\n          if (_this2.w.globals.isMultipleYAxis) {\n            return collapsed.index;\n          }\n        });\n      }\n    }, {\n      key: \"isMultiFormat\",\n      value: function isMultiFormat() {\n        return this.isFormatXY() || this.isFormat2DArray();\n      } // given format is [{x, y}, {x, y}]\n\n    }, {\n      key: \"isFormatXY\",\n      value: function isFormatXY() {\n        var series = this.w.config.series.slice();\n        var sr = new Series(this.ctx);\n        this.activeSeriesIndex = sr.getActiveConfigSeriesIndex();\n\n        if (typeof series[this.activeSeriesIndex].data !== 'undefined' && series[this.activeSeriesIndex].data.length > 0 && series[this.activeSeriesIndex].data[0] !== null && typeof series[this.activeSeriesIndex].data[0].x !== 'undefined' && series[this.activeSeriesIndex].data[0] !== null) {\n          return true;\n        }\n      } // given format is [[x, y], [x, y]]\n\n    }, {\n      key: \"isFormat2DArray\",\n      value: function isFormat2DArray() {\n        var series = this.w.config.series.slice();\n        var sr = new Series(this.ctx);\n        this.activeSeriesIndex = sr.getActiveConfigSeriesIndex();\n\n        if (typeof series[this.activeSeriesIndex].data !== 'undefined' && series[this.activeSeriesIndex].data.length > 0 && typeof series[this.activeSeriesIndex].data[0] !== 'undefined' && series[this.activeSeriesIndex].data[0] !== null && series[this.activeSeriesIndex].data[0].constructor === Array) {\n          return true;\n        }\n      }\n    }, {\n      key: \"handleFormat2DArray\",\n      value: function handleFormat2DArray(ser, i) {\n        var cnf = this.w.config;\n        var gl = this.w.globals;\n\n        for (var j = 0; j < ser[i].data.length; j++) {\n          if (typeof ser[i].data[j][1] !== 'undefined') {\n            if (Array.isArray(ser[i].data[j][1]) && ser[i].data[j][1].length === 4) {\n              this.twoDSeries.push(Utils.parseNumber(ser[i].data[j][1][3]));\n            } else {\n              this.twoDSeries.push(Utils.parseNumber(ser[i].data[j][1]));\n            }\n\n            gl.dataFormatXNumeric = true;\n          }\n\n          if (cnf.xaxis.type === 'datetime') {\n            // if timestamps are provided and xaxis type is datettime,\n            var ts = new Date(ser[i].data[j][0]);\n            ts = new Date(ts).getTime();\n            this.twoDSeriesX.push(ts);\n          } else {\n            this.twoDSeriesX.push(ser[i].data[j][0]);\n          }\n        }\n\n        for (var _j = 0; _j < ser[i].data.length; _j++) {\n          if (typeof ser[i].data[_j][2] !== 'undefined') {\n            this.threeDSeries.push(ser[i].data[_j][2]);\n            gl.isDataXYZ = true;\n          }\n        }\n      }\n    }, {\n      key: \"handleFormatXY\",\n      value: function handleFormatXY(ser, i) {\n        var cnf = this.w.config;\n        var gl = this.w.globals;\n        var dt = new DateTime(this.ctx);\n        var activeI = i;\n\n        if (gl.collapsedSeriesIndices.indexOf(i) > -1) {\n          // fix #368\n          activeI = this.activeSeriesIndex;\n        } // get series\n\n\n        for (var j = 0; j < ser[i].data.length; j++) {\n          if (typeof ser[i].data[j].y !== 'undefined') {\n            if (Array.isArray(ser[i].data[j].y)) {\n              this.twoDSeries.push(Utils.parseNumber(ser[i].data[j].y[ser[i].data[j].y.length - 1]));\n            } else {\n              this.twoDSeries.push(Utils.parseNumber(ser[i].data[j].y));\n            }\n          }\n        } // get seriesX\n\n\n        for (var _j2 = 0; _j2 < ser[activeI].data.length; _j2++) {\n          var isXString = typeof ser[activeI].data[_j2].x === 'string';\n          var isXDate = !!dt.isValidDate(ser[activeI].data[_j2].x.toString());\n\n          if (isXString || isXDate) {\n            // user supplied '01/01/2017' or a date string (a JS date object is not supported)\n            if (isXString) {\n              if (cnf.xaxis.type === 'datetime' && !gl.isRangeData) {\n                this.twoDSeriesX.push(dt.parseDate(ser[activeI].data[_j2].x));\n              } else {\n                // a category and not a numeric x value\n                this.fallbackToCategory = true;\n                this.twoDSeriesX.push(ser[activeI].data[_j2].x);\n              }\n            } else {\n              if (cnf.xaxis.type === 'datetime') {\n                this.twoDSeriesX.push(dt.parseDate(ser[activeI].data[_j2].x.toString()));\n              } else {\n                gl.dataFormatXNumeric = true;\n                gl.isXNumeric = true;\n                this.twoDSeriesX.push(parseFloat(ser[activeI].data[_j2].x));\n              }\n            }\n          } else {\n            // a numeric value in x property\n            gl.isXNumeric = true;\n            gl.dataFormatXNumeric = true;\n            this.twoDSeriesX.push(ser[activeI].data[_j2].x);\n          }\n        }\n\n        if (ser[i].data[0] && typeof ser[i].data[0].z !== 'undefined') {\n          for (var t = 0; t < ser[i].data.length; t++) {\n            this.threeDSeries.push(ser[i].data[t].z);\n          }\n\n          gl.isDataXYZ = true;\n        }\n      }\n    }, {\n      key: \"handleRangeData\",\n      value: function handleRangeData(ser, i) {\n        var gl = this.w.globals;\n        var range = {};\n\n        if (this.isFormat2DArray()) {\n          range = this.handleRangeDataFormat('array', ser, i);\n        } else if (this.isFormatXY()) {\n          range = this.handleRangeDataFormat('xy', ser, i);\n        }\n\n        gl.seriesRangeStart.push(range.start);\n        gl.seriesRangeEnd.push(range.end);\n        return range;\n      }\n    }, {\n      key: \"handleCandleStickData\",\n      value: function handleCandleStickData(ser, i) {\n        var gl = this.w.globals;\n        var ohlc = {};\n\n        if (this.isFormat2DArray()) {\n          ohlc = this.handleCandleStickDataFormat('array', ser, i);\n        } else if (this.isFormatXY()) {\n          ohlc = this.handleCandleStickDataFormat('xy', ser, i);\n        }\n\n        gl.seriesCandleO.push(ohlc.o);\n        gl.seriesCandleH.push(ohlc.h);\n        gl.seriesCandleL.push(ohlc.l);\n        gl.seriesCandleC.push(ohlc.c);\n        return ohlc;\n      }\n    }, {\n      key: \"handleRangeDataFormat\",\n      value: function handleRangeDataFormat(format, ser, i) {\n        var rangeStart = [];\n        var rangeEnd = [];\n        var err = 'Please provide [Start, End] values in valid format. Read more https://apexcharts.com/docs/series/#rangecharts';\n        var serObj = new Series(this.ctx);\n        var activeIndex = serObj.getActiveConfigSeriesIndex();\n\n        if (format === 'array') {\n          if (ser[activeIndex].data[0][1].length !== 2) {\n            throw new Error(err);\n          }\n\n          for (var j = 0; j < ser[i].data.length; j++) {\n            rangeStart.push(ser[i].data[j][1][0]);\n            rangeEnd.push(ser[i].data[j][1][1]);\n          }\n        } else if (format === 'xy') {\n          if (ser[activeIndex].data[0].y.length !== 2) {\n            throw new Error(err);\n          }\n\n          for (var _j3 = 0; _j3 < ser[i].data.length; _j3++) {\n            rangeStart.push(ser[i].data[_j3].y[0]);\n            rangeEnd.push(ser[i].data[_j3].y[1]);\n          }\n        }\n\n        return {\n          start: rangeStart,\n          end: rangeEnd\n        };\n      }\n    }, {\n      key: \"handleCandleStickDataFormat\",\n      value: function handleCandleStickDataFormat(format, ser, i) {\n        var serO = [];\n        var serH = [];\n        var serL = [];\n        var serC = [];\n        var err = 'Please provide [Open, High, Low and Close] values in valid format. Read more https://apexcharts.com/docs/series/#candlestick';\n\n        if (format === 'array') {\n          if (ser[i].data[0][1].length !== 4) {\n            throw new Error(err);\n          }\n\n          for (var j = 0; j < ser[i].data.length; j++) {\n            serO.push(ser[i].data[j][1][0]);\n            serH.push(ser[i].data[j][1][1]);\n            serL.push(ser[i].data[j][1][2]);\n            serC.push(ser[i].data[j][1][3]);\n          }\n        } else if (format === 'xy') {\n          if (ser[i].data[0].y.length !== 4) {\n            throw new Error(err);\n          }\n\n          for (var _j4 = 0; _j4 < ser[i].data.length; _j4++) {\n            serO.push(ser[i].data[_j4].y[0]);\n            serH.push(ser[i].data[_j4].y[1]);\n            serL.push(ser[i].data[_j4].y[2]);\n            serC.push(ser[i].data[_j4].y[3]);\n          }\n        }\n\n        return {\n          o: serO,\n          h: serH,\n          l: serL,\n          c: serC\n        };\n      }\n    }, {\n      key: \"parseDataAxisCharts\",\n      value: function parseDataAxisCharts(ser) {\n        var ctx = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.ctx;\n        var cnf = this.w.config;\n        var gl = this.w.globals;\n        var dt = new DateTime(ctx);\n\n        for (var i = 0; i < ser.length; i++) {\n          this.twoDSeries = [];\n          this.twoDSeriesX = [];\n          this.threeDSeries = [];\n\n          if (typeof ser[i].data === 'undefined') {\n            console.error(\"It is a possibility that you may have not included 'data' property in series.\");\n            return;\n          }\n\n          if (cnf.chart.type === 'rangeBar' || cnf.chart.type === 'rangeArea' || ser[i].type === 'rangeBar' || ser[i].type === 'rangeArea') {\n            gl.isRangeData = true;\n            this.handleRangeData(ser, i);\n          }\n\n          if (this.isMultiFormat()) {\n            if (this.isFormat2DArray()) {\n              this.handleFormat2DArray(ser, i);\n            } else if (this.isFormatXY()) {\n              this.handleFormatXY(ser, i);\n            }\n\n            if (cnf.chart.type === 'candlestick' || ser[i].type === 'candlestick') {\n              this.handleCandleStickData(ser, i);\n            }\n\n            gl.series.push(this.twoDSeries);\n            gl.labels.push(this.twoDSeriesX);\n            gl.seriesX.push(this.twoDSeriesX);\n\n            if (!this.fallbackToCategory) {\n              gl.isXNumeric = true;\n            }\n          } else {\n            if (cnf.xaxis.type === 'datetime') {\n              // user didn't supplied [{x,y}] or [[x,y]], but single array in data.\n              // Also labels/categories were supplied differently\n              gl.isXNumeric = true;\n              var dates = cnf.labels.length > 0 ? cnf.labels.slice() : cnf.xaxis.categories.slice();\n\n              for (var j = 0; j < dates.length; j++) {\n                if (typeof dates[j] === 'string') {\n                  // user provided date strings\n                  var isDate = dt.isValidDate(dates[j]);\n\n                  if (isDate) {\n                    this.twoDSeriesX.push(dt.parseDate(dates[j]));\n                  } else {\n                    throw new Error('You have provided invalid Date format. Please provide a valid JavaScript Date');\n                  }\n                } else {\n                  // user provided timestamps\n                  if (String(dates[j]).length !== 13) {\n                    throw new Error('Please provide a valid JavaScript timestamp');\n                  } else {\n                    this.twoDSeriesX.push(dates[j]);\n                  }\n                }\n              }\n\n              gl.seriesX.push(this.twoDSeriesX);\n            } else if (cnf.xaxis.type === 'numeric') {\n              gl.isXNumeric = true;\n              var x = cnf.labels.length > 0 ? cnf.labels.slice() : cnf.xaxis.categories.slice();\n\n              if (x.length > 0) {\n                this.twoDSeriesX = x;\n                gl.seriesX.push(this.twoDSeriesX);\n              }\n            }\n\n            gl.labels.push(this.twoDSeriesX);\n            var singleArray = ser[i].data.map(function (d) {\n              return Utils.parseNumber(d);\n            });\n            gl.series.push(singleArray);\n          }\n\n          gl.seriesZ.push(this.threeDSeries);\n\n          if (ser[i].name !== undefined) {\n            gl.seriesNames.push(ser[i].name);\n          } else {\n            gl.seriesNames.push('series-' + parseInt(i + 1));\n          }\n        }\n\n        return this.w;\n      }\n    }, {\n      key: \"parseDataNonAxisCharts\",\n      value: function parseDataNonAxisCharts(ser) {\n        var gl = this.w.globals;\n        var cnf = this.w.config;\n        gl.series = ser.slice();\n        gl.seriesNames = cnf.labels.slice();\n\n        for (var i = 0; i < gl.series.length; i++) {\n          if (gl.seriesNames[i] === undefined) {\n            gl.seriesNames.push('series-' + (i + 1));\n          }\n        }\n\n        return this.w;\n      }\n      /** User possibly set string categories in xaxis.categories or labels prop\n       * Or didn't set xaxis labels at all - in which case we manually do it.\n       * If user passed series data as [[3, 2], [4, 5]] or [{ x: 3, y: 55 }],\n       * this shouldn't be called\n       * @param {array} ser - the series which user passed to the config\n       */\n\n    }, {\n      key: \"handleExternalLabelsData\",\n      value: function handleExternalLabelsData(ser) {\n        var cnf = this.w.config;\n        var gl = this.w.globals;\n\n        if (cnf.xaxis.categories.length > 0) {\n          // user provided labels in xaxis.category prop\n          gl.labels = cnf.xaxis.categories;\n        } else if (cnf.labels.length > 0) {\n          // user provided labels in labels props\n          gl.labels = cnf.labels.slice();\n        } else if (this.fallbackToCategory) {\n          // user provided labels in x prop in [{ x: 3, y: 55 }] data, and those labels are already stored in gl.labels[0], so just re-arrange the gl.labels array\n          gl.labels = gl.labels[0];\n        } else {\n          // user didn't provided any labels, fallback to 1-2-3-4-5\n          var labelArr = [];\n\n          if (gl.axisCharts) {\n            // for axis charts, we get the longest series and create labels from it\n            if (gl.series.length > 0) {\n              for (var i = 0; i < gl.series[gl.maxValsInArrayIndex].length; i++) {\n                labelArr.push(i + 1);\n              }\n            } // create gl.seriesX as it will be used in calculations of x positions\n\n\n            for (var _i = 0; _i < ser.length; _i++) {\n              gl.seriesX.push(labelArr);\n            } // turn on the isXNumeric flag to allow minX and maxX to function properly\n\n\n            gl.isXNumeric = true;\n          } // no series to pull labels from, put a 0-10 series\n          // possibly, user collapsed all series. Hence we can't work with above calc\n\n\n          if (labelArr.length === 0) {\n            labelArr = [0, 10];\n\n            for (var _i2 = 0; _i2 < ser.length; _i2++) {\n              gl.seriesX.push(labelArr);\n            }\n          } // Finally, pass the labelArr in gl.labels which will be printed on x-axis\n\n\n          gl.labels = labelArr; // Turn on this global flag to indicate no labels were provided by user\n\n          gl.noLabelsProvided = true;\n        }\n      } // Segregate user provided data into appropriate vars\n\n    }, {\n      key: \"parseData\",\n      value: function parseData(ser) {\n        var w = this.w;\n        var cnf = w.config;\n        var gl = w.globals;\n        this.excludeCollapsedSeriesInYAxis(); // If we detected string in X prop of series, we fallback to category x-axis\n\n        this.fallbackToCategory = false;\n        this.resetGlobals();\n        this.isMultipleY();\n\n        if (gl.axisCharts) {\n          // axisCharts includes line / area / column / scatter\n          this.parseDataAxisCharts(ser);\n        } else {\n          // non-axis charts are pie / donut\n          this.parseDataNonAxisCharts(ser);\n        }\n\n        this.coreUtils.getLargestSeries(); // set Null values to 0 in all series when user hides/shows some series\n\n        if (cnf.chart.type === 'bar' && cnf.chart.stacked) {\n          var series = new Series(this.ctx);\n          gl.series = series.setNullSeriesToZeroValues(gl.series);\n        }\n\n        this.coreUtils.getSeriesTotals();\n\n        if (gl.axisCharts) {\n          this.coreUtils.getStackedSeriesTotals();\n        }\n\n        this.coreUtils.getPercentSeries();\n\n        if (!gl.dataFormatXNumeric && (!gl.isXNumeric || cnf.xaxis.type === 'numeric' && cnf.labels.length === 0 && cnf.xaxis.categories.length === 0)) {\n          // x-axis labels couldn't be detected; hence try searching every option in config\n          this.handleExternalLabelsData(ser);\n        }\n      }\n    }, {\n      key: \"xySettings\",\n      value: function xySettings() {\n        var xyRatios = null;\n        var w = this.w;\n\n        if (w.globals.axisCharts) {\n          if (w.config.xaxis.crosshairs.position === 'back') {\n            var crosshairs = new Crosshairs(this.ctx);\n            crosshairs.drawXCrosshairs();\n          }\n\n          if (w.config.yaxis[0].crosshairs.position === 'back') {\n            var _crosshairs = new Crosshairs(this.ctx);\n\n            _crosshairs.drawYCrosshairs();\n          }\n\n          xyRatios = this.coreUtils.getCalculatedRatios();\n\n          if (w.config.xaxis.type === 'datetime' && w.config.xaxis.labels.formatter === undefined) {\n            var ts = new TimeScale(this.ctx);\n            var formattedTimeScale;\n\n            if (isFinite(w.globals.minX) && isFinite(w.globals.maxX) && !w.globals.isBarHorizontal) {\n              formattedTimeScale = ts.calculateTimeScaleTicks(w.globals.minX, w.globals.maxX);\n              ts.recalcDimensionsBasedOnFormat(formattedTimeScale, false);\n            } else if (w.globals.isBarHorizontal) {\n              formattedTimeScale = ts.calculateTimeScaleTicks(w.globals.minY, w.globals.maxY);\n              ts.recalcDimensionsBasedOnFormat(formattedTimeScale, true);\n            }\n          }\n        }\n\n        return xyRatios;\n      }\n    }, {\n      key: \"drawAxis\",\n      value: function drawAxis(type, xyRatios) {\n        var gl = this.w.globals;\n        var cnf = this.w.config;\n        var xAxis = new XAxis(this.ctx);\n        var yAxis = new YAxis(this.ctx);\n\n        if (gl.axisCharts && type !== 'radar') {\n          var elXaxis, elYaxis;\n\n          if (gl.isBarHorizontal) {\n            elYaxis = yAxis.drawYaxisInversed(0);\n            elXaxis = xAxis.drawXaxisInversed(0);\n            gl.dom.elGraphical.add(elXaxis);\n            gl.dom.elGraphical.add(elYaxis);\n          } else {\n            elXaxis = xAxis.drawXaxis();\n            gl.dom.elGraphical.add(elXaxis);\n            cnf.yaxis.map(function (yaxe, index) {\n              if (gl.ignoreYAxisIndexes.indexOf(index) === -1) {\n                elYaxis = yAxis.drawYaxis(index);\n                gl.dom.Paper.add(elYaxis);\n              }\n            });\n          }\n        }\n\n        cnf.yaxis.map(function (yaxe, index) {\n          if (gl.ignoreYAxisIndexes.indexOf(index) === -1) {\n            yAxis.yAxisTitleRotate(index, yaxe.opposite);\n          }\n        });\n      }\n    }, {\n      key: \"setupBrushHandler\",\n      value: function setupBrushHandler() {\n        var _this3 = this;\n\n        var w = this.w; // only for brush charts\n\n        if (!w.config.chart.brush.enabled) {\n          return;\n        } // if user has not defined a custom function for selection - we handle the brush chart\n        // otherwise we leave it to the user to define the functionality for selection\n\n\n        if (typeof w.config.chart.events.selection !== 'function') {\n          var targets = w.config.chart.brush.targets || [w.config.chart.brush.target]; // retro compatibility with single target option\n\n          targets.forEach(function (target) {\n            var targetChart = ApexCharts.getChartByID(target);\n            targetChart.w.globals.brushSource = _this3.ctx;\n\n            var updateSourceChart = function updateSourceChart() {\n              _this3.ctx._updateOptions({\n                chart: {\n                  selection: {\n                    xaxis: {\n                      min: targetChart.w.globals.minX,\n                      max: targetChart.w.globals.maxX\n                    }\n                  }\n                }\n              }, false, false);\n            };\n\n            if (typeof targetChart.w.config.chart.events.zoomed !== 'function') {\n              targetChart.w.config.chart.events.zoomed = function () {\n                updateSourceChart();\n              };\n            }\n\n            if (typeof targetChart.w.config.chart.events.scrolled !== 'function') {\n              targetChart.w.config.chart.events.scrolled = function () {\n                updateSourceChart();\n              };\n            }\n          });\n\n          w.config.chart.events.selection = function (chart, e) {\n            targets.forEach(function (target) {\n              var targetChart = ApexCharts.getChartByID(target);\n              var yaxis = Utils.clone(w.config.yaxis);\n\n              if (w.config.chart.brush.autoScaleYaxis) {\n                var scale = new Range(targetChart);\n                yaxis = scale.autoScaleY(targetChart, yaxis, e);\n              }\n\n              targetChart._updateOptions({\n                xaxis: {\n                  min: e.xaxis.min,\n                  max: e.xaxis.max\n                },\n                yaxis: yaxis\n              }, false, false, false, false);\n            });\n          };\n        }\n      }\n    }]);\n\n    return Core;\n  }();\n\n  /**\n   * @this {Promise}\n   */\n  function finallyConstructor(callback) {\n    var constructor = this.constructor;\n    return this.then(\n      function(value) {\n        return constructor.resolve(callback()).then(function() {\n          return value;\n        });\n      },\n      function(reason) {\n        return constructor.resolve(callback()).then(function() {\n          return constructor.reject(reason);\n        });\n      }\n    );\n  }\n\n  // Store setTimeout reference so promise-polyfill will be unaffected by\n  // other code modifying setTimeout (like sinon.useFakeTimers())\n  var setTimeoutFunc = setTimeout;\n\n  function noop() {}\n\n  // Polyfill for Function.prototype.bind\n  function bind(fn, thisArg) {\n    return function() {\n      fn.apply(thisArg, arguments);\n    };\n  }\n\n  /**\n   * @constructor\n   * @param {Function} fn\n   */\n  function Promise$1(fn) {\n    if (!(this instanceof Promise$1))\n      throw new TypeError('Promises must be constructed via new');\n    if (typeof fn !== 'function') throw new TypeError('not a function');\n    /** @type {!number} */\n    this._state = 0;\n    /** @type {!boolean} */\n    this._handled = false;\n    /** @type {Promise|undefined} */\n    this._value = undefined;\n    /** @type {!Array<!Function>} */\n    this._deferreds = [];\n\n    doResolve(fn, this);\n  }\n\n  function handle(self, deferred) {\n    while (self._state === 3) {\n      self = self._value;\n    }\n    if (self._state === 0) {\n      self._deferreds.push(deferred);\n      return;\n    }\n    self._handled = true;\n    Promise$1._immediateFn(function() {\n      var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;\n      if (cb === null) {\n        (self._state === 1 ? resolve : reject)(deferred.promise, self._value);\n        return;\n      }\n      var ret;\n      try {\n        ret = cb(self._value);\n      } catch (e) {\n        reject(deferred.promise, e);\n        return;\n      }\n      resolve(deferred.promise, ret);\n    });\n  }\n\n  function resolve(self, newValue) {\n    try {\n      // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure\n      if (newValue === self)\n        throw new TypeError('A promise cannot be resolved with itself.');\n      if (\n        newValue &&\n        (typeof newValue === 'object' || typeof newValue === 'function')\n      ) {\n        var then = newValue.then;\n        if (newValue instanceof Promise$1) {\n          self._state = 3;\n          self._value = newValue;\n          finale(self);\n          return;\n        } else if (typeof then === 'function') {\n          doResolve(bind(then, newValue), self);\n          return;\n        }\n      }\n      self._state = 1;\n      self._value = newValue;\n      finale(self);\n    } catch (e) {\n      reject(self, e);\n    }\n  }\n\n  function reject(self, newValue) {\n    self._state = 2;\n    self._value = newValue;\n    finale(self);\n  }\n\n  function finale(self) {\n    if (self._state === 2 && self._deferreds.length === 0) {\n      Promise$1._immediateFn(function() {\n        if (!self._handled) {\n          Promise$1._unhandledRejectionFn(self._value);\n        }\n      });\n    }\n\n    for (var i = 0, len = self._deferreds.length; i < len; i++) {\n      handle(self, self._deferreds[i]);\n    }\n    self._deferreds = null;\n  }\n\n  /**\n   * @constructor\n   */\n  function Handler(onFulfilled, onRejected, promise) {\n    this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n    this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n    this.promise = promise;\n  }\n\n  /**\n   * Take a potentially misbehaving resolver function and make sure\n   * onFulfilled and onRejected are only called once.\n   *\n   * Makes no guarantees about asynchrony.\n   */\n  function doResolve(fn, self) {\n    var done = false;\n    try {\n      fn(\n        function(value) {\n          if (done) return;\n          done = true;\n          resolve(self, value);\n        },\n        function(reason) {\n          if (done) return;\n          done = true;\n          reject(self, reason);\n        }\n      );\n    } catch (ex) {\n      if (done) return;\n      done = true;\n      reject(self, ex);\n    }\n  }\n\n  Promise$1.prototype['catch'] = function(onRejected) {\n    return this.then(null, onRejected);\n  };\n\n  Promise$1.prototype.then = function(onFulfilled, onRejected) {\n    // @ts-ignore\n    var prom = new this.constructor(noop);\n\n    handle(this, new Handler(onFulfilled, onRejected, prom));\n    return prom;\n  };\n\n  Promise$1.prototype['finally'] = finallyConstructor;\n\n  Promise$1.all = function(arr) {\n    return new Promise$1(function(resolve, reject) {\n      if (!arr || typeof arr.length === 'undefined')\n        throw new TypeError('Promise.all accepts an array');\n      var args = Array.prototype.slice.call(arr);\n      if (args.length === 0) return resolve([]);\n      var remaining = args.length;\n\n      function res(i, val) {\n        try {\n          if (val && (typeof val === 'object' || typeof val === 'function')) {\n            var then = val.then;\n            if (typeof then === 'function') {\n              then.call(\n                val,\n                function(val) {\n                  res(i, val);\n                },\n                reject\n              );\n              return;\n            }\n          }\n          args[i] = val;\n          if (--remaining === 0) {\n            resolve(args);\n          }\n        } catch (ex) {\n          reject(ex);\n        }\n      }\n\n      for (var i = 0; i < args.length; i++) {\n        res(i, args[i]);\n      }\n    });\n  };\n\n  Promise$1.resolve = function(value) {\n    if (value && typeof value === 'object' && value.constructor === Promise$1) {\n      return value;\n    }\n\n    return new Promise$1(function(resolve) {\n      resolve(value);\n    });\n  };\n\n  Promise$1.reject = function(value) {\n    return new Promise$1(function(resolve, reject) {\n      reject(value);\n    });\n  };\n\n  Promise$1.race = function(values) {\n    return new Promise$1(function(resolve, reject) {\n      for (var i = 0, len = values.length; i < len; i++) {\n        values[i].then(resolve, reject);\n      }\n    });\n  };\n\n  // Use polyfill for setImmediate for performance gains\n  Promise$1._immediateFn =\n    (typeof setImmediate === 'function' &&\n      function(fn) {\n        setImmediate(fn);\n      }) ||\n    function(fn) {\n      setTimeoutFunc(fn, 0);\n    };\n\n  Promise$1._unhandledRejectionFn = function _unhandledRejectionFn(err) {\n    if (typeof console !== 'undefined' && console) {\n      console.warn('Possible Unhandled Promise Rejection:', err); // eslint-disable-line no-console\n    }\n  };\n\n  var Exports =\n  /*#__PURE__*/\n  function () {\n    function Exports(ctx) {\n      _classCallCheck(this, Exports);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n    }\n\n    _createClass(Exports, [{\n      key: \"getSvgString\",\n      value: function getSvgString() {\n        return this.w.globals.dom.Paper.svg();\n      }\n    }, {\n      key: \"cleanup\",\n      value: function cleanup() {\n        var w = this.w; // hide some elements to avoid printing them on exported svg\n\n        var xcrosshairs = w.globals.dom.baseEl.querySelector('.apexcharts-xcrosshairs');\n        var ycrosshairs = w.globals.dom.baseEl.querySelector('.apexcharts-ycrosshairs');\n\n        if (xcrosshairs) {\n          xcrosshairs.setAttribute('x', -500);\n        }\n\n        if (ycrosshairs) {\n          ycrosshairs.setAttribute('y1', -100);\n          ycrosshairs.setAttribute('y2', -100);\n        }\n      }\n    }, {\n      key: \"svgUrl\",\n      value: function svgUrl() {\n        this.cleanup();\n        var svgData = this.getSvgString();\n        var svgBlob = new Blob([svgData], {\n          type: 'image/svg+xml;charset=utf-8'\n        });\n        return URL.createObjectURL(svgBlob);\n      }\n    }, {\n      key: \"dataURI\",\n      value: function dataURI() {\n        var _this = this;\n\n        return new Promise$1(function (resolve) {\n          var w = _this.w;\n\n          _this.cleanup();\n\n          var canvas = document.createElement('canvas');\n          canvas.width = w.globals.svgWidth;\n          canvas.height = parseInt(w.globals.dom.elWrap.style.height); // because of resizeNonAxisCharts\n\n          var canvasBg = w.config.chart.background === 'transparent' ? '#fff' : w.config.chart.background;\n          var ctx = canvas.getContext('2d');\n          ctx.fillStyle = canvasBg;\n          ctx.fillRect(0, 0, canvas.width, canvas.height);\n          var DOMURL = window.URL || window.webkitURL || window;\n          var img = new Image();\n          img.crossOrigin = 'anonymous';\n\n          var svgData = _this.getSvgString();\n\n          var svgUrl = 'data:image/svg+xml,' + encodeURIComponent(svgData);\n\n          img.onload = function () {\n            ctx.drawImage(img, 0, 0);\n            DOMURL.revokeObjectURL(svgUrl);\n            var imgURI = canvas.toDataURL('image/png');\n            resolve(imgURI);\n          };\n\n          img.src = svgUrl;\n        });\n      }\n    }, {\n      key: \"exportToSVG\",\n      value: function exportToSVG() {\n        this.triggerDownload(this.svgUrl(), '.svg');\n      }\n    }, {\n      key: \"exportToPng\",\n      value: function exportToPng() {\n        var _this2 = this;\n\n        this.dataURI().then(function (imgURI) {\n          _this2.triggerDownload(imgURI, '.png');\n        });\n      }\n    }, {\n      key: \"triggerDownload\",\n      value: function triggerDownload(href, ext) {\n        var downloadLink = document.createElement('a');\n        downloadLink.href = href;\n        downloadLink.download = this.w.globals.chartID + ext;\n        document.body.appendChild(downloadLink);\n        downloadLink.click();\n        document.body.removeChild(downloadLink);\n      }\n    }]);\n\n    return Exports;\n  }();\n\n  /**\n   * ApexCharts Grid Class for drawing Cartesian Grid.\n   *\n   * @module Grid\n   **/\n\n  var Grid =\n  /*#__PURE__*/\n  function () {\n    function Grid(ctx) {\n      _classCallCheck(this, Grid);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n      var w = this.w;\n      this.anim = new Animations(this.ctx);\n      this.xaxisLabels = w.globals.labels.slice();\n      this.animX = w.config.grid.xaxis.lines.animate && w.config.chart.animations.enabled;\n      this.animY = w.config.grid.yaxis.lines.animate && w.config.chart.animations.enabled;\n\n      if (w.globals.timelineLabels.length > 0) {\n        //  timeline labels are there\n        this.xaxisLabels = w.globals.timelineLabels.slice();\n      }\n    } // .when using sparklines or when showing no grid, we need to have a grid area which is reused at many places for other calculations as well\n\n\n    _createClass(Grid, [{\n      key: \"drawGridArea\",\n      value: function drawGridArea() {\n        var elGrid = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n\n        if (elGrid === null) {\n          elGrid = graphics.group({\n            class: 'apexcharts-grid'\n          });\n        }\n\n        var elVerticalLine = graphics.drawLine(w.globals.padHorizontal, 1, w.globals.padHorizontal, w.globals.gridHeight, 'transparent');\n        var elHorzLine = graphics.drawLine(w.globals.padHorizontal, w.globals.gridHeight, w.globals.gridWidth, w.globals.gridHeight, 'transparent');\n        elGrid.add(elHorzLine);\n        elGrid.add(elVerticalLine);\n        return elGrid;\n      }\n    }, {\n      key: \"drawGrid\",\n      value: function drawGrid() {\n        var w = this.w;\n        var xAxis = new XAxis(this.ctx);\n        var yaxis = new YAxis(this.ctx);\n        var gl = this.w.globals;\n        var elgrid = null;\n\n        if (gl.axisCharts) {\n          if (w.config.grid.show) {\n            // grid is drawn after xaxis and yaxis are drawn\n            elgrid = this.renderGrid();\n            gl.dom.elGraphical.add(elgrid.el);\n            this.drawGridArea(elgrid.el);\n          } else {\n            var elgridArea = this.drawGridArea();\n            gl.dom.elGraphical.add(elgridArea);\n          }\n\n          if (elgrid !== null) {\n            xAxis.xAxisLabelCorrections(elgrid.xAxisTickWidth);\n          }\n\n          yaxis.setYAxisTextAlignments();\n        }\n      } // This mask will clip off overflowing graphics from the drawable area\n\n    }, {\n      key: \"createGridMask\",\n      value: function createGridMask() {\n        var w = this.w;\n        var gl = w.globals;\n        var graphics = new Graphics(this.ctx);\n        var strokeSize = Array.isArray(w.config.stroke.width) ? 0 : w.config.stroke.width;\n\n        if (Array.isArray(w.config.stroke.width)) {\n          var strokeMaxSize = 0;\n          w.config.stroke.width.forEach(function (m) {\n            strokeMaxSize = Math.max(strokeMaxSize, m);\n          });\n          strokeSize = strokeMaxSize;\n        }\n\n        gl.dom.elGridRectMask = document.createElementNS(gl.SVGNS, 'clipPath');\n        gl.dom.elGridRectMask.setAttribute('id', \"gridRectMask\".concat(gl.cuid));\n        gl.dom.elGridRectMarkerMask = document.createElementNS(gl.SVGNS, 'clipPath');\n        gl.dom.elGridRectMarkerMask.setAttribute('id', \"gridRectMarkerMask\".concat(gl.cuid));\n        gl.dom.elGridRect = graphics.drawRect(-strokeSize / 2, -strokeSize / 2, gl.gridWidth + strokeSize, gl.gridHeight + strokeSize, 0, '#fff');\n        var coreUtils = new CoreUtils(this);\n        coreUtils.getLargestMarkerSize();\n        var markerSize = w.globals.markers.largestSize + 1;\n        gl.dom.elGridRectMarker = graphics.drawRect(-markerSize, -markerSize, gl.gridWidth + markerSize * 2, gl.gridHeight + markerSize * 2, 0, '#fff');\n        gl.dom.elGridRectMask.appendChild(gl.dom.elGridRect.node);\n        gl.dom.elGridRectMarkerMask.appendChild(gl.dom.elGridRectMarker.node);\n        var defs = gl.dom.baseEl.querySelector('defs');\n        defs.appendChild(gl.dom.elGridRectMask);\n        defs.appendChild(gl.dom.elGridRectMarkerMask);\n      } // actual grid rendering\n\n    }, {\n      key: \"renderGrid\",\n      value: function renderGrid() {\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var strokeDashArray = w.config.grid.strokeDashArray;\n        var elg = graphics.group({\n          class: 'apexcharts-grid'\n        });\n        var elgridLinesH = graphics.group({\n          class: 'apexcharts-gridlines-horizontal'\n        });\n        var elgridLinesV = graphics.group({\n          class: 'apexcharts-gridlines-vertical'\n        });\n        elg.add(elgridLinesH);\n        elg.add(elgridLinesV);\n        var tickAmount = 8;\n\n        for (var i = 0; i < w.globals.series.length; i++) {\n          if (typeof w.globals.yAxisScale[i] !== 'undefined') {\n            tickAmount = w.globals.yAxisScale[i].result.length - 1;\n          }\n\n          if (tickAmount > 2) break;\n        }\n\n        var xCount;\n\n        if (!w.globals.isBarHorizontal) {\n          xCount = this.xaxisLabels.length; // draw vertical lines\n\n          if (w.config.grid.xaxis.lines.show || w.config.xaxis.axisTicks.show) {\n            var x1 = w.globals.padHorizontal;\n            var y1 = 0;\n            var x2;\n            var y2 = w.globals.gridHeight;\n\n            if (w.globals.timelineLabels.length > 0) {\n              for (var _i = 0; _i < xCount; _i++) {\n                x1 = this.xaxisLabels[_i].position;\n                x2 = this.xaxisLabels[_i].position;\n\n                if (w.config.grid.xaxis.lines.show && x1 > 0 && x1 < w.globals.gridWidth) {\n                  var line = graphics.drawLine(x1, y1, x2, y2, w.config.grid.borderColor, strokeDashArray);\n                  line.node.classList.add('apexcharts-gridline');\n                  elgridLinesV.add(line);\n\n                  if (this.animX) {\n                    this.animateLine(line, {\n                      x1: 0,\n                      x2: 0\n                    }, {\n                      x1: x1,\n                      x2: x2\n                    });\n                  }\n                }\n\n                var xAxis = new XAxis(this.ctx);\n\n                if (_i === xCount - 1) {\n                  if (!w.globals.skipLastTimelinelabel) {\n                    // skip drawing last label here\n                    xAxis.drawXaxisTicks(x1, elg);\n                  }\n                } else {\n                  xAxis.drawXaxisTicks(x1, elg);\n                }\n              }\n            } else {\n              var xCountForCategoryCharts = xCount;\n\n              for (var _i2 = 0; _i2 < xCountForCategoryCharts; _i2++) {\n                var x1Count = xCountForCategoryCharts;\n\n                if (w.globals.isXNumeric && w.config.chart.type !== 'bar') {\n                  x1Count -= 1;\n                }\n\n                x1 = x1 + w.globals.gridWidth / x1Count;\n                x2 = x1; // skip the last line\n\n                if (_i2 === x1Count - 1) break;\n\n                if (w.config.grid.xaxis.lines.show) {\n                  var _line = graphics.drawLine(x1, y1, x2, y2, w.config.grid.borderColor, strokeDashArray);\n\n                  _line.node.classList.add('apexcharts-gridline');\n\n                  elgridLinesV.add(_line);\n\n                  if (this.animX) {\n                    this.animateLine(_line, {\n                      x1: 0,\n                      x2: 0\n                    }, {\n                      x1: x1,\n                      x2: x2\n                    });\n                  }\n                }\n\n                var _xAxis = new XAxis(this.ctx);\n\n                _xAxis.drawXaxisTicks(x1, elg);\n              }\n            }\n          } // draw horizontal lines\n\n\n          if (w.config.grid.yaxis.lines.show) {\n            var _x = 0;\n            var _y = 0;\n            var _y2 = 0;\n            var _x2 = w.globals.gridWidth;\n\n            for (var _i3 = 0; _i3 < tickAmount + 1; _i3++) {\n              var _line2 = graphics.drawLine(_x, _y, _x2, _y2, w.config.grid.borderColor, strokeDashArray);\n\n              elgridLinesH.add(_line2);\n\n              _line2.node.classList.add('apexcharts-gridline');\n\n              if (this.animY) {\n                this.animateLine(_line2, {\n                  y1: _y + 20,\n                  y2: _y2 + 20\n                }, {\n                  y1: _y,\n                  y2: _y2\n                });\n              }\n\n              _y = _y + w.globals.gridHeight / tickAmount;\n              _y2 = _y;\n            }\n          }\n        } else {\n          xCount = tickAmount; // draw vertical lines\n\n          if (w.config.grid.xaxis.lines.show || w.config.xaxis.axisTicks.show) {\n            var _x3 = w.globals.padHorizontal;\n            var _y3 = 0;\n\n            var _x4;\n\n            var _y4 = w.globals.gridHeight;\n\n            for (var _i4 = 0; _i4 < xCount + 1; _i4++) {\n              _x3 = _x3 + w.globals.gridWidth / xCount + 0.3;\n              _x4 = _x3; // skip the last vertical line\n\n              if (_i4 === xCount - 1) break;\n\n              if (w.config.grid.xaxis.lines.show) {\n                var _line3 = graphics.drawLine(_x3, _y3, _x4, _y4, w.config.grid.borderColor, strokeDashArray);\n\n                _line3.node.classList.add('apexcharts-gridline');\n\n                elgridLinesV.add(_line3);\n\n                if (this.animX) {\n                  this.animateLine(_line3, {\n                    x1: 0,\n                    x2: 0\n                  }, {\n                    x1: _x3,\n                    x2: _x4\n                  });\n                }\n              } // skip the first vertical line\n\n\n              var _xAxis2 = new XAxis(this.ctx);\n\n              _xAxis2.drawXaxisTicks(_x3, elg);\n            }\n          } // draw horizontal lines\n\n\n          if (w.config.grid.yaxis.lines.show) {\n            var _x5 = 0;\n            var _y5 = 0;\n            var _y6 = 0;\n            var _x6 = w.globals.gridWidth;\n\n            for (var _i5 = 0; _i5 < w.globals.dataPoints + 1; _i5++) {\n              var _line4 = graphics.drawLine(_x5, _y5, _x6, _y6, w.config.grid.borderColor, strokeDashArray);\n\n              elgridLinesH.add(_line4);\n\n              _line4.node.classList.add('apexcharts-gridline');\n\n              if (this.animY) {\n                this.animateLine(_line4, {\n                  y1: _y5 + 20,\n                  y2: _y6 + 20\n                }, {\n                  y1: _y5,\n                  y2: _y6\n                });\n              }\n\n              _y5 = _y5 + w.globals.gridHeight / w.globals.dataPoints;\n              _y6 = _y5;\n            }\n          }\n        }\n\n        this.drawGridBands(elg, xCount, tickAmount);\n        return {\n          el: elg,\n          xAxisTickWidth: w.globals.gridWidth / xCount\n        };\n      }\n    }, {\n      key: \"drawGridBands\",\n      value: function drawGridBands(elg, xCount, tickAmount) {\n        var w = this.w;\n        var graphics = new Graphics(this.ctx); // rows background bands\n\n        if (w.config.grid.row.colors !== undefined && w.config.grid.row.colors.length > 0) {\n          var x1 = 0;\n          var y1 = 0;\n          var y2 = w.globals.gridHeight / tickAmount;\n          var x2 = w.globals.gridWidth;\n\n          for (var i = 0, c = 0; i < tickAmount; i++, c++) {\n            if (c >= w.config.grid.row.colors.length) {\n              c = 0;\n            }\n\n            var color = w.config.grid.row.colors[c];\n            var rect = graphics.drawRect(x1, y1, x2, y2, 0, color, w.config.grid.row.opacity);\n            elg.add(rect);\n            rect.node.classList.add('apexcharts-gridRow');\n            y1 = y1 + w.globals.gridHeight / tickAmount;\n          }\n        } // columns background bands\n\n\n        if (w.config.grid.column.colors !== undefined && w.config.grid.column.colors.length > 0) {\n          var _x7 = w.globals.padHorizontal;\n          var _y7 = 0;\n\n          var _x8 = w.globals.padHorizontal + w.globals.gridWidth / xCount;\n\n          var _y8 = w.globals.gridHeight;\n\n          for (var _i6 = 0, _c = 0; _i6 < xCount; _i6++, _c++) {\n            if (_c >= w.config.grid.column.colors.length) {\n              _c = 0;\n            }\n\n            var _color = w.config.grid.column.colors[_c];\n\n            var _rect = graphics.drawRect(_x7, _y7, _x8, _y8, 0, _color, w.config.grid.column.opacity);\n\n            _rect.node.classList.add('apexcharts-gridColumn');\n\n            elg.add(_rect);\n            _x7 = _x7 + w.globals.gridWidth / xCount;\n          }\n        }\n      }\n    }, {\n      key: \"animateLine\",\n      value: function animateLine(line, from, to) {\n        var w = this.w;\n        var initialAnim = w.config.chart.animations;\n\n        if (initialAnim && !w.globals.resized && !w.globals.dataChanged) {\n          var speed = initialAnim.speed;\n          this.anim.animateLine(line, from, to, speed);\n        }\n      }\n    }]);\n\n    return Grid;\n  }();\n\n  /**\n   * ApexCharts Responsive Class to override options for different screen sizes.\n   *\n   * @module Responsive\n   **/\n\n  var Responsive =\n  /*#__PURE__*/\n  function () {\n    function Responsive(ctx) {\n      _classCallCheck(this, Responsive);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n    } // the opts parameter if not null has to be set overriding everything\n    // as the opts is set by user externally\n\n\n    _createClass(Responsive, [{\n      key: \"checkResponsiveConfig\",\n      value: function checkResponsiveConfig(opts) {\n        var _this = this;\n\n        var w = this.w;\n        var cnf = w.config; // check if responsive config exists\n\n        if (cnf.responsive.length === 0) return;\n        var res = cnf.responsive.slice();\n        res.sort(function (a, b) {\n          return a.breakpoint > b.breakpoint ? 1 : b.breakpoint > a.breakpoint ? -1 : 0;\n        }).reverse();\n        var config = new Config({});\n\n        var iterateResponsiveOptions = function iterateResponsiveOptions() {\n          var newOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n          var largestBreakpoint = res[0].breakpoint;\n          var width = window.innerWidth > 0 ? window.innerWidth : screen.width;\n\n          if (width > largestBreakpoint) {\n            var options = CoreUtils.extendArrayProps(config, w.globals.initialConfig);\n            newOptions = Utils.extend(options, newOptions);\n            newOptions = Utils.extend(w.config, newOptions);\n\n            _this.overrideResponsiveOptions(newOptions);\n          } else {\n            for (var i = 0; i < res.length; i++) {\n              if (width < res[i].breakpoint) {\n                newOptions = CoreUtils.extendArrayProps(config, res[i].options);\n                newOptions = Utils.extend(w.config, newOptions);\n\n                _this.overrideResponsiveOptions(newOptions);\n              }\n            }\n          }\n        };\n\n        if (opts) {\n          var options = CoreUtils.extendArrayProps(config, opts);\n          options = Utils.extend(w.config, options);\n          options = Utils.extend(options, opts);\n          iterateResponsiveOptions(options);\n        } else {\n          iterateResponsiveOptions({});\n        }\n      }\n    }, {\n      key: \"overrideResponsiveOptions\",\n      value: function overrideResponsiveOptions(newOptions) {\n        var newConfig = new Config(newOptions).init();\n        this.w.config = newConfig;\n      }\n    }]);\n\n    return Responsive;\n  }();\n\n  /**\n   * ApexCharts Theme Class for setting the colors and palettes.\n   *\n   * @module Theme\n   **/\n\n  var Theme =\n  /*#__PURE__*/\n  function () {\n    function Theme(ctx) {\n      _classCallCheck(this, Theme);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n      this.colors = [];\n    }\n\n    _createClass(Theme, [{\n      key: \"init\",\n      value: function init() {\n        this.setDefaultColors();\n      }\n    }, {\n      key: \"setDefaultColors\",\n      value: function setDefaultColors() {\n        var w = this.w;\n        var utils = new Utils();\n        w.globals.dom.elWrap.classList.add(w.config.theme.mode);\n\n        if (w.config.colors === undefined) {\n          w.globals.colors = this.predefined();\n        } else {\n          w.globals.colors = w.config.colors;\n        }\n\n        if (w.config.theme.monochrome.enabled) {\n          var monoArr = [];\n          var glsCnt = w.globals.series.length;\n\n          if (w.config.plotOptions.bar.distributed && w.config.chart.type === 'bar') {\n            glsCnt = w.globals.series[0].length * w.globals.series.length;\n          }\n\n          var mainColor = w.config.theme.monochrome.color;\n          var part = 1 / (glsCnt / w.config.theme.monochrome.shadeIntensity);\n          var shade = w.config.theme.monochrome.shadeTo;\n          var percent = 0;\n\n          for (var gsl = 0; gsl < glsCnt; gsl++) {\n            var newColor = void 0;\n\n            if (shade === 'dark') {\n              newColor = utils.shadeColor(percent * -1, mainColor);\n              percent = percent + part;\n            } else {\n              newColor = utils.shadeColor(percent, mainColor);\n              percent = percent + part;\n            }\n\n            monoArr.push(newColor);\n          }\n\n          w.globals.colors = monoArr.slice();\n        }\n\n        var defaultColors = w.globals.colors.slice(); // if user specfied less colors than no. of series, push the same colors again\n\n        this.pushExtraColors(w.globals.colors); // The Border colors\n\n        if (w.config.stroke.colors === undefined) {\n          w.globals.stroke.colors = defaultColors;\n        } else {\n          w.globals.stroke.colors = w.config.stroke.colors;\n        }\n\n        this.pushExtraColors(w.globals.stroke.colors); // The FILL colors\n\n        if (w.config.fill.colors === undefined) {\n          w.globals.fill.colors = defaultColors;\n        } else {\n          w.globals.fill.colors = w.config.fill.colors;\n        }\n\n        this.pushExtraColors(w.globals.fill.colors);\n\n        if (w.config.dataLabels.style.colors === undefined) {\n          w.globals.dataLabels.style.colors = defaultColors;\n        } else {\n          w.globals.dataLabels.style.colors = w.config.dataLabels.style.colors;\n        }\n\n        this.pushExtraColors(w.globals.dataLabels.style.colors, 50);\n\n        if (w.config.plotOptions.radar.polygons.fill.colors === undefined) {\n          w.globals.radarPolygons.fill.colors = [w.config.theme.mode === 'dark' ? '#202D48' : '#fff'];\n        } else {\n          w.globals.radarPolygons.fill.colors = w.config.plotOptions.radar.polygons.fill.colors;\n        }\n\n        this.pushExtraColors(w.globals.radarPolygons.fill.colors, 20); // The point colors\n\n        if (w.config.markers.colors === undefined) {\n          w.globals.markers.colors = defaultColors;\n        } else {\n          w.globals.markers.colors = w.config.markers.colors;\n        }\n\n        this.pushExtraColors(w.globals.markers.colors);\n      } // When the number of colors provided is less than the number of series, this method\n      // will push same colors to the list\n      // params:\n      // distributed is only valid for distributed column/bar charts\n\n    }, {\n      key: \"pushExtraColors\",\n      value: function pushExtraColors(colorSeries, length) {\n        var distributed = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n        var w = this.w;\n        var len = length || w.globals.series.length;\n\n        if (distributed === null) {\n          distributed = w.config.chart.type === 'bar' && w.config.plotOptions.bar.distributed || w.config.chart.type === 'heatmap' && w.config.plotOptions.heatmap.colorScale.inverse;\n        }\n\n        if (distributed) {\n          len = w.globals.series[0].length * w.globals.series.length;\n        }\n\n        if (colorSeries.length < len) {\n          var diff = len - colorSeries.length;\n\n          for (var i = 0; i < diff; i++) {\n            colorSeries.push(colorSeries[i]);\n          }\n        }\n      }\n    }, {\n      key: \"updateThemeOptions\",\n      value: function updateThemeOptions(options) {\n        options.chart = options.chart || {};\n        options.tooltip = options.tooltip || {};\n        var mode = options.theme.mode || 'light';\n        var palette = options.theme.palette ? options.theme.palette : mode === 'dark' ? 'palette4' : 'palette1';\n        var foreColor = options.chart.foreColor ? options.chart.foreColor : mode === 'dark' ? '#f6f7f8' : '#373d3f';\n        options.tooltip.theme = mode;\n        options.chart.foreColor = foreColor;\n        options.theme.palette = palette;\n        return options;\n      }\n    }, {\n      key: \"predefined\",\n      value: function predefined() {\n        var palette = this.w.config.theme.palette; // D6E3F8, FCEFEF, DCE0D9, A5978B, EDDDD4, D6E3F8, FEF5EF\n\n        switch (palette) {\n          case 'palette1':\n            this.colors = ['#008FFB', '#00E396', '#FEB019', '#FF4560', '#775DD0'];\n            break;\n\n          case 'palette2':\n            this.colors = ['#3f51b5', '#03a9f4', '#4caf50', '#f9ce1d', '#FF9800'];\n            break;\n\n          case 'palette3':\n            this.colors = ['#33b2df', '#546E7A', '#d4526e', '#13d8aa', '#A5978B'];\n            break;\n\n          case 'palette4':\n            this.colors = ['#4ecdc4', '#c7f464', '#81D4FA', '#fd6a6a', '#546E7A'];\n            break;\n\n          case 'palette5':\n            this.colors = ['#2b908f', '#f9a3a4', '#90ee7e', '#fa4443', '#69d2e7'];\n            break;\n\n          case 'palette6':\n            this.colors = ['#449DD1', '#F86624', '#EA3546', '#662E9B', '#C5D86D'];\n            break;\n\n          case 'palette7':\n            this.colors = ['#D7263D', '#1B998B', '#2E294E', '#F46036', '#E2C044'];\n            break;\n\n          case 'palette8':\n            this.colors = ['#662E9B', '#F86624', '#F9C80E', '#EA3546', '#43BCCD'];\n            break;\n\n          case 'palette9':\n            this.colors = ['#5C4742', '#A5978B', '#8D5B4C', '#5A2A27', '#C4BBAF'];\n            break;\n\n          case 'palette10':\n            this.colors = ['#A300D6', '#7D02EB', '#5653FE', '#2983FF', '#00B1F2'];\n            break;\n\n          default:\n            this.colors = ['#008FFB', '#00E396', '#FEB019', '#FF4560', '#775DD0'];\n            break;\n        }\n\n        return this.colors;\n      }\n    }]);\n\n    return Theme;\n  }();\n\n  var Utils$1 =\n  /*#__PURE__*/\n  function () {\n    function Utils(tooltipContext) {\n      _classCallCheck(this, Utils);\n\n      this.w = tooltipContext.w;\n      this.ttCtx = tooltipContext;\n      this.ctx = tooltipContext.ctx;\n    }\n    /**\n     ** When hovering over series, you need to capture which series is being hovered on.\n     ** This function will return both capturedseries index as well as inner index of that series\n     * @memberof Utils\n     * @param {object}\n     * - hoverArea = the rect on which user hovers\n     * - elGrid = dimensions of the hover rect (it can be different than hoverarea)\n     */\n\n\n    _createClass(Utils, [{\n      key: \"getNearestValues\",\n      value: function getNearestValues(_ref) {\n        var hoverArea = _ref.hoverArea,\n            elGrid = _ref.elGrid,\n            clientX = _ref.clientX,\n            clientY = _ref.clientY,\n            hasBars = _ref.hasBars;\n        var w = this.w;\n        var hoverWidth = w.globals.gridWidth;\n        var xDivisor = hoverWidth / (w.globals.dataPoints - 1);\n        var seriesBound = elGrid.getBoundingClientRect();\n\n        if (hasBars && w.globals.comboCharts || hasBars) {\n          xDivisor = hoverWidth / w.globals.dataPoints;\n        }\n\n        var hoverX = clientX - seriesBound.left;\n        var hoverY = clientY - seriesBound.top;\n        var notInRect = hoverX < 0 || hoverY < 0 || hoverX > w.globals.gridWidth || hoverY > w.globals.gridHeight;\n\n        if (notInRect) {\n          hoverArea.classList.remove('hovering-zoom');\n          hoverArea.classList.remove('hovering-pan');\n        } else {\n          if (w.globals.zoomEnabled) {\n            hoverArea.classList.remove('hovering-pan');\n            hoverArea.classList.add('hovering-zoom');\n          } else if (w.globals.panEnabled) {\n            hoverArea.classList.remove('hovering-zoom');\n            hoverArea.classList.add('hovering-pan');\n          }\n        }\n\n        var j = Math.round(hoverX / xDivisor);\n\n        if (hasBars) {\n          j = Math.ceil(hoverX / xDivisor);\n          j = j - 1;\n        }\n\n        var capturedSeries = null;\n        var closest = null;\n        var seriesXValArr = [];\n        var seriesYValArr = [];\n\n        for (var s = 0; s < w.globals.seriesXvalues.length; s++) {\n          seriesXValArr.push([w.globals.seriesXvalues[s][0] - 0.000001].concat(w.globals.seriesXvalues[s]));\n        }\n\n        seriesXValArr = seriesXValArr.map(function (seriesXVal) {\n          return seriesXVal.filter(function (s) {\n            return s;\n          });\n        });\n        seriesYValArr = w.globals.seriesYvalues.map(function (seriesYVal) {\n          return seriesYVal.filter(function (s) {\n            return s;\n          });\n        }); // if X axis type is not category and tooltip is not shared, then we need to find the cursor position and get the nearest value\n\n        if (w.globals.isXNumeric) {\n          closest = this.closestInMultiArray(hoverX, hoverY, seriesXValArr, seriesYValArr);\n          capturedSeries = closest.index;\n          j = closest.j;\n\n          if (capturedSeries !== null) {\n            // initial push, it should be a little smaller than the 1st val\n            seriesXValArr = w.globals.seriesXvalues[capturedSeries];\n            closest = this.closestInArray(hoverX, seriesXValArr);\n            j = closest.index;\n          }\n        }\n\n        w.globals.capturedSeriesIndex = capturedSeries === null ? -1 : capturedSeries;\n        w.globals.capturedDataPointIndex = j === null ? -1 : j;\n        if (!j || j < 1) j = 0;\n        return {\n          capturedSeries: capturedSeries,\n          j: j,\n          hoverX: hoverX,\n          hoverY: hoverY\n        };\n      }\n    }, {\n      key: \"closestInMultiArray\",\n      value: function closestInMultiArray(hoverX, hoverY, Xarrays, Yarrays) {\n        var w = this.w;\n        var activeIndex = 0;\n        var currIndex = null;\n        var j = -1;\n\n        if (w.globals.series.length > 1) {\n          activeIndex = this.getFirstActiveXArray(Xarrays);\n        } else {\n          currIndex = 0;\n        }\n\n        var currY = Yarrays[activeIndex][0];\n        var currX = Xarrays[activeIndex][0];\n        var diffX = Math.abs(hoverX - currX);\n        var diffY = Math.abs(hoverY - currY);\n        var diff = diffY + diffX;\n        Yarrays.map(function (arrY, arrIndex) {\n          arrY.map(function (y, innerKey) {\n            var newdiffY = Math.abs(hoverY - Yarrays[arrIndex][innerKey]);\n            var newdiffX = Math.abs(hoverX - Xarrays[arrIndex][innerKey]);\n            var newdiff = newdiffX + newdiffY;\n\n            if (newdiff < diff) {\n              diff = newdiff;\n              diffX = newdiffX;\n              diffY = newdiffY;\n              currIndex = arrIndex;\n              j = innerKey;\n            }\n          });\n        });\n        return {\n          index: currIndex,\n          j: j\n        };\n      }\n    }, {\n      key: \"getFirstActiveXArray\",\n      value: function getFirstActiveXArray(Xarrays) {\n        var activeIndex = 0;\n        var coreUtils = new CoreUtils(this.ctx);\n        var firstActiveSeriesIndex = Xarrays.map(function (xarr, index) {\n          if (xarr.length > 0) {\n            return index;\n          } else {\n            return -1;\n          }\n        });\n\n        for (var a = 0; a < firstActiveSeriesIndex.length; a++) {\n          var total = coreUtils.getSeriesTotalByIndex(a);\n\n          if (firstActiveSeriesIndex[a] !== -1 && total !== 0 && !coreUtils.seriesHaveSameValues(a)) {\n            activeIndex = firstActiveSeriesIndex[a];\n            break;\n          }\n        }\n\n        return activeIndex;\n      }\n    }, {\n      key: \"closestInArray\",\n      value: function closestInArray(val, arr) {\n        var curr = arr[0];\n        var currIndex = null;\n        var diff = Math.abs(val - curr);\n\n        for (var i = 0; i < arr.length; i++) {\n          var newdiff = Math.abs(val - arr[i]);\n\n          if (newdiff < diff) {\n            diff = newdiff;\n            currIndex = i;\n          }\n        }\n\n        return {\n          index: currIndex\n        };\n      }\n      /**\n       * When there are multiple series, it is possible to have different x values for each series.\n       * But it may be possible in those multiple series, that there is same x value for 2 or more\n       * series.\n       * @memberof Utils\n       * @param {int}\n       * - j = is the inner index of series -> (series[i][j])\n       * @return {bool}\n       */\n\n    }, {\n      key: \"isXoverlap\",\n      value: function isXoverlap(j) {\n        var w = this.w;\n        var xSameForAllSeriesJArr = [];\n        var seriesX = w.globals.seriesX.filter(function (s) {\n          return typeof s[0] !== 'undefined';\n        });\n\n        if (seriesX.length > 0) {\n          for (var i = 0; i < seriesX.length - 1; i++) {\n            if (typeof seriesX[i][j] !== 'undefined' && typeof seriesX[i + 1][j] !== 'undefined') {\n              if (seriesX[i][j] !== seriesX[i + 1][j]) {\n                xSameForAllSeriesJArr.push('unEqual');\n              }\n            }\n          }\n        }\n\n        if (xSameForAllSeriesJArr.length === 0) {\n          return true;\n        }\n\n        return false;\n      }\n    }, {\n      key: \"isInitialSeriesSameLen\",\n      value: function isInitialSeriesSameLen() {\n        var sameLen = true;\n        var initialSeries = this.w.globals.initialSeries;\n\n        for (var i = 0; i < initialSeries.length - 1; i++) {\n          if (initialSeries[i].data.length !== initialSeries[i + 1].data.length) {\n            sameLen = false;\n            break;\n          }\n        }\n\n        return sameLen;\n      }\n    }, {\n      key: \"getBarsHeight\",\n      value: function getBarsHeight(allbars) {\n        var bars = _toConsumableArray(allbars);\n\n        var totalHeight = bars.reduce(function (acc, bar) {\n          return acc + bar.getBBox().height;\n        }, 0);\n        return totalHeight;\n      }\n    }, {\n      key: \"toggleAllTooltipSeriesGroups\",\n      value: function toggleAllTooltipSeriesGroups(state) {\n        var w = this.w;\n        var ttCtx = this.ttCtx;\n\n        if (ttCtx.allTooltipSeriesGroups.length === 0) {\n          ttCtx.allTooltipSeriesGroups = w.globals.dom.baseEl.querySelectorAll('.apexcharts-tooltip-series-group');\n        }\n\n        var allTooltipSeriesGroups = ttCtx.allTooltipSeriesGroups;\n\n        for (var i = 0; i < allTooltipSeriesGroups.length; i++) {\n          if (state === 'enable') {\n            allTooltipSeriesGroups[i].classList.add('active');\n            allTooltipSeriesGroups[i].style.display = w.config.tooltip.items.display;\n          } else {\n            allTooltipSeriesGroups[i].classList.remove('active');\n            allTooltipSeriesGroups[i].style.display = 'none';\n          }\n        }\n      }\n    }]);\n\n    return Utils;\n  }();\n\n  /**\n   * ApexCharts Tooltip.Labels Class to draw texts on the tooltip.\n   *\n   * @module Tooltip.Labels\n   **/\n\n  var Labels =\n  /*#__PURE__*/\n  function () {\n    function Labels(tooltipContext) {\n      _classCallCheck(this, Labels);\n\n      this.w = tooltipContext.w;\n      this.ctx = tooltipContext.ctx;\n      this.ttCtx = tooltipContext;\n      this.tooltipUtil = new Utils$1(tooltipContext);\n    }\n\n    _createClass(Labels, [{\n      key: \"drawSeriesTexts\",\n      value: function drawSeriesTexts(_ref) {\n        var _ref$shared = _ref.shared,\n            shared = _ref$shared === void 0 ? true : _ref$shared,\n            ttItems = _ref.ttItems,\n            _ref$i = _ref.i,\n            i = _ref$i === void 0 ? 0 : _ref$i,\n            _ref$j = _ref.j,\n            j = _ref$j === void 0 ? null : _ref$j;\n        var w = this.w;\n\n        if (w.config.tooltip.custom !== undefined) {\n          this.handleCustomTooltip({\n            i: i,\n            j: j\n          });\n        } else {\n          this.toggleActiveInactiveSeries(shared);\n        }\n\n        var values = this.getValuesToPrint({\n          i: i,\n          j: j\n        });\n        this.printLabels({\n          i: i,\n          j: j,\n          values: values,\n          ttItems: ttItems,\n          shared: shared\n        }); // Re-calculate tooltip dimensions now that we have drawn the text\n\n        var tooltipEl = this.ttCtx.getElTooltip();\n        this.ttCtx.tooltipRect.ttWidth = tooltipEl.getBoundingClientRect().width;\n        this.ttCtx.tooltipRect.ttHeight = tooltipEl.getBoundingClientRect().height;\n      }\n    }, {\n      key: \"printLabels\",\n      value: function printLabels(_ref2) {\n        var i = _ref2.i,\n            j = _ref2.j,\n            values = _ref2.values,\n            ttItems = _ref2.ttItems,\n            shared = _ref2.shared;\n        var w = this.w;\n        var val;\n        var xVal = values.xVal,\n            zVal = values.zVal,\n            xAxisTTVal = values.xAxisTTVal;\n        var seriesName = '';\n        var pColor = w.globals.colors[i];\n\n        if (j !== null && w.config.plotOptions.bar.distributed) {\n          pColor = w.globals.colors[j];\n        }\n\n        for (var t = 0, inverset = w.globals.series.length - 1; t < w.globals.series.length; t++, inverset--) {\n          var f = this.getFormatters(i);\n          seriesName = this.getSeriesName({\n            fn: f.yLbTitleFormatter,\n            index: i,\n            seriesIndex: i,\n            j: j\n          });\n\n          if (shared) {\n            var tIndex = w.config.tooltip.inverseOrder ? inverset : t;\n            f = this.getFormatters(tIndex);\n            seriesName = this.getSeriesName({\n              fn: f.yLbTitleFormatter,\n              index: tIndex,\n              seriesIndex: i,\n              j: j\n            });\n            pColor = w.globals.colors[tIndex]; // for plot charts, not for pie/donuts\n\n            val = f.yLbFormatter(w.globals.series[tIndex][j], {\n              series: w.globals.series,\n              seriesIndex: tIndex,\n              dataPointIndex: j,\n              w: w\n            }); // discard 0 values in BARS\n\n            if (this.ttCtx.hasBars() && w.config.chart.stacked && w.globals.series[tIndex][j] === 0 || typeof w.globals.series[tIndex][j] === 'undefined') {\n              val = undefined;\n            }\n          } else {\n            val = f.yLbFormatter(w.globals.series[i][j], {\n              series: w.globals.series,\n              seriesIndex: i,\n              dataPointIndex: j,\n              w: w\n            });\n          } // for pie / donuts\n\n\n          if (j === null) {\n            val = f.yLbFormatter(w.globals.series[i], w);\n          }\n\n          this.DOMHandling({\n            t: t,\n            ttItems: ttItems,\n            values: {\n              val: val,\n              xVal: xVal,\n              xAxisTTVal: xAxisTTVal,\n              zVal: zVal\n            },\n            seriesName: seriesName,\n            shared: shared,\n            pColor: pColor\n          });\n        }\n      }\n    }, {\n      key: \"getFormatters\",\n      value: function getFormatters(i) {\n        var w = this.w;\n        var yLbFormatter = w.globals.yLabelFormatters[i];\n        var yLbTitleFormatter;\n\n        if (w.globals.ttVal !== undefined) {\n          if (Array.isArray(w.globals.ttVal)) {\n            yLbFormatter = w.globals.ttVal[i] && w.globals.ttVal[i].formatter;\n            yLbTitleFormatter = w.globals.ttVal[i] && w.globals.ttVal[i].title && w.globals.ttVal[i].title.formatter;\n          } else {\n            yLbFormatter = w.globals.ttVal.formatter;\n\n            if (typeof w.globals.ttVal.title.formatter === 'function') {\n              yLbTitleFormatter = w.globals.ttVal.title.formatter;\n            }\n          }\n        } else {\n          yLbTitleFormatter = w.config.tooltip.y.title.formatter;\n        }\n\n        if (typeof yLbFormatter !== 'function') {\n          if (w.globals.yLabelFormatters[0]) {\n            yLbFormatter = w.globals.yLabelFormatters[0];\n          } else {\n            yLbFormatter = function yLbFormatter(label) {\n              return label;\n            };\n          }\n        }\n\n        if (typeof yLbTitleFormatter !== 'function') {\n          yLbTitleFormatter = function yLbTitleFormatter(label) {\n            return label;\n          };\n        }\n\n        return {\n          yLbFormatter: yLbFormatter,\n          yLbTitleFormatter: yLbTitleFormatter\n        };\n      }\n    }, {\n      key: \"getSeriesName\",\n      value: function getSeriesName(_ref3) {\n        var fn = _ref3.fn,\n            index = _ref3.index,\n            seriesIndex = _ref3.seriesIndex,\n            j = _ref3.j;\n        var w = this.w;\n        return fn(String(w.globals.seriesNames[index]), {\n          series: w.globals.series,\n          seriesIndex: seriesIndex,\n          dataPointIndex: j,\n          w: w\n        });\n      }\n    }, {\n      key: \"DOMHandling\",\n      value: function DOMHandling(_ref4) {\n        var t = _ref4.t,\n            ttItems = _ref4.ttItems,\n            values = _ref4.values,\n            seriesName = _ref4.seriesName,\n            shared = _ref4.shared,\n            pColor = _ref4.pColor;\n        var w = this.w;\n        var ttCtx = this.ttCtx;\n        var val = values.val,\n            xVal = values.xVal,\n            xAxisTTVal = values.xAxisTTVal,\n            zVal = values.zVal;\n        var ttItemsChildren = null;\n        ttItemsChildren = ttItems[t].children;\n\n        if (w.config.tooltip.fillSeriesColor) {\n          //  elTooltip.style.backgroundColor = pColor\n          ttItems[t].style.backgroundColor = pColor;\n          ttItemsChildren[0].style.display = 'none';\n        }\n\n        if (ttCtx.showTooltipTitle) {\n          if (ttCtx.tooltipTitle === null) {\n            // get it once if null, and store it in class property\n            ttCtx.tooltipTitle = w.globals.dom.baseEl.querySelector('.apexcharts-tooltip-title');\n          }\n\n          ttCtx.tooltipTitle.innerHTML = xVal;\n        } // if xaxis tooltip is constructed, we need to replace the innerHTML\n\n\n        if (ttCtx.blxaxisTooltip) {\n          ttCtx.xaxisTooltipText.innerHTML = xAxisTTVal !== '' ? xAxisTTVal : xVal;\n        }\n\n        var ttYLabel = ttItems[t].querySelector('.apexcharts-tooltip-text-label');\n\n        if (ttYLabel) {\n          ttYLabel.innerHTML = seriesName ? seriesName + ': ' : '';\n        }\n\n        var ttYVal = ttItems[t].querySelector('.apexcharts-tooltip-text-value');\n\n        if (ttYVal) {\n          ttYVal.innerHTML = val;\n        }\n\n        if (ttItemsChildren[0] && ttItemsChildren[0].classList.contains('apexcharts-tooltip-marker')) {\n          ttItemsChildren[0].style.backgroundColor = pColor;\n        }\n\n        if (!w.config.tooltip.marker.show) {\n          ttItemsChildren[0].style.display = 'none';\n        }\n\n        if (zVal !== null) {\n          var ttZLabel = ttItems[t].querySelector('.apexcharts-tooltip-text-z-label');\n          ttZLabel.innerHTML = w.config.tooltip.z.title;\n          var ttZVal = ttItems[t].querySelector('.apexcharts-tooltip-text-z-value');\n          ttZVal.innerHTML = zVal;\n        }\n\n        if (shared && ttItemsChildren[0]) {\n          // hide when no Val or series collapsed\n          if (typeof val === 'undefined' || val === null || w.globals.collapsedSeriesIndices.indexOf(t) > -1) {\n            ttItemsChildren[0].parentNode.style.display = 'none';\n          } else {\n            ttItemsChildren[0].parentNode.style.display = w.config.tooltip.items.display;\n          }\n        }\n      }\n    }, {\n      key: \"toggleActiveInactiveSeries\",\n      value: function toggleActiveInactiveSeries(shared) {\n        var w = this.w;\n\n        if (shared) {\n          // make all tooltips active\n          this.tooltipUtil.toggleAllTooltipSeriesGroups('enable');\n        } else {\n          // disable all tooltip text groups\n          this.tooltipUtil.toggleAllTooltipSeriesGroups('disable'); // enable the first tooltip text group\n\n          var firstTooltipSeriesGroup = w.globals.dom.baseEl.querySelector('.apexcharts-tooltip-series-group');\n\n          if (firstTooltipSeriesGroup) {\n            firstTooltipSeriesGroup.classList.add('active');\n            firstTooltipSeriesGroup.style.display = w.config.tooltip.items.display;\n          }\n        }\n      }\n    }, {\n      key: \"getValuesToPrint\",\n      value: function getValuesToPrint(_ref5) {\n        var i = _ref5.i,\n            j = _ref5.j;\n        var w = this.w;\n        var filteredSeriesX = this.ctx.series.filteredSeriesX();\n        var xVal = '';\n        var xAxisTTVal = '';\n        var zVal = null;\n        var val = null;\n        var customFormatterOpts = {\n          series: w.globals.series,\n          seriesIndex: i,\n          dataPointIndex: j,\n          w: w\n        };\n        var zFormatter = w.globals.ttZFormatter;\n\n        if (j === null) {\n          val = w.globals.series[i];\n        } else {\n          if (w.globals.isXNumeric) {\n            xVal = filteredSeriesX[i][j];\n\n            if (filteredSeriesX[i].length === 0) {\n              // a series (possibly the first one) might be collapsed, so get the next active index\n              var firstActiveSeriesIndex = this.tooltipUtil.getFirstActiveXArray(filteredSeriesX);\n              xVal = filteredSeriesX[firstActiveSeriesIndex][j];\n            }\n          } else {\n            xVal = typeof w.globals.labels[j] !== 'undefined' ? w.globals.labels[j] : '';\n          }\n        }\n\n        var bufferXVal = xVal;\n\n        if (w.globals.isXNumeric && w.config.xaxis.type === 'datetime') {\n          var xFormat = new Formatters(this.ctx);\n          xVal = xFormat.xLabelFormat(w.globals.ttKeyFormatter, bufferXVal, bufferXVal);\n        } else {\n          if (!w.globals.isBarHorizontal) {\n            xVal = w.globals.xLabelFormatter(bufferXVal, customFormatterOpts);\n          }\n        } // override default x-axis formatter with tooltip formatter\n\n\n        if (w.config.tooltip.x.formatter !== undefined) {\n          xVal = w.globals.ttKeyFormatter(bufferXVal, customFormatterOpts);\n        }\n\n        if (w.globals.seriesZ.length > 0 && w.globals.seriesZ[0].length > 0) {\n          zVal = zFormatter(w.globals.seriesZ[i][j], w);\n        }\n\n        if (typeof w.config.xaxis.tooltip.formatter === 'function') {\n          xAxisTTVal = w.globals.xaxisTooltipFormatter(bufferXVal, customFormatterOpts);\n        } else {\n          xAxisTTVal = xVal;\n        }\n\n        return {\n          val: val,\n          xVal: xVal,\n          xAxisTTVal: xAxisTTVal,\n          zVal: zVal\n        };\n      }\n    }, {\n      key: \"handleCustomTooltip\",\n      value: function handleCustomTooltip(_ref6) {\n        var i = _ref6.i,\n            j = _ref6.j;\n        var w = this.w;\n        var tooltipEl = this.ttCtx.getElTooltip(); // override everything with a custom html tooltip and replace it\n\n        tooltipEl.innerHTML = w.config.tooltip.custom({\n          ctx: this.ctx,\n          series: w.globals.series,\n          seriesIndex: i,\n          dataPointIndex: j,\n          w: w\n        });\n      }\n    }]);\n\n    return Labels;\n  }();\n\n  /**\n   * ApexCharts Tooltip.Position Class to move the tooltip based on x and y position.\n   *\n   * @module Tooltip.Position\n   **/\n\n  var Position =\n  /*#__PURE__*/\n  function () {\n    function Position(tooltipContext) {\n      _classCallCheck(this, Position);\n\n      this.ttCtx = tooltipContext;\n      this.ctx = tooltipContext.ctx;\n      this.w = tooltipContext.w;\n    }\n    /**\n     * This will move the crosshair (the vertical/horz line that moves along with mouse)\n     * Along with this, this function also calls the xaxisMove function\n     * @memberof Position\n     * @param {int} - cx = point's x position, wherever point's x is, you need to move crosshair\n     */\n\n\n    _createClass(Position, [{\n      key: \"moveXCrosshairs\",\n      value: function moveXCrosshairs(cx) {\n        var j = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n        var ttCtx = this.ttCtx;\n        var w = this.w;\n        var xcrosshairs = ttCtx.getElXCrosshairs();\n        var x = cx - ttCtx.xcrosshairsWidth / 2;\n        var tickAmount = w.globals.labels.slice().length;\n\n        if (j !== null) {\n          x = w.globals.gridWidth / tickAmount * j;\n        }\n\n        if (w.config.xaxis.crosshairs.width === 'tickWidth' || w.config.xaxis.crosshairs.width === 'barWidth') {\n          if (x + ttCtx.xcrosshairsWidth > w.globals.gridWidth) {\n            x = w.globals.gridWidth - ttCtx.xcrosshairsWidth;\n          }\n        } else {\n          if (j !== null) {\n            x = x + w.globals.gridWidth / tickAmount / 2;\n          }\n        }\n\n        if (x < 0) {\n          x = 0;\n        }\n\n        if (x > w.globals.gridWidth) {\n          x = w.globals.gridWidth;\n        }\n\n        if (xcrosshairs !== null) {\n          xcrosshairs.setAttribute('x', x);\n          xcrosshairs.setAttribute('x1', x);\n          xcrosshairs.setAttribute('x2', x);\n          xcrosshairs.setAttribute('y2', w.globals.gridHeight);\n          xcrosshairs.classList.add('active');\n        }\n\n        if (ttCtx.blxaxisTooltip) {\n          var tx = x;\n\n          if (w.config.xaxis.crosshairs.width === 'tickWidth' || w.config.xaxis.crosshairs.width === 'barWidth') {\n            tx = x + ttCtx.xcrosshairsWidth / 2;\n          }\n\n          this.moveXAxisTooltip(tx);\n        }\n      }\n      /**\n       * This will move the crosshair (the vertical/horz line that moves along with mouse)\n       * Along with this, this function also calls the xaxisMove function\n       * @memberof Position\n       * @param {int} - cx = point's x position, wherever point's x is, you need to move crosshair\n       */\n\n    }, {\n      key: \"moveYCrosshairs\",\n      value: function moveYCrosshairs(cy) {\n        var ttCtx = this.ttCtx;\n\n        if (ttCtx.ycrosshairs !== null) {\n          Graphics.setAttrs(ttCtx.ycrosshairs, {\n            y1: cy,\n            y2: cy\n          });\n          Graphics.setAttrs(ttCtx.ycrosshairsHidden, {\n            y1: cy,\n            y2: cy\n          });\n        }\n      }\n      /**\n       ** AxisTooltip is the small rectangle which appears on x axis with x value, when user moves\n       * @memberof Position\n       * @param {int} - cx = point's x position, wherever point's x is, you need to move\n       */\n\n    }, {\n      key: \"moveXAxisTooltip\",\n      value: function moveXAxisTooltip(cx) {\n        var w = this.w;\n        var ttCtx = this.ttCtx;\n\n        if (ttCtx.xaxisTooltip !== null) {\n          ttCtx.xaxisTooltip.classList.add('active');\n          var cy = ttCtx.xaxisOffY + w.config.xaxis.tooltip.offsetY + w.globals.translateY + 1 + w.config.xaxis.offsetY;\n          var xaxisTTText = ttCtx.xaxisTooltip.getBoundingClientRect();\n          var xaxisTTTextWidth = xaxisTTText.width;\n          cx = cx - xaxisTTTextWidth / 2;\n\n          if (!isNaN(cx)) {\n            cx = cx + w.globals.translateX;\n            var textRect = 0;\n            var graphics = new Graphics(this.ctx);\n            textRect = graphics.getTextRects(ttCtx.xaxisTooltipText.innerHTML);\n            ttCtx.xaxisTooltipText.style.minWidth = textRect.width + 'px';\n            ttCtx.xaxisTooltip.style.left = cx + 'px';\n            ttCtx.xaxisTooltip.style.top = cy + 'px';\n          }\n        }\n      }\n    }, {\n      key: \"moveYAxisTooltip\",\n      value: function moveYAxisTooltip(index) {\n        var w = this.w;\n        var ttCtx = this.ttCtx;\n\n        if (ttCtx.yaxisTTEls === null) {\n          ttCtx.yaxisTTEls = w.globals.dom.baseEl.querySelectorAll('.apexcharts-yaxistooltip');\n        }\n\n        var ycrosshairsHiddenRectY1 = parseInt(ttCtx.ycrosshairsHidden.getAttribute('y1'));\n        var cy = w.globals.translateY + ycrosshairsHiddenRectY1;\n        var yAxisTTRect = ttCtx.yaxisTTEls[index].getBoundingClientRect();\n        var yAxisTTHeight = yAxisTTRect.height;\n        var cx = w.globals.translateYAxisX[index] - 2;\n\n        if (w.config.yaxis[index].opposite) {\n          cx = cx - 26;\n        }\n\n        cy = cy - yAxisTTHeight / 2;\n\n        if (w.globals.ignoreYAxisIndexes.indexOf(index) === -1) {\n          ttCtx.yaxisTTEls[index].classList.add('active');\n          ttCtx.yaxisTTEls[index].style.top = cy + 'px';\n          ttCtx.yaxisTTEls[index].style.left = cx + w.config.yaxis[index].tooltip.offsetX + 'px';\n        } else {\n          ttCtx.yaxisTTEls[index].classList.remove('active');\n        }\n      }\n      /**\n       ** moves the whole tooltip by changing x, y attrs\n       * @memberof Position\n       * @param {int} - cx = point's x position, wherever point's x is, you need to move tooltip\n       * @param {int} - cy = point's y position, wherever point's y is, you need to move tooltip\n       * @param {int} - r = point's radius\n       */\n\n    }, {\n      key: \"moveTooltip\",\n      value: function moveTooltip(cx, cy) {\n        var r = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n        var w = this.w;\n        var ttCtx = this.ttCtx;\n        var tooltipEl = ttCtx.getElTooltip();\n        var tooltipRect = ttCtx.tooltipRect;\n        var pointR = r !== null ? parseInt(r) : 1;\n        var x = parseInt(cx) + pointR + 5;\n        var y = parseInt(cy) + pointR / 2; // - tooltipRect.ttHeight / 2\n\n        if (x > w.globals.gridWidth / 2) {\n          x = x - tooltipRect.ttWidth - pointR - 15;\n        }\n\n        if (x > w.globals.gridWidth - tooltipRect.ttWidth - 10) {\n          x = w.globals.gridWidth - tooltipRect.ttWidth;\n        }\n\n        if (x < -20) {\n          x = -20;\n        }\n\n        if (w.config.tooltip.followCursor) {\n          var elGrid = ttCtx.getElGrid();\n          var seriesBound = elGrid.getBoundingClientRect();\n          y = ttCtx.e.clientY + w.globals.translateY - seriesBound.top - tooltipRect.ttHeight / 2;\n        }\n\n        var newPositions = this.positionChecks(tooltipRect, x, y);\n        x = newPositions.x;\n        y = newPositions.y;\n\n        if (!isNaN(x)) {\n          x = x + w.globals.translateX;\n          tooltipEl.style.left = x + 'px';\n          tooltipEl.style.top = y + 'px';\n        }\n      }\n    }, {\n      key: \"positionChecks\",\n      value: function positionChecks(tooltipRect, x, y) {\n        var w = this.w;\n\n        if (tooltipRect.ttHeight + y > w.globals.gridHeight) {\n          y = w.globals.gridHeight - tooltipRect.ttHeight + w.globals.translateY;\n        }\n\n        if (y < 0) {\n          y = 0;\n        }\n\n        return {\n          x: x,\n          y: y\n        };\n      }\n    }, {\n      key: \"moveMarkers\",\n      value: function moveMarkers(i, j) {\n        var w = this.w;\n        var ttCtx = this.ttCtx;\n\n        if (w.globals.markers.size[i] > 0) {\n          var allPoints = w.globals.dom.baseEl.querySelectorAll(\" .apexcharts-series[data\\\\:realIndex='\".concat(i, \"'] .apexcharts-marker\"));\n\n          for (var p = 0; p < allPoints.length; p++) {\n            if (parseInt(allPoints[p].getAttribute('rel')) === j) {\n              ttCtx.marker.resetPointsSize();\n              ttCtx.marker.enlargeCurrentPoint(j, allPoints[p]);\n            }\n          }\n        } else {\n          ttCtx.marker.resetPointsSize();\n          this.moveDynamicPointOnHover(j, i);\n        }\n      } // This function is used when you need to show markers/points only on hover -\n      // DIFFERENT X VALUES in multiple series\n\n    }, {\n      key: \"moveDynamicPointOnHover\",\n      value: function moveDynamicPointOnHover(j, capturedSeries) {\n        var w = this.w;\n        var ttCtx = this.ttCtx;\n        var cx = 0;\n        var cy = 0;\n        var pointsArr = w.globals.pointsArray;\n        var hoverSize = w.config.markers.hover.size;\n\n        if (hoverSize === undefined) {\n          hoverSize = w.globals.markers.size[capturedSeries] + w.config.markers.hover.sizeOffset;\n        }\n\n        if (w.config.series[capturedSeries].type && w.config.series[capturedSeries].type === 'column') {\n          // fix error mentioned in #811\n          return;\n        }\n\n        cx = pointsArr[capturedSeries][j][0];\n        cy = pointsArr[capturedSeries][j][1] ? pointsArr[capturedSeries][j][1] : 0;\n        var point = w.globals.dom.baseEl.querySelector(\".apexcharts-series[data\\\\:realIndex='\".concat(capturedSeries, \"'] .apexcharts-series-markers circle\"));\n\n        if (point) {\n          point.setAttribute('r', hoverSize);\n          point.setAttribute('cx', cx);\n          point.setAttribute('cy', cy);\n        } // point.style.opacity = w.config.markers.hover.opacity\n\n\n        this.moveXCrosshairs(cx);\n\n        if (!ttCtx.fixedTooltip) {\n          this.moveTooltip(cx, cy, hoverSize);\n        }\n      } // This function is used when you need to show markers/points only on hover -\n      // SAME X VALUES in multiple series\n\n    }, {\n      key: \"moveDynamicPointsOnHover\",\n      value: function moveDynamicPointsOnHover(j) {\n        var ttCtx = this.ttCtx;\n        var w = ttCtx.w;\n        var cx = 0;\n        var cy = 0;\n        var activeSeries = 0;\n        var pointsArr = w.globals.pointsArray;\n        var series = new Series(this.ctx);\n        activeSeries = series.getActiveSeriesIndex();\n        var hoverSize = w.config.markers.hover.size;\n\n        if (hoverSize === undefined) {\n          hoverSize = w.globals.markers.size[activeSeries] + w.config.markers.hover.sizeOffset;\n        }\n\n        if (pointsArr[activeSeries]) {\n          cx = pointsArr[activeSeries][j][0];\n          cy = pointsArr[activeSeries][j][1];\n        }\n\n        var points = null;\n        var allPoints = ttCtx.getAllMarkers();\n\n        if (allPoints !== null) {\n          points = allPoints;\n        } else {\n          points = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series-markers circle');\n        }\n\n        if (points !== null) {\n          for (var p = 0; p < points.length; p++) {\n            var pointArr = pointsArr[p];\n\n            if (pointArr && pointArr.length) {\n              var pcy = pointsArr[p][j][1];\n              points[p].setAttribute('cx', cx);\n              var realIndex = parseInt(points[p].parentNode.parentNode.parentNode.getAttribute('data:realIndex'));\n\n              if (pcy !== null) {\n                points[realIndex] && points[realIndex].setAttribute('r', hoverSize);\n                points[realIndex] && points[realIndex].setAttribute('cy', pcy);\n              } else {\n                points[realIndex] && points[realIndex].setAttribute('r', 0);\n              }\n            }\n          }\n        }\n\n        this.moveXCrosshairs(cx);\n\n        if (!ttCtx.fixedTooltip) {\n          var tcy = cy || w.globals.gridHeight;\n          this.moveTooltip(cx, tcy, hoverSize);\n        }\n      }\n    }, {\n      key: \"moveStickyTooltipOverBars\",\n      value: function moveStickyTooltipOverBars(j) {\n        var w = this.w;\n        var ttCtx = this.ttCtx;\n        var i = w.globals.maxValsInArrayIndex + 1;\n        var jBar = w.globals.dom.baseEl.querySelector(\".apexcharts-bar-series .apexcharts-series[rel='\".concat(i, \"'] path[j='\").concat(j, \"'], .apexcharts-candlestick-series .apexcharts-series[rel='\").concat(i, \"'] path[j='\").concat(j, \"'], .apexcharts-rangebar-series .apexcharts-series[rel='\").concat(i, \"'] path[j='\").concat(j, \"']\"));\n        var bcx = jBar ? parseFloat(jBar.getAttribute('cx')) : 0;\n        var bcy = 0;\n        var bw = jBar ? parseFloat(jBar.getAttribute('barWidth')) : 0;\n\n        if (w.globals.isXNumeric) {\n          bcx = bcx - bw / 2;\n        } else {\n          bcx = ttCtx.xAxisTicksPositions[j - 1] + ttCtx.dataPointsDividedWidth / 2;\n\n          if (isNaN(bcx)) {\n            bcx = ttCtx.xAxisTicksPositions[j] - ttCtx.dataPointsDividedWidth / 2;\n          }\n        } // tooltip will move vertically along with mouse as it is a shared tooltip\n\n\n        var elGrid = ttCtx.getElGrid();\n        var seriesBound = elGrid.getBoundingClientRect();\n        bcy = ttCtx.e.clientY - seriesBound.top - ttCtx.tooltipRect.ttHeight / 2;\n        this.moveXCrosshairs(bcx);\n\n        if (!ttCtx.fixedTooltip) {\n          var tcy = bcy || w.globals.gridHeight;\n          this.moveTooltip(bcx, tcy);\n        }\n      }\n    }]);\n\n    return Position;\n  }();\n\n  /**\n   * ApexCharts Tooltip.Marker Class to draw texts on the tooltip.\n   *\n   * @module Tooltip.Marker\n   **/\n\n  var Marker =\n  /*#__PURE__*/\n  function () {\n    function Marker(tooltipContext) {\n      _classCallCheck(this, Marker);\n\n      this.w = tooltipContext.w;\n      this.ttCtx = tooltipContext;\n      this.ctx = tooltipContext.ctx;\n      this.tooltipPosition = new Position(tooltipContext);\n    }\n\n    _createClass(Marker, [{\n      key: \"drawDynamicPoints\",\n      value: function drawDynamicPoints() {\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var marker = new Markers(this.ctx);\n        var elsSeries = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series');\n\n        for (var i = 0; i < elsSeries.length; i++) {\n          var seriesIndex = parseInt(elsSeries[i].getAttribute('data:realIndex'));\n          var pointsMain = w.globals.dom.baseEl.querySelector(\".apexcharts-series[data\\\\:realIndex='\".concat(seriesIndex, \"'] .apexcharts-series-markers-wrap\"));\n\n          if (pointsMain !== null) {\n            // it can be null as we have tooltips in donut/bar charts\n            var point = void 0;\n            var PointClasses = \"apexcharts-marker w\".concat((Math.random() + 1).toString(36).substring(4));\n\n            if ((w.config.chart.type === 'line' || w.config.chart.type === 'area') && !w.globals.comboCharts && !w.config.tooltip.intersect) {\n              PointClasses += ' no-pointer-events';\n            }\n\n            var elPointOptions = marker.getMarkerConfig(PointClasses, seriesIndex);\n            point = graphics.drawMarker(0, 0, elPointOptions);\n            point.node.setAttribute('default-marker-size', 0);\n            var elPointsG = document.createElementNS(w.globals.SVGNS, 'g');\n            elPointsG.classList.add('apexcharts-series-markers');\n            elPointsG.appendChild(point.node);\n            pointsMain.appendChild(elPointsG);\n          }\n        }\n      }\n    }, {\n      key: \"enlargeCurrentPoint\",\n      value: function enlargeCurrentPoint(rel, point) {\n        var x = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n        var y = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n        var w = this.w;\n\n        if (w.config.chart.type !== 'bubble') {\n          this.newPointSize(rel, point);\n        }\n\n        var cx = point.getAttribute('cx');\n        var cy = point.getAttribute('cy');\n\n        if (x !== null && y !== null) {\n          cx = x;\n          cy = y;\n        }\n\n        this.tooltipPosition.moveXCrosshairs(cx);\n\n        if (!this.fixedTooltip) {\n          if (w.config.chart.type === 'radar') {\n            var elGrid = this.ttCtx.getElGrid();\n            var seriesBound = elGrid.getBoundingClientRect();\n            cx = this.ttCtx.e.clientX - seriesBound.left;\n          }\n\n          this.tooltipPosition.moveTooltip(cx, cy, w.config.markers.hover.size);\n        }\n      }\n    }, {\n      key: \"enlargePoints\",\n      value: function enlargePoints(j) {\n        var w = this.w;\n        var me = this;\n        var ttCtx = this.ttCtx;\n        var col = j;\n        var points = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series:not(.apexcharts-series-collapsed) .apexcharts-marker');\n        var newSize = w.config.markers.hover.size;\n\n        for (var p = 0; p < points.length; p++) {\n          var rel = points[p].getAttribute('rel');\n          var index = points[p].getAttribute('index');\n\n          if (newSize === undefined) {\n            newSize = w.globals.markers.size[index] + w.config.markers.hover.sizeOffset;\n          }\n\n          if (col === parseInt(rel)) {\n            me.newPointSize(col, points[p]);\n            var cx = points[p].getAttribute('cx');\n            var cy = points[p].getAttribute('cy');\n            me.tooltipPosition.moveXCrosshairs(cx);\n\n            if (!ttCtx.fixedTooltip) {\n              me.tooltipPosition.moveTooltip(cx, cy, newSize);\n            }\n          } else {\n            me.oldPointSize(points[p]);\n          }\n        }\n      }\n    }, {\n      key: \"newPointSize\",\n      value: function newPointSize(rel, point) {\n        var w = this.w;\n        var newSize = w.config.markers.hover.size;\n        var elPoint = null;\n\n        if (rel === 0) {\n          elPoint = point.parentNode.firstChild;\n        } else {\n          elPoint = point.parentNode.lastChild;\n        }\n\n        var index = parseInt(elPoint.getAttribute('index'));\n\n        if (newSize === undefined) {\n          newSize = w.globals.markers.size[index] + w.config.markers.hover.sizeOffset;\n        }\n\n        elPoint.setAttribute('r', newSize);\n      }\n    }, {\n      key: \"oldPointSize\",\n      value: function oldPointSize(point) {\n        var size = parseInt(point.getAttribute('default-marker-size'));\n        point.setAttribute('r', size);\n      }\n    }, {\n      key: \"resetPointsSize\",\n      value: function resetPointsSize() {\n        var w = this.w;\n        var points = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series:not(.apexcharts-series-collapsed) .apexcharts-marker');\n\n        for (var p = 0; p < points.length; p++) {\n          var size = parseInt(points[p].getAttribute('default-marker-size'));\n\n          if (Utils.isNumber(size)) {\n            points[p].setAttribute('r', size);\n          } else {\n            points[p].setAttribute('r', 0);\n          }\n        }\n      }\n    }]);\n\n    return Marker;\n  }();\n\n  /**\n   * ApexCharts Tooltip.Intersect Class.\n   *\n   * @module Tooltip.Intersect\n   **/\n\n  var Intersect =\n  /*#__PURE__*/\n  function () {\n    function Intersect(tooltipContext) {\n      _classCallCheck(this, Intersect);\n\n      this.w = tooltipContext.w;\n      this.ttCtx = tooltipContext;\n    }\n\n    _createClass(Intersect, [{\n      key: \"getAttr\",\n      value: function getAttr(e, attr) {\n        return parseFloat(e.target.getAttribute(attr));\n      }\n    }, {\n      key: \"handleHeatTooltip\",\n      value: function handleHeatTooltip(_ref) {\n        var e = _ref.e,\n            opt = _ref.opt,\n            x = _ref.x,\n            y = _ref.y;\n        var ttCtx = this.ttCtx;\n        var w = this.w;\n\n        if (e.target.classList.contains('apexcharts-heatmap-rect')) {\n          var i = this.getAttr(e, 'i');\n          var j = this.getAttr(e, 'j');\n          var cx = this.getAttr(e, 'cx');\n          var cy = this.getAttr(e, 'cy');\n          var width = this.getAttr(e, 'width');\n          var height = this.getAttr(e, 'height');\n          ttCtx.tooltipLabels.drawSeriesTexts({\n            ttItems: opt.ttItems,\n            i: i,\n            j: j,\n            shared: false\n          });\n          w.globals.capturedSeriesIndex = i;\n          w.globals.capturedDataPointIndex = j;\n          x = cx + ttCtx.tooltipRect.ttWidth / 2 + width;\n          y = cy + ttCtx.tooltipRect.ttHeight / 2 - height / 2;\n          ttCtx.tooltipPosition.moveXCrosshairs(cx + width / 2);\n\n          if (x > w.globals.gridWidth / 2) {\n            x = cx - ttCtx.tooltipRect.ttWidth / 2 + width;\n          }\n\n          if (ttCtx.w.config.tooltip.followCursor) {\n            var elGrid = ttCtx.getElGrid();\n            var seriesBound = elGrid.getBoundingClientRect(); // x = ttCtx.e.clientX - seriesBound.left\n\n            y = ttCtx.e.clientY - seriesBound.top + w.globals.translateY / 2 - 10;\n          }\n        }\n\n        return {\n          x: x,\n          y: y\n        };\n      }\n    }, {\n      key: \"handleMarkerTooltip\",\n      value: function handleMarkerTooltip(_ref2) {\n        var e = _ref2.e,\n            opt = _ref2.opt,\n            x = _ref2.x,\n            y = _ref2.y;\n        var w = this.w;\n        var ttCtx = this.ttCtx;\n        var i;\n        var j;\n\n        if (e.target.classList.contains('apexcharts-marker')) {\n          var cx = parseInt(opt.paths.getAttribute('cx'));\n          var cy = parseInt(opt.paths.getAttribute('cy'));\n          var val = parseFloat(opt.paths.getAttribute('val'));\n          j = parseInt(opt.paths.getAttribute('rel'));\n          i = parseInt(opt.paths.parentNode.parentNode.parentNode.getAttribute('rel')) - 1;\n\n          if (ttCtx.intersect) {\n            var el = Utils.findAncestor(opt.paths, 'apexcharts-series');\n\n            if (el) {\n              i = parseInt(el.getAttribute('data:realIndex'));\n            }\n          }\n\n          ttCtx.tooltipLabels.drawSeriesTexts({\n            ttItems: opt.ttItems,\n            i: i,\n            j: j,\n            shared: ttCtx.showOnIntersect ? false : w.config.tooltip.shared\n          });\n\n          if (e.type === 'mouseup') {\n            ttCtx.markerClick(e, i, j);\n          }\n\n          w.globals.capturedSeriesIndex = i;\n          w.globals.capturedDataPointIndex = j;\n          x = cx;\n          y = cy + w.globals.translateY - ttCtx.tooltipRect.ttHeight * 1.4;\n\n          if (ttCtx.w.config.tooltip.followCursor) {\n            var elGrid = ttCtx.getElGrid();\n            var seriesBound = elGrid.getBoundingClientRect();\n            y = ttCtx.e.clientY + w.globals.translateY - seriesBound.top;\n          }\n\n          if (val < 0) {\n            y = cy;\n          }\n\n          ttCtx.marker.enlargeCurrentPoint(j, opt.paths, x, y);\n        }\n\n        return {\n          x: x,\n          y: y\n        };\n      }\n    }, {\n      key: \"handleBarTooltip\",\n      value: function handleBarTooltip(_ref3) {\n        var e = _ref3.e,\n            opt = _ref3.opt;\n        var w = this.w;\n        var ttCtx = this.ttCtx;\n        var tooltipEl = ttCtx.getElTooltip();\n        var bx = 0;\n        var x = 0;\n        var y = 0; // let bW = 0\n\n        var i = 0;\n        var strokeWidth;\n        var barXY = this.getBarTooltipXY({\n          e: e,\n          opt: opt\n        });\n        i = barXY.i;\n        var barHeight = barXY.barHeight;\n        var j = barXY.j;\n        w.globals.capturedSeriesIndex = i;\n        w.globals.capturedDataPointIndex = j;\n\n        if (w.globals.isBarHorizontal && ttCtx.hasBars() || !w.config.tooltip.shared) {\n          x = barXY.x;\n          y = barXY.y;\n          strokeWidth = Array.isArray(w.config.stroke.width) ? w.config.stroke.width[i] : w.config.stroke.width; // bW = barXY.barWidth\n\n          bx = x;\n        } else {\n          if (!w.globals.comboCharts && !w.config.tooltip.shared) {\n            bx = bx / 2;\n          }\n        } // y is NaN, make it touch the bottom of grid area\n\n\n        if (isNaN(y)) {\n          y = w.globals.svgHeight - ttCtx.tooltipRect.ttHeight;\n        } // x exceeds gridWidth\n\n\n        if (x + ttCtx.tooltipRect.ttWidth > w.globals.gridWidth) {\n          x = x - ttCtx.tooltipRect.ttWidth;\n        } else if (x < 0) {\n          x = x + ttCtx.tooltipRect.ttWidth;\n        }\n\n        if (ttCtx.w.config.tooltip.followCursor) {\n          var elGrid = ttCtx.getElGrid();\n          var seriesBound = elGrid.getBoundingClientRect();\n          y = ttCtx.e.clientY - seriesBound.top;\n        } // if tooltip is still null, querySelector\n\n\n        if (ttCtx.tooltip === null) {\n          ttCtx.tooltip = w.globals.dom.baseEl.querySelector('.apexcharts-tooltip');\n        }\n\n        if (!w.config.tooltip.shared) {\n          if (w.globals.comboChartsHasBars) {\n            ttCtx.tooltipPosition.moveXCrosshairs(bx + strokeWidth / 2);\n          } else {\n            ttCtx.tooltipPosition.moveXCrosshairs(bx);\n          }\n        } // move tooltip here\n\n\n        if (!ttCtx.fixedTooltip && (!w.config.tooltip.shared || w.globals.isBarHorizontal && ttCtx.hasBars())) {\n          if (isReversed) {\n            x = w.globals.gridWidth - x;\n          }\n\n          tooltipEl.style.left = x + w.globals.translateX + 'px';\n          var seriesIndex = parseInt(opt.paths.parentNode.getAttribute('data:realIndex'));\n          var isReversed = w.globals.isMultipleYAxis ? w.config.yaxis[seriesIndex] && w.config.yaxis[seriesIndex].reversed : w.config.yaxis[0].reversed;\n\n          if (isReversed && !(w.globals.isBarHorizontal && ttCtx.hasBars())) {\n            y = y + barHeight - (w.globals.series[i][j] < 0 ? barHeight : 0) * 2;\n          }\n\n          if (ttCtx.tooltipRect.ttHeight + y > w.globals.gridHeight) {\n            y = w.globals.gridHeight - ttCtx.tooltipRect.ttHeight + w.globals.translateY;\n            tooltipEl.style.top = y + 'px';\n          } else {\n            tooltipEl.style.top = y + w.globals.translateY - ttCtx.tooltipRect.ttHeight / 2 + 'px';\n          }\n        }\n      }\n    }, {\n      key: \"getBarTooltipXY\",\n      value: function getBarTooltipXY(_ref4) {\n        var e = _ref4.e,\n            opt = _ref4.opt;\n        var w = this.w;\n        var j = null;\n        var ttCtx = this.ttCtx;\n        var i = 0;\n        var x = 0;\n        var y = 0;\n        var barWidth = 0;\n        var barHeight = 0;\n        var cl = e.target.classList;\n\n        if (cl.contains('apexcharts-bar-area') || cl.contains('apexcharts-candlestick-area') || cl.contains('apexcharts-rangebar-area')) {\n          var bar = e.target;\n          var barRect = bar.getBoundingClientRect();\n          var seriesBound = opt.elGrid.getBoundingClientRect();\n          var bh = barRect.height;\n          barHeight = barRect.height;\n          var bw = barRect.width;\n          var cx = parseInt(bar.getAttribute('cx'));\n          var cy = parseInt(bar.getAttribute('cy'));\n          barWidth = parseFloat(bar.getAttribute('barWidth'));\n          var clientX = e.type === 'touchmove' ? e.touches[0].clientX : e.clientX;\n          j = parseInt(bar.getAttribute('j'));\n          i = parseInt(bar.parentNode.getAttribute('rel')) - 1;\n\n          if (w.globals.comboCharts) {\n            i = parseInt(bar.parentNode.getAttribute('data:realIndex'));\n          } // if (w.config.tooltip.shared) {\n          // this check not needed  at the moment\n          //   const yDivisor = w.globals.gridHeight / (w.globals.series.length)\n          //   const hoverY = ttCtx.clientY - ttCtx.seriesBound.top\n          //   j = Math.ceil(hoverY / yDivisor)\n          // }\n\n\n          ttCtx.tooltipLabels.drawSeriesTexts({\n            ttItems: opt.ttItems,\n            i: i,\n            j: j,\n            shared: ttCtx.showOnIntersect ? false : w.config.tooltip.shared\n          });\n\n          if (w.config.tooltip.followCursor) {\n            if (w.globals.isBarHorizontal) {\n              x = clientX - seriesBound.left + 15;\n              y = cy - ttCtx.dataPointsDividedHeight + bh / 2 - ttCtx.tooltipRect.ttHeight / 2;\n            } else {\n              if (w.globals.isXNumeric) {\n                x = cx - bw / 2;\n              } else {\n                x = cx - ttCtx.dataPointsDividedWidth + bw / 2;\n              }\n\n              y = e.clientY - seriesBound.top - ttCtx.tooltipRect.ttHeight / 2 - 15;\n            }\n          } else {\n            if (w.globals.isBarHorizontal) {\n              x = cx;\n\n              if (x < ttCtx.xyRatios.baseLineInvertedY) {\n                x = cx - ttCtx.tooltipRect.ttWidth;\n              }\n\n              y = cy - ttCtx.dataPointsDividedHeight + bh / 2 - ttCtx.tooltipRect.ttHeight / 2;\n            } else {\n              // if columns\n              if (w.globals.isXNumeric) {\n                x = cx - bw / 2;\n              } else {\n                x = cx - ttCtx.dataPointsDividedWidth + bw / 2;\n              }\n\n              y = cy; // - ttCtx.tooltipRect.ttHeight / 2 + 10\n            }\n          }\n        }\n\n        return {\n          x: x,\n          y: y,\n          barHeight: barHeight,\n          barWidth: barWidth,\n          i: i,\n          j: j\n        };\n      }\n    }]);\n\n    return Intersect;\n  }();\n\n  /**\n   * ApexCharts Tooltip.AxesTooltip Class.\n   *\n   * @module Tooltip.AxesTooltip\n   **/\n  var AxesTooltip =\n  /*#__PURE__*/\n  function () {\n    function AxesTooltip(tooltipContext) {\n      _classCallCheck(this, AxesTooltip);\n\n      this.w = tooltipContext.w;\n      this.ttCtx = tooltipContext;\n    }\n    /**\n     * This method adds the secondary tooltip which appears below x axis\n     * @memberof Tooltip\n     **/\n\n\n    _createClass(AxesTooltip, [{\n      key: \"drawXaxisTooltip\",\n      value: function drawXaxisTooltip() {\n        var w = this.w;\n        var ttCtx = this.ttCtx;\n        var isBottom = w.config.xaxis.position === 'bottom';\n        ttCtx.xaxisOffY = isBottom ? w.globals.gridHeight + 1 : 1;\n        var tooltipCssClass = isBottom ? 'apexcharts-xaxistooltip apexcharts-xaxistooltip-bottom' : 'apexcharts-xaxistooltip apexcharts-xaxistooltip-top';\n        var renderTo = w.globals.dom.elWrap;\n\n        if (ttCtx.blxaxisTooltip) {\n          var xaxisTooltip = w.globals.dom.baseEl.querySelector('.apexcharts-xaxistooltip');\n\n          if (xaxisTooltip === null) {\n            ttCtx.xaxisTooltip = document.createElement('div');\n            ttCtx.xaxisTooltip.setAttribute('class', tooltipCssClass + ' ' + w.config.tooltip.theme);\n            renderTo.appendChild(ttCtx.xaxisTooltip);\n            ttCtx.xaxisTooltipText = document.createElement('div');\n            ttCtx.xaxisTooltipText.classList.add('apexcharts-xaxistooltip-text');\n            ttCtx.xaxisTooltipText.style.fontFamily = w.config.xaxis.tooltip.style.fontFamily || w.config.chart.fontFamily;\n            ttCtx.xaxisTooltipText.style.fontSize = w.config.xaxis.tooltip.style.fontSize;\n            ttCtx.xaxisTooltip.appendChild(ttCtx.xaxisTooltipText);\n          }\n        }\n      }\n      /**\n       * This method adds the secondary tooltip which appears below x axis\n       * @memberof Tooltip\n       **/\n\n    }, {\n      key: \"drawYaxisTooltip\",\n      value: function drawYaxisTooltip() {\n        var w = this.w;\n        var ttCtx = this.ttCtx;\n\n        var _loop = function _loop(i) {\n          var isRight = w.config.yaxis[i].opposite || w.config.yaxis[i].crosshairs.opposite;\n          ttCtx.yaxisOffX = isRight ? w.globals.gridWidth + 1 : 1;\n          var tooltipCssClass = isRight ? \"apexcharts-yaxistooltip apexcharts-yaxistooltip-\".concat(i, \" apexcharts-yaxistooltip-right\") : \"apexcharts-yaxistooltip apexcharts-yaxistooltip-\".concat(i, \" apexcharts-yaxistooltip-left\");\n          w.globals.yAxisSameScaleIndices.map(function (samescales, ssi) {\n            samescales.map(function (s, si) {\n              if (si === i) {\n                tooltipCssClass += w.config.yaxis[si].show ? \" \" : \" apexcharts-yaxistooltip-hidden\";\n              }\n            });\n          });\n          var renderTo = w.globals.dom.elWrap;\n\n          if (ttCtx.blyaxisTooltip) {\n            var yaxisTooltip = w.globals.dom.baseEl.querySelector(\".apexcharts-yaxistooltip apexcharts-yaxistooltip-\".concat(i));\n\n            if (yaxisTooltip === null) {\n              ttCtx.yaxisTooltip = document.createElement('div');\n              ttCtx.yaxisTooltip.setAttribute('class', tooltipCssClass + ' ' + w.config.tooltip.theme);\n              renderTo.appendChild(ttCtx.yaxisTooltip);\n              if (i === 0) ttCtx.yaxisTooltipText = [];\n              ttCtx.yaxisTooltipText.push(document.createElement('div'));\n              ttCtx.yaxisTooltipText[i].classList.add('apexcharts-yaxistooltip-text');\n              ttCtx.yaxisTooltip.appendChild(ttCtx.yaxisTooltipText[i]);\n            }\n          }\n        };\n\n        for (var i = 0; i < w.config.yaxis.length; i++) {\n          _loop(i);\n        }\n      }\n      /**\n       * @memberof Tooltip\n       **/\n\n    }, {\n      key: \"setXCrosshairWidth\",\n      value: function setXCrosshairWidth() {\n        var w = this.w;\n        var ttCtx = this.ttCtx; // set xcrosshairs width\n\n        var xcrosshairs = ttCtx.getElXCrosshairs();\n        ttCtx.xcrosshairsWidth = parseInt(w.config.xaxis.crosshairs.width);\n\n        if (!w.globals.comboCharts) {\n          if (w.config.xaxis.crosshairs.width === 'tickWidth') {\n            var count = w.globals.labels.length;\n            ttCtx.xcrosshairsWidth = w.globals.gridWidth / count;\n          } else if (w.config.xaxis.crosshairs.width === 'barWidth') {\n            var bar = w.globals.dom.baseEl.querySelector('.apexcharts-bar-area');\n\n            if (bar !== null) {\n              var barWidth = parseFloat(bar.getAttribute('barWidth'));\n              ttCtx.xcrosshairsWidth = barWidth;\n            } else {\n              ttCtx.xcrosshairsWidth = 1;\n            }\n          }\n        } else {\n          var _bar = w.globals.dom.baseEl.querySelector('.apexcharts-bar-area');\n\n          if (_bar !== null && w.config.xaxis.crosshairs.width === 'barWidth') {\n            var _barWidth = parseFloat(_bar.getAttribute('barWidth'));\n\n            ttCtx.xcrosshairsWidth = _barWidth;\n          } else {\n            if (w.config.xaxis.crosshairs.width === 'tickWidth') {\n              var _count = w.globals.labels.length;\n              ttCtx.xcrosshairsWidth = w.globals.gridWidth / _count;\n            }\n          }\n        }\n\n        if (w.globals.isBarHorizontal) {\n          ttCtx.xcrosshairsWidth = 0;\n        }\n\n        if (xcrosshairs !== null && ttCtx.xcrosshairsWidth > 0) {\n          xcrosshairs.setAttribute('width', ttCtx.xcrosshairsWidth);\n        }\n      }\n    }, {\n      key: \"handleYCrosshair\",\n      value: function handleYCrosshair() {\n        var w = this.w;\n        var ttCtx = this.ttCtx; // set ycrosshairs height\n\n        ttCtx.ycrosshairs = w.globals.dom.baseEl.querySelector('.apexcharts-ycrosshairs');\n        ttCtx.ycrosshairsHidden = w.globals.dom.baseEl.querySelector('.apexcharts-ycrosshairs-hidden');\n      }\n    }, {\n      key: \"drawYaxisTooltipText\",\n      value: function drawYaxisTooltipText(index, clientY, xyRatios) {\n        var ttCtx = this.ttCtx;\n        var w = this.w;\n        var lbFormatter = w.globals.yLabelFormatters[index];\n\n        if (ttCtx.blyaxisTooltip) {\n          var elGrid = ttCtx.getElGrid();\n          var seriesBound = elGrid.getBoundingClientRect();\n          var hoverY = (clientY - seriesBound.top) * xyRatios.yRatio[index];\n          var height = w.globals.maxYArr[index] - w.globals.minYArr[index];\n          var val = w.globals.minYArr[index] + (height - hoverY);\n          ttCtx.tooltipPosition.moveYCrosshairs(clientY - seriesBound.top);\n          ttCtx.yaxisTooltipText[index].innerHTML = lbFormatter(val);\n          ttCtx.tooltipPosition.moveYAxisTooltip(index);\n        }\n      }\n    }]);\n\n    return AxesTooltip;\n  }();\n\n  /**\n   * ApexCharts Core Tooltip Class to handle the tooltip generation.\n   *\n   * @module Tooltip\n   **/\n\n  var Tooltip =\n  /*#__PURE__*/\n  function () {\n    function Tooltip(ctx) {\n      _classCallCheck(this, Tooltip);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n      var w = this.w;\n      this.tConfig = w.config.tooltip;\n      this.tooltipUtil = new Utils$1(this);\n      this.tooltipLabels = new Labels(this);\n      this.tooltipPosition = new Position(this);\n      this.marker = new Marker(this);\n      this.intersect = new Intersect(this);\n      this.axesTooltip = new AxesTooltip(this);\n      this.showOnIntersect = this.tConfig.intersect;\n      this.showTooltipTitle = this.tConfig.x.show;\n      this.fixedTooltip = this.tConfig.fixed.enabled;\n      this.xaxisTooltip = null;\n      this.yaxisTTEls = null;\n      this.isBarShared = !w.globals.isBarHorizontal && this.tConfig.shared;\n    }\n\n    _createClass(Tooltip, [{\n      key: \"getElTooltip\",\n      value: function getElTooltip(ctx) {\n        if (!ctx) ctx = this;\n        return ctx.w.globals.dom.baseEl.querySelector('.apexcharts-tooltip');\n      }\n    }, {\n      key: \"getElXCrosshairs\",\n      value: function getElXCrosshairs() {\n        return this.w.globals.dom.baseEl.querySelector('.apexcharts-xcrosshairs');\n      }\n    }, {\n      key: \"getElGrid\",\n      value: function getElGrid() {\n        return this.w.globals.dom.baseEl.querySelector('.apexcharts-grid');\n      }\n    }, {\n      key: \"drawTooltip\",\n      value: function drawTooltip(xyRatios) {\n        var w = this.w;\n        this.xyRatios = xyRatios;\n        this.blxaxisTooltip = w.config.xaxis.tooltip.enabled && w.globals.axisCharts;\n        this.blyaxisTooltip = w.config.yaxis[0].tooltip.enabled && w.globals.axisCharts;\n        this.allTooltipSeriesGroups = [];\n\n        if (!w.globals.axisCharts) {\n          this.showTooltipTitle = false;\n        }\n\n        var tooltipEl = document.createElement('div');\n        tooltipEl.classList.add('apexcharts-tooltip');\n        tooltipEl.classList.add(this.tConfig.theme);\n        w.globals.dom.elWrap.appendChild(tooltipEl);\n\n        if (w.globals.axisCharts) {\n          this.axesTooltip.drawXaxisTooltip();\n          this.axesTooltip.drawYaxisTooltip();\n          this.axesTooltip.setXCrosshairWidth();\n          this.axesTooltip.handleYCrosshair();\n          var xAxis = new XAxis(this.ctx);\n          this.xAxisTicksPositions = xAxis.getXAxisTicksPositions();\n        } // we forcefully set intersect true for these conditions\n\n\n        if (w.globals.comboCharts && !this.tConfig.shared || this.tConfig.intersect && !this.tConfig.shared || (w.config.chart.type === 'bar' || w.config.chart.type === 'rangeBar') && !this.tConfig.shared) {\n          this.showOnIntersect = true;\n        }\n\n        if (w.config.markers.size === 0 || w.globals.markers.largestSize === 0) {\n          // when user don't want to show points all the time, but only on when hovering on series\n          this.marker.drawDynamicPoints(this);\n        } // no visible series, exit\n\n\n        if (w.globals.collapsedSeries.length === w.globals.series.length) return;\n        this.dataPointsDividedHeight = w.globals.gridHeight / w.globals.dataPoints;\n        this.dataPointsDividedWidth = w.globals.gridWidth / w.globals.dataPoints;\n\n        if (this.showTooltipTitle) {\n          this.tooltipTitle = document.createElement('div');\n          this.tooltipTitle.classList.add('apexcharts-tooltip-title');\n          this.tooltipTitle.style.fontFamily = this.tConfig.style.fontFamily || w.config.chart.fontFamily;\n          this.tooltipTitle.style.fontSize = this.tConfig.style.fontSize;\n          tooltipEl.appendChild(this.tooltipTitle);\n        }\n\n        var ttItemsCnt = w.globals.series.length; // whether shared or not, default is shared\n\n        if ((w.globals.xyCharts || w.globals.comboCharts) && this.tConfig.shared) {\n          if (!this.showOnIntersect) {\n            ttItemsCnt = w.globals.series.length;\n          } else {\n            ttItemsCnt = 1;\n          }\n        }\n\n        this.legendLabels = w.globals.dom.baseEl.querySelectorAll('.apexcharts-legend-text');\n        this.ttItems = this.createTTElements(ttItemsCnt);\n        this.addSVGEvents();\n      }\n    }, {\n      key: \"createTTElements\",\n      value: function createTTElements(ttItemsCnt) {\n        var w = this.w;\n        var ttItems = [];\n        var tooltipEl = this.getElTooltip();\n\n        for (var i = 0; i < ttItemsCnt; i++) {\n          var gTxt = document.createElement('div');\n          gTxt.classList.add('apexcharts-tooltip-series-group');\n\n          if (this.tConfig.shared && this.tConfig.enabledOnSeries && Array.isArray(this.tConfig.enabledOnSeries)) {\n            if (this.tConfig.enabledOnSeries.indexOf(i) < 0) {\n              gTxt.classList.add('apexcharts-tooltip-series-group-hidden');\n            }\n          }\n\n          var point = document.createElement('span');\n          point.classList.add('apexcharts-tooltip-marker');\n          point.style.backgroundColor = w.globals.colors[i];\n          gTxt.appendChild(point);\n          var gYZ = document.createElement('div');\n          gYZ.classList.add('apexcharts-tooltip-text');\n          gYZ.style.fontFamily = this.tConfig.style.fontFamily || w.config.chart.fontFamily;\n          gYZ.style.fontSize = this.tConfig.style.fontSize; // y values group\n\n          var gYValText = document.createElement('div');\n          gYValText.classList.add('apexcharts-tooltip-y-group');\n          var txtLabel = document.createElement('span');\n          txtLabel.classList.add('apexcharts-tooltip-text-label');\n          gYValText.appendChild(txtLabel);\n          var txtValue = document.createElement('span');\n          txtValue.classList.add('apexcharts-tooltip-text-value');\n          gYValText.appendChild(txtValue); // z values group\n\n          var gZValText = document.createElement('div');\n          gZValText.classList.add('apexcharts-tooltip-z-group');\n          var txtZLabel = document.createElement('span');\n          txtZLabel.classList.add('apexcharts-tooltip-text-z-label');\n          gZValText.appendChild(txtZLabel);\n          var txtZValue = document.createElement('span');\n          txtZValue.classList.add('apexcharts-tooltip-text-z-value');\n          gZValText.appendChild(txtZValue);\n          gYZ.appendChild(gYValText);\n          gYZ.appendChild(gZValText);\n          gTxt.appendChild(gYZ);\n          tooltipEl.appendChild(gTxt);\n          ttItems.push(gTxt);\n        }\n\n        return ttItems;\n      }\n    }, {\n      key: \"addSVGEvents\",\n      value: function addSVGEvents() {\n        var w = this.w;\n        var type = w.config.chart.type;\n        var tooltipEl = this.getElTooltip();\n        var commonBar = !!(type === 'bar' || type === 'candlestick' || type === 'rangeBar');\n        var hoverArea = w.globals.dom.Paper.node;\n        var elGrid = this.getElGrid();\n\n        if (elGrid) {\n          this.seriesBound = elGrid.getBoundingClientRect();\n        }\n\n        var tooltipY = [];\n        var tooltipX = [];\n        var seriesHoverParams = {\n          hoverArea: hoverArea,\n          elGrid: elGrid,\n          tooltipEl: tooltipEl,\n          tooltipY: tooltipY,\n          tooltipX: tooltipX,\n          ttItems: this.ttItems\n        };\n        var points;\n\n        if (w.globals.axisCharts) {\n          if (type === 'area' || type === 'line' || type === 'scatter' || type === 'bubble') {\n            points = w.globals.dom.baseEl.querySelectorAll(\".apexcharts-series[data\\\\:longestSeries='true'] .apexcharts-marker\");\n          } else if (commonBar) {\n            points = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series .apexcharts-bar-area, .apexcharts-series .apexcharts-candlestick-area, .apexcharts-series .apexcharts-rangebar-area');\n          } else if (type === 'heatmap') {\n            points = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series .apexcharts-heatmap');\n          } else if (type === 'radar') {\n            points = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series .apexcharts-marker');\n          }\n\n          if (points && points.length) {\n            for (var p = 0; p < points.length; p++) {\n              tooltipY.push(points[p].getAttribute('cy'));\n              tooltipX.push(points[p].getAttribute('cx'));\n            }\n          }\n        }\n\n        var validSharedChartTypes = w.globals.xyCharts && !this.showOnIntersect || w.globals.comboCharts && !this.showOnIntersect || commonBar && this.hasBars() && this.tConfig.shared;\n\n        if (validSharedChartTypes) {\n          this.addPathsEventListeners([hoverArea], seriesHoverParams);\n        } else if (commonBar && !w.globals.comboCharts) {\n          this.addBarsEventListeners(seriesHoverParams);\n        } else if (type === 'bubble' || type === 'scatter' || type === 'radar' || this.showOnIntersect && (type === 'area' || type === 'line')) {\n          this.addPointsEventsListeners(seriesHoverParams);\n        } else if (!w.globals.axisCharts || type === 'heatmap') {\n          var seriesAll = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series');\n          this.addPathsEventListeners(seriesAll, seriesHoverParams);\n        }\n\n        if (this.showOnIntersect) {\n          var linePoints = w.globals.dom.baseEl.querySelectorAll('.apexcharts-line-series .apexcharts-marker');\n\n          if (linePoints.length > 0) {\n            // if we find any lineSeries, addEventListeners for them\n            this.addPathsEventListeners(linePoints, seriesHoverParams);\n          }\n\n          var areaPoints = w.globals.dom.baseEl.querySelectorAll('.apexcharts-area-series .apexcharts-marker');\n\n          if (areaPoints.length > 0) {\n            // if we find any areaSeries, addEventListeners for them\n            this.addPathsEventListeners(areaPoints, seriesHoverParams);\n          } // combo charts may have bars, so add event listeners here too\n\n\n          if (this.hasBars() && !this.tConfig.shared) {\n            this.addBarsEventListeners(seriesHoverParams);\n          }\n        }\n      }\n    }, {\n      key: \"drawFixedTooltipRect\",\n      value: function drawFixedTooltipRect() {\n        var w = this.w;\n        var tooltipEl = this.getElTooltip();\n        var tooltipRect = tooltipEl.getBoundingClientRect();\n        var ttWidth = tooltipRect.width + 10;\n        var ttHeight = tooltipRect.height + 10;\n        var x = this.tConfig.fixed.offsetX;\n        var y = this.tConfig.fixed.offsetY;\n\n        if (this.tConfig.fixed.position.toLowerCase().indexOf('right') > -1) {\n          x = x + w.globals.svgWidth - ttWidth + 10;\n        }\n\n        if (this.tConfig.fixed.position.toLowerCase().indexOf('bottom') > -1) {\n          y = y + w.globals.svgHeight - ttHeight - 10;\n        }\n\n        tooltipEl.style.left = x + 'px';\n        tooltipEl.style.top = y + 'px';\n        return {\n          x: x,\n          y: y,\n          ttWidth: ttWidth,\n          ttHeight: ttHeight\n        };\n      }\n    }, {\n      key: \"addPointsEventsListeners\",\n      value: function addPointsEventsListeners(seriesHoverParams) {\n        var w = this.w;\n        var points = w.globals.dom.baseEl.querySelectorAll('.apexcharts-series-markers .apexcharts-marker');\n        this.addPathsEventListeners(points, seriesHoverParams);\n      }\n    }, {\n      key: \"addBarsEventListeners\",\n      value: function addBarsEventListeners(seriesHoverParams) {\n        var w = this.w;\n        var bars = w.globals.dom.baseEl.querySelectorAll('.apexcharts-bar-area, .apexcharts-candlestick-area, .apexcharts-rangebar-area');\n        this.addPathsEventListeners(bars, seriesHoverParams);\n      }\n    }, {\n      key: \"addPathsEventListeners\",\n      value: function addPathsEventListeners(paths, opts) {\n        var _this = this;\n\n        var self = this;\n\n        var _loop = function _loop(p) {\n          var extendedOpts = {\n            paths: paths[p],\n            tooltipEl: opts.tooltipEl,\n            tooltipY: opts.tooltipY,\n            tooltipX: opts.tooltipX,\n            elGrid: opts.elGrid,\n            hoverArea: opts.hoverArea,\n            ttItems: opts.ttItems\n          };\n          _this.w.globals.tooltipOpts = extendedOpts;\n          var events = ['mousemove', 'mouseup', 'touchmove', 'mouseout', 'touchend'];\n          events.map(function (ev) {\n            return paths[p].addEventListener(ev, self.seriesHover.bind(self, extendedOpts), {\n              capture: false,\n              passive: true\n            });\n          });\n        };\n\n        for (var p = 0; p < paths.length; p++) {\n          _loop(p);\n        }\n      }\n      /*\n       ** The actual series hover function\n       */\n\n    }, {\n      key: \"seriesHover\",\n      value: function seriesHover(opt, e) {\n        var _this2 = this;\n\n        var chartGroups = [];\n        var w = this.w; // if user has more than one charts in group, we need to sync\n\n        if (w.config.chart.group) {\n          chartGroups = this.ctx.getGroupedCharts();\n        }\n\n        if (w.globals.axisCharts && (w.globals.minX === -Infinity && w.globals.maxX === Infinity || w.globals.dataPoints === 0)) {\n          return;\n        }\n\n        if (chartGroups.length) {\n          chartGroups.forEach(function (ch) {\n            var tooltipEl = _this2.getElTooltip(ch);\n\n            var newOpts = {\n              paths: opt.paths,\n              tooltipEl: tooltipEl,\n              tooltipY: opt.tooltipY,\n              tooltipX: opt.tooltipX,\n              elGrid: opt.elGrid,\n              hoverArea: opt.hoverArea,\n              ttItems: ch.w.globals.tooltip.ttItems // all the charts should have the same minX and maxX (same xaxis) for multiple tooltips to work correctly\n\n            };\n\n            if (ch.w.globals.minX === _this2.w.globals.minX && ch.w.globals.maxX === _this2.w.globals.maxX) {\n              ch.w.globals.tooltip.seriesHoverByContext({\n                chartCtx: ch,\n                ttCtx: ch.w.globals.tooltip,\n                opt: newOpts,\n                e: e\n              });\n            }\n          });\n        } else {\n          this.seriesHoverByContext({\n            chartCtx: this.ctx,\n            ttCtx: this.w.globals.tooltip,\n            opt: opt,\n            e: e\n          });\n        }\n      }\n    }, {\n      key: \"seriesHoverByContext\",\n      value: function seriesHoverByContext(_ref) {\n        var chartCtx = _ref.chartCtx,\n            ttCtx = _ref.ttCtx,\n            opt = _ref.opt,\n            e = _ref.e;\n        var w = chartCtx.w;\n        var tooltipEl = this.getElTooltip(); // tooltipRect is calculated on every mousemove, because the text is dynamic\n\n        ttCtx.tooltipRect = {\n          x: 0,\n          y: 0,\n          ttWidth: tooltipEl.getBoundingClientRect().width,\n          ttHeight: tooltipEl.getBoundingClientRect().height\n        };\n        ttCtx.e = e; // highlight the current hovered bars\n\n        if (ttCtx.hasBars() && !w.globals.comboCharts && !ttCtx.isBarShared) {\n          if (this.tConfig.onDatasetHover.highlightDataSeries) {\n            var series = new Series(chartCtx);\n            series.toggleSeriesOnHover(e, e.target.parentNode);\n          }\n        }\n\n        if (ttCtx.fixedTooltip) {\n          ttCtx.drawFixedTooltipRect();\n        }\n\n        if (w.globals.axisCharts) {\n          ttCtx.axisChartsTooltips({\n            e: e,\n            opt: opt,\n            tooltipRect: ttCtx.tooltipRect\n          });\n        } else {\n          // non-plot charts i.e pie/donut/circle\n          ttCtx.nonAxisChartsTooltips({\n            e: e,\n            opt: opt,\n            tooltipRect: ttCtx.tooltipRect\n          });\n        }\n      } // tooltip handling for line/area/bar/columns/scatter\n\n    }, {\n      key: \"axisChartsTooltips\",\n      value: function axisChartsTooltips(_ref2) {\n        var e = _ref2.e,\n            opt = _ref2.opt;\n        var w = this.w;\n        var j, x, y;\n        var capj = null;\n        var seriesBound = opt.elGrid.getBoundingClientRect();\n        var clientX = e.type === 'touchmove' ? e.touches[0].clientX : e.clientX;\n        var clientY = e.type === 'touchmove' ? e.touches[0].clientY : e.clientY;\n        this.clientY = clientY;\n        this.clientX = clientX;\n        w.globals.capturedSeriesIndex = -1;\n        w.globals.capturedDataPointIndex = -1;\n\n        if (clientY < seriesBound.top || clientY > seriesBound.top + seriesBound.height) {\n          this.handleMouseOut(opt);\n          return;\n        }\n\n        if (Array.isArray(this.tConfig.enabledOnSeries) && !w.config.tooltip.shared) {\n          var index = parseInt(opt.paths.getAttribute('index'));\n\n          if (this.tConfig.enabledOnSeries.indexOf(index) < 0) {\n            this.handleMouseOut(opt);\n            return;\n          }\n        }\n\n        var tooltipEl = this.getElTooltip();\n        var xcrosshairs = this.getElXCrosshairs();\n        var isStickyTooltip = w.globals.xyCharts || w.config.chart.type === 'bar' && !w.globals.isBarHorizontal && this.hasBars() && this.tConfig.shared || w.globals.comboCharts && this.hasBars;\n\n        if (w.globals.isBarHorizontal && this.hasBars()) {\n          isStickyTooltip = false;\n        }\n\n        if (e.type === 'mousemove' || e.type === 'touchmove' || e.type === 'mouseup') {\n          if (xcrosshairs !== null) {\n            xcrosshairs.classList.add('active');\n          }\n\n          if (this.ycrosshairs !== null && this.blyaxisTooltip) {\n            this.ycrosshairs.classList.add('active');\n          }\n\n          if (isStickyTooltip && !this.showOnIntersect) {\n            capj = this.tooltipUtil.getNearestValues({\n              context: this,\n              hoverArea: opt.hoverArea,\n              elGrid: opt.elGrid,\n              clientX: clientX,\n              clientY: clientY,\n              hasBars: this.hasBars\n            });\n            j = capj.j;\n            var capturedSeries = capj.capturedSeries;\n\n            if (capj.hoverX < 0 || capj.hoverX > w.globals.gridWidth) {\n              this.handleMouseOut(opt);\n              return;\n            }\n\n            if (capturedSeries !== null) {\n              var ignoreNull = w.globals.series[capturedSeries][j] === null;\n\n              if (ignoreNull) {\n                this.handleMouseOut(opt);\n                return;\n              }\n\n              if (typeof w.globals.series[capturedSeries][j] !== 'undefined') {\n                if (this.tConfig.shared && this.tooltipUtil.isXoverlap(j) && this.tooltipUtil.isInitialSeriesSameLen()) {\n                  this.create(e, this, capturedSeries, j, opt.ttItems);\n                } else {\n                  this.create(e, this, capturedSeries, j, opt.ttItems, false);\n                }\n              } else {\n                if (this.tooltipUtil.isXoverlap(j)) {\n                  this.create(e, this, 0, j, opt.ttItems);\n                }\n              }\n            } else {\n              // couldn't capture any series. check if shared X is same,\n              // if yes, draw a grouped tooltip\n              if (this.tooltipUtil.isXoverlap(j)) {\n                this.create(e, this, 0, j, opt.ttItems);\n              }\n            }\n          } else {\n            if (w.config.chart.type === 'heatmap') {\n              var markerXY = this.intersect.handleHeatTooltip({\n                e: e,\n                opt: opt,\n                x: x,\n                y: y\n              });\n              x = markerXY.x;\n              y = markerXY.y;\n              tooltipEl.style.left = x + 'px';\n              tooltipEl.style.top = y + 'px';\n            } else {\n              if (this.hasBars) {\n                this.intersect.handleBarTooltip({\n                  e: e,\n                  opt: opt\n                });\n              }\n\n              if (this.hasMarkers) {\n                // intersect - line/area/scatter/bubble\n                this.intersect.handleMarkerTooltip({\n                  e: e,\n                  opt: opt,\n                  x: x,\n                  y: y\n                });\n              }\n            }\n          }\n\n          if (this.blyaxisTooltip) {\n            for (var yt = 0; yt < w.config.yaxis.length; yt++) {\n              this.axesTooltip.drawYaxisTooltipText(yt, clientY, this.xyRatios);\n            }\n          }\n\n          opt.tooltipEl.classList.add('active');\n        } else if (e.type === 'mouseout' || e.type === 'touchend') {\n          this.handleMouseOut(opt);\n        }\n      } // tooltip handling for pie/donuts\n\n    }, {\n      key: \"nonAxisChartsTooltips\",\n      value: function nonAxisChartsTooltips(_ref3) {\n        var e = _ref3.e,\n            opt = _ref3.opt,\n            tooltipRect = _ref3.tooltipRect;\n        var w = this.w;\n        var rel = opt.paths.getAttribute('rel');\n        var tooltipEl = this.getElTooltip();\n        var seriesBound = w.globals.dom.elWrap.getBoundingClientRect();\n\n        if (e.type === 'mousemove' || e.type === 'touchmove') {\n          tooltipEl.classList.add('active');\n          this.tooltipLabels.drawSeriesTexts({\n            ttItems: opt.ttItems,\n            i: parseInt(rel) - 1,\n            shared: false\n          });\n          var x = w.globals.clientX - seriesBound.left - tooltipRect.ttWidth / 2;\n          var y = w.globals.clientY - seriesBound.top - tooltipRect.ttHeight - 10;\n          tooltipEl.style.left = x + 'px';\n          tooltipEl.style.top = y + 'px';\n        } else if (e.type === 'mouseout' || e.type === 'touchend') {\n          tooltipEl.classList.remove('active');\n        }\n      }\n    }, {\n      key: \"deactivateHoverFilter\",\n      value: function deactivateHoverFilter() {\n        var w = this.w;\n        var graphics = new Graphics(this.ctx);\n        var allPaths = w.globals.dom.Paper.select(\".apexcharts-bar-area\");\n\n        for (var b = 0; b < allPaths.length; b++) {\n          graphics.pathMouseLeave(allPaths[b]);\n        }\n      }\n    }, {\n      key: \"handleMouseOut\",\n      value: function handleMouseOut(opt) {\n        var w = this.w;\n        var xcrosshairs = this.getElXCrosshairs();\n        opt.tooltipEl.classList.remove('active');\n        this.deactivateHoverFilter();\n\n        if (w.config.chart.type !== 'bubble') {\n          this.marker.resetPointsSize();\n        }\n\n        if (xcrosshairs !== null) {\n          xcrosshairs.classList.remove('active');\n        }\n\n        if (this.ycrosshairs !== null) {\n          this.ycrosshairs.classList.remove('active');\n        }\n\n        if (this.blxaxisTooltip) {\n          this.xaxisTooltip.classList.remove('active');\n        }\n\n        if (this.blyaxisTooltip) {\n          if (this.yaxisTTEls === null) {\n            this.yaxisTTEls = w.globals.dom.baseEl.querySelectorAll('.apexcharts-yaxistooltip');\n          }\n\n          for (var i = 0; i < this.yaxisTTEls.length; i++) {\n            this.yaxisTTEls[i].classList.remove('active');\n          }\n        }\n\n        if (w.config.legend.tooltipHoverFormatter) {\n          this.legendLabels.forEach(function (l) {\n            var defaultText = l.getAttribute('data:default-text');\n            l.innerHTML = defaultText;\n          });\n        }\n      }\n    }, {\n      key: \"getElMarkers\",\n      value: function getElMarkers() {\n        return this.w.globals.dom.baseEl.querySelectorAll(' .apexcharts-series-markers');\n      }\n    }, {\n      key: \"getAllMarkers\",\n      value: function getAllMarkers() {\n        return this.w.globals.dom.baseEl.querySelectorAll('.apexcharts-series-markers .apexcharts-marker');\n      }\n    }, {\n      key: \"hasMarkers\",\n      value: function hasMarkers() {\n        var markers = this.getElMarkers();\n        return markers.length > 0;\n      }\n    }, {\n      key: \"getElBars\",\n      value: function getElBars() {\n        return this.w.globals.dom.baseEl.querySelectorAll('.apexcharts-bar-series,  .apexcharts-candlestick-series, .apexcharts-rangebar-series');\n      }\n    }, {\n      key: \"hasBars\",\n      value: function hasBars() {\n        var bars = this.getElBars();\n        return bars.length > 0;\n      }\n    }, {\n      key: \"markerClick\",\n      value: function markerClick(e, seriesIndex, dataPointIndex) {\n        var w = this.w;\n\n        if (typeof w.config.chart.events.markerClick === 'function') {\n          w.config.chart.events.markerClick(e, this.ctx, {\n            seriesIndex: seriesIndex,\n            dataPointIndex: dataPointIndex,\n            w: w\n          });\n        }\n\n        this.ctx.fireEvent('markerClick', [e, this.ctx, {\n          seriesIndex: seriesIndex,\n          dataPointIndex: dataPointIndex,\n          w: w\n        }]);\n      }\n    }, {\n      key: \"create\",\n      value: function create(e, context, capturedSeries, j, ttItems) {\n        var shared = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : null;\n        var w = this.w;\n        var ttCtx = context;\n\n        if (e.type === 'mouseup') {\n          this.markerClick(e, capturedSeries, j);\n        }\n\n        if (shared === null) shared = this.tConfig.shared;\n        var hasMarkers = this.hasMarkers();\n        var bars = this.getElBars();\n\n        if (w.config.legend.tooltipHoverFormatter) {\n          var legendFormatter = w.config.legend.tooltipHoverFormatter;\n          var els = Array.from(this.legendLabels); // reset all legend values first\n\n          els.forEach(function (l) {\n            var legendName = l.getAttribute('data:default-text');\n            l.innerHTML = legendName;\n          }); // for irregular time series\n\n          for (var i = 0; i < els.length; i++) {\n            var l = els[i];\n            var lsIndex = parseInt(l.getAttribute('i'));\n            var legendName = l.getAttribute('data:default-text');\n            var text = legendFormatter(legendName, {\n              seriesIndex: shared ? lsIndex : capturedSeries,\n              dataPointIndex: j,\n              w: w\n            });\n\n            if (!shared) {\n              l.innerHTML = lsIndex === capturedSeries ? text : legendName;\n\n              if (capturedSeries === lsIndex) {\n                break;\n              }\n            } else {\n              l.innerHTML = w.globals.collapsedSeriesIndices.indexOf(lsIndex) < 0 ? text : legendName;\n            }\n          }\n        }\n\n        if (shared) {\n          ttCtx.tooltipLabels.drawSeriesTexts({\n            ttItems: ttItems,\n            i: capturedSeries,\n            j: j,\n            shared: this.showOnIntersect ? false : this.tConfig.shared\n          });\n\n          if (hasMarkers) {\n            if (w.globals.markers.largestSize > 0) {\n              ttCtx.marker.enlargePoints(j);\n            } else {\n              ttCtx.tooltipPosition.moveDynamicPointsOnHover(j);\n            }\n          }\n\n          if (this.hasBars()) {\n            this.barSeriesHeight = this.tooltipUtil.getBarsHeight(bars);\n\n            if (this.barSeriesHeight > 0) {\n              // hover state, activate snap filter\n              var graphics = new Graphics(this.ctx);\n              var paths = w.globals.dom.Paper.select(\".apexcharts-bar-area[j='\".concat(j, \"']\")); // de-activate first\n\n              this.deactivateHoverFilter();\n              this.tooltipPosition.moveStickyTooltipOverBars(j);\n\n              for (var b = 0; b < paths.length; b++) {\n                graphics.pathMouseEnter(paths[b]);\n              }\n            }\n          }\n        } else {\n          ttCtx.tooltipLabels.drawSeriesTexts({\n            shared: false,\n            ttItems: ttItems,\n            i: capturedSeries,\n            j: j\n          });\n\n          if (this.hasBars()) {\n            ttCtx.tooltipPosition.moveStickyTooltipOverBars(j);\n          }\n\n          if (hasMarkers) {\n            ttCtx.tooltipPosition.moveMarkers(capturedSeries, j);\n          }\n        }\n      }\n    }]);\n\n    return Tooltip;\n  }();\n\n  var icoPan = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\" fill=\\\"#000000\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\">\\n    <defs>\\n        <path d=\\\"M0 0h24v24H0z\\\" id=\\\"a\\\"/>\\n    </defs>\\n    <clipPath id=\\\"b\\\">\\n        <use overflow=\\\"visible\\\" xlink:href=\\\"#a\\\"/>\\n    </clipPath>\\n    <path clip-path=\\\"url(#b)\\\" d=\\\"M23 5.5V20c0 2.2-1.8 4-4 4h-7.3c-1.08 0-2.1-.43-2.85-1.19L1 14.83s1.26-1.23 1.3-1.25c.22-.19.49-.29.79-.29.22 0 .42.06.6.16.04.01 4.31 2.46 4.31 2.46V4c0-.83.67-1.5 1.5-1.5S11 3.17 11 4v7h1V1.5c0-.83.67-1.5 1.5-1.5S15 .67 15 1.5V11h1V2.5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5V11h1V5.5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5z\\\"/>\\n</svg>\";\n\n  var icoZoom = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" fill=\\\"#000000\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\">\\n    <path d=\\\"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z\\\"/>\\n    <path d=\\\"M0 0h24v24H0V0z\\\" fill=\\\"none\\\"/>\\n    <path d=\\\"M12 10h-2v2H9v-2H7V9h2V7h1v2h2v1z\\\"/>\\n</svg>\";\n\n  var icoReset = \"<svg fill=\\\"#000000\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n    <path d=\\\"M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z\\\"/>\\n    <path d=\\\"M0 0h24v24H0z\\\" fill=\\\"none\\\"/>\\n</svg>\";\n\n  var icoZoomIn = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\">\\n    <path d=\\\"M0 0h24v24H0z\\\" fill=\\\"none\\\"/>\\n    <path d=\\\"M13 7h-2v4H7v2h4v4h2v-4h4v-2h-4V7zm-1-5C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z\\\"/>\\n</svg>\\n\";\n\n  var icoZoomOut = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\">\\n    <path d=\\\"M0 0h24v24H0z\\\" fill=\\\"none\\\"/>\\n    <path d=\\\"M7 11v2h10v-2H7zm5-9C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z\\\"/>\\n</svg>\\n\";\n\n  var icoSelect = \"<svg fill=\\\"#6E8192\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" width=\\\"24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n    <path d=\\\"M0 0h24v24H0z\\\" fill=\\\"none\\\"/>\\n    <path d=\\\"M3 5h2V3c-1.1 0-2 .9-2 2zm0 8h2v-2H3v2zm4 8h2v-2H7v2zM3 9h2V7H3v2zm10-6h-2v2h2V3zm6 0v2h2c0-1.1-.9-2-2-2zM5 21v-2H3c0 1.1.9 2 2 2zm-2-4h2v-2H3v2zM9 3H7v2h2V3zm2 18h2v-2h-2v2zm8-8h2v-2h-2v2zm0 8c1.1 0 2-.9 2-2h-2v2zm0-12h2V7h-2v2zm0 8h2v-2h-2v2zm-4 4h2v-2h-2v2zm0-16h2V3h-2v2z\\\"/>\\n</svg>\";\n\n  var icoMenu = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><path fill=\\\"none\\\" d=\\\"M0 0h24v24H0V0z\\\"/><path d=\\\"M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z\\\"/></svg>\";\n\n  /**\n   * ApexCharts Toolbar Class for creating toolbar in axis based charts.\n   *\n   * @module Toolbar\n   **/\n\n  var Toolbar =\n  /*#__PURE__*/\n  function () {\n    function Toolbar(ctx) {\n      _classCallCheck(this, Toolbar);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n      this.ev = this.w.config.chart.events;\n      this.localeValues = this.w.globals.locale.toolbar;\n    }\n\n    _createClass(Toolbar, [{\n      key: \"createToolbar\",\n      value: function createToolbar() {\n        var w = this.w;\n        var elToolbarWrap = document.createElement('div');\n        elToolbarWrap.setAttribute('class', 'apexcharts-toolbar');\n        w.globals.dom.elWrap.appendChild(elToolbarWrap);\n        this.elZoom = document.createElement('div');\n        this.elZoomIn = document.createElement('div');\n        this.elZoomOut = document.createElement('div');\n        this.elPan = document.createElement('div');\n        this.elSelection = document.createElement('div');\n        this.elZoomReset = document.createElement('div');\n        this.elMenuIcon = document.createElement('div');\n        this.elMenu = document.createElement('div');\n        this.elCustomIcons = [];\n        this.t = w.config.chart.toolbar.tools;\n\n        if (Array.isArray(this.t.customIcons)) {\n          for (var i = 0; i < this.t.customIcons.length; i++) {\n            this.elCustomIcons.push(document.createElement('div'));\n          }\n        }\n\n        this.elMenuItems = [];\n        var toolbarControls = [];\n\n        if (this.t.zoomin && w.config.chart.zoom.enabled) {\n          toolbarControls.push({\n            el: this.elZoomIn,\n            icon: typeof this.t.zoomin === 'string' ? this.t.zoomin : icoZoomIn,\n            title: this.localeValues.zoomIn,\n            class: 'apexcharts-zoom-in-icon'\n          });\n        }\n\n        if (this.t.zoomout && w.config.chart.zoom.enabled) {\n          toolbarControls.push({\n            el: this.elZoomOut,\n            icon: typeof this.t.zoomout === 'string' ? this.t.zoomout : icoZoomOut,\n            title: this.localeValues.zoomOut,\n            class: 'apexcharts-zoom-out-icon'\n          });\n        }\n\n        if (this.t.zoom && w.config.chart.zoom.enabled) {\n          toolbarControls.push({\n            el: this.elZoom,\n            icon: typeof this.t.zoom === 'string' ? this.t.zoom : icoZoom,\n            title: this.localeValues.selectionZoom,\n            class: w.globals.isTouchDevice ? 'hidden' : 'apexcharts-zoom-icon'\n          });\n        }\n\n        if (this.t.selection && w.config.chart.selection.enabled) {\n          toolbarControls.push({\n            el: this.elSelection,\n            icon: typeof this.t.selection === 'string' ? this.t.selection : icoSelect,\n            title: this.localeValues.selection,\n            class: w.globals.isTouchDevice ? 'hidden' : 'apexcharts-selection-icon'\n          });\n        }\n\n        if (this.t.pan && w.config.chart.zoom.enabled) {\n          toolbarControls.push({\n            el: this.elPan,\n            icon: typeof this.t.pan === 'string' ? this.t.pan : icoPan,\n            title: this.localeValues.pan,\n            class: w.globals.isTouchDevice ? 'hidden' : 'apexcharts-pan-icon'\n          });\n        }\n\n        if (this.t.reset && w.config.chart.zoom.enabled) {\n          toolbarControls.push({\n            el: this.elZoomReset,\n            icon: typeof this.t.reset === 'string' ? this.t.reset : icoReset,\n            title: this.localeValues.reset,\n            class: 'apexcharts-reset-zoom-icon'\n          });\n        }\n\n        if (this.t.download) {\n          toolbarControls.push({\n            el: this.elMenuIcon,\n            icon: typeof this.t.download === 'string' ? this.t.download : icoMenu,\n            title: this.localeValues.menu,\n            class: 'apexcharts-menu-icon'\n          });\n        }\n\n        for (var _i = 0; _i < this.elCustomIcons.length; _i++) {\n          toolbarControls.push({\n            el: this.elCustomIcons[_i],\n            icon: this.t.customIcons[_i].icon,\n            title: this.t.customIcons[_i].title,\n            index: this.t.customIcons[_i].index,\n            class: 'apexcharts-toolbar-custom-icon ' + this.t.customIcons[_i].class\n          });\n        }\n\n        toolbarControls.forEach(function (t, index) {\n          if (t.index) {\n            Utils.moveIndexInArray(toolbarControls, index, t.index);\n          }\n        });\n\n        for (var _i2 = 0; _i2 < toolbarControls.length; _i2++) {\n          Graphics.setAttrs(toolbarControls[_i2].el, {\n            class: toolbarControls[_i2].class,\n            title: toolbarControls[_i2].title\n          });\n          toolbarControls[_i2].el.innerHTML = toolbarControls[_i2].icon;\n          elToolbarWrap.appendChild(toolbarControls[_i2].el);\n        }\n\n        elToolbarWrap.appendChild(this.elMenu);\n        Graphics.setAttrs(this.elMenu, {\n          class: 'apexcharts-menu'\n        });\n        var menuItems = [{\n          name: 'exportSVG',\n          title: this.localeValues.exportToSVG\n        }, {\n          name: 'exportPNG',\n          title: this.localeValues.exportToPNG\n        }];\n\n        for (var _i3 = 0; _i3 < menuItems.length; _i3++) {\n          this.elMenuItems.push(document.createElement('div'));\n          this.elMenuItems[_i3].innerHTML = menuItems[_i3].title;\n          Graphics.setAttrs(this.elMenuItems[_i3], {\n            class: \"apexcharts-menu-item \".concat(menuItems[_i3].name),\n            title: menuItems[_i3].title\n          });\n          this.elMenu.appendChild(this.elMenuItems[_i3]);\n        }\n\n        if (w.globals.zoomEnabled) {\n          this.elZoom.classList.add('selected');\n        } else if (w.globals.panEnabled) {\n          this.elPan.classList.add('selected');\n        } else if (w.globals.selectionEnabled) {\n          this.elSelection.classList.add('selected');\n        }\n\n        this.addToolbarEventListeners();\n      }\n    }, {\n      key: \"addToolbarEventListeners\",\n      value: function addToolbarEventListeners() {\n        var _this = this;\n\n        this.elZoomReset.addEventListener('click', this.handleZoomReset.bind(this));\n        this.elSelection.addEventListener('click', this.toggleSelection.bind(this));\n        this.elZoom.addEventListener('click', this.toggleZooming.bind(this));\n        this.elZoomIn.addEventListener('click', this.handleZoomIn.bind(this));\n        this.elZoomOut.addEventListener('click', this.handleZoomOut.bind(this));\n        this.elPan.addEventListener('click', this.togglePanning.bind(this));\n        this.elMenuIcon.addEventListener('click', this.toggleMenu.bind(this));\n        this.elMenuItems.forEach(function (m) {\n          if (m.classList.contains('exportSVG')) {\n            m.addEventListener('click', _this.downloadSVG.bind(_this));\n          } else if (m.classList.contains('exportPNG')) {\n            m.addEventListener('click', _this.downloadPNG.bind(_this));\n          }\n        });\n\n        for (var i = 0; i < this.t.customIcons.length; i++) {\n          this.elCustomIcons[i].addEventListener('click', this.t.customIcons[i].click.bind(this, this.ctx, this.ctx.w));\n        }\n      }\n    }, {\n      key: \"toggleSelection\",\n      value: function toggleSelection() {\n        this.toggleOtherControls();\n        this.w.globals.selectionEnabled = !this.w.globals.selectionEnabled;\n\n        if (!this.elSelection.classList.contains('selected')) {\n          this.elSelection.classList.add('selected');\n        } else {\n          this.elSelection.classList.remove('selected');\n        }\n      }\n    }, {\n      key: \"toggleZooming\",\n      value: function toggleZooming() {\n        this.toggleOtherControls();\n        this.w.globals.zoomEnabled = !this.w.globals.zoomEnabled;\n\n        if (!this.elZoom.classList.contains('selected')) {\n          this.elZoom.classList.add('selected');\n        } else {\n          this.elZoom.classList.remove('selected');\n        }\n      }\n    }, {\n      key: \"getToolbarIconsReference\",\n      value: function getToolbarIconsReference() {\n        var w = this.w;\n\n        if (!this.elZoom) {\n          this.elZoom = w.globals.dom.baseEl.querySelector('.apexcharts-zoom-icon');\n        }\n\n        if (!this.elPan) {\n          this.elPan = w.globals.dom.baseEl.querySelector('.apexcharts-pan-icon');\n        }\n\n        if (!this.elSelection) {\n          this.elSelection = w.globals.dom.baseEl.querySelector('.apexcharts-selection-icon');\n        }\n      }\n    }, {\n      key: \"enableZooming\",\n      value: function enableZooming() {\n        this.toggleOtherControls();\n        this.w.globals.zoomEnabled = true;\n\n        if (this.elZoom) {\n          this.elZoom.classList.add('selected');\n        }\n\n        if (this.elPan) {\n          this.elPan.classList.remove('selected');\n        }\n      }\n    }, {\n      key: \"enablePanning\",\n      value: function enablePanning() {\n        this.toggleOtherControls();\n        this.w.globals.panEnabled = true;\n\n        if (this.elPan) {\n          this.elPan.classList.add('selected');\n        }\n\n        if (this.elZoom) {\n          this.elZoom.classList.remove('selected');\n        }\n      }\n    }, {\n      key: \"togglePanning\",\n      value: function togglePanning() {\n        this.toggleOtherControls();\n        this.w.globals.panEnabled = !this.w.globals.panEnabled;\n\n        if (!this.elPan.classList.contains('selected')) {\n          this.elPan.classList.add('selected');\n        } else {\n          this.elPan.classList.remove('selected');\n        }\n      }\n    }, {\n      key: \"toggleOtherControls\",\n      value: function toggleOtherControls() {\n        var w = this.w;\n        w.globals.panEnabled = false;\n        w.globals.zoomEnabled = false;\n        w.globals.selectionEnabled = false;\n        this.getToolbarIconsReference();\n\n        if (this.elPan) {\n          this.elPan.classList.remove('selected');\n        }\n\n        if (this.elSelection) {\n          this.elSelection.classList.remove('selected');\n        }\n\n        if (this.elZoom) {\n          this.elZoom.classList.remove('selected');\n        }\n      }\n    }, {\n      key: \"handleZoomIn\",\n      value: function handleZoomIn() {\n        var w = this.w;\n        var centerX = (w.globals.minX + w.globals.maxX) / 2;\n        var newMinX = (w.globals.minX + centerX) / 2;\n        var newMaxX = (w.globals.maxX + centerX) / 2;\n\n        if (!w.globals.disableZoomIn) {\n          this.zoomUpdateOptions(newMinX, newMaxX);\n        }\n      }\n    }, {\n      key: \"handleZoomOut\",\n      value: function handleZoomOut() {\n        var w = this.w; // avoid zooming out beyond 1000 which may result in NaN values being printed on x-axis\n\n        if (w.config.xaxis.type === 'datetime' && new Date(w.globals.minX).getUTCFullYear() < 1000) {\n          return;\n        }\n\n        var centerX = (w.globals.minX + w.globals.maxX) / 2;\n        var newMinX = w.globals.minX - (centerX - w.globals.minX);\n        var newMaxX = w.globals.maxX - (centerX - w.globals.maxX);\n\n        if (!w.globals.disableZoomOut) {\n          this.zoomUpdateOptions(newMinX, newMaxX);\n        }\n      }\n    }, {\n      key: \"zoomUpdateOptions\",\n      value: function zoomUpdateOptions(newMinX, newMaxX) {\n        var xaxis = {\n          min: newMinX,\n          max: newMaxX\n        };\n        var beforeZoomRange = this.getBeforeZoomRange(xaxis);\n\n        if (beforeZoomRange) {\n          xaxis = beforeZoomRange.xaxis;\n        }\n\n        this.w.globals.zoomed = true;\n\n        this.ctx._updateOptions({\n          xaxis: xaxis\n        }, false, this.w.config.chart.animations.dynamicAnimation.enabled);\n\n        this.zoomCallback(xaxis);\n      }\n    }, {\n      key: \"zoomCallback\",\n      value: function zoomCallback(xaxis, yaxis) {\n        if (typeof this.ev.zoomed === 'function') {\n          this.ev.zoomed(this.ctx, {\n            xaxis: xaxis,\n            yaxis: yaxis\n          });\n        }\n      }\n    }, {\n      key: \"getBeforeZoomRange\",\n      value: function getBeforeZoomRange(xaxis, yaxis) {\n        var newRange = null;\n\n        if (typeof this.ev.beforeZoom === 'function') {\n          newRange = this.ev.beforeZoom(this, {\n            xaxis: xaxis,\n            yaxis: yaxis\n          });\n        }\n\n        return newRange;\n      }\n    }, {\n      key: \"toggleMenu\",\n      value: function toggleMenu() {\n        if (this.elMenu.classList.contains('open')) {\n          this.elMenu.classList.remove('open');\n        } else {\n          this.elMenu.classList.add('open');\n        }\n      }\n    }, {\n      key: \"downloadPNG\",\n      value: function downloadPNG() {\n        var downloadPNG = new Exports(this.ctx);\n        downloadPNG.exportToPng(this.ctx);\n        this.toggleMenu();\n      }\n    }, {\n      key: \"downloadSVG\",\n      value: function downloadSVG() {\n        var downloadSVG = new Exports(this.ctx);\n        downloadSVG.exportToSVG();\n        this.toggleMenu();\n      }\n    }, {\n      key: \"handleZoomReset\",\n      value: function handleZoomReset(e) {\n        var _this2 = this;\n\n        var charts = this.ctx.getSyncedCharts();\n        charts.forEach(function (ch) {\n          var w = ch.w;\n\n          if (w.globals.minX !== w.globals.initialminX && w.globals.maxX !== w.globals.initialmaxX) {\n            ch.revertDefaultAxisMinMax();\n\n            if (typeof w.config.chart.events.zoomed === 'function') {\n              _this2.zoomCallback({\n                min: w.config.xaxis.min,\n                max: w.config.xaxis.max\n              });\n            }\n\n            w.globals.zoomed = false;\n\n            ch._updateSeries(w.globals.initialSeries, w.config.chart.animations.dynamicAnimation.enabled);\n          }\n        });\n      }\n    }, {\n      key: \"destroy\",\n      value: function destroy() {\n        this.elZoom = null;\n        this.elZoomIn = null;\n        this.elZoomOut = null;\n        this.elPan = null;\n        this.elSelection = null;\n        this.elZoomReset = null;\n        this.elMenuIcon = null;\n      }\n    }]);\n\n    return Toolbar;\n  }();\n\n  /**\n   * ApexCharts Zoom Class for handling zooming and panning on axes based charts.\n   *\n   * @module ZoomPanSelection\n   **/\n\n  var ZoomPanSelection =\n  /*#__PURE__*/\n  function (_Toolbar) {\n    _inherits(ZoomPanSelection, _Toolbar);\n\n    function ZoomPanSelection(ctx) {\n      var _this;\n\n      _classCallCheck(this, ZoomPanSelection);\n\n      _this = _possibleConstructorReturn(this, _getPrototypeOf(ZoomPanSelection).call(this, ctx));\n      _this.ctx = ctx;\n      _this.w = ctx.w;\n      _this.dragged = false;\n      _this.graphics = new Graphics(_this.ctx);\n      _this.eventList = ['mousedown', 'mouseleave', 'mousemove', 'touchstart', 'touchmove', 'mouseup', 'touchend'];\n      _this.clientX = 0;\n      _this.clientY = 0;\n      _this.startX = 0;\n      _this.endX = 0;\n      _this.dragX = 0;\n      _this.startY = 0;\n      _this.endY = 0;\n      _this.dragY = 0;\n      return _this;\n    }\n\n    _createClass(ZoomPanSelection, [{\n      key: \"init\",\n      value: function init(_ref) {\n        var _this2 = this;\n\n        var xyRatios = _ref.xyRatios;\n        var w = this.w;\n        var me = this;\n        this.xyRatios = xyRatios;\n        this.zoomRect = this.graphics.drawRect(0, 0, 0, 0);\n        this.selectionRect = this.graphics.drawRect(0, 0, 0, 0);\n        this.gridRect = w.globals.dom.baseEl.querySelector('.apexcharts-grid');\n        this.zoomRect.node.classList.add('apexcharts-zoom-rect');\n        this.selectionRect.node.classList.add('apexcharts-selection-rect');\n        w.globals.dom.elGraphical.add(this.zoomRect);\n        w.globals.dom.elGraphical.add(this.selectionRect);\n\n        if (w.config.chart.selection.type === 'x') {\n          this.slDraggableRect = this.selectionRect.draggable({\n            minX: 0,\n            minY: 0,\n            maxX: w.globals.gridWidth,\n            maxY: w.globals.gridHeight\n          }).on('dragmove', this.selectionDragging.bind(this, 'dragging'));\n        } else if (w.config.chart.selection.type === 'y') {\n          this.slDraggableRect = this.selectionRect.draggable({\n            minX: 0,\n            maxX: w.globals.gridWidth\n          }).on('dragmove', this.selectionDragging.bind(this, 'dragging'));\n        } else {\n          this.slDraggableRect = this.selectionRect.draggable().on('dragmove', this.selectionDragging.bind(this, 'dragging'));\n        }\n\n        this.preselectedSelection();\n        this.hoverArea = w.globals.dom.baseEl.querySelector(w.globals.chartClass);\n        this.hoverArea.classList.add('zoomable');\n        this.eventList.forEach(function (event) {\n          _this2.hoverArea.addEventListener(event, me.svgMouseEvents.bind(me, xyRatios), {\n            capture: false,\n            passive: true\n          });\n        });\n      } // remove the event listeners which were previously added on hover area\n\n    }, {\n      key: \"destroy\",\n      value: function destroy() {\n        if (this.slDraggableRect) {\n          this.slDraggableRect.draggable(false);\n          this.slDraggableRect.off();\n          this.selectionRect.off();\n        }\n\n        this.selectionRect = null;\n        this.zoomRect = null;\n        this.gridRect = null;\n      }\n    }, {\n      key: \"svgMouseEvents\",\n      value: function svgMouseEvents(xyRatios, e) {\n        var w = this.w;\n        var me = this;\n        var toolbar = this.ctx.toolbar;\n        var zoomtype = w.globals.zoomEnabled ? w.config.chart.zoom.type : w.config.chart.selection.type;\n\n        if (e.shiftKey) {\n          this.shiftWasPressed = true;\n          toolbar.enablePanning();\n        } else {\n          if (this.shiftWasPressed) {\n            toolbar.enableZooming();\n            this.shiftWasPressed = false;\n          }\n        }\n\n        var falsePositives = e.target.classList.contains('apexcharts-selection-rect') || e.target.parentNode.classList.contains('apexcharts-toolbar');\n        if (falsePositives) return;\n        me.clientX = e.type === 'touchmove' || e.type === 'touchstart' ? e.touches[0].clientX : e.type === 'touchend' ? e.changedTouches[0].clientX : e.clientX;\n        me.clientY = e.type === 'touchmove' || e.type === 'touchstart' ? e.touches[0].clientY : e.type === 'touchend' ? e.changedTouches[0].clientY : e.clientY;\n\n        if (e.type === 'mousedown' && e.which === 1) {\n          var gridRectDim = me.gridRect.getBoundingClientRect();\n          me.startX = me.clientX - gridRectDim.left;\n          me.startY = me.clientY - gridRectDim.top;\n          me.dragged = false;\n          me.w.globals.mousedown = true;\n        }\n\n        if (e.type === 'mousemove' && e.which === 1 || e.type === 'touchmove') {\n          me.dragged = true;\n\n          if (w.globals.panEnabled) {\n            w.globals.selection = null;\n\n            if (me.w.globals.mousedown) {\n              me.panDragging({\n                context: me,\n                zoomtype: zoomtype,\n                xyRatios: xyRatios\n              });\n            }\n          } else {\n            if (me.w.globals.mousedown && w.globals.zoomEnabled || me.w.globals.mousedown && w.globals.selectionEnabled) {\n              me.selection = me.selectionDrawing({\n                context: me,\n                zoomtype: zoomtype\n              });\n            }\n          }\n        }\n\n        if (e.type === 'mouseup' || e.type === 'touchend' || e.type === 'mouseleave') {\n          // we will be calling getBoundingClientRect on each mousedown/mousemove/mouseup\n          var _gridRectDim = me.gridRect.getBoundingClientRect();\n\n          if (me.w.globals.mousedown) {\n            // user released the drag, now do all the calculations\n            me.endX = me.clientX - _gridRectDim.left;\n            me.endY = me.clientY - _gridRectDim.top;\n            me.dragX = Math.abs(me.endX - me.startX);\n            me.dragY = Math.abs(me.endY - me.startY);\n\n            if (w.globals.zoomEnabled || w.globals.selectionEnabled) {\n              me.selectionDrawn({\n                context: me,\n                zoomtype: zoomtype\n              });\n            }\n          }\n\n          if (w.globals.zoomEnabled) {\n            me.hideSelectionRect(this.selectionRect);\n          }\n\n          me.dragged = false;\n          me.w.globals.mousedown = false;\n        }\n\n        this.makeSelectionRectDraggable();\n      }\n    }, {\n      key: \"makeSelectionRectDraggable\",\n      value: function makeSelectionRectDraggable() {\n        var w = this.w;\n        if (!this.selectionRect) return;\n        var rectDim = this.selectionRect.node.getBoundingClientRect();\n\n        if (rectDim.width > 0 && rectDim.height > 0) {\n          this.slDraggableRect.selectize().resize({\n            constraint: {\n              minX: 0,\n              minY: 0,\n              maxX: w.globals.gridWidth,\n              maxY: w.globals.gridHeight\n            }\n          }).on('resizing', this.selectionDragging.bind(this, 'resizing'));\n        }\n      }\n    }, {\n      key: \"preselectedSelection\",\n      value: function preselectedSelection() {\n        var w = this.w;\n        var xyRatios = this.xyRatios;\n\n        if (!w.globals.zoomEnabled) {\n          if (typeof w.globals.selection !== 'undefined' && w.globals.selection !== null) {\n            this.drawSelectionRect(w.globals.selection);\n          } else {\n            if (w.config.chart.selection.xaxis.min !== undefined && w.config.chart.selection.xaxis.max !== undefined) {\n              var x = (w.config.chart.selection.xaxis.min - w.globals.minX) / xyRatios.xRatio;\n              var width = w.globals.gridWidth - (w.globals.maxX - w.config.chart.selection.xaxis.max) / xyRatios.xRatio - x;\n              var selectionRect = {\n                x: x,\n                y: 0,\n                width: width,\n                height: w.globals.gridHeight,\n                translateX: 0,\n                translateY: 0,\n                selectionEnabled: true\n              };\n              this.drawSelectionRect(selectionRect);\n              this.makeSelectionRectDraggable();\n\n              if (typeof w.config.chart.events.selection === 'function') {\n                w.config.chart.events.selection(this.ctx, {\n                  xaxis: {\n                    min: w.config.chart.selection.xaxis.min,\n                    max: w.config.chart.selection.xaxis.max\n                  },\n                  yaxis: {}\n                });\n              }\n            }\n          }\n        }\n      }\n    }, {\n      key: \"drawSelectionRect\",\n      value: function drawSelectionRect(_ref2) {\n        var x = _ref2.x,\n            y = _ref2.y,\n            width = _ref2.width,\n            height = _ref2.height,\n            translateX = _ref2.translateX,\n            translateY = _ref2.translateY;\n        var w = this.w;\n        var zoomRect = this.zoomRect;\n        var selectionRect = this.selectionRect;\n\n        if (this.dragged || w.globals.selection !== null) {\n          var scalingAttrs = {\n            transform: 'translate(' + translateX + ', ' + translateY + ')' // change styles based on zoom or selection\n            // zoom is Enabled and user has dragged, so draw blue rect\n\n          };\n\n          if (w.globals.zoomEnabled && this.dragged) {\n            zoomRect.attr({\n              x: x,\n              y: y,\n              width: width,\n              height: height,\n              fill: w.config.chart.zoom.zoomedArea.fill.color,\n              'fill-opacity': w.config.chart.zoom.zoomedArea.fill.opacity,\n              stroke: w.config.chart.zoom.zoomedArea.stroke.color,\n              'stroke-width': w.config.chart.zoom.zoomedArea.stroke.width,\n              'stroke-opacity': w.config.chart.zoom.zoomedArea.stroke.opacity\n            });\n            Graphics.setAttrs(zoomRect.node, scalingAttrs);\n          } // selection is enabled\n\n\n          if (w.globals.selectionEnabled) {\n            selectionRect.attr({\n              x: x,\n              y: y,\n              width: width > 0 ? width : 0,\n              height: height > 0 ? height : 0,\n              fill: w.config.chart.selection.fill.color,\n              'fill-opacity': w.config.chart.selection.fill.opacity,\n              stroke: w.config.chart.selection.stroke.color,\n              'stroke-width': w.config.chart.selection.stroke.width,\n              'stroke-dasharray': w.config.chart.selection.stroke.dashArray,\n              'stroke-opacity': w.config.chart.selection.stroke.opacity\n            });\n            Graphics.setAttrs(selectionRect.node, scalingAttrs);\n          }\n        }\n      }\n    }, {\n      key: \"hideSelectionRect\",\n      value: function hideSelectionRect(rect) {\n        if (rect) {\n          rect.attr({\n            x: 0,\n            y: 0,\n            width: 0,\n            height: 0\n          });\n        }\n      }\n    }, {\n      key: \"selectionDrawing\",\n      value: function selectionDrawing(_ref3) {\n        var context = _ref3.context,\n            zoomtype = _ref3.zoomtype;\n        var w = this.w;\n        var me = context;\n        var gridRectDim = this.gridRect.getBoundingClientRect();\n        var startX = me.startX - 1;\n        var startY = me.startY;\n        var selectionWidth = me.clientX - gridRectDim.left - startX;\n        var selectionHeight = me.clientY - gridRectDim.top - startY;\n        var translateX = 0;\n        var translateY = 0;\n        var selectionRect = {};\n\n        if (Math.abs(selectionWidth + startX) > w.globals.gridWidth) {\n          // user dragged the mouse outside drawing area to the right\n          selectionWidth = w.globals.gridWidth - startX;\n        } else if (me.clientX - gridRectDim.left < 0) {\n          // user dragged the mouse outside drawing area to the left\n          selectionWidth = startX;\n        } // inverse selection X\n\n\n        if (startX > me.clientX - gridRectDim.left) {\n          selectionWidth = Math.abs(selectionWidth);\n          translateX = -selectionWidth;\n        } // inverse selection Y\n\n\n        if (startY > me.clientY - gridRectDim.top) {\n          selectionHeight = Math.abs(selectionHeight);\n          translateY = -selectionHeight;\n        }\n\n        if (zoomtype === 'x') {\n          selectionRect = {\n            x: startX,\n            y: 0,\n            width: selectionWidth,\n            height: w.globals.gridHeight,\n            translateX: translateX,\n            translateY: 0\n          };\n        } else if (zoomtype === 'y') {\n          selectionRect = {\n            x: 0,\n            y: startY,\n            width: w.globals.gridWidth,\n            height: selectionHeight,\n            translateX: 0,\n            translateY: translateY\n          };\n        } else {\n          selectionRect = {\n            x: startX,\n            y: startY,\n            width: selectionWidth,\n            height: selectionHeight,\n            translateX: translateX,\n            translateY: translateY\n          };\n        }\n\n        me.drawSelectionRect(selectionRect);\n        me.selectionDragging('resizing');\n        return selectionRect;\n      }\n    }, {\n      key: \"selectionDragging\",\n      value: function selectionDragging(type, e) {\n        var _this3 = this;\n\n        var w = this.w;\n        var xyRatios = this.xyRatios;\n        var selRect = this.selectionRect;\n        var timerInterval = 0;\n\n        if (type === 'resizing') {\n          timerInterval = 30;\n        }\n\n        if (typeof w.config.chart.events.selection === 'function' && w.globals.selectionEnabled) {\n          // a small debouncer is required when resizing to avoid freezing the chart\n          clearTimeout(this.w.globals.selectionResizeTimer);\n          this.w.globals.selectionResizeTimer = window.setTimeout(function () {\n            var gridRectDim = _this3.gridRect.getBoundingClientRect();\n\n            var selectionRect = selRect.node.getBoundingClientRect();\n            var minX = w.globals.xAxisScale.niceMin + (selectionRect.left - gridRectDim.left) * xyRatios.xRatio;\n            var maxX = w.globals.xAxisScale.niceMin + (selectionRect.right - gridRectDim.left) * xyRatios.xRatio;\n            var minY = w.globals.yAxisScale[0].niceMin + (gridRectDim.bottom - selectionRect.bottom) * xyRatios.yRatio[0];\n            var maxY = w.globals.yAxisScale[0].niceMax - (selectionRect.top - gridRectDim.top) * xyRatios.yRatio[0];\n            w.config.chart.events.selection(_this3.ctx, {\n              xaxis: {\n                min: minX,\n                max: maxX\n              },\n              yaxis: {\n                min: minY,\n                max: maxY\n              }\n            });\n          }, timerInterval);\n        }\n      }\n    }, {\n      key: \"selectionDrawn\",\n      value: function selectionDrawn(_ref4) {\n        var context = _ref4.context,\n            zoomtype = _ref4.zoomtype;\n        var w = this.w;\n        var me = context;\n        var xyRatios = this.xyRatios;\n        var toolbar = this.ctx.toolbar;\n\n        if (me.startX > me.endX) {\n          var tempX = me.startX;\n          me.startX = me.endX;\n          me.endX = tempX;\n        }\n\n        if (me.startY > me.endY) {\n          var tempY = me.startY;\n          me.startY = me.endY;\n          me.endY = tempY;\n        }\n\n        var xLowestValue = w.globals.xAxisScale.niceMin + me.startX * xyRatios.xRatio;\n        var xHighestValue = w.globals.xAxisScale.niceMin + me.endX * xyRatios.xRatio; // TODO: we will consider the 1st y axis values here for getting highest and lowest y\n\n        var yHighestValue = [];\n        var yLowestValue = [];\n        w.config.yaxis.forEach(function (yaxe, index) {\n          yHighestValue.push(Math.floor(w.globals.yAxisScale[index].niceMax - xyRatios.yRatio[index] * me.startY));\n          yLowestValue.push(Math.floor(w.globals.yAxisScale[index].niceMax - xyRatios.yRatio[index] * me.endY));\n        });\n\n        if (me.dragged && (me.dragX > 10 || me.dragY > 10) && xLowestValue !== xHighestValue) {\n          if (w.globals.zoomEnabled) {\n            var yaxis = Utils.clone(w.globals.initialConfig.yaxis); // before zooming in/out, store the last yaxis and xaxis range, so that when user hits the RESET button, we get the original range\n            // also - make sure user is not already zoomed in/out - otherwise we will store zoomed values in lastAxis\n\n            if (!w.globals.zoomed) {\n              w.globals.lastXAxis = Utils.clone(w.config.xaxis);\n              w.globals.lastYAxis = Utils.clone(w.config.yaxis);\n            }\n\n            var xaxis = {\n              min: xLowestValue,\n              max: xHighestValue\n            };\n\n            if (zoomtype === 'xy' || zoomtype === 'y') {\n              yaxis.forEach(function (yaxe, index) {\n                yaxis[index].min = yLowestValue[index];\n                yaxis[index].max = yHighestValue[index];\n              });\n            }\n\n            if (w.config.chart.zoom.autoScaleYaxis) {\n              var scale = new Range(me.ctx);\n              yaxis = scale.autoScaleY(me.ctx, yaxis, {\n                xaxis: xaxis\n              });\n            }\n\n            if (toolbar) {\n              var beforeZoomRange = toolbar.getBeforeZoomRange(xaxis, yaxis);\n\n              if (beforeZoomRange) {\n                xaxis = beforeZoomRange.xaxis ? beforeZoomRange.xaxis : xaxis;\n                yaxis = beforeZoomRange.yaxis ? beforeZoomRange.yaxe : yaxis;\n              }\n            }\n\n            var options = {\n              xaxis: xaxis\n            };\n\n            if (!w.config.chart.group) {\n              // if chart in a group, prevent yaxis update here\n              // fix issue #650\n              options.yaxis = yaxis;\n            }\n\n            me.ctx._updateOptions(options, false, me.w.config.chart.animations.dynamicAnimation.enabled);\n\n            if (typeof w.config.chart.events.zoomed === 'function') {\n              toolbar.zoomCallback(xaxis, yaxis);\n            }\n\n            w.globals.zoomed = true;\n          } else if (w.globals.selectionEnabled) {\n            var _yaxis = null;\n            var _xaxis = null;\n            _xaxis = {\n              min: xLowestValue,\n              max: xHighestValue\n            };\n\n            if (zoomtype === 'xy' || zoomtype === 'y') {\n              _yaxis = Utils.clone(w.config.yaxis);\n\n              _yaxis.forEach(function (yaxe, index) {\n                _yaxis[index].min = yLowestValue[index];\n                _yaxis[index].max = yHighestValue[index];\n              });\n            }\n\n            w.globals.selection = me.selection;\n\n            if (typeof w.config.chart.events.selection === 'function') {\n              w.config.chart.events.selection(me.ctx, {\n                xaxis: _xaxis,\n                yaxis: _yaxis\n              });\n            }\n          }\n        }\n      }\n    }, {\n      key: \"panDragging\",\n      value: function panDragging(_ref5) {\n        var context = _ref5.context;\n        var w = this.w;\n        var me = context;\n        var moveDirection; // check to make sure there is data to compare against\n\n        if (typeof w.globals.lastClientPosition.x !== 'undefined') {\n          // get the change from last position to this position\n          var deltaX = w.globals.lastClientPosition.x - me.clientX;\n          var deltaY = w.globals.lastClientPosition.y - me.clientY; // check which direction had the highest amplitude and then figure out direction by checking if the value is greater or less than zero\n\n          if (Math.abs(deltaX) > Math.abs(deltaY) && deltaX > 0) {\n            moveDirection = 'left';\n          } else if (Math.abs(deltaX) > Math.abs(deltaY) && deltaX < 0) {\n            moveDirection = 'right';\n          } else if (Math.abs(deltaY) > Math.abs(deltaX) && deltaY > 0) {\n            moveDirection = 'up';\n          } else if (Math.abs(deltaY) > Math.abs(deltaX) && deltaY < 0) {\n            moveDirection = 'down';\n          }\n        } // set the new last position to the current for next time (to get the position of drag)\n\n\n        w.globals.lastClientPosition = {\n          x: me.clientX,\n          y: me.clientY\n        };\n        var xLowestValue = w.globals.minX;\n        var xHighestValue = w.globals.maxX;\n        me.panScrolled(moveDirection, xLowestValue, xHighestValue);\n      }\n    }, {\n      key: \"panScrolled\",\n      value: function panScrolled(moveDirection, xLowestValue, xHighestValue) {\n        var w = this.w;\n        var xyRatios = this.xyRatios;\n        var yaxis = Utils.clone(w.globals.initialConfig.yaxis);\n\n        if (moveDirection === 'left') {\n          xLowestValue = w.globals.minX + w.globals.gridWidth / 15 * xyRatios.xRatio;\n          xHighestValue = w.globals.maxX + w.globals.gridWidth / 15 * xyRatios.xRatio;\n        } else if (moveDirection === 'right') {\n          xLowestValue = w.globals.minX - w.globals.gridWidth / 15 * xyRatios.xRatio;\n          xHighestValue = w.globals.maxX - w.globals.gridWidth / 15 * xyRatios.xRatio;\n        }\n\n        if (xLowestValue < w.globals.initialminX || xHighestValue > w.globals.initialmaxX) {\n          xLowestValue = w.globals.minX;\n          xHighestValue = w.globals.maxX;\n        }\n\n        var xaxis = {\n          min: xLowestValue,\n          max: xHighestValue\n        };\n\n        if (w.config.chart.zoom.autoScaleYaxis) {\n          var scale = new Range(this.ctx);\n          yaxis = scale.autoScaleY(this.ctx, yaxis, {\n            xaxis: xaxis\n          });\n        }\n\n        var options = {\n          xaxis: {\n            min: xLowestValue,\n            max: xHighestValue\n          }\n        };\n\n        if (!w.config.chart.group) {\n          // if chart in a group, prevent yaxis update here\n          // fix issue #650\n          options.yaxis = yaxis;\n        }\n\n        this.ctx._updateOptions(options, false, false);\n\n        if (typeof w.config.chart.events.scrolled === 'function') {\n          w.config.chart.events.scrolled(this.ctx, {\n            xaxis: {\n              min: xLowestValue,\n              max: xHighestValue\n            }\n          });\n        }\n      }\n    }]);\n\n    return ZoomPanSelection;\n  }(Toolbar);\n\n  var TitleSubtitle =\n  /*#__PURE__*/\n  function () {\n    function TitleSubtitle(ctx) {\n      _classCallCheck(this, TitleSubtitle);\n\n      this.ctx = ctx;\n      this.w = ctx.w;\n    }\n\n    _createClass(TitleSubtitle, [{\n      key: \"draw\",\n      value: function draw() {\n        this.drawTitleSubtitle('title');\n        this.drawTitleSubtitle('subtitle');\n      }\n    }, {\n      key: \"drawTitleSubtitle\",\n      value: function drawTitleSubtitle(type) {\n        var w = this.w;\n        var tsConfig = type === 'title' ? w.config.title : w.config.subtitle;\n        var x = w.globals.svgWidth / 2;\n        var y = tsConfig.offsetY;\n        var textAnchor = 'middle';\n\n        if (tsConfig.align === 'left') {\n          x = 10;\n          textAnchor = 'start';\n        } else if (tsConfig.align === 'right') {\n          x = w.globals.svgWidth - 10;\n          textAnchor = 'end';\n        }\n\n        x = x + tsConfig.offsetX;\n        y = y + parseInt(tsConfig.style.fontSize) + 2;\n\n        if (tsConfig.text !== undefined) {\n          var graphics = new Graphics(this.ctx);\n          var titleText = graphics.drawText({\n            x: x,\n            y: y,\n            text: tsConfig.text,\n            textAnchor: textAnchor,\n            fontSize: tsConfig.style.fontSize,\n            fontFamily: tsConfig.style.fontFamily,\n            foreColor: tsConfig.style.color,\n            opacity: 1\n          });\n          titleText.node.setAttribute('class', \"apexcharts-\".concat(type, \"-text\"));\n          w.globals.dom.Paper.add(titleText);\n        }\n      }\n    }]);\n\n    return TitleSubtitle;\n  }();\n\n  (function (root, factory) {\n    /* istanbul ignore next */\n    if (typeof define === 'function' && define.amd) {\n      define(function () {\n        return factory(root, root.document);\n      });\n      /* below check fixes #412 */\n    } else if ((typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined') {\n      module.exports = root.document ? factory(root, root.document) : function (w) {\n        return factory(w, w.document);\n      };\n    } else {\n      root.SVG = factory(root, root.document);\n    }\n  })(typeof window !== 'undefined' ? window : undefined, function (window, document) {\n    // Find global reference - uses 'this' by default when available,\n    // falls back to 'window' otherwise (for bundlers like Webpack)\n    var globalRef = typeof this !== 'undefined' ? this : window; // The main wrapping element\n\n    var SVG = globalRef.SVG = function (element) {\n      if (SVG.supported) {\n        element = new SVG.Doc(element);\n\n        if (!SVG.parser.draw) {\n          SVG.prepare();\n        }\n\n        return element;\n      }\n    }; // Default namespaces\n\n\n    SVG.ns = 'http://www.w3.org/2000/svg';\n    SVG.xmlns = 'http://www.w3.org/2000/xmlns/';\n    SVG.xlink = 'http://www.w3.org/1999/xlink';\n    SVG.svgjs = 'http://svgjs.com/svgjs'; // Svg support test\n\n    SVG.supported = function () {\n      return true; // !!document.createElementNS &&\n      //     !! document.createElementNS(SVG.ns,'svg').createSVGRect\n    }(); // Don't bother to continue if SVG is not supported\n\n\n    if (!SVG.supported) return false; // Element id sequence\n\n    SVG.did = 1000; // Get next named element id\n\n    SVG.eid = function (name) {\n      return 'Svgjs' + capitalize(name) + SVG.did++;\n    }; // Method for element creation\n\n\n    SVG.create = function (name) {\n      // create element\n      var element = document.createElementNS(this.ns, name); // apply unique id\n\n      element.setAttribute('id', this.eid(name));\n      return element;\n    }; // Method for extending objects\n\n\n    SVG.extend = function () {\n      var modules, methods, key, i; // Get list of modules\n\n      modules = [].slice.call(arguments); // Get object with extensions\n\n      methods = modules.pop();\n\n      for (i = modules.length - 1; i >= 0; i--) {\n        if (modules[i]) {\n          for (key in methods) {\n            modules[i].prototype[key] = methods[key];\n          }\n        }\n      } // Make sure SVG.Set inherits any newly added methods\n\n\n      if (SVG.Set && SVG.Set.inherit) {\n        SVG.Set.inherit();\n      }\n    }; // Invent new element\n\n\n    SVG.invent = function (config) {\n      // Create element initializer\n      var initializer = typeof config.create === 'function' ? config.create : function () {\n        this.constructor.call(this, SVG.create(config.create));\n      }; // Inherit prototype\n\n      if (config.inherit) {\n        initializer.prototype = new config.inherit();\n      } // Extend with methods\n\n\n      if (config.extend) {\n        SVG.extend(initializer, config.extend);\n      } // Attach construct method to parent\n\n\n      if (config.construct) {\n        SVG.extend(config.parent || SVG.Container, config.construct);\n      }\n\n      return initializer;\n    }; // Adopt existing svg elements\n\n\n    SVG.adopt = function (node) {\n      // check for presence of node\n      if (!node) return null; // make sure a node isn't already adopted\n\n      if (node.instance) return node.instance; // initialize variables\n\n      var element; // adopt with element-specific settings\n\n      if (node.nodeName == 'svg') {\n        element = node.parentNode instanceof window.SVGElement ? new SVG.Nested() : new SVG.Doc();\n      } else if (node.nodeName == 'linearGradient') {\n        element = new SVG.Gradient('linear');\n      } else if (node.nodeName == 'radialGradient') {\n        element = new SVG.Gradient('radial');\n      } else if (SVG[capitalize(node.nodeName)]) {\n        element = new SVG[capitalize(node.nodeName)]();\n      } else {\n        element = new SVG.Element(node);\n      } // ensure references\n\n\n      element.type = node.nodeName;\n      element.node = node;\n      node.instance = element; // SVG.Class specific preparations\n\n      if (element instanceof SVG.Doc) {\n        element.namespace().defs();\n      } // pull svgjs data from the dom (getAttributeNS doesn't work in html5)\n\n\n      element.setData(JSON.parse(node.getAttribute('svgjs:data')) || {});\n      return element;\n    }; // Initialize parsing element\n\n\n    SVG.prepare = function () {\n      // Select document body and create invisible svg element\n      var body = document.getElementsByTagName('body')[0],\n          draw = (body ? new SVG.Doc(body) : SVG.adopt(document.documentElement).nested()).size(2, 0); // Create parser object\n\n      SVG.parser = {\n        body: body || document.documentElement,\n        draw: draw.style('opacity:0;position:absolute;left:-100%;top:-100%;overflow:hidden').node,\n        poly: draw.polyline().node,\n        path: draw.path().node,\n        native: SVG.create('svg')\n      };\n    };\n\n    SVG.parser = {\n      native: SVG.create('svg')\n    };\n    document.addEventListener('DOMContentLoaded', function () {\n      if (!SVG.parser.draw) {\n        SVG.prepare();\n      }\n    }, false); // Storage for regular expressions\n\n    SVG.regex = {\n      // Parse unit value\n      numberAndUnit: /^([+-]?(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?)([a-z%]*)$/i,\n      // Parse hex value\n      hex: /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i,\n      // Parse rgb value\n      rgb: /rgb\\((\\d+),(\\d+),(\\d+)\\)/,\n      // Parse reference id\n      reference: /#([a-z0-9\\-_]+)/i,\n      // splits a transformation chain\n      transforms: /\\)\\s*,?\\s*/,\n      // Whitespace\n      whitespace: /\\s/g,\n      // Test hex value\n      isHex: /^#[a-f0-9]{3,6}$/i,\n      // Test rgb value\n      isRgb: /^rgb\\(/,\n      // Test css declaration\n      isCss: /[^:]+:[^;]+;?/,\n      // Test for blank string\n      isBlank: /^(\\s+)?$/,\n      // Test for numeric string\n      isNumber: /^[+-]?(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i,\n      // Test for percent value\n      isPercent: /^-?[\\d\\.]+%$/,\n      // Test for image url\n      isImage: /\\.(jpg|jpeg|png|gif|svg)(\\?[^=]+.*)?/i,\n      // split at whitespace and comma\n      delimiter: /[\\s,]+/,\n      // The following regex are used to parse the d attribute of a path\n      // Matches all hyphens which are not after an exponent\n      hyphen: /([^e])\\-/gi,\n      // Replaces and tests for all path letters\n      pathLetters: /[MLHVCSQTAZ]/gi,\n      // yes we need this one, too\n      isPathLetter: /[MLHVCSQTAZ]/i,\n      // matches 0.154.23.45\n      numbersWithDots: /((\\d?\\.\\d+(?:e[+-]?\\d+)?)((?:\\.\\d+(?:e[+-]?\\d+)?)+))+/gi,\n      // matches .\n      dots: /\\./g\n    };\n    SVG.utils = {\n      // Map function\n      map: function map(array, block) {\n        var i,\n            il = array.length,\n            result = [];\n\n        for (i = 0; i < il; i++) {\n          result.push(block(array[i]));\n        }\n\n        return result;\n      },\n      // Filter function\n      filter: function filter(array, block) {\n        var i,\n            il = array.length,\n            result = [];\n\n        for (i = 0; i < il; i++) {\n          if (block(array[i])) {\n            result.push(array[i]);\n          }\n        }\n\n        return result;\n      },\n      // Degrees to radians\n      radians: function radians(d) {\n        return d % 360 * Math.PI / 180;\n      },\n      // Radians to degrees\n      degrees: function degrees(r) {\n        return r * 180 / Math.PI % 360;\n      },\n      filterSVGElements: function filterSVGElements(nodes) {\n        return this.filter(nodes, function (el) {\n          return el instanceof window.SVGElement;\n        });\n      }\n    };\n    SVG.defaults = {\n      // Default attribute values\n      attrs: {\n        // fill and stroke\n        'fill-opacity': 1,\n        'stroke-opacity': 1,\n        'stroke-width': 0,\n        'stroke-linejoin': 'miter',\n        'stroke-linecap': 'butt',\n        fill: '#000000',\n        stroke: '#000000',\n        opacity: 1,\n        // position\n        x: 0,\n        y: 0,\n        cx: 0,\n        cy: 0,\n        // size\n        width: 0,\n        height: 0,\n        // radius\n        r: 0,\n        rx: 0,\n        ry: 0,\n        // gradient\n        offset: 0,\n        'stop-opacity': 1,\n        'stop-color': '#000000',\n        // text\n        'font-size': 16,\n        'font-family': 'Helvetica, Arial, sans-serif',\n        'text-anchor': 'start'\n      } // Module for color convertions\n\n    };\n\n    SVG.Color = function (color) {\n      var match; // initialize defaults\n\n      this.r = 0;\n      this.g = 0;\n      this.b = 0;\n      if (!color) return; // parse color\n\n      if (typeof color === 'string') {\n        if (SVG.regex.isRgb.test(color)) {\n          // get rgb values\n          match = SVG.regex.rgb.exec(color.replace(SVG.regex.whitespace, '')); // parse numeric values\n\n          this.r = parseInt(match[1]);\n          this.g = parseInt(match[2]);\n          this.b = parseInt(match[3]);\n        } else if (SVG.regex.isHex.test(color)) {\n          // get hex values\n          match = SVG.regex.hex.exec(fullHex(color)); // parse numeric values\n\n          this.r = parseInt(match[1], 16);\n          this.g = parseInt(match[2], 16);\n          this.b = parseInt(match[3], 16);\n        }\n      } else if (_typeof(color) === 'object') {\n        this.r = color.r;\n        this.g = color.g;\n        this.b = color.b;\n      }\n    };\n\n    SVG.extend(SVG.Color, {\n      // Default to hex conversion\n      toString: function toString() {\n        return this.toHex();\n      },\n      // Build hex value\n      toHex: function toHex() {\n        return '#' + compToHex(this.r) + compToHex(this.g) + compToHex(this.b);\n      },\n      // Build rgb value\n      toRgb: function toRgb() {\n        return 'rgb(' + [this.r, this.g, this.b].join() + ')';\n      },\n      // Calculate true brightness\n      brightness: function brightness() {\n        return this.r / 255 * 0.30 + this.g / 255 * 0.59 + this.b / 255 * 0.11;\n      },\n      // Make color morphable\n      morph: function morph(color) {\n        this.destination = new SVG.Color(color);\n        return this;\n      },\n      // Get morphed color at given position\n      at: function at(pos) {\n        // make sure a destination is defined\n        if (!this.destination) return this; // normalise pos\n\n        pos = pos < 0 ? 0 : pos > 1 ? 1 : pos; // generate morphed color\n\n        return new SVG.Color({\n          r: ~~(this.r + (this.destination.r - this.r) * pos),\n          g: ~~(this.g + (this.destination.g - this.g) * pos),\n          b: ~~(this.b + (this.destination.b - this.b) * pos)\n        });\n      }\n    }); // Testers\n    // Test if given value is a color string\n\n    SVG.Color.test = function (color) {\n      color += '';\n      return SVG.regex.isHex.test(color) || SVG.regex.isRgb.test(color);\n    }; // Test if given value is a rgb object\n\n\n    SVG.Color.isRgb = function (color) {\n      return color && typeof color.r === 'number' && typeof color.g === 'number' && typeof color.b === 'number';\n    }; // Test if given value is a color\n\n\n    SVG.Color.isColor = function (color) {\n      return SVG.Color.isRgb(color) || SVG.Color.test(color);\n    }; // Module for array conversion\n\n\n    SVG.Array = function (array, fallback) {\n      array = (array || []).valueOf(); // if array is empty and fallback is provided, use fallback\n\n      if (array.length == 0 && fallback) {\n        array = fallback.valueOf();\n      } // parse array\n\n\n      this.value = this.parse(array);\n    };\n\n    SVG.extend(SVG.Array, {\n      // Make array morphable\n      morph: function morph(array) {\n        this.destination = this.parse(array); // normalize length of arrays\n\n        if (this.value.length != this.destination.length) {\n          var lastValue = this.value[this.value.length - 1],\n              lastDestination = this.destination[this.destination.length - 1];\n\n          while (this.value.length > this.destination.length) {\n            this.destination.push(lastDestination);\n          }\n\n          while (this.value.length < this.destination.length) {\n            this.value.push(lastValue);\n          }\n        }\n\n        return this;\n      },\n      // Clean up any duplicate points\n      settle: function settle() {\n        // find all unique values\n        for (var i = 0, il = this.value.length, seen = []; i < il; i++) {\n          if (seen.indexOf(this.value[i]) == -1) {\n            seen.push(this.value[i]);\n          }\n        } // set new value\n\n\n        return this.value = seen;\n      },\n      // Get morphed array at given position\n      at: function at(pos) {\n        // make sure a destination is defined\n        if (!this.destination) return this; // generate morphed array\n\n        for (var i = 0, il = this.value.length, array = []; i < il; i++) {\n          array.push(this.value[i] + (this.destination[i] - this.value[i]) * pos);\n        }\n\n        return new SVG.Array(array);\n      },\n      // Convert array to string\n      toString: function toString() {\n        return this.value.join(' ');\n      },\n      // Real value\n      valueOf: function valueOf() {\n        return this.value;\n      },\n      // Parse whitespace separated string\n      parse: function parse(array) {\n        array = array.valueOf(); // if already is an array, no need to parse it\n\n        if (Array.isArray(array)) return array;\n        return this.split(array);\n      },\n      // Strip unnecessary whitespace\n      split: function split(string) {\n        return string.trim().split(SVG.regex.delimiter).map(parseFloat);\n      },\n      // Reverse array\n      reverse: function reverse() {\n        this.value.reverse();\n        return this;\n      },\n      clone: function clone() {\n        var clone = new this.constructor();\n        clone.value = array_clone(this.value);\n        return clone;\n      }\n    }); // Poly points array\n\n    SVG.PointArray = function (array, fallback) {\n      SVG.Array.call(this, array, fallback || [[0, 0]]);\n    }; // Inherit from SVG.Array\n\n\n    SVG.PointArray.prototype = new SVG.Array();\n    SVG.PointArray.prototype.constructor = SVG.PointArray;\n    SVG.extend(SVG.PointArray, {\n      // Convert array to string\n      toString: function toString() {\n        // convert to a poly point string\n        for (var i = 0, il = this.value.length, array = []; i < il; i++) {\n          array.push(this.value[i].join(','));\n        }\n\n        return array.join(' ');\n      },\n      // Convert array to line object\n      toLine: function toLine() {\n        return {\n          x1: this.value[0][0],\n          y1: this.value[0][1],\n          x2: this.value[1][0],\n          y2: this.value[1][1]\n        };\n      },\n      // Get morphed array at given position\n      at: function at(pos) {\n        // make sure a destination is defined\n        if (!this.destination) return this; // generate morphed point string\n\n        for (var i = 0, il = this.value.length, array = []; i < il; i++) {\n          array.push([this.value[i][0] + (this.destination[i][0] - this.value[i][0]) * pos, this.value[i][1] + (this.destination[i][1] - this.value[i][1]) * pos]);\n        }\n\n        return new SVG.PointArray(array);\n      },\n      // Parse point string and flat array\n      parse: function parse(array) {\n        var points = [];\n        array = array.valueOf(); // if it is an array\n\n        if (Array.isArray(array)) {\n          // and it is not flat, there is no need to parse it\n          if (Array.isArray(array[0])) {\n            // make sure to use a clone\n            return array.map(function (el) {\n              return el.slice();\n            });\n          } else if (array[0].x != null) {\n            // allow point objects to be passed\n            return array.map(function (el) {\n              return [el.x, el.y];\n            });\n          }\n        } else {\n          // Else, it is considered as a string\n          // parse points\n          array = array.trim().split(SVG.regex.delimiter).map(parseFloat);\n        } // validate points - https://svgwg.org/svg2-draft/shapes.html#DataTypePoints\n        // Odd number of coordinates is an error. In such cases, drop the last odd coordinate.\n\n\n        if (array.length % 2 !== 0) array.pop(); // wrap points in two-tuples and parse points as floats\n\n        for (var i = 0, len = array.length; i < len; i = i + 2) {\n          points.push([array[i], array[i + 1]]);\n        }\n\n        return points;\n      },\n      // Move point string\n      move: function move(x, y) {\n        var box = this.bbox(); // get relative offset\n\n        x -= box.x;\n        y -= box.y; // move every point\n\n        if (!isNaN(x) && !isNaN(y)) {\n          for (var i = this.value.length - 1; i >= 0; i--) {\n            this.value[i] = [this.value[i][0] + x, this.value[i][1] + y];\n          }\n        }\n\n        return this;\n      },\n      // Resize poly string\n      size: function size(width, height) {\n        var i,\n            box = this.bbox(); // recalculate position of all points according to new size\n\n        for (i = this.value.length - 1; i >= 0; i--) {\n          if (box.width) this.value[i][0] = (this.value[i][0] - box.x) * width / box.width + box.x;\n          if (box.height) this.value[i][1] = (this.value[i][1] - box.y) * height / box.height + box.y;\n        }\n\n        return this;\n      },\n      // Get bounding box of points\n      bbox: function bbox() {\n        if (!SVG.parser.draw) {\n          SVG.prepare();\n        }\n\n        SVG.parser.poly.setAttribute('points', this.toString());\n        return SVG.parser.poly.getBBox();\n      }\n    });\n    var pathHandlers = {\n      M: function M(c, p, p0) {\n        p.x = p0.x = c[0];\n        p.y = p0.y = c[1];\n        return ['M', p.x, p.y];\n      },\n      L: function L(c, p) {\n        p.x = c[0];\n        p.y = c[1];\n        return ['L', c[0], c[1]];\n      },\n      H: function H(c, p) {\n        p.x = c[0];\n        return ['H', c[0]];\n      },\n      V: function V(c, p) {\n        p.y = c[0];\n        return ['V', c[0]];\n      },\n      C: function C(c, p) {\n        p.x = c[4];\n        p.y = c[5];\n        return ['C', c[0], c[1], c[2], c[3], c[4], c[5]];\n      },\n      S: function S(c, p) {\n        p.x = c[2];\n        p.y = c[3];\n        return ['S', c[0], c[1], c[2], c[3]];\n      },\n      Q: function Q(c, p) {\n        p.x = c[2];\n        p.y = c[3];\n        return ['Q', c[0], c[1], c[2], c[3]];\n      },\n      T: function T(c, p) {\n        p.x = c[0];\n        p.y = c[1];\n        return ['T', c[0], c[1]];\n      },\n      Z: function Z(c, p, p0) {\n        p.x = p0.x;\n        p.y = p0.y;\n        return ['Z'];\n      },\n      A: function A(c, p) {\n        p.x = c[5];\n        p.y = c[6];\n        return ['A', c[0], c[1], c[2], c[3], c[4], c[5], c[6]];\n      }\n    };\n    var mlhvqtcsa = 'mlhvqtcsaz'.split('');\n\n    for (var i = 0, il = mlhvqtcsa.length; i < il; ++i) {\n      pathHandlers[mlhvqtcsa[i]] = function (i) {\n        return function (c, p, p0) {\n          if (i == 'H') c[0] = c[0] + p.x;else if (i == 'V') c[0] = c[0] + p.y;else if (i == 'A') {\n            c[5] = c[5] + p.x, c[6] = c[6] + p.y;\n          } else {\n            for (var j = 0, jl = c.length; j < jl; ++j) {\n              c[j] = c[j] + (j % 2 ? p.y : p.x);\n            }\n          }\n          return pathHandlers[i](c, p, p0);\n        };\n      }(mlhvqtcsa[i].toUpperCase());\n    } // Path points array\n\n\n    SVG.PathArray = function (array, fallback) {\n      SVG.Array.call(this, array, fallback || [['M', 0, 0]]);\n    }; // Inherit from SVG.Array\n\n\n    SVG.PathArray.prototype = new SVG.Array();\n    SVG.PathArray.prototype.constructor = SVG.PathArray;\n    SVG.extend(SVG.PathArray, {\n      // Convert array to string\n      toString: function toString() {\n        return arrayToString(this.value);\n      },\n      // Move path string\n      move: function move(x, y) {\n        // get bounding box of current situation\n        var box = this.bbox(); // get relative offset\n\n        x -= box.x;\n        y -= box.y;\n\n        if (!isNaN(x) && !isNaN(y)) {\n          // move every point\n          for (var l, i = this.value.length - 1; i >= 0; i--) {\n            l = this.value[i][0];\n\n            if (l == 'M' || l == 'L' || l == 'T') {\n              this.value[i][1] += x;\n              this.value[i][2] += y;\n            } else if (l == 'H') {\n              this.value[i][1] += x;\n            } else if (l == 'V') {\n              this.value[i][1] += y;\n            } else if (l == 'C' || l == 'S' || l == 'Q') {\n              this.value[i][1] += x;\n              this.value[i][2] += y;\n              this.value[i][3] += x;\n              this.value[i][4] += y;\n\n              if (l == 'C') {\n                this.value[i][5] += x;\n                this.value[i][6] += y;\n              }\n            } else if (l == 'A') {\n              this.value[i][6] += x;\n              this.value[i][7] += y;\n            }\n          }\n        }\n\n        return this;\n      },\n      // Resize path string\n      size: function size(width, height) {\n        // get bounding box of current situation\n        var i,\n            l,\n            box = this.bbox(); // recalculate position of all points according to new size\n\n        for (i = this.value.length - 1; i >= 0; i--) {\n          l = this.value[i][0];\n\n          if (l == 'M' || l == 'L' || l == 'T') {\n            this.value[i][1] = (this.value[i][1] - box.x) * width / box.width + box.x;\n            this.value[i][2] = (this.value[i][2] - box.y) * height / box.height + box.y;\n          } else if (l == 'H') {\n            this.value[i][1] = (this.value[i][1] - box.x) * width / box.width + box.x;\n          } else if (l == 'V') {\n            this.value[i][1] = (this.value[i][1] - box.y) * height / box.height + box.y;\n          } else if (l == 'C' || l == 'S' || l == 'Q') {\n            this.value[i][1] = (this.value[i][1] - box.x) * width / box.width + box.x;\n            this.value[i][2] = (this.value[i][2] - box.y) * height / box.height + box.y;\n            this.value[i][3] = (this.value[i][3] - box.x) * width / box.width + box.x;\n            this.value[i][4] = (this.value[i][4] - box.y) * height / box.height + box.y;\n\n            if (l == 'C') {\n              this.value[i][5] = (this.value[i][5] - box.x) * width / box.width + box.x;\n              this.value[i][6] = (this.value[i][6] - box.y) * height / box.height + box.y;\n            }\n          } else if (l == 'A') {\n            // resize radii\n            this.value[i][1] = this.value[i][1] * width / box.width;\n            this.value[i][2] = this.value[i][2] * height / box.height; // move position values\n\n            this.value[i][6] = (this.value[i][6] - box.x) * width / box.width + box.x;\n            this.value[i][7] = (this.value[i][7] - box.y) * height / box.height + box.y;\n          }\n        }\n\n        return this;\n      },\n      // Test if the passed path array use the same path data commands as this path array\n      equalCommands: function equalCommands(pathArray) {\n        var i, il, equalCommands;\n        pathArray = new SVG.PathArray(pathArray);\n        equalCommands = this.value.length === pathArray.value.length;\n\n        for (i = 0, il = this.value.length; equalCommands && i < il; i++) {\n          equalCommands = this.value[i][0] === pathArray.value[i][0];\n        }\n\n        return equalCommands;\n      },\n      // Make path array morphable\n      morph: function morph(pathArray) {\n        pathArray = new SVG.PathArray(pathArray);\n\n        if (this.equalCommands(pathArray)) {\n          this.destination = pathArray;\n        } else {\n          this.destination = null;\n        }\n\n        return this;\n      },\n      // Get morphed path array at given position\n      at: function at(pos) {\n        // make sure a destination is defined\n        if (!this.destination) return this;\n        var sourceArray = this.value,\n            destinationArray = this.destination.value,\n            array = [],\n            pathArray = new SVG.PathArray(),\n            i,\n            il,\n            j,\n            jl; // Animate has specified in the SVG spec\n        // See: https://www.w3.org/TR/SVG11/paths.html#PathElement\n\n        for (i = 0, il = sourceArray.length; i < il; i++) {\n          array[i] = [sourceArray[i][0]];\n\n          for (j = 1, jl = sourceArray[i].length; j < jl; j++) {\n            array[i][j] = sourceArray[i][j] + (destinationArray[i][j] - sourceArray[i][j]) * pos;\n          } // For the two flags of the elliptical arc command, the SVG spec say:\n          // Flags and booleans are interpolated as fractions between zero and one, with any non-zero value considered to be a value of one/true\n          // Elliptical arc command as an array followed by corresponding indexes:\n          // ['A', rx, ry, x-axis-rotation, large-arc-flag, sweep-flag, x, y]\n          //   0    1   2        3                 4             5      6  7\n\n\n          if (array[i][0] === 'A') {\n            array[i][4] = +(array[i][4] != 0);\n            array[i][5] = +(array[i][5] != 0);\n          }\n        } // Directly modify the value of a path array, this is done this way for performance\n\n\n        pathArray.value = array;\n        return pathArray;\n      },\n      // Absolutize and parse path to array\n      parse: function parse(array) {\n        // if it's already a patharray, no need to parse it\n        if (array instanceof SVG.PathArray) return array.valueOf(); // prepare for parsing\n\n        var s,\n            arr,\n            paramCnt = {\n          'M': 2,\n          'L': 2,\n          'H': 1,\n          'V': 1,\n          'C': 6,\n          'S': 4,\n          'Q': 4,\n          'T': 2,\n          'A': 7,\n          'Z': 0\n        };\n\n        if (typeof array === 'string') {\n          array = array.replace(SVG.regex.numbersWithDots, pathRegReplace) // convert 45.123.123 to 45.123 .123\n          .replace(SVG.regex.pathLetters, ' $& ') // put some room between letters and numbers\n          .replace(SVG.regex.hyphen, '$1 -') // add space before hyphen\n          .trim() // trim\n          .split(SVG.regex.delimiter); // split into array\n        } else {\n          array = array.reduce(function (prev, curr) {\n            return [].concat.call(prev, curr);\n          }, []);\n        } // array now is an array containing all parts of a path e.g. ['M', '0', '0', 'L', '30', '30' ...]\n\n\n        var arr = [],\n            p = new SVG.Point(),\n            p0 = new SVG.Point(),\n            index = 0,\n            len = array.length;\n\n        do {\n          // Test if we have a path letter\n          if (SVG.regex.isPathLetter.test(array[index])) {\n            s = array[index];\n            ++index; // If last letter was a move command and we got no new, it defaults to [L]ine\n          } else if (s == 'M') {\n            s = 'L';\n          } else if (s == 'm') {\n            s = 'l';\n          }\n\n          arr.push(pathHandlers[s].call(null, array.slice(index, index = index + paramCnt[s.toUpperCase()]).map(parseFloat), p, p0));\n        } while (len > index);\n\n        return arr;\n      },\n      // Get bounding box of path\n      bbox: function bbox() {\n        if (!SVG.parser.draw) {\n          SVG.prepare();\n        }\n\n        SVG.parser.path.setAttribute('d', this.toString());\n        return SVG.parser.path.getBBox();\n      }\n    }); // Module for unit convertions\n\n    SVG.Number = SVG.invent({\n      // Initialize\n      create: function create(value, unit) {\n        // initialize defaults\n        this.value = 0;\n        this.unit = unit || ''; // parse value\n\n        if (typeof value === 'number') {\n          // ensure a valid numeric value\n          this.value = isNaN(value) ? 0 : !isFinite(value) ? value < 0 ? -3.4e+38 : +3.4e+38 : value;\n        } else if (typeof value === 'string') {\n          unit = value.match(SVG.regex.numberAndUnit);\n\n          if (unit) {\n            // make value numeric\n            this.value = parseFloat(unit[1]); // normalize\n\n            if (unit[5] == '%') {\n              this.value /= 100;\n            } else if (unit[5] == 's') {\n              this.value *= 1000;\n            } // store unit\n\n\n            this.unit = unit[5];\n          }\n        } else {\n          if (value instanceof SVG.Number) {\n            this.value = value.valueOf();\n            this.unit = value.unit;\n          }\n        }\n      },\n      // Add methods\n      extend: {\n        // Stringalize\n        toString: function toString() {\n          return (this.unit == '%' ? ~~(this.value * 1e8) / 1e6 : this.unit == 's' ? this.value / 1e3 : this.value) + this.unit;\n        },\n        toJSON: function toJSON() {\n          return this.toString();\n        },\n        // Convert to primitive\n        valueOf: function valueOf() {\n          return this.value;\n        },\n        // Add number\n        plus: function plus(number) {\n          number = new SVG.Number(number);\n          return new SVG.Number(this + number, this.unit || number.unit);\n        },\n        // Subtract number\n        minus: function minus(number) {\n          number = new SVG.Number(number);\n          return new SVG.Number(this - number, this.unit || number.unit);\n        },\n        // Multiply number\n        times: function times(number) {\n          number = new SVG.Number(number);\n          return new SVG.Number(this * number, this.unit || number.unit);\n        },\n        // Divide number\n        divide: function divide(number) {\n          number = new SVG.Number(number);\n          return new SVG.Number(this / number, this.unit || number.unit);\n        },\n        // Convert to different unit\n        to: function to(unit) {\n          var number = new SVG.Number(this);\n\n          if (typeof unit === 'string') {\n            number.unit = unit;\n          }\n\n          return number;\n        },\n        // Make number morphable\n        morph: function morph(number) {\n          this.destination = new SVG.Number(number);\n\n          if (number.relative) {\n            this.destination.value += this.value;\n          }\n\n          return this;\n        },\n        // Get morphed number at given position\n        at: function at(pos) {\n          // Make sure a destination is defined\n          if (!this.destination) return this; // Generate new morphed number\n\n          return new SVG.Number(this.destination).minus(this).times(pos).plus(this);\n        }\n      }\n    });\n    SVG.Element = SVG.invent({\n      // Initialize node\n      create: function create(node) {\n        // make stroke value accessible dynamically\n        this._stroke = SVG.defaults.attrs.stroke;\n        this._event = null; // initialize data object\n\n        this.dom = {}; // create circular reference\n\n        if (this.node = node) {\n          this.type = node.nodeName;\n          this.node.instance = this; // store current attribute value\n\n          this._stroke = node.getAttribute('stroke') || this._stroke;\n        }\n      },\n      // Add class methods\n      extend: {\n        // Move over x-axis\n        x: function x(_x) {\n          return this.attr('x', _x);\n        },\n        // Move over y-axis\n        y: function y(_y) {\n          return this.attr('y', _y);\n        },\n        // Move by center over x-axis\n        cx: function cx(x) {\n          return x == null ? this.x() + this.width() / 2 : this.x(x - this.width() / 2);\n        },\n        // Move by center over y-axis\n        cy: function cy(y) {\n          return y == null ? this.y() + this.height() / 2 : this.y(y - this.height() / 2);\n        },\n        // Move element to given x and y values\n        move: function move(x, y) {\n          return this.x(x).y(y);\n        },\n        // Move element by its center\n        center: function center(x, y) {\n          return this.cx(x).cy(y);\n        },\n        // Set width of element\n        width: function width(_width) {\n          return this.attr('width', _width);\n        },\n        // Set height of element\n        height: function height(_height) {\n          return this.attr('height', _height);\n        },\n        // Set element size to given width and height\n        size: function size(width, height) {\n          var p = proportionalSize(this, width, height);\n          return this.width(new SVG.Number(p.width)).height(new SVG.Number(p.height));\n        },\n        // Clone element\n        clone: function clone(parent) {\n          // write dom data to the dom so the clone can pickup the data\n          this.writeDataToDom(); // clone element and assign new id\n\n          var clone = assignNewId(this.node.cloneNode(true)); // insert the clone in the given parent or after myself\n\n          if (parent) parent.add(clone);else this.after(clone);\n          return clone;\n        },\n        // Remove element\n        remove: function remove() {\n          if (this.parent()) {\n            this.parent().removeElement(this);\n          }\n\n          return this;\n        },\n        // Replace element\n        replace: function replace(element) {\n          this.after(element).remove();\n          return element;\n        },\n        // Add element to given container and return self\n        addTo: function addTo(parent) {\n          return parent.put(this);\n        },\n        // Add element to given container and return container\n        putIn: function putIn(parent) {\n          return parent.add(this);\n        },\n        // Get / set id\n        id: function id(_id) {\n          return this.attr('id', _id);\n        },\n        // Checks whether the given point inside the bounding box of the element\n        inside: function inside(x, y) {\n          var box = this.bbox();\n          return x > box.x && y > box.y && x < box.x + box.width && y < box.y + box.height;\n        },\n        // Show element\n        show: function show() {\n          return this.style('display', '');\n        },\n        // Hide element\n        hide: function hide() {\n          return this.style('display', 'none');\n        },\n        // Is element visible?\n        visible: function visible() {\n          return this.style('display') != 'none';\n        },\n        // Return id on string conversion\n        toString: function toString() {\n          return this.attr('id');\n        },\n        // Return array of classes on the node\n        classes: function classes() {\n          var attr = this.attr('class');\n          return attr == null ? [] : attr.trim().split(SVG.regex.delimiter);\n        },\n        // Return true if class exists on the node, false otherwise\n        hasClass: function hasClass(name) {\n          return this.classes().indexOf(name) != -1;\n        },\n        // Add class to the node\n        addClass: function addClass(name) {\n          if (!this.hasClass(name)) {\n            var array = this.classes();\n            array.push(name);\n            this.attr('class', array.join(' '));\n          }\n\n          return this;\n        },\n        // Remove class from the node\n        removeClass: function removeClass(name) {\n          if (this.hasClass(name)) {\n            this.attr('class', this.classes().filter(function (c) {\n              return c != name;\n            }).join(' '));\n          }\n\n          return this;\n        },\n        // Toggle the presence of a class on the node\n        toggleClass: function toggleClass(name) {\n          return this.hasClass(name) ? this.removeClass(name) : this.addClass(name);\n        },\n        // Get referenced element form attribute value\n        reference: function reference(attr) {\n          return SVG.get(this.attr(attr));\n        },\n        // Returns the parent element instance\n        parent: function parent(type) {\n          var parent = this; // check for parent\n\n          if (!parent.node.parentNode) return null; // get parent element\n\n          parent = SVG.adopt(parent.node.parentNode);\n          if (!type) return parent; // loop trough ancestors if type is given\n\n          while (parent && parent.node instanceof window.SVGElement) {\n            if (typeof type === 'string' ? parent.matches(type) : parent instanceof type) return parent;\n            if (!parent.node.parentNode || parent.node.parentNode.nodeName == '#document') return null; // #759, #720\n\n            parent = SVG.adopt(parent.node.parentNode);\n          }\n        },\n        // Get parent document\n        doc: function doc() {\n          return this instanceof SVG.Doc ? this : this.parent(SVG.Doc);\n        },\n        // return array of all ancestors of given type up to the root svg\n        parents: function parents(type) {\n          var parents = [],\n              parent = this;\n\n          do {\n            parent = parent.parent(type);\n            if (!parent || !parent.node) break;\n            parents.push(parent);\n          } while (parent.parent);\n\n          return parents;\n        },\n        // matches the element vs a css selector\n        matches: function matches(selector) {\n          return _matches(this.node, selector);\n        },\n        // Returns the svg node to call native svg methods on it\n        native: function native() {\n          return this.node;\n        },\n        // Import raw svg\n        svg: function svg(_svg) {\n          // create temporary holder\n          var well = document.createElement('svg'); // act as a setter if svg is given\n\n          if (_svg && this instanceof SVG.Parent) {\n            // dump raw svg\n            well.innerHTML = '<svg>' + _svg.replace(/\\n/, '').replace(/<([\\w:-]+)([^<]+?)\\/>/g, '<$1$2></$1>') + '</svg>'; // transplant nodes\n\n            for (var i = 0, il = well.firstChild.childNodes.length; i < il; i++) {\n              this.node.appendChild(well.firstChild.firstChild);\n            } // otherwise act as a getter\n\n          } else {\n            // create a wrapping svg element in case of partial content\n            well.appendChild(_svg = document.createElement('svg')); // write svgjs data to the dom\n\n            this.writeDataToDom(); // insert a copy of this node\n\n            _svg.appendChild(this.node.cloneNode(true)); // return target element\n\n\n            return well.innerHTML.replace(/^<svg>/, '').replace(/<\\/svg>$/, '');\n          }\n\n          return this;\n        },\n        // write svgjs data to the dom\n        writeDataToDom: function writeDataToDom() {\n          // dump variables recursively\n          if (this.each || this.lines) {\n            var fn = this.each ? this : this.lines();\n            fn.each(function () {\n              this.writeDataToDom();\n            });\n          } // remove previously set data\n\n\n          this.node.removeAttribute('svgjs:data');\n\n          if (Object.keys(this.dom).length) {\n            this.node.setAttribute('svgjs:data', JSON.stringify(this.dom));\n          } // see #428\n\n\n          return this;\n        },\n        // set given data to the elements data property\n        setData: function setData(o) {\n          this.dom = o;\n          return this;\n        },\n        is: function is(obj) {\n          return _is(this, obj);\n        }\n      }\n    });\n    SVG.easing = {\n      '-': function _(pos) {\n        return pos;\n      },\n      '<>': function _(pos) {\n        return -Math.cos(pos * Math.PI) / 2 + 0.5;\n      },\n      '>': function _(pos) {\n        return Math.sin(pos * Math.PI / 2);\n      },\n      '<': function _(pos) {\n        return -Math.cos(pos * Math.PI / 2) + 1;\n      }\n    };\n\n    SVG.morph = function (pos) {\n      return function (from, to) {\n        return new SVG.MorphObj(from, to).at(pos);\n      };\n    };\n\n    SVG.Situation = SVG.invent({\n      create: function create(o) {\n        this.init = false;\n        this.reversed = false;\n        this.reversing = false;\n        this.duration = new SVG.Number(o.duration).valueOf();\n        this.delay = new SVG.Number(o.delay).valueOf();\n        this.start = +new Date() + this.delay;\n        this.finish = this.start + this.duration;\n        this.ease = o.ease; // this.loop is incremented from 0 to this.loops\n        // it is also incremented when in an infinite loop (when this.loops is true)\n\n        this.loop = 0;\n        this.loops = false;\n        this.animations = {// functionToCall: [list of morphable objects]\n          // e.g. move: [SVG.Number, SVG.Number]\n        };\n        this.attrs = {// holds all attributes which are not represented from a function svg.js provides\n          // e.g. someAttr: SVG.Number\n        };\n        this.styles = {// holds all styles which should be animated\n          // e.g. fill-color: SVG.Color\n        };\n        this.transforms = [// holds all transformations as transformation objects\n          // e.g. [SVG.Rotate, SVG.Translate, SVG.Matrix]\n        ];\n        this.once = {// functions to fire at a specific position\n          // e.g. \"0.5\": function foo(){}\n        };\n      }\n    });\n    SVG.FX = SVG.invent({\n      create: function create(element) {\n        this._target = element;\n        this.situations = [];\n        this.active = false;\n        this.situation = null;\n        this.paused = false;\n        this.lastPos = 0;\n        this.pos = 0; // The absolute position of an animation is its position in the context of its complete duration (including delay and loops)\n        // When performing a delay, absPos is below 0 and when performing a loop, its value is above 1\n\n        this.absPos = 0;\n        this._speed = 1;\n      },\n      extend: {\n        /**\n         * sets or returns the target of this animation\n         * @param o object || number In case of Object it holds all parameters. In case of number its the duration of the animation\n         * @param ease function || string Function which should be used for easing or easing keyword\n         * @param delay Number indicating the delay before the animation starts\n         * @return target || this\n         */\n        animate: function animate(o, ease, delay) {\n          if (_typeof(o) === 'object') {\n            ease = o.ease;\n            delay = o.delay;\n            o = o.duration;\n          }\n\n          var situation = new SVG.Situation({\n            duration: o || 1000,\n            delay: delay || 0,\n            ease: SVG.easing[ease || '-'] || ease\n          });\n          this.queue(situation);\n          return this;\n        },\n\n        /**\n        * sets a delay before the next element of the queue is called\n        * @param delay Duration of delay in milliseconds\n        * @return this.target()\n        */\n        delay: function delay(_delay) {\n          // The delay is performed by an empty situation with its duration\n          // attribute set to the duration of the delay\n          var situation = new SVG.Situation({\n            duration: _delay,\n            delay: 0,\n            ease: SVG.easing['-']\n          });\n          return this.queue(situation);\n        },\n\n        /**\n        * sets or returns the target of this animation\n        * @param null || target SVG.Element which should be set as new target\n        * @return target || this\n        */\n        target: function target(_target) {\n          if (_target && _target instanceof SVG.Element) {\n            this._target = _target;\n            return this;\n          }\n\n          return this._target;\n        },\n        // returns the absolute position at a given time\n        timeToAbsPos: function timeToAbsPos(timestamp) {\n          return (timestamp - this.situation.start) / (this.situation.duration / this._speed);\n        },\n        // returns the timestamp from a given absolute positon\n        absPosToTime: function absPosToTime(absPos) {\n          return this.situation.duration / this._speed * absPos + this.situation.start;\n        },\n        // starts the animationloop\n        startAnimFrame: function startAnimFrame() {\n          this.stopAnimFrame();\n          this.animationFrame = window.requestAnimationFrame(function () {\n            this.step();\n          }.bind(this));\n        },\n        // cancels the animationframe\n        stopAnimFrame: function stopAnimFrame() {\n          window.cancelAnimationFrame(this.animationFrame);\n        },\n        // kicks off the animation - only does something when the queue is currently not active and at least one situation is set\n        start: function start() {\n          // dont start if already started\n          if (!this.active && this.situation) {\n            this.active = true;\n            this.startCurrent();\n          }\n\n          return this;\n        },\n        // start the current situation\n        startCurrent: function startCurrent() {\n          this.situation.start = +new Date() + this.situation.delay / this._speed;\n          this.situation.finish = this.situation.start + this.situation.duration / this._speed;\n          return this.initAnimations().step();\n        },\n\n        /**\n        * adds a function / Situation to the animation queue\n        * @param fn function / situation to add\n        * @return this\n        */\n        queue: function queue(fn) {\n          if (typeof fn === 'function' || fn instanceof SVG.Situation) {\n            this.situations.push(fn);\n          }\n\n          if (!this.situation) this.situation = this.situations.shift();\n          return this;\n        },\n\n        /**\n        * pulls next element from the queue and execute it\n        * @return this\n        */\n        dequeue: function dequeue() {\n          // stop current animation\n          this.stop(); // get next animation from queue\n\n          this.situation = this.situations.shift();\n\n          if (this.situation) {\n            if (this.situation instanceof SVG.Situation) {\n              this.start();\n            } else {\n              // If it is not a SVG.Situation, then it is a function, we execute it\n              this.situation.call(this);\n            }\n          }\n\n          return this;\n        },\n        // updates all animations to the current state of the element\n        // this is important when one property could be changed from another property\n        initAnimations: function initAnimations() {\n          var i, j, source;\n          var s = this.situation;\n          if (s.init) return this;\n\n          for (i in s.animations) {\n            source = this.target()[i]();\n\n            if (!Array.isArray(source)) {\n              source = [source];\n            }\n\n            if (!Array.isArray(s.animations[i])) {\n              s.animations[i] = [s.animations[i]];\n            } // if(s.animations[i].length > source.length) {\n            //  source.concat = source.concat(s.animations[i].slice(source.length, s.animations[i].length))\n            // }\n\n\n            for (j = source.length; j--;) {\n              // The condition is because some methods return a normal number instead\n              // of a SVG.Number\n              if (s.animations[i][j] instanceof SVG.Number) {\n                source[j] = new SVG.Number(source[j]);\n              }\n\n              s.animations[i][j] = source[j].morph(s.animations[i][j]);\n            }\n          }\n\n          for (i in s.attrs) {\n            s.attrs[i] = new SVG.MorphObj(this.target().attr(i), s.attrs[i]);\n          }\n\n          for (i in s.styles) {\n            s.styles[i] = new SVG.MorphObj(this.target().style(i), s.styles[i]);\n          }\n\n          s.initialTransformation = this.target().matrixify();\n          s.init = true;\n          return this;\n        },\n        clearQueue: function clearQueue() {\n          this.situations = [];\n          return this;\n        },\n        clearCurrent: function clearCurrent() {\n          this.situation = null;\n          return this;\n        },\n\n        /** stops the animation immediately\n        * @param jumpToEnd A Boolean indicating whether to complete the current animation immediately.\n        * @param clearQueue A Boolean indicating whether to remove queued animation as well.\n        * @return this\n        */\n        stop: function stop(jumpToEnd, clearQueue) {\n          var active = this.active;\n          this.active = false;\n\n          if (clearQueue) {\n            this.clearQueue();\n          }\n\n          if (jumpToEnd && this.situation) {\n            // initialize the situation if it was not\n            !active && this.startCurrent();\n            this.atEnd();\n          }\n\n          this.stopAnimFrame();\n          return this.clearCurrent();\n        },\n\n        /** resets the element to the state where the current element has started\n        * @return this\n        */\n        reset: function reset() {\n          if (this.situation) {\n            var temp = this.situation;\n            this.stop();\n            this.situation = temp;\n            this.atStart();\n          }\n\n          return this;\n        },\n        // Stop the currently-running animation, remove all queued animations, and complete all animations for the element.\n        finish: function finish() {\n          this.stop(true, false);\n\n          while (this.dequeue().situation && this.stop(true, false)) {\n          }\n\n          this.clearQueue().clearCurrent();\n          return this;\n        },\n        // set the internal animation pointer at the start position, before any loops, and updates the visualisation\n        atStart: function atStart() {\n          return this.at(0, true);\n        },\n        // set the internal animation pointer at the end position, after all the loops, and updates the visualisation\n        atEnd: function atEnd() {\n          if (this.situation.loops === true) {\n            // If in a infinite loop, we end the current iteration\n            this.situation.loops = this.situation.loop + 1;\n          }\n\n          if (typeof this.situation.loops === 'number') {\n            // If performing a finite number of loops, we go after all the loops\n            return this.at(this.situation.loops, true);\n          } else {\n            // If no loops, we just go at the end\n            return this.at(1, true);\n          }\n        },\n        // set the internal animation pointer to the specified position and updates the visualisation\n        // if isAbsPos is true, pos is treated as an absolute position\n        at: function at(pos, isAbsPos) {\n          var durDivSpd = this.situation.duration / this._speed;\n          this.absPos = pos; // If pos is not an absolute position, we convert it into one\n\n          if (!isAbsPos) {\n            if (this.situation.reversed) this.absPos = 1 - this.absPos;\n            this.absPos += this.situation.loop;\n          }\n\n          this.situation.start = +new Date() - this.absPos * durDivSpd;\n          this.situation.finish = this.situation.start + durDivSpd;\n          return this.step(true);\n        },\n\n        /**\n        * sets or returns the speed of the animations\n        * @param speed null || Number The new speed of the animations\n        * @return Number || this\n        */\n        speed: function speed(_speed) {\n          if (_speed === 0) return this.pause();\n\n          if (_speed) {\n            this._speed = _speed; // We use an absolute position here so that speed can affect the delay before the animation\n\n            return this.at(this.absPos, true);\n          } else return this._speed;\n        },\n        // Make loopable\n        loop: function loop(times, reverse) {\n          var c = this.last(); // store total loops\n\n          c.loops = times != null ? times : true;\n          c.loop = 0;\n          if (reverse) c.reversing = true;\n          return this;\n        },\n        // pauses the animation\n        pause: function pause() {\n          this.paused = true;\n          this.stopAnimFrame();\n          return this;\n        },\n        // unpause the animation\n        play: function play() {\n          if (!this.paused) return this;\n          this.paused = false; // We use an absolute position here so that the delay before the animation can be paused\n\n          return this.at(this.absPos, true);\n        },\n\n        /**\n        * toggle or set the direction of the animation\n        * true sets direction to backwards while false sets it to forwards\n        * @param reversed Boolean indicating whether to reverse the animation or not (default: toggle the reverse status)\n        * @return this\n        */\n        reverse: function reverse(reversed) {\n          var c = this.last();\n          if (typeof reversed === 'undefined') c.reversed = !c.reversed;else c.reversed = reversed;\n          return this;\n        },\n\n        /**\n        * returns a float from 0-1 indicating the progress of the current animation\n        * @param eased Boolean indicating whether the returned position should be eased or not\n        * @return number\n        */\n        progress: function progress(easeIt) {\n          return easeIt ? this.situation.ease(this.pos) : this.pos;\n        },\n\n        /**\n        * adds a callback function which is called when the current animation is finished\n        * @param fn Function which should be executed as callback\n        * @return number\n        */\n        after: function after(fn) {\n          var c = this.last(),\n              wrapper = function wrapper(e) {\n            if (e.detail.situation == c) {\n              fn.call(this, c);\n              this.off('finished.fx', wrapper); // prevent memory leak\n            }\n          };\n\n          this.target().on('finished.fx', wrapper);\n          return this._callStart();\n        },\n        // adds a callback which is called whenever one animation step is performed\n        during: function during(fn) {\n          var c = this.last(),\n              wrapper = function wrapper(e) {\n            if (e.detail.situation == c) {\n              fn.call(this, e.detail.pos, SVG.morph(e.detail.pos), e.detail.eased, c);\n            }\n          }; // see above\n\n\n          this.target().off('during.fx', wrapper).on('during.fx', wrapper);\n          this.after(function () {\n            this.off('during.fx', wrapper);\n          });\n          return this._callStart();\n        },\n        // calls after ALL animations in the queue are finished\n        afterAll: function afterAll(fn) {\n          var wrapper = function wrapper(e) {\n            fn.call(this);\n            this.off('allfinished.fx', wrapper);\n          }; // see above\n\n\n          this.target().off('allfinished.fx', wrapper).on('allfinished.fx', wrapper);\n          return this._callStart();\n        },\n        // calls on every animation step for all animations\n        duringAll: function duringAll(fn) {\n          var wrapper = function wrapper(e) {\n            fn.call(this, e.detail.pos, SVG.morph(e.detail.pos), e.detail.eased, e.detail.situation);\n          };\n\n          this.target().off('during.fx', wrapper).on('during.fx', wrapper);\n          this.afterAll(function () {\n            this.off('during.fx', wrapper);\n          });\n          return this._callStart();\n        },\n        last: function last() {\n          return this.situations.length ? this.situations[this.situations.length - 1] : this.situation;\n        },\n        // adds one property to the animations\n        add: function add(method, args, type) {\n          this.last()[type || 'animations'][method] = args;\n          return this._callStart();\n        },\n\n        /** perform one step of the animation\n        *  @param ignoreTime Boolean indicating whether to ignore time and use position directly or recalculate position based on time\n        *  @return this\n        */\n        step: function step(ignoreTime) {\n          // convert current time to an absolute position\n          if (!ignoreTime) this.absPos = this.timeToAbsPos(+new Date()); // This part convert an absolute position to a position\n\n          if (this.situation.loops !== false) {\n            var absPos, absPosInt, lastLoop; // If the absolute position is below 0, we just treat it as if it was 0\n\n            absPos = Math.max(this.absPos, 0);\n            absPosInt = Math.floor(absPos);\n\n            if (this.situation.loops === true || absPosInt < this.situation.loops) {\n              this.pos = absPos - absPosInt;\n              lastLoop = this.situation.loop;\n              this.situation.loop = absPosInt;\n            } else {\n              this.absPos = this.situation.loops;\n              this.pos = 1; // The -1 here is because we don't want to toggle reversed when all the loops have been completed\n\n              lastLoop = this.situation.loop - 1;\n              this.situation.loop = this.situation.loops;\n            }\n\n            if (this.situation.reversing) {\n              // Toggle reversed if an odd number of loops as occured since the last call of step\n              this.situation.reversed = this.situation.reversed != Boolean((this.situation.loop - lastLoop) % 2);\n            }\n          } else {\n            // If there are no loop, the absolute position must not be above 1\n            this.absPos = Math.min(this.absPos, 1);\n            this.pos = this.absPos;\n          } // while the absolute position can be below 0, the position must not be below 0\n\n\n          if (this.pos < 0) this.pos = 0;\n          if (this.situation.reversed) this.pos = 1 - this.pos; // apply easing\n\n          var eased = this.situation.ease(this.pos); // call once-callbacks\n\n          for (var i in this.situation.once) {\n            if (i > this.lastPos && i <= eased) {\n              this.situation.once[i].call(this.target(), this.pos, eased);\n              delete this.situation.once[i];\n            }\n          } // fire during callback with position, eased position and current situation as parameter\n\n\n          if (this.active) this.target().fire('during', {\n            pos: this.pos,\n            eased: eased,\n            fx: this,\n            situation: this.situation\n          }); // the user may call stop or finish in the during callback\n          // so make sure that we still have a valid situation\n\n          if (!this.situation) {\n            return this;\n          } // apply the actual animation to every property\n\n\n          this.eachAt(); // do final code when situation is finished\n\n          if (this.pos == 1 && !this.situation.reversed || this.situation.reversed && this.pos == 0) {\n            // stop animation callback\n            this.stopAnimFrame(); // fire finished callback with current situation as parameter\n\n            this.target().fire('finished', {\n              fx: this,\n              situation: this.situation\n            });\n\n            if (!this.situations.length) {\n              this.target().fire('allfinished'); // Recheck the length since the user may call animate in the afterAll callback\n\n              if (!this.situations.length) {\n                this.target().off('.fx'); // there shouldnt be any binding left, but to make sure...\n\n                this.active = false;\n              }\n            } // start next animation\n\n\n            if (this.active) this.dequeue();else this.clearCurrent();\n          } else if (!this.paused && this.active) {\n            // we continue animating when we are not at the end\n            this.startAnimFrame();\n          } // save last eased position for once callback triggering\n\n\n          this.lastPos = eased;\n          return this;\n        },\n        // calculates the step for every property and calls block with it\n        eachAt: function eachAt() {\n          var i,\n              len,\n              at,\n              self = this,\n              target = this.target(),\n              s = this.situation; // apply animations which can be called trough a method\n\n          for (i in s.animations) {\n            at = [].concat(s.animations[i]).map(function (el) {\n              return typeof el !== 'string' && el.at ? el.at(s.ease(self.pos), self.pos) : el;\n            });\n            target[i].apply(target, at);\n          } // apply animation which has to be applied with attr()\n\n\n          for (i in s.attrs) {\n            at = [i].concat(s.attrs[i]).map(function (el) {\n              return typeof el !== 'string' && el.at ? el.at(s.ease(self.pos), self.pos) : el;\n            });\n            target.attr.apply(target, at);\n          } // apply animation which has to be applied with style()\n\n\n          for (i in s.styles) {\n            at = [i].concat(s.styles[i]).map(function (el) {\n              return typeof el !== 'string' && el.at ? el.at(s.ease(self.pos), self.pos) : el;\n            });\n            target.style.apply(target, at);\n          } // animate initialTransformation which has to be chained\n\n\n          if (s.transforms.length) {\n            // get initial initialTransformation\n            at = s.initialTransformation;\n\n            for (i = 0, len = s.transforms.length; i < len; i++) {\n              // get next transformation in chain\n              var a = s.transforms[i]; // multiply matrix directly\n\n              if (a instanceof SVG.Matrix) {\n                if (a.relative) {\n                  at = at.multiply(new SVG.Matrix().morph(a).at(s.ease(this.pos)));\n                } else {\n                  at = at.morph(a).at(s.ease(this.pos));\n                }\n\n                continue;\n              } // when transformation is absolute we have to reset the needed transformation first\n\n\n              if (!a.relative) {\n                a.undo(at.extract());\n              } // and reapply it after\n\n\n              at = at.multiply(a.at(s.ease(this.pos)));\n            } // set new matrix on element\n\n\n            target.matrix(at);\n          }\n\n          return this;\n        },\n        // adds an once-callback which is called at a specific position and never again\n        once: function once(pos, fn, isEased) {\n          var c = this.last();\n          if (!isEased) pos = c.ease(pos);\n          c.once[pos] = fn;\n          return this;\n        },\n        _callStart: function _callStart() {\n          setTimeout(function () {\n            this.start();\n          }.bind(this), 0);\n          return this;\n        }\n      },\n      parent: SVG.Element,\n      // Add method to parent elements\n      construct: {\n        // Get fx module or create a new one, then animate with given duration and ease\n        animate: function animate(o, ease, delay) {\n          return (this.fx || (this.fx = new SVG.FX(this))).animate(o, ease, delay);\n        },\n        delay: function delay(_delay2) {\n          return (this.fx || (this.fx = new SVG.FX(this))).delay(_delay2);\n        },\n        stop: function stop(jumpToEnd, clearQueue) {\n          if (this.fx) {\n            this.fx.stop(jumpToEnd, clearQueue);\n          }\n\n          return this;\n        },\n        finish: function finish() {\n          if (this.fx) {\n            this.fx.finish();\n          }\n\n          return this;\n        },\n        // Pause current animation\n        pause: function pause() {\n          if (this.fx) {\n            this.fx.pause();\n          }\n\n          return this;\n        },\n        // Play paused current animation\n        play: function play() {\n          if (this.fx) {\n            this.fx.play();\n          }\n\n          return this;\n        },\n        // Set/Get the speed of the animations\n        speed: function speed(_speed2) {\n          if (this.fx) {\n            if (_speed2 == null) {\n              return this.fx.speed();\n            } else {\n              this.fx.speed(_speed2);\n            }\n          }\n\n          return this;\n        }\n      }\n    }); // MorphObj is used whenever no morphable object is given\n\n    SVG.MorphObj = SVG.invent({\n      create: function create(from, to) {\n        // prepare color for morphing\n        if (SVG.Color.isColor(to)) return new SVG.Color(from).morph(to); // check if we have a list of values\n\n        if (SVG.regex.delimiter.test(from)) {\n          // prepare path for morphing\n          if (SVG.regex.pathLetters.test(from)) return new SVG.PathArray(from).morph(to); // prepare value list for morphing\n          else return new SVG.Array(from).morph(to);\n        } // prepare number for morphing\n\n\n        if (SVG.regex.numberAndUnit.test(to)) return new SVG.Number(from).morph(to); // prepare for plain morphing\n\n        this.value = from;\n        this.destination = to;\n      },\n      extend: {\n        at: function at(pos, real) {\n          return real < 1 ? this.value : this.destination;\n        },\n        valueOf: function valueOf() {\n          return this.value;\n        }\n      }\n    });\n    SVG.extend(SVG.FX, {\n      // Add animatable attributes\n      attr: function attr(a, v, relative) {\n        // apply attributes individually\n        if (_typeof(a) === 'object') {\n          for (var key in a) {\n            this.attr(key, a[key]);\n          }\n        } else {\n          this.add(a, v, 'attrs');\n        }\n\n        return this;\n      },\n      // Add animatable styles\n      style: function style(s, v) {\n        if (_typeof(s) === 'object') {\n          for (var key in s) {\n            this.style(key, s[key]);\n          }\n        } else {\n          this.add(s, v, 'styles');\n        }\n\n        return this;\n      },\n      // Animatable x-axis\n      x: function x(_x2, relative) {\n        if (this.target() instanceof SVG.G) {\n          this.transform({\n            x: _x2\n          }, relative);\n          return this;\n        }\n\n        var num = new SVG.Number(_x2);\n        num.relative = relative;\n        return this.add('x', num);\n      },\n      // Animatable y-axis\n      y: function y(_y2, relative) {\n        if (this.target() instanceof SVG.G) {\n          this.transform({\n            y: _y2\n          }, relative);\n          return this;\n        }\n\n        var num = new SVG.Number(_y2);\n        num.relative = relative;\n        return this.add('y', num);\n      },\n      // Animatable center x-axis\n      cx: function cx(x) {\n        return this.add('cx', new SVG.Number(x));\n      },\n      // Animatable center y-axis\n      cy: function cy(y) {\n        return this.add('cy', new SVG.Number(y));\n      },\n      // Add animatable move\n      move: function move(x, y) {\n        return this.x(x).y(y);\n      },\n      // Add animatable center\n      center: function center(x, y) {\n        return this.cx(x).cy(y);\n      },\n      // Add animatable size\n      size: function size(width, height) {\n        if (this.target() instanceof SVG.Text) {\n          // animate font size for Text elements\n          this.attr('font-size', width);\n        } else {\n          // animate bbox based size for all other elements\n          var box;\n\n          if (!width || !height) {\n            box = this.target().bbox();\n          }\n\n          if (!width) {\n            width = box.width / box.height * height;\n          }\n\n          if (!height) {\n            height = box.height / box.width * width;\n          }\n\n          this.add('width', new SVG.Number(width)).add('height', new SVG.Number(height));\n        }\n\n        return this;\n      },\n      // Add animatable width\n      width: function width(_width2) {\n        return this.add('width', new SVG.Number(_width2));\n      },\n      // Add animatable height\n      height: function height(_height2) {\n        return this.add('height', new SVG.Number(_height2));\n      },\n      // Add animatable plot\n      plot: function plot(a, b, c, d) {\n        // Lines can be plotted with 4 arguments\n        if (arguments.length == 4) {\n          return this.plot([a, b, c, d]);\n        }\n\n        return this.add('plot', new (this.target().morphArray)(a));\n      },\n      // Add leading method\n      leading: function leading(value) {\n        return this.target().leading ? this.add('leading', new SVG.Number(value)) : this;\n      },\n      // Add animatable viewbox\n      viewbox: function viewbox(x, y, width, height) {\n        if (this.target() instanceof SVG.Container) {\n          this.add('viewbox', new SVG.ViewBox(x, y, width, height));\n        }\n\n        return this;\n      },\n      update: function update(o) {\n        if (this.target() instanceof SVG.Stop) {\n          if (typeof o === 'number' || o instanceof SVG.Number) {\n            return this.update({\n              offset: arguments[0],\n              color: arguments[1],\n              opacity: arguments[2]\n            });\n          }\n\n          if (o.opacity != null) this.attr('stop-opacity', o.opacity);\n          if (o.color != null) this.attr('stop-color', o.color);\n          if (o.offset != null) this.attr('offset', o.offset);\n        }\n\n        return this;\n      }\n    });\n    SVG.Box = SVG.invent({\n      create: function create(x, y, width, height) {\n        if (_typeof(x) === 'object' && !(x instanceof SVG.Element)) {\n          // chromes getBoundingClientRect has no x and y property\n          return SVG.Box.call(this, x.left != null ? x.left : x.x, x.top != null ? x.top : x.y, x.width, x.height);\n        } else if (arguments.length == 4) {\n          this.x = x;\n          this.y = y;\n          this.width = width;\n          this.height = height;\n        } // add center, right, bottom...\n\n\n        fullBox(this);\n      },\n      extend: {\n        // Merge rect box with another, return a new instance\n        merge: function merge(box) {\n          var b = new this.constructor(); // merge boxes\n\n          b.x = Math.min(this.x, box.x);\n          b.y = Math.min(this.y, box.y);\n          b.width = Math.max(this.x + this.width, box.x + box.width) - b.x;\n          b.height = Math.max(this.y + this.height, box.y + box.height) - b.y;\n          return fullBox(b);\n        },\n        transform: function transform(m) {\n          var xMin = Infinity,\n              xMax = -Infinity,\n              yMin = Infinity,\n              yMax = -Infinity,\n              bbox;\n          var pts = [new SVG.Point(this.x, this.y), new SVG.Point(this.x2, this.y), new SVG.Point(this.x, this.y2), new SVG.Point(this.x2, this.y2)];\n          pts.forEach(function (p) {\n            p = p.transform(m);\n            xMin = Math.min(xMin, p.x);\n            xMax = Math.max(xMax, p.x);\n            yMin = Math.min(yMin, p.y);\n            yMax = Math.max(yMax, p.y);\n          });\n          bbox = new this.constructor();\n          bbox.x = xMin;\n          bbox.width = xMax - xMin;\n          bbox.y = yMin;\n          bbox.height = yMax - yMin;\n          fullBox(bbox);\n          return bbox;\n        }\n      }\n    });\n    SVG.BBox = SVG.invent({\n      // Initialize\n      create: function create(element) {\n        SVG.Box.apply(this, [].slice.call(arguments)); // get values if element is given\n\n        if (element instanceof SVG.Element) {\n          var box; // yes this is ugly, but Firefox can be a pain when it comes to elements that are not yet rendered\n\n          try {\n            if (!document.documentElement.contains) {\n              // This is IE - it does not support contains() for top-level SVGs\n              var topParent = element.node;\n\n              while (topParent.parentNode) {\n                topParent = topParent.parentNode;\n              }\n\n              if (topParent != document) throw new Error('Element not in the dom');\n            } // the element is NOT in the dom, throw error\n            // disabling the check below which fixes issue #76\n            // if (!document.documentElement.contains(element.node)) throw new Exception('Element not in the dom')\n            // find native bbox\n\n\n            box = element.node.getBBox();\n          } catch (e) {\n            if (element instanceof SVG.Shape) {\n              if (!SVG.parser.draw) {\n                // fixes apexcharts/vue-apexcharts #14\n                SVG.prepare();\n              }\n\n              var clone = element.clone(SVG.parser.draw.instance).show();\n              box = clone.node.getBBox();\n              clone.remove();\n            } else {\n              box = {\n                x: element.node.clientLeft,\n                y: element.node.clientTop,\n                width: element.node.clientWidth,\n                height: element.node.clientHeight\n              };\n            }\n          }\n\n          SVG.Box.call(this, box);\n        }\n      },\n      // Define ancestor\n      inherit: SVG.Box,\n      // Define Parent\n      parent: SVG.Element,\n      // Constructor\n      construct: {\n        // Get bounding box\n        bbox: function bbox() {\n          return new SVG.BBox(this);\n        }\n      }\n    });\n    SVG.BBox.prototype.constructor = SVG.BBox;\n    SVG.extend(SVG.Element, {\n      tbox: function tbox() {\n        console.warn('Use of TBox is deprecated and mapped to RBox. Use .rbox() instead.');\n        return this.rbox(this.doc());\n      }\n    });\n    SVG.RBox = SVG.invent({\n      // Initialize\n      create: function create(element) {\n        SVG.Box.apply(this, [].slice.call(arguments));\n\n        if (element instanceof SVG.Element) {\n          SVG.Box.call(this, element.node.getBoundingClientRect());\n        }\n      },\n      inherit: SVG.Box,\n      // define Parent\n      parent: SVG.Element,\n      extend: {\n        addOffset: function addOffset() {\n          // offset by window scroll position, because getBoundingClientRect changes when window is scrolled\n          this.x += window.pageXOffset;\n          this.y += window.pageYOffset;\n          return this;\n        }\n      },\n      // Constructor\n      construct: {\n        // Get rect box\n        rbox: function rbox(el) {\n          if (el) return new SVG.RBox(this).transform(el.screenCTM().inverse());\n          return new SVG.RBox(this).addOffset();\n        }\n      }\n    });\n    SVG.RBox.prototype.constructor = SVG.RBox;\n    SVG.Matrix = SVG.invent({\n      // Initialize\n      create: function create(source) {\n        var i,\n            base = arrayToMatrix([1, 0, 0, 1, 0, 0]); // ensure source as object\n\n        source = source instanceof SVG.Element ? source.matrixify() : typeof source === 'string' ? arrayToMatrix(source.split(SVG.regex.delimiter).map(parseFloat)) : arguments.length == 6 ? arrayToMatrix([].slice.call(arguments)) : Array.isArray(source) ? arrayToMatrix(source) : _typeof(source) === 'object' ? source : base; // merge source\n\n        for (i = abcdef.length - 1; i >= 0; --i) {\n          this[abcdef[i]] = source[abcdef[i]] != null ? source[abcdef[i]] : base[abcdef[i]];\n        }\n      },\n      // Add methods\n      extend: {\n        // Extract individual transformations\n        extract: function extract() {\n          // find delta transform points\n          var px = deltaTransformPoint(this, 0, 1),\n              py = deltaTransformPoint(this, 1, 0),\n              skewX = 180 / Math.PI * Math.atan2(px.y, px.x) - 90;\n          return {\n            // translation\n            x: this.e,\n            y: this.f,\n            transformedX: (this.e * Math.cos(skewX * Math.PI / 180) + this.f * Math.sin(skewX * Math.PI / 180)) / Math.sqrt(this.a * this.a + this.b * this.b),\n            transformedY: (this.f * Math.cos(skewX * Math.PI / 180) + this.e * Math.sin(-skewX * Math.PI / 180)) / Math.sqrt(this.c * this.c + this.d * this.d),\n            // skew\n            skewX: -skewX,\n            skewY: 180 / Math.PI * Math.atan2(py.y, py.x),\n            // scale\n            scaleX: Math.sqrt(this.a * this.a + this.b * this.b),\n            scaleY: Math.sqrt(this.c * this.c + this.d * this.d),\n            // rotation\n            rotation: skewX,\n            a: this.a,\n            b: this.b,\n            c: this.c,\n            d: this.d,\n            e: this.e,\n            f: this.f,\n            matrix: new SVG.Matrix(this)\n          };\n        },\n        // Clone matrix\n        clone: function clone() {\n          return new SVG.Matrix(this);\n        },\n        // Morph one matrix into another\n        morph: function morph(matrix) {\n          // store new destination\n          this.destination = new SVG.Matrix(matrix);\n          return this;\n        },\n        // Get morphed matrix at a given position\n        at: function at(pos) {\n          // make sure a destination is defined\n          if (!this.destination) return this; // calculate morphed matrix at a given position\n\n          var matrix = new SVG.Matrix({\n            a: this.a + (this.destination.a - this.a) * pos,\n            b: this.b + (this.destination.b - this.b) * pos,\n            c: this.c + (this.destination.c - this.c) * pos,\n            d: this.d + (this.destination.d - this.d) * pos,\n            e: this.e + (this.destination.e - this.e) * pos,\n            f: this.f + (this.destination.f - this.f) * pos\n          });\n          return matrix;\n        },\n        // Multiplies by given matrix\n        multiply: function multiply(matrix) {\n          return new SVG.Matrix(this.native().multiply(parseMatrix(matrix).native()));\n        },\n        // Inverses matrix\n        inverse: function inverse() {\n          return new SVG.Matrix(this.native().inverse());\n        },\n        // Translate matrix\n        translate: function translate(x, y) {\n          return new SVG.Matrix(this.native().translate(x || 0, y || 0));\n        },\n        // Scale matrix\n        scale: function scale(x, y, cx, cy) {\n          // support uniformal scale\n          if (arguments.length == 1) {\n            y = x;\n          } else if (arguments.length == 3) {\n            cy = cx;\n            cx = y;\n            y = x;\n          }\n\n          return this.around(cx, cy, new SVG.Matrix(x, 0, 0, y, 0, 0));\n        },\n        // Rotate matrix\n        rotate: function rotate(r, cx, cy) {\n          // convert degrees to radians\n          r = SVG.utils.radians(r);\n          return this.around(cx, cy, new SVG.Matrix(Math.cos(r), Math.sin(r), -Math.sin(r), Math.cos(r), 0, 0));\n        },\n        // Flip matrix on x or y, at a given offset\n        flip: function flip(a, o) {\n          return a == 'x' ? this.scale(-1, 1, o, 0) : a == 'y' ? this.scale(1, -1, 0, o) : this.scale(-1, -1, a, o != null ? o : a);\n        },\n        // Skew\n        skew: function skew(x, y, cx, cy) {\n          // support uniformal skew\n          if (arguments.length == 1) {\n            y = x;\n          } else if (arguments.length == 3) {\n            cy = cx;\n            cx = y;\n            y = x;\n          } // convert degrees to radians\n\n\n          x = SVG.utils.radians(x);\n          y = SVG.utils.radians(y);\n          return this.around(cx, cy, new SVG.Matrix(1, Math.tan(y), Math.tan(x), 1, 0, 0));\n        },\n        // SkewX\n        skewX: function skewX(x, cx, cy) {\n          return this.skew(x, 0, cx, cy);\n        },\n        // SkewY\n        skewY: function skewY(y, cx, cy) {\n          return this.skew(0, y, cx, cy);\n        },\n        // Transform around a center point\n        around: function around(cx, cy, matrix) {\n          return this.multiply(new SVG.Matrix(1, 0, 0, 1, cx || 0, cy || 0)).multiply(matrix).multiply(new SVG.Matrix(1, 0, 0, 1, -cx || 0, -cy || 0));\n        },\n        // Convert to native SVGMatrix\n        native: function native() {\n          // create new matrix\n          var matrix = SVG.parser.native.createSVGMatrix(); // update with current values\n\n          for (var i = abcdef.length - 1; i >= 0; i--) {\n            matrix[abcdef[i]] = this[abcdef[i]];\n          }\n\n          return matrix;\n        },\n        // Convert matrix to string\n        toString: function toString() {\n          // Construct the matrix directly, avoid values that are too small\n          return 'matrix(' + float32String(this.a) + ',' + float32String(this.b) + ',' + float32String(this.c) + ',' + float32String(this.d) + ',' + float32String(this.e) + ',' + float32String(this.f) + ')';\n        }\n      },\n      // Define parent\n      parent: SVG.Element,\n      // Add parent method\n      construct: {\n        // Get current matrix\n        ctm: function ctm() {\n          return new SVG.Matrix(this.node.getCTM());\n        },\n        // Get current screen matrix\n        screenCTM: function screenCTM() {\n          /* https://bugzilla.mozilla.org/show_bug.cgi?id=1344537\n             This is needed because FF does not return the transformation matrix\n             for the inner coordinate system when getScreenCTM() is called on nested svgs.\n             However all other Browsers do that */\n          if (this instanceof SVG.Nested) {\n            var rect = this.rect(1, 1);\n            var m = rect.node.getScreenCTM();\n            rect.remove();\n            return new SVG.Matrix(m);\n          }\n\n          return new SVG.Matrix(this.node.getScreenCTM());\n        }\n      }\n    });\n    SVG.Point = SVG.invent({\n      // Initialize\n      create: function create(x, y) {\n        var source,\n            base = {\n          x: 0,\n          y: 0 // ensure source as object\n\n        };\n        source = Array.isArray(x) ? {\n          x: x[0],\n          y: x[1]\n        } : _typeof(x) === 'object' ? {\n          x: x.x,\n          y: x.y\n        } : x != null ? {\n          x: x,\n          y: y != null ? y : x\n        } : base; // If y has no value, then x is used has its value\n        // merge source\n\n        this.x = source.x;\n        this.y = source.y;\n      },\n      // Add methods\n      extend: {\n        // Clone point\n        clone: function clone() {\n          return new SVG.Point(this);\n        },\n        // Morph one point into another\n        morph: function morph(x, y) {\n          // store new destination\n          this.destination = new SVG.Point(x, y);\n          return this;\n        },\n        // Get morphed point at a given position\n        at: function at(pos) {\n          // make sure a destination is defined\n          if (!this.destination) return this; // calculate morphed matrix at a given position\n\n          var point = new SVG.Point({\n            x: this.x + (this.destination.x - this.x) * pos,\n            y: this.y + (this.destination.y - this.y) * pos\n          });\n          return point;\n        },\n        // Convert to native SVGPoint\n        native: function native() {\n          // create new point\n          var point = SVG.parser.native.createSVGPoint(); // update with current values\n\n          point.x = this.x;\n          point.y = this.y;\n          return point;\n        },\n        // transform point with matrix\n        transform: function transform(matrix) {\n          return new SVG.Point(this.native().matrixTransform(matrix.native()));\n        }\n      }\n    });\n    SVG.extend(SVG.Element, {\n      // Get point\n      point: function point(x, y) {\n        return new SVG.Point(x, y).transform(this.screenCTM().inverse());\n      }\n    });\n    SVG.extend(SVG.Element, {\n      // Set svg element attribute\n      attr: function attr(a, v, n) {\n        // act as full getter\n        if (a == null) {\n          // get an object of attributes\n          a = {};\n          v = this.node.attributes;\n\n          for (n = v.length - 1; n >= 0; n--) {\n            a[v[n].nodeName] = SVG.regex.isNumber.test(v[n].nodeValue) ? parseFloat(v[n].nodeValue) : v[n].nodeValue;\n          }\n\n          return a;\n        } else if (_typeof(a) === 'object') {\n          // apply every attribute individually if an object is passed\n          for (v in a) {\n            this.attr(v, a[v]);\n          }\n        } else if (v === null) {\n          // remove value\n          this.node.removeAttribute(a);\n        } else if (v == null) {\n          // act as a getter if the first and only argument is not an object\n          v = this.node.getAttribute(a);\n          return v == null ? SVG.defaults.attrs[a] : SVG.regex.isNumber.test(v) ? parseFloat(v) : v;\n        } else {\n          // BUG FIX: some browsers will render a stroke if a color is given even though stroke width is 0\n          if (a == 'stroke-width') {\n            this.attr('stroke', parseFloat(v) > 0 ? this._stroke : null);\n          } else if (a == 'stroke') {\n            this._stroke = v;\n          } // convert image fill and stroke to patterns\n\n\n          if (a == 'fill' || a == 'stroke') {\n            if (SVG.regex.isImage.test(v)) {\n              v = this.doc().defs().image(v, 0, 0);\n            }\n\n            if (v instanceof SVG.Image) {\n              v = this.doc().defs().pattern(0, 0, function () {\n                this.add(v);\n              });\n            }\n          } // ensure correct numeric values (also accepts NaN and Infinity)\n\n\n          if (typeof v === 'number') {\n            v = new SVG.Number(v);\n          } // ensure full hex color\n          else if (SVG.Color.isColor(v)) {\n              v = new SVG.Color(v);\n            } // parse array values\n            else if (Array.isArray(v)) {\n                v = new SVG.Array(v);\n              } // if the passed attribute is leading...\n\n\n          if (a == 'leading') {\n            // ... call the leading method instead\n            if (this.leading) {\n              this.leading(v);\n            }\n          } else {\n            // set given attribute on node\n            typeof n === 'string' ? this.node.setAttributeNS(n, a, v.toString()) : this.node.setAttribute(a, v.toString());\n          } // rebuild if required\n\n\n          if (this.rebuild && (a == 'font-size' || a == 'x')) {\n            this.rebuild(a, v);\n          }\n        }\n\n        return this;\n      }\n    });\n    SVG.extend(SVG.Element, {\n      // Add transformations\n      transform: function transform(o, relative) {\n        // get target in case of the fx module, otherwise reference this\n        var target = this,\n            matrix,\n            bbox; // act as a getter\n\n        if (_typeof(o) !== 'object') {\n          // get current matrix\n          matrix = new SVG.Matrix(target).extract();\n          return typeof o === 'string' ? matrix[o] : matrix;\n        } // get current matrix\n\n\n        matrix = new SVG.Matrix(target); // ensure relative flag\n\n        relative = !!relative || !!o.relative; // act on matrix\n\n        if (o.a != null) {\n          matrix = relative // relative\n          ? matrix.multiply(new SVG.Matrix(o)) // absolute\n          : new SVG.Matrix(o); // act on rotation\n        } else if (o.rotation != null) {\n          // ensure centre point\n          ensureCentre(o, target); // apply transformation\n\n          matrix = relative // relative\n          ? matrix.rotate(o.rotation, o.cx, o.cy) // absolute\n          : matrix.rotate(o.rotation - matrix.extract().rotation, o.cx, o.cy); // act on scale\n        } else if (o.scale != null || o.scaleX != null || o.scaleY != null) {\n          // ensure centre point\n          ensureCentre(o, target); // ensure scale values on both axes\n\n          o.scaleX = o.scale != null ? o.scale : o.scaleX != null ? o.scaleX : 1;\n          o.scaleY = o.scale != null ? o.scale : o.scaleY != null ? o.scaleY : 1;\n\n          if (!relative) {\n            // absolute; multiply inversed values\n            var e = matrix.extract();\n            o.scaleX = o.scaleX * 1 / e.scaleX;\n            o.scaleY = o.scaleY * 1 / e.scaleY;\n          }\n\n          matrix = matrix.scale(o.scaleX, o.scaleY, o.cx, o.cy); // act on skew\n        } else if (o.skew != null || o.skewX != null || o.skewY != null) {\n          // ensure centre point\n          ensureCentre(o, target); // ensure skew values on both axes\n\n          o.skewX = o.skew != null ? o.skew : o.skewX != null ? o.skewX : 0;\n          o.skewY = o.skew != null ? o.skew : o.skewY != null ? o.skewY : 0;\n\n          if (!relative) {\n            // absolute; reset skew values\n            var e = matrix.extract();\n            matrix = matrix.multiply(new SVG.Matrix().skew(e.skewX, e.skewY, o.cx, o.cy).inverse());\n          }\n\n          matrix = matrix.skew(o.skewX, o.skewY, o.cx, o.cy); // act on flip\n        } else if (o.flip) {\n          if (o.flip == 'x' || o.flip == 'y') {\n            o.offset = o.offset == null ? target.bbox()['c' + o.flip] : o.offset;\n          } else {\n            if (o.offset == null) {\n              bbox = target.bbox();\n              o.flip = bbox.cx;\n              o.offset = bbox.cy;\n            } else {\n              o.flip = o.offset;\n            }\n          }\n\n          matrix = new SVG.Matrix().flip(o.flip, o.offset); // act on translate\n        } else if (o.x != null || o.y != null) {\n          if (relative) {\n            // relative\n            matrix = matrix.translate(o.x, o.y);\n          } else {\n            // absolute\n            if (o.x != null) matrix.e = o.x;\n            if (o.y != null) matrix.f = o.y;\n          }\n        }\n\n        return this.attr('transform', matrix);\n      }\n    });\n    SVG.extend(SVG.FX, {\n      transform: function transform(o, relative) {\n        // get target in case of the fx module, otherwise reference this\n        var target = this.target(),\n            matrix,\n            bbox; // act as a getter\n\n        if (_typeof(o) !== 'object') {\n          // get current matrix\n          matrix = new SVG.Matrix(target).extract();\n          return typeof o === 'string' ? matrix[o] : matrix;\n        } // ensure relative flag\n\n\n        relative = !!relative || !!o.relative; // act on matrix\n\n        if (o.a != null) {\n          matrix = new SVG.Matrix(o); // act on rotation\n        } else if (o.rotation != null) {\n          // ensure centre point\n          ensureCentre(o, target); // apply transformation\n\n          matrix = new SVG.Rotate(o.rotation, o.cx, o.cy); // act on scale\n        } else if (o.scale != null || o.scaleX != null || o.scaleY != null) {\n          // ensure centre point\n          ensureCentre(o, target); // ensure scale values on both axes\n\n          o.scaleX = o.scale != null ? o.scale : o.scaleX != null ? o.scaleX : 1;\n          o.scaleY = o.scale != null ? o.scale : o.scaleY != null ? o.scaleY : 1;\n          matrix = new SVG.Scale(o.scaleX, o.scaleY, o.cx, o.cy); // act on skew\n        } else if (o.skewX != null || o.skewY != null) {\n          // ensure centre point\n          ensureCentre(o, target); // ensure skew values on both axes\n\n          o.skewX = o.skewX != null ? o.skewX : 0;\n          o.skewY = o.skewY != null ? o.skewY : 0;\n          matrix = new SVG.Skew(o.skewX, o.skewY, o.cx, o.cy); // act on flip\n        } else if (o.flip) {\n          if (o.flip == 'x' || o.flip == 'y') {\n            o.offset = o.offset == null ? target.bbox()['c' + o.flip] : o.offset;\n          } else {\n            if (o.offset == null) {\n              bbox = target.bbox();\n              o.flip = bbox.cx;\n              o.offset = bbox.cy;\n            } else {\n              o.flip = o.offset;\n            }\n          }\n\n          matrix = new SVG.Matrix().flip(o.flip, o.offset); // act on translate\n        } else if (o.x != null || o.y != null) {\n          matrix = new SVG.Translate(o.x, o.y);\n        }\n\n        if (!matrix) return this;\n        matrix.relative = relative;\n        this.last().transforms.push(matrix);\n        return this._callStart();\n      }\n    });\n    SVG.extend(SVG.Element, {\n      // Reset all transformations\n      untransform: function untransform() {\n        return this.attr('transform', null);\n      },\n      // merge the whole transformation chain into one matrix and returns it\n      matrixify: function matrixify() {\n        var matrix = (this.attr('transform') || ''). // split transformations\n        split(SVG.regex.transforms).slice(0, -1).map(function (str) {\n          // generate key => value pairs\n          var kv = str.trim().split('(');\n          return [kv[0], kv[1].split(SVG.regex.delimiter).map(function (str) {\n            return parseFloat(str);\n          })];\n        }) // merge every transformation into one matrix\n        .reduce(function (matrix, transform) {\n          if (transform[0] == 'matrix') return matrix.multiply(arrayToMatrix(transform[1]));\n          return matrix[transform[0]].apply(matrix, transform[1]);\n        }, new SVG.Matrix());\n        return matrix;\n      },\n      // add an element to another parent without changing the visual representation on the screen\n      toParent: function toParent(parent) {\n        if (this == parent) return this;\n        var ctm = this.screenCTM();\n        var pCtm = parent.screenCTM().inverse();\n        this.addTo(parent).untransform().transform(pCtm.multiply(ctm));\n        return this;\n      },\n      // same as above with parent equals root-svg\n      toDoc: function toDoc() {\n        return this.toParent(this.doc());\n      }\n    });\n    SVG.Transformation = SVG.invent({\n      create: function create(source, inversed) {\n        if (arguments.length > 1 && typeof inversed !== 'boolean') {\n          return this.constructor.call(this, [].slice.call(arguments));\n        }\n\n        if (Array.isArray(source)) {\n          for (var i = 0, len = this.arguments.length; i < len; ++i) {\n            this[this.arguments[i]] = source[i];\n          }\n        } else if (_typeof(source) === 'object') {\n          for (var i = 0, len = this.arguments.length; i < len; ++i) {\n            this[this.arguments[i]] = source[this.arguments[i]];\n          }\n        }\n\n        this.inversed = false;\n\n        if (inversed === true) {\n          this.inversed = true;\n        }\n      },\n      extend: {\n        arguments: [],\n        method: '',\n        at: function at(pos) {\n          var params = [];\n\n          for (var i = 0, len = this.arguments.length; i < len; ++i) {\n            params.push(this[this.arguments[i]]);\n          }\n\n          var m = this._undo || new SVG.Matrix();\n          m = new SVG.Matrix().morph(SVG.Matrix.prototype[this.method].apply(m, params)).at(pos);\n          return this.inversed ? m.inverse() : m;\n        },\n        undo: function undo(o) {\n          for (var i = 0, len = this.arguments.length; i < len; ++i) {\n            o[this.arguments[i]] = typeof this[this.arguments[i]] === 'undefined' ? 0 : o[this.arguments[i]];\n          } // The method SVG.Matrix.extract which was used before calling this\n          // method to obtain a value for the parameter o doesn't return a cx and\n          // a cy so we use the ones that were provided to this object at its creation\n\n\n          o.cx = this.cx;\n          o.cy = this.cy;\n          this._undo = new SVG[capitalize(this.method)](o, true).at(1);\n          return this;\n        }\n      }\n    });\n    SVG.Translate = SVG.invent({\n      parent: SVG.Matrix,\n      inherit: SVG.Transformation,\n      create: function create(source, inversed) {\n        this.constructor.apply(this, [].slice.call(arguments));\n      },\n      extend: {\n        arguments: ['transformedX', 'transformedY'],\n        method: 'translate'\n      }\n    });\n    SVG.Rotate = SVG.invent({\n      parent: SVG.Matrix,\n      inherit: SVG.Transformation,\n      create: function create(source, inversed) {\n        this.constructor.apply(this, [].slice.call(arguments));\n      },\n      extend: {\n        arguments: ['rotation', 'cx', 'cy'],\n        method: 'rotate',\n        at: function at(pos) {\n          var m = new SVG.Matrix().rotate(new SVG.Number().morph(this.rotation - (this._undo ? this._undo.rotation : 0)).at(pos), this.cx, this.cy);\n          return this.inversed ? m.inverse() : m;\n        },\n        undo: function undo(o) {\n          this._undo = o;\n          return this;\n        }\n      }\n    });\n    SVG.Scale = SVG.invent({\n      parent: SVG.Matrix,\n      inherit: SVG.Transformation,\n      create: function create(source, inversed) {\n        this.constructor.apply(this, [].slice.call(arguments));\n      },\n      extend: {\n        arguments: ['scaleX', 'scaleY', 'cx', 'cy'],\n        method: 'scale'\n      }\n    });\n    SVG.Skew = SVG.invent({\n      parent: SVG.Matrix,\n      inherit: SVG.Transformation,\n      create: function create(source, inversed) {\n        this.constructor.apply(this, [].slice.call(arguments));\n      },\n      extend: {\n        arguments: ['skewX', 'skewY', 'cx', 'cy'],\n        method: 'skew'\n      }\n    });\n    SVG.extend(SVG.Element, {\n      // Dynamic style generator\n      style: function style(s, v) {\n        if (arguments.length == 0) {\n          // get full style\n          return this.node.style.cssText || '';\n        } else if (arguments.length < 2) {\n          // apply every style individually if an object is passed\n          if (_typeof(s) === 'object') {\n            for (v in s) {\n              this.style(v, s[v]);\n            }\n          } else if (SVG.regex.isCss.test(s)) {\n            // parse css string\n            s = s.split(/\\s*;\\s*/) // filter out suffix ; and stuff like ;;\n            .filter(function (e) {\n              return !!e;\n            }).map(function (e) {\n              return e.split(/\\s*:\\s*/);\n            }); // apply every definition individually\n\n            while (v = s.pop()) {\n              this.style(v[0], v[1]);\n            }\n          } else {\n            // act as a getter if the first and only argument is not an object\n            return this.node.style[camelCase(s)];\n          }\n        } else {\n          this.node.style[camelCase(s)] = v === null || SVG.regex.isBlank.test(v) ? '' : v;\n        }\n\n        return this;\n      }\n    });\n    SVG.Parent = SVG.invent({\n      // Initialize node\n      create: function create(element) {\n        this.constructor.call(this, element);\n      },\n      // Inherit from\n      inherit: SVG.Element,\n      // Add class methods\n      extend: {\n        // Returns all child elements\n        children: function children() {\n          return SVG.utils.map(SVG.utils.filterSVGElements(this.node.childNodes), function (node) {\n            return SVG.adopt(node);\n          });\n        },\n        // Add given element at a position\n        add: function add(element, i) {\n          if (i == null) {\n            this.node.appendChild(element.node);\n          } else if (element.node != this.node.childNodes[i]) {\n            this.node.insertBefore(element.node, this.node.childNodes[i]);\n          }\n\n          return this;\n        },\n        // Basically does the same as `add()` but returns the added element instead\n        put: function put(element, i) {\n          this.add(element, i);\n          return element;\n        },\n        // Checks if the given element is a child\n        has: function has(element) {\n          return this.index(element) >= 0;\n        },\n        // Gets index of given element\n        index: function index(element) {\n          return [].slice.call(this.node.childNodes).indexOf(element.node);\n        },\n        // Get a element at the given index\n        get: function get(i) {\n          return SVG.adopt(this.node.childNodes[i]);\n        },\n        // Get first child\n        first: function first() {\n          return this.get(0);\n        },\n        // Get the last child\n        last: function last() {\n          return this.get(this.node.childNodes.length - 1);\n        },\n        // Iterates over all children and invokes a given block\n        each: function each(block, deep) {\n          var i,\n              il,\n              children = this.children();\n\n          for (i = 0, il = children.length; i < il; i++) {\n            if (children[i] instanceof SVG.Element) {\n              block.apply(children[i], [i, children]);\n            }\n\n            if (deep && children[i] instanceof SVG.Container) {\n              children[i].each(block, deep);\n            }\n          }\n\n          return this;\n        },\n        // Remove a given child\n        removeElement: function removeElement(element) {\n          this.node.removeChild(element.node);\n          return this;\n        },\n        // Remove all elements in this container\n        clear: function clear() {\n          // remove children\n          while (this.node.hasChildNodes()) {\n            this.node.removeChild(this.node.lastChild);\n          } // remove defs reference\n\n\n          delete this._defs;\n          return this;\n        },\n        // Get defs\n        defs: function defs() {\n          return this.doc().defs();\n        }\n      }\n    });\n    SVG.extend(SVG.Parent, {\n      ungroup: function ungroup(parent, depth) {\n        if (depth === 0 || this instanceof SVG.Defs || this.node == SVG.parser.draw) return this;\n        parent = parent || (this instanceof SVG.Doc ? this : this.parent(SVG.Parent));\n        depth = depth || Infinity;\n        this.each(function () {\n          if (this instanceof SVG.Defs) return this;\n          if (this instanceof SVG.Parent) return this.ungroup(parent, depth - 1);\n          return this.toParent(parent);\n        });\n        this.node.firstChild || this.remove();\n        return this;\n      },\n      flatten: function flatten(parent, depth) {\n        return this.ungroup(parent, depth);\n      }\n    });\n    SVG.Container = SVG.invent({\n      // Initialize node\n      create: function create(element) {\n        this.constructor.call(this, element);\n      },\n      // Inherit from\n      inherit: SVG.Parent\n    });\n    SVG.ViewBox = SVG.invent({\n      create: function create(source) {\n        var base = [0, 0, 0, 0];\n        var x,\n            y,\n            width,\n            height,\n            box,\n            view,\n            we,\n            he,\n            wm = 1,\n            // width multiplier\n        hm = 1,\n            // height multiplier\n        reg = /[+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?/gi;\n\n        if (source instanceof SVG.Element) {\n          we = source;\n          he = source;\n          view = (source.attr('viewBox') || '').match(reg);\n          box = source.bbox; // get dimensions of current node\n\n          width = new SVG.Number(source.width());\n          height = new SVG.Number(source.height()); // find nearest non-percentual dimensions\n\n          while (width.unit == '%') {\n            wm *= width.value;\n            width = new SVG.Number(we instanceof SVG.Doc ? we.parent().offsetWidth : we.parent().width());\n            we = we.parent();\n          }\n\n          while (height.unit == '%') {\n            hm *= height.value;\n            height = new SVG.Number(he instanceof SVG.Doc ? he.parent().offsetHeight : he.parent().height());\n            he = he.parent();\n          } // ensure defaults\n\n\n          this.x = 0;\n          this.y = 0;\n          this.width = width * wm;\n          this.height = height * hm;\n          this.zoom = 1;\n\n          if (view) {\n            // get width and height from viewbox\n            x = parseFloat(view[0]);\n            y = parseFloat(view[1]);\n            width = parseFloat(view[2]);\n            height = parseFloat(view[3]); // calculate zoom accoring to viewbox\n\n            this.zoom = this.width / this.height > width / height ? this.height / height : this.width / width; // calculate real pixel dimensions on parent SVG.Doc element\n\n            this.x = x;\n            this.y = y;\n            this.width = width;\n            this.height = height;\n          }\n        } else {\n          // ensure source as object\n          source = typeof source === 'string' ? source.match(reg).map(function (el) {\n            return parseFloat(el);\n          }) : Array.isArray(source) ? source : _typeof(source) === 'object' ? [source.x, source.y, source.width, source.height] : arguments.length == 4 ? [].slice.call(arguments) : base;\n          this.x = source[0];\n          this.y = source[1];\n          this.width = source[2];\n          this.height = source[3];\n        }\n      },\n      extend: {\n        toString: function toString() {\n          return this.x + ' ' + this.y + ' ' + this.width + ' ' + this.height;\n        },\n        morph: function morph(x, y, width, height) {\n          this.destination = new SVG.ViewBox(x, y, width, height);\n          return this;\n        },\n        at: function at(pos) {\n          if (!this.destination) return this;\n          return new SVG.ViewBox([this.x + (this.destination.x - this.x) * pos, this.y + (this.destination.y - this.y) * pos, this.width + (this.destination.width - this.width) * pos, this.height + (this.destination.height - this.height) * pos]);\n        }\n      },\n      // Define parent\n      parent: SVG.Container,\n      // Add parent method\n      construct: {\n        // get/set viewbox\n        viewbox: function viewbox(x, y, width, height) {\n          if (arguments.length == 0) // act as a getter if there are no arguments\n            {\n              return new SVG.ViewBox(this);\n            } // otherwise act as a setter\n\n\n          return this.attr('viewBox', new SVG.ViewBox(x, y, width, height));\n        }\n      }\n    }) // Add events to elements\n    ;\n    ['click', 'dblclick', 'mousedown', 'mouseup', 'mouseover', 'mouseout', 'mousemove', // , 'mouseenter' -> not supported by IE\n    // , 'mouseleave' -> not supported by IE\n    'touchstart', 'touchmove', 'touchleave', 'touchend', 'touchcancel'].forEach(function (event) {\n      // add event to SVG.Element\n      SVG.Element.prototype[event] = function (f) {\n        // bind event to element rather than element node\n        SVG.on(this.node, event, f);\n        return this;\n      };\n    }); // Initialize listeners stack\n\n    SVG.listeners = [];\n    SVG.handlerMap = [];\n    SVG.listenerId = 0; // Add event binder in the SVG namespace\n\n    SVG.on = function (node, event, listener, binding, options) {\n      // create listener, get object-index\n      var l = listener.bind(binding || node.instance || node),\n          index = (SVG.handlerMap.indexOf(node) + 1 || SVG.handlerMap.push(node)) - 1,\n          ev = event.split('.')[0],\n          ns = event.split('.')[1] || '*'; // ensure valid object\n\n      SVG.listeners[index] = SVG.listeners[index] || {};\n      SVG.listeners[index][ev] = SVG.listeners[index][ev] || {};\n      SVG.listeners[index][ev][ns] = SVG.listeners[index][ev][ns] || {};\n\n      if (!listener._svgjsListenerId) {\n        listener._svgjsListenerId = ++SVG.listenerId;\n      } // reference listener\n\n\n      SVG.listeners[index][ev][ns][listener._svgjsListenerId] = l; // add listener\n\n      node.addEventListener(ev, l, options || false);\n    }; // Add event unbinder in the SVG namespace\n\n\n    SVG.off = function (node, event, listener) {\n      var index = SVG.handlerMap.indexOf(node),\n          ev = event && event.split('.')[0],\n          ns = event && event.split('.')[1],\n          namespace = '';\n      if (index == -1) return;\n\n      if (listener) {\n        if (typeof listener === 'function') listener = listener._svgjsListenerId;\n        if (!listener) return; // remove listener reference\n\n        if (SVG.listeners[index][ev] && SVG.listeners[index][ev][ns || '*']) {\n          // remove listener\n          node.removeEventListener(ev, SVG.listeners[index][ev][ns || '*'][listener], false);\n          delete SVG.listeners[index][ev][ns || '*'][listener];\n        }\n      } else if (ns && ev) {\n        // remove all listeners for a namespaced event\n        if (SVG.listeners[index][ev] && SVG.listeners[index][ev][ns]) {\n          for (listener in SVG.listeners[index][ev][ns]) {\n            SVG.off(node, [ev, ns].join('.'), listener);\n          }\n\n          delete SVG.listeners[index][ev][ns];\n        }\n      } else if (ns) {\n        // remove all listeners for a specific namespace\n        for (event in SVG.listeners[index]) {\n          for (namespace in SVG.listeners[index][event]) {\n            if (ns === namespace) {\n              SVG.off(node, [event, ns].join('.'));\n            }\n          }\n        }\n      } else if (ev) {\n        // remove all listeners for the event\n        if (SVG.listeners[index][ev]) {\n          for (namespace in SVG.listeners[index][ev]) {\n            SVG.off(node, [ev, namespace].join('.'));\n          }\n\n          delete SVG.listeners[index][ev];\n        }\n      } else {\n        // remove all listeners on a given node\n        for (event in SVG.listeners[index]) {\n          SVG.off(node, event);\n        }\n\n        delete SVG.listeners[index];\n        delete SVG.handlerMap[index];\n      }\n    }; //\n\n\n    SVG.extend(SVG.Element, {\n      // Bind given event to listener\n      on: function on(event, listener, binding, options) {\n        SVG.on(this.node, event, listener, binding, options);\n        return this;\n      },\n      // Unbind event from listener\n      off: function off(event, listener) {\n        SVG.off(this.node, event, listener);\n        return this;\n      },\n      // Fire given event\n      fire: function fire(event, data) {\n        // Dispatch event\n        if (event instanceof window.Event) {\n          this.node.dispatchEvent(event);\n        } else {\n          this.node.dispatchEvent(event = new SVG.CustomEvent(event, {\n            detail: data,\n            cancelable: true\n          }));\n        }\n\n        this._event = event;\n        return this;\n      },\n      event: function event() {\n        return this._event;\n      }\n    });\n    SVG.Defs = SVG.invent({\n      // Initialize node\n      create: 'defs',\n      // Inherit from\n      inherit: SVG.Container\n    });\n    SVG.G = SVG.invent({\n      // Initialize node\n      create: 'g',\n      // Inherit from\n      inherit: SVG.Container,\n      // Add class methods\n      extend: {\n        // Move over x-axis\n        x: function x(_x3) {\n          return _x3 == null ? this.transform('x') : this.transform({\n            x: _x3 - this.x()\n          }, true);\n        },\n        // Move over y-axis\n        y: function y(_y3) {\n          return _y3 == null ? this.transform('y') : this.transform({\n            y: _y3 - this.y()\n          }, true);\n        },\n        // Move by center over x-axis\n        cx: function cx(x) {\n          return x == null ? this.gbox().cx : this.x(x - this.gbox().width / 2);\n        },\n        // Move by center over y-axis\n        cy: function cy(y) {\n          return y == null ? this.gbox().cy : this.y(y - this.gbox().height / 2);\n        },\n        gbox: function gbox() {\n          var bbox = this.bbox(),\n              trans = this.transform();\n          bbox.x += trans.x;\n          bbox.x2 += trans.x;\n          bbox.cx += trans.x;\n          bbox.y += trans.y;\n          bbox.y2 += trans.y;\n          bbox.cy += trans.y;\n          return bbox;\n        }\n      },\n      // Add parent method\n      construct: {\n        // Create a group element\n        group: function group() {\n          return this.put(new SVG.G());\n        }\n      }\n    });\n    SVG.Doc = SVG.invent({\n      // Initialize node\n      create: function create(element) {\n        if (element) {\n          // ensure the presence of a dom element\n          element = typeof element === 'string' ? document.getElementById(element) : element; // If the target is an svg element, use that element as the main wrapper.\n          // This allows svg.js to work with svg documents as well.\n\n          if (element.nodeName == 'svg') {\n            this.constructor.call(this, element);\n          } else {\n            this.constructor.call(this, SVG.create('svg'));\n            element.appendChild(this.node);\n            this.size('100%', '100%');\n          } // set svg element attributes and ensure defs node\n\n\n          this.namespace().defs();\n        }\n      },\n      // Inherit from\n      inherit: SVG.Container,\n      // Add class methods\n      extend: {\n        // Add namespaces\n        namespace: function namespace() {\n          return this.attr({\n            xmlns: SVG.ns,\n            version: '1.1'\n          }).attr('xmlns:xlink', SVG.xlink, SVG.xmlns).attr('xmlns:svgjs', SVG.svgjs, SVG.xmlns);\n        },\n        // Creates and returns defs element\n        defs: function defs() {\n          if (!this._defs) {\n            var defs; // Find or create a defs element in this instance\n\n            if (defs = this.node.getElementsByTagName('defs')[0]) {\n              this._defs = SVG.adopt(defs);\n            } else {\n              this._defs = new SVG.Defs();\n            } // Make sure the defs node is at the end of the stack\n\n\n            this.node.appendChild(this._defs.node);\n          }\n\n          return this._defs;\n        },\n        // custom parent method\n        parent: function parent() {\n          if (!this.node.parentNode || this.node.parentNode.nodeName == '#document') return null;\n          return this.node.parentNode;\n        },\n        // Fix for possible sub-pixel offset. See:\n        // https://bugzilla.mozilla.org/show_bug.cgi?id=608812\n        spof: function spof() {\n          var pos = this.node.getScreenCTM();\n\n          if (pos) {\n            this.style('left', -pos.e % 1 + 'px').style('top', -pos.f % 1 + 'px');\n          }\n\n          return this;\n        },\n        // Removes the doc from the DOM\n        remove: function remove() {\n          if (this.parent()) {\n            this.parent().removeChild(this.node);\n          }\n\n          return this;\n        },\n        clear: function clear() {\n          // remove children\n          while (this.node.hasChildNodes()) {\n            this.node.removeChild(this.node.lastChild);\n          } // remove defs reference\n\n\n          delete this._defs; // add back parser\n\n          if (SVG.parser.draw && !SVG.parser.draw.parentNode) {\n            this.node.appendChild(SVG.parser.draw);\n          }\n\n          return this;\n        },\n        clone: function clone(parent) {\n          // write dom data to the dom so the clone can pickup the data\n          this.writeDataToDom(); // get reference to node\n\n          var node = this.node; // clone element and assign new id\n\n          var clone = assignNewId(node.cloneNode(true)); // insert the clone in the given parent or after myself\n\n          if (parent) {\n            (parent.node || parent).appendChild(clone.node);\n          } else {\n            node.parentNode.insertBefore(clone.node, node.nextSibling);\n          }\n\n          return clone;\n        }\n      }\n    }); // ### This module adds backward / forward functionality to elements.\n    //\n\n    SVG.extend(SVG.Element, {\n      // Get all siblings, including myself\n      siblings: function siblings() {\n        return this.parent().children();\n      },\n      // Get the curent position siblings\n      position: function position() {\n        return this.parent().index(this);\n      },\n      // Get the next element (will return null if there is none)\n      next: function next() {\n        return this.siblings()[this.position() + 1];\n      },\n      // Get the next element (will return null if there is none)\n      previous: function previous() {\n        return this.siblings()[this.position() - 1];\n      },\n      // Send given element one step forward\n      forward: function forward() {\n        var i = this.position() + 1,\n            p = this.parent(); // move node one step forward\n\n        p.removeElement(this).add(this, i); // make sure defs node is always at the top\n\n        if (p instanceof SVG.Doc) {\n          p.node.appendChild(p.defs().node);\n        }\n\n        return this;\n      },\n      // Send given element one step backward\n      backward: function backward() {\n        var i = this.position();\n\n        if (i > 0) {\n          this.parent().removeElement(this).add(this, i - 1);\n        }\n\n        return this;\n      },\n      // Send given element all the way to the front\n      front: function front() {\n        var p = this.parent(); // Move node forward\n\n        p.node.appendChild(this.node); // Make sure defs node is always at the top\n\n        if (p instanceof SVG.Doc) {\n          p.node.appendChild(p.defs().node);\n        }\n\n        return this;\n      },\n      // Send given element all the way to the back\n      back: function back() {\n        if (this.position() > 0) {\n          this.parent().removeElement(this).add(this, 0);\n        }\n\n        return this;\n      },\n      // Inserts a given element before the targeted element\n      before: function before(element) {\n        element.remove();\n        var i = this.position();\n        this.parent().add(element, i);\n        return this;\n      },\n      // Insters a given element after the targeted element\n      after: function after(element) {\n        element.remove();\n        var i = this.position();\n        this.parent().add(element, i + 1);\n        return this;\n      }\n    });\n    SVG.Mask = SVG.invent({\n      // Initialize node\n      create: function create() {\n        this.constructor.call(this, SVG.create('mask')); // keep references to masked elements\n\n        this.targets = [];\n      },\n      // Inherit from\n      inherit: SVG.Container,\n      // Add class methods\n      extend: {\n        // Unmask all masked elements and remove itself\n        remove: function remove() {\n          // unmask all targets\n          for (var i = this.targets.length - 1; i >= 0; i--) {\n            if (this.targets[i]) {\n              this.targets[i].unmask();\n            }\n          }\n\n          this.targets = []; // remove mask from parent\n\n          SVG.Element.prototype.remove.call(this);\n          return this;\n        }\n      },\n      // Add parent method\n      construct: {\n        // Create masking element\n        mask: function mask() {\n          return this.defs().put(new SVG.Mask());\n        }\n      }\n    });\n    SVG.extend(SVG.Element, {\n      // Distribute mask to svg element\n      maskWith: function maskWith(element) {\n        // use given mask or create a new one\n        this.masker = element instanceof SVG.Mask ? element : this.parent().mask().add(element); // store reverence on self in mask\n\n        this.masker.targets.push(this); // apply mask\n\n        return this.attr('mask', 'url(\"#' + this.masker.attr('id') + '\")');\n      },\n      // Unmask element\n      unmask: function unmask() {\n        delete this.masker;\n        return this.attr('mask', null);\n      }\n    });\n    SVG.ClipPath = SVG.invent({\n      // Initialize node\n      create: function create() {\n        this.constructor.call(this, SVG.create('clipPath')); // keep references to clipped elements\n\n        this.targets = [];\n      },\n      // Inherit from\n      inherit: SVG.Container,\n      // Add class methods\n      extend: {\n        // Unclip all clipped elements and remove itself\n        remove: function remove() {\n          // unclip all targets\n          for (var i = this.targets.length - 1; i >= 0; i--) {\n            if (this.targets[i]) {\n              this.targets[i].unclip();\n            }\n          }\n\n          this.targets = []; // remove clipPath from parent\n\n          this.parent().removeElement(this);\n          return this;\n        }\n      },\n      // Add parent method\n      construct: {\n        // Create clipping element\n        clip: function clip() {\n          return this.defs().put(new SVG.ClipPath());\n        }\n      }\n    }); //\n\n    SVG.extend(SVG.Element, {\n      // Distribute clipPath to svg element\n      clipWith: function clipWith(element) {\n        // use given clip or create a new one\n        this.clipper = element instanceof SVG.ClipPath ? element : this.parent().clip().add(element); // store reverence on self in mask\n\n        this.clipper.targets.push(this); // apply mask\n\n        return this.attr('clip-path', 'url(\"#' + this.clipper.attr('id') + '\")');\n      },\n      // Unclip element\n      unclip: function unclip() {\n        delete this.clipper;\n        return this.attr('clip-path', null);\n      }\n    });\n    SVG.Gradient = SVG.invent({\n      // Initialize node\n      create: function create(type) {\n        this.constructor.call(this, SVG.create(type + 'Gradient')); // store type\n\n        this.type = type;\n      },\n      // Inherit from\n      inherit: SVG.Container,\n      // Add class methods\n      extend: {\n        // Add a color stop\n        at: function at(offset, color, opacity) {\n          return this.put(new SVG.Stop()).update(offset, color, opacity);\n        },\n        // Update gradient\n        update: function update(block) {\n          // remove all stops\n          this.clear(); // invoke passed block\n\n          if (typeof block === 'function') {\n            block.call(this, this);\n          }\n\n          return this;\n        },\n        // Return the fill id\n        fill: function fill() {\n          return 'url(#' + this.id() + ')';\n        },\n        // Alias string convertion to fill\n        toString: function toString() {\n          return this.fill();\n        },\n        // custom attr to handle transform\n        attr: function attr(a, b, c) {\n          if (a == 'transform') a = 'gradientTransform';\n          return SVG.Container.prototype.attr.call(this, a, b, c);\n        }\n      },\n      // Add parent method\n      construct: {\n        // Create gradient element in defs\n        gradient: function gradient(type, block) {\n          return this.defs().gradient(type, block);\n        }\n      }\n    }); // Add animatable methods to both gradient and fx module\n\n    SVG.extend(SVG.Gradient, SVG.FX, {\n      // From position\n      from: function from(x, y) {\n        return (this._target || this).type == 'radial' ? this.attr({\n          fx: new SVG.Number(x),\n          fy: new SVG.Number(y)\n        }) : this.attr({\n          x1: new SVG.Number(x),\n          y1: new SVG.Number(y)\n        });\n      },\n      // To position\n      to: function to(x, y) {\n        return (this._target || this).type == 'radial' ? this.attr({\n          cx: new SVG.Number(x),\n          cy: new SVG.Number(y)\n        }) : this.attr({\n          x2: new SVG.Number(x),\n          y2: new SVG.Number(y)\n        });\n      }\n    }); // Base gradient generation\n\n    SVG.extend(SVG.Defs, {\n      // define gradient\n      gradient: function gradient(type, block) {\n        return this.put(new SVG.Gradient(type)).update(block);\n      }\n    });\n    SVG.Stop = SVG.invent({\n      // Initialize node\n      create: 'stop',\n      // Inherit from\n      inherit: SVG.Element,\n      // Add class methods\n      extend: {\n        // add color stops\n        update: function update(o) {\n          if (typeof o === 'number' || o instanceof SVG.Number) {\n            o = {\n              offset: arguments[0],\n              color: arguments[1],\n              opacity: arguments[2]\n            };\n          } // set attributes\n\n\n          if (o.opacity != null) this.attr('stop-opacity', o.opacity);\n          if (o.color != null) this.attr('stop-color', o.color);\n          if (o.offset != null) this.attr('offset', new SVG.Number(o.offset));\n          return this;\n        }\n      }\n    });\n    SVG.Pattern = SVG.invent({\n      // Initialize node\n      create: 'pattern',\n      // Inherit from\n      inherit: SVG.Container,\n      // Add class methods\n      extend: {\n        // Return the fill id\n        fill: function fill() {\n          return 'url(#' + this.id() + ')';\n        },\n        // Update pattern by rebuilding\n        update: function update(block) {\n          // remove content\n          this.clear(); // invoke passed block\n\n          if (typeof block === 'function') {\n            block.call(this, this);\n          }\n\n          return this;\n        },\n        // Alias string convertion to fill\n        toString: function toString() {\n          return this.fill();\n        },\n        // custom attr to handle transform\n        attr: function attr(a, b, c) {\n          if (a == 'transform') a = 'patternTransform';\n          return SVG.Container.prototype.attr.call(this, a, b, c);\n        }\n      },\n      // Add parent method\n      construct: {\n        // Create pattern element in defs\n        pattern: function pattern(width, height, block) {\n          return this.defs().pattern(width, height, block);\n        }\n      }\n    });\n    SVG.extend(SVG.Defs, {\n      // Define gradient\n      pattern: function pattern(width, height, block) {\n        return this.put(new SVG.Pattern()).update(block).attr({\n          x: 0,\n          y: 0,\n          width: width,\n          height: height,\n          patternUnits: 'userSpaceOnUse'\n        });\n      }\n    });\n    SVG.Shape = SVG.invent({\n      // Initialize node\n      create: function create(element) {\n        this.constructor.call(this, element);\n      },\n      // Inherit from\n      inherit: SVG.Element\n    });\n    SVG.Bare = SVG.invent({\n      // Initialize\n      create: function create(element, inherit) {\n        // construct element\n        this.constructor.call(this, SVG.create(element)); // inherit custom methods\n\n        if (inherit) {\n          for (var method in inherit.prototype) {\n            if (typeof inherit.prototype[method] === 'function') {\n              this[method] = inherit.prototype[method];\n            }\n          }\n        }\n      },\n      // Inherit from\n      inherit: SVG.Element,\n      // Add methods\n      extend: {\n        // Insert some plain text\n        words: function words(text) {\n          // remove contents\n          while (this.node.hasChildNodes()) {\n            this.node.removeChild(this.node.lastChild);\n          } // create text node\n\n\n          this.node.appendChild(document.createTextNode(text));\n          return this;\n        }\n      }\n    });\n    SVG.extend(SVG.Parent, {\n      // Create an element that is not described by SVG.js\n      element: function element(_element, inherit) {\n        return this.put(new SVG.Bare(_element, inherit));\n      }\n    });\n    SVG.Symbol = SVG.invent({\n      // Initialize node\n      create: 'symbol',\n      // Inherit from\n      inherit: SVG.Container,\n      construct: {\n        // create symbol\n        symbol: function symbol() {\n          return this.put(new SVG.Symbol());\n        }\n      }\n    });\n    SVG.Use = SVG.invent({\n      // Initialize node\n      create: 'use',\n      // Inherit from\n      inherit: SVG.Shape,\n      // Add class methods\n      extend: {\n        // Use element as a reference\n        element: function element(_element2, file) {\n          // Set lined element\n          return this.attr('href', (file || '') + '#' + _element2, SVG.xlink);\n        }\n      },\n      // Add parent method\n      construct: {\n        // Create a use element\n        use: function use(element, file) {\n          return this.put(new SVG.Use()).element(element, file);\n        }\n      }\n    });\n    SVG.Rect = SVG.invent({\n      // Initialize node\n      create: 'rect',\n      // Inherit from\n      inherit: SVG.Shape,\n      // Add parent method\n      construct: {\n        // Create a rect element\n        rect: function rect(width, height) {\n          return this.put(new SVG.Rect()).size(width, height);\n        }\n      }\n    });\n    SVG.Circle = SVG.invent({\n      // Initialize node\n      create: 'circle',\n      // Inherit from\n      inherit: SVG.Shape,\n      // Add parent method\n      construct: {\n        // Create circle element, based on ellipse\n        circle: function circle(size) {\n          return this.put(new SVG.Circle()).rx(new SVG.Number(size).divide(2)).move(0, 0);\n        }\n      }\n    });\n    SVG.extend(SVG.Circle, SVG.FX, {\n      // Radius x value\n      rx: function rx(_rx) {\n        return this.attr('r', _rx);\n      },\n      // Alias radius x value\n      ry: function ry(_ry) {\n        return this.rx(_ry);\n      }\n    });\n    SVG.Ellipse = SVG.invent({\n      // Initialize node\n      create: 'ellipse',\n      // Inherit from\n      inherit: SVG.Shape,\n      // Add parent method\n      construct: {\n        // Create an ellipse\n        ellipse: function ellipse(width, height) {\n          return this.put(new SVG.Ellipse()).size(width, height).move(0, 0);\n        }\n      }\n    });\n    SVG.extend(SVG.Ellipse, SVG.Rect, SVG.FX, {\n      // Radius x value\n      rx: function rx(_rx2) {\n        return this.attr('rx', _rx2);\n      },\n      // Radius y value\n      ry: function ry(_ry2) {\n        return this.attr('ry', _ry2);\n      }\n    }); // Add common method\n\n    SVG.extend(SVG.Circle, SVG.Ellipse, {\n      // Move over x-axis\n      x: function x(_x4) {\n        return _x4 == null ? this.cx() - this.rx() : this.cx(_x4 + this.rx());\n      },\n      // Move over y-axis\n      y: function y(_y4) {\n        return _y4 == null ? this.cy() - this.ry() : this.cy(_y4 + this.ry());\n      },\n      // Move by center over x-axis\n      cx: function cx(x) {\n        return x == null ? this.attr('cx') : this.attr('cx', x);\n      },\n      // Move by center over y-axis\n      cy: function cy(y) {\n        return y == null ? this.attr('cy') : this.attr('cy', y);\n      },\n      // Set width of element\n      width: function width(_width3) {\n        return _width3 == null ? this.rx() * 2 : this.rx(new SVG.Number(_width3).divide(2));\n      },\n      // Set height of element\n      height: function height(_height3) {\n        return _height3 == null ? this.ry() * 2 : this.ry(new SVG.Number(_height3).divide(2));\n      },\n      // Custom size function\n      size: function size(width, height) {\n        var p = proportionalSize(this, width, height);\n        return this.rx(new SVG.Number(p.width).divide(2)).ry(new SVG.Number(p.height).divide(2));\n      }\n    });\n    SVG.Line = SVG.invent({\n      // Initialize node\n      create: 'line',\n      // Inherit from\n      inherit: SVG.Shape,\n      // Add class methods\n      extend: {\n        // Get array\n        array: function array() {\n          return new SVG.PointArray([[this.attr('x1'), this.attr('y1')], [this.attr('x2'), this.attr('y2')]]);\n        },\n        // Overwrite native plot() method\n        plot: function plot(x1, y1, x2, y2) {\n          if (x1 == null) {\n            return this.array();\n          } else if (typeof y1 !== 'undefined') {\n            x1 = {\n              x1: x1,\n              y1: y1,\n              x2: x2,\n              y2: y2\n            };\n          } else {\n            x1 = new SVG.PointArray(x1).toLine();\n          }\n\n          return this.attr(x1);\n        },\n        // Move by left top corner\n        move: function move(x, y) {\n          return this.attr(this.array().move(x, y).toLine());\n        },\n        // Set element size to given width and height\n        size: function size(width, height) {\n          var p = proportionalSize(this, width, height);\n          return this.attr(this.array().size(p.width, p.height).toLine());\n        }\n      },\n      // Add parent method\n      construct: {\n        // Create a line element\n        line: function line(x1, y1, x2, y2) {\n          // make sure plot is called as a setter\n          // x1 is not necessarily a number, it can also be an array, a string and a SVG.PointArray\n          return SVG.Line.prototype.plot.apply(this.put(new SVG.Line()), x1 != null ? [x1, y1, x2, y2] : [0, 0, 0, 0]);\n        }\n      }\n    });\n    SVG.Polyline = SVG.invent({\n      // Initialize node\n      create: 'polyline',\n      // Inherit from\n      inherit: SVG.Shape,\n      // Add parent method\n      construct: {\n        // Create a wrapped polyline element\n        polyline: function polyline(p) {\n          // make sure plot is called as a setter\n          return this.put(new SVG.Polyline()).plot(p || new SVG.PointArray());\n        }\n      }\n    });\n    SVG.Polygon = SVG.invent({\n      // Initialize node\n      create: 'polygon',\n      // Inherit from\n      inherit: SVG.Shape,\n      // Add parent method\n      construct: {\n        // Create a wrapped polygon element\n        polygon: function polygon(p) {\n          // make sure plot is called as a setter\n          return this.put(new SVG.Polygon()).plot(p || new SVG.PointArray());\n        }\n      }\n    }); // Add polygon-specific functions\n\n    SVG.extend(SVG.Polyline, SVG.Polygon, {\n      // Get array\n      array: function array() {\n        return this._array || (this._array = new SVG.PointArray(this.attr('points')));\n      },\n      // Plot new path\n      plot: function plot(p) {\n        return p == null ? this.array() : this.clear().attr('points', typeof p === 'string' ? p : this._array = new SVG.PointArray(p));\n      },\n      // Clear array cache\n      clear: function clear() {\n        delete this._array;\n        return this;\n      },\n      // Move by left top corner\n      move: function move(x, y) {\n        return this.attr('points', this.array().move(x, y));\n      },\n      // Set element size to given width and height\n      size: function size(width, height) {\n        var p = proportionalSize(this, width, height);\n        return this.attr('points', this.array().size(p.width, p.height));\n      }\n    }); // unify all point to point elements\n\n    SVG.extend(SVG.Line, SVG.Polyline, SVG.Polygon, {\n      // Define morphable array\n      morphArray: SVG.PointArray,\n      // Move by left top corner over x-axis\n      x: function x(_x5) {\n        return _x5 == null ? this.bbox().x : this.move(_x5, this.bbox().y);\n      },\n      // Move by left top corner over y-axis\n      y: function y(_y5) {\n        return _y5 == null ? this.bbox().y : this.move(this.bbox().x, _y5);\n      },\n      // Set width of element\n      width: function width(_width4) {\n        var b = this.bbox();\n        return _width4 == null ? b.width : this.size(_width4, b.height);\n      },\n      // Set height of element\n      height: function height(_height4) {\n        var b = this.bbox();\n        return _height4 == null ? b.height : this.size(b.width, _height4);\n      }\n    });\n    SVG.Path = SVG.invent({\n      // Initialize node\n      create: 'path',\n      // Inherit from\n      inherit: SVG.Shape,\n      // Add class methods\n      extend: {\n        // Define morphable array\n        morphArray: SVG.PathArray,\n        // Get array\n        array: function array() {\n          return this._array || (this._array = new SVG.PathArray(this.attr('d')));\n        },\n        // Plot new path\n        plot: function plot(d) {\n          return d == null ? this.array() : this.clear().attr('d', typeof d === 'string' ? d : this._array = new SVG.PathArray(d));\n        },\n        // Clear array cache\n        clear: function clear() {\n          delete this._array;\n          return this;\n        },\n        // Move by left top corner\n        move: function move(x, y) {\n          return this.attr('d', this.array().move(x, y));\n        },\n        // Move by left top corner over x-axis\n        x: function x(_x6) {\n          return _x6 == null ? this.bbox().x : this.move(_x6, this.bbox().y);\n        },\n        // Move by left top corner over y-axis\n        y: function y(_y6) {\n          return _y6 == null ? this.bbox().y : this.move(this.bbox().x, _y6);\n        },\n        // Set element size to given width and height\n        size: function size(width, height) {\n          var p = proportionalSize(this, width, height);\n          return this.attr('d', this.array().size(p.width, p.height));\n        },\n        // Set width of element\n        width: function width(_width5) {\n          return _width5 == null ? this.bbox().width : this.size(_width5, this.bbox().height);\n        },\n        // Set height of element\n        height: function height(_height5) {\n          return _height5 == null ? this.bbox().height : this.size(this.bbox().width, _height5);\n        }\n      },\n      // Add parent method\n      construct: {\n        // Create a wrapped path element\n        path: function path(d) {\n          // make sure plot is called as a setter\n          return this.put(new SVG.Path()).plot(d || new SVG.PathArray());\n        }\n      }\n    });\n    SVG.Image = SVG.invent({\n      // Initialize node\n      create: 'image',\n      // Inherit from\n      inherit: SVG.Shape,\n      // Add class methods\n      extend: {\n        // (re)load image\n        load: function load(url) {\n          if (!url) return this;\n          var self = this,\n              img = new window.Image(); // preload image\n\n          SVG.on(img, 'load', function () {\n            SVG.off(img);\n            var p = self.parent(SVG.Pattern);\n            if (p === null) return; // ensure image size\n\n            if (self.width() == 0 && self.height() == 0) {\n              self.size(img.width, img.height);\n            } // ensure pattern size if not set\n\n\n            if (p && p.width() == 0 && p.height() == 0) {\n              p.size(self.width(), self.height());\n            } // callback\n\n\n            if (typeof self._loaded === 'function') {\n              self._loaded.call(self, {\n                width: img.width,\n                height: img.height,\n                ratio: img.width / img.height,\n                url: url\n              });\n            }\n          });\n          SVG.on(img, 'error', function (e) {\n            SVG.off(img);\n\n            if (typeof self._error === 'function') {\n              self._error.call(self, e);\n            }\n          });\n          return this.attr('href', img.src = this.src = url, SVG.xlink);\n        },\n        // Add loaded callback\n        loaded: function loaded(_loaded) {\n          this._loaded = _loaded;\n          return this;\n        },\n        error: function error(_error) {\n          this._error = _error;\n          return this;\n        }\n      },\n      // Add parent method\n      construct: {\n        // create image element, load image and set its size\n        image: function image(source, width, height) {\n          return this.put(new SVG.Image()).load(source).size(width || 0, height || width || 0);\n        }\n      }\n    });\n    SVG.Text = SVG.invent({\n      // Initialize node\n      create: function create() {\n        this.constructor.call(this, SVG.create('text'));\n        this.dom.leading = new SVG.Number(1.3); // store leading value for rebuilding\n\n        this._rebuild = true; // enable automatic updating of dy values\n\n        this._build = false; // disable build mode for adding multiple lines\n        // set default font\n\n        this.attr('font-family', SVG.defaults.attrs['font-family']);\n      },\n      // Inherit from\n      inherit: SVG.Shape,\n      // Add class methods\n      extend: {\n        // Move over x-axis\n        x: function x(_x7) {\n          // act as getter\n          if (_x7 == null) {\n            return this.attr('x');\n          }\n\n          return this.attr('x', _x7);\n        },\n        // Move over y-axis\n        y: function y(_y7) {\n          var oy = this.attr('y'),\n              o = typeof oy === 'number' ? oy - this.bbox().y : 0; // act as getter\n\n          if (_y7 == null) {\n            return typeof oy === 'number' ? oy - o : oy;\n          }\n\n          return this.attr('y', typeof _y7.valueOf() === 'number' ? _y7 + o : _y7);\n        },\n        // Move center over x-axis\n        cx: function cx(x) {\n          return x == null ? this.bbox().cx : this.x(x - this.bbox().width / 2);\n        },\n        // Move center over y-axis\n        cy: function cy(y) {\n          return y == null ? this.bbox().cy : this.y(y - this.bbox().height / 2);\n        },\n        // Set the text content\n        text: function text(_text) {\n          // act as getter\n          if (typeof _text === 'undefined') {\n            var _text = '';\n            var children = this.node.childNodes;\n\n            for (var i = 0, len = children.length; i < len; ++i) {\n              // add newline if its not the first child and newLined is set to true\n              if (i != 0 && children[i].nodeType != 3 && SVG.adopt(children[i]).dom.newLined == true) {\n                _text += '\\n';\n              } // add content of this node\n\n\n              _text += children[i].textContent;\n            }\n\n            return _text;\n          } // remove existing content\n\n\n          this.clear().build(true);\n\n          if (typeof _text === 'function') {\n            // call block\n            _text.call(this, this);\n          } else {\n            // store text and make sure text is not blank\n            _text = _text.split('\\n'); // build new lines\n\n            for (var i = 0, il = _text.length; i < il; i++) {\n              this.tspan(_text[i]).newLine();\n            }\n          } // disable build mode and rebuild lines\n\n\n          return this.build(false).rebuild();\n        },\n        // Set font size\n        size: function size(_size) {\n          return this.attr('font-size', _size).rebuild();\n        },\n        // Set / get leading\n        leading: function leading(value) {\n          // act as getter\n          if (value == null) {\n            return this.dom.leading;\n          } // act as setter\n\n\n          this.dom.leading = new SVG.Number(value);\n          return this.rebuild();\n        },\n        // Get all the first level lines\n        lines: function lines() {\n          var node = (this.textPath && this.textPath() || this).node; // filter tspans and map them to SVG.js instances\n\n          var lines = SVG.utils.map(SVG.utils.filterSVGElements(node.childNodes), function (el) {\n            return SVG.adopt(el);\n          }); // return an instance of SVG.set\n\n          return new SVG.Set(lines);\n        },\n        // Rebuild appearance type\n        rebuild: function rebuild(_rebuild) {\n          // store new rebuild flag if given\n          if (typeof _rebuild === 'boolean') {\n            this._rebuild = _rebuild;\n          } // define position of all lines\n\n\n          if (this._rebuild) {\n            var self = this,\n                blankLineOffset = 0,\n                dy = this.dom.leading * new SVG.Number(this.attr('font-size'));\n            this.lines().each(function () {\n              if (this.dom.newLined) {\n                if (!self.textPath()) {\n                  this.attr('x', self.attr('x'));\n                }\n\n                if (this.text() == '\\n') {\n                  blankLineOffset += dy;\n                } else {\n                  this.attr('dy', dy + blankLineOffset);\n                  blankLineOffset = 0;\n                }\n              }\n            });\n            this.fire('rebuild');\n          }\n\n          return this;\n        },\n        // Enable / disable build mode\n        build: function build(_build) {\n          this._build = !!_build;\n          return this;\n        },\n        // overwrite method from parent to set data properly\n        setData: function setData(o) {\n          this.dom = o;\n          this.dom.leading = new SVG.Number(o.leading || 1.3);\n          return this;\n        }\n      },\n      // Add parent method\n      construct: {\n        // Create text element\n        text: function text(_text2) {\n          return this.put(new SVG.Text()).text(_text2);\n        },\n        // Create plain text element\n        plain: function plain(text) {\n          return this.put(new SVG.Text()).plain(text);\n        }\n      }\n    });\n    SVG.Tspan = SVG.invent({\n      // Initialize node\n      create: 'tspan',\n      // Inherit from\n      inherit: SVG.Shape,\n      // Add class methods\n      extend: {\n        // Set text content\n        text: function text(_text3) {\n          if (_text3 == null) return this.node.textContent + (this.dom.newLined ? '\\n' : '');\n          typeof _text3 === 'function' ? _text3.call(this, this) : this.plain(_text3);\n          return this;\n        },\n        // Shortcut dx\n        dx: function dx(_dx) {\n          return this.attr('dx', _dx);\n        },\n        // Shortcut dy\n        dy: function dy(_dy) {\n          return this.attr('dy', _dy);\n        },\n        // Create new line\n        newLine: function newLine() {\n          // fetch text parent\n          var t = this.parent(SVG.Text); // mark new line\n\n          this.dom.newLined = true; // apply new hy¡n\n\n          return this.dy(t.dom.leading * t.attr('font-size')).attr('x', t.x());\n        }\n      }\n    });\n    SVG.extend(SVG.Text, SVG.Tspan, {\n      // Create plain text node\n      plain: function plain(text) {\n        // clear if build mode is disabled\n        if (this._build === false) {\n          this.clear();\n        } // create text node\n\n\n        this.node.appendChild(document.createTextNode(text));\n        return this;\n      },\n      // Create a tspan\n      tspan: function tspan(text) {\n        var node = (this.textPath && this.textPath() || this).node,\n            tspan = new SVG.Tspan(); // clear if build mode is disabled\n\n        if (this._build === false) {\n          this.clear();\n        } // add new tspan\n\n\n        node.appendChild(tspan.node);\n        return tspan.text(text);\n      },\n      // Clear all lines\n      clear: function clear() {\n        var node = (this.textPath && this.textPath() || this).node; // remove existing child nodes\n\n        while (node.hasChildNodes()) {\n          node.removeChild(node.lastChild);\n        }\n\n        return this;\n      },\n      // Get length of text element\n      length: function length() {\n        return this.node.getComputedTextLength();\n      }\n    });\n    SVG.TextPath = SVG.invent({\n      // Initialize node\n      create: 'textPath',\n      // Inherit from\n      inherit: SVG.Parent,\n      // Define parent class\n      parent: SVG.Text,\n      // Add parent method\n      construct: {\n        morphArray: SVG.PathArray,\n        // Create path for text to run on\n        path: function path(d) {\n          // create textPath element\n          var path = new SVG.TextPath(),\n              track = this.doc().defs().path(d); // move lines to textpath\n\n          while (this.node.hasChildNodes()) {\n            path.node.appendChild(this.node.firstChild);\n          } // add textPath element as child node\n\n\n          this.node.appendChild(path.node); // link textPath to path and add content\n\n          path.attr('href', '#' + track, SVG.xlink);\n          return this;\n        },\n        // return the array of the path track element\n        array: function array() {\n          var track = this.track();\n          return track ? track.array() : null;\n        },\n        // Plot path if any\n        plot: function plot(d) {\n          var track = this.track(),\n              pathArray = null;\n\n          if (track) {\n            pathArray = track.plot(d);\n          }\n\n          return d == null ? pathArray : this;\n        },\n        // Get the path track element\n        track: function track() {\n          var path = this.textPath();\n\n          if (path) {\n            return path.reference('href');\n          }\n        },\n        // Get the textPath child\n        textPath: function textPath() {\n          if (this.node.firstChild && this.node.firstChild.nodeName == 'textPath') {\n            return SVG.adopt(this.node.firstChild);\n          }\n        }\n      }\n    });\n    SVG.Nested = SVG.invent({\n      // Initialize node\n      create: function create() {\n        this.constructor.call(this, SVG.create('svg'));\n        this.style('overflow', 'visible');\n      },\n      // Inherit from\n      inherit: SVG.Container,\n      // Add parent method\n      construct: {\n        // Create nested svg document\n        nested: function nested() {\n          return this.put(new SVG.Nested());\n        }\n      }\n    });\n    SVG.A = SVG.invent({\n      // Initialize node\n      create: 'a',\n      // Inherit from\n      inherit: SVG.Container,\n      // Add class methods\n      extend: {\n        // Link url\n        to: function to(url) {\n          return this.attr('href', url, SVG.xlink);\n        },\n        // Link show attribute\n        show: function show(target) {\n          return this.attr('show', target, SVG.xlink);\n        },\n        // Link target attribute\n        target: function target(_target2) {\n          return this.attr('target', _target2);\n        }\n      },\n      // Add parent method\n      construct: {\n        // Create a hyperlink element\n        link: function link(url) {\n          return this.put(new SVG.A()).to(url);\n        }\n      }\n    });\n    SVG.extend(SVG.Element, {\n      // Create a hyperlink element\n      linkTo: function linkTo(url) {\n        var link = new SVG.A();\n\n        if (typeof url === 'function') {\n          url.call(link, link);\n        } else {\n          link.to(url);\n        }\n\n        return this.parent().put(link).put(this);\n      }\n    });\n    SVG.Marker = SVG.invent({\n      // Initialize node\n      create: 'marker',\n      // Inherit from\n      inherit: SVG.Container,\n      // Add class methods\n      extend: {\n        // Set width of element\n        width: function width(_width6) {\n          return this.attr('markerWidth', _width6);\n        },\n        // Set height of element\n        height: function height(_height6) {\n          return this.attr('markerHeight', _height6);\n        },\n        // Set marker refX and refY\n        ref: function ref(x, y) {\n          return this.attr('refX', x).attr('refY', y);\n        },\n        // Update marker\n        update: function update(block) {\n          // remove all content\n          this.clear(); // invoke passed block\n\n          if (typeof block === 'function') {\n            block.call(this, this);\n          }\n\n          return this;\n        },\n        // Return the fill id\n        toString: function toString() {\n          return 'url(#' + this.id() + ')';\n        }\n      },\n      // Add parent method\n      construct: {\n        marker: function marker(width, height, block) {\n          // Create marker element in defs\n          return this.defs().marker(width, height, block);\n        }\n      }\n    });\n    SVG.extend(SVG.Defs, {\n      // Create marker\n      marker: function marker(width, height, block) {\n        // Set default viewbox to match the width and height, set ref to cx and cy and set orient to auto\n        return this.put(new SVG.Marker()).size(width, height).ref(width / 2, height / 2).viewbox(0, 0, width, height).attr('orient', 'auto').update(block);\n      }\n    });\n    SVG.extend(SVG.Line, SVG.Polyline, SVG.Polygon, SVG.Path, {\n      // Create and attach markers\n      marker: function marker(_marker, width, height, block) {\n        var attr = ['marker']; // Build attribute name\n\n        if (_marker != 'all') attr.push(_marker);\n        attr = attr.join('-'); // Set marker attribute\n\n        _marker = arguments[1] instanceof SVG.Marker ? arguments[1] : this.doc().marker(width, height, block);\n        return this.attr(attr, _marker);\n      }\n    }); // Define list of available attributes for stroke and fill\n\n    var sugar = {\n      stroke: ['color', 'width', 'opacity', 'linecap', 'linejoin', 'miterlimit', 'dasharray', 'dashoffset'],\n      fill: ['color', 'opacity', 'rule'],\n      prefix: function prefix(t, a) {\n        return a == 'color' ? t : t + '-' + a;\n      } // Add sugar for fill and stroke\n\n    };\n    ['fill', 'stroke'].forEach(function (m) {\n      var i,\n          extension = {};\n\n      extension[m] = function (o) {\n        if (typeof o === 'undefined') {\n          return this;\n        }\n\n        if (typeof o === 'string' || SVG.Color.isRgb(o) || o && typeof o.fill === 'function') {\n          this.attr(m, o);\n        } else // set all attributes from sugar.fill and sugar.stroke list\n          {\n            for (i = sugar[m].length - 1; i >= 0; i--) {\n              if (o[sugar[m][i]] != null) {\n                this.attr(sugar.prefix(m, sugar[m][i]), o[sugar[m][i]]);\n              }\n            }\n          }\n\n        return this;\n      };\n\n      SVG.extend(SVG.Element, SVG.FX, extension);\n    });\n    SVG.extend(SVG.Element, SVG.FX, {\n      // Map rotation to transform\n      rotate: function rotate(d, cx, cy) {\n        return this.transform({\n          rotation: d,\n          cx: cx,\n          cy: cy\n        });\n      },\n      // Map skew to transform\n      skew: function skew(x, y, cx, cy) {\n        return arguments.length == 1 || arguments.length == 3 ? this.transform({\n          skew: x,\n          cx: y,\n          cy: cx\n        }) : this.transform({\n          skewX: x,\n          skewY: y,\n          cx: cx,\n          cy: cy\n        });\n      },\n      // Map scale to transform\n      scale: function scale(x, y, cx, cy) {\n        return arguments.length == 1 || arguments.length == 3 ? this.transform({\n          scale: x,\n          cx: y,\n          cy: cx\n        }) : this.transform({\n          scaleX: x,\n          scaleY: y,\n          cx: cx,\n          cy: cy\n        });\n      },\n      // Map translate to transform\n      translate: function translate(x, y) {\n        return this.transform({\n          x: x,\n          y: y\n        });\n      },\n      // Map flip to transform\n      flip: function flip(a, o) {\n        o = typeof a === 'number' ? a : o;\n        return this.transform({\n          flip: a || 'both',\n          offset: o\n        });\n      },\n      // Map matrix to transform\n      matrix: function matrix(m) {\n        return this.attr('transform', new SVG.Matrix(arguments.length == 6 ? [].slice.call(arguments) : m));\n      },\n      // Opacity\n      opacity: function opacity(value) {\n        return this.attr('opacity', value);\n      },\n      // Relative move over x axis\n      dx: function dx(x) {\n        return this.x(new SVG.Number(x).plus(this instanceof SVG.FX ? 0 : this.x()), true);\n      },\n      // Relative move over y axis\n      dy: function dy(y) {\n        return this.y(new SVG.Number(y).plus(this instanceof SVG.FX ? 0 : this.y()), true);\n      },\n      // Relative move over x and y axes\n      dmove: function dmove(x, y) {\n        return this.dx(x).dy(y);\n      }\n    });\n    SVG.extend(SVG.Rect, SVG.Ellipse, SVG.Circle, SVG.Gradient, SVG.FX, {\n      // Add x and y radius\n      radius: function radius(x, y) {\n        var type = (this._target || this).type;\n        return type == 'radial' || type == 'circle' ? this.attr('r', new SVG.Number(x)) : this.rx(x).ry(y == null ? x : y);\n      }\n    });\n    SVG.extend(SVG.Path, {\n      // Get path length\n      length: function length() {\n        return this.node.getTotalLength();\n      },\n      // Get point at length\n      pointAt: function pointAt(length) {\n        return this.node.getPointAtLength(length);\n      }\n    });\n    SVG.extend(SVG.Parent, SVG.Text, SVG.Tspan, SVG.FX, {\n      // Set font\n      font: function font(a, v) {\n        if (_typeof(a) === 'object') {\n          for (v in a) {\n            this.font(v, a[v]);\n          }\n        }\n\n        return a == 'leading' ? this.leading(v) : a == 'anchor' ? this.attr('text-anchor', v) : a == 'size' || a == 'family' || a == 'weight' || a == 'stretch' || a == 'variant' || a == 'style' ? this.attr('font-' + a, v) : this.attr(a, v);\n      }\n    });\n    SVG.Set = SVG.invent({\n      // Initialize\n      create: function create(members) {\n        // Set initial state\n        Array.isArray(members) ? this.members = members : this.clear();\n      },\n      // Add class methods\n      extend: {\n        // Add element to set\n        add: function add() {\n          var i,\n              il,\n              elements = [].slice.call(arguments);\n\n          for (i = 0, il = elements.length; i < il; i++) {\n            this.members.push(elements[i]);\n          }\n\n          return this;\n        },\n        // Remove element from set\n        remove: function remove(element) {\n          var i = this.index(element); // remove given child\n\n          if (i > -1) {\n            this.members.splice(i, 1);\n          }\n\n          return this;\n        },\n        // Iterate over all members\n        each: function each(block) {\n          for (var i = 0, il = this.members.length; i < il; i++) {\n            block.apply(this.members[i], [i, this.members]);\n          }\n\n          return this;\n        },\n        // Restore to defaults\n        clear: function clear() {\n          // initialize store\n          this.members = [];\n          return this;\n        },\n        // Get the length of a set\n        length: function length() {\n          return this.members.length;\n        },\n        // Checks if a given element is present in set\n        has: function has(element) {\n          return this.index(element) >= 0;\n        },\n        // retuns index of given element in set\n        index: function index(element) {\n          return this.members.indexOf(element);\n        },\n        // Get member at given index\n        get: function get(i) {\n          return this.members[i];\n        },\n        // Get first member\n        first: function first() {\n          return this.get(0);\n        },\n        // Get last member\n        last: function last() {\n          return this.get(this.members.length - 1);\n        },\n        // Default value\n        valueOf: function valueOf() {\n          return this.members;\n        },\n        // Get the bounding box of all members included or empty box if set has no items\n        bbox: function bbox() {\n          // return an empty box of there are no members\n          if (this.members.length == 0) {\n            return new SVG.RBox();\n          } // get the first rbox and update the target bbox\n\n\n          var rbox = this.members[0].rbox(this.members[0].doc());\n          this.each(function () {\n            // user rbox for correct position and visual representation\n            rbox = rbox.merge(this.rbox(this.doc()));\n          });\n          return rbox;\n        }\n      },\n      // Add parent method\n      construct: {\n        // Create a new set\n        set: function set(members) {\n          return new SVG.Set(members);\n        }\n      }\n    });\n    SVG.FX.Set = SVG.invent({\n      // Initialize node\n      create: function create(set) {\n        // store reference to set\n        this.set = set;\n      }\n    }); // Alias methods\n\n    SVG.Set.inherit = function () {\n      var m,\n          methods = []; // gather shape methods\n\n      for (var m in SVG.Shape.prototype) {\n        if (typeof SVG.Shape.prototype[m] === 'function' && typeof SVG.Set.prototype[m] !== 'function') {\n          methods.push(m);\n        }\n      } // apply shape aliasses\n\n\n      methods.forEach(function (method) {\n        SVG.Set.prototype[method] = function () {\n          for (var i = 0, il = this.members.length; i < il; i++) {\n            if (this.members[i] && typeof this.members[i][method] === 'function') {\n              this.members[i][method].apply(this.members[i], arguments);\n            }\n          }\n\n          return method == 'animate' ? this.fx || (this.fx = new SVG.FX.Set(this)) : this;\n        };\n      }); // clear methods for the next round\n\n      methods = []; // gather fx methods\n\n      for (var m in SVG.FX.prototype) {\n        if (typeof SVG.FX.prototype[m] === 'function' && typeof SVG.FX.Set.prototype[m] !== 'function') {\n          methods.push(m);\n        }\n      } // apply fx aliasses\n\n\n      methods.forEach(function (method) {\n        SVG.FX.Set.prototype[method] = function () {\n          for (var i = 0, il = this.set.members.length; i < il; i++) {\n            this.set.members[i].fx[method].apply(this.set.members[i].fx, arguments);\n          }\n\n          return this;\n        };\n      });\n    };\n\n    SVG.extend(SVG.Element, {\n      // Store data values on svg nodes\n      data: function data(a, v, r) {\n        if (_typeof(a) === 'object') {\n          for (v in a) {\n            this.data(v, a[v]);\n          }\n        } else if (arguments.length < 2) {\n          try {\n            return JSON.parse(this.attr('data-' + a));\n          } catch (e) {\n            return this.attr('data-' + a);\n          }\n        } else {\n          this.attr('data-' + a, v === null ? null : r === true || typeof v === 'string' || typeof v === 'number' ? v : JSON.stringify(v));\n        }\n\n        return this;\n      }\n    });\n    SVG.extend(SVG.Element, {\n      // Remember arbitrary data\n      remember: function remember(k, v) {\n        // remember every item in an object individually\n        if (_typeof(arguments[0]) === 'object') {\n          for (var v in k) {\n            this.remember(v, k[v]);\n          }\n        } // retrieve memory\n        else if (arguments.length == 1) {\n            return this.memory()[k];\n          } // store memory\n          else {\n              this.memory()[k] = v;\n            }\n\n        return this;\n      },\n      // Erase a given memory\n      forget: function forget() {\n        if (arguments.length == 0) {\n          this._memory = {};\n        } else {\n          for (var i = arguments.length - 1; i >= 0; i--) {\n            delete this.memory()[arguments[i]];\n          }\n        }\n\n        return this;\n      },\n      // Initialize or return local memory object\n      memory: function memory() {\n        return this._memory || (this._memory = {});\n      }\n    }); // Method for getting an element by id\n\n    SVG.get = function (id) {\n      var node = document.getElementById(idFromReference(id) || id);\n      return SVG.adopt(node);\n    }; // Select elements by query string\n\n\n    SVG.select = function (query, parent) {\n      return new SVG.Set(SVG.utils.map((parent || document).querySelectorAll(query), function (node) {\n        return SVG.adopt(node);\n      }));\n    };\n\n    SVG.extend(SVG.Parent, {\n      // Scoped select method\n      select: function select(query) {\n        return SVG.select(query, this.node);\n      }\n    });\n\n    function pathRegReplace(a, b, c, d) {\n      return c + d.replace(SVG.regex.dots, ' .');\n    } // creates deep clone of array\n\n\n    function array_clone(arr) {\n      var clone = arr.slice(0);\n\n      for (var i = clone.length; i--;) {\n        if (Array.isArray(clone[i])) {\n          clone[i] = array_clone(clone[i]);\n        }\n      }\n\n      return clone;\n    } // tests if a given element is instance of an object\n\n\n    function _is(el, obj) {\n      return el instanceof obj;\n    } // tests if a given selector matches an element\n\n\n    function _matches(el, selector) {\n      return (el.matches || el.matchesSelector || el.msMatchesSelector || el.mozMatchesSelector || el.webkitMatchesSelector || el.oMatchesSelector).call(el, selector);\n    } // Convert dash-separated-string to camelCase\n\n\n    function camelCase(s) {\n      return s.toLowerCase().replace(/-(.)/g, function (m, g) {\n        return g.toUpperCase();\n      });\n    } // Capitalize first letter of a string\n\n\n    function capitalize(s) {\n      return s.charAt(0).toUpperCase() + s.slice(1);\n    } // Ensure to six-based hex\n\n\n    function fullHex(hex) {\n      return hex.length == 4 ? ['#', hex.substring(1, 2), hex.substring(1, 2), hex.substring(2, 3), hex.substring(2, 3), hex.substring(3, 4), hex.substring(3, 4)].join('') : hex;\n    } // Component to hex value\n\n\n    function compToHex(comp) {\n      var hex = comp.toString(16);\n      return hex.length == 1 ? '0' + hex : hex;\n    } // Calculate proportional width and height values when necessary\n\n\n    function proportionalSize(element, width, height) {\n      if (width == null || height == null) {\n        var box = element.bbox();\n\n        if (width == null) {\n          width = box.width / box.height * height;\n        } else if (height == null) {\n          height = box.height / box.width * width;\n        }\n      }\n\n      return {\n        width: width,\n        height: height\n      };\n    } // Delta transform point\n\n\n    function deltaTransformPoint(matrix, x, y) {\n      return {\n        x: x * matrix.a + y * matrix.c + 0,\n        y: x * matrix.b + y * matrix.d + 0\n      };\n    } // Map matrix array to object\n\n\n    function arrayToMatrix(a) {\n      return {\n        a: a[0],\n        b: a[1],\n        c: a[2],\n        d: a[3],\n        e: a[4],\n        f: a[5]\n      };\n    } // Parse matrix if required\n\n\n    function parseMatrix(matrix) {\n      if (!(matrix instanceof SVG.Matrix)) {\n        matrix = new SVG.Matrix(matrix);\n      }\n\n      return matrix;\n    } // Add centre point to transform object\n\n\n    function ensureCentre(o, target) {\n      o.cx = o.cx == null ? target.bbox().cx : o.cx;\n      o.cy = o.cy == null ? target.bbox().cy : o.cy;\n    } // PathArray Helpers\n\n\n    function arrayToString(a) {\n      for (var i = 0, il = a.length, s = ''; i < il; i++) {\n        s += a[i][0];\n\n        if (a[i][1] != null) {\n          s += a[i][1];\n\n          if (a[i][2] != null) {\n            s += ' ';\n            s += a[i][2];\n\n            if (a[i][3] != null) {\n              s += ' ';\n              s += a[i][3];\n              s += ' ';\n              s += a[i][4];\n\n              if (a[i][5] != null) {\n                s += ' ';\n                s += a[i][5];\n                s += ' ';\n                s += a[i][6];\n\n                if (a[i][7] != null) {\n                  s += ' ';\n                  s += a[i][7];\n                }\n              }\n            }\n          }\n        }\n      }\n\n      return s + ' ';\n    } // Deep new id assignment\n\n\n    function assignNewId(node) {\n      // do the same for SVG child nodes as well\n      for (var i = node.childNodes.length - 1; i >= 0; i--) {\n        if (node.childNodes[i] instanceof window.SVGElement) {\n          assignNewId(node.childNodes[i]);\n        }\n      }\n\n      return SVG.adopt(node).id(SVG.eid(node.nodeName));\n    } // Add more bounding box properties\n\n\n    function fullBox(b) {\n      if (b.x == null) {\n        b.x = 0;\n        b.y = 0;\n        b.width = 0;\n        b.height = 0;\n      }\n\n      b.w = b.width;\n      b.h = b.height;\n      b.x2 = b.x + b.width;\n      b.y2 = b.y + b.height;\n      b.cx = b.x + b.width / 2;\n      b.cy = b.y + b.height / 2;\n      return b;\n    } // Get id from reference string\n\n\n    function idFromReference(url) {\n      var m = (url || '').toString().match(SVG.regex.reference);\n      if (m) return m[1];\n    } // If values like 1e-88 are passed, this is not a valid 32 bit float,\n    // but in those cases, we are so close to 0 that 0 works well!\n\n\n    function float32String(v) {\n      return Math.abs(v) > 1e-37 ? v : 0;\n    } // Create matrix array for looping\n\n\n    var abcdef = 'abcdef'.split(''); // Add CustomEvent to IE9 and IE10\n\n    if (typeof window.CustomEvent !== 'function') {\n      // Code from: https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent\n      var CustomEventPoly = function CustomEventPoly(event, options) {\n        options = options || {\n          bubbles: false,\n          cancelable: false,\n          detail: undefined\n        };\n        var e = document.createEvent('CustomEvent');\n        e.initCustomEvent(event, options.bubbles, options.cancelable, options.detail);\n        return e;\n      };\n\n      CustomEventPoly.prototype = window.Event.prototype;\n      SVG.CustomEvent = CustomEventPoly;\n    } else {\n      SVG.CustomEvent = window.CustomEvent;\n    } // requestAnimationFrame / cancelAnimationFrame Polyfill with fallback based on Paul Irish\n\n\n    (function (w) {\n      var lastTime = 0;\n      var vendors = ['moz', 'webkit'];\n\n      for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {\n        w.requestAnimationFrame = w[vendors[x] + 'RequestAnimationFrame'];\n        w.cancelAnimationFrame = w[vendors[x] + 'CancelAnimationFrame'] || w[vendors[x] + 'CancelRequestAnimationFrame'];\n      }\n\n      w.requestAnimationFrame = w.requestAnimationFrame || function (callback) {\n        var currTime = new Date().getTime();\n        var timeToCall = Math.max(0, 16 - (currTime - lastTime));\n        var id = w.setTimeout(function () {\n          callback(currTime + timeToCall);\n        }, timeToCall);\n        lastTime = currTime + timeToCall;\n        return id;\n      };\n\n      w.cancelAnimationFrame = w.cancelAnimationFrame || w.clearTimeout;\n    })(window);\n\n    return SVG;\n  });\n\n  /*! svg.filter.js - v2.0.2 - 2016-02-24\n  * https://github.com/wout/svg.filter.js\n  * Copyright (c) 2016 Wout Fierens; Licensed MIT */\n  (function() {\n\n    // Main filter class\n    SVG.Filter = SVG.invent({\n      create: 'filter',\n      inherit: SVG.Parent,\n      extend: {\n        // Static strings\n        source:           'SourceGraphic',\n        sourceAlpha:      'SourceAlpha',\n        background:       'BackgroundImage',\n        backgroundAlpha:  'BackgroundAlpha',\n        fill:             'FillPaint',\n        stroke:           'StrokePaint',\n\n        autoSetIn: true,\n        // Custom put method for leaner code\n        put: function(element, i) {\n          this.add(element, i);\n\n          if(!element.attr('in') && this.autoSetIn){\n            element.attr('in',this.source);\n          }\n          if(!element.attr('result')){\n            element.attr('result',element);\n          }\n\n          return element\n        },\n        // Blend effect\n        blend: function(in1, in2, mode) {\n          return this.put(new SVG.BlendEffect(in1, in2, mode))\n        },\n        // ColorMatrix effect\n        colorMatrix: function(type, values) {\n          return this.put(new SVG.ColorMatrixEffect(type, values))\n        },\n        // ConvolveMatrix effect\n        convolveMatrix: function(matrix) {\n          return this.put(new SVG.ConvolveMatrixEffect(matrix))\n        },\n        // ComponentTransfer effect\n        componentTransfer: function(components) {\n          return this.put(new SVG.ComponentTransferEffect(components))\n        },\n        // Composite effect\n        composite: function(in1, in2, operator) {\n          return this.put(new SVG.CompositeEffect(in1, in2, operator))\n        },\n        // Flood effect\n        flood: function(color, opacity) {\n          return this.put(new SVG.FloodEffect(color, opacity))\n        },\n        // Offset effect\n        offset: function(x, y) {\n          return this.put(new SVG.OffsetEffect(x,y))\n        },\n        // Image effect\n        image: function(src) {\n          return this.put(new SVG.ImageEffect(src))\n        },\n        // Merge effect\n        merge: function() {\n          //pass the array of arguments to the constructor because we dont know if the user gave us an array as the first arguemnt or wether they listed the effects in the arguments\n          var args = [undefined];\n          for(var i in arguments) args.push(arguments[i]);\n          return this.put(new (SVG.MergeEffect.bind.apply(SVG.MergeEffect,args)))\n        },\n        // Gaussian Blur effect\n        gaussianBlur: function(x,y) {\n          return this.put(new SVG.GaussianBlurEffect(x,y))\n        },\n        // Morphology effect\n        morphology: function(operator,radius){\n          return this.put(new SVG.MorphologyEffect(operator,radius))\n        },\n        // DiffuseLighting effect\n        diffuseLighting: function(surfaceScale,diffuseConstant,kernelUnitLength){\n          return this.put(new SVG.DiffuseLightingEffect(surfaceScale,diffuseConstant,kernelUnitLength))\n        },\n        // DisplacementMap effect\n        displacementMap: function(in1,in2,scale,xChannelSelector,yChannelSelector){\n          return this.put(new SVG.DisplacementMapEffect(in1,in2,scale,xChannelSelector,yChannelSelector))\n        },\n        // SpecularLighting effect\n        specularLighting: function(surfaceScale,diffuseConstant,specularExponent,kernelUnitLength){\n          return this.put(new SVG.SpecularLightingEffect(surfaceScale,diffuseConstant,specularExponent,kernelUnitLength))\n        },\n        // Tile effect\n        tile: function(){\n          return this.put(new SVG.TileEffect());\n        },\n        // Turbulence effect\n        turbulence: function(baseFrequency,numOctaves,seed,stitchTiles,type){\n          return this.put(new SVG.TurbulenceEffect(baseFrequency,numOctaves,seed,stitchTiles,type))\n        },\n        // Default string value\n        toString: function() {\n          return 'url(#' + this.attr('id') + ')'\n        }\n      }\n    });\n\n    //add .filter function\n    SVG.extend(SVG.Defs, {\n      // Define filter\n      filter: function(block) {\n        var filter = this.put(new SVG.Filter);\n\n        /* invoke passed block */\n        if (typeof block === 'function')\n          block.call(filter, filter);\n\n        return filter\n      }\n    });\n    SVG.extend(SVG.Container, {\n      // Define filter on defs\n      filter: function(block) {\n        return this.defs().filter(block)\n      }\n    });\n    SVG.extend(SVG.Element, SVG.G, SVG.Nested, {\n      // Create filter element in defs and store reference\n      filter: function(block) {\n        this.filterer = block instanceof SVG.Element ?\n          block : this.doc().filter(block);\n\n        if(this.doc() && this.filterer.doc() !== this.doc()){\n          this.doc().defs().add(this.filterer);\n        }\n\n        this.attr('filter', this.filterer);\n\n        return this.filterer\n      },\n      // Remove filter\n      unfilter: function(remove) {\n        /* also remove the filter node */\n        if (this.filterer && remove === true)\n          this.filterer.remove();\n\n        /* delete reference to filterer */\n        delete this.filterer;\n\n        /* remove filter attribute */\n        return this.attr('filter', null)\n      }\n    });\n\n    // Create SVG.Effect class\n    SVG.Effect = SVG.invent({\n      create: function(){\n        this.constructor.call(this);\n      },\n      inherit: SVG.Element,\n      extend: {\n        // Set in attribute\n        in: function(effect) {\n          return effect == null? this.parent() && this.parent().select('[result=\"'+this.attr('in')+'\"]').get(0) || this.attr('in') : this.attr('in', effect)\n        },\n        // Named result\n        result: function(result) {\n          return result == null? this.attr('result') : this.attr('result',result)\n        },\n        // Stringification\n        toString: function() {\n          return this.result()\n        }\n      }\n    });\n\n    // create class for parent effects like merge\n    // Inherit from SVG.Parent\n    SVG.ParentEffect = SVG.invent({\n      create: function(){\n        this.constructor.call(this);\n      },\n      inherit: SVG.Parent,\n      extend: {\n        // Set in attribute\n        in: function(effect) {\n          return effect == null? this.parent() && this.parent().select('[result=\"'+this.attr('in')+'\"]').get(0) || this.attr('in') : this.attr('in', effect)\n        },\n        // Named result\n        result: function(result) {\n          return result == null? this.attr('result') : this.attr('result',result)\n        },\n        // Stringification\n        toString: function() {\n          return this.result()\n        }\n      }\n    });\n\n    //chaining\n    var chainingEffects = {\n      // Blend effect\n      blend: function(in2, mode) {\n        return this.parent() && this.parent().blend(this, in2, mode) //pass this as the first input\n      },\n      // ColorMatrix effect\n      colorMatrix: function(type, values) {\n        return this.parent() && this.parent().colorMatrix(type, values).in(this)\n      },\n      // ConvolveMatrix effect\n      convolveMatrix: function(matrix) {\n        return this.parent() && this.parent().convolveMatrix(matrix).in(this)\n      },\n      // ComponentTransfer effect\n      componentTransfer: function(components) {\n        return this.parent() && this.parent().componentTransfer(components).in(this)\n      },\n      // Composite effect\n      composite: function(in2, operator) {\n        return this.parent() && this.parent().composite(this, in2, operator) //pass this as the first input\n      },\n      // Flood effect\n      flood: function(color, opacity) {\n        return this.parent() && this.parent().flood(color, opacity) //this effect dont have inputs\n      },\n      // Offset effect\n      offset: function(x, y) {\n        return this.parent() && this.parent().offset(x,y).in(this)\n      },\n      // Image effect\n      image: function(src) {\n        return this.parent() && this.parent().image(src) //this effect dont have inputs\n      },\n      // Merge effect\n      merge: function() {\n        return this.parent() && this.parent().merge.apply(this.parent(),[this].concat(arguments)) //pass this as the first argument\n      },\n      // Gaussian Blur effect\n      gaussianBlur: function(x,y) {\n        return this.parent() && this.parent().gaussianBlur(x,y).in(this)\n      },\n      // Morphology effect\n      morphology: function(operator,radius){\n        return this.parent() && this.parent().morphology(operator,radius).in(this)\n      },\n      // DiffuseLighting effect\n      diffuseLighting: function(surfaceScale,diffuseConstant,kernelUnitLength){\n        return this.parent() && this.parent().diffuseLighting(surfaceScale,diffuseConstant,kernelUnitLength).in(this)\n      },\n      // DisplacementMap effect\n      displacementMap: function(in2,scale,xChannelSelector,yChannelSelector){\n        return this.parent() && this.parent().displacementMap(this,in2,scale,xChannelSelector,yChannelSelector) //pass this as the first input\n      },\n      // SpecularLighting effect\n      specularLighting: function(surfaceScale,diffuseConstant,specularExponent,kernelUnitLength){\n        return this.parent() && this.parent().specularLighting(surfaceScale,diffuseConstant,specularExponent,kernelUnitLength).in(this)\n      },\n      // Tile effect\n      tile: function(){\n        return this.parent() && this.parent().tile().in(this)\n      },\n      // Turbulence effect\n      turbulence: function(baseFrequency,numOctaves,seed,stitchTiles,type){\n        return this.parent() && this.parent().turbulence(baseFrequency,numOctaves,seed,stitchTiles,type).in(this)\n      }\n    };\n    SVG.extend(SVG.Effect,chainingEffects);\n    SVG.extend(SVG.ParentEffect,chainingEffects);\n\n    //crea class for child effects, like MergeNode, FuncR and lights\n    SVG.ChildEffect = SVG.invent({\n      create: function(){\n        this.constructor.call(this);\n      },\n      inherit: SVG.Element,\n      extend: {\n      in: function(effect){\n        this.attr('in',effect);\n      }\n      //dont include any \"result\" functions because these types of nodes dont have them\n      }\n    });\n\n    // Create all different effects\n    var effects = {\n      blend: function(in1,in2,mode){\n        this.attr({\n          in: in1,\n          in2: in2,\n          mode: mode || 'normal'\n        });\n      },\n      colorMatrix: function(type,values){\n        if (type == 'matrix')\n          values = normaliseMatrix(values);\n\n        this.attr({\n          type:   type\n        , values: typeof values == 'undefined' ? null : values\n        });\n      },\n      convolveMatrix: function(matrix){\n        matrix = normaliseMatrix(matrix);\n\n        this.attr({\n          order:        Math.sqrt(matrix.split(' ').length)\n        , kernelMatrix: matrix\n        });\n      },\n      composite: function(in1, in2, operator){\n        this.attr({\n          in: in1,\n          in2: in2,\n          operator: operator\n        });\n      },\n      flood: function(color,opacity){\n        this.attr('flood-color',color);\n        if(opacity != null) this.attr('flood-opacity',opacity);\n      },\n      offset: function(x,y){\n        this.attr({\n          dx: x,\n          dy: y\n        });\n      },\n      image: function(src){\n        this.attr('href', src, SVG.xlink);\n      },\n      displacementMap: function(in1,in2,scale,xChannelSelector,yChannelSelector){\n        this.attr({\n          in: in1,\n          in2: in2,\n          scale: scale,\n          xChannelSelector: xChannelSelector,\n          yChannelSelector: yChannelSelector\n        });\n      },\n      gaussianBlur: function(x,y){\n        if(x != null || y != null)\n          this.attr('stdDeviation', listString(Array.prototype.slice.call(arguments)));\n        else\n          this.attr('stdDeviation', '0 0');\n      },\n      morphology: function(operator,radius){\n        this.attr({\n          operator: operator,\n          radius: radius\n        });\n      },\n      tile: function(){\n\n      },\n      turbulence: function(baseFrequency,numOctaves,seed,stitchTiles,type){\n        this.attr({\n          numOctaves: numOctaves,\n          seed: seed,\n          stitchTiles: stitchTiles,\n          baseFrequency: baseFrequency,\n          type: type\n        });\n      }\n    };\n\n    // Create all parent effects\n    var parentEffects = {\n      merge: function(){\n        var children;\n\n        //test to see if we have a set\n        if(arguments[0] instanceof SVG.Set){\n          var that = this;\n          arguments[0].each(function(i){\n            if(this instanceof SVG.MergeNode)\n              that.put(this);\n            else if(this instanceof SVG.Effect || this instanceof SVG.ParentEffect)\n              that.put(new SVG.MergeNode(this));\n          });\n        }\n        else{\n          //if the first argument is an array use it\n          if(Array.isArray(arguments[0]))\n            children = arguments[0];\n          else\n            children = arguments;\n\n          for(var i = 0; i < children.length; i++){\n            if(children[i] instanceof SVG.MergeNode){\n              this.put(children[i]);\n            }\n            else this.put(new SVG.MergeNode(children[i]));\n          }\n        }\n      },\n      componentTransfer: function(compontents){\n        /* create rgb set */\n        this.rgb = new SVG.Set\n\n        /* create components */\n        ;(['r', 'g', 'b', 'a']).forEach(function(c) {\n          /* create component */\n          this[c] = new SVG['Func' + c.toUpperCase()]('identity');\n\n          /* store component in set */\n          this.rgb.add(this[c]);\n\n          /* add component node */\n          this.node.appendChild(this[c].node);\n        }.bind(this)); //lost context in foreach\n\n        /* set components */\n        if (compontents) {\n          if (compontents.rgb) {\n  (['r', 'g', 'b']).forEach(function(c) {\n              this[c].attr(compontents.rgb);\n            }.bind(this));\n\n            delete compontents.rgb;\n          }\n\n          /* set individual components */\n          for (var c in compontents)\n            this[c].attr(compontents[c]);\n        }\n      },\n      diffuseLighting: function(surfaceScale,diffuseConstant,kernelUnitLength){\n        this.attr({\n          surfaceScale: surfaceScale,\n          diffuseConstant: diffuseConstant,\n          kernelUnitLength: kernelUnitLength\n        });\n      },\n      specularLighting: function(surfaceScale,diffuseConstant,specularExponent,kernelUnitLength){\n        this.attr({\n          surfaceScale: surfaceScale,\n          diffuseConstant: diffuseConstant,\n          specularExponent: specularExponent,\n          kernelUnitLength: kernelUnitLength\n        });\n      },\n    };\n\n    // Create child effects like PointLight and MergeNode\n    var childEffects = {\n      distantLight: function(azimuth, elevation){\n        this.attr({\n          azimuth: azimuth,\n          elevation: elevation\n        });\n      },\n      pointLight: function(x,y,z){\n        this.attr({\n          x: x,\n          y: y,\n          z: z\n        });\n      },\n      spotLight: function(x,y,z,pointsAtX,pointsAtY,pointsAtZ){\n        this.attr({\n          x: x,\n          y: y,\n          z: z,\n          pointsAtX: pointsAtX,\n          pointsAtY: pointsAtY,\n          pointsAtZ: pointsAtZ\n        });\n      },\n      mergeNode: function(in1){\n        this.attr('in',in1);\n      }\n    }\n\n    // Create compontent functions\n    ;(['r', 'g', 'b', 'a']).forEach(function(c) {\n      /* create class */\n      childEffects['Func' + c.toUpperCase()] = function(type) {\n        this.attr('type',type);\n\n        // take diffent arguments based on the type\n        switch(type){\n          case 'table':\n            this.attr('tableValues',arguments[1]);\n            break\n          case 'linear':\n            this.attr('slope',arguments[1]);\n            this.attr('intercept',arguments[2]);\n            break\n          case 'gamma':\n            this.attr('amplitude',arguments[1]);\n            this.attr('exponent',arguments[2]);\n            this.attr('offset',arguments[2]);\n            break\n        }\n      };\n    });\n\n    //create effects\n    foreach(effects,function(effect,i){\n\n      /* capitalize name */\n      var name = i.charAt(0).toUpperCase() + i.slice(1);\n      var proto = {};\n\n      /* create class */\n      SVG[name + 'Effect'] = SVG.invent({\n        create: function() {\n          //call super\n          this.constructor.call(this, SVG.create('fe' + name));\n\n          //call constructor for this effect\n          effect.apply(this,arguments);\n\n          //set the result\n          this.result(this.attr('id') + 'Out');\n        },\n        inherit: SVG.Effect,\n        extend: proto\n      });\n    });\n\n    //create parent effects\n    foreach(parentEffects,function(effect,i){\n\n      /* capitalize name */\n      var name = i.charAt(0).toUpperCase() + i.slice(1);\n      var proto = {};\n\n      /* create class */\n      SVG[name + 'Effect'] = SVG.invent({\n        create: function() {\n          //call super\n          this.constructor.call(this, SVG.create('fe' + name));\n\n          //call constructor for this effect\n          effect.apply(this,arguments);\n\n          //set the result\n          this.result(this.attr('id') + 'Out');\n        },\n        inherit: SVG.ParentEffect,\n        extend: proto\n      });\n    });\n\n    //create child effects\n    foreach(childEffects,function(effect,i){\n\n      /* capitalize name */\n      var name = i.charAt(0).toUpperCase() + i.slice(1);\n      var proto = {};\n\n      /* create class */\n      SVG[name] = SVG.invent({\n        create: function() {\n          //call super\n          this.constructor.call(this, SVG.create('fe' + name));\n\n          //call constructor for this effect\n          effect.apply(this,arguments);\n        },\n        inherit: SVG.ChildEffect,\n        extend: proto\n      });\n    });\n\n    // Effect-specific extensions\n    SVG.extend(SVG.MergeEffect,{\n      in: function(effect){\n        if(effect instanceof SVG.MergeNode)\n          this.add(effect,0);\n        else\n          this.add(new SVG.MergeNode(effect),0);\n\n        return this\n      }\n    });\n    SVG.extend(SVG.CompositeEffect,SVG.BlendEffect,SVG.DisplacementMapEffect,{\n      in2: function(effect){\n          return effect == null? this.parent() && this.parent().select('[result=\"'+this.attr('in2')+'\"]').get(0) || this.attr('in2') : this.attr('in2', effect)\n      }\n    });\n\n    // Presets\n    SVG.filter = {\n      sepiatone:  [ .343, .669, .119, 0, 0\n                  , .249, .626, .130, 0, 0\n                  , .172, .334, .111, 0, 0\n                  , .000, .000, .000, 1, 0 ]\n    };\n\n    // Helpers\n    function normaliseMatrix(matrix) {\n      /* convert possible array value to string */\n      if (Array.isArray(matrix))\n        matrix = new SVG.Array(matrix);\n\n      /* ensure there are no leading, tailing or double spaces */\n      return matrix.toString().replace(/^\\s+/, '').replace(/\\s+$/, '').replace(/\\s+/g, ' ')\n    }\n\n    function listString(list) {\n      if (!Array.isArray(list))\n        return list\n\n      for (var i = 0, l = list.length, s = []; i < l; i++)\n        s.push(list[i]);\n\n      return s.join(' ')\n    }\n\n    function foreach(){ //loops through mutiple objects\n      var fn = function(){};\n      if(typeof arguments[arguments.length-1] == 'function'){\n        fn = arguments[arguments.length-1];\n        Array.prototype.splice.call(arguments,arguments.length-1,1);\n      }\n      for(var k in arguments){\n        for(var i in arguments[k]){\n          fn(arguments[k][i],i,arguments[k]);\n        }\n      }\n    }\n\n  }).call(undefined);\n\n  (function() {\n\n  SVG.extend(SVG.PathArray, {\n    morph: function(array) {\n\n      var startArr = this.value\n        ,  destArr = this.parse(array);\n\n      var startOffsetM = 0\n        ,  destOffsetM = 0;\n\n      var startOffsetNextM = false\n        ,  destOffsetNextM = false;\n\n      while(true){\n        // stop if there is no M anymore\n        if(startOffsetM === false && destOffsetM === false) break\n\n        // find the next M in path array\n        startOffsetNextM = findNextM(startArr, startOffsetM === false ? false : startOffsetM+1);\n         destOffsetNextM = findNextM( destArr,  destOffsetM === false ? false :  destOffsetM+1);\n\n        // We have to add one M to the startArray\n        if(startOffsetM === false){\n          var bbox = new SVG.PathArray(result.start).bbox();\n\n          // when the last block had no bounding box we simply take the first M we got\n          if(bbox.height == 0 || bbox.width == 0){\n            startOffsetM =  startArr.push(startArr[0]) - 1;\n          }else{\n            // we take the middle of the bbox instead when we got one\n            startOffsetM = startArr.push( ['M', bbox.x + bbox.width/2, bbox.y + bbox.height/2 ] ) - 1;\n          }\n        }\n\n        // We have to add one M to the destArray\n        if( destOffsetM === false){\n          var bbox = new SVG.PathArray(result.dest).bbox();\n\n          if(bbox.height == 0 || bbox.width == 0){\n            destOffsetM =  destArr.push(destArr[0]) - 1;\n          }else{\n            destOffsetM =  destArr.push( ['M', bbox.x + bbox.width/2, bbox.y + bbox.height/2 ] ) - 1;\n          }\n        }\n\n        // handle block from M to next M\n        var result = handleBlock(startArr, startOffsetM, startOffsetNextM, destArr, destOffsetM, destOffsetNextM);\n\n        // update the arrays to their new values\n        startArr = startArr.slice(0, startOffsetM).concat(result.start, startOffsetNextM === false ? [] : startArr.slice(startOffsetNextM));\n         destArr =  destArr.slice(0,  destOffsetM).concat(result.dest ,  destOffsetNextM === false ? [] :  destArr.slice( destOffsetNextM));\n\n        // update offsets\n        startOffsetM = startOffsetNextM === false ? false : startOffsetM + result.start.length;\n         destOffsetM =  destOffsetNextM === false ? false :  destOffsetM + result.dest.length;\n\n      }\n\n      // copy back arrays\n      this.value = startArr;\n      this.destination = new SVG.PathArray();\n      this.destination.value = destArr;\n\n      return this\n    }\n  });\n\n\n\n  // sorry for the long declaration\n  // slices out one block (from M to M) and syncronize it so the types and length match\n  function handleBlock(startArr, startOffsetM, startOffsetNextM, destArr, destOffsetM, destOffsetNextM, undefined){\n\n    // slice out the block we need\n    var startArrTemp = startArr.slice(startOffsetM, startOffsetNextM || undefined)\n      ,  destArrTemp =  destArr.slice( destOffsetM,  destOffsetNextM || undefined);\n\n    var i = 0\n      , posStart = {pos:[0,0], start:[0,0]}\n      , posDest  = {pos:[0,0], start:[0,0]};\n\n    do{\n\n      // convert shorthand types to long form\n      startArrTemp[i] = simplyfy.call(posStart, startArrTemp[i]);\n       destArrTemp[i] = simplyfy.call(posDest ,  destArrTemp[i]);\n\n      // check if both shape types match\n      // 2 elliptical arc curve commands ('A'), are considered different if the\n      // flags (large-arc-flag, sweep-flag) don't match\n      if(startArrTemp[i][0] != destArrTemp[i][0] || startArrTemp[i][0] == 'M' ||\n          (startArrTemp[i][0] == 'A' &&\n            (startArrTemp[i][4] != destArrTemp[i][4] || startArrTemp[i][5] != destArrTemp[i][5])\n          )\n        ) {\n\n        // if not, convert shapes to beziere\n        Array.prototype.splice.apply(startArrTemp, [i, 1].concat(toBeziere.call(posStart, startArrTemp[i])));\n         Array.prototype.splice.apply(destArrTemp, [i, 1].concat(toBeziere.call(posDest, destArrTemp[i])));\n\n      } else {\n\n        // only update positions otherwise\n        startArrTemp[i] = setPosAndReflection.call(posStart, startArrTemp[i]);\n         destArrTemp[i] = setPosAndReflection.call(posDest ,  destArrTemp[i]);\n\n      }\n\n      // we are at the end at both arrays. stop here\n      if(++i == startArrTemp.length && i == destArrTemp.length) break\n\n      // destArray is longer. Add one element\n      if(i == startArrTemp.length){\n        startArrTemp.push([\n          'C',\n          posStart.pos[0],\n          posStart.pos[1],\n          posStart.pos[0],\n          posStart.pos[1],\n          posStart.pos[0],\n          posStart.pos[1],\n        ]);\n      }\n\n      // startArr is longer. Add one element\n      if(i == destArrTemp.length){\n        destArrTemp.push([\n          'C',\n          posDest.pos[0],\n          posDest.pos[1],\n          posDest.pos[0],\n          posDest.pos[1],\n          posDest.pos[0],\n          posDest.pos[1]\n        ]);\n      }\n\n\n    }while(true)\n\n    // return the updated block\n    return {start:startArrTemp, dest:destArrTemp}\n  }\n\n  // converts shorthand types to long form\n  function simplyfy(val){\n\n    switch(val[0]){\n      case 'z': // shorthand line to start\n      case 'Z':\n        val[0] = 'L';\n        val[1] = this.start[0];\n        val[2] = this.start[1];\n        break\n      case 'H': // shorthand horizontal line\n        val[0] = 'L';\n        val[2] = this.pos[1];\n        break\n      case 'V': // shorthand vertical line\n        val[0] = 'L';\n        val[2] = val[1];\n        val[1] = this.pos[0];\n        break\n      case 'T': // shorthand quadratic beziere\n        val[0] = 'Q';\n        val[3] = val[1];\n        val[4] = val[2];\n        val[1] = this.reflection[1];\n        val[2] = this.reflection[0];\n        break\n      case 'S': // shorthand cubic beziere\n        val[0] = 'C';\n        val[6] = val[4];\n        val[5] = val[3];\n        val[4] = val[2];\n        val[3] = val[1];\n        val[2] = this.reflection[1];\n        val[1] = this.reflection[0];\n        break\n    }\n\n    return val\n\n  }\n\n  // updates reflection point and current position\n  function setPosAndReflection(val){\n\n    var len = val.length;\n\n    this.pos = [ val[len-2], val[len-1] ];\n\n    if('SCQT'.indexOf(val[0]) != -1)\n      this.reflection = [ 2 * this.pos[0] - val[len-4], 2 * this.pos[1] - val[len-3] ];\n\n    return val\n  }\n\n  // converts all types to cubic beziere\n  function toBeziere(val){\n    var retVal = [val];\n\n    switch(val[0]){\n      case 'M': // special handling for M\n        this.pos = this.start = [val[1], val[2]];\n        return retVal\n      case 'L':\n        val[5] = val[3] = val[1];\n        val[6] = val[4] = val[2];\n        val[1] = this.pos[0];\n        val[2] = this.pos[1];\n        break\n      case 'Q':\n        val[6] = val[4];\n        val[5] = val[3];\n        val[4] = val[4] * 1/3 + val[2] * 2/3;\n        val[3] = val[3] * 1/3 + val[1] * 2/3;\n        val[2] = this.pos[1] * 1/3 + val[2] * 2/3;\n        val[1] = this.pos[0] * 1/3 + val[1] * 2/3;\n        break\n      case 'A':\n        retVal = arcToBeziere(this.pos, val);\n        val = retVal[0];\n        break\n    }\n\n    val[0] = 'C';\n    this.pos = [val[5], val[6]];\n    this.reflection = [2 * val[5] - val[3], 2 * val[6] - val[4]];\n\n    return retVal\n\n  }\n\n  // finds the next position of type M\n  function findNextM(arr, offset){\n\n    if(offset === false) return false\n\n    for(var i = offset, len = arr.length;i < len;++i){\n\n      if(arr[i][0] == 'M') return i\n\n    }\n\n    return false\n  }\n\n\n\n  // Convert an arc segment into equivalent cubic Bezier curves\n  // Depending on the arc, up to 4 curves might be used to represent it since a\n  // curve gives a good approximation for only a quarter of an ellipse\n  // The curves are returned as an array of SVG curve commands:\n  // [ ['C', x1, y1, x2, y2, x, y] ... ]\n  function arcToBeziere(pos, val) {\n      // Parameters extraction, handle out-of-range parameters as specified in the SVG spec\n      // See: https://www.w3.org/TR/SVG11/implnote.html#ArcOutOfRangeParameters\n      var rx = Math.abs(val[1]), ry = Math.abs(val[2]), xAxisRotation = val[3] % 360\n        , largeArcFlag = val[4], sweepFlag = val[5], x = val[6], y = val[7]\n        , A = new SVG.Point(pos), B = new SVG.Point(x, y)\n        , primedCoord, lambda, mat, k, c, cSquare, t, O, OA, OB, tetaStart, tetaEnd\n        , deltaTeta, nbSectors, f, arcSegPoints, angle, sinAngle, cosAngle, pt, i, il\n        , retVal = [], x1, y1, x2, y2;\n\n      // Ensure radii are non-zero\n      if(rx === 0 || ry === 0 || (A.x === B.x && A.y === B.y)) {\n        // treat this arc as a straight line segment\n        return [['C', A.x, A.y, B.x, B.y, B.x, B.y]]\n      }\n\n      // Ensure radii are large enough using the algorithm provided in the SVG spec\n      // See: https://www.w3.org/TR/SVG11/implnote.html#ArcCorrectionOutOfRangeRadii\n      primedCoord = new SVG.Point((A.x-B.x)/2, (A.y-B.y)/2).transform(new SVG.Matrix().rotate(xAxisRotation));\n      lambda = (primedCoord.x * primedCoord.x) / (rx * rx) + (primedCoord.y * primedCoord.y) / (ry * ry);\n      if(lambda > 1) {\n        lambda = Math.sqrt(lambda);\n        rx = lambda*rx;\n        ry = lambda*ry;\n      }\n\n      // To simplify calculations, we make the arc part of a unit circle (rayon is 1) instead of an ellipse\n      mat = new SVG.Matrix().rotate(xAxisRotation).scale(1/rx, 1/ry).rotate(-xAxisRotation);\n      A = A.transform(mat);\n      B = B.transform(mat);\n\n      // Calculate the horizontal and vertical distance between the initial and final point of the arc\n      k = [B.x-A.x, B.y-A.y];\n\n      // Find the length of the chord formed by A and B\n      cSquare = k[0]*k[0] + k[1]*k[1];\n      c = Math.sqrt(cSquare);\n\n      // Calculate the ratios of the horizontal and vertical distance on the length of the chord\n      k[0] /= c;\n      k[1] /= c;\n\n      // Calculate the distance between the circle center and the chord midpoint\n      // using this formula: t = sqrt(r^2 - c^2 / 4)\n      // where t is the distance between the cirle center and the chord midpoint,\n      //       r is the rayon of the circle and c is the chord length\n      // From: http://www.ajdesigner.com/phpcircle/circle_segment_chord_t.php\n      // Because of the imprecision of floating point numbers, cSquare might end\n      // up being slightly above 4 which would result in a negative radicand\n      // To prevent that, a test is made before computing the square root\n      t = (cSquare < 4) ? Math.sqrt(1 - cSquare/4) : 0;\n\n      // For most situations, there are actually two different ellipses that\n      // satisfy the constraints imposed by the points A and B, the radii rx and ry,\n      // and the xAxisRotation\n      // When the flags largeArcFlag and sweepFlag are equal, it means that the\n      // second ellipse is used as a solution\n      // See: https://www.w3.org/TR/SVG/paths.html#PathDataEllipticalArcCommands\n      if(largeArcFlag === sweepFlag) {\n          t *= -1;\n      }\n\n      // Calculate the coordinates of the center of the circle from the midpoint of the chord\n      // This is done by multiplying the ratios calculated previously by the distance between\n      // the circle center and the chord midpoint and using these values to go from the midpoint\n      // to the center of the circle\n      // The negative of the vertical distance ratio is used to modify the x coordinate while\n      // the horizontal distance ratio is used to modify the y coordinate\n      // That is because the center of the circle is perpendicular to the chord and perpendicular\n      // lines are negative reciprocals\n      O = new SVG.Point((B.x+A.x)/2 + t*-k[1], (B.y+A.y)/2 + t*k[0]);\n      // Move the center of the circle at the origin\n      OA = new SVG.Point(A.x-O.x, A.y-O.y);\n      OB = new SVG.Point(B.x-O.x, B.y-O.y);\n\n      // Calculate the start and end angle\n      tetaStart = Math.acos(OA.x/Math.sqrt(OA.x*OA.x + OA.y*OA.y));\n      if (OA.y < 0) {\n        tetaStart *= -1;\n      }\n      tetaEnd = Math.acos(OB.x/Math.sqrt(OB.x*OB.x + OB.y*OB.y));\n      if (OB.y < 0) {\n        tetaEnd *= -1;\n      }\n\n      // If sweep-flag is '1', then the arc will be drawn in a \"positive-angle\" direction,\n      // make sure that the end angle is above the start angle\n      if (sweepFlag && tetaStart > tetaEnd) {\n        tetaEnd += 2*Math.PI;\n      }\n      // If sweep-flag is '0', then the arc will be drawn in a \"negative-angle\" direction,\n      // make sure that the end angle is below the start angle\n      if (!sweepFlag && tetaStart < tetaEnd) {\n        tetaEnd -= 2*Math.PI;\n      }\n\n      // Find the number of Bezier curves that are required to represent the arc\n      // A cubic Bezier curve gives a good enough approximation when representing at most a quarter of a circle\n      nbSectors = Math.ceil(Math.abs(tetaStart-tetaEnd) * 2/Math.PI);\n\n      // Calculate the coordinates of the points of all the Bezier curves required to represent the arc\n      // For an in-depth explanation of this part see: http://pomax.github.io/bezierinfo/#circles_cubic\n      arcSegPoints = [];\n      angle = tetaStart;\n      deltaTeta = (tetaEnd-tetaStart)/nbSectors;\n      f = 4*Math.tan(deltaTeta/4)/3;\n      for (i = 0; i <= nbSectors; i++) { // The <= is because a Bezier curve have a start and a endpoint\n        cosAngle = Math.cos(angle);\n        sinAngle = Math.sin(angle);\n\n        pt = new SVG.Point(O.x+cosAngle, O.y+sinAngle);\n        arcSegPoints[i] = [new SVG.Point(pt.x+f*sinAngle, pt.y-f*cosAngle), pt, new SVG.Point(pt.x-f*sinAngle, pt.y+f*cosAngle)];\n\n        angle += deltaTeta;\n      }\n\n      // Remove the first control point of the first segment point and remove the second control point of the last segment point\n      // These two control points are not used in the approximation of the arc, that is why they are removed\n      arcSegPoints[0][0] = arcSegPoints[0][1].clone();\n      arcSegPoints[arcSegPoints.length-1][2] = arcSegPoints[arcSegPoints.length-1][1].clone();\n\n      // Revert the transformation that was applied to make the arc part of a unit circle instead of an ellipse\n      mat = new SVG.Matrix().rotate(xAxisRotation).scale(rx, ry).rotate(-xAxisRotation);\n      for (i = 0, il = arcSegPoints.length; i < il; i++) {\n        arcSegPoints[i][0] = arcSegPoints[i][0].transform(mat);\n        arcSegPoints[i][1] = arcSegPoints[i][1].transform(mat);\n        arcSegPoints[i][2] = arcSegPoints[i][2].transform(mat);\n      }\n\n\n      // Convert the segments points to SVG curve commands\n      for (i = 1, il = arcSegPoints.length; i < il; i++) {\n        pt = arcSegPoints[i-1][2];\n        x1 = pt.x;\n        y1 = pt.y;\n\n        pt = arcSegPoints[i][0];\n        x2 = pt.x;\n        y2 = pt.y;\n\n        pt = arcSegPoints[i][1];\n        x = pt.x;\n        y = pt.y;\n\n        retVal.push(['C', x1, y1, x2, y2, x, y]);\n      }\n\n      return retVal\n  }\n  }());\n\n  /*! svg.draggable.js - v2.2.2 - 2019-01-08\n  * https://github.com/svgdotjs/svg.draggable.js\n  * Copyright (c) 2019 Wout Fierens; Licensed MIT */\n  (function() {\n\n    // creates handler, saves it\n    function DragHandler(el){\n      el.remember('_draggable', this);\n      this.el = el;\n    }\n\n\n    // Sets new parameter, starts dragging\n    DragHandler.prototype.init = function(constraint, val){\n      var _this = this;\n      this.constraint = constraint;\n      this.value = val;\n      this.el.on('mousedown.drag', function(e){ _this.start(e); });\n      this.el.on('touchstart.drag', function(e){ _this.start(e); });\n    };\n\n    // transforms one point from screen to user coords\n    DragHandler.prototype.transformPoint = function(event, offset){\n        event = event || window.event;\n        var touches = event.changedTouches && event.changedTouches[0] || event;\n        this.p.x = touches.clientX - (offset || 0);\n        this.p.y = touches.clientY;\n        return this.p.matrixTransform(this.m)\n    };\n\n    // gets elements bounding box with special handling of groups, nested and use\n    DragHandler.prototype.getBBox = function(){\n\n      var box = this.el.bbox();\n\n      if(this.el instanceof SVG.Nested) box = this.el.rbox();\n\n      if (this.el instanceof SVG.G || this.el instanceof SVG.Use || this.el instanceof SVG.Nested) {\n        box.x = this.el.x();\n        box.y = this.el.y();\n      }\n\n      return box\n    };\n\n    // start dragging\n    DragHandler.prototype.start = function(e){\n\n      // check for left button\n      if(e.type == 'click'|| e.type == 'mousedown' || e.type == 'mousemove'){\n        if((e.which || e.buttons) != 1){\n            return\n        }\n      }\n\n      var _this = this;\n\n      // fire beforedrag event\n      this.el.fire('beforedrag', { event: e, handler: this });\n      if(this.el.event().defaultPrevented) return;\n\n      // prevent browser drag behavior as soon as possible\n      e.preventDefault();\n\n      // prevent propagation to a parent that might also have dragging enabled\n      e.stopPropagation();\n\n      // search for parent on the fly to make sure we can call\n      // draggable() even when element is not in the dom currently\n      this.parent = this.parent || this.el.parent(SVG.Nested) || this.el.parent(SVG.Doc);\n      this.p = this.parent.node.createSVGPoint();\n\n      // save current transformation matrix\n      this.m = this.el.node.getScreenCTM().inverse();\n\n      var box = this.getBBox();\n\n      var anchorOffset;\n\n      // fix text-anchor in text-element (#37)\n      if(this.el instanceof SVG.Text){\n        anchorOffset = this.el.node.getComputedTextLength();\n\n        switch(this.el.attr('text-anchor')){\n          case 'middle':\n            anchorOffset /= 2;\n            break\n          case 'start':\n            anchorOffset = 0;\n            break;\n        }\n      }\n\n      this.startPoints = {\n        // We take absolute coordinates since we are just using a delta here\n        point: this.transformPoint(e, anchorOffset),\n        box:   box,\n        transform: this.el.transform()\n      };\n\n      // add drag and end events to window\n      SVG.on(window, 'mousemove.drag', function(e){ _this.drag(e); });\n      SVG.on(window, 'touchmove.drag', function(e){ _this.drag(e); });\n      SVG.on(window, 'mouseup.drag', function(e){ _this.end(e); });\n      SVG.on(window, 'touchend.drag', function(e){ _this.end(e); });\n\n      // fire dragstart event\n      this.el.fire('dragstart', {event: e, p: this.startPoints.point, m: this.m, handler: this});\n    };\n\n    // while dragging\n    DragHandler.prototype.drag = function(e){\n\n      var box = this.getBBox()\n        , p   = this.transformPoint(e)\n        , x   = this.startPoints.box.x + p.x - this.startPoints.point.x\n        , y   = this.startPoints.box.y + p.y - this.startPoints.point.y\n        , c   = this.constraint\n        , gx  = p.x - this.startPoints.point.x\n        , gy  = p.y - this.startPoints.point.y;\n\n      this.el.fire('dragmove', {\n          event: e\n        , p: p\n        , m: this.m\n        , handler: this\n      });\n\n      if(this.el.event().defaultPrevented) return p\n\n      // move the element to its new position, if possible by constraint\n      if (typeof c == 'function') {\n\n        var coord = c.call(this.el, x, y, this.m);\n\n        // bool, just show us if movement is allowed or not\n        if (typeof coord == 'boolean') {\n          coord = {\n            x: coord,\n            y: coord\n          };\n        }\n\n        // if true, we just move. If !false its a number and we move it there\n        if (coord.x === true) {\n          this.el.x(x);\n        } else if (coord.x !== false) {\n          this.el.x(coord.x);\n        }\n\n        if (coord.y === true) {\n          this.el.y(y);\n        } else if (coord.y !== false) {\n          this.el.y(coord.y);\n        }\n\n      } else if (typeof c == 'object') {\n\n        // keep element within constrained box\n        if (c.minX != null && x < c.minX) {\n          x = c.minX;\n          gx = x - this.startPoints.box.x;\n        } else if (c.maxX != null && x > c.maxX - box.width) {\n          x = c.maxX - box.width;\n          gx = x - this.startPoints.box.x;\n        } if (c.minY != null && y < c.minY) {\n          y = c.minY;\n          gy = y - this.startPoints.box.y;\n        } else if (c.maxY != null && y > c.maxY - box.height) {\n          y = c.maxY - box.height;\n          gy = y - this.startPoints.box.y;\n        }\n\n        if (c.snapToGrid != null) {\n          x = x - (x % c.snapToGrid);\n          y = y - (y % c.snapToGrid);\n          gx = gx - (gx % c.snapToGrid);\n          gy = gy - (gy % c.snapToGrid);\n        }\n\n        if(this.el instanceof SVG.G)\n          this.el.matrix(this.startPoints.transform).transform({x:gx, y: gy}, true);\n        else\n          this.el.move(x, y);\n      }\n\n      // so we can use it in the end-method, too\n      return p\n    };\n\n    DragHandler.prototype.end = function(e){\n\n      // final drag\n      var p = this.drag(e);\n\n      // fire dragend event\n      this.el.fire('dragend', { event: e, p: p, m: this.m, handler: this });\n\n      // unbind events\n      SVG.off(window, 'mousemove.drag');\n      SVG.off(window, 'touchmove.drag');\n      SVG.off(window, 'mouseup.drag');\n      SVG.off(window, 'touchend.drag');\n\n    };\n\n    SVG.extend(SVG.Element, {\n      // Make element draggable\n      // Constraint might be an object (as described in readme.md) or a function in the form \"function (x, y)\" that gets called before every move.\n      // The function can return a boolean or an object of the form {x, y}, to which the element will be moved. \"False\" skips moving, true moves to raw x, y.\n      draggable: function(value, constraint) {\n\n        // Check the parameters and reassign if needed\n        if (typeof value == 'function' || typeof value == 'object') {\n          constraint = value;\n          value = true;\n        }\n\n        var dragHandler = this.remember('_draggable') || new DragHandler(this);\n\n        // When no parameter is given, value is true\n        value = typeof value === 'undefined' ? true : value;\n\n        if(value) dragHandler.init(constraint || {}, value);\n        else {\n          this.off('mousedown.drag');\n          this.off('touchstart.drag');\n        }\n\n        return this\n      }\n\n    });\n\n  }).call(undefined);\n\n  (function() {\n\n  function SelectHandler(el) {\n\n      this.el = el;\n      el.remember('_selectHandler', this);\n      this.pointSelection = {isSelected: false};\n      this.rectSelection = {isSelected: false};\n\n  }\n\n  SelectHandler.prototype.init = function (value, options) {\n\n      var bbox = this.el.bbox();\n      this.options = {};\n\n      // Merging the defaults and the options-object together\n      for (var i in this.el.selectize.defaults) {\n          this.options[i] = this.el.selectize.defaults[i];\n          if (options[i] !== undefined) {\n              this.options[i] = options[i];\n          }\n      }\n\n      this.parent = this.el.parent();\n      this.nested = (this.nested || this.parent.group());\n      this.nested.matrix(new SVG.Matrix(this.el).translate(bbox.x, bbox.y));\n\n      // When deepSelect is enabled and the element is a line/polyline/polygon, draw only points for moving\n      if (this.options.deepSelect && ['line', 'polyline', 'polygon'].indexOf(this.el.type) !== -1) {\n          this.selectPoints(value);\n      } else {\n          this.selectRect(value);\n      }\n\n      this.observe();\n      this.cleanup();\n\n  };\n\n  SelectHandler.prototype.selectPoints = function (value) {\n\n      this.pointSelection.isSelected = value;\n\n      // When set is already there we dont have to create one\n      if (this.pointSelection.set) {\n          return this;\n      }\n\n      // Create our set of elements\n      this.pointSelection.set = this.parent.set();\n      // draw the circles and mark the element as selected\n      this.drawCircles();\n\n      return this;\n\n  };\n\n  // create the point-array which contains the 2 points of a line or simply the points-array of polyline/polygon\n  SelectHandler.prototype.getPointArray = function () {\n      var bbox = this.el.bbox();\n\n      return this.el.array().valueOf().map(function (el) {\n          return [el[0] - bbox.x, el[1] - bbox.y];\n      });\n  };\n\n  // The function to draw the circles\n  SelectHandler.prototype.drawCircles = function () {\n\n      var _this = this, array = this.getPointArray();\n\n      // go through the array of points\n      for (var i = 0, len = array.length; i < len; ++i) {\n\n          var curriedEvent = (function (k) {\n              return function (ev) {\n                  ev = ev || window.event;\n                  ev.preventDefault ? ev.preventDefault() : ev.returnValue = false;\n                  ev.stopPropagation();\n\n                  var x = ev.pageX || ev.touches[0].pageX;\n                  var y = ev.pageY || ev.touches[0].pageY;\n                  _this.el.fire('point', {x: x, y: y, i: k, event: ev});\n              };\n          })(i);\n\n          // add every point to the set\n          this.pointSelection.set.add(\n              // a circle with our css-classes and a touchstart-event which fires our event for moving points\n              this.nested.circle(this.options.radius)\n                  .center(array[i][0], array[i][1])\n                  .addClass(this.options.classPoints)\n                  .addClass(this.options.classPoints + '_point')\n                  .on('touchstart', curriedEvent)\n                  .on('mousedown', curriedEvent)\n          );\n      }\n\n  };\n\n  // every time a circle is moved, we have to update the positions of our circle\n  SelectHandler.prototype.updatePointSelection = function () {\n      var array = this.getPointArray();\n\n      this.pointSelection.set.each(function (i) {\n          if (this.cx() === array[i][0] && this.cy() === array[i][1]) {\n              return;\n          }\n          this.center(array[i][0], array[i][1]);\n      });\n  };\n\n  SelectHandler.prototype.updateRectSelection = function () {\n      var bbox = this.el.bbox();\n\n      this.rectSelection.set.get(0).attr({\n          width: bbox.width,\n          height: bbox.height\n      });\n\n      // set.get(1) is always in the upper left corner. no need to move it\n      if (this.options.points) {\n          this.rectSelection.set.get(2).center(bbox.width, 0);\n          this.rectSelection.set.get(3).center(bbox.width, bbox.height);\n          this.rectSelection.set.get(4).center(0, bbox.height);\n\n          this.rectSelection.set.get(5).center(bbox.width / 2, 0);\n          this.rectSelection.set.get(6).center(bbox.width, bbox.height / 2);\n          this.rectSelection.set.get(7).center(bbox.width / 2, bbox.height);\n          this.rectSelection.set.get(8).center(0, bbox.height / 2);\n      }\n\n      if (this.options.rotationPoint) {\n          if (this.options.points) {\n              this.rectSelection.set.get(9).center(bbox.width / 2, 20);\n          } else {\n              this.rectSelection.set.get(1).center(bbox.width / 2, 20);\n          }\n      }\n  };\n\n  SelectHandler.prototype.selectRect = function (value) {\n\n      var _this = this, bbox = this.el.bbox();\n\n      this.rectSelection.isSelected = value;\n\n      // when set is already p\n      this.rectSelection.set = this.rectSelection.set || this.parent.set();\n\n      // helperFunction to create a mouse-down function which triggers the event specified in `eventName`\n      function getMoseDownFunc(eventName) {\n          return function (ev) {\n              ev = ev || window.event;\n              ev.preventDefault ? ev.preventDefault() : ev.returnValue = false;\n              ev.stopPropagation();\n\n              var x = ev.pageX || ev.touches[0].pageX;\n              var y = ev.pageY || ev.touches[0].pageY;\n              _this.el.fire(eventName, {x: x, y: y, event: ev});\n          };\n      }\n\n      // create the selection-rectangle and add the css-class\n      if (!this.rectSelection.set.get(0)) {\n          this.rectSelection.set.add(this.nested.rect(bbox.width, bbox.height).addClass(this.options.classRect));\n      }\n\n      // Draw Points at the edges, if enabled\n      if (this.options.points && !this.rectSelection.set.get(1)) {\n          var ename =\"touchstart\", mname = \"mousedown\";\n          this.rectSelection.set.add(this.nested.circle(this.options.radius).center(0, 0).attr('class', this.options.classPoints + '_lt').on(mname, getMoseDownFunc('lt')).on(ename, getMoseDownFunc('lt')));\n          this.rectSelection.set.add(this.nested.circle(this.options.radius).center(bbox.width, 0).attr('class', this.options.classPoints + '_rt').on(mname, getMoseDownFunc('rt')).on(ename, getMoseDownFunc('rt')));\n          this.rectSelection.set.add(this.nested.circle(this.options.radius).center(bbox.width, bbox.height).attr('class', this.options.classPoints + '_rb').on(mname, getMoseDownFunc('rb')).on(ename, getMoseDownFunc('rb')));\n          this.rectSelection.set.add(this.nested.circle(this.options.radius).center(0, bbox.height).attr('class', this.options.classPoints + '_lb').on(mname, getMoseDownFunc('lb')).on(ename, getMoseDownFunc('lb')));\n\n          this.rectSelection.set.add(this.nested.circle(this.options.radius).center(bbox.width / 2, 0).attr('class', this.options.classPoints + '_t').on(mname, getMoseDownFunc('t')).on(ename, getMoseDownFunc('t')));\n          this.rectSelection.set.add(this.nested.circle(this.options.radius).center(bbox.width, bbox.height / 2).attr('class', this.options.classPoints + '_r').on(mname, getMoseDownFunc('r')).on(ename, getMoseDownFunc('r')));\n          this.rectSelection.set.add(this.nested.circle(this.options.radius).center(bbox.width / 2, bbox.height).attr('class', this.options.classPoints + '_b').on(mname, getMoseDownFunc('b')).on(ename, getMoseDownFunc('b')));\n          this.rectSelection.set.add(this.nested.circle(this.options.radius).center(0, bbox.height / 2).attr('class', this.options.classPoints + '_l').on(mname, getMoseDownFunc('l')).on(ename, getMoseDownFunc('l')));\n\n          this.rectSelection.set.each(function () {\n              this.addClass(_this.options.classPoints);\n          });\n      }\n\n      // draw rotationPint, if enabled\n      if (this.options.rotationPoint && ((this.options.points && !this.rectSelection.set.get(9)) || (!this.options.points && !this.rectSelection.set.get(1)))) {\n\n          var curriedEvent = function (ev) {\n              ev = ev || window.event;\n              ev.preventDefault ? ev.preventDefault() : ev.returnValue = false;\n              ev.stopPropagation();\n\n              var x = ev.pageX || ev.touches[0].pageX;\n              var y = ev.pageY || ev.touches[0].pageY;\n              _this.el.fire('rot', {x: x, y: y, event: ev});\n          };\n          this.rectSelection.set.add(this.nested.circle(this.options.radius).center(bbox.width / 2, 20).attr('class', this.options.classPoints + '_rot')\n              .on(\"touchstart\", curriedEvent).on(\"mousedown\", curriedEvent));\n\n      }\n\n  };\n\n  SelectHandler.prototype.handler = function () {\n\n      var bbox = this.el.bbox();\n      this.nested.matrix(new SVG.Matrix(this.el).translate(bbox.x, bbox.y));\n\n      if (this.rectSelection.isSelected) {\n          this.updateRectSelection();\n      }\n\n      if (this.pointSelection.isSelected) {\n          this.updatePointSelection();\n      }\n\n  };\n\n  SelectHandler.prototype.observe = function () {\n      var _this = this;\n\n      if (MutationObserver) {\n          if (this.rectSelection.isSelected || this.pointSelection.isSelected) {\n              this.observerInst = this.observerInst || new MutationObserver(function () {\n                  _this.handler();\n              });\n              this.observerInst.observe(this.el.node, {attributes: true});\n          } else {\n              try {\n                  this.observerInst.disconnect();\n                  delete this.observerInst;\n              } catch (e) {\n              }\n          }\n      } else {\n          this.el.off('DOMAttrModified.select');\n\n          if (this.rectSelection.isSelected || this.pointSelection.isSelected) {\n              this.el.on('DOMAttrModified.select', function () {\n                  _this.handler();\n              });\n          }\n      }\n  };\n\n  SelectHandler.prototype.cleanup = function () {\n\n      //var _this = this;\n\n      if (!this.rectSelection.isSelected && this.rectSelection.set) {\n          // stop watching the element, remove the selection\n          this.rectSelection.set.each(function () {\n              this.remove();\n          });\n\n          this.rectSelection.set.clear();\n          delete this.rectSelection.set;\n      }\n\n      if (!this.pointSelection.isSelected && this.pointSelection.set) {\n          // Remove all points, clear the set, stop watching the element\n          this.pointSelection.set.each(function () {\n              this.remove();\n          });\n\n          this.pointSelection.set.clear();\n          delete this.pointSelection.set;\n      }\n\n      if (!this.pointSelection.isSelected && !this.rectSelection.isSelected) {\n          this.nested.remove();\n          delete this.nested;\n\n      }\n  };\n\n\n  SVG.extend(SVG.Element, {\n      // Select element with mouse\n      selectize: function (value, options) {\n\n          // Check the parameters and reassign if needed\n          if (typeof value === 'object') {\n              options = value;\n              value = true;\n          }\n\n          var selectHandler = this.remember('_selectHandler') || new SelectHandler(this);\n\n          selectHandler.init(value === undefined ? true : value, options || {});\n\n          return this;\n\n      }\n  });\n\n  SVG.Element.prototype.selectize.defaults = {\n      points: true,                            // If true, points at the edges are drawn. Needed for resize!\n      classRect: 'svg_select_boundingRect',    // Css-class added to the rect\n      classPoints: 'svg_select_points',        // Css-class added to the points\n      radius: 7,                               // radius of the points\n      rotationPoint: true,                     // If true, rotation point is drawn. Needed for rotation!\n      deepSelect: false                        // If true, moving of single points is possible (only line, polyline, polyon)\n  };\n  }());\n\n  (function() {\n  (function () {\n\n      function ResizeHandler(el) {\n\n          el.remember('_resizeHandler', this);\n\n          this.el = el;\n          this.parameters = {};\n          this.lastUpdateCall = null;\n          this.p = el.doc().node.createSVGPoint();\n      }\n\n      ResizeHandler.prototype.transformPoint = function(x, y, m){\n\n          this.p.x = x - (this.offset.x - window.pageXOffset);\n          this.p.y = y - (this.offset.y - window.pageYOffset);\n\n          return this.p.matrixTransform(m || this.m);\n\n      };\n\n      ResizeHandler.prototype._extractPosition = function(event) {\n          // Extract a position from a mouse/touch event.\n          // Returns { x: .., y: .. }\n          return {\n              x: event.clientX != null ? event.clientX : event.touches[0].clientX,\n              y: event.clientY != null ? event.clientY : event.touches[0].clientY\n          }\n      };\n\n      ResizeHandler.prototype.init = function (options) {\n\n          var _this = this;\n\n          this.stop();\n\n          if (options === 'stop') {\n              return;\n          }\n\n          this.options = {};\n\n          // Merge options and defaults\n          for (var i in this.el.resize.defaults) {\n              this.options[i] = this.el.resize.defaults[i];\n              if (typeof options[i] !== 'undefined') {\n                  this.options[i] = options[i];\n              }\n          }\n\n          // We listen to all these events which are specifying different edges\n          this.el.on('lt.resize', function(e){ _this.resize(e || window.event); });  // Left-Top\n          this.el.on('rt.resize', function(e){ _this.resize(e || window.event); });  // Right-Top\n          this.el.on('rb.resize', function(e){ _this.resize(e || window.event); });  // Right-Bottom\n          this.el.on('lb.resize', function(e){ _this.resize(e || window.event); });  // Left-Bottom\n\n          this.el.on('t.resize', function(e){ _this.resize(e || window.event); });   // Top\n          this.el.on('r.resize', function(e){ _this.resize(e || window.event); });   // Right\n          this.el.on('b.resize', function(e){ _this.resize(e || window.event); });   // Bottom\n          this.el.on('l.resize', function(e){ _this.resize(e || window.event); });   // Left\n\n          this.el.on('rot.resize', function(e){ _this.resize(e || window.event); }); // Rotation\n\n          this.el.on('point.resize', function(e){ _this.resize(e || window.event); }); // Point-Moving\n\n          // This call ensures, that the plugin reacts to a change of snapToGrid immediately\n          this.update();\n\n      };\n\n      ResizeHandler.prototype.stop = function(){\n          this.el.off('lt.resize');\n          this.el.off('rt.resize');\n          this.el.off('rb.resize');\n          this.el.off('lb.resize');\n\n          this.el.off('t.resize');\n          this.el.off('r.resize');\n          this.el.off('b.resize');\n          this.el.off('l.resize');\n\n          this.el.off('rot.resize');\n\n          this.el.off('point.resize');\n\n          return this;\n      };\n\n      ResizeHandler.prototype.resize = function (event) {\n\n          var _this = this;\n\n          this.m = this.el.node.getScreenCTM().inverse();\n          this.offset = { x: window.pageXOffset, y: window.pageYOffset };\n\n          var txPt = this._extractPosition(event.detail.event);\n          this.parameters = {\n              type: this.el.type, // the type of element\n              p: this.transformPoint(txPt.x, txPt.y),\n              x: event.detail.x,      // x-position of the mouse when resizing started\n              y: event.detail.y,      // y-position of the mouse when resizing started\n              box: this.el.bbox(),    // The bounding-box of the element\n              rotation: this.el.transform().rotation  // The current rotation of the element\n          };\n\n          // Add font-size parameter if the element type is text\n          if (this.el.type === \"text\") {\n              this.parameters.fontSize = this.el.attr()[\"font-size\"];\n          }\n\n          // the i-param in the event holds the index of the point which is moved, when using `deepSelect`\n          if (event.detail.i !== undefined) {\n\n              // get the point array\n              var array = this.el.array().valueOf();\n\n              // Save the index and the point which is moved\n              this.parameters.i = event.detail.i;\n              this.parameters.pointCoords = [array[event.detail.i][0], array[event.detail.i][1]];\n          }\n\n          // Lets check which edge of the bounding-box was clicked and resize the this.el according to this\n          switch (event.type) {\n\n              // Left-Top-Edge\n              case 'lt':\n                  // We build a calculating function for every case which gives us the new position of the this.el\n                  this.calc = function (diffX, diffY) {\n                      // The procedure is always the same\n                      // First we snap the edge to the given grid (snapping to 1px grid is normal resizing)\n                      var snap = this.snapToGrid(diffX, diffY);\n\n                      // Now we check if the new height and width still valid (> 0)\n                      if (this.parameters.box.width - snap[0] > 0 && this.parameters.box.height - snap[1] > 0) {\n                          // ...if valid, we resize the this.el (which can include moving because the coord-system starts at the left-top and this edge is moving sometimes when resized)\n\n                          /*\n                           * but first check if the element is text box, so we can change the font size instead of\n                           * the width and height\n                           */\n\n                          if (this.parameters.type === \"text\") {\n                              this.el.move(this.parameters.box.x + snap[0], this.parameters.box.y);\n                              this.el.attr(\"font-size\", this.parameters.fontSize - snap[0]);\n                              return;\n                          }\n\n                          snap = this.checkAspectRatio(snap);\n\n                          this.el.move(this.parameters.box.x + snap[0], this.parameters.box.y + snap[1]).size(this.parameters.box.width - snap[0], this.parameters.box.height - snap[1]);\n                      }\n                  };\n                  break;\n\n              // Right-Top\n              case 'rt':\n                  // s.a.\n                  this.calc = function (diffX, diffY) {\n                      var snap = this.snapToGrid(diffX, diffY, 1 << 1);\n                      if (this.parameters.box.width + snap[0] > 0 && this.parameters.box.height - snap[1] > 0) {\n                          if (this.parameters.type === \"text\") {\n                              this.el.move(this.parameters.box.x - snap[0], this.parameters.box.y);\n                              this.el.attr(\"font-size\", this.parameters.fontSize + snap[0]);\n                              return;\n                          }\n\n                          snap = this.checkAspectRatio(snap, true);\n\n                          this.el.move(this.parameters.box.x, this.parameters.box.y + snap[1]).size(this.parameters.box.width + snap[0], this.parameters.box.height - snap[1]);\n                      }\n                  };\n                  break;\n\n              // Right-Bottom\n              case 'rb':\n                  // s.a.\n                  this.calc = function (diffX, diffY) {\n                      var snap = this.snapToGrid(diffX, diffY, 0);\n                      if (this.parameters.box.width + snap[0] > 0 && this.parameters.box.height + snap[1] > 0) {\n                          if (this.parameters.type === \"text\") {\n                              this.el.move(this.parameters.box.x - snap[0], this.parameters.box.y);\n                              this.el.attr(\"font-size\", this.parameters.fontSize + snap[0]);\n                              return;\n                          }\n\n                          snap = this.checkAspectRatio(snap);\n\n                          this.el.move(this.parameters.box.x, this.parameters.box.y).size(this.parameters.box.width + snap[0], this.parameters.box.height + snap[1]);\n                      }\n                  };\n                  break;\n\n              // Left-Bottom\n              case 'lb':\n                  // s.a.\n                  this.calc = function (diffX, diffY) {\n                      var snap = this.snapToGrid(diffX, diffY, 1);\n                      if (this.parameters.box.width - snap[0] > 0 && this.parameters.box.height + snap[1] > 0) {\n                          if (this.parameters.type === \"text\") {\n                              this.el.move(this.parameters.box.x + snap[0], this.parameters.box.y);\n                              this.el.attr(\"font-size\", this.parameters.fontSize - snap[0]);\n                              return;\n                          }\n\n                          snap = this.checkAspectRatio(snap, true);\n\n                          this.el.move(this.parameters.box.x + snap[0], this.parameters.box.y).size(this.parameters.box.width - snap[0], this.parameters.box.height + snap[1]);\n                      }\n                  };\n                  break;\n\n              // Top\n              case 't':\n                  // s.a.\n                  this.calc = function (diffX, diffY) {\n                      var snap = this.snapToGrid(diffX, diffY, 1 << 1);\n                      if (this.parameters.box.height - snap[1] > 0) {\n                          // Disable the font-resizing if it is not from the corner of bounding-box\n                          if (this.parameters.type === \"text\") {\n                              return;\n                          }\n\n                          this.el.move(this.parameters.box.x, this.parameters.box.y + snap[1]).height(this.parameters.box.height - snap[1]);\n                      }\n                  };\n                  break;\n\n              // Right\n              case 'r':\n                  // s.a.\n                  this.calc = function (diffX, diffY) {\n                      var snap = this.snapToGrid(diffX, diffY, 0);\n                      if (this.parameters.box.width + snap[0] > 0) {\n                          if (this.parameters.type === \"text\") {\n                              return;\n                          }\n\n                          this.el.move(this.parameters.box.x, this.parameters.box.y).width(this.parameters.box.width + snap[0]);\n                      }\n                  };\n                  break;\n\n              // Bottom\n              case 'b':\n                  // s.a.\n                  this.calc = function (diffX, diffY) {\n                      var snap = this.snapToGrid(diffX, diffY, 0);\n                      if (this.parameters.box.height + snap[1] > 0) {\n                          if (this.parameters.type === \"text\") {\n                              return;\n                          }\n\n                          this.el.move(this.parameters.box.x, this.parameters.box.y).height(this.parameters.box.height + snap[1]);\n                      }\n                  };\n                  break;\n\n              // Left\n              case 'l':\n                  // s.a.\n                  this.calc = function (diffX, diffY) {\n                      var snap = this.snapToGrid(diffX, diffY, 1);\n                      if (this.parameters.box.width - snap[0] > 0) {\n                          if (this.parameters.type === \"text\") {\n                              return;\n                          }\n\n                          this.el.move(this.parameters.box.x + snap[0], this.parameters.box.y).width(this.parameters.box.width - snap[0]);\n                      }\n                  };\n                  break;\n\n              // Rotation\n              case 'rot':\n                  // s.a.\n                  this.calc = function (diffX, diffY) {\n\n                      // yes this is kinda stupid but we need the mouse coords back...\n                      var current = {x: diffX + this.parameters.p.x, y: diffY + this.parameters.p.y};\n\n                      // start minus middle\n                      var sAngle = Math.atan2((this.parameters.p.y - this.parameters.box.y - this.parameters.box.height / 2), (this.parameters.p.x - this.parameters.box.x - this.parameters.box.width / 2));\n\n                      // end minus middle\n                      var pAngle = Math.atan2((current.y - this.parameters.box.y - this.parameters.box.height / 2), (current.x - this.parameters.box.x - this.parameters.box.width / 2));\n\n                      var angle = this.parameters.rotation + (pAngle - sAngle) * 180 / Math.PI + this.options.snapToAngle / 2;\n\n                      // We have to move the element to the center of the box first and change the rotation afterwards\n                      // because rotation always works around a rotation-center, which is changed when moving the element\n                      // We also set the new rotation center to the center of the box.\n                      this.el.center(this.parameters.box.cx, this.parameters.box.cy).rotate(angle - (angle % this.options.snapToAngle), this.parameters.box.cx, this.parameters.box.cy);\n                  };\n                  break;\n\n              // Moving one single Point (needed when an element is deepSelected which means you can move every single point of the object)\n              case 'point':\n                  this.calc = function (diffX, diffY) {\n\n                      // Snapping the point to the grid\n                      var snap = this.snapToGrid(diffX, diffY, this.parameters.pointCoords[0], this.parameters.pointCoords[1]);\n\n                      // Get the point array\n                      var array = this.el.array().valueOf();\n\n                      // Changing the moved point in the array\n                      array[this.parameters.i][0] = this.parameters.pointCoords[0] + snap[0];\n                      array[this.parameters.i][1] = this.parameters.pointCoords[1] + snap[1];\n\n                      // And plot the new this.el\n                      this.el.plot(array);\n                  };\n          }\n\n          this.el.fire('resizestart', {dx: this.parameters.x, dy: this.parameters.y, event: event});\n          // When resizing started, we have to register events for...\n          // Touches.\n          SVG.on(window, 'touchmove.resize', function(e) {\n              _this.update(e || window.event);\n          });\n          SVG.on(window, 'touchend.resize', function() {\n              _this.done();\n          });\n          // Mouse.\n          SVG.on(window, 'mousemove.resize', function (e) {\n              _this.update(e || window.event);\n          });\n          SVG.on(window, 'mouseup.resize', function () {\n              _this.done();\n          });\n\n      };\n\n      // The update-function redraws the element every time the mouse is moving\n      ResizeHandler.prototype.update = function (event) {\n\n          if (!event) {\n              if (this.lastUpdateCall) {\n                  this.calc(this.lastUpdateCall[0], this.lastUpdateCall[1]);\n              }\n              return;\n          }\n\n          // Calculate the difference between the mouseposition at start and now\n          var txPt = this._extractPosition(event);\n          var p = this.transformPoint(txPt.x, txPt.y);\n\n          var diffX = p.x - this.parameters.p.x,\n              diffY = p.y - this.parameters.p.y;\n\n          this.lastUpdateCall = [diffX, diffY];\n\n          // Calculate the new position and height / width of the element\n          this.calc(diffX, diffY);\n\n         // Emit an event to say we have changed.\n          this.el.fire('resizing', {dx: diffX, dy: diffY, event: event});\n      };\n\n      // Is called on mouseup.\n      // Removes the update-function from the mousemove event\n      ResizeHandler.prototype.done = function () {\n          this.lastUpdateCall = null;\n          SVG.off(window, 'mousemove.resize');\n          SVG.off(window, 'mouseup.resize');\n          SVG.off(window, 'touchmove.resize');\n          SVG.off(window, 'touchend.resize');\n          this.el.fire('resizedone');\n      };\n\n      // The flag is used to determine whether the resizing is used with a left-Point (first bit) and top-point (second bit)\n      // In this cases the temp-values are calculated differently\n      ResizeHandler.prototype.snapToGrid = function (diffX, diffY, flag, pointCoordsY) {\n\n          var temp;\n\n          // If `pointCoordsY` is given, a single Point has to be snapped (deepSelect). That's why we need a different temp-value\n          if (typeof pointCoordsY !== 'undefined') {\n              // Note that flag = pointCoordsX in this case\n              temp = [(flag + diffX) % this.options.snapToGrid, (pointCoordsY + diffY) % this.options.snapToGrid];\n          } else {\n              // We check if the flag is set and if not we set a default-value (both bits set - which means upper-left-edge)\n              flag = flag == null ? 1 | 1 << 1 : flag;\n              temp = [(this.parameters.box.x + diffX + (flag & 1 ? 0 : this.parameters.box.width)) % this.options.snapToGrid, (this.parameters.box.y + diffY + (flag & (1 << 1) ? 0 : this.parameters.box.height)) % this.options.snapToGrid];\n          }\n\n          if(diffX < 0) {\n              temp[0] -= this.options.snapToGrid;\n          }\n          if(diffY < 0) {\n              temp[1] -= this.options.snapToGrid;\n          }\n\n          diffX -= (Math.abs(temp[0]) < this.options.snapToGrid / 2 ?\n                    temp[0] :\n                    temp[0] - (diffX < 0 ? -this.options.snapToGrid : this.options.snapToGrid));\n          diffY -= (Math.abs(temp[1]) < this.options.snapToGrid / 2 ?\n                    temp[1] :\n                    temp[1] - (diffY < 0 ? -this.options.snapToGrid : this.options.snapToGrid));\n\n          return this.constraintToBox(diffX, diffY, flag, pointCoordsY);\n\n      };\n\n      // keep element within constrained box\n      ResizeHandler.prototype.constraintToBox = function (diffX, diffY, flag, pointCoordsY) {\n          //return [diffX, diffY]\n          var c = this.options.constraint || {};\n          var orgX, orgY;\n\n          if (typeof pointCoordsY !== 'undefined') {\n            orgX = flag;\n            orgY = pointCoordsY;\n          } else {\n            orgX = this.parameters.box.x + (flag & 1 ? 0 : this.parameters.box.width);\n            orgY = this.parameters.box.y + (flag & (1<<1) ? 0 : this.parameters.box.height);\n          }\n\n          if (typeof c.minX !== 'undefined' && orgX + diffX < c.minX) {\n            diffX = c.minX - orgX;\n          }\n\n          if (typeof c.maxX !== 'undefined' && orgX + diffX > c.maxX) {\n            diffX = c.maxX - orgX;\n          }\n\n          if (typeof c.minY !== 'undefined' && orgY + diffY < c.minY) {\n            diffY = c.minY - orgY;\n          }\n\n          if (typeof c.maxY !== 'undefined' && orgY + diffY > c.maxY) {\n            diffY = c.maxY - orgY;\n          }\n\n          return [diffX, diffY];\n      };\n\n      ResizeHandler.prototype.checkAspectRatio = function (snap, isReverse) {\n          if (!this.options.saveAspectRatio) {\n              return snap;\n          }\n\n          var updatedSnap = snap.slice();\n          var aspectRatio = this.parameters.box.width / this.parameters.box.height;\n          var newW = this.parameters.box.width + snap[0];\n          var newH = this.parameters.box.height - snap[1];\n          var newAspectRatio = newW / newH;\n\n          if (newAspectRatio < aspectRatio) {\n              // Height is too big. Adapt it\n              updatedSnap[1] = newW / aspectRatio - this.parameters.box.height;\n              isReverse && (updatedSnap[1] = -updatedSnap[1]);\n          } else if (newAspectRatio > aspectRatio) {\n              // Width is too big. Adapt it\n              updatedSnap[0] = this.parameters.box.width - newH * aspectRatio;\n              isReverse && (updatedSnap[0] = -updatedSnap[0]);\n          }\n\n          return updatedSnap;\n      };\n\n      SVG.extend(SVG.Element, {\n          // Resize element with mouse\n          resize: function (options) {\n\n              (this.remember('_resizeHandler') || new ResizeHandler(this)).init(options || {});\n\n              return this;\n\n          }\n\n      });\n\n      SVG.Element.prototype.resize.defaults = {\n          snapToAngle: 0.1,       // Specifies the speed the rotation is happening when moving the mouse\n          snapToGrid: 1,          // Snaps to a grid of `snapToGrid` Pixels\n          constraint: {},         // keep element within constrained box\n          saveAspectRatio: false  // Save aspect ratio when resizing using lt, rt, rb or lb points\n      };\n\n  }).call(this);\n  }());\n\n  function styleInject(css, ref) {\n    if ( ref === void 0 ) ref = {};\n    var insertAt = ref.insertAt;\n\n    if (!css || typeof document === 'undefined') { return; }\n\n    var head = document.head || document.getElementsByTagName('head')[0];\n    var style = document.createElement('style');\n    style.type = 'text/css';\n\n    if (insertAt === 'top') {\n      if (head.firstChild) {\n        head.insertBefore(style, head.firstChild);\n      } else {\n        head.appendChild(style);\n      }\n    } else {\n      head.appendChild(style);\n    }\n\n    if (style.styleSheet) {\n      style.styleSheet.cssText = css;\n    } else {\n      style.appendChild(document.createTextNode(css));\n    }\n  }\n\n  var css = \".apexcharts-canvas {\\n  position: relative;\\n  user-select: none;\\n  /* cannot give overflow: hidden as it will crop tooltips which overflow outside chart area */\\n}\\n\\n/* scrollbar is not visible by default for legend, hence forcing the visibility */\\n.apexcharts-canvas ::-webkit-scrollbar {\\n  -webkit-appearance: none;\\n  width: 6px;\\n}\\n.apexcharts-canvas ::-webkit-scrollbar-thumb {\\n  border-radius: 4px;\\n  background-color: rgba(0,0,0,.5);\\n  box-shadow: 0 0 1px rgba(255,255,255,.5);\\n  -webkit-box-shadow: 0 0 1px rgba(255,255,255,.5);\\n}\\n.apexcharts-canvas.dark {\\n  background: #343F57;\\n}\\n\\n.apexcharts-inner {\\n  position: relative;\\n}\\n\\n.legend-mouseover-inactive {\\n  transition: 0.15s ease all;\\n  opacity: 0.20;\\n}\\n\\n.apexcharts-series-collapsed {\\n  opacity: 0;\\n}\\n\\n.apexcharts-gridline, .apexcharts-text {\\n  pointer-events: none;\\n}\\n\\n.apexcharts-tooltip {\\n  border-radius: 5px;\\n  box-shadow: 2px 2px 6px -4px #999;\\n  cursor: default;\\n  font-size: 14px;\\n  left: 62px;\\n  opacity: 0;\\n  pointer-events: none;\\n  position: absolute;\\n  top: 20px;\\n  overflow: hidden;\\n  white-space: nowrap;\\n  z-index: 12;\\n  transition: 0.15s ease all;\\n}\\n.apexcharts-tooltip.light {\\n  border: 1px solid #e3e3e3;\\n  background: rgba(255, 255, 255, 0.96);\\n}\\n.apexcharts-tooltip.dark {\\n  color: #fff;\\n  background: rgba(30,30,30, 0.8);\\n}\\n.apexcharts-tooltip * {\\n  font-family: inherit;\\n}\\n\\n.apexcharts-tooltip .apexcharts-marker,\\n.apexcharts-area-series .apexcharts-area,\\n.apexcharts-line {\\n  pointer-events: none;\\n}\\n\\n.apexcharts-tooltip.active {\\n  opacity: 1;\\n  transition: 0.15s ease all;\\n}\\n\\n.apexcharts-tooltip-title {\\n  padding: 6px;\\n  font-size: 15px;\\n  margin-bottom: 4px;\\n}\\n.apexcharts-tooltip.light .apexcharts-tooltip-title {\\n  background: #ECEFF1;\\n  border-bottom: 1px solid #ddd;\\n}\\n.apexcharts-tooltip.dark .apexcharts-tooltip-title {\\n  background: rgba(0, 0, 0, 0.7);\\n  border-bottom: 1px solid #333;\\n}\\n\\n.apexcharts-tooltip-text-value,\\n.apexcharts-tooltip-text-z-value {\\n  display: inline-block;\\n  font-weight: 600;\\n  margin-left: 5px;\\n}\\n\\n.apexcharts-tooltip-text-z-label:empty,\\n.apexcharts-tooltip-text-z-value:empty {\\n  display: none;\\n}\\n\\n.apexcharts-tooltip-text-value, \\n.apexcharts-tooltip-text-z-value {\\n  font-weight: 600;\\n}\\n\\n.apexcharts-tooltip-marker {\\n  width: 12px;\\n  height: 12px;\\n  position: relative;\\n  top: 0px;\\n  margin-right: 10px;\\n  border-radius: 50%;\\n}\\n\\n.apexcharts-tooltip-series-group {\\n  padding: 0 10px;\\n  display: none;\\n  text-align: left;\\n  justify-content: left;\\n  align-items: center;\\n}\\n\\n.apexcharts-tooltip-series-group.active .apexcharts-tooltip-marker {\\n  opacity: 1;\\n}\\n.apexcharts-tooltip-series-group.active, .apexcharts-tooltip-series-group:last-child {\\n  padding-bottom: 4px;\\n}\\n.apexcharts-tooltip-series-group-hidden {\\n  opacity: 0;\\n  height: 0;\\n  line-height: 0;\\n  padding: 0 !important;\\n}\\n.apexcharts-tooltip-y-group {\\n  padding: 6px 0 5px;\\n}\\n.apexcharts-tooltip-candlestick {\\n  padding: 4px 8px;\\n}\\n.apexcharts-tooltip-candlestick > div {\\n  margin: 4px 0;\\n}\\n.apexcharts-tooltip-candlestick span.value {\\n  font-weight: bold;\\n}\\n\\n.apexcharts-tooltip-rangebar {\\n  padding: 5px 8px;\\n}\\n\\n.apexcharts-tooltip-rangebar .category {\\n  font-weight: 600;\\n  color: #777;\\n}\\n\\n.apexcharts-tooltip-rangebar .series-name {\\n  font-weight: bold;\\n  display: block;\\n  margin-bottom: 5px;\\n}\\n\\n.apexcharts-xaxistooltip {\\n  opacity: 0;\\n  padding: 9px 10px;\\n  pointer-events: none;\\n  color: #373d3f;\\n  font-size: 13px;\\n  text-align: center;\\n  border-radius: 2px;\\n  position: absolute;\\n  z-index: 10;\\n\\tbackground: #ECEFF1;\\n  border: 1px solid #90A4AE;\\n  transition: 0.15s ease all;\\n}\\n\\n.apexcharts-xaxistooltip.dark {\\n  background: rgba(0, 0, 0, 0.7);\\n  border: 1px solid rgba(0, 0, 0, 0.5);\\n  color: #fff;\\n}\\n\\n.apexcharts-xaxistooltip:after, .apexcharts-xaxistooltip:before {\\n\\tleft: 50%;\\n\\tborder: solid transparent;\\n\\tcontent: \\\" \\\";\\n\\theight: 0;\\n\\twidth: 0;\\n\\tposition: absolute;\\n\\tpointer-events: none;\\n}\\n\\n.apexcharts-xaxistooltip:after {\\n\\tborder-color: rgba(236, 239, 241, 0);\\n\\tborder-width: 6px;\\n\\tmargin-left: -6px;\\n}\\n.apexcharts-xaxistooltip:before {\\n\\tborder-color: rgba(144, 164, 174, 0);\\n\\tborder-width: 7px;\\n\\tmargin-left: -7px;\\n}\\n\\n.apexcharts-xaxistooltip-bottom:after, .apexcharts-xaxistooltip-bottom:before {\\n  bottom: 100%;\\n}\\n\\n.apexcharts-xaxistooltip-top:after, .apexcharts-xaxistooltip-top:before {\\n  top: 100%;\\n}\\n\\n.apexcharts-xaxistooltip-bottom:after {\\n  border-bottom-color: #ECEFF1;\\n}\\n.apexcharts-xaxistooltip-bottom:before {\\n  border-bottom-color: #90A4AE;\\n}\\n\\n.apexcharts-xaxistooltip-bottom.dark:after {\\n  border-bottom-color: rgba(0, 0, 0, 0.5);\\n}\\n.apexcharts-xaxistooltip-bottom.dark:before {\\n  border-bottom-color: rgba(0, 0, 0, 0.5);\\n}\\n\\n.apexcharts-xaxistooltip-top:after {\\n  border-top-color:#ECEFF1\\n}\\n.apexcharts-xaxistooltip-top:before {\\n  border-top-color: #90A4AE;\\n}\\n.apexcharts-xaxistooltip-top.dark:after {\\n  border-top-color:rgba(0, 0, 0, 0.5);\\n}\\n.apexcharts-xaxistooltip-top.dark:before {\\n  border-top-color: rgba(0, 0, 0, 0.5);\\n}\\n\\n\\n.apexcharts-xaxistooltip.active {\\n  opacity: 1;\\n  transition: 0.15s ease all;\\n}\\n\\n.apexcharts-yaxistooltip {\\n  opacity: 0;\\n  padding: 4px 10px;\\n  pointer-events: none;\\n  color: #373d3f;\\n  font-size: 13px;\\n  text-align: center;\\n  border-radius: 2px;\\n  position: absolute;\\n  z-index: 10;\\n\\tbackground: #ECEFF1;\\n  border: 1px solid #90A4AE;\\n}\\n\\n.apexcharts-yaxistooltip.dark {\\n  background: rgba(0, 0, 0, 0.7);\\n  border: 1px solid rgba(0, 0, 0, 0.5);\\n  color: #fff;\\n}\\n\\n.apexcharts-yaxistooltip:after, .apexcharts-yaxistooltip:before {\\n\\ttop: 50%;\\n\\tborder: solid transparent;\\n\\tcontent: \\\" \\\";\\n\\theight: 0;\\n\\twidth: 0;\\n\\tposition: absolute;\\n\\tpointer-events: none;\\n}\\n.apexcharts-yaxistooltip:after {\\n\\tborder-color: rgba(236, 239, 241, 0);\\n\\tborder-width: 6px;\\n\\tmargin-top: -6px;\\n}\\n.apexcharts-yaxistooltip:before {\\n\\tborder-color: rgba(144, 164, 174, 0);\\n\\tborder-width: 7px;\\n\\tmargin-top: -7px;\\n}\\n\\n.apexcharts-yaxistooltip-left:after, .apexcharts-yaxistooltip-left:before {\\n  left: 100%;\\n}\\n\\n.apexcharts-yaxistooltip-right:after, .apexcharts-yaxistooltip-right:before {\\n  right: 100%;\\n}\\n\\n.apexcharts-yaxistooltip-left:after {\\n  border-left-color: #ECEFF1;\\n}\\n.apexcharts-yaxistooltip-left:before {\\n  border-left-color: #90A4AE;\\n}\\n.apexcharts-yaxistooltip-left.dark:after {\\n  border-left-color: rgba(0, 0, 0, 0.5);\\n}\\n.apexcharts-yaxistooltip-left.dark:before {\\n  border-left-color: rgba(0, 0, 0, 0.5);\\n}\\n\\n.apexcharts-yaxistooltip-right:after {\\n  border-right-color: #ECEFF1;\\n}\\n.apexcharts-yaxistooltip-right:before {\\n  border-right-color: #90A4AE;\\n}\\n.apexcharts-yaxistooltip-right.dark:after {\\n  border-right-color: rgba(0, 0, 0, 0.5);\\n}\\n.apexcharts-yaxistooltip-right.dark:before {\\n  border-right-color: rgba(0, 0, 0, 0.5);\\n}\\n\\n.apexcharts-yaxistooltip.active {\\n  opacity: 1;\\n}\\n.apexcharts-yaxistooltip-hidden {\\n  display: none;\\n}\\n\\n.apexcharts-xcrosshairs, .apexcharts-ycrosshairs {\\n  pointer-events: none;\\n  opacity: 0;\\n  transition: 0.15s ease all;\\n}\\n\\n.apexcharts-xcrosshairs.active, .apexcharts-ycrosshairs.active {\\n  opacity: 1;\\n  transition: 0.15s ease all;\\n}\\n\\n.apexcharts-ycrosshairs-hidden {\\n  opacity: 0;\\n}\\n\\n.apexcharts-zoom-rect {\\n  pointer-events: none;\\n}\\n.apexcharts-selection-rect {\\n  cursor: move;\\n}\\n\\n.svg_select_points, .svg_select_points_rot {\\n  opacity: 0;\\n  visibility: hidden;\\n}\\n.svg_select_points_l, .svg_select_points_r {\\n  cursor: ew-resize;\\n  opacity: 1;\\n  visibility: visible;\\n  fill: #888;\\n}\\n.apexcharts-canvas.zoomable .hovering-zoom {\\n  cursor: crosshair\\n}\\n.apexcharts-canvas.zoomable .hovering-pan {\\n  cursor: move\\n}\\n\\n.apexcharts-xaxis,\\n.apexcharts-yaxis {\\n  pointer-events: none;\\n}\\n\\n.apexcharts-zoom-icon, \\n.apexcharts-zoom-in-icon,\\n.apexcharts-zoom-out-icon,\\n.apexcharts-reset-zoom-icon, \\n.apexcharts-pan-icon, \\n.apexcharts-selection-icon,\\n.apexcharts-menu-icon, \\n.apexcharts-toolbar-custom-icon {\\n  cursor: pointer;\\n  width: 20px;\\n  height: 20px;\\n  line-height: 24px;\\n  color: #6E8192;\\n  text-align: center;\\n}\\n\\n\\n.apexcharts-zoom-icon svg, \\n.apexcharts-zoom-in-icon svg,\\n.apexcharts-zoom-out-icon svg,\\n.apexcharts-reset-zoom-icon svg,\\n.apexcharts-menu-icon svg {\\n  fill: #6E8192;\\n}\\n.apexcharts-selection-icon svg {\\n  fill: #444;\\n  transform: scale(0.76)\\n}\\n\\n.dark .apexcharts-zoom-icon svg, \\n.dark .apexcharts-zoom-in-icon svg,\\n.dark .apexcharts-zoom-out-icon svg,\\n.dark .apexcharts-reset-zoom-icon svg, \\n.dark .apexcharts-pan-icon svg, \\n.dark .apexcharts-selection-icon svg,\\n.dark .apexcharts-menu-icon svg, \\n.dark .apexcharts-toolbar-custom-icon svg{\\n  fill: #f3f4f5;\\n}\\n\\n.apexcharts-canvas .apexcharts-zoom-icon.selected svg, \\n.apexcharts-canvas .apexcharts-selection-icon.selected svg, \\n.apexcharts-canvas .apexcharts-reset-zoom-icon.selected svg {\\n  fill: #008FFB;\\n}\\n.light .apexcharts-selection-icon:not(.selected):hover svg,\\n.light .apexcharts-zoom-icon:not(.selected):hover svg, \\n.light .apexcharts-zoom-in-icon:hover svg, \\n.light .apexcharts-zoom-out-icon:hover svg, \\n.light .apexcharts-reset-zoom-icon:hover svg, \\n.light .apexcharts-menu-icon:hover svg {\\n  fill: #333;\\n}\\n\\n.apexcharts-selection-icon, .apexcharts-menu-icon {\\n  position: relative;\\n}\\n.apexcharts-reset-zoom-icon {\\n  margin-left: 5px;\\n}\\n.apexcharts-zoom-icon, .apexcharts-reset-zoom-icon, .apexcharts-menu-icon {\\n  transform: scale(0.85);\\n}\\n\\n.apexcharts-zoom-in-icon, .apexcharts-zoom-out-icon {\\n  transform: scale(0.7)\\n}\\n\\n.apexcharts-zoom-out-icon {\\n  margin-right: 3px;\\n}\\n\\n.apexcharts-pan-icon {\\n  transform: scale(0.62);\\n  position: relative;\\n  left: 1px;\\n  top: 0px;\\n}\\n.apexcharts-pan-icon svg {\\n  fill: #fff;\\n  stroke: #6E8192;\\n  stroke-width: 2;\\n}\\n.apexcharts-pan-icon.selected svg {\\n  stroke: #008FFB;\\n}\\n.apexcharts-pan-icon:not(.selected):hover svg {\\n  stroke: #333;\\n}\\n\\n.apexcharts-toolbar {\\n  position: absolute;\\n  z-index: 11;\\n  top: 0px;\\n  right: 3px;\\n  max-width: 176px;\\n  text-align: right;\\n  border-radius: 3px;\\n  padding: 0px 6px 2px 6px;\\n  display: flex;\\n  justify-content: space-between;\\n  align-items: center; \\n}\\n\\n.apexcharts-toolbar svg {\\n  pointer-events: none;\\n}\\n\\n.apexcharts-menu {\\n  background: #fff;\\n  position: absolute;\\n  top: 100%;\\n  border: 1px solid #ddd;\\n  border-radius: 3px;\\n  padding: 3px;\\n  right: 10px;\\n  opacity: 0;\\n  min-width: 110px;\\n  transition: 0.15s ease all;\\n  pointer-events: none;\\n}\\n\\n.apexcharts-menu.open {\\n  opacity: 1;\\n  pointer-events: all;\\n  transition: 0.15s ease all;\\n}\\n\\n.apexcharts-menu-item {\\n  padding: 6px 7px;\\n  font-size: 12px;\\n  cursor: pointer;\\n}\\n.light .apexcharts-menu-item:hover {\\n  background: #eee;\\n}\\n.dark .apexcharts-menu {\\n  background: rgba(0, 0, 0, 0.7);\\n  color: #fff;\\n}\\n\\n@media screen and (min-width: 768px) {\\n  .apexcharts-toolbar {\\n    /*opacity: 0;*/\\n  }\\n\\n  .apexcharts-canvas:hover .apexcharts-toolbar {\\n    opacity: 1;\\n  } \\n}\\n\\n.apexcharts-datalabel.hidden {\\n  opacity: 0;\\n}\\n\\n.apexcharts-pie-label,\\n.apexcharts-datalabel, .apexcharts-datalabel-label, .apexcharts-datalabel-value {\\n  cursor: default;\\n  pointer-events: none;\\n}\\n\\n.apexcharts-pie-label-delay {\\n  opacity: 0;\\n  animation-name: opaque;\\n  animation-duration: 0.3s;\\n  animation-fill-mode: forwards;\\n  animation-timing-function: ease;\\n}\\n\\n.apexcharts-canvas .hidden {\\n  opacity: 0;\\n}\\n\\n.apexcharts-hide .apexcharts-series-points {\\n  opacity: 0;\\n}\\n\\n.apexcharts-area-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events,\\n.apexcharts-line-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events, .apexcharts-radar-series path, .apexcharts-radar-series polygon {\\n  pointer-events: none;\\n}\\n\\n/* markers */\\n\\n.apexcharts-marker {\\n  transition: 0.15s ease all;\\n}\\n\\n@keyframes opaque {\\n  0% {\\n    opacity: 0;\\n  }\\n  100% {\\n    opacity: 1;\\n  }\\n}\";\n  styleInject(css);\n\n  /*\n   * classList.js: Cross-browser full element.classList implementation.\n   * 1.2.20171210\n   *\n   * By Eli Grey, http://eligrey.com\n   * License: Dedicated to the public domain.\n   *   See https://github.com/eligrey/classList.js/blob/master/LICENSE.md\n   */\n\n  /*global self, document, DOMException */\n\n  /*! @source http://purl.eligrey.com/github/classList.js/blob/master/classList.js */\n  if (\"document\" in self) {\n    // Full polyfill for browsers with no classList support\n    // Including IE < Edge missing SVGElement.classList\n    if (!(\"classList\" in document.createElement(\"_\")) || document.createElementNS && !(\"classList\" in document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\"))) {\n      (function (view) {\n\n        if (!('Element' in view)) return;\n\n        var classListProp = \"classList\",\n            protoProp = \"prototype\",\n            elemCtrProto = view.Element[protoProp],\n            objCtr = Object,\n            strTrim = String[protoProp].trim || function () {\n          return this.replace(/^\\s+|\\s+$/g, \"\");\n        },\n            arrIndexOf = Array[protoProp].indexOf || function (item) {\n          var i = 0,\n              len = this.length;\n\n          for (; i < len; i++) {\n            if (i in this && this[i] === item) {\n              return i;\n            }\n          }\n\n          return -1;\n        } // Vendors: please allow content code to instantiate DOMExceptions\n        ,\n            DOMEx = function DOMEx(type, message) {\n          this.name = type;\n          this.code = DOMException[type];\n          this.message = message;\n        },\n            checkTokenAndGetIndex = function checkTokenAndGetIndex(classList, token) {\n          if (token === \"\") {\n            throw new DOMEx(\"SYNTAX_ERR\", \"The token must not be empty.\");\n          }\n\n          if (/\\s/.test(token)) {\n            throw new DOMEx(\"INVALID_CHARACTER_ERR\", \"The token must not contain space characters.\");\n          }\n\n          return arrIndexOf.call(classList, token);\n        },\n            ClassList = function ClassList(elem) {\n          var trimmedClasses = strTrim.call(elem.getAttribute(\"class\") || \"\"),\n              classes = trimmedClasses ? trimmedClasses.split(/\\s+/) : [],\n              i = 0,\n              len = classes.length;\n\n          for (; i < len; i++) {\n            this.push(classes[i]);\n          }\n\n          this._updateClassName = function () {\n            elem.setAttribute(\"class\", this.toString());\n          };\n        },\n            classListProto = ClassList[protoProp] = [],\n            classListGetter = function classListGetter() {\n          return new ClassList(this);\n        }; // Most DOMException implementations don't allow calling DOMException's toString()\n        // on non-DOMExceptions. Error's toString() is sufficient here.\n\n\n        DOMEx[protoProp] = Error[protoProp];\n\n        classListProto.item = function (i) {\n          return this[i] || null;\n        };\n\n        classListProto.contains = function (token) {\n          return ~checkTokenAndGetIndex(this, token + \"\");\n        };\n\n        classListProto.add = function () {\n          var tokens = arguments,\n              i = 0,\n              l = tokens.length,\n              token,\n              updated = false;\n\n          do {\n            token = tokens[i] + \"\";\n\n            if (!~checkTokenAndGetIndex(this, token)) {\n              this.push(token);\n              updated = true;\n            }\n          } while (++i < l);\n\n          if (updated) {\n            this._updateClassName();\n          }\n        };\n\n        classListProto.remove = function () {\n          var tokens = arguments,\n              i = 0,\n              l = tokens.length,\n              token,\n              updated = false,\n              index;\n\n          do {\n            token = tokens[i] + \"\";\n            index = checkTokenAndGetIndex(this, token);\n\n            while (~index) {\n              this.splice(index, 1);\n              updated = true;\n              index = checkTokenAndGetIndex(this, token);\n            }\n          } while (++i < l);\n\n          if (updated) {\n            this._updateClassName();\n          }\n        };\n\n        classListProto.toggle = function (token, force) {\n          var result = this.contains(token),\n              method = result ? force !== true && \"remove\" : force !== false && \"add\";\n\n          if (method) {\n            this[method](token);\n          }\n\n          if (force === true || force === false) {\n            return force;\n          } else {\n            return !result;\n          }\n        };\n\n        classListProto.replace = function (token, replacement_token) {\n          var index = checkTokenAndGetIndex(token + \"\");\n\n          if (~index) {\n            this.splice(index, 1, replacement_token);\n\n            this._updateClassName();\n          }\n        };\n\n        classListProto.toString = function () {\n          return this.join(\" \");\n        };\n\n        if (objCtr.defineProperty) {\n          var classListPropDesc = {\n            get: classListGetter,\n            enumerable: true,\n            configurable: true\n          };\n\n          try {\n            objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc);\n          } catch (ex) {\n            // IE 8 doesn't support enumerable:true\n            // adding undefined to fight this issue https://github.com/eligrey/classList.js/issues/36\n            // modernie IE8-MSW7 machine has IE8 8.0.6001.18702 and is affected\n            if (ex.number === undefined || ex.number === -0x7FF5EC54) {\n              classListPropDesc.enumerable = false;\n              objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc);\n            }\n          }\n        } else if (objCtr[protoProp].__defineGetter__) {\n          elemCtrProto.__defineGetter__(classListProp, classListGetter);\n        }\n      })(self);\n    } // There is full or partial native classList support, so just check if we need\n    // to normalize the add/remove and toggle APIs.\n\n\n    (function () {\n\n      var testElement = document.createElement(\"_\");\n      testElement.classList.add(\"c1\", \"c2\"); // Polyfill for IE 10/11 and Firefox <26, where classList.add and\n      // classList.remove exist but support only one argument at a time.\n\n      if (!testElement.classList.contains(\"c2\")) {\n        var createMethod = function createMethod(method) {\n          var original = DOMTokenList.prototype[method];\n\n          DOMTokenList.prototype[method] = function (token) {\n            var i,\n                len = arguments.length;\n\n            for (i = 0; i < len; i++) {\n              token = arguments[i];\n              original.call(this, token);\n            }\n          };\n        };\n\n        createMethod('add');\n        createMethod('remove');\n      }\n\n      testElement.classList.toggle(\"c3\", false); // Polyfill for IE 10 and Firefox <24, where classList.toggle does not\n      // support the second argument.\n\n      if (testElement.classList.contains(\"c3\")) {\n        var _toggle = DOMTokenList.prototype.toggle;\n\n        DOMTokenList.prototype.toggle = function (token, force) {\n          if (1 in arguments && !this.contains(token) === !force) {\n            return force;\n          } else {\n            return _toggle.call(this, token);\n          }\n        };\n      } // replace() polyfill\n\n\n      if (!(\"replace\" in document.createElement(\"_\").classList)) {\n        DOMTokenList.prototype.replace = function (token, replacement_token) {\n          var tokens = this.toString().split(\" \"),\n              index = tokens.indexOf(token + \"\");\n\n          if (~index) {\n            tokens = tokens.slice(index);\n            this.remove.apply(this, tokens);\n            this.add(replacement_token);\n            this.add.apply(this, tokens.slice(1));\n          }\n        };\n      }\n\n      testElement = null;\n    })();\n  }\n\n  /**\n  * Detect Element Resize\n  *\n  * https://github.com/sdecima/javascript-detect-element-resize\n  * Sebastian Decima\n  *\n  * version: 0.5.3\n  **/\n  (function () {\n    var stylesCreated = false;\n\n    function resetTriggers(element) {\n      var triggers = element.__resizeTriggers__,\n          expand = triggers.firstElementChild,\n          contract = triggers.lastElementChild,\n          expandChild = expand.firstElementChild;\n      contract.scrollLeft = contract.scrollWidth;\n      contract.scrollTop = contract.scrollHeight;\n      expandChild.style.width = expand.offsetWidth + 1 + 'px';\n      expandChild.style.height = expand.offsetHeight + 1 + 'px';\n      expand.scrollLeft = expand.scrollWidth;\n      expand.scrollTop = expand.scrollHeight;\n    }\n\n    function checkTriggers(element) {\n      return element.offsetWidth != element.__resizeLast__.width || element.offsetHeight != element.__resizeLast__.height;\n    }\n\n    function scrollListener(e) {\n      var element = this;\n      resetTriggers(this);\n      if (this.__resizeRAF__) cancelFrame(this.__resizeRAF__);\n      this.__resizeRAF__ = requestFrame(function () {\n        if (checkTriggers(element)) {\n          element.__resizeLast__.width = element.offsetWidth;\n          element.__resizeLast__.height = element.offsetHeight;\n\n          element.__resizeListeners__.forEach(function (fn) {\n            fn.call(e);\n          });\n        }\n      });\n    }\n\n    function createStyles() {\n      if (!stylesCreated) {\n        // opacity:0 works around a chrome bug https://code.google.com/p/chromium/issues/detail?id=286360\n        var css = (animationKeyframes || '') + '.resize-triggers { ' + (animationStyle || '') + 'visibility: hidden; opacity: 0; } ' + '.resize-triggers, .resize-triggers > div, .contract-trigger:before { content: \\\" \\\"; display: block; position: absolute; top: 0; left: 0; height: 100%; width: 100%; overflow: hidden; } .resize-triggers > div { background: #eee; overflow: auto; } .contract-trigger:before { width: 200%; height: 200%; }',\n            head = document.head || document.getElementsByTagName('head')[0],\n            style = document.createElement('style');\n        style.type = 'text/css';\n\n        if (style.styleSheet) {\n          style.styleSheet.cssText = css;\n        } else {\n          style.appendChild(document.createTextNode(css));\n        }\n\n        head.appendChild(style);\n        stylesCreated = true;\n      }\n    }\n\n    var requestFrame = function () {\n      var raf = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || function (fn) {\n        return window.setTimeout(fn, 20);\n      };\n\n      return function (fn) {\n        return raf(fn);\n      };\n    }();\n\n    var cancelFrame = function () {\n      var cancel = window.cancelAnimationFrame || window.mozCancelAnimationFrame || window.webkitCancelAnimationFrame || window.clearTimeout;\n      return function (id) {\n        return cancel(id);\n      };\n    }();\n    /* Detect CSS Animations support to detect element display/re-attach */\n\n\n    var animation = false,\n        keyframeprefix = '',\n        animationstartevent = 'animationstart',\n        domPrefixes = 'Webkit Moz O ms'.split(' '),\n        startEvents = 'webkitAnimationStart animationstart oAnimationStart MSAnimationStart'.split(' '),\n        pfx = '';\n    {\n      var elm = document.createElement('fakeelement');\n\n      if (elm.style.animationName !== undefined) {\n        animation = true;\n      }\n\n      if (animation === false) {\n        for (var i = 0; i < domPrefixes.length; i++) {\n          if (elm.style[domPrefixes[i] + 'AnimationName'] !== undefined) {\n            pfx = domPrefixes[i];\n            keyframeprefix = '-' + pfx.toLowerCase() + '-';\n            animationstartevent = startEvents[i];\n            break;\n          }\n        }\n      }\n    }\n    var animationName = 'resizeanim';\n    var animationKeyframes = '@' + keyframeprefix + 'keyframes ' + animationName + ' { from { opacity: 0; } to { opacity: 0; } } ';\n    var animationStyle = keyframeprefix + 'animation: 1ms ' + animationName + '; ';\n\n    window.addResizeListener = function (element, fn) {\n      if (!element.__resizeTriggers__) {\n        if (getComputedStyle(element).position == 'static') element.style.position = 'relative';\n        createStyles();\n        element.__resizeLast__ = {};\n        element.__resizeListeners__ = [];\n        (element.__resizeTriggers__ = document.createElement('div')).className = 'resize-triggers';\n        element.__resizeTriggers__.innerHTML = '<div class=\"expand-trigger\"><div></div></div>' + '<div class=\"contract-trigger\"></div>';\n        element.appendChild(element.__resizeTriggers__);\n        resetTriggers(element);\n        element.addEventListener('scroll', scrollListener, true);\n        /* Listen for a css animation to detect element display/re-attach */\n\n        animationstartevent && element.__resizeTriggers__.addEventListener(animationstartevent, function (e) {\n          if (e.animationName == animationName) {\n            resetTriggers(element);\n          }\n        });\n      }\n\n      element.__resizeListeners__.push(fn);\n    };\n\n    window.removeResizeListener = function (element, fn) {\n      if (element) {\n        element.__resizeListeners__.splice(element.__resizeListeners__.indexOf(fn), 1);\n\n        if (!element.__resizeListeners__.length) {\n          element.removeEventListener('scroll', scrollListener);\n          element.__resizeTriggers__ = !element.removeChild(element.__resizeTriggers__);\n        }\n      }\n    };\n  })();\n\n  window.Apex = {};\n  /**\n   *\n   * @module ApexCharts\n   **/\n\n  var ApexCharts$1 =\n  /*#__PURE__*/\n  function () {\n    function ApexCharts(el, opts) {\n      _classCallCheck(this, ApexCharts);\n\n      this.opts = opts;\n      this.ctx = this; // Pass the user supplied options to the Base Class where these options will be extended with defaults. The returned object from Base Class will become the config object in the entire codebase.\n\n      this.w = new Base(opts).init();\n      this.el = el;\n      this.w.globals.cuid = (Math.random() + 1).toString(36).substring(4);\n      this.w.globals.chartID = this.w.config.chart.id ? this.w.config.chart.id : this.w.globals.cuid;\n      this.eventList = ['mousedown', 'mousemove', 'touchstart', 'touchmove', 'mouseup', 'touchend'];\n      this.initModules();\n      this.create = Utils.bind(this.create, this);\n      this.documentEvent = Utils.bind(this.documentEvent, this);\n      this.windowResizeHandler = this.windowResize.bind(this);\n    }\n    /**\n     * The primary method user will call to render the chart.\n     */\n\n\n    _createClass(ApexCharts, [{\n      key: \"render\",\n      value: function render() {\n        var _this = this;\n\n        // main method\n        return new Promise$1(function (resolve, reject) {\n          // only draw chart, if element found\n          if (_this.el !== null) {\n            if (typeof Apex._chartInstances === 'undefined') {\n              Apex._chartInstances = [];\n            }\n\n            if (_this.w.config.chart.id) {\n              Apex._chartInstances.push({\n                id: _this.w.globals.chartID,\n                group: _this.w.config.chart.group,\n                chart: _this\n              });\n            } // set the locale here\n\n\n            _this.setLocale(_this.w.config.chart.defaultLocale);\n\n            var beforeMount = _this.w.config.chart.events.beforeMount;\n\n            if (typeof beforeMount === 'function') {\n              beforeMount(_this, _this.w);\n            }\n\n            _this.fireEvent('beforeMount', [_this, _this.w]);\n\n            window.addEventListener('resize', _this.windowResizeHandler);\n            window.addResizeListener(_this.el.parentNode, _this.parentResizeCallback.bind(_this));\n\n            var graphData = _this.create(_this.w.config.series, {});\n\n            if (!graphData) return resolve(_this);\n\n            _this.mount(graphData).then(function () {\n              resolve(graphData);\n\n              if (typeof _this.w.config.chart.events.mounted === 'function') {\n                _this.w.config.chart.events.mounted(_this, _this.w);\n              }\n\n              _this.fireEvent('mounted', [_this, _this.w]);\n            }).catch(function (e) {\n              reject(e); // handle error in case no data or element not found\n            });\n          } else {\n            reject(new Error('Element not found'));\n          }\n        });\n      }\n    }, {\n      key: \"initModules\",\n      value: function initModules() {\n        this.animations = new Animations(this);\n        this.core = new Core(this.el, this);\n        this.grid = new Grid(this);\n        this.coreUtils = new CoreUtils(this);\n        this.config = new Config({});\n        this.crosshairs = new Crosshairs(this);\n        this.options = new Options();\n        this.responsive = new Responsive(this);\n        this.series = new Series(this);\n        this.theme = new Theme(this);\n        this.formatters = new Formatters(this);\n        this.titleSubtitle = new TitleSubtitle(this);\n        this.legend = new Legend(this);\n        this.toolbar = new Toolbar(this);\n        this.dimensions = new Dimensions(this);\n        this.zoomPanSelection = new ZoomPanSelection(this);\n        this.w.globals.tooltip = new Tooltip(this);\n      }\n    }, {\n      key: \"addEventListener\",\n      value: function addEventListener(name$$1, handler) {\n        var w = this.w;\n\n        if (w.globals.events.hasOwnProperty(name$$1)) {\n          w.globals.events[name$$1].push(handler);\n        } else {\n          w.globals.events[name$$1] = [handler];\n        }\n      }\n    }, {\n      key: \"removeEventListener\",\n      value: function removeEventListener(name$$1, handler) {\n        var w = this.w;\n\n        if (!w.globals.events.hasOwnProperty(name$$1)) {\n          return;\n        }\n\n        var index = w.globals.events[name$$1].indexOf(handler);\n\n        if (index !== -1) {\n          w.globals.events[name$$1].splice(index, 1);\n        }\n      }\n    }, {\n      key: \"fireEvent\",\n      value: function fireEvent(name$$1, args) {\n        var w = this.w;\n\n        if (!w.globals.events.hasOwnProperty(name$$1)) {\n          return;\n        }\n\n        if (!args || !args.length) {\n          args = [];\n        }\n\n        var evs = w.globals.events[name$$1];\n        var l = evs.length;\n\n        for (var i = 0; i < l; i++) {\n          evs[i].apply(null, args);\n        }\n      }\n    }, {\n      key: \"create\",\n      value: function create(ser, opts) {\n        var w = this.w;\n        this.initModules();\n        var gl = this.w.globals;\n        gl.noData = false;\n        gl.animationEnded = false;\n        this.responsive.checkResponsiveConfig(opts);\n\n        if (this.el === null) {\n          gl.animationEnded = true;\n          return null;\n        }\n\n        this.core.setupElements();\n\n        if (gl.svgWidth === 0) {\n          // if the element is hidden, skip drawing\n          gl.animationEnded = true;\n          return null;\n        }\n\n        var combo = CoreUtils.checkComboSeries(ser);\n        gl.comboCharts = combo.comboCharts;\n        gl.comboChartsHasBars = combo.comboChartsHasBars;\n\n        if (ser.length === 0 || ser.length === 1 && ser[0].data && ser[0].data.length === 0) {\n          this.series.handleNoData();\n        }\n\n        this.setupEventHandlers(); // Handle the data inputted by user and set some of the global variables (for eg, if data is datetime / numeric / category). Don't calculate the range / min / max at this time\n\n        this.core.parseData(ser); // this is a good time to set theme colors first\n\n        this.theme.init(); // as markers accepts array, we need to setup global markers for easier access\n\n        var markers = new Markers(this);\n        markers.setGlobalMarkerSize(); // labelFormatters should be called before dimensions as in dimensions we need text labels width\n\n        this.formatters.setLabelFormatters();\n        this.titleSubtitle.draw(); // legend is calculated here before coreCalculations because it affects the plottable area\n\n        if (!w.globals.noData) {\n          this.legend.init();\n        } // check whether in multiple series, all series share the same X\n\n\n        this.series.hasAllSeriesEqualX(); // coreCalculations will give the min/max range and yaxis/axis values. It should be called here to set series variable from config to globals\n\n        if (gl.axisCharts) {\n          this.core.coreCalculations();\n\n          if (w.config.xaxis.type !== 'category') {\n            // as we have minX and maxX values, determine the default DateTimeFormat for time series\n            this.formatters.setLabelFormatters();\n          }\n        } // we need to generate yaxis for heatmap separately as we are not showing numerics there, but seriesNames. There are some tweaks which are required for heatmap to align labels correctly which are done in below function\n        // Also we need to do this before calcuting Dimentions plotCoords() method of Dimensions\n\n\n        this.formatters.heatmapLabelFormatters(); // We got plottable area here, next task would be to calculate axis areas\n\n        this.dimensions.plotCoords();\n        var xyRatios = this.core.xySettings();\n        this.grid.createGridMask();\n        var elGraph = this.core.plotChartType(ser, xyRatios); // after all the drawing calculations, shift the graphical area (actual charts/bars) excluding legends\n\n        this.core.shiftGraphPosition();\n        var dim = {\n          plot: {\n            left: w.globals.translateX,\n            top: w.globals.translateY,\n            width: w.globals.gridWidth,\n            height: w.globals.gridHeight\n          }\n        };\n        return {\n          elGraph: elGraph,\n          xyRatios: xyRatios,\n          elInner: w.globals.dom.elGraphical,\n          dimensions: dim\n        };\n      }\n    }, {\n      key: \"mount\",\n      value: function mount() {\n        var graphData = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n        var me = this;\n        var w = me.w;\n        return new Promise$1(function (resolve, reject) {\n          // no data to display\n          if (me.el === null) {\n            return reject(new Error('Not enough data to display or target element not found'));\n          } else if (graphData === null || w.globals.allSeriesCollapsed) {\n            me.series.handleNoData();\n          }\n\n          me.annotations = new Annotations(me);\n          me.core.drawAxis(w.config.chart.type, graphData.xyRatios);\n          me.grid = new Grid(me);\n\n          if (w.config.grid.position === 'back') {\n            me.grid.drawGrid();\n          }\n\n          if (w.config.annotations.position === 'back') {\n            me.annotations.drawAnnotations();\n          }\n\n          if (graphData.elGraph instanceof Array) {\n            for (var g = 0; g < graphData.elGraph.length; g++) {\n              w.globals.dom.elGraphical.add(graphData.elGraph[g]);\n            }\n          } else {\n            w.globals.dom.elGraphical.add(graphData.elGraph);\n          }\n\n          if (w.config.grid.position === 'front') {\n            me.grid.drawGrid();\n          }\n\n          if (w.config.xaxis.crosshairs.position === 'front') {\n            me.crosshairs.drawXCrosshairs();\n          }\n\n          if (w.config.yaxis[0].crosshairs.position === 'front') {\n            me.crosshairs.drawYCrosshairs();\n          }\n\n          if (w.config.annotations.position === 'front') {\n            me.annotations.drawAnnotations();\n          }\n\n          if (!w.globals.noData) {\n            // draw tooltips at the end\n            if (w.config.tooltip.enabled && !w.globals.noData) {\n              me.w.globals.tooltip.drawTooltip(graphData.xyRatios);\n            }\n\n            if (w.globals.axisCharts && w.globals.isXNumeric) {\n              if (w.config.chart.zoom.enabled || w.config.chart.selection && w.config.chart.selection.enabled || w.config.chart.pan && w.config.chart.pan.enabled) {\n                me.zoomPanSelection.init({\n                  xyRatios: graphData.xyRatios\n                });\n              }\n            } else {\n              var tools = w.config.chart.toolbar.tools;\n              tools.zoom = false;\n              tools.zoomin = false;\n              tools.zoomout = false;\n              tools.selection = false;\n              tools.pan = false;\n              tools.reset = false;\n            }\n\n            if (w.config.chart.toolbar.show && !w.globals.allSeriesCollapsed) {\n              me.toolbar.createToolbar();\n            }\n          }\n\n          if (w.globals.memory.methodsToExec.length > 0) {\n            w.globals.memory.methodsToExec.forEach(function (fn) {\n              fn.method(fn.params, false, fn.context);\n            });\n          }\n\n          if (!w.globals.axisCharts && !w.globals.noData) {\n            me.core.resizeNonAxisCharts();\n          }\n\n          resolve(me);\n        });\n      }\n    }, {\n      key: \"clearPreviousPaths\",\n      value: function clearPreviousPaths() {\n        var w = this.w;\n        w.globals.previousPaths = [];\n        w.globals.allSeriesCollapsed = false;\n        w.globals.collapsedSeries = [];\n        w.globals.collapsedSeriesIndices = [];\n      }\n      /**\n       * Allows users to update Options after the chart has rendered.\n       *\n       * @param {object} options - A new config object can be passed which will be merged with the existing config object\n       * @param {boolean} redraw - should redraw from beginning or should use existing paths and redraw from there\n       * @param {boolean} animate - should animate or not on updating Options\n       */\n\n    }, {\n      key: \"updateOptions\",\n      value: function updateOptions(options$$1) {\n        var redraw = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n        var animate = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n        var updateSyncedCharts = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n        var overwriteInitialConfig = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n        var w = this.w;\n\n        if (options$$1.series) {\n          this.resetSeries(false);\n\n          if (options$$1.series.length && options$$1.series[0].data) {\n            options$$1.series = options$$1.series.map(function (s, i) {\n              return _objectSpread({}, w.config.series[i], {\n                name: s.name ? s.name : w.config.series[i] && w.config.series[i].name,\n                type: s.type ? s.type : w.config.series[i] && w.config.series[i].type,\n                data: s.data ? s.data : w.config.series[i] && w.config.series[i].data\n              });\n            });\n          } // user updated the series via updateOptions() function.\n          // Hence, we need to reset axis min/max to avoid zooming issues\n\n\n          this.revertDefaultAxisMinMax();\n        } // user has set x-axis min/max externally - hence we need to forcefully set the xaxis min/max\n\n\n        if (options$$1.xaxis) {\n          if (options$$1.xaxis.min || options$$1.xaxis.max) {\n            this.forceXAxisUpdate(options$$1);\n          }\n          /* fixes apexcharts.js#369 and react-apexcharts#46 */\n\n\n          if (options$$1.xaxis.categories && options$$1.xaxis.categories.length && w.config.xaxis.convertedCatToNumeric) {\n            options$$1 = Defaults.convertCatToNumeric(options$$1);\n          }\n        }\n\n        if (w.globals.collapsedSeriesIndices.length > 0) {\n          this.clearPreviousPaths();\n        }\n        /* update theme mode#459 */\n\n\n        if (options$$1.theme) {\n          options$$1 = this.theme.updateThemeOptions(options$$1);\n        }\n\n        return this._updateOptions(options$$1, redraw, animate, updateSyncedCharts, overwriteInitialConfig);\n      }\n      /**\n       * private method to update Options.\n       *\n       * @param {object} options - A new config object can be passed which will be merged with the existing config object\n       * @param {boolean} redraw - should redraw from beginning or should use existing paths and redraw from there\n       * @param {boolean} animate - should animate or not on updating Options\n       * @param {boolean} overwriteInitialConfig - should update the initial config or not\n       */\n\n    }, {\n      key: \"_updateOptions\",\n      value: function _updateOptions(options$$1) {\n        var redraw = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n        var animate = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n        var updateSyncedCharts = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n        var overwriteInitialConfig = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n        var charts = [this];\n\n        if (updateSyncedCharts) {\n          charts = this.getSyncedCharts();\n        }\n\n        if (this.w.globals.isExecCalled) {\n          // If the user called exec method, we don't want to get grouped charts as user specifically provided a chartID to update\n          charts = [this];\n          this.w.globals.isExecCalled = false;\n        }\n\n        charts.forEach(function (ch) {\n          var w = ch.w;\n          w.globals.shouldAnimate = animate;\n\n          if (!redraw) {\n            w.globals.resized = true;\n            w.globals.dataChanged = true;\n\n            if (animate) {\n              ch.series.getPreviousPaths();\n            }\n          }\n\n          if (options$$1 && _typeof(options$$1) === 'object') {\n            ch.config = new Config(options$$1);\n            options$$1 = CoreUtils.extendArrayProps(ch.config, options$$1);\n            w.config = Utils.extend(w.config, options$$1);\n\n            if (overwriteInitialConfig) {\n              // we need to forget the lastXAxis and lastYAxis is user forcefully overwriteInitialConfig. If we do not do this, and next time when user zooms the chart after setting yaxis.min/max or xaxis.min/max - the stored lastXAxis will never allow the chart to use the updated min/max by user.\n              w.globals.lastXAxis = [];\n              w.globals.lastYAxis = []; // After forgetting lastAxes, we need to restore the new config in initialConfig/initialSeries\n\n              w.globals.initialConfig = Utils.extend({}, w.config);\n              w.globals.initialSeries = JSON.parse(JSON.stringify(w.config.series));\n            }\n          }\n\n          return ch.update(options$$1);\n        });\n      }\n      /**\n       * Allows users to update Series after the chart has rendered.\n       *\n       * @param {array} series - New series which will override the existing\n       */\n\n    }, {\n      key: \"updateSeries\",\n      value: function updateSeries() {\n        var newSeries = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n        var animate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n        var overwriteInitialSeries = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n        this.resetSeries(false);\n        this.revertDefaultAxisMinMax();\n        return this._updateSeries(newSeries, animate, overwriteInitialSeries);\n      }\n      /**\n       * Allows users to append a new series after the chart has rendered.\n       *\n       * @param {array} newSerie - New serie which will be appended to the existing series\n       */\n\n    }, {\n      key: \"appendSeries\",\n      value: function appendSeries(newSerie) {\n        var animate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n        var overwriteInitialSeries = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n        var newSeries = this.w.config.series.slice();\n        newSeries.push(newSerie);\n        this.resetSeries(false);\n        this.revertDefaultAxisMinMax();\n        return this._updateSeries(newSeries, animate, overwriteInitialSeries);\n      }\n      /**\n       * Private method to update Series.\n       *\n       * @param {array} series - New series which will override the existing\n       */\n\n    }, {\n      key: \"_updateSeries\",\n      value: function _updateSeries(newSeries, animate) {\n        var overwriteInitialSeries = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n        var w = this.w;\n        this.w.globals.shouldAnimate = animate;\n        w.globals.dataChanged = true; // if user has collapsed some series with legend, we need to clear those\n\n        if (w.globals.allSeriesCollapsed) {\n          w.globals.allSeriesCollapsed = false;\n        }\n\n        if (animate) {\n          this.series.getPreviousPaths();\n        }\n\n        var existingSeries; // axis charts\n\n        if (w.globals.axisCharts) {\n          existingSeries = newSeries.map(function (s, i) {\n            return _objectSpread({}, w.config.series[i], {\n              name: s.name ? s.name : w.config.series[i] && w.config.series[i].name,\n              type: s.type ? s.type : w.config.series[i] && w.config.series[i].type,\n              data: s.data ? s.data : w.config.series[i] && w.config.series[i].data\n            });\n          });\n\n          if (existingSeries.length === 0) {\n            existingSeries = [{\n              data: []\n            }];\n          }\n\n          w.config.series = existingSeries;\n        } else {\n          // non-axis chart (pie/radialbar)\n          w.config.series = newSeries.slice();\n        }\n\n        if (overwriteInitialSeries) {\n          w.globals.initialConfig.series = JSON.parse(JSON.stringify(w.config.series));\n          w.globals.initialSeries = JSON.parse(JSON.stringify(w.config.series));\n        }\n\n        return this.update();\n      }\n      /**\n       * Get all charts in the same \"group\" (including the instance which is called upon) to sync them when user zooms in/out or pan.\n       */\n\n    }, {\n      key: \"getSyncedCharts\",\n      value: function getSyncedCharts() {\n        var chartGroups = this.getGroupedCharts();\n        var allCharts = [this];\n\n        if (chartGroups.length) {\n          allCharts = [];\n          chartGroups.forEach(function (ch) {\n            allCharts.push(ch);\n          });\n        }\n\n        return allCharts;\n      }\n      /**\n       * Get charts in the same \"group\" (excluding the instance which is called upon) to perform operations on the other charts of the same group (eg., tooltip hovering)\n       */\n\n    }, {\n      key: \"getGroupedCharts\",\n      value: function getGroupedCharts() {\n        var _this2 = this;\n\n        return Apex._chartInstances.filter(function (ch) {\n          if (ch.group) {\n            return true;\n          }\n        }).map(function (ch) {\n          return _this2.w.config.chart.group === ch.group ? ch.chart : _this2;\n        });\n      }\n      /**\n       * Allows users to append Data to series.\n       *\n       * @param {array} newData - New data in the same format as series\n       */\n\n    }, {\n      key: \"appendData\",\n      value: function appendData(newData) {\n        var overwriteInitialSeries = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n        var me = this;\n        me.w.globals.dataChanged = true;\n        me.series.getPreviousPaths();\n        var newSeries = me.w.config.series.slice();\n\n        for (var i = 0; i < newSeries.length; i++) {\n          if (typeof newData[i] !== 'undefined') {\n            for (var j = 0; j < newData[i].data.length; j++) {\n              newSeries[i].data.push(newData[i].data[j]);\n            }\n          }\n        }\n\n        me.w.config.series = newSeries;\n\n        if (overwriteInitialSeries) {\n          me.w.globals.initialSeries = JSON.parse(JSON.stringify(me.w.config.series));\n        }\n\n        return this.update();\n      }\n    }, {\n      key: \"update\",\n      value: function update(options$$1) {\n        var _this3 = this;\n\n        return new Promise$1(function (resolve, reject) {\n          _this3.clear();\n\n          var graphData = _this3.create(_this3.w.config.series, options$$1);\n\n          if (!graphData) return resolve(_this3);\n\n          _this3.mount(graphData).then(function () {\n            if (typeof _this3.w.config.chart.events.updated === 'function') {\n              _this3.w.config.chart.events.updated(_this3, _this3.w);\n            }\n\n            _this3.fireEvent('updated', [_this3, _this3.w]);\n\n            _this3.w.globals.isDirty = true;\n            resolve(_this3);\n          }).catch(function (e) {\n            reject(e);\n          });\n        });\n      }\n    }, {\n      key: \"forceXAxisUpdate\",\n      value: function forceXAxisUpdate(options$$1) {\n        var w = this.w;\n\n        if (typeof options$$1.xaxis.min !== 'undefined') {\n          w.config.xaxis.min = options$$1.xaxis.min;\n          w.globals.lastXAxis.min = options$$1.xaxis.min;\n        }\n\n        if (typeof options$$1.xaxis.max !== 'undefined') {\n          w.config.xaxis.max = options$$1.xaxis.max;\n          w.globals.lastXAxis.max = options$$1.xaxis.max;\n        }\n      }\n      /**\n       * This function reverts the yaxis and xaxis min/max values to what it was when the chart was defined.\n       * This function fixes an important bug where a user might load a new series after zooming in/out of previous series which resulted in wrong min/max\n       * Also, this should never be called internally on zoom/pan - the reset should only happen when user calls the updateSeries() function externally\n       */\n\n    }, {\n      key: \"revertDefaultAxisMinMax\",\n      value: function revertDefaultAxisMinMax() {\n        var w = this.w;\n        w.config.xaxis.min = w.globals.lastXAxis.min;\n        w.config.xaxis.max = w.globals.lastXAxis.max;\n        w.config.yaxis.map(function (yaxe, index) {\n          if (w.globals.zoomed) {\n            // if user has zoomed, and this function is called\n            // then we need to get the lastAxis min and max\n            if (typeof w.globals.lastYAxis[index] !== 'undefined') {\n              yaxe.min = w.globals.lastYAxis[index].min;\n              yaxe.max = w.globals.lastYAxis[index].max;\n            }\n          }\n        });\n      }\n    }, {\n      key: \"clear\",\n      value: function clear() {\n        if (this.zoomPanSelection) {\n          this.zoomPanSelection.destroy();\n        }\n\n        if (this.toolbar) {\n          this.toolbar.destroy();\n        }\n\n        this.animations = null;\n        this.annotations = null;\n        this.core = null;\n        this.grid = null;\n        this.series = null;\n        this.responsive = null;\n        this.theme = null;\n        this.formatters = null;\n        this.titleSubtitle = null;\n        this.legend = null;\n        this.dimensions = null;\n        this.options = null;\n        this.crosshairs = null;\n        this.zoomPanSelection = null;\n        this.toolbar = null;\n        this.w.globals.tooltip = null;\n        this.clearDomElements();\n      }\n    }, {\n      key: \"killSVG\",\n      value: function killSVG(draw) {\n        return new Promise$1(function (resolve, reject) {\n          draw.each(function (i, children) {\n            this.removeClass('*');\n            this.off();\n            this.stop();\n          }, true);\n          draw.ungroup();\n          draw.clear();\n          resolve('done');\n        });\n      }\n    }, {\n      key: \"clearDomElements\",\n      value: function clearDomElements() {\n        var _this4 = this;\n\n        // detach document event\n        this.eventList.forEach(function (event) {\n          document.removeEventListener(event, _this4.documentEvent);\n        });\n        var domEls = this.w.globals.dom;\n\n        if (this.el !== null) {\n          // remove all child elements - resetting the whole chart\n          while (this.el.firstChild) {\n            this.el.removeChild(this.el.firstChild);\n          }\n        }\n\n        this.killSVG(domEls.Paper);\n        domEls.Paper.remove();\n        domEls.elWrap = null;\n        domEls.elGraphical = null;\n        domEls.elLegendWrap = null;\n        domEls.baseEl = null;\n        domEls.elGridRect = null;\n        domEls.elGridRectMask = null;\n        domEls.elGridRectMarkerMask = null;\n        domEls.elDefs = null;\n      }\n      /**\n       * Destroy the chart instance by removing all elements which also clean up event listeners on those elements.\n       */\n\n    }, {\n      key: \"destroy\",\n      value: function destroy() {\n        this.clear(); // remove the chart's instance from the global Apex._chartInstances\n\n        var chartID = this.w.config.chart.id;\n\n        if (chartID) {\n          Apex._chartInstances.forEach(function (c, i) {\n            if (c.id === chartID) {\n              Apex._chartInstances.splice(i, 1);\n            }\n          });\n        }\n\n        window.removeEventListener('resize', this.windowResizeHandler);\n        window.removeResizeListener(this.el.parentNode, this.parentResizeCallback.bind(this));\n      }\n      /**\n       * Allows the user to provide data attrs in the element and the chart will render automatically when this method is called by searching for the elements containing 'data-apexcharts' attribute\n       */\n\n    }, {\n      key: \"toggleSeries\",\n      value: function toggleSeries(seriesName) {\n        var targetElement = this.series.getSeriesByName(seriesName);\n        var seriesCnt = parseInt(targetElement.getAttribute('data:realIndex'));\n        var isHidden = targetElement.classList.contains('apexcharts-series-collapsed');\n        this.legend.toggleDataSeries(seriesCnt, isHidden);\n      }\n    }, {\n      key: \"resetSeries\",\n      value: function resetSeries() {\n        var shouldUpdateChart = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n        this.series.resetSeries(shouldUpdateChart);\n      }\n    }, {\n      key: \"setupEventHandlers\",\n      value: function setupEventHandlers() {\n        var _this5 = this;\n\n        var w = this.w;\n        var me = this;\n        var clickableArea = w.globals.dom.baseEl.querySelector(w.globals.chartClass);\n        this.eventListHandlers = [];\n        this.eventList.forEach(function (event) {\n          clickableArea.addEventListener(event, function (e) {\n            var opts = Object.assign({}, w, {\n              seriesIndex: w.globals.capturedSeriesIndex,\n              dataPointIndex: w.globals.capturedDataPointIndex\n            });\n\n            if (e.type === 'mousemove' || e.type === 'touchmove') {\n              if (typeof w.config.chart.events.mouseMove === 'function') {\n                w.config.chart.events.mouseMove(e, me, opts);\n              }\n            } else if (e.type === 'mouseup' && e.which === 1 || e.type === 'touchend') {\n              if (typeof w.config.chart.events.click === 'function') {\n                w.config.chart.events.click(e, me, opts);\n              }\n\n              me.fireEvent('click', [e, me, opts]);\n            }\n          }, {\n            capture: false,\n            passive: true\n          });\n        });\n        this.eventList.forEach(function (event) {\n          document.addEventListener(event, _this5.documentEvent);\n        });\n        this.core.setupBrushHandler();\n      }\n    }, {\n      key: \"documentEvent\",\n      value: function documentEvent(e) {\n        var w = this.w;\n        w.globals.clientX = e.type === 'touchmove' ? e.touches[0].clientX : e.clientX;\n        w.globals.clientY = e.type === 'touchmove' ? e.touches[0].clientY : e.clientY;\n      }\n    }, {\n      key: \"addXaxisAnnotation\",\n      value: function addXaxisAnnotation(opts) {\n        var pushToMemory = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n        var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;\n        var me = this;\n\n        if (context) {\n          me = context;\n        }\n\n        me.annotations.addXaxisAnnotationExternal(opts, pushToMemory, me);\n      }\n    }, {\n      key: \"addYaxisAnnotation\",\n      value: function addYaxisAnnotation(opts) {\n        var pushToMemory = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n        var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;\n        var me = this;\n\n        if (context) {\n          me = context;\n        }\n\n        me.annotations.addYaxisAnnotationExternal(opts, pushToMemory, me);\n      }\n    }, {\n      key: \"addPointAnnotation\",\n      value: function addPointAnnotation(opts) {\n        var pushToMemory = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n        var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;\n        var me = this;\n\n        if (context) {\n          me = context;\n        }\n\n        me.annotations.addPointAnnotationExternal(opts, pushToMemory, me);\n      }\n    }, {\n      key: \"clearAnnotations\",\n      value: function clearAnnotations() {\n        var context = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined;\n        var me = this;\n\n        if (context) {\n          me = context;\n        }\n\n        me.annotations.clearAnnotations(me);\n      } // This method is never used internally and will be only called externally on the chart instance.\n      // Hence, we need to keep all these elements in memory when the chart gets updated and redraw again\n\n    }, {\n      key: \"addText\",\n      value: function addText(options$$1) {\n        var pushToMemory = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n        var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;\n        var me = this;\n\n        if (context) {\n          me = context;\n        }\n\n        me.annotations.addText(options$$1, pushToMemory, me);\n      }\n    }, {\n      key: \"getChartArea\",\n      value: function getChartArea() {\n        var el = this.w.globals.dom.baseEl.querySelector('.apexcharts-inner');\n        return el;\n      }\n    }, {\n      key: \"getSeriesTotalXRange\",\n      value: function getSeriesTotalXRange(minX, maxX) {\n        return this.coreUtils.getSeriesTotalsXRange(minX, maxX);\n      }\n    }, {\n      key: \"getHighestValueInSeries\",\n      value: function getHighestValueInSeries() {\n        var seriesIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n        var range = new Range$1(this.ctx);\n        var minYmaxY = range.getMinYMaxY(seriesIndex);\n        return minYmaxY.highestY;\n      }\n    }, {\n      key: \"getLowestValueInSeries\",\n      value: function getLowestValueInSeries() {\n        var seriesIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n        var range = new Range$1(this.ctx);\n        var minYmaxY = range.getMinYMaxY(seriesIndex);\n        return minYmaxY.lowestY;\n      }\n    }, {\n      key: \"getSeriesTotal\",\n      value: function getSeriesTotal() {\n        return this.w.globals.seriesTotals;\n      }\n    }, {\n      key: \"setLocale\",\n      value: function setLocale(localeName) {\n        this.setCurrentLocaleValues(localeName);\n      }\n    }, {\n      key: \"toggleDataPointSelection\",\n      value: function toggleDataPointSelection(seriesIndex, dataPointIndex) {\n        var w = this.w;\n        var elPath = null;\n\n        if (w.globals.axisCharts) {\n          elPath = w.globals.dom.Paper.select(\".apexcharts-series[data\\\\:realIndex='\".concat(seriesIndex, \"'] path[j='\").concat(dataPointIndex, \"'], .apexcharts-series[data\\\\:realIndex='\").concat(seriesIndex, \"'] circle[j='\").concat(dataPointIndex, \"'], .apexcharts-series[data\\\\:realIndex='\").concat(seriesIndex, \"'] rect[j='\").concat(dataPointIndex, \"']\")).members[0];\n        } else {\n          elPath = w.globals.dom.Paper.select(\".apexcharts-series[data\\\\:realIndex='\".concat(seriesIndex, \"']\")).members[0];\n\n          if (w.config.chart.type === 'pie' || w.config.chart.type === 'donut') {\n            var pie = new Pie(this.ctx);\n            pie.pieClicked(seriesIndex);\n          }\n        }\n\n        if (elPath) {\n          var graphics = new Graphics(this.ctx);\n          graphics.pathMouseDown(elPath, null);\n        } else {\n          console.warn('toggleDataPointSelection: Element not found');\n        }\n\n        return elPath.node ? elPath.node : null;\n      }\n    }, {\n      key: \"setCurrentLocaleValues\",\n      value: function setCurrentLocaleValues(localeName) {\n        var locales = this.w.config.chart.locales; // check if user has specified locales in global Apex variable\n        // if yes - then extend those with local chart's locale\n\n        if (window.Apex.chart && window.Apex.chart.locales && window.Apex.chart.locales.length > 0) {\n          locales = this.w.config.chart.locales.concat(window.Apex.chart.locales);\n        } // find the locale from the array of locales which user has set (either by chart.defaultLocale or by calling setLocale() method.)\n\n\n        var selectedLocale = locales.filter(function (c) {\n          return c.name === localeName;\n        })[0];\n\n        if (selectedLocale) {\n          // create a complete locale object by extending defaults so you don't get undefined errors.\n          var ret = Utils.extend(en, selectedLocale); // store these locale options in global var for ease access\n\n          this.w.globals.locale = ret.options;\n        } else {\n          throw new Error('Wrong locale name provided. Please make sure you set the correct locale name in options');\n        }\n      }\n    }, {\n      key: \"dataURI\",\n      value: function dataURI() {\n        var exp = new Exports(this.ctx);\n        return exp.dataURI();\n      }\n    }, {\n      key: \"paper\",\n      value: function paper() {\n        return this.w.globals.dom.Paper;\n      }\n    }, {\n      key: \"parentResizeCallback\",\n      value: function parentResizeCallback() {\n        if (this.w.globals.animationEnded) {\n          this.windowResize();\n        }\n      }\n      /**\n       * Handle window resize and re-draw the whole chart.\n       */\n\n    }, {\n      key: \"windowResize\",\n      value: function windowResize() {\n        var _this6 = this;\n\n        clearTimeout(this.w.globals.resizeTimer);\n        this.w.globals.resizeTimer = window.setTimeout(function () {\n          _this6.w.globals.resized = true;\n          _this6.w.globals.dataChanged = false; // we need to redraw the whole chart on window resize (with a small delay).\n\n          _this6.update();\n        }, 150);\n      }\n    }], [{\n      key: \"initOnLoad\",\n      value: function initOnLoad() {\n        var els = document.querySelectorAll('[data-apexcharts]');\n\n        for (var i = 0; i < els.length; i++) {\n          var el = els[i];\n          var options$$1 = JSON.parse(els[i].getAttribute('data-options'));\n          var apexChart = new ApexCharts(el, options$$1);\n          apexChart.render();\n        }\n      }\n      /**\n       * This static method allows users to call chart methods without necessarily from the\n       * instance of the chart in case user has assigned chartID to the targetted chart.\n       * The chartID is used for mapping the instance stored in Apex._chartInstances global variable\n       *\n       * This is helpful in cases when you don't have reference of the chart instance\n       * easily and need to call the method from anywhere.\n       * For eg, in React/Vue applications when you have many parent/child components,\n       * and need easy reference to other charts for performing dynamic operations\n       *\n       * @param {string} chartID - The unique identifier which will be used to call methods\n       * on that chart instance\n       * @param {function} fn - The method name to call\n       * @param {object} opts - The parameters which are accepted in the original method will be passed here in the same order.\n       */\n\n    }, {\n      key: \"exec\",\n      value: function exec(chartID, fn) {\n        var chart = this.getChartByID(chartID);\n        if (!chart) return; // turn on the global exec flag to indicate this method was called\n\n        chart.w.globals.isExecCalled = true;\n\n        for (var _len = arguments.length, opts = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n          opts[_key - 2] = arguments[_key];\n        }\n\n        switch (fn) {\n          case 'updateOptions':\n            {\n              return chart.updateOptions.apply(chart, opts);\n            }\n\n          case 'updateSeries':\n            {\n              return chart.updateSeries.apply(chart, opts);\n            }\n\n          case 'appendData':\n            {\n              return chart.appendData.apply(chart, opts);\n            }\n\n          case 'appendSeries':\n            {\n              return chart.appendSeries.apply(chart, opts);\n            }\n\n          case 'toggleSeries':\n            {\n              return chart.toggleSeries.apply(chart, opts);\n            }\n\n          case 'resetSeries':\n            {\n              return chart.resetSeries.apply(chart, opts);\n            }\n\n          case 'toggleDataPointSelection':\n            {\n              return chart.toggleDataPointSelection.apply(chart, opts);\n            }\n\n          case 'dataURI':\n            {\n              return chart.dataURI.apply(chart, opts);\n            }\n\n          case 'addXaxisAnnotation':\n            {\n              return chart.addXaxisAnnotation.apply(chart, opts);\n            }\n\n          case 'addYaxisAnnotation':\n            {\n              return chart.addYaxisAnnotation.apply(chart, opts);\n            }\n\n          case 'addPointAnnotation':\n            {\n              return chart.addPointAnnotation.apply(chart, opts);\n            }\n\n          case 'addText':\n            {\n              return chart.addText.apply(chart, opts);\n            }\n\n          case 'clearAnnotations':\n            {\n              return chart.clearAnnotations.apply(chart, opts);\n            }\n\n          case 'paper':\n            {\n              return chart.paper.apply(chart, opts);\n            }\n\n          case 'destroy':\n            {\n              return chart.destroy();\n            }\n        }\n      }\n    }, {\n      key: \"merge\",\n      value: function merge(target, source) {\n        return Utils.extend(target, source);\n      }\n    }, {\n      key: \"getChartByID\",\n      value: function getChartByID(chartID) {\n        var c = Apex._chartInstances.filter(function (ch) {\n          return ch.id === chartID;\n        })[0];\n\n        return c.chart;\n      }\n    }]);\n\n    return ApexCharts;\n  }();\n\n  return ApexCharts$1;\n\n}));\n"
  },
  {
    "path": "public/backend/vendors/js/charts/echarts/echarts.js",
    "content": "(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n\ttypeof define === 'function' && define.amd ? define(['exports'], factory) :\n\t(factory((global.echarts = {})));\n}(this, (function (exports) { 'use strict';\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n// (1) The code `if (__DEV__) ...` can be removed by build tool.\n// (2) If intend to use `__DEV__`, this module should be imported. Use a global\n// variable `__DEV__` may cause that miss the declaration (see #6535), or the\n// declaration is behind of the using position (for example in `Model.extent`,\n// And tools like rollup can not analysis the dependency if not import).\n\nvar dev;\n\n// In browser\nif (typeof window !== 'undefined') {\n    dev = window.__DEV__;\n}\n// In node\nelse if (typeof global !== 'undefined') {\n    dev = global.__DEV__;\n}\n\nif (typeof dev === 'undefined') {\n    dev = true;\n}\n\nvar __DEV__ = dev;\n\n/**\n * zrender: 生成唯一id\n *\n * @author errorrik (errorrik@gmail.com)\n */\n\nvar idStart = 0x0907;\n\nvar guid = function () {\n    return idStart++;\n};\n\n/**\n * echarts设备环境识别\n *\n * @desc echarts基于Canvas，纯Javascript图表库，提供直观，生动，可交互，可个性化定制的数据统计图表。\n * @author firede[firede@firede.us]\n * @desc thanks zepto.\n */\n\nvar env = {};\n\nif (typeof wx === 'object' && typeof wx.getSystemInfoSync === 'function') {\n    // In Weixin Application\n    env = {\n        browser: {},\n        os: {},\n        node: false,\n        wxa: true, // Weixin Application\n        canvasSupported: true,\n        svgSupported: false,\n        touchEventsSupported: true,\n        domSupported: false\n    };\n}\nelse if (typeof document === 'undefined' && typeof self !== 'undefined') {\n    // In worker\n    env = {\n        browser: {},\n        os: {},\n        node: false,\n        worker: true,\n        canvasSupported: true,\n        domSupported: false\n    };\n}\nelse if (typeof navigator === 'undefined') {\n    // In node\n    env = {\n        browser: {},\n        os: {},\n        node: true,\n        worker: false,\n        // Assume canvas is supported\n        canvasSupported: true,\n        svgSupported: true,\n        domSupported: false\n    };\n}\nelse {\n    env = detect(navigator.userAgent);\n}\n\nvar env$1 = env;\n\n// Zepto.js\n// (c) 2010-2013 Thomas Fuchs\n// Zepto.js may be freely distributed under the MIT license.\n\nfunction detect(ua) {\n    var os = {};\n    var browser = {};\n    // var webkit = ua.match(/Web[kK]it[\\/]{0,1}([\\d.]+)/);\n    // var android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/);\n    // var ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n    // var ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n    // var iphone = !ipad && ua.match(/(iPhone\\sOS)\\s([\\d_]+)/);\n    // var webos = ua.match(/(webOS|hpwOS)[\\s\\/]([\\d.]+)/);\n    // var touchpad = webos && ua.match(/TouchPad/);\n    // var kindle = ua.match(/Kindle\\/([\\d.]+)/);\n    // var silk = ua.match(/Silk\\/([\\d._]+)/);\n    // var blackberry = ua.match(/(BlackBerry).*Version\\/([\\d.]+)/);\n    // var bb10 = ua.match(/(BB10).*Version\\/([\\d.]+)/);\n    // var rimtabletos = ua.match(/(RIM\\sTablet\\sOS)\\s([\\d.]+)/);\n    // var playbook = ua.match(/PlayBook/);\n    // var chrome = ua.match(/Chrome\\/([\\d.]+)/) || ua.match(/CriOS\\/([\\d.]+)/);\n    var firefox = ua.match(/Firefox\\/([\\d.]+)/);\n    // var safari = webkit && ua.match(/Mobile\\//) && !chrome;\n    // var webview = ua.match(/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/) && !chrome;\n    var ie = ua.match(/MSIE\\s([\\d.]+)/)\n        // IE 11 Trident/7.0; rv:11.0\n        || ua.match(/Trident\\/.+?rv:(([\\d.]+))/);\n    var edge = ua.match(/Edge\\/([\\d.]+)/); // IE 12 and 12+\n\n    var weChat = (/micromessenger/i).test(ua);\n\n    // Todo: clean this up with a better OS/browser seperation:\n    // - discern (more) between multiple browsers on android\n    // - decide if kindle fire in silk mode is android or not\n    // - Firefox on Android doesn't specify the Android version\n    // - possibly devide in os, device and browser hashes\n\n    // if (browser.webkit = !!webkit) browser.version = webkit[1];\n\n    // if (android) os.android = true, os.version = android[2];\n    // if (iphone && !ipod) os.ios = os.iphone = true, os.version = iphone[2].replace(/_/g, '.');\n    // if (ipad) os.ios = os.ipad = true, os.version = ipad[2].replace(/_/g, '.');\n    // if (ipod) os.ios = os.ipod = true, os.version = ipod[3] ? ipod[3].replace(/_/g, '.') : null;\n    // if (webos) os.webos = true, os.version = webos[2];\n    // if (touchpad) os.touchpad = true;\n    // if (blackberry) os.blackberry = true, os.version = blackberry[2];\n    // if (bb10) os.bb10 = true, os.version = bb10[2];\n    // if (rimtabletos) os.rimtabletos = true, os.version = rimtabletos[2];\n    // if (playbook) browser.playbook = true;\n    // if (kindle) os.kindle = true, os.version = kindle[1];\n    // if (silk) browser.silk = true, browser.version = silk[1];\n    // if (!silk && os.android && ua.match(/Kindle Fire/)) browser.silk = true;\n    // if (chrome) browser.chrome = true, browser.version = chrome[1];\n    if (firefox) {\n        browser.firefox = true;\n        browser.version = firefox[1];\n    }\n    // if (safari && (ua.match(/Safari/) || !!os.ios)) browser.safari = true;\n    // if (webview) browser.webview = true;\n\n    if (ie) {\n        browser.ie = true;\n        browser.version = ie[1];\n    }\n\n    if (edge) {\n        browser.edge = true;\n        browser.version = edge[1];\n    }\n\n    // It is difficult to detect WeChat in Win Phone precisely, because ua can\n    // not be set on win phone. So we do not consider Win Phone.\n    if (weChat) {\n        browser.weChat = true;\n    }\n\n    // os.tablet = !!(ipad || playbook || (android && !ua.match(/Mobile/)) ||\n    //     (firefox && ua.match(/Tablet/)) || (ie && !ua.match(/Phone/) && ua.match(/Touch/)));\n    // os.phone  = !!(!os.tablet && !os.ipod && (android || iphone || webos ||\n    //     (chrome && ua.match(/Android/)) || (chrome && ua.match(/CriOS\\/([\\d.]+)/)) ||\n    //     (firefox && ua.match(/Mobile/)) || (ie && ua.match(/Touch/))));\n\n    return {\n        browser: browser,\n        os: os,\n        node: false,\n        // 原生canvas支持，改极端点了\n        // canvasSupported : !(browser.ie && parseFloat(browser.version) < 9)\n        canvasSupported: !!document.createElement('canvas').getContext,\n        svgSupported: typeof SVGRect !== 'undefined',\n        // works on most browsers\n        // IE10/11 does not support touch event, and MS Edge supports them but not by\n        // default, so we dont check navigator.maxTouchPoints for them here.\n        touchEventsSupported: 'ontouchstart' in window && !browser.ie && !browser.edge,\n        // <http://caniuse.com/#search=pointer%20event>.\n        pointerEventsSupported: 'onpointerdown' in window\n            // Firefox supports pointer but not by default, only MS browsers are reliable on pointer\n            // events currently. So we dont use that on other browsers unless tested sufficiently.\n            // Although IE 10 supports pointer event, it use old style and is different from the\n            // standard. So we exclude that. (IE 10 is hardly used on touch device)\n            && (browser.edge || (browser.ie && browser.version >= 11)),\n        // passiveSupported: detectPassiveSupport()\n        domSupported: typeof document !== 'undefined'\n    };\n}\n\n// See https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md#feature-detection\n// function detectPassiveSupport() {\n//     // Test via a getter in the options object to see if the passive property is accessed\n//     var supportsPassive = false;\n//     try {\n//         var opts = Object.defineProperty({}, 'passive', {\n//             get: function() {\n//                 supportsPassive = true;\n//             }\n//         });\n//         window.addEventListener('testPassive', function() {}, opts);\n//     } catch (e) {\n//     }\n//     return supportsPassive;\n// }\n\n/**\n * @module zrender/core/util\n */\n\n// 用于处理merge时无法遍历Date等对象的问题\nvar BUILTIN_OBJECT = {\n    '[object Function]': 1,\n    '[object RegExp]': 1,\n    '[object Date]': 1,\n    '[object Error]': 1,\n    '[object CanvasGradient]': 1,\n    '[object CanvasPattern]': 1,\n    // For node-canvas\n    '[object Image]': 1,\n    '[object Canvas]': 1\n};\n\nvar TYPED_ARRAY = {\n    '[object Int8Array]': 1,\n    '[object Uint8Array]': 1,\n    '[object Uint8ClampedArray]': 1,\n    '[object Int16Array]': 1,\n    '[object Uint16Array]': 1,\n    '[object Int32Array]': 1,\n    '[object Uint32Array]': 1,\n    '[object Float32Array]': 1,\n    '[object Float64Array]': 1\n};\n\nvar objToString = Object.prototype.toString;\n\nvar arrayProto = Array.prototype;\nvar nativeForEach = arrayProto.forEach;\nvar nativeFilter = arrayProto.filter;\nvar nativeSlice = arrayProto.slice;\nvar nativeMap = arrayProto.map;\nvar nativeReduce = arrayProto.reduce;\n\n// Avoid assign to an exported variable, for transforming to cjs.\nvar methods = {};\n\nfunction $override(name, fn) {\n    // Clear ctx instance for different environment\n    if (name === 'createCanvas') {\n        _ctx = null;\n    }\n\n    methods[name] = fn;\n}\n\n/**\n * Those data types can be cloned:\n *     Plain object, Array, TypedArray, number, string, null, undefined.\n * Those data types will be assgined using the orginal data:\n *     BUILTIN_OBJECT\n * Instance of user defined class will be cloned to a plain object, without\n * properties in prototype.\n * Other data types is not supported (not sure what will happen).\n *\n * Caution: do not support clone Date, for performance consideration.\n * (There might be a large number of date in `series.data`).\n * So date should not be modified in and out of echarts.\n *\n * @param {*} source\n * @return {*} new\n */\nfunction clone(source) {\n    if (source == null || typeof source !== 'object') {\n        return source;\n    }\n\n    var result = source;\n    var typeStr = objToString.call(source);\n\n    if (typeStr === '[object Array]') {\n        if (!isPrimitive(source)) {\n            result = [];\n            for (var i = 0, len = source.length; i < len; i++) {\n                result[i] = clone(source[i]);\n            }\n        }\n    }\n    else if (TYPED_ARRAY[typeStr]) {\n        if (!isPrimitive(source)) {\n            var Ctor = source.constructor;\n            if (source.constructor.from) {\n                result = Ctor.from(source);\n            }\n            else {\n                result = new Ctor(source.length);\n                for (var i = 0, len = source.length; i < len; i++) {\n                    result[i] = clone(source[i]);\n                }\n            }\n        }\n    }\n    else if (!BUILTIN_OBJECT[typeStr] && !isPrimitive(source) && !isDom(source)) {\n        result = {};\n        for (var key in source) {\n            if (source.hasOwnProperty(key)) {\n                result[key] = clone(source[key]);\n            }\n        }\n    }\n\n    return result;\n}\n\n/**\n * @memberOf module:zrender/core/util\n * @param {*} target\n * @param {*} source\n * @param {boolean} [overwrite=false]\n */\nfunction merge(target, source, overwrite) {\n    // We should escapse that source is string\n    // and enter for ... in ...\n    if (!isObject$1(source) || !isObject$1(target)) {\n        return overwrite ? clone(source) : target;\n    }\n\n    for (var key in source) {\n        if (source.hasOwnProperty(key)) {\n            var targetProp = target[key];\n            var sourceProp = source[key];\n\n            if (isObject$1(sourceProp)\n                && isObject$1(targetProp)\n                && !isArray(sourceProp)\n                && !isArray(targetProp)\n                && !isDom(sourceProp)\n                && !isDom(targetProp)\n                && !isBuiltInObject(sourceProp)\n                && !isBuiltInObject(targetProp)\n                && !isPrimitive(sourceProp)\n                && !isPrimitive(targetProp)\n            ) {\n                // 如果需要递归覆盖，就递归调用merge\n                merge(targetProp, sourceProp, overwrite);\n            }\n            else if (overwrite || !(key in target)) {\n                // 否则只处理overwrite为true，或者在目标对象中没有此属性的情况\n                // NOTE，在 target[key] 不存在的时候也是直接覆盖\n                target[key] = clone(source[key], true);\n            }\n        }\n    }\n\n    return target;\n}\n\n/**\n * @param {Array} targetAndSources The first item is target, and the rests are source.\n * @param {boolean} [overwrite=false]\n * @return {*} target\n */\nfunction mergeAll(targetAndSources, overwrite) {\n    var result = targetAndSources[0];\n    for (var i = 1, len = targetAndSources.length; i < len; i++) {\n        result = merge(result, targetAndSources[i], overwrite);\n    }\n    return result;\n}\n\n/**\n * @param {*} target\n * @param {*} source\n * @memberOf module:zrender/core/util\n */\nfunction extend(target, source) {\n    for (var key in source) {\n        if (source.hasOwnProperty(key)) {\n            target[key] = source[key];\n        }\n    }\n    return target;\n}\n\n/**\n * @param {*} target\n * @param {*} source\n * @param {boolean} [overlay=false]\n * @memberOf module:zrender/core/util\n */\nfunction defaults(target, source, overlay) {\n    for (var key in source) {\n        if (source.hasOwnProperty(key)\n            && (overlay ? source[key] != null : target[key] == null)\n        ) {\n            target[key] = source[key];\n        }\n    }\n    return target;\n}\n\nvar createCanvas = function () {\n    return methods.createCanvas();\n};\n\nmethods.createCanvas = function () {\n    return document.createElement('canvas');\n};\n\n// FIXME\nvar _ctx;\n\nfunction getContext() {\n    if (!_ctx) {\n        // Use util.createCanvas instead of createCanvas\n        // because createCanvas may be overwritten in different environment\n        _ctx = createCanvas().getContext('2d');\n    }\n    return _ctx;\n}\n\n/**\n * 查询数组中元素的index\n * @memberOf module:zrender/core/util\n */\nfunction indexOf(array, value) {\n    if (array) {\n        if (array.indexOf) {\n            return array.indexOf(value);\n        }\n        for (var i = 0, len = array.length; i < len; i++) {\n            if (array[i] === value) {\n                return i;\n            }\n        }\n    }\n    return -1;\n}\n\n/**\n * 构造类继承关系\n *\n * @memberOf module:zrender/core/util\n * @param {Function} clazz 源类\n * @param {Function} baseClazz 基类\n */\nfunction inherits(clazz, baseClazz) {\n    var clazzPrototype = clazz.prototype;\n    function F() {}\n    F.prototype = baseClazz.prototype;\n    clazz.prototype = new F();\n\n    for (var prop in clazzPrototype) {\n        clazz.prototype[prop] = clazzPrototype[prop];\n    }\n    clazz.prototype.constructor = clazz;\n    clazz.superClass = baseClazz;\n}\n\n/**\n * @memberOf module:zrender/core/util\n * @param {Object|Function} target\n * @param {Object|Function} sorce\n * @param {boolean} overlay\n */\nfunction mixin(target, source, overlay) {\n    target = 'prototype' in target ? target.prototype : target;\n    source = 'prototype' in source ? source.prototype : source;\n\n    defaults(target, source, overlay);\n}\n\n/**\n * Consider typed array.\n * @param {Array|TypedArray} data\n */\nfunction isArrayLike(data) {\n    if (!data) {\n        return;\n    }\n    if (typeof data === 'string') {\n        return false;\n    }\n    return typeof data.length === 'number';\n}\n\n/**\n * 数组或对象遍历\n * @memberOf module:zrender/core/util\n * @param {Object|Array} obj\n * @param {Function} cb\n * @param {*} [context]\n */\nfunction each$1(obj, cb, context) {\n    if (!(obj && cb)) {\n        return;\n    }\n    if (obj.forEach && obj.forEach === nativeForEach) {\n        obj.forEach(cb, context);\n    }\n    else if (obj.length === +obj.length) {\n        for (var i = 0, len = obj.length; i < len; i++) {\n            cb.call(context, obj[i], i, obj);\n        }\n    }\n    else {\n        for (var key in obj) {\n            if (obj.hasOwnProperty(key)) {\n                cb.call(context, obj[key], key, obj);\n            }\n        }\n    }\n}\n\n/**\n * 数组映射\n * @memberOf module:zrender/core/util\n * @param {Array} obj\n * @param {Function} cb\n * @param {*} [context]\n * @return {Array}\n */\nfunction map(obj, cb, context) {\n    if (!(obj && cb)) {\n        return;\n    }\n    if (obj.map && obj.map === nativeMap) {\n        return obj.map(cb, context);\n    }\n    else {\n        var result = [];\n        for (var i = 0, len = obj.length; i < len; i++) {\n            result.push(cb.call(context, obj[i], i, obj));\n        }\n        return result;\n    }\n}\n\n/**\n * @memberOf module:zrender/core/util\n * @param {Array} obj\n * @param {Function} cb\n * @param {Object} [memo]\n * @param {*} [context]\n * @return {Array}\n */\nfunction reduce(obj, cb, memo, context) {\n    if (!(obj && cb)) {\n        return;\n    }\n    if (obj.reduce && obj.reduce === nativeReduce) {\n        return obj.reduce(cb, memo, context);\n    }\n    else {\n        for (var i = 0, len = obj.length; i < len; i++) {\n            memo = cb.call(context, memo, obj[i], i, obj);\n        }\n        return memo;\n    }\n}\n\n/**\n * 数组过滤\n * @memberOf module:zrender/core/util\n * @param {Array} obj\n * @param {Function} cb\n * @param {*} [context]\n * @return {Array}\n */\nfunction filter(obj, cb, context) {\n    if (!(obj && cb)) {\n        return;\n    }\n    if (obj.filter && obj.filter === nativeFilter) {\n        return obj.filter(cb, context);\n    }\n    else {\n        var result = [];\n        for (var i = 0, len = obj.length; i < len; i++) {\n            if (cb.call(context, obj[i], i, obj)) {\n                result.push(obj[i]);\n            }\n        }\n        return result;\n    }\n}\n\n/**\n * 数组项查找\n * @memberOf module:zrender/core/util\n * @param {Array} obj\n * @param {Function} cb\n * @param {*} [context]\n * @return {*}\n */\nfunction find(obj, cb, context) {\n    if (!(obj && cb)) {\n        return;\n    }\n    for (var i = 0, len = obj.length; i < len; i++) {\n        if (cb.call(context, obj[i], i, obj)) {\n            return obj[i];\n        }\n    }\n}\n\n/**\n * @memberOf module:zrender/core/util\n * @param {Function} func\n * @param {*} context\n * @return {Function}\n */\nfunction bind(func, context) {\n    var args = nativeSlice.call(arguments, 2);\n    return function () {\n        return func.apply(context, args.concat(nativeSlice.call(arguments)));\n    };\n}\n\n/**\n * @memberOf module:zrender/core/util\n * @param {Function} func\n * @return {Function}\n */\nfunction curry(func) {\n    var args = nativeSlice.call(arguments, 1);\n    return function () {\n        return func.apply(this, args.concat(nativeSlice.call(arguments)));\n    };\n}\n\n/**\n * @memberOf module:zrender/core/util\n * @param {*} value\n * @return {boolean}\n */\nfunction isArray(value) {\n    return objToString.call(value) === '[object Array]';\n}\n\n/**\n * @memberOf module:zrender/core/util\n * @param {*} value\n * @return {boolean}\n */\nfunction isFunction$1(value) {\n    return typeof value === 'function';\n}\n\n/**\n * @memberOf module:zrender/core/util\n * @param {*} value\n * @return {boolean}\n */\nfunction isString(value) {\n    return objToString.call(value) === '[object String]';\n}\n\n/**\n * @memberOf module:zrender/core/util\n * @param {*} value\n * @return {boolean}\n */\nfunction isObject$1(value) {\n    // Avoid a V8 JIT bug in Chrome 19-20.\n    // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n    var type = typeof value;\n    return type === 'function' || (!!value && type === 'object');\n}\n\n/**\n * @memberOf module:zrender/core/util\n * @param {*} value\n * @return {boolean}\n */\nfunction isBuiltInObject(value) {\n    return !!BUILTIN_OBJECT[objToString.call(value)];\n}\n\n/**\n * @memberOf module:zrender/core/util\n * @param {*} value\n * @return {boolean}\n */\nfunction isTypedArray(value) {\n    return !!TYPED_ARRAY[objToString.call(value)];\n}\n\n/**\n * @memberOf module:zrender/core/util\n * @param {*} value\n * @return {boolean}\n */\nfunction isDom(value) {\n    return typeof value === 'object'\n        && typeof value.nodeType === 'number'\n        && typeof value.ownerDocument === 'object';\n}\n\n/**\n * Whether is exactly NaN. Notice isNaN('a') returns true.\n * @param {*} value\n * @return {boolean}\n */\nfunction eqNaN(value) {\n    return value !== value;\n}\n\n/**\n * If value1 is not null, then return value1, otherwise judget rest of values.\n * Low performance.\n * @memberOf module:zrender/core/util\n * @return {*} Final value\n */\nfunction retrieve(values) {\n    for (var i = 0, len = arguments.length; i < len; i++) {\n        if (arguments[i] != null) {\n            return arguments[i];\n        }\n    }\n}\n\nfunction retrieve2(value0, value1) {\n    return value0 != null\n        ? value0\n        : value1;\n}\n\nfunction retrieve3(value0, value1, value2) {\n    return value0 != null\n        ? value0\n        : value1 != null\n        ? value1\n        : value2;\n}\n\n/**\n * @memberOf module:zrender/core/util\n * @param {Array} arr\n * @param {number} startIndex\n * @param {number} endIndex\n * @return {Array}\n */\nfunction slice() {\n    return Function.call.apply(nativeSlice, arguments);\n}\n\n/**\n * Normalize css liked array configuration\n * e.g.\n *  3 => [3, 3, 3, 3]\n *  [4, 2] => [4, 2, 4, 2]\n *  [4, 3, 2] => [4, 3, 2, 3]\n * @param {number|Array.<number>} val\n * @return {Array.<number>}\n */\nfunction normalizeCssArray(val) {\n    if (typeof (val) === 'number') {\n        return [val, val, val, val];\n    }\n    var len = val.length;\n    if (len === 2) {\n        // vertical | horizontal\n        return [val[0], val[1], val[0], val[1]];\n    }\n    else if (len === 3) {\n        // top | horizontal | bottom\n        return [val[0], val[1], val[2], val[1]];\n    }\n    return val;\n}\n\n/**\n * @memberOf module:zrender/core/util\n * @param {boolean} condition\n * @param {string} message\n */\nfunction assert$1(condition, message) {\n    if (!condition) {\n        throw new Error(message);\n    }\n}\n\n/**\n * @memberOf module:zrender/core/util\n * @param {string} str string to be trimed\n * @return {string} trimed string\n */\nfunction trim(str) {\n    if (str == null) {\n        return null;\n    }\n    else if (typeof str.trim === 'function') {\n        return str.trim();\n    }\n    else {\n        return str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n    }\n}\n\nvar primitiveKey = '__ec_primitive__';\n/**\n * Set an object as primitive to be ignored traversing children in clone or merge\n */\nfunction setAsPrimitive(obj) {\n    obj[primitiveKey] = true;\n}\n\nfunction isPrimitive(obj) {\n    return obj[primitiveKey];\n}\n\n/**\n * @constructor\n * @param {Object} obj Only apply `ownProperty`.\n */\nfunction HashMap(obj) {\n    var isArr = isArray(obj);\n    // Key should not be set on this, otherwise\n    // methods get/set/... may be overrided.\n    this.data = {};\n    var thisMap = this;\n\n    (obj instanceof HashMap)\n        ? obj.each(visit)\n        : (obj && each$1(obj, visit));\n\n    function visit(value, key) {\n        isArr ? thisMap.set(value, key) : thisMap.set(key, value);\n    }\n}\n\nHashMap.prototype = {\n    constructor: HashMap,\n    // Do not provide `has` method to avoid defining what is `has`.\n    // (We usually treat `null` and `undefined` as the same, different\n    // from ES6 Map).\n    get: function (key) {\n        return this.data.hasOwnProperty(key) ? this.data[key] : null;\n    },\n    set: function (key, value) {\n        // Comparing with invocation chaining, `return value` is more commonly\n        // used in this case: `var someVal = map.set('a', genVal());`\n        return (this.data[key] = value);\n    },\n    // Although util.each can be performed on this hashMap directly, user\n    // should not use the exposed keys, who are prefixed.\n    each: function (cb, context) {\n        context !== void 0 && (cb = bind(cb, context));\n        for (var key in this.data) {\n            this.data.hasOwnProperty(key) && cb(this.data[key], key);\n        }\n    },\n    // Do not use this method if performance sensitive.\n    removeKey: function (key) {\n        delete this.data[key];\n    }\n};\n\nfunction createHashMap(obj) {\n    return new HashMap(obj);\n}\n\nfunction concatArray(a, b) {\n    var newArray = new a.constructor(a.length + b.length);\n    for (var i = 0; i < a.length; i++) {\n        newArray[i] = a[i];\n    }\n    var offset = a.length;\n    for (i = 0; i < b.length; i++) {\n        newArray[i + offset] = b[i];\n    }\n    return newArray;\n}\n\n\nfunction noop() {}\n\n\nvar zrUtil = (Object.freeze || Object)({\n\t$override: $override,\n\tclone: clone,\n\tmerge: merge,\n\tmergeAll: mergeAll,\n\textend: extend,\n\tdefaults: defaults,\n\tcreateCanvas: createCanvas,\n\tgetContext: getContext,\n\tindexOf: indexOf,\n\tinherits: inherits,\n\tmixin: mixin,\n\tisArrayLike: isArrayLike,\n\teach: each$1,\n\tmap: map,\n\treduce: reduce,\n\tfilter: filter,\n\tfind: find,\n\tbind: bind,\n\tcurry: curry,\n\tisArray: isArray,\n\tisFunction: isFunction$1,\n\tisString: isString,\n\tisObject: isObject$1,\n\tisBuiltInObject: isBuiltInObject,\n\tisTypedArray: isTypedArray,\n\tisDom: isDom,\n\teqNaN: eqNaN,\n\tretrieve: retrieve,\n\tretrieve2: retrieve2,\n\tretrieve3: retrieve3,\n\tslice: slice,\n\tnormalizeCssArray: normalizeCssArray,\n\tassert: assert$1,\n\ttrim: trim,\n\tsetAsPrimitive: setAsPrimitive,\n\tisPrimitive: isPrimitive,\n\tcreateHashMap: createHashMap,\n\tconcatArray: concatArray,\n\tnoop: noop\n});\n\nvar ArrayCtor = typeof Float32Array === 'undefined'\n    ? Array\n    : Float32Array;\n\n/**\n * 创建一个向量\n * @param {number} [x=0]\n * @param {number} [y=0]\n * @return {Vector2}\n */\nfunction create(x, y) {\n    var out = new ArrayCtor(2);\n    if (x == null) {\n        x = 0;\n    }\n    if (y == null) {\n        y = 0;\n    }\n    out[0] = x;\n    out[1] = y;\n    return out;\n}\n\n/**\n * 复制向量数据\n * @param {Vector2} out\n * @param {Vector2} v\n * @return {Vector2}\n */\nfunction copy(out, v) {\n    out[0] = v[0];\n    out[1] = v[1];\n    return out;\n}\n\n/**\n * 克隆一个向量\n * @param {Vector2} v\n * @return {Vector2}\n */\nfunction clone$1(v) {\n    var out = new ArrayCtor(2);\n    out[0] = v[0];\n    out[1] = v[1];\n    return out;\n}\n\n/**\n * 设置向量的两个项\n * @param {Vector2} out\n * @param {number} a\n * @param {number} b\n * @return {Vector2} 结果\n */\nfunction set(out, a, b) {\n    out[0] = a;\n    out[1] = b;\n    return out;\n}\n\n/**\n * 向量相加\n * @param {Vector2} out\n * @param {Vector2} v1\n * @param {Vector2} v2\n */\nfunction add(out, v1, v2) {\n    out[0] = v1[0] + v2[0];\n    out[1] = v1[1] + v2[1];\n    return out;\n}\n\n/**\n * 向量缩放后相加\n * @param {Vector2} out\n * @param {Vector2} v1\n * @param {Vector2} v2\n * @param {number} a\n */\nfunction scaleAndAdd(out, v1, v2, a) {\n    out[0] = v1[0] + v2[0] * a;\n    out[1] = v1[1] + v2[1] * a;\n    return out;\n}\n\n/**\n * 向量相减\n * @param {Vector2} out\n * @param {Vector2} v1\n * @param {Vector2} v2\n */\nfunction sub(out, v1, v2) {\n    out[0] = v1[0] - v2[0];\n    out[1] = v1[1] - v2[1];\n    return out;\n}\n\n/**\n * 向量长度\n * @param {Vector2} v\n * @return {number}\n */\nfunction len(v) {\n    return Math.sqrt(lenSquare(v));\n}\nvar length = len; // jshint ignore:line\n\n/**\n * 向量长度平方\n * @param {Vector2} v\n * @return {number}\n */\nfunction lenSquare(v) {\n    return v[0] * v[0] + v[1] * v[1];\n}\nvar lengthSquare = lenSquare;\n\n/**\n * 向量乘法\n * @param {Vector2} out\n * @param {Vector2} v1\n * @param {Vector2} v2\n */\nfunction mul(out, v1, v2) {\n    out[0] = v1[0] * v2[0];\n    out[1] = v1[1] * v2[1];\n    return out;\n}\n\n/**\n * 向量除法\n * @param {Vector2} out\n * @param {Vector2} v1\n * @param {Vector2} v2\n */\nfunction div(out, v1, v2) {\n    out[0] = v1[0] / v2[0];\n    out[1] = v1[1] / v2[1];\n    return out;\n}\n\n/**\n * 向量点乘\n * @param {Vector2} v1\n * @param {Vector2} v2\n * @return {number}\n */\nfunction dot(v1, v2) {\n    return v1[0] * v2[0] + v1[1] * v2[1];\n}\n\n/**\n * 向量缩放\n * @param {Vector2} out\n * @param {Vector2} v\n * @param {number} s\n */\nfunction scale(out, v, s) {\n    out[0] = v[0] * s;\n    out[1] = v[1] * s;\n    return out;\n}\n\n/**\n * 向量归一化\n * @param {Vector2} out\n * @param {Vector2} v\n */\nfunction normalize(out, v) {\n    var d = len(v);\n    if (d === 0) {\n        out[0] = 0;\n        out[1] = 0;\n    }\n    else {\n        out[0] = v[0] / d;\n        out[1] = v[1] / d;\n    }\n    return out;\n}\n\n/**\n * 计算向量间距离\n * @param {Vector2} v1\n * @param {Vector2} v2\n * @return {number}\n */\nfunction distance(v1, v2) {\n    return Math.sqrt(\n        (v1[0] - v2[0]) * (v1[0] - v2[0])\n        + (v1[1] - v2[1]) * (v1[1] - v2[1])\n    );\n}\nvar dist = distance;\n\n/**\n * 向量距离平方\n * @param {Vector2} v1\n * @param {Vector2} v2\n * @return {number}\n */\nfunction distanceSquare(v1, v2) {\n    return (v1[0] - v2[0]) * (v1[0] - v2[0])\n        + (v1[1] - v2[1]) * (v1[1] - v2[1]);\n}\nvar distSquare = distanceSquare;\n\n/**\n * 求负向量\n * @param {Vector2} out\n * @param {Vector2} v\n */\nfunction negate(out, v) {\n    out[0] = -v[0];\n    out[1] = -v[1];\n    return out;\n}\n\n/**\n * 插值两个点\n * @param {Vector2} out\n * @param {Vector2} v1\n * @param {Vector2} v2\n * @param {number} t\n */\nfunction lerp(out, v1, v2, t) {\n    out[0] = v1[0] + t * (v2[0] - v1[0]);\n    out[1] = v1[1] + t * (v2[1] - v1[1]);\n    return out;\n}\n\n/**\n * 矩阵左乘向量\n * @param {Vector2} out\n * @param {Vector2} v\n * @param {Vector2} m\n */\nfunction applyTransform(out, v, m) {\n    var x = v[0];\n    var y = v[1];\n    out[0] = m[0] * x + m[2] * y + m[4];\n    out[1] = m[1] * x + m[3] * y + m[5];\n    return out;\n}\n\n/**\n * 求两个向量最小值\n * @param  {Vector2} out\n * @param  {Vector2} v1\n * @param  {Vector2} v2\n */\nfunction min(out, v1, v2) {\n    out[0] = Math.min(v1[0], v2[0]);\n    out[1] = Math.min(v1[1], v2[1]);\n    return out;\n}\n\n/**\n * 求两个向量最大值\n * @param  {Vector2} out\n * @param  {Vector2} v1\n * @param  {Vector2} v2\n */\nfunction max(out, v1, v2) {\n    out[0] = Math.max(v1[0], v2[0]);\n    out[1] = Math.max(v1[1], v2[1]);\n    return out;\n}\n\n\nvar vector = (Object.freeze || Object)({\n\tcreate: create,\n\tcopy: copy,\n\tclone: clone$1,\n\tset: set,\n\tadd: add,\n\tscaleAndAdd: scaleAndAdd,\n\tsub: sub,\n\tlen: len,\n\tlength: length,\n\tlenSquare: lenSquare,\n\tlengthSquare: lengthSquare,\n\tmul: mul,\n\tdiv: div,\n\tdot: dot,\n\tscale: scale,\n\tnormalize: normalize,\n\tdistance: distance,\n\tdist: dist,\n\tdistanceSquare: distanceSquare,\n\tdistSquare: distSquare,\n\tnegate: negate,\n\tlerp: lerp,\n\tapplyTransform: applyTransform,\n\tmin: min,\n\tmax: max\n});\n\n// TODO Draggable for group\n// FIXME Draggable on element which has parent rotation or scale\nfunction Draggable() {\n\n    this.on('mousedown', this._dragStart, this);\n    this.on('mousemove', this._drag, this);\n    this.on('mouseup', this._dragEnd, this);\n    this.on('globalout', this._dragEnd, this);\n    // this._dropTarget = null;\n    // this._draggingTarget = null;\n\n    // this._x = 0;\n    // this._y = 0;\n}\n\nDraggable.prototype = {\n\n    constructor: Draggable,\n\n    _dragStart: function (e) {\n        var draggingTarget = e.target;\n        if (draggingTarget && draggingTarget.draggable) {\n            this._draggingTarget = draggingTarget;\n            draggingTarget.dragging = true;\n            this._x = e.offsetX;\n            this._y = e.offsetY;\n\n            this.dispatchToElement(param(draggingTarget, e), 'dragstart', e.event);\n        }\n    },\n\n    _drag: function (e) {\n        var draggingTarget = this._draggingTarget;\n        if (draggingTarget) {\n\n            var x = e.offsetX;\n            var y = e.offsetY;\n\n            var dx = x - this._x;\n            var dy = y - this._y;\n            this._x = x;\n            this._y = y;\n\n            draggingTarget.drift(dx, dy, e);\n            this.dispatchToElement(param(draggingTarget, e), 'drag', e.event);\n\n            var dropTarget = this.findHover(x, y, draggingTarget).target;\n            var lastDropTarget = this._dropTarget;\n            this._dropTarget = dropTarget;\n\n            if (draggingTarget !== dropTarget) {\n                if (lastDropTarget && dropTarget !== lastDropTarget) {\n                    this.dispatchToElement(param(lastDropTarget, e), 'dragleave', e.event);\n                }\n                if (dropTarget && dropTarget !== lastDropTarget) {\n                    this.dispatchToElement(param(dropTarget, e), 'dragenter', e.event);\n                }\n            }\n        }\n    },\n\n    _dragEnd: function (e) {\n        var draggingTarget = this._draggingTarget;\n\n        if (draggingTarget) {\n            draggingTarget.dragging = false;\n        }\n\n        this.dispatchToElement(param(draggingTarget, e), 'dragend', e.event);\n\n        if (this._dropTarget) {\n            this.dispatchToElement(param(this._dropTarget, e), 'drop', e.event);\n        }\n\n        this._draggingTarget = null;\n        this._dropTarget = null;\n    }\n\n};\n\nfunction param(target, e) {\n    return {target: target, topTarget: e && e.topTarget};\n}\n\n/**\n * Event Mixin\n * @module zrender/mixin/Eventful\n * @author Kener (@Kener-林峰, kener.linfeng@gmail.com)\n *         pissang (https://www.github.com/pissang)\n */\n\nvar arrySlice = Array.prototype.slice;\n\n/**\n * Event dispatcher.\n *\n * @alias module:zrender/mixin/Eventful\n * @constructor\n * @param {Object} [eventProcessor] The object eventProcessor is the scope when\n *        `eventProcessor.xxx` called.\n * @param {Function} [eventProcessor.normalizeQuery]\n *        param: {string|Object} Raw query.\n *        return: {string|Object} Normalized query.\n * @param {Function} [eventProcessor.filter] Event will be dispatched only\n *        if it returns `true`.\n *        param: {string} eventType\n *        param: {string|Object} query\n *        return: {boolean}\n * @param {Function} [eventProcessor.afterTrigger] Call after all handlers called.\n *        param: {string} eventType\n */\nvar Eventful = function (eventProcessor) {\n    this._$handlers = {};\n    this._$eventProcessor = eventProcessor;\n};\n\nEventful.prototype = {\n\n    constructor: Eventful,\n\n    /**\n     * The handler can only be triggered once, then removed.\n     *\n     * @param {string} event The event name.\n     * @param {string|Object} [query] Condition used on event filter.\n     * @param {Function} handler The event handler.\n     * @param {Object} context\n     */\n    one: function (event, query, handler, context) {\n        return on(this, event, query, handler, context, true);\n    },\n\n    /**\n     * Bind a handler.\n     *\n     * @param {string} event The event name.\n     * @param {string|Object} [query] Condition used on event filter.\n     * @param {Function} handler The event handler.\n     * @param {Object} [context]\n     */\n    on: function (event, query, handler, context) {\n        return on(this, event, query, handler, context, false);\n    },\n\n    /**\n     * Whether any handler has bound.\n     *\n     * @param  {string}  event\n     * @return {boolean}\n     */\n    isSilent: function (event) {\n        var _h = this._$handlers;\n        return !_h[event] || !_h[event].length;\n    },\n\n    /**\n     * Unbind a event.\n     *\n     * @param {string} event The event name.\n     * @param {Function} [handler] The event handler.\n     */\n    off: function (event, handler) {\n        var _h = this._$handlers;\n\n        if (!event) {\n            this._$handlers = {};\n            return this;\n        }\n\n        if (handler) {\n            if (_h[event]) {\n                var newList = [];\n                for (var i = 0, l = _h[event].length; i < l; i++) {\n                    if (_h[event][i].h !== handler) {\n                        newList.push(_h[event][i]);\n                    }\n                }\n                _h[event] = newList;\n            }\n\n            if (_h[event] && _h[event].length === 0) {\n                delete _h[event];\n            }\n        }\n        else {\n            delete _h[event];\n        }\n\n        return this;\n    },\n\n    /**\n     * Dispatch a event.\n     *\n     * @param {string} type The event name.\n     */\n    trigger: function (type) {\n        var _h = this._$handlers[type];\n        var eventProcessor = this._$eventProcessor;\n\n        if (_h) {\n            var args = arguments;\n            var argLen = args.length;\n\n            if (argLen > 3) {\n                args = arrySlice.call(args, 1);\n            }\n\n            var len = _h.length;\n            for (var i = 0; i < len;) {\n                var hItem = _h[i];\n                if (eventProcessor\n                    && eventProcessor.filter\n                    && hItem.query != null\n                    && !eventProcessor.filter(type, hItem.query)\n                ) {\n                    i++;\n                    continue;\n                }\n\n                // Optimize advise from backbone\n                switch (argLen) {\n                    case 1:\n                        hItem.h.call(hItem.ctx);\n                        break;\n                    case 2:\n                        hItem.h.call(hItem.ctx, args[1]);\n                        break;\n                    case 3:\n                        hItem.h.call(hItem.ctx, args[1], args[2]);\n                        break;\n                    default:\n                        // have more than 2 given arguments\n                        hItem.h.apply(hItem.ctx, args);\n                        break;\n                }\n\n                if (hItem.one) {\n                    _h.splice(i, 1);\n                    len--;\n                }\n                else {\n                    i++;\n                }\n            }\n        }\n\n        eventProcessor && eventProcessor.afterTrigger\n            && eventProcessor.afterTrigger(type);\n\n        return this;\n    },\n\n    /**\n     * Dispatch a event with context, which is specified at the last parameter.\n     *\n     * @param {string} type The event name.\n     */\n    triggerWithContext: function (type) {\n        var _h = this._$handlers[type];\n        var eventProcessor = this._$eventProcessor;\n\n        if (_h) {\n            var args = arguments;\n            var argLen = args.length;\n\n            if (argLen > 4) {\n                args = arrySlice.call(args, 1, args.length - 1);\n            }\n            var ctx = args[args.length - 1];\n\n            var len = _h.length;\n            for (var i = 0; i < len;) {\n                var hItem = _h[i];\n                if (eventProcessor\n                    && eventProcessor.filter\n                    && hItem.query != null\n                    && !eventProcessor.filter(type, hItem.query)\n                ) {\n                    i++;\n                    continue;\n                }\n\n                // Optimize advise from backbone\n                switch (argLen) {\n                    case 1:\n                        hItem.h.call(ctx);\n                        break;\n                    case 2:\n                        hItem.h.call(ctx, args[1]);\n                        break;\n                    case 3:\n                        hItem.h.call(ctx, args[1], args[2]);\n                        break;\n                    default:\n                        // have more than 2 given arguments\n                        hItem.h.apply(ctx, args);\n                        break;\n                }\n\n                if (hItem.one) {\n                    _h.splice(i, 1);\n                    len--;\n                }\n                else {\n                    i++;\n                }\n            }\n        }\n\n        eventProcessor && eventProcessor.afterTrigger\n            && eventProcessor.afterTrigger(type);\n\n        return this;\n    }\n};\n\nfunction normalizeQuery(host, query) {\n    var eventProcessor = host._$eventProcessor;\n    if (query != null && eventProcessor && eventProcessor.normalizeQuery) {\n        query = eventProcessor.normalizeQuery(query);\n    }\n    return query;\n}\n\nfunction on(eventful, event, query, handler, context, isOnce) {\n    var _h = eventful._$handlers;\n\n    if (typeof query === 'function') {\n        context = handler;\n        handler = query;\n        query = null;\n    }\n\n    if (!handler || !event) {\n        return eventful;\n    }\n\n    query = normalizeQuery(eventful, query);\n\n    if (!_h[event]) {\n        _h[event] = [];\n    }\n\n    for (var i = 0; i < _h[event].length; i++) {\n        if (_h[event][i].h === handler) {\n            return eventful;\n        }\n    }\n\n    var wrap = {\n        h: handler,\n        one: isOnce,\n        query: query,\n        ctx: context || eventful,\n        // FIXME\n        // Do not publish this feature util it is proved that it makes sense.\n        callAtLast: handler.zrEventfulCallAtLast\n    };\n\n    var lastIndex = _h[event].length - 1;\n    var lastWrap = _h[event][lastIndex];\n    (lastWrap && lastWrap.callAtLast)\n        ? _h[event].splice(lastIndex, 0, wrap)\n        : _h[event].push(wrap);\n\n    return eventful;\n}\n\n/**\n * The algoritm is learnt from\n * https://franklinta.com/2014/09/08/computing-css-matrix3d-transforms/\n * And we made some optimization for matrix inversion.\n * Other similar approaches:\n * \"cv::getPerspectiveTransform\", \"Direct Linear Transformation\".\n */\n\nvar LN2 = Math.log(2);\n\nfunction determinant(rows, rank, rowStart, rowMask, colMask, detCache) {\n    var cacheKey = rowMask + '-' + colMask;\n    var fullRank = rows.length;\n\n    if (detCache.hasOwnProperty(cacheKey)) {\n        return detCache[cacheKey];\n    }\n\n    if (rank === 1) {\n        // In this case the colMask must be like: `11101111`. We can find the place of `0`.\n        var colStart = Math.round(Math.log(((1 << fullRank) - 1) & ~colMask) / LN2);\n        return rows[rowStart][colStart];\n    }\n\n    var subRowMask = rowMask | (1 << rowStart);\n    var subRowStart = rowStart + 1;\n    while (rowMask & (1 << subRowStart)) {\n        subRowStart++;\n    }\n\n    var sum = 0;\n    for (var j = 0, colLocalIdx = 0; j < fullRank; j++) {\n        var colTag = 1 << j;\n        if (!(colTag & colMask)) {\n            sum += (colLocalIdx % 2 ? -1 : 1) * rows[rowStart][j]\n                // det(subMatrix(0, j))\n                * determinant(rows, rank - 1, subRowStart, subRowMask, colMask | colTag, detCache);\n            colLocalIdx++;\n        }\n    }\n\n    detCache[cacheKey] = sum;\n\n    return sum;\n}\n\n/**\n * Usage:\n * ```js\n * var transformer = buildTransformer(\n *     [10, 44, 100, 44, 100, 300, 10, 300],\n *     [50, 54, 130, 14, 140, 330, 14, 220]\n * );\n * var out = [];\n * transformer && transformer([11, 33], out);\n * ```\n *\n * Notice: `buildTransformer` may take more than 10ms in some Android device.\n *\n * @param {Array.<number>} src source four points, [x0, y0, x1, y1, x2, y2, x3, y3]\n * @param {Array.<number>} dest destination four points, [x0, y0, x1, y1, x2, y2, x3, y3]\n * @return {Function} transformer If fail, return null/undefined.\n */\nfunction buildTransformer(src, dest) {\n    var mA = [\n        [src[0], src[1], 1, 0, 0, 0, -dest[0] * src[0], -dest[0] * src[1]],\n        [0, 0, 0, src[0], src[1], 1, -dest[1] * src[0], -dest[1] * src[1]],\n        [src[2], src[3], 1, 0, 0, 0, -dest[2] * src[2], -dest[2] * src[3]],\n        [0, 0, 0, src[2], src[3], 1, -dest[3] * src[2], -dest[3] * src[3]],\n        [src[4], src[5], 1, 0, 0, 0, -dest[4] * src[4], -dest[4] * src[5]],\n        [0, 0, 0, src[4], src[5], 1, -dest[5] * src[4], -dest[5] * src[5]],\n        [src[6], src[7], 1, 0, 0, 0, -dest[6] * src[6], -dest[6] * src[7]],\n        [0, 0, 0, src[6], src[7], 1, -dest[7] * src[6], -dest[7] * src[7]]\n    ];\n\n    var detCache = {};\n    var det = determinant(mA, 8, 0, 0, 0, detCache);\n    if (det === 0) {\n        return;\n    }\n\n    // `invert(mA) * dest`, that is, `adj(mA) / det * dest`.\n    var vh = [];\n    for (var i = 0; i < 8; i++) {\n        for (var j = 0; j < 8; j++) {\n            vh[j] == null && (vh[j] = 0);\n            vh[j] += ((i + j) % 2 ? -1 : 1)\n                // det(subMatrix(i, j))\n                * determinant(mA, 7, i === 0 ? 1 : 0, 1 << i, 1 << j, detCache)\n                / det * dest[i];\n        }\n    }\n\n    return function (out, srcPointX, srcPointY) {\n        var pk = srcPointX * vh[6] + srcPointY * vh[7] + 1;\n        out[0] = (srcPointX * vh[0] + srcPointY * vh[1] + vh[2]) / pk;\n        out[1] = (srcPointX * vh[3] + srcPointY * vh[4] + vh[5]) / pk;\n    };\n}\n\n/**\n * Utilities for mouse or touch events.\n */\n\nvar isDomLevel2 = (typeof window !== 'undefined') && !!window.addEventListener;\n\nvar MOUSE_EVENT_REG = /^(?:mouse|pointer|contextmenu|drag|drop)|click/;\nvar EVENT_SAVED_PROP = '___zrEVENTSAVED';\nvar _calcOut = [];\n\n/**\n * Get the `zrX` and `zrY`, which are relative to the top-left of\n * the input `el`.\n * CSS transform (2D & 3D) is supported.\n *\n * The strategy to fetch the coords:\n * + If `calculate` is not set as `true`, users of this method should\n * ensure that `el` is the same or the same size & location as `e.target`.\n * Otherwise the result coords are probably not expected. Because we\n * firstly try to get coords from e.offsetX/e.offsetY.\n * + If `calculate` is set as `true`, the input `el` can be any element\n * and we force to calculate the coords based on `el`.\n * + The input `el` should be positionable (not position:static).\n *\n * The force `calculate` can be used in case like:\n * When mousemove event triggered on ec tooltip, `e.target` is not `el`(zr painter.dom).\n *\n * @param {HTMLElement} el DOM element.\n * @param {Event} e Mouse event or touch event.\n * @param {Object} out Get `out.zrX` and `out.zrY` as the result.\n * @param {boolean} [calculate=false] Whether to force calculate\n *        the coordinates but not use ones provided by browser.\n */\nfunction clientToLocal(el, e, out, calculate) {\n    out = out || {};\n\n    // According to the W3C Working Draft, offsetX and offsetY should be relative\n    // to the padding edge of the target element. The only browser using this convention\n    // is IE. Webkit uses the border edge, Opera uses the content edge, and FireFox does\n    // not support the properties.\n    // (see http://www.jacklmoore.com/notes/mouse-position/)\n    // In zr painter.dom, padding edge equals to border edge.\n\n    if (calculate || !env$1.canvasSupported) {\n        calculateZrXY(el, e, out);\n    }\n    // Caution: In FireFox, layerX/layerY Mouse position relative to the closest positioned\n    // ancestor element, so we should make sure el is positioned (e.g., not position:static).\n    // BTW1, Webkit don't return the same results as FF in non-simple cases (like add\n    // zoom-factor, overflow / opacity layers, transforms ...)\n    // BTW2, (ev.offsetY || ev.pageY - $(ev.target).offset().top) is not correct in preserve-3d.\n    // <https://bugs.jquery.com/ticket/8523#comment:14>\n    // BTW3, In ff, offsetX/offsetY is always 0.\n    else if (env$1.browser.firefox && e.layerX != null && e.layerX !== e.offsetX) {\n        out.zrX = e.layerX;\n        out.zrY = e.layerY;\n    }\n    // For IE6+, chrome, safari, opera. (When will ff support offsetX?)\n    else if (e.offsetX != null) {\n        out.zrX = e.offsetX;\n        out.zrY = e.offsetY;\n    }\n    // For some other device, e.g., IOS safari.\n    else {\n        calculateZrXY(el, e, out);\n    }\n\n    return out;\n}\n\nfunction calculateZrXY(el, e, out) {\n    // BlackBerry 5, iOS 3 (original iPhone) don't have getBoundingRect.\n    if (el.getBoundingClientRect && env$1.domSupported) {\n        var ex = e.clientX;\n        var ey = e.clientY;\n\n        if (el.nodeName.toUpperCase() === 'CANVAS') {\n            // Original approach, which do not support CSS transform.\n            // marker can not be locationed in a canvas container\n            // (getBoundingClientRect is always 0). We do not support\n            // that input a pre-created canvas to zr while using css\n            // transform in iOS.\n            var box = el.getBoundingClientRect();\n            out.zrX = ex - box.left;\n            out.zrY = ey - box.top;\n            return;\n        }\n        else {\n            var saved = el[EVENT_SAVED_PROP] || (el[EVENT_SAVED_PROP] = {});\n            var transformer = preparePointerTransformer(prepareCoordMarkers(el, saved), saved);\n            if (transformer) {\n                transformer(_calcOut, ex, ey);\n                out.zrX = _calcOut[0];\n                out.zrY = _calcOut[1];\n                return;\n            }\n        }\n    }\n    out.zrX = out.zrY = 0;\n}\n\nfunction prepareCoordMarkers(el, saved) {\n    var markers = saved.markers;\n    if (markers) {\n        return markers;\n    }\n\n    markers = saved.markers = [];\n    var propLR = ['left', 'right'];\n    var propTB = ['top', 'bottom'];\n\n    for (var i = 0; i < 4; i++) {\n        var marker = document.createElement('div');\n        var stl = marker.style;\n        var idxLR = i % 2;\n        var idxTB = (i >> 1) % 2;\n        stl.cssText = [\n            'position:absolute',\n            'visibility: hidden',\n            'padding: 0',\n            'margin: 0',\n            'border-width: 0',\n            'width:0',\n            'height:0',\n            // 'width: 5px',\n            // 'height: 5px',\n            propLR[idxLR] + ':0',\n            propTB[idxTB] + ':0',\n            propLR[1 - idxLR] + ':auto',\n            propTB[1 - idxTB] + ':auto',\n            ''\n        ].join('!important;');\n        el.appendChild(marker);\n        markers.push(marker);\n    }\n\n    return markers;\n}\n\nfunction preparePointerTransformer(markers, saved) {\n    var transformer = saved.transformer;\n    var oldSrcCoords = saved.srcCoords;\n    var useOld = true;\n    var srcCoords = [];\n    var destCoords = [];\n\n    for (var i = 0; i < 4; i++) {\n        var rect = markers[i].getBoundingClientRect();\n        var ii = 2 * i;\n        var x = rect.left;\n        var y = rect.top;\n        srcCoords.push(x, y);\n        useOld &= oldSrcCoords && x === oldSrcCoords[ii] && y === oldSrcCoords[ii + 1];\n        destCoords.push(markers[i].offsetLeft, markers[i].offsetTop);\n    }\n\n    // Cache to avoid time consuming of `buildTransformer`.\n    return useOld\n        ? transformer\n        : (\n            saved.srcCoords = srcCoords,\n            saved.transformer = buildTransformer(srcCoords, destCoords)\n        );\n}\n\n/**\n * Normalize the coordinates of the input event.\n *\n * Get the `e.zrX` and `e.zrY`, which are relative to the top-left of\n * the input `el`.\n * Get `e.zrDelta` if using mouse wheel.\n * Get `e.which`, see the comment inside this function.\n *\n * Do not calculate repeatly if `zrX` and `zrY` already exist.\n *\n * Notice: see comments in `clientToLocal`. check the relationship\n * between the result coords and the parameters `el` and `calculate`.\n *\n * @param {HTMLElement} el DOM element.\n * @param {Event} [e] Mouse event or touch event. For lagency IE,\n *        do not need to input it and `window.event` is used.\n * @param {boolean} [calculate=false] Whether to force calculate\n *        the coordinates but not use ones provided by browser.\n */\nfunction normalizeEvent(el, e, calculate) {\n\n    e = e || window.event;\n\n    if (e.zrX != null) {\n        return e;\n    }\n\n    var eventType = e.type;\n    var isTouch = eventType && eventType.indexOf('touch') >= 0;\n\n    if (!isTouch) {\n        clientToLocal(el, e, e, calculate);\n        e.zrDelta = (e.wheelDelta) ? e.wheelDelta / 120 : -(e.detail || 0) / 3;\n    }\n    else {\n        var touch = eventType !== 'touchend'\n            ? e.targetTouches[0]\n            : e.changedTouches[0];\n        touch && clientToLocal(el, touch, e, calculate);\n    }\n\n    // Add which for click: 1 === left; 2 === middle; 3 === right; otherwise: 0;\n    // See jQuery: https://github.com/jquery/jquery/blob/master/src/event.js\n    // If e.which has been defined, it may be readonly,\n    // see: https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/which\n    var button = e.button;\n    if (e.which == null && button !== undefined && MOUSE_EVENT_REG.test(e.type)) {\n        e.which = (button & 1 ? 1 : (button & 2 ? 3 : (button & 4 ? 2 : 0)));\n    }\n    // [Caution]: `e.which` from browser is not always reliable. For example,\n    // when press left button and `mousemove (pointermove)` in Edge, the `e.which`\n    // is 65536 and the `e.button` is -1. But the `mouseup (pointerup)` and\n    // `mousedown (pointerdown)` is the same as Chrome does.\n\n    return e;\n}\n\n/**\n * @param {HTMLElement} el\n * @param {string} name\n * @param {Function} handler\n */\nfunction addEventListener(el, name, handler) {\n    if (isDomLevel2) {\n        // Reproduct the console warning:\n        // [Violation] Added non-passive event listener to a scroll-blocking <some> event.\n        // Consider marking event handler as 'passive' to make the page more responsive.\n        // Just set console log level: verbose in chrome dev tool.\n        // then the warning log will be printed when addEventListener called.\n        // See https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n        // We have not yet found a neat way to using passive. Because in zrender the dom event\n        // listener delegate all of the upper events of element. Some of those events need\n        // to prevent default. For example, the feature `preventDefaultMouseMove` of echarts.\n        // Before passive can be adopted, these issues should be considered:\n        // (1) Whether and how a zrender user specifies an event listener passive. And by default,\n        // passive or not.\n        // (2) How to tread that some zrender event listener is passive, and some is not. If\n        // we use other way but not preventDefault of mousewheel and touchmove, browser\n        // compatibility should be handled.\n\n        // var opts = (env.passiveSupported && name === 'mousewheel')\n        //     ? {passive: true}\n        //     // By default, the third param of el.addEventListener is `capture: false`.\n        //     : void 0;\n        // el.addEventListener(name, handler /* , opts */);\n        el.addEventListener(name, handler);\n    }\n    else {\n        el.attachEvent('on' + name, handler);\n    }\n}\n\nfunction removeEventListener(el, name, handler) {\n    if (isDomLevel2) {\n        el.removeEventListener(name, handler);\n    }\n    else {\n        el.detachEvent('on' + name, handler);\n    }\n}\n\n/**\n * preventDefault and stopPropagation.\n * Notice: do not use this method in zrender. It can only be\n * used by upper applications if necessary.\n *\n * @param {Event} e A mouse or touch event.\n */\nvar stop = isDomLevel2\n    ? function (e) {\n        e.preventDefault();\n        e.stopPropagation();\n        e.cancelBubble = true;\n    }\n    : function (e) {\n        e.returnValue = false;\n        e.cancelBubble = true;\n    };\n\n/**\n * This method only works for mouseup and mousedown. The functionality is restricted\n * for fault tolerance, See the `e.which` compatibility above.\n *\n * @param {MouseEvent} e\n * @return {boolean}\n */\nfunction isMiddleOrRightButtonOnMouseUpDown(e) {\n    return e.which === 2 || e.which === 3;\n}\n\n/**\n * To be removed.\n * @deprecated\n */\n\n/**\n * Only implements needed gestures for mobile.\n */\n\nvar GestureMgr = function () {\n\n    /**\n     * @private\n     * @type {Array.<Object>}\n     */\n    this._track = [];\n};\n\nGestureMgr.prototype = {\n\n    constructor: GestureMgr,\n\n    recognize: function (event, target, root) {\n        this._doTrack(event, target, root);\n        return this._recognize(event);\n    },\n\n    clear: function () {\n        this._track.length = 0;\n        return this;\n    },\n\n    _doTrack: function (event, target, root) {\n        var touches = event.touches;\n\n        if (!touches) {\n            return;\n        }\n\n        var trackItem = {\n            points: [],\n            touches: [],\n            target: target,\n            event: event\n        };\n\n        for (var i = 0, len = touches.length; i < len; i++) {\n            var touch = touches[i];\n            var pos = clientToLocal(root, touch, {});\n            trackItem.points.push([pos.zrX, pos.zrY]);\n            trackItem.touches.push(touch);\n        }\n\n        this._track.push(trackItem);\n    },\n\n    _recognize: function (event) {\n        for (var eventName in recognizers) {\n            if (recognizers.hasOwnProperty(eventName)) {\n                var gestureInfo = recognizers[eventName](this._track, event);\n                if (gestureInfo) {\n                    return gestureInfo;\n                }\n            }\n        }\n    }\n};\n\nfunction dist$1(pointPair) {\n    var dx = pointPair[1][0] - pointPair[0][0];\n    var dy = pointPair[1][1] - pointPair[0][1];\n\n    return Math.sqrt(dx * dx + dy * dy);\n}\n\nfunction center(pointPair) {\n    return [\n        (pointPair[0][0] + pointPair[1][0]) / 2,\n        (pointPair[0][1] + pointPair[1][1]) / 2\n    ];\n}\n\nvar recognizers = {\n\n    pinch: function (track, event) {\n        var trackLen = track.length;\n\n        if (!trackLen) {\n            return;\n        }\n\n        var pinchEnd = (track[trackLen - 1] || {}).points;\n        var pinchPre = (track[trackLen - 2] || {}).points || pinchEnd;\n\n        if (pinchPre\n            && pinchPre.length > 1\n            && pinchEnd\n            && pinchEnd.length > 1\n        ) {\n            var pinchScale = dist$1(pinchEnd) / dist$1(pinchPre);\n            !isFinite(pinchScale) && (pinchScale = 1);\n\n            event.pinchScale = pinchScale;\n\n            var pinchCenter = center(pinchEnd);\n            event.pinchX = pinchCenter[0];\n            event.pinchY = pinchCenter[1];\n\n            return {\n                type: 'pinch',\n                target: track[0].target,\n                event: event\n            };\n        }\n    }\n\n    // Only pinch currently.\n};\n\nvar SILENT = 'silent';\n\nfunction makeEventPacket(eveType, targetInfo, event) {\n    return {\n        type: eveType,\n        event: event,\n        // target can only be an element that is not silent.\n        target: targetInfo.target,\n        // topTarget can be a silent element.\n        topTarget: targetInfo.topTarget,\n        cancelBubble: false,\n        offsetX: event.zrX,\n        offsetY: event.zrY,\n        gestureEvent: event.gestureEvent,\n        pinchX: event.pinchX,\n        pinchY: event.pinchY,\n        pinchScale: event.pinchScale,\n        wheelDelta: event.zrDelta,\n        zrByTouch: event.zrByTouch,\n        which: event.which,\n        stop: stopEvent\n    };\n}\n\nfunction stopEvent(event) {\n    stop(this.event);\n}\n\nfunction EmptyProxy() {}\nEmptyProxy.prototype.dispose = function () {};\n\nvar handlerNames = [\n    'click', 'dblclick', 'mousewheel', 'mouseout',\n    'mouseup', 'mousedown', 'mousemove', 'contextmenu'\n];\n/**\n * @alias module:zrender/Handler\n * @constructor\n * @extends module:zrender/mixin/Eventful\n * @param {module:zrender/Storage} storage Storage instance.\n * @param {module:zrender/Painter} painter Painter instance.\n * @param {module:zrender/dom/HandlerProxy} proxy HandlerProxy instance.\n * @param {HTMLElement} painterRoot painter.root (not painter.getViewportRoot()).\n */\nvar Handler = function (storage, painter, proxy, painterRoot) {\n    Eventful.call(this);\n\n    this.storage = storage;\n\n    this.painter = painter;\n\n    this.painterRoot = painterRoot;\n\n    proxy = proxy || new EmptyProxy();\n\n    /**\n     * Proxy of event. can be Dom, WebGLSurface, etc.\n     */\n    this.proxy = null;\n\n    /**\n     * {target, topTarget, x, y}\n     * @private\n     * @type {Object}\n     */\n    this._hovered = {};\n\n    /**\n     * @private\n     * @type {Date}\n     */\n    this._lastTouchMoment;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this._lastX;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this._lastY;\n\n    /**\n     * @private\n     * @type {module:zrender/core/GestureMgr}\n     */\n    this._gestureMgr;\n\n\n    Draggable.call(this);\n\n    this.setHandlerProxy(proxy);\n};\n\nHandler.prototype = {\n\n    constructor: Handler,\n\n    setHandlerProxy: function (proxy) {\n        if (this.proxy) {\n            this.proxy.dispose();\n        }\n\n        if (proxy) {\n            each$1(handlerNames, function (name) {\n                proxy.on && proxy.on(name, this[name], this);\n            }, this);\n            // Attach handler\n            proxy.handler = this;\n        }\n        this.proxy = proxy;\n    },\n\n    mousemove: function (event) {\n        var x = event.zrX;\n        var y = event.zrY;\n\n        var lastHovered = this._hovered;\n        var lastHoveredTarget = lastHovered.target;\n\n        // If lastHoveredTarget is removed from zr (detected by '__zr') by some API call\n        // (like 'setOption' or 'dispatchAction') in event handlers, we should find\n        // lastHovered again here. Otherwise 'mouseout' can not be triggered normally.\n        // See #6198.\n        if (lastHoveredTarget && !lastHoveredTarget.__zr) {\n            lastHovered = this.findHover(lastHovered.x, lastHovered.y);\n            lastHoveredTarget = lastHovered.target;\n        }\n\n        var hovered = this._hovered = this.findHover(x, y);\n        var hoveredTarget = hovered.target;\n\n        var proxy = this.proxy;\n        proxy.setCursor && proxy.setCursor(hoveredTarget ? hoveredTarget.cursor : 'default');\n\n        // Mouse out on previous hovered element\n        if (lastHoveredTarget && hoveredTarget !== lastHoveredTarget) {\n            this.dispatchToElement(lastHovered, 'mouseout', event);\n        }\n\n        // Mouse moving on one element\n        this.dispatchToElement(hovered, 'mousemove', event);\n\n        // Mouse over on a new element\n        if (hoveredTarget && hoveredTarget !== lastHoveredTarget) {\n            this.dispatchToElement(hovered, 'mouseover', event);\n        }\n    },\n\n    mouseout: function (event) {\n        this.dispatchToElement(this._hovered, 'mouseout', event);\n\n        // There might be some doms created by upper layer application\n        // at the same level of painter.getViewportRoot() (e.g., tooltip\n        // dom created by echarts), where 'globalout' event should not\n        // be triggered when mouse enters these doms. (But 'mouseout'\n        // should be triggered at the original hovered element as usual).\n        var element = event.toElement || event.relatedTarget;\n        var innerDom;\n        do {\n            element = element && element.parentNode;\n        }\n        while (element && element.nodeType !== 9 && !(\n            innerDom = element === this.painterRoot\n        ));\n\n        !innerDom && this.trigger('globalout', {event: event});\n    },\n\n    /**\n     * Resize\n     */\n    resize: function (event) {\n        this._hovered = {};\n    },\n\n    /**\n     * Dispatch event\n     * @param {string} eventName\n     * @param {event=} eventArgs\n     */\n    dispatch: function (eventName, eventArgs) {\n        var handler = this[eventName];\n        handler && handler.call(this, eventArgs);\n    },\n\n    /**\n     * Dispose\n     */\n    dispose: function () {\n\n        this.proxy.dispose();\n\n        this.storage =\n        this.proxy =\n        this.painter = null;\n    },\n\n    /**\n     * 设置默认的cursor style\n     * @param {string} [cursorStyle='default'] 例如 crosshair\n     */\n    setCursorStyle: function (cursorStyle) {\n        var proxy = this.proxy;\n        proxy.setCursor && proxy.setCursor(cursorStyle);\n    },\n\n    /**\n     * 事件分发代理\n     *\n     * @private\n     * @param {Object} targetInfo {target, topTarget} 目标图形元素\n     * @param {string} eventName 事件名称\n     * @param {Object} event 事件对象\n     */\n    dispatchToElement: function (targetInfo, eventName, event) {\n        targetInfo = targetInfo || {};\n        var el = targetInfo.target;\n        if (el && el.silent) {\n            return;\n        }\n        var eventHandler = 'on' + eventName;\n        var eventPacket = makeEventPacket(eventName, targetInfo, event);\n\n        while (el) {\n            el[eventHandler]\n                && (eventPacket.cancelBubble = el[eventHandler].call(el, eventPacket));\n\n            el.trigger(eventName, eventPacket);\n\n            el = el.parent;\n\n            if (eventPacket.cancelBubble) {\n                break;\n            }\n        }\n\n        if (!eventPacket.cancelBubble) {\n            // 冒泡到顶级 zrender 对象\n            this.trigger(eventName, eventPacket);\n            // 分发事件到用户自定义层\n            // 用户有可能在全局 click 事件中 dispose，所以需要判断下 painter 是否存在\n            this.painter && this.painter.eachOtherLayer(function (layer) {\n                if (typeof (layer[eventHandler]) === 'function') {\n                    layer[eventHandler].call(layer, eventPacket);\n                }\n                if (layer.trigger) {\n                    layer.trigger(eventName, eventPacket);\n                }\n            });\n        }\n    },\n\n    /**\n     * @private\n     * @param {number} x\n     * @param {number} y\n     * @param {module:zrender/graphic/Displayable} exclude\n     * @return {model:zrender/Element}\n     * @method\n     */\n    findHover: function (x, y, exclude) {\n        var list = this.storage.getDisplayList();\n        var out = {x: x, y: y};\n\n        for (var i = list.length - 1; i >= 0; i--) {\n            var hoverCheckResult;\n            if (list[i] !== exclude\n                // getDisplayList may include ignored item in VML mode\n                && !list[i].ignore\n                && (hoverCheckResult = isHover(list[i], x, y))\n            ) {\n                !out.topTarget && (out.topTarget = list[i]);\n                if (hoverCheckResult !== SILENT) {\n                    out.target = list[i];\n                    break;\n                }\n            }\n        }\n\n        return out;\n    },\n\n    processGesture: function (event, stage) {\n        if (!this._gestureMgr) {\n            this._gestureMgr = new GestureMgr();\n        }\n        var gestureMgr = this._gestureMgr;\n\n        stage === 'start' && gestureMgr.clear();\n\n        var gestureInfo = gestureMgr.recognize(\n            event,\n            this.findHover(event.zrX, event.zrY, null).target,\n            this.proxy.dom\n        );\n\n        stage === 'end' && gestureMgr.clear();\n\n        // Do not do any preventDefault here. Upper application do that if necessary.\n        if (gestureInfo) {\n            var type = gestureInfo.type;\n            event.gestureEvent = type;\n\n            this.dispatchToElement({target: gestureInfo.target}, type, gestureInfo.event);\n        }\n    }\n};\n\n// Common handlers\neach$1(['click', 'mousedown', 'mouseup', 'mousewheel', 'dblclick', 'contextmenu'], function (name) {\n    Handler.prototype[name] = function (event) {\n        // Find hover again to avoid click event is dispatched manually. Or click is triggered without mouseover\n        var hovered = this.findHover(event.zrX, event.zrY);\n        var hoveredTarget = hovered.target;\n\n        if (name === 'mousedown') {\n            this._downEl = hoveredTarget;\n            this._downPoint = [event.zrX, event.zrY];\n            // In case click triggered before mouseup\n            this._upEl = hoveredTarget;\n        }\n        else if (name === 'mouseup') {\n            this._upEl = hoveredTarget;\n        }\n        else if (name === 'click') {\n            if (this._downEl !== this._upEl\n                // Original click event is triggered on the whole canvas element,\n                // including the case that `mousedown` - `mousemove` - `mouseup`,\n                // which should be filtered, otherwise it will bring trouble to\n                // pan and zoom.\n                || !this._downPoint\n                // Arbitrary value\n                || dist(this._downPoint, [event.zrX, event.zrY]) > 4\n            ) {\n                return;\n            }\n            this._downPoint = null;\n        }\n\n        this.dispatchToElement(hovered, name, event);\n    };\n});\n\nfunction isHover(displayable, x, y) {\n    if (displayable[displayable.rectHover ? 'rectContain' : 'contain'](x, y)) {\n        var el = displayable;\n        var isSilent;\n        while (el) {\n            // If clipped by ancestor.\n            // FIXME: If clipPath has neither stroke nor fill,\n            // el.clipPath.contain(x, y) will always return false.\n            if (el.clipPath && !el.clipPath.contain(x, y)) {\n                return false;\n            }\n            if (el.silent) {\n                isSilent = true;\n            }\n            el = el.parent;\n        }\n        return isSilent ? SILENT : true;\n    }\n\n    return false;\n}\n\nmixin(Handler, Eventful);\nmixin(Handler, Draggable);\n\n/**\n * 3x2矩阵操作类\n * @exports zrender/tool/matrix\n */\n\nvar ArrayCtor$1 = typeof Float32Array === 'undefined'\n    ? Array\n    : Float32Array;\n\n/**\n * Create a identity matrix.\n * @return {Float32Array|Array.<number>}\n */\nfunction create$1() {\n    var out = new ArrayCtor$1(6);\n    identity(out);\n\n    return out;\n}\n\n/**\n * 设置矩阵为单位矩阵\n * @param {Float32Array|Array.<number>} out\n */\nfunction identity(out) {\n    out[0] = 1;\n    out[1] = 0;\n    out[2] = 0;\n    out[3] = 1;\n    out[4] = 0;\n    out[5] = 0;\n    return out;\n}\n\n/**\n * 复制矩阵\n * @param {Float32Array|Array.<number>} out\n * @param {Float32Array|Array.<number>} m\n */\nfunction copy$1(out, m) {\n    out[0] = m[0];\n    out[1] = m[1];\n    out[2] = m[2];\n    out[3] = m[3];\n    out[4] = m[4];\n    out[5] = m[5];\n    return out;\n}\n\n/**\n * 矩阵相乘\n * @param {Float32Array|Array.<number>} out\n * @param {Float32Array|Array.<number>} m1\n * @param {Float32Array|Array.<number>} m2\n */\nfunction mul$1(out, m1, m2) {\n    // Consider matrix.mul(m, m2, m);\n    // where out is the same as m2.\n    // So use temp variable to escape error.\n    var out0 = m1[0] * m2[0] + m1[2] * m2[1];\n    var out1 = m1[1] * m2[0] + m1[3] * m2[1];\n    var out2 = m1[0] * m2[2] + m1[2] * m2[3];\n    var out3 = m1[1] * m2[2] + m1[3] * m2[3];\n    var out4 = m1[0] * m2[4] + m1[2] * m2[5] + m1[4];\n    var out5 = m1[1] * m2[4] + m1[3] * m2[5] + m1[5];\n    out[0] = out0;\n    out[1] = out1;\n    out[2] = out2;\n    out[3] = out3;\n    out[4] = out4;\n    out[5] = out5;\n    return out;\n}\n\n/**\n * 平移变换\n * @param {Float32Array|Array.<number>} out\n * @param {Float32Array|Array.<number>} a\n * @param {Float32Array|Array.<number>} v\n */\nfunction translate(out, a, v) {\n    out[0] = a[0];\n    out[1] = a[1];\n    out[2] = a[2];\n    out[3] = a[3];\n    out[4] = a[4] + v[0];\n    out[5] = a[5] + v[1];\n    return out;\n}\n\n/**\n * 旋转变换\n * @param {Float32Array|Array.<number>} out\n * @param {Float32Array|Array.<number>} a\n * @param {number} rad\n */\nfunction rotate(out, a, rad) {\n    var aa = a[0];\n    var ac = a[2];\n    var atx = a[4];\n    var ab = a[1];\n    var ad = a[3];\n    var aty = a[5];\n    var st = Math.sin(rad);\n    var ct = Math.cos(rad);\n\n    out[0] = aa * ct + ab * st;\n    out[1] = -aa * st + ab * ct;\n    out[2] = ac * ct + ad * st;\n    out[3] = -ac * st + ct * ad;\n    out[4] = ct * atx + st * aty;\n    out[5] = ct * aty - st * atx;\n    return out;\n}\n\n/**\n * 缩放变换\n * @param {Float32Array|Array.<number>} out\n * @param {Float32Array|Array.<number>} a\n * @param {Float32Array|Array.<number>} v\n */\nfunction scale$1(out, a, v) {\n    var vx = v[0];\n    var vy = v[1];\n    out[0] = a[0] * vx;\n    out[1] = a[1] * vy;\n    out[2] = a[2] * vx;\n    out[3] = a[3] * vy;\n    out[4] = a[4] * vx;\n    out[5] = a[5] * vy;\n    return out;\n}\n\n/**\n * 求逆矩阵\n * @param {Float32Array|Array.<number>} out\n * @param {Float32Array|Array.<number>} a\n */\nfunction invert(out, a) {\n\n    var aa = a[0];\n    var ac = a[2];\n    var atx = a[4];\n    var ab = a[1];\n    var ad = a[3];\n    var aty = a[5];\n\n    var det = aa * ad - ab * ac;\n    if (!det) {\n        return null;\n    }\n    det = 1.0 / det;\n\n    out[0] = ad * det;\n    out[1] = -ab * det;\n    out[2] = -ac * det;\n    out[3] = aa * det;\n    out[4] = (ac * aty - ad * atx) * det;\n    out[5] = (ab * atx - aa * aty) * det;\n    return out;\n}\n\n/**\n * Clone a new matrix.\n * @param {Float32Array|Array.<number>} a\n */\nfunction clone$2(a) {\n    var b = create$1();\n    copy$1(b, a);\n    return b;\n}\n\nvar matrix = (Object.freeze || Object)({\n\tcreate: create$1,\n\tidentity: identity,\n\tcopy: copy$1,\n\tmul: mul$1,\n\ttranslate: translate,\n\trotate: rotate,\n\tscale: scale$1,\n\tinvert: invert,\n\tclone: clone$2\n});\n\n/**\n * 提供变换扩展\n * @module zrender/mixin/Transformable\n * @author pissang (https://www.github.com/pissang)\n */\n\nvar mIdentity = identity;\n\nvar EPSILON = 5e-5;\n\nfunction isNotAroundZero(val) {\n    return val > EPSILON || val < -EPSILON;\n}\n\n/**\n * @alias module:zrender/mixin/Transformable\n * @constructor\n */\nvar Transformable = function (opts) {\n    opts = opts || {};\n    // If there are no given position, rotation, scale\n    if (!opts.position) {\n        /**\n         * 平移\n         * @type {Array.<number>}\n         * @default [0, 0]\n         */\n        this.position = [0, 0];\n    }\n    if (opts.rotation == null) {\n        /**\n         * 旋转\n         * @type {Array.<number>}\n         * @default 0\n         */\n        this.rotation = 0;\n    }\n    if (!opts.scale) {\n        /**\n         * 缩放\n         * @type {Array.<number>}\n         * @default [1, 1]\n         */\n        this.scale = [1, 1];\n    }\n    /**\n     * 旋转和缩放的原点\n     * @type {Array.<number>}\n     * @default null\n     */\n    this.origin = this.origin || null;\n};\n\nvar transformableProto = Transformable.prototype;\ntransformableProto.transform = null;\n\n/**\n * 判断是否需要有坐标变换\n * 如果有坐标变换, 则从position, rotation, scale以及父节点的transform计算出自身的transform矩阵\n */\ntransformableProto.needLocalTransform = function () {\n    return isNotAroundZero(this.rotation)\n        || isNotAroundZero(this.position[0])\n        || isNotAroundZero(this.position[1])\n        || isNotAroundZero(this.scale[0] - 1)\n        || isNotAroundZero(this.scale[1] - 1);\n};\n\nvar scaleTmp = [];\ntransformableProto.updateTransform = function () {\n    var parent = this.parent;\n    var parentHasTransform = parent && parent.transform;\n    var needLocalTransform = this.needLocalTransform();\n\n    var m = this.transform;\n    if (!(needLocalTransform || parentHasTransform)) {\n        m && mIdentity(m);\n        return;\n    }\n\n    m = m || create$1();\n\n    if (needLocalTransform) {\n        this.getLocalTransform(m);\n    }\n    else {\n        mIdentity(m);\n    }\n\n    // 应用父节点变换\n    if (parentHasTransform) {\n        if (needLocalTransform) {\n            mul$1(m, parent.transform, m);\n        }\n        else {\n            copy$1(m, parent.transform);\n        }\n    }\n    // 保存这个变换矩阵\n    this.transform = m;\n\n    var globalScaleRatio = this.globalScaleRatio;\n    if (globalScaleRatio != null && globalScaleRatio !== 1) {\n        this.getGlobalScale(scaleTmp);\n        var relX = scaleTmp[0] < 0 ? -1 : 1;\n        var relY = scaleTmp[1] < 0 ? -1 : 1;\n        var sx = ((scaleTmp[0] - relX) * globalScaleRatio + relX) / scaleTmp[0] || 0;\n        var sy = ((scaleTmp[1] - relY) * globalScaleRatio + relY) / scaleTmp[1] || 0;\n\n        m[0] *= sx;\n        m[1] *= sx;\n        m[2] *= sy;\n        m[3] *= sy;\n    }\n\n    this.invTransform = this.invTransform || create$1();\n    invert(this.invTransform, m);\n};\n\ntransformableProto.getLocalTransform = function (m) {\n    return Transformable.getLocalTransform(this, m);\n};\n\n/**\n * 将自己的transform应用到context上\n * @param {CanvasRenderingContext2D} ctx\n */\ntransformableProto.setTransform = function (ctx) {\n    var m = this.transform;\n    var dpr = ctx.dpr || 1;\n    if (m) {\n        ctx.setTransform(dpr * m[0], dpr * m[1], dpr * m[2], dpr * m[3], dpr * m[4], dpr * m[5]);\n    }\n    else {\n        ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n    }\n};\n\ntransformableProto.restoreTransform = function (ctx) {\n    var dpr = ctx.dpr || 1;\n    ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n};\n\nvar tmpTransform = [];\nvar originTransform = create$1();\n\ntransformableProto.setLocalTransform = function (m) {\n    if (!m) {\n        // TODO return or set identity?\n        return;\n    }\n    var sx = m[0] * m[0] + m[1] * m[1];\n    var sy = m[2] * m[2] + m[3] * m[3];\n    var position = this.position;\n    var scale$$1 = this.scale;\n    if (isNotAroundZero(sx - 1)) {\n        sx = Math.sqrt(sx);\n    }\n    if (isNotAroundZero(sy - 1)) {\n        sy = Math.sqrt(sy);\n    }\n    if (m[0] < 0) {\n        sx = -sx;\n    }\n    if (m[3] < 0) {\n        sy = -sy;\n    }\n\n    position[0] = m[4];\n    position[1] = m[5];\n    scale$$1[0] = sx;\n    scale$$1[1] = sy;\n    this.rotation = Math.atan2(-m[1] / sy, m[0] / sx);\n};\n/**\n * 分解`transform`矩阵到`position`, `rotation`, `scale`\n */\ntransformableProto.decomposeTransform = function () {\n    if (!this.transform) {\n        return;\n    }\n    var parent = this.parent;\n    var m = this.transform;\n    if (parent && parent.transform) {\n        // Get local transform and decompose them to position, scale, rotation\n        mul$1(tmpTransform, parent.invTransform, m);\n        m = tmpTransform;\n    }\n    var origin = this.origin;\n    if (origin && (origin[0] || origin[1])) {\n        originTransform[4] = origin[0];\n        originTransform[5] = origin[1];\n        mul$1(tmpTransform, m, originTransform);\n        tmpTransform[4] -= origin[0];\n        tmpTransform[5] -= origin[1];\n        m = tmpTransform;\n    }\n\n    this.setLocalTransform(m);\n};\n\n/**\n * Get global scale\n * @return {Array.<number>}\n */\ntransformableProto.getGlobalScale = function (out) {\n    var m = this.transform;\n    out = out || [];\n    if (!m) {\n        out[0] = 1;\n        out[1] = 1;\n        return out;\n    }\n    out[0] = Math.sqrt(m[0] * m[0] + m[1] * m[1]);\n    out[1] = Math.sqrt(m[2] * m[2] + m[3] * m[3]);\n    if (m[0] < 0) {\n        out[0] = -out[0];\n    }\n    if (m[3] < 0) {\n        out[1] = -out[1];\n    }\n    return out;\n};\n/**\n * 变换坐标位置到 shape 的局部坐标空间\n * @method\n * @param {number} x\n * @param {number} y\n * @return {Array.<number>}\n */\ntransformableProto.transformCoordToLocal = function (x, y) {\n    var v2 = [x, y];\n    var invTransform = this.invTransform;\n    if (invTransform) {\n        applyTransform(v2, v2, invTransform);\n    }\n    return v2;\n};\n\n/**\n * 变换局部坐标位置到全局坐标空间\n * @method\n * @param {number} x\n * @param {number} y\n * @return {Array.<number>}\n */\ntransformableProto.transformCoordToGlobal = function (x, y) {\n    var v2 = [x, y];\n    var transform = this.transform;\n    if (transform) {\n        applyTransform(v2, v2, transform);\n    }\n    return v2;\n};\n\n/**\n * @static\n * @param {Object} target\n * @param {Array.<number>} target.origin\n * @param {number} target.rotation\n * @param {Array.<number>} target.position\n * @param {Array.<number>} [m]\n */\nTransformable.getLocalTransform = function (target, m) {\n    m = m || [];\n    mIdentity(m);\n\n    var origin = target.origin;\n    var scale$$1 = target.scale || [1, 1];\n    var rotation = target.rotation || 0;\n    var position = target.position || [0, 0];\n\n    if (origin) {\n        // Translate to origin\n        m[4] -= origin[0];\n        m[5] -= origin[1];\n    }\n    scale$1(m, m, scale$$1);\n    if (rotation) {\n        rotate(m, m, rotation);\n    }\n    if (origin) {\n        // Translate back from origin\n        m[4] += origin[0];\n        m[5] += origin[1];\n    }\n\n    m[4] += position[0];\n    m[5] += position[1];\n\n    return m;\n};\n\n/**\n * 缓动代码来自 https://github.com/sole/tween.js/blob/master/src/Tween.js\n * @see http://sole.github.io/tween.js/examples/03_graphs.html\n * @exports zrender/animation/easing\n */\nvar easing = {\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    linear: function (k) {\n        return k;\n    },\n\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    quadraticIn: function (k) {\n        return k * k;\n    },\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    quadraticOut: function (k) {\n        return k * (2 - k);\n    },\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    quadraticInOut: function (k) {\n        if ((k *= 2) < 1) {\n            return 0.5 * k * k;\n        }\n        return -0.5 * (--k * (k - 2) - 1);\n    },\n\n    // 三次方的缓动（t^3）\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    cubicIn: function (k) {\n        return k * k * k;\n    },\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    cubicOut: function (k) {\n        return --k * k * k + 1;\n    },\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    cubicInOut: function (k) {\n        if ((k *= 2) < 1) {\n            return 0.5 * k * k * k;\n        }\n        return 0.5 * ((k -= 2) * k * k + 2);\n    },\n\n    // 四次方的缓动（t^4）\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    quarticIn: function (k) {\n        return k * k * k * k;\n    },\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    quarticOut: function (k) {\n        return 1 - (--k * k * k * k);\n    },\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    quarticInOut: function (k) {\n        if ((k *= 2) < 1) {\n            return 0.5 * k * k * k * k;\n        }\n        return -0.5 * ((k -= 2) * k * k * k - 2);\n    },\n\n    // 五次方的缓动（t^5）\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    quinticIn: function (k) {\n        return k * k * k * k * k;\n    },\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    quinticOut: function (k) {\n        return --k * k * k * k * k + 1;\n    },\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    quinticInOut: function (k) {\n        if ((k *= 2) < 1) {\n            return 0.5 * k * k * k * k * k;\n        }\n        return 0.5 * ((k -= 2) * k * k * k * k + 2);\n    },\n\n    // 正弦曲线的缓动（sin(t)）\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    sinusoidalIn: function (k) {\n        return 1 - Math.cos(k * Math.PI / 2);\n    },\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    sinusoidalOut: function (k) {\n        return Math.sin(k * Math.PI / 2);\n    },\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    sinusoidalInOut: function (k) {\n        return 0.5 * (1 - Math.cos(Math.PI * k));\n    },\n\n    // 指数曲线的缓动（2^t）\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    exponentialIn: function (k) {\n        return k === 0 ? 0 : Math.pow(1024, k - 1);\n    },\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    exponentialOut: function (k) {\n        return k === 1 ? 1 : 1 - Math.pow(2, -10 * k);\n    },\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    exponentialInOut: function (k) {\n        if (k === 0) {\n            return 0;\n        }\n        if (k === 1) {\n            return 1;\n        }\n        if ((k *= 2) < 1) {\n            return 0.5 * Math.pow(1024, k - 1);\n        }\n        return 0.5 * (-Math.pow(2, -10 * (k - 1)) + 2);\n    },\n\n    // 圆形曲线的缓动（sqrt(1-t^2)）\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    circularIn: function (k) {\n        return 1 - Math.sqrt(1 - k * k);\n    },\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    circularOut: function (k) {\n        return Math.sqrt(1 - (--k * k));\n    },\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    circularInOut: function (k) {\n        if ((k *= 2) < 1) {\n            return -0.5 * (Math.sqrt(1 - k * k) - 1);\n        }\n        return 0.5 * (Math.sqrt(1 - (k -= 2) * k) + 1);\n    },\n\n    // 创建类似于弹簧在停止前来回振荡的动画\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    elasticIn: function (k) {\n        var s;\n        var a = 0.1;\n        var p = 0.4;\n        if (k === 0) {\n            return 0;\n        }\n        if (k === 1) {\n            return 1;\n        }\n        if (!a || a < 1) {\n            a = 1;\n            s = p / 4;\n        }\n        else {\n            s = p * Math.asin(1 / a) / (2 * Math.PI);\n        }\n        return -(a * Math.pow(2, 10 * (k -= 1))\n                    * Math.sin((k - s) * (2 * Math.PI) / p));\n    },\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    elasticOut: function (k) {\n        var s;\n        var a = 0.1;\n        var p = 0.4;\n        if (k === 0) {\n            return 0;\n        }\n        if (k === 1) {\n            return 1;\n        }\n        if (!a || a < 1) {\n            a = 1;\n            s = p / 4;\n        }\n        else {\n            s = p * Math.asin(1 / a) / (2 * Math.PI);\n        }\n        return (a * Math.pow(2, -10 * k)\n                    * Math.sin((k - s) * (2 * Math.PI) / p) + 1);\n    },\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    elasticInOut: function (k) {\n        var s;\n        var a = 0.1;\n        var p = 0.4;\n        if (k === 0) {\n            return 0;\n        }\n        if (k === 1) {\n            return 1;\n        }\n        if (!a || a < 1) {\n            a = 1;\n            s = p / 4;\n        }\n        else {\n            s = p * Math.asin(1 / a) / (2 * Math.PI);\n        }\n        if ((k *= 2) < 1) {\n            return -0.5 * (a * Math.pow(2, 10 * (k -= 1))\n                * Math.sin((k - s) * (2 * Math.PI) / p));\n        }\n        return a * Math.pow(2, -10 * (k -= 1))\n                * Math.sin((k - s) * (2 * Math.PI) / p) * 0.5 + 1;\n\n    },\n\n    // 在某一动画开始沿指示的路径进行动画处理前稍稍收回该动画的移动\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    backIn: function (k) {\n        var s = 1.70158;\n        return k * k * ((s + 1) * k - s);\n    },\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    backOut: function (k) {\n        var s = 1.70158;\n        return --k * k * ((s + 1) * k + s) + 1;\n    },\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    backInOut: function (k) {\n        var s = 1.70158 * 1.525;\n        if ((k *= 2) < 1) {\n            return 0.5 * (k * k * ((s + 1) * k - s));\n        }\n        return 0.5 * ((k -= 2) * k * ((s + 1) * k + s) + 2);\n    },\n\n    // 创建弹跳效果\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    bounceIn: function (k) {\n        return 1 - easing.bounceOut(1 - k);\n    },\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    bounceOut: function (k) {\n        if (k < (1 / 2.75)) {\n            return 7.5625 * k * k;\n        }\n        else if (k < (2 / 2.75)) {\n            return 7.5625 * (k -= (1.5 / 2.75)) * k + 0.75;\n        }\n        else if (k < (2.5 / 2.75)) {\n            return 7.5625 * (k -= (2.25 / 2.75)) * k + 0.9375;\n        }\n        else {\n            return 7.5625 * (k -= (2.625 / 2.75)) * k + 0.984375;\n        }\n    },\n    /**\n    * @param {number} k\n    * @return {number}\n    */\n    bounceInOut: function (k) {\n        if (k < 0.5) {\n            return easing.bounceIn(k * 2) * 0.5;\n        }\n        return easing.bounceOut(k * 2 - 1) * 0.5 + 0.5;\n    }\n};\n\n/**\n * 动画主控制器\n * @config target 动画对象，可以是数组，如果是数组的话会批量分发onframe等事件\n * @config life(1000) 动画时长\n * @config delay(0) 动画延迟时间\n * @config loop(true)\n * @config gap(0) 循环的间隔时间\n * @config onframe\n * @config easing(optional)\n * @config ondestroy(optional)\n * @config onrestart(optional)\n *\n * TODO pause\n */\n\nfunction Clip(options) {\n\n    this._target = options.target;\n\n    // 生命周期\n    this._life = options.life || 1000;\n    // 延时\n    this._delay = options.delay || 0;\n    // 开始时间\n    // this._startTime = new Date().getTime() + this._delay;// 单位毫秒\n    this._initialized = false;\n\n    // 是否循环\n    this.loop = options.loop == null ? false : options.loop;\n\n    this.gap = options.gap || 0;\n\n    this.easing = options.easing || 'Linear';\n\n    this.onframe = options.onframe;\n    this.ondestroy = options.ondestroy;\n    this.onrestart = options.onrestart;\n\n    this._pausedTime = 0;\n    this._paused = false;\n}\n\nClip.prototype = {\n\n    constructor: Clip,\n\n    step: function (globalTime, deltaTime) {\n        // Set startTime on first step, or _startTime may has milleseconds different between clips\n        // PENDING\n        if (!this._initialized) {\n            this._startTime = globalTime + this._delay;\n            this._initialized = true;\n        }\n\n        if (this._paused) {\n            this._pausedTime += deltaTime;\n            return;\n        }\n\n        var percent = (globalTime - this._startTime - this._pausedTime) / this._life;\n\n        // 还没开始\n        if (percent < 0) {\n            return;\n        }\n\n        percent = Math.min(percent, 1);\n\n        var easing$$1 = this.easing;\n        var easingFunc = typeof easing$$1 === 'string' ? easing[easing$$1] : easing$$1;\n        var schedule = typeof easingFunc === 'function'\n            ? easingFunc(percent)\n            : percent;\n\n        this.fire('frame', schedule);\n\n        // 结束\n        if (percent === 1) {\n            if (this.loop) {\n                this.restart(globalTime);\n                // 重新开始周期\n                // 抛出而不是直接调用事件直到 stage.update 后再统一调用这些事件\n                return 'restart';\n            }\n\n            // 动画完成将这个控制器标识为待删除\n            // 在Animation.update中进行批量删除\n            this._needsRemove = true;\n            return 'destroy';\n        }\n\n        return null;\n    },\n\n    restart: function (globalTime) {\n        var remainder = (globalTime - this._startTime - this._pausedTime) % this._life;\n        this._startTime = globalTime - remainder + this.gap;\n        this._pausedTime = 0;\n\n        this._needsRemove = false;\n    },\n\n    fire: function (eventType, arg) {\n        eventType = 'on' + eventType;\n        if (this[eventType]) {\n            this[eventType](this._target, arg);\n        }\n    },\n\n    pause: function () {\n        this._paused = true;\n    },\n\n    resume: function () {\n        this._paused = false;\n    }\n};\n\n// Simple LRU cache use doubly linked list\n// @module zrender/core/LRU\n\n/**\n * Simple double linked list. Compared with array, it has O(1) remove operation.\n * @constructor\n */\nvar LinkedList = function () {\n\n    /**\n     * @type {module:zrender/core/LRU~Entry}\n     */\n    this.head = null;\n\n    /**\n     * @type {module:zrender/core/LRU~Entry}\n     */\n    this.tail = null;\n\n    this._len = 0;\n};\n\nvar linkedListProto = LinkedList.prototype;\n/**\n * Insert a new value at the tail\n * @param  {} val\n * @return {module:zrender/core/LRU~Entry}\n */\nlinkedListProto.insert = function (val) {\n    var entry = new Entry(val);\n    this.insertEntry(entry);\n    return entry;\n};\n\n/**\n * Insert an entry at the tail\n * @param  {module:zrender/core/LRU~Entry} entry\n */\nlinkedListProto.insertEntry = function (entry) {\n    if (!this.head) {\n        this.head = this.tail = entry;\n    }\n    else {\n        this.tail.next = entry;\n        entry.prev = this.tail;\n        entry.next = null;\n        this.tail = entry;\n    }\n    this._len++;\n};\n\n/**\n * Remove entry.\n * @param  {module:zrender/core/LRU~Entry} entry\n */\nlinkedListProto.remove = function (entry) {\n    var prev = entry.prev;\n    var next = entry.next;\n    if (prev) {\n        prev.next = next;\n    }\n    else {\n        // Is head\n        this.head = next;\n    }\n    if (next) {\n        next.prev = prev;\n    }\n    else {\n        // Is tail\n        this.tail = prev;\n    }\n    entry.next = entry.prev = null;\n    this._len--;\n};\n\n/**\n * @return {number}\n */\nlinkedListProto.len = function () {\n    return this._len;\n};\n\n/**\n * Clear list\n */\nlinkedListProto.clear = function () {\n    this.head = this.tail = null;\n    this._len = 0;\n};\n\n/**\n * @constructor\n * @param {} val\n */\nvar Entry = function (val) {\n    /**\n     * @type {}\n     */\n    this.value = val;\n\n    /**\n     * @type {module:zrender/core/LRU~Entry}\n     */\n    this.next;\n\n    /**\n     * @type {module:zrender/core/LRU~Entry}\n     */\n    this.prev;\n};\n\n/**\n * LRU Cache\n * @constructor\n * @alias module:zrender/core/LRU\n */\nvar LRU = function (maxSize) {\n\n    this._list = new LinkedList();\n\n    this._map = {};\n\n    this._maxSize = maxSize || 10;\n\n    this._lastRemovedEntry = null;\n};\n\nvar LRUProto = LRU.prototype;\n\n/**\n * @param  {string} key\n * @param  {} value\n * @return {} Removed value\n */\nLRUProto.put = function (key, value) {\n    var list = this._list;\n    var map = this._map;\n    var removed = null;\n    if (map[key] == null) {\n        var len = list.len();\n        // Reuse last removed entry\n        var entry = this._lastRemovedEntry;\n\n        if (len >= this._maxSize && len > 0) {\n            // Remove the least recently used\n            var leastUsedEntry = list.head;\n            list.remove(leastUsedEntry);\n            delete map[leastUsedEntry.key];\n\n            removed = leastUsedEntry.value;\n            this._lastRemovedEntry = leastUsedEntry;\n        }\n\n        if (entry) {\n            entry.value = value;\n        }\n        else {\n            entry = new Entry(value);\n        }\n        entry.key = key;\n        list.insertEntry(entry);\n        map[key] = entry;\n    }\n\n    return removed;\n};\n\n/**\n * @param  {string} key\n * @return {}\n */\nLRUProto.get = function (key) {\n    var entry = this._map[key];\n    var list = this._list;\n    if (entry != null) {\n        // Put the latest used entry in the tail\n        if (entry !== list.tail) {\n            list.remove(entry);\n            list.insertEntry(entry);\n        }\n\n        return entry.value;\n    }\n};\n\n/**\n * Clear the cache\n */\nLRUProto.clear = function () {\n    this._list.clear();\n    this._map = {};\n};\n\nvar kCSSColorTable = {\n    'transparent': [0, 0, 0, 0], 'aliceblue': [240, 248, 255, 1],\n    'antiquewhite': [250, 235, 215, 1], 'aqua': [0, 255, 255, 1],\n    'aquamarine': [127, 255, 212, 1], 'azure': [240, 255, 255, 1],\n    'beige': [245, 245, 220, 1], 'bisque': [255, 228, 196, 1],\n    'black': [0, 0, 0, 1], 'blanchedalmond': [255, 235, 205, 1],\n    'blue': [0, 0, 255, 1], 'blueviolet': [138, 43, 226, 1],\n    'brown': [165, 42, 42, 1], 'burlywood': [222, 184, 135, 1],\n    'cadetblue': [95, 158, 160, 1], 'chartreuse': [127, 255, 0, 1],\n    'chocolate': [210, 105, 30, 1], 'coral': [255, 127, 80, 1],\n    'cornflowerblue': [100, 149, 237, 1], 'cornsilk': [255, 248, 220, 1],\n    'crimson': [220, 20, 60, 1], 'cyan': [0, 255, 255, 1],\n    'darkblue': [0, 0, 139, 1], 'darkcyan': [0, 139, 139, 1],\n    'darkgoldenrod': [184, 134, 11, 1], 'darkgray': [169, 169, 169, 1],\n    'darkgreen': [0, 100, 0, 1], 'darkgrey': [169, 169, 169, 1],\n    'darkkhaki': [189, 183, 107, 1], 'darkmagenta': [139, 0, 139, 1],\n    'darkolivegreen': [85, 107, 47, 1], 'darkorange': [255, 140, 0, 1],\n    'darkorchid': [153, 50, 204, 1], 'darkred': [139, 0, 0, 1],\n    'darksalmon': [233, 150, 122, 1], 'darkseagreen': [143, 188, 143, 1],\n    'darkslateblue': [72, 61, 139, 1], 'darkslategray': [47, 79, 79, 1],\n    'darkslategrey': [47, 79, 79, 1], 'darkturquoise': [0, 206, 209, 1],\n    'darkviolet': [148, 0, 211, 1], 'deeppink': [255, 20, 147, 1],\n    'deepskyblue': [0, 191, 255, 1], 'dimgray': [105, 105, 105, 1],\n    'dimgrey': [105, 105, 105, 1], 'dodgerblue': [30, 144, 255, 1],\n    'firebrick': [178, 34, 34, 1], 'floralwhite': [255, 250, 240, 1],\n    'forestgreen': [34, 139, 34, 1], 'fuchsia': [255, 0, 255, 1],\n    'gainsboro': [220, 220, 220, 1], 'ghostwhite': [248, 248, 255, 1],\n    'gold': [255, 215, 0, 1], 'goldenrod': [218, 165, 32, 1],\n    'gray': [128, 128, 128, 1], 'green': [0, 128, 0, 1],\n    'greenyellow': [173, 255, 47, 1], 'grey': [128, 128, 128, 1],\n    'honeydew': [240, 255, 240, 1], 'hotpink': [255, 105, 180, 1],\n    'indianred': [205, 92, 92, 1], 'indigo': [75, 0, 130, 1],\n    'ivory': [255, 255, 240, 1], 'khaki': [240, 230, 140, 1],\n    'lavender': [230, 230, 250, 1], 'lavenderblush': [255, 240, 245, 1],\n    'lawngreen': [124, 252, 0, 1], 'lemonchiffon': [255, 250, 205, 1],\n    'lightblue': [173, 216, 230, 1], 'lightcoral': [240, 128, 128, 1],\n    'lightcyan': [224, 255, 255, 1], 'lightgoldenrodyellow': [250, 250, 210, 1],\n    'lightgray': [211, 211, 211, 1], 'lightgreen': [144, 238, 144, 1],\n    'lightgrey': [211, 211, 211, 1], 'lightpink': [255, 182, 193, 1],\n    'lightsalmon': [255, 160, 122, 1], 'lightseagreen': [32, 178, 170, 1],\n    'lightskyblue': [135, 206, 250, 1], 'lightslategray': [119, 136, 153, 1],\n    'lightslategrey': [119, 136, 153, 1], 'lightsteelblue': [176, 196, 222, 1],\n    'lightyellow': [255, 255, 224, 1], 'lime': [0, 255, 0, 1],\n    'limegreen': [50, 205, 50, 1], 'linen': [250, 240, 230, 1],\n    'magenta': [255, 0, 255, 1], 'maroon': [128, 0, 0, 1],\n    'mediumaquamarine': [102, 205, 170, 1], 'mediumblue': [0, 0, 205, 1],\n    'mediumorchid': [186, 85, 211, 1], 'mediumpurple': [147, 112, 219, 1],\n    'mediumseagreen': [60, 179, 113, 1], 'mediumslateblue': [123, 104, 238, 1],\n    'mediumspringgreen': [0, 250, 154, 1], 'mediumturquoise': [72, 209, 204, 1],\n    'mediumvioletred': [199, 21, 133, 1], 'midnightblue': [25, 25, 112, 1],\n    'mintcream': [245, 255, 250, 1], 'mistyrose': [255, 228, 225, 1],\n    'moccasin': [255, 228, 181, 1], 'navajowhite': [255, 222, 173, 1],\n    'navy': [0, 0, 128, 1], 'oldlace': [253, 245, 230, 1],\n    'olive': [128, 128, 0, 1], 'olivedrab': [107, 142, 35, 1],\n    'orange': [255, 165, 0, 1], 'orangered': [255, 69, 0, 1],\n    'orchid': [218, 112, 214, 1], 'palegoldenrod': [238, 232, 170, 1],\n    'palegreen': [152, 251, 152, 1], 'paleturquoise': [175, 238, 238, 1],\n    'palevioletred': [219, 112, 147, 1], 'papayawhip': [255, 239, 213, 1],\n    'peachpuff': [255, 218, 185, 1], 'peru': [205, 133, 63, 1],\n    'pink': [255, 192, 203, 1], 'plum': [221, 160, 221, 1],\n    'powderblue': [176, 224, 230, 1], 'purple': [128, 0, 128, 1],\n    'red': [255, 0, 0, 1], 'rosybrown': [188, 143, 143, 1],\n    'royalblue': [65, 105, 225, 1], 'saddlebrown': [139, 69, 19, 1],\n    'salmon': [250, 128, 114, 1], 'sandybrown': [244, 164, 96, 1],\n    'seagreen': [46, 139, 87, 1], 'seashell': [255, 245, 238, 1],\n    'sienna': [160, 82, 45, 1], 'silver': [192, 192, 192, 1],\n    'skyblue': [135, 206, 235, 1], 'slateblue': [106, 90, 205, 1],\n    'slategray': [112, 128, 144, 1], 'slategrey': [112, 128, 144, 1],\n    'snow': [255, 250, 250, 1], 'springgreen': [0, 255, 127, 1],\n    'steelblue': [70, 130, 180, 1], 'tan': [210, 180, 140, 1],\n    'teal': [0, 128, 128, 1], 'thistle': [216, 191, 216, 1],\n    'tomato': [255, 99, 71, 1], 'turquoise': [64, 224, 208, 1],\n    'violet': [238, 130, 238, 1], 'wheat': [245, 222, 179, 1],\n    'white': [255, 255, 255, 1], 'whitesmoke': [245, 245, 245, 1],\n    'yellow': [255, 255, 0, 1], 'yellowgreen': [154, 205, 50, 1]\n};\n\nfunction clampCssByte(i) {  // Clamp to integer 0 .. 255.\n    i = Math.round(i);  // Seems to be what Chrome does (vs truncation).\n    return i < 0 ? 0 : i > 255 ? 255 : i;\n}\n\nfunction clampCssAngle(i) {  // Clamp to integer 0 .. 360.\n    i = Math.round(i);  // Seems to be what Chrome does (vs truncation).\n    return i < 0 ? 0 : i > 360 ? 360 : i;\n}\n\nfunction clampCssFloat(f) {  // Clamp to float 0.0 .. 1.0.\n    return f < 0 ? 0 : f > 1 ? 1 : f;\n}\n\nfunction parseCssInt(str) {  // int or percentage.\n    if (str.length && str.charAt(str.length - 1) === '%') {\n        return clampCssByte(parseFloat(str) / 100 * 255);\n    }\n    return clampCssByte(parseInt(str, 10));\n}\n\nfunction parseCssFloat(str) {  // float or percentage.\n    if (str.length && str.charAt(str.length - 1) === '%') {\n        return clampCssFloat(parseFloat(str) / 100);\n    }\n    return clampCssFloat(parseFloat(str));\n}\n\nfunction cssHueToRgb(m1, m2, h) {\n    if (h < 0) {\n        h += 1;\n    }\n    else if (h > 1) {\n        h -= 1;\n    }\n\n    if (h * 6 < 1) {\n        return m1 + (m2 - m1) * h * 6;\n    }\n    if (h * 2 < 1) {\n        return m2;\n    }\n    if (h * 3 < 2) {\n        return m1 + (m2 - m1) * (2 / 3 - h) * 6;\n    }\n    return m1;\n}\n\nfunction lerpNumber(a, b, p) {\n    return a + (b - a) * p;\n}\n\nfunction setRgba(out, r, g, b, a) {\n    out[0] = r; out[1] = g; out[2] = b; out[3] = a;\n    return out;\n}\nfunction copyRgba(out, a) {\n    out[0] = a[0]; out[1] = a[1]; out[2] = a[2]; out[3] = a[3];\n    return out;\n}\n\nvar colorCache = new LRU(20);\nvar lastRemovedArr = null;\n\nfunction putToCache(colorStr, rgbaArr) {\n    // Reuse removed array\n    if (lastRemovedArr) {\n        copyRgba(lastRemovedArr, rgbaArr);\n    }\n    lastRemovedArr = colorCache.put(colorStr, lastRemovedArr || (rgbaArr.slice()));\n}\n\n/**\n * @param {string} colorStr\n * @param {Array.<number>} out\n * @return {Array.<number>}\n * @memberOf module:zrender/util/color\n */\nfunction parse(colorStr, rgbaArr) {\n    if (!colorStr) {\n        return;\n    }\n    rgbaArr = rgbaArr || [];\n\n    var cached = colorCache.get(colorStr);\n    if (cached) {\n        return copyRgba(rgbaArr, cached);\n    }\n\n    // colorStr may be not string\n    colorStr = colorStr + '';\n    // Remove all whitespace, not compliant, but should just be more accepting.\n    var str = colorStr.replace(/ /g, '').toLowerCase();\n\n    // Color keywords (and transparent) lookup.\n    if (str in kCSSColorTable) {\n        copyRgba(rgbaArr, kCSSColorTable[str]);\n        putToCache(colorStr, rgbaArr);\n        return rgbaArr;\n    }\n\n    // #abc and #abc123 syntax.\n    if (str.charAt(0) === '#') {\n        if (str.length === 4) {\n            var iv = parseInt(str.substr(1), 16);  // TODO(deanm): Stricter parsing.\n            if (!(iv >= 0 && iv <= 0xfff)) {\n                setRgba(rgbaArr, 0, 0, 0, 1);\n                return;  // Covers NaN.\n            }\n            setRgba(rgbaArr,\n                ((iv & 0xf00) >> 4) | ((iv & 0xf00) >> 8),\n                (iv & 0xf0) | ((iv & 0xf0) >> 4),\n                (iv & 0xf) | ((iv & 0xf) << 4),\n                1\n            );\n            putToCache(colorStr, rgbaArr);\n            return rgbaArr;\n        }\n        else if (str.length === 7) {\n            var iv = parseInt(str.substr(1), 16);  // TODO(deanm): Stricter parsing.\n            if (!(iv >= 0 && iv <= 0xffffff)) {\n                setRgba(rgbaArr, 0, 0, 0, 1);\n                return;  // Covers NaN.\n            }\n            setRgba(rgbaArr,\n                (iv & 0xff0000) >> 16,\n                (iv & 0xff00) >> 8,\n                iv & 0xff,\n                1\n            );\n            putToCache(colorStr, rgbaArr);\n            return rgbaArr;\n        }\n\n        return;\n    }\n    var op = str.indexOf('(');\n    var ep = str.indexOf(')');\n    if (op !== -1 && ep + 1 === str.length) {\n        var fname = str.substr(0, op);\n        var params = str.substr(op + 1, ep - (op + 1)).split(',');\n        var alpha = 1;  // To allow case fallthrough.\n        switch (fname) {\n            case 'rgba':\n                if (params.length !== 4) {\n                    setRgba(rgbaArr, 0, 0, 0, 1);\n                    return;\n                }\n                alpha = parseCssFloat(params.pop()); // jshint ignore:line\n            // Fall through.\n            case 'rgb':\n                if (params.length !== 3) {\n                    setRgba(rgbaArr, 0, 0, 0, 1);\n                    return;\n                }\n                setRgba(rgbaArr,\n                    parseCssInt(params[0]),\n                    parseCssInt(params[1]),\n                    parseCssInt(params[2]),\n                    alpha\n                );\n                putToCache(colorStr, rgbaArr);\n                return rgbaArr;\n            case 'hsla':\n                if (params.length !== 4) {\n                    setRgba(rgbaArr, 0, 0, 0, 1);\n                    return;\n                }\n                params[3] = parseCssFloat(params[3]);\n                hsla2rgba(params, rgbaArr);\n                putToCache(colorStr, rgbaArr);\n                return rgbaArr;\n            case 'hsl':\n                if (params.length !== 3) {\n                    setRgba(rgbaArr, 0, 0, 0, 1);\n                    return;\n                }\n                hsla2rgba(params, rgbaArr);\n                putToCache(colorStr, rgbaArr);\n                return rgbaArr;\n            default:\n                return;\n        }\n    }\n\n    setRgba(rgbaArr, 0, 0, 0, 1);\n    return;\n}\n\n/**\n * @param {Array.<number>} hsla\n * @param {Array.<number>} rgba\n * @return {Array.<number>} rgba\n */\nfunction hsla2rgba(hsla, rgba) {\n    var h = (((parseFloat(hsla[0]) % 360) + 360) % 360) / 360;  // 0 .. 1\n    // NOTE(deanm): According to the CSS spec s/l should only be\n    // percentages, but we don't bother and let float or percentage.\n    var s = parseCssFloat(hsla[1]);\n    var l = parseCssFloat(hsla[2]);\n    var m2 = l <= 0.5 ? l * (s + 1) : l + s - l * s;\n    var m1 = l * 2 - m2;\n\n    rgba = rgba || [];\n    setRgba(rgba,\n        clampCssByte(cssHueToRgb(m1, m2, h + 1 / 3) * 255),\n        clampCssByte(cssHueToRgb(m1, m2, h) * 255),\n        clampCssByte(cssHueToRgb(m1, m2, h - 1 / 3) * 255),\n        1\n    );\n\n    if (hsla.length === 4) {\n        rgba[3] = hsla[3];\n    }\n\n    return rgba;\n}\n\n/**\n * @param {Array.<number>} rgba\n * @return {Array.<number>} hsla\n */\nfunction rgba2hsla(rgba) {\n    if (!rgba) {\n        return;\n    }\n\n    // RGB from 0 to 255\n    var R = rgba[0] / 255;\n    var G = rgba[1] / 255;\n    var B = rgba[2] / 255;\n\n    var vMin = Math.min(R, G, B); // Min. value of RGB\n    var vMax = Math.max(R, G, B); // Max. value of RGB\n    var delta = vMax - vMin; // Delta RGB value\n\n    var L = (vMax + vMin) / 2;\n    var H;\n    var S;\n    // HSL results from 0 to 1\n    if (delta === 0) {\n        H = 0;\n        S = 0;\n    }\n    else {\n        if (L < 0.5) {\n            S = delta / (vMax + vMin);\n        }\n        else {\n            S = delta / (2 - vMax - vMin);\n        }\n\n        var deltaR = (((vMax - R) / 6) + (delta / 2)) / delta;\n        var deltaG = (((vMax - G) / 6) + (delta / 2)) / delta;\n        var deltaB = (((vMax - B) / 6) + (delta / 2)) / delta;\n\n        if (R === vMax) {\n            H = deltaB - deltaG;\n        }\n        else if (G === vMax) {\n            H = (1 / 3) + deltaR - deltaB;\n        }\n        else if (B === vMax) {\n            H = (2 / 3) + deltaG - deltaR;\n        }\n\n        if (H < 0) {\n            H += 1;\n        }\n\n        if (H > 1) {\n            H -= 1;\n        }\n    }\n\n    var hsla = [H * 360, S, L];\n\n    if (rgba[3] != null) {\n        hsla.push(rgba[3]);\n    }\n\n    return hsla;\n}\n\n/**\n * @param {string} color\n * @param {number} level\n * @return {string}\n * @memberOf module:zrender/util/color\n */\nfunction lift(color, level) {\n    var colorArr = parse(color);\n    if (colorArr) {\n        for (var i = 0; i < 3; i++) {\n            if (level < 0) {\n                colorArr[i] = colorArr[i] * (1 - level) | 0;\n            }\n            else {\n                colorArr[i] = ((255 - colorArr[i]) * level + colorArr[i]) | 0;\n            }\n            if (colorArr[i] > 255) {\n                colorArr[i] = 255;\n            }\n            else if (color[i] < 0) {\n                colorArr[i] = 0;\n            }\n        }\n        return stringify(colorArr, colorArr.length === 4 ? 'rgba' : 'rgb');\n    }\n}\n\n/**\n * @param {string} color\n * @return {string}\n * @memberOf module:zrender/util/color\n */\nfunction toHex(color) {\n    var colorArr = parse(color);\n    if (colorArr) {\n        return ((1 << 24) + (colorArr[0] << 16) + (colorArr[1] << 8) + (+colorArr[2])).toString(16).slice(1);\n    }\n}\n\n/**\n * Map value to color. Faster than lerp methods because color is represented by rgba array.\n * @param {number} normalizedValue A float between 0 and 1.\n * @param {Array.<Array.<number>>} colors List of rgba color array\n * @param {Array.<number>} [out] Mapped gba color array\n * @return {Array.<number>} will be null/undefined if input illegal.\n */\nfunction fastLerp(normalizedValue, colors, out) {\n    if (!(colors && colors.length)\n        || !(normalizedValue >= 0 && normalizedValue <= 1)\n    ) {\n        return;\n    }\n\n    out = out || [];\n\n    var value = normalizedValue * (colors.length - 1);\n    var leftIndex = Math.floor(value);\n    var rightIndex = Math.ceil(value);\n    var leftColor = colors[leftIndex];\n    var rightColor = colors[rightIndex];\n    var dv = value - leftIndex;\n    out[0] = clampCssByte(lerpNumber(leftColor[0], rightColor[0], dv));\n    out[1] = clampCssByte(lerpNumber(leftColor[1], rightColor[1], dv));\n    out[2] = clampCssByte(lerpNumber(leftColor[2], rightColor[2], dv));\n    out[3] = clampCssFloat(lerpNumber(leftColor[3], rightColor[3], dv));\n\n    return out;\n}\n\n/**\n * @deprecated\n */\nvar fastMapToColor = fastLerp;\n\n/**\n * @param {number} normalizedValue A float between 0 and 1.\n * @param {Array.<string>} colors Color list.\n * @param {boolean=} fullOutput Default false.\n * @return {(string|Object)} Result color. If fullOutput,\n *                           return {color: ..., leftIndex: ..., rightIndex: ..., value: ...},\n * @memberOf module:zrender/util/color\n */\nfunction lerp$1(normalizedValue, colors, fullOutput) {\n    if (!(colors && colors.length)\n        || !(normalizedValue >= 0 && normalizedValue <= 1)\n    ) {\n        return;\n    }\n\n    var value = normalizedValue * (colors.length - 1);\n    var leftIndex = Math.floor(value);\n    var rightIndex = Math.ceil(value);\n    var leftColor = parse(colors[leftIndex]);\n    var rightColor = parse(colors[rightIndex]);\n    var dv = value - leftIndex;\n\n    var color = stringify(\n        [\n            clampCssByte(lerpNumber(leftColor[0], rightColor[0], dv)),\n            clampCssByte(lerpNumber(leftColor[1], rightColor[1], dv)),\n            clampCssByte(lerpNumber(leftColor[2], rightColor[2], dv)),\n            clampCssFloat(lerpNumber(leftColor[3], rightColor[3], dv))\n        ],\n        'rgba'\n    );\n\n    return fullOutput\n        ? {\n            color: color,\n            leftIndex: leftIndex,\n            rightIndex: rightIndex,\n            value: value\n        }\n        : color;\n}\n\n/**\n * @deprecated\n */\nvar mapToColor = lerp$1;\n\n/**\n * @param {string} color\n * @param {number=} h 0 ~ 360, ignore when null.\n * @param {number=} s 0 ~ 1, ignore when null.\n * @param {number=} l 0 ~ 1, ignore when null.\n * @return {string} Color string in rgba format.\n * @memberOf module:zrender/util/color\n */\nfunction modifyHSL(color, h, s, l) {\n    color = parse(color);\n\n    if (color) {\n        color = rgba2hsla(color);\n        h != null && (color[0] = clampCssAngle(h));\n        s != null && (color[1] = parseCssFloat(s));\n        l != null && (color[2] = parseCssFloat(l));\n\n        return stringify(hsla2rgba(color), 'rgba');\n    }\n}\n\n/**\n * @param {string} color\n * @param {number=} alpha 0 ~ 1\n * @return {string} Color string in rgba format.\n * @memberOf module:zrender/util/color\n */\nfunction modifyAlpha(color, alpha) {\n    color = parse(color);\n\n    if (color && alpha != null) {\n        color[3] = clampCssFloat(alpha);\n        return stringify(color, 'rgba');\n    }\n}\n\n/**\n * @param {Array.<number>} arrColor like [12,33,44,0.4]\n * @param {string} type 'rgba', 'hsva', ...\n * @return {string} Result color. (If input illegal, return undefined).\n */\nfunction stringify(arrColor, type) {\n    if (!arrColor || !arrColor.length) {\n        return;\n    }\n    var colorStr = arrColor[0] + ',' + arrColor[1] + ',' + arrColor[2];\n    if (type === 'rgba' || type === 'hsva' || type === 'hsla') {\n        colorStr += ',' + arrColor[3];\n    }\n    return type + '(' + colorStr + ')';\n}\n\n\nvar color = (Object.freeze || Object)({\n\tparse: parse,\n\tlift: lift,\n\ttoHex: toHex,\n\tfastLerp: fastLerp,\n\tfastMapToColor: fastMapToColor,\n\tlerp: lerp$1,\n\tmapToColor: mapToColor,\n\tmodifyHSL: modifyHSL,\n\tmodifyAlpha: modifyAlpha,\n\tstringify: stringify\n});\n\n/**\n * @module echarts/animation/Animator\n */\n\nvar arraySlice = Array.prototype.slice;\n\nfunction defaultGetter(target, key) {\n    return target[key];\n}\n\nfunction defaultSetter(target, key, value) {\n    target[key] = value;\n}\n\n/**\n * @param  {number} p0\n * @param  {number} p1\n * @param  {number} percent\n * @return {number}\n */\nfunction interpolateNumber(p0, p1, percent) {\n    return (p1 - p0) * percent + p0;\n}\n\n/**\n * @param  {string} p0\n * @param  {string} p1\n * @param  {number} percent\n * @return {string}\n */\nfunction interpolateString(p0, p1, percent) {\n    return percent > 0.5 ? p1 : p0;\n}\n\n/**\n * @param  {Array} p0\n * @param  {Array} p1\n * @param  {number} percent\n * @param  {Array} out\n * @param  {number} arrDim\n */\nfunction interpolateArray(p0, p1, percent, out, arrDim) {\n    var len = p0.length;\n    if (arrDim === 1) {\n        for (var i = 0; i < len; i++) {\n            out[i] = interpolateNumber(p0[i], p1[i], percent);\n        }\n    }\n    else {\n        var len2 = len && p0[0].length;\n        for (var i = 0; i < len; i++) {\n            for (var j = 0; j < len2; j++) {\n                out[i][j] = interpolateNumber(\n                    p0[i][j], p1[i][j], percent\n                );\n            }\n        }\n    }\n}\n\n// arr0 is source array, arr1 is target array.\n// Do some preprocess to avoid error happened when interpolating from arr0 to arr1\nfunction fillArr(arr0, arr1, arrDim) {\n    var arr0Len = arr0.length;\n    var arr1Len = arr1.length;\n    if (arr0Len !== arr1Len) {\n        // FIXME Not work for TypedArray\n        var isPreviousLarger = arr0Len > arr1Len;\n        if (isPreviousLarger) {\n            // Cut the previous\n            arr0.length = arr1Len;\n        }\n        else {\n            // Fill the previous\n            for (var i = arr0Len; i < arr1Len; i++) {\n                arr0.push(\n                    arrDim === 1 ? arr1[i] : arraySlice.call(arr1[i])\n                );\n            }\n        }\n    }\n    // Handling NaN value\n    var len2 = arr0[0] && arr0[0].length;\n    for (var i = 0; i < arr0.length; i++) {\n        if (arrDim === 1) {\n            if (isNaN(arr0[i])) {\n                arr0[i] = arr1[i];\n            }\n        }\n        else {\n            for (var j = 0; j < len2; j++) {\n                if (isNaN(arr0[i][j])) {\n                    arr0[i][j] = arr1[i][j];\n                }\n            }\n        }\n    }\n}\n\n/**\n * @param  {Array} arr0\n * @param  {Array} arr1\n * @param  {number} arrDim\n * @return {boolean}\n */\nfunction isArraySame(arr0, arr1, arrDim) {\n    if (arr0 === arr1) {\n        return true;\n    }\n    var len = arr0.length;\n    if (len !== arr1.length) {\n        return false;\n    }\n    if (arrDim === 1) {\n        for (var i = 0; i < len; i++) {\n            if (arr0[i] !== arr1[i]) {\n                return false;\n            }\n        }\n    }\n    else {\n        var len2 = arr0[0].length;\n        for (var i = 0; i < len; i++) {\n            for (var j = 0; j < len2; j++) {\n                if (arr0[i][j] !== arr1[i][j]) {\n                    return false;\n                }\n            }\n        }\n    }\n    return true;\n}\n\n/**\n * Catmull Rom interpolate array\n * @param  {Array} p0\n * @param  {Array} p1\n * @param  {Array} p2\n * @param  {Array} p3\n * @param  {number} t\n * @param  {number} t2\n * @param  {number} t3\n * @param  {Array} out\n * @param  {number} arrDim\n */\nfunction catmullRomInterpolateArray(\n    p0, p1, p2, p3, t, t2, t3, out, arrDim\n) {\n    var len = p0.length;\n    if (arrDim === 1) {\n        for (var i = 0; i < len; i++) {\n            out[i] = catmullRomInterpolate(\n                p0[i], p1[i], p2[i], p3[i], t, t2, t3\n            );\n        }\n    }\n    else {\n        var len2 = p0[0].length;\n        for (var i = 0; i < len; i++) {\n            for (var j = 0; j < len2; j++) {\n                out[i][j] = catmullRomInterpolate(\n                    p0[i][j], p1[i][j], p2[i][j], p3[i][j],\n                    t, t2, t3\n                );\n            }\n        }\n    }\n}\n\n/**\n * Catmull Rom interpolate number\n * @param  {number} p0\n * @param  {number} p1\n * @param  {number} p2\n * @param  {number} p3\n * @param  {number} t\n * @param  {number} t2\n * @param  {number} t3\n * @return {number}\n */\nfunction catmullRomInterpolate(p0, p1, p2, p3, t, t2, t3) {\n    var v0 = (p2 - p0) * 0.5;\n    var v1 = (p3 - p1) * 0.5;\n    return (2 * (p1 - p2) + v0 + v1) * t3\n            + (-3 * (p1 - p2) - 2 * v0 - v1) * t2\n            + v0 * t + p1;\n}\n\nfunction cloneValue(value) {\n    if (isArrayLike(value)) {\n        var len = value.length;\n        if (isArrayLike(value[0])) {\n            var ret = [];\n            for (var i = 0; i < len; i++) {\n                ret.push(arraySlice.call(value[i]));\n            }\n            return ret;\n        }\n\n        return arraySlice.call(value);\n    }\n\n    return value;\n}\n\nfunction rgba2String(rgba) {\n    rgba[0] = Math.floor(rgba[0]);\n    rgba[1] = Math.floor(rgba[1]);\n    rgba[2] = Math.floor(rgba[2]);\n\n    return 'rgba(' + rgba.join(',') + ')';\n}\n\nfunction getArrayDim(keyframes) {\n    var lastValue = keyframes[keyframes.length - 1].value;\n    return isArrayLike(lastValue && lastValue[0]) ? 2 : 1;\n}\n\nfunction createTrackClip(animator, easing, oneTrackDone, keyframes, propName, forceAnimate) {\n    var getter = animator._getter;\n    var setter = animator._setter;\n    var useSpline = easing === 'spline';\n\n    var trackLen = keyframes.length;\n    if (!trackLen) {\n        return;\n    }\n    // Guess data type\n    var firstVal = keyframes[0].value;\n    var isValueArray = isArrayLike(firstVal);\n    var isValueColor = false;\n    var isValueString = false;\n\n    // For vertices morphing\n    var arrDim = isValueArray ? getArrayDim(keyframes) : 0;\n\n    var trackMaxTime;\n    // Sort keyframe as ascending\n    keyframes.sort(function (a, b) {\n        return a.time - b.time;\n    });\n\n    trackMaxTime = keyframes[trackLen - 1].time;\n    // Percents of each keyframe\n    var kfPercents = [];\n    // Value of each keyframe\n    var kfValues = [];\n    var prevValue = keyframes[0].value;\n    var isAllValueEqual = true;\n    for (var i = 0; i < trackLen; i++) {\n        kfPercents.push(keyframes[i].time / trackMaxTime);\n        // Assume value is a color when it is a string\n        var value = keyframes[i].value;\n\n        // Check if value is equal, deep check if value is array\n        if (!((isValueArray && isArraySame(value, prevValue, arrDim))\n            || (!isValueArray && value === prevValue))) {\n            isAllValueEqual = false;\n        }\n        prevValue = value;\n\n        // Try converting a string to a color array\n        if (typeof value === 'string') {\n            var colorArray = parse(value);\n            if (colorArray) {\n                value = colorArray;\n                isValueColor = true;\n            }\n            else {\n                isValueString = true;\n            }\n        }\n        kfValues.push(value);\n    }\n    if (!forceAnimate && isAllValueEqual) {\n        return;\n    }\n\n    var lastValue = kfValues[trackLen - 1];\n    // Polyfill array and NaN value\n    for (var i = 0; i < trackLen - 1; i++) {\n        if (isValueArray) {\n            fillArr(kfValues[i], lastValue, arrDim);\n        }\n        else {\n            if (isNaN(kfValues[i]) && !isNaN(lastValue) && !isValueString && !isValueColor) {\n                kfValues[i] = lastValue;\n            }\n        }\n    }\n    isValueArray && fillArr(getter(animator._target, propName), lastValue, arrDim);\n\n    // Cache the key of last frame to speed up when\n    // animation playback is sequency\n    var lastFrame = 0;\n    var lastFramePercent = 0;\n    var start;\n    var w;\n    var p0;\n    var p1;\n    var p2;\n    var p3;\n\n    if (isValueColor) {\n        var rgba = [0, 0, 0, 0];\n    }\n\n    var onframe = function (target, percent) {\n        // Find the range keyframes\n        // kf1-----kf2---------current--------kf3\n        // find kf2 and kf3 and do interpolation\n        var frame;\n        // In the easing function like elasticOut, percent may less than 0\n        if (percent < 0) {\n            frame = 0;\n        }\n        else if (percent < lastFramePercent) {\n            // Start from next key\n            // PENDING start from lastFrame ?\n            start = Math.min(lastFrame + 1, trackLen - 1);\n            for (frame = start; frame >= 0; frame--) {\n                if (kfPercents[frame] <= percent) {\n                    break;\n                }\n            }\n            // PENDING really need to do this ?\n            frame = Math.min(frame, trackLen - 2);\n        }\n        else {\n            for (frame = lastFrame; frame < trackLen; frame++) {\n                if (kfPercents[frame] > percent) {\n                    break;\n                }\n            }\n            frame = Math.min(frame - 1, trackLen - 2);\n        }\n        lastFrame = frame;\n        lastFramePercent = percent;\n\n        var range = (kfPercents[frame + 1] - kfPercents[frame]);\n        if (range === 0) {\n            return;\n        }\n        else {\n            w = (percent - kfPercents[frame]) / range;\n        }\n        if (useSpline) {\n            p1 = kfValues[frame];\n            p0 = kfValues[frame === 0 ? frame : frame - 1];\n            p2 = kfValues[frame > trackLen - 2 ? trackLen - 1 : frame + 1];\n            p3 = kfValues[frame > trackLen - 3 ? trackLen - 1 : frame + 2];\n            if (isValueArray) {\n                catmullRomInterpolateArray(\n                    p0, p1, p2, p3, w, w * w, w * w * w,\n                    getter(target, propName),\n                    arrDim\n                );\n            }\n            else {\n                var value;\n                if (isValueColor) {\n                    value = catmullRomInterpolateArray(\n                        p0, p1, p2, p3, w, w * w, w * w * w,\n                        rgba, 1\n                    );\n                    value = rgba2String(rgba);\n                }\n                else if (isValueString) {\n                    // String is step(0.5)\n                    return interpolateString(p1, p2, w);\n                }\n                else {\n                    value = catmullRomInterpolate(\n                        p0, p1, p2, p3, w, w * w, w * w * w\n                    );\n                }\n                setter(\n                    target,\n                    propName,\n                    value\n                );\n            }\n        }\n        else {\n            if (isValueArray) {\n                interpolateArray(\n                    kfValues[frame], kfValues[frame + 1], w,\n                    getter(target, propName),\n                    arrDim\n                );\n            }\n            else {\n                var value;\n                if (isValueColor) {\n                    interpolateArray(\n                        kfValues[frame], kfValues[frame + 1], w,\n                        rgba, 1\n                    );\n                    value = rgba2String(rgba);\n                }\n                else if (isValueString) {\n                    // String is step(0.5)\n                    return interpolateString(kfValues[frame], kfValues[frame + 1], w);\n                }\n                else {\n                    value = interpolateNumber(kfValues[frame], kfValues[frame + 1], w);\n                }\n                setter(\n                    target,\n                    propName,\n                    value\n                );\n            }\n        }\n    };\n\n    var clip = new Clip({\n        target: animator._target,\n        life: trackMaxTime,\n        loop: animator._loop,\n        delay: animator._delay,\n        onframe: onframe,\n        ondestroy: oneTrackDone\n    });\n\n    if (easing && easing !== 'spline') {\n        clip.easing = easing;\n    }\n\n    return clip;\n}\n\n/**\n * @alias module:zrender/animation/Animator\n * @constructor\n * @param {Object} target\n * @param {boolean} loop\n * @param {Function} getter\n * @param {Function} setter\n */\nvar Animator = function (target, loop, getter, setter) {\n    this._tracks = {};\n    this._target = target;\n\n    this._loop = loop || false;\n\n    this._getter = getter || defaultGetter;\n    this._setter = setter || defaultSetter;\n\n    this._clipCount = 0;\n\n    this._delay = 0;\n\n    this._doneList = [];\n\n    this._onframeList = [];\n\n    this._clipList = [];\n};\n\nAnimator.prototype = {\n    /**\n     * 设置动画关键帧\n     * @param  {number} time 关键帧时间，单位是ms\n     * @param  {Object} props 关键帧的属性值，key-value表示\n     * @return {module:zrender/animation/Animator}\n     */\n    when: function (time /* ms */, props) {\n        var tracks = this._tracks;\n        for (var propName in props) {\n            if (!props.hasOwnProperty(propName)) {\n                continue;\n            }\n\n            if (!tracks[propName]) {\n                tracks[propName] = [];\n                // Invalid value\n                var value = this._getter(this._target, propName);\n                if (value == null) {\n                    // zrLog('Invalid property ' + propName);\n                    continue;\n                }\n                // If time is 0\n                //  Then props is given initialize value\n                // Else\n                //  Initialize value from current prop value\n                if (time !== 0) {\n                    tracks[propName].push({\n                        time: 0,\n                        value: cloneValue(value)\n                    });\n                }\n            }\n            tracks[propName].push({\n                time: time,\n                value: props[propName]\n            });\n        }\n        return this;\n    },\n    /**\n     * 添加动画每一帧的回调函数\n     * @param  {Function} callback\n     * @return {module:zrender/animation/Animator}\n     */\n    during: function (callback) {\n        this._onframeList.push(callback);\n        return this;\n    },\n\n    pause: function () {\n        for (var i = 0; i < this._clipList.length; i++) {\n            this._clipList[i].pause();\n        }\n        this._paused = true;\n    },\n\n    resume: function () {\n        for (var i = 0; i < this._clipList.length; i++) {\n            this._clipList[i].resume();\n        }\n        this._paused = false;\n    },\n\n    isPaused: function () {\n        return !!this._paused;\n    },\n\n    _doneCallback: function () {\n        // Clear all tracks\n        this._tracks = {};\n        // Clear all clips\n        this._clipList.length = 0;\n\n        var doneList = this._doneList;\n        var len = doneList.length;\n        for (var i = 0; i < len; i++) {\n            doneList[i].call(this);\n        }\n    },\n    /**\n     * 开始执行动画\n     * @param  {string|Function} [easing]\n     *         动画缓动函数，详见{@link module:zrender/animation/easing}\n     * @param  {boolean} forceAnimate\n     * @return {module:zrender/animation/Animator}\n     */\n    start: function (easing, forceAnimate) {\n\n        var self = this;\n        var clipCount = 0;\n\n        var oneTrackDone = function () {\n            clipCount--;\n            if (!clipCount) {\n                self._doneCallback();\n            }\n        };\n\n        var lastClip;\n        for (var propName in this._tracks) {\n            if (!this._tracks.hasOwnProperty(propName)) {\n                continue;\n            }\n            var clip = createTrackClip(\n                this, easing, oneTrackDone,\n                this._tracks[propName], propName, forceAnimate\n            );\n            if (clip) {\n                this._clipList.push(clip);\n                clipCount++;\n\n                // If start after added to animation\n                if (this.animation) {\n                    this.animation.addClip(clip);\n                }\n\n                lastClip = clip;\n            }\n        }\n\n        // Add during callback on the last clip\n        if (lastClip) {\n            var oldOnFrame = lastClip.onframe;\n            lastClip.onframe = function (target, percent) {\n                oldOnFrame(target, percent);\n\n                for (var i = 0; i < self._onframeList.length; i++) {\n                    self._onframeList[i](target, percent);\n                }\n            };\n        }\n\n        // This optimization will help the case that in the upper application\n        // the view may be refreshed frequently, where animation will be\n        // called repeatly but nothing changed.\n        if (!clipCount) {\n            this._doneCallback();\n        }\n        return this;\n    },\n    /**\n     * 停止动画\n     * @param {boolean} forwardToLast If move to last frame before stop\n     */\n    stop: function (forwardToLast) {\n        var clipList = this._clipList;\n        var animation = this.animation;\n        for (var i = 0; i < clipList.length; i++) {\n            var clip = clipList[i];\n            if (forwardToLast) {\n                // Move to last frame before stop\n                clip.onframe(this._target, 1);\n            }\n            animation && animation.removeClip(clip);\n        }\n        clipList.length = 0;\n    },\n    /**\n     * 设置动画延迟开始的时间\n     * @param  {number} time 单位ms\n     * @return {module:zrender/animation/Animator}\n     */\n    delay: function (time) {\n        this._delay = time;\n        return this;\n    },\n    /**\n     * 添加动画结束的回调\n     * @param  {Function} cb\n     * @return {module:zrender/animation/Animator}\n     */\n    done: function (cb) {\n        if (cb) {\n            this._doneList.push(cb);\n        }\n        return this;\n    },\n\n    /**\n     * @return {Array.<module:zrender/animation/Clip>}\n     */\n    getClips: function () {\n        return this._clipList;\n    }\n};\n\nvar dpr = 1;\n\n// If in browser environment\nif (typeof window !== 'undefined') {\n    dpr = Math.max(window.devicePixelRatio || 1, 1);\n}\n\n/**\n * config默认配置项\n * @exports zrender/config\n * @author Kener (@Kener-林峰, kener.linfeng@gmail.com)\n */\n\n/**\n * debug日志选项：catchBrushException为true下有效\n * 0 : 不生成debug数据，发布用\n * 1 : 异常抛出，调试用\n * 2 : 控制台输出，调试用\n */\nvar debugMode = 0;\n\n// retina 屏幕优化\nvar devicePixelRatio = dpr;\n\nvar log = function () {\n};\n\nif (debugMode === 1) {\n    log = function () {\n        for (var k in arguments) {\n            throw new Error(arguments[k]);\n        }\n    };\n}\nelse if (debugMode > 1) {\n    log = function () {\n        for (var k in arguments) {\n            console.log(arguments[k]);\n        }\n    };\n}\n\nvar zrLog = log;\n\n/**\n * @alias modue:zrender/mixin/Animatable\n * @constructor\n */\nvar Animatable = function () {\n\n    /**\n     * @type {Array.<module:zrender/animation/Animator>}\n     * @readOnly\n     */\n    this.animators = [];\n};\n\nAnimatable.prototype = {\n\n    constructor: Animatable,\n\n    /**\n     * 动画\n     *\n     * @param {string} path The path to fetch value from object, like 'a.b.c'.\n     * @param {boolean} [loop] Whether to loop animation.\n     * @return {module:zrender/animation/Animator}\n     * @example:\n     *     el.animate('style', false)\n     *         .when(1000, {x: 10} )\n     *         .done(function(){ // Animation done })\n     *         .start()\n     */\n    animate: function (path, loop) {\n        var target;\n        var animatingShape = false;\n        var el = this;\n        var zr = this.__zr;\n        if (path) {\n            var pathSplitted = path.split('.');\n            var prop = el;\n            // If animating shape\n            animatingShape = pathSplitted[0] === 'shape';\n            for (var i = 0, l = pathSplitted.length; i < l; i++) {\n                if (!prop) {\n                    continue;\n                }\n                prop = prop[pathSplitted[i]];\n            }\n            if (prop) {\n                target = prop;\n            }\n        }\n        else {\n            target = el;\n        }\n\n        if (!target) {\n            zrLog(\n                'Property \"'\n                + path\n                + '\" is not existed in element '\n                + el.id\n            );\n            return;\n        }\n\n        var animators = el.animators;\n\n        var animator = new Animator(target, loop);\n\n        animator.during(function (target) {\n            el.dirty(animatingShape);\n        })\n        .done(function () {\n            // FIXME Animator will not be removed if use `Animator#stop` to stop animation\n            animators.splice(indexOf(animators, animator), 1);\n        });\n\n        animators.push(animator);\n\n        // If animate after added to the zrender\n        if (zr) {\n            zr.animation.addAnimator(animator);\n        }\n\n        return animator;\n    },\n\n    /**\n     * 停止动画\n     * @param {boolean} forwardToLast If move to last frame before stop\n     */\n    stopAnimation: function (forwardToLast) {\n        var animators = this.animators;\n        var len = animators.length;\n        for (var i = 0; i < len; i++) {\n            animators[i].stop(forwardToLast);\n        }\n        animators.length = 0;\n\n        return this;\n    },\n\n    /**\n     * Caution: this method will stop previous animation.\n     * So do not use this method to one element twice before\n     * animation starts, unless you know what you are doing.\n     * @param {Object} target\n     * @param {number} [time=500] Time in ms\n     * @param {string} [easing='linear']\n     * @param {number} [delay=0]\n     * @param {Function} [callback]\n     * @param {Function} [forceAnimate] Prevent stop animation and callback\n     *        immediently when target values are the same as current values.\n     *\n     * @example\n     *  // Animate position\n     *  el.animateTo({\n     *      position: [10, 10]\n     *  }, function () { // done })\n     *\n     *  // Animate shape, style and position in 100ms, delayed 100ms, with cubicOut easing\n     *  el.animateTo({\n     *      shape: {\n     *          width: 500\n     *      },\n     *      style: {\n     *          fill: 'red'\n     *      }\n     *      position: [10, 10]\n     *  }, 100, 100, 'cubicOut', function () { // done })\n     */\n    // TODO Return animation key\n    animateTo: function (target, time, delay, easing, callback, forceAnimate) {\n        animateTo(this, target, time, delay, easing, callback, forceAnimate);\n    },\n\n    /**\n     * Animate from the target state to current state.\n     * The params and the return value are the same as `this.animateTo`.\n     */\n    animateFrom: function (target, time, delay, easing, callback, forceAnimate) {\n        animateTo(this, target, time, delay, easing, callback, forceAnimate, true);\n    }\n};\n\nfunction animateTo(animatable, target, time, delay, easing, callback, forceAnimate, reverse) {\n    // animateTo(target, time, easing, callback);\n    if (isString(delay)) {\n        callback = easing;\n        easing = delay;\n        delay = 0;\n    }\n    // animateTo(target, time, delay, callback);\n    else if (isFunction$1(easing)) {\n        callback = easing;\n        easing = 'linear';\n        delay = 0;\n    }\n    // animateTo(target, time, callback);\n    else if (isFunction$1(delay)) {\n        callback = delay;\n        delay = 0;\n    }\n    // animateTo(target, callback)\n    else if (isFunction$1(time)) {\n        callback = time;\n        time = 500;\n    }\n    // animateTo(target)\n    else if (!time) {\n        time = 500;\n    }\n    // Stop all previous animations\n    animatable.stopAnimation();\n    animateToShallow(animatable, '', animatable, target, time, delay, reverse);\n\n    // Animators may be removed immediately after start\n    // if there is nothing to animate\n    var animators = animatable.animators.slice();\n    var count = animators.length;\n    function done() {\n        count--;\n        if (!count) {\n            callback && callback();\n        }\n    }\n\n    // No animators. This should be checked before animators[i].start(),\n    // because 'done' may be executed immediately if no need to animate.\n    if (!count) {\n        callback && callback();\n    }\n    // Start after all animators created\n    // Incase any animator is done immediately when all animation properties are not changed\n    for (var i = 0; i < animators.length; i++) {\n        animators[i]\n            .done(done)\n            .start(easing, forceAnimate);\n    }\n}\n\n/**\n * @param {string} path=''\n * @param {Object} source=animatable\n * @param {Object} target\n * @param {number} [time=500]\n * @param {number} [delay=0]\n * @param {boolean} [reverse] If `true`, animate\n *        from the `target` to current state.\n *\n * @example\n *  // Animate position\n *  el._animateToShallow({\n *      position: [10, 10]\n *  })\n *\n *  // Animate shape, style and position in 100ms, delayed 100ms\n *  el._animateToShallow({\n *      shape: {\n *          width: 500\n *      },\n *      style: {\n *          fill: 'red'\n *      }\n *      position: [10, 10]\n *  }, 100, 100)\n */\nfunction animateToShallow(animatable, path, source, target, time, delay, reverse) {\n    var objShallow = {};\n    var propertyCount = 0;\n    for (var name in target) {\n        if (!target.hasOwnProperty(name)) {\n            continue;\n        }\n\n        if (source[name] != null) {\n            if (isObject$1(target[name]) && !isArrayLike(target[name])) {\n                animateToShallow(\n                    animatable,\n                    path ? path + '.' + name : name,\n                    source[name],\n                    target[name],\n                    time,\n                    delay,\n                    reverse\n                );\n            }\n            else {\n                if (reverse) {\n                    objShallow[name] = source[name];\n                    setAttrByPath(animatable, path, name, target[name]);\n                }\n                else {\n                    objShallow[name] = target[name];\n                }\n                propertyCount++;\n            }\n        }\n        else if (target[name] != null && !reverse) {\n            setAttrByPath(animatable, path, name, target[name]);\n        }\n    }\n\n    if (propertyCount > 0) {\n        animatable.animate(path, false)\n            .when(time == null ? 500 : time, objShallow)\n            .delay(delay || 0);\n    }\n}\n\nfunction setAttrByPath(el, path, name, value) {\n    // Attr directly if not has property\n    // FIXME, if some property not needed for element ?\n    if (!path) {\n        el.attr(name, value);\n    }\n    else {\n        // Only support set shape or style\n        var props = {};\n        props[path] = {};\n        props[path][name] = value;\n        el.attr(props);\n    }\n}\n\n/**\n * @alias module:zrender/Element\n * @constructor\n * @extends {module:zrender/mixin/Animatable}\n * @extends {module:zrender/mixin/Transformable}\n * @extends {module:zrender/mixin/Eventful}\n */\nvar Element = function (opts) { // jshint ignore:line\n\n    Transformable.call(this, opts);\n    Eventful.call(this, opts);\n    Animatable.call(this, opts);\n\n    /**\n     * 画布元素ID\n     * @type {string}\n     */\n    this.id = opts.id || guid();\n};\n\nElement.prototype = {\n\n    /**\n     * 元素类型\n     * Element type\n     * @type {string}\n     */\n    type: 'element',\n\n    /**\n     * 元素名字\n     * Element name\n     * @type {string}\n     */\n    name: '',\n\n    /**\n     * ZRender 实例对象，会在 element 添加到 zrender 实例中后自动赋值\n     * ZRender instance will be assigned when element is associated with zrender\n     * @name module:/zrender/Element#__zr\n     * @type {module:zrender/ZRender}\n     */\n    __zr: null,\n\n    /**\n     * 图形是否忽略，为true时忽略图形的绘制以及事件触发\n     * If ignore drawing and events of the element object\n     * @name module:/zrender/Element#ignore\n     * @type {boolean}\n     * @default false\n     */\n    ignore: false,\n\n    /**\n     * 用于裁剪的路径(shape)，所有 Group 内的路径在绘制时都会被这个路径裁剪\n     * 该路径会继承被裁减对象的变换\n     * @type {module:zrender/graphic/Path}\n     * @see http://www.w3.org/TR/2dcontext/#clipping-region\n     * @readOnly\n     */\n    clipPath: null,\n\n    /**\n     * 是否是 Group\n     * @type {boolean}\n     */\n    isGroup: false,\n\n    /**\n     * Drift element\n     * @param  {number} dx dx on the global space\n     * @param  {number} dy dy on the global space\n     */\n    drift: function (dx, dy) {\n        switch (this.draggable) {\n            case 'horizontal':\n                dy = 0;\n                break;\n            case 'vertical':\n                dx = 0;\n                break;\n        }\n\n        var m = this.transform;\n        if (!m) {\n            m = this.transform = [1, 0, 0, 1, 0, 0];\n        }\n        m[4] += dx;\n        m[5] += dy;\n\n        this.decomposeTransform();\n        this.dirty(false);\n    },\n\n    /**\n     * Hook before update\n     */\n    beforeUpdate: function () {},\n    /**\n     * Hook after update\n     */\n    afterUpdate: function () {},\n    /**\n     * Update each frame\n     */\n    update: function () {\n        this.updateTransform();\n    },\n\n    /**\n     * @param  {Function} cb\n     * @param  {}   context\n     */\n    traverse: function (cb, context) {},\n\n    /**\n     * @protected\n     */\n    attrKV: function (key, value) {\n        if (key === 'position' || key === 'scale' || key === 'origin') {\n            // Copy the array\n            if (value) {\n                var target = this[key];\n                if (!target) {\n                    target = this[key] = [];\n                }\n                target[0] = value[0];\n                target[1] = value[1];\n            }\n        }\n        else {\n            this[key] = value;\n        }\n    },\n\n    /**\n     * Hide the element\n     */\n    hide: function () {\n        this.ignore = true;\n        this.__zr && this.__zr.refresh();\n    },\n\n    /**\n     * Show the element\n     */\n    show: function () {\n        this.ignore = false;\n        this.__zr && this.__zr.refresh();\n    },\n\n    /**\n     * @param {string|Object} key\n     * @param {*} value\n     */\n    attr: function (key, value) {\n        if (typeof key === 'string') {\n            this.attrKV(key, value);\n        }\n        else if (isObject$1(key)) {\n            for (var name in key) {\n                if (key.hasOwnProperty(name)) {\n                    this.attrKV(name, key[name]);\n                }\n            }\n        }\n\n        this.dirty(false);\n\n        return this;\n    },\n\n    /**\n     * @param {module:zrender/graphic/Path} clipPath\n     */\n    setClipPath: function (clipPath) {\n        var zr = this.__zr;\n        if (zr) {\n            clipPath.addSelfToZr(zr);\n        }\n\n        // Remove previous clip path\n        if (this.clipPath && this.clipPath !== clipPath) {\n            this.removeClipPath();\n        }\n\n        this.clipPath = clipPath;\n        clipPath.__zr = zr;\n        clipPath.__clipTarget = this;\n\n        this.dirty(false);\n    },\n\n    /**\n     */\n    removeClipPath: function () {\n        var clipPath = this.clipPath;\n        if (clipPath) {\n            if (clipPath.__zr) {\n                clipPath.removeSelfFromZr(clipPath.__zr);\n            }\n\n            clipPath.__zr = null;\n            clipPath.__clipTarget = null;\n            this.clipPath = null;\n\n            this.dirty(false);\n        }\n    },\n\n    /**\n     * Add self from zrender instance.\n     * Not recursively because it will be invoked when element added to storage.\n     * @param {module:zrender/ZRender} zr\n     */\n    addSelfToZr: function (zr) {\n        this.__zr = zr;\n        // 添加动画\n        var animators = this.animators;\n        if (animators) {\n            for (var i = 0; i < animators.length; i++) {\n                zr.animation.addAnimator(animators[i]);\n            }\n        }\n\n        if (this.clipPath) {\n            this.clipPath.addSelfToZr(zr);\n        }\n    },\n\n    /**\n     * Remove self from zrender instance.\n     * Not recursively because it will be invoked when element added to storage.\n     * @param {module:zrender/ZRender} zr\n     */\n    removeSelfFromZr: function (zr) {\n        this.__zr = null;\n        // 移除动画\n        var animators = this.animators;\n        if (animators) {\n            for (var i = 0; i < animators.length; i++) {\n                zr.animation.removeAnimator(animators[i]);\n            }\n        }\n\n        if (this.clipPath) {\n            this.clipPath.removeSelfFromZr(zr);\n        }\n    }\n};\n\nmixin(Element, Animatable);\nmixin(Element, Transformable);\nmixin(Element, Eventful);\n\n/**\n * @module echarts/core/BoundingRect\n */\n\nvar v2ApplyTransform = applyTransform;\nvar mathMin = Math.min;\nvar mathMax = Math.max;\n\n/**\n * @alias module:echarts/core/BoundingRect\n */\nfunction BoundingRect(x, y, width, height) {\n\n    if (width < 0) {\n        x = x + width;\n        width = -width;\n    }\n    if (height < 0) {\n        y = y + height;\n        height = -height;\n    }\n\n    /**\n     * @type {number}\n     */\n    this.x = x;\n    /**\n     * @type {number}\n     */\n    this.y = y;\n    /**\n     * @type {number}\n     */\n    this.width = width;\n    /**\n     * @type {number}\n     */\n    this.height = height;\n}\n\nBoundingRect.prototype = {\n\n    constructor: BoundingRect,\n\n    /**\n     * @param {module:echarts/core/BoundingRect} other\n     */\n    union: function (other) {\n        var x = mathMin(other.x, this.x);\n        var y = mathMin(other.y, this.y);\n\n        this.width = mathMax(\n                other.x + other.width,\n                this.x + this.width\n            ) - x;\n        this.height = mathMax(\n                other.y + other.height,\n                this.y + this.height\n            ) - y;\n        this.x = x;\n        this.y = y;\n    },\n\n    /**\n     * @param {Array.<number>} m\n     * @methods\n     */\n    applyTransform: (function () {\n        var lt = [];\n        var rb = [];\n        var lb = [];\n        var rt = [];\n        return function (m) {\n            // In case usage like this\n            // el.getBoundingRect().applyTransform(el.transform)\n            // And element has no transform\n            if (!m) {\n                return;\n            }\n            lt[0] = lb[0] = this.x;\n            lt[1] = rt[1] = this.y;\n            rb[0] = rt[0] = this.x + this.width;\n            rb[1] = lb[1] = this.y + this.height;\n\n            v2ApplyTransform(lt, lt, m);\n            v2ApplyTransform(rb, rb, m);\n            v2ApplyTransform(lb, lb, m);\n            v2ApplyTransform(rt, rt, m);\n\n            this.x = mathMin(lt[0], rb[0], lb[0], rt[0]);\n            this.y = mathMin(lt[1], rb[1], lb[1], rt[1]);\n            var maxX = mathMax(lt[0], rb[0], lb[0], rt[0]);\n            var maxY = mathMax(lt[1], rb[1], lb[1], rt[1]);\n            this.width = maxX - this.x;\n            this.height = maxY - this.y;\n        };\n    })(),\n\n    /**\n     * Calculate matrix of transforming from self to target rect\n     * @param  {module:zrender/core/BoundingRect} b\n     * @return {Array.<number>}\n     */\n    calculateTransform: function (b) {\n        var a = this;\n        var sx = b.width / a.width;\n        var sy = b.height / a.height;\n\n        var m = create$1();\n\n        // 矩阵右乘\n        translate(m, m, [-a.x, -a.y]);\n        scale$1(m, m, [sx, sy]);\n        translate(m, m, [b.x, b.y]);\n\n        return m;\n    },\n\n    /**\n     * @param {(module:echarts/core/BoundingRect|Object)} b\n     * @return {boolean}\n     */\n    intersect: function (b) {\n        if (!b) {\n            return false;\n        }\n\n        if (!(b instanceof BoundingRect)) {\n            // Normalize negative width/height.\n            b = BoundingRect.create(b);\n        }\n\n        var a = this;\n        var ax0 = a.x;\n        var ax1 = a.x + a.width;\n        var ay0 = a.y;\n        var ay1 = a.y + a.height;\n\n        var bx0 = b.x;\n        var bx1 = b.x + b.width;\n        var by0 = b.y;\n        var by1 = b.y + b.height;\n\n        return !(ax1 < bx0 || bx1 < ax0 || ay1 < by0 || by1 < ay0);\n    },\n\n    contain: function (x, y) {\n        var rect = this;\n        return x >= rect.x\n            && x <= (rect.x + rect.width)\n            && y >= rect.y\n            && y <= (rect.y + rect.height);\n    },\n\n    /**\n     * @return {module:echarts/core/BoundingRect}\n     */\n    clone: function () {\n        return new BoundingRect(this.x, this.y, this.width, this.height);\n    },\n\n    /**\n     * Copy from another rect\n     */\n    copy: function (other) {\n        this.x = other.x;\n        this.y = other.y;\n        this.width = other.width;\n        this.height = other.height;\n    },\n\n    plain: function () {\n        return {\n            x: this.x,\n            y: this.y,\n            width: this.width,\n            height: this.height\n        };\n    }\n};\n\n/**\n * @param {Object|module:zrender/core/BoundingRect} rect\n * @param {number} rect.x\n * @param {number} rect.y\n * @param {number} rect.width\n * @param {number} rect.height\n * @return {module:zrender/core/BoundingRect}\n */\nBoundingRect.create = function (rect) {\n    return new BoundingRect(rect.x, rect.y, rect.width, rect.height);\n};\n\n/**\n * Group是一个容器，可以插入子节点，Group的变换也会被应用到子节点上\n * @module zrender/graphic/Group\n * @example\n *     var Group = require('zrender/container/Group');\n *     var Circle = require('zrender/graphic/shape/Circle');\n *     var g = new Group();\n *     g.position[0] = 100;\n *     g.position[1] = 100;\n *     g.add(new Circle({\n *         style: {\n *             x: 100,\n *             y: 100,\n *             r: 20,\n *         }\n *     }));\n *     zr.add(g);\n */\n\n/**\n * @alias module:zrender/graphic/Group\n * @constructor\n * @extends module:zrender/mixin/Transformable\n * @extends module:zrender/mixin/Eventful\n */\nvar Group = function (opts) {\n\n    opts = opts || {};\n\n    Element.call(this, opts);\n\n    for (var key in opts) {\n        if (opts.hasOwnProperty(key)) {\n            this[key] = opts[key];\n        }\n    }\n\n    this._children = [];\n\n    this.__storage = null;\n\n    this.__dirty = true;\n};\n\nGroup.prototype = {\n\n    constructor: Group,\n\n    isGroup: true,\n\n    /**\n     * @type {string}\n     */\n    type: 'group',\n\n    /**\n     * 所有子孙元素是否响应鼠标事件\n     * @name module:/zrender/container/Group#silent\n     * @type {boolean}\n     * @default false\n     */\n    silent: false,\n\n    /**\n     * @return {Array.<module:zrender/Element>}\n     */\n    children: function () {\n        return this._children.slice();\n    },\n\n    /**\n     * 获取指定 index 的儿子节点\n     * @param  {number} idx\n     * @return {module:zrender/Element}\n     */\n    childAt: function (idx) {\n        return this._children[idx];\n    },\n\n    /**\n     * 获取指定名字的儿子节点\n     * @param  {string} name\n     * @return {module:zrender/Element}\n     */\n    childOfName: function (name) {\n        var children = this._children;\n        for (var i = 0; i < children.length; i++) {\n            if (children[i].name === name) {\n                return children[i];\n            }\n            }\n    },\n\n    /**\n     * @return {number}\n     */\n    childCount: function () {\n        return this._children.length;\n    },\n\n    /**\n     * 添加子节点到最后\n     * @param {module:zrender/Element} child\n     */\n    add: function (child) {\n        if (child && child !== this && child.parent !== this) {\n\n            this._children.push(child);\n\n            this._doAdd(child);\n        }\n\n        return this;\n    },\n\n    /**\n     * 添加子节点在 nextSibling 之前\n     * @param {module:zrender/Element} child\n     * @param {module:zrender/Element} nextSibling\n     */\n    addBefore: function (child, nextSibling) {\n        if (child && child !== this && child.parent !== this\n            && nextSibling && nextSibling.parent === this) {\n\n            var children = this._children;\n            var idx = children.indexOf(nextSibling);\n\n            if (idx >= 0) {\n                children.splice(idx, 0, child);\n                this._doAdd(child);\n            }\n        }\n\n        return this;\n    },\n\n    _doAdd: function (child) {\n        if (child.parent) {\n            child.parent.remove(child);\n        }\n\n        child.parent = this;\n\n        var storage = this.__storage;\n        var zr = this.__zr;\n        if (storage && storage !== child.__storage) {\n\n            storage.addToStorage(child);\n\n            if (child instanceof Group) {\n                child.addChildrenToStorage(storage);\n            }\n        }\n\n        zr && zr.refresh();\n    },\n\n    /**\n     * 移除子节点\n     * @param {module:zrender/Element} child\n     */\n    remove: function (child) {\n        var zr = this.__zr;\n        var storage = this.__storage;\n        var children = this._children;\n\n        var idx = indexOf(children, child);\n        if (idx < 0) {\n            return this;\n        }\n        children.splice(idx, 1);\n\n        child.parent = null;\n\n        if (storage) {\n\n            storage.delFromStorage(child);\n\n            if (child instanceof Group) {\n                child.delChildrenFromStorage(storage);\n            }\n        }\n\n        zr && zr.refresh();\n\n        return this;\n    },\n\n    /**\n     * 移除所有子节点\n     */\n    removeAll: function () {\n        var children = this._children;\n        var storage = this.__storage;\n        var child;\n        var i;\n        for (i = 0; i < children.length; i++) {\n            child = children[i];\n            if (storage) {\n                storage.delFromStorage(child);\n                if (child instanceof Group) {\n                    child.delChildrenFromStorage(storage);\n                }\n            }\n            child.parent = null;\n        }\n        children.length = 0;\n\n        return this;\n    },\n\n    /**\n     * 遍历所有子节点\n     * @param  {Function} cb\n     * @param  {}   context\n     */\n    eachChild: function (cb, context) {\n        var children = this._children;\n        for (var i = 0; i < children.length; i++) {\n            var child = children[i];\n            cb.call(context, child, i);\n        }\n        return this;\n    },\n\n    /**\n     * 深度优先遍历所有子孙节点\n     * @param  {Function} cb\n     * @param  {}   context\n     */\n    traverse: function (cb, context) {\n        for (var i = 0; i < this._children.length; i++) {\n            var child = this._children[i];\n            cb.call(context, child);\n\n            if (child.type === 'group') {\n                child.traverse(cb, context);\n            }\n        }\n        return this;\n    },\n\n    addChildrenToStorage: function (storage) {\n        for (var i = 0; i < this._children.length; i++) {\n            var child = this._children[i];\n            storage.addToStorage(child);\n            if (child instanceof Group) {\n                child.addChildrenToStorage(storage);\n            }\n        }\n    },\n\n    delChildrenFromStorage: function (storage) {\n        for (var i = 0; i < this._children.length; i++) {\n            var child = this._children[i];\n            storage.delFromStorage(child);\n            if (child instanceof Group) {\n                child.delChildrenFromStorage(storage);\n            }\n        }\n    },\n\n    dirty: function () {\n        this.__dirty = true;\n        this.__zr && this.__zr.refresh();\n        return this;\n    },\n\n    /**\n     * @return {module:zrender/core/BoundingRect}\n     */\n    getBoundingRect: function (includeChildren) {\n        // TODO Caching\n        var rect = null;\n        var tmpRect = new BoundingRect(0, 0, 0, 0);\n        var children = includeChildren || this._children;\n        var tmpMat = [];\n\n        for (var i = 0; i < children.length; i++) {\n            var child = children[i];\n            if (child.ignore || child.invisible) {\n                continue;\n            }\n\n            var childRect = child.getBoundingRect();\n            var transform = child.getLocalTransform(tmpMat);\n            // TODO\n            // The boundingRect cacluated by transforming original\n            // rect may be bigger than the actual bundingRect when rotation\n            // is used. (Consider a circle rotated aginst its center, where\n            // the actual boundingRect should be the same as that not be\n            // rotated.) But we can not find better approach to calculate\n            // actual boundingRect yet, considering performance.\n            if (transform) {\n                tmpRect.copy(childRect);\n                tmpRect.applyTransform(transform);\n                rect = rect || tmpRect.clone();\n                rect.union(tmpRect);\n            }\n            else {\n                rect = rect || childRect.clone();\n                rect.union(childRect);\n            }\n        }\n        return rect || tmpRect;\n    }\n};\n\ninherits(Group, Element);\n\n// https://github.com/mziccard/node-timsort\nvar DEFAULT_MIN_MERGE = 32;\n\nvar DEFAULT_MIN_GALLOPING = 7;\n\nfunction minRunLength(n) {\n    var r = 0;\n\n    while (n >= DEFAULT_MIN_MERGE) {\n        r |= n & 1;\n        n >>= 1;\n    }\n\n    return n + r;\n}\n\nfunction makeAscendingRun(array, lo, hi, compare) {\n    var runHi = lo + 1;\n\n    if (runHi === hi) {\n        return 1;\n    }\n\n    if (compare(array[runHi++], array[lo]) < 0) {\n        while (runHi < hi && compare(array[runHi], array[runHi - 1]) < 0) {\n            runHi++;\n        }\n\n        reverseRun(array, lo, runHi);\n    }\n    else {\n        while (runHi < hi && compare(array[runHi], array[runHi - 1]) >= 0) {\n            runHi++;\n        }\n    }\n\n    return runHi - lo;\n}\n\nfunction reverseRun(array, lo, hi) {\n    hi--;\n\n    while (lo < hi) {\n        var t = array[lo];\n        array[lo++] = array[hi];\n        array[hi--] = t;\n    }\n}\n\nfunction binaryInsertionSort(array, lo, hi, start, compare) {\n    if (start === lo) {\n        start++;\n    }\n\n    for (; start < hi; start++) {\n        var pivot = array[start];\n\n        var left = lo;\n        var right = start;\n        var mid;\n\n        while (left < right) {\n            mid = left + right >>> 1;\n\n            if (compare(pivot, array[mid]) < 0) {\n                right = mid;\n            }\n            else {\n                left = mid + 1;\n            }\n        }\n\n        var n = start - left;\n\n        switch (n) {\n            case 3:\n                array[left + 3] = array[left + 2];\n\n            case 2:\n                array[left + 2] = array[left + 1];\n\n            case 1:\n                array[left + 1] = array[left];\n                break;\n            default:\n                while (n > 0) {\n                    array[left + n] = array[left + n - 1];\n                    n--;\n                }\n        }\n\n        array[left] = pivot;\n    }\n}\n\nfunction gallopLeft(value, array, start, length, hint, compare) {\n    var lastOffset = 0;\n    var maxOffset = 0;\n    var offset = 1;\n\n    if (compare(value, array[start + hint]) > 0) {\n        maxOffset = length - hint;\n\n        while (offset < maxOffset && compare(value, array[start + hint + offset]) > 0) {\n            lastOffset = offset;\n            offset = (offset << 1) + 1;\n\n            if (offset <= 0) {\n                offset = maxOffset;\n            }\n        }\n\n        if (offset > maxOffset) {\n            offset = maxOffset;\n        }\n\n        lastOffset += hint;\n        offset += hint;\n    }\n    else {\n        maxOffset = hint + 1;\n        while (offset < maxOffset && compare(value, array[start + hint - offset]) <= 0) {\n            lastOffset = offset;\n            offset = (offset << 1) + 1;\n\n            if (offset <= 0) {\n                offset = maxOffset;\n            }\n        }\n        if (offset > maxOffset) {\n            offset = maxOffset;\n        }\n\n        var tmp = lastOffset;\n        lastOffset = hint - offset;\n        offset = hint - tmp;\n    }\n\n    lastOffset++;\n    while (lastOffset < offset) {\n        var m = lastOffset + (offset - lastOffset >>> 1);\n\n        if (compare(value, array[start + m]) > 0) {\n            lastOffset = m + 1;\n        }\n        else {\n            offset = m;\n        }\n    }\n    return offset;\n}\n\nfunction gallopRight(value, array, start, length, hint, compare) {\n    var lastOffset = 0;\n    var maxOffset = 0;\n    var offset = 1;\n\n    if (compare(value, array[start + hint]) < 0) {\n        maxOffset = hint + 1;\n\n        while (offset < maxOffset && compare(value, array[start + hint - offset]) < 0) {\n            lastOffset = offset;\n            offset = (offset << 1) + 1;\n\n            if (offset <= 0) {\n                offset = maxOffset;\n            }\n        }\n\n        if (offset > maxOffset) {\n            offset = maxOffset;\n        }\n\n        var tmp = lastOffset;\n        lastOffset = hint - offset;\n        offset = hint - tmp;\n    }\n    else {\n        maxOffset = length - hint;\n\n        while (offset < maxOffset && compare(value, array[start + hint + offset]) >= 0) {\n            lastOffset = offset;\n            offset = (offset << 1) + 1;\n\n            if (offset <= 0) {\n                offset = maxOffset;\n            }\n        }\n\n        if (offset > maxOffset) {\n            offset = maxOffset;\n        }\n\n        lastOffset += hint;\n        offset += hint;\n    }\n\n    lastOffset++;\n\n    while (lastOffset < offset) {\n        var m = lastOffset + (offset - lastOffset >>> 1);\n\n        if (compare(value, array[start + m]) < 0) {\n            offset = m;\n        }\n        else {\n            lastOffset = m + 1;\n        }\n    }\n\n    return offset;\n}\n\nfunction TimSort(array, compare) {\n    var minGallop = DEFAULT_MIN_GALLOPING;\n    var runStart;\n    var runLength;\n    var stackSize = 0;\n\n    var tmp = [];\n\n    runStart = [];\n    runLength = [];\n\n    function pushRun(_runStart, _runLength) {\n        runStart[stackSize] = _runStart;\n        runLength[stackSize] = _runLength;\n        stackSize += 1;\n    }\n\n    function mergeRuns() {\n        while (stackSize > 1) {\n            var n = stackSize - 2;\n\n            if (n >= 1 && runLength[n - 1] <= runLength[n] + runLength[n + 1] || n >= 2 && runLength[n - 2] <= runLength[n] + runLength[n - 1]) {\n                if (runLength[n - 1] < runLength[n + 1]) {\n                    n--;\n                }\n            }\n            else if (runLength[n] > runLength[n + 1]) {\n                break;\n            }\n            mergeAt(n);\n        }\n    }\n\n    function forceMergeRuns() {\n        while (stackSize > 1) {\n            var n = stackSize - 2;\n\n            if (n > 0 && runLength[n - 1] < runLength[n + 1]) {\n                n--;\n            }\n\n            mergeAt(n);\n        }\n    }\n\n    function mergeAt(i) {\n        var start1 = runStart[i];\n        var length1 = runLength[i];\n        var start2 = runStart[i + 1];\n        var length2 = runLength[i + 1];\n\n        runLength[i] = length1 + length2;\n\n        if (i === stackSize - 3) {\n            runStart[i + 1] = runStart[i + 2];\n            runLength[i + 1] = runLength[i + 2];\n        }\n\n        stackSize--;\n\n        var k = gallopRight(array[start2], array, start1, length1, 0, compare);\n        start1 += k;\n        length1 -= k;\n\n        if (length1 === 0) {\n            return;\n        }\n\n        length2 = gallopLeft(array[start1 + length1 - 1], array, start2, length2, length2 - 1, compare);\n\n        if (length2 === 0) {\n            return;\n        }\n\n        if (length1 <= length2) {\n            mergeLow(start1, length1, start2, length2);\n        }\n        else {\n            mergeHigh(start1, length1, start2, length2);\n        }\n    }\n\n    function mergeLow(start1, length1, start2, length2) {\n        var i = 0;\n\n        for (i = 0; i < length1; i++) {\n            tmp[i] = array[start1 + i];\n        }\n\n        var cursor1 = 0;\n        var cursor2 = start2;\n        var dest = start1;\n\n        array[dest++] = array[cursor2++];\n\n        if (--length2 === 0) {\n            for (i = 0; i < length1; i++) {\n                array[dest + i] = tmp[cursor1 + i];\n            }\n            return;\n        }\n\n        if (length1 === 1) {\n            for (i = 0; i < length2; i++) {\n                array[dest + i] = array[cursor2 + i];\n            }\n            array[dest + length2] = tmp[cursor1];\n            return;\n        }\n\n        var _minGallop = minGallop;\n        var count1, count2, exit;\n\n        while (1) {\n            count1 = 0;\n            count2 = 0;\n            exit = false;\n\n            do {\n                if (compare(array[cursor2], tmp[cursor1]) < 0) {\n                    array[dest++] = array[cursor2++];\n                    count2++;\n                    count1 = 0;\n\n                    if (--length2 === 0) {\n                        exit = true;\n                        break;\n                    }\n                }\n                else {\n                    array[dest++] = tmp[cursor1++];\n                    count1++;\n                    count2 = 0;\n                    if (--length1 === 1) {\n                        exit = true;\n                        break;\n                    }\n                }\n            } while ((count1 | count2) < _minGallop);\n\n            if (exit) {\n                break;\n            }\n\n            do {\n                count1 = gallopRight(array[cursor2], tmp, cursor1, length1, 0, compare);\n\n                if (count1 !== 0) {\n                    for (i = 0; i < count1; i++) {\n                        array[dest + i] = tmp[cursor1 + i];\n                    }\n\n                    dest += count1;\n                    cursor1 += count1;\n                    length1 -= count1;\n                    if (length1 <= 1) {\n                        exit = true;\n                        break;\n                    }\n                }\n\n                array[dest++] = array[cursor2++];\n\n                if (--length2 === 0) {\n                    exit = true;\n                    break;\n                }\n\n                count2 = gallopLeft(tmp[cursor1], array, cursor2, length2, 0, compare);\n\n                if (count2 !== 0) {\n                    for (i = 0; i < count2; i++) {\n                        array[dest + i] = array[cursor2 + i];\n                    }\n\n                    dest += count2;\n                    cursor2 += count2;\n                    length2 -= count2;\n\n                    if (length2 === 0) {\n                        exit = true;\n                        break;\n                    }\n                }\n                array[dest++] = tmp[cursor1++];\n\n                if (--length1 === 1) {\n                    exit = true;\n                    break;\n                }\n\n                _minGallop--;\n            } while (count1 >= DEFAULT_MIN_GALLOPING || count2 >= DEFAULT_MIN_GALLOPING);\n\n            if (exit) {\n                break;\n            }\n\n            if (_minGallop < 0) {\n                _minGallop = 0;\n            }\n\n            _minGallop += 2;\n        }\n\n        minGallop = _minGallop;\n\n        minGallop < 1 && (minGallop = 1);\n\n        if (length1 === 1) {\n            for (i = 0; i < length2; i++) {\n                array[dest + i] = array[cursor2 + i];\n            }\n            array[dest + length2] = tmp[cursor1];\n        }\n        else if (length1 === 0) {\n            throw new Error();\n            // throw new Error('mergeLow preconditions were not respected');\n        }\n        else {\n            for (i = 0; i < length1; i++) {\n                array[dest + i] = tmp[cursor1 + i];\n            }\n        }\n    }\n\n    function mergeHigh(start1, length1, start2, length2) {\n        var i = 0;\n\n        for (i = 0; i < length2; i++) {\n            tmp[i] = array[start2 + i];\n        }\n\n        var cursor1 = start1 + length1 - 1;\n        var cursor2 = length2 - 1;\n        var dest = start2 + length2 - 1;\n        var customCursor = 0;\n        var customDest = 0;\n\n        array[dest--] = array[cursor1--];\n\n        if (--length1 === 0) {\n            customCursor = dest - (length2 - 1);\n\n            for (i = 0; i < length2; i++) {\n                array[customCursor + i] = tmp[i];\n            }\n\n            return;\n        }\n\n        if (length2 === 1) {\n            dest -= length1;\n            cursor1 -= length1;\n            customDest = dest + 1;\n            customCursor = cursor1 + 1;\n\n            for (i = length1 - 1; i >= 0; i--) {\n                array[customDest + i] = array[customCursor + i];\n            }\n\n            array[dest] = tmp[cursor2];\n            return;\n        }\n\n        var _minGallop = minGallop;\n\n        while (true) {\n            var count1 = 0;\n            var count2 = 0;\n            var exit = false;\n\n            do {\n                if (compare(tmp[cursor2], array[cursor1]) < 0) {\n                    array[dest--] = array[cursor1--];\n                    count1++;\n                    count2 = 0;\n                    if (--length1 === 0) {\n                        exit = true;\n                        break;\n                    }\n                }\n                else {\n                    array[dest--] = tmp[cursor2--];\n                    count2++;\n                    count1 = 0;\n                    if (--length2 === 1) {\n                        exit = true;\n                        break;\n                    }\n                }\n            } while ((count1 | count2) < _minGallop);\n\n            if (exit) {\n                break;\n            }\n\n            do {\n                count1 = length1 - gallopRight(tmp[cursor2], array, start1, length1, length1 - 1, compare);\n\n                if (count1 !== 0) {\n                    dest -= count1;\n                    cursor1 -= count1;\n                    length1 -= count1;\n                    customDest = dest + 1;\n                    customCursor = cursor1 + 1;\n\n                    for (i = count1 - 1; i >= 0; i--) {\n                        array[customDest + i] = array[customCursor + i];\n                    }\n\n                    if (length1 === 0) {\n                        exit = true;\n                        break;\n                    }\n                }\n\n                array[dest--] = tmp[cursor2--];\n\n                if (--length2 === 1) {\n                    exit = true;\n                    break;\n                }\n\n                count2 = length2 - gallopLeft(array[cursor1], tmp, 0, length2, length2 - 1, compare);\n\n                if (count2 !== 0) {\n                    dest -= count2;\n                    cursor2 -= count2;\n                    length2 -= count2;\n                    customDest = dest + 1;\n                    customCursor = cursor2 + 1;\n\n                    for (i = 0; i < count2; i++) {\n                        array[customDest + i] = tmp[customCursor + i];\n                    }\n\n                    if (length2 <= 1) {\n                        exit = true;\n                        break;\n                    }\n                }\n\n                array[dest--] = array[cursor1--];\n\n                if (--length1 === 0) {\n                    exit = true;\n                    break;\n                }\n\n                _minGallop--;\n            } while (count1 >= DEFAULT_MIN_GALLOPING || count2 >= DEFAULT_MIN_GALLOPING);\n\n            if (exit) {\n                break;\n            }\n\n            if (_minGallop < 0) {\n                _minGallop = 0;\n            }\n\n            _minGallop += 2;\n        }\n\n        minGallop = _minGallop;\n\n        if (minGallop < 1) {\n            minGallop = 1;\n        }\n\n        if (length2 === 1) {\n            dest -= length1;\n            cursor1 -= length1;\n            customDest = dest + 1;\n            customCursor = cursor1 + 1;\n\n            for (i = length1 - 1; i >= 0; i--) {\n                array[customDest + i] = array[customCursor + i];\n            }\n\n            array[dest] = tmp[cursor2];\n        }\n        else if (length2 === 0) {\n            throw new Error();\n            // throw new Error('mergeHigh preconditions were not respected');\n        }\n        else {\n            customCursor = dest - (length2 - 1);\n            for (i = 0; i < length2; i++) {\n                array[customCursor + i] = tmp[i];\n            }\n        }\n    }\n\n    this.mergeRuns = mergeRuns;\n    this.forceMergeRuns = forceMergeRuns;\n    this.pushRun = pushRun;\n}\n\nfunction sort(array, compare, lo, hi) {\n    if (!lo) {\n        lo = 0;\n    }\n    if (!hi) {\n        hi = array.length;\n    }\n\n    var remaining = hi - lo;\n\n    if (remaining < 2) {\n        return;\n    }\n\n    var runLength = 0;\n\n    if (remaining < DEFAULT_MIN_MERGE) {\n        runLength = makeAscendingRun(array, lo, hi, compare);\n        binaryInsertionSort(array, lo, hi, lo + runLength, compare);\n        return;\n    }\n\n    var ts = new TimSort(array, compare);\n\n    var minRun = minRunLength(remaining);\n\n    do {\n        runLength = makeAscendingRun(array, lo, hi, compare);\n        if (runLength < minRun) {\n            var force = remaining;\n            if (force > minRun) {\n                force = minRun;\n            }\n\n            binaryInsertionSort(array, lo, lo + force, lo + runLength, compare);\n            runLength = force;\n        }\n\n        ts.pushRun(lo, runLength);\n        ts.mergeRuns();\n\n        remaining -= runLength;\n        lo += runLength;\n    } while (remaining !== 0);\n\n    ts.forceMergeRuns();\n}\n\n// Use timsort because in most case elements are partially sorted\n// https://jsfiddle.net/pissang/jr4x7mdm/8/\nfunction shapeCompareFunc(a, b) {\n    if (a.zlevel === b.zlevel) {\n        if (a.z === b.z) {\n            // if (a.z2 === b.z2) {\n            //     // FIXME Slow has renderidx compare\n            //     // http://stackoverflow.com/questions/20883421/sorting-in-javascript-should-every-compare-function-have-a-return-0-statement\n            //     // https://github.com/v8/v8/blob/47cce544a31ed5577ffe2963f67acb4144ee0232/src/js/array.js#L1012\n            //     return a.__renderidx - b.__renderidx;\n            // }\n            return a.z2 - b.z2;\n        }\n        return a.z - b.z;\n    }\n    return a.zlevel - b.zlevel;\n}\n/**\n * 内容仓库 (M)\n * @alias module:zrender/Storage\n * @constructor\n */\nvar Storage = function () { // jshint ignore:line\n    this._roots = [];\n\n    this._displayList = [];\n\n    this._displayListLen = 0;\n};\n\nStorage.prototype = {\n\n    constructor: Storage,\n\n    /**\n     * @param  {Function} cb\n     *\n     */\n    traverse: function (cb, context) {\n        for (var i = 0; i < this._roots.length; i++) {\n            this._roots[i].traverse(cb, context);\n        }\n    },\n\n    /**\n     * 返回所有图形的绘制队列\n     * @param {boolean} [update=false] 是否在返回前更新该数组\n     * @param {boolean} [includeIgnore=false] 是否包含 ignore 的数组, 在 update 为 true 的时候有效\n     *\n     * 详见{@link module:zrender/graphic/Displayable.prototype.updateDisplayList}\n     * @return {Array.<module:zrender/graphic/Displayable>}\n     */\n    getDisplayList: function (update, includeIgnore) {\n        includeIgnore = includeIgnore || false;\n        if (update) {\n            this.updateDisplayList(includeIgnore);\n        }\n        return this._displayList;\n    },\n\n    /**\n     * 更新图形的绘制队列。\n     * 每次绘制前都会调用，该方法会先深度优先遍历整个树，更新所有Group和Shape的变换并且把所有可见的Shape保存到数组中，\n     * 最后根据绘制的优先级（zlevel > z > 插入顺序）排序得到绘制队列\n     * @param {boolean} [includeIgnore=false] 是否包含 ignore 的数组\n     */\n    updateDisplayList: function (includeIgnore) {\n        this._displayListLen = 0;\n\n        var roots = this._roots;\n        var displayList = this._displayList;\n        for (var i = 0, len = roots.length; i < len; i++) {\n            this._updateAndAddDisplayable(roots[i], null, includeIgnore);\n        }\n\n        displayList.length = this._displayListLen;\n\n        env$1.canvasSupported && sort(displayList, shapeCompareFunc);\n    },\n\n    _updateAndAddDisplayable: function (el, clipPaths, includeIgnore) {\n\n        if (el.ignore && !includeIgnore) {\n            return;\n        }\n\n        el.beforeUpdate();\n\n        if (el.__dirty) {\n\n            el.update();\n\n        }\n\n        el.afterUpdate();\n\n        var userSetClipPath = el.clipPath;\n        if (userSetClipPath) {\n\n            // FIXME 效率影响\n            if (clipPaths) {\n                clipPaths = clipPaths.slice();\n            }\n            else {\n                clipPaths = [];\n            }\n\n            var currentClipPath = userSetClipPath;\n            var parentClipPath = el;\n            // Recursively add clip path\n            while (currentClipPath) {\n                // clipPath 的变换是基于使用这个 clipPath 的元素\n                currentClipPath.parent = parentClipPath;\n                currentClipPath.updateTransform();\n\n                clipPaths.push(currentClipPath);\n\n                parentClipPath = currentClipPath;\n                currentClipPath = currentClipPath.clipPath;\n            }\n        }\n\n        if (el.isGroup) {\n            var children = el._children;\n\n            for (var i = 0; i < children.length; i++) {\n                var child = children[i];\n\n                // Force to mark as dirty if group is dirty\n                // FIXME __dirtyPath ?\n                if (el.__dirty) {\n                    child.__dirty = true;\n                }\n\n                this._updateAndAddDisplayable(child, clipPaths, includeIgnore);\n            }\n\n            // Mark group clean here\n            el.__dirty = false;\n\n        }\n        else {\n            el.__clipPaths = clipPaths;\n\n            this._displayList[this._displayListLen++] = el;\n        }\n    },\n\n    /**\n     * 添加图形(Shape)或者组(Group)到根节点\n     * @param {module:zrender/Element} el\n     */\n    addRoot: function (el) {\n        if (el.__storage === this) {\n            return;\n        }\n\n        if (el instanceof Group) {\n            el.addChildrenToStorage(this);\n        }\n\n        this.addToStorage(el);\n        this._roots.push(el);\n    },\n\n    /**\n     * 删除指定的图形(Shape)或者组(Group)\n     * @param {string|Array.<string>} [el] 如果为空清空整个Storage\n     */\n    delRoot: function (el) {\n        if (el == null) {\n            // 不指定el清空\n            for (var i = 0; i < this._roots.length; i++) {\n                var root = this._roots[i];\n                if (root instanceof Group) {\n                    root.delChildrenFromStorage(this);\n                }\n            }\n\n            this._roots = [];\n            this._displayList = [];\n            this._displayListLen = 0;\n\n            return;\n        }\n\n        if (el instanceof Array) {\n            for (var i = 0, l = el.length; i < l; i++) {\n                this.delRoot(el[i]);\n            }\n            return;\n        }\n\n\n        var idx = indexOf(this._roots, el);\n        if (idx >= 0) {\n            this.delFromStorage(el);\n            this._roots.splice(idx, 1);\n            if (el instanceof Group) {\n                el.delChildrenFromStorage(this);\n            }\n        }\n    },\n\n    addToStorage: function (el) {\n        if (el) {\n            el.__storage = this;\n            el.dirty(false);\n        }\n        return this;\n    },\n\n    delFromStorage: function (el) {\n        if (el) {\n            el.__storage = null;\n        }\n\n        return this;\n    },\n\n    /**\n     * 清空并且释放Storage\n     */\n    dispose: function () {\n        this._renderList =\n        this._roots = null;\n    },\n\n    displayableSortFunc: shapeCompareFunc\n};\n\nvar SHADOW_PROPS = {\n    'shadowBlur': 1,\n    'shadowOffsetX': 1,\n    'shadowOffsetY': 1,\n    'textShadowBlur': 1,\n    'textShadowOffsetX': 1,\n    'textShadowOffsetY': 1,\n    'textBoxShadowBlur': 1,\n    'textBoxShadowOffsetX': 1,\n    'textBoxShadowOffsetY': 1\n};\n\nvar fixShadow = function (ctx, propName, value) {\n    if (SHADOW_PROPS.hasOwnProperty(propName)) {\n        return value *= ctx.dpr;\n    }\n    return value;\n};\n\nvar ContextCachedBy = {\n    NONE: 0,\n    STYLE_BIND: 1,\n    PLAIN_TEXT: 2\n};\n\n// Avoid confused with 0/false.\nvar WILL_BE_RESTORED = 9;\n\nvar STYLE_COMMON_PROPS = [\n    ['shadowBlur', 0], ['shadowOffsetX', 0], ['shadowOffsetY', 0], ['shadowColor', '#000'],\n    ['lineCap', 'butt'], ['lineJoin', 'miter'], ['miterLimit', 10]\n];\n\n// var SHADOW_PROPS = STYLE_COMMON_PROPS.slice(0, 4);\n// var LINE_PROPS = STYLE_COMMON_PROPS.slice(4);\n\nvar Style = function (opts) {\n    this.extendFrom(opts, false);\n};\n\nfunction createLinearGradient(ctx, obj, rect) {\n    var x = obj.x == null ? 0 : obj.x;\n    var x2 = obj.x2 == null ? 1 : obj.x2;\n    var y = obj.y == null ? 0 : obj.y;\n    var y2 = obj.y2 == null ? 0 : obj.y2;\n\n    if (!obj.global) {\n        x = x * rect.width + rect.x;\n        x2 = x2 * rect.width + rect.x;\n        y = y * rect.height + rect.y;\n        y2 = y2 * rect.height + rect.y;\n    }\n\n    // Fix NaN when rect is Infinity\n    x = isNaN(x) ? 0 : x;\n    x2 = isNaN(x2) ? 1 : x2;\n    y = isNaN(y) ? 0 : y;\n    y2 = isNaN(y2) ? 0 : y2;\n\n    var canvasGradient = ctx.createLinearGradient(x, y, x2, y2);\n\n    return canvasGradient;\n}\n\nfunction createRadialGradient(ctx, obj, rect) {\n    var width = rect.width;\n    var height = rect.height;\n    var min = Math.min(width, height);\n\n    var x = obj.x == null ? 0.5 : obj.x;\n    var y = obj.y == null ? 0.5 : obj.y;\n    var r = obj.r == null ? 0.5 : obj.r;\n    if (!obj.global) {\n        x = x * width + rect.x;\n        y = y * height + rect.y;\n        r = r * min;\n    }\n\n    var canvasGradient = ctx.createRadialGradient(x, y, 0, x, y, r);\n\n    return canvasGradient;\n}\n\n\nStyle.prototype = {\n\n    constructor: Style,\n\n    /**\n     * @type {string}\n     */\n    fill: '#000',\n\n    /**\n     * @type {string}\n     */\n    stroke: null,\n\n    /**\n     * @type {number}\n     */\n    opacity: 1,\n\n    /**\n     * @type {number}\n     */\n    fillOpacity: null,\n\n    /**\n     * @type {number}\n     */\n    strokeOpacity: null,\n\n    /**\n     * `true` is not supported.\n     * `false`/`null`/`undefined` are the same.\n     * `false` is used to remove lineDash in some\n     * case that `null`/`undefined` can not be set.\n     * (e.g., emphasis.lineStyle in echarts)\n     * @type {Array.<number>|boolean}\n     */\n    lineDash: null,\n\n    /**\n     * @type {number}\n     */\n    lineDashOffset: 0,\n\n    /**\n     * @type {number}\n     */\n    shadowBlur: 0,\n\n    /**\n     * @type {number}\n     */\n    shadowOffsetX: 0,\n\n    /**\n     * @type {number}\n     */\n    shadowOffsetY: 0,\n\n    /**\n     * @type {number}\n     */\n    lineWidth: 1,\n\n    /**\n     * If stroke ignore scale\n     * @type {Boolean}\n     */\n    strokeNoScale: false,\n\n    // Bounding rect text configuration\n    // Not affected by element transform\n    /**\n     * @type {string}\n     */\n    text: null,\n\n    /**\n     * If `fontSize` or `fontFamily` exists, `font` will be reset by\n     * `fontSize`, `fontStyle`, `fontWeight`, `fontFamily`.\n     * So do not visit it directly in upper application (like echarts),\n     * but use `contain/text#makeFont` instead.\n     * @type {string}\n     */\n    font: null,\n\n    /**\n     * The same as font. Use font please.\n     * @deprecated\n     * @type {string}\n     */\n    textFont: null,\n\n    /**\n     * It helps merging respectively, rather than parsing an entire font string.\n     * @type {string}\n     */\n    fontStyle: null,\n\n    /**\n     * It helps merging respectively, rather than parsing an entire font string.\n     * @type {string}\n     */\n    fontWeight: null,\n\n    /**\n     * It helps merging respectively, rather than parsing an entire font string.\n     * Should be 12 but not '12px'.\n     * @type {number}\n     */\n    fontSize: null,\n\n    /**\n     * It helps merging respectively, rather than parsing an entire font string.\n     * @type {string}\n     */\n    fontFamily: null,\n\n    /**\n     * Reserved for special functinality, like 'hr'.\n     * @type {string}\n     */\n    textTag: null,\n\n    /**\n     * @type {string}\n     */\n    textFill: '#000',\n\n    /**\n     * @type {string}\n     */\n    textStroke: null,\n\n    /**\n     * @type {number}\n     */\n    textWidth: null,\n\n    /**\n     * Only for textBackground.\n     * @type {number}\n     */\n    textHeight: null,\n\n    /**\n     * textStroke may be set as some color as a default\n     * value in upper applicaion, where the default value\n     * of textStrokeWidth should be 0 to make sure that\n     * user can choose to do not use text stroke.\n     * @type {number}\n     */\n    textStrokeWidth: 0,\n\n    /**\n     * @type {number}\n     */\n    textLineHeight: null,\n\n    /**\n     * 'inside', 'left', 'right', 'top', 'bottom'\n     * [x, y]\n     * Based on x, y of rect.\n     * @type {string|Array.<number>}\n     * @default 'inside'\n     */\n    textPosition: 'inside',\n\n    /**\n     * If not specified, use the boundingRect of a `displayable`.\n     * @type {Object}\n     */\n    textRect: null,\n\n    /**\n     * [x, y]\n     * @type {Array.<number>}\n     */\n    textOffset: null,\n\n    /**\n     * @type {string}\n     */\n    textAlign: null,\n\n    /**\n     * @type {string}\n     */\n    textVerticalAlign: null,\n\n    /**\n     * @type {number}\n     */\n    textDistance: 5,\n\n    /**\n     * @type {string}\n     */\n    textShadowColor: 'transparent',\n\n    /**\n     * @type {number}\n     */\n    textShadowBlur: 0,\n\n    /**\n     * @type {number}\n     */\n    textShadowOffsetX: 0,\n\n    /**\n     * @type {number}\n     */\n    textShadowOffsetY: 0,\n\n    /**\n     * @type {string}\n     */\n    textBoxShadowColor: 'transparent',\n\n    /**\n     * @type {number}\n     */\n    textBoxShadowBlur: 0,\n\n    /**\n     * @type {number}\n     */\n    textBoxShadowOffsetX: 0,\n\n    /**\n     * @type {number}\n     */\n    textBoxShadowOffsetY: 0,\n\n    /**\n     * Whether transform text.\n     * Only useful in Path and Image element\n     * @type {boolean}\n     */\n    transformText: false,\n\n    /**\n     * Text rotate around position of Path or Image\n     * Only useful in Path and Image element and transformText is false.\n     */\n    textRotation: 0,\n\n    /**\n     * Text origin of text rotation, like [10, 40].\n     * Based on x, y of rect.\n     * Useful in label rotation of circular symbol.\n     * By default, this origin is textPosition.\n     * Can be 'center'.\n     * @type {string|Array.<number>}\n     */\n    textOrigin: null,\n\n    /**\n     * @type {string}\n     */\n    textBackgroundColor: null,\n\n    /**\n     * @type {string}\n     */\n    textBorderColor: null,\n\n    /**\n     * @type {number}\n     */\n    textBorderWidth: 0,\n\n    /**\n     * @type {number}\n     */\n    textBorderRadius: 0,\n\n    /**\n     * Can be `2` or `[2, 4]` or `[2, 3, 4, 5]`\n     * @type {number|Array.<number>}\n     */\n    textPadding: null,\n\n    /**\n     * Text styles for rich text.\n     * @type {Object}\n     */\n    rich: null,\n\n    /**\n     * {outerWidth, outerHeight, ellipsis, placeholder}\n     * @type {Object}\n     */\n    truncate: null,\n\n    /**\n     * https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/globalCompositeOperation\n     * @type {string}\n     */\n    blend: null,\n\n    /**\n     * @param {CanvasRenderingContext2D} ctx\n     */\n    bind: function (ctx, el, prevEl) {\n        var style = this;\n        var prevStyle = prevEl && prevEl.style;\n        // If no prevStyle, it means first draw.\n        // Only apply cache if the last time cachced by this function.\n        var notCheckCache = !prevStyle || ctx.__attrCachedBy !== ContextCachedBy.STYLE_BIND;\n\n        ctx.__attrCachedBy = ContextCachedBy.STYLE_BIND;\n\n        for (var i = 0; i < STYLE_COMMON_PROPS.length; i++) {\n            var prop = STYLE_COMMON_PROPS[i];\n            var styleName = prop[0];\n\n            if (notCheckCache || style[styleName] !== prevStyle[styleName]) {\n                // FIXME Invalid property value will cause style leak from previous element.\n                ctx[styleName] =\n                    fixShadow(ctx, styleName, style[styleName] || prop[1]);\n            }\n        }\n\n        if ((notCheckCache || style.fill !== prevStyle.fill)) {\n            ctx.fillStyle = style.fill;\n        }\n        if ((notCheckCache || style.stroke !== prevStyle.stroke)) {\n            ctx.strokeStyle = style.stroke;\n        }\n        if ((notCheckCache || style.opacity !== prevStyle.opacity)) {\n            ctx.globalAlpha = style.opacity == null ? 1 : style.opacity;\n        }\n\n        if ((notCheckCache || style.blend !== prevStyle.blend)) {\n            ctx.globalCompositeOperation = style.blend || 'source-over';\n        }\n        if (this.hasStroke()) {\n            var lineWidth = style.lineWidth;\n            ctx.lineWidth = lineWidth / (\n                (this.strokeNoScale && el && el.getLineScale) ? el.getLineScale() : 1\n            );\n        }\n    },\n\n    hasFill: function () {\n        var fill = this.fill;\n        return fill != null && fill !== 'none';\n    },\n\n    hasStroke: function () {\n        var stroke = this.stroke;\n        return stroke != null && stroke !== 'none' && this.lineWidth > 0;\n    },\n\n    /**\n     * Extend from other style\n     * @param {zrender/graphic/Style} otherStyle\n     * @param {boolean} overwrite true: overwrirte any way.\n     *                            false: overwrite only when !target.hasOwnProperty\n     *                            others: overwrite when property is not null/undefined.\n     */\n    extendFrom: function (otherStyle, overwrite) {\n        if (otherStyle) {\n            for (var name in otherStyle) {\n                if (otherStyle.hasOwnProperty(name)\n                    && (overwrite === true\n                        || (\n                            overwrite === false\n                                ? !this.hasOwnProperty(name)\n                                : otherStyle[name] != null\n                        )\n                    )\n                ) {\n                    this[name] = otherStyle[name];\n                }\n            }\n        }\n    },\n\n    /**\n     * Batch setting style with a given object\n     * @param {Object|string} obj\n     * @param {*} [obj]\n     */\n    set: function (obj, value) {\n        if (typeof obj === 'string') {\n            this[obj] = value;\n        }\n        else {\n            this.extendFrom(obj, true);\n        }\n    },\n\n    /**\n     * Clone\n     * @return {zrender/graphic/Style} [description]\n     */\n    clone: function () {\n        var newStyle = new this.constructor();\n        newStyle.extendFrom(this, true);\n        return newStyle;\n    },\n\n    getGradient: function (ctx, obj, rect) {\n        var method = obj.type === 'radial' ? createRadialGradient : createLinearGradient;\n        var canvasGradient = method(ctx, obj, rect);\n        var colorStops = obj.colorStops;\n        for (var i = 0; i < colorStops.length; i++) {\n            canvasGradient.addColorStop(\n                colorStops[i].offset, colorStops[i].color\n            );\n        }\n        return canvasGradient;\n    }\n\n};\n\nvar styleProto = Style.prototype;\nfor (var i = 0; i < STYLE_COMMON_PROPS.length; i++) {\n    var prop = STYLE_COMMON_PROPS[i];\n    if (!(prop[0] in styleProto)) {\n        styleProto[prop[0]] = prop[1];\n    }\n}\n\n// Provide for others\nStyle.getGradient = styleProto.getGradient;\n\nvar Pattern = function (image, repeat) {\n    // Should do nothing more in this constructor. Because gradient can be\n    // declard by `color: {image: ...}`, where this constructor will not be called.\n\n    this.image = image;\n    this.repeat = repeat;\n\n    // Can be cloned\n    this.type = 'pattern';\n};\n\nPattern.prototype.getCanvasPattern = function (ctx) {\n    return ctx.createPattern(this.image, this.repeat || 'repeat');\n};\n\n/**\n * @module zrender/Layer\n * @author pissang(https://www.github.com/pissang)\n */\n\nfunction returnFalse() {\n    return false;\n}\n\n/**\n * 创建dom\n *\n * @inner\n * @param {string} id dom id 待用\n * @param {Painter} painter painter instance\n * @param {number} number\n */\nfunction createDom(id, painter, dpr) {\n    var newDom = createCanvas();\n    var width = painter.getWidth();\n    var height = painter.getHeight();\n\n    var newDomStyle = newDom.style;\n    if (newDomStyle) {  // In node or some other non-browser environment\n        newDomStyle.position = 'absolute';\n        newDomStyle.left = 0;\n        newDomStyle.top = 0;\n        newDomStyle.width = width + 'px';\n        newDomStyle.height = height + 'px';\n\n        newDom.setAttribute('data-zr-dom-id', id);\n    }\n\n    newDom.width = width * dpr;\n    newDom.height = height * dpr;\n\n    return newDom;\n}\n\n/**\n * @alias module:zrender/Layer\n * @constructor\n * @extends module:zrender/mixin/Transformable\n * @param {string} id\n * @param {module:zrender/Painter} painter\n * @param {number} [dpr]\n */\nvar Layer = function (id, painter, dpr) {\n    var dom;\n    dpr = dpr || devicePixelRatio;\n    if (typeof id === 'string') {\n        dom = createDom(id, painter, dpr);\n    }\n    // Not using isDom because in node it will return false\n    else if (isObject$1(id)) {\n        dom = id;\n        id = dom.id;\n    }\n    this.id = id;\n    this.dom = dom;\n\n    var domStyle = dom.style;\n    if (domStyle) { // Not in node\n        dom.onselectstart = returnFalse; // 避免页面选中的尴尬\n        domStyle['-webkit-user-select'] = 'none';\n        domStyle['user-select'] = 'none';\n        domStyle['-webkit-touch-callout'] = 'none';\n        domStyle['-webkit-tap-highlight-color'] = 'rgba(0,0,0,0)';\n        domStyle['padding'] = 0;\n        domStyle['margin'] = 0;\n        domStyle['border-width'] = 0;\n    }\n\n    this.domBack = null;\n    this.ctxBack = null;\n\n    this.painter = painter;\n\n    this.config = null;\n\n    // Configs\n    /**\n     * 每次清空画布的颜色\n     * @type {string}\n     * @default 0\n     */\n    this.clearColor = 0;\n    /**\n     * 是否开启动态模糊\n     * @type {boolean}\n     * @default false\n     */\n    this.motionBlur = false;\n    /**\n     * 在开启动态模糊的时候使用，与上一帧混合的alpha值，值越大尾迹越明显\n     * @type {number}\n     * @default 0.7\n     */\n    this.lastFrameAlpha = 0.7;\n\n    /**\n     * Layer dpr\n     * @type {number}\n     */\n    this.dpr = dpr;\n};\n\nLayer.prototype = {\n\n    constructor: Layer,\n\n    __dirty: true,\n\n    __used: false,\n\n    __drawIndex: 0,\n    __startIndex: 0,\n    __endIndex: 0,\n\n    incremental: false,\n\n    getElementCount: function () {\n        return this.__endIndex - this.__startIndex;\n    },\n\n    initContext: function () {\n        this.ctx = this.dom.getContext('2d');\n        this.ctx.dpr = this.dpr;\n    },\n\n    createBackBuffer: function () {\n        var dpr = this.dpr;\n\n        this.domBack = createDom('back-' + this.id, this.painter, dpr);\n        this.ctxBack = this.domBack.getContext('2d');\n\n        if (dpr !== 1) {\n            this.ctxBack.scale(dpr, dpr);\n        }\n    },\n\n    /**\n     * @param  {number} width\n     * @param  {number} height\n     */\n    resize: function (width, height) {\n        var dpr = this.dpr;\n\n        var dom = this.dom;\n        var domStyle = dom.style;\n        var domBack = this.domBack;\n\n        if (domStyle) {\n            domStyle.width = width + 'px';\n            domStyle.height = height + 'px';\n        }\n\n        dom.width = width * dpr;\n        dom.height = height * dpr;\n\n        if (domBack) {\n            domBack.width = width * dpr;\n            domBack.height = height * dpr;\n\n            if (dpr !== 1) {\n                this.ctxBack.scale(dpr, dpr);\n            }\n        }\n    },\n\n    /**\n     * 清空该层画布\n     * @param {boolean} [clearAll]=false Clear all with out motion blur\n     * @param {Color} [clearColor]\n     */\n    clear: function (clearAll, clearColor) {\n        var dom = this.dom;\n        var ctx = this.ctx;\n        var width = dom.width;\n        var height = dom.height;\n\n        var clearColor = clearColor || this.clearColor;\n        var haveMotionBLur = this.motionBlur && !clearAll;\n        var lastFrameAlpha = this.lastFrameAlpha;\n\n        var dpr = this.dpr;\n\n        if (haveMotionBLur) {\n            if (!this.domBack) {\n                this.createBackBuffer();\n            }\n\n            this.ctxBack.globalCompositeOperation = 'copy';\n            this.ctxBack.drawImage(\n                dom, 0, 0,\n                width / dpr,\n                height / dpr\n            );\n        }\n\n        ctx.clearRect(0, 0, width, height);\n        if (clearColor && clearColor !== 'transparent') {\n            var clearColorGradientOrPattern;\n            // Gradient\n            if (clearColor.colorStops) {\n                // Cache canvas gradient\n                clearColorGradientOrPattern = clearColor.__canvasGradient || Style.getGradient(ctx, clearColor, {\n                    x: 0,\n                    y: 0,\n                    width: width,\n                    height: height\n                });\n\n                clearColor.__canvasGradient = clearColorGradientOrPattern;\n            }\n            // Pattern\n            else if (clearColor.image) {\n                clearColorGradientOrPattern = Pattern.prototype.getCanvasPattern.call(clearColor, ctx);\n            }\n            ctx.save();\n            ctx.fillStyle = clearColorGradientOrPattern || clearColor;\n            ctx.fillRect(0, 0, width, height);\n            ctx.restore();\n        }\n\n        if (haveMotionBLur) {\n            var domBack = this.domBack;\n            ctx.save();\n            ctx.globalAlpha = lastFrameAlpha;\n            ctx.drawImage(domBack, 0, 0, width, height);\n            ctx.restore();\n        }\n    }\n};\n\nvar requestAnimationFrame = (\n    typeof window !== 'undefined'\n    && (\n        (window.requestAnimationFrame && window.requestAnimationFrame.bind(window))\n        // https://github.com/ecomfe/zrender/issues/189#issuecomment-224919809\n        || (window.msRequestAnimationFrame && window.msRequestAnimationFrame.bind(window))\n        || window.mozRequestAnimationFrame\n        || window.webkitRequestAnimationFrame\n    )\n) || function (func) {\n    setTimeout(func, 16);\n};\n\nvar globalImageCache = new LRU(50);\n\n/**\n * @param {string|HTMLImageElement|HTMLCanvasElement|Canvas} newImageOrSrc\n * @return {HTMLImageElement|HTMLCanvasElement|Canvas} image\n */\nfunction findExistImage(newImageOrSrc) {\n    if (typeof newImageOrSrc === 'string') {\n        var cachedImgObj = globalImageCache.get(newImageOrSrc);\n        return cachedImgObj && cachedImgObj.image;\n    }\n    else {\n        return newImageOrSrc;\n    }\n}\n\n/**\n * Caution: User should cache loaded images, but not just count on LRU.\n * Consider if required images more than LRU size, will dead loop occur?\n *\n * @param {string|HTMLImageElement|HTMLCanvasElement|Canvas} newImageOrSrc\n * @param {HTMLImageElement|HTMLCanvasElement|Canvas} image Existent image.\n * @param {module:zrender/Element} [hostEl] For calling `dirty`.\n * @param {Function} [cb] params: (image, cbPayload)\n * @param {Object} [cbPayload] Payload on cb calling.\n * @return {HTMLImageElement|HTMLCanvasElement|Canvas} image\n */\nfunction createOrUpdateImage(newImageOrSrc, image, hostEl, cb, cbPayload) {\n    if (!newImageOrSrc) {\n        return image;\n    }\n    else if (typeof newImageOrSrc === 'string') {\n\n        // Image should not be loaded repeatly.\n        if ((image && image.__zrImageSrc === newImageOrSrc) || !hostEl) {\n            return image;\n        }\n\n        // Only when there is no existent image or existent image src\n        // is different, this method is responsible for load.\n        var cachedImgObj = globalImageCache.get(newImageOrSrc);\n\n        var pendingWrap = {hostEl: hostEl, cb: cb, cbPayload: cbPayload};\n\n        if (cachedImgObj) {\n            image = cachedImgObj.image;\n            !isImageReady(image) && cachedImgObj.pending.push(pendingWrap);\n        }\n        else {\n            image = new Image();\n            image.onload = image.onerror = imageOnLoad;\n\n            globalImageCache.put(\n                newImageOrSrc,\n                image.__cachedImgObj = {\n                    image: image,\n                    pending: [pendingWrap]\n                }\n            );\n\n            image.src = image.__zrImageSrc = newImageOrSrc;\n        }\n\n        return image;\n    }\n    // newImageOrSrc is an HTMLImageElement or HTMLCanvasElement or Canvas\n    else {\n        return newImageOrSrc;\n    }\n}\n\nfunction imageOnLoad() {\n    var cachedImgObj = this.__cachedImgObj;\n    this.onload = this.onerror = this.__cachedImgObj = null;\n\n    for (var i = 0; i < cachedImgObj.pending.length; i++) {\n        var pendingWrap = cachedImgObj.pending[i];\n        var cb = pendingWrap.cb;\n        cb && cb(this, pendingWrap.cbPayload);\n        pendingWrap.hostEl.dirty();\n    }\n    cachedImgObj.pending.length = 0;\n}\n\nfunction isImageReady(image) {\n    return image && image.width && image.height;\n}\n\nvar textWidthCache = {};\nvar textWidthCacheCounter = 0;\n\nvar TEXT_CACHE_MAX = 5000;\nvar STYLE_REG = /\\{([a-zA-Z0-9_]+)\\|([^}]*)\\}/g;\n\nvar DEFAULT_FONT$1 = '12px sans-serif';\n\n// Avoid assign to an exported variable, for transforming to cjs.\nvar methods$1 = {};\n\nfunction $override$1(name, fn) {\n    methods$1[name] = fn;\n}\n\n/**\n * @public\n * @param {string} text\n * @param {string} font\n * @return {number} width\n */\nfunction getWidth(text, font) {\n    font = font || DEFAULT_FONT$1;\n    var key = text + ':' + font;\n    if (textWidthCache[key]) {\n        return textWidthCache[key];\n    }\n\n    var textLines = (text + '').split('\\n');\n    var width = 0;\n\n    for (var i = 0, l = textLines.length; i < l; i++) {\n        // textContain.measureText may be overrided in SVG or VML\n        width = Math.max(measureText(textLines[i], font).width, width);\n    }\n\n    if (textWidthCacheCounter > TEXT_CACHE_MAX) {\n        textWidthCacheCounter = 0;\n        textWidthCache = {};\n    }\n    textWidthCacheCounter++;\n    textWidthCache[key] = width;\n\n    return width;\n}\n\n/**\n * @public\n * @param {string} text\n * @param {string} font\n * @param {string} [textAlign='left']\n * @param {string} [textVerticalAlign='top']\n * @param {Array.<number>} [textPadding]\n * @param {Object} [rich]\n * @param {Object} [truncate]\n * @return {Object} {x, y, width, height, lineHeight}\n */\nfunction getBoundingRect(text, font, textAlign, textVerticalAlign, textPadding, textLineHeight, rich, truncate) {\n    return rich\n        ? getRichTextRect(text, font, textAlign, textVerticalAlign, textPadding, textLineHeight, rich, truncate)\n        : getPlainTextRect(text, font, textAlign, textVerticalAlign, textPadding, textLineHeight, truncate);\n}\n\nfunction getPlainTextRect(text, font, textAlign, textVerticalAlign, textPadding, textLineHeight, truncate) {\n    var contentBlock = parsePlainText(text, font, textPadding, textLineHeight, truncate);\n    var outerWidth = getWidth(text, font);\n    if (textPadding) {\n        outerWidth += textPadding[1] + textPadding[3];\n    }\n    var outerHeight = contentBlock.outerHeight;\n\n    var x = adjustTextX(0, outerWidth, textAlign);\n    var y = adjustTextY(0, outerHeight, textVerticalAlign);\n\n    var rect = new BoundingRect(x, y, outerWidth, outerHeight);\n    rect.lineHeight = contentBlock.lineHeight;\n\n    return rect;\n}\n\nfunction getRichTextRect(text, font, textAlign, textVerticalAlign, textPadding, textLineHeight, rich, truncate) {\n    var contentBlock = parseRichText(text, {\n        rich: rich,\n        truncate: truncate,\n        font: font,\n        textAlign: textAlign,\n        textPadding: textPadding,\n        textLineHeight: textLineHeight\n    });\n    var outerWidth = contentBlock.outerWidth;\n    var outerHeight = contentBlock.outerHeight;\n\n    var x = adjustTextX(0, outerWidth, textAlign);\n    var y = adjustTextY(0, outerHeight, textVerticalAlign);\n\n    return new BoundingRect(x, y, outerWidth, outerHeight);\n}\n\n/**\n * @public\n * @param {number} x\n * @param {number} width\n * @param {string} [textAlign='left']\n * @return {number} Adjusted x.\n */\nfunction adjustTextX(x, width, textAlign) {\n    // FIXME Right to left language\n    if (textAlign === 'right') {\n        x -= width;\n    }\n    else if (textAlign === 'center') {\n        x -= width / 2;\n    }\n    return x;\n}\n\n/**\n * @public\n * @param {number} y\n * @param {number} height\n * @param {string} [textVerticalAlign='top']\n * @return {number} Adjusted y.\n */\nfunction adjustTextY(y, height, textVerticalAlign) {\n    if (textVerticalAlign === 'middle') {\n        y -= height / 2;\n    }\n    else if (textVerticalAlign === 'bottom') {\n        y -= height;\n    }\n    return y;\n}\n\n/**\n * Follow same interface to `Displayable.prototype.calculateTextPosition`.\n * @public\n * @param {Obejct} [out] Prepared out object. If not input, auto created in the method.\n * @param {module:zrender/graphic/Style} style where `textPosition` and `textDistance` are visited.\n * @param {Object} rect {x, y, width, height} Rect of the host elment, according to which the text positioned.\n * @return {Object} The input `out`. Set: {x, y, textAlign, textVerticalAlign}\n */\nfunction calculateTextPosition(out, style, rect) {\n    var textPosition = style.textPosition;\n    var distance = style.textDistance;\n\n    var x = rect.x;\n    var y = rect.y;\n\n    var height = rect.height;\n    var width = rect.width;\n    var halfHeight = height / 2;\n\n    var textAlign = 'left';\n    var textVerticalAlign = 'top';\n\n    switch (textPosition) {\n        case 'left':\n            x -= distance;\n            y += halfHeight;\n            textAlign = 'right';\n            textVerticalAlign = 'middle';\n            break;\n        case 'right':\n            x += distance + width;\n            y += halfHeight;\n            textVerticalAlign = 'middle';\n            break;\n        case 'top':\n            x += width / 2;\n            y -= distance;\n            textAlign = 'center';\n            textVerticalAlign = 'bottom';\n            break;\n        case 'bottom':\n            x += width / 2;\n            y += height + distance;\n            textAlign = 'center';\n            break;\n        case 'inside':\n            x += width / 2;\n            y += halfHeight;\n            textAlign = 'center';\n            textVerticalAlign = 'middle';\n            break;\n        case 'insideLeft':\n            x += distance;\n            y += halfHeight;\n            textVerticalAlign = 'middle';\n            break;\n        case 'insideRight':\n            x += width - distance;\n            y += halfHeight;\n            textAlign = 'right';\n            textVerticalAlign = 'middle';\n            break;\n        case 'insideTop':\n            x += width / 2;\n            y += distance;\n            textAlign = 'center';\n            break;\n        case 'insideBottom':\n            x += width / 2;\n            y += height - distance;\n            textAlign = 'center';\n            textVerticalAlign = 'bottom';\n            break;\n        case 'insideTopLeft':\n            x += distance;\n            y += distance;\n            break;\n        case 'insideTopRight':\n            x += width - distance;\n            y += distance;\n            textAlign = 'right';\n            break;\n        case 'insideBottomLeft':\n            x += distance;\n            y += height - distance;\n            textVerticalAlign = 'bottom';\n            break;\n        case 'insideBottomRight':\n            x += width - distance;\n            y += height - distance;\n            textAlign = 'right';\n            textVerticalAlign = 'bottom';\n            break;\n    }\n\n    out = out || {};\n    out.x = x;\n    out.y = y;\n    out.textAlign = textAlign;\n    out.textVerticalAlign = textVerticalAlign;\n\n    return out;\n}\n\n/**\n * To be removed. But still do not remove in case that some one has imported it.\n * @deprecated\n * @public\n * @param {stirng} textPosition\n * @param {Object} rect {x, y, width, height}\n * @param {number} distance\n * @return {Object} {x, y, textAlign, textVerticalAlign}\n */\n\n\n/**\n * Show ellipsis if overflow.\n *\n * @public\n * @param  {string} text\n * @param  {string} containerWidth\n * @param  {string} font\n * @param  {number} [ellipsis='...']\n * @param  {Object} [options]\n * @param  {number} [options.maxIterations=3]\n * @param  {number} [options.minChar=0] If truncate result are less\n *                  then minChar, ellipsis will not show, which is\n *                  better for user hint in some cases.\n * @param  {number} [options.placeholder=''] When all truncated, use the placeholder.\n * @return {string}\n */\nfunction truncateText(text, containerWidth, font, ellipsis, options) {\n    if (!containerWidth) {\n        return '';\n    }\n\n    var textLines = (text + '').split('\\n');\n    options = prepareTruncateOptions(containerWidth, font, ellipsis, options);\n\n    // FIXME\n    // It is not appropriate that every line has '...' when truncate multiple lines.\n    for (var i = 0, len = textLines.length; i < len; i++) {\n        textLines[i] = truncateSingleLine(textLines[i], options);\n    }\n\n    return textLines.join('\\n');\n}\n\nfunction prepareTruncateOptions(containerWidth, font, ellipsis, options) {\n    options = extend({}, options);\n\n    options.font = font;\n    var ellipsis = retrieve2(ellipsis, '...');\n    options.maxIterations = retrieve2(options.maxIterations, 2);\n    var minChar = options.minChar = retrieve2(options.minChar, 0);\n    // FIXME\n    // Other languages?\n    options.cnCharWidth = getWidth('国', font);\n    // FIXME\n    // Consider proportional font?\n    var ascCharWidth = options.ascCharWidth = getWidth('a', font);\n    options.placeholder = retrieve2(options.placeholder, '');\n\n    // Example 1: minChar: 3, text: 'asdfzxcv', truncate result: 'asdf', but not: 'a...'.\n    // Example 2: minChar: 3, text: '维度', truncate result: '维', but not: '...'.\n    var contentWidth = containerWidth = Math.max(0, containerWidth - 1); // Reserve some gap.\n    for (var i = 0; i < minChar && contentWidth >= ascCharWidth; i++) {\n        contentWidth -= ascCharWidth;\n    }\n\n    var ellipsisWidth = getWidth(ellipsis, font);\n    if (ellipsisWidth > contentWidth) {\n        ellipsis = '';\n        ellipsisWidth = 0;\n    }\n\n    contentWidth = containerWidth - ellipsisWidth;\n\n    options.ellipsis = ellipsis;\n    options.ellipsisWidth = ellipsisWidth;\n    options.contentWidth = contentWidth;\n    options.containerWidth = containerWidth;\n\n    return options;\n}\n\nfunction truncateSingleLine(textLine, options) {\n    var containerWidth = options.containerWidth;\n    var font = options.font;\n    var contentWidth = options.contentWidth;\n\n    if (!containerWidth) {\n        return '';\n    }\n\n    var lineWidth = getWidth(textLine, font);\n\n    if (lineWidth <= containerWidth) {\n        return textLine;\n    }\n\n    for (var j = 0; ; j++) {\n        if (lineWidth <= contentWidth || j >= options.maxIterations) {\n            textLine += options.ellipsis;\n            break;\n        }\n\n        var subLength = j === 0\n            ? estimateLength(textLine, contentWidth, options.ascCharWidth, options.cnCharWidth)\n            : lineWidth > 0\n            ? Math.floor(textLine.length * contentWidth / lineWidth)\n            : 0;\n\n        textLine = textLine.substr(0, subLength);\n        lineWidth = getWidth(textLine, font);\n    }\n\n    if (textLine === '') {\n        textLine = options.placeholder;\n    }\n\n    return textLine;\n}\n\nfunction estimateLength(text, contentWidth, ascCharWidth, cnCharWidth) {\n    var width = 0;\n    var i = 0;\n    for (var len = text.length; i < len && width < contentWidth; i++) {\n        var charCode = text.charCodeAt(i);\n        width += (0 <= charCode && charCode <= 127) ? ascCharWidth : cnCharWidth;\n    }\n    return i;\n}\n\n/**\n * @public\n * @param {string} font\n * @return {number} line height\n */\nfunction getLineHeight(font) {\n    // FIXME A rough approach.\n    return getWidth('国', font);\n}\n\n/**\n * @public\n * @param {string} text\n * @param {string} font\n * @return {Object} width\n */\nfunction measureText(text, font) {\n    return methods$1.measureText(text, font);\n}\n\n// Avoid assign to an exported variable, for transforming to cjs.\nmethods$1.measureText = function (text, font) {\n    var ctx = getContext();\n    ctx.font = font || DEFAULT_FONT$1;\n    return ctx.measureText(text);\n};\n\n/**\n * @public\n * @param {string} text\n * @param {string} font\n * @param {Object} [truncate]\n * @return {Object} block: {lineHeight, lines, height, outerHeight}\n *  Notice: for performance, do not calculate outerWidth util needed.\n */\nfunction parsePlainText(text, font, padding, textLineHeight, truncate) {\n    text != null && (text += '');\n\n    var lineHeight = retrieve2(textLineHeight, getLineHeight(font));\n    var lines = text ? text.split('\\n') : [];\n    var height = lines.length * lineHeight;\n    var outerHeight = height;\n\n    if (padding) {\n        outerHeight += padding[0] + padding[2];\n    }\n\n    if (text && truncate) {\n        var truncOuterHeight = truncate.outerHeight;\n        var truncOuterWidth = truncate.outerWidth;\n        if (truncOuterHeight != null && outerHeight > truncOuterHeight) {\n            text = '';\n            lines = [];\n        }\n        else if (truncOuterWidth != null) {\n            var options = prepareTruncateOptions(\n                truncOuterWidth - (padding ? padding[1] + padding[3] : 0),\n                font,\n                truncate.ellipsis,\n                {minChar: truncate.minChar, placeholder: truncate.placeholder}\n            );\n\n            // FIXME\n            // It is not appropriate that every line has '...' when truncate multiple lines.\n            for (var i = 0, len = lines.length; i < len; i++) {\n                lines[i] = truncateSingleLine(lines[i], options);\n            }\n        }\n    }\n\n    return {\n        lines: lines,\n        height: height,\n        outerHeight: outerHeight,\n        lineHeight: lineHeight\n    };\n}\n\n/**\n * For example: 'some text {a|some text}other text{b|some text}xxx{c|}xxx'\n * Also consider 'bbbb{a|xxx\\nzzz}xxxx\\naaaa'.\n *\n * @public\n * @param {string} text\n * @param {Object} style\n * @return {Object} block\n * {\n *      width,\n *      height,\n *      lines: [{\n *          lineHeight,\n *          width,\n *          tokens: [[{\n *              styleName,\n *              text,\n *              width,      // include textPadding\n *              height,     // include textPadding\n *              textWidth, // pure text width\n *              textHeight, // pure text height\n *              lineHeihgt,\n *              font,\n *              textAlign,\n *              textVerticalAlign\n *          }], [...], ...]\n *      }, ...]\n * }\n * If styleName is undefined, it is plain text.\n */\nfunction parseRichText(text, style) {\n    var contentBlock = {lines: [], width: 0, height: 0};\n\n    text != null && (text += '');\n    if (!text) {\n        return contentBlock;\n    }\n\n    var lastIndex = STYLE_REG.lastIndex = 0;\n    var result;\n    while ((result = STYLE_REG.exec(text)) != null) {\n        var matchedIndex = result.index;\n        if (matchedIndex > lastIndex) {\n            pushTokens(contentBlock, text.substring(lastIndex, matchedIndex));\n        }\n        pushTokens(contentBlock, result[2], result[1]);\n        lastIndex = STYLE_REG.lastIndex;\n    }\n\n    if (lastIndex < text.length) {\n        pushTokens(contentBlock, text.substring(lastIndex, text.length));\n    }\n\n    var lines = contentBlock.lines;\n    var contentHeight = 0;\n    var contentWidth = 0;\n    // For `textWidth: 100%`\n    var pendingList = [];\n\n    var stlPadding = style.textPadding;\n\n    var truncate = style.truncate;\n    var truncateWidth = truncate && truncate.outerWidth;\n    var truncateHeight = truncate && truncate.outerHeight;\n    if (stlPadding) {\n        truncateWidth != null && (truncateWidth -= stlPadding[1] + stlPadding[3]);\n        truncateHeight != null && (truncateHeight -= stlPadding[0] + stlPadding[2]);\n    }\n\n    // Calculate layout info of tokens.\n    for (var i = 0; i < lines.length; i++) {\n        var line = lines[i];\n        var lineHeight = 0;\n        var lineWidth = 0;\n\n        for (var j = 0; j < line.tokens.length; j++) {\n            var token = line.tokens[j];\n            var tokenStyle = token.styleName && style.rich[token.styleName] || {};\n            // textPadding should not inherit from style.\n            var textPadding = token.textPadding = tokenStyle.textPadding;\n\n            // textFont has been asigned to font by `normalizeStyle`.\n            var font = token.font = tokenStyle.font || style.font;\n\n            // textHeight can be used when textVerticalAlign is specified in token.\n            var tokenHeight = token.textHeight = retrieve2(\n                // textHeight should not be inherited, consider it can be specified\n                // as box height of the block.\n                tokenStyle.textHeight, getLineHeight(font)\n            );\n            textPadding && (tokenHeight += textPadding[0] + textPadding[2]);\n            token.height = tokenHeight;\n            token.lineHeight = retrieve3(\n                tokenStyle.textLineHeight, style.textLineHeight, tokenHeight\n            );\n\n            token.textAlign = tokenStyle && tokenStyle.textAlign || style.textAlign;\n            token.textVerticalAlign = tokenStyle && tokenStyle.textVerticalAlign || 'middle';\n\n            if (truncateHeight != null && contentHeight + token.lineHeight > truncateHeight) {\n                return {lines: [], width: 0, height: 0};\n            }\n\n            token.textWidth = getWidth(token.text, font);\n            var tokenWidth = tokenStyle.textWidth;\n            var tokenWidthNotSpecified = tokenWidth == null || tokenWidth === 'auto';\n\n            // Percent width, can be `100%`, can be used in drawing separate\n            // line when box width is needed to be auto.\n            if (typeof tokenWidth === 'string' && tokenWidth.charAt(tokenWidth.length - 1) === '%') {\n                token.percentWidth = tokenWidth;\n                pendingList.push(token);\n                tokenWidth = 0;\n                // Do not truncate in this case, because there is no user case\n                // and it is too complicated.\n            }\n            else {\n                if (tokenWidthNotSpecified) {\n                    tokenWidth = token.textWidth;\n\n                    // FIXME: If image is not loaded and textWidth is not specified, calling\n                    // `getBoundingRect()` will not get correct result.\n                    var textBackgroundColor = tokenStyle.textBackgroundColor;\n                    var bgImg = textBackgroundColor && textBackgroundColor.image;\n\n                    // Use cases:\n                    // (1) If image is not loaded, it will be loaded at render phase and call\n                    // `dirty()` and `textBackgroundColor.image` will be replaced with the loaded\n                    // image, and then the right size will be calculated here at the next tick.\n                    // See `graphic/helper/text.js`.\n                    // (2) If image loaded, and `textBackgroundColor.image` is image src string,\n                    // use `imageHelper.findExistImage` to find cached image.\n                    // `imageHelper.findExistImage` will always be called here before\n                    // `imageHelper.createOrUpdateImage` in `graphic/helper/text.js#renderRichText`\n                    // which ensures that image will not be rendered before correct size calcualted.\n                    if (bgImg) {\n                        bgImg = findExistImage(bgImg);\n                        if (isImageReady(bgImg)) {\n                            tokenWidth = Math.max(tokenWidth, bgImg.width * tokenHeight / bgImg.height);\n                        }\n                    }\n                }\n\n                var paddingW = textPadding ? textPadding[1] + textPadding[3] : 0;\n                tokenWidth += paddingW;\n\n                var remianTruncWidth = truncateWidth != null ? truncateWidth - lineWidth : null;\n\n                if (remianTruncWidth != null && remianTruncWidth < tokenWidth) {\n                    if (!tokenWidthNotSpecified || remianTruncWidth < paddingW) {\n                        token.text = '';\n                        token.textWidth = tokenWidth = 0;\n                    }\n                    else {\n                        token.text = truncateText(\n                            token.text, remianTruncWidth - paddingW, font, truncate.ellipsis,\n                            {minChar: truncate.minChar}\n                        );\n                        token.textWidth = getWidth(token.text, font);\n                        tokenWidth = token.textWidth + paddingW;\n                    }\n                }\n            }\n\n            lineWidth += (token.width = tokenWidth);\n            tokenStyle && (lineHeight = Math.max(lineHeight, token.lineHeight));\n        }\n\n        line.width = lineWidth;\n        line.lineHeight = lineHeight;\n        contentHeight += lineHeight;\n        contentWidth = Math.max(contentWidth, lineWidth);\n    }\n\n    contentBlock.outerWidth = contentBlock.width = retrieve2(style.textWidth, contentWidth);\n    contentBlock.outerHeight = contentBlock.height = retrieve2(style.textHeight, contentHeight);\n\n    if (stlPadding) {\n        contentBlock.outerWidth += stlPadding[1] + stlPadding[3];\n        contentBlock.outerHeight += stlPadding[0] + stlPadding[2];\n    }\n\n    for (var i = 0; i < pendingList.length; i++) {\n        var token = pendingList[i];\n        var percentWidth = token.percentWidth;\n        // Should not base on outerWidth, because token can not be placed out of padding.\n        token.width = parseInt(percentWidth, 10) / 100 * contentWidth;\n    }\n\n    return contentBlock;\n}\n\nfunction pushTokens(block, str, styleName) {\n    var isEmptyStr = str === '';\n    var strs = str.split('\\n');\n    var lines = block.lines;\n\n    for (var i = 0; i < strs.length; i++) {\n        var text = strs[i];\n        var token = {\n            styleName: styleName,\n            text: text,\n            isLineHolder: !text && !isEmptyStr\n        };\n\n        // The first token should be appended to the last line.\n        if (!i) {\n            var tokens = (lines[lines.length - 1] || (lines[0] = {tokens: []})).tokens;\n\n            // Consider cases:\n            // (1) ''.split('\\n') => ['', '\\n', ''], the '' at the first item\n            // (which is a placeholder) should be replaced by new token.\n            // (2) A image backage, where token likes {a|}.\n            // (3) A redundant '' will affect textAlign in line.\n            // (4) tokens with the same tplName should not be merged, because\n            // they should be displayed in different box (with border and padding).\n            var tokensLen = tokens.length;\n            (tokensLen === 1 && tokens[0].isLineHolder)\n                ? (tokens[0] = token)\n                // Consider text is '', only insert when it is the \"lineHolder\" or\n                // \"emptyStr\". Otherwise a redundant '' will affect textAlign in line.\n                : ((text || !tokensLen || isEmptyStr) && tokens.push(token));\n        }\n        // Other tokens always start a new line.\n        else {\n            // If there is '', insert it as a placeholder.\n            lines.push({tokens: [token]});\n        }\n    }\n}\n\nfunction makeFont(style) {\n    // FIXME in node-canvas fontWeight is before fontStyle\n    // Use `fontSize` `fontFamily` to check whether font properties are defined.\n    var font = (style.fontSize || style.fontFamily) && [\n        style.fontStyle,\n        style.fontWeight,\n        (style.fontSize || 12) + 'px',\n        // If font properties are defined, `fontFamily` should not be ignored.\n        style.fontFamily || 'sans-serif'\n    ].join(' ');\n    return font && trim(font) || style.textFont || style.font;\n}\n\n/**\n * @param {Object} ctx\n * @param {Object} shape\n * @param {number} shape.x\n * @param {number} shape.y\n * @param {number} shape.width\n * @param {number} shape.height\n * @param {number} shape.r\n */\nfunction buildPath(ctx, shape) {\n    var x = shape.x;\n    var y = shape.y;\n    var width = shape.width;\n    var height = shape.height;\n    var r = shape.r;\n    var r1;\n    var r2;\n    var r3;\n    var r4;\n\n    // Convert width and height to positive for better borderRadius\n    if (width < 0) {\n        x = x + width;\n        width = -width;\n    }\n    if (height < 0) {\n        y = y + height;\n        height = -height;\n    }\n\n    if (typeof r === 'number') {\n        r1 = r2 = r3 = r4 = r;\n    }\n    else if (r instanceof Array) {\n        if (r.length === 1) {\n            r1 = r2 = r3 = r4 = r[0];\n        }\n        else if (r.length === 2) {\n            r1 = r3 = r[0];\n            r2 = r4 = r[1];\n        }\n        else if (r.length === 3) {\n            r1 = r[0];\n            r2 = r4 = r[1];\n            r3 = r[2];\n        }\n        else {\n            r1 = r[0];\n            r2 = r[1];\n            r3 = r[2];\n            r4 = r[3];\n        }\n    }\n    else {\n        r1 = r2 = r3 = r4 = 0;\n    }\n\n    var total;\n    if (r1 + r2 > width) {\n        total = r1 + r2;\n        r1 *= width / total;\n        r2 *= width / total;\n    }\n    if (r3 + r4 > width) {\n        total = r3 + r4;\n        r3 *= width / total;\n        r4 *= width / total;\n    }\n    if (r2 + r3 > height) {\n        total = r2 + r3;\n        r2 *= height / total;\n        r3 *= height / total;\n    }\n    if (r1 + r4 > height) {\n        total = r1 + r4;\n        r1 *= height / total;\n        r4 *= height / total;\n    }\n    ctx.moveTo(x + r1, y);\n    ctx.lineTo(x + width - r2, y);\n    r2 !== 0 && ctx.arc(x + width - r2, y + r2, r2, -Math.PI / 2, 0);\n    ctx.lineTo(x + width, y + height - r3);\n    r3 !== 0 && ctx.arc(x + width - r3, y + height - r3, r3, 0, Math.PI / 2);\n    ctx.lineTo(x + r4, y + height);\n    r4 !== 0 && ctx.arc(x + r4, y + height - r4, r4, Math.PI / 2, Math.PI);\n    ctx.lineTo(x, y + r1);\n    r1 !== 0 && ctx.arc(x + r1, y + r1, r1, Math.PI, Math.PI * 1.5);\n}\n\nvar DEFAULT_FONT = DEFAULT_FONT$1;\n\n// TODO: Have not support 'start', 'end' yet.\nvar VALID_TEXT_ALIGN = {left: 1, right: 1, center: 1};\nvar VALID_TEXT_VERTICAL_ALIGN = {top: 1, bottom: 1, middle: 1};\n// Different from `STYLE_COMMON_PROPS` of `graphic/Style`,\n// the default value of shadowColor is `'transparent'`.\nvar SHADOW_STYLE_COMMON_PROPS = [\n    ['textShadowBlur', 'shadowBlur', 0],\n    ['textShadowOffsetX', 'shadowOffsetX', 0],\n    ['textShadowOffsetY', 'shadowOffsetY', 0],\n    ['textShadowColor', 'shadowColor', 'transparent']\n];\nvar _tmpTextPositionResult = {};\nvar _tmpBoxPositionResult = {};\n\n/**\n * @param {module:zrender/graphic/Style} style\n * @return {module:zrender/graphic/Style} The input style.\n */\nfunction normalizeTextStyle(style) {\n    normalizeStyle(style);\n    each$1(style.rich, normalizeStyle);\n    return style;\n}\n\nfunction normalizeStyle(style) {\n    if (style) {\n\n        style.font = makeFont(style);\n\n        var textAlign = style.textAlign;\n        textAlign === 'middle' && (textAlign = 'center');\n        style.textAlign = (\n            textAlign == null || VALID_TEXT_ALIGN[textAlign]\n        ) ? textAlign : 'left';\n\n        // Compatible with textBaseline.\n        var textVerticalAlign = style.textVerticalAlign || style.textBaseline;\n        textVerticalAlign === 'center' && (textVerticalAlign = 'middle');\n        style.textVerticalAlign = (\n            textVerticalAlign == null || VALID_TEXT_VERTICAL_ALIGN[textVerticalAlign]\n        ) ? textVerticalAlign : 'top';\n\n        var textPadding = style.textPadding;\n        if (textPadding) {\n            style.textPadding = normalizeCssArray(style.textPadding);\n        }\n    }\n}\n\n/**\n * @param {CanvasRenderingContext2D} ctx\n * @param {string} text\n * @param {module:zrender/graphic/Style} style\n * @param {Object|boolean} [rect] {x, y, width, height}\n *                  If set false, rect text is not used.\n * @param {Element|module:zrender/graphic/helper/constant.WILL_BE_RESTORED} [prevEl] For ctx prop cache.\n */\nfunction renderText(hostEl, ctx, text, style, rect, prevEl) {\n    style.rich\n        ? renderRichText(hostEl, ctx, text, style, rect, prevEl)\n        : renderPlainText(hostEl, ctx, text, style, rect, prevEl);\n}\n\n// Avoid setting to ctx according to prevEl if possible for\n// performance in scenarios of large amount text.\nfunction renderPlainText(hostEl, ctx, text, style, rect, prevEl) {\n    'use strict';\n\n    var needDrawBg = needDrawBackground(style);\n\n    var prevStyle;\n    var checkCache = false;\n    var cachedByMe = ctx.__attrCachedBy === ContextCachedBy.PLAIN_TEXT;\n\n    // Only take and check cache for `Text` el, but not RectText.\n    if (prevEl !== WILL_BE_RESTORED) {\n        if (prevEl) {\n            prevStyle = prevEl.style;\n            checkCache = !needDrawBg && cachedByMe && prevStyle;\n        }\n\n        // Prevent from using cache in `Style::bind`, because of the case:\n        // ctx property is modified by other properties than `Style::bind`\n        // used, and Style::bind is called next.\n        ctx.__attrCachedBy = needDrawBg ? ContextCachedBy.NONE : ContextCachedBy.PLAIN_TEXT;\n    }\n    // Since this will be restored, prevent from using these props to check cache in the next\n    // entering of this method. But do not need to clear other cache like `Style::bind`.\n    else if (cachedByMe) {\n        ctx.__attrCachedBy = ContextCachedBy.NONE;\n    }\n\n    var styleFont = style.font || DEFAULT_FONT;\n    // PENDING\n    // Only `Text` el set `font` and keep it (`RectText` will restore). So theoretically\n    // we can make font cache on ctx, which can cache for text el that are discontinuous.\n    // But layer save/restore needed to be considered.\n    // if (styleFont !== ctx.__fontCache) {\n    //     ctx.font = styleFont;\n    //     if (prevEl !== WILL_BE_RESTORED) {\n    //         ctx.__fontCache = styleFont;\n    //     }\n    // }\n    if (!checkCache || styleFont !== (prevStyle.font || DEFAULT_FONT)) {\n        ctx.font = styleFont;\n    }\n\n    // Use the final font from context-2d, because the final\n    // font might not be the style.font when it is illegal.\n    // But get `ctx.font` might be time consuming.\n    var computedFont = hostEl.__computedFont;\n    if (hostEl.__styleFont !== styleFont) {\n        hostEl.__styleFont = styleFont;\n        computedFont = hostEl.__computedFont = ctx.font;\n    }\n\n    var textPadding = style.textPadding;\n    var textLineHeight = style.textLineHeight;\n\n    var contentBlock = hostEl.__textCotentBlock;\n    if (!contentBlock || hostEl.__dirtyText) {\n        contentBlock = hostEl.__textCotentBlock = parsePlainText(\n            text, computedFont, textPadding, textLineHeight, style.truncate\n        );\n    }\n\n    var outerHeight = contentBlock.outerHeight;\n\n    var textLines = contentBlock.lines;\n    var lineHeight = contentBlock.lineHeight;\n\n    var boxPos = getBoxPosition(_tmpBoxPositionResult, hostEl, style, rect);\n    var baseX = boxPos.baseX;\n    var baseY = boxPos.baseY;\n    var textAlign = boxPos.textAlign || 'left';\n    var textVerticalAlign = boxPos.textVerticalAlign;\n\n    // Origin of textRotation should be the base point of text drawing.\n    applyTextRotation(ctx, style, rect, baseX, baseY);\n\n    var boxY = adjustTextY(baseY, outerHeight, textVerticalAlign);\n    var textX = baseX;\n    var textY = boxY;\n\n    if (needDrawBg || textPadding) {\n        // Consider performance, do not call getTextWidth util necessary.\n        var textWidth = getWidth(text, computedFont);\n        var outerWidth = textWidth;\n        textPadding && (outerWidth += textPadding[1] + textPadding[3]);\n        var boxX = adjustTextX(baseX, outerWidth, textAlign);\n\n        needDrawBg && drawBackground(hostEl, ctx, style, boxX, boxY, outerWidth, outerHeight);\n\n        if (textPadding) {\n            textX = getTextXForPadding(baseX, textAlign, textPadding);\n            textY += textPadding[0];\n        }\n    }\n\n    // Always set textAlign and textBase line, because it is difficute to calculate\n    // textAlign from prevEl, and we dont sure whether textAlign will be reset if\n    // font set happened.\n    ctx.textAlign = textAlign;\n    // Force baseline to be \"middle\". Otherwise, if using \"top\", the\n    // text will offset downward a little bit in font \"Microsoft YaHei\".\n    ctx.textBaseline = 'middle';\n    // Set text opacity\n    ctx.globalAlpha = style.opacity || 1;\n\n    // Always set shadowBlur and shadowOffset to avoid leak from displayable.\n    for (var i = 0; i < SHADOW_STYLE_COMMON_PROPS.length; i++) {\n        var propItem = SHADOW_STYLE_COMMON_PROPS[i];\n        var styleProp = propItem[0];\n        var ctxProp = propItem[1];\n        var val = style[styleProp];\n        if (!checkCache || val !== prevStyle[styleProp]) {\n            ctx[ctxProp] = fixShadow(ctx, ctxProp, val || propItem[2]);\n        }\n    }\n\n    // `textBaseline` is set as 'middle'.\n    textY += lineHeight / 2;\n\n    var textStrokeWidth = style.textStrokeWidth;\n    var textStrokeWidthPrev = checkCache ? prevStyle.textStrokeWidth : null;\n    var strokeWidthChanged = !checkCache || textStrokeWidth !== textStrokeWidthPrev;\n    var strokeChanged = !checkCache || strokeWidthChanged || style.textStroke !== prevStyle.textStroke;\n    var textStroke = getStroke(style.textStroke, textStrokeWidth);\n    var textFill = getFill(style.textFill);\n\n    if (textStroke) {\n        if (strokeWidthChanged) {\n            ctx.lineWidth = textStrokeWidth;\n        }\n        if (strokeChanged) {\n            ctx.strokeStyle = textStroke;\n        }\n    }\n    if (textFill) {\n        if (!checkCache || style.textFill !== prevStyle.textFill) {\n            ctx.fillStyle = textFill;\n        }\n    }\n\n    // Optimize simply, in most cases only one line exists.\n    if (textLines.length === 1) {\n        // Fill after stroke so the outline will not cover the main part.\n        textStroke && ctx.strokeText(textLines[0], textX, textY);\n        textFill && ctx.fillText(textLines[0], textX, textY);\n    }\n    else {\n        for (var i = 0; i < textLines.length; i++) {\n            // Fill after stroke so the outline will not cover the main part.\n            textStroke && ctx.strokeText(textLines[i], textX, textY);\n            textFill && ctx.fillText(textLines[i], textX, textY);\n            textY += lineHeight;\n        }\n    }\n}\n\nfunction renderRichText(hostEl, ctx, text, style, rect, prevEl) {\n    // Do not do cache for rich text because of the complexity.\n    // But `RectText` this will be restored, do not need to clear other cache like `Style::bind`.\n    if (prevEl !== WILL_BE_RESTORED) {\n        ctx.__attrCachedBy = ContextCachedBy.NONE;\n    }\n\n    var contentBlock = hostEl.__textCotentBlock;\n\n    if (!contentBlock || hostEl.__dirtyText) {\n        contentBlock = hostEl.__textCotentBlock = parseRichText(text, style);\n    }\n\n    drawRichText(hostEl, ctx, contentBlock, style, rect);\n}\n\nfunction drawRichText(hostEl, ctx, contentBlock, style, rect) {\n    var contentWidth = contentBlock.width;\n    var outerWidth = contentBlock.outerWidth;\n    var outerHeight = contentBlock.outerHeight;\n    var textPadding = style.textPadding;\n\n    var boxPos = getBoxPosition(_tmpBoxPositionResult, hostEl, style, rect);\n    var baseX = boxPos.baseX;\n    var baseY = boxPos.baseY;\n    var textAlign = boxPos.textAlign;\n    var textVerticalAlign = boxPos.textVerticalAlign;\n\n    // Origin of textRotation should be the base point of text drawing.\n    applyTextRotation(ctx, style, rect, baseX, baseY);\n\n    var boxX = adjustTextX(baseX, outerWidth, textAlign);\n    var boxY = adjustTextY(baseY, outerHeight, textVerticalAlign);\n    var xLeft = boxX;\n    var lineTop = boxY;\n    if (textPadding) {\n        xLeft += textPadding[3];\n        lineTop += textPadding[0];\n    }\n    var xRight = xLeft + contentWidth;\n\n    needDrawBackground(style) && drawBackground(\n        hostEl, ctx, style, boxX, boxY, outerWidth, outerHeight\n    );\n\n    for (var i = 0; i < contentBlock.lines.length; i++) {\n        var line = contentBlock.lines[i];\n        var tokens = line.tokens;\n        var tokenCount = tokens.length;\n        var lineHeight = line.lineHeight;\n        var usedWidth = line.width;\n\n        var leftIndex = 0;\n        var lineXLeft = xLeft;\n        var lineXRight = xRight;\n        var rightIndex = tokenCount - 1;\n        var token;\n\n        while (\n            leftIndex < tokenCount\n            && (token = tokens[leftIndex], !token.textAlign || token.textAlign === 'left')\n        ) {\n            placeToken(hostEl, ctx, token, style, lineHeight, lineTop, lineXLeft, 'left');\n            usedWidth -= token.width;\n            lineXLeft += token.width;\n            leftIndex++;\n        }\n\n        while (\n            rightIndex >= 0\n            && (token = tokens[rightIndex], token.textAlign === 'right')\n        ) {\n            placeToken(hostEl, ctx, token, style, lineHeight, lineTop, lineXRight, 'right');\n            usedWidth -= token.width;\n            lineXRight -= token.width;\n            rightIndex--;\n        }\n\n        // The other tokens are placed as textAlign 'center' if there is enough space.\n        lineXLeft += (contentWidth - (lineXLeft - xLeft) - (xRight - lineXRight) - usedWidth) / 2;\n        while (leftIndex <= rightIndex) {\n            token = tokens[leftIndex];\n            // Consider width specified by user, use 'center' rather than 'left'.\n            placeToken(hostEl, ctx, token, style, lineHeight, lineTop, lineXLeft + token.width / 2, 'center');\n            lineXLeft += token.width;\n            leftIndex++;\n        }\n\n        lineTop += lineHeight;\n    }\n}\n\nfunction applyTextRotation(ctx, style, rect, x, y) {\n    // textRotation only apply in RectText.\n    if (rect && style.textRotation) {\n        var origin = style.textOrigin;\n        if (origin === 'center') {\n            x = rect.width / 2 + rect.x;\n            y = rect.height / 2 + rect.y;\n        }\n        else if (origin) {\n            x = origin[0] + rect.x;\n            y = origin[1] + rect.y;\n        }\n\n        ctx.translate(x, y);\n        // Positive: anticlockwise\n        ctx.rotate(-style.textRotation);\n        ctx.translate(-x, -y);\n    }\n}\n\nfunction placeToken(hostEl, ctx, token, style, lineHeight, lineTop, x, textAlign) {\n    var tokenStyle = style.rich[token.styleName] || {};\n    tokenStyle.text = token.text;\n\n    // 'ctx.textBaseline' is always set as 'middle', for sake of\n    // the bias of \"Microsoft YaHei\".\n    var textVerticalAlign = token.textVerticalAlign;\n    var y = lineTop + lineHeight / 2;\n    if (textVerticalAlign === 'top') {\n        y = lineTop + token.height / 2;\n    }\n    else if (textVerticalAlign === 'bottom') {\n        y = lineTop + lineHeight - token.height / 2;\n    }\n\n    !token.isLineHolder && needDrawBackground(tokenStyle) && drawBackground(\n        hostEl,\n        ctx,\n        tokenStyle,\n        textAlign === 'right'\n            ? x - token.width\n            : textAlign === 'center'\n            ? x - token.width / 2\n            : x,\n        y - token.height / 2,\n        token.width,\n        token.height\n    );\n\n    var textPadding = token.textPadding;\n    if (textPadding) {\n        x = getTextXForPadding(x, textAlign, textPadding);\n        y -= token.height / 2 - textPadding[2] - token.textHeight / 2;\n    }\n\n    setCtx(ctx, 'shadowBlur', retrieve3(tokenStyle.textShadowBlur, style.textShadowBlur, 0));\n    setCtx(ctx, 'shadowColor', tokenStyle.textShadowColor || style.textShadowColor || 'transparent');\n    setCtx(ctx, 'shadowOffsetX', retrieve3(tokenStyle.textShadowOffsetX, style.textShadowOffsetX, 0));\n    setCtx(ctx, 'shadowOffsetY', retrieve3(tokenStyle.textShadowOffsetY, style.textShadowOffsetY, 0));\n\n    setCtx(ctx, 'textAlign', textAlign);\n    // Force baseline to be \"middle\". Otherwise, if using \"top\", the\n    // text will offset downward a little bit in font \"Microsoft YaHei\".\n    setCtx(ctx, 'textBaseline', 'middle');\n\n    setCtx(ctx, 'font', token.font || DEFAULT_FONT);\n\n    var textStroke = getStroke(tokenStyle.textStroke || style.textStroke, textStrokeWidth);\n    var textFill = getFill(tokenStyle.textFill || style.textFill);\n    var textStrokeWidth = retrieve2(tokenStyle.textStrokeWidth, style.textStrokeWidth);\n\n    // Fill after stroke so the outline will not cover the main part.\n    if (textStroke) {\n        setCtx(ctx, 'lineWidth', textStrokeWidth);\n        setCtx(ctx, 'strokeStyle', textStroke);\n        ctx.strokeText(token.text, x, y);\n    }\n    if (textFill) {\n        setCtx(ctx, 'fillStyle', textFill);\n        ctx.fillText(token.text, x, y);\n    }\n}\n\nfunction needDrawBackground(style) {\n    return !!(\n        style.textBackgroundColor\n        || (style.textBorderWidth && style.textBorderColor)\n    );\n}\n\n// style: {textBackgroundColor, textBorderWidth, textBorderColor, textBorderRadius, text}\n// shape: {x, y, width, height}\nfunction drawBackground(hostEl, ctx, style, x, y, width, height) {\n    var textBackgroundColor = style.textBackgroundColor;\n    var textBorderWidth = style.textBorderWidth;\n    var textBorderColor = style.textBorderColor;\n    var isPlainBg = isString(textBackgroundColor);\n\n    setCtx(ctx, 'shadowBlur', style.textBoxShadowBlur || 0);\n    setCtx(ctx, 'shadowColor', style.textBoxShadowColor || 'transparent');\n    setCtx(ctx, 'shadowOffsetX', style.textBoxShadowOffsetX || 0);\n    setCtx(ctx, 'shadowOffsetY', style.textBoxShadowOffsetY || 0);\n\n    if (isPlainBg || (textBorderWidth && textBorderColor)) {\n        ctx.beginPath();\n        var textBorderRadius = style.textBorderRadius;\n        if (!textBorderRadius) {\n            ctx.rect(x, y, width, height);\n        }\n        else {\n            buildPath(ctx, {\n                x: x, y: y, width: width, height: height, r: textBorderRadius\n            });\n        }\n        ctx.closePath();\n    }\n\n    if (isPlainBg) {\n        setCtx(ctx, 'fillStyle', textBackgroundColor);\n\n        if (style.fillOpacity != null) {\n            var originalGlobalAlpha = ctx.globalAlpha;\n            ctx.globalAlpha = style.fillOpacity * style.opacity;\n            ctx.fill();\n            ctx.globalAlpha = originalGlobalAlpha;\n        }\n        else {\n            ctx.fill();\n        }\n    }\n    else if (isObject$1(textBackgroundColor)) {\n        var image = textBackgroundColor.image;\n\n        image = createOrUpdateImage(\n            image, null, hostEl, onBgImageLoaded, textBackgroundColor\n        );\n        if (image && isImageReady(image)) {\n            ctx.drawImage(image, x, y, width, height);\n        }\n    }\n\n    if (textBorderWidth && textBorderColor) {\n        setCtx(ctx, 'lineWidth', textBorderWidth);\n        setCtx(ctx, 'strokeStyle', textBorderColor);\n\n        if (style.strokeOpacity != null) {\n            var originalGlobalAlpha = ctx.globalAlpha;\n            ctx.globalAlpha = style.strokeOpacity * style.opacity;\n            ctx.stroke();\n            ctx.globalAlpha = originalGlobalAlpha;\n        }\n        else {\n            ctx.stroke();\n        }\n    }\n}\n\nfunction onBgImageLoaded(image, textBackgroundColor) {\n    // Replace image, so that `contain/text.js#parseRichText`\n    // will get correct result in next tick.\n    textBackgroundColor.image = image;\n}\n\nfunction getBoxPosition(out, hostEl, style, rect) {\n    var baseX = style.x || 0;\n    var baseY = style.y || 0;\n    var textAlign = style.textAlign;\n    var textVerticalAlign = style.textVerticalAlign;\n\n    // Text position represented by coord\n    if (rect) {\n        var textPosition = style.textPosition;\n        if (textPosition instanceof Array) {\n            // Percent\n            baseX = rect.x + parsePercent(textPosition[0], rect.width);\n            baseY = rect.y + parsePercent(textPosition[1], rect.height);\n        }\n        else {\n            var res = (hostEl && hostEl.calculateTextPosition)\n                ? hostEl.calculateTextPosition(_tmpTextPositionResult, style, rect)\n                : calculateTextPosition(_tmpTextPositionResult, style, rect);\n            baseX = res.x;\n            baseY = res.y;\n            // Default align and baseline when has textPosition\n            textAlign = textAlign || res.textAlign;\n            textVerticalAlign = textVerticalAlign || res.textVerticalAlign;\n        }\n\n        // textOffset is only support in RectText, otherwise\n        // we have to adjust boundingRect for textOffset.\n        var textOffset = style.textOffset;\n        if (textOffset) {\n            baseX += textOffset[0];\n            baseY += textOffset[1];\n        }\n    }\n\n    out = out || {};\n    out.baseX = baseX;\n    out.baseY = baseY;\n    out.textAlign = textAlign;\n    out.textVerticalAlign = textVerticalAlign;\n\n    return out;\n}\n\n\nfunction setCtx(ctx, prop, value) {\n    ctx[prop] = fixShadow(ctx, prop, value);\n    return ctx[prop];\n}\n\n/**\n * @param {string} [stroke] If specified, do not check style.textStroke.\n * @param {string} [lineWidth] If specified, do not check style.textStroke.\n * @param {number} style\n */\nfunction getStroke(stroke, lineWidth) {\n    return (stroke == null || lineWidth <= 0 || stroke === 'transparent' || stroke === 'none')\n        ? null\n        // TODO pattern and gradient?\n        : (stroke.image || stroke.colorStops)\n        ? '#000'\n        : stroke;\n}\n\nfunction getFill(fill) {\n    return (fill == null || fill === 'none')\n        ? null\n        // TODO pattern and gradient?\n        : (fill.image || fill.colorStops)\n        ? '#000'\n        : fill;\n}\n\nfunction parsePercent(value, maxValue) {\n    if (typeof value === 'string') {\n        if (value.lastIndexOf('%') >= 0) {\n            return parseFloat(value) / 100 * maxValue;\n        }\n        return parseFloat(value);\n    }\n    return value;\n}\n\nfunction getTextXForPadding(x, textAlign, textPadding) {\n    return textAlign === 'right'\n        ? (x - textPadding[1])\n        : textAlign === 'center'\n        ? (x + textPadding[3] / 2 - textPadding[1] / 2)\n        : (x + textPadding[3]);\n}\n\n/**\n * @param {string} text\n * @param {module:zrender/Style} style\n * @return {boolean}\n */\nfunction needDrawText(text, style) {\n    return text != null\n        && (text\n            || style.textBackgroundColor\n            || (style.textBorderWidth && style.textBorderColor)\n            || style.textPadding\n        );\n}\n\n/**\n * Mixin for drawing text in a element bounding rect\n * @module zrender/mixin/RectText\n */\n\nvar tmpRect$1 = new BoundingRect();\n\nvar RectText = function () {};\n\nRectText.prototype = {\n\n    constructor: RectText,\n\n    /**\n     * Draw text in a rect with specified position.\n     * @param  {CanvasRenderingContext2D} ctx\n     * @param  {Object} rect Displayable rect\n     */\n    drawRectText: function (ctx, rect) {\n        var style = this.style;\n\n        rect = style.textRect || rect;\n\n        // Optimize, avoid normalize every time.\n        this.__dirty && normalizeTextStyle(style, true);\n\n        var text = style.text;\n\n        // Convert to string\n        text != null && (text += '');\n\n        if (!needDrawText(text, style)) {\n            return;\n        }\n\n        // FIXME\n        // Do not provide prevEl to `textHelper.renderText` for ctx prop cache,\n        // but use `ctx.save()` and `ctx.restore()`. Because the cache for rect\n        // text propably break the cache for its host elements.\n        ctx.save();\n\n        // Transform rect to view space\n        var transform = this.transform;\n        if (!style.transformText) {\n            if (transform) {\n                tmpRect$1.copy(rect);\n                tmpRect$1.applyTransform(transform);\n                rect = tmpRect$1;\n            }\n        }\n        else {\n            this.setTransform(ctx);\n        }\n\n        // transformText and textRotation can not be used at the same time.\n        renderText(this, ctx, text, style, rect, WILL_BE_RESTORED);\n\n        ctx.restore();\n    }\n};\n\n/**\n * 可绘制的图形基类\n * Base class of all displayable graphic objects\n * @module zrender/graphic/Displayable\n */\n\n\n/**\n * @alias module:zrender/graphic/Displayable\n * @extends module:zrender/Element\n * @extends module:zrender/graphic/mixin/RectText\n */\nfunction Displayable(opts) {\n\n    opts = opts || {};\n\n    Element.call(this, opts);\n\n    // Extend properties\n    for (var name in opts) {\n        if (\n            opts.hasOwnProperty(name)\n                && name !== 'style'\n        ) {\n            this[name] = opts[name];\n        }\n    }\n\n    /**\n     * @type {module:zrender/graphic/Style}\n     */\n    this.style = new Style(opts.style, this);\n\n    this._rect = null;\n    // Shapes for cascade clipping.\n    // Can only be `null`/`undefined` or an non-empty array, MUST NOT be an empty array.\n    // because it is easy to only using null to check whether clipPaths changed.\n    this.__clipPaths = null;\n\n    // FIXME Stateful must be mixined after style is setted\n    // Stateful.call(this, opts);\n}\n\nDisplayable.prototype = {\n\n    constructor: Displayable,\n\n    type: 'displayable',\n\n    /**\n     * Displayable 是否为脏，Painter 中会根据该标记判断是否需要是否需要重新绘制\n     * Dirty flag. From which painter will determine if this displayable object needs brush\n     * @name module:zrender/graphic/Displayable#__dirty\n     * @type {boolean}\n     */\n    __dirty: true,\n\n    /**\n     * 图形是否可见，为true时不绘制图形，但是仍能触发鼠标事件\n     * If ignore drawing of the displayable object. Mouse event will still be triggered\n     * @name module:/zrender/graphic/Displayable#invisible\n     * @type {boolean}\n     * @default false\n     */\n    invisible: false,\n\n    /**\n     * @name module:/zrender/graphic/Displayable#z\n     * @type {number}\n     * @default 0\n     */\n    z: 0,\n\n    /**\n     * @name module:/zrender/graphic/Displayable#z\n     * @type {number}\n     * @default 0\n     */\n    z2: 0,\n\n    /**\n     * z层level，决定绘画在哪层canvas中\n     * @name module:/zrender/graphic/Displayable#zlevel\n     * @type {number}\n     * @default 0\n     */\n    zlevel: 0,\n\n    /**\n     * 是否可拖拽\n     * @name module:/zrender/graphic/Displayable#draggable\n     * @type {boolean}\n     * @default false\n     */\n    draggable: false,\n\n    /**\n     * 是否正在拖拽\n     * @name module:/zrender/graphic/Displayable#draggable\n     * @type {boolean}\n     * @default false\n     */\n    dragging: false,\n\n    /**\n     * 是否相应鼠标事件\n     * @name module:/zrender/graphic/Displayable#silent\n     * @type {boolean}\n     * @default false\n     */\n    silent: false,\n\n    /**\n     * If enable culling\n     * @type {boolean}\n     * @default false\n     */\n    culling: false,\n\n    /**\n     * Mouse cursor when hovered\n     * @name module:/zrender/graphic/Displayable#cursor\n     * @type {string}\n     */\n    cursor: 'pointer',\n\n    /**\n     * If hover area is bounding rect\n     * @name module:/zrender/graphic/Displayable#rectHover\n     * @type {string}\n     */\n    rectHover: false,\n\n    /**\n     * Render the element progressively when the value >= 0,\n     * usefull for large data.\n     * @type {boolean}\n     */\n    progressive: false,\n\n    /**\n     * @type {boolean}\n     */\n    incremental: false,\n    /**\n     * Scale ratio for global scale.\n     * @type {boolean}\n     */\n    globalScaleRatio: 1,\n\n    beforeBrush: function (ctx) {},\n\n    afterBrush: function (ctx) {},\n\n    /**\n     * 图形绘制方法\n     * @param {CanvasRenderingContext2D} ctx\n     */\n    // Interface\n    brush: function (ctx, prevEl) {},\n\n    /**\n     * 获取最小包围盒\n     * @return {module:zrender/core/BoundingRect}\n     */\n    // Interface\n    getBoundingRect: function () {},\n\n    /**\n     * 判断坐标 x, y 是否在图形上\n     * If displayable element contain coord x, y\n     * @param  {number} x\n     * @param  {number} y\n     * @return {boolean}\n     */\n    contain: function (x, y) {\n        return this.rectContain(x, y);\n    },\n\n    /**\n     * @param  {Function} cb\n     * @param  {}   context\n     */\n    traverse: function (cb, context) {\n        cb.call(context, this);\n    },\n\n    /**\n     * 判断坐标 x, y 是否在图形的包围盒上\n     * If bounding rect of element contain coord x, y\n     * @param  {number} x\n     * @param  {number} y\n     * @return {boolean}\n     */\n    rectContain: function (x, y) {\n        var coord = this.transformCoordToLocal(x, y);\n        var rect = this.getBoundingRect();\n        return rect.contain(coord[0], coord[1]);\n    },\n\n    /**\n     * 标记图形元素为脏，并且在下一帧重绘\n     * Mark displayable element dirty and refresh next frame\n     */\n    dirty: function () {\n        this.__dirty = this.__dirtyText = true;\n\n        this._rect = null;\n\n        this.__zr && this.__zr.refresh();\n    },\n\n    /**\n     * 图形是否会触发事件\n     * If displayable object binded any event\n     * @return {boolean}\n     */\n    // TODO, 通过 bind 绑定的事件\n    // isSilent: function () {\n    //     return !(\n    //         this.hoverable || this.draggable\n    //         || this.onmousemove || this.onmouseover || this.onmouseout\n    //         || this.onmousedown || this.onmouseup || this.onclick\n    //         || this.ondragenter || this.ondragover || this.ondragleave\n    //         || this.ondrop\n    //     );\n    // },\n    /**\n     * Alias for animate('style')\n     * @param {boolean} loop\n     */\n    animateStyle: function (loop) {\n        return this.animate('style', loop);\n    },\n\n    attrKV: function (key, value) {\n        if (key !== 'style') {\n            Element.prototype.attrKV.call(this, key, value);\n        }\n        else {\n            this.style.set(value);\n        }\n    },\n\n    /**\n     * @param {Object|string} key\n     * @param {*} value\n     */\n    setStyle: function (key, value) {\n        this.style.set(key, value);\n        this.dirty(false);\n        return this;\n    },\n\n    /**\n     * Use given style object\n     * @param  {Object} obj\n     */\n    useStyle: function (obj) {\n        this.style = new Style(obj, this);\n        this.dirty(false);\n        return this;\n    },\n\n    /**\n     * The string value of `textPosition` needs to be calculated to a real postion.\n     * For example, `'inside'` is calculated to `[rect.width/2, rect.height/2]`\n     * by default. See `contain/text.js#calculateTextPosition` for more details.\n     * But some coutom shapes like \"pin\", \"flag\" have center that is not exactly\n     * `[width/2, height/2]`. So we provide this hook to customize the calculation\n     * for those shapes. It will be called if the `style.textPosition` is a string.\n     * @param {Obejct} [out] Prepared out object. If not provided, this method should\n     *        be responsible for creating one.\n     * @param {module:zrender/graphic/Style} style\n     * @param {Object} rect {x, y, width, height}\n     * @return {Obejct} out The same as the input out.\n     *         {\n     *             x: number. mandatory.\n     *             y: number. mandatory.\n     *             textAlign: string. optional. use style.textAlign by default.\n     *             textVerticalAlign: string. optional. use style.textVerticalAlign by default.\n     *         }\n     */\n    calculateTextPosition: null\n};\n\ninherits(Displayable, Element);\n\nmixin(Displayable, RectText);\n\n/**\n * @alias zrender/graphic/Image\n * @extends module:zrender/graphic/Displayable\n * @constructor\n * @param {Object} opts\n */\nfunction ZImage(opts) {\n    Displayable.call(this, opts);\n}\n\nZImage.prototype = {\n\n    constructor: ZImage,\n\n    type: 'image',\n\n    brush: function (ctx, prevEl) {\n        var style = this.style;\n        var src = style.image;\n\n        // Must bind each time\n        style.bind(ctx, this, prevEl);\n\n        var image = this._image = createOrUpdateImage(\n            src,\n            this._image,\n            this,\n            this.onload\n        );\n\n        if (!image || !isImageReady(image)) {\n            return;\n        }\n\n        // 图片已经加载完成\n        // if (image.nodeName.toUpperCase() == 'IMG') {\n        //     if (!image.complete) {\n        //         return;\n        //     }\n        // }\n        // Else is canvas\n\n        var x = style.x || 0;\n        var y = style.y || 0;\n        var width = style.width;\n        var height = style.height;\n        var aspect = image.width / image.height;\n        if (width == null && height != null) {\n            // Keep image/height ratio\n            width = height * aspect;\n        }\n        else if (height == null && width != null) {\n            height = width / aspect;\n        }\n        else if (width == null && height == null) {\n            width = image.width;\n            height = image.height;\n        }\n\n        // 设置transform\n        this.setTransform(ctx);\n\n        if (style.sWidth && style.sHeight) {\n            var sx = style.sx || 0;\n            var sy = style.sy || 0;\n            ctx.drawImage(\n                image,\n                sx, sy, style.sWidth, style.sHeight,\n                x, y, width, height\n            );\n        }\n        else if (style.sx && style.sy) {\n            var sx = style.sx;\n            var sy = style.sy;\n            var sWidth = width - sx;\n            var sHeight = height - sy;\n            ctx.drawImage(\n                image,\n                sx, sy, sWidth, sHeight,\n                x, y, width, height\n            );\n        }\n        else {\n            ctx.drawImage(image, x, y, width, height);\n        }\n\n        // Draw rect text\n        if (style.text != null) {\n            // Only restore transform when needs draw text.\n            this.restoreTransform(ctx);\n            this.drawRectText(ctx, this.getBoundingRect());\n        }\n    },\n\n    getBoundingRect: function () {\n        var style = this.style;\n        if (!this._rect) {\n            this._rect = new BoundingRect(\n                style.x || 0, style.y || 0, style.width || 0, style.height || 0\n            );\n        }\n        return this._rect;\n    }\n};\n\ninherits(ZImage, Displayable);\n\nvar HOVER_LAYER_ZLEVEL = 1e5;\nvar CANVAS_ZLEVEL = 314159;\n\nvar EL_AFTER_INCREMENTAL_INC = 0.01;\nvar INCREMENTAL_INC = 0.001;\n\nfunction parseInt10(val) {\n    return parseInt(val, 10);\n}\n\nfunction isLayerValid(layer) {\n    if (!layer) {\n        return false;\n    }\n\n    if (layer.__builtin__) {\n        return true;\n    }\n\n    if (typeof (layer.resize) !== 'function'\n        || typeof (layer.refresh) !== 'function'\n    ) {\n        return false;\n    }\n\n    return true;\n}\n\nvar tmpRect = new BoundingRect(0, 0, 0, 0);\nvar viewRect = new BoundingRect(0, 0, 0, 0);\nfunction isDisplayableCulled(el, width, height) {\n    tmpRect.copy(el.getBoundingRect());\n    if (el.transform) {\n        tmpRect.applyTransform(el.transform);\n    }\n    viewRect.width = width;\n    viewRect.height = height;\n    return !tmpRect.intersect(viewRect);\n}\n\nfunction isClipPathChanged(clipPaths, prevClipPaths) {\n    // displayable.__clipPaths can only be `null`/`undefined` or an non-empty array.\n    if (clipPaths === prevClipPaths) {\n        return false;\n    }\n    if (!clipPaths || !prevClipPaths || (clipPaths.length !== prevClipPaths.length)) {\n        return true;\n    }\n    for (var i = 0; i < clipPaths.length; i++) {\n        if (clipPaths[i] !== prevClipPaths[i]) {\n            return true;\n        }\n    }\n    return false;\n}\n\nfunction doClip(clipPaths, ctx) {\n    for (var i = 0; i < clipPaths.length; i++) {\n        var clipPath = clipPaths[i];\n\n        clipPath.setTransform(ctx);\n        ctx.beginPath();\n        clipPath.buildPath(ctx, clipPath.shape);\n        ctx.clip();\n        // Transform back\n        clipPath.restoreTransform(ctx);\n    }\n}\n\nfunction createRoot(width, height) {\n    var domRoot = document.createElement('div');\n\n    // domRoot.onselectstart = returnFalse; // 避免页面选中的尴尬\n    domRoot.style.cssText = [\n        'position:relative',\n        'overflow:hidden',\n        'width:' + width + 'px',\n        'height:' + height + 'px',\n        'padding:0',\n        'margin:0',\n        'border-width:0'\n    ].join(';') + ';';\n\n    return domRoot;\n}\n\n\n/**\n * @alias module:zrender/Painter\n * @constructor\n * @param {HTMLElement} root 绘图容器\n * @param {module:zrender/Storage} storage\n * @param {Object} opts\n */\nvar Painter = function (root, storage, opts) {\n\n    this.type = 'canvas';\n\n    // In node environment using node-canvas\n    var singleCanvas = !root.nodeName // In node ?\n        || root.nodeName.toUpperCase() === 'CANVAS';\n\n    this._opts = opts = extend({}, opts || {});\n\n    /**\n     * @type {number}\n     */\n    this.dpr = opts.devicePixelRatio || devicePixelRatio;\n    /**\n     * @type {boolean}\n     * @private\n     */\n    this._singleCanvas = singleCanvas;\n    /**\n     * 绘图容器\n     * @type {HTMLElement}\n     */\n    this.root = root;\n\n    var rootStyle = root.style;\n\n    if (rootStyle) {\n        rootStyle['-webkit-tap-highlight-color'] = 'transparent';\n        rootStyle['-webkit-user-select'] =\n        rootStyle['user-select'] =\n        rootStyle['-webkit-touch-callout'] = 'none';\n\n        root.innerHTML = '';\n    }\n\n    /**\n     * @type {module:zrender/Storage}\n     */\n    this.storage = storage;\n\n    /**\n     * @type {Array.<number>}\n     * @private\n     */\n    var zlevelList = this._zlevelList = [];\n\n    /**\n     * @type {Object.<string, module:zrender/Layer>}\n     * @private\n     */\n    var layers = this._layers = {};\n\n    /**\n     * @type {Object.<string, Object>}\n     * @private\n     */\n    this._layerConfig = {};\n\n    /**\n     * zrender will do compositing when root is a canvas and have multiple zlevels.\n     */\n    this._needsManuallyCompositing = false;\n\n    if (!singleCanvas) {\n        this._width = this._getSize(0);\n        this._height = this._getSize(1);\n\n        var domRoot = this._domRoot = createRoot(\n            this._width, this._height\n        );\n        root.appendChild(domRoot);\n    }\n    else {\n        var width = root.width;\n        var height = root.height;\n\n        if (opts.width != null) {\n            width = opts.width;\n        }\n        if (opts.height != null) {\n            height = opts.height;\n        }\n        this.dpr = opts.devicePixelRatio || 1;\n\n        // Use canvas width and height directly\n        root.width = width * this.dpr;\n        root.height = height * this.dpr;\n\n        this._width = width;\n        this._height = height;\n\n        // Create layer if only one given canvas\n        // Device can be specified to create a high dpi image.\n        var mainLayer = new Layer(root, this, this.dpr);\n        mainLayer.__builtin__ = true;\n        mainLayer.initContext();\n        // FIXME Use canvas width and height\n        // mainLayer.resize(width, height);\n        layers[CANVAS_ZLEVEL] = mainLayer;\n        mainLayer.zlevel = CANVAS_ZLEVEL;\n        // Not use common zlevel.\n        zlevelList.push(CANVAS_ZLEVEL);\n\n        this._domRoot = root;\n    }\n\n    /**\n     * @type {module:zrender/Layer}\n     * @private\n     */\n    this._hoverlayer = null;\n\n    this._hoverElements = [];\n};\n\nPainter.prototype = {\n\n    constructor: Painter,\n\n    getType: function () {\n        return 'canvas';\n    },\n\n    /**\n     * If painter use a single canvas\n     * @return {boolean}\n     */\n    isSingleCanvas: function () {\n        return this._singleCanvas;\n    },\n    /**\n     * @return {HTMLDivElement}\n     */\n    getViewportRoot: function () {\n        return this._domRoot;\n    },\n\n    getViewportRootOffset: function () {\n        var viewportRoot = this.getViewportRoot();\n        if (viewportRoot) {\n            return {\n                offsetLeft: viewportRoot.offsetLeft || 0,\n                offsetTop: viewportRoot.offsetTop || 0\n            };\n        }\n    },\n\n    /**\n     * 刷新\n     * @param {boolean} [paintAll=false] 强制绘制所有displayable\n     */\n    refresh: function (paintAll) {\n\n        var list = this.storage.getDisplayList(true);\n\n        var zlevelList = this._zlevelList;\n\n        this._redrawId = Math.random();\n\n        this._paintList(list, paintAll, this._redrawId);\n\n        // Paint custum layers\n        for (var i = 0; i < zlevelList.length; i++) {\n            var z = zlevelList[i];\n            var layer = this._layers[z];\n            if (!layer.__builtin__ && layer.refresh) {\n                var clearColor = i === 0 ? this._backgroundColor : null;\n                layer.refresh(clearColor);\n            }\n        }\n\n        this.refreshHover();\n\n        return this;\n    },\n\n    addHover: function (el, hoverStyle) {\n        if (el.__hoverMir) {\n            return;\n        }\n        var elMirror = new el.constructor({\n            style: el.style,\n            shape: el.shape,\n            z: el.z,\n            z2: el.z2,\n            silent: el.silent\n        });\n        elMirror.__from = el;\n        el.__hoverMir = elMirror;\n        hoverStyle && elMirror.setStyle(hoverStyle);\n        this._hoverElements.push(elMirror);\n\n        return elMirror;\n    },\n\n    removeHover: function (el) {\n        var elMirror = el.__hoverMir;\n        var hoverElements = this._hoverElements;\n        var idx = indexOf(hoverElements, elMirror);\n        if (idx >= 0) {\n            hoverElements.splice(idx, 1);\n        }\n        el.__hoverMir = null;\n    },\n\n    clearHover: function (el) {\n        var hoverElements = this._hoverElements;\n        for (var i = 0; i < hoverElements.length; i++) {\n            var from = hoverElements[i].__from;\n            if (from) {\n                from.__hoverMir = null;\n            }\n        }\n        hoverElements.length = 0;\n    },\n\n    refreshHover: function () {\n        var hoverElements = this._hoverElements;\n        var len = hoverElements.length;\n        var hoverLayer = this._hoverlayer;\n        hoverLayer && hoverLayer.clear();\n\n        if (!len) {\n            return;\n        }\n        sort(hoverElements, this.storage.displayableSortFunc);\n\n        // Use a extream large zlevel\n        // FIXME?\n        if (!hoverLayer) {\n            hoverLayer = this._hoverlayer = this.getLayer(HOVER_LAYER_ZLEVEL);\n        }\n\n        var scope = {};\n        hoverLayer.ctx.save();\n        for (var i = 0; i < len;) {\n            var el = hoverElements[i];\n            var originalEl = el.__from;\n            // Original el is removed\n            // PENDING\n            if (!(originalEl && originalEl.__zr)) {\n                hoverElements.splice(i, 1);\n                originalEl.__hoverMir = null;\n                len--;\n                continue;\n            }\n            i++;\n\n            // Use transform\n            // FIXME style and shape ?\n            if (!originalEl.invisible) {\n                el.transform = originalEl.transform;\n                el.invTransform = originalEl.invTransform;\n                el.__clipPaths = originalEl.__clipPaths;\n                // el.\n                this._doPaintEl(el, hoverLayer, true, scope);\n            }\n        }\n\n        hoverLayer.ctx.restore();\n    },\n\n    getHoverLayer: function () {\n        return this.getLayer(HOVER_LAYER_ZLEVEL);\n    },\n\n    _paintList: function (list, paintAll, redrawId) {\n        if (this._redrawId !== redrawId) {\n            return;\n        }\n\n        paintAll = paintAll || false;\n\n        this._updateLayerStatus(list);\n\n        var finished = this._doPaintList(list, paintAll);\n\n        if (this._needsManuallyCompositing) {\n            this._compositeManually();\n        }\n\n        if (!finished) {\n            var self = this;\n            requestAnimationFrame(function () {\n                self._paintList(list, paintAll, redrawId);\n            });\n        }\n    },\n\n    _compositeManually: function () {\n        var ctx = this.getLayer(CANVAS_ZLEVEL).ctx;\n        var width = this._domRoot.width;\n        var height = this._domRoot.height;\n        ctx.clearRect(0, 0, width, height);\n        // PENDING, If only builtin layer?\n        this.eachBuiltinLayer(function (layer) {\n            if (layer.virtual) {\n                ctx.drawImage(layer.dom, 0, 0, width, height);\n            }\n        });\n    },\n\n    _doPaintList: function (list, paintAll) {\n        var layerList = [];\n        for (var zi = 0; zi < this._zlevelList.length; zi++) {\n            var zlevel = this._zlevelList[zi];\n            var layer = this._layers[zlevel];\n            if (layer.__builtin__\n                && layer !== this._hoverlayer\n                && (layer.__dirty || paintAll)\n            ) {\n                layerList.push(layer);\n            }\n        }\n\n        var finished = true;\n\n        for (var k = 0; k < layerList.length; k++) {\n            var layer = layerList[k];\n            var ctx = layer.ctx;\n            var scope = {};\n            ctx.save();\n\n            var start = paintAll ? layer.__startIndex : layer.__drawIndex;\n\n            var useTimer = !paintAll && layer.incremental && Date.now;\n            var startTime = useTimer && Date.now();\n\n            var clearColor = layer.zlevel === this._zlevelList[0]\n                ? this._backgroundColor : null;\n            // All elements in this layer are cleared.\n            if (layer.__startIndex === layer.__endIndex) {\n                layer.clear(false, clearColor);\n            }\n            else if (start === layer.__startIndex) {\n                var firstEl = list[start];\n                if (!firstEl.incremental || !firstEl.notClear || paintAll) {\n                    layer.clear(false, clearColor);\n                }\n            }\n            if (start === -1) {\n                console.error('For some unknown reason. drawIndex is -1');\n                start = layer.__startIndex;\n            }\n            for (var i = start; i < layer.__endIndex; i++) {\n                var el = list[i];\n                this._doPaintEl(el, layer, paintAll, scope);\n                el.__dirty = el.__dirtyText = false;\n\n                if (useTimer) {\n                    // Date.now can be executed in 13,025,305 ops/second.\n                    var dTime = Date.now() - startTime;\n                    // Give 15 millisecond to draw.\n                    // The rest elements will be drawn in the next frame.\n                    if (dTime > 15) {\n                        break;\n                    }\n                }\n            }\n\n            layer.__drawIndex = i;\n\n            if (layer.__drawIndex < layer.__endIndex) {\n                finished = false;\n            }\n\n            if (scope.prevElClipPaths) {\n                // Needs restore the state. If last drawn element is in the clipping area.\n                ctx.restore();\n            }\n\n            ctx.restore();\n        }\n\n        if (env$1.wxa) {\n            // Flush for weixin application\n            each$1(this._layers, function (layer) {\n                if (layer && layer.ctx && layer.ctx.draw) {\n                    layer.ctx.draw();\n                }\n            });\n        }\n\n        return finished;\n    },\n\n    _doPaintEl: function (el, currentLayer, forcePaint, scope) {\n        var ctx = currentLayer.ctx;\n        var m = el.transform;\n        if (\n            (currentLayer.__dirty || forcePaint)\n            // Ignore invisible element\n            && !el.invisible\n            // Ignore transparent element\n            && el.style.opacity !== 0\n            // Ignore scale 0 element, in some environment like node-canvas\n            // Draw a scale 0 element can cause all following draw wrong\n            // And setTransform with scale 0 will cause set back transform failed.\n            && !(m && !m[0] && !m[3])\n            // Ignore culled element\n            && !(el.culling && isDisplayableCulled(el, this._width, this._height))\n        ) {\n\n            var clipPaths = el.__clipPaths;\n            var prevElClipPaths = scope.prevElClipPaths;\n\n            // Optimize when clipping on group with several elements\n            if (!prevElClipPaths || isClipPathChanged(clipPaths, prevElClipPaths)) {\n                // If has previous clipping state, restore from it\n                if (prevElClipPaths) {\n                    ctx.restore();\n                    scope.prevElClipPaths = null;\n                    // Reset prevEl since context has been restored\n                    scope.prevEl = null;\n                }\n                // New clipping state\n                if (clipPaths) {\n                    ctx.save();\n                    doClip(clipPaths, ctx);\n                    scope.prevElClipPaths = clipPaths;\n                }\n            }\n            el.beforeBrush && el.beforeBrush(ctx);\n\n            el.brush(ctx, scope.prevEl || null);\n            scope.prevEl = el;\n\n            el.afterBrush && el.afterBrush(ctx);\n        }\n    },\n\n    /**\n     * 获取 zlevel 所在层，如果不存在则会创建一个新的层\n     * @param {number} zlevel\n     * @param {boolean} virtual Virtual layer will not be inserted into dom.\n     * @return {module:zrender/Layer}\n     */\n    getLayer: function (zlevel, virtual) {\n        if (this._singleCanvas && !this._needsManuallyCompositing) {\n            zlevel = CANVAS_ZLEVEL;\n        }\n        var layer = this._layers[zlevel];\n        if (!layer) {\n            // Create a new layer\n            layer = new Layer('zr_' + zlevel, this, this.dpr);\n            layer.zlevel = zlevel;\n            layer.__builtin__ = true;\n\n            if (this._layerConfig[zlevel]) {\n                merge(layer, this._layerConfig[zlevel], true);\n            }\n\n            if (virtual) {\n                layer.virtual = virtual;\n            }\n\n            this.insertLayer(zlevel, layer);\n\n            // Context is created after dom inserted to document\n            // Or excanvas will get 0px clientWidth and clientHeight\n            layer.initContext();\n        }\n\n        return layer;\n    },\n\n    insertLayer: function (zlevel, layer) {\n\n        var layersMap = this._layers;\n        var zlevelList = this._zlevelList;\n        var len = zlevelList.length;\n        var prevLayer = null;\n        var i = -1;\n        var domRoot = this._domRoot;\n\n        if (layersMap[zlevel]) {\n            zrLog('ZLevel ' + zlevel + ' has been used already');\n            return;\n        }\n        // Check if is a valid layer\n        if (!isLayerValid(layer)) {\n            zrLog('Layer of zlevel ' + zlevel + ' is not valid');\n            return;\n        }\n\n        if (len > 0 && zlevel > zlevelList[0]) {\n            for (i = 0; i < len - 1; i++) {\n                if (\n                    zlevelList[i] < zlevel\n                    && zlevelList[i + 1] > zlevel\n                ) {\n                    break;\n                }\n            }\n            prevLayer = layersMap[zlevelList[i]];\n        }\n        zlevelList.splice(i + 1, 0, zlevel);\n\n        layersMap[zlevel] = layer;\n\n        // Vitual layer will not directly show on the screen.\n        // (It can be a WebGL layer and assigned to a ZImage element)\n        // But it still under management of zrender.\n        if (!layer.virtual) {\n            if (prevLayer) {\n                var prevDom = prevLayer.dom;\n                if (prevDom.nextSibling) {\n                    domRoot.insertBefore(\n                        layer.dom,\n                        prevDom.nextSibling\n                    );\n                }\n                else {\n                    domRoot.appendChild(layer.dom);\n                }\n            }\n            else {\n                if (domRoot.firstChild) {\n                    domRoot.insertBefore(layer.dom, domRoot.firstChild);\n                }\n                else {\n                    domRoot.appendChild(layer.dom);\n                }\n            }\n        }\n    },\n\n    // Iterate each layer\n    eachLayer: function (cb, context) {\n        var zlevelList = this._zlevelList;\n        var z;\n        var i;\n        for (i = 0; i < zlevelList.length; i++) {\n            z = zlevelList[i];\n            cb.call(context, this._layers[z], z);\n        }\n    },\n\n    // Iterate each buildin layer\n    eachBuiltinLayer: function (cb, context) {\n        var zlevelList = this._zlevelList;\n        var layer;\n        var z;\n        var i;\n        for (i = 0; i < zlevelList.length; i++) {\n            z = zlevelList[i];\n            layer = this._layers[z];\n            if (layer.__builtin__) {\n                cb.call(context, layer, z);\n            }\n        }\n    },\n\n    // Iterate each other layer except buildin layer\n    eachOtherLayer: function (cb, context) {\n        var zlevelList = this._zlevelList;\n        var layer;\n        var z;\n        var i;\n        for (i = 0; i < zlevelList.length; i++) {\n            z = zlevelList[i];\n            layer = this._layers[z];\n            if (!layer.__builtin__) {\n                cb.call(context, layer, z);\n            }\n        }\n    },\n\n    /**\n     * 获取所有已创建的层\n     * @param {Array.<module:zrender/Layer>} [prevLayer]\n     */\n    getLayers: function () {\n        return this._layers;\n    },\n\n    _updateLayerStatus: function (list) {\n\n        this.eachBuiltinLayer(function (layer, z) {\n            layer.__dirty = layer.__used = false;\n        });\n\n        function updatePrevLayer(idx) {\n            if (prevLayer) {\n                if (prevLayer.__endIndex !== idx) {\n                    prevLayer.__dirty = true;\n                }\n                prevLayer.__endIndex = idx;\n            }\n        }\n\n        if (this._singleCanvas) {\n            for (var i = 1; i < list.length; i++) {\n                var el = list[i];\n                if (el.zlevel !== list[i - 1].zlevel || el.incremental) {\n                    this._needsManuallyCompositing = true;\n                    break;\n                }\n            }\n        }\n\n        var prevLayer = null;\n        var incrementalLayerCount = 0;\n        for (var i = 0; i < list.length; i++) {\n            var el = list[i];\n            var zlevel = el.zlevel;\n            var layer;\n            // PENDING If change one incremental element style ?\n            // TODO Where there are non-incremental elements between incremental elements.\n            if (el.incremental) {\n                layer = this.getLayer(zlevel + INCREMENTAL_INC, this._needsManuallyCompositing);\n                layer.incremental = true;\n                incrementalLayerCount = 1;\n            }\n            else {\n                layer = this.getLayer(zlevel + (incrementalLayerCount > 0 ? EL_AFTER_INCREMENTAL_INC : 0), this._needsManuallyCompositing);\n            }\n\n            if (!layer.__builtin__) {\n                zrLog('ZLevel ' + zlevel + ' has been used by unkown layer ' + layer.id);\n            }\n\n            if (layer !== prevLayer) {\n                layer.__used = true;\n                if (layer.__startIndex !== i) {\n                    layer.__dirty = true;\n                }\n                layer.__startIndex = i;\n                if (!layer.incremental) {\n                    layer.__drawIndex = i;\n                }\n                else {\n                    // Mark layer draw index needs to update.\n                    layer.__drawIndex = -1;\n                }\n                updatePrevLayer(i);\n                prevLayer = layer;\n            }\n            if (el.__dirty) {\n                layer.__dirty = true;\n                if (layer.incremental && layer.__drawIndex < 0) {\n                    // Start draw from the first dirty element.\n                    layer.__drawIndex = i;\n                }\n            }\n        }\n\n        updatePrevLayer(i);\n\n        this.eachBuiltinLayer(function (layer, z) {\n            // Used in last frame but not in this frame. Needs clear\n            if (!layer.__used && layer.getElementCount() > 0) {\n                layer.__dirty = true;\n                layer.__startIndex = layer.__endIndex = layer.__drawIndex = 0;\n            }\n            // For incremental layer. In case start index changed and no elements are dirty.\n            if (layer.__dirty && layer.__drawIndex < 0) {\n                layer.__drawIndex = layer.__startIndex;\n            }\n        });\n    },\n\n    /**\n     * 清除hover层外所有内容\n     */\n    clear: function () {\n        this.eachBuiltinLayer(this._clearLayer);\n        return this;\n    },\n\n    _clearLayer: function (layer) {\n        layer.clear();\n    },\n\n    setBackgroundColor: function (backgroundColor) {\n        this._backgroundColor = backgroundColor;\n    },\n\n    /**\n     * 修改指定zlevel的绘制参数\n     *\n     * @param {string} zlevel\n     * @param {Object} config 配置对象\n     * @param {string} [config.clearColor=0] 每次清空画布的颜色\n     * @param {string} [config.motionBlur=false] 是否开启动态模糊\n     * @param {number} [config.lastFrameAlpha=0.7]\n     *                 在开启动态模糊的时候使用，与上一帧混合的alpha值，值越大尾迹越明显\n     */\n    configLayer: function (zlevel, config) {\n        if (config) {\n            var layerConfig = this._layerConfig;\n            if (!layerConfig[zlevel]) {\n                layerConfig[zlevel] = config;\n            }\n            else {\n                merge(layerConfig[zlevel], config, true);\n            }\n\n            for (var i = 0; i < this._zlevelList.length; i++) {\n                var _zlevel = this._zlevelList[i];\n                if (_zlevel === zlevel || _zlevel === zlevel + EL_AFTER_INCREMENTAL_INC) {\n                    var layer = this._layers[_zlevel];\n                    merge(layer, layerConfig[zlevel], true);\n                }\n            }\n        }\n    },\n\n    /**\n     * 删除指定层\n     * @param {number} zlevel 层所在的zlevel\n     */\n    delLayer: function (zlevel) {\n        var layers = this._layers;\n        var zlevelList = this._zlevelList;\n        var layer = layers[zlevel];\n        if (!layer) {\n            return;\n        }\n        layer.dom.parentNode.removeChild(layer.dom);\n        delete layers[zlevel];\n\n        zlevelList.splice(indexOf(zlevelList, zlevel), 1);\n    },\n\n    /**\n     * 区域大小变化后重绘\n     */\n    resize: function (width, height) {\n        if (!this._domRoot.style) { // Maybe in node or worker\n            if (width == null || height == null) {\n                return;\n            }\n            this._width = width;\n            this._height = height;\n\n            this.getLayer(CANVAS_ZLEVEL).resize(width, height);\n        }\n        else {\n            var domRoot = this._domRoot;\n            // FIXME Why ?\n            domRoot.style.display = 'none';\n\n            // Save input w/h\n            var opts = this._opts;\n            width != null && (opts.width = width);\n            height != null && (opts.height = height);\n\n            width = this._getSize(0);\n            height = this._getSize(1);\n\n            domRoot.style.display = '';\n\n            // 优化没有实际改变的resize\n            if (this._width !== width || height !== this._height) {\n                domRoot.style.width = width + 'px';\n                domRoot.style.height = height + 'px';\n\n                for (var id in this._layers) {\n                    if (this._layers.hasOwnProperty(id)) {\n                        this._layers[id].resize(width, height);\n                    }\n                }\n                each$1(this._progressiveLayers, function (layer) {\n                    layer.resize(width, height);\n                });\n\n                this.refresh(true);\n            }\n\n            this._width = width;\n            this._height = height;\n\n        }\n        return this;\n    },\n\n    /**\n     * 清除单独的一个层\n     * @param {number} zlevel\n     */\n    clearLayer: function (zlevel) {\n        var layer = this._layers[zlevel];\n        if (layer) {\n            layer.clear();\n        }\n    },\n\n    /**\n     * 释放\n     */\n    dispose: function () {\n        this.root.innerHTML = '';\n\n        this.root =\n        this.storage =\n\n        this._domRoot =\n        this._layers = null;\n    },\n\n    /**\n     * Get canvas which has all thing rendered\n     * @param {Object} opts\n     * @param {string} [opts.backgroundColor]\n     * @param {number} [opts.pixelRatio]\n     */\n    getRenderedCanvas: function (opts) {\n        opts = opts || {};\n        if (this._singleCanvas && !this._compositeManually) {\n            return this._layers[CANVAS_ZLEVEL].dom;\n        }\n\n        var imageLayer = new Layer('image', this, opts.pixelRatio || this.dpr);\n        imageLayer.initContext();\n        imageLayer.clear(false, opts.backgroundColor || this._backgroundColor);\n\n        if (opts.pixelRatio <= this.dpr) {\n            this.refresh();\n\n            var width = imageLayer.dom.width;\n            var height = imageLayer.dom.height;\n            var ctx = imageLayer.ctx;\n            this.eachLayer(function (layer) {\n                if (layer.__builtin__) {\n                    ctx.drawImage(layer.dom, 0, 0, width, height);\n                }\n                else if (layer.renderToCanvas) {\n                    imageLayer.ctx.save();\n                    layer.renderToCanvas(imageLayer.ctx);\n                    imageLayer.ctx.restore();\n                }\n            });\n        }\n        else {\n            // PENDING, echarts-gl and incremental rendering.\n            var scope = {};\n            var displayList = this.storage.getDisplayList(true);\n            for (var i = 0; i < displayList.length; i++) {\n                var el = displayList[i];\n                this._doPaintEl(el, imageLayer, true, scope);\n            }\n        }\n\n        return imageLayer.dom;\n    },\n    /**\n     * 获取绘图区域宽度\n     */\n    getWidth: function () {\n        return this._width;\n    },\n\n    /**\n     * 获取绘图区域高度\n     */\n    getHeight: function () {\n        return this._height;\n    },\n\n    _getSize: function (whIdx) {\n        var opts = this._opts;\n        var wh = ['width', 'height'][whIdx];\n        var cwh = ['clientWidth', 'clientHeight'][whIdx];\n        var plt = ['paddingLeft', 'paddingTop'][whIdx];\n        var prb = ['paddingRight', 'paddingBottom'][whIdx];\n\n        if (opts[wh] != null && opts[wh] !== 'auto') {\n            return parseFloat(opts[wh]);\n        }\n\n        var root = this.root;\n        // IE8 does not support getComputedStyle, but it use VML.\n        var stl = document.defaultView.getComputedStyle(root);\n\n        return (\n            (root[cwh] || parseInt10(stl[wh]) || parseInt10(root.style[wh]))\n            - (parseInt10(stl[plt]) || 0)\n            - (parseInt10(stl[prb]) || 0)\n        ) | 0;\n    },\n\n    pathToImage: function (path, dpr) {\n        dpr = dpr || this.dpr;\n\n        var canvas = document.createElement('canvas');\n        var ctx = canvas.getContext('2d');\n        var rect = path.getBoundingRect();\n        var style = path.style;\n        var shadowBlurSize = style.shadowBlur * dpr;\n        var shadowOffsetX = style.shadowOffsetX * dpr;\n        var shadowOffsetY = style.shadowOffsetY * dpr;\n        var lineWidth = style.hasStroke() ? style.lineWidth : 0;\n\n        var leftMargin = Math.max(lineWidth / 2, -shadowOffsetX + shadowBlurSize);\n        var rightMargin = Math.max(lineWidth / 2, shadowOffsetX + shadowBlurSize);\n        var topMargin = Math.max(lineWidth / 2, -shadowOffsetY + shadowBlurSize);\n        var bottomMargin = Math.max(lineWidth / 2, shadowOffsetY + shadowBlurSize);\n        var width = rect.width + leftMargin + rightMargin;\n        var height = rect.height + topMargin + bottomMargin;\n\n        canvas.width = width * dpr;\n        canvas.height = height * dpr;\n\n        ctx.scale(dpr, dpr);\n        ctx.clearRect(0, 0, width, height);\n        ctx.dpr = dpr;\n\n        var pathTransform = {\n            position: path.position,\n            rotation: path.rotation,\n            scale: path.scale\n        };\n        path.position = [leftMargin - rect.x, topMargin - rect.y];\n        path.rotation = 0;\n        path.scale = [1, 1];\n        path.updateTransform();\n        if (path) {\n            path.brush(ctx);\n        }\n\n        var ImageShape = ZImage;\n        var imgShape = new ImageShape({\n            style: {\n                x: 0,\n                y: 0,\n                image: canvas\n            }\n        });\n\n        if (pathTransform.position != null) {\n            imgShape.position = path.position = pathTransform.position;\n        }\n\n        if (pathTransform.rotation != null) {\n            imgShape.rotation = path.rotation = pathTransform.rotation;\n        }\n\n        if (pathTransform.scale != null) {\n            imgShape.scale = path.scale = pathTransform.scale;\n        }\n\n        return imgShape;\n    }\n};\n\n/**\n * 动画主类, 调度和管理所有动画控制器\n *\n * @module zrender/animation/Animation\n * @author pissang(https://github.com/pissang)\n */\n// TODO Additive animation\n// http://iosoteric.com/additive-animations-animatewithduration-in-ios-8/\n// https://developer.apple.com/videos/wwdc2014/#236\n\n/**\n * @typedef {Object} IZRenderStage\n * @property {Function} update\n */\n\n/**\n * @alias module:zrender/animation/Animation\n * @constructor\n * @param {Object} [options]\n * @param {Function} [options.onframe]\n * @param {IZRenderStage} [options.stage]\n * @example\n *     var animation = new Animation();\n *     var obj = {\n *         x: 100,\n *         y: 100\n *     };\n *     animation.animate(node.position)\n *         .when(1000, {\n *             x: 500,\n *             y: 500\n *         })\n *         .when(2000, {\n *             x: 100,\n *             y: 100\n *         })\n *         .start('spline');\n */\nvar Animation = function (options) {\n\n    options = options || {};\n\n    this.stage = options.stage || {};\n\n    this.onframe = options.onframe || function () {};\n\n    // private properties\n    this._clips = [];\n\n    this._running = false;\n\n    this._time;\n\n    this._pausedTime;\n\n    this._pauseStart;\n\n    this._paused = false;\n\n    Eventful.call(this);\n};\n\nAnimation.prototype = {\n\n    constructor: Animation,\n    /**\n     * 添加 clip\n     * @param {module:zrender/animation/Clip} clip\n     */\n    addClip: function (clip) {\n        this._clips.push(clip);\n    },\n    /**\n     * 添加 animator\n     * @param {module:zrender/animation/Animator} animator\n     */\n    addAnimator: function (animator) {\n        animator.animation = this;\n        var clips = animator.getClips();\n        for (var i = 0; i < clips.length; i++) {\n            this.addClip(clips[i]);\n        }\n    },\n    /**\n     * 删除动画片段\n     * @param {module:zrender/animation/Clip} clip\n     */\n    removeClip: function (clip) {\n        var idx = indexOf(this._clips, clip);\n        if (idx >= 0) {\n            this._clips.splice(idx, 1);\n        }\n    },\n\n    /**\n     * 删除动画片段\n     * @param {module:zrender/animation/Animator} animator\n     */\n    removeAnimator: function (animator) {\n        var clips = animator.getClips();\n        for (var i = 0; i < clips.length; i++) {\n            this.removeClip(clips[i]);\n        }\n        animator.animation = null;\n    },\n\n    _update: function () {\n        var time = new Date().getTime() - this._pausedTime;\n        var delta = time - this._time;\n        var clips = this._clips;\n        var len = clips.length;\n\n        var deferredEvents = [];\n        var deferredClips = [];\n        for (var i = 0; i < len; i++) {\n            var clip = clips[i];\n            var e = clip.step(time, delta);\n            // Throw out the events need to be called after\n            // stage.update, like destroy\n            if (e) {\n                deferredEvents.push(e);\n                deferredClips.push(clip);\n            }\n        }\n\n        // Remove the finished clip\n        for (var i = 0; i < len;) {\n            if (clips[i]._needsRemove) {\n                clips[i] = clips[len - 1];\n                clips.pop();\n                len--;\n            }\n            else {\n                i++;\n            }\n        }\n\n        len = deferredEvents.length;\n        for (var i = 0; i < len; i++) {\n            deferredClips[i].fire(deferredEvents[i]);\n        }\n\n        this._time = time;\n\n        this.onframe(delta);\n\n        // 'frame' should be triggered before stage, because upper application\n        // depends on the sequence (e.g., echarts-stream and finish\n        // event judge)\n        this.trigger('frame', delta);\n\n        if (this.stage.update) {\n            this.stage.update();\n        }\n    },\n\n    _startLoop: function () {\n        var self = this;\n\n        this._running = true;\n\n        function step() {\n            if (self._running) {\n\n                requestAnimationFrame(step);\n\n                !self._paused && self._update();\n            }\n        }\n\n        requestAnimationFrame(step);\n    },\n\n    /**\n     * Start animation.\n     */\n    start: function () {\n\n        this._time = new Date().getTime();\n        this._pausedTime = 0;\n\n        this._startLoop();\n    },\n\n    /**\n     * Stop animation.\n     */\n    stop: function () {\n        this._running = false;\n    },\n\n    /**\n     * Pause animation.\n     */\n    pause: function () {\n        if (!this._paused) {\n            this._pauseStart = new Date().getTime();\n            this._paused = true;\n        }\n    },\n\n    /**\n     * Resume animation.\n     */\n    resume: function () {\n        if (this._paused) {\n            this._pausedTime += (new Date().getTime()) - this._pauseStart;\n            this._paused = false;\n        }\n    },\n\n    /**\n     * Clear animation.\n     */\n    clear: function () {\n        this._clips = [];\n    },\n\n    /**\n     * Whether animation finished.\n     */\n    isFinished: function () {\n        return !this._clips.length;\n    },\n\n    /**\n     * Creat animator for a target, whose props can be animated.\n     *\n     * @param  {Object} target\n     * @param  {Object} options\n     * @param  {boolean} [options.loop=false] Whether loop animation.\n     * @param  {Function} [options.getter=null] Get value from target.\n     * @param  {Function} [options.setter=null] Set value to target.\n     * @return {module:zrender/animation/Animation~Animator}\n     */\n    // TODO Gap\n    animate: function (target, options) {\n        options = options || {};\n\n        var animator = new Animator(\n            target,\n            options.loop,\n            options.getter,\n            options.setter\n        );\n\n        this.addAnimator(animator);\n\n        return animator;\n    }\n};\n\nmixin(Animation, Eventful);\n\nvar TOUCH_CLICK_DELAY = 300;\n\nvar mouseHandlerNames = [\n    'click', 'dblclick', 'mousewheel', 'mouseout',\n    'mouseup', 'mousedown', 'mousemove', 'contextmenu'\n];\n\nvar touchHandlerNames = [\n    'touchstart', 'touchend', 'touchmove'\n];\n\nvar pointerEventNames = {\n    pointerdown: 1, pointerup: 1, pointermove: 1, pointerout: 1\n};\n\nvar pointerHandlerNames = map(mouseHandlerNames, function (name) {\n    var nm = name.replace('mouse', 'pointer');\n    return pointerEventNames[nm] ? nm : name;\n});\n\nfunction eventNameFix(name) {\n    return (name === 'mousewheel' && env$1.browser.firefox) ? 'DOMMouseScroll' : name;\n}\n\n// function onMSGestureChange(proxy, event) {\n//     if (event.translationX || event.translationY) {\n//         // mousemove is carried by MSGesture to reduce the sensitivity.\n//         proxy.handler.dispatchToElement(event.target, 'mousemove', event);\n//     }\n//     if (event.scale !== 1) {\n//         event.pinchX = event.offsetX;\n//         event.pinchY = event.offsetY;\n//         event.pinchScale = event.scale;\n//         proxy.handler.dispatchToElement(event.target, 'pinch', event);\n//     }\n// }\n\n/**\n * Prevent mouse event from being dispatched after Touch Events action\n * @see <https://github.com/deltakosh/handjs/blob/master/src/hand.base.js>\n * 1. Mobile browsers dispatch mouse events 300ms after touchend.\n * 2. Chrome for Android dispatch mousedown for long-touch about 650ms\n * Result: Blocking Mouse Events for 700ms.\n */\nfunction setTouchTimer(instance) {\n    instance._touching = true;\n    clearTimeout(instance._touchTimer);\n    instance._touchTimer = setTimeout(function () {\n        instance._touching = false;\n    }, 700);\n}\n\n\nvar domHandlers = {\n    /**\n     * Mouse move handler\n     * @inner\n     * @param {Event} event\n     */\n    mousemove: function (event) {\n        event = normalizeEvent(this.dom, event);\n\n        this.trigger('mousemove', event);\n    },\n\n    /**\n     * Mouse out handler\n     * @inner\n     * @param {Event} event\n     */\n    mouseout: function (event) {\n        event = normalizeEvent(this.dom, event);\n\n        var element = event.toElement || event.relatedTarget;\n        if (element !== this.dom) {\n            while (element && element.nodeType !== 9) {\n                // 忽略包含在root中的dom引起的mouseOut\n                if (element === this.dom) {\n                    return;\n                }\n\n                element = element.parentNode;\n            }\n        }\n\n        this.trigger('mouseout', event);\n    },\n\n    /**\n     * Touch开始响应函数\n     * @inner\n     * @param {Event} event\n     */\n    touchstart: function (event) {\n        // Default mouse behaviour should not be disabled here.\n        // For example, page may needs to be slided.\n        event = normalizeEvent(this.dom, event);\n\n        // Mark touch, which is useful in distinguish touch and\n        // mouse event in upper applicatoin.\n        event.zrByTouch = true;\n\n        this._lastTouchMoment = new Date();\n\n        this.handler.processGesture(this, event, 'start');\n\n        // In touch device, trigger `mousemove`(`mouseover`) should\n        // be triggered, and must before `mousedown` triggered.\n        domHandlers.mousemove.call(this, event);\n\n        domHandlers.mousedown.call(this, event);\n\n        setTouchTimer(this);\n    },\n\n    /**\n     * Touch移动响应函数\n     * @inner\n     * @param {Event} event\n     */\n    touchmove: function (event) {\n\n        event = normalizeEvent(this.dom, event);\n\n        // Mark touch, which is useful in distinguish touch and\n        // mouse event in upper applicatoin.\n        event.zrByTouch = true;\n\n        this.handler.processGesture(this, event, 'change');\n\n        // Mouse move should always be triggered no matter whether\n        // there is gestrue event, because mouse move and pinch may\n        // be used at the same time.\n        domHandlers.mousemove.call(this, event);\n\n        setTouchTimer(this);\n    },\n\n    /**\n     * Touch结束响应函数\n     * @inner\n     * @param {Event} event\n     */\n    touchend: function (event) {\n\n        event = normalizeEvent(this.dom, event);\n\n        // Mark touch, which is useful in distinguish touch and\n        // mouse event in upper applicatoin.\n        event.zrByTouch = true;\n\n        this.handler.processGesture(this, event, 'end');\n\n        domHandlers.mouseup.call(this, event);\n\n        // Do not trigger `mouseout` here, in spite of `mousemove`(`mouseover`) is\n        // triggered in `touchstart`. This seems to be illogical, but by this mechanism,\n        // we can conveniently implement \"hover style\" in both PC and touch device just\n        // by listening to `mouseover` to add \"hover style\" and listening to `mouseout`\n        // to remove \"hover style\" on an element, without any additional code for\n        // compatibility. (`mouseout` will not be triggered in `touchend`, so \"hover\n        // style\" will remain for user view)\n\n        // click event should always be triggered no matter whether\n        // there is gestrue event. System click can not be prevented.\n        if (+new Date() - this._lastTouchMoment < TOUCH_CLICK_DELAY) {\n            domHandlers.click.call(this, event);\n        }\n\n        setTouchTimer(this);\n    },\n\n    pointerdown: function (event) {\n        domHandlers.mousedown.call(this, event);\n\n        // if (useMSGuesture(this, event)) {\n        //     this._msGesture.addPointer(event.pointerId);\n        // }\n    },\n\n    pointermove: function (event) {\n        // FIXME\n        // pointermove is so sensitive that it always triggered when\n        // tap(click) on touch screen, which affect some judgement in\n        // upper application. So, we dont support mousemove on MS touch\n        // device yet.\n        if (!isPointerFromTouch(event)) {\n            domHandlers.mousemove.call(this, event);\n        }\n    },\n\n    pointerup: function (event) {\n        domHandlers.mouseup.call(this, event);\n    },\n\n    pointerout: function (event) {\n        // pointerout will be triggered when tap on touch screen\n        // (IE11+/Edge on MS Surface) after click event triggered,\n        // which is inconsistent with the mousout behavior we defined\n        // in touchend. So we unify them.\n        // (check domHandlers.touchend for detailed explanation)\n        if (!isPointerFromTouch(event)) {\n            domHandlers.mouseout.call(this, event);\n        }\n    }\n};\n\nfunction isPointerFromTouch(event) {\n    var pointerType = event.pointerType;\n    return pointerType === 'pen' || pointerType === 'touch';\n}\n\n// function useMSGuesture(handlerProxy, event) {\n//     return isPointerFromTouch(event) && !!handlerProxy._msGesture;\n// }\n\n// Common handlers\neach$1(['click', 'mousedown', 'mouseup', 'mousewheel', 'dblclick', 'contextmenu'], function (name) {\n    domHandlers[name] = function (event) {\n        event = normalizeEvent(this.dom, event);\n        this.trigger(name, event);\n    };\n});\n\n/**\n * 为控制类实例初始化dom 事件处理函数\n *\n * @inner\n * @param {module:zrender/Handler} instance 控制类实例\n */\nfunction initDomHandler(instance) {\n    each$1(touchHandlerNames, function (name) {\n        instance._handlers[name] = bind(domHandlers[name], instance);\n    });\n\n    each$1(pointerHandlerNames, function (name) {\n        instance._handlers[name] = bind(domHandlers[name], instance);\n    });\n\n    each$1(mouseHandlerNames, function (name) {\n        instance._handlers[name] = makeMouseHandler(domHandlers[name], instance);\n    });\n\n    function makeMouseHandler(fn, instance) {\n        return function () {\n            if (instance._touching) {\n                return;\n            }\n            return fn.apply(instance, arguments);\n        };\n    }\n}\n\n\nfunction HandlerDomProxy(dom) {\n    Eventful.call(this);\n\n    this.dom = dom;\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this._touching = false;\n\n    /**\n     * @private\n     * @type {number}\n     */\n    this._touchTimer;\n\n    this._handlers = {};\n\n    initDomHandler(this);\n\n    if (env$1.pointerEventsSupported) { // Only IE11+/Edge\n        // 1. On devices that both enable touch and mouse (e.g., MS Surface and lenovo X240),\n        // IE11+/Edge do not trigger touch event, but trigger pointer event and mouse event\n        // at the same time.\n        // 2. On MS Surface, it probablely only trigger mousedown but no mouseup when tap on\n        // screen, which do not occurs in pointer event.\n        // So we use pointer event to both detect touch gesture and mouse behavior.\n        mountHandlers(pointerHandlerNames, this);\n\n        // FIXME\n        // Note: MS Gesture require CSS touch-action set. But touch-action is not reliable,\n        // which does not prevent defuault behavior occasionally (which may cause view port\n        // zoomed in but use can not zoom it back). And event.preventDefault() does not work.\n        // So we have to not to use MSGesture and not to support touchmove and pinch on MS\n        // touch screen. And we only support click behavior on MS touch screen now.\n\n        // MS Gesture Event is only supported on IE11+/Edge and on Windows 8+.\n        // We dont support touch on IE on win7.\n        // See <https://msdn.microsoft.com/en-us/library/dn433243(v=vs.85).aspx>\n        // if (typeof MSGesture === 'function') {\n        //     (this._msGesture = new MSGesture()).target = dom; // jshint ignore:line\n        //     dom.addEventListener('MSGestureChange', onMSGestureChange);\n        // }\n    }\n    else {\n        if (env$1.touchEventsSupported) {\n            mountHandlers(touchHandlerNames, this);\n            // Handler of 'mouseout' event is needed in touch mode, which will be mounted below.\n            // addEventListener(root, 'mouseout', this._mouseoutHandler);\n        }\n\n        // 1. Considering some devices that both enable touch and mouse event (like on MS Surface\n        // and lenovo X240, @see #2350), we make mouse event be always listened, otherwise\n        // mouse event can not be handle in those devices.\n        // 2. On MS Surface, Chrome will trigger both touch event and mouse event. How to prevent\n        // mouseevent after touch event triggered, see `setTouchTimer`.\n        mountHandlers(mouseHandlerNames, this);\n    }\n\n    function mountHandlers(handlerNames, instance) {\n        each$1(handlerNames, function (name) {\n            addEventListener(dom, eventNameFix(name), instance._handlers[name]);\n        }, instance);\n    }\n}\n\nvar handlerDomProxyProto = HandlerDomProxy.prototype;\nhandlerDomProxyProto.dispose = function () {\n    var handlerNames = mouseHandlerNames.concat(touchHandlerNames);\n\n    for (var i = 0; i < handlerNames.length; i++) {\n        var name = handlerNames[i];\n        removeEventListener(this.dom, eventNameFix(name), this._handlers[name]);\n    }\n};\n\nhandlerDomProxyProto.setCursor = function (cursorStyle) {\n    this.dom.style && (this.dom.style.cursor = cursorStyle || 'default');\n};\n\nmixin(HandlerDomProxy, Eventful);\n\n/*!\n* ZRender, a high performance 2d drawing library.\n*\n* Copyright (c) 2013, Baidu Inc.\n* All rights reserved.\n*\n* LICENSE\n* https://github.com/ecomfe/zrender/blob/master/LICENSE.txt\n*/\n\nvar useVML = !env$1.canvasSupported;\n\nvar painterCtors = {\n    canvas: Painter\n};\n\nvar instances$1 = {};    // ZRender实例map索引\n\n/**\n * @type {string}\n */\nvar version$1 = '4.1.0';\n\n/**\n * Initializing a zrender instance\n * @param {HTMLElement} dom\n * @param {Object} [opts]\n * @param {string} [opts.renderer='canvas'] 'canvas' or 'svg'\n * @param {number} [opts.devicePixelRatio]\n * @param {number|string} [opts.width] Can be 'auto' (the same as null/undefined)\n * @param {number|string} [opts.height] Can be 'auto' (the same as null/undefined)\n * @return {module:zrender/ZRender}\n */\nfunction init$1(dom, opts) {\n    var zr = new ZRender(guid(), dom, opts);\n    instances$1[zr.id] = zr;\n    return zr;\n}\n\n/**\n * Dispose zrender instance\n * @param {module:zrender/ZRender} zr\n */\nfunction dispose$1(zr) {\n    if (zr) {\n        zr.dispose();\n    }\n    else {\n        for (var key in instances$1) {\n            if (instances$1.hasOwnProperty(key)) {\n                instances$1[key].dispose();\n            }\n        }\n        instances$1 = {};\n    }\n\n    return this;\n}\n\n/**\n * Get zrender instance by id\n * @param {string} id zrender instance id\n * @return {module:zrender/ZRender}\n */\nfunction getInstance(id) {\n    return instances$1[id];\n}\n\nfunction registerPainter(name, Ctor) {\n    painterCtors[name] = Ctor;\n}\n\nfunction delInstance(id) {\n    delete instances$1[id];\n}\n\n/**\n * @module zrender/ZRender\n */\n/**\n * @constructor\n * @alias module:zrender/ZRender\n * @param {string} id\n * @param {HTMLElement} dom\n * @param {Object} opts\n * @param {string} [opts.renderer='canvas'] 'canvas' or 'svg'\n * @param {number} [opts.devicePixelRatio]\n * @param {number} [opts.width] Can be 'auto' (the same as null/undefined)\n * @param {number} [opts.height] Can be 'auto' (the same as null/undefined)\n */\nvar ZRender = function (id, dom, opts) {\n\n    opts = opts || {};\n\n    /**\n     * @type {HTMLDomElement}\n     */\n    this.dom = dom;\n\n    /**\n     * @type {string}\n     */\n    this.id = id;\n\n    var self = this;\n    var storage = new Storage();\n\n    var rendererType = opts.renderer;\n    // TODO WebGL\n    if (useVML) {\n        if (!painterCtors.vml) {\n            throw new Error('You need to require \\'zrender/vml/vml\\' to support IE8');\n        }\n        rendererType = 'vml';\n    }\n    else if (!rendererType || !painterCtors[rendererType]) {\n        rendererType = 'canvas';\n    }\n    var painter = new painterCtors[rendererType](dom, storage, opts, id);\n\n    this.storage = storage;\n    this.painter = painter;\n\n    var handerProxy = (!env$1.node && !env$1.worker) ? new HandlerDomProxy(painter.getViewportRoot()) : null;\n    this.handler = new Handler(storage, painter, handerProxy, painter.root);\n\n    /**\n     * @type {module:zrender/animation/Animation}\n     */\n    this.animation = new Animation({\n        stage: {\n            update: bind(this.flush, this)\n        }\n    });\n    this.animation.start();\n\n    /**\n     * @type {boolean}\n     * @private\n     */\n    this._needsRefresh;\n\n    // 修改 storage.delFromStorage, 每次删除元素之前删除动画\n    // FIXME 有点ugly\n    var oldDelFromStorage = storage.delFromStorage;\n    var oldAddToStorage = storage.addToStorage;\n\n    storage.delFromStorage = function (el) {\n        oldDelFromStorage.call(storage, el);\n\n        el && el.removeSelfFromZr(self);\n    };\n\n    storage.addToStorage = function (el) {\n        oldAddToStorage.call(storage, el);\n\n        el.addSelfToZr(self);\n    };\n};\n\nZRender.prototype = {\n\n    constructor: ZRender,\n    /**\n     * 获取实例唯一标识\n     * @return {string}\n     */\n    getId: function () {\n        return this.id;\n    },\n\n    /**\n     * 添加元素\n     * @param  {module:zrender/Element} el\n     */\n    add: function (el) {\n        this.storage.addRoot(el);\n        this._needsRefresh = true;\n    },\n\n    /**\n     * 删除元素\n     * @param  {module:zrender/Element} el\n     */\n    remove: function (el) {\n        this.storage.delRoot(el);\n        this._needsRefresh = true;\n    },\n\n    /**\n     * Change configuration of layer\n     * @param {string} zLevel\n     * @param {Object} config\n     * @param {string} [config.clearColor=0] Clear color\n     * @param {string} [config.motionBlur=false] If enable motion blur\n     * @param {number} [config.lastFrameAlpha=0.7] Motion blur factor. Larger value cause longer trailer\n    */\n    configLayer: function (zLevel, config) {\n        if (this.painter.configLayer) {\n            this.painter.configLayer(zLevel, config);\n        }\n        this._needsRefresh = true;\n    },\n\n    /**\n     * Set background color\n     * @param {string} backgroundColor\n     */\n    setBackgroundColor: function (backgroundColor) {\n        if (this.painter.setBackgroundColor) {\n            this.painter.setBackgroundColor(backgroundColor);\n        }\n        this._needsRefresh = true;\n    },\n\n    /**\n     * Repaint the canvas immediately\n     */\n    refreshImmediately: function () {\n        // var start = new Date();\n\n        // Clear needsRefresh ahead to avoid something wrong happens in refresh\n        // Or it will cause zrender refreshes again and again.\n        this._needsRefresh = this._needsRefreshHover = false;\n        this.painter.refresh();\n        // Avoid trigger zr.refresh in Element#beforeUpdate hook\n        this._needsRefresh = this._needsRefreshHover = false;\n\n        // var end = new Date();\n        // var log = document.getElementById('log');\n        // if (log) {\n        //     log.innerHTML = log.innerHTML + '<br>' + (end - start);\n        // }\n    },\n\n    /**\n     * Mark and repaint the canvas in the next frame of browser\n     */\n    refresh: function () {\n        this._needsRefresh = true;\n    },\n\n    /**\n     * Perform all refresh\n     */\n    flush: function () {\n        var triggerRendered;\n\n        if (this._needsRefresh) {\n            triggerRendered = true;\n            this.refreshImmediately();\n        }\n        if (this._needsRefreshHover) {\n            triggerRendered = true;\n            this.refreshHoverImmediately();\n        }\n\n        triggerRendered && this.trigger('rendered');\n    },\n\n    /**\n     * Add element to hover layer\n     * @param  {module:zrender/Element} el\n     * @param {Object} style\n     */\n    addHover: function (el, style) {\n        if (this.painter.addHover) {\n            var elMirror = this.painter.addHover(el, style);\n            this.refreshHover();\n            return elMirror;\n        }\n    },\n\n    /**\n     * Add element from hover layer\n     * @param  {module:zrender/Element} el\n     */\n    removeHover: function (el) {\n        if (this.painter.removeHover) {\n            this.painter.removeHover(el);\n            this.refreshHover();\n        }\n    },\n\n    /**\n     * Clear all hover elements in hover layer\n     * @param  {module:zrender/Element} el\n     */\n    clearHover: function () {\n        if (this.painter.clearHover) {\n            this.painter.clearHover();\n            this.refreshHover();\n        }\n    },\n\n    /**\n     * Refresh hover in next frame\n     */\n    refreshHover: function () {\n        this._needsRefreshHover = true;\n    },\n\n    /**\n     * Refresh hover immediately\n     */\n    refreshHoverImmediately: function () {\n        this._needsRefreshHover = false;\n        this.painter.refreshHover && this.painter.refreshHover();\n    },\n\n    /**\n     * Resize the canvas.\n     * Should be invoked when container size is changed\n     * @param {Object} [opts]\n     * @param {number|string} [opts.width] Can be 'auto' (the same as null/undefined)\n     * @param {number|string} [opts.height] Can be 'auto' (the same as null/undefined)\n     */\n    resize: function (opts) {\n        opts = opts || {};\n        this.painter.resize(opts.width, opts.height);\n        this.handler.resize();\n    },\n\n    /**\n     * Stop and clear all animation immediately\n     */\n    clearAnimation: function () {\n        this.animation.clear();\n    },\n\n    /**\n     * Get container width\n     */\n    getWidth: function () {\n        return this.painter.getWidth();\n    },\n\n    /**\n     * Get container height\n     */\n    getHeight: function () {\n        return this.painter.getHeight();\n    },\n\n    /**\n     * Export the canvas as Base64 URL\n     * @param {string} type\n     * @param {string} [backgroundColor='#fff']\n     * @return {string} Base64 URL\n     */\n    // toDataURL: function(type, backgroundColor) {\n    //     return this.painter.getRenderedCanvas({\n    //         backgroundColor: backgroundColor\n    //     }).toDataURL(type);\n    // },\n\n    /**\n     * Converting a path to image.\n     * It has much better performance of drawing image rather than drawing a vector path.\n     * @param {module:zrender/graphic/Path} e\n     * @param {number} width\n     * @param {number} height\n     */\n    pathToImage: function (e, dpr) {\n        return this.painter.pathToImage(e, dpr);\n    },\n\n    /**\n     * Set default cursor\n     * @param {string} [cursorStyle='default'] 例如 crosshair\n     */\n    setCursorStyle: function (cursorStyle) {\n        this.handler.setCursorStyle(cursorStyle);\n    },\n\n    /**\n     * Find hovered element\n     * @param {number} x\n     * @param {number} y\n     * @return {Object} {target, topTarget}\n     */\n    findHover: function (x, y) {\n        return this.handler.findHover(x, y);\n    },\n\n    /**\n     * Bind event\n     *\n     * @param {string} eventName Event name\n     * @param {Function} eventHandler Handler function\n     * @param {Object} [context] Context object\n     */\n    on: function (eventName, eventHandler, context) {\n        this.handler.on(eventName, eventHandler, context);\n    },\n\n    /**\n     * Unbind event\n     * @param {string} eventName Event name\n     * @param {Function} [eventHandler] Handler function\n     */\n    off: function (eventName, eventHandler) {\n        this.handler.off(eventName, eventHandler);\n    },\n\n    /**\n     * Trigger event manually\n     *\n     * @param {string} eventName Event name\n     * @param {event=} event Event object\n     */\n    trigger: function (eventName, event) {\n        this.handler.trigger(eventName, event);\n    },\n\n\n    /**\n     * Clear all objects and the canvas.\n     */\n    clear: function () {\n        this.storage.delRoot();\n        this.painter.clear();\n    },\n\n    /**\n     * Dispose self.\n     */\n    dispose: function () {\n        this.animation.stop();\n\n        this.clear();\n        this.storage.dispose();\n        this.painter.dispose();\n        this.handler.dispose();\n\n        this.animation =\n        this.storage =\n        this.painter =\n        this.handler = null;\n\n        delInstance(this.id);\n    }\n};\n\n\n\nvar zrender = (Object.freeze || Object)({\n\tversion: version$1,\n\tinit: init$1,\n\tdispose: dispose$1,\n\tgetInstance: getInstance,\n\tregisterPainter: registerPainter\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar each$2 = each$1;\nvar isObject$2 = isObject$1;\nvar isArray$1 = isArray;\n\n/**\n * Make the name displayable. But we should\n * make sure it is not duplicated with user\n * specified name, so use '\\0';\n */\nvar DUMMY_COMPONENT_NAME_PREFIX = 'series\\0';\n\n/**\n * If value is not array, then translate it to array.\n * @param  {*} value\n * @return {Array} [value] or value\n */\nfunction normalizeToArray(value) {\n    return value instanceof Array\n        ? value\n        : value == null\n        ? []\n        : [value];\n}\n\n/**\n * Sync default option between normal and emphasis like `position` and `show`\n * In case some one will write code like\n *     label: {\n *          show: false,\n *          position: 'outside',\n *          fontSize: 18\n *     },\n *     emphasis: {\n *          label: { show: true }\n *     }\n * @param {Object} opt\n * @param {string} key\n * @param {Array.<string>} subOpts\n */\nfunction defaultEmphasis(opt, key, subOpts) {\n    // Caution: performance sensitive.\n    if (opt) {\n        opt[key] = opt[key] || {};\n        opt.emphasis = opt.emphasis || {};\n        opt.emphasis[key] = opt.emphasis[key] || {};\n\n        // Default emphasis option from normal\n        for (var i = 0, len = subOpts.length; i < len; i++) {\n            var subOptName = subOpts[i];\n            if (!opt.emphasis[key].hasOwnProperty(subOptName)\n                && opt[key].hasOwnProperty(subOptName)\n            ) {\n                opt.emphasis[key][subOptName] = opt[key][subOptName];\n            }\n        }\n    }\n}\n\nvar TEXT_STYLE_OPTIONS = [\n    'fontStyle', 'fontWeight', 'fontSize', 'fontFamily',\n    'rich', 'tag', 'color', 'textBorderColor', 'textBorderWidth',\n    'width', 'height', 'lineHeight', 'align', 'verticalAlign', 'baseline',\n    'shadowColor', 'shadowBlur', 'shadowOffsetX', 'shadowOffsetY',\n    'textShadowColor', 'textShadowBlur', 'textShadowOffsetX', 'textShadowOffsetY',\n    'backgroundColor', 'borderColor', 'borderWidth', 'borderRadius', 'padding'\n];\n\n// modelUtil.LABEL_OPTIONS = modelUtil.TEXT_STYLE_OPTIONS.concat([\n//     'position', 'offset', 'rotate', 'origin', 'show', 'distance', 'formatter',\n//     'fontStyle', 'fontWeight', 'fontSize', 'fontFamily',\n//     // FIXME: deprecated, check and remove it.\n//     'textStyle'\n// ]);\n\n/**\n * The method do not ensure performance.\n * data could be [12, 2323, {value: 223}, [1221, 23], {value: [2, 23]}]\n * This helper method retieves value from data.\n * @param {string|number|Date|Array|Object} dataItem\n * @return {number|string|Date|Array.<number|string|Date>}\n */\nfunction getDataItemValue(dataItem) {\n    return (isObject$2(dataItem) && !isArray$1(dataItem) && !(dataItem instanceof Date))\n        ? dataItem.value : dataItem;\n}\n\n/**\n * data could be [12, 2323, {value: 223}, [1221, 23], {value: [2, 23]}]\n * This helper method determine if dataItem has extra option besides value\n * @param {string|number|Date|Array|Object} dataItem\n */\nfunction isDataItemOption(dataItem) {\n    return isObject$2(dataItem)\n        && !(dataItem instanceof Array);\n        // // markLine data can be array\n        // && !(dataItem[0] && isObject(dataItem[0]) && !(dataItem[0] instanceof Array));\n}\n\n/**\n * Mapping to exists for merge.\n *\n * @public\n * @param {Array.<Object>|Array.<module:echarts/model/Component>} exists\n * @param {Object|Array.<Object>} newCptOptions\n * @return {Array.<Object>} Result, like [{exist: ..., option: ...}, {}],\n *                          index of which is the same as exists.\n */\nfunction mappingToExists(exists, newCptOptions) {\n    // Mapping by the order by original option (but not order of\n    // new option) in merge mode. Because we should ensure\n    // some specified index (like xAxisIndex) is consistent with\n    // original option, which is easy to understand, espatially in\n    // media query. And in most case, merge option is used to\n    // update partial option but not be expected to change order.\n    newCptOptions = (newCptOptions || []).slice();\n\n    var result = map(exists || [], function (obj, index) {\n        return {exist: obj};\n    });\n\n    // Mapping by id or name if specified.\n    each$2(newCptOptions, function (cptOption, index) {\n        if (!isObject$2(cptOption)) {\n            return;\n        }\n\n        // id has highest priority.\n        for (var i = 0; i < result.length; i++) {\n            if (!result[i].option // Consider name: two map to one.\n                && cptOption.id != null\n                && result[i].exist.id === cptOption.id + ''\n            ) {\n                result[i].option = cptOption;\n                newCptOptions[index] = null;\n                return;\n            }\n        }\n\n        for (var i = 0; i < result.length; i++) {\n            var exist = result[i].exist;\n            if (!result[i].option // Consider name: two map to one.\n                // Can not match when both ids exist but different.\n                && (exist.id == null || cptOption.id == null)\n                && cptOption.name != null\n                && !isIdInner(cptOption)\n                && !isIdInner(exist)\n                && exist.name === cptOption.name + ''\n            ) {\n                result[i].option = cptOption;\n                newCptOptions[index] = null;\n                return;\n            }\n        }\n    });\n\n    // Otherwise mapping by index.\n    each$2(newCptOptions, function (cptOption, index) {\n        if (!isObject$2(cptOption)) {\n            return;\n        }\n\n        var i = 0;\n        for (; i < result.length; i++) {\n            var exist = result[i].exist;\n            if (!result[i].option\n                // Existing model that already has id should be able to\n                // mapped to (because after mapping performed model may\n                // be assigned with a id, whish should not affect next\n                // mapping), except those has inner id.\n                && !isIdInner(exist)\n                // Caution:\n                // Do not overwrite id. But name can be overwritten,\n                // because axis use name as 'show label text'.\n                // 'exist' always has id and name and we dont\n                // need to check it.\n                && cptOption.id == null\n            ) {\n                result[i].option = cptOption;\n                break;\n            }\n        }\n\n        if (i >= result.length) {\n            result.push({option: cptOption});\n        }\n    });\n\n    return result;\n}\n\n/**\n * Make id and name for mapping result (result of mappingToExists)\n * into `keyInfo` field.\n *\n * @public\n * @param {Array.<Object>} Result, like [{exist: ..., option: ...}, {}],\n *                          which order is the same as exists.\n * @return {Array.<Object>} The input.\n */\nfunction makeIdAndName(mapResult) {\n    // We use this id to hash component models and view instances\n    // in echarts. id can be specified by user, or auto generated.\n\n    // The id generation rule ensures new view instance are able\n    // to mapped to old instance when setOption are called in\n    // no-merge mode. So we generate model id by name and plus\n    // type in view id.\n\n    // name can be duplicated among components, which is convenient\n    // to specify multi components (like series) by one name.\n\n    // Ensure that each id is distinct.\n    var idMap = createHashMap();\n\n    each$2(mapResult, function (item, index) {\n        var existCpt = item.exist;\n        existCpt && idMap.set(existCpt.id, item);\n    });\n\n    each$2(mapResult, function (item, index) {\n        var opt = item.option;\n\n        assert$1(\n            !opt || opt.id == null || !idMap.get(opt.id) || idMap.get(opt.id) === item,\n            'id duplicates: ' + (opt && opt.id)\n        );\n\n        opt && opt.id != null && idMap.set(opt.id, item);\n        !item.keyInfo && (item.keyInfo = {});\n    });\n\n    // Make name and id.\n    each$2(mapResult, function (item, index) {\n        var existCpt = item.exist;\n        var opt = item.option;\n        var keyInfo = item.keyInfo;\n\n        if (!isObject$2(opt)) {\n            return;\n        }\n\n        // name can be overwitten. Consider case: axis.name = '20km'.\n        // But id generated by name will not be changed, which affect\n        // only in that case: setOption with 'not merge mode' and view\n        // instance will be recreated, which can be accepted.\n        keyInfo.name = opt.name != null\n            ? opt.name + ''\n            : existCpt\n            ? existCpt.name\n            // Avoid diffferent series has the same name,\n            // because name may be used like in color pallet.\n            : DUMMY_COMPONENT_NAME_PREFIX + index;\n\n        if (existCpt) {\n            keyInfo.id = existCpt.id;\n        }\n        else if (opt.id != null) {\n            keyInfo.id = opt.id + '';\n        }\n        else {\n            // Consider this situatoin:\n            //  optionA: [{name: 'a'}, {name: 'a'}, {..}]\n            //  optionB [{..}, {name: 'a'}, {name: 'a'}]\n            // Series with the same name between optionA and optionB\n            // should be mapped.\n            var idNum = 0;\n            do {\n                keyInfo.id = '\\0' + keyInfo.name + '\\0' + idNum++;\n            }\n            while (idMap.get(keyInfo.id));\n        }\n\n        idMap.set(keyInfo.id, item);\n    });\n}\n\nfunction isNameSpecified(componentModel) {\n    var name = componentModel.name;\n    // Is specified when `indexOf` get -1 or > 0.\n    return !!(name && name.indexOf(DUMMY_COMPONENT_NAME_PREFIX));\n}\n\n/**\n * @public\n * @param {Object} cptOption\n * @return {boolean}\n */\nfunction isIdInner(cptOption) {\n    return isObject$2(cptOption)\n        && cptOption.id\n        && (cptOption.id + '').indexOf('\\0_ec_\\0') === 0;\n}\n\n/**\n * A helper for removing duplicate items between batchA and batchB,\n * and in themselves, and categorize by series.\n *\n * @param {Array.<Object>} batchA Like: [{seriesId: 2, dataIndex: [32, 4, 5]}, ...]\n * @param {Array.<Object>} batchB Like: [{seriesId: 2, dataIndex: [32, 4, 5]}, ...]\n * @return {Array.<Array.<Object>, Array.<Object>>} result: [resultBatchA, resultBatchB]\n */\nfunction compressBatches(batchA, batchB) {\n    var mapA = {};\n    var mapB = {};\n\n    makeMap(batchA || [], mapA);\n    makeMap(batchB || [], mapB, mapA);\n\n    return [mapToArray(mapA), mapToArray(mapB)];\n\n    function makeMap(sourceBatch, map$$1, otherMap) {\n        for (var i = 0, len = sourceBatch.length; i < len; i++) {\n            var seriesId = sourceBatch[i].seriesId;\n            var dataIndices = normalizeToArray(sourceBatch[i].dataIndex);\n            var otherDataIndices = otherMap && otherMap[seriesId];\n\n            for (var j = 0, lenj = dataIndices.length; j < lenj; j++) {\n                var dataIndex = dataIndices[j];\n\n                if (otherDataIndices && otherDataIndices[dataIndex]) {\n                    otherDataIndices[dataIndex] = null;\n                }\n                else {\n                    (map$$1[seriesId] || (map$$1[seriesId] = {}))[dataIndex] = 1;\n                }\n            }\n        }\n    }\n\n    function mapToArray(map$$1, isData) {\n        var result = [];\n        for (var i in map$$1) {\n            if (map$$1.hasOwnProperty(i) && map$$1[i] != null) {\n                if (isData) {\n                    result.push(+i);\n                }\n                else {\n                    var dataIndices = mapToArray(map$$1[i], true);\n                    dataIndices.length && result.push({seriesId: i, dataIndex: dataIndices});\n                }\n            }\n        }\n        return result;\n    }\n}\n\n/**\n * @param {module:echarts/data/List} data\n * @param {Object} payload Contains dataIndex (means rawIndex) / dataIndexInside / name\n *                         each of which can be Array or primary type.\n * @return {number|Array.<number>} dataIndex If not found, return undefined/null.\n */\nfunction queryDataIndex(data, payload) {\n    if (payload.dataIndexInside != null) {\n        return payload.dataIndexInside;\n    }\n    else if (payload.dataIndex != null) {\n        return isArray(payload.dataIndex)\n            ? map(payload.dataIndex, function (value) {\n                return data.indexOfRawIndex(value);\n            })\n            : data.indexOfRawIndex(payload.dataIndex);\n    }\n    else if (payload.name != null) {\n        return isArray(payload.name)\n            ? map(payload.name, function (value) {\n                return data.indexOfName(value);\n            })\n            : data.indexOfName(payload.name);\n    }\n}\n\n/**\n * Enable property storage to any host object.\n * Notice: Serialization is not supported.\n *\n * For example:\n * var inner = zrUitl.makeInner();\n *\n * function some1(hostObj) {\n *      inner(hostObj).someProperty = 1212;\n *      ...\n * }\n * function some2() {\n *      var fields = inner(this);\n *      fields.someProperty1 = 1212;\n *      fields.someProperty2 = 'xx';\n *      ...\n * }\n *\n * @return {Function}\n */\nfunction makeInner() {\n    // Consider different scope by es module import.\n    var key = '__\\0ec_inner_' + innerUniqueIndex++ + '_' + Math.random().toFixed(5);\n    return function (hostObj) {\n        return hostObj[key] || (hostObj[key] = {});\n    };\n}\nvar innerUniqueIndex = 0;\n\n/**\n * @param {module:echarts/model/Global} ecModel\n * @param {string|Object} finder\n *        If string, e.g., 'geo', means {geoIndex: 0}.\n *        If Object, could contain some of these properties below:\n *        {\n *            seriesIndex, seriesId, seriesName,\n *            geoIndex, geoId, geoName,\n *            bmapIndex, bmapId, bmapName,\n *            xAxisIndex, xAxisId, xAxisName,\n *            yAxisIndex, yAxisId, yAxisName,\n *            gridIndex, gridId, gridName,\n *            ... (can be extended)\n *        }\n *        Each properties can be number|string|Array.<number>|Array.<string>\n *        For example, a finder could be\n *        {\n *            seriesIndex: 3,\n *            geoId: ['aa', 'cc'],\n *            gridName: ['xx', 'rr']\n *        }\n *        xxxIndex can be set as 'all' (means all xxx) or 'none' (means not specify)\n *        If nothing or null/undefined specified, return nothing.\n * @param {Object} [opt]\n * @param {string} [opt.defaultMainType]\n * @param {Array.<string>} [opt.includeMainTypes]\n * @return {Object} result like:\n *        {\n *            seriesModels: [seriesModel1, seriesModel2],\n *            seriesModel: seriesModel1, // The first model\n *            geoModels: [geoModel1, geoModel2],\n *            geoModel: geoModel1, // The first model\n *            ...\n *        }\n */\nfunction parseFinder(ecModel, finder, opt) {\n    if (isString(finder)) {\n        var obj = {};\n        obj[finder + 'Index'] = 0;\n        finder = obj;\n    }\n\n    var defaultMainType = opt && opt.defaultMainType;\n    if (defaultMainType\n        && !has(finder, defaultMainType + 'Index')\n        && !has(finder, defaultMainType + 'Id')\n        && !has(finder, defaultMainType + 'Name')\n    ) {\n        finder[defaultMainType + 'Index'] = 0;\n    }\n\n    var result = {};\n\n    each$2(finder, function (value, key) {\n        var value = finder[key];\n\n        // Exclude 'dataIndex' and other illgal keys.\n        if (key === 'dataIndex' || key === 'dataIndexInside') {\n            result[key] = value;\n            return;\n        }\n\n        var parsedKey = key.match(/^(\\w+)(Index|Id|Name)$/) || [];\n        var mainType = parsedKey[1];\n        var queryType = (parsedKey[2] || '').toLowerCase();\n\n        if (!mainType\n            || !queryType\n            || value == null\n            || (queryType === 'index' && value === 'none')\n            || (opt && opt.includeMainTypes && indexOf(opt.includeMainTypes, mainType) < 0)\n        ) {\n            return;\n        }\n\n        var queryParam = {mainType: mainType};\n        if (queryType !== 'index' || value !== 'all') {\n            queryParam[queryType] = value;\n        }\n\n        var models = ecModel.queryComponents(queryParam);\n        result[mainType + 'Models'] = models;\n        result[mainType + 'Model'] = models[0];\n    });\n\n    return result;\n}\n\nfunction has(obj, prop) {\n    return obj && obj.hasOwnProperty(prop);\n}\n\nfunction setAttribute(dom, key, value) {\n    dom.setAttribute\n        ? dom.setAttribute(key, value)\n        : (dom[key] = value);\n}\n\nfunction getAttribute(dom, key) {\n    return dom.getAttribute\n        ? dom.getAttribute(key)\n        : dom[key];\n}\n\nfunction getTooltipRenderMode(renderModeOption) {\n    if (renderModeOption === 'auto') {\n        // Using html when `document` exists, use richText otherwise\n        return env$1.domSupported ? 'html' : 'richText';\n    }\n    else {\n        return renderModeOption || 'html';\n    }\n}\n\n/**\n * Group a list by key.\n *\n * @param {Array} array\n * @param {Function} getKey\n *        param {*} Array item\n *        return {string} key\n * @return {Object} Result\n *        {Array}: keys,\n *        {module:zrender/core/util/HashMap} buckets: {key -> Array}\n */\nfunction groupData(array, getKey) {\n    var buckets = createHashMap();\n    var keys = [];\n\n    each$1(array, function (item) {\n        var key = getKey(item);\n        (buckets.get(key)\n            || (keys.push(key), buckets.set(key, []))\n        ).push(item);\n    });\n\n    return {keys: keys, buckets: buckets};\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar TYPE_DELIMITER = '.';\nvar IS_CONTAINER = '___EC__COMPONENT__CONTAINER___';\n\n/**\n * Notice, parseClassType('') should returns {main: '', sub: ''}\n * @public\n */\nfunction parseClassType$1(componentType) {\n    var ret = {main: '', sub: ''};\n    if (componentType) {\n        componentType = componentType.split(TYPE_DELIMITER);\n        ret.main = componentType[0] || '';\n        ret.sub = componentType[1] || '';\n    }\n    return ret;\n}\n\n/**\n * @public\n */\nfunction checkClassType(componentType) {\n    assert$1(\n        /^[a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)?$/.test(componentType),\n        'componentType \"' + componentType + '\" illegal'\n    );\n}\n\n/**\n * @public\n */\nfunction enableClassExtend(RootClass, mandatoryMethods) {\n\n    RootClass.$constructor = RootClass;\n    RootClass.extend = function (proto) {\n\n        if (__DEV__) {\n            each$1(mandatoryMethods, function (method) {\n                if (!proto[method]) {\n                    console.warn(\n                        'Method `' + method + '` should be implemented'\n                        + (proto.type ? ' in ' + proto.type : '') + '.'\n                    );\n                }\n            });\n        }\n\n        var superClass = this;\n        var ExtendedClass = function () {\n            if (!proto.$constructor) {\n                superClass.apply(this, arguments);\n            }\n            else {\n                proto.$constructor.apply(this, arguments);\n            }\n        };\n\n        extend(ExtendedClass.prototype, proto);\n\n        ExtendedClass.extend = this.extend;\n        ExtendedClass.superCall = superCall;\n        ExtendedClass.superApply = superApply;\n        inherits(ExtendedClass, this);\n        ExtendedClass.superClass = superClass;\n\n        return ExtendedClass;\n    };\n}\n\nvar classBase = 0;\n\n/**\n * Can not use instanceof, consider different scope by\n * cross domain or es module import in ec extensions.\n * Mount a method \"isInstance()\" to Clz.\n */\nfunction enableClassCheck(Clz) {\n    var classAttr = ['__\\0is_clz', classBase++, Math.random().toFixed(3)].join('_');\n    Clz.prototype[classAttr] = true;\n\n    if (__DEV__) {\n        assert$1(!Clz.isInstance, 'The method \"is\" can not be defined.');\n    }\n\n    Clz.isInstance = function (obj) {\n        return !!(obj && obj[classAttr]);\n    };\n}\n\n// superCall should have class info, which can not be fetch from 'this'.\n// Consider this case:\n// class A has method f,\n// class B inherits class A, overrides method f, f call superApply('f'),\n// class C inherits class B, do not overrides method f,\n// then when method of class C is called, dead loop occured.\nfunction superCall(context, methodName) {\n    var args = slice(arguments, 2);\n    return this.superClass.prototype[methodName].apply(context, args);\n}\n\nfunction superApply(context, methodName, args) {\n    return this.superClass.prototype[methodName].apply(context, args);\n}\n\n/**\n * @param {Object} entity\n * @param {Object} options\n * @param {boolean} [options.registerWhenExtend]\n * @public\n */\nfunction enableClassManagement(entity, options) {\n    options = options || {};\n\n    /**\n     * Component model classes\n     * key: componentType,\n     * value:\n     *     componentClass, when componentType is 'xxx'\n     *     or Object.<subKey, componentClass>, when componentType is 'xxx.yy'\n     * @type {Object}\n     */\n    var storage = {};\n\n    entity.registerClass = function (Clazz, componentType) {\n        if (componentType) {\n            checkClassType(componentType);\n            componentType = parseClassType$1(componentType);\n\n            if (!componentType.sub) {\n                if (__DEV__) {\n                    if (storage[componentType.main]) {\n                        console.warn(componentType.main + ' exists.');\n                    }\n                }\n                storage[componentType.main] = Clazz;\n            }\n            else if (componentType.sub !== IS_CONTAINER) {\n                var container = makeContainer(componentType);\n                container[componentType.sub] = Clazz;\n            }\n        }\n        return Clazz;\n    };\n\n    entity.getClass = function (componentMainType, subType, throwWhenNotFound) {\n        var Clazz = storage[componentMainType];\n\n        if (Clazz && Clazz[IS_CONTAINER]) {\n            Clazz = subType ? Clazz[subType] : null;\n        }\n\n        if (throwWhenNotFound && !Clazz) {\n            throw new Error(\n                !subType\n                    ? componentMainType + '.' + 'type should be specified.'\n                    : 'Component ' + componentMainType + '.' + (subType || '') + ' not exists. Load it first.'\n            );\n        }\n\n        return Clazz;\n    };\n\n    entity.getClassesByMainType = function (componentType) {\n        componentType = parseClassType$1(componentType);\n\n        var result = [];\n        var obj = storage[componentType.main];\n\n        if (obj && obj[IS_CONTAINER]) {\n            each$1(obj, function (o, type) {\n                type !== IS_CONTAINER && result.push(o);\n            });\n        }\n        else {\n            result.push(obj);\n        }\n\n        return result;\n    };\n\n    entity.hasClass = function (componentType) {\n        // Just consider componentType.main.\n        componentType = parseClassType$1(componentType);\n        return !!storage[componentType.main];\n    };\n\n    /**\n     * @return {Array.<string>} Like ['aa', 'bb'], but can not be ['aa.xx']\n     */\n    entity.getAllClassMainTypes = function () {\n        var types = [];\n        each$1(storage, function (obj, type) {\n            types.push(type);\n        });\n        return types;\n    };\n\n    /**\n     * If a main type is container and has sub types\n     * @param  {string}  mainType\n     * @return {boolean}\n     */\n    entity.hasSubTypes = function (componentType) {\n        componentType = parseClassType$1(componentType);\n        var obj = storage[componentType.main];\n        return obj && obj[IS_CONTAINER];\n    };\n\n    entity.parseClassType = parseClassType$1;\n\n    function makeContainer(componentType) {\n        var container = storage[componentType.main];\n        if (!container || !container[IS_CONTAINER]) {\n            container = storage[componentType.main] = {};\n            container[IS_CONTAINER] = true;\n        }\n        return container;\n    }\n\n    if (options.registerWhenExtend) {\n        var originalExtend = entity.extend;\n        if (originalExtend) {\n            entity.extend = function (proto) {\n                var ExtendedClass = originalExtend.call(this, proto);\n                return entity.registerClass(ExtendedClass, proto.type);\n            };\n        }\n    }\n\n    return entity;\n}\n\n/**\n * @param {string|Array.<string>} properties\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n// TODO Parse shadow style\n// TODO Only shallow path support\nvar makeStyleMapper = function (properties) {\n    // Normalize\n    for (var i = 0; i < properties.length; i++) {\n        if (!properties[i][1]) {\n            properties[i][1] = properties[i][0];\n        }\n    }\n    return function (model, excludes, includes) {\n        var style = {};\n        for (var i = 0; i < properties.length; i++) {\n            var propName = properties[i][1];\n            if ((excludes && indexOf(excludes, propName) >= 0)\n                || (includes && indexOf(includes, propName) < 0)\n            ) {\n                continue;\n            }\n            var val = model.getShallow(propName);\n            if (val != null) {\n                style[properties[i][0]] = val;\n            }\n        }\n        return style;\n    };\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar getLineStyle = makeStyleMapper(\n    [\n        ['lineWidth', 'width'],\n        ['stroke', 'color'],\n        ['opacity'],\n        ['shadowBlur'],\n        ['shadowOffsetX'],\n        ['shadowOffsetY'],\n        ['shadowColor']\n    ]\n);\n\nvar lineStyleMixin = {\n    getLineStyle: function (excludes) {\n        var style = getLineStyle(this, excludes);\n        // Always set lineDash whether dashed, otherwise we can not\n        // erase the previous style when assigning to el.style.\n        style.lineDash = this.getLineDash(style.lineWidth);\n        return style;\n    },\n\n    getLineDash: function (lineWidth) {\n        if (lineWidth == null) {\n            lineWidth = 1;\n        }\n        var lineType = this.get('type');\n        var dotSize = Math.max(lineWidth, 2);\n        var dashSize = lineWidth * 4;\n        return (lineType === 'solid' || lineType == null)\n            // Use `false` but not `null` for the solid line here, because `null` might be\n            // ignored when assigning to `el.style`. e.g., when setting `lineStyle.type` as\n            // `'dashed'` and `emphasis.lineStyle.type` as `'solid'` in graph series, the\n            // `lineDash` gotten form the latter one is not able to erase that from the former\n            // one if using `null` here according to the emhpsis strategy in `util/graphic.js`.\n            ? false\n            : lineType === 'dashed'\n            ? [dashSize, dashSize]\n            : [dotSize, dotSize];\n    }\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar getAreaStyle = makeStyleMapper(\n    [\n        ['fill', 'color'],\n        ['shadowBlur'],\n        ['shadowOffsetX'],\n        ['shadowOffsetY'],\n        ['opacity'],\n        ['shadowColor']\n    ]\n);\n\nvar areaStyleMixin = {\n    getAreaStyle: function (excludes, includes) {\n        return getAreaStyle(this, excludes, includes);\n    }\n};\n\n/**\n * 曲线辅助模块\n * @module zrender/core/curve\n * @author pissang(https://www.github.com/pissang)\n */\n\nvar mathPow = Math.pow;\nvar mathSqrt$2 = Math.sqrt;\n\nvar EPSILON$1 = 1e-8;\nvar EPSILON_NUMERIC = 1e-4;\n\nvar THREE_SQRT = mathSqrt$2(3);\nvar ONE_THIRD = 1 / 3;\n\n// 临时变量\nvar _v0 = create();\nvar _v1 = create();\nvar _v2 = create();\n\nfunction isAroundZero(val) {\n    return val > -EPSILON$1 && val < EPSILON$1;\n}\nfunction isNotAroundZero$1(val) {\n    return val > EPSILON$1 || val < -EPSILON$1;\n}\n/**\n * 计算三次贝塞尔值\n * @memberOf module:zrender/core/curve\n * @param  {number} p0\n * @param  {number} p1\n * @param  {number} p2\n * @param  {number} p3\n * @param  {number} t\n * @return {number}\n */\nfunction cubicAt(p0, p1, p2, p3, t) {\n    var onet = 1 - t;\n    return onet * onet * (onet * p0 + 3 * t * p1)\n            + t * t * (t * p3 + 3 * onet * p2);\n}\n\n/**\n * 计算三次贝塞尔导数值\n * @memberOf module:zrender/core/curve\n * @param  {number} p0\n * @param  {number} p1\n * @param  {number} p2\n * @param  {number} p3\n * @param  {number} t\n * @return {number}\n */\nfunction cubicDerivativeAt(p0, p1, p2, p3, t) {\n    var onet = 1 - t;\n    return 3 * (\n        ((p1 - p0) * onet + 2 * (p2 - p1) * t) * onet\n        + (p3 - p2) * t * t\n    );\n}\n\n/**\n * 计算三次贝塞尔方程根，使用盛金公式\n * @memberOf module:zrender/core/curve\n * @param  {number} p0\n * @param  {number} p1\n * @param  {number} p2\n * @param  {number} p3\n * @param  {number} val\n * @param  {Array.<number>} roots\n * @return {number} 有效根数目\n */\nfunction cubicRootAt(p0, p1, p2, p3, val, roots) {\n    // Evaluate roots of cubic functions\n    var a = p3 + 3 * (p1 - p2) - p0;\n    var b = 3 * (p2 - p1 * 2 + p0);\n    var c = 3 * (p1 - p0);\n    var d = p0 - val;\n\n    var A = b * b - 3 * a * c;\n    var B = b * c - 9 * a * d;\n    var C = c * c - 3 * b * d;\n\n    var n = 0;\n\n    if (isAroundZero(A) && isAroundZero(B)) {\n        if (isAroundZero(b)) {\n            roots[0] = 0;\n        }\n        else {\n            var t1 = -c / b;  //t1, t2, t3, b is not zero\n            if (t1 >= 0 && t1 <= 1) {\n                roots[n++] = t1;\n            }\n        }\n    }\n    else {\n        var disc = B * B - 4 * A * C;\n\n        if (isAroundZero(disc)) {\n            var K = B / A;\n            var t1 = -b / a + K;  // t1, a is not zero\n            var t2 = -K / 2;  // t2, t3\n            if (t1 >= 0 && t1 <= 1) {\n                roots[n++] = t1;\n            }\n            if (t2 >= 0 && t2 <= 1) {\n                roots[n++] = t2;\n            }\n        }\n        else if (disc > 0) {\n            var discSqrt = mathSqrt$2(disc);\n            var Y1 = A * b + 1.5 * a * (-B + discSqrt);\n            var Y2 = A * b + 1.5 * a * (-B - discSqrt);\n            if (Y1 < 0) {\n                Y1 = -mathPow(-Y1, ONE_THIRD);\n            }\n            else {\n                Y1 = mathPow(Y1, ONE_THIRD);\n            }\n            if (Y2 < 0) {\n                Y2 = -mathPow(-Y2, ONE_THIRD);\n            }\n            else {\n                Y2 = mathPow(Y2, ONE_THIRD);\n            }\n            var t1 = (-b - (Y1 + Y2)) / (3 * a);\n            if (t1 >= 0 && t1 <= 1) {\n                roots[n++] = t1;\n            }\n        }\n        else {\n            var T = (2 * A * b - 3 * a * B) / (2 * mathSqrt$2(A * A * A));\n            var theta = Math.acos(T) / 3;\n            var ASqrt = mathSqrt$2(A);\n            var tmp = Math.cos(theta);\n\n            var t1 = (-b - 2 * ASqrt * tmp) / (3 * a);\n            var t2 = (-b + ASqrt * (tmp + THREE_SQRT * Math.sin(theta))) / (3 * a);\n            var t3 = (-b + ASqrt * (tmp - THREE_SQRT * Math.sin(theta))) / (3 * a);\n            if (t1 >= 0 && t1 <= 1) {\n                roots[n++] = t1;\n            }\n            if (t2 >= 0 && t2 <= 1) {\n                roots[n++] = t2;\n            }\n            if (t3 >= 0 && t3 <= 1) {\n                roots[n++] = t3;\n            }\n        }\n    }\n    return n;\n}\n\n/**\n * 计算三次贝塞尔方程极限值的位置\n * @memberOf module:zrender/core/curve\n * @param  {number} p0\n * @param  {number} p1\n * @param  {number} p2\n * @param  {number} p3\n * @param  {Array.<number>} extrema\n * @return {number} 有效数目\n */\nfunction cubicExtrema(p0, p1, p2, p3, extrema) {\n    var b = 6 * p2 - 12 * p1 + 6 * p0;\n    var a = 9 * p1 + 3 * p3 - 3 * p0 - 9 * p2;\n    var c = 3 * p1 - 3 * p0;\n\n    var n = 0;\n    if (isAroundZero(a)) {\n        if (isNotAroundZero$1(b)) {\n            var t1 = -c / b;\n            if (t1 >= 0 && t1 <= 1) {\n                extrema[n++] = t1;\n            }\n        }\n    }\n    else {\n        var disc = b * b - 4 * a * c;\n        if (isAroundZero(disc)) {\n            extrema[0] = -b / (2 * a);\n        }\n        else if (disc > 0) {\n            var discSqrt = mathSqrt$2(disc);\n            var t1 = (-b + discSqrt) / (2 * a);\n            var t2 = (-b - discSqrt) / (2 * a);\n            if (t1 >= 0 && t1 <= 1) {\n                extrema[n++] = t1;\n            }\n            if (t2 >= 0 && t2 <= 1) {\n                extrema[n++] = t2;\n            }\n        }\n    }\n    return n;\n}\n\n/**\n * 细分三次贝塞尔曲线\n * @memberOf module:zrender/core/curve\n * @param  {number} p0\n * @param  {number} p1\n * @param  {number} p2\n * @param  {number} p3\n * @param  {number} t\n * @param  {Array.<number>} out\n */\nfunction cubicSubdivide(p0, p1, p2, p3, t, out) {\n    var p01 = (p1 - p0) * t + p0;\n    var p12 = (p2 - p1) * t + p1;\n    var p23 = (p3 - p2) * t + p2;\n\n    var p012 = (p12 - p01) * t + p01;\n    var p123 = (p23 - p12) * t + p12;\n\n    var p0123 = (p123 - p012) * t + p012;\n    // Seg0\n    out[0] = p0;\n    out[1] = p01;\n    out[2] = p012;\n    out[3] = p0123;\n    // Seg1\n    out[4] = p0123;\n    out[5] = p123;\n    out[6] = p23;\n    out[7] = p3;\n}\n\n/**\n * 投射点到三次贝塞尔曲线上，返回投射距离。\n * 投射点有可能会有一个或者多个，这里只返回其中距离最短的一个。\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @param {number} x3\n * @param {number} y3\n * @param {number} x\n * @param {number} y\n * @param {Array.<number>} [out] 投射点\n * @return {number}\n */\nfunction cubicProjectPoint(\n    x0, y0, x1, y1, x2, y2, x3, y3,\n    x, y, out\n) {\n    // http://pomax.github.io/bezierinfo/#projections\n    var t;\n    var interval = 0.005;\n    var d = Infinity;\n    var prev;\n    var next;\n    var d1;\n    var d2;\n\n    _v0[0] = x;\n    _v0[1] = y;\n\n    // 先粗略估计一下可能的最小距离的 t 值\n    // PENDING\n    for (var _t = 0; _t < 1; _t += 0.05) {\n        _v1[0] = cubicAt(x0, x1, x2, x3, _t);\n        _v1[1] = cubicAt(y0, y1, y2, y3, _t);\n        d1 = distSquare(_v0, _v1);\n        if (d1 < d) {\n            t = _t;\n            d = d1;\n        }\n    }\n    d = Infinity;\n\n    // At most 32 iteration\n    for (var i = 0; i < 32; i++) {\n        if (interval < EPSILON_NUMERIC) {\n            break;\n        }\n        prev = t - interval;\n        next = t + interval;\n        // t - interval\n        _v1[0] = cubicAt(x0, x1, x2, x3, prev);\n        _v1[1] = cubicAt(y0, y1, y2, y3, prev);\n\n        d1 = distSquare(_v1, _v0);\n\n        if (prev >= 0 && d1 < d) {\n            t = prev;\n            d = d1;\n        }\n        else {\n            // t + interval\n            _v2[0] = cubicAt(x0, x1, x2, x3, next);\n            _v2[1] = cubicAt(y0, y1, y2, y3, next);\n            d2 = distSquare(_v2, _v0);\n\n            if (next <= 1 && d2 < d) {\n                t = next;\n                d = d2;\n            }\n            else {\n                interval *= 0.5;\n            }\n        }\n    }\n    // t\n    if (out) {\n        out[0] = cubicAt(x0, x1, x2, x3, t);\n        out[1] = cubicAt(y0, y1, y2, y3, t);\n    }\n    // console.log(interval, i);\n    return mathSqrt$2(d);\n}\n\n/**\n * 计算二次方贝塞尔值\n * @param  {number} p0\n * @param  {number} p1\n * @param  {number} p2\n * @param  {number} t\n * @return {number}\n */\nfunction quadraticAt(p0, p1, p2, t) {\n    var onet = 1 - t;\n    return onet * (onet * p0 + 2 * t * p1) + t * t * p2;\n}\n\n/**\n * 计算二次方贝塞尔导数值\n * @param  {number} p0\n * @param  {number} p1\n * @param  {number} p2\n * @param  {number} t\n * @return {number}\n */\nfunction quadraticDerivativeAt(p0, p1, p2, t) {\n    return 2 * ((1 - t) * (p1 - p0) + t * (p2 - p1));\n}\n\n/**\n * 计算二次方贝塞尔方程根\n * @param  {number} p0\n * @param  {number} p1\n * @param  {number} p2\n * @param  {number} t\n * @param  {Array.<number>} roots\n * @return {number} 有效根数目\n */\nfunction quadraticRootAt(p0, p1, p2, val, roots) {\n    var a = p0 - 2 * p1 + p2;\n    var b = 2 * (p1 - p0);\n    var c = p0 - val;\n\n    var n = 0;\n    if (isAroundZero(a)) {\n        if (isNotAroundZero$1(b)) {\n            var t1 = -c / b;\n            if (t1 >= 0 && t1 <= 1) {\n                roots[n++] = t1;\n            }\n        }\n    }\n    else {\n        var disc = b * b - 4 * a * c;\n        if (isAroundZero(disc)) {\n            var t1 = -b / (2 * a);\n            if (t1 >= 0 && t1 <= 1) {\n                roots[n++] = t1;\n            }\n        }\n        else if (disc > 0) {\n            var discSqrt = mathSqrt$2(disc);\n            var t1 = (-b + discSqrt) / (2 * a);\n            var t2 = (-b - discSqrt) / (2 * a);\n            if (t1 >= 0 && t1 <= 1) {\n                roots[n++] = t1;\n            }\n            if (t2 >= 0 && t2 <= 1) {\n                roots[n++] = t2;\n            }\n        }\n    }\n    return n;\n}\n\n/**\n * 计算二次贝塞尔方程极限值\n * @memberOf module:zrender/core/curve\n * @param  {number} p0\n * @param  {number} p1\n * @param  {number} p2\n * @return {number}\n */\nfunction quadraticExtremum(p0, p1, p2) {\n    var divider = p0 + p2 - 2 * p1;\n    if (divider === 0) {\n        // p1 is center of p0 and p2\n        return 0.5;\n    }\n    else {\n        return (p0 - p1) / divider;\n    }\n}\n\n/**\n * 细分二次贝塞尔曲线\n * @memberOf module:zrender/core/curve\n * @param  {number} p0\n * @param  {number} p1\n * @param  {number} p2\n * @param  {number} t\n * @param  {Array.<number>} out\n */\nfunction quadraticSubdivide(p0, p1, p2, t, out) {\n    var p01 = (p1 - p0) * t + p0;\n    var p12 = (p2 - p1) * t + p1;\n    var p012 = (p12 - p01) * t + p01;\n\n    // Seg0\n    out[0] = p0;\n    out[1] = p01;\n    out[2] = p012;\n\n    // Seg1\n    out[3] = p012;\n    out[4] = p12;\n    out[5] = p2;\n}\n\n/**\n * 投射点到二次贝塞尔曲线上，返回投射距离。\n * 投射点有可能会有一个或者多个，这里只返回其中距离最短的一个。\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @param {number} x\n * @param {number} y\n * @param {Array.<number>} out 投射点\n * @return {number}\n */\nfunction quadraticProjectPoint(\n    x0, y0, x1, y1, x2, y2,\n    x, y, out\n) {\n    // http://pomax.github.io/bezierinfo/#projections\n    var t;\n    var interval = 0.005;\n    var d = Infinity;\n\n    _v0[0] = x;\n    _v0[1] = y;\n\n    // 先粗略估计一下可能的最小距离的 t 值\n    // PENDING\n    for (var _t = 0; _t < 1; _t += 0.05) {\n        _v1[0] = quadraticAt(x0, x1, x2, _t);\n        _v1[1] = quadraticAt(y0, y1, y2, _t);\n        var d1 = distSquare(_v0, _v1);\n        if (d1 < d) {\n            t = _t;\n            d = d1;\n        }\n    }\n    d = Infinity;\n\n    // At most 32 iteration\n    for (var i = 0; i < 32; i++) {\n        if (interval < EPSILON_NUMERIC) {\n            break;\n        }\n        var prev = t - interval;\n        var next = t + interval;\n        // t - interval\n        _v1[0] = quadraticAt(x0, x1, x2, prev);\n        _v1[1] = quadraticAt(y0, y1, y2, prev);\n\n        var d1 = distSquare(_v1, _v0);\n\n        if (prev >= 0 && d1 < d) {\n            t = prev;\n            d = d1;\n        }\n        else {\n            // t + interval\n            _v2[0] = quadraticAt(x0, x1, x2, next);\n            _v2[1] = quadraticAt(y0, y1, y2, next);\n            var d2 = distSquare(_v2, _v0);\n            if (next <= 1 && d2 < d) {\n                t = next;\n                d = d2;\n            }\n            else {\n                interval *= 0.5;\n            }\n        }\n    }\n    // t\n    if (out) {\n        out[0] = quadraticAt(x0, x1, x2, t);\n        out[1] = quadraticAt(y0, y1, y2, t);\n    }\n    // console.log(interval, i);\n    return mathSqrt$2(d);\n}\n\n/**\n * @author Yi Shen(https://github.com/pissang)\n */\n\nvar mathMin$3 = Math.min;\nvar mathMax$3 = Math.max;\nvar mathSin$2 = Math.sin;\nvar mathCos$2 = Math.cos;\nvar PI2 = Math.PI * 2;\n\nvar start = create();\nvar end = create();\nvar extremity = create();\n\n/**\n * 从顶点数组中计算出最小包围盒，写入`min`和`max`中\n * @module zrender/core/bbox\n * @param {Array<Object>} points 顶点数组\n * @param {number} min\n * @param {number} max\n */\nfunction fromPoints(points, min$$1, max$$1) {\n    if (points.length === 0) {\n        return;\n    }\n    var p = points[0];\n    var left = p[0];\n    var right = p[0];\n    var top = p[1];\n    var bottom = p[1];\n    var i;\n\n    for (i = 1; i < points.length; i++) {\n        p = points[i];\n        left = mathMin$3(left, p[0]);\n        right = mathMax$3(right, p[0]);\n        top = mathMin$3(top, p[1]);\n        bottom = mathMax$3(bottom, p[1]);\n    }\n\n    min$$1[0] = left;\n    min$$1[1] = top;\n    max$$1[0] = right;\n    max$$1[1] = bottom;\n}\n\n/**\n * @memberOf module:zrender/core/bbox\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @param {Array.<number>} min\n * @param {Array.<number>} max\n */\nfunction fromLine(x0, y0, x1, y1, min$$1, max$$1) {\n    min$$1[0] = mathMin$3(x0, x1);\n    min$$1[1] = mathMin$3(y0, y1);\n    max$$1[0] = mathMax$3(x0, x1);\n    max$$1[1] = mathMax$3(y0, y1);\n}\n\nvar xDim = [];\nvar yDim = [];\n/**\n * 从三阶贝塞尔曲线(p0, p1, p2, p3)中计算出最小包围盒，写入`min`和`max`中\n * @memberOf module:zrender/core/bbox\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @param {number} x3\n * @param {number} y3\n * @param {Array.<number>} min\n * @param {Array.<number>} max\n */\nfunction fromCubic(\n    x0, y0, x1, y1, x2, y2, x3, y3, min$$1, max$$1\n) {\n    var cubicExtrema$$1 = cubicExtrema;\n    var cubicAt$$1 = cubicAt;\n    var i;\n    var n = cubicExtrema$$1(x0, x1, x2, x3, xDim);\n    min$$1[0] = Infinity;\n    min$$1[1] = Infinity;\n    max$$1[0] = -Infinity;\n    max$$1[1] = -Infinity;\n\n    for (i = 0; i < n; i++) {\n        var x = cubicAt$$1(x0, x1, x2, x3, xDim[i]);\n        min$$1[0] = mathMin$3(x, min$$1[0]);\n        max$$1[0] = mathMax$3(x, max$$1[0]);\n    }\n    n = cubicExtrema$$1(y0, y1, y2, y3, yDim);\n    for (i = 0; i < n; i++) {\n        var y = cubicAt$$1(y0, y1, y2, y3, yDim[i]);\n        min$$1[1] = mathMin$3(y, min$$1[1]);\n        max$$1[1] = mathMax$3(y, max$$1[1]);\n    }\n\n    min$$1[0] = mathMin$3(x0, min$$1[0]);\n    max$$1[0] = mathMax$3(x0, max$$1[0]);\n    min$$1[0] = mathMin$3(x3, min$$1[0]);\n    max$$1[0] = mathMax$3(x3, max$$1[0]);\n\n    min$$1[1] = mathMin$3(y0, min$$1[1]);\n    max$$1[1] = mathMax$3(y0, max$$1[1]);\n    min$$1[1] = mathMin$3(y3, min$$1[1]);\n    max$$1[1] = mathMax$3(y3, max$$1[1]);\n}\n\n/**\n * 从二阶贝塞尔曲线(p0, p1, p2)中计算出最小包围盒，写入`min`和`max`中\n * @memberOf module:zrender/core/bbox\n * @param {number} x0\n * @param {number} y0\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @param {Array.<number>} min\n * @param {Array.<number>} max\n */\nfunction fromQuadratic(x0, y0, x1, y1, x2, y2, min$$1, max$$1) {\n    var quadraticExtremum$$1 = quadraticExtremum;\n    var quadraticAt$$1 = quadraticAt;\n    // Find extremities, where derivative in x dim or y dim is zero\n    var tx =\n        mathMax$3(\n            mathMin$3(quadraticExtremum$$1(x0, x1, x2), 1), 0\n        );\n    var ty =\n        mathMax$3(\n            mathMin$3(quadraticExtremum$$1(y0, y1, y2), 1), 0\n        );\n\n    var x = quadraticAt$$1(x0, x1, x2, tx);\n    var y = quadraticAt$$1(y0, y1, y2, ty);\n\n    min$$1[0] = mathMin$3(x0, x2, x);\n    min$$1[1] = mathMin$3(y0, y2, y);\n    max$$1[0] = mathMax$3(x0, x2, x);\n    max$$1[1] = mathMax$3(y0, y2, y);\n}\n\n/**\n * 从圆弧中计算出最小包围盒，写入`min`和`max`中\n * @method\n * @memberOf module:zrender/core/bbox\n * @param {number} x\n * @param {number} y\n * @param {number} rx\n * @param {number} ry\n * @param {number} startAngle\n * @param {number} endAngle\n * @param {number} anticlockwise\n * @param {Array.<number>} min\n * @param {Array.<number>} max\n */\nfunction fromArc(\n    x, y, rx, ry, startAngle, endAngle, anticlockwise, min$$1, max$$1\n) {\n    var vec2Min = min;\n    var vec2Max = max;\n\n    var diff = Math.abs(startAngle - endAngle);\n\n\n    if (diff % PI2 < 1e-4 && diff > 1e-4) {\n        // Is a circle\n        min$$1[0] = x - rx;\n        min$$1[1] = y - ry;\n        max$$1[0] = x + rx;\n        max$$1[1] = y + ry;\n        return;\n    }\n\n    start[0] = mathCos$2(startAngle) * rx + x;\n    start[1] = mathSin$2(startAngle) * ry + y;\n\n    end[0] = mathCos$2(endAngle) * rx + x;\n    end[1] = mathSin$2(endAngle) * ry + y;\n\n    vec2Min(min$$1, start, end);\n    vec2Max(max$$1, start, end);\n\n    // Thresh to [0, Math.PI * 2]\n    startAngle = startAngle % (PI2);\n    if (startAngle < 0) {\n        startAngle = startAngle + PI2;\n    }\n    endAngle = endAngle % (PI2);\n    if (endAngle < 0) {\n        endAngle = endAngle + PI2;\n    }\n\n    if (startAngle > endAngle && !anticlockwise) {\n        endAngle += PI2;\n    }\n    else if (startAngle < endAngle && anticlockwise) {\n        startAngle += PI2;\n    }\n    if (anticlockwise) {\n        var tmp = endAngle;\n        endAngle = startAngle;\n        startAngle = tmp;\n    }\n\n    // var number = 0;\n    // var step = (anticlockwise ? -Math.PI : Math.PI) / 2;\n    for (var angle = 0; angle < endAngle; angle += Math.PI / 2) {\n        if (angle > startAngle) {\n            extremity[0] = mathCos$2(angle) * rx + x;\n            extremity[1] = mathSin$2(angle) * ry + y;\n\n            vec2Min(min$$1, extremity, min$$1);\n            vec2Max(max$$1, extremity, max$$1);\n        }\n    }\n}\n\n/**\n * Path 代理，可以在`buildPath`中用于替代`ctx`, 会保存每个path操作的命令到pathCommands属性中\n * 可以用于 isInsidePath 判断以及获取boundingRect\n *\n * @module zrender/core/PathProxy\n * @author Yi Shen (http://www.github.com/pissang)\n */\n\n// TODO getTotalLength, getPointAtLength\n\nvar CMD = {\n    M: 1,\n    L: 2,\n    C: 3,\n    Q: 4,\n    A: 5,\n    Z: 6,\n    // Rect\n    R: 7\n};\n\n// var CMD_MEM_SIZE = {\n//     M: 3,\n//     L: 3,\n//     C: 7,\n//     Q: 5,\n//     A: 9,\n//     R: 5,\n//     Z: 1\n// };\n\nvar min$1 = [];\nvar max$1 = [];\nvar min2 = [];\nvar max2 = [];\nvar mathMin$2 = Math.min;\nvar mathMax$2 = Math.max;\nvar mathCos$1 = Math.cos;\nvar mathSin$1 = Math.sin;\nvar mathSqrt$1 = Math.sqrt;\nvar mathAbs = Math.abs;\n\nvar hasTypedArray = typeof Float32Array !== 'undefined';\n\n/**\n * @alias module:zrender/core/PathProxy\n * @constructor\n */\nvar PathProxy = function (notSaveData) {\n\n    this._saveData = !(notSaveData || false);\n\n    if (this._saveData) {\n        /**\n         * Path data. Stored as flat array\n         * @type {Array.<Object>}\n         */\n        this.data = [];\n    }\n\n    this._ctx = null;\n};\n\n/**\n * 快速计算Path包围盒（并不是最小包围盒）\n * @return {Object}\n */\nPathProxy.prototype = {\n\n    constructor: PathProxy,\n\n    _xi: 0,\n    _yi: 0,\n\n    _x0: 0,\n    _y0: 0,\n    // Unit x, Unit y. Provide for avoiding drawing that too short line segment\n    _ux: 0,\n    _uy: 0,\n\n    _len: 0,\n\n    _lineDash: null,\n\n    _dashOffset: 0,\n\n    _dashIdx: 0,\n\n    _dashSum: 0,\n\n    /**\n     * @readOnly\n     */\n    setScale: function (sx, sy, segmentIgnoreThreshold) {\n        // Compat. Previously there is no segmentIgnoreThreshold.\n        segmentIgnoreThreshold = segmentIgnoreThreshold || 0;\n        this._ux = mathAbs(segmentIgnoreThreshold / devicePixelRatio / sx) || 0;\n        this._uy = mathAbs(segmentIgnoreThreshold / devicePixelRatio / sy) || 0;\n    },\n\n    getContext: function () {\n        return this._ctx;\n    },\n\n    /**\n     * @param  {CanvasRenderingContext2D} ctx\n     * @return {module:zrender/core/PathProxy}\n     */\n    beginPath: function (ctx) {\n\n        this._ctx = ctx;\n\n        ctx && ctx.beginPath();\n\n        ctx && (this.dpr = ctx.dpr);\n\n        // Reset\n        if (this._saveData) {\n            this._len = 0;\n        }\n\n        if (this._lineDash) {\n            this._lineDash = null;\n\n            this._dashOffset = 0;\n        }\n\n        return this;\n    },\n\n    /**\n     * @param  {number} x\n     * @param  {number} y\n     * @return {module:zrender/core/PathProxy}\n     */\n    moveTo: function (x, y) {\n        this.addData(CMD.M, x, y);\n        this._ctx && this._ctx.moveTo(x, y);\n\n        // x0, y0, xi, yi 是记录在 _dashedXXXXTo 方法中使用\n        // xi, yi 记录当前点, x0, y0 在 closePath 的时候回到起始点。\n        // 有可能在 beginPath 之后直接调用 lineTo，这时候 x0, y0 需要\n        // 在 lineTo 方法中记录，这里先不考虑这种情况，dashed line 也只在 IE10- 中不支持\n        this._x0 = x;\n        this._y0 = y;\n\n        this._xi = x;\n        this._yi = y;\n\n        return this;\n    },\n\n    /**\n     * @param  {number} x\n     * @param  {number} y\n     * @return {module:zrender/core/PathProxy}\n     */\n    lineTo: function (x, y) {\n        var exceedUnit = mathAbs(x - this._xi) > this._ux\n            || mathAbs(y - this._yi) > this._uy\n            // Force draw the first segment\n            || this._len < 5;\n\n        this.addData(CMD.L, x, y);\n\n        if (this._ctx && exceedUnit) {\n            this._needsDash() ? this._dashedLineTo(x, y)\n                : this._ctx.lineTo(x, y);\n        }\n        if (exceedUnit) {\n            this._xi = x;\n            this._yi = y;\n        }\n\n        return this;\n    },\n\n    /**\n     * @param  {number} x1\n     * @param  {number} y1\n     * @param  {number} x2\n     * @param  {number} y2\n     * @param  {number} x3\n     * @param  {number} y3\n     * @return {module:zrender/core/PathProxy}\n     */\n    bezierCurveTo: function (x1, y1, x2, y2, x3, y3) {\n        this.addData(CMD.C, x1, y1, x2, y2, x3, y3);\n        if (this._ctx) {\n            this._needsDash() ? this._dashedBezierTo(x1, y1, x2, y2, x3, y3)\n                : this._ctx.bezierCurveTo(x1, y1, x2, y2, x3, y3);\n        }\n        this._xi = x3;\n        this._yi = y3;\n        return this;\n    },\n\n    /**\n     * @param  {number} x1\n     * @param  {number} y1\n     * @param  {number} x2\n     * @param  {number} y2\n     * @return {module:zrender/core/PathProxy}\n     */\n    quadraticCurveTo: function (x1, y1, x2, y2) {\n        this.addData(CMD.Q, x1, y1, x2, y2);\n        if (this._ctx) {\n            this._needsDash() ? this._dashedQuadraticTo(x1, y1, x2, y2)\n                : this._ctx.quadraticCurveTo(x1, y1, x2, y2);\n        }\n        this._xi = x2;\n        this._yi = y2;\n        return this;\n    },\n\n    /**\n     * @param  {number} cx\n     * @param  {number} cy\n     * @param  {number} r\n     * @param  {number} startAngle\n     * @param  {number} endAngle\n     * @param  {boolean} anticlockwise\n     * @return {module:zrender/core/PathProxy}\n     */\n    arc: function (cx, cy, r, startAngle, endAngle, anticlockwise) {\n        this.addData(\n            CMD.A, cx, cy, r, r, startAngle, endAngle - startAngle, 0, anticlockwise ? 0 : 1\n        );\n        this._ctx && this._ctx.arc(cx, cy, r, startAngle, endAngle, anticlockwise);\n\n        this._xi = mathCos$1(endAngle) * r + cx;\n        this._yi = mathSin$1(endAngle) * r + cy;\n        return this;\n    },\n\n    // TODO\n    arcTo: function (x1, y1, x2, y2, radius) {\n        if (this._ctx) {\n            this._ctx.arcTo(x1, y1, x2, y2, radius);\n        }\n        return this;\n    },\n\n    // TODO\n    rect: function (x, y, w, h) {\n        this._ctx && this._ctx.rect(x, y, w, h);\n        this.addData(CMD.R, x, y, w, h);\n        return this;\n    },\n\n    /**\n     * @return {module:zrender/core/PathProxy}\n     */\n    closePath: function () {\n        this.addData(CMD.Z);\n\n        var ctx = this._ctx;\n        var x0 = this._x0;\n        var y0 = this._y0;\n        if (ctx) {\n            this._needsDash() && this._dashedLineTo(x0, y0);\n            ctx.closePath();\n        }\n\n        this._xi = x0;\n        this._yi = y0;\n        return this;\n    },\n\n    /**\n     * Context 从外部传入，因为有可能是 rebuildPath 完之后再 fill。\n     * stroke 同样\n     * @param {CanvasRenderingContext2D} ctx\n     * @return {module:zrender/core/PathProxy}\n     */\n    fill: function (ctx) {\n        ctx && ctx.fill();\n        this.toStatic();\n    },\n\n    /**\n     * @param {CanvasRenderingContext2D} ctx\n     * @return {module:zrender/core/PathProxy}\n     */\n    stroke: function (ctx) {\n        ctx && ctx.stroke();\n        this.toStatic();\n    },\n\n    /**\n     * 必须在其它绘制命令前调用\n     * Must be invoked before all other path drawing methods\n     * @return {module:zrender/core/PathProxy}\n     */\n    setLineDash: function (lineDash) {\n        if (lineDash instanceof Array) {\n            this._lineDash = lineDash;\n\n            this._dashIdx = 0;\n\n            var lineDashSum = 0;\n            for (var i = 0; i < lineDash.length; i++) {\n                lineDashSum += lineDash[i];\n            }\n            this._dashSum = lineDashSum;\n        }\n        return this;\n    },\n\n    /**\n     * 必须在其它绘制命令前调用\n     * Must be invoked before all other path drawing methods\n     * @return {module:zrender/core/PathProxy}\n     */\n    setLineDashOffset: function (offset) {\n        this._dashOffset = offset;\n        return this;\n    },\n\n    /**\n     *\n     * @return {boolean}\n     */\n    len: function () {\n        return this._len;\n    },\n\n    /**\n     * 直接设置 Path 数据\n     */\n    setData: function (data) {\n\n        var len$$1 = data.length;\n\n        if (!(this.data && this.data.length === len$$1) && hasTypedArray) {\n            this.data = new Float32Array(len$$1);\n        }\n\n        for (var i = 0; i < len$$1; i++) {\n            this.data[i] = data[i];\n        }\n\n        this._len = len$$1;\n    },\n\n    /**\n     * 添加子路径\n     * @param {module:zrender/core/PathProxy|Array.<module:zrender/core/PathProxy>} path\n     */\n    appendPath: function (path) {\n        if (!(path instanceof Array)) {\n            path = [path];\n        }\n        var len$$1 = path.length;\n        var appendSize = 0;\n        var offset = this._len;\n        for (var i = 0; i < len$$1; i++) {\n            appendSize += path[i].len();\n        }\n        if (hasTypedArray && (this.data instanceof Float32Array)) {\n            this.data = new Float32Array(offset + appendSize);\n        }\n        for (var i = 0; i < len$$1; i++) {\n            var appendPathData = path[i].data;\n            for (var k = 0; k < appendPathData.length; k++) {\n                this.data[offset++] = appendPathData[k];\n            }\n        }\n        this._len = offset;\n    },\n\n    /**\n     * 填充 Path 数据。\n     * 尽量复用而不申明新的数组。大部分图形重绘的指令数据长度都是不变的。\n     */\n    addData: function (cmd) {\n        if (!this._saveData) {\n            return;\n        }\n\n        var data = this.data;\n        if (this._len + arguments.length > data.length) {\n            // 因为之前的数组已经转换成静态的 Float32Array\n            // 所以不够用时需要扩展一个新的动态数组\n            this._expandData();\n            data = this.data;\n        }\n        for (var i = 0; i < arguments.length; i++) {\n            data[this._len++] = arguments[i];\n        }\n\n        this._prevCmd = cmd;\n    },\n\n    _expandData: function () {\n        // Only if data is Float32Array\n        if (!(this.data instanceof Array)) {\n            var newData = [];\n            for (var i = 0; i < this._len; i++) {\n                newData[i] = this.data[i];\n            }\n            this.data = newData;\n        }\n    },\n\n    /**\n     * If needs js implemented dashed line\n     * @return {boolean}\n     * @private\n     */\n    _needsDash: function () {\n        return this._lineDash;\n    },\n\n    _dashedLineTo: function (x1, y1) {\n        var dashSum = this._dashSum;\n        var offset = this._dashOffset;\n        var lineDash = this._lineDash;\n        var ctx = this._ctx;\n\n        var x0 = this._xi;\n        var y0 = this._yi;\n        var dx = x1 - x0;\n        var dy = y1 - y0;\n        var dist$$1 = mathSqrt$1(dx * dx + dy * dy);\n        var x = x0;\n        var y = y0;\n        var dash;\n        var nDash = lineDash.length;\n        var idx;\n        dx /= dist$$1;\n        dy /= dist$$1;\n\n        if (offset < 0) {\n            // Convert to positive offset\n            offset = dashSum + offset;\n        }\n        offset %= dashSum;\n        x -= offset * dx;\n        y -= offset * dy;\n\n        while ((dx > 0 && x <= x1) || (dx < 0 && x >= x1)\n        || (dx === 0 && ((dy > 0 && y <= y1) || (dy < 0 && y >= y1)))) {\n            idx = this._dashIdx;\n            dash = lineDash[idx];\n            x += dx * dash;\n            y += dy * dash;\n            this._dashIdx = (idx + 1) % nDash;\n            // Skip positive offset\n            if ((dx > 0 && x < x0) || (dx < 0 && x > x0) || (dy > 0 && y < y0) || (dy < 0 && y > y0)) {\n                continue;\n            }\n            ctx[idx % 2 ? 'moveTo' : 'lineTo'](\n                dx >= 0 ? mathMin$2(x, x1) : mathMax$2(x, x1),\n                dy >= 0 ? mathMin$2(y, y1) : mathMax$2(y, y1)\n            );\n        }\n        // Offset for next lineTo\n        dx = x - x1;\n        dy = y - y1;\n        this._dashOffset = -mathSqrt$1(dx * dx + dy * dy);\n    },\n\n    // Not accurate dashed line to\n    _dashedBezierTo: function (x1, y1, x2, y2, x3, y3) {\n        var dashSum = this._dashSum;\n        var offset = this._dashOffset;\n        var lineDash = this._lineDash;\n        var ctx = this._ctx;\n\n        var x0 = this._xi;\n        var y0 = this._yi;\n        var t;\n        var dx;\n        var dy;\n        var cubicAt$$1 = cubicAt;\n        var bezierLen = 0;\n        var idx = this._dashIdx;\n        var nDash = lineDash.length;\n\n        var x;\n        var y;\n\n        var tmpLen = 0;\n\n        if (offset < 0) {\n            // Convert to positive offset\n            offset = dashSum + offset;\n        }\n        offset %= dashSum;\n        // Bezier approx length\n        for (t = 0; t < 1; t += 0.1) {\n            dx = cubicAt$$1(x0, x1, x2, x3, t + 0.1)\n                - cubicAt$$1(x0, x1, x2, x3, t);\n            dy = cubicAt$$1(y0, y1, y2, y3, t + 0.1)\n                - cubicAt$$1(y0, y1, y2, y3, t);\n            bezierLen += mathSqrt$1(dx * dx + dy * dy);\n        }\n\n        // Find idx after add offset\n        for (; idx < nDash; idx++) {\n            tmpLen += lineDash[idx];\n            if (tmpLen > offset) {\n                break;\n            }\n        }\n        t = (tmpLen - offset) / bezierLen;\n\n        while (t <= 1) {\n\n            x = cubicAt$$1(x0, x1, x2, x3, t);\n            y = cubicAt$$1(y0, y1, y2, y3, t);\n\n            // Use line to approximate dashed bezier\n            // Bad result if dash is long\n            idx % 2 ? ctx.moveTo(x, y)\n                : ctx.lineTo(x, y);\n\n            t += lineDash[idx] / bezierLen;\n\n            idx = (idx + 1) % nDash;\n        }\n\n        // Finish the last segment and calculate the new offset\n        (idx % 2 !== 0) && ctx.lineTo(x3, y3);\n        dx = x3 - x;\n        dy = y3 - y;\n        this._dashOffset = -mathSqrt$1(dx * dx + dy * dy);\n    },\n\n    _dashedQuadraticTo: function (x1, y1, x2, y2) {\n        // Convert quadratic to cubic using degree elevation\n        var x3 = x2;\n        var y3 = y2;\n        x2 = (x2 + 2 * x1) / 3;\n        y2 = (y2 + 2 * y1) / 3;\n        x1 = (this._xi + 2 * x1) / 3;\n        y1 = (this._yi + 2 * y1) / 3;\n\n        this._dashedBezierTo(x1, y1, x2, y2, x3, y3);\n    },\n\n    /**\n     * 转成静态的 Float32Array 减少堆内存占用\n     * Convert dynamic array to static Float32Array\n     */\n    toStatic: function () {\n        var data = this.data;\n        if (data instanceof Array) {\n            data.length = this._len;\n            if (hasTypedArray) {\n                this.data = new Float32Array(data);\n            }\n        }\n    },\n\n    /**\n     * @return {module:zrender/core/BoundingRect}\n     */\n    getBoundingRect: function () {\n        min$1[0] = min$1[1] = min2[0] = min2[1] = Number.MAX_VALUE;\n        max$1[0] = max$1[1] = max2[0] = max2[1] = -Number.MAX_VALUE;\n\n        var data = this.data;\n        var xi = 0;\n        var yi = 0;\n        var x0 = 0;\n        var y0 = 0;\n\n        for (var i = 0; i < data.length;) {\n            var cmd = data[i++];\n\n            if (i === 1) {\n                // 如果第一个命令是 L, C, Q\n                // 则 previous point 同绘制命令的第一个 point\n                //\n                // 第一个命令为 Arc 的情况下会在后面特殊处理\n                xi = data[i];\n                yi = data[i + 1];\n\n                x0 = xi;\n                y0 = yi;\n            }\n\n            switch (cmd) {\n                case CMD.M:\n                    // moveTo 命令重新创建一个新的 subpath, 并且更新新的起点\n                    // 在 closePath 的时候使用\n                    x0 = data[i++];\n                    y0 = data[i++];\n                    xi = x0;\n                    yi = y0;\n                    min2[0] = x0;\n                    min2[1] = y0;\n                    max2[0] = x0;\n                    max2[1] = y0;\n                    break;\n                case CMD.L:\n                    fromLine(xi, yi, data[i], data[i + 1], min2, max2);\n                    xi = data[i++];\n                    yi = data[i++];\n                    break;\n                case CMD.C:\n                    fromCubic(\n                        xi, yi, data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1],\n                        min2, max2\n                    );\n                    xi = data[i++];\n                    yi = data[i++];\n                    break;\n                case CMD.Q:\n                    fromQuadratic(\n                        xi, yi, data[i++], data[i++], data[i], data[i + 1],\n                        min2, max2\n                    );\n                    xi = data[i++];\n                    yi = data[i++];\n                    break;\n                case CMD.A:\n                    // TODO Arc 判断的开销比较大\n                    var cx = data[i++];\n                    var cy = data[i++];\n                    var rx = data[i++];\n                    var ry = data[i++];\n                    var startAngle = data[i++];\n                    var endAngle = data[i++] + startAngle;\n                    // TODO Arc 旋转\n                    i += 1;\n                    var anticlockwise = 1 - data[i++];\n\n                    if (i === 1) {\n                        // 直接使用 arc 命令\n                        // 第一个命令起点还未定义\n                        x0 = mathCos$1(startAngle) * rx + cx;\n                        y0 = mathSin$1(startAngle) * ry + cy;\n                    }\n\n                    fromArc(\n                        cx, cy, rx, ry, startAngle, endAngle,\n                        anticlockwise, min2, max2\n                    );\n\n                    xi = mathCos$1(endAngle) * rx + cx;\n                    yi = mathSin$1(endAngle) * ry + cy;\n                    break;\n                case CMD.R:\n                    x0 = xi = data[i++];\n                    y0 = yi = data[i++];\n                    var width = data[i++];\n                    var height = data[i++];\n                    // Use fromLine\n                    fromLine(x0, y0, x0 + width, y0 + height, min2, max2);\n                    break;\n                case CMD.Z:\n                    xi = x0;\n                    yi = y0;\n                    break;\n            }\n\n            // Union\n            min(min$1, min$1, min2);\n            max(max$1, max$1, max2);\n        }\n\n        // No data\n        if (i === 0) {\n            min$1[0] = min$1[1] = max$1[0] = max$1[1] = 0;\n        }\n\n        return new BoundingRect(\n            min$1[0], min$1[1], max$1[0] - min$1[0], max$1[1] - min$1[1]\n        );\n    },\n\n    /**\n     * Rebuild path from current data\n     * Rebuild path will not consider javascript implemented line dash.\n     * @param {CanvasRenderingContext2D} ctx\n     */\n    rebuildPath: function (ctx) {\n        var d = this.data;\n        var x0, y0;\n        var xi, yi;\n        var x, y;\n        var ux = this._ux;\n        var uy = this._uy;\n        var len$$1 = this._len;\n        for (var i = 0; i < len$$1;) {\n            var cmd = d[i++];\n\n            if (i === 1) {\n                // 如果第一个命令是 L, C, Q\n                // 则 previous point 同绘制命令的第一个 point\n                //\n                // 第一个命令为 Arc 的情况下会在后面特殊处理\n                xi = d[i];\n                yi = d[i + 1];\n\n                x0 = xi;\n                y0 = yi;\n            }\n            switch (cmd) {\n                case CMD.M:\n                    x0 = xi = d[i++];\n                    y0 = yi = d[i++];\n                    ctx.moveTo(xi, yi);\n                    break;\n                case CMD.L:\n                    x = d[i++];\n                    y = d[i++];\n                    // Not draw too small seg between\n                    if (mathAbs(x - xi) > ux || mathAbs(y - yi) > uy || i === len$$1 - 1) {\n                        ctx.lineTo(x, y);\n                        xi = x;\n                        yi = y;\n                    }\n                    break;\n                case CMD.C:\n                    ctx.bezierCurveTo(\n                        d[i++], d[i++], d[i++], d[i++], d[i++], d[i++]\n                    );\n                    xi = d[i - 2];\n                    yi = d[i - 1];\n                    break;\n                case CMD.Q:\n                    ctx.quadraticCurveTo(d[i++], d[i++], d[i++], d[i++]);\n                    xi = d[i - 2];\n                    yi = d[i - 1];\n                    break;\n                case CMD.A:\n                    var cx = d[i++];\n                    var cy = d[i++];\n                    var rx = d[i++];\n                    var ry = d[i++];\n                    var theta = d[i++];\n                    var dTheta = d[i++];\n                    var psi = d[i++];\n                    var fs = d[i++];\n                    var r = (rx > ry) ? rx : ry;\n                    var scaleX = (rx > ry) ? 1 : rx / ry;\n                    var scaleY = (rx > ry) ? ry / rx : 1;\n                    var isEllipse = Math.abs(rx - ry) > 1e-3;\n                    var endAngle = theta + dTheta;\n                    if (isEllipse) {\n                        ctx.translate(cx, cy);\n                        ctx.rotate(psi);\n                        ctx.scale(scaleX, scaleY);\n                        ctx.arc(0, 0, r, theta, endAngle, 1 - fs);\n                        ctx.scale(1 / scaleX, 1 / scaleY);\n                        ctx.rotate(-psi);\n                        ctx.translate(-cx, -cy);\n                    }\n                    else {\n                        ctx.arc(cx, cy, r, theta, endAngle, 1 - fs);\n                    }\n\n                    if (i === 1) {\n                        // 直接使用 arc 命令\n                        // 第一个命令起点还未定义\n                        x0 = mathCos$1(theta) * rx + cx;\n                        y0 = mathSin$1(theta) * ry + cy;\n                    }\n                    xi = mathCos$1(endAngle) * rx + cx;\n                    yi = mathSin$1(endAngle) * ry + cy;\n                    break;\n                case CMD.R:\n                    x0 = xi = d[i];\n                    y0 = yi = d[i + 1];\n                    ctx.rect(d[i++], d[i++], d[i++], d[i++]);\n                    break;\n                case CMD.Z:\n                    ctx.closePath();\n                    xi = x0;\n                    yi = y0;\n            }\n        }\n    }\n};\n\nPathProxy.CMD = CMD;\n\n/**\n * 线段包含判断\n * @param  {number}  x0\n * @param  {number}  y0\n * @param  {number}  x1\n * @param  {number}  y1\n * @param  {number}  lineWidth\n * @param  {number}  x\n * @param  {number}  y\n * @return {boolean}\n */\nfunction containStroke$1(x0, y0, x1, y1, lineWidth, x, y) {\n    if (lineWidth === 0) {\n        return false;\n    }\n    var _l = lineWidth;\n    var _a = 0;\n    var _b = x0;\n    // Quick reject\n    if (\n        (y > y0 + _l && y > y1 + _l)\n        || (y < y0 - _l && y < y1 - _l)\n        || (x > x0 + _l && x > x1 + _l)\n        || (x < x0 - _l && x < x1 - _l)\n    ) {\n        return false;\n    }\n\n    if (x0 !== x1) {\n        _a = (y0 - y1) / (x0 - x1);\n        _b = (x0 * y1 - x1 * y0) / (x0 - x1);\n    }\n    else {\n        return Math.abs(x - x0) <= _l / 2;\n    }\n    var tmp = _a * x - y + _b;\n    var _s = tmp * tmp / (_a * _a + 1);\n    return _s <= _l / 2 * _l / 2;\n}\n\n/**\n * 三次贝塞尔曲线描边包含判断\n * @param  {number}  x0\n * @param  {number}  y0\n * @param  {number}  x1\n * @param  {number}  y1\n * @param  {number}  x2\n * @param  {number}  y2\n * @param  {number}  x3\n * @param  {number}  y3\n * @param  {number}  lineWidth\n * @param  {number}  x\n * @param  {number}  y\n * @return {boolean}\n */\nfunction containStroke$2(x0, y0, x1, y1, x2, y2, x3, y3, lineWidth, x, y) {\n    if (lineWidth === 0) {\n        return false;\n    }\n    var _l = lineWidth;\n    // Quick reject\n    if (\n        (y > y0 + _l && y > y1 + _l && y > y2 + _l && y > y3 + _l)\n        || (y < y0 - _l && y < y1 - _l && y < y2 - _l && y < y3 - _l)\n        || (x > x0 + _l && x > x1 + _l && x > x2 + _l && x > x3 + _l)\n        || (x < x0 - _l && x < x1 - _l && x < x2 - _l && x < x3 - _l)\n    ) {\n        return false;\n    }\n    var d = cubicProjectPoint(\n        x0, y0, x1, y1, x2, y2, x3, y3,\n        x, y, null\n    );\n    return d <= _l / 2;\n}\n\n/**\n * 二次贝塞尔曲线描边包含判断\n * @param  {number}  x0\n * @param  {number}  y0\n * @param  {number}  x1\n * @param  {number}  y1\n * @param  {number}  x2\n * @param  {number}  y2\n * @param  {number}  lineWidth\n * @param  {number}  x\n * @param  {number}  y\n * @return {boolean}\n */\nfunction containStroke$3(x0, y0, x1, y1, x2, y2, lineWidth, x, y) {\n    if (lineWidth === 0) {\n        return false;\n    }\n    var _l = lineWidth;\n    // Quick reject\n    if (\n        (y > y0 + _l && y > y1 + _l && y > y2 + _l)\n        || (y < y0 - _l && y < y1 - _l && y < y2 - _l)\n        || (x > x0 + _l && x > x1 + _l && x > x2 + _l)\n        || (x < x0 - _l && x < x1 - _l && x < x2 - _l)\n    ) {\n        return false;\n    }\n    var d = quadraticProjectPoint(\n        x0, y0, x1, y1, x2, y2,\n        x, y, null\n    );\n    return d <= _l / 2;\n}\n\nvar PI2$3 = Math.PI * 2;\n\nfunction normalizeRadian(angle) {\n    angle %= PI2$3;\n    if (angle < 0) {\n        angle += PI2$3;\n    }\n    return angle;\n}\n\nvar PI2$2 = Math.PI * 2;\n\n/**\n * 圆弧描边包含判断\n * @param  {number}  cx\n * @param  {number}  cy\n * @param  {number}  r\n * @param  {number}  startAngle\n * @param  {number}  endAngle\n * @param  {boolean}  anticlockwise\n * @param  {number} lineWidth\n * @param  {number}  x\n * @param  {number}  y\n * @return {Boolean}\n */\nfunction containStroke$4(\n    cx, cy, r, startAngle, endAngle, anticlockwise,\n    lineWidth, x, y\n) {\n\n    if (lineWidth === 0) {\n        return false;\n    }\n    var _l = lineWidth;\n\n    x -= cx;\n    y -= cy;\n    var d = Math.sqrt(x * x + y * y);\n\n    if ((d - _l > r) || (d + _l < r)) {\n        return false;\n    }\n    if (Math.abs(startAngle - endAngle) % PI2$2 < 1e-4) {\n        // Is a circle\n        return true;\n    }\n    if (anticlockwise) {\n        var tmp = startAngle;\n        startAngle = normalizeRadian(endAngle);\n        endAngle = normalizeRadian(tmp);\n    }\n    else {\n        startAngle = normalizeRadian(startAngle);\n        endAngle = normalizeRadian(endAngle);\n    }\n    if (startAngle > endAngle) {\n        endAngle += PI2$2;\n    }\n\n    var angle = Math.atan2(y, x);\n    if (angle < 0) {\n        angle += PI2$2;\n    }\n    return (angle >= startAngle && angle <= endAngle)\n        || (angle + PI2$2 >= startAngle && angle + PI2$2 <= endAngle);\n}\n\nfunction windingLine(x0, y0, x1, y1, x, y) {\n    if ((y > y0 && y > y1) || (y < y0 && y < y1)) {\n        return 0;\n    }\n    // Ignore horizontal line\n    if (y1 === y0) {\n        return 0;\n    }\n    var dir = y1 < y0 ? 1 : -1;\n    var t = (y - y0) / (y1 - y0);\n\n    // Avoid winding error when intersection point is the connect point of two line of polygon\n    if (t === 1 || t === 0) {\n        dir = y1 < y0 ? 0.5 : -0.5;\n    }\n\n    var x_ = t * (x1 - x0) + x0;\n\n    // If (x, y) on the line, considered as \"contain\".\n    return x_ === x ? Infinity : x_ > x ? dir : 0;\n}\n\nvar CMD$1 = PathProxy.CMD;\nvar PI2$1 = Math.PI * 2;\n\nvar EPSILON$2 = 1e-4;\n\nfunction isAroundEqual(a, b) {\n    return Math.abs(a - b) < EPSILON$2;\n}\n\n// 临时数组\nvar roots = [-1, -1, -1];\nvar extrema = [-1, -1];\n\nfunction swapExtrema() {\n    var tmp = extrema[0];\n    extrema[0] = extrema[1];\n    extrema[1] = tmp;\n}\n\nfunction windingCubic(x0, y0, x1, y1, x2, y2, x3, y3, x, y) {\n    // Quick reject\n    if (\n        (y > y0 && y > y1 && y > y2 && y > y3)\n        || (y < y0 && y < y1 && y < y2 && y < y3)\n    ) {\n        return 0;\n    }\n    var nRoots = cubicRootAt(y0, y1, y2, y3, y, roots);\n    if (nRoots === 0) {\n        return 0;\n    }\n    else {\n        var w = 0;\n        var nExtrema = -1;\n        var y0_;\n        var y1_;\n        for (var i = 0; i < nRoots; i++) {\n            var t = roots[i];\n\n            // Avoid winding error when intersection point is the connect point of two line of polygon\n            var unit = (t === 0 || t === 1) ? 0.5 : 1;\n\n            var x_ = cubicAt(x0, x1, x2, x3, t);\n            if (x_ < x) { // Quick reject\n                continue;\n            }\n            if (nExtrema < 0) {\n                nExtrema = cubicExtrema(y0, y1, y2, y3, extrema);\n                if (extrema[1] < extrema[0] && nExtrema > 1) {\n                    swapExtrema();\n                }\n                y0_ = cubicAt(y0, y1, y2, y3, extrema[0]);\n                if (nExtrema > 1) {\n                    y1_ = cubicAt(y0, y1, y2, y3, extrema[1]);\n                }\n            }\n            if (nExtrema === 2) {\n                // 分成三段单调函数\n                if (t < extrema[0]) {\n                    w += y0_ < y0 ? unit : -unit;\n                }\n                else if (t < extrema[1]) {\n                    w += y1_ < y0_ ? unit : -unit;\n                }\n                else {\n                    w += y3 < y1_ ? unit : -unit;\n                }\n            }\n            else {\n                // 分成两段单调函数\n                if (t < extrema[0]) {\n                    w += y0_ < y0 ? unit : -unit;\n                }\n                else {\n                    w += y3 < y0_ ? unit : -unit;\n                }\n            }\n        }\n        return w;\n    }\n}\n\nfunction windingQuadratic(x0, y0, x1, y1, x2, y2, x, y) {\n    // Quick reject\n    if (\n        (y > y0 && y > y1 && y > y2)\n        || (y < y0 && y < y1 && y < y2)\n    ) {\n        return 0;\n    }\n    var nRoots = quadraticRootAt(y0, y1, y2, y, roots);\n    if (nRoots === 0) {\n        return 0;\n    }\n    else {\n        var t = quadraticExtremum(y0, y1, y2);\n        if (t >= 0 && t <= 1) {\n            var w = 0;\n            var y_ = quadraticAt(y0, y1, y2, t);\n            for (var i = 0; i < nRoots; i++) {\n                // Remove one endpoint.\n                var unit = (roots[i] === 0 || roots[i] === 1) ? 0.5 : 1;\n\n                var x_ = quadraticAt(x0, x1, x2, roots[i]);\n                if (x_ < x) {   // Quick reject\n                    continue;\n                }\n                if (roots[i] < t) {\n                    w += y_ < y0 ? unit : -unit;\n                }\n                else {\n                    w += y2 < y_ ? unit : -unit;\n                }\n            }\n            return w;\n        }\n        else {\n            // Remove one endpoint.\n            var unit = (roots[0] === 0 || roots[0] === 1) ? 0.5 : 1;\n\n            var x_ = quadraticAt(x0, x1, x2, roots[0]);\n            if (x_ < x) {   // Quick reject\n                return 0;\n            }\n            return y2 < y0 ? unit : -unit;\n        }\n    }\n}\n\n// TODO\n// Arc 旋转\nfunction windingArc(\n    cx, cy, r, startAngle, endAngle, anticlockwise, x, y\n) {\n    y -= cy;\n    if (y > r || y < -r) {\n        return 0;\n    }\n    var tmp = Math.sqrt(r * r - y * y);\n    roots[0] = -tmp;\n    roots[1] = tmp;\n\n    var diff = Math.abs(startAngle - endAngle);\n    if (diff < 1e-4) {\n        return 0;\n    }\n    if (diff % PI2$1 < 1e-4) {\n        // Is a circle\n        startAngle = 0;\n        endAngle = PI2$1;\n        var dir = anticlockwise ? 1 : -1;\n        if (x >= roots[0] + cx && x <= roots[1] + cx) {\n            return dir;\n        }\n        else {\n            return 0;\n        }\n    }\n\n    if (anticlockwise) {\n        var tmp = startAngle;\n        startAngle = normalizeRadian(endAngle);\n        endAngle = normalizeRadian(tmp);\n    }\n    else {\n        startAngle = normalizeRadian(startAngle);\n        endAngle = normalizeRadian(endAngle);\n    }\n    if (startAngle > endAngle) {\n        endAngle += PI2$1;\n    }\n\n    var w = 0;\n    for (var i = 0; i < 2; i++) {\n        var x_ = roots[i];\n        if (x_ + cx > x) {\n            var angle = Math.atan2(y, x_);\n            var dir = anticlockwise ? 1 : -1;\n            if (angle < 0) {\n                angle = PI2$1 + angle;\n            }\n            if (\n                (angle >= startAngle && angle <= endAngle)\n                || (angle + PI2$1 >= startAngle && angle + PI2$1 <= endAngle)\n            ) {\n                if (angle > Math.PI / 2 && angle < Math.PI * 1.5) {\n                    dir = -dir;\n                }\n                w += dir;\n            }\n        }\n    }\n    return w;\n}\n\nfunction containPath(data, lineWidth, isStroke, x, y) {\n    var w = 0;\n    var xi = 0;\n    var yi = 0;\n    var x0 = 0;\n    var y0 = 0;\n\n    for (var i = 0; i < data.length;) {\n        var cmd = data[i++];\n        // Begin a new subpath\n        if (cmd === CMD$1.M && i > 1) {\n            // Close previous subpath\n            if (!isStroke) {\n                w += windingLine(xi, yi, x0, y0, x, y);\n            }\n            // 如果被任何一个 subpath 包含\n            // if (w !== 0) {\n            //     return true;\n            // }\n        }\n\n        if (i === 1) {\n            // 如果第一个命令是 L, C, Q\n            // 则 previous point 同绘制命令的第一个 point\n            //\n            // 第一个命令为 Arc 的情况下会在后面特殊处理\n            xi = data[i];\n            yi = data[i + 1];\n\n            x0 = xi;\n            y0 = yi;\n        }\n\n        switch (cmd) {\n            case CMD$1.M:\n                // moveTo 命令重新创建一个新的 subpath, 并且更新新的起点\n                // 在 closePath 的时候使用\n                x0 = data[i++];\n                y0 = data[i++];\n                xi = x0;\n                yi = y0;\n                break;\n            case CMD$1.L:\n                if (isStroke) {\n                    if (containStroke$1(xi, yi, data[i], data[i + 1], lineWidth, x, y)) {\n                        return true;\n                    }\n                }\n                else {\n                    // NOTE 在第一个命令为 L, C, Q 的时候会计算出 NaN\n                    w += windingLine(xi, yi, data[i], data[i + 1], x, y) || 0;\n                }\n                xi = data[i++];\n                yi = data[i++];\n                break;\n            case CMD$1.C:\n                if (isStroke) {\n                    if (containStroke$2(xi, yi,\n                        data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1],\n                        lineWidth, x, y\n                    )) {\n                        return true;\n                    }\n                }\n                else {\n                    w += windingCubic(\n                        xi, yi,\n                        data[i++], data[i++], data[i++], data[i++], data[i], data[i + 1],\n                        x, y\n                    ) || 0;\n                }\n                xi = data[i++];\n                yi = data[i++];\n                break;\n            case CMD$1.Q:\n                if (isStroke) {\n                    if (containStroke$3(xi, yi,\n                        data[i++], data[i++], data[i], data[i + 1],\n                        lineWidth, x, y\n                    )) {\n                        return true;\n                    }\n                }\n                else {\n                    w += windingQuadratic(\n                        xi, yi,\n                        data[i++], data[i++], data[i], data[i + 1],\n                        x, y\n                    ) || 0;\n                }\n                xi = data[i++];\n                yi = data[i++];\n                break;\n            case CMD$1.A:\n                // TODO Arc 判断的开销比较大\n                var cx = data[i++];\n                var cy = data[i++];\n                var rx = data[i++];\n                var ry = data[i++];\n                var theta = data[i++];\n                var dTheta = data[i++];\n                // TODO Arc 旋转\n                i += 1;\n                var anticlockwise = 1 - data[i++];\n                var x1 = Math.cos(theta) * rx + cx;\n                var y1 = Math.sin(theta) * ry + cy;\n                // 不是直接使用 arc 命令\n                if (i > 1) {\n                    w += windingLine(xi, yi, x1, y1, x, y);\n                }\n                else {\n                    // 第一个命令起点还未定义\n                    x0 = x1;\n                    y0 = y1;\n                }\n                // zr 使用scale来模拟椭圆, 这里也对x做一定的缩放\n                var _x = (x - cx) * ry / rx + cx;\n                if (isStroke) {\n                    if (containStroke$4(\n                        cx, cy, ry, theta, theta + dTheta, anticlockwise,\n                        lineWidth, _x, y\n                    )) {\n                        return true;\n                    }\n                }\n                else {\n                    w += windingArc(\n                        cx, cy, ry, theta, theta + dTheta, anticlockwise,\n                        _x, y\n                    );\n                }\n                xi = Math.cos(theta + dTheta) * rx + cx;\n                yi = Math.sin(theta + dTheta) * ry + cy;\n                break;\n            case CMD$1.R:\n                x0 = xi = data[i++];\n                y0 = yi = data[i++];\n                var width = data[i++];\n                var height = data[i++];\n                var x1 = x0 + width;\n                var y1 = y0 + height;\n                if (isStroke) {\n                    if (containStroke$1(x0, y0, x1, y0, lineWidth, x, y)\n                        || containStroke$1(x1, y0, x1, y1, lineWidth, x, y)\n                        || containStroke$1(x1, y1, x0, y1, lineWidth, x, y)\n                        || containStroke$1(x0, y1, x0, y0, lineWidth, x, y)\n                    ) {\n                        return true;\n                    }\n                }\n                else {\n                    // FIXME Clockwise ?\n                    w += windingLine(x1, y0, x1, y1, x, y);\n                    w += windingLine(x0, y1, x0, y0, x, y);\n                }\n                break;\n            case CMD$1.Z:\n                if (isStroke) {\n                    if (containStroke$1(\n                        xi, yi, x0, y0, lineWidth, x, y\n                    )) {\n                        return true;\n                    }\n                }\n                else {\n                    // Close a subpath\n                    w += windingLine(xi, yi, x0, y0, x, y);\n                    // 如果被任何一个 subpath 包含\n                    // FIXME subpaths may overlap\n                    // if (w !== 0) {\n                    //     return true;\n                    // }\n                }\n                xi = x0;\n                yi = y0;\n                break;\n        }\n    }\n    if (!isStroke && !isAroundEqual(yi, y0)) {\n        w += windingLine(xi, yi, x0, y0, x, y) || 0;\n    }\n    return w !== 0;\n}\n\nfunction contain(pathData, x, y) {\n    return containPath(pathData, 0, false, x, y);\n}\n\nfunction containStroke(pathData, lineWidth, x, y) {\n    return containPath(pathData, lineWidth, true, x, y);\n}\n\nvar getCanvasPattern = Pattern.prototype.getCanvasPattern;\n\nvar abs = Math.abs;\n\nvar pathProxyForDraw = new PathProxy(true);\n/**\n * @alias module:zrender/graphic/Path\n * @extends module:zrender/graphic/Displayable\n * @constructor\n * @param {Object} opts\n */\nfunction Path(opts) {\n    Displayable.call(this, opts);\n\n    /**\n     * @type {module:zrender/core/PathProxy}\n     * @readOnly\n     */\n    this.path = null;\n}\n\nPath.prototype = {\n\n    constructor: Path,\n\n    type: 'path',\n\n    __dirtyPath: true,\n\n    strokeContainThreshold: 5,\n\n    // This item default to be false. But in map series in echarts,\n    // in order to improve performance, it should be set to true,\n    // so the shorty segment won't draw.\n    segmentIgnoreThreshold: 0,\n\n    /**\n     * See `module:zrender/src/graphic/helper/subPixelOptimize`.\n     * @type {boolean}\n     */\n    subPixelOptimize: false,\n\n    brush: function (ctx, prevEl) {\n        var style = this.style;\n        var path = this.path || pathProxyForDraw;\n        var hasStroke = style.hasStroke();\n        var hasFill = style.hasFill();\n        var fill = style.fill;\n        var stroke = style.stroke;\n        var hasFillGradient = hasFill && !!(fill.colorStops);\n        var hasStrokeGradient = hasStroke && !!(stroke.colorStops);\n        var hasFillPattern = hasFill && !!(fill.image);\n        var hasStrokePattern = hasStroke && !!(stroke.image);\n\n        style.bind(ctx, this, prevEl);\n        this.setTransform(ctx);\n\n        if (this.__dirty) {\n            var rect;\n            // Update gradient because bounding rect may changed\n            if (hasFillGradient) {\n                rect = rect || this.getBoundingRect();\n                this._fillGradient = style.getGradient(ctx, fill, rect);\n            }\n            if (hasStrokeGradient) {\n                rect = rect || this.getBoundingRect();\n                this._strokeGradient = style.getGradient(ctx, stroke, rect);\n            }\n        }\n        // Use the gradient or pattern\n        if (hasFillGradient) {\n            // PENDING If may have affect the state\n            ctx.fillStyle = this._fillGradient;\n        }\n        else if (hasFillPattern) {\n            ctx.fillStyle = getCanvasPattern.call(fill, ctx);\n        }\n        if (hasStrokeGradient) {\n            ctx.strokeStyle = this._strokeGradient;\n        }\n        else if (hasStrokePattern) {\n            ctx.strokeStyle = getCanvasPattern.call(stroke, ctx);\n        }\n\n        var lineDash = style.lineDash;\n        var lineDashOffset = style.lineDashOffset;\n\n        var ctxLineDash = !!ctx.setLineDash;\n\n        // Update path sx, sy\n        var scale = this.getGlobalScale();\n        path.setScale(scale[0], scale[1], this.segmentIgnoreThreshold);\n\n        // Proxy context\n        // Rebuild path in following 2 cases\n        // 1. Path is dirty\n        // 2. Path needs javascript implemented lineDash stroking.\n        //    In this case, lineDash information will not be saved in PathProxy\n        if (this.__dirtyPath\n            || (lineDash && !ctxLineDash && hasStroke)\n        ) {\n            path.beginPath(ctx);\n\n            // Setting line dash before build path\n            if (lineDash && !ctxLineDash) {\n                path.setLineDash(lineDash);\n                path.setLineDashOffset(lineDashOffset);\n            }\n\n            this.buildPath(path, this.shape, false);\n\n            // Clear path dirty flag\n            if (this.path) {\n                this.__dirtyPath = false;\n            }\n        }\n        else {\n            // Replay path building\n            ctx.beginPath();\n            this.path.rebuildPath(ctx);\n        }\n\n        if (hasFill) {\n            if (style.fillOpacity != null) {\n                var originalGlobalAlpha = ctx.globalAlpha;\n                ctx.globalAlpha = style.fillOpacity * style.opacity;\n                path.fill(ctx);\n                ctx.globalAlpha = originalGlobalAlpha;\n            }\n            else {\n                path.fill(ctx);\n            }\n        }\n\n        if (lineDash && ctxLineDash) {\n            ctx.setLineDash(lineDash);\n            ctx.lineDashOffset = lineDashOffset;\n        }\n\n        if (hasStroke) {\n            if (style.strokeOpacity != null) {\n                var originalGlobalAlpha = ctx.globalAlpha;\n                ctx.globalAlpha = style.strokeOpacity * style.opacity;\n                path.stroke(ctx);\n                ctx.globalAlpha = originalGlobalAlpha;\n            }\n            else {\n                path.stroke(ctx);\n            }\n        }\n\n        if (lineDash && ctxLineDash) {\n            // PENDING\n            // Remove lineDash\n            ctx.setLineDash([]);\n        }\n\n        // Draw rect text\n        if (style.text != null) {\n            // Only restore transform when needs draw text.\n            this.restoreTransform(ctx);\n            this.drawRectText(ctx, this.getBoundingRect());\n        }\n    },\n\n    // When bundling path, some shape may decide if use moveTo to begin a new subpath or closePath\n    // Like in circle\n    buildPath: function (ctx, shapeCfg, inBundle) {},\n\n    createPathProxy: function () {\n        this.path = new PathProxy();\n    },\n\n    getBoundingRect: function () {\n        var rect = this._rect;\n        var style = this.style;\n        var needsUpdateRect = !rect;\n        if (needsUpdateRect) {\n            var path = this.path;\n            if (!path) {\n                // Create path on demand.\n                path = this.path = new PathProxy();\n            }\n            if (this.__dirtyPath) {\n                path.beginPath();\n                this.buildPath(path, this.shape, false);\n            }\n            rect = path.getBoundingRect();\n        }\n        this._rect = rect;\n\n        if (style.hasStroke()) {\n            // Needs update rect with stroke lineWidth when\n            // 1. Element changes scale or lineWidth\n            // 2. Shape is changed\n            var rectWithStroke = this._rectWithStroke || (this._rectWithStroke = rect.clone());\n            if (this.__dirty || needsUpdateRect) {\n                rectWithStroke.copy(rect);\n                // FIXME Must after updateTransform\n                var w = style.lineWidth;\n                // PENDING, Min line width is needed when line is horizontal or vertical\n                var lineScale = style.strokeNoScale ? this.getLineScale() : 1;\n\n                // Only add extra hover lineWidth when there are no fill\n                if (!style.hasFill()) {\n                    w = Math.max(w, this.strokeContainThreshold || 4);\n                }\n                // Consider line width\n                // Line scale can't be 0;\n                if (lineScale > 1e-10) {\n                    rectWithStroke.width += w / lineScale;\n                    rectWithStroke.height += w / lineScale;\n                    rectWithStroke.x -= w / lineScale / 2;\n                    rectWithStroke.y -= w / lineScale / 2;\n                }\n            }\n\n            // Return rect with stroke\n            return rectWithStroke;\n        }\n\n        return rect;\n    },\n\n    contain: function (x, y) {\n        var localPos = this.transformCoordToLocal(x, y);\n        var rect = this.getBoundingRect();\n        var style = this.style;\n        x = localPos[0];\n        y = localPos[1];\n\n        if (rect.contain(x, y)) {\n            var pathData = this.path.data;\n            if (style.hasStroke()) {\n                var lineWidth = style.lineWidth;\n                var lineScale = style.strokeNoScale ? this.getLineScale() : 1;\n                // Line scale can't be 0;\n                if (lineScale > 1e-10) {\n                    // Only add extra hover lineWidth when there are no fill\n                    if (!style.hasFill()) {\n                        lineWidth = Math.max(lineWidth, this.strokeContainThreshold);\n                    }\n                    if (containStroke(\n                        pathData, lineWidth / lineScale, x, y\n                    )) {\n                        return true;\n                    }\n                }\n            }\n            if (style.hasFill()) {\n                return contain(pathData, x, y);\n            }\n        }\n        return false;\n    },\n\n    /**\n     * @param  {boolean} dirtyPath\n     */\n    dirty: function (dirtyPath) {\n        if (dirtyPath == null) {\n            dirtyPath = true;\n        }\n        // Only mark dirty, not mark clean\n        if (dirtyPath) {\n            this.__dirtyPath = dirtyPath;\n            this._rect = null;\n        }\n\n        this.__dirty = this.__dirtyText = true;\n\n        this.__zr && this.__zr.refresh();\n\n        // Used as a clipping path\n        if (this.__clipTarget) {\n            this.__clipTarget.dirty();\n        }\n    },\n\n    /**\n     * Alias for animate('shape')\n     * @param {boolean} loop\n     */\n    animateShape: function (loop) {\n        return this.animate('shape', loop);\n    },\n\n    // Overwrite attrKV\n    attrKV: function (key, value) {\n        // FIXME\n        if (key === 'shape') {\n            this.setShape(value);\n            this.__dirtyPath = true;\n            this._rect = null;\n        }\n        else {\n            Displayable.prototype.attrKV.call(this, key, value);\n        }\n    },\n\n    /**\n     * @param {Object|string} key\n     * @param {*} value\n     */\n    setShape: function (key, value) {\n        var shape = this.shape;\n        // Path from string may not have shape\n        if (shape) {\n            if (isObject$1(key)) {\n                for (var name in key) {\n                    if (key.hasOwnProperty(name)) {\n                        shape[name] = key[name];\n                    }\n                }\n            }\n            else {\n                shape[key] = value;\n            }\n            this.dirty(true);\n        }\n        return this;\n    },\n\n    getLineScale: function () {\n        var m = this.transform;\n        // Get the line scale.\n        // Determinant of `m` means how much the area is enlarged by the\n        // transformation. So its square root can be used as a scale factor\n        // for width.\n        return m && abs(m[0] - 1) > 1e-10 && abs(m[3] - 1) > 1e-10\n            ? Math.sqrt(abs(m[0] * m[3] - m[2] * m[1]))\n            : 1;\n    }\n};\n\n/**\n * 扩展一个 Path element, 比如星形，圆等。\n * Extend a path element\n * @param {Object} props\n * @param {string} props.type Path type\n * @param {Function} props.init Initialize\n * @param {Function} props.buildPath Overwrite buildPath method\n * @param {Object} [props.style] Extended default style config\n * @param {Object} [props.shape] Extended default shape config\n */\nPath.extend = function (defaults$$1) {\n    var Sub = function (opts) {\n        Path.call(this, opts);\n\n        if (defaults$$1.style) {\n            // Extend default style\n            this.style.extendFrom(defaults$$1.style, false);\n        }\n\n        // Extend default shape\n        var defaultShape = defaults$$1.shape;\n        if (defaultShape) {\n            this.shape = this.shape || {};\n            var thisShape = this.shape;\n            for (var name in defaultShape) {\n                if (\n                    !thisShape.hasOwnProperty(name)\n                    && defaultShape.hasOwnProperty(name)\n                ) {\n                    thisShape[name] = defaultShape[name];\n                }\n            }\n        }\n\n        defaults$$1.init && defaults$$1.init.call(this, opts);\n    };\n\n    inherits(Sub, Path);\n\n    // FIXME 不能 extend position, rotation 等引用对象\n    for (var name in defaults$$1) {\n        // Extending prototype values and methods\n        if (name !== 'style' && name !== 'shape') {\n            Sub.prototype[name] = defaults$$1[name];\n        }\n    }\n\n    return Sub;\n};\n\ninherits(Path, Displayable);\n\nvar CMD$2 = PathProxy.CMD;\n\nvar points = [[], [], []];\nvar mathSqrt$3 = Math.sqrt;\nvar mathAtan2 = Math.atan2;\n\nvar transformPath = function (path, m) {\n    var data = path.data;\n    var cmd;\n    var nPoint;\n    var i;\n    var j;\n    var k;\n    var p;\n\n    var M = CMD$2.M;\n    var C = CMD$2.C;\n    var L = CMD$2.L;\n    var R = CMD$2.R;\n    var A = CMD$2.A;\n    var Q = CMD$2.Q;\n\n    for (i = 0, j = 0; i < data.length;) {\n        cmd = data[i++];\n        j = i;\n        nPoint = 0;\n\n        switch (cmd) {\n            case M:\n                nPoint = 1;\n                break;\n            case L:\n                nPoint = 1;\n                break;\n            case C:\n                nPoint = 3;\n                break;\n            case Q:\n                nPoint = 2;\n                break;\n            case A:\n                var x = m[4];\n                var y = m[5];\n                var sx = mathSqrt$3(m[0] * m[0] + m[1] * m[1]);\n                var sy = mathSqrt$3(m[2] * m[2] + m[3] * m[3]);\n                var angle = mathAtan2(-m[1] / sy, m[0] / sx);\n                // cx\n                data[i] *= sx;\n                data[i++] += x;\n                // cy\n                data[i] *= sy;\n                data[i++] += y;\n                // Scale rx and ry\n                // FIXME Assume psi is 0 here\n                data[i++] *= sx;\n                data[i++] *= sy;\n\n                // Start angle\n                data[i++] += angle;\n                // end angle\n                data[i++] += angle;\n                // FIXME psi\n                i += 2;\n                j = i;\n                break;\n            case R:\n                // x0, y0\n                p[0] = data[i++];\n                p[1] = data[i++];\n                applyTransform(p, p, m);\n                data[j++] = p[0];\n                data[j++] = p[1];\n                // x1, y1\n                p[0] += data[i++];\n                p[1] += data[i++];\n                applyTransform(p, p, m);\n                data[j++] = p[0];\n                data[j++] = p[1];\n        }\n\n        for (k = 0; k < nPoint; k++) {\n            var p = points[k];\n            p[0] = data[i++];\n            p[1] = data[i++];\n\n            applyTransform(p, p, m);\n            // Write back\n            data[j++] = p[0];\n            data[j++] = p[1];\n        }\n    }\n};\n\n// command chars\n// var cc = [\n//     'm', 'M', 'l', 'L', 'v', 'V', 'h', 'H', 'z', 'Z',\n//     'c', 'C', 'q', 'Q', 't', 'T', 's', 'S', 'a', 'A'\n// ];\n\nvar mathSqrt = Math.sqrt;\nvar mathSin = Math.sin;\nvar mathCos = Math.cos;\nvar PI = Math.PI;\n\nvar vMag = function (v) {\n    return Math.sqrt(v[0] * v[0] + v[1] * v[1]);\n};\nvar vRatio = function (u, v) {\n    return (u[0] * v[0] + u[1] * v[1]) / (vMag(u) * vMag(v));\n};\nvar vAngle = function (u, v) {\n    return (u[0] * v[1] < u[1] * v[0] ? -1 : 1)\n            * Math.acos(vRatio(u, v));\n};\n\nfunction processArc(x1, y1, x2, y2, fa, fs, rx, ry, psiDeg, cmd, path) {\n    var psi = psiDeg * (PI / 180.0);\n    var xp = mathCos(psi) * (x1 - x2) / 2.0\n                + mathSin(psi) * (y1 - y2) / 2.0;\n    var yp = -1 * mathSin(psi) * (x1 - x2) / 2.0\n                + mathCos(psi) * (y1 - y2) / 2.0;\n\n    var lambda = (xp * xp) / (rx * rx) + (yp * yp) / (ry * ry);\n\n    if (lambda > 1) {\n        rx *= mathSqrt(lambda);\n        ry *= mathSqrt(lambda);\n    }\n\n    var f = (fa === fs ? -1 : 1)\n        * mathSqrt((((rx * rx) * (ry * ry))\n                - ((rx * rx) * (yp * yp))\n                - ((ry * ry) * (xp * xp))) / ((rx * rx) * (yp * yp)\n                + (ry * ry) * (xp * xp))\n            ) || 0;\n\n    var cxp = f * rx * yp / ry;\n    var cyp = f * -ry * xp / rx;\n\n    var cx = (x1 + x2) / 2.0\n                + mathCos(psi) * cxp\n                - mathSin(psi) * cyp;\n    var cy = (y1 + y2) / 2.0\n            + mathSin(psi) * cxp\n            + mathCos(psi) * cyp;\n\n    var theta = vAngle([ 1, 0 ], [ (xp - cxp) / rx, (yp - cyp) / ry ]);\n    var u = [ (xp - cxp) / rx, (yp - cyp) / ry ];\n    var v = [ (-1 * xp - cxp) / rx, (-1 * yp - cyp) / ry ];\n    var dTheta = vAngle(u, v);\n\n    if (vRatio(u, v) <= -1) {\n        dTheta = PI;\n    }\n    if (vRatio(u, v) >= 1) {\n        dTheta = 0;\n    }\n    if (fs === 0 && dTheta > 0) {\n        dTheta = dTheta - 2 * PI;\n    }\n    if (fs === 1 && dTheta < 0) {\n        dTheta = dTheta + 2 * PI;\n    }\n\n    path.addData(cmd, cx, cy, rx, ry, theta, dTheta, psi, fs);\n}\n\n\nvar commandReg = /([mlvhzcqtsa])([^mlvhzcqtsa]*)/ig;\n// Consider case:\n// (1) delimiter can be comma or space, where continuous commas\n// or spaces should be seen as one comma.\n// (2) value can be like:\n// '2e-4', 'l.5.9' (ignore 0), 'M-10-10', 'l-2.43e-1,34.9983',\n// 'l-.5E1,54', '121-23-44-11' (no delimiter)\nvar numberReg = /-?([0-9]*\\.)?[0-9]+([eE]-?[0-9]+)?/g;\n// var valueSplitReg = /[\\s,]+/;\n\nfunction createPathProxyFromString(data) {\n    if (!data) {\n        return new PathProxy();\n    }\n\n    // var data = data.replace(/-/g, ' -')\n    //     .replace(/  /g, ' ')\n    //     .replace(/ /g, ',')\n    //     .replace(/,,/g, ',');\n\n    // var n;\n    // create pipes so that we can split the data\n    // for (n = 0; n < cc.length; n++) {\n    //     cs = cs.replace(new RegExp(cc[n], 'g'), '|' + cc[n]);\n    // }\n\n    // data = data.replace(/-/g, ',-');\n\n    // create array\n    // var arr = cs.split('|');\n    // init context point\n    var cpx = 0;\n    var cpy = 0;\n    var subpathX = cpx;\n    var subpathY = cpy;\n    var prevCmd;\n\n    var path = new PathProxy();\n    var CMD = PathProxy.CMD;\n\n    // commandReg.lastIndex = 0;\n    // var cmdResult;\n    // while ((cmdResult = commandReg.exec(data)) != null) {\n    //     var cmdStr = cmdResult[1];\n    //     var cmdContent = cmdResult[2];\n\n    var cmdList = data.match(commandReg);\n    for (var l = 0; l < cmdList.length; l++) {\n        var cmdText = cmdList[l];\n        var cmdStr = cmdText.charAt(0);\n\n        var cmd;\n\n        // String#split is faster a little bit than String#replace or RegExp#exec.\n        // var p = cmdContent.split(valueSplitReg);\n        // var pLen = 0;\n        // for (var i = 0; i < p.length; i++) {\n        //     // '' and other invalid str => NaN\n        //     var val = parseFloat(p[i]);\n        //     !isNaN(val) && (p[pLen++] = val);\n        // }\n\n        var p = cmdText.match(numberReg) || [];\n        var pLen = p.length;\n        for (var i = 0; i < pLen; i++) {\n            p[i] = parseFloat(p[i]);\n        }\n\n        var off = 0;\n        while (off < pLen) {\n            var ctlPtx;\n            var ctlPty;\n\n            var rx;\n            var ry;\n            var psi;\n            var fa;\n            var fs;\n\n            var x1 = cpx;\n            var y1 = cpy;\n\n            // convert l, H, h, V, and v to L\n            switch (cmdStr) {\n                case 'l':\n                    cpx += p[off++];\n                    cpy += p[off++];\n                    cmd = CMD.L;\n                    path.addData(cmd, cpx, cpy);\n                    break;\n                case 'L':\n                    cpx = p[off++];\n                    cpy = p[off++];\n                    cmd = CMD.L;\n                    path.addData(cmd, cpx, cpy);\n                    break;\n                case 'm':\n                    cpx += p[off++];\n                    cpy += p[off++];\n                    cmd = CMD.M;\n                    path.addData(cmd, cpx, cpy);\n                    subpathX = cpx;\n                    subpathY = cpy;\n                    cmdStr = 'l';\n                    break;\n                case 'M':\n                    cpx = p[off++];\n                    cpy = p[off++];\n                    cmd = CMD.M;\n                    path.addData(cmd, cpx, cpy);\n                    subpathX = cpx;\n                    subpathY = cpy;\n                    cmdStr = 'L';\n                    break;\n                case 'h':\n                    cpx += p[off++];\n                    cmd = CMD.L;\n                    path.addData(cmd, cpx, cpy);\n                    break;\n                case 'H':\n                    cpx = p[off++];\n                    cmd = CMD.L;\n                    path.addData(cmd, cpx, cpy);\n                    break;\n                case 'v':\n                    cpy += p[off++];\n                    cmd = CMD.L;\n                    path.addData(cmd, cpx, cpy);\n                    break;\n                case 'V':\n                    cpy = p[off++];\n                    cmd = CMD.L;\n                    path.addData(cmd, cpx, cpy);\n                    break;\n                case 'C':\n                    cmd = CMD.C;\n                    path.addData(\n                        cmd, p[off++], p[off++], p[off++], p[off++], p[off++], p[off++]\n                    );\n                    cpx = p[off - 2];\n                    cpy = p[off - 1];\n                    break;\n                case 'c':\n                    cmd = CMD.C;\n                    path.addData(\n                        cmd,\n                        p[off++] + cpx, p[off++] + cpy,\n                        p[off++] + cpx, p[off++] + cpy,\n                        p[off++] + cpx, p[off++] + cpy\n                    );\n                    cpx += p[off - 2];\n                    cpy += p[off - 1];\n                    break;\n                case 'S':\n                    ctlPtx = cpx;\n                    ctlPty = cpy;\n                    var len = path.len();\n                    var pathData = path.data;\n                    if (prevCmd === CMD.C) {\n                        ctlPtx += cpx - pathData[len - 4];\n                        ctlPty += cpy - pathData[len - 3];\n                    }\n                    cmd = CMD.C;\n                    x1 = p[off++];\n                    y1 = p[off++];\n                    cpx = p[off++];\n                    cpy = p[off++];\n                    path.addData(cmd, ctlPtx, ctlPty, x1, y1, cpx, cpy);\n                    break;\n                case 's':\n                    ctlPtx = cpx;\n                    ctlPty = cpy;\n                    var len = path.len();\n                    var pathData = path.data;\n                    if (prevCmd === CMD.C) {\n                        ctlPtx += cpx - pathData[len - 4];\n                        ctlPty += cpy - pathData[len - 3];\n                    }\n                    cmd = CMD.C;\n                    x1 = cpx + p[off++];\n                    y1 = cpy + p[off++];\n                    cpx += p[off++];\n                    cpy += p[off++];\n                    path.addData(cmd, ctlPtx, ctlPty, x1, y1, cpx, cpy);\n                    break;\n                case 'Q':\n                    x1 = p[off++];\n                    y1 = p[off++];\n                    cpx = p[off++];\n                    cpy = p[off++];\n                    cmd = CMD.Q;\n                    path.addData(cmd, x1, y1, cpx, cpy);\n                    break;\n                case 'q':\n                    x1 = p[off++] + cpx;\n                    y1 = p[off++] + cpy;\n                    cpx += p[off++];\n                    cpy += p[off++];\n                    cmd = CMD.Q;\n                    path.addData(cmd, x1, y1, cpx, cpy);\n                    break;\n                case 'T':\n                    ctlPtx = cpx;\n                    ctlPty = cpy;\n                    var len = path.len();\n                    var pathData = path.data;\n                    if (prevCmd === CMD.Q) {\n                        ctlPtx += cpx - pathData[len - 4];\n                        ctlPty += cpy - pathData[len - 3];\n                    }\n                    cpx = p[off++];\n                    cpy = p[off++];\n                    cmd = CMD.Q;\n                    path.addData(cmd, ctlPtx, ctlPty, cpx, cpy);\n                    break;\n                case 't':\n                    ctlPtx = cpx;\n                    ctlPty = cpy;\n                    var len = path.len();\n                    var pathData = path.data;\n                    if (prevCmd === CMD.Q) {\n                        ctlPtx += cpx - pathData[len - 4];\n                        ctlPty += cpy - pathData[len - 3];\n                    }\n                    cpx += p[off++];\n                    cpy += p[off++];\n                    cmd = CMD.Q;\n                    path.addData(cmd, ctlPtx, ctlPty, cpx, cpy);\n                    break;\n                case 'A':\n                    rx = p[off++];\n                    ry = p[off++];\n                    psi = p[off++];\n                    fa = p[off++];\n                    fs = p[off++];\n\n                    x1 = cpx, y1 = cpy;\n                    cpx = p[off++];\n                    cpy = p[off++];\n                    cmd = CMD.A;\n                    processArc(\n                        x1, y1, cpx, cpy, fa, fs, rx, ry, psi, cmd, path\n                    );\n                    break;\n                case 'a':\n                    rx = p[off++];\n                    ry = p[off++];\n                    psi = p[off++];\n                    fa = p[off++];\n                    fs = p[off++];\n\n                    x1 = cpx, y1 = cpy;\n                    cpx += p[off++];\n                    cpy += p[off++];\n                    cmd = CMD.A;\n                    processArc(\n                        x1, y1, cpx, cpy, fa, fs, rx, ry, psi, cmd, path\n                    );\n                    break;\n            }\n        }\n\n        if (cmdStr === 'z' || cmdStr === 'Z') {\n            cmd = CMD.Z;\n            path.addData(cmd);\n            // z may be in the middle of the path.\n            cpx = subpathX;\n            cpy = subpathY;\n        }\n\n        prevCmd = cmd;\n    }\n\n    path.toStatic();\n\n    return path;\n}\n\n// TODO Optimize double memory cost problem\nfunction createPathOptions(str, opts) {\n    var pathProxy = createPathProxyFromString(str);\n    opts = opts || {};\n    opts.buildPath = function (path) {\n        if (path.setData) {\n            path.setData(pathProxy.data);\n            // Svg and vml renderer don't have context\n            var ctx = path.getContext();\n            if (ctx) {\n                path.rebuildPath(ctx);\n            }\n        }\n        else {\n            var ctx = path;\n            pathProxy.rebuildPath(ctx);\n        }\n    };\n\n    opts.applyTransform = function (m) {\n        transformPath(pathProxy, m);\n        this.dirty(true);\n    };\n\n    return opts;\n}\n\n/**\n * Create a Path object from path string data\n * http://www.w3.org/TR/SVG/paths.html#PathData\n * @param  {Object} opts Other options\n */\nfunction createFromString(str, opts) {\n    return new Path(createPathOptions(str, opts));\n}\n\n/**\n * Create a Path class from path string data\n * @param  {string} str\n * @param  {Object} opts Other options\n */\nfunction extendFromString(str, opts) {\n    return Path.extend(createPathOptions(str, opts));\n}\n\n/**\n * Merge multiple paths\n */\n// TODO Apply transform\n// TODO stroke dash\n// TODO Optimize double memory cost problem\nfunction mergePath$1(pathEls, opts) {\n    var pathList = [];\n    var len = pathEls.length;\n    for (var i = 0; i < len; i++) {\n        var pathEl = pathEls[i];\n        if (!pathEl.path) {\n            pathEl.createPathProxy();\n        }\n        if (pathEl.__dirtyPath) {\n            pathEl.buildPath(pathEl.path, pathEl.shape, true);\n        }\n        pathList.push(pathEl.path);\n    }\n\n    var pathBundle = new Path(opts);\n    // Need path proxy.\n    pathBundle.createPathProxy();\n    pathBundle.buildPath = function (path) {\n        path.appendPath(pathList);\n        // Svg and vml renderer don't have context\n        var ctx = path.getContext();\n        if (ctx) {\n            path.rebuildPath(ctx);\n        }\n    };\n\n    return pathBundle;\n}\n\n/**\n * @alias zrender/graphic/Text\n * @extends module:zrender/graphic/Displayable\n * @constructor\n * @param {Object} opts\n */\nvar Text = function (opts) { // jshint ignore:line\n    Displayable.call(this, opts);\n};\n\nText.prototype = {\n\n    constructor: Text,\n\n    type: 'text',\n\n    brush: function (ctx, prevEl) {\n        var style = this.style;\n\n        // Optimize, avoid normalize every time.\n        this.__dirty && normalizeTextStyle(style, true);\n\n        // Use props with prefix 'text'.\n        style.fill = style.stroke = style.shadowBlur = style.shadowColor =\n            style.shadowOffsetX = style.shadowOffsetY = null;\n\n        var text = style.text;\n        // Convert to string\n        text != null && (text += '');\n\n        // Do not apply style.bind in Text node. Because the real bind job\n        // is in textHelper.renderText, and performance of text render should\n        // be considered.\n        // style.bind(ctx, this, prevEl);\n\n        if (!needDrawText(text, style)) {\n            // The current el.style is not applied\n            // and should not be used as cache.\n            ctx.__attrCachedBy = ContextCachedBy.NONE;\n            return;\n        }\n\n        this.setTransform(ctx);\n\n        renderText(this, ctx, text, style, null, prevEl);\n\n        this.restoreTransform(ctx);\n    },\n\n    getBoundingRect: function () {\n        var style = this.style;\n\n        // Optimize, avoid normalize every time.\n        this.__dirty && normalizeTextStyle(style, true);\n\n        if (!this._rect) {\n            var text = style.text;\n            text != null ? (text += '') : (text = '');\n\n            var rect = getBoundingRect(\n                style.text + '',\n                style.font,\n                style.textAlign,\n                style.textVerticalAlign,\n                style.textPadding,\n                style.textLineHeight,\n                style.rich\n            );\n\n            rect.x += style.x || 0;\n            rect.y += style.y || 0;\n\n            if (getStroke(style.textStroke, style.textStrokeWidth)) {\n                var w = style.textStrokeWidth;\n                rect.x -= w / 2;\n                rect.y -= w / 2;\n                rect.width += w;\n                rect.height += w;\n            }\n\n            this._rect = rect;\n        }\n\n        return this._rect;\n    }\n};\n\ninherits(Text, Displayable);\n\n/**\n * 圆形\n * @module zrender/shape/Circle\n */\n\nvar Circle = Path.extend({\n\n    type: 'circle',\n\n    shape: {\n        cx: 0,\n        cy: 0,\n        r: 0\n    },\n\n\n    buildPath: function (ctx, shape, inBundle) {\n        // Better stroking in ShapeBundle\n        // Always do it may have performence issue ( fill may be 2x more cost)\n        if (inBundle) {\n            ctx.moveTo(shape.cx + shape.r, shape.cy);\n        }\n        // else {\n        //     if (ctx.allocate && !ctx.data.length) {\n        //         ctx.allocate(ctx.CMD_MEM_SIZE.A);\n        //     }\n        // }\n        // Better stroking in ShapeBundle\n        // ctx.moveTo(shape.cx + shape.r, shape.cy);\n        ctx.arc(shape.cx, shape.cy, shape.r, 0, Math.PI * 2, true);\n    }\n});\n\n// Fix weird bug in some version of IE11 (like 11.0.9600.178**),\n// where exception \"unexpected call to method or property access\"\n// might be thrown when calling ctx.fill or ctx.stroke after a path\n// whose area size is zero is drawn and ctx.clip() is called and\n// shadowBlur is set. See #4572, #3112, #5777.\n// (e.g.,\n//  ctx.moveTo(10, 10);\n//  ctx.lineTo(20, 10);\n//  ctx.closePath();\n//  ctx.clip();\n//  ctx.shadowBlur = 10;\n//  ...\n//  ctx.fill();\n// )\n\nvar shadowTemp = [\n    ['shadowBlur', 0],\n    ['shadowColor', '#000'],\n    ['shadowOffsetX', 0],\n    ['shadowOffsetY', 0]\n];\n\nvar fixClipWithShadow = function (orignalBrush) {\n\n    // version string can be: '11.0'\n    return (env$1.browser.ie && env$1.browser.version >= 11)\n\n        ? function () {\n            var clipPaths = this.__clipPaths;\n            var style = this.style;\n            var modified;\n\n            if (clipPaths) {\n                for (var i = 0; i < clipPaths.length; i++) {\n                    var clipPath = clipPaths[i];\n                    var shape = clipPath && clipPath.shape;\n                    var type = clipPath && clipPath.type;\n\n                    if (shape && (\n                        (type === 'sector' && shape.startAngle === shape.endAngle)\n                        || (type === 'rect' && (!shape.width || !shape.height))\n                    )) {\n                        for (var j = 0; j < shadowTemp.length; j++) {\n                            // It is save to put shadowTemp static, because shadowTemp\n                            // will be all modified each item brush called.\n                            shadowTemp[j][2] = style[shadowTemp[j][0]];\n                            style[shadowTemp[j][0]] = shadowTemp[j][1];\n                        }\n                        modified = true;\n                        break;\n                    }\n                }\n            }\n\n            orignalBrush.apply(this, arguments);\n\n            if (modified) {\n                for (var j = 0; j < shadowTemp.length; j++) {\n                    style[shadowTemp[j][0]] = shadowTemp[j][2];\n                }\n            }\n        }\n\n        : orignalBrush;\n};\n\n/**\n * 扇形\n * @module zrender/graphic/shape/Sector\n */\n\nvar Sector = Path.extend({\n\n    type: 'sector',\n\n    shape: {\n\n        cx: 0,\n\n        cy: 0,\n\n        r0: 0,\n\n        r: 0,\n\n        startAngle: 0,\n\n        endAngle: Math.PI * 2,\n\n        clockwise: true\n    },\n\n    brush: fixClipWithShadow(Path.prototype.brush),\n\n    buildPath: function (ctx, shape) {\n\n        var x = shape.cx;\n        var y = shape.cy;\n        var r0 = Math.max(shape.r0 || 0, 0);\n        var r = Math.max(shape.r, 0);\n        var startAngle = shape.startAngle;\n        var endAngle = shape.endAngle;\n        var clockwise = shape.clockwise;\n\n        var unitX = Math.cos(startAngle);\n        var unitY = Math.sin(startAngle);\n\n        ctx.moveTo(unitX * r0 + x, unitY * r0 + y);\n\n        ctx.lineTo(unitX * r + x, unitY * r + y);\n\n        ctx.arc(x, y, r, startAngle, endAngle, !clockwise);\n\n        ctx.lineTo(\n            Math.cos(endAngle) * r0 + x,\n            Math.sin(endAngle) * r0 + y\n        );\n\n        if (r0 !== 0) {\n            ctx.arc(x, y, r0, endAngle, startAngle, clockwise);\n        }\n\n        ctx.closePath();\n    }\n});\n\n/**\n * 圆环\n * @module zrender/graphic/shape/Ring\n */\n\nvar Ring = Path.extend({\n\n    type: 'ring',\n\n    shape: {\n        cx: 0,\n        cy: 0,\n        r: 0,\n        r0: 0\n    },\n\n    buildPath: function (ctx, shape) {\n        var x = shape.cx;\n        var y = shape.cy;\n        var PI2 = Math.PI * 2;\n        ctx.moveTo(x + shape.r, y);\n        ctx.arc(x, y, shape.r, 0, PI2, false);\n        ctx.moveTo(x + shape.r0, y);\n        ctx.arc(x, y, shape.r0, 0, PI2, true);\n    }\n});\n\n/**\n * Catmull-Rom spline 插值折线\n * @module zrender/shape/util/smoothSpline\n * @author pissang (https://www.github.com/pissang)\n *         Kener (@Kener-林峰, kener.linfeng@gmail.com)\n *         errorrik (errorrik@gmail.com)\n */\n\n/**\n * @inner\n */\nfunction interpolate(p0, p1, p2, p3, t, t2, t3) {\n    var v0 = (p2 - p0) * 0.5;\n    var v1 = (p3 - p1) * 0.5;\n    return (2 * (p1 - p2) + v0 + v1) * t3\n            + (-3 * (p1 - p2) - 2 * v0 - v1) * t2\n            + v0 * t + p1;\n}\n\n/**\n * @alias module:zrender/shape/util/smoothSpline\n * @param {Array} points 线段顶点数组\n * @param {boolean} isLoop\n * @return {Array}\n */\nvar smoothSpline = function (points, isLoop) {\n    var len$$1 = points.length;\n    var ret = [];\n\n    var distance$$1 = 0;\n    for (var i = 1; i < len$$1; i++) {\n        distance$$1 += distance(points[i - 1], points[i]);\n    }\n\n    var segs = distance$$1 / 2;\n    segs = segs < len$$1 ? len$$1 : segs;\n    for (var i = 0; i < segs; i++) {\n        var pos = i / (segs - 1) * (isLoop ? len$$1 : len$$1 - 1);\n        var idx = Math.floor(pos);\n\n        var w = pos - idx;\n\n        var p0;\n        var p1 = points[idx % len$$1];\n        var p2;\n        var p3;\n        if (!isLoop) {\n            p0 = points[idx === 0 ? idx : idx - 1];\n            p2 = points[idx > len$$1 - 2 ? len$$1 - 1 : idx + 1];\n            p3 = points[idx > len$$1 - 3 ? len$$1 - 1 : idx + 2];\n        }\n        else {\n            p0 = points[(idx - 1 + len$$1) % len$$1];\n            p2 = points[(idx + 1) % len$$1];\n            p3 = points[(idx + 2) % len$$1];\n        }\n\n        var w2 = w * w;\n        var w3 = w * w2;\n\n        ret.push([\n            interpolate(p0[0], p1[0], p2[0], p3[0], w, w2, w3),\n            interpolate(p0[1], p1[1], p2[1], p3[1], w, w2, w3)\n        ]);\n    }\n    return ret;\n};\n\n/**\n * 贝塞尔平滑曲线\n * @module zrender/shape/util/smoothBezier\n * @author pissang (https://www.github.com/pissang)\n *         Kener (@Kener-林峰, kener.linfeng@gmail.com)\n *         errorrik (errorrik@gmail.com)\n */\n\n/**\n * 贝塞尔平滑曲线\n * @alias module:zrender/shape/util/smoothBezier\n * @param {Array} points 线段顶点数组\n * @param {number} smooth 平滑等级, 0-1\n * @param {boolean} isLoop\n * @param {Array} constraint 将计算出来的控制点约束在一个包围盒内\n *                           比如 [[0, 0], [100, 100]], 这个包围盒会与\n *                           整个折线的包围盒做一个并集用来约束控制点。\n * @param {Array} 计算出来的控制点数组\n */\nvar smoothBezier = function (points, smooth, isLoop, constraint) {\n    var cps = [];\n\n    var v = [];\n    var v1 = [];\n    var v2 = [];\n    var prevPoint;\n    var nextPoint;\n\n    var min$$1;\n    var max$$1;\n    if (constraint) {\n        min$$1 = [Infinity, Infinity];\n        max$$1 = [-Infinity, -Infinity];\n        for (var i = 0, len$$1 = points.length; i < len$$1; i++) {\n            min(min$$1, min$$1, points[i]);\n            max(max$$1, max$$1, points[i]);\n        }\n        // 与指定的包围盒做并集\n        min(min$$1, min$$1, constraint[0]);\n        max(max$$1, max$$1, constraint[1]);\n    }\n\n    for (var i = 0, len$$1 = points.length; i < len$$1; i++) {\n        var point = points[i];\n\n        if (isLoop) {\n            prevPoint = points[i ? i - 1 : len$$1 - 1];\n            nextPoint = points[(i + 1) % len$$1];\n        }\n        else {\n            if (i === 0 || i === len$$1 - 1) {\n                cps.push(clone$1(points[i]));\n                continue;\n            }\n            else {\n                prevPoint = points[i - 1];\n                nextPoint = points[i + 1];\n            }\n        }\n\n        sub(v, nextPoint, prevPoint);\n\n        // use degree to scale the handle length\n        scale(v, v, smooth);\n\n        var d0 = distance(point, prevPoint);\n        var d1 = distance(point, nextPoint);\n        var sum = d0 + d1;\n        if (sum !== 0) {\n            d0 /= sum;\n            d1 /= sum;\n        }\n\n        scale(v1, v, -d0);\n        scale(v2, v, d1);\n        var cp0 = add([], point, v1);\n        var cp1 = add([], point, v2);\n        if (constraint) {\n            max(cp0, cp0, min$$1);\n            min(cp0, cp0, max$$1);\n            max(cp1, cp1, min$$1);\n            min(cp1, cp1, max$$1);\n        }\n        cps.push(cp0);\n        cps.push(cp1);\n    }\n\n    if (isLoop) {\n        cps.push(cps.shift());\n    }\n\n    return cps;\n};\n\nfunction buildPath$1(ctx, shape, closePath) {\n    var points = shape.points;\n    var smooth = shape.smooth;\n    if (points && points.length >= 2) {\n        if (smooth && smooth !== 'spline') {\n            var controlPoints = smoothBezier(\n                points, smooth, closePath, shape.smoothConstraint\n            );\n\n            ctx.moveTo(points[0][0], points[0][1]);\n            var len = points.length;\n            for (var i = 0; i < (closePath ? len : len - 1); i++) {\n                var cp1 = controlPoints[i * 2];\n                var cp2 = controlPoints[i * 2 + 1];\n                var p = points[(i + 1) % len];\n                ctx.bezierCurveTo(\n                    cp1[0], cp1[1], cp2[0], cp2[1], p[0], p[1]\n                );\n            }\n        }\n        else {\n            if (smooth === 'spline') {\n                points = smoothSpline(points, closePath);\n            }\n\n            ctx.moveTo(points[0][0], points[0][1]);\n            for (var i = 1, l = points.length; i < l; i++) {\n                ctx.lineTo(points[i][0], points[i][1]);\n            }\n        }\n\n        closePath && ctx.closePath();\n    }\n}\n\n/**\n * 多边形\n * @module zrender/shape/Polygon\n */\n\nvar Polygon = Path.extend({\n\n    type: 'polygon',\n\n    shape: {\n        points: null,\n\n        smooth: false,\n\n        smoothConstraint: null\n    },\n\n    buildPath: function (ctx, shape) {\n        buildPath$1(ctx, shape, true);\n    }\n});\n\n/**\n * @module zrender/graphic/shape/Polyline\n */\n\nvar Polyline = Path.extend({\n\n    type: 'polyline',\n\n    shape: {\n        points: null,\n\n        smooth: false,\n\n        smoothConstraint: null\n    },\n\n    style: {\n        stroke: '#000',\n\n        fill: null\n    },\n\n    buildPath: function (ctx, shape) {\n        buildPath$1(ctx, shape, false);\n    }\n});\n\n/**\n * Sub-pixel optimize for canvas rendering, prevent from blur\n * when rendering a thin vertical/horizontal line.\n */\n\nvar round = Math.round;\n\n/**\n * Sub pixel optimize line for canvas\n *\n * @param {Object} outputShape The modification will be performed on `outputShape`.\n *                 `outputShape` and `inputShape` can be the same object.\n *                 `outputShape` object can be used repeatly, because all of\n *                 the `x1`, `x2`, `y1`, `y2` will be assigned in this method.\n * @param {Object} [inputShape]\n * @param {number} [inputShape.x1]\n * @param {number} [inputShape.y1]\n * @param {number} [inputShape.x2]\n * @param {number} [inputShape.y2]\n * @param {Object} [style]\n * @param {number} [style.lineWidth]\n */\nfunction subPixelOptimizeLine$1(outputShape, inputShape, style) {\n    var lineWidth = style && style.lineWidth;\n\n    if (!inputShape || !lineWidth) {\n        return;\n    }\n\n    var x1 = inputShape.x1;\n    var x2 = inputShape.x2;\n    var y1 = inputShape.y1;\n    var y2 = inputShape.y2;\n\n    if (round(x1 * 2) === round(x2 * 2)) {\n        outputShape.x1 = outputShape.x2 = subPixelOptimize$1(x1, lineWidth, true);\n    }\n    else {\n        outputShape.x1 = x1;\n        outputShape.x2 = x2;\n    }\n    if (round(y1 * 2) === round(y2 * 2)) {\n        outputShape.y1 = outputShape.y2 = subPixelOptimize$1(y1, lineWidth, true);\n    }\n    else {\n        outputShape.y1 = y1;\n        outputShape.y2 = y2;\n    }\n}\n\n/**\n * Sub pixel optimize rect for canvas\n *\n * @param {Object} outputShape The modification will be performed on `outputShape`.\n *                 `outputShape` and `inputShape` can be the same object.\n *                 `outputShape` object can be used repeatly, because all of\n *                 the `x`, `y`, `width`, `height` will be assigned in this method.\n * @param {Object} [inputShape]\n * @param {number} [inputShape.x]\n * @param {number} [inputShape.y]\n * @param {number} [inputShape.width]\n * @param {number} [inputShape.height]\n * @param {Object} [style]\n * @param {number} [style.lineWidth]\n */\nfunction subPixelOptimizeRect$1(outputShape, inputShape, style) {\n    var lineWidth = style && style.lineWidth;\n\n    if (!inputShape || !lineWidth) {\n        return;\n    }\n\n    var originX = inputShape.x;\n    var originY = inputShape.y;\n    var originWidth = inputShape.width;\n    var originHeight = inputShape.height;\n\n    outputShape.x = subPixelOptimize$1(originX, lineWidth, true);\n    outputShape.y = subPixelOptimize$1(originY, lineWidth, true);\n    outputShape.width = Math.max(\n        subPixelOptimize$1(originX + originWidth, lineWidth, false) - outputShape.x,\n        originWidth === 0 ? 0 : 1\n    );\n    outputShape.height = Math.max(\n        subPixelOptimize$1(originY + originHeight, lineWidth, false) - outputShape.y,\n        originHeight === 0 ? 0 : 1\n    );\n}\n\n/**\n * Sub pixel optimize for canvas\n *\n * @param {number} position Coordinate, such as x, y\n * @param {number} lineWidth Should be nonnegative integer.\n * @param {boolean=} positiveOrNegative Default false (negative).\n * @return {number} Optimized position.\n */\nfunction subPixelOptimize$1(position, lineWidth, positiveOrNegative) {\n    // Assure that (position + lineWidth / 2) is near integer edge,\n    // otherwise line will be fuzzy in canvas.\n    var doubledPosition = round(position * 2);\n    return (doubledPosition + round(lineWidth)) % 2 === 0\n        ? doubledPosition / 2\n        : (doubledPosition + (positiveOrNegative ? 1 : -1)) / 2;\n}\n\n/**\n * 矩形\n * @module zrender/graphic/shape/Rect\n */\n\n// Avoid create repeatly.\nvar subPixelOptimizeOutputShape = {};\n\nvar Rect = Path.extend({\n\n    type: 'rect',\n\n    shape: {\n        // 左上、右上、右下、左下角的半径依次为r1、r2、r3、r4\n        // r缩写为1         相当于 [1, 1, 1, 1]\n        // r缩写为[1]       相当于 [1, 1, 1, 1]\n        // r缩写为[1, 2]    相当于 [1, 2, 1, 2]\n        // r缩写为[1, 2, 3] 相当于 [1, 2, 3, 2]\n        r: 0,\n\n        x: 0,\n        y: 0,\n        width: 0,\n        height: 0\n    },\n\n    buildPath: function (ctx, shape) {\n        var x;\n        var y;\n        var width;\n        var height;\n\n        if (this.subPixelOptimize) {\n            subPixelOptimizeRect$1(subPixelOptimizeOutputShape, shape, this.style);\n            x = subPixelOptimizeOutputShape.x;\n            y = subPixelOptimizeOutputShape.y;\n            width = subPixelOptimizeOutputShape.width;\n            height = subPixelOptimizeOutputShape.height;\n            subPixelOptimizeOutputShape.r = shape.r;\n            shape = subPixelOptimizeOutputShape;\n        }\n        else {\n            x = shape.x;\n            y = shape.y;\n            width = shape.width;\n            height = shape.height;\n        }\n\n        if (!shape.r) {\n            ctx.rect(x, y, width, height);\n        }\n        else {\n            buildPath(ctx, shape);\n        }\n        ctx.closePath();\n        return;\n    }\n});\n\n/**\n * 直线\n * @module zrender/graphic/shape/Line\n */\n\n// Avoid create repeatly.\nvar subPixelOptimizeOutputShape$1 = {};\n\nvar Line = Path.extend({\n\n    type: 'line',\n\n    shape: {\n        // Start point\n        x1: 0,\n        y1: 0,\n        // End point\n        x2: 0,\n        y2: 0,\n\n        percent: 1\n    },\n\n    style: {\n        stroke: '#000',\n        fill: null\n    },\n\n    buildPath: function (ctx, shape) {\n        var x1;\n        var y1;\n        var x2;\n        var y2;\n\n        if (this.subPixelOptimize) {\n            subPixelOptimizeLine$1(subPixelOptimizeOutputShape$1, shape, this.style);\n            x1 = subPixelOptimizeOutputShape$1.x1;\n            y1 = subPixelOptimizeOutputShape$1.y1;\n            x2 = subPixelOptimizeOutputShape$1.x2;\n            y2 = subPixelOptimizeOutputShape$1.y2;\n        }\n        else {\n            x1 = shape.x1;\n            y1 = shape.y1;\n            x2 = shape.x2;\n            y2 = shape.y2;\n        }\n\n        var percent = shape.percent;\n\n        if (percent === 0) {\n            return;\n        }\n\n        ctx.moveTo(x1, y1);\n\n        if (percent < 1) {\n            x2 = x1 * (1 - percent) + x2 * percent;\n            y2 = y1 * (1 - percent) + y2 * percent;\n        }\n        ctx.lineTo(x2, y2);\n    },\n\n    /**\n     * Get point at percent\n     * @param  {number} percent\n     * @return {Array.<number>}\n     */\n    pointAt: function (p) {\n        var shape = this.shape;\n        return [\n            shape.x1 * (1 - p) + shape.x2 * p,\n            shape.y1 * (1 - p) + shape.y2 * p\n        ];\n    }\n});\n\n/**\n * 贝塞尔曲线\n * @module zrender/shape/BezierCurve\n */\n\nvar out = [];\n\nfunction someVectorAt(shape, t, isTangent) {\n    var cpx2 = shape.cpx2;\n    var cpy2 = shape.cpy2;\n    if (cpx2 === null || cpy2 === null) {\n        return [\n            (isTangent ? cubicDerivativeAt : cubicAt)(shape.x1, shape.cpx1, shape.cpx2, shape.x2, t),\n            (isTangent ? cubicDerivativeAt : cubicAt)(shape.y1, shape.cpy1, shape.cpy2, shape.y2, t)\n        ];\n    }\n    else {\n        return [\n            (isTangent ? quadraticDerivativeAt : quadraticAt)(shape.x1, shape.cpx1, shape.x2, t),\n            (isTangent ? quadraticDerivativeAt : quadraticAt)(shape.y1, shape.cpy1, shape.y2, t)\n        ];\n    }\n}\n\nvar BezierCurve = Path.extend({\n\n    type: 'bezier-curve',\n\n    shape: {\n        x1: 0,\n        y1: 0,\n        x2: 0,\n        y2: 0,\n        cpx1: 0,\n        cpy1: 0,\n        // cpx2: 0,\n        // cpy2: 0\n\n        // Curve show percent, for animating\n        percent: 1\n    },\n\n    style: {\n        stroke: '#000',\n        fill: null\n    },\n\n    buildPath: function (ctx, shape) {\n        var x1 = shape.x1;\n        var y1 = shape.y1;\n        var x2 = shape.x2;\n        var y2 = shape.y2;\n        var cpx1 = shape.cpx1;\n        var cpy1 = shape.cpy1;\n        var cpx2 = shape.cpx2;\n        var cpy2 = shape.cpy2;\n        var percent = shape.percent;\n        if (percent === 0) {\n            return;\n        }\n\n        ctx.moveTo(x1, y1);\n\n        if (cpx2 == null || cpy2 == null) {\n            if (percent < 1) {\n                quadraticSubdivide(\n                    x1, cpx1, x2, percent, out\n                );\n                cpx1 = out[1];\n                x2 = out[2];\n                quadraticSubdivide(\n                    y1, cpy1, y2, percent, out\n                );\n                cpy1 = out[1];\n                y2 = out[2];\n            }\n\n            ctx.quadraticCurveTo(\n                cpx1, cpy1,\n                x2, y2\n            );\n        }\n        else {\n            if (percent < 1) {\n                cubicSubdivide(\n                    x1, cpx1, cpx2, x2, percent, out\n                );\n                cpx1 = out[1];\n                cpx2 = out[2];\n                x2 = out[3];\n                cubicSubdivide(\n                    y1, cpy1, cpy2, y2, percent, out\n                );\n                cpy1 = out[1];\n                cpy2 = out[2];\n                y2 = out[3];\n            }\n            ctx.bezierCurveTo(\n                cpx1, cpy1,\n                cpx2, cpy2,\n                x2, y2\n            );\n        }\n    },\n\n    /**\n     * Get point at percent\n     * @param  {number} t\n     * @return {Array.<number>}\n     */\n    pointAt: function (t) {\n        return someVectorAt(this.shape, t, false);\n    },\n\n    /**\n     * Get tangent at percent\n     * @param  {number} t\n     * @return {Array.<number>}\n     */\n    tangentAt: function (t) {\n        var p = someVectorAt(this.shape, t, true);\n        return normalize(p, p);\n    }\n});\n\n/**\n * 圆弧\n * @module zrender/graphic/shape/Arc\n */\n\nvar Arc = Path.extend({\n\n    type: 'arc',\n\n    shape: {\n\n        cx: 0,\n\n        cy: 0,\n\n        r: 0,\n\n        startAngle: 0,\n\n        endAngle: Math.PI * 2,\n\n        clockwise: true\n    },\n\n    style: {\n\n        stroke: '#000',\n\n        fill: null\n    },\n\n    buildPath: function (ctx, shape) {\n\n        var x = shape.cx;\n        var y = shape.cy;\n        var r = Math.max(shape.r, 0);\n        var startAngle = shape.startAngle;\n        var endAngle = shape.endAngle;\n        var clockwise = shape.clockwise;\n\n        var unitX = Math.cos(startAngle);\n        var unitY = Math.sin(startAngle);\n\n        ctx.moveTo(unitX * r + x, unitY * r + y);\n        ctx.arc(x, y, r, startAngle, endAngle, !clockwise);\n    }\n});\n\n// CompoundPath to improve performance\n\nvar CompoundPath = Path.extend({\n\n    type: 'compound',\n\n    shape: {\n\n        paths: null\n    },\n\n    _updatePathDirty: function () {\n        var dirtyPath = this.__dirtyPath;\n        var paths = this.shape.paths;\n        for (var i = 0; i < paths.length; i++) {\n            // Mark as dirty if any subpath is dirty\n            dirtyPath = dirtyPath || paths[i].__dirtyPath;\n        }\n        this.__dirtyPath = dirtyPath;\n        this.__dirty = this.__dirty || dirtyPath;\n    },\n\n    beforeBrush: function () {\n        this._updatePathDirty();\n        var paths = this.shape.paths || [];\n        var scale = this.getGlobalScale();\n        // Update path scale\n        for (var i = 0; i < paths.length; i++) {\n            if (!paths[i].path) {\n                paths[i].createPathProxy();\n            }\n            paths[i].path.setScale(scale[0], scale[1], paths[i].segmentIgnoreThreshold);\n        }\n    },\n\n    buildPath: function (ctx, shape) {\n        var paths = shape.paths || [];\n        for (var i = 0; i < paths.length; i++) {\n            paths[i].buildPath(ctx, paths[i].shape, true);\n        }\n    },\n\n    afterBrush: function () {\n        var paths = this.shape.paths || [];\n        for (var i = 0; i < paths.length; i++) {\n            paths[i].__dirtyPath = false;\n        }\n    },\n\n    getBoundingRect: function () {\n        this._updatePathDirty();\n        return Path.prototype.getBoundingRect.call(this);\n    }\n});\n\n/**\n * @param {Array.<Object>} colorStops\n */\nvar Gradient = function (colorStops) {\n\n    this.colorStops = colorStops || [];\n\n};\n\nGradient.prototype = {\n\n    constructor: Gradient,\n\n    addColorStop: function (offset, color) {\n        this.colorStops.push({\n\n            offset: offset,\n\n            color: color\n        });\n    }\n\n};\n\n/**\n * x, y, x2, y2 are all percent from 0 to 1\n * @param {number} [x=0]\n * @param {number} [y=0]\n * @param {number} [x2=1]\n * @param {number} [y2=0]\n * @param {Array.<Object>} colorStops\n * @param {boolean} [globalCoord=false]\n */\nvar LinearGradient = function (x, y, x2, y2, colorStops, globalCoord) {\n    // Should do nothing more in this constructor. Because gradient can be\n    // declard by `color: {type: 'linear', colorStops: ...}`, where\n    // this constructor will not be called.\n\n    this.x = x == null ? 0 : x;\n\n    this.y = y == null ? 0 : y;\n\n    this.x2 = x2 == null ? 1 : x2;\n\n    this.y2 = y2 == null ? 0 : y2;\n\n    // Can be cloned\n    this.type = 'linear';\n\n    // If use global coord\n    this.global = globalCoord || false;\n\n    Gradient.call(this, colorStops);\n};\n\nLinearGradient.prototype = {\n\n    constructor: LinearGradient\n};\n\ninherits(LinearGradient, Gradient);\n\n/**\n * x, y, r are all percent from 0 to 1\n * @param {number} [x=0.5]\n * @param {number} [y=0.5]\n * @param {number} [r=0.5]\n * @param {Array.<Object>} [colorStops]\n * @param {boolean} [globalCoord=false]\n */\nvar RadialGradient = function (x, y, r, colorStops, globalCoord) {\n    // Should do nothing more in this constructor. Because gradient can be\n    // declard by `color: {type: 'radial', colorStops: ...}`, where\n    // this constructor will not be called.\n\n    this.x = x == null ? 0.5 : x;\n\n    this.y = y == null ? 0.5 : y;\n\n    this.r = r == null ? 0.5 : r;\n\n    // Can be cloned\n    this.type = 'radial';\n\n    // If use global coord\n    this.global = globalCoord || false;\n\n    Gradient.call(this, colorStops);\n};\n\nRadialGradient.prototype = {\n\n    constructor: RadialGradient\n};\n\ninherits(RadialGradient, Gradient);\n\n/**\n * Displayable for incremental rendering. It will be rendered in a separate layer\n * IncrementalDisplay have two main methods. `clearDisplayables` and `addDisplayables`\n * addDisplayables will render the added displayables incremetally.\n *\n * It use a not clearFlag to tell the painter don't clear the layer if it's the first element.\n */\n// TODO Style override ?\nfunction IncrementalDisplayble(opts) {\n\n    Displayable.call(this, opts);\n\n    this._displayables = [];\n\n    this._temporaryDisplayables = [];\n\n    this._cursor = 0;\n\n    this.notClear = true;\n}\n\nIncrementalDisplayble.prototype.incremental = true;\n\nIncrementalDisplayble.prototype.clearDisplaybles = function () {\n    this._displayables = [];\n    this._temporaryDisplayables = [];\n    this._cursor = 0;\n    this.dirty();\n\n    this.notClear = false;\n};\n\nIncrementalDisplayble.prototype.addDisplayable = function (displayable, notPersistent) {\n    if (notPersistent) {\n        this._temporaryDisplayables.push(displayable);\n    }\n    else {\n        this._displayables.push(displayable);\n    }\n    this.dirty();\n};\n\nIncrementalDisplayble.prototype.addDisplayables = function (displayables, notPersistent) {\n    notPersistent = notPersistent || false;\n    for (var i = 0; i < displayables.length; i++) {\n        this.addDisplayable(displayables[i], notPersistent);\n    }\n};\n\nIncrementalDisplayble.prototype.eachPendingDisplayable = function (cb) {\n    for (var i = this._cursor; i < this._displayables.length; i++) {\n        cb && cb(this._displayables[i]);\n    }\n    for (var i = 0; i < this._temporaryDisplayables.length; i++) {\n        cb && cb(this._temporaryDisplayables[i]);\n    }\n};\n\nIncrementalDisplayble.prototype.update = function () {\n    this.updateTransform();\n    for (var i = this._cursor; i < this._displayables.length; i++) {\n        var displayable = this._displayables[i];\n        // PENDING\n        displayable.parent = this;\n        displayable.update();\n        displayable.parent = null;\n    }\n    for (var i = 0; i < this._temporaryDisplayables.length; i++) {\n        var displayable = this._temporaryDisplayables[i];\n        // PENDING\n        displayable.parent = this;\n        displayable.update();\n        displayable.parent = null;\n    }\n};\n\nIncrementalDisplayble.prototype.brush = function (ctx, prevEl) {\n    // Render persistant displayables.\n    for (var i = this._cursor; i < this._displayables.length; i++) {\n        var displayable = this._displayables[i];\n        displayable.beforeBrush && displayable.beforeBrush(ctx);\n        displayable.brush(ctx, i === this._cursor ? null : this._displayables[i - 1]);\n        displayable.afterBrush && displayable.afterBrush(ctx);\n    }\n    this._cursor = i;\n    // Render temporary displayables.\n    for (var i = 0; i < this._temporaryDisplayables.length; i++) {\n        var displayable = this._temporaryDisplayables[i];\n        displayable.beforeBrush && displayable.beforeBrush(ctx);\n        displayable.brush(ctx, i === 0 ? null : this._temporaryDisplayables[i - 1]);\n        displayable.afterBrush && displayable.afterBrush(ctx);\n    }\n\n    this._temporaryDisplayables = [];\n\n    this.notClear = true;\n};\n\nvar m = [];\nIncrementalDisplayble.prototype.getBoundingRect = function () {\n    if (!this._rect) {\n        var rect = new BoundingRect(Infinity, Infinity, -Infinity, -Infinity);\n        for (var i = 0; i < this._displayables.length; i++) {\n            var displayable = this._displayables[i];\n            var childRect = displayable.getBoundingRect().clone();\n            if (displayable.needLocalTransform()) {\n                childRect.applyTransform(displayable.getLocalTransform(m));\n            }\n            rect.union(childRect);\n        }\n        this._rect = rect;\n    }\n    return this._rect;\n};\n\nIncrementalDisplayble.prototype.contain = function (x, y) {\n    var localPos = this.transformCoordToLocal(x, y);\n    var rect = this.getBoundingRect();\n\n    if (rect.contain(localPos[0], localPos[1])) {\n        for (var i = 0; i < this._displayables.length; i++) {\n            var displayable = this._displayables[i];\n            if (displayable.contain(x, y)) {\n                return true;\n            }\n        }\n    }\n    return false;\n};\n\ninherits(IncrementalDisplayble, Displayable);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar mathMax$1 = Math.max;\nvar mathMin$1 = Math.min;\n\nvar EMPTY_OBJ = {};\n\nvar Z2_EMPHASIS_LIFT = 1;\n\n// key: label model property nane, value: style property name.\nvar CACHED_LABEL_STYLE_PROPERTIES = {\n    color: 'textFill',\n    textBorderColor: 'textStroke',\n    textBorderWidth: 'textStrokeWidth'\n};\n\nvar EMPHASIS = 'emphasis';\nvar NORMAL = 'normal';\n\n// Reserve 0 as default.\nvar _highlightNextDigit = 1;\nvar _highlightKeyMap = {};\n\n\n/**\n * Extend shape with parameters\n */\nfunction extendShape(opts) {\n    return Path.extend(opts);\n}\n\n/**\n * Extend path\n */\nfunction extendPath(pathData, opts) {\n    return extendFromString(pathData, opts);\n}\n\n/**\n * Create a path element from path data string\n * @param {string} pathData\n * @param {Object} opts\n * @param {module:zrender/core/BoundingRect} rect\n * @param {string} [layout=cover] 'center' or 'cover'\n */\nfunction makePath(pathData, opts, rect, layout) {\n    var path = createFromString(pathData, opts);\n    if (rect) {\n        if (layout === 'center') {\n            rect = centerGraphic(rect, path.getBoundingRect());\n        }\n        resizePath(path, rect);\n    }\n    return path;\n}\n\n/**\n * Create a image element from image url\n * @param {string} imageUrl image url\n * @param {Object} opts options\n * @param {module:zrender/core/BoundingRect} rect constrain rect\n * @param {string} [layout=cover] 'center' or 'cover'\n */\nfunction makeImage(imageUrl, rect, layout) {\n    var path = new ZImage({\n        style: {\n            image: imageUrl,\n            x: rect.x,\n            y: rect.y,\n            width: rect.width,\n            height: rect.height\n        },\n        onload: function (img) {\n            if (layout === 'center') {\n                var boundingRect = {\n                    width: img.width,\n                    height: img.height\n                };\n                path.setStyle(centerGraphic(rect, boundingRect));\n            }\n        }\n    });\n    return path;\n}\n\n/**\n * Get position of centered element in bounding box.\n *\n * @param  {Object} rect         element local bounding box\n * @param  {Object} boundingRect constraint bounding box\n * @return {Object} element position containing x, y, width, and height\n */\nfunction centerGraphic(rect, boundingRect) {\n    // Set rect to center, keep width / height ratio.\n    var aspect = boundingRect.width / boundingRect.height;\n    var width = rect.height * aspect;\n    var height;\n    if (width <= rect.width) {\n        height = rect.height;\n    }\n    else {\n        width = rect.width;\n        height = width / aspect;\n    }\n    var cx = rect.x + rect.width / 2;\n    var cy = rect.y + rect.height / 2;\n\n    return {\n        x: cx - width / 2,\n        y: cy - height / 2,\n        width: width,\n        height: height\n    };\n}\n\nvar mergePath = mergePath$1;\n\n/**\n * Resize a path to fit the rect\n * @param {module:zrender/graphic/Path} path\n * @param {Object} rect\n */\nfunction resizePath(path, rect) {\n    if (!path.applyTransform) {\n        return;\n    }\n\n    var pathRect = path.getBoundingRect();\n\n    var m = pathRect.calculateTransform(rect);\n\n    path.applyTransform(m);\n}\n\n/**\n * Sub pixel optimize line for canvas\n *\n * @param {Object} param\n * @param {Object} [param.shape]\n * @param {number} [param.shape.x1]\n * @param {number} [param.shape.y1]\n * @param {number} [param.shape.x2]\n * @param {number} [param.shape.y2]\n * @param {Object} [param.style]\n * @param {number} [param.style.lineWidth]\n * @return {Object} Modified param\n */\nfunction subPixelOptimizeLine(param) {\n    subPixelOptimizeLine$1(param.shape, param.shape, param.style);\n    return param;\n}\n\n/**\n * Sub pixel optimize rect for canvas\n *\n * @param {Object} param\n * @param {Object} [param.shape]\n * @param {number} [param.shape.x]\n * @param {number} [param.shape.y]\n * @param {number} [param.shape.width]\n * @param {number} [param.shape.height]\n * @param {Object} [param.style]\n * @param {number} [param.style.lineWidth]\n * @return {Object} Modified param\n */\nfunction subPixelOptimizeRect(param) {\n    subPixelOptimizeRect$1(param.shape, param.shape, param.style);\n    return param;\n}\n\n/**\n * Sub pixel optimize for canvas\n *\n * @param {number} position Coordinate, such as x, y\n * @param {number} lineWidth Should be nonnegative integer.\n * @param {boolean=} positiveOrNegative Default false (negative).\n * @return {number} Optimized position.\n */\nvar subPixelOptimize = subPixelOptimize$1;\n\n\nfunction hasFillOrStroke(fillOrStroke) {\n    return fillOrStroke != null && fillOrStroke !== 'none';\n}\n\n// Most lifted color are duplicated.\nvar liftedColorMap = createHashMap();\nvar liftedColorCount = 0;\n\nfunction liftColor(color) {\n    if (typeof color !== 'string') {\n        return color;\n    }\n    var liftedColor = liftedColorMap.get(color);\n    if (!liftedColor) {\n        liftedColor = lift(color, -0.1);\n        if (liftedColorCount < 10000) {\n            liftedColorMap.set(color, liftedColor);\n            liftedColorCount++;\n        }\n    }\n    return liftedColor;\n}\n\nfunction cacheElementStl(el) {\n    if (!el.__hoverStlDirty) {\n        return;\n    }\n    el.__hoverStlDirty = false;\n\n    var hoverStyle = el.__hoverStl;\n    if (!hoverStyle) {\n        el.__cachedNormalStl = el.__cachedNormalZ2 = null;\n        return;\n    }\n\n    var normalStyle = el.__cachedNormalStl = {};\n    el.__cachedNormalZ2 = el.z2;\n    var elStyle = el.style;\n\n    for (var name in hoverStyle) {\n        // See comment in `singleEnterEmphasis`.\n        if (hoverStyle[name] != null) {\n            normalStyle[name] = elStyle[name];\n        }\n    }\n\n    // Always cache fill and stroke to normalStyle for lifting color.\n    normalStyle.fill = elStyle.fill;\n    normalStyle.stroke = elStyle.stroke;\n}\n\nfunction singleEnterEmphasis(el) {\n    var hoverStl = el.__hoverStl;\n\n    if (!hoverStl || el.__highlighted) {\n        return;\n    }\n\n    var useHoverLayer = el.useHoverLayer;\n    el.__highlighted = useHoverLayer ? 'layer' : 'plain';\n\n    var zr = el.__zr;\n    if (el.isGroup || (!zr && useHoverLayer)) {\n        return;\n    }\n\n    var elTarget = el;\n    var targetStyle = el.style;\n\n    if (useHoverLayer) {\n        elTarget = zr.addHover(el);\n        targetStyle = elTarget.style;\n    }\n\n    rollbackDefaultTextStyle(targetStyle);\n\n    if (!useHoverLayer) {\n        cacheElementStl(elTarget);\n    }\n\n    // styles can be:\n    // {\n    //    label: {\n    //        show: false,\n    //        position: 'outside',\n    //        fontSize: 18\n    //    },\n    //    emphasis: {\n    //        label: {\n    //            show: true\n    //        }\n    //    }\n    // },\n    // where properties of `emphasis` may not appear in `normal`. We previously use\n    // module:echarts/util/model#defaultEmphasis to merge `normal` to `emphasis`.\n    // But consider rich text and setOption in merge mode, it is impossible to cover\n    // all properties in merge. So we use merge mode when setting style here.\n    // But we choose the merge strategy that only properties that is not `null/undefined`.\n    // Because when making a textStyle (espacially rich text), it is not easy to distinguish\n    // `hasOwnProperty` and `null/undefined` in code, so we trade them as the same for simplicity.\n    // But this strategy brings a trouble that `null/undefined` can not be used to remove\n    // style any more in `emphasis`. Users can both set properties directly on normal and\n    // emphasis to avoid this issue, or we might support `'none'` for this case if required.\n    targetStyle.extendFrom(hoverStl);\n\n    setDefaultHoverFillStroke(targetStyle, hoverStl, 'fill');\n    setDefaultHoverFillStroke(targetStyle, hoverStl, 'stroke');\n\n    applyDefaultTextStyle(targetStyle);\n\n    if (!useHoverLayer) {\n        el.dirty(false);\n        el.z2 += Z2_EMPHASIS_LIFT;\n    }\n}\n\nfunction setDefaultHoverFillStroke(targetStyle, hoverStyle, prop) {\n    if (!hasFillOrStroke(hoverStyle[prop]) && hasFillOrStroke(targetStyle[prop])) {\n        targetStyle[prop] = liftColor(targetStyle[prop]);\n    }\n}\n\nfunction singleEnterNormal(el) {\n    var highlighted = el.__highlighted;\n\n    if (!highlighted) {\n        return;\n    }\n\n    el.__highlighted = false;\n\n    if (el.isGroup) {\n        return;\n    }\n\n    if (highlighted === 'layer') {\n        el.__zr && el.__zr.removeHover(el);\n    }\n    else {\n        var style = el.style;\n\n        var normalStl = el.__cachedNormalStl;\n        if (normalStl) {\n            rollbackDefaultTextStyle(style);\n            el.setStyle(normalStl);\n            applyDefaultTextStyle(style);\n        }\n        // `__cachedNormalZ2` will not be reset if calling `setElementHoverStyle`\n        // when `el` is on emphasis state. So here by comparing with 1, we try\n        // hard to make the bug case rare.\n        var normalZ2 = el.__cachedNormalZ2;\n        if (normalZ2 != null && el.z2 - normalZ2 === Z2_EMPHASIS_LIFT) {\n            el.z2 = normalZ2;\n        }\n    }\n}\n\nfunction traverseUpdate(el, updater, commonParam) {\n    // If root is group, also enter updater for `highDownOnUpdate`.\n    var fromState = NORMAL;\n    var toState = NORMAL;\n    var trigger;\n    // See the rule of `highDownOnUpdate` on `graphic.setAsHighDownDispatcher`.\n    el.__highlighted && (fromState = EMPHASIS, trigger = true);\n    updater(el, commonParam);\n    el.__highlighted && (toState = EMPHASIS, trigger = true);\n\n    el.isGroup && el.traverse(function (child) {\n        !child.isGroup && updater(child, commonParam);\n    });\n\n    trigger && el.__highDownOnUpdate && el.__highDownOnUpdate(fromState, toState);\n}\n\n/**\n * Set hover style (namely \"emphasis style\") of element, based on the current\n * style of the given `el`.\n * This method should be called after all of the normal styles have been adopted\n * to the `el`. See the reason on `setHoverStyle`.\n *\n * @param {module:zrender/Element} el Should not be `zrender/container/Group`.\n * @param {Object} [el.hoverStyle] Can be set on el or its descendants,\n *        e.g., `el.hoverStyle = ...; graphic.setHoverStyle(el); `.\n *        Often used when item group has a label element and it's hoverStyle is different.\n * @param {Object|boolean} [hoverStl] The specified hover style.\n *        If set as `false`, disable the hover style.\n *        Similarly, The `el.hoverStyle` can alse be set\n *        as `false` to disable the hover style.\n *        Otherwise, use the default hover style if not provided.\n */\nfunction setElementHoverStyle(el, hoverStl) {\n    // For performance consideration, it might be better to make the \"hover style\" only the\n    // difference properties from the \"normal style\", but not a entire copy of all styles.\n    hoverStl = el.__hoverStl = hoverStl !== false && (el.hoverStyle || hoverStl || {});\n    el.__hoverStlDirty = true;\n\n    // FIXME\n    // It is not completely right to save \"normal\"/\"emphasis\" flag on elements.\n    // It probably should be saved on `data` of series. Consider the cases:\n    // (1) A highlighted elements are moved out of the view port and re-enter\n    // again by dataZoom.\n    // (2) call `setOption` and replace elements totally when they are highlighted.\n    if (el.__highlighted) {\n        // Consider the case:\n        // The styles of a highlighted `el` is being updated. The new \"emphasis style\"\n        // should be adapted to the `el`. Notice here new \"normal styles\" should have\n        // been set outside and the cached \"normal style\" is out of date.\n        el.__cachedNormalStl = null;\n        // Do not clear `__cachedNormalZ2` here, because setting `z2` is not a constraint\n        // of this method. In most cases, `z2` is not set and hover style should be able\n        // to rollback. Of course, that would bring bug, but only in a rare case, see\n        // `doSingleLeaveHover` for details.\n        singleEnterNormal(el);\n\n        singleEnterEmphasis(el);\n    }\n}\n\nfunction onElementMouseOver(e) {\n    !shouldSilent(this, e)\n        // \"emphasis\" event highlight has higher priority than mouse highlight.\n        && !this.__highByOuter\n        && traverseUpdate(this, singleEnterEmphasis);\n}\n\nfunction onElementMouseOut(e) {\n    !shouldSilent(this, e)\n        // \"emphasis\" event highlight has higher priority than mouse highlight.\n        && !this.__highByOuter\n        && traverseUpdate(this, singleEnterNormal);\n}\n\nfunction onElementEmphasisEvent(highlightDigit) {\n    this.__highByOuter |= 1 << (highlightDigit || 0);\n    traverseUpdate(this, singleEnterEmphasis);\n}\n\nfunction onElementNormalEvent(highlightDigit) {\n    !(this.__highByOuter &= ~(1 << (highlightDigit || 0)))\n        && traverseUpdate(this, singleEnterNormal);\n}\n\nfunction shouldSilent(el, e) {\n    return el.__highDownSilentOnTouch && e.zrByTouch;\n}\n\n/**\n * Set hover style (namely \"emphasis style\") of element,\n * based on the current style of the given `el`.\n *\n * (1)\n * **CONSTRAINTS** for this method:\n * <A> This method MUST be called after all of the normal styles having been adopted\n * to the `el`.\n * <B> The input `hoverStyle` (that is, \"emphasis style\") MUST be the subset of the\n * \"normal style\" having been set to the el.\n * <C> `color` MUST be one of the \"normal styles\" (because color might be lifted as\n * a default hover style).\n *\n * The reason: this method treat the current style of the `el` as the \"normal style\"\n * and cache them when enter/update the \"emphasis style\". Consider the case: the `el`\n * is in \"emphasis\" state and `setOption`/`dispatchAction` trigger the style updating\n * logic, where the el should shift from the original emphasis style to the new\n * \"emphasis style\" and should be able to \"downplay\" back to the new \"normal style\".\n *\n * Indeed, it is error-prone to make a interface has so many constraints, but I have\n * not found a better solution yet to fit the backward compatibility, performance and\n * the current programming style.\n *\n * (2)\n * Call the method for a \"root\" element once. Do not call it for each descendants.\n * If the descendants elemenets of a group has itself hover style different from the\n * root group, we can simply mount the style on `el.hoverStyle` for them, but should\n * not call this method for them.\n *\n * (3) These input parameters can be set directly on `el`:\n *\n * @param {module:zrender/Element} el\n * @param {Object} [el.hoverStyle] See `graphic.setElementHoverStyle`.\n * @param {boolean} [el.highDownSilentOnTouch=false] See `graphic.setAsHighDownDispatcher`.\n * @param {Function} [el.highDownOnUpdate] See `graphic.setAsHighDownDispatcher`.\n * @param {Object|boolean} [hoverStyle] See `graphic.setElementHoverStyle`.\n */\nfunction setHoverStyle(el, hoverStyle) {\n    setAsHighDownDispatcher(el, true);\n    traverseUpdate(el, setElementHoverStyle, hoverStyle);\n}\n\n/**\n * @param {module:zrender/Element} el\n * @param {Function} [el.highDownOnUpdate] Called when state updated.\n *        Since `setHoverStyle` has the constraint that it must be called after\n *        all of the normal style updated, `highDownOnUpdate` is not needed to\n *        trigger if both `fromState` and `toState` is 'normal', and needed to\n *        trigger if both `fromState` and `toState` is 'emphasis', which enables\n *        to sync outside style settings to \"emphasis\" state.\n *        @this {string} This dispatcher `el`.\n *        @param {string} fromState Can be \"normal\" or \"emphasis\".\n *               `fromState` might equal to `toState`,\n *               for example, when this method is called when `el` is\n *               on \"emphasis\" state.\n *        @param {string} toState Can be \"normal\" or \"emphasis\".\n *\n *        FIXME\n *        CAUTION: Do not expose `highDownOnUpdate` outside echarts.\n *        Because it is not a complete solution. The update\n *        listener should not have been mount in element,\n *        and the normal/emphasis state should not have\n *        mantained on elements.\n *\n * @param {boolean} [el.highDownSilentOnTouch=false]\n *        In touch device, mouseover event will be trigger on touchstart event\n *        (see module:zrender/dom/HandlerProxy). By this mechanism, we can\n *        conveniently use hoverStyle when tap on touch screen without additional\n *        code for compatibility.\n *        But if the chart/component has select feature, which usually also use\n *        hoverStyle, there might be conflict between 'select-highlight' and\n *        'hover-highlight' especially when roam is enabled (see geo for example).\n *        In this case, `highDownSilentOnTouch` should be used to disable\n *        hover-highlight on touch device.\n * @param {boolean} [asDispatcher=true] If `false`, do not set as \"highDownDispatcher\".\n */\nfunction setAsHighDownDispatcher(el, asDispatcher) {\n    var disable = asDispatcher === false;\n    // Make `highDownSilentOnTouch` and `highDownOnUpdate` only work after\n    // `setAsHighDownDispatcher` called. Avoid it is modified by user unexpectedly.\n    el.__highDownSilentOnTouch = el.highDownSilentOnTouch;\n    el.__highDownOnUpdate = el.highDownOnUpdate;\n\n    // Simple optimize, since this method might be\n    // called for each elements of a group in some cases.\n    if (!disable || el.__highDownDispatcher) {\n        var method = disable ? 'off' : 'on';\n\n        // Duplicated function will be auto-ignored, see Eventful.js.\n        el[method]('mouseover', onElementMouseOver)[method]('mouseout', onElementMouseOut);\n        // Emphasis, normal can be triggered manually by API or other components like hover link.\n        el[method]('emphasis', onElementEmphasisEvent)[method]('normal', onElementNormalEvent);\n        // Also keep previous record.\n        el.__highByOuter = el.__highByOuter || 0;\n\n        el.__highDownDispatcher = !disable;\n    }\n}\n\n/**\n * @param {module:zrender/src/Element} el\n * @return {boolean}\n */\nfunction isHighDownDispatcher(el) {\n    return !!(el && el.__highDownDispatcher);\n}\n\n/**\n * Support hightlight/downplay record on each elements.\n * For the case: hover highlight/downplay (legend, visualMap, ...) and\n * user triggerred hightlight/downplay should not conflict.\n * Only all of the highlightDigit cleared, return to normal.\n * @param {string} highlightKey\n * @return {number} highlightDigit\n */\nfunction getHighlightDigit(highlightKey) {\n    var highlightDigit = _highlightKeyMap[highlightKey];\n    if (highlightDigit == null && _highlightNextDigit <= 32) {\n        highlightDigit = _highlightKeyMap[highlightKey] = _highlightNextDigit++;\n    }\n    return highlightDigit;\n}\n\n/**\n * See more info in `setTextStyleCommon`.\n * @param {Object|module:zrender/graphic/Style} normalStyle\n * @param {Object} emphasisStyle\n * @param {module:echarts/model/Model} normalModel\n * @param {module:echarts/model/Model} emphasisModel\n * @param {Object} opt Check `opt` of `setTextStyleCommon` to find other props.\n * @param {string|Function} [opt.defaultText]\n * @param {module:echarts/model/Model} [opt.labelFetcher] Fetch text by\n *      `opt.labelFetcher.getFormattedLabel(opt.labelDataIndex, 'normal'/'emphasis', null, opt.labelDimIndex)`\n * @param {module:echarts/model/Model} [opt.labelDataIndex] Fetch text by\n *      `opt.textFetcher.getFormattedLabel(opt.labelDataIndex, 'normal'/'emphasis', null, opt.labelDimIndex)`\n * @param {module:echarts/model/Model} [opt.labelDimIndex] Fetch text by\n *      `opt.textFetcher.getFormattedLabel(opt.labelDataIndex, 'normal'/'emphasis', null, opt.labelDimIndex)`\n * @param {Object} [normalSpecified]\n * @param {Object} [emphasisSpecified]\n */\nfunction setLabelStyle(\n    normalStyle, emphasisStyle,\n    normalModel, emphasisModel,\n    opt,\n    normalSpecified, emphasisSpecified\n) {\n    opt = opt || EMPTY_OBJ;\n    var labelFetcher = opt.labelFetcher;\n    var labelDataIndex = opt.labelDataIndex;\n    var labelDimIndex = opt.labelDimIndex;\n\n    // This scenario, `label.normal.show = true; label.emphasis.show = false`,\n    // is not supported util someone requests.\n\n    var showNormal = normalModel.getShallow('show');\n    var showEmphasis = emphasisModel.getShallow('show');\n\n    // Consider performance, only fetch label when necessary.\n    // If `normal.show` is `false` and `emphasis.show` is `true` and `emphasis.formatter` is not set,\n    // label should be displayed, where text is fetched by `normal.formatter` or `opt.defaultText`.\n    var baseText;\n    if (showNormal || showEmphasis) {\n        if (labelFetcher) {\n            baseText = labelFetcher.getFormattedLabel(labelDataIndex, 'normal', null, labelDimIndex);\n        }\n        if (baseText == null) {\n            baseText = isFunction$1(opt.defaultText) ? opt.defaultText(labelDataIndex, opt) : opt.defaultText;\n        }\n    }\n    var normalStyleText = showNormal ? baseText : null;\n    var emphasisStyleText = showEmphasis\n        ? retrieve2(\n            labelFetcher\n                ? labelFetcher.getFormattedLabel(labelDataIndex, 'emphasis', null, labelDimIndex)\n                : null,\n            baseText\n        )\n        : null;\n\n    // Optimize: If style.text is null, text will not be drawn.\n    if (normalStyleText != null || emphasisStyleText != null) {\n        // Always set `textStyle` even if `normalStyle.text` is null, because default\n        // values have to be set on `normalStyle`.\n        // If we set default values on `emphasisStyle`, consider case:\n        // Firstly, `setOption(... label: {normal: {text: null}, emphasis: {show: true}} ...);`\n        // Secondly, `setOption(... label: {noraml: {show: true, text: 'abc', color: 'red'} ...);`\n        // Then the 'red' will not work on emphasis.\n        setTextStyle(normalStyle, normalModel, normalSpecified, opt);\n        setTextStyle(emphasisStyle, emphasisModel, emphasisSpecified, opt, true);\n    }\n\n    normalStyle.text = normalStyleText;\n    emphasisStyle.text = emphasisStyleText;\n}\n\n/**\n * Modify label style manually.\n * Only works after `setLabelStyle` and `setElementHoverStyle` called.\n *\n * @param {module:zrender/src/Element} el\n * @param {Object} [normalStyleProps] optional\n * @param {Object} [emphasisStyleProps] optional\n */\nfunction modifyLabelStyle(el, normalStyleProps, emphasisStyleProps) {\n    var elStyle = el.style;\n    if (normalStyleProps) {\n        rollbackDefaultTextStyle(elStyle);\n        el.setStyle(normalStyleProps);\n        applyDefaultTextStyle(elStyle);\n    }\n    elStyle = el.__hoverStl;\n    if (emphasisStyleProps && elStyle) {\n        rollbackDefaultTextStyle(elStyle);\n        extend(elStyle, emphasisStyleProps);\n        applyDefaultTextStyle(elStyle);\n    }\n}\n\n/**\n * Set basic textStyle properties.\n * See more info in `setTextStyleCommon`.\n * @param {Object|module:zrender/graphic/Style} textStyle\n * @param {module:echarts/model/Model} model\n * @param {Object} [specifiedTextStyle] Can be overrided by settings in model.\n * @param {Object} [opt] See `opt` of `setTextStyleCommon`.\n * @param {boolean} [isEmphasis]\n */\nfunction setTextStyle(\n    textStyle, textStyleModel, specifiedTextStyle, opt, isEmphasis\n) {\n    setTextStyleCommon(textStyle, textStyleModel, opt, isEmphasis);\n    specifiedTextStyle && extend(textStyle, specifiedTextStyle);\n    // textStyle.host && textStyle.host.dirty && textStyle.host.dirty(false);\n\n    return textStyle;\n}\n\n/**\n * Set text option in the style.\n * See more info in `setTextStyleCommon`.\n * @deprecated\n * @param {Object} textStyle\n * @param {module:echarts/model/Model} labelModel\n * @param {string|boolean} defaultColor Default text color.\n *        If set as false, it will be processed as a emphasis style.\n */\nfunction setText(textStyle, labelModel, defaultColor) {\n    var opt = {isRectText: true};\n    var isEmphasis;\n\n    if (defaultColor === false) {\n        isEmphasis = true;\n    }\n    else {\n        // Support setting color as 'auto' to get visual color.\n        opt.autoColor = defaultColor;\n    }\n    setTextStyleCommon(textStyle, labelModel, opt, isEmphasis);\n    // textStyle.host && textStyle.host.dirty && textStyle.host.dirty(false);\n}\n\n/**\n * The uniform entry of set text style, that is, retrieve style definitions\n * from `model` and set to `textStyle` object.\n *\n * Never in merge mode, but in overwrite mode, that is, all of the text style\n * properties will be set. (Consider the states of normal and emphasis and\n * default value can be adopted, merge would make the logic too complicated\n * to manage.)\n *\n * The `textStyle` object can either be a plain object or an instance of\n * `zrender/src/graphic/Style`, and either be the style of normal or emphasis.\n * After this mothod called, the `textStyle` object can then be used in\n * `el.setStyle(textStyle)` or `el.hoverStyle = textStyle`.\n *\n * Default value will be adopted and `insideRollbackOpt` will be created.\n * See `applyDefaultTextStyle` `rollbackDefaultTextStyle` for more details.\n *\n * opt: {\n *      disableBox: boolean, Whether diable drawing box of block (outer most).\n *      isRectText: boolean,\n *      autoColor: string, specify a color when color is 'auto',\n *              for textFill, textStroke, textBackgroundColor, and textBorderColor.\n *              If autoColor specified, it is used as default textFill.\n *      useInsideStyle:\n *              `true`: Use inside style (textFill, textStroke, textStrokeWidth)\n *                  if `textFill` is not specified.\n *              `false`: Do not use inside style.\n *              `null/undefined`: use inside style if `isRectText` is true and\n *                  `textFill` is not specified and textPosition contains `'inside'`.\n *      forceRich: boolean\n * }\n */\nfunction setTextStyleCommon(textStyle, textStyleModel, opt, isEmphasis) {\n    // Consider there will be abnormal when merge hover style to normal style if given default value.\n    opt = opt || EMPTY_OBJ;\n\n    if (opt.isRectText) {\n        var textPosition = textStyleModel.getShallow('position')\n            || (isEmphasis ? null : 'inside');\n        // 'outside' is not a valid zr textPostion value, but used\n        // in bar series, and magric type should be considered.\n        textPosition === 'outside' && (textPosition = 'top');\n        textStyle.textPosition = textPosition;\n        textStyle.textOffset = textStyleModel.getShallow('offset');\n        var labelRotate = textStyleModel.getShallow('rotate');\n        labelRotate != null && (labelRotate *= Math.PI / 180);\n        textStyle.textRotation = labelRotate;\n        textStyle.textDistance = retrieve2(\n            textStyleModel.getShallow('distance'), isEmphasis ? null : 5\n        );\n    }\n\n    var ecModel = textStyleModel.ecModel;\n    var globalTextStyle = ecModel && ecModel.option.textStyle;\n\n    // Consider case:\n    // {\n    //     data: [{\n    //         value: 12,\n    //         label: {\n    //             rich: {\n    //                 // no 'a' here but using parent 'a'.\n    //             }\n    //         }\n    //     }],\n    //     rich: {\n    //         a: { ... }\n    //     }\n    // }\n    var richItemNames = getRichItemNames(textStyleModel);\n    var richResult;\n    if (richItemNames) {\n        richResult = {};\n        for (var name in richItemNames) {\n            if (richItemNames.hasOwnProperty(name)) {\n                // Cascade is supported in rich.\n                var richTextStyle = textStyleModel.getModel(['rich', name]);\n                // In rich, never `disableBox`.\n                // FIXME: consider `label: {formatter: '{a|xx}', color: 'blue', rich: {a: {}}}`,\n                // the default color `'blue'` will not be adopted if no color declared in `rich`.\n                // That might confuses users. So probably we should put `textStyleModel` as the\n                // root ancestor of the `richTextStyle`. But that would be a break change.\n                setTokenTextStyle(richResult[name] = {}, richTextStyle, globalTextStyle, opt, isEmphasis);\n            }\n        }\n    }\n    textStyle.rich = richResult;\n\n    setTokenTextStyle(textStyle, textStyleModel, globalTextStyle, opt, isEmphasis, true);\n\n    if (opt.forceRich && !opt.textStyle) {\n        opt.textStyle = {};\n    }\n\n    return textStyle;\n}\n\n// Consider case:\n// {\n//     data: [{\n//         value: 12,\n//         label: {\n//             rich: {\n//                 // no 'a' here but using parent 'a'.\n//             }\n//         }\n//     }],\n//     rich: {\n//         a: { ... }\n//     }\n// }\nfunction getRichItemNames(textStyleModel) {\n    // Use object to remove duplicated names.\n    var richItemNameMap;\n    while (textStyleModel && textStyleModel !== textStyleModel.ecModel) {\n        var rich = (textStyleModel.option || EMPTY_OBJ).rich;\n        if (rich) {\n            richItemNameMap = richItemNameMap || {};\n            for (var name in rich) {\n                if (rich.hasOwnProperty(name)) {\n                    richItemNameMap[name] = 1;\n                }\n            }\n        }\n        textStyleModel = textStyleModel.parentModel;\n    }\n    return richItemNameMap;\n}\n\nfunction setTokenTextStyle(textStyle, textStyleModel, globalTextStyle, opt, isEmphasis, isBlock) {\n    // In merge mode, default value should not be given.\n    globalTextStyle = !isEmphasis && globalTextStyle || EMPTY_OBJ;\n\n    textStyle.textFill = getAutoColor(textStyleModel.getShallow('color'), opt)\n        || globalTextStyle.color;\n    textStyle.textStroke = getAutoColor(textStyleModel.getShallow('textBorderColor'), opt)\n        || globalTextStyle.textBorderColor;\n    textStyle.textStrokeWidth = retrieve2(\n        textStyleModel.getShallow('textBorderWidth'),\n        globalTextStyle.textBorderWidth\n    );\n\n    if (!isEmphasis) {\n        if (isBlock) {\n            textStyle.insideRollbackOpt = opt;\n            applyDefaultTextStyle(textStyle);\n        }\n\n        // Set default finally.\n        if (textStyle.textFill == null) {\n            textStyle.textFill = opt.autoColor;\n        }\n    }\n\n    // Do not use `getFont` here, because merge should be supported, where\n    // part of these properties may be changed in emphasis style, and the\n    // others should remain their original value got from normal style.\n    textStyle.fontStyle = textStyleModel.getShallow('fontStyle') || globalTextStyle.fontStyle;\n    textStyle.fontWeight = textStyleModel.getShallow('fontWeight') || globalTextStyle.fontWeight;\n    textStyle.fontSize = textStyleModel.getShallow('fontSize') || globalTextStyle.fontSize;\n    textStyle.fontFamily = textStyleModel.getShallow('fontFamily') || globalTextStyle.fontFamily;\n\n    textStyle.textAlign = textStyleModel.getShallow('align');\n    textStyle.textVerticalAlign = textStyleModel.getShallow('verticalAlign')\n        || textStyleModel.getShallow('baseline');\n\n    textStyle.textLineHeight = textStyleModel.getShallow('lineHeight');\n    textStyle.textWidth = textStyleModel.getShallow('width');\n    textStyle.textHeight = textStyleModel.getShallow('height');\n    textStyle.textTag = textStyleModel.getShallow('tag');\n\n    if (!isBlock || !opt.disableBox) {\n        textStyle.textBackgroundColor = getAutoColor(textStyleModel.getShallow('backgroundColor'), opt);\n        textStyle.textPadding = textStyleModel.getShallow('padding');\n        textStyle.textBorderColor = getAutoColor(textStyleModel.getShallow('borderColor'), opt);\n        textStyle.textBorderWidth = textStyleModel.getShallow('borderWidth');\n        textStyle.textBorderRadius = textStyleModel.getShallow('borderRadius');\n\n        textStyle.textBoxShadowColor = textStyleModel.getShallow('shadowColor');\n        textStyle.textBoxShadowBlur = textStyleModel.getShallow('shadowBlur');\n        textStyle.textBoxShadowOffsetX = textStyleModel.getShallow('shadowOffsetX');\n        textStyle.textBoxShadowOffsetY = textStyleModel.getShallow('shadowOffsetY');\n    }\n\n    textStyle.textShadowColor = textStyleModel.getShallow('textShadowColor')\n        || globalTextStyle.textShadowColor;\n    textStyle.textShadowBlur = textStyleModel.getShallow('textShadowBlur')\n        || globalTextStyle.textShadowBlur;\n    textStyle.textShadowOffsetX = textStyleModel.getShallow('textShadowOffsetX')\n        || globalTextStyle.textShadowOffsetX;\n    textStyle.textShadowOffsetY = textStyleModel.getShallow('textShadowOffsetY')\n        || globalTextStyle.textShadowOffsetY;\n}\n\nfunction getAutoColor(color, opt) {\n    return color !== 'auto' ? color : (opt && opt.autoColor) ? opt.autoColor : null;\n}\n\n/**\n * Give some default value to the input `textStyle` object, based on the current settings\n * in this `textStyle` object.\n *\n * The Scenario:\n * when text position is `inside` and `textFill` is not specified, we show\n * text border by default for better view. But it should be considered that text position\n * might be changed when hovering or being emphasis, where the `insideRollback` is used to\n * restore the style.\n *\n * Usage (& NOTICE):\n * When a style object (eithor plain object or instance of `zrender/src/graphic/Style`) is\n * about to be modified on its text related properties, `rollbackDefaultTextStyle` should\n * be called before the modification and `applyDefaultTextStyle` should be called after that.\n * (For the case that all of the text related properties is reset, like `setTextStyleCommon`\n * does, `rollbackDefaultTextStyle` is not needed to be called).\n */\nfunction applyDefaultTextStyle(textStyle) {\n    var textPosition = textStyle.textPosition;\n    var opt = textStyle.insideRollbackOpt;\n    var insideRollback;\n\n    if (opt && textStyle.textFill == null) {\n        var autoColor = opt.autoColor;\n        var isRectText = opt.isRectText;\n        var useInsideStyle = opt.useInsideStyle;\n\n        var useInsideStyleCache = useInsideStyle !== false\n            && (useInsideStyle === true\n                || (isRectText\n                    && textPosition\n                    // textPosition can be [10, 30]\n                    && typeof textPosition === 'string'\n                    && textPosition.indexOf('inside') >= 0\n                )\n            );\n        var useAutoColorCache = !useInsideStyleCache && autoColor != null;\n\n        // All of the props declared in `CACHED_LABEL_STYLE_PROPERTIES` are to be cached.\n        if (useInsideStyleCache || useAutoColorCache) {\n            insideRollback = {\n                textFill: textStyle.textFill,\n                textStroke: textStyle.textStroke,\n                textStrokeWidth: textStyle.textStrokeWidth\n            };\n        }\n        if (useInsideStyleCache) {\n            textStyle.textFill = '#fff';\n            // Consider text with #fff overflow its container.\n            if (textStyle.textStroke == null) {\n                textStyle.textStroke = autoColor;\n                textStyle.textStrokeWidth == null && (textStyle.textStrokeWidth = 2);\n            }\n        }\n        if (useAutoColorCache) {\n            textStyle.textFill = autoColor;\n        }\n    }\n\n    // Always set `insideRollback`, so that the previous one can be cleared.\n    textStyle.insideRollback = insideRollback;\n}\n\n/**\n * Consider the case: in a scatter,\n * label: {\n *     normal: {position: 'inside'},\n *     emphasis: {position: 'top'}\n * }\n * In the normal state, the `textFill` will be set as '#fff' for pretty view (see\n * `applyDefaultTextStyle`), but when switching to emphasis state, the `textFill`\n * should be retured to 'autoColor', but not keep '#fff'.\n */\nfunction rollbackDefaultTextStyle(style) {\n    var insideRollback = style.insideRollback;\n    if (insideRollback) {\n        // Reset all of the props in `CACHED_LABEL_STYLE_PROPERTIES`.\n        style.textFill = insideRollback.textFill;\n        style.textStroke = insideRollback.textStroke;\n        style.textStrokeWidth = insideRollback.textStrokeWidth;\n        style.insideRollback = null;\n    }\n}\n\nfunction getFont(opt, ecModel) {\n    // ecModel or default text style model.\n    var gTextStyleModel = ecModel || ecModel.getModel('textStyle');\n    return trim([\n        // FIXME in node-canvas fontWeight is before fontStyle\n        opt.fontStyle || gTextStyleModel && gTextStyleModel.getShallow('fontStyle') || '',\n        opt.fontWeight || gTextStyleModel && gTextStyleModel.getShallow('fontWeight') || '',\n        (opt.fontSize || gTextStyleModel && gTextStyleModel.getShallow('fontSize') || 12) + 'px',\n        opt.fontFamily || gTextStyleModel && gTextStyleModel.getShallow('fontFamily') || 'sans-serif'\n    ].join(' '));\n}\n\nfunction animateOrSetProps(isUpdate, el, props, animatableModel, dataIndex, cb) {\n    if (typeof dataIndex === 'function') {\n        cb = dataIndex;\n        dataIndex = null;\n    }\n    // Do not check 'animation' property directly here. Consider this case:\n    // animation model is an `itemModel`, whose does not have `isAnimationEnabled`\n    // but its parent model (`seriesModel`) does.\n    var animationEnabled = animatableModel && animatableModel.isAnimationEnabled();\n\n    if (animationEnabled) {\n        var postfix = isUpdate ? 'Update' : '';\n        var duration = animatableModel.getShallow('animationDuration' + postfix);\n        var animationEasing = animatableModel.getShallow('animationEasing' + postfix);\n        var animationDelay = animatableModel.getShallow('animationDelay' + postfix);\n        if (typeof animationDelay === 'function') {\n            animationDelay = animationDelay(\n                dataIndex,\n                animatableModel.getAnimationDelayParams\n                    ? animatableModel.getAnimationDelayParams(el, dataIndex)\n                    : null\n            );\n        }\n        if (typeof duration === 'function') {\n            duration = duration(dataIndex);\n        }\n\n        duration > 0\n            ? el.animateTo(props, duration, animationDelay || 0, animationEasing, cb, !!cb)\n            : (el.stopAnimation(), el.attr(props), cb && cb());\n    }\n    else {\n        el.stopAnimation();\n        el.attr(props);\n        cb && cb();\n    }\n}\n\n/**\n * Update graphic element properties with or without animation according to the\n * configuration in series.\n *\n * Caution: this method will stop previous animation.\n * So if do not use this method to one element twice before\n * animation starts, unless you know what you are doing.\n *\n * @param {module:zrender/Element} el\n * @param {Object} props\n * @param {module:echarts/model/Model} [animatableModel]\n * @param {number} [dataIndex]\n * @param {Function} [cb]\n * @example\n *     graphic.updateProps(el, {\n *         position: [100, 100]\n *     }, seriesModel, dataIndex, function () { console.log('Animation done!'); });\n *     // Or\n *     graphic.updateProps(el, {\n *         position: [100, 100]\n *     }, seriesModel, function () { console.log('Animation done!'); });\n */\nfunction updateProps(el, props, animatableModel, dataIndex, cb) {\n    animateOrSetProps(true, el, props, animatableModel, dataIndex, cb);\n}\n\n/**\n * Init graphic element properties with or without animation according to the\n * configuration in series.\n *\n * Caution: this method will stop previous animation.\n * So if do not use this method to one element twice before\n * animation starts, unless you know what you are doing.\n *\n * @param {module:zrender/Element} el\n * @param {Object} props\n * @param {module:echarts/model/Model} [animatableModel]\n * @param {number} [dataIndex]\n * @param {Function} cb\n */\nfunction initProps(el, props, animatableModel, dataIndex, cb) {\n    animateOrSetProps(false, el, props, animatableModel, dataIndex, cb);\n}\n\n/**\n * Get transform matrix of target (param target),\n * in coordinate of its ancestor (param ancestor)\n *\n * @param {module:zrender/mixin/Transformable} target\n * @param {module:zrender/mixin/Transformable} [ancestor]\n */\nfunction getTransform(target, ancestor) {\n    var mat = identity([]);\n\n    while (target && target !== ancestor) {\n        mul$1(mat, target.getLocalTransform(), mat);\n        target = target.parent;\n    }\n\n    return mat;\n}\n\n/**\n * Apply transform to an vertex.\n * @param {Array.<number>} target [x, y]\n * @param {Array.<number>|TypedArray.<number>|Object} transform Can be:\n *      + Transform matrix: like [1, 0, 0, 1, 0, 0]\n *      + {position, rotation, scale}, the same as `zrender/Transformable`.\n * @param {boolean=} invert Whether use invert matrix.\n * @return {Array.<number>} [x, y]\n */\nfunction applyTransform$1(target, transform, invert$$1) {\n    if (transform && !isArrayLike(transform)) {\n        transform = Transformable.getLocalTransform(transform);\n    }\n\n    if (invert$$1) {\n        transform = invert([], transform);\n    }\n    return applyTransform([], target, transform);\n}\n\n/**\n * @param {string} direction 'left' 'right' 'top' 'bottom'\n * @param {Array.<number>} transform Transform matrix: like [1, 0, 0, 1, 0, 0]\n * @param {boolean=} invert Whether use invert matrix.\n * @return {string} Transformed direction. 'left' 'right' 'top' 'bottom'\n */\nfunction transformDirection(direction, transform, invert$$1) {\n\n    // Pick a base, ensure that transform result will not be (0, 0).\n    var hBase = (transform[4] === 0 || transform[5] === 0 || transform[0] === 0)\n        ? 1 : Math.abs(2 * transform[4] / transform[0]);\n    var vBase = (transform[4] === 0 || transform[5] === 0 || transform[2] === 0)\n        ? 1 : Math.abs(2 * transform[4] / transform[2]);\n\n    var vertex = [\n        direction === 'left' ? -hBase : direction === 'right' ? hBase : 0,\n        direction === 'top' ? -vBase : direction === 'bottom' ? vBase : 0\n    ];\n\n    vertex = applyTransform$1(vertex, transform, invert$$1);\n\n    return Math.abs(vertex[0]) > Math.abs(vertex[1])\n        ? (vertex[0] > 0 ? 'right' : 'left')\n        : (vertex[1] > 0 ? 'bottom' : 'top');\n}\n\n/**\n * Apply group transition animation from g1 to g2.\n * If no animatableModel, no animation.\n */\nfunction groupTransition(g1, g2, animatableModel, cb) {\n    if (!g1 || !g2) {\n        return;\n    }\n\n    function getElMap(g) {\n        var elMap = {};\n        g.traverse(function (el) {\n            if (!el.isGroup && el.anid) {\n                elMap[el.anid] = el;\n            }\n        });\n        return elMap;\n    }\n    function getAnimatableProps(el) {\n        var obj = {\n            position: clone$1(el.position),\n            rotation: el.rotation\n        };\n        if (el.shape) {\n            obj.shape = extend({}, el.shape);\n        }\n        return obj;\n    }\n    var elMap1 = getElMap(g1);\n\n    g2.traverse(function (el) {\n        if (!el.isGroup && el.anid) {\n            var oldEl = elMap1[el.anid];\n            if (oldEl) {\n                var newProp = getAnimatableProps(el);\n                el.attr(getAnimatableProps(oldEl));\n                updateProps(el, newProp, animatableModel, el.dataIndex);\n            }\n            // else {\n            //     if (el.previousProps) {\n            //         graphic.updateProps\n            //     }\n            // }\n        }\n    });\n}\n\n/**\n * @param {Array.<Array.<number>>} points Like: [[23, 44], [53, 66], ...]\n * @param {Object} rect {x, y, width, height}\n * @return {Array.<Array.<number>>} A new clipped points.\n */\nfunction clipPointsByRect(points, rect) {\n    // FIXME: this way migth be incorrect when grpahic clipped by a corner.\n    // and when element have border.\n    return map(points, function (point) {\n        var x = point[0];\n        x = mathMax$1(x, rect.x);\n        x = mathMin$1(x, rect.x + rect.width);\n        var y = point[1];\n        y = mathMax$1(y, rect.y);\n        y = mathMin$1(y, rect.y + rect.height);\n        return [x, y];\n    });\n}\n\n/**\n * @param {Object} targetRect {x, y, width, height}\n * @param {Object} rect {x, y, width, height}\n * @return {Object} A new clipped rect. If rect size are negative, return undefined.\n */\nfunction clipRectByRect(targetRect, rect) {\n    var x = mathMax$1(targetRect.x, rect.x);\n    var x2 = mathMin$1(targetRect.x + targetRect.width, rect.x + rect.width);\n    var y = mathMax$1(targetRect.y, rect.y);\n    var y2 = mathMin$1(targetRect.y + targetRect.height, rect.y + rect.height);\n\n    // If the total rect is cliped, nothing, including the border,\n    // should be painted. So return undefined.\n    if (x2 >= x && y2 >= y) {\n        return {\n            x: x,\n            y: y,\n            width: x2 - x,\n            height: y2 - y\n        };\n    }\n}\n\n/**\n * @param {string} iconStr Support 'image://' or 'path://' or direct svg path.\n * @param {Object} [opt] Properties of `module:zrender/Element`, except `style`.\n * @param {Object} [rect] {x, y, width, height}\n * @return {module:zrender/Element} Icon path or image element.\n */\nfunction createIcon(iconStr, opt, rect) {\n    opt = extend({rectHover: true}, opt);\n    var style = opt.style = {strokeNoScale: true};\n    rect = rect || {x: -1, y: -1, width: 2, height: 2};\n\n    if (iconStr) {\n        return iconStr.indexOf('image://') === 0\n            ? (\n                style.image = iconStr.slice(8),\n                defaults(style, rect),\n                new ZImage(opt)\n            )\n            : (\n                makePath(\n                    iconStr.replace('path://', ''),\n                    opt,\n                    rect,\n                    'center'\n                )\n            );\n    }\n}\n\n/**\n * Return `true` if the given line (line `a`) and the given polygon\n * are intersect.\n * Note that we do not count colinear as intersect here because no\n * requirement for that. We could do that if required in future.\n *\n * @param {number} a1x\n * @param {number} a1y\n * @param {number} a2x\n * @param {number} a2y\n * @param {Array.<Array.<number>>} points Points of the polygon.\n * @return {boolean}\n */\nfunction linePolygonIntersect(a1x, a1y, a2x, a2y, points) {\n    for (var i = 0, p2 = points[points.length - 1]; i < points.length; i++) {\n        var p = points[i];\n        if (lineLineIntersect(a1x, a1y, a2x, a2y, p[0], p[1], p2[0], p2[1])) {\n            return true;\n        }\n        p2 = p;\n    }\n}\n\n/**\n * Return `true` if the given two lines (line `a` and line `b`)\n * are intersect.\n * Note that we do not count colinear as intersect here because no\n * requirement for that. We could do that if required in future.\n *\n * @param {number} a1x\n * @param {number} a1y\n * @param {number} a2x\n * @param {number} a2y\n * @param {number} b1x\n * @param {number} b1y\n * @param {number} b2x\n * @param {number} b2y\n * @return {boolean}\n */\nfunction lineLineIntersect(a1x, a1y, a2x, a2y, b1x, b1y, b2x, b2y) {\n    // let `vec_m` to be `vec_a2 - vec_a1` and `vec_n` to be `vec_b2 - vec_b1`.\n    var mx = a2x - a1x;\n    var my = a2y - a1y;\n    var nx = b2x - b1x;\n    var ny = b2y - b1y;\n\n    // `vec_m` and `vec_n` are parallel iff\n    //     exising `k` such that `vec_m = k · vec_n`, equivalent to `vec_m X vec_n = 0`.\n    var nmCrossProduct = crossProduct2d(nx, ny, mx, my);\n    if (nearZero(nmCrossProduct)) {\n        return false;\n    }\n\n    // `vec_m` and `vec_n` are intersect iff\n    //     existing `p` and `q` in [0, 1] such that `vec_a1 + p * vec_m = vec_b1 + q * vec_n`,\n    //     such that `q = ((vec_a1 - vec_b1) X vec_m) / (vec_n X vec_m)`\n    //           and `p = ((vec_a1 - vec_b1) X vec_n) / (vec_n X vec_m)`.\n    var b1a1x = a1x - b1x;\n    var b1a1y = a1y - b1y;\n    var q = crossProduct2d(b1a1x, b1a1y, mx, my) / nmCrossProduct;\n    if (q < 0 || q > 1) {\n        return false;\n    }\n    var p = crossProduct2d(b1a1x, b1a1y, nx, ny) / nmCrossProduct;\n    if (p < 0 || p > 1) {\n        return false;\n    }\n\n    return true;\n}\n\n/**\n * Cross product of 2-dimension vector.\n */\nfunction crossProduct2d(x1, y1, x2, y2) {\n    return x1 * y2 - x2 * y1;\n}\n\nfunction nearZero(val) {\n    return val <= (1e-6) && val >= -(1e-6);\n}\n\n\n\n\nvar graphic = (Object.freeze || Object)({\n\tZ2_EMPHASIS_LIFT: Z2_EMPHASIS_LIFT,\n\tCACHED_LABEL_STYLE_PROPERTIES: CACHED_LABEL_STYLE_PROPERTIES,\n\textendShape: extendShape,\n\textendPath: extendPath,\n\tmakePath: makePath,\n\tmakeImage: makeImage,\n\tmergePath: mergePath,\n\tresizePath: resizePath,\n\tsubPixelOptimizeLine: subPixelOptimizeLine,\n\tsubPixelOptimizeRect: subPixelOptimizeRect,\n\tsubPixelOptimize: subPixelOptimize,\n\tsetElementHoverStyle: setElementHoverStyle,\n\tsetHoverStyle: setHoverStyle,\n\tsetAsHighDownDispatcher: setAsHighDownDispatcher,\n\tisHighDownDispatcher: isHighDownDispatcher,\n\tgetHighlightDigit: getHighlightDigit,\n\tsetLabelStyle: setLabelStyle,\n\tmodifyLabelStyle: modifyLabelStyle,\n\tsetTextStyle: setTextStyle,\n\tsetText: setText,\n\tgetFont: getFont,\n\tupdateProps: updateProps,\n\tinitProps: initProps,\n\tgetTransform: getTransform,\n\tapplyTransform: applyTransform$1,\n\ttransformDirection: transformDirection,\n\tgroupTransition: groupTransition,\n\tclipPointsByRect: clipPointsByRect,\n\tclipRectByRect: clipRectByRect,\n\tcreateIcon: createIcon,\n\tlinePolygonIntersect: linePolygonIntersect,\n\tlineLineIntersect: lineLineIntersect,\n\tGroup: Group,\n\tImage: ZImage,\n\tText: Text,\n\tCircle: Circle,\n\tSector: Sector,\n\tRing: Ring,\n\tPolygon: Polygon,\n\tPolyline: Polyline,\n\tRect: Rect,\n\tLine: Line,\n\tBezierCurve: BezierCurve,\n\tArc: Arc,\n\tIncrementalDisplayable: IncrementalDisplayble,\n\tCompoundPath: CompoundPath,\n\tLinearGradient: LinearGradient,\n\tRadialGradient: RadialGradient,\n\tBoundingRect: BoundingRect\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar PATH_COLOR = ['textStyle', 'color'];\n\nvar textStyleMixin = {\n    /**\n     * Get color property or get color from option.textStyle.color\n     * @param {boolean} [isEmphasis]\n     * @return {string}\n     */\n    getTextColor: function (isEmphasis) {\n        var ecModel = this.ecModel;\n        return this.getShallow('color')\n            || (\n                (!isEmphasis && ecModel) ? ecModel.get(PATH_COLOR) : null\n            );\n    },\n\n    /**\n     * Create font string from fontStyle, fontWeight, fontSize, fontFamily\n     * @return {string}\n     */\n    getFont: function () {\n        return getFont({\n            fontStyle: this.getShallow('fontStyle'),\n            fontWeight: this.getShallow('fontWeight'),\n            fontSize: this.getShallow('fontSize'),\n            fontFamily: this.getShallow('fontFamily')\n        }, this.ecModel);\n    },\n\n    getTextRect: function (text) {\n        return getBoundingRect(\n            text,\n            this.getFont(),\n            this.getShallow('align'),\n            this.getShallow('verticalAlign') || this.getShallow('baseline'),\n            this.getShallow('padding'),\n            this.getShallow('lineHeight'),\n            this.getShallow('rich'),\n            this.getShallow('truncateText')\n        );\n    }\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar getItemStyle = makeStyleMapper(\n    [\n        ['fill', 'color'],\n        ['stroke', 'borderColor'],\n        ['lineWidth', 'borderWidth'],\n        ['opacity'],\n        ['shadowBlur'],\n        ['shadowOffsetX'],\n        ['shadowOffsetY'],\n        ['shadowColor'],\n        ['textPosition'],\n        ['textAlign']\n    ]\n);\n\nvar itemStyleMixin = {\n    getItemStyle: function (excludes, includes) {\n        var style = getItemStyle(this, excludes, includes);\n        var lineDash = this.getBorderLineDash();\n        lineDash && (style.lineDash = lineDash);\n        return style;\n    },\n\n    getBorderLineDash: function () {\n        var lineType = this.get('borderType');\n        return (lineType === 'solid' || lineType == null) ? null\n            : (lineType === 'dashed' ? [5, 5] : [1, 1]);\n    }\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * @module echarts/model/Model\n */\n\nvar mixin$1 = mixin;\nvar inner = makeInner();\n\n/**\n * @alias module:echarts/model/Model\n * @constructor\n * @param {Object} [option]\n * @param {module:echarts/model/Model} [parentModel]\n * @param {module:echarts/model/Global} [ecModel]\n */\nfunction Model(option, parentModel, ecModel) {\n    /**\n     * @type {module:echarts/model/Model}\n     * @readOnly\n     */\n    this.parentModel = parentModel;\n\n    /**\n     * @type {module:echarts/model/Global}\n     * @readOnly\n     */\n    this.ecModel = ecModel;\n\n    /**\n     * @type {Object}\n     * @protected\n     */\n    this.option = option;\n\n    // Simple optimization\n    // if (this.init) {\n    //     if (arguments.length <= 4) {\n    //         this.init(option, parentModel, ecModel, extraOpt);\n    //     }\n    //     else {\n    //         this.init.apply(this, arguments);\n    //     }\n    // }\n}\n\nModel.prototype = {\n\n    constructor: Model,\n\n    /**\n     * Model 的初始化函数\n     * @param {Object} option\n     */\n    init: null,\n\n    /**\n     * 从新的 Option merge\n     */\n    mergeOption: function (option) {\n        merge(this.option, option, true);\n    },\n\n    /**\n     * @param {string|Array.<string>} path\n     * @param {boolean} [ignoreParent=false]\n     * @return {*}\n     */\n    get: function (path, ignoreParent) {\n        if (path == null) {\n            return this.option;\n        }\n\n        return doGet(\n            this.option,\n            this.parsePath(path),\n            !ignoreParent && getParent(this, path)\n        );\n    },\n\n    /**\n     * @param {string} key\n     * @param {boolean} [ignoreParent=false]\n     * @return {*}\n     */\n    getShallow: function (key, ignoreParent) {\n        var option = this.option;\n\n        var val = option == null ? option : option[key];\n        var parentModel = !ignoreParent && getParent(this, key);\n        if (val == null && parentModel) {\n            val = parentModel.getShallow(key);\n        }\n        return val;\n    },\n\n    /**\n     * @param {string|Array.<string>} [path]\n     * @param {module:echarts/model/Model} [parentModel]\n     * @return {module:echarts/model/Model}\n     */\n    getModel: function (path, parentModel) {\n        var obj = path == null\n            ? this.option\n            : doGet(this.option, path = this.parsePath(path));\n\n        var thisParentModel;\n        parentModel = parentModel || (\n            (thisParentModel = getParent(this, path))\n                && thisParentModel.getModel(path)\n        );\n\n        return new Model(obj, parentModel, this.ecModel);\n    },\n\n    /**\n     * If model has option\n     */\n    isEmpty: function () {\n        return this.option == null;\n    },\n\n    restoreData: function () {},\n\n    // Pending\n    clone: function () {\n        var Ctor = this.constructor;\n        return new Ctor(clone(this.option));\n    },\n\n    setReadOnly: function (properties) {\n        // clazzUtil.setReadOnly(this, properties);\n    },\n\n    // If path is null/undefined, return null/undefined.\n    parsePath: function (path) {\n        if (typeof path === 'string') {\n            path = path.split('.');\n        }\n        return path;\n    },\n\n    /**\n     * @param {Function} getParentMethod\n     *        param {Array.<string>|string} path\n     *        return {module:echarts/model/Model}\n     */\n    customizeGetParent: function (getParentMethod) {\n        inner(this).getParent = getParentMethod;\n    },\n\n    isAnimationEnabled: function () {\n        if (!env$1.node) {\n            if (this.option.animation != null) {\n                return !!this.option.animation;\n            }\n            else if (this.parentModel) {\n                return this.parentModel.isAnimationEnabled();\n            }\n        }\n    }\n\n};\n\nfunction doGet(obj, pathArr, parentModel) {\n    for (var i = 0; i < pathArr.length; i++) {\n        // Ignore empty\n        if (!pathArr[i]) {\n            continue;\n        }\n        // obj could be number/string/... (like 0)\n        obj = (obj && typeof obj === 'object') ? obj[pathArr[i]] : null;\n        if (obj == null) {\n            break;\n        }\n    }\n    if (obj == null && parentModel) {\n        obj = parentModel.get(pathArr);\n    }\n    return obj;\n}\n\n// `path` can be null/undefined\nfunction getParent(model, path) {\n    var getParentMethod = inner(model).getParent;\n    return getParentMethod ? getParentMethod.call(model, path) : model.parentModel;\n}\n\n// Enable Model.extend.\nenableClassExtend(Model);\nenableClassCheck(Model);\n\nmixin$1(Model, lineStyleMixin);\nmixin$1(Model, areaStyleMixin);\nmixin$1(Model, textStyleMixin);\nmixin$1(Model, itemStyleMixin);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar base = 0;\n\n/**\n * @public\n * @param {string} type\n * @return {string}\n */\nfunction getUID(type) {\n    // Considering the case of crossing js context,\n    // use Math.random to make id as unique as possible.\n    return [(type || ''), base++, Math.random().toFixed(5)].join('_');\n}\n\n/**\n * @inner\n */\nfunction enableSubTypeDefaulter(entity) {\n\n    var subTypeDefaulters = {};\n\n    entity.registerSubTypeDefaulter = function (componentType, defaulter) {\n        componentType = parseClassType$1(componentType);\n        subTypeDefaulters[componentType.main] = defaulter;\n    };\n\n    entity.determineSubType = function (componentType, option) {\n        var type = option.type;\n        if (!type) {\n            var componentTypeMain = parseClassType$1(componentType).main;\n            if (entity.hasSubTypes(componentType) && subTypeDefaulters[componentTypeMain]) {\n                type = subTypeDefaulters[componentTypeMain](option);\n            }\n        }\n        return type;\n    };\n\n    return entity;\n}\n\n/**\n * Topological travel on Activity Network (Activity On Vertices).\n * Dependencies is defined in Model.prototype.dependencies, like ['xAxis', 'yAxis'].\n *\n * If 'xAxis' or 'yAxis' is absent in componentTypeList, just ignore it in topology.\n *\n * If there is circle dependencey, Error will be thrown.\n *\n */\nfunction enableTopologicalTravel(entity, dependencyGetter) {\n\n    /**\n     * @public\n     * @param {Array.<string>} targetNameList Target Component type list.\n     *                                           Can be ['aa', 'bb', 'aa.xx']\n     * @param {Array.<string>} fullNameList By which we can build dependency graph.\n     * @param {Function} callback Params: componentType, dependencies.\n     * @param {Object} context Scope of callback.\n     */\n    entity.topologicalTravel = function (targetNameList, fullNameList, callback, context) {\n        if (!targetNameList.length) {\n            return;\n        }\n\n        var result = makeDepndencyGraph(fullNameList);\n        var graph = result.graph;\n        var stack = result.noEntryList;\n\n        var targetNameSet = {};\n        each$1(targetNameList, function (name) {\n            targetNameSet[name] = true;\n        });\n\n        while (stack.length) {\n            var currComponentType = stack.pop();\n            var currVertex = graph[currComponentType];\n            var isInTargetNameSet = !!targetNameSet[currComponentType];\n            if (isInTargetNameSet) {\n                callback.call(context, currComponentType, currVertex.originalDeps.slice());\n                delete targetNameSet[currComponentType];\n            }\n            each$1(\n                currVertex.successor,\n                isInTargetNameSet ? removeEdgeAndAdd : removeEdge\n            );\n        }\n\n        each$1(targetNameSet, function () {\n            throw new Error('Circle dependency may exists');\n        });\n\n        function removeEdge(succComponentType) {\n            graph[succComponentType].entryCount--;\n            if (graph[succComponentType].entryCount === 0) {\n                stack.push(succComponentType);\n            }\n        }\n\n        // Consider this case: legend depends on series, and we call\n        // chart.setOption({series: [...]}), where only series is in option.\n        // If we do not have 'removeEdgeAndAdd', legendModel.mergeOption will\n        // not be called, but only sereis.mergeOption is called. Thus legend\n        // have no chance to update its local record about series (like which\n        // name of series is available in legend).\n        function removeEdgeAndAdd(succComponentType) {\n            targetNameSet[succComponentType] = true;\n            removeEdge(succComponentType);\n        }\n    };\n\n    /**\n     * DepndencyGraph: {Object}\n     * key: conponentType,\n     * value: {\n     *     successor: [conponentTypes...],\n     *     originalDeps: [conponentTypes...],\n     *     entryCount: {number}\n     * }\n     */\n    function makeDepndencyGraph(fullNameList) {\n        var graph = {};\n        var noEntryList = [];\n\n        each$1(fullNameList, function (name) {\n\n            var thisItem = createDependencyGraphItem(graph, name);\n            var originalDeps = thisItem.originalDeps = dependencyGetter(name);\n\n            var availableDeps = getAvailableDependencies(originalDeps, fullNameList);\n            thisItem.entryCount = availableDeps.length;\n            if (thisItem.entryCount === 0) {\n                noEntryList.push(name);\n            }\n\n            each$1(availableDeps, function (dependentName) {\n                if (indexOf(thisItem.predecessor, dependentName) < 0) {\n                    thisItem.predecessor.push(dependentName);\n                }\n                var thatItem = createDependencyGraphItem(graph, dependentName);\n                if (indexOf(thatItem.successor, dependentName) < 0) {\n                    thatItem.successor.push(name);\n                }\n            });\n        });\n\n        return {graph: graph, noEntryList: noEntryList};\n    }\n\n    function createDependencyGraphItem(graph, name) {\n        if (!graph[name]) {\n            graph[name] = {predecessor: [], successor: []};\n        }\n        return graph[name];\n    }\n\n    function getAvailableDependencies(originalDeps, fullNameList) {\n        var availableDeps = [];\n        each$1(originalDeps, function (dep) {\n            indexOf(fullNameList, dep) >= 0 && availableDeps.push(dep);\n        });\n        return availableDeps;\n    }\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/*\n* A third-party license is embeded for some of the code in this file:\n* The method \"quantile\" was copied from \"d3.js\".\n* (See more details in the comment of the method below.)\n* The use of the source code of this file is also subject to the terms\n* and consitions of the license of \"d3.js\" (BSD-3Clause, see\n* </licenses/LICENSE-d3>).\n*/\n\nvar RADIAN_EPSILON = 1e-4;\n\nfunction _trim(str) {\n    return str.replace(/^\\s+/, '').replace(/\\s+$/, '');\n}\n\n/**\n * Linear mapping a value from domain to range\n * @memberOf module:echarts/util/number\n * @param  {(number|Array.<number>)} val\n * @param  {Array.<number>} domain Domain extent domain[0] can be bigger than domain[1]\n * @param  {Array.<number>} range  Range extent range[0] can be bigger than range[1]\n * @param  {boolean} clamp\n * @return {(number|Array.<number>}\n */\nfunction linearMap(val, domain, range, clamp) {\n    var subDomain = domain[1] - domain[0];\n    var subRange = range[1] - range[0];\n\n    if (subDomain === 0) {\n        return subRange === 0\n            ? range[0]\n            : (range[0] + range[1]) / 2;\n    }\n\n    // Avoid accuracy problem in edge, such as\n    // 146.39 - 62.83 === 83.55999999999999.\n    // See echarts/test/ut/spec/util/number.js#linearMap#accuracyError\n    // It is a little verbose for efficiency considering this method\n    // is a hotspot.\n    if (clamp) {\n        if (subDomain > 0) {\n            if (val <= domain[0]) {\n                return range[0];\n            }\n            else if (val >= domain[1]) {\n                return range[1];\n            }\n        }\n        else {\n            if (val >= domain[0]) {\n                return range[0];\n            }\n            else if (val <= domain[1]) {\n                return range[1];\n            }\n        }\n    }\n    else {\n        if (val === domain[0]) {\n            return range[0];\n        }\n        if (val === domain[1]) {\n            return range[1];\n        }\n    }\n\n    return (val - domain[0]) / subDomain * subRange + range[0];\n}\n\n/**\n * Convert a percent string to absolute number.\n * Returns NaN if percent is not a valid string or number\n * @memberOf module:echarts/util/number\n * @param {string|number} percent\n * @param {number} all\n * @return {number}\n */\nfunction parsePercent$1(percent, all) {\n    switch (percent) {\n        case 'center':\n        case 'middle':\n            percent = '50%';\n            break;\n        case 'left':\n        case 'top':\n            percent = '0%';\n            break;\n        case 'right':\n        case 'bottom':\n            percent = '100%';\n            break;\n    }\n    if (typeof percent === 'string') {\n        if (_trim(percent).match(/%$/)) {\n            return parseFloat(percent) / 100 * all;\n        }\n\n        return parseFloat(percent);\n    }\n\n    return percent == null ? NaN : +percent;\n}\n\n/**\n * (1) Fix rounding error of float numbers.\n * (2) Support return string to avoid scientific notation like '3.5e-7'.\n *\n * @param {number} x\n * @param {number} [precision]\n * @param {boolean} [returnStr]\n * @return {number|string}\n */\nfunction round$1(x, precision, returnStr) {\n    if (precision == null) {\n        precision = 10;\n    }\n    // Avoid range error\n    precision = Math.min(Math.max(0, precision), 20);\n    x = (+x).toFixed(precision);\n    return returnStr ? x : +x;\n}\n\n/**\n * asc sort arr.\n * The input arr will be modified.\n *\n * @param {Array} arr\n * @return {Array} The input arr.\n */\nfunction asc(arr) {\n    arr.sort(function (a, b) {\n        return a - b;\n    });\n    return arr;\n}\n\n/**\n * Get precision\n * @param {number} val\n */\nfunction getPrecision(val) {\n    val = +val;\n    if (isNaN(val)) {\n        return 0;\n    }\n    // It is much faster than methods converting number to string as follows\n    //      var tmp = val.toString();\n    //      return tmp.length - 1 - tmp.indexOf('.');\n    // especially when precision is low\n    var e = 1;\n    var count = 0;\n    while (Math.round(val * e) / e !== val) {\n        e *= 10;\n        count++;\n    }\n    return count;\n}\n\n/**\n * @param {string|number} val\n * @return {number}\n */\nfunction getPrecisionSafe(val) {\n    var str = val.toString();\n\n    // Consider scientific notation: '3.4e-12' '3.4e+12'\n    var eIndex = str.indexOf('e');\n    if (eIndex > 0) {\n        var precision = +str.slice(eIndex + 1);\n        return precision < 0 ? -precision : 0;\n    }\n    else {\n        var dotIndex = str.indexOf('.');\n        return dotIndex < 0 ? 0 : str.length - 1 - dotIndex;\n    }\n}\n\n/**\n * Minimal dicernible data precisioin according to a single pixel.\n *\n * @param {Array.<number>} dataExtent\n * @param {Array.<number>} pixelExtent\n * @return {number} precision\n */\nfunction getPixelPrecision(dataExtent, pixelExtent) {\n    var log = Math.log;\n    var LN10 = Math.LN10;\n    var dataQuantity = Math.floor(log(dataExtent[1] - dataExtent[0]) / LN10);\n    var sizeQuantity = Math.round(log(Math.abs(pixelExtent[1] - pixelExtent[0])) / LN10);\n    // toFixed() digits argument must be between 0 and 20.\n    var precision = Math.min(Math.max(-dataQuantity + sizeQuantity, 0), 20);\n    return !isFinite(precision) ? 20 : precision;\n}\n\n/**\n * Get a data of given precision, assuring the sum of percentages\n * in valueList is 1.\n * The largest remainer method is used.\n * https://en.wikipedia.org/wiki/Largest_remainder_method\n *\n * @param {Array.<number>} valueList a list of all data\n * @param {number} idx index of the data to be processed in valueList\n * @param {number} precision integer number showing digits of precision\n * @return {number} percent ranging from 0 to 100\n */\nfunction getPercentWithPrecision(valueList, idx, precision) {\n    if (!valueList[idx]) {\n        return 0;\n    }\n\n    var sum = reduce(valueList, function (acc, val) {\n        return acc + (isNaN(val) ? 0 : val);\n    }, 0);\n    if (sum === 0) {\n        return 0;\n    }\n\n    var digits = Math.pow(10, precision);\n    var votesPerQuota = map(valueList, function (val) {\n        return (isNaN(val) ? 0 : val) / sum * digits * 100;\n    });\n    var targetSeats = digits * 100;\n\n    var seats = map(votesPerQuota, function (votes) {\n        // Assign automatic seats.\n        return Math.floor(votes);\n    });\n    var currentSum = reduce(seats, function (acc, val) {\n        return acc + val;\n    }, 0);\n\n    var remainder = map(votesPerQuota, function (votes, idx) {\n        return votes - seats[idx];\n    });\n\n    // Has remainding votes.\n    while (currentSum < targetSeats) {\n        // Find next largest remainder.\n        var max = Number.NEGATIVE_INFINITY;\n        var maxId = null;\n        for (var i = 0, len = remainder.length; i < len; ++i) {\n            if (remainder[i] > max) {\n                max = remainder[i];\n                maxId = i;\n            }\n        }\n\n        // Add a vote to max remainder.\n        ++seats[maxId];\n        remainder[maxId] = 0;\n        ++currentSum;\n    }\n\n    return seats[idx] / digits;\n}\n\n// Number.MAX_SAFE_INTEGER, ie do not support.\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * To 0 - 2 * PI, considering negative radian.\n * @param {number} radian\n * @return {number}\n */\nfunction remRadian(radian) {\n    var pi2 = Math.PI * 2;\n    return (radian % pi2 + pi2) % pi2;\n}\n\n/**\n * @param {type} radian\n * @return {boolean}\n */\nfunction isRadianAroundZero(val) {\n    return val > -RADIAN_EPSILON && val < RADIAN_EPSILON;\n}\n\n/* eslint-disable */\nvar TIME_REG = /^(?:(\\d{4})(?:[-\\/](\\d{1,2})(?:[-\\/](\\d{1,2})(?:[T ](\\d{1,2})(?::(\\d\\d)(?::(\\d\\d)(?:[.,](\\d+))?)?)?(Z|[\\+\\-]\\d\\d:?\\d\\d)?)?)?)?)?$/; // jshint ignore:line\n/* eslint-enable */\n\n/**\n * @param {string|Date|number} value These values can be accepted:\n *   + An instance of Date, represent a time in its own time zone.\n *   + Or string in a subset of ISO 8601, only including:\n *     + only year, month, date: '2012-03', '2012-03-01', '2012-03-01 05', '2012-03-01 05:06',\n *     + separated with T or space: '2012-03-01T12:22:33.123', '2012-03-01 12:22:33.123',\n *     + time zone: '2012-03-01T12:22:33Z', '2012-03-01T12:22:33+8000', '2012-03-01T12:22:33-05:00',\n *     all of which will be treated as local time if time zone is not specified\n *     (see <https://momentjs.com/>).\n *   + Or other string format, including (all of which will be treated as loacal time):\n *     '2012', '2012-3-1', '2012/3/1', '2012/03/01',\n *     '2009/6/12 2:00', '2009/6/12 2:05:08', '2009/6/12 2:05:08.123'\n *   + a timestamp, which represent a time in UTC.\n * @return {Date} date\n */\nfunction parseDate(value) {\n    if (value instanceof Date) {\n        return value;\n    }\n    else if (typeof value === 'string') {\n        // Different browsers parse date in different way, so we parse it manually.\n        // Some other issues:\n        // new Date('1970-01-01') is UTC,\n        // new Date('1970/01/01') and new Date('1970-1-01') is local.\n        // See issue #3623\n        var match = TIME_REG.exec(value);\n\n        if (!match) {\n            // return Invalid Date.\n            return new Date(NaN);\n        }\n\n        // Use local time when no timezone offset specifed.\n        if (!match[8]) {\n            // match[n] can only be string or undefined.\n            // But take care of '12' + 1 => '121'.\n            return new Date(\n                +match[1],\n                +(match[2] || 1) - 1,\n                +match[3] || 1,\n                +match[4] || 0,\n                +(match[5] || 0),\n                +match[6] || 0,\n                +match[7] || 0\n            );\n        }\n        // Timezoneoffset of Javascript Date has considered DST (Daylight Saving Time,\n        // https://tc39.github.io/ecma262/#sec-daylight-saving-time-adjustment).\n        // For example, system timezone is set as \"Time Zone: America/Toronto\",\n        // then these code will get different result:\n        // `new Date(1478411999999).getTimezoneOffset();  // get 240`\n        // `new Date(1478412000000).getTimezoneOffset();  // get 300`\n        // So we should not use `new Date`, but use `Date.UTC`.\n        else {\n            var hour = +match[4] || 0;\n            if (match[8].toUpperCase() !== 'Z') {\n                hour -= match[8].slice(0, 3);\n            }\n            return new Date(Date.UTC(\n                +match[1],\n                +(match[2] || 1) - 1,\n                +match[3] || 1,\n                hour,\n                +(match[5] || 0),\n                +match[6] || 0,\n                +match[7] || 0\n            ));\n        }\n    }\n    else if (value == null) {\n        return new Date(NaN);\n    }\n\n    return new Date(Math.round(value));\n}\n\n/**\n * Quantity of a number. e.g. 0.1, 1, 10, 100\n *\n * @param  {number} val\n * @return {number}\n */\nfunction quantity(val) {\n    return Math.pow(10, quantityExponent(val));\n}\n\nfunction quantityExponent(val) {\n    return Math.floor(Math.log(val) / Math.LN10);\n}\n\n/**\n * find a “nice” number approximately equal to x. Round the number if round = true,\n * take ceiling if round = false. The primary observation is that the “nicest”\n * numbers in decimal are 1, 2, and 5, and all power-of-ten multiples of these numbers.\n *\n * See \"Nice Numbers for Graph Labels\" of Graphic Gems.\n *\n * @param  {number} val Non-negative value.\n * @param  {boolean} round\n * @return {number}\n */\nfunction nice(val, round) {\n    var exponent = quantityExponent(val);\n    var exp10 = Math.pow(10, exponent);\n    var f = val / exp10; // 1 <= f < 10\n    var nf;\n    if (round) {\n        if (f < 1.5) {\n            nf = 1;\n        }\n        else if (f < 2.5) {\n            nf = 2;\n        }\n        else if (f < 4) {\n            nf = 3;\n        }\n        else if (f < 7) {\n            nf = 5;\n        }\n        else {\n            nf = 10;\n        }\n    }\n    else {\n        if (f < 1) {\n            nf = 1;\n        }\n        else if (f < 2) {\n            nf = 2;\n        }\n        else if (f < 3) {\n            nf = 3;\n        }\n        else if (f < 5) {\n            nf = 5;\n        }\n        else {\n            nf = 10;\n        }\n    }\n    val = nf * exp10;\n\n    // Fix 3 * 0.1 === 0.30000000000000004 issue (see IEEE 754).\n    // 20 is the uppper bound of toFixed.\n    return exponent >= -20 ? +val.toFixed(exponent < 0 ? -exponent : 0) : val;\n}\n\n/**\n * This code was copied from \"d3.js\"\n * <https://github.com/d3/d3/blob/9cc9a875e636a1dcf36cc1e07bdf77e1ad6e2c74/src/arrays/quantile.js>.\n * See the license statement at the head of this file.\n * @param {Array.<number>} ascArr\n */\nfunction quantile(ascArr, p) {\n    var H = (ascArr.length - 1) * p + 1;\n    var h = Math.floor(H);\n    var v = +ascArr[h - 1];\n    var e = H - h;\n    return e ? v + e * (ascArr[h] - v) : v;\n}\n\n/**\n * Order intervals asc, and split them when overlap.\n * expect(numberUtil.reformIntervals([\n *     {interval: [18, 62], close: [1, 1]},\n *     {interval: [-Infinity, -70], close: [0, 0]},\n *     {interval: [-70, -26], close: [1, 1]},\n *     {interval: [-26, 18], close: [1, 1]},\n *     {interval: [62, 150], close: [1, 1]},\n *     {interval: [106, 150], close: [1, 1]},\n *     {interval: [150, Infinity], close: [0, 0]}\n * ])).toEqual([\n *     {interval: [-Infinity, -70], close: [0, 0]},\n *     {interval: [-70, -26], close: [1, 1]},\n *     {interval: [-26, 18], close: [0, 1]},\n *     {interval: [18, 62], close: [0, 1]},\n *     {interval: [62, 150], close: [0, 1]},\n *     {interval: [150, Infinity], close: [0, 0]}\n * ]);\n * @param {Array.<Object>} list, where `close` mean open or close\n *        of the interval, and Infinity can be used.\n * @return {Array.<Object>} The origin list, which has been reformed.\n */\nfunction reformIntervals(list) {\n    list.sort(function (a, b) {\n        return littleThan(a, b, 0) ? -1 : 1;\n    });\n\n    var curr = -Infinity;\n    var currClose = 1;\n    for (var i = 0; i < list.length;) {\n        var interval = list[i].interval;\n        var close = list[i].close;\n\n        for (var lg = 0; lg < 2; lg++) {\n            if (interval[lg] <= curr) {\n                interval[lg] = curr;\n                close[lg] = !lg ? 1 - currClose : 1;\n            }\n            curr = interval[lg];\n            currClose = close[lg];\n        }\n\n        if (interval[0] === interval[1] && close[0] * close[1] !== 1) {\n            list.splice(i, 1);\n        }\n        else {\n            i++;\n        }\n    }\n\n    return list;\n\n    function littleThan(a, b, lg) {\n        return a.interval[lg] < b.interval[lg]\n            || (\n                a.interval[lg] === b.interval[lg]\n                && (\n                    (a.close[lg] - b.close[lg] === (!lg ? 1 : -1))\n                    || (!lg && littleThan(a, b, 1))\n                )\n            );\n    }\n}\n\n/**\n * parseFloat NaNs numeric-cast false positives (null|true|false|\"\")\n * ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n * subtraction forces infinities to NaN\n *\n * @param {*} v\n * @return {boolean}\n */\nfunction isNumeric(v) {\n    return v - parseFloat(v) >= 0;\n}\n\n\nvar number = (Object.freeze || Object)({\n\tlinearMap: linearMap,\n\tparsePercent: parsePercent$1,\n\tround: round$1,\n\tasc: asc,\n\tgetPrecision: getPrecision,\n\tgetPrecisionSafe: getPrecisionSafe,\n\tgetPixelPrecision: getPixelPrecision,\n\tgetPercentWithPrecision: getPercentWithPrecision,\n\tMAX_SAFE_INTEGER: MAX_SAFE_INTEGER,\n\tremRadian: remRadian,\n\tisRadianAroundZero: isRadianAroundZero,\n\tparseDate: parseDate,\n\tquantity: quantity,\n\tnice: nice,\n\tquantile: quantile,\n\treformIntervals: reformIntervals,\n\tisNumeric: isNumeric\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n// import Text from 'zrender/src/graphic/Text';\n\n/**\n * 每三位默认加,格式化\n * @param {string|number} x\n * @return {string}\n */\nfunction addCommas(x) {\n    if (isNaN(x)) {\n        return '-';\n    }\n    x = (x + '').split('.');\n    return x[0].replace(/(\\d{1,3})(?=(?:\\d{3})+(?!\\d))/g, '$1,')\n            + (x.length > 1 ? ('.' + x[1]) : '');\n}\n\n/**\n * @param {string} str\n * @param {boolean} [upperCaseFirst=false]\n * @return {string} str\n */\nfunction toCamelCase(str, upperCaseFirst) {\n    str = (str || '').toLowerCase().replace(/-(.)/g, function (match, group1) {\n        return group1.toUpperCase();\n    });\n\n    if (upperCaseFirst && str) {\n        str = str.charAt(0).toUpperCase() + str.slice(1);\n    }\n\n    return str;\n}\n\nvar normalizeCssArray$1 = normalizeCssArray;\n\n\nvar replaceReg = /([&<>\"'])/g;\nvar replaceMap = {\n    '&': '&amp;',\n    '<': '&lt;',\n    '>': '&gt;',\n    '\"': '&quot;',\n    '\\'': '&#39;'\n};\n\nfunction encodeHTML(source) {\n    return source == null\n        ? ''\n        : (source + '').replace(replaceReg, function (str, c) {\n            return replaceMap[c];\n        });\n}\n\nvar TPL_VAR_ALIAS = ['a', 'b', 'c', 'd', 'e', 'f', 'g'];\n\nvar wrapVar = function (varName, seriesIdx) {\n    return '{' + varName + (seriesIdx == null ? '' : seriesIdx) + '}';\n};\n\n/**\n * Template formatter\n * @param {string} tpl\n * @param {Array.<Object>|Object} paramsList\n * @param {boolean} [encode=false]\n * @return {string}\n */\nfunction formatTpl(tpl, paramsList, encode) {\n    if (!isArray(paramsList)) {\n        paramsList = [paramsList];\n    }\n    var seriesLen = paramsList.length;\n    if (!seriesLen) {\n        return '';\n    }\n\n    var $vars = paramsList[0].$vars || [];\n    for (var i = 0; i < $vars.length; i++) {\n        var alias = TPL_VAR_ALIAS[i];\n        tpl = tpl.replace(wrapVar(alias), wrapVar(alias, 0));\n    }\n    for (var seriesIdx = 0; seriesIdx < seriesLen; seriesIdx++) {\n        for (var k = 0; k < $vars.length; k++) {\n            var val = paramsList[seriesIdx][$vars[k]];\n            tpl = tpl.replace(\n                wrapVar(TPL_VAR_ALIAS[k], seriesIdx),\n                encode ? encodeHTML(val) : val\n            );\n        }\n    }\n\n    return tpl;\n}\n\n/**\n * simple Template formatter\n *\n * @param {string} tpl\n * @param {Object} param\n * @param {boolean} [encode=false]\n * @return {string}\n */\nfunction formatTplSimple(tpl, param, encode) {\n    each$1(param, function (value, key) {\n        tpl = tpl.replace(\n            '{' + key + '}',\n            encode ? encodeHTML(value) : value\n        );\n    });\n    return tpl;\n}\n\n/**\n * @param {Object|string} [opt] If string, means color.\n * @param {string} [opt.color]\n * @param {string} [opt.extraCssText]\n * @param {string} [opt.type='item'] 'item' or 'subItem'\n * @param {string} [opt.renderMode='html'] render mode of tooltip, 'html' or 'richText'\n * @param {string} [opt.markerId='X'] id name for marker. If only one marker is in a rich text, this can be omitted.\n * @return {string}\n */\nfunction getTooltipMarker(opt, extraCssText) {\n    opt = isString(opt) ? {color: opt, extraCssText: extraCssText} : (opt || {});\n    var color = opt.color;\n    var type = opt.type;\n    var extraCssText = opt.extraCssText;\n    var renderMode = opt.renderMode || 'html';\n    var markerId = opt.markerId || 'X';\n\n    if (!color) {\n        return '';\n    }\n\n    if (renderMode === 'html') {\n        return type === 'subItem'\n        ? '<span style=\"display:inline-block;vertical-align:middle;margin-right:8px;margin-left:3px;'\n            + 'border-radius:4px;width:4px;height:4px;background-color:'\n            + encodeHTML(color) + ';' + (extraCssText || '') + '\"></span>'\n        : '<span style=\"display:inline-block;margin-right:5px;'\n            + 'border-radius:10px;width:10px;height:10px;background-color:'\n            + encodeHTML(color) + ';' + (extraCssText || '') + '\"></span>';\n    }\n    else {\n        // Space for rich element marker\n        return {\n            renderMode: renderMode,\n            content: '{marker' + markerId + '|}  ',\n            style: {\n                color: color\n            }\n        };\n    }\n}\n\nfunction pad(str, len) {\n    str += '';\n    return '0000'.substr(0, len - str.length) + str;\n}\n\n\n/**\n * ISO Date format\n * @param {string} tpl\n * @param {number} value\n * @param {boolean} [isUTC=false] Default in local time.\n *           see `module:echarts/scale/Time`\n *           and `module:echarts/util/number#parseDate`.\n * @inner\n */\nfunction formatTime(tpl, value, isUTC) {\n    if (tpl === 'week'\n        || tpl === 'month'\n        || tpl === 'quarter'\n        || tpl === 'half-year'\n        || tpl === 'year'\n    ) {\n        tpl = 'MM-dd\\nyyyy';\n    }\n\n    var date = parseDate(value);\n    var utc = isUTC ? 'UTC' : '';\n    var y = date['get' + utc + 'FullYear']();\n    var M = date['get' + utc + 'Month']() + 1;\n    var d = date['get' + utc + 'Date']();\n    var h = date['get' + utc + 'Hours']();\n    var m = date['get' + utc + 'Minutes']();\n    var s = date['get' + utc + 'Seconds']();\n    var S = date['get' + utc + 'Milliseconds']();\n\n    tpl = tpl.replace('MM', pad(M, 2))\n        .replace('M', M)\n        .replace('yyyy', y)\n        .replace('yy', y % 100)\n        .replace('dd', pad(d, 2))\n        .replace('d', d)\n        .replace('hh', pad(h, 2))\n        .replace('h', h)\n        .replace('mm', pad(m, 2))\n        .replace('m', m)\n        .replace('ss', pad(s, 2))\n        .replace('s', s)\n        .replace('SSS', pad(S, 3));\n\n    return tpl;\n}\n\n/**\n * Capital first\n * @param {string} str\n * @return {string}\n */\nfunction capitalFirst(str) {\n    return str ? str.charAt(0).toUpperCase() + str.substr(1) : str;\n}\n\nvar truncateText$1 = truncateText;\n\n/**\n * @public\n * @param {Object} opt\n * @param {string} opt.text\n * @param {string} opt.font\n * @param {string} [opt.textAlign='left']\n * @param {string} [opt.textVerticalAlign='top']\n * @param {Array.<number>} [opt.textPadding]\n * @param {number} [opt.textLineHeight]\n * @param {Object} [opt.rich]\n * @param {Object} [opt.truncate]\n * @return {Object} {x, y, width, height, lineHeight}\n */\nfunction getTextBoundingRect(opt) {\n    return getBoundingRect(\n        opt.text,\n        opt.font,\n        opt.textAlign,\n        opt.textVerticalAlign,\n        opt.textPadding,\n        opt.textLineHeight,\n        opt.rich,\n        opt.truncate\n    );\n}\n\n/**\n * @deprecated\n * the `textLineHeight` was added later.\n * For backward compatiblility, put it as the last parameter.\n * But deprecated this interface. Please use `getTextBoundingRect` instead.\n */\nfunction getTextRect(\n    text, font, textAlign, textVerticalAlign, textPadding, rich, truncate, textLineHeight\n) {\n    return getBoundingRect(\n        text, font, textAlign, textVerticalAlign, textPadding, textLineHeight, rich, truncate\n    );\n}\n\n\nvar format = (Object.freeze || Object)({\n\taddCommas: addCommas,\n\ttoCamelCase: toCamelCase,\n\tnormalizeCssArray: normalizeCssArray$1,\n\tencodeHTML: encodeHTML,\n\tformatTpl: formatTpl,\n\tformatTplSimple: formatTplSimple,\n\tgetTooltipMarker: getTooltipMarker,\n\tformatTime: formatTime,\n\tcapitalFirst: capitalFirst,\n\ttruncateText: truncateText$1,\n\tgetTextBoundingRect: getTextBoundingRect,\n\tgetTextRect: getTextRect\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n// Layout helpers for each component positioning\n\nvar each$3 = each$1;\n\n/**\n * @public\n */\nvar LOCATION_PARAMS = [\n    'left', 'right', 'top', 'bottom', 'width', 'height'\n];\n\n/**\n * @public\n */\nvar HV_NAMES = [\n    ['width', 'left', 'right'],\n    ['height', 'top', 'bottom']\n];\n\nfunction boxLayout(orient, group, gap, maxWidth, maxHeight) {\n    var x = 0;\n    var y = 0;\n\n    if (maxWidth == null) {\n        maxWidth = Infinity;\n    }\n    if (maxHeight == null) {\n        maxHeight = Infinity;\n    }\n    var currentLineMaxSize = 0;\n\n    group.eachChild(function (child, idx) {\n        var position = child.position;\n        var rect = child.getBoundingRect();\n        var nextChild = group.childAt(idx + 1);\n        var nextChildRect = nextChild && nextChild.getBoundingRect();\n        var nextX;\n        var nextY;\n\n        if (orient === 'horizontal') {\n            var moveX = rect.width + (nextChildRect ? (-nextChildRect.x + rect.x) : 0);\n            nextX = x + moveX;\n            // Wrap when width exceeds maxWidth or meet a `newline` group\n            // FIXME compare before adding gap?\n            if (nextX > maxWidth || child.newline) {\n                x = 0;\n                nextX = moveX;\n                y += currentLineMaxSize + gap;\n                currentLineMaxSize = rect.height;\n            }\n            else {\n                // FIXME: consider rect.y is not `0`?\n                currentLineMaxSize = Math.max(currentLineMaxSize, rect.height);\n            }\n        }\n        else {\n            var moveY = rect.height + (nextChildRect ? (-nextChildRect.y + rect.y) : 0);\n            nextY = y + moveY;\n            // Wrap when width exceeds maxHeight or meet a `newline` group\n            if (nextY > maxHeight || child.newline) {\n                x += currentLineMaxSize + gap;\n                y = 0;\n                nextY = moveY;\n                currentLineMaxSize = rect.width;\n            }\n            else {\n                currentLineMaxSize = Math.max(currentLineMaxSize, rect.width);\n            }\n        }\n\n        if (child.newline) {\n            return;\n        }\n\n        position[0] = x;\n        position[1] = y;\n\n        orient === 'horizontal'\n            ? (x = nextX + gap)\n            : (y = nextY + gap);\n    });\n}\n\n/**\n * VBox or HBox layouting\n * @param {string} orient\n * @param {module:zrender/container/Group} group\n * @param {number} gap\n * @param {number} [width=Infinity]\n * @param {number} [height=Infinity]\n */\nvar box = boxLayout;\n\n/**\n * VBox layouting\n * @param {module:zrender/container/Group} group\n * @param {number} gap\n * @param {number} [width=Infinity]\n * @param {number} [height=Infinity]\n */\nvar vbox = curry(boxLayout, 'vertical');\n\n/**\n * HBox layouting\n * @param {module:zrender/container/Group} group\n * @param {number} gap\n * @param {number} [width=Infinity]\n * @param {number} [height=Infinity]\n */\nvar hbox = curry(boxLayout, 'horizontal');\n\n/**\n * If x or x2 is not specified or 'center' 'left' 'right',\n * the width would be as long as possible.\n * If y or y2 is not specified or 'middle' 'top' 'bottom',\n * the height would be as long as possible.\n *\n * @param {Object} positionInfo\n * @param {number|string} [positionInfo.x]\n * @param {number|string} [positionInfo.y]\n * @param {number|string} [positionInfo.x2]\n * @param {number|string} [positionInfo.y2]\n * @param {Object} containerRect {width, height}\n * @param {string|number} margin\n * @return {Object} {width, height}\n */\nfunction getAvailableSize(positionInfo, containerRect, margin) {\n    var containerWidth = containerRect.width;\n    var containerHeight = containerRect.height;\n\n    var x = parsePercent$1(positionInfo.x, containerWidth);\n    var y = parsePercent$1(positionInfo.y, containerHeight);\n    var x2 = parsePercent$1(positionInfo.x2, containerWidth);\n    var y2 = parsePercent$1(positionInfo.y2, containerHeight);\n\n    (isNaN(x) || isNaN(parseFloat(positionInfo.x))) && (x = 0);\n    (isNaN(x2) || isNaN(parseFloat(positionInfo.x2))) && (x2 = containerWidth);\n    (isNaN(y) || isNaN(parseFloat(positionInfo.y))) && (y = 0);\n    (isNaN(y2) || isNaN(parseFloat(positionInfo.y2))) && (y2 = containerHeight);\n\n    margin = normalizeCssArray$1(margin || 0);\n\n    return {\n        width: Math.max(x2 - x - margin[1] - margin[3], 0),\n        height: Math.max(y2 - y - margin[0] - margin[2], 0)\n    };\n}\n\n/**\n * Parse position info.\n *\n * @param {Object} positionInfo\n * @param {number|string} [positionInfo.left]\n * @param {number|string} [positionInfo.top]\n * @param {number|string} [positionInfo.right]\n * @param {number|string} [positionInfo.bottom]\n * @param {number|string} [positionInfo.width]\n * @param {number|string} [positionInfo.height]\n * @param {number|string} [positionInfo.aspect] Aspect is width / height\n * @param {Object} containerRect\n * @param {string|number} [margin]\n *\n * @return {module:zrender/core/BoundingRect}\n */\nfunction getLayoutRect(\n    positionInfo, containerRect, margin\n) {\n    margin = normalizeCssArray$1(margin || 0);\n\n    var containerWidth = containerRect.width;\n    var containerHeight = containerRect.height;\n\n    var left = parsePercent$1(positionInfo.left, containerWidth);\n    var top = parsePercent$1(positionInfo.top, containerHeight);\n    var right = parsePercent$1(positionInfo.right, containerWidth);\n    var bottom = parsePercent$1(positionInfo.bottom, containerHeight);\n    var width = parsePercent$1(positionInfo.width, containerWidth);\n    var height = parsePercent$1(positionInfo.height, containerHeight);\n\n    var verticalMargin = margin[2] + margin[0];\n    var horizontalMargin = margin[1] + margin[3];\n    var aspect = positionInfo.aspect;\n\n    // If width is not specified, calculate width from left and right\n    if (isNaN(width)) {\n        width = containerWidth - right - horizontalMargin - left;\n    }\n    if (isNaN(height)) {\n        height = containerHeight - bottom - verticalMargin - top;\n    }\n\n    if (aspect != null) {\n        // If width and height are not given\n        // 1. Graph should not exceeds the container\n        // 2. Aspect must be keeped\n        // 3. Graph should take the space as more as possible\n        // FIXME\n        // Margin is not considered, because there is no case that both\n        // using margin and aspect so far.\n        if (isNaN(width) && isNaN(height)) {\n            if (aspect > containerWidth / containerHeight) {\n                width = containerWidth * 0.8;\n            }\n            else {\n                height = containerHeight * 0.8;\n            }\n        }\n\n        // Calculate width or height with given aspect\n        if (isNaN(width)) {\n            width = aspect * height;\n        }\n        if (isNaN(height)) {\n            height = width / aspect;\n        }\n    }\n\n    // If left is not specified, calculate left from right and width\n    if (isNaN(left)) {\n        left = containerWidth - right - width - horizontalMargin;\n    }\n    if (isNaN(top)) {\n        top = containerHeight - bottom - height - verticalMargin;\n    }\n\n    // Align left and top\n    switch (positionInfo.left || positionInfo.right) {\n        case 'center':\n            left = containerWidth / 2 - width / 2 - margin[3];\n            break;\n        case 'right':\n            left = containerWidth - width - horizontalMargin;\n            break;\n    }\n    switch (positionInfo.top || positionInfo.bottom) {\n        case 'middle':\n        case 'center':\n            top = containerHeight / 2 - height / 2 - margin[0];\n            break;\n        case 'bottom':\n            top = containerHeight - height - verticalMargin;\n            break;\n    }\n    // If something is wrong and left, top, width, height are calculated as NaN\n    left = left || 0;\n    top = top || 0;\n    if (isNaN(width)) {\n        // Width may be NaN if only one value is given except width\n        width = containerWidth - horizontalMargin - left - (right || 0);\n    }\n    if (isNaN(height)) {\n        // Height may be NaN if only one value is given except height\n        height = containerHeight - verticalMargin - top - (bottom || 0);\n    }\n\n    var rect = new BoundingRect(left + margin[3], top + margin[0], width, height);\n    rect.margin = margin;\n    return rect;\n}\n\n\n/**\n * Position a zr element in viewport\n *  Group position is specified by either\n *  {left, top}, {right, bottom}\n *  If all properties exists, right and bottom will be igonred.\n *\n * Logic:\n *     1. Scale (against origin point in parent coord)\n *     2. Rotate (against origin point in parent coord)\n *     3. Traslate (with el.position by this method)\n * So this method only fixes the last step 'Traslate', which does not affect\n * scaling and rotating.\n *\n * If be called repeatly with the same input el, the same result will be gotten.\n *\n * @param {module:zrender/Element} el Should have `getBoundingRect` method.\n * @param {Object} positionInfo\n * @param {number|string} [positionInfo.left]\n * @param {number|string} [positionInfo.top]\n * @param {number|string} [positionInfo.right]\n * @param {number|string} [positionInfo.bottom]\n * @param {number|string} [positionInfo.width] Only for opt.boundingModel: 'raw'\n * @param {number|string} [positionInfo.height] Only for opt.boundingModel: 'raw'\n * @param {Object} containerRect\n * @param {string|number} margin\n * @param {Object} [opt]\n * @param {Array.<number>} [opt.hv=[1,1]] Only horizontal or only vertical.\n * @param {Array.<number>} [opt.boundingMode='all']\n *        Specify how to calculate boundingRect when locating.\n *        'all': Position the boundingRect that is transformed and uioned\n *               both itself and its descendants.\n *               This mode simplies confine the elements in the bounding\n *               of their container (e.g., using 'right: 0').\n *        'raw': Position the boundingRect that is not transformed and only itself.\n *               This mode is useful when you want a element can overflow its\n *               container. (Consider a rotated circle needs to be located in a corner.)\n *               In this mode positionInfo.width/height can only be number.\n */\nfunction positionElement(el, positionInfo, containerRect, margin, opt) {\n    var h = !opt || !opt.hv || opt.hv[0];\n    var v = !opt || !opt.hv || opt.hv[1];\n    var boundingMode = opt && opt.boundingMode || 'all';\n\n    if (!h && !v) {\n        return;\n    }\n\n    var rect;\n    if (boundingMode === 'raw') {\n        rect = el.type === 'group'\n            ? new BoundingRect(0, 0, +positionInfo.width || 0, +positionInfo.height || 0)\n            : el.getBoundingRect();\n    }\n    else {\n        rect = el.getBoundingRect();\n        if (el.needLocalTransform()) {\n            var transform = el.getLocalTransform();\n            // Notice: raw rect may be inner object of el,\n            // which should not be modified.\n            rect = rect.clone();\n            rect.applyTransform(transform);\n        }\n    }\n\n    // The real width and height can not be specified but calculated by the given el.\n    positionInfo = getLayoutRect(\n        defaults(\n            {width: rect.width, height: rect.height},\n            positionInfo\n        ),\n        containerRect,\n        margin\n    );\n\n    // Because 'tranlate' is the last step in transform\n    // (see zrender/core/Transformable#getLocalTransform),\n    // we can just only modify el.position to get final result.\n    var elPos = el.position;\n    var dx = h ? positionInfo.x - rect.x : 0;\n    var dy = v ? positionInfo.y - rect.y : 0;\n\n    el.attr('position', boundingMode === 'raw' ? [dx, dy] : [elPos[0] + dx, elPos[1] + dy]);\n}\n\n/**\n * @param {Object} option Contains some of the properties in HV_NAMES.\n * @param {number} hvIdx 0: horizontal; 1: vertical.\n */\nfunction sizeCalculable(option, hvIdx) {\n    return option[HV_NAMES[hvIdx][0]] != null\n        || (option[HV_NAMES[hvIdx][1]] != null && option[HV_NAMES[hvIdx][2]] != null);\n}\n\n/**\n * Consider Case:\n * When defulat option has {left: 0, width: 100}, and we set {right: 0}\n * through setOption or media query, using normal zrUtil.merge will cause\n * {right: 0} does not take effect.\n *\n * @example\n * ComponentModel.extend({\n *     init: function () {\n *         ...\n *         var inputPositionParams = layout.getLayoutParams(option);\n *         this.mergeOption(inputPositionParams);\n *     },\n *     mergeOption: function (newOption) {\n *         newOption && zrUtil.merge(thisOption, newOption, true);\n *         layout.mergeLayoutParam(thisOption, newOption);\n *     }\n * });\n *\n * @param {Object} targetOption\n * @param {Object} newOption\n * @param {Object|string} [opt]\n * @param {boolean|Array.<boolean>} [opt.ignoreSize=false] Used for the components\n *  that width (or height) should not be calculated by left and right (or top and bottom).\n */\nfunction mergeLayoutParam(targetOption, newOption, opt) {\n    !isObject$1(opt) && (opt = {});\n\n    var ignoreSize = opt.ignoreSize;\n    !isArray(ignoreSize) && (ignoreSize = [ignoreSize, ignoreSize]);\n\n    var hResult = merge$$1(HV_NAMES[0], 0);\n    var vResult = merge$$1(HV_NAMES[1], 1);\n\n    copy(HV_NAMES[0], targetOption, hResult);\n    copy(HV_NAMES[1], targetOption, vResult);\n\n    function merge$$1(names, hvIdx) {\n        var newParams = {};\n        var newValueCount = 0;\n        var merged = {};\n        var mergedValueCount = 0;\n        var enoughParamNumber = 2;\n\n        each$3(names, function (name) {\n            merged[name] = targetOption[name];\n        });\n        each$3(names, function (name) {\n            // Consider case: newOption.width is null, which is\n            // set by user for removing width setting.\n            hasProp(newOption, name) && (newParams[name] = merged[name] = newOption[name]);\n            hasValue(newParams, name) && newValueCount++;\n            hasValue(merged, name) && mergedValueCount++;\n        });\n\n        if (ignoreSize[hvIdx]) {\n            // Only one of left/right is premitted to exist.\n            if (hasValue(newOption, names[1])) {\n                merged[names[2]] = null;\n            }\n            else if (hasValue(newOption, names[2])) {\n                merged[names[1]] = null;\n            }\n            return merged;\n        }\n\n        // Case: newOption: {width: ..., right: ...},\n        // or targetOption: {right: ...} and newOption: {width: ...},\n        // There is no conflict when merged only has params count\n        // little than enoughParamNumber.\n        if (mergedValueCount === enoughParamNumber || !newValueCount) {\n            return merged;\n        }\n        // Case: newOption: {width: ..., right: ...},\n        // Than we can make sure user only want those two, and ignore\n        // all origin params in targetOption.\n        else if (newValueCount >= enoughParamNumber) {\n            return newParams;\n        }\n        else {\n            // Chose another param from targetOption by priority.\n            for (var i = 0; i < names.length; i++) {\n                var name = names[i];\n                if (!hasProp(newParams, name) && hasProp(targetOption, name)) {\n                    newParams[name] = targetOption[name];\n                    break;\n                }\n            }\n            return newParams;\n        }\n    }\n\n    function hasProp(obj, name) {\n        return obj.hasOwnProperty(name);\n    }\n\n    function hasValue(obj, name) {\n        return obj[name] != null && obj[name] !== 'auto';\n    }\n\n    function copy(names, target, source) {\n        each$3(names, function (name) {\n            target[name] = source[name];\n        });\n    }\n}\n\n/**\n * Retrieve 'left', 'right', 'top', 'bottom', 'width', 'height' from object.\n * @param {Object} source\n * @return {Object} Result contains those props.\n */\nfunction getLayoutParams(source) {\n    return copyLayoutParams({}, source);\n}\n\n/**\n * Retrieve 'left', 'right', 'top', 'bottom', 'width', 'height' from object.\n * @param {Object} source\n * @return {Object} Result contains those props.\n */\nfunction copyLayoutParams(target, source) {\n    source && target && each$3(LOCATION_PARAMS, function (name) {\n        source.hasOwnProperty(name) && (target[name] = source[name]);\n    });\n    return target;\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\nvar boxLayoutMixin = {\n    getBoxLayoutParams: function () {\n        return {\n            left: this.get('left'),\n            top: this.get('top'),\n            right: this.get('right'),\n            bottom: this.get('bottom'),\n            width: this.get('width'),\n            height: this.get('height')\n        };\n    }\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Component model\n *\n * @module echarts/model/Component\n */\n\nvar inner$1 = makeInner();\n\n/**\n * @alias module:echarts/model/Component\n * @constructor\n * @param {Object} option\n * @param {module:echarts/model/Model} parentModel\n * @param {module:echarts/model/Model} ecModel\n */\nvar ComponentModel = Model.extend({\n\n    type: 'component',\n\n    /**\n     * @readOnly\n     * @type {string}\n     */\n    id: '',\n\n    /**\n     * Because simplified concept is probably better, series.name (or component.name)\n     * has been having too many resposibilities:\n     * (1) Generating id (which requires name in option should not be modified).\n     * (2) As an index to mapping series when merging option or calling API (a name\n     * can refer to more then one components, which is convinient is some case).\n     * (3) Display.\n     * @readOnly\n     */\n    name: '',\n\n    /**\n     * @readOnly\n     * @type {string}\n     */\n    mainType: '',\n\n    /**\n     * @readOnly\n     * @type {string}\n     */\n    subType: '',\n\n    /**\n     * @readOnly\n     * @type {number}\n     */\n    componentIndex: 0,\n\n    /**\n     * @type {Object}\n     * @protected\n     */\n    defaultOption: null,\n\n    /**\n     * @type {module:echarts/model/Global}\n     * @readOnly\n     */\n    ecModel: null,\n\n    /**\n     * key: componentType\n     * value:  Component model list, can not be null.\n     * @type {Object.<string, Array.<module:echarts/model/Model>>}\n     * @readOnly\n     */\n    dependentModels: [],\n\n    /**\n     * @type {string}\n     * @readOnly\n     */\n    uid: null,\n\n    /**\n     * Support merge layout params.\n     * Only support 'box' now (left/right/top/bottom/width/height).\n     * @type {string|Object} Object can be {ignoreSize: true}\n     * @readOnly\n     */\n    layoutMode: null,\n\n    $constructor: function (option, parentModel, ecModel, extraOpt) {\n        Model.call(this, option, parentModel, ecModel, extraOpt);\n\n        this.uid = getUID('ec_cpt_model');\n    },\n\n    init: function (option, parentModel, ecModel, extraOpt) {\n        this.mergeDefaultAndTheme(option, ecModel);\n    },\n\n    mergeDefaultAndTheme: function (option, ecModel) {\n        var layoutMode = this.layoutMode;\n        var inputPositionParams = layoutMode\n            ? getLayoutParams(option) : {};\n\n        var themeModel = ecModel.getTheme();\n        merge(option, themeModel.get(this.mainType));\n        merge(option, this.getDefaultOption());\n\n        if (layoutMode) {\n            mergeLayoutParam(option, inputPositionParams, layoutMode);\n        }\n    },\n\n    mergeOption: function (option, extraOpt) {\n        merge(this.option, option, true);\n\n        var layoutMode = this.layoutMode;\n        if (layoutMode) {\n            mergeLayoutParam(this.option, option, layoutMode);\n        }\n    },\n\n    // Hooker after init or mergeOption\n    optionUpdated: function (newCptOption, isInit) {},\n\n    getDefaultOption: function () {\n        var fields = inner$1(this);\n        if (!fields.defaultOption) {\n            var optList = [];\n            var Class = this.constructor;\n            while (Class) {\n                var opt = Class.prototype.defaultOption;\n                opt && optList.push(opt);\n                Class = Class.superClass;\n            }\n\n            var defaultOption = {};\n            for (var i = optList.length - 1; i >= 0; i--) {\n                defaultOption = merge(defaultOption, optList[i], true);\n            }\n            fields.defaultOption = defaultOption;\n        }\n        return fields.defaultOption;\n    },\n\n    getReferringComponents: function (mainType) {\n        return this.ecModel.queryComponents({\n            mainType: mainType,\n            index: this.get(mainType + 'Index', true),\n            id: this.get(mainType + 'Id', true)\n        });\n    }\n\n});\n\n// Reset ComponentModel.extend, add preConstruct.\n// clazzUtil.enableClassExtend(\n//     ComponentModel,\n//     function (option, parentModel, ecModel, extraOpt) {\n//         // Set dependentModels, componentIndex, name, id, mainType, subType.\n//         zrUtil.extend(this, extraOpt);\n\n//         this.uid = componentUtil.getUID('componentModel');\n\n//         // this.setReadOnly([\n//         //     'type', 'id', 'uid', 'name', 'mainType', 'subType',\n//         //     'dependentModels', 'componentIndex'\n//         // ]);\n//     }\n// );\n\n// Add capability of registerClass, getClass, hasClass, registerSubTypeDefaulter and so on.\nenableClassManagement(\n    ComponentModel, {registerWhenExtend: true}\n);\nenableSubTypeDefaulter(ComponentModel);\n\n// Add capability of ComponentModel.topologicalTravel.\nenableTopologicalTravel(ComponentModel, getDependencies);\n\nfunction getDependencies(componentType) {\n    var deps = [];\n    each$1(ComponentModel.getClassesByMainType(componentType), function (Clazz) {\n        deps = deps.concat(Clazz.prototype.dependencies || []);\n    });\n\n    // Ensure main type.\n    deps = map(deps, function (type) {\n        return parseClassType$1(type).main;\n    });\n\n    // Hack dataset for convenience.\n    if (componentType !== 'dataset' && indexOf(deps, 'dataset') <= 0) {\n        deps.unshift('dataset');\n    }\n\n    return deps;\n}\n\nmixin(ComponentModel, boxLayoutMixin);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\nvar platform = '';\n// Navigator not exists in node\nif (typeof navigator !== 'undefined') {\n    platform = navigator.platform || '';\n}\n\nvar globalDefault = {\n    // backgroundColor: 'rgba(0,0,0,0)',\n\n    // https://dribbble.com/shots/1065960-Infographic-Pie-chart-visualization\n    // color: ['#5793f3', '#d14a61', '#fd9c35', '#675bba', '#fec42c', '#dd4444', '#d4df5a', '#cd4870'],\n    // Light colors:\n    // color: ['#bcd3bb', '#e88f70', '#edc1a5', '#9dc5c8', '#e1e8c8', '#7b7c68', '#e5b5b5', '#f0b489', '#928ea8', '#bda29a'],\n    // color: ['#cc5664', '#9bd6ec', '#ea946e', '#8acaaa', '#f1ec64', '#ee8686', '#a48dc1', '#5da6bc', '#b9dcae'],\n    // Dark colors:\n    color: [\n        '#c23531', '#2f4554', '#61a0a8', '#d48265', '#91c7ae', '#749f83',\n        '#ca8622', '#bda29a', '#6e7074', '#546570', '#c4ccd3'\n    ],\n\n    gradientColor: ['#f6efa6', '#d88273', '#bf444c'],\n\n    // If xAxis and yAxis declared, grid is created by default.\n    // grid: {},\n\n    textStyle: {\n        // color: '#000',\n        // decoration: 'none',\n        // PENDING\n        fontFamily: platform.match(/^Win/) ? 'Microsoft YaHei' : 'sans-serif',\n        // fontFamily: 'Arial, Verdana, sans-serif',\n        fontSize: 12,\n        fontStyle: 'normal',\n        fontWeight: 'normal'\n    },\n\n    // http://blogs.adobe.com/webplatform/2014/02/24/using-blend-modes-in-html-canvas/\n    // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/globalCompositeOperation\n    // Default is source-over\n    blendMode: null,\n\n    animation: 'auto',\n    animationDuration: 1000,\n    animationDurationUpdate: 300,\n    animationEasing: 'exponentialOut',\n    animationEasingUpdate: 'cubicOut',\n\n    animationThreshold: 2000,\n    // Configuration for progressive/incremental rendering\n    progressiveThreshold: 3000,\n    progressive: 400,\n\n    // Threshold of if use single hover layer to optimize.\n    // It is recommended that `hoverLayerThreshold` is equivalent to or less than\n    // `progressiveThreshold`, otherwise hover will cause restart of progressive,\n    // which is unexpected.\n    // see example <echarts/test/heatmap-large.html>.\n    hoverLayerThreshold: 3000,\n\n    // See: module:echarts/scale/Time\n    useUTC: false\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar inner$2 = makeInner();\n\nfunction getNearestColorPalette(colors, requestColorNum) {\n    var paletteNum = colors.length;\n    // TODO colors must be in order\n    for (var i = 0; i < paletteNum; i++) {\n        if (colors[i].length > requestColorNum) {\n            return colors[i];\n        }\n    }\n    return colors[paletteNum - 1];\n}\n\nvar colorPaletteMixin = {\n    clearColorPalette: function () {\n        inner$2(this).colorIdx = 0;\n        inner$2(this).colorNameMap = {};\n    },\n\n    /**\n     * @param {string} name MUST NOT be null/undefined. Otherwise call this function\n     *                 twise with the same parameters will get different result.\n     * @param {Object} [scope=this]\n     * @param {Object} [requestColorNum]\n     * @return {string} color string.\n     */\n    getColorFromPalette: function (name, scope, requestColorNum) {\n        scope = scope || this;\n        var scopeFields = inner$2(scope);\n        var colorIdx = scopeFields.colorIdx || 0;\n        var colorNameMap = scopeFields.colorNameMap = scopeFields.colorNameMap || {};\n        // Use `hasOwnProperty` to avoid conflict with Object.prototype.\n        if (colorNameMap.hasOwnProperty(name)) {\n            return colorNameMap[name];\n        }\n        var defaultColorPalette = normalizeToArray(this.get('color', true));\n        var layeredColorPalette = this.get('colorLayer', true);\n        var colorPalette = ((requestColorNum == null || !layeredColorPalette)\n            ? defaultColorPalette : getNearestColorPalette(layeredColorPalette, requestColorNum));\n\n        // In case can't find in layered color palette.\n        colorPalette = colorPalette || defaultColorPalette;\n\n        if (!colorPalette || !colorPalette.length) {\n            return;\n        }\n\n        var color = colorPalette[colorIdx];\n        if (name) {\n            colorNameMap[name] = color;\n        }\n        scopeFields.colorIdx = (colorIdx + 1) % colorPalette.length;\n\n        return color;\n    }\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Helper for model references.\n * There are many manners to refer axis/coordSys.\n */\n\n// TODO\n// merge relevant logic to this file?\n// check: \"modelHelper\" of tooltip and \"BrushTargetManager\".\n\n/**\n * @return {Object} For example:\n * {\n *     coordSysName: 'cartesian2d',\n *     coordSysDims: ['x', 'y', ...],\n *     axisMap: HashMap({\n *         x: xAxisModel,\n *         y: yAxisModel\n *     }),\n *     categoryAxisMap: HashMap({\n *         x: xAxisModel,\n *         y: undefined\n *     }),\n *     // It also indicate that whether there is category axis.\n *     firstCategoryDimIndex: 1,\n *     // To replace user specified encode.\n * }\n */\nfunction getCoordSysDefineBySeries(seriesModel) {\n    var coordSysName = seriesModel.get('coordinateSystem');\n    var result = {\n        coordSysName: coordSysName,\n        coordSysDims: [],\n        axisMap: createHashMap(),\n        categoryAxisMap: createHashMap()\n    };\n    var fetch = fetchers[coordSysName];\n    if (fetch) {\n        fetch(seriesModel, result, result.axisMap, result.categoryAxisMap);\n        return result;\n    }\n}\n\nvar fetchers = {\n\n    cartesian2d: function (seriesModel, result, axisMap, categoryAxisMap) {\n        var xAxisModel = seriesModel.getReferringComponents('xAxis')[0];\n        var yAxisModel = seriesModel.getReferringComponents('yAxis')[0];\n\n        if (__DEV__) {\n            if (!xAxisModel) {\n                throw new Error('xAxis \"' + retrieve(\n                    seriesModel.get('xAxisIndex'),\n                    seriesModel.get('xAxisId'),\n                    0\n                ) + '\" not found');\n            }\n            if (!yAxisModel) {\n                throw new Error('yAxis \"' + retrieve(\n                    seriesModel.get('xAxisIndex'),\n                    seriesModel.get('yAxisId'),\n                    0\n                ) + '\" not found');\n            }\n        }\n\n        result.coordSysDims = ['x', 'y'];\n        axisMap.set('x', xAxisModel);\n        axisMap.set('y', yAxisModel);\n\n        if (isCategory(xAxisModel)) {\n            categoryAxisMap.set('x', xAxisModel);\n            result.firstCategoryDimIndex = 0;\n        }\n        if (isCategory(yAxisModel)) {\n            categoryAxisMap.set('y', yAxisModel);\n            result.firstCategoryDimIndex = 1;\n        }\n    },\n\n    singleAxis: function (seriesModel, result, axisMap, categoryAxisMap) {\n        var singleAxisModel = seriesModel.getReferringComponents('singleAxis')[0];\n\n        if (__DEV__) {\n            if (!singleAxisModel) {\n                throw new Error('singleAxis should be specified.');\n            }\n        }\n\n        result.coordSysDims = ['single'];\n        axisMap.set('single', singleAxisModel);\n\n        if (isCategory(singleAxisModel)) {\n            categoryAxisMap.set('single', singleAxisModel);\n            result.firstCategoryDimIndex = 0;\n        }\n    },\n\n    polar: function (seriesModel, result, axisMap, categoryAxisMap) {\n        var polarModel = seriesModel.getReferringComponents('polar')[0];\n        var radiusAxisModel = polarModel.findAxisModel('radiusAxis');\n        var angleAxisModel = polarModel.findAxisModel('angleAxis');\n\n        if (__DEV__) {\n            if (!angleAxisModel) {\n                throw new Error('angleAxis option not found');\n            }\n            if (!radiusAxisModel) {\n                throw new Error('radiusAxis option not found');\n            }\n        }\n\n        result.coordSysDims = ['radius', 'angle'];\n        axisMap.set('radius', radiusAxisModel);\n        axisMap.set('angle', angleAxisModel);\n\n        if (isCategory(radiusAxisModel)) {\n            categoryAxisMap.set('radius', radiusAxisModel);\n            result.firstCategoryDimIndex = 0;\n        }\n        if (isCategory(angleAxisModel)) {\n            categoryAxisMap.set('angle', angleAxisModel);\n            result.firstCategoryDimIndex = 1;\n        }\n    },\n\n    geo: function (seriesModel, result, axisMap, categoryAxisMap) {\n        result.coordSysDims = ['lng', 'lat'];\n    },\n\n    parallel: function (seriesModel, result, axisMap, categoryAxisMap) {\n        var ecModel = seriesModel.ecModel;\n        var parallelModel = ecModel.getComponent(\n            'parallel', seriesModel.get('parallelIndex')\n        );\n        var coordSysDims = result.coordSysDims = parallelModel.dimensions.slice();\n\n        each$1(parallelModel.parallelAxisIndex, function (axisIndex, index) {\n            var axisModel = ecModel.getComponent('parallelAxis', axisIndex);\n            var axisDim = coordSysDims[index];\n            axisMap.set(axisDim, axisModel);\n\n            if (isCategory(axisModel) && result.firstCategoryDimIndex == null) {\n                categoryAxisMap.set(axisDim, axisModel);\n                result.firstCategoryDimIndex = index;\n            }\n        });\n    }\n};\n\nfunction isCategory(axisModel) {\n    return axisModel.get('type') === 'category';\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n// Avoid typo.\nvar SOURCE_FORMAT_ORIGINAL = 'original';\nvar SOURCE_FORMAT_ARRAY_ROWS = 'arrayRows';\nvar SOURCE_FORMAT_OBJECT_ROWS = 'objectRows';\nvar SOURCE_FORMAT_KEYED_COLUMNS = 'keyedColumns';\nvar SOURCE_FORMAT_UNKNOWN = 'unknown';\n// ??? CHANGE A NAME\nvar SOURCE_FORMAT_TYPED_ARRAY = 'typedArray';\n\nvar SERIES_LAYOUT_BY_COLUMN = 'column';\nvar SERIES_LAYOUT_BY_ROW = 'row';\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * [sourceFormat]\n *\n * + \"original\":\n * This format is only used in series.data, where\n * itemStyle can be specified in data item.\n *\n * + \"arrayRows\":\n * [\n *     ['product', 'score', 'amount'],\n *     ['Matcha Latte', 89.3, 95.8],\n *     ['Milk Tea', 92.1, 89.4],\n *     ['Cheese Cocoa', 94.4, 91.2],\n *     ['Walnut Brownie', 85.4, 76.9]\n * ]\n *\n * + \"objectRows\":\n * [\n *     {product: 'Matcha Latte', score: 89.3, amount: 95.8},\n *     {product: 'Milk Tea', score: 92.1, amount: 89.4},\n *     {product: 'Cheese Cocoa', score: 94.4, amount: 91.2},\n *     {product: 'Walnut Brownie', score: 85.4, amount: 76.9}\n * ]\n *\n * + \"keyedColumns\":\n * {\n *     'product': ['Matcha Latte', 'Milk Tea', 'Cheese Cocoa', 'Walnut Brownie'],\n *     'count': [823, 235, 1042, 988],\n *     'score': [95.8, 81.4, 91.2, 76.9]\n * }\n *\n * + \"typedArray\"\n *\n * + \"unknown\"\n */\n\n/**\n * @constructor\n * @param {Object} fields\n * @param {string} fields.sourceFormat\n * @param {Array|Object} fields.fromDataset\n * @param {Array|Object} [fields.data]\n * @param {string} [seriesLayoutBy='column']\n * @param {Array.<Object|string>} [dimensionsDefine]\n * @param {Objet|HashMap} [encodeDefine]\n * @param {number} [startIndex=0]\n * @param {number} [dimensionsDetectCount]\n */\nfunction Source(fields) {\n\n    /**\n     * @type {boolean}\n     */\n    this.fromDataset = fields.fromDataset;\n\n    /**\n     * Not null/undefined.\n     * @type {Array|Object}\n     */\n    this.data = fields.data || (\n        fields.sourceFormat === SOURCE_FORMAT_KEYED_COLUMNS ? {} : []\n    );\n\n    /**\n     * See also \"detectSourceFormat\".\n     * Not null/undefined.\n     * @type {string}\n     */\n    this.sourceFormat = fields.sourceFormat || SOURCE_FORMAT_UNKNOWN;\n\n    /**\n     * 'row' or 'column'\n     * Not null/undefined.\n     * @type {string} seriesLayoutBy\n     */\n    this.seriesLayoutBy = fields.seriesLayoutBy || SERIES_LAYOUT_BY_COLUMN;\n\n    /**\n     * dimensions definition in option.\n     * can be null/undefined.\n     * @type {Array.<Object|string>}\n     */\n    this.dimensionsDefine = fields.dimensionsDefine;\n\n    /**\n     * encode definition in option.\n     * can be null/undefined.\n     * @type {Objet|HashMap}\n     */\n    this.encodeDefine = fields.encodeDefine && createHashMap(fields.encodeDefine);\n\n    /**\n     * Not null/undefined, uint.\n     * @type {number}\n     */\n    this.startIndex = fields.startIndex || 0;\n\n    /**\n     * Can be null/undefined (when unknown), uint.\n     * @type {number}\n     */\n    this.dimensionsDetectCount = fields.dimensionsDetectCount;\n}\n\n/**\n * Wrap original series data for some compatibility cases.\n */\nSource.seriesDataToSource = function (data) {\n    return new Source({\n        data: data,\n        sourceFormat: isTypedArray(data)\n            ? SOURCE_FORMAT_TYPED_ARRAY\n            : SOURCE_FORMAT_ORIGINAL,\n        fromDataset: false\n    });\n};\n\nenableClassCheck(Source);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar inner$3 = makeInner();\n\n/**\n * @see {module:echarts/data/Source}\n * @param {module:echarts/component/dataset/DatasetModel} datasetModel\n * @return {string} sourceFormat\n */\nfunction detectSourceFormat(datasetModel) {\n    var data = datasetModel.option.source;\n    var sourceFormat = SOURCE_FORMAT_UNKNOWN;\n\n    if (isTypedArray(data)) {\n        sourceFormat = SOURCE_FORMAT_TYPED_ARRAY;\n    }\n    else if (isArray(data)) {\n        // FIXME Whether tolerate null in top level array?\n        if (data.length === 0) {\n            sourceFormat = SOURCE_FORMAT_ARRAY_ROWS;\n        }\n\n        for (var i = 0, len = data.length; i < len; i++) {\n            var item = data[i];\n\n            if (item == null) {\n                continue;\n            }\n            else if (isArray(item)) {\n                sourceFormat = SOURCE_FORMAT_ARRAY_ROWS;\n                break;\n            }\n            else if (isObject$1(item)) {\n                sourceFormat = SOURCE_FORMAT_OBJECT_ROWS;\n                break;\n            }\n        }\n    }\n    else if (isObject$1(data)) {\n        for (var key in data) {\n            if (data.hasOwnProperty(key) && isArrayLike(data[key])) {\n                sourceFormat = SOURCE_FORMAT_KEYED_COLUMNS;\n                break;\n            }\n        }\n    }\n    else if (data != null) {\n        throw new Error('Invalid data');\n    }\n\n    inner$3(datasetModel).sourceFormat = sourceFormat;\n}\n\n/**\n * [Scenarios]:\n * (1) Provide source data directly:\n *     series: {\n *         encode: {...},\n *         dimensions: [...]\n *         seriesLayoutBy: 'row',\n *         data: [[...]]\n *     }\n * (2) Refer to datasetModel.\n *     series: [{\n *         encode: {...}\n *         // Ignore datasetIndex means `datasetIndex: 0`\n *         // and the dimensions defination in dataset is used\n *     }, {\n *         encode: {...},\n *         seriesLayoutBy: 'column',\n *         datasetIndex: 1\n *     }]\n *\n * Get data from series itself or datset.\n * @return {module:echarts/data/Source} source\n */\nfunction getSource(seriesModel) {\n    return inner$3(seriesModel).source;\n}\n\n/**\n * MUST be called before mergeOption of all series.\n * @param {module:echarts/model/Global} ecModel\n */\nfunction resetSourceDefaulter(ecModel) {\n    // `datasetMap` is used to make default encode.\n    inner$3(ecModel).datasetMap = createHashMap();\n}\n\n/**\n * [Caution]:\n * MUST be called after series option merged and\n * before \"series.getInitailData()\" called.\n *\n * [The rule of making default encode]:\n * Category axis (if exists) alway map to the first dimension.\n * Each other axis occupies a subsequent dimension.\n *\n * [Why make default encode]:\n * Simplify the typing of encode in option, avoiding the case like that:\n * series: [{encode: {x: 0, y: 1}}, {encode: {x: 0, y: 2}}, {encode: {x: 0, y: 3}}],\n * where the \"y\" have to be manually typed as \"1, 2, 3, ...\".\n *\n * @param {module:echarts/model/Series} seriesModel\n */\nfunction prepareSource(seriesModel) {\n    var seriesOption = seriesModel.option;\n\n    var data = seriesOption.data;\n    var sourceFormat = isTypedArray(data)\n        ? SOURCE_FORMAT_TYPED_ARRAY : SOURCE_FORMAT_ORIGINAL;\n    var fromDataset = false;\n\n    var seriesLayoutBy = seriesOption.seriesLayoutBy;\n    var sourceHeader = seriesOption.sourceHeader;\n    var dimensionsDefine = seriesOption.dimensions;\n\n    var datasetModel = getDatasetModel(seriesModel);\n    if (datasetModel) {\n        var datasetOption = datasetModel.option;\n\n        data = datasetOption.source;\n        sourceFormat = inner$3(datasetModel).sourceFormat;\n        fromDataset = true;\n\n        // These settings from series has higher priority.\n        seriesLayoutBy = seriesLayoutBy || datasetOption.seriesLayoutBy;\n        sourceHeader == null && (sourceHeader = datasetOption.sourceHeader);\n        dimensionsDefine = dimensionsDefine || datasetOption.dimensions;\n    }\n\n    var completeResult = completeBySourceData(\n        data, sourceFormat, seriesLayoutBy, sourceHeader, dimensionsDefine\n    );\n\n    // Note: dataset option does not have `encode`.\n    var encodeDefine = seriesOption.encode;\n    if (!encodeDefine && datasetModel) {\n        encodeDefine = makeDefaultEncode(\n            seriesModel, datasetModel, data, sourceFormat, seriesLayoutBy, completeResult\n        );\n    }\n\n    inner$3(seriesModel).source = new Source({\n        data: data,\n        fromDataset: fromDataset,\n        seriesLayoutBy: seriesLayoutBy,\n        sourceFormat: sourceFormat,\n        dimensionsDefine: completeResult.dimensionsDefine,\n        startIndex: completeResult.startIndex,\n        dimensionsDetectCount: completeResult.dimensionsDetectCount,\n        encodeDefine: encodeDefine\n    });\n}\n\n// return {startIndex, dimensionsDefine, dimensionsCount}\nfunction completeBySourceData(data, sourceFormat, seriesLayoutBy, sourceHeader, dimensionsDefine) {\n    if (!data) {\n        return {dimensionsDefine: normalizeDimensionsDefine(dimensionsDefine)};\n    }\n\n    var dimensionsDetectCount;\n    var startIndex;\n    var findPotentialName;\n\n    if (sourceFormat === SOURCE_FORMAT_ARRAY_ROWS) {\n        // Rule: Most of the first line are string: it is header.\n        // Caution: consider a line with 5 string and 1 number,\n        // it still can not be sure it is a head, because the\n        // 5 string may be 5 values of category columns.\n        if (sourceHeader === 'auto' || sourceHeader == null) {\n            arrayRowsTravelFirst(function (val) {\n                // '-' is regarded as null/undefined.\n                if (val != null && val !== '-') {\n                    if (isString(val)) {\n                        startIndex == null && (startIndex = 1);\n                    }\n                    else {\n                        startIndex = 0;\n                    }\n                }\n            // 10 is an experience number, avoid long loop.\n            }, seriesLayoutBy, data, 10);\n        }\n        else {\n            startIndex = sourceHeader ? 1 : 0;\n        }\n\n        if (!dimensionsDefine && startIndex === 1) {\n            dimensionsDefine = [];\n            arrayRowsTravelFirst(function (val, index) {\n                dimensionsDefine[index] = val != null ? val : '';\n            }, seriesLayoutBy, data);\n        }\n\n        dimensionsDetectCount = dimensionsDefine\n            ? dimensionsDefine.length\n            : seriesLayoutBy === SERIES_LAYOUT_BY_ROW\n            ? data.length\n            : data[0]\n            ? data[0].length\n            : null;\n    }\n    else if (sourceFormat === SOURCE_FORMAT_OBJECT_ROWS) {\n        if (!dimensionsDefine) {\n            dimensionsDefine = objectRowsCollectDimensions(data);\n            findPotentialName = true;\n        }\n    }\n    else if (sourceFormat === SOURCE_FORMAT_KEYED_COLUMNS) {\n        if (!dimensionsDefine) {\n            dimensionsDefine = [];\n            findPotentialName = true;\n            each$1(data, function (colArr, key) {\n                dimensionsDefine.push(key);\n            });\n        }\n    }\n    else if (sourceFormat === SOURCE_FORMAT_ORIGINAL) {\n        var value0 = getDataItemValue(data[0]);\n        dimensionsDetectCount = isArray(value0) && value0.length || 1;\n    }\n    else if (sourceFormat === SOURCE_FORMAT_TYPED_ARRAY) {\n        if (__DEV__) {\n            assert$1(!!dimensionsDefine, 'dimensions must be given if data is TypedArray.');\n        }\n    }\n\n    var potentialNameDimIndex;\n    if (findPotentialName) {\n        each$1(dimensionsDefine, function (dim, idx) {\n            if ((isObject$1(dim) ? dim.name : dim) === 'name') {\n                potentialNameDimIndex = idx;\n            }\n        });\n    }\n\n    return {\n        startIndex: startIndex,\n        dimensionsDefine: normalizeDimensionsDefine(dimensionsDefine),\n        dimensionsDetectCount: dimensionsDetectCount,\n        potentialNameDimIndex: potentialNameDimIndex\n        // TODO: potentialIdDimIdx\n    };\n}\n\n// Consider dimensions defined like ['A', 'price', 'B', 'price', 'C', 'price'],\n// which is reasonable. But dimension name is duplicated.\n// Returns undefined or an array contains only object without null/undefiend or string.\nfunction normalizeDimensionsDefine(dimensionsDefine) {\n    if (!dimensionsDefine) {\n        // The meaning of null/undefined is different from empty array.\n        return;\n    }\n    var nameMap = createHashMap();\n    return map(dimensionsDefine, function (item, index) {\n        item = extend({}, isObject$1(item) ? item : {name: item});\n\n        // User can set null in dimensions.\n        // We dont auto specify name, othewise a given name may\n        // cause it be refered unexpectedly.\n        if (item.name == null) {\n            return item;\n        }\n\n        // Also consider number form like 2012.\n        item.name += '';\n        // User may also specify displayName.\n        // displayName will always exists except user not\n        // specified or dim name is not specified or detected.\n        // (A auto generated dim name will not be used as\n        // displayName).\n        if (item.displayName == null) {\n            item.displayName = item.name;\n        }\n\n        var exist = nameMap.get(item.name);\n        if (!exist) {\n            nameMap.set(item.name, {count: 1});\n        }\n        else {\n            item.name += '-' + exist.count++;\n        }\n\n        return item;\n    });\n}\n\nfunction arrayRowsTravelFirst(cb, seriesLayoutBy, data, maxLoop) {\n    maxLoop == null && (maxLoop = Infinity);\n    if (seriesLayoutBy === SERIES_LAYOUT_BY_ROW) {\n        for (var i = 0; i < data.length && i < maxLoop; i++) {\n            cb(data[i] ? data[i][0] : null, i);\n        }\n    }\n    else {\n        var value0 = data[0] || [];\n        for (var i = 0; i < value0.length && i < maxLoop; i++) {\n            cb(value0[i], i);\n        }\n    }\n}\n\nfunction objectRowsCollectDimensions(data) {\n    var firstIndex = 0;\n    var obj;\n    while (firstIndex < data.length && !(obj = data[firstIndex++])) {} // jshint ignore: line\n    if (obj) {\n        var dimensions = [];\n        each$1(obj, function (value, key) {\n            dimensions.push(key);\n        });\n        return dimensions;\n    }\n}\n\n// ??? TODO merge to completedimensions, where also has\n// default encode making logic. And the default rule\n// should depends on series? consider 'map'.\nfunction makeDefaultEncode(\n    seriesModel, datasetModel, data, sourceFormat, seriesLayoutBy, completeResult\n) {\n    var coordSysDefine = getCoordSysDefineBySeries(seriesModel);\n    var encode = {};\n    // var encodeTooltip = [];\n    // var encodeLabel = [];\n    var encodeItemName = [];\n    var encodeSeriesName = [];\n    var seriesType = seriesModel.subType;\n\n    // ??? TODO refactor: provide by series itself.\n    // Consider the case: 'map' series is based on geo coordSys,\n    // 'graph', 'heatmap' can be based on cartesian. But can not\n    // give default rule simply here.\n    var nSeriesMap = createHashMap(['pie', 'map', 'funnel']);\n    var cSeriesMap = createHashMap([\n        'line', 'bar', 'pictorialBar', 'scatter', 'effectScatter', 'candlestick', 'boxplot'\n    ]);\n\n    // Usually in this case series will use the first data\n    // dimension as the \"value\" dimension, or other default\n    // processes respectively.\n    if (coordSysDefine && cSeriesMap.get(seriesType) != null) {\n        var ecModel = seriesModel.ecModel;\n        var datasetMap = inner$3(ecModel).datasetMap;\n        var key = datasetModel.uid + '_' + seriesLayoutBy;\n        var datasetRecord = datasetMap.get(key)\n            || datasetMap.set(key, {categoryWayDim: 1, valueWayDim: 0});\n\n        // TODO\n        // Auto detect first time axis and do arrangement.\n        each$1(coordSysDefine.coordSysDims, function (coordDim) {\n            // In value way.\n            if (coordSysDefine.firstCategoryDimIndex == null) {\n                var dataDim = datasetRecord.valueWayDim++;\n                encode[coordDim] = dataDim;\n\n                // ??? TODO give a better default series name rule?\n                // especially when encode x y specified.\n                // consider: when mutiple series share one dimension\n                // category axis, series name should better use\n                // the other dimsion name. On the other hand, use\n                // both dimensions name.\n\n                encodeSeriesName.push(dataDim);\n                // encodeTooltip.push(dataDim);\n                // encodeLabel.push(dataDim);\n            }\n            // In category way, category axis.\n            else if (coordSysDefine.categoryAxisMap.get(coordDim)) {\n                encode[coordDim] = 0;\n                encodeItemName.push(0);\n            }\n            // In category way, non-category axis.\n            else {\n                var dataDim = datasetRecord.categoryWayDim++;\n                encode[coordDim] = dataDim;\n                // encodeTooltip.push(dataDim);\n                // encodeLabel.push(dataDim);\n                encodeSeriesName.push(dataDim);\n            }\n        });\n    }\n    // Do not make a complex rule! Hard to code maintain and not necessary.\n    // ??? TODO refactor: provide by series itself.\n    // [{name: ..., value: ...}, ...] like:\n    else if (nSeriesMap.get(seriesType) != null) {\n        // Find the first not ordinal. (5 is an experience value)\n        var firstNotOrdinal;\n        for (var i = 0; i < 5 && firstNotOrdinal == null; i++) {\n            if (!doGuessOrdinal(\n                data, sourceFormat, seriesLayoutBy,\n                completeResult.dimensionsDefine, completeResult.startIndex, i\n            )) {\n                firstNotOrdinal = i;\n            }\n        }\n        if (firstNotOrdinal != null) {\n            encode.value = firstNotOrdinal;\n            var nameDimIndex = completeResult.potentialNameDimIndex\n                || Math.max(firstNotOrdinal - 1, 0);\n            // By default, label use itemName in charts.\n            // So we dont set encodeLabel here.\n            encodeSeriesName.push(nameDimIndex);\n            encodeItemName.push(nameDimIndex);\n            // encodeTooltip.push(firstNotOrdinal);\n        }\n    }\n\n    // encodeTooltip.length && (encode.tooltip = encodeTooltip);\n    // encodeLabel.length && (encode.label = encodeLabel);\n    encodeItemName.length && (encode.itemName = encodeItemName);\n    encodeSeriesName.length && (encode.seriesName = encodeSeriesName);\n\n    return encode;\n}\n\n/**\n * If return null/undefined, indicate that should not use datasetModel.\n */\nfunction getDatasetModel(seriesModel) {\n    var option = seriesModel.option;\n    // Caution: consider the scenario:\n    // A dataset is declared and a series is not expected to use the dataset,\n    // and at the beginning `setOption({series: { noData })` (just prepare other\n    // option but no data), then `setOption({series: {data: [...]}); In this case,\n    // the user should set an empty array to avoid that dataset is used by default.\n    var thisData = option.data;\n    if (!thisData) {\n        return seriesModel.ecModel.getComponent('dataset', option.datasetIndex || 0);\n    }\n}\n\n/**\n * The rule should not be complex, otherwise user might not\n * be able to known where the data is wrong.\n * The code is ugly, but how to make it neat?\n *\n * @param {module:echars/data/Source} source\n * @param {number} dimIndex\n * @return {boolean} Whether ordinal.\n */\nfunction guessOrdinal(source, dimIndex) {\n    return doGuessOrdinal(\n        source.data,\n        source.sourceFormat,\n        source.seriesLayoutBy,\n        source.dimensionsDefine,\n        source.startIndex,\n        dimIndex\n    );\n}\n\n// dimIndex may be overflow source data.\nfunction doGuessOrdinal(\n    data, sourceFormat, seriesLayoutBy, dimensionsDefine, startIndex, dimIndex\n) {\n    var result;\n    // Experience value.\n    var maxLoop = 5;\n\n    if (isTypedArray(data)) {\n        return false;\n    }\n\n    // When sourceType is 'objectRows' or 'keyedColumns', dimensionsDefine\n    // always exists in source.\n    var dimName;\n    if (dimensionsDefine) {\n        dimName = dimensionsDefine[dimIndex];\n        dimName = isObject$1(dimName) ? dimName.name : dimName;\n    }\n\n    if (sourceFormat === SOURCE_FORMAT_ARRAY_ROWS) {\n        if (seriesLayoutBy === SERIES_LAYOUT_BY_ROW) {\n            var sample = data[dimIndex];\n            for (var i = 0; i < (sample || []).length && i < maxLoop; i++) {\n                if ((result = detectValue(sample[startIndex + i])) != null) {\n                    return result;\n                }\n            }\n        }\n        else {\n            for (var i = 0; i < data.length && i < maxLoop; i++) {\n                var row = data[startIndex + i];\n                if (row && (result = detectValue(row[dimIndex])) != null) {\n                    return result;\n                }\n            }\n        }\n    }\n    else if (sourceFormat === SOURCE_FORMAT_OBJECT_ROWS) {\n        if (!dimName) {\n            return;\n        }\n        for (var i = 0; i < data.length && i < maxLoop; i++) {\n            var item = data[i];\n            if (item && (result = detectValue(item[dimName])) != null) {\n                return result;\n            }\n        }\n    }\n    else if (sourceFormat === SOURCE_FORMAT_KEYED_COLUMNS) {\n        if (!dimName) {\n            return;\n        }\n        var sample = data[dimName];\n        if (!sample || isTypedArray(sample)) {\n            return false;\n        }\n        for (var i = 0; i < sample.length && i < maxLoop; i++) {\n            if ((result = detectValue(sample[i])) != null) {\n                return result;\n            }\n        }\n    }\n    else if (sourceFormat === SOURCE_FORMAT_ORIGINAL) {\n        for (var i = 0; i < data.length && i < maxLoop; i++) {\n            var item = data[i];\n            var val = getDataItemValue(item);\n            if (!isArray(val)) {\n                return false;\n            }\n            if ((result = detectValue(val[dimIndex])) != null) {\n                return result;\n            }\n        }\n    }\n\n    function detectValue(val) {\n        // Consider usage convenience, '1', '2' will be treated as \"number\".\n        // `isFinit('')` get `true`.\n        if (val != null && isFinite(val) && val !== '') {\n            return false;\n        }\n        else if (isString(val) && val !== '-') {\n            return true;\n        }\n    }\n\n    return false;\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * ECharts global model\n *\n * @module {echarts/model/Global}\n */\n\n\n/**\n * Caution: If the mechanism should be changed some day, these cases\n * should be considered:\n *\n * (1) In `merge option` mode, if using the same option to call `setOption`\n * many times, the result should be the same (try our best to ensure that).\n * (2) In `merge option` mode, if a component has no id/name specified, it\n * will be merged by index, and the result sequence of the components is\n * consistent to the original sequence.\n * (3) `reset` feature (in toolbox). Find detailed info in comments about\n * `mergeOption` in module:echarts/model/OptionManager.\n */\n\nvar OPTION_INNER_KEY = '\\0_ec_inner';\n\n/**\n * @alias module:echarts/model/Global\n *\n * @param {Object} option\n * @param {module:echarts/model/Model} parentModel\n * @param {Object} theme\n */\nvar GlobalModel = Model.extend({\n\n    init: function (option, parentModel, theme, optionManager) {\n        theme = theme || {};\n\n        this.option = null; // Mark as not initialized.\n\n        /**\n         * @type {module:echarts/model/Model}\n         * @private\n         */\n        this._theme = new Model(theme);\n\n        /**\n         * @type {module:echarts/model/OptionManager}\n         */\n        this._optionManager = optionManager;\n    },\n\n    setOption: function (option, optionPreprocessorFuncs) {\n        assert$1(\n            !(OPTION_INNER_KEY in option),\n            'please use chart.getOption()'\n        );\n\n        this._optionManager.setOption(option, optionPreprocessorFuncs);\n\n        this.resetOption(null);\n    },\n\n    /**\n     * @param {string} type null/undefined: reset all.\n     *                      'recreate': force recreate all.\n     *                      'timeline': only reset timeline option\n     *                      'media': only reset media query option\n     * @return {boolean} Whether option changed.\n     */\n    resetOption: function (type) {\n        var optionChanged = false;\n        var optionManager = this._optionManager;\n\n        if (!type || type === 'recreate') {\n            var baseOption = optionManager.mountOption(type === 'recreate');\n\n            if (!this.option || type === 'recreate') {\n                initBase.call(this, baseOption);\n            }\n            else {\n                this.restoreData();\n                this.mergeOption(baseOption);\n            }\n            optionChanged = true;\n        }\n\n        if (type === 'timeline' || type === 'media') {\n            this.restoreData();\n        }\n\n        if (!type || type === 'recreate' || type === 'timeline') {\n            var timelineOption = optionManager.getTimelineOption(this);\n            timelineOption && (this.mergeOption(timelineOption), optionChanged = true);\n        }\n\n        if (!type || type === 'recreate' || type === 'media') {\n            var mediaOptions = optionManager.getMediaOption(this, this._api);\n            if (mediaOptions.length) {\n                each$1(mediaOptions, function (mediaOption) {\n                    this.mergeOption(mediaOption, optionChanged = true);\n                }, this);\n            }\n        }\n\n        return optionChanged;\n    },\n\n    /**\n     * @protected\n     */\n    mergeOption: function (newOption) {\n        var option = this.option;\n        var componentsMap = this._componentsMap;\n        var newCptTypes = [];\n\n        resetSourceDefaulter(this);\n\n        // If no component class, merge directly.\n        // For example: color, animaiton options, etc.\n        each$1(newOption, function (componentOption, mainType) {\n            if (componentOption == null) {\n                return;\n            }\n\n            if (!ComponentModel.hasClass(mainType)) {\n                // globalSettingTask.dirty();\n                option[mainType] = option[mainType] == null\n                    ? clone(componentOption)\n                    : merge(option[mainType], componentOption, true);\n            }\n            else if (mainType) {\n                newCptTypes.push(mainType);\n            }\n        });\n\n        ComponentModel.topologicalTravel(\n            newCptTypes, ComponentModel.getAllClassMainTypes(), visitComponent, this\n        );\n\n        function visitComponent(mainType, dependencies) {\n\n            var newCptOptionList = normalizeToArray(newOption[mainType]);\n\n            var mapResult = mappingToExists(\n                componentsMap.get(mainType), newCptOptionList\n            );\n\n            makeIdAndName(mapResult);\n\n            // Set mainType and complete subType.\n            each$1(mapResult, function (item, index) {\n                var opt = item.option;\n                if (isObject$1(opt)) {\n                    item.keyInfo.mainType = mainType;\n                    item.keyInfo.subType = determineSubType(mainType, opt, item.exist);\n                }\n            });\n\n            var dependentModels = getComponentsByTypes(\n                componentsMap, dependencies\n            );\n\n            option[mainType] = [];\n            componentsMap.set(mainType, []);\n\n            each$1(mapResult, function (resultItem, index) {\n                var componentModel = resultItem.exist;\n                var newCptOption = resultItem.option;\n\n                assert$1(\n                    isObject$1(newCptOption) || componentModel,\n                    'Empty component definition'\n                );\n\n                // Consider where is no new option and should be merged using {},\n                // see removeEdgeAndAdd in topologicalTravel and\n                // ComponentModel.getAllClassMainTypes.\n                if (!newCptOption) {\n                    componentModel.mergeOption({}, this);\n                    componentModel.optionUpdated({}, false);\n                }\n                else {\n                    var ComponentModelClass = ComponentModel.getClass(\n                        mainType, resultItem.keyInfo.subType, true\n                    );\n\n                    if (componentModel && componentModel instanceof ComponentModelClass) {\n                        componentModel.name = resultItem.keyInfo.name;\n                        // componentModel.settingTask && componentModel.settingTask.dirty();\n                        componentModel.mergeOption(newCptOption, this);\n                        componentModel.optionUpdated(newCptOption, false);\n                    }\n                    else {\n                        // PENDING Global as parent ?\n                        var extraOpt = extend(\n                            {\n                                dependentModels: dependentModels,\n                                componentIndex: index\n                            },\n                            resultItem.keyInfo\n                        );\n                        componentModel = new ComponentModelClass(\n                            newCptOption, this, this, extraOpt\n                        );\n                        extend(componentModel, extraOpt);\n                        componentModel.init(newCptOption, this, this, extraOpt);\n\n                        // Call optionUpdated after init.\n                        // newCptOption has been used as componentModel.option\n                        // and may be merged with theme and default, so pass null\n                        // to avoid confusion.\n                        componentModel.optionUpdated(null, true);\n                    }\n                }\n\n                componentsMap.get(mainType)[index] = componentModel;\n                option[mainType][index] = componentModel.option;\n            }, this);\n\n            // Backup series for filtering.\n            if (mainType === 'series') {\n                createSeriesIndices(this, componentsMap.get('series'));\n            }\n        }\n\n        this._seriesIndicesMap = createHashMap(\n            this._seriesIndices = this._seriesIndices || []\n        );\n    },\n\n    /**\n     * Get option for output (cloned option and inner info removed)\n     * @public\n     * @return {Object}\n     */\n    getOption: function () {\n        var option = clone(this.option);\n\n        each$1(option, function (opts, mainType) {\n            if (ComponentModel.hasClass(mainType)) {\n                var opts = normalizeToArray(opts);\n                for (var i = opts.length - 1; i >= 0; i--) {\n                    // Remove options with inner id.\n                    if (isIdInner(opts[i])) {\n                        opts.splice(i, 1);\n                    }\n                }\n                option[mainType] = opts;\n            }\n        });\n\n        delete option[OPTION_INNER_KEY];\n\n        return option;\n    },\n\n    /**\n     * @return {module:echarts/model/Model}\n     */\n    getTheme: function () {\n        return this._theme;\n    },\n\n    /**\n     * @param {string} mainType\n     * @param {number} [idx=0]\n     * @return {module:echarts/model/Component}\n     */\n    getComponent: function (mainType, idx) {\n        var list = this._componentsMap.get(mainType);\n        if (list) {\n            return list[idx || 0];\n        }\n    },\n\n    /**\n     * If none of index and id and name used, return all components with mainType.\n     * @param {Object} condition\n     * @param {string} condition.mainType\n     * @param {string} [condition.subType] If ignore, only query by mainType\n     * @param {number|Array.<number>} [condition.index] Either input index or id or name.\n     * @param {string|Array.<string>} [condition.id] Either input index or id or name.\n     * @param {string|Array.<string>} [condition.name] Either input index or id or name.\n     * @return {Array.<module:echarts/model/Component>}\n     */\n    queryComponents: function (condition) {\n        var mainType = condition.mainType;\n        if (!mainType) {\n            return [];\n        }\n\n        var index = condition.index;\n        var id = condition.id;\n        var name = condition.name;\n\n        var cpts = this._componentsMap.get(mainType);\n\n        if (!cpts || !cpts.length) {\n            return [];\n        }\n\n        var result;\n\n        if (index != null) {\n            if (!isArray(index)) {\n                index = [index];\n            }\n            result = filter(map(index, function (idx) {\n                return cpts[idx];\n            }), function (val) {\n                return !!val;\n            });\n        }\n        else if (id != null) {\n            var isIdArray = isArray(id);\n            result = filter(cpts, function (cpt) {\n                return (isIdArray && indexOf(id, cpt.id) >= 0)\n                    || (!isIdArray && cpt.id === id);\n            });\n        }\n        else if (name != null) {\n            var isNameArray = isArray(name);\n            result = filter(cpts, function (cpt) {\n                return (isNameArray && indexOf(name, cpt.name) >= 0)\n                    || (!isNameArray && cpt.name === name);\n            });\n        }\n        else {\n            // Return all components with mainType\n            result = cpts.slice();\n        }\n\n        return filterBySubType(result, condition);\n    },\n\n    /**\n     * The interface is different from queryComponents,\n     * which is convenient for inner usage.\n     *\n     * @usage\n     * var result = findComponents(\n     *     {mainType: 'dataZoom', query: {dataZoomId: 'abc'}}\n     * );\n     * var result = findComponents(\n     *     {mainType: 'series', subType: 'pie', query: {seriesName: 'uio'}}\n     * );\n     * var result = findComponents(\n     *     {mainType: 'series'},\n     *     function (model, index) {...}\n     * );\n     * // result like [component0, componnet1, ...]\n     *\n     * @param {Object} condition\n     * @param {string} condition.mainType Mandatory.\n     * @param {string} [condition.subType] Optional.\n     * @param {Object} [condition.query] like {xxxIndex, xxxId, xxxName},\n     *        where xxx is mainType.\n     *        If query attribute is null/undefined or has no index/id/name,\n     *        do not filtering by query conditions, which is convenient for\n     *        no-payload situations or when target of action is global.\n     * @param {Function} [condition.filter] parameter: component, return boolean.\n     * @return {Array.<module:echarts/model/Component>}\n     */\n    findComponents: function (condition) {\n        var query = condition.query;\n        var mainType = condition.mainType;\n\n        var queryCond = getQueryCond(query);\n        var result = queryCond\n            ? this.queryComponents(queryCond)\n            : this._componentsMap.get(mainType);\n\n        return doFilter(filterBySubType(result, condition));\n\n        function getQueryCond(q) {\n            var indexAttr = mainType + 'Index';\n            var idAttr = mainType + 'Id';\n            var nameAttr = mainType + 'Name';\n            return q && (\n                    q[indexAttr] != null\n                    || q[idAttr] != null\n                    || q[nameAttr] != null\n                )\n                ? {\n                    mainType: mainType,\n                    // subType will be filtered finally.\n                    index: q[indexAttr],\n                    id: q[idAttr],\n                    name: q[nameAttr]\n                }\n                : null;\n        }\n\n        function doFilter(res) {\n            return condition.filter\n                    ? filter(res, condition.filter)\n                    : res;\n        }\n    },\n\n    /**\n     * @usage\n     * eachComponent('legend', function (legendModel, index) {\n     *     ...\n     * });\n     * eachComponent(function (componentType, model, index) {\n     *     // componentType does not include subType\n     *     // (componentType is 'xxx' but not 'xxx.aa')\n     * });\n     * eachComponent(\n     *     {mainType: 'dataZoom', query: {dataZoomId: 'abc'}},\n     *     function (model, index) {...}\n     * );\n     * eachComponent(\n     *     {mainType: 'series', subType: 'pie', query: {seriesName: 'uio'}},\n     *     function (model, index) {...}\n     * );\n     *\n     * @param {string|Object=} mainType When mainType is object, the definition\n     *                                  is the same as the method 'findComponents'.\n     * @param {Function} cb\n     * @param {*} context\n     */\n    eachComponent: function (mainType, cb, context) {\n        var componentsMap = this._componentsMap;\n\n        if (typeof mainType === 'function') {\n            context = cb;\n            cb = mainType;\n            componentsMap.each(function (components, componentType) {\n                each$1(components, function (component, index) {\n                    cb.call(context, componentType, component, index);\n                });\n            });\n        }\n        else if (isString(mainType)) {\n            each$1(componentsMap.get(mainType), cb, context);\n        }\n        else if (isObject$1(mainType)) {\n            var queryResult = this.findComponents(mainType);\n            each$1(queryResult, cb, context);\n        }\n    },\n\n    /**\n     * @param {string} name\n     * @return {Array.<module:echarts/model/Series>}\n     */\n    getSeriesByName: function (name) {\n        var series = this._componentsMap.get('series');\n        return filter(series, function (oneSeries) {\n            return oneSeries.name === name;\n        });\n    },\n\n    /**\n     * @param {number} seriesIndex\n     * @return {module:echarts/model/Series}\n     */\n    getSeriesByIndex: function (seriesIndex) {\n        return this._componentsMap.get('series')[seriesIndex];\n    },\n\n    /**\n     * Get series list before filtered by type.\n     * FIXME: rename to getRawSeriesByType?\n     *\n     * @param {string} subType\n     * @return {Array.<module:echarts/model/Series>}\n     */\n    getSeriesByType: function (subType) {\n        var series = this._componentsMap.get('series');\n        return filter(series, function (oneSeries) {\n            return oneSeries.subType === subType;\n        });\n    },\n\n    /**\n     * @return {Array.<module:echarts/model/Series>}\n     */\n    getSeries: function () {\n        return this._componentsMap.get('series').slice();\n    },\n\n    /**\n     * @return {number}\n     */\n    getSeriesCount: function () {\n        return this._componentsMap.get('series').length;\n    },\n\n    /**\n     * After filtering, series may be different\n     * frome raw series.\n     *\n     * @param {Function} cb\n     * @param {*} context\n     */\n    eachSeries: function (cb, context) {\n        assertSeriesInitialized(this);\n        each$1(this._seriesIndices, function (rawSeriesIndex) {\n            var series = this._componentsMap.get('series')[rawSeriesIndex];\n            cb.call(context, series, rawSeriesIndex);\n        }, this);\n    },\n\n    /**\n     * Iterate raw series before filtered.\n     *\n     * @param {Function} cb\n     * @param {*} context\n     */\n    eachRawSeries: function (cb, context) {\n        each$1(this._componentsMap.get('series'), cb, context);\n    },\n\n    /**\n     * After filtering, series may be different.\n     * frome raw series.\n     *\n     * @param {string} subType.\n     * @param {Function} cb\n     * @param {*} context\n     */\n    eachSeriesByType: function (subType, cb, context) {\n        assertSeriesInitialized(this);\n        each$1(this._seriesIndices, function (rawSeriesIndex) {\n            var series = this._componentsMap.get('series')[rawSeriesIndex];\n            if (series.subType === subType) {\n                cb.call(context, series, rawSeriesIndex);\n            }\n        }, this);\n    },\n\n    /**\n     * Iterate raw series before filtered of given type.\n     *\n     * @parma {string} subType\n     * @param {Function} cb\n     * @param {*} context\n     */\n    eachRawSeriesByType: function (subType, cb, context) {\n        return each$1(this.getSeriesByType(subType), cb, context);\n    },\n\n    /**\n     * @param {module:echarts/model/Series} seriesModel\n     */\n    isSeriesFiltered: function (seriesModel) {\n        assertSeriesInitialized(this);\n        return this._seriesIndicesMap.get(seriesModel.componentIndex) == null;\n    },\n\n    /**\n     * @return {Array.<number>}\n     */\n    getCurrentSeriesIndices: function () {\n        return (this._seriesIndices || []).slice();\n    },\n\n    /**\n     * @param {Function} cb\n     * @param {*} context\n     */\n    filterSeries: function (cb, context) {\n        assertSeriesInitialized(this);\n        var filteredSeries = filter(\n            this._componentsMap.get('series'), cb, context\n        );\n        createSeriesIndices(this, filteredSeries);\n    },\n\n    restoreData: function (payload) {\n        var componentsMap = this._componentsMap;\n\n        createSeriesIndices(this, componentsMap.get('series'));\n\n        var componentTypes = [];\n        componentsMap.each(function (components, componentType) {\n            componentTypes.push(componentType);\n        });\n\n        ComponentModel.topologicalTravel(\n            componentTypes,\n            ComponentModel.getAllClassMainTypes(),\n            function (componentType, dependencies) {\n                each$1(componentsMap.get(componentType), function (component) {\n                    (componentType !== 'series' || !isNotTargetSeries(component, payload))\n                        && component.restoreData();\n                });\n            }\n        );\n    }\n\n});\n\nfunction isNotTargetSeries(seriesModel, payload) {\n    if (payload) {\n        var index = payload.seiresIndex;\n        var id = payload.seriesId;\n        var name = payload.seriesName;\n        return (index != null && seriesModel.componentIndex !== index)\n            || (id != null && seriesModel.id !== id)\n            || (name != null && seriesModel.name !== name);\n    }\n}\n\n/**\n * @inner\n */\nfunction mergeTheme(option, theme) {\n    // PENDING\n    // NOT use `colorLayer` in theme if option has `color`\n    var notMergeColorLayer = option.color && !option.colorLayer;\n\n    each$1(theme, function (themeItem, name) {\n        if (name === 'colorLayer' && notMergeColorLayer) {\n            return;\n        }\n        // 如果有 component model 则把具体的 merge 逻辑交给该 model 处理\n        if (!ComponentModel.hasClass(name)) {\n            if (typeof themeItem === 'object') {\n                option[name] = !option[name]\n                    ? clone(themeItem)\n                    : merge(option[name], themeItem, false);\n            }\n            else {\n                if (option[name] == null) {\n                    option[name] = themeItem;\n                }\n            }\n        }\n    });\n}\n\nfunction initBase(baseOption) {\n    baseOption = baseOption;\n\n    // Using OPTION_INNER_KEY to mark that this option can not be used outside,\n    // i.e. `chart.setOption(chart.getModel().option);` is forbiden.\n    this.option = {};\n    this.option[OPTION_INNER_KEY] = 1;\n\n    /**\n     * Init with series: [], in case of calling findSeries method\n     * before series initialized.\n     * @type {Object.<string, Array.<module:echarts/model/Model>>}\n     * @private\n     */\n    this._componentsMap = createHashMap({series: []});\n\n    /**\n     * Mapping between filtered series list and raw series list.\n     * key: filtered series indices, value: raw series indices.\n     * @type {Array.<nubmer>}\n     * @private\n     */\n    this._seriesIndices;\n\n    this._seriesIndicesMap;\n\n    mergeTheme(baseOption, this._theme.option);\n\n    // TODO Needs clone when merging to the unexisted property\n    merge(baseOption, globalDefault, false);\n\n    this.mergeOption(baseOption);\n}\n\n/**\n * @inner\n * @param {Array.<string>|string} types model types\n * @return {Object} key: {string} type, value: {Array.<Object>} models\n */\nfunction getComponentsByTypes(componentsMap, types) {\n    if (!isArray(types)) {\n        types = types ? [types] : [];\n    }\n\n    var ret = {};\n    each$1(types, function (type) {\n        ret[type] = (componentsMap.get(type) || []).slice();\n    });\n\n    return ret;\n}\n\n/**\n * @inner\n */\nfunction determineSubType(mainType, newCptOption, existComponent) {\n    var subType = newCptOption.type\n        ? newCptOption.type\n        : existComponent\n        ? existComponent.subType\n        // Use determineSubType only when there is no existComponent.\n        : ComponentModel.determineSubType(mainType, newCptOption);\n\n    // tooltip, markline, markpoint may always has no subType\n    return subType;\n}\n\n/**\n * @inner\n */\nfunction createSeriesIndices(ecModel, seriesModels) {\n    ecModel._seriesIndicesMap = createHashMap(\n        ecModel._seriesIndices = map(seriesModels, function (series) {\n            return series.componentIndex;\n        }) || []\n    );\n}\n\n/**\n * @inner\n */\nfunction filterBySubType(components, condition) {\n    // Using hasOwnProperty for restrict. Consider\n    // subType is undefined in user payload.\n    return condition.hasOwnProperty('subType')\n        ? filter(components, function (cpt) {\n            return cpt.subType === condition.subType;\n        })\n        : components;\n}\n\n/**\n * @inner\n */\nfunction assertSeriesInitialized(ecModel) {\n    // Components that use _seriesIndices should depends on series component,\n    // which make sure that their initialization is after series.\n    if (__DEV__) {\n        if (!ecModel._seriesIndices) {\n            throw new Error('Option should contains series.');\n        }\n    }\n}\n\nmixin(GlobalModel, colorPaletteMixin);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar echartsAPIList = [\n    'getDom', 'getZr', 'getWidth', 'getHeight', 'getDevicePixelRatio', 'dispatchAction', 'isDisposed',\n    'on', 'off', 'getDataURL', 'getConnectedDataURL', 'getModel', 'getOption',\n    'getViewOfComponentModel', 'getViewOfSeriesModel'\n];\n// And `getCoordinateSystems` and `getComponentByElement` will be injected in echarts.js\n\nfunction ExtensionAPI(chartInstance) {\n    each$1(echartsAPIList, function (name) {\n        this[name] = bind(chartInstance[name], chartInstance);\n    }, this);\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar coordinateSystemCreators = {};\n\nfunction CoordinateSystemManager() {\n\n    this._coordinateSystems = [];\n}\n\nCoordinateSystemManager.prototype = {\n\n    constructor: CoordinateSystemManager,\n\n    create: function (ecModel, api) {\n        var coordinateSystems = [];\n        each$1(coordinateSystemCreators, function (creater, type) {\n            var list = creater.create(ecModel, api);\n            coordinateSystems = coordinateSystems.concat(list || []);\n        });\n\n        this._coordinateSystems = coordinateSystems;\n    },\n\n    update: function (ecModel, api) {\n        each$1(this._coordinateSystems, function (coordSys) {\n            coordSys.update && coordSys.update(ecModel, api);\n        });\n    },\n\n    getCoordinateSystems: function () {\n        return this._coordinateSystems.slice();\n    }\n};\n\nCoordinateSystemManager.register = function (type, coordinateSystemCreator) {\n    coordinateSystemCreators[type] = coordinateSystemCreator;\n};\n\nCoordinateSystemManager.get = function (type) {\n    return coordinateSystemCreators[type];\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * ECharts option manager\n *\n * @module {echarts/model/OptionManager}\n */\n\n\nvar each$4 = each$1;\nvar clone$3 = clone;\nvar map$1 = map;\nvar merge$1 = merge;\n\nvar QUERY_REG = /^(min|max)?(.+)$/;\n\n/**\n * TERM EXPLANATIONS:\n *\n * [option]:\n *\n *     An object that contains definitions of components. For example:\n *     var option = {\n *         title: {...},\n *         legend: {...},\n *         visualMap: {...},\n *         series: [\n *             {data: [...]},\n *             {data: [...]},\n *             ...\n *         ]\n *     };\n *\n * [rawOption]:\n *\n *     An object input to echarts.setOption. 'rawOption' may be an\n *     'option', or may be an object contains multi-options. For example:\n *     var option = {\n *         baseOption: {\n *             title: {...},\n *             legend: {...},\n *             series: [\n *                 {data: [...]},\n *                 {data: [...]},\n *                 ...\n *             ]\n *         },\n *         timeline: {...},\n *         options: [\n *             {title: {...}, series: {data: [...]}},\n *             {title: {...}, series: {data: [...]}},\n *             ...\n *         ],\n *         media: [\n *             {\n *                 query: {maxWidth: 320},\n *                 option: {series: {x: 20}, visualMap: {show: false}}\n *             },\n *             {\n *                 query: {minWidth: 320, maxWidth: 720},\n *                 option: {series: {x: 500}, visualMap: {show: true}}\n *             },\n *             {\n *                 option: {series: {x: 1200}, visualMap: {show: true}}\n *             }\n *         ]\n *     };\n *\n * @alias module:echarts/model/OptionManager\n * @param {module:echarts/ExtensionAPI} api\n */\nfunction OptionManager(api) {\n\n    /**\n     * @private\n     * @type {module:echarts/ExtensionAPI}\n     */\n    this._api = api;\n\n    /**\n     * @private\n     * @type {Array.<number>}\n     */\n    this._timelineOptions = [];\n\n    /**\n     * @private\n     * @type {Array.<Object>}\n     */\n    this._mediaList = [];\n\n    /**\n     * @private\n     * @type {Object}\n     */\n    this._mediaDefault;\n\n    /**\n     * -1, means default.\n     * empty means no media.\n     * @private\n     * @type {Array.<number>}\n     */\n    this._currentMediaIndices = [];\n\n    /**\n     * @private\n     * @type {Object}\n     */\n    this._optionBackup;\n\n    /**\n     * @private\n     * @type {Object}\n     */\n    this._newBaseOption;\n}\n\n// timeline.notMerge is not supported in ec3. Firstly there is rearly\n// case that notMerge is needed. Secondly supporting 'notMerge' requires\n// rawOption cloned and backuped when timeline changed, which does no\n// good to performance. What's more, that both timeline and setOption\n// method supply 'notMerge' brings complex and some problems.\n// Consider this case:\n// (step1) chart.setOption({timeline: {notMerge: false}, ...}, false);\n// (step2) chart.setOption({timeline: {notMerge: true}, ...}, false);\n\nOptionManager.prototype = {\n\n    constructor: OptionManager,\n\n    /**\n     * @public\n     * @param {Object} rawOption Raw option.\n     * @param {module:echarts/model/Global} ecModel\n     * @param {Array.<Function>} optionPreprocessorFuncs\n     * @return {Object} Init option\n     */\n    setOption: function (rawOption, optionPreprocessorFuncs) {\n        if (rawOption) {\n            // That set dat primitive is dangerous if user reuse the data when setOption again.\n            each$1(normalizeToArray(rawOption.series), function (series) {\n                series && series.data && isTypedArray(series.data) && setAsPrimitive(series.data);\n            });\n        }\n\n        // Caution: some series modify option data, if do not clone,\n        // it should ensure that the repeat modify correctly\n        // (create a new object when modify itself).\n        rawOption = clone$3(rawOption);\n\n        // FIXME\n        // 如果 timeline options 或者 media 中设置了某个属性，而baseOption中没有设置，则进行警告。\n\n        var oldOptionBackup = this._optionBackup;\n        var newParsedOption = parseRawOption.call(\n            this, rawOption, optionPreprocessorFuncs, !oldOptionBackup\n        );\n        this._newBaseOption = newParsedOption.baseOption;\n\n        // For setOption at second time (using merge mode);\n        if (oldOptionBackup) {\n            // Only baseOption can be merged.\n            mergeOption(oldOptionBackup.baseOption, newParsedOption.baseOption);\n\n            // For simplicity, timeline options and media options do not support merge,\n            // that is, if you `setOption` twice and both has timeline options, the latter\n            // timeline opitons will not be merged to the formers, but just substitude them.\n            if (newParsedOption.timelineOptions.length) {\n                oldOptionBackup.timelineOptions = newParsedOption.timelineOptions;\n            }\n            if (newParsedOption.mediaList.length) {\n                oldOptionBackup.mediaList = newParsedOption.mediaList;\n            }\n            if (newParsedOption.mediaDefault) {\n                oldOptionBackup.mediaDefault = newParsedOption.mediaDefault;\n            }\n        }\n        else {\n            this._optionBackup = newParsedOption;\n        }\n    },\n\n    /**\n     * @param {boolean} isRecreate\n     * @return {Object}\n     */\n    mountOption: function (isRecreate) {\n        var optionBackup = this._optionBackup;\n\n        // TODO\n        // 如果没有reset功能则不clone。\n\n        this._timelineOptions = map$1(optionBackup.timelineOptions, clone$3);\n        this._mediaList = map$1(optionBackup.mediaList, clone$3);\n        this._mediaDefault = clone$3(optionBackup.mediaDefault);\n        this._currentMediaIndices = [];\n\n        return clone$3(isRecreate\n            // this._optionBackup.baseOption, which is created at the first `setOption`\n            // called, and is merged into every new option by inner method `mergeOption`\n            // each time `setOption` called, can be only used in `isRecreate`, because\n            // its reliability is under suspicion. In other cases option merge is\n            // performed by `model.mergeOption`.\n            ? optionBackup.baseOption : this._newBaseOption\n        );\n    },\n\n    /**\n     * @param {module:echarts/model/Global} ecModel\n     * @return {Object}\n     */\n    getTimelineOption: function (ecModel) {\n        var option;\n        var timelineOptions = this._timelineOptions;\n\n        if (timelineOptions.length) {\n            // getTimelineOption can only be called after ecModel inited,\n            // so we can get currentIndex from timelineModel.\n            var timelineModel = ecModel.getComponent('timeline');\n            if (timelineModel) {\n                option = clone$3(\n                    timelineOptions[timelineModel.getCurrentIndex()],\n                    true\n                );\n            }\n        }\n\n        return option;\n    },\n\n    /**\n     * @param {module:echarts/model/Global} ecModel\n     * @return {Array.<Object>}\n     */\n    getMediaOption: function (ecModel) {\n        var ecWidth = this._api.getWidth();\n        var ecHeight = this._api.getHeight();\n        var mediaList = this._mediaList;\n        var mediaDefault = this._mediaDefault;\n        var indices = [];\n        var result = [];\n\n        // No media defined.\n        if (!mediaList.length && !mediaDefault) {\n            return result;\n        }\n\n        // Multi media may be applied, the latter defined media has higher priority.\n        for (var i = 0, len = mediaList.length; i < len; i++) {\n            if (applyMediaQuery(mediaList[i].query, ecWidth, ecHeight)) {\n                indices.push(i);\n            }\n        }\n\n        // FIXME\n        // 是否mediaDefault应该强制用户设置，否则可能修改不能回归。\n        if (!indices.length && mediaDefault) {\n            indices = [-1];\n        }\n\n        if (indices.length && !indicesEquals(indices, this._currentMediaIndices)) {\n            result = map$1(indices, function (index) {\n                return clone$3(\n                    index === -1 ? mediaDefault.option : mediaList[index].option\n                );\n            });\n        }\n        // Otherwise return nothing.\n\n        this._currentMediaIndices = indices;\n\n        return result;\n    }\n};\n\nfunction parseRawOption(rawOption, optionPreprocessorFuncs, isNew) {\n    var timelineOptions = [];\n    var mediaList = [];\n    var mediaDefault;\n    var baseOption;\n\n    // Compatible with ec2.\n    var timelineOpt = rawOption.timeline;\n\n    if (rawOption.baseOption) {\n        baseOption = rawOption.baseOption;\n    }\n\n    // For timeline\n    if (timelineOpt || rawOption.options) {\n        baseOption = baseOption || {};\n        timelineOptions = (rawOption.options || []).slice();\n    }\n\n    // For media query\n    if (rawOption.media) {\n        baseOption = baseOption || {};\n        var media = rawOption.media;\n        each$4(media, function (singleMedia) {\n            if (singleMedia && singleMedia.option) {\n                if (singleMedia.query) {\n                    mediaList.push(singleMedia);\n                }\n                else if (!mediaDefault) {\n                    // Use the first media default.\n                    mediaDefault = singleMedia;\n                }\n            }\n        });\n    }\n\n    // For normal option\n    if (!baseOption) {\n        baseOption = rawOption;\n    }\n\n    // Set timelineOpt to baseOption in ec3,\n    // which is convenient for merge option.\n    if (!baseOption.timeline) {\n        baseOption.timeline = timelineOpt;\n    }\n\n    // Preprocess.\n    each$4([baseOption].concat(timelineOptions)\n        .concat(map(mediaList, function (media) {\n            return media.option;\n        })),\n        function (option) {\n            each$4(optionPreprocessorFuncs, function (preProcess) {\n                preProcess(option, isNew);\n            });\n        }\n    );\n\n    return {\n        baseOption: baseOption,\n        timelineOptions: timelineOptions,\n        mediaDefault: mediaDefault,\n        mediaList: mediaList\n    };\n}\n\n/**\n * @see <http://www.w3.org/TR/css3-mediaqueries/#media1>\n * Support: width, height, aspectRatio\n * Can use max or min as prefix.\n */\nfunction applyMediaQuery(query, ecWidth, ecHeight) {\n    var realMap = {\n        width: ecWidth,\n        height: ecHeight,\n        aspectratio: ecWidth / ecHeight // lowser case for convenientce.\n    };\n\n    var applicatable = true;\n\n    each$1(query, function (value, attr) {\n        var matched = attr.match(QUERY_REG);\n\n        if (!matched || !matched[1] || !matched[2]) {\n            return;\n        }\n\n        var operator = matched[1];\n        var realAttr = matched[2].toLowerCase();\n\n        if (!compare(realMap[realAttr], value, operator)) {\n            applicatable = false;\n        }\n    });\n\n    return applicatable;\n}\n\nfunction compare(real, expect, operator) {\n    if (operator === 'min') {\n        return real >= expect;\n    }\n    else if (operator === 'max') {\n        return real <= expect;\n    }\n    else { // Equals\n        return real === expect;\n    }\n}\n\nfunction indicesEquals(indices1, indices2) {\n    // indices is always order by asc and has only finite number.\n    return indices1.join(',') === indices2.join(',');\n}\n\n/**\n * Consider case:\n * `chart.setOption(opt1);`\n * Then user do some interaction like dataZoom, dataView changing.\n * `chart.setOption(opt2);`\n * Then user press 'reset button' in toolbox.\n *\n * After doing that all of the interaction effects should be reset, the\n * chart should be the same as the result of invoke\n * `chart.setOption(opt1); chart.setOption(opt2);`.\n *\n * Although it is not able ensure that\n * `chart.setOption(opt1); chart.setOption(opt2);` is equivalents to\n * `chart.setOption(merge(opt1, opt2));` exactly,\n * this might be the only simple way to implement that feature.\n *\n * MEMO: We've considered some other approaches:\n * 1. Each model handle its self restoration but not uniform treatment.\n *     (Too complex in logic and error-prone)\n * 2. Use a shadow ecModel. (Performace expensive)\n */\nfunction mergeOption(oldOption, newOption) {\n    newOption = newOption || {};\n\n    each$4(newOption, function (newCptOpt, mainType) {\n        if (newCptOpt == null) {\n            return;\n        }\n\n        var oldCptOpt = oldOption[mainType];\n\n        if (!ComponentModel.hasClass(mainType)) {\n            oldOption[mainType] = merge$1(oldCptOpt, newCptOpt, true);\n        }\n        else {\n            newCptOpt = normalizeToArray(newCptOpt);\n            oldCptOpt = normalizeToArray(oldCptOpt);\n\n            var mapResult = mappingToExists(oldCptOpt, newCptOpt);\n\n            oldOption[mainType] = map$1(mapResult, function (item) {\n                return (item.option && item.exist)\n                    ? merge$1(item.exist, item.option, true)\n                    : (item.exist || item.option);\n            });\n        }\n    });\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar each$5 = each$1;\nvar isObject$3 = isObject$1;\n\nvar POSSIBLE_STYLES = [\n    'areaStyle', 'lineStyle', 'nodeStyle', 'linkStyle',\n    'chordStyle', 'label', 'labelLine'\n];\n\nfunction compatEC2ItemStyle(opt) {\n    var itemStyleOpt = opt && opt.itemStyle;\n    if (!itemStyleOpt) {\n        return;\n    }\n    for (var i = 0, len = POSSIBLE_STYLES.length; i < len; i++) {\n        var styleName = POSSIBLE_STYLES[i];\n        var normalItemStyleOpt = itemStyleOpt.normal;\n        var emphasisItemStyleOpt = itemStyleOpt.emphasis;\n        if (normalItemStyleOpt && normalItemStyleOpt[styleName]) {\n            opt[styleName] = opt[styleName] || {};\n            if (!opt[styleName].normal) {\n                opt[styleName].normal = normalItemStyleOpt[styleName];\n            }\n            else {\n                merge(opt[styleName].normal, normalItemStyleOpt[styleName]);\n            }\n            normalItemStyleOpt[styleName] = null;\n        }\n        if (emphasisItemStyleOpt && emphasisItemStyleOpt[styleName]) {\n            opt[styleName] = opt[styleName] || {};\n            if (!opt[styleName].emphasis) {\n                opt[styleName].emphasis = emphasisItemStyleOpt[styleName];\n            }\n            else {\n                merge(opt[styleName].emphasis, emphasisItemStyleOpt[styleName]);\n            }\n            emphasisItemStyleOpt[styleName] = null;\n        }\n    }\n}\n\nfunction convertNormalEmphasis(opt, optType, useExtend) {\n    if (opt && opt[optType] && (opt[optType].normal || opt[optType].emphasis)) {\n        var normalOpt = opt[optType].normal;\n        var emphasisOpt = opt[optType].emphasis;\n\n        if (normalOpt) {\n            // Timeline controlStyle has other properties besides normal and emphasis\n            if (useExtend) {\n                opt[optType].normal = opt[optType].emphasis = null;\n                defaults(opt[optType], normalOpt);\n            }\n            else {\n                opt[optType] = normalOpt;\n            }\n        }\n        if (emphasisOpt) {\n            opt.emphasis = opt.emphasis || {};\n            opt.emphasis[optType] = emphasisOpt;\n        }\n    }\n}\n\nfunction removeEC3NormalStatus(opt) {\n    convertNormalEmphasis(opt, 'itemStyle');\n    convertNormalEmphasis(opt, 'lineStyle');\n    convertNormalEmphasis(opt, 'areaStyle');\n    convertNormalEmphasis(opt, 'label');\n    convertNormalEmphasis(opt, 'labelLine');\n    // treemap\n    convertNormalEmphasis(opt, 'upperLabel');\n    // graph\n    convertNormalEmphasis(opt, 'edgeLabel');\n}\n\nfunction compatTextStyle(opt, propName) {\n    // Check whether is not object (string\\null\\undefined ...)\n    var labelOptSingle = isObject$3(opt) && opt[propName];\n    var textStyle = isObject$3(labelOptSingle) && labelOptSingle.textStyle;\n    if (textStyle) {\n        for (var i = 0, len = TEXT_STYLE_OPTIONS.length; i < len; i++) {\n            var propName = TEXT_STYLE_OPTIONS[i];\n            if (textStyle.hasOwnProperty(propName)) {\n                labelOptSingle[propName] = textStyle[propName];\n            }\n        }\n    }\n}\n\nfunction compatEC3CommonStyles(opt) {\n    if (opt) {\n        removeEC3NormalStatus(opt);\n        compatTextStyle(opt, 'label');\n        opt.emphasis && compatTextStyle(opt.emphasis, 'label');\n    }\n}\n\nfunction processSeries(seriesOpt) {\n    if (!isObject$3(seriesOpt)) {\n        return;\n    }\n\n    compatEC2ItemStyle(seriesOpt);\n    removeEC3NormalStatus(seriesOpt);\n\n    compatTextStyle(seriesOpt, 'label');\n    // treemap\n    compatTextStyle(seriesOpt, 'upperLabel');\n    // graph\n    compatTextStyle(seriesOpt, 'edgeLabel');\n    if (seriesOpt.emphasis) {\n        compatTextStyle(seriesOpt.emphasis, 'label');\n        // treemap\n        compatTextStyle(seriesOpt.emphasis, 'upperLabel');\n        // graph\n        compatTextStyle(seriesOpt.emphasis, 'edgeLabel');\n    }\n\n    var markPoint = seriesOpt.markPoint;\n    if (markPoint) {\n        compatEC2ItemStyle(markPoint);\n        compatEC3CommonStyles(markPoint);\n    }\n\n    var markLine = seriesOpt.markLine;\n    if (markLine) {\n        compatEC2ItemStyle(markLine);\n        compatEC3CommonStyles(markLine);\n    }\n\n    var markArea = seriesOpt.markArea;\n    if (markArea) {\n        compatEC3CommonStyles(markArea);\n    }\n\n    var data = seriesOpt.data;\n\n    // Break with ec3: if `setOption` again, there may be no `type` in option,\n    // then the backward compat based on option type will not be performed.\n\n    if (seriesOpt.type === 'graph') {\n        data = data || seriesOpt.nodes;\n        var edgeData = seriesOpt.links || seriesOpt.edges;\n        if (edgeData && !isTypedArray(edgeData)) {\n            for (var i = 0; i < edgeData.length; i++) {\n                compatEC3CommonStyles(edgeData[i]);\n            }\n        }\n        each$1(seriesOpt.categories, function (opt) {\n            removeEC3NormalStatus(opt);\n        });\n    }\n\n    if (data && !isTypedArray(data)) {\n        for (var i = 0; i < data.length; i++) {\n            compatEC3CommonStyles(data[i]);\n        }\n    }\n\n    // mark point data\n    var markPoint = seriesOpt.markPoint;\n    if (markPoint && markPoint.data) {\n        var mpData = markPoint.data;\n        for (var i = 0; i < mpData.length; i++) {\n            compatEC3CommonStyles(mpData[i]);\n        }\n    }\n    // mark line data\n    var markLine = seriesOpt.markLine;\n    if (markLine && markLine.data) {\n        var mlData = markLine.data;\n        for (var i = 0; i < mlData.length; i++) {\n            if (isArray(mlData[i])) {\n                compatEC3CommonStyles(mlData[i][0]);\n                compatEC3CommonStyles(mlData[i][1]);\n            }\n            else {\n                compatEC3CommonStyles(mlData[i]);\n            }\n        }\n    }\n\n    // Series\n    if (seriesOpt.type === 'gauge') {\n        compatTextStyle(seriesOpt, 'axisLabel');\n        compatTextStyle(seriesOpt, 'title');\n        compatTextStyle(seriesOpt, 'detail');\n    }\n    else if (seriesOpt.type === 'treemap') {\n        convertNormalEmphasis(seriesOpt.breadcrumb, 'itemStyle');\n        each$1(seriesOpt.levels, function (opt) {\n            removeEC3NormalStatus(opt);\n        });\n    }\n    else if (seriesOpt.type === 'tree') {\n        removeEC3NormalStatus(seriesOpt.leaves);\n    }\n    // sunburst starts from ec4, so it does not need to compat levels.\n}\n\nfunction toArr(o) {\n    return isArray(o) ? o : o ? [o] : [];\n}\n\nfunction toObj(o) {\n    return (isArray(o) ? o[0] : o) || {};\n}\n\nvar compatStyle = function (option, isTheme) {\n    each$5(toArr(option.series), function (seriesOpt) {\n        isObject$3(seriesOpt) && processSeries(seriesOpt);\n    });\n\n    var axes = ['xAxis', 'yAxis', 'radiusAxis', 'angleAxis', 'singleAxis', 'parallelAxis', 'radar'];\n    isTheme && axes.push('valueAxis', 'categoryAxis', 'logAxis', 'timeAxis');\n\n    each$5(\n        axes,\n        function (axisName) {\n            each$5(toArr(option[axisName]), function (axisOpt) {\n                if (axisOpt) {\n                    compatTextStyle(axisOpt, 'axisLabel');\n                    compatTextStyle(axisOpt.axisPointer, 'label');\n                }\n            });\n        }\n    );\n\n    each$5(toArr(option.parallel), function (parallelOpt) {\n        var parallelAxisDefault = parallelOpt && parallelOpt.parallelAxisDefault;\n        compatTextStyle(parallelAxisDefault, 'axisLabel');\n        compatTextStyle(parallelAxisDefault && parallelAxisDefault.axisPointer, 'label');\n    });\n\n    each$5(toArr(option.calendar), function (calendarOpt) {\n        convertNormalEmphasis(calendarOpt, 'itemStyle');\n        compatTextStyle(calendarOpt, 'dayLabel');\n        compatTextStyle(calendarOpt, 'monthLabel');\n        compatTextStyle(calendarOpt, 'yearLabel');\n    });\n\n    // radar.name.textStyle\n    each$5(toArr(option.radar), function (radarOpt) {\n        compatTextStyle(radarOpt, 'name');\n    });\n\n    each$5(toArr(option.geo), function (geoOpt) {\n        if (isObject$3(geoOpt)) {\n            compatEC3CommonStyles(geoOpt);\n            each$5(toArr(geoOpt.regions), function (regionObj) {\n                compatEC3CommonStyles(regionObj);\n            });\n        }\n    });\n\n    each$5(toArr(option.timeline), function (timelineOpt) {\n        compatEC3CommonStyles(timelineOpt);\n        convertNormalEmphasis(timelineOpt, 'label');\n        convertNormalEmphasis(timelineOpt, 'itemStyle');\n        convertNormalEmphasis(timelineOpt, 'controlStyle', true);\n\n        var data = timelineOpt.data;\n        isArray(data) && each$1(data, function (item) {\n            if (isObject$1(item)) {\n                convertNormalEmphasis(item, 'label');\n                convertNormalEmphasis(item, 'itemStyle');\n            }\n        });\n    });\n\n    each$5(toArr(option.toolbox), function (toolboxOpt) {\n        convertNormalEmphasis(toolboxOpt, 'iconStyle');\n        each$5(toolboxOpt.feature, function (featureOpt) {\n            convertNormalEmphasis(featureOpt, 'iconStyle');\n        });\n    });\n\n    compatTextStyle(toObj(option.axisPointer), 'label');\n    compatTextStyle(toObj(option.tooltip).axisPointer, 'label');\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n// Compatitable with 2.0\n\nfunction get(opt, path) {\n    path = path.split(',');\n    var obj = opt;\n    for (var i = 0; i < path.length; i++) {\n        obj = obj && obj[path[i]];\n        if (obj == null) {\n            break;\n        }\n    }\n    return obj;\n}\n\nfunction set$1(opt, path, val, overwrite) {\n    path = path.split(',');\n    var obj = opt;\n    var key;\n    for (var i = 0; i < path.length - 1; i++) {\n        key = path[i];\n        if (obj[key] == null) {\n            obj[key] = {};\n        }\n        obj = obj[key];\n    }\n    if (overwrite || obj[path[i]] == null) {\n        obj[path[i]] = val;\n    }\n}\n\nfunction compatLayoutProperties(option) {\n    each$1(LAYOUT_PROPERTIES, function (prop) {\n        if (prop[0] in option && !(prop[1] in option)) {\n            option[prop[1]] = option[prop[0]];\n        }\n    });\n}\n\nvar LAYOUT_PROPERTIES = [\n    ['x', 'left'], ['y', 'top'], ['x2', 'right'], ['y2', 'bottom']\n];\n\nvar COMPATITABLE_COMPONENTS = [\n    'grid', 'geo', 'parallel', 'legend', 'toolbox', 'title', 'visualMap', 'dataZoom', 'timeline'\n];\n\nvar backwardCompat = function (option, isTheme) {\n    compatStyle(option, isTheme);\n\n    // Make sure series array for model initialization.\n    option.series = normalizeToArray(option.series);\n\n    each$1(option.series, function (seriesOpt) {\n        if (!isObject$1(seriesOpt)) {\n            return;\n        }\n\n        var seriesType = seriesOpt.type;\n\n        if (seriesType === 'pie' || seriesType === 'gauge') {\n            if (seriesOpt.clockWise != null) {\n                seriesOpt.clockwise = seriesOpt.clockWise;\n            }\n        }\n        if (seriesType === 'gauge') {\n            var pointerColor = get(seriesOpt, 'pointer.color');\n            pointerColor != null\n                && set$1(seriesOpt, 'itemStyle.color', pointerColor);\n        }\n\n        compatLayoutProperties(seriesOpt);\n    });\n\n    // dataRange has changed to visualMap\n    if (option.dataRange) {\n        option.visualMap = option.dataRange;\n    }\n\n    each$1(COMPATITABLE_COMPONENTS, function (componentName) {\n        var options = option[componentName];\n        if (options) {\n            if (!isArray(options)) {\n                options = [options];\n            }\n            each$1(options, function (option) {\n                compatLayoutProperties(option);\n            });\n        }\n    });\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n// (1) [Caution]: the logic is correct based on the premises:\n//     data processing stage is blocked in stream.\n//     See <module:echarts/stream/Scheduler#performDataProcessorTasks>\n// (2) Only register once when import repeatly.\n//     Should be executed before after series filtered and before stack calculation.\nvar dataStack = function (ecModel) {\n    var stackInfoMap = createHashMap();\n    ecModel.eachSeries(function (seriesModel) {\n        var stack = seriesModel.get('stack');\n        // Compatibal: when `stack` is set as '', do not stack.\n        if (stack) {\n            var stackInfoList = stackInfoMap.get(stack) || stackInfoMap.set(stack, []);\n            var data = seriesModel.getData();\n\n            var stackInfo = {\n                // Used for calculate axis extent automatically.\n                stackResultDimension: data.getCalculationInfo('stackResultDimension'),\n                stackedOverDimension: data.getCalculationInfo('stackedOverDimension'),\n                stackedDimension: data.getCalculationInfo('stackedDimension'),\n                stackedByDimension: data.getCalculationInfo('stackedByDimension'),\n                isStackedByIndex: data.getCalculationInfo('isStackedByIndex'),\n                data: data,\n                seriesModel: seriesModel\n            };\n\n            // If stacked on axis that do not support data stack.\n            if (!stackInfo.stackedDimension\n                || !(stackInfo.isStackedByIndex || stackInfo.stackedByDimension)\n            ) {\n                return;\n            }\n\n            stackInfoList.length && data.setCalculationInfo(\n                'stackedOnSeries', stackInfoList[stackInfoList.length - 1].seriesModel\n            );\n\n            stackInfoList.push(stackInfo);\n        }\n    });\n\n    stackInfoMap.each(calculateStack);\n};\n\nfunction calculateStack(stackInfoList) {\n    each$1(stackInfoList, function (targetStackInfo, idxInStack) {\n        var resultVal = [];\n        var resultNaN = [NaN, NaN];\n        var dims = [targetStackInfo.stackResultDimension, targetStackInfo.stackedOverDimension];\n        var targetData = targetStackInfo.data;\n        var isStackedByIndex = targetStackInfo.isStackedByIndex;\n\n        // Should not write on raw data, because stack series model list changes\n        // depending on legend selection.\n        var newData = targetData.map(dims, function (v0, v1, dataIndex) {\n            var sum = targetData.get(targetStackInfo.stackedDimension, dataIndex);\n\n            // Consider `connectNulls` of line area, if value is NaN, stackedOver\n            // should also be NaN, to draw a appropriate belt area.\n            if (isNaN(sum)) {\n                return resultNaN;\n            }\n\n            var byValue;\n            var stackedDataRawIndex;\n\n            if (isStackedByIndex) {\n                stackedDataRawIndex = targetData.getRawIndex(dataIndex);\n            }\n            else {\n                byValue = targetData.get(targetStackInfo.stackedByDimension, dataIndex);\n            }\n\n            // If stackOver is NaN, chart view will render point on value start.\n            var stackedOver = NaN;\n\n            for (var j = idxInStack - 1; j >= 0; j--) {\n                var stackInfo = stackInfoList[j];\n\n                // Has been optimized by inverted indices on `stackedByDimension`.\n                if (!isStackedByIndex) {\n                    stackedDataRawIndex = stackInfo.data.rawIndexOf(stackInfo.stackedByDimension, byValue);\n                }\n\n                if (stackedDataRawIndex >= 0) {\n                    var val = stackInfo.data.getByRawIndex(stackInfo.stackResultDimension, stackedDataRawIndex);\n\n                    // Considering positive stack, negative stack and empty data\n                    if ((sum >= 0 && val > 0) // Positive stack\n                        || (sum <= 0 && val < 0) // Negative stack\n                    ) {\n                        sum += val;\n                        stackedOver = val;\n                        break;\n                    }\n                }\n            }\n\n            resultVal[0] = sum;\n            resultVal[1] = stackedOver;\n\n            return resultVal;\n        });\n\n        targetData.hostModel.setData(newData);\n        // Update for consequent calculation\n        targetStackInfo.data = newData;\n    });\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n// TODO\n// ??? refactor? check the outer usage of data provider.\n// merge with defaultDimValueGetter?\n\n/**\n * If normal array used, mutable chunk size is supported.\n * If typed array used, chunk size must be fixed.\n */\nfunction DefaultDataProvider(source, dimSize) {\n    if (!Source.isInstance(source)) {\n        source = Source.seriesDataToSource(source);\n    }\n    this._source = source;\n\n    var data = this._data = source.data;\n    var sourceFormat = source.sourceFormat;\n\n    // Typed array. TODO IE10+?\n    if (sourceFormat === SOURCE_FORMAT_TYPED_ARRAY) {\n        if (__DEV__) {\n            if (dimSize == null) {\n                throw new Error('Typed array data must specify dimension size');\n            }\n        }\n        this._offset = 0;\n        this._dimSize = dimSize;\n        this._data = data;\n    }\n\n    var methods = providerMethods[\n        sourceFormat === SOURCE_FORMAT_ARRAY_ROWS\n        ? sourceFormat + '_' + source.seriesLayoutBy\n        : sourceFormat\n    ];\n\n    if (__DEV__) {\n        assert$1(methods, 'Invalide sourceFormat: ' + sourceFormat);\n    }\n\n    extend(this, methods);\n}\n\nvar providerProto = DefaultDataProvider.prototype;\n// If data is pure without style configuration\nproviderProto.pure = false;\n// If data is persistent and will not be released after use.\nproviderProto.persistent = true;\n\n// ???! FIXME legacy data provider do not has method getSource\nproviderProto.getSource = function () {\n    return this._source;\n};\n\nvar providerMethods = {\n\n    'arrayRows_column': {\n        pure: true,\n        count: function () {\n            return Math.max(0, this._data.length - this._source.startIndex);\n        },\n        getItem: function (idx) {\n            return this._data[idx + this._source.startIndex];\n        },\n        appendData: appendDataSimply\n    },\n\n    'arrayRows_row': {\n        pure: true,\n        count: function () {\n            var row = this._data[0];\n            return row ? Math.max(0, row.length - this._source.startIndex) : 0;\n        },\n        getItem: function (idx) {\n            idx += this._source.startIndex;\n            var item = [];\n            var data = this._data;\n            for (var i = 0; i < data.length; i++) {\n                var row = data[i];\n                item.push(row ? row[idx] : null);\n            }\n            return item;\n        },\n        appendData: function () {\n            throw new Error('Do not support appendData when set seriesLayoutBy: \"row\".');\n        }\n    },\n\n    'objectRows': {\n        pure: true,\n        count: countSimply,\n        getItem: getItemSimply,\n        appendData: appendDataSimply\n    },\n\n    'keyedColumns': {\n        pure: true,\n        count: function () {\n            var dimName = this._source.dimensionsDefine[0].name;\n            var col = this._data[dimName];\n            return col ? col.length : 0;\n        },\n        getItem: function (idx) {\n            var item = [];\n            var dims = this._source.dimensionsDefine;\n            for (var i = 0; i < dims.length; i++) {\n                var col = this._data[dims[i].name];\n                item.push(col ? col[idx] : null);\n            }\n            return item;\n        },\n        appendData: function (newData) {\n            var data = this._data;\n            each$1(newData, function (newCol, key) {\n                var oldCol = data[key] || (data[key] = []);\n                for (var i = 0; i < (newCol || []).length; i++) {\n                    oldCol.push(newCol[i]);\n                }\n            });\n        }\n    },\n\n    'original': {\n        count: countSimply,\n        getItem: getItemSimply,\n        appendData: appendDataSimply\n    },\n\n    'typedArray': {\n        persistent: false,\n        pure: true,\n        count: function () {\n            return this._data ? (this._data.length / this._dimSize) : 0;\n        },\n        getItem: function (idx, out) {\n            idx = idx - this._offset;\n            out = out || [];\n            var offset = this._dimSize * idx;\n            for (var i = 0; i < this._dimSize; i++) {\n                out[i] = this._data[offset + i];\n            }\n            return out;\n        },\n        appendData: function (newData) {\n            if (__DEV__) {\n                assert$1(\n                    isTypedArray(newData),\n                    'Added data must be TypedArray if data in initialization is TypedArray'\n                );\n            }\n\n            this._data = newData;\n        },\n\n        // Clean self if data is already used.\n        clean: function () {\n            // PENDING\n            this._offset += this.count();\n            this._data = null;\n        }\n    }\n};\n\nfunction countSimply() {\n    return this._data.length;\n}\nfunction getItemSimply(idx) {\n    return this._data[idx];\n}\nfunction appendDataSimply(newData) {\n    for (var i = 0; i < newData.length; i++) {\n        this._data.push(newData[i]);\n    }\n}\n\n\n\nvar rawValueGetters = {\n\n    arrayRows: getRawValueSimply,\n\n    objectRows: function (dataItem, dataIndex, dimIndex, dimName) {\n        return dimIndex != null ? dataItem[dimName] : dataItem;\n    },\n\n    keyedColumns: getRawValueSimply,\n\n    original: function (dataItem, dataIndex, dimIndex, dimName) {\n        // FIXME\n        // In some case (markpoint in geo (geo-map.html)), dataItem\n        // is {coord: [...]}\n        var value = getDataItemValue(dataItem);\n        return (dimIndex == null || !(value instanceof Array))\n            ? value\n            : value[dimIndex];\n    },\n\n    typedArray: getRawValueSimply\n};\n\nfunction getRawValueSimply(dataItem, dataIndex, dimIndex, dimName) {\n    return dimIndex != null ? dataItem[dimIndex] : dataItem;\n}\n\n\nvar defaultDimValueGetters = {\n\n    arrayRows: getDimValueSimply,\n\n    objectRows: function (dataItem, dimName, dataIndex, dimIndex) {\n        return converDataValue(dataItem[dimName], this._dimensionInfos[dimName]);\n    },\n\n    keyedColumns: getDimValueSimply,\n\n    original: function (dataItem, dimName, dataIndex, dimIndex) {\n        // Performance sensitive, do not use modelUtil.getDataItemValue.\n        // If dataItem is an plain object with no value field, the var `value`\n        // will be assigned with the object, but it will be tread correctly\n        // in the `convertDataValue`.\n        var value = dataItem && (dataItem.value == null ? dataItem : dataItem.value);\n\n        // If any dataItem is like { value: 10 }\n        if (!this._rawData.pure && isDataItemOption(dataItem)) {\n            this.hasItemOption = true;\n        }\n        return converDataValue(\n            (value instanceof Array)\n                ? value[dimIndex]\n                // If value is a single number or something else not array.\n                : value,\n            this._dimensionInfos[dimName]\n        );\n    },\n\n    typedArray: function (dataItem, dimName, dataIndex, dimIndex) {\n        return dataItem[dimIndex];\n    }\n\n};\n\nfunction getDimValueSimply(dataItem, dimName, dataIndex, dimIndex) {\n    return converDataValue(dataItem[dimIndex], this._dimensionInfos[dimName]);\n}\n\n/**\n * This helper method convert value in data.\n * @param {string|number|Date} value\n * @param {Object|string} [dimInfo] If string (like 'x'), dimType defaults 'number'.\n *        If \"dimInfo.ordinalParseAndSave\", ordinal value can be parsed.\n */\nfunction converDataValue(value, dimInfo) {\n    // Performance sensitive.\n    var dimType = dimInfo && dimInfo.type;\n    if (dimType === 'ordinal') {\n        // If given value is a category string\n        var ordinalMeta = dimInfo && dimInfo.ordinalMeta;\n        return ordinalMeta\n            ? ordinalMeta.parseAndCollect(value)\n            : value;\n    }\n\n    if (dimType === 'time'\n        // spead up when using timestamp\n        && typeof value !== 'number'\n        && value != null\n        && value !== '-'\n    ) {\n        value = +parseDate(value);\n    }\n\n    // dimType defaults 'number'.\n    // If dimType is not ordinal and value is null or undefined or NaN or '-',\n    // parse to NaN.\n    return (value == null || value === '')\n        ? NaN\n        // If string (like '-'), using '+' parse to NaN\n        // If object, also parse to NaN\n        : +value;\n}\n\n// ??? FIXME can these logic be more neat: getRawValue, getRawDataItem,\n// Consider persistent.\n// Caution: why use raw value to display on label or tooltip?\n// A reason is to avoid format. For example time value we do not know\n// how to format is expected. More over, if stack is used, calculated\n// value may be 0.91000000001, which have brings trouble to display.\n// TODO: consider how to treat null/undefined/NaN when display?\n/**\n * @param {module:echarts/data/List} data\n * @param {number} dataIndex\n * @param {string|number} [dim] dimName or dimIndex\n * @return {Array.<number>|string|number} can be null/undefined.\n */\nfunction retrieveRawValue(data, dataIndex, dim) {\n    if (!data) {\n        return;\n    }\n\n    // Consider data may be not persistent.\n    var dataItem = data.getRawDataItem(dataIndex);\n\n    if (dataItem == null) {\n        return;\n    }\n\n    var sourceFormat = data.getProvider().getSource().sourceFormat;\n    var dimName;\n    var dimIndex;\n\n    var dimInfo = data.getDimensionInfo(dim);\n    if (dimInfo) {\n        dimName = dimInfo.name;\n        dimIndex = dimInfo.index;\n    }\n\n    return rawValueGetters[sourceFormat](dataItem, dataIndex, dimIndex, dimName);\n}\n\n/**\n * Compatible with some cases (in pie, map) like:\n * data: [{name: 'xx', value: 5, selected: true}, ...]\n * where only sourceFormat is 'original' and 'objectRows' supported.\n *\n * ??? TODO\n * Supported detail options in data item when using 'arrayRows'.\n *\n * @param {module:echarts/data/List} data\n * @param {number} dataIndex\n * @param {string} attr like 'selected'\n */\nfunction retrieveRawAttr(data, dataIndex, attr) {\n    if (!data) {\n        return;\n    }\n\n    var sourceFormat = data.getProvider().getSource().sourceFormat;\n\n    if (sourceFormat !== SOURCE_FORMAT_ORIGINAL\n        && sourceFormat !== SOURCE_FORMAT_OBJECT_ROWS\n    ) {\n        return;\n    }\n\n    var dataItem = data.getRawDataItem(dataIndex);\n    if (sourceFormat === SOURCE_FORMAT_ORIGINAL && !isObject$1(dataItem)) {\n        dataItem = null;\n    }\n    if (dataItem) {\n        return dataItem[attr];\n    }\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar DIMENSION_LABEL_REG = /\\{@(.+?)\\}/g;\n\n// PENDING A little ugly\nvar dataFormatMixin = {\n    /**\n     * Get params for formatter\n     * @param {number} dataIndex\n     * @param {string} [dataType]\n     * @return {Object}\n     */\n    getDataParams: function (dataIndex, dataType) {\n        var data = this.getData(dataType);\n        var rawValue = this.getRawValue(dataIndex, dataType);\n        var rawDataIndex = data.getRawIndex(dataIndex);\n        var name = data.getName(dataIndex);\n        var itemOpt = data.getRawDataItem(dataIndex);\n        var color = data.getItemVisual(dataIndex, 'color');\n        var tooltipModel = this.ecModel.getComponent('tooltip');\n        var renderModeOption = tooltipModel && tooltipModel.get('renderMode');\n        var renderMode = getTooltipRenderMode(renderModeOption);\n        var mainType = this.mainType;\n        var isSeries = mainType === 'series';\n        var userOutput = data.userOutput;\n\n        return {\n            componentType: mainType,\n            componentSubType: this.subType,\n            componentIndex: this.componentIndex,\n            seriesType: isSeries ? this.subType : null,\n            seriesIndex: this.seriesIndex,\n            seriesId: isSeries ? this.id : null,\n            seriesName: isSeries ? this.name : null,\n            name: name,\n            dataIndex: rawDataIndex,\n            data: itemOpt,\n            dataType: dataType,\n            value: rawValue,\n            color: color,\n            dimensionNames: userOutput ? userOutput.dimensionNames : null,\n            encode: userOutput ? userOutput.encode : null,\n            marker: getTooltipMarker({\n                color: color,\n                renderMode: renderMode\n            }),\n\n            // Param name list for mapping `a`, `b`, `c`, `d`, `e`\n            $vars: ['seriesName', 'name', 'value']\n        };\n    },\n\n    /**\n     * Format label\n     * @param {number} dataIndex\n     * @param {string} [status='normal'] 'normal' or 'emphasis'\n     * @param {string} [dataType]\n     * @param {number} [dimIndex] Only used in some chart that\n     *        use formatter in different dimensions, like radar.\n     * @param {string} [labelProp='label']\n     * @return {string} If not formatter, return null/undefined\n     */\n    getFormattedLabel: function (dataIndex, status, dataType, dimIndex, labelProp) {\n        status = status || 'normal';\n        var data = this.getData(dataType);\n        var itemModel = data.getItemModel(dataIndex);\n\n        var params = this.getDataParams(dataIndex, dataType);\n        if (dimIndex != null && (params.value instanceof Array)) {\n            params.value = params.value[dimIndex];\n        }\n\n        var formatter = itemModel.get(\n            status === 'normal'\n            ? [labelProp || 'label', 'formatter']\n            : [status, labelProp || 'label', 'formatter']\n        );\n\n        if (typeof formatter === 'function') {\n            params.status = status;\n            params.dimensionIndex = dimIndex;\n            return formatter(params);\n        }\n        else if (typeof formatter === 'string') {\n            var str = formatTpl(formatter, params);\n\n            // Support 'aaa{@[3]}bbb{@product}ccc'.\n            // Do not support '}' in dim name util have to.\n            return str.replace(DIMENSION_LABEL_REG, function (origin, dim) {\n                var len = dim.length;\n                if (dim.charAt(0) === '[' && dim.charAt(len - 1) === ']') {\n                    dim = +dim.slice(1, len - 1); // Also: '[]' => 0\n                }\n                return retrieveRawValue(data, dataIndex, dim);\n            });\n        }\n    },\n\n    /**\n     * Get raw value in option\n     * @param {number} idx\n     * @param {string} [dataType]\n     * @return {Array|number|string}\n     */\n    getRawValue: function (idx, dataType) {\n        return retrieveRawValue(this.getData(dataType), idx);\n    },\n\n    /**\n     * Should be implemented.\n     * @param {number} dataIndex\n     * @param {boolean} [multipleSeries=false]\n     * @param {number} [dataType]\n     * @return {string} tooltip string\n     */\n    formatTooltip: function () {\n        // Empty function\n    }\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * @param {Object} define\n * @return See the return of `createTask`.\n */\nfunction createTask(define) {\n    return new Task(define);\n}\n\n/**\n * @constructor\n * @param {Object} define\n * @param {Function} define.reset Custom reset\n * @param {Function} [define.plan] Returns 'reset' indicate reset immediately.\n * @param {Function} [define.count] count is used to determin data task.\n * @param {Function} [define.onDirty] count is used to determin data task.\n */\nfunction Task(define) {\n    define = define || {};\n\n    this._reset = define.reset;\n    this._plan = define.plan;\n    this._count = define.count;\n    this._onDirty = define.onDirty;\n\n    this._dirty = true;\n\n    // Context must be specified implicitly, to\n    // avoid miss update context when model changed.\n    this.context;\n}\n\nvar taskProto = Task.prototype;\n\n/**\n * @param {Object} performArgs\n * @param {number} [performArgs.step] Specified step.\n * @param {number} [performArgs.skip] Skip customer perform call.\n * @param {number} [performArgs.modBy] Sampling window size.\n * @param {number} [performArgs.modDataCount] Sampling count.\n */\ntaskProto.perform = function (performArgs) {\n    var upTask = this._upstream;\n    var skip = performArgs && performArgs.skip;\n\n    // TODO some refactor.\n    // Pull data. Must pull data each time, because context.data\n    // may be updated by Series.setData.\n    if (this._dirty && upTask) {\n        var context = this.context;\n        context.data = context.outputData = upTask.context.outputData;\n    }\n\n    if (this.__pipeline) {\n        this.__pipeline.currentTask = this;\n    }\n\n    var planResult;\n    if (this._plan && !skip) {\n        planResult = this._plan(this.context);\n    }\n\n    // Support sharding by mod, which changes the render sequence and makes the rendered graphic\n    // elements uniformed distributed when progress, especially when moving or zooming.\n    var lastModBy = normalizeModBy(this._modBy);\n    var lastModDataCount = this._modDataCount || 0;\n    var modBy = normalizeModBy(performArgs && performArgs.modBy);\n    var modDataCount = performArgs && performArgs.modDataCount || 0;\n    if (lastModBy !== modBy || lastModDataCount !== modDataCount) {\n        planResult = 'reset';\n    }\n\n    function normalizeModBy(val) {\n        !(val >= 1) && (val = 1); // jshint ignore:line\n        return val;\n    }\n\n    var forceFirstProgress;\n    if (this._dirty || planResult === 'reset') {\n        this._dirty = false;\n        forceFirstProgress = reset(this, skip);\n    }\n\n    this._modBy = modBy;\n    this._modDataCount = modDataCount;\n\n    var step = performArgs && performArgs.step;\n\n    if (upTask) {\n\n        if (__DEV__) {\n            assert$1(upTask._outputDueEnd != null);\n        }\n        this._dueEnd = upTask._outputDueEnd;\n    }\n    // DataTask or overallTask\n    else {\n        if (__DEV__) {\n            assert$1(!this._progress || this._count);\n        }\n        this._dueEnd = this._count ? this._count(this.context) : Infinity;\n    }\n\n    // Note: Stubs, that its host overall task let it has progress, has progress.\n    // If no progress, pass index from upstream to downstream each time plan called.\n    if (this._progress) {\n        var start = this._dueIndex;\n        var end = Math.min(\n            step != null ? this._dueIndex + step : Infinity,\n            this._dueEnd\n        );\n\n        if (!skip && (forceFirstProgress || start < end)) {\n            var progress = this._progress;\n            if (isArray(progress)) {\n                for (var i = 0; i < progress.length; i++) {\n                    doProgress(this, progress[i], start, end, modBy, modDataCount);\n                }\n            }\n            else {\n                doProgress(this, progress, start, end, modBy, modDataCount);\n            }\n        }\n\n        this._dueIndex = end;\n        // If no `outputDueEnd`, assume that output data and\n        // input data is the same, so use `dueIndex` as `outputDueEnd`.\n        var outputDueEnd = this._settedOutputEnd != null\n            ? this._settedOutputEnd : end;\n\n        if (__DEV__) {\n            // ??? Can not rollback.\n            assert$1(outputDueEnd >= this._outputDueEnd);\n        }\n\n        this._outputDueEnd = outputDueEnd;\n    }\n    else {\n        // (1) Some overall task has no progress.\n        // (2) Stubs, that its host overall task do not let it has progress, has no progress.\n        // This should always be performed so it can be passed to downstream.\n        this._dueIndex = this._outputDueEnd = this._settedOutputEnd != null\n            ? this._settedOutputEnd : this._dueEnd;\n    }\n\n    return this.unfinished();\n};\n\nvar iterator = (function () {\n\n    var end;\n    var current;\n    var modBy;\n    var modDataCount;\n    var winCount;\n\n    var it = {\n        reset: function (s, e, sStep, sCount) {\n            current = s;\n            end = e;\n\n            modBy = sStep;\n            modDataCount = sCount;\n            winCount = Math.ceil(modDataCount / modBy);\n\n            it.next = (modBy > 1 && modDataCount > 0) ? modNext : sequentialNext;\n        }\n    };\n\n    return it;\n\n    function sequentialNext() {\n        return current < end ? current++ : null;\n    }\n\n    function modNext() {\n        var dataIndex = (current % winCount) * modBy + Math.ceil(current / winCount);\n        var result = current >= end\n            ? null\n            : dataIndex < modDataCount\n            ? dataIndex\n            // If modDataCount is smaller than data.count() (consider `appendData` case),\n            // Use normal linear rendering mode.\n            : current;\n        current++;\n        return result;\n    }\n})();\n\ntaskProto.dirty = function () {\n    this._dirty = true;\n    this._onDirty && this._onDirty(this.context);\n};\n\nfunction doProgress(taskIns, progress, start, end, modBy, modDataCount) {\n    iterator.reset(start, end, modBy, modDataCount);\n    taskIns._callingProgress = progress;\n    taskIns._callingProgress({\n        start: start, end: end, count: end - start, next: iterator.next\n    }, taskIns.context);\n}\n\nfunction reset(taskIns, skip) {\n    taskIns._dueIndex = taskIns._outputDueEnd = taskIns._dueEnd = 0;\n    taskIns._settedOutputEnd = null;\n\n    var progress;\n    var forceFirstProgress;\n\n    if (!skip && taskIns._reset) {\n        progress = taskIns._reset(taskIns.context);\n        if (progress && progress.progress) {\n            forceFirstProgress = progress.forceFirstProgress;\n            progress = progress.progress;\n        }\n        // To simplify no progress checking, array must has item.\n        if (isArray(progress) && !progress.length) {\n            progress = null;\n        }\n    }\n\n    taskIns._progress = progress;\n    taskIns._modBy = taskIns._modDataCount = null;\n\n    var downstream = taskIns._downstream;\n    downstream && downstream.dirty();\n\n    return forceFirstProgress;\n}\n\n/**\n * @return {boolean}\n */\ntaskProto.unfinished = function () {\n    return this._progress && this._dueIndex < this._dueEnd;\n};\n\n/**\n * @param {Object} downTask The downstream task.\n * @return {Object} The downstream task.\n */\ntaskProto.pipe = function (downTask) {\n    if (__DEV__) {\n        assert$1(downTask && !downTask._disposed && downTask !== this);\n    }\n\n    // If already downstream, do not dirty downTask.\n    if (this._downstream !== downTask || this._dirty) {\n        this._downstream = downTask;\n        downTask._upstream = this;\n        downTask.dirty();\n    }\n};\n\ntaskProto.dispose = function () {\n    if (this._disposed) {\n        return;\n    }\n\n    this._upstream && (this._upstream._downstream = null);\n    this._downstream && (this._downstream._upstream = null);\n\n    this._dirty = false;\n    this._disposed = true;\n};\n\ntaskProto.getUpstream = function () {\n    return this._upstream;\n};\n\ntaskProto.getDownstream = function () {\n    return this._downstream;\n};\n\ntaskProto.setOutputEnd = function (end) {\n    // This only happend in dataTask, dataZoom, map, currently.\n    // where dataZoom do not set end each time, but only set\n    // when reset. So we should record the setted end, in case\n    // that the stub of dataZoom perform again and earse the\n    // setted end by upstream.\n    this._outputDueEnd = this._settedOutputEnd = end;\n};\n\n\n///////////////////////////////////////////////////////////\n// For stream debug (Should be commented out after used!)\n// Usage: printTask(this, 'begin');\n// Usage: printTask(this, null, {someExtraProp});\n// function printTask(task, prefix, extra) {\n//     window.ecTaskUID == null && (window.ecTaskUID = 0);\n//     task.uidDebug == null && (task.uidDebug = `task_${window.ecTaskUID++}`);\n//     task.agent && task.agent.uidDebug == null && (task.agent.uidDebug = `task_${window.ecTaskUID++}`);\n//     var props = [];\n//     if (task.__pipeline) {\n//         var val = `${task.__idxInPipeline}/${task.__pipeline.tail.__idxInPipeline} ${task.agent ? '(stub)' : ''}`;\n//         props.push({text: 'idx', value: val});\n//     } else {\n//         var stubCount = 0;\n//         task.agentStubMap.each(() => stubCount++);\n//         props.push({text: 'idx', value: `overall (stubs: ${stubCount})`});\n//     }\n//     props.push({text: 'uid', value: task.uidDebug});\n//     if (task.__pipeline) {\n//         props.push({text: 'pid', value: task.__pipeline.id});\n//         task.agent && props.push(\n//             {text: 'stubFor', value: task.agent.uidDebug}\n//         );\n//     }\n//     props.push(\n//         {text: 'dirty', value: task._dirty},\n//         {text: 'dueIndex', value: task._dueIndex},\n//         {text: 'dueEnd', value: task._dueEnd},\n//         {text: 'outputDueEnd', value: task._outputDueEnd}\n//     );\n//     if (extra) {\n//         Object.keys(extra).forEach(key => {\n//             props.push({text: key, value: extra[key]});\n//         });\n//     }\n//     var args = ['color: blue'];\n//     var msg = `%c[${prefix || 'T'}] %c` + props.map(item => (\n//         args.push('color: black', 'color: red'),\n//         `${item.text}: %c${item.value}`\n//     )).join('%c, ');\n//     console.log.apply(console, [msg].concat(args));\n//     // console.log(this);\n// }\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar inner$4 = makeInner();\n\nvar SeriesModel = ComponentModel.extend({\n\n    type: 'series.__base__',\n\n    /**\n     * @readOnly\n     */\n    seriesIndex: 0,\n\n    // coodinateSystem will be injected in the echarts/CoordinateSystem\n    coordinateSystem: null,\n\n    /**\n     * @type {Object}\n     * @protected\n     */\n    defaultOption: null,\n\n    /**\n     * Data provided for legend\n     * @type {Function}\n     */\n    // PENDING\n    legendDataProvider: null,\n\n    /**\n     * Access path of color for visual\n     */\n    visualColorAccessPath: 'itemStyle.color',\n\n    /**\n     * Support merge layout params.\n     * Only support 'box' now (left/right/top/bottom/width/height).\n     * @type {string|Object} Object can be {ignoreSize: true}\n     * @readOnly\n     */\n    layoutMode: null,\n\n    init: function (option, parentModel, ecModel, extraOpt) {\n\n        /**\n         * @type {number}\n         * @readOnly\n         */\n        this.seriesIndex = this.componentIndex;\n\n        this.dataTask = createTask({\n            count: dataTaskCount,\n            reset: dataTaskReset\n        });\n        this.dataTask.context = {model: this};\n\n        this.mergeDefaultAndTheme(option, ecModel);\n\n        prepareSource(this);\n\n\n        var data = this.getInitialData(option, ecModel);\n        wrapData(data, this);\n        this.dataTask.context.data = data;\n\n        if (__DEV__) {\n            assert$1(data, 'getInitialData returned invalid data.');\n        }\n\n        /**\n         * @type {module:echarts/data/List|module:echarts/data/Tree|module:echarts/data/Graph}\n         * @private\n         */\n        inner$4(this).dataBeforeProcessed = data;\n\n        // If we reverse the order (make data firstly, and then make\n        // dataBeforeProcessed by cloneShallow), cloneShallow will\n        // cause data.graph.data !== data when using\n        // module:echarts/data/Graph or module:echarts/data/Tree.\n        // See module:echarts/data/helper/linkList\n\n        // Theoretically, it is unreasonable to call `seriesModel.getData()` in the model\n        // init or merge stage, because the data can be restored. So we do not `restoreData`\n        // and `setData` here, which forbids calling `seriesModel.getData()` in this stage.\n        // Call `seriesModel.getRawData()` instead.\n        // this.restoreData();\n\n        autoSeriesName(this);\n    },\n\n    /**\n     * Util for merge default and theme to option\n     * @param  {Object} option\n     * @param  {module:echarts/model/Global} ecModel\n     */\n    mergeDefaultAndTheme: function (option, ecModel) {\n        var layoutMode = this.layoutMode;\n        var inputPositionParams = layoutMode\n            ? getLayoutParams(option) : {};\n\n        // Backward compat: using subType on theme.\n        // But if name duplicate between series subType\n        // (for example: parallel) add component mainType,\n        // add suffix 'Series'.\n        var themeSubType = this.subType;\n        if (ComponentModel.hasClass(themeSubType)) {\n            themeSubType += 'Series';\n        }\n        merge(\n            option,\n            ecModel.getTheme().get(this.subType)\n        );\n        merge(option, this.getDefaultOption());\n\n        // Default label emphasis `show`\n        defaultEmphasis(option, 'label', ['show']);\n\n        this.fillDataTextStyle(option.data);\n\n        if (layoutMode) {\n            mergeLayoutParam(option, inputPositionParams, layoutMode);\n        }\n    },\n\n    mergeOption: function (newSeriesOption, ecModel) {\n        // this.settingTask.dirty();\n\n        newSeriesOption = merge(this.option, newSeriesOption, true);\n        this.fillDataTextStyle(newSeriesOption.data);\n\n        var layoutMode = this.layoutMode;\n        if (layoutMode) {\n            mergeLayoutParam(this.option, newSeriesOption, layoutMode);\n        }\n\n        prepareSource(this);\n\n        var data = this.getInitialData(newSeriesOption, ecModel);\n        wrapData(data, this);\n        this.dataTask.dirty();\n        this.dataTask.context.data = data;\n\n        inner$4(this).dataBeforeProcessed = data;\n\n        autoSeriesName(this);\n    },\n\n    fillDataTextStyle: function (data) {\n        // Default data label emphasis `show`\n        // FIXME Tree structure data ?\n        // FIXME Performance ?\n        if (data && !isTypedArray(data)) {\n            var props = ['show'];\n            for (var i = 0; i < data.length; i++) {\n                if (data[i] && data[i].label) {\n                    defaultEmphasis(data[i], 'label', props);\n                }\n            }\n        }\n    },\n\n    /**\n     * Init a data structure from data related option in series\n     * Must be overwritten\n     */\n    getInitialData: function () {},\n\n    /**\n     * Append data to list\n     * @param {Object} params\n     * @param {Array|TypedArray} params.data\n     */\n    appendData: function (params) {\n        // FIXME ???\n        // (1) If data from dataset, forbidden append.\n        // (2) support append data of dataset.\n        var data = this.getRawData();\n        data.appendData(params.data);\n    },\n\n    /**\n     * Consider some method like `filter`, `map` need make new data,\n     * We should make sure that `seriesModel.getData()` get correct\n     * data in the stream procedure. So we fetch data from upstream\n     * each time `task.perform` called.\n     * @param {string} [dataType]\n     * @return {module:echarts/data/List}\n     */\n    getData: function (dataType) {\n        var task = getCurrentTask(this);\n        if (task) {\n            var data = task.context.data;\n            return dataType == null ? data : data.getLinkedData(dataType);\n        }\n        else {\n            // When series is not alive (that may happen when click toolbox\n            // restore or setOption with not merge mode), series data may\n            // be still need to judge animation or something when graphic\n            // elements want to know whether fade out.\n            return inner$4(this).data;\n        }\n    },\n\n    /**\n     * @param {module:echarts/data/List} data\n     */\n    setData: function (data) {\n        var task = getCurrentTask(this);\n        if (task) {\n            var context = task.context;\n            // Consider case: filter, data sample.\n            if (context.data !== data && task.modifyOutputEnd) {\n                task.setOutputEnd(data.count());\n            }\n            context.outputData = data;\n            // Caution: setData should update context.data,\n            // Because getData may be called multiply in a\n            // single stage and expect to get the data just\n            // set. (For example, AxisProxy, x y both call\n            // getData and setDate sequentially).\n            // So the context.data should be fetched from\n            // upstream each time when a stage starts to be\n            // performed.\n            if (task !== this.dataTask) {\n                context.data = data;\n            }\n        }\n        inner$4(this).data = data;\n    },\n\n    /**\n     * @see {module:echarts/data/helper/sourceHelper#getSource}\n     * @return {module:echarts/data/Source} source\n     */\n    getSource: function () {\n        return getSource(this);\n    },\n\n    /**\n     * Get data before processed\n     * @return {module:echarts/data/List}\n     */\n    getRawData: function () {\n        return inner$4(this).dataBeforeProcessed;\n    },\n\n    /**\n     * Get base axis if has coordinate system and has axis.\n     * By default use coordSys.getBaseAxis();\n     * Can be overrided for some chart.\n     * @return {type} description\n     */\n    getBaseAxis: function () {\n        var coordSys = this.coordinateSystem;\n        return coordSys && coordSys.getBaseAxis && coordSys.getBaseAxis();\n    },\n\n    // FIXME\n    /**\n     * Default tooltip formatter\n     *\n     * @param {number} dataIndex\n     * @param {boolean} [multipleSeries=false]\n     * @param {number} [dataType]\n     * @param {string} [renderMode='html'] valid values: 'html' and 'richText'.\n     *                                     'html' is used for rendering tooltip in extra DOM form, and the result\n     *                                     string is used as DOM HTML content.\n     *                                     'richText' is used for rendering tooltip in rich text form, for those where\n     *                                     DOM operation is not supported.\n     * @return {Object} formatted tooltip with `html` and `markers`\n     */\n    formatTooltip: function (dataIndex, multipleSeries, dataType, renderMode) {\n\n        var series = this;\n        renderMode = renderMode || 'html';\n        var newLine = renderMode === 'html' ? '<br/>' : '\\n';\n        var isRichText = renderMode === 'richText';\n        var markers = {};\n        var markerId = 0;\n\n        function formatArrayValue(value) {\n            // ??? TODO refactor these logic.\n            // check: category-no-encode-has-axis-data in dataset.html\n            var vertially = reduce(value, function (vertially, val, idx) {\n                var dimItem = data.getDimensionInfo(idx);\n                return vertially |= dimItem && dimItem.tooltip !== false && dimItem.displayName != null;\n            }, 0);\n\n            var result = [];\n\n            tooltipDims.length\n                ? each$1(tooltipDims, function (dim) {\n                    setEachItem(retrieveRawValue(data, dataIndex, dim), dim);\n                })\n                // By default, all dims is used on tooltip.\n                : each$1(value, setEachItem);\n\n            function setEachItem(val, dim) {\n                var dimInfo = data.getDimensionInfo(dim);\n                // If `dimInfo.tooltip` is not set, show tooltip.\n                if (!dimInfo || dimInfo.otherDims.tooltip === false) {\n                    return;\n                }\n                var dimType = dimInfo.type;\n                var markName = 'sub' + series.seriesIndex + 'at' + markerId;\n                var dimHead = getTooltipMarker({\n                    color: color,\n                    type: 'subItem',\n                    renderMode: renderMode,\n                    markerId: markName\n                });\n\n                var dimHeadStr = typeof dimHead === 'string' ? dimHead : dimHead.content;\n                var valStr = (vertially\n                        ? dimHeadStr + encodeHTML(dimInfo.displayName || '-') + ': '\n                        : ''\n                    )\n                    // FIXME should not format time for raw data?\n                    + encodeHTML(dimType === 'ordinal'\n                        ? val + ''\n                        : dimType === 'time'\n                        ? (multipleSeries ? '' : formatTime('yyyy/MM/dd hh:mm:ss', val))\n                        : addCommas(val)\n                    );\n                valStr && result.push(valStr);\n\n                if (isRichText) {\n                    markers[markName] = color;\n                    ++markerId;\n                }\n            }\n\n            var newLine = vertially ? (isRichText ? '\\n' : '<br/>') : '';\n            var content = newLine + result.join(newLine || ', ');\n            return {\n                renderMode: renderMode,\n                content: content,\n                style: markers\n            };\n        }\n\n        function formatSingleValue(val) {\n            // return encodeHTML(addCommas(val));\n            return {\n                renderMode: renderMode,\n                content: encodeHTML(addCommas(val)),\n                style: markers\n            };\n        }\n\n        var data = this.getData();\n        var tooltipDims = data.mapDimension('defaultedTooltip', true);\n        var tooltipDimLen = tooltipDims.length;\n        var value = this.getRawValue(dataIndex);\n        var isValueArr = isArray(value);\n\n        var color = data.getItemVisual(dataIndex, 'color');\n        if (isObject$1(color) && color.colorStops) {\n            color = (color.colorStops[0] || {}).color;\n        }\n        color = color || 'transparent';\n\n        // Complicated rule for pretty tooltip.\n        var formattedValue = (tooltipDimLen > 1 || (isValueArr && !tooltipDimLen))\n            ? formatArrayValue(value)\n            : tooltipDimLen\n            ? formatSingleValue(retrieveRawValue(data, dataIndex, tooltipDims[0]))\n            : formatSingleValue(isValueArr ? value[0] : value);\n        var content = formattedValue.content;\n\n        var markName = series.seriesIndex + 'at' + markerId;\n        var colorEl = getTooltipMarker({\n            color: color,\n            type: 'item',\n            renderMode: renderMode,\n            markerId: markName\n        });\n        markers[markName] = color;\n        ++markerId;\n\n        var name = data.getName(dataIndex);\n\n        var seriesName = this.name;\n        if (!isNameSpecified(this)) {\n            seriesName = '';\n        }\n        seriesName = seriesName\n            ? encodeHTML(seriesName) + (!multipleSeries ? newLine : ': ')\n            : '';\n\n        var colorStr = typeof colorEl === 'string' ? colorEl : colorEl.content;\n        var html = !multipleSeries\n            ? seriesName + colorStr\n                + (name\n                    ? encodeHTML(name) + ': ' + content\n                    : content\n                )\n            : colorStr + seriesName + content;\n\n        return {\n            html: html,\n            markers: markers\n        };\n    },\n\n    /**\n     * @return {boolean}\n     */\n    isAnimationEnabled: function () {\n        if (env$1.node) {\n            return false;\n        }\n\n        var animationEnabled = this.getShallow('animation');\n        if (animationEnabled) {\n            if (this.getData().count() > this.getShallow('animationThreshold')) {\n                animationEnabled = false;\n            }\n        }\n        return animationEnabled;\n    },\n\n    restoreData: function () {\n        this.dataTask.dirty();\n    },\n\n    getColorFromPalette: function (name, scope, requestColorNum) {\n        var ecModel = this.ecModel;\n        // PENDING\n        var color = colorPaletteMixin.getColorFromPalette.call(this, name, scope, requestColorNum);\n        if (!color) {\n            color = ecModel.getColorFromPalette(name, scope, requestColorNum);\n        }\n        return color;\n    },\n\n    /**\n     * Use `data.mapDimension(coordDim, true)` instead.\n     * @deprecated\n     */\n    coordDimToDataDim: function (coordDim) {\n        return this.getRawData().mapDimension(coordDim, true);\n    },\n\n    /**\n     * Get progressive rendering count each step\n     * @return {number}\n     */\n    getProgressive: function () {\n        return this.get('progressive');\n    },\n\n    /**\n     * Get progressive rendering count each step\n     * @return {number}\n     */\n    getProgressiveThreshold: function () {\n        return this.get('progressiveThreshold');\n    },\n\n    /**\n     * Get data indices for show tooltip content. See tooltip.\n     * @abstract\n     * @param {Array.<string>|string} dim\n     * @param {Array.<number>} value\n     * @param {module:echarts/coord/single/SingleAxis} baseAxis\n     * @return {Object} {dataIndices, nestestValue}.\n     */\n    getAxisTooltipData: null,\n\n    /**\n     * See tooltip.\n     * @abstract\n     * @param {number} dataIndex\n     * @return {Array.<number>} Point of tooltip. null/undefined can be returned.\n     */\n    getTooltipPosition: null,\n\n    /**\n     * @see {module:echarts/stream/Scheduler}\n     */\n    pipeTask: null,\n\n    /**\n     * Convinient for override in extended class.\n     * @protected\n     * @type {Function}\n     */\n    preventIncremental: null,\n\n    /**\n     * @public\n     * @readOnly\n     * @type {Object}\n     */\n    pipelineContext: null\n\n});\n\n\nmixin(SeriesModel, dataFormatMixin);\nmixin(SeriesModel, colorPaletteMixin);\n\n/**\n * MUST be called after `prepareSource` called\n * Here we need to make auto series, especially for auto legend. But we\n * do not modify series.name in option to avoid side effects.\n */\nfunction autoSeriesName(seriesModel) {\n    // User specified name has higher priority, otherwise it may cause\n    // series can not be queried unexpectedly.\n    var name = seriesModel.name;\n    if (!isNameSpecified(seriesModel)) {\n        seriesModel.name = getSeriesAutoName(seriesModel) || name;\n    }\n}\n\nfunction getSeriesAutoName(seriesModel) {\n    var data = seriesModel.getRawData();\n    var dataDims = data.mapDimension('seriesName', true);\n    var nameArr = [];\n    each$1(dataDims, function (dataDim) {\n        var dimInfo = data.getDimensionInfo(dataDim);\n        dimInfo.displayName && nameArr.push(dimInfo.displayName);\n    });\n    return nameArr.join(' ');\n}\n\nfunction dataTaskCount(context) {\n    return context.model.getRawData().count();\n}\n\nfunction dataTaskReset(context) {\n    var seriesModel = context.model;\n    seriesModel.setData(seriesModel.getRawData().cloneShallow());\n    return dataTaskProgress;\n}\n\nfunction dataTaskProgress(param, context) {\n    // Avoid repead cloneShallow when data just created in reset.\n    if (param.end > context.outputData.count()) {\n        context.model.getRawData().cloneShallow(context.outputData);\n    }\n}\n\n// TODO refactor\nfunction wrapData(data, seriesModel) {\n    each$1(data.CHANGABLE_METHODS, function (methodName) {\n        data.wrapMethod(methodName, curry(onDataSelfChange, seriesModel));\n    });\n}\n\nfunction onDataSelfChange(seriesModel) {\n    var task = getCurrentTask(seriesModel);\n    if (task) {\n        // Consider case: filter, selectRange\n        task.setOutputEnd(this.count());\n    }\n}\n\nfunction getCurrentTask(seriesModel) {\n    var scheduler = (seriesModel.ecModel || {}).scheduler;\n    var pipeline = scheduler && scheduler.getPipeline(seriesModel.uid);\n\n    if (pipeline) {\n        // When pipline finished, the currrentTask keep the last\n        // task (renderTask).\n        var task = pipeline.currentTask;\n        if (task) {\n            var agentStubMap = task.agentStubMap;\n            if (agentStubMap) {\n                task = agentStubMap.get(seriesModel.uid);\n            }\n        }\n        return task;\n    }\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar Component$1 = function () {\n    /**\n     * @type {module:zrender/container/Group}\n     * @readOnly\n     */\n    this.group = new Group();\n\n    /**\n     * @type {string}\n     * @readOnly\n     */\n    this.uid = getUID('viewComponent');\n};\n\nComponent$1.prototype = {\n\n    constructor: Component$1,\n\n    init: function (ecModel, api) {},\n\n    render: function (componentModel, ecModel, api, payload) {},\n\n    dispose: function () {},\n\n    /**\n     * @param {string} eventType\n     * @param {Object} query\n     * @param {module:zrender/Element} targetEl\n     * @param {Object} packedEvent\n     * @return {boolen} Pass only when return `true`.\n     */\n    filterForExposedEvent: null\n\n};\n\nvar componentProto = Component$1.prototype;\ncomponentProto.updateView\n    = componentProto.updateLayout\n    = componentProto.updateVisual\n    = function (seriesModel, ecModel, api, payload) {\n        // Do nothing;\n    };\n// Enable Component.extend.\nenableClassExtend(Component$1);\n\n// Enable capability of registerClass, getClass, hasClass, registerSubTypeDefaulter and so on.\nenableClassManagement(Component$1, {registerWhenExtend: true});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * @return {string} If large mode changed, return string 'reset';\n */\nvar createRenderPlanner = function () {\n    var inner = makeInner();\n\n    return function (seriesModel) {\n        var fields = inner(seriesModel);\n        var pipelineContext = seriesModel.pipelineContext;\n\n        var originalLarge = fields.large;\n        var originalProgressive = fields.progressiveRender;\n\n        var large = fields.large = pipelineContext.large;\n        var progressive = fields.progressiveRender = pipelineContext.progressiveRender;\n\n        return !!((originalLarge ^ large) || (originalProgressive ^ progressive)) && 'reset';\n    };\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar inner$5 = makeInner();\nvar renderPlanner = createRenderPlanner();\n\nfunction Chart() {\n\n    /**\n     * @type {module:zrender/container/Group}\n     * @readOnly\n     */\n    this.group = new Group();\n\n    /**\n     * @type {string}\n     * @readOnly\n     */\n    this.uid = getUID('viewChart');\n\n    this.renderTask = createTask({\n        plan: renderTaskPlan,\n        reset: renderTaskReset\n    });\n    this.renderTask.context = {view: this};\n}\n\nChart.prototype = {\n\n    type: 'chart',\n\n    /**\n     * Init the chart.\n     * @param  {module:echarts/model/Global} ecModel\n     * @param  {module:echarts/ExtensionAPI} api\n     */\n    init: function (ecModel, api) {},\n\n    /**\n     * Render the chart.\n     * @param  {module:echarts/model/Series} seriesModel\n     * @param  {module:echarts/model/Global} ecModel\n     * @param  {module:echarts/ExtensionAPI} api\n     * @param  {Object} payload\n     */\n    render: function (seriesModel, ecModel, api, payload) {},\n\n    /**\n     * Highlight series or specified data item.\n     * @param  {module:echarts/model/Series} seriesModel\n     * @param  {module:echarts/model/Global} ecModel\n     * @param  {module:echarts/ExtensionAPI} api\n     * @param  {Object} payload\n     */\n    highlight: function (seriesModel, ecModel, api, payload) {\n        toggleHighlight(seriesModel.getData(), payload, 'emphasis');\n    },\n\n    /**\n     * Downplay series or specified data item.\n     * @param  {module:echarts/model/Series} seriesModel\n     * @param  {module:echarts/model/Global} ecModel\n     * @param  {module:echarts/ExtensionAPI} api\n     * @param  {Object} payload\n     */\n    downplay: function (seriesModel, ecModel, api, payload) {\n        toggleHighlight(seriesModel.getData(), payload, 'normal');\n    },\n\n    /**\n     * Remove self.\n     * @param  {module:echarts/model/Global} ecModel\n     * @param  {module:echarts/ExtensionAPI} api\n     */\n    remove: function (ecModel, api) {\n        this.group.removeAll();\n    },\n\n    /**\n     * Dispose self.\n     * @param  {module:echarts/model/Global} ecModel\n     * @param  {module:echarts/ExtensionAPI} api\n     */\n    dispose: function () {},\n\n    /**\n     * Rendering preparation in progressive mode.\n     * @param  {module:echarts/model/Series} seriesModel\n     * @param  {module:echarts/model/Global} ecModel\n     * @param  {module:echarts/ExtensionAPI} api\n     * @param  {Object} payload\n     */\n    incrementalPrepareRender: null,\n\n    /**\n     * Render in progressive mode.\n     * @param  {Object} params See taskParams in `stream/task.js`\n     * @param  {module:echarts/model/Series} seriesModel\n     * @param  {module:echarts/model/Global} ecModel\n     * @param  {module:echarts/ExtensionAPI} api\n     * @param  {Object} payload\n     */\n    incrementalRender: null,\n\n    /**\n     * Update transform directly.\n     * @param  {module:echarts/model/Series} seriesModel\n     * @param  {module:echarts/model/Global} ecModel\n     * @param  {module:echarts/ExtensionAPI} api\n     * @param  {Object} payload\n     * @return {Object} {update: true}\n     */\n    updateTransform: null,\n\n    /**\n     * The view contains the given point.\n     * @interface\n     * @param {Array.<number>} point\n     * @return {boolean}\n     */\n    // containPoint: function () {}\n\n    /**\n     * @param {string} eventType\n     * @param {Object} query\n     * @param {module:zrender/Element} targetEl\n     * @param {Object} packedEvent\n     * @return {boolen} Pass only when return `true`.\n     */\n    filterForExposedEvent: null\n\n};\n\nvar chartProto = Chart.prototype;\nchartProto.updateView =\nchartProto.updateLayout =\nchartProto.updateVisual =\n    function (seriesModel, ecModel, api, payload) {\n        this.render(seriesModel, ecModel, api, payload);\n    };\n\n/**\n * Set state of single element\n * @param {module:zrender/Element} el\n * @param {string} state 'normal'|'emphasis'\n * @param {number} highlightDigit\n */\nfunction elSetState(el, state, highlightDigit) {\n    if (el) {\n        el.trigger(state, highlightDigit);\n        if (el.isGroup\n            // Simple optimize.\n            && !isHighDownDispatcher(el)\n        ) {\n            for (var i = 0, len = el.childCount(); i < len; i++) {\n                elSetState(el.childAt(i), state, highlightDigit);\n            }\n        }\n    }\n}\n\n/**\n * @param {module:echarts/data/List} data\n * @param {Object} payload\n * @param {string} state 'normal'|'emphasis'\n */\nfunction toggleHighlight(data, payload, state) {\n    var dataIndex = queryDataIndex(data, payload);\n\n    var highlightDigit = (payload && payload.highlightKey != null)\n        ? getHighlightDigit(payload.highlightKey)\n        : null;\n\n    if (dataIndex != null) {\n        each$1(normalizeToArray(dataIndex), function (dataIdx) {\n            elSetState(data.getItemGraphicEl(dataIdx), state, highlightDigit);\n        });\n    }\n    else {\n        data.eachItemGraphicEl(function (el) {\n            elSetState(el, state, highlightDigit);\n        });\n    }\n}\n\n// Enable Chart.extend.\nenableClassExtend(Chart, ['dispose']);\n\n// Add capability of registerClass, getClass, hasClass, registerSubTypeDefaulter and so on.\nenableClassManagement(Chart, {registerWhenExtend: true});\n\nChart.markUpdateMethod = function (payload, methodName) {\n    inner$5(payload).updateMethod = methodName;\n};\n\nfunction renderTaskPlan(context) {\n    return renderPlanner(context.model);\n}\n\nfunction renderTaskReset(context) {\n    var seriesModel = context.model;\n    var ecModel = context.ecModel;\n    var api = context.api;\n    var payload = context.payload;\n    // ???! remove updateView updateVisual\n    var progressiveRender = seriesModel.pipelineContext.progressiveRender;\n    var view = context.view;\n\n    var updateMethod = payload && inner$5(payload).updateMethod;\n    var methodName = progressiveRender\n        ? 'incrementalPrepareRender'\n        : (updateMethod && view[updateMethod])\n        ? updateMethod\n        // `appendData` is also supported when data amount\n        // is less than progressive threshold.\n        : 'render';\n\n    if (methodName !== 'render') {\n        view[methodName](seriesModel, ecModel, api, payload);\n    }\n\n    return progressMethodMap[methodName];\n}\n\nvar progressMethodMap = {\n    incrementalPrepareRender: {\n        progress: function (params, context) {\n            context.view.incrementalRender(\n                params, context.model, context.ecModel, context.api, context.payload\n            );\n        }\n    },\n    render: {\n        // Put view.render in `progress` to support appendData. But in this case\n        // view.render should not be called in reset, otherwise it will be called\n        // twise. Use `forceFirstProgress` to make sure that view.render is called\n        // in any cases.\n        forceFirstProgress: true,\n        progress: function (params, context) {\n            context.view.render(\n                context.model, context.ecModel, context.api, context.payload\n            );\n        }\n    }\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\nvar ORIGIN_METHOD = '\\0__throttleOriginMethod';\nvar RATE = '\\0__throttleRate';\nvar THROTTLE_TYPE = '\\0__throttleType';\n\n/**\n * @public\n * @param {(Function)} fn\n * @param {number} [delay=0] Unit: ms.\n * @param {boolean} [debounce=false]\n *        true: If call interval less than `delay`, only the last call works.\n *        false: If call interval less than `delay, call works on fixed rate.\n * @return {(Function)} throttled fn.\n */\nfunction throttle(fn, delay, debounce) {\n\n    var currCall;\n    var lastCall = 0;\n    var lastExec = 0;\n    var timer = null;\n    var diff;\n    var scope;\n    var args;\n    var debounceNextCall;\n\n    delay = delay || 0;\n\n    function exec() {\n        lastExec = (new Date()).getTime();\n        timer = null;\n        fn.apply(scope, args || []);\n    }\n\n    var cb = function () {\n        currCall = (new Date()).getTime();\n        scope = this;\n        args = arguments;\n        var thisDelay = debounceNextCall || delay;\n        var thisDebounce = debounceNextCall || debounce;\n        debounceNextCall = null;\n        diff = currCall - (thisDebounce ? lastCall : lastExec) - thisDelay;\n\n        clearTimeout(timer);\n\n        // Here we should make sure that: the `exec` SHOULD NOT be called later\n        // than a new call of `cb`, that is, preserving the command order. Consider\n        // calculating \"scale rate\" when roaming as an example. When a call of `cb`\n        // happens, either the `exec` is called dierectly, or the call is delayed.\n        // But the delayed call should never be later than next call of `cb`. Under\n        // this assurance, we can simply update view state each time `dispatchAction`\n        // triggered by user roaming, but not need to add extra code to avoid the\n        // state being \"rolled-back\".\n        if (thisDebounce) {\n            timer = setTimeout(exec, thisDelay);\n        }\n        else {\n            if (diff >= 0) {\n                exec();\n            }\n            else {\n                timer = setTimeout(exec, -diff);\n            }\n        }\n\n        lastCall = currCall;\n    };\n\n    /**\n     * Clear throttle.\n     * @public\n     */\n    cb.clear = function () {\n        if (timer) {\n            clearTimeout(timer);\n            timer = null;\n        }\n    };\n\n    /**\n     * Enable debounce once.\n     */\n    cb.debounceNextCall = function (debounceDelay) {\n        debounceNextCall = debounceDelay;\n    };\n\n    return cb;\n}\n\n/**\n * Create throttle method or update throttle rate.\n *\n * @example\n * ComponentView.prototype.render = function () {\n *     ...\n *     throttle.createOrUpdate(\n *         this,\n *         '_dispatchAction',\n *         this.model.get('throttle'),\n *         'fixRate'\n *     );\n * };\n * ComponentView.prototype.remove = function () {\n *     throttle.clear(this, '_dispatchAction');\n * };\n * ComponentView.prototype.dispose = function () {\n *     throttle.clear(this, '_dispatchAction');\n * };\n *\n * @public\n * @param {Object} obj\n * @param {string} fnAttr\n * @param {number} [rate]\n * @param {string} [throttleType='fixRate'] 'fixRate' or 'debounce'\n * @return {Function} throttled function.\n */\nfunction createOrUpdate(obj, fnAttr, rate, throttleType) {\n    var fn = obj[fnAttr];\n\n    if (!fn) {\n        return;\n    }\n\n    var originFn = fn[ORIGIN_METHOD] || fn;\n    var lastThrottleType = fn[THROTTLE_TYPE];\n    var lastRate = fn[RATE];\n\n    if (lastRate !== rate || lastThrottleType !== throttleType) {\n        if (rate == null || !throttleType) {\n            return (obj[fnAttr] = originFn);\n        }\n\n        fn = obj[fnAttr] = throttle(\n            originFn, rate, throttleType === 'debounce'\n        );\n        fn[ORIGIN_METHOD] = originFn;\n        fn[THROTTLE_TYPE] = throttleType;\n        fn[RATE] = rate;\n    }\n\n    return fn;\n}\n\n/**\n * Clear throttle. Example see throttle.createOrUpdate.\n *\n * @public\n * @param {Object} obj\n * @param {string} fnAttr\n */\nfunction clear(obj, fnAttr) {\n    var fn = obj[fnAttr];\n    if (fn && fn[ORIGIN_METHOD]) {\n        obj[fnAttr] = fn[ORIGIN_METHOD];\n    }\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar seriesColor = {\n    createOnAllSeries: true,\n    performRawSeries: true,\n    reset: function (seriesModel, ecModel) {\n        var data = seriesModel.getData();\n        var colorAccessPath = (seriesModel.visualColorAccessPath || 'itemStyle.color').split('.');\n        var color = seriesModel.get(colorAccessPath) // Set in itemStyle\n            || seriesModel.getColorFromPalette(\n                // TODO series count changed.\n                seriesModel.name, null, ecModel.getSeriesCount()\n            );  // Default color\n\n        // FIXME Set color function or use the platte color\n        data.setVisual('color', color);\n\n        // Only visible series has each data be visual encoded\n        if (!ecModel.isSeriesFiltered(seriesModel)) {\n            if (typeof color === 'function' && !(color instanceof Gradient)) {\n                data.each(function (idx) {\n                    data.setItemVisual(\n                        idx, 'color', color(seriesModel.getDataParams(idx))\n                    );\n                });\n            }\n\n            // itemStyle in each data item\n            var dataEach = function (data, idx) {\n                var itemModel = data.getItemModel(idx);\n                var color = itemModel.get(colorAccessPath, true);\n                if (color != null) {\n                    data.setItemVisual(idx, 'color', color);\n                }\n            };\n\n            return { dataEach: data.hasItemOption ? dataEach : null };\n        }\n    }\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\nvar lang = {\n    toolbox: {\n        brush: {\n            title: {\n                rect: '矩形选择',\n                polygon: '圈选',\n                lineX: '横向选择',\n                lineY: '纵向选择',\n                keep: '保持选择',\n                clear: '清除选择'\n            }\n        },\n        dataView: {\n            title: '数据视图',\n            lang: ['数据视图', '关闭', '刷新']\n        },\n        dataZoom: {\n            title: {\n                zoom: '区域缩放',\n                back: '区域缩放还原'\n            }\n        },\n        magicType: {\n            title: {\n                line: '切换为折线图',\n                bar: '切换为柱状图',\n                stack: '切换为堆叠',\n                tiled: '切换为平铺'\n            }\n        },\n        restore: {\n            title: '还原'\n        },\n        saveAsImage: {\n            title: '保存为图片',\n            lang: ['右键另存为图片']\n        }\n    },\n    series: {\n        typeNames: {\n            pie: '饼图',\n            bar: '柱状图',\n            line: '折线图',\n            scatter: '散点图',\n            effectScatter: '涟漪散点图',\n            radar: '雷达图',\n            tree: '树图',\n            treemap: '矩形树图',\n            boxplot: '箱型图',\n            candlestick: 'K线图',\n            k: 'K线图',\n            heatmap: '热力图',\n            map: '地图',\n            parallel: '平行坐标图',\n            lines: '线图',\n            graph: '关系图',\n            sankey: '桑基图',\n            funnel: '漏斗图',\n            gauge: '仪表盘图',\n            pictorialBar: '象形柱图',\n            themeRiver: '主题河流图',\n            sunburst: '旭日图'\n        }\n    },\n    aria: {\n        general: {\n            withTitle: '这是一个关于“{title}”的图表。',\n            withoutTitle: '这是一个图表，'\n        },\n        series: {\n            single: {\n                prefix: '',\n                withName: '图表类型是{seriesType}，表示{seriesName}。',\n                withoutName: '图表类型是{seriesType}。'\n            },\n            multiple: {\n                prefix: '它由{seriesCount}个图表系列组成。',\n                withName: '第{seriesId}个系列是一个表示{seriesName}的{seriesType}，',\n                withoutName: '第{seriesId}个系列是一个{seriesType}，',\n                separator: {\n                    middle: '；',\n                    end: '。'\n                }\n            }\n        },\n        data: {\n            allData: '其数据是——',\n            partialData: '其中，前{displayCnt}项是——',\n            withName: '{name}的数据是{value}',\n            withoutName: '{value}',\n            separator: {\n                middle: '，',\n                end: ''\n            }\n        }\n    }\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar aria = function (dom, ecModel) {\n    var ariaModel = ecModel.getModel('aria');\n    if (!ariaModel.get('show')) {\n        return;\n    }\n    else if (ariaModel.get('description')) {\n        dom.setAttribute('aria-label', ariaModel.get('description'));\n        return;\n    }\n\n    var seriesCnt = 0;\n    ecModel.eachSeries(function (seriesModel, idx) {\n        ++seriesCnt;\n    }, this);\n\n    var maxDataCnt = ariaModel.get('data.maxCount') || 10;\n    var maxSeriesCnt = ariaModel.get('series.maxCount') || 10;\n    var displaySeriesCnt = Math.min(seriesCnt, maxSeriesCnt);\n\n    var ariaLabel;\n    if (seriesCnt < 1) {\n        // No series, no aria label\n        return;\n    }\n    else {\n        var title = getTitle();\n        if (title) {\n            ariaLabel = replace(getConfig('general.withTitle'), {\n                title: title\n            });\n        }\n        else {\n            ariaLabel = getConfig('general.withoutTitle');\n        }\n\n        var seriesLabels = [];\n        var prefix = seriesCnt > 1\n            ? 'series.multiple.prefix'\n            : 'series.single.prefix';\n        ariaLabel += replace(getConfig(prefix), { seriesCount: seriesCnt });\n\n        ecModel.eachSeries(function (seriesModel, idx) {\n            if (idx < displaySeriesCnt) {\n                var seriesLabel;\n\n                var seriesName = seriesModel.get('name');\n                var seriesTpl = 'series.'\n                    + (seriesCnt > 1 ? 'multiple' : 'single') + '.';\n                seriesLabel = getConfig(seriesName\n                    ? seriesTpl + 'withName'\n                    : seriesTpl + 'withoutName');\n\n                seriesLabel = replace(seriesLabel, {\n                    seriesId: seriesModel.seriesIndex,\n                    seriesName: seriesModel.get('name'),\n                    seriesType: getSeriesTypeName(seriesModel.subType)\n                });\n\n                var data = seriesModel.getData();\n                window.data = data;\n                if (data.count() > maxDataCnt) {\n                    // Show part of data\n                    seriesLabel += replace(getConfig('data.partialData'), {\n                        displayCnt: maxDataCnt\n                    });\n                }\n                else {\n                    seriesLabel += getConfig('data.allData');\n                }\n\n                var dataLabels = [];\n                for (var i = 0; i < data.count(); i++) {\n                    if (i < maxDataCnt) {\n                        var name = data.getName(i);\n                        var value = retrieveRawValue(data, i);\n                        dataLabels.push(\n                            replace(\n                                name\n                                    ? getConfig('data.withName')\n                                    : getConfig('data.withoutName'),\n                                {\n                                    name: name,\n                                    value: value\n                                }\n                            )\n                        );\n                    }\n                }\n                seriesLabel += dataLabels\n                    .join(getConfig('data.separator.middle'))\n                    + getConfig('data.separator.end');\n\n                seriesLabels.push(seriesLabel);\n            }\n        });\n\n        ariaLabel += seriesLabels\n            .join(getConfig('series.multiple.separator.middle'))\n            + getConfig('series.multiple.separator.end');\n\n        dom.setAttribute('aria-label', ariaLabel);\n    }\n\n    function replace(str, keyValues) {\n        if (typeof str !== 'string') {\n            return str;\n        }\n\n        var result = str;\n        each$1(keyValues, function (value, key) {\n            result = result.replace(\n                new RegExp('\\\\{\\\\s*' + key + '\\\\s*\\\\}', 'g'),\n                value\n            );\n        });\n        return result;\n    }\n\n    function getConfig(path) {\n        var userConfig = ariaModel.get(path);\n        if (userConfig == null) {\n            var pathArr = path.split('.');\n            var result = lang.aria;\n            for (var i = 0; i < pathArr.length; ++i) {\n                result = result[pathArr[i]];\n            }\n            return result;\n        }\n        else {\n            return userConfig;\n        }\n    }\n\n    function getTitle() {\n        var title = ecModel.getModel('title').option;\n        if (title && title.length) {\n            title = title[0];\n        }\n        return title && title.text;\n    }\n\n    function getSeriesTypeName(type) {\n        return lang.series.typeNames[type] || '自定义图';\n    }\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar PI$1 = Math.PI;\n\n/**\n * @param {module:echarts/ExtensionAPI} api\n * @param {Object} [opts]\n * @param {string} [opts.text]\n * @param {string} [opts.color]\n * @param {string} [opts.textColor]\n * @return {module:zrender/Element}\n */\nvar loadingDefault = function (api, opts) {\n    opts = opts || {};\n    defaults(opts, {\n        text: 'loading',\n        color: '#c23531',\n        textColor: '#000',\n        maskColor: 'rgba(255, 255, 255, 0.8)',\n        zlevel: 0\n    });\n    var mask = new Rect({\n        style: {\n            fill: opts.maskColor\n        },\n        zlevel: opts.zlevel,\n        z: 10000\n    });\n    var arc = new Arc({\n        shape: {\n            startAngle: -PI$1 / 2,\n            endAngle: -PI$1 / 2 + 0.1,\n            r: 10\n        },\n        style: {\n            stroke: opts.color,\n            lineCap: 'round',\n            lineWidth: 5\n        },\n        zlevel: opts.zlevel,\n        z: 10001\n    });\n    var labelRect = new Rect({\n        style: {\n            fill: 'none',\n            text: opts.text,\n            textPosition: 'right',\n            textDistance: 10,\n            textFill: opts.textColor\n        },\n        zlevel: opts.zlevel,\n        z: 10001\n    });\n\n    arc.animateShape(true)\n        .when(1000, {\n            endAngle: PI$1 * 3 / 2\n        })\n        .start('circularInOut');\n    arc.animateShape(true)\n        .when(1000, {\n            startAngle: PI$1 * 3 / 2\n        })\n        .delay(300)\n        .start('circularInOut');\n\n    var group = new Group();\n    group.add(arc);\n    group.add(labelRect);\n    group.add(mask);\n    // Inject resize\n    group.resize = function () {\n        var cx = api.getWidth() / 2;\n        var cy = api.getHeight() / 2;\n        arc.setShape({\n            cx: cx,\n            cy: cy\n        });\n        var r = arc.shape.r;\n        labelRect.setShape({\n            x: cx - r,\n            y: cy - r,\n            width: r * 2,\n            height: r * 2\n        });\n\n        mask.setShape({\n            x: 0,\n            y: 0,\n            width: api.getWidth(),\n            height: api.getHeight()\n        });\n    };\n    group.resize();\n    return group;\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * @module echarts/stream/Scheduler\n */\n\n/**\n * @constructor\n */\nfunction Scheduler(ecInstance, api, dataProcessorHandlers, visualHandlers) {\n    this.ecInstance = ecInstance;\n    this.api = api;\n    this.unfinished;\n\n    // Fix current processors in case that in some rear cases that\n    // processors might be registered after echarts instance created.\n    // Register processors incrementally for a echarts instance is\n    // not supported by this stream architecture.\n    var dataProcessorHandlers = this._dataProcessorHandlers = dataProcessorHandlers.slice();\n    var visualHandlers = this._visualHandlers = visualHandlers.slice();\n    this._allHandlers = dataProcessorHandlers.concat(visualHandlers);\n\n    /**\n     * @private\n     * @type {\n     *     [handlerUID: string]: {\n     *         seriesTaskMap?: {\n     *             [seriesUID: string]: Task\n     *         },\n     *         overallTask?: Task\n     *     }\n     * }\n     */\n    this._stageTaskMap = createHashMap();\n}\n\nvar proto = Scheduler.prototype;\n\n/**\n * @param {module:echarts/model/Global} ecModel\n * @param {Object} payload\n */\nproto.restoreData = function (ecModel, payload) {\n    // TODO: Only restroe needed series and components, but not all components.\n    // Currently `restoreData` of all of the series and component will be called.\n    // But some independent components like `title`, `legend`, `graphic`, `toolbox`,\n    // `tooltip`, `axisPointer`, etc, do not need series refresh when `setOption`,\n    // and some components like coordinate system, axes, dataZoom, visualMap only\n    // need their target series refresh.\n    // (1) If we are implementing this feature some day, we should consider these cases:\n    // if a data processor depends on a component (e.g., dataZoomProcessor depends\n    // on the settings of `dataZoom`), it should be re-performed if the component\n    // is modified by `setOption`.\n    // (2) If a processor depends on sevral series, speicified by its `getTargetSeries`,\n    // it should be re-performed when the result array of `getTargetSeries` changed.\n    // We use `dependencies` to cover these issues.\n    // (3) How to update target series when coordinate system related components modified.\n\n    // TODO: simply the dirty mechanism? Check whether only the case here can set tasks dirty,\n    // and this case all of the tasks will be set as dirty.\n\n    ecModel.restoreData(payload);\n\n    // Theoretically an overall task not only depends on each of its target series, but also\n    // depends on all of the series.\n    // The overall task is not in pipeline, and `ecModel.restoreData` only set pipeline tasks\n    // dirty. If `getTargetSeries` of an overall task returns nothing, we should also ensure\n    // that the overall task is set as dirty and to be performed, otherwise it probably cause\n    // state chaos. So we have to set dirty of all of the overall tasks manually, otherwise it\n    // probably cause state chaos (consider `dataZoomProcessor`).\n    this._stageTaskMap.each(function (taskRecord) {\n        var overallTask = taskRecord.overallTask;\n        overallTask && overallTask.dirty();\n    });\n};\n\n// If seriesModel provided, incremental threshold is check by series data.\nproto.getPerformArgs = function (task, isBlock) {\n    // For overall task\n    if (!task.__pipeline) {\n        return;\n    }\n\n    var pipeline = this._pipelineMap.get(task.__pipeline.id);\n    var pCtx = pipeline.context;\n    var incremental = !isBlock\n        && pipeline.progressiveEnabled\n        && (!pCtx || pCtx.progressiveRender)\n        && task.__idxInPipeline > pipeline.blockIndex;\n\n    var step = incremental ? pipeline.step : null;\n    var modDataCount = pCtx && pCtx.modDataCount;\n    var modBy = modDataCount != null ? Math.ceil(modDataCount / step) : null;\n\n    return {step: step, modBy: modBy, modDataCount: modDataCount};\n};\n\nproto.getPipeline = function (pipelineId) {\n    return this._pipelineMap.get(pipelineId);\n};\n\n/**\n * Current, progressive rendering starts from visual and layout.\n * Always detect render mode in the same stage, avoiding that incorrect\n * detection caused by data filtering.\n * Caution:\n * `updateStreamModes` use `seriesModel.getData()`.\n */\nproto.updateStreamModes = function (seriesModel, view) {\n    var pipeline = this._pipelineMap.get(seriesModel.uid);\n    var data = seriesModel.getData();\n    var dataLen = data.count();\n\n    // `progressiveRender` means that can render progressively in each\n    // animation frame. Note that some types of series do not provide\n    // `view.incrementalPrepareRender` but support `chart.appendData`. We\n    // use the term `incremental` but not `progressive` to describe the\n    // case that `chart.appendData`.\n    var progressiveRender = pipeline.progressiveEnabled\n        && view.incrementalPrepareRender\n        && dataLen >= pipeline.threshold;\n\n    var large = seriesModel.get('large') && dataLen >= seriesModel.get('largeThreshold');\n\n    // TODO: modDataCount should not updated if `appendData`, otherwise cause whole repaint.\n    // see `test/candlestick-large3.html`\n    var modDataCount = seriesModel.get('progressiveChunkMode') === 'mod' ? dataLen : null;\n\n    seriesModel.pipelineContext = pipeline.context = {\n        progressiveRender: progressiveRender,\n        modDataCount: modDataCount,\n        large: large\n    };\n};\n\nproto.restorePipelines = function (ecModel) {\n    var scheduler = this;\n    var pipelineMap = scheduler._pipelineMap = createHashMap();\n\n    ecModel.eachSeries(function (seriesModel) {\n        var progressive = seriesModel.getProgressive();\n        var pipelineId = seriesModel.uid;\n\n        pipelineMap.set(pipelineId, {\n            id: pipelineId,\n            head: null,\n            tail: null,\n            threshold: seriesModel.getProgressiveThreshold(),\n            progressiveEnabled: progressive\n                && !(seriesModel.preventIncremental && seriesModel.preventIncremental()),\n            blockIndex: -1,\n            step: Math.round(progressive || 700),\n            count: 0\n        });\n\n        pipe(scheduler, seriesModel, seriesModel.dataTask);\n    });\n};\n\nproto.prepareStageTasks = function () {\n    var stageTaskMap = this._stageTaskMap;\n    var ecModel = this.ecInstance.getModel();\n    var api = this.api;\n\n    each$1(this._allHandlers, function (handler) {\n        var record = stageTaskMap.get(handler.uid) || stageTaskMap.set(handler.uid, []);\n\n        handler.reset && createSeriesStageTask(this, handler, record, ecModel, api);\n        handler.overallReset && createOverallStageTask(this, handler, record, ecModel, api);\n    }, this);\n};\n\nproto.prepareView = function (view, model, ecModel, api) {\n    var renderTask = view.renderTask;\n    var context = renderTask.context;\n\n    context.model = model;\n    context.ecModel = ecModel;\n    context.api = api;\n\n    renderTask.__block = !view.incrementalPrepareRender;\n\n    pipe(this, model, renderTask);\n};\n\n\nproto.performDataProcessorTasks = function (ecModel, payload) {\n    // If we do not use `block` here, it should be considered when to update modes.\n    performStageTasks(this, this._dataProcessorHandlers, ecModel, payload, {block: true});\n};\n\n// opt\n// opt.visualType: 'visual' or 'layout'\n// opt.setDirty\nproto.performVisualTasks = function (ecModel, payload, opt) {\n    performStageTasks(this, this._visualHandlers, ecModel, payload, opt);\n};\n\nfunction performStageTasks(scheduler, stageHandlers, ecModel, payload, opt) {\n    opt = opt || {};\n    var unfinished;\n\n    each$1(stageHandlers, function (stageHandler, idx) {\n        if (opt.visualType && opt.visualType !== stageHandler.visualType) {\n            return;\n        }\n\n        var stageHandlerRecord = scheduler._stageTaskMap.get(stageHandler.uid);\n        var seriesTaskMap = stageHandlerRecord.seriesTaskMap;\n        var overallTask = stageHandlerRecord.overallTask;\n\n        if (overallTask) {\n            var overallNeedDirty;\n            var agentStubMap = overallTask.agentStubMap;\n            agentStubMap.each(function (stub) {\n                if (needSetDirty(opt, stub)) {\n                    stub.dirty();\n                    overallNeedDirty = true;\n                }\n            });\n            overallNeedDirty && overallTask.dirty();\n            updatePayload(overallTask, payload);\n            var performArgs = scheduler.getPerformArgs(overallTask, opt.block);\n            // Execute stubs firstly, which may set the overall task dirty,\n            // then execute the overall task. And stub will call seriesModel.setData,\n            // which ensures that in the overallTask seriesModel.getData() will not\n            // return incorrect data.\n            agentStubMap.each(function (stub) {\n                stub.perform(performArgs);\n            });\n            unfinished |= overallTask.perform(performArgs);\n        }\n        else if (seriesTaskMap) {\n            seriesTaskMap.each(function (task, pipelineId) {\n                if (needSetDirty(opt, task)) {\n                    task.dirty();\n                }\n                var performArgs = scheduler.getPerformArgs(task, opt.block);\n                performArgs.skip = !stageHandler.performRawSeries\n                    && ecModel.isSeriesFiltered(task.context.model);\n                updatePayload(task, payload);\n                unfinished |= task.perform(performArgs);\n            });\n        }\n    });\n\n    function needSetDirty(opt, task) {\n        return opt.setDirty && (!opt.dirtyMap || opt.dirtyMap.get(task.__pipeline.id));\n    }\n\n    scheduler.unfinished |= unfinished;\n}\n\nproto.performSeriesTasks = function (ecModel) {\n    var unfinished;\n\n    ecModel.eachSeries(function (seriesModel) {\n        // Progress to the end for dataInit and dataRestore.\n        unfinished |= seriesModel.dataTask.perform();\n    });\n\n    this.unfinished |= unfinished;\n};\n\nproto.plan = function () {\n    // Travel pipelines, check block.\n    this._pipelineMap.each(function (pipeline) {\n        var task = pipeline.tail;\n        do {\n            if (task.__block) {\n                pipeline.blockIndex = task.__idxInPipeline;\n                break;\n            }\n            task = task.getUpstream();\n        }\n        while (task);\n    });\n};\n\nvar updatePayload = proto.updatePayload = function (task, payload) {\n    payload !== 'remain' && (task.context.payload = payload);\n};\n\nfunction createSeriesStageTask(scheduler, stageHandler, stageHandlerRecord, ecModel, api) {\n    var seriesTaskMap = stageHandlerRecord.seriesTaskMap\n        || (stageHandlerRecord.seriesTaskMap = createHashMap());\n    var seriesType = stageHandler.seriesType;\n    var getTargetSeries = stageHandler.getTargetSeries;\n\n    // If a stageHandler should cover all series, `createOnAllSeries` should be declared mandatorily,\n    // to avoid some typo or abuse. Otherwise if an extension do not specify a `seriesType`,\n    // it works but it may cause other irrelevant charts blocked.\n    if (stageHandler.createOnAllSeries) {\n        ecModel.eachRawSeries(create);\n    }\n    else if (seriesType) {\n        ecModel.eachRawSeriesByType(seriesType, create);\n    }\n    else if (getTargetSeries) {\n        getTargetSeries(ecModel, api).each(create);\n    }\n\n    function create(seriesModel) {\n        var pipelineId = seriesModel.uid;\n\n        // Init tasks for each seriesModel only once.\n        // Reuse original task instance.\n        var task = seriesTaskMap.get(pipelineId)\n            || seriesTaskMap.set(pipelineId, createTask({\n                plan: seriesTaskPlan,\n                reset: seriesTaskReset,\n                count: seriesTaskCount\n            }));\n        task.context = {\n            model: seriesModel,\n            ecModel: ecModel,\n            api: api,\n            useClearVisual: stageHandler.isVisual && !stageHandler.isLayout,\n            plan: stageHandler.plan,\n            reset: stageHandler.reset,\n            scheduler: scheduler\n        };\n        pipe(scheduler, seriesModel, task);\n    }\n\n    // Clear unused series tasks.\n    var pipelineMap = scheduler._pipelineMap;\n    seriesTaskMap.each(function (task, pipelineId) {\n        if (!pipelineMap.get(pipelineId)) {\n            task.dispose();\n            seriesTaskMap.removeKey(pipelineId);\n        }\n    });\n}\n\nfunction createOverallStageTask(scheduler, stageHandler, stageHandlerRecord, ecModel, api) {\n    var overallTask = stageHandlerRecord.overallTask = stageHandlerRecord.overallTask\n        // For overall task, the function only be called on reset stage.\n        || createTask({reset: overallTaskReset});\n\n    overallTask.context = {\n        ecModel: ecModel,\n        api: api,\n        overallReset: stageHandler.overallReset,\n        scheduler: scheduler\n    };\n\n    // Reuse orignal stubs.\n    var agentStubMap = overallTask.agentStubMap = overallTask.agentStubMap || createHashMap();\n\n    var seriesType = stageHandler.seriesType;\n    var getTargetSeries = stageHandler.getTargetSeries;\n    var overallProgress = true;\n    var modifyOutputEnd = stageHandler.modifyOutputEnd;\n\n    // An overall task with seriesType detected or has `getTargetSeries`, we add\n    // stub in each pipelines, it will set the overall task dirty when the pipeline\n    // progress. Moreover, to avoid call the overall task each frame (too frequent),\n    // we set the pipeline block.\n    if (seriesType) {\n        ecModel.eachRawSeriesByType(seriesType, createStub);\n    }\n    else if (getTargetSeries) {\n        getTargetSeries(ecModel, api).each(createStub);\n    }\n    // Otherwise, (usually it is legancy case), the overall task will only be\n    // executed when upstream dirty. Otherwise the progressive rendering of all\n    // pipelines will be disabled unexpectedly. But it still needs stubs to receive\n    // dirty info from upsteam.\n    else {\n        overallProgress = false;\n        each$1(ecModel.getSeries(), createStub);\n    }\n\n    function createStub(seriesModel) {\n        var pipelineId = seriesModel.uid;\n        var stub = agentStubMap.get(pipelineId);\n        if (!stub) {\n            stub = agentStubMap.set(pipelineId, createTask(\n                {reset: stubReset, onDirty: stubOnDirty}\n            ));\n            // When the result of `getTargetSeries` changed, the overallTask\n            // should be set as dirty and re-performed.\n            overallTask.dirty();\n        }\n        stub.context = {\n            model: seriesModel,\n            overallProgress: overallProgress,\n            modifyOutputEnd: modifyOutputEnd\n        };\n        stub.agent = overallTask;\n        stub.__block = overallProgress;\n\n        pipe(scheduler, seriesModel, stub);\n    }\n\n    // Clear unused stubs.\n    var pipelineMap = scheduler._pipelineMap;\n    agentStubMap.each(function (stub, pipelineId) {\n        if (!pipelineMap.get(pipelineId)) {\n            stub.dispose();\n            // When the result of `getTargetSeries` changed, the overallTask\n            // should be set as dirty and re-performed.\n            overallTask.dirty();\n            agentStubMap.removeKey(pipelineId);\n        }\n    });\n}\n\nfunction overallTaskReset(context) {\n    context.overallReset(\n        context.ecModel, context.api, context.payload\n    );\n}\n\nfunction stubReset(context, upstreamContext) {\n    return context.overallProgress && stubProgress;\n}\n\nfunction stubProgress() {\n    this.agent.dirty();\n    this.getDownstream().dirty();\n}\n\nfunction stubOnDirty() {\n    this.agent && this.agent.dirty();\n}\n\nfunction seriesTaskPlan(context) {\n    return context.plan && context.plan(\n        context.model, context.ecModel, context.api, context.payload\n    );\n}\n\nfunction seriesTaskReset(context) {\n    if (context.useClearVisual) {\n        context.data.clearAllVisual();\n    }\n    var resetDefines = context.resetDefines = normalizeToArray(context.reset(\n        context.model, context.ecModel, context.api, context.payload\n    ));\n    return resetDefines.length > 1\n        ? map(resetDefines, function (v, idx) {\n            return makeSeriesTaskProgress(idx);\n        })\n        : singleSeriesTaskProgress;\n}\n\nvar singleSeriesTaskProgress = makeSeriesTaskProgress(0);\n\nfunction makeSeriesTaskProgress(resetDefineIdx) {\n    return function (params, context) {\n        var data = context.data;\n        var resetDefine = context.resetDefines[resetDefineIdx];\n\n        if (resetDefine && resetDefine.dataEach) {\n            for (var i = params.start; i < params.end; i++) {\n                resetDefine.dataEach(data, i);\n            }\n        }\n        else if (resetDefine && resetDefine.progress) {\n            resetDefine.progress(params, data);\n        }\n    };\n}\n\nfunction seriesTaskCount(context) {\n    return context.data.count();\n}\n\nfunction pipe(scheduler, seriesModel, task) {\n    var pipelineId = seriesModel.uid;\n    var pipeline = scheduler._pipelineMap.get(pipelineId);\n    !pipeline.head && (pipeline.head = task);\n    pipeline.tail && pipeline.tail.pipe(task);\n    pipeline.tail = task;\n    task.__idxInPipeline = pipeline.count++;\n    task.__pipeline = pipeline;\n}\n\nScheduler.wrapStageHandler = function (stageHandler, visualType) {\n    if (isFunction$1(stageHandler)) {\n        stageHandler = {\n            overallReset: stageHandler,\n            seriesType: detectSeriseType(stageHandler)\n        };\n    }\n\n    stageHandler.uid = getUID('stageHandler');\n    visualType && (stageHandler.visualType = visualType);\n\n    return stageHandler;\n};\n\n\n\n/**\n * Only some legacy stage handlers (usually in echarts extensions) are pure function.\n * To ensure that they can work normally, they should work in block mode, that is,\n * they should not be started util the previous tasks finished. So they cause the\n * progressive rendering disabled. We try to detect the series type, to narrow down\n * the block range to only the series type they concern, but not all series.\n */\nfunction detectSeriseType(legacyFunc) {\n    seriesType = null;\n    try {\n        // Assume there is no async when calling `eachSeriesByType`.\n        legacyFunc(ecModelMock, apiMock);\n    }\n    catch (e) {\n    }\n    return seriesType;\n}\n\nvar ecModelMock = {};\nvar apiMock = {};\nvar seriesType;\n\nmockMethods(ecModelMock, GlobalModel);\nmockMethods(apiMock, ExtensionAPI);\necModelMock.eachSeriesByType = ecModelMock.eachRawSeriesByType = function (type) {\n    seriesType = type;\n};\necModelMock.eachComponent = function (cond) {\n    if (cond.mainType === 'series' && cond.subType) {\n        seriesType = cond.subType;\n    }\n};\n\nfunction mockMethods(target, Clz) {\n    /* eslint-disable */\n    for (var name in Clz.prototype) {\n        // Do not use hasOwnProperty\n        target[name] = noop;\n    }\n    /* eslint-enable */\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar colorAll = [\n    '#37A2DA', '#32C5E9', '#67E0E3', '#9FE6B8', '#FFDB5C', '#ff9f7f',\n    '#fb7293', '#E062AE', '#E690D1', '#e7bcf3', '#9d96f5', '#8378EA', '#96BFFF'\n];\n\nvar lightTheme = {\n\n    color: colorAll,\n\n    colorLayer: [\n        ['#37A2DA', '#ffd85c', '#fd7b5f'],\n        ['#37A2DA', '#67E0E3', '#FFDB5C', '#ff9f7f', '#E062AE', '#9d96f5'],\n        ['#37A2DA', '#32C5E9', '#9FE6B8', '#FFDB5C', '#ff9f7f', '#fb7293', '#e7bcf3', '#8378EA', '#96BFFF'],\n        colorAll\n    ]\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar contrastColor = '#eee';\nvar axisCommon = function () {\n    return {\n        axisLine: {\n            lineStyle: {\n                color: contrastColor\n            }\n        },\n        axisTick: {\n            lineStyle: {\n                color: contrastColor\n            }\n        },\n        axisLabel: {\n            textStyle: {\n                color: contrastColor\n            }\n        },\n        splitLine: {\n            lineStyle: {\n                type: 'dashed',\n                color: '#aaa'\n            }\n        },\n        splitArea: {\n            areaStyle: {\n                color: contrastColor\n            }\n        }\n    };\n};\n\nvar colorPalette = [\n    '#dd6b66', '#759aa0', '#e69d87', '#8dc1a9', '#ea7e53',\n    '#eedd78', '#73a373', '#73b9bc', '#7289ab', '#91ca8c', '#f49f42'\n];\nvar theme = {\n    color: colorPalette,\n    backgroundColor: '#333',\n    tooltip: {\n        axisPointer: {\n            lineStyle: {\n                color: contrastColor\n            },\n            crossStyle: {\n                color: contrastColor\n            }\n        }\n    },\n    legend: {\n        textStyle: {\n            color: contrastColor\n        }\n    },\n    textStyle: {\n        color: contrastColor\n    },\n    title: {\n        textStyle: {\n            color: contrastColor\n        }\n    },\n    toolbox: {\n        iconStyle: {\n            normal: {\n                borderColor: contrastColor\n            }\n        }\n    },\n    dataZoom: {\n        textStyle: {\n            color: contrastColor\n        }\n    },\n    visualMap: {\n        textStyle: {\n            color: contrastColor\n        }\n    },\n    timeline: {\n        lineStyle: {\n            color: contrastColor\n        },\n        itemStyle: {\n            normal: {\n                color: colorPalette[1]\n            }\n        },\n        label: {\n            normal: {\n                textStyle: {\n                    color: contrastColor\n                }\n            }\n        },\n        controlStyle: {\n            normal: {\n                color: contrastColor,\n                borderColor: contrastColor\n            }\n        }\n    },\n    timeAxis: axisCommon(),\n    logAxis: axisCommon(),\n    valueAxis: axisCommon(),\n    categoryAxis: axisCommon(),\n\n    line: {\n        symbol: 'circle'\n    },\n    graph: {\n        color: colorPalette\n    },\n    gauge: {\n        title: {\n            textStyle: {\n                color: contrastColor\n            }\n        }\n    },\n    candlestick: {\n        itemStyle: {\n            normal: {\n                color: '#FD1050',\n                color0: '#0CF49B',\n                borderColor: '#FD1050',\n                borderColor0: '#0CF49B'\n            }\n        }\n    }\n};\ntheme.categoryAxis.splitLine.show = false;\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * This module is imported by echarts directly.\n *\n * Notice:\n * Always keep this file exists for backward compatibility.\n * Because before 4.1.0, dataset is an optional component,\n * some users may import this module manually.\n */\n\nComponentModel.extend({\n\n    type: 'dataset',\n\n    /**\n     * @protected\n     */\n    defaultOption: {\n\n        // 'row', 'column'\n        seriesLayoutBy: SERIES_LAYOUT_BY_COLUMN,\n\n        // null/'auto': auto detect header, see \"module:echarts/data/helper/sourceHelper\"\n        sourceHeader: null,\n\n        dimensions: null,\n\n        source: null\n    },\n\n    optionUpdated: function () {\n        detectSourceFormat(this);\n    }\n\n});\n\nComponent$1.extend({\n\n    type: 'dataset'\n\n});\n\n/**\n * 椭圆形状\n * @module zrender/graphic/shape/Ellipse\n */\n\nvar Ellipse = Path.extend({\n\n    type: 'ellipse',\n\n    shape: {\n        cx: 0, cy: 0,\n        rx: 0, ry: 0\n    },\n\n    buildPath: function (ctx, shape) {\n        var k = 0.5522848;\n        var x = shape.cx;\n        var y = shape.cy;\n        var a = shape.rx;\n        var b = shape.ry;\n        var ox = a * k; // 水平控制点偏移量\n        var oy = b * k; // 垂直控制点偏移量\n        // 从椭圆的左端点开始顺时针绘制四条三次贝塞尔曲线\n        ctx.moveTo(x - a, y);\n        ctx.bezierCurveTo(x - a, y - oy, x - ox, y - b, x, y - b);\n        ctx.bezierCurveTo(x + ox, y - b, x + a, y - oy, x + a, y);\n        ctx.bezierCurveTo(x + a, y + oy, x + ox, y + b, x, y + b);\n        ctx.bezierCurveTo(x - ox, y + b, x - a, y + oy, x - a, y);\n        ctx.closePath();\n    }\n});\n\n// import RadialGradient from '../graphic/RadialGradient';\n// import Pattern from '../graphic/Pattern';\n// import * as vector from '../core/vector';\n// Most of the values can be separated by comma and/or white space.\nvar DILIMITER_REG = /[\\s,]+/;\n\n/**\n * For big svg string, this method might be time consuming.\n *\n * @param {string} svg xml string\n * @return {Object} xml root.\n */\nfunction parseXML(svg) {\n    if (isString(svg)) {\n        var parser = new DOMParser();\n        svg = parser.parseFromString(svg, 'text/xml');\n    }\n\n    // Document node. If using $.get, doc node may be input.\n    if (svg.nodeType === 9) {\n        svg = svg.firstChild;\n    }\n    // nodeName of <!DOCTYPE svg> is also 'svg'.\n    while (svg.nodeName.toLowerCase() !== 'svg' || svg.nodeType !== 1) {\n        svg = svg.nextSibling;\n    }\n\n    return svg;\n}\n\nfunction SVGParser() {\n    this._defs = {};\n    this._root = null;\n\n    this._isDefine = false;\n    this._isText = false;\n}\n\nSVGParser.prototype.parse = function (xml, opt) {\n    opt = opt || {};\n\n    var svg = parseXML(xml);\n\n    if (!svg) {\n        throw new Error('Illegal svg');\n    }\n\n    var root = new Group();\n    this._root = root;\n    // parse view port\n    var viewBox = svg.getAttribute('viewBox') || '';\n\n    // If width/height not specified, means \"100%\" of `opt.width/height`.\n    // TODO: Other percent value not supported yet.\n    var width = parseFloat(svg.getAttribute('width') || opt.width);\n    var height = parseFloat(svg.getAttribute('height') || opt.height);\n    // If width/height not specified, set as null for output.\n    isNaN(width) && (width = null);\n    isNaN(height) && (height = null);\n\n    // Apply inline style on svg element.\n    parseAttributes(svg, root, null, true);\n\n    var child = svg.firstChild;\n    while (child) {\n        this._parseNode(child, root);\n        child = child.nextSibling;\n    }\n\n    var viewBoxRect;\n    var viewBoxTransform;\n\n    if (viewBox) {\n        var viewBoxArr = trim(viewBox).split(DILIMITER_REG);\n        // Some invalid case like viewBox: 'none'.\n        if (viewBoxArr.length >= 4) {\n            viewBoxRect = {\n                x: parseFloat(viewBoxArr[0] || 0),\n                y: parseFloat(viewBoxArr[1] || 0),\n                width: parseFloat(viewBoxArr[2]),\n                height: parseFloat(viewBoxArr[3])\n            };\n        }\n    }\n\n    if (viewBoxRect && width != null && height != null) {\n        viewBoxTransform = makeViewBoxTransform(viewBoxRect, width, height);\n\n        if (!opt.ignoreViewBox) {\n            // If set transform on the output group, it probably bring trouble when\n            // some users only intend to show the clipped content inside the viewBox,\n            // but not intend to transform the output group. So we keep the output\n            // group no transform. If the user intend to use the viewBox as a\n            // camera, just set `opt.ignoreViewBox` as `true` and set transfrom\n            // manually according to the viewBox info in the output of this method.\n            var elRoot = root;\n            root = new Group();\n            root.add(elRoot);\n            elRoot.scale = viewBoxTransform.scale.slice();\n            elRoot.position = viewBoxTransform.position.slice();\n        }\n    }\n\n    // Some shapes might be overflow the viewport, which should be\n    // clipped despite whether the viewBox is used, as the SVG does.\n    if (!opt.ignoreRootClip && width != null && height != null) {\n        root.setClipPath(new Rect({\n            shape: {x: 0, y: 0, width: width, height: height}\n        }));\n    }\n\n    // Set width/height on group just for output the viewport size.\n    return {\n        root: root,\n        width: width,\n        height: height,\n        viewBoxRect: viewBoxRect,\n        viewBoxTransform: viewBoxTransform\n    };\n};\n\nSVGParser.prototype._parseNode = function (xmlNode, parentGroup) {\n\n    var nodeName = xmlNode.nodeName.toLowerCase();\n\n    // TODO\n    // support <style>...</style> in svg, where nodeName is 'style',\n    // CSS classes is defined globally wherever the style tags are declared.\n\n    if (nodeName === 'defs') {\n        // define flag\n        this._isDefine = true;\n    }\n    else if (nodeName === 'text') {\n        this._isText = true;\n    }\n\n    var el;\n    if (this._isDefine) {\n        var parser = defineParsers[nodeName];\n        if (parser) {\n            var def = parser.call(this, xmlNode);\n            var id = xmlNode.getAttribute('id');\n            if (id) {\n                this._defs[id] = def;\n            }\n        }\n    }\n    else {\n        var parser = nodeParsers[nodeName];\n        if (parser) {\n            el = parser.call(this, xmlNode, parentGroup);\n            parentGroup.add(el);\n        }\n    }\n\n    var child = xmlNode.firstChild;\n    while (child) {\n        if (child.nodeType === 1) {\n            this._parseNode(child, el);\n        }\n        // Is text\n        if (child.nodeType === 3 && this._isText) {\n            this._parseText(child, el);\n        }\n        child = child.nextSibling;\n    }\n\n    // Quit define\n    if (nodeName === 'defs') {\n        this._isDefine = false;\n    }\n    else if (nodeName === 'text') {\n        this._isText = false;\n    }\n};\n\nSVGParser.prototype._parseText = function (xmlNode, parentGroup) {\n    if (xmlNode.nodeType === 1) {\n        var dx = xmlNode.getAttribute('dx') || 0;\n        var dy = xmlNode.getAttribute('dy') || 0;\n        this._textX += parseFloat(dx);\n        this._textY += parseFloat(dy);\n    }\n\n    var text = new Text({\n        style: {\n            text: xmlNode.textContent,\n            transformText: true\n        },\n        position: [this._textX || 0, this._textY || 0]\n    });\n\n    inheritStyle(parentGroup, text);\n    parseAttributes(xmlNode, text, this._defs);\n\n    var fontSize = text.style.fontSize;\n    if (fontSize && fontSize < 9) {\n        // PENDING\n        text.style.fontSize = 9;\n        text.scale = text.scale || [1, 1];\n        text.scale[0] *= fontSize / 9;\n        text.scale[1] *= fontSize / 9;\n    }\n\n    var rect = text.getBoundingRect();\n    this._textX += rect.width;\n\n    parentGroup.add(text);\n\n    return text;\n};\n\nvar nodeParsers = {\n    'g': function (xmlNode, parentGroup) {\n        var g = new Group();\n        inheritStyle(parentGroup, g);\n        parseAttributes(xmlNode, g, this._defs);\n\n        return g;\n    },\n    'rect': function (xmlNode, parentGroup) {\n        var rect = new Rect();\n        inheritStyle(parentGroup, rect);\n        parseAttributes(xmlNode, rect, this._defs);\n\n        rect.setShape({\n            x: parseFloat(xmlNode.getAttribute('x') || 0),\n            y: parseFloat(xmlNode.getAttribute('y') || 0),\n            width: parseFloat(xmlNode.getAttribute('width') || 0),\n            height: parseFloat(xmlNode.getAttribute('height') || 0)\n        });\n\n        // console.log(xmlNode.getAttribute('transform'));\n        // console.log(rect.transform);\n\n        return rect;\n    },\n    'circle': function (xmlNode, parentGroup) {\n        var circle = new Circle();\n        inheritStyle(parentGroup, circle);\n        parseAttributes(xmlNode, circle, this._defs);\n\n        circle.setShape({\n            cx: parseFloat(xmlNode.getAttribute('cx') || 0),\n            cy: parseFloat(xmlNode.getAttribute('cy') || 0),\n            r: parseFloat(xmlNode.getAttribute('r') || 0)\n        });\n\n        return circle;\n    },\n    'line': function (xmlNode, parentGroup) {\n        var line = new Line();\n        inheritStyle(parentGroup, line);\n        parseAttributes(xmlNode, line, this._defs);\n\n        line.setShape({\n            x1: parseFloat(xmlNode.getAttribute('x1') || 0),\n            y1: parseFloat(xmlNode.getAttribute('y1') || 0),\n            x2: parseFloat(xmlNode.getAttribute('x2') || 0),\n            y2: parseFloat(xmlNode.getAttribute('y2') || 0)\n        });\n\n        return line;\n    },\n    'ellipse': function (xmlNode, parentGroup) {\n        var ellipse = new Ellipse();\n        inheritStyle(parentGroup, ellipse);\n        parseAttributes(xmlNode, ellipse, this._defs);\n\n        ellipse.setShape({\n            cx: parseFloat(xmlNode.getAttribute('cx') || 0),\n            cy: parseFloat(xmlNode.getAttribute('cy') || 0),\n            rx: parseFloat(xmlNode.getAttribute('rx') || 0),\n            ry: parseFloat(xmlNode.getAttribute('ry') || 0)\n        });\n        return ellipse;\n    },\n    'polygon': function (xmlNode, parentGroup) {\n        var points = xmlNode.getAttribute('points');\n        if (points) {\n            points = parsePoints(points);\n        }\n        var polygon = new Polygon({\n            shape: {\n                points: points || []\n            }\n        });\n\n        inheritStyle(parentGroup, polygon);\n        parseAttributes(xmlNode, polygon, this._defs);\n\n        return polygon;\n    },\n    'polyline': function (xmlNode, parentGroup) {\n        var path = new Path();\n        inheritStyle(parentGroup, path);\n        parseAttributes(xmlNode, path, this._defs);\n\n        var points = xmlNode.getAttribute('points');\n        if (points) {\n            points = parsePoints(points);\n        }\n        var polyline = new Polyline({\n            shape: {\n                points: points || []\n            }\n        });\n\n        return polyline;\n    },\n    'image': function (xmlNode, parentGroup) {\n        var img = new ZImage();\n        inheritStyle(parentGroup, img);\n        parseAttributes(xmlNode, img, this._defs);\n\n        img.setStyle({\n            image: xmlNode.getAttribute('xlink:href'),\n            x: xmlNode.getAttribute('x'),\n            y: xmlNode.getAttribute('y'),\n            width: xmlNode.getAttribute('width'),\n            height: xmlNode.getAttribute('height')\n        });\n\n        return img;\n    },\n    'text': function (xmlNode, parentGroup) {\n        var x = xmlNode.getAttribute('x') || 0;\n        var y = xmlNode.getAttribute('y') || 0;\n        var dx = xmlNode.getAttribute('dx') || 0;\n        var dy = xmlNode.getAttribute('dy') || 0;\n\n        this._textX = parseFloat(x) + parseFloat(dx);\n        this._textY = parseFloat(y) + parseFloat(dy);\n\n        var g = new Group();\n        inheritStyle(parentGroup, g);\n        parseAttributes(xmlNode, g, this._defs);\n\n        return g;\n    },\n    'tspan': function (xmlNode, parentGroup) {\n        var x = xmlNode.getAttribute('x');\n        var y = xmlNode.getAttribute('y');\n        if (x != null) {\n            // new offset x\n            this._textX = parseFloat(x);\n        }\n        if (y != null) {\n            // new offset y\n            this._textY = parseFloat(y);\n        }\n        var dx = xmlNode.getAttribute('dx') || 0;\n        var dy = xmlNode.getAttribute('dy') || 0;\n\n        var g = new Group();\n\n        inheritStyle(parentGroup, g);\n        parseAttributes(xmlNode, g, this._defs);\n\n\n        this._textX += dx;\n        this._textY += dy;\n\n        return g;\n    },\n    'path': function (xmlNode, parentGroup) {\n        // TODO svg fill rule\n        // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-rule\n        // path.style.globalCompositeOperation = 'xor';\n        var d = xmlNode.getAttribute('d') || '';\n\n        // Performance sensitive.\n\n        var path = createFromString(d);\n\n        inheritStyle(parentGroup, path);\n        parseAttributes(xmlNode, path, this._defs);\n\n        return path;\n    }\n};\n\nvar defineParsers = {\n\n    'lineargradient': function (xmlNode) {\n        var x1 = parseInt(xmlNode.getAttribute('x1') || 0, 10);\n        var y1 = parseInt(xmlNode.getAttribute('y1') || 0, 10);\n        var x2 = parseInt(xmlNode.getAttribute('x2') || 10, 10);\n        var y2 = parseInt(xmlNode.getAttribute('y2') || 0, 10);\n\n        var gradient = new LinearGradient(x1, y1, x2, y2);\n\n        _parseGradientColorStops(xmlNode, gradient);\n\n        return gradient;\n    },\n\n    'radialgradient': function (xmlNode) {\n\n    }\n};\n\nfunction _parseGradientColorStops(xmlNode, gradient) {\n\n    var stop = xmlNode.firstChild;\n\n    while (stop) {\n        if (stop.nodeType === 1) {\n            var offset = stop.getAttribute('offset');\n            if (offset.indexOf('%') > 0) {  // percentage\n                offset = parseInt(offset, 10) / 100;\n            }\n            else if (offset) {    // number from 0 to 1\n                offset = parseFloat(offset);\n            }\n            else {\n                offset = 0;\n            }\n\n            var stopColor = stop.getAttribute('stop-color') || '#000000';\n\n            gradient.addColorStop(offset, stopColor);\n        }\n        stop = stop.nextSibling;\n    }\n}\n\nfunction inheritStyle(parent, child) {\n    if (parent && parent.__inheritedStyle) {\n        if (!child.__inheritedStyle) {\n            child.__inheritedStyle = {};\n        }\n        defaults(child.__inheritedStyle, parent.__inheritedStyle);\n    }\n}\n\nfunction parsePoints(pointsString) {\n    var list = trim(pointsString).split(DILIMITER_REG);\n    var points = [];\n\n    for (var i = 0; i < list.length; i += 2) {\n        var x = parseFloat(list[i]);\n        var y = parseFloat(list[i + 1]);\n        points.push([x, y]);\n    }\n    return points;\n}\n\nvar attributesMap = {\n    'fill': 'fill',\n    'stroke': 'stroke',\n    'stroke-width': 'lineWidth',\n    'opacity': 'opacity',\n    'fill-opacity': 'fillOpacity',\n    'stroke-opacity': 'strokeOpacity',\n    'stroke-dasharray': 'lineDash',\n    'stroke-dashoffset': 'lineDashOffset',\n    'stroke-linecap': 'lineCap',\n    'stroke-linejoin': 'lineJoin',\n    'stroke-miterlimit': 'miterLimit',\n    'font-family': 'fontFamily',\n    'font-size': 'fontSize',\n    'font-style': 'fontStyle',\n    'font-weight': 'fontWeight',\n\n    'text-align': 'textAlign',\n    'alignment-baseline': 'textBaseline'\n};\n\nfunction parseAttributes(xmlNode, el, defs, onlyInlineStyle) {\n    var zrStyle = el.__inheritedStyle || {};\n    var isTextEl = el.type === 'text';\n\n    // TODO Shadow\n    if (xmlNode.nodeType === 1) {\n        parseTransformAttribute(xmlNode, el);\n\n        extend(zrStyle, parseStyleAttribute(xmlNode));\n\n        if (!onlyInlineStyle) {\n            for (var svgAttrName in attributesMap) {\n                if (attributesMap.hasOwnProperty(svgAttrName)) {\n                    var attrValue = xmlNode.getAttribute(svgAttrName);\n                    if (attrValue != null) {\n                        zrStyle[attributesMap[svgAttrName]] = attrValue;\n                    }\n                }\n            }\n        }\n    }\n\n    var elFillProp = isTextEl ? 'textFill' : 'fill';\n    var elStrokeProp = isTextEl ? 'textStroke' : 'stroke';\n\n    el.style = el.style || new Style();\n    var elStyle = el.style;\n\n    zrStyle.fill != null && elStyle.set(elFillProp, getPaint(zrStyle.fill, defs));\n    zrStyle.stroke != null && elStyle.set(elStrokeProp, getPaint(zrStyle.stroke, defs));\n\n    each$1([\n        'lineWidth', 'opacity', 'fillOpacity', 'strokeOpacity', 'miterLimit', 'fontSize'\n    ], function (propName) {\n        var elPropName = (propName === 'lineWidth' && isTextEl) ? 'textStrokeWidth' : propName;\n        zrStyle[propName] != null && elStyle.set(elPropName, parseFloat(zrStyle[propName]));\n    });\n\n    if (!zrStyle.textBaseline || zrStyle.textBaseline === 'auto') {\n        zrStyle.textBaseline = 'alphabetic';\n    }\n    if (zrStyle.textBaseline === 'alphabetic') {\n        zrStyle.textBaseline = 'bottom';\n    }\n    if (zrStyle.textAlign === 'start') {\n        zrStyle.textAlign = 'left';\n    }\n    if (zrStyle.textAlign === 'end') {\n        zrStyle.textAlign = 'right';\n    }\n\n    each$1(['lineDashOffset', 'lineCap', 'lineJoin',\n        'fontWeight', 'fontFamily', 'fontStyle', 'textAlign', 'textBaseline'\n    ], function (propName) {\n        zrStyle[propName] != null && elStyle.set(propName, zrStyle[propName]);\n    });\n\n    if (zrStyle.lineDash) {\n        el.style.lineDash = trim(zrStyle.lineDash).split(DILIMITER_REG);\n    }\n\n    if (elStyle[elStrokeProp] && elStyle[elStrokeProp] !== 'none') {\n        // enable stroke\n        el[elStrokeProp] = true;\n    }\n\n    el.__inheritedStyle = zrStyle;\n}\n\n\nvar urlRegex = /url\\(\\s*#(.*?)\\)/;\nfunction getPaint(str, defs) {\n    // if (str === 'none') {\n    //     return;\n    // }\n    var urlMatch = defs && str && str.match(urlRegex);\n    if (urlMatch) {\n        var url = trim(urlMatch[1]);\n        var def = defs[url];\n        return def;\n    }\n    return str;\n}\n\nvar transformRegex = /(translate|scale|rotate|skewX|skewY|matrix)\\(([\\-\\s0-9\\.e,]*)\\)/g;\n\nfunction parseTransformAttribute(xmlNode, node) {\n    var transform = xmlNode.getAttribute('transform');\n    if (transform) {\n        transform = transform.replace(/,/g, ' ');\n        var m = null;\n        var transformOps = [];\n        transform.replace(transformRegex, function (str, type, value) {\n            transformOps.push(type, value);\n        });\n        for (var i = transformOps.length - 1; i > 0; i -= 2) {\n            var value = transformOps[i];\n            var type = transformOps[i - 1];\n            m = m || create$1();\n            switch (type) {\n                case 'translate':\n                    value = trim(value).split(DILIMITER_REG);\n                    translate(m, m, [parseFloat(value[0]), parseFloat(value[1] || 0)]);\n                    break;\n                case 'scale':\n                    value = trim(value).split(DILIMITER_REG);\n                    scale$1(m, m, [parseFloat(value[0]), parseFloat(value[1] || value[0])]);\n                    break;\n                case 'rotate':\n                    value = trim(value).split(DILIMITER_REG);\n                    rotate(m, m, parseFloat(value[0]));\n                    break;\n                case 'skew':\n                    value = trim(value).split(DILIMITER_REG);\n                    console.warn('Skew transform is not supported yet');\n                    break;\n                case 'matrix':\n                    var value = trim(value).split(DILIMITER_REG);\n                    m[0] = parseFloat(value[0]);\n                    m[1] = parseFloat(value[1]);\n                    m[2] = parseFloat(value[2]);\n                    m[3] = parseFloat(value[3]);\n                    m[4] = parseFloat(value[4]);\n                    m[5] = parseFloat(value[5]);\n                    break;\n            }\n        }\n        node.setLocalTransform(m);\n    }\n}\n\n// Value may contain space.\nvar styleRegex = /([^\\s:;]+)\\s*:\\s*([^:;]+)/g;\nfunction parseStyleAttribute(xmlNode) {\n    var style = xmlNode.getAttribute('style');\n    var result = {};\n\n    if (!style) {\n        return result;\n    }\n\n    var styleList = {};\n    styleRegex.lastIndex = 0;\n    var styleRegResult;\n    while ((styleRegResult = styleRegex.exec(style)) != null) {\n        styleList[styleRegResult[1]] = styleRegResult[2];\n    }\n\n    for (var svgAttrName in attributesMap) {\n        if (attributesMap.hasOwnProperty(svgAttrName) && styleList[svgAttrName] != null) {\n            result[attributesMap[svgAttrName]] = styleList[svgAttrName];\n        }\n    }\n\n    return result;\n}\n\n/**\n * @param {Array.<number>} viewBoxRect\n * @param {number} width\n * @param {number} height\n * @return {Object} {scale, position}\n */\nfunction makeViewBoxTransform(viewBoxRect, width, height) {\n    var scaleX = width / viewBoxRect.width;\n    var scaleY = height / viewBoxRect.height;\n    var scale = Math.min(scaleX, scaleY);\n    // preserveAspectRatio 'xMidYMid'\n    var viewBoxScale = [scale, scale];\n    var viewBoxPosition = [\n        -(viewBoxRect.x + viewBoxRect.width / 2) * scale + width / 2,\n        -(viewBoxRect.y + viewBoxRect.height / 2) * scale + height / 2\n    ];\n\n    return {\n        scale: viewBoxScale,\n        position: viewBoxPosition\n    };\n}\n\n/**\n * @param {string|XMLElement} xml\n * @param {Object} [opt]\n * @param {number} [opt.width] Default width if svg width not specified or is a percent value.\n * @param {number} [opt.height] Default height if svg height not specified or is a percent value.\n * @param {boolean} [opt.ignoreViewBox]\n * @param {boolean} [opt.ignoreRootClip]\n * @return {Object} result:\n * {\n *     root: Group, The root of the the result tree of zrender shapes,\n *     width: number, the viewport width of the SVG,\n *     height: number, the viewport height of the SVG,\n *     viewBoxRect: {x, y, width, height}, the declared viewBox rect of the SVG, if exists,\n *     viewBoxTransform: the {scale, position} calculated by viewBox and viewport, is exists.\n * }\n */\nfunction parseSVG(xml, opt) {\n    var parser = new SVGParser();\n    return parser.parse(xml, opt);\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar storage = createHashMap();\n\n// For minimize the code size of common echarts package,\n// do not put too much logic in this module.\n\nvar mapDataStorage = {\n\n    // The format of record: see `echarts.registerMap`.\n    // Compatible with previous `echarts.registerMap`.\n    registerMap: function (mapName, rawGeoJson, rawSpecialAreas) {\n\n        var records;\n\n        if (isArray(rawGeoJson)) {\n            records = rawGeoJson;\n        }\n        else if (rawGeoJson.svg) {\n            records = [{\n                type: 'svg',\n                source: rawGeoJson.svg,\n                specialAreas: rawGeoJson.specialAreas\n            }];\n        }\n        else {\n            // Backward compatibility.\n            if (rawGeoJson.geoJson && !rawGeoJson.features) {\n                rawSpecialAreas = rawGeoJson.specialAreas;\n                rawGeoJson = rawGeoJson.geoJson;\n            }\n            records = [{\n                type: 'geoJSON',\n                source: rawGeoJson,\n                specialAreas: rawSpecialAreas\n            }];\n        }\n\n        each$1(records, function (record) {\n            var type = record.type;\n            type === 'geoJson' && (type = record.type = 'geoJSON');\n\n            var parse = parsers[type];\n\n            if (__DEV__) {\n                assert$1(parse, 'Illegal map type: ' + type);\n            }\n\n            parse(record);\n        });\n\n        return storage.set(mapName, records);\n    },\n\n    retrieveMap: function (mapName) {\n        return storage.get(mapName);\n    }\n\n};\n\nvar parsers = {\n\n    geoJSON: function (record) {\n        var source = record.source;\n        record.geoJSON = !isString(source)\n            ? source\n            : (typeof JSON !== 'undefined' && JSON.parse)\n            ? JSON.parse(source)\n            : (new Function('return (' + source + ');'))();\n    },\n\n    // Only perform parse to XML object here, which might be time\n    // consiming for large SVG.\n    // Although convert XML to zrender element is also time consiming,\n    // if we do it here, the clone of zrender elements has to be\n    // required. So we do it once for each geo instance, util real\n    // performance issues call for optimizing it.\n    svg: function (record) {\n        record.svgXML = parseXML(record.source);\n    }\n\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\nvar assert = assert$1;\nvar each = each$1;\nvar isFunction = isFunction$1;\nvar isObject = isObject$1;\nvar parseClassType = ComponentModel.parseClassType;\n\nvar version = '4.3.0';\n\nvar dependencies = {\n    zrender: '4.1.0'\n};\n\nvar TEST_FRAME_REMAIN_TIME = 1;\n\nvar PRIORITY_PROCESSOR_FILTER = 1000;\nvar PRIORITY_PROCESSOR_STATISTIC = 5000;\n\nvar PRIORITY_VISUAL_LAYOUT = 1000;\nvar PRIORITY_VISUAL_PROGRESSIVE_LAYOUT = 1100;\nvar PRIORITY_VISUAL_GLOBAL = 2000;\nvar PRIORITY_VISUAL_CHART = 3000;\nvar PRIORITY_VISUAL_POST_CHART_LAYOUT = 3500;\nvar PRIORITY_VISUAL_COMPONENT = 4000;\n// FIXME\n// necessary?\nvar PRIORITY_VISUAL_BRUSH = 5000;\n\nvar PRIORITY = {\n    PROCESSOR: {\n        FILTER: PRIORITY_PROCESSOR_FILTER,\n        STATISTIC: PRIORITY_PROCESSOR_STATISTIC\n    },\n    VISUAL: {\n        LAYOUT: PRIORITY_VISUAL_LAYOUT,\n        PROGRESSIVE_LAYOUT: PRIORITY_VISUAL_PROGRESSIVE_LAYOUT,\n        GLOBAL: PRIORITY_VISUAL_GLOBAL,\n        CHART: PRIORITY_VISUAL_CHART,\n        POST_CHART_LAYOUT: PRIORITY_VISUAL_POST_CHART_LAYOUT,\n        COMPONENT: PRIORITY_VISUAL_COMPONENT,\n        BRUSH: PRIORITY_VISUAL_BRUSH\n    }\n};\n\n// Main process have three entries: `setOption`, `dispatchAction` and `resize`,\n// where they must not be invoked nestedly, except the only case: invoke\n// dispatchAction with updateMethod \"none\" in main process.\n// This flag is used to carry out this rule.\n// All events will be triggered out side main process (i.e. when !this[IN_MAIN_PROCESS]).\nvar IN_MAIN_PROCESS = '__flagInMainProcess';\nvar OPTION_UPDATED = '__optionUpdated';\nvar ACTION_REG = /^[a-zA-Z0-9_]+$/;\n\n\nfunction createRegisterEventWithLowercaseName(method) {\n    return function (eventName, handler, context) {\n        // Event name is all lowercase\n        eventName = eventName && eventName.toLowerCase();\n        Eventful.prototype[method].call(this, eventName, handler, context);\n    };\n}\n\n/**\n * @module echarts~MessageCenter\n */\nfunction MessageCenter() {\n    Eventful.call(this);\n}\nMessageCenter.prototype.on = createRegisterEventWithLowercaseName('on');\nMessageCenter.prototype.off = createRegisterEventWithLowercaseName('off');\nMessageCenter.prototype.one = createRegisterEventWithLowercaseName('one');\nmixin(MessageCenter, Eventful);\n\n/**\n * @module echarts~ECharts\n */\nfunction ECharts(dom, theme$$1, opts) {\n    opts = opts || {};\n\n    // Get theme by name\n    if (typeof theme$$1 === 'string') {\n        theme$$1 = themeStorage[theme$$1];\n    }\n\n    /**\n     * @type {string}\n     */\n    this.id;\n\n    /**\n     * Group id\n     * @type {string}\n     */\n    this.group;\n\n    /**\n     * @type {HTMLElement}\n     * @private\n     */\n    this._dom = dom;\n\n    var defaultRenderer = 'canvas';\n    if (__DEV__) {\n        defaultRenderer = (\n            typeof window === 'undefined' ? global : window\n        ).__ECHARTS__DEFAULT__RENDERER__ || defaultRenderer;\n    }\n\n    /**\n     * @type {module:zrender/ZRender}\n     * @private\n     */\n    var zr = this._zr = init$1(dom, {\n        renderer: opts.renderer || defaultRenderer,\n        devicePixelRatio: opts.devicePixelRatio,\n        width: opts.width,\n        height: opts.height\n    });\n\n    /**\n     * Expect 60 fps.\n     * @type {Function}\n     * @private\n     */\n    this._throttledZrFlush = throttle(bind(zr.flush, zr), 17);\n\n    var theme$$1 = clone(theme$$1);\n    theme$$1 && backwardCompat(theme$$1, true);\n    /**\n     * @type {Object}\n     * @private\n     */\n    this._theme = theme$$1;\n\n    /**\n     * @type {Array.<module:echarts/view/Chart>}\n     * @private\n     */\n    this._chartsViews = [];\n\n    /**\n     * @type {Object.<string, module:echarts/view/Chart>}\n     * @private\n     */\n    this._chartsMap = {};\n\n    /**\n     * @type {Array.<module:echarts/view/Component>}\n     * @private\n     */\n    this._componentsViews = [];\n\n    /**\n     * @type {Object.<string, module:echarts/view/Component>}\n     * @private\n     */\n    this._componentsMap = {};\n\n    /**\n     * @type {module:echarts/CoordinateSystem}\n     * @private\n     */\n    this._coordSysMgr = new CoordinateSystemManager();\n\n    /**\n     * @type {module:echarts/ExtensionAPI}\n     * @private\n     */\n    var api = this._api = createExtensionAPI(this);\n\n    // Sort on demand\n    function prioritySortFunc(a, b) {\n        return a.__prio - b.__prio;\n    }\n    sort(visualFuncs, prioritySortFunc);\n    sort(dataProcessorFuncs, prioritySortFunc);\n\n    /**\n     * @type {module:echarts/stream/Scheduler}\n     */\n    this._scheduler = new Scheduler(this, api, dataProcessorFuncs, visualFuncs);\n\n    Eventful.call(this, this._ecEventProcessor = new EventProcessor());\n\n    /**\n     * @type {module:echarts~MessageCenter}\n     * @private\n     */\n    this._messageCenter = new MessageCenter();\n\n    // Init mouse events\n    this._initEvents();\n\n    // In case some people write `window.onresize = chart.resize`\n    this.resize = bind(this.resize, this);\n\n    // Can't dispatch action during rendering procedure\n    this._pendingActions = [];\n\n    zr.animation.on('frame', this._onframe, this);\n\n    bindRenderedEvent(zr, this);\n\n    // ECharts instance can be used as value.\n    setAsPrimitive(this);\n}\n\nvar echartsProto = ECharts.prototype;\n\nechartsProto._onframe = function () {\n    if (this._disposed) {\n        return;\n    }\n\n    var scheduler = this._scheduler;\n\n    // Lazy update\n    if (this[OPTION_UPDATED]) {\n        var silent = this[OPTION_UPDATED].silent;\n\n        this[IN_MAIN_PROCESS] = true;\n\n        prepare(this);\n        updateMethods.update.call(this);\n\n        this[IN_MAIN_PROCESS] = false;\n\n        this[OPTION_UPDATED] = false;\n\n        flushPendingActions.call(this, silent);\n\n        triggerUpdatedEvent.call(this, silent);\n    }\n    // Avoid do both lazy update and progress in one frame.\n    else if (scheduler.unfinished) {\n        // Stream progress.\n        var remainTime = TEST_FRAME_REMAIN_TIME;\n        var ecModel = this._model;\n        var api = this._api;\n        scheduler.unfinished = false;\n        do {\n            var startTime = +new Date();\n\n            scheduler.performSeriesTasks(ecModel);\n\n            // Currently dataProcessorFuncs do not check threshold.\n            scheduler.performDataProcessorTasks(ecModel);\n\n            updateStreamModes(this, ecModel);\n\n            // Do not update coordinate system here. Because that coord system update in\n            // each frame is not a good user experience. So we follow the rule that\n            // the extent of the coordinate system is determin in the first frame (the\n            // frame is executed immedietely after task reset.\n            // this._coordSysMgr.update(ecModel, api);\n\n            // console.log('--- ec frame visual ---', remainTime);\n            scheduler.performVisualTasks(ecModel);\n\n            renderSeries(this, this._model, api, 'remain');\n\n            remainTime -= (+new Date() - startTime);\n        }\n        while (remainTime > 0 && scheduler.unfinished);\n\n        // Call flush explicitly for trigger finished event.\n        if (!scheduler.unfinished) {\n            this._zr.flush();\n        }\n        // Else, zr flushing be ensue within the same frame,\n        // because zr flushing is after onframe event.\n    }\n};\n\n/**\n * @return {HTMLElement}\n */\nechartsProto.getDom = function () {\n    return this._dom;\n};\n\n/**\n * @return {module:zrender~ZRender}\n */\nechartsProto.getZr = function () {\n    return this._zr;\n};\n\n/**\n * Usage:\n * chart.setOption(option, notMerge, lazyUpdate);\n * chart.setOption(option, {\n *     notMerge: ...,\n *     lazyUpdate: ...,\n *     silent: ...\n * });\n *\n * @param {Object} option\n * @param {Object|boolean} [opts] opts or notMerge.\n * @param {boolean} [opts.notMerge=false]\n * @param {boolean} [opts.lazyUpdate=false] Useful when setOption frequently.\n */\nechartsProto.setOption = function (option, notMerge, lazyUpdate) {\n    if (__DEV__) {\n        assert(!this[IN_MAIN_PROCESS], '`setOption` should not be called during main process.');\n    }\n\n    var silent;\n    if (isObject(notMerge)) {\n        lazyUpdate = notMerge.lazyUpdate;\n        silent = notMerge.silent;\n        notMerge = notMerge.notMerge;\n    }\n\n    this[IN_MAIN_PROCESS] = true;\n\n    if (!this._model || notMerge) {\n        var optionManager = new OptionManager(this._api);\n        var theme$$1 = this._theme;\n        var ecModel = this._model = new GlobalModel();\n        ecModel.scheduler = this._scheduler;\n        ecModel.init(null, null, theme$$1, optionManager);\n    }\n\n    this._model.setOption(option, optionPreprocessorFuncs);\n\n    if (lazyUpdate) {\n        this[OPTION_UPDATED] = {silent: silent};\n        this[IN_MAIN_PROCESS] = false;\n    }\n    else {\n        prepare(this);\n\n        updateMethods.update.call(this);\n\n        // Ensure zr refresh sychronously, and then pixel in canvas can be\n        // fetched after `setOption`.\n        this._zr.flush();\n\n        this[OPTION_UPDATED] = false;\n        this[IN_MAIN_PROCESS] = false;\n\n        flushPendingActions.call(this, silent);\n        triggerUpdatedEvent.call(this, silent);\n    }\n};\n\n/**\n * @DEPRECATED\n */\nechartsProto.setTheme = function () {\n    console.error('ECharts#setTheme() is DEPRECATED in ECharts 3.0');\n};\n\n/**\n * @return {module:echarts/model/Global}\n */\nechartsProto.getModel = function () {\n    return this._model;\n};\n\n/**\n * @return {Object}\n */\nechartsProto.getOption = function () {\n    return this._model && this._model.getOption();\n};\n\n/**\n * @return {number}\n */\nechartsProto.getWidth = function () {\n    return this._zr.getWidth();\n};\n\n/**\n * @return {number}\n */\nechartsProto.getHeight = function () {\n    return this._zr.getHeight();\n};\n\n/**\n * @return {number}\n */\nechartsProto.getDevicePixelRatio = function () {\n    return this._zr.painter.dpr || window.devicePixelRatio || 1;\n};\n\n/**\n * Get canvas which has all thing rendered\n * @param {Object} opts\n * @param {string} [opts.backgroundColor]\n * @return {string}\n */\nechartsProto.getRenderedCanvas = function (opts) {\n    if (!env$1.canvasSupported) {\n        return;\n    }\n    opts = opts || {};\n    opts.pixelRatio = opts.pixelRatio || 1;\n    opts.backgroundColor = opts.backgroundColor\n        || this._model.get('backgroundColor');\n    var zr = this._zr;\n    // var list = zr.storage.getDisplayList();\n    // Stop animations\n    // Never works before in init animation, so remove it.\n    // zrUtil.each(list, function (el) {\n    //     el.stopAnimation(true);\n    // });\n    return zr.painter.getRenderedCanvas(opts);\n};\n\n/**\n * Get svg data url\n * @return {string}\n */\nechartsProto.getSvgDataUrl = function () {\n    if (!env$1.svgSupported) {\n        return;\n    }\n\n    var zr = this._zr;\n    var list = zr.storage.getDisplayList();\n    // Stop animations\n    each$1(list, function (el) {\n        el.stopAnimation(true);\n    });\n\n    return zr.painter.pathToDataUrl();\n};\n\n/**\n * @return {string}\n * @param {Object} opts\n * @param {string} [opts.type='png']\n * @param {string} [opts.pixelRatio=1]\n * @param {string} [opts.backgroundColor]\n * @param {string} [opts.excludeComponents]\n */\nechartsProto.getDataURL = function (opts) {\n    opts = opts || {};\n    var excludeComponents = opts.excludeComponents;\n    var ecModel = this._model;\n    var excludesComponentViews = [];\n    var self = this;\n\n    each(excludeComponents, function (componentType) {\n        ecModel.eachComponent({\n            mainType: componentType\n        }, function (component) {\n            var view = self._componentsMap[component.__viewId];\n            if (!view.group.ignore) {\n                excludesComponentViews.push(view);\n                view.group.ignore = true;\n            }\n        });\n    });\n\n    var url = this._zr.painter.getType() === 'svg'\n        ? this.getSvgDataUrl()\n        : this.getRenderedCanvas(opts).toDataURL(\n            'image/' + (opts && opts.type || 'png')\n        );\n\n    each(excludesComponentViews, function (view) {\n        view.group.ignore = false;\n    });\n\n    return url;\n};\n\n\n/**\n * @return {string}\n * @param {Object} opts\n * @param {string} [opts.type='png']\n * @param {string} [opts.pixelRatio=1]\n * @param {string} [opts.backgroundColor]\n */\nechartsProto.getConnectedDataURL = function (opts) {\n    if (!env$1.canvasSupported) {\n        return;\n    }\n    var groupId = this.group;\n    var mathMin = Math.min;\n    var mathMax = Math.max;\n    var MAX_NUMBER = Infinity;\n    if (connectedGroups[groupId]) {\n        var left = MAX_NUMBER;\n        var top = MAX_NUMBER;\n        var right = -MAX_NUMBER;\n        var bottom = -MAX_NUMBER;\n        var canvasList = [];\n        var dpr = (opts && opts.pixelRatio) || 1;\n\n        each$1(instances, function (chart, id) {\n            if (chart.group === groupId) {\n                var canvas = chart.getRenderedCanvas(\n                    clone(opts)\n                );\n                var boundingRect = chart.getDom().getBoundingClientRect();\n                left = mathMin(boundingRect.left, left);\n                top = mathMin(boundingRect.top, top);\n                right = mathMax(boundingRect.right, right);\n                bottom = mathMax(boundingRect.bottom, bottom);\n                canvasList.push({\n                    dom: canvas,\n                    left: boundingRect.left,\n                    top: boundingRect.top\n                });\n            }\n        });\n\n        left *= dpr;\n        top *= dpr;\n        right *= dpr;\n        bottom *= dpr;\n        var width = right - left;\n        var height = bottom - top;\n        var targetCanvas = createCanvas();\n        targetCanvas.width = width;\n        targetCanvas.height = height;\n        var zr = init$1(targetCanvas);\n\n        // Background between the charts\n        if (opts.connectedBackgroundColor) {\n            zr.add(new Rect({\n                shape: {\n                    x: 0,\n                    y: 0,\n                    width: width,\n                    height: height\n                },\n                style: {\n                    fill: opts.connectedBackgroundColor\n                }\n            }));\n        }\n\n        each(canvasList, function (item) {\n            var img = new ZImage({\n                style: {\n                    x: item.left * dpr - left,\n                    y: item.top * dpr - top,\n                    image: item.dom\n                }\n            });\n            zr.add(img);\n        });\n        zr.refreshImmediately();\n\n        return targetCanvas.toDataURL('image/' + (opts && opts.type || 'png'));\n    }\n    else {\n        return this.getDataURL(opts);\n    }\n};\n\n/**\n * Convert from logical coordinate system to pixel coordinate system.\n * See CoordinateSystem#convertToPixel.\n * @param {string|Object} finder\n *        If string, e.g., 'geo', means {geoIndex: 0}.\n *        If Object, could contain some of these properties below:\n *        {\n *            seriesIndex / seriesId / seriesName,\n *            geoIndex / geoId, geoName,\n *            bmapIndex / bmapId / bmapName,\n *            xAxisIndex / xAxisId / xAxisName,\n *            yAxisIndex / yAxisId / yAxisName,\n *            gridIndex / gridId / gridName,\n *            ... (can be extended)\n *        }\n * @param {Array|number} value\n * @return {Array|number} result\n */\nechartsProto.convertToPixel = curry(doConvertPixel, 'convertToPixel');\n\n/**\n * Convert from pixel coordinate system to logical coordinate system.\n * See CoordinateSystem#convertFromPixel.\n * @param {string|Object} finder\n *        If string, e.g., 'geo', means {geoIndex: 0}.\n *        If Object, could contain some of these properties below:\n *        {\n *            seriesIndex / seriesId / seriesName,\n *            geoIndex / geoId / geoName,\n *            bmapIndex / bmapId / bmapName,\n *            xAxisIndex / xAxisId / xAxisName,\n *            yAxisIndex / yAxisId / yAxisName\n *            gridIndex / gridId / gridName,\n *            ... (can be extended)\n *        }\n * @param {Array|number} value\n * @return {Array|number} result\n */\nechartsProto.convertFromPixel = curry(doConvertPixel, 'convertFromPixel');\n\nfunction doConvertPixel(methodName, finder, value) {\n    var ecModel = this._model;\n    var coordSysList = this._coordSysMgr.getCoordinateSystems();\n    var result;\n\n    finder = parseFinder(ecModel, finder);\n\n    for (var i = 0; i < coordSysList.length; i++) {\n        var coordSys = coordSysList[i];\n        if (coordSys[methodName]\n            && (result = coordSys[methodName](ecModel, finder, value)) != null\n        ) {\n            return result;\n        }\n    }\n\n    if (__DEV__) {\n        console.warn(\n            'No coordinate system that supports ' + methodName + ' found by the given finder.'\n        );\n    }\n}\n\n/**\n * Is the specified coordinate systems or components contain the given pixel point.\n * @param {string|Object} finder\n *        If string, e.g., 'geo', means {geoIndex: 0}.\n *        If Object, could contain some of these properties below:\n *        {\n *            seriesIndex / seriesId / seriesName,\n *            geoIndex / geoId / geoName,\n *            bmapIndex / bmapId / bmapName,\n *            xAxisIndex / xAxisId / xAxisName,\n *            yAxisIndex / yAxisId / yAxisName,\n *            gridIndex / gridId / gridName,\n *            ... (can be extended)\n *        }\n * @param {Array|number} value\n * @return {boolean} result\n */\nechartsProto.containPixel = function (finder, value) {\n    var ecModel = this._model;\n    var result;\n\n    finder = parseFinder(ecModel, finder);\n\n    each$1(finder, function (models, key) {\n        key.indexOf('Models') >= 0 && each$1(models, function (model) {\n            var coordSys = model.coordinateSystem;\n            if (coordSys && coordSys.containPoint) {\n                result |= !!coordSys.containPoint(value);\n            }\n            else if (key === 'seriesModels') {\n                var view = this._chartsMap[model.__viewId];\n                if (view && view.containPoint) {\n                    result |= view.containPoint(value, model);\n                }\n                else {\n                    if (__DEV__) {\n                        console.warn(key + ': ' + (view\n                            ? 'The found component do not support containPoint.'\n                            : 'No view mapping to the found component.'\n                        ));\n                    }\n                }\n            }\n            else {\n                if (__DEV__) {\n                    console.warn(key + ': containPoint is not supported');\n                }\n            }\n        }, this);\n    }, this);\n\n    return !!result;\n};\n\n/**\n * Get visual from series or data.\n * @param {string|Object} finder\n *        If string, e.g., 'series', means {seriesIndex: 0}.\n *        If Object, could contain some of these properties below:\n *        {\n *            seriesIndex / seriesId / seriesName,\n *            dataIndex / dataIndexInside\n *        }\n *        If dataIndex is not specified, series visual will be fetched,\n *        but not data item visual.\n *        If all of seriesIndex, seriesId, seriesName are not specified,\n *        visual will be fetched from first series.\n * @param {string} visualType 'color', 'symbol', 'symbolSize'\n */\nechartsProto.getVisual = function (finder, visualType) {\n    var ecModel = this._model;\n\n    finder = parseFinder(ecModel, finder, {defaultMainType: 'series'});\n\n    var seriesModel = finder.seriesModel;\n\n    if (__DEV__) {\n        if (!seriesModel) {\n            console.warn('There is no specified seires model');\n        }\n    }\n\n    var data = seriesModel.getData();\n\n    var dataIndexInside = finder.hasOwnProperty('dataIndexInside')\n        ? finder.dataIndexInside\n        : finder.hasOwnProperty('dataIndex')\n        ? data.indexOfRawIndex(finder.dataIndex)\n        : null;\n\n    return dataIndexInside != null\n        ? data.getItemVisual(dataIndexInside, visualType)\n        : data.getVisual(visualType);\n};\n\n/**\n * Get view of corresponding component model\n * @param  {module:echarts/model/Component} componentModel\n * @return {module:echarts/view/Component}\n */\nechartsProto.getViewOfComponentModel = function (componentModel) {\n    return this._componentsMap[componentModel.__viewId];\n};\n\n/**\n * Get view of corresponding series model\n * @param  {module:echarts/model/Series} seriesModel\n * @return {module:echarts/view/Chart}\n */\nechartsProto.getViewOfSeriesModel = function (seriesModel) {\n    return this._chartsMap[seriesModel.__viewId];\n};\n\nvar updateMethods = {\n\n    prepareAndUpdate: function (payload) {\n        prepare(this);\n        updateMethods.update.call(this, payload);\n    },\n\n    /**\n     * @param {Object} payload\n     * @private\n     */\n    update: function (payload) {\n        // console.profile && console.profile('update');\n\n        var ecModel = this._model;\n        var api = this._api;\n        var zr = this._zr;\n        var coordSysMgr = this._coordSysMgr;\n        var scheduler = this._scheduler;\n\n        // update before setOption\n        if (!ecModel) {\n            return;\n        }\n\n        scheduler.restoreData(ecModel, payload);\n\n        scheduler.performSeriesTasks(ecModel);\n\n        // TODO\n        // Save total ecModel here for undo/redo (after restoring data and before processing data).\n        // Undo (restoration of total ecModel) can be carried out in 'action' or outside API call.\n\n        // Create new coordinate system each update\n        // In LineView may save the old coordinate system and use it to get the orignal point\n        coordSysMgr.create(ecModel, api);\n\n        scheduler.performDataProcessorTasks(ecModel, payload);\n\n        // Current stream render is not supported in data process. So we can update\n        // stream modes after data processing, where the filtered data is used to\n        // deteming whether use progressive rendering.\n        updateStreamModes(this, ecModel);\n\n        // We update stream modes before coordinate system updated, then the modes info\n        // can be fetched when coord sys updating (consider the barGrid extent fix). But\n        // the drawback is the full coord info can not be fetched. Fortunately this full\n        // coord is not requied in stream mode updater currently.\n        coordSysMgr.update(ecModel, api);\n\n        clearColorPalette(ecModel);\n        scheduler.performVisualTasks(ecModel, payload);\n\n        render(this, ecModel, api, payload);\n\n        // Set background\n        var backgroundColor = ecModel.get('backgroundColor') || 'transparent';\n\n        // In IE8\n        if (!env$1.canvasSupported) {\n            var colorArr = parse(backgroundColor);\n            backgroundColor = stringify(colorArr, 'rgb');\n            if (colorArr[3] === 0) {\n                backgroundColor = 'transparent';\n            }\n        }\n        else {\n            zr.setBackgroundColor(backgroundColor);\n        }\n\n        performPostUpdateFuncs(ecModel, api);\n\n        // console.profile && console.profileEnd('update');\n    },\n\n    /**\n     * @param {Object} payload\n     * @private\n     */\n    updateTransform: function (payload) {\n        var ecModel = this._model;\n        var ecIns = this;\n        var api = this._api;\n\n        // update before setOption\n        if (!ecModel) {\n            return;\n        }\n\n        // ChartView.markUpdateMethod(payload, 'updateTransform');\n\n        var componentDirtyList = [];\n        ecModel.eachComponent(function (componentType, componentModel) {\n            var componentView = ecIns.getViewOfComponentModel(componentModel);\n            if (componentView && componentView.__alive) {\n                if (componentView.updateTransform) {\n                    var result = componentView.updateTransform(componentModel, ecModel, api, payload);\n                    result && result.update && componentDirtyList.push(componentView);\n                }\n                else {\n                    componentDirtyList.push(componentView);\n                }\n            }\n        });\n\n        var seriesDirtyMap = createHashMap();\n        ecModel.eachSeries(function (seriesModel) {\n            var chartView = ecIns._chartsMap[seriesModel.__viewId];\n            if (chartView.updateTransform) {\n                var result = chartView.updateTransform(seriesModel, ecModel, api, payload);\n                result && result.update && seriesDirtyMap.set(seriesModel.uid, 1);\n            }\n            else {\n                seriesDirtyMap.set(seriesModel.uid, 1);\n            }\n        });\n\n        clearColorPalette(ecModel);\n        // Keep pipe to the exist pipeline because it depends on the render task of the full pipeline.\n        // this._scheduler.performVisualTasks(ecModel, payload, 'layout', true);\n        this._scheduler.performVisualTasks(\n            ecModel, payload, {setDirty: true, dirtyMap: seriesDirtyMap}\n        );\n\n        // Currently, not call render of components. Geo render cost a lot.\n        // renderComponents(ecIns, ecModel, api, payload, componentDirtyList);\n        renderSeries(ecIns, ecModel, api, payload, seriesDirtyMap);\n\n        performPostUpdateFuncs(ecModel, this._api);\n    },\n\n    /**\n     * @param {Object} payload\n     * @private\n     */\n    updateView: function (payload) {\n        var ecModel = this._model;\n\n        // update before setOption\n        if (!ecModel) {\n            return;\n        }\n\n        Chart.markUpdateMethod(payload, 'updateView');\n\n        clearColorPalette(ecModel);\n\n        // Keep pipe to the exist pipeline because it depends on the render task of the full pipeline.\n        this._scheduler.performVisualTasks(ecModel, payload, {setDirty: true});\n\n        render(this, this._model, this._api, payload);\n\n        performPostUpdateFuncs(ecModel, this._api);\n    },\n\n    /**\n     * @param {Object} payload\n     * @private\n     */\n    updateVisual: function (payload) {\n        updateMethods.update.call(this, payload);\n\n        // var ecModel = this._model;\n\n        // // update before setOption\n        // if (!ecModel) {\n        //     return;\n        // }\n\n        // ChartView.markUpdateMethod(payload, 'updateVisual');\n\n        // clearColorPalette(ecModel);\n\n        // // Keep pipe to the exist pipeline because it depends on the render task of the full pipeline.\n        // this._scheduler.performVisualTasks(ecModel, payload, {visualType: 'visual', setDirty: true});\n\n        // render(this, this._model, this._api, payload);\n\n        // performPostUpdateFuncs(ecModel, this._api);\n    },\n\n    /**\n     * @param {Object} payload\n     * @private\n     */\n    updateLayout: function (payload) {\n        updateMethods.update.call(this, payload);\n\n        // var ecModel = this._model;\n\n        // // update before setOption\n        // if (!ecModel) {\n        //     return;\n        // }\n\n        // ChartView.markUpdateMethod(payload, 'updateLayout');\n\n        // // Keep pipe to the exist pipeline because it depends on the render task of the full pipeline.\n        // // this._scheduler.performVisualTasks(ecModel, payload, 'layout', true);\n        // this._scheduler.performVisualTasks(ecModel, payload, {setDirty: true});\n\n        // render(this, this._model, this._api, payload);\n\n        // performPostUpdateFuncs(ecModel, this._api);\n    }\n};\n\nfunction prepare(ecIns) {\n    var ecModel = ecIns._model;\n    var scheduler = ecIns._scheduler;\n\n    scheduler.restorePipelines(ecModel);\n\n    scheduler.prepareStageTasks();\n\n    prepareView(ecIns, 'component', ecModel, scheduler);\n\n    prepareView(ecIns, 'chart', ecModel, scheduler);\n\n    scheduler.plan();\n}\n\n/**\n * @private\n */\nfunction updateDirectly(ecIns, method, payload, mainType, subType) {\n    var ecModel = ecIns._model;\n\n    // broadcast\n    if (!mainType) {\n        // FIXME\n        // Chart will not be update directly here, except set dirty.\n        // But there is no such scenario now.\n        each(ecIns._componentsViews.concat(ecIns._chartsViews), callView);\n        return;\n    }\n\n    var query = {};\n    query[mainType + 'Id'] = payload[mainType + 'Id'];\n    query[mainType + 'Index'] = payload[mainType + 'Index'];\n    query[mainType + 'Name'] = payload[mainType + 'Name'];\n\n    var condition = {mainType: mainType, query: query};\n    subType && (condition.subType = subType); // subType may be '' by parseClassType;\n\n    var excludeSeriesId = payload.excludeSeriesId;\n    if (excludeSeriesId != null) {\n        excludeSeriesId = createHashMap(normalizeToArray(excludeSeriesId));\n    }\n\n    // If dispatchAction before setOption, do nothing.\n    ecModel && ecModel.eachComponent(condition, function (model) {\n        if (!excludeSeriesId || excludeSeriesId.get(model.id) == null) {\n            callView(ecIns[\n                mainType === 'series' ? '_chartsMap' : '_componentsMap'\n            ][model.__viewId]);\n        }\n    }, ecIns);\n\n    function callView(view) {\n        view && view.__alive && view[method] && view[method](\n            view.__model, ecModel, ecIns._api, payload\n        );\n    }\n}\n\n/**\n * Resize the chart\n * @param {Object} opts\n * @param {number} [opts.width] Can be 'auto' (the same as null/undefined)\n * @param {number} [opts.height] Can be 'auto' (the same as null/undefined)\n * @param {boolean} [opts.silent=false]\n */\nechartsProto.resize = function (opts) {\n    if (__DEV__) {\n        assert(!this[IN_MAIN_PROCESS], '`resize` should not be called during main process.');\n    }\n\n    this._zr.resize(opts);\n\n    var ecModel = this._model;\n\n    // Resize loading effect\n    this._loadingFX && this._loadingFX.resize();\n\n    if (!ecModel) {\n        return;\n    }\n\n    var optionChanged = ecModel.resetOption('media');\n\n    var silent = opts && opts.silent;\n\n    this[IN_MAIN_PROCESS] = true;\n\n    optionChanged && prepare(this);\n    updateMethods.update.call(this);\n\n    this[IN_MAIN_PROCESS] = false;\n\n    flushPendingActions.call(this, silent);\n\n    triggerUpdatedEvent.call(this, silent);\n};\n\nfunction updateStreamModes(ecIns, ecModel) {\n    var chartsMap = ecIns._chartsMap;\n    var scheduler = ecIns._scheduler;\n    ecModel.eachSeries(function (seriesModel) {\n        scheduler.updateStreamModes(seriesModel, chartsMap[seriesModel.__viewId]);\n    });\n}\n\n/**\n * Show loading effect\n * @param  {string} [name='default']\n * @param  {Object} [cfg]\n */\nechartsProto.showLoading = function (name, cfg) {\n    if (isObject(name)) {\n        cfg = name;\n        name = '';\n    }\n    name = name || 'default';\n\n    this.hideLoading();\n    if (!loadingEffects[name]) {\n        if (__DEV__) {\n            console.warn('Loading effects ' + name + ' not exists.');\n        }\n        return;\n    }\n    var el = loadingEffects[name](this._api, cfg);\n    var zr = this._zr;\n    this._loadingFX = el;\n\n    zr.add(el);\n};\n\n/**\n * Hide loading effect\n */\nechartsProto.hideLoading = function () {\n    this._loadingFX && this._zr.remove(this._loadingFX);\n    this._loadingFX = null;\n};\n\n/**\n * @param {Object} eventObj\n * @return {Object}\n */\nechartsProto.makeActionFromEvent = function (eventObj) {\n    var payload = extend({}, eventObj);\n    payload.type = eventActionMap[eventObj.type];\n    return payload;\n};\n\n/**\n * @pubilc\n * @param {Object} payload\n * @param {string} [payload.type] Action type\n * @param {Object|boolean} [opt] If pass boolean, means opt.silent\n * @param {boolean} [opt.silent=false] Whether trigger events.\n * @param {boolean} [opt.flush=undefined]\n *                  true: Flush immediately, and then pixel in canvas can be fetched\n *                      immediately. Caution: it might affect performance.\n *                  false: Not not flush.\n *                  undefined: Auto decide whether perform flush.\n */\nechartsProto.dispatchAction = function (payload, opt) {\n    if (!isObject(opt)) {\n        opt = {silent: !!opt};\n    }\n\n    if (!actions[payload.type]) {\n        return;\n    }\n\n    // Avoid dispatch action before setOption. Especially in `connect`.\n    if (!this._model) {\n        return;\n    }\n\n    // May dispatchAction in rendering procedure\n    if (this[IN_MAIN_PROCESS]) {\n        this._pendingActions.push(payload);\n        return;\n    }\n\n    doDispatchAction.call(this, payload, opt.silent);\n\n    if (opt.flush) {\n        this._zr.flush(true);\n    }\n    else if (opt.flush !== false && env$1.browser.weChat) {\n        // In WeChat embeded browser, `requestAnimationFrame` and `setInterval`\n        // hang when sliding page (on touch event), which cause that zr does not\n        // refresh util user interaction finished, which is not expected.\n        // But `dispatchAction` may be called too frequently when pan on touch\n        // screen, which impacts performance if do not throttle them.\n        this._throttledZrFlush();\n    }\n\n    flushPendingActions.call(this, opt.silent);\n\n    triggerUpdatedEvent.call(this, opt.silent);\n};\n\nfunction doDispatchAction(payload, silent) {\n    var payloadType = payload.type;\n    var escapeConnect = payload.escapeConnect;\n    var actionWrap = actions[payloadType];\n    var actionInfo = actionWrap.actionInfo;\n\n    var cptType = (actionInfo.update || 'update').split(':');\n    var updateMethod = cptType.pop();\n    cptType = cptType[0] != null && parseClassType(cptType[0]);\n\n    this[IN_MAIN_PROCESS] = true;\n\n    var payloads = [payload];\n    var batched = false;\n    // Batch action\n    if (payload.batch) {\n        batched = true;\n        payloads = map(payload.batch, function (item) {\n            item = defaults(extend({}, item), payload);\n            item.batch = null;\n            return item;\n        });\n    }\n\n    var eventObjBatch = [];\n    var eventObj;\n    var isHighDown = payloadType === 'highlight' || payloadType === 'downplay';\n\n    each(payloads, function (batchItem) {\n        // Action can specify the event by return it.\n        eventObj = actionWrap.action(batchItem, this._model, this._api);\n        // Emit event outside\n        eventObj = eventObj || extend({}, batchItem);\n        // Convert type to eventType\n        eventObj.type = actionInfo.event || eventObj.type;\n        eventObjBatch.push(eventObj);\n\n        // light update does not perform data process, layout and visual.\n        if (isHighDown) {\n            // method, payload, mainType, subType\n            updateDirectly(this, updateMethod, batchItem, 'series');\n        }\n        else if (cptType) {\n            updateDirectly(this, updateMethod, batchItem, cptType.main, cptType.sub);\n        }\n    }, this);\n\n    if (updateMethod !== 'none' && !isHighDown && !cptType) {\n        // Still dirty\n        if (this[OPTION_UPDATED]) {\n            // FIXME Pass payload ?\n            prepare(this);\n            updateMethods.update.call(this, payload);\n            this[OPTION_UPDATED] = false;\n        }\n        else {\n            updateMethods[updateMethod].call(this, payload);\n        }\n    }\n\n    // Follow the rule of action batch\n    if (batched) {\n        eventObj = {\n            type: actionInfo.event || payloadType,\n            escapeConnect: escapeConnect,\n            batch: eventObjBatch\n        };\n    }\n    else {\n        eventObj = eventObjBatch[0];\n    }\n\n    this[IN_MAIN_PROCESS] = false;\n\n    !silent && this._messageCenter.trigger(eventObj.type, eventObj);\n}\n\nfunction flushPendingActions(silent) {\n    var pendingActions = this._pendingActions;\n    while (pendingActions.length) {\n        var payload = pendingActions.shift();\n        doDispatchAction.call(this, payload, silent);\n    }\n}\n\nfunction triggerUpdatedEvent(silent) {\n    !silent && this.trigger('updated');\n}\n\n/**\n * Event `rendered` is triggered when zr\n * rendered. It is useful for realtime\n * snapshot (reflect animation).\n *\n * Event `finished` is triggered when:\n * (1) zrender rendering finished.\n * (2) initial animation finished.\n * (3) progressive rendering finished.\n * (4) no pending action.\n * (5) no delayed setOption needs to be processed.\n */\nfunction bindRenderedEvent(zr, ecIns) {\n    zr.on('rendered', function () {\n\n        ecIns.trigger('rendered');\n\n        // The `finished` event should not be triggered repeatly,\n        // so it should only be triggered when rendering indeed happend\n        // in zrender. (Consider the case that dipatchAction is keep\n        // triggering when mouse move).\n        if (\n            // Although zr is dirty if initial animation is not finished\n            // and this checking is called on frame, we also check\n            // animation finished for robustness.\n            zr.animation.isFinished()\n            && !ecIns[OPTION_UPDATED]\n            && !ecIns._scheduler.unfinished\n            && !ecIns._pendingActions.length\n        ) {\n            ecIns.trigger('finished');\n        }\n    });\n}\n\n/**\n * @param {Object} params\n * @param {number} params.seriesIndex\n * @param {Array|TypedArray} params.data\n */\nechartsProto.appendData = function (params) {\n    var seriesIndex = params.seriesIndex;\n    var ecModel = this.getModel();\n    var seriesModel = ecModel.getSeriesByIndex(seriesIndex);\n\n    if (__DEV__) {\n        assert(params.data && seriesModel);\n    }\n\n    seriesModel.appendData(params);\n\n    // Note: `appendData` does not support that update extent of coordinate\n    // system, util some scenario require that. In the expected usage of\n    // `appendData`, the initial extent of coordinate system should better\n    // be fixed by axis `min`/`max` setting or initial data, otherwise if\n    // the extent changed while `appendData`, the location of the painted\n    // graphic elements have to be changed, which make the usage of\n    // `appendData` meaningless.\n\n    this._scheduler.unfinished = true;\n};\n\n/**\n * Register event\n * @method\n */\nechartsProto.on = createRegisterEventWithLowercaseName('on');\nechartsProto.off = createRegisterEventWithLowercaseName('off');\nechartsProto.one = createRegisterEventWithLowercaseName('one');\n\n/**\n * Prepare view instances of charts and components\n * @param  {module:echarts/model/Global} ecModel\n * @private\n */\nfunction prepareView(ecIns, type, ecModel, scheduler) {\n    var isComponent = type === 'component';\n    var viewList = isComponent ? ecIns._componentsViews : ecIns._chartsViews;\n    var viewMap = isComponent ? ecIns._componentsMap : ecIns._chartsMap;\n    var zr = ecIns._zr;\n    var api = ecIns._api;\n\n    for (var i = 0; i < viewList.length; i++) {\n        viewList[i].__alive = false;\n    }\n\n    isComponent\n        ? ecModel.eachComponent(function (componentType, model) {\n            componentType !== 'series' && doPrepare(model);\n        })\n        : ecModel.eachSeries(doPrepare);\n\n    function doPrepare(model) {\n        // Consider: id same and type changed.\n        var viewId = '_ec_' + model.id + '_' + model.type;\n        var view = viewMap[viewId];\n        if (!view) {\n            var classType = parseClassType(model.type);\n            var Clazz = isComponent\n                ? Component$1.getClass(classType.main, classType.sub)\n                : Chart.getClass(classType.sub);\n\n            if (__DEV__) {\n                assert(Clazz, classType.sub + ' does not exist.');\n            }\n\n            view = new Clazz();\n            view.init(ecModel, api);\n            viewMap[viewId] = view;\n            viewList.push(view);\n            zr.add(view.group);\n        }\n\n        model.__viewId = view.__id = viewId;\n        view.__alive = true;\n        view.__model = model;\n        view.group.__ecComponentInfo = {\n            mainType: model.mainType,\n            index: model.componentIndex\n        };\n        !isComponent && scheduler.prepareView(view, model, ecModel, api);\n    }\n\n    for (var i = 0; i < viewList.length;) {\n        var view = viewList[i];\n        if (!view.__alive) {\n            !isComponent && view.renderTask.dispose();\n            zr.remove(view.group);\n            view.dispose(ecModel, api);\n            viewList.splice(i, 1);\n            delete viewMap[view.__id];\n            view.__id = view.group.__ecComponentInfo = null;\n        }\n        else {\n            i++;\n        }\n    }\n}\n\n// /**\n//  * Encode visual infomation from data after data processing\n//  *\n//  * @param {module:echarts/model/Global} ecModel\n//  * @param {object} layout\n//  * @param {boolean} [layoutFilter] `true`: only layout,\n//  *                                 `false`: only not layout,\n//  *                                 `null`/`undefined`: all.\n//  * @param {string} taskBaseTag\n//  * @private\n//  */\n// function startVisualEncoding(ecIns, ecModel, api, payload, layoutFilter) {\n//     each(visualFuncs, function (visual, index) {\n//         var isLayout = visual.isLayout;\n//         if (layoutFilter == null\n//             || (layoutFilter === false && !isLayout)\n//             || (layoutFilter === true && isLayout)\n//         ) {\n//             visual.func(ecModel, api, payload);\n//         }\n//     });\n// }\n\nfunction clearColorPalette(ecModel) {\n    ecModel.clearColorPalette();\n    ecModel.eachSeries(function (seriesModel) {\n        seriesModel.clearColorPalette();\n    });\n}\n\nfunction render(ecIns, ecModel, api, payload) {\n\n    renderComponents(ecIns, ecModel, api, payload);\n\n    each(ecIns._chartsViews, function (chart) {\n        chart.__alive = false;\n    });\n\n    renderSeries(ecIns, ecModel, api, payload);\n\n    // Remove groups of unrendered charts\n    each(ecIns._chartsViews, function (chart) {\n        if (!chart.__alive) {\n            chart.remove(ecModel, api);\n        }\n    });\n}\n\nfunction renderComponents(ecIns, ecModel, api, payload, dirtyList) {\n    each(dirtyList || ecIns._componentsViews, function (componentView) {\n        var componentModel = componentView.__model;\n        componentView.render(componentModel, ecModel, api, payload);\n\n        updateZ(componentModel, componentView);\n    });\n}\n\n/**\n * Render each chart and component\n * @private\n */\nfunction renderSeries(ecIns, ecModel, api, payload, dirtyMap) {\n    // Render all charts\n    var scheduler = ecIns._scheduler;\n    var unfinished;\n    ecModel.eachSeries(function (seriesModel) {\n        var chartView = ecIns._chartsMap[seriesModel.__viewId];\n        chartView.__alive = true;\n\n        var renderTask = chartView.renderTask;\n        scheduler.updatePayload(renderTask, payload);\n\n        if (dirtyMap && dirtyMap.get(seriesModel.uid)) {\n            renderTask.dirty();\n        }\n\n        unfinished |= renderTask.perform(scheduler.getPerformArgs(renderTask));\n\n        chartView.group.silent = !!seriesModel.get('silent');\n\n        updateZ(seriesModel, chartView);\n\n        updateBlend(seriesModel, chartView);\n    });\n    scheduler.unfinished |= unfinished;\n\n    // If use hover layer\n    updateHoverLayerStatus(ecIns, ecModel);\n\n    // Add aria\n    aria(ecIns._zr.dom, ecModel);\n}\n\nfunction performPostUpdateFuncs(ecModel, api) {\n    each(postUpdateFuncs, function (func) {\n        func(ecModel, api);\n    });\n}\n\n\nvar MOUSE_EVENT_NAMES = [\n    'click', 'dblclick', 'mouseover', 'mouseout', 'mousemove',\n    'mousedown', 'mouseup', 'globalout', 'contextmenu'\n];\n\n/**\n * @private\n */\nechartsProto._initEvents = function () {\n    each(MOUSE_EVENT_NAMES, function (eveName) {\n        var handler = function (e) {\n            var ecModel = this.getModel();\n            var el = e.target;\n            var params;\n            var isGlobalOut = eveName === 'globalout';\n\n            // no e.target when 'globalout'.\n            if (isGlobalOut) {\n                params = {};\n            }\n            else if (el && el.dataIndex != null) {\n                var dataModel = el.dataModel || ecModel.getSeriesByIndex(el.seriesIndex);\n                params = dataModel && dataModel.getDataParams(el.dataIndex, el.dataType, el) || {};\n            }\n            // If element has custom eventData of components\n            else if (el && el.eventData) {\n                params = extend({}, el.eventData);\n            }\n\n            // Contract: if params prepared in mouse event,\n            // these properties must be specified:\n            // {\n            //    componentType: string (component main type)\n            //    componentIndex: number\n            // }\n            // Otherwise event query can not work.\n\n            if (params) {\n                var componentType = params.componentType;\n                var componentIndex = params.componentIndex;\n                // Special handling for historic reason: when trigger by\n                // markLine/markPoint/markArea, the componentType is\n                // 'markLine'/'markPoint'/'markArea', but we should better\n                // enable them to be queried by seriesIndex, since their\n                // option is set in each series.\n                if (componentType === 'markLine'\n                    || componentType === 'markPoint'\n                    || componentType === 'markArea'\n                ) {\n                    componentType = 'series';\n                    componentIndex = params.seriesIndex;\n                }\n                var model = componentType && componentIndex != null\n                    && ecModel.getComponent(componentType, componentIndex);\n                var view = model && this[\n                    model.mainType === 'series' ? '_chartsMap' : '_componentsMap'\n                ][model.__viewId];\n\n                if (__DEV__) {\n                    // `event.componentType` and `event[componentTpype + 'Index']` must not\n                    // be missed, otherwise there is no way to distinguish source component.\n                    // See `dataFormat.getDataParams`.\n                    if (!isGlobalOut && !(model && view)) {\n                        console.warn('model or view can not be found by params');\n                    }\n                }\n\n                params.event = e;\n                params.type = eveName;\n\n                this._ecEventProcessor.eventInfo = {\n                    targetEl: el,\n                    packedEvent: params,\n                    model: model,\n                    view: view\n                };\n\n                this.trigger(eveName, params);\n            }\n        };\n        // Consider that some component (like tooltip, brush, ...)\n        // register zr event handler, but user event handler might\n        // do anything, such as call `setOption` or `dispatchAction`,\n        // which probably update any of the content and probably\n        // cause problem if it is called previous other inner handlers.\n        handler.zrEventfulCallAtLast = true;\n        this._zr.on(eveName, handler, this);\n    }, this);\n\n    each(eventActionMap, function (actionType, eventType) {\n        this._messageCenter.on(eventType, function (event) {\n            this.trigger(eventType, event);\n        }, this);\n    }, this);\n};\n\n/**\n * @return {boolean}\n */\nechartsProto.isDisposed = function () {\n    return this._disposed;\n};\n\n/**\n * Clear\n */\nechartsProto.clear = function () {\n    this.setOption({ series: [] }, true);\n};\n\n/**\n * Dispose instance\n */\nechartsProto.dispose = function () {\n    if (this._disposed) {\n        if (__DEV__) {\n            console.warn('Instance ' + this.id + ' has been disposed');\n        }\n        return;\n    }\n    this._disposed = true;\n\n    setAttribute(this.getDom(), DOM_ATTRIBUTE_KEY, '');\n\n    var api = this._api;\n    var ecModel = this._model;\n\n    each(this._componentsViews, function (component) {\n        component.dispose(ecModel, api);\n    });\n    each(this._chartsViews, function (chart) {\n        chart.dispose(ecModel, api);\n    });\n\n    // Dispose after all views disposed\n    this._zr.dispose();\n\n    delete instances[this.id];\n};\n\nmixin(ECharts, Eventful);\n\nfunction updateHoverLayerStatus(ecIns, ecModel) {\n    var zr = ecIns._zr;\n    var storage = zr.storage;\n    var elCount = 0;\n\n    storage.traverse(function (el) {\n        elCount++;\n    });\n\n    if (elCount > ecModel.get('hoverLayerThreshold') && !env$1.node) {\n        ecModel.eachSeries(function (seriesModel) {\n            if (seriesModel.preventUsingHoverLayer) {\n                return;\n            }\n            var chartView = ecIns._chartsMap[seriesModel.__viewId];\n            if (chartView.__alive) {\n                chartView.group.traverse(function (el) {\n                    // Don't switch back.\n                    el.useHoverLayer = true;\n                });\n            }\n        });\n    }\n}\n\n/**\n * Update chart progressive and blend.\n * @param {module:echarts/model/Series|module:echarts/model/Component} model\n * @param {module:echarts/view/Component|module:echarts/view/Chart} view\n */\nfunction updateBlend(seriesModel, chartView) {\n    var blendMode = seriesModel.get('blendMode') || null;\n    if (__DEV__) {\n        if (!env$1.canvasSupported && blendMode && blendMode !== 'source-over') {\n            console.warn('Only canvas support blendMode');\n        }\n    }\n    chartView.group.traverse(function (el) {\n        // FIXME marker and other components\n        if (!el.isGroup) {\n            // Only set if blendMode is changed. In case element is incremental and don't wan't to rerender.\n            if (el.style.blend !== blendMode) {\n                el.setStyle('blend', blendMode);\n            }\n        }\n        if (el.eachPendingDisplayable) {\n            el.eachPendingDisplayable(function (displayable) {\n                displayable.setStyle('blend', blendMode);\n            });\n        }\n    });\n}\n\n/**\n * @param {module:echarts/model/Series|module:echarts/model/Component} model\n * @param {module:echarts/view/Component|module:echarts/view/Chart} view\n */\nfunction updateZ(model, view) {\n    var z = model.get('z');\n    var zlevel = model.get('zlevel');\n    // Set z and zlevel\n    view.group.traverse(function (el) {\n        if (el.type !== 'group') {\n            z != null && (el.z = z);\n            zlevel != null && (el.zlevel = zlevel);\n        }\n    });\n}\n\nfunction createExtensionAPI(ecInstance) {\n    var coordSysMgr = ecInstance._coordSysMgr;\n    return extend(new ExtensionAPI(ecInstance), {\n        // Inject methods\n        getCoordinateSystems: bind(\n            coordSysMgr.getCoordinateSystems, coordSysMgr\n        ),\n        getComponentByElement: function (el) {\n            while (el) {\n                var modelInfo = el.__ecComponentInfo;\n                if (modelInfo != null) {\n                    return ecInstance._model.getComponent(modelInfo.mainType, modelInfo.index);\n                }\n                el = el.parent;\n            }\n        }\n    });\n}\n\n\n/**\n * @class\n * Usage of query:\n * `chart.on('click', query, handler);`\n * The `query` can be:\n * + The component type query string, only `mainType` or `mainType.subType`,\n *   like: 'xAxis', 'series', 'xAxis.category' or 'series.line'.\n * + The component query object, like:\n *   `{seriesIndex: 2}`, `{seriesName: 'xx'}`, `{seriesId: 'some'}`,\n *   `{xAxisIndex: 2}`, `{xAxisName: 'xx'}`, `{xAxisId: 'some'}`.\n * + The data query object, like:\n *   `{dataIndex: 123}`, `{dataType: 'link'}`, `{name: 'some'}`.\n * + The other query object (cmponent customized query), like:\n *   `{element: 'some'}` (only available in custom series).\n *\n * Caveat: If a prop in the `query` object is `null/undefined`, it is the\n * same as there is no such prop in the `query` object.\n */\nfunction EventProcessor() {\n    // These info required: targetEl, packedEvent, model, view\n    this.eventInfo;\n}\nEventProcessor.prototype = {\n    constructor: EventProcessor,\n\n    normalizeQuery: function (query) {\n        var cptQuery = {};\n        var dataQuery = {};\n        var otherQuery = {};\n\n        // `query` is `mainType` or `mainType.subType` of component.\n        if (isString(query)) {\n            var condCptType = parseClassType(query);\n            // `.main` and `.sub` may be ''.\n            cptQuery.mainType = condCptType.main || null;\n            cptQuery.subType = condCptType.sub || null;\n        }\n        // `query` is an object, convert to {mainType, index, name, id}.\n        else {\n            // `xxxIndex`, `xxxName`, `xxxId`, `name`, `dataIndex`, `dataType` is reserved,\n            // can not be used in `compomentModel.filterForExposedEvent`.\n            var suffixes = ['Index', 'Name', 'Id'];\n            var dataKeys = {name: 1, dataIndex: 1, dataType: 1};\n            each$1(query, function (val, key) {\n                var reserved = false;\n                for (var i = 0; i < suffixes.length; i++) {\n                    var propSuffix = suffixes[i];\n                    var suffixPos = key.lastIndexOf(propSuffix);\n                    if (suffixPos > 0 && suffixPos === key.length - propSuffix.length) {\n                        var mainType = key.slice(0, suffixPos);\n                        // Consider `dataIndex`.\n                        if (mainType !== 'data') {\n                            cptQuery.mainType = mainType;\n                            cptQuery[propSuffix.toLowerCase()] = val;\n                            reserved = true;\n                        }\n                    }\n                }\n                if (dataKeys.hasOwnProperty(key)) {\n                    dataQuery[key] = val;\n                    reserved = true;\n                }\n                if (!reserved) {\n                    otherQuery[key] = val;\n                }\n            });\n        }\n\n        return {\n            cptQuery: cptQuery,\n            dataQuery: dataQuery,\n            otherQuery: otherQuery\n        };\n    },\n\n    filter: function (eventType, query, args) {\n        // They should be assigned before each trigger call.\n        var eventInfo = this.eventInfo;\n\n        if (!eventInfo) {\n            return true;\n        }\n\n        var targetEl = eventInfo.targetEl;\n        var packedEvent = eventInfo.packedEvent;\n        var model = eventInfo.model;\n        var view = eventInfo.view;\n\n        // For event like 'globalout'.\n        if (!model || !view) {\n            return true;\n        }\n\n        var cptQuery = query.cptQuery;\n        var dataQuery = query.dataQuery;\n\n        return check(cptQuery, model, 'mainType')\n            && check(cptQuery, model, 'subType')\n            && check(cptQuery, model, 'index', 'componentIndex')\n            && check(cptQuery, model, 'name')\n            && check(cptQuery, model, 'id')\n            && check(dataQuery, packedEvent, 'name')\n            && check(dataQuery, packedEvent, 'dataIndex')\n            && check(dataQuery, packedEvent, 'dataType')\n            && (!view.filterForExposedEvent || view.filterForExposedEvent(\n                eventType, query.otherQuery, targetEl, packedEvent\n            ));\n\n        function check(query, host, prop, propOnHost) {\n            return query[prop] == null || host[propOnHost || prop] === query[prop];\n        }\n    },\n\n    afterTrigger: function () {\n        // Make sure the eventInfo wont be used in next trigger.\n        this.eventInfo = null;\n    }\n};\n\n\n/**\n * @type {Object} key: actionType.\n * @inner\n */\nvar actions = {};\n\n/**\n * Map eventType to actionType\n * @type {Object}\n */\nvar eventActionMap = {};\n\n/**\n * Data processor functions of each stage\n * @type {Array.<Object.<string, Function>>}\n * @inner\n */\nvar dataProcessorFuncs = [];\n\n/**\n * @type {Array.<Function>}\n * @inner\n */\nvar optionPreprocessorFuncs = [];\n\n/**\n * @type {Array.<Function>}\n * @inner\n */\nvar postUpdateFuncs = [];\n\n/**\n * Visual encoding functions of each stage\n * @type {Array.<Object.<string, Function>>}\n */\nvar visualFuncs = [];\n\n/**\n * Theme storage\n * @type {Object.<key, Object>}\n */\nvar themeStorage = {};\n/**\n * Loading effects\n */\nvar loadingEffects = {};\n\nvar instances = {};\nvar connectedGroups = {};\n\nvar idBase = new Date() - 0;\nvar groupIdBase = new Date() - 0;\nvar DOM_ATTRIBUTE_KEY = '_echarts_instance_';\n\nfunction enableConnect(chart) {\n    var STATUS_PENDING = 0;\n    var STATUS_UPDATING = 1;\n    var STATUS_UPDATED = 2;\n    var STATUS_KEY = '__connectUpdateStatus';\n\n    function updateConnectedChartsStatus(charts, status) {\n        for (var i = 0; i < charts.length; i++) {\n            var otherChart = charts[i];\n            otherChart[STATUS_KEY] = status;\n        }\n    }\n\n    each(eventActionMap, function (actionType, eventType) {\n        chart._messageCenter.on(eventType, function (event) {\n            if (connectedGroups[chart.group] && chart[STATUS_KEY] !== STATUS_PENDING) {\n                if (event && event.escapeConnect) {\n                    return;\n                }\n\n                var action = chart.makeActionFromEvent(event);\n                var otherCharts = [];\n\n                each(instances, function (otherChart) {\n                    if (otherChart !== chart && otherChart.group === chart.group) {\n                        otherCharts.push(otherChart);\n                    }\n                });\n\n                updateConnectedChartsStatus(otherCharts, STATUS_PENDING);\n                each(otherCharts, function (otherChart) {\n                    if (otherChart[STATUS_KEY] !== STATUS_UPDATING) {\n                        otherChart.dispatchAction(action);\n                    }\n                });\n                updateConnectedChartsStatus(otherCharts, STATUS_UPDATED);\n            }\n        });\n    });\n}\n\n/**\n * @param {HTMLElement} dom\n * @param {Object} [theme]\n * @param {Object} opts\n * @param {number} [opts.devicePixelRatio] Use window.devicePixelRatio by default\n * @param {string} [opts.renderer] Can choose 'canvas' or 'svg' to render the chart.\n * @param {number} [opts.width] Use clientWidth of the input `dom` by default.\n *                              Can be 'auto' (the same as null/undefined)\n * @param {number} [opts.height] Use clientHeight of the input `dom` by default.\n *                               Can be 'auto' (the same as null/undefined)\n */\nfunction init(dom, theme$$1, opts) {\n    if (__DEV__) {\n        // Check version\n        if ((version$1.replace('.', '') - 0) < (dependencies.zrender.replace('.', '') - 0)) {\n            throw new Error(\n                'zrender/src ' + version$1\n                + ' is too old for ECharts ' + version\n                + '. Current version need ZRender '\n                + dependencies.zrender + '+'\n            );\n        }\n\n        if (!dom) {\n            throw new Error('Initialize failed: invalid dom.');\n        }\n    }\n\n    var existInstance = getInstanceByDom(dom);\n    if (existInstance) {\n        if (__DEV__) {\n            console.warn('There is a chart instance already initialized on the dom.');\n        }\n        return existInstance;\n    }\n\n    if (__DEV__) {\n        if (isDom(dom)\n            && dom.nodeName.toUpperCase() !== 'CANVAS'\n            && (\n                (!dom.clientWidth && (!opts || opts.width == null))\n                || (!dom.clientHeight && (!opts || opts.height == null))\n            )\n        ) {\n            console.warn('Can\\'t get DOM width or height. Please check '\n                + 'dom.clientWidth and dom.clientHeight. They should not be 0.'\n                + 'For example, you may need to call this in the callback '\n                + 'of window.onload.');\n        }\n    }\n\n    var chart = new ECharts(dom, theme$$1, opts);\n    chart.id = 'ec_' + idBase++;\n    instances[chart.id] = chart;\n\n    setAttribute(dom, DOM_ATTRIBUTE_KEY, chart.id);\n\n    enableConnect(chart);\n\n    return chart;\n}\n\n/**\n * @return {string|Array.<module:echarts~ECharts>} groupId\n */\nfunction connect(groupId) {\n    // Is array of charts\n    if (isArray(groupId)) {\n        var charts = groupId;\n        groupId = null;\n        // If any chart has group\n        each(charts, function (chart) {\n            if (chart.group != null) {\n                groupId = chart.group;\n            }\n        });\n        groupId = groupId || ('g_' + groupIdBase++);\n        each(charts, function (chart) {\n            chart.group = groupId;\n        });\n    }\n    connectedGroups[groupId] = true;\n    return groupId;\n}\n\n/**\n * @DEPRECATED\n * @return {string} groupId\n */\nfunction disConnect(groupId) {\n    connectedGroups[groupId] = false;\n}\n\n/**\n * @return {string} groupId\n */\nvar disconnect = disConnect;\n\n/**\n * Dispose a chart instance\n * @param  {module:echarts~ECharts|HTMLDomElement|string} chart\n */\nfunction dispose(chart) {\n    if (typeof chart === 'string') {\n        chart = instances[chart];\n    }\n    else if (!(chart instanceof ECharts)) {\n        // Try to treat as dom\n        chart = getInstanceByDom(chart);\n    }\n    if ((chart instanceof ECharts) && !chart.isDisposed()) {\n        chart.dispose();\n    }\n}\n\n/**\n * @param  {HTMLElement} dom\n * @return {echarts~ECharts}\n */\nfunction getInstanceByDom(dom) {\n    return instances[getAttribute(dom, DOM_ATTRIBUTE_KEY)];\n}\n\n/**\n * @param {string} key\n * @return {echarts~ECharts}\n */\nfunction getInstanceById(key) {\n    return instances[key];\n}\n\n/**\n * Register theme\n */\nfunction registerTheme(name, theme$$1) {\n    themeStorage[name] = theme$$1;\n}\n\n/**\n * Register option preprocessor\n * @param {Function} preprocessorFunc\n */\nfunction registerPreprocessor(preprocessorFunc) {\n    optionPreprocessorFuncs.push(preprocessorFunc);\n}\n\n/**\n * @param {number} [priority=1000]\n * @param {Object|Function} processor\n */\nfunction registerProcessor(priority, processor) {\n    normalizeRegister(dataProcessorFuncs, priority, processor, PRIORITY_PROCESSOR_FILTER);\n}\n\n/**\n * Register postUpdater\n * @param {Function} postUpdateFunc\n */\nfunction registerPostUpdate(postUpdateFunc) {\n    postUpdateFuncs.push(postUpdateFunc);\n}\n\n/**\n * Usage:\n * registerAction('someAction', 'someEvent', function () { ... });\n * registerAction('someAction', function () { ... });\n * registerAction(\n *     {type: 'someAction', event: 'someEvent', update: 'updateView'},\n *     function () { ... }\n * );\n *\n * @param {(string|Object)} actionInfo\n * @param {string} actionInfo.type\n * @param {string} [actionInfo.event]\n * @param {string} [actionInfo.update]\n * @param {string} [eventName]\n * @param {Function} action\n */\nfunction registerAction(actionInfo, eventName, action) {\n    if (typeof eventName === 'function') {\n        action = eventName;\n        eventName = '';\n    }\n    var actionType = isObject(actionInfo)\n        ? actionInfo.type\n        : ([actionInfo, actionInfo = {\n            event: eventName\n        }][0]);\n\n    // Event name is all lowercase\n    actionInfo.event = (actionInfo.event || actionType).toLowerCase();\n    eventName = actionInfo.event;\n\n    // Validate action type and event name.\n    assert(ACTION_REG.test(actionType) && ACTION_REG.test(eventName));\n\n    if (!actions[actionType]) {\n        actions[actionType] = {action: action, actionInfo: actionInfo};\n    }\n    eventActionMap[eventName] = actionType;\n}\n\n/**\n * @param {string} type\n * @param {*} CoordinateSystem\n */\nfunction registerCoordinateSystem(type, CoordinateSystem$$1) {\n    CoordinateSystemManager.register(type, CoordinateSystem$$1);\n}\n\n/**\n * Get dimensions of specified coordinate system.\n * @param {string} type\n * @return {Array.<string|Object>}\n */\nfunction getCoordinateSystemDimensions(type) {\n    var coordSysCreator = CoordinateSystemManager.get(type);\n    if (coordSysCreator) {\n        return coordSysCreator.getDimensionsInfo\n                ? coordSysCreator.getDimensionsInfo()\n                : coordSysCreator.dimensions.slice();\n    }\n}\n\n/**\n * Layout is a special stage of visual encoding\n * Most visual encoding like color are common for different chart\n * But each chart has it's own layout algorithm\n *\n * @param {number} [priority=1000]\n * @param {Function} layoutTask\n */\nfunction registerLayout(priority, layoutTask) {\n    normalizeRegister(visualFuncs, priority, layoutTask, PRIORITY_VISUAL_LAYOUT, 'layout');\n}\n\n/**\n * @param {number} [priority=3000]\n * @param {module:echarts/stream/Task} visualTask\n */\nfunction registerVisual(priority, visualTask) {\n    normalizeRegister(visualFuncs, priority, visualTask, PRIORITY_VISUAL_CHART, 'visual');\n}\n\n/**\n * @param {Object|Function} fn: {seriesType, createOnAllSeries, performRawSeries, reset}\n */\nfunction normalizeRegister(targetList, priority, fn, defaultPriority, visualType) {\n    if (isFunction(priority) || isObject(priority)) {\n        fn = priority;\n        priority = defaultPriority;\n    }\n\n    if (__DEV__) {\n        if (isNaN(priority) || priority == null) {\n            throw new Error('Illegal priority');\n        }\n        // Check duplicate\n        each(targetList, function (wrap) {\n            assert(wrap.__raw !== fn);\n        });\n    }\n\n    var stageHandler = Scheduler.wrapStageHandler(fn, visualType);\n\n    stageHandler.__prio = priority;\n    stageHandler.__raw = fn;\n    targetList.push(stageHandler);\n\n    return stageHandler;\n}\n\n/**\n * @param {string} name\n */\nfunction registerLoading(name, loadingFx) {\n    loadingEffects[name] = loadingFx;\n}\n\n/**\n * @param {Object} opts\n * @param {string} [superClass]\n */\nfunction extendComponentModel(opts/*, superClass*/) {\n    // var Clazz = ComponentModel;\n    // if (superClass) {\n    //     var classType = parseClassType(superClass);\n    //     Clazz = ComponentModel.getClass(classType.main, classType.sub, true);\n    // }\n    return ComponentModel.extend(opts);\n}\n\n/**\n * @param {Object} opts\n * @param {string} [superClass]\n */\nfunction extendComponentView(opts/*, superClass*/) {\n    // var Clazz = ComponentView;\n    // if (superClass) {\n    //     var classType = parseClassType(superClass);\n    //     Clazz = ComponentView.getClass(classType.main, classType.sub, true);\n    // }\n    return Component$1.extend(opts);\n}\n\n/**\n * @param {Object} opts\n * @param {string} [superClass]\n */\nfunction extendSeriesModel(opts/*, superClass*/) {\n    // var Clazz = SeriesModel;\n    // if (superClass) {\n    //     superClass = 'series.' + superClass.replace('series.', '');\n    //     var classType = parseClassType(superClass);\n    //     Clazz = ComponentModel.getClass(classType.main, classType.sub, true);\n    // }\n    return SeriesModel.extend(opts);\n}\n\n/**\n * @param {Object} opts\n * @param {string} [superClass]\n */\nfunction extendChartView(opts/*, superClass*/) {\n    // var Clazz = ChartView;\n    // if (superClass) {\n    //     superClass = superClass.replace('series.', '');\n    //     var classType = parseClassType(superClass);\n    //     Clazz = ChartView.getClass(classType.main, true);\n    // }\n    return Chart.extend(opts);\n}\n\n/**\n * ZRender need a canvas context to do measureText.\n * But in node environment canvas may be created by node-canvas.\n * So we need to specify how to create a canvas instead of using document.createElement('canvas')\n *\n * Be careful of using it in the browser.\n *\n * @param {Function} creator\n * @example\n *     var Canvas = require('canvas');\n *     var echarts = require('echarts');\n *     echarts.setCanvasCreator(function () {\n *         // Small size is enough.\n *         return new Canvas(32, 32);\n *     });\n */\nfunction setCanvasCreator(creator) {\n    $override('createCanvas', creator);\n}\n\n/**\n * @param {string} mapName\n * @param {Array.<Object>|Object|string} geoJson\n * @param {Object} [specialAreas]\n *\n * @example GeoJSON\n *     $.get('USA.json', function (geoJson) {\n *         echarts.registerMap('USA', geoJson);\n *         // Or\n *         echarts.registerMap('USA', {\n *             geoJson: geoJson,\n *             specialAreas: {}\n *         })\n *     });\n *\n *     $.get('airport.svg', function (svg) {\n *         echarts.registerMap('airport', {\n *             svg: svg\n *         }\n *     });\n *\n *     echarts.registerMap('eu', [\n *         {svg: eu-topographic.svg},\n *         {geoJSON: eu.json}\n *     ])\n */\nfunction registerMap(mapName, geoJson, specialAreas) {\n    mapDataStorage.registerMap(mapName, geoJson, specialAreas);\n}\n\n/**\n * @param {string} mapName\n * @return {Object}\n */\nfunction getMap(mapName) {\n    // For backward compatibility, only return the first one.\n    var records = mapDataStorage.retrieveMap(mapName);\n    return records && records[0] && {\n        geoJson: records[0].geoJSON,\n        specialAreas: records[0].specialAreas\n    };\n}\n\nregisterVisual(PRIORITY_VISUAL_GLOBAL, seriesColor);\nregisterPreprocessor(backwardCompat);\nregisterProcessor(PRIORITY_PROCESSOR_STATISTIC, dataStack);\nregisterLoading('default', loadingDefault);\n\n// Default actions\n\nregisterAction({\n    type: 'highlight',\n    event: 'highlight',\n    update: 'highlight'\n}, noop);\n\nregisterAction({\n    type: 'downplay',\n    event: 'downplay',\n    update: 'downplay'\n}, noop);\n\n// Default theme\nregisterTheme('light', lightTheme);\nregisterTheme('dark', theme);\n\n// For backward compatibility, where the namespace `dataTool` will\n// be mounted on `echarts` is the extension `dataTool` is imported.\nvar dataTool = {};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\nfunction defaultKeyGetter(item) {\n    return item;\n}\n\n/**\n * @param {Array} oldArr\n * @param {Array} newArr\n * @param {Function} oldKeyGetter\n * @param {Function} newKeyGetter\n * @param {Object} [context] Can be visited by this.context in callback.\n */\nfunction DataDiffer(oldArr, newArr, oldKeyGetter, newKeyGetter, context) {\n    this._old = oldArr;\n    this._new = newArr;\n\n    this._oldKeyGetter = oldKeyGetter || defaultKeyGetter;\n    this._newKeyGetter = newKeyGetter || defaultKeyGetter;\n\n    this.context = context;\n}\n\nDataDiffer.prototype = {\n\n    constructor: DataDiffer,\n\n    /**\n     * Callback function when add a data\n     */\n    add: function (func) {\n        this._add = func;\n        return this;\n    },\n\n    /**\n     * Callback function when update a data\n     */\n    update: function (func) {\n        this._update = func;\n        return this;\n    },\n\n    /**\n     * Callback function when remove a data\n     */\n    remove: function (func) {\n        this._remove = func;\n        return this;\n    },\n\n    execute: function () {\n        var oldArr = this._old;\n        var newArr = this._new;\n\n        var oldDataIndexMap = {};\n        var newDataIndexMap = {};\n        var oldDataKeyArr = [];\n        var newDataKeyArr = [];\n        var i;\n\n        initIndexMap(oldArr, oldDataIndexMap, oldDataKeyArr, '_oldKeyGetter', this);\n        initIndexMap(newArr, newDataIndexMap, newDataKeyArr, '_newKeyGetter', this);\n\n        // Travel by inverted order to make sure order consistency\n        // when duplicate keys exists (consider newDataIndex.pop() below).\n        // For performance consideration, these code below do not look neat.\n        for (i = 0; i < oldArr.length; i++) {\n            var key = oldDataKeyArr[i];\n            var idx = newDataIndexMap[key];\n\n            // idx can never be empty array here. see 'set null' logic below.\n            if (idx != null) {\n                // Consider there is duplicate key (for example, use dataItem.name as key).\n                // We should make sure every item in newArr and oldArr can be visited.\n                var len = idx.length;\n                if (len) {\n                    len === 1 && (newDataIndexMap[key] = null);\n                    idx = idx.unshift();\n                }\n                else {\n                    newDataIndexMap[key] = null;\n                }\n                this._update && this._update(idx, i);\n            }\n            else {\n                this._remove && this._remove(i);\n            }\n        }\n\n        for (var i = 0; i < newDataKeyArr.length; i++) {\n            var key = newDataKeyArr[i];\n            if (newDataIndexMap.hasOwnProperty(key)) {\n                var idx = newDataIndexMap[key];\n                if (idx == null) {\n                    continue;\n                }\n                // idx can never be empty array here. see 'set null' logic above.\n                if (!idx.length) {\n                    this._add && this._add(idx);\n                }\n                else {\n                    for (var j = 0, len = idx.length; j < len; j++) {\n                        this._add && this._add(idx[j]);\n                    }\n                }\n            }\n        }\n    }\n};\n\nfunction initIndexMap(arr, map, keyArr, keyGetterName, dataDiffer) {\n    for (var i = 0; i < arr.length; i++) {\n        // Add prefix to avoid conflict with Object.prototype.\n        var key = '_ec_' + dataDiffer[keyGetterName](arr[i], i);\n        var existence = map[key];\n        if (existence == null) {\n            keyArr.push(key);\n            map[key] = i;\n        }\n        else {\n            if (!existence.length) {\n                map[key] = existence = [existence];\n            }\n            existence.push(i);\n        }\n    }\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar OTHER_DIMENSIONS = createHashMap([\n    'tooltip', 'label', 'itemName', 'itemId', 'seriesName'\n]);\n\nfunction summarizeDimensions(data) {\n    var summary = {};\n    var encode = summary.encode = {};\n    var notExtraCoordDimMap = createHashMap();\n    var defaultedLabel = [];\n    var defaultedTooltip = [];\n\n    // See the comment of `List.js#userOutput`.\n    var userOutput = summary.userOutput = {\n        dimensionNames: data.dimensions.slice(),\n        encode: {}\n    };\n\n    each$1(data.dimensions, function (dimName) {\n        var dimItem = data.getDimensionInfo(dimName);\n\n        var coordDim = dimItem.coordDim;\n        if (coordDim) {\n            if (__DEV__) {\n                assert$1(OTHER_DIMENSIONS.get(coordDim) == null);\n            }\n\n            var coordDimIndex = dimItem.coordDimIndex;\n            getOrCreateEncodeArr(encode, coordDim)[coordDimIndex] = dimName;\n\n            if (!dimItem.isExtraCoord) {\n                notExtraCoordDimMap.set(coordDim, 1);\n\n                // Use the last coord dim (and label friendly) as default label,\n                // because when dataset is used, it is hard to guess which dimension\n                // can be value dimension. If both show x, y on label is not look good,\n                // and conventionally y axis is focused more.\n                if (mayLabelDimType(dimItem.type)) {\n                    defaultedLabel[0] = dimName;\n                }\n\n                // User output encode do not contain generated coords.\n                // And it only has index. User can use index to retrieve value from the raw item array.\n                getOrCreateEncodeArr(userOutput.encode, coordDim)[coordDimIndex] = dimItem.index;\n            }\n            if (dimItem.defaultTooltip) {\n                defaultedTooltip.push(dimName);\n            }\n        }\n\n        OTHER_DIMENSIONS.each(function (v, otherDim) {\n            var encodeArr = getOrCreateEncodeArr(encode, otherDim);\n\n            var dimIndex = dimItem.otherDims[otherDim];\n            if (dimIndex != null && dimIndex !== false) {\n                encodeArr[dimIndex] = dimItem.name;\n            }\n        });\n    });\n\n    var dataDimsOnCoord = [];\n    var encodeFirstDimNotExtra = {};\n\n    notExtraCoordDimMap.each(function (v, coordDim) {\n        var dimArr = encode[coordDim];\n        // ??? FIXME extra coord should not be set in dataDimsOnCoord.\n        // But should fix the case that radar axes: simplify the logic\n        // of `completeDimension`, remove `extraPrefix`.\n        encodeFirstDimNotExtra[coordDim] = dimArr[0];\n        // Not necessary to remove duplicate, because a data\n        // dim canot on more than one coordDim.\n        dataDimsOnCoord = dataDimsOnCoord.concat(dimArr);\n    });\n\n    summary.dataDimsOnCoord = dataDimsOnCoord;\n    summary.encodeFirstDimNotExtra = encodeFirstDimNotExtra;\n\n    var encodeLabel = encode.label;\n    // FIXME `encode.label` is not recommanded, because formatter can not be set\n    // in this way. Use label.formatter instead. May be remove this approach someday.\n    if (encodeLabel && encodeLabel.length) {\n        defaultedLabel = encodeLabel.slice();\n    }\n\n    var encodeTooltip = encode.tooltip;\n    if (encodeTooltip && encodeTooltip.length) {\n        defaultedTooltip = encodeTooltip.slice();\n    }\n    else if (!defaultedTooltip.length) {\n        defaultedTooltip = defaultedLabel.slice();\n    }\n\n    encode.defaultedLabel = defaultedLabel;\n    encode.defaultedTooltip = defaultedTooltip;\n\n    return summary;\n}\n\nfunction getOrCreateEncodeArr(encode, dim) {\n    if (!encode.hasOwnProperty(dim)) {\n        encode[dim] = [];\n    }\n    return encode[dim];\n}\n\nfunction getDimensionTypeByAxis(axisType) {\n    return axisType === 'category'\n        ? 'ordinal'\n        : axisType === 'time'\n        ? 'time'\n        : 'float';\n}\n\nfunction mayLabelDimType(dimType) {\n    // In most cases, ordinal and time do not suitable for label.\n    // Ordinal info can be displayed on axis. Time is too long.\n    return !(dimType === 'ordinal' || dimType === 'time');\n}\n\n// function findTheLastDimMayLabel(data) {\n//     // Get last value dim\n//     var dimensions = data.dimensions.slice();\n//     var valueType;\n//     var valueDim;\n//     while (dimensions.length && (\n//         valueDim = dimensions.pop(),\n//         valueType = data.getDimensionInfo(valueDim).type,\n//         valueType === 'ordinal' || valueType === 'time'\n//     )) {} // jshint ignore:line\n//     return valueDim;\n// }\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/* global Float64Array, Int32Array, Uint32Array, Uint16Array */\n\n/**\n * List for data storage\n * @module echarts/data/List\n */\n\nvar isObject$4 = isObject$1;\n\nvar UNDEFINED = 'undefined';\nvar INDEX_NOT_FOUND = -1;\n\n// Use prefix to avoid index to be the same as otherIdList[idx],\n// which will cause weird udpate animation.\nvar ID_PREFIX = 'e\\0\\0';\n\nvar dataCtors = {\n    'float': typeof Float64Array === UNDEFINED\n        ? Array : Float64Array,\n    'int': typeof Int32Array === UNDEFINED\n        ? Array : Int32Array,\n    // Ordinal data type can be string or int\n    'ordinal': Array,\n    'number': Array,\n    'time': Array\n};\n\n// Caution: MUST not use `new CtorUint32Array(arr, 0, len)`, because the Ctor of array is\n// different from the Ctor of typed array.\nvar CtorUint32Array = typeof Uint32Array === UNDEFINED ? Array : Uint32Array;\nvar CtorInt32Array = typeof Int32Array === UNDEFINED ? Array : Int32Array;\nvar CtorUint16Array = typeof Uint16Array === UNDEFINED ? Array : Uint16Array;\n\nfunction getIndicesCtor(list) {\n    // The possible max value in this._indicies is always this._rawCount despite of filtering.\n    return list._rawCount > 65535 ? CtorUint32Array : CtorUint16Array;\n}\n\nfunction cloneChunk(originalChunk) {\n    var Ctor = originalChunk.constructor;\n    // Only shallow clone is enough when Array.\n    return Ctor === Array ? originalChunk.slice() : new Ctor(originalChunk);\n}\n\nvar TRANSFERABLE_PROPERTIES = [\n    'hasItemOption', '_nameList', '_idList', '_invertedIndicesMap',\n    '_rawData', '_chunkSize', '_chunkCount', '_dimValueGetter',\n    '_count', '_rawCount', '_nameDimIdx', '_idDimIdx'\n];\nvar CLONE_PROPERTIES = [\n    '_extent', '_approximateExtent', '_rawExtent'\n];\n\nfunction transferProperties(target, source) {\n    each$1(TRANSFERABLE_PROPERTIES.concat(source.__wrappedMethods || []), function (propName) {\n        if (source.hasOwnProperty(propName)) {\n            target[propName] = source[propName];\n        }\n    });\n\n    target.__wrappedMethods = source.__wrappedMethods;\n\n    each$1(CLONE_PROPERTIES, function (propName) {\n        target[propName] = clone(source[propName]);\n    });\n\n    target._calculationInfo = extend(source._calculationInfo);\n}\n\n\n\n\n\n/**\n * @constructor\n * @alias module:echarts/data/List\n *\n * @param {Array.<string|Object>} dimensions\n *      For example, ['someDimName', {name: 'someDimName', type: 'someDimType'}, ...].\n *      Dimensions should be concrete names like x, y, z, lng, lat, angle, radius\n *      Spetial fields: {\n *          ordinalMeta: <module:echarts/data/OrdinalMeta>\n *          createInvertedIndices: <boolean>\n *      }\n * @param {module:echarts/model/Model} hostModel\n */\nvar List = function (dimensions, hostModel) {\n\n    dimensions = dimensions || ['x', 'y'];\n\n    var dimensionInfos = {};\n    var dimensionNames = [];\n    var invertedIndicesMap = {};\n\n    for (var i = 0; i < dimensions.length; i++) {\n        // Use the original dimensions[i], where other flag props may exists.\n        var dimensionInfo = dimensions[i];\n\n        if (isString(dimensionInfo)) {\n            dimensionInfo = {name: dimensionInfo};\n        }\n\n        var dimensionName = dimensionInfo.name;\n        dimensionInfo.type = dimensionInfo.type || 'float';\n        if (!dimensionInfo.coordDim) {\n            dimensionInfo.coordDim = dimensionName;\n            dimensionInfo.coordDimIndex = 0;\n        }\n\n        dimensionInfo.otherDims = dimensionInfo.otherDims || {};\n        dimensionNames.push(dimensionName);\n        dimensionInfos[dimensionName] = dimensionInfo;\n\n        dimensionInfo.index = i;\n\n        if (dimensionInfo.createInvertedIndices) {\n            invertedIndicesMap[dimensionName] = [];\n        }\n    }\n\n    /**\n     * @readOnly\n     * @type {Array.<string>}\n     */\n    this.dimensions = dimensionNames;\n\n    /**\n     * Infomation of each data dimension, like data type.\n     * @type {Object}\n     */\n    this._dimensionInfos = dimensionInfos;\n\n    /**\n     * @type {module:echarts/model/Model}\n     */\n    this.hostModel = hostModel;\n\n    /**\n     * @type {module:echarts/model/Model}\n     */\n    this.dataType;\n\n    /**\n     * Indices stores the indices of data subset after filtered.\n     * This data subset will be used in chart.\n     * @type {Array.<number>}\n     * @readOnly\n     */\n    this._indices = null;\n\n    this._count = 0;\n    this._rawCount = 0;\n\n    /**\n     * Data storage\n     * @type {Object.<key, Array.<TypedArray|Array>>}\n     * @private\n     */\n    this._storage = {};\n\n    /**\n     * @type {Array.<string>}\n     */\n    this._nameList = [];\n    /**\n     * @type {Array.<string>}\n     */\n    this._idList = [];\n\n    /**\n     * Models of data option is stored sparse for optimizing memory cost\n     * @type {Array.<module:echarts/model/Model>}\n     * @private\n     */\n    this._optionModels = [];\n\n    /**\n     * Global visual properties after visual coding\n     * @type {Object}\n     * @private\n     */\n    this._visual = {};\n\n    /**\n     * Globel layout properties.\n     * @type {Object}\n     * @private\n     */\n    this._layout = {};\n\n    /**\n     * Item visual properties after visual coding\n     * @type {Array.<Object>}\n     * @private\n     */\n    this._itemVisuals = [];\n\n    /**\n     * Key: visual type, Value: boolean\n     * @type {Object}\n     * @readOnly\n     */\n    this.hasItemVisual = {};\n\n    /**\n     * Item layout properties after layout\n     * @type {Array.<Object>}\n     * @private\n     */\n    this._itemLayouts = [];\n\n    /**\n     * Graphic elemnents\n     * @type {Array.<module:zrender/Element>}\n     * @private\n     */\n    this._graphicEls = [];\n\n    /**\n     * Max size of each chunk.\n     * @type {number}\n     * @private\n     */\n    this._chunkSize = 1e5;\n\n    /**\n     * @type {number}\n     * @private\n     */\n    this._chunkCount = 0;\n\n    /**\n     * @type {Array.<Array|Object>}\n     * @private\n     */\n    this._rawData;\n\n    /**\n     * Raw extent will not be cloned, but only transfered.\n     * It will not be calculated util needed.\n     * key: dim,\n     * value: {end: number, extent: Array.<number>}\n     * @type {Object}\n     * @private\n     */\n    this._rawExtent = {};\n\n    /**\n     * @type {Object}\n     * @private\n     */\n    this._extent = {};\n\n    /**\n     * key: dim\n     * value: extent\n     * @type {Object}\n     * @private\n     */\n    this._approximateExtent = {};\n\n    /**\n     * Cache summary info for fast visit. See \"dimensionHelper\".\n     * @type {Object}\n     * @private\n     */\n    this._dimensionsSummary = summarizeDimensions(this);\n\n    /**\n     * @type {Object.<Array|TypedArray>}\n     * @private\n     */\n    this._invertedIndicesMap = invertedIndicesMap;\n\n    /**\n     * @type {Object}\n     * @private\n     */\n    this._calculationInfo = {};\n\n    /**\n     * User output info of this data.\n     * DO NOT use it in other places!\n     *\n     * When preparing user params for user callbacks, we have\n     * to clone these inner data structures to prevent users\n     * from modifying them to effect built-in logic. And for\n     * performance consideration we make this `userOutput` to\n     * avoid clone them too many times.\n     *\n     * @type {Object}\n     * @readOnly\n     */\n    this.userOutput = this._dimensionsSummary.userOutput;\n};\n\nvar listProto = List.prototype;\n\nlistProto.type = 'list';\n\n/**\n * If each data item has it's own option\n * @type {boolean}\n */\nlistProto.hasItemOption = true;\n\n/**\n * The meanings of the input parameter `dim`:\n *\n * + If dim is a number (e.g., `1`), it means the index of the dimension.\n *   For example, `getDimension(0)` will return 'x' or 'lng' or 'radius'.\n * + If dim is a number-like string (e.g., `\"1\"`):\n *     + If there is the same concrete dim name defined in `this.dimensions`, it means that concrete name.\n *     + If not, it will be converted to a number, which means the index of the dimension.\n *        (why? because of the backward compatbility. We have been tolerating number-like string in\n *        dimension setting, although now it seems that it is not a good idea.)\n *     For example, `visualMap[i].dimension: \"1\"` is the same meaning as `visualMap[i].dimension: 1`,\n *     if no dimension name is defined as `\"1\"`.\n * + If dim is a not-number-like string, it means the concrete dim name.\n *   For example, it can be be default name `\"x\"`, `\"y\"`, `\"z\"`, `\"lng\"`, `\"lat\"`, `\"angle\"`, `\"radius\"`,\n *   or customized in `dimensions` property of option like `\"age\"`.\n *\n * Get dimension name\n * @param {string|number} dim See above.\n * @return {string} Concrete dim name.\n */\nlistProto.getDimension = function (dim) {\n    if (typeof dim === 'number'\n        // If being a number-like string but not being defined a dimension name.\n        || (!isNaN(dim) && !this._dimensionInfos.hasOwnProperty(dim))\n    ) {\n        dim = this.dimensions[dim];\n    }\n    return dim;\n};\n\n/**\n * Get type and calculation info of particular dimension\n * @param {string|number} dim\n *        Dimension can be concrete names like x, y, z, lng, lat, angle, radius\n *        Or a ordinal number. For example getDimensionInfo(0) will return 'x' or 'lng' or 'radius'\n */\nlistProto.getDimensionInfo = function (dim) {\n    // Do not clone, because there may be categories in dimInfo.\n    return this._dimensionInfos[this.getDimension(dim)];\n};\n\n/**\n * @return {Array.<string>} concrete dimension name list on coord.\n */\nlistProto.getDimensionsOnCoord = function () {\n    return this._dimensionsSummary.dataDimsOnCoord.slice();\n};\n\n/**\n * @param {string} coordDim\n * @param {number} [idx] A coordDim may map to more than one data dim.\n *        If idx is `true`, return a array of all mapped dims.\n *        If idx is not specified, return the first dim not extra.\n * @return {string|Array.<string>} concrete data dim.\n *        If idx is number, and not found, return null/undefined.\n *        If idx is `true`, and not found, return empty array (always return array).\n */\nlistProto.mapDimension = function (coordDim, idx) {\n    var dimensionsSummary = this._dimensionsSummary;\n\n    if (idx == null) {\n        return dimensionsSummary.encodeFirstDimNotExtra[coordDim];\n    }\n\n    var dims = dimensionsSummary.encode[coordDim];\n    return idx === true\n        // always return array if idx is `true`\n        ? (dims || []).slice()\n        : (dims && dims[idx]);\n};\n\n/**\n * Initialize from data\n * @param {Array.<Object|number|Array>} data source or data or data provider.\n * @param {Array.<string>} [nameLIst] The name of a datum is used on data diff and\n *        defualt label/tooltip.\n *        A name can be specified in encode.itemName,\n *        or dataItem.name (only for series option data),\n *        or provided in nameList from outside.\n * @param {Function} [dimValueGetter] (dataItem, dimName, dataIndex, dimIndex) => number\n */\nlistProto.initData = function (data, nameList, dimValueGetter) {\n\n    var notProvider = Source.isInstance(data) || isArrayLike(data);\n    if (notProvider) {\n        data = new DefaultDataProvider(data, this.dimensions.length);\n    }\n\n    if (__DEV__) {\n        if (!notProvider && (typeof data.getItem !== 'function' || typeof data.count !== 'function')) {\n            throw new Error('Inavlid data provider.');\n        }\n    }\n\n    this._rawData = data;\n\n    // Clear\n    this._storage = {};\n    this._indices = null;\n\n    this._nameList = nameList || [];\n\n    this._idList = [];\n\n    this._nameRepeatCount = {};\n\n    if (!dimValueGetter) {\n        this.hasItemOption = false;\n    }\n\n    /**\n     * @readOnly\n     */\n    this.defaultDimValueGetter = defaultDimValueGetters[\n        this._rawData.getSource().sourceFormat\n    ];\n    // Default dim value getter\n    this._dimValueGetter = dimValueGetter = dimValueGetter\n        || this.defaultDimValueGetter;\n    this._dimValueGetterArrayRows = defaultDimValueGetters.arrayRows;\n\n    // Reset raw extent.\n    this._rawExtent = {};\n\n    this._initDataFromProvider(0, data.count());\n\n    // If data has no item option.\n    if (data.pure) {\n        this.hasItemOption = false;\n    }\n};\n\nlistProto.getProvider = function () {\n    return this._rawData;\n};\n\n/**\n * Caution: Can be only called on raw data (before `this._indices` created).\n */\nlistProto.appendData = function (data) {\n    if (__DEV__) {\n        assert$1(!this._indices, 'appendData can only be called on raw data.');\n    }\n\n    var rawData = this._rawData;\n    var start = this.count();\n    rawData.appendData(data);\n    var end = rawData.count();\n    if (!rawData.persistent) {\n        end += start;\n    }\n    this._initDataFromProvider(start, end);\n};\n\n/**\n * Caution: Can be only called on raw data (before `this._indices` created).\n * This method does not modify `rawData` (`dataProvider`), but only\n * add values to storage.\n *\n * The final count will be increased by `Math.max(values.length, names.length)`.\n *\n * @param {Array.<Array.<*>>} values That is the SourceType: 'arrayRows', like\n *        [\n *            [12, 33, 44],\n *            [NaN, 43, 1],\n *            ['-', 'asdf', 0]\n *        ]\n *        Each item is exaclty cooresponding to a dimension.\n * @param {Array.<string>} [names]\n */\nlistProto.appendValues = function (values, names) {\n    var chunkSize = this._chunkSize;\n    var storage = this._storage;\n    var dimensions = this.dimensions;\n    var dimLen = dimensions.length;\n    var rawExtent = this._rawExtent;\n\n    var start = this.count();\n    var end = start + Math.max(values.length, names ? names.length : 0);\n    var originalChunkCount = this._chunkCount;\n\n    for (var i = 0; i < dimLen; i++) {\n        var dim = dimensions[i];\n        if (!rawExtent[dim]) {\n            rawExtent[dim] = getInitialExtent();\n        }\n        if (!storage[dim]) {\n            storage[dim] = [];\n        }\n        prepareChunks(storage, this._dimensionInfos[dim], chunkSize, originalChunkCount, end);\n        this._chunkCount = storage[dim].length;\n    }\n\n    var emptyDataItem = new Array(dimLen);\n    for (var idx = start; idx < end; idx++) {\n        var sourceIdx = idx - start;\n        var chunkIndex = Math.floor(idx / chunkSize);\n        var chunkOffset = idx % chunkSize;\n\n        // Store the data by dimensions\n        for (var k = 0; k < dimLen; k++) {\n            var dim = dimensions[k];\n            var val = this._dimValueGetterArrayRows(\n                values[sourceIdx] || emptyDataItem, dim, sourceIdx, k\n            );\n            storage[dim][chunkIndex][chunkOffset] = val;\n\n            var dimRawExtent = rawExtent[dim];\n            val < dimRawExtent[0] && (dimRawExtent[0] = val);\n            val > dimRawExtent[1] && (dimRawExtent[1] = val);\n        }\n\n        if (names) {\n            this._nameList[idx] = names[sourceIdx];\n        }\n    }\n\n    this._rawCount = this._count = end;\n\n    // Reset data extent\n    this._extent = {};\n\n    prepareInvertedIndex(this);\n};\n\nlistProto._initDataFromProvider = function (start, end) {\n    // Optimize.\n    if (start >= end) {\n        return;\n    }\n\n    var chunkSize = this._chunkSize;\n    var rawData = this._rawData;\n    var storage = this._storage;\n    var dimensions = this.dimensions;\n    var dimLen = dimensions.length;\n    var dimensionInfoMap = this._dimensionInfos;\n    var nameList = this._nameList;\n    var idList = this._idList;\n    var rawExtent = this._rawExtent;\n    var nameRepeatCount = this._nameRepeatCount = {};\n    var nameDimIdx;\n\n    var originalChunkCount = this._chunkCount;\n    for (var i = 0; i < dimLen; i++) {\n        var dim = dimensions[i];\n        if (!rawExtent[dim]) {\n            rawExtent[dim] = getInitialExtent();\n        }\n\n        var dimInfo = dimensionInfoMap[dim];\n        if (dimInfo.otherDims.itemName === 0) {\n            nameDimIdx = this._nameDimIdx = i;\n        }\n        if (dimInfo.otherDims.itemId === 0) {\n            this._idDimIdx = i;\n        }\n\n        if (!storage[dim]) {\n            storage[dim] = [];\n        }\n\n        prepareChunks(storage, dimInfo, chunkSize, originalChunkCount, end);\n\n        this._chunkCount = storage[dim].length;\n    }\n\n    var dataItem = new Array(dimLen);\n    for (var idx = start; idx < end; idx++) {\n        // NOTICE: Try not to write things into dataItem\n        dataItem = rawData.getItem(idx, dataItem);\n        // Each data item is value\n        // [1, 2]\n        // 2\n        // Bar chart, line chart which uses category axis\n        // only gives the 'y' value. 'x' value is the indices of category\n        // Use a tempValue to normalize the value to be a (x, y) value\n        var chunkIndex = Math.floor(idx / chunkSize);\n        var chunkOffset = idx % chunkSize;\n\n        // Store the data by dimensions\n        for (var k = 0; k < dimLen; k++) {\n            var dim = dimensions[k];\n            var dimStorage = storage[dim][chunkIndex];\n            // PENDING NULL is empty or zero\n            var val = this._dimValueGetter(dataItem, dim, idx, k);\n            dimStorage[chunkOffset] = val;\n\n            var dimRawExtent = rawExtent[dim];\n            val < dimRawExtent[0] && (dimRawExtent[0] = val);\n            val > dimRawExtent[1] && (dimRawExtent[1] = val);\n        }\n\n        // ??? FIXME not check by pure but sourceFormat?\n        // TODO refactor these logic.\n        if (!rawData.pure) {\n            var name = nameList[idx];\n\n            if (dataItem && name == null) {\n                // If dataItem is {name: ...}, it has highest priority.\n                // That is appropriate for many common cases.\n                if (dataItem.name != null) {\n                    // There is no other place to persistent dataItem.name,\n                    // so save it to nameList.\n                    nameList[idx] = name = dataItem.name;\n                }\n                else if (nameDimIdx != null) {\n                    var nameDim = dimensions[nameDimIdx];\n                    var nameDimChunk = storage[nameDim][chunkIndex];\n                    if (nameDimChunk) {\n                        name = nameDimChunk[chunkOffset];\n                        var ordinalMeta = dimensionInfoMap[nameDim].ordinalMeta;\n                        if (ordinalMeta && ordinalMeta.categories.length) {\n                            name = ordinalMeta.categories[name];\n                        }\n                    }\n                }\n            }\n\n            // Try using the id in option\n            // id or name is used on dynamical data, mapping old and new items.\n            var id = dataItem == null ? null : dataItem.id;\n\n            if (id == null && name != null) {\n                // Use name as id and add counter to avoid same name\n                nameRepeatCount[name] = nameRepeatCount[name] || 0;\n                id = name;\n                if (nameRepeatCount[name] > 0) {\n                    id += '__ec__' + nameRepeatCount[name];\n                }\n                nameRepeatCount[name]++;\n            }\n            id != null && (idList[idx] = id);\n        }\n    }\n\n    if (!rawData.persistent && rawData.clean) {\n        // Clean unused data if data source is typed array.\n        rawData.clean();\n    }\n\n    this._rawCount = this._count = end;\n\n    // Reset data extent\n    this._extent = {};\n\n    prepareInvertedIndex(this);\n};\n\nfunction prepareChunks(storage, dimInfo, chunkSize, chunkCount, end) {\n    var DataCtor = dataCtors[dimInfo.type];\n    var lastChunkIndex = chunkCount - 1;\n    var dim = dimInfo.name;\n    var resizeChunkArray = storage[dim][lastChunkIndex];\n    if (resizeChunkArray && resizeChunkArray.length < chunkSize) {\n        var newStore = new DataCtor(Math.min(end - lastChunkIndex * chunkSize, chunkSize));\n        // The cost of the copy is probably inconsiderable\n        // within the initial chunkSize.\n        for (var j = 0; j < resizeChunkArray.length; j++) {\n            newStore[j] = resizeChunkArray[j];\n        }\n        storage[dim][lastChunkIndex] = newStore;\n    }\n\n    // Create new chunks.\n    for (var k = chunkCount * chunkSize; k < end; k += chunkSize) {\n        storage[dim].push(new DataCtor(Math.min(end - k, chunkSize)));\n    }\n}\n\nfunction prepareInvertedIndex(list) {\n    var invertedIndicesMap = list._invertedIndicesMap;\n    each$1(invertedIndicesMap, function (invertedIndices, dim) {\n        var dimInfo = list._dimensionInfos[dim];\n\n        // Currently, only dimensions that has ordinalMeta can create inverted indices.\n        var ordinalMeta = dimInfo.ordinalMeta;\n        if (ordinalMeta) {\n            invertedIndices = invertedIndicesMap[dim] = new CtorInt32Array(\n                ordinalMeta.categories.length\n            );\n            // The default value of TypedArray is 0. To avoid miss\n            // mapping to 0, we should set it as INDEX_NOT_FOUND.\n            for (var i = 0; i < invertedIndices.length; i++) {\n                invertedIndices[i] = INDEX_NOT_FOUND;\n            }\n            for (var i = 0; i < list._count; i++) {\n                // Only support the case that all values are distinct.\n                invertedIndices[list.get(dim, i)] = i;\n            }\n        }\n    });\n}\n\nfunction getRawValueFromStore(list, dimIndex, rawIndex) {\n    var val;\n    if (dimIndex != null) {\n        var chunkSize = list._chunkSize;\n        var chunkIndex = Math.floor(rawIndex / chunkSize);\n        var chunkOffset = rawIndex % chunkSize;\n        var dim = list.dimensions[dimIndex];\n        var chunk = list._storage[dim][chunkIndex];\n        if (chunk) {\n            val = chunk[chunkOffset];\n            var ordinalMeta = list._dimensionInfos[dim].ordinalMeta;\n            if (ordinalMeta && ordinalMeta.categories.length) {\n                val = ordinalMeta.categories[val];\n            }\n        }\n    }\n    return val;\n}\n\n/**\n * @return {number}\n */\nlistProto.count = function () {\n    return this._count;\n};\n\nlistProto.getIndices = function () {\n    var newIndices;\n\n    var indices = this._indices;\n    if (indices) {\n        var Ctor = indices.constructor;\n        var thisCount = this._count;\n        // `new Array(a, b, c)` is different from `new Uint32Array(a, b, c)`.\n        if (Ctor === Array) {\n            newIndices = new Ctor(thisCount);\n            for (var i = 0; i < thisCount; i++) {\n                newIndices[i] = indices[i];\n            }\n        }\n        else {\n            newIndices = new Ctor(indices.buffer, 0, thisCount);\n        }\n    }\n    else {\n        var Ctor = getIndicesCtor(this);\n        var newIndices = new Ctor(this.count());\n        for (var i = 0; i < newIndices.length; i++) {\n            newIndices[i] = i;\n        }\n    }\n\n    return newIndices;\n};\n\n/**\n * Get value. Return NaN if idx is out of range.\n * @param {string} dim Dim must be concrete name.\n * @param {number} idx\n * @param {boolean} stack\n * @return {number}\n */\nlistProto.get = function (dim, idx /*, stack */) {\n    if (!(idx >= 0 && idx < this._count)) {\n        return NaN;\n    }\n    var storage = this._storage;\n    if (!storage[dim]) {\n        // TODO Warn ?\n        return NaN;\n    }\n\n    idx = this.getRawIndex(idx);\n\n    var chunkIndex = Math.floor(idx / this._chunkSize);\n    var chunkOffset = idx % this._chunkSize;\n\n    var chunkStore = storage[dim][chunkIndex];\n    var value = chunkStore[chunkOffset];\n    // FIXME ordinal data type is not stackable\n    // if (stack) {\n    //     var dimensionInfo = this._dimensionInfos[dim];\n    //     if (dimensionInfo && dimensionInfo.stackable) {\n    //         var stackedOn = this.stackedOn;\n    //         while (stackedOn) {\n    //             // Get no stacked data of stacked on\n    //             var stackedValue = stackedOn.get(dim, idx);\n    //             // Considering positive stack, negative stack and empty data\n    //             if ((value >= 0 && stackedValue > 0)  // Positive stack\n    //                 || (value <= 0 && stackedValue < 0) // Negative stack\n    //             ) {\n    //                 value += stackedValue;\n    //             }\n    //             stackedOn = stackedOn.stackedOn;\n    //         }\n    //     }\n    // }\n\n    return value;\n};\n\n/**\n * @param {string} dim concrete dim\n * @param {number} rawIndex\n * @return {number|string}\n */\nlistProto.getByRawIndex = function (dim, rawIdx) {\n    if (!(rawIdx >= 0 && rawIdx < this._rawCount)) {\n        return NaN;\n    }\n    var dimStore = this._storage[dim];\n    if (!dimStore) {\n        // TODO Warn ?\n        return NaN;\n    }\n\n    var chunkIndex = Math.floor(rawIdx / this._chunkSize);\n    var chunkOffset = rawIdx % this._chunkSize;\n    var chunkStore = dimStore[chunkIndex];\n    return chunkStore[chunkOffset];\n};\n\n/**\n * FIXME Use `get` on chrome maybe slow(in filterSelf and selectRange).\n * Hack a much simpler _getFast\n * @private\n */\nlistProto._getFast = function (dim, rawIdx) {\n    var chunkIndex = Math.floor(rawIdx / this._chunkSize);\n    var chunkOffset = rawIdx % this._chunkSize;\n    var chunkStore = this._storage[dim][chunkIndex];\n    return chunkStore[chunkOffset];\n};\n\n/**\n * Get value for multi dimensions.\n * @param {Array.<string>} [dimensions] If ignored, using all dimensions.\n * @param {number} idx\n * @return {number}\n */\nlistProto.getValues = function (dimensions, idx /*, stack */) {\n    var values = [];\n\n    if (!isArray(dimensions)) {\n        // stack = idx;\n        idx = dimensions;\n        dimensions = this.dimensions;\n    }\n\n    for (var i = 0, len = dimensions.length; i < len; i++) {\n        values.push(this.get(dimensions[i], idx /*, stack */));\n    }\n\n    return values;\n};\n\n/**\n * If value is NaN. Inlcuding '-'\n * Only check the coord dimensions.\n * @param {string} dim\n * @param {number} idx\n * @return {number}\n */\nlistProto.hasValue = function (idx) {\n    var dataDimsOnCoord = this._dimensionsSummary.dataDimsOnCoord;\n    for (var i = 0, len = dataDimsOnCoord.length; i < len; i++) {\n        // Ordinal type originally can be string or number.\n        // But when an ordinal type is used on coord, it can\n        // not be string but only number. So we can also use isNaN.\n        if (isNaN(this.get(dataDimsOnCoord[i], idx))) {\n            return false;\n        }\n    }\n    return true;\n};\n\n/**\n * Get extent of data in one dimension\n * @param {string} dim\n * @param {boolean} stack\n */\nlistProto.getDataExtent = function (dim /*, stack */) {\n    // Make sure use concrete dim as cache name.\n    dim = this.getDimension(dim);\n    var dimData = this._storage[dim];\n    var initialExtent = getInitialExtent();\n\n    // stack = !!((stack || false) && this.getCalculationInfo(dim));\n\n    if (!dimData) {\n        return initialExtent;\n    }\n\n    // Make more strict checkings to ensure hitting cache.\n    var currEnd = this.count();\n    // var cacheName = [dim, !!stack].join('_');\n    // var cacheName = dim;\n\n    // Consider the most cases when using data zoom, `getDataExtent`\n    // happened before filtering. We cache raw extent, which is not\n    // necessary to be cleared and recalculated when restore data.\n    var useRaw = !this._indices; // && !stack;\n    var dimExtent;\n\n    if (useRaw) {\n        return this._rawExtent[dim].slice();\n    }\n    dimExtent = this._extent[dim];\n    if (dimExtent) {\n        return dimExtent.slice();\n    }\n    dimExtent = initialExtent;\n\n    var min = dimExtent[0];\n    var max = dimExtent[1];\n\n    for (var i = 0; i < currEnd; i++) {\n        // var value = stack ? this.get(dim, i, true) : this._getFast(dim, this.getRawIndex(i));\n        var value = this._getFast(dim, this.getRawIndex(i));\n        value < min && (min = value);\n        value > max && (max = value);\n    }\n\n    dimExtent = [min, max];\n\n    this._extent[dim] = dimExtent;\n\n    return dimExtent;\n};\n\n/**\n * Optimize for the scenario that data is filtered by a given extent.\n * Consider that if data amount is more than hundreds of thousand,\n * extent calculation will cost more than 10ms and the cache will\n * be erased because of the filtering.\n */\nlistProto.getApproximateExtent = function (dim /*, stack */) {\n    dim = this.getDimension(dim);\n    return this._approximateExtent[dim] || this.getDataExtent(dim /*, stack */);\n};\n\nlistProto.setApproximateExtent = function (extent, dim /*, stack */) {\n    dim = this.getDimension(dim);\n    this._approximateExtent[dim] = extent.slice();\n};\n\n/**\n * @param {string} key\n * @return {*}\n */\nlistProto.getCalculationInfo = function (key) {\n    return this._calculationInfo[key];\n};\n\n/**\n * @param {string|Object} key or k-v object\n * @param {*} [value]\n */\nlistProto.setCalculationInfo = function (key, value) {\n    isObject$4(key)\n        ? extend(this._calculationInfo, key)\n        : (this._calculationInfo[key] = value);\n};\n\n/**\n * Get sum of data in one dimension\n * @param {string} dim\n */\nlistProto.getSum = function (dim /*, stack */) {\n    var dimData = this._storage[dim];\n    var sum = 0;\n    if (dimData) {\n        for (var i = 0, len = this.count(); i < len; i++) {\n            var value = this.get(dim, i /*, stack */);\n            if (!isNaN(value)) {\n                sum += value;\n            }\n        }\n    }\n    return sum;\n};\n\n/**\n * Get median of data in one dimension\n * @param {string} dim\n */\nlistProto.getMedian = function (dim /*, stack */) {\n    var dimDataArray = [];\n    // map all data of one dimension\n    this.each(dim, function (val, idx) {\n        if (!isNaN(val)) {\n            dimDataArray.push(val);\n        }\n    });\n\n    // TODO\n    // Use quick select?\n\n    // immutability & sort\n    var sortedDimDataArray = [].concat(dimDataArray).sort(function (a, b) {\n        return a - b;\n    });\n    var len = this.count();\n    // calculate median\n    return len === 0\n        ? 0\n        : len % 2 === 1\n        ? sortedDimDataArray[(len - 1) / 2]\n        : (sortedDimDataArray[len / 2] + sortedDimDataArray[len / 2 - 1]) / 2;\n};\n\n// /**\n//  * Retreive the index with given value\n//  * @param {string} dim Concrete dimension.\n//  * @param {number} value\n//  * @return {number}\n//  */\n// Currently incorrect: should return dataIndex but not rawIndex.\n// Do not fix it until this method is to be used somewhere.\n// FIXME Precision of float value\n// listProto.indexOf = function (dim, value) {\n//     var storage = this._storage;\n//     var dimData = storage[dim];\n//     var chunkSize = this._chunkSize;\n//     if (dimData) {\n//         for (var i = 0, len = this.count(); i < len; i++) {\n//             var chunkIndex = Math.floor(i / chunkSize);\n//             var chunkOffset = i % chunkSize;\n//             if (dimData[chunkIndex][chunkOffset] === value) {\n//                 return i;\n//             }\n//         }\n//     }\n//     return -1;\n// };\n\n/**\n * Only support the dimension which inverted index created.\n * Do not support other cases until required.\n * @param {string} concrete dim\n * @param {number|string} value\n * @return {number} rawIndex\n */\nlistProto.rawIndexOf = function (dim, value) {\n    var invertedIndices = dim && this._invertedIndicesMap[dim];\n    if (__DEV__) {\n        if (!invertedIndices) {\n            throw new Error('Do not supported yet');\n        }\n    }\n    var rawIndex = invertedIndices[value];\n    if (rawIndex == null || isNaN(rawIndex)) {\n        return INDEX_NOT_FOUND;\n    }\n    return rawIndex;\n};\n\n/**\n * Retreive the index with given name\n * @param {number} idx\n * @param {number} name\n * @return {number}\n */\nlistProto.indexOfName = function (name) {\n    for (var i = 0, len = this.count(); i < len; i++) {\n        if (this.getName(i) === name) {\n            return i;\n        }\n    }\n\n    return -1;\n};\n\n/**\n * Retreive the index with given raw data index\n * @param {number} idx\n * @param {number} name\n * @return {number}\n */\nlistProto.indexOfRawIndex = function (rawIndex) {\n    if (!this._indices) {\n        return rawIndex;\n    }\n\n    if (rawIndex >= this._rawCount || rawIndex < 0) {\n        return -1;\n    }\n\n    // Indices are ascending\n    var indices = this._indices;\n\n    // If rawIndex === dataIndex\n    var rawDataIndex = indices[rawIndex];\n    if (rawDataIndex != null && rawDataIndex < this._count && rawDataIndex === rawIndex) {\n        return rawIndex;\n    }\n\n    var left = 0;\n    var right = this._count - 1;\n    while (left <= right) {\n        var mid = (left + right) / 2 | 0;\n        if (indices[mid] < rawIndex) {\n            left = mid + 1;\n        }\n        else if (indices[mid] > rawIndex) {\n            right = mid - 1;\n        }\n        else {\n            return mid;\n        }\n    }\n    return -1;\n};\n\n/**\n * Retreive the index of nearest value\n * @param {string} dim\n * @param {number} value\n * @param {number} [maxDistance=Infinity]\n * @return {Array.<number>} Considere multiple points has the same value.\n */\nlistProto.indicesOfNearest = function (dim, value, maxDistance) {\n    var storage = this._storage;\n    var dimData = storage[dim];\n    var nearestIndices = [];\n\n    if (!dimData) {\n        return nearestIndices;\n    }\n\n    if (maxDistance == null) {\n        maxDistance = Infinity;\n    }\n\n    var minDist = Number.MAX_VALUE;\n    var minDiff = -1;\n    for (var i = 0, len = this.count(); i < len; i++) {\n        var diff = value - this.get(dim, i /*, stack */);\n        var dist = Math.abs(diff);\n        if (diff <= maxDistance && dist <= minDist) {\n            // For the case of two data are same on xAxis, which has sequence data.\n            // Show the nearest index\n            // https://github.com/ecomfe/echarts/issues/2869\n            if (dist < minDist || (diff >= 0 && minDiff < 0)) {\n                minDist = dist;\n                minDiff = diff;\n                nearestIndices.length = 0;\n            }\n            nearestIndices.push(i);\n        }\n    }\n    return nearestIndices;\n};\n\n/**\n * Get raw data index\n * @param {number} idx\n * @return {number}\n */\nlistProto.getRawIndex = getRawIndexWithoutIndices;\n\nfunction getRawIndexWithoutIndices(idx) {\n    return idx;\n}\n\nfunction getRawIndexWithIndices(idx) {\n    if (idx < this._count && idx >= 0) {\n        return this._indices[idx];\n    }\n    return -1;\n}\n\n/**\n * Get raw data item\n * @param {number} idx\n * @return {number}\n */\nlistProto.getRawDataItem = function (idx) {\n    if (!this._rawData.persistent) {\n        var val = [];\n        for (var i = 0; i < this.dimensions.length; i++) {\n            var dim = this.dimensions[i];\n            val.push(this.get(dim, idx));\n        }\n        return val;\n    }\n    else {\n        return this._rawData.getItem(this.getRawIndex(idx));\n    }\n};\n\n/**\n * @param {number} idx\n * @param {boolean} [notDefaultIdx=false]\n * @return {string}\n */\nlistProto.getName = function (idx) {\n    var rawIndex = this.getRawIndex(idx);\n    return this._nameList[rawIndex]\n        || getRawValueFromStore(this, this._nameDimIdx, rawIndex)\n        || '';\n};\n\n/**\n * @param {number} idx\n * @param {boolean} [notDefaultIdx=false]\n * @return {string}\n */\nlistProto.getId = function (idx) {\n    return getId(this, this.getRawIndex(idx));\n};\n\nfunction getId(list, rawIndex) {\n    var id = list._idList[rawIndex];\n    if (id == null) {\n        id = getRawValueFromStore(list, list._idDimIdx, rawIndex);\n    }\n    if (id == null) {\n        // FIXME Check the usage in graph, should not use prefix.\n        id = ID_PREFIX + rawIndex;\n    }\n    return id;\n}\n\nfunction normalizeDimensions(dimensions) {\n    if (!isArray(dimensions)) {\n        dimensions = [dimensions];\n    }\n    return dimensions;\n}\n\nfunction validateDimensions(list, dims) {\n    for (var i = 0; i < dims.length; i++) {\n        // stroage may be empty when no data, so use\n        // dimensionInfos to check.\n        if (!list._dimensionInfos[dims[i]]) {\n            console.error('Unkown dimension ' + dims[i]);\n        }\n    }\n}\n\n/**\n * Data iteration\n * @param {string|Array.<string>}\n * @param {Function} cb\n * @param {*} [context=this]\n *\n * @example\n *  list.each('x', function (x, idx) {});\n *  list.each(['x', 'y'], function (x, y, idx) {});\n *  list.each(function (idx) {})\n */\nlistProto.each = function (dims, cb, context, contextCompat) {\n    'use strict';\n\n    if (!this._count) {\n        return;\n    }\n\n    if (typeof dims === 'function') {\n        contextCompat = context;\n        context = cb;\n        cb = dims;\n        dims = [];\n    }\n\n    // contextCompat just for compat echarts3\n    context = context || contextCompat || this;\n\n    dims = map(normalizeDimensions(dims), this.getDimension, this);\n\n    if (__DEV__) {\n        validateDimensions(this, dims);\n    }\n\n    var dimSize = dims.length;\n\n    for (var i = 0; i < this.count(); i++) {\n        // Simple optimization\n        switch (dimSize) {\n            case 0:\n                cb.call(context, i);\n                break;\n            case 1:\n                cb.call(context, this.get(dims[0], i), i);\n                break;\n            case 2:\n                cb.call(context, this.get(dims[0], i), this.get(dims[1], i), i);\n                break;\n            default:\n                var k = 0;\n                var value = [];\n                for (; k < dimSize; k++) {\n                    value[k] = this.get(dims[k], i);\n                }\n                // Index\n                value[k] = i;\n                cb.apply(context, value);\n        }\n    }\n};\n\n/**\n * Data filter\n * @param {string|Array.<string>}\n * @param {Function} cb\n * @param {*} [context=this]\n */\nlistProto.filterSelf = function (dimensions, cb, context, contextCompat) {\n    'use strict';\n\n    if (!this._count) {\n        return;\n    }\n\n    if (typeof dimensions === 'function') {\n        contextCompat = context;\n        context = cb;\n        cb = dimensions;\n        dimensions = [];\n    }\n\n    // contextCompat just for compat echarts3\n    context = context || contextCompat || this;\n\n    dimensions = map(\n        normalizeDimensions(dimensions), this.getDimension, this\n    );\n\n    if (__DEV__) {\n        validateDimensions(this, dimensions);\n    }\n\n\n    var count = this.count();\n    var Ctor = getIndicesCtor(this);\n    var newIndices = new Ctor(count);\n    var value = [];\n    var dimSize = dimensions.length;\n\n    var offset = 0;\n    var dim0 = dimensions[0];\n\n    for (var i = 0; i < count; i++) {\n        var keep;\n        var rawIdx = this.getRawIndex(i);\n        // Simple optimization\n        if (dimSize === 0) {\n            keep = cb.call(context, i);\n        }\n        else if (dimSize === 1) {\n            var val = this._getFast(dim0, rawIdx);\n            keep = cb.call(context, val, i);\n        }\n        else {\n            for (var k = 0; k < dimSize; k++) {\n                value[k] = this._getFast(dim0, rawIdx);\n            }\n            value[k] = i;\n            keep = cb.apply(context, value);\n        }\n        if (keep) {\n            newIndices[offset++] = rawIdx;\n        }\n    }\n\n    // Set indices after filtered.\n    if (offset < count) {\n        this._indices = newIndices;\n    }\n    this._count = offset;\n    // Reset data extent\n    this._extent = {};\n\n    this.getRawIndex = this._indices ? getRawIndexWithIndices : getRawIndexWithoutIndices;\n\n    return this;\n};\n\n/**\n * Select data in range. (For optimization of filter)\n * (Manually inline code, support 5 million data filtering in data zoom.)\n */\nlistProto.selectRange = function (range) {\n    'use strict';\n\n    if (!this._count) {\n        return;\n    }\n\n    var dimensions = [];\n    for (var dim in range) {\n        if (range.hasOwnProperty(dim)) {\n            dimensions.push(dim);\n        }\n    }\n\n    if (__DEV__) {\n        validateDimensions(this, dimensions);\n    }\n\n    var dimSize = dimensions.length;\n    if (!dimSize) {\n        return;\n    }\n\n    var originalCount = this.count();\n    var Ctor = getIndicesCtor(this);\n    var newIndices = new Ctor(originalCount);\n\n    var offset = 0;\n    var dim0 = dimensions[0];\n\n    var min = range[dim0][0];\n    var max = range[dim0][1];\n\n    var quickFinished = false;\n    if (!this._indices) {\n        // Extreme optimization for common case. About 2x faster in chrome.\n        var idx = 0;\n        if (dimSize === 1) {\n            var dimStorage = this._storage[dimensions[0]];\n            for (var k = 0; k < this._chunkCount; k++) {\n                var chunkStorage = dimStorage[k];\n                var len = Math.min(this._count - k * this._chunkSize, this._chunkSize);\n                for (var i = 0; i < len; i++) {\n                    var val = chunkStorage[i];\n                    // NaN will not be filtered. Consider the case, in line chart, empty\n                    // value indicates the line should be broken. But for the case like\n                    // scatter plot, a data item with empty value will not be rendered,\n                    // but the axis extent may be effected if some other dim of the data\n                    // item has value. Fortunately it is not a significant negative effect.\n                    if (\n                        (val >= min && val <= max) || isNaN(val)\n                    ) {\n                        newIndices[offset++] = idx;\n                    }\n                    idx++;\n                }\n            }\n            quickFinished = true;\n        }\n        else if (dimSize === 2) {\n            var dimStorage = this._storage[dim0];\n            var dimStorage2 = this._storage[dimensions[1]];\n            var min2 = range[dimensions[1]][0];\n            var max2 = range[dimensions[1]][1];\n            for (var k = 0; k < this._chunkCount; k++) {\n                var chunkStorage = dimStorage[k];\n                var chunkStorage2 = dimStorage2[k];\n                var len = Math.min(this._count - k * this._chunkSize, this._chunkSize);\n                for (var i = 0; i < len; i++) {\n                    var val = chunkStorage[i];\n                    var val2 = chunkStorage2[i];\n                    // Do not filter NaN, see comment above.\n                    if ((\n                            (val >= min && val <= max) || isNaN(val)\n                        )\n                        && (\n                            (val2 >= min2 && val2 <= max2) || isNaN(val2)\n                        )\n                    ) {\n                        newIndices[offset++] = idx;\n                    }\n                    idx++;\n                }\n            }\n            quickFinished = true;\n        }\n    }\n    if (!quickFinished) {\n        if (dimSize === 1) {\n            for (var i = 0; i < originalCount; i++) {\n                var rawIndex = this.getRawIndex(i);\n                var val = this._getFast(dim0, rawIndex);\n                // Do not filter NaN, see comment above.\n                if (\n                    (val >= min && val <= max) || isNaN(val)\n                ) {\n                    newIndices[offset++] = rawIndex;\n                }\n            }\n        }\n        else {\n            for (var i = 0; i < originalCount; i++) {\n                var keep = true;\n                var rawIndex = this.getRawIndex(i);\n                for (var k = 0; k < dimSize; k++) {\n                    var dimk = dimensions[k];\n                    var val = this._getFast(dim, rawIndex);\n                    // Do not filter NaN, see comment above.\n                    if (val < range[dimk][0] || val > range[dimk][1]) {\n                        keep = false;\n                    }\n                }\n                if (keep) {\n                    newIndices[offset++] = this.getRawIndex(i);\n                }\n            }\n        }\n    }\n\n    // Set indices after filtered.\n    if (offset < originalCount) {\n        this._indices = newIndices;\n    }\n    this._count = offset;\n    // Reset data extent\n    this._extent = {};\n\n    this.getRawIndex = this._indices ? getRawIndexWithIndices : getRawIndexWithoutIndices;\n\n    return this;\n};\n\n/**\n * Data mapping to a plain array\n * @param {string|Array.<string>} [dimensions]\n * @param {Function} cb\n * @param {*} [context=this]\n * @return {Array}\n */\nlistProto.mapArray = function (dimensions, cb, context, contextCompat) {\n    'use strict';\n\n    if (typeof dimensions === 'function') {\n        contextCompat = context;\n        context = cb;\n        cb = dimensions;\n        dimensions = [];\n    }\n\n    // contextCompat just for compat echarts3\n    context = context || contextCompat || this;\n\n    var result = [];\n    this.each(dimensions, function () {\n        result.push(cb && cb.apply(this, arguments));\n    }, context);\n    return result;\n};\n\n// Data in excludeDimensions is copied, otherwise transfered.\nfunction cloneListForMapAndSample(original, excludeDimensions) {\n    var allDimensions = original.dimensions;\n    var list = new List(\n        map(allDimensions, original.getDimensionInfo, original),\n        original.hostModel\n    );\n    // FIXME If needs stackedOn, value may already been stacked\n    transferProperties(list, original);\n\n    var storage = list._storage = {};\n    var originalStorage = original._storage;\n\n    // Init storage\n    for (var i = 0; i < allDimensions.length; i++) {\n        var dim = allDimensions[i];\n        if (originalStorage[dim]) {\n            // Notice that we do not reset invertedIndicesMap here, becuase\n            // there is no scenario of mapping or sampling ordinal dimension.\n            if (indexOf(excludeDimensions, dim) >= 0) {\n                storage[dim] = cloneDimStore(originalStorage[dim]);\n                list._rawExtent[dim] = getInitialExtent();\n                list._extent[dim] = null;\n            }\n            else {\n                // Direct reference for other dimensions\n                storage[dim] = originalStorage[dim];\n            }\n        }\n    }\n    return list;\n}\n\nfunction cloneDimStore(originalDimStore) {\n    var newDimStore = new Array(originalDimStore.length);\n    for (var j = 0; j < originalDimStore.length; j++) {\n        newDimStore[j] = cloneChunk(originalDimStore[j]);\n    }\n    return newDimStore;\n}\n\nfunction getInitialExtent() {\n    return [Infinity, -Infinity];\n}\n\n/**\n * Data mapping to a new List with given dimensions\n * @param {string|Array.<string>} dimensions\n * @param {Function} cb\n * @param {*} [context=this]\n * @return {Array}\n */\nlistProto.map = function (dimensions, cb, context, contextCompat) {\n    'use strict';\n\n    // contextCompat just for compat echarts3\n    context = context || contextCompat || this;\n\n    dimensions = map(\n        normalizeDimensions(dimensions), this.getDimension, this\n    );\n\n    if (__DEV__) {\n        validateDimensions(this, dimensions);\n    }\n\n    var list = cloneListForMapAndSample(this, dimensions);\n\n    // Following properties are all immutable.\n    // So we can reference to the same value\n    list._indices = this._indices;\n    list.getRawIndex = list._indices ? getRawIndexWithIndices : getRawIndexWithoutIndices;\n\n    var storage = list._storage;\n\n    var tmpRetValue = [];\n    var chunkSize = this._chunkSize;\n    var dimSize = dimensions.length;\n    var dataCount = this.count();\n    var values = [];\n    var rawExtent = list._rawExtent;\n\n    for (var dataIndex = 0; dataIndex < dataCount; dataIndex++) {\n        for (var dimIndex = 0; dimIndex < dimSize; dimIndex++) {\n            values[dimIndex] = this.get(dimensions[dimIndex], dataIndex /*, stack */);\n        }\n        values[dimSize] = dataIndex;\n\n        var retValue = cb && cb.apply(context, values);\n        if (retValue != null) {\n            // a number or string (in oridinal dimension)?\n            if (typeof retValue !== 'object') {\n                tmpRetValue[0] = retValue;\n                retValue = tmpRetValue;\n            }\n\n            var rawIndex = this.getRawIndex(dataIndex);\n            var chunkIndex = Math.floor(rawIndex / chunkSize);\n            var chunkOffset = rawIndex % chunkSize;\n\n            for (var i = 0; i < retValue.length; i++) {\n                var dim = dimensions[i];\n                var val = retValue[i];\n                var rawExtentOnDim = rawExtent[dim];\n\n                var dimStore = storage[dim];\n                if (dimStore) {\n                    dimStore[chunkIndex][chunkOffset] = val;\n                }\n\n                if (val < rawExtentOnDim[0]) {\n                    rawExtentOnDim[0] = val;\n                }\n                if (val > rawExtentOnDim[1]) {\n                    rawExtentOnDim[1] = val;\n                }\n            }\n        }\n    }\n\n    return list;\n};\n\n/**\n * Large data down sampling on given dimension\n * @param {string} dimension\n * @param {number} rate\n * @param {Function} sampleValue\n * @param {Function} sampleIndex Sample index for name and id\n */\nlistProto.downSample = function (dimension, rate, sampleValue, sampleIndex) {\n    var list = cloneListForMapAndSample(this, [dimension]);\n    var targetStorage = list._storage;\n\n    var frameValues = [];\n    var frameSize = Math.floor(1 / rate);\n\n    var dimStore = targetStorage[dimension];\n    var len = this.count();\n    var chunkSize = this._chunkSize;\n    var rawExtentOnDim = list._rawExtent[dimension];\n\n    var newIndices = new (getIndicesCtor(this))(len);\n\n    var offset = 0;\n    for (var i = 0; i < len; i += frameSize) {\n        // Last frame\n        if (frameSize > len - i) {\n            frameSize = len - i;\n            frameValues.length = frameSize;\n        }\n        for (var k = 0; k < frameSize; k++) {\n            var dataIdx = this.getRawIndex(i + k);\n            var originalChunkIndex = Math.floor(dataIdx / chunkSize);\n            var originalChunkOffset = dataIdx % chunkSize;\n            frameValues[k] = dimStore[originalChunkIndex][originalChunkOffset];\n        }\n        var value = sampleValue(frameValues);\n        var sampleFrameIdx = this.getRawIndex(\n            Math.min(i + sampleIndex(frameValues, value) || 0, len - 1)\n        );\n        var sampleChunkIndex = Math.floor(sampleFrameIdx / chunkSize);\n        var sampleChunkOffset = sampleFrameIdx % chunkSize;\n        // Only write value on the filtered data\n        dimStore[sampleChunkIndex][sampleChunkOffset] = value;\n\n        if (value < rawExtentOnDim[0]) {\n            rawExtentOnDim[0] = value;\n        }\n        if (value > rawExtentOnDim[1]) {\n            rawExtentOnDim[1] = value;\n        }\n\n        newIndices[offset++] = sampleFrameIdx;\n    }\n\n    list._count = offset;\n    list._indices = newIndices;\n\n    list.getRawIndex = getRawIndexWithIndices;\n\n    return list;\n};\n\n/**\n * Get model of one data item.\n *\n * @param {number} idx\n */\n// FIXME Model proxy ?\nlistProto.getItemModel = function (idx) {\n    var hostModel = this.hostModel;\n    return new Model(this.getRawDataItem(idx), hostModel, hostModel && hostModel.ecModel);\n};\n\n/**\n * Create a data differ\n * @param {module:echarts/data/List} otherList\n * @return {module:echarts/data/DataDiffer}\n */\nlistProto.diff = function (otherList) {\n    var thisList = this;\n\n    return new DataDiffer(\n        otherList ? otherList.getIndices() : [],\n        this.getIndices(),\n        function (idx) {\n            return getId(otherList, idx);\n        },\n        function (idx) {\n            return getId(thisList, idx);\n        }\n    );\n};\n/**\n * Get visual property.\n * @param {string} key\n */\nlistProto.getVisual = function (key) {\n    var visual = this._visual;\n    return visual && visual[key];\n};\n\n/**\n * Set visual property\n * @param {string|Object} key\n * @param {*} [value]\n *\n * @example\n *  setVisual('color', color);\n *  setVisual({\n *      'color': color\n *  });\n */\nlistProto.setVisual = function (key, val) {\n    if (isObject$4(key)) {\n        for (var name in key) {\n            if (key.hasOwnProperty(name)) {\n                this.setVisual(name, key[name]);\n            }\n        }\n        return;\n    }\n    this._visual = this._visual || {};\n    this._visual[key] = val;\n};\n\n/**\n * Set layout property.\n * @param {string|Object} key\n * @param {*} [val]\n */\nlistProto.setLayout = function (key, val) {\n    if (isObject$4(key)) {\n        for (var name in key) {\n            if (key.hasOwnProperty(name)) {\n                this.setLayout(name, key[name]);\n            }\n        }\n        return;\n    }\n    this._layout[key] = val;\n};\n\n/**\n * Get layout property.\n * @param  {string} key.\n * @return {*}\n */\nlistProto.getLayout = function (key) {\n    return this._layout[key];\n};\n\n/**\n * Get layout of single data item\n * @param {number} idx\n */\nlistProto.getItemLayout = function (idx) {\n    return this._itemLayouts[idx];\n};\n\n/**\n * Set layout of single data item\n * @param {number} idx\n * @param {Object} layout\n * @param {boolean=} [merge=false]\n */\nlistProto.setItemLayout = function (idx, layout, merge$$1) {\n    this._itemLayouts[idx] = merge$$1\n        ? extend(this._itemLayouts[idx] || {}, layout)\n        : layout;\n};\n\n/**\n * Clear all layout of single data item\n */\nlistProto.clearItemLayouts = function () {\n    this._itemLayouts.length = 0;\n};\n\n/**\n * Get visual property of single data item\n * @param {number} idx\n * @param {string} key\n * @param {boolean} [ignoreParent=false]\n */\nlistProto.getItemVisual = function (idx, key, ignoreParent) {\n    var itemVisual = this._itemVisuals[idx];\n    var val = itemVisual && itemVisual[key];\n    if (val == null && !ignoreParent) {\n        // Use global visual property\n        return this.getVisual(key);\n    }\n    return val;\n};\n\n/**\n * Set visual property of single data item\n *\n * @param {number} idx\n * @param {string|Object} key\n * @param {*} [value]\n *\n * @example\n *  setItemVisual(0, 'color', color);\n *  setItemVisual(0, {\n *      'color': color\n *  });\n */\nlistProto.setItemVisual = function (idx, key, value) {\n    var itemVisual = this._itemVisuals[idx] || {};\n    var hasItemVisual = this.hasItemVisual;\n    this._itemVisuals[idx] = itemVisual;\n\n    if (isObject$4(key)) {\n        for (var name in key) {\n            if (key.hasOwnProperty(name)) {\n                itemVisual[name] = key[name];\n                hasItemVisual[name] = true;\n            }\n        }\n        return;\n    }\n    itemVisual[key] = value;\n    hasItemVisual[key] = true;\n};\n\n/**\n * Clear itemVisuals and list visual.\n */\nlistProto.clearAllVisual = function () {\n    this._visual = {};\n    this._itemVisuals = [];\n    this.hasItemVisual = {};\n};\n\nvar setItemDataAndSeriesIndex = function (child) {\n    child.seriesIndex = this.seriesIndex;\n    child.dataIndex = this.dataIndex;\n    child.dataType = this.dataType;\n};\n/**\n * Set graphic element relative to data. It can be set as null\n * @param {number} idx\n * @param {module:zrender/Element} [el]\n */\nlistProto.setItemGraphicEl = function (idx, el) {\n    var hostModel = this.hostModel;\n\n    if (el) {\n        // Add data index and series index for indexing the data by element\n        // Useful in tooltip\n        el.dataIndex = idx;\n        el.dataType = this.dataType;\n        el.seriesIndex = hostModel && hostModel.seriesIndex;\n        if (el.type === 'group') {\n            el.traverse(setItemDataAndSeriesIndex, el);\n        }\n    }\n\n    this._graphicEls[idx] = el;\n};\n\n/**\n * @param {number} idx\n * @return {module:zrender/Element}\n */\nlistProto.getItemGraphicEl = function (idx) {\n    return this._graphicEls[idx];\n};\n\n/**\n * @param {Function} cb\n * @param {*} context\n */\nlistProto.eachItemGraphicEl = function (cb, context) {\n    each$1(this._graphicEls, function (el, idx) {\n        if (el) {\n            cb && cb.call(context, el, idx);\n        }\n    });\n};\n\n/**\n * Shallow clone a new list except visual and layout properties, and graph elements.\n * New list only change the indices.\n */\nlistProto.cloneShallow = function (list) {\n    if (!list) {\n        var dimensionInfoList = map(this.dimensions, this.getDimensionInfo, this);\n        list = new List(dimensionInfoList, this.hostModel);\n    }\n\n    // FIXME\n    list._storage = this._storage;\n\n    transferProperties(list, this);\n\n    // Clone will not change the data extent and indices\n    if (this._indices) {\n        var Ctor = this._indices.constructor;\n        list._indices = new Ctor(this._indices);\n    }\n    else {\n        list._indices = null;\n    }\n    list.getRawIndex = list._indices ? getRawIndexWithIndices : getRawIndexWithoutIndices;\n\n    return list;\n};\n\n/**\n * Wrap some method to add more feature\n * @param {string} methodName\n * @param {Function} injectFunction\n */\nlistProto.wrapMethod = function (methodName, injectFunction) {\n    var originalMethod = this[methodName];\n    if (typeof originalMethod !== 'function') {\n        return;\n    }\n    this.__wrappedMethods = this.__wrappedMethods || [];\n    this.__wrappedMethods.push(methodName);\n    this[methodName] = function () {\n        var res = originalMethod.apply(this, arguments);\n        return injectFunction.apply(this, [res].concat(slice(arguments)));\n    };\n};\n\n// Methods that create a new list based on this list should be listed here.\n// Notice that those method should `RETURN` the new list.\nlistProto.TRANSFERABLE_METHODS = ['cloneShallow', 'downSample', 'map'];\n// Methods that change indices of this list should be listed here.\nlistProto.CHANGABLE_METHODS = ['filterSelf', 'selectRange'];\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * @deprecated\n * Use `echarts/data/helper/createDimensions` instead.\n */\n\n/**\n * @see {module:echarts/test/ut/spec/data/completeDimensions}\n *\n * Complete the dimensions array, by user defined `dimension` and `encode`,\n * and guessing from the data structure.\n * If no 'value' dimension specified, the first no-named dimension will be\n * named as 'value'.\n *\n * @param {Array.<string>} sysDims Necessary dimensions, like ['x', 'y'], which\n *      provides not only dim template, but also default order.\n *      properties: 'name', 'type', 'displayName'.\n *      `name` of each item provides default coord name.\n *      [{dimsDef: [string|Object, ...]}, ...] dimsDef of sysDim item provides default dim name, and\n *                                    provide dims count that the sysDim required.\n *      [{ordinalMeta}] can be specified.\n * @param {module:echarts/data/Source|Array|Object} source or data (for compatibal with pervious)\n * @param {Object} [opt]\n * @param {Array.<Object|string>} [opt.dimsDef] option.series.dimensions User defined dimensions\n *      For example: ['asdf', {name, type}, ...].\n * @param {Object|HashMap} [opt.encodeDef] option.series.encode {x: 2, y: [3, 1], tooltip: [1, 2], label: 3}\n * @param {string} [opt.generateCoord] Generate coord dim with the given name.\n *                 If not specified, extra dim names will be:\n *                 'value', 'value0', 'value1', ...\n * @param {number} [opt.generateCoordCount] By default, the generated dim name is `generateCoord`.\n *                 If `generateCoordCount` specified, the generated dim names will be:\n *                 `generateCoord` + 0, `generateCoord` + 1, ...\n *                 can be Infinity, indicate that use all of the remain columns.\n * @param {number} [opt.dimCount] If not specified, guess by the first data item.\n * @param {number} [opt.encodeDefaulter] If not specified, auto find the next available data dim.\n * @return {Array.<Object>} [{\n *      name: string mandatory,\n *      displayName: string, the origin name in dimsDef, see source helper.\n *                 If displayName given, the tooltip will displayed vertically.\n *      coordDim: string mandatory,\n *      coordDimIndex: number mandatory,\n *      type: string optional,\n *      otherDims: { never null/undefined\n *          tooltip: number optional,\n *          label: number optional,\n *          itemName: number optional,\n *          seriesName: number optional,\n *      },\n *      isExtraCoord: boolean true if coord is generated\n *          (not specified in encode and not series specified)\n *      other props ...\n * }]\n */\nfunction completeDimensions(sysDims, source, opt) {\n    if (!Source.isInstance(source)) {\n        source = Source.seriesDataToSource(source);\n    }\n\n    opt = opt || {};\n    sysDims = (sysDims || []).slice();\n    var dimsDef = (opt.dimsDef || []).slice();\n    var encodeDef = createHashMap(opt.encodeDef);\n    var dataDimNameMap = createHashMap();\n    var coordDimNameMap = createHashMap();\n    // var valueCandidate;\n    var result = [];\n\n    var dimCount = getDimCount(source, sysDims, dimsDef, opt.dimCount);\n\n    // Apply user defined dims (`name` and `type`) and init result.\n    for (var i = 0; i < dimCount; i++) {\n        var dimDefItem = dimsDef[i] = extend(\n            {}, isObject$1(dimsDef[i]) ? dimsDef[i] : {name: dimsDef[i]}\n        );\n        var userDimName = dimDefItem.name;\n        var resultItem = result[i] = {otherDims: {}};\n        // Name will be applied later for avoiding duplication.\n        if (userDimName != null && dataDimNameMap.get(userDimName) == null) {\n            // Only if `series.dimensions` is defined in option\n            // displayName, will be set, and dimension will be diplayed vertically in\n            // tooltip by default.\n            resultItem.name = resultItem.displayName = userDimName;\n            dataDimNameMap.set(userDimName, i);\n        }\n        dimDefItem.type != null && (resultItem.type = dimDefItem.type);\n        dimDefItem.displayName != null && (resultItem.displayName = dimDefItem.displayName);\n    }\n\n    // Set `coordDim` and `coordDimIndex` by `encodeDef` and normalize `encodeDef`.\n    encodeDef.each(function (dataDims, coordDim) {\n        dataDims = normalizeToArray(dataDims).slice();\n\n        // Note: It is allowed that `dataDims.length` is `0`, e.g., options is\n        // `{encode: {x: -1, y: 1}}`. Should not filter anything in\n        // this case.\n        if (dataDims.length === 1 && !isString(dataDims[0]) && dataDims[0] < 0) {\n            encodeDef.set(coordDim, false);\n            return;\n        }\n\n        var validDataDims = encodeDef.set(coordDim, []);\n        each$1(dataDims, function (resultDimIdx, idx) {\n            // The input resultDimIdx can be dim name or index.\n            isString(resultDimIdx) && (resultDimIdx = dataDimNameMap.get(resultDimIdx));\n            if (resultDimIdx != null && resultDimIdx < dimCount) {\n                validDataDims[idx] = resultDimIdx;\n                applyDim(result[resultDimIdx], coordDim, idx);\n            }\n        });\n    });\n\n    // Apply templetes and default order from `sysDims`.\n    var availDimIdx = 0;\n    each$1(sysDims, function (sysDimItem, sysDimIndex) {\n        var coordDim;\n        var sysDimItem;\n        var sysDimItemDimsDef;\n        var sysDimItemOtherDims;\n        if (isString(sysDimItem)) {\n            coordDim = sysDimItem;\n            sysDimItem = {};\n        }\n        else {\n            coordDim = sysDimItem.name;\n            var ordinalMeta = sysDimItem.ordinalMeta;\n            sysDimItem.ordinalMeta = null;\n            sysDimItem = clone(sysDimItem);\n            sysDimItem.ordinalMeta = ordinalMeta;\n            // `coordDimIndex` should not be set directly.\n            sysDimItemDimsDef = sysDimItem.dimsDef;\n            sysDimItemOtherDims = sysDimItem.otherDims;\n            sysDimItem.name = sysDimItem.coordDim = sysDimItem.coordDimIndex\n                = sysDimItem.dimsDef = sysDimItem.otherDims = null;\n        }\n\n        var dataDims = encodeDef.get(coordDim);\n\n        // negative resultDimIdx means no need to mapping.\n        if (dataDims === false) {\n            return;\n        }\n\n        var dataDims = normalizeToArray(dataDims);\n\n        // dimensions provides default dim sequences.\n        if (!dataDims.length) {\n            for (var i = 0; i < (sysDimItemDimsDef && sysDimItemDimsDef.length || 1); i++) {\n                while (availDimIdx < result.length && result[availDimIdx].coordDim != null) {\n                    availDimIdx++;\n                }\n                availDimIdx < result.length && dataDims.push(availDimIdx++);\n            }\n        }\n\n        // Apply templates.\n        each$1(dataDims, function (resultDimIdx, coordDimIndex) {\n            var resultItem = result[resultDimIdx];\n            applyDim(defaults(resultItem, sysDimItem), coordDim, coordDimIndex);\n            if (resultItem.name == null && sysDimItemDimsDef) {\n                var sysDimItemDimsDefItem = sysDimItemDimsDef[coordDimIndex];\n                !isObject$1(sysDimItemDimsDefItem) && (sysDimItemDimsDefItem = {name: sysDimItemDimsDefItem});\n                resultItem.name = resultItem.displayName = sysDimItemDimsDefItem.name;\n                resultItem.defaultTooltip = sysDimItemDimsDefItem.defaultTooltip;\n            }\n            // FIXME refactor, currently only used in case: {otherDims: {tooltip: false}}\n            sysDimItemOtherDims && defaults(resultItem.otherDims, sysDimItemOtherDims);\n        });\n    });\n\n    function applyDim(resultItem, coordDim, coordDimIndex) {\n        if (OTHER_DIMENSIONS.get(coordDim) != null) {\n            resultItem.otherDims[coordDim] = coordDimIndex;\n        }\n        else {\n            resultItem.coordDim = coordDim;\n            resultItem.coordDimIndex = coordDimIndex;\n            coordDimNameMap.set(coordDim, true);\n        }\n    }\n\n    // Make sure the first extra dim is 'value'.\n    var generateCoord = opt.generateCoord;\n    var generateCoordCount = opt.generateCoordCount;\n    var fromZero = generateCoordCount != null;\n    generateCoordCount = generateCoord ? (generateCoordCount || 1) : 0;\n    var extra = generateCoord || 'value';\n\n    // Set dim `name` and other `coordDim` and other props.\n    for (var resultDimIdx = 0; resultDimIdx < dimCount; resultDimIdx++) {\n        var resultItem = result[resultDimIdx] = result[resultDimIdx] || {};\n        var coordDim = resultItem.coordDim;\n\n        if (coordDim == null) {\n            resultItem.coordDim = genName(\n                extra, coordDimNameMap, fromZero\n            );\n            resultItem.coordDimIndex = 0;\n            if (!generateCoord || generateCoordCount <= 0) {\n                resultItem.isExtraCoord = true;\n            }\n            generateCoordCount--;\n        }\n\n        resultItem.name == null && (resultItem.name = genName(\n            resultItem.coordDim,\n            dataDimNameMap\n        ));\n\n        if (resultItem.type == null && guessOrdinal(source, resultDimIdx, resultItem.name)) {\n            resultItem.type = 'ordinal';\n        }\n    }\n\n    return result;\n}\n\n// ??? TODO\n// Originally detect dimCount by data[0]. Should we\n// optimize it to only by sysDims and dimensions and encode.\n// So only necessary dims will be initialized.\n// But\n// (1) custom series should be considered. where other dims\n// may be visited.\n// (2) sometimes user need to calcualte bubble size or use visualMap\n// on other dimensions besides coordSys needed.\n// So, dims that is not used by system, should be shared in storage?\nfunction getDimCount(source, sysDims, dimsDef, optDimCount) {\n    // Note that the result dimCount should not small than columns count\n    // of data, otherwise `dataDimNameMap` checking will be incorrect.\n    var dimCount = Math.max(\n        source.dimensionsDetectCount || 1,\n        sysDims.length,\n        dimsDef.length,\n        optDimCount || 0\n    );\n    each$1(sysDims, function (sysDimItem) {\n        var sysDimItemDimsDef = sysDimItem.dimsDef;\n        sysDimItemDimsDef && (dimCount = Math.max(dimCount, sysDimItemDimsDef.length));\n    });\n    return dimCount;\n}\n\nfunction genName(name, map$$1, fromZero) {\n    if (fromZero || map$$1.get(name) != null) {\n        var i = 0;\n        while (map$$1.get(name + i) != null) {\n            i++;\n        }\n        name += i;\n    }\n    map$$1.set(name, true);\n    return name;\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Substitute `completeDimensions`.\n * `completeDimensions` is to be deprecated.\n */\n/**\n * @param {module:echarts/data/Source|module:echarts/data/List} source or data.\n * @param {Object|Array} [opt]\n * @param {Array.<string|Object>} [opt.coordDimensions=[]]\n * @param {number} [opt.dimensionsCount]\n * @param {string} [opt.generateCoord]\n * @param {string} [opt.generateCoordCount]\n * @param {Array.<string|Object>} [opt.dimensionsDefine=source.dimensionsDefine] Overwrite source define.\n * @param {Object|HashMap} [opt.encodeDefine=source.encodeDefine] Overwrite source define.\n * @return {Array.<Object>} dimensionsInfo\n */\nvar createDimensions = function (source, opt) {\n    opt = opt || {};\n    return completeDimensions(opt.coordDimensions || [], source, {\n        dimsDef: opt.dimensionsDefine || source.dimensionsDefine,\n        encodeDef: opt.encodeDefine || source.encodeDefine,\n        dimCount: opt.dimensionsCount,\n        generateCoord: opt.generateCoord,\n        generateCoordCount: opt.generateCoordCount\n    });\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Note that it is too complicated to support 3d stack by value\n * (have to create two-dimension inverted index), so in 3d case\n * we just support that stacked by index.\n *\n * @param {module:echarts/model/Series} seriesModel\n * @param {Array.<string|Object>} dimensionInfoList The same as the input of <module:echarts/data/List>.\n *        The input dimensionInfoList will be modified.\n * @param {Object} [opt]\n * @param {boolean} [opt.stackedCoordDimension=''] Specify a coord dimension if needed.\n * @param {boolean} [opt.byIndex=false]\n * @return {Object} calculationInfo\n * {\n *     stackedDimension: string\n *     stackedByDimension: string\n *     isStackedByIndex: boolean\n *     stackedOverDimension: string\n *     stackResultDimension: string\n * }\n */\nfunction enableDataStack(seriesModel, dimensionInfoList, opt) {\n    opt = opt || {};\n    var byIndex = opt.byIndex;\n    var stackedCoordDimension = opt.stackedCoordDimension;\n\n    // Compatibal: when `stack` is set as '', do not stack.\n    var mayStack = !!(seriesModel && seriesModel.get('stack'));\n    var stackedByDimInfo;\n    var stackedDimInfo;\n    var stackResultDimension;\n    var stackedOverDimension;\n\n    each$1(dimensionInfoList, function (dimensionInfo, index) {\n        if (isString(dimensionInfo)) {\n            dimensionInfoList[index] = dimensionInfo = {name: dimensionInfo};\n        }\n\n        if (mayStack && !dimensionInfo.isExtraCoord) {\n            // Find the first ordinal dimension as the stackedByDimInfo.\n            if (!byIndex && !stackedByDimInfo && dimensionInfo.ordinalMeta) {\n                stackedByDimInfo = dimensionInfo;\n            }\n            // Find the first stackable dimension as the stackedDimInfo.\n            if (!stackedDimInfo\n                && dimensionInfo.type !== 'ordinal'\n                && dimensionInfo.type !== 'time'\n                && (!stackedCoordDimension || stackedCoordDimension === dimensionInfo.coordDim)\n            ) {\n                stackedDimInfo = dimensionInfo;\n            }\n        }\n    });\n\n    if (stackedDimInfo && !byIndex && !stackedByDimInfo) {\n        // Compatible with previous design, value axis (time axis) only stack by index.\n        // It may make sense if the user provides elaborately constructed data.\n        byIndex = true;\n    }\n\n    // Add stack dimension, they can be both calculated by coordinate system in `unionExtent`.\n    // That put stack logic in List is for using conveniently in echarts extensions, but it\n    // might not be a good way.\n    if (stackedDimInfo) {\n        // Use a weird name that not duplicated with other names.\n        stackResultDimension = '__\\0ecstackresult';\n        stackedOverDimension = '__\\0ecstackedover';\n\n        // Create inverted index to fast query index by value.\n        if (stackedByDimInfo) {\n            stackedByDimInfo.createInvertedIndices = true;\n        }\n\n        var stackedDimCoordDim = stackedDimInfo.coordDim;\n        var stackedDimType = stackedDimInfo.type;\n        var stackedDimCoordIndex = 0;\n\n        each$1(dimensionInfoList, function (dimensionInfo) {\n            if (dimensionInfo.coordDim === stackedDimCoordDim) {\n                stackedDimCoordIndex++;\n            }\n        });\n\n        dimensionInfoList.push({\n            name: stackResultDimension,\n            coordDim: stackedDimCoordDim,\n            coordDimIndex: stackedDimCoordIndex,\n            type: stackedDimType,\n            isExtraCoord: true,\n            isCalculationCoord: true\n        });\n\n        stackedDimCoordIndex++;\n\n        dimensionInfoList.push({\n            name: stackedOverDimension,\n            // This dimension contains stack base (generally, 0), so do not set it as\n            // `stackedDimCoordDim` to avoid extent calculation, consider log scale.\n            coordDim: stackedOverDimension,\n            coordDimIndex: stackedDimCoordIndex,\n            type: stackedDimType,\n            isExtraCoord: true,\n            isCalculationCoord: true\n        });\n    }\n\n    return {\n        stackedDimension: stackedDimInfo && stackedDimInfo.name,\n        stackedByDimension: stackedByDimInfo && stackedByDimInfo.name,\n        isStackedByIndex: byIndex,\n        stackedOverDimension: stackedOverDimension,\n        stackResultDimension: stackResultDimension\n    };\n}\n\n/**\n * @param {module:echarts/data/List} data\n * @param {string} stackedDim\n */\nfunction isDimensionStacked(data, stackedDim /*, stackedByDim*/) {\n    // Each single series only maps to one pair of axis. So we do not need to\n    // check stackByDim, whatever stacked by a dimension or stacked by index.\n    return !!stackedDim && stackedDim === data.getCalculationInfo('stackedDimension');\n        // && (\n        //     stackedByDim != null\n        //         ? stackedByDim === data.getCalculationInfo('stackedByDimension')\n        //         : data.getCalculationInfo('isStackedByIndex')\n        // );\n}\n\n/**\n * @param {module:echarts/data/List} data\n * @param {string} targetDim\n * @param {string} [stackedByDim] If not input this parameter, check whether\n *                                stacked by index.\n * @return {string} dimension\n */\nfunction getStackedDimension(data, targetDim) {\n    return isDimensionStacked(data, targetDim)\n        ? data.getCalculationInfo('stackResultDimension')\n        : targetDim;\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * @param {module:echarts/data/Source|Array} source Or raw data.\n * @param {module:echarts/model/Series} seriesModel\n * @param {Object} [opt]\n * @param {string} [opt.generateCoord]\n */\nfunction createListFromArray(source, seriesModel, opt) {\n    opt = opt || {};\n\n    if (!Source.isInstance(source)) {\n        source = Source.seriesDataToSource(source);\n    }\n\n    var coordSysName = seriesModel.get('coordinateSystem');\n    var registeredCoordSys = CoordinateSystemManager.get(coordSysName);\n\n    var coordSysDefine = getCoordSysDefineBySeries(seriesModel);\n\n    var coordSysDimDefs;\n\n    if (coordSysDefine) {\n        coordSysDimDefs = map(coordSysDefine.coordSysDims, function (dim) {\n            var dimInfo = {name: dim};\n            var axisModel = coordSysDefine.axisMap.get(dim);\n            if (axisModel) {\n                var axisType = axisModel.get('type');\n                dimInfo.type = getDimensionTypeByAxis(axisType);\n                // dimInfo.stackable = isStackable(axisType);\n            }\n            return dimInfo;\n        });\n    }\n\n    if (!coordSysDimDefs) {\n        // Get dimensions from registered coordinate system\n        coordSysDimDefs = (registeredCoordSys && (\n            registeredCoordSys.getDimensionsInfo\n                ? registeredCoordSys.getDimensionsInfo()\n                : registeredCoordSys.dimensions.slice()\n        )) || ['x', 'y'];\n    }\n\n    var dimInfoList = createDimensions(source, {\n        coordDimensions: coordSysDimDefs,\n        generateCoord: opt.generateCoord\n    });\n\n    var firstCategoryDimIndex;\n    var hasNameEncode;\n    coordSysDefine && each$1(dimInfoList, function (dimInfo, dimIndex) {\n        var coordDim = dimInfo.coordDim;\n        var categoryAxisModel = coordSysDefine.categoryAxisMap.get(coordDim);\n        if (categoryAxisModel) {\n            if (firstCategoryDimIndex == null) {\n                firstCategoryDimIndex = dimIndex;\n            }\n            dimInfo.ordinalMeta = categoryAxisModel.getOrdinalMeta();\n        }\n        if (dimInfo.otherDims.itemName != null) {\n            hasNameEncode = true;\n        }\n    });\n    if (!hasNameEncode && firstCategoryDimIndex != null) {\n        dimInfoList[firstCategoryDimIndex].otherDims.itemName = 0;\n    }\n\n    var stackCalculationInfo = enableDataStack(seriesModel, dimInfoList);\n\n    var list = new List(dimInfoList, seriesModel);\n\n    list.setCalculationInfo(stackCalculationInfo);\n\n    var dimValueGetter = (firstCategoryDimIndex != null && isNeedCompleteOrdinalData(source))\n        ? function (itemOpt, dimName, dataIndex, dimIndex) {\n            // Use dataIndex as ordinal value in categoryAxis\n            return dimIndex === firstCategoryDimIndex\n                ? dataIndex\n                : this.defaultDimValueGetter(itemOpt, dimName, dataIndex, dimIndex);\n        }\n        : null;\n\n    list.hasItemOption = false;\n    list.initData(source, null, dimValueGetter);\n\n    return list;\n}\n\nfunction isNeedCompleteOrdinalData(source) {\n    if (source.sourceFormat === SOURCE_FORMAT_ORIGINAL) {\n        var sampleItem = firstDataNotNull(source.data || []);\n        return sampleItem != null\n            && !isArray(getDataItemValue(sampleItem));\n    }\n}\n\nfunction firstDataNotNull(data) {\n    var i = 0;\n    while (i < data.length && data[i] == null) {\n        i++;\n    }\n    return data[i];\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * // Scale class management\n * @module echarts/scale/Scale\n */\n\n/**\n * @param {Object} [setting]\n */\nfunction Scale(setting) {\n    this._setting = setting || {};\n\n    /**\n     * Extent\n     * @type {Array.<number>}\n     * @protected\n     */\n    this._extent = [Infinity, -Infinity];\n\n    /**\n     * Step is calculated in adjustExtent\n     * @type {Array.<number>}\n     * @protected\n     */\n    this._interval = 0;\n\n    this.init && this.init.apply(this, arguments);\n}\n\n/**\n * Parse input val to valid inner number.\n * @param {*} val\n * @return {number}\n */\nScale.prototype.parse = function (val) {\n    // Notice: This would be a trap here, If the implementation\n    // of this method depends on extent, and this method is used\n    // before extent set (like in dataZoom), it would be wrong.\n    // Nevertheless, parse does not depend on extent generally.\n    return val;\n};\n\nScale.prototype.getSetting = function (name) {\n    return this._setting[name];\n};\n\nScale.prototype.contain = function (val) {\n    var extent = this._extent;\n    return val >= extent[0] && val <= extent[1];\n};\n\n/**\n * Normalize value to linear [0, 1], return 0.5 if extent span is 0\n * @param {number} val\n * @return {number}\n */\nScale.prototype.normalize = function (val) {\n    var extent = this._extent;\n    if (extent[1] === extent[0]) {\n        return 0.5;\n    }\n    return (val - extent[0]) / (extent[1] - extent[0]);\n};\n\n/**\n * Scale normalized value\n * @param {number} val\n * @return {number}\n */\nScale.prototype.scale = function (val) {\n    var extent = this._extent;\n    return val * (extent[1] - extent[0]) + extent[0];\n};\n\n/**\n * Set extent from data\n * @param {Array.<number>} other\n */\nScale.prototype.unionExtent = function (other) {\n    var extent = this._extent;\n    other[0] < extent[0] && (extent[0] = other[0]);\n    other[1] > extent[1] && (extent[1] = other[1]);\n    // not setExtent because in log axis it may transformed to power\n    // this.setExtent(extent[0], extent[1]);\n};\n\n/**\n * Set extent from data\n * @param {module:echarts/data/List} data\n * @param {string} dim\n */\nScale.prototype.unionExtentFromData = function (data, dim) {\n    this.unionExtent(data.getApproximateExtent(dim));\n};\n\n/**\n * Get extent\n * @return {Array.<number>}\n */\nScale.prototype.getExtent = function () {\n    return this._extent.slice();\n};\n\n/**\n * Set extent\n * @param {number} start\n * @param {number} end\n */\nScale.prototype.setExtent = function (start, end) {\n    var thisExtent = this._extent;\n    if (!isNaN(start)) {\n        thisExtent[0] = start;\n    }\n    if (!isNaN(end)) {\n        thisExtent[1] = end;\n    }\n};\n\n/**\n * When axis extent depends on data and no data exists,\n * axis ticks should not be drawn, which is named 'blank'.\n */\nScale.prototype.isBlank = function () {\n    return this._isBlank;\n},\n\n/**\n * When axis extent depends on data and no data exists,\n * axis ticks should not be drawn, which is named 'blank'.\n */\nScale.prototype.setBlank = function (isBlank) {\n    this._isBlank = isBlank;\n};\n\n/**\n * @abstract\n * @param {*} tick\n * @return {string} label of the tick.\n */\nScale.prototype.getLabel = null;\n\n\nenableClassExtend(Scale);\nenableClassManagement(Scale, {\n    registerWhenExtend: true\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * @constructor\n * @param {Object} [opt]\n * @param {Object} [opt.categories=[]]\n * @param {Object} [opt.needCollect=false]\n * @param {Object} [opt.deduplication=false]\n */\nfunction OrdinalMeta(opt) {\n\n    /**\n     * @readOnly\n     * @type {Array.<string>}\n     */\n    this.categories = opt.categories || [];\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this._needCollect = opt.needCollect;\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this._deduplication = opt.deduplication;\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this._map;\n}\n\n/**\n * @param {module:echarts/model/Model} axisModel\n * @return {module:echarts/data/OrdinalMeta}\n */\nOrdinalMeta.createByAxisModel = function (axisModel) {\n    var option = axisModel.option;\n    var data = option.data;\n    var categories = data && map(data, getName);\n\n    return new OrdinalMeta({\n        categories: categories,\n        needCollect: !categories,\n        // deduplication is default in axis.\n        deduplication: option.dedplication !== false\n    });\n};\n\nvar proto$1 = OrdinalMeta.prototype;\n\n/**\n * @param {string} category\n * @return {number} ordinal\n */\nproto$1.getOrdinal = function (category) {\n    return getOrCreateMap(this).get(category);\n};\n\n/**\n * @param {*} category\n * @return {number} The ordinal. If not found, return NaN.\n */\nproto$1.parseAndCollect = function (category) {\n    var index;\n    var needCollect = this._needCollect;\n\n    // The value of category dim can be the index of the given category set.\n    // This feature is only supported when !needCollect, because we should\n    // consider a common case: a value is 2017, which is a number but is\n    // expected to be tread as a category. This case usually happen in dataset,\n    // where it happent to be no need of the index feature.\n    if (typeof category !== 'string' && !needCollect) {\n        return category;\n    }\n\n    // Optimize for the scenario:\n    // category is ['2012-01-01', '2012-01-02', ...], where the input\n    // data has been ensured not duplicate and is large data.\n    // Notice, if a dataset dimension provide categroies, usually echarts\n    // should remove duplication except user tell echarts dont do that\n    // (set axis.deduplication = false), because echarts do not know whether\n    // the values in the category dimension has duplication (consider the\n    // parallel-aqi example)\n    if (needCollect && !this._deduplication) {\n        index = this.categories.length;\n        this.categories[index] = category;\n        return index;\n    }\n\n    var map$$1 = getOrCreateMap(this);\n    index = map$$1.get(category);\n\n    if (index == null) {\n        if (needCollect) {\n            index = this.categories.length;\n            this.categories[index] = category;\n            map$$1.set(category, index);\n        }\n        else {\n            index = NaN;\n        }\n    }\n\n    return index;\n};\n\n// Consider big data, do not create map until needed.\nfunction getOrCreateMap(ordinalMeta) {\n    return ordinalMeta._map || (\n        ordinalMeta._map = createHashMap(ordinalMeta.categories)\n    );\n}\n\nfunction getName(obj) {\n    if (isObject$1(obj) && obj.value != null) {\n        return obj.value;\n    }\n    else {\n        return obj + '';\n    }\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Linear continuous scale\n * @module echarts/coord/scale/Ordinal\n *\n * http://en.wikipedia.org/wiki/Level_of_measurement\n */\n\n// FIXME only one data\n\nvar scaleProto = Scale.prototype;\n\nvar OrdinalScale = Scale.extend({\n\n    type: 'ordinal',\n\n    /**\n     * @param {module:echarts/data/OrdianlMeta|Array.<string>} ordinalMeta\n     */\n    init: function (ordinalMeta, extent) {\n        // Caution: Should not use instanceof, consider ec-extensions using\n        // import approach to get OrdinalMeta class.\n        if (!ordinalMeta || isArray(ordinalMeta)) {\n            ordinalMeta = new OrdinalMeta({categories: ordinalMeta});\n        }\n        this._ordinalMeta = ordinalMeta;\n        this._extent = extent || [0, ordinalMeta.categories.length - 1];\n    },\n\n    parse: function (val) {\n        return typeof val === 'string'\n            ? this._ordinalMeta.getOrdinal(val)\n            // val might be float.\n            : Math.round(val);\n    },\n\n    contain: function (rank) {\n        rank = this.parse(rank);\n        return scaleProto.contain.call(this, rank)\n            && this._ordinalMeta.categories[rank] != null;\n    },\n\n    /**\n     * Normalize given rank or name to linear [0, 1]\n     * @param {number|string} [val]\n     * @return {number}\n     */\n    normalize: function (val) {\n        return scaleProto.normalize.call(this, this.parse(val));\n    },\n\n    scale: function (val) {\n        return Math.round(scaleProto.scale.call(this, val));\n    },\n\n    /**\n     * @return {Array}\n     */\n    getTicks: function () {\n        var ticks = [];\n        var extent = this._extent;\n        var rank = extent[0];\n\n        while (rank <= extent[1]) {\n            ticks.push(rank);\n            rank++;\n        }\n\n        return ticks;\n    },\n\n    /**\n     * Get item on rank n\n     * @param {number} n\n     * @return {string}\n     */\n    getLabel: function (n) {\n        if (!this.isBlank()) {\n            // Note that if no data, ordinalMeta.categories is an empty array.\n            return this._ordinalMeta.categories[n];\n        }\n    },\n\n    /**\n     * @return {number}\n     */\n    count: function () {\n        return this._extent[1] - this._extent[0] + 1;\n    },\n\n    /**\n     * @override\n     */\n    unionExtentFromData: function (data, dim) {\n        this.unionExtent(data.getApproximateExtent(dim));\n    },\n\n    getOrdinalMeta: function () {\n        return this._ordinalMeta;\n    },\n\n    niceTicks: noop,\n    niceExtent: noop\n});\n\n/**\n * @return {module:echarts/scale/Time}\n */\nOrdinalScale.create = function () {\n    return new OrdinalScale();\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * For testable.\n */\n\nvar roundNumber$1 = round$1;\n\n/**\n * @param {Array.<number>} extent Both extent[0] and extent[1] should be valid number.\n *                                Should be extent[0] < extent[1].\n * @param {number} splitNumber splitNumber should be >= 1.\n * @param {number} [minInterval]\n * @param {number} [maxInterval]\n * @return {Object} {interval, intervalPrecision, niceTickExtent}\n */\nfunction intervalScaleNiceTicks(extent, splitNumber, minInterval, maxInterval) {\n    var result = {};\n    var span = extent[1] - extent[0];\n\n    var interval = result.interval = nice(span / splitNumber, true);\n    if (minInterval != null && interval < minInterval) {\n        interval = result.interval = minInterval;\n    }\n    if (maxInterval != null && interval > maxInterval) {\n        interval = result.interval = maxInterval;\n    }\n    // Tow more digital for tick.\n    var precision = result.intervalPrecision = getIntervalPrecision(interval);\n    // Niced extent inside original extent\n    var niceTickExtent = result.niceTickExtent = [\n        roundNumber$1(Math.ceil(extent[0] / interval) * interval, precision),\n        roundNumber$1(Math.floor(extent[1] / interval) * interval, precision)\n    ];\n\n    fixExtent(niceTickExtent, extent);\n\n    return result;\n}\n\n/**\n * @param {number} interval\n * @return {number} interval precision\n */\nfunction getIntervalPrecision(interval) {\n    // Tow more digital for tick.\n    return getPrecisionSafe(interval) + 2;\n}\n\nfunction clamp(niceTickExtent, idx, extent) {\n    niceTickExtent[idx] = Math.max(Math.min(niceTickExtent[idx], extent[1]), extent[0]);\n}\n\n// In some cases (e.g., splitNumber is 1), niceTickExtent may be out of extent.\nfunction fixExtent(niceTickExtent, extent) {\n    !isFinite(niceTickExtent[0]) && (niceTickExtent[0] = extent[0]);\n    !isFinite(niceTickExtent[1]) && (niceTickExtent[1] = extent[1]);\n    clamp(niceTickExtent, 0, extent);\n    clamp(niceTickExtent, 1, extent);\n    if (niceTickExtent[0] > niceTickExtent[1]) {\n        niceTickExtent[0] = niceTickExtent[1];\n    }\n}\n\nfunction intervalScaleGetTicks(interval, extent, niceTickExtent, intervalPrecision) {\n    var ticks = [];\n\n    // If interval is 0, return [];\n    if (!interval) {\n        return ticks;\n    }\n\n    // Consider this case: using dataZoom toolbox, zoom and zoom.\n    var safeLimit = 10000;\n\n    if (extent[0] < niceTickExtent[0]) {\n        ticks.push(extent[0]);\n    }\n    var tick = niceTickExtent[0];\n\n    while (tick <= niceTickExtent[1]) {\n        ticks.push(tick);\n        // Avoid rounding error\n        tick = roundNumber$1(tick + interval, intervalPrecision);\n        if (tick === ticks[ticks.length - 1]) {\n            // Consider out of safe float point, e.g.,\n            // -3711126.9907707 + 2e-10 === -3711126.9907707\n            break;\n        }\n        if (ticks.length > safeLimit) {\n            return [];\n        }\n    }\n    // Consider this case: the last item of ticks is smaller\n    // than niceTickExtent[1] and niceTickExtent[1] === extent[1].\n    if (extent[1] > (ticks.length ? ticks[ticks.length - 1] : niceTickExtent[1])) {\n        ticks.push(extent[1]);\n    }\n\n    return ticks;\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Interval scale\n * @module echarts/scale/Interval\n */\n\n\nvar roundNumber = round$1;\n\n/**\n * @alias module:echarts/coord/scale/Interval\n * @constructor\n */\nvar IntervalScale = Scale.extend({\n\n    type: 'interval',\n\n    _interval: 0,\n\n    _intervalPrecision: 2,\n\n    setExtent: function (start, end) {\n        var thisExtent = this._extent;\n        //start,end may be a Number like '25',so...\n        if (!isNaN(start)) {\n            thisExtent[0] = parseFloat(start);\n        }\n        if (!isNaN(end)) {\n            thisExtent[1] = parseFloat(end);\n        }\n    },\n\n    unionExtent: function (other) {\n        var extent = this._extent;\n        other[0] < extent[0] && (extent[0] = other[0]);\n        other[1] > extent[1] && (extent[1] = other[1]);\n\n        // unionExtent may called by it's sub classes\n        IntervalScale.prototype.setExtent.call(this, extent[0], extent[1]);\n    },\n    /**\n     * Get interval\n     */\n    getInterval: function () {\n        return this._interval;\n    },\n\n    /**\n     * Set interval\n     */\n    setInterval: function (interval) {\n        this._interval = interval;\n        // Dropped auto calculated niceExtent and use user setted extent\n        // We assume user wan't to set both interval, min, max to get a better result\n        this._niceExtent = this._extent.slice();\n\n        this._intervalPrecision = getIntervalPrecision(interval);\n    },\n\n    /**\n     * @return {Array.<number>}\n     */\n    getTicks: function () {\n        return intervalScaleGetTicks(\n            this._interval, this._extent, this._niceExtent, this._intervalPrecision\n        );\n    },\n\n    /**\n     * @param {number} data\n     * @param {Object} [opt]\n     * @param {number|string} [opt.precision] If 'auto', use nice presision.\n     * @param {boolean} [opt.pad] returns 1.50 but not 1.5 if precision is 2.\n     * @return {string}\n     */\n    getLabel: function (data, opt) {\n        if (data == null) {\n            return '';\n        }\n\n        var precision = opt && opt.precision;\n\n        if (precision == null) {\n            precision = getPrecisionSafe(data) || 0;\n        }\n        else if (precision === 'auto') {\n            // Should be more precise then tick.\n            precision = this._intervalPrecision;\n        }\n\n        // (1) If `precision` is set, 12.005 should be display as '12.00500'.\n        // (2) Use roundNumber (toFixed) to avoid scientific notation like '3.5e-7'.\n        data = roundNumber(data, precision, true);\n\n        return addCommas(data);\n    },\n\n    /**\n     * Update interval and extent of intervals for nice ticks\n     *\n     * @param {number} [splitNumber = 5] Desired number of ticks\n     * @param {number} [minInterval]\n     * @param {number} [maxInterval]\n     */\n    niceTicks: function (splitNumber, minInterval, maxInterval) {\n        splitNumber = splitNumber || 5;\n        var extent = this._extent;\n        var span = extent[1] - extent[0];\n        if (!isFinite(span)) {\n            return;\n        }\n        // User may set axis min 0 and data are all negative\n        // FIXME If it needs to reverse ?\n        if (span < 0) {\n            span = -span;\n            extent.reverse();\n        }\n\n        var result = intervalScaleNiceTicks(\n            extent, splitNumber, minInterval, maxInterval\n        );\n\n        this._intervalPrecision = result.intervalPrecision;\n        this._interval = result.interval;\n        this._niceExtent = result.niceTickExtent;\n    },\n\n    /**\n     * Nice extent.\n     * @param {Object} opt\n     * @param {number} [opt.splitNumber = 5] Given approx tick number\n     * @param {boolean} [opt.fixMin=false]\n     * @param {boolean} [opt.fixMax=false]\n     * @param {boolean} [opt.minInterval]\n     * @param {boolean} [opt.maxInterval]\n     */\n    niceExtent: function (opt) {\n        var extent = this._extent;\n        // If extent start and end are same, expand them\n        if (extent[0] === extent[1]) {\n            if (extent[0] !== 0) {\n                // Expand extent\n                var expandSize = extent[0];\n                // In the fowllowing case\n                //      Axis has been fixed max 100\n                //      Plus data are all 100 and axis extent are [100, 100].\n                // Extend to the both side will cause expanded max is larger than fixed max.\n                // So only expand to the smaller side.\n                if (!opt.fixMax) {\n                    extent[1] += expandSize / 2;\n                    extent[0] -= expandSize / 2;\n                }\n                else {\n                    extent[0] -= expandSize / 2;\n                }\n            }\n            else {\n                extent[1] = 1;\n            }\n        }\n        var span = extent[1] - extent[0];\n        // If there are no data and extent are [Infinity, -Infinity]\n        if (!isFinite(span)) {\n            extent[0] = 0;\n            extent[1] = 1;\n        }\n\n        this.niceTicks(opt.splitNumber, opt.minInterval, opt.maxInterval);\n\n        // var extent = this._extent;\n        var interval = this._interval;\n\n        if (!opt.fixMin) {\n            extent[0] = roundNumber(Math.floor(extent[0] / interval) * interval);\n        }\n        if (!opt.fixMax) {\n            extent[1] = roundNumber(Math.ceil(extent[1] / interval) * interval);\n        }\n    }\n});\n\n/**\n * @return {module:echarts/scale/Time}\n */\nIntervalScale.create = function () {\n    return new IntervalScale();\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/* global Float32Array */\n\nvar STACK_PREFIX = '__ec_stack_';\nvar LARGE_BAR_MIN_WIDTH = 0.5;\n\nvar LargeArr = typeof Float32Array !== 'undefined' ? Float32Array : Array;\n\nfunction getSeriesStackId(seriesModel) {\n    return seriesModel.get('stack') || STACK_PREFIX + seriesModel.seriesIndex;\n}\n\nfunction getAxisKey(axis) {\n    return axis.dim + axis.index;\n}\n\n/**\n * @param {Object} opt\n * @param {module:echarts/coord/Axis} opt.axis Only support category axis currently.\n * @param {number} opt.count Positive interger.\n * @param {number} [opt.barWidth]\n * @param {number} [opt.barMaxWidth]\n * @param {number} [opt.barGap]\n * @param {number} [opt.barCategoryGap]\n * @return {Object} {width, offset, offsetCenter} If axis.type is not 'category', return undefined.\n */\nfunction getLayoutOnAxis(opt) {\n    var params = [];\n    var baseAxis = opt.axis;\n    var axisKey = 'axis0';\n\n    if (baseAxis.type !== 'category') {\n        return;\n    }\n    var bandWidth = baseAxis.getBandWidth();\n\n    for (var i = 0; i < opt.count || 0; i++) {\n        params.push(defaults({\n            bandWidth: bandWidth,\n            axisKey: axisKey,\n            stackId: STACK_PREFIX + i\n        }, opt));\n    }\n    var widthAndOffsets = doCalBarWidthAndOffset(params);\n\n    var result = [];\n    for (var i = 0; i < opt.count; i++) {\n        var item = widthAndOffsets[axisKey][STACK_PREFIX + i];\n        item.offsetCenter = item.offset + item.width / 2;\n        result.push(item);\n    }\n\n    return result;\n}\n\nfunction prepareLayoutBarSeries(seriesType, ecModel) {\n    var seriesModels = [];\n    ecModel.eachSeriesByType(seriesType, function (seriesModel) {\n        // Check series coordinate, do layout for cartesian2d only\n        if (isOnCartesian(seriesModel) && !isInLargeMode(seriesModel)) {\n            seriesModels.push(seriesModel);\n        }\n    });\n    return seriesModels;\n}\n\nfunction makeColumnLayout(barSeries) {\n    var seriesInfoList = [];\n    each$1(barSeries, function (seriesModel) {\n        var data = seriesModel.getData();\n        var cartesian = seriesModel.coordinateSystem;\n        var baseAxis = cartesian.getBaseAxis();\n        var axisExtent = baseAxis.getExtent();\n        var bandWidth = baseAxis.type === 'category'\n            ? baseAxis.getBandWidth()\n            : (Math.abs(axisExtent[1] - axisExtent[0]) / data.count());\n\n        var barWidth = parsePercent$1(\n            seriesModel.get('barWidth'), bandWidth\n        );\n        var barMaxWidth = parsePercent$1(\n            seriesModel.get('barMaxWidth'), bandWidth\n        );\n        var barGap = seriesModel.get('barGap');\n        var barCategoryGap = seriesModel.get('barCategoryGap');\n\n        seriesInfoList.push({\n            bandWidth: bandWidth,\n            barWidth: barWidth,\n            barMaxWidth: barMaxWidth,\n            barGap: barGap,\n            barCategoryGap: barCategoryGap,\n            axisKey: getAxisKey(baseAxis),\n            stackId: getSeriesStackId(seriesModel)\n        });\n    });\n\n    return doCalBarWidthAndOffset(seriesInfoList);\n}\n\nfunction doCalBarWidthAndOffset(seriesInfoList) {\n    // Columns info on each category axis. Key is cartesian name\n    var columnsMap = {};\n\n    each$1(seriesInfoList, function (seriesInfo, idx) {\n        var axisKey = seriesInfo.axisKey;\n        var bandWidth = seriesInfo.bandWidth;\n        var columnsOnAxis = columnsMap[axisKey] || {\n            bandWidth: bandWidth,\n            remainedWidth: bandWidth,\n            autoWidthCount: 0,\n            categoryGap: '20%',\n            gap: '30%',\n            stacks: {}\n        };\n        var stacks = columnsOnAxis.stacks;\n        columnsMap[axisKey] = columnsOnAxis;\n\n        var stackId = seriesInfo.stackId;\n\n        if (!stacks[stackId]) {\n            columnsOnAxis.autoWidthCount++;\n        }\n        stacks[stackId] = stacks[stackId] || {\n            width: 0,\n            maxWidth: 0\n        };\n\n        // Caution: In a single coordinate system, these barGrid attributes\n        // will be shared by series. Consider that they have default values,\n        // only the attributes set on the last series will work.\n        // Do not change this fact unless there will be a break change.\n\n        // TODO\n        var barWidth = seriesInfo.barWidth;\n        if (barWidth && !stacks[stackId].width) {\n            // See #6312, do not restrict width.\n            stacks[stackId].width = barWidth;\n            barWidth = Math.min(columnsOnAxis.remainedWidth, barWidth);\n            columnsOnAxis.remainedWidth -= barWidth;\n        }\n\n        var barMaxWidth = seriesInfo.barMaxWidth;\n        barMaxWidth && (stacks[stackId].maxWidth = barMaxWidth);\n        var barGap = seriesInfo.barGap;\n        (barGap != null) && (columnsOnAxis.gap = barGap);\n        var barCategoryGap = seriesInfo.barCategoryGap;\n        (barCategoryGap != null) && (columnsOnAxis.categoryGap = barCategoryGap);\n    });\n\n    var result = {};\n\n    each$1(columnsMap, function (columnsOnAxis, coordSysName) {\n\n        result[coordSysName] = {};\n\n        var stacks = columnsOnAxis.stacks;\n        var bandWidth = columnsOnAxis.bandWidth;\n        var categoryGap = parsePercent$1(columnsOnAxis.categoryGap, bandWidth);\n        var barGapPercent = parsePercent$1(columnsOnAxis.gap, 1);\n\n        var remainedWidth = columnsOnAxis.remainedWidth;\n        var autoWidthCount = columnsOnAxis.autoWidthCount;\n        var autoWidth = (remainedWidth - categoryGap)\n            / (autoWidthCount + (autoWidthCount - 1) * barGapPercent);\n        autoWidth = Math.max(autoWidth, 0);\n\n        // Find if any auto calculated bar exceeded maxBarWidth\n        each$1(stacks, function (column, stack) {\n            var maxWidth = column.maxWidth;\n            if (maxWidth && maxWidth < autoWidth) {\n                maxWidth = Math.min(maxWidth, remainedWidth);\n                if (column.width) {\n                    maxWidth = Math.min(maxWidth, column.width);\n                }\n                remainedWidth -= maxWidth;\n                column.width = maxWidth;\n                autoWidthCount--;\n            }\n        });\n\n        // Recalculate width again\n        autoWidth = (remainedWidth - categoryGap)\n            / (autoWidthCount + (autoWidthCount - 1) * barGapPercent);\n        autoWidth = Math.max(autoWidth, 0);\n\n        var widthSum = 0;\n        var lastColumn;\n        each$1(stacks, function (column, idx) {\n            if (!column.width) {\n                column.width = autoWidth;\n            }\n            lastColumn = column;\n            widthSum += column.width * (1 + barGapPercent);\n        });\n        if (lastColumn) {\n            widthSum -= lastColumn.width * barGapPercent;\n        }\n\n        var offset = -widthSum / 2;\n        each$1(stacks, function (column, stackId) {\n            result[coordSysName][stackId] = result[coordSysName][stackId] || {\n                offset: offset,\n                width: column.width\n            };\n\n            offset += column.width * (1 + barGapPercent);\n        });\n    });\n\n    return result;\n}\n\n/**\n * @param {Object} barWidthAndOffset The result of makeColumnLayout\n * @param {module:echarts/coord/Axis} axis\n * @param {module:echarts/model/Series} [seriesModel] If not provided, return all.\n * @return {Object} {stackId: {offset, width}} or {offset, width} if seriesModel provided.\n */\nfunction retrieveColumnLayout(barWidthAndOffset, axis, seriesModel) {\n    if (barWidthAndOffset && axis) {\n        var result = barWidthAndOffset[getAxisKey(axis)];\n        if (result != null && seriesModel != null) {\n            result = result[getSeriesStackId(seriesModel)];\n        }\n        return result;\n    }\n}\n\n/**\n * @param {string} seriesType\n * @param {module:echarts/model/Global} ecModel\n */\nfunction layout(seriesType, ecModel) {\n\n    var seriesModels = prepareLayoutBarSeries(seriesType, ecModel);\n    var barWidthAndOffset = makeColumnLayout(seriesModels);\n\n    var lastStackCoords = {};\n    each$1(seriesModels, function (seriesModel) {\n\n        var data = seriesModel.getData();\n        var cartesian = seriesModel.coordinateSystem;\n        var baseAxis = cartesian.getBaseAxis();\n\n        var stackId = getSeriesStackId(seriesModel);\n        var columnLayoutInfo = barWidthAndOffset[getAxisKey(baseAxis)][stackId];\n        var columnOffset = columnLayoutInfo.offset;\n        var columnWidth = columnLayoutInfo.width;\n        var valueAxis = cartesian.getOtherAxis(baseAxis);\n\n        var barMinHeight = seriesModel.get('barMinHeight') || 0;\n\n        lastStackCoords[stackId] = lastStackCoords[stackId] || [];\n        data.setLayout({\n            offset: columnOffset,\n            size: columnWidth\n        });\n\n        var valueDim = data.mapDimension(valueAxis.dim);\n        var baseDim = data.mapDimension(baseAxis.dim);\n        var stacked = isDimensionStacked(data, valueDim /*, baseDim*/);\n        var isValueAxisH = valueAxis.isHorizontal();\n\n        var valueAxisStart = getValueAxisStart(baseAxis, valueAxis, stacked);\n\n        for (var idx = 0, len = data.count(); idx < len; idx++) {\n            var value = data.get(valueDim, idx);\n            var baseValue = data.get(baseDim, idx);\n\n            // If dataZoom in filteMode: 'empty', the baseValue can be set as NaN in \"axisProxy\".\n            if (isNaN(value) || isNaN(baseValue)) {\n                continue;\n            }\n\n            var sign = value >= 0 ? 'p' : 'n';\n            var baseCoord = valueAxisStart;\n\n            // Because of the barMinHeight, we can not use the value in\n            // stackResultDimension directly.\n            if (stacked) {\n                // Only ordinal axis can be stacked.\n                if (!lastStackCoords[stackId][baseValue]) {\n                    lastStackCoords[stackId][baseValue] = {\n                        p: valueAxisStart, // Positive stack\n                        n: valueAxisStart  // Negative stack\n                    };\n                }\n                // Should also consider #4243\n                baseCoord = lastStackCoords[stackId][baseValue][sign];\n            }\n\n            var x;\n            var y;\n            var width;\n            var height;\n\n            if (isValueAxisH) {\n                var coord = cartesian.dataToPoint([value, baseValue]);\n                x = baseCoord;\n                y = coord[1] + columnOffset;\n                width = coord[0] - valueAxisStart;\n                height = columnWidth;\n\n                if (Math.abs(width) < barMinHeight) {\n                    width = (width < 0 ? -1 : 1) * barMinHeight;\n                }\n                stacked && (lastStackCoords[stackId][baseValue][sign] += width);\n            }\n            else {\n                var coord = cartesian.dataToPoint([baseValue, value]);\n                x = coord[0] + columnOffset;\n                y = baseCoord;\n                width = columnWidth;\n                height = coord[1] - valueAxisStart;\n\n                if (Math.abs(height) < barMinHeight) {\n                    // Include zero to has a positive bar\n                    height = (height <= 0 ? -1 : 1) * barMinHeight;\n                }\n                stacked && (lastStackCoords[stackId][baseValue][sign] += height);\n            }\n\n            data.setItemLayout(idx, {\n                x: x,\n                y: y,\n                width: width,\n                height: height\n            });\n        }\n\n    }, this);\n}\n\n// TODO: Do not support stack in large mode yet.\nvar largeLayout = {\n\n    seriesType: 'bar',\n\n    plan: createRenderPlanner(),\n\n    reset: function (seriesModel) {\n        if (!isOnCartesian(seriesModel) || !isInLargeMode(seriesModel)) {\n            return;\n        }\n\n        var data = seriesModel.getData();\n        var cartesian = seriesModel.coordinateSystem;\n        var baseAxis = cartesian.getBaseAxis();\n        var valueAxis = cartesian.getOtherAxis(baseAxis);\n        var valueDim = data.mapDimension(valueAxis.dim);\n        var baseDim = data.mapDimension(baseAxis.dim);\n        var valueAxisHorizontal = valueAxis.isHorizontal();\n        var valueDimIdx = valueAxisHorizontal ? 0 : 1;\n\n        var barWidth = retrieveColumnLayout(\n            makeColumnLayout([seriesModel]), baseAxis, seriesModel\n        ).width;\n        if (!(barWidth > LARGE_BAR_MIN_WIDTH)) { // jshint ignore:line\n            barWidth = LARGE_BAR_MIN_WIDTH;\n        }\n\n        return {progress: progress};\n\n        function progress(params, data) {\n            var count = params.count;\n            var largePoints = new LargeArr(count * 2);\n            var largeDataIndices = new LargeArr(count);\n            var dataIndex;\n            var coord = [];\n            var valuePair = [];\n            var pointsOffset = 0;\n            var idxOffset = 0;\n\n            while ((dataIndex = params.next()) != null) {\n                valuePair[valueDimIdx] = data.get(valueDim, dataIndex);\n                valuePair[1 - valueDimIdx] = data.get(baseDim, dataIndex);\n\n                coord = cartesian.dataToPoint(valuePair, null, coord);\n                // Data index might not be in order, depends on `progressiveChunkMode`.\n                largePoints[pointsOffset++] = coord[0];\n                largePoints[pointsOffset++] = coord[1];\n                largeDataIndices[idxOffset++] = dataIndex;\n            }\n\n            data.setLayout({\n                largePoints: largePoints,\n                largeDataIndices: largeDataIndices,\n                barWidth: barWidth,\n                valueAxisStart: getValueAxisStart(baseAxis, valueAxis, false),\n                valueAxisHorizontal: valueAxisHorizontal\n            });\n        }\n    }\n};\n\nfunction isOnCartesian(seriesModel) {\n    return seriesModel.coordinateSystem && seriesModel.coordinateSystem.type === 'cartesian2d';\n}\n\nfunction isInLargeMode(seriesModel) {\n    return seriesModel.pipelineContext && seriesModel.pipelineContext.large;\n}\n\n// See cases in `test/bar-start.html` and `#7412`, `#8747`.\nfunction getValueAxisStart(baseAxis, valueAxis, stacked) {\n    var extent = valueAxis.getGlobalExtent();\n    var min;\n    var max;\n    if (extent[0] > extent[1]) {\n        min = extent[1];\n        max = extent[0];\n    }\n    else {\n        min = extent[0];\n        max = extent[1];\n    }\n\n    var valueStart = valueAxis.toGlobalCoord(valueAxis.dataToCoord(0));\n    valueStart < min && (valueStart = min);\n    valueStart > max && (valueStart = max);\n\n    return valueStart;\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/*\n* A third-party license is embeded for some of the code in this file:\n* The \"scaleLevels\" was originally copied from \"d3.js\" with some\n* modifications made for this project.\n* (See more details in the comment on the definition of \"scaleLevels\" below.)\n* The use of the source code of this file is also subject to the terms\n* and consitions of the license of \"d3.js\" (BSD-3Clause, see\n* </licenses/LICENSE-d3>).\n*/\n\n\n// [About UTC and local time zone]:\n// In most cases, `number.parseDate` will treat input data string as local time\n// (except time zone is specified in time string). And `format.formateTime` returns\n// local time by default. option.useUTC is false by default. This design have\n// concidered these common case:\n// (1) Time that is persistent in server is in UTC, but it is needed to be diplayed\n// in local time by default.\n// (2) By default, the input data string (e.g., '2011-01-02') should be displayed\n// as its original time, without any time difference.\n\nvar intervalScaleProto = IntervalScale.prototype;\n\nvar mathCeil = Math.ceil;\nvar mathFloor = Math.floor;\nvar ONE_SECOND = 1000;\nvar ONE_MINUTE = ONE_SECOND * 60;\nvar ONE_HOUR = ONE_MINUTE * 60;\nvar ONE_DAY = ONE_HOUR * 24;\n\n// FIXME 公用？\nvar bisect = function (a, x, lo, hi) {\n    while (lo < hi) {\n        var mid = lo + hi >>> 1;\n        if (a[mid][1] < x) {\n            lo = mid + 1;\n        }\n        else {\n            hi = mid;\n        }\n    }\n    return lo;\n};\n\n/**\n * @alias module:echarts/coord/scale/Time\n * @constructor\n */\nvar TimeScale = IntervalScale.extend({\n    type: 'time',\n\n    /**\n     * @override\n     */\n    getLabel: function (val) {\n        var stepLvl = this._stepLvl;\n\n        var date = new Date(val);\n\n        return formatTime(stepLvl[0], date, this.getSetting('useUTC'));\n    },\n\n    /**\n     * @override\n     */\n    niceExtent: function (opt) {\n        var extent = this._extent;\n        // If extent start and end are same, expand them\n        if (extent[0] === extent[1]) {\n            // Expand extent\n            extent[0] -= ONE_DAY;\n            extent[1] += ONE_DAY;\n        }\n        // If there are no data and extent are [Infinity, -Infinity]\n        if (extent[1] === -Infinity && extent[0] === Infinity) {\n            var d = new Date();\n            extent[1] = +new Date(d.getFullYear(), d.getMonth(), d.getDate());\n            extent[0] = extent[1] - ONE_DAY;\n        }\n\n        this.niceTicks(opt.splitNumber, opt.minInterval, opt.maxInterval);\n\n        // var extent = this._extent;\n        var interval = this._interval;\n\n        if (!opt.fixMin) {\n            extent[0] = round$1(mathFloor(extent[0] / interval) * interval);\n        }\n        if (!opt.fixMax) {\n            extent[1] = round$1(mathCeil(extent[1] / interval) * interval);\n        }\n    },\n\n    /**\n     * @override\n     */\n    niceTicks: function (approxTickNum, minInterval, maxInterval) {\n        approxTickNum = approxTickNum || 10;\n\n        var extent = this._extent;\n        var span = extent[1] - extent[0];\n        var approxInterval = span / approxTickNum;\n\n        if (minInterval != null && approxInterval < minInterval) {\n            approxInterval = minInterval;\n        }\n        if (maxInterval != null && approxInterval > maxInterval) {\n            approxInterval = maxInterval;\n        }\n\n        var scaleLevelsLen = scaleLevels.length;\n        var idx = bisect(scaleLevels, approxInterval, 0, scaleLevelsLen);\n\n        var level = scaleLevels[Math.min(idx, scaleLevelsLen - 1)];\n        var interval = level[1];\n        // Same with interval scale if span is much larger than 1 year\n        if (level[0] === 'year') {\n            var yearSpan = span / interval;\n\n            // From \"Nice Numbers for Graph Labels\" of Graphic Gems\n            // var niceYearSpan = numberUtil.nice(yearSpan, false);\n            var yearStep = nice(yearSpan / approxTickNum, true);\n\n            interval *= yearStep;\n        }\n\n        var timezoneOffset = this.getSetting('useUTC')\n            ? 0 : (new Date(+extent[0] || +extent[1])).getTimezoneOffset() * 60 * 1000;\n        var niceExtent = [\n            Math.round(mathCeil((extent[0] - timezoneOffset) / interval) * interval + timezoneOffset),\n            Math.round(mathFloor((extent[1] - timezoneOffset) / interval) * interval + timezoneOffset)\n        ];\n\n        fixExtent(niceExtent, extent);\n\n        this._stepLvl = level;\n        // Interval will be used in getTicks\n        this._interval = interval;\n        this._niceExtent = niceExtent;\n    },\n\n    parse: function (val) {\n        // val might be float.\n        return +parseDate(val);\n    }\n});\n\neach$1(['contain', 'normalize'], function (methodName) {\n    TimeScale.prototype[methodName] = function (val) {\n        return intervalScaleProto[methodName].call(this, this.parse(val));\n    };\n});\n\n/**\n * This implementation was originally copied from \"d3.js\"\n * <https://github.com/d3/d3/blob/b516d77fb8566b576088e73410437494717ada26/src/time/scale.js>\n * with some modifications made for this program.\n * See the license statement at the head of this file.\n */\nvar scaleLevels = [\n    // Format              interval\n    ['hh:mm:ss', ONE_SECOND],          // 1s\n    ['hh:mm:ss', ONE_SECOND * 5],      // 5s\n    ['hh:mm:ss', ONE_SECOND * 10],     // 10s\n    ['hh:mm:ss', ONE_SECOND * 15],     // 15s\n    ['hh:mm:ss', ONE_SECOND * 30],     // 30s\n    ['hh:mm\\nMM-dd', ONE_MINUTE],      // 1m\n    ['hh:mm\\nMM-dd', ONE_MINUTE * 5],  // 5m\n    ['hh:mm\\nMM-dd', ONE_MINUTE * 10], // 10m\n    ['hh:mm\\nMM-dd', ONE_MINUTE * 15], // 15m\n    ['hh:mm\\nMM-dd', ONE_MINUTE * 30], // 30m\n    ['hh:mm\\nMM-dd', ONE_HOUR],        // 1h\n    ['hh:mm\\nMM-dd', ONE_HOUR * 2],    // 2h\n    ['hh:mm\\nMM-dd', ONE_HOUR * 6],    // 6h\n    ['hh:mm\\nMM-dd', ONE_HOUR * 12],   // 12h\n    ['MM-dd\\nyyyy', ONE_DAY],          // 1d\n    ['MM-dd\\nyyyy', ONE_DAY * 2],      // 2d\n    ['MM-dd\\nyyyy', ONE_DAY * 3],      // 3d\n    ['MM-dd\\nyyyy', ONE_DAY * 4],      // 4d\n    ['MM-dd\\nyyyy', ONE_DAY * 5],      // 5d\n    ['MM-dd\\nyyyy', ONE_DAY * 6],      // 6d\n    ['week', ONE_DAY * 7],             // 7d\n    ['MM-dd\\nyyyy', ONE_DAY * 10],     // 10d\n    ['week', ONE_DAY * 14],            // 2w\n    ['week', ONE_DAY * 21],            // 3w\n    ['month', ONE_DAY * 31],           // 1M\n    ['week', ONE_DAY * 42],            // 6w\n    ['month', ONE_DAY * 62],           // 2M\n    ['week', ONE_DAY * 70],            // 10w\n    ['quarter', ONE_DAY * 95],         // 3M\n    ['month', ONE_DAY * 31 * 4],       // 4M\n    ['month', ONE_DAY * 31 * 5],       // 5M\n    ['half-year', ONE_DAY * 380 / 2],  // 6M\n    ['month', ONE_DAY * 31 * 8],       // 8M\n    ['month', ONE_DAY * 31 * 10],      // 10M\n    ['year', ONE_DAY * 380]            // 1Y\n];\n\n/**\n * @param {module:echarts/model/Model}\n * @return {module:echarts/scale/Time}\n */\nTimeScale.create = function (model) {\n    return new TimeScale({useUTC: model.ecModel.get('useUTC')});\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Log scale\n * @module echarts/scale/Log\n */\n\n// Use some method of IntervalScale\nvar scaleProto$1 = Scale.prototype;\nvar intervalScaleProto$1 = IntervalScale.prototype;\n\nvar getPrecisionSafe$1 = getPrecisionSafe;\nvar roundingErrorFix = round$1;\n\nvar mathFloor$1 = Math.floor;\nvar mathCeil$1 = Math.ceil;\nvar mathPow$1 = Math.pow;\n\nvar mathLog = Math.log;\n\nvar LogScale = Scale.extend({\n\n    type: 'log',\n\n    base: 10,\n\n    $constructor: function () {\n        Scale.apply(this, arguments);\n        this._originalScale = new IntervalScale();\n    },\n\n    /**\n     * @return {Array.<number>}\n     */\n    getTicks: function () {\n        var originalScale = this._originalScale;\n        var extent = this._extent;\n        var originalExtent = originalScale.getExtent();\n\n        return map(intervalScaleProto$1.getTicks.call(this), function (val) {\n            var powVal = round$1(mathPow$1(this.base, val));\n\n            // Fix #4158\n            powVal = (val === extent[0] && originalScale.__fixMin)\n                ? fixRoundingError(powVal, originalExtent[0])\n                : powVal;\n            powVal = (val === extent[1] && originalScale.__fixMax)\n                ? fixRoundingError(powVal, originalExtent[1])\n                : powVal;\n\n            return powVal;\n        }, this);\n    },\n\n    /**\n     * @param {number} val\n     * @return {string}\n     */\n    getLabel: intervalScaleProto$1.getLabel,\n\n    /**\n     * @param  {number} val\n     * @return {number}\n     */\n    scale: function (val) {\n        val = scaleProto$1.scale.call(this, val);\n        return mathPow$1(this.base, val);\n    },\n\n    /**\n     * @param {number} start\n     * @param {number} end\n     */\n    setExtent: function (start, end) {\n        var base = this.base;\n        start = mathLog(start) / mathLog(base);\n        end = mathLog(end) / mathLog(base);\n        intervalScaleProto$1.setExtent.call(this, start, end);\n    },\n\n    /**\n     * @return {number} end\n     */\n    getExtent: function () {\n        var base = this.base;\n        var extent = scaleProto$1.getExtent.call(this);\n        extent[0] = mathPow$1(base, extent[0]);\n        extent[1] = mathPow$1(base, extent[1]);\n\n        // Fix #4158\n        var originalScale = this._originalScale;\n        var originalExtent = originalScale.getExtent();\n        originalScale.__fixMin && (extent[0] = fixRoundingError(extent[0], originalExtent[0]));\n        originalScale.__fixMax && (extent[1] = fixRoundingError(extent[1], originalExtent[1]));\n\n        return extent;\n    },\n\n    /**\n     * @param  {Array.<number>} extent\n     */\n    unionExtent: function (extent) {\n        this._originalScale.unionExtent(extent);\n\n        var base = this.base;\n        extent[0] = mathLog(extent[0]) / mathLog(base);\n        extent[1] = mathLog(extent[1]) / mathLog(base);\n        scaleProto$1.unionExtent.call(this, extent);\n    },\n\n    /**\n     * @override\n     */\n    unionExtentFromData: function (data, dim) {\n        // TODO\n        // filter value that <= 0\n        this.unionExtent(data.getApproximateExtent(dim));\n    },\n\n    /**\n     * Update interval and extent of intervals for nice ticks\n     * @param  {number} [approxTickNum = 10] Given approx tick number\n     */\n    niceTicks: function (approxTickNum) {\n        approxTickNum = approxTickNum || 10;\n        var extent = this._extent;\n        var span = extent[1] - extent[0];\n        if (span === Infinity || span <= 0) {\n            return;\n        }\n\n        var interval = quantity(span);\n        var err = approxTickNum / span * interval;\n\n        // Filter ticks to get closer to the desired count.\n        if (err <= 0.5) {\n            interval *= 10;\n        }\n\n        // Interval should be integer\n        while (!isNaN(interval) && Math.abs(interval) < 1 && Math.abs(interval) > 0) {\n            interval *= 10;\n        }\n\n        var niceExtent = [\n            round$1(mathCeil$1(extent[0] / interval) * interval),\n            round$1(mathFloor$1(extent[1] / interval) * interval)\n        ];\n\n        this._interval = interval;\n        this._niceExtent = niceExtent;\n    },\n\n    /**\n     * Nice extent.\n     * @override\n     */\n    niceExtent: function (opt) {\n        intervalScaleProto$1.niceExtent.call(this, opt);\n\n        var originalScale = this._originalScale;\n        originalScale.__fixMin = opt.fixMin;\n        originalScale.__fixMax = opt.fixMax;\n    }\n\n});\n\neach$1(['contain', 'normalize'], function (methodName) {\n    LogScale.prototype[methodName] = function (val) {\n        val = mathLog(val) / mathLog(this.base);\n        return scaleProto$1[methodName].call(this, val);\n    };\n});\n\nLogScale.create = function () {\n    return new LogScale();\n};\n\nfunction fixRoundingError(val, originalVal) {\n    return roundingErrorFix(val, getPrecisionSafe$1(originalVal));\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Get axis scale extent before niced.\n * Item of returned array can only be number (including Infinity and NaN).\n */\nfunction getScaleExtent(scale, model) {\n    var scaleType = scale.type;\n\n    var min = model.getMin();\n    var max = model.getMax();\n    var fixMin = min != null;\n    var fixMax = max != null;\n    var originalExtent = scale.getExtent();\n\n    var axisDataLen;\n    var boundaryGap;\n    var span;\n    if (scaleType === 'ordinal') {\n        axisDataLen = model.getCategories().length;\n    }\n    else {\n        boundaryGap = model.get('boundaryGap');\n        if (!isArray(boundaryGap)) {\n            boundaryGap = [boundaryGap || 0, boundaryGap || 0];\n        }\n        if (typeof boundaryGap[0] === 'boolean') {\n            if (__DEV__) {\n                console.warn('Boolean type for boundaryGap is only '\n                    + 'allowed for ordinal axis. Please use string in '\n                    + 'percentage instead, e.g., \"20%\". Currently, '\n                    + 'boundaryGap is set to be 0.');\n            }\n            boundaryGap = [0, 0];\n        }\n        boundaryGap[0] = parsePercent$1(boundaryGap[0], 1);\n        boundaryGap[1] = parsePercent$1(boundaryGap[1], 1);\n        span = (originalExtent[1] - originalExtent[0])\n            || Math.abs(originalExtent[0]);\n    }\n\n    // Notice: When min/max is not set (that is, when there are null/undefined,\n    // which is the most common case), these cases should be ensured:\n    // (1) For 'ordinal', show all axis.data.\n    // (2) For others:\n    //      + `boundaryGap` is applied (if min/max set, boundaryGap is\n    //      disabled).\n    //      + If `needCrossZero`, min/max should be zero, otherwise, min/max should\n    //      be the result that originalExtent enlarged by boundaryGap.\n    // (3) If no data, it should be ensured that `scale.setBlank` is set.\n\n    // FIXME\n    // (1) When min/max is 'dataMin' or 'dataMax', should boundaryGap be able to used?\n    // (2) When `needCrossZero` and all data is positive/negative, should it be ensured\n    // that the results processed by boundaryGap are positive/negative?\n\n    if (min == null) {\n        min = scaleType === 'ordinal'\n            ? (axisDataLen ? 0 : NaN)\n            : originalExtent[0] - boundaryGap[0] * span;\n    }\n    if (max == null) {\n        max = scaleType === 'ordinal'\n            ? (axisDataLen ? axisDataLen - 1 : NaN)\n            : originalExtent[1] + boundaryGap[1] * span;\n    }\n\n    if (min === 'dataMin') {\n        min = originalExtent[0];\n    }\n    else if (typeof min === 'function') {\n        min = min({\n            min: originalExtent[0],\n            max: originalExtent[1]\n        });\n    }\n\n    if (max === 'dataMax') {\n        max = originalExtent[1];\n    }\n    else if (typeof max === 'function') {\n        max = max({\n            min: originalExtent[0],\n            max: originalExtent[1]\n        });\n    }\n\n    (min == null || !isFinite(min)) && (min = NaN);\n    (max == null || !isFinite(max)) && (max = NaN);\n\n    scale.setBlank(\n        eqNaN(min)\n        || eqNaN(max)\n        || (scaleType === 'ordinal' && !scale.getOrdinalMeta().categories.length)\n    );\n\n    // Evaluate if axis needs cross zero\n    if (model.getNeedCrossZero()) {\n        // Axis is over zero and min is not set\n        if (min > 0 && max > 0 && !fixMin) {\n            min = 0;\n        }\n        // Axis is under zero and max is not set\n        if (min < 0 && max < 0 && !fixMax) {\n            max = 0;\n        }\n    }\n\n    // If bars are placed on a base axis of type time or interval account for axis boundary overflow and current axis\n    // is base axis\n    // FIXME\n    // (1) Consider support value axis, where below zero and axis `onZero` should be handled properly.\n    // (2) Refactor the logic with `barGrid`. Is it not need to `makeBarWidthAndOffsetInfo` twice with different extent?\n    //     Should not depend on series type `bar`?\n    // (3) Fix that might overlap when using dataZoom.\n    // (4) Consider other chart types using `barGrid`?\n    // See #6728, #4862, `test/bar-overflow-time-plot.html`\n    var ecModel = model.ecModel;\n    if (ecModel && (scaleType === 'time' /*|| scaleType === 'interval' */)) {\n        var barSeriesModels = prepareLayoutBarSeries('bar', ecModel);\n        var isBaseAxisAndHasBarSeries;\n\n        each$1(barSeriesModels, function (seriesModel) {\n            isBaseAxisAndHasBarSeries |= seriesModel.getBaseAxis() === model.axis;\n        });\n\n        if (isBaseAxisAndHasBarSeries) {\n            // Calculate placement of bars on axis\n            var barWidthAndOffset = makeColumnLayout(barSeriesModels);\n\n            // Adjust axis min and max to account for overflow\n            var adjustedScale = adjustScaleForOverflow(min, max, model, barWidthAndOffset);\n            min = adjustedScale.min;\n            max = adjustedScale.max;\n        }\n    }\n\n    return [min, max];\n}\n\nfunction adjustScaleForOverflow(min, max, model, barWidthAndOffset) {\n\n    // Get Axis Length\n    var axisExtent = model.axis.getExtent();\n    var axisLength = axisExtent[1] - axisExtent[0];\n\n    // Get bars on current base axis and calculate min and max overflow\n    var barsOnCurrentAxis = retrieveColumnLayout(barWidthAndOffset, model.axis);\n    if (barsOnCurrentAxis === undefined) {\n        return {min: min, max: max};\n    }\n\n    var minOverflow = Infinity;\n    each$1(barsOnCurrentAxis, function (item) {\n        minOverflow = Math.min(item.offset, minOverflow);\n    });\n    var maxOverflow = -Infinity;\n    each$1(barsOnCurrentAxis, function (item) {\n        maxOverflow = Math.max(item.offset + item.width, maxOverflow);\n    });\n    minOverflow = Math.abs(minOverflow);\n    maxOverflow = Math.abs(maxOverflow);\n    var totalOverFlow = minOverflow + maxOverflow;\n\n    // Calulate required buffer based on old range and overflow\n    var oldRange = max - min;\n    var oldRangePercentOfNew = (1 - (minOverflow + maxOverflow) / axisLength);\n    var overflowBuffer = ((oldRange / oldRangePercentOfNew) - oldRange);\n\n    max += overflowBuffer * (maxOverflow / totalOverFlow);\n    min -= overflowBuffer * (minOverflow / totalOverFlow);\n\n    return {min: min, max: max};\n}\n\nfunction niceScaleExtent(scale, model) {\n    var extent = getScaleExtent(scale, model);\n    var fixMin = model.getMin() != null;\n    var fixMax = model.getMax() != null;\n    var splitNumber = model.get('splitNumber');\n\n    if (scale.type === 'log') {\n        scale.base = model.get('logBase');\n    }\n\n    var scaleType = scale.type;\n    scale.setExtent(extent[0], extent[1]);\n    scale.niceExtent({\n        splitNumber: splitNumber,\n        fixMin: fixMin,\n        fixMax: fixMax,\n        minInterval: (scaleType === 'interval' || scaleType === 'time')\n            ? model.get('minInterval') : null,\n        maxInterval: (scaleType === 'interval' || scaleType === 'time')\n            ? model.get('maxInterval') : null\n    });\n\n    // If some one specified the min, max. And the default calculated interval\n    // is not good enough. He can specify the interval. It is often appeared\n    // in angle axis with angle 0 - 360. Interval calculated in interval scale is hard\n    // to be 60.\n    // FIXME\n    var interval = model.get('interval');\n    if (interval != null) {\n        scale.setInterval && scale.setInterval(interval);\n    }\n}\n\n/**\n * @param {module:echarts/model/Model} model\n * @param {string} [axisType] Default retrieve from model.type\n * @return {module:echarts/scale/*}\n */\nfunction createScaleByModel(model, axisType) {\n    axisType = axisType || model.get('type');\n    if (axisType) {\n        switch (axisType) {\n            // Buildin scale\n            case 'category':\n                return new OrdinalScale(\n                    model.getOrdinalMeta\n                        ? model.getOrdinalMeta()\n                        : model.getCategories(),\n                    [Infinity, -Infinity]\n                );\n            case 'value':\n                return new IntervalScale();\n            // Extended scale, like time and log\n            default:\n                return (Scale.getClass(axisType) || IntervalScale).create(model);\n        }\n    }\n}\n\n/**\n * Check if the axis corss 0\n */\nfunction ifAxisCrossZero(axis) {\n    var dataExtent = axis.scale.getExtent();\n    var min = dataExtent[0];\n    var max = dataExtent[1];\n    return !((min > 0 && max > 0) || (min < 0 && max < 0));\n}\n\n/**\n * @param {module:echarts/coord/Axis} axis\n * @return {Function} Label formatter function.\n *         param: {number} tickValue,\n *         param: {number} idx, the index in all ticks.\n *                         If category axis, this param is not requied.\n *         return: {string} label string.\n */\nfunction makeLabelFormatter(axis) {\n    var labelFormatter = axis.getLabelModel().get('formatter');\n    var categoryTickStart = axis.type === 'category' ? axis.scale.getExtent()[0] : null;\n\n    if (typeof labelFormatter === 'string') {\n        labelFormatter = (function (tpl) {\n            return function (val) {\n                // For category axis, get raw value; for numeric axis,\n                // get foramtted label like '1,333,444'.\n                val = axis.scale.getLabel(val);\n                return tpl.replace('{value}', val != null ? val : '');\n            };\n        })(labelFormatter);\n        // Consider empty array\n        return labelFormatter;\n    }\n    else if (typeof labelFormatter === 'function') {\n        return function (tickValue, idx) {\n            // The original intention of `idx` is \"the index of the tick in all ticks\".\n            // But the previous implementation of category axis do not consider the\n            // `axisLabel.interval`, which cause that, for example, the `interval` is\n            // `1`, then the ticks \"name5\", \"name7\", \"name9\" are displayed, where the\n            // corresponding `idx` are `0`, `2`, `4`, but not `0`, `1`, `2`. So we keep\n            // the definition here for back compatibility.\n            if (categoryTickStart != null) {\n                idx = tickValue - categoryTickStart;\n            }\n            return labelFormatter(getAxisRawValue(axis, tickValue), idx);\n        };\n    }\n    else {\n        return function (tick) {\n            return axis.scale.getLabel(tick);\n        };\n    }\n}\n\nfunction getAxisRawValue(axis, value) {\n    // In category axis with data zoom, tick is not the original\n    // index of axis.data. So tick should not be exposed to user\n    // in category axis.\n    return axis.type === 'category' ? axis.scale.getLabel(value) : value;\n}\n\n/**\n * @param {module:echarts/coord/Axis} axis\n * @return {module:zrender/core/BoundingRect} Be null/undefined if no labels.\n */\nfunction estimateLabelUnionRect(axis) {\n    var axisModel = axis.model;\n    var scale = axis.scale;\n\n    if (!axisModel.get('axisLabel.show') || scale.isBlank()) {\n        return;\n    }\n\n    var isCategory = axis.type === 'category';\n\n    var realNumberScaleTicks;\n    var tickCount;\n    var categoryScaleExtent = scale.getExtent();\n\n    // Optimize for large category data, avoid call `getTicks()`.\n    if (isCategory) {\n        tickCount = scale.count();\n    }\n    else {\n        realNumberScaleTicks = scale.getTicks();\n        tickCount = realNumberScaleTicks.length;\n    }\n\n    var axisLabelModel = axis.getLabelModel();\n    var labelFormatter = makeLabelFormatter(axis);\n\n    var rect;\n    var step = 1;\n    // Simple optimization for large amount of labels\n    if (tickCount > 40) {\n        step = Math.ceil(tickCount / 40);\n    }\n    for (var i = 0; i < tickCount; i += step) {\n        var tickValue = realNumberScaleTicks ? realNumberScaleTicks[i] : categoryScaleExtent[0] + i;\n        var label = labelFormatter(tickValue);\n        var unrotatedSingleRect = axisLabelModel.getTextRect(label);\n        var singleRect = rotateTextRect(unrotatedSingleRect, axisLabelModel.get('rotate') || 0);\n\n        rect ? rect.union(singleRect) : (rect = singleRect);\n    }\n\n    return rect;\n}\n\nfunction rotateTextRect(textRect, rotate) {\n    var rotateRadians = rotate * Math.PI / 180;\n    var boundingBox = textRect.plain();\n    var beforeWidth = boundingBox.width;\n    var beforeHeight = boundingBox.height;\n    var afterWidth = beforeWidth * Math.cos(rotateRadians) + beforeHeight * Math.sin(rotateRadians);\n    var afterHeight = beforeWidth * Math.sin(rotateRadians) + beforeHeight * Math.cos(rotateRadians);\n    var rotatedRect = new BoundingRect(boundingBox.x, boundingBox.y, afterWidth, afterHeight);\n\n    return rotatedRect;\n}\n\n/**\n * @param {module:echarts/src/model/Model} model axisLabelModel or axisTickModel\n * @return {number|String} Can be null|'auto'|number|function\n */\nfunction getOptionCategoryInterval(model) {\n    var interval = model.get('interval');\n    return interval == null ? 'auto' : interval;\n}\n\n/**\n * Set `categoryInterval` as 0 implicitly indicates that\n * show all labels reguardless of overlap.\n * @param {Object} axis axisModel.axis\n * @return {boolean}\n */\nfunction shouldShowAllLabels(axis) {\n    return axis.type === 'category'\n        && getOptionCategoryInterval(axis.getLabelModel()) === 0;\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n// import * as axisHelper from './axisHelper';\n\nvar axisModelCommonMixin = {\n\n    /**\n     * @param {boolean} origin\n     * @return {number|string} min value or 'dataMin' or null/undefined (means auto) or NaN\n     */\n    getMin: function (origin) {\n        var option = this.option;\n        var min = (!origin && option.rangeStart != null)\n            ? option.rangeStart : option.min;\n\n        if (this.axis\n            && min != null\n            && min !== 'dataMin'\n            && typeof min !== 'function'\n            && !eqNaN(min)\n        ) {\n            min = this.axis.scale.parse(min);\n        }\n        return min;\n    },\n\n    /**\n     * @param {boolean} origin\n     * @return {number|string} max value or 'dataMax' or null/undefined (means auto) or NaN\n     */\n    getMax: function (origin) {\n        var option = this.option;\n        var max = (!origin && option.rangeEnd != null)\n            ? option.rangeEnd : option.max;\n\n        if (this.axis\n            && max != null\n            && max !== 'dataMax'\n            && typeof max !== 'function'\n            && !eqNaN(max)\n        ) {\n            max = this.axis.scale.parse(max);\n        }\n        return max;\n    },\n\n    /**\n     * @return {boolean}\n     */\n    getNeedCrossZero: function () {\n        var option = this.option;\n        return (option.rangeStart != null || option.rangeEnd != null)\n            ? false : !option.scale;\n    },\n\n    /**\n     * Should be implemented by each axis model if necessary.\n     * @return {module:echarts/model/Component} coordinate system model\n     */\n    getCoordSysModel: noop,\n\n    /**\n     * @param {number} rangeStart Can only be finite number or null/undefined or NaN.\n     * @param {number} rangeEnd Can only be finite number or null/undefined or NaN.\n     */\n    setRange: function (rangeStart, rangeEnd) {\n        this.option.rangeStart = rangeStart;\n        this.option.rangeEnd = rangeEnd;\n    },\n\n    /**\n     * Reset range\n     */\n    resetRange: function () {\n        // rangeStart and rangeEnd is readonly.\n        this.option.rangeStart = this.option.rangeEnd = null;\n    }\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n// Symbol factory\n\n/**\n * Triangle shape\n * @inner\n */\nvar Triangle = extendShape({\n    type: 'triangle',\n    shape: {\n        cx: 0,\n        cy: 0,\n        width: 0,\n        height: 0\n    },\n    buildPath: function (path, shape) {\n        var cx = shape.cx;\n        var cy = shape.cy;\n        var width = shape.width / 2;\n        var height = shape.height / 2;\n        path.moveTo(cx, cy - height);\n        path.lineTo(cx + width, cy + height);\n        path.lineTo(cx - width, cy + height);\n        path.closePath();\n    }\n});\n\n/**\n * Diamond shape\n * @inner\n */\nvar Diamond = extendShape({\n    type: 'diamond',\n    shape: {\n        cx: 0,\n        cy: 0,\n        width: 0,\n        height: 0\n    },\n    buildPath: function (path, shape) {\n        var cx = shape.cx;\n        var cy = shape.cy;\n        var width = shape.width / 2;\n        var height = shape.height / 2;\n        path.moveTo(cx, cy - height);\n        path.lineTo(cx + width, cy);\n        path.lineTo(cx, cy + height);\n        path.lineTo(cx - width, cy);\n        path.closePath();\n    }\n});\n\n/**\n * Pin shape\n * @inner\n */\nvar Pin = extendShape({\n    type: 'pin',\n    shape: {\n        // x, y on the cusp\n        x: 0,\n        y: 0,\n        width: 0,\n        height: 0\n    },\n\n    buildPath: function (path, shape) {\n        var x = shape.x;\n        var y = shape.y;\n        var w = shape.width / 5 * 3;\n        // Height must be larger than width\n        var h = Math.max(w, shape.height);\n        var r = w / 2;\n\n        // Dist on y with tangent point and circle center\n        var dy = r * r / (h - r);\n        var cy = y - h + r + dy;\n        var angle = Math.asin(dy / r);\n        // Dist on x with tangent point and circle center\n        var dx = Math.cos(angle) * r;\n\n        var tanX = Math.sin(angle);\n        var tanY = Math.cos(angle);\n\n        var cpLen = r * 0.6;\n        var cpLen2 = r * 0.7;\n\n        path.moveTo(x - dx, cy + dy);\n\n        path.arc(\n            x, cy, r,\n            Math.PI - angle,\n            Math.PI * 2 + angle\n        );\n        path.bezierCurveTo(\n            x + dx - tanX * cpLen, cy + dy + tanY * cpLen,\n            x, y - cpLen2,\n            x, y\n        );\n        path.bezierCurveTo(\n            x, y - cpLen2,\n            x - dx + tanX * cpLen, cy + dy + tanY * cpLen,\n            x - dx, cy + dy\n        );\n        path.closePath();\n    }\n});\n\n/**\n * Arrow shape\n * @inner\n */\nvar Arrow = extendShape({\n\n    type: 'arrow',\n\n    shape: {\n        x: 0,\n        y: 0,\n        width: 0,\n        height: 0\n    },\n\n    buildPath: function (ctx, shape) {\n        var height = shape.height;\n        var width = shape.width;\n        var x = shape.x;\n        var y = shape.y;\n        var dx = width / 3 * 2;\n        ctx.moveTo(x, y);\n        ctx.lineTo(x + dx, y + height);\n        ctx.lineTo(x, y + height / 4 * 3);\n        ctx.lineTo(x - dx, y + height);\n        ctx.lineTo(x, y);\n        ctx.closePath();\n    }\n});\n\n/**\n * Map of path contructors\n * @type {Object.<string, module:zrender/graphic/Path>}\n */\nvar symbolCtors = {\n\n    line: Line,\n\n    rect: Rect,\n\n    roundRect: Rect,\n\n    square: Rect,\n\n    circle: Circle,\n\n    diamond: Diamond,\n\n    pin: Pin,\n\n    arrow: Arrow,\n\n    triangle: Triangle\n};\n\nvar symbolShapeMakers = {\n\n    line: function (x, y, w, h, shape) {\n        // FIXME\n        shape.x1 = x;\n        shape.y1 = y + h / 2;\n        shape.x2 = x + w;\n        shape.y2 = y + h / 2;\n    },\n\n    rect: function (x, y, w, h, shape) {\n        shape.x = x;\n        shape.y = y;\n        shape.width = w;\n        shape.height = h;\n    },\n\n    roundRect: function (x, y, w, h, shape) {\n        shape.x = x;\n        shape.y = y;\n        shape.width = w;\n        shape.height = h;\n        shape.r = Math.min(w, h) / 4;\n    },\n\n    square: function (x, y, w, h, shape) {\n        var size = Math.min(w, h);\n        shape.x = x;\n        shape.y = y;\n        shape.width = size;\n        shape.height = size;\n    },\n\n    circle: function (x, y, w, h, shape) {\n        // Put circle in the center of square\n        shape.cx = x + w / 2;\n        shape.cy = y + h / 2;\n        shape.r = Math.min(w, h) / 2;\n    },\n\n    diamond: function (x, y, w, h, shape) {\n        shape.cx = x + w / 2;\n        shape.cy = y + h / 2;\n        shape.width = w;\n        shape.height = h;\n    },\n\n    pin: function (x, y, w, h, shape) {\n        shape.x = x + w / 2;\n        shape.y = y + h / 2;\n        shape.width = w;\n        shape.height = h;\n    },\n\n    arrow: function (x, y, w, h, shape) {\n        shape.x = x + w / 2;\n        shape.y = y + h / 2;\n        shape.width = w;\n        shape.height = h;\n    },\n\n    triangle: function (x, y, w, h, shape) {\n        shape.cx = x + w / 2;\n        shape.cy = y + h / 2;\n        shape.width = w;\n        shape.height = h;\n    }\n};\n\nvar symbolBuildProxies = {};\neach$1(symbolCtors, function (Ctor, name) {\n    symbolBuildProxies[name] = new Ctor();\n});\n\nvar SymbolClz = extendShape({\n\n    type: 'symbol',\n\n    shape: {\n        symbolType: '',\n        x: 0,\n        y: 0,\n        width: 0,\n        height: 0\n    },\n\n    calculateTextPosition: function (out, style, rect) {\n        var res = calculateTextPosition(out, style, rect);\n        var shape = this.shape;\n        if (shape && shape.symbolType === 'pin' && style.textPosition === 'inside') {\n            res.y = rect.y + rect.height * 0.4;\n        }\n        return res;\n    },\n\n    buildPath: function (ctx, shape, inBundle) {\n        var symbolType = shape.symbolType;\n        if (symbolType !== 'none') {\n            var proxySymbol = symbolBuildProxies[symbolType];\n            if (!proxySymbol) {\n                // Default rect\n                symbolType = 'rect';\n                proxySymbol = symbolBuildProxies[symbolType];\n            }\n            symbolShapeMakers[symbolType](\n                shape.x, shape.y, shape.width, shape.height, proxySymbol.shape\n            );\n            proxySymbol.buildPath(ctx, proxySymbol.shape, inBundle);\n        }\n    }\n});\n\n// Provide setColor helper method to avoid determine if set the fill or stroke outside\nfunction symbolPathSetColor(color, innerColor) {\n    if (this.type !== 'image') {\n        var symbolStyle = this.style;\n        var symbolShape = this.shape;\n        if (symbolShape && symbolShape.symbolType === 'line') {\n            symbolStyle.stroke = color;\n        }\n        else if (this.__isEmptyBrush) {\n            symbolStyle.stroke = color;\n            symbolStyle.fill = innerColor || '#fff';\n        }\n        else {\n            // FIXME 判断图形默认是填充还是描边，使用 onlyStroke ?\n            symbolStyle.fill && (symbolStyle.fill = color);\n            symbolStyle.stroke && (symbolStyle.stroke = color);\n        }\n        this.dirty(false);\n    }\n}\n\n/**\n * Create a symbol element with given symbol configuration: shape, x, y, width, height, color\n * @param {string} symbolType\n * @param {number} x\n * @param {number} y\n * @param {number} w\n * @param {number} h\n * @param {string} color\n * @param {boolean} [keepAspect=false] whether to keep the ratio of w/h,\n *                            for path and image only.\n */\nfunction createSymbol(symbolType, x, y, w, h, color, keepAspect) {\n    // TODO Support image object, DynamicImage.\n\n    var isEmpty = symbolType.indexOf('empty') === 0;\n    if (isEmpty) {\n        symbolType = symbolType.substr(5, 1).toLowerCase() + symbolType.substr(6);\n    }\n    var symbolPath;\n\n    if (symbolType.indexOf('image://') === 0) {\n        symbolPath = makeImage(\n            symbolType.slice(8),\n            new BoundingRect(x, y, w, h),\n            keepAspect ? 'center' : 'cover'\n        );\n    }\n    else if (symbolType.indexOf('path://') === 0) {\n        symbolPath = makePath(\n            symbolType.slice(7),\n            {},\n            new BoundingRect(x, y, w, h),\n            keepAspect ? 'center' : 'cover'\n        );\n    }\n    else {\n        symbolPath = new SymbolClz({\n            shape: {\n                symbolType: symbolType,\n                x: x,\n                y: y,\n                width: w,\n                height: h\n            }\n        });\n    }\n\n    symbolPath.__isEmptyBrush = isEmpty;\n\n    symbolPath.setColor = symbolPathSetColor;\n\n    symbolPath.setColor(color);\n\n    return symbolPath;\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n// import createGraphFromNodeEdge from './chart/helper/createGraphFromNodeEdge';\n/**\n * Create a muti dimension List structure from seriesModel.\n * @param  {module:echarts/model/Model} seriesModel\n * @return {module:echarts/data/List} list\n */\nfunction createList(seriesModel) {\n    return createListFromArray(seriesModel.getSource(), seriesModel);\n}\n\nvar dataStack$1 = {\n    isDimensionStacked: isDimensionStacked,\n    enableDataStack: enableDataStack,\n    getStackedDimension: getStackedDimension\n};\n\n/**\n * Create scale\n * @param {Array.<number>} dataExtent\n * @param {Object|module:echarts/Model} option\n */\nfunction createScale(dataExtent, option) {\n    var axisModel = option;\n    if (!Model.isInstance(option)) {\n        axisModel = new Model(option);\n        mixin(axisModel, axisModelCommonMixin);\n    }\n\n    var scale = createScaleByModel(axisModel);\n    scale.setExtent(dataExtent[0], dataExtent[1]);\n\n    niceScaleExtent(scale, axisModel);\n    return scale;\n}\n\n/**\n * Mixin common methods to axis model,\n *\n * Inlcude methods\n * `getFormattedLabels() => Array.<string>`\n * `getCategories() => Array.<string>`\n * `getMin(origin: boolean) => number`\n * `getMax(origin: boolean) => number`\n * `getNeedCrossZero() => boolean`\n * `setRange(start: number, end: number)`\n * `resetRange()`\n */\nfunction mixinAxisModelCommonMethods(Model$$1) {\n    mixin(Model$$1, axisModelCommonMixin);\n}\n\nvar helper = (Object.freeze || Object)({\n\tcreateList: createList,\n\tgetLayoutRect: getLayoutRect,\n\tdataStack: dataStack$1,\n\tcreateScale: createScale,\n\tmixinAxisModelCommonMethods: mixinAxisModelCommonMethods,\n\tcompleteDimensions: completeDimensions,\n\tcreateDimensions: createDimensions,\n\tcreateSymbol: createSymbol\n});\n\nvar EPSILON$3 = 1e-8;\n\nfunction isAroundEqual$1(a, b) {\n    return Math.abs(a - b) < EPSILON$3;\n}\n\nfunction contain$1(points, x, y) {\n    var w = 0;\n    var p = points[0];\n\n    if (!p) {\n        return false;\n    }\n\n    for (var i = 1; i < points.length; i++) {\n        var p2 = points[i];\n        w += windingLine(p[0], p[1], p2[0], p2[1], x, y);\n        p = p2;\n    }\n\n    // Close polygon\n    var p0 = points[0];\n    if (!isAroundEqual$1(p[0], p0[0]) || !isAroundEqual$1(p[1], p0[1])) {\n        w += windingLine(p[0], p[1], p0[0], p0[1], x, y);\n    }\n\n    return w !== 0;\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * @module echarts/coord/geo/Region\n */\n\n/**\n * @param {string|Region} name\n * @param {Array} geometries\n * @param {Array.<number>} cp\n */\nfunction Region(name, geometries, cp) {\n\n    /**\n     * @type {string}\n     * @readOnly\n     */\n    this.name = name;\n\n    /**\n     * @type {Array.<Array>}\n     * @readOnly\n     */\n    this.geometries = geometries;\n\n    if (!cp) {\n        var rect = this.getBoundingRect();\n        cp = [\n            rect.x + rect.width / 2,\n            rect.y + rect.height / 2\n        ];\n    }\n    else {\n        cp = [cp[0], cp[1]];\n    }\n    /**\n     * @type {Array.<number>}\n     */\n    this.center = cp;\n}\n\nRegion.prototype = {\n\n    constructor: Region,\n\n    properties: null,\n\n    /**\n     * @return {module:zrender/core/BoundingRect}\n     */\n    getBoundingRect: function () {\n        var rect = this._rect;\n        if (rect) {\n            return rect;\n        }\n\n        var MAX_NUMBER = Number.MAX_VALUE;\n        var min$$1 = [MAX_NUMBER, MAX_NUMBER];\n        var max$$1 = [-MAX_NUMBER, -MAX_NUMBER];\n        var min2 = [];\n        var max2 = [];\n        var geometries = this.geometries;\n        for (var i = 0; i < geometries.length; i++) {\n            // Only support polygon\n            if (geometries[i].type !== 'polygon') {\n                continue;\n            }\n            // Doesn't consider hole\n            var exterior = geometries[i].exterior;\n            fromPoints(exterior, min2, max2);\n            min(min$$1, min$$1, min2);\n            max(max$$1, max$$1, max2);\n        }\n        // No data\n        if (i === 0) {\n            min$$1[0] = min$$1[1] = max$$1[0] = max$$1[1] = 0;\n        }\n\n        return (this._rect = new BoundingRect(\n            min$$1[0], min$$1[1], max$$1[0] - min$$1[0], max$$1[1] - min$$1[1]\n        ));\n    },\n\n    /**\n     * @param {<Array.<number>} coord\n     * @return {boolean}\n     */\n    contain: function (coord) {\n        var rect = this.getBoundingRect();\n        var geometries = this.geometries;\n        if (!rect.contain(coord[0], coord[1])) {\n            return false;\n        }\n        loopGeo: for (var i = 0, len$$1 = geometries.length; i < len$$1; i++) {\n            // Only support polygon.\n            if (geometries[i].type !== 'polygon') {\n                continue;\n            }\n            var exterior = geometries[i].exterior;\n            var interiors = geometries[i].interiors;\n            if (contain$1(exterior, coord[0], coord[1])) {\n                // Not in the region if point is in the hole.\n                for (var k = 0; k < (interiors ? interiors.length : 0); k++) {\n                    if (contain$1(interiors[k])) {\n                        continue loopGeo;\n                    }\n                }\n                return true;\n            }\n        }\n        return false;\n    },\n\n    transformTo: function (x, y, width, height) {\n        var rect = this.getBoundingRect();\n        var aspect = rect.width / rect.height;\n        if (!width) {\n            width = aspect * height;\n        }\n        else if (!height) {\n            height = width / aspect;\n        }\n        var target = new BoundingRect(x, y, width, height);\n        var transform = rect.calculateTransform(target);\n        var geometries = this.geometries;\n        for (var i = 0; i < geometries.length; i++) {\n            // Only support polygon.\n            if (geometries[i].type !== 'polygon') {\n                continue;\n            }\n            var exterior = geometries[i].exterior;\n            var interiors = geometries[i].interiors;\n            for (var p = 0; p < exterior.length; p++) {\n                applyTransform(exterior[p], exterior[p], transform);\n            }\n            for (var h = 0; h < (interiors ? interiors.length : 0); h++) {\n                for (var p = 0; p < interiors[h].length; p++) {\n                    applyTransform(interiors[h][p], interiors[h][p], transform);\n                }\n            }\n        }\n        rect = this._rect;\n        rect.copy(target);\n        // Update center\n        this.center = [\n            rect.x + rect.width / 2,\n            rect.y + rect.height / 2\n        ];\n    },\n\n    cloneShallow: function (name) {\n        name == null && (name = this.name);\n        var newRegion = new Region(name, this.geometries, this.center);\n        newRegion._rect = this._rect;\n        newRegion.transformTo = null; // Simply avoid to be called.\n        return newRegion;\n    }\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Parse and decode geo json\n * @module echarts/coord/geo/parseGeoJson\n */\n\nfunction decode(json) {\n    if (!json.UTF8Encoding) {\n        return json;\n    }\n    var encodeScale = json.UTF8Scale;\n    if (encodeScale == null) {\n        encodeScale = 1024;\n    }\n\n    var features = json.features;\n\n    for (var f = 0; f < features.length; f++) {\n        var feature = features[f];\n        var geometry = feature.geometry;\n        var coordinates = geometry.coordinates;\n        var encodeOffsets = geometry.encodeOffsets;\n\n        for (var c = 0; c < coordinates.length; c++) {\n            var coordinate = coordinates[c];\n\n            if (geometry.type === 'Polygon') {\n                coordinates[c] = decodePolygon(\n                    coordinate,\n                    encodeOffsets[c],\n                    encodeScale\n                );\n            }\n            else if (geometry.type === 'MultiPolygon') {\n                for (var c2 = 0; c2 < coordinate.length; c2++) {\n                    var polygon = coordinate[c2];\n                    coordinate[c2] = decodePolygon(\n                        polygon,\n                        encodeOffsets[c][c2],\n                        encodeScale\n                    );\n                }\n            }\n        }\n    }\n    // Has been decoded\n    json.UTF8Encoding = false;\n    return json;\n}\n\nfunction decodePolygon(coordinate, encodeOffsets, encodeScale) {\n    var result = [];\n    var prevX = encodeOffsets[0];\n    var prevY = encodeOffsets[1];\n\n    for (var i = 0; i < coordinate.length; i += 2) {\n        var x = coordinate.charCodeAt(i) - 64;\n        var y = coordinate.charCodeAt(i + 1) - 64;\n        // ZigZag decoding\n        x = (x >> 1) ^ (-(x & 1));\n        y = (y >> 1) ^ (-(y & 1));\n        // Delta deocding\n        x += prevX;\n        y += prevY;\n\n        prevX = x;\n        prevY = y;\n        // Dequantize\n        result.push([x / encodeScale, y / encodeScale]);\n    }\n\n    return result;\n}\n\n/**\n * @alias module:echarts/coord/geo/parseGeoJson\n * @param {Object} geoJson\n * @return {module:zrender/container/Group}\n */\nvar parseGeoJson$1 = function (geoJson) {\n\n    decode(geoJson);\n\n    return map(filter(geoJson.features, function (featureObj) {\n        // Output of mapshaper may have geometry null\n        return featureObj.geometry\n            && featureObj.properties\n            && featureObj.geometry.coordinates.length > 0;\n    }), function (featureObj) {\n        var properties = featureObj.properties;\n        var geo = featureObj.geometry;\n\n        var coordinates = geo.coordinates;\n\n        var geometries = [];\n        if (geo.type === 'Polygon') {\n            geometries.push({\n                type: 'polygon',\n                // According to the GeoJSON specification.\n                // First must be exterior, and the rest are all interior(holes).\n                exterior: coordinates[0],\n                interiors: coordinates.slice(1)\n            });\n        }\n        if (geo.type === 'MultiPolygon') {\n            each$1(coordinates, function (item) {\n                if (item[0]) {\n                    geometries.push({\n                        type: 'polygon',\n                        exterior: item[0],\n                        interiors: item.slice(1)\n                    });\n                }\n            });\n        }\n\n        var region = new Region(\n            properties.name,\n            geometries,\n            properties.cp\n        );\n        region.properties = properties;\n        return region;\n    });\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar inner$6 = makeInner();\n\n/**\n * @param {module:echats/coord/Axis} axis\n * @return {Object} {\n *     labels: [{\n *         formattedLabel: string,\n *         rawLabel: string,\n *         tickValue: number\n *     }, ...],\n *     labelCategoryInterval: number\n * }\n */\nfunction createAxisLabels(axis) {\n    // Only ordinal scale support tick interval\n    return axis.type === 'category'\n        ? makeCategoryLabels(axis)\n        : makeRealNumberLabels(axis);\n}\n\n/**\n * @param {module:echats/coord/Axis} axis\n * @param {module:echarts/model/Model} tickModel For example, can be axisTick, splitLine, splitArea.\n * @return {Object} {\n *     ticks: Array.<number>\n *     tickCategoryInterval: number\n * }\n */\nfunction createAxisTicks(axis, tickModel) {\n    // Only ordinal scale support tick interval\n    return axis.type === 'category'\n        ? makeCategoryTicks(axis, tickModel)\n        : {ticks: axis.scale.getTicks()};\n}\n\nfunction makeCategoryLabels(axis) {\n    var labelModel = axis.getLabelModel();\n    var result = makeCategoryLabelsActually(axis, labelModel);\n\n    return (!labelModel.get('show') || axis.scale.isBlank())\n        ? {labels: [], labelCategoryInterval: result.labelCategoryInterval}\n        : result;\n}\n\nfunction makeCategoryLabelsActually(axis, labelModel) {\n    var labelsCache = getListCache(axis, 'labels');\n    var optionLabelInterval = getOptionCategoryInterval(labelModel);\n    var result = listCacheGet(labelsCache, optionLabelInterval);\n\n    if (result) {\n        return result;\n    }\n\n    var labels;\n    var numericLabelInterval;\n\n    if (isFunction$1(optionLabelInterval)) {\n        labels = makeLabelsByCustomizedCategoryInterval(axis, optionLabelInterval);\n    }\n    else {\n        numericLabelInterval = optionLabelInterval === 'auto'\n            ? makeAutoCategoryInterval(axis) : optionLabelInterval;\n        labels = makeLabelsByNumericCategoryInterval(axis, numericLabelInterval);\n    }\n\n    // Cache to avoid calling interval function repeatly.\n    return listCacheSet(labelsCache, optionLabelInterval, {\n        labels: labels, labelCategoryInterval: numericLabelInterval\n    });\n}\n\nfunction makeCategoryTicks(axis, tickModel) {\n    var ticksCache = getListCache(axis, 'ticks');\n    var optionTickInterval = getOptionCategoryInterval(tickModel);\n    var result = listCacheGet(ticksCache, optionTickInterval);\n\n    if (result) {\n        return result;\n    }\n\n    var ticks;\n    var tickCategoryInterval;\n\n    // Optimize for the case that large category data and no label displayed,\n    // we should not return all ticks.\n    if (!tickModel.get('show') || axis.scale.isBlank()) {\n        ticks = [];\n    }\n\n    if (isFunction$1(optionTickInterval)) {\n        ticks = makeLabelsByCustomizedCategoryInterval(axis, optionTickInterval, true);\n    }\n    // Always use label interval by default despite label show. Consider this\n    // scenario, Use multiple grid with the xAxis sync, and only one xAxis shows\n    // labels. `splitLine` and `axisTick` should be consistent in this case.\n    else if (optionTickInterval === 'auto') {\n        var labelsResult = makeCategoryLabelsActually(axis, axis.getLabelModel());\n        tickCategoryInterval = labelsResult.labelCategoryInterval;\n        ticks = map(labelsResult.labels, function (labelItem) {\n            return labelItem.tickValue;\n        });\n    }\n    else {\n        tickCategoryInterval = optionTickInterval;\n        ticks = makeLabelsByNumericCategoryInterval(axis, tickCategoryInterval, true);\n    }\n\n    // Cache to avoid calling interval function repeatly.\n    return listCacheSet(ticksCache, optionTickInterval, {\n        ticks: ticks, tickCategoryInterval: tickCategoryInterval\n    });\n}\n\nfunction makeRealNumberLabels(axis) {\n    var ticks = axis.scale.getTicks();\n    var labelFormatter = makeLabelFormatter(axis);\n    return {\n        labels: map(ticks, function (tickValue, idx) {\n            return {\n                formattedLabel: labelFormatter(tickValue, idx),\n                rawLabel: axis.scale.getLabel(tickValue),\n                tickValue: tickValue\n            };\n        })\n    };\n}\n\n// Large category data calculation is performence sensitive, and ticks and label\n// probably be fetched by multiple times. So we cache the result.\n// axis is created each time during a ec process, so we do not need to clear cache.\nfunction getListCache(axis, prop) {\n    // Because key can be funciton, and cache size always be small, we use array cache.\n    return inner$6(axis)[prop] || (inner$6(axis)[prop] = []);\n}\n\nfunction listCacheGet(cache, key) {\n    for (var i = 0; i < cache.length; i++) {\n        if (cache[i].key === key) {\n            return cache[i].value;\n        }\n    }\n}\n\nfunction listCacheSet(cache, key, value) {\n    cache.push({key: key, value: value});\n    return value;\n}\n\nfunction makeAutoCategoryInterval(axis) {\n    var result = inner$6(axis).autoInterval;\n    return result != null\n        ? result\n        : (inner$6(axis).autoInterval = axis.calculateCategoryInterval());\n}\n\n/**\n * Calculate interval for category axis ticks and labels.\n * To get precise result, at least one of `getRotate` and `isHorizontal`\n * should be implemented in axis.\n */\nfunction calculateCategoryInterval(axis) {\n    var params = fetchAutoCategoryIntervalCalculationParams(axis);\n    var labelFormatter = makeLabelFormatter(axis);\n    var rotation = (params.axisRotate - params.labelRotate) / 180 * Math.PI;\n\n    var ordinalScale = axis.scale;\n    var ordinalExtent = ordinalScale.getExtent();\n    // Providing this method is for optimization:\n    // avoid generating a long array by `getTicks`\n    // in large category data case.\n    var tickCount = ordinalScale.count();\n\n    if (ordinalExtent[1] - ordinalExtent[0] < 1) {\n        return 0;\n    }\n\n    var step = 1;\n    // Simple optimization. Empirical value: tick count should less than 40.\n    if (tickCount > 40) {\n        step = Math.max(1, Math.floor(tickCount / 40));\n    }\n    var tickValue = ordinalExtent[0];\n    var unitSpan = axis.dataToCoord(tickValue + 1) - axis.dataToCoord(tickValue);\n    var unitW = Math.abs(unitSpan * Math.cos(rotation));\n    var unitH = Math.abs(unitSpan * Math.sin(rotation));\n\n    var maxW = 0;\n    var maxH = 0;\n\n    // Caution: Performance sensitive for large category data.\n    // Consider dataZoom, we should make appropriate step to avoid O(n) loop.\n    for (; tickValue <= ordinalExtent[1]; tickValue += step) {\n        var width = 0;\n        var height = 0;\n\n        // Not precise, do not consider align and vertical align\n        // and each distance from axis line yet.\n        var rect = getBoundingRect(\n            labelFormatter(tickValue), params.font, 'center', 'top'\n        );\n        // Magic number\n        width = rect.width * 1.3;\n        height = rect.height * 1.3;\n\n        // Min size, void long loop.\n        maxW = Math.max(maxW, width, 7);\n        maxH = Math.max(maxH, height, 7);\n    }\n\n    var dw = maxW / unitW;\n    var dh = maxH / unitH;\n    // 0/0 is NaN, 1/0 is Infinity.\n    isNaN(dw) && (dw = Infinity);\n    isNaN(dh) && (dh = Infinity);\n    var interval = Math.max(0, Math.floor(Math.min(dw, dh)));\n\n    var cache = inner$6(axis.model);\n    var lastAutoInterval = cache.lastAutoInterval;\n    var lastTickCount = cache.lastTickCount;\n\n    // Use cache to keep interval stable while moving zoom window,\n    // otherwise the calculated interval might jitter when the zoom\n    // window size is close to the interval-changing size.\n    if (lastAutoInterval != null\n        && lastTickCount != null\n        && Math.abs(lastAutoInterval - interval) <= 1\n        && Math.abs(lastTickCount - tickCount) <= 1\n        // Always choose the bigger one, otherwise the critical\n        // point is not the same when zooming in or zooming out.\n        && lastAutoInterval > interval\n    ) {\n        interval = lastAutoInterval;\n    }\n    // Only update cache if cache not used, otherwise the\n    // changing of interval is too insensitive.\n    else {\n        cache.lastTickCount = tickCount;\n        cache.lastAutoInterval = interval;\n    }\n\n    return interval;\n}\n\nfunction fetchAutoCategoryIntervalCalculationParams(axis) {\n    var labelModel = axis.getLabelModel();\n    return {\n        axisRotate: axis.getRotate\n            ? axis.getRotate()\n            : (axis.isHorizontal && !axis.isHorizontal())\n            ? 90\n            : 0,\n        labelRotate: labelModel.get('rotate') || 0,\n        font: labelModel.getFont()\n    };\n}\n\nfunction makeLabelsByNumericCategoryInterval(axis, categoryInterval, onlyTick) {\n    var labelFormatter = makeLabelFormatter(axis);\n    var ordinalScale = axis.scale;\n    var ordinalExtent = ordinalScale.getExtent();\n    var labelModel = axis.getLabelModel();\n    var result = [];\n\n    // TODO: axisType: ordinalTime, pick the tick from each month/day/year/...\n\n    var step = Math.max((categoryInterval || 0) + 1, 1);\n    var startTick = ordinalExtent[0];\n    var tickCount = ordinalScale.count();\n\n    // Calculate start tick based on zero if possible to keep label consistent\n    // while zooming and moving while interval > 0. Otherwise the selection\n    // of displayable ticks and symbols probably keep changing.\n    // 3 is empirical value.\n    if (startTick !== 0 && step > 1 && tickCount / step > 2) {\n        startTick = Math.round(Math.ceil(startTick / step) * step);\n    }\n\n    // (1) Only add min max label here but leave overlap checking\n    // to render stage, which also ensure the returned list\n    // suitable for splitLine and splitArea rendering.\n    // (2) Scales except category always contain min max label so\n    // do not need to perform this process.\n    var showAllLabel = shouldShowAllLabels(axis);\n    var includeMinLabel = labelModel.get('showMinLabel') || showAllLabel;\n    var includeMaxLabel = labelModel.get('showMaxLabel') || showAllLabel;\n\n    if (includeMinLabel && startTick !== ordinalExtent[0]) {\n        addItem(ordinalExtent[0]);\n    }\n\n    // Optimize: avoid generating large array by `ordinalScale.getTicks()`.\n    var tickValue = startTick;\n    for (; tickValue <= ordinalExtent[1]; tickValue += step) {\n        addItem(tickValue);\n    }\n\n    if (includeMaxLabel && tickValue - step !== ordinalExtent[1]) {\n        addItem(ordinalExtent[1]);\n    }\n\n    function addItem(tVal) {\n        result.push(onlyTick\n            ? tVal\n            : {\n                formattedLabel: labelFormatter(tVal),\n                rawLabel: ordinalScale.getLabel(tVal),\n                tickValue: tVal\n            }\n        );\n    }\n\n    return result;\n}\n\n// When interval is function, the result `false` means ignore the tick.\n// It is time consuming for large category data.\nfunction makeLabelsByCustomizedCategoryInterval(axis, categoryInterval, onlyTick) {\n    var ordinalScale = axis.scale;\n    var labelFormatter = makeLabelFormatter(axis);\n    var result = [];\n\n    each$1(ordinalScale.getTicks(), function (tickValue) {\n        var rawLabel = ordinalScale.getLabel(tickValue);\n        if (categoryInterval(tickValue, rawLabel)) {\n            result.push(onlyTick\n                ? tickValue\n                : {\n                    formattedLabel: labelFormatter(tickValue),\n                    rawLabel: rawLabel,\n                    tickValue: tickValue\n                }\n            );\n        }\n    });\n\n    return result;\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar NORMALIZED_EXTENT = [0, 1];\n\n/**\n * Base class of Axis.\n * @constructor\n */\nvar Axis = function (dim, scale, extent) {\n\n    /**\n     * Axis dimension. Such as 'x', 'y', 'z', 'angle', 'radius'.\n     * @type {string}\n     */\n    this.dim = dim;\n\n    /**\n     * Axis scale\n     * @type {module:echarts/coord/scale/*}\n     */\n    this.scale = scale;\n\n    /**\n     * @type {Array.<number>}\n     * @private\n     */\n    this._extent = extent || [0, 0];\n\n    /**\n     * @type {boolean}\n     */\n    this.inverse = false;\n\n    /**\n     * Usually true when axis has a ordinal scale\n     * @type {boolean}\n     */\n    this.onBand = false;\n};\n\nAxis.prototype = {\n\n    constructor: Axis,\n\n    /**\n     * If axis extent contain given coord\n     * @param {number} coord\n     * @return {boolean}\n     */\n    contain: function (coord) {\n        var extent = this._extent;\n        var min = Math.min(extent[0], extent[1]);\n        var max = Math.max(extent[0], extent[1]);\n        return coord >= min && coord <= max;\n    },\n\n    /**\n     * If axis extent contain given data\n     * @param {number} data\n     * @return {boolean}\n     */\n    containData: function (data) {\n        return this.contain(this.dataToCoord(data));\n    },\n\n    /**\n     * Get coord extent.\n     * @return {Array.<number>}\n     */\n    getExtent: function () {\n        return this._extent.slice();\n    },\n\n    /**\n     * Get precision used for formatting\n     * @param {Array.<number>} [dataExtent]\n     * @return {number}\n     */\n    getPixelPrecision: function (dataExtent) {\n        return getPixelPrecision(\n            dataExtent || this.scale.getExtent(),\n            this._extent\n        );\n    },\n\n    /**\n     * Set coord extent\n     * @param {number} start\n     * @param {number} end\n     */\n    setExtent: function (start, end) {\n        var extent = this._extent;\n        extent[0] = start;\n        extent[1] = end;\n    },\n\n    /**\n     * Convert data to coord. Data is the rank if it has an ordinal scale\n     * @param {number} data\n     * @param  {boolean} clamp\n     * @return {number}\n     */\n    dataToCoord: function (data, clamp) {\n        var extent = this._extent;\n        var scale = this.scale;\n        data = scale.normalize(data);\n\n        if (this.onBand && scale.type === 'ordinal') {\n            extent = extent.slice();\n            fixExtentWithBands(extent, scale.count());\n        }\n\n        return linearMap(data, NORMALIZED_EXTENT, extent, clamp);\n    },\n\n    /**\n     * Convert coord to data. Data is the rank if it has an ordinal scale\n     * @param {number} coord\n     * @param  {boolean} clamp\n     * @return {number}\n     */\n    coordToData: function (coord, clamp) {\n        var extent = this._extent;\n        var scale = this.scale;\n\n        if (this.onBand && scale.type === 'ordinal') {\n            extent = extent.slice();\n            fixExtentWithBands(extent, scale.count());\n        }\n\n        var t = linearMap(coord, extent, NORMALIZED_EXTENT, clamp);\n\n        return this.scale.scale(t);\n    },\n\n    /**\n     * Convert pixel point to data in axis\n     * @param {Array.<number>} point\n     * @param  {boolean} clamp\n     * @return {number} data\n     */\n    pointToData: function (point, clamp) {\n        // Should be implemented in derived class if necessary.\n    },\n\n    /**\n     * Different from `zrUtil.map(axis.getTicks(), axis.dataToCoord, axis)`,\n     * `axis.getTicksCoords` considers `onBand`, which is used by\n     * `boundaryGap:true` of category axis and splitLine and splitArea.\n     * @param {Object} [opt]\n     * @param {number} [opt.tickModel=axis.model.getModel('axisTick')]\n     * @param {boolean} [opt.clamp] If `true`, the first and the last\n     *        tick must be at the axis end points. Otherwise, clip ticks\n     *        that outside the axis extent.\n     * @return {Array.<Object>} [{\n     *     coord: ...,\n     *     tickValue: ...\n     * }, ...]\n     */\n    getTicksCoords: function (opt) {\n        opt = opt || {};\n\n        var tickModel = opt.tickModel || this.getTickModel();\n\n        var result = createAxisTicks(this, tickModel);\n        var ticks = result.ticks;\n\n        var ticksCoords = map(ticks, function (tickValue) {\n            return {\n                coord: this.dataToCoord(tickValue),\n                tickValue: tickValue\n            };\n        }, this);\n\n        var alignWithLabel = tickModel.get('alignWithLabel');\n        fixOnBandTicksCoords(\n            this, ticksCoords, result.tickCategoryInterval, alignWithLabel, opt.clamp\n        );\n\n        return ticksCoords;\n    },\n\n    /**\n     * @return {Array.<Object>} [{\n     *     formattedLabel: string,\n     *     rawLabel: axis.scale.getLabel(tickValue)\n     *     tickValue: number\n     * }, ...]\n     */\n    getViewLabels: function () {\n        return createAxisLabels(this).labels;\n    },\n\n    /**\n     * @return {module:echarts/coord/model/Model}\n     */\n    getLabelModel: function () {\n        return this.model.getModel('axisLabel');\n    },\n\n    /**\n     * Notice here we only get the default tick model. For splitLine\n     * or splitArea, we should pass the splitLineModel or splitAreaModel\n     * manually when calling `getTicksCoords`.\n     * In GL, this method may be overrided to:\n     * `axisModel.getModel('axisTick', grid3DModel.getModel('axisTick'));`\n     * @return {module:echarts/coord/model/Model}\n     */\n    getTickModel: function () {\n        return this.model.getModel('axisTick');\n    },\n\n    /**\n     * Get width of band\n     * @return {number}\n     */\n    getBandWidth: function () {\n        var axisExtent = this._extent;\n        var dataExtent = this.scale.getExtent();\n\n        var len = dataExtent[1] - dataExtent[0] + (this.onBand ? 1 : 0);\n        // Fix #2728, avoid NaN when only one data.\n        len === 0 && (len = 1);\n\n        var size = Math.abs(axisExtent[1] - axisExtent[0]);\n\n        return Math.abs(size) / len;\n    },\n\n    /**\n     * @abstract\n     * @return {boolean} Is horizontal\n     */\n    isHorizontal: null,\n\n    /**\n     * @abstract\n     * @return {number} Get axis rotate, by degree.\n     */\n    getRotate: null,\n\n    /**\n     * Only be called in category axis.\n     * Can be overrided, consider other axes like in 3D.\n     * @return {number} Auto interval for cateogry axis tick and label\n     */\n    calculateCategoryInterval: function () {\n        return calculateCategoryInterval(this);\n    }\n\n};\n\nfunction fixExtentWithBands(extent, nTick) {\n    var size = extent[1] - extent[0];\n    var len = nTick;\n    var margin = size / len / 2;\n    extent[0] += margin;\n    extent[1] -= margin;\n}\n\n// If axis has labels [1, 2, 3, 4]. Bands on the axis are\n// |---1---|---2---|---3---|---4---|.\n// So the displayed ticks and splitLine/splitArea should between\n// each data item, otherwise cause misleading (e.g., split tow bars\n// of a single data item when there are two bar series).\n// Also consider if tickCategoryInterval > 0 and onBand, ticks and\n// splitLine/spliteArea should layout appropriately corresponding\n// to displayed labels. (So we should not use `getBandWidth` in this\n// case).\nfunction fixOnBandTicksCoords(axis, ticksCoords, tickCategoryInterval, alignWithLabel, clamp) {\n    var ticksLen = ticksCoords.length;\n\n    if (!axis.onBand || alignWithLabel || !ticksLen) {\n        return;\n    }\n\n    var axisExtent = axis.getExtent();\n    var last;\n    if (ticksLen === 1) {\n        ticksCoords[0].coord = axisExtent[0];\n        last = ticksCoords[1] = {coord: axisExtent[0]};\n    }\n    else {\n        var shift = (ticksCoords[1].coord - ticksCoords[0].coord);\n        each$1(ticksCoords, function (ticksItem) {\n            ticksItem.coord -= shift / 2;\n            var tickCategoryInterval = tickCategoryInterval || 0;\n            // Avoid split a single data item when odd interval.\n            if (tickCategoryInterval % 2 > 0) {\n                ticksItem.coord -= shift / ((tickCategoryInterval + 1) * 2);\n            }\n        });\n        last = {coord: ticksCoords[ticksLen - 1].coord + shift};\n        ticksCoords.push(last);\n    }\n\n    var inverse = axisExtent[0] > axisExtent[1];\n\n    if (littleThan(ticksCoords[0].coord, axisExtent[0])) {\n        clamp ? (ticksCoords[0].coord = axisExtent[0]) : ticksCoords.shift();\n    }\n    if (clamp && littleThan(axisExtent[0], ticksCoords[0].coord)) {\n        ticksCoords.unshift({coord: axisExtent[0]});\n    }\n    if (littleThan(axisExtent[1], last.coord)) {\n        clamp ? (last.coord = axisExtent[1]) : ticksCoords.pop();\n    }\n    if (clamp && littleThan(last.coord, axisExtent[1])) {\n        ticksCoords.push({coord: axisExtent[1]});\n    }\n\n    function littleThan(a, b) {\n        return inverse ? a > b : a < b;\n    }\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Do not mount those modules on 'src/echarts' for better tree shaking.\n */\n\nvar parseGeoJson = parseGeoJson$1;\n\nvar ecUtil = {};\neach$1(\n    [\n        'map', 'each', 'filter', 'indexOf', 'inherits', 'reduce', 'filter',\n        'bind', 'curry', 'isArray', 'isString', 'isObject', 'isFunction',\n        'extend', 'defaults', 'clone', 'merge'\n    ],\n    function (name) {\n        ecUtil[name] = zrUtil[name];\n    }\n);\nvar graphic$1 = {};\neach$1(\n    [\n        'extendShape', 'extendPath', 'makePath', 'makeImage',\n        'mergePath', 'resizePath', 'createIcon',\n        'setHoverStyle', 'setLabelStyle', 'setTextStyle', 'setText',\n        'getFont', 'updateProps', 'initProps', 'getTransform',\n        'clipPointsByRect', 'clipRectByRect',\n        'Group',\n        'Image',\n        'Text',\n        'Circle',\n        'Sector',\n        'Ring',\n        'Polygon',\n        'Polyline',\n        'Rect',\n        'Line',\n        'BezierCurve',\n        'Arc',\n        'IncrementalDisplayable',\n        'CompoundPath',\n        'LinearGradient',\n        'RadialGradient',\n        'BoundingRect'\n    ],\n    function (name) {\n        graphic$1[name] = graphic[name];\n    }\n);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nSeriesModel.extend({\n\n    type: 'series.line',\n\n    dependencies: ['grid', 'polar'],\n\n    getInitialData: function (option, ecModel) {\n        if (__DEV__) {\n            var coordSys = option.coordinateSystem;\n            if (coordSys !== 'polar' && coordSys !== 'cartesian2d') {\n                throw new Error('Line not support coordinateSystem besides cartesian and polar');\n            }\n        }\n        return createListFromArray(this.getSource(), this);\n    },\n\n    defaultOption: {\n        zlevel: 0,\n        z: 2,\n        coordinateSystem: 'cartesian2d',\n        legendHoverLink: true,\n\n        hoverAnimation: true,\n        // stack: null\n        // xAxisIndex: 0,\n        // yAxisIndex: 0,\n\n        // polarIndex: 0,\n\n        // If clip the overflow value\n        clipOverflow: true,\n        // cursor: null,\n\n        label: {\n            position: 'top'\n        },\n        // itemStyle: {\n        // },\n\n        lineStyle: {\n            width: 2,\n            type: 'solid'\n        },\n        // areaStyle: {\n            // origin of areaStyle. Valid values:\n            // `'auto'/null/undefined`: from axisLine to data\n            // `'start'`: from min to data\n            // `'end'`: from data to max\n            // origin: 'auto'\n        // },\n        // false, 'start', 'end', 'middle'\n        step: false,\n\n        // Disabled if step is true\n        smooth: false,\n        smoothMonotone: null,\n        symbol: 'emptyCircle',\n        symbolSize: 4,\n        symbolRotate: null,\n\n        showSymbol: true,\n        // `false`: follow the label interval strategy.\n        // `true`: show all symbols.\n        // `'auto'`: If possible, show all symbols, otherwise\n        //           follow the label interval strategy.\n        showAllSymbol: 'auto',\n\n        // Whether to connect break point.\n        connectNulls: false,\n\n        // Sampling for large data. Can be: 'average', 'max', 'min', 'sum'.\n        sampling: 'none',\n\n        animationEasing: 'linear',\n\n        // Disable progressive\n        progressive: 0,\n        hoverLayerThreshold: Infinity\n    }\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * @param {module:echarts/data/List} data\n * @param {number} dataIndex\n * @return {string} label string. Not null/undefined\n */\nfunction getDefaultLabel(data, dataIndex) {\n    var labelDims = data.mapDimension('defaultedLabel', true);\n    var len = labelDims.length;\n\n    // Simple optimization (in lots of cases, label dims length is 1)\n    if (len === 1) {\n        return retrieveRawValue(data, dataIndex, labelDims[0]);\n    }\n    else if (len) {\n        var vals = [];\n        for (var i = 0; i < labelDims.length; i++) {\n            var val = retrieveRawValue(data, dataIndex, labelDims[i]);\n            vals.push(val);\n        }\n        return vals.join(' ');\n    }\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * @module echarts/chart/helper/Symbol\n */\n\n/**\n * @constructor\n * @alias {module:echarts/chart/helper/Symbol}\n * @param {module:echarts/data/List} data\n * @param {number} idx\n * @extends {module:zrender/graphic/Group}\n */\nfunction SymbolClz$1(data, idx, seriesScope) {\n    Group.call(this);\n    this.updateData(data, idx, seriesScope);\n}\n\nvar symbolProto = SymbolClz$1.prototype;\n\n/**\n * @public\n * @static\n * @param {module:echarts/data/List} data\n * @param {number} dataIndex\n * @return {Array.<number>} [width, height]\n */\nvar getSymbolSize = SymbolClz$1.getSymbolSize = function (data, idx) {\n    var symbolSize = data.getItemVisual(idx, 'symbolSize');\n    return symbolSize instanceof Array\n        ? symbolSize.slice()\n        : [+symbolSize, +symbolSize];\n};\n\nfunction getScale(symbolSize) {\n    return [symbolSize[0] / 2, symbolSize[1] / 2];\n}\n\nfunction driftSymbol(dx, dy) {\n    this.parent.drift(dx, dy);\n}\n\nsymbolProto._createSymbol = function (\n    symbolType,\n    data,\n    idx,\n    symbolSize,\n    keepAspect\n) {\n    // Remove paths created before\n    this.removeAll();\n\n    var color = data.getItemVisual(idx, 'color');\n\n    // var symbolPath = createSymbol(\n    //     symbolType, -0.5, -0.5, 1, 1, color\n    // );\n    // If width/height are set too small (e.g., set to 1) on ios10\n    // and macOS Sierra, a circle stroke become a rect, no matter what\n    // the scale is set. So we set width/height as 2. See #4150.\n    var symbolPath = createSymbol(\n        symbolType, -1, -1, 2, 2, color, keepAspect\n    );\n\n    symbolPath.attr({\n        z2: 100,\n        culling: true,\n        scale: getScale(symbolSize)\n    });\n    // Rewrite drift method\n    symbolPath.drift = driftSymbol;\n\n    this._symbolType = symbolType;\n\n    this.add(symbolPath);\n};\n\n/**\n * Stop animation\n * @param {boolean} toLastFrame\n */\nsymbolProto.stopSymbolAnimation = function (toLastFrame) {\n    this.childAt(0).stopAnimation(toLastFrame);\n};\n\n/**\n * FIXME:\n * Caution: This method breaks the encapsulation of this module,\n * but it indeed brings convenience. So do not use the method\n * unless you detailedly know all the implements of `Symbol`,\n * especially animation.\n *\n * Get symbol path element.\n */\nsymbolProto.getSymbolPath = function () {\n    return this.childAt(0);\n};\n\n/**\n * Get scale(aka, current symbol size).\n * Including the change caused by animation\n */\nsymbolProto.getScale = function () {\n    return this.childAt(0).scale;\n};\n\n/**\n * Highlight symbol\n */\nsymbolProto.highlight = function () {\n    this.childAt(0).trigger('emphasis');\n};\n\n/**\n * Downplay symbol\n */\nsymbolProto.downplay = function () {\n    this.childAt(0).trigger('normal');\n};\n\n/**\n * @param {number} zlevel\n * @param {number} z\n */\nsymbolProto.setZ = function (zlevel, z) {\n    var symbolPath = this.childAt(0);\n    symbolPath.zlevel = zlevel;\n    symbolPath.z = z;\n};\n\nsymbolProto.setDraggable = function (draggable) {\n    var symbolPath = this.childAt(0);\n    symbolPath.draggable = draggable;\n    symbolPath.cursor = draggable ? 'move' : symbolPath.cursor;\n};\n\n/**\n * Update symbol properties\n * @param {module:echarts/data/List} data\n * @param {number} idx\n * @param {Object} [seriesScope]\n * @param {Object} [seriesScope.itemStyle]\n * @param {Object} [seriesScope.hoverItemStyle]\n * @param {Object} [seriesScope.symbolRotate]\n * @param {Object} [seriesScope.symbolOffset]\n * @param {module:echarts/model/Model} [seriesScope.labelModel]\n * @param {module:echarts/model/Model} [seriesScope.hoverLabelModel]\n * @param {boolean} [seriesScope.hoverAnimation]\n * @param {Object} [seriesScope.cursorStyle]\n * @param {module:echarts/model/Model} [seriesScope.itemModel]\n * @param {string} [seriesScope.symbolInnerColor]\n * @param {Object} [seriesScope.fadeIn=false]\n */\nsymbolProto.updateData = function (data, idx, seriesScope) {\n    this.silent = false;\n\n    var symbolType = data.getItemVisual(idx, 'symbol') || 'circle';\n    var seriesModel = data.hostModel;\n    var symbolSize = getSymbolSize(data, idx);\n    var isInit = symbolType !== this._symbolType;\n\n    if (isInit) {\n        var keepAspect = data.getItemVisual(idx, 'symbolKeepAspect');\n        this._createSymbol(symbolType, data, idx, symbolSize, keepAspect);\n    }\n    else {\n        var symbolPath = this.childAt(0);\n        symbolPath.silent = false;\n        updateProps(symbolPath, {\n            scale: getScale(symbolSize)\n        }, seriesModel, idx);\n    }\n\n    this._updateCommon(data, idx, symbolSize, seriesScope);\n\n    if (isInit) {\n        var symbolPath = this.childAt(0);\n        var fadeIn = seriesScope && seriesScope.fadeIn;\n\n        var target = {scale: symbolPath.scale.slice()};\n        fadeIn && (target.style = {opacity: symbolPath.style.opacity});\n\n        symbolPath.scale = [0, 0];\n        fadeIn && (symbolPath.style.opacity = 0);\n\n        initProps(symbolPath, target, seriesModel, idx);\n    }\n\n    this._seriesModel = seriesModel;\n};\n\n// Update common properties\nvar normalStyleAccessPath = ['itemStyle'];\nvar emphasisStyleAccessPath = ['emphasis', 'itemStyle'];\nvar normalLabelAccessPath = ['label'];\nvar emphasisLabelAccessPath = ['emphasis', 'label'];\n\n/**\n * @param {module:echarts/data/List} data\n * @param {number} idx\n * @param {Array.<number>} symbolSize\n * @param {Object} [seriesScope]\n */\nsymbolProto._updateCommon = function (data, idx, symbolSize, seriesScope) {\n    var symbolPath = this.childAt(0);\n    var seriesModel = data.hostModel;\n    var color = data.getItemVisual(idx, 'color');\n\n    // Reset style\n    if (symbolPath.type !== 'image') {\n        symbolPath.useStyle({\n            strokeNoScale: true\n        });\n    }\n\n    var itemStyle = seriesScope && seriesScope.itemStyle;\n    var hoverItemStyle = seriesScope && seriesScope.hoverItemStyle;\n    var symbolRotate = seriesScope && seriesScope.symbolRotate;\n    var symbolOffset = seriesScope && seriesScope.symbolOffset;\n    var labelModel = seriesScope && seriesScope.labelModel;\n    var hoverLabelModel = seriesScope && seriesScope.hoverLabelModel;\n    var hoverAnimation = seriesScope && seriesScope.hoverAnimation;\n    var cursorStyle = seriesScope && seriesScope.cursorStyle;\n\n    if (!seriesScope || data.hasItemOption) {\n        var itemModel = (seriesScope && seriesScope.itemModel)\n            ? seriesScope.itemModel : data.getItemModel(idx);\n\n        // Color must be excluded.\n        // Because symbol provide setColor individually to set fill and stroke\n        itemStyle = itemModel.getModel(normalStyleAccessPath).getItemStyle(['color']);\n        hoverItemStyle = itemModel.getModel(emphasisStyleAccessPath).getItemStyle();\n\n        symbolRotate = itemModel.getShallow('symbolRotate');\n        symbolOffset = itemModel.getShallow('symbolOffset');\n\n        labelModel = itemModel.getModel(normalLabelAccessPath);\n        hoverLabelModel = itemModel.getModel(emphasisLabelAccessPath);\n        hoverAnimation = itemModel.getShallow('hoverAnimation');\n        cursorStyle = itemModel.getShallow('cursor');\n    }\n    else {\n        hoverItemStyle = extend({}, hoverItemStyle);\n    }\n\n    var elStyle = symbolPath.style;\n\n    symbolPath.attr('rotation', (symbolRotate || 0) * Math.PI / 180 || 0);\n\n    if (symbolOffset) {\n        symbolPath.attr('position', [\n            parsePercent$1(symbolOffset[0], symbolSize[0]),\n            parsePercent$1(symbolOffset[1], symbolSize[1])\n        ]);\n    }\n\n    cursorStyle && symbolPath.attr('cursor', cursorStyle);\n\n    // PENDING setColor before setStyle!!!\n    symbolPath.setColor(color, seriesScope && seriesScope.symbolInnerColor);\n\n    symbolPath.setStyle(itemStyle);\n\n    var opacity = data.getItemVisual(idx, 'opacity');\n    if (opacity != null) {\n        elStyle.opacity = opacity;\n    }\n\n    var liftZ = data.getItemVisual(idx, 'liftZ');\n    var z2Origin = symbolPath.__z2Origin;\n    if (liftZ != null) {\n        if (z2Origin == null) {\n            symbolPath.__z2Origin = symbolPath.z2;\n            symbolPath.z2 += liftZ;\n        }\n    }\n    else if (z2Origin != null) {\n        symbolPath.z2 = z2Origin;\n        symbolPath.__z2Origin = null;\n    }\n\n    var useNameLabel = seriesScope && seriesScope.useNameLabel;\n\n    setLabelStyle(\n        elStyle, hoverItemStyle, labelModel, hoverLabelModel,\n        {\n            labelFetcher: seriesModel,\n            labelDataIndex: idx,\n            defaultText: getLabelDefaultText,\n            isRectText: true,\n            autoColor: color\n        }\n    );\n\n    // Do not execute util needed.\n    function getLabelDefaultText(idx, opt) {\n        return useNameLabel ? data.getName(idx) : getDefaultLabel(data, idx);\n    }\n\n    symbolPath.__symbolOriginalScale = getScale(symbolSize);\n    symbolPath.hoverStyle = hoverItemStyle;\n    symbolPath.highDownOnUpdate = (\n        hoverAnimation && seriesModel.isAnimationEnabled()\n    ) ? highDownOnUpdate : null;\n\n    setHoverStyle(symbolPath);\n};\n\nfunction highDownOnUpdate(fromState, toState) {\n    // Do not support this hover animation util some scenario required.\n    // Animation can only be supported in hover layer when using `el.incremetal`.\n    if (this.incremental || this.useHoverLayer) {\n        return;\n    }\n\n    if (toState === 'emphasis') {\n        var scale = this.__symbolOriginalScale;\n        var ratio = scale[1] / scale[0];\n        var emphasisOpt = {\n            scale: [\n                Math.max(scale[0] * 1.1, scale[0] + 3),\n                Math.max(scale[1] * 1.1, scale[1] + 3 * ratio)\n            ]\n        };\n        // FIXME\n        // modify it after support stop specified animation.\n        // toState === fromState\n        //     ? (this.stopAnimation(), this.attr(emphasisOpt))\n        this.animateTo(emphasisOpt, 400, 'elasticOut');\n    }\n    else if (toState === 'normal') {\n        this.animateTo({\n            scale: this.__symbolOriginalScale\n        }, 400, 'elasticOut');\n    }\n}\n\n/**\n * @param {Function} cb\n * @param {Object} [opt]\n * @param {Object} [opt.keepLabel=true]\n */\nsymbolProto.fadeOut = function (cb, opt) {\n    var symbolPath = this.childAt(0);\n    // Avoid mistaken hover when fading out\n    this.silent = symbolPath.silent = true;\n    // Not show text when animating\n    !(opt && opt.keepLabel) && (symbolPath.style.text = null);\n\n    updateProps(\n        symbolPath,\n        {\n            style: {opacity: 0},\n            scale: [0, 0]\n        },\n        this._seriesModel,\n        this.dataIndex,\n        cb\n    );\n};\n\ninherits(SymbolClz$1, Group);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * @module echarts/chart/helper/SymbolDraw\n */\n\n/**\n * @constructor\n * @alias module:echarts/chart/helper/SymbolDraw\n * @param {module:zrender/graphic/Group} [symbolCtor]\n */\nfunction SymbolDraw(symbolCtor) {\n    this.group = new Group();\n\n    this._symbolCtor = symbolCtor || SymbolClz$1;\n}\n\nvar symbolDrawProto = SymbolDraw.prototype;\n\nfunction symbolNeedsDraw(data, point, idx, opt) {\n    return point && !isNaN(point[0]) && !isNaN(point[1])\n        && !(opt.isIgnore && opt.isIgnore(idx))\n        // We do not set clipShape on group, because it will cut part of\n        // the symbol element shape. We use the same clip shape here as\n        // the line clip.\n        && !(opt.clipShape && !opt.clipShape.contain(point[0], point[1]))\n        && data.getItemVisual(idx, 'symbol') !== 'none';\n}\n\n/**\n * Update symbols draw by new data\n * @param {module:echarts/data/List} data\n * @param {Object} [opt] Or isIgnore\n * @param {Function} [opt.isIgnore]\n * @param {Object} [opt.clipShape]\n */\nsymbolDrawProto.updateData = function (data, opt) {\n    opt = normalizeUpdateOpt(opt);\n\n    var group = this.group;\n    var seriesModel = data.hostModel;\n    var oldData = this._data;\n    var SymbolCtor = this._symbolCtor;\n\n    var seriesScope = makeSeriesScope(data);\n\n    // There is no oldLineData only when first rendering or switching from\n    // stream mode to normal mode, where previous elements should be removed.\n    if (!oldData) {\n        group.removeAll();\n    }\n\n    data.diff(oldData)\n        .add(function (newIdx) {\n            var point = data.getItemLayout(newIdx);\n            if (symbolNeedsDraw(data, point, newIdx, opt)) {\n                var symbolEl = new SymbolCtor(data, newIdx, seriesScope);\n                symbolEl.attr('position', point);\n                data.setItemGraphicEl(newIdx, symbolEl);\n                group.add(symbolEl);\n            }\n        })\n        .update(function (newIdx, oldIdx) {\n            var symbolEl = oldData.getItemGraphicEl(oldIdx);\n            var point = data.getItemLayout(newIdx);\n            if (!symbolNeedsDraw(data, point, newIdx, opt)) {\n                group.remove(symbolEl);\n                return;\n            }\n            if (!symbolEl) {\n                symbolEl = new SymbolCtor(data, newIdx);\n                symbolEl.attr('position', point);\n            }\n            else {\n                symbolEl.updateData(data, newIdx, seriesScope);\n                updateProps(symbolEl, {\n                    position: point\n                }, seriesModel);\n            }\n\n            // Add back\n            group.add(symbolEl);\n\n            data.setItemGraphicEl(newIdx, symbolEl);\n        })\n        .remove(function (oldIdx) {\n            var el = oldData.getItemGraphicEl(oldIdx);\n            el && el.fadeOut(function () {\n                group.remove(el);\n            });\n        })\n        .execute();\n\n    this._data = data;\n};\n\nsymbolDrawProto.isPersistent = function () {\n    return true;\n};\n\nsymbolDrawProto.updateLayout = function () {\n    var data = this._data;\n    if (data) {\n        // Not use animation\n        data.eachItemGraphicEl(function (el, idx) {\n            var point = data.getItemLayout(idx);\n            el.attr('position', point);\n        });\n    }\n};\n\nsymbolDrawProto.incrementalPrepareUpdate = function (data) {\n    this._seriesScope = makeSeriesScope(data);\n    this._data = null;\n    this.group.removeAll();\n};\n\n/**\n * Update symbols draw by new data\n * @param {module:echarts/data/List} data\n * @param {Object} [opt] Or isIgnore\n * @param {Function} [opt.isIgnore]\n * @param {Object} [opt.clipShape]\n */\nsymbolDrawProto.incrementalUpdate = function (taskParams, data, opt) {\n    opt = normalizeUpdateOpt(opt);\n\n    function updateIncrementalAndHover(el) {\n        if (!el.isGroup) {\n            el.incremental = el.useHoverLayer = true;\n        }\n    }\n    for (var idx = taskParams.start; idx < taskParams.end; idx++) {\n        var point = data.getItemLayout(idx);\n        if (symbolNeedsDraw(data, point, idx, opt)) {\n            var el = new this._symbolCtor(data, idx, this._seriesScope);\n            el.traverse(updateIncrementalAndHover);\n            el.attr('position', point);\n            this.group.add(el);\n            data.setItemGraphicEl(idx, el);\n        }\n    }\n};\n\nfunction normalizeUpdateOpt(opt) {\n    if (opt != null && !isObject$1(opt)) {\n        opt = {isIgnore: opt};\n    }\n    return opt || {};\n}\n\nsymbolDrawProto.remove = function (enableAnimation) {\n    var group = this.group;\n    var data = this._data;\n    // Incremental model do not have this._data.\n    if (data && enableAnimation) {\n        data.eachItemGraphicEl(function (el) {\n            el.fadeOut(function () {\n                group.remove(el);\n            });\n        });\n    }\n    else {\n        group.removeAll();\n    }\n};\n\nfunction makeSeriesScope(data) {\n    var seriesModel = data.hostModel;\n    return {\n        itemStyle: seriesModel.getModel('itemStyle').getItemStyle(['color']),\n        hoverItemStyle: seriesModel.getModel('emphasis.itemStyle').getItemStyle(),\n        symbolRotate: seriesModel.get('symbolRotate'),\n        symbolOffset: seriesModel.get('symbolOffset'),\n        hoverAnimation: seriesModel.get('hoverAnimation'),\n        labelModel: seriesModel.getModel('label'),\n        hoverLabelModel: seriesModel.getModel('emphasis.label'),\n        cursorStyle: seriesModel.get('cursor')\n    };\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * @param {Object} coordSys\n * @param {module:echarts/data/List} data\n * @param {string} valueOrigin lineSeries.option.areaStyle.origin\n */\nfunction prepareDataCoordInfo(coordSys, data, valueOrigin) {\n    var baseAxis = coordSys.getBaseAxis();\n    var valueAxis = coordSys.getOtherAxis(baseAxis);\n    var valueStart = getValueStart(valueAxis, valueOrigin);\n\n    var baseAxisDim = baseAxis.dim;\n    var valueAxisDim = valueAxis.dim;\n    var valueDim = data.mapDimension(valueAxisDim);\n    var baseDim = data.mapDimension(baseAxisDim);\n    var baseDataOffset = valueAxisDim === 'x' || valueAxisDim === 'radius' ? 1 : 0;\n\n    var dims = map(coordSys.dimensions, function (coordDim) {\n        return data.mapDimension(coordDim);\n    });\n\n    var stacked;\n    var stackResultDim = data.getCalculationInfo('stackResultDimension');\n    if (stacked |= isDimensionStacked(data, dims[0] /*, dims[1]*/)) { // jshint ignore:line\n        dims[0] = stackResultDim;\n    }\n    if (stacked |= isDimensionStacked(data, dims[1] /*, dims[0]*/)) { // jshint ignore:line\n        dims[1] = stackResultDim;\n    }\n\n    return {\n        dataDimsForPoint: dims,\n        valueStart: valueStart,\n        valueAxisDim: valueAxisDim,\n        baseAxisDim: baseAxisDim,\n        stacked: !!stacked,\n        valueDim: valueDim,\n        baseDim: baseDim,\n        baseDataOffset: baseDataOffset,\n        stackedOverDimension: data.getCalculationInfo('stackedOverDimension')\n    };\n}\n\nfunction getValueStart(valueAxis, valueOrigin) {\n    var valueStart = 0;\n    var extent = valueAxis.scale.getExtent();\n\n    if (valueOrigin === 'start') {\n        valueStart = extent[0];\n    }\n    else if (valueOrigin === 'end') {\n        valueStart = extent[1];\n    }\n    // auto\n    else {\n        // Both positive\n        if (extent[0] > 0) {\n            valueStart = extent[0];\n        }\n        // Both negative\n        else if (extent[1] < 0) {\n            valueStart = extent[1];\n        }\n        // If is one positive, and one negative, onZero shall be true\n    }\n\n    return valueStart;\n}\n\nfunction getStackedOnPoint(dataCoordInfo, coordSys, data, idx) {\n    var value = NaN;\n    if (dataCoordInfo.stacked) {\n        value = data.get(data.getCalculationInfo('stackedOverDimension'), idx);\n    }\n    if (isNaN(value)) {\n        value = dataCoordInfo.valueStart;\n    }\n\n    var baseDataOffset = dataCoordInfo.baseDataOffset;\n    var stackedData = [];\n    stackedData[baseDataOffset] = data.get(dataCoordInfo.baseDim, idx);\n    stackedData[1 - baseDataOffset] = value;\n\n    return coordSys.dataToPoint(stackedData);\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n// var arrayDiff = require('zrender/src/core/arrayDiff');\n// 'zrender/src/core/arrayDiff' has been used before, but it did\n// not do well in performance when roam with fixed dataZoom window.\n\n// function convertToIntId(newIdList, oldIdList) {\n//     // Generate int id instead of string id.\n//     // Compare string maybe slow in score function of arrDiff\n\n//     // Assume id in idList are all unique\n//     var idIndicesMap = {};\n//     var idx = 0;\n//     for (var i = 0; i < newIdList.length; i++) {\n//         idIndicesMap[newIdList[i]] = idx;\n//         newIdList[i] = idx++;\n//     }\n//     for (var i = 0; i < oldIdList.length; i++) {\n//         var oldId = oldIdList[i];\n//         // Same with newIdList\n//         if (idIndicesMap[oldId]) {\n//             oldIdList[i] = idIndicesMap[oldId];\n//         }\n//         else {\n//             oldIdList[i] = idx++;\n//         }\n//     }\n// }\n\nfunction diffData(oldData, newData) {\n    var diffResult = [];\n\n    newData.diff(oldData)\n        .add(function (idx) {\n            diffResult.push({cmd: '+', idx: idx});\n        })\n        .update(function (newIdx, oldIdx) {\n            diffResult.push({cmd: '=', idx: oldIdx, idx1: newIdx});\n        })\n        .remove(function (idx) {\n            diffResult.push({cmd: '-', idx: idx});\n        })\n        .execute();\n\n    return diffResult;\n}\n\nvar lineAnimationDiff = function (\n    oldData, newData,\n    oldStackedOnPoints, newStackedOnPoints,\n    oldCoordSys, newCoordSys,\n    oldValueOrigin, newValueOrigin\n) {\n    var diff = diffData(oldData, newData);\n\n    // var newIdList = newData.mapArray(newData.getId);\n    // var oldIdList = oldData.mapArray(oldData.getId);\n\n    // convertToIntId(newIdList, oldIdList);\n\n    // // FIXME One data ?\n    // diff = arrayDiff(oldIdList, newIdList);\n\n    var currPoints = [];\n    var nextPoints = [];\n    // Points for stacking base line\n    var currStackedPoints = [];\n    var nextStackedPoints = [];\n\n    var status = [];\n    var sortedIndices = [];\n    var rawIndices = [];\n\n    var newDataOldCoordInfo = prepareDataCoordInfo(oldCoordSys, newData, oldValueOrigin);\n    var oldDataNewCoordInfo = prepareDataCoordInfo(newCoordSys, oldData, newValueOrigin);\n\n    for (var i = 0; i < diff.length; i++) {\n        var diffItem = diff[i];\n        var pointAdded = true;\n\n        // FIXME, animation is not so perfect when dataZoom window moves fast\n        // Which is in case remvoing or add more than one data in the tail or head\n        switch (diffItem.cmd) {\n            case '=':\n                var currentPt = oldData.getItemLayout(diffItem.idx);\n                var nextPt = newData.getItemLayout(diffItem.idx1);\n                // If previous data is NaN, use next point directly\n                if (isNaN(currentPt[0]) || isNaN(currentPt[1])) {\n                    currentPt = nextPt.slice();\n                }\n                currPoints.push(currentPt);\n                nextPoints.push(nextPt);\n\n                currStackedPoints.push(oldStackedOnPoints[diffItem.idx]);\n                nextStackedPoints.push(newStackedOnPoints[diffItem.idx1]);\n\n                rawIndices.push(newData.getRawIndex(diffItem.idx1));\n                break;\n            case '+':\n                var idx = diffItem.idx;\n                currPoints.push(\n                    oldCoordSys.dataToPoint([\n                        newData.get(newDataOldCoordInfo.dataDimsForPoint[0], idx),\n                        newData.get(newDataOldCoordInfo.dataDimsForPoint[1], idx)\n                    ])\n                );\n\n                nextPoints.push(newData.getItemLayout(idx).slice());\n\n                currStackedPoints.push(\n                    getStackedOnPoint(newDataOldCoordInfo, oldCoordSys, newData, idx)\n                );\n                nextStackedPoints.push(newStackedOnPoints[idx]);\n\n                rawIndices.push(newData.getRawIndex(idx));\n                break;\n            case '-':\n                var idx = diffItem.idx;\n                var rawIndex = oldData.getRawIndex(idx);\n                // Data is replaced. In the case of dynamic data queue\n                // FIXME FIXME FIXME\n                if (rawIndex !== idx) {\n                    currPoints.push(oldData.getItemLayout(idx));\n                    nextPoints.push(newCoordSys.dataToPoint([\n                        oldData.get(oldDataNewCoordInfo.dataDimsForPoint[0], idx),\n                        oldData.get(oldDataNewCoordInfo.dataDimsForPoint[1], idx)\n                    ]));\n\n                    currStackedPoints.push(oldStackedOnPoints[idx]);\n                    nextStackedPoints.push(\n                        getStackedOnPoint(oldDataNewCoordInfo, newCoordSys, oldData, idx)\n                    );\n\n                    rawIndices.push(rawIndex);\n                }\n                else {\n                    pointAdded = false;\n                }\n        }\n\n        // Original indices\n        if (pointAdded) {\n            status.push(diffItem);\n            sortedIndices.push(sortedIndices.length);\n        }\n    }\n\n    // Diff result may be crossed if all items are changed\n    // Sort by data index\n    sortedIndices.sort(function (a, b) {\n        return rawIndices[a] - rawIndices[b];\n    });\n\n    var sortedCurrPoints = [];\n    var sortedNextPoints = [];\n\n    var sortedCurrStackedPoints = [];\n    var sortedNextStackedPoints = [];\n\n    var sortedStatus = [];\n    for (var i = 0; i < sortedIndices.length; i++) {\n        var idx = sortedIndices[i];\n        sortedCurrPoints[i] = currPoints[idx];\n        sortedNextPoints[i] = nextPoints[idx];\n\n        sortedCurrStackedPoints[i] = currStackedPoints[idx];\n        sortedNextStackedPoints[i] = nextStackedPoints[idx];\n\n        sortedStatus[i] = status[idx];\n    }\n\n    return {\n        current: sortedCurrPoints,\n        next: sortedNextPoints,\n\n        stackedOnCurrent: sortedCurrStackedPoints,\n        stackedOnNext: sortedNextStackedPoints,\n\n        status: sortedStatus\n    };\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n// Poly path support NaN point\n\nvar vec2Min = min;\nvar vec2Max = max;\n\nvar scaleAndAdd$1 = scaleAndAdd;\nvar v2Copy = copy;\n\n// Temporary variable\nvar v = [];\nvar cp0 = [];\nvar cp1 = [];\n\nfunction isPointNull(p) {\n    return isNaN(p[0]) || isNaN(p[1]);\n}\n\nfunction drawSegment(\n    ctx, points, start, segLen, allLen,\n    dir, smoothMin, smoothMax, smooth, smoothMonotone, connectNulls\n) {\n    // if (smoothMonotone == null) {\n    //     if (isMono(points, 'x')) {\n    //         return drawMono(ctx, points, start, segLen, allLen,\n    //             dir, smoothMin, smoothMax, smooth, 'x', connectNulls);\n    //     }\n    //     else if (isMono(points, 'y')) {\n    //         return drawMono(ctx, points, start, segLen, allLen,\n    //             dir, smoothMin, smoothMax, smooth, 'y', connectNulls);\n    //     }\n    //     else {\n    //         return drawNonMono.apply(this, arguments);\n    //     }\n    // }\n    // else if (smoothMonotone !== 'none' && isMono(points, smoothMonotone)) {\n    //     return drawMono.apply(this, arguments);\n    // }\n    // else {\n    //     return drawNonMono.apply(this, arguments);\n    // }\n    if (smoothMonotone === 'none' || !smoothMonotone) {\n        return drawNonMono.apply(this, arguments);\n    }\n    else {\n        return drawMono.apply(this, arguments);\n    }\n}\n\n/**\n * Check if points is in monotone.\n *\n * @param {number[][]} points         Array of points which is in [x, y] form\n * @param {string}     smoothMonotone 'x', 'y', or 'none', stating for which\n *                                    dimension that is checking.\n *                                    If is 'none', `drawNonMono` should be\n *                                    called.\n *                                    If is undefined, either being monotone\n *                                    in 'x' or 'y' will call `drawMono`.\n */\n// function isMono(points, smoothMonotone) {\n//     if (points.length <= 1) {\n//         return true;\n//     }\n\n//     var dim = smoothMonotone === 'x' ? 0 : 1;\n//     var last = points[0][dim];\n//     var lastDiff = 0;\n//     for (var i = 1; i < points.length; ++i) {\n//         var diff = points[i][dim] - last;\n//         if (!isNaN(diff) && !isNaN(lastDiff)\n//             && diff !== 0 && lastDiff !== 0\n//             && ((diff >= 0) !== (lastDiff >= 0))\n//         ) {\n//             return false;\n//         }\n//         if (!isNaN(diff) && diff !== 0) {\n//             lastDiff = diff;\n//             last = points[i][dim];\n//         }\n//     }\n//     return true;\n// }\n\n/**\n * Draw smoothed line in monotone, in which only vertical or horizontal bezier\n * control points will be used. This should be used when points are monotone\n * either in x or y dimension.\n */\nfunction drawMono(\n    ctx, points, start, segLen, allLen,\n    dir, smoothMin, smoothMax, smooth, smoothMonotone, connectNulls\n) {\n    var prevIdx = 0;\n    var idx = start;\n    for (var k = 0; k < segLen; k++) {\n        var p = points[idx];\n        if (idx >= allLen || idx < 0) {\n            break;\n        }\n        if (isPointNull(p)) {\n            if (connectNulls) {\n                idx += dir;\n                continue;\n            }\n            break;\n        }\n\n        if (idx === start) {\n            ctx[dir > 0 ? 'moveTo' : 'lineTo'](p[0], p[1]);\n        }\n        else {\n            if (smooth > 0) {\n                var prevP = points[prevIdx];\n                var dim = smoothMonotone === 'y' ? 1 : 0;\n\n                // Length of control point to p, either in x or y, but not both\n                var ctrlLen = (p[dim] - prevP[dim]) * smooth;\n\n                v2Copy(cp0, prevP);\n                cp0[dim] = prevP[dim] + ctrlLen;\n\n                v2Copy(cp1, p);\n                cp1[dim] = p[dim] - ctrlLen;\n\n                ctx.bezierCurveTo(\n                    cp0[0], cp0[1],\n                    cp1[0], cp1[1],\n                    p[0], p[1]\n                );\n            }\n            else {\n                ctx.lineTo(p[0], p[1]);\n            }\n        }\n\n        prevIdx = idx;\n        idx += dir;\n    }\n\n    return k;\n}\n\n/**\n * Draw smoothed line in non-monotone, in may cause undesired curve in extreme\n * situations. This should be used when points are non-monotone neither in x or\n * y dimension.\n */\nfunction drawNonMono(\n    ctx, points, start, segLen, allLen,\n    dir, smoothMin, smoothMax, smooth, smoothMonotone, connectNulls\n) {\n    var prevIdx = 0;\n    var idx = start;\n    for (var k = 0; k < segLen; k++) {\n        var p = points[idx];\n        if (idx >= allLen || idx < 0) {\n            break;\n        }\n        if (isPointNull(p)) {\n            if (connectNulls) {\n                idx += dir;\n                continue;\n            }\n            break;\n        }\n\n        if (idx === start) {\n            ctx[dir > 0 ? 'moveTo' : 'lineTo'](p[0], p[1]);\n            v2Copy(cp0, p);\n        }\n        else {\n            if (smooth > 0) {\n                var nextIdx = idx + dir;\n                var nextP = points[nextIdx];\n                if (connectNulls) {\n                    // Find next point not null\n                    while (nextP && isPointNull(points[nextIdx])) {\n                        nextIdx += dir;\n                        nextP = points[nextIdx];\n                    }\n                }\n\n                var ratioNextSeg = 0.5;\n                var prevP = points[prevIdx];\n                var nextP = points[nextIdx];\n                // Last point\n                if (!nextP || isPointNull(nextP)) {\n                    v2Copy(cp1, p);\n                }\n                else {\n                    // If next data is null in not connect case\n                    if (isPointNull(nextP) && !connectNulls) {\n                        nextP = p;\n                    }\n\n                    sub(v, nextP, prevP);\n\n                    var lenPrevSeg;\n                    var lenNextSeg;\n                    if (smoothMonotone === 'x' || smoothMonotone === 'y') {\n                        var dim = smoothMonotone === 'x' ? 0 : 1;\n                        lenPrevSeg = Math.abs(p[dim] - prevP[dim]);\n                        lenNextSeg = Math.abs(p[dim] - nextP[dim]);\n                    }\n                    else {\n                        lenPrevSeg = dist(p, prevP);\n                        lenNextSeg = dist(p, nextP);\n                    }\n\n                    // Use ratio of seg length\n                    ratioNextSeg = lenNextSeg / (lenNextSeg + lenPrevSeg);\n\n                    scaleAndAdd$1(cp1, p, v, -smooth * (1 - ratioNextSeg));\n                }\n                // Smooth constraint\n                vec2Min(cp0, cp0, smoothMax);\n                vec2Max(cp0, cp0, smoothMin);\n                vec2Min(cp1, cp1, smoothMax);\n                vec2Max(cp1, cp1, smoothMin);\n\n                ctx.bezierCurveTo(\n                    cp0[0], cp0[1],\n                    cp1[0], cp1[1],\n                    p[0], p[1]\n                );\n                // cp0 of next segment\n                scaleAndAdd$1(cp0, p, v, smooth * ratioNextSeg);\n            }\n            else {\n                ctx.lineTo(p[0], p[1]);\n            }\n        }\n\n        prevIdx = idx;\n        idx += dir;\n    }\n\n    return k;\n}\n\nfunction getBoundingBox(points, smoothConstraint) {\n    var ptMin = [Infinity, Infinity];\n    var ptMax = [-Infinity, -Infinity];\n    if (smoothConstraint) {\n        for (var i = 0; i < points.length; i++) {\n            var pt = points[i];\n            if (pt[0] < ptMin[0]) {\n                ptMin[0] = pt[0];\n            }\n            if (pt[1] < ptMin[1]) {\n                ptMin[1] = pt[1];\n            }\n            if (pt[0] > ptMax[0]) {\n                ptMax[0] = pt[0];\n            }\n            if (pt[1] > ptMax[1]) {\n                ptMax[1] = pt[1];\n            }\n        }\n    }\n    return {\n        min: smoothConstraint ? ptMin : ptMax,\n        max: smoothConstraint ? ptMax : ptMin\n    };\n}\n\nvar Polyline$1 = Path.extend({\n\n    type: 'ec-polyline',\n\n    shape: {\n        points: [],\n\n        smooth: 0,\n\n        smoothConstraint: true,\n\n        smoothMonotone: null,\n\n        connectNulls: false\n    },\n\n    style: {\n        fill: null,\n\n        stroke: '#000'\n    },\n\n    brush: fixClipWithShadow(Path.prototype.brush),\n\n    buildPath: function (ctx, shape) {\n        var points = shape.points;\n\n        var i = 0;\n        var len$$1 = points.length;\n\n        var result = getBoundingBox(points, shape.smoothConstraint);\n\n        if (shape.connectNulls) {\n            // Must remove first and last null values avoid draw error in polygon\n            for (; len$$1 > 0; len$$1--) {\n                if (!isPointNull(points[len$$1 - 1])) {\n                    break;\n                }\n            }\n            for (; i < len$$1; i++) {\n                if (!isPointNull(points[i])) {\n                    break;\n                }\n            }\n        }\n        while (i < len$$1) {\n            i += drawSegment(\n                ctx, points, i, len$$1, len$$1,\n                1, result.min, result.max, shape.smooth,\n                shape.smoothMonotone, shape.connectNulls\n            ) + 1;\n        }\n    }\n});\n\nvar Polygon$1 = Path.extend({\n\n    type: 'ec-polygon',\n\n    shape: {\n        points: [],\n\n        // Offset between stacked base points and points\n        stackedOnPoints: [],\n\n        smooth: 0,\n\n        stackedOnSmooth: 0,\n\n        smoothConstraint: true,\n\n        smoothMonotone: null,\n\n        connectNulls: false\n    },\n\n    brush: fixClipWithShadow(Path.prototype.brush),\n\n    buildPath: function (ctx, shape) {\n        var points = shape.points;\n        var stackedOnPoints = shape.stackedOnPoints;\n\n        var i = 0;\n        var len$$1 = points.length;\n        var smoothMonotone = shape.smoothMonotone;\n        var bbox = getBoundingBox(points, shape.smoothConstraint);\n        var stackedOnBBox = getBoundingBox(stackedOnPoints, shape.smoothConstraint);\n\n        if (shape.connectNulls) {\n            // Must remove first and last null values avoid draw error in polygon\n            for (; len$$1 > 0; len$$1--) {\n                if (!isPointNull(points[len$$1 - 1])) {\n                    break;\n                }\n            }\n            for (; i < len$$1; i++) {\n                if (!isPointNull(points[i])) {\n                    break;\n                }\n            }\n        }\n        while (i < len$$1) {\n            var k = drawSegment(\n                ctx, points, i, len$$1, len$$1,\n                1, bbox.min, bbox.max, shape.smooth,\n                smoothMonotone, shape.connectNulls\n            );\n            drawSegment(\n                ctx, stackedOnPoints, i + k - 1, k, len$$1,\n                -1, stackedOnBBox.min, stackedOnBBox.max, shape.stackedOnSmooth,\n                smoothMonotone, shape.connectNulls\n            );\n            i += k + 1;\n\n            ctx.closePath();\n        }\n    }\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n// FIXME step not support polar\n\nfunction isPointsSame(points1, points2) {\n    if (points1.length !== points2.length) {\n        return;\n    }\n    for (var i = 0; i < points1.length; i++) {\n        var p1 = points1[i];\n        var p2 = points2[i];\n        if (p1[0] !== p2[0] || p1[1] !== p2[1]) {\n            return;\n        }\n    }\n    return true;\n}\n\nfunction getSmooth(smooth) {\n    return typeof (smooth) === 'number' ? smooth : (smooth ? 0.5 : 0);\n}\n\nfunction getAxisExtentWithGap(axis) {\n    var extent = axis.getGlobalExtent();\n    if (axis.onBand) {\n        // Remove extra 1px to avoid line miter in clipped edge\n        var halfBandWidth = axis.getBandWidth() / 2 - 1;\n        var dir = extent[1] > extent[0] ? 1 : -1;\n        extent[0] += dir * halfBandWidth;\n        extent[1] -= dir * halfBandWidth;\n    }\n    return extent;\n}\n\n/**\n * @param {module:echarts/coord/cartesian/Cartesian2D|module:echarts/coord/polar/Polar} coordSys\n * @param {module:echarts/data/List} data\n * @param {Object} dataCoordInfo\n * @param {Array.<Array.<number>>} points\n */\nfunction getStackedOnPoints(coordSys, data, dataCoordInfo) {\n    if (!dataCoordInfo.valueDim) {\n        return [];\n    }\n\n    var points = [];\n    for (var idx = 0, len = data.count(); idx < len; idx++) {\n        points.push(getStackedOnPoint(dataCoordInfo, coordSys, data, idx));\n    }\n\n    return points;\n}\n\nfunction createGridClipShape(cartesian, hasAnimation, forSymbol, seriesModel) {\n    var xExtent = getAxisExtentWithGap(cartesian.getAxis('x'));\n    var yExtent = getAxisExtentWithGap(cartesian.getAxis('y'));\n    var isHorizontal = cartesian.getBaseAxis().isHorizontal();\n\n    var x = Math.min(xExtent[0], xExtent[1]);\n    var y = Math.min(yExtent[0], yExtent[1]);\n    var width = Math.max(xExtent[0], xExtent[1]) - x;\n    var height = Math.max(yExtent[0], yExtent[1]) - y;\n\n    // Avoid float number rounding error for symbol on the edge of axis extent.\n    // See #7913 and `test/dataZoom-clip.html`.\n    if (forSymbol) {\n        x -= 0.5;\n        width += 0.5;\n        y -= 0.5;\n        height += 0.5;\n    }\n    else {\n        var lineWidth = seriesModel.get('lineStyle.width') || 2;\n        // Expand clip shape to avoid clipping when line value exceeds axis\n        var expandSize = seriesModel.get('clipOverflow') ? lineWidth / 2 : Math.max(width, height);\n        if (isHorizontal) {\n            y -= expandSize;\n            height += expandSize * 2;\n        }\n        else {\n            x -= expandSize;\n            width += expandSize * 2;\n        }\n    }\n\n    var clipPath = new Rect({\n        shape: {\n            x: x,\n            y: y,\n            width: width,\n            height: height\n        }\n    });\n\n    if (hasAnimation) {\n        clipPath.shape[isHorizontal ? 'width' : 'height'] = 0;\n        initProps(clipPath, {\n            shape: {\n                width: width,\n                height: height\n            }\n        }, seriesModel);\n    }\n\n    return clipPath;\n}\n\nfunction createPolarClipShape(polar, hasAnimation, forSymbol, seriesModel) {\n    var angleAxis = polar.getAngleAxis();\n    var radiusAxis = polar.getRadiusAxis();\n\n    var radiusExtent = radiusAxis.getExtent().slice();\n    radiusExtent[0] > radiusExtent[1] && radiusExtent.reverse();\n    var angleExtent = angleAxis.getExtent();\n\n    var RADIAN = Math.PI / 180;\n\n    // Avoid float number rounding error for symbol on the edge of axis extent.\n    if (forSymbol) {\n        radiusExtent[0] -= 0.5;\n        radiusExtent[1] += 0.5;\n    }\n\n    var clipPath = new Sector({\n        shape: {\n            cx: round$1(polar.cx, 1),\n            cy: round$1(polar.cy, 1),\n            r0: round$1(radiusExtent[0], 1),\n            r: round$1(radiusExtent[1], 1),\n            startAngle: -angleExtent[0] * RADIAN,\n            endAngle: -angleExtent[1] * RADIAN,\n            clockwise: angleAxis.inverse\n        }\n    });\n\n    if (hasAnimation) {\n        clipPath.shape.endAngle = -angleExtent[0] * RADIAN;\n        initProps(clipPath, {\n            shape: {\n                endAngle: -angleExtent[1] * RADIAN\n            }\n        }, seriesModel);\n    }\n\n    return clipPath;\n}\n\nfunction createClipShape(coordSys, hasAnimation, forSymbol, seriesModel) {\n    return coordSys.type === 'polar'\n        ? createPolarClipShape(coordSys, hasAnimation, forSymbol, seriesModel)\n        : createGridClipShape(coordSys, hasAnimation, forSymbol, seriesModel);\n}\n\nfunction turnPointsIntoStep(points, coordSys, stepTurnAt) {\n    var baseAxis = coordSys.getBaseAxis();\n    var baseIndex = baseAxis.dim === 'x' || baseAxis.dim === 'radius' ? 0 : 1;\n\n    var stepPoints = [];\n    for (var i = 0; i < points.length - 1; i++) {\n        var nextPt = points[i + 1];\n        var pt = points[i];\n        stepPoints.push(pt);\n\n        var stepPt = [];\n        switch (stepTurnAt) {\n            case 'end':\n                stepPt[baseIndex] = nextPt[baseIndex];\n                stepPt[1 - baseIndex] = pt[1 - baseIndex];\n                // default is start\n                stepPoints.push(stepPt);\n                break;\n            case 'middle':\n                // default is start\n                var middle = (pt[baseIndex] + nextPt[baseIndex]) / 2;\n                var stepPt2 = [];\n                stepPt[baseIndex] = stepPt2[baseIndex] = middle;\n                stepPt[1 - baseIndex] = pt[1 - baseIndex];\n                stepPt2[1 - baseIndex] = nextPt[1 - baseIndex];\n                stepPoints.push(stepPt);\n                stepPoints.push(stepPt2);\n                break;\n            default:\n                stepPt[baseIndex] = pt[baseIndex];\n                stepPt[1 - baseIndex] = nextPt[1 - baseIndex];\n                // default is start\n                stepPoints.push(stepPt);\n        }\n    }\n    // Last points\n    points[i] && stepPoints.push(points[i]);\n    return stepPoints;\n}\n\nfunction getVisualGradient(data, coordSys) {\n    var visualMetaList = data.getVisual('visualMeta');\n    if (!visualMetaList || !visualMetaList.length || !data.count()) {\n        // When data.count() is 0, gradient range can not be calculated.\n        return;\n    }\n\n    if (coordSys.type !== 'cartesian2d') {\n        if (__DEV__) {\n            console.warn('Visual map on line style is only supported on cartesian2d.');\n        }\n        return;\n    }\n\n    var coordDim;\n    var visualMeta;\n\n    for (var i = visualMetaList.length - 1; i >= 0; i--) {\n        var dimIndex = visualMetaList[i].dimension;\n        var dimName = data.dimensions[dimIndex];\n        var dimInfo = data.getDimensionInfo(dimName);\n        coordDim = dimInfo && dimInfo.coordDim;\n        // Can only be x or y\n        if (coordDim === 'x' || coordDim === 'y') {\n            visualMeta = visualMetaList[i];\n            break;\n        }\n    }\n\n    if (!visualMeta) {\n        if (__DEV__) {\n            console.warn('Visual map on line style only support x or y dimension.');\n        }\n        return;\n    }\n\n    // If the area to be rendered is bigger than area defined by LinearGradient,\n    // the canvas spec prescribes that the color of the first stop and the last\n    // stop should be used. But if two stops are added at offset 0, in effect\n    // browsers use the color of the second stop to render area outside\n    // LinearGradient. So we can only infinitesimally extend area defined in\n    // LinearGradient to render `outerColors`.\n\n    var axis = coordSys.getAxis(coordDim);\n\n    // dataToCoor mapping may not be linear, but must be monotonic.\n    var colorStops = map(visualMeta.stops, function (stop) {\n        return {\n            coord: axis.toGlobalCoord(axis.dataToCoord(stop.value)),\n            color: stop.color\n        };\n    });\n    var stopLen = colorStops.length;\n    var outerColors = visualMeta.outerColors.slice();\n\n    if (stopLen && colorStops[0].coord > colorStops[stopLen - 1].coord) {\n        colorStops.reverse();\n        outerColors.reverse();\n    }\n\n    var tinyExtent = 10; // Arbitrary value: 10px\n    var minCoord = colorStops[0].coord - tinyExtent;\n    var maxCoord = colorStops[stopLen - 1].coord + tinyExtent;\n    var coordSpan = maxCoord - minCoord;\n\n    if (coordSpan < 1e-3) {\n        return 'transparent';\n    }\n\n    each$1(colorStops, function (stop) {\n        stop.offset = (stop.coord - minCoord) / coordSpan;\n    });\n    colorStops.push({\n        offset: stopLen ? colorStops[stopLen - 1].offset : 0.5,\n        color: outerColors[1] || 'transparent'\n    });\n    colorStops.unshift({ // notice colorStops.length have been changed.\n        offset: stopLen ? colorStops[0].offset : 0.5,\n        color: outerColors[0] || 'transparent'\n    });\n\n    // zrUtil.each(colorStops, function (colorStop) {\n    //     // Make sure each offset has rounded px to avoid not sharp edge\n    //     colorStop.offset = (Math.round(colorStop.offset * (end - start) + start) - start) / (end - start);\n    // });\n\n    var gradient = new LinearGradient(0, 0, 0, 0, colorStops, true);\n    gradient[coordDim] = minCoord;\n    gradient[coordDim + '2'] = maxCoord;\n\n    return gradient;\n}\n\nfunction getIsIgnoreFunc(seriesModel, data, coordSys) {\n    var showAllSymbol = seriesModel.get('showAllSymbol');\n    var isAuto = showAllSymbol === 'auto';\n\n    if (showAllSymbol && !isAuto) {\n        return;\n    }\n\n    var categoryAxis = coordSys.getAxesByScale('ordinal')[0];\n    if (!categoryAxis) {\n        return;\n    }\n\n    // Note that category label interval strategy might bring some weird effect\n    // in some scenario: users may wonder why some of the symbols are not\n    // displayed. So we show all symbols as possible as we can.\n    if (isAuto\n        // Simplify the logic, do not determine label overlap here.\n        && canShowAllSymbolForCategory(categoryAxis, data)\n    ) {\n        return;\n    }\n\n    // Otherwise follow the label interval strategy on category axis.\n    var categoryDataDim = data.mapDimension(categoryAxis.dim);\n    var labelMap = {};\n\n    each$1(categoryAxis.getViewLabels(), function (labelItem) {\n        labelMap[labelItem.tickValue] = 1;\n    });\n\n    return function (dataIndex) {\n        return !labelMap.hasOwnProperty(data.get(categoryDataDim, dataIndex));\n    };\n}\n\nfunction canShowAllSymbolForCategory(categoryAxis, data) {\n    // In mose cases, line is monotonous on category axis, and the label size\n    // is close with each other. So we check the symbol size and some of the\n    // label size alone with the category axis to estimate whether all symbol\n    // can be shown without overlap.\n    var axisExtent = categoryAxis.getExtent();\n    var availSize = Math.abs(axisExtent[1] - axisExtent[0]) / categoryAxis.scale.count();\n    isNaN(availSize) && (availSize = 0); // 0/0 is NaN.\n\n    // Sampling some points, max 5.\n    var dataLen = data.count();\n    var step = Math.max(1, Math.round(dataLen / 5));\n    for (var dataIndex = 0; dataIndex < dataLen; dataIndex += step) {\n        if (SymbolClz$1.getSymbolSize(\n                data, dataIndex\n            // Only for cartesian, where `isHorizontal` exists.\n            )[categoryAxis.isHorizontal() ? 1 : 0]\n            // Empirical number\n            * 1.5 > availSize\n        ) {\n            return false;\n        }\n    }\n\n    return true;\n}\n\nChart.extend({\n\n    type: 'line',\n\n    init: function () {\n        var lineGroup = new Group();\n\n        var symbolDraw = new SymbolDraw();\n        this.group.add(symbolDraw.group);\n\n        this._symbolDraw = symbolDraw;\n        this._lineGroup = lineGroup;\n    },\n\n    render: function (seriesModel, ecModel, api) {\n        var coordSys = seriesModel.coordinateSystem;\n        var group = this.group;\n        var data = seriesModel.getData();\n        var lineStyleModel = seriesModel.getModel('lineStyle');\n        var areaStyleModel = seriesModel.getModel('areaStyle');\n\n        var points = data.mapArray(data.getItemLayout);\n\n        var isCoordSysPolar = coordSys.type === 'polar';\n        var prevCoordSys = this._coordSys;\n\n        var symbolDraw = this._symbolDraw;\n        var polyline = this._polyline;\n        var polygon = this._polygon;\n\n        var lineGroup = this._lineGroup;\n\n        var hasAnimation = seriesModel.get('animation');\n\n        var isAreaChart = !areaStyleModel.isEmpty();\n\n        var valueOrigin = areaStyleModel.get('origin');\n        var dataCoordInfo = prepareDataCoordInfo(coordSys, data, valueOrigin);\n\n        var stackedOnPoints = getStackedOnPoints(coordSys, data, dataCoordInfo);\n\n        var showSymbol = seriesModel.get('showSymbol');\n\n        var isIgnoreFunc = showSymbol && !isCoordSysPolar\n            && getIsIgnoreFunc(seriesModel, data, coordSys);\n\n        // Remove temporary symbols\n        var oldData = this._data;\n        oldData && oldData.eachItemGraphicEl(function (el, idx) {\n            if (el.__temp) {\n                group.remove(el);\n                oldData.setItemGraphicEl(idx, null);\n            }\n        });\n\n        // Remove previous created symbols if showSymbol changed to false\n        if (!showSymbol) {\n            symbolDraw.remove();\n        }\n\n        group.add(lineGroup);\n\n        // FIXME step not support polar\n        var step = !isCoordSysPolar && seriesModel.get('step');\n        // Initialization animation or coordinate system changed\n        if (\n            !(polyline && prevCoordSys.type === coordSys.type && step === this._step)\n        ) {\n            showSymbol && symbolDraw.updateData(data, {\n                isIgnore: isIgnoreFunc,\n                clipShape: createClipShape(coordSys, false, true, seriesModel)\n            });\n\n            if (step) {\n                // TODO If stacked series is not step\n                points = turnPointsIntoStep(points, coordSys, step);\n                stackedOnPoints = turnPointsIntoStep(stackedOnPoints, coordSys, step);\n            }\n\n            polyline = this._newPolyline(points, coordSys, hasAnimation);\n            if (isAreaChart) {\n                polygon = this._newPolygon(\n                    points, stackedOnPoints,\n                    coordSys, hasAnimation\n                );\n            }\n            lineGroup.setClipPath(createClipShape(coordSys, true, false, seriesModel));\n        }\n        else {\n            if (isAreaChart && !polygon) {\n                // If areaStyle is added\n                polygon = this._newPolygon(\n                    points, stackedOnPoints,\n                    coordSys, hasAnimation\n                );\n            }\n            else if (polygon && !isAreaChart) {\n                // If areaStyle is removed\n                lineGroup.remove(polygon);\n                polygon = this._polygon = null;\n            }\n\n            // Update clipPath\n            lineGroup.setClipPath(createClipShape(coordSys, false, false, seriesModel));\n\n            // Always update, or it is wrong in the case turning on legend\n            // because points are not changed\n            showSymbol && symbolDraw.updateData(data, {\n                isIgnore: isIgnoreFunc,\n                clipShape: createClipShape(coordSys, false, true, seriesModel)\n            });\n\n            // Stop symbol animation and sync with line points\n            // FIXME performance?\n            data.eachItemGraphicEl(function (el) {\n                el.stopAnimation(true);\n            });\n\n            // In the case data zoom triggerred refreshing frequently\n            // Data may not change if line has a category axis. So it should animate nothing\n            if (!isPointsSame(this._stackedOnPoints, stackedOnPoints)\n                || !isPointsSame(this._points, points)\n            ) {\n                if (hasAnimation) {\n                    this._updateAnimation(\n                        data, stackedOnPoints, coordSys, api, step, valueOrigin\n                    );\n                }\n                else {\n                    // Not do it in update with animation\n                    if (step) {\n                        // TODO If stacked series is not step\n                        points = turnPointsIntoStep(points, coordSys, step);\n                        stackedOnPoints = turnPointsIntoStep(stackedOnPoints, coordSys, step);\n                    }\n\n                    polyline.setShape({\n                        points: points\n                    });\n                    polygon && polygon.setShape({\n                        points: points,\n                        stackedOnPoints: stackedOnPoints\n                    });\n                }\n            }\n        }\n\n        var visualColor = getVisualGradient(data, coordSys) || data.getVisual('color');\n\n        polyline.useStyle(defaults(\n            // Use color in lineStyle first\n            lineStyleModel.getLineStyle(),\n            {\n                fill: 'none',\n                stroke: visualColor,\n                lineJoin: 'bevel'\n            }\n        ));\n\n        var smooth = seriesModel.get('smooth');\n        smooth = getSmooth(seriesModel.get('smooth'));\n        polyline.setShape({\n            smooth: smooth,\n            smoothMonotone: seriesModel.get('smoothMonotone'),\n            connectNulls: seriesModel.get('connectNulls')\n        });\n\n        if (polygon) {\n            var stackedOnSeries = data.getCalculationInfo('stackedOnSeries');\n            var stackedOnSmooth = 0;\n\n            polygon.useStyle(defaults(\n                areaStyleModel.getAreaStyle(),\n                {\n                    fill: visualColor,\n                    opacity: 0.7,\n                    lineJoin: 'bevel'\n                }\n            ));\n\n            if (stackedOnSeries) {\n                stackedOnSmooth = getSmooth(stackedOnSeries.get('smooth'));\n            }\n\n            polygon.setShape({\n                smooth: smooth,\n                stackedOnSmooth: stackedOnSmooth,\n                smoothMonotone: seriesModel.get('smoothMonotone'),\n                connectNulls: seriesModel.get('connectNulls')\n            });\n        }\n\n        this._data = data;\n        // Save the coordinate system for transition animation when data changed\n        this._coordSys = coordSys;\n        this._stackedOnPoints = stackedOnPoints;\n        this._points = points;\n        this._step = step;\n        this._valueOrigin = valueOrigin;\n    },\n\n    dispose: function () {},\n\n    highlight: function (seriesModel, ecModel, api, payload) {\n        var data = seriesModel.getData();\n        var dataIndex = queryDataIndex(data, payload);\n\n        if (!(dataIndex instanceof Array) && dataIndex != null && dataIndex >= 0) {\n            var symbol = data.getItemGraphicEl(dataIndex);\n            if (!symbol) {\n                // Create a temporary symbol if it is not exists\n                var pt = data.getItemLayout(dataIndex);\n                if (!pt) {\n                    // Null data\n                    return;\n                }\n                symbol = new SymbolClz$1(data, dataIndex);\n                symbol.position = pt;\n                symbol.setZ(\n                    seriesModel.get('zlevel'),\n                    seriesModel.get('z')\n                );\n                symbol.ignore = isNaN(pt[0]) || isNaN(pt[1]);\n                symbol.__temp = true;\n                data.setItemGraphicEl(dataIndex, symbol);\n\n                // Stop scale animation\n                symbol.stopSymbolAnimation(true);\n\n                this.group.add(symbol);\n            }\n            symbol.highlight();\n        }\n        else {\n            // Highlight whole series\n            Chart.prototype.highlight.call(\n                this, seriesModel, ecModel, api, payload\n            );\n        }\n    },\n\n    downplay: function (seriesModel, ecModel, api, payload) {\n        var data = seriesModel.getData();\n        var dataIndex = queryDataIndex(data, payload);\n        if (dataIndex != null && dataIndex >= 0) {\n            var symbol = data.getItemGraphicEl(dataIndex);\n            if (symbol) {\n                if (symbol.__temp) {\n                    data.setItemGraphicEl(dataIndex, null);\n                    this.group.remove(symbol);\n                }\n                else {\n                    symbol.downplay();\n                }\n            }\n        }\n        else {\n            // FIXME\n            // can not downplay completely.\n            // Downplay whole series\n            Chart.prototype.downplay.call(\n                this, seriesModel, ecModel, api, payload\n            );\n        }\n    },\n\n    /**\n     * @param {module:zrender/container/Group} group\n     * @param {Array.<Array.<number>>} points\n     * @private\n     */\n    _newPolyline: function (points) {\n        var polyline = this._polyline;\n        // Remove previous created polyline\n        if (polyline) {\n            this._lineGroup.remove(polyline);\n        }\n\n        polyline = new Polyline$1({\n            shape: {\n                points: points\n            },\n            silent: true,\n            z2: 10\n        });\n\n        this._lineGroup.add(polyline);\n\n        this._polyline = polyline;\n\n        return polyline;\n    },\n\n    /**\n     * @param {module:zrender/container/Group} group\n     * @param {Array.<Array.<number>>} stackedOnPoints\n     * @param {Array.<Array.<number>>} points\n     * @private\n     */\n    _newPolygon: function (points, stackedOnPoints) {\n        var polygon = this._polygon;\n        // Remove previous created polygon\n        if (polygon) {\n            this._lineGroup.remove(polygon);\n        }\n\n        polygon = new Polygon$1({\n            shape: {\n                points: points,\n                stackedOnPoints: stackedOnPoints\n            },\n            silent: true\n        });\n\n        this._lineGroup.add(polygon);\n\n        this._polygon = polygon;\n        return polygon;\n    },\n\n    /**\n     * @private\n     */\n    // FIXME Two value axis\n    _updateAnimation: function (data, stackedOnPoints, coordSys, api, step, valueOrigin) {\n        var polyline = this._polyline;\n        var polygon = this._polygon;\n        var seriesModel = data.hostModel;\n\n        var diff = lineAnimationDiff(\n            this._data, data,\n            this._stackedOnPoints, stackedOnPoints,\n            this._coordSys, coordSys,\n            this._valueOrigin, valueOrigin\n        );\n\n        var current = diff.current;\n        var stackedOnCurrent = diff.stackedOnCurrent;\n        var next = diff.next;\n        var stackedOnNext = diff.stackedOnNext;\n        if (step) {\n            // TODO If stacked series is not step\n            current = turnPointsIntoStep(diff.current, coordSys, step);\n            stackedOnCurrent = turnPointsIntoStep(diff.stackedOnCurrent, coordSys, step);\n            next = turnPointsIntoStep(diff.next, coordSys, step);\n            stackedOnNext = turnPointsIntoStep(diff.stackedOnNext, coordSys, step);\n        }\n        // `diff.current` is subset of `current` (which should be ensured by\n        // turnPointsIntoStep), so points in `__points` can be updated when\n        // points in `current` are update during animation.\n        polyline.shape.__points = diff.current;\n        polyline.shape.points = current;\n\n        updateProps(polyline, {\n            shape: {\n                points: next\n            }\n        }, seriesModel);\n\n        if (polygon) {\n            polygon.setShape({\n                points: current,\n                stackedOnPoints: stackedOnCurrent\n            });\n            updateProps(polygon, {\n                shape: {\n                    points: next,\n                    stackedOnPoints: stackedOnNext\n                }\n            }, seriesModel);\n        }\n\n        var updatedDataInfo = [];\n        var diffStatus = diff.status;\n\n        for (var i = 0; i < diffStatus.length; i++) {\n            var cmd = diffStatus[i].cmd;\n            if (cmd === '=') {\n                var el = data.getItemGraphicEl(diffStatus[i].idx1);\n                if (el) {\n                    updatedDataInfo.push({\n                        el: el,\n                        ptIdx: i    // Index of points\n                    });\n                }\n            }\n        }\n\n        if (polyline.animators && polyline.animators.length) {\n            polyline.animators[0].during(function () {\n                for (var i = 0; i < updatedDataInfo.length; i++) {\n                    var el = updatedDataInfo[i].el;\n                    el.attr('position', polyline.shape.__points[updatedDataInfo[i].ptIdx]);\n                }\n            });\n        }\n    },\n\n    remove: function (ecModel) {\n        var group = this.group;\n        var oldData = this._data;\n        this._lineGroup.removeAll();\n        this._symbolDraw.remove(true);\n        // Remove temporary created elements when highlighting\n        oldData && oldData.eachItemGraphicEl(function (el, idx) {\n            if (el.__temp) {\n                group.remove(el);\n                oldData.setItemGraphicEl(idx, null);\n            }\n        });\n\n        this._polyline\n            = this._polygon\n            = this._coordSys\n            = this._points\n            = this._stackedOnPoints\n            = this._data = null;\n    }\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar visualSymbol = function (seriesType, defaultSymbolType, legendSymbol) {\n    // Encoding visual for all series include which is filtered for legend drawing\n    return {\n        seriesType: seriesType,\n\n        // For legend.\n        performRawSeries: true,\n\n        reset: function (seriesModel, ecModel, api) {\n            var data = seriesModel.getData();\n\n            var symbolType = seriesModel.get('symbol');\n            var symbolSize = seriesModel.get('symbolSize');\n            var keepAspect = seriesModel.get('symbolKeepAspect');\n\n            var hasSymbolTypeCallback = isFunction$1(symbolType);\n            var hasSymbolSizeCallback = isFunction$1(symbolSize);\n            var hasCallback = hasSymbolTypeCallback || hasSymbolSizeCallback;\n            var seriesSymbol = (!hasSymbolTypeCallback && symbolType) ? symbolType : defaultSymbolType;\n            var seriesSymbolSize = !hasSymbolSizeCallback ? symbolSize : null;\n\n            data.setVisual({\n                legendSymbol: legendSymbol || seriesSymbol,\n                // If seting callback functions on `symbol` or `symbolSize`, for simplicity and avoiding\n                // to bring trouble, we do not pick a reuslt from one of its calling on data item here,\n                // but just use the default value. Callback on `symbol` or `symbolSize` is convenient in\n                // some cases but generally it is not recommanded.\n                symbol: seriesSymbol,\n                symbolSize: seriesSymbolSize,\n                symbolKeepAspect: keepAspect\n            });\n\n            // Only visible series has each data be visual encoded\n            if (ecModel.isSeriesFiltered(seriesModel)) {\n                return;\n            }\n\n            function dataEach(data, idx) {\n                if (hasCallback) {\n                    var rawValue = seriesModel.getRawValue(idx);\n                    var params = seriesModel.getDataParams(idx);\n                    hasSymbolTypeCallback && data.setItemVisual(idx, 'symbol', symbolType(rawValue, params));\n                    hasSymbolSizeCallback && data.setItemVisual(idx, 'symbolSize', symbolSize(rawValue, params));\n                }\n\n                if (data.hasItemOption) {\n                    var itemModel = data.getItemModel(idx);\n                    var itemSymbolType = itemModel.getShallow('symbol', true);\n                    var itemSymbolSize = itemModel.getShallow('symbolSize', true);\n                    var itemSymbolKeepAspect = itemModel.getShallow('symbolKeepAspect', true);\n\n                    // If has item symbol\n                    if (itemSymbolType != null) {\n                        data.setItemVisual(idx, 'symbol', itemSymbolType);\n                    }\n                    if (itemSymbolSize != null) {\n                        // PENDING Transform symbolSize ?\n                        data.setItemVisual(idx, 'symbolSize', itemSymbolSize);\n                    }\n                    if (itemSymbolKeepAspect != null) {\n                        data.setItemVisual(idx, 'symbolKeepAspect', itemSymbolKeepAspect);\n                    }\n                }\n            }\n\n            return { dataEach: (data.hasItemOption || hasCallback) ? dataEach : null };\n        }\n    };\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/* global Float32Array */\n\nvar pointsLayout = function (seriesType) {\n    return {\n        seriesType: seriesType,\n\n        plan: createRenderPlanner(),\n\n        reset: function (seriesModel) {\n            var data = seriesModel.getData();\n            var coordSys = seriesModel.coordinateSystem;\n            var pipelineContext = seriesModel.pipelineContext;\n            var isLargeRender = pipelineContext.large;\n\n            if (!coordSys) {\n                return;\n            }\n\n            var dims = map(coordSys.dimensions, function (dim) {\n                return data.mapDimension(dim);\n            }).slice(0, 2);\n            var dimLen = dims.length;\n\n            var stackResultDim = data.getCalculationInfo('stackResultDimension');\n            if (isDimensionStacked(data, dims[0] /*, dims[1]*/)) {\n                dims[0] = stackResultDim;\n            }\n            if (isDimensionStacked(data, dims[1] /*, dims[0]*/)) {\n                dims[1] = stackResultDim;\n            }\n\n            function progress(params, data) {\n                var segCount = params.end - params.start;\n                var points = isLargeRender && new Float32Array(segCount * dimLen);\n\n                for (var i = params.start, offset = 0, tmpIn = [], tmpOut = []; i < params.end; i++) {\n                    var point;\n\n                    if (dimLen === 1) {\n                        var x = data.get(dims[0], i);\n                        point = !isNaN(x) && coordSys.dataToPoint(x, null, tmpOut);\n                    }\n                    else {\n                        var x = tmpIn[0] = data.get(dims[0], i);\n                        var y = tmpIn[1] = data.get(dims[1], i);\n                        // Also {Array.<number>}, not undefined to avoid if...else... statement\n                        point = !isNaN(x) && !isNaN(y) && coordSys.dataToPoint(tmpIn, null, tmpOut);\n                    }\n\n                    if (isLargeRender) {\n                        points[offset++] = point ? point[0] : NaN;\n                        points[offset++] = point ? point[1] : NaN;\n                    }\n                    else {\n                        data.setItemLayout(i, (point && point.slice()) || [NaN, NaN]);\n                    }\n                }\n\n                isLargeRender && data.setLayout('symbolPoints', points);\n            }\n\n            return dimLen && {progress: progress};\n        }\n    };\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\nvar samplers = {\n    average: function (frame) {\n        var sum = 0;\n        var count = 0;\n        for (var i = 0; i < frame.length; i++) {\n            if (!isNaN(frame[i])) {\n                sum += frame[i];\n                count++;\n            }\n        }\n        // Return NaN if count is 0\n        return count === 0 ? NaN : sum / count;\n    },\n    sum: function (frame) {\n        var sum = 0;\n        for (var i = 0; i < frame.length; i++) {\n            // Ignore NaN\n            sum += frame[i] || 0;\n        }\n        return sum;\n    },\n    max: function (frame) {\n        var max = -Infinity;\n        for (var i = 0; i < frame.length; i++) {\n            frame[i] > max && (max = frame[i]);\n        }\n        // NaN will cause illegal axis extent.\n        return isFinite(max) ? max : NaN;\n    },\n    min: function (frame) {\n        var min = Infinity;\n        for (var i = 0; i < frame.length; i++) {\n            frame[i] < min && (min = frame[i]);\n        }\n        // NaN will cause illegal axis extent.\n        return isFinite(min) ? min : NaN;\n    },\n    // TODO\n    // Median\n    nearest: function (frame) {\n        return frame[0];\n    }\n};\n\nvar indexSampler = function (frame, value) {\n    return Math.round(frame.length / 2);\n};\n\nvar dataSample = function (seriesType) {\n    return {\n\n        seriesType: seriesType,\n\n        modifyOutputEnd: true,\n\n        reset: function (seriesModel, ecModel, api) {\n            var data = seriesModel.getData();\n            var sampling = seriesModel.get('sampling');\n            var coordSys = seriesModel.coordinateSystem;\n            // Only cartesian2d support down sampling\n            if (coordSys.type === 'cartesian2d' && sampling) {\n                var baseAxis = coordSys.getBaseAxis();\n                var valueAxis = coordSys.getOtherAxis(baseAxis);\n                var extent = baseAxis.getExtent();\n                // Coordinste system has been resized\n                var size = extent[1] - extent[0];\n                var rate = Math.round(data.count() / size);\n                if (rate > 1) {\n                    var sampler;\n                    if (typeof sampling === 'string') {\n                        sampler = samplers[sampling];\n                    }\n                    else if (typeof sampling === 'function') {\n                        sampler = sampling;\n                    }\n                    if (sampler) {\n                        // Only support sample the first dim mapped from value axis.\n                        seriesModel.setData(data.downSample(\n                            data.mapDimension(valueAxis.dim), 1 / rate, sampler, indexSampler\n                        ));\n                    }\n                }\n            }\n        }\n    };\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Cartesian coordinate system\n * @module  echarts/coord/Cartesian\n *\n */\n\nfunction dimAxisMapper(dim) {\n    return this._axes[dim];\n}\n\n/**\n * @alias module:echarts/coord/Cartesian\n * @constructor\n */\nvar Cartesian = function (name) {\n    this._axes = {};\n\n    this._dimList = [];\n\n    /**\n     * @type {string}\n     */\n    this.name = name || '';\n};\n\nCartesian.prototype = {\n\n    constructor: Cartesian,\n\n    type: 'cartesian',\n\n    /**\n     * Get axis\n     * @param  {number|string} dim\n     * @return {module:echarts/coord/Cartesian~Axis}\n     */\n    getAxis: function (dim) {\n        return this._axes[dim];\n    },\n\n    /**\n     * Get axes list\n     * @return {Array.<module:echarts/coord/Cartesian~Axis>}\n     */\n    getAxes: function () {\n        return map(this._dimList, dimAxisMapper, this);\n    },\n\n    /**\n     * Get axes list by given scale type\n     */\n    getAxesByScale: function (scaleType) {\n        scaleType = scaleType.toLowerCase();\n        return filter(\n            this.getAxes(),\n            function (axis) {\n                return axis.scale.type === scaleType;\n            }\n        );\n    },\n\n    /**\n     * Add axis\n     * @param {module:echarts/coord/Cartesian.Axis}\n     */\n    addAxis: function (axis) {\n        var dim = axis.dim;\n\n        this._axes[dim] = axis;\n\n        this._dimList.push(dim);\n    },\n\n    /**\n     * Convert data to coord in nd space\n     * @param {Array.<number>|Object.<string, number>} val\n     * @return {Array.<number>|Object.<string, number>}\n     */\n    dataToCoord: function (val) {\n        return this._dataCoordConvert(val, 'dataToCoord');\n    },\n\n    /**\n     * Convert coord in nd space to data\n     * @param  {Array.<number>|Object.<string, number>} val\n     * @return {Array.<number>|Object.<string, number>}\n     */\n    coordToData: function (val) {\n        return this._dataCoordConvert(val, 'coordToData');\n    },\n\n    _dataCoordConvert: function (input, method) {\n        var dimList = this._dimList;\n\n        var output = input instanceof Array ? [] : {};\n\n        for (var i = 0; i < dimList.length; i++) {\n            var dim = dimList[i];\n            var axis = this._axes[dim];\n\n            output[dim] = axis[method](input[dim]);\n        }\n\n        return output;\n    }\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\nfunction Cartesian2D(name) {\n\n    Cartesian.call(this, name);\n}\n\nCartesian2D.prototype = {\n\n    constructor: Cartesian2D,\n\n    type: 'cartesian2d',\n\n    /**\n     * @type {Array.<string>}\n     * @readOnly\n     */\n    dimensions: ['x', 'y'],\n\n    /**\n     * Base axis will be used on stacking.\n     *\n     * @return {module:echarts/coord/cartesian/Axis2D}\n     */\n    getBaseAxis: function () {\n        return this.getAxesByScale('ordinal')[0]\n            || this.getAxesByScale('time')[0]\n            || this.getAxis('x');\n    },\n\n    /**\n     * If contain point\n     * @param {Array.<number>} point\n     * @return {boolean}\n     */\n    containPoint: function (point) {\n        var axisX = this.getAxis('x');\n        var axisY = this.getAxis('y');\n        return axisX.contain(axisX.toLocalCoord(point[0]))\n            && axisY.contain(axisY.toLocalCoord(point[1]));\n    },\n\n    /**\n     * If contain data\n     * @param {Array.<number>} data\n     * @return {boolean}\n     */\n    containData: function (data) {\n        return this.getAxis('x').containData(data[0])\n            && this.getAxis('y').containData(data[1]);\n    },\n\n    /**\n     * @param {Array.<number>} data\n     * @param {Array.<number>} out\n     * @return {Array.<number>}\n     */\n    dataToPoint: function (data, reserved, out) {\n        var xAxis = this.getAxis('x');\n        var yAxis = this.getAxis('y');\n        out = out || [];\n        out[0] = xAxis.toGlobalCoord(xAxis.dataToCoord(data[0]));\n        out[1] = yAxis.toGlobalCoord(yAxis.dataToCoord(data[1]));\n        return out;\n    },\n\n    /**\n     * @param {Array.<number>} data\n     * @param {Array.<number>} out\n     * @return {Array.<number>}\n     */\n    clampData: function (data, out) {\n        var xScale = this.getAxis('x').scale;\n        var yScale = this.getAxis('y').scale;\n        var xAxisExtent = xScale.getExtent();\n        var yAxisExtent = yScale.getExtent();\n        var x = xScale.parse(data[0]);\n        var y = yScale.parse(data[1]);\n        out = out || [];\n        out[0] = Math.min(\n            Math.max(Math.min(xAxisExtent[0], xAxisExtent[1]), x),\n            Math.max(xAxisExtent[0], xAxisExtent[1])\n        );\n        out[1] = Math.min(\n            Math.max(Math.min(yAxisExtent[0], yAxisExtent[1]), y),\n            Math.max(yAxisExtent[0], yAxisExtent[1])\n        );\n\n        return out;\n    },\n\n    /**\n     * @param {Array.<number>} point\n     * @param {Array.<number>} out\n     * @return {Array.<number>}\n     */\n    pointToData: function (point, out) {\n        var xAxis = this.getAxis('x');\n        var yAxis = this.getAxis('y');\n        out = out || [];\n        out[0] = xAxis.coordToData(xAxis.toLocalCoord(point[0]));\n        out[1] = yAxis.coordToData(yAxis.toLocalCoord(point[1]));\n        return out;\n    },\n\n    /**\n     * Get other axis\n     * @param {module:echarts/coord/cartesian/Axis2D} axis\n     */\n    getOtherAxis: function (axis) {\n        return this.getAxis(axis.dim === 'x' ? 'y' : 'x');\n    }\n\n};\n\ninherits(Cartesian2D, Cartesian);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Extend axis 2d\n * @constructor module:echarts/coord/cartesian/Axis2D\n * @extends {module:echarts/coord/cartesian/Axis}\n * @param {string} dim\n * @param {*} scale\n * @param {Array.<number>} coordExtent\n * @param {string} axisType\n * @param {string} position\n */\nvar Axis2D = function (dim, scale, coordExtent, axisType, position) {\n    Axis.call(this, dim, scale, coordExtent);\n    /**\n     * Axis type\n     *  - 'category'\n     *  - 'value'\n     *  - 'time'\n     *  - 'log'\n     * @type {string}\n     */\n    this.type = axisType || 'value';\n\n    /**\n     * Axis position\n     *  - 'top'\n     *  - 'bottom'\n     *  - 'left'\n     *  - 'right'\n     */\n    this.position = position || 'bottom';\n};\n\nAxis2D.prototype = {\n\n    constructor: Axis2D,\n\n    /**\n     * Index of axis, can be used as key\n     */\n    index: 0,\n\n    /**\n     * Implemented in <module:echarts/coord/cartesian/Grid>.\n     * @return {Array.<module:echarts/coord/cartesian/Axis2D>}\n     *         If not on zero of other axis, return null/undefined.\n     *         If no axes, return an empty array.\n     */\n    getAxesOnZeroOf: null,\n\n    /**\n     * Axis model\n     * @param {module:echarts/coord/cartesian/AxisModel}\n     */\n    model: null,\n\n    isHorizontal: function () {\n        var position = this.position;\n        return position === 'top' || position === 'bottom';\n    },\n\n    /**\n     * Each item cooresponds to this.getExtent(), which\n     * means globalExtent[0] may greater than globalExtent[1],\n     * unless `asc` is input.\n     *\n     * @param {boolean} [asc]\n     * @return {Array.<number>}\n     */\n    getGlobalExtent: function (asc) {\n        var ret = this.getExtent();\n        ret[0] = this.toGlobalCoord(ret[0]);\n        ret[1] = this.toGlobalCoord(ret[1]);\n        asc && ret[0] > ret[1] && ret.reverse();\n        return ret;\n    },\n\n    getOtherAxis: function () {\n        this.grid.getOtherAxis();\n    },\n\n    /**\n     * @override\n     */\n    pointToData: function (point, clamp) {\n        return this.coordToData(this.toLocalCoord(point[this.dim === 'x' ? 0 : 1]), clamp);\n    },\n\n    /**\n     * Transform global coord to local coord,\n     * i.e. var localCoord = axis.toLocalCoord(80);\n     * designate by module:echarts/coord/cartesian/Grid.\n     * @type {Function}\n     */\n    toLocalCoord: null,\n\n    /**\n     * Transform global coord to local coord,\n     * i.e. var globalCoord = axis.toLocalCoord(40);\n     * designate by module:echarts/coord/cartesian/Grid.\n     * @type {Function}\n     */\n    toGlobalCoord: null\n\n};\n\ninherits(Axis2D, Axis);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar defaultOption = {\n    show: true,\n    zlevel: 0,\n    z: 0,\n    // Inverse the axis.\n    inverse: false,\n\n    // Axis name displayed.\n    name: '',\n    // 'start' | 'middle' | 'end'\n    nameLocation: 'end',\n    // By degree. By defualt auto rotate by nameLocation.\n    nameRotate: null,\n    nameTruncate: {\n        maxWidth: null,\n        ellipsis: '...',\n        placeholder: '.'\n    },\n    // Use global text style by default.\n    nameTextStyle: {},\n    // The gap between axisName and axisLine.\n    nameGap: 15,\n\n    // Default `false` to support tooltip.\n    silent: false,\n    // Default `false` to avoid legacy user event listener fail.\n    triggerEvent: false,\n\n    tooltip: {\n        show: false\n    },\n\n    axisPointer: {},\n\n    axisLine: {\n        show: true,\n        onZero: true,\n        onZeroAxisIndex: null,\n        lineStyle: {\n            color: '#333',\n            width: 1,\n            type: 'solid'\n        },\n        // The arrow at both ends the the axis.\n        symbol: ['none', 'none'],\n        symbolSize: [10, 15]\n    },\n    axisTick: {\n        show: true,\n        // Whether axisTick is inside the grid or outside the grid.\n        inside: false,\n        // The length of axisTick.\n        length: 5,\n        lineStyle: {\n            width: 1\n        }\n    },\n    axisLabel: {\n        show: true,\n        // Whether axisLabel is inside the grid or outside the grid.\n        inside: false,\n        rotate: 0,\n        // true | false | null/undefined (auto)\n        showMinLabel: null,\n        // true | false | null/undefined (auto)\n        showMaxLabel: null,\n        margin: 8,\n        // formatter: null,\n        fontSize: 12\n    },\n    splitLine: {\n        show: true,\n        lineStyle: {\n            color: ['#ccc'],\n            width: 1,\n            type: 'solid'\n        }\n    },\n    splitArea: {\n        show: false,\n        areaStyle: {\n            color: ['rgba(250,250,250,0.3)', 'rgba(200,200,200,0.3)']\n        }\n    }\n};\n\nvar axisDefault = {};\n\naxisDefault.categoryAxis = merge({\n    // The gap at both ends of the axis. For categoryAxis, boolean.\n    boundaryGap: true,\n    // Set false to faster category collection.\n    // Only usefull in the case like: category is\n    // ['2012-01-01', '2012-01-02', ...], where the input\n    // data has been ensured not duplicate and is large data.\n    // null means \"auto\":\n    // if axis.data provided, do not deduplication,\n    // else do deduplication.\n    deduplication: null,\n    // splitArea: {\n        // show: false\n    // },\n    splitLine: {\n        show: false\n    },\n    axisTick: {\n        // If tick is align with label when boundaryGap is true\n        alignWithLabel: false,\n        interval: 'auto'\n    },\n    axisLabel: {\n        interval: 'auto'\n    }\n}, defaultOption);\n\naxisDefault.valueAxis = merge({\n    // The gap at both ends of the axis. For value axis, [GAP, GAP], where\n    // `GAP` can be an absolute pixel number (like `35`), or percent (like `'30%'`)\n    boundaryGap: [0, 0],\n\n    // TODO\n    // min/max: [30, datamin, 60] or [20, datamin] or [datamin, 60]\n\n    // Min value of the axis. can be:\n    // + a number\n    // + 'dataMin': use the min value in data.\n    // + null/undefined: auto decide min value (consider pretty look and boundaryGap).\n    // min: null,\n\n    // Max value of the axis. can be:\n    // + a number\n    // + 'dataMax': use the max value in data.\n    // + null/undefined: auto decide max value (consider pretty look and boundaryGap).\n    // max: null,\n\n    // Readonly prop, specifies start value of the range when using data zoom.\n    // rangeStart: null\n\n    // Readonly prop, specifies end value of the range when using data zoom.\n    // rangeEnd: null\n\n    // Optional value can be:\n    // + `false`: always include value 0.\n    // + `true`: the extent do not consider value 0.\n    // scale: false,\n\n    // AxisTick and axisLabel and splitLine are caculated based on splitNumber.\n    splitNumber: 5\n\n    // Interval specifies the span of the ticks is mandatorily.\n    // interval: null\n\n    // Specify min interval when auto calculate tick interval.\n    // minInterval: null\n\n    // Specify max interval when auto calculate tick interval.\n    // maxInterval: null\n\n}, defaultOption);\n\naxisDefault.timeAxis = defaults({\n    scale: true,\n    min: 'dataMin',\n    max: 'dataMax'\n}, axisDefault.valueAxis);\n\naxisDefault.logAxis = defaults({\n    scale: true,\n    logBase: 10\n}, axisDefault.valueAxis);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n// FIXME axisType is fixed ?\nvar AXIS_TYPES = ['value', 'category', 'time', 'log'];\n\n/**\n * Generate sub axis model class\n * @param {string} axisName 'x' 'y' 'radius' 'angle' 'parallel'\n * @param {module:echarts/model/Component} BaseAxisModelClass\n * @param {Function} axisTypeDefaulter\n * @param {Object} [extraDefaultOption]\n */\nvar axisModelCreator = function (axisName, BaseAxisModelClass, axisTypeDefaulter, extraDefaultOption) {\n\n    each$1(AXIS_TYPES, function (axisType) {\n\n        BaseAxisModelClass.extend({\n\n            /**\n             * @readOnly\n             */\n            type: axisName + 'Axis.' + axisType,\n\n            mergeDefaultAndTheme: function (option, ecModel) {\n                var layoutMode = this.layoutMode;\n                var inputPositionParams = layoutMode\n                    ? getLayoutParams(option) : {};\n\n                var themeModel = ecModel.getTheme();\n                merge(option, themeModel.get(axisType + 'Axis'));\n                merge(option, this.getDefaultOption());\n\n                option.type = axisTypeDefaulter(axisName, option);\n\n                if (layoutMode) {\n                    mergeLayoutParam(option, inputPositionParams, layoutMode);\n                }\n            },\n\n            /**\n             * @override\n             */\n            optionUpdated: function () {\n                var thisOption = this.option;\n                if (thisOption.type === 'category') {\n                    this.__ordinalMeta = OrdinalMeta.createByAxisModel(this);\n                }\n            },\n\n            /**\n             * Should not be called before all of 'getInitailData' finished.\n             * Because categories are collected during initializing data.\n             */\n            getCategories: function (rawData) {\n                var option = this.option;\n                // FIXME\n                // warning if called before all of 'getInitailData' finished.\n                if (option.type === 'category') {\n                    if (rawData) {\n                        return option.data;\n                    }\n                    return this.__ordinalMeta.categories;\n                }\n            },\n\n            getOrdinalMeta: function () {\n                return this.__ordinalMeta;\n            },\n\n            defaultOption: mergeAll(\n                [\n                    {},\n                    axisDefault[axisType + 'Axis'],\n                    extraDefaultOption\n                ],\n                true\n            )\n        });\n    });\n\n    ComponentModel.registerSubTypeDefaulter(\n        axisName + 'Axis',\n        curry(axisTypeDefaulter, axisName)\n    );\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar AxisModel = ComponentModel.extend({\n\n    type: 'cartesian2dAxis',\n\n    /**\n     * @type {module:echarts/coord/cartesian/Axis2D}\n     */\n    axis: null,\n\n    /**\n     * @override\n     */\n    init: function () {\n        AxisModel.superApply(this, 'init', arguments);\n        this.resetRange();\n    },\n\n    /**\n     * @override\n     */\n    mergeOption: function () {\n        AxisModel.superApply(this, 'mergeOption', arguments);\n        this.resetRange();\n    },\n\n    /**\n     * @override\n     */\n    restoreData: function () {\n        AxisModel.superApply(this, 'restoreData', arguments);\n        this.resetRange();\n    },\n\n    /**\n     * @override\n     * @return {module:echarts/model/Component}\n     */\n    getCoordSysModel: function () {\n        return this.ecModel.queryComponents({\n            mainType: 'grid',\n            index: this.option.gridIndex,\n            id: this.option.gridId\n        })[0];\n    }\n\n});\n\nfunction getAxisType(axisDim, option) {\n    // Default axis with data is category axis\n    return option.type || (option.data ? 'category' : 'value');\n}\n\nmerge(AxisModel.prototype, axisModelCommonMixin);\n\nvar extraOption = {\n    // gridIndex: 0,\n    // gridId: '',\n\n    // Offset is for multiple axis on the same position\n    offset: 0\n};\n\naxisModelCreator('x', AxisModel, getAxisType, extraOption);\naxisModelCreator('y', AxisModel, getAxisType, extraOption);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n// Grid 是在有直角坐标系的时候必须要存在的\n// 所以这里也要被 Cartesian2D 依赖\n\nComponentModel.extend({\n\n    type: 'grid',\n\n    dependencies: ['xAxis', 'yAxis'],\n\n    layoutMode: 'box',\n\n    /**\n     * @type {module:echarts/coord/cartesian/Grid}\n     */\n    coordinateSystem: null,\n\n    defaultOption: {\n        show: false,\n        zlevel: 0,\n        z: 0,\n        left: '10%',\n        top: 60,\n        right: '10%',\n        bottom: 60,\n        // If grid size contain label\n        containLabel: false,\n        // width: {totalWidth} - left - right,\n        // height: {totalHeight} - top - bottom,\n        backgroundColor: 'rgba(0,0,0,0)',\n        borderWidth: 1,\n        borderColor: '#ccc'\n    }\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Grid is a region which contains at most 4 cartesian systems\n *\n * TODO Default cartesian\n */\n\n// Depends on GridModel, AxisModel, which performs preprocess.\n/**\n * Check if the axis is used in the specified grid\n * @inner\n */\nfunction isAxisUsedInTheGrid(axisModel, gridModel, ecModel) {\n    return axisModel.getCoordSysModel() === gridModel;\n}\n\nfunction Grid(gridModel, ecModel, api) {\n    /**\n     * @type {Object.<string, module:echarts/coord/cartesian/Cartesian2D>}\n     * @private\n     */\n    this._coordsMap = {};\n\n    /**\n     * @type {Array.<module:echarts/coord/cartesian/Cartesian>}\n     * @private\n     */\n    this._coordsList = [];\n\n    /**\n     * @type {Object.<string, Array.<module:echarts/coord/cartesian/Axis2D>>}\n     * @private\n     */\n    this._axesMap = {};\n\n    /**\n     * @type {Array.<module:echarts/coord/cartesian/Axis2D>}\n     * @private\n     */\n    this._axesList = [];\n\n    this._initCartesian(gridModel, ecModel, api);\n\n    this.model = gridModel;\n}\n\nvar gridProto = Grid.prototype;\n\ngridProto.type = 'grid';\n\ngridProto.axisPointerEnabled = true;\n\ngridProto.getRect = function () {\n    return this._rect;\n};\n\ngridProto.update = function (ecModel, api) {\n\n    var axesMap = this._axesMap;\n\n    this._updateScale(ecModel, this.model);\n\n    each$1(axesMap.x, function (xAxis) {\n        niceScaleExtent(xAxis.scale, xAxis.model);\n    });\n    each$1(axesMap.y, function (yAxis) {\n        niceScaleExtent(yAxis.scale, yAxis.model);\n    });\n\n    // Key: axisDim_axisIndex, value: boolean, whether onZero target.\n    var onZeroRecords = {};\n\n    each$1(axesMap.x, function (xAxis) {\n        fixAxisOnZero(axesMap, 'y', xAxis, onZeroRecords);\n    });\n    each$1(axesMap.y, function (yAxis) {\n        fixAxisOnZero(axesMap, 'x', yAxis, onZeroRecords);\n    });\n\n    // Resize again if containLabel is enabled\n    // FIXME It may cause getting wrong grid size in data processing stage\n    this.resize(this.model, api);\n};\n\nfunction fixAxisOnZero(axesMap, otherAxisDim, axis, onZeroRecords) {\n\n    axis.getAxesOnZeroOf = function () {\n        // TODO: onZero of multiple axes.\n        return otherAxisOnZeroOf ? [otherAxisOnZeroOf] : [];\n    };\n\n    // onZero can not be enabled in these two situations:\n    // 1. When any other axis is a category axis.\n    // 2. When no axis is cross 0 point.\n    var otherAxes = axesMap[otherAxisDim];\n\n    var otherAxisOnZeroOf;\n    var axisModel = axis.model;\n    var onZero = axisModel.get('axisLine.onZero');\n    var onZeroAxisIndex = axisModel.get('axisLine.onZeroAxisIndex');\n\n    if (!onZero) {\n        return;\n    }\n\n    // If target axis is specified.\n    if (onZeroAxisIndex != null) {\n        if (canOnZeroToAxis(otherAxes[onZeroAxisIndex])) {\n            otherAxisOnZeroOf = otherAxes[onZeroAxisIndex];\n        }\n    }\n    else {\n        // Find the first available other axis.\n        for (var idx in otherAxes) {\n            if (otherAxes.hasOwnProperty(idx)\n                && canOnZeroToAxis(otherAxes[idx])\n                // Consider that two Y axes on one value axis,\n                // if both onZero, the two Y axes overlap.\n                && !onZeroRecords[getOnZeroRecordKey(otherAxes[idx])]\n            ) {\n                otherAxisOnZeroOf = otherAxes[idx];\n                break;\n            }\n        }\n    }\n\n    if (otherAxisOnZeroOf) {\n        onZeroRecords[getOnZeroRecordKey(otherAxisOnZeroOf)] = true;\n    }\n\n    function getOnZeroRecordKey(axis) {\n        return axis.dim + '_' + axis.index;\n    }\n}\n\nfunction canOnZeroToAxis(axis) {\n    return axis && axis.type !== 'category' && axis.type !== 'time' && ifAxisCrossZero(axis);\n}\n\n/**\n * Resize the grid\n * @param {module:echarts/coord/cartesian/GridModel} gridModel\n * @param {module:echarts/ExtensionAPI} api\n */\ngridProto.resize = function (gridModel, api, ignoreContainLabel) {\n\n    var gridRect = getLayoutRect(\n        gridModel.getBoxLayoutParams(), {\n            width: api.getWidth(),\n            height: api.getHeight()\n        });\n\n    this._rect = gridRect;\n\n    var axesList = this._axesList;\n\n    adjustAxes();\n\n    // Minus label size\n    if (!ignoreContainLabel && gridModel.get('containLabel')) {\n        each$1(axesList, function (axis) {\n            if (!axis.model.get('axisLabel.inside')) {\n                var labelUnionRect = estimateLabelUnionRect(axis);\n                if (labelUnionRect) {\n                    var dim = axis.isHorizontal() ? 'height' : 'width';\n                    var margin = axis.model.get('axisLabel.margin');\n                    gridRect[dim] -= labelUnionRect[dim] + margin;\n                    if (axis.position === 'top') {\n                        gridRect.y += labelUnionRect.height + margin;\n                    }\n                    else if (axis.position === 'left') {\n                        gridRect.x += labelUnionRect.width + margin;\n                    }\n                }\n            }\n        });\n\n        adjustAxes();\n    }\n\n    function adjustAxes() {\n        each$1(axesList, function (axis) {\n            var isHorizontal = axis.isHorizontal();\n            var extent = isHorizontal ? [0, gridRect.width] : [0, gridRect.height];\n            var idx = axis.inverse ? 1 : 0;\n            axis.setExtent(extent[idx], extent[1 - idx]);\n            updateAxisTransform(axis, isHorizontal ? gridRect.x : gridRect.y);\n        });\n    }\n};\n\n/**\n * @param {string} axisType\n * @param {number} [axisIndex]\n */\ngridProto.getAxis = function (axisType, axisIndex) {\n    var axesMapOnDim = this._axesMap[axisType];\n    if (axesMapOnDim != null) {\n        if (axisIndex == null) {\n            // Find first axis\n            for (var name in axesMapOnDim) {\n                if (axesMapOnDim.hasOwnProperty(name)) {\n                    return axesMapOnDim[name];\n                }\n            }\n        }\n        return axesMapOnDim[axisIndex];\n    }\n};\n\n/**\n * @return {Array.<module:echarts/coord/Axis>}\n */\ngridProto.getAxes = function () {\n    return this._axesList.slice();\n};\n\n/**\n * Usage:\n *      grid.getCartesian(xAxisIndex, yAxisIndex);\n *      grid.getCartesian(xAxisIndex);\n *      grid.getCartesian(null, yAxisIndex);\n *      grid.getCartesian({xAxisIndex: ..., yAxisIndex: ...});\n *\n * @param {number|Object} [xAxisIndex]\n * @param {number} [yAxisIndex]\n */\ngridProto.getCartesian = function (xAxisIndex, yAxisIndex) {\n    if (xAxisIndex != null && yAxisIndex != null) {\n        var key = 'x' + xAxisIndex + 'y' + yAxisIndex;\n        return this._coordsMap[key];\n    }\n\n    if (isObject$1(xAxisIndex)) {\n        yAxisIndex = xAxisIndex.yAxisIndex;\n        xAxisIndex = xAxisIndex.xAxisIndex;\n    }\n    // When only xAxisIndex or yAxisIndex given, find its first cartesian.\n    for (var i = 0, coordList = this._coordsList; i < coordList.length; i++) {\n        if (coordList[i].getAxis('x').index === xAxisIndex\n            || coordList[i].getAxis('y').index === yAxisIndex\n        ) {\n            return coordList[i];\n        }\n    }\n};\n\ngridProto.getCartesians = function () {\n    return this._coordsList.slice();\n};\n\n/**\n * @implements\n * see {module:echarts/CoodinateSystem}\n */\ngridProto.convertToPixel = function (ecModel, finder, value) {\n    var target = this._findConvertTarget(ecModel, finder);\n\n    return target.cartesian\n        ? target.cartesian.dataToPoint(value)\n        : target.axis\n        ? target.axis.toGlobalCoord(target.axis.dataToCoord(value))\n        : null;\n};\n\n/**\n * @implements\n * see {module:echarts/CoodinateSystem}\n */\ngridProto.convertFromPixel = function (ecModel, finder, value) {\n    var target = this._findConvertTarget(ecModel, finder);\n\n    return target.cartesian\n        ? target.cartesian.pointToData(value)\n        : target.axis\n        ? target.axis.coordToData(target.axis.toLocalCoord(value))\n        : null;\n};\n\n/**\n * @inner\n */\ngridProto._findConvertTarget = function (ecModel, finder) {\n    var seriesModel = finder.seriesModel;\n    var xAxisModel = finder.xAxisModel\n        || (seriesModel && seriesModel.getReferringComponents('xAxis')[0]);\n    var yAxisModel = finder.yAxisModel\n        || (seriesModel && seriesModel.getReferringComponents('yAxis')[0]);\n    var gridModel = finder.gridModel;\n    var coordsList = this._coordsList;\n    var cartesian;\n    var axis;\n\n    if (seriesModel) {\n        cartesian = seriesModel.coordinateSystem;\n        indexOf(coordsList, cartesian) < 0 && (cartesian = null);\n    }\n    else if (xAxisModel && yAxisModel) {\n        cartesian = this.getCartesian(xAxisModel.componentIndex, yAxisModel.componentIndex);\n    }\n    else if (xAxisModel) {\n        axis = this.getAxis('x', xAxisModel.componentIndex);\n    }\n    else if (yAxisModel) {\n        axis = this.getAxis('y', yAxisModel.componentIndex);\n    }\n    // Lowest priority.\n    else if (gridModel) {\n        var grid = gridModel.coordinateSystem;\n        if (grid === this) {\n            cartesian = this._coordsList[0];\n        }\n    }\n\n    return {cartesian: cartesian, axis: axis};\n};\n\n/**\n * @implements\n * see {module:echarts/CoodinateSystem}\n */\ngridProto.containPoint = function (point) {\n    var coord = this._coordsList[0];\n    if (coord) {\n        return coord.containPoint(point);\n    }\n};\n\n/**\n * Initialize cartesian coordinate systems\n * @private\n */\ngridProto._initCartesian = function (gridModel, ecModel, api) {\n    var axisPositionUsed = {\n        left: false,\n        right: false,\n        top: false,\n        bottom: false\n    };\n\n    var axesMap = {\n        x: {},\n        y: {}\n    };\n    var axesCount = {\n        x: 0,\n        y: 0\n    };\n\n    /// Create axis\n    ecModel.eachComponent('xAxis', createAxisCreator('x'), this);\n    ecModel.eachComponent('yAxis', createAxisCreator('y'), this);\n\n    if (!axesCount.x || !axesCount.y) {\n        // Roll back when there no either x or y axis\n        this._axesMap = {};\n        this._axesList = [];\n        return;\n    }\n\n    this._axesMap = axesMap;\n\n    /// Create cartesian2d\n    each$1(axesMap.x, function (xAxis, xAxisIndex) {\n        each$1(axesMap.y, function (yAxis, yAxisIndex) {\n            var key = 'x' + xAxisIndex + 'y' + yAxisIndex;\n            var cartesian = new Cartesian2D(key);\n\n            cartesian.grid = this;\n            cartesian.model = gridModel;\n\n            this._coordsMap[key] = cartesian;\n            this._coordsList.push(cartesian);\n\n            cartesian.addAxis(xAxis);\n            cartesian.addAxis(yAxis);\n        }, this);\n    }, this);\n\n    function createAxisCreator(axisType) {\n        return function (axisModel, idx) {\n            if (!isAxisUsedInTheGrid(axisModel, gridModel, ecModel)) {\n                return;\n            }\n\n            var axisPosition = axisModel.get('position');\n            if (axisType === 'x') {\n                // Fix position\n                if (axisPosition !== 'top' && axisPosition !== 'bottom') {\n                    // Default bottom of X\n                    axisPosition = axisPositionUsed.bottom ? 'top' : 'bottom';\n                }\n            }\n            else {\n                // Fix position\n                if (axisPosition !== 'left' && axisPosition !== 'right') {\n                    // Default left of Y\n                    axisPosition = axisPositionUsed.left ? 'right' : 'left';\n                }\n            }\n            axisPositionUsed[axisPosition] = true;\n\n            var axis = new Axis2D(\n                axisType, createScaleByModel(axisModel),\n                [0, 0],\n                axisModel.get('type'),\n                axisPosition\n            );\n\n            var isCategory = axis.type === 'category';\n            axis.onBand = isCategory && axisModel.get('boundaryGap');\n            axis.inverse = axisModel.get('inverse');\n\n            // Inject axis into axisModel\n            axisModel.axis = axis;\n\n            // Inject axisModel into axis\n            axis.model = axisModel;\n\n            // Inject grid info axis\n            axis.grid = this;\n\n            // Index of axis, can be used as key\n            axis.index = idx;\n\n            this._axesList.push(axis);\n\n            axesMap[axisType][idx] = axis;\n            axesCount[axisType]++;\n        };\n    }\n};\n\n/**\n * Update cartesian properties from series\n * @param  {module:echarts/model/Option} option\n * @private\n */\ngridProto._updateScale = function (ecModel, gridModel) {\n    // Reset scale\n    each$1(this._axesList, function (axis) {\n        axis.scale.setExtent(Infinity, -Infinity);\n    });\n    ecModel.eachSeries(function (seriesModel) {\n        if (isCartesian2D(seriesModel)) {\n            var axesModels = findAxesModels(seriesModel, ecModel);\n            var xAxisModel = axesModels[0];\n            var yAxisModel = axesModels[1];\n\n            if (!isAxisUsedInTheGrid(xAxisModel, gridModel, ecModel)\n                || !isAxisUsedInTheGrid(yAxisModel, gridModel, ecModel)\n            ) {\n                return;\n            }\n\n            var cartesian = this.getCartesian(\n                xAxisModel.componentIndex, yAxisModel.componentIndex\n            );\n            var data = seriesModel.getData();\n            var xAxis = cartesian.getAxis('x');\n            var yAxis = cartesian.getAxis('y');\n\n            if (data.type === 'list') {\n                unionExtent(data, xAxis, seriesModel);\n                unionExtent(data, yAxis, seriesModel);\n            }\n        }\n    }, this);\n\n    function unionExtent(data, axis, seriesModel) {\n        each$1(data.mapDimension(axis.dim, true), function (dim) {\n            axis.scale.unionExtentFromData(\n                // For example, the extent of the orginal dimension\n                // is [0.1, 0.5], the extent of the `stackResultDimension`\n                // is [7, 9], the final extent should not include [0.1, 0.5].\n                data, getStackedDimension(data, dim)\n            );\n        });\n    }\n};\n\n/**\n * @param {string} [dim] 'x' or 'y' or 'auto' or null/undefined\n * @return {Object} {baseAxes: [], otherAxes: []}\n */\ngridProto.getTooltipAxes = function (dim) {\n    var baseAxes = [];\n    var otherAxes = [];\n\n    each$1(this.getCartesians(), function (cartesian) {\n        var baseAxis = (dim != null && dim !== 'auto')\n            ? cartesian.getAxis(dim) : cartesian.getBaseAxis();\n        var otherAxis = cartesian.getOtherAxis(baseAxis);\n        indexOf(baseAxes, baseAxis) < 0 && baseAxes.push(baseAxis);\n        indexOf(otherAxes, otherAxis) < 0 && otherAxes.push(otherAxis);\n    });\n\n    return {baseAxes: baseAxes, otherAxes: otherAxes};\n};\n\n/**\n * @inner\n */\nfunction updateAxisTransform(axis, coordBase) {\n    var axisExtent = axis.getExtent();\n    var axisExtentSum = axisExtent[0] + axisExtent[1];\n\n    // Fast transform\n    axis.toGlobalCoord = axis.dim === 'x'\n        ? function (coord) {\n            return coord + coordBase;\n        }\n        : function (coord) {\n            return axisExtentSum - coord + coordBase;\n        };\n    axis.toLocalCoord = axis.dim === 'x'\n        ? function (coord) {\n            return coord - coordBase;\n        }\n        : function (coord) {\n            return axisExtentSum - coord + coordBase;\n        };\n}\n\nvar axesTypes = ['xAxis', 'yAxis'];\n/**\n * @inner\n */\nfunction findAxesModels(seriesModel, ecModel) {\n    return map(axesTypes, function (axisType) {\n        var axisModel = seriesModel.getReferringComponents(axisType)[0];\n\n        if (__DEV__) {\n            if (!axisModel) {\n                throw new Error(axisType + ' \"' + retrieve(\n                    seriesModel.get(axisType + 'Index'),\n                    seriesModel.get(axisType + 'Id'),\n                    0\n                ) + '\" not found');\n            }\n        }\n        return axisModel;\n    });\n}\n\n/**\n * @inner\n */\nfunction isCartesian2D(seriesModel) {\n    return seriesModel.get('coordinateSystem') === 'cartesian2d';\n}\n\nGrid.create = function (ecModel, api) {\n    var grids = [];\n    ecModel.eachComponent('grid', function (gridModel, idx) {\n        var grid = new Grid(gridModel, ecModel, api);\n        grid.name = 'grid_' + idx;\n        // dataSampling requires axis extent, so resize\n        // should be performed in create stage.\n        grid.resize(gridModel, api, true);\n\n        gridModel.coordinateSystem = grid;\n\n        grids.push(grid);\n    });\n\n    // Inject the coordinateSystems into seriesModel\n    ecModel.eachSeries(function (seriesModel) {\n        if (!isCartesian2D(seriesModel)) {\n            return;\n        }\n\n        var axesModels = findAxesModels(seriesModel, ecModel);\n        var xAxisModel = axesModels[0];\n        var yAxisModel = axesModels[1];\n\n        var gridModel = xAxisModel.getCoordSysModel();\n\n        if (__DEV__) {\n            if (!gridModel) {\n                throw new Error(\n                    'Grid \"' + retrieve(\n                        xAxisModel.get('gridIndex'),\n                        xAxisModel.get('gridId'),\n                        0\n                    ) + '\" not found'\n                );\n            }\n            if (xAxisModel.getCoordSysModel() !== yAxisModel.getCoordSysModel()) {\n                throw new Error('xAxis and yAxis must use the same grid');\n            }\n        }\n\n        var grid = gridModel.coordinateSystem;\n\n        seriesModel.coordinateSystem = grid.getCartesian(\n            xAxisModel.componentIndex, yAxisModel.componentIndex\n        );\n    });\n\n    return grids;\n};\n\n// For deciding which dimensions to use when creating list data\nGrid.dimensions = Grid.prototype.dimensions = Cartesian2D.prototype.dimensions;\n\nCoordinateSystemManager.register('cartesian2d', Grid);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar PI$2 = Math.PI;\n\n/**\n * A final axis is translated and rotated from a \"standard axis\".\n * So opt.position and opt.rotation is required.\n *\n * A standard axis is and axis from [0, 0] to [0, axisExtent[1]],\n * for example: (0, 0) ------------> (0, 50)\n *\n * nameDirection or tickDirection or labelDirection is 1 means tick\n * or label is below the standard axis, whereas is -1 means above\n * the standard axis. labelOffset means offset between label and axis,\n * which is useful when 'onZero', where axisLabel is in the grid and\n * label in outside grid.\n *\n * Tips: like always,\n * positive rotation represents anticlockwise, and negative rotation\n * represents clockwise.\n * The direction of position coordinate is the same as the direction\n * of screen coordinate.\n *\n * Do not need to consider axis 'inverse', which is auto processed by\n * axis extent.\n *\n * @param {module:zrender/container/Group} group\n * @param {Object} axisModel\n * @param {Object} opt Standard axis parameters.\n * @param {Array.<number>} opt.position [x, y]\n * @param {number} opt.rotation by radian\n * @param {number} [opt.nameDirection=1] 1 or -1 Used when nameLocation is 'middle' or 'center'.\n * @param {number} [opt.tickDirection=1] 1 or -1\n * @param {number} [opt.labelDirection=1] 1 or -1\n * @param {number} [opt.labelOffset=0] Usefull when onZero.\n * @param {string} [opt.axisLabelShow] default get from axisModel.\n * @param {string} [opt.axisName] default get from axisModel.\n * @param {number} [opt.axisNameAvailableWidth]\n * @param {number} [opt.labelRotate] by degree, default get from axisModel.\n * @param {number} [opt.strokeContainThreshold] Default label interval when label\n * @param {number} [opt.nameTruncateMaxWidth]\n */\nvar AxisBuilder = function (axisModel, opt) {\n\n    /**\n     * @readOnly\n     */\n    this.opt = opt;\n\n    /**\n     * @readOnly\n     */\n    this.axisModel = axisModel;\n\n    // Default value\n    defaults(\n        opt,\n        {\n            labelOffset: 0,\n            nameDirection: 1,\n            tickDirection: 1,\n            labelDirection: 1,\n            silent: true\n        }\n    );\n\n    /**\n     * @readOnly\n     */\n    this.group = new Group();\n\n    // FIXME Not use a seperate text group?\n    var dumbGroup = new Group({\n        position: opt.position.slice(),\n        rotation: opt.rotation\n    });\n\n    // this.group.add(dumbGroup);\n    // this._dumbGroup = dumbGroup;\n\n    dumbGroup.updateTransform();\n    this._transform = dumbGroup.transform;\n\n    this._dumbGroup = dumbGroup;\n};\n\nAxisBuilder.prototype = {\n\n    constructor: AxisBuilder,\n\n    hasBuilder: function (name) {\n        return !!builders[name];\n    },\n\n    add: function (name) {\n        builders[name].call(this);\n    },\n\n    getGroup: function () {\n        return this.group;\n    }\n\n};\n\nvar builders = {\n\n    /**\n     * @private\n     */\n    axisLine: function () {\n        var opt = this.opt;\n        var axisModel = this.axisModel;\n\n        if (!axisModel.get('axisLine.show')) {\n            return;\n        }\n\n        var extent = this.axisModel.axis.getExtent();\n\n        var matrix = this._transform;\n        var pt1 = [extent[0], 0];\n        var pt2 = [extent[1], 0];\n        if (matrix) {\n            applyTransform(pt1, pt1, matrix);\n            applyTransform(pt2, pt2, matrix);\n        }\n\n        var lineStyle = extend(\n            {\n                lineCap: 'round'\n            },\n            axisModel.getModel('axisLine.lineStyle').getLineStyle()\n        );\n\n        this.group.add(new Line({\n            // Id for animation\n            anid: 'line',\n            subPixelOptimize: true,\n            shape: {\n                x1: pt1[0],\n                y1: pt1[1],\n                x2: pt2[0],\n                y2: pt2[1]\n            },\n            style: lineStyle,\n            strokeContainThreshold: opt.strokeContainThreshold || 5,\n            silent: true,\n            z2: 1\n        }));\n\n        var arrows = axisModel.get('axisLine.symbol');\n        var arrowSize = axisModel.get('axisLine.symbolSize');\n\n        var arrowOffset = axisModel.get('axisLine.symbolOffset') || 0;\n        if (typeof arrowOffset === 'number') {\n            arrowOffset = [arrowOffset, arrowOffset];\n        }\n\n        if (arrows != null) {\n            if (typeof arrows === 'string') {\n                // Use the same arrow for start and end point\n                arrows = [arrows, arrows];\n            }\n            if (typeof arrowSize === 'string'\n                || typeof arrowSize === 'number'\n            ) {\n                // Use the same size for width and height\n                arrowSize = [arrowSize, arrowSize];\n            }\n\n            var symbolWidth = arrowSize[0];\n            var symbolHeight = arrowSize[1];\n\n            each$1([{\n                rotate: opt.rotation + Math.PI / 2,\n                offset: arrowOffset[0],\n                r: 0\n            }, {\n                rotate: opt.rotation - Math.PI / 2,\n                offset: arrowOffset[1],\n                r: Math.sqrt((pt1[0] - pt2[0]) * (pt1[0] - pt2[0])\n                    + (pt1[1] - pt2[1]) * (pt1[1] - pt2[1]))\n            }], function (point, index) {\n                if (arrows[index] !== 'none' && arrows[index] != null) {\n                    var symbol = createSymbol(\n                        arrows[index],\n                        -symbolWidth / 2,\n                        -symbolHeight / 2,\n                        symbolWidth,\n                        symbolHeight,\n                        lineStyle.stroke,\n                        true\n                    );\n\n                    // Calculate arrow position with offset\n                    var r = point.r + point.offset;\n                    var pos = [\n                        pt1[0] + r * Math.cos(opt.rotation),\n                        pt1[1] - r * Math.sin(opt.rotation)\n                    ];\n\n                    symbol.attr({\n                        rotation: point.rotate,\n                        position: pos,\n                        silent: true,\n                        z2: 11\n                    });\n                    this.group.add(symbol);\n                }\n            }, this);\n        }\n    },\n\n    /**\n     * @private\n     */\n    axisTickLabel: function () {\n        var axisModel = this.axisModel;\n        var opt = this.opt;\n\n        var tickEls = buildAxisTick(this, axisModel, opt);\n        var labelEls = buildAxisLabel(this, axisModel, opt);\n\n        fixMinMaxLabelShow(axisModel, labelEls, tickEls);\n    },\n\n    /**\n     * @private\n     */\n    axisName: function () {\n        var opt = this.opt;\n        var axisModel = this.axisModel;\n        var name = retrieve(opt.axisName, axisModel.get('name'));\n\n        if (!name) {\n            return;\n        }\n\n        var nameLocation = axisModel.get('nameLocation');\n        var nameDirection = opt.nameDirection;\n        var textStyleModel = axisModel.getModel('nameTextStyle');\n        var gap = axisModel.get('nameGap') || 0;\n\n        var extent = this.axisModel.axis.getExtent();\n        var gapSignal = extent[0] > extent[1] ? -1 : 1;\n        var pos = [\n            nameLocation === 'start'\n                ? extent[0] - gapSignal * gap\n                : nameLocation === 'end'\n                ? extent[1] + gapSignal * gap\n                : (extent[0] + extent[1]) / 2, // 'middle'\n            // Reuse labelOffset.\n            isNameLocationCenter(nameLocation) ? opt.labelOffset + nameDirection * gap : 0\n        ];\n\n        var labelLayout;\n\n        var nameRotation = axisModel.get('nameRotate');\n        if (nameRotation != null) {\n            nameRotation = nameRotation * PI$2 / 180; // To radian.\n        }\n\n        var axisNameAvailableWidth;\n\n        if (isNameLocationCenter(nameLocation)) {\n            labelLayout = innerTextLayout(\n                opt.rotation,\n                nameRotation != null ? nameRotation : opt.rotation, // Adapt to axis.\n                nameDirection\n            );\n        }\n        else {\n            labelLayout = endTextLayout(\n                opt, nameLocation, nameRotation || 0, extent\n            );\n\n            axisNameAvailableWidth = opt.axisNameAvailableWidth;\n            if (axisNameAvailableWidth != null) {\n                axisNameAvailableWidth = Math.abs(\n                    axisNameAvailableWidth / Math.sin(labelLayout.rotation)\n                );\n                !isFinite(axisNameAvailableWidth) && (axisNameAvailableWidth = null);\n            }\n        }\n\n        var textFont = textStyleModel.getFont();\n\n        var truncateOpt = axisModel.get('nameTruncate', true) || {};\n        var ellipsis = truncateOpt.ellipsis;\n        var maxWidth = retrieve(\n            opt.nameTruncateMaxWidth, truncateOpt.maxWidth, axisNameAvailableWidth\n        );\n        // FIXME\n        // truncate rich text? (consider performance)\n        var truncatedText = (ellipsis != null && maxWidth != null)\n            ? truncateText$1(\n                name, maxWidth, textFont, ellipsis,\n                {minChar: 2, placeholder: truncateOpt.placeholder}\n            )\n            : name;\n\n        var tooltipOpt = axisModel.get('tooltip', true);\n\n        var mainType = axisModel.mainType;\n        var formatterParams = {\n            componentType: mainType,\n            name: name,\n            $vars: ['name']\n        };\n        formatterParams[mainType + 'Index'] = axisModel.componentIndex;\n\n        var textEl = new Text({\n            // Id for animation\n            anid: 'name',\n\n            __fullText: name,\n            __truncatedText: truncatedText,\n\n            position: pos,\n            rotation: labelLayout.rotation,\n            silent: isLabelSilent(axisModel),\n            z2: 1,\n            tooltip: (tooltipOpt && tooltipOpt.show)\n                ? extend({\n                    content: name,\n                    formatter: function () {\n                        return name;\n                    },\n                    formatterParams: formatterParams\n                }, tooltipOpt)\n                : null\n        });\n\n        setTextStyle(textEl.style, textStyleModel, {\n            text: truncatedText,\n            textFont: textFont,\n            textFill: textStyleModel.getTextColor()\n                || axisModel.get('axisLine.lineStyle.color'),\n            textAlign: textStyleModel.get('align')\n                || labelLayout.textAlign,\n            textVerticalAlign: textStyleModel.get('verticalAlign')\n                || labelLayout.textVerticalAlign\n        });\n\n        if (axisModel.get('triggerEvent')) {\n            textEl.eventData = makeAxisEventDataBase(axisModel);\n            textEl.eventData.targetType = 'axisName';\n            textEl.eventData.name = name;\n        }\n\n        // FIXME\n        this._dumbGroup.add(textEl);\n        textEl.updateTransform();\n\n        this.group.add(textEl);\n\n        textEl.decomposeTransform();\n    }\n\n};\n\nvar makeAxisEventDataBase = AxisBuilder.makeAxisEventDataBase = function (axisModel) {\n    var eventData = {\n        componentType: axisModel.mainType,\n        componentIndex: axisModel.componentIndex\n    };\n    eventData[axisModel.mainType + 'Index'] = axisModel.componentIndex;\n    return eventData;\n};\n\n/**\n * @public\n * @static\n * @param {Object} opt\n * @param {number} axisRotation in radian\n * @param {number} textRotation in radian\n * @param {number} direction\n * @return {Object} {\n *  rotation, // according to axis\n *  textAlign,\n *  textVerticalAlign\n * }\n */\nvar innerTextLayout = AxisBuilder.innerTextLayout = function (axisRotation, textRotation, direction) {\n    var rotationDiff = remRadian(textRotation - axisRotation);\n    var textAlign;\n    var textVerticalAlign;\n\n    if (isRadianAroundZero(rotationDiff)) { // Label is parallel with axis line.\n        textVerticalAlign = direction > 0 ? 'top' : 'bottom';\n        textAlign = 'center';\n    }\n    else if (isRadianAroundZero(rotationDiff - PI$2)) { // Label is inverse parallel with axis line.\n        textVerticalAlign = direction > 0 ? 'bottom' : 'top';\n        textAlign = 'center';\n    }\n    else {\n        textVerticalAlign = 'middle';\n\n        if (rotationDiff > 0 && rotationDiff < PI$2) {\n            textAlign = direction > 0 ? 'right' : 'left';\n        }\n        else {\n            textAlign = direction > 0 ? 'left' : 'right';\n        }\n    }\n\n    return {\n        rotation: rotationDiff,\n        textAlign: textAlign,\n        textVerticalAlign: textVerticalAlign\n    };\n};\n\nfunction endTextLayout(opt, textPosition, textRotate, extent) {\n    var rotationDiff = remRadian(textRotate - opt.rotation);\n    var textAlign;\n    var textVerticalAlign;\n    var inverse = extent[0] > extent[1];\n    var onLeft = (textPosition === 'start' && !inverse)\n        || (textPosition !== 'start' && inverse);\n\n    if (isRadianAroundZero(rotationDiff - PI$2 / 2)) {\n        textVerticalAlign = onLeft ? 'bottom' : 'top';\n        textAlign = 'center';\n    }\n    else if (isRadianAroundZero(rotationDiff - PI$2 * 1.5)) {\n        textVerticalAlign = onLeft ? 'top' : 'bottom';\n        textAlign = 'center';\n    }\n    else {\n        textVerticalAlign = 'middle';\n        if (rotationDiff < PI$2 * 1.5 && rotationDiff > PI$2 / 2) {\n            textAlign = onLeft ? 'left' : 'right';\n        }\n        else {\n            textAlign = onLeft ? 'right' : 'left';\n        }\n    }\n\n    return {\n        rotation: rotationDiff,\n        textAlign: textAlign,\n        textVerticalAlign: textVerticalAlign\n    };\n}\n\nvar isLabelSilent = AxisBuilder.isLabelSilent = function (axisModel) {\n    var tooltipOpt = axisModel.get('tooltip');\n    return axisModel.get('silent')\n        // Consider mouse cursor, add these restrictions.\n        || !(\n            axisModel.get('triggerEvent') || (tooltipOpt && tooltipOpt.show)\n        );\n};\n\nfunction fixMinMaxLabelShow(axisModel, labelEls, tickEls) {\n    if (shouldShowAllLabels(axisModel.axis)) {\n        return;\n    }\n\n    // If min or max are user set, we need to check\n    // If the tick on min(max) are overlap on their neighbour tick\n    // If they are overlapped, we need to hide the min(max) tick label\n    var showMinLabel = axisModel.get('axisLabel.showMinLabel');\n    var showMaxLabel = axisModel.get('axisLabel.showMaxLabel');\n\n    // FIXME\n    // Have not consider onBand yet, where tick els is more than label els.\n\n    labelEls = labelEls || [];\n    tickEls = tickEls || [];\n\n    var firstLabel = labelEls[0];\n    var nextLabel = labelEls[1];\n    var lastLabel = labelEls[labelEls.length - 1];\n    var prevLabel = labelEls[labelEls.length - 2];\n\n    var firstTick = tickEls[0];\n    var nextTick = tickEls[1];\n    var lastTick = tickEls[tickEls.length - 1];\n    var prevTick = tickEls[tickEls.length - 2];\n\n    if (showMinLabel === false) {\n        ignoreEl(firstLabel);\n        ignoreEl(firstTick);\n    }\n    else if (isTwoLabelOverlapped(firstLabel, nextLabel)) {\n        if (showMinLabel) {\n            ignoreEl(nextLabel);\n            ignoreEl(nextTick);\n        }\n        else {\n            ignoreEl(firstLabel);\n            ignoreEl(firstTick);\n        }\n    }\n\n    if (showMaxLabel === false) {\n        ignoreEl(lastLabel);\n        ignoreEl(lastTick);\n    }\n    else if (isTwoLabelOverlapped(prevLabel, lastLabel)) {\n        if (showMaxLabel) {\n            ignoreEl(prevLabel);\n            ignoreEl(prevTick);\n        }\n        else {\n            ignoreEl(lastLabel);\n            ignoreEl(lastTick);\n        }\n    }\n}\n\nfunction ignoreEl(el) {\n    el && (el.ignore = true);\n}\n\nfunction isTwoLabelOverlapped(current, next, labelLayout) {\n    // current and next has the same rotation.\n    var firstRect = current && current.getBoundingRect().clone();\n    var nextRect = next && next.getBoundingRect().clone();\n\n    if (!firstRect || !nextRect) {\n        return;\n    }\n\n    // When checking intersect of two rotated labels, we use mRotationBack\n    // to avoid that boundingRect is enlarge when using `boundingRect.applyTransform`.\n    var mRotationBack = identity([]);\n    rotate(mRotationBack, mRotationBack, -current.rotation);\n\n    firstRect.applyTransform(mul$1([], mRotationBack, current.getLocalTransform()));\n    nextRect.applyTransform(mul$1([], mRotationBack, next.getLocalTransform()));\n\n    return firstRect.intersect(nextRect);\n}\n\nfunction isNameLocationCenter(nameLocation) {\n    return nameLocation === 'middle' || nameLocation === 'center';\n}\n\nfunction buildAxisTick(axisBuilder, axisModel, opt) {\n    var axis = axisModel.axis;\n\n    if (!axisModel.get('axisTick.show') || axis.scale.isBlank()) {\n        return;\n    }\n\n    var tickModel = axisModel.getModel('axisTick');\n\n    var lineStyleModel = tickModel.getModel('lineStyle');\n    var tickLen = tickModel.get('length');\n\n    var ticksCoords = axis.getTicksCoords();\n\n    var pt1 = [];\n    var pt2 = [];\n    var matrix = axisBuilder._transform;\n\n    var tickEls = [];\n\n    for (var i = 0; i < ticksCoords.length; i++) {\n        var tickCoord = ticksCoords[i].coord;\n\n        pt1[0] = tickCoord;\n        pt1[1] = 0;\n        pt2[0] = tickCoord;\n        pt2[1] = opt.tickDirection * tickLen;\n\n        if (matrix) {\n            applyTransform(pt1, pt1, matrix);\n            applyTransform(pt2, pt2, matrix);\n        }\n        // Tick line, Not use group transform to have better line draw\n        var tickEl = new Line({\n            // Id for animation\n            anid: 'tick_' + ticksCoords[i].tickValue,\n            subPixelOptimize: true,\n            shape: {\n                x1: pt1[0],\n                y1: pt1[1],\n                x2: pt2[0],\n                y2: pt2[1]\n            },\n            style: defaults(\n                lineStyleModel.getLineStyle(),\n                {\n                    stroke: axisModel.get('axisLine.lineStyle.color')\n                }\n            ),\n            z2: 2,\n            silent: true\n        });\n        axisBuilder.group.add(tickEl);\n        tickEls.push(tickEl);\n    }\n\n    return tickEls;\n}\n\nfunction buildAxisLabel(axisBuilder, axisModel, opt) {\n    var axis = axisModel.axis;\n    var show = retrieve(opt.axisLabelShow, axisModel.get('axisLabel.show'));\n\n    if (!show || axis.scale.isBlank()) {\n        return;\n    }\n\n    var labelModel = axisModel.getModel('axisLabel');\n    var labelMargin = labelModel.get('margin');\n    var labels = axis.getViewLabels();\n\n    // Special label rotate.\n    var labelRotation = (\n        retrieve(opt.labelRotate, labelModel.get('rotate')) || 0\n    ) * PI$2 / 180;\n\n    var labelLayout = innerTextLayout(opt.rotation, labelRotation, opt.labelDirection);\n    var rawCategoryData = axisModel.getCategories && axisModel.getCategories(true);\n\n    var labelEls = [];\n    var silent = isLabelSilent(axisModel);\n    var triggerEvent = axisModel.get('triggerEvent');\n\n    each$1(labels, function (labelItem, index) {\n        var tickValue = labelItem.tickValue;\n        var formattedLabel = labelItem.formattedLabel;\n        var rawLabel = labelItem.rawLabel;\n\n        var itemLabelModel = labelModel;\n        if (rawCategoryData && rawCategoryData[tickValue] && rawCategoryData[tickValue].textStyle) {\n            itemLabelModel = new Model(\n                rawCategoryData[tickValue].textStyle, labelModel, axisModel.ecModel\n            );\n        }\n\n        var textColor = itemLabelModel.getTextColor()\n            || axisModel.get('axisLine.lineStyle.color');\n\n        var tickCoord = axis.dataToCoord(tickValue);\n        var pos = [\n            tickCoord,\n            opt.labelOffset + opt.labelDirection * labelMargin\n        ];\n\n        var textEl = new Text({\n            // Id for animation\n            anid: 'label_' + tickValue,\n            position: pos,\n            rotation: labelLayout.rotation,\n            silent: silent,\n            z2: 10\n        });\n\n        setTextStyle(textEl.style, itemLabelModel, {\n            text: formattedLabel,\n            textAlign: itemLabelModel.getShallow('align', true)\n                || labelLayout.textAlign,\n            textVerticalAlign: itemLabelModel.getShallow('verticalAlign', true)\n                || itemLabelModel.getShallow('baseline', true)\n                || labelLayout.textVerticalAlign,\n            textFill: typeof textColor === 'function'\n                ? textColor(\n                    // (1) In category axis with data zoom, tick is not the original\n                    // index of axis.data. So tick should not be exposed to user\n                    // in category axis.\n                    // (2) Compatible with previous version, which always use formatted label as\n                    // input. But in interval scale the formatted label is like '223,445', which\n                    // maked user repalce ','. So we modify it to return original val but remain\n                    // it as 'string' to avoid error in replacing.\n                    axis.type === 'category'\n                        ? rawLabel\n                        : axis.type === 'value'\n                        ? tickValue + ''\n                        : tickValue,\n                    index\n                )\n                : textColor\n        });\n\n        // Pack data for mouse event\n        if (triggerEvent) {\n            textEl.eventData = makeAxisEventDataBase(axisModel);\n            textEl.eventData.targetType = 'axisLabel';\n            textEl.eventData.value = rawLabel;\n        }\n\n        // FIXME\n        axisBuilder._dumbGroup.add(textEl);\n        textEl.updateTransform();\n\n        labelEls.push(textEl);\n        axisBuilder.group.add(textEl);\n\n        textEl.decomposeTransform();\n\n    });\n\n    return labelEls;\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar each$6 = each$1;\nvar curry$1 = curry;\n\n// Build axisPointerModel, mergin tooltip.axisPointer model for each axis.\n// allAxesInfo should be updated when setOption performed.\nfunction collect(ecModel, api) {\n    var result = {\n        /**\n         * key: makeKey(axis.model)\n         * value: {\n         *      axis,\n         *      coordSys,\n         *      axisPointerModel,\n         *      triggerTooltip,\n         *      involveSeries,\n         *      snap,\n         *      seriesModels,\n         *      seriesDataCount\n         * }\n         */\n        axesInfo: {},\n        seriesInvolved: false,\n        /**\n         * key: makeKey(coordSys.model)\n         * value: Object: key makeKey(axis.model), value: axisInfo\n         */\n        coordSysAxesInfo: {},\n        coordSysMap: {}\n    };\n\n    collectAxesInfo(result, ecModel, api);\n\n    // Check seriesInvolved for performance, in case too many series in some chart.\n    result.seriesInvolved && collectSeriesInfo(result, ecModel);\n\n    return result;\n}\n\nfunction collectAxesInfo(result, ecModel, api) {\n    var globalTooltipModel = ecModel.getComponent('tooltip');\n    var globalAxisPointerModel = ecModel.getComponent('axisPointer');\n    // links can only be set on global.\n    var linksOption = globalAxisPointerModel.get('link', true) || [];\n    var linkGroups = [];\n\n    // Collect axes info.\n    each$6(api.getCoordinateSystems(), function (coordSys) {\n        // Some coordinate system do not support axes, like geo.\n        if (!coordSys.axisPointerEnabled) {\n            return;\n        }\n\n        var coordSysKey = makeKey(coordSys.model);\n        var axesInfoInCoordSys = result.coordSysAxesInfo[coordSysKey] = {};\n        result.coordSysMap[coordSysKey] = coordSys;\n\n        // Set tooltip (like 'cross') is a convienent way to show axisPointer\n        // for user. So we enable seting tooltip on coordSys model.\n        var coordSysModel = coordSys.model;\n        var baseTooltipModel = coordSysModel.getModel('tooltip', globalTooltipModel);\n\n        each$6(coordSys.getAxes(), curry$1(saveTooltipAxisInfo, false, null));\n\n        // If axis tooltip used, choose tooltip axis for each coordSys.\n        // Notice this case: coordSys is `grid` but not `cartesian2D` here.\n        if (coordSys.getTooltipAxes\n            && globalTooltipModel\n            // If tooltip.showContent is set as false, tooltip will not\n            // show but axisPointer will show as normal.\n            && baseTooltipModel.get('show')\n        ) {\n            // Compatible with previous logic. But series.tooltip.trigger: 'axis'\n            // or series.data[n].tooltip.trigger: 'axis' are not support any more.\n            var triggerAxis = baseTooltipModel.get('trigger') === 'axis';\n            var cross = baseTooltipModel.get('axisPointer.type') === 'cross';\n            var tooltipAxes = coordSys.getTooltipAxes(baseTooltipModel.get('axisPointer.axis'));\n            if (triggerAxis || cross) {\n                each$6(tooltipAxes.baseAxes, curry$1(\n                    saveTooltipAxisInfo, cross ? 'cross' : true, triggerAxis\n                ));\n            }\n            if (cross) {\n                each$6(tooltipAxes.otherAxes, curry$1(saveTooltipAxisInfo, 'cross', false));\n            }\n        }\n\n        // fromTooltip: true | false | 'cross'\n        // triggerTooltip: true | false | null\n        function saveTooltipAxisInfo(fromTooltip, triggerTooltip, axis) {\n            var axisPointerModel = axis.model.getModel('axisPointer', globalAxisPointerModel);\n\n            var axisPointerShow = axisPointerModel.get('show');\n            if (!axisPointerShow || (\n                axisPointerShow === 'auto'\n                && !fromTooltip\n                && !isHandleTrigger(axisPointerModel)\n            )) {\n                return;\n            }\n\n            if (triggerTooltip == null) {\n                triggerTooltip = axisPointerModel.get('triggerTooltip');\n            }\n\n            axisPointerModel = fromTooltip\n                ? makeAxisPointerModel(\n                    axis, baseTooltipModel, globalAxisPointerModel, ecModel,\n                    fromTooltip, triggerTooltip\n                )\n                : axisPointerModel;\n\n            var snap = axisPointerModel.get('snap');\n            var key = makeKey(axis.model);\n            var involveSeries = triggerTooltip || snap || axis.type === 'category';\n\n            // If result.axesInfo[key] exist, override it (tooltip has higher priority).\n            var axisInfo = result.axesInfo[key] = {\n                key: key,\n                axis: axis,\n                coordSys: coordSys,\n                axisPointerModel: axisPointerModel,\n                triggerTooltip: triggerTooltip,\n                involveSeries: involveSeries,\n                snap: snap,\n                useHandle: isHandleTrigger(axisPointerModel),\n                seriesModels: []\n            };\n            axesInfoInCoordSys[key] = axisInfo;\n            result.seriesInvolved |= involveSeries;\n\n            var groupIndex = getLinkGroupIndex(linksOption, axis);\n            if (groupIndex != null) {\n                var linkGroup = linkGroups[groupIndex] || (linkGroups[groupIndex] = {axesInfo: {}});\n                linkGroup.axesInfo[key] = axisInfo;\n                linkGroup.mapper = linksOption[groupIndex].mapper;\n                axisInfo.linkGroup = linkGroup;\n            }\n        }\n    });\n}\n\nfunction makeAxisPointerModel(\n    axis, baseTooltipModel, globalAxisPointerModel, ecModel, fromTooltip, triggerTooltip\n) {\n    var tooltipAxisPointerModel = baseTooltipModel.getModel('axisPointer');\n    var volatileOption = {};\n\n    each$6(\n        [\n            'type', 'snap', 'lineStyle', 'shadowStyle', 'label',\n            'animation', 'animationDurationUpdate', 'animationEasingUpdate', 'z'\n        ],\n        function (field) {\n            volatileOption[field] = clone(tooltipAxisPointerModel.get(field));\n        }\n    );\n\n    // category axis do not auto snap, otherwise some tick that do not\n    // has value can not be hovered. value/time/log axis default snap if\n    // triggered from tooltip and trigger tooltip.\n    volatileOption.snap = axis.type !== 'category' && !!triggerTooltip;\n\n    // Compatibel with previous behavior, tooltip axis do not show label by default.\n    // Only these properties can be overrided from tooltip to axisPointer.\n    if (tooltipAxisPointerModel.get('type') === 'cross') {\n        volatileOption.type = 'line';\n    }\n    var labelOption = volatileOption.label || (volatileOption.label = {});\n    // Follow the convention, do not show label when triggered by tooltip by default.\n    labelOption.show == null && (labelOption.show = false);\n\n    if (fromTooltip === 'cross') {\n        // When 'cross', both axes show labels.\n        var tooltipAxisPointerLabelShow = tooltipAxisPointerModel.get('label.show');\n        labelOption.show = tooltipAxisPointerLabelShow != null ? tooltipAxisPointerLabelShow : true;\n        // If triggerTooltip, this is a base axis, which should better not use cross style\n        // (cross style is dashed by default)\n        if (!triggerTooltip) {\n            var crossStyle = volatileOption.lineStyle = tooltipAxisPointerModel.get('crossStyle');\n            crossStyle && defaults(labelOption, crossStyle.textStyle);\n        }\n    }\n\n    return axis.model.getModel(\n        'axisPointer',\n        new Model(volatileOption, globalAxisPointerModel, ecModel)\n    );\n}\n\nfunction collectSeriesInfo(result, ecModel) {\n    // Prepare data for axis trigger\n    ecModel.eachSeries(function (seriesModel) {\n\n        // Notice this case: this coordSys is `cartesian2D` but not `grid`.\n        var coordSys = seriesModel.coordinateSystem;\n        var seriesTooltipTrigger = seriesModel.get('tooltip.trigger', true);\n        var seriesTooltipShow = seriesModel.get('tooltip.show', true);\n        if (!coordSys\n            || seriesTooltipTrigger === 'none'\n            || seriesTooltipTrigger === false\n            || seriesTooltipTrigger === 'item'\n            || seriesTooltipShow === false\n            || seriesModel.get('axisPointer.show', true) === false\n        ) {\n            return;\n        }\n\n        each$6(result.coordSysAxesInfo[makeKey(coordSys.model)], function (axisInfo) {\n            var axis = axisInfo.axis;\n            if (coordSys.getAxis(axis.dim) === axis) {\n                axisInfo.seriesModels.push(seriesModel);\n                axisInfo.seriesDataCount == null && (axisInfo.seriesDataCount = 0);\n                axisInfo.seriesDataCount += seriesModel.getData().count();\n            }\n        });\n\n    }, this);\n}\n\n/**\n * For example:\n * {\n *     axisPointer: {\n *         links: [{\n *             xAxisIndex: [2, 4],\n *             yAxisIndex: 'all'\n *         }, {\n *             xAxisId: ['a5', 'a7'],\n *             xAxisName: 'xxx'\n *         }]\n *     }\n * }\n */\nfunction getLinkGroupIndex(linksOption, axis) {\n    var axisModel = axis.model;\n    var dim = axis.dim;\n    for (var i = 0; i < linksOption.length; i++) {\n        var linkOption = linksOption[i] || {};\n        if (checkPropInLink(linkOption[dim + 'AxisId'], axisModel.id)\n            || checkPropInLink(linkOption[dim + 'AxisIndex'], axisModel.componentIndex)\n            || checkPropInLink(linkOption[dim + 'AxisName'], axisModel.name)\n        ) {\n            return i;\n        }\n    }\n}\n\nfunction checkPropInLink(linkPropValue, axisPropValue) {\n    return linkPropValue === 'all'\n        || (isArray(linkPropValue) && indexOf(linkPropValue, axisPropValue) >= 0)\n        || linkPropValue === axisPropValue;\n}\n\nfunction fixValue(axisModel) {\n    var axisInfo = getAxisInfo(axisModel);\n    if (!axisInfo) {\n        return;\n    }\n\n    var axisPointerModel = axisInfo.axisPointerModel;\n    var scale = axisInfo.axis.scale;\n    var option = axisPointerModel.option;\n    var status = axisPointerModel.get('status');\n    var value = axisPointerModel.get('value');\n\n    // Parse init value for category and time axis.\n    if (value != null) {\n        value = scale.parse(value);\n    }\n\n    var useHandle = isHandleTrigger(axisPointerModel);\n    // If `handle` used, `axisPointer` will always be displayed, so value\n    // and status should be initialized.\n    if (status == null) {\n        option.status = useHandle ? 'show' : 'hide';\n    }\n\n    var extent = scale.getExtent().slice();\n    extent[0] > extent[1] && extent.reverse();\n\n    if (// Pick a value on axis when initializing.\n        value == null\n        // If both `handle` and `dataZoom` are used, value may be out of axis extent,\n        // where we should re-pick a value to keep `handle` displaying normally.\n        || value > extent[1]\n    ) {\n        // Make handle displayed on the end of the axis when init, which looks better.\n        value = extent[1];\n    }\n    if (value < extent[0]) {\n        value = extent[0];\n    }\n\n    option.value = value;\n\n    if (useHandle) {\n        option.status = axisInfo.axis.scale.isBlank() ? 'hide' : 'show';\n    }\n}\n\nfunction getAxisInfo(axisModel) {\n    var coordSysAxesInfo = (axisModel.ecModel.getComponent('axisPointer') || {}).coordSysAxesInfo;\n    return coordSysAxesInfo && coordSysAxesInfo.axesInfo[makeKey(axisModel)];\n}\n\nfunction getAxisPointerModel(axisModel) {\n    var axisInfo = getAxisInfo(axisModel);\n    return axisInfo && axisInfo.axisPointerModel;\n}\n\nfunction isHandleTrigger(axisPointerModel) {\n    return !!axisPointerModel.get('handle.show');\n}\n\n/**\n * @param {module:echarts/model/Model} model\n * @return {string} unique key\n */\nfunction makeKey(model) {\n    return model.type + '||' + model.id;\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Base class of AxisView.\n */\nvar AxisView = extendComponentView({\n\n    type: 'axis',\n\n    /**\n     * @private\n     */\n    _axisPointer: null,\n\n    /**\n     * @protected\n     * @type {string}\n     */\n    axisPointerClass: null,\n\n    /**\n     * @override\n     */\n    render: function (axisModel, ecModel, api, payload) {\n        // FIXME\n        // This process should proformed after coordinate systems updated\n        // (axis scale updated), and should be performed each time update.\n        // So put it here temporarily, although it is not appropriate to\n        // put a model-writing procedure in `view`.\n        this.axisPointerClass && fixValue(axisModel);\n\n        AxisView.superApply(this, 'render', arguments);\n\n        updateAxisPointer(this, axisModel, ecModel, api, payload, true);\n    },\n\n    /**\n     * Action handler.\n     * @public\n     * @param {module:echarts/coord/cartesian/AxisModel} axisModel\n     * @param {module:echarts/model/Global} ecModel\n     * @param {module:echarts/ExtensionAPI} api\n     * @param {Object} payload\n     */\n    updateAxisPointer: function (axisModel, ecModel, api, payload, force) {\n        updateAxisPointer(this, axisModel, ecModel, api, payload, false);\n    },\n\n    /**\n     * @override\n     */\n    remove: function (ecModel, api) {\n        var axisPointer = this._axisPointer;\n        axisPointer && axisPointer.remove(api);\n        AxisView.superApply(this, 'remove', arguments);\n    },\n\n    /**\n     * @override\n     */\n    dispose: function (ecModel, api) {\n        disposeAxisPointer(this, api);\n        AxisView.superApply(this, 'dispose', arguments);\n    }\n\n});\n\nfunction updateAxisPointer(axisView, axisModel, ecModel, api, payload, forceRender) {\n    var Clazz = AxisView.getAxisPointerClass(axisView.axisPointerClass);\n    if (!Clazz) {\n        return;\n    }\n    var axisPointerModel = getAxisPointerModel(axisModel);\n    axisPointerModel\n        ? (axisView._axisPointer || (axisView._axisPointer = new Clazz()))\n            .render(axisModel, axisPointerModel, api, forceRender)\n        : disposeAxisPointer(axisView, api);\n}\n\nfunction disposeAxisPointer(axisView, ecModel, api) {\n    var axisPointer = axisView._axisPointer;\n    axisPointer && axisPointer.dispose(ecModel, api);\n    axisView._axisPointer = null;\n}\n\nvar axisPointerClazz = [];\n\nAxisView.registerAxisPointerClass = function (type, clazz) {\n    if (__DEV__) {\n        if (axisPointerClazz[type]) {\n            throw new Error('axisPointer ' + type + ' exists');\n        }\n    }\n    axisPointerClazz[type] = clazz;\n};\n\nAxisView.getAxisPointerClass = function (type) {\n    return type && axisPointerClazz[type];\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Can only be called after coordinate system creation stage.\n * (Can be called before coordinate system update stage).\n *\n * @param {Object} opt {labelInside}\n * @return {Object} {\n *  position, rotation, labelDirection, labelOffset,\n *  tickDirection, labelRotate, z2\n * }\n */\nfunction layout$1(gridModel, axisModel, opt) {\n    opt = opt || {};\n    var grid = gridModel.coordinateSystem;\n    var axis = axisModel.axis;\n    var layout = {};\n    var otherAxisOnZeroOf = axis.getAxesOnZeroOf()[0];\n\n    var rawAxisPosition = axis.position;\n    var axisPosition = otherAxisOnZeroOf ? 'onZero' : rawAxisPosition;\n    var axisDim = axis.dim;\n\n    var rect = grid.getRect();\n    var rectBound = [rect.x, rect.x + rect.width, rect.y, rect.y + rect.height];\n    var idx = {left: 0, right: 1, top: 0, bottom: 1, onZero: 2};\n    var axisOffset = axisModel.get('offset') || 0;\n\n    var posBound = axisDim === 'x'\n        ? [rectBound[2] - axisOffset, rectBound[3] + axisOffset]\n        : [rectBound[0] - axisOffset, rectBound[1] + axisOffset];\n\n    if (otherAxisOnZeroOf) {\n        var onZeroCoord = otherAxisOnZeroOf.toGlobalCoord(otherAxisOnZeroOf.dataToCoord(0));\n        posBound[idx.onZero] = Math.max(Math.min(onZeroCoord, posBound[1]), posBound[0]);\n    }\n\n    // Axis position\n    layout.position = [\n        axisDim === 'y' ? posBound[idx[axisPosition]] : rectBound[0],\n        axisDim === 'x' ? posBound[idx[axisPosition]] : rectBound[3]\n    ];\n\n    // Axis rotation\n    layout.rotation = Math.PI / 2 * (axisDim === 'x' ? 0 : 1);\n\n    // Tick and label direction, x y is axisDim\n    var dirMap = {top: -1, bottom: 1, left: -1, right: 1};\n\n    layout.labelDirection = layout.tickDirection = layout.nameDirection = dirMap[rawAxisPosition];\n    layout.labelOffset = otherAxisOnZeroOf ? posBound[idx[rawAxisPosition]] - posBound[idx.onZero] : 0;\n\n    if (axisModel.get('axisTick.inside')) {\n        layout.tickDirection = -layout.tickDirection;\n    }\n    if (retrieve(opt.labelInside, axisModel.get('axisLabel.inside'))) {\n        layout.labelDirection = -layout.labelDirection;\n    }\n\n    // Special label rotation\n    var labelRotate = axisModel.get('axisLabel.rotate');\n    layout.labelRotate = axisPosition === 'top' ? -labelRotate : labelRotate;\n\n    // Over splitLine and splitArea\n    layout.z2 = 1;\n\n    return layout;\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar axisBuilderAttrs = [\n    'axisLine', 'axisTickLabel', 'axisName'\n];\nvar selfBuilderAttrs = [\n    'splitArea', 'splitLine'\n];\n\n// function getAlignWithLabel(model, axisModel) {\n//     var alignWithLabel = model.get('alignWithLabel');\n//     if (alignWithLabel === 'auto') {\n//         alignWithLabel = axisModel.get('axisTick.alignWithLabel');\n//     }\n//     return alignWithLabel;\n// }\n\nvar CartesianAxisView = AxisView.extend({\n\n    type: 'cartesianAxis',\n\n    axisPointerClass: 'CartesianAxisPointer',\n\n    /**\n     * @override\n     */\n    render: function (axisModel, ecModel, api, payload) {\n\n        this.group.removeAll();\n\n        var oldAxisGroup = this._axisGroup;\n        this._axisGroup = new Group();\n\n        this.group.add(this._axisGroup);\n\n        if (!axisModel.get('show')) {\n            return;\n        }\n\n        var gridModel = axisModel.getCoordSysModel();\n\n        var layout = layout$1(gridModel, axisModel);\n\n        var axisBuilder = new AxisBuilder(axisModel, layout);\n\n        each$1(axisBuilderAttrs, axisBuilder.add, axisBuilder);\n\n        this._axisGroup.add(axisBuilder.getGroup());\n\n        each$1(selfBuilderAttrs, function (name) {\n            if (axisModel.get(name + '.show')) {\n                this['_' + name](axisModel, gridModel);\n            }\n        }, this);\n\n        groupTransition(oldAxisGroup, this._axisGroup, axisModel);\n\n        CartesianAxisView.superCall(this, 'render', axisModel, ecModel, api, payload);\n    },\n\n    remove: function () {\n        this._splitAreaColors = null;\n    },\n\n    /**\n     * @param {module:echarts/coord/cartesian/AxisModel} axisModel\n     * @param {module:echarts/coord/cartesian/GridModel} gridModel\n     * @private\n     */\n    _splitLine: function (axisModel, gridModel) {\n        var axis = axisModel.axis;\n\n        if (axis.scale.isBlank()) {\n            return;\n        }\n\n        var splitLineModel = axisModel.getModel('splitLine');\n        var lineStyleModel = splitLineModel.getModel('lineStyle');\n        var lineColors = lineStyleModel.get('color');\n\n        lineColors = isArray(lineColors) ? lineColors : [lineColors];\n\n        var gridRect = gridModel.coordinateSystem.getRect();\n        var isHorizontal = axis.isHorizontal();\n\n        var lineCount = 0;\n\n        var ticksCoords = axis.getTicksCoords({\n            tickModel: splitLineModel\n        });\n\n        var p1 = [];\n        var p2 = [];\n\n        // Simple optimization\n        // Batching the lines if color are the same\n        var lineStyle = lineStyleModel.getLineStyle();\n        for (var i = 0; i < ticksCoords.length; i++) {\n            var tickCoord = axis.toGlobalCoord(ticksCoords[i].coord);\n\n            if (isHorizontal) {\n                p1[0] = tickCoord;\n                p1[1] = gridRect.y;\n                p2[0] = tickCoord;\n                p2[1] = gridRect.y + gridRect.height;\n            }\n            else {\n                p1[0] = gridRect.x;\n                p1[1] = tickCoord;\n                p2[0] = gridRect.x + gridRect.width;\n                p2[1] = tickCoord;\n            }\n\n            var colorIndex = (lineCount++) % lineColors.length;\n            var tickValue = ticksCoords[i].tickValue;\n            this._axisGroup.add(new Line({\n                anid: tickValue != null ? 'line_' + ticksCoords[i].tickValue : null,\n                subPixelOptimize: true,\n                shape: {\n                    x1: p1[0],\n                    y1: p1[1],\n                    x2: p2[0],\n                    y2: p2[1]\n                },\n                style: defaults({\n                    stroke: lineColors[colorIndex]\n                }, lineStyle),\n                silent: true\n            }));\n        }\n    },\n\n    /**\n     * @param {module:echarts/coord/cartesian/AxisModel} axisModel\n     * @param {module:echarts/coord/cartesian/GridModel} gridModel\n     * @private\n     */\n    _splitArea: function (axisModel, gridModel) {\n        var axis = axisModel.axis;\n\n        if (axis.scale.isBlank()) {\n            return;\n        }\n\n        var splitAreaModel = axisModel.getModel('splitArea');\n        var areaStyleModel = splitAreaModel.getModel('areaStyle');\n        var areaColors = areaStyleModel.get('color');\n\n        var gridRect = gridModel.coordinateSystem.getRect();\n\n        var ticksCoords = axis.getTicksCoords({\n            tickModel: splitAreaModel,\n            clamp: true\n        });\n\n        if (!ticksCoords.length) {\n            return;\n        }\n\n        // For Making appropriate splitArea animation, the color and anid\n        // should be corresponding to previous one if possible.\n        var areaColorsLen = areaColors.length;\n        var lastSplitAreaColors = this._splitAreaColors;\n        var newSplitAreaColors = createHashMap();\n        var colorIndex = 0;\n        if (lastSplitAreaColors) {\n            for (var i = 0; i < ticksCoords.length; i++) {\n                var cIndex = lastSplitAreaColors.get(ticksCoords[i].tickValue);\n                if (cIndex != null) {\n                    colorIndex = (cIndex + (areaColorsLen - 1) * i) % areaColorsLen;\n                    break;\n                }\n            }\n        }\n\n        var prev = axis.toGlobalCoord(ticksCoords[0].coord);\n\n        var areaStyle = areaStyleModel.getAreaStyle();\n        areaColors = isArray(areaColors) ? areaColors : [areaColors];\n\n        for (var i = 1; i < ticksCoords.length; i++) {\n            var tickCoord = axis.toGlobalCoord(ticksCoords[i].coord);\n\n            var x;\n            var y;\n            var width;\n            var height;\n            if (axis.isHorizontal()) {\n                x = prev;\n                y = gridRect.y;\n                width = tickCoord - x;\n                height = gridRect.height;\n                prev = x + width;\n            }\n            else {\n                x = gridRect.x;\n                y = prev;\n                width = gridRect.width;\n                height = tickCoord - y;\n                prev = y + height;\n            }\n\n            var tickValue = ticksCoords[i - 1].tickValue;\n            tickValue != null && newSplitAreaColors.set(tickValue, colorIndex);\n\n            this._axisGroup.add(new Rect({\n                anid: tickValue != null ? 'area_' + tickValue : null,\n                shape: {\n                    x: x,\n                    y: y,\n                    width: width,\n                    height: height\n                },\n                style: defaults({\n                    fill: areaColors[colorIndex]\n                }, areaStyle),\n                silent: true\n            }));\n\n            colorIndex = (colorIndex + 1) % areaColorsLen;\n        }\n\n        this._splitAreaColors = newSplitAreaColors;\n    }\n});\n\nCartesianAxisView.extend({\n    type: 'xAxis'\n});\nCartesianAxisView.extend({\n    type: 'yAxis'\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n// Grid view\nextendComponentView({\n\n    type: 'grid',\n\n    render: function (gridModel, ecModel) {\n        this.group.removeAll();\n        if (gridModel.get('show')) {\n            this.group.add(new Rect({\n                shape: gridModel.coordinateSystem.getRect(),\n                style: defaults({\n                    fill: gridModel.get('backgroundColor')\n                }, gridModel.getItemStyle()),\n                silent: true,\n                z2: -1\n            }));\n        }\n    }\n\n});\n\nregisterPreprocessor(function (option) {\n    // Only create grid when need\n    if (option.xAxis && option.yAxis && !option.grid) {\n        option.grid = {};\n    }\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n// In case developer forget to include grid component\nregisterVisual(visualSymbol('line', 'circle', 'line'));\nregisterLayout(pointsLayout('line'));\n\n// Down sample after filter\nregisterProcessor(\n    PRIORITY.PROCESSOR.STATISTIC,\n    dataSample('line')\n);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar BaseBarSeries = SeriesModel.extend({\n\n    type: 'series.__base_bar__',\n\n    getInitialData: function (option, ecModel) {\n        return createListFromArray(this.getSource(), this);\n    },\n\n    getMarkerPosition: function (value) {\n        var coordSys = this.coordinateSystem;\n        if (coordSys) {\n            // PENDING if clamp ?\n            var pt = coordSys.dataToPoint(coordSys.clampData(value));\n            var data = this.getData();\n            var offset = data.getLayout('offset');\n            var size = data.getLayout('size');\n            var offsetIndex = coordSys.getBaseAxis().isHorizontal() ? 0 : 1;\n            pt[offsetIndex] += offset + size / 2;\n            return pt;\n        }\n        return [NaN, NaN];\n    },\n\n    defaultOption: {\n        zlevel: 0,                  // 一级层叠\n        z: 2,                       // 二级层叠\n        coordinateSystem: 'cartesian2d',\n        legendHoverLink: true,\n        // stack: null\n\n        // Cartesian coordinate system\n        // xAxisIndex: 0,\n        // yAxisIndex: 0,\n\n        // 最小高度改为0\n        barMinHeight: 0,\n        // 最小角度为0，仅对极坐标系下的柱状图有效\n        barMinAngle: 0,\n        // cursor: null,\n\n        large: false,\n        largeThreshold: 400,\n        progressive: 3e3,\n        progressiveChunkMode: 'mod',\n\n        // barMaxWidth: null,\n        // 默认自适应\n        // barWidth: null,\n        // 柱间距离，默认为柱形宽度的30%，可设固定值\n        // barGap: '30%',\n        // 类目间柱形距离，默认为类目间距的20%，可设固定值\n        // barCategoryGap: '20%',\n        // label: {\n        //      show: false\n        // },\n        itemStyle: {},\n        emphasis: {}\n    }\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nBaseBarSeries.extend({\n\n    type: 'series.bar',\n\n    dependencies: ['grid', 'polar'],\n\n    brushSelector: 'rect',\n\n    /**\n     * @override\n     */\n    getProgressive: function () {\n        // Do not support progressive in normal mode.\n        return this.get('large')\n            ? this.get('progressive')\n            : false;\n    },\n\n    /**\n     * @override\n     */\n    getProgressiveThreshold: function () {\n        // Do not support progressive in normal mode.\n        var progressiveThreshold = this.get('progressiveThreshold');\n        var largeThreshold = this.get('largeThreshold');\n        if (largeThreshold > progressiveThreshold) {\n            progressiveThreshold = largeThreshold;\n        }\n        return progressiveThreshold;\n    }\n\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nfunction setLabel(\n    normalStyle, hoverStyle, itemModel, color, seriesModel, dataIndex, labelPositionOutside\n) {\n    var labelModel = itemModel.getModel('label');\n    var hoverLabelModel = itemModel.getModel('emphasis.label');\n\n    setLabelStyle(\n        normalStyle, hoverStyle, labelModel, hoverLabelModel,\n        {\n            labelFetcher: seriesModel,\n            labelDataIndex: dataIndex,\n            defaultText: getDefaultLabel(seriesModel.getData(), dataIndex),\n            isRectText: true,\n            autoColor: color\n        }\n    );\n\n    fixPosition(normalStyle);\n    fixPosition(hoverStyle);\n}\n\nfunction fixPosition(style, labelPositionOutside) {\n    if (style.textPosition === 'outside') {\n        style.textPosition = labelPositionOutside;\n    }\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar getBarItemStyle = makeStyleMapper(\n    [\n        ['fill', 'color'],\n        ['stroke', 'borderColor'],\n        ['lineWidth', 'borderWidth'],\n        // Compatitable with 2\n        ['stroke', 'barBorderColor'],\n        ['lineWidth', 'barBorderWidth'],\n        ['opacity'],\n        ['shadowBlur'],\n        ['shadowOffsetX'],\n        ['shadowOffsetY'],\n        ['shadowColor']\n    ]\n);\n\nvar barItemStyle = {\n    getBarItemStyle: function (excludes) {\n        var style = getBarItemStyle(this, excludes);\n        if (this.getBorderLineDash) {\n            var lineDash = this.getBorderLineDash();\n            lineDash && (style.lineDash = lineDash);\n        }\n        return style;\n    }\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar BAR_BORDER_WIDTH_QUERY = ['itemStyle', 'barBorderWidth'];\nvar _eventPos = [0, 0];\n\n// FIXME\n// Just for compatible with ec2.\nextend(Model.prototype, barItemStyle);\n\nextendChartView({\n\n    type: 'bar',\n\n    render: function (seriesModel, ecModel, api) {\n        this._updateDrawMode(seriesModel);\n\n        var coordinateSystemType = seriesModel.get('coordinateSystem');\n\n        if (coordinateSystemType === 'cartesian2d'\n            || coordinateSystemType === 'polar'\n        ) {\n            this._isLargeDraw\n                ? this._renderLarge(seriesModel, ecModel, api)\n                : this._renderNormal(seriesModel, ecModel, api);\n        }\n        else if (__DEV__) {\n            console.warn('Only cartesian2d and polar supported for bar.');\n        }\n\n        return this.group;\n    },\n\n    incrementalPrepareRender: function (seriesModel, ecModel, api) {\n        this._clear();\n        this._updateDrawMode(seriesModel);\n    },\n\n    incrementalRender: function (params, seriesModel, ecModel, api) {\n        // Do not support progressive in normal mode.\n        this._incrementalRenderLarge(params, seriesModel);\n    },\n\n    _updateDrawMode: function (seriesModel) {\n        var isLargeDraw = seriesModel.pipelineContext.large;\n        if (this._isLargeDraw == null || isLargeDraw ^ this._isLargeDraw) {\n            this._isLargeDraw = isLargeDraw;\n            this._clear();\n        }\n    },\n\n    _renderNormal: function (seriesModel, ecModel, api) {\n        var group = this.group;\n        var data = seriesModel.getData();\n        var oldData = this._data;\n\n        var coord = seriesModel.coordinateSystem;\n        var baseAxis = coord.getBaseAxis();\n        var isHorizontalOrRadial;\n\n        if (coord.type === 'cartesian2d') {\n            isHorizontalOrRadial = baseAxis.isHorizontal();\n        }\n        else if (coord.type === 'polar') {\n            isHorizontalOrRadial = baseAxis.dim === 'angle';\n        }\n\n        var animationModel = seriesModel.isAnimationEnabled() ? seriesModel : null;\n\n        data.diff(oldData)\n            .add(function (dataIndex) {\n                if (!data.hasValue(dataIndex)) {\n                    return;\n                }\n\n                var itemModel = data.getItemModel(dataIndex);\n                var layout = getLayout[coord.type](data, dataIndex, itemModel);\n                var el = elementCreator[coord.type](\n                    data, dataIndex, itemModel, layout, isHorizontalOrRadial, animationModel\n                );\n                data.setItemGraphicEl(dataIndex, el);\n                group.add(el);\n\n                updateStyle(\n                    el, data, dataIndex, itemModel, layout,\n                    seriesModel, isHorizontalOrRadial, coord.type === 'polar'\n                );\n            })\n            .update(function (newIndex, oldIndex) {\n                var el = oldData.getItemGraphicEl(oldIndex);\n\n                if (!data.hasValue(newIndex)) {\n                    group.remove(el);\n                    return;\n                }\n\n                var itemModel = data.getItemModel(newIndex);\n                var layout = getLayout[coord.type](data, newIndex, itemModel);\n\n                if (el) {\n                    updateProps(el, {shape: layout}, animationModel, newIndex);\n                }\n                else {\n                    el = elementCreator[coord.type](\n                        data, newIndex, itemModel, layout, isHorizontalOrRadial, animationModel, true\n                    );\n                }\n\n                data.setItemGraphicEl(newIndex, el);\n                // Add back\n                group.add(el);\n\n                updateStyle(\n                    el, data, newIndex, itemModel, layout,\n                    seriesModel, isHorizontalOrRadial, coord.type === 'polar'\n                );\n            })\n            .remove(function (dataIndex) {\n                var el = oldData.getItemGraphicEl(dataIndex);\n                if (coord.type === 'cartesian2d') {\n                    el && removeRect(dataIndex, animationModel, el);\n                }\n                else {\n                    el && removeSector(dataIndex, animationModel, el);\n                }\n            })\n            .execute();\n\n        this._data = data;\n    },\n\n    _renderLarge: function (seriesModel, ecModel, api) {\n        this._clear();\n        createLarge(seriesModel, this.group);\n    },\n\n    _incrementalRenderLarge: function (params, seriesModel) {\n        createLarge(seriesModel, this.group, true);\n    },\n\n    dispose: noop,\n\n    remove: function (ecModel) {\n        this._clear(ecModel);\n    },\n\n    _clear: function (ecModel) {\n        var group = this.group;\n        var data = this._data;\n        if (ecModel && ecModel.get('animation') && data && !this._isLargeDraw) {\n            data.eachItemGraphicEl(function (el) {\n                if (el.type === 'sector') {\n                    removeSector(el.dataIndex, ecModel, el);\n                }\n                else {\n                    removeRect(el.dataIndex, ecModel, el);\n                }\n            });\n        }\n        else {\n            group.removeAll();\n        }\n        this._data = null;\n    }\n\n});\n\nvar elementCreator = {\n\n    cartesian2d: function (\n        data, dataIndex, itemModel, layout, isHorizontal,\n        animationModel, isUpdate\n    ) {\n        var rect = new Rect({shape: extend({}, layout)});\n\n        // Animation\n        if (animationModel) {\n            var rectShape = rect.shape;\n            var animateProperty = isHorizontal ? 'height' : 'width';\n            var animateTarget = {};\n            rectShape[animateProperty] = 0;\n            animateTarget[animateProperty] = layout[animateProperty];\n            graphic[isUpdate ? 'updateProps' : 'initProps'](rect, {\n                shape: animateTarget\n            }, animationModel, dataIndex);\n        }\n\n        return rect;\n    },\n\n    polar: function (\n        data, dataIndex, itemModel, layout, isRadial,\n        animationModel, isUpdate\n    ) {\n        // Keep the same logic with bar in catesion: use end value to control\n        // direction. Notice that if clockwise is true (by default), the sector\n        // will always draw clockwisely, no matter whether endAngle is greater\n        // or less than startAngle.\n        var clockwise = layout.startAngle < layout.endAngle;\n        var sector = new Sector({\n            shape: defaults({clockwise: clockwise}, layout)\n        });\n\n        // Animation\n        if (animationModel) {\n            var sectorShape = sector.shape;\n            var animateProperty = isRadial ? 'r' : 'endAngle';\n            var animateTarget = {};\n            sectorShape[animateProperty] = isRadial ? 0 : layout.startAngle;\n            animateTarget[animateProperty] = layout[animateProperty];\n            graphic[isUpdate ? 'updateProps' : 'initProps'](sector, {\n                shape: animateTarget\n            }, animationModel, dataIndex);\n        }\n\n        return sector;\n    }\n};\n\nfunction removeRect(dataIndex, animationModel, el) {\n    // Not show text when animating\n    el.style.text = null;\n    updateProps(el, {\n        shape: {\n            width: 0\n        }\n    }, animationModel, dataIndex, function () {\n        el.parent && el.parent.remove(el);\n    });\n}\n\nfunction removeSector(dataIndex, animationModel, el) {\n    // Not show text when animating\n    el.style.text = null;\n    updateProps(el, {\n        shape: {\n            r: el.shape.r0\n        }\n    }, animationModel, dataIndex, function () {\n        el.parent && el.parent.remove(el);\n    });\n}\n\nvar getLayout = {\n    cartesian2d: function (data, dataIndex, itemModel) {\n        var layout = data.getItemLayout(dataIndex);\n        var fixedLineWidth = getLineWidth(itemModel, layout);\n\n        // fix layout with lineWidth\n        var signX = layout.width > 0 ? 1 : -1;\n        var signY = layout.height > 0 ? 1 : -1;\n        return {\n            x: layout.x + signX * fixedLineWidth / 2,\n            y: layout.y + signY * fixedLineWidth / 2,\n            width: layout.width - signX * fixedLineWidth,\n            height: layout.height - signY * fixedLineWidth\n        };\n    },\n\n    polar: function (data, dataIndex, itemModel) {\n        var layout = data.getItemLayout(dataIndex);\n        return {\n            cx: layout.cx,\n            cy: layout.cy,\n            r0: layout.r0,\n            r: layout.r,\n            startAngle: layout.startAngle,\n            endAngle: layout.endAngle\n        };\n    }\n};\n\nfunction updateStyle(\n    el, data, dataIndex, itemModel, layout, seriesModel, isHorizontal, isPolar\n) {\n    var color = data.getItemVisual(dataIndex, 'color');\n    var opacity = data.getItemVisual(dataIndex, 'opacity');\n    var itemStyleModel = itemModel.getModel('itemStyle');\n    var hoverStyle = itemModel.getModel('emphasis.itemStyle').getBarItemStyle();\n\n    if (!isPolar) {\n        el.setShape('r', itemStyleModel.get('barBorderRadius') || 0);\n    }\n\n    el.useStyle(defaults(\n        {\n            fill: color,\n            opacity: opacity\n        },\n        itemStyleModel.getBarItemStyle()\n    ));\n\n    var cursorStyle = itemModel.getShallow('cursor');\n    cursorStyle && el.attr('cursor', cursorStyle);\n\n    var labelPositionOutside = isHorizontal\n        ? (layout.height > 0 ? 'bottom' : 'top')\n        : (layout.width > 0 ? 'left' : 'right');\n\n    if (!isPolar) {\n        setLabel(\n            el.style, hoverStyle, itemModel, color,\n            seriesModel, dataIndex, labelPositionOutside\n        );\n    }\n\n    setHoverStyle(el, hoverStyle);\n}\n\n// In case width or height are too small.\nfunction getLineWidth(itemModel, rawLayout) {\n    var lineWidth = itemModel.get(BAR_BORDER_WIDTH_QUERY) || 0;\n    return Math.min(lineWidth, Math.abs(rawLayout.width), Math.abs(rawLayout.height));\n}\n\n\nvar LargePath = Path.extend({\n\n    type: 'largeBar',\n\n    shape: {points: []},\n\n    buildPath: function (ctx, shape) {\n        // Drawing lines is more efficient than drawing\n        // a whole line or drawing rects.\n        var points = shape.points;\n        var startPoint = this.__startPoint;\n        var baseDimIdx = this.__baseDimIdx;\n\n        for (var i = 0; i < points.length; i += 2) {\n            startPoint[baseDimIdx] = points[i + baseDimIdx];\n            ctx.moveTo(startPoint[0], startPoint[1]);\n            ctx.lineTo(points[i], points[i + 1]);\n        }\n    }\n});\n\nfunction createLarge(seriesModel, group, incremental) {\n    // TODO support polar\n    var data = seriesModel.getData();\n    var startPoint = [];\n    var baseDimIdx = data.getLayout('valueAxisHorizontal') ? 1 : 0;\n    startPoint[1 - baseDimIdx] = data.getLayout('valueAxisStart');\n\n    var el = new LargePath({\n        shape: {points: data.getLayout('largePoints')},\n        incremental: !!incremental,\n        __startPoint: startPoint,\n        __baseDimIdx: baseDimIdx,\n        __largeDataIndices: data.getLayout('largeDataIndices'),\n        __barWidth: data.getLayout('barWidth')\n    });\n    group.add(el);\n    setLargeStyle(el, seriesModel, data);\n\n    // Enable tooltip and user mouse/touch event handlers.\n    el.seriesIndex = seriesModel.seriesIndex;\n\n    if (!seriesModel.get('silent')) {\n        el.on('mousedown', largePathUpdateDataIndex);\n        el.on('mousemove', largePathUpdateDataIndex);\n    }\n}\n\n// Use throttle to avoid frequently traverse to find dataIndex.\nvar largePathUpdateDataIndex = throttle(function (event) {\n    var largePath = this;\n    var dataIndex = largePathFindDataIndex(largePath, event.offsetX, event.offsetY);\n    largePath.dataIndex = dataIndex >= 0 ? dataIndex : null;\n}, 30, false);\n\nfunction largePathFindDataIndex(largePath, x, y) {\n    var baseDimIdx = largePath.__baseDimIdx;\n    var valueDimIdx = 1 - baseDimIdx;\n    var points = largePath.shape.points;\n    var largeDataIndices = largePath.__largeDataIndices;\n    var barWidthHalf = Math.abs(largePath.__barWidth / 2);\n    var startValueVal = largePath.__startPoint[valueDimIdx];\n\n    _eventPos[0] = x;\n    _eventPos[1] = y;\n    var pointerBaseVal = _eventPos[baseDimIdx];\n    var pointerValueVal = _eventPos[1 - baseDimIdx];\n    var baseLowerBound = pointerBaseVal - barWidthHalf;\n    var baseUpperBound = pointerBaseVal + barWidthHalf;\n\n    for (var i = 0, len = points.length / 2; i < len; i++) {\n        var ii = i * 2;\n        var barBaseVal = points[ii + baseDimIdx];\n        var barValueVal = points[ii + valueDimIdx];\n        if (\n            barBaseVal >= baseLowerBound && barBaseVal <= baseUpperBound\n            && (\n                startValueVal <= barValueVal\n                    ? (pointerValueVal >= startValueVal && pointerValueVal <= barValueVal)\n                    : (pointerValueVal >= barValueVal && pointerValueVal <= startValueVal)\n            )\n        ) {\n            return largeDataIndices[i];\n        }\n    }\n\n    return -1;\n}\n\nfunction setLargeStyle(el, seriesModel, data) {\n    var borderColor = data.getVisual('borderColor') || data.getVisual('color');\n    var itemStyle = seriesModel.getModel('itemStyle').getItemStyle(['color', 'borderColor']);\n\n    el.useStyle(itemStyle);\n    el.style.fill = null;\n    el.style.stroke = borderColor;\n    el.style.lineWidth = data.getLayout('barWidth');\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n// In case developer forget to include grid component\nregisterLayout(PRIORITY.VISUAL.LAYOUT, curry(layout, 'bar'));\n// Use higher prority to avoid to be blocked by other overall layout, which do not\n// only exist in this module, but probably also exist in other modules, like `barPolar`.\nregisterLayout(PRIORITY.VISUAL.PROGRESSIVE_LAYOUT, largeLayout);\n\nregisterVisual({\n    seriesType: 'bar',\n    reset: function (seriesModel) {\n        // Visual coding for legend\n        seriesModel.getData().setVisual('legendSymbol', 'roundRect');\n    }\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * [Usage]:\n * (1)\n * createListSimply(seriesModel, ['value']);\n * (2)\n * createListSimply(seriesModel, {\n *     coordDimensions: ['value'],\n *     dimensionsCount: 5\n * });\n *\n * @param {module:echarts/model/Series} seriesModel\n * @param {Object|Array.<string|Object>} opt opt or coordDimensions\n *        The options in opt, see `echarts/data/helper/createDimensions`\n * @param {Array.<string>} [nameList]\n * @return {module:echarts/data/List}\n */\nvar createListSimply = function (seriesModel, opt, nameList) {\n    opt = isArray(opt) && {coordDimensions: opt} || extend({}, opt);\n\n    var source = seriesModel.getSource();\n\n    var dimensionsInfo = createDimensions(source, opt);\n\n    var list = new List(dimensionsInfo, seriesModel);\n    list.initData(source, nameList);\n\n    return list;\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Data selectable mixin for chart series.\n * To eanble data select, option of series must have `selectedMode`.\n * And each data item will use `selected` to toggle itself selected status\n */\n\nvar selectableMixin = {\n\n    /**\n     * @param {Array.<Object>} targetList [{name, value, selected}, ...]\n     *        If targetList is an array, it should like [{name: ..., value: ...}, ...].\n     *        If targetList is a \"List\", it must have coordDim: 'value' dimension and name.\n     */\n    updateSelectedMap: function (targetList) {\n        this._targetList = isArray(targetList) ? targetList.slice() : [];\n\n        this._selectTargetMap = reduce(targetList || [], function (targetMap, target) {\n            targetMap.set(target.name, target);\n            return targetMap;\n        }, createHashMap());\n    },\n\n    /**\n     * Either name or id should be passed as input here.\n     * If both of them are defined, id is used.\n     *\n     * @param {string|undefined} name name of data\n     * @param {number|undefined} id dataIndex of data\n     */\n    // PENGING If selectedMode is null ?\n    select: function (name, id) {\n        var target = id != null\n            ? this._targetList[id]\n            : this._selectTargetMap.get(name);\n        var selectedMode = this.get('selectedMode');\n        if (selectedMode === 'single') {\n            this._selectTargetMap.each(function (target) {\n                target.selected = false;\n            });\n        }\n        target && (target.selected = true);\n    },\n\n    /**\n     * Either name or id should be passed as input here.\n     * If both of them are defined, id is used.\n     *\n     * @param {string|undefined} name name of data\n     * @param {number|undefined} id dataIndex of data\n     */\n    unSelect: function (name, id) {\n        var target = id != null\n            ? this._targetList[id]\n            : this._selectTargetMap.get(name);\n        // var selectedMode = this.get('selectedMode');\n        // selectedMode !== 'single' && target && (target.selected = false);\n        target && (target.selected = false);\n    },\n\n    /**\n     * Either name or id should be passed as input here.\n     * If both of them are defined, id is used.\n     *\n     * @param {string|undefined} name name of data\n     * @param {number|undefined} id dataIndex of data\n     */\n    toggleSelected: function (name, id) {\n        var target = id != null\n            ? this._targetList[id]\n            : this._selectTargetMap.get(name);\n        if (target != null) {\n            this[target.selected ? 'unSelect' : 'select'](name, id);\n            return target.selected;\n        }\n    },\n\n    /**\n     * Either name or id should be passed as input here.\n     * If both of them are defined, id is used.\n     *\n     * @param {string|undefined} name name of data\n     * @param {number|undefined} id dataIndex of data\n     */\n    isSelected: function (name, id) {\n        var target = id != null\n            ? this._targetList[id]\n            : this._selectTargetMap.get(name);\n        return target && target.selected;\n    }\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar PieSeries = extendSeriesModel({\n\n    type: 'series.pie',\n\n    // Overwrite\n    init: function (option) {\n        PieSeries.superApply(this, 'init', arguments);\n\n        // Enable legend selection for each data item\n        // Use a function instead of direct access because data reference may changed\n        this.legendDataProvider = function () {\n            return this.getRawData();\n        };\n\n        this.updateSelectedMap(this._createSelectableList());\n\n        this._defaultLabelLine(option);\n    },\n\n    // Overwrite\n    mergeOption: function (newOption) {\n        PieSeries.superCall(this, 'mergeOption', newOption);\n\n        this.updateSelectedMap(this._createSelectableList());\n    },\n\n    getInitialData: function (option, ecModel) {\n        return createListSimply(this, ['value']);\n    },\n\n    _createSelectableList: function () {\n        var data = this.getRawData();\n        var valueDim = data.mapDimension('value');\n        var targetList = [];\n        for (var i = 0, len = data.count(); i < len; i++) {\n            targetList.push({\n                name: data.getName(i),\n                value: data.get(valueDim, i),\n                selected: retrieveRawAttr(data, i, 'selected')\n            });\n        }\n        return targetList;\n    },\n\n    // Overwrite\n    getDataParams: function (dataIndex) {\n        var data = this.getData();\n        var params = PieSeries.superCall(this, 'getDataParams', dataIndex);\n        // FIXME toFixed?\n\n        var valueList = [];\n        data.each(data.mapDimension('value'), function (value) {\n            valueList.push(value);\n        });\n\n        params.percent = getPercentWithPrecision(\n            valueList,\n            dataIndex,\n            data.hostModel.get('percentPrecision')\n        );\n\n        params.$vars.push('percent');\n        return params;\n    },\n\n    _defaultLabelLine: function (option) {\n        // Extend labelLine emphasis\n        defaultEmphasis(option, 'labelLine', ['show']);\n\n        var labelLineNormalOpt = option.labelLine;\n        var labelLineEmphasisOpt = option.emphasis.labelLine;\n        // Not show label line if `label.normal.show = false`\n        labelLineNormalOpt.show = labelLineNormalOpt.show\n            && option.label.show;\n        labelLineEmphasisOpt.show = labelLineEmphasisOpt.show\n            && option.emphasis.label.show;\n    },\n\n    defaultOption: {\n        zlevel: 0,\n        z: 2,\n        legendHoverLink: true,\n\n        hoverAnimation: true,\n        // 默认全局居中\n        center: ['50%', '50%'],\n        radius: [0, '75%'],\n        // 默认顺时针\n        clockwise: true,\n        startAngle: 90,\n        // 最小角度改为0\n        minAngle: 0,\n\n        // If the angle of a sector less than `minShowLabelAngle`,\n        // the label will not be displayed.\n        minShowLabelAngle: 0,\n\n        // 选中时扇区偏移量\n        selectedOffset: 10,\n        // 高亮扇区偏移量\n        hoverOffset: 10,\n\n        // If use strategy to avoid label overlapping\n        avoidLabelOverlap: true,\n        // 选择模式，默认关闭，可选single，multiple\n        // selectedMode: false,\n        // 南丁格尔玫瑰图模式，'radius'（半径） | 'area'（面积）\n        // roseType: null,\n\n        percentPrecision: 2,\n\n        // If still show when all data zero.\n        stillShowZeroSum: true,\n\n        // cursor: null,\n\n        label: {\n            // If rotate around circle\n            rotate: false,\n            show: true,\n            // 'outer', 'inside', 'center'\n            position: 'outer'\n            // formatter: 标签文本格式器，同Tooltip.formatter，不支持异步回调\n            // 默认使用全局文本样式，详见TEXTSTYLE\n            // distance: 当position为inner时有效，为label位置到圆心的距离与圆半径(环状图为内外半径和)的比例系数\n        },\n        // Enabled when label.normal.position is 'outer'\n        labelLine: {\n            show: true,\n            // 引导线两段中的第一段长度\n            length: 15,\n            // 引导线两段中的第二段长度\n            length2: 15,\n            smooth: false,\n            lineStyle: {\n                // color: 各异,\n                width: 1,\n                type: 'solid'\n            }\n        },\n        itemStyle: {\n            borderWidth: 1\n        },\n\n        // Animation type canbe expansion, scale\n        animationType: 'expansion',\n\n        animationEasing: 'cubicOut'\n    }\n});\n\nmixin(PieSeries, selectableMixin);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * @param {module:echarts/model/Series} seriesModel\n * @param {boolean} hasAnimation\n * @inner\n */\nfunction updateDataSelected(uid, seriesModel, hasAnimation, api) {\n    var data = seriesModel.getData();\n    var dataIndex = this.dataIndex;\n    var name = data.getName(dataIndex);\n    var selectedOffset = seriesModel.get('selectedOffset');\n\n    api.dispatchAction({\n        type: 'pieToggleSelect',\n        from: uid,\n        name: name,\n        seriesId: seriesModel.id\n    });\n\n    data.each(function (idx) {\n        toggleItemSelected(\n            data.getItemGraphicEl(idx),\n            data.getItemLayout(idx),\n            seriesModel.isSelected(data.getName(idx)),\n            selectedOffset,\n            hasAnimation\n        );\n    });\n}\n\n/**\n * @param {module:zrender/graphic/Sector} el\n * @param {Object} layout\n * @param {boolean} isSelected\n * @param {number} selectedOffset\n * @param {boolean} hasAnimation\n * @inner\n */\nfunction toggleItemSelected(el, layout, isSelected, selectedOffset, hasAnimation) {\n    var midAngle = (layout.startAngle + layout.endAngle) / 2;\n\n    var dx = Math.cos(midAngle);\n    var dy = Math.sin(midAngle);\n\n    var offset = isSelected ? selectedOffset : 0;\n    var position = [dx * offset, dy * offset];\n\n    hasAnimation\n        // animateTo will stop revious animation like update transition\n        ? el.animate()\n            .when(200, {\n                position: position\n            })\n            .start('bounceOut')\n        : el.attr('position', position);\n}\n\n/**\n * Piece of pie including Sector, Label, LabelLine\n * @constructor\n * @extends {module:zrender/graphic/Group}\n */\nfunction PiePiece(data, idx) {\n\n    Group.call(this);\n\n    var sector = new Sector({\n        z2: 2\n    });\n    var polyline = new Polyline();\n    var text = new Text();\n    this.add(sector);\n    this.add(polyline);\n    this.add(text);\n\n    this.updateData(data, idx, true);\n}\n\nvar piePieceProto = PiePiece.prototype;\n\npiePieceProto.updateData = function (data, idx, firstCreate) {\n\n    var sector = this.childAt(0);\n    var labelLine = this.childAt(1);\n    var labelText = this.childAt(2);\n\n    var seriesModel = data.hostModel;\n    var itemModel = data.getItemModel(idx);\n    var layout = data.getItemLayout(idx);\n    var sectorShape = extend({}, layout);\n    sectorShape.label = null;\n\n    if (firstCreate) {\n        sector.setShape(sectorShape);\n\n        var animationType = seriesModel.getShallow('animationType');\n        if (animationType === 'scale') {\n            sector.shape.r = layout.r0;\n            initProps(sector, {\n                shape: {\n                    r: layout.r\n                }\n            }, seriesModel, idx);\n        }\n        // Expansion\n        else {\n            sector.shape.endAngle = layout.startAngle;\n            updateProps(sector, {\n                shape: {\n                    endAngle: layout.endAngle\n                }\n            }, seriesModel, idx);\n        }\n\n    }\n    else {\n        updateProps(sector, {\n            shape: sectorShape\n        }, seriesModel, idx);\n    }\n\n    // Update common style\n    var visualColor = data.getItemVisual(idx, 'color');\n\n    sector.useStyle(\n        defaults(\n            {\n                lineJoin: 'bevel',\n                fill: visualColor\n            },\n            itemModel.getModel('itemStyle').getItemStyle()\n        )\n    );\n    sector.hoverStyle = itemModel.getModel('emphasis.itemStyle').getItemStyle();\n\n    var cursorStyle = itemModel.getShallow('cursor');\n    cursorStyle && sector.attr('cursor', cursorStyle);\n\n    // Toggle selected\n    toggleItemSelected(\n        this,\n        data.getItemLayout(idx),\n        seriesModel.isSelected(null, idx),\n        seriesModel.get('selectedOffset'),\n        seriesModel.get('animation')\n    );\n\n    this._updateLabel(data, idx);\n\n    this.highDownOnUpdate = (itemModel.get('hoverAnimation') && seriesModel.isAnimationEnabled())\n        ? function (fromState, toState) {\n            if (toState === 'emphasis') {\n                labelLine.ignore = labelLine.hoverIgnore;\n                labelText.ignore = labelText.hoverIgnore;\n\n                // Sector may has animation of updating data. Force to move to the last frame\n                // Or it may stopped on the wrong shape\n                sector.stopAnimation(true);\n                sector.animateTo({\n                    shape: {\n                        r: layout.r + seriesModel.get('hoverOffset')\n                    }\n                }, 300, 'elasticOut');\n            }\n            else {\n                labelLine.ignore = labelLine.normalIgnore;\n                labelText.ignore = labelText.normalIgnore;\n\n                sector.stopAnimation(true);\n                sector.animateTo({\n                    shape: {\n                        r: layout.r\n                    }\n                }, 300, 'elasticOut');\n            }\n        }\n        : null;\n\n    setHoverStyle(this);\n};\n\npiePieceProto._updateLabel = function (data, idx) {\n\n    var labelLine = this.childAt(1);\n    var labelText = this.childAt(2);\n\n    var seriesModel = data.hostModel;\n    var itemModel = data.getItemModel(idx);\n    var layout = data.getItemLayout(idx);\n    var labelLayout = layout.label;\n    var visualColor = data.getItemVisual(idx, 'color');\n\n    if (!labelLayout || isNaN(labelLayout.x) || isNaN(labelLayout.y)) {\n        labelText.ignore = labelText.normalIgnore = labelText.hoverIgnore =\n        labelLine.ignore = labelLine.normalIgnore = labelLine.hoverIgnore = true;\n        return;\n    }\n\n    updateProps(labelLine, {\n        shape: {\n            points: labelLayout.linePoints || [\n                [labelLayout.x, labelLayout.y], [labelLayout.x, labelLayout.y], [labelLayout.x, labelLayout.y]\n            ]\n        }\n    }, seriesModel, idx);\n\n    updateProps(labelText, {\n        style: {\n            x: labelLayout.x,\n            y: labelLayout.y\n        }\n    }, seriesModel, idx);\n    labelText.attr({\n        rotation: labelLayout.rotation,\n        origin: [labelLayout.x, labelLayout.y],\n        z2: 10\n    });\n\n    var labelModel = itemModel.getModel('label');\n    var labelHoverModel = itemModel.getModel('emphasis.label');\n    var labelLineModel = itemModel.getModel('labelLine');\n    var labelLineHoverModel = itemModel.getModel('emphasis.labelLine');\n    var visualColor = data.getItemVisual(idx, 'color');\n\n    setLabelStyle(\n        labelText.style, labelText.hoverStyle = {}, labelModel, labelHoverModel,\n        {\n            labelFetcher: data.hostModel,\n            labelDataIndex: idx,\n            defaultText: data.getName(idx),\n            autoColor: visualColor,\n            useInsideStyle: !!labelLayout.inside\n        },\n        {\n            textAlign: labelLayout.textAlign,\n            textVerticalAlign: labelLayout.verticalAlign,\n            opacity: data.getItemVisual(idx, 'opacity')\n        }\n    );\n\n    labelText.ignore = labelText.normalIgnore = !labelModel.get('show');\n    labelText.hoverIgnore = !labelHoverModel.get('show');\n\n    labelLine.ignore = labelLine.normalIgnore = !labelLineModel.get('show');\n    labelLine.hoverIgnore = !labelLineHoverModel.get('show');\n\n    // Default use item visual color\n    labelLine.setStyle({\n        stroke: visualColor,\n        opacity: data.getItemVisual(idx, 'opacity')\n    });\n    labelLine.setStyle(labelLineModel.getModel('lineStyle').getLineStyle());\n\n    labelLine.hoverStyle = labelLineHoverModel.getModel('lineStyle').getLineStyle();\n\n    var smooth = labelLineModel.get('smooth');\n    if (smooth && smooth === true) {\n        smooth = 0.4;\n    }\n    labelLine.setShape({\n        smooth: smooth\n    });\n};\n\ninherits(PiePiece, Group);\n\n\n// Pie view\nvar PieView = Chart.extend({\n\n    type: 'pie',\n\n    init: function () {\n        var sectorGroup = new Group();\n        this._sectorGroup = sectorGroup;\n    },\n\n    render: function (seriesModel, ecModel, api, payload) {\n        if (payload && (payload.from === this.uid)) {\n            return;\n        }\n\n        var data = seriesModel.getData();\n        var oldData = this._data;\n        var group = this.group;\n\n        var hasAnimation = ecModel.get('animation');\n        var isFirstRender = !oldData;\n        var animationType = seriesModel.get('animationType');\n\n        var onSectorClick = curry(\n            updateDataSelected, this.uid, seriesModel, hasAnimation, api\n        );\n\n        var selectedMode = seriesModel.get('selectedMode');\n        data.diff(oldData)\n            .add(function (idx) {\n                var piePiece = new PiePiece(data, idx);\n                // Default expansion animation\n                if (isFirstRender && animationType !== 'scale') {\n                    piePiece.eachChild(function (child) {\n                        child.stopAnimation(true);\n                    });\n                }\n\n                selectedMode && piePiece.on('click', onSectorClick);\n\n                data.setItemGraphicEl(idx, piePiece);\n\n                group.add(piePiece);\n            })\n            .update(function (newIdx, oldIdx) {\n                var piePiece = oldData.getItemGraphicEl(oldIdx);\n\n                piePiece.updateData(data, newIdx);\n\n                piePiece.off('click');\n                selectedMode && piePiece.on('click', onSectorClick);\n                group.add(piePiece);\n                data.setItemGraphicEl(newIdx, piePiece);\n            })\n            .remove(function (idx) {\n                var piePiece = oldData.getItemGraphicEl(idx);\n                group.remove(piePiece);\n            })\n            .execute();\n\n        if (\n            hasAnimation && isFirstRender && data.count() > 0\n            // Default expansion animation\n            && animationType !== 'scale'\n        ) {\n            var shape = data.getItemLayout(0);\n            for (var s = 1; isNaN(shape.startAngle) && s < data.count(); ++s) {\n                shape = data.getItemLayout(s);\n            }\n\n            var r = Math.max(api.getWidth(), api.getHeight()) / 2;\n\n            var removeClipPath = bind(group.removeClipPath, group);\n            group.setClipPath(this._createClipPath(\n                shape.cx, shape.cy, r, shape.startAngle, shape.clockwise, removeClipPath, seriesModel\n            ));\n        }\n        else {\n            // clipPath is used in first-time animation, so remove it when otherwise. See: #8994\n            group.removeClipPath();\n        }\n\n        this._data = data;\n    },\n\n    dispose: function () {},\n\n    _createClipPath: function (\n        cx, cy, r, startAngle, clockwise, cb, seriesModel\n    ) {\n        var clipPath = new Sector({\n            shape: {\n                cx: cx,\n                cy: cy,\n                r0: 0,\n                r: r,\n                startAngle: startAngle,\n                endAngle: startAngle,\n                clockwise: clockwise\n            }\n        });\n\n        initProps(clipPath, {\n            shape: {\n                endAngle: startAngle + (clockwise ? 1 : -1) * Math.PI * 2\n            }\n        }, seriesModel, cb);\n\n        return clipPath;\n    },\n\n    /**\n     * @implement\n     */\n    containPoint: function (point, seriesModel) {\n        var data = seriesModel.getData();\n        var itemLayout = data.getItemLayout(0);\n        if (itemLayout) {\n            var dx = point[0] - itemLayout.cx;\n            var dy = point[1] - itemLayout.cy;\n            var radius = Math.sqrt(dx * dx + dy * dy);\n            return radius <= itemLayout.r && radius >= itemLayout.r0;\n        }\n    }\n\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar createDataSelectAction = function (seriesType, actionInfos) {\n    each$1(actionInfos, function (actionInfo) {\n        actionInfo.update = 'updateView';\n        /**\n         * @payload\n         * @property {string} seriesName\n         * @property {string} name\n         */\n        registerAction(actionInfo, function (payload, ecModel) {\n            var selected = {};\n            ecModel.eachComponent(\n                {mainType: 'series', subType: seriesType, query: payload},\n                function (seriesModel) {\n                    if (seriesModel[actionInfo.method]) {\n                        seriesModel[actionInfo.method](\n                            payload.name,\n                            payload.dataIndex\n                        );\n                    }\n                    var data = seriesModel.getData();\n                    // Create selected map\n                    data.each(function (idx) {\n                        var name = data.getName(idx);\n                        selected[name] = seriesModel.isSelected(name)\n                            || false;\n                    });\n                }\n            );\n            return {\n                name: payload.name,\n                selected: selected,\n                seriesId: payload.seriesId\n            };\n        });\n    });\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n// Pick color from palette for each data item.\n// Applicable for charts that require applying color palette\n// in data level (like pie, funnel, chord).\nvar dataColor = function (seriesType) {\n    return {\n        getTargetSeries: function (ecModel) {\n            // Pie and funnel may use diferrent scope\n            var paletteScope = {};\n            var seiresModelMap = createHashMap();\n\n            ecModel.eachSeriesByType(seriesType, function (seriesModel) {\n                seriesModel.__paletteScope = paletteScope;\n                seiresModelMap.set(seriesModel.uid, seriesModel);\n            });\n\n            return seiresModelMap;\n        },\n        reset: function (seriesModel, ecModel) {\n            var dataAll = seriesModel.getRawData();\n            var idxMap = {};\n            var data = seriesModel.getData();\n\n            data.each(function (idx) {\n                var rawIdx = data.getRawIndex(idx);\n                idxMap[rawIdx] = idx;\n            });\n\n            dataAll.each(function (rawIdx) {\n                var filteredIdx = idxMap[rawIdx];\n\n                // If series.itemStyle.normal.color is a function. itemVisual may be encoded\n                var singleDataColor = filteredIdx != null\n                    && data.getItemVisual(filteredIdx, 'color', true);\n\n                if (!singleDataColor) {\n                    // FIXME Performance\n                    var itemModel = dataAll.getItemModel(rawIdx);\n\n                    var color = itemModel.get('itemStyle.color')\n                        || seriesModel.getColorFromPalette(\n                            dataAll.getName(rawIdx) || (rawIdx + ''), seriesModel.__paletteScope,\n                            dataAll.count()\n                        );\n                    // Legend may use the visual info in data before processed\n                    dataAll.setItemVisual(rawIdx, 'color', color);\n\n                    // Data is not filtered\n                    if (filteredIdx != null) {\n                        data.setItemVisual(filteredIdx, 'color', color);\n                    }\n                }\n                else {\n                    // Set data all color for legend\n                    dataAll.setItemVisual(rawIdx, 'color', singleDataColor);\n                }\n            });\n        }\n    };\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n// FIXME emphasis label position is not same with normal label position\n\nvar RADIAN$1 = Math.PI / 180;\n\nfunction adjustSingleSide(list, cx, cy, r, dir, viewWidth, viewHeight) {\n    list.sort(function (a, b) {\n        return a.y - b.y;\n    });\n\n    function shiftDown(start, end, delta, dir) {\n        for (var j = start; j < end; j++) {\n            list[j].y += delta;\n            if (j > start\n                && j + 1 < end\n                && list[j + 1].y > list[j].y + list[j].height\n            ) {\n                shiftUp(j, delta / 2);\n                return;\n            }\n        }\n\n        shiftUp(end - 1, delta / 2);\n    }\n\n    function shiftUp(end, delta) {\n        for (var j = end; j >= 0; j--) {\n            list[j].y -= delta;\n            if (j > 0\n                && list[j].y > list[j - 1].y + list[j - 1].height\n            ) {\n                break;\n            }\n        }\n    }\n\n    function changeX(list, isDownList, cx, cy, r, dir) {\n        var lastDeltaX = dir > 0\n            ? isDownList                // right-side\n                ? Number.MAX_VALUE      // down\n                : 0                     // up\n            : isDownList                // left-side\n                ? Number.MAX_VALUE      // down\n                : 0;                    // up\n\n        for (var i = 0, l = list.length; i < l; i++) {\n            var deltaY = Math.abs(list[i].y - cy);\n            var length = list[i].len;\n            var length2 = list[i].len2;\n            var deltaX = (deltaY < r + length)\n                ? Math.sqrt(\n                        (r + length + length2) * (r + length + length2)\n                        - deltaY * deltaY\n                    )\n                : Math.abs(list[i].x - cx);\n            if (isDownList && deltaX >= lastDeltaX) {\n                // right-down, left-down\n                deltaX = lastDeltaX - 10;\n            }\n            if (!isDownList && deltaX <= lastDeltaX) {\n                // right-up, left-up\n                deltaX = lastDeltaX + 10;\n            }\n\n            list[i].x = cx + deltaX * dir;\n            lastDeltaX = deltaX;\n        }\n    }\n\n    var lastY = 0;\n    var delta;\n    var len = list.length;\n    var upList = [];\n    var downList = [];\n    for (var i = 0; i < len; i++) {\n        delta = list[i].y - lastY;\n        if (delta < 0) {\n            shiftDown(i, len, -delta, dir);\n        }\n        lastY = list[i].y + list[i].height;\n    }\n    if (viewHeight - lastY < 0) {\n        shiftUp(len - 1, lastY - viewHeight);\n    }\n    for (var i = 0; i < len; i++) {\n        if (list[i].y >= cy) {\n            downList.push(list[i]);\n        }\n        else {\n            upList.push(list[i]);\n        }\n    }\n    changeX(upList, false, cx, cy, r, dir);\n    changeX(downList, true, cx, cy, r, dir);\n}\n\nfunction avoidOverlap(labelLayoutList, cx, cy, r, viewWidth, viewHeight) {\n    var leftList = [];\n    var rightList = [];\n    for (var i = 0; i < labelLayoutList.length; i++) {\n        if (isPositionCenter(labelLayoutList[i])) {\n            continue;\n        }\n        if (labelLayoutList[i].x < cx) {\n            leftList.push(labelLayoutList[i]);\n        }\n        else {\n            rightList.push(labelLayoutList[i]);\n        }\n    }\n\n    adjustSingleSide(rightList, cx, cy, r, 1, viewWidth, viewHeight);\n    adjustSingleSide(leftList, cx, cy, r, -1, viewWidth, viewHeight);\n\n    for (var i = 0; i < labelLayoutList.length; i++) {\n        if (isPositionCenter(labelLayoutList[i])) {\n            continue;\n        }\n        var linePoints = labelLayoutList[i].linePoints;\n        if (linePoints) {\n            var dist = linePoints[1][0] - linePoints[2][0];\n            if (labelLayoutList[i].x < cx) {\n                linePoints[2][0] = labelLayoutList[i].x + 3;\n            }\n            else {\n                linePoints[2][0] = labelLayoutList[i].x - 3;\n            }\n            linePoints[1][1] = linePoints[2][1] = labelLayoutList[i].y;\n            linePoints[1][0] = linePoints[2][0] + dist;\n        }\n    }\n}\n\nfunction isPositionCenter(layout) {\n    // Not change x for center label\n    return layout.position === 'center';\n}\n\nvar labelLayout = function (seriesModel, r, viewWidth, viewHeight, sum) {\n    var data = seriesModel.getData();\n    var labelLayoutList = [];\n    var cx;\n    var cy;\n    var hasLabelRotate = false;\n    var minShowLabelRadian = (seriesModel.get('minShowLabelAngle') || 0) * RADIAN$1;\n\n    data.each(function (idx) {\n        var layout = data.getItemLayout(idx);\n\n        var itemModel = data.getItemModel(idx);\n        var labelModel = itemModel.getModel('label');\n        // Use position in normal or emphasis\n        var labelPosition = labelModel.get('position') || itemModel.get('emphasis.label.position');\n\n        var labelLineModel = itemModel.getModel('labelLine');\n        var labelLineLen = labelLineModel.get('length');\n        var labelLineLen2 = labelLineModel.get('length2');\n\n        if (layout.angle < minShowLabelRadian) {\n            return;\n        }\n\n        var midAngle = (layout.startAngle + layout.endAngle) / 2;\n        var dx = Math.cos(midAngle);\n        var dy = Math.sin(midAngle);\n\n        var textX;\n        var textY;\n        var linePoints;\n        var textAlign;\n\n        cx = layout.cx;\n        cy = layout.cy;\n\n        var isLabelInside = labelPosition === 'inside' || labelPosition === 'inner';\n        if (labelPosition === 'center') {\n            textX = layout.cx;\n            textY = layout.cy;\n            textAlign = 'center';\n        }\n        else {\n            var x1 = (isLabelInside ? (layout.r + layout.r0) / 2 * dx : layout.r * dx) + cx;\n            var y1 = (isLabelInside ? (layout.r + layout.r0) / 2 * dy : layout.r * dy) + cy;\n\n            textX = x1 + dx * 3;\n            textY = y1 + dy * 3;\n\n            if (!isLabelInside) {\n                // For roseType\n                var x2 = x1 + dx * (labelLineLen + r - layout.r);\n                var y2 = y1 + dy * (labelLineLen + r - layout.r);\n                var x3 = x2 + ((dx < 0 ? -1 : 1) * labelLineLen2);\n                var y3 = y2;\n\n                textX = x3 + (dx < 0 ? -5 : 5);\n                textY = y3;\n                linePoints = [[x1, y1], [x2, y2], [x3, y3]];\n            }\n\n            textAlign = isLabelInside ? 'center' : (dx > 0 ? 'left' : 'right');\n        }\n        var font = labelModel.getFont();\n\n        var labelRotate;\n        var rotate = labelModel.get('rotate');\n        if (typeof rotate === 'number') {\n            labelRotate = rotate * (Math.PI / 180);\n        }\n        else {\n            labelRotate = rotate\n                ? (dx < 0 ? -midAngle + Math.PI : -midAngle)\n                : 0;\n        }\n        var text = seriesModel.getFormattedLabel(idx, 'normal')\n                    || data.getName(idx);\n        var textRect = getBoundingRect(\n            text, font, textAlign, 'top'\n        );\n        hasLabelRotate = !!labelRotate;\n        layout.label = {\n            x: textX,\n            y: textY,\n            position: labelPosition,\n            height: textRect.height,\n            len: labelLineLen,\n            len2: labelLineLen2,\n            linePoints: linePoints,\n            textAlign: textAlign,\n            verticalAlign: 'middle',\n            rotation: labelRotate,\n            inside: isLabelInside\n        };\n\n        // Not layout the inside label\n        if (!isLabelInside) {\n            labelLayoutList.push(layout.label);\n        }\n    });\n    if (!hasLabelRotate && seriesModel.get('avoidLabelOverlap')) {\n        avoidOverlap(labelLayoutList, cx, cy, r, viewWidth, viewHeight);\n    }\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\nvar PI2$4 = Math.PI * 2;\nvar RADIAN = Math.PI / 180;\n\nvar pieLayout = function (seriesType, ecModel, api, payload) {\n    ecModel.eachSeriesByType(seriesType, function (seriesModel) {\n        var data = seriesModel.getData();\n        var valueDim = data.mapDimension('value');\n\n        var center = seriesModel.get('center');\n        var radius = seriesModel.get('radius');\n\n        if (!isArray(radius)) {\n            radius = [0, radius];\n        }\n        if (!isArray(center)) {\n            center = [center, center];\n        }\n\n        var width = api.getWidth();\n        var height = api.getHeight();\n        var size = Math.min(width, height);\n        var cx = parsePercent$1(center[0], width);\n        var cy = parsePercent$1(center[1], height);\n        var r0 = parsePercent$1(radius[0], size / 2);\n        var r = parsePercent$1(radius[1], size / 2);\n\n        var startAngle = -seriesModel.get('startAngle') * RADIAN;\n\n        var minAngle = seriesModel.get('minAngle') * RADIAN;\n\n        var validDataCount = 0;\n        data.each(valueDim, function (value) {\n            !isNaN(value) && validDataCount++;\n        });\n\n        var sum = data.getSum(valueDim);\n        // Sum may be 0\n        var unitRadian = Math.PI / (sum || validDataCount) * 2;\n\n        var clockwise = seriesModel.get('clockwise');\n\n        var roseType = seriesModel.get('roseType');\n        var stillShowZeroSum = seriesModel.get('stillShowZeroSum');\n\n        // [0...max]\n        var extent = data.getDataExtent(valueDim);\n        extent[0] = 0;\n\n        // In the case some sector angle is smaller than minAngle\n        var restAngle = PI2$4;\n        var valueSumLargerThanMinAngle = 0;\n\n        var currentAngle = startAngle;\n        var dir = clockwise ? 1 : -1;\n\n        data.each(valueDim, function (value, idx) {\n            var angle;\n            if (isNaN(value)) {\n                data.setItemLayout(idx, {\n                    angle: NaN,\n                    startAngle: NaN,\n                    endAngle: NaN,\n                    clockwise: clockwise,\n                    cx: cx,\n                    cy: cy,\n                    r0: r0,\n                    r: roseType\n                        ? NaN\n                        : r\n                });\n                return;\n            }\n\n            // FIXME 兼容 2.0 但是 roseType 是 area 的时候才是这样？\n            if (roseType !== 'area') {\n                angle = (sum === 0 && stillShowZeroSum)\n                    ? unitRadian : (value * unitRadian);\n            }\n            else {\n                angle = PI2$4 / validDataCount;\n            }\n\n            if (angle < minAngle) {\n                angle = minAngle;\n                restAngle -= minAngle;\n            }\n            else {\n                valueSumLargerThanMinAngle += value;\n            }\n\n            var endAngle = currentAngle + dir * angle;\n            data.setItemLayout(idx, {\n                angle: angle,\n                startAngle: currentAngle,\n                endAngle: endAngle,\n                clockwise: clockwise,\n                cx: cx,\n                cy: cy,\n                r0: r0,\n                r: roseType\n                    ? linearMap(value, extent, [r0, r])\n                    : r\n            });\n\n            currentAngle = endAngle;\n        });\n\n        // Some sector is constrained by minAngle\n        // Rest sectors needs recalculate angle\n        if (restAngle < PI2$4 && validDataCount) {\n            // Average the angle if rest angle is not enough after all angles is\n            // Constrained by minAngle\n            if (restAngle <= 1e-3) {\n                var angle = PI2$4 / validDataCount;\n                data.each(valueDim, function (value, idx) {\n                    if (!isNaN(value)) {\n                        var layout = data.getItemLayout(idx);\n                        layout.angle = angle;\n                        layout.startAngle = startAngle + dir * idx * angle;\n                        layout.endAngle = startAngle + dir * (idx + 1) * angle;\n                    }\n                });\n            }\n            else {\n                unitRadian = restAngle / valueSumLargerThanMinAngle;\n                currentAngle = startAngle;\n                data.each(valueDim, function (value, idx) {\n                    if (!isNaN(value)) {\n                        var layout = data.getItemLayout(idx);\n                        var angle = layout.angle === minAngle\n                            ? minAngle : value * unitRadian;\n                        layout.startAngle = currentAngle;\n                        layout.endAngle = currentAngle + dir * angle;\n                        currentAngle += dir * angle;\n                    }\n                });\n            }\n        }\n\n        labelLayout(seriesModel, r, width, height);\n    });\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar dataFilter = function (seriesType) {\n    return {\n        seriesType: seriesType,\n        reset: function (seriesModel, ecModel) {\n            var legendModels = ecModel.findComponents({\n                mainType: 'legend'\n            });\n            if (!legendModels || !legendModels.length) {\n                return;\n            }\n            var data = seriesModel.getData();\n            data.filterSelf(function (idx) {\n                var name = data.getName(idx);\n                // If in any legend component the status is not selected.\n                for (var i = 0; i < legendModels.length; i++) {\n                    if (!legendModels[i].isSelected(name)) {\n                        return false;\n                    }\n                }\n                return true;\n            });\n        }\n    };\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\ncreateDataSelectAction('pie', [{\n    type: 'pieToggleSelect',\n    event: 'pieselectchanged',\n    method: 'toggleSelected'\n}, {\n    type: 'pieSelect',\n    event: 'pieselected',\n    method: 'select'\n}, {\n    type: 'pieUnSelect',\n    event: 'pieunselected',\n    method: 'unSelect'\n}]);\n\nregisterVisual(dataColor('pie'));\nregisterLayout(curry(pieLayout, 'pie'));\nregisterProcessor(dataFilter('pie'));\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nSeriesModel.extend({\n\n    type: 'series.scatter',\n\n    dependencies: ['grid', 'polar', 'geo', 'singleAxis', 'calendar'],\n\n    getInitialData: function (option, ecModel) {\n        return createListFromArray(this.getSource(), this);\n    },\n\n    brushSelector: 'point',\n\n    getProgressive: function () {\n        var progressive = this.option.progressive;\n        if (progressive == null) {\n            // PENDING\n            return this.option.large ? 5e3 : this.get('progressive');\n        }\n        return progressive;\n    },\n\n    getProgressiveThreshold: function () {\n        var progressiveThreshold = this.option.progressiveThreshold;\n        if (progressiveThreshold == null) {\n            // PENDING\n            return this.option.large ? 1e4 : this.get('progressiveThreshold');\n        }\n        return progressiveThreshold;\n    },\n\n    defaultOption: {\n        coordinateSystem: 'cartesian2d',\n        zlevel: 0,\n        z: 2,\n        legendHoverLink: true,\n\n        hoverAnimation: true,\n        // Cartesian coordinate system\n        // xAxisIndex: 0,\n        // yAxisIndex: 0,\n\n        // Polar coordinate system\n        // polarIndex: 0,\n\n        // Geo coordinate system\n        // geoIndex: 0,\n\n        // symbol: null,        // 图形类型\n        symbolSize: 10,          // 图形大小，半宽（半径）参数，当图形为方向或菱形则总宽度为symbolSize * 2\n        // symbolRotate: null,  // 图形旋转控制\n\n        large: false,\n        // Available when large is true\n        largeThreshold: 2000,\n        // cursor: null,\n\n        // label: {\n            // show: false\n            // distance: 5,\n            // formatter: 标签文本格式器，同Tooltip.formatter，不支持异步回调\n            // position: 默认自适应，水平布局为'top'，垂直布局为'right'，可选为\n            //           'inside'|'left'|'right'|'top'|'bottom'\n            // 默认使用全局文本样式，详见TEXTSTYLE\n        // },\n        itemStyle: {\n            opacity: 0.8\n            // color: 各异\n        }\n\n        // progressive: null\n    }\n\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/* global Float32Array */\n\n// TODO Batch by color\n\nvar BOOST_SIZE_THRESHOLD = 4;\n\nvar LargeSymbolPath = extendShape({\n\n    shape: {\n        points: null\n    },\n\n    symbolProxy: null,\n\n    buildPath: function (path, shape) {\n        var points = shape.points;\n        var size = shape.size;\n\n        var symbolProxy = this.symbolProxy;\n        var symbolProxyShape = symbolProxy.shape;\n        var ctx = path.getContext ? path.getContext() : path;\n        var canBoost = ctx && size[0] < BOOST_SIZE_THRESHOLD;\n\n        // Do draw in afterBrush.\n        if (canBoost) {\n            return;\n        }\n\n        for (var i = 0; i < points.length;) {\n            var x = points[i++];\n            var y = points[i++];\n\n            if (isNaN(x) || isNaN(y)) {\n                continue;\n            }\n\n            symbolProxyShape.x = x - size[0] / 2;\n            symbolProxyShape.y = y - size[1] / 2;\n            symbolProxyShape.width = size[0];\n            symbolProxyShape.height = size[1];\n\n            symbolProxy.buildPath(path, symbolProxyShape, true);\n        }\n    },\n\n    afterBrush: function (ctx) {\n        var shape = this.shape;\n        var points = shape.points;\n        var size = shape.size;\n        var canBoost = size[0] < BOOST_SIZE_THRESHOLD;\n\n        if (!canBoost) {\n            return;\n        }\n\n        this.setTransform(ctx);\n        // PENDING If style or other canvas status changed?\n        for (var i = 0; i < points.length;) {\n            var x = points[i++];\n            var y = points[i++];\n            if (isNaN(x) || isNaN(y)) {\n                continue;\n            }\n            // fillRect is faster than building a rect path and draw.\n            // And it support light globalCompositeOperation.\n            ctx.fillRect(\n                x - size[0] / 2, y - size[1] / 2,\n                size[0], size[1]\n            );\n        }\n\n        this.restoreTransform(ctx);\n    },\n\n    findDataIndex: function (x, y) {\n        // TODO ???\n        // Consider transform\n\n        var shape = this.shape;\n        var points = shape.points;\n        var size = shape.size;\n\n        var w = Math.max(size[0], 4);\n        var h = Math.max(size[1], 4);\n\n        // Not consider transform\n        // Treat each element as a rect\n        // top down traverse\n        for (var idx = points.length / 2 - 1; idx >= 0; idx--) {\n            var i = idx * 2;\n            var x0 = points[i] - w / 2;\n            var y0 = points[i + 1] - h / 2;\n            if (x >= x0 && y >= y0 && x <= x0 + w && y <= y0 + h) {\n                return idx;\n            }\n        }\n\n        return -1;\n    }\n});\n\nfunction LargeSymbolDraw() {\n    this.group = new Group();\n}\n\nvar largeSymbolProto = LargeSymbolDraw.prototype;\n\nlargeSymbolProto.isPersistent = function () {\n    return !this._incremental;\n};\n\n/**\n * Update symbols draw by new data\n * @param {module:echarts/data/List} data\n */\nlargeSymbolProto.updateData = function (data) {\n    this.group.removeAll();\n    var symbolEl = new LargeSymbolPath({\n        rectHover: true,\n        cursor: 'default'\n    });\n\n    symbolEl.setShape({\n        points: data.getLayout('symbolPoints')\n    });\n    this._setCommon(symbolEl, data);\n    this.group.add(symbolEl);\n\n    this._incremental = null;\n};\n\nlargeSymbolProto.updateLayout = function (data) {\n    if (this._incremental) {\n        return;\n    }\n\n    var points = data.getLayout('symbolPoints');\n    this.group.eachChild(function (child) {\n        if (child.startIndex != null) {\n            var len = (child.endIndex - child.startIndex) * 2;\n            var byteOffset = child.startIndex * 4 * 2;\n            points = new Float32Array(points.buffer, byteOffset, len);\n        }\n        child.setShape('points', points);\n    });\n};\n\nlargeSymbolProto.incrementalPrepareUpdate = function (data) {\n    this.group.removeAll();\n\n    this._clearIncremental();\n    // Only use incremental displayables when data amount is larger than 2 million.\n    // PENDING Incremental data?\n    if (data.count() > 2e6) {\n        if (!this._incremental) {\n            this._incremental = new IncrementalDisplayble({\n                silent: true\n            });\n        }\n        this.group.add(this._incremental);\n    }\n    else {\n        this._incremental = null;\n    }\n};\n\nlargeSymbolProto.incrementalUpdate = function (taskParams, data) {\n    var symbolEl;\n    if (this._incremental) {\n        symbolEl = new LargeSymbolPath();\n        this._incremental.addDisplayable(symbolEl, true);\n    }\n    else {\n        symbolEl = new LargeSymbolPath({\n            rectHover: true,\n            cursor: 'default',\n            startIndex: taskParams.start,\n            endIndex: taskParams.end\n        });\n        symbolEl.incremental = true;\n        this.group.add(symbolEl);\n    }\n\n    symbolEl.setShape({\n        points: data.getLayout('symbolPoints')\n    });\n    this._setCommon(symbolEl, data, !!this._incremental);\n};\n\nlargeSymbolProto._setCommon = function (symbolEl, data, isIncremental) {\n    var hostModel = data.hostModel;\n\n    // TODO\n    // if (data.hasItemVisual.symbolSize) {\n    //     // TODO typed array?\n    //     symbolEl.setShape('sizes', data.mapArray(\n    //         function (idx) {\n    //             var size = data.getItemVisual(idx, 'symbolSize');\n    //             return (size instanceof Array) ? size : [size, size];\n    //         }\n    //     ));\n    // }\n    // else {\n    var size = data.getVisual('symbolSize');\n    symbolEl.setShape('size', (size instanceof Array) ? size : [size, size]);\n    // }\n\n    // Create symbolProxy to build path for each data\n    symbolEl.symbolProxy = createSymbol(\n        data.getVisual('symbol'), 0, 0, 0, 0\n    );\n    // Use symbolProxy setColor method\n    symbolEl.setColor = symbolEl.symbolProxy.setColor;\n\n    var extrudeShadow = symbolEl.shape.size[0] < BOOST_SIZE_THRESHOLD;\n    symbolEl.useStyle(\n        // Draw shadow when doing fillRect is extremely slow.\n        hostModel.getModel('itemStyle').getItemStyle(extrudeShadow ? ['color', 'shadowBlur', 'shadowColor'] : ['color'])\n    );\n\n    var visualColor = data.getVisual('color');\n    if (visualColor) {\n        symbolEl.setColor(visualColor);\n    }\n\n    if (!isIncremental) {\n        // Enable tooltip\n        // PENDING May have performance issue when path is extremely large\n        symbolEl.seriesIndex = hostModel.seriesIndex;\n        symbolEl.on('mousemove', function (e) {\n            symbolEl.dataIndex = null;\n            var dataIndex = symbolEl.findDataIndex(e.offsetX, e.offsetY);\n            if (dataIndex >= 0) {\n                // Provide dataIndex for tooltip\n                symbolEl.dataIndex = dataIndex + (symbolEl.startIndex || 0);\n            }\n        });\n    }\n};\n\nlargeSymbolProto.remove = function () {\n    this._clearIncremental();\n    this._incremental = null;\n    this.group.removeAll();\n};\n\nlargeSymbolProto._clearIncremental = function () {\n    var incremental = this._incremental;\n    if (incremental) {\n        incremental.clearDisplaybles();\n    }\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nextendChartView({\n\n    type: 'scatter',\n\n    render: function (seriesModel, ecModel, api) {\n        var data = seriesModel.getData();\n\n        var symbolDraw = this._updateSymbolDraw(data, seriesModel);\n        symbolDraw.updateData(data);\n\n        this._finished = true;\n    },\n\n    incrementalPrepareRender: function (seriesModel, ecModel, api) {\n        var data = seriesModel.getData();\n        var symbolDraw = this._updateSymbolDraw(data, seriesModel);\n\n        symbolDraw.incrementalPrepareUpdate(data);\n\n        this._finished = false;\n    },\n\n    incrementalRender: function (taskParams, seriesModel, ecModel) {\n        this._symbolDraw.incrementalUpdate(taskParams, seriesModel.getData());\n\n        this._finished = taskParams.end === seriesModel.getData().count();\n    },\n\n    updateTransform: function (seriesModel, ecModel, api) {\n        var data = seriesModel.getData();\n        // Must mark group dirty and make sure the incremental layer will be cleared\n        // PENDING\n        this.group.dirty();\n\n        if (!this._finished || data.count() > 1e4 || !this._symbolDraw.isPersistent()) {\n            return {\n                update: true\n            };\n        }\n        else {\n            var res = pointsLayout().reset(seriesModel);\n            if (res.progress) {\n                res.progress({ start: 0, end: data.count() }, data);\n            }\n\n            this._symbolDraw.updateLayout(data);\n        }\n    },\n\n    _updateSymbolDraw: function (data, seriesModel) {\n        var symbolDraw = this._symbolDraw;\n        var pipelineContext = seriesModel.pipelineContext;\n        var isLargeDraw = pipelineContext.large;\n\n        if (!symbolDraw || isLargeDraw !== this._isLargeDraw) {\n            symbolDraw && symbolDraw.remove();\n            symbolDraw = this._symbolDraw = isLargeDraw\n                ? new LargeSymbolDraw()\n                : new SymbolDraw();\n            this._isLargeDraw = isLargeDraw;\n            this.group.removeAll();\n        }\n\n        this.group.add(symbolDraw.group);\n\n        return symbolDraw;\n    },\n\n    remove: function (ecModel, api) {\n        this._symbolDraw && this._symbolDraw.remove(true);\n        this._symbolDraw = null;\n    },\n\n    dispose: function () {}\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n// import * as zrUtil from 'zrender/src/core/util';\n\n// In case developer forget to include grid component\nregisterVisual(visualSymbol('scatter', 'circle'));\nregisterLayout(pointsLayout('scatter'));\n\n// echarts.registerProcessor(function (ecModel, api) {\n//     ecModel.eachSeriesByType('scatter', function (seriesModel) {\n//         var data = seriesModel.getData();\n//         var coordSys = seriesModel.coordinateSystem;\n//         if (coordSys.type !== 'geo') {\n//             return;\n//         }\n//         var startPt = coordSys.pointToData([0, 0]);\n//         var endPt = coordSys.pointToData([api.getWidth(), api.getHeight()]);\n\n//         var dims = zrUtil.map(coordSys.dimensions, function (dim) {\n//             return data.mapDimension(dim);\n//         });\n//         var range = {};\n//         range[dims[0]] = [Math.min(startPt[0], endPt[0]), Math.max(startPt[0], endPt[0])];\n//         range[dims[1]] = [Math.min(startPt[1], endPt[1]), Math.max(startPt[1], endPt[1])];\n\n//         data.selectRange(range);\n//     });\n// });\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nfunction IndicatorAxis(dim, scale, radiusExtent) {\n    Axis.call(this, dim, scale, radiusExtent);\n\n    /**\n     * Axis type\n     *  - 'category'\n     *  - 'value'\n     *  - 'time'\n     *  - 'log'\n     * @type {string}\n     */\n    this.type = 'value';\n\n    this.angle = 0;\n\n    /**\n     * Indicator name\n     * @type {string}\n     */\n    this.name = '';\n    /**\n     * @type {module:echarts/model/Model}\n     */\n    this.model;\n}\n\ninherits(IndicatorAxis, Axis);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n// TODO clockwise\n\nfunction Radar(radarModel, ecModel, api) {\n\n    this._model = radarModel;\n    /**\n     * Radar dimensions\n     * @type {Array.<string>}\n     */\n    this.dimensions = [];\n\n    this._indicatorAxes = map(radarModel.getIndicatorModels(), function (indicatorModel, idx) {\n        var dim = 'indicator_' + idx;\n        var indicatorAxis = new IndicatorAxis(dim, new IntervalScale());\n        indicatorAxis.name = indicatorModel.get('name');\n        // Inject model and axis\n        indicatorAxis.model = indicatorModel;\n        indicatorModel.axis = indicatorAxis;\n        this.dimensions.push(dim);\n        return indicatorAxis;\n    }, this);\n\n    this.resize(radarModel, api);\n\n    /**\n     * @type {number}\n     * @readOnly\n     */\n    this.cx;\n    /**\n     * @type {number}\n     * @readOnly\n     */\n    this.cy;\n    /**\n     * @type {number}\n     * @readOnly\n     */\n    this.r;\n    /**\n     * @type {number}\n     * @readOnly\n     */\n    this.r0;\n    /**\n     * @type {number}\n     * @readOnly\n     */\n    this.startAngle;\n}\n\nRadar.prototype.getIndicatorAxes = function () {\n    return this._indicatorAxes;\n};\n\nRadar.prototype.dataToPoint = function (value, indicatorIndex) {\n    var indicatorAxis = this._indicatorAxes[indicatorIndex];\n\n    return this.coordToPoint(indicatorAxis.dataToCoord(value), indicatorIndex);\n};\n\nRadar.prototype.coordToPoint = function (coord, indicatorIndex) {\n    var indicatorAxis = this._indicatorAxes[indicatorIndex];\n    var angle = indicatorAxis.angle;\n    var x = this.cx + coord * Math.cos(angle);\n    var y = this.cy - coord * Math.sin(angle);\n    return [x, y];\n};\n\nRadar.prototype.pointToData = function (pt) {\n    var dx = pt[0] - this.cx;\n    var dy = pt[1] - this.cy;\n    var radius = Math.sqrt(dx * dx + dy * dy);\n    dx /= radius;\n    dy /= radius;\n\n    var radian = Math.atan2(-dy, dx);\n\n    // Find the closest angle\n    // FIXME index can calculated directly\n    var minRadianDiff = Infinity;\n    var closestAxis;\n    var closestAxisIdx = -1;\n    for (var i = 0; i < this._indicatorAxes.length; i++) {\n        var indicatorAxis = this._indicatorAxes[i];\n        var diff = Math.abs(radian - indicatorAxis.angle);\n        if (diff < minRadianDiff) {\n            closestAxis = indicatorAxis;\n            closestAxisIdx = i;\n            minRadianDiff = diff;\n        }\n    }\n\n    return [closestAxisIdx, +(closestAxis && closestAxis.coodToData(radius))];\n};\n\nRadar.prototype.resize = function (radarModel, api) {\n    var center = radarModel.get('center');\n    var viewWidth = api.getWidth();\n    var viewHeight = api.getHeight();\n    var viewSize = Math.min(viewWidth, viewHeight) / 2;\n    this.cx = parsePercent$1(center[0], viewWidth);\n    this.cy = parsePercent$1(center[1], viewHeight);\n\n    this.startAngle = radarModel.get('startAngle') * Math.PI / 180;\n\n    // radius may be single value like `20`, `'80%'`, or array like `[10, '80%']`\n    var radius = radarModel.get('radius');\n    if (typeof radius === 'string' || typeof radius === 'number') {\n        radius = [0, radius];\n    }\n    this.r0 = parsePercent$1(radius[0], viewSize);\n    this.r = parsePercent$1(radius[1], viewSize);\n\n    each$1(this._indicatorAxes, function (indicatorAxis, idx) {\n        indicatorAxis.setExtent(this.r0, this.r);\n        var angle = (this.startAngle + idx * Math.PI * 2 / this._indicatorAxes.length);\n        // Normalize to [-PI, PI]\n        angle = Math.atan2(Math.sin(angle), Math.cos(angle));\n        indicatorAxis.angle = angle;\n    }, this);\n};\n\nRadar.prototype.update = function (ecModel, api) {\n    var indicatorAxes = this._indicatorAxes;\n    var radarModel = this._model;\n    each$1(indicatorAxes, function (indicatorAxis) {\n        indicatorAxis.scale.setExtent(Infinity, -Infinity);\n    });\n    ecModel.eachSeriesByType('radar', function (radarSeries, idx) {\n        if (radarSeries.get('coordinateSystem') !== 'radar'\n            || ecModel.getComponent('radar', radarSeries.get('radarIndex')) !== radarModel\n        ) {\n            return;\n        }\n        var data = radarSeries.getData();\n        each$1(indicatorAxes, function (indicatorAxis) {\n            indicatorAxis.scale.unionExtentFromData(data, data.mapDimension(indicatorAxis.dim));\n        });\n    }, this);\n\n    var splitNumber = radarModel.get('splitNumber');\n\n    function increaseInterval(interval) {\n        var exp10 = Math.pow(10, Math.floor(Math.log(interval) / Math.LN10));\n        // Increase interval\n        var f = interval / exp10;\n        if (f === 2) {\n            f = 5;\n        }\n        else { // f is 2 or 5\n            f *= 2;\n        }\n        return f * exp10;\n    }\n    // Force all the axis fixing the maxSplitNumber.\n    each$1(indicatorAxes, function (indicatorAxis, idx) {\n        var rawExtent = getScaleExtent(indicatorAxis.scale, indicatorAxis.model);\n        niceScaleExtent(indicatorAxis.scale, indicatorAxis.model);\n\n        var axisModel = indicatorAxis.model;\n        var scale = indicatorAxis.scale;\n        var fixedMin = axisModel.getMin();\n        var fixedMax = axisModel.getMax();\n        var interval = scale.getInterval();\n\n        if (fixedMin != null && fixedMax != null) {\n            // User set min, max, divide to get new interval\n            scale.setExtent(+fixedMin, +fixedMax);\n            scale.setInterval(\n                (fixedMax - fixedMin) / splitNumber\n            );\n        }\n        else if (fixedMin != null) {\n            var max;\n            // User set min, expand extent on the other side\n            do {\n                max = fixedMin + interval * splitNumber;\n                scale.setExtent(+fixedMin, max);\n                // Interval must been set after extent\n                // FIXME\n                scale.setInterval(interval);\n\n                interval = increaseInterval(interval);\n            } while (max < rawExtent[1] && isFinite(max) && isFinite(rawExtent[1]));\n        }\n        else if (fixedMax != null) {\n            var min;\n            // User set min, expand extent on the other side\n            do {\n                min = fixedMax - interval * splitNumber;\n                scale.setExtent(min, +fixedMax);\n                scale.setInterval(interval);\n                interval = increaseInterval(interval);\n            } while (min > rawExtent[0] && isFinite(min) && isFinite(rawExtent[0]));\n        }\n        else {\n            var nicedSplitNumber = scale.getTicks().length - 1;\n            if (nicedSplitNumber > splitNumber) {\n                interval = increaseInterval(interval);\n            }\n            // PENDING\n            var center = Math.round((rawExtent[0] + rawExtent[1]) / 2 / interval) * interval;\n            var halfSplitNumber = Math.round(splitNumber / 2);\n            scale.setExtent(\n                round$1(center - halfSplitNumber * interval),\n                round$1(center + (splitNumber - halfSplitNumber) * interval)\n            );\n            scale.setInterval(interval);\n        }\n    });\n};\n\n/**\n * Radar dimensions is based on the data\n * @type {Array}\n */\nRadar.dimensions = [];\n\nRadar.create = function (ecModel, api) {\n    var radarList = [];\n    ecModel.eachComponent('radar', function (radarModel) {\n        var radar = new Radar(radarModel, ecModel, api);\n        radarList.push(radar);\n        radarModel.coordinateSystem = radar;\n    });\n    ecModel.eachSeriesByType('radar', function (radarSeries) {\n        if (radarSeries.get('coordinateSystem') === 'radar') {\n            // Inject coordinate system\n            radarSeries.coordinateSystem = radarList[radarSeries.get('radarIndex') || 0];\n        }\n    });\n    return radarList;\n};\n\nCoordinateSystemManager.register('radar', Radar);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar valueAxisDefault = axisDefault.valueAxis;\n\nfunction defaultsShow(opt, show) {\n    return defaults({\n        show: show\n    }, opt);\n}\n\nvar RadarModel = extendComponentModel({\n\n    type: 'radar',\n\n    optionUpdated: function () {\n        var boundaryGap = this.get('boundaryGap');\n        var splitNumber = this.get('splitNumber');\n        var scale = this.get('scale');\n        var axisLine = this.get('axisLine');\n        var axisTick = this.get('axisTick');\n        var axisLabel = this.get('axisLabel');\n        var nameTextStyle = this.get('name');\n        var showName = this.get('name.show');\n        var nameFormatter = this.get('name.formatter');\n        var nameGap = this.get('nameGap');\n        var triggerEvent = this.get('triggerEvent');\n\n        var indicatorModels = map(this.get('indicator') || [], function (indicatorOpt) {\n            // PENDING\n            if (indicatorOpt.max != null && indicatorOpt.max > 0 && !indicatorOpt.min) {\n                indicatorOpt.min = 0;\n            }\n            else if (indicatorOpt.min != null && indicatorOpt.min < 0 && !indicatorOpt.max) {\n                indicatorOpt.max = 0;\n            }\n            var iNameTextStyle = nameTextStyle;\n            if (indicatorOpt.color != null) {\n                iNameTextStyle = defaults({color: indicatorOpt.color}, nameTextStyle);\n            }\n            // Use same configuration\n            indicatorOpt = merge(clone(indicatorOpt), {\n                boundaryGap: boundaryGap,\n                splitNumber: splitNumber,\n                scale: scale,\n                axisLine: axisLine,\n                axisTick: axisTick,\n                axisLabel: axisLabel,\n                // Competitable with 2 and use text\n                name: indicatorOpt.text,\n                nameLocation: 'end',\n                nameGap: nameGap,\n                // min: 0,\n                nameTextStyle: iNameTextStyle,\n                triggerEvent: triggerEvent\n            }, false);\n            if (!showName) {\n                indicatorOpt.name = '';\n            }\n            if (typeof nameFormatter === 'string') {\n                var indName = indicatorOpt.name;\n                indicatorOpt.name = nameFormatter.replace('{value}', indName != null ? indName : '');\n            }\n            else if (typeof nameFormatter === 'function') {\n                indicatorOpt.name = nameFormatter(\n                    indicatorOpt.name, indicatorOpt\n                );\n            }\n            var model = extend(\n                new Model(indicatorOpt, null, this.ecModel),\n                axisModelCommonMixin\n            );\n\n            // For triggerEvent.\n            model.mainType = 'radar';\n            model.componentIndex = this.componentIndex;\n\n            return model;\n        }, this);\n\n        this.getIndicatorModels = function () {\n            return indicatorModels;\n        };\n    },\n\n    defaultOption: {\n\n        zlevel: 0,\n\n        z: 0,\n\n        center: ['50%', '50%'],\n\n        radius: '75%',\n\n        startAngle: 90,\n\n        name: {\n            show: true\n            // formatter: null\n            // textStyle: {}\n        },\n\n        boundaryGap: [0, 0],\n\n        splitNumber: 5,\n\n        nameGap: 15,\n\n        scale: false,\n\n        // Polygon or circle\n        shape: 'polygon',\n\n        axisLine: merge(\n            {\n                lineStyle: {\n                    color: '#bbb'\n                }\n            },\n            valueAxisDefault.axisLine\n        ),\n        axisLabel: defaultsShow(valueAxisDefault.axisLabel, false),\n        axisTick: defaultsShow(valueAxisDefault.axisTick, false),\n        splitLine: defaultsShow(valueAxisDefault.splitLine, true),\n        splitArea: defaultsShow(valueAxisDefault.splitArea, true),\n\n        // {text, min, max}\n        indicator: []\n    }\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar axisBuilderAttrs$1 = [\n    'axisLine', 'axisTickLabel', 'axisName'\n];\n\nextendComponentView({\n\n    type: 'radar',\n\n    render: function (radarModel, ecModel, api) {\n        var group = this.group;\n        group.removeAll();\n\n        this._buildAxes(radarModel);\n        this._buildSplitLineAndArea(radarModel);\n    },\n\n    _buildAxes: function (radarModel) {\n        var radar = radarModel.coordinateSystem;\n        var indicatorAxes = radar.getIndicatorAxes();\n        var axisBuilders = map(indicatorAxes, function (indicatorAxis) {\n            var axisBuilder = new AxisBuilder(indicatorAxis.model, {\n                position: [radar.cx, radar.cy],\n                rotation: indicatorAxis.angle,\n                labelDirection: -1,\n                tickDirection: -1,\n                nameDirection: 1\n            });\n            return axisBuilder;\n        });\n\n        each$1(axisBuilders, function (axisBuilder) {\n            each$1(axisBuilderAttrs$1, axisBuilder.add, axisBuilder);\n            this.group.add(axisBuilder.getGroup());\n        }, this);\n    },\n\n    _buildSplitLineAndArea: function (radarModel) {\n        var radar = radarModel.coordinateSystem;\n        var indicatorAxes = radar.getIndicatorAxes();\n        if (!indicatorAxes.length) {\n            return;\n        }\n        var shape = radarModel.get('shape');\n        var splitLineModel = radarModel.getModel('splitLine');\n        var splitAreaModel = radarModel.getModel('splitArea');\n        var lineStyleModel = splitLineModel.getModel('lineStyle');\n        var areaStyleModel = splitAreaModel.getModel('areaStyle');\n\n        var showSplitLine = splitLineModel.get('show');\n        var showSplitArea = splitAreaModel.get('show');\n        var splitLineColors = lineStyleModel.get('color');\n        var splitAreaColors = areaStyleModel.get('color');\n\n        splitLineColors = isArray(splitLineColors) ? splitLineColors : [splitLineColors];\n        splitAreaColors = isArray(splitAreaColors) ? splitAreaColors : [splitAreaColors];\n\n        var splitLines = [];\n        var splitAreas = [];\n\n        function getColorIndex(areaOrLine, areaOrLineColorList, idx) {\n            var colorIndex = idx % areaOrLineColorList.length;\n            areaOrLine[colorIndex] = areaOrLine[colorIndex] || [];\n            return colorIndex;\n        }\n\n        if (shape === 'circle') {\n            var ticksRadius = indicatorAxes[0].getTicksCoords();\n            var cx = radar.cx;\n            var cy = radar.cy;\n            for (var i = 0; i < ticksRadius.length; i++) {\n                if (showSplitLine) {\n                    var colorIndex = getColorIndex(splitLines, splitLineColors, i);\n                    splitLines[colorIndex].push(new Circle({\n                        shape: {\n                            cx: cx,\n                            cy: cy,\n                            r: ticksRadius[i].coord\n                        }\n                    }));\n                }\n                if (showSplitArea && i < ticksRadius.length - 1) {\n                    var colorIndex = getColorIndex(splitAreas, splitAreaColors, i);\n                    splitAreas[colorIndex].push(new Ring({\n                        shape: {\n                            cx: cx,\n                            cy: cy,\n                            r0: ticksRadius[i].coord,\n                            r: ticksRadius[i + 1].coord\n                        }\n                    }));\n                }\n            }\n        }\n        // Polyyon\n        else {\n            var realSplitNumber;\n            var axesTicksPoints = map(indicatorAxes, function (indicatorAxis, idx) {\n                var ticksCoords = indicatorAxis.getTicksCoords();\n                realSplitNumber = realSplitNumber == null\n                    ? ticksCoords.length - 1\n                    : Math.min(ticksCoords.length - 1, realSplitNumber);\n                return map(ticksCoords, function (tickCoord) {\n                    return radar.coordToPoint(tickCoord.coord, idx);\n                });\n            });\n\n            var prevPoints = [];\n            for (var i = 0; i <= realSplitNumber; i++) {\n                var points = [];\n                for (var j = 0; j < indicatorAxes.length; j++) {\n                    points.push(axesTicksPoints[j][i]);\n                }\n                // Close\n                if (points[0]) {\n                    points.push(points[0].slice());\n                }\n                else {\n                    if (__DEV__) {\n                        console.error('Can\\'t draw value axis ' + i);\n                    }\n                }\n\n                if (showSplitLine) {\n                    var colorIndex = getColorIndex(splitLines, splitLineColors, i);\n                    splitLines[colorIndex].push(new Polyline({\n                        shape: {\n                            points: points\n                        }\n                    }));\n                }\n                if (showSplitArea && prevPoints) {\n                    var colorIndex = getColorIndex(splitAreas, splitAreaColors, i - 1);\n                    splitAreas[colorIndex].push(new Polygon({\n                        shape: {\n                            points: points.concat(prevPoints)\n                        }\n                    }));\n                }\n                prevPoints = points.slice().reverse();\n            }\n        }\n\n        var lineStyle = lineStyleModel.getLineStyle();\n        var areaStyle = areaStyleModel.getAreaStyle();\n        // Add splitArea before splitLine\n        each$1(splitAreas, function (splitAreas, idx) {\n            this.group.add(mergePath(\n                splitAreas, {\n                    style: defaults({\n                        stroke: 'none',\n                        fill: splitAreaColors[idx % splitAreaColors.length]\n                    }, areaStyle),\n                    silent: true\n                }\n            ));\n        }, this);\n\n        each$1(splitLines, function (splitLines, idx) {\n            this.group.add(mergePath(\n                splitLines, {\n                    style: defaults({\n                        fill: 'none',\n                        stroke: splitLineColors[idx % splitLineColors.length]\n                    }, lineStyle),\n                    silent: true\n                }\n            ));\n        }, this);\n\n    }\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar RadarSeries = SeriesModel.extend({\n\n    type: 'series.radar',\n\n    dependencies: ['radar'],\n\n\n    // Overwrite\n    init: function (option) {\n        RadarSeries.superApply(this, 'init', arguments);\n\n        // Enable legend selection for each data item\n        // Use a function instead of direct access because data reference may changed\n        this.legendDataProvider = function () {\n            return this.getRawData();\n        };\n    },\n\n    getInitialData: function (option, ecModel) {\n        return createListSimply(this, {\n            generateCoord: 'indicator_',\n            generateCoordCount: Infinity\n        });\n    },\n\n    formatTooltip: function (dataIndex) {\n        var data = this.getData();\n        var coordSys = this.coordinateSystem;\n        var indicatorAxes = coordSys.getIndicatorAxes();\n        var name = this.getData().getName(dataIndex);\n        return encodeHTML(name === '' ? this.name : name) + '<br/>'\n            + map(indicatorAxes, function (axis, idx) {\n                var val = data.get(data.mapDimension(axis.dim), dataIndex);\n                return encodeHTML(axis.name + ' : ' + val);\n            }).join('<br />');\n    },\n\n    defaultOption: {\n        zlevel: 0,\n        z: 2,\n        coordinateSystem: 'radar',\n        legendHoverLink: true,\n        radarIndex: 0,\n        lineStyle: {\n            width: 2,\n            type: 'solid'\n        },\n        label: {\n            position: 'top'\n        },\n        // areaStyle: {\n        // },\n        // itemStyle: {}\n        symbol: 'emptyCircle',\n        symbolSize: 4\n        // symbolRotate: null\n    }\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nfunction normalizeSymbolSize(symbolSize) {\n    if (!isArray(symbolSize)) {\n        symbolSize = [+symbolSize, +symbolSize];\n    }\n    return symbolSize;\n}\n\nextendChartView({\n\n    type: 'radar',\n\n    render: function (seriesModel, ecModel, api) {\n        var polar = seriesModel.coordinateSystem;\n        var group = this.group;\n\n        var data = seriesModel.getData();\n        var oldData = this._data;\n\n        function createSymbol$$1(data, idx) {\n            var symbolType = data.getItemVisual(idx, 'symbol') || 'circle';\n            var color = data.getItemVisual(idx, 'color');\n            if (symbolType === 'none') {\n                return;\n            }\n            var symbolSize = normalizeSymbolSize(\n                data.getItemVisual(idx, 'symbolSize')\n            );\n            var symbolPath = createSymbol(\n                symbolType, -1, -1, 2, 2, color\n            );\n            symbolPath.attr({\n                style: {\n                    strokeNoScale: true\n                },\n                z2: 100,\n                scale: [symbolSize[0] / 2, symbolSize[1] / 2]\n            });\n            return symbolPath;\n        }\n\n        function updateSymbols(oldPoints, newPoints, symbolGroup, data, idx, isInit) {\n            // Simply rerender all\n            symbolGroup.removeAll();\n            for (var i = 0; i < newPoints.length - 1; i++) {\n                var symbolPath = createSymbol$$1(data, idx);\n                if (symbolPath) {\n                    symbolPath.__dimIdx = i;\n                    if (oldPoints[i]) {\n                        symbolPath.attr('position', oldPoints[i]);\n                        graphic[isInit ? 'initProps' : 'updateProps'](\n                            symbolPath, {\n                                position: newPoints[i]\n                            }, seriesModel, idx\n                        );\n                    }\n                    else {\n                        symbolPath.attr('position', newPoints[i]);\n                    }\n                    symbolGroup.add(symbolPath);\n                }\n            }\n        }\n\n        function getInitialPoints(points) {\n            return map(points, function (pt) {\n                return [polar.cx, polar.cy];\n            });\n        }\n        data.diff(oldData)\n            .add(function (idx) {\n                var points = data.getItemLayout(idx);\n                if (!points) {\n                    return;\n                }\n                var polygon = new Polygon();\n                var polyline = new Polyline();\n                var target = {\n                    shape: {\n                        points: points\n                    }\n                };\n\n                polygon.shape.points = getInitialPoints(points);\n                polyline.shape.points = getInitialPoints(points);\n                initProps(polygon, target, seriesModel, idx);\n                initProps(polyline, target, seriesModel, idx);\n\n                var itemGroup = new Group();\n                var symbolGroup = new Group();\n                itemGroup.add(polyline);\n                itemGroup.add(polygon);\n                itemGroup.add(symbolGroup);\n\n                updateSymbols(\n                    polyline.shape.points, points, symbolGroup, data, idx, true\n                );\n\n                data.setItemGraphicEl(idx, itemGroup);\n            })\n            .update(function (newIdx, oldIdx) {\n                var itemGroup = oldData.getItemGraphicEl(oldIdx);\n                var polyline = itemGroup.childAt(0);\n                var polygon = itemGroup.childAt(1);\n                var symbolGroup = itemGroup.childAt(2);\n                var target = {\n                    shape: {\n                        points: data.getItemLayout(newIdx)\n                    }\n                };\n\n                if (!target.shape.points) {\n                    return;\n                }\n                updateSymbols(\n                    polyline.shape.points, target.shape.points, symbolGroup, data, newIdx, false\n                );\n\n                updateProps(polyline, target, seriesModel);\n                updateProps(polygon, target, seriesModel);\n\n                data.setItemGraphicEl(newIdx, itemGroup);\n            })\n            .remove(function (idx) {\n                group.remove(oldData.getItemGraphicEl(idx));\n            })\n            .execute();\n\n        data.eachItemGraphicEl(function (itemGroup, idx) {\n            var itemModel = data.getItemModel(idx);\n            var polyline = itemGroup.childAt(0);\n            var polygon = itemGroup.childAt(1);\n            var symbolGroup = itemGroup.childAt(2);\n            var color = data.getItemVisual(idx, 'color');\n\n            group.add(itemGroup);\n\n            polyline.useStyle(\n                defaults(\n                    itemModel.getModel('lineStyle').getLineStyle(),\n                    {\n                        fill: 'none',\n                        stroke: color\n                    }\n                )\n            );\n            polyline.hoverStyle = itemModel.getModel('emphasis.lineStyle').getLineStyle();\n\n            var areaStyleModel = itemModel.getModel('areaStyle');\n            var hoverAreaStyleModel = itemModel.getModel('emphasis.areaStyle');\n            var polygonIgnore = areaStyleModel.isEmpty() && areaStyleModel.parentModel.isEmpty();\n            var hoverPolygonIgnore = hoverAreaStyleModel.isEmpty() && hoverAreaStyleModel.parentModel.isEmpty();\n\n            hoverPolygonIgnore = hoverPolygonIgnore && polygonIgnore;\n            polygon.ignore = polygonIgnore;\n\n            polygon.useStyle(\n                defaults(\n                    areaStyleModel.getAreaStyle(),\n                    {\n                        fill: color,\n                        opacity: 0.7\n                    }\n                )\n            );\n            polygon.hoverStyle = hoverAreaStyleModel.getAreaStyle();\n\n            var itemStyle = itemModel.getModel('itemStyle').getItemStyle(['color']);\n            var itemHoverStyle = itemModel.getModel('emphasis.itemStyle').getItemStyle();\n            var labelModel = itemModel.getModel('label');\n            var labelHoverModel = itemModel.getModel('emphasis.label');\n            symbolGroup.eachChild(function (symbolPath) {\n                symbolPath.setStyle(itemStyle);\n                symbolPath.hoverStyle = clone(itemHoverStyle);\n                var defaultText = data.get(data.dimensions[symbolPath.__dimIdx], idx);\n                (defaultText == null || isNaN(defaultText)) && (defaultText = '');\n\n                setLabelStyle(\n                    symbolPath.style, symbolPath.hoverStyle, labelModel, labelHoverModel,\n                    {\n                        labelFetcher: data.hostModel,\n                        labelDataIndex: idx,\n                        labelDimIndex: symbolPath.__dimIdx,\n                        defaultText: defaultText,\n                        autoColor: color,\n                        isRectText: true\n                    }\n                );\n            });\n\n            itemGroup.highDownOnUpdate = function (fromState, toState) {\n                polygon.attr('ignore', toState === 'emphasis' ? hoverPolygonIgnore : polygonIgnore);\n            };\n            setHoverStyle(itemGroup);\n        });\n\n        this._data = data;\n    },\n\n    remove: function () {\n        this.group.removeAll();\n        this._data = null;\n    },\n\n    dispose: function () {}\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar radarLayout = function (ecModel) {\n    ecModel.eachSeriesByType('radar', function (seriesModel) {\n        var data = seriesModel.getData();\n        var points = [];\n        var coordSys = seriesModel.coordinateSystem;\n        if (!coordSys) {\n            return;\n        }\n\n        var axes = coordSys.getIndicatorAxes();\n\n        each$1(axes, function (axis, axisIndex) {\n            data.each(data.mapDimension(axes[axisIndex].dim), function (val, dataIndex) {\n                points[dataIndex] = points[dataIndex] || [];\n                var point = coordSys.dataToPoint(val, axisIndex);\n                points[dataIndex][axisIndex] = isValidPoint(point)\n                    ? point : getValueMissingPoint(coordSys);\n            });\n        });\n\n        // Close polygon\n        data.each(function (idx) {\n            // TODO\n            // Is it appropriate to connect to the next data when some data is missing?\n            // Or, should trade it like `connectNull` in line chart?\n            var firstPoint = find(points[idx], function (point) {\n                return isValidPoint(point);\n            }) || getValueMissingPoint(coordSys);\n\n            // Copy the first actual point to the end of the array\n            points[idx].push(firstPoint.slice());\n            data.setItemLayout(idx, points[idx]);\n        });\n    });\n};\n\nfunction isValidPoint(point) {\n    return !isNaN(point[0]) && !isNaN(point[1]);\n}\n\nfunction getValueMissingPoint(coordSys) {\n    // It is error-prone to input [NaN, NaN] into polygon, polygon.\n    // (probably cause problem when refreshing or animating)\n    return [coordSys.cx, coordSys.cy];\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n// Backward compat for radar chart in 2\nvar backwardCompat$1 = function (option) {\n    var polarOptArr = option.polar;\n    if (polarOptArr) {\n        if (!isArray(polarOptArr)) {\n            polarOptArr = [polarOptArr];\n        }\n        var polarNotRadar = [];\n        each$1(polarOptArr, function (polarOpt, idx) {\n            if (polarOpt.indicator) {\n                if (polarOpt.type && !polarOpt.shape) {\n                    polarOpt.shape = polarOpt.type;\n                }\n                option.radar = option.radar || [];\n                if (!isArray(option.radar)) {\n                    option.radar = [option.radar];\n                }\n                option.radar.push(polarOpt);\n            }\n            else {\n                polarNotRadar.push(polarOpt);\n            }\n        });\n        option.polar = polarNotRadar;\n    }\n    each$1(option.series, function (seriesOpt) {\n        if (seriesOpt && seriesOpt.type === 'radar' && seriesOpt.polarIndex) {\n            seriesOpt.radarIndex = seriesOpt.polarIndex;\n        }\n    });\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n// Must use radar component\nregisterVisual(dataColor('radar'));\nregisterVisual(visualSymbol('radar', 'circle'));\nregisterLayout(radarLayout);\nregisterProcessor(dataFilter('radar'));\nregisterPreprocessor(backwardCompat$1);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n// Fix for 南海诸岛\n\nvar geoCoord = [126, 25];\n\nvar points$1 = [\n    [[0, 3.5], [7, 11.2], [15, 11.9], [30, 7], [42, 0.7], [52, 0.7],\n        [56, 7.7], [59, 0.7], [64, 0.7], [64, 0], [5, 0], [0, 3.5]],\n    [[13, 16.1], [19, 14.7], [16, 21.7], [11, 23.1], [13, 16.1]],\n    [[12, 32.2], [14, 38.5], [15, 38.5], [13, 32.2], [12, 32.2]],\n    [[16, 47.6], [12, 53.2], [13, 53.2], [18, 47.6], [16, 47.6]],\n    [[6, 64.4], [8, 70], [9, 70], [8, 64.4], [6, 64.4]],\n    [[23, 82.6], [29, 79.8], [30, 79.8], [25, 82.6], [23, 82.6]],\n    [[37, 70.7], [43, 62.3], [44, 62.3], [39, 70.7], [37, 70.7]],\n    [[48, 51.1], [51, 45.5], [53, 45.5], [50, 51.1], [48, 51.1]],\n    [[51, 35], [51, 28.7], [53, 28.7], [53, 35], [51, 35]],\n    [[52, 22.4], [55, 17.5], [56, 17.5], [53, 22.4], [52, 22.4]],\n    [[58, 12.6], [62, 7], [63, 7], [60, 12.6], [58, 12.6]],\n    [[0, 3.5], [0, 93.1], [64, 93.1], [64, 0], [63, 0], [63, 92.4],\n        [1, 92.4], [1, 3.5], [0, 3.5]]\n];\n\nfor (var i$1 = 0; i$1 < points$1.length; i$1++) {\n    for (var k = 0; k < points$1[i$1].length; k++) {\n        points$1[i$1][k][0] /= 10.5;\n        points$1[i$1][k][1] /= -10.5 / 0.75;\n\n        points$1[i$1][k][0] += geoCoord[0];\n        points$1[i$1][k][1] += geoCoord[1];\n    }\n}\n\nvar fixNanhai = function (mapType, regions) {\n    if (mapType === 'china') {\n        regions.push(new Region(\n            '南海诸岛',\n            map(points$1, function (exterior) {\n                return {\n                    type: 'polygon',\n                    exterior: exterior\n                };\n            }), geoCoord\n        ));\n    }\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar coordsOffsetMap = {\n    '南海诸岛': [32, 80],\n    // 全国\n    '广东': [0, -10],\n    '香港': [10, 5],\n    '澳门': [-10, 10],\n    //'北京': [-10, 0],\n    '天津': [5, 5]\n};\n\nvar fixTextCoord = function (mapType, region) {\n    if (mapType === 'china') {\n        var coordFix = coordsOffsetMap[region.name];\n        if (coordFix) {\n            var cp = region.center;\n            cp[0] += coordFix[0] / 10.5;\n            cp[1] += -coordFix[1] / (10.5 / 0.75);\n        }\n    }\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar geoCoordMap = {\n    'Russia': [100, 60],\n    'United States': [-99, 38],\n    'United States of America': [-99, 38]\n};\n\nvar fixGeoCoord = function (mapType, region) {\n    if (mapType === 'world') {\n        var geoCoord = geoCoordMap[region.name];\n        if (geoCoord) {\n            var cp = region.center;\n            cp[0] = geoCoord[0];\n            cp[1] = geoCoord[1];\n        }\n    }\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n// Fix for 钓鱼岛\n\n// var Region = require('../Region');\n// var zrUtil = require('zrender/src/core/util');\n\n// var geoCoord = [126, 25];\n\nvar points$2 = [\n    [\n        [123.45165252685547, 25.73527164402261],\n        [123.49731445312499, 25.73527164402261],\n        [123.49731445312499, 25.750734064600884],\n        [123.45165252685547, 25.750734064600884],\n        [123.45165252685547, 25.73527164402261]\n    ]\n];\n\nvar fixDiaoyuIsland = function (mapType, region) {\n    if (mapType === 'china' && region.name === '台湾') {\n        region.geometries.push({\n            type: 'polygon',\n            exterior: points$2[0]\n        });\n    }\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n// Built-in GEO fixer.\nvar inner$7 = makeInner();\n\nvar geoJSONLoader = {\n\n    /**\n     * @param {string} mapName\n     * @param {Object} mapRecord {specialAreas, geoJSON}\n     * @return {Object} {regions, boundingRect}\n     */\n    load: function (mapName, mapRecord) {\n\n        var parsed = inner$7(mapRecord).parsed;\n\n        if (parsed) {\n            return parsed;\n        }\n\n        var specialAreas = mapRecord.specialAreas || {};\n        var geoJSON = mapRecord.geoJSON;\n        var regions;\n\n        // https://jsperf.com/try-catch-performance-overhead\n        try {\n            regions = geoJSON ? parseGeoJson$1(geoJSON) : [];\n        }\n        catch (e) {\n            throw new Error('Invalid geoJson format\\n' + e.message);\n        }\n\n        each$1(regions, function (region) {\n            var regionName = region.name;\n\n            fixTextCoord(mapName, region);\n            fixGeoCoord(mapName, region);\n            fixDiaoyuIsland(mapName, region);\n\n            // Some area like Alaska in USA map needs to be tansformed\n            // to look better\n            var specialArea = specialAreas[regionName];\n            if (specialArea) {\n                region.transformTo(\n                    specialArea.left, specialArea.top, specialArea.width, specialArea.height\n                );\n            }\n        });\n\n        fixNanhai(mapName, regions);\n\n        return (inner$7(mapRecord).parsed = {\n            regions: regions,\n            boundingRect: getBoundingRect$1(regions)\n        });\n    }\n};\n\nfunction getBoundingRect$1(regions) {\n    var rect;\n    for (var i = 0; i < regions.length; i++) {\n        var regionRect = regions[i].getBoundingRect();\n        rect = rect || regionRect.clone();\n        rect.union(regionRect);\n    }\n    return rect;\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar inner$8 = makeInner();\n\nvar geoSVGLoader = {\n\n    /**\n     * @param {string} mapName\n     * @param {Object} mapRecord {specialAreas, geoJSON}\n     * @return {Object} {root, boundingRect}\n     */\n    load: function (mapName, mapRecord) {\n        var originRoot = inner$8(mapRecord).originRoot;\n        if (originRoot) {\n            return {\n                root: originRoot,\n                boundingRect: inner$8(mapRecord).boundingRect\n            };\n        }\n\n        var graphic = buildGraphic(mapRecord);\n\n        inner$8(mapRecord).originRoot = graphic.root;\n        inner$8(mapRecord).boundingRect = graphic.boundingRect;\n\n        return graphic;\n    },\n\n    makeGraphic: function (mapName, mapRecord, hostKey) {\n        // For performance consideration (in large SVG), graphic only maked\n        // when necessary and reuse them according to hostKey.\n        var field = inner$8(mapRecord);\n        var rootMap = field.rootMap || (field.rootMap = createHashMap());\n\n        var root = rootMap.get(hostKey);\n        if (root) {\n            return root;\n        }\n\n        var originRoot = field.originRoot;\n        var boundingRect = field.boundingRect;\n\n        // For performance, if originRoot is not used by a view,\n        // assign it to a view, but not reproduce graphic elements.\n        if (!field.originRootHostKey) {\n            field.originRootHostKey = hostKey;\n            root = originRoot;\n        }\n        else {\n            root = buildGraphic(mapRecord, boundingRect).root;\n        }\n\n        return rootMap.set(hostKey, root);\n    },\n\n    removeGraphic: function (mapName, mapRecord, hostKey) {\n        var field = inner$8(mapRecord);\n        var rootMap = field.rootMap;\n        rootMap && rootMap.removeKey(hostKey);\n        if (hostKey === field.originRootHostKey) {\n            field.originRootHostKey = null;\n        }\n    }\n};\n\nfunction buildGraphic(mapRecord, boundingRect) {\n    var svgXML = mapRecord.svgXML;\n    var result;\n    var root;\n\n    try {\n        result = svgXML && parseSVG(svgXML, {\n            ignoreViewBox: true,\n            ignoreRootClip: true\n        }) || {};\n        root = result.root;\n        assert$1(root != null);\n    }\n    catch (e) {\n        throw new Error('Invalid svg format\\n' + e.message);\n    }\n\n    var svgWidth = result.width;\n    var svgHeight = result.height;\n    var viewBoxRect = result.viewBoxRect;\n\n    if (!boundingRect) {\n        boundingRect = (svgWidth == null || svgHeight == null)\n            // If svg width / height not specified, calculate\n            // bounding rect as the width / height\n            ? root.getBoundingRect()\n            : new BoundingRect(0, 0, 0, 0);\n\n        if (svgWidth != null) {\n            boundingRect.width = svgWidth;\n        }\n        if (svgHeight != null) {\n            boundingRect.height = svgHeight;\n        }\n    }\n\n    if (viewBoxRect) {\n        var viewBoxTransform = makeViewBoxTransform(viewBoxRect, boundingRect.width, boundingRect.height);\n        var elRoot = root;\n        root = new Group();\n        root.add(elRoot);\n        elRoot.scale = viewBoxTransform.scale;\n        elRoot.position = viewBoxTransform.position;\n    }\n\n    root.setClipPath(new Rect({\n        shape: boundingRect.plain()\n    }));\n\n    return {\n        root: root,\n        boundingRect: boundingRect\n    };\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar loaders = {\n    geoJSON: geoJSONLoader,\n    svg: geoSVGLoader\n};\n\nvar geoSourceManager = {\n\n    /**\n     * @param {string} mapName\n     * @param {Object} nameMap\n     * @return {Object} source {regions, regionsMap, nameCoordMap, boundingRect}\n     */\n    load: function (mapName, nameMap) {\n        var regions = [];\n        var regionsMap = createHashMap();\n        var nameCoordMap = createHashMap();\n        var boundingRect;\n        var mapRecords = retrieveMap(mapName);\n\n        each$1(mapRecords, function (record) {\n            var singleSource = loaders[record.type].load(mapName, record);\n\n            each$1(singleSource.regions, function (region) {\n                var regionName = region.name;\n\n                // Try use the alias in geoNameMap\n                if (nameMap && nameMap.hasOwnProperty(regionName)) {\n                    region = region.cloneShallow(regionName = nameMap[regionName]);\n                }\n\n                regions.push(region);\n                regionsMap.set(regionName, region);\n                nameCoordMap.set(regionName, region.center);\n            });\n\n            var rect = singleSource.boundingRect;\n            if (rect) {\n                boundingRect\n                    ? boundingRect.union(rect)\n                    : (boundingRect = rect.clone());\n            }\n        });\n\n        return {\n            regions: regions,\n            regionsMap: regionsMap,\n            nameCoordMap: nameCoordMap,\n            // FIXME Always return new ?\n            boundingRect: boundingRect || new BoundingRect(0, 0, 0, 0)\n        };\n    },\n\n    /**\n     * @param {string} mapName\n     * @param {string} hostKey For cache.\n     * @return {Array.<module:zrender/Element>} Roots.\n     */\n    makeGraphic: makeInvoker('makeGraphic'),\n\n    /**\n     * @param {string} mapName\n     * @param {string} hostKey For cache.\n     */\n    removeGraphic: makeInvoker('removeGraphic')\n};\n\nfunction makeInvoker(methodName) {\n    return function (mapName, hostKey) {\n        var mapRecords = retrieveMap(mapName);\n        var results = [];\n\n        each$1(mapRecords, function (record) {\n            var method = loaders[record.type][methodName];\n            method && results.push(method(mapName, record, hostKey));\n        });\n\n        return results;\n    };\n}\n\nfunction mapNotExistsError(mapName) {\n    if (__DEV__) {\n        console.error(\n            'Map ' + mapName + ' not exists. The GeoJSON of the map must be provided.'\n        );\n    }\n}\n\nfunction retrieveMap(mapName) {\n    var mapRecords = mapDataStorage.retrieveMap(mapName) || [];\n\n    if (__DEV__) {\n        if (!mapRecords.length) {\n            mapNotExistsError(mapName);\n        }\n    }\n\n    return mapRecords;\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar MapSeries = SeriesModel.extend({\n\n    type: 'series.map',\n\n    dependencies: ['geo'],\n\n    layoutMode: 'box',\n\n    /**\n     * Only first map series of same mapType will drawMap\n     * @type {boolean}\n     */\n    needsDrawMap: false,\n\n    /**\n     * Group of all map series with same mapType\n     * @type {boolean}\n     */\n    seriesGroup: [],\n\n    getInitialData: function (option) {\n        var data = createListSimply(this, ['value']);\n        var valueDim = data.mapDimension('value');\n        var dataNameMap = createHashMap();\n        var selectTargetList = [];\n        var toAppendNames = [];\n\n        for (var i = 0, len = data.count(); i < len; i++) {\n            var name = data.getName(i);\n            dataNameMap.set(name, true);\n            selectTargetList.push({\n                name: name,\n                value: data.get(valueDim, i),\n                selected: retrieveRawAttr(data, i, 'selected')\n            });\n        }\n\n        var geoSource = geoSourceManager.load(this.getMapType(), this.option.nameMap);\n        each$1(geoSource.regions, function (region) {\n            var name = region.name;\n            if (!dataNameMap.get(name)) {\n                selectTargetList.push({name: name});\n                toAppendNames.push(name);\n            }\n        });\n\n        this.updateSelectedMap(selectTargetList);\n\n        // Complete data with missing regions. The consequent processes (like visual\n        // map and render) can not be performed without a \"full data\". For example,\n        // find `dataIndex` by name.\n        data.appendValues([], toAppendNames);\n\n        return data;\n    },\n\n    /**\n     * If no host geo model, return null, which means using a\n     * inner exclusive geo model.\n     */\n    getHostGeoModel: function () {\n        var geoIndex = this.option.geoIndex;\n        return geoIndex != null\n            ? this.dependentModels.geo[geoIndex]\n            : null;\n    },\n\n    getMapType: function () {\n        return (this.getHostGeoModel() || this).option.map;\n    },\n\n    // _fillOption: function (option, mapName) {\n        // Shallow clone\n        // option = zrUtil.extend({}, option);\n\n        // option.data = geoCreator.getFilledRegions(option.data, mapName, option.nameMap);\n\n        // return option;\n    // },\n\n    getRawValue: function (dataIndex) {\n        // Use value stored in data instead because it is calculated from multiple series\n        // FIXME Provide all value of multiple series ?\n        var data = this.getData();\n        return data.get(data.mapDimension('value'), dataIndex);\n    },\n\n    /**\n     * Get model of region\n     * @param  {string} name\n     * @return {module:echarts/model/Model}\n     */\n    getRegionModel: function (regionName) {\n        var data = this.getData();\n        return data.getItemModel(data.indexOfName(regionName));\n    },\n\n    /**\n     * Map tooltip formatter\n     *\n     * @param {number} dataIndex\n     */\n    formatTooltip: function (dataIndex) {\n        // FIXME orignalData and data is a bit confusing\n        var data = this.getData();\n        var formattedValue = addCommas(this.getRawValue(dataIndex));\n        var name = data.getName(dataIndex);\n\n        var seriesGroup = this.seriesGroup;\n        var seriesNames = [];\n        for (var i = 0; i < seriesGroup.length; i++) {\n            var otherIndex = seriesGroup[i].originalData.indexOfName(name);\n            var valueDim = data.mapDimension('value');\n            if (!isNaN(seriesGroup[i].originalData.get(valueDim, otherIndex))) {\n                seriesNames.push(\n                    encodeHTML(seriesGroup[i].name)\n                );\n            }\n        }\n\n        return seriesNames.join(', ') + '<br />'\n            + encodeHTML(name + ' : ' + formattedValue);\n    },\n\n    /**\n     * @implement\n     */\n    getTooltipPosition: function (dataIndex) {\n        if (dataIndex != null) {\n            var name = this.getData().getName(dataIndex);\n            var geo = this.coordinateSystem;\n            var region = geo.getRegion(name);\n\n            return region && geo.dataToPoint(region.center);\n        }\n    },\n\n    setZoom: function (zoom) {\n        this.option.zoom = zoom;\n    },\n\n    setCenter: function (center) {\n        this.option.center = center;\n    },\n\n    defaultOption: {\n        // 一级层叠\n        zlevel: 0,\n        // 二级层叠\n        z: 2,\n\n        coordinateSystem: 'geo',\n\n        // map should be explicitly specified since ec3.\n        map: '',\n\n        // If `geoIndex` is not specified, a exclusive geo will be\n        // created. Otherwise use the specified geo component, and\n        // `map` and `mapType` are ignored.\n        // geoIndex: 0,\n\n        // 'center' | 'left' | 'right' | 'x%' | {number}\n        left: 'center',\n        // 'center' | 'top' | 'bottom' | 'x%' | {number}\n        top: 'center',\n        // right\n        // bottom\n        // width:\n        // height\n\n        // Aspect is width / height. Inited to be geoJson bbox aspect\n        // This parameter is used for scale this aspect\n        aspectScale: 0.75,\n\n        ///// Layout with center and size\n        // If you wan't to put map in a fixed size box with right aspect ratio\n        // This two properties may more conveninet\n        // layoutCenter: [50%, 50%]\n        // layoutSize: 100\n\n\n        // 数值合并方式，默认加和，可选为：\n        // 'sum' | 'average' | 'max' | 'min'\n        // mapValueCalculation: 'sum',\n        // 地图数值计算结果小数精度\n        // mapValuePrecision: 0,\n\n\n        // 显示图例颜色标识（系列标识的小圆点），图例开启时有效\n        showLegendSymbol: true,\n        // 选择模式，默认关闭，可选single，multiple\n        // selectedMode: false,\n        dataRangeHoverLink: true,\n        // 是否开启缩放及漫游模式\n        // roam: false,\n\n        // Define left-top, right-bottom coords to control view\n        // For example, [ [180, 90], [-180, -90] ],\n        // higher priority than center and zoom\n        boundingCoords: null,\n\n        // Default on center of map\n        center: null,\n\n        zoom: 1,\n\n        scaleLimit: null,\n\n        label: {\n            show: false,\n            color: '#000'\n        },\n        // scaleLimit: null,\n        itemStyle: {\n            borderWidth: 0.5,\n            borderColor: '#444',\n            areaColor: '#eee'\n        },\n\n        emphasis: {\n            label: {\n                show: true,\n                color: 'rgb(100,0,0)'\n            },\n            itemStyle: {\n                areaColor: 'rgba(255,215,0,0.8)'\n            }\n        }\n    }\n\n});\n\nmixin(MapSeries, selectableMixin);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar ATTR = '\\0_ec_interaction_mutex';\n\nfunction take(zr, resourceKey, userKey) {\n    var store = getStore(zr);\n    store[resourceKey] = userKey;\n}\n\nfunction release(zr, resourceKey, userKey) {\n    var store = getStore(zr);\n    var uKey = store[resourceKey];\n\n    if (uKey === userKey) {\n        store[resourceKey] = null;\n    }\n}\n\nfunction isTaken(zr, resourceKey) {\n    return !!getStore(zr)[resourceKey];\n}\n\nfunction getStore(zr) {\n    return zr[ATTR] || (zr[ATTR] = {});\n}\n\n/**\n * payload: {\n *     type: 'takeGlobalCursor',\n *     key: 'dataZoomSelect', or 'brush', or ...,\n *         If no userKey, release global cursor.\n * }\n */\nregisterAction(\n    {type: 'takeGlobalCursor', event: 'globalCursorTaken', update: 'update'},\n    function () {}\n);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * @alias module:echarts/component/helper/RoamController\n * @constructor\n * @mixin {module:zrender/mixin/Eventful}\n *\n * @param {module:zrender/zrender~ZRender} zr\n */\nfunction RoamController(zr) {\n\n    /**\n     * @type {Function}\n     */\n    this.pointerChecker;\n\n    /**\n     * @type {module:zrender}\n     */\n    this._zr = zr;\n\n    /**\n     * @type {Object}\n     */\n    this._opt = {};\n\n    // Avoid two roamController bind the same handler\n    var bind$$1 = bind;\n    var mousedownHandler = bind$$1(mousedown, this);\n    var mousemoveHandler = bind$$1(mousemove, this);\n    var mouseupHandler = bind$$1(mouseup, this);\n    var mousewheelHandler = bind$$1(mousewheel, this);\n    var pinchHandler = bind$$1(pinch, this);\n\n    Eventful.call(this);\n\n    /**\n     * @param {Function} pointerChecker\n     *                   input: x, y\n     *                   output: boolean\n     */\n    this.setPointerChecker = function (pointerChecker) {\n        this.pointerChecker = pointerChecker;\n    };\n\n    /**\n     * Notice: only enable needed types. For example, if 'zoom'\n     * is not needed, 'zoom' should not be enabled, otherwise\n     * default mousewheel behaviour (scroll page) will be disabled.\n     *\n     * @param  {boolean|string} [controlType=true] Specify the control type,\n     *                          which can be null/undefined or true/false\n     *                          or 'pan/move' or 'zoom'/'scale'\n     * @param {Object} [opt]\n     * @param {Object} [opt.zoomOnMouseWheel=true] The value can be: true / false / 'shift' / 'ctrl' / 'alt'.\n     * @param {Object} [opt.moveOnMouseMove=true] The value can be: true / false / 'shift' / 'ctrl' / 'alt'.\n     * @param {Object} [opt.moveOnMouseWheel=false] The value can be: true / false / 'shift' / 'ctrl' / 'alt'.\n     * @param {Object} [opt.preventDefaultMouseMove=true] When pan.\n     */\n    this.enable = function (controlType, opt) {\n\n        // Disable previous first\n        this.disable();\n\n        this._opt = defaults(clone(opt) || {}, {\n            zoomOnMouseWheel: true,\n            moveOnMouseMove: true,\n            // By default, wheel do not trigger move.\n            moveOnMouseWheel: false,\n            preventDefaultMouseMove: true\n        });\n\n        if (controlType == null) {\n            controlType = true;\n        }\n\n        if (controlType === true || (controlType === 'move' || controlType === 'pan')) {\n            zr.on('mousedown', mousedownHandler);\n            zr.on('mousemove', mousemoveHandler);\n            zr.on('mouseup', mouseupHandler);\n        }\n        if (controlType === true || (controlType === 'scale' || controlType === 'zoom')) {\n            zr.on('mousewheel', mousewheelHandler);\n            zr.on('pinch', pinchHandler);\n        }\n    };\n\n    this.disable = function () {\n        zr.off('mousedown', mousedownHandler);\n        zr.off('mousemove', mousemoveHandler);\n        zr.off('mouseup', mouseupHandler);\n        zr.off('mousewheel', mousewheelHandler);\n        zr.off('pinch', pinchHandler);\n    };\n\n    this.dispose = this.disable;\n\n    this.isDragging = function () {\n        return this._dragging;\n    };\n\n    this.isPinching = function () {\n        return this._pinching;\n    };\n}\n\nmixin(RoamController, Eventful);\n\n\nfunction mousedown(e) {\n    if (isMiddleOrRightButtonOnMouseUpDown(e)\n        || (e.target && e.target.draggable)\n    ) {\n        return;\n    }\n\n    var x = e.offsetX;\n    var y = e.offsetY;\n\n    // Only check on mosedown, but not mousemove.\n    // Mouse can be out of target when mouse moving.\n    if (this.pointerChecker && this.pointerChecker(e, x, y)) {\n        this._x = x;\n        this._y = y;\n        this._dragging = true;\n    }\n}\n\nfunction mousemove(e) {\n    if (!this._dragging\n        || !isAvailableBehavior('moveOnMouseMove', e, this._opt)\n        || e.gestureEvent === 'pinch'\n        || isTaken(this._zr, 'globalPan')\n    ) {\n        return;\n    }\n\n    var x = e.offsetX;\n    var y = e.offsetY;\n\n    var oldX = this._x;\n    var oldY = this._y;\n\n    var dx = x - oldX;\n    var dy = y - oldY;\n\n    this._x = x;\n    this._y = y;\n\n    this._opt.preventDefaultMouseMove && stop(e.event);\n\n    trigger(this, 'pan', 'moveOnMouseMove', e, {\n        dx: dx, dy: dy, oldX: oldX, oldY: oldY, newX: x, newY: y\n    });\n}\n\nfunction mouseup(e) {\n    if (!isMiddleOrRightButtonOnMouseUpDown(e)) {\n        this._dragging = false;\n    }\n}\n\nfunction mousewheel(e) {\n    var shouldZoom = isAvailableBehavior('zoomOnMouseWheel', e, this._opt);\n    var shouldMove = isAvailableBehavior('moveOnMouseWheel', e, this._opt);\n    var wheelDelta = e.wheelDelta;\n    var absWheelDeltaDelta = Math.abs(wheelDelta);\n    var originX = e.offsetX;\n    var originY = e.offsetY;\n\n    // wheelDelta maybe -0 in chrome mac.\n    if (wheelDelta === 0 || (!shouldZoom && !shouldMove)) {\n        return;\n    }\n\n    // If both `shouldZoom` and `shouldMove` is true, trigger\n    // their event both, and the final behavior is determined\n    // by event listener themselves.\n\n    if (shouldZoom) {\n        // Convenience:\n        // Mac and VM Windows on Mac: scroll up: zoom out.\n        // Windows: scroll up: zoom in.\n\n        // FIXME: Should do more test in different environment.\n        // wheelDelta is too complicated in difference nvironment\n        // (https://developer.mozilla.org/en-US/docs/Web/Events/mousewheel),\n        // although it has been normallized by zrender.\n        // wheelDelta of mouse wheel is bigger than touch pad.\n        var factor = absWheelDeltaDelta > 3 ? 1.4 : absWheelDeltaDelta > 1 ? 1.2 : 1.1;\n        var scale = wheelDelta > 0 ? factor : 1 / factor;\n        checkPointerAndTrigger(this, 'zoom', 'zoomOnMouseWheel', e, {\n            scale: scale, originX: originX, originY: originY\n        });\n    }\n\n    if (shouldMove) {\n        // FIXME: Should do more test in different environment.\n        var absDelta = Math.abs(wheelDelta);\n        // wheelDelta of mouse wheel is bigger than touch pad.\n        var scrollDelta = (wheelDelta > 0 ? 1 : -1) * (absDelta > 3 ? 0.4 : absDelta > 1 ? 0.15 : 0.05);\n        checkPointerAndTrigger(this, 'scrollMove', 'moveOnMouseWheel', e, {\n            scrollDelta: scrollDelta, originX: originX, originY: originY\n        });\n    }\n}\n\nfunction pinch(e) {\n    if (isTaken(this._zr, 'globalPan')) {\n        return;\n    }\n    var scale = e.pinchScale > 1 ? 1.1 : 1 / 1.1;\n    checkPointerAndTrigger(this, 'zoom', null, e, {\n        scale: scale, originX: e.pinchX, originY: e.pinchY\n    });\n}\n\nfunction checkPointerAndTrigger(controller, eventName, behaviorToCheck, e, contollerEvent) {\n    if (controller.pointerChecker\n        && controller.pointerChecker(e, contollerEvent.originX, contollerEvent.originY)\n    ) {\n        // When mouse is out of roamController rect,\n        // default befavoius should not be be disabled, otherwise\n        // page sliding is disabled, contrary to expectation.\n        stop(e.event);\n\n        trigger(controller, eventName, behaviorToCheck, e, contollerEvent);\n    }\n}\n\nfunction trigger(controller, eventName, behaviorToCheck, e, contollerEvent) {\n    // Also provide behavior checker for event listener, for some case that\n    // multiple components share one listener.\n    contollerEvent.isAvailableBehavior = bind(isAvailableBehavior, null, behaviorToCheck, e);\n    controller.trigger(eventName, contollerEvent);\n}\n\n// settings: {\n//     zoomOnMouseWheel\n//     moveOnMouseMove\n//     moveOnMouseWheel\n// }\n// The value can be: true / false / 'shift' / 'ctrl' / 'alt'.\nfunction isAvailableBehavior(behaviorToCheck, e, settings) {\n    var setting = settings[behaviorToCheck];\n    return !behaviorToCheck || (\n        setting && (!isString(setting) || e.event[setting + 'Key'])\n    );\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * For geo and graph.\n *\n * @param {Object} controllerHost\n * @param {module:zrender/Element} controllerHost.target\n */\nfunction updateViewOnPan(controllerHost, dx, dy) {\n    var target = controllerHost.target;\n    var pos = target.position;\n    pos[0] += dx;\n    pos[1] += dy;\n    target.dirty();\n}\n\n/**\n * For geo and graph.\n *\n * @param {Object} controllerHost\n * @param {module:zrender/Element} controllerHost.target\n * @param {number} controllerHost.zoom\n * @param {number} controllerHost.zoomLimit like: {min: 1, max: 2}\n */\nfunction updateViewOnZoom(controllerHost, zoomDelta, zoomX, zoomY) {\n    var target = controllerHost.target;\n    var zoomLimit = controllerHost.zoomLimit;\n    var pos = target.position;\n    var scale = target.scale;\n\n    var newZoom = controllerHost.zoom = controllerHost.zoom || 1;\n    newZoom *= zoomDelta;\n    if (zoomLimit) {\n        var zoomMin = zoomLimit.min || 0;\n        var zoomMax = zoomLimit.max || Infinity;\n        newZoom = Math.max(\n            Math.min(zoomMax, newZoom),\n            zoomMin\n        );\n    }\n    var zoomScale = newZoom / controllerHost.zoom;\n    controllerHost.zoom = newZoom;\n    // Keep the mouse center when scaling\n    pos[0] -= (zoomX - pos[0]) * (zoomScale - 1);\n    pos[1] -= (zoomY - pos[1]) * (zoomScale - 1);\n    scale[0] *= zoomScale;\n    scale[1] *= zoomScale;\n\n    target.dirty();\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\nvar IRRELEVANT_EXCLUDES = {'axisPointer': 1, 'tooltip': 1, 'brush': 1};\n\n/**\n * Avoid that: mouse click on a elements that is over geo or graph,\n * but roam is triggered.\n */\nfunction onIrrelevantElement(e, api, targetCoordSysModel) {\n    var model = api.getComponentByElement(e.topTarget);\n    // If model is axisModel, it works only if it is injected with coordinateSystem.\n    var coordSys = model && model.coordinateSystem;\n    return model\n        && model !== targetCoordSysModel\n        && !IRRELEVANT_EXCLUDES[model.mainType]\n        && (coordSys && coordSys.model !== targetCoordSysModel);\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nfunction getFixedItemStyle(model, scale) {\n    var itemStyle = model.getItemStyle();\n    var areaColor = model.get('areaColor');\n\n    // If user want the color not to be changed when hover,\n    // they should both set areaColor and color to be null.\n    if (areaColor != null) {\n        itemStyle.fill = areaColor;\n    }\n\n    return itemStyle;\n}\n\nfunction updateMapSelectHandler(mapDraw, mapOrGeoModel, regionsGroup, api, fromView) {\n    regionsGroup.off('click');\n    regionsGroup.off('mousedown');\n\n    if (mapOrGeoModel.get('selectedMode')) {\n\n        regionsGroup.on('mousedown', function () {\n            mapDraw._mouseDownFlag = true;\n        });\n\n        regionsGroup.on('click', function (e) {\n            if (!mapDraw._mouseDownFlag) {\n                return;\n            }\n            mapDraw._mouseDownFlag = false;\n\n            var el = e.target;\n            while (!el.__regions) {\n                el = el.parent;\n            }\n            if (!el) {\n                return;\n            }\n\n            var action = {\n                type: (mapOrGeoModel.mainType === 'geo' ? 'geo' : 'map') + 'ToggleSelect',\n                batch: map(el.__regions, function (region) {\n                    return {\n                        name: region.name,\n                        from: fromView.uid\n                    };\n                })\n            };\n            action[mapOrGeoModel.mainType + 'Id'] = mapOrGeoModel.id;\n\n            api.dispatchAction(action);\n\n            updateMapSelected(mapOrGeoModel, regionsGroup);\n        });\n    }\n}\n\nfunction updateMapSelected(mapOrGeoModel, regionsGroup) {\n    // FIXME\n    regionsGroup.eachChild(function (otherRegionEl) {\n        each$1(otherRegionEl.__regions, function (region) {\n            otherRegionEl.trigger(mapOrGeoModel.isSelected(region.name) ? 'emphasis' : 'normal');\n        });\n    });\n}\n\n/**\n * @alias module:echarts/component/helper/MapDraw\n * @param {module:echarts/ExtensionAPI} api\n * @param {boolean} updateGroup\n */\nfunction MapDraw(api, updateGroup) {\n\n    var group = new Group();\n\n    /**\n     * @type {string}\n     * @private\n     */\n    this.uid = getUID('ec_map_draw');\n\n    /**\n     * @type {module:echarts/component/helper/RoamController}\n     * @private\n     */\n    this._controller = new RoamController(api.getZr());\n\n    /**\n     * @type {Object} {target, zoom, zoomLimit}\n     * @private\n     */\n    this._controllerHost = {target: updateGroup ? group : null};\n\n    /**\n     * @type {module:zrender/container/Group}\n     * @readOnly\n     */\n    this.group = group;\n\n    /**\n     * @type {boolean}\n     * @private\n     */\n    this._updateGroup = updateGroup;\n\n    /**\n     * This flag is used to make sure that only one among\n     * `pan`, `zoom`, `click` can occurs, otherwise 'selected'\n     * action may be triggered when `pan`, which is unexpected.\n     * @type {booelan}\n     */\n    this._mouseDownFlag;\n\n    /**\n     * @type {string}\n     */\n    this._mapName;\n\n    /**\n     * @type {boolean}\n     */\n    this._initialized;\n\n    /**\n     * @type {module:zrender/container/Group}\n     */\n    group.add(this._regionsGroup = new Group());\n\n    /**\n     * @type {module:zrender/container/Group}\n     */\n    group.add(this._backgroundGroup = new Group());\n}\n\nMapDraw.prototype = {\n\n    constructor: MapDraw,\n\n    draw: function (mapOrGeoModel, ecModel, api, fromView, payload) {\n\n        var isGeo = mapOrGeoModel.mainType === 'geo';\n\n        // Map series has data. GEO model that controlled by map series\n        // will be assigned with map data. Other GEO model has no data.\n        var data = mapOrGeoModel.getData && mapOrGeoModel.getData();\n        isGeo && ecModel.eachComponent({mainType: 'series', subType: 'map'}, function (mapSeries) {\n            if (!data && mapSeries.getHostGeoModel() === mapOrGeoModel) {\n                data = mapSeries.getData();\n            }\n        });\n\n        var geo = mapOrGeoModel.coordinateSystem;\n\n        this._updateBackground(geo);\n\n        var regionsGroup = this._regionsGroup;\n        var group = this.group;\n\n        var scale = geo.scale;\n        var transform = {\n            position: geo.position,\n            scale: scale\n        };\n\n        // No animation when first draw or in action\n        if (!regionsGroup.childAt(0) || payload) {\n            group.attr(transform);\n        }\n        else {\n            updateProps(group, transform, mapOrGeoModel);\n        }\n\n        regionsGroup.removeAll();\n\n        var itemStyleAccessPath = ['itemStyle'];\n        var hoverItemStyleAccessPath = ['emphasis', 'itemStyle'];\n        var labelAccessPath = ['label'];\n        var hoverLabelAccessPath = ['emphasis', 'label'];\n        var nameMap = createHashMap();\n\n        each$1(geo.regions, function (region) {\n\n            // Consider in GeoJson properties.name may be duplicated, for example,\n            // there is multiple region named \"United Kindom\" or \"France\" (so many\n            // colonies). And it is not appropriate to merge them in geo, which\n            // will make them share the same label and bring trouble in label\n            // location calculation.\n            var regionGroup = nameMap.get(region.name)\n                || nameMap.set(region.name, new Group());\n\n            var compoundPath = new CompoundPath({\n                segmentIgnoreThreshold: 1,\n                shape: {\n                    paths: []\n                }\n            });\n            regionGroup.add(compoundPath);\n\n            var regionModel = mapOrGeoModel.getRegionModel(region.name) || mapOrGeoModel;\n\n            var itemStyleModel = regionModel.getModel(itemStyleAccessPath);\n            var hoverItemStyleModel = regionModel.getModel(hoverItemStyleAccessPath);\n            var itemStyle = getFixedItemStyle(itemStyleModel, scale);\n            var hoverItemStyle = getFixedItemStyle(hoverItemStyleModel, scale);\n\n            var labelModel = regionModel.getModel(labelAccessPath);\n            var hoverLabelModel = regionModel.getModel(hoverLabelAccessPath);\n\n            var dataIdx;\n            // Use the itemStyle in data if has data\n            if (data) {\n                dataIdx = data.indexOfName(region.name);\n                // Only visual color of each item will be used. It can be encoded by dataRange\n                // But visual color of series is used in symbol drawing\n                //\n                // Visual color for each series is for the symbol draw\n                var visualColor = data.getItemVisual(dataIdx, 'color', true);\n                if (visualColor) {\n                    itemStyle.fill = visualColor;\n                }\n            }\n\n            each$1(region.geometries, function (geometry) {\n                if (geometry.type !== 'polygon') {\n                    return;\n                }\n                compoundPath.shape.paths.push(new Polygon({\n                    segmentIgnoreThreshold: 1,\n                    shape: {\n                        points: geometry.exterior\n                    }\n                }));\n\n                for (var i = 0; i < (geometry.interiors ? geometry.interiors.length : 0); i++) {\n                    compoundPath.shape.paths.push(new Polygon({\n                        segmentIgnoreThreshold: 1,\n                        shape: {\n                            points: geometry.interiors[i]\n                        }\n                    }));\n                }\n            });\n\n            compoundPath.setStyle(itemStyle);\n            compoundPath.style.strokeNoScale = true;\n            compoundPath.culling = true;\n            // Label\n            var showLabel = labelModel.get('show');\n            var hoverShowLabel = hoverLabelModel.get('show');\n\n            var isDataNaN = data && isNaN(data.get(data.mapDimension('value'), dataIdx));\n            var itemLayout = data && data.getItemLayout(dataIdx);\n            // In the following cases label will be drawn\n            // 1. In map series and data value is NaN\n            // 2. In geo component\n            // 4. Region has no series legendSymbol, which will be add a showLabel flag in mapSymbolLayout\n            if (\n                (isGeo || isDataNaN && (showLabel || hoverShowLabel))\n                || (itemLayout && itemLayout.showLabel)\n            ) {\n                var query = !isGeo ? dataIdx : region.name;\n                var labelFetcher;\n\n                // Consider dataIdx not found.\n                if (!data || dataIdx >= 0) {\n                    labelFetcher = mapOrGeoModel;\n                }\n\n                var textEl = new Text({\n                    position: region.center.slice(),\n                    // FIXME\n                    // label rotation is not support yet in geo or regions of series-map\n                    // that has no data. The rotation will be effected by this `scale`.\n                    // So needed to change to RectText?\n                    scale: [1 / scale[0], 1 / scale[1]],\n                    z2: 10,\n                    silent: true\n                });\n\n                setLabelStyle(\n                    textEl.style, textEl.hoverStyle = {}, labelModel, hoverLabelModel,\n                    {\n                        labelFetcher: labelFetcher,\n                        labelDataIndex: query,\n                        defaultText: region.name,\n                        useInsideStyle: false\n                    },\n                    {\n                        textAlign: 'center',\n                        textVerticalAlign: 'middle'\n                    }\n                );\n\n                regionGroup.add(textEl);\n            }\n\n            // setItemGraphicEl, setHoverStyle after all polygons and labels\n            // are added to the rigionGroup\n            if (data) {\n                data.setItemGraphicEl(dataIdx, regionGroup);\n            }\n            else {\n                var regionModel = mapOrGeoModel.getRegionModel(region.name);\n                // Package custom mouse event for geo component\n                compoundPath.eventData = {\n                    componentType: 'geo',\n                    componentIndex: mapOrGeoModel.componentIndex,\n                    geoIndex: mapOrGeoModel.componentIndex,\n                    name: region.name,\n                    region: (regionModel && regionModel.option) || {}\n                };\n            }\n\n            var groupRegions = regionGroup.__regions || (regionGroup.__regions = []);\n            groupRegions.push(region);\n\n            regionGroup.highDownSilentOnTouch = !!mapOrGeoModel.get('selectedMode');\n            setHoverStyle(regionGroup, hoverItemStyle);\n\n            regionsGroup.add(regionGroup);\n        });\n\n        this._updateController(mapOrGeoModel, ecModel, api);\n\n        updateMapSelectHandler(this, mapOrGeoModel, regionsGroup, api, fromView);\n\n        updateMapSelected(mapOrGeoModel, regionsGroup);\n    },\n\n    remove: function () {\n        this._regionsGroup.removeAll();\n        this._backgroundGroup.removeAll();\n        this._controller.dispose();\n        this._mapName && geoSourceManager.removeGraphic(this._mapName, this.uid);\n        this._mapName = null;\n        this._controllerHost = {};\n    },\n\n    _updateBackground: function (geo) {\n        var mapName = geo.map;\n\n        if (this._mapName !== mapName) {\n            each$1(geoSourceManager.makeGraphic(mapName, this.uid), function (root) {\n                this._backgroundGroup.add(root);\n            }, this);\n        }\n\n        this._mapName = mapName;\n    },\n\n    _updateController: function (mapOrGeoModel, ecModel, api) {\n        var geo = mapOrGeoModel.coordinateSystem;\n        var controller = this._controller;\n        var controllerHost = this._controllerHost;\n\n        controllerHost.zoomLimit = mapOrGeoModel.get('scaleLimit');\n        controllerHost.zoom = geo.getZoom();\n\n        // roamType is will be set default true if it is null\n        controller.enable(mapOrGeoModel.get('roam') || false);\n        var mainType = mapOrGeoModel.mainType;\n\n        function makeActionBase() {\n            var action = {\n                type: 'geoRoam',\n                componentType: mainType\n            };\n            action[mainType + 'Id'] = mapOrGeoModel.id;\n            return action;\n        }\n\n        controller.off('pan').on('pan', function (e) {\n            this._mouseDownFlag = false;\n\n            updateViewOnPan(controllerHost, e.dx, e.dy);\n\n            api.dispatchAction(extend(makeActionBase(), {\n                dx: e.dx,\n                dy: e.dy\n            }));\n        }, this);\n\n        controller.off('zoom').on('zoom', function (e) {\n            this._mouseDownFlag = false;\n\n            updateViewOnZoom(controllerHost, e.scale, e.originX, e.originY);\n\n            api.dispatchAction(extend(makeActionBase(), {\n                zoom: e.scale,\n                originX: e.originX,\n                originY: e.originY\n            }));\n\n            if (this._updateGroup) {\n                var scale = this.group.scale;\n                this._regionsGroup.traverse(function (el) {\n                    if (el.type === 'text') {\n                        el.attr('scale', [1 / scale[0], 1 / scale[1]]);\n                    }\n                });\n            }\n        }, this);\n\n        controller.setPointerChecker(function (e, x, y) {\n            return geo.getViewRectAfterRoam().contain(x, y)\n                && !onIrrelevantElement(e, api, mapOrGeoModel);\n        });\n    }\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar HIGH_DOWN_PROP = '__seriesMapHighDown';\nvar RECORD_VERSION_PROP = '__seriesMapCallKey';\n\nextendChartView({\n\n    type: 'map',\n\n    render: function (mapModel, ecModel, api, payload) {\n        // Not render if it is an toggleSelect action from self\n        if (payload && payload.type === 'mapToggleSelect'\n            && payload.from === this.uid\n        ) {\n            return;\n        }\n\n        var group = this.group;\n        group.removeAll();\n\n        if (mapModel.getHostGeoModel()) {\n            return;\n        }\n\n        // Not update map if it is an roam action from self\n        if (!(payload && payload.type === 'geoRoam'\n                && payload.componentType === 'series'\n                && payload.seriesId === mapModel.id\n            )\n        ) {\n            if (mapModel.needsDrawMap) {\n                var mapDraw = this._mapDraw || new MapDraw(api, true);\n                group.add(mapDraw.group);\n\n                mapDraw.draw(mapModel, ecModel, api, this, payload);\n\n                this._mapDraw = mapDraw;\n            }\n            else {\n                // Remove drawed map\n                this._mapDraw && this._mapDraw.remove();\n                this._mapDraw = null;\n            }\n        }\n        else {\n            var mapDraw = this._mapDraw;\n            mapDraw && group.add(mapDraw.group);\n        }\n\n        mapModel.get('showLegendSymbol') && ecModel.getComponent('legend')\n            && this._renderSymbols(mapModel, ecModel, api);\n    },\n\n    remove: function () {\n        this._mapDraw && this._mapDraw.remove();\n        this._mapDraw = null;\n        this.group.removeAll();\n    },\n\n    dispose: function () {\n        this._mapDraw && this._mapDraw.remove();\n        this._mapDraw = null;\n    },\n\n    _renderSymbols: function (mapModel, ecModel, api) {\n        var originalData = mapModel.originalData;\n        var group = this.group;\n\n        originalData.each(originalData.mapDimension('value'), function (value, originalDataIndex) {\n            if (isNaN(value)) {\n                return;\n            }\n\n            var layout = originalData.getItemLayout(originalDataIndex);\n\n            if (!layout || !layout.point) {\n                // Not exists in map\n                return;\n            }\n\n            var point = layout.point;\n            var offset = layout.offset;\n\n            var circle = new Circle({\n                style: {\n                    // Because the special of map draw.\n                    // Which needs statistic of multiple series and draw on one map.\n                    // And each series also need a symbol with legend color\n                    //\n                    // Layout and visual are put one the different data\n                    fill: mapModel.getData().getVisual('color')\n                },\n                shape: {\n                    cx: point[0] + offset * 9,\n                    cy: point[1],\n                    r: 3\n                },\n                silent: true,\n                // Do not overlap the first series, on which labels are displayed.\n                z2: 8 + (!offset ? Z2_EMPHASIS_LIFT + 1 : 0)\n            });\n\n            // Only the series that has the first value on the same region is in charge of rendering the label.\n            // But consider the case:\n            // series: [\n            //     {id: 'X', type: 'map', map: 'm', {data: [{name: 'A', value: 11}, {name: 'B', {value: 22}]},\n            //     {id: 'Y', type: 'map', map: 'm', {data: [{name: 'A', value: 21}, {name: 'C', {value: 33}]}\n            // ]\n            // The offset `0` of item `A` is at series `X`, but of item `C` is at series `Y`.\n            // For backward compatibility, we follow the rule that render label `A` by the\n            // settings on series `X` but render label `C` by the settings on series `Y`.\n            if (!offset) {\n\n                var fullData = mapModel.mainSeries.getData();\n                var name = originalData.getName(originalDataIndex);\n\n                var fullIndex = fullData.indexOfName(name);\n\n                var itemModel = originalData.getItemModel(originalDataIndex);\n                var labelModel = itemModel.getModel('label');\n                var hoverLabelModel = itemModel.getModel('emphasis.label');\n\n                var regionGroup = fullData.getItemGraphicEl(fullIndex);\n\n                // `getFormattedLabel` needs to use `getData` inside. Here\n                // `mapModel.getData()` is shallow cloned from `mainSeries.getData()`.\n                // FIXME\n                // If this is not the `mainSeries`, the item model (like label formatter)\n                // set on original data item will never get. But it has been working\n                // like that from the begining, and this scenario is rarely encountered.\n                // So it won't be fixed until have to.\n                var normalText = retrieve2(\n                    mapModel.getFormattedLabel(fullIndex, 'normal'),\n                    name\n                );\n                var emphasisText = retrieve2(\n                    mapModel.getFormattedLabel(fullIndex, 'emphasis'),\n                    normalText\n                );\n\n                var highDownRecord = regionGroup[HIGH_DOWN_PROP];\n                var recordVersion = Math.random();\n\n                // Prevent from register listeners duplicatedly when roaming.\n                if (!highDownRecord) {\n                    highDownRecord = regionGroup[HIGH_DOWN_PROP] = {};\n                    var onEmphasis = curry(onRegionHighDown, true);\n                    var onNormal = curry(onRegionHighDown, false);\n                    regionGroup.on('mouseover', onEmphasis)\n                        .on('mouseout', onNormal)\n                        .on('emphasis', onEmphasis)\n                        .on('normal', onNormal);\n                }\n\n                // Prevent removed regions effect current grapics.\n                regionGroup[RECORD_VERSION_PROP] = recordVersion;\n                extend(highDownRecord, {\n                    recordVersion: recordVersion,\n                    circle: circle,\n                    labelModel: labelModel,\n                    hoverLabelModel: hoverLabelModel,\n                    emphasisText: emphasisText,\n                    normalText: normalText\n                });\n\n                // FIXME\n                // Consider set option when emphasis.\n                enterRegionHighDown(highDownRecord, false);\n            }\n\n            group.add(circle);\n        });\n    }\n});\n\nfunction onRegionHighDown(toHighOrDown) {\n    var highDownRecord = this[HIGH_DOWN_PROP];\n    if (highDownRecord && highDownRecord.recordVersion === this[RECORD_VERSION_PROP]) {\n        enterRegionHighDown(highDownRecord, toHighOrDown);\n    }\n}\n\nfunction enterRegionHighDown(highDownRecord, toHighOrDown) {\n    var circle = highDownRecord.circle;\n    var labelModel = highDownRecord.labelModel;\n    var hoverLabelModel = highDownRecord.hoverLabelModel;\n    var emphasisText = highDownRecord.emphasisText;\n    var normalText = highDownRecord.normalText;\n\n    if (toHighOrDown) {\n        circle.style.extendFrom(\n            setTextStyle({}, hoverLabelModel, {\n                text: hoverLabelModel.get('show') ? emphasisText : null\n            }, {isRectText: true, useInsideStyle: false}, true)\n        );\n        // Make label upper than others if overlaps.\n        circle.__mapOriginalZ2 = circle.z2;\n        circle.z2 += Z2_EMPHASIS_LIFT;\n    }\n    else {\n        setTextStyle(circle.style, labelModel, {\n            text: labelModel.get('show') ? normalText : null,\n            textPosition: labelModel.getShallow('position') || 'bottom'\n        }, {isRectText: true, useInsideStyle: false});\n        // Trigger normalize style like padding.\n        circle.dirty(false);\n\n        if (circle.__mapOriginalZ2 != null) {\n            circle.z2 = circle.__mapOriginalZ2;\n            circle.__mapOriginalZ2 = null;\n        }\n    }\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * @param {module:echarts/coord/View} view\n * @param {Object} payload\n * @param {Object} [zoomLimit]\n */\nfunction updateCenterAndZoom(\n    view, payload, zoomLimit\n) {\n    var previousZoom = view.getZoom();\n    var center = view.getCenter();\n    var zoom = payload.zoom;\n\n    var point = view.dataToPoint(center);\n\n    if (payload.dx != null && payload.dy != null) {\n        point[0] -= payload.dx;\n        point[1] -= payload.dy;\n\n        var center = view.pointToData(point);\n        view.setCenter(center);\n    }\n    if (zoom != null) {\n        if (zoomLimit) {\n            var zoomMin = zoomLimit.min || 0;\n            var zoomMax = zoomLimit.max || Infinity;\n            zoom = Math.max(\n                Math.min(previousZoom * zoom, zoomMax),\n                zoomMin\n            ) / previousZoom;\n        }\n\n        // Zoom on given point(originX, originY)\n        view.scale[0] *= zoom;\n        view.scale[1] *= zoom;\n        var position = view.position;\n        var fixX = (payload.originX - position[0]) * (zoom - 1);\n        var fixY = (payload.originY - position[1]) * (zoom - 1);\n\n        position[0] -= fixX;\n        position[1] -= fixY;\n\n        view.updateTransform();\n        // Get the new center\n        var center = view.pointToData(point);\n        view.setCenter(center);\n        view.setZoom(zoom * previousZoom);\n    }\n\n    return {\n        center: view.getCenter(),\n        zoom: view.getZoom()\n    };\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * @payload\n * @property {string} [componentType=series]\n * @property {number} [dx]\n * @property {number} [dy]\n * @property {number} [zoom]\n * @property {number} [originX]\n * @property {number} [originY]\n */\nregisterAction({\n    type: 'geoRoam',\n    event: 'geoRoam',\n    update: 'updateTransform'\n}, function (payload, ecModel) {\n    var componentType = payload.componentType || 'series';\n\n    ecModel.eachComponent(\n        { mainType: componentType, query: payload },\n        function (componentModel) {\n            var geo = componentModel.coordinateSystem;\n            if (geo.type !== 'geo') {\n                return;\n            }\n\n            var res = updateCenterAndZoom(\n                geo, payload, componentModel.get('scaleLimit')\n            );\n\n            componentModel.setCenter\n                && componentModel.setCenter(res.center);\n\n            componentModel.setZoom\n                && componentModel.setZoom(res.zoom);\n\n            // All map series with same `map` use the same geo coordinate system\n            // So the center and zoom must be in sync. Include the series not selected by legend\n            if (componentType === 'series') {\n                each$1(componentModel.seriesGroup, function (seriesModel) {\n                    seriesModel.setCenter(res.center);\n                    seriesModel.setZoom(res.zoom);\n                });\n            }\n        }\n    );\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Simple view coordinate system\n * Mapping given x, y to transformd view x, y\n */\n\nvar v2ApplyTransform$1 = applyTransform;\n\n// Dummy transform node\nfunction TransformDummy() {\n    Transformable.call(this);\n}\nmixin(TransformDummy, Transformable);\n\nfunction View(name) {\n    /**\n     * @type {string}\n     */\n    this.name = name;\n\n    /**\n     * @type {Object}\n     */\n    this.zoomLimit;\n\n    Transformable.call(this);\n\n    this._roamTransformable = new TransformDummy();\n\n    this._rawTransformable = new TransformDummy();\n\n    this._center;\n    this._zoom;\n}\n\nView.prototype = {\n\n    constructor: View,\n\n    type: 'view',\n\n    /**\n     * @param {Array.<string>}\n     * @readOnly\n     */\n    dimensions: ['x', 'y'],\n\n    /**\n     * Set bounding rect\n     * @param {number} x\n     * @param {number} y\n     * @param {number} width\n     * @param {number} height\n     */\n\n    // PENDING to getRect\n    setBoundingRect: function (x, y, width, height) {\n        this._rect = new BoundingRect(x, y, width, height);\n        return this._rect;\n    },\n\n    /**\n     * @return {module:zrender/core/BoundingRect}\n     */\n    // PENDING to getRect\n    getBoundingRect: function () {\n        return this._rect;\n    },\n\n    /**\n     * @param {number} x\n     * @param {number} y\n     * @param {number} width\n     * @param {number} height\n     */\n    setViewRect: function (x, y, width, height) {\n        this.transformTo(x, y, width, height);\n        this._viewRect = new BoundingRect(x, y, width, height);\n    },\n\n    /**\n     * Transformed to particular position and size\n     * @param {number} x\n     * @param {number} y\n     * @param {number} width\n     * @param {number} height\n     */\n    transformTo: function (x, y, width, height) {\n        var rect = this.getBoundingRect();\n        var rawTransform = this._rawTransformable;\n\n        rawTransform.transform = rect.calculateTransform(\n            new BoundingRect(x, y, width, height)\n        );\n\n        rawTransform.decomposeTransform();\n\n        this._updateTransform();\n    },\n\n    /**\n     * Set center of view\n     * @param {Array.<number>} [centerCoord]\n     */\n    setCenter: function (centerCoord) {\n        if (!centerCoord) {\n            return;\n        }\n        this._center = centerCoord;\n\n        this._updateCenterAndZoom();\n    },\n\n    /**\n     * @param {number} zoom\n     */\n    setZoom: function (zoom) {\n        zoom = zoom || 1;\n\n        var zoomLimit = this.zoomLimit;\n        if (zoomLimit) {\n            if (zoomLimit.max != null) {\n                zoom = Math.min(zoomLimit.max, zoom);\n            }\n            if (zoomLimit.min != null) {\n                zoom = Math.max(zoomLimit.min, zoom);\n            }\n        }\n        this._zoom = zoom;\n\n        this._updateCenterAndZoom();\n    },\n\n    /**\n     * Get default center without roam\n     */\n    getDefaultCenter: function () {\n        // Rect before any transform\n        var rawRect = this.getBoundingRect();\n        var cx = rawRect.x + rawRect.width / 2;\n        var cy = rawRect.y + rawRect.height / 2;\n\n        return [cx, cy];\n    },\n\n    getCenter: function () {\n        return this._center || this.getDefaultCenter();\n    },\n\n    getZoom: function () {\n        return this._zoom || 1;\n    },\n\n    /**\n     * @return {Array.<number}\n     */\n    getRoamTransform: function () {\n        return this._roamTransformable.getLocalTransform();\n    },\n\n    /**\n     * Remove roam\n     */\n\n    _updateCenterAndZoom: function () {\n        // Must update after view transform updated\n        var rawTransformMatrix = this._rawTransformable.getLocalTransform();\n        var roamTransform = this._roamTransformable;\n        var defaultCenter = this.getDefaultCenter();\n        var center = this.getCenter();\n        var zoom = this.getZoom();\n\n        center = applyTransform([], center, rawTransformMatrix);\n        defaultCenter = applyTransform([], defaultCenter, rawTransformMatrix);\n\n        roamTransform.origin = center;\n        roamTransform.position = [\n            defaultCenter[0] - center[0],\n            defaultCenter[1] - center[1]\n        ];\n        roamTransform.scale = [zoom, zoom];\n\n        this._updateTransform();\n    },\n\n    /**\n     * Update transform from roam and mapLocation\n     * @private\n     */\n    _updateTransform: function () {\n        var roamTransformable = this._roamTransformable;\n        var rawTransformable = this._rawTransformable;\n\n        rawTransformable.parent = roamTransformable;\n        roamTransformable.updateTransform();\n        rawTransformable.updateTransform();\n\n        copy$1(this.transform || (this.transform = []), rawTransformable.transform || create$1());\n\n        this._rawTransform = rawTransformable.getLocalTransform();\n\n        this.invTransform = this.invTransform || [];\n        invert(this.invTransform, this.transform);\n\n        this.decomposeTransform();\n    },\n\n    /**\n     * @return {module:zrender/core/BoundingRect}\n     */\n    getViewRect: function () {\n        return this._viewRect;\n    },\n\n    /**\n     * Get view rect after roam transform\n     * @return {module:zrender/core/BoundingRect}\n     */\n    getViewRectAfterRoam: function () {\n        var rect = this.getBoundingRect().clone();\n        rect.applyTransform(this.transform);\n        return rect;\n    },\n\n    /**\n     * Convert a single (lon, lat) data item to (x, y) point.\n     * @param {Array.<number>} data\n     * @param {boolean} noRoam\n     * @param {Array.<number>} [out]\n     * @return {Array.<number>}\n     */\n    dataToPoint: function (data, noRoam, out) {\n        var transform = noRoam ? this._rawTransform : this.transform;\n        out = out || [];\n        return transform\n            ? v2ApplyTransform$1(out, data, transform)\n            : copy(out, data);\n    },\n\n    /**\n     * Convert a (x, y) point to (lon, lat) data\n     * @param {Array.<number>} point\n     * @return {Array.<number>}\n     */\n    pointToData: function (point) {\n        var invTransform = this.invTransform;\n        return invTransform\n            ? v2ApplyTransform$1([], point, invTransform)\n            : [point[0], point[1]];\n    },\n\n    /**\n     * @implements\n     * see {module:echarts/CoodinateSystem}\n     */\n    convertToPixel: curry(doConvert$1, 'dataToPoint'),\n\n    /**\n     * @implements\n     * see {module:echarts/CoodinateSystem}\n     */\n    convertFromPixel: curry(doConvert$1, 'pointToData'),\n\n    /**\n     * @implements\n     * see {module:echarts/CoodinateSystem}\n     */\n    containPoint: function (point) {\n        return this.getViewRectAfterRoam().contain(point[0], point[1]);\n    }\n\n    /**\n     * @return {number}\n     */\n    // getScalarScale: function () {\n    //     // Use determinant square root of transform to mutiply scalar\n    //     var m = this.transform;\n    //     var det = Math.sqrt(Math.abs(m[0] * m[3] - m[2] * m[1]));\n    //     return det;\n    // }\n};\n\nmixin(View, Transformable);\n\nfunction doConvert$1(methodName, ecModel, finder, value) {\n    var seriesModel = finder.seriesModel;\n    var coordSys = seriesModel ? seriesModel.coordinateSystem : null; // e.g., graph.\n    return coordSys === this ? coordSys[methodName](value) : null;\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * [Geo description]\n * For backward compatibility, the orginal interface:\n * `name, map, geoJson, specialAreas, nameMap` is kept.\n *\n * @param {string|Object} name\n * @param {string} map Map type\n *        Specify the positioned areas by left, top, width, height\n * @param {Object.<string, string>} [nameMap]\n *        Specify name alias\n * @param {boolean} [invertLongitute=true]\n */\nfunction Geo(name, map$$1, nameMap, invertLongitute) {\n\n    View.call(this, name);\n\n    /**\n     * Map type\n     * @type {string}\n     */\n    this.map = map$$1;\n\n    var source = geoSourceManager.load(map$$1, nameMap);\n\n    this._nameCoordMap = source.nameCoordMap;\n    this._regionsMap = source.regionsMap;\n    this._invertLongitute = invertLongitute == null ? true : invertLongitute;\n\n    /**\n     * @readOnly\n     */\n    this.regions = source.regions;\n\n    /**\n     * @type {module:zrender/src/core/BoundingRect}\n     */\n    this._rect = source.boundingRect;\n}\n\nGeo.prototype = {\n\n    constructor: Geo,\n\n    type: 'geo',\n\n    /**\n     * @param {Array.<string>}\n     * @readOnly\n     */\n    dimensions: ['lng', 'lat'],\n\n    /**\n     * If contain given lng,lat coord\n     * @param {Array.<number>}\n     * @readOnly\n     */\n    containCoord: function (coord) {\n        var regions = this.regions;\n        for (var i = 0; i < regions.length; i++) {\n            if (regions[i].contain(coord)) {\n                return true;\n            }\n        }\n        return false;\n    },\n\n    /**\n     * @override\n     */\n    transformTo: function (x, y, width, height) {\n        var rect = this.getBoundingRect();\n        var invertLongitute = this._invertLongitute;\n\n        rect = rect.clone();\n\n        if (invertLongitute) {\n            // Longitute is inverted\n            rect.y = -rect.y - rect.height;\n        }\n\n        var rawTransformable = this._rawTransformable;\n\n        rawTransformable.transform = rect.calculateTransform(\n            new BoundingRect(x, y, width, height)\n        );\n\n        rawTransformable.decomposeTransform();\n\n        if (invertLongitute) {\n            var scale = rawTransformable.scale;\n            scale[1] = -scale[1];\n        }\n\n        rawTransformable.updateTransform();\n\n        this._updateTransform();\n    },\n\n    /**\n     * @param {string} name\n     * @return {module:echarts/coord/geo/Region}\n     */\n    getRegion: function (name) {\n        return this._regionsMap.get(name);\n    },\n\n    getRegionByCoord: function (coord) {\n        var regions = this.regions;\n        for (var i = 0; i < regions.length; i++) {\n            if (regions[i].contain(coord)) {\n                return regions[i];\n            }\n        }\n    },\n\n    /**\n     * Add geoCoord for indexing by name\n     * @param {string} name\n     * @param {Array.<number>} geoCoord\n     */\n    addGeoCoord: function (name, geoCoord) {\n        this._nameCoordMap.set(name, geoCoord);\n    },\n\n    /**\n     * Get geoCoord by name\n     * @param {string} name\n     * @return {Array.<number>}\n     */\n    getGeoCoord: function (name) {\n        return this._nameCoordMap.get(name);\n    },\n\n    /**\n     * @override\n     */\n    getBoundingRect: function () {\n        return this._rect;\n    },\n\n    /**\n     * @param {string|Array.<number>} data\n     * @param {boolean} noRoam\n     * @param {Array.<number>} [out]\n     * @return {Array.<number>}\n     */\n    dataToPoint: function (data, noRoam, out) {\n        if (typeof data === 'string') {\n            // Map area name to geoCoord\n            data = this.getGeoCoord(data);\n        }\n        if (data) {\n            return View.prototype.dataToPoint.call(this, data, noRoam, out);\n        }\n    },\n\n    /**\n     * @override\n     */\n    convertToPixel: curry(doConvert, 'dataToPoint'),\n\n    /**\n     * @override\n     */\n    convertFromPixel: curry(doConvert, 'pointToData')\n\n};\n\nmixin(Geo, View);\n\nfunction doConvert(methodName, ecModel, finder, value) {\n    var geoModel = finder.geoModel;\n    var seriesModel = finder.seriesModel;\n\n    var coordSys = geoModel\n        ? geoModel.coordinateSystem\n        : seriesModel\n        ? (\n            seriesModel.coordinateSystem // For map.\n            || (seriesModel.getReferringComponents('geo')[0] || {}).coordinateSystem\n        )\n        : null;\n\n    return coordSys === this ? coordSys[methodName](value) : null;\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Resize method bound to the geo\n * @param {module:echarts/coord/geo/GeoModel|module:echarts/chart/map/MapModel} geoModel\n * @param {module:echarts/ExtensionAPI} api\n */\nfunction resizeGeo(geoModel, api) {\n\n    var boundingCoords = geoModel.get('boundingCoords');\n    if (boundingCoords != null) {\n        var leftTop = boundingCoords[0];\n        var rightBottom = boundingCoords[1];\n        if (isNaN(leftTop[0]) || isNaN(leftTop[1]) || isNaN(rightBottom[0]) || isNaN(rightBottom[1])) {\n            if (__DEV__) {\n                console.error('Invalid boundingCoords');\n            }\n        }\n        else {\n            this.setBoundingRect(leftTop[0], leftTop[1], rightBottom[0] - leftTop[0], rightBottom[1] - leftTop[1]);\n        }\n    }\n\n    var rect = this.getBoundingRect();\n\n    var boxLayoutOption;\n\n    var center = geoModel.get('layoutCenter');\n    var size = geoModel.get('layoutSize');\n\n    var viewWidth = api.getWidth();\n    var viewHeight = api.getHeight();\n\n    var aspect = rect.width / rect.height * this.aspectScale;\n\n    var useCenterAndSize = false;\n\n    if (center && size) {\n        center = [\n            parsePercent$1(center[0], viewWidth),\n            parsePercent$1(center[1], viewHeight)\n        ];\n        size = parsePercent$1(size, Math.min(viewWidth, viewHeight));\n\n        if (!isNaN(center[0]) && !isNaN(center[1]) && !isNaN(size)) {\n            useCenterAndSize = true;\n        }\n        else {\n            if (__DEV__) {\n                console.warn('Given layoutCenter or layoutSize data are invalid. Use left/top/width/height instead.');\n            }\n        }\n    }\n\n    var viewRect;\n    if (useCenterAndSize) {\n        var viewRect = {};\n        if (aspect > 1) {\n            // Width is same with size\n            viewRect.width = size;\n            viewRect.height = size / aspect;\n        }\n        else {\n            viewRect.height = size;\n            viewRect.width = size * aspect;\n        }\n        viewRect.y = center[1] - viewRect.height / 2;\n        viewRect.x = center[0] - viewRect.width / 2;\n    }\n    else {\n        // Use left/top/width/height\n        boxLayoutOption = geoModel.getBoxLayoutParams();\n\n        // 0.75 rate\n        boxLayoutOption.aspect = aspect;\n\n        viewRect = getLayoutRect(boxLayoutOption, {\n            width: viewWidth,\n            height: viewHeight\n        });\n    }\n\n    this.setViewRect(viewRect.x, viewRect.y, viewRect.width, viewRect.height);\n\n    this.setCenter(geoModel.get('center'));\n    this.setZoom(geoModel.get('zoom'));\n}\n\n/**\n * @param {module:echarts/coord/Geo} geo\n * @param {module:echarts/model/Model} model\n * @inner\n */\nfunction setGeoCoords(geo, model) {\n    each$1(model.get('geoCoord'), function (geoCoord, name) {\n        geo.addGeoCoord(name, geoCoord);\n    });\n}\n\nvar geoCreator = {\n\n    // For deciding which dimensions to use when creating list data\n    dimensions: Geo.prototype.dimensions,\n\n    create: function (ecModel, api) {\n        var geoList = [];\n\n        // FIXME Create each time may be slow\n        ecModel.eachComponent('geo', function (geoModel, idx) {\n            var name = geoModel.get('map');\n\n            var aspectScale = geoModel.get('aspectScale');\n            var invertLongitute = true;\n            var mapRecords = mapDataStorage.retrieveMap(name);\n            if (mapRecords && mapRecords[0] && mapRecords[0].type === 'svg') {\n                aspectScale == null && (aspectScale = 1);\n                invertLongitute = false;\n            }\n            else {\n                aspectScale == null && (aspectScale = 0.75);\n            }\n\n            var geo = new Geo(name + idx, name, geoModel.get('nameMap'), invertLongitute);\n\n            geo.aspectScale = aspectScale;\n            geo.zoomLimit = geoModel.get('scaleLimit');\n            geoList.push(geo);\n\n            setGeoCoords(geo, geoModel);\n\n            geoModel.coordinateSystem = geo;\n            geo.model = geoModel;\n\n            // Inject resize method\n            geo.resize = resizeGeo;\n\n            geo.resize(geoModel, api);\n        });\n\n        ecModel.eachSeries(function (seriesModel) {\n            var coordSys = seriesModel.get('coordinateSystem');\n            if (coordSys === 'geo') {\n                var geoIndex = seriesModel.get('geoIndex') || 0;\n                seriesModel.coordinateSystem = geoList[geoIndex];\n            }\n        });\n\n        // If has map series\n        var mapModelGroupBySeries = {};\n\n        ecModel.eachSeriesByType('map', function (seriesModel) {\n            if (!seriesModel.getHostGeoModel()) {\n                var mapType = seriesModel.getMapType();\n                mapModelGroupBySeries[mapType] = mapModelGroupBySeries[mapType] || [];\n                mapModelGroupBySeries[mapType].push(seriesModel);\n            }\n        });\n\n        each$1(mapModelGroupBySeries, function (mapSeries, mapType) {\n            var nameMapList = map(mapSeries, function (singleMapSeries) {\n                return singleMapSeries.get('nameMap');\n            });\n            var geo = new Geo(mapType, mapType, mergeAll(nameMapList));\n\n            geo.zoomLimit = retrieve.apply(null, map(mapSeries, function (singleMapSeries) {\n                return singleMapSeries.get('scaleLimit');\n            }));\n            geoList.push(geo);\n\n            // Inject resize method\n            geo.resize = resizeGeo;\n            geo.aspectScale = mapSeries[0].get('aspectScale');\n\n            geo.resize(mapSeries[0], api);\n\n            each$1(mapSeries, function (singleMapSeries) {\n                singleMapSeries.coordinateSystem = geo;\n\n                setGeoCoords(geo, singleMapSeries);\n            });\n        });\n\n        return geoList;\n    },\n\n    /**\n     * Fill given regions array\n     * @param  {Array.<Object>} originRegionArr\n     * @param  {string} mapName\n     * @param  {Object} [nameMap]\n     * @return {Array}\n     */\n    getFilledRegions: function (originRegionArr, mapName, nameMap) {\n        // Not use the original\n        var regionsArr = (originRegionArr || []).slice();\n\n        var dataNameMap = createHashMap();\n        for (var i = 0; i < regionsArr.length; i++) {\n            dataNameMap.set(regionsArr[i].name, regionsArr[i]);\n        }\n\n        var source = geoSourceManager.load(mapName, nameMap);\n        each$1(source.regions, function (region) {\n            var name = region.name;\n            !dataNameMap.get(name) && regionsArr.push({name: name});\n        });\n\n        return regionsArr;\n    }\n};\n\nregisterCoordinateSystem('geo', geoCreator);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar mapSymbolLayout = function (ecModel) {\n\n    var processedMapType = {};\n\n    ecModel.eachSeriesByType('map', function (mapSeries) {\n        var mapType = mapSeries.getMapType();\n        if (mapSeries.getHostGeoModel() || processedMapType[mapType]) {\n            return;\n        }\n\n        var mapSymbolOffsets = {};\n\n        each$1(mapSeries.seriesGroup, function (subMapSeries) {\n            var geo = subMapSeries.coordinateSystem;\n            var data = subMapSeries.originalData;\n            if (subMapSeries.get('showLegendSymbol') && ecModel.getComponent('legend')) {\n                data.each(data.mapDimension('value'), function (value, idx) {\n                    var name = data.getName(idx);\n                    var region = geo.getRegion(name);\n\n                    // If input series.data is [11, 22, '-'/null/undefined, 44],\n                    // it will be filled with NaN: [11, 22, NaN, 44] and NaN will\n                    // not be drawn. So here must validate if value is NaN.\n                    if (!region || isNaN(value)) {\n                        return;\n                    }\n\n                    var offset = mapSymbolOffsets[name] || 0;\n\n                    var point = geo.dataToPoint(region.center);\n\n                    mapSymbolOffsets[name] = offset + 1;\n\n                    data.setItemLayout(idx, {\n                        point: point,\n                        offset: offset\n                    });\n                });\n            }\n        });\n\n        // Show label of those region not has legendSymbol(which is offset 0)\n        var data = mapSeries.getData();\n        data.each(function (idx) {\n            var name = data.getName(idx);\n            var layout = data.getItemLayout(idx) || {};\n            layout.showLabel = !mapSymbolOffsets[name];\n            data.setItemLayout(idx, layout);\n        });\n\n        processedMapType[mapType] = true;\n    });\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\nvar mapVisual = function (ecModel) {\n    ecModel.eachSeriesByType('map', function (seriesModel) {\n        var colorList = seriesModel.get('color');\n        var itemStyleModel = seriesModel.getModel('itemStyle');\n\n        var areaColor = itemStyleModel.get('areaColor');\n        var color = itemStyleModel.get('color')\n            || colorList[seriesModel.seriesIndex % colorList.length];\n\n        seriesModel.getData().setVisual({\n            'areaColor': areaColor,\n            'color': color\n        });\n    });\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n// FIXME 公用？\n/**\n * @param {Array.<module:echarts/data/List>} datas\n * @param {string} statisticType 'average' 'sum'\n * @inner\n */\nfunction dataStatistics(datas, statisticType) {\n    var dataNameMap = {};\n\n    each$1(datas, function (data) {\n        data.each(data.mapDimension('value'), function (value, idx) {\n            // Add prefix to avoid conflict with Object.prototype.\n            var mapKey = 'ec-' + data.getName(idx);\n            dataNameMap[mapKey] = dataNameMap[mapKey] || [];\n            if (!isNaN(value)) {\n                dataNameMap[mapKey].push(value);\n            }\n        });\n    });\n\n    return datas[0].map(datas[0].mapDimension('value'), function (value, idx) {\n        var mapKey = 'ec-' + datas[0].getName(idx);\n        var sum = 0;\n        var min = Infinity;\n        var max = -Infinity;\n        var len = dataNameMap[mapKey].length;\n        for (var i = 0; i < len; i++) {\n            min = Math.min(min, dataNameMap[mapKey][i]);\n            max = Math.max(max, dataNameMap[mapKey][i]);\n            sum += dataNameMap[mapKey][i];\n        }\n        var result;\n        if (statisticType === 'min') {\n            result = min;\n        }\n        else if (statisticType === 'max') {\n            result = max;\n        }\n        else if (statisticType === 'average') {\n            result = sum / len;\n        }\n        else {\n            result = sum;\n        }\n        return len === 0 ? NaN : result;\n    });\n}\n\nvar mapDataStatistic = function (ecModel) {\n    var seriesGroups = {};\n    ecModel.eachSeriesByType('map', function (seriesModel) {\n        var hostGeoModel = seriesModel.getHostGeoModel();\n        var key = hostGeoModel ? 'o' + hostGeoModel.id : 'i' + seriesModel.getMapType();\n        (seriesGroups[key] = seriesGroups[key] || []).push(seriesModel);\n    });\n\n    each$1(seriesGroups, function (seriesList, key) {\n        var data = dataStatistics(\n            map(seriesList, function (seriesModel) {\n                return seriesModel.getData();\n            }),\n            seriesList[0].get('mapValueCalculation')\n        );\n\n        for (var i = 0; i < seriesList.length; i++) {\n            seriesList[i].originalData = seriesList[i].getData();\n        }\n\n        // FIXME Put where?\n        for (var i = 0; i < seriesList.length; i++) {\n            seriesList[i].seriesGroup = seriesList;\n            seriesList[i].needsDrawMap = i === 0 && !seriesList[i].getHostGeoModel();\n\n            seriesList[i].setData(data.cloneShallow());\n            seriesList[i].mainSeries = seriesList[0];\n        }\n    });\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar backwardCompat$2 = function (option) {\n    // Save geoCoord\n    var mapSeries = [];\n    each$1(option.series, function (seriesOpt) {\n        if (seriesOpt && seriesOpt.type === 'map') {\n            mapSeries.push(seriesOpt);\n            seriesOpt.map = seriesOpt.map || seriesOpt.mapType;\n            // Put x, y, width, height, x2, y2 in the top level\n            defaults(seriesOpt, seriesOpt.mapLocation);\n        }\n    });\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nregisterLayout(mapSymbolLayout);\nregisterVisual(mapVisual);\nregisterProcessor(PRIORITY.PROCESSOR.STATISTIC, mapDataStatistic);\nregisterPreprocessor(backwardCompat$2);\n\ncreateDataSelectAction('map', [{\n    type: 'mapToggleSelect',\n    event: 'mapselectchanged',\n    method: 'toggleSelected'\n}, {\n    type: 'mapSelect',\n    event: 'mapselected',\n    method: 'select'\n}, {\n    type: 'mapUnSelect',\n    event: 'mapunselected',\n    method: 'unSelect'\n}]);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Link lists and struct (graph or tree)\n */\n\nvar each$7 = each$1;\n\nvar DATAS = '\\0__link_datas';\nvar MAIN_DATA = '\\0__link_mainData';\n\n// Caution:\n// In most case, either list or its shallow clones (see list.cloneShallow)\n// is active in echarts process. So considering heap memory consumption,\n// we do not clone tree or graph, but share them among list and its shallow clones.\n// But in some rare case, we have to keep old list (like do animation in chart). So\n// please take care that both the old list and the new list share the same tree/graph.\n\n/**\n * @param {Object} opt\n * @param {module:echarts/data/List} opt.mainData\n * @param {Object} [opt.struct] For example, instance of Graph or Tree.\n * @param {string} [opt.structAttr] designation: list[structAttr] = struct;\n * @param {Object} [opt.datas] {dataType: data},\n *                 like: {node: nodeList, edge: edgeList}.\n *                 Should contain mainData.\n * @param {Object} [opt.datasAttr] {dataType: attr},\n *                 designation: struct[datasAttr[dataType]] = list;\n */\nfunction linkList(opt) {\n    var mainData = opt.mainData;\n    var datas = opt.datas;\n\n    if (!datas) {\n        datas = {main: mainData};\n        opt.datasAttr = {main: 'data'};\n    }\n    opt.datas = opt.mainData = null;\n\n    linkAll(mainData, datas, opt);\n\n    // Porxy data original methods.\n    each$7(datas, function (data) {\n        each$7(mainData.TRANSFERABLE_METHODS, function (methodName) {\n            data.wrapMethod(methodName, curry(transferInjection, opt));\n        });\n\n    });\n\n    // Beyond transfer, additional features should be added to `cloneShallow`.\n    mainData.wrapMethod('cloneShallow', curry(cloneShallowInjection, opt));\n\n    // Only mainData trigger change, because struct.update may trigger\n    // another changable methods, which may bring about dead lock.\n    each$7(mainData.CHANGABLE_METHODS, function (methodName) {\n        mainData.wrapMethod(methodName, curry(changeInjection, opt));\n    });\n\n    // Make sure datas contains mainData.\n    assert$1(datas[mainData.dataType] === mainData);\n}\n\nfunction transferInjection(opt, res) {\n    if (isMainData(this)) {\n        // Transfer datas to new main data.\n        var datas = extend({}, this[DATAS]);\n        datas[this.dataType] = res;\n        linkAll(res, datas, opt);\n    }\n    else {\n        // Modify the reference in main data to point newData.\n        linkSingle(res, this.dataType, this[MAIN_DATA], opt);\n    }\n    return res;\n}\n\nfunction changeInjection(opt, res) {\n    opt.struct && opt.struct.update(this);\n    return res;\n}\n\nfunction cloneShallowInjection(opt, res) {\n    // cloneShallow, which brings about some fragilities, may be inappropriate\n    // to be exposed as an API. So for implementation simplicity we can make\n    // the restriction that cloneShallow of not-mainData should not be invoked\n    // outside, but only be invoked here.\n    each$7(res[DATAS], function (data, dataType) {\n        data !== res && linkSingle(data.cloneShallow(), dataType, res, opt);\n    });\n    return res;\n}\n\n/**\n * Supplement method to List.\n *\n * @public\n * @param {string} [dataType] If not specified, return mainData.\n * @return {module:echarts/data/List}\n */\nfunction getLinkedData(dataType) {\n    var mainData = this[MAIN_DATA];\n    return (dataType == null || mainData == null)\n        ? mainData\n        : mainData[DATAS][dataType];\n}\n\nfunction isMainData(data) {\n    return data[MAIN_DATA] === data;\n}\n\nfunction linkAll(mainData, datas, opt) {\n    mainData[DATAS] = {};\n    each$7(datas, function (data, dataType) {\n        linkSingle(data, dataType, mainData, opt);\n    });\n}\n\nfunction linkSingle(data, dataType, mainData, opt) {\n    mainData[DATAS][dataType] = data;\n    data[MAIN_DATA] = mainData;\n    data.dataType = dataType;\n\n    if (opt.struct) {\n        data[opt.structAttr] = opt.struct;\n        opt.struct[opt.datasAttr[dataType]] = data;\n    }\n\n    // Supplement method.\n    data.getLinkedData = getLinkedData;\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Tree data structure\n *\n * @module echarts/data/Tree\n */\n\n/**\n * @constructor module:echarts/data/Tree~TreeNode\n * @param {string} name\n * @param {module:echarts/data/Tree} hostTree\n */\nvar TreeNode = function (name, hostTree) {\n    /**\n     * @type {string}\n     */\n    this.name = name || '';\n\n    /**\n     * Depth of node\n     *\n     * @type {number}\n     * @readOnly\n     */\n    this.depth = 0;\n\n    /**\n     * Height of the subtree rooted at this node.\n     * @type {number}\n     * @readOnly\n     */\n    this.height = 0;\n\n    /**\n     * @type {module:echarts/data/Tree~TreeNode}\n     * @readOnly\n     */\n    this.parentNode = null;\n\n    /**\n     * Reference to list item.\n     * Do not persistent dataIndex outside,\n     * besause it may be changed by list.\n     * If dataIndex -1,\n     * this node is logical deleted (filtered) in list.\n     *\n     * @type {Object}\n     * @readOnly\n     */\n    this.dataIndex = -1;\n\n    /**\n     * @type {Array.<module:echarts/data/Tree~TreeNode>}\n     * @readOnly\n     */\n    this.children = [];\n\n    /**\n     * @type {Array.<module:echarts/data/Tree~TreeNode>}\n     * @pubilc\n     */\n    this.viewChildren = [];\n\n    /**\n     * @type {moduel:echarts/data/Tree}\n     * @readOnly\n     */\n    this.hostTree = hostTree;\n};\n\nTreeNode.prototype = {\n\n    constructor: TreeNode,\n\n    /**\n     * The node is removed.\n     * @return {boolean} is removed.\n     */\n    isRemoved: function () {\n        return this.dataIndex < 0;\n    },\n\n    /**\n     * Travel this subtree (include this node).\n     * Usage:\n     *    node.eachNode(function () { ... }); // preorder\n     *    node.eachNode('preorder', function () { ... }); // preorder\n     *    node.eachNode('postorder', function () { ... }); // postorder\n     *    node.eachNode(\n     *        {order: 'postorder', attr: 'viewChildren'},\n     *        function () { ... }\n     *    ); // postorder\n     *\n     * @param {(Object|string)} options If string, means order.\n     * @param {string=} options.order 'preorder' or 'postorder'\n     * @param {string=} options.attr 'children' or 'viewChildren'\n     * @param {Function} cb If in preorder and return false,\n     *                      its subtree will not be visited.\n     * @param {Object} [context]\n     */\n    eachNode: function (options, cb, context) {\n        if (typeof options === 'function') {\n            context = cb;\n            cb = options;\n            options = null;\n        }\n\n        options = options || {};\n        if (isString(options)) {\n            options = {order: options};\n        }\n\n        var order = options.order || 'preorder';\n        var children = this[options.attr || 'children'];\n\n        var suppressVisitSub;\n        order === 'preorder' && (suppressVisitSub = cb.call(context, this));\n\n        for (var i = 0; !suppressVisitSub && i < children.length; i++) {\n            children[i].eachNode(options, cb, context);\n        }\n\n        order === 'postorder' && cb.call(context, this);\n    },\n\n    /**\n     * Update depth and height of this subtree.\n     *\n     * @param  {number} depth\n     */\n    updateDepthAndHeight: function (depth) {\n        var height = 0;\n        this.depth = depth;\n        for (var i = 0; i < this.children.length; i++) {\n            var child = this.children[i];\n            child.updateDepthAndHeight(depth + 1);\n            if (child.height > height) {\n                height = child.height;\n            }\n        }\n        this.height = height + 1;\n    },\n\n    /**\n     * @param  {string} id\n     * @return {module:echarts/data/Tree~TreeNode}\n     */\n    getNodeById: function (id) {\n        if (this.getId() === id) {\n            return this;\n        }\n        for (var i = 0, children = this.children, len = children.length; i < len; i++) {\n            var res = children[i].getNodeById(id);\n            if (res) {\n                return res;\n            }\n        }\n    },\n\n    /**\n     * @param {module:echarts/data/Tree~TreeNode} node\n     * @return {boolean}\n     */\n    contains: function (node) {\n        if (node === this) {\n            return true;\n        }\n        for (var i = 0, children = this.children, len = children.length; i < len; i++) {\n            var res = children[i].contains(node);\n            if (res) {\n                return res;\n            }\n        }\n    },\n\n    /**\n     * @param {boolean} includeSelf Default false.\n     * @return {Array.<module:echarts/data/Tree~TreeNode>} order: [root, child, grandchild, ...]\n     */\n    getAncestors: function (includeSelf) {\n        var ancestors = [];\n        var node = includeSelf ? this : this.parentNode;\n        while (node) {\n            ancestors.push(node);\n            node = node.parentNode;\n        }\n        ancestors.reverse();\n        return ancestors;\n    },\n\n    /**\n     * @param {string|Array=} [dimension='value'] Default 'value'. can be 0, 1, 2, 3\n     * @return {number} Value.\n     */\n    getValue: function (dimension) {\n        var data = this.hostTree.data;\n        return data.get(data.getDimension(dimension || 'value'), this.dataIndex);\n    },\n\n    /**\n     * @param {Object} layout\n     * @param {boolean=} [merge=false]\n     */\n    setLayout: function (layout, merge$$1) {\n        this.dataIndex >= 0\n            && this.hostTree.data.setItemLayout(this.dataIndex, layout, merge$$1);\n    },\n\n    /**\n     * @return {Object} layout\n     */\n    getLayout: function () {\n        return this.hostTree.data.getItemLayout(this.dataIndex);\n    },\n\n    /**\n     * @param {string} [path]\n     * @return {module:echarts/model/Model}\n     */\n    getModel: function (path) {\n        if (this.dataIndex < 0) {\n            return;\n        }\n        var hostTree = this.hostTree;\n        var itemModel = hostTree.data.getItemModel(this.dataIndex);\n        var levelModel = this.getLevelModel();\n        var leavesModel;\n        if (!levelModel && (this.children.length === 0 || (this.children.length !== 0 && this.isExpand === false))) {\n            leavesModel = this.getLeavesModel();\n        }\n        return itemModel.getModel(path, (levelModel || leavesModel || hostTree.hostModel).getModel(path));\n    },\n\n    /**\n     * @return {module:echarts/model/Model}\n     */\n    getLevelModel: function () {\n        return (this.hostTree.levelModels || [])[this.depth];\n    },\n\n    /**\n     * @return {module:echarts/model/Model}\n     */\n    getLeavesModel: function () {\n        return this.hostTree.leavesModel;\n    },\n\n    /**\n     * @example\n     *  setItemVisual('color', color);\n     *  setItemVisual({\n     *      'color': color\n     *  });\n     */\n    setVisual: function (key, value) {\n        this.dataIndex >= 0\n            && this.hostTree.data.setItemVisual(this.dataIndex, key, value);\n    },\n\n    /**\n     * Get item visual\n     */\n    getVisual: function (key, ignoreParent) {\n        return this.hostTree.data.getItemVisual(this.dataIndex, key, ignoreParent);\n    },\n\n    /**\n     * @public\n     * @return {number}\n     */\n    getRawIndex: function () {\n        return this.hostTree.data.getRawIndex(this.dataIndex);\n    },\n\n    /**\n     * @public\n     * @return {string}\n     */\n    getId: function () {\n        return this.hostTree.data.getId(this.dataIndex);\n    },\n\n    /**\n     * if this is an ancestor of another node\n     *\n     * @public\n     * @param {TreeNode} node another node\n     * @return {boolean} if is ancestor\n     */\n    isAncestorOf: function (node) {\n        var parent = node.parentNode;\n        while (parent) {\n            if (parent === this) {\n                return true;\n            }\n            parent = parent.parentNode;\n        }\n        return false;\n    },\n\n    /**\n     * if this is an descendant of another node\n     *\n     * @public\n     * @param {TreeNode} node another node\n     * @return {boolean} if is descendant\n     */\n    isDescendantOf: function (node) {\n        return node !== this && node.isAncestorOf(this);\n    }\n};\n\n/**\n * @constructor\n * @alias module:echarts/data/Tree\n * @param {module:echarts/model/Model} hostModel\n * @param {Array.<Object>} levelOptions\n * @param {Object} leavesOption\n */\nfunction Tree(hostModel, levelOptions, leavesOption) {\n    /**\n     * @type {module:echarts/data/Tree~TreeNode}\n     * @readOnly\n     */\n    this.root;\n\n    /**\n     * @type {module:echarts/data/List}\n     * @readOnly\n     */\n    this.data;\n\n    /**\n     * Index of each item is the same as the raw index of coresponding list item.\n     * @private\n     * @type {Array.<module:echarts/data/Tree~TreeNode}\n     */\n    this._nodes = [];\n\n    /**\n     * @private\n     * @readOnly\n     * @type {module:echarts/model/Model}\n     */\n    this.hostModel = hostModel;\n\n    /**\n     * @private\n     * @readOnly\n     * @type {Array.<module:echarts/model/Model}\n     */\n    this.levelModels = map(levelOptions || [], function (levelDefine) {\n        return new Model(levelDefine, hostModel, hostModel.ecModel);\n    });\n\n    this.leavesModel = new Model(leavesOption || {}, hostModel, hostModel.ecModel);\n}\n\nTree.prototype = {\n\n    constructor: Tree,\n\n    type: 'tree',\n\n    /**\n     * Travel this subtree (include this node).\n     * Usage:\n     *    node.eachNode(function () { ... }); // preorder\n     *    node.eachNode('preorder', function () { ... }); // preorder\n     *    node.eachNode('postorder', function () { ... }); // postorder\n     *    node.eachNode(\n     *        {order: 'postorder', attr: 'viewChildren'},\n     *        function () { ... }\n     *    ); // postorder\n     *\n     * @param {(Object|string)} options If string, means order.\n     * @param {string=} options.order 'preorder' or 'postorder'\n     * @param {string=} options.attr 'children' or 'viewChildren'\n     * @param {Function} cb\n     * @param {Object}   [context]\n     */\n    eachNode: function (options, cb, context) {\n        this.root.eachNode(options, cb, context);\n    },\n\n    /**\n     * @param {number} dataIndex\n     * @return {module:echarts/data/Tree~TreeNode}\n     */\n    getNodeByDataIndex: function (dataIndex) {\n        var rawIndex = this.data.getRawIndex(dataIndex);\n        return this._nodes[rawIndex];\n    },\n\n    /**\n     * @param {string} name\n     * @return {module:echarts/data/Tree~TreeNode}\n     */\n    getNodeByName: function (name) {\n        return this.root.getNodeByName(name);\n    },\n\n    /**\n     * Update item available by list,\n     * when list has been performed options like 'filterSelf' or 'map'.\n     */\n    update: function () {\n        var data = this.data;\n        var nodes = this._nodes;\n\n        for (var i = 0, len = nodes.length; i < len; i++) {\n            nodes[i].dataIndex = -1;\n        }\n\n        for (var i = 0, len = data.count(); i < len; i++) {\n            nodes[data.getRawIndex(i)].dataIndex = i;\n        }\n    },\n\n    /**\n     * Clear all layouts\n     */\n    clearLayouts: function () {\n        this.data.clearItemLayouts();\n    }\n};\n\n/**\n * data node format:\n * {\n *     name: ...\n *     value: ...\n *     children: [\n *         {\n *             name: ...\n *             value: ...\n *             children: ...\n *         },\n *         ...\n *     ]\n * }\n *\n * @static\n * @param {Object} dataRoot Root node.\n * @param {module:echarts/model/Model} hostModel\n * @param {Object} treeOptions\n * @param {Array.<Object>} treeOptions.levels\n * @param {Array.<Object>} treeOptions.leaves\n * @return module:echarts/data/Tree\n */\nTree.createTree = function (dataRoot, hostModel, treeOptions) {\n\n    var tree = new Tree(hostModel, treeOptions.levels, treeOptions.leaves);\n    var listData = [];\n    var dimMax = 1;\n\n    buildHierarchy(dataRoot);\n\n    function buildHierarchy(dataNode, parentNode) {\n        var value = dataNode.value;\n        dimMax = Math.max(dimMax, isArray(value) ? value.length : 1);\n\n        listData.push(dataNode);\n\n        var node = new TreeNode(dataNode.name, tree);\n        parentNode\n            ? addChild(node, parentNode)\n            : (tree.root = node);\n\n        tree._nodes.push(node);\n\n        var children = dataNode.children;\n        if (children) {\n            for (var i = 0; i < children.length; i++) {\n                buildHierarchy(children[i], node);\n            }\n        }\n    }\n\n    tree.root.updateDepthAndHeight(0);\n\n    var dimensionsInfo = createDimensions(listData, {\n        coordDimensions: ['value'],\n        dimensionsCount: dimMax\n    });\n\n    var list = new List(dimensionsInfo, hostModel);\n    list.initData(listData);\n\n    linkList({\n        mainData: list,\n        struct: tree,\n        structAttr: 'tree'\n    });\n\n    tree.update();\n\n    return tree;\n};\n\n/**\n * It is needed to consider the mess of 'list', 'hostModel' when creating a TreeNote,\n * so this function is not ready and not necessary to be public.\n *\n * @param {(module:echarts/data/Tree~TreeNode|Object)} child\n */\nfunction addChild(child, node) {\n    var children = node.children;\n    if (child.parentNode === node) {\n        return;\n    }\n\n    children.push(child);\n    child.parentNode = node;\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nSeriesModel.extend({\n\n    type: 'series.tree',\n\n    layoutInfo: null,\n\n    // can support the position parameters 'left', 'top','right','bottom', 'width',\n    // 'height' in the setOption() with 'merge' mode normal.\n    layoutMode: 'box',\n\n    /**\n     * Init a tree data structure from data in option series\n     * @param  {Object} option  the object used to config echarts view\n     * @return {module:echarts/data/List} storage initial data\n     */\n    getInitialData: function (option) {\n\n        //create an virtual root\n        var root = {name: option.name, children: option.data};\n\n        var leaves = option.leaves || {};\n\n        var treeOption = {};\n\n        treeOption.leaves = leaves;\n\n        var tree = Tree.createTree(root, this, treeOption);\n\n        var treeDepth = 0;\n\n        tree.eachNode('preorder', function (node) {\n            if (node.depth > treeDepth) {\n                treeDepth = node.depth;\n            }\n        });\n\n        var expandAndCollapse = option.expandAndCollapse;\n        var expandTreeDepth = (expandAndCollapse && option.initialTreeDepth >= 0)\n            ? option.initialTreeDepth : treeDepth;\n\n        tree.root.eachNode('preorder', function (node) {\n            var item = node.hostTree.data.getRawDataItem(node.dataIndex);\n            // Add item.collapsed != null, because users can collapse node original in the series.data.\n            node.isExpand = (item && item.collapsed != null)\n                ? !item.collapsed\n                : node.depth <= expandTreeDepth;\n        });\n\n        return tree.data;\n    },\n\n    /**\n     * Make the configuration 'orient' backward compatibly, with 'horizontal = LR', 'vertical = TB'.\n     * @returns {string} orient\n     */\n    getOrient: function () {\n        var orient = this.get('orient');\n        if (orient === 'horizontal') {\n            orient = 'LR';\n        }\n        else if (orient === 'vertical') {\n            orient = 'TB';\n        }\n        return orient;\n    },\n\n    setZoom: function (zoom) {\n        this.option.zoom = zoom;\n    },\n\n    setCenter: function (center) {\n        this.option.center = center;\n    },\n\n    /**\n     * @override\n     * @param {number} dataIndex\n     */\n    formatTooltip: function (dataIndex) {\n        var tree = this.getData().tree;\n        var realRoot = tree.root.children[0];\n        var node = tree.getNodeByDataIndex(dataIndex);\n        var value = node.getValue();\n        var name = node.name;\n        while (node && (node !== realRoot)) {\n            name = node.parentNode.name + '.' + name;\n            node = node.parentNode;\n        }\n        return encodeHTML(name + (\n            (isNaN(value) || value == null) ? '' : ' : ' + value\n        ));\n    },\n\n    defaultOption: {\n        zlevel: 0,\n        z: 2,\n        coordinateSystem: 'view',\n\n        // the position of the whole view\n        left: '12%',\n        top: '12%',\n        right: '12%',\n        bottom: '12%',\n\n        // the layout of the tree, two value can be selected, 'orthogonal' or 'radial'\n        layout: 'orthogonal',\n\n        roam: false, // true | false | 'move' | 'scale', see module:component/helper/RoamController.\n        // Symbol size scale ratio in roam\n        nodeScaleRatio: 0.4,\n\n        // Default on center of graph\n        center: null,\n\n        zoom: 1,\n\n        // The orient of orthoginal layout, can be setted to 'LR', 'TB', 'RL', 'BT'.\n        // and the backward compatibility configuration 'horizontal = LR', 'vertical = TB'.\n        orient: 'LR',\n\n        symbol: 'emptyCircle',\n\n        symbolSize: 7,\n\n        expandAndCollapse: true,\n\n        initialTreeDepth: 2,\n\n        lineStyle: {\n            color: '#ccc',\n            width: 1.5,\n            curveness: 0.5\n        },\n\n        itemStyle: {\n            color: 'lightsteelblue',\n            borderColor: '#c23531',\n            borderWidth: 1.5\n        },\n\n        label: {\n            show: true,\n            color: '#555'\n        },\n\n        leaves: {\n            label: {\n                show: true\n            }\n        },\n\n        animationEasing: 'linear',\n\n        animationDuration: 700,\n\n        animationDurationUpdate: 1000\n    }\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/*\n* A third-party license is embeded for some of the code in this file:\n* The tree layoutHelper implementation was originally copied from\n* \"d3.js\"(https://github.com/d3/d3-hierarchy) with\n* some modifications made for this project.\n* (see more details in the comment of the specific method below.)\n* The use of the source code of this file is also subject to the terms\n* and consitions of the licence of \"d3.js\" (BSD-3Clause, see\n* </licenses/LICENSE-d3>).\n*/\n\n/**\n * @file The layout algorithm of node-link tree diagrams. Here we using Reingold-Tilford algorithm to drawing\n *       the tree.\n */\n\n/**\n * Initialize all computational message for following algorithm.\n *\n * @param  {module:echarts/data/Tree~TreeNode} root   The virtual root of the tree.\n */\nfunction init$2(root) {\n    root.hierNode = {\n        defaultAncestor: null,\n        ancestor: root,\n        prelim: 0,\n        modifier: 0,\n        change: 0,\n        shift: 0,\n        i: 0,\n        thread: null\n    };\n\n    var nodes = [root];\n    var node;\n    var children;\n\n    while (node = nodes.pop()) { // jshint ignore:line\n        children = node.children;\n        if (node.isExpand && children.length) {\n            var n = children.length;\n            for (var i = n - 1; i >= 0; i--) {\n                var child = children[i];\n                child.hierNode = {\n                    defaultAncestor: null,\n                    ancestor: child,\n                    prelim: 0,\n                    modifier: 0,\n                    change: 0,\n                    shift: 0,\n                    i: i,\n                    thread: null\n                };\n                nodes.push(child);\n            }\n        }\n    }\n}\n\n/**\n * The implementation of this function was originally copied from \"d3.js\"\n * <https://github.com/d3/d3-hierarchy/blob/4c1f038f2725d6eae2e49b61d01456400694bac4/src/tree.js>\n * with some modifications made for this program.\n * See the license statement at the head of this file.\n *\n * Computes a preliminary x coordinate for node. Before that, this function is\n * applied recursively to the children of node, as well as the function\n * apportion(). After spacing out the children by calling executeShifts(), the\n * node is placed to the midpoint of its outermost children.\n *\n * @param  {module:echarts/data/Tree~TreeNode} node\n * @param {Function} separation\n */\nfunction firstWalk(node, separation) {\n    var children = node.isExpand ? node.children : [];\n    var siblings = node.parentNode.children;\n    var subtreeW = node.hierNode.i ? siblings[node.hierNode.i - 1] : null;\n    if (children.length) {\n        executeShifts(node);\n        var midPoint = (children[0].hierNode.prelim + children[children.length - 1].hierNode.prelim) / 2;\n        if (subtreeW) {\n            node.hierNode.prelim = subtreeW.hierNode.prelim + separation(node, subtreeW);\n            node.hierNode.modifier = node.hierNode.prelim - midPoint;\n        }\n        else {\n            node.hierNode.prelim = midPoint;\n        }\n    }\n    else if (subtreeW) {\n        node.hierNode.prelim = subtreeW.hierNode.prelim + separation(node, subtreeW);\n    }\n    node.parentNode.hierNode.defaultAncestor = apportion(\n        node,\n        subtreeW,\n        node.parentNode.hierNode.defaultAncestor || siblings[0],\n        separation\n    );\n}\n\n\n/**\n * The implementation of this function was originally copied from \"d3.js\"\n * <https://github.com/d3/d3-hierarchy/blob/4c1f038f2725d6eae2e49b61d01456400694bac4/src/tree.js>\n * with some modifications made for this program.\n * See the license statement at the head of this file.\n *\n * Computes all real x-coordinates by summing up the modifiers recursively.\n *\n * @param  {module:echarts/data/Tree~TreeNode} node\n */\nfunction secondWalk(node) {\n    var nodeX = node.hierNode.prelim + node.parentNode.hierNode.modifier;\n    node.setLayout({x: nodeX}, true);\n    node.hierNode.modifier += node.parentNode.hierNode.modifier;\n}\n\n\nfunction separation(cb) {\n    return arguments.length ? cb : defaultSeparation;\n}\n\n/**\n * Transform the common coordinate to radial coordinate.\n *\n * @param  {number} x\n * @param  {number} y\n * @return {Object}\n */\nfunction radialCoordinate(x, y) {\n    var radialCoor = {};\n    x -= Math.PI / 2;\n    radialCoor.x = y * Math.cos(x);\n    radialCoor.y = y * Math.sin(x);\n    return radialCoor;\n}\n\n/**\n * Get the layout position of the whole view.\n *\n * @param {module:echarts/model/Series} seriesModel  the model object of sankey series\n * @param {module:echarts/ExtensionAPI} api  provide the API list that the developer can call\n * @return {module:zrender/core/BoundingRect}  size of rect to draw the sankey view\n */\nfunction getViewRect(seriesModel, api) {\n    return getLayoutRect(\n        seriesModel.getBoxLayoutParams(), {\n            width: api.getWidth(),\n            height: api.getHeight()\n        }\n    );\n}\n\n/**\n * All other shifts, applied to the smaller subtrees between w- and w+, are\n * performed by this function.\n *\n * The implementation of this function was originally copied from \"d3.js\"\n * <https://github.com/d3/d3-hierarchy/blob/4c1f038f2725d6eae2e49b61d01456400694bac4/src/tree.js>\n * with some modifications made for this program.\n * See the license statement at the head of this file.\n *\n * @param  {module:echarts/data/Tree~TreeNode} node\n */\nfunction executeShifts(node) {\n    var children = node.children;\n    var n = children.length;\n    var shift = 0;\n    var change = 0;\n    while (--n >= 0) {\n        var child = children[n];\n        child.hierNode.prelim += shift;\n        child.hierNode.modifier += shift;\n        change += child.hierNode.change;\n        shift += child.hierNode.shift + change;\n    }\n}\n\n/**\n * The implementation of this function was originally copied from \"d3.js\"\n * <https://github.com/d3/d3-hierarchy/blob/4c1f038f2725d6eae2e49b61d01456400694bac4/src/tree.js>\n * with some modifications made for this program.\n * See the license statement at the head of this file.\n *\n * The core of the algorithm. Here, a new subtree is combined with the\n * previous subtrees. Threads are used to traverse the inside and outside\n * contours of the left and right subtree up to the highest common level.\n * Whenever two nodes of the inside contours conflict, we compute the left\n * one of the greatest uncommon ancestors using the function nextAncestor()\n * and call moveSubtree() to shift the subtree and prepare the shifts of\n * smaller subtrees. Finally, we add a new thread (if necessary).\n *\n * @param  {module:echarts/data/Tree~TreeNode} subtreeV\n * @param  {module:echarts/data/Tree~TreeNode} subtreeW\n * @param  {module:echarts/data/Tree~TreeNode} ancestor\n * @param  {Function} separation\n * @return {module:echarts/data/Tree~TreeNode}\n */\nfunction apportion(subtreeV, subtreeW, ancestor, separation) {\n\n    if (subtreeW) {\n        var nodeOutRight = subtreeV;\n        var nodeInRight = subtreeV;\n        var nodeOutLeft = nodeInRight.parentNode.children[0];\n        var nodeInLeft = subtreeW;\n\n        var sumOutRight = nodeOutRight.hierNode.modifier;\n        var sumInRight = nodeInRight.hierNode.modifier;\n        var sumOutLeft = nodeOutLeft.hierNode.modifier;\n        var sumInLeft = nodeInLeft.hierNode.modifier;\n\n        while (nodeInLeft = nextRight(nodeInLeft), nodeInRight = nextLeft(nodeInRight), nodeInLeft && nodeInRight) {\n            nodeOutRight = nextRight(nodeOutRight);\n            nodeOutLeft = nextLeft(nodeOutLeft);\n            nodeOutRight.hierNode.ancestor = subtreeV;\n            var shift = nodeInLeft.hierNode.prelim + sumInLeft - nodeInRight.hierNode.prelim\n                    - sumInRight + separation(nodeInLeft, nodeInRight);\n            if (shift > 0) {\n                moveSubtree(nextAncestor(nodeInLeft, subtreeV, ancestor), subtreeV, shift);\n                sumInRight += shift;\n                sumOutRight += shift;\n            }\n            sumInLeft += nodeInLeft.hierNode.modifier;\n            sumInRight += nodeInRight.hierNode.modifier;\n            sumOutRight += nodeOutRight.hierNode.modifier;\n            sumOutLeft += nodeOutLeft.hierNode.modifier;\n        }\n        if (nodeInLeft && !nextRight(nodeOutRight)) {\n            nodeOutRight.hierNode.thread = nodeInLeft;\n            nodeOutRight.hierNode.modifier += sumInLeft - sumOutRight;\n\n        }\n        if (nodeInRight && !nextLeft(nodeOutLeft)) {\n            nodeOutLeft.hierNode.thread = nodeInRight;\n            nodeOutLeft.hierNode.modifier += sumInRight - sumOutLeft;\n            ancestor = subtreeV;\n        }\n    }\n    return ancestor;\n}\n\n/**\n * This function is used to traverse the right contour of a subtree.\n * It returns the rightmost child of node or the thread of node. The function\n * returns null if and only if node is on the highest depth of its subtree.\n *\n * @param  {module:echarts/data/Tree~TreeNode} node\n * @return {module:echarts/data/Tree~TreeNode}\n */\nfunction nextRight(node) {\n    var children = node.children;\n    return children.length && node.isExpand ? children[children.length - 1] : node.hierNode.thread;\n}\n\n/**\n * This function is used to traverse the left contour of a subtree (or a subforest).\n * It returns the leftmost child of node or the thread of node. The function\n * returns null if and only if node is on the highest depth of its subtree.\n *\n * @param  {module:echarts/data/Tree~TreeNode} node\n * @return {module:echarts/data/Tree~TreeNode}\n */\nfunction nextLeft(node) {\n    var children = node.children;\n    return children.length && node.isExpand ? children[0] : node.hierNode.thread;\n}\n\n/**\n * If nodeInLeft’s ancestor is a sibling of node, returns nodeInLeft’s ancestor.\n * Otherwise, returns the specified ancestor.\n *\n * @param  {module:echarts/data/Tree~TreeNode} nodeInLeft\n * @param  {module:echarts/data/Tree~TreeNode} node\n * @param  {module:echarts/data/Tree~TreeNode} ancestor\n * @return {module:echarts/data/Tree~TreeNode}\n */\nfunction nextAncestor(nodeInLeft, node, ancestor) {\n    return nodeInLeft.hierNode.ancestor.parentNode === node.parentNode\n        ? nodeInLeft.hierNode.ancestor : ancestor;\n}\n\n/**\n * The implementation of this function was originally copied from \"d3.js\"\n * <https://github.com/d3/d3-hierarchy/blob/4c1f038f2725d6eae2e49b61d01456400694bac4/src/tree.js>\n * with some modifications made for this program.\n * See the license statement at the head of this file.\n *\n * Shifts the current subtree rooted at wr.\n * This is done by increasing prelim(w+) and modifier(w+) by shift.\n *\n * @param  {module:echarts/data/Tree~TreeNode} wl\n * @param  {module:echarts/data/Tree~TreeNode} wr\n * @param  {number} shift [description]\n */\nfunction moveSubtree(wl, wr, shift) {\n    var change = shift / (wr.hierNode.i - wl.hierNode.i);\n    wr.hierNode.change -= change;\n    wr.hierNode.shift += shift;\n    wr.hierNode.modifier += shift;\n    wr.hierNode.prelim += shift;\n    wl.hierNode.change += change;\n}\n\n/**\n * The implementation of this function was originally copied from \"d3.js\"\n * <https://github.com/d3/d3-hierarchy/blob/4c1f038f2725d6eae2e49b61d01456400694bac4/src/tree.js>\n * with some modifications made for this program.\n * See the license statement at the head of this file.\n */\nfunction defaultSeparation(node1, node2) {\n    return node1.parentNode === node2.parentNode ? 1 : 2;\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nextendChartView({\n\n    type: 'tree',\n\n    /**\n     * Init the chart\n     * @override\n     * @param  {module:echarts/model/Global} ecModel\n     * @param  {module:echarts/ExtensionAPI} api\n     */\n    init: function (ecModel, api) {\n\n        /**\n         * @private\n         * @type {module:echarts/data/Tree}\n         */\n        this._oldTree;\n\n        /**\n         * @private\n         * @type {module:zrender/container/Group}\n         */\n        this._mainGroup = new Group();\n\n        /**\n         * @private\n         * @type {module:echarts/componet/helper/RoamController}\n         */\n        this._controller = new RoamController(api.getZr());\n\n        this._controllerHost = {target: this.group};\n\n        this.group.add(this._mainGroup);\n    },\n\n    render: function (seriesModel, ecModel, api, payload) {\n        var data = seriesModel.getData();\n\n        var layoutInfo = seriesModel.layoutInfo;\n\n        var group = this._mainGroup;\n\n        var layout = seriesModel.get('layout');\n\n        if (layout === 'radial') {\n            group.attr('position', [layoutInfo.x + layoutInfo.width / 2, layoutInfo.y + layoutInfo.height / 2]);\n        }\n        else {\n            group.attr('position', [layoutInfo.x, layoutInfo.y]);\n        }\n\n        this._updateViewCoordSys(seriesModel);\n        this._updateController(seriesModel, ecModel, api);\n\n        var oldData = this._data;\n\n        var seriesScope = {\n            expandAndCollapse: seriesModel.get('expandAndCollapse'),\n            layout: layout,\n            orient: seriesModel.getOrient(),\n            curvature: seriesModel.get('lineStyle.curveness'),\n            symbolRotate: seriesModel.get('symbolRotate'),\n            symbolOffset: seriesModel.get('symbolOffset'),\n            hoverAnimation: seriesModel.get('hoverAnimation'),\n            useNameLabel: true,\n            fadeIn: true\n        };\n\n        data.diff(oldData)\n            .add(function (newIdx) {\n                if (symbolNeedsDraw$1(data, newIdx)) {\n                    // Create node and edge\n                    updateNode(data, newIdx, null, group, seriesModel, seriesScope);\n                }\n            })\n            .update(function (newIdx, oldIdx) {\n                var symbolEl = oldData.getItemGraphicEl(oldIdx);\n                if (!symbolNeedsDraw$1(data, newIdx)) {\n                    symbolEl && removeNode(oldData, oldIdx, symbolEl, group, seriesModel, seriesScope);\n                    return;\n                }\n                // Update node and edge\n                updateNode(data, newIdx, symbolEl, group, seriesModel, seriesScope);\n            })\n            .remove(function (oldIdx) {\n                var symbolEl = oldData.getItemGraphicEl(oldIdx);\n                // When remove a collapsed node of subtree, since the collapsed\n                // node haven't been initialized with a symbol element,\n                // you can't found it's symbol element through index.\n                // so if we want to remove the symbol element we should insure\n                // that the symbol element is not null.\n                if (symbolEl) {\n                    removeNode(oldData, oldIdx, symbolEl, group, seriesModel, seriesScope);\n                }\n            })\n            .execute();\n\n        this._nodeScaleRatio = seriesModel.get('nodeScaleRatio');\n\n        this._updateNodeAndLinkScale(seriesModel);\n\n        if (seriesScope.expandAndCollapse === true) {\n            data.eachItemGraphicEl(function (el, dataIndex) {\n                el.off('click').on('click', function () {\n                    api.dispatchAction({\n                        type: 'treeExpandAndCollapse',\n                        seriesId: seriesModel.id,\n                        dataIndex: dataIndex\n                    });\n                });\n            });\n        }\n        this._data = data;\n    },\n\n    _updateViewCoordSys: function (seriesModel) {\n        var data = seriesModel.getData();\n        var points = [];\n        data.each(function (idx) {\n            var layout = data.getItemLayout(idx);\n            if (layout && !isNaN(layout.x) && !isNaN(layout.y)) {\n                points.push([+layout.x, +layout.y]);\n            }\n        });\n        var min = [];\n        var max = [];\n        fromPoints(points, min, max);\n        // If width or height is 0\n        if (max[0] - min[0] === 0) {\n            max[0] += 1;\n            min[0] -= 1;\n        }\n        if (max[1] - min[1] === 0) {\n            max[1] += 1;\n            min[1] -= 1;\n        }\n\n        var viewCoordSys = seriesModel.coordinateSystem = new View();\n        viewCoordSys.zoomLimit = seriesModel.get('scaleLimit');\n\n        viewCoordSys.setBoundingRect(min[0], min[1], max[0] - min[0], max[1] - min[1]);\n\n        viewCoordSys.setCenter(seriesModel.get('center'));\n        viewCoordSys.setZoom(seriesModel.get('zoom'));\n\n        // Here we use viewCoordSys just for computing the 'position' and 'scale' of the group\n        this.group.attr({\n            position: viewCoordSys.position,\n            scale: viewCoordSys.scale\n        });\n\n        this._viewCoordSys = viewCoordSys;\n    },\n\n    _updateController: function (seriesModel, ecModel, api) {\n        var controller = this._controller;\n        var controllerHost = this._controllerHost;\n        var group = this.group;\n        controller.setPointerChecker(function (e, x, y) {\n            var rect = group.getBoundingRect();\n            rect.applyTransform(group.transform);\n            return rect.contain(x, y)\n                && !onIrrelevantElement(e, api, seriesModel);\n        });\n\n        controller.enable(seriesModel.get('roam'));\n        controllerHost.zoomLimit = seriesModel.get('scaleLimit');\n        controllerHost.zoom = seriesModel.coordinateSystem.getZoom();\n\n        controller\n            .off('pan')\n            .off('zoom')\n            .on('pan', function (e) {\n                updateViewOnPan(controllerHost, e.dx, e.dy);\n                api.dispatchAction({\n                    seriesId: seriesModel.id,\n                    type: 'treeRoam',\n                    dx: e.dx,\n                    dy: e.dy\n                });\n            }, this)\n            .on('zoom', function (e) {\n                updateViewOnZoom(controllerHost, e.scale, e.originX, e.originY);\n                api.dispatchAction({\n                    seriesId: seriesModel.id,\n                    type: 'treeRoam',\n                    zoom: e.scale,\n                    originX: e.originX,\n                    originY: e.originY\n                });\n                this._updateNodeAndLinkScale(seriesModel);\n            }, this);\n    },\n\n    _updateNodeAndLinkScale: function (seriesModel) {\n        var data = seriesModel.getData();\n\n        var nodeScale = this._getNodeGlobalScale(seriesModel);\n        var invScale = [nodeScale, nodeScale];\n\n        data.eachItemGraphicEl(function (el, idx) {\n            el.attr('scale', invScale);\n        });\n    },\n\n    _getNodeGlobalScale: function (seriesModel) {\n        var coordSys = seriesModel.coordinateSystem;\n        if (coordSys.type !== 'view') {\n            return 1;\n        }\n\n        var nodeScaleRatio = this._nodeScaleRatio;\n\n        var groupScale = coordSys.scale;\n        var groupZoom = (groupScale && groupScale[0]) || 1;\n        // Scale node when zoom changes\n        var roamZoom = coordSys.getZoom();\n        var nodeScale = (roamZoom - 1) * nodeScaleRatio + 1;\n\n        return nodeScale / groupZoom;\n    },\n\n    dispose: function () {\n        this._controller && this._controller.dispose();\n        this._controllerHost = {};\n    },\n\n    remove: function () {\n        this._mainGroup.removeAll();\n        this._data = null;\n    }\n\n});\n\nfunction symbolNeedsDraw$1(data, dataIndex) {\n    var layout = data.getItemLayout(dataIndex);\n\n    return layout\n        && !isNaN(layout.x) && !isNaN(layout.y)\n        && data.getItemVisual(dataIndex, 'symbol') !== 'none';\n}\n\nfunction getTreeNodeStyle(node, itemModel, seriesScope) {\n    seriesScope.itemModel = itemModel;\n    seriesScope.itemStyle = itemModel.getModel('itemStyle').getItemStyle();\n    seriesScope.hoverItemStyle = itemModel.getModel('emphasis.itemStyle').getItemStyle();\n    seriesScope.lineStyle = itemModel.getModel('lineStyle').getLineStyle();\n    seriesScope.labelModel = itemModel.getModel('label');\n    seriesScope.hoverLabelModel = itemModel.getModel('emphasis.label');\n\n    if (node.isExpand === false && node.children.length !== 0) {\n        seriesScope.symbolInnerColor = seriesScope.itemStyle.fill;\n    }\n    else {\n        seriesScope.symbolInnerColor = '#fff';\n    }\n\n    return seriesScope;\n}\n\nfunction updateNode(data, dataIndex, symbolEl, group, seriesModel, seriesScope) {\n    var isInit = !symbolEl;\n    var node = data.tree.getNodeByDataIndex(dataIndex);\n    var itemModel = node.getModel();\n    var seriesScope = getTreeNodeStyle(node, itemModel, seriesScope);\n    var virtualRoot = data.tree.root;\n\n    var source = node.parentNode === virtualRoot ? node : node.parentNode || node;\n    var sourceSymbolEl = data.getItemGraphicEl(source.dataIndex);\n    var sourceLayout = source.getLayout();\n    var sourceOldLayout = sourceSymbolEl\n        ? {\n            x: sourceSymbolEl.position[0],\n            y: sourceSymbolEl.position[1],\n            rawX: sourceSymbolEl.__radialOldRawX,\n            rawY: sourceSymbolEl.__radialOldRawY\n        }\n        : sourceLayout;\n    var targetLayout = node.getLayout();\n\n    if (isInit) {\n        symbolEl = new SymbolClz$1(data, dataIndex, seriesScope);\n        symbolEl.attr('position', [sourceOldLayout.x, sourceOldLayout.y]);\n    }\n    else {\n        symbolEl.updateData(data, dataIndex, seriesScope);\n    }\n\n    symbolEl.__radialOldRawX = symbolEl.__radialRawX;\n    symbolEl.__radialOldRawY = symbolEl.__radialRawY;\n    symbolEl.__radialRawX = targetLayout.rawX;\n    symbolEl.__radialRawY = targetLayout.rawY;\n\n    group.add(symbolEl);\n    data.setItemGraphicEl(dataIndex, symbolEl);\n    updateProps(symbolEl, {\n        position: [targetLayout.x, targetLayout.y]\n    }, seriesModel);\n\n    var symbolPath = symbolEl.getSymbolPath();\n\n    if (seriesScope.layout === 'radial') {\n        var realRoot = virtualRoot.children[0];\n        var rootLayout = realRoot.getLayout();\n        var length = realRoot.children.length;\n        var rad;\n        var isLeft;\n\n        if (targetLayout.x === rootLayout.x && node.isExpand === true) {\n            var center = {};\n            center.x = (realRoot.children[0].getLayout().x + realRoot.children[length - 1].getLayout().x) / 2;\n            center.y = (realRoot.children[0].getLayout().y + realRoot.children[length - 1].getLayout().y) / 2;\n            rad = Math.atan2(center.y - rootLayout.y, center.x - rootLayout.x);\n            if (rad < 0) {\n                rad = Math.PI * 2 + rad;\n            }\n            isLeft = center.x < rootLayout.x;\n            if (isLeft) {\n                rad = rad - Math.PI;\n            }\n        }\n        else {\n            rad = Math.atan2(targetLayout.y - rootLayout.y, targetLayout.x - rootLayout.x);\n            if (rad < 0) {\n                rad = Math.PI * 2 + rad;\n            }\n            if (node.children.length === 0 || (node.children.length !== 0 && node.isExpand === false)) {\n                isLeft = targetLayout.x < rootLayout.x;\n                if (isLeft) {\n                    rad = rad - Math.PI;\n                }\n            }\n            else {\n                isLeft = targetLayout.x > rootLayout.x;\n                if (!isLeft) {\n                    rad = rad - Math.PI;\n                }\n            }\n        }\n\n        var textPosition = isLeft ? 'left' : 'right';\n        symbolPath.setStyle({\n            textPosition: textPosition,\n            textRotation: -rad,\n            textOrigin: 'center',\n            verticalAlign: 'middle'\n        });\n    }\n\n    if (node.parentNode && node.parentNode !== virtualRoot) {\n        var edge = symbolEl.__edge;\n        if (!edge) {\n            edge = symbolEl.__edge = new BezierCurve({\n                shape: getEdgeShape(seriesScope, sourceOldLayout, sourceOldLayout),\n                style: defaults({opacity: 0, strokeNoScale: true}, seriesScope.lineStyle)\n            });\n        }\n\n        updateProps(edge, {\n            shape: getEdgeShape(seriesScope, sourceLayout, targetLayout),\n            style: {opacity: 1}\n        }, seriesModel);\n\n        group.add(edge);\n    }\n}\n\nfunction removeNode(data, dataIndex, symbolEl, group, seriesModel, seriesScope) {\n    var node = data.tree.getNodeByDataIndex(dataIndex);\n    var virtualRoot = data.tree.root;\n    var itemModel = node.getModel();\n    var seriesScope = getTreeNodeStyle(node, itemModel, seriesScope);\n\n    var source = node.parentNode === virtualRoot ? node : node.parentNode || node;\n    var sourceLayout;\n    while (sourceLayout = source.getLayout(), sourceLayout == null) {\n        source = source.parentNode === virtualRoot ? source : source.parentNode || source;\n    }\n\n    updateProps(symbolEl, {\n        position: [sourceLayout.x + 1, sourceLayout.y + 1]\n    }, seriesModel, function () {\n        group.remove(symbolEl);\n        data.setItemGraphicEl(dataIndex, null);\n    });\n\n    symbolEl.fadeOut(null, {keepLabel: true});\n\n    var edge = symbolEl.__edge;\n    if (edge) {\n        updateProps(edge, {\n            shape: getEdgeShape(seriesScope, sourceLayout, sourceLayout),\n            style: {\n                opacity: 0\n            }\n        }, seriesModel, function () {\n            group.remove(edge);\n        });\n    }\n}\n\nfunction getEdgeShape(seriesScope, sourceLayout, targetLayout) {\n    var cpx1;\n    var cpy1;\n    var cpx2;\n    var cpy2;\n    var orient = seriesScope.orient;\n    var x1;\n    var x2;\n    var y1;\n    var y2;\n\n    if (seriesScope.layout === 'radial') {\n        x1 = sourceLayout.rawX;\n        y1 = sourceLayout.rawY;\n        x2 = targetLayout.rawX;\n        y2 = targetLayout.rawY;\n\n        var radialCoor1 = radialCoordinate(x1, y1);\n        var radialCoor2 = radialCoordinate(x1, y1 + (y2 - y1) * seriesScope.curvature);\n        var radialCoor3 = radialCoordinate(x2, y2 + (y1 - y2) * seriesScope.curvature);\n        var radialCoor4 = radialCoordinate(x2, y2);\n\n        return {\n            x1: radialCoor1.x,\n            y1: radialCoor1.y,\n            x2: radialCoor4.x,\n            y2: radialCoor4.y,\n            cpx1: radialCoor2.x,\n            cpy1: radialCoor2.y,\n            cpx2: radialCoor3.x,\n            cpy2: radialCoor3.y\n        };\n    }\n    else {\n        x1 = sourceLayout.x;\n        y1 = sourceLayout.y;\n        x2 = targetLayout.x;\n        y2 = targetLayout.y;\n\n        if (orient === 'LR' || orient === 'RL') {\n            cpx1 = x1 + (x2 - x1) * seriesScope.curvature;\n            cpy1 = y1;\n            cpx2 = x2 + (x1 - x2) * seriesScope.curvature;\n            cpy2 = y2;\n        }\n        if (orient === 'TB' || orient === 'BT') {\n            cpx1 = x1;\n            cpy1 = y1 + (y2 - y1) * seriesScope.curvature;\n            cpx2 = x2;\n            cpy2 = y2 + (y1 - y2) * seriesScope.curvature;\n        }\n    }\n\n    return {\n        x1: x1,\n        y1: y1,\n        x2: x2,\n        y2: y2,\n        cpx1: cpx1,\n        cpy1: cpy1,\n        cpx2: cpx2,\n        cpy2: cpy2\n    };\n\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nregisterAction({\n    type: 'treeExpandAndCollapse',\n    event: 'treeExpandAndCollapse',\n    update: 'update'\n}, function (payload, ecModel) {\n    ecModel.eachComponent({mainType: 'series', subType: 'tree', query: payload}, function (seriesModel) {\n        var dataIndex = payload.dataIndex;\n        var tree = seriesModel.getData().tree;\n        var node = tree.getNodeByDataIndex(dataIndex);\n        node.isExpand = !node.isExpand;\n\n    });\n});\n\nregisterAction({\n    type: 'treeRoam',\n    event: 'treeRoam',\n    // Here we set 'none' instead of 'update', because roam action\n    // just need to update the transform matrix without having to recalculate\n    // the layout. So don't need to go through the whole update process, such\n    // as 'dataPrcocess', 'coordSystemUpdate', 'layout' and so on.\n    update: 'none'\n}, function (payload, ecModel) {\n    ecModel.eachComponent({mainType: 'series', subType: 'tree', query: payload}, function (seriesModel) {\n        var coordSys = seriesModel.coordinateSystem;\n        var res = updateCenterAndZoom(coordSys, payload);\n\n        seriesModel.setCenter\n            && seriesModel.setCenter(res.center);\n\n        seriesModel.setZoom\n            && seriesModel.setZoom(res.zoom);\n    });\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n/**\n * Traverse the tree from bottom to top and do something\n * @param  {module:echarts/data/Tree~TreeNode} root  The real root of the tree\n * @param  {Function} callback\n */\nfunction eachAfter(root, callback, separation) {\n    var nodes = [root];\n    var next = [];\n    var node;\n\n    while (node = nodes.pop()) { // jshint ignore:line\n        next.push(node);\n        if (node.isExpand) {\n            var children = node.children;\n            if (children.length) {\n                for (var i = 0; i < children.length; i++) {\n                    nodes.push(children[i]);\n                }\n            }\n        }\n    }\n\n    while (node = next.pop()) { // jshint ignore:line\n        callback(node, separation);\n    }\n}\n\n/**\n * Traverse the tree from top to bottom and do something\n * @param  {module:echarts/data/Tree~TreeNode} root  The real root of the tree\n * @param  {Function} callback\n */\nfunction eachBefore(root, callback) {\n    var nodes = [root];\n    var node;\n    while (node = nodes.pop()) { // jshint ignore:line\n        callback(node);\n        if (node.isExpand) {\n            var children = node.children;\n            if (children.length) {\n                for (var i = children.length - 1; i >= 0; i--) {\n                    nodes.push(children[i]);\n                }\n            }\n        }\n    }\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar treeLayout = function (ecModel, api) {\n    ecModel.eachSeriesByType('tree', function (seriesModel) {\n        commonLayout(seriesModel, api);\n    });\n};\n\nfunction commonLayout(seriesModel, api) {\n    var layoutInfo = getViewRect(seriesModel, api);\n    seriesModel.layoutInfo = layoutInfo;\n    var layout = seriesModel.get('layout');\n    var width = 0;\n    var height = 0;\n    var separation$$1 = null;\n\n    if (layout === 'radial') {\n        width = 2 * Math.PI;\n        height = Math.min(layoutInfo.height, layoutInfo.width) / 2;\n        separation$$1 = separation(function (node1, node2) {\n            return (node1.parentNode === node2.parentNode ? 1 : 2) / node1.depth;\n        });\n    }\n    else {\n        width = layoutInfo.width;\n        height = layoutInfo.height;\n        separation$$1 = separation();\n    }\n\n    var virtualRoot = seriesModel.getData().tree.root;\n    var realRoot = virtualRoot.children[0];\n\n    if (realRoot) {\n        init$2(virtualRoot);\n        eachAfter(realRoot, firstWalk, separation$$1);\n        virtualRoot.hierNode.modifier = -realRoot.hierNode.prelim;\n        eachBefore(realRoot, secondWalk);\n\n        var left = realRoot;\n        var right = realRoot;\n        var bottom = realRoot;\n        eachBefore(realRoot, function (node) {\n            var x = node.getLayout().x;\n            if (x < left.getLayout().x) {\n                left = node;\n            }\n            if (x > right.getLayout().x) {\n                right = node;\n            }\n            if (node.depth > bottom.depth) {\n                bottom = node;\n            }\n        });\n\n        var delta = left === right ? 1 : separation$$1(left, right) / 2;\n        var tx = delta - left.getLayout().x;\n        var kx = 0;\n        var ky = 0;\n        var coorX = 0;\n        var coorY = 0;\n        if (layout === 'radial') {\n            kx = width / (right.getLayout().x + delta + tx);\n            // here we use (node.depth - 1), bucause the real root's depth is 1\n            ky = height / ((bottom.depth - 1) || 1);\n            eachBefore(realRoot, function (node) {\n                coorX = (node.getLayout().x + tx) * kx;\n                coorY = (node.depth - 1) * ky;\n                var finalCoor = radialCoordinate(coorX, coorY);\n                node.setLayout({x: finalCoor.x, y: finalCoor.y, rawX: coorX, rawY: coorY}, true);\n            });\n        }\n        else {\n            var orient = seriesModel.getOrient();\n            if (orient === 'RL' || orient === 'LR') {\n                ky = height / (right.getLayout().x + delta + tx);\n                kx = width / ((bottom.depth - 1) || 1);\n                eachBefore(realRoot, function (node) {\n                    coorY = (node.getLayout().x + tx) * ky;\n                    coorX = orient === 'LR'\n                        ? (node.depth - 1) * kx\n                        : width - (node.depth - 1) * kx;\n                    node.setLayout({x: coorX, y: coorY}, true);\n                });\n            }\n            else if (orient === 'TB' || orient === 'BT') {\n                kx = width / (right.getLayout().x + delta + tx);\n                ky = height / ((bottom.depth - 1) || 1);\n                eachBefore(realRoot, function (node) {\n                    coorX = (node.getLayout().x + tx) * kx;\n                    coorY = orient === 'TB'\n                        ? (node.depth - 1) * ky\n                        : height - (node.depth - 1) * ky;\n                    node.setLayout({x: coorX, y: coorY}, true);\n                });\n            }\n        }\n    }\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nregisterVisual(visualSymbol('tree', 'circle'));\nregisterLayout(treeLayout);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nfunction retrieveTargetInfo(payload, validPayloadTypes, seriesModel) {\n    if (payload && indexOf(validPayloadTypes, payload.type) >= 0) {\n        var root = seriesModel.getData().tree.root;\n        var targetNode = payload.targetNode;\n\n        if (typeof targetNode === 'string') {\n            targetNode = root.getNodeById(targetNode);\n        }\n\n        if (targetNode && root.contains(targetNode)) {\n            return {node: targetNode};\n        }\n\n        var targetNodeId = payload.targetNodeId;\n        if (targetNodeId != null && (targetNode = root.getNodeById(targetNodeId))) {\n            return {node: targetNode};\n        }\n    }\n}\n\n// Not includes the given node at the last item.\nfunction getPathToRoot(node) {\n    var path = [];\n    while (node) {\n        node = node.parentNode;\n        node && path.push(node);\n    }\n    return path.reverse();\n}\n\nfunction aboveViewRoot(viewRoot, node) {\n    var viewPath = getPathToRoot(viewRoot);\n    return indexOf(viewPath, node) >= 0;\n}\n\n// From root to the input node (the input node will be included).\nfunction wrapTreePathInfo(node, seriesModel) {\n    var treePathInfo = [];\n\n    while (node) {\n        var nodeDataIndex = node.dataIndex;\n        treePathInfo.push({\n            name: node.name,\n            dataIndex: nodeDataIndex,\n            value: seriesModel.getRawValue(nodeDataIndex)\n        });\n        node = node.parentNode;\n    }\n\n    treePathInfo.reverse();\n\n    return treePathInfo;\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nSeriesModel.extend({\n\n    type: 'series.treemap',\n\n    layoutMode: 'box',\n\n    dependencies: ['grid', 'polar'],\n\n    preventUsingHoverLayer: true,\n\n    /**\n     * @type {module:echarts/data/Tree~Node}\n     */\n    _viewRoot: null,\n\n    defaultOption: {\n        // Disable progressive rendering\n        progressive: 0,\n        // center: ['50%', '50%'],          // not supported in ec3.\n        // size: ['80%', '80%'],            // deprecated, compatible with ec2.\n        left: 'center',\n        top: 'middle',\n        right: null,\n        bottom: null,\n        width: '80%',\n        height: '80%',\n        sort: true,                         // Can be null or false or true\n                                            // (order by desc default, asc not supported yet (strange effect))\n        clipWindow: 'origin',               // Size of clipped window when zooming. 'origin' or 'fullscreen'\n        squareRatio: 0.5 * (1 + Math.sqrt(5)), // golden ratio\n        leafDepth: null,                    // Nodes on depth from root are regarded as leaves.\n                                            // Count from zero (zero represents only view root).\n        drillDownIcon: '▶',                 // Use html character temporarily because it is complicated\n                                            // to align specialized icon. ▷▶❒❐▼✚\n\n        zoomToNodeRatio: 0.32 * 0.32,       // Be effective when using zoomToNode. Specify the proportion of the\n                                            // target node area in the view area.\n        roam: true,                         // true, false, 'scale' or 'zoom', 'move'.\n        nodeClick: 'zoomToNode',            // Leaf node click behaviour: 'zoomToNode', 'link', false.\n                                            // If leafDepth is set and clicking a node which has children but\n                                            // be on left depth, the behaviour would be changing root. Otherwise\n                                            // use behavious defined above.\n        animation: true,\n        animationDurationUpdate: 900,\n        animationEasing: 'quinticInOut',\n        breadcrumb: {\n            show: true,\n            height: 22,\n            left: 'center',\n            top: 'bottom',\n            // right\n            // bottom\n            emptyItemWidth: 25,             // Width of empty node.\n            itemStyle: {\n                color: 'rgba(0,0,0,0.7)', //'#5793f3',\n                borderColor: 'rgba(255,255,255,0.7)',\n                borderWidth: 1,\n                shadowColor: 'rgba(150,150,150,1)',\n                shadowBlur: 3,\n                shadowOffsetX: 0,\n                shadowOffsetY: 0,\n                textStyle: {\n                    color: '#fff'\n                }\n            },\n            emphasis: {\n                textStyle: {}\n            }\n        },\n        label: {\n            show: true,\n            // Do not use textDistance, for ellipsis rect just the same as treemap node rect.\n            distance: 0,\n            padding: 5,\n            position: 'inside', // Can be [5, '5%'] or position stirng like 'insideTopLeft', ...\n            // formatter: null,\n            color: '#fff',\n            ellipsis: true\n            // align\n            // verticalAlign\n        },\n        upperLabel: {                   // Label when node is parent.\n            show: false,\n            position: [0, '50%'],\n            height: 20,\n            // formatter: null,\n            color: '#fff',\n            ellipsis: true,\n            // align: null,\n            verticalAlign: 'middle'\n        },\n        itemStyle: {\n            color: null,            // Can be 'none' if not necessary.\n            colorAlpha: null,       // Can be 'none' if not necessary.\n            colorSaturation: null,  // Can be 'none' if not necessary.\n            borderWidth: 0,\n            gapWidth: 0,\n            borderColor: '#fff',\n            borderColorSaturation: null // If specified, borderColor will be ineffective, and the\n                                        // border color is evaluated by color of current node and\n                                        // borderColorSaturation.\n        },\n        emphasis: {\n            upperLabel: {\n                show: true,\n                position: [0, '50%'],\n                color: '#fff',\n                ellipsis: true,\n                verticalAlign: 'middle'\n            }\n        },\n\n        visualDimension: 0,                 // Can be 0, 1, 2, 3.\n        visualMin: null,\n        visualMax: null,\n\n        color: [],                  // + treemapSeries.color should not be modified. Please only modified\n                                    // level[n].color (if necessary).\n                                    // + Specify color list of each level. level[0].color would be global\n                                    // color list if not specified. (see method `setDefault`).\n                                    // + But set as a empty array to forbid fetch color from global palette\n                                    // when using nodeModel.get('color'), otherwise nodes on deep level\n                                    // will always has color palette set and are not able to inherit color\n                                    // from parent node.\n                                    // + TreemapSeries.color can not be set as 'none', otherwise effect\n                                    // legend color fetching (see seriesColor.js).\n        colorAlpha: null,           // Array. Specify color alpha range of each level, like [0.2, 0.8]\n        colorSaturation: null,      // Array. Specify color saturation of each level, like [0.2, 0.5]\n        colorMappingBy: 'index',    // 'value' or 'index' or 'id'.\n        visibleMin: 10,             // If area less than this threshold (unit: pixel^2), node will not\n                                    // be rendered. Only works when sort is 'asc' or 'desc'.\n        childrenVisibleMin: null,   // If area of a node less than this threshold (unit: pixel^2),\n                                    // grandchildren will not show.\n                                    // Why grandchildren? If not grandchildren but children,\n                                    // some siblings show children and some not,\n                                    // the appearance may be mess and not consistent,\n        levels: []                  // Each item: {\n                                    //     visibleMin, itemStyle, visualDimension, label\n                                    // }\n        // data: {\n        //      value: [],\n        //      children: [],\n        //      link: 'http://xxx.xxx.xxx',\n        //      target: 'blank' or 'self'\n        // }\n    },\n\n    /**\n     * @override\n     */\n    getInitialData: function (option, ecModel) {\n        // Create a virtual root.\n        var root = {name: option.name, children: option.data};\n\n        completeTreeValue(root);\n\n        var levels = option.levels || [];\n\n        levels = option.levels = setDefault(levels, ecModel);\n\n        var treeOption = {};\n\n        treeOption.levels = levels;\n\n        // Make sure always a new tree is created when setOption,\n        // in TreemapView, we check whether oldTree === newTree\n        // to choose mappings approach among old shapes and new shapes.\n        return Tree.createTree(root, this, treeOption).data;\n    },\n\n    optionUpdated: function () {\n        this.resetViewRoot();\n    },\n\n    /**\n     * @override\n     * @param {number} dataIndex\n     * @param {boolean} [mutipleSeries=false]\n     */\n    formatTooltip: function (dataIndex) {\n        var data = this.getData();\n        var value = this.getRawValue(dataIndex);\n        var formattedValue = isArray(value)\n            ? addCommas(value[0]) : addCommas(value);\n        var name = data.getName(dataIndex);\n\n        return encodeHTML(name + ': ' + formattedValue);\n    },\n\n    /**\n     * Add tree path to tooltip param\n     *\n     * @override\n     * @param {number} dataIndex\n     * @return {Object}\n     */\n    getDataParams: function (dataIndex) {\n        var params = SeriesModel.prototype.getDataParams.apply(this, arguments);\n\n        var node = this.getData().tree.getNodeByDataIndex(dataIndex);\n        params.treePathInfo = wrapTreePathInfo(node, this);\n\n        return params;\n    },\n\n    /**\n     * @public\n     * @param {Object} layoutInfo {\n     *                                x: containerGroup x\n     *                                y: containerGroup y\n     *                                width: containerGroup width\n     *                                height: containerGroup height\n     *                            }\n     */\n    setLayoutInfo: function (layoutInfo) {\n        /**\n         * @readOnly\n         * @type {Object}\n         */\n        this.layoutInfo = this.layoutInfo || {};\n        extend(this.layoutInfo, layoutInfo);\n    },\n\n    /**\n     * @param  {string} id\n     * @return {number} index\n     */\n    mapIdToIndex: function (id) {\n        // A feature is implemented:\n        // index is monotone increasing with the sequence of\n        // input id at the first time.\n        // This feature can make sure that each data item and its\n        // mapped color have the same index between data list and\n        // color list at the beginning, which is useful for user\n        // to adjust data-color mapping.\n\n        /**\n         * @private\n         * @type {Object}\n         */\n        var idIndexMap = this._idIndexMap;\n\n        if (!idIndexMap) {\n            idIndexMap = this._idIndexMap = createHashMap();\n            /**\n             * @private\n             * @type {number}\n             */\n            this._idIndexMapCount = 0;\n        }\n\n        var index = idIndexMap.get(id);\n        if (index == null) {\n            idIndexMap.set(id, index = this._idIndexMapCount++);\n        }\n\n        return index;\n    },\n\n    getViewRoot: function () {\n        return this._viewRoot;\n    },\n\n    /**\n     * @param {module:echarts/data/Tree~Node} [viewRoot]\n     */\n    resetViewRoot: function (viewRoot) {\n        viewRoot\n            ? (this._viewRoot = viewRoot)\n            : (viewRoot = this._viewRoot);\n\n        var root = this.getRawData().tree.root;\n\n        if (!viewRoot\n            || (viewRoot !== root && !root.contains(viewRoot))\n        ) {\n            this._viewRoot = root;\n        }\n    }\n});\n\n/**\n * @param {Object} dataNode\n */\nfunction completeTreeValue(dataNode) {\n    // Postorder travel tree.\n    // If value of none-leaf node is not set,\n    // calculate it by suming up the value of all children.\n    var sum = 0;\n\n    each$1(dataNode.children, function (child) {\n\n        completeTreeValue(child);\n\n        var childValue = child.value;\n        isArray(childValue) && (childValue = childValue[0]);\n\n        sum += childValue;\n    });\n\n    var thisValue = dataNode.value;\n    if (isArray(thisValue)) {\n        thisValue = thisValue[0];\n    }\n\n    if (thisValue == null || isNaN(thisValue)) {\n        thisValue = sum;\n    }\n    // Value should not less than 0.\n    if (thisValue < 0) {\n        thisValue = 0;\n    }\n\n    isArray(dataNode.value)\n        ? (dataNode.value[0] = thisValue)\n        : (dataNode.value = thisValue);\n}\n\n/**\n * set default to level configuration\n */\nfunction setDefault(levels, ecModel) {\n    var globalColorList = ecModel.get('color');\n\n    if (!globalColorList) {\n        return;\n    }\n\n    levels = levels || [];\n    var hasColorDefine;\n    each$1(levels, function (levelDefine) {\n        var model = new Model(levelDefine);\n        var modelColor = model.get('color');\n\n        if (model.get('itemStyle.color')\n            || (modelColor && modelColor !== 'none')\n        ) {\n            hasColorDefine = true;\n        }\n    });\n\n    if (!hasColorDefine) {\n        var level0 = levels[0] || (levels[0] = {});\n        level0.color = globalColorList.slice();\n    }\n\n    return levels;\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar TEXT_PADDING = 8;\nvar ITEM_GAP = 8;\nvar ARRAY_LENGTH = 5;\n\nfunction Breadcrumb(containerGroup) {\n    /**\n     * @private\n     * @type {module:zrender/container/Group}\n     */\n    this.group = new Group();\n\n    containerGroup.add(this.group);\n}\n\nBreadcrumb.prototype = {\n\n    constructor: Breadcrumb,\n\n    render: function (seriesModel, api, targetNode, onSelect) {\n        var model = seriesModel.getModel('breadcrumb');\n        var thisGroup = this.group;\n\n        thisGroup.removeAll();\n\n        if (!model.get('show') || !targetNode) {\n            return;\n        }\n\n        var normalStyleModel = model.getModel('itemStyle');\n        // var emphasisStyleModel = model.getModel('emphasis.itemStyle');\n        var textStyleModel = normalStyleModel.getModel('textStyle');\n\n        var layoutParam = {\n            pos: {\n                left: model.get('left'),\n                right: model.get('right'),\n                top: model.get('top'),\n                bottom: model.get('bottom')\n            },\n            box: {\n                width: api.getWidth(),\n                height: api.getHeight()\n            },\n            emptyItemWidth: model.get('emptyItemWidth'),\n            totalWidth: 0,\n            renderList: []\n        };\n\n        this._prepare(targetNode, layoutParam, textStyleModel);\n        this._renderContent(seriesModel, layoutParam, normalStyleModel, textStyleModel, onSelect);\n\n        positionElement(thisGroup, layoutParam.pos, layoutParam.box);\n    },\n\n    /**\n     * Prepare render list and total width\n     * @private\n     */\n    _prepare: function (targetNode, layoutParam, textStyleModel) {\n        for (var node = targetNode; node; node = node.parentNode) {\n            var text = node.getModel().get('name');\n            var textRect = textStyleModel.getTextRect(text);\n            var itemWidth = Math.max(\n                textRect.width + TEXT_PADDING * 2,\n                layoutParam.emptyItemWidth\n            );\n            layoutParam.totalWidth += itemWidth + ITEM_GAP;\n            layoutParam.renderList.push({node: node, text: text, width: itemWidth});\n        }\n    },\n\n    /**\n     * @private\n     */\n    _renderContent: function (\n        seriesModel, layoutParam, normalStyleModel, textStyleModel, onSelect\n    ) {\n        // Start rendering.\n        var lastX = 0;\n        var emptyItemWidth = layoutParam.emptyItemWidth;\n        var height = seriesModel.get('breadcrumb.height');\n        var availableSize = getAvailableSize(layoutParam.pos, layoutParam.box);\n        var totalWidth = layoutParam.totalWidth;\n        var renderList = layoutParam.renderList;\n\n        for (var i = renderList.length - 1; i >= 0; i--) {\n            var item = renderList[i];\n            var itemNode = item.node;\n            var itemWidth = item.width;\n            var text = item.text;\n\n            // Hdie text and shorten width if necessary.\n            if (totalWidth > availableSize.width) {\n                totalWidth -= itemWidth - emptyItemWidth;\n                itemWidth = emptyItemWidth;\n                text = null;\n            }\n\n            var el = new Polygon({\n                shape: {\n                    points: makeItemPoints(\n                        lastX, 0, itemWidth, height,\n                        i === renderList.length - 1, i === 0\n                    )\n                },\n                style: defaults(\n                    normalStyleModel.getItemStyle(),\n                    {\n                        lineJoin: 'bevel',\n                        text: text,\n                        textFill: textStyleModel.getTextColor(),\n                        textFont: textStyleModel.getFont()\n                    }\n                ),\n                z: 10,\n                onclick: curry(onSelect, itemNode)\n            });\n            this.group.add(el);\n\n            packEventData(el, seriesModel, itemNode);\n\n            lastX += itemWidth + ITEM_GAP;\n        }\n    },\n\n    /**\n     * @override\n     */\n    remove: function () {\n        this.group.removeAll();\n    }\n};\n\nfunction makeItemPoints(x, y, itemWidth, itemHeight, head, tail) {\n    var points = [\n        [head ? x : x - ARRAY_LENGTH, y],\n        [x + itemWidth, y],\n        [x + itemWidth, y + itemHeight],\n        [head ? x : x - ARRAY_LENGTH, y + itemHeight]\n    ];\n    !tail && points.splice(2, 0, [x + itemWidth + ARRAY_LENGTH, y + itemHeight / 2]);\n    !head && points.push([x, y + itemHeight / 2]);\n    return points;\n}\n\n// Package custom mouse event.\nfunction packEventData(el, seriesModel, itemNode) {\n    el.eventData = {\n        componentType: 'series',\n        componentSubType: 'treemap',\n        componentIndex: seriesModel.componentIndex,\n        seriesIndex: seriesModel.componentIndex,\n        seriesName: seriesModel.name,\n        seriesType: 'treemap',\n        selfType: 'breadcrumb', // Distinguish with click event on treemap node.\n        nodeData: {\n            dataIndex: itemNode && itemNode.dataIndex,\n            name: itemNode && itemNode.name\n        },\n        treePathInfo: itemNode && wrapTreePathInfo(itemNode, seriesModel)\n    };\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * @param {number} [time=500] Time in ms\n * @param {string} [easing='linear']\n * @param {number} [delay=0]\n * @param {Function} [callback]\n *\n * @example\n *  // Animate position\n *  animation\n *      .createWrap()\n *      .add(el1, {position: [10, 10]})\n *      .add(el2, {shape: {width: 500}, style: {fill: 'red'}}, 400)\n *      .done(function () { // done })\n *      .start('cubicOut');\n */\nfunction createWrap() {\n\n    var storage = [];\n    var elExistsMap = {};\n    var doneCallback;\n\n    return {\n\n        /**\n         * Caution: a el can only be added once, otherwise 'done'\n         * might not be called. This method checks this (by el.id),\n         * suppresses adding and returns false when existing el found.\n         *\n         * @param {modele:zrender/Element} el\n         * @param {Object} target\n         * @param {number} [time=500]\n         * @param {number} [delay=0]\n         * @param {string} [easing='linear']\n         * @return {boolean} Whether adding succeeded.\n         *\n         * @example\n         *     add(el, target, time, delay, easing);\n         *     add(el, target, time, easing);\n         *     add(el, target, time);\n         *     add(el, target);\n         */\n        add: function (el, target, time, delay, easing) {\n            if (isString(delay)) {\n                easing = delay;\n                delay = 0;\n            }\n\n            if (elExistsMap[el.id]) {\n                return false;\n            }\n            elExistsMap[el.id] = 1;\n\n            storage.push(\n                {el: el, target: target, time: time, delay: delay, easing: easing}\n            );\n\n            return true;\n        },\n\n        /**\n         * Only execute when animation finished. Will not execute when any\n         * of 'stop' or 'stopAnimation' called.\n         *\n         * @param {Function} callback\n         */\n        done: function (callback) {\n            doneCallback = callback;\n            return this;\n        },\n\n        /**\n         * Will stop exist animation firstly.\n         */\n        start: function () {\n            var count = storage.length;\n\n            for (var i = 0, len = storage.length; i < len; i++) {\n                var item = storage[i];\n                item.el.animateTo(item.target, item.time, item.delay, item.easing, done);\n            }\n\n            return this;\n\n            function done() {\n                count--;\n                if (!count) {\n                    storage.length = 0;\n                    elExistsMap = {};\n                    doneCallback && doneCallback();\n                }\n            }\n        }\n    };\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar bind$1 = bind;\nvar Group$2 = Group;\nvar Rect$1 = Rect;\nvar each$8 = each$1;\n\nvar DRAG_THRESHOLD = 3;\nvar PATH_LABEL_NOAMAL = ['label'];\nvar PATH_LABEL_EMPHASIS = ['emphasis', 'label'];\nvar PATH_UPPERLABEL_NORMAL = ['upperLabel'];\nvar PATH_UPPERLABEL_EMPHASIS = ['emphasis', 'upperLabel'];\nvar Z_BASE = 10; // Should bigger than every z.\nvar Z_BG = 1;\nvar Z_CONTENT = 2;\n\nvar getItemStyleEmphasis = makeStyleMapper([\n    ['fill', 'color'],\n    // `borderColor` and `borderWidth` has been occupied,\n    // so use `stroke` to indicate the stroke of the rect.\n    ['stroke', 'strokeColor'],\n    ['lineWidth', 'strokeWidth'],\n    ['shadowBlur'],\n    ['shadowOffsetX'],\n    ['shadowOffsetY'],\n    ['shadowColor']\n]);\nvar getItemStyleNormal = function (model) {\n    // Normal style props should include emphasis style props.\n    var itemStyle = getItemStyleEmphasis(model);\n    // Clear styles set by emphasis.\n    itemStyle.stroke = itemStyle.fill = itemStyle.lineWidth = null;\n    return itemStyle;\n};\n\nextendChartView({\n\n    type: 'treemap',\n\n    /**\n     * @override\n     */\n    init: function (o, api) {\n\n        /**\n         * @private\n         * @type {module:zrender/container/Group}\n         */\n        this._containerGroup;\n\n        /**\n         * @private\n         * @type {Object.<string, Array.<module:zrender/container/Group>>}\n         */\n        this._storage = createStorage();\n\n        /**\n         * @private\n         * @type {module:echarts/data/Tree}\n         */\n        this._oldTree;\n\n        /**\n         * @private\n         * @type {module:echarts/chart/treemap/Breadcrumb}\n         */\n        this._breadcrumb;\n\n        /**\n         * @private\n         * @type {module:echarts/component/helper/RoamController}\n         */\n        this._controller;\n\n        /**\n         * 'ready', 'animating'\n         * @private\n         */\n        this._state = 'ready';\n    },\n\n    /**\n     * @override\n     */\n    render: function (seriesModel, ecModel, api, payload) {\n\n        var models = ecModel.findComponents({\n            mainType: 'series', subType: 'treemap', query: payload\n        });\n        if (indexOf(models, seriesModel) < 0) {\n            return;\n        }\n\n        this.seriesModel = seriesModel;\n        this.api = api;\n        this.ecModel = ecModel;\n\n        var types = ['treemapZoomToNode', 'treemapRootToNode'];\n        var targetInfo = retrieveTargetInfo(payload, types, seriesModel);\n        var payloadType = payload && payload.type;\n        var layoutInfo = seriesModel.layoutInfo;\n        var isInit = !this._oldTree;\n        var thisStorage = this._storage;\n\n        // Mark new root when action is treemapRootToNode.\n        var reRoot = (payloadType === 'treemapRootToNode' && targetInfo && thisStorage)\n            ? {\n                rootNodeGroup: thisStorage.nodeGroup[targetInfo.node.getRawIndex()],\n                direction: payload.direction\n            }\n            : null;\n\n        var containerGroup = this._giveContainerGroup(layoutInfo);\n\n        var renderResult = this._doRender(containerGroup, seriesModel, reRoot);\n        (\n            !isInit && (\n                !payloadType\n                || payloadType === 'treemapZoomToNode'\n                || payloadType === 'treemapRootToNode'\n            )\n        )\n            ? this._doAnimation(containerGroup, renderResult, seriesModel, reRoot)\n            : renderResult.renderFinally();\n\n        this._resetController(api);\n\n        this._renderBreadcrumb(seriesModel, api, targetInfo);\n    },\n\n    /**\n     * @private\n     */\n    _giveContainerGroup: function (layoutInfo) {\n        var containerGroup = this._containerGroup;\n        if (!containerGroup) {\n            // FIXME\n            // 加一层containerGroup是为了clip，但是现在clip功能并没有实现。\n            containerGroup = this._containerGroup = new Group$2();\n            this._initEvents(containerGroup);\n            this.group.add(containerGroup);\n        }\n        containerGroup.attr('position', [layoutInfo.x, layoutInfo.y]);\n\n        return containerGroup;\n    },\n\n    /**\n     * @private\n     */\n    _doRender: function (containerGroup, seriesModel, reRoot) {\n        var thisTree = seriesModel.getData().tree;\n        var oldTree = this._oldTree;\n\n        // Clear last shape records.\n        var lastsForAnimation = createStorage();\n        var thisStorage = createStorage();\n        var oldStorage = this._storage;\n        var willInvisibleEls = [];\n        var doRenderNode = curry(\n            renderNode, seriesModel,\n            thisStorage, oldStorage, reRoot,\n            lastsForAnimation, willInvisibleEls\n        );\n\n        // Notice: when thisTree and oldTree are the same tree (see list.cloneShallow),\n        // the oldTree is actually losted, so we can not find all of the old graphic\n        // elements from tree. So we use this stragegy: make element storage, move\n        // from old storage to new storage, clear old storage.\n\n        dualTravel(\n            thisTree.root ? [thisTree.root] : [],\n            (oldTree && oldTree.root) ? [oldTree.root] : [],\n            containerGroup,\n            thisTree === oldTree || !oldTree,\n            0\n        );\n\n        // Process all removing.\n        var willDeleteEls = clearStorage(oldStorage);\n\n        this._oldTree = thisTree;\n        this._storage = thisStorage;\n\n        return {\n            lastsForAnimation: lastsForAnimation,\n            willDeleteEls: willDeleteEls,\n            renderFinally: renderFinally\n        };\n\n        function dualTravel(thisViewChildren, oldViewChildren, parentGroup, sameTree, depth) {\n            // When 'render' is triggered by action,\n            // 'this' and 'old' may be the same tree,\n            // we use rawIndex in that case.\n            if (sameTree) {\n                oldViewChildren = thisViewChildren;\n                each$8(thisViewChildren, function (child, index) {\n                    !child.isRemoved() && processNode(index, index);\n                });\n            }\n            // Diff hierarchically (diff only in each subtree, but not whole).\n            // because, consistency of view is important.\n            else {\n                (new DataDiffer(oldViewChildren, thisViewChildren, getKey, getKey))\n                    .add(processNode)\n                    .update(processNode)\n                    .remove(curry(processNode, null))\n                    .execute();\n            }\n\n            function getKey(node) {\n                // Identify by name or raw index.\n                return node.getId();\n            }\n\n            function processNode(newIndex, oldIndex) {\n                var thisNode = newIndex != null ? thisViewChildren[newIndex] : null;\n                var oldNode = oldIndex != null ? oldViewChildren[oldIndex] : null;\n\n                var group = doRenderNode(thisNode, oldNode, parentGroup, depth);\n\n                group && dualTravel(\n                    thisNode && thisNode.viewChildren || [],\n                    oldNode && oldNode.viewChildren || [],\n                    group,\n                    sameTree,\n                    depth + 1\n                );\n            }\n        }\n\n        function clearStorage(storage) {\n            var willDeleteEls = createStorage();\n            storage && each$8(storage, function (store, storageName) {\n                var delEls = willDeleteEls[storageName];\n                each$8(store, function (el) {\n                    el && (delEls.push(el), el.__tmWillDelete = 1);\n                });\n            });\n            return willDeleteEls;\n        }\n\n        function renderFinally() {\n            each$8(willDeleteEls, function (els) {\n                each$8(els, function (el) {\n                    el.parent && el.parent.remove(el);\n                });\n            });\n            each$8(willInvisibleEls, function (el) {\n                el.invisible = true;\n                // Setting invisible is for optimizing, so no need to set dirty,\n                // just mark as invisible.\n                el.dirty();\n            });\n        }\n    },\n\n    /**\n     * @private\n     */\n    _doAnimation: function (containerGroup, renderResult, seriesModel, reRoot) {\n        if (!seriesModel.get('animation')) {\n            return;\n        }\n\n        var duration = seriesModel.get('animationDurationUpdate');\n        var easing = seriesModel.get('animationEasing');\n        var animationWrap = createWrap();\n\n        // Make delete animations.\n        each$8(renderResult.willDeleteEls, function (store, storageName) {\n            each$8(store, function (el, rawIndex) {\n                if (el.invisible) {\n                    return;\n                }\n\n                var parent = el.parent; // Always has parent, and parent is nodeGroup.\n                var target;\n\n                if (reRoot && reRoot.direction === 'drillDown') {\n                    target = parent === reRoot.rootNodeGroup\n                        // This is the content element of view root.\n                        // Only `content` will enter this branch, because\n                        // `background` and `nodeGroup` will not be deleted.\n                        ? {\n                            shape: {\n                                x: 0,\n                                y: 0,\n                                width: parent.__tmNodeWidth,\n                                height: parent.__tmNodeHeight\n                            },\n                            style: {\n                                opacity: 0\n                            }\n                        }\n                        // Others.\n                        : {style: {opacity: 0}};\n                }\n                else {\n                    var targetX = 0;\n                    var targetY = 0;\n\n                    if (!parent.__tmWillDelete) {\n                        // Let node animate to right-bottom corner, cooperating with fadeout,\n                        // which is appropriate for user understanding.\n                        // Divided by 2 for reRoot rolling up effect.\n                        targetX = parent.__tmNodeWidth / 2;\n                        targetY = parent.__tmNodeHeight / 2;\n                    }\n\n                    target = storageName === 'nodeGroup'\n                        ? {position: [targetX, targetY], style: {opacity: 0}}\n                        : {\n                            shape: {x: targetX, y: targetY, width: 0, height: 0},\n                            style: {opacity: 0}\n                        };\n                }\n\n                target && animationWrap.add(el, target, duration, easing);\n            });\n        });\n\n        // Make other animations\n        each$8(this._storage, function (store, storageName) {\n            each$8(store, function (el, rawIndex) {\n                var last = renderResult.lastsForAnimation[storageName][rawIndex];\n                var target = {};\n\n                if (!last) {\n                    return;\n                }\n\n                if (storageName === 'nodeGroup') {\n                    if (last.old) {\n                        target.position = el.position.slice();\n                        el.attr('position', last.old);\n                    }\n                }\n                else {\n                    if (last.old) {\n                        target.shape = extend({}, el.shape);\n                        el.setShape(last.old);\n                    }\n\n                    if (last.fadein) {\n                        el.setStyle('opacity', 0);\n                        target.style = {opacity: 1};\n                    }\n                    // When animation is stopped for succedent animation starting,\n                    // el.style.opacity might not be 1\n                    else if (el.style.opacity !== 1) {\n                        target.style = {opacity: 1};\n                    }\n                }\n\n                animationWrap.add(el, target, duration, easing);\n            });\n        }, this);\n\n        this._state = 'animating';\n\n        animationWrap\n            .done(bind$1(function () {\n                this._state = 'ready';\n                renderResult.renderFinally();\n            }, this))\n            .start();\n    },\n\n    /**\n     * @private\n     */\n    _resetController: function (api) {\n        var controller = this._controller;\n\n        // Init controller.\n        if (!controller) {\n            controller = this._controller = new RoamController(api.getZr());\n            controller.enable(this.seriesModel.get('roam'));\n            controller.on('pan', bind$1(this._onPan, this));\n            controller.on('zoom', bind$1(this._onZoom, this));\n        }\n\n        var rect = new BoundingRect(0, 0, api.getWidth(), api.getHeight());\n        controller.setPointerChecker(function (e, x, y) {\n            return rect.contain(x, y);\n        });\n    },\n\n    /**\n     * @private\n     */\n    _clearController: function () {\n        var controller = this._controller;\n        if (controller) {\n            controller.dispose();\n            controller = null;\n        }\n    },\n\n    /**\n     * @private\n     */\n    _onPan: function (e) {\n        if (this._state !== 'animating'\n            && (Math.abs(e.dx) > DRAG_THRESHOLD || Math.abs(e.dy) > DRAG_THRESHOLD)\n        ) {\n            // These param must not be cached.\n            var root = this.seriesModel.getData().tree.root;\n\n            if (!root) {\n                return;\n            }\n\n            var rootLayout = root.getLayout();\n\n            if (!rootLayout) {\n                return;\n            }\n\n            this.api.dispatchAction({\n                type: 'treemapMove',\n                from: this.uid,\n                seriesId: this.seriesModel.id,\n                rootRect: {\n                    x: rootLayout.x + e.dx, y: rootLayout.y + e.dy,\n                    width: rootLayout.width, height: rootLayout.height\n                }\n            });\n        }\n    },\n\n    /**\n     * @private\n     */\n    _onZoom: function (e) {\n        var mouseX = e.originX;\n        var mouseY = e.originY;\n\n        if (this._state !== 'animating') {\n            // These param must not be cached.\n            var root = this.seriesModel.getData().tree.root;\n\n            if (!root) {\n                return;\n            }\n\n            var rootLayout = root.getLayout();\n\n            if (!rootLayout) {\n                return;\n            }\n\n            var rect = new BoundingRect(\n                rootLayout.x, rootLayout.y, rootLayout.width, rootLayout.height\n            );\n            var layoutInfo = this.seriesModel.layoutInfo;\n\n            // Transform mouse coord from global to containerGroup.\n            mouseX -= layoutInfo.x;\n            mouseY -= layoutInfo.y;\n\n            // Scale root bounding rect.\n            var m = create$1();\n            translate(m, m, [-mouseX, -mouseY]);\n            scale$1(m, m, [e.scale, e.scale]);\n            translate(m, m, [mouseX, mouseY]);\n\n            rect.applyTransform(m);\n\n            this.api.dispatchAction({\n                type: 'treemapRender',\n                from: this.uid,\n                seriesId: this.seriesModel.id,\n                rootRect: {\n                    x: rect.x, y: rect.y,\n                    width: rect.width, height: rect.height\n                }\n            });\n        }\n    },\n\n    /**\n     * @private\n     */\n    _initEvents: function (containerGroup) {\n        containerGroup.on('click', function (e) {\n            if (this._state !== 'ready') {\n                return;\n            }\n\n            var nodeClick = this.seriesModel.get('nodeClick', true);\n\n            if (!nodeClick) {\n                return;\n            }\n\n            var targetInfo = this.findTarget(e.offsetX, e.offsetY);\n\n            if (!targetInfo) {\n                return;\n            }\n\n            var node = targetInfo.node;\n            if (node.getLayout().isLeafRoot) {\n                this._rootToNode(targetInfo);\n            }\n            else {\n                if (nodeClick === 'zoomToNode') {\n                    this._zoomToNode(targetInfo);\n                }\n                else if (nodeClick === 'link') {\n                    var itemModel = node.hostTree.data.getItemModel(node.dataIndex);\n                    var link = itemModel.get('link', true);\n                    var linkTarget = itemModel.get('target', true) || 'blank';\n                    link && window.open(link, linkTarget);\n                }\n            }\n\n        }, this);\n    },\n\n    /**\n     * @private\n     */\n    _renderBreadcrumb: function (seriesModel, api, targetInfo) {\n        if (!targetInfo) {\n            targetInfo = seriesModel.get('leafDepth', true) != null\n                ? {node: seriesModel.getViewRoot()}\n                // FIXME\n                // better way?\n                // Find breadcrumb tail on center of containerGroup.\n                : this.findTarget(api.getWidth() / 2, api.getHeight() / 2);\n\n            if (!targetInfo) {\n                targetInfo = {node: seriesModel.getData().tree.root};\n            }\n        }\n\n        (this._breadcrumb || (this._breadcrumb = new Breadcrumb(this.group)))\n            .render(seriesModel, api, targetInfo.node, bind$1(onSelect, this));\n\n        function onSelect(node) {\n            if (this._state !== 'animating') {\n                aboveViewRoot(seriesModel.getViewRoot(), node)\n                    ? this._rootToNode({node: node})\n                    : this._zoomToNode({node: node});\n            }\n        }\n    },\n\n    /**\n     * @override\n     */\n    remove: function () {\n        this._clearController();\n        this._containerGroup && this._containerGroup.removeAll();\n        this._storage = createStorage();\n        this._state = 'ready';\n        this._breadcrumb && this._breadcrumb.remove();\n    },\n\n    dispose: function () {\n        this._clearController();\n    },\n\n    /**\n     * @private\n     */\n    _zoomToNode: function (targetInfo) {\n        this.api.dispatchAction({\n            type: 'treemapZoomToNode',\n            from: this.uid,\n            seriesId: this.seriesModel.id,\n            targetNode: targetInfo.node\n        });\n    },\n\n    /**\n     * @private\n     */\n    _rootToNode: function (targetInfo) {\n        this.api.dispatchAction({\n            type: 'treemapRootToNode',\n            from: this.uid,\n            seriesId: this.seriesModel.id,\n            targetNode: targetInfo.node\n        });\n    },\n\n    /**\n     * @public\n     * @param {number} x Global coord x.\n     * @param {number} y Global coord y.\n     * @return {Object} info If not found, return undefined;\n     * @return {number} info.node Target node.\n     * @return {number} info.offsetX x refer to target node.\n     * @return {number} info.offsetY y refer to target node.\n     */\n    findTarget: function (x, y) {\n        var targetInfo;\n        var viewRoot = this.seriesModel.getViewRoot();\n\n        viewRoot.eachNode({attr: 'viewChildren', order: 'preorder'}, function (node) {\n            var bgEl = this._storage.background[node.getRawIndex()];\n            // If invisible, there might be no element.\n            if (bgEl) {\n                var point = bgEl.transformCoordToLocal(x, y);\n                var shape = bgEl.shape;\n\n                // For performance consideration, dont use 'getBoundingRect'.\n                if (shape.x <= point[0]\n                    && point[0] <= shape.x + shape.width\n                    && shape.y <= point[1]\n                    && point[1] <= shape.y + shape.height\n                ) {\n                    targetInfo = {node: node, offsetX: point[0], offsetY: point[1]};\n                }\n                else {\n                    return false; // Suppress visit subtree.\n                }\n            }\n        }, this);\n\n        return targetInfo;\n    }\n\n});\n\n/**\n * @inner\n */\nfunction createStorage() {\n    return {nodeGroup: [], background: [], content: []};\n}\n\n/**\n * @inner\n * @return Return undefined means do not travel further.\n */\nfunction renderNode(\n    seriesModel, thisStorage, oldStorage, reRoot,\n    lastsForAnimation, willInvisibleEls,\n    thisNode, oldNode, parentGroup, depth\n) {\n    // Whether under viewRoot.\n    if (!thisNode) {\n        // Deleting nodes will be performed finally. This method just find\n        // element from old storage, or create new element, set them to new\n        // storage, and set styles.\n        return;\n    }\n\n    // -------------------------------------------------------------------\n    // Start of closure variables available in \"Procedures in renderNode\".\n\n    var thisLayout = thisNode.getLayout();\n\n    if (!thisLayout || !thisLayout.isInView) {\n        return;\n    }\n\n    var thisWidth = thisLayout.width;\n    var thisHeight = thisLayout.height;\n    var borderWidth = thisLayout.borderWidth;\n    var thisInvisible = thisLayout.invisible;\n\n    var thisRawIndex = thisNode.getRawIndex();\n    var oldRawIndex = oldNode && oldNode.getRawIndex();\n\n    var thisViewChildren = thisNode.viewChildren;\n    var upperHeight = thisLayout.upperHeight;\n    var isParent = thisViewChildren && thisViewChildren.length;\n    var itemStyleNormalModel = thisNode.getModel('itemStyle');\n    var itemStyleEmphasisModel = thisNode.getModel('emphasis.itemStyle');\n\n    // End of closure ariables available in \"Procedures in renderNode\".\n    // -----------------------------------------------------------------\n\n    // Node group\n    var group = giveGraphic('nodeGroup', Group$2);\n\n    if (!group) {\n        return;\n    }\n\n    parentGroup.add(group);\n    // x,y are not set when el is above view root.\n    group.attr('position', [thisLayout.x || 0, thisLayout.y || 0]);\n    group.__tmNodeWidth = thisWidth;\n    group.__tmNodeHeight = thisHeight;\n\n    if (thisLayout.isAboveViewRoot) {\n        return group;\n    }\n\n    // Background\n    var bg = giveGraphic('background', Rect$1, depth, Z_BG);\n    bg && renderBackground(group, bg, isParent && thisLayout.upperHeight);\n\n    // No children, render content.\n    if (!isParent) {\n        var content = giveGraphic('content', Rect$1, depth, Z_CONTENT);\n        content && renderContent(group, content);\n    }\n\n    return group;\n\n    // ----------------------------\n    // | Procedures in renderNode |\n    // ----------------------------\n\n    function renderBackground(group, bg, useUpperLabel) {\n        // For tooltip.\n        bg.dataIndex = thisNode.dataIndex;\n        bg.seriesIndex = seriesModel.seriesIndex;\n\n        bg.setShape({x: 0, y: 0, width: thisWidth, height: thisHeight});\n        var visualBorderColor = thisNode.getVisual('borderColor', true);\n        var emphasisBorderColor = itemStyleEmphasisModel.get('borderColor');\n\n        updateStyle(bg, function () {\n            var normalStyle = getItemStyleNormal(itemStyleNormalModel);\n            normalStyle.fill = visualBorderColor;\n            var emphasisStyle = getItemStyleEmphasis(itemStyleEmphasisModel);\n            emphasisStyle.fill = emphasisBorderColor;\n\n            if (useUpperLabel) {\n                var upperLabelWidth = thisWidth - 2 * borderWidth;\n\n                prepareText(\n                    normalStyle, emphasisStyle, visualBorderColor, upperLabelWidth, upperHeight,\n                    {x: borderWidth, y: 0, width: upperLabelWidth, height: upperHeight}\n                );\n            }\n            // For old bg.\n            else {\n                normalStyle.text = emphasisStyle.text = null;\n            }\n\n            bg.setStyle(normalStyle);\n            setHoverStyle(bg, emphasisStyle);\n        });\n\n        group.add(bg);\n    }\n\n    function renderContent(group, content) {\n        // For tooltip.\n        content.dataIndex = thisNode.dataIndex;\n        content.seriesIndex = seriesModel.seriesIndex;\n\n        var contentWidth = Math.max(thisWidth - 2 * borderWidth, 0);\n        var contentHeight = Math.max(thisHeight - 2 * borderWidth, 0);\n\n        content.culling = true;\n        content.setShape({\n            x: borderWidth,\n            y: borderWidth,\n            width: contentWidth,\n            height: contentHeight\n        });\n\n        var visualColor = thisNode.getVisual('color', true);\n        updateStyle(content, function () {\n            var normalStyle = getItemStyleNormal(itemStyleNormalModel);\n            normalStyle.fill = visualColor;\n            var emphasisStyle = getItemStyleEmphasis(itemStyleEmphasisModel);\n\n            prepareText(normalStyle, emphasisStyle, visualColor, contentWidth, contentHeight);\n\n            content.setStyle(normalStyle);\n            setHoverStyle(content, emphasisStyle);\n        });\n\n        group.add(content);\n    }\n\n    function updateStyle(element, cb) {\n        if (!thisInvisible) {\n            // If invisible, do not set visual, otherwise the element will\n            // change immediately before animation. We think it is OK to\n            // remain its origin color when moving out of the view window.\n            cb();\n\n            if (!element.__tmWillVisible) {\n                element.invisible = false;\n            }\n        }\n        else {\n            // Delay invisible setting utill animation finished,\n            // avoid element vanish suddenly before animation.\n            !element.invisible && willInvisibleEls.push(element);\n        }\n    }\n\n    function prepareText(normalStyle, emphasisStyle, visualColor, width, height, upperLabelRect) {\n        var nodeModel = thisNode.getModel();\n        var text = retrieve(\n            seriesModel.getFormattedLabel(\n                thisNode.dataIndex, 'normal', null, null, upperLabelRect ? 'upperLabel' : 'label'\n            ),\n            nodeModel.get('name')\n        );\n        if (!upperLabelRect && thisLayout.isLeafRoot) {\n            var iconChar = seriesModel.get('drillDownIcon', true);\n            text = iconChar ? iconChar + ' ' + text : text;\n        }\n\n        var normalLabelModel = nodeModel.getModel(\n            upperLabelRect ? PATH_UPPERLABEL_NORMAL : PATH_LABEL_NOAMAL\n        );\n        var emphasisLabelModel = nodeModel.getModel(\n            upperLabelRect ? PATH_UPPERLABEL_EMPHASIS : PATH_LABEL_EMPHASIS\n        );\n\n        var isShow = normalLabelModel.getShallow('show');\n\n        setLabelStyle(\n            normalStyle, emphasisStyle, normalLabelModel, emphasisLabelModel,\n            {\n                defaultText: isShow ? text : null,\n                autoColor: visualColor,\n                isRectText: true\n            }\n        );\n\n        upperLabelRect && (normalStyle.textRect = clone(upperLabelRect));\n\n        normalStyle.truncate = (isShow && normalLabelModel.get('ellipsis'))\n            ? {\n                outerWidth: width,\n                outerHeight: height,\n                minChar: 2\n            }\n            : null;\n    }\n\n    function giveGraphic(storageName, Ctor, depth, z) {\n        var element = oldRawIndex != null && oldStorage[storageName][oldRawIndex];\n        var lasts = lastsForAnimation[storageName];\n\n        if (element) {\n            // Remove from oldStorage\n            oldStorage[storageName][oldRawIndex] = null;\n            prepareAnimationWhenHasOld(lasts, element, storageName);\n        }\n        // If invisible and no old element, do not create new element (for optimizing).\n        else if (!thisInvisible) {\n            element = new Ctor({z: calculateZ(depth, z)});\n            element.__tmDepth = depth;\n            element.__tmStorageName = storageName;\n            prepareAnimationWhenNoOld(lasts, element, storageName);\n        }\n\n        // Set to thisStorage\n        return (thisStorage[storageName][thisRawIndex] = element);\n    }\n\n    function prepareAnimationWhenHasOld(lasts, element, storageName) {\n        var lastCfg = lasts[thisRawIndex] = {};\n        lastCfg.old = storageName === 'nodeGroup'\n            ? element.position.slice()\n            : extend({}, element.shape);\n    }\n\n    // If a element is new, we need to find the animation start point carefully,\n    // otherwise it will looks strange when 'zoomToNode'.\n    function prepareAnimationWhenNoOld(lasts, element, storageName) {\n        var lastCfg = lasts[thisRawIndex] = {};\n        var parentNode = thisNode.parentNode;\n\n        if (parentNode && (!reRoot || reRoot.direction === 'drillDown')) {\n            var parentOldX = 0;\n            var parentOldY = 0;\n\n            // New nodes appear from right-bottom corner in 'zoomToNode' animation.\n            // For convenience, get old bounding rect from background.\n            var parentOldBg = lastsForAnimation.background[parentNode.getRawIndex()];\n            if (!reRoot && parentOldBg && parentOldBg.old) {\n                parentOldX = parentOldBg.old.width;\n                parentOldY = parentOldBg.old.height;\n            }\n\n            // When no parent old shape found, its parent is new too,\n            // so we can just use {x:0, y:0}.\n            lastCfg.old = storageName === 'nodeGroup'\n                ? [0, parentOldY]\n                : {x: parentOldX, y: parentOldY, width: 0, height: 0};\n        }\n\n        // Fade in, user can be aware that these nodes are new.\n        lastCfg.fadein = storageName !== 'nodeGroup';\n    }\n}\n\n// We can not set all backgroud with the same z, Because the behaviour of\n// drill down and roll up differ background creation sequence from tree\n// hierarchy sequence, which cause that lowser background element overlap\n// upper ones. So we calculate z based on depth.\n// Moreover, we try to shrink down z interval to [0, 1] to avoid that\n// treemap with large z overlaps other components.\nfunction calculateZ(depth, zInLevel) {\n    var zb = depth * Z_BASE + zInLevel;\n    return (zb - 1) / zb;\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * @file Treemap action\n */\n\nvar noop$1 = function () {};\n\nvar actionTypes = [\n    'treemapZoomToNode',\n    'treemapRender',\n    'treemapMove'\n];\n\nfor (var i$2 = 0; i$2 < actionTypes.length; i$2++) {\n    registerAction({type: actionTypes[i$2], update: 'updateView'}, noop$1);\n}\n\nregisterAction(\n    {type: 'treemapRootToNode', update: 'updateView'},\n    function (payload, ecModel) {\n\n        ecModel.eachComponent(\n            {mainType: 'series', subType: 'treemap', query: payload},\n            handleRootToNode\n        );\n\n        function handleRootToNode(model, index) {\n            var types = ['treemapZoomToNode', 'treemapRootToNode'];\n            var targetInfo = retrieveTargetInfo(payload, types, model);\n\n            if (targetInfo) {\n                var originViewRoot = model.getViewRoot();\n                if (originViewRoot) {\n                    payload.direction = aboveViewRoot(originViewRoot, targetInfo.node)\n                        ? 'rollUp' : 'drillDown';\n                }\n                model.resetViewRoot(targetInfo.node);\n            }\n        }\n    }\n);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar each$9 = each$1;\nvar isObject$5 = isObject$1;\n\nvar CATEGORY_DEFAULT_VISUAL_INDEX = -1;\n\n/**\n * @param {Object} option\n * @param {string} [option.type] See visualHandlers.\n * @param {string} [option.mappingMethod] 'linear' or 'piecewise' or 'category' or 'fixed'\n * @param {Array.<number>=} [option.dataExtent] [minExtent, maxExtent],\n *                                              required when mappingMethod is 'linear'\n * @param {Array.<Object>=} [option.pieceList] [\n *                                             {value: someValue},\n *                                             {interval: [min1, max1], visual: {...}},\n *                                             {interval: [min2, max2]}\n *                                             ],\n *                                            required when mappingMethod is 'piecewise'.\n *                                            Visual for only each piece can be specified.\n * @param {Array.<string|Object>=} [option.categories] ['cate1', 'cate2']\n *                                            required when mappingMethod is 'category'.\n *                                            If no option.categories, categories is set\n *                                            as [0, 1, 2, ...].\n * @param {boolean} [option.loop=false] Whether loop mapping when mappingMethod is 'category'.\n * @param {(Array|Object|*)} [option.visual]  Visual data.\n *                                            when mappingMethod is 'category',\n *                                            visual data can be array or object\n *                                            (like: {cate1: '#222', none: '#fff'})\n *                                            or primary types (which represents\n *                                            defualt category visual), otherwise visual\n *                                            can be array or primary (which will be\n *                                            normalized to array).\n *\n */\nvar VisualMapping = function (option) {\n    var mappingMethod = option.mappingMethod;\n    var visualType = option.type;\n\n    /**\n     * @readOnly\n     * @type {Object}\n     */\n    var thisOption = this.option = clone(option);\n\n    /**\n     * @readOnly\n     * @type {string}\n     */\n    this.type = visualType;\n\n    /**\n     * @readOnly\n     * @type {string}\n     */\n    this.mappingMethod = mappingMethod;\n\n    /**\n     * @private\n     * @type {Function}\n     */\n    this._normalizeData = normalizers[mappingMethod];\n\n    var visualHandler = visualHandlers[visualType];\n\n    /**\n     * @public\n     * @type {Function}\n     */\n    this.applyVisual = visualHandler.applyVisual;\n\n    /**\n     * @public\n     * @type {Function}\n     */\n    this.getColorMapper = visualHandler.getColorMapper;\n\n    /**\n     * @private\n     * @type {Function}\n     */\n    this._doMap = visualHandler._doMap[mappingMethod];\n\n    if (mappingMethod === 'piecewise') {\n        normalizeVisualRange(thisOption);\n        preprocessForPiecewise(thisOption);\n    }\n    else if (mappingMethod === 'category') {\n        thisOption.categories\n            ? preprocessForSpecifiedCategory(thisOption)\n            // categories is ordinal when thisOption.categories not specified,\n            // which need no more preprocess except normalize visual.\n            : normalizeVisualRange(thisOption, true);\n    }\n    else { // mappingMethod === 'linear' or 'fixed'\n        assert$1(mappingMethod !== 'linear' || thisOption.dataExtent);\n        normalizeVisualRange(thisOption);\n    }\n};\n\nVisualMapping.prototype = {\n\n    constructor: VisualMapping,\n\n    mapValueToVisual: function (value) {\n        var normalized = this._normalizeData(value);\n        return this._doMap(normalized, value);\n    },\n\n    getNormalizer: function () {\n        return bind(this._normalizeData, this);\n    }\n};\n\nvar visualHandlers = VisualMapping.visualHandlers = {\n\n    color: {\n\n        applyVisual: makeApplyVisual('color'),\n\n        /**\n         * Create a mapper function\n         * @return {Function}\n         */\n        getColorMapper: function () {\n            var thisOption = this.option;\n\n            return bind(\n                thisOption.mappingMethod === 'category'\n                    ? function (value, isNormalized) {\n                        !isNormalized && (value = this._normalizeData(value));\n                        return doMapCategory.call(this, value);\n                    }\n                    : function (value, isNormalized, out) {\n                        // If output rgb array\n                        // which will be much faster and useful in pixel manipulation\n                        var returnRGBArray = !!out;\n                        !isNormalized && (value = this._normalizeData(value));\n                        out = fastLerp(value, thisOption.parsedVisual, out);\n                        return returnRGBArray ? out : stringify(out, 'rgba');\n                    },\n                this\n            );\n        },\n\n        _doMap: {\n            linear: function (normalized) {\n                return stringify(\n                    fastLerp(normalized, this.option.parsedVisual),\n                    'rgba'\n                );\n            },\n            category: doMapCategory,\n            piecewise: function (normalized, value) {\n                var result = getSpecifiedVisual.call(this, value);\n                if (result == null) {\n                    result = stringify(\n                        fastLerp(normalized, this.option.parsedVisual),\n                        'rgba'\n                    );\n                }\n                return result;\n            },\n            fixed: doMapFixed\n        }\n    },\n\n    colorHue: makePartialColorVisualHandler(function (color, value) {\n        return modifyHSL(color, value);\n    }),\n\n    colorSaturation: makePartialColorVisualHandler(function (color, value) {\n        return modifyHSL(color, null, value);\n    }),\n\n    colorLightness: makePartialColorVisualHandler(function (color, value) {\n        return modifyHSL(color, null, null, value);\n    }),\n\n    colorAlpha: makePartialColorVisualHandler(function (color, value) {\n        return modifyAlpha(color, value);\n    }),\n\n    opacity: {\n        applyVisual: makeApplyVisual('opacity'),\n        _doMap: makeDoMap([0, 1])\n    },\n\n    liftZ: {\n        applyVisual: makeApplyVisual('liftZ'),\n        _doMap: {\n            linear: doMapFixed,\n            category: doMapFixed,\n            piecewise: doMapFixed,\n            fixed: doMapFixed\n        }\n    },\n\n    symbol: {\n        applyVisual: function (value, getter, setter) {\n            var symbolCfg = this.mapValueToVisual(value);\n            if (isString(symbolCfg)) {\n                setter('symbol', symbolCfg);\n            }\n            else if (isObject$5(symbolCfg)) {\n                for (var name in symbolCfg) {\n                    if (symbolCfg.hasOwnProperty(name)) {\n                        setter(name, symbolCfg[name]);\n                    }\n                }\n            }\n        },\n        _doMap: {\n            linear: doMapToArray,\n            category: doMapCategory,\n            piecewise: function (normalized, value) {\n                var result = getSpecifiedVisual.call(this, value);\n                if (result == null) {\n                    result = doMapToArray.call(this, normalized);\n                }\n                return result;\n            },\n            fixed: doMapFixed\n        }\n    },\n\n    symbolSize: {\n        applyVisual: makeApplyVisual('symbolSize'),\n        _doMap: makeDoMap([0, 1])\n    }\n};\n\n\nfunction preprocessForPiecewise(thisOption) {\n    var pieceList = thisOption.pieceList;\n    thisOption.hasSpecialVisual = false;\n\n    each$1(pieceList, function (piece, index) {\n        piece.originIndex = index;\n        // piece.visual is \"result visual value\" but not\n        // a visual range, so it does not need to be normalized.\n        if (piece.visual != null) {\n            thisOption.hasSpecialVisual = true;\n        }\n    });\n}\n\nfunction preprocessForSpecifiedCategory(thisOption) {\n    // Hash categories.\n    var categories = thisOption.categories;\n    var visual = thisOption.visual;\n\n    var categoryMap = thisOption.categoryMap = {};\n    each$9(categories, function (cate, index) {\n        categoryMap[cate] = index;\n    });\n\n    // Process visual map input.\n    if (!isArray(visual)) {\n        var visualArr = [];\n\n        if (isObject$1(visual)) {\n            each$9(visual, function (v, cate) {\n                var index = categoryMap[cate];\n                visualArr[index != null ? index : CATEGORY_DEFAULT_VISUAL_INDEX] = v;\n            });\n        }\n        else { // Is primary type, represents default visual.\n            visualArr[CATEGORY_DEFAULT_VISUAL_INDEX] = visual;\n        }\n\n        visual = setVisualToOption(thisOption, visualArr);\n    }\n\n    // Remove categories that has no visual,\n    // then we can mapping them to CATEGORY_DEFAULT_VISUAL_INDEX.\n    for (var i = categories.length - 1; i >= 0; i--) {\n        if (visual[i] == null) {\n            delete categoryMap[categories[i]];\n            categories.pop();\n        }\n    }\n}\n\nfunction normalizeVisualRange(thisOption, isCategory) {\n    var visual = thisOption.visual;\n    var visualArr = [];\n\n    if (isObject$1(visual)) {\n        each$9(visual, function (v) {\n            visualArr.push(v);\n        });\n    }\n    else if (visual != null) {\n        visualArr.push(visual);\n    }\n\n    var doNotNeedPair = {color: 1, symbol: 1};\n\n    if (!isCategory\n        && visualArr.length === 1\n        && !doNotNeedPair.hasOwnProperty(thisOption.type)\n    ) {\n        // Do not care visualArr.length === 0, which is illegal.\n        visualArr[1] = visualArr[0];\n    }\n\n    setVisualToOption(thisOption, visualArr);\n}\n\nfunction makePartialColorVisualHandler(applyValue) {\n    return {\n        applyVisual: function (value, getter, setter) {\n            value = this.mapValueToVisual(value);\n            // Must not be array value\n            setter('color', applyValue(getter('color'), value));\n        },\n        _doMap: makeDoMap([0, 1])\n    };\n}\n\nfunction doMapToArray(normalized) {\n    var visual = this.option.visual;\n    return visual[\n        Math.round(linearMap(normalized, [0, 1], [0, visual.length - 1], true))\n    ] || {};\n}\n\nfunction makeApplyVisual(visualType) {\n    return function (value, getter, setter) {\n        setter(visualType, this.mapValueToVisual(value));\n    };\n}\n\nfunction doMapCategory(normalized) {\n    var visual = this.option.visual;\n    return visual[\n        (this.option.loop && normalized !== CATEGORY_DEFAULT_VISUAL_INDEX)\n            ? normalized % visual.length\n            : normalized\n    ];\n}\n\nfunction doMapFixed() {\n    return this.option.visual[0];\n}\n\nfunction makeDoMap(sourceExtent) {\n    return {\n        linear: function (normalized) {\n            return linearMap(normalized, sourceExtent, this.option.visual, true);\n        },\n        category: doMapCategory,\n        piecewise: function (normalized, value) {\n            var result = getSpecifiedVisual.call(this, value);\n            if (result == null) {\n                result = linearMap(normalized, sourceExtent, this.option.visual, true);\n            }\n            return result;\n        },\n        fixed: doMapFixed\n    };\n}\n\nfunction getSpecifiedVisual(value) {\n    var thisOption = this.option;\n    var pieceList = thisOption.pieceList;\n    if (thisOption.hasSpecialVisual) {\n        var pieceIndex = VisualMapping.findPieceIndex(value, pieceList);\n        var piece = pieceList[pieceIndex];\n        if (piece && piece.visual) {\n            return piece.visual[this.type];\n        }\n    }\n}\n\nfunction setVisualToOption(thisOption, visualArr) {\n    thisOption.visual = visualArr;\n    if (thisOption.type === 'color') {\n        thisOption.parsedVisual = map(visualArr, function (item) {\n            return parse(item);\n        });\n    }\n    return visualArr;\n}\n\n\n/**\n * Normalizers by mapping methods.\n */\nvar normalizers = {\n\n    linear: function (value) {\n        return linearMap(value, this.option.dataExtent, [0, 1], true);\n    },\n\n    piecewise: function (value) {\n        var pieceList = this.option.pieceList;\n        var pieceIndex = VisualMapping.findPieceIndex(value, pieceList, true);\n        if (pieceIndex != null) {\n            return linearMap(pieceIndex, [0, pieceList.length - 1], [0, 1], true);\n        }\n    },\n\n    category: function (value) {\n        var index = this.option.categories\n            ? this.option.categoryMap[value]\n            : value; // ordinal\n        return index == null ? CATEGORY_DEFAULT_VISUAL_INDEX : index;\n    },\n\n    fixed: noop\n};\n\n\n\n/**\n * List available visual types.\n *\n * @public\n * @return {Array.<string>}\n */\nVisualMapping.listVisualTypes = function () {\n    var visualTypes = [];\n    each$1(visualHandlers, function (handler, key) {\n        visualTypes.push(key);\n    });\n    return visualTypes;\n};\n\n/**\n * @public\n */\nVisualMapping.addVisualHandler = function (name, handler) {\n    visualHandlers[name] = handler;\n};\n\n/**\n * @public\n */\nVisualMapping.isValidType = function (visualType) {\n    return visualHandlers.hasOwnProperty(visualType);\n};\n\n/**\n * Convinent method.\n * Visual can be Object or Array or primary type.\n *\n * @public\n */\nVisualMapping.eachVisual = function (visual, callback, context) {\n    if (isObject$1(visual)) {\n        each$1(visual, callback, context);\n    }\n    else {\n        callback.call(context, visual);\n    }\n};\n\nVisualMapping.mapVisual = function (visual, callback, context) {\n    var isPrimary;\n    var newVisual = isArray(visual)\n        ? []\n        : isObject$1(visual)\n        ? {}\n        : (isPrimary = true, null);\n\n    VisualMapping.eachVisual(visual, function (v, key) {\n        var newVal = callback.call(context, v, key);\n        isPrimary ? (newVisual = newVal) : (newVisual[key] = newVal);\n    });\n    return newVisual;\n};\n\n/**\n * @public\n * @param {Object} obj\n * @return {Object} new object containers visual values.\n *                 If no visuals, return null.\n */\nVisualMapping.retrieveVisuals = function (obj) {\n    var ret = {};\n    var hasVisual;\n\n    obj && each$9(visualHandlers, function (h, visualType) {\n        if (obj.hasOwnProperty(visualType)) {\n            ret[visualType] = obj[visualType];\n            hasVisual = true;\n        }\n    });\n\n    return hasVisual ? ret : null;\n};\n\n/**\n * Give order to visual types, considering colorSaturation, colorAlpha depends on color.\n *\n * @public\n * @param {(Object|Array)} visualTypes If Object, like: {color: ..., colorSaturation: ...}\n *                                     IF Array, like: ['color', 'symbol', 'colorSaturation']\n * @return {Array.<string>} Sorted visual types.\n */\nVisualMapping.prepareVisualTypes = function (visualTypes) {\n    if (isObject$5(visualTypes)) {\n        var types = [];\n        each$9(visualTypes, function (item, type) {\n            types.push(type);\n        });\n        visualTypes = types;\n    }\n    else if (isArray(visualTypes)) {\n        visualTypes = visualTypes.slice();\n    }\n    else {\n        return [];\n    }\n\n    visualTypes.sort(function (type1, type2) {\n        // color should be front of colorSaturation, colorAlpha, ...\n        // symbol and symbolSize do not matter.\n        return (type2 === 'color' && type1 !== 'color' && type1.indexOf('color') === 0)\n            ? 1 : -1;\n    });\n\n    return visualTypes;\n};\n\n/**\n * 'color', 'colorSaturation', 'colorAlpha', ... are depends on 'color'.\n * Other visuals are only depends on themself.\n *\n * @public\n * @param {string} visualType1\n * @param {string} visualType2\n * @return {boolean}\n */\nVisualMapping.dependsOn = function (visualType1, visualType2) {\n    return visualType2 === 'color'\n        ? !!(visualType1 && visualType1.indexOf(visualType2) === 0)\n        : visualType1 === visualType2;\n};\n\n/**\n * @param {number} value\n * @param {Array.<Object>} pieceList [{value: ..., interval: [min, max]}, ...]\n *                         Always from small to big.\n * @param {boolean} [findClosestWhenOutside=false]\n * @return {number} index\n */\nVisualMapping.findPieceIndex = function (value, pieceList, findClosestWhenOutside) {\n    var possibleI;\n    var abs = Infinity;\n\n    // value has the higher priority.\n    for (var i = 0, len = pieceList.length; i < len; i++) {\n        var pieceValue = pieceList[i].value;\n        if (pieceValue != null) {\n            if (pieceValue === value\n                // FIXME\n                // It is supposed to compare value according to value type of dimension,\n                // but currently value type can exactly be string or number.\n                // Compromise for numeric-like string (like '12'), especially\n                // in the case that visualMap.categories is ['22', '33'].\n                || (typeof pieceValue === 'string' && pieceValue === value + '')\n            ) {\n                return i;\n            }\n            findClosestWhenOutside && updatePossible(pieceValue, i);\n        }\n    }\n\n    for (var i = 0, len = pieceList.length; i < len; i++) {\n        var piece = pieceList[i];\n        var interval = piece.interval;\n        var close = piece.close;\n\n        if (interval) {\n            if (interval[0] === -Infinity) {\n                if (littleThan(close[1], value, interval[1])) {\n                    return i;\n                }\n            }\n            else if (interval[1] === Infinity) {\n                if (littleThan(close[0], interval[0], value)) {\n                    return i;\n                }\n            }\n            else if (\n                littleThan(close[0], interval[0], value)\n                && littleThan(close[1], value, interval[1])\n            ) {\n                return i;\n            }\n            findClosestWhenOutside && updatePossible(interval[0], i);\n            findClosestWhenOutside && updatePossible(interval[1], i);\n        }\n    }\n\n    if (findClosestWhenOutside) {\n        return value === Infinity\n            ? pieceList.length - 1\n            : value === -Infinity\n            ? 0\n            : possibleI;\n    }\n\n    function updatePossible(val, index) {\n        var newAbs = Math.abs(val - value);\n        if (newAbs < abs) {\n            abs = newAbs;\n            possibleI = index;\n        }\n    }\n\n};\n\nfunction littleThan(close, a, b) {\n    return close ? a <= b : a < b;\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar isArray$2 = isArray;\n\nvar ITEM_STYLE_NORMAL = 'itemStyle';\n\nvar treemapVisual = {\n    seriesType: 'treemap',\n    reset: function (seriesModel, ecModel, api, payload) {\n        var tree = seriesModel.getData().tree;\n        var root = tree.root;\n        var seriesItemStyleModel = seriesModel.getModel(ITEM_STYLE_NORMAL);\n\n        if (root.isRemoved()) {\n            return;\n        }\n\n        var levelItemStyles = map(tree.levelModels, function (levelModel) {\n            return levelModel ? levelModel.get(ITEM_STYLE_NORMAL) : null;\n        });\n\n        travelTree(\n            root, // Visual should calculate from tree root but not view root.\n            {},\n            levelItemStyles,\n            seriesItemStyleModel,\n            seriesModel.getViewRoot().getAncestors(),\n            seriesModel\n        );\n    }\n};\n\nfunction travelTree(\n    node, designatedVisual, levelItemStyles, seriesItemStyleModel,\n    viewRootAncestors, seriesModel\n) {\n    var nodeModel = node.getModel();\n    var nodeLayout = node.getLayout();\n\n    // Optimize\n    if (!nodeLayout || nodeLayout.invisible || !nodeLayout.isInView) {\n        return;\n    }\n\n    var nodeItemStyleModel = node.getModel(ITEM_STYLE_NORMAL);\n    var levelItemStyle = levelItemStyles[node.depth];\n    var visuals = buildVisuals(\n        nodeItemStyleModel, designatedVisual, levelItemStyle, seriesItemStyleModel\n    );\n\n    // calculate border color\n    var borderColor = nodeItemStyleModel.get('borderColor');\n    var borderColorSaturation = nodeItemStyleModel.get('borderColorSaturation');\n    var thisNodeColor;\n    if (borderColorSaturation != null) {\n        // For performance, do not always execute 'calculateColor'.\n        thisNodeColor = calculateColor(visuals, node);\n        borderColor = calculateBorderColor(borderColorSaturation, thisNodeColor);\n    }\n    node.setVisual('borderColor', borderColor);\n\n    var viewChildren = node.viewChildren;\n    if (!viewChildren || !viewChildren.length) {\n        thisNodeColor = calculateColor(visuals, node);\n        // Apply visual to this node.\n        node.setVisual('color', thisNodeColor);\n    }\n    else {\n        var mapping = buildVisualMapping(\n            node, nodeModel, nodeLayout, nodeItemStyleModel, visuals, viewChildren\n        );\n\n        // Designate visual to children.\n        each$1(viewChildren, function (child, index) {\n            // If higher than viewRoot, only ancestors of viewRoot is needed to visit.\n            if (child.depth >= viewRootAncestors.length\n                || child === viewRootAncestors[child.depth]\n            ) {\n                var childVisual = mapVisual$1(\n                    nodeModel, visuals, child, index, mapping, seriesModel\n                );\n                travelTree(\n                    child, childVisual, levelItemStyles, seriesItemStyleModel,\n                    viewRootAncestors, seriesModel\n                );\n            }\n        });\n    }\n}\n\nfunction buildVisuals(\n    nodeItemStyleModel, designatedVisual, levelItemStyle, seriesItemStyleModel\n) {\n    var visuals = extend({}, designatedVisual);\n\n    each$1(['color', 'colorAlpha', 'colorSaturation'], function (visualName) {\n        // Priority: thisNode > thisLevel > parentNodeDesignated > seriesModel\n        var val = nodeItemStyleModel.get(visualName, true); // Ignore parent\n        val == null && levelItemStyle && (val = levelItemStyle[visualName]);\n        val == null && (val = designatedVisual[visualName]);\n        val == null && (val = seriesItemStyleModel.get(visualName));\n\n        val != null && (visuals[visualName] = val);\n    });\n\n    return visuals;\n}\n\nfunction calculateColor(visuals) {\n    var color = getValueVisualDefine(visuals, 'color');\n\n    if (color) {\n        var colorAlpha = getValueVisualDefine(visuals, 'colorAlpha');\n        var colorSaturation = getValueVisualDefine(visuals, 'colorSaturation');\n        if (colorSaturation) {\n            color = modifyHSL(color, null, null, colorSaturation);\n        }\n        if (colorAlpha) {\n            color = modifyAlpha(color, colorAlpha);\n        }\n\n        return color;\n    }\n}\n\nfunction calculateBorderColor(borderColorSaturation, thisNodeColor) {\n    return thisNodeColor != null\n            ? modifyHSL(thisNodeColor, null, null, borderColorSaturation)\n            : null;\n}\n\nfunction getValueVisualDefine(visuals, name) {\n    var value = visuals[name];\n    if (value != null && value !== 'none') {\n        return value;\n    }\n}\n\nfunction buildVisualMapping(\n    node, nodeModel, nodeLayout, nodeItemStyleModel, visuals, viewChildren\n) {\n    if (!viewChildren || !viewChildren.length) {\n        return;\n    }\n\n    var rangeVisual = getRangeVisual(nodeModel, 'color')\n        || (\n            visuals.color != null\n            && visuals.color !== 'none'\n            && (\n                getRangeVisual(nodeModel, 'colorAlpha')\n                || getRangeVisual(nodeModel, 'colorSaturation')\n            )\n        );\n\n    if (!rangeVisual) {\n        return;\n    }\n\n    var visualMin = nodeModel.get('visualMin');\n    var visualMax = nodeModel.get('visualMax');\n    var dataExtent = nodeLayout.dataExtent.slice();\n    visualMin != null && visualMin < dataExtent[0] && (dataExtent[0] = visualMin);\n    visualMax != null && visualMax > dataExtent[1] && (dataExtent[1] = visualMax);\n\n    var colorMappingBy = nodeModel.get('colorMappingBy');\n    var opt = {\n        type: rangeVisual.name,\n        dataExtent: dataExtent,\n        visual: rangeVisual.range\n    };\n    if (opt.type === 'color'\n        && (colorMappingBy === 'index' || colorMappingBy === 'id')\n    ) {\n        opt.mappingMethod = 'category';\n        opt.loop = true;\n        // categories is ordinal, so do not set opt.categories.\n    }\n    else {\n        opt.mappingMethod = 'linear';\n    }\n\n    var mapping = new VisualMapping(opt);\n    mapping.__drColorMappingBy = colorMappingBy;\n\n    return mapping;\n}\n\n// Notice: If we dont have the attribute 'colorRange', but only use\n// attribute 'color' to represent both concepts of 'colorRange' and 'color',\n// (It means 'colorRange' when 'color' is Array, means 'color' when not array),\n// this problem will be encountered:\n// If a level-1 node dont have children, and its siblings has children,\n// and colorRange is set on level-1, then the node can not be colored.\n// So we separate 'colorRange' and 'color' to different attributes.\nfunction getRangeVisual(nodeModel, name) {\n    // 'colorRange', 'colorARange', 'colorSRange'.\n    // If not exsits on this node, fetch from levels and series.\n    var range = nodeModel.get(name);\n    return (isArray$2(range) && range.length) ? {name: name, range: range} : null;\n}\n\nfunction mapVisual$1(nodeModel, visuals, child, index, mapping, seriesModel) {\n    var childVisuals = extend({}, visuals);\n\n    if (mapping) {\n        var mappingType = mapping.type;\n        var colorMappingBy = mappingType === 'color' && mapping.__drColorMappingBy;\n        var value = colorMappingBy === 'index'\n            ? index\n            : colorMappingBy === 'id'\n            ? seriesModel.mapIdToIndex(child.getId())\n            : child.getValue(nodeModel.get('visualDimension'));\n\n        childVisuals[mappingType] = mapping.mapValueToVisual(value);\n    }\n\n    return childVisuals;\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/*\n* A third-party license is embeded for some of the code in this file:\n* The treemap layout implementation was originally copied from\n* \"d3.js\" with some modifications made for this project.\n* (See more details in the comment of the method \"squarify\" below.)\n* The use of the source code of this file is also subject to the terms\n* and consitions of the license of \"d3.js\" (BSD-3Clause, see\n* </licenses/LICENSE-d3>).\n*/\n\nvar mathMax$4 = Math.max;\nvar mathMin$4 = Math.min;\nvar retrieveValue = retrieve;\nvar each$10 = each$1;\n\nvar PATH_BORDER_WIDTH = ['itemStyle', 'borderWidth'];\nvar PATH_GAP_WIDTH = ['itemStyle', 'gapWidth'];\nvar PATH_UPPER_LABEL_SHOW = ['upperLabel', 'show'];\nvar PATH_UPPER_LABEL_HEIGHT = ['upperLabel', 'height'];\n\n/**\n * @public\n */\nvar treemapLayout = {\n    seriesType: 'treemap',\n    reset: function (seriesModel, ecModel, api, payload) {\n        // Layout result in each node:\n        // {x, y, width, height, area, borderWidth}\n        var ecWidth = api.getWidth();\n        var ecHeight = api.getHeight();\n        var seriesOption = seriesModel.option;\n\n        var layoutInfo = getLayoutRect(\n            seriesModel.getBoxLayoutParams(),\n            {\n                width: api.getWidth(),\n                height: api.getHeight()\n            }\n        );\n\n        var size = seriesOption.size || []; // Compatible with ec2.\n        var containerWidth = parsePercent$1(\n            retrieveValue(layoutInfo.width, size[0]),\n            ecWidth\n        );\n        var containerHeight = parsePercent$1(\n            retrieveValue(layoutInfo.height, size[1]),\n            ecHeight\n        );\n\n        // Fetch payload info.\n        var payloadType = payload && payload.type;\n        var types = ['treemapZoomToNode', 'treemapRootToNode'];\n        var targetInfo = retrieveTargetInfo(payload, types, seriesModel);\n        var rootRect = (payloadType === 'treemapRender' || payloadType === 'treemapMove')\n            ? payload.rootRect : null;\n        var viewRoot = seriesModel.getViewRoot();\n        var viewAbovePath = getPathToRoot(viewRoot);\n\n        if (payloadType !== 'treemapMove') {\n            var rootSize = payloadType === 'treemapZoomToNode'\n                ? estimateRootSize(\n                    seriesModel, targetInfo, viewRoot, containerWidth, containerHeight\n                )\n                : rootRect\n                ? [rootRect.width, rootRect.height]\n                : [containerWidth, containerHeight];\n\n            var sort = seriesOption.sort;\n            if (sort && sort !== 'asc' && sort !== 'desc') {\n                sort = 'desc';\n            }\n            var options = {\n                squareRatio: seriesOption.squareRatio,\n                sort: sort,\n                leafDepth: seriesOption.leafDepth\n            };\n\n            // layout should be cleared because using updateView but not update.\n            viewRoot.hostTree.clearLayouts();\n\n            // TODO\n            // optimize: if out of view clip, do not layout.\n            // But take care that if do not render node out of view clip,\n            // how to calculate start po\n\n            var viewRootLayout = {\n                x: 0, y: 0,\n                width: rootSize[0], height: rootSize[1],\n                area: rootSize[0] * rootSize[1]\n            };\n            viewRoot.setLayout(viewRootLayout);\n\n            squarify(viewRoot, options, false, 0);\n            // Supplement layout.\n            var viewRootLayout = viewRoot.getLayout();\n            each$10(viewAbovePath, function (node, index) {\n                var childValue = (viewAbovePath[index + 1] || viewRoot).getValue();\n                node.setLayout(extend(\n                    {dataExtent: [childValue, childValue], borderWidth: 0, upperHeight: 0},\n                    viewRootLayout\n                ));\n            });\n        }\n\n        var treeRoot = seriesModel.getData().tree.root;\n\n        treeRoot.setLayout(\n            calculateRootPosition(layoutInfo, rootRect, targetInfo),\n            true\n        );\n\n        seriesModel.setLayoutInfo(layoutInfo);\n\n        // FIXME\n        // 现在没有clip功能，暂时取ec高宽。\n        prunning(\n            treeRoot,\n            // Transform to base element coordinate system.\n            new BoundingRect(-layoutInfo.x, -layoutInfo.y, ecWidth, ecHeight),\n            viewAbovePath,\n            viewRoot,\n            0\n        );\n    }\n};\n\n/**\n * Layout treemap with squarify algorithm.\n * The original presentation of this algorithm\n * was made by Mark Bruls, Kees Huizing, and Jarke J. van Wijk\n * <https://graphics.ethz.ch/teaching/scivis_common/Literature/squarifiedTreeMaps.pdf>.\n * The implementation of this algorithm was originally copied from \"d3.js\"\n * <https://github.com/d3/d3/blob/9cc9a875e636a1dcf36cc1e07bdf77e1ad6e2c74/src/layout/treemap.js>\n * with some modifications made for this program.\n * See the license statement at the head of this file.\n *\n * @protected\n * @param {module:echarts/data/Tree~TreeNode} node\n * @param {Object} options\n * @param {string} options.sort 'asc' or 'desc'\n * @param {number} options.squareRatio\n * @param {boolean} hideChildren\n * @param {number} depth\n */\nfunction squarify(node, options, hideChildren, depth) {\n    var width;\n    var height;\n\n    if (node.isRemoved()) {\n        return;\n    }\n\n    var thisLayout = node.getLayout();\n    width = thisLayout.width;\n    height = thisLayout.height;\n\n    // Considering border and gap\n    var nodeModel = node.getModel();\n    var borderWidth = nodeModel.get(PATH_BORDER_WIDTH);\n    var halfGapWidth = nodeModel.get(PATH_GAP_WIDTH) / 2;\n    var upperLabelHeight = getUpperLabelHeight(nodeModel);\n    var upperHeight = Math.max(borderWidth, upperLabelHeight);\n    var layoutOffset = borderWidth - halfGapWidth;\n    var layoutOffsetUpper = upperHeight - halfGapWidth;\n    var nodeModel = node.getModel();\n\n    node.setLayout({\n        borderWidth: borderWidth,\n        upperHeight: upperHeight,\n        upperLabelHeight: upperLabelHeight\n    }, true);\n\n    width = mathMax$4(width - 2 * layoutOffset, 0);\n    height = mathMax$4(height - layoutOffset - layoutOffsetUpper, 0);\n\n    var totalArea = width * height;\n    var viewChildren = initChildren(\n        node, nodeModel, totalArea, options, hideChildren, depth\n    );\n\n    if (!viewChildren.length) {\n        return;\n    }\n\n    var rect = {x: layoutOffset, y: layoutOffsetUpper, width: width, height: height};\n    var rowFixedLength = mathMin$4(width, height);\n    var best = Infinity; // the best row score so far\n    var row = [];\n    row.area = 0;\n\n    for (var i = 0, len = viewChildren.length; i < len;) {\n        var child = viewChildren[i];\n\n        row.push(child);\n        row.area += child.getLayout().area;\n        var score = worst(row, rowFixedLength, options.squareRatio);\n\n        // continue with this orientation\n        if (score <= best) {\n            i++;\n            best = score;\n        }\n        // abort, and try a different orientation\n        else {\n            row.area -= row.pop().getLayout().area;\n            position(row, rowFixedLength, rect, halfGapWidth, false);\n            rowFixedLength = mathMin$4(rect.width, rect.height);\n            row.length = row.area = 0;\n            best = Infinity;\n        }\n    }\n\n    if (row.length) {\n        position(row, rowFixedLength, rect, halfGapWidth, true);\n    }\n\n    if (!hideChildren) {\n        var childrenVisibleMin = nodeModel.get('childrenVisibleMin');\n        if (childrenVisibleMin != null && totalArea < childrenVisibleMin) {\n            hideChildren = true;\n        }\n    }\n\n    for (var i = 0, len = viewChildren.length; i < len; i++) {\n        squarify(viewChildren[i], options, hideChildren, depth + 1);\n    }\n}\n\n/**\n * Set area to each child, and calculate data extent for visual coding.\n */\nfunction initChildren(node, nodeModel, totalArea, options, hideChildren, depth) {\n    var viewChildren = node.children || [];\n    var orderBy = options.sort;\n    orderBy !== 'asc' && orderBy !== 'desc' && (orderBy = null);\n\n    var overLeafDepth = options.leafDepth != null && options.leafDepth <= depth;\n\n    // leafDepth has higher priority.\n    if (hideChildren && !overLeafDepth) {\n        return (node.viewChildren = []);\n    }\n\n    // Sort children, order by desc.\n    viewChildren = filter(viewChildren, function (child) {\n        return !child.isRemoved();\n    });\n\n    sort$1(viewChildren, orderBy);\n\n    var info = statistic(nodeModel, viewChildren, orderBy);\n\n    if (info.sum === 0) {\n        return (node.viewChildren = []);\n    }\n\n    info.sum = filterByThreshold(nodeModel, totalArea, info.sum, orderBy, viewChildren);\n\n    if (info.sum === 0) {\n        return (node.viewChildren = []);\n    }\n\n    // Set area to each child.\n    for (var i = 0, len = viewChildren.length; i < len; i++) {\n        var area = viewChildren[i].getValue() / info.sum * totalArea;\n        // Do not use setLayout({...}, true), because it is needed to clear last layout.\n        viewChildren[i].setLayout({area: area});\n    }\n\n    if (overLeafDepth) {\n        viewChildren.length && node.setLayout({isLeafRoot: true}, true);\n        viewChildren.length = 0;\n    }\n\n    node.viewChildren = viewChildren;\n    node.setLayout({dataExtent: info.dataExtent}, true);\n\n    return viewChildren;\n}\n\n/**\n * Consider 'visibleMin'. Modify viewChildren and get new sum.\n */\nfunction filterByThreshold(nodeModel, totalArea, sum, orderBy, orderedChildren) {\n\n    // visibleMin is not supported yet when no option.sort.\n    if (!orderBy) {\n        return sum;\n    }\n\n    var visibleMin = nodeModel.get('visibleMin');\n    var len = orderedChildren.length;\n    var deletePoint = len;\n\n    // Always travel from little value to big value.\n    for (var i = len - 1; i >= 0; i--) {\n        var value = orderedChildren[\n            orderBy === 'asc' ? len - i - 1 : i\n        ].getValue();\n\n        if (value / sum * totalArea < visibleMin) {\n            deletePoint = i;\n            sum -= value;\n        }\n    }\n\n    orderBy === 'asc'\n        ? orderedChildren.splice(0, len - deletePoint)\n        : orderedChildren.splice(deletePoint, len - deletePoint);\n\n    return sum;\n}\n\n/**\n * Sort\n */\nfunction sort$1(viewChildren, orderBy) {\n    if (orderBy) {\n        viewChildren.sort(function (a, b) {\n            var diff = orderBy === 'asc'\n                ? a.getValue() - b.getValue() : b.getValue() - a.getValue();\n            return diff === 0\n                ? (orderBy === 'asc'\n                    ? a.dataIndex - b.dataIndex : b.dataIndex - a.dataIndex\n                )\n                : diff;\n        });\n    }\n    return viewChildren;\n}\n\n/**\n * Statistic\n */\nfunction statistic(nodeModel, children, orderBy) {\n    // Calculate sum.\n    var sum = 0;\n    for (var i = 0, len = children.length; i < len; i++) {\n        sum += children[i].getValue();\n    }\n\n    // Statistic data extent for latter visual coding.\n    // Notice: data extent should be calculate based on raw children\n    // but not filtered view children, otherwise visual mapping will not\n    // be stable when zoom (where children is filtered by visibleMin).\n\n    var dimension = nodeModel.get('visualDimension');\n    var dataExtent;\n\n    // The same as area dimension.\n    if (!children || !children.length) {\n        dataExtent = [NaN, NaN];\n    }\n    else if (dimension === 'value' && orderBy) {\n        dataExtent = [\n            children[children.length - 1].getValue(),\n            children[0].getValue()\n        ];\n        orderBy === 'asc' && dataExtent.reverse();\n    }\n    // Other dimension.\n    else {\n        var dataExtent = [Infinity, -Infinity];\n        each$10(children, function (child) {\n            var value = child.getValue(dimension);\n            value < dataExtent[0] && (dataExtent[0] = value);\n            value > dataExtent[1] && (dataExtent[1] = value);\n        });\n    }\n\n    return {sum: sum, dataExtent: dataExtent};\n}\n\n/**\n * Computes the score for the specified row,\n * as the worst aspect ratio.\n */\nfunction worst(row, rowFixedLength, ratio) {\n    var areaMax = 0;\n    var areaMin = Infinity;\n\n    for (var i = 0, area, len = row.length; i < len; i++) {\n        area = row[i].getLayout().area;\n        if (area) {\n            area < areaMin && (areaMin = area);\n            area > areaMax && (areaMax = area);\n        }\n    }\n\n    var squareArea = row.area * row.area;\n    var f = rowFixedLength * rowFixedLength * ratio;\n\n    return squareArea\n        ? mathMax$4(\n            (f * areaMax) / squareArea,\n            squareArea / (f * areaMin)\n        )\n        : Infinity;\n}\n\n/**\n * Positions the specified row of nodes. Modifies `rect`.\n */\nfunction position(row, rowFixedLength, rect, halfGapWidth, flush) {\n    // When rowFixedLength === rect.width,\n    // it is horizontal subdivision,\n    // rowFixedLength is the width of the subdivision,\n    // rowOtherLength is the height of the subdivision,\n    // and nodes will be positioned from left to right.\n\n    // wh[idx0WhenH] means: when horizontal,\n    //      wh[idx0WhenH] => wh[0] => 'width'.\n    //      xy[idx1WhenH] => xy[1] => 'y'.\n    var idx0WhenH = rowFixedLength === rect.width ? 0 : 1;\n    var idx1WhenH = 1 - idx0WhenH;\n    var xy = ['x', 'y'];\n    var wh = ['width', 'height'];\n\n    var last = rect[xy[idx0WhenH]];\n    var rowOtherLength = rowFixedLength\n        ? row.area / rowFixedLength : 0;\n\n    if (flush || rowOtherLength > rect[wh[idx1WhenH]]) {\n        rowOtherLength = rect[wh[idx1WhenH]]; // over+underflow\n    }\n    for (var i = 0, rowLen = row.length; i < rowLen; i++) {\n        var node = row[i];\n        var nodeLayout = {};\n        var step = rowOtherLength\n            ? node.getLayout().area / rowOtherLength : 0;\n\n        var wh1 = nodeLayout[wh[idx1WhenH]] = mathMax$4(rowOtherLength - 2 * halfGapWidth, 0);\n\n        // We use Math.max/min to avoid negative width/height when considering gap width.\n        var remain = rect[xy[idx0WhenH]] + rect[wh[idx0WhenH]] - last;\n        var modWH = (i === rowLen - 1 || remain < step) ? remain : step;\n        var wh0 = nodeLayout[wh[idx0WhenH]] = mathMax$4(modWH - 2 * halfGapWidth, 0);\n\n        nodeLayout[xy[idx1WhenH]] = rect[xy[idx1WhenH]] + mathMin$4(halfGapWidth, wh1 / 2);\n        nodeLayout[xy[idx0WhenH]] = last + mathMin$4(halfGapWidth, wh0 / 2);\n\n        last += modWH;\n        node.setLayout(nodeLayout, true);\n    }\n\n    rect[xy[idx1WhenH]] += rowOtherLength;\n    rect[wh[idx1WhenH]] -= rowOtherLength;\n}\n\n// Return [containerWidth, containerHeight] as defualt.\nfunction estimateRootSize(seriesModel, targetInfo, viewRoot, containerWidth, containerHeight) {\n    // If targetInfo.node exists, we zoom to the node,\n    // so estimate whold width and heigth by target node.\n    var currNode = (targetInfo || {}).node;\n    var defaultSize = [containerWidth, containerHeight];\n\n    if (!currNode || currNode === viewRoot) {\n        return defaultSize;\n    }\n\n    var parent;\n    var viewArea = containerWidth * containerHeight;\n    var area = viewArea * seriesModel.option.zoomToNodeRatio;\n\n    while (parent = currNode.parentNode) { // jshint ignore:line\n        var sum = 0;\n        var siblings = parent.children;\n\n        for (var i = 0, len = siblings.length; i < len; i++) {\n            sum += siblings[i].getValue();\n        }\n        var currNodeValue = currNode.getValue();\n        if (currNodeValue === 0) {\n            return defaultSize;\n        }\n        area *= sum / currNodeValue;\n\n        // Considering border, suppose aspect ratio is 1.\n        var parentModel = parent.getModel();\n        var borderWidth = parentModel.get(PATH_BORDER_WIDTH);\n        var upperHeight = Math.max(borderWidth, getUpperLabelHeight(parentModel, borderWidth));\n        area += 4 * borderWidth * borderWidth\n            + (3 * borderWidth + upperHeight) * Math.pow(area, 0.5);\n\n        area > MAX_SAFE_INTEGER && (area = MAX_SAFE_INTEGER);\n\n        currNode = parent;\n    }\n\n    area < viewArea && (area = viewArea);\n    var scale = Math.pow(area / viewArea, 0.5);\n\n    return [containerWidth * scale, containerHeight * scale];\n}\n\n// Root postion base on coord of containerGroup\nfunction calculateRootPosition(layoutInfo, rootRect, targetInfo) {\n    if (rootRect) {\n        return {x: rootRect.x, y: rootRect.y};\n    }\n\n    var defaultPosition = {x: 0, y: 0};\n    if (!targetInfo) {\n        return defaultPosition;\n    }\n\n    // If targetInfo is fetched by 'retrieveTargetInfo',\n    // old tree and new tree are the same tree,\n    // so the node still exists and we can visit it.\n\n    var targetNode = targetInfo.node;\n    var layout = targetNode.getLayout();\n\n    if (!layout) {\n        return defaultPosition;\n    }\n\n    // Transform coord from local to container.\n    var targetCenter = [layout.width / 2, layout.height / 2];\n    var node = targetNode;\n    while (node) {\n        var nodeLayout = node.getLayout();\n        targetCenter[0] += nodeLayout.x;\n        targetCenter[1] += nodeLayout.y;\n        node = node.parentNode;\n    }\n\n    return {\n        x: layoutInfo.width / 2 - targetCenter[0],\n        y: layoutInfo.height / 2 - targetCenter[1]\n    };\n}\n\n// Mark nodes visible for prunning when visual coding and rendering.\n// Prunning depends on layout and root position, so we have to do it after layout.\nfunction prunning(node, clipRect, viewAbovePath, viewRoot, depth) {\n    var nodeLayout = node.getLayout();\n    var nodeInViewAbovePath = viewAbovePath[depth];\n    var isAboveViewRoot = nodeInViewAbovePath && nodeInViewAbovePath === node;\n\n    if (\n        (nodeInViewAbovePath && !isAboveViewRoot)\n        || (depth === viewAbovePath.length && node !== viewRoot)\n    ) {\n        return;\n    }\n\n    node.setLayout({\n        // isInView means: viewRoot sub tree + viewAbovePath\n        isInView: true,\n        // invisible only means: outside view clip so that the node can not\n        // see but still layout for animation preparation but not render.\n        invisible: !isAboveViewRoot && !clipRect.intersect(nodeLayout),\n        isAboveViewRoot: isAboveViewRoot\n    }, true);\n\n    // Transform to child coordinate.\n    var childClipRect = new BoundingRect(\n        clipRect.x - nodeLayout.x,\n        clipRect.y - nodeLayout.y,\n        clipRect.width,\n        clipRect.height\n    );\n\n    each$10(node.viewChildren || [], function (child) {\n        prunning(child, childClipRect, viewAbovePath, viewRoot, depth + 1);\n    });\n}\n\nfunction getUpperLabelHeight(model) {\n    return model.get(PATH_UPPER_LABEL_SHOW) ? model.get(PATH_UPPER_LABEL_HEIGHT) : 0;\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nregisterVisual(treemapVisual);\nregisterLayout(treemapLayout);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n// id may be function name of Object, add a prefix to avoid this problem.\nfunction generateNodeKey(id) {\n    return '_EC_' + id;\n}\n/**\n * @alias module:echarts/data/Graph\n * @constructor\n * @param {boolean} directed\n */\nvar Graph = function (directed) {\n    /**\n     * 是否是有向图\n     * @type {boolean}\n     * @private\n     */\n    this._directed = directed || false;\n\n    /**\n     * @type {Array.<module:echarts/data/Graph.Node>}\n     * @readOnly\n     */\n    this.nodes = [];\n\n    /**\n     * @type {Array.<module:echarts/data/Graph.Edge>}\n     * @readOnly\n     */\n    this.edges = [];\n\n    /**\n     * @type {Object.<string, module:echarts/data/Graph.Node>}\n     * @private\n     */\n    this._nodesMap = {};\n    /**\n     * @type {Object.<string, module:echarts/data/Graph.Edge>}\n     * @private\n     */\n    this._edgesMap = {};\n\n    /**\n     * @type {module:echarts/data/List}\n     * @readOnly\n     */\n    this.data;\n\n    /**\n     * @type {module:echarts/data/List}\n     * @readOnly\n     */\n    this.edgeData;\n};\n\nvar graphProto = Graph.prototype;\n/**\n * @type {string}\n */\ngraphProto.type = 'graph';\n\n/**\n * If is directed graph\n * @return {boolean}\n */\ngraphProto.isDirected = function () {\n    return this._directed;\n};\n\n/**\n * Add a new node\n * @param {string} id\n * @param {number} [dataIndex]\n */\ngraphProto.addNode = function (id, dataIndex) {\n    id = id == null ? ('' + dataIndex) : ('' + id);\n\n    var nodesMap = this._nodesMap;\n\n    if (nodesMap[generateNodeKey(id)]) {\n        if (__DEV__) {\n            console.error('Graph nodes have duplicate name or id');\n        }\n        return;\n    }\n\n    var node = new Node(id, dataIndex);\n    node.hostGraph = this;\n\n    this.nodes.push(node);\n\n    nodesMap[generateNodeKey(id)] = node;\n    return node;\n};\n\n/**\n * Get node by data index\n * @param  {number} dataIndex\n * @return {module:echarts/data/Graph~Node}\n */\ngraphProto.getNodeByIndex = function (dataIndex) {\n    var rawIdx = this.data.getRawIndex(dataIndex);\n    return this.nodes[rawIdx];\n};\n/**\n * Get node by id\n * @param  {string} id\n * @return {module:echarts/data/Graph.Node}\n */\ngraphProto.getNodeById = function (id) {\n    return this._nodesMap[generateNodeKey(id)];\n};\n\n/**\n * Add a new edge\n * @param {number|string|module:echarts/data/Graph.Node} n1\n * @param {number|string|module:echarts/data/Graph.Node} n2\n * @param {number} [dataIndex=-1]\n * @return {module:echarts/data/Graph.Edge}\n */\ngraphProto.addEdge = function (n1, n2, dataIndex) {\n    var nodesMap = this._nodesMap;\n    var edgesMap = this._edgesMap;\n\n    // PNEDING\n    if (typeof n1 === 'number') {\n        n1 = this.nodes[n1];\n    }\n    if (typeof n2 === 'number') {\n        n2 = this.nodes[n2];\n    }\n\n    if (!Node.isInstance(n1)) {\n        n1 = nodesMap[generateNodeKey(n1)];\n    }\n    if (!Node.isInstance(n2)) {\n        n2 = nodesMap[generateNodeKey(n2)];\n    }\n    if (!n1 || !n2) {\n        return;\n    }\n\n    var key = n1.id + '-' + n2.id;\n    // PENDING\n    if (edgesMap[key]) {\n        return;\n    }\n\n    var edge = new Edge(n1, n2, dataIndex);\n    edge.hostGraph = this;\n\n    if (this._directed) {\n        n1.outEdges.push(edge);\n        n2.inEdges.push(edge);\n    }\n    n1.edges.push(edge);\n    if (n1 !== n2) {\n        n2.edges.push(edge);\n    }\n\n    this.edges.push(edge);\n    edgesMap[key] = edge;\n\n    return edge;\n};\n\n/**\n * Get edge by data index\n * @param  {number} dataIndex\n * @return {module:echarts/data/Graph~Node}\n */\ngraphProto.getEdgeByIndex = function (dataIndex) {\n    var rawIdx = this.edgeData.getRawIndex(dataIndex);\n    return this.edges[rawIdx];\n};\n/**\n * Get edge by two linked nodes\n * @param  {module:echarts/data/Graph.Node|string} n1\n * @param  {module:echarts/data/Graph.Node|string} n2\n * @return {module:echarts/data/Graph.Edge}\n */\ngraphProto.getEdge = function (n1, n2) {\n    if (Node.isInstance(n1)) {\n        n1 = n1.id;\n    }\n    if (Node.isInstance(n2)) {\n        n2 = n2.id;\n    }\n\n    var edgesMap = this._edgesMap;\n\n    if (this._directed) {\n        return edgesMap[n1 + '-' + n2];\n    }\n    else {\n        return edgesMap[n1 + '-' + n2]\n            || edgesMap[n2 + '-' + n1];\n    }\n};\n\n/**\n * Iterate all nodes\n * @param  {Function} cb\n * @param  {*} [context]\n */\ngraphProto.eachNode = function (cb, context) {\n    var nodes = this.nodes;\n    var len = nodes.length;\n    for (var i = 0; i < len; i++) {\n        if (nodes[i].dataIndex >= 0) {\n            cb.call(context, nodes[i], i);\n        }\n    }\n};\n\n/**\n * Iterate all edges\n * @param  {Function} cb\n * @param  {*} [context]\n */\ngraphProto.eachEdge = function (cb, context) {\n    var edges = this.edges;\n    var len = edges.length;\n    for (var i = 0; i < len; i++) {\n        if (edges[i].dataIndex >= 0\n            && edges[i].node1.dataIndex >= 0\n            && edges[i].node2.dataIndex >= 0\n        ) {\n            cb.call(context, edges[i], i);\n        }\n    }\n};\n\n/**\n * Breadth first traverse\n * @param {Function} cb\n * @param {module:echarts/data/Graph.Node} startNode\n * @param {string} [direction='none'] 'none'|'in'|'out'\n * @param {*} [context]\n */\ngraphProto.breadthFirstTraverse = function (\n    cb, startNode, direction, context\n) {\n    if (!Node.isInstance(startNode)) {\n        startNode = this._nodesMap[generateNodeKey(startNode)];\n    }\n    if (!startNode) {\n        return;\n    }\n\n    var edgeType = direction === 'out'\n        ? 'outEdges' : (direction === 'in' ? 'inEdges' : 'edges');\n\n    for (var i = 0; i < this.nodes.length; i++) {\n        this.nodes[i].__visited = false;\n    }\n\n    if (cb.call(context, startNode, null)) {\n        return;\n    }\n\n    var queue = [startNode];\n    while (queue.length) {\n        var currentNode = queue.shift();\n        var edges = currentNode[edgeType];\n\n        for (var i = 0; i < edges.length; i++) {\n            var e = edges[i];\n            var otherNode = e.node1 === currentNode\n                ? e.node2 : e.node1;\n            if (!otherNode.__visited) {\n                if (cb.call(context, otherNode, currentNode)) {\n                    // Stop traversing\n                    return;\n                }\n                queue.push(otherNode);\n                otherNode.__visited = true;\n            }\n        }\n    }\n};\n\n// TODO\n// graphProto.depthFirstTraverse = function (\n//     cb, startNode, direction, context\n// ) {\n\n// };\n\n// Filter update\ngraphProto.update = function () {\n    var data = this.data;\n    var edgeData = this.edgeData;\n    var nodes = this.nodes;\n    var edges = this.edges;\n\n    for (var i = 0, len = nodes.length; i < len; i++) {\n        nodes[i].dataIndex = -1;\n    }\n    for (var i = 0, len = data.count(); i < len; i++) {\n        nodes[data.getRawIndex(i)].dataIndex = i;\n    }\n\n    edgeData.filterSelf(function (idx) {\n        var edge = edges[edgeData.getRawIndex(idx)];\n        return edge.node1.dataIndex >= 0 && edge.node2.dataIndex >= 0;\n    });\n\n    // Update edge\n    for (var i = 0, len = edges.length; i < len; i++) {\n        edges[i].dataIndex = -1;\n    }\n    for (var i = 0, len = edgeData.count(); i < len; i++) {\n        edges[edgeData.getRawIndex(i)].dataIndex = i;\n    }\n};\n\n/**\n * @return {module:echarts/data/Graph}\n */\ngraphProto.clone = function () {\n    var graph = new Graph(this._directed);\n    var nodes = this.nodes;\n    var edges = this.edges;\n    for (var i = 0; i < nodes.length; i++) {\n        graph.addNode(nodes[i].id, nodes[i].dataIndex);\n    }\n    for (var i = 0; i < edges.length; i++) {\n        var e = edges[i];\n        graph.addEdge(e.node1.id, e.node2.id, e.dataIndex);\n    }\n    return graph;\n};\n\n\n/**\n * @alias module:echarts/data/Graph.Node\n */\nfunction Node(id, dataIndex) {\n    /**\n    * @type {string}\n    */\n    this.id = id == null ? '' : id;\n\n    /**\n    * @type {Array.<module:echarts/data/Graph.Edge>}\n    */\n    this.inEdges = [];\n    /**\n    * @type {Array.<module:echarts/data/Graph.Edge>}\n    */\n    this.outEdges = [];\n    /**\n    * @type {Array.<module:echarts/data/Graph.Edge>}\n    */\n    this.edges = [];\n    /**\n     * @type {module:echarts/data/Graph}\n     */\n    this.hostGraph;\n\n    /**\n     * @type {number}\n     */\n    this.dataIndex = dataIndex == null ? -1 : dataIndex;\n}\n\nNode.prototype = {\n\n    constructor: Node,\n\n    /**\n     * @return {number}\n     */\n    degree: function () {\n        return this.edges.length;\n    },\n\n    /**\n     * @return {number}\n     */\n    inDegree: function () {\n        return this.inEdges.length;\n    },\n\n    /**\n    * @return {number}\n    */\n    outDegree: function () {\n        return this.outEdges.length;\n    },\n\n    /**\n     * @param {string} [path]\n     * @return {module:echarts/model/Model}\n     */\n    getModel: function (path) {\n        if (this.dataIndex < 0) {\n            return;\n        }\n        var graph = this.hostGraph;\n        var itemModel = graph.data.getItemModel(this.dataIndex);\n\n        return itemModel.getModel(path);\n    }\n};\n\n/**\n * 图边\n * @alias module:echarts/data/Graph.Edge\n * @param {module:echarts/data/Graph.Node} n1\n * @param {module:echarts/data/Graph.Node} n2\n * @param {number} [dataIndex=-1]\n */\nfunction Edge(n1, n2, dataIndex) {\n\n    /**\n     * 节点1，如果是有向图则为源节点\n     * @type {module:echarts/data/Graph.Node}\n     */\n    this.node1 = n1;\n\n    /**\n     * 节点2，如果是有向图则为目标节点\n     * @type {module:echarts/data/Graph.Node}\n     */\n    this.node2 = n2;\n\n    this.dataIndex = dataIndex == null ? -1 : dataIndex;\n}\n\n/**\n * @param {string} [path]\n * @return {module:echarts/model/Model}\n */\nEdge.prototype.getModel = function (path) {\n    if (this.dataIndex < 0) {\n        return;\n    }\n    var graph = this.hostGraph;\n    var itemModel = graph.edgeData.getItemModel(this.dataIndex);\n\n    return itemModel.getModel(path);\n};\n\nvar createGraphDataProxyMixin = function (hostName, dataName) {\n    return {\n        /**\n         * @param {string=} [dimension='value'] Default 'value'. can be 'a', 'b', 'c', 'd', 'e'.\n         * @return {number}\n         */\n        getValue: function (dimension) {\n            var data = this[hostName][dataName];\n            return data.get(data.getDimension(dimension || 'value'), this.dataIndex);\n        },\n\n        /**\n         * @param {Object|string} key\n         * @param {*} [value]\n         */\n        setVisual: function (key, value) {\n            this.dataIndex >= 0\n                && this[hostName][dataName].setItemVisual(this.dataIndex, key, value);\n        },\n\n        /**\n         * @param {string} key\n         * @return {boolean}\n         */\n        getVisual: function (key, ignoreParent) {\n            return this[hostName][dataName].getItemVisual(this.dataIndex, key, ignoreParent);\n        },\n\n        /**\n         * @param {Object} layout\n         * @return {boolean} [merge=false]\n         */\n        setLayout: function (layout, merge$$1) {\n            this.dataIndex >= 0\n                && this[hostName][dataName].setItemLayout(this.dataIndex, layout, merge$$1);\n        },\n\n        /**\n         * @return {Object}\n         */\n        getLayout: function () {\n            return this[hostName][dataName].getItemLayout(this.dataIndex);\n        },\n\n        /**\n         * @return {module:zrender/Element}\n         */\n        getGraphicEl: function () {\n            return this[hostName][dataName].getItemGraphicEl(this.dataIndex);\n        },\n\n        /**\n         * @return {number}\n         */\n        getRawIndex: function () {\n            return this[hostName][dataName].getRawIndex(this.dataIndex);\n        }\n    };\n};\n\nmixin(Node, createGraphDataProxyMixin('hostGraph', 'data'));\nmixin(Edge, createGraphDataProxyMixin('hostGraph', 'edgeData'));\n\nGraph.Node = Node;\nGraph.Edge = Edge;\n\nenableClassCheck(Node);\nenableClassCheck(Edge);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar createGraphFromNodeEdge = function (nodes, edges, seriesModel, directed, beforeLink) {\n    // ??? TODO\n    // support dataset?\n    var graph = new Graph(directed);\n    for (var i = 0; i < nodes.length; i++) {\n        graph.addNode(retrieve(\n            // Id, name, dataIndex\n            nodes[i].id, nodes[i].name, i\n        ), i);\n    }\n\n    var linkNameList = [];\n    var validEdges = [];\n    var linkCount = 0;\n    for (var i = 0; i < edges.length; i++) {\n        var link = edges[i];\n        var source = link.source;\n        var target = link.target;\n        // addEdge may fail when source or target not exists\n        if (graph.addEdge(source, target, linkCount)) {\n            validEdges.push(link);\n            linkNameList.push(retrieve(link.id, source + ' > ' + target));\n            linkCount++;\n        }\n    }\n\n    var coordSys = seriesModel.get('coordinateSystem');\n    var nodeData;\n    if (coordSys === 'cartesian2d' || coordSys === 'polar') {\n        nodeData = createListFromArray(nodes, seriesModel);\n    }\n    else {\n        var coordSysCtor = CoordinateSystemManager.get(coordSys);\n        var coordDimensions = (coordSysCtor && coordSysCtor.type !== 'view')\n            ? (coordSysCtor.dimensions || []) : [];\n        // FIXME: Some geo do not need `value` dimenson, whereas `calendar` needs\n        // `value` dimension, but graph need `value` dimension. It's better to\n        // uniform this behavior.\n        if (indexOf(coordDimensions, 'value') < 0) {\n            coordDimensions.concat(['value']);\n        }\n\n        var dimensionNames = createDimensions(nodes, {\n            coordDimensions: coordDimensions\n        });\n        nodeData = new List(dimensionNames, seriesModel);\n        nodeData.initData(nodes);\n    }\n\n    var edgeData = new List(['value'], seriesModel);\n    edgeData.initData(validEdges, linkNameList);\n\n    beforeLink && beforeLink(nodeData, edgeData);\n\n    linkList({\n        mainData: nodeData,\n        struct: graph,\n        structAttr: 'graph',\n        datas: {node: nodeData, edge: edgeData},\n        datasAttr: {node: 'data', edge: 'edgeData'}\n    });\n\n    // Update dataIndex of nodes and edges because invalid edge may be removed\n    graph.update();\n\n    return graph;\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar GraphSeries = extendSeriesModel({\n\n    type: 'series.graph',\n\n    init: function (option) {\n        GraphSeries.superApply(this, 'init', arguments);\n\n        // Provide data for legend select\n        this.legendDataProvider = function () {\n            return this._categoriesData;\n        };\n\n        this.fillDataTextStyle(option.edges || option.links);\n\n        this._updateCategoriesData();\n    },\n\n    mergeOption: function (option) {\n        GraphSeries.superApply(this, 'mergeOption', arguments);\n\n        this.fillDataTextStyle(option.edges || option.links);\n\n        this._updateCategoriesData();\n    },\n\n    mergeDefaultAndTheme: function (option) {\n        GraphSeries.superApply(this, 'mergeDefaultAndTheme', arguments);\n        defaultEmphasis(option, ['edgeLabel'], ['show']);\n    },\n\n    getInitialData: function (option, ecModel) {\n        var edges = option.edges || option.links || [];\n        var nodes = option.data || option.nodes || [];\n        var self = this;\n\n        if (nodes && edges) {\n            return createGraphFromNodeEdge(nodes, edges, this, true, beforeLink).data;\n        }\n\n        function beforeLink(nodeData, edgeData) {\n            // Overwrite nodeData.getItemModel to\n            nodeData.wrapMethod('getItemModel', function (model) {\n                var categoriesModels = self._categoriesModels;\n                var categoryIdx = model.getShallow('category');\n                var categoryModel = categoriesModels[categoryIdx];\n                if (categoryModel) {\n                    categoryModel.parentModel = model.parentModel;\n                    model.parentModel = categoryModel;\n                }\n                return model;\n            });\n\n            var edgeLabelModel = self.getModel('edgeLabel');\n            // For option `edgeLabel` can be found by label.xxx.xxx on item mode.\n            var fakeSeriesModel = new Model(\n                {label: edgeLabelModel.option},\n                edgeLabelModel.parentModel,\n                ecModel\n            );\n            var emphasisEdgeLabelModel = self.getModel('emphasis.edgeLabel');\n            var emphasisFakeSeriesModel = new Model(\n                {emphasis: {label: emphasisEdgeLabelModel.option}},\n                emphasisEdgeLabelModel.parentModel,\n                ecModel\n            );\n\n            edgeData.wrapMethod('getItemModel', function (model) {\n                model.customizeGetParent(edgeGetParent);\n                return model;\n            });\n\n            function edgeGetParent(path) {\n                path = this.parsePath(path);\n                return (path && path[0] === 'label')\n                    ? fakeSeriesModel\n                    : (path && path[0] === 'emphasis' && path[1] === 'label')\n                    ? emphasisFakeSeriesModel\n                    : this.parentModel;\n            }\n        }\n    },\n\n    /**\n     * @return {module:echarts/data/Graph}\n     */\n    getGraph: function () {\n        return this.getData().graph;\n    },\n\n    /**\n     * @return {module:echarts/data/List}\n     */\n    getEdgeData: function () {\n        return this.getGraph().edgeData;\n    },\n\n    /**\n     * @return {module:echarts/data/List}\n     */\n    getCategoriesData: function () {\n        return this._categoriesData;\n    },\n\n    /**\n     * @override\n     */\n    formatTooltip: function (dataIndex, multipleSeries, dataType) {\n        if (dataType === 'edge') {\n            var nodeData = this.getData();\n            var params = this.getDataParams(dataIndex, dataType);\n            var edge = nodeData.graph.getEdgeByIndex(dataIndex);\n            var sourceName = nodeData.getName(edge.node1.dataIndex);\n            var targetName = nodeData.getName(edge.node2.dataIndex);\n\n            var html = [];\n            sourceName != null && html.push(sourceName);\n            targetName != null && html.push(targetName);\n            html = encodeHTML(html.join(' > '));\n\n            if (params.value) {\n                html += ' : ' + encodeHTML(params.value);\n            }\n            return html;\n        }\n        else { // dataType === 'node' or empty\n            return GraphSeries.superApply(this, 'formatTooltip', arguments);\n        }\n    },\n\n    _updateCategoriesData: function () {\n        var categories = map(this.option.categories || [], function (category) {\n            // Data must has value\n            return category.value != null ? category : extend({\n                value: 0\n            }, category);\n        });\n        var categoriesData = new List(['value'], this);\n        categoriesData.initData(categories);\n\n        this._categoriesData = categoriesData;\n\n        this._categoriesModels = categoriesData.mapArray(function (idx) {\n            return categoriesData.getItemModel(idx, true);\n        });\n    },\n\n    setZoom: function (zoom) {\n        this.option.zoom = zoom;\n    },\n\n    setCenter: function (center) {\n        this.option.center = center;\n    },\n\n    isAnimationEnabled: function () {\n        return GraphSeries.superCall(this, 'isAnimationEnabled')\n            // Not enable animation when do force layout\n            && !(this.get('layout') === 'force' && this.get('force.layoutAnimation'));\n    },\n\n    defaultOption: {\n        zlevel: 0,\n        z: 2,\n\n        coordinateSystem: 'view',\n\n        // Default option for all coordinate systems\n        // xAxisIndex: 0,\n        // yAxisIndex: 0,\n        // polarIndex: 0,\n        // geoIndex: 0,\n\n        legendHoverLink: true,\n\n        hoverAnimation: true,\n\n        layout: null,\n\n        focusNodeAdjacency: false,\n\n        // Configuration of circular layout\n        circular: {\n            rotateLabel: false\n        },\n        // Configuration of force directed layout\n        force: {\n            initLayout: null,\n            // Node repulsion. Can be an array to represent range.\n            repulsion: [0, 50],\n            gravity: 0.1,\n\n            // Edge length. Can be an array to represent range.\n            edgeLength: 30,\n\n            layoutAnimation: true\n        },\n\n        left: 'center',\n        top: 'center',\n        // right: null,\n        // bottom: null,\n        // width: '80%',\n        // height: '80%',\n\n        symbol: 'circle',\n        symbolSize: 10,\n\n        edgeSymbol: ['none', 'none'],\n        edgeSymbolSize: 10,\n        edgeLabel: {\n            position: 'middle'\n        },\n\n        draggable: false,\n\n        roam: false,\n\n        // Default on center of graph\n        center: null,\n\n        zoom: 1,\n        // Symbol size scale ratio in roam\n        nodeScaleRatio: 0.6,\n        // cursor: null,\n\n        // categories: [],\n\n        // data: []\n        // Or\n        // nodes: []\n        //\n        // links: []\n        // Or\n        // edges: []\n\n        label: {\n            show: false,\n            formatter: '{b}'\n        },\n\n        itemStyle: {},\n\n        lineStyle: {\n            color: '#aaa',\n            width: 1,\n            curveness: 0,\n            opacity: 0.5\n        },\n        emphasis: {\n            label: {\n                show: true\n            }\n        }\n    }\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Line path for bezier and straight line draw\n */\n\nvar straightLineProto = Line.prototype;\nvar bezierCurveProto = BezierCurve.prototype;\n\nfunction isLine(shape) {\n    return isNaN(+shape.cpx1) || isNaN(+shape.cpy1);\n}\n\nvar LinePath = extendShape({\n\n    type: 'ec-line',\n\n    style: {\n        stroke: '#000',\n        fill: null\n    },\n\n    shape: {\n        x1: 0,\n        y1: 0,\n        x2: 0,\n        y2: 0,\n        percent: 1,\n        cpx1: null,\n        cpy1: null\n    },\n\n    buildPath: function (ctx, shape) {\n        this[isLine(shape) ? '_buildPathLine' : '_buildPathCurve'](ctx, shape);\n    },\n    _buildPathLine: straightLineProto.buildPath,\n    _buildPathCurve: bezierCurveProto.buildPath,\n\n    pointAt: function (t) {\n        return this[isLine(this.shape) ? '_pointAtLine' : '_pointAtCurve'](t);\n    },\n    _pointAtLine: straightLineProto.pointAt,\n    _pointAtCurve: bezierCurveProto.pointAt,\n\n    tangentAt: function (t) {\n        var shape = this.shape;\n        var p = isLine(shape)\n            ? [shape.x2 - shape.x1, shape.y2 - shape.y1]\n            : this._tangentAtCurve(t);\n        return normalize(p, p);\n    },\n    _tangentAtCurve: bezierCurveProto.tangentAt\n\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * @module echarts/chart/helper/Line\n */\n\nvar SYMBOL_CATEGORIES = ['fromSymbol', 'toSymbol'];\n\nfunction makeSymbolTypeKey(symbolCategory) {\n    return '_' + symbolCategory + 'Type';\n}\n/**\n * @inner\n */\nfunction createSymbol$1(name, lineData, idx) {\n    var color = lineData.getItemVisual(idx, 'color');\n    var symbolType = lineData.getItemVisual(idx, name);\n    var symbolSize = lineData.getItemVisual(idx, name + 'Size');\n\n    if (!symbolType || symbolType === 'none') {\n        return;\n    }\n\n    if (!isArray(symbolSize)) {\n        symbolSize = [symbolSize, symbolSize];\n    }\n    var symbolPath = createSymbol(\n        symbolType, -symbolSize[0] / 2, -symbolSize[1] / 2,\n        symbolSize[0], symbolSize[1], color\n    );\n\n    symbolPath.name = name;\n\n    return symbolPath;\n}\n\nfunction createLine(points) {\n    var line = new LinePath({\n        name: 'line',\n        subPixelOptimize: true\n    });\n    setLinePoints(line.shape, points);\n    return line;\n}\n\nfunction setLinePoints(targetShape, points) {\n    targetShape.x1 = points[0][0];\n    targetShape.y1 = points[0][1];\n    targetShape.x2 = points[1][0];\n    targetShape.y2 = points[1][1];\n    targetShape.percent = 1;\n\n    var cp1 = points[2];\n    if (cp1) {\n        targetShape.cpx1 = cp1[0];\n        targetShape.cpy1 = cp1[1];\n    }\n    else {\n        targetShape.cpx1 = NaN;\n        targetShape.cpy1 = NaN;\n    }\n}\n\nfunction updateSymbolAndLabelBeforeLineUpdate() {\n    var lineGroup = this;\n    var symbolFrom = lineGroup.childOfName('fromSymbol');\n    var symbolTo = lineGroup.childOfName('toSymbol');\n    var label = lineGroup.childOfName('label');\n    // Quick reject\n    if (!symbolFrom && !symbolTo && label.ignore) {\n        return;\n    }\n\n    var invScale = 1;\n    var parentNode = this.parent;\n    while (parentNode) {\n        if (parentNode.scale) {\n            invScale /= parentNode.scale[0];\n        }\n        parentNode = parentNode.parent;\n    }\n\n    var line = lineGroup.childOfName('line');\n    // If line not changed\n    // FIXME Parent scale changed\n    if (!this.__dirty && !line.__dirty) {\n        return;\n    }\n\n    var percent = line.shape.percent;\n    var fromPos = line.pointAt(0);\n    var toPos = line.pointAt(percent);\n\n    var d = sub([], toPos, fromPos);\n    normalize(d, d);\n\n    if (symbolFrom) {\n        symbolFrom.attr('position', fromPos);\n        var tangent = line.tangentAt(0);\n        symbolFrom.attr('rotation', Math.PI / 2 - Math.atan2(\n            tangent[1], tangent[0]\n        ));\n        symbolFrom.attr('scale', [invScale * percent, invScale * percent]);\n    }\n    if (symbolTo) {\n        symbolTo.attr('position', toPos);\n        var tangent = line.tangentAt(1);\n        symbolTo.attr('rotation', -Math.PI / 2 - Math.atan2(\n            tangent[1], tangent[0]\n        ));\n        symbolTo.attr('scale', [invScale * percent, invScale * percent]);\n    }\n\n    if (!label.ignore) {\n        label.attr('position', toPos);\n\n        var textPosition;\n        var textAlign;\n        var textVerticalAlign;\n\n        var distance$$1 = 5 * invScale;\n        // End\n        if (label.__position === 'end') {\n            textPosition = [d[0] * distance$$1 + toPos[0], d[1] * distance$$1 + toPos[1]];\n            textAlign = d[0] > 0.8 ? 'left' : (d[0] < -0.8 ? 'right' : 'center');\n            textVerticalAlign = d[1] > 0.8 ? 'top' : (d[1] < -0.8 ? 'bottom' : 'middle');\n        }\n        // Middle\n        else if (label.__position === 'middle') {\n            var halfPercent = percent / 2;\n            var tangent = line.tangentAt(halfPercent);\n            var n = [tangent[1], -tangent[0]];\n            var cp = line.pointAt(halfPercent);\n            if (n[1] > 0) {\n                n[0] = -n[0];\n                n[1] = -n[1];\n            }\n            textPosition = [cp[0] + n[0] * distance$$1, cp[1] + n[1] * distance$$1];\n            textAlign = 'center';\n            textVerticalAlign = 'bottom';\n            var rotation = -Math.atan2(tangent[1], tangent[0]);\n            if (toPos[0] < fromPos[0]) {\n                rotation = Math.PI + rotation;\n            }\n            label.attr('rotation', rotation);\n        }\n        // Start\n        else {\n            textPosition = [-d[0] * distance$$1 + fromPos[0], -d[1] * distance$$1 + fromPos[1]];\n            textAlign = d[0] > 0.8 ? 'right' : (d[0] < -0.8 ? 'left' : 'center');\n            textVerticalAlign = d[1] > 0.8 ? 'bottom' : (d[1] < -0.8 ? 'top' : 'middle');\n        }\n        label.attr({\n            style: {\n                // Use the user specified text align and baseline first\n                textVerticalAlign: label.__verticalAlign || textVerticalAlign,\n                textAlign: label.__textAlign || textAlign\n            },\n            position: textPosition,\n            scale: [invScale, invScale]\n        });\n    }\n}\n\n/**\n * @constructor\n * @extends {module:zrender/graphic/Group}\n * @alias {module:echarts/chart/helper/Line}\n */\nfunction Line$1(lineData, idx, seriesScope) {\n    Group.call(this);\n\n    this._createLine(lineData, idx, seriesScope);\n}\n\nvar lineProto = Line$1.prototype;\n\n// Update symbol position and rotation\nlineProto.beforeUpdate = updateSymbolAndLabelBeforeLineUpdate;\n\nlineProto._createLine = function (lineData, idx, seriesScope) {\n    var seriesModel = lineData.hostModel;\n    var linePoints = lineData.getItemLayout(idx);\n    var line = createLine(linePoints);\n    line.shape.percent = 0;\n    initProps(line, {\n        shape: {\n            percent: 1\n        }\n    }, seriesModel, idx);\n\n    this.add(line);\n\n    var label = new Text({\n        name: 'label',\n        // FIXME\n        // Temporary solution for `focusNodeAdjacency`.\n        // line label do not use the opacity of lineStyle.\n        lineLabelOriginalOpacity: 1\n    });\n    this.add(label);\n\n    each$1(SYMBOL_CATEGORIES, function (symbolCategory) {\n        var symbol = createSymbol$1(symbolCategory, lineData, idx);\n        // symbols must added after line to make sure\n        // it will be updated after line#update.\n        // Or symbol position and rotation update in line#beforeUpdate will be one frame slow\n        this.add(symbol);\n        this[makeSymbolTypeKey(symbolCategory)] = lineData.getItemVisual(idx, symbolCategory);\n    }, this);\n\n    this._updateCommonStl(lineData, idx, seriesScope);\n};\n\nlineProto.updateData = function (lineData, idx, seriesScope) {\n    var seriesModel = lineData.hostModel;\n\n    var line = this.childOfName('line');\n    var linePoints = lineData.getItemLayout(idx);\n    var target = {\n        shape: {}\n    };\n\n    setLinePoints(target.shape, linePoints);\n    updateProps(line, target, seriesModel, idx);\n\n    each$1(SYMBOL_CATEGORIES, function (symbolCategory) {\n        var symbolType = lineData.getItemVisual(idx, symbolCategory);\n        var key = makeSymbolTypeKey(symbolCategory);\n        // Symbol changed\n        if (this[key] !== symbolType) {\n            this.remove(this.childOfName(symbolCategory));\n            var symbol = createSymbol$1(symbolCategory, lineData, idx);\n            this.add(symbol);\n        }\n        this[key] = symbolType;\n    }, this);\n\n    this._updateCommonStl(lineData, idx, seriesScope);\n};\n\nlineProto._updateCommonStl = function (lineData, idx, seriesScope) {\n    var seriesModel = lineData.hostModel;\n\n    var line = this.childOfName('line');\n\n    var lineStyle = seriesScope && seriesScope.lineStyle;\n    var hoverLineStyle = seriesScope && seriesScope.hoverLineStyle;\n    var labelModel = seriesScope && seriesScope.labelModel;\n    var hoverLabelModel = seriesScope && seriesScope.hoverLabelModel;\n\n    // Optimization for large dataset\n    if (!seriesScope || lineData.hasItemOption) {\n        var itemModel = lineData.getItemModel(idx);\n\n        lineStyle = itemModel.getModel('lineStyle').getLineStyle();\n        hoverLineStyle = itemModel.getModel('emphasis.lineStyle').getLineStyle();\n\n        labelModel = itemModel.getModel('label');\n        hoverLabelModel = itemModel.getModel('emphasis.label');\n    }\n\n    var visualColor = lineData.getItemVisual(idx, 'color');\n    var visualOpacity = retrieve3(\n        lineData.getItemVisual(idx, 'opacity'),\n        lineStyle.opacity,\n        1\n    );\n\n    line.useStyle(defaults(\n        {\n            strokeNoScale: true,\n            fill: 'none',\n            stroke: visualColor,\n            opacity: visualOpacity\n        },\n        lineStyle\n    ));\n    line.hoverStyle = hoverLineStyle;\n\n    // Update symbol\n    each$1(SYMBOL_CATEGORIES, function (symbolCategory) {\n        var symbol = this.childOfName(symbolCategory);\n        if (symbol) {\n            symbol.setColor(visualColor);\n            symbol.setStyle({\n                opacity: visualOpacity\n            });\n        }\n    }, this);\n\n    var showLabel = labelModel.getShallow('show');\n    var hoverShowLabel = hoverLabelModel.getShallow('show');\n\n    var label = this.childOfName('label');\n    var defaultLabelColor;\n    var baseText;\n\n    // FIXME: the logic below probably should be merged to `graphic.setLabelStyle`.\n    if (showLabel || hoverShowLabel) {\n        defaultLabelColor = visualColor || '#000';\n\n        baseText = seriesModel.getFormattedLabel(idx, 'normal', lineData.dataType);\n        if (baseText == null) {\n            var rawVal = seriesModel.getRawValue(idx);\n            baseText = rawVal == null\n                ? lineData.getName(idx)\n                : isFinite(rawVal)\n                ? round$1(rawVal)\n                : rawVal;\n        }\n    }\n    var normalText = showLabel ? baseText : null;\n    var emphasisText = hoverShowLabel\n        ? retrieve2(\n            seriesModel.getFormattedLabel(idx, 'emphasis', lineData.dataType),\n            baseText\n        )\n        : null;\n\n    var labelStyle = label.style;\n\n    // Always set `textStyle` even if `normalStyle.text` is null, because default\n    // values have to be set on `normalStyle`.\n    if (normalText != null || emphasisText != null) {\n        setTextStyle(label.style, labelModel, {\n            text: normalText\n        }, {\n            autoColor: defaultLabelColor\n        });\n\n        label.__textAlign = labelStyle.textAlign;\n        label.__verticalAlign = labelStyle.textVerticalAlign;\n        // 'start', 'middle', 'end'\n        label.__position = labelModel.get('position') || 'middle';\n    }\n\n    if (emphasisText != null) {\n        // Only these properties supported in this emphasis style here.\n        label.hoverStyle = {\n            text: emphasisText,\n            textFill: hoverLabelModel.getTextColor(true),\n            // For merging hover style to normal style, do not use\n            // `hoverLabelModel.getFont()` here.\n            fontStyle: hoverLabelModel.getShallow('fontStyle'),\n            fontWeight: hoverLabelModel.getShallow('fontWeight'),\n            fontSize: hoverLabelModel.getShallow('fontSize'),\n            fontFamily: hoverLabelModel.getShallow('fontFamily')\n        };\n    }\n    else {\n        label.hoverStyle = {\n            text: null\n        };\n    }\n\n    label.ignore = !showLabel && !hoverShowLabel;\n\n    setHoverStyle(this);\n};\n\nlineProto.highlight = function () {\n    this.trigger('emphasis');\n};\n\nlineProto.downplay = function () {\n    this.trigger('normal');\n};\n\nlineProto.updateLayout = function (lineData, idx) {\n    this.setLinePoints(lineData.getItemLayout(idx));\n};\n\nlineProto.setLinePoints = function (points) {\n    var linePath = this.childOfName('line');\n    setLinePoints(linePath.shape, points);\n    linePath.dirty();\n};\n\ninherits(Line$1, Group);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * @module echarts/chart/helper/LineDraw\n */\n\n// import IncrementalDisplayable from 'zrender/src/graphic/IncrementalDisplayable';\n\n/**\n * @alias module:echarts/component/marker/LineDraw\n * @constructor\n */\nfunction LineDraw(ctor) {\n    this._ctor = ctor || Line$1;\n\n    this.group = new Group();\n}\n\nvar lineDrawProto = LineDraw.prototype;\n\nlineDrawProto.isPersistent = function () {\n    return true;\n};\n\n/**\n * @param {module:echarts/data/List} lineData\n */\nlineDrawProto.updateData = function (lineData) {\n    var lineDraw = this;\n    var group = lineDraw.group;\n\n    var oldLineData = lineDraw._lineData;\n    lineDraw._lineData = lineData;\n\n    // There is no oldLineData only when first rendering or switching from\n    // stream mode to normal mode, where previous elements should be removed.\n    if (!oldLineData) {\n        group.removeAll();\n    }\n\n    var seriesScope = makeSeriesScope$1(lineData);\n\n    lineData.diff(oldLineData)\n        .add(function (idx) {\n            doAdd(lineDraw, lineData, idx, seriesScope);\n        })\n        .update(function (newIdx, oldIdx) {\n            doUpdate(lineDraw, oldLineData, lineData, oldIdx, newIdx, seriesScope);\n        })\n        .remove(function (idx) {\n            group.remove(oldLineData.getItemGraphicEl(idx));\n        })\n        .execute();\n};\n\nfunction doAdd(lineDraw, lineData, idx, seriesScope) {\n    var itemLayout = lineData.getItemLayout(idx);\n\n    if (!lineNeedsDraw(itemLayout)) {\n        return;\n    }\n\n    var el = new lineDraw._ctor(lineData, idx, seriesScope);\n    lineData.setItemGraphicEl(idx, el);\n    lineDraw.group.add(el);\n}\n\nfunction doUpdate(lineDraw, oldLineData, newLineData, oldIdx, newIdx, seriesScope) {\n    var itemEl = oldLineData.getItemGraphicEl(oldIdx);\n\n    if (!lineNeedsDraw(newLineData.getItemLayout(newIdx))) {\n        lineDraw.group.remove(itemEl);\n        return;\n    }\n\n    if (!itemEl) {\n        itemEl = new lineDraw._ctor(newLineData, newIdx, seriesScope);\n    }\n    else {\n        itemEl.updateData(newLineData, newIdx, seriesScope);\n    }\n\n    newLineData.setItemGraphicEl(newIdx, itemEl);\n\n    lineDraw.group.add(itemEl);\n}\n\nlineDrawProto.updateLayout = function () {\n    var lineData = this._lineData;\n\n    // Do not support update layout in incremental mode.\n    if (!lineData) {\n        return;\n    }\n\n    lineData.eachItemGraphicEl(function (el, idx) {\n        el.updateLayout(lineData, idx);\n    }, this);\n};\n\nlineDrawProto.incrementalPrepareUpdate = function (lineData) {\n    this._seriesScope = makeSeriesScope$1(lineData);\n    this._lineData = null;\n    this.group.removeAll();\n};\n\nlineDrawProto.incrementalUpdate = function (taskParams, lineData) {\n    function updateIncrementalAndHover(el) {\n        if (!el.isGroup) {\n            el.incremental = el.useHoverLayer = true;\n        }\n    }\n\n    for (var idx = taskParams.start; idx < taskParams.end; idx++) {\n        var itemLayout = lineData.getItemLayout(idx);\n\n        if (lineNeedsDraw(itemLayout)) {\n            var el = new this._ctor(lineData, idx, this._seriesScope);\n            el.traverse(updateIncrementalAndHover);\n\n            this.group.add(el);\n            lineData.setItemGraphicEl(idx, el);\n        }\n    }\n};\n\nfunction makeSeriesScope$1(lineData) {\n    var hostModel = lineData.hostModel;\n    return {\n        lineStyle: hostModel.getModel('lineStyle').getLineStyle(),\n        hoverLineStyle: hostModel.getModel('emphasis.lineStyle').getLineStyle(),\n        labelModel: hostModel.getModel('label'),\n        hoverLabelModel: hostModel.getModel('emphasis.label')\n    };\n}\n\nlineDrawProto.remove = function () {\n    this._clearIncremental();\n    this._incremental = null;\n    this.group.removeAll();\n};\n\nlineDrawProto._clearIncremental = function () {\n    var incremental = this._incremental;\n    if (incremental) {\n        incremental.clearDisplaybles();\n    }\n};\n\nfunction isPointNaN(pt) {\n    return isNaN(pt[0]) || isNaN(pt[1]);\n}\n\nfunction lineNeedsDraw(pts) {\n    return !isPointNaN(pts[0]) && !isPointNaN(pts[1]);\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nfunction getNodeGlobalScale(seriesModel) {\n    var coordSys = seriesModel.coordinateSystem;\n    if (coordSys.type !== 'view') {\n        return 1;\n    }\n\n    var nodeScaleRatio = seriesModel.option.nodeScaleRatio;\n\n    var groupScale = coordSys.scale;\n    var groupZoom = (groupScale && groupScale[0]) || 1;\n    // Scale node when zoom changes\n    var roamZoom = coordSys.getZoom();\n    var nodeScale = (roamZoom - 1) * nodeScaleRatio + 1;\n\n    return nodeScale / groupZoom;\n}\n\nfunction getSymbolSize$1(node) {\n    var symbolSize = node.getVisual('symbolSize');\n    if (symbolSize instanceof Array) {\n        symbolSize = (symbolSize[0] + symbolSize[1]) / 2;\n    }\n    return +symbolSize;\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar v1 = [];\nvar v2 = [];\nvar v3 = [];\nvar quadraticAt$1 = quadraticAt;\nvar v2DistSquare = distSquare;\nvar mathAbs$1 = Math.abs;\nfunction intersectCurveCircle(curvePoints, center, radius) {\n    var p0 = curvePoints[0];\n    var p1 = curvePoints[1];\n    var p2 = curvePoints[2];\n\n    var d = Infinity;\n    var t;\n    var radiusSquare = radius * radius;\n    var interval = 0.1;\n\n    for (var _t = 0.1; _t <= 0.9; _t += 0.1) {\n        v1[0] = quadraticAt$1(p0[0], p1[0], p2[0], _t);\n        v1[1] = quadraticAt$1(p0[1], p1[1], p2[1], _t);\n        var diff = mathAbs$1(v2DistSquare(v1, center) - radiusSquare);\n        if (diff < d) {\n            d = diff;\n            t = _t;\n        }\n    }\n\n    // Assume the segment is monotone，Find root through Bisection method\n    // At most 32 iteration\n    for (var i = 0; i < 32; i++) {\n        // var prev = t - interval;\n        var next = t + interval;\n        // v1[0] = quadraticAt(p0[0], p1[0], p2[0], prev);\n        // v1[1] = quadraticAt(p0[1], p1[1], p2[1], prev);\n        v2[0] = quadraticAt$1(p0[0], p1[0], p2[0], t);\n        v2[1] = quadraticAt$1(p0[1], p1[1], p2[1], t);\n        v3[0] = quadraticAt$1(p0[0], p1[0], p2[0], next);\n        v3[1] = quadraticAt$1(p0[1], p1[1], p2[1], next);\n\n        var diff = v2DistSquare(v2, center) - radiusSquare;\n        if (mathAbs$1(diff) < 1e-2) {\n            break;\n        }\n\n        // var prevDiff = v2DistSquare(v1, center) - radiusSquare;\n        var nextDiff = v2DistSquare(v3, center) - radiusSquare;\n\n        interval /= 2;\n        if (diff < 0) {\n            if (nextDiff >= 0) {\n                t = t + interval;\n            }\n            else {\n                t = t - interval;\n            }\n        }\n        else {\n            if (nextDiff >= 0) {\n                t = t - interval;\n            }\n            else {\n                t = t + interval;\n            }\n        }\n    }\n\n    return t;\n}\n\n// Adjust edge to avoid\nvar adjustEdge = function (graph, scale$$1) {\n    var tmp0 = [];\n    var quadraticSubdivide$$1 = quadraticSubdivide;\n    var pts = [[], [], []];\n    var pts2 = [[], []];\n    var v = [];\n    scale$$1 /= 2;\n\n    graph.eachEdge(function (edge, idx) {\n        var linePoints = edge.getLayout();\n        var fromSymbol = edge.getVisual('fromSymbol');\n        var toSymbol = edge.getVisual('toSymbol');\n\n        if (!linePoints.__original) {\n            linePoints.__original = [\n                clone$1(linePoints[0]),\n                clone$1(linePoints[1])\n            ];\n            if (linePoints[2]) {\n                linePoints.__original.push(clone$1(linePoints[2]));\n            }\n        }\n        var originalPoints = linePoints.__original;\n        // Quadratic curve\n        if (linePoints[2] != null) {\n            copy(pts[0], originalPoints[0]);\n            copy(pts[1], originalPoints[2]);\n            copy(pts[2], originalPoints[1]);\n            if (fromSymbol && fromSymbol !== 'none') {\n                var symbolSize = getSymbolSize$1(edge.node1);\n\n                var t = intersectCurveCircle(pts, originalPoints[0], symbolSize * scale$$1);\n                // Subdivide and get the second\n                quadraticSubdivide$$1(pts[0][0], pts[1][0], pts[2][0], t, tmp0);\n                pts[0][0] = tmp0[3];\n                pts[1][0] = tmp0[4];\n                quadraticSubdivide$$1(pts[0][1], pts[1][1], pts[2][1], t, tmp0);\n                pts[0][1] = tmp0[3];\n                pts[1][1] = tmp0[4];\n            }\n            if (toSymbol && toSymbol !== 'none') {\n                var symbolSize = getSymbolSize$1(edge.node2);\n\n                var t = intersectCurveCircle(pts, originalPoints[1], symbolSize * scale$$1);\n                // Subdivide and get the first\n                quadraticSubdivide$$1(pts[0][0], pts[1][0], pts[2][0], t, tmp0);\n                pts[1][0] = tmp0[1];\n                pts[2][0] = tmp0[2];\n                quadraticSubdivide$$1(pts[0][1], pts[1][1], pts[2][1], t, tmp0);\n                pts[1][1] = tmp0[1];\n                pts[2][1] = tmp0[2];\n            }\n            // Copy back to layout\n            copy(linePoints[0], pts[0]);\n            copy(linePoints[1], pts[2]);\n            copy(linePoints[2], pts[1]);\n        }\n        // Line\n        else {\n            copy(pts2[0], originalPoints[0]);\n            copy(pts2[1], originalPoints[1]);\n\n            sub(v, pts2[1], pts2[0]);\n            normalize(v, v);\n            if (fromSymbol && fromSymbol !== 'none') {\n\n                var symbolSize = getSymbolSize$1(edge.node1);\n\n                scaleAndAdd(pts2[0], pts2[0], v, symbolSize * scale$$1);\n            }\n            if (toSymbol && toSymbol !== 'none') {\n                var symbolSize = getSymbolSize$1(edge.node2);\n\n                scaleAndAdd(pts2[1], pts2[1], v, -symbolSize * scale$$1);\n            }\n            copy(linePoints[0], pts2[0]);\n            copy(linePoints[1], pts2[1]);\n        }\n    });\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar FOCUS_ADJACENCY = '__focusNodeAdjacency';\nvar UNFOCUS_ADJACENCY = '__unfocusNodeAdjacency';\n\nvar nodeOpacityPath = ['itemStyle', 'opacity'];\nvar lineOpacityPath = ['lineStyle', 'opacity'];\n\nfunction getItemOpacity(item, opacityPath) {\n    var opacity = item.getVisual('opacity');\n    return opacity != null ? opacity : item.getModel().get(opacityPath);\n}\n\nfunction fadeOutItem(item, opacityPath, opacityRatio) {\n    var el = item.getGraphicEl();\n    var opacity = getItemOpacity(item, opacityPath);\n\n    if (opacityRatio != null) {\n        opacity == null && (opacity = 1);\n        opacity *= opacityRatio;\n    }\n\n    el.downplay && el.downplay();\n    el.traverse(function (child) {\n        if (!child.isGroup) {\n            var opct = child.lineLabelOriginalOpacity;\n            if (opct == null || opacityRatio != null) {\n                opct = opacity;\n            }\n            child.setStyle('opacity', opct);\n        }\n    });\n}\n\nfunction fadeInItem(item, opacityPath) {\n    var opacity = getItemOpacity(item, opacityPath);\n    var el = item.getGraphicEl();\n    // Should go back to normal opacity first, consider hoverLayer,\n    // where current state is copied to elMirror, and support\n    // emphasis opacity here.\n    el.traverse(function (child) {\n        !child.isGroup && child.setStyle('opacity', opacity);\n    });\n    el.highlight && el.highlight();\n}\n\nextendChartView({\n\n    type: 'graph',\n\n    init: function (ecModel, api) {\n        var symbolDraw = new SymbolDraw();\n        var lineDraw = new LineDraw();\n        var group = this.group;\n\n        this._controller = new RoamController(api.getZr());\n        this._controllerHost = {target: group};\n\n        group.add(symbolDraw.group);\n        group.add(lineDraw.group);\n\n        this._symbolDraw = symbolDraw;\n        this._lineDraw = lineDraw;\n\n        this._firstRender = true;\n    },\n\n    render: function (seriesModel, ecModel, api) {\n        var coordSys = seriesModel.coordinateSystem;\n\n        this._model = seriesModel;\n\n        var symbolDraw = this._symbolDraw;\n        var lineDraw = this._lineDraw;\n\n        var group = this.group;\n\n        if (coordSys.type === 'view') {\n            var groupNewProp = {\n                position: coordSys.position,\n                scale: coordSys.scale\n            };\n            if (this._firstRender) {\n                group.attr(groupNewProp);\n            }\n            else {\n                updateProps(group, groupNewProp, seriesModel);\n            }\n        }\n        // Fix edge contact point with node\n        adjustEdge(seriesModel.getGraph(), getNodeGlobalScale(seriesModel));\n\n        var data = seriesModel.getData();\n        symbolDraw.updateData(data);\n\n        var edgeData = seriesModel.getEdgeData();\n        lineDraw.updateData(edgeData);\n\n        this._updateNodeAndLinkScale();\n\n        this._updateController(seriesModel, ecModel, api);\n\n        clearTimeout(this._layoutTimeout);\n        var forceLayout = seriesModel.forceLayout;\n        var layoutAnimation = seriesModel.get('force.layoutAnimation');\n        if (forceLayout) {\n            this._startForceLayoutIteration(forceLayout, layoutAnimation);\n        }\n\n        data.eachItemGraphicEl(function (el, idx) {\n            var itemModel = data.getItemModel(idx);\n            // Update draggable\n            el.off('drag').off('dragend');\n            var draggable = itemModel.get('draggable');\n            if (draggable) {\n                el.on('drag', function () {\n                    if (forceLayout) {\n                        forceLayout.warmUp();\n                        !this._layouting\n                            && this._startForceLayoutIteration(forceLayout, layoutAnimation);\n                        forceLayout.setFixed(idx);\n                        // Write position back to layout\n                        data.setItemLayout(idx, el.position);\n                    }\n                }, this).on('dragend', function () {\n                    if (forceLayout) {\n                        forceLayout.setUnfixed(idx);\n                    }\n                }, this);\n            }\n            el.setDraggable(draggable && forceLayout);\n\n            el[FOCUS_ADJACENCY] && el.off('mouseover', el[FOCUS_ADJACENCY]);\n            el[UNFOCUS_ADJACENCY] && el.off('mouseout', el[UNFOCUS_ADJACENCY]);\n\n            if (itemModel.get('focusNodeAdjacency')) {\n                el.on('mouseover', el[FOCUS_ADJACENCY] = function () {\n                    api.dispatchAction({\n                        type: 'focusNodeAdjacency',\n                        seriesId: seriesModel.id,\n                        dataIndex: el.dataIndex\n                    });\n                });\n                el.on('mouseout', el[UNFOCUS_ADJACENCY] = function () {\n                    api.dispatchAction({\n                        type: 'unfocusNodeAdjacency',\n                        seriesId: seriesModel.id\n                    });\n                });\n            }\n\n        }, this);\n\n        data.graph.eachEdge(function (edge) {\n            var el = edge.getGraphicEl();\n\n            el[FOCUS_ADJACENCY] && el.off('mouseover', el[FOCUS_ADJACENCY]);\n            el[UNFOCUS_ADJACENCY] && el.off('mouseout', el[UNFOCUS_ADJACENCY]);\n\n            if (edge.getModel().get('focusNodeAdjacency')) {\n                el.on('mouseover', el[FOCUS_ADJACENCY] = function () {\n                    api.dispatchAction({\n                        type: 'focusNodeAdjacency',\n                        seriesId: seriesModel.id,\n                        edgeDataIndex: edge.dataIndex\n                    });\n                });\n                el.on('mouseout', el[UNFOCUS_ADJACENCY] = function () {\n                    api.dispatchAction({\n                        type: 'unfocusNodeAdjacency',\n                        seriesId: seriesModel.id\n                    });\n                });\n            }\n        });\n\n        var circularRotateLabel = seriesModel.get('layout') === 'circular'\n            && seriesModel.get('circular.rotateLabel');\n        var cx = data.getLayout('cx');\n        var cy = data.getLayout('cy');\n        data.eachItemGraphicEl(function (el, idx) {\n            var itemModel = data.getItemModel(idx);\n            var labelRotate = itemModel.get('label.rotate') || 0;\n            var symbolPath = el.getSymbolPath();\n            if (circularRotateLabel) {\n                var pos = data.getItemLayout(idx);\n                var rad = Math.atan2(pos[1] - cy, pos[0] - cx);\n                if (rad < 0) {\n                    rad = Math.PI * 2 + rad;\n                }\n                var isLeft = pos[0] < cx;\n                if (isLeft) {\n                    rad = rad - Math.PI;\n                }\n                var textPosition = isLeft ? 'left' : 'right';\n                modifyLabelStyle(\n                    symbolPath,\n                    {\n                        textRotation: -rad,\n                        textPosition: textPosition,\n                        textOrigin: 'center'\n                    },\n                    {\n                        textPosition: textPosition\n                    }\n                );\n            }\n            else {\n                modifyLabelStyle(\n                    symbolPath,\n                    {\n                        textRotation: labelRotate *= Math.PI / 180\n                    }\n                );\n            }\n        });\n\n        this._firstRender = false;\n    },\n\n    dispose: function () {\n        this._controller && this._controller.dispose();\n        this._controllerHost = {};\n    },\n\n    focusNodeAdjacency: function (seriesModel, ecModel, api, payload) {\n        var data = this._model.getData();\n        var graph = data.graph;\n        var dataIndex = payload.dataIndex;\n        var edgeDataIndex = payload.edgeDataIndex;\n\n        var node = graph.getNodeByIndex(dataIndex);\n        var edge = graph.getEdgeByIndex(edgeDataIndex);\n\n        if (!node && !edge) {\n            return;\n        }\n\n        graph.eachNode(function (node) {\n            fadeOutItem(node, nodeOpacityPath, 0.1);\n        });\n        graph.eachEdge(function (edge) {\n            fadeOutItem(edge, lineOpacityPath, 0.1);\n        });\n\n        if (node) {\n            fadeInItem(node, nodeOpacityPath);\n            each$1(node.edges, function (adjacentEdge) {\n                if (adjacentEdge.dataIndex < 0) {\n                    return;\n                }\n                fadeInItem(adjacentEdge, lineOpacityPath);\n                fadeInItem(adjacentEdge.node1, nodeOpacityPath);\n                fadeInItem(adjacentEdge.node2, nodeOpacityPath);\n            });\n        }\n        if (edge) {\n            fadeInItem(edge, lineOpacityPath);\n            fadeInItem(edge.node1, nodeOpacityPath);\n            fadeInItem(edge.node2, nodeOpacityPath);\n        }\n    },\n\n    unfocusNodeAdjacency: function (seriesModel, ecModel, api, payload) {\n        var graph = this._model.getData().graph;\n\n        graph.eachNode(function (node) {\n            fadeOutItem(node, nodeOpacityPath);\n        });\n        graph.eachEdge(function (edge) {\n            fadeOutItem(edge, lineOpacityPath);\n        });\n    },\n\n    _startForceLayoutIteration: function (forceLayout, layoutAnimation) {\n        var self = this;\n        (function step() {\n            forceLayout.step(function (stopped) {\n                self.updateLayout(self._model);\n                (self._layouting = !stopped) && (\n                    layoutAnimation\n                        ? (self._layoutTimeout = setTimeout(step, 16))\n                        : step()\n                );\n            });\n        })();\n    },\n\n    _updateController: function (seriesModel, ecModel, api) {\n        var controller = this._controller;\n        var controllerHost = this._controllerHost;\n        var group = this.group;\n\n        controller.setPointerChecker(function (e, x, y) {\n            var rect = group.getBoundingRect();\n            rect.applyTransform(group.transform);\n            return rect.contain(x, y)\n                && !onIrrelevantElement(e, api, seriesModel);\n        });\n\n        if (seriesModel.coordinateSystem.type !== 'view') {\n            controller.disable();\n            return;\n        }\n        controller.enable(seriesModel.get('roam'));\n        controllerHost.zoomLimit = seriesModel.get('scaleLimit');\n        controllerHost.zoom = seriesModel.coordinateSystem.getZoom();\n\n        controller\n            .off('pan')\n            .off('zoom')\n            .on('pan', function (e) {\n                updateViewOnPan(controllerHost, e.dx, e.dy);\n                api.dispatchAction({\n                    seriesId: seriesModel.id,\n                    type: 'graphRoam',\n                    dx: e.dx,\n                    dy: e.dy\n                });\n            })\n            .on('zoom', function (e) {\n                updateViewOnZoom(controllerHost, e.scale, e.originX, e.originY);\n                api.dispatchAction({\n                    seriesId: seriesModel.id,\n                    type: 'graphRoam',\n                    zoom: e.scale,\n                    originX: e.originX,\n                    originY: e.originY\n                });\n                this._updateNodeAndLinkScale();\n                adjustEdge(seriesModel.getGraph(), getNodeGlobalScale(seriesModel));\n                this._lineDraw.updateLayout();\n            }, this);\n    },\n\n    _updateNodeAndLinkScale: function () {\n        var seriesModel = this._model;\n        var data = seriesModel.getData();\n\n        var nodeScale = getNodeGlobalScale(seriesModel);\n        var invScale = [nodeScale, nodeScale];\n\n        data.eachItemGraphicEl(function (el, idx) {\n            el.attr('scale', invScale);\n        });\n    },\n\n    updateLayout: function (seriesModel) {\n        adjustEdge(seriesModel.getGraph(), getNodeGlobalScale(seriesModel));\n\n        this._symbolDraw.updateLayout();\n        this._lineDraw.updateLayout();\n    },\n\n    remove: function (ecModel, api) {\n        this._symbolDraw && this._symbolDraw.remove();\n        this._lineDraw && this._lineDraw.remove();\n    }\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * @payload\n * @property {number} [seriesIndex]\n * @property {string} [seriesId]\n * @property {string} [seriesName]\n * @property {number} [dataIndex]\n */\nregisterAction({\n    type: 'focusNodeAdjacency',\n    event: 'focusNodeAdjacency',\n    update: 'series:focusNodeAdjacency'\n}, function () {});\n\n/**\n * @payload\n * @property {number} [seriesIndex]\n * @property {string} [seriesId]\n * @property {string} [seriesName]\n */\nregisterAction({\n    type: 'unfocusNodeAdjacency',\n    event: 'unfocusNodeAdjacency',\n    update: 'series:unfocusNodeAdjacency'\n}, function () {});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar actionInfo = {\n    type: 'graphRoam',\n    event: 'graphRoam',\n    update: 'none'\n};\n\n/**\n * @payload\n * @property {string} name Series name\n * @property {number} [dx]\n * @property {number} [dy]\n * @property {number} [zoom]\n * @property {number} [originX]\n * @property {number} [originY]\n */\nregisterAction(actionInfo, function (payload, ecModel) {\n    ecModel.eachComponent({mainType: 'series', query: payload}, function (seriesModel) {\n        var coordSys = seriesModel.coordinateSystem;\n\n        var res = updateCenterAndZoom(coordSys, payload);\n\n        seriesModel.setCenter\n            && seriesModel.setCenter(res.center);\n\n        seriesModel.setZoom\n            && seriesModel.setZoom(res.zoom);\n    });\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\nvar categoryFilter = function (ecModel) {\n    var legendModels = ecModel.findComponents({\n        mainType: 'legend'\n    });\n    if (!legendModels || !legendModels.length) {\n        return;\n    }\n    ecModel.eachSeriesByType('graph', function (graphSeries) {\n        var categoriesData = graphSeries.getCategoriesData();\n        var graph = graphSeries.getGraph();\n        var data = graph.data;\n\n        var categoryNames = categoriesData.mapArray(categoriesData.getName);\n\n        data.filterSelf(function (idx) {\n            var model = data.getItemModel(idx);\n            var category = model.getShallow('category');\n            if (category != null) {\n                if (typeof category === 'number') {\n                    category = categoryNames[category];\n                }\n                // If in any legend component the status is not selected.\n                for (var i = 0; i < legendModels.length; i++) {\n                    if (!legendModels[i].isSelected(category)) {\n                        return false;\n                    }\n                }\n            }\n            return true;\n        });\n    }, this);\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\nvar categoryVisual = function (ecModel) {\n\n    var paletteScope = {};\n    ecModel.eachSeriesByType('graph', function (seriesModel) {\n        var categoriesData = seriesModel.getCategoriesData();\n        var data = seriesModel.getData();\n\n        var categoryNameIdxMap = {};\n\n        categoriesData.each(function (idx) {\n            var name = categoriesData.getName(idx);\n            // Add prefix to avoid conflict with Object.prototype.\n            categoryNameIdxMap['ec-' + name] = idx;\n            var itemModel = categoriesData.getItemModel(idx);\n\n            var color = itemModel.get('itemStyle.color')\n                || seriesModel.getColorFromPalette(name, paletteScope);\n            categoriesData.setItemVisual(idx, 'color', color);\n\n            var itemStyleList = ['opacity', 'symbol', 'symbolSize', 'symbolKeepAspect'];\n            for (var i = 0; i < itemStyleList.length; i++) {\n                var itemStyle = itemModel.getShallow(itemStyleList[i], true);\n                if (itemStyle != null) {\n                    categoriesData.setItemVisual(idx, itemStyleList[i], itemStyle);\n                }\n            }\n        });\n\n        // Assign category color to visual\n        if (categoriesData.count()) {\n            data.each(function (idx) {\n                var model = data.getItemModel(idx);\n                var category = model.getShallow('category');\n                if (category != null) {\n                    if (typeof category === 'string') {\n                        category = categoryNameIdxMap['ec-' + category];\n                    }\n\n                    var itemStyleList = ['color', 'opacity', 'symbol', 'symbolSize', 'symbolKeepAspect'];\n\n                    for (var i = 0; i < itemStyleList.length; i++) {\n                        if (data.getItemVisual(idx, itemStyleList[i], true) == null) {\n                            data.setItemVisual(\n                                idx, itemStyleList[i],\n                                categoriesData.getItemVisual(category, itemStyleList[i])\n                            );\n                        }\n                    }\n                }\n            });\n        }\n    });\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\nfunction normalize$1(a) {\n    if (!(a instanceof Array)) {\n        a = [a, a];\n    }\n    return a;\n}\n\nvar edgeVisual = function (ecModel) {\n    ecModel.eachSeriesByType('graph', function (seriesModel) {\n        var graph = seriesModel.getGraph();\n        var edgeData = seriesModel.getEdgeData();\n        var symbolType = normalize$1(seriesModel.get('edgeSymbol'));\n        var symbolSize = normalize$1(seriesModel.get('edgeSymbolSize'));\n\n        var colorQuery = 'lineStyle.color'.split('.');\n        var opacityQuery = 'lineStyle.opacity'.split('.');\n\n        edgeData.setVisual('fromSymbol', symbolType && symbolType[0]);\n        edgeData.setVisual('toSymbol', symbolType && symbolType[1]);\n        edgeData.setVisual('fromSymbolSize', symbolSize && symbolSize[0]);\n        edgeData.setVisual('toSymbolSize', symbolSize && symbolSize[1]);\n        edgeData.setVisual('color', seriesModel.get(colorQuery));\n        edgeData.setVisual('opacity', seriesModel.get(opacityQuery));\n\n        edgeData.each(function (idx) {\n            var itemModel = edgeData.getItemModel(idx);\n            var edge = graph.getEdgeByIndex(idx);\n            var symbolType = normalize$1(itemModel.getShallow('symbol', true));\n            var symbolSize = normalize$1(itemModel.getShallow('symbolSize', true));\n            // Edge visual must after node visual\n            var color = itemModel.get(colorQuery);\n            var opacity = itemModel.get(opacityQuery);\n            switch (color) {\n                case 'source':\n                    color = edge.node1.getVisual('color');\n                    break;\n                case 'target':\n                    color = edge.node2.getVisual('color');\n                    break;\n            }\n\n            symbolType[0] && edge.setVisual('fromSymbol', symbolType[0]);\n            symbolType[1] && edge.setVisual('toSymbol', symbolType[1]);\n            symbolSize[0] && edge.setVisual('fromSymbolSize', symbolSize[0]);\n            symbolSize[1] && edge.setVisual('toSymbolSize', symbolSize[1]);\n\n            edge.setVisual('color', color);\n            edge.setVisual('opacity', opacity);\n        });\n    });\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nfunction simpleLayout$1(seriesModel) {\n    var coordSys = seriesModel.coordinateSystem;\n    if (coordSys && coordSys.type !== 'view') {\n        return;\n    }\n    var graph = seriesModel.getGraph();\n\n    graph.eachNode(function (node) {\n        var model = node.getModel();\n        node.setLayout([+model.get('x'), +model.get('y')]);\n    });\n\n    simpleLayoutEdge(graph);\n}\n\nfunction simpleLayoutEdge(graph) {\n    graph.eachEdge(function (edge) {\n        var curveness = edge.getModel().get('lineStyle.curveness') || 0;\n        var p1 = clone$1(edge.node1.getLayout());\n        var p2 = clone$1(edge.node2.getLayout());\n        var points = [p1, p2];\n        if (+curveness) {\n            points.push([\n                (p1[0] + p2[0]) / 2 - (p1[1] - p2[1]) * curveness,\n                (p1[1] + p2[1]) / 2 - (p2[0] - p1[0]) * curveness\n            ]);\n        }\n        edge.setLayout(points);\n    });\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar simpleLayout = function (ecModel, api) {\n    ecModel.eachSeriesByType('graph', function (seriesModel) {\n        var layout = seriesModel.get('layout');\n        var coordSys = seriesModel.coordinateSystem;\n        if (coordSys && coordSys.type !== 'view') {\n            var data = seriesModel.getData();\n\n            var dimensions = [];\n            each$1(coordSys.dimensions, function (coordDim) {\n                dimensions = dimensions.concat(data.mapDimension(coordDim, true));\n            });\n\n            for (var dataIndex = 0; dataIndex < data.count(); dataIndex++) {\n                var value = [];\n                var hasValue = false;\n                for (var i = 0; i < dimensions.length; i++) {\n                    var val = data.get(dimensions[i], dataIndex);\n                    if (!isNaN(val)) {\n                        hasValue = true;\n                    }\n                    value.push(val);\n                }\n                if (hasValue) {\n                    data.setItemLayout(dataIndex, coordSys.dataToPoint(value));\n                }\n                else {\n                    // Also {Array.<number>}, not undefined to avoid if...else... statement\n                    data.setItemLayout(dataIndex, [NaN, NaN]);\n                }\n            }\n\n            simpleLayoutEdge(data.graph);\n        }\n        else if (!layout || layout === 'none') {\n            simpleLayout$1(seriesModel);\n        }\n    });\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar PI$3 = Math.PI;\n\nvar _symbolRadiansHalf = [];\n\n/**\n * `basedOn` can be:\n * 'value':\n *     This layout is not accurate and have same bad case. For example,\n *     if the min value is very smaller than the max value, the nodes\n *     with the min value probably overlap even though there is enough\n *     space to layout them. So we only use this approach in the as the\n *     init layout of the force layout.\n *     FIXME\n *     Probably we do not need this method any more but use\n *     `basedOn: 'symbolSize'` in force layout if\n *     delay its init operations to GraphView.\n * 'symbolSize':\n *     This approach work only if all of the symbol size calculated.\n *     That is, the progressive rendering is not applied to graph.\n *     FIXME\n *     If progressive rendering is applied to graph some day,\n *     probably we have to use `basedOn: 'value'`.\n *\n * @param {module:echarts/src/model/Series} seriesModel\n * @param {string} basedOn 'value' or 'symbolSize'\n */\nfunction circularLayout$1(seriesModel, basedOn) {\n    var coordSys = seriesModel.coordinateSystem;\n    if (coordSys && coordSys.type !== 'view') {\n        return;\n    }\n\n    var rect = coordSys.getBoundingRect();\n\n    var nodeData = seriesModel.getData();\n    var graph = nodeData.graph;\n\n    var cx = rect.width / 2 + rect.x;\n    var cy = rect.height / 2 + rect.y;\n    var r = Math.min(rect.width, rect.height) / 2;\n    var count = nodeData.count();\n\n    nodeData.setLayout({\n        cx: cx,\n        cy: cy\n    });\n\n    if (!count) {\n        return;\n    }\n\n    _layoutNodesBasedOn[basedOn](seriesModel, coordSys, graph, nodeData, r, cx, cy, count);\n\n    graph.eachEdge(function (edge) {\n        var curveness = edge.getModel().get('lineStyle.curveness') || 0;\n        var p1 = clone$1(edge.node1.getLayout());\n        var p2 = clone$1(edge.node2.getLayout());\n        var cp1;\n        var x12 = (p1[0] + p2[0]) / 2;\n        var y12 = (p1[1] + p2[1]) / 2;\n        if (+curveness) {\n            curveness *= 3;\n            cp1 = [\n                cx * curveness + x12 * (1 - curveness),\n                cy * curveness + y12 * (1 - curveness)\n            ];\n        }\n        edge.setLayout([p1, p2, cp1]);\n    });\n}\n\nvar _layoutNodesBasedOn = {\n\n    value: function (seriesModel, coordSys, graph, nodeData, r, cx, cy, count) {\n        var angle = 0;\n        var sum = nodeData.getSum('value');\n        var unitAngle = Math.PI * 2 / (sum || count);\n\n        graph.eachNode(function (node) {\n            var value = node.getValue('value');\n            var radianHalf = unitAngle * (sum ? value : 1) / 2;\n\n            angle += radianHalf;\n            node.setLayout([\n                r * Math.cos(angle) + cx,\n                r * Math.sin(angle) + cy\n            ]);\n            angle += radianHalf;\n        });\n    },\n\n    symbolSize: function (seriesModel, coordSys, graph, nodeData, r, cx, cy, count) {\n        var sumRadian = 0;\n        _symbolRadiansHalf.length = count;\n\n        var nodeScale = getNodeGlobalScale(seriesModel);\n\n        graph.eachNode(function (node) {\n            var symbolSize = getSymbolSize$1(node);\n\n            // Normally this case will not happen, but we still add\n            // some the defensive code (2px is an arbitrary value).\n            isNaN(symbolSize) && (symbolSize = 2);\n            symbolSize < 0 && (symbolSize = 0);\n\n            symbolSize *= nodeScale;\n\n            var symbolRadianHalf = Math.asin(symbolSize / 2 / r);\n            // when `symbolSize / 2` is bigger than `r`.\n            isNaN(symbolRadianHalf) && (symbolRadianHalf = PI$3 / 2);\n            _symbolRadiansHalf[node.dataIndex] = symbolRadianHalf;\n            sumRadian += symbolRadianHalf * 2;\n        });\n\n        var halfRemainRadian = (2 * PI$3 - sumRadian) / count / 2;\n\n        var angle = 0;\n        graph.eachNode(function (node) {\n            var radianHalf = halfRemainRadian + _symbolRadiansHalf[node.dataIndex];\n\n            angle += radianHalf;\n            node.setLayout([\n                r * Math.cos(angle) + cx,\n                r * Math.sin(angle) + cy\n            ]);\n            angle += radianHalf;\n        });\n    }\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar circularLayout = function (ecModel) {\n    ecModel.eachSeriesByType('graph', function (seriesModel) {\n        if (seriesModel.get('layout') === 'circular') {\n            circularLayout$1(seriesModel, 'symbolSize');\n        }\n    });\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/*\n* A third-party license is embeded for some of the code in this file:\n* Some formulas were originally copied from \"d3.js\" with some\n* modifications made for this project.\n* (See more details in the comment of the method \"step\" below.)\n* The use of the source code of this file is also subject to the terms\n* and consitions of the license of \"d3.js\" (BSD-3Clause, see\n* </licenses/LICENSE-d3>).\n*/\n\nvar scaleAndAdd$2 = scaleAndAdd;\n\n// function adjacentNode(n, e) {\n//     return e.n1 === n ? e.n2 : e.n1;\n// }\n\nfunction forceLayout$1(nodes, edges, opts) {\n    var rect = opts.rect;\n    var width = rect.width;\n    var height = rect.height;\n    var center = [rect.x + width / 2, rect.y + height / 2];\n    // var scale = opts.scale || 1;\n    var gravity = opts.gravity == null ? 0.1 : opts.gravity;\n\n    // for (var i = 0; i < edges.length; i++) {\n    //     var e = edges[i];\n    //     var n1 = e.n1;\n    //     var n2 = e.n2;\n    //     n1.edges = n1.edges || [];\n    //     n2.edges = n2.edges || [];\n    //     n1.edges.push(e);\n    //     n2.edges.push(e);\n    // }\n    // Init position\n    for (var i = 0; i < nodes.length; i++) {\n        var n = nodes[i];\n        if (!n.p) {\n            n.p = create(\n                width * (Math.random() - 0.5) + center[0],\n                height * (Math.random() - 0.5) + center[1]\n            );\n        }\n        n.pp = clone$1(n.p);\n        n.edges = null;\n    }\n\n    // Formula in 'Graph Drawing by Force-directed Placement'\n    // var k = scale * Math.sqrt(width * height / nodes.length);\n    // var k2 = k * k;\n\n    var friction = 0.6;\n\n    return {\n        warmUp: function () {\n            friction = 0.5;\n        },\n\n        setFixed: function (idx) {\n            nodes[idx].fixed = true;\n        },\n\n        setUnfixed: function (idx) {\n            nodes[idx].fixed = false;\n        },\n\n        /**\n         * Some formulas were originally copied from \"d3.js\"\n         * https://github.com/d3/d3/blob/b516d77fb8566b576088e73410437494717ada26/src/layout/force.js\n         * with some modifications made for this project.\n         * See the license statement at the head of this file.\n         */\n        step: function (cb) {\n            var v12 = [];\n            var nLen = nodes.length;\n            for (var i = 0; i < edges.length; i++) {\n                var e = edges[i];\n                var n1 = e.n1;\n                var n2 = e.n2;\n\n                sub(v12, n2.p, n1.p);\n                var d = len(v12) - e.d;\n                var w = n2.w / (n1.w + n2.w);\n\n                if (isNaN(w)) {\n                    w = 0;\n                }\n\n                normalize(v12, v12);\n\n                !n1.fixed && scaleAndAdd$2(n1.p, n1.p, v12, w * d * friction);\n                !n2.fixed && scaleAndAdd$2(n2.p, n2.p, v12, -(1 - w) * d * friction);\n            }\n            // Gravity\n            for (var i = 0; i < nLen; i++) {\n                var n = nodes[i];\n                if (!n.fixed) {\n                    sub(v12, center, n.p);\n                    // var d = vec2.len(v12);\n                    // vec2.scale(v12, v12, 1 / d);\n                    // var gravityFactor = gravity;\n                    scaleAndAdd$2(n.p, n.p, v12, gravity * friction);\n                }\n            }\n\n            // Repulsive\n            // PENDING\n            for (var i = 0; i < nLen; i++) {\n                var n1 = nodes[i];\n                for (var j = i + 1; j < nLen; j++) {\n                    var n2 = nodes[j];\n                    sub(v12, n2.p, n1.p);\n                    var d = len(v12);\n                    if (d === 0) {\n                        // Random repulse\n                        set(v12, Math.random() - 0.5, Math.random() - 0.5);\n                        d = 1;\n                    }\n                    var repFact = (n1.rep + n2.rep) / d / d;\n                    !n1.fixed && scaleAndAdd$2(n1.pp, n1.pp, v12, repFact);\n                    !n2.fixed && scaleAndAdd$2(n2.pp, n2.pp, v12, -repFact);\n                }\n            }\n            var v = [];\n            for (var i = 0; i < nLen; i++) {\n                var n = nodes[i];\n                if (!n.fixed) {\n                    sub(v, n.p, n.pp);\n                    scaleAndAdd$2(n.p, n.p, v, friction);\n                    copy(n.pp, n.p);\n                }\n            }\n\n            friction = friction * 0.992;\n\n            cb && cb(nodes, edges, friction < 0.01);\n        }\n    };\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar forceLayout = function (ecModel) {\n    ecModel.eachSeriesByType('graph', function (graphSeries) {\n        var coordSys = graphSeries.coordinateSystem;\n        if (coordSys && coordSys.type !== 'view') {\n            return;\n        }\n        if (graphSeries.get('layout') === 'force') {\n            var preservedPoints = graphSeries.preservedPoints || {};\n            var graph = graphSeries.getGraph();\n            var nodeData = graph.data;\n            var edgeData = graph.edgeData;\n            var forceModel = graphSeries.getModel('force');\n            var initLayout = forceModel.get('initLayout');\n            if (graphSeries.preservedPoints) {\n                nodeData.each(function (idx) {\n                    var id = nodeData.getId(idx);\n                    nodeData.setItemLayout(idx, preservedPoints[id] || [NaN, NaN]);\n                });\n            }\n            else if (!initLayout || initLayout === 'none') {\n                simpleLayout$1(graphSeries);\n            }\n            else if (initLayout === 'circular') {\n                circularLayout$1(graphSeries, 'value');\n            }\n\n            var nodeDataExtent = nodeData.getDataExtent('value');\n            var edgeDataExtent = edgeData.getDataExtent('value');\n            // var edgeDataExtent = edgeData.getDataExtent('value');\n            var repulsion = forceModel.get('repulsion');\n            var edgeLength = forceModel.get('edgeLength');\n            if (!isArray(repulsion)) {\n                repulsion = [repulsion, repulsion];\n            }\n            if (!isArray(edgeLength)) {\n                edgeLength = [edgeLength, edgeLength];\n            }\n            // Larger value has smaller length\n            edgeLength = [edgeLength[1], edgeLength[0]];\n\n            var nodes = nodeData.mapArray('value', function (value, idx) {\n                var point = nodeData.getItemLayout(idx);\n                var rep = linearMap(value, nodeDataExtent, repulsion);\n                if (isNaN(rep)) {\n                    rep = (repulsion[0] + repulsion[1]) / 2;\n                }\n                return {\n                    w: rep,\n                    rep: rep,\n                    fixed: nodeData.getItemModel(idx).get('fixed'),\n                    p: (!point || isNaN(point[0]) || isNaN(point[1])) ? null : point\n                };\n            });\n            var edges = edgeData.mapArray('value', function (value, idx) {\n                var edge = graph.getEdgeByIndex(idx);\n                var d = linearMap(value, edgeDataExtent, edgeLength);\n                if (isNaN(d)) {\n                    d = (edgeLength[0] + edgeLength[1]) / 2;\n                }\n                return {\n                    n1: nodes[edge.node1.dataIndex],\n                    n2: nodes[edge.node2.dataIndex],\n                    d: d,\n                    curveness: edge.getModel().get('lineStyle.curveness') || 0\n                };\n            });\n\n            var coordSys = graphSeries.coordinateSystem;\n            var rect = coordSys.getBoundingRect();\n            var forceInstance = forceLayout$1(nodes, edges, {\n                rect: rect,\n                gravity: forceModel.get('gravity')\n            });\n            var oldStep = forceInstance.step;\n            forceInstance.step = function (cb) {\n                for (var i = 0, l = nodes.length; i < l; i++) {\n                    if (nodes[i].fixed) {\n                        // Write back to layout instance\n                        copy(nodes[i].p, graph.getNodeByIndex(i).getLayout());\n                    }\n                }\n                oldStep(function (nodes, edges, stopped) {\n                    for (var i = 0, l = nodes.length; i < l; i++) {\n                        if (!nodes[i].fixed) {\n                            graph.getNodeByIndex(i).setLayout(nodes[i].p);\n                        }\n                        preservedPoints[nodeData.getId(i)] = nodes[i].p;\n                    }\n                    for (var i = 0, l = edges.length; i < l; i++) {\n                        var e = edges[i];\n                        var edge = graph.getEdgeByIndex(i);\n                        var p1 = e.n1.p;\n                        var p2 = e.n2.p;\n                        var points = edge.getLayout();\n                        points = points ? points.slice() : [];\n                        points[0] = points[0] || [];\n                        points[1] = points[1] || [];\n                        copy(points[0], p1);\n                        copy(points[1], p2);\n                        if (+e.curveness) {\n                            points[2] = [\n                                (p1[0] + p2[0]) / 2 - (p1[1] - p2[1]) * e.curveness,\n                                (p1[1] + p2[1]) / 2 - (p2[0] - p1[0]) * e.curveness\n                            ];\n                        }\n                        edge.setLayout(points);\n                    }\n                    // Update layout\n\n                    cb && cb(stopped);\n                });\n            };\n            graphSeries.forceLayout = forceInstance;\n            graphSeries.preservedPoints = preservedPoints;\n\n            // Step to get the layout\n            forceInstance.step();\n        }\n        else {\n            // Remove prev injected forceLayout instance\n            graphSeries.forceLayout = null;\n        }\n    });\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n// FIXME Where to create the simple view coordinate system\nfunction getViewRect$1(seriesModel, api, aspect) {\n    var option = seriesModel.getBoxLayoutParams();\n    option.aspect = aspect;\n    return getLayoutRect(option, {\n        width: api.getWidth(),\n        height: api.getHeight()\n    });\n}\n\nvar createView = function (ecModel, api) {\n    var viewList = [];\n    ecModel.eachSeriesByType('graph', function (seriesModel) {\n        var coordSysType = seriesModel.get('coordinateSystem');\n        if (!coordSysType || coordSysType === 'view') {\n\n            var data = seriesModel.getData();\n            var positions = data.mapArray(function (idx) {\n                var itemModel = data.getItemModel(idx);\n                return [+itemModel.get('x'), +itemModel.get('y')];\n            });\n\n            var min = [];\n            var max = [];\n\n            fromPoints(positions, min, max);\n\n            // If width or height is 0\n            if (max[0] - min[0] === 0) {\n                max[0] += 1;\n                min[0] -= 1;\n            }\n            if (max[1] - min[1] === 0) {\n                max[1] += 1;\n                min[1] -= 1;\n            }\n            var aspect = (max[0] - min[0]) / (max[1] - min[1]);\n            // FIXME If get view rect after data processed?\n            var viewRect = getViewRect$1(seriesModel, api, aspect);\n            // Position may be NaN, use view rect instead\n            if (isNaN(aspect)) {\n                min = [viewRect.x, viewRect.y];\n                max = [viewRect.x + viewRect.width, viewRect.y + viewRect.height];\n            }\n\n            var bbWidth = max[0] - min[0];\n            var bbHeight = max[1] - min[1];\n\n            var viewWidth = viewRect.width;\n            var viewHeight = viewRect.height;\n\n            var viewCoordSys = seriesModel.coordinateSystem = new View();\n            viewCoordSys.zoomLimit = seriesModel.get('scaleLimit');\n\n            viewCoordSys.setBoundingRect(\n                min[0], min[1], bbWidth, bbHeight\n            );\n            viewCoordSys.setViewRect(\n                viewRect.x, viewRect.y, viewWidth, viewHeight\n            );\n\n            // Update roam info\n            viewCoordSys.setCenter(seriesModel.get('center'));\n            viewCoordSys.setZoom(seriesModel.get('zoom'));\n\n            viewList.push(viewCoordSys);\n        }\n    });\n\n    return viewList;\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nregisterProcessor(categoryFilter);\n\nregisterVisual(visualSymbol('graph', 'circle', null));\nregisterVisual(categoryVisual);\nregisterVisual(edgeVisual);\n\nregisterLayout(simpleLayout);\nregisterLayout(PRIORITY.VISUAL.POST_CHART_LAYOUT, circularLayout);\nregisterLayout(forceLayout);\n\n// Graph view coordinate system\nregisterCoordinateSystem('graphView', {\n    create: createView\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar GaugeSeries = SeriesModel.extend({\n\n    type: 'series.gauge',\n\n    getInitialData: function (option, ecModel) {\n        var dataOpt = option.data || [];\n        if (!isArray(dataOpt)) {\n            dataOpt = [dataOpt];\n        }\n        option.data = dataOpt;\n        return createListSimply(this, ['value']);\n    },\n\n    defaultOption: {\n        zlevel: 0,\n        z: 2,\n        // 默认全局居中\n        center: ['50%', '50%'],\n        legendHoverLink: true,\n        radius: '75%',\n        startAngle: 225,\n        endAngle: -45,\n        clockwise: true,\n        // 最小值\n        min: 0,\n        // 最大值\n        max: 100,\n        // 分割段数，默认为10\n        splitNumber: 10,\n        // 坐标轴线\n        axisLine: {\n            // 默认显示，属性show控制显示与否\n            show: true,\n            lineStyle: {       // 属性lineStyle控制线条样式\n                color: [[0.2, '#91c7ae'], [0.8, '#63869e'], [1, '#c23531']],\n                width: 30\n            }\n        },\n        // 分隔线\n        splitLine: {\n            // 默认显示，属性show控制显示与否\n            show: true,\n            // 属性length控制线长\n            length: 30,\n            // 属性lineStyle（详见lineStyle）控制线条样式\n            lineStyle: {\n                color: '#eee',\n                width: 2,\n                type: 'solid'\n            }\n        },\n        // 坐标轴小标记\n        axisTick: {\n            // 属性show控制显示与否，默认不显示\n            show: true,\n            // 每份split细分多少段\n            splitNumber: 5,\n            // 属性length控制线长\n            length: 8,\n            // 属性lineStyle控制线条样式\n            lineStyle: {\n                color: '#eee',\n                width: 1,\n                type: 'solid'\n            }\n        },\n        axisLabel: {\n            show: true,\n            distance: 5,\n            // formatter: null,\n            color: 'auto'\n        },\n        pointer: {\n            show: true,\n            length: '80%',\n            width: 8\n        },\n        itemStyle: {\n            color: 'auto'\n        },\n        title: {\n            show: true,\n            // x, y，单位px\n            offsetCenter: [0, '-40%'],\n            // 其余属性默认使用全局文本样式，详见TEXTSTYLE\n            color: '#333',\n            fontSize: 15\n        },\n        detail: {\n            show: true,\n            backgroundColor: 'rgba(0,0,0,0)',\n            borderWidth: 0,\n            borderColor: '#ccc',\n            width: 100,\n            height: null, // self-adaption\n            padding: [5, 10],\n            // x, y，单位px\n            offsetCenter: [0, '40%'],\n            // formatter: null,\n            // 其余属性默认使用全局文本样式，详见TEXTSTYLE\n            color: 'auto',\n            fontSize: 30\n        }\n    }\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar PointerPath = Path.extend({\n\n    type: 'echartsGaugePointer',\n\n    shape: {\n        angle: 0,\n\n        width: 10,\n\n        r: 10,\n\n        x: 0,\n\n        y: 0\n    },\n\n    buildPath: function (ctx, shape) {\n        var mathCos = Math.cos;\n        var mathSin = Math.sin;\n\n        var r = shape.r;\n        var width = shape.width;\n        var angle = shape.angle;\n        var x = shape.x - mathCos(angle) * width * (width >= r / 3 ? 1 : 2);\n        var y = shape.y - mathSin(angle) * width * (width >= r / 3 ? 1 : 2);\n\n        angle = shape.angle - Math.PI / 2;\n        ctx.moveTo(x, y);\n        ctx.lineTo(\n            shape.x + mathCos(angle) * width,\n            shape.y + mathSin(angle) * width\n        );\n        ctx.lineTo(\n            shape.x + mathCos(shape.angle) * r,\n            shape.y + mathSin(shape.angle) * r\n        );\n        ctx.lineTo(\n            shape.x - mathCos(angle) * width,\n            shape.y - mathSin(angle) * width\n        );\n        ctx.lineTo(x, y);\n        return;\n    }\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nfunction parsePosition(seriesModel, api) {\n    var center = seriesModel.get('center');\n    var width = api.getWidth();\n    var height = api.getHeight();\n    var size = Math.min(width, height);\n    var cx = parsePercent$1(center[0], api.getWidth());\n    var cy = parsePercent$1(center[1], api.getHeight());\n    var r = parsePercent$1(seriesModel.get('radius'), size / 2);\n\n    return {\n        cx: cx,\n        cy: cy,\n        r: r\n    };\n}\n\nfunction formatLabel(label, labelFormatter) {\n    if (labelFormatter) {\n        if (typeof labelFormatter === 'string') {\n            label = labelFormatter.replace('{value}', label != null ? label : '');\n        }\n        else if (typeof labelFormatter === 'function') {\n            label = labelFormatter(label);\n        }\n    }\n\n    return label;\n}\n\nvar PI2$5 = Math.PI * 2;\n\nvar GaugeView = Chart.extend({\n\n    type: 'gauge',\n\n    render: function (seriesModel, ecModel, api) {\n\n        this.group.removeAll();\n\n        var colorList = seriesModel.get('axisLine.lineStyle.color');\n        var posInfo = parsePosition(seriesModel, api);\n\n        this._renderMain(\n            seriesModel, ecModel, api, colorList, posInfo\n        );\n    },\n\n    dispose: function () {},\n\n    _renderMain: function (seriesModel, ecModel, api, colorList, posInfo) {\n        var group = this.group;\n\n        var axisLineModel = seriesModel.getModel('axisLine');\n        var lineStyleModel = axisLineModel.getModel('lineStyle');\n\n        var clockwise = seriesModel.get('clockwise');\n        var startAngle = -seriesModel.get('startAngle') / 180 * Math.PI;\n        var endAngle = -seriesModel.get('endAngle') / 180 * Math.PI;\n\n        var angleRangeSpan = (endAngle - startAngle) % PI2$5;\n\n        var prevEndAngle = startAngle;\n        var axisLineWidth = lineStyleModel.get('width');\n        var showAxis = axisLineModel.get('show');\n\n        for (var i = 0; showAxis && i < colorList.length; i++) {\n            // Clamp\n            var percent = Math.min(Math.max(colorList[i][0], 0), 1);\n            var endAngle = startAngle + angleRangeSpan * percent;\n            var sector = new Sector({\n                shape: {\n                    startAngle: prevEndAngle,\n                    endAngle: endAngle,\n                    cx: posInfo.cx,\n                    cy: posInfo.cy,\n                    clockwise: clockwise,\n                    r0: posInfo.r - axisLineWidth,\n                    r: posInfo.r\n                },\n                silent: true\n            });\n\n            sector.setStyle({\n                fill: colorList[i][1]\n            });\n\n            sector.setStyle(lineStyleModel.getLineStyle(\n                // Because we use sector to simulate arc\n                // so the properties for stroking are useless\n                ['color', 'borderWidth', 'borderColor']\n            ));\n\n            group.add(sector);\n\n            prevEndAngle = endAngle;\n        }\n\n        var getColor = function (percent) {\n            // Less than 0\n            if (percent <= 0) {\n                return colorList[0][1];\n            }\n            for (var i = 0; i < colorList.length; i++) {\n                if (colorList[i][0] >= percent\n                    && (i === 0 ? 0 : colorList[i - 1][0]) < percent\n                ) {\n                    return colorList[i][1];\n                }\n            }\n            // More than 1\n            return colorList[i - 1][1];\n        };\n\n        if (!clockwise) {\n            var tmp = startAngle;\n            startAngle = endAngle;\n            endAngle = tmp;\n        }\n\n        this._renderTicks(\n            seriesModel, ecModel, api, getColor, posInfo,\n            startAngle, endAngle, clockwise\n        );\n\n        this._renderPointer(\n            seriesModel, ecModel, api, getColor, posInfo,\n            startAngle, endAngle, clockwise\n        );\n\n        this._renderTitle(\n            seriesModel, ecModel, api, getColor, posInfo\n        );\n        this._renderDetail(\n            seriesModel, ecModel, api, getColor, posInfo\n        );\n    },\n\n    _renderTicks: function (\n        seriesModel, ecModel, api, getColor, posInfo,\n        startAngle, endAngle, clockwise\n    ) {\n        var group = this.group;\n        var cx = posInfo.cx;\n        var cy = posInfo.cy;\n        var r = posInfo.r;\n\n        var minVal = +seriesModel.get('min');\n        var maxVal = +seriesModel.get('max');\n\n        var splitLineModel = seriesModel.getModel('splitLine');\n        var tickModel = seriesModel.getModel('axisTick');\n        var labelModel = seriesModel.getModel('axisLabel');\n\n        var splitNumber = seriesModel.get('splitNumber');\n        var subSplitNumber = tickModel.get('splitNumber');\n\n        var splitLineLen = parsePercent$1(\n            splitLineModel.get('length'), r\n        );\n        var tickLen = parsePercent$1(\n            tickModel.get('length'), r\n        );\n\n        var angle = startAngle;\n        var step = (endAngle - startAngle) / splitNumber;\n        var subStep = step / subSplitNumber;\n\n        var splitLineStyle = splitLineModel.getModel('lineStyle').getLineStyle();\n        var tickLineStyle = tickModel.getModel('lineStyle').getLineStyle();\n\n        for (var i = 0; i <= splitNumber; i++) {\n            var unitX = Math.cos(angle);\n            var unitY = Math.sin(angle);\n            // Split line\n            if (splitLineModel.get('show')) {\n                var splitLine = new Line({\n                    shape: {\n                        x1: unitX * r + cx,\n                        y1: unitY * r + cy,\n                        x2: unitX * (r - splitLineLen) + cx,\n                        y2: unitY * (r - splitLineLen) + cy\n                    },\n                    style: splitLineStyle,\n                    silent: true\n                });\n                if (splitLineStyle.stroke === 'auto') {\n                    splitLine.setStyle({\n                        stroke: getColor(i / splitNumber)\n                    });\n                }\n\n                group.add(splitLine);\n            }\n\n            // Label\n            if (labelModel.get('show')) {\n                var label = formatLabel(\n                    round$1(i / splitNumber * (maxVal - minVal) + minVal),\n                    labelModel.get('formatter')\n                );\n                var distance = labelModel.get('distance');\n                var autoColor = getColor(i / splitNumber);\n\n                group.add(new Text({\n                    style: setTextStyle({}, labelModel, {\n                        text: label,\n                        x: unitX * (r - splitLineLen - distance) + cx,\n                        y: unitY * (r - splitLineLen - distance) + cy,\n                        textVerticalAlign: unitY < -0.4 ? 'top' : (unitY > 0.4 ? 'bottom' : 'middle'),\n                        textAlign: unitX < -0.4 ? 'left' : (unitX > 0.4 ? 'right' : 'center')\n                    }, {autoColor: autoColor}),\n                    silent: true\n                }));\n            }\n\n            // Axis tick\n            if (tickModel.get('show') && i !== splitNumber) {\n                for (var j = 0; j <= subSplitNumber; j++) {\n                    var unitX = Math.cos(angle);\n                    var unitY = Math.sin(angle);\n                    var tickLine = new Line({\n                        shape: {\n                            x1: unitX * r + cx,\n                            y1: unitY * r + cy,\n                            x2: unitX * (r - tickLen) + cx,\n                            y2: unitY * (r - tickLen) + cy\n                        },\n                        silent: true,\n                        style: tickLineStyle\n                    });\n\n                    if (tickLineStyle.stroke === 'auto') {\n                        tickLine.setStyle({\n                            stroke: getColor((i + j / subSplitNumber) / splitNumber)\n                        });\n                    }\n\n                    group.add(tickLine);\n                    angle += subStep;\n                }\n                angle -= subStep;\n            }\n            else {\n                angle += step;\n            }\n        }\n    },\n\n    _renderPointer: function (\n        seriesModel, ecModel, api, getColor, posInfo,\n        startAngle, endAngle, clockwise\n    ) {\n\n        var group = this.group;\n        var oldData = this._data;\n\n        if (!seriesModel.get('pointer.show')) {\n            // Remove old element\n            oldData && oldData.eachItemGraphicEl(function (el) {\n                group.remove(el);\n            });\n            return;\n        }\n\n        var valueExtent = [+seriesModel.get('min'), +seriesModel.get('max')];\n        var angleExtent = [startAngle, endAngle];\n\n        var data = seriesModel.getData();\n        var valueDim = data.mapDimension('value');\n\n        data.diff(oldData)\n            .add(function (idx) {\n                var pointer = new PointerPath({\n                    shape: {\n                        angle: startAngle\n                    }\n                });\n\n                initProps(pointer, {\n                    shape: {\n                        angle: linearMap(data.get(valueDim, idx), valueExtent, angleExtent, true)\n                    }\n                }, seriesModel);\n\n                group.add(pointer);\n                data.setItemGraphicEl(idx, pointer);\n            })\n            .update(function (newIdx, oldIdx) {\n                var pointer = oldData.getItemGraphicEl(oldIdx);\n\n                updateProps(pointer, {\n                    shape: {\n                        angle: linearMap(data.get(valueDim, newIdx), valueExtent, angleExtent, true)\n                    }\n                }, seriesModel);\n\n                group.add(pointer);\n                data.setItemGraphicEl(newIdx, pointer);\n            })\n            .remove(function (idx) {\n                var pointer = oldData.getItemGraphicEl(idx);\n                group.remove(pointer);\n            })\n            .execute();\n\n        data.eachItemGraphicEl(function (pointer, idx) {\n            var itemModel = data.getItemModel(idx);\n            var pointerModel = itemModel.getModel('pointer');\n\n            pointer.setShape({\n                x: posInfo.cx,\n                y: posInfo.cy,\n                width: parsePercent$1(\n                    pointerModel.get('width'), posInfo.r\n                ),\n                r: parsePercent$1(pointerModel.get('length'), posInfo.r)\n            });\n\n            pointer.useStyle(itemModel.getModel('itemStyle').getItemStyle());\n\n            if (pointer.style.fill === 'auto') {\n                pointer.setStyle('fill', getColor(\n                    linearMap(data.get(valueDim, idx), valueExtent, [0, 1], true)\n                ));\n            }\n\n            setHoverStyle(\n                pointer, itemModel.getModel('emphasis.itemStyle').getItemStyle()\n            );\n        });\n\n        this._data = data;\n    },\n\n    _renderTitle: function (\n        seriesModel, ecModel, api, getColor, posInfo\n    ) {\n        var data = seriesModel.getData();\n        var valueDim = data.mapDimension('value');\n        var titleModel = seriesModel.getModel('title');\n        if (titleModel.get('show')) {\n            var offsetCenter = titleModel.get('offsetCenter');\n            var x = posInfo.cx + parsePercent$1(offsetCenter[0], posInfo.r);\n            var y = posInfo.cy + parsePercent$1(offsetCenter[1], posInfo.r);\n\n            var minVal = +seriesModel.get('min');\n            var maxVal = +seriesModel.get('max');\n            var value = seriesModel.getData().get(valueDim, 0);\n            var autoColor = getColor(\n                linearMap(value, [minVal, maxVal], [0, 1], true)\n            );\n\n            this.group.add(new Text({\n                silent: true,\n                style: setTextStyle({}, titleModel, {\n                    x: x,\n                    y: y,\n                    // FIXME First data name ?\n                    text: data.getName(0),\n                    textAlign: 'center',\n                    textVerticalAlign: 'middle'\n                }, {autoColor: autoColor, forceRich: true})\n            }));\n        }\n    },\n\n    _renderDetail: function (\n        seriesModel, ecModel, api, getColor, posInfo\n    ) {\n        var detailModel = seriesModel.getModel('detail');\n        var minVal = +seriesModel.get('min');\n        var maxVal = +seriesModel.get('max');\n        if (detailModel.get('show')) {\n            var offsetCenter = detailModel.get('offsetCenter');\n            var x = posInfo.cx + parsePercent$1(offsetCenter[0], posInfo.r);\n            var y = posInfo.cy + parsePercent$1(offsetCenter[1], posInfo.r);\n            var width = parsePercent$1(detailModel.get('width'), posInfo.r);\n            var height = parsePercent$1(detailModel.get('height'), posInfo.r);\n            var data = seriesModel.getData();\n            var value = data.get(data.mapDimension('value'), 0);\n            var autoColor = getColor(\n                linearMap(value, [minVal, maxVal], [0, 1], true)\n            );\n\n            this.group.add(new Text({\n                silent: true,\n                style: setTextStyle({}, detailModel, {\n                    x: x,\n                    y: y,\n                    text: formatLabel(\n                        // FIXME First data name ?\n                        value, detailModel.get('formatter')\n                    ),\n                    textWidth: isNaN(width) ? null : width,\n                    textHeight: isNaN(height) ? null : height,\n                    textAlign: 'center',\n                    textVerticalAlign: 'middle'\n                }, {autoColor: autoColor, forceRich: true})\n            }));\n        }\n    }\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar FunnelSeries = extendSeriesModel({\n\n    type: 'series.funnel',\n\n    init: function (option) {\n        FunnelSeries.superApply(this, 'init', arguments);\n\n        // Enable legend selection for each data item\n        // Use a function instead of direct access because data reference may changed\n        this.legendDataProvider = function () {\n            return this.getRawData();\n        };\n        // Extend labelLine emphasis\n        this._defaultLabelLine(option);\n    },\n\n    getInitialData: function (option, ecModel) {\n        return createListSimply(this, ['value']);\n    },\n\n    _defaultLabelLine: function (option) {\n        // Extend labelLine emphasis\n        defaultEmphasis(option, 'labelLine', ['show']);\n\n        var labelLineNormalOpt = option.labelLine;\n        var labelLineEmphasisOpt = option.emphasis.labelLine;\n        // Not show label line if `label.normal.show = false`\n        labelLineNormalOpt.show = labelLineNormalOpt.show\n            && option.label.show;\n        labelLineEmphasisOpt.show = labelLineEmphasisOpt.show\n            && option.emphasis.label.show;\n    },\n\n    // Overwrite\n    getDataParams: function (dataIndex) {\n        var data = this.getData();\n        var params = FunnelSeries.superCall(this, 'getDataParams', dataIndex);\n        var valueDim = data.mapDimension('value');\n        var sum = data.getSum(valueDim);\n        // Percent is 0 if sum is 0\n        params.percent = !sum ? 0 : +(data.get(valueDim, dataIndex) / sum * 100).toFixed(2);\n\n        params.$vars.push('percent');\n        return params;\n    },\n\n    defaultOption: {\n        zlevel: 0,                  // 一级层叠\n        z: 2,                       // 二级层叠\n        legendHoverLink: true,\n        left: 80,\n        top: 60,\n        right: 80,\n        bottom: 60,\n        // width: {totalWidth} - left - right,\n        // height: {totalHeight} - top - bottom,\n\n        // 默认取数据最小最大值\n        // min: 0,\n        // max: 100,\n        minSize: '0%',\n        maxSize: '100%',\n        sort: 'descending', // 'ascending', 'descending'\n        gap: 0,\n        funnelAlign: 'center',\n        label: {\n            show: true,\n            position: 'outer'\n            // formatter: 标签文本格式器，同Tooltip.formatter，不支持异步回调\n        },\n        labelLine: {\n            show: true,\n            length: 20,\n            lineStyle: {\n                // color: 各异,\n                width: 1,\n                type: 'solid'\n            }\n        },\n        itemStyle: {\n            // color: 各异,\n            borderColor: '#fff',\n            borderWidth: 1\n        },\n        emphasis: {\n            label: {\n                show: true\n            }\n        }\n    }\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Piece of pie including Sector, Label, LabelLine\n * @constructor\n * @extends {module:zrender/graphic/Group}\n */\nfunction FunnelPiece(data, idx) {\n\n    Group.call(this);\n\n    var polygon = new Polygon();\n    var labelLine = new Polyline();\n    var text = new Text();\n    this.add(polygon);\n    this.add(labelLine);\n    this.add(text);\n\n    this.highDownOnUpdate = function (fromState, toState) {\n        if (toState === 'emphasis') {\n            labelLine.ignore = labelLine.hoverIgnore;\n            text.ignore = text.hoverIgnore;\n        }\n        else {\n            labelLine.ignore = labelLine.normalIgnore;\n            text.ignore = text.normalIgnore;\n        }\n    };\n\n    this.updateData(data, idx, true);\n}\n\nvar funnelPieceProto = FunnelPiece.prototype;\n\nvar opacityAccessPath = ['itemStyle', 'opacity'];\nfunnelPieceProto.updateData = function (data, idx, firstCreate) {\n\n    var polygon = this.childAt(0);\n\n    var seriesModel = data.hostModel;\n    var itemModel = data.getItemModel(idx);\n    var layout = data.getItemLayout(idx);\n    var opacity = data.getItemModel(idx).get(opacityAccessPath);\n    opacity = opacity == null ? 1 : opacity;\n\n    // Reset style\n    polygon.useStyle({});\n\n    if (firstCreate) {\n        polygon.setShape({\n            points: layout.points\n        });\n        polygon.setStyle({opacity: 0});\n        initProps(polygon, {\n            style: {\n                opacity: opacity\n            }\n        }, seriesModel, idx);\n    }\n    else {\n        updateProps(polygon, {\n            style: {\n                opacity: opacity\n            },\n            shape: {\n                points: layout.points\n            }\n        }, seriesModel, idx);\n    }\n\n    // Update common style\n    var itemStyleModel = itemModel.getModel('itemStyle');\n    var visualColor = data.getItemVisual(idx, 'color');\n\n    polygon.setStyle(\n        defaults(\n            {\n                lineJoin: 'round',\n                fill: visualColor\n            },\n            itemStyleModel.getItemStyle(['opacity'])\n        )\n    );\n    polygon.hoverStyle = itemStyleModel.getModel('emphasis').getItemStyle();\n\n    this._updateLabel(data, idx);\n\n    setHoverStyle(this);\n};\n\nfunnelPieceProto._updateLabel = function (data, idx) {\n\n    var labelLine = this.childAt(1);\n    var labelText = this.childAt(2);\n\n    var seriesModel = data.hostModel;\n    var itemModel = data.getItemModel(idx);\n    var layout = data.getItemLayout(idx);\n    var labelLayout = layout.label;\n    var visualColor = data.getItemVisual(idx, 'color');\n\n    updateProps(labelLine, {\n        shape: {\n            points: labelLayout.linePoints || labelLayout.linePoints\n        }\n    }, seriesModel, idx);\n\n    updateProps(labelText, {\n        style: {\n            x: labelLayout.x,\n            y: labelLayout.y\n        }\n    }, seriesModel, idx);\n    labelText.attr({\n        rotation: labelLayout.rotation,\n        origin: [labelLayout.x, labelLayout.y],\n        z2: 10\n    });\n\n    var labelModel = itemModel.getModel('label');\n    var labelHoverModel = itemModel.getModel('emphasis.label');\n    var labelLineModel = itemModel.getModel('labelLine');\n    var labelLineHoverModel = itemModel.getModel('emphasis.labelLine');\n    var visualColor = data.getItemVisual(idx, 'color');\n\n    setLabelStyle(\n        labelText.style, labelText.hoverStyle = {}, labelModel, labelHoverModel,\n        {\n            labelFetcher: data.hostModel,\n            labelDataIndex: idx,\n            defaultText: data.getName(idx),\n            autoColor: visualColor,\n            useInsideStyle: !!labelLayout.inside\n        },\n        {\n            textAlign: labelLayout.textAlign,\n            textVerticalAlign: labelLayout.verticalAlign\n        }\n    );\n\n    labelText.ignore = labelText.normalIgnore = !labelModel.get('show');\n    labelText.hoverIgnore = !labelHoverModel.get('show');\n\n    labelLine.ignore = labelLine.normalIgnore = !labelLineModel.get('show');\n    labelLine.hoverIgnore = !labelLineHoverModel.get('show');\n\n    // Default use item visual color\n    labelLine.setStyle({\n        stroke: visualColor\n    });\n    labelLine.setStyle(labelLineModel.getModel('lineStyle').getLineStyle());\n\n    labelLine.hoverStyle = labelLineHoverModel.getModel('lineStyle').getLineStyle();\n};\n\ninherits(FunnelPiece, Group);\n\n\nvar FunnelView = Chart.extend({\n\n    type: 'funnel',\n\n    render: function (seriesModel, ecModel, api) {\n        var data = seriesModel.getData();\n        var oldData = this._data;\n\n        var group = this.group;\n\n        data.diff(oldData)\n            .add(function (idx) {\n                var funnelPiece = new FunnelPiece(data, idx);\n\n                data.setItemGraphicEl(idx, funnelPiece);\n\n                group.add(funnelPiece);\n            })\n            .update(function (newIdx, oldIdx) {\n                var piePiece = oldData.getItemGraphicEl(oldIdx);\n\n                piePiece.updateData(data, newIdx);\n\n                group.add(piePiece);\n                data.setItemGraphicEl(newIdx, piePiece);\n            })\n            .remove(function (idx) {\n                var piePiece = oldData.getItemGraphicEl(idx);\n                group.remove(piePiece);\n            })\n            .execute();\n\n        this._data = data;\n    },\n\n    remove: function () {\n        this.group.removeAll();\n        this._data = null;\n    },\n\n    dispose: function () {}\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nfunction getViewRect$2(seriesModel, api) {\n    return getLayoutRect(\n        seriesModel.getBoxLayoutParams(), {\n            width: api.getWidth(),\n            height: api.getHeight()\n        }\n    );\n}\n\nfunction getSortedIndices(data, sort) {\n    var valueDim = data.mapDimension('value');\n    var valueArr = data.mapArray(valueDim, function (val) {\n        return val;\n    });\n    var indices = [];\n    var isAscending = sort === 'ascending';\n    for (var i = 0, len = data.count(); i < len; i++) {\n        indices[i] = i;\n    }\n\n    // Add custom sortable function & none sortable opetion by \"options.sort\"\n    if (typeof sort === 'function') {\n        indices.sort(sort);\n    }\n    else if (sort !== 'none') {\n        indices.sort(function (a, b) {\n            return isAscending ? valueArr[a] - valueArr[b] : valueArr[b] - valueArr[a];\n        });\n    }\n    return indices;\n}\n\nfunction labelLayout$1(data) {\n    data.each(function (idx) {\n        var itemModel = data.getItemModel(idx);\n        var labelModel = itemModel.getModel('label');\n        var labelPosition = labelModel.get('position');\n\n        var labelLineModel = itemModel.getModel('labelLine');\n\n        var layout = data.getItemLayout(idx);\n        var points = layout.points;\n\n        var isLabelInside = labelPosition === 'inner'\n            || labelPosition === 'inside' || labelPosition === 'center'\n            || labelPosition === 'insideLeft' || labelPosition === 'insideRight';\n\n        var textAlign;\n        var textX;\n        var textY;\n        var linePoints;\n\n        if (isLabelInside) {\n            if (labelPosition === 'insideLeft') {\n                textX = (points[0][0] + points[3][0]) / 2 + 5;\n                textY = (points[0][1] + points[3][1]) / 2;\n                textAlign = 'left';\n            }\n            else if (labelPosition === 'insideRight') {\n                textX = (points[1][0] + points[2][0]) / 2 - 5;\n                textY = (points[1][1] + points[2][1]) / 2;\n                textAlign = 'right';\n            }\n            else {\n                textX = (points[0][0] + points[1][0] + points[2][0] + points[3][0]) / 4;\n                textY = (points[0][1] + points[1][1] + points[2][1] + points[3][1]) / 4;\n                textAlign = 'center';\n            }\n            linePoints = [\n                [textX, textY], [textX, textY]\n            ];\n        }\n        else {\n            var x1;\n            var y1;\n            var x2;\n            var labelLineLen = labelLineModel.get('length');\n            if (labelPosition === 'left') {\n                // Left side\n                x1 = (points[3][0] + points[0][0]) / 2;\n                y1 = (points[3][1] + points[0][1]) / 2;\n                x2 = x1 - labelLineLen;\n                textX = x2 - 5;\n                textAlign = 'right';\n            }\n            else if (labelPosition === 'right') {\n                // Right side\n                x1 = (points[1][0] + points[2][0]) / 2;\n                y1 = (points[1][1] + points[2][1]) / 2;\n                x2 = x1 + labelLineLen;\n                textX = x2 + 5;\n                textAlign = 'left';\n            }\n            else if (labelPosition === 'rightTop') {\n                // RightTop side\n                x1 = points[1][0];\n                y1 = points[1][1];\n                x2 = x1 + labelLineLen;\n                textX = x2 + 5;\n                textAlign = 'top';\n            }\n            else if (labelPosition === 'rightBottom') {\n                // RightBottom side\n                x1 = points[2][0];\n                y1 = points[2][1];\n                x2 = x1 + labelLineLen;\n                textX = x2 + 5;\n                textAlign = 'bottom';\n            }\n            else if (labelPosition === 'leftTop') {\n                // LeftTop side\n                x1 = points[0][0];\n                y1 = points[1][1];\n                x2 = x1 - labelLineLen;\n                textX = x2 - 5;\n                textAlign = 'right';\n            }\n            else if (labelPosition === 'leftBottom') {\n                // LeftBottom side\n                x1 = points[3][0];\n                y1 = points[2][1];\n                x2 = x1 - labelLineLen;\n                textX = x2 - 5;\n                textAlign = 'right';\n            }\n            else {\n                // Right side\n                x1 = (points[1][0] + points[2][0]) / 2;\n                y1 = (points[1][1] + points[2][1]) / 2;\n                x2 = x1 + labelLineLen;\n                textX = x2 + 5;\n                textAlign = 'left';\n            }\n            var y2 = y1;\n\n            linePoints = [[x1, y1], [x2, y2]];\n            textY = y2;\n        }\n\n        layout.label = {\n            linePoints: linePoints,\n            x: textX,\n            y: textY,\n            verticalAlign: 'middle',\n            textAlign: textAlign,\n            inside: isLabelInside\n        };\n    });\n}\n\nvar funnelLayout = function (ecModel, api, payload) {\n    ecModel.eachSeriesByType('funnel', function (seriesModel) {\n        var data = seriesModel.getData();\n        var valueDim = data.mapDimension('value');\n        var sort = seriesModel.get('sort');\n        var viewRect = getViewRect$2(seriesModel, api);\n        var indices = getSortedIndices(data, sort);\n\n        var sizeExtent = [\n            parsePercent$1(seriesModel.get('minSize'), viewRect.width),\n            parsePercent$1(seriesModel.get('maxSize'), viewRect.width)\n        ];\n        var dataExtent = data.getDataExtent(valueDim);\n        var min = seriesModel.get('min');\n        var max = seriesModel.get('max');\n        if (min == null) {\n            min = Math.min(dataExtent[0], 0);\n        }\n        if (max == null) {\n            max = dataExtent[1];\n        }\n\n        var funnelAlign = seriesModel.get('funnelAlign');\n        var gap = seriesModel.get('gap');\n        var itemHeight = (viewRect.height - gap * (data.count() - 1)) / data.count();\n\n        var y = viewRect.y;\n\n        var getLinePoints = function (idx, offY) {\n            // End point index is data.count() and we assign it 0\n            var val = data.get(valueDim, idx) || 0;\n            var itemWidth = linearMap(val, [min, max], sizeExtent, true);\n            var x0;\n            switch (funnelAlign) {\n                case 'left':\n                    x0 = viewRect.x;\n                    break;\n                case 'center':\n                    x0 = viewRect.x + (viewRect.width - itemWidth) / 2;\n                    break;\n                case 'right':\n                    x0 = viewRect.x + viewRect.width - itemWidth;\n                    break;\n            }\n            return [\n                [x0, offY],\n                [x0 + itemWidth, offY]\n            ];\n        };\n\n        if (sort === 'ascending') {\n            // From bottom to top\n            itemHeight = -itemHeight;\n            gap = -gap;\n            y += viewRect.height;\n            indices = indices.reverse();\n        }\n\n        for (var i = 0; i < indices.length; i++) {\n            var idx = indices[i];\n            var nextIdx = indices[i + 1];\n\n            var itemModel = data.getItemModel(idx);\n            var height = itemModel.get('itemStyle.height');\n            if (height == null) {\n                height = itemHeight;\n            }\n            else {\n                height = parsePercent$1(height, viewRect.height);\n                if (sort === 'ascending') {\n                    height = -height;\n                }\n            }\n\n            var start = getLinePoints(idx, y);\n            var end = getLinePoints(nextIdx, y + height);\n\n            y += height + gap;\n\n            data.setItemLayout(idx, {\n                points: start.concat(end.slice().reverse())\n            });\n        }\n\n        labelLayout$1(data);\n    });\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nregisterVisual(dataColor('funnel'));\nregisterLayout(funnelLayout);\nregisterProcessor(dataFilter('funnel'));\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar parallelPreprocessor = function (option) {\n    createParallelIfNeeded(option);\n    mergeAxisOptionFromParallel(option);\n};\n\n/**\n * Create a parallel coordinate if not exists.\n * @inner\n */\nfunction createParallelIfNeeded(option) {\n    if (option.parallel) {\n        return;\n    }\n\n    var hasParallelSeries = false;\n\n    each$1(option.series, function (seriesOpt) {\n        if (seriesOpt && seriesOpt.type === 'parallel') {\n            hasParallelSeries = true;\n        }\n    });\n\n    if (hasParallelSeries) {\n        option.parallel = [{}];\n    }\n}\n\n/**\n * Merge aixs definition from parallel option (if exists) to axis option.\n * @inner\n */\nfunction mergeAxisOptionFromParallel(option) {\n    var axes = normalizeToArray(option.parallelAxis);\n\n    each$1(axes, function (axisOption) {\n        if (!isObject$1(axisOption)) {\n            return;\n        }\n\n        var parallelIndex = axisOption.parallelIndex || 0;\n        var parallelOption = normalizeToArray(option.parallel)[parallelIndex];\n\n        if (parallelOption && parallelOption.parallelAxisDefault) {\n            merge(axisOption, parallelOption.parallelAxisDefault, false);\n        }\n    });\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * @constructor module:echarts/coord/parallel/ParallelAxis\n * @extends {module:echarts/coord/Axis}\n * @param {string} dim\n * @param {*} scale\n * @param {Array.<number>} coordExtent\n * @param {string} axisType\n */\nvar ParallelAxis = function (dim, scale, coordExtent, axisType, axisIndex) {\n\n    Axis.call(this, dim, scale, coordExtent);\n\n    /**\n     * Axis type\n     *  - 'category'\n     *  - 'value'\n     *  - 'time'\n     *  - 'log'\n     * @type {string}\n     */\n    this.type = axisType || 'value';\n\n    /**\n     * @type {number}\n     * @readOnly\n     */\n    this.axisIndex = axisIndex;\n};\n\nParallelAxis.prototype = {\n\n    constructor: ParallelAxis,\n\n    /**\n     * Axis model\n     * @param {module:echarts/coord/parallel/AxisModel}\n     */\n    model: null,\n\n    /**\n     * @override\n     */\n    isHorizontal: function () {\n        return this.coordinateSystem.getModel().get('layout') !== 'horizontal';\n    }\n\n};\n\ninherits(ParallelAxis, Axis);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Calculate slider move result.\n * Usage:\n * (1) If both handle0 and handle1 are needed to be moved, set minSpan the same as\n * maxSpan and the same as `Math.abs(handleEnd[1] - handleEnds[0])`.\n * (2) If handle0 is forbidden to cross handle1, set minSpan as `0`.\n *\n * @param {number} delta Move length.\n * @param {Array.<number>} handleEnds handleEnds[0] can be bigger then handleEnds[1].\n *              handleEnds will be modified in this method.\n * @param {Array.<number>} extent handleEnds is restricted by extent.\n *              extent[0] should less or equals than extent[1].\n * @param {number|string} handleIndex Can be 'all', means that both move the two handleEnds.\n * @param {number} [minSpan] The range of dataZoom can not be smaller than that.\n *              If not set, handle0 and cross handle1. If set as a non-negative\n *              number (including `0`), handles will push each other when reaching\n *              the minSpan.\n * @param {number} [maxSpan] The range of dataZoom can not be larger than that.\n * @return {Array.<number>} The input handleEnds.\n */\nvar sliderMove = function (delta, handleEnds, extent, handleIndex, minSpan, maxSpan) {\n\n    delta = delta || 0;\n\n    var extentSpan = extent[1] - extent[0];\n\n    // Notice maxSpan and minSpan can be null/undefined.\n    if (minSpan != null) {\n        minSpan = restrict$1(minSpan, [0, extentSpan]);\n    }\n    if (maxSpan != null) {\n        maxSpan = Math.max(maxSpan, minSpan != null ? minSpan : 0);\n    }\n    if (handleIndex === 'all') {\n        var handleSpan = Math.abs(handleEnds[1] - handleEnds[0]);\n        handleSpan = restrict$1(handleSpan, [0, extentSpan]);\n        minSpan = maxSpan = restrict$1(handleSpan, [minSpan, maxSpan]);\n        handleIndex = 0;\n    }\n\n    handleEnds[0] = restrict$1(handleEnds[0], extent);\n    handleEnds[1] = restrict$1(handleEnds[1], extent);\n\n    var originalDistSign = getSpanSign(handleEnds, handleIndex);\n\n    handleEnds[handleIndex] += delta;\n\n    // Restrict in extent.\n    var extentMinSpan = minSpan || 0;\n    var realExtent = extent.slice();\n    originalDistSign.sign < 0 ? (realExtent[0] += extentMinSpan) : (realExtent[1] -= extentMinSpan);\n    handleEnds[handleIndex] = restrict$1(handleEnds[handleIndex], realExtent);\n\n    // Expand span.\n    var currDistSign = getSpanSign(handleEnds, handleIndex);\n    if (minSpan != null && (\n        currDistSign.sign !== originalDistSign.sign || currDistSign.span < minSpan\n    )) {\n        // If minSpan exists, 'cross' is forbidden.\n        handleEnds[1 - handleIndex] = handleEnds[handleIndex] + originalDistSign.sign * minSpan;\n    }\n\n    // Shrink span.\n    var currDistSign = getSpanSign(handleEnds, handleIndex);\n    if (maxSpan != null && currDistSign.span > maxSpan) {\n        handleEnds[1 - handleIndex] = handleEnds[handleIndex] + currDistSign.sign * maxSpan;\n    }\n\n    return handleEnds;\n};\n\nfunction getSpanSign(handleEnds, handleIndex) {\n    var dist = handleEnds[handleIndex] - handleEnds[1 - handleIndex];\n    // If `handleEnds[0] === handleEnds[1]`, always believe that handleEnd[0]\n    // is at left of handleEnds[1] for non-cross case.\n    return {span: Math.abs(dist), sign: dist > 0 ? -1 : dist < 0 ? 1 : handleIndex ? -1 : 1};\n}\n\nfunction restrict$1(value, extend) {\n    return Math.min(\n        extend[1] != null ? extend[1] : Infinity,\n        Math.max(extend[0] != null ? extend[0] : -Infinity, value)\n    );\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Parallel Coordinates\n * <https://en.wikipedia.org/wiki/Parallel_coordinates>\n */\n\nvar each$11 = each$1;\nvar mathMin$5 = Math.min;\nvar mathMax$5 = Math.max;\nvar mathFloor$2 = Math.floor;\nvar mathCeil$2 = Math.ceil;\nvar round$2 = round$1;\n\nvar PI$4 = Math.PI;\n\nfunction Parallel(parallelModel, ecModel, api) {\n\n    /**\n     * key: dimension\n     * @type {Object.<string, module:echarts/coord/parallel/Axis>}\n     * @private\n     */\n    this._axesMap = createHashMap();\n\n    /**\n     * key: dimension\n     * value: {position: [], rotation, }\n     * @type {Object.<string, Object>}\n     * @private\n     */\n    this._axesLayout = {};\n\n    /**\n     * Always follow axis order.\n     * @type {Array.<string>}\n     * @readOnly\n     */\n    this.dimensions = parallelModel.dimensions;\n\n    /**\n     * @type {module:zrender/core/BoundingRect}\n     */\n    this._rect;\n\n    /**\n     * @type {module:echarts/coord/parallel/ParallelModel}\n     */\n    this._model = parallelModel;\n\n    this._init(parallelModel, ecModel, api);\n}\n\nParallel.prototype = {\n\n    type: 'parallel',\n\n    constructor: Parallel,\n\n    /**\n     * Initialize cartesian coordinate systems\n     * @private\n     */\n    _init: function (parallelModel, ecModel, api) {\n\n        var dimensions = parallelModel.dimensions;\n        var parallelAxisIndex = parallelModel.parallelAxisIndex;\n\n        each$11(dimensions, function (dim, idx) {\n\n            var axisIndex = parallelAxisIndex[idx];\n            var axisModel = ecModel.getComponent('parallelAxis', axisIndex);\n\n            var axis = this._axesMap.set(dim, new ParallelAxis(\n                dim,\n                createScaleByModel(axisModel),\n                [0, 0],\n                axisModel.get('type'),\n                axisIndex\n            ));\n\n            var isCategory = axis.type === 'category';\n            axis.onBand = isCategory && axisModel.get('boundaryGap');\n            axis.inverse = axisModel.get('inverse');\n\n            // Injection\n            axisModel.axis = axis;\n            axis.model = axisModel;\n            axis.coordinateSystem = axisModel.coordinateSystem = this;\n\n        }, this);\n    },\n\n    /**\n     * Update axis scale after data processed\n     * @param  {module:echarts/model/Global} ecModel\n     * @param  {module:echarts/ExtensionAPI} api\n     */\n    update: function (ecModel, api) {\n        this._updateAxesFromSeries(this._model, ecModel);\n    },\n\n    /**\n     * @override\n     */\n    containPoint: function (point) {\n        var layoutInfo = this._makeLayoutInfo();\n        var axisBase = layoutInfo.axisBase;\n        var layoutBase = layoutInfo.layoutBase;\n        var pixelDimIndex = layoutInfo.pixelDimIndex;\n        var pAxis = point[1 - pixelDimIndex];\n        var pLayout = point[pixelDimIndex];\n\n        return pAxis >= axisBase\n            && pAxis <= axisBase + layoutInfo.axisLength\n            && pLayout >= layoutBase\n            && pLayout <= layoutBase + layoutInfo.layoutLength;\n    },\n\n    getModel: function () {\n        return this._model;\n    },\n\n    /**\n     * Update properties from series\n     * @private\n     */\n    _updateAxesFromSeries: function (parallelModel, ecModel) {\n        ecModel.eachSeries(function (seriesModel) {\n\n            if (!parallelModel.contains(seriesModel, ecModel)) {\n                return;\n            }\n\n            var data = seriesModel.getData();\n\n            each$11(this.dimensions, function (dim) {\n                var axis = this._axesMap.get(dim);\n                axis.scale.unionExtentFromData(data, data.mapDimension(dim));\n                niceScaleExtent(axis.scale, axis.model);\n            }, this);\n        }, this);\n    },\n\n    /**\n     * Resize the parallel coordinate system.\n     * @param {module:echarts/coord/parallel/ParallelModel} parallelModel\n     * @param {module:echarts/ExtensionAPI} api\n     */\n    resize: function (parallelModel, api) {\n        this._rect = getLayoutRect(\n            parallelModel.getBoxLayoutParams(),\n            {\n                width: api.getWidth(),\n                height: api.getHeight()\n            }\n        );\n\n        this._layoutAxes();\n    },\n\n    /**\n     * @return {module:zrender/core/BoundingRect}\n     */\n    getRect: function () {\n        return this._rect;\n    },\n\n    /**\n     * @private\n     */\n    _makeLayoutInfo: function () {\n        var parallelModel = this._model;\n        var rect = this._rect;\n        var xy = ['x', 'y'];\n        var wh = ['width', 'height'];\n        var layout = parallelModel.get('layout');\n        var pixelDimIndex = layout === 'horizontal' ? 0 : 1;\n        var layoutLength = rect[wh[pixelDimIndex]];\n        var layoutExtent = [0, layoutLength];\n        var axisCount = this.dimensions.length;\n\n        var axisExpandWidth = restrict(parallelModel.get('axisExpandWidth'), layoutExtent);\n        var axisExpandCount = restrict(parallelModel.get('axisExpandCount') || 0, [0, axisCount]);\n        var axisExpandable = parallelModel.get('axisExpandable')\n            && axisCount > 3\n            && axisCount > axisExpandCount\n            && axisExpandCount > 1\n            && axisExpandWidth > 0\n            && layoutLength > 0;\n\n        // `axisExpandWindow` is According to the coordinates of [0, axisExpandLength],\n        // for sake of consider the case that axisCollapseWidth is 0 (when screen is narrow),\n        // where collapsed axes should be overlapped.\n        var axisExpandWindow = parallelModel.get('axisExpandWindow');\n        var winSize;\n        if (!axisExpandWindow) {\n            winSize = restrict(axisExpandWidth * (axisExpandCount - 1), layoutExtent);\n            var axisExpandCenter = parallelModel.get('axisExpandCenter') || mathFloor$2(axisCount / 2);\n            axisExpandWindow = [axisExpandWidth * axisExpandCenter - winSize / 2];\n            axisExpandWindow[1] = axisExpandWindow[0] + winSize;\n        }\n        else {\n                winSize = restrict(axisExpandWindow[1] - axisExpandWindow[0], layoutExtent);\n                axisExpandWindow[1] = axisExpandWindow[0] + winSize;\n        }\n\n        var axisCollapseWidth = (layoutLength - winSize) / (axisCount - axisExpandCount);\n        // Avoid axisCollapseWidth is too small.\n        axisCollapseWidth < 3 && (axisCollapseWidth = 0);\n\n        // Find the first and last indices > ewin[0] and < ewin[1].\n        var winInnerIndices = [\n            mathFloor$2(round$2(axisExpandWindow[0] / axisExpandWidth, 1)) + 1,\n            mathCeil$2(round$2(axisExpandWindow[1] / axisExpandWidth, 1)) - 1\n        ];\n\n        // Pos in ec coordinates.\n        var axisExpandWindow0Pos = axisCollapseWidth / axisExpandWidth * axisExpandWindow[0];\n\n        return {\n            layout: layout,\n            pixelDimIndex: pixelDimIndex,\n            layoutBase: rect[xy[pixelDimIndex]],\n            layoutLength: layoutLength,\n            axisBase: rect[xy[1 - pixelDimIndex]],\n            axisLength: rect[wh[1 - pixelDimIndex]],\n            axisExpandable: axisExpandable,\n            axisExpandWidth: axisExpandWidth,\n            axisCollapseWidth: axisCollapseWidth,\n            axisExpandWindow: axisExpandWindow,\n            axisCount: axisCount,\n            winInnerIndices: winInnerIndices,\n            axisExpandWindow0Pos: axisExpandWindow0Pos\n        };\n    },\n\n    /**\n     * @private\n     */\n    _layoutAxes: function () {\n        var rect = this._rect;\n        var axes = this._axesMap;\n        var dimensions = this.dimensions;\n        var layoutInfo = this._makeLayoutInfo();\n        var layout = layoutInfo.layout;\n\n        axes.each(function (axis) {\n            var axisExtent = [0, layoutInfo.axisLength];\n            var idx = axis.inverse ? 1 : 0;\n            axis.setExtent(axisExtent[idx], axisExtent[1 - idx]);\n        });\n\n        each$11(dimensions, function (dim, idx) {\n            var posInfo = (layoutInfo.axisExpandable\n                ? layoutAxisWithExpand : layoutAxisWithoutExpand\n            )(idx, layoutInfo);\n\n            var positionTable = {\n                horizontal: {\n                    x: posInfo.position,\n                    y: layoutInfo.axisLength\n                },\n                vertical: {\n                    x: 0,\n                    y: posInfo.position\n                }\n            };\n            var rotationTable = {\n                horizontal: PI$4 / 2,\n                vertical: 0\n            };\n\n            var position = [\n                positionTable[layout].x + rect.x,\n                positionTable[layout].y + rect.y\n            ];\n\n            var rotation = rotationTable[layout];\n            var transform = create$1();\n            rotate(transform, transform, rotation);\n            translate(transform, transform, position);\n\n            // TODO\n            // tick等排布信息。\n\n            // TODO\n            // 根据axis order 更新 dimensions顺序。\n\n            this._axesLayout[dim] = {\n                position: position,\n                rotation: rotation,\n                transform: transform,\n                axisNameAvailableWidth: posInfo.axisNameAvailableWidth,\n                axisLabelShow: posInfo.axisLabelShow,\n                nameTruncateMaxWidth: posInfo.nameTruncateMaxWidth,\n                tickDirection: 1,\n                labelDirection: 1\n            };\n        }, this);\n    },\n\n    /**\n     * Get axis by dim.\n     * @param {string} dim\n     * @return {module:echarts/coord/parallel/ParallelAxis} [description]\n     */\n    getAxis: function (dim) {\n        return this._axesMap.get(dim);\n    },\n\n    /**\n     * Convert a dim value of a single item of series data to Point.\n     * @param {*} value\n     * @param {string} dim\n     * @return {Array}\n     */\n    dataToPoint: function (value, dim) {\n        return this.axisCoordToPoint(\n            this._axesMap.get(dim).dataToCoord(value),\n            dim\n        );\n    },\n\n    /**\n     * Travel data for one time, get activeState of each data item.\n     * @param {module:echarts/data/List} data\n     * @param {Functio} cb param: {string} activeState 'active' or 'inactive' or 'normal'\n     *                            {number} dataIndex\n     * @param {number} [start=0] the start dataIndex that travel from.\n     * @param {number} [end=data.count()] the next dataIndex of the last dataIndex will be travel.\n     */\n    eachActiveState: function (data, callback, start, end) {\n        start == null && (start = 0);\n        end == null && (end = data.count());\n\n        var axesMap = this._axesMap;\n        var dimensions = this.dimensions;\n        var dataDimensions = [];\n        var axisModels = [];\n\n        each$1(dimensions, function (axisDim) {\n            dataDimensions.push(data.mapDimension(axisDim));\n            axisModels.push(axesMap.get(axisDim).model);\n        });\n\n        var hasActiveSet = this.hasAxisBrushed();\n\n        for (var dataIndex = start; dataIndex < end; dataIndex++) {\n            var activeState;\n\n            if (!hasActiveSet) {\n                activeState = 'normal';\n            }\n            else {\n                activeState = 'active';\n                var values = data.getValues(dataDimensions, dataIndex);\n                for (var j = 0, lenj = dimensions.length; j < lenj; j++) {\n                    var state = axisModels[j].getActiveState(values[j]);\n\n                    if (state === 'inactive') {\n                        activeState = 'inactive';\n                        break;\n                    }\n                }\n            }\n\n            callback(activeState, dataIndex);\n        }\n    },\n\n    /**\n     * Whether has any activeSet.\n     * @return {boolean}\n     */\n    hasAxisBrushed: function () {\n        var dimensions = this.dimensions;\n        var axesMap = this._axesMap;\n        var hasActiveSet = false;\n\n        for (var j = 0, lenj = dimensions.length; j < lenj; j++) {\n            if (axesMap.get(dimensions[j]).model.getActiveState() !== 'normal') {\n                hasActiveSet = true;\n            }\n        }\n\n        return hasActiveSet;\n    },\n\n    /**\n     * Convert coords of each axis to Point.\n     *  Return point. For example: [10, 20]\n     * @param {Array.<number>} coords\n     * @param {string} dim\n     * @return {Array.<number>}\n     */\n    axisCoordToPoint: function (coord, dim) {\n        var axisLayout = this._axesLayout[dim];\n        return applyTransform$1([coord, 0], axisLayout.transform);\n    },\n\n    /**\n     * Get axis layout.\n     */\n    getAxisLayout: function (dim) {\n        return clone(this._axesLayout[dim]);\n    },\n\n    /**\n     * @param {Array.<number>} point\n     * @return {Object} {axisExpandWindow, delta, behavior: 'jump' | 'slide' | 'none'}.\n     */\n    getSlidedAxisExpandWindow: function (point) {\n        var layoutInfo = this._makeLayoutInfo();\n        var pixelDimIndex = layoutInfo.pixelDimIndex;\n        var axisExpandWindow = layoutInfo.axisExpandWindow.slice();\n        var winSize = axisExpandWindow[1] - axisExpandWindow[0];\n        var extent = [0, layoutInfo.axisExpandWidth * (layoutInfo.axisCount - 1)];\n\n        // Out of the area of coordinate system.\n        if (!this.containPoint(point)) {\n            return {behavior: 'none', axisExpandWindow: axisExpandWindow};\n        }\n\n        // Conver the point from global to expand coordinates.\n        var pointCoord = point[pixelDimIndex] - layoutInfo.layoutBase - layoutInfo.axisExpandWindow0Pos;\n\n        // For dragging operation convenience, the window should not be\n        // slided when mouse is the center area of the window.\n        var delta;\n        var behavior = 'slide';\n        var axisCollapseWidth = layoutInfo.axisCollapseWidth;\n        var triggerArea = this._model.get('axisExpandSlideTriggerArea');\n        // But consider touch device, jump is necessary.\n        var useJump = triggerArea[0] != null;\n\n        if (axisCollapseWidth) {\n            if (useJump && axisCollapseWidth && pointCoord < winSize * triggerArea[0]) {\n                behavior = 'jump';\n                delta = pointCoord - winSize * triggerArea[2];\n            }\n            else if (useJump && axisCollapseWidth && pointCoord > winSize * (1 - triggerArea[0])) {\n                behavior = 'jump';\n                delta = pointCoord - winSize * (1 - triggerArea[2]);\n            }\n            else {\n                (delta = pointCoord - winSize * triggerArea[1]) >= 0\n                    && (delta = pointCoord - winSize * (1 - triggerArea[1])) <= 0\n                    && (delta = 0);\n            }\n            delta *= layoutInfo.axisExpandWidth / axisCollapseWidth;\n            delta\n                ? sliderMove(delta, axisExpandWindow, extent, 'all')\n                // Avoid nonsense triger on mousemove.\n                : (behavior = 'none');\n        }\n        // When screen is too narrow, make it visible and slidable, although it is hard to interact.\n        else {\n            var winSize = axisExpandWindow[1] - axisExpandWindow[0];\n            var pos = extent[1] * pointCoord / winSize;\n            axisExpandWindow = [mathMax$5(0, pos - winSize / 2)];\n            axisExpandWindow[1] = mathMin$5(extent[1], axisExpandWindow[0] + winSize);\n            axisExpandWindow[0] = axisExpandWindow[1] - winSize;\n        }\n\n        return {\n            axisExpandWindow: axisExpandWindow,\n            behavior: behavior\n        };\n    }\n};\n\nfunction restrict(len, extent) {\n    return mathMin$5(mathMax$5(len, extent[0]), extent[1]);\n}\n\nfunction layoutAxisWithoutExpand(axisIndex, layoutInfo) {\n    var step = layoutInfo.layoutLength / (layoutInfo.axisCount - 1);\n    return {\n        position: step * axisIndex,\n        axisNameAvailableWidth: step,\n        axisLabelShow: true\n    };\n}\n\nfunction layoutAxisWithExpand(axisIndex, layoutInfo) {\n    var layoutLength = layoutInfo.layoutLength;\n    var axisExpandWidth = layoutInfo.axisExpandWidth;\n    var axisCount = layoutInfo.axisCount;\n    var axisCollapseWidth = layoutInfo.axisCollapseWidth;\n    var winInnerIndices = layoutInfo.winInnerIndices;\n\n    var position;\n    var axisNameAvailableWidth = axisCollapseWidth;\n    var axisLabelShow = false;\n    var nameTruncateMaxWidth;\n\n    if (axisIndex < winInnerIndices[0]) {\n        position = axisIndex * axisCollapseWidth;\n        nameTruncateMaxWidth = axisCollapseWidth;\n    }\n    else if (axisIndex <= winInnerIndices[1]) {\n        position = layoutInfo.axisExpandWindow0Pos\n            + axisIndex * axisExpandWidth - layoutInfo.axisExpandWindow[0];\n        axisNameAvailableWidth = axisExpandWidth;\n        axisLabelShow = true;\n    }\n    else {\n        position = layoutLength - (axisCount - 1 - axisIndex) * axisCollapseWidth;\n        nameTruncateMaxWidth = axisCollapseWidth;\n    }\n\n    return {\n        position: position,\n        axisNameAvailableWidth: axisNameAvailableWidth,\n        axisLabelShow: axisLabelShow,\n        nameTruncateMaxWidth: nameTruncateMaxWidth\n    };\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Parallel coordinate system creater.\n */\n\nfunction create$2(ecModel, api) {\n    var coordSysList = [];\n\n    ecModel.eachComponent('parallel', function (parallelModel, idx) {\n        var coordSys = new Parallel(parallelModel, ecModel, api);\n\n        coordSys.name = 'parallel_' + idx;\n        coordSys.resize(parallelModel, api);\n\n        parallelModel.coordinateSystem = coordSys;\n        coordSys.model = parallelModel;\n\n        coordSysList.push(coordSys);\n    });\n\n    // Inject the coordinateSystems into seriesModel\n    ecModel.eachSeries(function (seriesModel) {\n        if (seriesModel.get('coordinateSystem') === 'parallel') {\n            var parallelModel = ecModel.queryComponents({\n                mainType: 'parallel',\n                index: seriesModel.get('parallelIndex'),\n                id: seriesModel.get('parallelId')\n            })[0];\n            seriesModel.coordinateSystem = parallelModel.coordinateSystem;\n        }\n    });\n\n    return coordSysList;\n}\n\nCoordinateSystemManager.register('parallel', {create: create$2});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar AxisModel$2 = ComponentModel.extend({\n\n    type: 'baseParallelAxis',\n\n    /**\n     * @type {module:echarts/coord/parallel/Axis}\n     */\n    axis: null,\n\n    /**\n     * @type {Array.<Array.<number>}\n     * @readOnly\n     */\n    activeIntervals: [],\n\n    /**\n     * @return {Object}\n     */\n    getAreaSelectStyle: function () {\n        return makeStyleMapper(\n            [\n                ['fill', 'color'],\n                ['lineWidth', 'borderWidth'],\n                ['stroke', 'borderColor'],\n                ['width', 'width'],\n                ['opacity', 'opacity']\n            ]\n        )(this.getModel('areaSelectStyle'));\n    },\n\n    /**\n     * The code of this feature is put on AxisModel but not ParallelAxis,\n     * because axisModel can be alive after echarts updating but instance of\n     * ParallelAxis having been disposed. this._activeInterval should be kept\n     * when action dispatched (i.e. legend click).\n     *\n     * @param {Array.<Array<number>>} intervals interval.length === 0\n     *                                          means set all active.\n     * @public\n     */\n    setActiveIntervals: function (intervals) {\n        var activeIntervals = this.activeIntervals = clone(intervals);\n\n        // Normalize\n        if (activeIntervals) {\n            for (var i = activeIntervals.length - 1; i >= 0; i--) {\n                asc(activeIntervals[i]);\n            }\n        }\n    },\n\n    /**\n     * @param {number|string} [value] When attempting to detect 'no activeIntervals set',\n     *                         value can not be input.\n     * @return {string} 'normal': no activeIntervals set,\n     *                  'active',\n     *                  'inactive'.\n     * @public\n     */\n    getActiveState: function (value) {\n        var activeIntervals = this.activeIntervals;\n\n        if (!activeIntervals.length) {\n            return 'normal';\n        }\n\n        if (value == null || isNaN(value)) {\n            return 'inactive';\n        }\n\n        // Simple optimization\n        if (activeIntervals.length === 1) {\n            var interval = activeIntervals[0];\n            if (interval[0] <= value && value <= interval[1]) {\n                return 'active';\n            }\n        }\n        else {\n            for (var i = 0, len = activeIntervals.length; i < len; i++) {\n                if (activeIntervals[i][0] <= value && value <= activeIntervals[i][1]) {\n                    return 'active';\n                }\n            }\n        }\n\n        return 'inactive';\n    }\n\n});\n\nvar defaultOption$1 = {\n\n    type: 'value',\n\n    /**\n     * @type {Array.<number>}\n     */\n    dim: null, // 0, 1, 2, ...\n\n    // parallelIndex: null,\n\n    areaSelectStyle: {\n        width: 20,\n        borderWidth: 1,\n        borderColor: 'rgba(160,197,232)',\n        color: 'rgba(160,197,232)',\n        opacity: 0.3\n    },\n\n    realtime: true, // Whether realtime update view when select.\n\n    z: 10\n};\n\nmerge(AxisModel$2.prototype, axisModelCommonMixin);\n\nfunction getAxisType$1(axisName, option) {\n    return option.type || (option.data ? 'category' : 'value');\n}\n\naxisModelCreator('parallel', AxisModel$2, getAxisType$1, defaultOption$1);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nComponentModel.extend({\n\n    type: 'parallel',\n\n    dependencies: ['parallelAxis'],\n\n    /**\n     * @type {module:echarts/coord/parallel/Parallel}\n     */\n    coordinateSystem: null,\n\n    /**\n     * Each item like: 'dim0', 'dim1', 'dim2', ...\n     * @type {Array.<string>}\n     * @readOnly\n     */\n    dimensions: null,\n\n    /**\n     * Coresponding to dimensions.\n     * @type {Array.<number>}\n     * @readOnly\n     */\n    parallelAxisIndex: null,\n\n    layoutMode: 'box',\n\n    defaultOption: {\n        zlevel: 0,\n        z: 0,\n        left: 80,\n        top: 60,\n        right: 80,\n        bottom: 60,\n        // width: {totalWidth} - left - right,\n        // height: {totalHeight} - top - bottom,\n\n        layout: 'horizontal',      // 'horizontal' or 'vertical'\n\n        // FIXME\n        // naming?\n        axisExpandable: false,\n        axisExpandCenter: null,\n        axisExpandCount: 0,\n        axisExpandWidth: 50,      // FIXME '10%' ?\n        axisExpandRate: 17,\n        axisExpandDebounce: 50,\n        // [out, in, jumpTarget]. In percentage. If use [null, 0.05], null means full.\n        // Do not doc to user until necessary.\n        axisExpandSlideTriggerArea: [-0.15, 0.05, 0.4],\n        axisExpandTriggerOn: 'click', // 'mousemove' or 'click'\n\n        parallelAxisDefault: null\n    },\n\n    /**\n     * @override\n     */\n    init: function () {\n        ComponentModel.prototype.init.apply(this, arguments);\n\n        this.mergeOption({});\n    },\n\n    /**\n     * @override\n     */\n    mergeOption: function (newOption) {\n        var thisOption = this.option;\n\n        newOption && merge(thisOption, newOption, true);\n\n        this._initDimensions();\n    },\n\n    /**\n     * Whether series or axis is in this coordinate system.\n     * @param {module:echarts/model/Series|module:echarts/coord/parallel/AxisModel} model\n     * @param {module:echarts/model/Global} ecModel\n     */\n    contains: function (model, ecModel) {\n        var parallelIndex = model.get('parallelIndex');\n        return parallelIndex != null\n            && ecModel.getComponent('parallel', parallelIndex) === this;\n    },\n\n    setAxisExpand: function (opt) {\n        each$1(\n            ['axisExpandable', 'axisExpandCenter', 'axisExpandCount', 'axisExpandWidth', 'axisExpandWindow'],\n            function (name) {\n                if (opt.hasOwnProperty(name)) {\n                    this.option[name] = opt[name];\n                }\n            },\n            this\n        );\n    },\n\n    /**\n     * @private\n     */\n    _initDimensions: function () {\n        var dimensions = this.dimensions = [];\n        var parallelAxisIndex = this.parallelAxisIndex = [];\n\n        var axisModels = filter(this.dependentModels.parallelAxis, function (axisModel) {\n            // Can not use this.contains here, because\n            // initialization has not been completed yet.\n            return (axisModel.get('parallelIndex') || 0) === this.componentIndex;\n        }, this);\n\n        each$1(axisModels, function (axisModel) {\n            dimensions.push('dim' + axisModel.get('dim'));\n            parallelAxisIndex.push(axisModel.componentIndex);\n        });\n    }\n\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * @payload\n * @property {string} parallelAxisId\n * @property {Array.<Array.<number>>} intervals\n */\nvar actionInfo$1 = {\n    type: 'axisAreaSelect',\n    event: 'axisAreaSelected'\n    // update: 'updateVisual'\n};\n\nregisterAction(actionInfo$1, function (payload, ecModel) {\n    ecModel.eachComponent(\n        {mainType: 'parallelAxis', query: payload},\n        function (parallelAxisModel) {\n            parallelAxisModel.axis.model.setActiveIntervals(payload.intervals);\n        }\n    );\n});\n\n/**\n * @payload\n */\nregisterAction('parallelAxisExpand', function (payload, ecModel) {\n    ecModel.eachComponent(\n        {mainType: 'parallel', query: payload},\n        function (parallelModel) {\n            parallelModel.setAxisExpand(payload);\n        }\n    );\n\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar curry$2 = curry;\nvar each$12 = each$1;\nvar map$2 = map;\nvar mathMin$6 = Math.min;\nvar mathMax$6 = Math.max;\nvar mathPow$2 = Math.pow;\n\nvar COVER_Z = 10000;\nvar UNSELECT_THRESHOLD = 6;\nvar MIN_RESIZE_LINE_WIDTH = 6;\nvar MUTEX_RESOURCE_KEY = 'globalPan';\n\nvar DIRECTION_MAP = {\n    w: [0, 0],\n    e: [0, 1],\n    n: [1, 0],\n    s: [1, 1]\n};\nvar CURSOR_MAP = {\n    w: 'ew',\n    e: 'ew',\n    n: 'ns',\n    s: 'ns',\n    ne: 'nesw',\n    sw: 'nesw',\n    nw: 'nwse',\n    se: 'nwse'\n};\nvar DEFAULT_BRUSH_OPT = {\n    brushStyle: {\n        lineWidth: 2,\n        stroke: 'rgba(0,0,0,0.3)',\n        fill: 'rgba(0,0,0,0.1)'\n    },\n    transformable: true,\n    brushMode: 'single',\n    removeOnClick: false\n};\n\nvar baseUID = 0;\n\n/**\n * @alias module:echarts/component/helper/BrushController\n * @constructor\n * @mixin {module:zrender/mixin/Eventful}\n * @event module:echarts/component/helper/BrushController#brush\n *        params:\n *            areas: Array.<Array>, coord relates to container group,\n *                                    If no container specified, to global.\n *            opt {\n *                isEnd: boolean,\n *                removeOnClick: boolean\n *            }\n *\n * @param {module:zrender/zrender~ZRender} zr\n */\nfunction BrushController(zr) {\n\n    if (__DEV__) {\n        assert$1(zr);\n    }\n\n    Eventful.call(this);\n\n    /**\n     * @type {module:zrender/zrender~ZRender}\n     * @private\n     */\n    this._zr = zr;\n\n    /**\n     * @type {module:zrender/container/Group}\n     * @readOnly\n     */\n    this.group = new Group();\n\n    /**\n     * Only for drawing (after enabledBrush).\n     *     'line', 'rect', 'polygon' or false\n     *     If passing false/null/undefined, disable brush.\n     *     If passing 'auto', determined by panel.defaultBrushType\n     * @private\n     * @type {string}\n     */\n    this._brushType;\n\n    /**\n     * Only for drawing (after enabledBrush).\n     *\n     * @private\n     * @type {Object}\n     */\n    this._brushOption;\n\n    /**\n     * @private\n     * @type {Object}\n     */\n    this._panels;\n\n    /**\n     * @private\n     * @type {Array.<nubmer>}\n     */\n    this._track = [];\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this._dragging;\n\n    /**\n     * @private\n     * @type {Array}\n     */\n    this._covers = [];\n\n    /**\n     * @private\n     * @type {moudule:zrender/container/Group}\n     */\n    this._creatingCover;\n\n    /**\n     * `true` means global panel\n     * @private\n     * @type {module:zrender/container/Group|boolean}\n     */\n    this._creatingPanel;\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this._enableGlobalPan;\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    if (__DEV__) {\n        this._mounted;\n    }\n\n    /**\n     * @private\n     * @type {string}\n     */\n    this._uid = 'brushController_' + baseUID++;\n\n    /**\n     * @private\n     * @type {Object}\n     */\n    this._handlers = {};\n    each$12(mouseHandlers, function (handler, eventName) {\n        this._handlers[eventName] = bind(handler, this);\n    }, this);\n}\n\nBrushController.prototype = {\n\n    constructor: BrushController,\n\n    /**\n     * If set to null/undefined/false, select disabled.\n     * @param {Object} brushOption\n     * @param {string|boolean} brushOption.brushType 'line', 'rect', 'polygon' or false\n     *                          If passing false/null/undefined, disable brush.\n     *                          If passing 'auto', determined by panel.defaultBrushType.\n     *                              ('auto' can not be used in global panel)\n     * @param {number} [brushOption.brushMode='single'] 'single' or 'multiple'\n     * @param {boolean} [brushOption.transformable=true]\n     * @param {boolean} [brushOption.removeOnClick=false]\n     * @param {Object} [brushOption.brushStyle]\n     * @param {number} [brushOption.brushStyle.width]\n     * @param {number} [brushOption.brushStyle.lineWidth]\n     * @param {string} [brushOption.brushStyle.stroke]\n     * @param {string} [brushOption.brushStyle.fill]\n     * @param {number} [brushOption.z]\n     */\n    enableBrush: function (brushOption) {\n        if (__DEV__) {\n            assert$1(this._mounted);\n        }\n\n        this._brushType && doDisableBrush(this);\n        brushOption.brushType && doEnableBrush(this, brushOption);\n\n        return this;\n    },\n\n    /**\n     * @param {Array.<Object>} panelOpts If not pass, it is global brush.\n     *        Each items: {\n     *            panelId, // mandatory.\n     *            clipPath, // mandatory. function.\n     *            isTargetByCursor, // mandatory. function.\n     *            defaultBrushType, // optional, only used when brushType is 'auto'.\n     *            getLinearBrushOtherExtent, // optional. function.\n     *        }\n     */\n    setPanels: function (panelOpts) {\n        if (panelOpts && panelOpts.length) {\n            var panels = this._panels = {};\n            each$1(panelOpts, function (panelOpts) {\n                panels[panelOpts.panelId] = clone(panelOpts);\n            });\n        }\n        else {\n            this._panels = null;\n        }\n        return this;\n    },\n\n    /**\n     * @param {Object} [opt]\n     * @return {boolean} [opt.enableGlobalPan=false]\n     */\n    mount: function (opt) {\n        opt = opt || {};\n\n        if (__DEV__) {\n            this._mounted = true; // should be at first.\n        }\n\n        this._enableGlobalPan = opt.enableGlobalPan;\n\n        var thisGroup = this.group;\n        this._zr.add(thisGroup);\n\n        thisGroup.attr({\n            position: opt.position || [0, 0],\n            rotation: opt.rotation || 0,\n            scale: opt.scale || [1, 1]\n        });\n        this._transform = thisGroup.getLocalTransform();\n\n        return this;\n    },\n\n    eachCover: function (cb, context) {\n        each$12(this._covers, cb, context);\n    },\n\n    /**\n     * Update covers.\n     * @param {Array.<Object>} brushOptionList Like:\n     *        [\n     *            {id: 'xx', brushType: 'line', range: [23, 44], brushStyle, transformable},\n     *            {id: 'yy', brushType: 'rect', range: [[23, 44], [23, 54]]},\n     *            ...\n     *        ]\n     *        `brushType` is required in each cover info. (can not be 'auto')\n     *        `id` is not mandatory.\n     *        `brushStyle`, `transformable` is not mandatory, use DEFAULT_BRUSH_OPT by default.\n     *        If brushOptionList is null/undefined, all covers removed.\n     */\n    updateCovers: function (brushOptionList) {\n        if (__DEV__) {\n            assert$1(this._mounted);\n        }\n\n        brushOptionList = map(brushOptionList, function (brushOption) {\n            return merge(clone(DEFAULT_BRUSH_OPT), brushOption, true);\n        });\n\n        var tmpIdPrefix = '\\0-brush-index-';\n        var oldCovers = this._covers;\n        var newCovers = this._covers = [];\n        var controller = this;\n        var creatingCover = this._creatingCover;\n\n        (new DataDiffer(oldCovers, brushOptionList, oldGetKey, getKey))\n            .add(addOrUpdate)\n            .update(addOrUpdate)\n            .remove(remove)\n            .execute();\n\n        return this;\n\n        function getKey(brushOption, index) {\n            return (brushOption.id != null ? brushOption.id : tmpIdPrefix + index)\n                + '-' + brushOption.brushType;\n        }\n\n        function oldGetKey(cover, index) {\n            return getKey(cover.__brushOption, index);\n        }\n\n        function addOrUpdate(newIndex, oldIndex) {\n            var newBrushOption = brushOptionList[newIndex];\n            // Consider setOption in event listener of brushSelect,\n            // where updating cover when creating should be forbiden.\n            if (oldIndex != null && oldCovers[oldIndex] === creatingCover) {\n                newCovers[newIndex] = oldCovers[oldIndex];\n            }\n            else {\n                var cover = newCovers[newIndex] = oldIndex != null\n                    ? (\n                        oldCovers[oldIndex].__brushOption = newBrushOption,\n                        oldCovers[oldIndex]\n                    )\n                    : endCreating(controller, createCover(controller, newBrushOption));\n                updateCoverAfterCreation(controller, cover);\n            }\n        }\n\n        function remove(oldIndex) {\n            if (oldCovers[oldIndex] !== creatingCover) {\n                controller.group.remove(oldCovers[oldIndex]);\n            }\n        }\n    },\n\n    unmount: function () {\n        if (__DEV__) {\n            if (!this._mounted) {\n                return;\n            }\n        }\n\n        this.enableBrush(false);\n\n        // container may 'removeAll' outside.\n        clearCovers(this);\n        this._zr.remove(this.group);\n\n        if (__DEV__) {\n            this._mounted = false; // should be at last.\n        }\n\n        return this;\n    },\n\n    dispose: function () {\n        this.unmount();\n        this.off();\n    }\n};\n\nmixin(BrushController, Eventful);\n\nfunction doEnableBrush(controller, brushOption) {\n    var zr = controller._zr;\n\n    // Consider roam, which takes globalPan too.\n    if (!controller._enableGlobalPan) {\n        take(zr, MUTEX_RESOURCE_KEY, controller._uid);\n    }\n\n    each$12(controller._handlers, function (handler, eventName) {\n        zr.on(eventName, handler);\n    });\n\n    controller._brushType = brushOption.brushType;\n    controller._brushOption = merge(clone(DEFAULT_BRUSH_OPT), brushOption, true);\n}\n\nfunction doDisableBrush(controller) {\n    var zr = controller._zr;\n\n    release(zr, MUTEX_RESOURCE_KEY, controller._uid);\n\n    each$12(controller._handlers, function (handler, eventName) {\n        zr.off(eventName, handler);\n    });\n\n    controller._brushType = controller._brushOption = null;\n}\n\nfunction createCover(controller, brushOption) {\n    var cover = coverRenderers[brushOption.brushType].createCover(controller, brushOption);\n    cover.__brushOption = brushOption;\n    updateZ$1(cover, brushOption);\n    controller.group.add(cover);\n    return cover;\n}\n\nfunction endCreating(controller, creatingCover) {\n    var coverRenderer = getCoverRenderer(creatingCover);\n    if (coverRenderer.endCreating) {\n        coverRenderer.endCreating(controller, creatingCover);\n        updateZ$1(creatingCover, creatingCover.__brushOption);\n    }\n    return creatingCover;\n}\n\nfunction updateCoverShape(controller, cover) {\n    var brushOption = cover.__brushOption;\n    getCoverRenderer(cover).updateCoverShape(\n        controller, cover, brushOption.range, brushOption\n    );\n}\n\nfunction updateZ$1(cover, brushOption) {\n    var z = brushOption.z;\n    z == null && (z = COVER_Z);\n    cover.traverse(function (el) {\n        el.z = z;\n        el.z2 = z; // Consider in given container.\n    });\n}\n\nfunction updateCoverAfterCreation(controller, cover) {\n    getCoverRenderer(cover).updateCommon(controller, cover);\n    updateCoverShape(controller, cover);\n}\n\nfunction getCoverRenderer(cover) {\n    return coverRenderers[cover.__brushOption.brushType];\n}\n\n// return target panel or `true` (means global panel)\nfunction getPanelByPoint(controller, e, localCursorPoint) {\n    var panels = controller._panels;\n    if (!panels) {\n        return true; // Global panel\n    }\n    var panel;\n    var transform = controller._transform;\n    each$12(panels, function (pn) {\n        pn.isTargetByCursor(e, localCursorPoint, transform) && (panel = pn);\n    });\n    return panel;\n}\n\n// Return a panel or true\nfunction getPanelByCover(controller, cover) {\n    var panels = controller._panels;\n    if (!panels) {\n        return true; // Global panel\n    }\n    var panelId = cover.__brushOption.panelId;\n    // User may give cover without coord sys info,\n    // which is then treated as global panel.\n    return panelId != null ? panels[panelId] : true;\n}\n\nfunction clearCovers(controller) {\n    var covers = controller._covers;\n    var originalLength = covers.length;\n    each$12(covers, function (cover) {\n        controller.group.remove(cover);\n    }, controller);\n    covers.length = 0;\n\n    return !!originalLength;\n}\n\nfunction trigger$1(controller, opt) {\n    var areas = map$2(controller._covers, function (cover) {\n        var brushOption = cover.__brushOption;\n        var range = clone(brushOption.range);\n        return {\n            brushType: brushOption.brushType,\n            panelId: brushOption.panelId,\n            range: range\n        };\n    });\n\n    controller.trigger('brush', areas, {\n        isEnd: !!opt.isEnd,\n        removeOnClick: !!opt.removeOnClick\n    });\n}\n\nfunction shouldShowCover(controller) {\n    var track = controller._track;\n\n    if (!track.length) {\n        return false;\n    }\n\n    var p2 = track[track.length - 1];\n    var p1 = track[0];\n    var dx = p2[0] - p1[0];\n    var dy = p2[1] - p1[1];\n    var dist = mathPow$2(dx * dx + dy * dy, 0.5);\n\n    return dist > UNSELECT_THRESHOLD;\n}\n\nfunction getTrackEnds(track) {\n    var tail = track.length - 1;\n    tail < 0 && (tail = 0);\n    return [track[0], track[tail]];\n}\n\nfunction createBaseRectCover(doDrift, controller, brushOption, edgeNames) {\n    var cover = new Group();\n\n    cover.add(new Rect({\n        name: 'main',\n        style: makeStyle(brushOption),\n        silent: true,\n        draggable: true,\n        cursor: 'move',\n        drift: curry$2(doDrift, controller, cover, 'nswe'),\n        ondragend: curry$2(trigger$1, controller, {isEnd: true})\n    }));\n\n    each$12(\n        edgeNames,\n        function (name) {\n            cover.add(new Rect({\n                name: name,\n                style: {opacity: 0},\n                draggable: true,\n                silent: true,\n                invisible: true,\n                drift: curry$2(doDrift, controller, cover, name),\n                ondragend: curry$2(trigger$1, controller, {isEnd: true})\n            }));\n        }\n    );\n\n    return cover;\n}\n\nfunction updateBaseRect(controller, cover, localRange, brushOption) {\n    var lineWidth = brushOption.brushStyle.lineWidth || 0;\n    var handleSize = mathMax$6(lineWidth, MIN_RESIZE_LINE_WIDTH);\n    var x = localRange[0][0];\n    var y = localRange[1][0];\n    var xa = x - lineWidth / 2;\n    var ya = y - lineWidth / 2;\n    var x2 = localRange[0][1];\n    var y2 = localRange[1][1];\n    var x2a = x2 - handleSize + lineWidth / 2;\n    var y2a = y2 - handleSize + lineWidth / 2;\n    var width = x2 - x;\n    var height = y2 - y;\n    var widtha = width + lineWidth;\n    var heighta = height + lineWidth;\n\n    updateRectShape(controller, cover, 'main', x, y, width, height);\n\n    if (brushOption.transformable) {\n        updateRectShape(controller, cover, 'w', xa, ya, handleSize, heighta);\n        updateRectShape(controller, cover, 'e', x2a, ya, handleSize, heighta);\n        updateRectShape(controller, cover, 'n', xa, ya, widtha, handleSize);\n        updateRectShape(controller, cover, 's', xa, y2a, widtha, handleSize);\n\n        updateRectShape(controller, cover, 'nw', xa, ya, handleSize, handleSize);\n        updateRectShape(controller, cover, 'ne', x2a, ya, handleSize, handleSize);\n        updateRectShape(controller, cover, 'sw', xa, y2a, handleSize, handleSize);\n        updateRectShape(controller, cover, 'se', x2a, y2a, handleSize, handleSize);\n    }\n}\n\nfunction updateCommon(controller, cover) {\n    var brushOption = cover.__brushOption;\n    var transformable = brushOption.transformable;\n\n    var mainEl = cover.childAt(0);\n    mainEl.useStyle(makeStyle(brushOption));\n    mainEl.attr({\n        silent: !transformable,\n        cursor: transformable ? 'move' : 'default'\n    });\n\n    each$12(\n        ['w', 'e', 'n', 's', 'se', 'sw', 'ne', 'nw'],\n        function (name) {\n            var el = cover.childOfName(name);\n            var globalDir = getGlobalDirection(controller, name);\n\n            el && el.attr({\n                silent: !transformable,\n                invisible: !transformable,\n                cursor: transformable ? CURSOR_MAP[globalDir] + '-resize' : null\n            });\n        }\n    );\n}\n\nfunction updateRectShape(controller, cover, name, x, y, w, h) {\n    var el = cover.childOfName(name);\n    el && el.setShape(pointsToRect(\n        clipByPanel(controller, cover, [[x, y], [x + w, y + h]])\n    ));\n}\n\nfunction makeStyle(brushOption) {\n    return defaults({strokeNoScale: true}, brushOption.brushStyle);\n}\n\nfunction formatRectRange(x, y, x2, y2) {\n    var min = [mathMin$6(x, x2), mathMin$6(y, y2)];\n    var max = [mathMax$6(x, x2), mathMax$6(y, y2)];\n\n    return [\n        [min[0], max[0]], // x range\n        [min[1], max[1]] // y range\n    ];\n}\n\nfunction getTransform$1(controller) {\n    return getTransform(controller.group);\n}\n\nfunction getGlobalDirection(controller, localDirection) {\n    if (localDirection.length > 1) {\n        localDirection = localDirection.split('');\n        var globalDir = [\n            getGlobalDirection(controller, localDirection[0]),\n            getGlobalDirection(controller, localDirection[1])\n        ];\n        (globalDir[0] === 'e' || globalDir[0] === 'w') && globalDir.reverse();\n        return globalDir.join('');\n    }\n    else {\n        var map$$1 = {w: 'left', e: 'right', n: 'top', s: 'bottom'};\n        var inverseMap = {left: 'w', right: 'e', top: 'n', bottom: 's'};\n        var globalDir = transformDirection(\n            map$$1[localDirection], getTransform$1(controller)\n        );\n        return inverseMap[globalDir];\n    }\n}\n\nfunction driftRect(toRectRange, fromRectRange, controller, cover, name, dx, dy, e) {\n    var brushOption = cover.__brushOption;\n    var rectRange = toRectRange(brushOption.range);\n    var localDelta = toLocalDelta(controller, dx, dy);\n\n    each$12(name.split(''), function (namePart) {\n        var ind = DIRECTION_MAP[namePart];\n        rectRange[ind[0]][ind[1]] += localDelta[ind[0]];\n    });\n\n    brushOption.range = fromRectRange(formatRectRange(\n        rectRange[0][0], rectRange[1][0], rectRange[0][1], rectRange[1][1]\n    ));\n\n    updateCoverAfterCreation(controller, cover);\n    trigger$1(controller, {isEnd: false});\n}\n\nfunction driftPolygon(controller, cover, dx, dy, e) {\n    var range = cover.__brushOption.range;\n    var localDelta = toLocalDelta(controller, dx, dy);\n\n    each$12(range, function (point) {\n        point[0] += localDelta[0];\n        point[1] += localDelta[1];\n    });\n\n    updateCoverAfterCreation(controller, cover);\n    trigger$1(controller, {isEnd: false});\n}\n\nfunction toLocalDelta(controller, dx, dy) {\n    var thisGroup = controller.group;\n    var localD = thisGroup.transformCoordToLocal(dx, dy);\n    var localZero = thisGroup.transformCoordToLocal(0, 0);\n\n    return [localD[0] - localZero[0], localD[1] - localZero[1]];\n}\n\nfunction clipByPanel(controller, cover, data) {\n    var panel = getPanelByCover(controller, cover);\n\n    return (panel && panel !== true)\n        ? panel.clipPath(data, controller._transform)\n        : clone(data);\n}\n\nfunction pointsToRect(points) {\n    var xmin = mathMin$6(points[0][0], points[1][0]);\n    var ymin = mathMin$6(points[0][1], points[1][1]);\n    var xmax = mathMax$6(points[0][0], points[1][0]);\n    var ymax = mathMax$6(points[0][1], points[1][1]);\n\n    return {\n        x: xmin,\n        y: ymin,\n        width: xmax - xmin,\n        height: ymax - ymin\n    };\n}\n\nfunction resetCursor(controller, e, localCursorPoint) {\n    // Check active\n    if (!controller._brushType) {\n        return;\n    }\n\n    var zr = controller._zr;\n    var covers = controller._covers;\n    var currPanel = getPanelByPoint(controller, e, localCursorPoint);\n\n    // Check whether in covers.\n    if (!controller._dragging) {\n        for (var i = 0; i < covers.length; i++) {\n            var brushOption = covers[i].__brushOption;\n            if (currPanel\n                && (currPanel === true || brushOption.panelId === currPanel.panelId)\n                && coverRenderers[brushOption.brushType].contain(\n                    covers[i], localCursorPoint[0], localCursorPoint[1]\n                )\n            ) {\n                // Use cursor style set on cover.\n                return;\n            }\n        }\n    }\n\n    currPanel && zr.setCursorStyle('crosshair');\n}\n\nfunction preventDefault(e) {\n    var rawE = e.event;\n    rawE.preventDefault && rawE.preventDefault();\n}\n\nfunction mainShapeContain(cover, x, y) {\n    return cover.childOfName('main').contain(x, y);\n}\n\nfunction updateCoverByMouse(controller, e, localCursorPoint, isEnd) {\n    var creatingCover = controller._creatingCover;\n    var panel = controller._creatingPanel;\n    var thisBrushOption = controller._brushOption;\n    var eventParams;\n\n    controller._track.push(localCursorPoint.slice());\n\n    if (shouldShowCover(controller) || creatingCover) {\n\n        if (panel && !creatingCover) {\n            thisBrushOption.brushMode === 'single' && clearCovers(controller);\n            var brushOption = clone(thisBrushOption);\n            brushOption.brushType = determineBrushType(brushOption.brushType, panel);\n            brushOption.panelId = panel === true ? null : panel.panelId;\n            creatingCover = controller._creatingCover = createCover(controller, brushOption);\n            controller._covers.push(creatingCover);\n        }\n\n        if (creatingCover) {\n            var coverRenderer = coverRenderers[determineBrushType(controller._brushType, panel)];\n            var coverBrushOption = creatingCover.__brushOption;\n\n            coverBrushOption.range = coverRenderer.getCreatingRange(\n                clipByPanel(controller, creatingCover, controller._track)\n            );\n\n            if (isEnd) {\n                endCreating(controller, creatingCover);\n                coverRenderer.updateCommon(controller, creatingCover);\n            }\n\n            updateCoverShape(controller, creatingCover);\n\n            eventParams = {isEnd: isEnd};\n        }\n    }\n    else if (\n        isEnd\n        && thisBrushOption.brushMode === 'single'\n        && thisBrushOption.removeOnClick\n    ) {\n        // Help user to remove covers easily, only by a tiny drag, in 'single' mode.\n        // But a single click do not clear covers, because user may have casual\n        // clicks (for example, click on other component and do not expect covers\n        // disappear).\n        // Only some cover removed, trigger action, but not every click trigger action.\n        if (getPanelByPoint(controller, e, localCursorPoint) && clearCovers(controller)) {\n            eventParams = {isEnd: isEnd, removeOnClick: true};\n        }\n    }\n\n    return eventParams;\n}\n\nfunction determineBrushType(brushType, panel) {\n    if (brushType === 'auto') {\n        if (__DEV__) {\n            assert$1(\n                panel && panel.defaultBrushType,\n                'MUST have defaultBrushType when brushType is \"atuo\"'\n            );\n        }\n        return panel.defaultBrushType;\n    }\n    return brushType;\n}\n\nvar mouseHandlers = {\n\n    mousedown: function (e) {\n        if (this._dragging) {\n            // In case some browser do not support globalOut,\n            // and release mose out side the browser.\n            handleDragEnd.call(this, e);\n        }\n        else if (!e.target || !e.target.draggable) {\n\n            preventDefault(e);\n\n            var localCursorPoint = this.group.transformCoordToLocal(e.offsetX, e.offsetY);\n\n            this._creatingCover = null;\n            var panel = this._creatingPanel = getPanelByPoint(this, e, localCursorPoint);\n\n            if (panel) {\n                this._dragging = true;\n                this._track = [localCursorPoint.slice()];\n            }\n        }\n    },\n\n    mousemove: function (e) {\n        var localCursorPoint = this.group.transformCoordToLocal(e.offsetX, e.offsetY);\n\n        resetCursor(this, e, localCursorPoint);\n\n        if (this._dragging) {\n\n            preventDefault(e);\n\n            var eventParams = updateCoverByMouse(this, e, localCursorPoint, false);\n\n            eventParams && trigger$1(this, eventParams);\n        }\n    },\n\n    mouseup: handleDragEnd //,\n\n    // FIXME\n    // in tooltip, globalout should not be triggered.\n    // globalout: handleDragEnd\n};\n\nfunction handleDragEnd(e) {\n    if (this._dragging) {\n\n        preventDefault(e);\n\n        var localCursorPoint = this.group.transformCoordToLocal(e.offsetX, e.offsetY);\n        var eventParams = updateCoverByMouse(this, e, localCursorPoint, true);\n\n        this._dragging = false;\n        this._track = [];\n        this._creatingCover = null;\n\n        // trigger event shoule be at final, after procedure will be nested.\n        eventParams && trigger$1(this, eventParams);\n    }\n}\n\n/**\n * key: brushType\n * @type {Object}\n */\nvar coverRenderers = {\n\n    lineX: getLineRenderer(0),\n\n    lineY: getLineRenderer(1),\n\n    rect: {\n        createCover: function (controller, brushOption) {\n            return createBaseRectCover(\n                curry$2(\n                    driftRect,\n                    function (range) {\n                        return range;\n                    },\n                    function (range) {\n                        return range;\n                    }\n                ),\n                controller,\n                brushOption,\n                ['w', 'e', 'n', 's', 'se', 'sw', 'ne', 'nw']\n            );\n        },\n        getCreatingRange: function (localTrack) {\n            var ends = getTrackEnds(localTrack);\n            return formatRectRange(ends[1][0], ends[1][1], ends[0][0], ends[0][1]);\n        },\n        updateCoverShape: function (controller, cover, localRange, brushOption) {\n            updateBaseRect(controller, cover, localRange, brushOption);\n        },\n        updateCommon: updateCommon,\n        contain: mainShapeContain\n    },\n\n    polygon: {\n        createCover: function (controller, brushOption) {\n            var cover = new Group();\n\n            // Do not use graphic.Polygon because graphic.Polyline do not close the\n            // border of the shape when drawing, which is a better experience for user.\n            cover.add(new Polyline({\n                name: 'main',\n                style: makeStyle(brushOption),\n                silent: true\n            }));\n\n            return cover;\n        },\n        getCreatingRange: function (localTrack) {\n            return localTrack;\n        },\n        endCreating: function (controller, cover) {\n            cover.remove(cover.childAt(0));\n            // Use graphic.Polygon close the shape.\n            cover.add(new Polygon({\n                name: 'main',\n                draggable: true,\n                drift: curry$2(driftPolygon, controller, cover),\n                ondragend: curry$2(trigger$1, controller, {isEnd: true})\n            }));\n        },\n        updateCoverShape: function (controller, cover, localRange, brushOption) {\n            cover.childAt(0).setShape({\n                points: clipByPanel(controller, cover, localRange)\n            });\n        },\n        updateCommon: updateCommon,\n        contain: mainShapeContain\n    }\n};\n\nfunction getLineRenderer(xyIndex) {\n    return {\n        createCover: function (controller, brushOption) {\n            return createBaseRectCover(\n                curry$2(\n                    driftRect,\n                    function (range) {\n                        var rectRange = [range, [0, 100]];\n                        xyIndex && rectRange.reverse();\n                        return rectRange;\n                    },\n                    function (rectRange) {\n                        return rectRange[xyIndex];\n                    }\n                ),\n                controller,\n                brushOption,\n                [['w', 'e'], ['n', 's']][xyIndex]\n            );\n        },\n        getCreatingRange: function (localTrack) {\n            var ends = getTrackEnds(localTrack);\n            var min = mathMin$6(ends[0][xyIndex], ends[1][xyIndex]);\n            var max = mathMax$6(ends[0][xyIndex], ends[1][xyIndex]);\n\n            return [min, max];\n        },\n        updateCoverShape: function (controller, cover, localRange, brushOption) {\n            var otherExtent;\n            // If brushWidth not specified, fit the panel.\n            var panel = getPanelByCover(controller, cover);\n            if (panel !== true && panel.getLinearBrushOtherExtent) {\n                otherExtent = panel.getLinearBrushOtherExtent(\n                    xyIndex, controller._transform\n                );\n            }\n            else {\n                var zr = controller._zr;\n                otherExtent = [0, [zr.getWidth(), zr.getHeight()][1 - xyIndex]];\n            }\n            var rectRange = [localRange, otherExtent];\n            xyIndex && rectRange.reverse();\n\n            updateBaseRect(controller, cover, rectRange, brushOption);\n        },\n        updateCommon: updateCommon,\n        contain: mainShapeContain\n    };\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nfunction makeRectPanelClipPath(rect) {\n    rect = normalizeRect(rect);\n    return function (localPoints, transform) {\n        return clipPointsByRect(localPoints, rect);\n    };\n}\n\nfunction makeLinearBrushOtherExtent(rect, specifiedXYIndex) {\n    rect = normalizeRect(rect);\n    return function (xyIndex) {\n        var idx = specifiedXYIndex != null ? specifiedXYIndex : xyIndex;\n        var brushWidth = idx ? rect.width : rect.height;\n        var base = idx ? rect.x : rect.y;\n        return [base, base + (brushWidth || 0)];\n    };\n}\n\nfunction makeRectIsTargetByCursor(rect, api, targetModel) {\n    rect = normalizeRect(rect);\n    return function (e, localCursorPoint, transform) {\n        return rect.contain(localCursorPoint[0], localCursorPoint[1])\n            && !onIrrelevantElement(e, api, targetModel);\n    };\n}\n\n// Consider width/height is negative.\nfunction normalizeRect(rect) {\n    return BoundingRect.create(rect);\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar elementList = ['axisLine', 'axisTickLabel', 'axisName'];\n\nvar AxisView$2 = extendComponentView({\n\n    type: 'parallelAxis',\n\n    /**\n     * @override\n     */\n    init: function (ecModel, api) {\n        AxisView$2.superApply(this, 'init', arguments);\n\n        /**\n         * @type {module:echarts/component/helper/BrushController}\n         */\n        (this._brushController = new BrushController(api.getZr()))\n            .on('brush', bind(this._onBrush, this));\n    },\n\n    /**\n     * @override\n     */\n    render: function (axisModel, ecModel, api, payload) {\n        if (fromAxisAreaSelect(axisModel, ecModel, payload)) {\n            return;\n        }\n\n        this.axisModel = axisModel;\n        this.api = api;\n\n        this.group.removeAll();\n\n        var oldAxisGroup = this._axisGroup;\n        this._axisGroup = new Group();\n        this.group.add(this._axisGroup);\n\n        if (!axisModel.get('show')) {\n            return;\n        }\n\n        var coordSysModel = getCoordSysModel(axisModel, ecModel);\n        var coordSys = coordSysModel.coordinateSystem;\n\n        var areaSelectStyle = axisModel.getAreaSelectStyle();\n        var areaWidth = areaSelectStyle.width;\n\n        var dim = axisModel.axis.dim;\n        var axisLayout = coordSys.getAxisLayout(dim);\n\n        var builderOpt = extend(\n            {strokeContainThreshold: areaWidth},\n            axisLayout\n        );\n\n        var axisBuilder = new AxisBuilder(axisModel, builderOpt);\n\n        each$1(elementList, axisBuilder.add, axisBuilder);\n\n        this._axisGroup.add(axisBuilder.getGroup());\n\n        this._refreshBrushController(\n            builderOpt, areaSelectStyle, axisModel, coordSysModel, areaWidth, api\n        );\n\n        var animationModel = (payload && payload.animation === false) ? null : axisModel;\n        groupTransition(oldAxisGroup, this._axisGroup, animationModel);\n    },\n\n    // /**\n    //  * @override\n    //  */\n    // updateVisual: function (axisModel, ecModel, api, payload) {\n    //     this._brushController && this._brushController\n    //         .updateCovers(getCoverInfoList(axisModel));\n    // },\n\n    _refreshBrushController: function (\n        builderOpt, areaSelectStyle, axisModel, coordSysModel, areaWidth, api\n    ) {\n        // After filtering, axis may change, select area needs to be update.\n        var extent = axisModel.axis.getExtent();\n        var extentLen = extent[1] - extent[0];\n        var extra = Math.min(30, Math.abs(extentLen) * 0.1); // Arbitrary value.\n\n        // width/height might be negative, which will be\n        // normalized in BoundingRect.\n        var rect = BoundingRect.create({\n            x: extent[0],\n            y: -areaWidth / 2,\n            width: extentLen,\n            height: areaWidth\n        });\n        rect.x -= extra;\n        rect.width += 2 * extra;\n\n        this._brushController\n            .mount({\n                enableGlobalPan: true,\n                rotation: builderOpt.rotation,\n                position: builderOpt.position\n            })\n            .setPanels([{\n                panelId: 'pl',\n                clipPath: makeRectPanelClipPath(rect),\n                isTargetByCursor: makeRectIsTargetByCursor(rect, api, coordSysModel),\n                getLinearBrushOtherExtent: makeLinearBrushOtherExtent(rect, 0)\n            }])\n            .enableBrush({\n                brushType: 'lineX',\n                brushStyle: areaSelectStyle,\n                removeOnClick: true\n            })\n            .updateCovers(getCoverInfoList(axisModel));\n    },\n\n    _onBrush: function (coverInfoList, opt) {\n        // Do not cache these object, because the mey be changed.\n        var axisModel = this.axisModel;\n        var axis = axisModel.axis;\n        var intervals = map(coverInfoList, function (coverInfo) {\n            return [\n                axis.coordToData(coverInfo.range[0], true),\n                axis.coordToData(coverInfo.range[1], true)\n            ];\n        });\n\n        // If realtime is true, action is not dispatched on drag end, because\n        // the drag end emits the same params with the last drag move event,\n        // and may have some delay when using touch pad.\n        if (!axisModel.option.realtime === opt.isEnd || opt.removeOnClick) { // jshint ignore:line\n            this.api.dispatchAction({\n                type: 'axisAreaSelect',\n                parallelAxisId: axisModel.id,\n                intervals: intervals\n            });\n        }\n    },\n\n    /**\n     * @override\n     */\n    dispose: function () {\n        this._brushController.dispose();\n    }\n});\n\nfunction fromAxisAreaSelect(axisModel, ecModel, payload) {\n    return payload\n        && payload.type === 'axisAreaSelect'\n        && ecModel.findComponents(\n            {mainType: 'parallelAxis', query: payload}\n        )[0] === axisModel;\n}\n\nfunction getCoverInfoList(axisModel) {\n    var axis = axisModel.axis;\n    return map(axisModel.activeIntervals, function (interval) {\n        return {\n            brushType: 'lineX',\n            panelId: 'pl',\n            range: [\n                axis.dataToCoord(interval[0], true),\n                axis.dataToCoord(interval[1], true)\n            ]\n        };\n    });\n}\n\nfunction getCoordSysModel(axisModel, ecModel) {\n    return ecModel.getComponent(\n        'parallel', axisModel.get('parallelIndex')\n    );\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar CLICK_THRESHOLD = 5; // > 4\n\n// Parallel view\nextendComponentView({\n    type: 'parallel',\n\n    render: function (parallelModel, ecModel, api) {\n        this._model = parallelModel;\n        this._api = api;\n\n        if (!this._handlers) {\n            this._handlers = {};\n            each$1(handlers, function (handler, eventName) {\n                api.getZr().on(eventName, this._handlers[eventName] = bind(handler, this));\n            }, this);\n        }\n\n        createOrUpdate(\n            this,\n            '_throttledDispatchExpand',\n            parallelModel.get('axisExpandRate'),\n            'fixRate'\n        );\n    },\n\n    dispose: function (ecModel, api) {\n        each$1(this._handlers, function (handler, eventName) {\n            api.getZr().off(eventName, handler);\n        });\n        this._handlers = null;\n    },\n\n    /**\n     * @param {Object} [opt] If null, cancle the last action triggering for debounce.\n     */\n    _throttledDispatchExpand: function (opt) {\n        this._dispatchExpand(opt);\n    },\n\n    _dispatchExpand: function (opt) {\n        opt && this._api.dispatchAction(\n            extend({type: 'parallelAxisExpand'}, opt)\n        );\n    }\n\n});\n\nvar handlers = {\n\n    mousedown: function (e) {\n        if (checkTrigger(this, 'click')) {\n            this._mouseDownPoint = [e.offsetX, e.offsetY];\n        }\n    },\n\n    mouseup: function (e) {\n        var mouseDownPoint = this._mouseDownPoint;\n\n        if (checkTrigger(this, 'click') && mouseDownPoint) {\n            var point = [e.offsetX, e.offsetY];\n            var dist = Math.pow(mouseDownPoint[0] - point[0], 2)\n                + Math.pow(mouseDownPoint[1] - point[1], 2);\n\n            if (dist > CLICK_THRESHOLD) {\n                return;\n            }\n\n            var result = this._model.coordinateSystem.getSlidedAxisExpandWindow(\n                [e.offsetX, e.offsetY]\n            );\n\n            result.behavior !== 'none' && this._dispatchExpand({\n                axisExpandWindow: result.axisExpandWindow\n            });\n        }\n\n        this._mouseDownPoint = null;\n    },\n\n    mousemove: function (e) {\n        // Should do nothing when brushing.\n        if (this._mouseDownPoint || !checkTrigger(this, 'mousemove')) {\n            return;\n        }\n        var model = this._model;\n        var result = model.coordinateSystem.getSlidedAxisExpandWindow(\n            [e.offsetX, e.offsetY]\n        );\n\n        var behavior = result.behavior;\n        behavior === 'jump' && this._throttledDispatchExpand.debounceNextCall(model.get('axisExpandDebounce'));\n        this._throttledDispatchExpand(\n            behavior === 'none'\n                ? null // Cancle the last trigger, in case that mouse slide out of the area quickly.\n                : {\n                    axisExpandWindow: result.axisExpandWindow,\n                    // Jumping uses animation, and sliding suppresses animation.\n                    animation: behavior === 'jump' ? null : false\n                }\n        );\n    }\n};\n\nfunction checkTrigger(view, triggerOn) {\n    var model = view._model;\n    return model.get('axisExpandable') && model.get('axisExpandTriggerOn') === triggerOn;\n}\n\nregisterPreprocessor(parallelPreprocessor);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nSeriesModel.extend({\n\n    type: 'series.parallel',\n\n    dependencies: ['parallel'],\n\n    visualColorAccessPath: 'lineStyle.color',\n\n    getInitialData: function (option, ecModel) {\n        var source = this.getSource();\n\n        setEncodeAndDimensions(source, this);\n\n        return createListFromArray(source, this);\n    },\n\n    /**\n     * User can get data raw indices on 'axisAreaSelected' event received.\n     *\n     * @public\n     * @param {string} activeState 'active' or 'inactive' or 'normal'\n     * @return {Array.<number>} Raw indices\n     */\n    getRawIndicesByActiveState: function (activeState) {\n        var coordSys = this.coordinateSystem;\n        var data = this.getData();\n        var indices = [];\n\n        coordSys.eachActiveState(data, function (theActiveState, dataIndex) {\n            if (activeState === theActiveState) {\n                indices.push(data.getRawIndex(dataIndex));\n            }\n        });\n\n        return indices;\n    },\n\n    defaultOption: {\n        zlevel: 0,                  // 一级层叠\n        z: 2,                       // 二级层叠\n\n        coordinateSystem: 'parallel',\n        parallelIndex: 0,\n\n        label: {\n            show: false\n        },\n\n        inactiveOpacity: 0.05,\n        activeOpacity: 1,\n\n        lineStyle: {\n            width: 1,\n            opacity: 0.45,\n            type: 'solid'\n        },\n        emphasis: {\n            label: {\n                show: false\n            }\n        },\n\n        progressive: 500,\n        smooth: false, // true | false | number\n\n        animationEasing: 'linear'\n    }\n});\n\nfunction setEncodeAndDimensions(source, seriesModel) {\n    // The mapping of parallelAxis dimension to data dimension can\n    // be specified in parallelAxis.option.dim. For example, if\n    // parallelAxis.option.dim is 'dim3', it mapping to the third\n    // dimension of data. But `data.encode` has higher priority.\n    // Moreover, parallelModel.dimension should not be regarded as data\n    // dimensions. Consider dimensions = ['dim4', 'dim2', 'dim6'];\n\n    if (source.encodeDefine) {\n        return;\n    }\n\n    var parallelModel = seriesModel.ecModel.getComponent(\n        'parallel', seriesModel.get('parallelIndex')\n    );\n    if (!parallelModel) {\n        return;\n    }\n\n    var encodeDefine = source.encodeDefine = createHashMap();\n    each$1(parallelModel.dimensions, function (axisDim) {\n        var dataDimIndex = convertDimNameToNumber(axisDim);\n        encodeDefine.set(axisDim, dataDimIndex);\n    });\n}\n\nfunction convertDimNameToNumber(dimName) {\n    return +dimName.replace('dim', '');\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar DEFAULT_SMOOTH = 0.3;\n\nvar ParallelView = Chart.extend({\n\n    type: 'parallel',\n\n    init: function () {\n\n        /**\n         * @type {module:zrender/container/Group}\n         * @private\n         */\n        this._dataGroup = new Group();\n\n        this.group.add(this._dataGroup);\n\n        /**\n         * @type {module:echarts/data/List}\n         */\n        this._data;\n\n        /**\n         * @type {boolean}\n         */\n        this._initialized;\n    },\n\n    /**\n     * @override\n     */\n    render: function (seriesModel, ecModel, api, payload) {\n        var dataGroup = this._dataGroup;\n        var data = seriesModel.getData();\n        var oldData = this._data;\n        var coordSys = seriesModel.coordinateSystem;\n        var dimensions = coordSys.dimensions;\n        var seriesScope = makeSeriesScope$2(seriesModel);\n\n        data.diff(oldData)\n            .add(add)\n            .update(update)\n            .remove(remove)\n            .execute();\n\n        function add(newDataIndex) {\n            var line = addEl(data, dataGroup, newDataIndex, dimensions, coordSys);\n            updateElCommon(line, data, newDataIndex, seriesScope);\n        }\n\n        function update(newDataIndex, oldDataIndex) {\n            var line = oldData.getItemGraphicEl(oldDataIndex);\n            var points = createLinePoints(data, newDataIndex, dimensions, coordSys);\n            data.setItemGraphicEl(newDataIndex, line);\n            var animationModel = (payload && payload.animation === false) ? null : seriesModel;\n            updateProps(line, {shape: {points: points}}, animationModel, newDataIndex);\n\n            updateElCommon(line, data, newDataIndex, seriesScope);\n        }\n\n        function remove(oldDataIndex) {\n            var line = oldData.getItemGraphicEl(oldDataIndex);\n            dataGroup.remove(line);\n        }\n\n        // First create\n        if (!this._initialized) {\n            this._initialized = true;\n            var clipPath = createGridClipShape$1(\n                coordSys, seriesModel, function () {\n                    // Callback will be invoked immediately if there is no animation\n                    setTimeout(function () {\n                        dataGroup.removeClipPath();\n                    });\n                }\n            );\n            dataGroup.setClipPath(clipPath);\n        }\n\n        this._data = data;\n    },\n\n    incrementalPrepareRender: function (seriesModel, ecModel, api) {\n        this._initialized = true;\n        this._data = null;\n        this._dataGroup.removeAll();\n    },\n\n    incrementalRender: function (taskParams, seriesModel, ecModel) {\n        var data = seriesModel.getData();\n        var coordSys = seriesModel.coordinateSystem;\n        var dimensions = coordSys.dimensions;\n        var seriesScope = makeSeriesScope$2(seriesModel);\n\n        for (var dataIndex = taskParams.start; dataIndex < taskParams.end; dataIndex++) {\n            var line = addEl(data, this._dataGroup, dataIndex, dimensions, coordSys);\n            line.incremental = true;\n            updateElCommon(line, data, dataIndex, seriesScope);\n        }\n    },\n\n    dispose: function () {},\n\n    // _renderForProgressive: function (seriesModel) {\n    //     var dataGroup = this._dataGroup;\n    //     var data = seriesModel.getData();\n    //     var oldData = this._data;\n    //     var coordSys = seriesModel.coordinateSystem;\n    //     var dimensions = coordSys.dimensions;\n    //     var option = seriesModel.option;\n    //     var progressive = option.progressive;\n    //     var smooth = option.smooth ? SMOOTH : null;\n\n    //     // In progressive animation is disabled, so use simple data diff,\n    //     // which effects performance less.\n    //     // (Typically performance for data with length 7000+ like:\n    //     // simpleDiff: 60ms, addEl: 184ms,\n    //     // in RMBP 2.4GHz intel i7, OSX 10.9 chrome 50.0.2661.102 (64-bit))\n    //     if (simpleDiff(oldData, data, dimensions)) {\n    //         dataGroup.removeAll();\n    //         data.each(function (dataIndex) {\n    //             addEl(data, dataGroup, dataIndex, dimensions, coordSys);\n    //         });\n    //     }\n\n    //     updateElCommon(data, progressive, smooth);\n\n    //     // Consider switch between progressive and not.\n    //     data.__plProgressive = true;\n    //     this._data = data;\n    // },\n\n    /**\n     * @override\n     */\n    remove: function () {\n        this._dataGroup && this._dataGroup.removeAll();\n        this._data = null;\n    }\n});\n\nfunction createGridClipShape$1(coordSys, seriesModel, cb) {\n    var parallelModel = coordSys.model;\n    var rect = coordSys.getRect();\n    var rectEl = new Rect({\n        shape: {\n            x: rect.x,\n            y: rect.y,\n            width: rect.width,\n            height: rect.height\n        }\n    });\n\n    var dim = parallelModel.get('layout') === 'horizontal' ? 'width' : 'height';\n    rectEl.setShape(dim, 0);\n    initProps(rectEl, {\n        shape: {\n            width: rect.width,\n            height: rect.height\n        }\n    }, seriesModel, cb);\n    return rectEl;\n}\n\nfunction createLinePoints(data, dataIndex, dimensions, coordSys) {\n    var points = [];\n    for (var i = 0; i < dimensions.length; i++) {\n        var dimName = dimensions[i];\n        var value = data.get(data.mapDimension(dimName), dataIndex);\n        if (!isEmptyValue(value, coordSys.getAxis(dimName).type)) {\n            points.push(coordSys.dataToPoint(value, dimName));\n        }\n    }\n    return points;\n}\n\nfunction addEl(data, dataGroup, dataIndex, dimensions, coordSys) {\n    var points = createLinePoints(data, dataIndex, dimensions, coordSys);\n    var line = new Polyline({\n        shape: {points: points},\n        silent: true,\n        z2: 10\n    });\n    dataGroup.add(line);\n    data.setItemGraphicEl(dataIndex, line);\n    return line;\n}\n\nfunction makeSeriesScope$2(seriesModel) {\n    var smooth = seriesModel.get('smooth', true);\n    smooth === true && (smooth = DEFAULT_SMOOTH);\n    return {\n        lineStyle: seriesModel.getModel('lineStyle').getLineStyle(),\n        smooth: smooth != null ? smooth : DEFAULT_SMOOTH\n    };\n}\n\nfunction updateElCommon(el, data, dataIndex, seriesScope) {\n    var lineStyle = seriesScope.lineStyle;\n\n    if (data.hasItemOption) {\n        var lineStyleModel = data.getItemModel(dataIndex).getModel('lineStyle');\n        lineStyle = lineStyleModel.getLineStyle();\n    }\n\n    el.useStyle(lineStyle);\n\n    var elStyle = el.style;\n    elStyle.fill = null;\n    // lineStyle.color have been set to itemVisual in module:echarts/visual/seriesColor.\n    elStyle.stroke = data.getItemVisual(dataIndex, 'color');\n    // lineStyle.opacity have been set to itemVisual in parallelVisual.\n    elStyle.opacity = data.getItemVisual(dataIndex, 'opacity');\n\n    seriesScope.smooth && (el.shape.smooth = seriesScope.smooth);\n}\n\n// function simpleDiff(oldData, newData, dimensions) {\n//     var oldLen;\n//     if (!oldData\n//         || !oldData.__plProgressive\n//         || (oldLen = oldData.count()) !== newData.count()\n//     ) {\n//         return true;\n//     }\n\n//     var dimLen = dimensions.length;\n//     for (var i = 0; i < oldLen; i++) {\n//         for (var j = 0; j < dimLen; j++) {\n//             if (oldData.get(dimensions[j], i) !== newData.get(dimensions[j], i)) {\n//                 return true;\n//             }\n//         }\n//     }\n\n//     return false;\n// }\n\n// FIXME\n// 公用方法?\nfunction isEmptyValue(val, axisType) {\n    return axisType === 'category'\n        ? val == null\n        : (val == null || isNaN(val)); // axisType === 'value'\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\nvar opacityAccessPath$1 = ['lineStyle', 'normal', 'opacity'];\n\nvar parallelVisual = {\n\n    seriesType: 'parallel',\n\n    reset: function (seriesModel, ecModel, api) {\n\n        var itemStyleModel = seriesModel.getModel('itemStyle');\n        var lineStyleModel = seriesModel.getModel('lineStyle');\n        var globalColors = ecModel.get('color');\n\n        var color = lineStyleModel.get('color')\n            || itemStyleModel.get('color')\n            || globalColors[seriesModel.seriesIndex % globalColors.length];\n        var inactiveOpacity = seriesModel.get('inactiveOpacity');\n        var activeOpacity = seriesModel.get('activeOpacity');\n        var lineStyle = seriesModel.getModel('lineStyle').getLineStyle();\n\n        var coordSys = seriesModel.coordinateSystem;\n        var data = seriesModel.getData();\n\n        var opacityMap = {\n            normal: lineStyle.opacity,\n            active: activeOpacity,\n            inactive: inactiveOpacity\n        };\n\n        data.setVisual('color', color);\n\n        function progress(params, data) {\n            coordSys.eachActiveState(data, function (activeState, dataIndex) {\n                var opacity = opacityMap[activeState];\n                if (activeState === 'normal' && data.hasItemOption) {\n                    var itemOpacity = data.getItemModel(dataIndex).get(opacityAccessPath$1, true);\n                    itemOpacity != null && (opacity = itemOpacity);\n                }\n                data.setItemVisual(dataIndex, 'opacity', opacity);\n            }, params.start, params.end);\n        }\n\n        return {progress: progress};\n    }\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nregisterVisual(parallelVisual);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar SankeySeries = SeriesModel.extend({\n\n    type: 'series.sankey',\n\n    layoutInfo: null,\n\n    levelModels: null,\n\n    /**\n     * Init a graph data structure from data in option series\n     *\n     * @param  {Object} option  the object used to config echarts view\n     * @return {module:echarts/data/List} storage initial data\n     */\n    getInitialData: function (option, ecModel) {\n        var links = option.edges || option.links;\n        var nodes = option.data || option.nodes;\n        var levels = option.levels;\n        var levelModels = this.levelModels = {};\n\n        for (var i = 0; i < levels.length; i++) {\n            if (levels[i].depth != null && levels[i].depth >= 0) {\n                levelModels[levels[i].depth] = new Model(levels[i], this, ecModel);\n            }\n            else {\n                if (__DEV__) {\n                    throw new Error('levels[i].depth is mandatory and should be natural number');\n                }\n            }\n        }\n        if (nodes && links) {\n            var graph = createGraphFromNodeEdge(nodes, links, this, true, beforeLink);\n            return graph.data;\n        }\n        function beforeLink(nodeData, edgeData) {\n            nodeData.wrapMethod('getItemModel', function (model, idx) {\n                model.customizeGetParent(function (path) {\n                    var parentModel = this.parentModel;\n                    var nodeDepth = parentModel.getData().getItemLayout(idx).depth;\n                    var levelModel = parentModel.levelModels[nodeDepth];\n                    return levelModel || this.parentModel;\n                });\n                return model;\n            });\n\n            edgeData.wrapMethod('getItemModel', function (model, idx) {\n                model.customizeGetParent(function (path) {\n                    var parentModel = this.parentModel;\n                    var edge = parentModel.getGraph().getEdgeByIndex(idx);\n                    var depth = edge.node1.getLayout().depth;\n                    var levelModel = parentModel.levelModels[depth];\n                    return levelModel || this.parentModel;\n                });\n                return model;\n            });\n        }\n    },\n\n    setNodePosition: function (dataIndex, localPosition) {\n        var dataItem = this.option.data[dataIndex];\n        dataItem.localX = localPosition[0];\n        dataItem.localY = localPosition[1];\n    },\n\n    /**\n     * Return the graphic data structure\n     *\n     * @return {module:echarts/data/Graph} graphic data structure\n     */\n    getGraph: function () {\n        return this.getData().graph;\n    },\n\n    /**\n     * Get edge data of graphic data structure\n     *\n     * @return {module:echarts/data/List} data structure of list\n     */\n    getEdgeData: function () {\n        return this.getGraph().edgeData;\n    },\n\n    /**\n     * @override\n     */\n    formatTooltip: function (dataIndex, multipleSeries, dataType) {\n        // dataType === 'node' or empty do not show tooltip by default\n        if (dataType === 'edge') {\n            var params = this.getDataParams(dataIndex, dataType);\n            var rawDataOpt = params.data;\n            var html = rawDataOpt.source + ' -- ' + rawDataOpt.target;\n            if (params.value) {\n                html += ' : ' + params.value;\n            }\n            return encodeHTML(html);\n        }\n        else if (dataType === 'node') {\n            var node = this.getGraph().getNodeByIndex(dataIndex);\n            var value = node.getLayout().value;\n            var name = this.getDataParams(dataIndex, dataType).data.name;\n            if (value) {\n                var html = name + ' : ' + value;\n            }\n            return encodeHTML(html);\n        }\n        return SankeySeries.superCall(this, 'formatTooltip', dataIndex, multipleSeries);\n    },\n\n    optionUpdated: function () {\n        var option = this.option;\n        if (option.focusNodeAdjacency === true) {\n            option.focusNodeAdjacency = 'allEdges';\n        }\n    },\n\n    defaultOption: {\n        zlevel: 0,\n        z: 2,\n\n        coordinateSystem: 'view',\n\n        layout: null,\n\n        // The position of the whole view\n        left: '5%',\n        top: '5%',\n        right: '20%',\n        bottom: '5%',\n\n        // Value can be 'vertical'\n        orient: 'horizontal',\n\n        // The dx of the node\n        nodeWidth: 20,\n\n        // The vertical distance between two nodes\n        nodeGap: 8,\n\n        // Control if the node can move or not\n        draggable: true,\n\n        // Value can be 'inEdges', 'outEdges', 'allEdges', true (the same as 'allEdges').\n        focusNodeAdjacency: false,\n\n        // The number of iterations to change the position of the node\n        layoutIterations: 32,\n\n        label: {\n            show: true,\n            position: 'right',\n            color: '#000',\n            fontSize: 12\n        },\n\n        levels: [],\n\n        // Value can be 'left' or 'right'\n        nodeAlign: 'justify',\n\n        itemStyle: {\n            borderWidth: 1,\n            borderColor: '#333'\n        },\n\n        lineStyle: {\n            color: '#314656',\n            opacity: 0.2,\n            curveness: 0.5\n        },\n\n        emphasis: {\n            label: {\n                show: true\n            },\n            lineStyle: {\n                opacity: 0.6\n            }\n        },\n\n        animationEasing: 'linear',\n\n        animationDuration: 1000\n    }\n\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar nodeOpacityPath$1 = ['itemStyle', 'opacity'];\nvar lineOpacityPath$1 = ['lineStyle', 'opacity'];\n\nfunction getItemOpacity$1(item, opacityPath) {\n    return item.getVisual('opacity') || item.getModel().get(opacityPath);\n}\n\nfunction fadeOutItem$1(item, opacityPath, opacityRatio) {\n    var el = item.getGraphicEl();\n\n    var opacity = getItemOpacity$1(item, opacityPath);\n    if (opacityRatio != null) {\n        opacity == null && (opacity = 1);\n        opacity *= opacityRatio;\n    }\n\n    el.downplay && el.downplay();\n    el.traverse(function (child) {\n        if (child.type !== 'group') {\n            child.setStyle('opacity', opacity);\n        }\n    });\n}\n\nfunction fadeInItem$1(item, opacityPath) {\n    var opacity = getItemOpacity$1(item, opacityPath);\n    var el = item.getGraphicEl();\n\n    el.highlight && el.highlight();\n    el.traverse(function (child) {\n        if (child.type !== 'group') {\n            child.setStyle('opacity', opacity);\n        }\n    });\n}\n\nvar SankeyShape = extendShape({\n    shape: {\n        x1: 0, y1: 0,\n        x2: 0, y2: 0,\n        cpx1: 0, cpy1: 0,\n        cpx2: 0, cpy2: 0,\n        extent: 0,\n        orient: ''\n    },\n\n    buildPath: function (ctx, shape) {\n        var extent = shape.extent;\n        ctx.moveTo(shape.x1, shape.y1);\n        ctx.bezierCurveTo(\n            shape.cpx1, shape.cpy1,\n            shape.cpx2, shape.cpy2,\n            shape.x2, shape.y2\n        );\n        if (shape.orient === 'vertical') {\n            ctx.lineTo(shape.x2 + extent, shape.y2);\n            ctx.bezierCurveTo(\n                shape.cpx2 + extent, shape.cpy2,\n                shape.cpx1 + extent, shape.cpy1,\n                shape.x1 + extent, shape.y1\n            );\n        }\n        else {\n            ctx.lineTo(shape.x2, shape.y2 + extent);\n            ctx.bezierCurveTo(\n                shape.cpx2, shape.cpy2 + extent,\n                shape.cpx1, shape.cpy1 + extent,\n                shape.x1, shape.y1 + extent\n            );\n        }\n        ctx.closePath();\n    }\n});\n\nextendChartView({\n\n    type: 'sankey',\n\n    /**\n     * @private\n     * @type {module:echarts/chart/sankey/SankeySeries}\n     */\n    _model: null,\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    _focusAdjacencyDisabled: false,\n\n    render: function (seriesModel, ecModel, api) {\n        var sankeyView = this;\n        var graph = seriesModel.getGraph();\n        var group = this.group;\n        var layoutInfo = seriesModel.layoutInfo;\n        // view width\n        var width = layoutInfo.width;\n        // view height\n        var height = layoutInfo.height;\n        var nodeData = seriesModel.getData();\n        var edgeData = seriesModel.getData('edge');\n        var orient = seriesModel.get('orient');\n\n        this._model = seriesModel;\n\n        group.removeAll();\n\n        group.attr('position', [layoutInfo.x, layoutInfo.y]);\n\n        // generate a bezire Curve for each edge\n        graph.eachEdge(function (edge) {\n            var curve = new SankeyShape();\n            curve.dataIndex = edge.dataIndex;\n            curve.seriesIndex = seriesModel.seriesIndex;\n            curve.dataType = 'edge';\n            var lineStyleModel = edge.getModel('lineStyle');\n            var curvature = lineStyleModel.get('curveness');\n            var n1Layout = edge.node1.getLayout();\n            var node1Model = edge.node1.getModel();\n            var dragX1 = node1Model.get('localX');\n            var dragY1 = node1Model.get('localY');\n            var n2Layout = edge.node2.getLayout();\n            var node2Model = edge.node2.getModel();\n            var dragX2 = node2Model.get('localX');\n            var dragY2 = node2Model.get('localY');\n            var edgeLayout = edge.getLayout();\n            var x1;\n            var y1;\n            var x2;\n            var y2;\n            var cpx1;\n            var cpy1;\n            var cpx2;\n            var cpy2;\n\n            curve.shape.extent = Math.max(1, edgeLayout.dy);\n            curve.shape.orient = orient;\n\n            if (orient === 'vertical') {\n                x1 = (dragX1 != null ? dragX1 * width : n1Layout.x) + edgeLayout.sy;\n                y1 = (dragY1 != null ? dragY1 * height : n1Layout.y) + n1Layout.dy;\n                x2 = (dragX2 != null ? dragX2 * width : n2Layout.x) + edgeLayout.ty;\n                y2 = dragY2 != null ? dragY2 * height : n2Layout.y;\n                cpx1 = x1;\n                cpy1 = y1 * (1 - curvature) + y2 * curvature;\n                cpx2 = x2;\n                cpy2 = y1 * curvature + y2 * (1 - curvature);\n            }\n            else {\n                x1 = (dragX1 != null ? dragX1 * width : n1Layout.x) + n1Layout.dx;\n                y1 = (dragY1 != null ? dragY1 * height : n1Layout.y) + edgeLayout.sy;\n                x2 = dragX2 != null ? dragX2 * width : n2Layout.x;\n                y2 = (dragY2 != null ? dragY2 * height : n2Layout.y) + edgeLayout.ty;\n                cpx1 = x1 * (1 - curvature) + x2 * curvature;\n                cpy1 = y1;\n                cpx2 = x1 * curvature + x2 * (1 - curvature);\n                cpy2 = y2;\n            }\n\n            curve.setShape({\n                x1: x1,\n                y1: y1,\n                x2: x2,\n                y2: y2,\n                cpx1: cpx1,\n                cpy1: cpy1,\n                cpx2: cpx2,\n                cpy2: cpy2\n            });\n\n            curve.setStyle(lineStyleModel.getItemStyle());\n            // Special color, use source node color or target node color\n            switch (curve.style.fill) {\n                case 'source':\n                    curve.style.fill = edge.node1.getVisual('color');\n                    break;\n                case 'target':\n                    curve.style.fill = edge.node2.getVisual('color');\n                    break;\n            }\n\n            setHoverStyle(curve, edge.getModel('emphasis.lineStyle').getItemStyle());\n\n            group.add(curve);\n\n            edgeData.setItemGraphicEl(edge.dataIndex, curve);\n        });\n\n        // Generate a rect for each node\n        graph.eachNode(function (node) {\n            var layout = node.getLayout();\n            var itemModel = node.getModel();\n            var dragX = itemModel.get('localX');\n            var dragY = itemModel.get('localY');\n            var labelModel = itemModel.getModel('label');\n            var labelHoverModel = itemModel.getModel('emphasis.label');\n\n            var rect = new Rect({\n                shape: {\n                    x: dragX != null ? dragX * width : layout.x,\n                    y: dragY != null ? dragY * height : layout.y,\n                    width: layout.dx,\n                    height: layout.dy\n                },\n                style: itemModel.getModel('itemStyle').getItemStyle()\n            });\n\n            var hoverStyle = node.getModel('emphasis.itemStyle').getItemStyle();\n\n            setLabelStyle(\n                rect.style, hoverStyle, labelModel, labelHoverModel,\n                {\n                    labelFetcher: seriesModel,\n                    labelDataIndex: node.dataIndex,\n                    defaultText: node.id,\n                    isRectText: true\n                }\n            );\n\n            rect.setStyle('fill', node.getVisual('color'));\n\n            setHoverStyle(rect, hoverStyle);\n\n            group.add(rect);\n\n            nodeData.setItemGraphicEl(node.dataIndex, rect);\n\n            rect.dataType = 'node';\n        });\n\n        nodeData.eachItemGraphicEl(function (el, dataIndex) {\n            var itemModel = nodeData.getItemModel(dataIndex);\n            if (itemModel.get('draggable')) {\n                el.drift = function (dx, dy) {\n                    sankeyView._focusAdjacencyDisabled = true;\n                    this.shape.x += dx;\n                    this.shape.y += dy;\n                    this.dirty();\n                    api.dispatchAction({\n                        type: 'dragNode',\n                        seriesId: seriesModel.id,\n                        dataIndex: nodeData.getRawIndex(dataIndex),\n                        localX: this.shape.x / width,\n                        localY: this.shape.y / height\n                    });\n                };\n                el.ondragend = function () {\n                    sankeyView._focusAdjacencyDisabled = false;\n                };\n                el.draggable = true;\n                el.cursor = 'move';\n            }\n\n            if (itemModel.get('focusNodeAdjacency')) {\n                el.off('mouseover').on('mouseover', function () {\n                    if (!sankeyView._focusAdjacencyDisabled) {\n                        api.dispatchAction({\n                            type: 'focusNodeAdjacency',\n                            seriesId: seriesModel.id,\n                            dataIndex: el.dataIndex\n                        });\n                    }\n                });\n                el.off('mouseout').on('mouseout', function () {\n                    if (!sankeyView._focusAdjacencyDisabled) {\n                        api.dispatchAction({\n                            type: 'unfocusNodeAdjacency',\n                            seriesId: seriesModel.id\n                        });\n                    }\n                });\n            }\n        });\n\n        edgeData.eachItemGraphicEl(function (el, dataIndex) {\n            var edgeModel = edgeData.getItemModel(dataIndex);\n            if (edgeModel.get('focusNodeAdjacency')) {\n                el.off('mouseover').on('mouseover', function () {\n                    if (!sankeyView._focusAdjacencyDisabled) {\n                        api.dispatchAction({\n                            type: 'focusNodeAdjacency',\n                            seriesId: seriesModel.id,\n                            edgeDataIndex: el.dataIndex\n                        });\n                    }\n                });\n                el.off('mouseout').on('mouseout', function () {\n                    if (!sankeyView._focusAdjacencyDisabled) {\n                        api.dispatchAction({\n                            type: 'unfocusNodeAdjacency',\n                            seriesId: seriesModel.id\n                        });\n                    }\n                });\n            }\n        });\n\n        if (!this._data && seriesModel.get('animation')) {\n            group.setClipPath(createGridClipShape$2(group.getBoundingRect(), seriesModel, function () {\n                group.removeClipPath();\n            }));\n        }\n\n        this._data = seriesModel.getData();\n    },\n\n    dispose: function () {},\n\n    focusNodeAdjacency: function (seriesModel, ecModel, api, payload) {\n        var data = this._model.getData();\n        var graph = data.graph;\n        var dataIndex = payload.dataIndex;\n        var itemModel = data.getItemModel(dataIndex);\n        var edgeDataIndex = payload.edgeDataIndex;\n\n        if (dataIndex == null && edgeDataIndex == null) {\n            return;\n        }\n        var node = graph.getNodeByIndex(dataIndex);\n        var edge = graph.getEdgeByIndex(edgeDataIndex);\n\n        graph.eachNode(function (node) {\n            fadeOutItem$1(node, nodeOpacityPath$1, 0.1);\n        });\n        graph.eachEdge(function (edge) {\n            fadeOutItem$1(edge, lineOpacityPath$1, 0.1);\n        });\n\n        if (node) {\n            fadeInItem$1(node, nodeOpacityPath$1);\n            var focusNodeAdj = itemModel.get('focusNodeAdjacency');\n            if (focusNodeAdj === 'outEdges') {\n                each$1(node.outEdges, function (edge) {\n                    if (edge.dataIndex < 0) {\n                        return;\n                    }\n                    fadeInItem$1(edge, lineOpacityPath$1);\n                    fadeInItem$1(edge.node2, nodeOpacityPath$1);\n                });\n            }\n            else if (focusNodeAdj === 'inEdges') {\n                each$1(node.inEdges, function (edge) {\n                    if (edge.dataIndex < 0) {\n                        return;\n                    }\n                    fadeInItem$1(edge, lineOpacityPath$1);\n                    fadeInItem$1(edge.node1, nodeOpacityPath$1);\n                });\n            }\n            else if (focusNodeAdj === 'allEdges') {\n                each$1(node.edges, function (edge) {\n                    if (edge.dataIndex < 0) {\n                        return;\n                    }\n                    fadeInItem$1(edge, lineOpacityPath$1);\n                    fadeInItem$1(edge.node1, nodeOpacityPath$1);\n                    fadeInItem$1(edge.node2, nodeOpacityPath$1);\n                });\n            }\n        }\n        if (edge) {\n            fadeInItem$1(edge, lineOpacityPath$1);\n            fadeInItem$1(edge.node1, nodeOpacityPath$1);\n            fadeInItem$1(edge.node2, nodeOpacityPath$1);\n        }\n    },\n\n    unfocusNodeAdjacency: function (seriesModel, ecModel, api, payload) {\n        var graph = this._model.getGraph();\n\n        graph.eachNode(function (node) {\n            fadeOutItem$1(node, nodeOpacityPath$1);\n        });\n        graph.eachEdge(function (edge) {\n            fadeOutItem$1(edge, lineOpacityPath$1);\n        });\n    }\n});\n\n// Add animation to the view\nfunction createGridClipShape$2(rect, seriesModel, cb) {\n    var rectEl = new Rect({\n        shape: {\n            x: rect.x - 10,\n            y: rect.y - 10,\n            width: 0,\n            height: rect.height + 20\n        }\n    });\n    initProps(rectEl, {\n        shape: {\n            width: rect.width + 20,\n            height: rect.height + 20\n        }\n    }, seriesModel, cb);\n\n    return rectEl;\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nregisterAction({\n    type: 'dragNode',\n    event: 'dragNode',\n    // here can only use 'update' now, other value is not support in echarts.\n    update: 'update'\n}, function (payload, ecModel) {\n    ecModel.eachComponent({mainType: 'series', subType: 'sankey', query: payload}, function (seriesModel) {\n        seriesModel.setNodePosition(payload.dataIndex, [payload.localX, payload.localY]);\n    });\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar sankeyLayout = function (ecModel, api, payload) {\n\n    ecModel.eachSeriesByType('sankey', function (seriesModel) {\n\n        var nodeWidth = seriesModel.get('nodeWidth');\n        var nodeGap = seriesModel.get('nodeGap');\n\n        var layoutInfo = getViewRect$3(seriesModel, api);\n\n        seriesModel.layoutInfo = layoutInfo;\n\n        var width = layoutInfo.width;\n        var height = layoutInfo.height;\n\n        var graph = seriesModel.getGraph();\n\n        var nodes = graph.nodes;\n        var edges = graph.edges;\n\n        computeNodeValues(nodes);\n\n        var filteredNodes = filter(nodes, function (node) {\n            return node.getLayout().value === 0;\n        });\n\n        var iterations = filteredNodes.length !== 0 ? 0 : seriesModel.get('layoutIterations');\n\n        var orient = seriesModel.get('orient');\n\n        var nodeAlign = seriesModel.get('nodeAlign');\n\n        layoutSankey(nodes, edges, nodeWidth, nodeGap, width, height, iterations, orient, nodeAlign);\n    });\n};\n\n/**\n * Get the layout position of the whole view\n *\n * @param {module:echarts/model/Series} seriesModel  the model object of sankey series\n * @param {module:echarts/ExtensionAPI} api  provide the API list that the developer can call\n * @return {module:zrender/core/BoundingRect}  size of rect to draw the sankey view\n */\nfunction getViewRect$3(seriesModel, api) {\n    return getLayoutRect(\n        seriesModel.getBoxLayoutParams(), {\n            width: api.getWidth(),\n            height: api.getHeight()\n        }\n    );\n}\n\nfunction layoutSankey(nodes, edges, nodeWidth, nodeGap, width, height, iterations, orient, nodeAlign) {\n    computeNodeBreadths(nodes, edges, nodeWidth, width, height, orient, nodeAlign);\n    computeNodeDepths(nodes, edges, height, width, nodeGap, iterations, orient);\n    computeEdgeDepths(nodes, orient);\n}\n\n/**\n * Compute the value of each node by summing the associated edge's value\n *\n * @param {module:echarts/data/Graph~Node} nodes  node of sankey view\n */\nfunction computeNodeValues(nodes) {\n    each$1(nodes, function (node) {\n        var value1 = sum(node.outEdges, getEdgeValue);\n        var value2 = sum(node.inEdges, getEdgeValue);\n        var value = Math.max(value1, value2);\n        node.setLayout({value: value}, true);\n    });\n}\n\n/**\n * Compute the x-position for each node.\n *\n * Here we use Kahn algorithm to detect cycle when we traverse\n * the node to computer the initial x position.\n *\n * @param {module:echarts/data/Graph~Node} nodes  node of sankey view\n * @param  {number} nodeWidth  the dx of the node\n * @param  {number} width  the whole width of the area to draw the view\n */\nfunction computeNodeBreadths(nodes, edges, nodeWidth, width, height, orient, nodeAlign) {\n    // Used to mark whether the edge is deleted. if it is deleted,\n    // the value is 0, otherwise it is 1.\n    var remainEdges = [];\n    // Storage each node's indegree.\n    var indegreeArr = [];\n    //Used to storage the node with indegree is equal to 0.\n    var zeroIndegrees = [];\n    var nextTargetNode = [];\n    var x = 0;\n    var kx = 0;\n\n    for (var i = 0; i < edges.length; i++) {\n        remainEdges[i] = 1;\n    }\n    for (i = 0; i < nodes.length; i++) {\n        indegreeArr[i] = nodes[i].inEdges.length;\n        if (indegreeArr[i] === 0) {\n            zeroIndegrees.push(nodes[i]);\n        }\n    }\n    var maxNodeDepth = -1;\n    // Traversing nodes using topological sorting to calculate the\n    // horizontal(if orient === 'horizontal') or vertical(if orient === 'vertical')\n    // position of the nodes.\n    while (zeroIndegrees.length) {\n        for (var idx = 0; idx < zeroIndegrees.length; idx++) {\n            var node = zeroIndegrees[idx];\n            var item = node.hostGraph.data.getRawDataItem(node.dataIndex);\n            var isItemDepth = item.depth != null && item.depth >= 0;\n            if (isItemDepth && item.depth > maxNodeDepth) {\n                maxNodeDepth = item.depth;\n            }\n            node.setLayout({depth: isItemDepth ? item.depth : x}, true);\n            orient === 'vertical'\n                ? node.setLayout({dy: nodeWidth}, true)\n                : node.setLayout({dx: nodeWidth}, true);\n\n            for (var edgeIdx = 0; edgeIdx < node.outEdges.length; edgeIdx++) {\n                var edge = node.outEdges[edgeIdx];\n                var indexEdge = edges.indexOf(edge);\n                remainEdges[indexEdge] = 0;\n                var targetNode = edge.node2;\n                var nodeIndex = nodes.indexOf(targetNode);\n                if (--indegreeArr[nodeIndex] === 0 && nextTargetNode.indexOf(targetNode) < 0) {\n                    nextTargetNode.push(targetNode);\n                }\n            }\n        }\n        ++x;\n        zeroIndegrees = nextTargetNode;\n        nextTargetNode = [];\n    }\n\n    for (i = 0; i < remainEdges.length; i++) {\n        if (remainEdges[i] === 1) {\n            throw new Error('Sankey is a DAG, the original data has cycle!');\n        }\n    }\n\n    var maxDepth = maxNodeDepth > x - 1 ? maxNodeDepth : x - 1;\n    if (nodeAlign && nodeAlign !== 'left') {\n        adjustNodeWithNodeAlign(nodes, nodeAlign, orient, maxDepth);\n    }\n    var kx = orient === 'vertical'\n                ? (height - nodeWidth) / maxDepth\n                : (width - nodeWidth) / maxDepth;\n\n    scaleNodeBreadths(nodes, kx, orient);\n}\n\nfunction isNodeDepth(node) {\n    var item = node.hostGraph.data.getRawDataItem(node.dataIndex);\n    return item.depth != null && item.depth >= 0;\n}\n\nfunction adjustNodeWithNodeAlign(nodes, nodeAlign, orient, maxDepth) {\n    if (nodeAlign === 'right') {\n        var nextSourceNode = [];\n        var remainNodes = nodes;\n        var nodeHeight = 0;\n        while (remainNodes.length) {\n            for (var i = 0; i < remainNodes.length; i++) {\n                var node = remainNodes[i];\n                node.setLayout({skNodeHeight: nodeHeight}, true);\n                for (var j = 0; j < node.inEdges.length; j++) {\n                    var edge = node.inEdges[j];\n                    if (nextSourceNode.indexOf(edge.node1) < 0) {\n                        nextSourceNode.push(edge.node1);\n                    }\n                }\n            }\n            remainNodes = nextSourceNode;\n            nextSourceNode = [];\n            ++nodeHeight;\n        }\n\n        each$1(nodes, function (node) {\n            if (!isNodeDepth(node)) {\n                node.setLayout({depth: Math.max(0, maxDepth - node.getLayout().skNodeHeight)}, true);\n            }\n        });\n    }\n    else if (nodeAlign === 'justify') {\n        moveSinksRight(nodes, maxDepth);\n    }\n}\n\n/**\n * All the node without outEgdes are assigned maximum x-position and\n *     be aligned in the last column.\n *\n * @param {module:echarts/data/Graph~Node} nodes.  node of sankey view.\n * @param {number} maxDepth.  use to assign to node without outEdges as x-position.\n */\nfunction moveSinksRight(nodes, maxDepth) {\n    each$1(nodes, function (node) {\n        if (!isNodeDepth(node) && !node.outEdges.length) {\n            node.setLayout({depth: maxDepth}, true);\n        }\n    });\n}\n\n/**\n * Scale node x-position to the width\n *\n * @param {module:echarts/data/Graph~Node} nodes  node of sankey view\n * @param {number} kx   multiple used to scale nodes\n */\nfunction scaleNodeBreadths(nodes, kx, orient) {\n    each$1(nodes, function (node) {\n        var nodeDepth = node.getLayout().depth * kx;\n        orient === 'vertical'\n            ? node.setLayout({y: nodeDepth}, true)\n            : node.setLayout({x: nodeDepth}, true);\n    });\n}\n\n/**\n * Using Gauss-Seidel iterations method to compute the node depth(y-position)\n *\n * @param {module:echarts/data/Graph~Node} nodes  node of sankey view\n * @param {module:echarts/data/Graph~Edge} edges  edge of sankey view\n * @param {number} height  the whole height of the area to draw the view\n * @param {number} nodeGap  the vertical distance between two nodes\n *     in the same column.\n * @param {number} iterations  the number of iterations for the algorithm\n */\nfunction computeNodeDepths(nodes, edges, height, width, nodeGap, iterations, orient) {\n    var nodesByBreadth = prepareNodesByBreadth(nodes, orient);\n\n    initializeNodeDepth(nodesByBreadth, edges, height, width, nodeGap, orient);\n    resolveCollisions(nodesByBreadth, nodeGap, height, width, orient);\n\n    for (var alpha = 1; iterations > 0; iterations--) {\n        // 0.99 is a experience parameter, ensure that each iterations of\n        // changes as small as possible.\n        alpha *= 0.99;\n        relaxRightToLeft(nodesByBreadth, alpha, orient);\n        resolveCollisions(nodesByBreadth, nodeGap, height, width, orient);\n        relaxLeftToRight(nodesByBreadth, alpha, orient);\n        resolveCollisions(nodesByBreadth, nodeGap, height, width, orient);\n    }\n}\n\nfunction prepareNodesByBreadth(nodes, orient) {\n    var nodesByBreadth = [];\n    var keyAttr = orient === 'vertical' ? 'y' : 'x';\n\n    var groupResult = groupData(nodes, function (node) {\n        return node.getLayout()[keyAttr];\n    });\n    groupResult.keys.sort(function (a, b) {\n        return a - b;\n    });\n    each$1(groupResult.keys, function (key) {\n        nodesByBreadth.push(groupResult.buckets.get(key));\n    });\n\n    return nodesByBreadth;\n}\n\n/**\n * Compute the original y-position for each node\n *\n * @param {module:echarts/data/Graph~Node} nodes  node of sankey view\n * @param {Array.<Array.<module:echarts/data/Graph~Node>>} nodesByBreadth\n *     group by the array of all sankey nodes based on the nodes x-position.\n * @param {module:echarts/data/Graph~Edge} edges  edge of sankey view\n * @param {number} height  the whole height of the area to draw the view\n * @param {number} nodeGap  the vertical distance between two nodes\n */\nfunction initializeNodeDepth(nodesByBreadth, edges, height, width, nodeGap, orient) {\n    var minKy = Infinity;\n    each$1(nodesByBreadth, function (nodes) {\n        var n = nodes.length;\n        var sum = 0;\n        each$1(nodes, function (node) {\n            sum += node.getLayout().value;\n        });\n        var ky = orient === 'vertical'\n                    ? (width - (n - 1) * nodeGap) / sum\n                    : (height - (n - 1) * nodeGap) / sum;\n\n        if (ky < minKy) {\n            minKy = ky;\n        }\n    });\n\n    each$1(nodesByBreadth, function (nodes) {\n        each$1(nodes, function (node, i) {\n            var nodeDy = node.getLayout().value * minKy;\n            if (orient === 'vertical') {\n                node.setLayout({x: i}, true);\n                node.setLayout({dx: nodeDy}, true);\n            }\n            else {\n                node.setLayout({y: i}, true);\n                node.setLayout({dy: nodeDy}, true);\n            }\n        });\n    });\n\n    each$1(edges, function (edge) {\n        var edgeDy = +edge.getValue() * minKy;\n        edge.setLayout({dy: edgeDy}, true);\n    });\n}\n\n/**\n * Resolve the collision of initialized depth (y-position)\n *\n * @param {Array.<Array.<module:echarts/data/Graph~Node>>} nodesByBreadth\n *     group by the array of all sankey nodes based on the nodes x-position.\n * @param {number} nodeGap  the vertical distance between two nodes\n * @param {number} height  the whole height of the area to draw the view\n */\nfunction resolveCollisions(nodesByBreadth, nodeGap, height, width, orient) {\n    var keyAttr = orient === 'vertical' ? 'x' : 'y';\n    each$1(nodesByBreadth, function (nodes) {\n        nodes.sort(function (a, b) {\n            return a.getLayout()[keyAttr] - b.getLayout()[keyAttr];\n        });\n        var nodeX;\n        var node;\n        var dy;\n        var y0 = 0;\n        var n = nodes.length;\n        var nodeDyAttr = orient === 'vertical' ? 'dx' : 'dy';\n        for (var i = 0; i < n; i++) {\n            node = nodes[i];\n            dy = y0 - node.getLayout()[keyAttr];\n            if (dy > 0) {\n                nodeX = node.getLayout()[keyAttr] + dy;\n                orient === 'vertical'\n                    ? node.setLayout({x: nodeX}, true)\n                    : node.setLayout({y: nodeX}, true);\n            }\n            y0 = node.getLayout()[keyAttr] + node.getLayout()[nodeDyAttr] + nodeGap;\n        }\n        var viewWidth = orient === 'vertical' ? width : height;\n        // If the bottommost node goes outside the bounds, push it back up\n        dy = y0 - nodeGap - viewWidth;\n        if (dy > 0) {\n            nodeX = node.getLayout()[keyAttr] - dy;\n            orient === 'vertical'\n                ? node.setLayout({x: nodeX}, true)\n                : node.setLayout({y: nodeX}, true);\n\n            y0 = nodeX;\n            for (i = n - 2; i >= 0; --i) {\n                node = nodes[i];\n                dy = node.getLayout()[keyAttr] + node.getLayout()[nodeDyAttr] + nodeGap - y0;\n                if (dy > 0) {\n                    nodeX = node.getLayout()[keyAttr] - dy;\n                    orient === 'vertical'\n                        ? node.setLayout({x: nodeX}, true)\n                        : node.setLayout({y: nodeX}, true);\n                }\n                y0 = node.getLayout()[keyAttr];\n            }\n        }\n    });\n}\n\n/**\n * Change the y-position of the nodes, except most the right side nodes\n *\n * @param {Array.<Array.<module:echarts/data/Graph~Node>>} nodesByBreadth\n *     group by the array of all sankey nodes based on the node x-position.\n * @param {number} alpha  parameter used to adjust the nodes y-position\n */\nfunction relaxRightToLeft(nodesByBreadth, alpha, orient) {\n    each$1(nodesByBreadth.slice().reverse(), function (nodes) {\n        each$1(nodes, function (node) {\n            if (node.outEdges.length) {\n                var y = sum(node.outEdges, weightedTarget, orient)\n                        / sum(node.outEdges, getEdgeValue, orient);\n                if (orient === 'vertical') {\n                    var nodeX = node.getLayout().x + (y - center$1(node, orient)) * alpha;\n                    node.setLayout({x: nodeX}, true);\n                }\n                else {\n                    var nodeY = node.getLayout().y + (y - center$1(node, orient)) * alpha;\n                    node.setLayout({y: nodeY}, true);\n                }\n            }\n        });\n    });\n}\n\nfunction weightedTarget(edge, orient) {\n    return center$1(edge.node2, orient) * edge.getValue();\n}\n\nfunction weightedSource(edge, orient) {\n    return center$1(edge.node1, orient) * edge.getValue();\n}\n\nfunction center$1(node, orient) {\n    return orient === 'vertical'\n            ? node.getLayout().x + node.getLayout().dx / 2\n            : node.getLayout().y + node.getLayout().dy / 2;\n}\n\nfunction getEdgeValue(edge) {\n    return edge.getValue();\n}\n\nfunction sum(array, f, orient) {\n    var sum = 0;\n    var len = array.length;\n    var i = -1;\n    while (++i < len) {\n        var value = +f.call(array, array[i], orient);\n        if (!isNaN(value)) {\n            sum += value;\n        }\n    }\n    return sum;\n}\n\n/**\n * Change the y-position of the nodes, except most the left side nodes\n *\n * @param {Array.<Array.<module:echarts/data/Graph~Node>>} nodesByBreadth\n *     group by the array of all sankey nodes based on the node x-position.\n * @param {number} alpha  parameter used to adjust the nodes y-position\n */\nfunction relaxLeftToRight(nodesByBreadth, alpha, orient) {\n    each$1(nodesByBreadth, function (nodes) {\n        each$1(nodes, function (node) {\n            if (node.inEdges.length) {\n                var y = sum(node.inEdges, weightedSource, orient)\n                        / sum(node.inEdges, getEdgeValue, orient);\n                if (orient === 'vertical') {\n                    var nodeX = node.getLayout().x + (y - center$1(node, orient)) * alpha;\n                    node.setLayout({x: nodeX}, true);\n                }\n                else {\n                    var nodeY = node.getLayout().y + (y - center$1(node, orient)) * alpha;\n                    node.setLayout({y: nodeY}, true);\n                }\n            }\n        });\n    });\n}\n\n/**\n * Compute the depth(y-position) of each edge\n *\n * @param {module:echarts/data/Graph~Node} nodes  node of sankey view\n */\nfunction computeEdgeDepths(nodes, orient) {\n    var keyAttr = orient === 'vertical' ? 'x' : 'y';\n    each$1(nodes, function (node) {\n        node.outEdges.sort(function (a, b) {\n            return a.node2.getLayout()[keyAttr] - b.node2.getLayout()[keyAttr];\n        });\n        node.inEdges.sort(function (a, b) {\n            return a.node1.getLayout()[keyAttr] - b.node1.getLayout()[keyAttr];\n        });\n    });\n    each$1(nodes, function (node) {\n        var sy = 0;\n        var ty = 0;\n        each$1(node.outEdges, function (edge) {\n            edge.setLayout({sy: sy}, true);\n            sy += edge.getLayout().dy;\n        });\n        each$1(node.inEdges, function (edge) {\n            edge.setLayout({ty: ty}, true);\n            ty += edge.getLayout().dy;\n        });\n    });\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar sankeyVisual = function (ecModel, payload) {\n    ecModel.eachSeriesByType('sankey', function (seriesModel) {\n        var graph = seriesModel.getGraph();\n        var nodes = graph.nodes;\n        if (nodes.length) {\n            var minValue = Infinity;\n            var maxValue = -Infinity;\n            each$1(nodes, function (node) {\n                var nodeValue = node.getLayout().value;\n                if (nodeValue < minValue) {\n                    minValue = nodeValue;\n                }\n                if (nodeValue > maxValue) {\n                    maxValue = nodeValue;\n                }\n            });\n\n            each$1(nodes, function (node) {\n                var mapping = new VisualMapping({\n                    type: 'color',\n                    mappingMethod: 'linear',\n                    dataExtent: [minValue, maxValue],\n                    visual: seriesModel.get('color')\n                });\n\n                var mapValueToColor = mapping.mapValueToVisual(node.getLayout().value);\n                var customColor = node.getModel().get('itemStyle.color');\n                customColor != null\n                    ? node.setVisual('color', customColor)\n                    : node.setVisual('color', mapValueToColor);\n            });\n        }\n    });\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nregisterLayout(sankeyLayout);\nregisterVisual(sankeyVisual);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\nvar seriesModelMixin = {\n\n    /**\n     * @private\n     * @type {string}\n     */\n    _baseAxisDim: null,\n\n    /**\n     * @override\n     */\n    getInitialData: function (option, ecModel) {\n        // When both types of xAxis and yAxis are 'value', layout is\n        // needed to be specified by user. Otherwise, layout can be\n        // judged by which axis is category.\n\n        var ordinalMeta;\n\n        var xAxisModel = ecModel.getComponent('xAxis', this.get('xAxisIndex'));\n        var yAxisModel = ecModel.getComponent('yAxis', this.get('yAxisIndex'));\n        var xAxisType = xAxisModel.get('type');\n        var yAxisType = yAxisModel.get('type');\n        var addOrdinal;\n\n        // FIXME\n        // 考虑时间轴\n\n        if (xAxisType === 'category') {\n            option.layout = 'horizontal';\n            ordinalMeta = xAxisModel.getOrdinalMeta();\n            addOrdinal = true;\n        }\n        else if (yAxisType === 'category') {\n            option.layout = 'vertical';\n            ordinalMeta = yAxisModel.getOrdinalMeta();\n            addOrdinal = true;\n        }\n        else {\n            option.layout = option.layout || 'horizontal';\n        }\n\n        var coordDims = ['x', 'y'];\n        var baseAxisDimIndex = option.layout === 'horizontal' ? 0 : 1;\n        var baseAxisDim = this._baseAxisDim = coordDims[baseAxisDimIndex];\n        var otherAxisDim = coordDims[1 - baseAxisDimIndex];\n        var axisModels = [xAxisModel, yAxisModel];\n        var baseAxisType = axisModels[baseAxisDimIndex].get('type');\n        var otherAxisType = axisModels[1 - baseAxisDimIndex].get('type');\n        var data = option.data;\n\n        // ??? FIXME make a stage to perform data transfrom.\n        // MUST create a new data, consider setOption({}) again.\n        if (data && addOrdinal) {\n            var newOptionData = [];\n            each$1(data, function (item, index) {\n                var newItem;\n                if (item.value && isArray(item.value)) {\n                    newItem = item.value.slice();\n                    item.value.unshift(index);\n                }\n                else if (isArray(item)) {\n                    newItem = item.slice();\n                    item.unshift(index);\n                }\n                else {\n                    newItem = item;\n                }\n                newOptionData.push(newItem);\n            });\n            option.data = newOptionData;\n        }\n\n        var defaultValueDimensions = this.defaultValueDimensions;\n\n        return createListSimply(\n            this,\n            {\n                coordDimensions: [{\n                    name: baseAxisDim,\n                    type: getDimensionTypeByAxis(baseAxisType),\n                    ordinalMeta: ordinalMeta,\n                    otherDims: {\n                        tooltip: false,\n                        itemName: 0\n                    },\n                    dimsDef: ['base']\n                }, {\n                    name: otherAxisDim,\n                    type: getDimensionTypeByAxis(otherAxisType),\n                    dimsDef: defaultValueDimensions.slice()\n                }],\n                dimensionsCount: defaultValueDimensions.length + 1\n            }\n        );\n    },\n\n    /**\n     * If horizontal, base axis is x, otherwise y.\n     * @override\n     */\n    getBaseAxis: function () {\n        var dim = this._baseAxisDim;\n        return this.ecModel.getComponent(dim + 'Axis', this.get(dim + 'AxisIndex')).axis;\n    }\n\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar BoxplotSeries = SeriesModel.extend({\n\n    type: 'series.boxplot',\n\n    dependencies: ['xAxis', 'yAxis', 'grid'],\n\n    // TODO\n    // box width represents group size, so dimension should have 'size'.\n\n    /**\n     * @see <https://en.wikipedia.org/wiki/Box_plot>\n     * The meanings of 'min' and 'max' depend on user,\n     * and echarts do not need to know it.\n     * @readOnly\n     */\n    defaultValueDimensions: [\n        {name: 'min', defaultTooltip: true},\n        {name: 'Q1', defaultTooltip: true},\n        {name: 'median', defaultTooltip: true},\n        {name: 'Q3', defaultTooltip: true},\n        {name: 'max', defaultTooltip: true}\n    ],\n\n    /**\n     * @type {Array.<string>}\n     * @readOnly\n     */\n    dimensions: null,\n\n    /**\n     * @override\n     */\n    defaultOption: {\n        zlevel: 0,                  // 一级层叠\n        z: 2,                       // 二级层叠\n        coordinateSystem: 'cartesian2d',\n        legendHoverLink: true,\n\n        hoverAnimation: true,\n\n        // xAxisIndex: 0,\n        // yAxisIndex: 0,\n\n        layout: null,               // 'horizontal' or 'vertical'\n        boxWidth: [7, 50],       // [min, max] can be percent of band width.\n\n        itemStyle: {\n            color: '#fff',\n            borderWidth: 1\n        },\n\n        emphasis: {\n            itemStyle: {\n                borderWidth: 2,\n                shadowBlur: 5,\n                shadowOffsetX: 2,\n                shadowOffsetY: 2,\n                shadowColor: 'rgba(0,0,0,0.4)'\n            }\n        },\n\n        animationEasing: 'elasticOut',\n        animationDuration: 800\n    }\n});\n\nmixin(BoxplotSeries, seriesModelMixin, true);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n// Update common properties\nvar NORMAL_ITEM_STYLE_PATH = ['itemStyle'];\nvar EMPHASIS_ITEM_STYLE_PATH = ['emphasis', 'itemStyle'];\n\nvar BoxplotView = Chart.extend({\n\n    type: 'boxplot',\n\n    render: function (seriesModel, ecModel, api) {\n        var data = seriesModel.getData();\n        var group = this.group;\n        var oldData = this._data;\n\n        // There is no old data only when first rendering or switching from\n        // stream mode to normal mode, where previous elements should be removed.\n        if (!this._data) {\n            group.removeAll();\n        }\n\n        var constDim = seriesModel.get('layout') === 'horizontal' ? 1 : 0;\n\n        data.diff(oldData)\n            .add(function (newIdx) {\n                if (data.hasValue(newIdx)) {\n                    var itemLayout = data.getItemLayout(newIdx);\n                    var symbolEl = createNormalBox(itemLayout, data, newIdx, constDim, true);\n                    data.setItemGraphicEl(newIdx, symbolEl);\n                    group.add(symbolEl);\n                }\n            })\n            .update(function (newIdx, oldIdx) {\n                var symbolEl = oldData.getItemGraphicEl(oldIdx);\n\n                // Empty data\n                if (!data.hasValue(newIdx)) {\n                    group.remove(symbolEl);\n                    return;\n                }\n\n                var itemLayout = data.getItemLayout(newIdx);\n                if (!symbolEl) {\n                    symbolEl = createNormalBox(itemLayout, data, newIdx, constDim);\n                }\n                else {\n                    updateNormalBoxData(itemLayout, symbolEl, data, newIdx);\n                }\n\n                group.add(symbolEl);\n\n                data.setItemGraphicEl(newIdx, symbolEl);\n            })\n            .remove(function (oldIdx) {\n                var el = oldData.getItemGraphicEl(oldIdx);\n                el && group.remove(el);\n            })\n            .execute();\n\n        this._data = data;\n    },\n\n    remove: function (ecModel) {\n        var group = this.group;\n        var data = this._data;\n        this._data = null;\n        data && data.eachItemGraphicEl(function (el) {\n            el && group.remove(el);\n        });\n    },\n\n    dispose: noop\n\n});\n\n\nvar BoxPath = Path.extend({\n\n    type: 'boxplotBoxPath',\n\n    shape: {},\n\n    buildPath: function (ctx, shape) {\n        var ends = shape.points;\n\n        var i = 0;\n        ctx.moveTo(ends[i][0], ends[i][1]);\n        i++;\n        for (; i < 4; i++) {\n            ctx.lineTo(ends[i][0], ends[i][1]);\n        }\n        ctx.closePath();\n\n        for (; i < ends.length; i++) {\n            ctx.moveTo(ends[i][0], ends[i][1]);\n            i++;\n            ctx.lineTo(ends[i][0], ends[i][1]);\n        }\n    }\n});\n\n\nfunction createNormalBox(itemLayout, data, dataIndex, constDim, isInit) {\n    var ends = itemLayout.ends;\n\n    var el = new BoxPath({\n        shape: {\n            points: isInit\n                ? transInit(ends, constDim, itemLayout)\n                : ends\n        }\n    });\n\n    updateNormalBoxData(itemLayout, el, data, dataIndex, isInit);\n\n    return el;\n}\n\nfunction updateNormalBoxData(itemLayout, el, data, dataIndex, isInit) {\n    var seriesModel = data.hostModel;\n    var updateMethod = graphic[isInit ? 'initProps' : 'updateProps'];\n\n    updateMethod(\n        el,\n        {shape: {points: itemLayout.ends}},\n        seriesModel,\n        dataIndex\n    );\n\n    var itemModel = data.getItemModel(dataIndex);\n    var normalItemStyleModel = itemModel.getModel(NORMAL_ITEM_STYLE_PATH);\n    var borderColor = data.getItemVisual(dataIndex, 'color');\n\n    // Exclude borderColor.\n    var itemStyle = normalItemStyleModel.getItemStyle(['borderColor']);\n    itemStyle.stroke = borderColor;\n    itemStyle.strokeNoScale = true;\n    el.useStyle(itemStyle);\n\n    el.z2 = 100;\n\n    var hoverStyle = itemModel.getModel(EMPHASIS_ITEM_STYLE_PATH).getItemStyle();\n    setHoverStyle(el, hoverStyle);\n}\n\nfunction transInit(points, dim, itemLayout) {\n    return map(points, function (point) {\n        point = point.slice();\n        point[dim] = itemLayout.initBaseline;\n        return point;\n    });\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\nvar borderColorQuery = ['itemStyle', 'borderColor'];\n\nvar boxplotVisual = function (ecModel, api) {\n\n    var globalColors = ecModel.get('color');\n\n    ecModel.eachRawSeriesByType('boxplot', function (seriesModel) {\n\n        var defaulColor = globalColors[seriesModel.seriesIndex % globalColors.length];\n        var data = seriesModel.getData();\n\n        data.setVisual({\n            legendSymbol: 'roundRect',\n            // Use name 'color' but not 'borderColor' for legend usage and\n            // visual coding from other component like dataRange.\n            color: seriesModel.get(borderColorQuery) || defaulColor\n        });\n\n        // Only visible series has each data be visual encoded\n        if (!ecModel.isSeriesFiltered(seriesModel)) {\n            data.each(function (idx) {\n                var itemModel = data.getItemModel(idx);\n                data.setItemVisual(\n                    idx,\n                    {color: itemModel.get(borderColorQuery, true)}\n                );\n            });\n        }\n    });\n\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar each$13 = each$1;\n\nvar boxplotLayout = function (ecModel) {\n\n    var groupResult = groupSeriesByAxis(ecModel);\n\n    each$13(groupResult, function (groupItem) {\n        var seriesModels = groupItem.seriesModels;\n\n        if (!seriesModels.length) {\n            return;\n        }\n\n        calculateBase(groupItem);\n\n        each$13(seriesModels, function (seriesModel, idx) {\n            layoutSingleSeries(\n                seriesModel,\n                groupItem.boxOffsetList[idx],\n                groupItem.boxWidthList[idx]\n            );\n        });\n    });\n};\n\n/**\n * Group series by axis.\n */\nfunction groupSeriesByAxis(ecModel) {\n    var result = [];\n    var axisList = [];\n\n    ecModel.eachSeriesByType('boxplot', function (seriesModel) {\n        var baseAxis = seriesModel.getBaseAxis();\n        var idx = indexOf(axisList, baseAxis);\n\n        if (idx < 0) {\n            idx = axisList.length;\n            axisList[idx] = baseAxis;\n            result[idx] = {axis: baseAxis, seriesModels: []};\n        }\n\n        result[idx].seriesModels.push(seriesModel);\n    });\n\n    return result;\n}\n\n/**\n * Calculate offset and box width for each series.\n */\nfunction calculateBase(groupItem) {\n    var extent;\n    var baseAxis = groupItem.axis;\n    var seriesModels = groupItem.seriesModels;\n    var seriesCount = seriesModels.length;\n\n    var boxWidthList = groupItem.boxWidthList = [];\n    var boxOffsetList = groupItem.boxOffsetList = [];\n    var boundList = [];\n\n    var bandWidth;\n    if (baseAxis.type === 'category') {\n        bandWidth = baseAxis.getBandWidth();\n    }\n    else {\n        var maxDataCount = 0;\n        each$13(seriesModels, function (seriesModel) {\n            maxDataCount = Math.max(maxDataCount, seriesModel.getData().count());\n        });\n        extent = baseAxis.getExtent(),\n        Math.abs(extent[1] - extent[0]) / maxDataCount;\n    }\n\n    each$13(seriesModels, function (seriesModel) {\n        var boxWidthBound = seriesModel.get('boxWidth');\n        if (!isArray(boxWidthBound)) {\n            boxWidthBound = [boxWidthBound, boxWidthBound];\n        }\n        boundList.push([\n            parsePercent$1(boxWidthBound[0], bandWidth) || 0,\n            parsePercent$1(boxWidthBound[1], bandWidth) || 0\n        ]);\n    });\n\n    var availableWidth = bandWidth * 0.8 - 2;\n    var boxGap = availableWidth / seriesCount * 0.3;\n    var boxWidth = (availableWidth - boxGap * (seriesCount - 1)) / seriesCount;\n    var base = boxWidth / 2 - availableWidth / 2;\n\n    each$13(seriesModels, function (seriesModel, idx) {\n        boxOffsetList.push(base);\n        base += boxGap + boxWidth;\n\n        boxWidthList.push(\n            Math.min(Math.max(boxWidth, boundList[idx][0]), boundList[idx][1])\n        );\n    });\n}\n\n/**\n * Calculate points location for each series.\n */\nfunction layoutSingleSeries(seriesModel, offset, boxWidth) {\n    var coordSys = seriesModel.coordinateSystem;\n    var data = seriesModel.getData();\n    var halfWidth = boxWidth / 2;\n    var cDimIdx = seriesModel.get('layout') === 'horizontal' ? 0 : 1;\n    var vDimIdx = 1 - cDimIdx;\n    var coordDims = ['x', 'y'];\n    var cDim = data.mapDimension(coordDims[cDimIdx]);\n    var vDims = data.mapDimension(coordDims[vDimIdx], true);\n\n    if (cDim == null || vDims.length < 5) {\n        return;\n    }\n\n    for (var dataIndex = 0; dataIndex < data.count(); dataIndex++) {\n        var axisDimVal = data.get(cDim, dataIndex);\n\n        var median = getPoint(axisDimVal, vDims[2], dataIndex);\n        var end1 = getPoint(axisDimVal, vDims[0], dataIndex);\n        var end2 = getPoint(axisDimVal, vDims[1], dataIndex);\n        var end4 = getPoint(axisDimVal, vDims[3], dataIndex);\n        var end5 = getPoint(axisDimVal, vDims[4], dataIndex);\n\n        var ends = [];\n        addBodyEnd(ends, end2, 0);\n        addBodyEnd(ends, end4, 1);\n\n        ends.push(end1, end2, end5, end4);\n        layEndLine(ends, end1);\n        layEndLine(ends, end5);\n        layEndLine(ends, median);\n\n        data.setItemLayout(dataIndex, {\n            initBaseline: median[vDimIdx],\n            ends: ends\n        });\n    }\n\n    function getPoint(axisDimVal, dimIdx, dataIndex) {\n        var val = data.get(dimIdx, dataIndex);\n        var p = [];\n        p[cDimIdx] = axisDimVal;\n        p[vDimIdx] = val;\n        var point;\n        if (isNaN(axisDimVal) || isNaN(val)) {\n            point = [NaN, NaN];\n        }\n        else {\n            point = coordSys.dataToPoint(p);\n            point[cDimIdx] += offset;\n        }\n        return point;\n    }\n\n    function addBodyEnd(ends, point, start) {\n        var point1 = point.slice();\n        var point2 = point.slice();\n        point1[cDimIdx] += halfWidth;\n        point2[cDimIdx] -= halfWidth;\n        start\n            ? ends.push(point1, point2)\n            : ends.push(point2, point1);\n    }\n\n    function layEndLine(ends, endCenter) {\n        var from = endCenter.slice();\n        var to = endCenter.slice();\n        from[cDimIdx] -= halfWidth;\n        to[cDimIdx] += halfWidth;\n        ends.push(from, to);\n    }\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nregisterVisual(boxplotVisual);\nregisterLayout(boxplotLayout);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar CandlestickSeries = SeriesModel.extend({\n\n    type: 'series.candlestick',\n\n    dependencies: ['xAxis', 'yAxis', 'grid'],\n\n    /**\n     * @readOnly\n     */\n    defaultValueDimensions: [\n        {name: 'open', defaultTooltip: true},\n        {name: 'close', defaultTooltip: true},\n        {name: 'lowest', defaultTooltip: true},\n        {name: 'highest', defaultTooltip: true}\n    ],\n\n    /**\n     * @type {Array.<string>}\n     * @readOnly\n     */\n    dimensions: null,\n\n    /**\n     * @override\n     */\n    defaultOption: {\n        zlevel: 0,\n        z: 2,\n        coordinateSystem: 'cartesian2d',\n        legendHoverLink: true,\n\n        hoverAnimation: true,\n\n        // xAxisIndex: 0,\n        // yAxisIndex: 0,\n\n        layout: null, // 'horizontal' or 'vertical'\n\n        itemStyle: {\n            color: '#c23531', // 阳线 positive\n            color0: '#314656', // 阴线 negative     '#c23531', '#314656'\n            borderWidth: 1,\n            // FIXME\n            // ec2中使用的是lineStyle.color 和 lineStyle.color0\n            borderColor: '#c23531',\n            borderColor0: '#314656'\n        },\n\n        emphasis: {\n            itemStyle: {\n                borderWidth: 2\n            }\n        },\n\n        barMaxWidth: null,\n        barMinWidth: null,\n        barWidth: null,\n\n        large: true,\n        largeThreshold: 600,\n\n        progressive: 3e3,\n        progressiveThreshold: 1e4,\n        progressiveChunkMode: 'mod',\n\n        animationUpdate: false,\n        animationEasing: 'linear',\n        animationDuration: 300\n    },\n\n    /**\n     * Get dimension for shadow in dataZoom\n     * @return {string} dimension name\n     */\n    getShadowDim: function () {\n        return 'open';\n    },\n\n    brushSelector: function (dataIndex, data, selectors) {\n        var itemLayout = data.getItemLayout(dataIndex);\n        return itemLayout && selectors.rect(itemLayout.brushRect);\n    }\n\n});\n\nmixin(CandlestickSeries, seriesModelMixin, true);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar NORMAL_ITEM_STYLE_PATH$1 = ['itemStyle'];\nvar EMPHASIS_ITEM_STYLE_PATH$1 = ['emphasis', 'itemStyle'];\nvar SKIP_PROPS = ['color', 'color0', 'borderColor', 'borderColor0'];\n\n\nvar CandlestickView = Chart.extend({\n\n    type: 'candlestick',\n\n    render: function (seriesModel, ecModel, api) {\n        this._updateDrawMode(seriesModel);\n\n        this._isLargeDraw\n            ? this._renderLarge(seriesModel)\n            : this._renderNormal(seriesModel);\n    },\n\n    incrementalPrepareRender: function (seriesModel, ecModel, api) {\n        this._clear();\n        this._updateDrawMode(seriesModel);\n    },\n\n    incrementalRender: function (params, seriesModel, ecModel, api) {\n        this._isLargeDraw\n             ? this._incrementalRenderLarge(params, seriesModel)\n             : this._incrementalRenderNormal(params, seriesModel);\n    },\n\n    _updateDrawMode: function (seriesModel) {\n        var isLargeDraw = seriesModel.pipelineContext.large;\n        if (this._isLargeDraw == null || isLargeDraw ^ this._isLargeDraw) {\n            this._isLargeDraw = isLargeDraw;\n            this._clear();\n        }\n    },\n\n    _renderNormal: function (seriesModel) {\n        var data = seriesModel.getData();\n        var oldData = this._data;\n        var group = this.group;\n        var isSimpleBox = data.getLayout('isSimpleBox');\n\n        // There is no old data only when first rendering or switching from\n        // stream mode to normal mode, where previous elements should be removed.\n        if (!this._data) {\n            group.removeAll();\n        }\n\n        data.diff(oldData)\n            .add(function (newIdx) {\n                if (data.hasValue(newIdx)) {\n                    var el;\n\n                    var itemLayout = data.getItemLayout(newIdx);\n                    el = createNormalBox$1(itemLayout, newIdx, true);\n                    initProps(el, {shape: {points: itemLayout.ends}}, seriesModel, newIdx);\n\n                    setBoxCommon(el, data, newIdx, isSimpleBox);\n\n                    group.add(el);\n                    data.setItemGraphicEl(newIdx, el);\n                }\n            })\n            .update(function (newIdx, oldIdx) {\n                var el = oldData.getItemGraphicEl(oldIdx);\n\n                // Empty data\n                if (!data.hasValue(newIdx)) {\n                    group.remove(el);\n                    return;\n                }\n\n                var itemLayout = data.getItemLayout(newIdx);\n                if (!el) {\n                    el = createNormalBox$1(itemLayout, newIdx);\n                }\n                else {\n                    updateProps(el, {shape: {points: itemLayout.ends}}, seriesModel, newIdx);\n                }\n\n                setBoxCommon(el, data, newIdx, isSimpleBox);\n\n                group.add(el);\n                data.setItemGraphicEl(newIdx, el);\n            })\n            .remove(function (oldIdx) {\n                var el = oldData.getItemGraphicEl(oldIdx);\n                el && group.remove(el);\n            })\n            .execute();\n\n        this._data = data;\n    },\n\n    _renderLarge: function (seriesModel) {\n        this._clear();\n        createLarge$1(seriesModel, this.group);\n    },\n\n    _incrementalRenderNormal: function (params, seriesModel) {\n        var data = seriesModel.getData();\n        var isSimpleBox = data.getLayout('isSimpleBox');\n\n        var dataIndex;\n        while ((dataIndex = params.next()) != null) {\n            var el;\n\n            var itemLayout = data.getItemLayout(dataIndex);\n            el = createNormalBox$1(itemLayout, dataIndex);\n            setBoxCommon(el, data, dataIndex, isSimpleBox);\n\n            el.incremental = true;\n            this.group.add(el);\n        }\n    },\n\n    _incrementalRenderLarge: function (params, seriesModel) {\n        createLarge$1(seriesModel, this.group, true);\n    },\n\n    remove: function (ecModel) {\n        this._clear();\n    },\n\n    _clear: function () {\n        this.group.removeAll();\n        this._data = null;\n    },\n\n    dispose: noop\n\n});\n\n\nvar NormalBoxPath = Path.extend({\n\n    type: 'normalCandlestickBox',\n\n    shape: {},\n\n    buildPath: function (ctx, shape) {\n        var ends = shape.points;\n\n        if (this.__simpleBox) {\n            ctx.moveTo(ends[4][0], ends[4][1]);\n            ctx.lineTo(ends[6][0], ends[6][1]);\n        }\n        else {\n            ctx.moveTo(ends[0][0], ends[0][1]);\n            ctx.lineTo(ends[1][0], ends[1][1]);\n            ctx.lineTo(ends[2][0], ends[2][1]);\n            ctx.lineTo(ends[3][0], ends[3][1]);\n            ctx.closePath();\n\n            ctx.moveTo(ends[4][0], ends[4][1]);\n            ctx.lineTo(ends[5][0], ends[5][1]);\n            ctx.moveTo(ends[6][0], ends[6][1]);\n            ctx.lineTo(ends[7][0], ends[7][1]);\n        }\n    }\n});\n\nfunction createNormalBox$1(itemLayout, dataIndex, isInit) {\n    var ends = itemLayout.ends;\n    return new NormalBoxPath({\n        shape: {\n            points: isInit\n                ? transInit$1(ends, itemLayout)\n                : ends\n        },\n        z2: 100\n    });\n}\n\nfunction setBoxCommon(el, data, dataIndex, isSimpleBox) {\n    var itemModel = data.getItemModel(dataIndex);\n    var normalItemStyleModel = itemModel.getModel(NORMAL_ITEM_STYLE_PATH$1);\n    var color = data.getItemVisual(dataIndex, 'color');\n    var borderColor = data.getItemVisual(dataIndex, 'borderColor') || color;\n\n    // Color must be excluded.\n    // Because symbol provide setColor individually to set fill and stroke\n    var itemStyle = normalItemStyleModel.getItemStyle(SKIP_PROPS);\n\n    el.useStyle(itemStyle);\n    el.style.strokeNoScale = true;\n    el.style.fill = color;\n    el.style.stroke = borderColor;\n\n    el.__simpleBox = isSimpleBox;\n\n    var hoverStyle = itemModel.getModel(EMPHASIS_ITEM_STYLE_PATH$1).getItemStyle();\n    setHoverStyle(el, hoverStyle);\n}\n\nfunction transInit$1(points, itemLayout) {\n    return map(points, function (point) {\n        point = point.slice();\n        point[1] = itemLayout.initBaseline;\n        return point;\n    });\n}\n\n\n\nvar LargeBoxPath = Path.extend({\n\n    type: 'largeCandlestickBox',\n\n    shape: {},\n\n    buildPath: function (ctx, shape) {\n        // Drawing lines is more efficient than drawing\n        // a whole line or drawing rects.\n        var points = shape.points;\n        for (var i = 0; i < points.length;) {\n            if (this.__sign === points[i++]) {\n                var x = points[i++];\n                ctx.moveTo(x, points[i++]);\n                ctx.lineTo(x, points[i++]);\n            }\n            else {\n                i += 3;\n            }\n        }\n    }\n});\n\nfunction createLarge$1(seriesModel, group, incremental) {\n    var data = seriesModel.getData();\n    var largePoints = data.getLayout('largePoints');\n\n    var elP = new LargeBoxPath({\n        shape: {points: largePoints},\n        __sign: 1\n    });\n    group.add(elP);\n    var elN = new LargeBoxPath({\n        shape: {points: largePoints},\n        __sign: -1\n    });\n    group.add(elN);\n\n    setLargeStyle$1(1, elP, seriesModel, data);\n    setLargeStyle$1(-1, elN, seriesModel, data);\n\n    if (incremental) {\n        elP.incremental = true;\n        elN.incremental = true;\n    }\n}\n\nfunction setLargeStyle$1(sign, el, seriesModel, data) {\n    var suffix = sign > 0 ? 'P' : 'N';\n    var borderColor = data.getVisual('borderColor' + suffix)\n        || data.getVisual('color' + suffix);\n\n    // Color must be excluded.\n    // Because symbol provide setColor individually to set fill and stroke\n    var itemStyle = seriesModel.getModel(NORMAL_ITEM_STYLE_PATH$1).getItemStyle(SKIP_PROPS);\n\n    el.useStyle(itemStyle);\n    el.style.fill = null;\n    el.style.stroke = borderColor;\n    // No different\n    // el.style.lineWidth = .5;\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar preprocessor = function (option) {\n    if (!option || !isArray(option.series)) {\n        return;\n    }\n\n    // Translate 'k' to 'candlestick'.\n    each$1(option.series, function (seriesItem) {\n        if (isObject$1(seriesItem) && seriesItem.type === 'k') {\n            seriesItem.type = 'candlestick';\n        }\n    });\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar positiveBorderColorQuery = ['itemStyle', 'borderColor'];\nvar negativeBorderColorQuery = ['itemStyle', 'borderColor0'];\nvar positiveColorQuery = ['itemStyle', 'color'];\nvar negativeColorQuery = ['itemStyle', 'color0'];\n\nvar candlestickVisual = {\n\n    seriesType: 'candlestick',\n\n    plan: createRenderPlanner(),\n\n    // For legend.\n    performRawSeries: true,\n\n    reset: function (seriesModel, ecModel) {\n\n        var data = seriesModel.getData();\n        var isLargeRender = seriesModel.pipelineContext.large;\n\n        data.setVisual({\n            legendSymbol: 'roundRect',\n            colorP: getColor(1, seriesModel),\n            colorN: getColor(-1, seriesModel),\n            borderColorP: getBorderColor(1, seriesModel),\n            borderColorN: getBorderColor(-1, seriesModel)\n        });\n\n        // Only visible series has each data be visual encoded\n        if (ecModel.isSeriesFiltered(seriesModel)) {\n            return;\n        }\n\n        return !isLargeRender && {progress: progress};\n\n\n        function progress(params, data) {\n            var dataIndex;\n            while ((dataIndex = params.next()) != null) {\n                var itemModel = data.getItemModel(dataIndex);\n                var sign = data.getItemLayout(dataIndex).sign;\n\n                data.setItemVisual(\n                    dataIndex,\n                    {\n                        color: getColor(sign, itemModel),\n                        borderColor: getBorderColor(sign, itemModel)\n                    }\n                );\n            }\n        }\n\n        function getColor(sign, model) {\n            return model.get(\n                sign > 0 ? positiveColorQuery : negativeColorQuery\n            );\n        }\n\n        function getBorderColor(sign, model) {\n            return model.get(\n                sign > 0 ? positiveBorderColorQuery : negativeBorderColorQuery\n            );\n        }\n\n    }\n\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/* global Float32Array */\n\nvar LargeArr$1 = typeof Float32Array !== 'undefined' ? Float32Array : Array;\n\nvar candlestickLayout = {\n\n    seriesType: 'candlestick',\n\n    plan: createRenderPlanner(),\n\n    reset: function (seriesModel) {\n\n        var coordSys = seriesModel.coordinateSystem;\n        var data = seriesModel.getData();\n        var candleWidth = calculateCandleWidth(seriesModel, data);\n        var cDimIdx = 0;\n        var vDimIdx = 1;\n        var coordDims = ['x', 'y'];\n        var cDim = data.mapDimension(coordDims[cDimIdx]);\n        var vDims = data.mapDimension(coordDims[vDimIdx], true);\n        var openDim = vDims[0];\n        var closeDim = vDims[1];\n        var lowestDim = vDims[2];\n        var highestDim = vDims[3];\n\n        data.setLayout({\n            candleWidth: candleWidth,\n            // The value is experimented visually.\n            isSimpleBox: candleWidth <= 1.3\n        });\n\n        if (cDim == null || vDims.length < 4) {\n            return;\n        }\n\n        return {\n            progress: seriesModel.pipelineContext.large\n                ? largeProgress : normalProgress\n        };\n\n        function normalProgress(params, data) {\n            var dataIndex;\n            while ((dataIndex = params.next()) != null) {\n\n                var axisDimVal = data.get(cDim, dataIndex);\n                var openVal = data.get(openDim, dataIndex);\n                var closeVal = data.get(closeDim, dataIndex);\n                var lowestVal = data.get(lowestDim, dataIndex);\n                var highestVal = data.get(highestDim, dataIndex);\n\n                var ocLow = Math.min(openVal, closeVal);\n                var ocHigh = Math.max(openVal, closeVal);\n\n                var ocLowPoint = getPoint(ocLow, axisDimVal);\n                var ocHighPoint = getPoint(ocHigh, axisDimVal);\n                var lowestPoint = getPoint(lowestVal, axisDimVal);\n                var highestPoint = getPoint(highestVal, axisDimVal);\n\n                var ends = [];\n                addBodyEnd(ends, ocHighPoint, 0);\n                addBodyEnd(ends, ocLowPoint, 1);\n\n                ends.push(\n                    subPixelOptimizePoint(highestPoint),\n                    subPixelOptimizePoint(ocHighPoint),\n                    subPixelOptimizePoint(lowestPoint),\n                    subPixelOptimizePoint(ocLowPoint)\n                );\n\n                data.setItemLayout(dataIndex, {\n                    sign: getSign(data, dataIndex, openVal, closeVal, closeDim),\n                    initBaseline: openVal > closeVal\n                        ? ocHighPoint[vDimIdx] : ocLowPoint[vDimIdx], // open point.\n                    ends: ends,\n                    brushRect: makeBrushRect(lowestVal, highestVal, axisDimVal)\n                });\n            }\n\n            function getPoint(val, axisDimVal) {\n                var p = [];\n                p[cDimIdx] = axisDimVal;\n                p[vDimIdx] = val;\n                return (isNaN(axisDimVal) || isNaN(val))\n                    ? [NaN, NaN]\n                    : coordSys.dataToPoint(p);\n            }\n\n            function addBodyEnd(ends, point, start) {\n                var point1 = point.slice();\n                var point2 = point.slice();\n\n                point1[cDimIdx] = subPixelOptimize(\n                    point1[cDimIdx] + candleWidth / 2, 1, false\n                );\n                point2[cDimIdx] = subPixelOptimize(\n                    point2[cDimIdx] - candleWidth / 2, 1, true\n                );\n\n                start\n                    ? ends.push(point1, point2)\n                    : ends.push(point2, point1);\n            }\n\n            function makeBrushRect(lowestVal, highestVal, axisDimVal) {\n                var pmin = getPoint(lowestVal, axisDimVal);\n                var pmax = getPoint(highestVal, axisDimVal);\n\n                pmin[cDimIdx] -= candleWidth / 2;\n                pmax[cDimIdx] -= candleWidth / 2;\n\n                return {\n                    x: pmin[0],\n                    y: pmin[1],\n                    width: vDimIdx ? candleWidth : pmax[0] - pmin[0],\n                    height: vDimIdx ? pmax[1] - pmin[1] : candleWidth\n                };\n            }\n\n            function subPixelOptimizePoint(point) {\n                point[cDimIdx] = subPixelOptimize(point[cDimIdx], 1);\n                return point;\n            }\n        }\n\n        function largeProgress(params, data) {\n            // Structure: [sign, x, yhigh, ylow, sign, x, yhigh, ylow, ...]\n            var points = new LargeArr$1(params.count * 5);\n            var offset = 0;\n            var point;\n            var tmpIn = [];\n            var tmpOut = [];\n            var dataIndex;\n\n            while ((dataIndex = params.next()) != null) {\n                var axisDimVal = data.get(cDim, dataIndex);\n                var openVal = data.get(openDim, dataIndex);\n                var closeVal = data.get(closeDim, dataIndex);\n                var lowestVal = data.get(lowestDim, dataIndex);\n                var highestVal = data.get(highestDim, dataIndex);\n\n                if (isNaN(axisDimVal) || isNaN(lowestVal) || isNaN(highestVal)) {\n                    points[offset++] = NaN;\n                    offset += 4;\n                    continue;\n                }\n\n                points[offset++] = getSign(data, dataIndex, openVal, closeVal, closeDim);\n\n                tmpIn[cDimIdx] = axisDimVal;\n\n                tmpIn[vDimIdx] = lowestVal;\n                point = coordSys.dataToPoint(tmpIn, null, tmpOut);\n                points[offset++] = point ? point[0] : NaN;\n                points[offset++] = point ? point[1] : NaN;\n                tmpIn[vDimIdx] = highestVal;\n                point = coordSys.dataToPoint(tmpIn, null, tmpOut);\n                points[offset++] = point ? point[1] : NaN;\n            }\n\n            data.setLayout('largePoints', points);\n        }\n    }\n};\n\nfunction getSign(data, dataIndex, openVal, closeVal, closeDim) {\n    var sign;\n    if (openVal > closeVal) {\n        sign = -1;\n    }\n    else if (openVal < closeVal) {\n        sign = 1;\n    }\n    else {\n        sign = dataIndex > 0\n            // If close === open, compare with close of last record\n            ? (data.get(closeDim, dataIndex - 1) <= closeVal ? 1 : -1)\n            // No record of previous, set to be positive\n            : 1;\n    }\n\n    return sign;\n}\n\nfunction calculateCandleWidth(seriesModel, data) {\n    var baseAxis = seriesModel.getBaseAxis();\n    var extent;\n\n    var bandWidth = baseAxis.type === 'category'\n        ? baseAxis.getBandWidth()\n        : (\n            extent = baseAxis.getExtent(),\n            Math.abs(extent[1] - extent[0]) / data.count()\n        );\n\n    var barMaxWidth = parsePercent$1(\n        retrieve2(seriesModel.get('barMaxWidth'), bandWidth),\n        bandWidth\n    );\n    var barMinWidth = parsePercent$1(\n        retrieve2(seriesModel.get('barMinWidth'), 1),\n        bandWidth\n    );\n    var barWidth = seriesModel.get('barWidth');\n\n    return barWidth != null\n        ? parsePercent$1(barWidth, bandWidth)\n        // Put max outer to ensure bar visible in spite of overlap.\n        : Math.max(Math.min(bandWidth / 2, barMaxWidth), barMinWidth);\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nregisterPreprocessor(preprocessor);\nregisterVisual(candlestickVisual);\nregisterLayout(candlestickLayout);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nSeriesModel.extend({\n\n    type: 'series.effectScatter',\n\n    dependencies: ['grid', 'polar'],\n\n    getInitialData: function (option, ecModel) {\n        return createListFromArray(this.getSource(), this);\n    },\n\n    brushSelector: 'point',\n\n    defaultOption: {\n        coordinateSystem: 'cartesian2d',\n        zlevel: 0,\n        z: 2,\n        legendHoverLink: true,\n\n        effectType: 'ripple',\n\n        progressive: 0,\n\n        // When to show the effect, option: 'render'|'emphasis'\n        showEffectOn: 'render',\n\n        // Ripple effect config\n        rippleEffect: {\n            period: 4,\n            // Scale of ripple\n            scale: 2.5,\n            // Brush type can be fill or stroke\n            brushType: 'fill'\n        },\n\n        // Cartesian coordinate system\n        // xAxisIndex: 0,\n        // yAxisIndex: 0,\n\n        // Polar coordinate system\n        // polarIndex: 0,\n\n        // Geo coordinate system\n        // geoIndex: 0,\n\n        // symbol: null,        // 图形类型\n        symbolSize: 10          // 图形大小，半宽（半径）参数，当图形为方向或菱形则总宽度为symbolSize * 2\n        // symbolRotate: null,  // 图形旋转控制\n\n        // large: false,\n        // Available when large is true\n        // largeThreshold: 2000,\n\n        // itemStyle: {\n        //     opacity: 1\n        // }\n    }\n\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Symbol with ripple effect\n * @module echarts/chart/helper/EffectSymbol\n */\n\nvar EFFECT_RIPPLE_NUMBER = 3;\n\nfunction normalizeSymbolSize$1(symbolSize) {\n    if (!isArray(symbolSize)) {\n        symbolSize = [+symbolSize, +symbolSize];\n    }\n    return symbolSize;\n}\n\nfunction updateRipplePath(rippleGroup, effectCfg) {\n    rippleGroup.eachChild(function (ripplePath) {\n        ripplePath.attr({\n            z: effectCfg.z,\n            zlevel: effectCfg.zlevel,\n            style: {\n                stroke: effectCfg.brushType === 'stroke' ? effectCfg.color : null,\n                fill: effectCfg.brushType === 'fill' ? effectCfg.color : null\n            }\n        });\n    });\n}\n/**\n * @constructor\n * @param {module:echarts/data/List} data\n * @param {number} idx\n * @extends {module:zrender/graphic/Group}\n */\nfunction EffectSymbol(data, idx) {\n    Group.call(this);\n\n    var symbol = new SymbolClz$1(data, idx);\n    var rippleGroup = new Group();\n    this.add(symbol);\n    this.add(rippleGroup);\n\n    rippleGroup.beforeUpdate = function () {\n        this.attr(symbol.getScale());\n    };\n    this.updateData(data, idx);\n}\n\nvar effectSymbolProto = EffectSymbol.prototype;\n\neffectSymbolProto.stopEffectAnimation = function () {\n    this.childAt(1).removeAll();\n};\n\neffectSymbolProto.startEffectAnimation = function (effectCfg) {\n    var symbolType = effectCfg.symbolType;\n    var color = effectCfg.color;\n    var rippleGroup = this.childAt(1);\n\n    for (var i = 0; i < EFFECT_RIPPLE_NUMBER; i++) {\n        // var ripplePath = createSymbol(\n        //     symbolType, -0.5, -0.5, 1, 1, color\n        // );\n        // If width/height are set too small (e.g., set to 1) on ios10\n        // and macOS Sierra, a circle stroke become a rect, no matter what\n        // the scale is set. So we set width/height as 2. See #4136.\n        var ripplePath = createSymbol(\n            symbolType, -1, -1, 2, 2, color\n        );\n        ripplePath.attr({\n            style: {\n                strokeNoScale: true\n            },\n            z2: 99,\n            silent: true,\n            scale: [0.5, 0.5]\n        });\n\n        var delay = -i / EFFECT_RIPPLE_NUMBER * effectCfg.period + effectCfg.effectOffset;\n        // TODO Configurable effectCfg.period\n        ripplePath.animate('', true)\n            .when(effectCfg.period, {\n                scale: [effectCfg.rippleScale / 2, effectCfg.rippleScale / 2]\n            })\n            .delay(delay)\n            .start();\n        ripplePath.animateStyle(true)\n            .when(effectCfg.period, {\n                opacity: 0\n            })\n            .delay(delay)\n            .start();\n\n        rippleGroup.add(ripplePath);\n    }\n\n    updateRipplePath(rippleGroup, effectCfg);\n};\n\n/**\n * Update effect symbol\n */\neffectSymbolProto.updateEffectAnimation = function (effectCfg) {\n    var oldEffectCfg = this._effectCfg;\n    var rippleGroup = this.childAt(1);\n\n    // Must reinitialize effect if following configuration changed\n    var DIFFICULT_PROPS = ['symbolType', 'period', 'rippleScale'];\n    for (var i = 0; i < DIFFICULT_PROPS.length; i++) {\n        var propName = DIFFICULT_PROPS[i];\n        if (oldEffectCfg[propName] !== effectCfg[propName]) {\n            this.stopEffectAnimation();\n            this.startEffectAnimation(effectCfg);\n            return;\n        }\n    }\n\n    updateRipplePath(rippleGroup, effectCfg);\n};\n\n/**\n * Highlight symbol\n */\neffectSymbolProto.highlight = function () {\n    this.trigger('emphasis');\n};\n\n/**\n * Downplay symbol\n */\neffectSymbolProto.downplay = function () {\n    this.trigger('normal');\n};\n\n/**\n * Update symbol properties\n * @param  {module:echarts/data/List} data\n * @param  {number} idx\n */\neffectSymbolProto.updateData = function (data, idx) {\n    var seriesModel = data.hostModel;\n\n    this.childAt(0).updateData(data, idx);\n\n    var rippleGroup = this.childAt(1);\n    var itemModel = data.getItemModel(idx);\n    var symbolType = data.getItemVisual(idx, 'symbol');\n    var symbolSize = normalizeSymbolSize$1(data.getItemVisual(idx, 'symbolSize'));\n    var color = data.getItemVisual(idx, 'color');\n\n    rippleGroup.attr('scale', symbolSize);\n\n    rippleGroup.traverse(function (ripplePath) {\n        ripplePath.attr({\n            fill: color\n        });\n    });\n\n    var symbolOffset = itemModel.getShallow('symbolOffset');\n    if (symbolOffset) {\n        var pos = rippleGroup.position;\n        pos[0] = parsePercent$1(symbolOffset[0], symbolSize[0]);\n        pos[1] = parsePercent$1(symbolOffset[1], symbolSize[1]);\n    }\n    rippleGroup.rotation = (itemModel.getShallow('symbolRotate') || 0) * Math.PI / 180 || 0;\n\n    var effectCfg = {};\n\n    effectCfg.showEffectOn = seriesModel.get('showEffectOn');\n    effectCfg.rippleScale = itemModel.get('rippleEffect.scale');\n    effectCfg.brushType = itemModel.get('rippleEffect.brushType');\n    effectCfg.period = itemModel.get('rippleEffect.period') * 1000;\n    effectCfg.effectOffset = idx / data.count();\n    effectCfg.z = itemModel.getShallow('z') || 0;\n    effectCfg.zlevel = itemModel.getShallow('zlevel') || 0;\n    effectCfg.symbolType = symbolType;\n    effectCfg.color = color;\n\n    this.off('mouseover').off('mouseout').off('emphasis').off('normal');\n\n    if (effectCfg.showEffectOn === 'render') {\n        this._effectCfg\n            ? this.updateEffectAnimation(effectCfg)\n            : this.startEffectAnimation(effectCfg);\n\n        this._effectCfg = effectCfg;\n    }\n    else {\n        // Not keep old effect config\n        this._effectCfg = null;\n\n        this.stopEffectAnimation();\n        var symbol = this.childAt(0);\n        var onEmphasis = function () {\n            symbol.highlight();\n            if (effectCfg.showEffectOn !== 'render') {\n                this.startEffectAnimation(effectCfg);\n            }\n        };\n        var onNormal = function () {\n            symbol.downplay();\n            if (effectCfg.showEffectOn !== 'render') {\n                this.stopEffectAnimation();\n            }\n        };\n        this.on('mouseover', onEmphasis, this)\n            .on('mouseout', onNormal, this)\n            .on('emphasis', onEmphasis, this)\n            .on('normal', onNormal, this);\n    }\n\n    this._effectCfg = effectCfg;\n};\n\neffectSymbolProto.fadeOut = function (cb) {\n    this.off('mouseover').off('mouseout').off('emphasis').off('normal');\n    cb && cb();\n};\n\ninherits(EffectSymbol, Group);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nextendChartView({\n\n    type: 'effectScatter',\n\n    init: function () {\n        this._symbolDraw = new SymbolDraw(EffectSymbol);\n    },\n\n    render: function (seriesModel, ecModel, api) {\n        var data = seriesModel.getData();\n        var effectSymbolDraw = this._symbolDraw;\n        effectSymbolDraw.updateData(data);\n        this.group.add(effectSymbolDraw.group);\n    },\n\n    updateTransform: function (seriesModel, ecModel, api) {\n        var data = seriesModel.getData();\n\n        this.group.dirty();\n\n        var res = pointsLayout().reset(seriesModel);\n        if (res.progress) {\n            res.progress({ start: 0, end: data.count() }, data);\n        }\n\n        this._symbolDraw.updateLayout(data);\n    },\n\n    _updateGroupTransform: function (seriesModel) {\n        var coordSys = seriesModel.coordinateSystem;\n        if (coordSys && coordSys.getRoamTransform) {\n            this.group.transform = clone$2(coordSys.getRoamTransform());\n            this.group.decomposeTransform();\n        }\n    },\n\n    remove: function (ecModel, api) {\n        this._symbolDraw && this._symbolDraw.remove(api);\n    },\n\n    dispose: function () {}\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nregisterVisual(visualSymbol('effectScatter', 'circle'));\nregisterLayout(pointsLayout('effectScatter'));\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/* global Uint32Array, Float64Array, Float32Array */\n\nvar Uint32Arr = typeof Uint32Array === 'undefined' ? Array : Uint32Array;\nvar Float64Arr = typeof Float64Array === 'undefined' ? Array : Float64Array;\n\nfunction compatEc2(seriesOpt) {\n    var data = seriesOpt.data;\n    if (data && data[0] && data[0][0] && data[0][0].coord) {\n        if (__DEV__) {\n            console.warn('Lines data configuration has been changed to'\n                + ' { coords:[[1,2],[2,3]] }');\n        }\n        seriesOpt.data = map(data, function (itemOpt) {\n            var coords = [\n                itemOpt[0].coord, itemOpt[1].coord\n            ];\n            var target = {\n                coords: coords\n            };\n            if (itemOpt[0].name) {\n                target.fromName = itemOpt[0].name;\n            }\n            if (itemOpt[1].name) {\n                target.toName = itemOpt[1].name;\n            }\n            return mergeAll([target, itemOpt[0], itemOpt[1]]);\n        });\n    }\n}\n\nvar LinesSeries = SeriesModel.extend({\n\n    type: 'series.lines',\n\n    dependencies: ['grid', 'polar'],\n\n    visualColorAccessPath: 'lineStyle.color',\n\n    init: function (option) {\n        // The input data may be null/undefined.\n        option.data = option.data || [];\n\n        // Not using preprocessor because mergeOption may not have series.type\n        compatEc2(option);\n\n        var result = this._processFlatCoordsArray(option.data);\n        this._flatCoords = result.flatCoords;\n        this._flatCoordsOffset = result.flatCoordsOffset;\n        if (result.flatCoords) {\n            option.data = new Float32Array(result.count);\n        }\n\n        LinesSeries.superApply(this, 'init', arguments);\n    },\n\n    mergeOption: function (option) {\n        // The input data may be null/undefined.\n        option.data = option.data || [];\n\n        compatEc2(option);\n\n        if (option.data) {\n            // Only update when have option data to merge.\n            var result = this._processFlatCoordsArray(option.data);\n            this._flatCoords = result.flatCoords;\n            this._flatCoordsOffset = result.flatCoordsOffset;\n            if (result.flatCoords) {\n                option.data = new Float32Array(result.count);\n            }\n        }\n\n        LinesSeries.superApply(this, 'mergeOption', arguments);\n    },\n\n    appendData: function (params) {\n        var result = this._processFlatCoordsArray(params.data);\n        if (result.flatCoords) {\n            if (!this._flatCoords) {\n                this._flatCoords = result.flatCoords;\n                this._flatCoordsOffset = result.flatCoordsOffset;\n            }\n            else {\n                this._flatCoords = concatArray(this._flatCoords, result.flatCoords);\n                this._flatCoordsOffset = concatArray(this._flatCoordsOffset, result.flatCoordsOffset);\n            }\n            params.data = new Float32Array(result.count);\n        }\n\n        this.getRawData().appendData(params.data);\n    },\n\n    _getCoordsFromItemModel: function (idx) {\n        var itemModel = this.getData().getItemModel(idx);\n        var coords = (itemModel.option instanceof Array)\n            ? itemModel.option : itemModel.getShallow('coords');\n\n        if (__DEV__) {\n            if (!(coords instanceof Array && coords.length > 0 && coords[0] instanceof Array)) {\n                throw new Error(\n                    'Invalid coords ' + JSON.stringify(coords) + '. Lines must have 2d coords array in data item.'\n                );\n            }\n        }\n        return coords;\n    },\n\n    getLineCoordsCount: function (idx) {\n        if (this._flatCoordsOffset) {\n            return this._flatCoordsOffset[idx * 2 + 1];\n        }\n        else {\n            return this._getCoordsFromItemModel(idx).length;\n        }\n    },\n\n    getLineCoords: function (idx, out) {\n        if (this._flatCoordsOffset) {\n            var offset = this._flatCoordsOffset[idx * 2];\n            var len = this._flatCoordsOffset[idx * 2 + 1];\n            for (var i = 0; i < len; i++) {\n                out[i] = out[i] || [];\n                out[i][0] = this._flatCoords[offset + i * 2];\n                out[i][1] = this._flatCoords[offset + i * 2 + 1];\n            }\n            return len;\n        }\n        else {\n            var coords = this._getCoordsFromItemModel(idx);\n            for (var i = 0; i < coords.length; i++) {\n                out[i] = out[i] || [];\n                out[i][0] = coords[i][0];\n                out[i][1] = coords[i][1];\n            }\n            return coords.length;\n        }\n    },\n\n    _processFlatCoordsArray: function (data) {\n        var startOffset = 0;\n        if (this._flatCoords) {\n            startOffset = this._flatCoords.length;\n        }\n        // Stored as a typed array. In format\n        // Points Count(2) | x | y | x | y | Points Count(3) | x |  y | x | y | x | y |\n        if (typeof data[0] === 'number') {\n            var len = data.length;\n            // Store offset and len of each segment\n            var coordsOffsetAndLenStorage = new Uint32Arr(len);\n            var coordsStorage = new Float64Arr(len);\n            var coordsCursor = 0;\n            var offsetCursor = 0;\n            var dataCount = 0;\n            for (var i = 0; i < len;) {\n                dataCount++;\n                var count = data[i++];\n                // Offset\n                coordsOffsetAndLenStorage[offsetCursor++] = coordsCursor + startOffset;\n                // Len\n                coordsOffsetAndLenStorage[offsetCursor++] = count;\n                for (var k = 0; k < count; k++) {\n                    var x = data[i++];\n                    var y = data[i++];\n                    coordsStorage[coordsCursor++] = x;\n                    coordsStorage[coordsCursor++] = y;\n\n                    if (i > len) {\n                        if (__DEV__) {\n                            throw new Error('Invalid data format.');\n                        }\n                    }\n                }\n            }\n\n            return {\n                flatCoordsOffset: new Uint32Array(coordsOffsetAndLenStorage.buffer, 0, offsetCursor),\n                flatCoords: coordsStorage,\n                count: dataCount\n            };\n        }\n\n        return {\n            flatCoordsOffset: null,\n            flatCoords: null,\n            count: data.length\n        };\n    },\n\n    getInitialData: function (option, ecModel) {\n        if (__DEV__) {\n            var CoordSys = CoordinateSystemManager.get(option.coordinateSystem);\n            if (!CoordSys) {\n                throw new Error('Unkown coordinate system ' + option.coordinateSystem);\n            }\n        }\n\n        var lineData = new List(['value'], this);\n        lineData.hasItemOption = false;\n\n        lineData.initData(option.data, [], function (dataItem, dimName, dataIndex, dimIndex) {\n            // dataItem is simply coords\n            if (dataItem instanceof Array) {\n                return NaN;\n            }\n            else {\n                lineData.hasItemOption = true;\n                var value = dataItem.value;\n                if (value != null) {\n                    return value instanceof Array ? value[dimIndex] : value;\n                }\n            }\n        });\n\n        return lineData;\n    },\n\n    formatTooltip: function (dataIndex) {\n        var data = this.getData();\n        var itemModel = data.getItemModel(dataIndex);\n        var name = itemModel.get('name');\n        if (name) {\n            return name;\n        }\n        var fromName = itemModel.get('fromName');\n        var toName = itemModel.get('toName');\n        var html = [];\n        fromName != null && html.push(fromName);\n        toName != null && html.push(toName);\n\n        return encodeHTML(html.join(' > '));\n    },\n\n    preventIncremental: function () {\n        return !!this.get('effect.show');\n    },\n\n    getProgressive: function () {\n        var progressive = this.option.progressive;\n        if (progressive == null) {\n            return this.option.large ? 1e4 : this.get('progressive');\n        }\n        return progressive;\n    },\n\n    getProgressiveThreshold: function () {\n        var progressiveThreshold = this.option.progressiveThreshold;\n        if (progressiveThreshold == null) {\n            return this.option.large ? 2e4 : this.get('progressiveThreshold');\n        }\n        return progressiveThreshold;\n    },\n\n    defaultOption: {\n        coordinateSystem: 'geo',\n        zlevel: 0,\n        z: 2,\n        legendHoverLink: true,\n\n        hoverAnimation: true,\n        // Cartesian coordinate system\n        xAxisIndex: 0,\n        yAxisIndex: 0,\n\n        symbol: ['none', 'none'],\n        symbolSize: [10, 10],\n        // Geo coordinate system\n        geoIndex: 0,\n\n        effect: {\n            show: false,\n            period: 4,\n            // Animation delay. support callback\n            // delay: 0,\n            // If move with constant speed px/sec\n            // period will be ignored if this property is > 0,\n            constantSpeed: 0,\n            symbol: 'circle',\n            symbolSize: 3,\n            loop: true,\n            // Length of trail, 0 - 1\n            trailLength: 0.2\n            // Same with lineStyle.color\n            // color\n        },\n\n        large: false,\n        // Available when large is true\n        largeThreshold: 2000,\n\n        // If lines are polyline\n        // polyline not support curveness, label, animation\n        polyline: false,\n\n        label: {\n            show: false,\n            position: 'end'\n            // distance: 5,\n            // formatter: 标签文本格式器，同Tooltip.formatter，不支持异步回调\n        },\n\n        lineStyle: {\n            opacity: 0.5\n        }\n    }\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Provide effect for line\n * @module echarts/chart/helper/EffectLine\n */\n\n/**\n * @constructor\n * @extends {module:zrender/graphic/Group}\n * @alias {module:echarts/chart/helper/Line}\n */\nfunction EffectLine(lineData, idx, seriesScope) {\n    Group.call(this);\n\n    this.add(this.createLine(lineData, idx, seriesScope));\n\n    this._updateEffectSymbol(lineData, idx);\n}\n\nvar effectLineProto = EffectLine.prototype;\n\neffectLineProto.createLine = function (lineData, idx, seriesScope) {\n    return new Line$1(lineData, idx, seriesScope);\n};\n\neffectLineProto._updateEffectSymbol = function (lineData, idx) {\n    var itemModel = lineData.getItemModel(idx);\n    var effectModel = itemModel.getModel('effect');\n    var size = effectModel.get('symbolSize');\n    var symbolType = effectModel.get('symbol');\n    if (!isArray(size)) {\n        size = [size, size];\n    }\n    var color = effectModel.get('color') || lineData.getItemVisual(idx, 'color');\n    var symbol = this.childAt(1);\n\n    if (this._symbolType !== symbolType) {\n        // Remove previous\n        this.remove(symbol);\n\n        symbol = createSymbol(\n            symbolType, -0.5, -0.5, 1, 1, color\n        );\n        symbol.z2 = 100;\n        symbol.culling = true;\n\n        this.add(symbol);\n    }\n\n    // Symbol may be removed if loop is false\n    if (!symbol) {\n        return;\n    }\n\n    // Shadow color is same with color in default\n    symbol.setStyle('shadowColor', color);\n    symbol.setStyle(effectModel.getItemStyle(['color']));\n\n    symbol.attr('scale', size);\n\n    symbol.setColor(color);\n    symbol.attr('scale', size);\n\n    this._symbolType = symbolType;\n\n    this._updateEffectAnimation(lineData, effectModel, idx);\n};\n\neffectLineProto._updateEffectAnimation = function (lineData, effectModel, idx) {\n\n    var symbol = this.childAt(1);\n    if (!symbol) {\n        return;\n    }\n\n    var self = this;\n\n    var points = lineData.getItemLayout(idx);\n\n    var period = effectModel.get('period') * 1000;\n    var loop = effectModel.get('loop');\n    var constantSpeed = effectModel.get('constantSpeed');\n    var delayExpr = retrieve(effectModel.get('delay'), function (idx) {\n        return idx / lineData.count() * period / 3;\n    });\n    var isDelayFunc = typeof delayExpr === 'function';\n\n    // Ignore when updating\n    symbol.ignore = true;\n\n    this.updateAnimationPoints(symbol, points);\n\n    if (constantSpeed > 0) {\n        period = this.getLineLength(symbol) / constantSpeed * 1000;\n    }\n\n    if (period !== this._period || loop !== this._loop) {\n\n        symbol.stopAnimation();\n\n        var delay = delayExpr;\n        if (isDelayFunc) {\n            delay = delayExpr(idx);\n        }\n        if (symbol.__t > 0) {\n            delay = -period * symbol.__t;\n        }\n        symbol.__t = 0;\n        var animator = symbol.animate('', loop)\n            .when(period, {\n                __t: 1\n            })\n            .delay(delay)\n            .during(function () {\n                self.updateSymbolPosition(symbol);\n            });\n        if (!loop) {\n            animator.done(function () {\n                self.remove(symbol);\n            });\n        }\n        animator.start();\n    }\n\n    this._period = period;\n    this._loop = loop;\n};\n\neffectLineProto.getLineLength = function (symbol) {\n    // Not so accurate\n    return (dist(symbol.__p1, symbol.__cp1)\n        + dist(symbol.__cp1, symbol.__p2));\n};\n\neffectLineProto.updateAnimationPoints = function (symbol, points) {\n    symbol.__p1 = points[0];\n    symbol.__p2 = points[1];\n    symbol.__cp1 = points[2] || [\n        (points[0][0] + points[1][0]) / 2,\n        (points[0][1] + points[1][1]) / 2\n    ];\n};\n\neffectLineProto.updateData = function (lineData, idx, seriesScope) {\n    this.childAt(0).updateData(lineData, idx, seriesScope);\n    this._updateEffectSymbol(lineData, idx);\n};\n\neffectLineProto.updateSymbolPosition = function (symbol) {\n    var p1 = symbol.__p1;\n    var p2 = symbol.__p2;\n    var cp1 = symbol.__cp1;\n    var t = symbol.__t;\n    var pos = symbol.position;\n    var quadraticAt$$1 = quadraticAt;\n    var quadraticDerivativeAt$$1 = quadraticDerivativeAt;\n    pos[0] = quadraticAt$$1(p1[0], cp1[0], p2[0], t);\n    pos[1] = quadraticAt$$1(p1[1], cp1[1], p2[1], t);\n\n    // Tangent\n    var tx = quadraticDerivativeAt$$1(p1[0], cp1[0], p2[0], t);\n    var ty = quadraticDerivativeAt$$1(p1[1], cp1[1], p2[1], t);\n\n    symbol.rotation = -Math.atan2(ty, tx) - Math.PI / 2;\n\n    symbol.ignore = false;\n};\n\n\neffectLineProto.updateLayout = function (lineData, idx) {\n    this.childAt(0).updateLayout(lineData, idx);\n\n    var effectModel = lineData.getItemModel(idx).getModel('effect');\n    this._updateEffectAnimation(lineData, effectModel, idx);\n};\n\ninherits(EffectLine, Group);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * @module echarts/chart/helper/Line\n */\n\n/**\n * @constructor\n * @extends {module:zrender/graphic/Group}\n * @alias {module:echarts/chart/helper/Polyline}\n */\nfunction Polyline$2(lineData, idx, seriesScope) {\n    Group.call(this);\n\n    this._createPolyline(lineData, idx, seriesScope);\n}\n\nvar polylineProto = Polyline$2.prototype;\n\npolylineProto._createPolyline = function (lineData, idx, seriesScope) {\n    // var seriesModel = lineData.hostModel;\n    var points = lineData.getItemLayout(idx);\n\n    var line = new Polyline({\n        shape: {\n            points: points\n        }\n    });\n\n    this.add(line);\n\n    this._updateCommonStl(lineData, idx, seriesScope);\n};\n\npolylineProto.updateData = function (lineData, idx, seriesScope) {\n    var seriesModel = lineData.hostModel;\n\n    var line = this.childAt(0);\n    var target = {\n        shape: {\n            points: lineData.getItemLayout(idx)\n        }\n    };\n    updateProps(line, target, seriesModel, idx);\n\n    this._updateCommonStl(lineData, idx, seriesScope);\n};\n\npolylineProto._updateCommonStl = function (lineData, idx, seriesScope) {\n    var line = this.childAt(0);\n    var itemModel = lineData.getItemModel(idx);\n\n    var visualColor = lineData.getItemVisual(idx, 'color');\n\n    var lineStyle = seriesScope && seriesScope.lineStyle;\n    var hoverLineStyle = seriesScope && seriesScope.hoverLineStyle;\n\n    if (!seriesScope || lineData.hasItemOption) {\n        lineStyle = itemModel.getModel('lineStyle').getLineStyle();\n        hoverLineStyle = itemModel.getModel('emphasis.lineStyle').getLineStyle();\n    }\n    line.useStyle(defaults(\n        {\n            strokeNoScale: true,\n            fill: 'none',\n            stroke: visualColor\n        },\n        lineStyle\n    ));\n    line.hoverStyle = hoverLineStyle;\n\n    setHoverStyle(this);\n};\n\npolylineProto.updateLayout = function (lineData, idx) {\n    var polyline = this.childAt(0);\n    polyline.setShape('points', lineData.getItemLayout(idx));\n};\n\ninherits(Polyline$2, Group);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Provide effect for line\n * @module echarts/chart/helper/EffectLine\n */\n\n/**\n * @constructor\n * @extends {module:echarts/chart/helper/EffectLine}\n * @alias {module:echarts/chart/helper/Polyline}\n */\nfunction EffectPolyline(lineData, idx, seriesScope) {\n    EffectLine.call(this, lineData, idx, seriesScope);\n    this._lastFrame = 0;\n    this._lastFramePercent = 0;\n}\n\nvar effectPolylineProto = EffectPolyline.prototype;\n\n// Overwrite\neffectPolylineProto.createLine = function (lineData, idx, seriesScope) {\n    return new Polyline$2(lineData, idx, seriesScope);\n};\n\n// Overwrite\neffectPolylineProto.updateAnimationPoints = function (symbol, points) {\n    this._points = points;\n    var accLenArr = [0];\n    var len$$1 = 0;\n    for (var i = 1; i < points.length; i++) {\n        var p1 = points[i - 1];\n        var p2 = points[i];\n        len$$1 += dist(p1, p2);\n        accLenArr.push(len$$1);\n    }\n    if (len$$1 === 0) {\n        return;\n    }\n\n    for (var i = 0; i < accLenArr.length; i++) {\n        accLenArr[i] /= len$$1;\n    }\n    this._offsets = accLenArr;\n    this._length = len$$1;\n};\n\n// Overwrite\neffectPolylineProto.getLineLength = function (symbol) {\n    return this._length;\n};\n\n// Overwrite\neffectPolylineProto.updateSymbolPosition = function (symbol) {\n    var t = symbol.__t;\n    var points = this._points;\n    var offsets = this._offsets;\n    var len$$1 = points.length;\n\n    if (!offsets) {\n        // Has length 0\n        return;\n    }\n\n    var lastFrame = this._lastFrame;\n    var frame;\n\n    if (t < this._lastFramePercent) {\n        // Start from the next frame\n        // PENDING start from lastFrame ?\n        var start = Math.min(lastFrame + 1, len$$1 - 1);\n        for (frame = start; frame >= 0; frame--) {\n            if (offsets[frame] <= t) {\n                break;\n            }\n        }\n        // PENDING really need to do this ?\n        frame = Math.min(frame, len$$1 - 2);\n    }\n    else {\n        for (var frame = lastFrame; frame < len$$1; frame++) {\n            if (offsets[frame] > t) {\n                break;\n            }\n        }\n        frame = Math.min(frame - 1, len$$1 - 2);\n    }\n\n    lerp(\n        symbol.position, points[frame], points[frame + 1],\n        (t - offsets[frame]) / (offsets[frame + 1] - offsets[frame])\n    );\n\n    var tx = points[frame + 1][0] - points[frame][0];\n    var ty = points[frame + 1][1] - points[frame][1];\n    symbol.rotation = -Math.atan2(ty, tx) - Math.PI / 2;\n\n    this._lastFrame = frame;\n    this._lastFramePercent = t;\n\n    symbol.ignore = false;\n};\n\ninherits(EffectPolyline, EffectLine);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n// TODO Batch by color\n\nvar LargeLineShape = extendShape({\n\n    shape: {\n        polyline: false,\n        curveness: 0,\n        segs: []\n    },\n\n    buildPath: function (path, shape) {\n        var segs = shape.segs;\n        var curveness = shape.curveness;\n\n        if (shape.polyline) {\n            for (var i = 0; i < segs.length;) {\n                var count = segs[i++];\n                if (count > 0) {\n                    path.moveTo(segs[i++], segs[i++]);\n                    for (var k = 1; k < count; k++) {\n                        path.lineTo(segs[i++], segs[i++]);\n                    }\n                }\n            }\n        }\n        else {\n            for (var i = 0; i < segs.length;) {\n                var x0 = segs[i++];\n                var y0 = segs[i++];\n                var x1 = segs[i++];\n                var y1 = segs[i++];\n                path.moveTo(x0, y0);\n                if (curveness > 0) {\n                    var x2 = (x0 + x1) / 2 - (y0 - y1) * curveness;\n                    var y2 = (y0 + y1) / 2 - (x1 - x0) * curveness;\n                    path.quadraticCurveTo(x2, y2, x1, y1);\n                }\n                else {\n                    path.lineTo(x1, y1);\n                }\n            }\n        }\n    },\n\n    findDataIndex: function (x, y) {\n\n        var shape = this.shape;\n        var segs = shape.segs;\n        var curveness = shape.curveness;\n\n        if (shape.polyline) {\n            var dataIndex = 0;\n            for (var i = 0; i < segs.length;) {\n                var count = segs[i++];\n                if (count > 0) {\n                    var x0 = segs[i++];\n                    var y0 = segs[i++];\n                    for (var k = 1; k < count; k++) {\n                        var x1 = segs[i++];\n                        var y1 = segs[i++];\n                        if (containStroke$1(x0, y0, x1, y1)) {\n                            return dataIndex;\n                        }\n                    }\n                }\n\n                dataIndex++;\n            }\n        }\n        else {\n            var dataIndex = 0;\n            for (var i = 0; i < segs.length;) {\n                var x0 = segs[i++];\n                var y0 = segs[i++];\n                var x1 = segs[i++];\n                var y1 = segs[i++];\n                if (curveness > 0) {\n                    var x2 = (x0 + x1) / 2 - (y0 - y1) * curveness;\n                    var y2 = (y0 + y1) / 2 - (x1 - x0) * curveness;\n\n                    if (containStroke$3(x0, y0, x2, y2, x1, y1)) {\n                        return dataIndex;\n                    }\n                }\n                else {\n                    if (containStroke$1(x0, y0, x1, y1)) {\n                        return dataIndex;\n                    }\n                }\n\n                dataIndex++;\n            }\n        }\n\n        return -1;\n    }\n});\n\nfunction LargeLineDraw() {\n    this.group = new Group();\n}\n\nvar largeLineProto = LargeLineDraw.prototype;\n\nlargeLineProto.isPersistent = function () {\n    return !this._incremental;\n};\n\n/**\n * Update symbols draw by new data\n * @param {module:echarts/data/List} data\n */\nlargeLineProto.updateData = function (data) {\n    this.group.removeAll();\n\n    var lineEl = new LargeLineShape({\n        rectHover: true,\n        cursor: 'default'\n    });\n    lineEl.setShape({\n        segs: data.getLayout('linesPoints')\n    });\n\n    this._setCommon(lineEl, data);\n\n    // Add back\n    this.group.add(lineEl);\n\n    this._incremental = null;\n};\n\n/**\n * @override\n */\nlargeLineProto.incrementalPrepareUpdate = function (data) {\n    this.group.removeAll();\n\n    this._clearIncremental();\n\n    if (data.count() > 5e5) {\n        if (!this._incremental) {\n            this._incremental = new IncrementalDisplayble({\n                silent: true\n            });\n        }\n        this.group.add(this._incremental);\n    }\n    else {\n        this._incremental = null;\n    }\n};\n\n/**\n * @override\n */\nlargeLineProto.incrementalUpdate = function (taskParams, data) {\n    var lineEl = new LargeLineShape();\n    lineEl.setShape({\n        segs: data.getLayout('linesPoints')\n    });\n\n    this._setCommon(lineEl, data, !!this._incremental);\n\n    if (!this._incremental) {\n        lineEl.rectHover = true;\n        lineEl.cursor = 'default';\n        lineEl.__startIndex = taskParams.start;\n        this.group.add(lineEl);\n    }\n    else {\n        this._incremental.addDisplayable(lineEl, true);\n    }\n};\n\n/**\n * @override\n */\nlargeLineProto.remove = function () {\n    this._clearIncremental();\n    this._incremental = null;\n    this.group.removeAll();\n};\n\nlargeLineProto._setCommon = function (lineEl, data, isIncremental) {\n    var hostModel = data.hostModel;\n\n    lineEl.setShape({\n        polyline: hostModel.get('polyline'),\n        curveness: hostModel.get('lineStyle.curveness')\n    });\n\n    lineEl.useStyle(\n        hostModel.getModel('lineStyle').getLineStyle()\n    );\n    lineEl.style.strokeNoScale = true;\n\n    var visualColor = data.getVisual('color');\n    if (visualColor) {\n        lineEl.setStyle('stroke', visualColor);\n    }\n    lineEl.setStyle('fill');\n\n    if (!isIncremental) {\n        // Enable tooltip\n        // PENDING May have performance issue when path is extremely large\n        lineEl.seriesIndex = hostModel.seriesIndex;\n        lineEl.on('mousemove', function (e) {\n            lineEl.dataIndex = null;\n            var dataIndex = lineEl.findDataIndex(e.offsetX, e.offsetY);\n            if (dataIndex > 0) {\n                // Provide dataIndex for tooltip\n                lineEl.dataIndex = dataIndex + lineEl.__startIndex;\n            }\n        });\n    }\n};\n\nlargeLineProto._clearIncremental = function () {\n    var incremental = this._incremental;\n    if (incremental) {\n        incremental.clearDisplaybles();\n    }\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/* global Float32Array */\n\nvar linesLayout = {\n    seriesType: 'lines',\n\n    plan: createRenderPlanner(),\n\n    reset: function (seriesModel) {\n        var coordSys = seriesModel.coordinateSystem;\n        var isPolyline = seriesModel.get('polyline');\n        var isLarge = seriesModel.pipelineContext.large;\n\n        function progress(params, lineData) {\n            var lineCoords = [];\n            if (isLarge) {\n                var points;\n                var segCount = params.end - params.start;\n                if (isPolyline) {\n                    var totalCoordsCount = 0;\n                    for (var i = params.start; i < params.end; i++) {\n                        totalCoordsCount += seriesModel.getLineCoordsCount(i);\n                    }\n                    points = new Float32Array(segCount + totalCoordsCount * 2);\n                }\n                else {\n                    points = new Float32Array(segCount * 4);\n                }\n\n                var offset = 0;\n                var pt = [];\n                for (var i = params.start; i < params.end; i++) {\n                    var len = seriesModel.getLineCoords(i, lineCoords);\n                    if (isPolyline) {\n                        points[offset++] = len;\n                    }\n                    for (var k = 0; k < len; k++) {\n                        pt = coordSys.dataToPoint(lineCoords[k], false, pt);\n                        points[offset++] = pt[0];\n                        points[offset++] = pt[1];\n                    }\n                }\n\n                lineData.setLayout('linesPoints', points);\n            }\n            else {\n                for (var i = params.start; i < params.end; i++) {\n                    var itemModel = lineData.getItemModel(i);\n                    var len = seriesModel.getLineCoords(i, lineCoords);\n\n                    var pts = [];\n                    if (isPolyline) {\n                        for (var j = 0; j < len; j++) {\n                            pts.push(coordSys.dataToPoint(lineCoords[j]));\n                        }\n                    }\n                    else {\n                        pts[0] = coordSys.dataToPoint(lineCoords[0]);\n                        pts[1] = coordSys.dataToPoint(lineCoords[1]);\n\n                        var curveness = itemModel.get('lineStyle.curveness');\n                        if (+curveness) {\n                            pts[2] = [\n                                (pts[0][0] + pts[1][0]) / 2 - (pts[0][1] - pts[1][1]) * curveness,\n                                (pts[0][1] + pts[1][1]) / 2 - (pts[1][0] - pts[0][0]) * curveness\n                            ];\n                        }\n                    }\n                    lineData.setItemLayout(i, pts);\n                }\n            }\n        }\n\n        return { progress: progress };\n    }\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nextendChartView({\n\n    type: 'lines',\n\n    init: function () {},\n\n    render: function (seriesModel, ecModel, api) {\n        var data = seriesModel.getData();\n\n        var lineDraw = this._updateLineDraw(data, seriesModel);\n\n        var zlevel = seriesModel.get('zlevel');\n        var trailLength = seriesModel.get('effect.trailLength');\n\n        var zr = api.getZr();\n        // Avoid the drag cause ghost shadow\n        // FIXME Better way ?\n        // SVG doesn't support\n        var isSvg = zr.painter.getType() === 'svg';\n        if (!isSvg) {\n            zr.painter.getLayer(zlevel).clear(true);\n        }\n        // Config layer with motion blur\n        if (this._lastZlevel != null && !isSvg) {\n            zr.configLayer(this._lastZlevel, {\n                motionBlur: false\n            });\n        }\n        if (this._showEffect(seriesModel) && trailLength) {\n            if (__DEV__) {\n                var notInIndividual = false;\n                ecModel.eachSeries(function (otherSeriesModel) {\n                    if (otherSeriesModel !== seriesModel && otherSeriesModel.get('zlevel') === zlevel) {\n                        notInIndividual = true;\n                    }\n                });\n                notInIndividual && console.warn('Lines with trail effect should have an individual zlevel');\n            }\n\n            if (!isSvg) {\n                zr.configLayer(zlevel, {\n                    motionBlur: true,\n                    lastFrameAlpha: Math.max(Math.min(trailLength / 10 + 0.9, 1), 0)\n                });\n            }\n        }\n\n        lineDraw.updateData(data);\n\n        this._lastZlevel = zlevel;\n\n        this._finished = true;\n    },\n\n    incrementalPrepareRender: function (seriesModel, ecModel, api) {\n        var data = seriesModel.getData();\n\n        var lineDraw = this._updateLineDraw(data, seriesModel);\n\n        lineDraw.incrementalPrepareUpdate(data);\n\n        this._clearLayer(api);\n\n        this._finished = false;\n    },\n\n    incrementalRender: function (taskParams, seriesModel, ecModel) {\n        this._lineDraw.incrementalUpdate(taskParams, seriesModel.getData());\n\n        this._finished = taskParams.end === seriesModel.getData().count();\n    },\n\n    updateTransform: function (seriesModel, ecModel, api) {\n        var data = seriesModel.getData();\n        var pipelineContext = seriesModel.pipelineContext;\n\n        if (!this._finished || pipelineContext.large || pipelineContext.progressiveRender) {\n            // TODO Don't have to do update in large mode. Only do it when there are millions of data.\n            return {\n                update: true\n            };\n        }\n        else {\n            // TODO Use same logic with ScatterView.\n            // Manually update layout\n            var res = linesLayout.reset(seriesModel);\n            if (res.progress) {\n                res.progress({ start: 0, end: data.count() }, data);\n            }\n            this._lineDraw.updateLayout();\n            this._clearLayer(api);\n        }\n    },\n\n    _updateLineDraw: function (data, seriesModel) {\n        var lineDraw = this._lineDraw;\n        var hasEffect = this._showEffect(seriesModel);\n        var isPolyline = !!seriesModel.get('polyline');\n        var pipelineContext = seriesModel.pipelineContext;\n        var isLargeDraw = pipelineContext.large;\n\n        if (__DEV__) {\n            if (hasEffect && isLargeDraw) {\n                console.warn('Large lines not support effect');\n            }\n        }\n        if (!lineDraw\n            || hasEffect !== this._hasEffet\n            || isPolyline !== this._isPolyline\n            || isLargeDraw !== this._isLargeDraw\n        ) {\n            if (lineDraw) {\n                lineDraw.remove();\n            }\n            lineDraw = this._lineDraw = isLargeDraw\n                ? new LargeLineDraw()\n                : new LineDraw(\n                    isPolyline\n                        ? (hasEffect ? EffectPolyline : Polyline$2)\n                        : (hasEffect ? EffectLine : Line$1)\n                );\n            this._hasEffet = hasEffect;\n            this._isPolyline = isPolyline;\n            this._isLargeDraw = isLargeDraw;\n            this.group.removeAll();\n        }\n\n        this.group.add(lineDraw.group);\n\n        return lineDraw;\n    },\n\n    _showEffect: function (seriesModel) {\n        return !!seriesModel.get('effect.show');\n    },\n\n    _clearLayer: function (api) {\n        // Not use motion when dragging or zooming\n        var zr = api.getZr();\n        var isSvg = zr.painter.getType() === 'svg';\n        if (!isSvg && this._lastZlevel != null) {\n            zr.painter.getLayer(this._lastZlevel).clear(true);\n        }\n    },\n\n    remove: function (ecModel, api) {\n        this._lineDraw && this._lineDraw.remove();\n        this._lineDraw = null;\n        // Clear motion when lineDraw is removed\n        this._clearLayer(api);\n    },\n\n    dispose: function () {}\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\nfunction normalize$2(a) {\n    if (!(a instanceof Array)) {\n        a = [a, a];\n    }\n    return a;\n}\n\nvar opacityQuery = 'lineStyle.opacity'.split('.');\n\nvar linesVisual = {\n    seriesType: 'lines',\n    reset: function (seriesModel, ecModel, api) {\n        var symbolType = normalize$2(seriesModel.get('symbol'));\n        var symbolSize = normalize$2(seriesModel.get('symbolSize'));\n        var data = seriesModel.getData();\n\n        data.setVisual('fromSymbol', symbolType && symbolType[0]);\n        data.setVisual('toSymbol', symbolType && symbolType[1]);\n        data.setVisual('fromSymbolSize', symbolSize && symbolSize[0]);\n        data.setVisual('toSymbolSize', symbolSize && symbolSize[1]);\n        data.setVisual('opacity', seriesModel.get(opacityQuery));\n\n        function dataEach(data, idx) {\n            var itemModel = data.getItemModel(idx);\n            var symbolType = normalize$2(itemModel.getShallow('symbol', true));\n            var symbolSize = normalize$2(itemModel.getShallow('symbolSize', true));\n            var opacity = itemModel.get(opacityQuery);\n\n            symbolType[0] && data.setItemVisual(idx, 'fromSymbol', symbolType[0]);\n            symbolType[1] && data.setItemVisual(idx, 'toSymbol', symbolType[1]);\n            symbolSize[0] && data.setItemVisual(idx, 'fromSymbolSize', symbolSize[0]);\n            symbolSize[1] && data.setItemVisual(idx, 'toSymbolSize', symbolSize[1]);\n\n            data.setItemVisual(idx, 'opacity', opacity);\n        }\n\n        return {dataEach: data.hasItemOption ? dataEach : null};\n    }\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nregisterLayout(linesLayout);\nregisterVisual(linesVisual);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nSeriesModel.extend({\n    type: 'series.heatmap',\n\n    getInitialData: function (option, ecModel) {\n        return createListFromArray(this.getSource(), this, {\n            generateCoord: 'value'\n        });\n    },\n\n    preventIncremental: function () {\n        var coordSysCreator = CoordinateSystemManager.get(this.get('coordinateSystem'));\n        if (coordSysCreator && coordSysCreator.dimensions) {\n            return coordSysCreator.dimensions[0] === 'lng' && coordSysCreator.dimensions[1] === 'lat';\n        }\n    },\n\n    defaultOption: {\n\n        // Cartesian2D or geo\n        coordinateSystem: 'cartesian2d',\n\n        zlevel: 0,\n\n        z: 2,\n\n        // Cartesian coordinate system\n        // xAxisIndex: 0,\n        // yAxisIndex: 0,\n\n        // Geo coordinate system\n        geoIndex: 0,\n\n        blurSize: 30,\n\n        pointSize: 20,\n\n        maxOpacity: 1,\n\n        minOpacity: 0\n    }\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/* global Uint8ClampedArray */\n\nvar GRADIENT_LEVELS = 256;\n\n/**\n * Heatmap Chart\n *\n * @class\n */\nfunction Heatmap() {\n    var canvas = createCanvas();\n    this.canvas = canvas;\n\n    this.blurSize = 30;\n    this.pointSize = 20;\n\n    this.maxOpacity = 1;\n    this.minOpacity = 0;\n\n    this._gradientPixels = {};\n}\n\nHeatmap.prototype = {\n    /**\n     * Renders Heatmap and returns the rendered canvas\n     * @param {Array} data array of data, each has x, y, value\n     * @param {number} width canvas width\n     * @param {number} height canvas height\n     */\n    update: function (data, width, height, normalize, colorFunc, isInRange) {\n        var brush = this._getBrush();\n        var gradientInRange = this._getGradient(data, colorFunc, 'inRange');\n        var gradientOutOfRange = this._getGradient(data, colorFunc, 'outOfRange');\n        var r = this.pointSize + this.blurSize;\n\n        var canvas = this.canvas;\n        var ctx = canvas.getContext('2d');\n        var len = data.length;\n        canvas.width = width;\n        canvas.height = height;\n        for (var i = 0; i < len; ++i) {\n            var p = data[i];\n            var x = p[0];\n            var y = p[1];\n            var value = p[2];\n\n            // calculate alpha using value\n            var alpha = normalize(value);\n\n            // draw with the circle brush with alpha\n            ctx.globalAlpha = alpha;\n            ctx.drawImage(brush, x - r, y - r);\n        }\n\n        if (!canvas.width || !canvas.height) {\n            // Avoid \"Uncaught DOMException: Failed to execute 'getImageData' on\n            // 'CanvasRenderingContext2D': The source height is 0.\"\n            return canvas;\n        }\n\n        // colorize the canvas using alpha value and set with gradient\n        var imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n\n        var pixels = imageData.data;\n        var offset = 0;\n        var pixelLen = pixels.length;\n        var minOpacity = this.minOpacity;\n        var maxOpacity = this.maxOpacity;\n        var diffOpacity = maxOpacity - minOpacity;\n\n        while (offset < pixelLen) {\n            var alpha = pixels[offset + 3] / 256;\n            var gradientOffset = Math.floor(alpha * (GRADIENT_LEVELS - 1)) * 4;\n            // Simple optimize to ignore the empty data\n            if (alpha > 0) {\n                var gradient = isInRange(alpha) ? gradientInRange : gradientOutOfRange;\n                // Any alpha > 0 will be mapped to [minOpacity, maxOpacity]\n                alpha > 0 && (alpha = alpha * diffOpacity + minOpacity);\n                pixels[offset++] = gradient[gradientOffset];\n                pixels[offset++] = gradient[gradientOffset + 1];\n                pixels[offset++] = gradient[gradientOffset + 2];\n                pixels[offset++] = gradient[gradientOffset + 3] * alpha * 256;\n            }\n            else {\n                offset += 4;\n            }\n        }\n        ctx.putImageData(imageData, 0, 0);\n\n        return canvas;\n    },\n\n    /**\n     * get canvas of a black circle brush used for canvas to draw later\n     * @private\n     * @returns {Object} circle brush canvas\n     */\n    _getBrush: function () {\n        var brushCanvas = this._brushCanvas || (this._brushCanvas = createCanvas());\n        // set brush size\n        var r = this.pointSize + this.blurSize;\n        var d = r * 2;\n        brushCanvas.width = d;\n        brushCanvas.height = d;\n\n        var ctx = brushCanvas.getContext('2d');\n        ctx.clearRect(0, 0, d, d);\n\n        // in order to render shadow without the distinct circle,\n        // draw the distinct circle in an invisible place,\n        // and use shadowOffset to draw shadow in the center of the canvas\n        ctx.shadowOffsetX = d;\n        ctx.shadowBlur = this.blurSize;\n        // draw the shadow in black, and use alpha and shadow blur to generate\n        // color in color map\n        ctx.shadowColor = '#000';\n\n        // draw circle in the left to the canvas\n        ctx.beginPath();\n        ctx.arc(-r, r, this.pointSize, 0, Math.PI * 2, true);\n        ctx.closePath();\n        ctx.fill();\n        return brushCanvas;\n    },\n\n    /**\n     * get gradient color map\n     * @private\n     */\n    _getGradient: function (data, colorFunc, state) {\n        var gradientPixels = this._gradientPixels;\n        var pixelsSingleState = gradientPixels[state] || (gradientPixels[state] = new Uint8ClampedArray(256 * 4));\n        var color = [0, 0, 0, 0];\n        var off = 0;\n        for (var i = 0; i < 256; i++) {\n            colorFunc[state](i / 255, true, color);\n            pixelsSingleState[off++] = color[0];\n            pixelsSingleState[off++] = color[1];\n            pixelsSingleState[off++] = color[2];\n            pixelsSingleState[off++] = color[3];\n        }\n        return pixelsSingleState;\n    }\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nfunction getIsInPiecewiseRange(dataExtent, pieceList, selected) {\n    var dataSpan = dataExtent[1] - dataExtent[0];\n    pieceList = map(pieceList, function (piece) {\n        return {\n            interval: [\n                (piece.interval[0] - dataExtent[0]) / dataSpan,\n                (piece.interval[1] - dataExtent[0]) / dataSpan\n            ]\n        };\n    });\n    var len = pieceList.length;\n    var lastIndex = 0;\n\n    return function (val) {\n        // Try to find in the location of the last found\n        for (var i = lastIndex; i < len; i++) {\n            var interval = pieceList[i].interval;\n            if (interval[0] <= val && val <= interval[1]) {\n                lastIndex = i;\n                break;\n            }\n        }\n        if (i === len) { // Not found, back interation\n            for (var i = lastIndex - 1; i >= 0; i--) {\n                var interval = pieceList[i].interval;\n                if (interval[0] <= val && val <= interval[1]) {\n                    lastIndex = i;\n                    break;\n                }\n            }\n        }\n        return i >= 0 && i < len && selected[i];\n    };\n}\n\nfunction getIsInContinuousRange(dataExtent, range) {\n    var dataSpan = dataExtent[1] - dataExtent[0];\n    range = [\n        (range[0] - dataExtent[0]) / dataSpan,\n        (range[1] - dataExtent[0]) / dataSpan\n    ];\n    return function (val) {\n        return val >= range[0] && val <= range[1];\n    };\n}\n\nfunction isGeoCoordSys(coordSys) {\n    var dimensions = coordSys.dimensions;\n    // Not use coorSys.type === 'geo' because coordSys maybe extended\n    return dimensions[0] === 'lng' && dimensions[1] === 'lat';\n}\n\nextendChartView({\n\n    type: 'heatmap',\n\n    render: function (seriesModel, ecModel, api) {\n        var visualMapOfThisSeries;\n        ecModel.eachComponent('visualMap', function (visualMap) {\n            visualMap.eachTargetSeries(function (targetSeries) {\n                if (targetSeries === seriesModel) {\n                    visualMapOfThisSeries = visualMap;\n                }\n            });\n        });\n\n        if (__DEV__) {\n            if (!visualMapOfThisSeries) {\n                throw new Error('Heatmap must use with visualMap');\n            }\n        }\n\n        this.group.removeAll();\n\n        this._incrementalDisplayable = null;\n\n        var coordSys = seriesModel.coordinateSystem;\n        if (coordSys.type === 'cartesian2d' || coordSys.type === 'calendar') {\n            this._renderOnCartesianAndCalendar(seriesModel, api, 0, seriesModel.getData().count());\n        }\n        else if (isGeoCoordSys(coordSys)) {\n            this._renderOnGeo(\n                coordSys, seriesModel, visualMapOfThisSeries, api\n            );\n        }\n    },\n\n    incrementalPrepareRender: function (seriesModel, ecModel, api) {\n        this.group.removeAll();\n    },\n\n    incrementalRender: function (params, seriesModel, ecModel, api) {\n        var coordSys = seriesModel.coordinateSystem;\n        if (coordSys) {\n            this._renderOnCartesianAndCalendar(seriesModel, api, params.start, params.end, true);\n        }\n    },\n\n    _renderOnCartesianAndCalendar: function (seriesModel, api, start, end, incremental) {\n\n        var coordSys = seriesModel.coordinateSystem;\n        var width;\n        var height;\n\n        if (coordSys.type === 'cartesian2d') {\n            var xAxis = coordSys.getAxis('x');\n            var yAxis = coordSys.getAxis('y');\n\n            if (__DEV__) {\n                if (!(xAxis.type === 'category' && yAxis.type === 'category')) {\n                    throw new Error('Heatmap on cartesian must have two category axes');\n                }\n                if (!(xAxis.onBand && yAxis.onBand)) {\n                    throw new Error('Heatmap on cartesian must have two axes with boundaryGap true');\n                }\n            }\n\n            width = xAxis.getBandWidth();\n            height = yAxis.getBandWidth();\n        }\n\n        var group = this.group;\n        var data = seriesModel.getData();\n\n        var itemStyleQuery = 'itemStyle';\n        var hoverItemStyleQuery = 'emphasis.itemStyle';\n        var labelQuery = 'label';\n        var hoverLabelQuery = 'emphasis.label';\n        var style = seriesModel.getModel(itemStyleQuery).getItemStyle(['color']);\n        var hoverStl = seriesModel.getModel(hoverItemStyleQuery).getItemStyle();\n        var labelModel = seriesModel.getModel(labelQuery);\n        var hoverLabelModel = seriesModel.getModel(hoverLabelQuery);\n        var coordSysType = coordSys.type;\n\n\n        var dataDims = coordSysType === 'cartesian2d'\n            ? [\n                data.mapDimension('x'),\n                data.mapDimension('y'),\n                data.mapDimension('value')\n            ]\n            : [\n                data.mapDimension('time'),\n                data.mapDimension('value')\n            ];\n\n        for (var idx = start; idx < end; idx++) {\n            var rect;\n\n            if (coordSysType === 'cartesian2d') {\n                // Ignore empty data\n                if (isNaN(data.get(dataDims[2], idx))) {\n                    continue;\n                }\n\n                var point = coordSys.dataToPoint([\n                    data.get(dataDims[0], idx),\n                    data.get(dataDims[1], idx)\n                ]);\n\n                rect = new Rect({\n                    shape: {\n                        x: point[0] - width / 2,\n                        y: point[1] - height / 2,\n                        width: width,\n                        height: height\n                    },\n                    style: {\n                        fill: data.getItemVisual(idx, 'color'),\n                        opacity: data.getItemVisual(idx, 'opacity')\n                    }\n                });\n            }\n            else {\n                // Ignore empty data\n                if (isNaN(data.get(dataDims[1], idx))) {\n                    continue;\n                }\n\n                rect = new Rect({\n                    z2: 1,\n                    shape: coordSys.dataToRect([data.get(dataDims[0], idx)]).contentShape,\n                    style: {\n                        fill: data.getItemVisual(idx, 'color'),\n                        opacity: data.getItemVisual(idx, 'opacity')\n                    }\n                });\n            }\n\n            var itemModel = data.getItemModel(idx);\n\n            // Optimization for large datset\n            if (data.hasItemOption) {\n                style = itemModel.getModel(itemStyleQuery).getItemStyle(['color']);\n                hoverStl = itemModel.getModel(hoverItemStyleQuery).getItemStyle();\n                labelModel = itemModel.getModel(labelQuery);\n                hoverLabelModel = itemModel.getModel(hoverLabelQuery);\n            }\n\n            var rawValue = seriesModel.getRawValue(idx);\n            var defaultText = '-';\n            if (rawValue && rawValue[2] != null) {\n                defaultText = rawValue[2];\n            }\n\n            setLabelStyle(\n                style, hoverStl, labelModel, hoverLabelModel,\n                {\n                    labelFetcher: seriesModel,\n                    labelDataIndex: idx,\n                    defaultText: defaultText,\n                    isRectText: true\n                }\n            );\n\n            rect.setStyle(style);\n            setHoverStyle(rect, data.hasItemOption ? hoverStl : extend({}, hoverStl));\n\n            rect.incremental = incremental;\n            // PENDING\n            if (incremental) {\n                // Rect must use hover layer if it's incremental.\n                rect.useHoverLayer = true;\n            }\n\n            group.add(rect);\n            data.setItemGraphicEl(idx, rect);\n        }\n    },\n\n    _renderOnGeo: function (geo, seriesModel, visualMapModel, api) {\n        var inRangeVisuals = visualMapModel.targetVisuals.inRange;\n        var outOfRangeVisuals = visualMapModel.targetVisuals.outOfRange;\n        // if (!visualMapping) {\n        //     throw new Error('Data range must have color visuals');\n        // }\n\n        var data = seriesModel.getData();\n        var hmLayer = this._hmLayer || (this._hmLayer || new Heatmap());\n        hmLayer.blurSize = seriesModel.get('blurSize');\n        hmLayer.pointSize = seriesModel.get('pointSize');\n        hmLayer.minOpacity = seriesModel.get('minOpacity');\n        hmLayer.maxOpacity = seriesModel.get('maxOpacity');\n\n        var rect = geo.getViewRect().clone();\n        var roamTransform = geo.getRoamTransform();\n        rect.applyTransform(roamTransform);\n\n        // Clamp on viewport\n        var x = Math.max(rect.x, 0);\n        var y = Math.max(rect.y, 0);\n        var x2 = Math.min(rect.width + rect.x, api.getWidth());\n        var y2 = Math.min(rect.height + rect.y, api.getHeight());\n        var width = x2 - x;\n        var height = y2 - y;\n\n        var dims = [\n            data.mapDimension('lng'),\n            data.mapDimension('lat'),\n            data.mapDimension('value')\n        ];\n\n        var points = data.mapArray(dims, function (lng, lat, value) {\n            var pt = geo.dataToPoint([lng, lat]);\n            pt[0] -= x;\n            pt[1] -= y;\n            pt.push(value);\n            return pt;\n        });\n\n        var dataExtent = visualMapModel.getExtent();\n        var isInRange = visualMapModel.type === 'visualMap.continuous'\n            ? getIsInContinuousRange(dataExtent, visualMapModel.option.range)\n            : getIsInPiecewiseRange(\n                dataExtent, visualMapModel.getPieceList(), visualMapModel.option.selected\n            );\n\n        hmLayer.update(\n            points, width, height,\n            inRangeVisuals.color.getNormalizer(),\n            {\n                inRange: inRangeVisuals.color.getColorMapper(),\n                outOfRange: outOfRangeVisuals.color.getColorMapper()\n            },\n            isInRange\n        );\n        var img = new ZImage({\n            style: {\n                width: width,\n                height: height,\n                x: x,\n                y: y,\n                image: hmLayer.canvas\n            },\n            silent: true\n        });\n        this.group.add(img);\n    },\n\n    dispose: function () {}\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar PictorialBarSeries = BaseBarSeries.extend({\n\n    type: 'series.pictorialBar',\n\n    dependencies: ['grid'],\n\n    defaultOption: {\n        symbol: 'circle',     // Customized bar shape\n        symbolSize: null,     // Can be ['100%', '100%'], null means auto.\n        symbolRotate: null,\n\n        symbolPosition: null, // 'start' or 'end' or 'center', null means auto.\n        symbolOffset: null,\n        symbolMargin: null,   // start margin and end margin. Can be a number or a percent string.\n                                // Auto margin by defualt.\n        symbolRepeat: false,  // false/null/undefined, means no repeat.\n                                // Can be true, means auto calculate repeat times and cut by data.\n                                // Can be a number, specifies repeat times, and do not cut by data.\n                                // Can be 'fixed', means auto calculate repeat times but do not cut by data.\n        symbolRepeatDirection: 'end', // 'end' means from 'start' to 'end'.\n\n        symbolClip: false,\n        symbolBoundingData: null, // Can be 60 or -40 or [-40, 60]\n        symbolPatternSize: 400, // 400 * 400 px\n\n        barGap: '-100%',      // In most case, overlap is needed.\n\n        // z can be set in data item, which is z2 actually.\n\n        // Disable progressive\n        progressive: 0,\n        hoverAnimation: false // Open only when needed.\n    },\n\n    getInitialData: function (option) {\n        // Disable stack.\n        option.stack = null;\n        return PictorialBarSeries.superApply(this, 'getInitialData', arguments);\n    }\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar BAR_BORDER_WIDTH_QUERY$1 = ['itemStyle', 'borderWidth'];\n\n// index: +isHorizontal\nvar LAYOUT_ATTRS = [\n    {xy: 'x', wh: 'width', index: 0, posDesc: ['left', 'right']},\n    {xy: 'y', wh: 'height', index: 1, posDesc: ['top', 'bottom']}\n];\n\nvar pathForLineWidth = new Circle();\n\nvar BarView$1 = extendChartView({\n\n    type: 'pictorialBar',\n\n    render: function (seriesModel, ecModel, api) {\n        var group = this.group;\n        var data = seriesModel.getData();\n        var oldData = this._data;\n\n        var cartesian = seriesModel.coordinateSystem;\n        var baseAxis = cartesian.getBaseAxis();\n        var isHorizontal = !!baseAxis.isHorizontal();\n        var coordSysRect = cartesian.grid.getRect();\n\n        var opt = {\n            ecSize: {width: api.getWidth(), height: api.getHeight()},\n            seriesModel: seriesModel,\n            coordSys: cartesian,\n            coordSysExtent: [\n                [coordSysRect.x, coordSysRect.x + coordSysRect.width],\n                [coordSysRect.y, coordSysRect.y + coordSysRect.height]\n            ],\n            isHorizontal: isHorizontal,\n            valueDim: LAYOUT_ATTRS[+isHorizontal],\n            categoryDim: LAYOUT_ATTRS[1 - isHorizontal]\n        };\n\n        data.diff(oldData)\n            .add(function (dataIndex) {\n                if (!data.hasValue(dataIndex)) {\n                    return;\n                }\n\n                var itemModel = getItemModel(data, dataIndex);\n                var symbolMeta = getSymbolMeta(data, dataIndex, itemModel, opt);\n\n                var bar = createBar(data, opt, symbolMeta);\n\n                data.setItemGraphicEl(dataIndex, bar);\n                group.add(bar);\n\n                updateCommon$1(bar, opt, symbolMeta);\n            })\n            .update(function (newIndex, oldIndex) {\n                var bar = oldData.getItemGraphicEl(oldIndex);\n\n                if (!data.hasValue(newIndex)) {\n                    group.remove(bar);\n                    return;\n                }\n\n                var itemModel = getItemModel(data, newIndex);\n                var symbolMeta = getSymbolMeta(data, newIndex, itemModel, opt);\n\n                var pictorialShapeStr = getShapeStr(data, symbolMeta);\n                if (bar && pictorialShapeStr !== bar.__pictorialShapeStr) {\n                    group.remove(bar);\n                    data.setItemGraphicEl(newIndex, null);\n                    bar = null;\n                }\n\n                if (bar) {\n                    updateBar(bar, opt, symbolMeta);\n                }\n                else {\n                    bar = createBar(data, opt, symbolMeta, true);\n                }\n\n                data.setItemGraphicEl(newIndex, bar);\n                bar.__pictorialSymbolMeta = symbolMeta;\n                // Add back\n                group.add(bar);\n\n                updateCommon$1(bar, opt, symbolMeta);\n            })\n            .remove(function (dataIndex) {\n                var bar = oldData.getItemGraphicEl(dataIndex);\n                bar && removeBar(oldData, dataIndex, bar.__pictorialSymbolMeta.animationModel, bar);\n            })\n            .execute();\n\n        this._data = data;\n\n        return this.group;\n    },\n\n    dispose: noop,\n\n    remove: function (ecModel, api) {\n        var group = this.group;\n        var data = this._data;\n        if (ecModel.get('animation')) {\n            if (data) {\n                data.eachItemGraphicEl(function (bar) {\n                    removeBar(data, bar.dataIndex, ecModel, bar);\n                });\n            }\n        }\n        else {\n            group.removeAll();\n        }\n    }\n});\n\n\n// Set or calculate default value about symbol, and calculate layout info.\nfunction getSymbolMeta(data, dataIndex, itemModel, opt) {\n    var layout = data.getItemLayout(dataIndex);\n    var symbolRepeat = itemModel.get('symbolRepeat');\n    var symbolClip = itemModel.get('symbolClip');\n    var symbolPosition = itemModel.get('symbolPosition') || 'start';\n    var symbolRotate = itemModel.get('symbolRotate');\n    var rotation = (symbolRotate || 0) * Math.PI / 180 || 0;\n    var symbolPatternSize = itemModel.get('symbolPatternSize') || 2;\n    var isAnimationEnabled = itemModel.isAnimationEnabled();\n\n    var symbolMeta = {\n        dataIndex: dataIndex,\n        layout: layout,\n        itemModel: itemModel,\n        symbolType: data.getItemVisual(dataIndex, 'symbol') || 'circle',\n        color: data.getItemVisual(dataIndex, 'color'),\n        symbolClip: symbolClip,\n        symbolRepeat: symbolRepeat,\n        symbolRepeatDirection: itemModel.get('symbolRepeatDirection'),\n        symbolPatternSize: symbolPatternSize,\n        rotation: rotation,\n        animationModel: isAnimationEnabled ? itemModel : null,\n        hoverAnimation: isAnimationEnabled && itemModel.get('hoverAnimation'),\n        z2: itemModel.getShallow('z', true) || 0\n    };\n\n    prepareBarLength(itemModel, symbolRepeat, layout, opt, symbolMeta);\n\n    prepareSymbolSize(\n        data, dataIndex, layout, symbolRepeat, symbolClip, symbolMeta.boundingLength,\n        symbolMeta.pxSign, symbolPatternSize, opt, symbolMeta\n    );\n\n    prepareLineWidth(itemModel, symbolMeta.symbolScale, rotation, opt, symbolMeta);\n\n    var symbolSize = symbolMeta.symbolSize;\n    var symbolOffset = itemModel.get('symbolOffset');\n    if (isArray(symbolOffset)) {\n        symbolOffset = [\n            parsePercent$1(symbolOffset[0], symbolSize[0]),\n            parsePercent$1(symbolOffset[1], symbolSize[1])\n        ];\n    }\n\n    prepareLayoutInfo(\n        itemModel, symbolSize, layout, symbolRepeat, symbolClip, symbolOffset,\n        symbolPosition, symbolMeta.valueLineWidth, symbolMeta.boundingLength, symbolMeta.repeatCutLength,\n        opt, symbolMeta\n    );\n\n    return symbolMeta;\n}\n\n// bar length can be negative.\nfunction prepareBarLength(itemModel, symbolRepeat, layout, opt, output) {\n    var valueDim = opt.valueDim;\n    var symbolBoundingData = itemModel.get('symbolBoundingData');\n    var valueAxis = opt.coordSys.getOtherAxis(opt.coordSys.getBaseAxis());\n    var zeroPx = valueAxis.toGlobalCoord(valueAxis.dataToCoord(0));\n    var pxSignIdx = 1 - +(layout[valueDim.wh] <= 0);\n    var boundingLength;\n\n    if (isArray(symbolBoundingData)) {\n        var symbolBoundingExtent = [\n            convertToCoordOnAxis(valueAxis, symbolBoundingData[0]) - zeroPx,\n            convertToCoordOnAxis(valueAxis, symbolBoundingData[1]) - zeroPx\n        ];\n        symbolBoundingExtent[1] < symbolBoundingExtent[0] && (symbolBoundingExtent.reverse());\n        boundingLength = symbolBoundingExtent[pxSignIdx];\n    }\n    else if (symbolBoundingData != null) {\n        boundingLength = convertToCoordOnAxis(valueAxis, symbolBoundingData) - zeroPx;\n    }\n    else if (symbolRepeat) {\n        boundingLength = opt.coordSysExtent[valueDim.index][pxSignIdx] - zeroPx;\n    }\n    else {\n        boundingLength = layout[valueDim.wh];\n    }\n\n    output.boundingLength = boundingLength;\n\n    if (symbolRepeat) {\n        output.repeatCutLength = layout[valueDim.wh];\n    }\n\n    output.pxSign = boundingLength > 0 ? 1 : boundingLength < 0 ? -1 : 0;\n}\n\nfunction convertToCoordOnAxis(axis, value) {\n    return axis.toGlobalCoord(axis.dataToCoord(axis.scale.parse(value)));\n}\n\n// Support ['100%', '100%']\nfunction prepareSymbolSize(\n    data, dataIndex, layout, symbolRepeat, symbolClip, boundingLength,\n    pxSign, symbolPatternSize, opt, output\n) {\n    var valueDim = opt.valueDim;\n    var categoryDim = opt.categoryDim;\n    var categorySize = Math.abs(layout[categoryDim.wh]);\n\n    var symbolSize = data.getItemVisual(dataIndex, 'symbolSize');\n    if (isArray(symbolSize)) {\n        symbolSize = symbolSize.slice();\n    }\n    else {\n        if (symbolSize == null) {\n            symbolSize = '100%';\n        }\n        symbolSize = [symbolSize, symbolSize];\n    }\n\n    // Note: percentage symbolSize (like '100%') do not consider lineWidth, because it is\n    // to complicated to calculate real percent value if considering scaled lineWidth.\n    // So the actual size will bigger than layout size if lineWidth is bigger than zero,\n    // which can be tolerated in pictorial chart.\n\n    symbolSize[categoryDim.index] = parsePercent$1(\n        symbolSize[categoryDim.index],\n        categorySize\n    );\n    symbolSize[valueDim.index] = parsePercent$1(\n        symbolSize[valueDim.index],\n        symbolRepeat ? categorySize : Math.abs(boundingLength)\n    );\n\n    output.symbolSize = symbolSize;\n\n    // If x or y is less than zero, show reversed shape.\n    var symbolScale = output.symbolScale = [\n        symbolSize[0] / symbolPatternSize,\n        symbolSize[1] / symbolPatternSize\n    ];\n    // Follow convention, 'right' and 'top' is the normal scale.\n    symbolScale[valueDim.index] *= (opt.isHorizontal ? -1 : 1) * pxSign;\n}\n\nfunction prepareLineWidth(itemModel, symbolScale, rotation, opt, output) {\n    // In symbols are drawn with scale, so do not need to care about the case that width\n    // or height are too small. But symbol use strokeNoScale, where acture lineWidth should\n    // be calculated.\n    var valueLineWidth = itemModel.get(BAR_BORDER_WIDTH_QUERY$1) || 0;\n\n    if (valueLineWidth) {\n        pathForLineWidth.attr({\n            scale: symbolScale.slice(),\n            rotation: rotation\n        });\n        pathForLineWidth.updateTransform();\n        valueLineWidth /= pathForLineWidth.getLineScale();\n        valueLineWidth *= symbolScale[opt.valueDim.index];\n    }\n\n    output.valueLineWidth = valueLineWidth;\n}\n\nfunction prepareLayoutInfo(\n    itemModel, symbolSize, layout, symbolRepeat, symbolClip, symbolOffset,\n    symbolPosition, valueLineWidth, boundingLength, repeatCutLength, opt, output\n) {\n    var categoryDim = opt.categoryDim;\n    var valueDim = opt.valueDim;\n    var pxSign = output.pxSign;\n\n    var unitLength = Math.max(symbolSize[valueDim.index] + valueLineWidth, 0);\n    var pathLen = unitLength;\n\n    // Note: rotation will not effect the layout of symbols, because user may\n    // want symbols to rotate on its center, which should not be translated\n    // when rotating.\n\n    if (symbolRepeat) {\n        var absBoundingLength = Math.abs(boundingLength);\n\n        var symbolMargin = retrieve(itemModel.get('symbolMargin'), '15%') + '';\n        var hasEndGap = false;\n        if (symbolMargin.lastIndexOf('!') === symbolMargin.length - 1) {\n            hasEndGap = true;\n            symbolMargin = symbolMargin.slice(0, symbolMargin.length - 1);\n        }\n        symbolMargin = parsePercent$1(symbolMargin, symbolSize[valueDim.index]);\n\n        var uLenWithMargin = Math.max(unitLength + symbolMargin * 2, 0);\n\n        // When symbol margin is less than 0, margin at both ends will be subtracted\n        // to ensure that all of the symbols will not be overflow the given area.\n        var endFix = hasEndGap ? 0 : symbolMargin * 2;\n\n        // Both final repeatTimes and final symbolMargin area calculated based on\n        // boundingLength.\n        var repeatSpecified = isNumeric(symbolRepeat);\n        var repeatTimes = repeatSpecified\n            ? symbolRepeat\n            : toIntTimes((absBoundingLength + endFix) / uLenWithMargin);\n\n        // Adjust calculate margin, to ensure each symbol is displayed\n        // entirely in the given layout area.\n        var mDiff = absBoundingLength - repeatTimes * unitLength;\n        symbolMargin = mDiff / 2 / (hasEndGap ? repeatTimes : repeatTimes - 1);\n        uLenWithMargin = unitLength + symbolMargin * 2;\n        endFix = hasEndGap ? 0 : symbolMargin * 2;\n\n        // Update repeatTimes when not all symbol will be shown.\n        if (!repeatSpecified && symbolRepeat !== 'fixed') {\n            repeatTimes = repeatCutLength\n                ? toIntTimes((Math.abs(repeatCutLength) + endFix) / uLenWithMargin)\n                : 0;\n        }\n\n        pathLen = repeatTimes * uLenWithMargin - endFix;\n        output.repeatTimes = repeatTimes;\n        output.symbolMargin = symbolMargin;\n    }\n\n    var sizeFix = pxSign * (pathLen / 2);\n    var pathPosition = output.pathPosition = [];\n    pathPosition[categoryDim.index] = layout[categoryDim.wh] / 2;\n    pathPosition[valueDim.index] = symbolPosition === 'start'\n        ? sizeFix\n        : symbolPosition === 'end'\n        ? boundingLength - sizeFix\n        : boundingLength / 2; // 'center'\n    if (symbolOffset) {\n        pathPosition[0] += symbolOffset[0];\n        pathPosition[1] += symbolOffset[1];\n    }\n\n    var bundlePosition = output.bundlePosition = [];\n    bundlePosition[categoryDim.index] = layout[categoryDim.xy];\n    bundlePosition[valueDim.index] = layout[valueDim.xy];\n\n    var barRectShape = output.barRectShape = extend({}, layout);\n    barRectShape[valueDim.wh] = pxSign * Math.max(\n        Math.abs(layout[valueDim.wh]), Math.abs(pathPosition[valueDim.index] + sizeFix)\n    );\n    barRectShape[categoryDim.wh] = layout[categoryDim.wh];\n\n    var clipShape = output.clipShape = {};\n    // Consider that symbol may be overflow layout rect.\n    clipShape[categoryDim.xy] = -layout[categoryDim.xy];\n    clipShape[categoryDim.wh] = opt.ecSize[categoryDim.wh];\n    clipShape[valueDim.xy] = 0;\n    clipShape[valueDim.wh] = layout[valueDim.wh];\n}\n\nfunction createPath(symbolMeta) {\n    var symbolPatternSize = symbolMeta.symbolPatternSize;\n    var path = createSymbol(\n        // Consider texture img, make a big size.\n        symbolMeta.symbolType,\n        -symbolPatternSize / 2,\n        -symbolPatternSize / 2,\n        symbolPatternSize,\n        symbolPatternSize,\n        symbolMeta.color\n    );\n    path.attr({\n        culling: true\n    });\n    path.type !== 'image' && path.setStyle({\n        strokeNoScale: true\n    });\n\n    return path;\n}\n\nfunction createOrUpdateRepeatSymbols(bar, opt, symbolMeta, isUpdate) {\n    var bundle = bar.__pictorialBundle;\n    var symbolSize = symbolMeta.symbolSize;\n    var valueLineWidth = symbolMeta.valueLineWidth;\n    var pathPosition = symbolMeta.pathPosition;\n    var valueDim = opt.valueDim;\n    var repeatTimes = symbolMeta.repeatTimes || 0;\n\n    var index = 0;\n    var unit = symbolSize[opt.valueDim.index] + valueLineWidth + symbolMeta.symbolMargin * 2;\n\n    eachPath(bar, function (path) {\n        path.__pictorialAnimationIndex = index;\n        path.__pictorialRepeatTimes = repeatTimes;\n        if (index < repeatTimes) {\n            updateAttr(path, null, makeTarget(index), symbolMeta, isUpdate);\n        }\n        else {\n            updateAttr(path, null, {scale: [0, 0]}, symbolMeta, isUpdate, function () {\n                bundle.remove(path);\n            });\n        }\n\n        updateHoverAnimation(path, symbolMeta);\n\n        index++;\n    });\n\n    for (; index < repeatTimes; index++) {\n        var path = createPath(symbolMeta);\n        path.__pictorialAnimationIndex = index;\n        path.__pictorialRepeatTimes = repeatTimes;\n        bundle.add(path);\n\n        var target = makeTarget(index);\n\n        updateAttr(\n            path,\n            {\n                position: target.position,\n                scale: [0, 0]\n            },\n            {\n                scale: target.scale,\n                rotation: target.rotation\n            },\n            symbolMeta,\n            isUpdate\n        );\n\n        // FIXME\n        // If all emphasis/normal through action.\n        path\n            .on('mouseover', onMouseOver)\n            .on('mouseout', onMouseOut);\n\n        updateHoverAnimation(path, symbolMeta);\n    }\n\n    function makeTarget(index) {\n        var position = pathPosition.slice();\n        // (start && pxSign > 0) || (end && pxSign < 0): i = repeatTimes - index\n        // Otherwise: i = index;\n        var pxSign = symbolMeta.pxSign;\n        var i = index;\n        if (symbolMeta.symbolRepeatDirection === 'start' ? pxSign > 0 : pxSign < 0) {\n            i = repeatTimes - 1 - index;\n        }\n        position[valueDim.index] = unit * (i - repeatTimes / 2 + 0.5) + pathPosition[valueDim.index];\n\n        return {\n            position: position,\n            scale: symbolMeta.symbolScale.slice(),\n            rotation: symbolMeta.rotation\n        };\n    }\n\n    function onMouseOver() {\n        eachPath(bar, function (path) {\n            path.trigger('emphasis');\n        });\n    }\n\n    function onMouseOut() {\n        eachPath(bar, function (path) {\n            path.trigger('normal');\n        });\n    }\n}\n\nfunction createOrUpdateSingleSymbol(bar, opt, symbolMeta, isUpdate) {\n    var bundle = bar.__pictorialBundle;\n    var mainPath = bar.__pictorialMainPath;\n\n    if (!mainPath) {\n        mainPath = bar.__pictorialMainPath = createPath(symbolMeta);\n        bundle.add(mainPath);\n\n        updateAttr(\n            mainPath,\n            {\n                position: symbolMeta.pathPosition.slice(),\n                scale: [0, 0],\n                rotation: symbolMeta.rotation\n            },\n            {\n                scale: symbolMeta.symbolScale.slice()\n            },\n            symbolMeta,\n            isUpdate\n        );\n\n        mainPath\n            .on('mouseover', onMouseOver)\n            .on('mouseout', onMouseOut);\n    }\n    else {\n        updateAttr(\n            mainPath,\n            null,\n            {\n                position: symbolMeta.pathPosition.slice(),\n                scale: symbolMeta.symbolScale.slice(),\n                rotation: symbolMeta.rotation\n            },\n            symbolMeta,\n            isUpdate\n        );\n    }\n\n    updateHoverAnimation(mainPath, symbolMeta);\n\n    function onMouseOver() {\n        this.trigger('emphasis');\n    }\n\n    function onMouseOut() {\n        this.trigger('normal');\n    }\n}\n\n// bar rect is used for label.\nfunction createOrUpdateBarRect(bar, symbolMeta, isUpdate) {\n    var rectShape = extend({}, symbolMeta.barRectShape);\n\n    var barRect = bar.__pictorialBarRect;\n    if (!barRect) {\n        barRect = bar.__pictorialBarRect = new Rect({\n            z2: 2,\n            shape: rectShape,\n            silent: true,\n            style: {\n                stroke: 'transparent',\n                fill: 'transparent',\n                lineWidth: 0\n            }\n        });\n\n        bar.add(barRect);\n    }\n    else {\n        updateAttr(barRect, null, {shape: rectShape}, symbolMeta, isUpdate);\n    }\n}\n\nfunction createOrUpdateClip(bar, opt, symbolMeta, isUpdate) {\n    // If not clip, symbol will be remove and rebuilt.\n    if (symbolMeta.symbolClip) {\n        var clipPath = bar.__pictorialClipPath;\n        var clipShape = extend({}, symbolMeta.clipShape);\n        var valueDim = opt.valueDim;\n        var animationModel = symbolMeta.animationModel;\n        var dataIndex = symbolMeta.dataIndex;\n\n        if (clipPath) {\n            updateProps(\n                clipPath, {shape: clipShape}, animationModel, dataIndex\n            );\n        }\n        else {\n            clipShape[valueDim.wh] = 0;\n            clipPath = new Rect({shape: clipShape});\n            bar.__pictorialBundle.setClipPath(clipPath);\n            bar.__pictorialClipPath = clipPath;\n\n            var target = {};\n            target[valueDim.wh] = symbolMeta.clipShape[valueDim.wh];\n\n            graphic[isUpdate ? 'updateProps' : 'initProps'](\n                clipPath, {shape: target}, animationModel, dataIndex\n            );\n        }\n    }\n}\n\nfunction getItemModel(data, dataIndex) {\n    var itemModel = data.getItemModel(dataIndex);\n    itemModel.getAnimationDelayParams = getAnimationDelayParams;\n    itemModel.isAnimationEnabled = isAnimationEnabled;\n    return itemModel;\n}\n\nfunction getAnimationDelayParams(path) {\n    // The order is the same as the z-order, see `symbolRepeatDiretion`.\n    return {\n        index: path.__pictorialAnimationIndex,\n        count: path.__pictorialRepeatTimes\n    };\n}\n\nfunction isAnimationEnabled() {\n    // `animation` prop can be set on itemModel in pictorial bar chart.\n    return this.parentModel.isAnimationEnabled() && !!this.getShallow('animation');\n}\n\nfunction updateHoverAnimation(path, symbolMeta) {\n    path.off('emphasis').off('normal');\n\n    var scale = symbolMeta.symbolScale.slice();\n\n    symbolMeta.hoverAnimation && path\n        .on('emphasis', function () {\n            this.animateTo({\n                scale: [scale[0] * 1.1, scale[1] * 1.1]\n            }, 400, 'elasticOut');\n        })\n        .on('normal', function () {\n            this.animateTo({\n                scale: scale.slice()\n            }, 400, 'elasticOut');\n        });\n}\n\nfunction createBar(data, opt, symbolMeta, isUpdate) {\n    // bar is the main element for each data.\n    var bar = new Group();\n    // bundle is used for location and clip.\n    var bundle = new Group();\n    bar.add(bundle);\n    bar.__pictorialBundle = bundle;\n    bundle.attr('position', symbolMeta.bundlePosition.slice());\n\n    if (symbolMeta.symbolRepeat) {\n        createOrUpdateRepeatSymbols(bar, opt, symbolMeta);\n    }\n    else {\n        createOrUpdateSingleSymbol(bar, opt, symbolMeta);\n    }\n\n    createOrUpdateBarRect(bar, symbolMeta, isUpdate);\n\n    createOrUpdateClip(bar, opt, symbolMeta, isUpdate);\n\n    bar.__pictorialShapeStr = getShapeStr(data, symbolMeta);\n    bar.__pictorialSymbolMeta = symbolMeta;\n\n    return bar;\n}\n\nfunction updateBar(bar, opt, symbolMeta) {\n    var animationModel = symbolMeta.animationModel;\n    var dataIndex = symbolMeta.dataIndex;\n    var bundle = bar.__pictorialBundle;\n\n    updateProps(\n        bundle, {position: symbolMeta.bundlePosition.slice()}, animationModel, dataIndex\n    );\n\n    if (symbolMeta.symbolRepeat) {\n        createOrUpdateRepeatSymbols(bar, opt, symbolMeta, true);\n    }\n    else {\n        createOrUpdateSingleSymbol(bar, opt, symbolMeta, true);\n    }\n\n    createOrUpdateBarRect(bar, symbolMeta, true);\n\n    createOrUpdateClip(bar, opt, symbolMeta, true);\n}\n\nfunction removeBar(data, dataIndex, animationModel, bar) {\n    // Not show text when animating\n    var labelRect = bar.__pictorialBarRect;\n    labelRect && (labelRect.style.text = null);\n\n    var pathes = [];\n    eachPath(bar, function (path) {\n        pathes.push(path);\n    });\n    bar.__pictorialMainPath && pathes.push(bar.__pictorialMainPath);\n\n    // I do not find proper remove animation for clip yet.\n    bar.__pictorialClipPath && (animationModel = null);\n\n    each$1(pathes, function (path) {\n        updateProps(\n            path, {scale: [0, 0]}, animationModel, dataIndex,\n            function () {\n                bar.parent && bar.parent.remove(bar);\n            }\n        );\n    });\n\n    data.setItemGraphicEl(dataIndex, null);\n}\n\nfunction getShapeStr(data, symbolMeta) {\n    return [\n        data.getItemVisual(symbolMeta.dataIndex, 'symbol') || 'none',\n        !!symbolMeta.symbolRepeat,\n        !!symbolMeta.symbolClip\n    ].join(':');\n}\n\nfunction eachPath(bar, cb, context) {\n    // Do not use Group#eachChild, because it do not support remove.\n    each$1(bar.__pictorialBundle.children(), function (el) {\n        el !== bar.__pictorialBarRect && cb.call(context, el);\n    });\n}\n\nfunction updateAttr(el, immediateAttrs, animationAttrs, symbolMeta, isUpdate, cb) {\n    immediateAttrs && el.attr(immediateAttrs);\n    // when symbolCip used, only clip path has init animation, otherwise it would be weird effect.\n    if (symbolMeta.symbolClip && !isUpdate) {\n        animationAttrs && el.attr(animationAttrs);\n    }\n    else {\n        animationAttrs && graphic[isUpdate ? 'updateProps' : 'initProps'](\n            el, animationAttrs, symbolMeta.animationModel, symbolMeta.dataIndex, cb\n        );\n    }\n}\n\nfunction updateCommon$1(bar, opt, symbolMeta) {\n    var color = symbolMeta.color;\n    var dataIndex = symbolMeta.dataIndex;\n    var itemModel = symbolMeta.itemModel;\n    // Color must be excluded.\n    // Because symbol provide setColor individually to set fill and stroke\n    var normalStyle = itemModel.getModel('itemStyle').getItemStyle(['color']);\n    var hoverStyle = itemModel.getModel('emphasis.itemStyle').getItemStyle();\n    var cursorStyle = itemModel.getShallow('cursor');\n\n    eachPath(bar, function (path) {\n        // PENDING setColor should be before setStyle!!!\n        path.setColor(color);\n        path.setStyle(defaults(\n            {\n                fill: color,\n                opacity: symbolMeta.opacity\n            },\n            normalStyle\n        ));\n        setHoverStyle(path, hoverStyle);\n\n        cursorStyle && (path.cursor = cursorStyle);\n        path.z2 = symbolMeta.z2;\n    });\n\n    var barRectHoverStyle = {};\n    var barPositionOutside = opt.valueDim.posDesc[+(symbolMeta.boundingLength > 0)];\n    var barRect = bar.__pictorialBarRect;\n\n    setLabel(\n        barRect.style, barRectHoverStyle, itemModel,\n        color, opt.seriesModel, dataIndex, barPositionOutside\n    );\n\n    setHoverStyle(barRect, barRectHoverStyle);\n}\n\nfunction toIntTimes(times) {\n    var roundedTimes = Math.round(times);\n    // Escapse accurate error\n    return Math.abs(times - roundedTimes) < 1e-4\n        ? roundedTimes\n        : Math.ceil(times);\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n// In case developer forget to include grid component\nregisterLayout(curry(\n    layout, 'pictorialBar'\n));\nregisterVisual(visualSymbol('pictorialBar', 'roundRect'));\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * @constructor  module:echarts/coord/single/SingleAxis\n * @extends {module:echarts/coord/Axis}\n * @param {string} dim\n * @param {*} scale\n * @param {Array.<number>} coordExtent\n * @param {string} axisType\n * @param {string} position\n */\nvar SingleAxis = function (dim, scale, coordExtent, axisType, position) {\n\n    Axis.call(this, dim, scale, coordExtent);\n\n    /**\n     * Axis type\n     * - 'category'\n     * - 'value'\n     * - 'time'\n     * - 'log'\n     * @type {string}\n     */\n    this.type = axisType || 'value';\n\n    /**\n     * Axis position\n     *  - 'top'\n     *  - 'bottom'\n     *  - 'left'\n     *  - 'right'\n     *  @type {string}\n     */\n    this.position = position || 'bottom';\n\n    /**\n     * Axis orient\n     *  - 'horizontal'\n     *  - 'vertical'\n     * @type {[type]}\n     */\n    this.orient = null;\n\n};\n\nSingleAxis.prototype = {\n\n    constructor: SingleAxis,\n\n    /**\n     * Axis model\n     * @type {module:echarts/coord/single/AxisModel}\n     */\n    model: null,\n\n    /**\n     * Judge the orient of the axis.\n     * @return {boolean}\n     */\n    isHorizontal: function () {\n        var position = this.position;\n        return position === 'top' || position === 'bottom';\n\n    },\n\n    /**\n     * @override\n     */\n    pointToData: function (point, clamp) {\n        return this.coordinateSystem.pointToData(point, clamp)[0];\n    },\n\n    /**\n     * Convert the local coord(processed by dataToCoord())\n     * to global coord(concrete pixel coord).\n     * designated by module:echarts/coord/single/Single.\n     * @type {Function}\n     */\n    toGlobalCoord: null,\n\n    /**\n     * Convert the global coord to local coord.\n     * designated by module:echarts/coord/single/Single.\n     * @type {Function}\n     */\n    toLocalCoord: null\n\n};\n\ninherits(SingleAxis, Axis);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Single coordinates system.\n */\n\n/**\n * Create a single coordinates system.\n *\n * @param {module:echarts/coord/single/AxisModel} axisModel\n * @param {module:echarts/model/Global} ecModel\n * @param {module:echarts/ExtensionAPI} api\n */\nfunction Single(axisModel, ecModel, api) {\n\n    /**\n     * @type {string}\n     * @readOnly\n     */\n    this.dimension = 'single';\n\n    /**\n     * Add it just for draw tooltip.\n     *\n     * @type {Array.<string>}\n     * @readOnly\n     */\n    this.dimensions = ['single'];\n\n    /**\n     * @private\n     * @type {module:echarts/coord/single/SingleAxis}.\n     */\n    this._axis = null;\n\n    /**\n     * @private\n     * @type {module:zrender/core/BoundingRect}\n     */\n    this._rect;\n\n    this._init(axisModel, ecModel, api);\n\n    /**\n     * @type {module:echarts/coord/single/AxisModel}\n     */\n    this.model = axisModel;\n}\n\nSingle.prototype = {\n\n    type: 'singleAxis',\n\n    axisPointerEnabled: true,\n\n    constructor: Single,\n\n    /**\n     * Initialize single coordinate system.\n     *\n     * @param  {module:echarts/coord/single/AxisModel} axisModel\n     * @param  {module:echarts/model/Global} ecModel\n     * @param  {module:echarts/ExtensionAPI} api\n     * @private\n     */\n    _init: function (axisModel, ecModel, api) {\n\n        var dim = this.dimension;\n\n        var axis = new SingleAxis(\n            dim,\n            createScaleByModel(axisModel),\n            [0, 0],\n            axisModel.get('type'),\n            axisModel.get('position')\n        );\n\n        var isCategory = axis.type === 'category';\n        axis.onBand = isCategory && axisModel.get('boundaryGap');\n        axis.inverse = axisModel.get('inverse');\n        axis.orient = axisModel.get('orient');\n\n        axisModel.axis = axis;\n        axis.model = axisModel;\n        axis.coordinateSystem = this;\n        this._axis = axis;\n    },\n\n    /**\n     * Update axis scale after data processed\n     * @param  {module:echarts/model/Global} ecModel\n     * @param  {module:echarts/ExtensionAPI} api\n     */\n    update: function (ecModel, api) {\n        ecModel.eachSeries(function (seriesModel) {\n            if (seriesModel.coordinateSystem === this) {\n                var data = seriesModel.getData();\n                each$1(data.mapDimension(this.dimension, true), function (dim) {\n                    this._axis.scale.unionExtentFromData(data, dim);\n                }, this);\n                niceScaleExtent(this._axis.scale, this._axis.model);\n            }\n        }, this);\n    },\n\n    /**\n     * Resize the single coordinate system.\n     *\n     * @param  {module:echarts/coord/single/AxisModel} axisModel\n     * @param  {module:echarts/ExtensionAPI} api\n     */\n    resize: function (axisModel, api) {\n        this._rect = getLayoutRect(\n            {\n                left: axisModel.get('left'),\n                top: axisModel.get('top'),\n                right: axisModel.get('right'),\n                bottom: axisModel.get('bottom'),\n                width: axisModel.get('width'),\n                height: axisModel.get('height')\n            },\n            {\n                width: api.getWidth(),\n                height: api.getHeight()\n            }\n        );\n\n        this._adjustAxis();\n    },\n\n    /**\n     * @return {module:zrender/core/BoundingRect}\n     */\n    getRect: function () {\n        return this._rect;\n    },\n\n    /**\n     * @private\n     */\n    _adjustAxis: function () {\n\n        var rect = this._rect;\n        var axis = this._axis;\n\n        var isHorizontal = axis.isHorizontal();\n        var extent = isHorizontal ? [0, rect.width] : [0, rect.height];\n        var idx = axis.reverse ? 1 : 0;\n\n        axis.setExtent(extent[idx], extent[1 - idx]);\n\n        this._updateAxisTransform(axis, isHorizontal ? rect.x : rect.y);\n\n    },\n\n    /**\n     * @param  {module:echarts/coord/single/SingleAxis} axis\n     * @param  {number} coordBase\n     */\n    _updateAxisTransform: function (axis, coordBase) {\n\n        var axisExtent = axis.getExtent();\n        var extentSum = axisExtent[0] + axisExtent[1];\n        var isHorizontal = axis.isHorizontal();\n\n        axis.toGlobalCoord = isHorizontal\n            ? function (coord) {\n                return coord + coordBase;\n            }\n            : function (coord) {\n                return extentSum - coord + coordBase;\n            };\n\n        axis.toLocalCoord = isHorizontal\n            ? function (coord) {\n                return coord - coordBase;\n            }\n            : function (coord) {\n                return extentSum - coord + coordBase;\n            };\n    },\n\n    /**\n     * Get axis.\n     *\n     * @return {module:echarts/coord/single/SingleAxis}\n     */\n    getAxis: function () {\n        return this._axis;\n    },\n\n    /**\n     * Get axis, add it just for draw tooltip.\n     *\n     * @return {[type]} [description]\n     */\n    getBaseAxis: function () {\n        return this._axis;\n    },\n\n    /**\n     * @return {Array.<module:echarts/coord/Axis>}\n     */\n    getAxes: function () {\n        return [this._axis];\n    },\n\n    /**\n     * @return {Object} {baseAxes: [], otherAxes: []}\n     */\n    getTooltipAxes: function () {\n        return {baseAxes: [this.getAxis()]};\n    },\n\n    /**\n     * If contain point.\n     *\n     * @param  {Array.<number>} point\n     * @return {boolean}\n     */\n    containPoint: function (point) {\n        var rect = this.getRect();\n        var axis = this.getAxis();\n        var orient = axis.orient;\n        if (orient === 'horizontal') {\n            return axis.contain(axis.toLocalCoord(point[0]))\n            && (point[1] >= rect.y && point[1] <= (rect.y + rect.height));\n        }\n        else {\n            return axis.contain(axis.toLocalCoord(point[1]))\n            && (point[0] >= rect.y && point[0] <= (rect.y + rect.height));\n        }\n    },\n\n    /**\n     * @param {Array.<number>} point\n     * @return {Array.<number>}\n     */\n    pointToData: function (point) {\n        var axis = this.getAxis();\n        return [axis.coordToData(axis.toLocalCoord(\n            point[axis.orient === 'horizontal' ? 0 : 1]\n        ))];\n    },\n\n    /**\n     * Convert the series data to concrete point.\n     *\n     * @param  {number|Array.<number>} val\n     * @return {Array.<number>}\n     */\n    dataToPoint: function (val) {\n        var axis = this.getAxis();\n        var rect = this.getRect();\n        var pt = [];\n        var idx = axis.orient === 'horizontal' ? 0 : 1;\n\n        if (val instanceof Array) {\n            val = val[0];\n        }\n\n        pt[idx] = axis.toGlobalCoord(axis.dataToCoord(+val));\n        pt[1 - idx] = idx === 0 ? (rect.y + rect.height / 2) : (rect.x + rect.width / 2);\n        return pt;\n    }\n\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Single coordinate system creator.\n */\n\n/**\n * Create single coordinate system and inject it into seriesModel.\n *\n * @param {module:echarts/model/Global} ecModel\n * @param {module:echarts/ExtensionAPI} api\n * @return {Array.<module:echarts/coord/single/Single>}\n */\nfunction create$3(ecModel, api) {\n    var singles = [];\n\n    ecModel.eachComponent('singleAxis', function (axisModel, idx) {\n\n        var single = new Single(axisModel, ecModel, api);\n        single.name = 'single_' + idx;\n        single.resize(axisModel, api);\n        axisModel.coordinateSystem = single;\n        singles.push(single);\n\n    });\n\n    ecModel.eachSeries(function (seriesModel) {\n        if (seriesModel.get('coordinateSystem') === 'singleAxis') {\n            var singleAxisModel = ecModel.queryComponents({\n                mainType: 'singleAxis',\n                index: seriesModel.get('singleAxisIndex'),\n                id: seriesModel.get('singleAxisId')\n            })[0];\n            seriesModel.coordinateSystem = singleAxisModel && singleAxisModel.coordinateSystem;\n        }\n    });\n\n    return singles;\n}\n\nCoordinateSystemManager.register('single', {\n    create: create$3,\n    dimensions: Single.prototype.dimensions\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * @param {Object} opt {labelInside}\n * @return {Object} {\n *  position, rotation, labelDirection, labelOffset,\n *  tickDirection, labelRotate, z2\n * }\n */\nfunction layout$2(axisModel, opt) {\n    opt = opt || {};\n    var single = axisModel.coordinateSystem;\n    var axis = axisModel.axis;\n    var layout = {};\n\n    var axisPosition = axis.position;\n    var orient = axis.orient;\n\n    var rect = single.getRect();\n    var rectBound = [rect.x, rect.x + rect.width, rect.y, rect.y + rect.height];\n\n    var positionMap = {\n        horizontal: {top: rectBound[2], bottom: rectBound[3]},\n        vertical: {left: rectBound[0], right: rectBound[1]}\n    };\n\n    layout.position = [\n        orient === 'vertical'\n            ? positionMap.vertical[axisPosition]\n            : rectBound[0],\n        orient === 'horizontal'\n            ? positionMap.horizontal[axisPosition]\n            : rectBound[3]\n    ];\n\n    var r = {horizontal: 0, vertical: 1};\n    layout.rotation = Math.PI / 2 * r[orient];\n\n    var directionMap = {top: -1, bottom: 1, right: 1, left: -1};\n\n    layout.labelDirection = layout.tickDirection\n        = layout.nameDirection\n        = directionMap[axisPosition];\n\n    if (axisModel.get('axisTick.inside')) {\n        layout.tickDirection = -layout.tickDirection;\n    }\n\n    if (retrieve(opt.labelInside, axisModel.get('axisLabel.inside'))) {\n        layout.labelDirection = -layout.labelDirection;\n    }\n\n    var labelRotation = opt.rotate;\n    labelRotation == null && (labelRotation = axisModel.get('axisLabel.rotate'));\n    layout.labelRotation = axisPosition === 'top' ? -labelRotation : labelRotation;\n\n    layout.z2 = 1;\n\n    return layout;\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\nvar axisBuilderAttrs$2 = [\n    'axisLine', 'axisTickLabel', 'axisName'\n];\n\nvar selfBuilderAttr = 'splitLine';\n\nvar SingleAxisView = AxisView.extend({\n\n    type: 'singleAxis',\n\n    axisPointerClass: 'SingleAxisPointer',\n\n    render: function (axisModel, ecModel, api, payload) {\n\n        var group = this.group;\n\n        group.removeAll();\n\n        var layout = layout$2(axisModel);\n\n        var axisBuilder = new AxisBuilder(axisModel, layout);\n\n        each$1(axisBuilderAttrs$2, axisBuilder.add, axisBuilder);\n\n        group.add(axisBuilder.getGroup());\n\n        if (axisModel.get(selfBuilderAttr + '.show')) {\n            this['_' + selfBuilderAttr](axisModel);\n        }\n\n        SingleAxisView.superCall(this, 'render', axisModel, ecModel, api, payload);\n    },\n\n    _splitLine: function (axisModel) {\n        var axis = axisModel.axis;\n\n        if (axis.scale.isBlank()) {\n            return;\n        }\n\n        var splitLineModel = axisModel.getModel('splitLine');\n        var lineStyleModel = splitLineModel.getModel('lineStyle');\n        var lineWidth = lineStyleModel.get('width');\n        var lineColors = lineStyleModel.get('color');\n\n        lineColors = lineColors instanceof Array ? lineColors : [lineColors];\n\n        var gridRect = axisModel.coordinateSystem.getRect();\n        var isHorizontal = axis.isHorizontal();\n\n        var splitLines = [];\n        var lineCount = 0;\n\n        var ticksCoords = axis.getTicksCoords({\n            tickModel: splitLineModel\n        });\n\n        var p1 = [];\n        var p2 = [];\n\n        for (var i = 0; i < ticksCoords.length; ++i) {\n            var tickCoord = axis.toGlobalCoord(ticksCoords[i].coord);\n            if (isHorizontal) {\n                p1[0] = tickCoord;\n                p1[1] = gridRect.y;\n                p2[0] = tickCoord;\n                p2[1] = gridRect.y + gridRect.height;\n            }\n            else {\n                p1[0] = gridRect.x;\n                p1[1] = tickCoord;\n                p2[0] = gridRect.x + gridRect.width;\n                p2[1] = tickCoord;\n            }\n            var colorIndex = (lineCount++) % lineColors.length;\n            splitLines[colorIndex] = splitLines[colorIndex] || [];\n            splitLines[colorIndex].push(new Line({\n                subPixelOptimize: true,\n                shape: {\n                    x1: p1[0],\n                    y1: p1[1],\n                    x2: p2[0],\n                    y2: p2[1]\n                },\n                style: {\n                    lineWidth: lineWidth\n                },\n                silent: true\n            }));\n        }\n\n        for (var i = 0; i < splitLines.length; ++i) {\n            this.group.add(mergePath(splitLines[i], {\n                style: {\n                    stroke: lineColors[i % lineColors.length],\n                    lineDash: lineStyleModel.getLineDash(lineWidth),\n                    lineWidth: lineWidth\n                },\n                silent: true\n            }));\n        }\n    }\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar AxisModel$4 = ComponentModel.extend({\n\n    type: 'singleAxis',\n\n    layoutMode: 'box',\n\n    /**\n     * @type {module:echarts/coord/single/SingleAxis}\n     */\n    axis: null,\n\n    /**\n     * @type {module:echarts/coord/single/Single}\n     */\n    coordinateSystem: null,\n\n    /**\n     * @override\n     */\n    getCoordSysModel: function () {\n        return this;\n    }\n\n});\n\nvar defaultOption$2 = {\n\n    left: '5%',\n    top: '5%',\n    right: '5%',\n    bottom: '5%',\n\n    type: 'value',\n\n    position: 'bottom',\n\n    orient: 'horizontal',\n\n    axisLine: {\n        show: true,\n        lineStyle: {\n            width: 1,\n            type: 'solid'\n        }\n    },\n\n    // Single coordinate system and single axis is the,\n    // which is used as the parent tooltip model.\n    // same model, so we set default tooltip show as true.\n    tooltip: {\n        show: true\n    },\n\n    axisTick: {\n        show: true,\n        length: 6,\n        lineStyle: {\n            width: 1\n        }\n    },\n\n    axisLabel: {\n        show: true,\n        interval: 'auto'\n    },\n\n    splitLine: {\n        show: true,\n        lineStyle: {\n            type: 'dashed',\n            opacity: 0.2\n        }\n    }\n};\n\nfunction getAxisType$2(axisName, option) {\n    return option.type || (option.data ? 'category' : 'value');\n}\n\nmerge(AxisModel$4.prototype, axisModelCommonMixin);\n\naxisModelCreator('single', AxisModel$4, getAxisType$2, defaultOption$2);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * @param {Object} finder contains {seriesIndex, dataIndex, dataIndexInside}\n * @param {module:echarts/model/Global} ecModel\n * @return {Object} {point: [x, y], el: ...} point Will not be null.\n */\nvar findPointFromSeries = function (finder, ecModel) {\n    var point = [];\n    var seriesIndex = finder.seriesIndex;\n    var seriesModel;\n    if (seriesIndex == null || !(\n        seriesModel = ecModel.getSeriesByIndex(seriesIndex)\n    )) {\n        return {point: []};\n    }\n\n    var data = seriesModel.getData();\n    var dataIndex = queryDataIndex(data, finder);\n    if (dataIndex == null || dataIndex < 0 || isArray(dataIndex)) {\n        return {point: []};\n    }\n\n    var el = data.getItemGraphicEl(dataIndex);\n    var coordSys = seriesModel.coordinateSystem;\n\n    if (seriesModel.getTooltipPosition) {\n        point = seriesModel.getTooltipPosition(dataIndex) || [];\n    }\n    else if (coordSys && coordSys.dataToPoint) {\n        point = coordSys.dataToPoint(\n            data.getValues(\n                map(coordSys.dimensions, function (dim) {\n                    return data.mapDimension(dim);\n                }), dataIndex, true\n            )\n        ) || [];\n    }\n    else if (el) {\n        // Use graphic bounding rect\n        var rect = el.getBoundingRect().clone();\n        rect.applyTransform(el.transform);\n        point = [\n            rect.x + rect.width / 2,\n            rect.y + rect.height / 2\n        ];\n    }\n\n    return {point: point, el: el};\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar each$14 = each$1;\nvar curry$3 = curry;\nvar inner$9 = makeInner();\n\n/**\n * Basic logic: check all axis, if they do not demand show/highlight,\n * then hide/downplay them.\n *\n * @param {Object} coordSysAxesInfo\n * @param {Object} payload\n * @param {string} [payload.currTrigger] 'click' | 'mousemove' | 'leave'\n * @param {Array.<number>} [payload.x] x and y, which are mandatory, specify a point to\n *              trigger axisPointer and tooltip.\n * @param {Array.<number>} [payload.y] x and y, which are mandatory, specify a point to\n *              trigger axisPointer and tooltip.\n * @param {Object} [payload.seriesIndex] finder, optional, restrict target axes.\n * @param {Object} [payload.dataIndex] finder, restrict target axes.\n * @param {Object} [payload.axesInfo] finder, restrict target axes.\n *        [{\n *          axisDim: 'x'|'y'|'angle'|...,\n *          axisIndex: ...,\n *          value: ...\n *        }, ...]\n * @param {Function} [payload.dispatchAction]\n * @param {Object} [payload.tooltipOption]\n * @param {Object|Array.<number>|Function} [payload.position] Tooltip position,\n *        which can be specified in dispatchAction\n * @param {module:echarts/model/Global} ecModel\n * @param {module:echarts/ExtensionAPI} api\n * @return {Object} content of event obj for echarts.connect.\n */\nvar axisTrigger = function (payload, ecModel, api) {\n    var currTrigger = payload.currTrigger;\n    var point = [payload.x, payload.y];\n    var finder = payload;\n    var dispatchAction = payload.dispatchAction || bind(api.dispatchAction, api);\n    var coordSysAxesInfo = ecModel.getComponent('axisPointer').coordSysAxesInfo;\n\n    // Pending\n    // See #6121. But we are not able to reproduce it yet.\n    if (!coordSysAxesInfo) {\n        return;\n    }\n\n    if (illegalPoint(point)) {\n        // Used in the default behavior of `connection`: use the sample seriesIndex\n        // and dataIndex. And also used in the tooltipView trigger.\n        point = findPointFromSeries({\n            seriesIndex: finder.seriesIndex,\n            // Do not use dataIndexInside from other ec instance.\n            // FIXME: auto detect it?\n            dataIndex: finder.dataIndex\n        }, ecModel).point;\n    }\n    var isIllegalPoint = illegalPoint(point);\n\n    // Axis and value can be specified when calling dispatchAction({type: 'updateAxisPointer'}).\n    // Notice: In this case, it is difficult to get the `point` (which is necessary to show\n    // tooltip, so if point is not given, we just use the point found by sample seriesIndex\n    // and dataIndex.\n    var inputAxesInfo = finder.axesInfo;\n\n    var axesInfo = coordSysAxesInfo.axesInfo;\n    var shouldHide = currTrigger === 'leave' || illegalPoint(point);\n    var outputFinder = {};\n\n    var showValueMap = {};\n    var dataByCoordSys = {list: [], map: {}};\n    var updaters = {\n        showPointer: curry$3(showPointer, showValueMap),\n        showTooltip: curry$3(showTooltip, dataByCoordSys)\n    };\n\n    // Process for triggered axes.\n    each$14(coordSysAxesInfo.coordSysMap, function (coordSys, coordSysKey) {\n        // If a point given, it must be contained by the coordinate system.\n        var coordSysContainsPoint = isIllegalPoint || coordSys.containPoint(point);\n\n        each$14(coordSysAxesInfo.coordSysAxesInfo[coordSysKey], function (axisInfo, key) {\n            var axis = axisInfo.axis;\n            var inputAxisInfo = findInputAxisInfo(inputAxesInfo, axisInfo);\n            // If no inputAxesInfo, no axis is restricted.\n            if (!shouldHide && coordSysContainsPoint && (!inputAxesInfo || inputAxisInfo)) {\n                var val = inputAxisInfo && inputAxisInfo.value;\n                if (val == null && !isIllegalPoint) {\n                    val = axis.pointToData(point);\n                }\n                val != null && processOnAxis(axisInfo, val, updaters, false, outputFinder);\n            }\n        });\n    });\n\n    // Process for linked axes.\n    var linkTriggers = {};\n    each$14(axesInfo, function (tarAxisInfo, tarKey) {\n        var linkGroup = tarAxisInfo.linkGroup;\n\n        // If axis has been triggered in the previous stage, it should not be triggered by link.\n        if (linkGroup && !showValueMap[tarKey]) {\n            each$14(linkGroup.axesInfo, function (srcAxisInfo, srcKey) {\n                var srcValItem = showValueMap[srcKey];\n                // If srcValItem exist, source axis is triggered, so link to target axis.\n                if (srcAxisInfo !== tarAxisInfo && srcValItem) {\n                    var val = srcValItem.value;\n                    linkGroup.mapper && (val = tarAxisInfo.axis.scale.parse(linkGroup.mapper(\n                        val, makeMapperParam(srcAxisInfo), makeMapperParam(tarAxisInfo)\n                    )));\n                    linkTriggers[tarAxisInfo.key] = val;\n                }\n            });\n        }\n    });\n    each$14(linkTriggers, function (val, tarKey) {\n        processOnAxis(axesInfo[tarKey], val, updaters, true, outputFinder);\n    });\n\n    updateModelActually(showValueMap, axesInfo, outputFinder);\n    dispatchTooltipActually(dataByCoordSys, point, payload, dispatchAction);\n    dispatchHighDownActually(axesInfo, dispatchAction, api);\n\n    return outputFinder;\n};\n\nfunction processOnAxis(axisInfo, newValue, updaters, dontSnap, outputFinder) {\n    var axis = axisInfo.axis;\n\n    if (axis.scale.isBlank() || !axis.containData(newValue)) {\n        return;\n    }\n\n    if (!axisInfo.involveSeries) {\n        updaters.showPointer(axisInfo, newValue);\n        return;\n    }\n\n    // Heavy calculation. So put it after axis.containData checking.\n    var payloadInfo = buildPayloadsBySeries(newValue, axisInfo);\n    var payloadBatch = payloadInfo.payloadBatch;\n    var snapToValue = payloadInfo.snapToValue;\n\n    // Fill content of event obj for echarts.connect.\n    // By defualt use the first involved series data as a sample to connect.\n    if (payloadBatch[0] && outputFinder.seriesIndex == null) {\n        extend(outputFinder, payloadBatch[0]);\n    }\n\n    // If no linkSource input, this process is for collecting link\n    // target, where snap should not be accepted.\n    if (!dontSnap && axisInfo.snap) {\n        if (axis.containData(snapToValue) && snapToValue != null) {\n            newValue = snapToValue;\n        }\n    }\n\n    updaters.showPointer(axisInfo, newValue, payloadBatch, outputFinder);\n    // Tooltip should always be snapToValue, otherwise there will be\n    // incorrect \"axis value ~ series value\" mapping displayed in tooltip.\n    updaters.showTooltip(axisInfo, payloadInfo, snapToValue);\n}\n\nfunction buildPayloadsBySeries(value, axisInfo) {\n    var axis = axisInfo.axis;\n    var dim = axis.dim;\n    var snapToValue = value;\n    var payloadBatch = [];\n    var minDist = Number.MAX_VALUE;\n    var minDiff = -1;\n\n    each$14(axisInfo.seriesModels, function (series, idx) {\n        var dataDim = series.getData().mapDimension(dim, true);\n        var seriesNestestValue;\n        var dataIndices;\n\n        if (series.getAxisTooltipData) {\n            var result = series.getAxisTooltipData(dataDim, value, axis);\n            dataIndices = result.dataIndices;\n            seriesNestestValue = result.nestestValue;\n        }\n        else {\n            dataIndices = series.getData().indicesOfNearest(\n                dataDim[0],\n                value,\n                // Add a threshold to avoid find the wrong dataIndex\n                // when data length is not same.\n                // false,\n                axis.type === 'category' ? 0.5 : null\n            );\n            if (!dataIndices.length) {\n                return;\n            }\n            seriesNestestValue = series.getData().get(dataDim[0], dataIndices[0]);\n        }\n\n        if (seriesNestestValue == null || !isFinite(seriesNestestValue)) {\n            return;\n        }\n\n        var diff = value - seriesNestestValue;\n        var dist = Math.abs(diff);\n        // Consider category case\n        if (dist <= minDist) {\n            if (dist < minDist || (diff >= 0 && minDiff < 0)) {\n                minDist = dist;\n                minDiff = diff;\n                snapToValue = seriesNestestValue;\n                payloadBatch.length = 0;\n            }\n            each$14(dataIndices, function (dataIndex) {\n                payloadBatch.push({\n                    seriesIndex: series.seriesIndex,\n                    dataIndexInside: dataIndex,\n                    dataIndex: series.getData().getRawIndex(dataIndex)\n                });\n            });\n        }\n    });\n\n    return {\n        payloadBatch: payloadBatch,\n        snapToValue: snapToValue\n    };\n}\n\nfunction showPointer(showValueMap, axisInfo, value, payloadBatch) {\n    showValueMap[axisInfo.key] = {value: value, payloadBatch: payloadBatch};\n}\n\nfunction showTooltip(dataByCoordSys, axisInfo, payloadInfo, value) {\n    var payloadBatch = payloadInfo.payloadBatch;\n    var axis = axisInfo.axis;\n    var axisModel = axis.model;\n    var axisPointerModel = axisInfo.axisPointerModel;\n\n    // If no data, do not create anything in dataByCoordSys,\n    // whose length will be used to judge whether dispatch action.\n    if (!axisInfo.triggerTooltip || !payloadBatch.length) {\n        return;\n    }\n\n    var coordSysModel = axisInfo.coordSys.model;\n    var coordSysKey = makeKey(coordSysModel);\n    var coordSysItem = dataByCoordSys.map[coordSysKey];\n    if (!coordSysItem) {\n        coordSysItem = dataByCoordSys.map[coordSysKey] = {\n            coordSysId: coordSysModel.id,\n            coordSysIndex: coordSysModel.componentIndex,\n            coordSysType: coordSysModel.type,\n            coordSysMainType: coordSysModel.mainType,\n            dataByAxis: []\n        };\n        dataByCoordSys.list.push(coordSysItem);\n    }\n\n    coordSysItem.dataByAxis.push({\n        axisDim: axis.dim,\n        axisIndex: axisModel.componentIndex,\n        axisType: axisModel.type,\n        axisId: axisModel.id,\n        value: value,\n        // Caustion: viewHelper.getValueLabel is actually on \"view stage\", which\n        // depends that all models have been updated. So it should not be performed\n        // here. Considering axisPointerModel used here is volatile, which is hard\n        // to be retrieve in TooltipView, we prepare parameters here.\n        valueLabelOpt: {\n            precision: axisPointerModel.get('label.precision'),\n            formatter: axisPointerModel.get('label.formatter')\n        },\n        seriesDataIndices: payloadBatch.slice()\n    });\n}\n\nfunction updateModelActually(showValueMap, axesInfo, outputFinder) {\n    var outputAxesInfo = outputFinder.axesInfo = [];\n    // Basic logic: If no 'show' required, 'hide' this axisPointer.\n    each$14(axesInfo, function (axisInfo, key) {\n        var option = axisInfo.axisPointerModel.option;\n        var valItem = showValueMap[key];\n\n        if (valItem) {\n            !axisInfo.useHandle && (option.status = 'show');\n            option.value = valItem.value;\n            // For label formatter param and highlight.\n            option.seriesDataIndices = (valItem.payloadBatch || []).slice();\n        }\n        // When always show (e.g., handle used), remain\n        // original value and status.\n        else {\n            // If hide, value still need to be set, consider\n            // click legend to toggle axis blank.\n            !axisInfo.useHandle && (option.status = 'hide');\n        }\n\n        // If status is 'hide', should be no info in payload.\n        option.status === 'show' && outputAxesInfo.push({\n            axisDim: axisInfo.axis.dim,\n            axisIndex: axisInfo.axis.model.componentIndex,\n            value: option.value\n        });\n    });\n}\n\nfunction dispatchTooltipActually(dataByCoordSys, point, payload, dispatchAction) {\n    // Basic logic: If no showTip required, hideTip will be dispatched.\n    if (illegalPoint(point) || !dataByCoordSys.list.length) {\n        dispatchAction({type: 'hideTip'});\n        return;\n    }\n\n    // In most case only one axis (or event one series is used). It is\n    // convinient to fetch payload.seriesIndex and payload.dataIndex\n    // dirtectly. So put the first seriesIndex and dataIndex of the first\n    // axis on the payload.\n    var sampleItem = ((dataByCoordSys.list[0].dataByAxis[0] || {}).seriesDataIndices || [])[0] || {};\n\n    dispatchAction({\n        type: 'showTip',\n        escapeConnect: true,\n        x: point[0],\n        y: point[1],\n        tooltipOption: payload.tooltipOption,\n        position: payload.position,\n        dataIndexInside: sampleItem.dataIndexInside,\n        dataIndex: sampleItem.dataIndex,\n        seriesIndex: sampleItem.seriesIndex,\n        dataByCoordSys: dataByCoordSys.list\n    });\n}\n\nfunction dispatchHighDownActually(axesInfo, dispatchAction, api) {\n    // FIXME\n    // highlight status modification shoule be a stage of main process?\n    // (Consider confilct (e.g., legend and axisPointer) and setOption)\n\n    var zr = api.getZr();\n    var highDownKey = 'axisPointerLastHighlights';\n    var lastHighlights = inner$9(zr)[highDownKey] || {};\n    var newHighlights = inner$9(zr)[highDownKey] = {};\n\n    // Update highlight/downplay status according to axisPointer model.\n    // Build hash map and remove duplicate incidentally.\n    each$14(axesInfo, function (axisInfo, key) {\n        var option = axisInfo.axisPointerModel.option;\n        option.status === 'show' && each$14(option.seriesDataIndices, function (batchItem) {\n            var key = batchItem.seriesIndex + ' | ' + batchItem.dataIndex;\n            newHighlights[key] = batchItem;\n        });\n    });\n\n    // Diff.\n    var toHighlight = [];\n    var toDownplay = [];\n    each$1(lastHighlights, function (batchItem, key) {\n        !newHighlights[key] && toDownplay.push(batchItem);\n    });\n    each$1(newHighlights, function (batchItem, key) {\n        !lastHighlights[key] && toHighlight.push(batchItem);\n    });\n\n    toDownplay.length && api.dispatchAction({\n        type: 'downplay', escapeConnect: true, batch: toDownplay\n    });\n    toHighlight.length && api.dispatchAction({\n        type: 'highlight', escapeConnect: true, batch: toHighlight\n    });\n}\n\nfunction findInputAxisInfo(inputAxesInfo, axisInfo) {\n    for (var i = 0; i < (inputAxesInfo || []).length; i++) {\n        var inputAxisInfo = inputAxesInfo[i];\n        if (axisInfo.axis.dim === inputAxisInfo.axisDim\n            && axisInfo.axis.model.componentIndex === inputAxisInfo.axisIndex\n        ) {\n            return inputAxisInfo;\n        }\n    }\n}\n\nfunction makeMapperParam(axisInfo) {\n    var axisModel = axisInfo.axis.model;\n    var item = {};\n    var dim = item.axisDim = axisInfo.axis.dim;\n    item.axisIndex = item[dim + 'AxisIndex'] = axisModel.componentIndex;\n    item.axisName = item[dim + 'AxisName'] = axisModel.name;\n    item.axisId = item[dim + 'AxisId'] = axisModel.id;\n    return item;\n}\n\nfunction illegalPoint(point) {\n    return !point || point[0] == null || isNaN(point[0]) || point[1] == null || isNaN(point[1]);\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar AxisPointerModel = extendComponentModel({\n\n    type: 'axisPointer',\n\n    coordSysAxesInfo: null,\n\n    defaultOption: {\n        // 'auto' means that show when triggered by tooltip or handle.\n        show: 'auto',\n        // 'click' | 'mousemove' | 'none'\n        triggerOn: null, // set default in AxisPonterView.js\n\n        zlevel: 0,\n        z: 50,\n\n        type: 'line', // 'line' 'shadow' 'cross' 'none'.\n        // axispointer triggered by tootip determine snap automatically,\n        // see `modelHelper`.\n        snap: false,\n        triggerTooltip: true,\n\n        value: null,\n        status: null, // Init value depends on whether handle is used.\n\n        // [group0, group1, ...]\n        // Each group can be: {\n        //      mapper: function () {},\n        //      singleTooltip: 'multiple',  // 'multiple' or 'single'\n        //      xAxisId: ...,\n        //      yAxisName: ...,\n        //      angleAxisIndex: ...\n        // }\n        // mapper: can be ignored.\n        //      input: {axisInfo, value}\n        //      output: {axisInfo, value}\n        link: [],\n\n        // Do not set 'auto' here, otherwise global animation: false\n        // will not effect at this axispointer.\n        animation: null,\n        animationDurationUpdate: 200,\n\n        lineStyle: {\n            color: '#aaa',\n            width: 1,\n            type: 'solid'\n        },\n\n        shadowStyle: {\n            color: 'rgba(150,150,150,0.3)'\n        },\n\n        label: {\n            show: true,\n            formatter: null, // string | Function\n            precision: 'auto', // Or a number like 0, 1, 2 ...\n            margin: 3,\n            color: '#fff',\n            padding: [5, 7, 5, 7],\n            backgroundColor: 'auto', // default: axis line color\n            borderColor: null,\n            borderWidth: 0,\n            shadowBlur: 3,\n            shadowColor: '#aaa'\n            // Considering applicability, common style should\n            // better not have shadowOffset.\n            // shadowOffsetX: 0,\n            // shadowOffsetY: 2\n        },\n\n        handle: {\n            show: false,\n            /* eslint-disable */\n            icon: 'M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4h1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7v-1.2h6.6z M13.3,22H6.7v-1.2h6.6z M13.3,19.6H6.7v-1.2h6.6z', // jshint ignore:line\n            /* eslint-enable */\n            size: 45,\n            // handle margin is from symbol center to axis, which is stable when circular move.\n            margin: 50,\n            // color: '#1b8bbd'\n            // color: '#2f4554'\n            color: '#333',\n            shadowBlur: 3,\n            shadowColor: '#aaa',\n            shadowOffsetX: 0,\n            shadowOffsetY: 2,\n\n            // For mobile performance\n            throttle: 40\n        }\n    }\n\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar inner$10 = makeInner();\nvar each$15 = each$1;\n\n/**\n * @param {string} key\n * @param {module:echarts/ExtensionAPI} api\n * @param {Function} handler\n *      param: {string} currTrigger\n *      param: {Array.<number>} point\n */\nfunction register(key, api, handler) {\n    if (env$1.node) {\n        return;\n    }\n\n    var zr = api.getZr();\n    inner$10(zr).records || (inner$10(zr).records = {});\n\n    initGlobalListeners(zr, api);\n\n    var record = inner$10(zr).records[key] || (inner$10(zr).records[key] = {});\n    record.handler = handler;\n}\n\nfunction initGlobalListeners(zr, api) {\n    if (inner$10(zr).initialized) {\n        return;\n    }\n\n    inner$10(zr).initialized = true;\n\n    useHandler('click', curry(doEnter, 'click'));\n    useHandler('mousemove', curry(doEnter, 'mousemove'));\n    // useHandler('mouseout', onLeave);\n    useHandler('globalout', onLeave);\n\n    function useHandler(eventType, cb) {\n        zr.on(eventType, function (e) {\n            var dis = makeDispatchAction(api);\n\n            each$15(inner$10(zr).records, function (record) {\n                record && cb(record, e, dis.dispatchAction);\n            });\n\n            dispatchTooltipFinally(dis.pendings, api);\n        });\n    }\n}\n\nfunction dispatchTooltipFinally(pendings, api) {\n    var showLen = pendings.showTip.length;\n    var hideLen = pendings.hideTip.length;\n\n    var actuallyPayload;\n    if (showLen) {\n        actuallyPayload = pendings.showTip[showLen - 1];\n    }\n    else if (hideLen) {\n        actuallyPayload = pendings.hideTip[hideLen - 1];\n    }\n    if (actuallyPayload) {\n        actuallyPayload.dispatchAction = null;\n        api.dispatchAction(actuallyPayload);\n    }\n}\n\nfunction onLeave(record, e, dispatchAction) {\n    record.handler('leave', null, dispatchAction);\n}\n\nfunction doEnter(currTrigger, record, e, dispatchAction) {\n    record.handler(currTrigger, e, dispatchAction);\n}\n\nfunction makeDispatchAction(api) {\n    var pendings = {\n        showTip: [],\n        hideTip: []\n    };\n    // FIXME\n    // better approach?\n    // 'showTip' and 'hideTip' can be triggered by axisPointer and tooltip,\n    // which may be conflict, (axisPointer call showTip but tooltip call hideTip);\n    // So we have to add \"final stage\" to merge those dispatched actions.\n    var dispatchAction = function (payload) {\n        var pendingList = pendings[payload.type];\n        if (pendingList) {\n            pendingList.push(payload);\n        }\n        else {\n            payload.dispatchAction = dispatchAction;\n            api.dispatchAction(payload);\n        }\n    };\n\n    return {\n        dispatchAction: dispatchAction,\n        pendings: pendings\n    };\n}\n\n/**\n * @param {string} key\n * @param {module:echarts/ExtensionAPI} api\n */\nfunction unregister(key, api) {\n    if (env$1.node) {\n        return;\n    }\n    var zr = api.getZr();\n    var record = (inner$10(zr).records || {})[key];\n    if (record) {\n        inner$10(zr).records[key] = null;\n    }\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar AxisPointerView = extendComponentView({\n\n    type: 'axisPointer',\n\n    render: function (globalAxisPointerModel, ecModel, api) {\n        var globalTooltipModel = ecModel.getComponent('tooltip');\n        var triggerOn = globalAxisPointerModel.get('triggerOn')\n            || (globalTooltipModel && globalTooltipModel.get('triggerOn') || 'mousemove|click');\n\n        // Register global listener in AxisPointerView to enable\n        // AxisPointerView to be independent to Tooltip.\n        register(\n            'axisPointer',\n            api,\n            function (currTrigger, e, dispatchAction) {\n                // If 'none', it is not controlled by mouse totally.\n                if (triggerOn !== 'none'\n                    && (currTrigger === 'leave' || triggerOn.indexOf(currTrigger) >= 0)\n                ) {\n                    dispatchAction({\n                        type: 'updateAxisPointer',\n                        currTrigger: currTrigger,\n                        x: e && e.offsetX,\n                        y: e && e.offsetY\n                    });\n                }\n            }\n        );\n    },\n\n    /**\n     * @override\n     */\n    remove: function (ecModel, api) {\n        unregister(api.getZr(), 'axisPointer');\n        AxisPointerView.superApply(this._model, 'remove', arguments);\n    },\n\n    /**\n     * @override\n     */\n    dispose: function (ecModel, api) {\n        unregister('axisPointer', api);\n        AxisPointerView.superApply(this._model, 'dispose', arguments);\n    }\n\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar inner$11 = makeInner();\nvar clone$4 = clone;\nvar bind$2 = bind;\n\n/**\n * Base axis pointer class in 2D.\n * Implemenents {module:echarts/component/axis/IAxisPointer}.\n */\nfunction BaseAxisPointer() {\n}\n\nBaseAxisPointer.prototype = {\n\n    /**\n     * @private\n     */\n    _group: null,\n\n    /**\n     * @private\n     */\n    _lastGraphicKey: null,\n\n    /**\n     * @private\n     */\n    _handle: null,\n\n    /**\n     * @private\n     */\n    _dragging: false,\n\n    /**\n     * @private\n     */\n    _lastValue: null,\n\n    /**\n     * @private\n     */\n    _lastStatus: null,\n\n    /**\n     * @private\n     */\n    _payloadInfo: null,\n\n    /**\n     * In px, arbitrary value. Do not set too small,\n     * no animation is ok for most cases.\n     * @protected\n     */\n    animationThreshold: 15,\n\n    /**\n     * @implement\n     */\n    render: function (axisModel, axisPointerModel, api, forceRender) {\n        var value = axisPointerModel.get('value');\n        var status = axisPointerModel.get('status');\n\n        // Bind them to `this`, not in closure, otherwise they will not\n        // be replaced when user calling setOption in not merge mode.\n        this._axisModel = axisModel;\n        this._axisPointerModel = axisPointerModel;\n        this._api = api;\n\n        // Optimize: `render` will be called repeatly during mouse move.\n        // So it is power consuming if performing `render` each time,\n        // especially on mobile device.\n        if (!forceRender\n            && this._lastValue === value\n            && this._lastStatus === status\n        ) {\n            return;\n        }\n        this._lastValue = value;\n        this._lastStatus = status;\n\n        var group = this._group;\n        var handle = this._handle;\n\n        if (!status || status === 'hide') {\n            // Do not clear here, for animation better.\n            group && group.hide();\n            handle && handle.hide();\n            return;\n        }\n        group && group.show();\n        handle && handle.show();\n\n        // Otherwise status is 'show'\n        var elOption = {};\n        this.makeElOption(elOption, value, axisModel, axisPointerModel, api);\n\n        // Enable change axis pointer type.\n        var graphicKey = elOption.graphicKey;\n        if (graphicKey !== this._lastGraphicKey) {\n            this.clear(api);\n        }\n        this._lastGraphicKey = graphicKey;\n\n        var moveAnimation = this._moveAnimation\n            = this.determineAnimation(axisModel, axisPointerModel);\n\n        if (!group) {\n            group = this._group = new Group();\n            this.createPointerEl(group, elOption, axisModel, axisPointerModel);\n            this.createLabelEl(group, elOption, axisModel, axisPointerModel);\n            api.getZr().add(group);\n        }\n        else {\n            var doUpdateProps = curry(updateProps$1, axisPointerModel, moveAnimation);\n            this.updatePointerEl(group, elOption, doUpdateProps, axisPointerModel);\n            this.updateLabelEl(group, elOption, doUpdateProps, axisPointerModel);\n        }\n\n        updateMandatoryProps(group, axisPointerModel, true);\n\n        this._renderHandle(value);\n    },\n\n    /**\n     * @implement\n     */\n    remove: function (api) {\n        this.clear(api);\n    },\n\n    /**\n     * @implement\n     */\n    dispose: function (api) {\n        this.clear(api);\n    },\n\n    /**\n     * @protected\n     */\n    determineAnimation: function (axisModel, axisPointerModel) {\n        var animation = axisPointerModel.get('animation');\n        var axis = axisModel.axis;\n        var isCategoryAxis = axis.type === 'category';\n        var useSnap = axisPointerModel.get('snap');\n\n        // Value axis without snap always do not snap.\n        if (!useSnap && !isCategoryAxis) {\n            return false;\n        }\n\n        if (animation === 'auto' || animation == null) {\n            var animationThreshold = this.animationThreshold;\n            if (isCategoryAxis && axis.getBandWidth() > animationThreshold) {\n                return true;\n            }\n\n            // It is important to auto animation when snap used. Consider if there is\n            // a dataZoom, animation will be disabled when too many points exist, while\n            // it will be enabled for better visual effect when little points exist.\n            if (useSnap) {\n                var seriesDataCount = getAxisInfo(axisModel).seriesDataCount;\n                var axisExtent = axis.getExtent();\n                // Approximate band width\n                return Math.abs(axisExtent[0] - axisExtent[1]) / seriesDataCount > animationThreshold;\n            }\n\n            return false;\n        }\n\n        return animation === true;\n    },\n\n    /**\n     * add {pointer, label, graphicKey} to elOption\n     * @protected\n     */\n    makeElOption: function (elOption, value, axisModel, axisPointerModel, api) {\n        // Shoule be implemenented by sub-class.\n    },\n\n    /**\n     * @protected\n     */\n    createPointerEl: function (group, elOption, axisModel, axisPointerModel) {\n        var pointerOption = elOption.pointer;\n        if (pointerOption) {\n            var pointerEl = inner$11(group).pointerEl = new graphic[pointerOption.type](\n                clone$4(elOption.pointer)\n            );\n            group.add(pointerEl);\n        }\n    },\n\n    /**\n     * @protected\n     */\n    createLabelEl: function (group, elOption, axisModel, axisPointerModel) {\n        if (elOption.label) {\n            var labelEl = inner$11(group).labelEl = new Rect(\n                clone$4(elOption.label)\n            );\n\n            group.add(labelEl);\n            updateLabelShowHide(labelEl, axisPointerModel);\n        }\n    },\n\n    /**\n     * @protected\n     */\n    updatePointerEl: function (group, elOption, updateProps$$1) {\n        var pointerEl = inner$11(group).pointerEl;\n        if (pointerEl && elOption.pointer) {\n            pointerEl.setStyle(elOption.pointer.style);\n            updateProps$$1(pointerEl, {shape: elOption.pointer.shape});\n        }\n    },\n\n    /**\n     * @protected\n     */\n    updateLabelEl: function (group, elOption, updateProps$$1, axisPointerModel) {\n        var labelEl = inner$11(group).labelEl;\n        if (labelEl) {\n            labelEl.setStyle(elOption.label.style);\n            updateProps$$1(labelEl, {\n                // Consider text length change in vertical axis, animation should\n                // be used on shape, otherwise the effect will be weird.\n                shape: elOption.label.shape,\n                position: elOption.label.position\n            });\n\n            updateLabelShowHide(labelEl, axisPointerModel);\n        }\n    },\n\n    /**\n     * @private\n     */\n    _renderHandle: function (value) {\n        if (this._dragging || !this.updateHandleTransform) {\n            return;\n        }\n\n        var axisPointerModel = this._axisPointerModel;\n        var zr = this._api.getZr();\n        var handle = this._handle;\n        var handleModel = axisPointerModel.getModel('handle');\n\n        var status = axisPointerModel.get('status');\n        if (!handleModel.get('show') || !status || status === 'hide') {\n            handle && zr.remove(handle);\n            this._handle = null;\n            return;\n        }\n\n        var isInit;\n        if (!this._handle) {\n            isInit = true;\n            handle = this._handle = createIcon(\n                handleModel.get('icon'),\n                {\n                    cursor: 'move',\n                    draggable: true,\n                    onmousemove: function (e) {\n                        // Fot mobile devicem, prevent screen slider on the button.\n                        stop(e.event);\n                    },\n                    onmousedown: bind$2(this._onHandleDragMove, this, 0, 0),\n                    drift: bind$2(this._onHandleDragMove, this),\n                    ondragend: bind$2(this._onHandleDragEnd, this)\n                }\n            );\n            zr.add(handle);\n        }\n\n        updateMandatoryProps(handle, axisPointerModel, false);\n\n        // update style\n        var includeStyles = [\n            'color', 'borderColor', 'borderWidth', 'opacity',\n            'shadowColor', 'shadowBlur', 'shadowOffsetX', 'shadowOffsetY'\n        ];\n        handle.setStyle(handleModel.getItemStyle(null, includeStyles));\n\n        // update position\n        var handleSize = handleModel.get('size');\n        if (!isArray(handleSize)) {\n            handleSize = [handleSize, handleSize];\n        }\n        handle.attr('scale', [handleSize[0] / 2, handleSize[1] / 2]);\n\n        createOrUpdate(\n            this,\n            '_doDispatchAxisPointer',\n            handleModel.get('throttle') || 0,\n            'fixRate'\n        );\n\n        this._moveHandleToValue(value, isInit);\n    },\n\n    /**\n     * @private\n     */\n    _moveHandleToValue: function (value, isInit) {\n        updateProps$1(\n            this._axisPointerModel,\n            !isInit && this._moveAnimation,\n            this._handle,\n            getHandleTransProps(this.getHandleTransform(\n                value, this._axisModel, this._axisPointerModel\n            ))\n        );\n    },\n\n    /**\n     * @private\n     */\n    _onHandleDragMove: function (dx, dy) {\n        var handle = this._handle;\n        if (!handle) {\n            return;\n        }\n\n        this._dragging = true;\n\n        // Persistent for throttle.\n        var trans = this.updateHandleTransform(\n            getHandleTransProps(handle),\n            [dx, dy],\n            this._axisModel,\n            this._axisPointerModel\n        );\n        this._payloadInfo = trans;\n\n        handle.stopAnimation();\n        handle.attr(getHandleTransProps(trans));\n        inner$11(handle).lastProp = null;\n\n        this._doDispatchAxisPointer();\n    },\n\n    /**\n     * Throttled method.\n     * @private\n     */\n    _doDispatchAxisPointer: function () {\n        var handle = this._handle;\n        if (!handle) {\n            return;\n        }\n\n        var payloadInfo = this._payloadInfo;\n        var axisModel = this._axisModel;\n        this._api.dispatchAction({\n            type: 'updateAxisPointer',\n            x: payloadInfo.cursorPoint[0],\n            y: payloadInfo.cursorPoint[1],\n            tooltipOption: payloadInfo.tooltipOption,\n            axesInfo: [{\n                axisDim: axisModel.axis.dim,\n                axisIndex: axisModel.componentIndex\n            }]\n        });\n    },\n\n    /**\n     * @private\n     */\n    _onHandleDragEnd: function (moveAnimation) {\n        this._dragging = false;\n        var handle = this._handle;\n        if (!handle) {\n            return;\n        }\n\n        var value = this._axisPointerModel.get('value');\n        // Consider snap or categroy axis, handle may be not consistent with\n        // axisPointer. So move handle to align the exact value position when\n        // drag ended.\n        this._moveHandleToValue(value);\n\n        // For the effect: tooltip will be shown when finger holding on handle\n        // button, and will be hidden after finger left handle button.\n        this._api.dispatchAction({\n            type: 'hideTip'\n        });\n    },\n\n    /**\n     * Should be implemenented by sub-class if support `handle`.\n     * @protected\n     * @param {number} value\n     * @param {module:echarts/model/Model} axisModel\n     * @param {module:echarts/model/Model} axisPointerModel\n     * @return {Object} {position: [x, y], rotation: 0}\n     */\n    getHandleTransform: null,\n\n    /**\n     * * Should be implemenented by sub-class if support `handle`.\n     * @protected\n     * @param {Object} transform {position, rotation}\n     * @param {Array.<number>} delta [dx, dy]\n     * @param {module:echarts/model/Model} axisModel\n     * @param {module:echarts/model/Model} axisPointerModel\n     * @return {Object} {position: [x, y], rotation: 0, cursorPoint: [x, y]}\n     */\n    updateHandleTransform: null,\n\n    /**\n     * @private\n     */\n    clear: function (api) {\n        this._lastValue = null;\n        this._lastStatus = null;\n\n        var zr = api.getZr();\n        var group = this._group;\n        var handle = this._handle;\n        if (zr && group) {\n            this._lastGraphicKey = null;\n            group && zr.remove(group);\n            handle && zr.remove(handle);\n            this._group = null;\n            this._handle = null;\n            this._payloadInfo = null;\n        }\n    },\n\n    /**\n     * @protected\n     */\n    doClear: function () {\n        // Implemented by sub-class if necessary.\n    },\n\n    /**\n     * @protected\n     * @param {Array.<number>} xy\n     * @param {Array.<number>} wh\n     * @param {number} [xDimIndex=0] or 1\n     */\n    buildLabel: function (xy, wh, xDimIndex) {\n        xDimIndex = xDimIndex || 0;\n        return {\n            x: xy[xDimIndex],\n            y: xy[1 - xDimIndex],\n            width: wh[xDimIndex],\n            height: wh[1 - xDimIndex]\n        };\n    }\n};\n\nBaseAxisPointer.prototype.constructor = BaseAxisPointer;\n\n\nfunction updateProps$1(animationModel, moveAnimation, el, props) {\n    // Animation optimize.\n    if (!propsEqual(inner$11(el).lastProp, props)) {\n        inner$11(el).lastProp = props;\n        moveAnimation\n            ? updateProps(el, props, animationModel)\n            : (el.stopAnimation(), el.attr(props));\n    }\n}\n\nfunction propsEqual(lastProps, newProps) {\n    if (isObject$1(lastProps) && isObject$1(newProps)) {\n        var equals = true;\n        each$1(newProps, function (item, key) {\n            equals = equals && propsEqual(lastProps[key], item);\n        });\n        return !!equals;\n    }\n    else {\n        return lastProps === newProps;\n    }\n}\n\nfunction updateLabelShowHide(labelEl, axisPointerModel) {\n    labelEl[axisPointerModel.get('label.show') ? 'show' : 'hide']();\n}\n\nfunction getHandleTransProps(trans) {\n    return {\n        position: trans.position.slice(),\n        rotation: trans.rotation || 0\n    };\n}\n\nfunction updateMandatoryProps(group, axisPointerModel, silent) {\n    var z = axisPointerModel.get('z');\n    var zlevel = axisPointerModel.get('zlevel');\n\n    group && group.traverse(function (el) {\n        if (el.type !== 'group') {\n            z != null && (el.z = z);\n            zlevel != null && (el.zlevel = zlevel);\n            el.silent = silent;\n        }\n    });\n}\n\nenableClassExtend(BaseAxisPointer);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * @param {module:echarts/model/Model} axisPointerModel\n */\nfunction buildElStyle(axisPointerModel) {\n    var axisPointerType = axisPointerModel.get('type');\n    var styleModel = axisPointerModel.getModel(axisPointerType + 'Style');\n    var style;\n    if (axisPointerType === 'line') {\n        style = styleModel.getLineStyle();\n        style.fill = null;\n    }\n    else if (axisPointerType === 'shadow') {\n        style = styleModel.getAreaStyle();\n        style.stroke = null;\n    }\n    return style;\n}\n\n/**\n * @param {Function} labelPos {align, verticalAlign, position}\n */\nfunction buildLabelElOption(\n    elOption, axisModel, axisPointerModel, api, labelPos\n) {\n    var value = axisPointerModel.get('value');\n    var text = getValueLabel(\n        value, axisModel.axis, axisModel.ecModel,\n        axisPointerModel.get('seriesDataIndices'),\n        {\n            precision: axisPointerModel.get('label.precision'),\n            formatter: axisPointerModel.get('label.formatter')\n        }\n    );\n    var labelModel = axisPointerModel.getModel('label');\n    var paddings = normalizeCssArray$1(labelModel.get('padding') || 0);\n\n    var font = labelModel.getFont();\n    var textRect = getBoundingRect(text, font);\n\n    var position = labelPos.position;\n    var width = textRect.width + paddings[1] + paddings[3];\n    var height = textRect.height + paddings[0] + paddings[2];\n\n    // Adjust by align.\n    var align = labelPos.align;\n    align === 'right' && (position[0] -= width);\n    align === 'center' && (position[0] -= width / 2);\n    var verticalAlign = labelPos.verticalAlign;\n    verticalAlign === 'bottom' && (position[1] -= height);\n    verticalAlign === 'middle' && (position[1] -= height / 2);\n\n    // Not overflow ec container\n    confineInContainer(position, width, height, api);\n\n    var bgColor = labelModel.get('backgroundColor');\n    if (!bgColor || bgColor === 'auto') {\n        bgColor = axisModel.get('axisLine.lineStyle.color');\n    }\n\n    elOption.label = {\n        shape: {x: 0, y: 0, width: width, height: height, r: labelModel.get('borderRadius')},\n        position: position.slice(),\n        // TODO: rich\n        style: {\n            text: text,\n            textFont: font,\n            textFill: labelModel.getTextColor(),\n            textPosition: 'inside',\n            textPadding: paddings,\n            fill: bgColor,\n            stroke: labelModel.get('borderColor') || 'transparent',\n            lineWidth: labelModel.get('borderWidth') || 0,\n            shadowBlur: labelModel.get('shadowBlur'),\n            shadowColor: labelModel.get('shadowColor'),\n            shadowOffsetX: labelModel.get('shadowOffsetX'),\n            shadowOffsetY: labelModel.get('shadowOffsetY')\n        },\n        // Lable should be over axisPointer.\n        z2: 10\n    };\n}\n\n// Do not overflow ec container\nfunction confineInContainer(position, width, height, api) {\n    var viewWidth = api.getWidth();\n    var viewHeight = api.getHeight();\n    position[0] = Math.min(position[0] + width, viewWidth) - width;\n    position[1] = Math.min(position[1] + height, viewHeight) - height;\n    position[0] = Math.max(position[0], 0);\n    position[1] = Math.max(position[1], 0);\n}\n\n/**\n * @param {number} value\n * @param {module:echarts/coord/Axis} axis\n * @param {module:echarts/model/Global} ecModel\n * @param {Object} opt\n * @param {Array.<Object>} seriesDataIndices\n * @param {number|string} opt.precision 'auto' or a number\n * @param {string|Function} opt.formatter label formatter\n */\nfunction getValueLabel(value, axis, ecModel, seriesDataIndices, opt) {\n    value = axis.scale.parse(value);\n    var text = axis.scale.getLabel(\n        // If `precision` is set, width can be fixed (like '12.00500'), which\n        // helps to debounce when when moving label.\n        value, {precision: opt.precision}\n    );\n    var formatter = opt.formatter;\n\n    if (formatter) {\n        var params = {\n            value: getAxisRawValue(axis, value),\n            axisDimension: axis.dim,\n            axisIndex: axis.index,\n            seriesData: []\n        };\n        each$1(seriesDataIndices, function (idxItem) {\n            var series = ecModel.getSeriesByIndex(idxItem.seriesIndex);\n            var dataIndex = idxItem.dataIndexInside;\n            var dataParams = series && series.getDataParams(dataIndex);\n            dataParams && params.seriesData.push(dataParams);\n        });\n\n        if (isString(formatter)) {\n            text = formatter.replace('{value}', text);\n        }\n        else if (isFunction$1(formatter)) {\n            text = formatter(params);\n        }\n    }\n\n    return text;\n}\n\n/**\n * @param {module:echarts/coord/Axis} axis\n * @param {number} value\n * @param {Object} layoutInfo {\n *  rotation, position, labelOffset, labelDirection, labelMargin\n * }\n */\nfunction getTransformedPosition(axis, value, layoutInfo) {\n    var transform = create$1();\n    rotate(transform, transform, layoutInfo.rotation);\n    translate(transform, transform, layoutInfo.position);\n\n    return applyTransform$1([\n        axis.dataToCoord(value),\n        (layoutInfo.labelOffset || 0)\n            + (layoutInfo.labelDirection || 1) * (layoutInfo.labelMargin || 0)\n    ], transform);\n}\n\nfunction buildCartesianSingleLabelElOption(\n    value, elOption, layoutInfo, axisModel, axisPointerModel, api\n) {\n    var textLayout = AxisBuilder.innerTextLayout(\n        layoutInfo.rotation, 0, layoutInfo.labelDirection\n    );\n    layoutInfo.labelMargin = axisPointerModel.get('label.margin');\n    buildLabelElOption(elOption, axisModel, axisPointerModel, api, {\n        position: getTransformedPosition(axisModel.axis, value, layoutInfo),\n        align: textLayout.textAlign,\n        verticalAlign: textLayout.textVerticalAlign\n    });\n}\n\n/**\n * @param {Array.<number>} p1\n * @param {Array.<number>} p2\n * @param {number} [xDimIndex=0] or 1\n */\nfunction makeLineShape(p1, p2, xDimIndex) {\n    xDimIndex = xDimIndex || 0;\n    return {\n        x1: p1[xDimIndex],\n        y1: p1[1 - xDimIndex],\n        x2: p2[xDimIndex],\n        y2: p2[1 - xDimIndex]\n    };\n}\n\n/**\n * @param {Array.<number>} xy\n * @param {Array.<number>} wh\n * @param {number} [xDimIndex=0] or 1\n */\nfunction makeRectShape(xy, wh, xDimIndex) {\n    xDimIndex = xDimIndex || 0;\n    return {\n        x: xy[xDimIndex],\n        y: xy[1 - xDimIndex],\n        width: wh[xDimIndex],\n        height: wh[1 - xDimIndex]\n    };\n}\n\nfunction makeSectorShape(cx, cy, r0, r, startAngle, endAngle) {\n    return {\n        cx: cx,\n        cy: cy,\n        r0: r0,\n        r: r,\n        startAngle: startAngle,\n        endAngle: endAngle,\n        clockwise: true\n    };\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar CartesianAxisPointer = BaseAxisPointer.extend({\n\n    /**\n     * @override\n     */\n    makeElOption: function (elOption, value, axisModel, axisPointerModel, api) {\n        var axis = axisModel.axis;\n        var grid = axis.grid;\n        var axisPointerType = axisPointerModel.get('type');\n        var otherExtent = getCartesian(grid, axis).getOtherAxis(axis).getGlobalExtent();\n        var pixelValue = axis.toGlobalCoord(axis.dataToCoord(value, true));\n\n        if (axisPointerType && axisPointerType !== 'none') {\n            var elStyle = buildElStyle(axisPointerModel);\n            var pointerOption = pointerShapeBuilder[axisPointerType](\n                axis, pixelValue, otherExtent\n            );\n            pointerOption.style = elStyle;\n            elOption.graphicKey = pointerOption.type;\n            elOption.pointer = pointerOption;\n        }\n\n        var layoutInfo = layout$1(grid.model, axisModel);\n        buildCartesianSingleLabelElOption(\n            value, elOption, layoutInfo, axisModel, axisPointerModel, api\n        );\n    },\n\n    /**\n     * @override\n     */\n    getHandleTransform: function (value, axisModel, axisPointerModel) {\n        var layoutInfo = layout$1(axisModel.axis.grid.model, axisModel, {\n            labelInside: false\n        });\n        layoutInfo.labelMargin = axisPointerModel.get('handle.margin');\n        return {\n            position: getTransformedPosition(axisModel.axis, value, layoutInfo),\n            rotation: layoutInfo.rotation + (layoutInfo.labelDirection < 0 ? Math.PI : 0)\n        };\n    },\n\n    /**\n     * @override\n     */\n    updateHandleTransform: function (transform, delta, axisModel, axisPointerModel) {\n        var axis = axisModel.axis;\n        var grid = axis.grid;\n        var axisExtent = axis.getGlobalExtent(true);\n        var otherExtent = getCartesian(grid, axis).getOtherAxis(axis).getGlobalExtent();\n        var dimIndex = axis.dim === 'x' ? 0 : 1;\n\n        var currPosition = transform.position;\n        currPosition[dimIndex] += delta[dimIndex];\n        currPosition[dimIndex] = Math.min(axisExtent[1], currPosition[dimIndex]);\n        currPosition[dimIndex] = Math.max(axisExtent[0], currPosition[dimIndex]);\n\n        var cursorOtherValue = (otherExtent[1] + otherExtent[0]) / 2;\n        var cursorPoint = [cursorOtherValue, cursorOtherValue];\n        cursorPoint[dimIndex] = currPosition[dimIndex];\n\n        // Make tooltip do not overlap axisPointer and in the middle of the grid.\n        var tooltipOptions = [{verticalAlign: 'middle'}, {align: 'center'}];\n\n        return {\n            position: currPosition,\n            rotation: transform.rotation,\n            cursorPoint: cursorPoint,\n            tooltipOption: tooltipOptions[dimIndex]\n        };\n    }\n\n});\n\nfunction getCartesian(grid, axis) {\n    var opt = {};\n    opt[axis.dim + 'AxisIndex'] = axis.index;\n    return grid.getCartesian(opt);\n}\n\nvar pointerShapeBuilder = {\n\n    line: function (axis, pixelValue, otherExtent) {\n        var targetShape = makeLineShape(\n            [pixelValue, otherExtent[0]],\n            [pixelValue, otherExtent[1]],\n            getAxisDimIndex(axis)\n        );\n        return {\n            type: 'Line',\n            subPixelOptimize: true,\n            shape: targetShape\n        };\n    },\n\n    shadow: function (axis, pixelValue, otherExtent) {\n        var bandWidth = Math.max(1, axis.getBandWidth());\n        var span = otherExtent[1] - otherExtent[0];\n        return {\n            type: 'Rect',\n            shape: makeRectShape(\n                [pixelValue - bandWidth / 2, otherExtent[0]],\n                [bandWidth, span],\n                getAxisDimIndex(axis)\n            )\n        };\n    }\n};\n\nfunction getAxisDimIndex(axis) {\n    return axis.dim === 'x' ? 0 : 1;\n}\n\nAxisView.registerAxisPointerClass('CartesianAxisPointer', CartesianAxisPointer);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n// CartesianAxisPointer is not supposed to be required here. But consider\n// echarts.simple.js and online build tooltip, which only require gridSimple,\n// CartesianAxisPointer should be able to required somewhere.\nregisterPreprocessor(function (option) {\n    // Always has a global axisPointerModel for default setting.\n    if (option) {\n        (!option.axisPointer || option.axisPointer.length === 0)\n            && (option.axisPointer = {});\n\n        var link = option.axisPointer.link;\n        // Normalize to array to avoid object mergin. But if link\n        // is not set, remain null/undefined, otherwise it will\n        // override existent link setting.\n        if (link && !isArray(link)) {\n            option.axisPointer.link = [link];\n        }\n    }\n});\n\n// This process should proformed after coordinate systems created\n// and series data processed. So put it on statistic processing stage.\nregisterProcessor(PRIORITY.PROCESSOR.STATISTIC, function (ecModel, api) {\n    // Build axisPointerModel, mergin tooltip.axisPointer model for each axis.\n    // allAxesInfo should be updated when setOption performed.\n    ecModel.getComponent('axisPointer').coordSysAxesInfo\n        = collect(ecModel, api);\n});\n\n// Broadcast to all views.\nregisterAction({\n    type: 'updateAxisPointer',\n    event: 'updateAxisPointer',\n    update: ':updateAxisPointer'\n}, axisTrigger);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar XY = ['x', 'y'];\nvar WH = ['width', 'height'];\n\nvar SingleAxisPointer = BaseAxisPointer.extend({\n\n    /**\n     * @override\n     */\n    makeElOption: function (elOption, value, axisModel, axisPointerModel, api) {\n        var axis = axisModel.axis;\n        var coordSys = axis.coordinateSystem;\n        var otherExtent = getGlobalExtent(coordSys, 1 - getPointDimIndex(axis));\n        var pixelValue = coordSys.dataToPoint(value)[0];\n\n        var axisPointerType = axisPointerModel.get('type');\n        if (axisPointerType && axisPointerType !== 'none') {\n            var elStyle = buildElStyle(axisPointerModel);\n            var pointerOption = pointerShapeBuilder$1[axisPointerType](\n                axis, pixelValue, otherExtent\n            );\n            pointerOption.style = elStyle;\n\n            elOption.graphicKey = pointerOption.type;\n            elOption.pointer = pointerOption;\n        }\n\n        var layoutInfo = layout$2(axisModel);\n        buildCartesianSingleLabelElOption(\n            value, elOption, layoutInfo, axisModel, axisPointerModel, api\n        );\n    },\n\n    /**\n     * @override\n     */\n    getHandleTransform: function (value, axisModel, axisPointerModel) {\n        var layoutInfo = layout$2(axisModel, {labelInside: false});\n        layoutInfo.labelMargin = axisPointerModel.get('handle.margin');\n        return {\n            position: getTransformedPosition(axisModel.axis, value, layoutInfo),\n            rotation: layoutInfo.rotation + (layoutInfo.labelDirection < 0 ? Math.PI : 0)\n        };\n    },\n\n    /**\n     * @override\n     */\n    updateHandleTransform: function (transform, delta, axisModel, axisPointerModel) {\n        var axis = axisModel.axis;\n        var coordSys = axis.coordinateSystem;\n        var dimIndex = getPointDimIndex(axis);\n        var axisExtent = getGlobalExtent(coordSys, dimIndex);\n        var currPosition = transform.position;\n        currPosition[dimIndex] += delta[dimIndex];\n        currPosition[dimIndex] = Math.min(axisExtent[1], currPosition[dimIndex]);\n        currPosition[dimIndex] = Math.max(axisExtent[0], currPosition[dimIndex]);\n        var otherExtent = getGlobalExtent(coordSys, 1 - dimIndex);\n        var cursorOtherValue = (otherExtent[1] + otherExtent[0]) / 2;\n        var cursorPoint = [cursorOtherValue, cursorOtherValue];\n        cursorPoint[dimIndex] = currPosition[dimIndex];\n\n        return {\n            position: currPosition,\n            rotation: transform.rotation,\n            cursorPoint: cursorPoint,\n            tooltipOption: {\n                verticalAlign: 'middle'\n            }\n        };\n    }\n});\n\nvar pointerShapeBuilder$1 = {\n\n    line: function (axis, pixelValue, otherExtent) {\n        var targetShape = makeLineShape(\n            [pixelValue, otherExtent[0]],\n            [pixelValue, otherExtent[1]],\n            getPointDimIndex(axis)\n        );\n        return {\n            type: 'Line',\n            subPixelOptimize: true,\n            shape: targetShape\n        };\n    },\n\n    shadow: function (axis, pixelValue, otherExtent) {\n        var bandWidth = axis.getBandWidth();\n        var span = otherExtent[1] - otherExtent[0];\n        return {\n            type: 'Rect',\n            shape: makeRectShape(\n                [pixelValue - bandWidth / 2, otherExtent[0]],\n                [bandWidth, span],\n                getPointDimIndex(axis)\n            )\n        };\n    }\n};\n\nfunction getPointDimIndex(axis) {\n    return axis.isHorizontal() ? 0 : 1;\n}\n\nfunction getGlobalExtent(coordSys, dimIndex) {\n    var rect = coordSys.getRect();\n    return [rect[XY[dimIndex]], rect[XY[dimIndex]] + rect[WH[dimIndex]]];\n}\n\nAxisView.registerAxisPointerClass('SingleAxisPointer', SingleAxisPointer);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nextendComponentView({\n    type: 'single'\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar DATA_NAME_INDEX = 2;\n\nvar ThemeRiverSeries = SeriesModel.extend({\n\n    type: 'series.themeRiver',\n\n    dependencies: ['singleAxis'],\n\n    /**\n     * @readOnly\n     * @type {module:zrender/core/util#HashMap}\n     */\n    nameMap: null,\n\n    /**\n     * @override\n     */\n    init: function (option) {\n        // eslint-disable-next-line\n        ThemeRiverSeries.superApply(this, 'init', arguments);\n\n        // Put this function here is for the sake of consistency of code style.\n        // Enable legend selection for each data item\n        // Use a function instead of direct access because data reference may changed\n        this.legendDataProvider = function () {\n            return this.getRawData();\n        };\n    },\n\n    /**\n     * If there is no value of a certain point in the time for some event,set it value to 0.\n     *\n     * @param {Array} data  initial data in the option\n     * @return {Array}\n     */\n    fixData: function (data) {\n        var rawDataLength = data.length;\n\n        // grouped data by name\n        var groupResult = groupData(data, function (item) {\n            return item[2];\n        });\n        var layData = [];\n        groupResult.buckets.each(function (items, key) {\n            layData.push({name: key, dataList: items});\n        });\n\n        var layerNum = layData.length;\n        var largestLayer = -1;\n        var index = -1;\n        for (var i = 0; i < layerNum; ++i) {\n            var len = layData[i].dataList.length;\n            if (len > largestLayer) {\n                largestLayer = len;\n                index = i;\n            }\n        }\n\n        for (var k = 0; k < layerNum; ++k) {\n            if (k === index) {\n                continue;\n            }\n            var name = layData[k].name;\n            for (var j = 0; j < largestLayer; ++j) {\n                var timeValue = layData[index].dataList[j][0];\n                var length = layData[k].dataList.length;\n                var keyIndex = -1;\n                for (var l = 0; l < length; ++l) {\n                    var value = layData[k].dataList[l][0];\n                    if (value === timeValue) {\n                        keyIndex = l;\n                        break;\n                    }\n                }\n                if (keyIndex === -1) {\n                    data[rawDataLength] = [];\n                    data[rawDataLength][0] = timeValue;\n                    data[rawDataLength][1] = 0;\n                    data[rawDataLength][2] = name;\n                    rawDataLength++;\n\n                }\n            }\n        }\n        return data;\n    },\n\n    /**\n     * @override\n     * @param  {Object} option  the initial option that user gived\n     * @param  {module:echarts/model/Model} ecModel  the model object for themeRiver option\n     * @return {module:echarts/data/List}\n     */\n    getInitialData: function (option, ecModel) {\n\n        var singleAxisModel = ecModel.queryComponents({\n            mainType: 'singleAxis',\n            index: this.get('singleAxisIndex'),\n            id: this.get('singleAxisId')\n        })[0];\n\n        var axisType = singleAxisModel.get('type');\n\n        // filter the data item with the value of label is undefined\n        var filterData = filter(option.data, function (dataItem) {\n            return dataItem[2] !== undefined;\n        });\n\n        // ??? TODO design a stage to transfer data for themeRiver and lines?\n        var data = this.fixData(filterData || []);\n        var nameList = [];\n        var nameMap = this.nameMap = createHashMap();\n        var count = 0;\n\n        for (var i = 0; i < data.length; ++i) {\n            nameList.push(data[i][DATA_NAME_INDEX]);\n            if (!nameMap.get(data[i][DATA_NAME_INDEX])) {\n                nameMap.set(data[i][DATA_NAME_INDEX], count);\n                count++;\n            }\n        }\n\n        var dimensionsInfo = createDimensions(data, {\n            coordDimensions: ['single'],\n            dimensionsDefine: [\n                {\n                    name: 'time',\n                    type: getDimensionTypeByAxis(axisType)\n                },\n                {\n                    name: 'value',\n                    type: 'float'\n                },\n                {\n                    name: 'name',\n                    type: 'ordinal'\n                }\n            ],\n            encodeDefine: {\n                single: 0,\n                value: 1,\n                itemName: 2\n            }\n        });\n\n        var list = new List(dimensionsInfo, this);\n        list.initData(data);\n\n        return list;\n    },\n\n    /**\n     * The raw data is divided into multiple layers and each layer\n     *     has same name.\n     *\n     * @return {Array.<Array.<number>>}\n     */\n    getLayerSeries: function () {\n        var data = this.getData();\n        var lenCount = data.count();\n        var indexArr = [];\n\n        for (var i = 0; i < lenCount; ++i) {\n            indexArr[i] = i;\n        }\n\n        var timeDim = data.mapDimension('single');\n\n        // data group by name\n        var groupResult = groupData(indexArr, function (index) {\n            return data.get('name', index);\n        });\n        var layerSeries = [];\n        groupResult.buckets.each(function (items, key) {\n            items.sort(function (index1, index2) {\n                return data.get(timeDim, index1) - data.get(timeDim, index2);\n            });\n            layerSeries.push({name: key, indices: items});\n        });\n\n        return layerSeries;\n    },\n\n    /**\n     * Get data indices for show tooltip content\n\n     * @param {Array.<string>|string} dim  single coordinate dimension\n     * @param {number} value axis value\n     * @param {module:echarts/coord/single/SingleAxis} baseAxis  single Axis used\n     *     the themeRiver.\n     * @return {Object} {dataIndices, nestestValue}\n     */\n    getAxisTooltipData: function (dim, value, baseAxis) {\n        if (!isArray(dim)) {\n            dim = dim ? [dim] : [];\n        }\n\n        var data = this.getData();\n        var layerSeries = this.getLayerSeries();\n        var indices = [];\n        var layerNum = layerSeries.length;\n        var nestestValue;\n\n        for (var i = 0; i < layerNum; ++i) {\n            var minDist = Number.MAX_VALUE;\n            var nearestIdx = -1;\n            var pointNum = layerSeries[i].indices.length;\n            for (var j = 0; j < pointNum; ++j) {\n                var theValue = data.get(dim[0], layerSeries[i].indices[j]);\n                var dist = Math.abs(theValue - value);\n                if (dist <= minDist) {\n                    nestestValue = theValue;\n                    minDist = dist;\n                    nearestIdx = layerSeries[i].indices[j];\n                }\n            }\n            indices.push(nearestIdx);\n        }\n\n        return {dataIndices: indices, nestestValue: nestestValue};\n    },\n\n    /**\n     * @override\n     * @param {number} dataIndex  index of data\n     */\n    formatTooltip: function (dataIndex) {\n        var data = this.getData();\n        var htmlName = data.getName(dataIndex);\n        var htmlValue = data.get(data.mapDimension('value'), dataIndex);\n        if (isNaN(htmlValue) || htmlValue == null) {\n            htmlValue = '-';\n        }\n        return encodeHTML(htmlName + ' : ' + htmlValue);\n    },\n\n    defaultOption: {\n        zlevel: 0,\n        z: 2,\n\n        coordinateSystem: 'singleAxis',\n\n        // gap in axis's orthogonal orientation\n        boundaryGap: ['10%', '10%'],\n\n        // legendHoverLink: true,\n\n        singleAxisIndex: 0,\n\n        animationEasing: 'linear',\n\n        label: {\n            margin: 4,\n            show: true,\n            position: 'left',\n            color: '#000',\n            fontSize: 11\n        },\n\n        emphasis: {\n            label: {\n                show: true\n            }\n        }\n    }\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nextendChartView({\n\n    type: 'themeRiver',\n\n    init: function () {\n        this._layers = [];\n    },\n\n    render: function (seriesModel, ecModel, api) {\n        var data = seriesModel.getData();\n\n        var group = this.group;\n\n        var layerSeries = seriesModel.getLayerSeries();\n\n        var layoutInfo = data.getLayout('layoutInfo');\n        var rect = layoutInfo.rect;\n        var boundaryGap = layoutInfo.boundaryGap;\n\n        group.attr('position', [0, rect.y + boundaryGap[0]]);\n\n        function keyGetter(item) {\n            return item.name;\n        }\n        var dataDiffer = new DataDiffer(\n            this._layersSeries || [], layerSeries,\n            keyGetter, keyGetter\n        );\n\n        var newLayersGroups = {};\n\n        dataDiffer\n            .add(bind(process, this, 'add'))\n            .update(bind(process, this, 'update'))\n            .remove(bind(process, this, 'remove'))\n            .execute();\n\n        function process(status, idx, oldIdx) {\n            var oldLayersGroups = this._layers;\n            if (status === 'remove') {\n                group.remove(oldLayersGroups[idx]);\n                return;\n            }\n            var points0 = [];\n            var points1 = [];\n            var color;\n            var indices = layerSeries[idx].indices;\n            for (var j = 0; j < indices.length; j++) {\n                var layout = data.getItemLayout(indices[j]);\n                var x = layout.x;\n                var y0 = layout.y0;\n                var y = layout.y;\n\n                points0.push([x, y0]);\n                points1.push([x, y0 + y]);\n\n                color = data.getItemVisual(indices[j], 'color');\n            }\n\n            var polygon;\n            var text;\n            var textLayout = data.getItemLayout(indices[0]);\n            var itemModel = data.getItemModel(indices[j - 1]);\n            var labelModel = itemModel.getModel('label');\n            var margin = labelModel.get('margin');\n            if (status === 'add') {\n                var layerGroup = newLayersGroups[idx] = new Group();\n                polygon = new Polygon$1({\n                    shape: {\n                        points: points0,\n                        stackedOnPoints: points1,\n                        smooth: 0.4,\n                        stackedOnSmooth: 0.4,\n                        smoothConstraint: false\n                    },\n                    z2: 0\n                });\n                text = new Text({\n                    style: {\n                        x: textLayout.x - margin,\n                        y: textLayout.y0 + textLayout.y / 2\n                    }\n                });\n                layerGroup.add(polygon);\n                layerGroup.add(text);\n                group.add(layerGroup);\n\n                polygon.setClipPath(createGridClipShape$3(polygon.getBoundingRect(), seriesModel, function () {\n                    polygon.removeClipPath();\n                }));\n            }\n            else {\n                var layerGroup = oldLayersGroups[oldIdx];\n                polygon = layerGroup.childAt(0);\n                text = layerGroup.childAt(1);\n                group.add(layerGroup);\n\n                newLayersGroups[idx] = layerGroup;\n\n                updateProps(polygon, {\n                    shape: {\n                        points: points0,\n                        stackedOnPoints: points1\n                    }\n                }, seriesModel);\n\n                updateProps(text, {\n                    style: {\n                        x: textLayout.x - margin,\n                        y: textLayout.y0 + textLayout.y / 2\n                    }\n                }, seriesModel);\n            }\n\n            var hoverItemStyleModel = itemModel.getModel('emphasis.itemStyle');\n            var itemStyleModel = itemModel.getModel('itemStyle');\n\n            setTextStyle(text.style, labelModel, {\n                text: labelModel.get('show')\n                    ? seriesModel.getFormattedLabel(indices[j - 1], 'normal')\n                        || data.getName(indices[j - 1])\n                    : null,\n                textVerticalAlign: 'middle'\n            });\n\n            polygon.setStyle(extend({\n                fill: color\n            }, itemStyleModel.getItemStyle(['color'])));\n\n            setHoverStyle(polygon, hoverItemStyleModel.getItemStyle());\n        }\n\n        this._layersSeries = layerSeries;\n        this._layers = newLayersGroups;\n    },\n\n    dispose: function () {}\n});\n\n// add animation to the view\nfunction createGridClipShape$3(rect, seriesModel, cb) {\n    var rectEl = new Rect({\n        shape: {\n            x: rect.x - 10,\n            y: rect.y - 10,\n            width: 0,\n            height: rect.height + 20\n        }\n    });\n    initProps(rectEl, {\n        shape: {\n            width: rect.width + 20,\n            height: rect.height + 20\n        }\n    }, seriesModel, cb);\n\n    return rectEl;\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar themeRiverLayout = function (ecModel, api) {\n\n    ecModel.eachSeriesByType('themeRiver', function (seriesModel) {\n\n        var data = seriesModel.getData();\n\n        var single = seriesModel.coordinateSystem;\n\n        var layoutInfo = {};\n\n        // use the axis boundingRect for view\n        var rect = single.getRect();\n\n        layoutInfo.rect = rect;\n\n        var boundaryGap = seriesModel.get('boundaryGap');\n\n        var axis = single.getAxis();\n\n        layoutInfo.boundaryGap = boundaryGap;\n\n        if (axis.orient === 'horizontal') {\n            boundaryGap[0] = parsePercent$1(boundaryGap[0], rect.height);\n            boundaryGap[1] = parsePercent$1(boundaryGap[1], rect.height);\n            var height = rect.height - boundaryGap[0] - boundaryGap[1];\n            themeRiverLayout$1(data, seriesModel, height);\n        }\n        else {\n            boundaryGap[0] = parsePercent$1(boundaryGap[0], rect.width);\n            boundaryGap[1] = parsePercent$1(boundaryGap[1], rect.width);\n            var width = rect.width - boundaryGap[0] - boundaryGap[1];\n            themeRiverLayout$1(data, seriesModel, width);\n        }\n\n        data.setLayout('layoutInfo', layoutInfo);\n    });\n};\n\n/**\n * The layout information about themeriver\n *\n * @param {module:echarts/data/List} data  data in the series\n * @param {module:echarts/model/Series} seriesModel  the model object of themeRiver series\n * @param {number} height  value used to compute every series height\n */\nfunction themeRiverLayout$1(data, seriesModel, height) {\n    if (!data.count()) {\n        return;\n    }\n    var coordSys = seriesModel.coordinateSystem;\n    // the data in each layer are organized into a series.\n    var layerSeries = seriesModel.getLayerSeries();\n\n    // the points in each layer.\n    var timeDim = data.mapDimension('single');\n    var valueDim = data.mapDimension('value');\n    var layerPoints = map(layerSeries, function (singleLayer) {\n        return map(singleLayer.indices, function (idx) {\n            var pt = coordSys.dataToPoint(data.get(timeDim, idx));\n            pt[1] = data.get(valueDim, idx);\n            return pt;\n        });\n    });\n\n    var base = computeBaseline(layerPoints);\n    var baseLine = base.y0;\n    var ky = height / base.max;\n\n    // set layout information for each item.\n    var n = layerSeries.length;\n    var m = layerSeries[0].indices.length;\n    var baseY0;\n    for (var j = 0; j < m; ++j) {\n        baseY0 = baseLine[j] * ky;\n        data.setItemLayout(layerSeries[0].indices[j], {\n            layerIndex: 0,\n            x: layerPoints[0][j][0],\n            y0: baseY0,\n            y: layerPoints[0][j][1] * ky\n        });\n        for (var i = 1; i < n; ++i) {\n            baseY0 += layerPoints[i - 1][j][1] * ky;\n            data.setItemLayout(layerSeries[i].indices[j], {\n                layerIndex: i,\n                x: layerPoints[i][j][0],\n                y0: baseY0,\n                y: layerPoints[i][j][1] * ky\n            });\n        }\n    }\n}\n\n/**\n * Compute the baseLine of the rawdata\n * Inspired by Lee Byron's paper Stacked Graphs - Geometry & Aesthetics\n *\n * @param  {Array.<Array>} data  the points in each layer\n * @return {Object}\n */\nfunction computeBaseline(data) {\n    var layerNum = data.length;\n    var pointNum = data[0].length;\n    var sums = [];\n    var y0 = [];\n    var max = 0;\n    var temp;\n    var base = {};\n\n    for (var i = 0; i < pointNum; ++i) {\n        for (var j = 0, temp = 0; j < layerNum; ++j) {\n            temp += data[j][i][1];\n        }\n        if (temp > max) {\n            max = temp;\n        }\n        sums.push(temp);\n    }\n\n    for (var k = 0; k < pointNum; ++k) {\n        y0[k] = (max - sums[k]) / 2;\n    }\n    max = 0;\n\n    for (var l = 0; l < pointNum; ++l) {\n        var sum = sums[l] + y0[l];\n        if (sum > max) {\n            max = sum;\n        }\n    }\n    base.y0 = y0;\n    base.max = max;\n\n    return base;\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar themeRiverVisual = function (ecModel) {\n    ecModel.eachSeriesByType('themeRiver', function (seriesModel) {\n        var data = seriesModel.getData();\n        var rawData = seriesModel.getRawData();\n        var colorList = seriesModel.get('color');\n        var idxMap = createHashMap();\n\n        data.each(function (idx) {\n            idxMap.set(data.getRawIndex(idx), idx);\n        });\n\n        rawData.each(function (rawIndex) {\n            var name = rawData.getName(rawIndex);\n            var color = colorList[(seriesModel.nameMap.get(name) - 1) % colorList.length];\n\n            rawData.setItemVisual(rawIndex, 'color', color);\n\n            var idx = idxMap.get(rawIndex);\n\n            if (idx != null) {\n                data.setItemVisual(idx, 'color', color);\n            }\n        });\n    });\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nregisterLayout(themeRiverLayout);\nregisterVisual(themeRiverVisual);\nregisterProcessor(dataFilter('themeRiver'));\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nSeriesModel.extend({\n\n    type: 'series.sunburst',\n\n    /**\n     * @type {module:echarts/data/Tree~Node}\n     */\n    _viewRoot: null,\n\n    getInitialData: function (option, ecModel) {\n        // Create a virtual root.\n        var root = { name: option.name, children: option.data };\n\n        completeTreeValue$1(root);\n\n        var levels = option.levels || [];\n\n        // levels = option.levels = setDefault(levels, ecModel);\n\n        var treeOption = {};\n\n        treeOption.levels = levels;\n\n        // Make sure always a new tree is created when setOption,\n        // in TreemapView, we check whether oldTree === newTree\n        // to choose mappings approach among old shapes and new shapes.\n        return Tree.createTree(root, this, treeOption).data;\n    },\n\n    optionUpdated: function () {\n        this.resetViewRoot();\n    },\n\n    /*\n     * @override\n     */\n    getDataParams: function (dataIndex) {\n        var params = SeriesModel.prototype.getDataParams.apply(this, arguments);\n\n        var node = this.getData().tree.getNodeByDataIndex(dataIndex);\n        params.treePathInfo = wrapTreePathInfo(node, this);\n\n        return params;\n    },\n\n    defaultOption: {\n        zlevel: 0,\n        z: 2,\n\n        // 默认全局居中\n        center: ['50%', '50%'],\n        radius: [0, '75%'],\n        // 默认顺时针\n        clockwise: true,\n        startAngle: 90,\n        // 最小角度改为0\n        minAngle: 0,\n\n        percentPrecision: 2,\n\n        // If still show when all data zero.\n        stillShowZeroSum: true,\n\n        // Policy of highlighting pieces when hover on one\n        // Valid values: 'none' (for not downplay others), 'descendant',\n        // 'ancestor', 'self'\n        highlightPolicy: 'descendant',\n\n        // 'rootToNode', 'link', or false\n        nodeClick: 'rootToNode',\n\n        renderLabelForZeroData: false,\n\n        label: {\n            // could be: 'radial', 'tangential', or 'none'\n            rotate: 'radial',\n            show: true,\n            opacity: 1,\n            // 'left' is for inner side of inside, and 'right' is for outter\n            // side for inside\n            align: 'center',\n            position: 'inside',\n            distance: 5,\n            silent: true,\n            emphasis: {}\n        },\n        itemStyle: {\n            borderWidth: 1,\n            borderColor: 'white',\n            borderType: 'solid',\n            shadowBlur: 0,\n            shadowColor: 'rgba(0, 0, 0, 0.2)',\n            shadowOffsetX: 0,\n            shadowOffsetY: 0,\n            opacity: 1,\n            emphasis: {},\n            highlight: {\n                opacity: 1\n            },\n            downplay: {\n                opacity: 0.9\n            }\n        },\n\n        // Animation type canbe expansion, scale\n        animationType: 'expansion',\n        animationDuration: 1000,\n        animationDurationUpdate: 500,\n        animationEasing: 'cubicOut',\n\n        data: [],\n\n        levels: [],\n\n        /**\n         * Sort order.\n         *\n         * Valid values: 'desc', 'asc', null, or callback function.\n         * 'desc' and 'asc' for descend and ascendant order;\n         * null for not sorting;\n         * example of callback function:\n         * function(nodeA, nodeB) {\n         *     return nodeA.getValue() - nodeB.getValue();\n         * }\n         */\n        sort: 'desc'\n    },\n\n    getViewRoot: function () {\n        return this._viewRoot;\n    },\n\n    /**\n     * @param {module:echarts/data/Tree~Node} [viewRoot]\n     */\n    resetViewRoot: function (viewRoot) {\n        viewRoot\n            ? (this._viewRoot = viewRoot)\n            : (viewRoot = this._viewRoot);\n\n        var root = this.getRawData().tree.root;\n\n        if (!viewRoot\n            || (viewRoot !== root && !root.contains(viewRoot))\n        ) {\n            this._viewRoot = root;\n        }\n    }\n});\n\n\n\n/**\n * @param {Object} dataNode\n */\nfunction completeTreeValue$1(dataNode) {\n    // Postorder travel tree.\n    // If value of none-leaf node is not set,\n    // calculate it by suming up the value of all children.\n    var sum = 0;\n\n    each$1(dataNode.children, function (child) {\n\n        completeTreeValue$1(child);\n\n        var childValue = child.value;\n        isArray(childValue) && (childValue = childValue[0]);\n\n        sum += childValue;\n    });\n\n    var thisValue = dataNode.value;\n    if (isArray(thisValue)) {\n        thisValue = thisValue[0];\n    }\n\n    if (thisValue == null || isNaN(thisValue)) {\n        thisValue = sum;\n    }\n    // Value should not less than 0.\n    if (thisValue < 0) {\n        thisValue = 0;\n    }\n\n    isArray(dataNode.value)\n        ? (dataNode.value[0] = thisValue)\n        : (dataNode.value = thisValue);\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar NodeHighlightPolicy = {\n    NONE: 'none', // not downplay others\n    DESCENDANT: 'descendant',\n    ANCESTOR: 'ancestor',\n    SELF: 'self'\n};\n\nvar DEFAULT_SECTOR_Z = 2;\nvar DEFAULT_TEXT_Z = 4;\n\n/**\n * Sunburstce of Sunburst including Sector, Label, LabelLine\n * @constructor\n * @extends {module:zrender/graphic/Group}\n */\nfunction SunburstPiece(node, seriesModel, ecModel) {\n\n    Group.call(this);\n\n    var sector = new Sector({\n        z2: DEFAULT_SECTOR_Z\n    });\n    sector.seriesIndex = seriesModel.seriesIndex;\n\n    var text = new Text({\n        z2: DEFAULT_TEXT_Z,\n        silent: node.getModel('label').get('silent')\n    });\n    this.add(sector);\n    this.add(text);\n\n    this.updateData(true, node, 'normal', seriesModel, ecModel);\n\n    // Hover to change label and labelLine\n    function onEmphasis() {\n        text.ignore = text.hoverIgnore;\n    }\n    function onNormal() {\n        text.ignore = text.normalIgnore;\n    }\n    this.on('emphasis', onEmphasis)\n        .on('normal', onNormal)\n        .on('mouseover', onEmphasis)\n        .on('mouseout', onNormal);\n}\n\nvar SunburstPieceProto = SunburstPiece.prototype;\n\nSunburstPieceProto.updateData = function (\n    firstCreate,\n    node,\n    state,\n    seriesModel,\n    ecModel\n) {\n    this.node = node;\n    node.piece = this;\n\n    seriesModel = seriesModel || this._seriesModel;\n    ecModel = ecModel || this._ecModel;\n\n    var sector = this.childAt(0);\n    sector.dataIndex = node.dataIndex;\n\n    var itemModel = node.getModel();\n    var layout = node.getLayout();\n    // if (!layout) {\n    //     console.log(node.getLayout());\n    // }\n    var sectorShape = extend({}, layout);\n    sectorShape.label = null;\n\n    var visualColor = getNodeColor(node, seriesModel, ecModel);\n\n    fillDefaultColor(node, seriesModel, visualColor);\n\n    var normalStyle = itemModel.getModel('itemStyle').getItemStyle();\n    var style;\n    if (state === 'normal') {\n        style = normalStyle;\n    }\n    else {\n        var stateStyle = itemModel.getModel(state + '.itemStyle')\n            .getItemStyle();\n        style = merge(stateStyle, normalStyle);\n    }\n    style = defaults(\n        {\n            lineJoin: 'bevel',\n            fill: style.fill || visualColor\n        },\n        style\n    );\n\n    if (firstCreate) {\n        sector.setShape(sectorShape);\n        sector.shape.r = layout.r0;\n        updateProps(\n            sector,\n            {\n                shape: {\n                    r: layout.r\n                }\n            },\n            seriesModel,\n            node.dataIndex\n        );\n        sector.useStyle(style);\n    }\n    else if (typeof style.fill === 'object' && style.fill.type\n        || typeof sector.style.fill === 'object' && sector.style.fill.type\n    ) {\n        // Disable animation for gradient since no interpolation method\n        // is supported for gradient\n        updateProps(sector, {\n            shape: sectorShape\n        }, seriesModel);\n        sector.useStyle(style);\n    }\n    else {\n        updateProps(sector, {\n            shape: sectorShape,\n            style: style\n        }, seriesModel);\n    }\n\n    this._updateLabel(seriesModel, visualColor, state);\n\n    var cursorStyle = itemModel.getShallow('cursor');\n    cursorStyle && sector.attr('cursor', cursorStyle);\n\n    if (firstCreate) {\n        var highlightPolicy = seriesModel.getShallow('highlightPolicy');\n        this._initEvents(sector, node, seriesModel, highlightPolicy);\n    }\n\n    this._seriesModel = seriesModel || this._seriesModel;\n    this._ecModel = ecModel || this._ecModel;\n};\n\nSunburstPieceProto.onEmphasis = function (highlightPolicy) {\n    var that = this;\n    this.node.hostTree.root.eachNode(function (n) {\n        if (n.piece) {\n            if (that.node === n) {\n                n.piece.updateData(false, n, 'emphasis');\n            }\n            else if (isNodeHighlighted(n, that.node, highlightPolicy)) {\n                n.piece.childAt(0).trigger('highlight');\n            }\n            else if (highlightPolicy !== NodeHighlightPolicy.NONE) {\n                n.piece.childAt(0).trigger('downplay');\n            }\n        }\n    });\n};\n\nSunburstPieceProto.onNormal = function () {\n    this.node.hostTree.root.eachNode(function (n) {\n        if (n.piece) {\n            n.piece.updateData(false, n, 'normal');\n        }\n    });\n};\n\nSunburstPieceProto.onHighlight = function () {\n    this.updateData(false, this.node, 'highlight');\n};\n\nSunburstPieceProto.onDownplay = function () {\n    this.updateData(false, this.node, 'downplay');\n};\n\nSunburstPieceProto._updateLabel = function (seriesModel, visualColor, state) {\n    var itemModel = this.node.getModel();\n    var normalModel = itemModel.getModel('label');\n    var labelModel = state === 'normal' || state === 'emphasis'\n        ? normalModel\n        : itemModel.getModel(state + '.label');\n    var labelHoverModel = itemModel.getModel('emphasis.label');\n\n    var text = retrieve(\n        seriesModel.getFormattedLabel(\n            this.node.dataIndex, state, null, null, 'label'\n        ),\n        this.node.name\n    );\n    if (getLabelAttr('show') === false) {\n        text = '';\n    }\n\n    var layout = this.node.getLayout();\n    var labelMinAngle = labelModel.get('minAngle');\n    if (labelMinAngle == null) {\n        labelMinAngle = normalModel.get('minAngle');\n    }\n    labelMinAngle = labelMinAngle / 180 * Math.PI;\n    var angle = layout.endAngle - layout.startAngle;\n    if (labelMinAngle != null && Math.abs(angle) < labelMinAngle) {\n        // Not displaying text when angle is too small\n        text = '';\n    }\n\n    var label = this.childAt(1);\n\n    setLabelStyle(\n        label.style, label.hoverStyle || {}, normalModel, labelHoverModel,\n        {\n            defaultText: labelModel.getShallow('show') ? text : null,\n            autoColor: visualColor,\n            useInsideStyle: true\n        }\n    );\n\n    var midAngle = (layout.startAngle + layout.endAngle) / 2;\n    var dx = Math.cos(midAngle);\n    var dy = Math.sin(midAngle);\n\n    var r;\n    var labelPosition = getLabelAttr('position');\n    var labelPadding = getLabelAttr('distance') || 0;\n    var textAlign = getLabelAttr('align');\n    if (labelPosition === 'outside') {\n        r = layout.r + labelPadding;\n        textAlign = midAngle > Math.PI / 2 ? 'right' : 'left';\n    }\n    else {\n        if (!textAlign || textAlign === 'center') {\n            r = (layout.r + layout.r0) / 2;\n            textAlign = 'center';\n        }\n        else if (textAlign === 'left') {\n            r = layout.r0 + labelPadding;\n            if (midAngle > Math.PI / 2) {\n                textAlign = 'right';\n            }\n        }\n        else if (textAlign === 'right') {\n            r = layout.r - labelPadding;\n            if (midAngle > Math.PI / 2) {\n                textAlign = 'left';\n            }\n        }\n    }\n\n    label.attr('style', {\n        text: text,\n        textAlign: textAlign,\n        textVerticalAlign: getLabelAttr('verticalAlign') || 'middle',\n        opacity: getLabelAttr('opacity')\n    });\n\n    var textX = r * dx + layout.cx;\n    var textY = r * dy + layout.cy;\n    label.attr('position', [textX, textY]);\n\n    var rotateType = getLabelAttr('rotate');\n    var rotate = 0;\n    if (rotateType === 'radial') {\n        rotate = -midAngle;\n        if (rotate < -Math.PI / 2) {\n            rotate += Math.PI;\n        }\n    }\n    else if (rotateType === 'tangential') {\n        rotate = Math.PI / 2 - midAngle;\n        if (rotate > Math.PI / 2) {\n            rotate -= Math.PI;\n        }\n        else if (rotate < -Math.PI / 2) {\n            rotate += Math.PI;\n        }\n    } else if (typeof rotateType === 'number') {\n        rotate = rotateType * Math.PI / 180;\n    }\n    label.attr('rotation', rotate);\n\n    function getLabelAttr(name) {\n        var stateAttr = labelModel.get(name);\n        if (stateAttr == null) {\n            return normalModel.get(name);\n        }\n        else {\n            return stateAttr;\n        }\n    }\n};\n\nSunburstPieceProto._initEvents = function (\n    sector,\n    node,\n    seriesModel,\n    highlightPolicy\n) {\n    sector.off('mouseover').off('mouseout').off('emphasis').off('normal');\n\n    var that = this;\n    var onEmphasis = function () {\n        that.onEmphasis(highlightPolicy);\n    };\n    var onNormal = function () {\n        that.onNormal();\n    };\n    var onDownplay = function () {\n        that.onDownplay();\n    };\n    var onHighlight = function () {\n        that.onHighlight();\n    };\n\n    if (seriesModel.isAnimationEnabled()) {\n        sector\n            .on('mouseover', onEmphasis)\n            .on('mouseout', onNormal)\n            .on('emphasis', onEmphasis)\n            .on('normal', onNormal)\n            .on('downplay', onDownplay)\n            .on('highlight', onHighlight);\n    }\n};\n\ninherits(SunburstPiece, Group);\n\n/**\n * Get node color\n *\n * @param {TreeNode} node the node to get color\n * @param {module:echarts/model/Series} seriesModel series\n * @param {module:echarts/model/Global} ecModel echarts defaults\n */\nfunction getNodeColor(node, seriesModel, ecModel) {\n    // Color from visualMap\n    var visualColor = node.getVisual('color');\n    var visualMetaList = node.getVisual('visualMeta');\n    if (!visualMetaList || visualMetaList.length === 0) {\n        // Use first-generation color if has no visualMap\n        visualColor = null;\n    }\n\n    // Self color or level color\n    var color = node.getModel('itemStyle').get('color');\n    if (color) {\n        return color;\n    }\n    else if (visualColor) {\n        // Color mapping\n        return visualColor;\n    }\n    else if (node.depth === 0) {\n        // Virtual root node\n        return ecModel.option.color[0];\n    }\n    else {\n        // First-generation color\n        var length = ecModel.option.color.length;\n        color = ecModel.option.color[getRootId(node) % length];\n    }\n    return color;\n}\n\n/**\n * Get index of root in sorted order\n *\n * @param {TreeNode} node current node\n * @return {number} index in root\n */\nfunction getRootId(node) {\n    var ancestor = node;\n    while (ancestor.depth > 1) {\n        ancestor = ancestor.parentNode;\n    }\n\n    var virtualRoot = node.getAncestors()[0];\n    return indexOf(virtualRoot.children, ancestor);\n}\n\nfunction isNodeHighlighted(node, activeNode, policy) {\n    if (policy === NodeHighlightPolicy.NONE) {\n        return false;\n    }\n    else if (policy === NodeHighlightPolicy.SELF) {\n        return node === activeNode;\n    }\n    else if (policy === NodeHighlightPolicy.ANCESTOR) {\n        return node === activeNode || node.isAncestorOf(activeNode);\n    }\n    else {\n        return node === activeNode || node.isDescendantOf(activeNode);\n    }\n}\n\n// Fix tooltip callback function params.color incorrect when pick a default color\nfunction fillDefaultColor(node, seriesModel, color) {\n    var data = seriesModel.getData();\n    data.setItemVisual(node.dataIndex, 'color', color);\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar ROOT_TO_NODE_ACTION = 'sunburstRootToNode';\n\nvar SunburstView = Chart.extend({\n\n    type: 'sunburst',\n\n    init: function () {\n    },\n\n    render: function (seriesModel, ecModel, api, payload) {\n        var that = this;\n\n        this.seriesModel = seriesModel;\n        this.api = api;\n        this.ecModel = ecModel;\n\n        var data = seriesModel.getData();\n        var virtualRoot = data.tree.root;\n\n        var newRoot = seriesModel.getViewRoot();\n\n        var group = this.group;\n\n        var renderLabelForZeroData = seriesModel.get('renderLabelForZeroData');\n\n        var newChildren = [];\n        newRoot.eachNode(function (node) {\n            newChildren.push(node);\n        });\n        var oldChildren = this._oldChildren || [];\n\n        dualTravel(newChildren, oldChildren);\n\n        renderRollUp(virtualRoot, newRoot);\n\n        if (payload && payload.highlight && payload.highlight.piece) {\n            var highlightPolicy = seriesModel.getShallow('highlightPolicy');\n            payload.highlight.piece.onEmphasis(highlightPolicy);\n        }\n        else if (payload && payload.unhighlight) {\n            var piece = this.virtualPiece;\n            if (!piece && virtualRoot.children.length) {\n                piece = virtualRoot.children[0].piece;\n            }\n            if (piece) {\n                piece.onNormal();\n            }\n        }\n\n        this._initEvents();\n\n        this._oldChildren = newChildren;\n\n        function dualTravel(newChildren, oldChildren) {\n            if (newChildren.length === 0 && oldChildren.length === 0) {\n                return;\n            }\n\n            new DataDiffer(oldChildren, newChildren, getKey, getKey)\n                .add(processNode)\n                .update(processNode)\n                .remove(curry(processNode, null))\n                .execute();\n\n            function getKey(node) {\n                return node.getId();\n            }\n\n            function processNode(newId, oldId) {\n                var newNode = newId == null ? null : newChildren[newId];\n                var oldNode = oldId == null ? null : oldChildren[oldId];\n\n                doRenderNode(newNode, oldNode);\n            }\n        }\n\n        function doRenderNode(newNode, oldNode) {\n            if (!renderLabelForZeroData && newNode && !newNode.getValue()) {\n                // Not render data with value 0\n                newNode = null;\n            }\n\n            if (newNode !== virtualRoot && oldNode !== virtualRoot) {\n                if (oldNode && oldNode.piece) {\n                    if (newNode) {\n                        // Update\n                        oldNode.piece.updateData(\n                            false, newNode, 'normal', seriesModel, ecModel);\n\n                        // For tooltip\n                        data.setItemGraphicEl(newNode.dataIndex, oldNode.piece);\n                    }\n                    else {\n                        // Remove\n                        removeNode(oldNode);\n                    }\n                }\n                else if (newNode) {\n                    // Add\n                    var piece = new SunburstPiece(\n                        newNode,\n                        seriesModel,\n                        ecModel\n                    );\n                    group.add(piece);\n\n                    // For tooltip\n                    data.setItemGraphicEl(newNode.dataIndex, piece);\n                }\n            }\n        }\n\n        function removeNode(node) {\n            if (!node) {\n                return;\n            }\n\n            if (node.piece) {\n                group.remove(node.piece);\n                node.piece = null;\n            }\n        }\n\n        function renderRollUp(virtualRoot, viewRoot) {\n            if (viewRoot.depth > 0) {\n                // Render\n                if (that.virtualPiece) {\n                    // Update\n                    that.virtualPiece.updateData(\n                        false, virtualRoot, 'normal', seriesModel, ecModel);\n                }\n                else {\n                    // Add\n                    that.virtualPiece = new SunburstPiece(\n                        virtualRoot,\n                        seriesModel,\n                        ecModel\n                    );\n                    group.add(that.virtualPiece);\n                }\n\n                if (viewRoot.piece._onclickEvent) {\n                    viewRoot.piece.off('click', viewRoot.piece._onclickEvent);\n                }\n                var event = function (e) {\n                    that._rootToNode(viewRoot.parentNode);\n                };\n                viewRoot.piece._onclickEvent = event;\n                that.virtualPiece.on('click', event);\n            }\n            else if (that.virtualPiece) {\n                // Remove\n                group.remove(that.virtualPiece);\n                that.virtualPiece = null;\n            }\n        }\n    },\n\n    dispose: function () {\n    },\n\n    /**\n     * @private\n     */\n    _initEvents: function () {\n        var that = this;\n\n        var event = function (e) {\n            var targetFound = false;\n            var viewRoot = that.seriesModel.getViewRoot();\n            viewRoot.eachNode(function (node) {\n                if (!targetFound\n                    && node.piece && node.piece.childAt(0) === e.target\n                ) {\n                    var nodeClick = node.getModel().get('nodeClick');\n                    if (nodeClick === 'rootToNode') {\n                        that._rootToNode(node);\n                    }\n                    else if (nodeClick === 'link') {\n                        var itemModel = node.getModel();\n                        var link = itemModel.get('link');\n                        if (link) {\n                            var linkTarget = itemModel.get('target', true)\n                                || '_blank';\n                            window.open(link, linkTarget);\n                        }\n                    }\n                    targetFound = true;\n                }\n            });\n        };\n\n        if (this.group._onclickEvent) {\n            this.group.off('click', this.group._onclickEvent);\n        }\n        this.group.on('click', event);\n        this.group._onclickEvent = event;\n    },\n\n    /**\n     * @private\n     */\n    _rootToNode: function (node) {\n        if (node !== this.seriesModel.getViewRoot()) {\n            this.api.dispatchAction({\n                type: ROOT_TO_NODE_ACTION,\n                from: this.uid,\n                seriesId: this.seriesModel.id,\n                targetNode: node\n            });\n        }\n    },\n\n    /**\n     * @implement\n     */\n    containPoint: function (point, seriesModel) {\n        var treeRoot = seriesModel.getData();\n        var itemLayout = treeRoot.getItemLayout(0);\n        if (itemLayout) {\n            var dx = point[0] - itemLayout.cx;\n            var dy = point[1] - itemLayout.cy;\n            var radius = Math.sqrt(dx * dx + dy * dy);\n            return radius <= itemLayout.r && radius >= itemLayout.r0;\n        }\n    }\n\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * @file Sunburst action\n */\n\nvar ROOT_TO_NODE_ACTION$1 = 'sunburstRootToNode';\n\nregisterAction(\n    {type: ROOT_TO_NODE_ACTION$1, update: 'updateView'},\n    function (payload, ecModel) {\n\n        ecModel.eachComponent(\n            {mainType: 'series', subType: 'sunburst', query: payload},\n            handleRootToNode\n        );\n\n        function handleRootToNode(model, index) {\n            var targetInfo = retrieveTargetInfo(payload, [ROOT_TO_NODE_ACTION$1], model);\n\n            if (targetInfo) {\n                var originViewRoot = model.getViewRoot();\n                if (originViewRoot) {\n                    payload.direction = aboveViewRoot(originViewRoot, targetInfo.node)\n                        ? 'rollUp' : 'drillDown';\n                }\n                model.resetViewRoot(targetInfo.node);\n            }\n        }\n    }\n);\n\n\nvar HIGHLIGHT_ACTION = 'sunburstHighlight';\n\nregisterAction(\n    {type: HIGHLIGHT_ACTION, update: 'updateView'},\n    function (payload, ecModel) {\n\n        ecModel.eachComponent(\n            {mainType: 'series', subType: 'sunburst', query: payload},\n            handleHighlight\n        );\n\n        function handleHighlight(model, index) {\n            var targetInfo = retrieveTargetInfo(payload, [HIGHLIGHT_ACTION], model);\n\n            if (targetInfo) {\n                payload.highlight = targetInfo.node;\n            }\n        }\n    }\n);\n\n\nvar UNHIGHLIGHT_ACTION = 'sunburstUnhighlight';\n\nregisterAction(\n    {type: UNHIGHLIGHT_ACTION, update: 'updateView'},\n    function (payload, ecModel) {\n\n        ecModel.eachComponent(\n            {mainType: 'series', subType: 'sunburst', query: payload},\n            handleUnhighlight\n        );\n\n        function handleUnhighlight(model, index) {\n            payload.unhighlight = true;\n        }\n    }\n);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\nvar RADIAN$2 = Math.PI / 180;\n\nvar sunburstLayout = function (seriesType, ecModel, api, payload) {\n    ecModel.eachSeriesByType(seriesType, function (seriesModel) {\n        var center = seriesModel.get('center');\n        var radius = seriesModel.get('radius');\n\n        if (!isArray(radius)) {\n            radius = [0, radius];\n        }\n        if (!isArray(center)) {\n            center = [center, center];\n        }\n\n        var width = api.getWidth();\n        var height = api.getHeight();\n        var size = Math.min(width, height);\n        var cx = parsePercent$1(center[0], width);\n        var cy = parsePercent$1(center[1], height);\n        var r0 = parsePercent$1(radius[0], size / 2);\n        var r = parsePercent$1(radius[1], size / 2);\n\n        var startAngle = -seriesModel.get('startAngle') * RADIAN$2;\n        var minAngle = seriesModel.get('minAngle') * RADIAN$2;\n\n        var virtualRoot = seriesModel.getData().tree.root;\n        var treeRoot = seriesModel.getViewRoot();\n        var rootDepth = treeRoot.depth;\n\n        var sort = seriesModel.get('sort');\n        if (sort != null) {\n            initChildren$1(treeRoot, sort);\n        }\n\n        var validDataCount = 0;\n        each$1(treeRoot.children, function (child) {\n            !isNaN(child.getValue()) && validDataCount++;\n        });\n\n        var sum = treeRoot.getValue();\n        // Sum may be 0\n        var unitRadian = Math.PI / (sum || validDataCount) * 2;\n\n        var renderRollupNode = treeRoot.depth > 0;\n        var levels = treeRoot.height - (renderRollupNode ? -1 : 1);\n        var rPerLevel = (r - r0) / (levels || 1);\n\n        var clockwise = seriesModel.get('clockwise');\n\n        var stillShowZeroSum = seriesModel.get('stillShowZeroSum');\n\n        // In the case some sector angle is smaller than minAngle\n        var dir = clockwise ? 1 : -1;\n\n        /**\n         * Render a tree\n         * @return increased angle\n         */\n        var renderNode = function (node, startAngle) {\n            if (!node) {\n                return;\n            }\n\n            var endAngle = startAngle;\n\n            // Render self\n            if (node !== virtualRoot) {\n                // Tree node is virtual, so it doesn't need to be drawn\n                var value = node.getValue();\n\n                var angle = (sum === 0 && stillShowZeroSum)\n                    ? unitRadian : (value * unitRadian);\n                if (angle < minAngle) {\n                    angle = minAngle;\n\n                }\n                else {\n\n                }\n\n                endAngle = startAngle + dir * angle;\n\n                var depth = node.depth - rootDepth\n                    - (renderRollupNode ? -1 : 1);\n                var rStart = r0 + rPerLevel * depth;\n                var rEnd = r0 + rPerLevel * (depth + 1);\n\n                var itemModel = node.getModel();\n                if (itemModel.get('r0') != null) {\n                    rStart = parsePercent$1(itemModel.get('r0'), size / 2);\n                }\n                if (itemModel.get('r') != null) {\n                    rEnd = parsePercent$1(itemModel.get('r'), size / 2);\n                }\n\n                node.setLayout({\n                    angle: angle,\n                    startAngle: startAngle,\n                    endAngle: endAngle,\n                    clockwise: clockwise,\n                    cx: cx,\n                    cy: cy,\n                    r0: rStart,\n                    r: rEnd\n                });\n            }\n\n            // Render children\n            if (node.children && node.children.length) {\n                // currentAngle = startAngle;\n                var siblingAngle = 0;\n                each$1(node.children, function (node) {\n                    siblingAngle += renderNode(node, startAngle + siblingAngle);\n                });\n            }\n\n            return endAngle - startAngle;\n        };\n\n        // Virtual root node for roll up\n        if (renderRollupNode) {\n            var rStart = r0;\n            var rEnd = r0 + rPerLevel;\n\n            var angle = Math.PI * 2;\n            virtualRoot.setLayout({\n                angle: angle,\n                startAngle: startAngle,\n                endAngle: startAngle + angle,\n                clockwise: clockwise,\n                cx: cx,\n                cy: cy,\n                r0: rStart,\n                r: rEnd\n            });\n        }\n\n        renderNode(treeRoot, startAngle);\n    });\n};\n\n/**\n * Init node children by order and update visual\n *\n * @param {TreeNode} node  root node\n * @param {boolean}  isAsc if is in ascendant order\n */\nfunction initChildren$1(node, isAsc) {\n    var children = node.children || [];\n\n    node.children = sort$2(children, isAsc);\n\n    // Init children recursively\n    if (children.length) {\n        each$1(node.children, function (child) {\n            initChildren$1(child, isAsc);\n        });\n    }\n}\n\n/**\n * Sort children nodes\n *\n * @param {TreeNode[]}               children children of node to be sorted\n * @param {string | function | null} sort sort method\n *                                   See SunburstSeries.js for details.\n */\nfunction sort$2(children, sortOrder) {\n    if (typeof sortOrder === 'function') {\n        return children.sort(sortOrder);\n    }\n    else {\n        var isAsc = sortOrder === 'asc';\n        return children.sort(function (a, b) {\n            var diff = (a.getValue() - b.getValue()) * (isAsc ? 1 : -1);\n            return diff === 0\n                ? (a.dataIndex - b.dataIndex) * (isAsc ? -1 : 1)\n                : diff;\n        });\n    }\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nregisterVisual(curry(dataColor, 'sunburst'));\nregisterLayout(curry(sunburstLayout, 'sunburst'));\nregisterProcessor(curry(dataFilter, 'sunburst'));\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nfunction dataToCoordSize(dataSize, dataItem) {\n    // dataItem is necessary in log axis.\n    dataItem = dataItem || [0, 0];\n    return map(['x', 'y'], function (dim, dimIdx) {\n        var axis = this.getAxis(dim);\n        var val = dataItem[dimIdx];\n        var halfSize = dataSize[dimIdx] / 2;\n        return axis.type === 'category'\n            ? axis.getBandWidth()\n            : Math.abs(axis.dataToCoord(val - halfSize) - axis.dataToCoord(val + halfSize));\n    }, this);\n}\n\nvar prepareCartesian2d = function (coordSys) {\n    var rect = coordSys.grid.getRect();\n    return {\n        coordSys: {\n            // The name exposed to user is always 'cartesian2d' but not 'grid'.\n            type: 'cartesian2d',\n            x: rect.x,\n            y: rect.y,\n            width: rect.width,\n            height: rect.height\n        },\n        api: {\n            coord: function (data) {\n                // do not provide \"out\" param\n                return coordSys.dataToPoint(data);\n            },\n            size: bind(dataToCoordSize, coordSys)\n        }\n    };\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nfunction dataToCoordSize$1(dataSize, dataItem) {\n    dataItem = dataItem || [0, 0];\n    return map([0, 1], function (dimIdx) {\n        var val = dataItem[dimIdx];\n        var halfSize = dataSize[dimIdx] / 2;\n        var p1 = [];\n        var p2 = [];\n        p1[dimIdx] = val - halfSize;\n        p2[dimIdx] = val + halfSize;\n        p1[1 - dimIdx] = p2[1 - dimIdx] = dataItem[1 - dimIdx];\n        return Math.abs(this.dataToPoint(p1)[dimIdx] - this.dataToPoint(p2)[dimIdx]);\n    }, this);\n}\n\nvar prepareGeo = function (coordSys) {\n    var rect = coordSys.getBoundingRect();\n    return {\n        coordSys: {\n            type: 'geo',\n            x: rect.x,\n            y: rect.y,\n            width: rect.width,\n            height: rect.height,\n            zoom: coordSys.getZoom()\n        },\n        api: {\n            coord: function (data) {\n                // do not provide \"out\" and noRoam param,\n                // Compatible with this usage:\n                // echarts.util.map(item.points, api.coord)\n                return coordSys.dataToPoint(data);\n            },\n            size: bind(dataToCoordSize$1, coordSys)\n        }\n    };\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nfunction dataToCoordSize$2(dataSize, dataItem) {\n    // dataItem is necessary in log axis.\n    var axis = this.getAxis();\n    var val = dataItem instanceof Array ? dataItem[0] : dataItem;\n    var halfSize = (dataSize instanceof Array ? dataSize[0] : dataSize) / 2;\n    return axis.type === 'category'\n        ? axis.getBandWidth()\n        : Math.abs(axis.dataToCoord(val - halfSize) - axis.dataToCoord(val + halfSize));\n}\n\nvar prepareSingleAxis = function (coordSys) {\n    var rect = coordSys.getRect();\n\n    return {\n        coordSys: {\n            type: 'singleAxis',\n            x: rect.x,\n            y: rect.y,\n            width: rect.width,\n            height: rect.height\n        },\n        api: {\n            coord: function (val) {\n                // do not provide \"out\" param\n                return coordSys.dataToPoint(val);\n            },\n            size: bind(dataToCoordSize$2, coordSys)\n        }\n    };\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nfunction dataToCoordSize$3(dataSize, dataItem) {\n    // dataItem is necessary in log axis.\n    return map(['Radius', 'Angle'], function (dim, dimIdx) {\n        var axis = this['get' + dim + 'Axis']();\n        var val = dataItem[dimIdx];\n        var halfSize = dataSize[dimIdx] / 2;\n        var method = 'dataTo' + dim;\n\n        var result = axis.type === 'category'\n            ? axis.getBandWidth()\n            : Math.abs(axis[method](val - halfSize) - axis[method](val + halfSize));\n\n        if (dim === 'Angle') {\n            result = result * Math.PI / 180;\n        }\n\n        return result;\n\n    }, this);\n}\n\nvar preparePolar = function (coordSys) {\n    var radiusAxis = coordSys.getRadiusAxis();\n    var angleAxis = coordSys.getAngleAxis();\n    var radius = radiusAxis.getExtent();\n    radius[0] > radius[1] && radius.reverse();\n\n    return {\n        coordSys: {\n            type: 'polar',\n            cx: coordSys.cx,\n            cy: coordSys.cy,\n            r: radius[1],\n            r0: radius[0]\n        },\n        api: {\n            coord: bind(function (data) {\n                var radius = radiusAxis.dataToRadius(data[0]);\n                var angle = angleAxis.dataToAngle(data[1]);\n                var coord = coordSys.coordToPoint([radius, angle]);\n                coord.push(radius, angle * Math.PI / 180);\n                return coord;\n            }),\n            size: bind(dataToCoordSize$3, coordSys)\n        }\n    };\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar prepareCalendar = function (coordSys) {\n    var rect = coordSys.getRect();\n    var rangeInfo = coordSys.getRangeInfo();\n\n    return {\n        coordSys: {\n            type: 'calendar',\n            x: rect.x,\n            y: rect.y,\n            width: rect.width,\n            height: rect.height,\n            cellWidth: coordSys.getCellWidth(),\n            cellHeight: coordSys.getCellHeight(),\n            rangeInfo: {\n                start: rangeInfo.start,\n                end: rangeInfo.end,\n                weeks: rangeInfo.weeks,\n                dayCount: rangeInfo.allDay\n            }\n        },\n        api: {\n            coord: function (data, clamp) {\n                return coordSys.dataToPoint(data, clamp);\n            }\n        }\n    };\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar CACHED_LABEL_STYLE_PROPERTIES$1 = CACHED_LABEL_STYLE_PROPERTIES;\nvar ITEM_STYLE_NORMAL_PATH = ['itemStyle'];\nvar ITEM_STYLE_EMPHASIS_PATH = ['emphasis', 'itemStyle'];\nvar LABEL_NORMAL = ['label'];\nvar LABEL_EMPHASIS = ['emphasis', 'label'];\n// Use prefix to avoid index to be the same as el.name,\n// which will cause weird udpate animation.\nvar GROUP_DIFF_PREFIX = 'e\\0\\0';\n\n\n/**\n * To reduce total package size of each coordinate systems, the modules `prepareCustom`\n * of each coordinate systems are not required by each coordinate systems directly, but\n * required by the module `custom`.\n *\n * prepareInfoForCustomSeries {Function}: optional\n *     @return {Object} {coordSys: {...}, api: {\n *         coord: function (data, clamp) {}, // return point in global.\n *         size: function (dataSize, dataItem) {} // return size of each axis in coordSys.\n *     }}\n */\nvar prepareCustoms = {\n    cartesian2d: prepareCartesian2d,\n    geo: prepareGeo,\n    singleAxis: prepareSingleAxis,\n    polar: preparePolar,\n    calendar: prepareCalendar\n};\n\n\n// ------\n// Model\n// ------\n\nSeriesModel.extend({\n\n    type: 'series.custom',\n\n    dependencies: ['grid', 'polar', 'geo', 'singleAxis', 'calendar'],\n\n    defaultOption: {\n        coordinateSystem: 'cartesian2d', // Can be set as 'none'\n        zlevel: 0,\n        z: 2,\n        legendHoverLink: true,\n\n        useTransform: true\n\n        // Cartesian coordinate system\n        // xAxisIndex: 0,\n        // yAxisIndex: 0,\n\n        // Polar coordinate system\n        // polarIndex: 0,\n\n        // Geo coordinate system\n        // geoIndex: 0,\n\n        // label: {}\n        // itemStyle: {}\n    },\n\n    /**\n     * @override\n     */\n    getInitialData: function (option, ecModel) {\n        return createListFromArray(this.getSource(), this);\n    },\n\n    /**\n     * @override\n     */\n    getDataParams: function (dataIndex, dataType, el) {\n        var params = SeriesModel.prototype.getDataParams.apply(this, arguments);\n        el && (params.info = el.info);\n        return params;\n    }\n});\n\n// -----\n// View\n// -----\n\nChart.extend({\n\n    type: 'custom',\n\n    /**\n     * @private\n     * @type {module:echarts/data/List}\n     */\n    _data: null,\n\n    /**\n     * @override\n     */\n    render: function (customSeries, ecModel, api, payload) {\n        var oldData = this._data;\n        var data = customSeries.getData();\n        var group = this.group;\n        var renderItem = makeRenderItem(customSeries, data, ecModel, api);\n\n        // By default, merge mode is applied. In most cases, custom series is\n        // used in the scenario that data amount is not large but graphic elements\n        // is complicated, where merge mode is probably necessary for optimization.\n        // For example, reuse graphic elements and only update the transform when\n        // roam or data zoom according to `actionType`.\n        data.diff(oldData)\n            .add(function (newIdx) {\n                createOrUpdate$1(\n                    null, newIdx, renderItem(newIdx, payload), customSeries, group, data\n                );\n            })\n            .update(function (newIdx, oldIdx) {\n                var el = oldData.getItemGraphicEl(oldIdx);\n                createOrUpdate$1(\n                    el, newIdx, renderItem(newIdx, payload), customSeries, group, data\n                );\n            })\n            .remove(function (oldIdx) {\n                var el = oldData.getItemGraphicEl(oldIdx);\n                el && group.remove(el);\n            })\n            .execute();\n\n        this._data = data;\n    },\n\n    incrementalPrepareRender: function (customSeries, ecModel, api) {\n        this.group.removeAll();\n        this._data = null;\n    },\n\n    incrementalRender: function (params, customSeries, ecModel, api, payload) {\n        var data = customSeries.getData();\n        var renderItem = makeRenderItem(customSeries, data, ecModel, api);\n        function setIncrementalAndHoverLayer(el) {\n            if (!el.isGroup) {\n                el.incremental = true;\n                el.useHoverLayer = true;\n            }\n        }\n        for (var idx = params.start; idx < params.end; idx++) {\n            var el = createOrUpdate$1(null, idx, renderItem(idx, payload), customSeries, this.group, data);\n            el.traverse(setIncrementalAndHoverLayer);\n        }\n    },\n\n    /**\n     * @override\n     */\n    dispose: noop,\n\n    /**\n     * @override\n     */\n    filterForExposedEvent: function (eventType, query, targetEl, packedEvent) {\n        var elementName = query.element;\n        if (elementName == null || targetEl.name === elementName) {\n            return true;\n        }\n\n        // Enable to give a name on a group made by `renderItem`, and listen\n        // events that triggerd by its descendents.\n        while ((targetEl = targetEl.parent) && targetEl !== this.group) {\n            if (targetEl.name === elementName) {\n                return true;\n            }\n        }\n\n        return false;\n    }\n});\n\n\nfunction createEl(elOption) {\n    var graphicType = elOption.type;\n    var el;\n\n    if (graphicType === 'path') {\n        var shape = elOption.shape;\n        // Using pathRect brings convenience to users sacle svg path.\n        var pathRect = (shape.width != null && shape.height != null)\n            ? {\n                x: shape.x || 0,\n                y: shape.y || 0,\n                width: shape.width,\n                height: shape.height\n            }\n            : null;\n        var pathData = getPathData(shape);\n        // Path is also used for icon, so layout 'center' by default.\n        el = makePath(pathData, null, pathRect, shape.layout || 'center');\n        el.__customPathData = pathData;\n    }\n    else if (graphicType === 'image') {\n        el = new ZImage({});\n        el.__customImagePath = elOption.style.image;\n    }\n    else if (graphicType === 'text') {\n        el = new Text({});\n        el.__customText = elOption.style.text;\n    }\n    else {\n        var Clz = graphic[graphicType.charAt(0).toUpperCase() + graphicType.slice(1)];\n\n        if (__DEV__) {\n            assert$1(Clz, 'graphic type \"' + graphicType + '\" can not be found.');\n        }\n\n        el = new Clz();\n    }\n\n    el.__customGraphicType = graphicType;\n    el.name = elOption.name;\n\n    return el;\n}\n\nfunction updateEl(el, dataIndex, elOption, animatableModel, data, isInit, isRoot) {\n    var transitionProps = {};\n    var elOptionStyle = elOption.style || {};\n\n    elOption.shape && (transitionProps.shape = clone(elOption.shape));\n    elOption.position && (transitionProps.position = elOption.position.slice());\n    elOption.scale && (transitionProps.scale = elOption.scale.slice());\n    elOption.origin && (transitionProps.origin = elOption.origin.slice());\n    elOption.rotation && (transitionProps.rotation = elOption.rotation);\n\n    if (el.type === 'image' && elOption.style) {\n        var targetStyle = transitionProps.style = {};\n        each$1(['x', 'y', 'width', 'height'], function (prop) {\n            prepareStyleTransition(prop, targetStyle, elOptionStyle, el.style, isInit);\n        });\n    }\n\n    if (el.type === 'text' && elOption.style) {\n        var targetStyle = transitionProps.style = {};\n        each$1(['x', 'y'], function (prop) {\n            prepareStyleTransition(prop, targetStyle, elOptionStyle, el.style, isInit);\n        });\n        // Compatible with previous: both support\n        // textFill and fill, textStroke and stroke in 'text' element.\n        !elOptionStyle.hasOwnProperty('textFill') && elOptionStyle.fill && (\n            elOptionStyle.textFill = elOptionStyle.fill\n        );\n        !elOptionStyle.hasOwnProperty('textStroke') && elOptionStyle.stroke && (\n            elOptionStyle.textStroke = elOptionStyle.stroke\n        );\n    }\n\n    if (el.type !== 'group') {\n        el.useStyle(elOptionStyle);\n\n        // Init animation.\n        if (isInit) {\n            el.style.opacity = 0;\n            var targetOpacity = elOptionStyle.opacity;\n            targetOpacity == null && (targetOpacity = 1);\n            initProps(el, {style: {opacity: targetOpacity}}, animatableModel, dataIndex);\n        }\n    }\n\n    if (isInit) {\n        el.attr(transitionProps);\n    }\n    else {\n        updateProps(el, transitionProps, animatableModel, dataIndex);\n    }\n\n    // Merge by default.\n    // z2 must not be null/undefined, otherwise sort error may occur.\n    elOption.hasOwnProperty('z2') && el.attr('z2', elOption.z2 || 0);\n    elOption.hasOwnProperty('silent') && el.attr('silent', elOption.silent);\n    elOption.hasOwnProperty('invisible') && el.attr('invisible', elOption.invisible);\n    elOption.hasOwnProperty('ignore') && el.attr('ignore', elOption.ignore);\n    // `elOption.info` enables user to mount some info on\n    // elements and use them in event handlers.\n    // Update them only when user specified, otherwise, remain.\n    elOption.hasOwnProperty('info') && el.attr('info', elOption.info);\n\n    // If `elOption.styleEmphasis` is `false`, remove hover style. The\n    // logic is ensured by `graphicUtil.setElementHoverStyle`.\n    var styleEmphasis = elOption.styleEmphasis;\n    var disableStyleEmphasis = styleEmphasis === false;\n    if (!(\n        // Try to escapse setting hover style for performance.\n        (el.__cusHasEmphStl && styleEmphasis == null)\n        || (!el.__cusHasEmphStl && disableStyleEmphasis)\n    )) {\n        // Should not use graphicUtil.setHoverStyle, since the styleEmphasis\n        // should not be share by group and its descendants.\n        setElementHoverStyle(el, styleEmphasis);\n        el.__cusHasEmphStl = !disableStyleEmphasis;\n    }\n    if (isRoot) {\n        setAsHighDownDispatcher(el, !disableStyleEmphasis);\n    }\n}\n\nfunction prepareStyleTransition(prop, targetStyle, elOptionStyle, oldElStyle, isInit) {\n    if (elOptionStyle[prop] != null && !isInit) {\n        targetStyle[prop] = elOptionStyle[prop];\n        elOptionStyle[prop] = oldElStyle[prop];\n    }\n}\n\nfunction makeRenderItem(customSeries, data, ecModel, api) {\n    var renderItem = customSeries.get('renderItem');\n    var coordSys = customSeries.coordinateSystem;\n    var prepareResult = {};\n\n    if (coordSys) {\n        if (__DEV__) {\n            assert$1(renderItem, 'series.render is required.');\n            assert$1(\n                coordSys.prepareCustoms || prepareCustoms[coordSys.type],\n                'This coordSys does not support custom series.'\n            );\n        }\n\n        prepareResult = coordSys.prepareCustoms\n            ? coordSys.prepareCustoms()\n            : prepareCustoms[coordSys.type](coordSys);\n    }\n\n    var userAPI = defaults({\n        getWidth: api.getWidth,\n        getHeight: api.getHeight,\n        getZr: api.getZr,\n        getDevicePixelRatio: api.getDevicePixelRatio,\n        value: value,\n        style: style,\n        styleEmphasis: styleEmphasis,\n        visual: visual,\n        barLayout: barLayout,\n        currentSeriesIndices: currentSeriesIndices,\n        font: font\n    }, prepareResult.api || {});\n\n    var userParams = {\n        // The life cycle of context: current round of rendering.\n        // The global life cycle is probably not necessary, because\n        // user can store global status by themselves.\n        context: {},\n        seriesId: customSeries.id,\n        seriesName: customSeries.name,\n        seriesIndex: customSeries.seriesIndex,\n        coordSys: prepareResult.coordSys,\n        dataInsideLength: data.count(),\n        encode: wrapEncodeDef(customSeries.getData())\n    };\n\n    // Do not support call `api` asynchronously without dataIndexInside input.\n    var currDataIndexInside;\n    var currDirty = true;\n    var currItemModel;\n    var currLabelNormalModel;\n    var currLabelEmphasisModel;\n    var currVisualColor;\n\n    return function (dataIndexInside, payload) {\n        currDataIndexInside = dataIndexInside;\n        currDirty = true;\n\n        return renderItem && renderItem(\n            defaults({\n                dataIndexInside: dataIndexInside,\n                dataIndex: data.getRawIndex(dataIndexInside),\n                // Can be used for optimization when zoom or roam.\n                actionType: payload ? payload.type : null\n            }, userParams),\n            userAPI\n        );\n    };\n\n    // Do not update cache until api called.\n    function updateCache(dataIndexInside) {\n        dataIndexInside == null && (dataIndexInside = currDataIndexInside);\n        if (currDirty) {\n            currItemModel = data.getItemModel(dataIndexInside);\n            currLabelNormalModel = currItemModel.getModel(LABEL_NORMAL);\n            currLabelEmphasisModel = currItemModel.getModel(LABEL_EMPHASIS);\n            currVisualColor = data.getItemVisual(dataIndexInside, 'color');\n\n            currDirty = false;\n        }\n    }\n\n    /**\n     * @public\n     * @param {number|string} dim\n     * @param {number} [dataIndexInside=currDataIndexInside]\n     * @return {number|string} value\n     */\n    function value(dim, dataIndexInside) {\n        dataIndexInside == null && (dataIndexInside = currDataIndexInside);\n        return data.get(data.getDimension(dim || 0), dataIndexInside);\n    }\n\n    /**\n     * By default, `visual` is applied to style (to support visualMap).\n     * `visual.color` is applied at `fill`. If user want apply visual.color on `stroke`,\n     * it can be implemented as:\n     * `api.style({stroke: api.visual('color'), fill: null})`;\n     * @public\n     * @param {Object} [extra]\n     * @param {number} [dataIndexInside=currDataIndexInside]\n     */\n    function style(extra, dataIndexInside) {\n        dataIndexInside == null && (dataIndexInside = currDataIndexInside);\n        updateCache(dataIndexInside);\n\n        var itemStyle = currItemModel.getModel(ITEM_STYLE_NORMAL_PATH).getItemStyle();\n\n        currVisualColor != null && (itemStyle.fill = currVisualColor);\n        var opacity = data.getItemVisual(dataIndexInside, 'opacity');\n        opacity != null && (itemStyle.opacity = opacity);\n\n        var labelModel = extra\n            ? applyExtraBefore(extra, currLabelNormalModel)\n            : currLabelNormalModel;\n\n        setTextStyle(itemStyle, labelModel, null, {\n            autoColor: currVisualColor,\n            isRectText: true\n        });\n\n        itemStyle.text = labelModel.getShallow('show')\n            ? retrieve2(\n                customSeries.getFormattedLabel(dataIndexInside, 'normal'),\n                getDefaultLabel(data, dataIndexInside)\n            )\n            : null;\n\n        extra && applyExtraAfter(itemStyle, extra);\n\n        return itemStyle;\n    }\n\n    /**\n     * @public\n     * @param {Object} [extra]\n     * @param {number} [dataIndexInside=currDataIndexInside]\n     */\n    function styleEmphasis(extra, dataIndexInside) {\n        dataIndexInside == null && (dataIndexInside = currDataIndexInside);\n        updateCache(dataIndexInside);\n\n        var itemStyle = currItemModel.getModel(ITEM_STYLE_EMPHASIS_PATH).getItemStyle();\n\n        var labelModel = extra\n            ? applyExtraBefore(extra, currLabelEmphasisModel)\n            : currLabelEmphasisModel;\n\n        setTextStyle(itemStyle, labelModel, null, {\n            isRectText: true\n        }, true);\n\n        itemStyle.text = labelModel.getShallow('show')\n            ? retrieve3(\n                customSeries.getFormattedLabel(dataIndexInside, 'emphasis'),\n                customSeries.getFormattedLabel(dataIndexInside, 'normal'),\n                getDefaultLabel(data, dataIndexInside)\n            )\n            : null;\n\n        extra && applyExtraAfter(itemStyle, extra);\n\n        return itemStyle;\n    }\n\n    /**\n     * @public\n     * @param {string} visualType\n     * @param {number} [dataIndexInside=currDataIndexInside]\n     */\n    function visual(visualType, dataIndexInside) {\n        dataIndexInside == null && (dataIndexInside = currDataIndexInside);\n        return data.getItemVisual(dataIndexInside, visualType);\n    }\n\n    /**\n     * @public\n     * @param {number} opt.count Positive interger.\n     * @param {number} [opt.barWidth]\n     * @param {number} [opt.barMaxWidth]\n     * @param {number} [opt.barGap]\n     * @param {number} [opt.barCategoryGap]\n     * @return {Object} {width, offset, offsetCenter} is not support, return undefined.\n     */\n    function barLayout(opt) {\n        if (coordSys.getBaseAxis) {\n            var baseAxis = coordSys.getBaseAxis();\n            return getLayoutOnAxis(defaults({axis: baseAxis}, opt), api);\n        }\n    }\n\n    /**\n     * @public\n     * @return {Array.<number>}\n     */\n    function currentSeriesIndices() {\n        return ecModel.getCurrentSeriesIndices();\n    }\n\n    /**\n     * @public\n     * @param {Object} opt\n     * @param {string} [opt.fontStyle]\n     * @param {number} [opt.fontWeight]\n     * @param {number} [opt.fontSize]\n     * @param {string} [opt.fontFamily]\n     * @return {string} font string\n     */\n    function font(opt) {\n        return getFont(opt, ecModel);\n    }\n}\n\nfunction wrapEncodeDef(data) {\n    var encodeDef = {};\n    each$1(data.dimensions, function (dimName, dataDimIndex) {\n        var dimInfo = data.getDimensionInfo(dimName);\n        if (!dimInfo.isExtraCoord) {\n            var coordDim = dimInfo.coordDim;\n            var dataDims = encodeDef[coordDim] = encodeDef[coordDim] || [];\n            dataDims[dimInfo.coordDimIndex] = dataDimIndex;\n        }\n    });\n    return encodeDef;\n}\n\nfunction createOrUpdate$1(el, dataIndex, elOption, animatableModel, group, data) {\n    el = doCreateOrUpdate(el, dataIndex, elOption, animatableModel, group, data, true);\n    el && data.setItemGraphicEl(dataIndex, el);\n\n    return el;\n}\n\nfunction doCreateOrUpdate(el, dataIndex, elOption, animatableModel, group, data, isRoot) {\n\n    // [Rule]\n    // By default, follow merge mode.\n    //     (It probably brings benifit for performance in some cases of large data, where\n    //     user program can be optimized to that only updated props needed to be re-calculated,\n    //     or according to `actionType` some calculation can be skipped.)\n    // If `renderItem` returns `null`/`undefined`/`false`, remove the previous el if existing.\n    //     (It seems that violate the \"merge\" principle, but most of users probably intuitively\n    //     regard \"return;\" as \"show nothing element whatever\", so make a exception to meet the\n    //     most cases.)\n\n    var simplyRemove = !elOption; // `null`/`undefined`/`false`\n    elOption = elOption || {};\n    var elOptionType = elOption.type;\n    var elOptionShape = elOption.shape;\n    var elOptionStyle = elOption.style;\n\n    if (el && (\n        simplyRemove\n        // || elOption.$merge === false\n        // If `elOptionType` is `null`, follow the merge principle.\n        || (elOptionType != null\n            && elOptionType !== el.__customGraphicType\n        )\n        || (elOptionType === 'path'\n            && hasOwnPathData(elOptionShape) && getPathData(elOptionShape) !== el.__customPathData\n        )\n        || (elOptionType === 'image'\n            && hasOwn(elOptionStyle, 'image') && elOptionStyle.image !== el.__customImagePath\n        )\n        // FIXME test and remove this restriction?\n        || (elOptionType === 'text'\n            && hasOwn(elOptionShape, 'text') && elOptionStyle.text !== el.__customText\n        )\n    )) {\n        group.remove(el);\n        el = null;\n    }\n\n    // `elOption.type` is undefined when `renderItem` returns nothing.\n    if (simplyRemove) {\n        return;\n    }\n\n    var isInit = !el;\n    !el && (el = createEl(elOption));\n    updateEl(el, dataIndex, elOption, animatableModel, data, isInit, isRoot);\n\n    if (elOptionType === 'group') {\n        mergeChildren(el, dataIndex, elOption, animatableModel, data);\n    }\n\n    // Always add whatever already added to ensure sequence.\n    group.add(el);\n\n    return el;\n}\n\n// Usage:\n// (1) By default, `elOption.$mergeChildren` is `'byIndex'`, which indicates that\n//     the existing children will not be removed, and enables the feature that\n//     update some of the props of some of the children simply by construct\n//     the returned children of `renderItem` like:\n//     `var children = group.children = []; children[3] = {opacity: 0.5};`\n// (2) If `elOption.$mergeChildren` is `'byName'`, add/update/remove children\n//     by child.name. But that might be lower performance.\n// (3) If `elOption.$mergeChildren` is `false`, the existing children will be\n//     replaced totally.\n// (4) If `!elOption.children`, following the \"merge\" principle, nothing will happen.\n//\n// For implementation simpleness, do not provide a direct way to remove sinlge\n// child (otherwise the total indicies of the children array have to be modified).\n// User can remove a single child by set its `ignore` as `true` or replace\n// it by another element, where its `$merge` can be set as `true` if necessary.\nfunction mergeChildren(el, dataIndex, elOption, animatableModel, data) {\n    var newChildren = elOption.children;\n    var newLen = newChildren ? newChildren.length : 0;\n    var mergeChildren = elOption.$mergeChildren;\n    // `diffChildrenByName` has been deprecated.\n    var byName = mergeChildren === 'byName' || elOption.diffChildrenByName;\n    var notMerge = mergeChildren === false;\n\n    // For better performance on roam update, only enter if necessary.\n    if (!newLen && !byName && !notMerge) {\n        return;\n    }\n\n    if (byName) {\n        diffGroupChildren({\n            oldChildren: el.children() || [],\n            newChildren: newChildren || [],\n            dataIndex: dataIndex,\n            animatableModel: animatableModel,\n            group: el,\n            data: data\n        });\n        return;\n    }\n\n    notMerge && el.removeAll();\n\n    // Mapping children of a group simply by index, which\n    // might be better performance.\n    var index = 0;\n    for (; index < newLen; index++) {\n        newChildren[index] && doCreateOrUpdate(\n            el.childAt(index),\n            dataIndex,\n            newChildren[index],\n            animatableModel,\n            el,\n            data\n        );\n    }\n    if (__DEV__) {\n        assert$1(\n            !notMerge || el.childCount() === index,\n            'MUST NOT contain empty item in children array when `group.$mergeChildren` is `false`.'\n        );\n    }\n}\n\nfunction diffGroupChildren(context) {\n    (new DataDiffer(\n        context.oldChildren,\n        context.newChildren,\n        getKey,\n        getKey,\n        context\n    ))\n        .add(processAddUpdate)\n        .update(processAddUpdate)\n        .remove(processRemove)\n        .execute();\n}\n\nfunction getKey(item, idx) {\n    var name = item && item.name;\n    return name != null ? name : GROUP_DIFF_PREFIX + idx;\n}\n\nfunction processAddUpdate(newIndex, oldIndex) {\n    var context = this.context;\n    var childOption = newIndex != null ? context.newChildren[newIndex] : null;\n    var child = oldIndex != null ? context.oldChildren[oldIndex] : null;\n\n    doCreateOrUpdate(\n        child,\n        context.dataIndex,\n        childOption,\n        context.animatableModel,\n        context.group,\n        context.data\n    );\n}\n\n// `graphic#applyDefaultTextStyle` will cache\n// textFill, textStroke, textStrokeWidth.\n// We have to do this trick.\nfunction applyExtraBefore(extra, model) {\n    var dummyModel = new Model({}, model);\n    each$1(CACHED_LABEL_STYLE_PROPERTIES$1, function (stylePropName, modelPropName) {\n        if (extra.hasOwnProperty(stylePropName)) {\n            dummyModel.option[modelPropName] = extra[stylePropName];\n        }\n    });\n    return dummyModel;\n}\n\nfunction applyExtraAfter(itemStyle, extra) {\n    for (var key in extra) {\n        if (extra.hasOwnProperty(key)\n            || !CACHED_LABEL_STYLE_PROPERTIES$1.hasOwnProperty(key)\n        ) {\n            itemStyle[key] = extra[key];\n        }\n    }\n}\n\nfunction processRemove(oldIndex) {\n    var context = this.context;\n    var child = context.oldChildren[oldIndex];\n    child && context.group.remove(child);\n}\n\nfunction getPathData(shape) {\n    // \"d\" follows the SVG convention.\n    return shape && (shape.pathData || shape.d);\n}\n\nfunction hasOwnPathData(shape) {\n    return shape && (shape.hasOwnProperty('pathData') || shape.hasOwnProperty('d'));\n}\n\nfunction hasOwn(host, prop) {\n    return host && host.hasOwnProperty(prop);\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nfunction getSeriesStackId$1(seriesModel) {\n    return seriesModel.get('stack')\n        || '__ec_stack_' + seriesModel.seriesIndex;\n}\n\nfunction getAxisKey$1(polar, axis) {\n    return axis.dim + polar.model.componentIndex;\n}\n\n/**\n * @param {string} seriesType\n * @param {module:echarts/model/Global} ecModel\n * @param {module:echarts/ExtensionAPI} api\n */\nfunction barLayoutPolar(seriesType, ecModel, api) {\n\n    var lastStackCoords = {};\n\n    var barWidthAndOffset = calRadialBar(\n        filter(\n            ecModel.getSeriesByType(seriesType),\n            function (seriesModel) {\n                return !ecModel.isSeriesFiltered(seriesModel)\n                    && seriesModel.coordinateSystem\n                    && seriesModel.coordinateSystem.type === 'polar';\n            }\n        )\n    );\n\n    ecModel.eachSeriesByType(seriesType, function (seriesModel) {\n\n        // Check series coordinate, do layout for polar only\n        if (seriesModel.coordinateSystem.type !== 'polar') {\n            return;\n        }\n\n        var data = seriesModel.getData();\n        var polar = seriesModel.coordinateSystem;\n        var baseAxis = polar.getBaseAxis();\n        var axisKey = getAxisKey$1(polar, baseAxis);\n\n        var stackId = getSeriesStackId$1(seriesModel);\n        var columnLayoutInfo\n            = barWidthAndOffset[axisKey][stackId];\n        var columnOffset = columnLayoutInfo.offset;\n        var columnWidth = columnLayoutInfo.width;\n        var valueAxis = polar.getOtherAxis(baseAxis);\n\n        var cx = seriesModel.coordinateSystem.cx;\n        var cy = seriesModel.coordinateSystem.cy;\n\n        var barMinHeight = seriesModel.get('barMinHeight') || 0;\n        var barMinAngle = seriesModel.get('barMinAngle') || 0;\n\n        lastStackCoords[stackId] = lastStackCoords[stackId] || [];\n\n        var valueDim = data.mapDimension(valueAxis.dim);\n        var baseDim = data.mapDimension(baseAxis.dim);\n        var stacked = isDimensionStacked(data, valueDim /*, baseDim*/);\n\n        var valueAxisStart = valueAxis.getExtent()[0];\n\n        for (var idx = 0, len = data.count(); idx < len; idx++) {\n            var value = data.get(valueDim, idx);\n            var baseValue = data.get(baseDim, idx);\n\n            if (isNaN(value)) {\n                continue;\n            }\n\n            var sign = value >= 0 ? 'p' : 'n';\n            var baseCoord = valueAxisStart;\n\n            // Because of the barMinHeight, we can not use the value in\n            // stackResultDimension directly.\n            // Only ordinal axis can be stacked.\n            if (stacked) {\n                if (!lastStackCoords[stackId][baseValue]) {\n                    lastStackCoords[stackId][baseValue] = {\n                        p: valueAxisStart, // Positive stack\n                        n: valueAxisStart  // Negative stack\n                    };\n                }\n                // Should also consider #4243\n                baseCoord = lastStackCoords[stackId][baseValue][sign];\n            }\n\n            var r0;\n            var r;\n            var startAngle;\n            var endAngle;\n\n            // radial sector\n            if (valueAxis.dim === 'radius') {\n                var radiusSpan = valueAxis.dataToRadius(value) - valueAxisStart;\n                var angle = baseAxis.dataToAngle(baseValue);\n\n                if (Math.abs(radiusSpan) < barMinHeight) {\n                    radiusSpan = (radiusSpan < 0 ? -1 : 1) * barMinHeight;\n                }\n\n                r0 = baseCoord;\n                r = baseCoord + radiusSpan;\n                startAngle = angle - columnOffset;\n                endAngle = startAngle - columnWidth;\n\n                stacked && (lastStackCoords[stackId][baseValue][sign] = r);\n            }\n            // tangential sector\n            else {\n                // angleAxis must be clamped.\n                var angleSpan = valueAxis.dataToAngle(value, true) - valueAxisStart;\n                var radius = baseAxis.dataToRadius(baseValue);\n\n                if (Math.abs(angleSpan) < barMinAngle) {\n                    angleSpan = (angleSpan < 0 ? -1 : 1) * barMinAngle;\n                }\n\n                r0 = radius + columnOffset;\n                r = r0 + columnWidth;\n                startAngle = baseCoord;\n                endAngle = baseCoord + angleSpan;\n\n                // if the previous stack is at the end of the ring,\n                // add a round to differentiate it from origin\n                // var extent = angleAxis.getExtent();\n                // var stackCoord = angle;\n                // if (stackCoord === extent[0] && value > 0) {\n                //     stackCoord = extent[1];\n                // }\n                // else if (stackCoord === extent[1] && value < 0) {\n                //     stackCoord = extent[0];\n                // }\n                stacked && (lastStackCoords[stackId][baseValue][sign] = endAngle);\n            }\n\n            data.setItemLayout(idx, {\n                cx: cx,\n                cy: cy,\n                r0: r0,\n                r: r,\n                // Consider that positive angle is anti-clockwise,\n                // while positive radian of sector is clockwise\n                startAngle: -startAngle * Math.PI / 180,\n                endAngle: -endAngle * Math.PI / 180\n            });\n\n        }\n\n    }, this);\n\n}\n\n/**\n * Calculate bar width and offset for radial bar charts\n */\nfunction calRadialBar(barSeries, api) {\n    // Columns info on each category axis. Key is polar name\n    var columnsMap = {};\n\n    each$1(barSeries, function (seriesModel, idx) {\n        var data = seriesModel.getData();\n        var polar = seriesModel.coordinateSystem;\n\n        var baseAxis = polar.getBaseAxis();\n        var axisKey = getAxisKey$1(polar, baseAxis);\n\n        var axisExtent = baseAxis.getExtent();\n        var bandWidth = baseAxis.type === 'category'\n            ? baseAxis.getBandWidth()\n            : (Math.abs(axisExtent[1] - axisExtent[0]) / data.count());\n\n        var columnsOnAxis = columnsMap[axisKey] || {\n            bandWidth: bandWidth,\n            remainedWidth: bandWidth,\n            autoWidthCount: 0,\n            categoryGap: '20%',\n            gap: '30%',\n            stacks: {}\n        };\n        var stacks = columnsOnAxis.stacks;\n        columnsMap[axisKey] = columnsOnAxis;\n\n        var stackId = getSeriesStackId$1(seriesModel);\n\n        if (!stacks[stackId]) {\n            columnsOnAxis.autoWidthCount++;\n        }\n        stacks[stackId] = stacks[stackId] || {\n            width: 0,\n            maxWidth: 0\n        };\n\n        var barWidth = parsePercent$1(\n            seriesModel.get('barWidth'),\n            bandWidth\n        );\n        var barMaxWidth = parsePercent$1(\n            seriesModel.get('barMaxWidth'),\n            bandWidth\n        );\n        var barGap = seriesModel.get('barGap');\n        var barCategoryGap = seriesModel.get('barCategoryGap');\n\n        if (barWidth && !stacks[stackId].width) {\n            barWidth = Math.min(columnsOnAxis.remainedWidth, barWidth);\n            stacks[stackId].width = barWidth;\n            columnsOnAxis.remainedWidth -= barWidth;\n        }\n\n        barMaxWidth && (stacks[stackId].maxWidth = barMaxWidth);\n        (barGap != null) && (columnsOnAxis.gap = barGap);\n        (barCategoryGap != null) && (columnsOnAxis.categoryGap = barCategoryGap);\n    });\n\n\n    var result = {};\n\n    each$1(columnsMap, function (columnsOnAxis, coordSysName) {\n\n        result[coordSysName] = {};\n\n        var stacks = columnsOnAxis.stacks;\n        var bandWidth = columnsOnAxis.bandWidth;\n        var categoryGap = parsePercent$1(columnsOnAxis.categoryGap, bandWidth);\n        var barGapPercent = parsePercent$1(columnsOnAxis.gap, 1);\n\n        var remainedWidth = columnsOnAxis.remainedWidth;\n        var autoWidthCount = columnsOnAxis.autoWidthCount;\n        var autoWidth = (remainedWidth - categoryGap)\n            / (autoWidthCount + (autoWidthCount - 1) * barGapPercent);\n        autoWidth = Math.max(autoWidth, 0);\n\n        // Find if any auto calculated bar exceeded maxBarWidth\n        each$1(stacks, function (column, stack) {\n            var maxWidth = column.maxWidth;\n            if (maxWidth && maxWidth < autoWidth) {\n                maxWidth = Math.min(maxWidth, remainedWidth);\n                if (column.width) {\n                    maxWidth = Math.min(maxWidth, column.width);\n                }\n                remainedWidth -= maxWidth;\n                column.width = maxWidth;\n                autoWidthCount--;\n            }\n        });\n\n        // Recalculate width again\n        autoWidth = (remainedWidth - categoryGap)\n            / (autoWidthCount + (autoWidthCount - 1) * barGapPercent);\n        autoWidth = Math.max(autoWidth, 0);\n\n        var widthSum = 0;\n        var lastColumn;\n        each$1(stacks, function (column, idx) {\n            if (!column.width) {\n                column.width = autoWidth;\n            }\n            lastColumn = column;\n            widthSum += column.width * (1 + barGapPercent);\n        });\n        if (lastColumn) {\n            widthSum -= lastColumn.width * barGapPercent;\n        }\n\n        var offset = -widthSum / 2;\n        each$1(stacks, function (column, stackId) {\n            result[coordSysName][stackId] = result[coordSysName][stackId] || {\n                offset: offset,\n                width: column.width\n            };\n\n            offset += column.width * (1 + barGapPercent);\n        });\n    });\n\n    return result;\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nfunction RadiusAxis(scale, radiusExtent) {\n\n    Axis.call(this, 'radius', scale, radiusExtent);\n\n    /**\n     * Axis type\n     *  - 'category'\n     *  - 'value'\n     *  - 'time'\n     *  - 'log'\n     * @type {string}\n     */\n    this.type = 'category';\n}\n\nRadiusAxis.prototype = {\n\n    constructor: RadiusAxis,\n\n    /**\n     * @override\n     */\n    pointToData: function (point, clamp) {\n        return this.polar.pointToData(point, clamp)[this.dim === 'radius' ? 0 : 1];\n    },\n\n    dataToRadius: Axis.prototype.dataToCoord,\n\n    radiusToData: Axis.prototype.coordToData\n};\n\ninherits(RadiusAxis, Axis);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar inner$12 = makeInner();\n\nfunction AngleAxis(scale, angleExtent) {\n\n    angleExtent = angleExtent || [0, 360];\n\n    Axis.call(this, 'angle', scale, angleExtent);\n\n    /**\n     * Axis type\n     *  - 'category'\n     *  - 'value'\n     *  - 'time'\n     *  - 'log'\n     * @type {string}\n     */\n    this.type = 'category';\n}\n\nAngleAxis.prototype = {\n\n    constructor: AngleAxis,\n\n    /**\n     * @override\n     */\n    pointToData: function (point, clamp) {\n        return this.polar.pointToData(point, clamp)[this.dim === 'radius' ? 0 : 1];\n    },\n\n    dataToAngle: Axis.prototype.dataToCoord,\n\n    angleToData: Axis.prototype.coordToData,\n\n    /**\n     * Only be called in category axis.\n     * Angle axis uses text height to decide interval\n     *\n     * @override\n     * @return {number} Auto interval for cateogry axis tick and label\n     */\n    calculateCategoryInterval: function () {\n        var axis = this;\n        var labelModel = axis.getLabelModel();\n\n        var ordinalScale = axis.scale;\n        var ordinalExtent = ordinalScale.getExtent();\n        // Providing this method is for optimization:\n        // avoid generating a long array by `getTicks`\n        // in large category data case.\n        var tickCount = ordinalScale.count();\n\n        if (ordinalExtent[1] - ordinalExtent[0] < 1) {\n            return 0;\n        }\n\n        var tickValue = ordinalExtent[0];\n        var unitSpan = axis.dataToCoord(tickValue + 1) - axis.dataToCoord(tickValue);\n        var unitH = Math.abs(unitSpan);\n\n        // Not precise, just use height as text width\n        // and each distance from axis line yet.\n        var rect = getBoundingRect(\n            tickValue, labelModel.getFont(), 'center', 'top'\n        );\n        var maxH = Math.max(rect.height, 7);\n\n        var dh = maxH / unitH;\n        // 0/0 is NaN, 1/0 is Infinity.\n        isNaN(dh) && (dh = Infinity);\n        var interval = Math.max(0, Math.floor(dh));\n\n        var cache = inner$12(axis.model);\n        var lastAutoInterval = cache.lastAutoInterval;\n        var lastTickCount = cache.lastTickCount;\n\n        // Use cache to keep interval stable while moving zoom window,\n        // otherwise the calculated interval might jitter when the zoom\n        // window size is close to the interval-changing size.\n        if (lastAutoInterval != null\n            && lastTickCount != null\n            && Math.abs(lastAutoInterval - interval) <= 1\n            && Math.abs(lastTickCount - tickCount) <= 1\n            // Always choose the bigger one, otherwise the critical\n            // point is not the same when zooming in or zooming out.\n            && lastAutoInterval > interval\n        ) {\n            interval = lastAutoInterval;\n        }\n        // Only update cache if cache not used, otherwise the\n        // changing of interval is too insensitive.\n        else {\n            cache.lastTickCount = tickCount;\n            cache.lastAutoInterval = interval;\n        }\n\n        return interval;\n    }\n};\n\ninherits(AngleAxis, Axis);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * @module echarts/coord/polar/Polar\n */\n\n/**\n * @alias {module:echarts/coord/polar/Polar}\n * @constructor\n * @param {string} name\n */\nvar Polar = function (name) {\n\n    /**\n     * @type {string}\n     */\n    this.name = name || '';\n\n    /**\n     * x of polar center\n     * @type {number}\n     */\n    this.cx = 0;\n\n    /**\n     * y of polar center\n     * @type {number}\n     */\n    this.cy = 0;\n\n    /**\n     * @type {module:echarts/coord/polar/RadiusAxis}\n     * @private\n     */\n    this._radiusAxis = new RadiusAxis();\n\n    /**\n     * @type {module:echarts/coord/polar/AngleAxis}\n     * @private\n     */\n    this._angleAxis = new AngleAxis();\n\n    this._radiusAxis.polar = this._angleAxis.polar = this;\n};\n\nPolar.prototype = {\n\n    type: 'polar',\n\n    axisPointerEnabled: true,\n\n    constructor: Polar,\n\n    /**\n     * @param {Array.<string>}\n     * @readOnly\n     */\n    dimensions: ['radius', 'angle'],\n\n    /**\n     * @type {module:echarts/coord/PolarModel}\n     */\n    model: null,\n\n    /**\n     * If contain coord\n     * @param {Array.<number>} point\n     * @return {boolean}\n     */\n    containPoint: function (point) {\n        var coord = this.pointToCoord(point);\n        return this._radiusAxis.contain(coord[0])\n            && this._angleAxis.contain(coord[1]);\n    },\n\n    /**\n     * If contain data\n     * @param {Array.<number>} data\n     * @return {boolean}\n     */\n    containData: function (data) {\n        return this._radiusAxis.containData(data[0])\n            && this._angleAxis.containData(data[1]);\n    },\n\n    /**\n     * @param {string} dim\n     * @return {module:echarts/coord/polar/AngleAxis|module:echarts/coord/polar/RadiusAxis}\n     */\n    getAxis: function (dim) {\n        return this['_' + dim + 'Axis'];\n    },\n\n    /**\n     * @return {Array.<module:echarts/coord/Axis>}\n     */\n    getAxes: function () {\n        return [this._radiusAxis, this._angleAxis];\n    },\n\n    /**\n     * Get axes by type of scale\n     * @param {string} scaleType\n     * @return {module:echarts/coord/polar/AngleAxis|module:echarts/coord/polar/RadiusAxis}\n     */\n    getAxesByScale: function (scaleType) {\n        var axes = [];\n        var angleAxis = this._angleAxis;\n        var radiusAxis = this._radiusAxis;\n        angleAxis.scale.type === scaleType && axes.push(angleAxis);\n        radiusAxis.scale.type === scaleType && axes.push(radiusAxis);\n\n        return axes;\n    },\n\n    /**\n     * @return {module:echarts/coord/polar/AngleAxis}\n     */\n    getAngleAxis: function () {\n        return this._angleAxis;\n    },\n\n    /**\n     * @return {module:echarts/coord/polar/RadiusAxis}\n     */\n    getRadiusAxis: function () {\n        return this._radiusAxis;\n    },\n\n    /**\n     * @param {module:echarts/coord/polar/Axis}\n     * @return {module:echarts/coord/polar/Axis}\n     */\n    getOtherAxis: function (axis) {\n        var angleAxis = this._angleAxis;\n        return axis === angleAxis ? this._radiusAxis : angleAxis;\n    },\n\n    /**\n     * Base axis will be used on stacking.\n     *\n     * @return {module:echarts/coord/polar/Axis}\n     */\n    getBaseAxis: function () {\n        return this.getAxesByScale('ordinal')[0]\n            || this.getAxesByScale('time')[0]\n            || this.getAngleAxis();\n    },\n\n    /**\n     * @param {string} [dim] 'radius' or 'angle' or 'auto' or null/undefined\n     * @return {Object} {baseAxes: [], otherAxes: []}\n     */\n    getTooltipAxes: function (dim) {\n        var baseAxis = (dim != null && dim !== 'auto')\n            ? this.getAxis(dim) : this.getBaseAxis();\n        return {\n            baseAxes: [baseAxis],\n            otherAxes: [this.getOtherAxis(baseAxis)]\n        };\n    },\n\n    /**\n     * Convert a single data item to (x, y) point.\n     * Parameter data is an array which the first element is radius and the second is angle\n     * @param {Array.<number>} data\n     * @param {boolean} [clamp=false]\n     * @return {Array.<number>}\n     */\n    dataToPoint: function (data, clamp) {\n        return this.coordToPoint([\n            this._radiusAxis.dataToRadius(data[0], clamp),\n            this._angleAxis.dataToAngle(data[1], clamp)\n        ]);\n    },\n\n    /**\n     * Convert a (x, y) point to data\n     * @param {Array.<number>} point\n     * @param {boolean} [clamp=false]\n     * @return {Array.<number>}\n     */\n    pointToData: function (point, clamp) {\n        var coord = this.pointToCoord(point);\n        return [\n            this._radiusAxis.radiusToData(coord[0], clamp),\n            this._angleAxis.angleToData(coord[1], clamp)\n        ];\n    },\n\n    /**\n     * Convert a (x, y) point to (radius, angle) coord\n     * @param {Array.<number>} point\n     * @return {Array.<number>}\n     */\n    pointToCoord: function (point) {\n        var dx = point[0] - this.cx;\n        var dy = point[1] - this.cy;\n        var angleAxis = this.getAngleAxis();\n        var extent = angleAxis.getExtent();\n        var minAngle = Math.min(extent[0], extent[1]);\n        var maxAngle = Math.max(extent[0], extent[1]);\n        // Fix fixed extent in polarCreator\n        // FIXME\n        angleAxis.inverse\n            ? (minAngle = maxAngle - 360)\n            : (maxAngle = minAngle + 360);\n\n        var radius = Math.sqrt(dx * dx + dy * dy);\n        dx /= radius;\n        dy /= radius;\n\n        var radian = Math.atan2(-dy, dx) / Math.PI * 180;\n\n        // move to angleExtent\n        var dir = radian < minAngle ? 1 : -1;\n        while (radian < minAngle || radian > maxAngle) {\n            radian += dir * 360;\n        }\n\n        return [radius, radian];\n    },\n\n    /**\n     * Convert a (radius, angle) coord to (x, y) point\n     * @param {Array.<number>} coord\n     * @return {Array.<number>}\n     */\n    coordToPoint: function (coord) {\n        var radius = coord[0];\n        var radian = coord[1] / 180 * Math.PI;\n        var x = Math.cos(radian) * radius + this.cx;\n        // Inverse the y\n        var y = -Math.sin(radian) * radius + this.cy;\n\n        return [x, y];\n    }\n\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar PolarAxisModel = ComponentModel.extend({\n\n    type: 'polarAxis',\n\n    /**\n     * @type {module:echarts/coord/polar/AngleAxis|module:echarts/coord/polar/RadiusAxis}\n     */\n    axis: null,\n\n    /**\n     * @override\n     */\n    getCoordSysModel: function () {\n        return this.ecModel.queryComponents({\n            mainType: 'polar',\n            index: this.option.polarIndex,\n            id: this.option.polarId\n        })[0];\n    }\n\n});\n\nmerge(PolarAxisModel.prototype, axisModelCommonMixin);\n\nvar polarAxisDefaultExtendedOption = {\n    angle: {\n        // polarIndex: 0,\n        // polarId: '',\n\n        startAngle: 90,\n\n        clockwise: true,\n\n        splitNumber: 12,\n\n        axisLabel: {\n            rotate: false\n        }\n    },\n    radius: {\n        // polarIndex: 0,\n        // polarId: '',\n\n        splitNumber: 5\n    }\n};\n\nfunction getAxisType$3(axisDim, option) {\n    // Default axis with data is category axis\n    return option.type || (option.data ? 'category' : 'value');\n}\n\naxisModelCreator('angle', PolarAxisModel, getAxisType$3, polarAxisDefaultExtendedOption.angle);\naxisModelCreator('radius', PolarAxisModel, getAxisType$3, polarAxisDefaultExtendedOption.radius);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nextendComponentModel({\n\n    type: 'polar',\n\n    dependencies: ['polarAxis', 'angleAxis'],\n\n    /**\n     * @type {module:echarts/coord/polar/Polar}\n     */\n    coordinateSystem: null,\n\n    /**\n     * @param {string} axisType\n     * @return {module:echarts/coord/polar/AxisModel}\n     */\n    findAxisModel: function (axisType) {\n        var foundAxisModel;\n        var ecModel = this.ecModel;\n\n        ecModel.eachComponent(axisType, function (axisModel) {\n            if (axisModel.getCoordSysModel() === this) {\n                foundAxisModel = axisModel;\n            }\n        }, this);\n        return foundAxisModel;\n    },\n\n    defaultOption: {\n\n        zlevel: 0,\n\n        z: 0,\n\n        center: ['50%', '50%'],\n\n        radius: '80%'\n    }\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n// TODO Axis scale\n\n/**\n * Resize method bound to the polar\n * @param {module:echarts/coord/polar/PolarModel} polarModel\n * @param {module:echarts/ExtensionAPI} api\n */\nfunction resizePolar(polar, polarModel, api) {\n    var center = polarModel.get('center');\n    var width = api.getWidth();\n    var height = api.getHeight();\n\n    polar.cx = parsePercent$1(center[0], width);\n    polar.cy = parsePercent$1(center[1], height);\n\n    var radiusAxis = polar.getRadiusAxis();\n    var size = Math.min(width, height) / 2;\n    var radius = parsePercent$1(polarModel.get('radius'), size);\n    radiusAxis.inverse\n        ? radiusAxis.setExtent(radius, 0)\n        : radiusAxis.setExtent(0, radius);\n}\n\n/**\n * Update polar\n */\nfunction updatePolarScale(ecModel, api) {\n    var polar = this;\n    var angleAxis = polar.getAngleAxis();\n    var radiusAxis = polar.getRadiusAxis();\n    // Reset scale\n    angleAxis.scale.setExtent(Infinity, -Infinity);\n    radiusAxis.scale.setExtent(Infinity, -Infinity);\n\n    ecModel.eachSeries(function (seriesModel) {\n        if (seriesModel.coordinateSystem === polar) {\n            var data = seriesModel.getData();\n            each$1(data.mapDimension('radius', true), function (dim) {\n                radiusAxis.scale.unionExtentFromData(\n                    data, getStackedDimension(data, dim)\n                );\n            });\n            each$1(data.mapDimension('angle', true), function (dim) {\n                angleAxis.scale.unionExtentFromData(\n                    data, getStackedDimension(data, dim)\n                );\n            });\n        }\n    });\n\n    niceScaleExtent(angleAxis.scale, angleAxis.model);\n    niceScaleExtent(radiusAxis.scale, radiusAxis.model);\n\n    // Fix extent of category angle axis\n    if (angleAxis.type === 'category' && !angleAxis.onBand) {\n        var extent = angleAxis.getExtent();\n        var diff = 360 / angleAxis.scale.count();\n        angleAxis.inverse ? (extent[1] += diff) : (extent[1] -= diff);\n        angleAxis.setExtent(extent[0], extent[1]);\n    }\n}\n\n/**\n * Set common axis properties\n * @param {module:echarts/coord/polar/AngleAxis|module:echarts/coord/polar/RadiusAxis}\n * @param {module:echarts/coord/polar/AxisModel}\n * @inner\n */\nfunction setAxis(axis, axisModel) {\n    axis.type = axisModel.get('type');\n    axis.scale = createScaleByModel(axisModel);\n    axis.onBand = axisModel.get('boundaryGap') && axis.type === 'category';\n    axis.inverse = axisModel.get('inverse');\n\n    if (axisModel.mainType === 'angleAxis') {\n        axis.inverse ^= axisModel.get('clockwise');\n        var startAngle = axisModel.get('startAngle');\n        axis.setExtent(startAngle, startAngle + (axis.inverse ? -360 : 360));\n    }\n\n    // Inject axis instance\n    axisModel.axis = axis;\n    axis.model = axisModel;\n}\n\n\nvar polarCreator = {\n\n    dimensions: Polar.prototype.dimensions,\n\n    create: function (ecModel, api) {\n        var polarList = [];\n        ecModel.eachComponent('polar', function (polarModel, idx) {\n            var polar = new Polar(idx);\n            // Inject resize and update method\n            polar.update = updatePolarScale;\n\n            var radiusAxis = polar.getRadiusAxis();\n            var angleAxis = polar.getAngleAxis();\n\n            var radiusAxisModel = polarModel.findAxisModel('radiusAxis');\n            var angleAxisModel = polarModel.findAxisModel('angleAxis');\n\n            setAxis(radiusAxis, radiusAxisModel);\n            setAxis(angleAxis, angleAxisModel);\n\n            resizePolar(polar, polarModel, api);\n\n            polarList.push(polar);\n\n            polarModel.coordinateSystem = polar;\n            polar.model = polarModel;\n        });\n        // Inject coordinateSystem to series\n        ecModel.eachSeries(function (seriesModel) {\n            if (seriesModel.get('coordinateSystem') === 'polar') {\n                var polarModel = ecModel.queryComponents({\n                    mainType: 'polar',\n                    index: seriesModel.get('polarIndex'),\n                    id: seriesModel.get('polarId')\n                })[0];\n\n                if (__DEV__) {\n                    if (!polarModel) {\n                        throw new Error(\n                            'Polar \"' + retrieve(\n                                seriesModel.get('polarIndex'),\n                                seriesModel.get('polarId'),\n                                0\n                            ) + '\" not found'\n                        );\n                    }\n                }\n                seriesModel.coordinateSystem = polarModel.coordinateSystem;\n            }\n        });\n\n        return polarList;\n    }\n};\n\nCoordinateSystemManager.register('polar', polarCreator);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar elementList$1 = ['axisLine', 'axisLabel', 'axisTick', 'splitLine', 'splitArea'];\n\nfunction getAxisLineShape(polar, rExtent, angle) {\n    rExtent[1] > rExtent[0] && (rExtent = rExtent.slice().reverse());\n    var start = polar.coordToPoint([rExtent[0], angle]);\n    var end = polar.coordToPoint([rExtent[1], angle]);\n\n    return {\n        x1: start[0],\n        y1: start[1],\n        x2: end[0],\n        y2: end[1]\n    };\n}\n\nfunction getRadiusIdx(polar) {\n    var radiusAxis = polar.getRadiusAxis();\n    return radiusAxis.inverse ? 0 : 1;\n}\n\n// Remove the last tick which will overlap the first tick\nfunction fixAngleOverlap(list) {\n    var firstItem = list[0];\n    var lastItem = list[list.length - 1];\n    if (firstItem\n        && lastItem\n        && Math.abs(Math.abs(firstItem.coord - lastItem.coord) - 360) < 1e-4\n    ) {\n        list.pop();\n    }\n}\n\nAxisView.extend({\n\n    type: 'angleAxis',\n\n    axisPointerClass: 'PolarAxisPointer',\n\n    render: function (angleAxisModel, ecModel) {\n        this.group.removeAll();\n        if (!angleAxisModel.get('show')) {\n            return;\n        }\n\n        var angleAxis = angleAxisModel.axis;\n        var polar = angleAxis.polar;\n        var radiusExtent = polar.getRadiusAxis().getExtent();\n\n        var ticksAngles = angleAxis.getTicksCoords();\n        var labels = map(angleAxis.getViewLabels(), function (labelItem) {\n            var labelItem = clone(labelItem);\n            labelItem.coord = angleAxis.dataToCoord(labelItem.tickValue);\n            return labelItem;\n        });\n\n        fixAngleOverlap(labels);\n        fixAngleOverlap(ticksAngles);\n\n        each$1(elementList$1, function (name) {\n            if (angleAxisModel.get(name + '.show')\n                && (!angleAxis.scale.isBlank() || name === 'axisLine')\n            ) {\n                this['_' + name](angleAxisModel, polar, ticksAngles, radiusExtent, labels);\n            }\n        }, this);\n    },\n\n    /**\n     * @private\n     */\n    _axisLine: function (angleAxisModel, polar, ticksAngles, radiusExtent) {\n        var lineStyleModel = angleAxisModel.getModel('axisLine.lineStyle');\n\n        var circle = new Circle({\n            shape: {\n                cx: polar.cx,\n                cy: polar.cy,\n                r: radiusExtent[getRadiusIdx(polar)]\n            },\n            style: lineStyleModel.getLineStyle(),\n            z2: 1,\n            silent: true\n        });\n        circle.style.fill = null;\n\n        this.group.add(circle);\n    },\n\n    /**\n     * @private\n     */\n    _axisTick: function (angleAxisModel, polar, ticksAngles, radiusExtent) {\n        var tickModel = angleAxisModel.getModel('axisTick');\n\n        var tickLen = (tickModel.get('inside') ? -1 : 1) * tickModel.get('length');\n        var radius = radiusExtent[getRadiusIdx(polar)];\n\n        var lines = map(ticksAngles, function (tickAngleItem) {\n            return new Line({\n                shape: getAxisLineShape(polar, [radius, radius + tickLen], tickAngleItem.coord)\n            });\n        });\n        this.group.add(mergePath(\n            lines, {\n                style: defaults(\n                    tickModel.getModel('lineStyle').getLineStyle(),\n                    {\n                        stroke: angleAxisModel.get('axisLine.lineStyle.color')\n                    }\n                )\n            }\n        ));\n    },\n\n    /**\n     * @private\n     */\n    _axisLabel: function (angleAxisModel, polar, ticksAngles, radiusExtent, labels) {\n        var rawCategoryData = angleAxisModel.getCategories(true);\n\n        var commonLabelModel = angleAxisModel.getModel('axisLabel');\n\n        var labelMargin = commonLabelModel.get('margin');\n        var triggerEvent = angleAxisModel.get('triggerEvent');\n\n        // Use length of ticksAngles because it may remove the last tick to avoid overlapping\n        each$1(labels, function (labelItem, idx) {\n            var labelModel = commonLabelModel;\n            var tickValue = labelItem.tickValue;\n\n            var r = radiusExtent[getRadiusIdx(polar)];\n            var p = polar.coordToPoint([r + labelMargin, labelItem.coord]);\n            var cx = polar.cx;\n            var cy = polar.cy;\n\n            var labelTextAlign = Math.abs(p[0] - cx) / r < 0.3\n                ? 'center' : (p[0] > cx ? 'left' : 'right');\n            var labelTextVerticalAlign = Math.abs(p[1] - cy) / r < 0.3\n                ? 'middle' : (p[1] > cy ? 'top' : 'bottom');\n\n            if (rawCategoryData && rawCategoryData[tickValue] && rawCategoryData[tickValue].textStyle) {\n                labelModel = new Model(\n                    rawCategoryData[tickValue].textStyle, commonLabelModel, commonLabelModel.ecModel\n                );\n            }\n\n            var textEl = new Text({\n                silent: AxisBuilder.isLabelSilent(angleAxisModel)\n            });\n            this.group.add(textEl);\n            setTextStyle(textEl.style, labelModel, {\n                x: p[0],\n                y: p[1],\n                textFill: labelModel.getTextColor() || angleAxisModel.get('axisLine.lineStyle.color'),\n                text: labelItem.formattedLabel,\n                textAlign: labelTextAlign,\n                textVerticalAlign: labelTextVerticalAlign\n            });\n\n            // Pack data for mouse event\n            if (triggerEvent) {\n                textEl.eventData = AxisBuilder.makeAxisEventDataBase(angleAxisModel);\n                textEl.eventData.targetType = 'axisLabel';\n                textEl.eventData.value = labelItem.rawLabel;\n            }\n\n        }, this);\n    },\n\n    /**\n     * @private\n     */\n    _splitLine: function (angleAxisModel, polar, ticksAngles, radiusExtent) {\n        var splitLineModel = angleAxisModel.getModel('splitLine');\n        var lineStyleModel = splitLineModel.getModel('lineStyle');\n        var lineColors = lineStyleModel.get('color');\n        var lineCount = 0;\n\n        lineColors = lineColors instanceof Array ? lineColors : [lineColors];\n\n        var splitLines = [];\n\n        for (var i = 0; i < ticksAngles.length; i++) {\n            var colorIndex = (lineCount++) % lineColors.length;\n            splitLines[colorIndex] = splitLines[colorIndex] || [];\n            splitLines[colorIndex].push(new Line({\n                shape: getAxisLineShape(polar, radiusExtent, ticksAngles[i].coord)\n            }));\n        }\n\n        // Simple optimization\n        // Batching the lines if color are the same\n        for (var i = 0; i < splitLines.length; i++) {\n            this.group.add(mergePath(splitLines[i], {\n                style: defaults({\n                    stroke: lineColors[i % lineColors.length]\n                }, lineStyleModel.getLineStyle()),\n                silent: true,\n                z: angleAxisModel.get('z')\n            }));\n        }\n    },\n\n    /**\n     * @private\n     */\n    _splitArea: function (angleAxisModel, polar, ticksAngles, radiusExtent) {\n        if (!ticksAngles.length) {\n            return;\n        }\n\n        var splitAreaModel = angleAxisModel.getModel('splitArea');\n        var areaStyleModel = splitAreaModel.getModel('areaStyle');\n        var areaColors = areaStyleModel.get('color');\n        var lineCount = 0;\n\n        areaColors = areaColors instanceof Array ? areaColors : [areaColors];\n\n        var splitAreas = [];\n\n        var RADIAN = Math.PI / 180;\n        var prevAngle = -ticksAngles[0].coord * RADIAN;\n        var r0 = Math.min(radiusExtent[0], radiusExtent[1]);\n        var r1 = Math.max(radiusExtent[0], radiusExtent[1]);\n\n        var clockwise = angleAxisModel.get('clockwise');\n\n        for (var i = 1; i < ticksAngles.length; i++) {\n            var colorIndex = (lineCount++) % areaColors.length;\n            splitAreas[colorIndex] = splitAreas[colorIndex] || [];\n            splitAreas[colorIndex].push(new Sector({\n                shape: {\n                    cx: polar.cx,\n                    cy: polar.cy,\n                    r0: r0,\n                    r: r1,\n                    startAngle: prevAngle,\n                    endAngle: -ticksAngles[i].coord * RADIAN,\n                    clockwise: clockwise\n                },\n                silent: true\n            }));\n            prevAngle = -ticksAngles[i].coord * RADIAN;\n        }\n\n        // Simple optimization\n        // Batching the lines if color are the same\n        for (var i = 0; i < splitAreas.length; i++) {\n            this.group.add(mergePath(splitAreas[i], {\n                style: defaults({\n                    fill: areaColors[i % areaColors.length]\n                }, areaStyleModel.getAreaStyle()),\n                silent: true\n            }));\n        }\n    }\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar axisBuilderAttrs$3 = [\n    'axisLine', 'axisTickLabel', 'axisName'\n];\nvar selfBuilderAttrs$1 = [\n    'splitLine', 'splitArea'\n];\n\nAxisView.extend({\n\n    type: 'radiusAxis',\n\n    axisPointerClass: 'PolarAxisPointer',\n\n    render: function (radiusAxisModel, ecModel) {\n        this.group.removeAll();\n        if (!radiusAxisModel.get('show')) {\n            return;\n        }\n        var radiusAxis = radiusAxisModel.axis;\n        var polar = radiusAxis.polar;\n        var angleAxis = polar.getAngleAxis();\n        var ticksCoords = radiusAxis.getTicksCoords();\n        var axisAngle = angleAxis.getExtent()[0];\n        var radiusExtent = radiusAxis.getExtent();\n\n        var layout = layoutAxis(polar, radiusAxisModel, axisAngle);\n        var axisBuilder = new AxisBuilder(radiusAxisModel, layout);\n        each$1(axisBuilderAttrs$3, axisBuilder.add, axisBuilder);\n        this.group.add(axisBuilder.getGroup());\n\n        each$1(selfBuilderAttrs$1, function (name) {\n            if (radiusAxisModel.get(name + '.show') && !radiusAxis.scale.isBlank()) {\n                this['_' + name](radiusAxisModel, polar, axisAngle, radiusExtent, ticksCoords);\n            }\n        }, this);\n    },\n\n    /**\n     * @private\n     */\n    _splitLine: function (radiusAxisModel, polar, axisAngle, radiusExtent, ticksCoords) {\n        var splitLineModel = radiusAxisModel.getModel('splitLine');\n        var lineStyleModel = splitLineModel.getModel('lineStyle');\n        var lineColors = lineStyleModel.get('color');\n        var lineCount = 0;\n\n        lineColors = lineColors instanceof Array ? lineColors : [lineColors];\n\n        var splitLines = [];\n\n        for (var i = 0; i < ticksCoords.length; i++) {\n            var colorIndex = (lineCount++) % lineColors.length;\n            splitLines[colorIndex] = splitLines[colorIndex] || [];\n            splitLines[colorIndex].push(new Circle({\n                shape: {\n                    cx: polar.cx,\n                    cy: polar.cy,\n                    r: ticksCoords[i].coord\n                },\n                silent: true\n            }));\n        }\n\n        // Simple optimization\n        // Batching the lines if color are the same\n        for (var i = 0; i < splitLines.length; i++) {\n            this.group.add(mergePath(splitLines[i], {\n                style: defaults({\n                    stroke: lineColors[i % lineColors.length],\n                    fill: null\n                }, lineStyleModel.getLineStyle()),\n                silent: true\n            }));\n        }\n    },\n\n    /**\n     * @private\n     */\n    _splitArea: function (radiusAxisModel, polar, axisAngle, radiusExtent, ticksCoords) {\n        if (!ticksCoords.length) {\n            return;\n        }\n\n        var splitAreaModel = radiusAxisModel.getModel('splitArea');\n        var areaStyleModel = splitAreaModel.getModel('areaStyle');\n        var areaColors = areaStyleModel.get('color');\n        var lineCount = 0;\n\n        areaColors = areaColors instanceof Array ? areaColors : [areaColors];\n\n        var splitAreas = [];\n\n        var prevRadius = ticksCoords[0].coord;\n        for (var i = 1; i < ticksCoords.length; i++) {\n            var colorIndex = (lineCount++) % areaColors.length;\n            splitAreas[colorIndex] = splitAreas[colorIndex] || [];\n            splitAreas[colorIndex].push(new Sector({\n                shape: {\n                    cx: polar.cx,\n                    cy: polar.cy,\n                    r0: prevRadius,\n                    r: ticksCoords[i].coord,\n                    startAngle: 0,\n                    endAngle: Math.PI * 2\n                },\n                silent: true\n            }));\n            prevRadius = ticksCoords[i].coord;\n        }\n\n        // Simple optimization\n        // Batching the lines if color are the same\n        for (var i = 0; i < splitAreas.length; i++) {\n            this.group.add(mergePath(splitAreas[i], {\n                style: defaults({\n                    fill: areaColors[i % areaColors.length]\n                }, areaStyleModel.getAreaStyle()),\n                silent: true\n            }));\n        }\n    }\n});\n\n/**\n * @inner\n */\nfunction layoutAxis(polar, radiusAxisModel, axisAngle) {\n    return {\n        position: [polar.cx, polar.cy],\n        rotation: axisAngle / 180 * Math.PI,\n        labelDirection: -1,\n        tickDirection: -1,\n        nameDirection: 1,\n        labelRotate: radiusAxisModel.getModel('axisLabel').get('rotate'),\n        // Over splitLine and splitArea\n        z2: 1\n    };\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar PolarAxisPointer = BaseAxisPointer.extend({\n\n    /**\n     * @override\n     */\n    makeElOption: function (elOption, value, axisModel, axisPointerModel, api) {\n        var axis = axisModel.axis;\n\n        if (axis.dim === 'angle') {\n            this.animationThreshold = Math.PI / 18;\n        }\n\n        var polar = axis.polar;\n        var otherAxis = polar.getOtherAxis(axis);\n        var otherExtent = otherAxis.getExtent();\n\n        var coordValue;\n        coordValue = axis['dataTo' + capitalFirst(axis.dim)](value);\n\n        var axisPointerType = axisPointerModel.get('type');\n        if (axisPointerType && axisPointerType !== 'none') {\n            var elStyle = buildElStyle(axisPointerModel);\n            var pointerOption = pointerShapeBuilder$2[axisPointerType](\n                axis, polar, coordValue, otherExtent, elStyle\n            );\n            pointerOption.style = elStyle;\n            elOption.graphicKey = pointerOption.type;\n            elOption.pointer = pointerOption;\n        }\n\n        var labelMargin = axisPointerModel.get('label.margin');\n        var labelPos = getLabelPosition(value, axisModel, axisPointerModel, polar, labelMargin);\n        buildLabelElOption(elOption, axisModel, axisPointerModel, api, labelPos);\n    }\n\n    // Do not support handle, utill any user requires it.\n\n});\n\nfunction getLabelPosition(value, axisModel, axisPointerModel, polar, labelMargin) {\n    var axis = axisModel.axis;\n    var coord = axis.dataToCoord(value);\n    var axisAngle = polar.getAngleAxis().getExtent()[0];\n    axisAngle = axisAngle / 180 * Math.PI;\n    var radiusExtent = polar.getRadiusAxis().getExtent();\n    var position;\n    var align;\n    var verticalAlign;\n\n    if (axis.dim === 'radius') {\n        var transform = create$1();\n        rotate(transform, transform, axisAngle);\n        translate(transform, transform, [polar.cx, polar.cy]);\n        position = applyTransform$1([coord, -labelMargin], transform);\n\n        var labelRotation = axisModel.getModel('axisLabel').get('rotate') || 0;\n        var labelLayout = AxisBuilder.innerTextLayout(\n            axisAngle, labelRotation * Math.PI / 180, -1\n        );\n        align = labelLayout.textAlign;\n        verticalAlign = labelLayout.textVerticalAlign;\n    }\n    else { // angle axis\n        var r = radiusExtent[1];\n        position = polar.coordToPoint([r + labelMargin, coord]);\n        var cx = polar.cx;\n        var cy = polar.cy;\n        align = Math.abs(position[0] - cx) / r < 0.3\n            ? 'center' : (position[0] > cx ? 'left' : 'right');\n        verticalAlign = Math.abs(position[1] - cy) / r < 0.3\n            ? 'middle' : (position[1] > cy ? 'top' : 'bottom');\n    }\n\n    return {\n        position: position,\n        align: align,\n        verticalAlign: verticalAlign\n    };\n}\n\n\nvar pointerShapeBuilder$2 = {\n\n    line: function (axis, polar, coordValue, otherExtent, elStyle) {\n        return axis.dim === 'angle'\n            ? {\n                type: 'Line',\n                shape: makeLineShape(\n                    polar.coordToPoint([otherExtent[0], coordValue]),\n                    polar.coordToPoint([otherExtent[1], coordValue])\n                )\n            }\n            : {\n                type: 'Circle',\n                shape: {\n                    cx: polar.cx,\n                    cy: polar.cy,\n                    r: coordValue\n                }\n            };\n    },\n\n    shadow: function (axis, polar, coordValue, otherExtent, elStyle) {\n        var bandWidth = Math.max(1, axis.getBandWidth());\n        var radian = Math.PI / 180;\n\n        return axis.dim === 'angle'\n            ? {\n                type: 'Sector',\n                shape: makeSectorShape(\n                    polar.cx, polar.cy,\n                    otherExtent[0], otherExtent[1],\n                    // In ECharts y is negative if angle is positive\n                    (-coordValue - bandWidth / 2) * radian,\n                    (-coordValue + bandWidth / 2) * radian\n                )\n            }\n            : {\n                type: 'Sector',\n                shape: makeSectorShape(\n                    polar.cx, polar.cy,\n                    coordValue - bandWidth / 2,\n                    coordValue + bandWidth / 2,\n                    0, Math.PI * 2\n                )\n            };\n    }\n};\n\nAxisView.registerAxisPointerClass('PolarAxisPointer', PolarAxisPointer);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n// For reducing size of echarts.min, barLayoutPolar is required by polar.\nregisterLayout(curry(barLayoutPolar, 'bar'));\n\n// Polar view\nextendComponentView({\n    type: 'polar'\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar GeoModel = ComponentModel.extend({\n\n    type: 'geo',\n\n    /**\n     * @type {module:echarts/coord/geo/Geo}\n     */\n    coordinateSystem: null,\n\n    layoutMode: 'box',\n\n    init: function (option) {\n        ComponentModel.prototype.init.apply(this, arguments);\n\n        // Default label emphasis `show`\n        defaultEmphasis(option, 'label', ['show']);\n    },\n\n    optionUpdated: function () {\n        var option = this.option;\n        var self = this;\n\n        option.regions = geoCreator.getFilledRegions(option.regions, option.map, option.nameMap);\n\n        this._optionModelMap = reduce(option.regions || [], function (optionModelMap, regionOpt) {\n            if (regionOpt.name) {\n                optionModelMap.set(regionOpt.name, new Model(regionOpt, self));\n            }\n            return optionModelMap;\n        }, createHashMap());\n\n        this.updateSelectedMap(option.regions);\n    },\n\n    defaultOption: {\n\n        zlevel: 0,\n\n        z: 0,\n\n        show: true,\n\n        left: 'center',\n\n        top: 'center',\n\n\n        // width:,\n        // height:,\n        // right\n        // bottom\n\n        // Aspect is width / height. Inited to be geoJson bbox aspect\n        // This parameter is used for scale this aspect\n        // If svg used, aspectScale is 1 by default.\n        // aspectScale: 0.75,\n        aspectScale: null,\n\n        ///// Layout with center and size\n        // If you wan't to put map in a fixed size box with right aspect ratio\n        // This two properties may more conveninet\n        // layoutCenter: [50%, 50%]\n        // layoutSize: 100\n\n        silent: false,\n\n        // Map type\n        map: '',\n\n        // Define left-top, right-bottom coords to control view\n        // For example, [ [180, 90], [-180, -90] ]\n        boundingCoords: null,\n\n        // Default on center of map\n        center: null,\n\n        zoom: 1,\n\n        scaleLimit: null,\n\n        // selectedMode: false\n\n        label: {\n            show: false,\n            color: '#000'\n        },\n\n        itemStyle: {\n            // color: 各异,\n            borderWidth: 0.5,\n            borderColor: '#444',\n            color: '#eee'\n        },\n\n        emphasis: {\n            label: {\n                show: true,\n                color: 'rgb(100,0,0)'\n            },\n            itemStyle: {\n                color: 'rgba(255,215,0,0.8)'\n            }\n        },\n\n        regions: []\n    },\n\n    /**\n     * Get model of region\n     * @param  {string} name\n     * @return {module:echarts/model/Model}\n     */\n    getRegionModel: function (name) {\n        return this._optionModelMap.get(name) || new Model(null, this, this.ecModel);\n    },\n\n    /**\n     * Format label\n     * @param {string} name Region name\n     * @param {string} [status='normal'] 'normal' or 'emphasis'\n     * @return {string}\n     */\n    getFormattedLabel: function (name, status) {\n        var regionModel = this.getRegionModel(name);\n        var formatter = regionModel.get('label.' + status + '.formatter');\n        var params = {\n            name: name\n        };\n        if (typeof formatter === 'function') {\n            params.status = status;\n            return formatter(params);\n        }\n        else if (typeof formatter === 'string') {\n            return formatter.replace('{a}', name != null ? name : '');\n        }\n    },\n\n    setZoom: function (zoom) {\n        this.option.zoom = zoom;\n    },\n\n    setCenter: function (center) {\n        this.option.center = center;\n    }\n});\n\nmixin(GeoModel, selectableMixin);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nextendComponentView({\n\n    type: 'geo',\n\n    init: function (ecModel, api) {\n        var mapDraw = new MapDraw(api, true);\n        this._mapDraw = mapDraw;\n\n        this.group.add(mapDraw.group);\n    },\n\n    render: function (geoModel, ecModel, api, payload) {\n        // Not render if it is an toggleSelect action from self\n        if (payload && payload.type === 'geoToggleSelect'\n            && payload.from === this.uid\n        ) {\n            return;\n        }\n\n        var mapDraw = this._mapDraw;\n        if (geoModel.get('show')) {\n            mapDraw.draw(geoModel, ecModel, api, this, payload);\n        }\n        else {\n            this._mapDraw.group.removeAll();\n        }\n\n        this.group.silent = geoModel.get('silent');\n    },\n\n    dispose: function () {\n        this._mapDraw && this._mapDraw.remove();\n    }\n\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nfunction makeAction(method, actionInfo) {\n    actionInfo.update = 'updateView';\n    registerAction(actionInfo, function (payload, ecModel) {\n        var selected = {};\n\n        ecModel.eachComponent(\n            { mainType: 'geo', query: payload},\n            function (geoModel) {\n                geoModel[method](payload.name);\n                var geo = geoModel.coordinateSystem;\n                each$1(geo.regions, function (region) {\n                    selected[region.name] = geoModel.isSelected(region.name) || false;\n                });\n            }\n        );\n\n        return {\n            selected: selected,\n            name: payload.name\n        };\n    });\n}\n\nmakeAction('toggleSelected', {\n    type: 'geoToggleSelect',\n    event: 'geoselectchanged'\n});\nmakeAction('select', {\n    type: 'geoSelect',\n    event: 'geoselected'\n});\nmakeAction('unSelect', {\n    type: 'geoUnSelect',\n    event: 'geounselected'\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n// (24*60*60*1000)\nvar PROXIMATE_ONE_DAY = 86400000;\n\n/**\n * Calendar\n *\n * @constructor\n *\n * @param {Object} calendarModel calendarModel\n * @param {Object} ecModel       ecModel\n * @param {Object} api           api\n */\nfunction Calendar(calendarModel, ecModel, api) {\n    this._model = calendarModel;\n}\n\nCalendar.prototype = {\n\n    constructor: Calendar,\n\n    type: 'calendar',\n\n    dimensions: ['time', 'value'],\n\n    // Required in createListFromData\n    getDimensionsInfo: function () {\n        return [{name: 'time', type: 'time'}, 'value'];\n    },\n\n    getRangeInfo: function () {\n        return this._rangeInfo;\n    },\n\n    getModel: function () {\n        return this._model;\n    },\n\n    getRect: function () {\n        return this._rect;\n    },\n\n    getCellWidth: function () {\n        return this._sw;\n    },\n\n    getCellHeight: function () {\n        return this._sh;\n    },\n\n    getOrient: function () {\n        return this._orient;\n    },\n\n    /**\n     * getFirstDayOfWeek\n     *\n     * @example\n     *     0 : start at Sunday\n     *     1 : start at Monday\n     *\n     * @return {number}\n     */\n    getFirstDayOfWeek: function () {\n        return this._firstDayOfWeek;\n    },\n\n    /**\n     * get date info\n     *\n     * @param  {string|number} date date\n     * @return {Object}\n     * {\n     *      y: string, local full year, eg., '1940',\n     *      m: string, local month, from '01' ot '12',\n     *      d: string, local date, from '01' to '31' (if exists),\n     *      day: It is not date.getDay(). It is the location of the cell in a week, from 0 to 6,\n     *      time: timestamp,\n     *      formatedDate: string, yyyy-MM-dd,\n     *      date: original date object.\n     * }\n     */\n    getDateInfo: function (date) {\n\n        date = parseDate(date);\n\n        var y = date.getFullYear();\n\n        var m = date.getMonth() + 1;\n        m = m < 10 ? '0' + m : m;\n\n        var d = date.getDate();\n        d = d < 10 ? '0' + d : d;\n\n        var day = date.getDay();\n\n        day = Math.abs((day + 7 - this.getFirstDayOfWeek()) % 7);\n\n        return {\n            y: y,\n            m: m,\n            d: d,\n            day: day,\n            time: date.getTime(),\n            formatedDate: y + '-' + m + '-' + d,\n            date: date\n        };\n    },\n\n    getNextNDay: function (date, n) {\n        n = n || 0;\n        if (n === 0) {\n            return this.getDateInfo(date);\n        }\n\n        date = new Date(this.getDateInfo(date).time);\n        date.setDate(date.getDate() + n);\n\n        return this.getDateInfo(date);\n    },\n\n    update: function (ecModel, api) {\n\n        this._firstDayOfWeek = +this._model.getModel('dayLabel').get('firstDay');\n        this._orient = this._model.get('orient');\n        this._lineWidth = this._model.getModel('itemStyle').getItemStyle().lineWidth || 0;\n\n\n        this._rangeInfo = this._getRangeInfo(this._initRangeOption());\n        var weeks = this._rangeInfo.weeks || 1;\n        var whNames = ['width', 'height'];\n        var cellSize = this._model.get('cellSize').slice();\n        var layoutParams = this._model.getBoxLayoutParams();\n        var cellNumbers = this._orient === 'horizontal' ? [weeks, 7] : [7, weeks];\n\n        each$1([0, 1], function (idx) {\n            if (cellSizeSpecified(cellSize, idx)) {\n                layoutParams[whNames[idx]] = cellSize[idx] * cellNumbers[idx];\n            }\n        });\n\n        var whGlobal = {\n            width: api.getWidth(),\n            height: api.getHeight()\n        };\n        var calendarRect = this._rect = getLayoutRect(layoutParams, whGlobal);\n\n        each$1([0, 1], function (idx) {\n            if (!cellSizeSpecified(cellSize, idx)) {\n                cellSize[idx] = calendarRect[whNames[idx]] / cellNumbers[idx];\n            }\n        });\n\n        function cellSizeSpecified(cellSize, idx) {\n            return cellSize[idx] != null && cellSize[idx] !== 'auto';\n        }\n\n        this._sw = cellSize[0];\n        this._sh = cellSize[1];\n    },\n\n\n    /**\n     * Convert a time data(time, value) item to (x, y) point.\n     *\n     * @override\n     * @param  {Array|number} data data\n     * @param  {boolean} [clamp=true] out of range\n     * @return {Array} point\n     */\n    dataToPoint: function (data, clamp) {\n        isArray(data) && (data = data[0]);\n        clamp == null && (clamp = true);\n\n        var dayInfo = this.getDateInfo(data);\n        var range = this._rangeInfo;\n        var date = dayInfo.formatedDate;\n\n        // if not in range return [NaN, NaN]\n        if (clamp && !(\n            dayInfo.time >= range.start.time\n            && dayInfo.time < range.end.time + PROXIMATE_ONE_DAY\n        )) {\n            return [NaN, NaN];\n        }\n\n        var week = dayInfo.day;\n        var nthWeek = this._getRangeInfo([range.start.time, date]).nthWeek;\n\n        if (this._orient === 'vertical') {\n            return [\n                this._rect.x + week * this._sw + this._sw / 2,\n                this._rect.y + nthWeek * this._sh + this._sh / 2\n            ];\n\n        }\n\n        return [\n            this._rect.x + nthWeek * this._sw + this._sw / 2,\n            this._rect.y + week * this._sh + this._sh / 2\n        ];\n\n    },\n\n    /**\n     * Convert a (x, y) point to time data\n     *\n     * @override\n     * @param  {string} point point\n     * @return {string}       data\n     */\n    pointToData: function (point) {\n\n        var date = this.pointToDate(point);\n\n        return date && date.time;\n    },\n\n    /**\n     * Convert a time date item to (x, y) four point.\n     *\n     * @param  {Array} data  date[0] is date\n     * @param  {boolean} [clamp=true]  out of range\n     * @return {Object}       point\n     */\n    dataToRect: function (data, clamp) {\n        var point = this.dataToPoint(data, clamp);\n\n        return {\n            contentShape: {\n                x: point[0] - (this._sw - this._lineWidth) / 2,\n                y: point[1] - (this._sh - this._lineWidth) / 2,\n                width: this._sw - this._lineWidth,\n                height: this._sh - this._lineWidth\n            },\n\n            center: point,\n\n            tl: [\n                point[0] - this._sw / 2,\n                point[1] - this._sh / 2\n            ],\n\n            tr: [\n                point[0] + this._sw / 2,\n                point[1] - this._sh / 2\n            ],\n\n            br: [\n                point[0] + this._sw / 2,\n                point[1] + this._sh / 2\n            ],\n\n            bl: [\n                point[0] - this._sw / 2,\n                point[1] + this._sh / 2\n            ]\n\n        };\n    },\n\n    /**\n     * Convert a (x, y) point to time date\n     *\n     * @param  {Array} point point\n     * @return {Object}       date\n     */\n    pointToDate: function (point) {\n        var nthX = Math.floor((point[0] - this._rect.x) / this._sw) + 1;\n        var nthY = Math.floor((point[1] - this._rect.y) / this._sh) + 1;\n        var range = this._rangeInfo.range;\n\n        if (this._orient === 'vertical') {\n            return this._getDateByWeeksAndDay(nthY, nthX - 1, range);\n        }\n\n        return this._getDateByWeeksAndDay(nthX, nthY - 1, range);\n    },\n\n    /**\n     * @inheritDoc\n     */\n    convertToPixel: curry(doConvert$2, 'dataToPoint'),\n\n    /**\n     * @inheritDoc\n     */\n    convertFromPixel: curry(doConvert$2, 'pointToData'),\n\n    /**\n     * initRange\n     *\n     * @private\n     * @return {Array} [start, end]\n     */\n    _initRangeOption: function () {\n        var range = this._model.get('range');\n\n        var rg = range;\n\n        if (isArray(rg) && rg.length === 1) {\n            rg = rg[0];\n        }\n\n        if (/^\\d{4}$/.test(rg)) {\n            range = [rg + '-01-01', rg + '-12-31'];\n        }\n\n        if (/^\\d{4}[\\/|-]\\d{1,2}$/.test(rg)) {\n\n            var start = this.getDateInfo(rg);\n            var firstDay = start.date;\n            firstDay.setMonth(firstDay.getMonth() + 1);\n\n            var end = this.getNextNDay(firstDay, -1);\n            range = [start.formatedDate, end.formatedDate];\n        }\n\n        if (/^\\d{4}[\\/|-]\\d{1,2}[\\/|-]\\d{1,2}$/.test(rg)) {\n            range = [rg, rg];\n        }\n\n        var tmp = this._getRangeInfo(range);\n\n        if (tmp.start.time > tmp.end.time) {\n            range.reverse();\n        }\n\n        return range;\n    },\n\n    /**\n     * range info\n     *\n     * @private\n     * @param  {Array} range range ['2017-01-01', '2017-07-08']\n     *  If range[0] > range[1], they will not be reversed.\n     * @return {Object}       obj\n     */\n    _getRangeInfo: function (range) {\n        range = [\n            this.getDateInfo(range[0]),\n            this.getDateInfo(range[1])\n        ];\n\n        var reversed;\n        if (range[0].time > range[1].time) {\n            reversed = true;\n            range.reverse();\n        }\n\n        var allDay = Math.floor(range[1].time / PROXIMATE_ONE_DAY)\n            - Math.floor(range[0].time / PROXIMATE_ONE_DAY) + 1;\n\n        // Consider case:\n        // Firstly set system timezone as \"Time Zone: America/Toronto\",\n        // ```\n        // var first = new Date(1478412000000 - 3600 * 1000 * 2.5);\n        // var second = new Date(1478412000000);\n        // var allDays = Math.floor(second / ONE_DAY) - Math.floor(first / ONE_DAY) + 1;\n        // ```\n        // will get wrong result because of DST. So we should fix it.\n        var date = new Date(range[0].time);\n        var startDateNum = date.getDate();\n        var endDateNum = range[1].date.getDate();\n        date.setDate(startDateNum + allDay - 1);\n        // The bias can not over a month, so just compare date.\n        if (date.getDate() !== endDateNum) {\n            var sign = date.getTime() - range[1].time > 0 ? 1 : -1;\n            while (date.getDate() !== endDateNum && (date.getTime() - range[1].time) * sign > 0) {\n                allDay -= sign;\n                date.setDate(startDateNum + allDay - 1);\n            }\n        }\n\n        var weeks = Math.floor((allDay + range[0].day + 6) / 7);\n        var nthWeek = reversed ? -weeks + 1 : weeks - 1;\n\n        reversed && range.reverse();\n\n        return {\n            range: [range[0].formatedDate, range[1].formatedDate],\n            start: range[0],\n            end: range[1],\n            allDay: allDay,\n            weeks: weeks,\n            // From 0.\n            nthWeek: nthWeek,\n            fweek: range[0].day,\n            lweek: range[1].day\n        };\n    },\n\n    /**\n     * get date by nthWeeks and week day in range\n     *\n     * @private\n     * @param  {number} nthWeek the week\n     * @param  {number} day   the week day\n     * @param  {Array} range [d1, d2]\n     * @return {Object}\n     */\n    _getDateByWeeksAndDay: function (nthWeek, day, range) {\n        var rangeInfo = this._getRangeInfo(range);\n\n        if (nthWeek > rangeInfo.weeks\n            || (nthWeek === 0 && day < rangeInfo.fweek)\n            || (nthWeek === rangeInfo.weeks && day > rangeInfo.lweek)\n        ) {\n            return false;\n        }\n\n        var nthDay = (nthWeek - 1) * 7 - rangeInfo.fweek + day;\n        var date = new Date(rangeInfo.start.time);\n        date.setDate(rangeInfo.start.d + nthDay);\n\n        return this.getDateInfo(date);\n    }\n};\n\nCalendar.dimensions = Calendar.prototype.dimensions;\n\nCalendar.getDimensionsInfo = Calendar.prototype.getDimensionsInfo;\n\nCalendar.create = function (ecModel, api) {\n    var calendarList = [];\n\n    ecModel.eachComponent('calendar', function (calendarModel) {\n        var calendar = new Calendar(calendarModel, ecModel, api);\n        calendarList.push(calendar);\n        calendarModel.coordinateSystem = calendar;\n    });\n\n    ecModel.eachSeries(function (calendarSeries) {\n        if (calendarSeries.get('coordinateSystem') === 'calendar') {\n            // Inject coordinate system\n            calendarSeries.coordinateSystem = calendarList[calendarSeries.get('calendarIndex') || 0];\n        }\n    });\n    return calendarList;\n};\n\nfunction doConvert$2(methodName, ecModel, finder, value) {\n    var calendarModel = finder.calendarModel;\n    var seriesModel = finder.seriesModel;\n\n    var coordSys = calendarModel\n        ? calendarModel.coordinateSystem\n        : seriesModel\n        ? seriesModel.coordinateSystem\n        : null;\n\n    return coordSys === this ? coordSys[methodName](value) : null;\n}\n\nCoordinateSystemManager.register('calendar', Calendar);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar CalendarModel = ComponentModel.extend({\n\n    type: 'calendar',\n\n    /**\n     * @type {module:echarts/coord/calendar/Calendar}\n     */\n    coordinateSystem: null,\n\n    defaultOption: {\n        zlevel: 0,\n        z: 2,\n        left: 80,\n        top: 60,\n\n        cellSize: 20,\n\n        // horizontal vertical\n        orient: 'horizontal',\n\n        // month separate line style\n        splitLine: {\n            show: true,\n            lineStyle: {\n                color: '#000',\n                width: 1,\n                type: 'solid'\n            }\n        },\n\n        // rect style  temporarily unused emphasis\n        itemStyle: {\n            color: '#fff',\n            borderWidth: 1,\n            borderColor: '#ccc'\n        },\n\n        // week text style\n        dayLabel: {\n            show: true,\n\n            // a week first day\n            firstDay: 0,\n\n            // start end\n            position: 'start',\n            margin: '50%', // 50% of cellSize\n            nameMap: 'en',\n            color: '#000'\n        },\n\n        // month text style\n        monthLabel: {\n            show: true,\n\n            // start end\n            position: 'start',\n            margin: 5,\n\n            // center or left\n            align: 'center',\n\n            // cn en []\n            nameMap: 'en',\n            formatter: null,\n            color: '#000'\n        },\n\n        // year text style\n        yearLabel: {\n            show: true,\n\n            // top bottom left right\n            position: null,\n            margin: 30,\n            formatter: null,\n            color: '#ccc',\n            fontFamily: 'sans-serif',\n            fontWeight: 'bolder',\n            fontSize: 20\n        }\n    },\n\n    /**\n     * @override\n     */\n    init: function (option, parentModel, ecModel, extraOpt) {\n        var inputPositionParams = getLayoutParams(option);\n\n        CalendarModel.superApply(this, 'init', arguments);\n\n        mergeAndNormalizeLayoutParams(option, inputPositionParams);\n    },\n\n    /**\n     * @override\n     */\n    mergeOption: function (option, extraOpt) {\n        CalendarModel.superApply(this, 'mergeOption', arguments);\n\n        mergeAndNormalizeLayoutParams(this.option, option);\n    }\n});\n\nfunction mergeAndNormalizeLayoutParams(target, raw) {\n    // Normalize cellSize\n    var cellSize = target.cellSize;\n\n    if (!isArray(cellSize)) {\n        cellSize = target.cellSize = [cellSize, cellSize];\n    }\n    else if (cellSize.length === 1) {\n        cellSize[1] = cellSize[0];\n    }\n\n    var ignoreSize = map([0, 1], function (hvIdx) {\n        // If user have set `width` or both `left` and `right`, cellSize\n        // will be automatically set to 'auto', otherwise the default\n        // setting of cellSize will make `width` setting not work.\n        if (sizeCalculable(raw, hvIdx)) {\n            cellSize[hvIdx] = 'auto';\n        }\n        return cellSize[hvIdx] != null && cellSize[hvIdx] !== 'auto';\n    });\n\n    mergeLayoutParam(target, raw, {\n        type: 'box', ignoreSize: ignoreSize\n    });\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar MONTH_TEXT = {\n    EN: [\n        'Jan', 'Feb', 'Mar',\n        'Apr', 'May', 'Jun',\n        'Jul', 'Aug', 'Sep',\n        'Oct', 'Nov', 'Dec'\n    ],\n    CN: [\n        '一月', '二月', '三月',\n        '四月', '五月', '六月',\n        '七月', '八月', '九月',\n        '十月', '十一月', '十二月'\n    ]\n};\n\nvar WEEK_TEXT = {\n    EN: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],\n    CN: ['日', '一', '二', '三', '四', '五', '六']\n};\n\nextendComponentView({\n\n    type: 'calendar',\n\n    /**\n     * top/left line points\n     *  @private\n     */\n    _tlpoints: null,\n\n    /**\n     * bottom/right line points\n     *  @private\n     */\n    _blpoints: null,\n\n    /**\n     * first day of month\n     *  @private\n     */\n    _firstDayOfMonth: null,\n\n    /**\n     * first day point of month\n     *  @private\n     */\n    _firstDayPoints: null,\n\n    render: function (calendarModel, ecModel, api) {\n\n        var group = this.group;\n\n        group.removeAll();\n\n        var coordSys = calendarModel.coordinateSystem;\n\n        // range info\n        var rangeData = coordSys.getRangeInfo();\n        var orient = coordSys.getOrient();\n\n        this._renderDayRect(calendarModel, rangeData, group);\n\n        // _renderLines must be called prior to following function\n        this._renderLines(calendarModel, rangeData, orient, group);\n\n        this._renderYearText(calendarModel, rangeData, orient, group);\n\n        this._renderMonthText(calendarModel, orient, group);\n\n        this._renderWeekText(calendarModel, rangeData, orient, group);\n    },\n\n    // render day rect\n    _renderDayRect: function (calendarModel, rangeData, group) {\n        var coordSys = calendarModel.coordinateSystem;\n        var itemRectStyleModel = calendarModel.getModel('itemStyle').getItemStyle();\n        var sw = coordSys.getCellWidth();\n        var sh = coordSys.getCellHeight();\n\n        for (var i = rangeData.start.time;\n            i <= rangeData.end.time;\n            i = coordSys.getNextNDay(i, 1).time\n        ) {\n\n            var point = coordSys.dataToRect([i], false).tl;\n\n            // every rect\n            var rect = new Rect({\n                shape: {\n                    x: point[0],\n                    y: point[1],\n                    width: sw,\n                    height: sh\n                },\n                cursor: 'default',\n                style: itemRectStyleModel\n            });\n\n            group.add(rect);\n        }\n\n    },\n\n    // render separate line\n    _renderLines: function (calendarModel, rangeData, orient, group) {\n\n        var self = this;\n\n        var coordSys = calendarModel.coordinateSystem;\n\n        var lineStyleModel = calendarModel.getModel('splitLine.lineStyle').getLineStyle();\n        var show = calendarModel.get('splitLine.show');\n\n        var lineWidth = lineStyleModel.lineWidth;\n\n        this._tlpoints = [];\n        this._blpoints = [];\n        this._firstDayOfMonth = [];\n        this._firstDayPoints = [];\n\n\n        var firstDay = rangeData.start;\n\n        for (var i = 0; firstDay.time <= rangeData.end.time; i++) {\n            addPoints(firstDay.formatedDate);\n\n            if (i === 0) {\n                firstDay = coordSys.getDateInfo(rangeData.start.y + '-' + rangeData.start.m);\n            }\n\n            var date = firstDay.date;\n            date.setMonth(date.getMonth() + 1);\n            firstDay = coordSys.getDateInfo(date);\n        }\n\n        addPoints(coordSys.getNextNDay(rangeData.end.time, 1).formatedDate);\n\n        function addPoints(date) {\n\n            self._firstDayOfMonth.push(coordSys.getDateInfo(date));\n            self._firstDayPoints.push(coordSys.dataToRect([date], false).tl);\n\n            var points = self._getLinePointsOfOneWeek(calendarModel, date, orient);\n\n            self._tlpoints.push(points[0]);\n            self._blpoints.push(points[points.length - 1]);\n\n            show && self._drawSplitline(points, lineStyleModel, group);\n        }\n\n\n        // render top/left line\n        show && this._drawSplitline(self._getEdgesPoints(self._tlpoints, lineWidth, orient), lineStyleModel, group);\n\n        // render bottom/right line\n        show && this._drawSplitline(self._getEdgesPoints(self._blpoints, lineWidth, orient), lineStyleModel, group);\n\n    },\n\n    // get points at both ends\n    _getEdgesPoints: function (points, lineWidth, orient) {\n        var rs = [points[0].slice(), points[points.length - 1].slice()];\n        var idx = orient === 'horizontal' ? 0 : 1;\n\n        // both ends of the line are extend half lineWidth\n        rs[0][idx] = rs[0][idx] - lineWidth / 2;\n        rs[1][idx] = rs[1][idx] + lineWidth / 2;\n\n        return rs;\n    },\n\n    // render split line\n    _drawSplitline: function (points, lineStyleModel, group) {\n\n        var poyline = new Polyline({\n            z2: 20,\n            shape: {\n                points: points\n            },\n            style: lineStyleModel\n        });\n\n        group.add(poyline);\n    },\n\n    // render month line of one week points\n    _getLinePointsOfOneWeek: function (calendarModel, date, orient) {\n\n        var coordSys = calendarModel.coordinateSystem;\n        date = coordSys.getDateInfo(date);\n\n        var points = [];\n\n        for (var i = 0; i < 7; i++) {\n\n            var tmpD = coordSys.getNextNDay(date.time, i);\n            var point = coordSys.dataToRect([tmpD.time], false);\n\n            points[2 * tmpD.day] = point.tl;\n            points[2 * tmpD.day + 1] = point[orient === 'horizontal' ? 'bl' : 'tr'];\n        }\n\n        return points;\n\n    },\n\n    _formatterLabel: function (formatter, params) {\n\n        if (typeof formatter === 'string' && formatter) {\n            return formatTplSimple(formatter, params);\n        }\n\n        if (typeof formatter === 'function') {\n            return formatter(params);\n        }\n\n        return params.nameMap;\n\n    },\n\n    _yearTextPositionControl: function (textEl, point, orient, position, margin) {\n\n        point = point.slice();\n        var aligns = ['center', 'bottom'];\n\n        if (position === 'bottom') {\n            point[1] += margin;\n            aligns = ['center', 'top'];\n        }\n        else if (position === 'left') {\n            point[0] -= margin;\n        }\n        else if (position === 'right') {\n            point[0] += margin;\n            aligns = ['center', 'top'];\n        }\n        else { // top\n            point[1] -= margin;\n        }\n\n        var rotate = 0;\n        if (position === 'left' || position === 'right') {\n            rotate = Math.PI / 2;\n        }\n\n        return {\n            rotation: rotate,\n            position: point,\n            style: {\n                textAlign: aligns[0],\n                textVerticalAlign: aligns[1]\n            }\n        };\n    },\n\n    // render year\n    _renderYearText: function (calendarModel, rangeData, orient, group) {\n        var yearLabel = calendarModel.getModel('yearLabel');\n\n        if (!yearLabel.get('show')) {\n            return;\n        }\n\n        var margin = yearLabel.get('margin');\n        var pos = yearLabel.get('position');\n\n        if (!pos) {\n            pos = orient !== 'horizontal' ? 'top' : 'left';\n        }\n\n        var points = [this._tlpoints[this._tlpoints.length - 1], this._blpoints[0]];\n        var xc = (points[0][0] + points[1][0]) / 2;\n        var yc = (points[0][1] + points[1][1]) / 2;\n\n        var idx = orient === 'horizontal' ? 0 : 1;\n\n        var posPoints = {\n            top: [xc, points[idx][1]],\n            bottom: [xc, points[1 - idx][1]],\n            left: [points[1 - idx][0], yc],\n            right: [points[idx][0], yc]\n        };\n\n        var name = rangeData.start.y;\n\n        if (+rangeData.end.y > +rangeData.start.y) {\n            name = name + '-' + rangeData.end.y;\n        }\n\n        var formatter = yearLabel.get('formatter');\n\n        var params = {\n            start: rangeData.start.y,\n            end: rangeData.end.y,\n            nameMap: name\n        };\n\n        var content = this._formatterLabel(formatter, params);\n\n        var yearText = new Text({z2: 30});\n        setTextStyle(yearText.style, yearLabel, {text: content}),\n        yearText.attr(this._yearTextPositionControl(yearText, posPoints[pos], orient, pos, margin));\n\n        group.add(yearText);\n    },\n\n    _monthTextPositionControl: function (point, isCenter, orient, position, margin) {\n        var align = 'left';\n        var vAlign = 'top';\n        var x = point[0];\n        var y = point[1];\n\n        if (orient === 'horizontal') {\n            y = y + margin;\n\n            if (isCenter) {\n                align = 'center';\n            }\n\n            if (position === 'start') {\n                vAlign = 'bottom';\n            }\n        }\n        else {\n            x = x + margin;\n\n            if (isCenter) {\n                vAlign = 'middle';\n            }\n\n            if (position === 'start') {\n                align = 'right';\n            }\n        }\n\n        return {\n            x: x,\n            y: y,\n            textAlign: align,\n            textVerticalAlign: vAlign\n        };\n    },\n\n    // render month and year text\n    _renderMonthText: function (calendarModel, orient, group) {\n        var monthLabel = calendarModel.getModel('monthLabel');\n\n        if (!monthLabel.get('show')) {\n            return;\n        }\n\n        var nameMap = monthLabel.get('nameMap');\n        var margin = monthLabel.get('margin');\n        var pos = monthLabel.get('position');\n        var align = monthLabel.get('align');\n\n        var termPoints = [this._tlpoints, this._blpoints];\n\n        if (isString(nameMap)) {\n            nameMap = MONTH_TEXT[nameMap.toUpperCase()] || [];\n        }\n\n        var idx = pos === 'start' ? 0 : 1;\n        var axis = orient === 'horizontal' ? 0 : 1;\n        margin = pos === 'start' ? -margin : margin;\n        var isCenter = (align === 'center');\n\n        for (var i = 0; i < termPoints[idx].length - 1; i++) {\n\n            var tmp = termPoints[idx][i].slice();\n            var firstDay = this._firstDayOfMonth[i];\n\n            if (isCenter) {\n                var firstDayPoints = this._firstDayPoints[i];\n                tmp[axis] = (firstDayPoints[axis] + termPoints[0][i + 1][axis]) / 2;\n            }\n\n            var formatter = monthLabel.get('formatter');\n            var name = nameMap[+firstDay.m - 1];\n            var params = {\n                yyyy: firstDay.y,\n                yy: (firstDay.y + '').slice(2),\n                MM: firstDay.m,\n                M: +firstDay.m,\n                nameMap: name\n            };\n\n            var content = this._formatterLabel(formatter, params);\n\n            var monthText = new Text({z2: 30});\n            extend(\n                setTextStyle(monthText.style, monthLabel, {text: content}),\n                this._monthTextPositionControl(tmp, isCenter, orient, pos, margin)\n            );\n\n            group.add(monthText);\n        }\n    },\n\n    _weekTextPositionControl: function (point, orient, position, margin, cellSize) {\n        var align = 'center';\n        var vAlign = 'middle';\n        var x = point[0];\n        var y = point[1];\n        var isStart = position === 'start';\n\n        if (orient === 'horizontal') {\n            x = x + margin + (isStart ? 1 : -1) * cellSize[0] / 2;\n            align = isStart ? 'right' : 'left';\n        }\n        else {\n            y = y + margin + (isStart ? 1 : -1) * cellSize[1] / 2;\n            vAlign = isStart ? 'bottom' : 'top';\n        }\n\n        return {\n            x: x,\n            y: y,\n            textAlign: align,\n            textVerticalAlign: vAlign\n        };\n    },\n\n    // render weeks\n    _renderWeekText: function (calendarModel, rangeData, orient, group) {\n        var dayLabel = calendarModel.getModel('dayLabel');\n\n        if (!dayLabel.get('show')) {\n            return;\n        }\n\n        var coordSys = calendarModel.coordinateSystem;\n        var pos = dayLabel.get('position');\n        var nameMap = dayLabel.get('nameMap');\n        var margin = dayLabel.get('margin');\n        var firstDayOfWeek = coordSys.getFirstDayOfWeek();\n\n        if (isString(nameMap)) {\n            nameMap = WEEK_TEXT[nameMap.toUpperCase()] || [];\n        }\n\n        var start = coordSys.getNextNDay(\n            rangeData.end.time, (7 - rangeData.lweek)\n        ).time;\n\n        var cellSize = [coordSys.getCellWidth(), coordSys.getCellHeight()];\n        margin = parsePercent$1(margin, cellSize[orient === 'horizontal' ? 0 : 1]);\n\n        if (pos === 'start') {\n            start = coordSys.getNextNDay(\n                rangeData.start.time, -(7 + rangeData.fweek)\n            ).time;\n            margin = -margin;\n        }\n\n        for (var i = 0; i < 7; i++) {\n\n            var tmpD = coordSys.getNextNDay(start, i);\n            var point = coordSys.dataToRect([tmpD.time], false).center;\n            var day = i;\n            day = Math.abs((i + firstDayOfWeek) % 7);\n            var weekText = new Text({z2: 30});\n\n            extend(\n                setTextStyle(weekText.style, dayLabel, {text: nameMap[day]}),\n                this._weekTextPositionControl(point, orient, pos, margin, cellSize)\n            );\n            group.add(weekText);\n        }\n    }\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n// -------------\n// Preprocessor\n// -------------\n\nregisterPreprocessor(function (option) {\n    var graphicOption = option.graphic;\n\n    // Convert\n    // {graphic: [{left: 10, type: 'circle'}, ...]}\n    // or\n    // {graphic: {left: 10, type: 'circle'}}\n    // to\n    // {graphic: [{elements: [{left: 10, type: 'circle'}, ...]}]}\n    if (isArray(graphicOption)) {\n        if (!graphicOption[0] || !graphicOption[0].elements) {\n            option.graphic = [{elements: graphicOption}];\n        }\n        else {\n            // Only one graphic instance can be instantiated. (We dont\n            // want that too many views are created in echarts._viewMap)\n            option.graphic = [option.graphic[0]];\n        }\n    }\n    else if (graphicOption && !graphicOption.elements) {\n        option.graphic = [{elements: [graphicOption]}];\n    }\n});\n\n// ------\n// Model\n// ------\n\nvar GraphicModel = extendComponentModel({\n\n    type: 'graphic',\n\n    defaultOption: {\n\n        // Extra properties for each elements:\n        //\n        // left/right/top/bottom: (like 12, '22%', 'center', default undefined)\n        //      If left/rigth is set, shape.x/shape.cx/position will not be used.\n        //      If top/bottom is set, shape.y/shape.cy/position will not be used.\n        //      This mechanism is useful when you want to position a group/element\n        //      against the right side or the center of this container.\n        //\n        // width/height: (can only be pixel value, default 0)\n        //      Only be used to specify contianer(group) size, if needed. And\n        //      can not be percentage value (like '33%'). See the reason in the\n        //      layout algorithm below.\n        //\n        // bounding: (enum: 'all' (default) | 'raw')\n        //      Specify how to calculate boundingRect when locating.\n        //      'all': Get uioned and transformed boundingRect\n        //          from both itself and its descendants.\n        //          This mode simplies confining a group of elements in the bounding\n        //          of their ancester container (e.g., using 'right: 0').\n        //      'raw': Only use the boundingRect of itself and before transformed.\n        //          This mode is similar to css behavior, which is useful when you\n        //          want an element to be able to overflow its container. (Consider\n        //          a rotated circle needs to be located in a corner.)\n        // info: custom info. enables user to mount some info on elements and use them\n        //      in event handlers. Update them only when user specified, otherwise, remain.\n\n        // Note: elements is always behind its ancestors in this elements array.\n        elements: [],\n        parentId: null\n    },\n\n    /**\n     * Save el options for the sake of the performance (only update modified graphics).\n     * The order is the same as those in option. (ancesters -> descendants)\n     *\n     * @private\n     * @type {Array.<Object>}\n     */\n    _elOptionsToUpdate: null,\n\n    /**\n     * @override\n     */\n    mergeOption: function (option) {\n        // Prevent default merge to elements\n        var elements = this.option.elements;\n        this.option.elements = null;\n\n        GraphicModel.superApply(this, 'mergeOption', arguments);\n\n        this.option.elements = elements;\n    },\n\n    /**\n     * @override\n     */\n    optionUpdated: function (newOption, isInit) {\n        var thisOption = this.option;\n        var newList = (isInit ? thisOption : newOption).elements;\n        var existList = thisOption.elements = isInit ? [] : thisOption.elements;\n\n        var flattenedList = [];\n        this._flatten(newList, flattenedList);\n\n        var mappingResult = mappingToExists(existList, flattenedList);\n        makeIdAndName(mappingResult);\n\n        // Clear elOptionsToUpdate\n        var elOptionsToUpdate = this._elOptionsToUpdate = [];\n\n        each$1(mappingResult, function (resultItem, index) {\n            var newElOption = resultItem.option;\n\n            if (__DEV__) {\n                assert$1(\n                    isObject$1(newElOption) || resultItem.exist,\n                    'Empty graphic option definition'\n                );\n            }\n\n            if (!newElOption) {\n                return;\n            }\n\n            elOptionsToUpdate.push(newElOption);\n\n            setKeyInfoToNewElOption(resultItem, newElOption);\n\n            mergeNewElOptionToExist(existList, index, newElOption);\n\n            setLayoutInfoToExist(existList[index], newElOption);\n\n        }, this);\n\n        // Clean\n        for (var i = existList.length - 1; i >= 0; i--) {\n            if (existList[i] == null) {\n                existList.splice(i, 1);\n            }\n            else {\n                // $action should be volatile, otherwise option gotten from\n                // `getOption` will contain unexpected $action.\n                delete existList[i].$action;\n            }\n        }\n    },\n\n    /**\n     * Convert\n     * [{\n     *  type: 'group',\n     *  id: 'xx',\n     *  children: [{type: 'circle'}, {type: 'polygon'}]\n     * }]\n     * to\n     * [\n     *  {type: 'group', id: 'xx'},\n     *  {type: 'circle', parentId: 'xx'},\n     *  {type: 'polygon', parentId: 'xx'}\n     * ]\n     *\n     * @private\n     * @param {Array.<Object>} optionList option list\n     * @param {Array.<Object>} result result of flatten\n     * @param {Object} parentOption parent option\n     */\n    _flatten: function (optionList, result, parentOption) {\n        each$1(optionList, function (option) {\n            if (!option) {\n                return;\n            }\n\n            if (parentOption) {\n                option.parentOption = parentOption;\n            }\n\n            result.push(option);\n\n            var children = option.children;\n            if (option.type === 'group' && children) {\n                this._flatten(children, result, option);\n            }\n            // Deleting for JSON output, and for not affecting group creation.\n            delete option.children;\n        }, this);\n    },\n\n    // FIXME\n    // Pass to view using payload? setOption has a payload?\n    useElOptionsToUpdate: function () {\n        var els = this._elOptionsToUpdate;\n        // Clear to avoid render duplicately when zooming.\n        this._elOptionsToUpdate = null;\n        return els;\n    }\n});\n\n// -----\n// View\n// -----\n\nextendComponentView({\n\n    type: 'graphic',\n\n    /**\n     * @override\n     */\n    init: function (ecModel, api) {\n\n        /**\n         * @private\n         * @type {module:zrender/core/util.HashMap}\n         */\n        this._elMap = createHashMap();\n\n        /**\n         * @private\n         * @type {module:echarts/graphic/GraphicModel}\n         */\n        this._lastGraphicModel;\n    },\n\n    /**\n     * @override\n     */\n    render: function (graphicModel, ecModel, api) {\n\n        // Having leveraged between use cases and algorithm complexity, a very\n        // simple layout mechanism is used:\n        // The size(width/height) can be determined by itself or its parent (not\n        // implemented yet), but can not by its children. (Top-down travel)\n        // The location(x/y) can be determined by the bounding rect of itself\n        // (can including its descendants or not) and the size of its parent.\n        // (Bottom-up travel)\n\n        // When `chart.clear()` or `chart.setOption({...}, true)` with the same id,\n        // view will be reused.\n        if (graphicModel !== this._lastGraphicModel) {\n            this._clear();\n        }\n        this._lastGraphicModel = graphicModel;\n\n        this._updateElements(graphicModel);\n        this._relocate(graphicModel, api);\n    },\n\n    /**\n     * Update graphic elements.\n     *\n     * @private\n     * @param {Object} graphicModel graphic model\n     */\n    _updateElements: function (graphicModel) {\n        var elOptionsToUpdate = graphicModel.useElOptionsToUpdate();\n\n        if (!elOptionsToUpdate) {\n            return;\n        }\n\n        var elMap = this._elMap;\n        var rootGroup = this.group;\n\n        // Top-down tranverse to assign graphic settings to each elements.\n        each$1(elOptionsToUpdate, function (elOption) {\n            var $action = elOption.$action;\n            var id = elOption.id;\n            var existEl = elMap.get(id);\n            var parentId = elOption.parentId;\n            var targetElParent = parentId != null ? elMap.get(parentId) : rootGroup;\n\n            var elOptionStyle = elOption.style;\n            if (elOption.type === 'text' && elOptionStyle) {\n                // In top/bottom mode, textVerticalAlign should not be used, which cause\n                // inaccurately locating.\n                if (elOption.hv && elOption.hv[1]) {\n                    elOptionStyle.textVerticalAlign = elOptionStyle.textBaseline = null;\n                }\n\n                // Compatible with previous setting: both support fill and textFill,\n                // stroke and textStroke.\n                !elOptionStyle.hasOwnProperty('textFill') && elOptionStyle.fill && (\n                    elOptionStyle.textFill = elOptionStyle.fill\n                );\n                !elOptionStyle.hasOwnProperty('textStroke') && elOptionStyle.stroke && (\n                    elOptionStyle.textStroke = elOptionStyle.stroke\n                );\n            }\n\n            // Remove unnecessary props to avoid potential problems.\n            var elOptionCleaned = getCleanedElOption(elOption);\n\n            // For simple, do not support parent change, otherwise reorder is needed.\n            if (__DEV__) {\n                existEl && assert$1(\n                    targetElParent === existEl.parent,\n                    'Changing parent is not supported.'\n                );\n            }\n\n            if (!$action || $action === 'merge') {\n                existEl\n                    ? existEl.attr(elOptionCleaned)\n                    : createEl$1(id, targetElParent, elOptionCleaned, elMap);\n            }\n            else if ($action === 'replace') {\n                removeEl(existEl, elMap);\n                createEl$1(id, targetElParent, elOptionCleaned, elMap);\n            }\n            else if ($action === 'remove') {\n                removeEl(existEl, elMap);\n            }\n\n            var el = elMap.get(id);\n            if (el) {\n                el.__ecGraphicWidth = elOption.width;\n                el.__ecGraphicHeight = elOption.height;\n                setEventData(el, graphicModel, elOption);\n            }\n        });\n    },\n\n    /**\n     * Locate graphic elements.\n     *\n     * @private\n     * @param {Object} graphicModel graphic model\n     * @param {module:echarts/ExtensionAPI} api extension API\n     */\n    _relocate: function (graphicModel, api) {\n        var elOptions = graphicModel.option.elements;\n        var rootGroup = this.group;\n        var elMap = this._elMap;\n\n        // Bottom-up tranvese all elements (consider ec resize) to locate elements.\n        for (var i = elOptions.length - 1; i >= 0; i--) {\n            var elOption = elOptions[i];\n            var el = elMap.get(elOption.id);\n\n            if (!el) {\n                continue;\n            }\n\n            var parentEl = el.parent;\n            var containerInfo = parentEl === rootGroup\n                ? {\n                    width: api.getWidth(),\n                    height: api.getHeight()\n                }\n                : { // Like 'position:absolut' in css, default 0.\n                    width: parentEl.__ecGraphicWidth || 0,\n                    height: parentEl.__ecGraphicHeight || 0\n                };\n\n            positionElement(\n                el, elOption, containerInfo, null,\n                {hv: elOption.hv, boundingMode: elOption.bounding}\n            );\n        }\n    },\n\n    /**\n     * Clear all elements.\n     *\n     * @private\n     */\n    _clear: function () {\n        var elMap = this._elMap;\n        elMap.each(function (el) {\n            removeEl(el, elMap);\n        });\n        this._elMap = createHashMap();\n    },\n\n    /**\n     * @override\n     */\n    dispose: function () {\n        this._clear();\n    }\n});\n\nfunction createEl$1(id, targetElParent, elOption, elMap) {\n    var graphicType = elOption.type;\n\n    if (__DEV__) {\n        assert$1(graphicType, 'graphic type MUST be set');\n    }\n\n    var Clz = graphic[graphicType.charAt(0).toUpperCase() + graphicType.slice(1)];\n\n    if (__DEV__) {\n        assert$1(Clz, 'graphic type can not be found');\n    }\n\n    var el = new Clz(elOption);\n    targetElParent.add(el);\n    elMap.set(id, el);\n    el.__ecGraphicId = id;\n}\n\nfunction removeEl(existEl, elMap) {\n    var existElParent = existEl && existEl.parent;\n    if (existElParent) {\n        existEl.type === 'group' && existEl.traverse(function (el) {\n            removeEl(el, elMap);\n        });\n        elMap.removeKey(existEl.__ecGraphicId);\n        existElParent.remove(existEl);\n    }\n}\n\n// Remove unnecessary props to avoid potential problems.\nfunction getCleanedElOption(elOption) {\n    elOption = extend({}, elOption);\n    each$1(\n        ['id', 'parentId', '$action', 'hv', 'bounding'].concat(LOCATION_PARAMS),\n        function (name) {\n            delete elOption[name];\n        }\n    );\n    return elOption;\n}\n\nfunction isSetLoc(obj, props) {\n    var isSet;\n    each$1(props, function (prop) {\n        obj[prop] != null && obj[prop] !== 'auto' && (isSet = true);\n    });\n    return isSet;\n}\n\nfunction setKeyInfoToNewElOption(resultItem, newElOption) {\n    var existElOption = resultItem.exist;\n\n    // Set id and type after id assigned.\n    newElOption.id = resultItem.keyInfo.id;\n    !newElOption.type && existElOption && (newElOption.type = existElOption.type);\n\n    // Set parent id if not specified\n    if (newElOption.parentId == null) {\n        var newElParentOption = newElOption.parentOption;\n        if (newElParentOption) {\n            newElOption.parentId = newElParentOption.id;\n        }\n        else if (existElOption) {\n            newElOption.parentId = existElOption.parentId;\n        }\n    }\n\n    // Clear\n    newElOption.parentOption = null;\n}\n\nfunction mergeNewElOptionToExist(existList, index, newElOption) {\n    // Update existing options, for `getOption` feature.\n    var newElOptCopy = extend({}, newElOption);\n    var existElOption = existList[index];\n\n    var $action = newElOption.$action || 'merge';\n    if ($action === 'merge') {\n        if (existElOption) {\n\n            if (__DEV__) {\n                var newType = newElOption.type;\n                assert$1(\n                    !newType || existElOption.type === newType,\n                    'Please set $action: \"replace\" to change `type`'\n                );\n            }\n\n            // We can ensure that newElOptCopy and existElOption are not\n            // the same object, so `merge` will not change newElOptCopy.\n            merge(existElOption, newElOptCopy, true);\n            // Rigid body, use ignoreSize.\n            mergeLayoutParam(existElOption, newElOptCopy, {ignoreSize: true});\n            // Will be used in render.\n            copyLayoutParams(newElOption, existElOption);\n        }\n        else {\n            existList[index] = newElOptCopy;\n        }\n    }\n    else if ($action === 'replace') {\n        existList[index] = newElOptCopy;\n    }\n    else if ($action === 'remove') {\n        // null will be cleaned later.\n        existElOption && (existList[index] = null);\n    }\n}\n\nfunction setLayoutInfoToExist(existItem, newElOption) {\n    if (!existItem) {\n        return;\n    }\n    existItem.hv = newElOption.hv = [\n        // Rigid body, dont care `width`.\n        isSetLoc(newElOption, ['left', 'right']),\n        // Rigid body, dont care `height`.\n        isSetLoc(newElOption, ['top', 'bottom'])\n    ];\n    // Give default group size. Otherwise layout error may occur.\n    if (existItem.type === 'group') {\n        existItem.width == null && (existItem.width = newElOption.width = 0);\n        existItem.height == null && (existItem.height = newElOption.height = 0);\n    }\n}\n\nfunction setEventData(el, graphicModel, elOption) {\n    var eventData = el.eventData;\n    // Simple optimize for large amount of elements that no need event.\n    if (!el.silent && !el.ignore && !eventData) {\n        eventData = el.eventData = {\n            componentType: 'graphic',\n            componentIndex: graphicModel.componentIndex,\n            name: el.name\n        };\n    }\n\n    // `elOption.info` enables user to mount some info on\n    // elements and use them in event handlers.\n    if (eventData) {\n        eventData.info = el.info;\n    }\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\nvar features = {};\n\nfunction register$1(name, ctor) {\n    features[name] = ctor;\n}\n\nfunction get$1(name) {\n    return features[name];\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar ToolboxModel = extendComponentModel({\n\n    type: 'toolbox',\n\n    layoutMode: {\n        type: 'box',\n        ignoreSize: true\n    },\n\n    optionUpdated: function () {\n        ToolboxModel.superApply(this, 'optionUpdated', arguments);\n\n        each$1(this.option.feature, function (featureOpt, featureName) {\n            var Feature = get$1(featureName);\n            Feature && merge(featureOpt, Feature.defaultOption);\n        });\n    },\n\n    defaultOption: {\n\n        show: true,\n\n        z: 6,\n\n        zlevel: 0,\n\n        orient: 'horizontal',\n\n        left: 'right',\n\n        top: 'top',\n\n        // right\n        // bottom\n\n        backgroundColor: 'transparent',\n\n        borderColor: '#ccc',\n\n        borderRadius: 0,\n\n        borderWidth: 0,\n\n        padding: 5,\n\n        itemSize: 15,\n\n        itemGap: 8,\n\n        showTitle: true,\n\n        iconStyle: {\n            borderColor: '#666',\n            color: 'none'\n        },\n        emphasis: {\n            iconStyle: {\n                borderColor: '#3E98C5'\n            }\n        },\n        // textStyle: {},\n\n        // feature\n\n        tooltip: {\n            show: false\n        }\n    }\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Layout list like component.\n * It will box layout each items in group of component and then position the whole group in the viewport\n * @param {module:zrender/group/Group} group\n * @param {module:echarts/model/Component} componentModel\n * @param {module:echarts/ExtensionAPI}\n */\nfunction layout$3(group, componentModel, api) {\n    var boxLayoutParams = componentModel.getBoxLayoutParams();\n    var padding = componentModel.get('padding');\n    var viewportSize = {width: api.getWidth(), height: api.getHeight()};\n\n    var rect = getLayoutRect(\n        boxLayoutParams,\n        viewportSize,\n        padding\n    );\n\n    box(\n        componentModel.get('orient'),\n        group,\n        componentModel.get('itemGap'),\n        rect.width,\n        rect.height\n    );\n\n    positionElement(\n        group,\n        boxLayoutParams,\n        viewportSize,\n        padding\n    );\n}\n\nfunction makeBackground(rect, componentModel) {\n    var padding = normalizeCssArray$1(\n        componentModel.get('padding')\n    );\n    var style = componentModel.getItemStyle(['color', 'opacity']);\n    style.fill = componentModel.get('backgroundColor');\n    var rect = new Rect({\n        shape: {\n            x: rect.x - padding[3],\n            y: rect.y - padding[0],\n            width: rect.width + padding[1] + padding[3],\n            height: rect.height + padding[0] + padding[2],\n            r: componentModel.get('borderRadius')\n        },\n        style: style,\n        silent: true,\n        z2: -1\n    });\n    // FIXME\n    // `subPixelOptimizeRect` may bring some gap between edge of viewpart\n    // and background rect when setting like `left: 0`, `top: 0`.\n    // graphic.subPixelOptimizeRect(rect);\n\n    return rect;\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nextendComponentView({\n\n    type: 'toolbox',\n\n    render: function (toolboxModel, ecModel, api, payload) {\n        var group = this.group;\n        group.removeAll();\n\n        if (!toolboxModel.get('show')) {\n            return;\n        }\n\n        var itemSize = +toolboxModel.get('itemSize');\n        var featureOpts = toolboxModel.get('feature') || {};\n        var features = this._features || (this._features = {});\n\n        var featureNames = [];\n        each$1(featureOpts, function (opt, name) {\n            featureNames.push(name);\n        });\n\n        (new DataDiffer(this._featureNames || [], featureNames))\n            .add(processFeature)\n            .update(processFeature)\n            .remove(curry(processFeature, null))\n            .execute();\n\n        // Keep for diff.\n        this._featureNames = featureNames;\n\n        function processFeature(newIndex, oldIndex) {\n            var featureName = featureNames[newIndex];\n            var oldName = featureNames[oldIndex];\n            var featureOpt = featureOpts[featureName];\n            var featureModel = new Model(featureOpt, toolboxModel, toolboxModel.ecModel);\n            var feature;\n\n            if (featureName && !oldName) { // Create\n                if (isUserFeatureName(featureName)) {\n                    feature = {\n                        model: featureModel,\n                        onclick: featureModel.option.onclick,\n                        featureName: featureName\n                    };\n                }\n                else {\n                    var Feature = get$1(featureName);\n                    if (!Feature) {\n                        return;\n                    }\n                    feature = new Feature(featureModel, ecModel, api);\n                }\n                features[featureName] = feature;\n            }\n            else {\n                feature = features[oldName];\n                // If feature does not exsit.\n                if (!feature) {\n                    return;\n                }\n                feature.model = featureModel;\n                feature.ecModel = ecModel;\n                feature.api = api;\n            }\n\n            if (!featureName && oldName) {\n                feature.dispose && feature.dispose(ecModel, api);\n                return;\n            }\n\n            if (!featureModel.get('show') || feature.unusable) {\n                feature.remove && feature.remove(ecModel, api);\n                return;\n            }\n\n            createIconPaths(featureModel, feature, featureName);\n\n            featureModel.setIconStatus = function (iconName, status) {\n                var option = this.option;\n                var iconPaths = this.iconPaths;\n                option.iconStatus = option.iconStatus || {};\n                option.iconStatus[iconName] = status;\n                // FIXME\n                iconPaths[iconName] && iconPaths[iconName].trigger(status);\n            };\n\n            if (feature.render) {\n                feature.render(featureModel, ecModel, api, payload);\n            }\n        }\n\n        function createIconPaths(featureModel, feature, featureName) {\n            var iconStyleModel = featureModel.getModel('iconStyle');\n            var iconStyleEmphasisModel = featureModel.getModel('emphasis.iconStyle');\n\n            // If one feature has mutiple icon. they are orginaized as\n            // {\n            //     icon: {\n            //         foo: '',\n            //         bar: ''\n            //     },\n            //     title: {\n            //         foo: '',\n            //         bar: ''\n            //     }\n            // }\n            var icons = feature.getIcons ? feature.getIcons() : featureModel.get('icon');\n            var titles = featureModel.get('title') || {};\n            if (typeof icons === 'string') {\n                var icon = icons;\n                var title = titles;\n                icons = {};\n                titles = {};\n                icons[featureName] = icon;\n                titles[featureName] = title;\n            }\n            var iconPaths = featureModel.iconPaths = {};\n            each$1(icons, function (iconStr, iconName) {\n                var path = createIcon(\n                    iconStr,\n                    {},\n                    {\n                        x: -itemSize / 2,\n                        y: -itemSize / 2,\n                        width: itemSize,\n                        height: itemSize\n                    }\n                );\n                path.setStyle(iconStyleModel.getItemStyle());\n                path.hoverStyle = iconStyleEmphasisModel.getItemStyle();\n\n                var tooltipModel = toolboxModel.getModel('tooltip');\n                if (tooltipModel && tooltipModel.get('show')) {\n                    path.attr('tooltip', extend({\n                        content: titles[iconName],\n                        formatter: tooltipModel.get('formatter', true)\n                            || function () {\n                                return titles[iconName];\n                            },\n                        formatterParams: {\n                            componentType: 'toolbox',\n                            name: iconName,\n                            title: titles[iconName],\n                            $vars: ['name', 'title']\n                        },\n                        position: tooltipModel.get('position', true) || 'bottom'\n                    }, tooltipModel.option));\n                }\n\n                setHoverStyle(path);\n\n                if (toolboxModel.get('showTitle')) {\n                    path.__title = titles[iconName];\n                    path.on('mouseover', function () {\n                            // Should not reuse above hoverStyle, which might be modified.\n                            var hoverStyle = iconStyleEmphasisModel.getItemStyle();\n                            path.setStyle({\n                                text: titles[iconName],\n                                textPosition: iconStyleEmphasisModel.get('textPosition') || 'bottom',\n                                textFill: iconStyleEmphasisModel.get('textFill') || hoverStyle.fill || hoverStyle.stroke || '#000',\n                                textAlign: iconStyleEmphasisModel.get('textAlign') || 'center',\n                                textBackgroundColor: iconStyleEmphasisModel.get('textBackgroundColor'),\n                                textBorderRadius: iconStyleEmphasisModel.get('textBorderRadius'),\n                                textPadding: iconStyleEmphasisModel.get('textPadding')\n                            });\n                        })\n                        .on('mouseout', function () {\n                            path.setStyle({\n                                textFill: null,\n                                textBackgroundColor: null\n                            });\n                        });\n                }\n                path.trigger(featureModel.get('iconStatus.' + iconName) || 'normal');\n\n                group.add(path);\n                path.on('click', bind(\n                    feature.onclick, feature, ecModel, api, iconName\n                ));\n\n                iconPaths[iconName] = path;\n            });\n        }\n\n        layout$3(group, toolboxModel, api);\n        // Render background after group is layout\n        // FIXME\n        group.add(makeBackground(group.getBoundingRect(), toolboxModel));\n\n        // Adjust icon title positions to avoid them out of screen\n        group.eachChild(function (icon) {\n            var titleText = icon.__title;\n            var hoverStyle = icon.hoverStyle;\n            // May be background element\n            if (hoverStyle && titleText) {\n                var rect = getBoundingRect(\n                    titleText, makeFont(hoverStyle)\n                );\n                var offsetX = icon.position[0] + group.position[0];\n                var offsetY = icon.position[1] + group.position[1] + itemSize;\n\n                var needPutOnTop = false;\n                if (offsetY + rect.height > api.getHeight()) {\n                    hoverStyle.textPosition = 'top';\n                    needPutOnTop = true;\n                }\n                var topOffset = needPutOnTop ? (-5 - rect.height) : (itemSize + 8);\n                if (offsetX + rect.width / 2 > api.getWidth()) {\n                    hoverStyle.textPosition = ['100%', topOffset];\n                    hoverStyle.textAlign = 'right';\n                }\n                else if (offsetX - rect.width / 2 < 0) {\n                    hoverStyle.textPosition = [0, topOffset];\n                    hoverStyle.textAlign = 'left';\n                }\n            }\n        });\n    },\n\n    updateView: function (toolboxModel, ecModel, api, payload) {\n        each$1(this._features, function (feature) {\n            feature.updateView && feature.updateView(feature.model, ecModel, api, payload);\n        });\n    },\n\n    // updateLayout: function (toolboxModel, ecModel, api, payload) {\n    //     zrUtil.each(this._features, function (feature) {\n    //         feature.updateLayout && feature.updateLayout(feature.model, ecModel, api, payload);\n    //     });\n    // },\n\n    remove: function (ecModel, api) {\n        each$1(this._features, function (feature) {\n            feature.remove && feature.remove(ecModel, api);\n        });\n        this.group.removeAll();\n    },\n\n    dispose: function (ecModel, api) {\n        each$1(this._features, function (feature) {\n            feature.dispose && feature.dispose(ecModel, api);\n        });\n    }\n});\n\nfunction isUserFeatureName(featureName) {\n    return featureName.indexOf('my') === 0;\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/* global Uint8Array */\n\nvar saveAsImageLang = lang.toolbox.saveAsImage;\n\nfunction SaveAsImage(model) {\n    this.model = model;\n}\n\nSaveAsImage.defaultOption = {\n    show: true,\n    icon: 'M4.7,22.9L29.3,45.5L54.7,23.4M4.6,43.6L4.6,58L53.8,58L53.8,43.6M29.2,45.1L29.2,0',\n    title: saveAsImageLang.title,\n    type: 'png',\n    // Default use option.backgroundColor\n    // backgroundColor: '#fff',\n    connectedBackgroundColor: '#fff',\n    name: '',\n    excludeComponents: ['toolbox'],\n    pixelRatio: 1,\n    lang: saveAsImageLang.lang.slice()\n};\n\nSaveAsImage.prototype.unusable = !env$1.canvasSupported;\n\nvar proto$2 = SaveAsImage.prototype;\n\nproto$2.onclick = function (ecModel, api) {\n    var model = this.model;\n    var title = model.get('name') || ecModel.get('title.0.text') || 'echarts';\n    var type = model.get('type', true) || 'png';\n    var url = api.getConnectedDataURL({\n        type: type,\n        backgroundColor: model.get('backgroundColor', true)\n            || ecModel.get('backgroundColor') || '#fff',\n        connectedBackgroundColor: model.get('connectedBackgroundColor'),\n        excludeComponents: model.get('excludeComponents'),\n        pixelRatio: model.get('pixelRatio')\n    });\n    // Chrome and Firefox\n    if (typeof MouseEvent === 'function' && !env$1.browser.ie && !env$1.browser.edge) {\n        var $a = document.createElement('a');\n        $a.download = title + '.' + type;\n        $a.target = '_blank';\n        $a.href = url;\n        var evt = new MouseEvent('click', {\n            view: window,\n            bubbles: true,\n            cancelable: false\n        });\n        $a.dispatchEvent(evt);\n    }\n    // IE\n    else {\n        if (window.navigator.msSaveOrOpenBlob) {\n            var bstr = atob(url.split(',')[1]);\n            var n = bstr.length;\n            var u8arr = new Uint8Array(n);\n            while (n--) {\n                u8arr[n] = bstr.charCodeAt(n);\n            }\n            var blob = new Blob([u8arr]);\n            window.navigator.msSaveOrOpenBlob(blob, title + '.' + type);\n        }\n        else {\n            var lang$$1 = model.get('lang');\n            var html = ''\n                + '<body style=\"margin:0;\">'\n                + '<img src=\"' + url + '\" style=\"max-width:100%;\" title=\"' + ((lang$$1 && lang$$1[0]) || '') + '\" />'\n                + '</body>';\n            var tab = window.open();\n            tab.document.write(html);\n        }\n    }\n};\n\nregister$1(\n    'saveAsImage', SaveAsImage\n);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar magicTypeLang = lang.toolbox.magicType;\n\nfunction MagicType(model) {\n    this.model = model;\n}\n\nMagicType.defaultOption = {\n    show: true,\n    type: [],\n    // Icon group\n    icon: {\n        /* eslint-disable */\n        line: 'M4.1,28.9h7.1l9.3-22l7.4,38l9.7-19.7l3,12.8h14.9M4.1,58h51.4',\n        bar: 'M6.7,22.9h10V48h-10V22.9zM24.9,13h10v35h-10V13zM43.2,2h10v46h-10V2zM3.1,58h53.7',\n        stack: 'M8.2,38.4l-8.4,4.1l30.6,15.3L60,42.5l-8.1-4.1l-21.5,11L8.2,38.4z M51.9,30l-8.1,4.2l-13.4,6.9l-13.9-6.9L8.2,30l-8.4,4.2l8.4,4.2l22.2,11l21.5-11l8.1-4.2L51.9,30z M51.9,21.7l-8.1,4.2L35.7,30l-5.3,2.8L24.9,30l-8.4-4.1l-8.3-4.2l-8.4,4.2L8.2,30l8.3,4.2l13.9,6.9l13.4-6.9l8.1-4.2l8.1-4.1L51.9,21.7zM30.4,2.2L-0.2,17.5l8.4,4.1l8.3,4.2l8.4,4.2l5.5,2.7l5.3-2.7l8.1-4.2l8.1-4.2l8.1-4.1L30.4,2.2z', // jshint ignore:line\n        tiled: 'M2.3,2.2h22.8V25H2.3V2.2z M35,2.2h22.8V25H35V2.2zM2.3,35h22.8v22.8H2.3V35z M35,35h22.8v22.8H35V35z'\n        /* eslint-enable */\n    },\n    // `line`, `bar`, `stack`, `tiled`\n    title: clone(magicTypeLang.title),\n    option: {},\n    seriesIndex: {}\n};\n\nvar proto$3 = MagicType.prototype;\n\nproto$3.getIcons = function () {\n    var model = this.model;\n    var availableIcons = model.get('icon');\n    var icons = {};\n    each$1(model.get('type'), function (type) {\n        if (availableIcons[type]) {\n            icons[type] = availableIcons[type];\n        }\n    });\n    return icons;\n};\n\nvar seriesOptGenreator = {\n    'line': function (seriesType, seriesId, seriesModel, model) {\n        if (seriesType === 'bar') {\n            return merge({\n                id: seriesId,\n                type: 'line',\n                // Preserve data related option\n                data: seriesModel.get('data'),\n                stack: seriesModel.get('stack'),\n                markPoint: seriesModel.get('markPoint'),\n                markLine: seriesModel.get('markLine')\n            }, model.get('option.line') || {}, true);\n        }\n    },\n    'bar': function (seriesType, seriesId, seriesModel, model) {\n        if (seriesType === 'line') {\n            return merge({\n                id: seriesId,\n                type: 'bar',\n                // Preserve data related option\n                data: seriesModel.get('data'),\n                stack: seriesModel.get('stack'),\n                markPoint: seriesModel.get('markPoint'),\n                markLine: seriesModel.get('markLine')\n            }, model.get('option.bar') || {}, true);\n        }\n    },\n    'stack': function (seriesType, seriesId, seriesModel, model) {\n        if (seriesType === 'line' || seriesType === 'bar') {\n            return merge({\n                id: seriesId,\n                stack: '__ec_magicType_stack__'\n            }, model.get('option.stack') || {}, true);\n        }\n    },\n    'tiled': function (seriesType, seriesId, seriesModel, model) {\n        if (seriesType === 'line' || seriesType === 'bar') {\n            return merge({\n                id: seriesId,\n                stack: ''\n            }, model.get('option.tiled') || {}, true);\n        }\n    }\n};\n\nvar radioTypes = [\n    ['line', 'bar'],\n    ['stack', 'tiled']\n];\n\nproto$3.onclick = function (ecModel, api, type) {\n    var model = this.model;\n    var seriesIndex = model.get('seriesIndex.' + type);\n    // Not supported magicType\n    if (!seriesOptGenreator[type]) {\n        return;\n    }\n    var newOption = {\n        series: []\n    };\n    var generateNewSeriesTypes = function (seriesModel) {\n        var seriesType = seriesModel.subType;\n        var seriesId = seriesModel.id;\n        var newSeriesOpt = seriesOptGenreator[type](\n            seriesType, seriesId, seriesModel, model\n        );\n        if (newSeriesOpt) {\n            // PENDING If merge original option?\n            defaults(newSeriesOpt, seriesModel.option);\n            newOption.series.push(newSeriesOpt);\n        }\n        // Modify boundaryGap\n        var coordSys = seriesModel.coordinateSystem;\n        if (coordSys && coordSys.type === 'cartesian2d' && (type === 'line' || type === 'bar')) {\n            var categoryAxis = coordSys.getAxesByScale('ordinal')[0];\n            if (categoryAxis) {\n                var axisDim = categoryAxis.dim;\n                var axisType = axisDim + 'Axis';\n                var axisModel = ecModel.queryComponents({\n                    mainType: axisType,\n                    index: seriesModel.get(name + 'Index'),\n                    id: seriesModel.get(name + 'Id')\n                })[0];\n                var axisIndex = axisModel.componentIndex;\n\n                newOption[axisType] = newOption[axisType] || [];\n                for (var i = 0; i <= axisIndex; i++) {\n                    newOption[axisType][axisIndex] = newOption[axisType][axisIndex] || {};\n                }\n                newOption[axisType][axisIndex].boundaryGap = type === 'bar';\n            }\n        }\n    };\n\n    each$1(radioTypes, function (radio) {\n        if (indexOf(radio, type) >= 0) {\n            each$1(radio, function (item) {\n                model.setIconStatus(item, 'normal');\n            });\n        }\n    });\n\n    model.setIconStatus(type, 'emphasis');\n\n    ecModel.eachComponent(\n        {\n            mainType: 'series',\n            query: seriesIndex == null ? null : {\n                seriesIndex: seriesIndex\n            }\n        }, generateNewSeriesTypes\n    );\n    api.dispatchAction({\n        type: 'changeMagicType',\n        currentType: type,\n        newOption: newOption\n    });\n};\n\nregisterAction({\n    type: 'changeMagicType',\n    event: 'magicTypeChanged',\n    update: 'prepareAndUpdate'\n}, function (payload, ecModel) {\n    ecModel.mergeOption(payload.newOption);\n});\n\nregister$1('magicType', MagicType);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar dataViewLang = lang.toolbox.dataView;\n\nvar BLOCK_SPLITER = new Array(60).join('-');\nvar ITEM_SPLITER = '\\t';\n/**\n * Group series into two types\n *  1. on category axis, like line, bar\n *  2. others, like scatter, pie\n * @param {module:echarts/model/Global} ecModel\n * @return {Object}\n * @inner\n */\nfunction groupSeries(ecModel) {\n    var seriesGroupByCategoryAxis = {};\n    var otherSeries = [];\n    var meta = [];\n    ecModel.eachRawSeries(function (seriesModel) {\n        var coordSys = seriesModel.coordinateSystem;\n\n        if (coordSys && (coordSys.type === 'cartesian2d' || coordSys.type === 'polar')) {\n            var baseAxis = coordSys.getBaseAxis();\n            if (baseAxis.type === 'category') {\n                var key = baseAxis.dim + '_' + baseAxis.index;\n                if (!seriesGroupByCategoryAxis[key]) {\n                    seriesGroupByCategoryAxis[key] = {\n                        categoryAxis: baseAxis,\n                        valueAxis: coordSys.getOtherAxis(baseAxis),\n                        series: []\n                    };\n                    meta.push({\n                        axisDim: baseAxis.dim,\n                        axisIndex: baseAxis.index\n                    });\n                }\n                seriesGroupByCategoryAxis[key].series.push(seriesModel);\n            }\n            else {\n                otherSeries.push(seriesModel);\n            }\n        }\n        else {\n            otherSeries.push(seriesModel);\n        }\n    });\n\n    return {\n        seriesGroupByCategoryAxis: seriesGroupByCategoryAxis,\n        other: otherSeries,\n        meta: meta\n    };\n}\n\n/**\n * Assemble content of series on cateogory axis\n * @param {Array.<module:echarts/model/Series>} series\n * @return {string}\n * @inner\n */\nfunction assembleSeriesWithCategoryAxis(series) {\n    var tables = [];\n    each$1(series, function (group, key) {\n        var categoryAxis = group.categoryAxis;\n        var valueAxis = group.valueAxis;\n        var valueAxisDim = valueAxis.dim;\n\n        var headers = [' '].concat(map(group.series, function (series) {\n            return series.name;\n        }));\n        var columns = [categoryAxis.model.getCategories()];\n        each$1(group.series, function (series) {\n            columns.push(series.getRawData().mapArray(valueAxisDim, function (val) {\n                return val;\n            }));\n        });\n        // Assemble table content\n        var lines = [headers.join(ITEM_SPLITER)];\n        for (var i = 0; i < columns[0].length; i++) {\n            var items = [];\n            for (var j = 0; j < columns.length; j++) {\n                items.push(columns[j][i]);\n            }\n            lines.push(items.join(ITEM_SPLITER));\n        }\n        tables.push(lines.join('\\n'));\n    });\n    return tables.join('\\n\\n' + BLOCK_SPLITER + '\\n\\n');\n}\n\n/**\n * Assemble content of other series\n * @param {Array.<module:echarts/model/Series>} series\n * @return {string}\n * @inner\n */\nfunction assembleOtherSeries(series) {\n    return map(series, function (series) {\n        var data = series.getRawData();\n        var lines = [series.name];\n        var vals = [];\n        data.each(data.dimensions, function () {\n            var argLen = arguments.length;\n            var dataIndex = arguments[argLen - 1];\n            var name = data.getName(dataIndex);\n            for (var i = 0; i < argLen - 1; i++) {\n                vals[i] = arguments[i];\n            }\n            lines.push((name ? (name + ITEM_SPLITER) : '') + vals.join(ITEM_SPLITER));\n        });\n        return lines.join('\\n');\n    }).join('\\n\\n' + BLOCK_SPLITER + '\\n\\n');\n}\n\n/**\n * @param {module:echarts/model/Global}\n * @return {Object}\n * @inner\n */\nfunction getContentFromModel(ecModel) {\n\n    var result = groupSeries(ecModel);\n\n    return {\n        value: filter([\n                assembleSeriesWithCategoryAxis(result.seriesGroupByCategoryAxis),\n                assembleOtherSeries(result.other)\n            ], function (str) {\n                return str.replace(/[\\n\\t\\s]/g, '');\n            }).join('\\n\\n' + BLOCK_SPLITER + '\\n\\n'),\n\n        meta: result.meta\n    };\n}\n\n\nfunction trim$1(str) {\n    return str.replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\n}\n/**\n * If a block is tsv format\n */\nfunction isTSVFormat(block) {\n    // Simple method to find out if a block is tsv format\n    var firstLine = block.slice(0, block.indexOf('\\n'));\n    if (firstLine.indexOf(ITEM_SPLITER) >= 0) {\n        return true;\n    }\n}\n\nvar itemSplitRegex = new RegExp('[' + ITEM_SPLITER + ']+', 'g');\n/**\n * @param {string} tsv\n * @return {Object}\n */\nfunction parseTSVContents(tsv) {\n    var tsvLines = tsv.split(/\\n+/g);\n    var headers = trim$1(tsvLines.shift()).split(itemSplitRegex);\n\n    var categories = [];\n    var series = map(headers, function (header) {\n        return {\n            name: header,\n            data: []\n        };\n    });\n    for (var i = 0; i < tsvLines.length; i++) {\n        var items = trim$1(tsvLines[i]).split(itemSplitRegex);\n        categories.push(items.shift());\n        for (var j = 0; j < items.length; j++) {\n            series[j] && (series[j].data[i] = items[j]);\n        }\n    }\n    return {\n        series: series,\n        categories: categories\n    };\n}\n\n/**\n * @param {string} str\n * @return {Array.<Object>}\n * @inner\n */\nfunction parseListContents(str) {\n    var lines = str.split(/\\n+/g);\n    var seriesName = trim$1(lines.shift());\n\n    var data = [];\n    for (var i = 0; i < lines.length; i++) {\n        var items = trim$1(lines[i]).split(itemSplitRegex);\n        var name = '';\n        var value;\n        var hasName = false;\n        if (isNaN(items[0])) { // First item is name\n            hasName = true;\n            name = items[0];\n            items = items.slice(1);\n            data[i] = {\n                name: name,\n                value: []\n            };\n            value = data[i].value;\n        }\n        else {\n            value = data[i] = [];\n        }\n        for (var j = 0; j < items.length; j++) {\n            value.push(+items[j]);\n        }\n        if (value.length === 1) {\n            hasName ? (data[i].value = value[0]) : (data[i] = value[0]);\n        }\n    }\n\n    return {\n        name: seriesName,\n        data: data\n    };\n}\n\n/**\n * @param {string} str\n * @param {Array.<Object>} blockMetaList\n * @return {Object}\n * @inner\n */\nfunction parseContents(str, blockMetaList) {\n    var blocks = str.split(new RegExp('\\n*' + BLOCK_SPLITER + '\\n*', 'g'));\n    var newOption = {\n        series: []\n    };\n    each$1(blocks, function (block, idx) {\n        if (isTSVFormat(block)) {\n            var result = parseTSVContents(block);\n            var blockMeta = blockMetaList[idx];\n            var axisKey = blockMeta.axisDim + 'Axis';\n\n            if (blockMeta) {\n                newOption[axisKey] = newOption[axisKey] || [];\n                newOption[axisKey][blockMeta.axisIndex] = {\n                    data: result.categories\n                };\n                newOption.series = newOption.series.concat(result.series);\n            }\n        }\n        else {\n            var result = parseListContents(block);\n            newOption.series.push(result);\n        }\n    });\n    return newOption;\n}\n\n/**\n * @alias {module:echarts/component/toolbox/feature/DataView}\n * @constructor\n * @param {module:echarts/model/Model} model\n */\nfunction DataView(model) {\n\n    this._dom = null;\n\n    this.model = model;\n}\n\nDataView.defaultOption = {\n    show: true,\n    readOnly: false,\n    optionToContent: null,\n    contentToOption: null,\n\n    icon: 'M17.5,17.3H33 M17.5,17.3H33 M45.4,29.5h-28 M11.5,2v56H51V14.8L38.4,2H11.5z M38.4,2.2v12.7H51 M45.4,41.7h-28',\n    title: clone(dataViewLang.title),\n    lang: clone(dataViewLang.lang),\n    backgroundColor: '#fff',\n    textColor: '#000',\n    textareaColor: '#fff',\n    textareaBorderColor: '#333',\n    buttonColor: '#c23531',\n    buttonTextColor: '#fff'\n};\n\nDataView.prototype.onclick = function (ecModel, api) {\n    var container = api.getDom();\n    var model = this.model;\n    if (this._dom) {\n        container.removeChild(this._dom);\n    }\n    var root = document.createElement('div');\n    root.style.cssText = 'position:absolute;left:5px;top:5px;bottom:5px;right:5px;';\n    root.style.backgroundColor = model.get('backgroundColor') || '#fff';\n\n    // Create elements\n    var header = document.createElement('h4');\n    var lang$$1 = model.get('lang') || [];\n    header.innerHTML = lang$$1[0] || model.get('title');\n    header.style.cssText = 'margin: 10px 20px;';\n    header.style.color = model.get('textColor');\n\n    var viewMain = document.createElement('div');\n    var textarea = document.createElement('textarea');\n    viewMain.style.cssText = 'display:block;width:100%;overflow:auto;';\n\n    var optionToContent = model.get('optionToContent');\n    var contentToOption = model.get('contentToOption');\n    var result = getContentFromModel(ecModel);\n    if (typeof optionToContent === 'function') {\n        var htmlOrDom = optionToContent(api.getOption());\n        if (typeof htmlOrDom === 'string') {\n            viewMain.innerHTML = htmlOrDom;\n        }\n        else if (isDom(htmlOrDom)) {\n            viewMain.appendChild(htmlOrDom);\n        }\n    }\n    else {\n        // Use default textarea\n        viewMain.appendChild(textarea);\n        textarea.readOnly = model.get('readOnly');\n        textarea.style.cssText = 'width:100%;height:100%;font-family:monospace;font-size:14px;line-height:1.6rem;';\n        textarea.style.color = model.get('textColor');\n        textarea.style.borderColor = model.get('textareaBorderColor');\n        textarea.style.backgroundColor = model.get('textareaColor');\n        textarea.value = result.value;\n    }\n\n    var blockMetaList = result.meta;\n\n    var buttonContainer = document.createElement('div');\n    buttonContainer.style.cssText = 'position:absolute;bottom:0;left:0;right:0;';\n\n    var buttonStyle = 'float:right;margin-right:20px;border:none;'\n        + 'cursor:pointer;padding:2px 5px;font-size:12px;border-radius:3px';\n    var closeButton = document.createElement('div');\n    var refreshButton = document.createElement('div');\n\n    buttonStyle += ';background-color:' + model.get('buttonColor');\n    buttonStyle += ';color:' + model.get('buttonTextColor');\n\n    var self = this;\n\n    function close() {\n        container.removeChild(root);\n        self._dom = null;\n    }\n    addEventListener(closeButton, 'click', close);\n\n    addEventListener(refreshButton, 'click', function () {\n        var newOption;\n        try {\n            if (typeof contentToOption === 'function') {\n                newOption = contentToOption(viewMain, api.getOption());\n            }\n            else {\n                newOption = parseContents(textarea.value, blockMetaList);\n            }\n        }\n        catch (e) {\n            close();\n            throw new Error('Data view format error ' + e);\n        }\n        if (newOption) {\n            api.dispatchAction({\n                type: 'changeDataView',\n                newOption: newOption\n            });\n        }\n\n        close();\n    });\n\n    closeButton.innerHTML = lang$$1[1];\n    refreshButton.innerHTML = lang$$1[2];\n    refreshButton.style.cssText = buttonStyle;\n    closeButton.style.cssText = buttonStyle;\n\n    !model.get('readOnly') && buttonContainer.appendChild(refreshButton);\n    buttonContainer.appendChild(closeButton);\n\n    root.appendChild(header);\n    root.appendChild(viewMain);\n    root.appendChild(buttonContainer);\n\n    viewMain.style.height = (container.clientHeight - 80) + 'px';\n\n    container.appendChild(root);\n    this._dom = root;\n};\n\nDataView.prototype.remove = function (ecModel, api) {\n    this._dom && api.getDom().removeChild(this._dom);\n};\n\nDataView.prototype.dispose = function (ecModel, api) {\n    this.remove(ecModel, api);\n};\n\n/**\n * @inner\n */\nfunction tryMergeDataOption(newData, originalData) {\n    return map(newData, function (newVal, idx) {\n        var original = originalData && originalData[idx];\n        if (isObject$1(original) && !isArray(original)) {\n            if (isObject$1(newVal) && !isArray(newVal)) {\n                newVal = newVal.value;\n            }\n            // Original data has option\n            return defaults({\n                value: newVal\n            }, original);\n        }\n        else {\n            return newVal;\n        }\n    });\n}\n\nregister$1('dataView', DataView);\n\nregisterAction({\n    type: 'changeDataView',\n    event: 'dataViewChanged',\n    update: 'prepareAndUpdate'\n}, function (payload, ecModel) {\n    var newSeriesOptList = [];\n    each$1(payload.newOption.series, function (seriesOpt) {\n        var seriesModel = ecModel.getSeriesByName(seriesOpt.name)[0];\n        if (!seriesModel) {\n            // New created series\n            // Geuss the series type\n            newSeriesOptList.push(extend({\n                // Default is scatter\n                type: 'scatter'\n            }, seriesOpt));\n        }\n        else {\n            var originalData = seriesModel.get('data');\n            newSeriesOptList.push({\n                name: seriesOpt.name,\n                data: tryMergeDataOption(seriesOpt.data, originalData)\n            });\n        }\n    });\n\n    ecModel.mergeOption(defaults({\n        series: newSeriesOptList\n    }, payload.newOption));\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar each$17 = each$1;\nvar indexOf$1 = indexOf;\nvar curry$4 = curry;\n\nvar COORD_CONVERTS = ['dataToPoint', 'pointToData'];\n\n// FIXME\n// how to genarialize to more coordinate systems.\nvar INCLUDE_FINDER_MAIN_TYPES = [\n    'grid', 'xAxis', 'yAxis', 'geo', 'graph',\n    'polar', 'radiusAxis', 'angleAxis', 'bmap'\n];\n\n/**\n * [option in constructor]:\n * {\n *     Index/Id/Name of geo, xAxis, yAxis, grid: See util/model#parseFinder.\n * }\n *\n *\n * [targetInfo]:\n *\n * There can be multiple axes in a single targetInfo. Consider the case\n * of `grid` component, a targetInfo represents a grid which contains one or more\n * cartesian and one or more axes. And consider the case of parallel system,\n * which has multiple axes in a coordinate system.\n * Can be {\n *     panelId: ...,\n *     coordSys: <a representitive cartesian in grid (first cartesian by default)>,\n *     coordSyses: all cartesians.\n *     gridModel: <grid component>\n *     xAxes: correspond to coordSyses on index\n *     yAxes: correspond to coordSyses on index\n * }\n * or {\n *     panelId: ...,\n *     coordSys: <geo coord sys>\n *     coordSyses: [<geo coord sys>]\n *     geoModel: <geo component>\n * }\n *\n *\n * [panelOpt]:\n *\n * Make from targetInfo. Input to BrushController.\n * {\n *     panelId: ...,\n *     rect: ...\n * }\n *\n *\n * [area]:\n *\n * Generated by BrushController or user input.\n * {\n *     panelId: Used to locate coordInfo directly. If user inpput, no panelId.\n *     brushType: determine how to convert to/from coord('rect' or 'polygon' or 'lineX/Y').\n *     Index/Id/Name of geo, xAxis, yAxis, grid: See util/model#parseFinder.\n *     range: pixel range.\n *     coordRange: representitive coord range (the first one of coordRanges).\n *     coordRanges: <Array> coord ranges, used in multiple cartesian in one grid.\n * }\n */\n\n/**\n * @param {Object} option contains Index/Id/Name of xAxis/yAxis/geo/grid\n *        Each can be {number|Array.<number>}. like: {xAxisIndex: [3, 4]}\n * @param {module:echarts/model/Global} ecModel\n * @param {Object} [opt]\n * @param {Array.<string>} [opt.include] include coordinate system types.\n */\nfunction BrushTargetManager(option, ecModel, opt) {\n    /**\n     * @private\n     * @type {Array.<Object>}\n     */\n    var targetInfoList = this._targetInfoList = [];\n    var info = {};\n    var foundCpts = parseFinder$1(ecModel, option);\n\n    each$17(targetInfoBuilders, function (builder, type) {\n        if (!opt || !opt.include || indexOf$1(opt.include, type) >= 0) {\n            builder(foundCpts, targetInfoList, info);\n        }\n    });\n}\n\nvar proto$5 = BrushTargetManager.prototype;\n\nproto$5.setOutputRanges = function (areas, ecModel) {\n    this.matchOutputRanges(areas, ecModel, function (area, coordRange, coordSys) {\n        (area.coordRanges || (area.coordRanges = [])).push(coordRange);\n        // area.coordRange is the first of area.coordRanges\n        if (!area.coordRange) {\n            area.coordRange = coordRange;\n            // In 'category' axis, coord to pixel is not reversible, so we can not\n            // rebuild range by coordRange accrately, which may bring trouble when\n            // brushing only one item. So we use __rangeOffset to rebuilding range\n            // by coordRange. And this it only used in brush component so it is no\n            // need to be adapted to coordRanges.\n            var result = coordConvert[area.brushType](0, coordSys, coordRange);\n            area.__rangeOffset = {\n                offset: diffProcessor[area.brushType](result.values, area.range, [1, 1]),\n                xyMinMax: result.xyMinMax\n            };\n        }\n    });\n};\n\nproto$5.matchOutputRanges = function (areas, ecModel, cb) {\n    each$17(areas, function (area) {\n        var targetInfo = this.findTargetInfo(area, ecModel);\n\n        if (targetInfo && targetInfo !== true) {\n            each$1(\n                targetInfo.coordSyses,\n                function (coordSys) {\n                    var result = coordConvert[area.brushType](1, coordSys, area.range);\n                    cb(area, result.values, coordSys, ecModel);\n                }\n            );\n        }\n    }, this);\n};\n\nproto$5.setInputRanges = function (areas, ecModel) {\n    each$17(areas, function (area) {\n        var targetInfo = this.findTargetInfo(area, ecModel);\n\n        if (__DEV__) {\n            assert$1(\n                !targetInfo || targetInfo === true || area.coordRange,\n                'coordRange must be specified when coord index specified.'\n            );\n            assert$1(\n                !targetInfo || targetInfo !== true || area.range,\n                'range must be specified in global brush.'\n            );\n        }\n\n        area.range = area.range || [];\n\n        // convert coordRange to global range and set panelId.\n        if (targetInfo && targetInfo !== true) {\n            area.panelId = targetInfo.panelId;\n            // (1) area.range shoule always be calculate from coordRange but does\n            // not keep its original value, for the sake of the dataZoom scenario,\n            // where area.coordRange remains unchanged but area.range may be changed.\n            // (2) Only support converting one coordRange to pixel range in brush\n            // component. So do not consider `coordRanges`.\n            // (3) About __rangeOffset, see comment above.\n            var result = coordConvert[area.brushType](0, targetInfo.coordSys, area.coordRange);\n            var rangeOffset = area.__rangeOffset;\n            area.range = rangeOffset\n                ? diffProcessor[area.brushType](\n                    result.values,\n                    rangeOffset.offset,\n                    getScales(result.xyMinMax, rangeOffset.xyMinMax)\n                )\n                : result.values;\n        }\n    }, this);\n};\n\nproto$5.makePanelOpts = function (api, getDefaultBrushType) {\n    return map(this._targetInfoList, function (targetInfo) {\n        var rect = targetInfo.getPanelRect();\n        return {\n            panelId: targetInfo.panelId,\n            defaultBrushType: getDefaultBrushType && getDefaultBrushType(targetInfo),\n            clipPath: makeRectPanelClipPath(rect),\n            isTargetByCursor: makeRectIsTargetByCursor(\n                rect, api, targetInfo.coordSysModel\n            ),\n            getLinearBrushOtherExtent: makeLinearBrushOtherExtent(rect)\n        };\n    });\n};\n\nproto$5.controlSeries = function (area, seriesModel, ecModel) {\n    // Check whether area is bound in coord, and series do not belong to that coord.\n    // If do not do this check, some brush (like lineX) will controll all axes.\n    var targetInfo = this.findTargetInfo(area, ecModel);\n    return targetInfo === true || (\n        targetInfo && indexOf$1(targetInfo.coordSyses, seriesModel.coordinateSystem) >= 0\n    );\n};\n\n/**\n * If return Object, a coord found.\n * If reutrn true, global found.\n * Otherwise nothing found.\n *\n * @param {Object} area\n * @param {Array} targetInfoList\n * @return {Object|boolean}\n */\nproto$5.findTargetInfo = function (area, ecModel) {\n    var targetInfoList = this._targetInfoList;\n    var foundCpts = parseFinder$1(ecModel, area);\n\n    for (var i = 0; i < targetInfoList.length; i++) {\n        var targetInfo = targetInfoList[i];\n        var areaPanelId = area.panelId;\n        if (areaPanelId) {\n            if (targetInfo.panelId === areaPanelId) {\n                return targetInfo;\n            }\n        }\n        else {\n            for (var i = 0; i < targetInfoMatchers.length; i++) {\n                if (targetInfoMatchers[i](foundCpts, targetInfo)) {\n                    return targetInfo;\n                }\n            }\n        }\n    }\n\n    return true;\n};\n\nfunction formatMinMax(minMax) {\n    minMax[0] > minMax[1] && minMax.reverse();\n    return minMax;\n}\n\nfunction parseFinder$1(ecModel, option) {\n    return parseFinder(\n        ecModel, option, {includeMainTypes: INCLUDE_FINDER_MAIN_TYPES}\n    );\n}\n\nvar targetInfoBuilders = {\n\n    grid: function (foundCpts, targetInfoList) {\n        var xAxisModels = foundCpts.xAxisModels;\n        var yAxisModels = foundCpts.yAxisModels;\n        var gridModels = foundCpts.gridModels;\n        // Remove duplicated.\n        var gridModelMap = createHashMap();\n        var xAxesHas = {};\n        var yAxesHas = {};\n\n        if (!xAxisModels && !yAxisModels && !gridModels) {\n            return;\n        }\n\n        each$17(xAxisModels, function (axisModel) {\n            var gridModel = axisModel.axis.grid.model;\n            gridModelMap.set(gridModel.id, gridModel);\n            xAxesHas[gridModel.id] = true;\n        });\n        each$17(yAxisModels, function (axisModel) {\n            var gridModel = axisModel.axis.grid.model;\n            gridModelMap.set(gridModel.id, gridModel);\n            yAxesHas[gridModel.id] = true;\n        });\n        each$17(gridModels, function (gridModel) {\n            gridModelMap.set(gridModel.id, gridModel);\n            xAxesHas[gridModel.id] = true;\n            yAxesHas[gridModel.id] = true;\n        });\n\n        gridModelMap.each(function (gridModel) {\n            var grid = gridModel.coordinateSystem;\n            var cartesians = [];\n\n            each$17(grid.getCartesians(), function (cartesian, index) {\n                if (indexOf$1(xAxisModels, cartesian.getAxis('x').model) >= 0\n                    || indexOf$1(yAxisModels, cartesian.getAxis('y').model) >= 0\n                ) {\n                    cartesians.push(cartesian);\n                }\n            });\n            targetInfoList.push({\n                panelId: 'grid--' + gridModel.id,\n                gridModel: gridModel,\n                coordSysModel: gridModel,\n                // Use the first one as the representitive coordSys.\n                coordSys: cartesians[0],\n                coordSyses: cartesians,\n                getPanelRect: panelRectBuilder.grid,\n                xAxisDeclared: xAxesHas[gridModel.id],\n                yAxisDeclared: yAxesHas[gridModel.id]\n            });\n        });\n    },\n\n    geo: function (foundCpts, targetInfoList) {\n        each$17(foundCpts.geoModels, function (geoModel) {\n            var coordSys = geoModel.coordinateSystem;\n            targetInfoList.push({\n                panelId: 'geo--' + geoModel.id,\n                geoModel: geoModel,\n                coordSysModel: geoModel,\n                coordSys: coordSys,\n                coordSyses: [coordSys],\n                getPanelRect: panelRectBuilder.geo\n            });\n        });\n    }\n};\n\nvar targetInfoMatchers = [\n\n    // grid\n    function (foundCpts, targetInfo) {\n        var xAxisModel = foundCpts.xAxisModel;\n        var yAxisModel = foundCpts.yAxisModel;\n        var gridModel = foundCpts.gridModel;\n\n        !gridModel && xAxisModel && (gridModel = xAxisModel.axis.grid.model);\n        !gridModel && yAxisModel && (gridModel = yAxisModel.axis.grid.model);\n\n        return gridModel && gridModel === targetInfo.gridModel;\n    },\n\n    // geo\n    function (foundCpts, targetInfo) {\n        var geoModel = foundCpts.geoModel;\n        return geoModel && geoModel === targetInfo.geoModel;\n    }\n];\n\nvar panelRectBuilder = {\n\n    grid: function () {\n        // grid is not Transformable.\n        return this.coordSys.grid.getRect().clone();\n    },\n\n    geo: function () {\n        var coordSys = this.coordSys;\n        var rect = coordSys.getBoundingRect().clone();\n        // geo roam and zoom transform\n        rect.applyTransform(getTransform(coordSys));\n        return rect;\n    }\n};\n\nvar coordConvert = {\n\n    lineX: curry$4(axisConvert, 0),\n\n    lineY: curry$4(axisConvert, 1),\n\n    rect: function (to, coordSys, rangeOrCoordRange) {\n        var xminymin = coordSys[COORD_CONVERTS[to]]([rangeOrCoordRange[0][0], rangeOrCoordRange[1][0]]);\n        var xmaxymax = coordSys[COORD_CONVERTS[to]]([rangeOrCoordRange[0][1], rangeOrCoordRange[1][1]]);\n        var values = [\n            formatMinMax([xminymin[0], xmaxymax[0]]),\n            formatMinMax([xminymin[1], xmaxymax[1]])\n        ];\n        return {values: values, xyMinMax: values};\n    },\n\n    polygon: function (to, coordSys, rangeOrCoordRange) {\n        var xyMinMax = [[Infinity, -Infinity], [Infinity, -Infinity]];\n        var values = map(rangeOrCoordRange, function (item) {\n            var p = coordSys[COORD_CONVERTS[to]](item);\n            xyMinMax[0][0] = Math.min(xyMinMax[0][0], p[0]);\n            xyMinMax[1][0] = Math.min(xyMinMax[1][0], p[1]);\n            xyMinMax[0][1] = Math.max(xyMinMax[0][1], p[0]);\n            xyMinMax[1][1] = Math.max(xyMinMax[1][1], p[1]);\n            return p;\n        });\n        return {values: values, xyMinMax: xyMinMax};\n    }\n};\n\nfunction axisConvert(axisNameIndex, to, coordSys, rangeOrCoordRange) {\n    if (__DEV__) {\n        assert$1(\n            coordSys.type === 'cartesian2d',\n            'lineX/lineY brush is available only in cartesian2d.'\n        );\n    }\n\n    var axis = coordSys.getAxis(['x', 'y'][axisNameIndex]);\n    var values = formatMinMax(map([0, 1], function (i) {\n        return to\n            ? axis.coordToData(axis.toLocalCoord(rangeOrCoordRange[i]))\n            : axis.toGlobalCoord(axis.dataToCoord(rangeOrCoordRange[i]));\n    }));\n    var xyMinMax = [];\n    xyMinMax[axisNameIndex] = values;\n    xyMinMax[1 - axisNameIndex] = [NaN, NaN];\n\n    return {values: values, xyMinMax: xyMinMax};\n}\n\nvar diffProcessor = {\n    lineX: curry$4(axisDiffProcessor, 0),\n\n    lineY: curry$4(axisDiffProcessor, 1),\n\n    rect: function (values, refer, scales) {\n        return [\n            [values[0][0] - scales[0] * refer[0][0], values[0][1] - scales[0] * refer[0][1]],\n            [values[1][0] - scales[1] * refer[1][0], values[1][1] - scales[1] * refer[1][1]]\n        ];\n    },\n\n    polygon: function (values, refer, scales) {\n        return map(values, function (item, idx) {\n            return [item[0] - scales[0] * refer[idx][0], item[1] - scales[1] * refer[idx][1]];\n        });\n    }\n};\n\nfunction axisDiffProcessor(axisNameIndex, values, refer, scales) {\n    return [\n        values[0] - scales[axisNameIndex] * refer[0],\n        values[1] - scales[axisNameIndex] * refer[1]\n    ];\n}\n\n// We have to process scale caused by dataZoom manually,\n// although it might be not accurate.\nfunction getScales(xyMinMaxCurr, xyMinMaxOrigin) {\n    var sizeCurr = getSize(xyMinMaxCurr);\n    var sizeOrigin = getSize(xyMinMaxOrigin);\n    var scales = [sizeCurr[0] / sizeOrigin[0], sizeCurr[1] / sizeOrigin[1]];\n    isNaN(scales[0]) && (scales[0] = 1);\n    isNaN(scales[1]) && (scales[1] = 1);\n    return scales;\n}\n\nfunction getSize(xyMinMax) {\n    return xyMinMax\n        ? [xyMinMax[0][1] - xyMinMax[0][0], xyMinMax[1][1] - xyMinMax[1][0]]\n        : [NaN, NaN];\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar each$18 = each$1;\n\nvar ATTR$1 = '\\0_ec_hist_store';\n\n/**\n * @param {module:echarts/model/Global} ecModel\n * @param {Object} newSnapshot {dataZoomId, batch: [payloadInfo, ...]}\n */\nfunction push(ecModel, newSnapshot) {\n    var store = giveStore(ecModel);\n\n    // If previous dataZoom can not be found,\n    // complete an range with current range.\n    each$18(newSnapshot, function (batchItem, dataZoomId) {\n        var i = store.length - 1;\n        for (; i >= 0; i--) {\n            var snapshot = store[i];\n            if (snapshot[dataZoomId]) {\n                break;\n            }\n        }\n        if (i < 0) {\n            // No origin range set, create one by current range.\n            var dataZoomModel = ecModel.queryComponents(\n                {mainType: 'dataZoom', subType: 'select', id: dataZoomId}\n            )[0];\n            if (dataZoomModel) {\n                var percentRange = dataZoomModel.getPercentRange();\n                store[0][dataZoomId] = {\n                    dataZoomId: dataZoomId,\n                    start: percentRange[0],\n                    end: percentRange[1]\n                };\n            }\n        }\n    });\n\n    store.push(newSnapshot);\n}\n\n/**\n * @param {module:echarts/model/Global} ecModel\n * @return {Object} snapshot\n */\nfunction pop(ecModel) {\n    var store = giveStore(ecModel);\n    var head = store[store.length - 1];\n    store.length > 1 && store.pop();\n\n    // Find top for all dataZoom.\n    var snapshot = {};\n    each$18(head, function (batchItem, dataZoomId) {\n        for (var i = store.length - 1; i >= 0; i--) {\n            var batchItem = store[i][dataZoomId];\n            if (batchItem) {\n                snapshot[dataZoomId] = batchItem;\n                break;\n            }\n        }\n    });\n\n    return snapshot;\n}\n\n/**\n * @param {module:echarts/model/Global} ecModel\n */\nfunction clear$1(ecModel) {\n    ecModel[ATTR$1] = null;\n}\n\n/**\n * @param {module:echarts/model/Global} ecModel\n * @return {number} records. always >= 1.\n */\nfunction count(ecModel) {\n    return giveStore(ecModel).length;\n}\n\n/**\n * [{key: dataZoomId, value: {dataZoomId, range}}, ...]\n * History length of each dataZoom may be different.\n * this._history[0] is used to store origin range.\n * @type {Array.<Object>}\n */\nfunction giveStore(ecModel) {\n    var store = ecModel[ATTR$1];\n    if (!store) {\n        store = ecModel[ATTR$1] = [{}];\n    }\n    return store;\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nComponentModel.registerSubTypeDefaulter('dataZoom', function () {\n    // Default 'slider' when no type specified.\n    return 'slider';\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar AXIS_DIMS = ['x', 'y', 'z', 'radius', 'angle', 'single'];\n// Supported coords.\nvar COORDS = ['cartesian2d', 'polar', 'singleAxis'];\n\n/**\n * @param {string} coordType\n * @return {boolean}\n */\nfunction isCoordSupported(coordType) {\n    return indexOf(COORDS, coordType) >= 0;\n}\n\n/**\n * Create \"each\" method to iterate names.\n *\n * @pubilc\n * @param  {Array.<string>} names\n * @param  {Array.<string>=} attrs\n * @return {Function}\n */\nfunction createNameEach(names, attrs) {\n    names = names.slice();\n    var capitalNames = map(names, capitalFirst);\n    attrs = (attrs || []).slice();\n    var capitalAttrs = map(attrs, capitalFirst);\n\n    return function (callback, context) {\n        each$1(names, function (name, index) {\n            var nameObj = {name: name, capital: capitalNames[index]};\n\n            for (var j = 0; j < attrs.length; j++) {\n                nameObj[attrs[j]] = name + capitalAttrs[j];\n            }\n\n            callback.call(context, nameObj);\n        });\n    };\n}\n\n/**\n * Iterate each dimension name.\n *\n * @public\n * @param {Function} callback The parameter is like:\n *                            {\n *                                name: 'angle',\n *                                capital: 'Angle',\n *                                axis: 'angleAxis',\n *                                axisIndex: 'angleAixs',\n *                                index: 'angleIndex'\n *                            }\n * @param {Object} context\n */\nvar eachAxisDim$1 = createNameEach(AXIS_DIMS, ['axisIndex', 'axis', 'index', 'id']);\n\n/**\n * If tow dataZoomModels has the same axis controlled, we say that they are 'linked'.\n * dataZoomModels and 'links' make up one or more graphics.\n * This function finds the graphic where the source dataZoomModel is in.\n *\n * @public\n * @param {Function} forEachNode Node iterator.\n * @param {Function} forEachEdgeType edgeType iterator\n * @param {Function} edgeIdGetter Giving node and edgeType, return an array of edge id.\n * @return {Function} Input: sourceNode, Output: Like {nodes: [], dims: {}}\n */\nfunction createLinkedNodesFinder(forEachNode, forEachEdgeType, edgeIdGetter) {\n\n    return function (sourceNode) {\n        var result = {\n            nodes: [],\n            records: {} // key: edgeType.name, value: Object (key: edge id, value: boolean).\n        };\n\n        forEachEdgeType(function (edgeType) {\n            result.records[edgeType.name] = {};\n        });\n\n        if (!sourceNode) {\n            return result;\n        }\n\n        absorb(sourceNode, result);\n\n        var existsLink;\n        do {\n            existsLink = false;\n            forEachNode(processSingleNode);\n        }\n        while (existsLink);\n\n        function processSingleNode(node) {\n            if (!isNodeAbsorded(node, result) && isLinked(node, result)) {\n                absorb(node, result);\n                existsLink = true;\n            }\n        }\n\n        return result;\n    };\n\n    function isNodeAbsorded(node, result) {\n        return indexOf(result.nodes, node) >= 0;\n    }\n\n    function isLinked(node, result) {\n        var hasLink = false;\n        forEachEdgeType(function (edgeType) {\n            each$1(edgeIdGetter(node, edgeType) || [], function (edgeId) {\n                result.records[edgeType.name][edgeId] && (hasLink = true);\n            });\n        });\n        return hasLink;\n    }\n\n    function absorb(node, result) {\n        result.nodes.push(node);\n        forEachEdgeType(function (edgeType) {\n            each$1(edgeIdGetter(node, edgeType) || [], function (edgeId) {\n                result.records[edgeType.name][edgeId] = true;\n            });\n        });\n    }\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar each$20 = each$1;\nvar asc$1 = asc;\n\n/**\n * Operate single axis.\n * One axis can only operated by one axis operator.\n * Different dataZoomModels may be defined to operate the same axis.\n * (i.e. 'inside' data zoom and 'slider' data zoom components)\n * So dataZoomModels share one axisProxy in that case.\n *\n * @class\n */\nvar AxisProxy = function (dimName, axisIndex, dataZoomModel, ecModel) {\n\n    /**\n     * @private\n     * @type {string}\n     */\n    this._dimName = dimName;\n\n    /**\n     * @private\n     */\n    this._axisIndex = axisIndex;\n\n    /**\n     * @private\n     * @type {Array.<number>}\n     */\n    this._valueWindow;\n\n    /**\n     * @private\n     * @type {Array.<number>}\n     */\n    this._percentWindow;\n\n    /**\n     * @private\n     * @type {Array.<number>}\n     */\n    this._dataExtent;\n\n    /**\n     * {minSpan, maxSpan, minValueSpan, maxValueSpan}\n     * @private\n     * @type {Object}\n     */\n    this._minMaxSpan;\n\n    /**\n     * @readOnly\n     * @type {module: echarts/model/Global}\n     */\n    this.ecModel = ecModel;\n\n    /**\n     * @private\n     * @type {module: echarts/component/dataZoom/DataZoomModel}\n     */\n    this._dataZoomModel = dataZoomModel;\n\n    // /**\n    //  * @readOnly\n    //  * @private\n    //  */\n    // this.hasSeriesStacked;\n};\n\nAxisProxy.prototype = {\n\n    constructor: AxisProxy,\n\n    /**\n     * Whether the axisProxy is hosted by dataZoomModel.\n     *\n     * @public\n     * @param {module: echarts/component/dataZoom/DataZoomModel} dataZoomModel\n     * @return {boolean}\n     */\n    hostedBy: function (dataZoomModel) {\n        return this._dataZoomModel === dataZoomModel;\n    },\n\n    /**\n     * @return {Array.<number>} Value can only be NaN or finite value.\n     */\n    getDataValueWindow: function () {\n        return this._valueWindow.slice();\n    },\n\n    /**\n     * @return {Array.<number>}\n     */\n    getDataPercentWindow: function () {\n        return this._percentWindow.slice();\n    },\n\n    /**\n     * @public\n     * @param {number} axisIndex\n     * @return {Array} seriesModels\n     */\n    getTargetSeriesModels: function () {\n        var seriesModels = [];\n        var ecModel = this.ecModel;\n\n        ecModel.eachSeries(function (seriesModel) {\n            if (isCoordSupported(seriesModel.get('coordinateSystem'))) {\n                var dimName = this._dimName;\n                var axisModel = ecModel.queryComponents({\n                    mainType: dimName + 'Axis',\n                    index: seriesModel.get(dimName + 'AxisIndex'),\n                    id: seriesModel.get(dimName + 'AxisId')\n                })[0];\n                if (this._axisIndex === (axisModel && axisModel.componentIndex)) {\n                    seriesModels.push(seriesModel);\n                }\n            }\n        }, this);\n\n        return seriesModels;\n    },\n\n    getAxisModel: function () {\n        return this.ecModel.getComponent(this._dimName + 'Axis', this._axisIndex);\n    },\n\n    getOtherAxisModel: function () {\n        var axisDim = this._dimName;\n        var ecModel = this.ecModel;\n        var axisModel = this.getAxisModel();\n        var isCartesian = axisDim === 'x' || axisDim === 'y';\n        var otherAxisDim;\n        var coordSysIndexName;\n        if (isCartesian) {\n            coordSysIndexName = 'gridIndex';\n            otherAxisDim = axisDim === 'x' ? 'y' : 'x';\n        }\n        else {\n            coordSysIndexName = 'polarIndex';\n            otherAxisDim = axisDim === 'angle' ? 'radius' : 'angle';\n        }\n        var foundOtherAxisModel;\n        ecModel.eachComponent(otherAxisDim + 'Axis', function (otherAxisModel) {\n            if ((otherAxisModel.get(coordSysIndexName) || 0)\n                === (axisModel.get(coordSysIndexName) || 0)\n            ) {\n                foundOtherAxisModel = otherAxisModel;\n            }\n        });\n        return foundOtherAxisModel;\n    },\n\n    getMinMaxSpan: function () {\n        return clone(this._minMaxSpan);\n    },\n\n    /**\n     * Only calculate by given range and this._dataExtent, do not change anything.\n     *\n     * @param {Object} opt\n     * @param {number} [opt.start]\n     * @param {number} [opt.end]\n     * @param {number} [opt.startValue]\n     * @param {number} [opt.endValue]\n     */\n    calculateDataWindow: function (opt) {\n        var dataExtent = this._dataExtent;\n        var axisModel = this.getAxisModel();\n        var scale = axisModel.axis.scale;\n        var rangePropMode = this._dataZoomModel.getRangePropMode();\n        var percentExtent = [0, 100];\n        var percentWindow = [];\n        var valueWindow = [];\n        var hasPropModeValue;\n\n        each$20(['start', 'end'], function (prop, idx) {\n            var boundPercent = opt[prop];\n            var boundValue = opt[prop + 'Value'];\n\n            // Notice: dataZoom is based either on `percentProp` ('start', 'end') or\n            // on `valueProp` ('startValue', 'endValue'). (They are based on the data extent\n            // but not min/max of axis, which will be calculated by data window then).\n            // The former one is suitable for cases that a dataZoom component controls multiple\n            // axes with different unit or extent, and the latter one is suitable for accurate\n            // zoom by pixel (e.g., in dataZoomSelect).\n            // we use `getRangePropMode()` to mark which prop is used. `rangePropMode` is updated\n            // only when setOption or dispatchAction, otherwise it remains its original value.\n            // (Why not only record `percentProp` and always map to `valueProp`? Because\n            // the map `valueProp` -> `percentProp` -> `valueProp` probably not the original\n            // `valueProp`. consider two axes constrolled by one dataZoom. They have different\n            // data extent. All of values that are overflow the `dataExtent` will be calculated\n            // to percent '100%').\n\n            if (rangePropMode[idx] === 'percent') {\n                boundPercent == null && (boundPercent = percentExtent[idx]);\n                // Use scale.parse to math round for category or time axis.\n                boundValue = scale.parse(linearMap(\n                    boundPercent, percentExtent, dataExtent\n                ));\n            }\n            else {\n                hasPropModeValue = true;\n                boundValue = boundValue == null ? dataExtent[idx] : scale.parse(boundValue);\n                // Calculating `percent` from `value` may be not accurate, because\n                // This calculation can not be inversed, because all of values that\n                // are overflow the `dataExtent` will be calculated to percent '100%'\n                boundPercent = linearMap(\n                    boundValue, dataExtent, percentExtent\n                );\n            }\n\n            // valueWindow[idx] = round(boundValue);\n            // percentWindow[idx] = round(boundPercent);\n            valueWindow[idx] = boundValue;\n            percentWindow[idx] = boundPercent;\n        });\n\n        asc$1(valueWindow);\n        asc$1(percentWindow);\n\n        // The windows from user calling of `dispatchAction` might be out of the extent,\n        // or do not obey the `min/maxSpan`, `min/maxValueSpan`. But we dont restrict window\n        // by `zoomLock` here, because we see `zoomLock` just as a interaction constraint,\n        // where API is able to initialize/modify the window size even though `zoomLock`\n        // specified.\n        var spans = this._minMaxSpan;\n        hasPropModeValue\n            ? restrictSet(valueWindow, percentWindow, dataExtent, percentExtent, false)\n            : restrictSet(percentWindow, valueWindow, percentExtent, dataExtent, true);\n\n        function restrictSet(fromWindow, toWindow, fromExtent, toExtent, toValue) {\n            var suffix = toValue ? 'Span' : 'ValueSpan';\n            sliderMove(0, fromWindow, fromExtent, 'all', spans['min' + suffix], spans['max' + suffix]);\n            for (var i = 0; i < 2; i++) {\n                toWindow[i] = linearMap(fromWindow[i], fromExtent, toExtent, true);\n                toValue && (toWindow[i] = scale.parse(toWindow[i]));\n            }\n        }\n\n        return {\n            valueWindow: valueWindow,\n            percentWindow: percentWindow\n        };\n    },\n\n    /**\n     * Notice: reset should not be called before series.restoreData() called,\n     * so it is recommanded to be called in \"process stage\" but not \"model init\n     * stage\".\n     *\n     * @param {module: echarts/component/dataZoom/DataZoomModel} dataZoomModel\n     */\n    reset: function (dataZoomModel) {\n        if (dataZoomModel !== this._dataZoomModel) {\n            return;\n        }\n\n        var targetSeries = this.getTargetSeriesModels();\n        // Culculate data window and data extent, and record them.\n        this._dataExtent = calculateDataExtent(this, this._dimName, targetSeries);\n\n        // this.hasSeriesStacked = false;\n        // each(targetSeries, function (series) {\n            // var data = series.getData();\n            // var dataDim = data.mapDimension(this._dimName);\n            // var stackedDimension = data.getCalculationInfo('stackedDimension');\n            // if (stackedDimension && stackedDimension === dataDim) {\n                // this.hasSeriesStacked = true;\n            // }\n        // }, this);\n\n        // `calculateDataWindow` uses min/maxSpan.\n        setMinMaxSpan(this);\n\n        var dataWindow = this.calculateDataWindow(dataZoomModel.option);\n\n        this._valueWindow = dataWindow.valueWindow;\n        this._percentWindow = dataWindow.percentWindow;\n\n        // Update axis setting then.\n        setAxisModel(this);\n    },\n\n    /**\n     * @param {module: echarts/component/dataZoom/DataZoomModel} dataZoomModel\n     */\n    restore: function (dataZoomModel) {\n        if (dataZoomModel !== this._dataZoomModel) {\n            return;\n        }\n\n        this._valueWindow = this._percentWindow = null;\n        setAxisModel(this, true);\n    },\n\n    /**\n     * @param {module: echarts/component/dataZoom/DataZoomModel} dataZoomModel\n     */\n    filterData: function (dataZoomModel, api) {\n        if (dataZoomModel !== this._dataZoomModel) {\n            return;\n        }\n\n        var axisDim = this._dimName;\n        var seriesModels = this.getTargetSeriesModels();\n        var filterMode = dataZoomModel.get('filterMode');\n        var valueWindow = this._valueWindow;\n\n        if (filterMode === 'none') {\n            return;\n        }\n\n        // FIXME\n        // Toolbox may has dataZoom injected. And if there are stacked bar chart\n        // with NaN data, NaN will be filtered and stack will be wrong.\n        // So we need to force the mode to be set empty.\n        // In fect, it is not a big deal that do not support filterMode-'filter'\n        // when using toolbox#dataZoom, utill tooltip#dataZoom support \"single axis\n        // selection\" some day, which might need \"adapt to data extent on the\n        // otherAxis\", which is disabled by filterMode-'empty'.\n        // But currently, stack has been fixed to based on value but not index,\n        // so this is not an issue any more.\n        // var otherAxisModel = this.getOtherAxisModel();\n        // if (dataZoomModel.get('$fromToolbox')\n        //     && otherAxisModel\n        //     && otherAxisModel.hasSeriesStacked\n        // ) {\n        //     filterMode = 'empty';\n        // }\n\n        // TODO\n        // filterMode 'weakFilter' and 'empty' is not optimized for huge data yet.\n\n        each$20(seriesModels, function (seriesModel) {\n            var seriesData = seriesModel.getData();\n            var dataDims = seriesData.mapDimension(axisDim, true);\n\n            if (!dataDims.length) {\n                return;\n            }\n\n            if (filterMode === 'weakFilter') {\n                seriesData.filterSelf(function (dataIndex) {\n                    var leftOut;\n                    var rightOut;\n                    var hasValue;\n                    for (var i = 0; i < dataDims.length; i++) {\n                        var value = seriesData.get(dataDims[i], dataIndex);\n                        var thisHasValue = !isNaN(value);\n                        var thisLeftOut = value < valueWindow[0];\n                        var thisRightOut = value > valueWindow[1];\n                        if (thisHasValue && !thisLeftOut && !thisRightOut) {\n                            return true;\n                        }\n                        thisHasValue && (hasValue = true);\n                        thisLeftOut && (leftOut = true);\n                        thisRightOut && (rightOut = true);\n                    }\n                    // If both left out and right out, do not filter.\n                    return hasValue && leftOut && rightOut;\n                });\n            }\n            else {\n                each$20(dataDims, function (dim) {\n                    if (filterMode === 'empty') {\n                        seriesModel.setData(\n                            seriesData = seriesData.map(dim, function (value) {\n                                return !isInWindow(value) ? NaN : value;\n                            })\n                        );\n                    }\n                    else {\n                        var range = {};\n                        range[dim] = valueWindow;\n\n                        // console.time('select');\n                        seriesData.selectRange(range);\n                        // console.timeEnd('select');\n                    }\n                });\n            }\n\n            each$20(dataDims, function (dim) {\n                seriesData.setApproximateExtent(valueWindow, dim);\n            });\n        });\n\n        function isInWindow(value) {\n            return value >= valueWindow[0] && value <= valueWindow[1];\n        }\n    }\n};\n\nfunction calculateDataExtent(axisProxy, axisDim, seriesModels) {\n    var dataExtent = [Infinity, -Infinity];\n\n    each$20(seriesModels, function (seriesModel) {\n        var seriesData = seriesModel.getData();\n        if (seriesData) {\n            each$20(seriesData.mapDimension(axisDim, true), function (dim) {\n                var seriesExtent = seriesData.getApproximateExtent(dim);\n                seriesExtent[0] < dataExtent[0] && (dataExtent[0] = seriesExtent[0]);\n                seriesExtent[1] > dataExtent[1] && (dataExtent[1] = seriesExtent[1]);\n            });\n        }\n    });\n\n    if (dataExtent[1] < dataExtent[0]) {\n        dataExtent = [NaN, NaN];\n    }\n\n    // It is important to get \"consistent\" extent when more then one axes is\n    // controlled by a `dataZoom`, otherwise those axes will not be synchronized\n    // when zooming. But it is difficult to know what is \"consistent\", considering\n    // axes have different type or even different meanings (For example, two\n    // time axes are used to compare data of the same date in different years).\n    // So basically dataZoom just obtains extent by series.data (in category axis\n    // extent can be obtained from axis.data).\n    // Nevertheless, user can set min/max/scale on axes to make extent of axes\n    // consistent.\n    fixExtentByAxis(axisProxy, dataExtent);\n\n    return dataExtent;\n}\n\nfunction fixExtentByAxis(axisProxy, dataExtent) {\n    var axisModel = axisProxy.getAxisModel();\n    var min = axisModel.getMin(true);\n\n    // For category axis, if min/max/scale are not set, extent is determined\n    // by axis.data by default.\n    var isCategoryAxis = axisModel.get('type') === 'category';\n    var axisDataLen = isCategoryAxis && axisModel.getCategories().length;\n\n    if (min != null && min !== 'dataMin' && typeof min !== 'function') {\n        dataExtent[0] = min;\n    }\n    else if (isCategoryAxis) {\n        dataExtent[0] = axisDataLen > 0 ? 0 : NaN;\n    }\n\n    var max = axisModel.getMax(true);\n    if (max != null && max !== 'dataMax' && typeof max !== 'function') {\n        dataExtent[1] = max;\n    }\n    else if (isCategoryAxis) {\n        dataExtent[1] = axisDataLen > 0 ? axisDataLen - 1 : NaN;\n    }\n\n    if (!axisModel.get('scale', true)) {\n        dataExtent[0] > 0 && (dataExtent[0] = 0);\n        dataExtent[1] < 0 && (dataExtent[1] = 0);\n    }\n\n    // For value axis, if min/max/scale are not set, we just use the extent obtained\n    // by series data, which may be a little different from the extent calculated by\n    // `axisHelper.getScaleExtent`. But the different just affects the experience a\n    // little when zooming. So it will not be fixed until some users require it strongly.\n\n    return dataExtent;\n}\n\nfunction setAxisModel(axisProxy, isRestore) {\n    var axisModel = axisProxy.getAxisModel();\n\n    var percentWindow = axisProxy._percentWindow;\n    var valueWindow = axisProxy._valueWindow;\n\n    if (!percentWindow) {\n        return;\n    }\n\n    // [0, 500]: arbitrary value, guess axis extent.\n    var precision = getPixelPrecision(valueWindow, [0, 500]);\n    precision = Math.min(precision, 20);\n    // isRestore or isFull\n    var useOrigin = isRestore || (percentWindow[0] === 0 && percentWindow[1] === 100);\n\n    axisModel.setRange(\n        useOrigin ? null : +valueWindow[0].toFixed(precision),\n        useOrigin ? null : +valueWindow[1].toFixed(precision)\n    );\n}\n\nfunction setMinMaxSpan(axisProxy) {\n    var minMaxSpan = axisProxy._minMaxSpan = {};\n    var dataZoomModel = axisProxy._dataZoomModel;\n    var dataExtent = axisProxy._dataExtent;\n\n    each$20(['min', 'max'], function (minMax) {\n        var percentSpan = dataZoomModel.get(minMax + 'Span');\n        var valueSpan = dataZoomModel.get(minMax + 'ValueSpan');\n        valueSpan != null && (valueSpan = axisProxy.getAxisModel().axis.scale.parse(valueSpan));\n\n        // minValueSpan and maxValueSpan has higher priority than minSpan and maxSpan\n        if (valueSpan != null) {\n            percentSpan = linearMap(\n                dataExtent[0] + valueSpan, dataExtent, [0, 100], true\n            );\n        }\n        else if (percentSpan != null) {\n            valueSpan = linearMap(\n                percentSpan, [0, 100], dataExtent, true\n            ) - dataExtent[0];\n        }\n\n        minMaxSpan[minMax + 'Span'] = percentSpan;\n        minMaxSpan[minMax + 'ValueSpan'] = valueSpan;\n    });\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar each$19 = each$1;\nvar eachAxisDim = eachAxisDim$1;\n\nvar DataZoomModel = extendComponentModel({\n\n    type: 'dataZoom',\n\n    dependencies: [\n        'xAxis', 'yAxis', 'zAxis', 'radiusAxis', 'angleAxis', 'singleAxis', 'series'\n    ],\n\n    /**\n     * @protected\n     */\n    defaultOption: {\n        zlevel: 0,\n        z: 4,                   // Higher than normal component (z: 2).\n        orient: null,           // Default auto by axisIndex. Possible value: 'horizontal', 'vertical'.\n        xAxisIndex: null,       // Default the first horizontal category axis.\n        yAxisIndex: null,       // Default the first vertical category axis.\n\n        filterMode: 'filter',   // Possible values: 'filter' or 'empty' or 'weakFilter'.\n                                // 'filter': data items which are out of window will be removed. This option is\n                                //          applicable when filtering outliers. For each data item, it will be\n                                //          filtered if one of the relevant dimensions is out of the window.\n                                // 'weakFilter': data items which are out of window will be removed. This option\n                                //          is applicable when filtering outliers. For each data item, it will be\n                                //          filtered only if all  of the relevant dimensions are out of the same\n                                //          side of the window.\n                                // 'empty': data items which are out of window will be set to empty.\n                                //          This option is applicable when user should not neglect\n                                //          that there are some data items out of window.\n                                // 'none': Do not filter.\n                                // Taking line chart as an example, line will be broken in\n                                // the filtered points when filterModel is set to 'empty', but\n                                // be connected when set to 'filter'.\n\n        throttle: null,         // Dispatch action by the fixed rate, avoid frequency.\n                                // default 100. Do not throttle when use null/undefined.\n                                // If animation === true and animationDurationUpdate > 0,\n                                // default value is 100, otherwise 20.\n        start: 0,               // Start percent. 0 ~ 100\n        end: 100,               // End percent. 0 ~ 100\n        startValue: null,       // Start value. If startValue specified, start is ignored.\n        endValue: null,         // End value. If endValue specified, end is ignored.\n        minSpan: null,          // 0 ~ 100\n        maxSpan: null,          // 0 ~ 100\n        minValueSpan: null,     // The range of dataZoom can not be smaller than that.\n        maxValueSpan: null,     // The range of dataZoom can not be larger than that.\n        rangeMode: null         // Array, can be 'value' or 'percent'.\n    },\n\n    /**\n     * @override\n     */\n    init: function (option, parentModel, ecModel) {\n\n        /**\n         * key like x_0, y_1\n         * @private\n         * @type {Object}\n         */\n        this._dataIntervalByAxis = {};\n\n        /**\n         * @private\n         */\n        this._dataInfo = {};\n\n        /**\n         * key like x_0, y_1\n         * @private\n         */\n        this._axisProxies = {};\n\n        /**\n         * @readOnly\n         */\n        this.textStyleModel;\n\n        /**\n         * @private\n         */\n        this._autoThrottle = true;\n\n        /**\n         * 'percent' or 'value'\n         * @private\n         */\n        this._rangePropMode = ['percent', 'percent'];\n\n        var rawOption = retrieveRaw(option);\n\n        this.mergeDefaultAndTheme(option, ecModel);\n\n        this.doInit(rawOption);\n    },\n\n    /**\n     * @override\n     */\n    mergeOption: function (newOption) {\n        var rawOption = retrieveRaw(newOption);\n\n        //FIX #2591\n        merge(this.option, newOption, true);\n\n        this.doInit(rawOption);\n    },\n\n    /**\n     * @protected\n     */\n    doInit: function (rawOption) {\n        var thisOption = this.option;\n\n        // Disable realtime view update if canvas is not supported.\n        if (!env$1.canvasSupported) {\n            thisOption.realtime = false;\n        }\n\n        this._setDefaultThrottle(rawOption);\n\n        updateRangeUse(this, rawOption);\n\n        each$19([['start', 'startValue'], ['end', 'endValue']], function (names, index) {\n            // start/end has higher priority over startValue/endValue if they\n            // both set, but we should make chart.setOption({endValue: 1000})\n            // effective, rather than chart.setOption({endValue: 1000, end: null}).\n            if (this._rangePropMode[index] === 'value') {\n                thisOption[names[0]] = null;\n            }\n            // Otherwise do nothing and use the merge result.\n        }, this);\n\n        this.textStyleModel = this.getModel('textStyle');\n\n        this._resetTarget();\n\n        this._giveAxisProxies();\n    },\n\n    /**\n     * @private\n     */\n    _giveAxisProxies: function () {\n        var axisProxies = this._axisProxies;\n\n        this.eachTargetAxis(function (dimNames, axisIndex, dataZoomModel, ecModel) {\n            var axisModel = this.dependentModels[dimNames.axis][axisIndex];\n\n            // If exists, share axisProxy with other dataZoomModels.\n            var axisProxy = axisModel.__dzAxisProxy || (\n                // Use the first dataZoomModel as the main model of axisProxy.\n                axisModel.__dzAxisProxy = new AxisProxy(\n                    dimNames.name, axisIndex, this, ecModel\n                )\n            );\n            // FIXME\n            // dispose __dzAxisProxy\n\n            axisProxies[dimNames.name + '_' + axisIndex] = axisProxy;\n        }, this);\n    },\n\n    /**\n     * @private\n     */\n    _resetTarget: function () {\n        var thisOption = this.option;\n\n        var autoMode = this._judgeAutoMode();\n\n        eachAxisDim(function (dimNames) {\n            var axisIndexName = dimNames.axisIndex;\n            thisOption[axisIndexName] = normalizeToArray(\n                thisOption[axisIndexName]\n            );\n        }, this);\n\n        if (autoMode === 'axisIndex') {\n            this._autoSetAxisIndex();\n        }\n        else if (autoMode === 'orient') {\n            this._autoSetOrient();\n        }\n    },\n\n    /**\n     * @private\n     */\n    _judgeAutoMode: function () {\n        // Auto set only works for setOption at the first time.\n        // The following is user's reponsibility. So using merged\n        // option is OK.\n        var thisOption = this.option;\n\n        var hasIndexSpecified = false;\n        eachAxisDim(function (dimNames) {\n            // When user set axisIndex as a empty array, we think that user specify axisIndex\n            // but do not want use auto mode. Because empty array may be encountered when\n            // some error occured.\n            if (thisOption[dimNames.axisIndex] != null) {\n                hasIndexSpecified = true;\n            }\n        }, this);\n\n        var orient = thisOption.orient;\n\n        if (orient == null && hasIndexSpecified) {\n            return 'orient';\n        }\n        else if (!hasIndexSpecified) {\n            if (orient == null) {\n                thisOption.orient = 'horizontal';\n            }\n            return 'axisIndex';\n        }\n    },\n\n    /**\n     * @private\n     */\n    _autoSetAxisIndex: function () {\n        var autoAxisIndex = true;\n        var orient = this.get('orient', true);\n        var thisOption = this.option;\n        var dependentModels = this.dependentModels;\n\n        if (autoAxisIndex) {\n            // Find axis that parallel to dataZoom as default.\n            var dimName = orient === 'vertical' ? 'y' : 'x';\n\n            if (dependentModels[dimName + 'Axis'].length) {\n                thisOption[dimName + 'AxisIndex'] = [0];\n                autoAxisIndex = false;\n            }\n            else {\n                each$19(dependentModels.singleAxis, function (singleAxisModel) {\n                    if (autoAxisIndex && singleAxisModel.get('orient', true) === orient) {\n                        thisOption.singleAxisIndex = [singleAxisModel.componentIndex];\n                        autoAxisIndex = false;\n                    }\n                });\n            }\n        }\n\n        if (autoAxisIndex) {\n            // Find the first category axis as default. (consider polar)\n            eachAxisDim(function (dimNames) {\n                if (!autoAxisIndex) {\n                    return;\n                }\n                var axisIndices = [];\n                var axisModels = this.dependentModels[dimNames.axis];\n                if (axisModels.length && !axisIndices.length) {\n                    for (var i = 0, len = axisModels.length; i < len; i++) {\n                        if (axisModels[i].get('type') === 'category') {\n                            axisIndices.push(i);\n                        }\n                    }\n                }\n                thisOption[dimNames.axisIndex] = axisIndices;\n                if (axisIndices.length) {\n                    autoAxisIndex = false;\n                }\n            }, this);\n        }\n\n        if (autoAxisIndex) {\n            // FIXME\n            // 这里是兼容ec2的写法（没指定xAxisIndex和yAxisIndex时把scatter和双数值轴折柱纳入dataZoom控制），\n            // 但是实际是否需要Grid.js#getScaleByOption来判断（考虑time，log等axis type）？\n\n            // If both dataZoom.xAxisIndex and dataZoom.yAxisIndex is not specified,\n            // dataZoom component auto adopts series that reference to\n            // both xAxis and yAxis which type is 'value'.\n            this.ecModel.eachSeries(function (seriesModel) {\n                if (this._isSeriesHasAllAxesTypeOf(seriesModel, 'value')) {\n                    eachAxisDim(function (dimNames) {\n                        var axisIndices = thisOption[dimNames.axisIndex];\n\n                        var axisIndex = seriesModel.get(dimNames.axisIndex);\n                        var axisId = seriesModel.get(dimNames.axisId);\n\n                        var axisModel = seriesModel.ecModel.queryComponents({\n                            mainType: dimNames.axis,\n                            index: axisIndex,\n                            id: axisId\n                        })[0];\n\n                        if (__DEV__) {\n                            if (!axisModel) {\n                                throw new Error(\n                                    dimNames.axis + ' \"' + retrieve(\n                                        axisIndex,\n                                        axisId,\n                                        0\n                                    ) + '\" not found'\n                                );\n                            }\n                        }\n                        axisIndex = axisModel.componentIndex;\n\n                        if (indexOf(axisIndices, axisIndex) < 0) {\n                            axisIndices.push(axisIndex);\n                        }\n                    });\n                }\n            }, this);\n        }\n    },\n\n    /**\n     * @private\n     */\n    _autoSetOrient: function () {\n        var dim;\n\n        // Find the first axis\n        this.eachTargetAxis(function (dimNames) {\n            !dim && (dim = dimNames.name);\n        }, this);\n\n        this.option.orient = dim === 'y' ? 'vertical' : 'horizontal';\n    },\n\n    /**\n     * @private\n     */\n    _isSeriesHasAllAxesTypeOf: function (seriesModel, axisType) {\n        // FIXME\n        // 需要series的xAxisIndex和yAxisIndex都首先自动设置上。\n        // 例如series.type === scatter时。\n\n        var is = true;\n        eachAxisDim(function (dimNames) {\n            var seriesAxisIndex = seriesModel.get(dimNames.axisIndex);\n            var axisModel = this.dependentModels[dimNames.axis][seriesAxisIndex];\n\n            if (!axisModel || axisModel.get('type') !== axisType) {\n                is = false;\n            }\n        }, this);\n        return is;\n    },\n\n    /**\n     * @private\n     */\n    _setDefaultThrottle: function (rawOption) {\n        // When first time user set throttle, auto throttle ends.\n        if (rawOption.hasOwnProperty('throttle')) {\n            this._autoThrottle = false;\n        }\n        if (this._autoThrottle) {\n            var globalOption = this.ecModel.option;\n            this.option.throttle\n                = (globalOption.animation && globalOption.animationDurationUpdate > 0)\n                ? 100 : 20;\n        }\n    },\n\n    /**\n     * @public\n     */\n    getFirstTargetAxisModel: function () {\n        var firstAxisModel;\n        eachAxisDim(function (dimNames) {\n            if (firstAxisModel == null) {\n                var indices = this.get(dimNames.axisIndex);\n                if (indices.length) {\n                    firstAxisModel = this.dependentModels[dimNames.axis][indices[0]];\n                }\n            }\n        }, this);\n\n        return firstAxisModel;\n    },\n\n    /**\n     * @public\n     * @param {Function} callback param: axisModel, dimNames, axisIndex, dataZoomModel, ecModel\n     */\n    eachTargetAxis: function (callback, context) {\n        var ecModel = this.ecModel;\n        eachAxisDim(function (dimNames) {\n            each$19(\n                this.get(dimNames.axisIndex),\n                function (axisIndex) {\n                    callback.call(context, dimNames, axisIndex, this, ecModel);\n                },\n                this\n            );\n        }, this);\n    },\n\n    /**\n     * @param {string} dimName\n     * @param {number} axisIndex\n     * @return {module:echarts/component/dataZoom/AxisProxy} If not found, return null/undefined.\n     */\n    getAxisProxy: function (dimName, axisIndex) {\n        return this._axisProxies[dimName + '_' + axisIndex];\n    },\n\n    /**\n     * @param {string} dimName\n     * @param {number} axisIndex\n     * @return {module:echarts/model/Model} If not found, return null/undefined.\n     */\n    getAxisModel: function (dimName, axisIndex) {\n        var axisProxy = this.getAxisProxy(dimName, axisIndex);\n        return axisProxy && axisProxy.getAxisModel();\n    },\n\n    /**\n     * If not specified, set to undefined.\n     *\n     * @public\n     * @param {Object} opt\n     * @param {number} [opt.start]\n     * @param {number} [opt.end]\n     * @param {number} [opt.startValue]\n     * @param {number} [opt.endValue]\n     * @param {boolean} [ignoreUpdateRangeUsg=false]\n     */\n    setRawRange: function (opt, ignoreUpdateRangeUsg) {\n        var option = this.option;\n        each$19([['start', 'startValue'], ['end', 'endValue']], function (names) {\n            // If only one of 'start' and 'startValue' is not null/undefined, the other\n            // should be cleared, which enable clear the option.\n            // If both of them are not set, keep option with the original value, which\n            // enable use only set start but not set end when calling `dispatchAction`.\n            // The same as 'end' and 'endValue'.\n            if (opt[names[0]] != null || opt[names[1]] != null) {\n                option[names[0]] = opt[names[0]];\n                option[names[1]] = opt[names[1]];\n            }\n        }, this);\n\n        !ignoreUpdateRangeUsg && updateRangeUse(this, opt);\n    },\n\n    /**\n     * @public\n     * @return {Array.<number>} [startPercent, endPercent]\n     */\n    getPercentRange: function () {\n        var axisProxy = this.findRepresentativeAxisProxy();\n        if (axisProxy) {\n            return axisProxy.getDataPercentWindow();\n        }\n    },\n\n    /**\n     * @public\n     * For example, chart.getModel().getComponent('dataZoom').getValueRange('y', 0);\n     *\n     * @param {string} [axisDimName]\n     * @param {number} [axisIndex]\n     * @return {Array.<number>} [startValue, endValue] value can only be '-' or finite number.\n     */\n    getValueRange: function (axisDimName, axisIndex) {\n        if (axisDimName == null && axisIndex == null) {\n            var axisProxy = this.findRepresentativeAxisProxy();\n            if (axisProxy) {\n                return axisProxy.getDataValueWindow();\n            }\n        }\n        else {\n            return this.getAxisProxy(axisDimName, axisIndex).getDataValueWindow();\n        }\n    },\n\n    /**\n     * @public\n     * @param {module:echarts/model/Model} [axisModel] If axisModel given, find axisProxy\n     *      corresponding to the axisModel\n     * @return {module:echarts/component/dataZoom/AxisProxy}\n     */\n    findRepresentativeAxisProxy: function (axisModel) {\n        if (axisModel) {\n            return axisModel.__dzAxisProxy;\n        }\n\n        // Find the first hosted axisProxy\n        var axisProxies = this._axisProxies;\n        for (var key in axisProxies) {\n            if (axisProxies.hasOwnProperty(key) && axisProxies[key].hostedBy(this)) {\n                return axisProxies[key];\n            }\n        }\n\n        // If no hosted axis find not hosted axisProxy.\n        // Consider this case: dataZoomModel1 and dataZoomModel2 control the same axis,\n        // and the option.start or option.end settings are different. The percentRange\n        // should follow axisProxy.\n        // (We encounter this problem in toolbox data zoom.)\n        for (var key in axisProxies) {\n            if (axisProxies.hasOwnProperty(key) && !axisProxies[key].hostedBy(this)) {\n                return axisProxies[key];\n            }\n        }\n    },\n\n    /**\n     * @return {Array.<string>}\n     */\n    getRangePropMode: function () {\n        return this._rangePropMode.slice();\n    }\n\n});\n\nfunction retrieveRaw(option) {\n    var ret = {};\n    each$19(\n        ['start', 'end', 'startValue', 'endValue', 'throttle'],\n        function (name) {\n            option.hasOwnProperty(name) && (ret[name] = option[name]);\n        }\n    );\n    return ret;\n}\n\nfunction updateRangeUse(dataZoomModel, rawOption) {\n    var rangePropMode = dataZoomModel._rangePropMode;\n    var rangeModeInOption = dataZoomModel.get('rangeMode');\n\n    each$19([['start', 'startValue'], ['end', 'endValue']], function (names, index) {\n        var percentSpecified = rawOption[names[0]] != null;\n        var valueSpecified = rawOption[names[1]] != null;\n        if (percentSpecified && !valueSpecified) {\n            rangePropMode[index] = 'percent';\n        }\n        else if (!percentSpecified && valueSpecified) {\n            rangePropMode[index] = 'value';\n        }\n        else if (rangeModeInOption) {\n            rangePropMode[index] = rangeModeInOption[index];\n        }\n        else if (percentSpecified) { // percentSpecified && valueSpecified\n            rangePropMode[index] = 'percent';\n        }\n        // else remain its original setting.\n    });\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar DataZoomView = Component$1.extend({\n\n    type: 'dataZoom',\n\n    render: function (dataZoomModel, ecModel, api, payload) {\n        this.dataZoomModel = dataZoomModel;\n        this.ecModel = ecModel;\n        this.api = api;\n    },\n\n    /**\n     * Find the first target coordinate system.\n     *\n     * @protected\n     * @return {Object} {\n     *                   grid: [\n     *                       {model: coord0, axisModels: [axis1, axis3], coordIndex: 1},\n     *                       {model: coord1, axisModels: [axis0, axis2], coordIndex: 0},\n     *                       ...\n     *                   ],  // cartesians must not be null/undefined.\n     *                   polar: [\n     *                       {model: coord0, axisModels: [axis4], coordIndex: 0},\n     *                       ...\n     *                   ],  // polars must not be null/undefined.\n     *                   singleAxis: [\n     *                       {model: coord0, axisModels: [], coordIndex: 0}\n     *                   ]\n     */\n    getTargetCoordInfo: function () {\n        var dataZoomModel = this.dataZoomModel;\n        var ecModel = this.ecModel;\n        var coordSysLists = {};\n\n        dataZoomModel.eachTargetAxis(function (dimNames, axisIndex) {\n            var axisModel = ecModel.getComponent(dimNames.axis, axisIndex);\n            if (axisModel) {\n                var coordModel = axisModel.getCoordSysModel();\n                coordModel && save(\n                    coordModel,\n                    axisModel,\n                    coordSysLists[coordModel.mainType] || (coordSysLists[coordModel.mainType] = []),\n                    coordModel.componentIndex\n                );\n            }\n        }, this);\n\n        function save(coordModel, axisModel, store, coordIndex) {\n            var item;\n            for (var i = 0; i < store.length; i++) {\n                if (store[i].model === coordModel) {\n                    item = store[i];\n                    break;\n                }\n            }\n            if (!item) {\n                store.push(item = {\n                    model: coordModel, axisModels: [], coordIndex: coordIndex\n                });\n            }\n            item.axisModels.push(axisModel);\n        }\n\n        return coordSysLists;\n    }\n\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nDataZoomModel.extend({\n    type: 'dataZoom.select'\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nDataZoomView.extend({\n    type: 'dataZoom.select'\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nregisterProcessor({\n\n    // `dataZoomProcessor` will only be performed in needed series. Consider if\n    // there is a line series and a pie series, it is better not to update the\n    // line series if only pie series is needed to be updated.\n    getTargetSeries: function (ecModel) {\n        var seriesModelMap = createHashMap();\n\n        ecModel.eachComponent('dataZoom', function (dataZoomModel) {\n            dataZoomModel.eachTargetAxis(function (dimNames, axisIndex, dataZoomModel) {\n                var axisProxy = dataZoomModel.getAxisProxy(dimNames.name, axisIndex);\n                each$1(axisProxy.getTargetSeriesModels(), function (seriesModel) {\n                    seriesModelMap.set(seriesModel.uid, seriesModel);\n                });\n            });\n        });\n\n        return seriesModelMap;\n    },\n\n    modifyOutputEnd: true,\n\n    // Consider appendData, where filter should be performed. Because data process is\n    // in block mode currently, it is not need to worry about that the overallProgress\n    // execute every frame.\n    overallReset: function (ecModel, api) {\n\n        ecModel.eachComponent('dataZoom', function (dataZoomModel) {\n            // We calculate window and reset axis here but not in model\n            // init stage and not after action dispatch handler, because\n            // reset should be called after seriesData.restoreData.\n            dataZoomModel.eachTargetAxis(function (dimNames, axisIndex, dataZoomModel) {\n                dataZoomModel.getAxisProxy(dimNames.name, axisIndex).reset(dataZoomModel, api);\n            });\n\n            // Caution: data zoom filtering is order sensitive when using\n            // percent range and no min/max/scale set on axis.\n            // For example, we have dataZoom definition:\n            // [\n            //      {xAxisIndex: 0, start: 30, end: 70},\n            //      {yAxisIndex: 0, start: 20, end: 80}\n            // ]\n            // In this case, [20, 80] of y-dataZoom should be based on data\n            // that have filtered by x-dataZoom using range of [30, 70],\n            // but should not be based on full raw data. Thus sliding\n            // x-dataZoom will change both ranges of xAxis and yAxis,\n            // while sliding y-dataZoom will only change the range of yAxis.\n            // So we should filter x-axis after reset x-axis immediately,\n            // and then reset y-axis and filter y-axis.\n            dataZoomModel.eachTargetAxis(function (dimNames, axisIndex, dataZoomModel) {\n                dataZoomModel.getAxisProxy(dimNames.name, axisIndex).filterData(dataZoomModel, api);\n            });\n        });\n\n        ecModel.eachComponent('dataZoom', function (dataZoomModel) {\n            // Fullfill all of the range props so that user\n            // is able to get them from chart.getOption().\n            var axisProxy = dataZoomModel.findRepresentativeAxisProxy();\n            var percentRange = axisProxy.getDataPercentWindow();\n            var valueRange = axisProxy.getDataValueWindow();\n\n            dataZoomModel.setRawRange({\n                start: percentRange[0],\n                end: percentRange[1],\n                startValue: valueRange[0],\n                endValue: valueRange[1]\n            }, true);\n        });\n    }\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nregisterAction('dataZoom', function (payload, ecModel) {\n\n    var linkedNodesFinder = createLinkedNodesFinder(\n        bind(ecModel.eachComponent, ecModel, 'dataZoom'),\n        eachAxisDim$1,\n        function (model, dimNames) {\n            return model.get(dimNames.axisIndex);\n        }\n    );\n\n    var effectedModels = [];\n\n    ecModel.eachComponent(\n        {mainType: 'dataZoom', query: payload},\n        function (model, index) {\n            effectedModels.push.apply(\n                effectedModels, linkedNodesFinder(model).nodes\n            );\n        }\n    );\n\n    each$1(effectedModels, function (dataZoomModel, index) {\n        dataZoomModel.setRawRange({\n            start: payload.start,\n            end: payload.end,\n            startValue: payload.startValue,\n            endValue: payload.endValue\n        });\n    });\n\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Only work for toolbox dataZoom. User\n * MUST NOT import this module directly.\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n// Use dataZoomSelect\nvar dataZoomLang = lang.toolbox.dataZoom;\nvar each$16 = each$1;\n\n// Spectial component id start with \\0ec\\0, see echarts/model/Global.js~hasInnerId\nvar DATA_ZOOM_ID_BASE = '\\0_ec_\\0toolbox-dataZoom_';\n\nfunction DataZoom(model, ecModel, api) {\n\n    /**\n     * @private\n     * @type {module:echarts/component/helper/BrushController}\n     */\n    (this._brushController = new BrushController(api.getZr()))\n        .on('brush', bind(this._onBrush, this))\n        .mount();\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    this._isZoomActive;\n}\n\nDataZoom.defaultOption = {\n    show: true,\n    // Icon group\n    icon: {\n        zoom: 'M0,13.5h26.9 M13.5,26.9V0 M32.1,13.5H58V58H13.5 V32.1',\n        back: 'M22,1.4L9.9,13.5l12.3,12.3 M10.3,13.5H54.9v44.6 H10.3v-26'\n    },\n    // `zoom`, `back`\n    title: clone(dataZoomLang.title)\n};\n\nvar proto$4 = DataZoom.prototype;\n\nproto$4.render = function (featureModel, ecModel, api, payload) {\n    this.model = featureModel;\n    this.ecModel = ecModel;\n    this.api = api;\n\n    updateZoomBtnStatus(featureModel, ecModel, this, payload, api);\n    updateBackBtnStatus(featureModel, ecModel);\n};\n\nproto$4.onclick = function (ecModel, api, type) {\n    handlers$1[type].call(this);\n};\n\nproto$4.remove = function (ecModel, api) {\n    this._brushController.unmount();\n};\n\nproto$4.dispose = function (ecModel, api) {\n    this._brushController.dispose();\n};\n\n/**\n * @private\n */\nvar handlers$1 = {\n\n    zoom: function () {\n        var nextActive = !this._isZoomActive;\n\n        this.api.dispatchAction({\n            type: 'takeGlobalCursor',\n            key: 'dataZoomSelect',\n            dataZoomSelectActive: nextActive\n        });\n    },\n\n    back: function () {\n        this._dispatchZoomAction(pop(this.ecModel));\n    }\n};\n\n/**\n * @private\n */\nproto$4._onBrush = function (areas, opt) {\n    if (!opt.isEnd || !areas.length) {\n        return;\n    }\n    var snapshot = {};\n    var ecModel = this.ecModel;\n\n    this._brushController.updateCovers([]); // remove cover\n\n    var brushTargetManager = new BrushTargetManager(\n        retrieveAxisSetting(this.model.option), ecModel, {include: ['grid']}\n    );\n    brushTargetManager.matchOutputRanges(areas, ecModel, function (area, coordRange, coordSys) {\n        if (coordSys.type !== 'cartesian2d') {\n            return;\n        }\n\n        var brushType = area.brushType;\n        if (brushType === 'rect') {\n            setBatch('x', coordSys, coordRange[0]);\n            setBatch('y', coordSys, coordRange[1]);\n        }\n        else {\n            setBatch(({lineX: 'x', lineY: 'y'})[brushType], coordSys, coordRange);\n        }\n    });\n\n    push(ecModel, snapshot);\n\n    this._dispatchZoomAction(snapshot);\n\n    function setBatch(dimName, coordSys, minMax) {\n        var axis = coordSys.getAxis(dimName);\n        var axisModel = axis.model;\n        var dataZoomModel = findDataZoom(dimName, axisModel, ecModel);\n\n        // Restrict range.\n        var minMaxSpan = dataZoomModel.findRepresentativeAxisProxy(axisModel).getMinMaxSpan();\n        if (minMaxSpan.minValueSpan != null || minMaxSpan.maxValueSpan != null) {\n            minMax = sliderMove(\n                0, minMax.slice(), axis.scale.getExtent(), 0,\n                minMaxSpan.minValueSpan, minMaxSpan.maxValueSpan\n            );\n        }\n\n        dataZoomModel && (snapshot[dataZoomModel.id] = {\n            dataZoomId: dataZoomModel.id,\n            startValue: minMax[0],\n            endValue: minMax[1]\n        });\n    }\n\n    function findDataZoom(dimName, axisModel, ecModel) {\n        var found;\n        ecModel.eachComponent({mainType: 'dataZoom', subType: 'select'}, function (dzModel) {\n            var has = dzModel.getAxisModel(dimName, axisModel.componentIndex);\n            has && (found = dzModel);\n        });\n        return found;\n    }\n};\n\n/**\n * @private\n */\nproto$4._dispatchZoomAction = function (snapshot) {\n    var batch = [];\n\n    // Convert from hash map to array.\n    each$16(snapshot, function (batchItem, dataZoomId) {\n        batch.push(clone(batchItem));\n    });\n\n    batch.length && this.api.dispatchAction({\n        type: 'dataZoom',\n        from: this.uid,\n        batch: batch\n    });\n};\n\nfunction retrieveAxisSetting(option) {\n    var setting = {};\n    // Compatible with previous setting: null => all axis, false => no axis.\n    each$1(['xAxisIndex', 'yAxisIndex'], function (name) {\n        setting[name] = option[name];\n        setting[name] == null && (setting[name] = 'all');\n        (setting[name] === false || setting[name] === 'none') && (setting[name] = []);\n    });\n    return setting;\n}\n\nfunction updateBackBtnStatus(featureModel, ecModel) {\n    featureModel.setIconStatus(\n        'back',\n        count(ecModel) > 1 ? 'emphasis' : 'normal'\n    );\n}\n\nfunction updateZoomBtnStatus(featureModel, ecModel, view, payload, api) {\n    var zoomActive = view._isZoomActive;\n\n    if (payload && payload.type === 'takeGlobalCursor') {\n        zoomActive = payload.key === 'dataZoomSelect'\n            ? payload.dataZoomSelectActive : false;\n    }\n\n    view._isZoomActive = zoomActive;\n\n    featureModel.setIconStatus('zoom', zoomActive ? 'emphasis' : 'normal');\n\n    var brushTargetManager = new BrushTargetManager(\n        retrieveAxisSetting(featureModel.option), ecModel, {include: ['grid']}\n    );\n\n    view._brushController\n        .setPanels(brushTargetManager.makePanelOpts(api, function (targetInfo) {\n            return (targetInfo.xAxisDeclared && !targetInfo.yAxisDeclared)\n                ? 'lineX'\n                : (!targetInfo.xAxisDeclared && targetInfo.yAxisDeclared)\n                ? 'lineY'\n                : 'rect';\n        }))\n        .enableBrush(\n            zoomActive\n            ? {\n                brushType: 'auto',\n                brushStyle: {\n                    // FIXME user customized?\n                    lineWidth: 0,\n                    fill: 'rgba(0,0,0,0.2)'\n                }\n            }\n            : false\n        );\n}\n\n\nregister$1('dataZoom', DataZoom);\n\n\n// Create special dataZoom option for select\n// FIXME consider the case of merge option, where axes options are not exists.\nregisterPreprocessor(function (option) {\n    if (!option) {\n        return;\n    }\n\n    var dataZoomOpts = option.dataZoom || (option.dataZoom = []);\n    if (!isArray(dataZoomOpts)) {\n        option.dataZoom = dataZoomOpts = [dataZoomOpts];\n    }\n\n    var toolboxOpt = option.toolbox;\n    if (toolboxOpt) {\n        // Assume there is only one toolbox\n        if (isArray(toolboxOpt)) {\n            toolboxOpt = toolboxOpt[0];\n        }\n\n        if (toolboxOpt && toolboxOpt.feature) {\n            var dataZoomOpt = toolboxOpt.feature.dataZoom;\n            // FIXME: If add dataZoom when setOption in merge mode,\n            // no axis info to be added. See `test/dataZoom-extreme.html`\n            addForAxis('xAxis', dataZoomOpt);\n            addForAxis('yAxis', dataZoomOpt);\n        }\n    }\n\n    function addForAxis(axisName, dataZoomOpt) {\n        if (!dataZoomOpt) {\n            return;\n        }\n\n        // Try not to modify model, because it is not merged yet.\n        var axisIndicesName = axisName + 'Index';\n        var givenAxisIndices = dataZoomOpt[axisIndicesName];\n        if (givenAxisIndices != null\n            && givenAxisIndices !== 'all'\n            && !isArray(givenAxisIndices)\n        ) {\n            givenAxisIndices = (givenAxisIndices === false || givenAxisIndices === 'none') ? [] : [givenAxisIndices];\n        }\n\n        forEachComponent(axisName, function (axisOpt, axisIndex) {\n            if (givenAxisIndices != null\n                && givenAxisIndices !== 'all'\n                && indexOf(givenAxisIndices, axisIndex) === -1\n            ) {\n                return;\n            }\n            var newOpt = {\n                type: 'select',\n                $fromToolbox: true,\n                // Id for merge mapping.\n                id: DATA_ZOOM_ID_BASE + axisName + axisIndex\n            };\n            // FIXME\n            // Only support one axis now.\n            newOpt[axisIndicesName] = axisIndex;\n            dataZoomOpts.push(newOpt);\n        });\n    }\n\n    function forEachComponent(mainType, cb) {\n        var opts = option[mainType];\n        if (!isArray(opts)) {\n            opts = opts ? [opts] : [];\n        }\n        each$16(opts, cb);\n    }\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar restoreLang = lang.toolbox.restore;\n\nfunction Restore(model) {\n    this.model = model;\n}\n\nRestore.defaultOption = {\n    show: true,\n    /* eslint-disable */\n    icon: 'M3.8,33.4 M47,18.9h9.8V8.7 M56.3,20.1 C52.1,9,40.5,0.6,26.8,2.1C12.6,3.7,1.6,16.2,2.1,30.6 M13,41.1H3.1v10.2 M3.7,39.9c4.2,11.1,15.8,19.5,29.5,18 c14.2-1.6,25.2-14.1,24.7-28.5',\n    /* eslint-enable */\n    title: restoreLang.title\n};\n\nvar proto$6 = Restore.prototype;\n\nproto$6.onclick = function (ecModel, api, type) {\n    clear$1(ecModel);\n\n    api.dispatchAction({\n        type: 'restore',\n        from: this.uid\n    });\n};\n\nregister$1('restore', Restore);\n\nregisterAction(\n    {type: 'restore', event: 'restore', update: 'prepareAndUpdate'},\n    function (payload, ecModel) {\n        ecModel.resetOption('recreate');\n    }\n);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nextendComponentModel({\n\n    type: 'tooltip',\n\n    dependencies: ['axisPointer'],\n\n    defaultOption: {\n        zlevel: 0,\n\n        z: 60,\n\n        show: true,\n\n        // tooltip主体内容\n        showContent: true,\n\n        // 'trigger' only works on coordinate system.\n        // 'item' | 'axis' | 'none'\n        trigger: 'item',\n\n        // 'click' | 'mousemove' | 'none'\n        triggerOn: 'mousemove|click',\n\n        alwaysShowContent: false,\n\n        displayMode: 'single', // 'single' | 'multipleByCoordSys'\n\n        renderMode: 'auto', // 'auto' | 'html' | 'richText'\n        // 'auto': use html by default, and use non-html if `document` is not defined\n        // 'html': use html for tooltip\n        // 'richText': use canvas, svg, and etc. for tooltip\n\n        // 位置 {Array} | {Function}\n        // position: null\n        // Consider triggered from axisPointer handle, verticalAlign should be 'middle'\n        // align: null,\n        // verticalAlign: null,\n\n        // 是否约束 content 在 viewRect 中。默认 false 是为了兼容以前版本。\n        confine: false,\n\n        // 内容格式器：{string}（Template） ¦ {Function}\n        // formatter: null\n\n        showDelay: 0,\n\n        // 隐藏延迟，单位ms\n        hideDelay: 100,\n\n        // 动画变换时间，单位s\n        transitionDuration: 0.4,\n\n        enterable: false,\n\n        // 提示背景颜色，默认为透明度为0.7的黑色\n        backgroundColor: 'rgba(50,50,50,0.7)',\n\n        // 提示边框颜色\n        borderColor: '#333',\n\n        // 提示边框圆角，单位px，默认为4\n        borderRadius: 4,\n\n        // 提示边框线宽，单位px，默认为0（无边框）\n        borderWidth: 0,\n\n        // 提示内边距，单位px，默认各方向内边距为5，\n        // 接受数组分别设定上右下左边距，同css\n        padding: 5,\n\n        // Extra css text\n        extraCssText: '',\n\n        // 坐标轴指示器，坐标轴触发有效\n        axisPointer: {\n            // 默认为直线\n            // 可选为：'line' | 'shadow' | 'cross'\n            type: 'line',\n\n            // type 为 line 的时候有效，指定 tooltip line 所在的轴，可选\n            // 可选 'x' | 'y' | 'angle' | 'radius' | 'auto'\n            // 默认 'auto'，会选择类型为 category 的轴，对于双数值轴，笛卡尔坐标系会默认选择 x 轴\n            // 极坐标系会默认选择 angle 轴\n            axis: 'auto',\n\n            animation: 'auto',\n            animationDurationUpdate: 200,\n            animationEasingUpdate: 'exponentialOut',\n\n            crossStyle: {\n                color: '#999',\n                width: 1,\n                type: 'dashed',\n\n                // TODO formatter\n                textStyle: {}\n            }\n\n            // lineStyle and shadowStyle should not be specified here,\n            // otherwise it will always override those styles on option.axisPointer.\n        },\n        textStyle: {\n            color: '#fff',\n            fontSize: 14\n        }\n    }\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar each$22 = each$1;\nvar toCamelCase$1 = toCamelCase;\n\nvar vendors = ['', '-webkit-', '-moz-', '-o-'];\n\nvar gCssText = 'position:absolute;display:block;border-style:solid;white-space:nowrap;z-index:9999999;';\n\n/**\n * @param {number} duration\n * @return {string}\n * @inner\n */\nfunction assembleTransition(duration) {\n    var transitionCurve = 'cubic-bezier(0.23, 1, 0.32, 1)';\n    var transitionText = 'left ' + duration + 's ' + transitionCurve + ','\n                        + 'top ' + duration + 's ' + transitionCurve;\n    return map(vendors, function (vendorPrefix) {\n        return vendorPrefix + 'transition:' + transitionText;\n    }).join(';');\n}\n\n/**\n * @param {Object} textStyle\n * @return {string}\n * @inner\n */\nfunction assembleFont(textStyleModel) {\n    var cssText = [];\n\n    var fontSize = textStyleModel.get('fontSize');\n    var color = textStyleModel.getTextColor();\n\n    color && cssText.push('color:' + color);\n\n    cssText.push('font:' + textStyleModel.getFont());\n\n    fontSize\n        && cssText.push('line-height:' + Math.round(fontSize * 3 / 2) + 'px');\n\n    each$22(['decoration', 'align'], function (name) {\n        var val = textStyleModel.get(name);\n        val && cssText.push('text-' + name + ':' + val);\n    });\n\n    return cssText.join(';');\n}\n\n/**\n * @param {Object} tooltipModel\n * @return {string}\n * @inner\n */\nfunction assembleCssText(tooltipModel) {\n\n    var cssText = [];\n\n    var transitionDuration = tooltipModel.get('transitionDuration');\n    var backgroundColor = tooltipModel.get('backgroundColor');\n    var textStyleModel = tooltipModel.getModel('textStyle');\n    var padding = tooltipModel.get('padding');\n\n    // Animation transition. Do not animate when transitionDuration is 0.\n    transitionDuration\n        && cssText.push(assembleTransition(transitionDuration));\n\n    if (backgroundColor) {\n        if (env$1.canvasSupported) {\n            cssText.push('background-Color:' + backgroundColor);\n        }\n        else {\n            // for ie\n            cssText.push(\n                'background-Color:#' + toHex(backgroundColor)\n            );\n            cssText.push('filter:alpha(opacity=70)');\n        }\n    }\n\n    // Border style\n    each$22(['width', 'color', 'radius'], function (name) {\n        var borderName = 'border-' + name;\n        var camelCase = toCamelCase$1(borderName);\n        var val = tooltipModel.get(camelCase);\n        val != null\n            && cssText.push(borderName + ':' + val + (name === 'color' ? '' : 'px'));\n    });\n\n    // Text style\n    cssText.push(assembleFont(textStyleModel));\n\n    // Padding\n    if (padding != null) {\n        cssText.push('padding:' + normalizeCssArray$1(padding).join('px ') + 'px');\n    }\n\n    return cssText.join(';') + ';';\n}\n\n/**\n * @alias module:echarts/component/tooltip/TooltipContent\n * @constructor\n */\nfunction TooltipContent(container, api) {\n    if (env$1.wxa) {\n        return null;\n    }\n\n    var el = document.createElement('div');\n    var zr = this._zr = api.getZr();\n\n    this.el = el;\n\n    this._x = api.getWidth() / 2;\n    this._y = api.getHeight() / 2;\n\n    container.appendChild(el);\n\n    this._container = container;\n\n    this._show = false;\n\n    /**\n     * @private\n     */\n    this._hideTimeout;\n\n    // FIXME\n    // Is it needed to trigger zr event manually if\n    // the browser do not support `pointer-events: none`.\n\n    var self = this;\n    el.onmouseenter = function () {\n        // clear the timeout in hideLater and keep showing tooltip\n        if (self._enterable) {\n            clearTimeout(self._hideTimeout);\n            self._show = true;\n        }\n        self._inContent = true;\n    };\n    el.onmousemove = function (e) {\n        e = e || window.event;\n        if (!self._enterable) {\n            // `pointer-events: none` is set to tooltip content div\n            // if `enterable` is set as `false`, and `el.onmousemove`\n            // can not be triggered. But in browser that do not\n            // support `pointer-events`, we need to do this:\n            // Try trigger zrender event to avoid mouse\n            // in and out shape too frequently\n            var handler = zr.handler;\n            normalizeEvent(container, e, true);\n            handler.dispatch('mousemove', e);\n        }\n    };\n    el.onmouseleave = function () {\n        if (self._enterable) {\n            if (self._show) {\n                self.hideLater(self._hideDelay);\n            }\n        }\n        self._inContent = false;\n    };\n}\n\nTooltipContent.prototype = {\n\n    constructor: TooltipContent,\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    _enterable: true,\n\n    /**\n     * Update when tooltip is rendered\n     */\n    update: function () {\n        // FIXME\n        // Move this logic to ec main?\n        var container = this._container;\n        var stl = container.currentStyle\n            || document.defaultView.getComputedStyle(container);\n        var domStyle = container.style;\n        if (domStyle.position !== 'absolute' && stl.position !== 'absolute') {\n            domStyle.position = 'relative';\n        }\n        // Hide the tooltip\n        // PENDING\n        // this.hide();\n    },\n\n    show: function (tooltipModel) {\n        clearTimeout(this._hideTimeout);\n        var el = this.el;\n\n        el.style.cssText = gCssText + assembleCssText(tooltipModel)\n            // Because of the reason described in:\n            // http://stackoverflow.com/questions/21125587/css3-transition-not-working-in-chrome-anymore\n            // we should set initial value to `left` and `top`.\n            + ';left:' + this._x + 'px;top:' + this._y + 'px;'\n            + (tooltipModel.get('extraCssText') || '');\n\n        el.style.display = el.innerHTML ? 'block' : 'none';\n\n        // If mouse occsionally move over the tooltip, a mouseout event will be\n        // triggered by canvas, and cuase some unexpectable result like dragging\n        // stop, \"unfocusAdjacency\". Here `pointer-events: none` is used to solve\n        // it. Although it is not suppored by IE8~IE10, fortunately it is a rare\n        // scenario.\n        el.style.pointerEvents = this._enterable ? 'auto' : 'none';\n\n        this._show = true;\n    },\n\n    setContent: function (content) {\n        this.el.innerHTML = content == null ? '' : content;\n    },\n\n    setEnterable: function (enterable) {\n        this._enterable = enterable;\n    },\n\n    getSize: function () {\n        var el = this.el;\n        return [el.clientWidth, el.clientHeight];\n    },\n\n    moveTo: function (x, y) {\n        // xy should be based on canvas root. But tooltipContent is\n        // the sibling of canvas root. So padding of ec container\n        // should be considered here.\n        var zr = this._zr;\n        var viewportRootOffset;\n        if (zr && zr.painter && (viewportRootOffset = zr.painter.getViewportRootOffset())) {\n            x += viewportRootOffset.offsetLeft;\n            y += viewportRootOffset.offsetTop;\n        }\n\n        var style = this.el.style;\n        style.left = x + 'px';\n        style.top = y + 'px';\n\n        this._x = x;\n        this._y = y;\n    },\n\n    hide: function () {\n        this.el.style.display = 'none';\n        this._show = false;\n    },\n\n    hideLater: function (time) {\n        if (this._show && !(this._inContent && this._enterable)) {\n            if (time) {\n                this._hideDelay = time;\n                // Set show false to avoid invoke hideLater mutiple times\n                this._show = false;\n                this._hideTimeout = setTimeout(bind(this.hide, this), time);\n            }\n            else {\n                this.hide();\n            }\n        }\n    },\n\n    isShow: function () {\n        return this._show;\n    },\n\n    getOuterSize: function () {\n        var width = this.el.clientWidth;\n        var height = this.el.clientHeight;\n\n        // Consider browser compatibility.\n        // IE8 does not support getComputedStyle.\n        if (document.defaultView && document.defaultView.getComputedStyle) {\n            var stl = document.defaultView.getComputedStyle(this.el);\n            if (stl) {\n                width += parseInt(stl.borderLeftWidth, 10) + parseInt(stl.borderRightWidth, 10);\n                height += parseInt(stl.borderTopWidth, 10) + parseInt(stl.borderBottomWidth, 10);\n            }\n        }\n\n        return {width: width, height: height};\n    }\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n// import Group from 'zrender/src/container/Group';\n/**\n * @alias module:echarts/component/tooltip/TooltipRichContent\n * @constructor\n */\nfunction TooltipRichContent(api) {\n\n    this._zr = api.getZr();\n\n    this._show = false;\n\n    /**\n     * @private\n     */\n    this._hideTimeout;\n}\n\nTooltipRichContent.prototype = {\n\n    constructor: TooltipRichContent,\n\n    /**\n     * @private\n     * @type {boolean}\n     */\n    _enterable: true,\n\n    /**\n     * Update when tooltip is rendered\n     */\n    update: function () {\n        // noop\n    },\n\n    show: function (tooltipModel) {\n        if (this._hideTimeout) {\n            clearTimeout(this._hideTimeout);\n        }\n\n        this.el.attr('show', true);\n        this._show = true;\n    },\n\n    /**\n     * Set tooltip content\n     *\n     * @param {string} content rich text string of content\n     * @param {Object} markerRich rich text style\n     * @param {Object} tooltipModel tooltip model\n     */\n    setContent: function (content, markerRich, tooltipModel) {\n        if (this.el) {\n            this._zr.remove(this.el);\n        }\n\n        var markers = {};\n        var text = content;\n        var prefix = '{marker';\n        var suffix = '|}';\n        var startId = text.indexOf(prefix);\n        while (startId >= 0) {\n            var endId = text.indexOf(suffix);\n            var name = text.substr(startId + prefix.length, endId - startId - prefix.length);\n            if (name.indexOf('sub') > -1) {\n                markers['marker' + name] = {\n                    textWidth: 4,\n                    textHeight: 4,\n                    textBorderRadius: 2,\n                    textBackgroundColor: markerRich[name],\n                    // TODO: textOffset is not implemented for rich text\n                    textOffset: [3, 0]\n                };\n            }\n            else {\n                markers['marker' + name] = {\n                    textWidth: 10,\n                    textHeight: 10,\n                    textBorderRadius: 5,\n                    textBackgroundColor: markerRich[name]\n                };\n            }\n\n            text = text.substr(endId + 1);\n            startId = text.indexOf('{marker');\n        }\n\n        this.el = new Text({\n            style: {\n                rich: markers,\n                text: content,\n                textLineHeight: 20,\n                textBackgroundColor: tooltipModel.get('backgroundColor'),\n                textBorderRadius: tooltipModel.get('borderRadius'),\n                textFill: tooltipModel.get('textStyle.color'),\n                textPadding: tooltipModel.get('padding')\n            },\n            z: tooltipModel.get('z')\n        });\n        this._zr.add(this.el);\n\n        var self = this;\n        this.el.on('mouseover', function () {\n            // clear the timeout in hideLater and keep showing tooltip\n            if (self._enterable) {\n                clearTimeout(self._hideTimeout);\n                self._show = true;\n            }\n            self._inContent = true;\n        });\n        this.el.on('mouseout', function () {\n            if (self._enterable) {\n                if (self._show) {\n                    self.hideLater(self._hideDelay);\n                }\n            }\n            self._inContent = false;\n        });\n    },\n\n    setEnterable: function (enterable) {\n        this._enterable = enterable;\n    },\n\n    getSize: function () {\n        var bounding = this.el.getBoundingRect();\n        return [bounding.width, bounding.height];\n    },\n\n    moveTo: function (x, y) {\n        if (this.el) {\n            this.el.attr('position', [x, y]);\n        }\n    },\n\n    hide: function () {\n        if (this.el) {\n            this.el.hide();\n        }\n        this._show = false;\n    },\n\n    hideLater: function (time) {\n        if (this._show && !(this._inContent && this._enterable)) {\n            if (time) {\n                this._hideDelay = time;\n                // Set show false to avoid invoke hideLater mutiple times\n                this._show = false;\n                this._hideTimeout = setTimeout(bind(this.hide, this), time);\n            }\n            else {\n                this.hide();\n            }\n        }\n    },\n\n    isShow: function () {\n        return this._show;\n    },\n\n    getOuterSize: function () {\n        var size = this.getSize();\n        return {\n            width: size[0],\n            height: size[1]\n        };\n    }\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar bind$3 = bind;\nvar each$21 = each$1;\nvar parsePercent$2 = parsePercent$1;\n\nvar proxyRect = new Rect({\n    shape: {x: -1, y: -1, width: 2, height: 2}\n});\n\nextendComponentView({\n\n    type: 'tooltip',\n\n    init: function (ecModel, api) {\n        if (env$1.node) {\n            return;\n        }\n\n        var tooltipModel = ecModel.getComponent('tooltip');\n        var renderMode = tooltipModel.get('renderMode');\n        this._renderMode = getTooltipRenderMode(renderMode);\n\n        var tooltipContent;\n        if (this._renderMode === 'html') {\n            tooltipContent = new TooltipContent(api.getDom(), api);\n            this._newLine = '<br/>';\n        }\n        else {\n            tooltipContent = new TooltipRichContent(api);\n            this._newLine = '\\n';\n        }\n\n        this._tooltipContent = tooltipContent;\n    },\n\n    render: function (tooltipModel, ecModel, api) {\n        if (env$1.node) {\n            return;\n        }\n\n        // Reset\n        this.group.removeAll();\n\n        /**\n         * @private\n         * @type {module:echarts/component/tooltip/TooltipModel}\n         */\n        this._tooltipModel = tooltipModel;\n\n        /**\n         * @private\n         * @type {module:echarts/model/Global}\n         */\n        this._ecModel = ecModel;\n\n        /**\n         * @private\n         * @type {module:echarts/ExtensionAPI}\n         */\n        this._api = api;\n\n        /**\n         * Should be cleaned when render.\n         * @private\n         * @type {Array.<Array.<Object>>}\n         */\n        this._lastDataByCoordSys = null;\n\n        /**\n         * @private\n         * @type {boolean}\n         */\n        this._alwaysShowContent = tooltipModel.get('alwaysShowContent');\n\n        var tooltipContent = this._tooltipContent;\n        tooltipContent.update();\n        tooltipContent.setEnterable(tooltipModel.get('enterable'));\n\n        this._initGlobalListener();\n\n        this._keepShow();\n    },\n\n    _initGlobalListener: function () {\n        var tooltipModel = this._tooltipModel;\n        var triggerOn = tooltipModel.get('triggerOn');\n\n        register(\n            'itemTooltip',\n            this._api,\n            bind$3(function (currTrigger, e, dispatchAction) {\n                // If 'none', it is not controlled by mouse totally.\n                if (triggerOn !== 'none') {\n                    if (triggerOn.indexOf(currTrigger) >= 0) {\n                        this._tryShow(e, dispatchAction);\n                    }\n                    else if (currTrigger === 'leave') {\n                        this._hide(dispatchAction);\n                    }\n                }\n            }, this)\n        );\n    },\n\n    _keepShow: function () {\n        var tooltipModel = this._tooltipModel;\n        var ecModel = this._ecModel;\n        var api = this._api;\n\n        // Try to keep the tooltip show when refreshing\n        if (this._lastX != null\n            && this._lastY != null\n            // When user is willing to control tooltip totally using API,\n            // self.manuallyShowTip({x, y}) might cause tooltip hide,\n            // which is not expected.\n            && tooltipModel.get('triggerOn') !== 'none'\n        ) {\n            var self = this;\n            clearTimeout(this._refreshUpdateTimeout);\n            this._refreshUpdateTimeout = setTimeout(function () {\n                // Show tip next tick after other charts are rendered\n                // In case highlight action has wrong result\n                // FIXME\n                !api.isDisposed() && self.manuallyShowTip(tooltipModel, ecModel, api, {\n                    x: self._lastX,\n                    y: self._lastY\n                });\n            });\n        }\n    },\n\n    /**\n     * Show tip manually by\n     * dispatchAction({\n     *     type: 'showTip',\n     *     x: 10,\n     *     y: 10\n     * });\n     * Or\n     * dispatchAction({\n     *      type: 'showTip',\n     *      seriesIndex: 0,\n     *      dataIndex or dataIndexInside or name\n     * });\n     *\n     *  TODO Batch\n     */\n    manuallyShowTip: function (tooltipModel, ecModel, api, payload) {\n        if (payload.from === this.uid || env$1.node) {\n            return;\n        }\n\n        var dispatchAction = makeDispatchAction$1(payload, api);\n\n        // Reset ticket\n        this._ticket = '';\n\n        // When triggered from axisPointer.\n        var dataByCoordSys = payload.dataByCoordSys;\n\n        if (payload.tooltip && payload.x != null && payload.y != null) {\n            var el = proxyRect;\n            el.position = [payload.x, payload.y];\n            el.update();\n            el.tooltip = payload.tooltip;\n            // Manually show tooltip while view is not using zrender elements.\n            this._tryShow({\n                offsetX: payload.x,\n                offsetY: payload.y,\n                target: el\n            }, dispatchAction);\n        }\n        else if (dataByCoordSys) {\n            this._tryShow({\n                offsetX: payload.x,\n                offsetY: payload.y,\n                position: payload.position,\n                event: {},\n                dataByCoordSys: payload.dataByCoordSys,\n                tooltipOption: payload.tooltipOption\n            }, dispatchAction);\n        }\n        else if (payload.seriesIndex != null) {\n\n            if (this._manuallyAxisShowTip(tooltipModel, ecModel, api, payload)) {\n                return;\n            }\n\n            var pointInfo = findPointFromSeries(payload, ecModel);\n            var cx = pointInfo.point[0];\n            var cy = pointInfo.point[1];\n            if (cx != null && cy != null) {\n                this._tryShow({\n                    offsetX: cx,\n                    offsetY: cy,\n                    position: payload.position,\n                    target: pointInfo.el,\n                    event: {}\n                }, dispatchAction);\n            }\n        }\n        else if (payload.x != null && payload.y != null) {\n            // FIXME\n            // should wrap dispatchAction like `axisPointer/globalListener` ?\n            api.dispatchAction({\n                type: 'updateAxisPointer',\n                x: payload.x,\n                y: payload.y\n            });\n\n            this._tryShow({\n                offsetX: payload.x,\n                offsetY: payload.y,\n                position: payload.position,\n                target: api.getZr().findHover(payload.x, payload.y).target,\n                event: {}\n            }, dispatchAction);\n        }\n    },\n\n    manuallyHideTip: function (tooltipModel, ecModel, api, payload) {\n        var tooltipContent = this._tooltipContent;\n\n        if (!this._alwaysShowContent && this._tooltipModel) {\n            tooltipContent.hideLater(this._tooltipModel.get('hideDelay'));\n        }\n\n        this._lastX = this._lastY = null;\n\n        if (payload.from !== this.uid) {\n            this._hide(makeDispatchAction$1(payload, api));\n        }\n    },\n\n    // Be compatible with previous design, that is, when tooltip.type is 'axis' and\n    // dispatchAction 'showTip' with seriesIndex and dataIndex will trigger axis pointer\n    // and tooltip.\n    _manuallyAxisShowTip: function (tooltipModel, ecModel, api, payload) {\n        var seriesIndex = payload.seriesIndex;\n        var dataIndex = payload.dataIndex;\n        var coordSysAxesInfo = ecModel.getComponent('axisPointer').coordSysAxesInfo;\n\n        if (seriesIndex == null || dataIndex == null || coordSysAxesInfo == null) {\n            return;\n        }\n\n        var seriesModel = ecModel.getSeriesByIndex(seriesIndex);\n        if (!seriesModel) {\n            return;\n        }\n\n        var data = seriesModel.getData();\n        var tooltipModel = buildTooltipModel([\n            data.getItemModel(dataIndex),\n            seriesModel,\n            (seriesModel.coordinateSystem || {}).model,\n            tooltipModel\n        ]);\n\n        if (tooltipModel.get('trigger') !== 'axis') {\n            return;\n        }\n\n        api.dispatchAction({\n            type: 'updateAxisPointer',\n            seriesIndex: seriesIndex,\n            dataIndex: dataIndex,\n            position: payload.position\n        });\n\n        return true;\n    },\n\n    _tryShow: function (e, dispatchAction) {\n        var el = e.target;\n        var tooltipModel = this._tooltipModel;\n\n        if (!tooltipModel) {\n            return;\n        }\n\n        // Save mouse x, mouse y. So we can try to keep showing the tip if chart is refreshed\n        this._lastX = e.offsetX;\n        this._lastY = e.offsetY;\n\n        var dataByCoordSys = e.dataByCoordSys;\n        if (dataByCoordSys && dataByCoordSys.length) {\n            this._showAxisTooltip(dataByCoordSys, e);\n        }\n        // Always show item tooltip if mouse is on the element with dataIndex\n        else if (el && el.dataIndex != null) {\n            this._lastDataByCoordSys = null;\n            this._showSeriesItemTooltip(e, el, dispatchAction);\n        }\n        // Tooltip provided directly. Like legend.\n        else if (el && el.tooltip) {\n            this._lastDataByCoordSys = null;\n            this._showComponentItemTooltip(e, el, dispatchAction);\n        }\n        else {\n            this._lastDataByCoordSys = null;\n            this._hide(dispatchAction);\n        }\n    },\n\n    _showOrMove: function (tooltipModel, cb) {\n        // showDelay is used in this case: tooltip.enterable is set\n        // as true. User intent to move mouse into tooltip and click\n        // something. `showDelay` makes it easyer to enter the content\n        // but tooltip do not move immediately.\n        var delay = tooltipModel.get('showDelay');\n        cb = bind(cb, this);\n        clearTimeout(this._showTimout);\n        delay > 0\n            ? (this._showTimout = setTimeout(cb, delay))\n            : cb();\n    },\n\n    _showAxisTooltip: function (dataByCoordSys, e) {\n        var ecModel = this._ecModel;\n        var globalTooltipModel = this._tooltipModel;\n        var point = [e.offsetX, e.offsetY];\n        var singleDefaultHTML = [];\n        var singleParamsList = [];\n        var singleTooltipModel = buildTooltipModel([\n            e.tooltipOption,\n            globalTooltipModel\n        ]);\n\n        var renderMode = this._renderMode;\n        var newLine = this._newLine;\n\n        var markers = {};\n\n        each$21(dataByCoordSys, function (itemCoordSys) {\n            // var coordParamList = [];\n            // var coordDefaultHTML = [];\n            // var coordTooltipModel = buildTooltipModel([\n            //     e.tooltipOption,\n            //     itemCoordSys.tooltipOption,\n            //     ecModel.getComponent(itemCoordSys.coordSysMainType, itemCoordSys.coordSysIndex),\n            //     globalTooltipModel\n            // ]);\n            // var displayMode = coordTooltipModel.get('displayMode');\n            // var paramsList = displayMode === 'single' ? singleParamsList : [];\n\n            each$21(itemCoordSys.dataByAxis, function (item) {\n                var axisModel = ecModel.getComponent(item.axisDim + 'Axis', item.axisIndex);\n                var axisValue = item.value;\n                var seriesDefaultHTML = [];\n\n                if (!axisModel || axisValue == null) {\n                    return;\n                }\n\n                var valueLabel = getValueLabel(\n                    axisValue, axisModel.axis, ecModel,\n                    item.seriesDataIndices,\n                    item.valueLabelOpt\n                );\n\n                each$1(item.seriesDataIndices, function (idxItem) {\n                    var series = ecModel.getSeriesByIndex(idxItem.seriesIndex);\n                    var dataIndex = idxItem.dataIndexInside;\n                    var dataParams = series && series.getDataParams(dataIndex);\n                    dataParams.axisDim = item.axisDim;\n                    dataParams.axisIndex = item.axisIndex;\n                    dataParams.axisType = item.axisType;\n                    dataParams.axisId = item.axisId;\n                    dataParams.axisValue = getAxisRawValue(axisModel.axis, axisValue);\n                    dataParams.axisValueLabel = valueLabel;\n\n                    if (dataParams) {\n                        singleParamsList.push(dataParams);\n                        var seriesTooltip = series.formatTooltip(dataIndex, true, null, renderMode);\n\n                        var html;\n                        if (isObject$1(seriesTooltip)) {\n                            html = seriesTooltip.html;\n                            var newMarkers = seriesTooltip.markers;\n                            merge(markers, newMarkers);\n                        }\n                        else {\n                            html = seriesTooltip;\n                        }\n                        seriesDefaultHTML.push(html);\n                    }\n                });\n\n                // Default tooltip content\n                // FIXME\n                // (1) shold be the first data which has name?\n                // (2) themeRiver, firstDataIndex is array, and first line is unnecessary.\n                var firstLine = valueLabel;\n                if (renderMode !== 'html') {\n                    singleDefaultHTML.push(seriesDefaultHTML.join(newLine));\n                }\n                else {\n                    singleDefaultHTML.push(\n                        (firstLine ? encodeHTML(firstLine) + newLine : '')\n                        + seriesDefaultHTML.join(newLine)\n                    );\n                }\n            });\n        }, this);\n\n        // In most case, the second axis is shown upper than the first one.\n        singleDefaultHTML.reverse();\n        singleDefaultHTML = singleDefaultHTML.join(this._newLine + this._newLine);\n\n        var positionExpr = e.position;\n        this._showOrMove(singleTooltipModel, function () {\n            if (this._updateContentNotChangedOnAxis(dataByCoordSys)) {\n                this._updatePosition(\n                    singleTooltipModel,\n                    positionExpr,\n                    point[0], point[1],\n                    this._tooltipContent,\n                    singleParamsList\n                );\n            }\n            else {\n                this._showTooltipContent(\n                    singleTooltipModel, singleDefaultHTML, singleParamsList, Math.random(),\n                    point[0], point[1], positionExpr, undefined, markers\n                );\n            }\n        });\n\n        // Do not trigger events here, because this branch only be entered\n        // from dispatchAction.\n    },\n\n    _showSeriesItemTooltip: function (e, el, dispatchAction) {\n        var ecModel = this._ecModel;\n        // Use dataModel in element if possible\n        // Used when mouseover on a element like markPoint or edge\n        // In which case, the data is not main data in series.\n        var seriesIndex = el.seriesIndex;\n        var seriesModel = ecModel.getSeriesByIndex(seriesIndex);\n\n        // For example, graph link.\n        var dataModel = el.dataModel || seriesModel;\n        var dataIndex = el.dataIndex;\n        var dataType = el.dataType;\n        var data = dataModel.getData();\n\n        var tooltipModel = buildTooltipModel([\n            data.getItemModel(dataIndex),\n            dataModel,\n            seriesModel && (seriesModel.coordinateSystem || {}).model,\n            this._tooltipModel\n        ]);\n\n        var tooltipTrigger = tooltipModel.get('trigger');\n        if (tooltipTrigger != null && tooltipTrigger !== 'item') {\n            return;\n        }\n\n        var params = dataModel.getDataParams(dataIndex, dataType);\n        var seriesTooltip = dataModel.formatTooltip(dataIndex, false, dataType, this._renderMode);\n        var defaultHtml;\n        var markers;\n        if (isObject$1(seriesTooltip)) {\n            defaultHtml = seriesTooltip.html;\n            markers = seriesTooltip.markers;\n        }\n        else {\n            defaultHtml = seriesTooltip;\n            markers = null;\n        }\n\n        var asyncTicket = 'item_' + dataModel.name + '_' + dataIndex;\n\n        this._showOrMove(tooltipModel, function () {\n            this._showTooltipContent(\n                tooltipModel, defaultHtml, params, asyncTicket,\n                e.offsetX, e.offsetY, e.position, e.target, markers\n            );\n        });\n\n        // FIXME\n        // duplicated showtip if manuallyShowTip is called from dispatchAction.\n        dispatchAction({\n            type: 'showTip',\n            dataIndexInside: dataIndex,\n            dataIndex: data.getRawIndex(dataIndex),\n            seriesIndex: seriesIndex,\n            from: this.uid\n        });\n    },\n\n    _showComponentItemTooltip: function (e, el, dispatchAction) {\n        var tooltipOpt = el.tooltip;\n        if (typeof tooltipOpt === 'string') {\n            var content = tooltipOpt;\n            tooltipOpt = {\n                content: content,\n                // Fixed formatter\n                formatter: content\n            };\n        }\n        var subTooltipModel = new Model(tooltipOpt, this._tooltipModel, this._ecModel);\n        var defaultHtml = subTooltipModel.get('content');\n        var asyncTicket = Math.random();\n\n        // Do not check whether `trigger` is 'none' here, because `trigger`\n        // only works on cooridinate system. In fact, we have not found case\n        // that requires setting `trigger` nothing on component yet.\n\n        this._showOrMove(subTooltipModel, function () {\n            this._showTooltipContent(\n                subTooltipModel, defaultHtml, subTooltipModel.get('formatterParams') || {},\n                asyncTicket, e.offsetX, e.offsetY, e.position, el\n            );\n        });\n\n        // If not dispatch showTip, tip may be hide triggered by axis.\n        dispatchAction({\n            type: 'showTip',\n            from: this.uid\n        });\n    },\n\n    _showTooltipContent: function (\n        tooltipModel, defaultHtml, params, asyncTicket, x, y, positionExpr, el, markers\n    ) {\n        // Reset ticket\n        this._ticket = '';\n\n        if (!tooltipModel.get('showContent') || !tooltipModel.get('show')) {\n            return;\n        }\n\n        var tooltipContent = this._tooltipContent;\n\n        var formatter = tooltipModel.get('formatter');\n        positionExpr = positionExpr || tooltipModel.get('position');\n        var html = defaultHtml;\n\n        if (formatter && typeof formatter === 'string') {\n            html = formatTpl(formatter, params, true);\n        }\n        else if (typeof formatter === 'function') {\n            var callback = bind$3(function (cbTicket, html) {\n                if (cbTicket === this._ticket) {\n                    tooltipContent.setContent(html, markers, tooltipModel);\n                    this._updatePosition(\n                        tooltipModel, positionExpr, x, y, tooltipContent, params, el\n                    );\n                }\n            }, this);\n            this._ticket = asyncTicket;\n            html = formatter(params, asyncTicket, callback);\n        }\n\n        tooltipContent.setContent(html, markers, tooltipModel);\n        tooltipContent.show(tooltipModel);\n\n        this._updatePosition(\n            tooltipModel, positionExpr, x, y, tooltipContent, params, el\n        );\n    },\n\n    /**\n     * @param  {string|Function|Array.<number>|Object} positionExpr\n     * @param  {number} x Mouse x\n     * @param  {number} y Mouse y\n     * @param  {boolean} confine Whether confine tooltip content in view rect.\n     * @param  {Object|<Array.<Object>} params\n     * @param  {module:zrender/Element} el target element\n     * @param  {module:echarts/ExtensionAPI} api\n     * @return {Array.<number>}\n     */\n    _updatePosition: function (tooltipModel, positionExpr, x, y, content, params, el) {\n        var viewWidth = this._api.getWidth();\n        var viewHeight = this._api.getHeight();\n        positionExpr = positionExpr || tooltipModel.get('position');\n\n        var contentSize = content.getSize();\n        var align = tooltipModel.get('align');\n        var vAlign = tooltipModel.get('verticalAlign');\n        var rect = el && el.getBoundingRect().clone();\n        el && rect.applyTransform(el.transform);\n\n        if (typeof positionExpr === 'function') {\n            // Callback of position can be an array or a string specify the position\n            positionExpr = positionExpr([x, y], params, content.el, rect, {\n                viewSize: [viewWidth, viewHeight],\n                contentSize: contentSize.slice()\n            });\n        }\n\n        if (isArray(positionExpr)) {\n            x = parsePercent$2(positionExpr[0], viewWidth);\n            y = parsePercent$2(positionExpr[1], viewHeight);\n        }\n        else if (isObject$1(positionExpr)) {\n            positionExpr.width = contentSize[0];\n            positionExpr.height = contentSize[1];\n            var layoutRect = getLayoutRect(\n                positionExpr, {width: viewWidth, height: viewHeight}\n            );\n            x = layoutRect.x;\n            y = layoutRect.y;\n            align = null;\n            // When positionExpr is left/top/right/bottom,\n            // align and verticalAlign will not work.\n            vAlign = null;\n        }\n        // Specify tooltip position by string 'top' 'bottom' 'left' 'right' around graphic element\n        else if (typeof positionExpr === 'string' && el) {\n            var pos = calcTooltipPosition(\n                positionExpr, rect, contentSize\n            );\n            x = pos[0];\n            y = pos[1];\n        }\n        else {\n            var pos = refixTooltipPosition(\n                x, y, content, viewWidth, viewHeight, align ? null : 20, vAlign ? null : 20\n            );\n            x = pos[0];\n            y = pos[1];\n        }\n\n        align && (x -= isCenterAlign(align) ? contentSize[0] / 2 : align === 'right' ? contentSize[0] : 0);\n        vAlign && (y -= isCenterAlign(vAlign) ? contentSize[1] / 2 : vAlign === 'bottom' ? contentSize[1] : 0);\n\n        if (tooltipModel.get('confine')) {\n            var pos = confineTooltipPosition(\n                x, y, content, viewWidth, viewHeight\n            );\n            x = pos[0];\n            y = pos[1];\n        }\n\n        content.moveTo(x, y);\n    },\n\n    // FIXME\n    // Should we remove this but leave this to user?\n    _updateContentNotChangedOnAxis: function (dataByCoordSys) {\n        var lastCoordSys = this._lastDataByCoordSys;\n        var contentNotChanged = !!lastCoordSys\n            && lastCoordSys.length === dataByCoordSys.length;\n\n        contentNotChanged && each$21(lastCoordSys, function (lastItemCoordSys, indexCoordSys) {\n            var lastDataByAxis = lastItemCoordSys.dataByAxis || {};\n            var thisItemCoordSys = dataByCoordSys[indexCoordSys] || {};\n            var thisDataByAxis = thisItemCoordSys.dataByAxis || [];\n            contentNotChanged &= lastDataByAxis.length === thisDataByAxis.length;\n\n            contentNotChanged && each$21(lastDataByAxis, function (lastItem, indexAxis) {\n                var thisItem = thisDataByAxis[indexAxis] || {};\n                var lastIndices = lastItem.seriesDataIndices || [];\n                var newIndices = thisItem.seriesDataIndices || [];\n\n                contentNotChanged\n                    &= lastItem.value === thisItem.value\n                    && lastItem.axisType === thisItem.axisType\n                    && lastItem.axisId === thisItem.axisId\n                    && lastIndices.length === newIndices.length;\n\n                contentNotChanged && each$21(lastIndices, function (lastIdxItem, j) {\n                    var newIdxItem = newIndices[j];\n                    contentNotChanged\n                        &= lastIdxItem.seriesIndex === newIdxItem.seriesIndex\n                        && lastIdxItem.dataIndex === newIdxItem.dataIndex;\n                });\n            });\n        });\n\n        this._lastDataByCoordSys = dataByCoordSys;\n\n        return !!contentNotChanged;\n    },\n\n    _hide: function (dispatchAction) {\n        // Do not directly hideLater here, because this behavior may be prevented\n        // in dispatchAction when showTip is dispatched.\n\n        // FIXME\n        // duplicated hideTip if manuallyHideTip is called from dispatchAction.\n        this._lastDataByCoordSys = null;\n        dispatchAction({\n            type: 'hideTip',\n            from: this.uid\n        });\n    },\n\n    dispose: function (ecModel, api) {\n        if (env$1.node) {\n            return;\n        }\n        this._tooltipContent.hide();\n        unregister('itemTooltip', api);\n    }\n});\n\n\n/**\n * @param {Array.<Object|module:echarts/model/Model>} modelCascade\n * From top to bottom. (the last one should be globalTooltipModel);\n */\nfunction buildTooltipModel(modelCascade) {\n    var resultModel = modelCascade.pop();\n    while (modelCascade.length) {\n        var tooltipOpt = modelCascade.pop();\n        if (tooltipOpt) {\n            if (Model.isInstance(tooltipOpt)) {\n                tooltipOpt = tooltipOpt.get('tooltip', true);\n            }\n            // In each data item tooltip can be simply write:\n            // {\n            //  value: 10,\n            //  tooltip: 'Something you need to know'\n            // }\n            if (typeof tooltipOpt === 'string') {\n                tooltipOpt = {formatter: tooltipOpt};\n            }\n            resultModel = new Model(tooltipOpt, resultModel, resultModel.ecModel);\n        }\n    }\n    return resultModel;\n}\n\nfunction makeDispatchAction$1(payload, api) {\n    return payload.dispatchAction || bind(api.dispatchAction, api);\n}\n\nfunction refixTooltipPosition(x, y, content, viewWidth, viewHeight, gapH, gapV) {\n    var size = content.getOuterSize();\n    var width = size.width;\n    var height = size.height;\n\n    if (gapH != null) {\n        if (x + width + gapH > viewWidth) {\n            x -= width + gapH;\n        }\n        else {\n            x += gapH;\n        }\n    }\n    if (gapV != null) {\n        if (y + height + gapV > viewHeight) {\n            y -= height + gapV;\n        }\n        else {\n            y += gapV;\n        }\n    }\n    return [x, y];\n}\n\nfunction confineTooltipPosition(x, y, content, viewWidth, viewHeight) {\n    var size = content.getOuterSize();\n    var width = size.width;\n    var height = size.height;\n\n    x = Math.min(x + width, viewWidth) - width;\n    y = Math.min(y + height, viewHeight) - height;\n    x = Math.max(x, 0);\n    y = Math.max(y, 0);\n\n    return [x, y];\n}\n\nfunction calcTooltipPosition(position, rect, contentSize) {\n    var domWidth = contentSize[0];\n    var domHeight = contentSize[1];\n    var gap = 5;\n    var x = 0;\n    var y = 0;\n    var rectWidth = rect.width;\n    var rectHeight = rect.height;\n    switch (position) {\n        case 'inside':\n            x = rect.x + rectWidth / 2 - domWidth / 2;\n            y = rect.y + rectHeight / 2 - domHeight / 2;\n            break;\n        case 'top':\n            x = rect.x + rectWidth / 2 - domWidth / 2;\n            y = rect.y - domHeight - gap;\n            break;\n        case 'bottom':\n            x = rect.x + rectWidth / 2 - domWidth / 2;\n            y = rect.y + rectHeight + gap;\n            break;\n        case 'left':\n            x = rect.x - domWidth - gap;\n            y = rect.y + rectHeight / 2 - domHeight / 2;\n            break;\n        case 'right':\n            x = rect.x + rectWidth + gap;\n            y = rect.y + rectHeight / 2 - domHeight / 2;\n    }\n    return [x, y];\n}\n\nfunction isCenterAlign(align) {\n    return align === 'center' || align === 'middle';\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n// FIXME Better way to pack data in graphic element\n\n/**\n * @action\n * @property {string} type\n * @property {number} seriesIndex\n * @property {number} dataIndex\n * @property {number} [x]\n * @property {number} [y]\n */\nregisterAction(\n    {\n        type: 'showTip',\n        event: 'showTip',\n        update: 'tooltip:manuallyShowTip'\n    },\n    // noop\n    function () {}\n);\n\nregisterAction(\n    {\n        type: 'hideTip',\n        event: 'hideTip',\n        update: 'tooltip:manuallyHideTip'\n    },\n    // noop\n    function () {}\n);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar DEFAULT_TOOLBOX_BTNS = ['rect', 'polygon', 'keep', 'clear'];\n\nvar preprocessor$1 = function (option, isNew) {\n    var brushComponents = option && option.brush;\n    if (!isArray(brushComponents)) {\n        brushComponents = brushComponents ? [brushComponents] : [];\n    }\n\n    if (!brushComponents.length) {\n        return;\n    }\n\n    var brushComponentSpecifiedBtns = [];\n\n    each$1(brushComponents, function (brushOpt) {\n        var tbs = brushOpt.hasOwnProperty('toolbox')\n            ? brushOpt.toolbox : [];\n\n        if (tbs instanceof Array) {\n            brushComponentSpecifiedBtns = brushComponentSpecifiedBtns.concat(tbs);\n        }\n    });\n\n    var toolbox = option && option.toolbox;\n\n    if (isArray(toolbox)) {\n        toolbox = toolbox[0];\n    }\n    if (!toolbox) {\n        toolbox = {feature: {}};\n        option.toolbox = [toolbox];\n    }\n\n    var toolboxFeature = (toolbox.feature || (toolbox.feature = {}));\n    var toolboxBrush = toolboxFeature.brush || (toolboxFeature.brush = {});\n    var brushTypes = toolboxBrush.type || (toolboxBrush.type = []);\n\n    brushTypes.push.apply(brushTypes, brushComponentSpecifiedBtns);\n\n    removeDuplicate(brushTypes);\n\n    if (isNew && !brushTypes.length) {\n        brushTypes.push.apply(brushTypes, DEFAULT_TOOLBOX_BTNS);\n    }\n};\n\nfunction removeDuplicate(arr) {\n    var map$$1 = {};\n    each$1(arr, function (val) {\n        map$$1[val] = 1;\n    });\n    arr.length = 0;\n    each$1(map$$1, function (flag, val) {\n        arr.push(val);\n    });\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * @file Visual solution, for consistent option specification.\n */\n\nvar each$23 = each$1;\n\nfunction hasKeys(obj) {\n    if (obj) {\n        for (var name in obj) {\n            if (obj.hasOwnProperty(name)) {\n                return true;\n            }\n        }\n    }\n}\n\n/**\n * @param {Object} option\n * @param {Array.<string>} stateList\n * @param {Function} [supplementVisualOption]\n * @return {Object} visualMappings <state, <visualType, module:echarts/visual/VisualMapping>>\n */\nfunction createVisualMappings(option, stateList, supplementVisualOption) {\n    var visualMappings = {};\n\n    each$23(stateList, function (state) {\n        var mappings = visualMappings[state] = createMappings();\n\n        each$23(option[state], function (visualData, visualType) {\n            if (!VisualMapping.isValidType(visualType)) {\n                return;\n            }\n            var mappingOption = {\n                type: visualType,\n                visual: visualData\n            };\n            supplementVisualOption && supplementVisualOption(mappingOption, state);\n            mappings[visualType] = new VisualMapping(mappingOption);\n\n            // Prepare a alpha for opacity, for some case that opacity\n            // is not supported, such as rendering using gradient color.\n            if (visualType === 'opacity') {\n                mappingOption = clone(mappingOption);\n                mappingOption.type = 'colorAlpha';\n                mappings.__hidden.__alphaForOpacity = new VisualMapping(mappingOption);\n            }\n        });\n    });\n\n    return visualMappings;\n\n    function createMappings() {\n        var Creater = function () {};\n        // Make sure hidden fields will not be visited by\n        // object iteration (with hasOwnProperty checking).\n        Creater.prototype.__hidden = Creater.prototype;\n        var obj = new Creater();\n        return obj;\n    }\n}\n\n/**\n * @param {Object} thisOption\n * @param {Object} newOption\n * @param {Array.<string>} keys\n */\nfunction replaceVisualOption(thisOption, newOption, keys) {\n    // Visual attributes merge is not supported, otherwise it\n    // brings overcomplicated merge logic. See #2853. So if\n    // newOption has anyone of these keys, all of these keys\n    // will be reset. Otherwise, all keys remain.\n    var has;\n    each$1(keys, function (key) {\n        if (newOption.hasOwnProperty(key) && hasKeys(newOption[key])) {\n            has = true;\n        }\n    });\n    has && each$1(keys, function (key) {\n        if (newOption.hasOwnProperty(key) && hasKeys(newOption[key])) {\n            thisOption[key] = clone(newOption[key]);\n        }\n        else {\n            delete thisOption[key];\n        }\n    });\n}\n\n/**\n * @param {Array.<string>} stateList\n * @param {Object} visualMappings <state, Object.<visualType, module:echarts/visual/VisualMapping>>\n * @param {module:echarts/data/List} list\n * @param {Function} getValueState param: valueOrIndex, return: state.\n * @param {object} [scope] Scope for getValueState\n * @param {string} [dimension] Concrete dimension, if used.\n */\n// ???! handle brush?\nfunction applyVisual(stateList, visualMappings, data, getValueState, scope, dimension) {\n    var visualTypesMap = {};\n    each$1(stateList, function (state) {\n        var visualTypes = VisualMapping.prepareVisualTypes(visualMappings[state]);\n        visualTypesMap[state] = visualTypes;\n    });\n\n    var dataIndex;\n\n    function getVisual(key) {\n        return data.getItemVisual(dataIndex, key);\n    }\n\n    function setVisual(key, value) {\n        data.setItemVisual(dataIndex, key, value);\n    }\n\n    if (dimension == null) {\n        data.each(eachItem);\n    }\n    else {\n        data.each([dimension], eachItem);\n    }\n\n    function eachItem(valueOrIndex, index) {\n        dataIndex = dimension == null ? valueOrIndex : index;\n\n        var rawDataItem = data.getRawDataItem(dataIndex);\n        // Consider performance\n        if (rawDataItem && rawDataItem.visualMap === false) {\n            return;\n        }\n\n        var valueState = getValueState.call(scope, valueOrIndex);\n        var mappings = visualMappings[valueState];\n        var visualTypes = visualTypesMap[valueState];\n\n        for (var i = 0, len = visualTypes.length; i < len; i++) {\n            var type = visualTypes[i];\n            mappings[type] && mappings[type].applyVisual(\n                valueOrIndex, getVisual, setVisual\n            );\n        }\n    }\n}\n\n/**\n * @param {module:echarts/data/List} data\n * @param {Array.<string>} stateList\n * @param {Object} visualMappings <state, Object.<visualType, module:echarts/visual/VisualMapping>>\n * @param {Function} getValueState param: valueOrIndex, return: state.\n * @param {number} [dim] dimension or dimension index.\n */\nfunction incrementalApplyVisual(stateList, visualMappings, getValueState, dim) {\n    var visualTypesMap = {};\n    each$1(stateList, function (state) {\n        var visualTypes = VisualMapping.prepareVisualTypes(visualMappings[state]);\n        visualTypesMap[state] = visualTypes;\n    });\n\n    function progress(params, data) {\n        if (dim != null) {\n            dim = data.getDimension(dim);\n        }\n\n        function getVisual(key) {\n            return data.getItemVisual(dataIndex, key);\n        }\n\n        function setVisual(key, value) {\n            data.setItemVisual(dataIndex, key, value);\n        }\n\n        var dataIndex;\n        while ((dataIndex = params.next()) != null) {\n            var rawDataItem = data.getRawDataItem(dataIndex);\n\n            // Consider performance\n            if (rawDataItem && rawDataItem.visualMap === false) {\n                continue;\n            }\n\n            var value = dim != null\n                ? data.get(dim, dataIndex, true)\n                : dataIndex;\n\n            var valueState = getValueState(value);\n            var mappings = visualMappings[valueState];\n            var visualTypes = visualTypesMap[valueState];\n\n            for (var i = 0, len = visualTypes.length; i < len; i++) {\n                var type = visualTypes[i];\n                mappings[type] && mappings[type].applyVisual(value, getVisual, setVisual);\n            }\n        }\n    }\n\n    return {progress: progress};\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n// Key of the first level is brushType: `line`, `rect`, `polygon`.\n// Key of the second level is chart element type: `point`, `rect`.\n// See moudule:echarts/component/helper/BrushController\n// function param:\n//      {Object} itemLayout fetch from data.getItemLayout(dataIndex)\n//      {Object} selectors {point: selector, rect: selector, ...}\n//      {Object} area {range: [[], [], ..], boudingRect}\n// function return:\n//      {boolean} Whether in the given brush.\nvar selector = {\n    lineX: getLineSelectors(0),\n    lineY: getLineSelectors(1),\n    rect: {\n        point: function (itemLayout, selectors, area) {\n            return itemLayout && area.boundingRect.contain(itemLayout[0], itemLayout[1]);\n        },\n        rect: function (itemLayout, selectors, area) {\n            return itemLayout && area.boundingRect.intersect(itemLayout);\n        }\n    },\n    polygon: {\n        point: function (itemLayout, selectors, area) {\n            return itemLayout\n                && area.boundingRect.contain(itemLayout[0], itemLayout[1])\n                && contain$1(area.range, itemLayout[0], itemLayout[1]);\n        },\n        rect: function (itemLayout, selectors, area) {\n            var points = area.range;\n\n            if (!itemLayout || points.length <= 1) {\n                return false;\n            }\n\n            var x = itemLayout.x;\n            var y = itemLayout.y;\n            var width = itemLayout.width;\n            var height = itemLayout.height;\n            var p = points[0];\n\n            if (contain$1(points, x, y)\n                || contain$1(points, x + width, y)\n                || contain$1(points, x, y + height)\n                || contain$1(points, x + width, y + height)\n                || BoundingRect.create(itemLayout).contain(p[0], p[1])\n                || linePolygonIntersect(x, y, x + width, y, points)\n                || linePolygonIntersect(x, y, x, y + height, points)\n                || linePolygonIntersect(x + width, y, x + width, y + height, points)\n                || linePolygonIntersect(x, y + height, x + width, y + height, points)\n            ) {\n                return true;\n            }\n        }\n    }\n};\n\nfunction getLineSelectors(xyIndex) {\n    var xy = ['x', 'y'];\n    var wh = ['width', 'height'];\n\n    return {\n        point: function (itemLayout, selectors, area) {\n            if (itemLayout) {\n                var range = area.range;\n                var p = itemLayout[xyIndex];\n                return inLineRange(p, range);\n            }\n        },\n        rect: function (itemLayout, selectors, area) {\n            if (itemLayout) {\n                var range = area.range;\n                var layoutRange = [\n                    itemLayout[xy[xyIndex]],\n                    itemLayout[xy[xyIndex]] + itemLayout[wh[xyIndex]]\n                ];\n                layoutRange[1] < layoutRange[0] && layoutRange.reverse();\n                return inLineRange(layoutRange[0], range)\n                    || inLineRange(layoutRange[1], range)\n                    || inLineRange(range[0], layoutRange)\n                    || inLineRange(range[1], layoutRange);\n            }\n        }\n    };\n}\n\nfunction inLineRange(p, range) {\n    return range[0] <= p && p <= range[1];\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar STATE_LIST = ['inBrush', 'outOfBrush'];\nvar DISPATCH_METHOD = '__ecBrushSelect';\nvar DISPATCH_FLAG = '__ecInBrushSelectEvent';\nvar PRIORITY_BRUSH = PRIORITY.VISUAL.BRUSH;\n\n/**\n * Layout for visual, the priority higher than other layout, and before brush visual.\n */\nregisterLayout(PRIORITY_BRUSH, function (ecModel, api, payload) {\n    ecModel.eachComponent({mainType: 'brush'}, function (brushModel) {\n\n        payload && payload.type === 'takeGlobalCursor' && brushModel.setBrushOption(\n            payload.key === 'brush' ? payload.brushOption : {brushType: false}\n        );\n\n        var brushTargetManager = brushModel.brushTargetManager = new BrushTargetManager(brushModel.option, ecModel);\n\n        brushTargetManager.setInputRanges(brushModel.areas, ecModel);\n    });\n});\n\n/**\n * Register the visual encoding if this modules required.\n */\nregisterVisual(PRIORITY_BRUSH, function (ecModel, api, payload) {\n\n    var brushSelected = [];\n    var throttleType;\n    var throttleDelay;\n\n    ecModel.eachComponent({mainType: 'brush'}, function (brushModel, brushIndex) {\n\n        var thisBrushSelected = {\n            brushId: brushModel.id,\n            brushIndex: brushIndex,\n            brushName: brushModel.name,\n            areas: clone(brushModel.areas),\n            selected: []\n        };\n        // Every brush component exists in event params, convenient\n        // for user to find by index.\n        brushSelected.push(thisBrushSelected);\n\n        var brushOption = brushModel.option;\n        var brushLink = brushOption.brushLink;\n        var linkedSeriesMap = [];\n        var selectedDataIndexForLink = [];\n        var rangeInfoBySeries = [];\n        var hasBrushExists = 0;\n\n        if (!brushIndex) { // Only the first throttle setting works.\n            throttleType = brushOption.throttleType;\n            throttleDelay = brushOption.throttleDelay;\n        }\n\n        // Add boundingRect and selectors to range.\n        var areas = map(brushModel.areas, function (area) {\n            return bindSelector(\n                defaults(\n                    {boundingRect: boundingRectBuilders[area.brushType](area)},\n                    area\n                )\n            );\n        });\n\n        var visualMappings = createVisualMappings(\n            brushModel.option, STATE_LIST, function (mappingOption) {\n                mappingOption.mappingMethod = 'fixed';\n            }\n        );\n\n        isArray(brushLink) && each$1(brushLink, function (seriesIndex) {\n            linkedSeriesMap[seriesIndex] = 1;\n        });\n\n        function linkOthers(seriesIndex) {\n            return brushLink === 'all' || linkedSeriesMap[seriesIndex];\n        }\n\n        // If no supported brush or no brush on the series,\n        // all visuals should be in original state.\n        function brushed(rangeInfoList) {\n            return !!rangeInfoList.length;\n        }\n\n        /**\n         * Logic for each series: (If the logic has to be modified one day, do it carefully!)\n         *\n         * ( brushed ┬ && ┬hasBrushExist ┬ && linkOthers  ) => StepA: ┬record, ┬ StepB: ┬visualByRecord.\n         *   !brushed┘    ├hasBrushExist ┤                            └nothing,┘        ├visualByRecord.\n         *                └!hasBrushExist┘                                              └nothing.\n         * ( !brushed  && ┬hasBrushExist ┬ && linkOthers  ) => StepA:  nothing,  StepB: ┬visualByRecord.\n         *                └!hasBrushExist┘                                              └nothing.\n         * ( brushed ┬ &&                     !linkOthers ) => StepA:  nothing,  StepB: ┬visualByCheck.\n         *   !brushed┘                                                                  └nothing.\n         * ( !brushed  &&                     !linkOthers ) => StepA:  nothing,  StepB:  nothing.\n         */\n\n        // Step A\n        ecModel.eachSeries(function (seriesModel, seriesIndex) {\n            var rangeInfoList = rangeInfoBySeries[seriesIndex] = [];\n\n            seriesModel.subType === 'parallel'\n                ? stepAParallel(seriesModel, seriesIndex, rangeInfoList)\n                : stepAOthers(seriesModel, seriesIndex, rangeInfoList);\n        });\n\n        function stepAParallel(seriesModel, seriesIndex) {\n            var coordSys = seriesModel.coordinateSystem;\n            hasBrushExists |= coordSys.hasAxisBrushed();\n\n            linkOthers(seriesIndex) && coordSys.eachActiveState(\n                seriesModel.getData(),\n                function (activeState, dataIndex) {\n                    activeState === 'active' && (selectedDataIndexForLink[dataIndex] = 1);\n                }\n            );\n        }\n\n        function stepAOthers(seriesModel, seriesIndex, rangeInfoList) {\n            var selectorsByBrushType = getSelectorsByBrushType(seriesModel);\n            if (!selectorsByBrushType || brushModelNotControll(brushModel, seriesIndex)) {\n                return;\n            }\n\n            each$1(areas, function (area) {\n                selectorsByBrushType[area.brushType]\n                    && brushModel.brushTargetManager.controlSeries(area, seriesModel, ecModel)\n                    && rangeInfoList.push(area);\n                hasBrushExists |= brushed(rangeInfoList);\n            });\n\n            if (linkOthers(seriesIndex) && brushed(rangeInfoList)) {\n                var data = seriesModel.getData();\n                data.each(function (dataIndex) {\n                    if (checkInRange(selectorsByBrushType, rangeInfoList, data, dataIndex)) {\n                        selectedDataIndexForLink[dataIndex] = 1;\n                    }\n                });\n            }\n        }\n\n        // Step B\n        ecModel.eachSeries(function (seriesModel, seriesIndex) {\n            var seriesBrushSelected = {\n                seriesId: seriesModel.id,\n                seriesIndex: seriesIndex,\n                seriesName: seriesModel.name,\n                dataIndex: []\n            };\n            // Every series exists in event params, convenient\n            // for user to find series by seriesIndex.\n            thisBrushSelected.selected.push(seriesBrushSelected);\n\n            var selectorsByBrushType = getSelectorsByBrushType(seriesModel);\n            var rangeInfoList = rangeInfoBySeries[seriesIndex];\n\n            var data = seriesModel.getData();\n            var getValueState = linkOthers(seriesIndex)\n                ? function (dataIndex) {\n                    return selectedDataIndexForLink[dataIndex]\n                        ? (seriesBrushSelected.dataIndex.push(data.getRawIndex(dataIndex)), 'inBrush')\n                        : 'outOfBrush';\n                }\n                : function (dataIndex) {\n                    return checkInRange(selectorsByBrushType, rangeInfoList, data, dataIndex)\n                        ? (seriesBrushSelected.dataIndex.push(data.getRawIndex(dataIndex)), 'inBrush')\n                        : 'outOfBrush';\n                };\n\n            // If no supported brush or no brush, all visuals are in original state.\n            (linkOthers(seriesIndex) ? hasBrushExists : brushed(rangeInfoList))\n                && applyVisual(\n                    STATE_LIST, visualMappings, data, getValueState\n                );\n        });\n\n    });\n\n    dispatchAction(api, throttleType, throttleDelay, brushSelected, payload);\n});\n\nfunction dispatchAction(api, throttleType, throttleDelay, brushSelected, payload) {\n    // This event will not be triggered when `setOpion`, otherwise dead lock may\n    // triggered when do `setOption` in event listener, which we do not find\n    // satisfactory way to solve yet. Some considered resolutions:\n    // (a) Diff with prevoius selected data ant only trigger event when changed.\n    // But store previous data and diff precisely (i.e., not only by dataIndex, but\n    // also detect value changes in selected data) might bring complexity or fragility.\n    // (b) Use spectial param like `silent` to suppress event triggering.\n    // But such kind of volatile param may be weird in `setOption`.\n    if (!payload) {\n        return;\n    }\n\n    var zr = api.getZr();\n    if (zr[DISPATCH_FLAG]) {\n        return;\n    }\n\n    if (!zr[DISPATCH_METHOD]) {\n        zr[DISPATCH_METHOD] = doDispatch;\n    }\n\n    var fn = createOrUpdate(zr, DISPATCH_METHOD, throttleDelay, throttleType);\n\n    fn(api, brushSelected);\n}\n\nfunction doDispatch(api, brushSelected) {\n    if (!api.isDisposed()) {\n        var zr = api.getZr();\n        zr[DISPATCH_FLAG] = true;\n        api.dispatchAction({\n            type: 'brushSelect',\n            batch: brushSelected\n        });\n        zr[DISPATCH_FLAG] = false;\n    }\n}\n\nfunction checkInRange(selectorsByBrushType, rangeInfoList, data, dataIndex) {\n    for (var i = 0, len = rangeInfoList.length; i < len; i++) {\n        var area = rangeInfoList[i];\n        if (selectorsByBrushType[area.brushType](\n            dataIndex, data, area.selectors, area\n        )) {\n            return true;\n        }\n    }\n}\n\nfunction getSelectorsByBrushType(seriesModel) {\n    var brushSelector = seriesModel.brushSelector;\n    if (isString(brushSelector)) {\n        var sels = [];\n        each$1(selector, function (selectorsByElementType, brushType) {\n            sels[brushType] = function (dataIndex, data, selectors, area) {\n                var itemLayout = data.getItemLayout(dataIndex);\n                return selectorsByElementType[brushSelector](itemLayout, selectors, area);\n            };\n        });\n        return sels;\n    }\n    else if (isFunction$1(brushSelector)) {\n        var bSelector = {};\n        each$1(selector, function (sel, brushType) {\n            bSelector[brushType] = brushSelector;\n        });\n        return bSelector;\n    }\n    return brushSelector;\n}\n\nfunction brushModelNotControll(brushModel, seriesIndex) {\n    var seriesIndices = brushModel.option.seriesIndex;\n    return seriesIndices != null\n        && seriesIndices !== 'all'\n        && (\n            isArray(seriesIndices)\n            ? indexOf(seriesIndices, seriesIndex) < 0\n            : seriesIndex !== seriesIndices\n        );\n}\n\nfunction bindSelector(area) {\n    var selectors = area.selectors = {};\n    each$1(selector[area.brushType], function (selFn, elType) {\n        // Do not use function binding or curry for performance.\n        selectors[elType] = function (itemLayout) {\n            return selFn(itemLayout, selectors, area);\n        };\n    });\n    return area;\n}\n\nvar boundingRectBuilders = {\n\n    lineX: noop,\n\n    lineY: noop,\n\n    rect: function (area) {\n        return getBoundingRectFromMinMax(area.range);\n    },\n\n    polygon: function (area) {\n        var minMax;\n        var range = area.range;\n\n        for (var i = 0, len = range.length; i < len; i++) {\n            minMax = minMax || [[Infinity, -Infinity], [Infinity, -Infinity]];\n            var rg = range[i];\n            rg[0] < minMax[0][0] && (minMax[0][0] = rg[0]);\n            rg[0] > minMax[0][1] && (minMax[0][1] = rg[0]);\n            rg[1] < minMax[1][0] && (minMax[1][0] = rg[1]);\n            rg[1] > minMax[1][1] && (minMax[1][1] = rg[1]);\n        }\n\n        return minMax && getBoundingRectFromMinMax(minMax);\n    }\n};\n\nfunction getBoundingRectFromMinMax(minMax) {\n    return new BoundingRect(\n        minMax[0][0],\n        minMax[1][0],\n        minMax[0][1] - minMax[0][0],\n        minMax[1][1] - minMax[1][0]\n    );\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar DEFAULT_OUT_OF_BRUSH_COLOR = ['#ddd'];\n\nvar BrushModel = extendComponentModel({\n\n    type: 'brush',\n\n    dependencies: ['geo', 'grid', 'xAxis', 'yAxis', 'parallel', 'series'],\n\n    /**\n     * @protected\n     */\n    defaultOption: {\n        // inBrush: null,\n        // outOfBrush: null,\n        toolbox: null,          // Default value see preprocessor.\n        brushLink: null,        // Series indices array, broadcast using dataIndex.\n                                // or 'all', which means all series. 'none' or null means no series.\n        seriesIndex: 'all',     // seriesIndex array, specify series controlled by this brush component.\n        geoIndex: null,         //\n        xAxisIndex: null,\n        yAxisIndex: null,\n\n        brushType: 'rect',      // Default brushType, see BrushController.\n        brushMode: 'single',    // Default brushMode, 'single' or 'multiple'\n        transformable: true,    // Default transformable.\n        brushStyle: {           // Default brushStyle\n            borderWidth: 1,\n            color: 'rgba(120,140,180,0.3)',\n            borderColor: 'rgba(120,140,180,0.8)'\n        },\n\n        throttleType: 'fixRate', // Throttle in brushSelected event. 'fixRate' or 'debounce'.\n                                 // If null, no throttle. Valid only in the first brush component\n        throttleDelay: 0,        // Unit: ms, 0 means every event will be triggered.\n\n        // FIXME\n        // 试验效果\n        removeOnClick: true,\n\n        z: 10000\n    },\n\n    /**\n     * @readOnly\n     * @type {Array.<Object>}\n     */\n    areas: [],\n\n    /**\n     * Current activated brush type.\n     * If null, brush is inactived.\n     * see module:echarts/component/helper/BrushController\n     * @readOnly\n     * @type {string}\n     */\n    brushType: null,\n\n    /**\n     * Current brush opt.\n     * see module:echarts/component/helper/BrushController\n     * @readOnly\n     * @type {Object}\n     */\n    brushOption: {},\n\n    /**\n     * @readOnly\n     * @type {Array.<Object>}\n     */\n    coordInfoList: [],\n\n    optionUpdated: function (newOption, isInit) {\n        var thisOption = this.option;\n\n        !isInit && replaceVisualOption(\n            thisOption, newOption, ['inBrush', 'outOfBrush']\n        );\n\n        var inBrush = thisOption.inBrush = thisOption.inBrush || {};\n        // Always give default visual, consider setOption at the second time.\n        thisOption.outOfBrush = thisOption.outOfBrush || {color: DEFAULT_OUT_OF_BRUSH_COLOR};\n\n        if (!inBrush.hasOwnProperty('liftZ')) {\n            // Bigger than the highlight z lift, otherwise it will\n            // be effected by the highlight z when brush.\n            inBrush.liftZ = 5;\n        }\n    },\n\n    /**\n     * If ranges is null/undefined, range state remain.\n     *\n     * @param {Array.<Object>} [ranges]\n     */\n    setAreas: function (areas) {\n        if (__DEV__) {\n            assert$1(isArray(areas));\n            each$1(areas, function (area) {\n                assert$1(area.brushType, 'Illegal areas');\n            });\n        }\n\n        // If ranges is null/undefined, range state remain.\n        // This helps user to dispatchAction({type: 'brush'}) with no areas\n        // set but just want to get the current brush select info from a `brush` event.\n        if (!areas) {\n            return;\n        }\n\n        this.areas = map(areas, function (area) {\n            return generateBrushOption(this.option, area);\n        }, this);\n    },\n\n    /**\n     * see module:echarts/component/helper/BrushController\n     * @param {Object} brushOption\n     */\n    setBrushOption: function (brushOption) {\n        this.brushOption = generateBrushOption(this.option, brushOption);\n        this.brushType = this.brushOption.brushType;\n    }\n\n});\n\nfunction generateBrushOption(option, brushOption) {\n    return merge(\n        {\n            brushType: option.brushType,\n            brushMode: option.brushMode,\n            transformable: option.transformable,\n            brushStyle: new Model(option.brushStyle).getItemStyle(),\n            removeOnClick: option.removeOnClick,\n            z: option.z\n        },\n        brushOption,\n        true\n    );\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nextendComponentView({\n\n    type: 'brush',\n\n    init: function (ecModel, api) {\n\n        /**\n         * @readOnly\n         * @type {module:echarts/model/Global}\n         */\n        this.ecModel = ecModel;\n\n        /**\n         * @readOnly\n         * @type {module:echarts/ExtensionAPI}\n         */\n        this.api = api;\n\n        /**\n         * @readOnly\n         * @type {module:echarts/component/brush/BrushModel}\n         */\n        this.model;\n\n        /**\n         * @private\n         * @type {module:echarts/component/helper/BrushController}\n         */\n        (this._brushController = new BrushController(api.getZr()))\n            .on('brush', bind(this._onBrush, this))\n            .mount();\n    },\n\n    /**\n     * @override\n     */\n    render: function (brushModel) {\n        this.model = brushModel;\n        return updateController.apply(this, arguments);\n    },\n\n    /**\n     * @override\n     */\n    updateTransform: updateController,\n\n    /**\n     * @override\n     */\n    updateView: updateController,\n\n    // /**\n    //  * @override\n    //  */\n    // updateLayout: updateController,\n\n    // /**\n    //  * @override\n    //  */\n    // updateVisual: updateController,\n\n    /**\n     * @override\n     */\n    dispose: function () {\n        this._brushController.dispose();\n    },\n\n    /**\n     * @private\n     */\n    _onBrush: function (areas, opt) {\n        var modelId = this.model.id;\n\n        this.model.brushTargetManager.setOutputRanges(areas, this.ecModel);\n\n        // Action is not dispatched on drag end, because the drag end\n        // emits the same params with the last drag move event, and\n        // may have some delay when using touch pad, which makes\n        // animation not smooth (when using debounce).\n        (!opt.isEnd || opt.removeOnClick) && this.api.dispatchAction({\n            type: 'brush',\n            brushId: modelId,\n            areas: clone(areas),\n            $from: modelId\n        });\n    }\n\n});\n\nfunction updateController(brushModel, ecModel, api, payload) {\n    // Do not update controller when drawing.\n    (!payload || payload.$from !== brushModel.id) && this._brushController\n        .setPanels(brushModel.brushTargetManager.makePanelOpts(api))\n        .enableBrush(brushModel.brushOption)\n        .updateCovers(brushModel.areas.slice());\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * payload: {\n *      brushIndex: number, or,\n *      brushId: string, or,\n *      brushName: string,\n *      globalRanges: Array\n * }\n */\nregisterAction(\n        {type: 'brush', event: 'brush' /*, update: 'updateView' */},\n    function (payload, ecModel) {\n        ecModel.eachComponent({mainType: 'brush', query: payload}, function (brushModel) {\n            brushModel.setAreas(payload.areas);\n        });\n    }\n);\n\n/**\n * payload: {\n *      brushComponents: [\n *          {\n *              brushId,\n *              brushIndex,\n *              brushName,\n *              series: [\n *                  {\n *                      seriesId,\n *                      seriesIndex,\n *                      seriesName,\n *                      rawIndices: [21, 34, ...]\n *                  },\n *                  ...\n *              ]\n *          },\n *          ...\n *      ]\n * }\n */\nregisterAction(\n    {type: 'brushSelect', event: 'brushSelected', update: 'none'},\n    function () {}\n);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar brushLang = lang.toolbox.brush;\n\nfunction Brush(model, ecModel, api) {\n    this.model = model;\n    this.ecModel = ecModel;\n    this.api = api;\n\n    /**\n     * @private\n     * @type {string}\n     */\n    this._brushType;\n\n    /**\n     * @private\n     * @type {string}\n     */\n    this._brushMode;\n}\n\nBrush.defaultOption = {\n    show: true,\n    type: ['rect', 'polygon', 'lineX', 'lineY', 'keep', 'clear'],\n    icon: {\n        /* eslint-disable */\n        rect: 'M7.3,34.7 M0.4,10V-0.2h9.8 M89.6,10V-0.2h-9.8 M0.4,60v10.2h9.8 M89.6,60v10.2h-9.8 M12.3,22.4V10.5h13.1 M33.6,10.5h7.8 M49.1,10.5h7.8 M77.5,22.4V10.5h-13 M12.3,31.1v8.2 M77.7,31.1v8.2 M12.3,47.6v11.9h13.1 M33.6,59.5h7.6 M49.1,59.5 h7.7 M77.5,47.6v11.9h-13', // jshint ignore:line\n        polygon: 'M55.2,34.9c1.7,0,3.1,1.4,3.1,3.1s-1.4,3.1-3.1,3.1 s-3.1-1.4-3.1-3.1S53.5,34.9,55.2,34.9z M50.4,51c1.7,0,3.1,1.4,3.1,3.1c0,1.7-1.4,3.1-3.1,3.1c-1.7,0-3.1-1.4-3.1-3.1 C47.3,52.4,48.7,51,50.4,51z M55.6,37.1l1.5-7.8 M60.1,13.5l1.6-8.7l-7.8,4 M59,19l-1,5.3 M24,16.1l6.4,4.9l6.4-3.3 M48.5,11.6 l-5.9,3.1 M19.1,12.8L9.7,5.1l1.1,7.7 M13.4,29.8l1,7.3l6.6,1.6 M11.6,18.4l1,6.1 M32.8,41.9 M26.6,40.4 M27.3,40.2l6.1,1.6 M49.9,52.1l-5.6-7.6l-4.9-1.2', // jshint ignore:line\n        lineX: 'M15.2,30 M19.7,15.6V1.9H29 M34.8,1.9H40.4 M55.3,15.6V1.9H45.9 M19.7,44.4V58.1H29 M34.8,58.1H40.4 M55.3,44.4 V58.1H45.9 M12.5,20.3l-9.4,9.6l9.6,9.8 M3.1,29.9h16.5 M62.5,20.3l9.4,9.6L62.3,39.7 M71.9,29.9H55.4', // jshint ignore:line\n        lineY: 'M38.8,7.7 M52.7,12h13.2v9 M65.9,26.6V32 M52.7,46.3h13.2v-9 M24.9,12H11.8v9 M11.8,26.6V32 M24.9,46.3H11.8v-9 M48.2,5.1l-9.3-9l-9.4,9.2 M38.9-3.9V12 M48.2,53.3l-9.3,9l-9.4-9.2 M38.9,62.3V46.4', // jshint ignore:line\n        keep: 'M4,10.5V1h10.3 M20.7,1h6.1 M33,1h6.1 M55.4,10.5V1H45.2 M4,17.3v6.6 M55.6,17.3v6.6 M4,30.5V40h10.3 M20.7,40 h6.1 M33,40h6.1 M55.4,30.5V40H45.2 M21,18.9h62.9v48.6H21V18.9z', // jshint ignore:line\n        clear: 'M22,14.7l30.9,31 M52.9,14.7L22,45.7 M4.7,16.8V4.2h13.1 M26,4.2h7.8 M41.6,4.2h7.8 M70.3,16.8V4.2H57.2 M4.7,25.9v8.6 M70.3,25.9v8.6 M4.7,43.2v12.6h13.1 M26,55.8h7.8 M41.6,55.8h7.8 M70.3,43.2v12.6H57.2' // jshint ignore:line\n        /* eslint-enable */\n    },\n    // `rect`, `polygon`, `lineX`, `lineY`, `keep`, `clear`\n    title: clone(brushLang.title)\n};\n\nvar proto$7 = Brush.prototype;\n\n// proto.updateLayout = function (featureModel, ecModel, api) {\n/* eslint-disable */\nproto$7.render =\n/* eslint-enable */\nproto$7.updateView = function (featureModel, ecModel, api) {\n    var brushType;\n    var brushMode;\n    var isBrushed;\n\n    ecModel.eachComponent({mainType: 'brush'}, function (brushModel) {\n        brushType = brushModel.brushType;\n        brushMode = brushModel.brushOption.brushMode || 'single';\n        isBrushed |= brushModel.areas.length;\n    });\n    this._brushType = brushType;\n    this._brushMode = brushMode;\n\n    each$1(featureModel.get('type', true), function (type) {\n        featureModel.setIconStatus(\n            type,\n            (\n                type === 'keep'\n                ? brushMode === 'multiple'\n                : type === 'clear'\n                ? isBrushed\n                : type === brushType\n            ) ? 'emphasis' : 'normal'\n        );\n    });\n};\n\nproto$7.getIcons = function () {\n    var model = this.model;\n    var availableIcons = model.get('icon', true);\n    var icons = {};\n    each$1(model.get('type', true), function (type) {\n        if (availableIcons[type]) {\n            icons[type] = availableIcons[type];\n        }\n    });\n    return icons;\n};\n\nproto$7.onclick = function (ecModel, api, type) {\n    var brushType = this._brushType;\n    var brushMode = this._brushMode;\n\n    if (type === 'clear') {\n        // Trigger parallel action firstly\n        api.dispatchAction({\n            type: 'axisAreaSelect',\n            intervals: []\n        });\n\n        api.dispatchAction({\n            type: 'brush',\n            command: 'clear',\n            // Clear all areas of all brush components.\n            areas: []\n        });\n    }\n    else {\n        api.dispatchAction({\n            type: 'takeGlobalCursor',\n            key: 'brush',\n            brushOption: {\n                brushType: type === 'keep'\n                    ? brushType\n                    : (brushType === type ? false : type),\n                brushMode: type === 'keep'\n                    ? (brushMode === 'multiple' ? 'single' : 'multiple')\n                    : brushMode\n            }\n        });\n    }\n};\n\nregister$1('brush', Brush);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Brush component entry\n */\n\nregisterPreprocessor(preprocessor$1);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n// Model\nextendComponentModel({\n\n    type: 'title',\n\n    layoutMode: {type: 'box', ignoreSize: true},\n\n    defaultOption: {\n        // 一级层叠\n        zlevel: 0,\n        // 二级层叠\n        z: 6,\n        show: true,\n\n        text: '',\n        // 超链接跳转\n        // link: null,\n        // 仅支持self | blank\n        target: 'blank',\n        subtext: '',\n\n        // 超链接跳转\n        // sublink: null,\n        // 仅支持self | blank\n        subtarget: 'blank',\n\n        // 'center' ¦ 'left' ¦ 'right'\n        // ¦ {number}（x坐标，单位px）\n        left: 0,\n        // 'top' ¦ 'bottom' ¦ 'center'\n        // ¦ {number}（y坐标，单位px）\n        top: 0,\n\n        // 水平对齐\n        // 'auto' | 'left' | 'right' | 'center'\n        // 默认根据 left 的位置判断是左对齐还是右对齐\n        // textAlign: null\n        //\n        // 垂直对齐\n        // 'auto' | 'top' | 'bottom' | 'middle'\n        // 默认根据 top 位置判断是上对齐还是下对齐\n        // textVerticalAlign: null\n        // textBaseline: null // The same as textVerticalAlign.\n\n        backgroundColor: 'rgba(0,0,0,0)',\n\n        // 标题边框颜色\n        borderColor: '#ccc',\n\n        // 标题边框线宽，单位px，默认为0（无边框）\n        borderWidth: 0,\n\n        // 标题内边距，单位px，默认各方向内边距为5，\n        // 接受数组分别设定上右下左边距，同css\n        padding: 5,\n\n        // 主副标题纵向间隔，单位px，默认为10，\n        itemGap: 10,\n        textStyle: {\n            fontSize: 18,\n            fontWeight: 'bolder',\n            color: '#333'\n        },\n        subtextStyle: {\n            color: '#aaa'\n        }\n    }\n});\n\n// View\nextendComponentView({\n\n    type: 'title',\n\n    render: function (titleModel, ecModel, api) {\n        this.group.removeAll();\n\n        if (!titleModel.get('show')) {\n            return;\n        }\n\n        var group = this.group;\n\n        var textStyleModel = titleModel.getModel('textStyle');\n        var subtextStyleModel = titleModel.getModel('subtextStyle');\n\n        var textAlign = titleModel.get('textAlign');\n        var textVerticalAlign = retrieve2(\n            titleModel.get('textBaseline'), titleModel.get('textVerticalAlign')\n        );\n\n        var textEl = new Text({\n            style: setTextStyle({}, textStyleModel, {\n                text: titleModel.get('text'),\n                textFill: textStyleModel.getTextColor()\n            }, {disableBox: true}),\n            z2: 10\n        });\n\n        var textRect = textEl.getBoundingRect();\n\n        var subText = titleModel.get('subtext');\n        var subTextEl = new Text({\n            style: setTextStyle({}, subtextStyleModel, {\n                text: subText,\n                textFill: subtextStyleModel.getTextColor(),\n                y: textRect.height + titleModel.get('itemGap'),\n                textVerticalAlign: 'top'\n            }, {disableBox: true}),\n            z2: 10\n        });\n\n        var link = titleModel.get('link');\n        var sublink = titleModel.get('sublink');\n        var triggerEvent = titleModel.get('triggerEvent', true);\n\n        textEl.silent = !link && !triggerEvent;\n        subTextEl.silent = !sublink && !triggerEvent;\n\n        if (link) {\n            textEl.on('click', function () {\n                window.open(link, '_' + titleModel.get('target'));\n            });\n        }\n        if (sublink) {\n            subTextEl.on('click', function () {\n                window.open(sublink, '_' + titleModel.get('subtarget'));\n            });\n        }\n\n        textEl.eventData = subTextEl.eventData = triggerEvent\n            ? {\n                componentType: 'title',\n                componentIndex: titleModel.componentIndex\n            }\n            : null;\n\n        group.add(textEl);\n        subText && group.add(subTextEl);\n        // If no subText, but add subTextEl, there will be an empty line.\n\n        var groupRect = group.getBoundingRect();\n        var layoutOption = titleModel.getBoxLayoutParams();\n        layoutOption.width = groupRect.width;\n        layoutOption.height = groupRect.height;\n        var layoutRect = getLayoutRect(\n            layoutOption, {\n                width: api.getWidth(),\n                height: api.getHeight()\n            }, titleModel.get('padding')\n        );\n        // Adjust text align based on position\n        if (!textAlign) {\n            // Align left if title is on the left. center and right is same\n            textAlign = titleModel.get('left') || titleModel.get('right');\n            if (textAlign === 'middle') {\n                textAlign = 'center';\n            }\n            // Adjust layout by text align\n            if (textAlign === 'right') {\n                layoutRect.x += layoutRect.width;\n            }\n            else if (textAlign === 'center') {\n                layoutRect.x += layoutRect.width / 2;\n            }\n        }\n        if (!textVerticalAlign) {\n            textVerticalAlign = titleModel.get('top') || titleModel.get('bottom');\n            if (textVerticalAlign === 'center') {\n                textVerticalAlign = 'middle';\n            }\n            if (textVerticalAlign === 'bottom') {\n                layoutRect.y += layoutRect.height;\n            }\n            else if (textVerticalAlign === 'middle') {\n                layoutRect.y += layoutRect.height / 2;\n            }\n\n            textVerticalAlign = textVerticalAlign || 'top';\n        }\n\n        group.attr('position', [layoutRect.x, layoutRect.y]);\n        var alignStyle = {\n            textAlign: textAlign,\n            textVerticalAlign: textVerticalAlign\n        };\n        textEl.setStyle(alignStyle);\n        subTextEl.setStyle(alignStyle);\n\n        // Render background\n        // Get groupRect again because textAlign has been changed\n        groupRect = group.getBoundingRect();\n        var padding = layoutRect.margin;\n        var style = titleModel.getItemStyle(['color', 'opacity']);\n        style.fill = titleModel.get('backgroundColor');\n        var rect = new Rect({\n            shape: {\n                x: groupRect.x - padding[3],\n                y: groupRect.y - padding[0],\n                width: groupRect.width + padding[1] + padding[3],\n                height: groupRect.height + padding[0] + padding[2],\n                r: titleModel.get('borderRadius')\n            },\n            style: style,\n            subPixelOptimize: true,\n            silent: true\n        });\n\n        group.add(rect);\n    }\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar preprocessor$2 = function (option) {\n    var timelineOpt = option && option.timeline;\n\n    if (!isArray(timelineOpt)) {\n        timelineOpt = timelineOpt ? [timelineOpt] : [];\n    }\n\n    each$1(timelineOpt, function (opt) {\n        if (!opt) {\n            return;\n        }\n\n        compatibleEC2(opt);\n    });\n};\n\nfunction compatibleEC2(opt) {\n    var type = opt.type;\n\n    var ec2Types = {'number': 'value', 'time': 'time'};\n\n    // Compatible with ec2\n    if (ec2Types[type]) {\n        opt.axisType = ec2Types[type];\n        delete opt.type;\n    }\n\n    transferItem(opt);\n\n    if (has$1(opt, 'controlPosition')) {\n        var controlStyle = opt.controlStyle || (opt.controlStyle = {});\n        if (!has$1(controlStyle, 'position')) {\n            controlStyle.position = opt.controlPosition;\n        }\n        if (controlStyle.position === 'none' && !has$1(controlStyle, 'show')) {\n            controlStyle.show = false;\n            delete controlStyle.position;\n        }\n        delete opt.controlPosition;\n    }\n\n    each$1(opt.data || [], function (dataItem) {\n        if (isObject$1(dataItem) && !isArray(dataItem)) {\n            if (!has$1(dataItem, 'value') && has$1(dataItem, 'name')) {\n                // In ec2, using name as value.\n                dataItem.value = dataItem.name;\n            }\n            transferItem(dataItem);\n        }\n    });\n}\n\nfunction transferItem(opt) {\n    var itemStyle = opt.itemStyle || (opt.itemStyle = {});\n\n    var itemStyleEmphasis = itemStyle.emphasis || (itemStyle.emphasis = {});\n\n    // Transfer label out\n    var label = opt.label || (opt.label || {});\n    var labelNormal = label.normal || (label.normal = {});\n    var excludeLabelAttr = {normal: 1, emphasis: 1};\n\n    each$1(label, function (value, name) {\n        if (!excludeLabelAttr[name] && !has$1(labelNormal, name)) {\n            labelNormal[name] = value;\n        }\n    });\n\n    if (itemStyleEmphasis.label && !has$1(label, 'emphasis')) {\n        label.emphasis = itemStyleEmphasis.label;\n        delete itemStyleEmphasis.label;\n    }\n}\n\nfunction has$1(obj, attr) {\n    return obj.hasOwnProperty(attr);\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nComponentModel.registerSubTypeDefaulter('timeline', function () {\n    // Only slider now.\n    return 'slider';\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nregisterAction(\n\n    {type: 'timelineChange', event: 'timelineChanged', update: 'prepareAndUpdate'},\n\n    function (payload, ecModel) {\n\n        var timelineModel = ecModel.getComponent('timeline');\n        if (timelineModel && payload.currentIndex != null) {\n            timelineModel.setCurrentIndex(payload.currentIndex);\n\n            if (!timelineModel.get('loop', true) && timelineModel.isIndexMax()) {\n                timelineModel.setPlayState(false);\n            }\n        }\n\n        // Set normalized currentIndex to payload.\n        ecModel.resetOption('timeline');\n\n        return defaults({\n            currentIndex: timelineModel.option.currentIndex\n        }, payload);\n    }\n);\n\nregisterAction(\n\n    {type: 'timelinePlayChange', event: 'timelinePlayChanged', update: 'update'},\n\n    function (payload, ecModel) {\n        var timelineModel = ecModel.getComponent('timeline');\n        if (timelineModel && payload.playState != null) {\n            timelineModel.setPlayState(payload.playState);\n        }\n    }\n);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar TimelineModel = ComponentModel.extend({\n\n    type: 'timeline',\n\n    layoutMode: 'box',\n\n    /**\n     * @protected\n     */\n    defaultOption: {\n\n        zlevel: 0,                  // 一级层叠\n        z: 4,                       // 二级层叠\n        show: true,\n\n        axisType: 'time',  // 模式是时间类型，支持 value, category\n\n        realtime: true,\n\n        left: '20%',\n        top: null,\n        right: '20%',\n        bottom: 0,\n        width: null,\n        height: 40,\n        padding: 5,\n\n        controlPosition: 'left',           // 'left' 'right' 'top' 'bottom' 'none'\n        autoPlay: false,\n        rewind: false,                     // 反向播放\n        loop: true,\n        playInterval: 2000,                // 播放时间间隔，单位ms\n\n        currentIndex: 0,\n\n        itemStyle: {},\n        label: {\n            color: '#000'\n        },\n\n        data: []\n    },\n\n    /**\n     * @override\n     */\n    init: function (option, parentModel, ecModel) {\n\n        /**\n         * @private\n         * @type {module:echarts/data/List}\n         */\n        this._data;\n\n        /**\n         * @private\n         * @type {Array.<string>}\n         */\n        this._names;\n\n        this.mergeDefaultAndTheme(option, ecModel);\n        this._initData();\n    },\n\n    /**\n     * @override\n     */\n    mergeOption: function (option) {\n        TimelineModel.superApply(this, 'mergeOption', arguments);\n        this._initData();\n    },\n\n    /**\n     * @param {number} [currentIndex]\n     */\n    setCurrentIndex: function (currentIndex) {\n        if (currentIndex == null) {\n            currentIndex = this.option.currentIndex;\n        }\n        var count = this._data.count();\n\n        if (this.option.loop) {\n            currentIndex = (currentIndex % count + count) % count;\n        }\n        else {\n            currentIndex >= count && (currentIndex = count - 1);\n            currentIndex < 0 && (currentIndex = 0);\n        }\n\n        this.option.currentIndex = currentIndex;\n    },\n\n    /**\n     * @return {number} currentIndex\n     */\n    getCurrentIndex: function () {\n        return this.option.currentIndex;\n    },\n\n    /**\n     * @return {boolean}\n     */\n    isIndexMax: function () {\n        return this.getCurrentIndex() >= this._data.count() - 1;\n    },\n\n    /**\n     * @param {boolean} state true: play, false: stop\n     */\n    setPlayState: function (state) {\n        this.option.autoPlay = !!state;\n    },\n\n    /**\n     * @return {boolean} true: play, false: stop\n     */\n    getPlayState: function () {\n        return !!this.option.autoPlay;\n    },\n\n    /**\n     * @private\n     */\n    _initData: function () {\n        var thisOption = this.option;\n        var dataArr = thisOption.data || [];\n        var axisType = thisOption.axisType;\n        var names = this._names = [];\n\n        if (axisType === 'category') {\n            var idxArr = [];\n            each$1(dataArr, function (item, index) {\n                var value = getDataItemValue(item);\n                var newItem;\n\n                if (isObject$1(item)) {\n                    newItem = clone(item);\n                    newItem.value = index;\n                }\n                else {\n                    newItem = index;\n                }\n\n                idxArr.push(newItem);\n\n                if (!isString(value) && (value == null || isNaN(value))) {\n                    value = '';\n                }\n\n                names.push(value + '');\n            });\n            dataArr = idxArr;\n        }\n\n        var dimType = ({category: 'ordinal', time: 'time'})[axisType] || 'number';\n\n        var data = this._data = new List([{name: 'value', type: dimType}], this);\n\n        data.initData(dataArr, names);\n    },\n\n    getData: function () {\n        return this._data;\n    },\n\n    /**\n     * @public\n     * @return {Array.<string>} categoreis\n     */\n    getCategories: function () {\n        if (this.get('axisType') === 'category') {\n            return this._names.slice();\n        }\n    }\n\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar SliderTimelineModel = TimelineModel.extend({\n\n    type: 'timeline.slider',\n\n    /**\n     * @protected\n     */\n    defaultOption: {\n\n        backgroundColor: 'rgba(0,0,0,0)',   // 时间轴背景颜色\n        borderColor: '#ccc',               // 时间轴边框颜色\n        borderWidth: 0,                    // 时间轴边框线宽，单位px，默认为0（无边框）\n\n        orient: 'horizontal',              // 'vertical'\n        inverse: false,\n\n        tooltip: {                          // boolean or Object\n            trigger: 'item'                 // data item may also have tootip attr.\n        },\n\n        symbol: 'emptyCircle',\n        symbolSize: 10,\n\n        lineStyle: {\n            show: true,\n            width: 2,\n            color: '#304654'\n        },\n        label: {                            // 文本标签\n            position: 'auto',           // auto left right top bottom\n                                        // When using number, label position is not\n                                        // restricted by viewRect.\n                                        // positive: right/bottom, negative: left/top\n            show: true,\n            interval: 'auto',\n            rotate: 0,\n            // formatter: null,\n            // 其余属性默认使用全局文本样式，详见TEXTSTYLE\n            color: '#304654'\n        },\n        itemStyle: {\n            color: '#304654',\n            borderWidth: 1\n        },\n\n        checkpointStyle: {\n            symbol: 'circle',\n            symbolSize: 13,\n            color: '#c23531',\n            borderWidth: 5,\n            borderColor: 'rgba(194,53,49, 0.5)',\n            animation: true,\n            animationDuration: 300,\n            animationEasing: 'quinticInOut'\n        },\n\n        controlStyle: {\n            show: true,\n            showPlayBtn: true,\n            showPrevBtn: true,\n            showNextBtn: true,\n            itemSize: 22,\n            itemGap: 12,\n            position: 'left',  // 'left' 'right' 'top' 'bottom'\n            playIcon: 'path://M31.6,53C17.5,53,6,41.5,6,27.4S17.5,1.8,31.6,1.8C45.7,1.8,57.2,13.3,57.2,27.4S45.7,53,31.6,53z M31.6,3.3 C18.4,3.3,7.5,14.1,7.5,27.4c0,13.3,10.8,24.1,24.1,24.1C44.9,51.5,55.7,40.7,55.7,27.4C55.7,14.1,44.9,3.3,31.6,3.3z M24.9,21.3 c0-2.2,1.6-3.1,3.5-2l10.5,6.1c1.899,1.1,1.899,2.9,0,4l-10.5,6.1c-1.9,1.1-3.5,0.2-3.5-2V21.3z', // jshint ignore:line\n            stopIcon: 'path://M30.9,53.2C16.8,53.2,5.3,41.7,5.3,27.6S16.8,2,30.9,2C45,2,56.4,13.5,56.4,27.6S45,53.2,30.9,53.2z M30.9,3.5C17.6,3.5,6.8,14.4,6.8,27.6c0,13.3,10.8,24.1,24.101,24.1C44.2,51.7,55,40.9,55,27.6C54.9,14.4,44.1,3.5,30.9,3.5z M36.9,35.8c0,0.601-0.4,1-0.9,1h-1.3c-0.5,0-0.9-0.399-0.9-1V19.5c0-0.6,0.4-1,0.9-1H36c0.5,0,0.9,0.4,0.9,1V35.8z M27.8,35.8 c0,0.601-0.4,1-0.9,1h-1.3c-0.5,0-0.9-0.399-0.9-1V19.5c0-0.6,0.4-1,0.9-1H27c0.5,0,0.9,0.4,0.9,1L27.8,35.8L27.8,35.8z', // jshint ignore:line\n            nextIcon: 'path://M18.6,50.8l22.5-22.5c0.2-0.2,0.3-0.4,0.3-0.7c0-0.3-0.1-0.5-0.3-0.7L18.7,4.4c-0.1-0.1-0.2-0.3-0.2-0.5 c0-0.4,0.3-0.8,0.8-0.8c0.2,0,0.5,0.1,0.6,0.3l23.5,23.5l0,0c0.2,0.2,0.3,0.4,0.3,0.7c0,0.3-0.1,0.5-0.3,0.7l-0.1,0.1L19.7,52 c-0.1,0.1-0.3,0.2-0.5,0.2c-0.4,0-0.8-0.3-0.8-0.8C18.4,51.2,18.5,51,18.6,50.8z', // jshint ignore:line\n            prevIcon: 'path://M43,52.8L20.4,30.3c-0.2-0.2-0.3-0.4-0.3-0.7c0-0.3,0.1-0.5,0.3-0.7L42.9,6.4c0.1-0.1,0.2-0.3,0.2-0.5 c0-0.4-0.3-0.8-0.8-0.8c-0.2,0-0.5,0.1-0.6,0.3L18.3,28.8l0,0c-0.2,0.2-0.3,0.4-0.3,0.7c0,0.3,0.1,0.5,0.3,0.7l0.1,0.1L41.9,54 c0.1,0.1,0.3,0.2,0.5,0.2c0.4,0,0.8-0.3,0.8-0.8C43.2,53.2,43.1,53,43,52.8z', // jshint ignore:line\n\n            color: '#304654',\n            borderColor: '#304654',\n            borderWidth: 1\n        },\n\n        emphasis: {\n            label: {\n                show: true,\n                // 其余属性默认使用全局文本样式，详见TEXTSTYLE\n                color: '#c23531'\n            },\n\n            itemStyle: {\n                color: '#c23531'\n            },\n\n            controlStyle: {\n                color: '#c23531',\n                borderColor: '#c23531',\n                borderWidth: 2\n            }\n        },\n        data: []\n    }\n\n});\n\nmixin(SliderTimelineModel, dataFormatMixin);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar TimelineView = Component$1.extend({\n    type: 'timeline'\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Extend axis 2d\n * @constructor module:echarts/coord/cartesian/Axis2D\n * @extends {module:echarts/coord/cartesian/Axis}\n * @param {string} dim\n * @param {*} scale\n * @param {Array.<number>} coordExtent\n * @param {string} axisType\n * @param {string} position\n */\nvar TimelineAxis = function (dim, scale, coordExtent, axisType) {\n\n    Axis.call(this, dim, scale, coordExtent);\n\n    /**\n     * Axis type\n     *  - 'category'\n     *  - 'value'\n     *  - 'time'\n     *  - 'log'\n     * @type {string}\n     */\n    this.type = axisType || 'value';\n\n    /**\n     * Axis model\n     * @param {module:echarts/component/TimelineModel}\n     */\n    this.model = null;\n};\n\nTimelineAxis.prototype = {\n\n    constructor: TimelineAxis,\n\n    /**\n     * @override\n     */\n    getLabelModel: function () {\n        return this.model.getModel('label');\n    },\n\n    /**\n     * @override\n     */\n    isHorizontal: function () {\n        return this.model.get('orient') === 'horizontal';\n    }\n\n};\n\ninherits(TimelineAxis, Axis);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar bind$4 = bind;\nvar each$24 = each$1;\n\nvar PI$5 = Math.PI;\n\nTimelineView.extend({\n\n    type: 'timeline.slider',\n\n    init: function (ecModel, api) {\n\n        this.api = api;\n\n        /**\n         * @private\n         * @type {module:echarts/component/timeline/TimelineAxis}\n         */\n        this._axis;\n\n        /**\n         * @private\n         * @type {module:zrender/core/BoundingRect}\n         */\n        this._viewRect;\n\n        /**\n         * @type {number}\n         */\n        this._timer;\n\n        /**\n         * @type {module:zrender/Element}\n         */\n        this._currentPointer;\n\n        /**\n         * @type {module:zrender/container/Group}\n         */\n        this._mainGroup;\n\n        /**\n         * @type {module:zrender/container/Group}\n         */\n        this._labelGroup;\n    },\n\n    /**\n     * @override\n     */\n    render: function (timelineModel, ecModel, api, payload) {\n        this.model = timelineModel;\n        this.api = api;\n        this.ecModel = ecModel;\n\n        this.group.removeAll();\n\n        if (timelineModel.get('show', true)) {\n\n            var layoutInfo = this._layout(timelineModel, api);\n            var mainGroup = this._createGroup('mainGroup');\n            var labelGroup = this._createGroup('labelGroup');\n\n            /**\n             * @private\n             * @type {module:echarts/component/timeline/TimelineAxis}\n             */\n            var axis = this._axis = this._createAxis(layoutInfo, timelineModel);\n\n            timelineModel.formatTooltip = function (dataIndex) {\n                return encodeHTML(axis.scale.getLabel(dataIndex));\n            };\n\n            each$24(\n                ['AxisLine', 'AxisTick', 'Control', 'CurrentPointer'],\n                function (name) {\n                    this['_render' + name](layoutInfo, mainGroup, axis, timelineModel);\n                },\n                this\n            );\n\n            this._renderAxisLabel(layoutInfo, labelGroup, axis, timelineModel);\n            this._position(layoutInfo, timelineModel);\n        }\n\n        this._doPlayStop();\n    },\n\n    /**\n     * @override\n     */\n    remove: function () {\n        this._clearTimer();\n        this.group.removeAll();\n    },\n\n    /**\n     * @override\n     */\n    dispose: function () {\n        this._clearTimer();\n    },\n\n    _layout: function (timelineModel, api) {\n        var labelPosOpt = timelineModel.get('label.position');\n        var orient = timelineModel.get('orient');\n        var viewRect = getViewRect$4(timelineModel, api);\n        // Auto label offset.\n        if (labelPosOpt == null || labelPosOpt === 'auto') {\n            labelPosOpt = orient === 'horizontal'\n                ? ((viewRect.y + viewRect.height / 2) < api.getHeight() / 2 ? '-' : '+')\n                : ((viewRect.x + viewRect.width / 2) < api.getWidth() / 2 ? '+' : '-');\n        }\n        else if (isNaN(labelPosOpt)) {\n            labelPosOpt = ({\n                horizontal: {top: '-', bottom: '+'},\n                vertical: {left: '-', right: '+'}\n            })[orient][labelPosOpt];\n        }\n\n        var labelAlignMap = {\n            horizontal: 'center',\n            vertical: (labelPosOpt >= 0 || labelPosOpt === '+') ? 'left' : 'right'\n        };\n\n        var labelBaselineMap = {\n            horizontal: (labelPosOpt >= 0 || labelPosOpt === '+') ? 'top' : 'bottom',\n            vertical: 'middle'\n        };\n        var rotationMap = {\n            horizontal: 0,\n            vertical: PI$5 / 2\n        };\n\n        // Position\n        var mainLength = orient === 'vertical' ? viewRect.height : viewRect.width;\n\n        var controlModel = timelineModel.getModel('controlStyle');\n        var showControl = controlModel.get('show', true);\n        var controlSize = showControl ? controlModel.get('itemSize') : 0;\n        var controlGap = showControl ? controlModel.get('itemGap') : 0;\n        var sizePlusGap = controlSize + controlGap;\n\n        // Special label rotate.\n        var labelRotation = timelineModel.get('label.rotate') || 0;\n        labelRotation = labelRotation * PI$5 / 180; // To radian.\n\n        var playPosition;\n        var prevBtnPosition;\n        var nextBtnPosition;\n        var axisExtent;\n        var controlPosition = controlModel.get('position', true);\n        var showPlayBtn = showControl && controlModel.get('showPlayBtn', true);\n        var showPrevBtn = showControl && controlModel.get('showPrevBtn', true);\n        var showNextBtn = showControl && controlModel.get('showNextBtn', true);\n        var xLeft = 0;\n        var xRight = mainLength;\n\n        // position[0] means left, position[1] means middle.\n        if (controlPosition === 'left' || controlPosition === 'bottom') {\n            showPlayBtn && (playPosition = [0, 0], xLeft += sizePlusGap);\n            showPrevBtn && (prevBtnPosition = [xLeft, 0], xLeft += sizePlusGap);\n            showNextBtn && (nextBtnPosition = [xRight - controlSize, 0], xRight -= sizePlusGap);\n        }\n        else { // 'top' 'right'\n            showPlayBtn && (playPosition = [xRight - controlSize, 0], xRight -= sizePlusGap);\n            showPrevBtn && (prevBtnPosition = [0, 0], xLeft += sizePlusGap);\n            showNextBtn && (nextBtnPosition = [xRight - controlSize, 0], xRight -= sizePlusGap);\n        }\n        axisExtent = [xLeft, xRight];\n\n        if (timelineModel.get('inverse')) {\n            axisExtent.reverse();\n        }\n\n        return {\n            viewRect: viewRect,\n            mainLength: mainLength,\n            orient: orient,\n\n            rotation: rotationMap[orient],\n            labelRotation: labelRotation,\n            labelPosOpt: labelPosOpt,\n            labelAlign: timelineModel.get('label.align') || labelAlignMap[orient],\n            labelBaseline: timelineModel.get('label.verticalAlign')\n                || timelineModel.get('label.baseline')\n                || labelBaselineMap[orient],\n\n            // Based on mainGroup.\n            playPosition: playPosition,\n            prevBtnPosition: prevBtnPosition,\n            nextBtnPosition: nextBtnPosition,\n            axisExtent: axisExtent,\n\n            controlSize: controlSize,\n            controlGap: controlGap\n        };\n    },\n\n    _position: function (layoutInfo, timelineModel) {\n        // Position is be called finally, because bounding rect is needed for\n        // adapt content to fill viewRect (auto adapt offset).\n\n        // Timeline may be not all in the viewRect when 'offset' is specified\n        // as a number, because it is more appropriate that label aligns at\n        // 'offset' but not the other edge defined by viewRect.\n\n        var mainGroup = this._mainGroup;\n        var labelGroup = this._labelGroup;\n\n        var viewRect = layoutInfo.viewRect;\n        if (layoutInfo.orient === 'vertical') {\n            // transform to horizontal, inverse rotate by left-top point.\n            var m = create$1();\n            var rotateOriginX = viewRect.x;\n            var rotateOriginY = viewRect.y + viewRect.height;\n            translate(m, m, [-rotateOriginX, -rotateOriginY]);\n            rotate(m, m, -PI$5 / 2);\n            translate(m, m, [rotateOriginX, rotateOriginY]);\n            viewRect = viewRect.clone();\n            viewRect.applyTransform(m);\n        }\n\n        var viewBound = getBound(viewRect);\n        var mainBound = getBound(mainGroup.getBoundingRect());\n        var labelBound = getBound(labelGroup.getBoundingRect());\n\n        var mainPosition = mainGroup.position;\n        var labelsPosition = labelGroup.position;\n\n        labelsPosition[0] = mainPosition[0] = viewBound[0][0];\n\n        var labelPosOpt = layoutInfo.labelPosOpt;\n\n        if (isNaN(labelPosOpt)) { // '+' or '-'\n            var mainBoundIdx = labelPosOpt === '+' ? 0 : 1;\n            toBound(mainPosition, mainBound, viewBound, 1, mainBoundIdx);\n            toBound(labelsPosition, labelBound, viewBound, 1, 1 - mainBoundIdx);\n        }\n        else {\n            var mainBoundIdx = labelPosOpt >= 0 ? 0 : 1;\n            toBound(mainPosition, mainBound, viewBound, 1, mainBoundIdx);\n            labelsPosition[1] = mainPosition[1] + labelPosOpt;\n        }\n\n        mainGroup.attr('position', mainPosition);\n        labelGroup.attr('position', labelsPosition);\n        mainGroup.rotation = labelGroup.rotation = layoutInfo.rotation;\n\n        setOrigin(mainGroup);\n        setOrigin(labelGroup);\n\n        function setOrigin(targetGroup) {\n            var pos = targetGroup.position;\n            targetGroup.origin = [\n                viewBound[0][0] - pos[0],\n                viewBound[1][0] - pos[1]\n            ];\n        }\n\n        function getBound(rect) {\n            // [[xmin, xmax], [ymin, ymax]]\n            return [\n                [rect.x, rect.x + rect.width],\n                [rect.y, rect.y + rect.height]\n            ];\n        }\n\n        function toBound(fromPos, from, to, dimIdx, boundIdx) {\n            fromPos[dimIdx] += to[dimIdx][boundIdx] - from[dimIdx][boundIdx];\n        }\n    },\n\n    _createAxis: function (layoutInfo, timelineModel) {\n        var data = timelineModel.getData();\n        var axisType = timelineModel.get('axisType');\n\n        var scale = createScaleByModel(timelineModel, axisType);\n\n        // Customize scale. The `tickValue` is `dataIndex`.\n        scale.getTicks = function () {\n            return data.mapArray(['value'], function (value) {\n                return value;\n            });\n        };\n\n        var dataExtent = data.getDataExtent('value');\n        scale.setExtent(dataExtent[0], dataExtent[1]);\n        scale.niceTicks();\n\n        var axis = new TimelineAxis('value', scale, layoutInfo.axisExtent, axisType);\n        axis.model = timelineModel;\n\n        return axis;\n    },\n\n    _createGroup: function (name) {\n        var newGroup = this['_' + name] = new Group();\n        this.group.add(newGroup);\n        return newGroup;\n    },\n\n    _renderAxisLine: function (layoutInfo, group, axis, timelineModel) {\n        var axisExtent = axis.getExtent();\n\n        if (!timelineModel.get('lineStyle.show')) {\n            return;\n        }\n\n        group.add(new Line({\n            shape: {\n                x1: axisExtent[0], y1: 0,\n                x2: axisExtent[1], y2: 0\n            },\n            style: extend(\n                {lineCap: 'round'},\n                timelineModel.getModel('lineStyle').getLineStyle()\n            ),\n            silent: true,\n            z2: 1\n        }));\n    },\n\n    /**\n     * @private\n     */\n    _renderAxisTick: function (layoutInfo, group, axis, timelineModel) {\n        var data = timelineModel.getData();\n        // Show all ticks, despite ignoring strategy.\n        var ticks = axis.scale.getTicks();\n\n        // The value is dataIndex, see the costomized scale.\n        each$24(ticks, function (value) {\n            var tickCoord = axis.dataToCoord(value);\n            var itemModel = data.getItemModel(value);\n            var itemStyleModel = itemModel.getModel('itemStyle');\n            var hoverStyleModel = itemModel.getModel('emphasis.itemStyle');\n            var symbolOpt = {\n                position: [tickCoord, 0],\n                onclick: bind$4(this._changeTimeline, this, value)\n            };\n            var el = giveSymbol(itemModel, itemStyleModel, group, symbolOpt);\n            setHoverStyle(el, hoverStyleModel.getItemStyle());\n\n            if (itemModel.get('tooltip')) {\n                el.dataIndex = value;\n                el.dataModel = timelineModel;\n            }\n            else {\n                el.dataIndex = el.dataModel = null;\n            }\n\n        }, this);\n    },\n\n    /**\n     * @private\n     */\n    _renderAxisLabel: function (layoutInfo, group, axis, timelineModel) {\n        var labelModel = axis.getLabelModel();\n\n        if (!labelModel.get('show')) {\n            return;\n        }\n\n        var data = timelineModel.getData();\n        var labels = axis.getViewLabels();\n\n        each$24(labels, function (labelItem) {\n            // The tickValue is dataIndex, see the costomized scale.\n            var dataIndex = labelItem.tickValue;\n\n            var itemModel = data.getItemModel(dataIndex);\n            var normalLabelModel = itemModel.getModel('label');\n            var hoverLabelModel = itemModel.getModel('emphasis.label');\n            var tickCoord = axis.dataToCoord(labelItem.tickValue);\n            var textEl = new Text({\n                position: [tickCoord, 0],\n                rotation: layoutInfo.labelRotation - layoutInfo.rotation,\n                onclick: bind$4(this._changeTimeline, this, dataIndex),\n                silent: false\n            });\n            setTextStyle(textEl.style, normalLabelModel, {\n                text: labelItem.formattedLabel,\n                textAlign: layoutInfo.labelAlign,\n                textVerticalAlign: layoutInfo.labelBaseline\n            });\n\n            group.add(textEl);\n            setHoverStyle(\n                textEl, setTextStyle({}, hoverLabelModel)\n            );\n\n        }, this);\n    },\n\n    /**\n     * @private\n     */\n    _renderControl: function (layoutInfo, group, axis, timelineModel) {\n        var controlSize = layoutInfo.controlSize;\n        var rotation = layoutInfo.rotation;\n\n        var itemStyle = timelineModel.getModel('controlStyle').getItemStyle();\n        var hoverStyle = timelineModel.getModel('emphasis.controlStyle').getItemStyle();\n        var rect = [0, -controlSize / 2, controlSize, controlSize];\n        var playState = timelineModel.getPlayState();\n        var inverse = timelineModel.get('inverse', true);\n\n        makeBtn(\n            layoutInfo.nextBtnPosition,\n            'controlStyle.nextIcon',\n            bind$4(this._changeTimeline, this, inverse ? '-' : '+')\n        );\n        makeBtn(\n            layoutInfo.prevBtnPosition,\n            'controlStyle.prevIcon',\n            bind$4(this._changeTimeline, this, inverse ? '+' : '-')\n        );\n        makeBtn(\n            layoutInfo.playPosition,\n            'controlStyle.' + (playState ? 'stopIcon' : 'playIcon'),\n            bind$4(this._handlePlayClick, this, !playState),\n            true\n        );\n\n        function makeBtn(position, iconPath, onclick, willRotate) {\n            if (!position) {\n                return;\n            }\n            var opt = {\n                position: position,\n                origin: [controlSize / 2, 0],\n                rotation: willRotate ? -rotation : 0,\n                rectHover: true,\n                style: itemStyle,\n                onclick: onclick\n            };\n            var btn = makeIcon(timelineModel, iconPath, rect, opt);\n            group.add(btn);\n            setHoverStyle(btn, hoverStyle);\n        }\n    },\n\n    _renderCurrentPointer: function (layoutInfo, group, axis, timelineModel) {\n        var data = timelineModel.getData();\n        var currentIndex = timelineModel.getCurrentIndex();\n        var pointerModel = data.getItemModel(currentIndex).getModel('checkpointStyle');\n        var me = this;\n\n        var callback = {\n            onCreate: function (pointer) {\n                pointer.draggable = true;\n                pointer.drift = bind$4(me._handlePointerDrag, me);\n                pointer.ondragend = bind$4(me._handlePointerDragend, me);\n                pointerMoveTo(pointer, currentIndex, axis, timelineModel, true);\n            },\n            onUpdate: function (pointer) {\n                pointerMoveTo(pointer, currentIndex, axis, timelineModel);\n            }\n        };\n\n        // Reuse when exists, for animation and drag.\n        this._currentPointer = giveSymbol(\n            pointerModel, pointerModel, this._mainGroup, {}, this._currentPointer, callback\n        );\n    },\n\n    _handlePlayClick: function (nextState) {\n        this._clearTimer();\n        this.api.dispatchAction({\n            type: 'timelinePlayChange',\n            playState: nextState,\n            from: this.uid\n        });\n    },\n\n    _handlePointerDrag: function (dx, dy, e) {\n        this._clearTimer();\n        this._pointerChangeTimeline([e.offsetX, e.offsetY]);\n    },\n\n    _handlePointerDragend: function (e) {\n        this._pointerChangeTimeline([e.offsetX, e.offsetY], true);\n    },\n\n    _pointerChangeTimeline: function (mousePos, trigger) {\n        var toCoord = this._toAxisCoord(mousePos)[0];\n\n        var axis = this._axis;\n        var axisExtent = asc(axis.getExtent().slice());\n\n        toCoord > axisExtent[1] && (toCoord = axisExtent[1]);\n        toCoord < axisExtent[0] && (toCoord = axisExtent[0]);\n\n        this._currentPointer.position[0] = toCoord;\n        this._currentPointer.dirty();\n\n        var targetDataIndex = this._findNearestTick(toCoord);\n        var timelineModel = this.model;\n\n        if (trigger || (\n            targetDataIndex !== timelineModel.getCurrentIndex()\n            && timelineModel.get('realtime')\n        )) {\n            this._changeTimeline(targetDataIndex);\n        }\n    },\n\n    _doPlayStop: function () {\n        this._clearTimer();\n\n        if (this.model.getPlayState()) {\n            this._timer = setTimeout(\n                bind$4(handleFrame, this),\n                this.model.get('playInterval')\n            );\n        }\n\n        function handleFrame() {\n            // Do not cache\n            var timelineModel = this.model;\n            this._changeTimeline(\n                timelineModel.getCurrentIndex()\n                + (timelineModel.get('rewind', true) ? -1 : 1)\n            );\n        }\n    },\n\n    _toAxisCoord: function (vertex) {\n        var trans = this._mainGroup.getLocalTransform();\n        return applyTransform$1(vertex, trans, true);\n    },\n\n    _findNearestTick: function (axisCoord) {\n        var data = this.model.getData();\n        var dist = Infinity;\n        var targetDataIndex;\n        var axis = this._axis;\n\n        data.each(['value'], function (value, dataIndex) {\n            var coord = axis.dataToCoord(value);\n            var d = Math.abs(coord - axisCoord);\n            if (d < dist) {\n                dist = d;\n                targetDataIndex = dataIndex;\n            }\n        });\n\n        return targetDataIndex;\n    },\n\n    _clearTimer: function () {\n        if (this._timer) {\n            clearTimeout(this._timer);\n            this._timer = null;\n        }\n    },\n\n    _changeTimeline: function (nextIndex) {\n        var currentIndex = this.model.getCurrentIndex();\n\n        if (nextIndex === '+') {\n            nextIndex = currentIndex + 1;\n        }\n        else if (nextIndex === '-') {\n            nextIndex = currentIndex - 1;\n        }\n\n        this.api.dispatchAction({\n            type: 'timelineChange',\n            currentIndex: nextIndex,\n            from: this.uid\n        });\n    }\n\n});\n\nfunction getViewRect$4(model, api) {\n    return getLayoutRect(\n        model.getBoxLayoutParams(),\n        {\n            width: api.getWidth(),\n            height: api.getHeight()\n        },\n        model.get('padding')\n    );\n}\n\nfunction makeIcon(timelineModel, objPath, rect, opts) {\n    var icon = makePath(\n        timelineModel.get(objPath).replace(/^path:\\/\\//, ''),\n        clone(opts || {}),\n        new BoundingRect(rect[0], rect[1], rect[2], rect[3]),\n        'center'\n    );\n\n    return icon;\n}\n\n/**\n * Create symbol or update symbol\n * opt: basic position and event handlers\n */\nfunction giveSymbol(hostModel, itemStyleModel, group, opt, symbol, callback) {\n    var color = itemStyleModel.get('color');\n\n    if (!symbol) {\n        var symbolType = hostModel.get('symbol');\n        symbol = createSymbol(symbolType, -1, -1, 2, 2, color);\n        symbol.setStyle('strokeNoScale', true);\n        group.add(symbol);\n        callback && callback.onCreate(symbol);\n    }\n    else {\n        symbol.setColor(color);\n        group.add(symbol); // Group may be new, also need to add.\n        callback && callback.onUpdate(symbol);\n    }\n\n    // Style\n    var itemStyle = itemStyleModel.getItemStyle(['color', 'symbol', 'symbolSize']);\n    symbol.setStyle(itemStyle);\n\n    // Transform and events.\n    opt = merge({\n        rectHover: true,\n        z2: 100\n    }, opt, true);\n\n    var symbolSize = hostModel.get('symbolSize');\n    symbolSize = symbolSize instanceof Array\n        ? symbolSize.slice()\n        : [+symbolSize, +symbolSize];\n    symbolSize[0] /= 2;\n    symbolSize[1] /= 2;\n    opt.scale = symbolSize;\n\n    var symbolOffset = hostModel.get('symbolOffset');\n    if (symbolOffset) {\n        var pos = opt.position = opt.position || [0, 0];\n        pos[0] += parsePercent$1(symbolOffset[0], symbolSize[0]);\n        pos[1] += parsePercent$1(symbolOffset[1], symbolSize[1]);\n    }\n\n    var symbolRotate = hostModel.get('symbolRotate');\n    opt.rotation = (symbolRotate || 0) * Math.PI / 180 || 0;\n\n    symbol.attr(opt);\n\n    // FIXME\n    // (1) When symbol.style.strokeNoScale is true and updateTransform is not performed,\n    // getBoundingRect will return wrong result.\n    // (This is supposed to be resolved in zrender, but it is a little difficult to\n    // leverage performance and auto updateTransform)\n    // (2) All of ancesters of symbol do not scale, so we can just updateTransform symbol.\n    symbol.updateTransform();\n\n    return symbol;\n}\n\nfunction pointerMoveTo(pointer, dataIndex, axis, timelineModel, noAnimation) {\n    if (pointer.dragging) {\n        return;\n    }\n\n    var pointerModel = timelineModel.getModel('checkpointStyle');\n    var toCoord = axis.dataToCoord(timelineModel.getData().get(['value'], dataIndex));\n\n    if (noAnimation || !pointerModel.get('animation', true)) {\n        pointer.attr({position: [toCoord, 0]});\n    }\n    else {\n        pointer.stopAnimation(true);\n        pointer.animateTo(\n            {position: [toCoord, 0]},\n            pointerModel.get('animationDuration', true),\n            pointerModel.get('animationEasing', true)\n        );\n    }\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * DataZoom component entry\n */\n\nregisterPreprocessor(preprocessor$2);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar addCommas$1 = addCommas;\nvar encodeHTML$1 = encodeHTML;\n\nfunction fillLabel(opt) {\n    defaultEmphasis(opt, 'label', ['show']);\n}\nvar MarkerModel = extendComponentModel({\n\n    type: 'marker',\n\n    dependencies: ['series', 'grid', 'polar', 'geo'],\n\n    /**\n     * @overrite\n     */\n    init: function (option, parentModel, ecModel, extraOpt) {\n\n        if (__DEV__) {\n            if (this.type === 'marker') {\n                throw new Error('Marker component is abstract component. Use markLine, markPoint, markArea instead.');\n            }\n        }\n        this.mergeDefaultAndTheme(option, ecModel);\n        this.mergeOption(option, ecModel, extraOpt.createdBySelf, true);\n    },\n\n    /**\n     * @return {boolean}\n     */\n    isAnimationEnabled: function () {\n        if (env$1.node) {\n            return false;\n        }\n\n        var hostSeries = this.__hostSeries;\n        return this.getShallow('animation') && hostSeries && hostSeries.isAnimationEnabled();\n    },\n\n    mergeOption: function (newOpt, ecModel, createdBySelf, isInit) {\n        var MarkerModel = this.constructor;\n        var modelPropName = this.mainType + 'Model';\n        if (!createdBySelf) {\n            ecModel.eachSeries(function (seriesModel) {\n\n                var markerOpt = seriesModel.get(this.mainType, true);\n\n                var markerModel = seriesModel[modelPropName];\n                if (!markerOpt || !markerOpt.data) {\n                    seriesModel[modelPropName] = null;\n                    return;\n                }\n                if (!markerModel) {\n                    if (isInit) {\n                        // Default label emphasis `position` and `show`\n                        fillLabel(markerOpt);\n                    }\n                    each$1(markerOpt.data, function (item) {\n                        // FIXME Overwrite fillLabel method ?\n                        if (item instanceof Array) {\n                            fillLabel(item[0]);\n                            fillLabel(item[1]);\n                        }\n                        else {\n                            fillLabel(item);\n                        }\n                    });\n\n                    markerModel = new MarkerModel(\n                        markerOpt, this, ecModel\n                    );\n\n                    extend(markerModel, {\n                        mainType: this.mainType,\n                        // Use the same series index and name\n                        seriesIndex: seriesModel.seriesIndex,\n                        name: seriesModel.name,\n                        createdBySelf: true\n                    });\n\n                    markerModel.__hostSeries = seriesModel;\n                }\n                else {\n                    markerModel.mergeOption(markerOpt, ecModel, true);\n                }\n                seriesModel[modelPropName] = markerModel;\n            }, this);\n        }\n    },\n\n    formatTooltip: function (dataIndex) {\n        var data = this.getData();\n        var value = this.getRawValue(dataIndex);\n        var formattedValue = isArray(value)\n            ? map(value, addCommas$1).join(', ') : addCommas$1(value);\n        var name = data.getName(dataIndex);\n        var html = encodeHTML$1(this.name);\n        if (value != null || name) {\n            html += '<br />';\n        }\n        if (name) {\n            html += encodeHTML$1(name);\n            if (value != null) {\n                html += ' : ';\n            }\n        }\n        if (value != null) {\n            html += encodeHTML$1(formattedValue);\n        }\n        return html;\n    },\n\n    getData: function () {\n        return this._data;\n    },\n\n    setData: function (data) {\n        this._data = data;\n    }\n});\n\nmixin(MarkerModel, dataFormatMixin);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nMarkerModel.extend({\n\n    type: 'markPoint',\n\n    defaultOption: {\n        zlevel: 0,\n        z: 5,\n        symbol: 'pin',\n        symbolSize: 50,\n        //symbolRotate: 0,\n        //symbolOffset: [0, 0]\n        tooltip: {\n            trigger: 'item'\n        },\n        label: {\n            show: true,\n            position: 'inside'\n        },\n        itemStyle: {\n            borderWidth: 2\n        },\n        emphasis: {\n            label: {\n                show: true\n            }\n        }\n    }\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar indexOf$2 = indexOf;\n\nfunction hasXOrY(item) {\n    return !(isNaN(parseFloat(item.x)) && isNaN(parseFloat(item.y)));\n}\n\nfunction hasXAndY(item) {\n    return !isNaN(parseFloat(item.x)) && !isNaN(parseFloat(item.y));\n}\n\n// Make it simple, do not visit all stacked value to count precision.\n// function getPrecision(data, valueAxisDim, dataIndex) {\n//     var precision = -1;\n//     var stackedDim = data.mapDimension(valueAxisDim);\n//     do {\n//         precision = Math.max(\n//             numberUtil.getPrecision(data.get(stackedDim, dataIndex)),\n//             precision\n//         );\n//         var stackedOnSeries = data.getCalculationInfo('stackedOnSeries');\n//         if (stackedOnSeries) {\n//             var byValue = data.get(data.getCalculationInfo('stackedByDimension'), dataIndex);\n//             data = stackedOnSeries.getData();\n//             dataIndex = data.indexOf(data.getCalculationInfo('stackedByDimension'), byValue);\n//             stackedDim = data.getCalculationInfo('stackedDimension');\n//         }\n//         else {\n//             data = null;\n//         }\n//     } while (data);\n\n//     return precision;\n// }\n\nfunction markerTypeCalculatorWithExtent(\n    mlType, data, otherDataDim, targetDataDim, otherCoordIndex, targetCoordIndex\n) {\n    var coordArr = [];\n\n    var stacked = isDimensionStacked(data, targetDataDim /*, otherDataDim*/);\n    var calcDataDim = stacked\n        ? data.getCalculationInfo('stackResultDimension')\n        : targetDataDim;\n\n    var value = numCalculate(data, calcDataDim, mlType);\n\n    var dataIndex = data.indicesOfNearest(calcDataDim, value)[0];\n    coordArr[otherCoordIndex] = data.get(otherDataDim, dataIndex);\n    coordArr[targetCoordIndex] = data.get(targetDataDim, dataIndex);\n\n    // Make it simple, do not visit all stacked value to count precision.\n    var precision = getPrecision(data.get(targetDataDim, dataIndex));\n    precision = Math.min(precision, 20);\n    if (precision >= 0) {\n        coordArr[targetCoordIndex] = +coordArr[targetCoordIndex].toFixed(precision);\n    }\n\n    return coordArr;\n}\n\nvar curry$5 = curry;\n// TODO Specified percent\nvar markerTypeCalculator = {\n    /**\n     * @method\n     * @param {module:echarts/data/List} data\n     * @param {string} baseAxisDim\n     * @param {string} valueAxisDim\n     */\n    min: curry$5(markerTypeCalculatorWithExtent, 'min'),\n    /**\n     * @method\n     * @param {module:echarts/data/List} data\n     * @param {string} baseAxisDim\n     * @param {string} valueAxisDim\n     */\n    max: curry$5(markerTypeCalculatorWithExtent, 'max'),\n\n    /**\n     * @method\n     * @param {module:echarts/data/List} data\n     * @param {string} baseAxisDim\n     * @param {string} valueAxisDim\n     */\n    average: curry$5(markerTypeCalculatorWithExtent, 'average')\n};\n\n/**\n * Transform markPoint data item to format used in List by do the following\n * 1. Calculate statistic like `max`, `min`, `average`\n * 2. Convert `item.xAxis`, `item.yAxis` to `item.coord` array\n * @param  {module:echarts/model/Series} seriesModel\n * @param  {module:echarts/coord/*} [coordSys]\n * @param  {Object} item\n * @return {Object}\n */\nfunction dataTransform(seriesModel, item) {\n    var data = seriesModel.getData();\n    var coordSys = seriesModel.coordinateSystem;\n\n    // 1. If not specify the position with pixel directly\n    // 2. If `coord` is not a data array. Which uses `xAxis`,\n    // `yAxis` to specify the coord on each dimension\n\n    // parseFloat first because item.x and item.y can be percent string like '20%'\n    if (item && !hasXAndY(item) && !isArray(item.coord) && coordSys) {\n        var dims = coordSys.dimensions;\n        var axisInfo = getAxisInfo$1(item, data, coordSys, seriesModel);\n\n        // Clone the option\n        // Transform the properties xAxis, yAxis, radiusAxis, angleAxis, geoCoord to value\n        item = clone(item);\n\n        if (item.type\n            && markerTypeCalculator[item.type]\n            && axisInfo.baseAxis && axisInfo.valueAxis\n        ) {\n            var otherCoordIndex = indexOf$2(dims, axisInfo.baseAxis.dim);\n            var targetCoordIndex = indexOf$2(dims, axisInfo.valueAxis.dim);\n\n            item.coord = markerTypeCalculator[item.type](\n                data, axisInfo.baseDataDim, axisInfo.valueDataDim,\n                otherCoordIndex, targetCoordIndex\n            );\n            // Force to use the value of calculated value.\n            item.value = item.coord[targetCoordIndex];\n        }\n        else {\n            // FIXME Only has one of xAxis and yAxis.\n            var coord = [\n                item.xAxis != null ? item.xAxis : item.radiusAxis,\n                item.yAxis != null ? item.yAxis : item.angleAxis\n            ];\n            // Each coord support max, min, average\n            for (var i = 0; i < 2; i++) {\n                if (markerTypeCalculator[coord[i]]) {\n                    coord[i] = numCalculate(data, data.mapDimension(dims[i]), coord[i]);\n                }\n            }\n            item.coord = coord;\n        }\n    }\n    return item;\n}\n\nfunction getAxisInfo$1(item, data, coordSys, seriesModel) {\n    var ret = {};\n\n    if (item.valueIndex != null || item.valueDim != null) {\n        ret.valueDataDim = item.valueIndex != null\n            ? data.getDimension(item.valueIndex) : item.valueDim;\n        ret.valueAxis = coordSys.getAxis(dataDimToCoordDim(seriesModel, ret.valueDataDim));\n        ret.baseAxis = coordSys.getOtherAxis(ret.valueAxis);\n        ret.baseDataDim = data.mapDimension(ret.baseAxis.dim);\n    }\n    else {\n        ret.baseAxis = seriesModel.getBaseAxis();\n        ret.valueAxis = coordSys.getOtherAxis(ret.baseAxis);\n        ret.baseDataDim = data.mapDimension(ret.baseAxis.dim);\n        ret.valueDataDim = data.mapDimension(ret.valueAxis.dim);\n    }\n\n    return ret;\n}\n\nfunction dataDimToCoordDim(seriesModel, dataDim) {\n    var data = seriesModel.getData();\n    var dimensions = data.dimensions;\n    dataDim = data.getDimension(dataDim);\n    for (var i = 0; i < dimensions.length; i++) {\n        var dimItem = data.getDimensionInfo(dimensions[i]);\n        if (dimItem.name === dataDim) {\n            return dimItem.coordDim;\n        }\n    }\n}\n\n/**\n * Filter data which is out of coordinateSystem range\n * [dataFilter description]\n * @param  {module:echarts/coord/*} [coordSys]\n * @param  {Object} item\n * @return {boolean}\n */\nfunction dataFilter$1(coordSys, item) {\n    // Alwalys return true if there is no coordSys\n    return (coordSys && coordSys.containData && item.coord && !hasXOrY(item))\n        ? coordSys.containData(item.coord) : true;\n}\n\nfunction dimValueGetter(item, dimName, dataIndex, dimIndex) {\n    // x, y, radius, angle\n    if (dimIndex < 2) {\n        return item.coord && item.coord[dimIndex];\n    }\n    return item.value;\n}\n\nfunction numCalculate(data, valueDataDim, type) {\n    if (type === 'average') {\n        var sum = 0;\n        var count = 0;\n        data.each(valueDataDim, function (val, idx) {\n            if (!isNaN(val)) {\n                sum += val;\n                count++;\n            }\n        });\n        return sum / count;\n    }\n    else if (type === 'median') {\n        return data.getMedian(valueDataDim);\n    }\n    else {\n        // max & min\n        return data.getDataExtent(valueDataDim, true)[type === 'max' ? 1 : 0];\n    }\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar MarkerView = extendComponentView({\n\n    type: 'marker',\n\n    init: function () {\n        /**\n         * Markline grouped by series\n         * @private\n         * @type {module:zrender/core/util.HashMap}\n         */\n        this.markerGroupMap = createHashMap();\n    },\n\n    render: function (markerModel, ecModel, api) {\n        var markerGroupMap = this.markerGroupMap;\n        markerGroupMap.each(function (item) {\n            item.__keep = false;\n        });\n\n        var markerModelKey = this.type + 'Model';\n        ecModel.eachSeries(function (seriesModel) {\n            var markerModel = seriesModel[markerModelKey];\n            markerModel && this.renderSeries(seriesModel, markerModel, ecModel, api);\n        }, this);\n\n        markerGroupMap.each(function (item) {\n            !item.__keep && this.group.remove(item.group);\n        }, this);\n    },\n\n    renderSeries: function () {}\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nfunction updateMarkerLayout(mpData, seriesModel, api) {\n    var coordSys = seriesModel.coordinateSystem;\n    mpData.each(function (idx) {\n        var itemModel = mpData.getItemModel(idx);\n        var point;\n        var xPx = parsePercent$1(itemModel.get('x'), api.getWidth());\n        var yPx = parsePercent$1(itemModel.get('y'), api.getHeight());\n        if (!isNaN(xPx) && !isNaN(yPx)) {\n            point = [xPx, yPx];\n        }\n        // Chart like bar may have there own marker positioning logic\n        else if (seriesModel.getMarkerPosition) {\n            // Use the getMarkerPoisition\n            point = seriesModel.getMarkerPosition(\n                mpData.getValues(mpData.dimensions, idx)\n            );\n        }\n        else if (coordSys) {\n            var x = mpData.get(coordSys.dimensions[0], idx);\n            var y = mpData.get(coordSys.dimensions[1], idx);\n            point = coordSys.dataToPoint([x, y]);\n\n        }\n\n        // Use x, y if has any\n        if (!isNaN(xPx)) {\n            point[0] = xPx;\n        }\n        if (!isNaN(yPx)) {\n            point[1] = yPx;\n        }\n\n        mpData.setItemLayout(idx, point);\n    });\n}\n\nMarkerView.extend({\n\n    type: 'markPoint',\n\n    // updateLayout: function (markPointModel, ecModel, api) {\n    //     ecModel.eachSeries(function (seriesModel) {\n    //         var mpModel = seriesModel.markPointModel;\n    //         if (mpModel) {\n    //             updateMarkerLayout(mpModel.getData(), seriesModel, api);\n    //             this.markerGroupMap.get(seriesModel.id).updateLayout(mpModel);\n    //         }\n    //     }, this);\n    // },\n\n    updateTransform: function (markPointModel, ecModel, api) {\n        ecModel.eachSeries(function (seriesModel) {\n            var mpModel = seriesModel.markPointModel;\n            if (mpModel) {\n                updateMarkerLayout(mpModel.getData(), seriesModel, api);\n                this.markerGroupMap.get(seriesModel.id).updateLayout(mpModel);\n            }\n        }, this);\n    },\n\n    renderSeries: function (seriesModel, mpModel, ecModel, api) {\n        var coordSys = seriesModel.coordinateSystem;\n        var seriesId = seriesModel.id;\n        var seriesData = seriesModel.getData();\n\n        var symbolDrawMap = this.markerGroupMap;\n        var symbolDraw = symbolDrawMap.get(seriesId)\n            || symbolDrawMap.set(seriesId, new SymbolDraw());\n\n        var mpData = createList$1(coordSys, seriesModel, mpModel);\n\n        // FIXME\n        mpModel.setData(mpData);\n\n        updateMarkerLayout(mpModel.getData(), seriesModel, api);\n\n        mpData.each(function (idx) {\n            var itemModel = mpData.getItemModel(idx);\n            var symbol = itemModel.getShallow('symbol');\n            var symbolSize = itemModel.getShallow('symbolSize');\n            var isFnSymbol = isFunction$1(symbol);\n            var isFnSymbolSize = isFunction$1(symbolSize);\n\n            if (isFnSymbol || isFnSymbolSize) {\n                var rawIdx = mpModel.getRawValue(idx);\n                var dataParams = mpModel.getDataParams(idx);\n                if (isFnSymbol) {\n                    symbol = symbol(rawIdx, dataParams);\n                }\n                if (isFnSymbolSize) {\n                    // FIXME 这里不兼容 ECharts 2.x，2.x 貌似参数是整个数据？\n                    symbolSize = symbolSize(rawIdx, dataParams);\n                }\n            }\n\n            mpData.setItemVisual(idx, {\n                symbol: symbol,\n                symbolSize: symbolSize,\n                color: itemModel.get('itemStyle.color')\n                    || seriesData.getVisual('color')\n            });\n        });\n\n        // TODO Text are wrong\n        symbolDraw.updateData(mpData);\n        this.group.add(symbolDraw.group);\n\n        // Set host model for tooltip\n        // FIXME\n        mpData.eachItemGraphicEl(function (el) {\n            el.traverse(function (child) {\n                child.dataModel = mpModel;\n            });\n        });\n\n        symbolDraw.__keep = true;\n\n        symbolDraw.group.silent = mpModel.get('silent') || seriesModel.get('silent');\n    }\n});\n\n/**\n * @inner\n * @param {module:echarts/coord/*} [coordSys]\n * @param {module:echarts/model/Series} seriesModel\n * @param {module:echarts/model/Model} mpModel\n */\nfunction createList$1(coordSys, seriesModel, mpModel) {\n    var coordDimsInfos;\n    if (coordSys) {\n        coordDimsInfos = map(coordSys && coordSys.dimensions, function (coordDim) {\n            var info = seriesModel.getData().getDimensionInfo(\n                seriesModel.getData().mapDimension(coordDim)\n            ) || {};\n            // In map series data don't have lng and lat dimension. Fallback to same with coordSys\n            return defaults({name: coordDim}, info);\n        });\n    }\n    else {\n        coordDimsInfos = [{\n            name: 'value',\n            type: 'float'\n        }];\n    }\n\n    var mpData = new List(coordDimsInfos, mpModel);\n    var dataOpt = map(mpModel.get('data'), curry(\n            dataTransform, seriesModel\n        ));\n    if (coordSys) {\n        dataOpt = filter(\n            dataOpt, curry(dataFilter$1, coordSys)\n        );\n    }\n\n    mpData.initData(dataOpt, null,\n        coordSys ? dimValueGetter : function (item) {\n            return item.value;\n        }\n    );\n\n    return mpData;\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n// HINT Markpoint can't be used too much\nregisterPreprocessor(function (opt) {\n    // Make sure markPoint component is enabled\n    opt.markPoint = opt.markPoint || {};\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nMarkerModel.extend({\n\n    type: 'markLine',\n\n    defaultOption: {\n        zlevel: 0,\n        z: 5,\n\n        symbol: ['circle', 'arrow'],\n        symbolSize: [8, 16],\n\n        //symbolRotate: 0,\n\n        precision: 2,\n        tooltip: {\n            trigger: 'item'\n        },\n        label: {\n            show: true,\n            position: 'end'\n        },\n        lineStyle: {\n            type: 'dashed'\n        },\n        emphasis: {\n            label: {\n                show: true\n            },\n            lineStyle: {\n                width: 3\n            }\n        },\n        animationEasing: 'linear'\n    }\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar markLineTransform = function (seriesModel, coordSys, mlModel, item) {\n    var data = seriesModel.getData();\n    // Special type markLine like 'min', 'max', 'average', 'median'\n    var mlType = item.type;\n\n    if (!isArray(item)\n        && (\n            mlType === 'min' || mlType === 'max' || mlType === 'average' || mlType === 'median'\n            // In case\n            // data: [{\n            //   yAxis: 10\n            // }]\n            || (item.xAxis != null || item.yAxis != null)\n        )\n    ) {\n        var valueAxis;\n        var value;\n\n        if (item.yAxis != null || item.xAxis != null) {\n            valueAxis = coordSys.getAxis(item.yAxis != null ? 'y' : 'x');\n            value = retrieve(item.yAxis, item.xAxis);\n        }\n        else {\n            var axisInfo = getAxisInfo$1(item, data, coordSys, seriesModel);\n            valueAxis = axisInfo.valueAxis;\n            var valueDataDim = getStackedDimension(data, axisInfo.valueDataDim);\n            value = numCalculate(data, valueDataDim, mlType);\n        }\n        var valueIndex = valueAxis.dim === 'x' ? 0 : 1;\n        var baseIndex = 1 - valueIndex;\n\n        var mlFrom = clone(item);\n        var mlTo = {};\n\n        mlFrom.type = null;\n\n        mlFrom.coord = [];\n        mlTo.coord = [];\n        mlFrom.coord[baseIndex] = -Infinity;\n        mlTo.coord[baseIndex] = Infinity;\n\n        var precision = mlModel.get('precision');\n        if (precision >= 0 && typeof value === 'number') {\n            value = +value.toFixed(Math.min(precision, 20));\n        }\n\n        mlFrom.coord[valueIndex] = mlTo.coord[valueIndex] = value;\n\n        item = [mlFrom, mlTo, { // Extra option for tooltip and label\n            type: mlType,\n            valueIndex: item.valueIndex,\n            // Force to use the value of calculated value.\n            value: value\n        }];\n    }\n\n    item = [\n        dataTransform(seriesModel, item[0]),\n        dataTransform(seriesModel, item[1]),\n        extend({}, item[2])\n    ];\n\n    // Avoid line data type is extended by from(to) data type\n    item[2].type = item[2].type || '';\n\n    // Merge from option and to option into line option\n    merge(item[2], item[0]);\n    merge(item[2], item[1]);\n\n    return item;\n};\n\nfunction isInifinity(val) {\n    return !isNaN(val) && !isFinite(val);\n}\n\n// If a markLine has one dim\nfunction ifMarkLineHasOnlyDim(dimIndex, fromCoord, toCoord, coordSys) {\n    var otherDimIndex = 1 - dimIndex;\n    var dimName = coordSys.dimensions[dimIndex];\n    return isInifinity(fromCoord[otherDimIndex]) && isInifinity(toCoord[otherDimIndex])\n        && fromCoord[dimIndex] === toCoord[dimIndex] && coordSys.getAxis(dimName).containData(fromCoord[dimIndex]);\n}\n\nfunction markLineFilter(coordSys, item) {\n    if (coordSys.type === 'cartesian2d') {\n        var fromCoord = item[0].coord;\n        var toCoord = item[1].coord;\n        // In case\n        // {\n        //  markLine: {\n        //    data: [{ yAxis: 2 }]\n        //  }\n        // }\n        if (\n            fromCoord && toCoord\n            && (ifMarkLineHasOnlyDim(1, fromCoord, toCoord, coordSys)\n            || ifMarkLineHasOnlyDim(0, fromCoord, toCoord, coordSys))\n        ) {\n            return true;\n        }\n    }\n    return dataFilter$1(coordSys, item[0])\n        && dataFilter$1(coordSys, item[1]);\n}\n\nfunction updateSingleMarkerEndLayout(\n    data, idx, isFrom, seriesModel, api\n) {\n    var coordSys = seriesModel.coordinateSystem;\n    var itemModel = data.getItemModel(idx);\n\n    var point;\n    var xPx = parsePercent$1(itemModel.get('x'), api.getWidth());\n    var yPx = parsePercent$1(itemModel.get('y'), api.getHeight());\n    if (!isNaN(xPx) && !isNaN(yPx)) {\n        point = [xPx, yPx];\n    }\n    else {\n        // Chart like bar may have there own marker positioning logic\n        if (seriesModel.getMarkerPosition) {\n            // Use the getMarkerPoisition\n            point = seriesModel.getMarkerPosition(\n                data.getValues(data.dimensions, idx)\n            );\n        }\n        else {\n            var dims = coordSys.dimensions;\n            var x = data.get(dims[0], idx);\n            var y = data.get(dims[1], idx);\n            point = coordSys.dataToPoint([x, y]);\n        }\n        // Expand line to the edge of grid if value on one axis is Inifnity\n        // In case\n        //  markLine: {\n        //    data: [{\n        //      yAxis: 2\n        //      // or\n        //      type: 'average'\n        //    }]\n        //  }\n        if (coordSys.type === 'cartesian2d') {\n            var xAxis = coordSys.getAxis('x');\n            var yAxis = coordSys.getAxis('y');\n            var dims = coordSys.dimensions;\n            if (isInifinity(data.get(dims[0], idx))) {\n                point[0] = xAxis.toGlobalCoord(xAxis.getExtent()[isFrom ? 0 : 1]);\n            }\n            else if (isInifinity(data.get(dims[1], idx))) {\n                point[1] = yAxis.toGlobalCoord(yAxis.getExtent()[isFrom ? 0 : 1]);\n            }\n        }\n\n        // Use x, y if has any\n        if (!isNaN(xPx)) {\n            point[0] = xPx;\n        }\n        if (!isNaN(yPx)) {\n            point[1] = yPx;\n        }\n    }\n\n    data.setItemLayout(idx, point);\n}\n\nMarkerView.extend({\n\n    type: 'markLine',\n\n    // updateLayout: function (markLineModel, ecModel, api) {\n    //     ecModel.eachSeries(function (seriesModel) {\n    //         var mlModel = seriesModel.markLineModel;\n    //         if (mlModel) {\n    //             var mlData = mlModel.getData();\n    //             var fromData = mlModel.__from;\n    //             var toData = mlModel.__to;\n    //             // Update visual and layout of from symbol and to symbol\n    //             fromData.each(function (idx) {\n    //                 updateSingleMarkerEndLayout(fromData, idx, true, seriesModel, api);\n    //                 updateSingleMarkerEndLayout(toData, idx, false, seriesModel, api);\n    //             });\n    //             // Update layout of line\n    //             mlData.each(function (idx) {\n    //                 mlData.setItemLayout(idx, [\n    //                     fromData.getItemLayout(idx),\n    //                     toData.getItemLayout(idx)\n    //                 ]);\n    //             });\n\n    //             this.markerGroupMap.get(seriesModel.id).updateLayout();\n\n    //         }\n    //     }, this);\n    // },\n\n    updateTransform: function (markLineModel, ecModel, api) {\n        ecModel.eachSeries(function (seriesModel) {\n            var mlModel = seriesModel.markLineModel;\n            if (mlModel) {\n                var mlData = mlModel.getData();\n                var fromData = mlModel.__from;\n                var toData = mlModel.__to;\n                // Update visual and layout of from symbol and to symbol\n                fromData.each(function (idx) {\n                    updateSingleMarkerEndLayout(fromData, idx, true, seriesModel, api);\n                    updateSingleMarkerEndLayout(toData, idx, false, seriesModel, api);\n                });\n                // Update layout of line\n                mlData.each(function (idx) {\n                    mlData.setItemLayout(idx, [\n                        fromData.getItemLayout(idx),\n                        toData.getItemLayout(idx)\n                    ]);\n                });\n\n                this.markerGroupMap.get(seriesModel.id).updateLayout();\n\n            }\n        }, this);\n    },\n\n    renderSeries: function (seriesModel, mlModel, ecModel, api) {\n        var coordSys = seriesModel.coordinateSystem;\n        var seriesId = seriesModel.id;\n        var seriesData = seriesModel.getData();\n\n        var lineDrawMap = this.markerGroupMap;\n        var lineDraw = lineDrawMap.get(seriesId)\n            || lineDrawMap.set(seriesId, new LineDraw());\n        this.group.add(lineDraw.group);\n\n        var mlData = createList$2(coordSys, seriesModel, mlModel);\n\n        var fromData = mlData.from;\n        var toData = mlData.to;\n        var lineData = mlData.line;\n\n        mlModel.__from = fromData;\n        mlModel.__to = toData;\n        // Line data for tooltip and formatter\n        mlModel.setData(lineData);\n\n        var symbolType = mlModel.get('symbol');\n        var symbolSize = mlModel.get('symbolSize');\n        if (!isArray(symbolType)) {\n            symbolType = [symbolType, symbolType];\n        }\n        if (typeof symbolSize === 'number') {\n            symbolSize = [symbolSize, symbolSize];\n        }\n\n        // Update visual and layout of from symbol and to symbol\n        mlData.from.each(function (idx) {\n            updateDataVisualAndLayout(fromData, idx, true);\n            updateDataVisualAndLayout(toData, idx, false);\n        });\n\n        // Update visual and layout of line\n        lineData.each(function (idx) {\n            var lineColor = lineData.getItemModel(idx).get('lineStyle.color');\n            lineData.setItemVisual(idx, {\n                color: lineColor || fromData.getItemVisual(idx, 'color')\n            });\n            lineData.setItemLayout(idx, [\n                fromData.getItemLayout(idx),\n                toData.getItemLayout(idx)\n            ]);\n\n            lineData.setItemVisual(idx, {\n                'fromSymbolSize': fromData.getItemVisual(idx, 'symbolSize'),\n                'fromSymbol': fromData.getItemVisual(idx, 'symbol'),\n                'toSymbolSize': toData.getItemVisual(idx, 'symbolSize'),\n                'toSymbol': toData.getItemVisual(idx, 'symbol')\n            });\n        });\n\n        lineDraw.updateData(lineData);\n\n        // Set host model for tooltip\n        // FIXME\n        mlData.line.eachItemGraphicEl(function (el, idx) {\n            el.traverse(function (child) {\n                child.dataModel = mlModel;\n            });\n        });\n\n        function updateDataVisualAndLayout(data, idx, isFrom) {\n            var itemModel = data.getItemModel(idx);\n\n            updateSingleMarkerEndLayout(\n                data, idx, isFrom, seriesModel, api\n            );\n\n            data.setItemVisual(idx, {\n                symbolSize: itemModel.get('symbolSize') || symbolSize[isFrom ? 0 : 1],\n                symbol: itemModel.get('symbol', true) || symbolType[isFrom ? 0 : 1],\n                color: itemModel.get('itemStyle.color') || seriesData.getVisual('color')\n            });\n        }\n\n        lineDraw.__keep = true;\n\n        lineDraw.group.silent = mlModel.get('silent') || seriesModel.get('silent');\n    }\n});\n\n/**\n * @inner\n * @param {module:echarts/coord/*} coordSys\n * @param {module:echarts/model/Series} seriesModel\n * @param {module:echarts/model/Model} mpModel\n */\nfunction createList$2(coordSys, seriesModel, mlModel) {\n\n    var coordDimsInfos;\n    if (coordSys) {\n        coordDimsInfos = map(coordSys && coordSys.dimensions, function (coordDim) {\n            var info = seriesModel.getData().getDimensionInfo(\n                seriesModel.getData().mapDimension(coordDim)\n            ) || {};\n            // In map series data don't have lng and lat dimension. Fallback to same with coordSys\n            return defaults({name: coordDim}, info);\n        });\n    }\n    else {\n        coordDimsInfos = [{\n            name: 'value',\n            type: 'float'\n        }];\n    }\n\n    var fromData = new List(coordDimsInfos, mlModel);\n    var toData = new List(coordDimsInfos, mlModel);\n    // No dimensions\n    var lineData = new List([], mlModel);\n\n    var optData = map(mlModel.get('data'), curry(\n        markLineTransform, seriesModel, coordSys, mlModel\n    ));\n    if (coordSys) {\n        optData = filter(\n            optData, curry(markLineFilter, coordSys)\n        );\n    }\n    var dimValueGetter$$1 = coordSys ? dimValueGetter : function (item) {\n        return item.value;\n    };\n    fromData.initData(\n        map(optData, function (item) {\n            return item[0];\n        }),\n        null,\n        dimValueGetter$$1\n    );\n    toData.initData(\n        map(optData, function (item) {\n            return item[1];\n        }),\n        null,\n        dimValueGetter$$1\n    );\n    lineData.initData(\n        map(optData, function (item) {\n            return item[2];\n        })\n    );\n    lineData.hasItemOption = true;\n\n    return {\n        from: fromData,\n        to: toData,\n        line: lineData\n    };\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nregisterPreprocessor(function (opt) {\n    // Make sure markLine component is enabled\n    opt.markLine = opt.markLine || {};\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nMarkerModel.extend({\n\n    type: 'markArea',\n\n    defaultOption: {\n        zlevel: 0,\n        // PENDING\n        z: 1,\n        tooltip: {\n            trigger: 'item'\n        },\n        // markArea should fixed on the coordinate system\n        animation: false,\n        label: {\n            show: true,\n            position: 'top'\n        },\n        itemStyle: {\n            // color and borderColor default to use color from series\n            // color: 'auto'\n            // borderColor: 'auto'\n            borderWidth: 0\n        },\n\n        emphasis: {\n            label: {\n                show: true,\n                position: 'top'\n            }\n        }\n    }\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n// TODO Better on polar\n\nvar markAreaTransform = function (seriesModel, coordSys, maModel, item) {\n    var lt = dataTransform(seriesModel, item[0]);\n    var rb = dataTransform(seriesModel, item[1]);\n    var retrieve$$1 = retrieve;\n\n    // FIXME make sure lt is less than rb\n    var ltCoord = lt.coord;\n    var rbCoord = rb.coord;\n    ltCoord[0] = retrieve$$1(ltCoord[0], -Infinity);\n    ltCoord[1] = retrieve$$1(ltCoord[1], -Infinity);\n\n    rbCoord[0] = retrieve$$1(rbCoord[0], Infinity);\n    rbCoord[1] = retrieve$$1(rbCoord[1], Infinity);\n\n    // Merge option into one\n    var result = mergeAll([{}, lt, rb]);\n\n    result.coord = [\n        lt.coord, rb.coord\n    ];\n    result.x0 = lt.x;\n    result.y0 = lt.y;\n    result.x1 = rb.x;\n    result.y1 = rb.y;\n    return result;\n};\n\nfunction isInifinity$1(val) {\n    return !isNaN(val) && !isFinite(val);\n}\n\n// If a markArea has one dim\nfunction ifMarkLineHasOnlyDim$1(dimIndex, fromCoord, toCoord, coordSys) {\n    var otherDimIndex = 1 - dimIndex;\n    return isInifinity$1(fromCoord[otherDimIndex]) && isInifinity$1(toCoord[otherDimIndex]);\n}\n\nfunction markAreaFilter(coordSys, item) {\n    var fromCoord = item.coord[0];\n    var toCoord = item.coord[1];\n    if (coordSys.type === 'cartesian2d') {\n        // In case\n        // {\n        //  markArea: {\n        //    data: [{ yAxis: 2 }]\n        //  }\n        // }\n        if (\n            fromCoord && toCoord\n            && (ifMarkLineHasOnlyDim$1(1, fromCoord, toCoord, coordSys)\n            || ifMarkLineHasOnlyDim$1(0, fromCoord, toCoord, coordSys))\n        ) {\n            return true;\n        }\n    }\n    return dataFilter$1(coordSys, {\n            coord: fromCoord,\n            x: item.x0,\n            y: item.y0\n        })\n        || dataFilter$1(coordSys, {\n            coord: toCoord,\n            x: item.x1,\n            y: item.y1\n        });\n}\n\n// dims can be ['x0', 'y0'], ['x1', 'y1'], ['x0', 'y1'], ['x1', 'y0']\nfunction getSingleMarkerEndPoint(data, idx, dims, seriesModel, api) {\n    var coordSys = seriesModel.coordinateSystem;\n    var itemModel = data.getItemModel(idx);\n\n    var point;\n    var xPx = parsePercent$1(itemModel.get(dims[0]), api.getWidth());\n    var yPx = parsePercent$1(itemModel.get(dims[1]), api.getHeight());\n    if (!isNaN(xPx) && !isNaN(yPx)) {\n        point = [xPx, yPx];\n    }\n    else {\n        // Chart like bar may have there own marker positioning logic\n        if (seriesModel.getMarkerPosition) {\n            // Use the getMarkerPoisition\n            point = seriesModel.getMarkerPosition(\n                data.getValues(dims, idx)\n            );\n        }\n        else {\n            var x = data.get(dims[0], idx);\n            var y = data.get(dims[1], idx);\n            var pt = [x, y];\n            coordSys.clampData && coordSys.clampData(pt, pt);\n            point = coordSys.dataToPoint(pt, true);\n        }\n        if (coordSys.type === 'cartesian2d') {\n            var xAxis = coordSys.getAxis('x');\n            var yAxis = coordSys.getAxis('y');\n            var x = data.get(dims[0], idx);\n            var y = data.get(dims[1], idx);\n            if (isInifinity$1(x)) {\n                point[0] = xAxis.toGlobalCoord(xAxis.getExtent()[dims[0] === 'x0' ? 0 : 1]);\n            }\n            else if (isInifinity$1(y)) {\n                point[1] = yAxis.toGlobalCoord(yAxis.getExtent()[dims[1] === 'y0' ? 0 : 1]);\n            }\n        }\n\n        // Use x, y if has any\n        if (!isNaN(xPx)) {\n            point[0] = xPx;\n        }\n        if (!isNaN(yPx)) {\n            point[1] = yPx;\n        }\n    }\n\n    return point;\n}\n\nvar dimPermutations = [['x0', 'y0'], ['x1', 'y0'], ['x1', 'y1'], ['x0', 'y1']];\n\nMarkerView.extend({\n\n    type: 'markArea',\n\n    // updateLayout: function (markAreaModel, ecModel, api) {\n    //     ecModel.eachSeries(function (seriesModel) {\n    //         var maModel = seriesModel.markAreaModel;\n    //         if (maModel) {\n    //             var areaData = maModel.getData();\n    //             areaData.each(function (idx) {\n    //                 var points = zrUtil.map(dimPermutations, function (dim) {\n    //                     return getSingleMarkerEndPoint(areaData, idx, dim, seriesModel, api);\n    //                 });\n    //                 // Layout\n    //                 areaData.setItemLayout(idx, points);\n    //                 var el = areaData.getItemGraphicEl(idx);\n    //                 el.setShape('points', points);\n    //             });\n    //         }\n    //     }, this);\n    // },\n\n    updateTransform: function (markAreaModel, ecModel, api) {\n        ecModel.eachSeries(function (seriesModel) {\n            var maModel = seriesModel.markAreaModel;\n            if (maModel) {\n                var areaData = maModel.getData();\n                areaData.each(function (idx) {\n                    var points = map(dimPermutations, function (dim) {\n                        return getSingleMarkerEndPoint(areaData, idx, dim, seriesModel, api);\n                    });\n                    // Layout\n                    areaData.setItemLayout(idx, points);\n                    var el = areaData.getItemGraphicEl(idx);\n                    el.setShape('points', points);\n                });\n            }\n        }, this);\n    },\n\n    renderSeries: function (seriesModel, maModel, ecModel, api) {\n        var coordSys = seriesModel.coordinateSystem;\n        var seriesId = seriesModel.id;\n        var seriesData = seriesModel.getData();\n\n        var areaGroupMap = this.markerGroupMap;\n        var polygonGroup = areaGroupMap.get(seriesId)\n            || areaGroupMap.set(seriesId, {group: new Group()});\n\n        this.group.add(polygonGroup.group);\n        polygonGroup.__keep = true;\n\n        var areaData = createList$3(coordSys, seriesModel, maModel);\n\n        // Line data for tooltip and formatter\n        maModel.setData(areaData);\n\n        // Update visual and layout of line\n        areaData.each(function (idx) {\n            // Layout\n            areaData.setItemLayout(idx, map(dimPermutations, function (dim) {\n                return getSingleMarkerEndPoint(areaData, idx, dim, seriesModel, api);\n            }));\n\n            // Visual\n            areaData.setItemVisual(idx, {\n                color: seriesData.getVisual('color')\n            });\n        });\n\n\n        areaData.diff(polygonGroup.__data)\n            .add(function (idx) {\n                var polygon = new Polygon({\n                    shape: {\n                        points: areaData.getItemLayout(idx)\n                    }\n                });\n                areaData.setItemGraphicEl(idx, polygon);\n                polygonGroup.group.add(polygon);\n            })\n            .update(function (newIdx, oldIdx) {\n                var polygon = polygonGroup.__data.getItemGraphicEl(oldIdx);\n                updateProps(polygon, {\n                    shape: {\n                        points: areaData.getItemLayout(newIdx)\n                    }\n                }, maModel, newIdx);\n                polygonGroup.group.add(polygon);\n                areaData.setItemGraphicEl(newIdx, polygon);\n            })\n            .remove(function (idx) {\n                var polygon = polygonGroup.__data.getItemGraphicEl(idx);\n                polygonGroup.group.remove(polygon);\n            })\n            .execute();\n\n        areaData.eachItemGraphicEl(function (polygon, idx) {\n            var itemModel = areaData.getItemModel(idx);\n            var labelModel = itemModel.getModel('label');\n            var labelHoverModel = itemModel.getModel('emphasis.label');\n            var color = areaData.getItemVisual(idx, 'color');\n            polygon.useStyle(\n                defaults(\n                    itemModel.getModel('itemStyle').getItemStyle(),\n                    {\n                        fill: modifyAlpha(color, 0.4),\n                        stroke: color\n                    }\n                )\n            );\n\n            polygon.hoverStyle = itemModel.getModel('emphasis.itemStyle').getItemStyle();\n\n            setLabelStyle(\n                polygon.style, polygon.hoverStyle, labelModel, labelHoverModel,\n                {\n                    labelFetcher: maModel,\n                    labelDataIndex: idx,\n                    defaultText: areaData.getName(idx) || '',\n                    isRectText: true,\n                    autoColor: color\n                }\n            );\n\n            setHoverStyle(polygon, {});\n\n            polygon.dataModel = maModel;\n        });\n\n        polygonGroup.__data = areaData;\n\n        polygonGroup.group.silent = maModel.get('silent') || seriesModel.get('silent');\n    }\n});\n\n/**\n * @inner\n * @param {module:echarts/coord/*} coordSys\n * @param {module:echarts/model/Series} seriesModel\n * @param {module:echarts/model/Model} mpModel\n */\nfunction createList$3(coordSys, seriesModel, maModel) {\n\n    var coordDimsInfos;\n    var areaData;\n    var dims = ['x0', 'y0', 'x1', 'y1'];\n    if (coordSys) {\n        coordDimsInfos = map(coordSys && coordSys.dimensions, function (coordDim) {\n            var data = seriesModel.getData();\n            var info = data.getDimensionInfo(\n                data.mapDimension(coordDim)\n            ) || {};\n            // In map series data don't have lng and lat dimension. Fallback to same with coordSys\n            return defaults({name: coordDim}, info);\n        });\n        areaData = new List(map(dims, function (dim, idx) {\n            return {\n                name: dim,\n                type: coordDimsInfos[idx % 2].type\n            };\n        }), maModel);\n    }\n    else {\n        coordDimsInfos = [{\n            name: 'value',\n            type: 'float'\n        }];\n        areaData = new List(coordDimsInfos, maModel);\n    }\n\n    var optData = map(maModel.get('data'), curry(\n        markAreaTransform, seriesModel, coordSys, maModel\n    ));\n    if (coordSys) {\n        optData = filter(\n            optData, curry(markAreaFilter, coordSys)\n        );\n    }\n\n    var dimValueGetter$$1 = coordSys ? function (item, dimName, dataIndex, dimIndex) {\n        return item.coord[Math.floor(dimIndex / 2)][dimIndex % 2];\n    } : function (item) {\n        return item.value;\n    };\n    areaData.initData(optData, null, dimValueGetter$$1);\n    areaData.hasItemOption = true;\n    return areaData;\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nregisterPreprocessor(function (opt) {\n    // Make sure markArea component is enabled\n    opt.markArea = opt.markArea || {};\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar LegendModel = extendComponentModel({\n\n    type: 'legend.plain',\n\n    dependencies: ['series'],\n\n    layoutMode: {\n        type: 'box',\n        // legend.width/height are maxWidth/maxHeight actually,\n        // whereas realy width/height is calculated by its content.\n        // (Setting {left: 10, right: 10} does not make sense).\n        // So consider the case:\n        // `setOption({legend: {left: 10});`\n        // then `setOption({legend: {right: 10});`\n        // The previous `left` should be cleared by setting `ignoreSize`.\n        ignoreSize: true\n    },\n\n    init: function (option, parentModel, ecModel) {\n        this.mergeDefaultAndTheme(option, ecModel);\n\n        option.selected = option.selected || {};\n    },\n\n    mergeOption: function (option) {\n        LegendModel.superCall(this, 'mergeOption', option);\n    },\n\n    optionUpdated: function () {\n        this._updateData(this.ecModel);\n\n        var legendData = this._data;\n\n        // If selectedMode is single, try to select one\n        if (legendData[0] && this.get('selectedMode') === 'single') {\n            var hasSelected = false;\n            // If has any selected in option.selected\n            for (var i = 0; i < legendData.length; i++) {\n                var name = legendData[i].get('name');\n                if (this.isSelected(name)) {\n                    // Force to unselect others\n                    this.select(name);\n                    hasSelected = true;\n                    break;\n                }\n            }\n            // Try select the first if selectedMode is single\n            !hasSelected && this.select(legendData[0].get('name'));\n        }\n    },\n\n    _updateData: function (ecModel) {\n        var potentialData = [];\n        var availableNames = [];\n\n        ecModel.eachRawSeries(function (seriesModel) {\n            var seriesName = seriesModel.name;\n            availableNames.push(seriesName);\n            var isPotential;\n\n            if (seriesModel.legendDataProvider) {\n                var data = seriesModel.legendDataProvider();\n                var names = data.mapArray(data.getName);\n\n                if (!ecModel.isSeriesFiltered(seriesModel)) {\n                    availableNames = availableNames.concat(names);\n                }\n\n                if (names.length) {\n                    potentialData = potentialData.concat(names);\n                }\n                else {\n                    isPotential = true;\n                }\n            }\n            else {\n                isPotential = true;\n            }\n\n            if (isPotential && isNameSpecified(seriesModel)) {\n                potentialData.push(seriesModel.name);\n            }\n        });\n\n        /**\n         * @type {Array.<string>}\n         * @private\n         */\n        this._availableNames = availableNames;\n\n        // If legend.data not specified in option, use availableNames as data,\n        // which is convinient for user preparing option.\n        var rawData = this.get('data') || potentialData;\n\n        var legendData = map(rawData, function (dataItem) {\n            // Can be string or number\n            if (typeof dataItem === 'string' || typeof dataItem === 'number') {\n                dataItem = {\n                    name: dataItem\n                };\n            }\n            return new Model(dataItem, this, this.ecModel);\n        }, this);\n\n        /**\n         * @type {Array.<module:echarts/model/Model>}\n         * @private\n         */\n        this._data = legendData;\n    },\n\n    /**\n     * @return {Array.<module:echarts/model/Model>}\n     */\n    getData: function () {\n        return this._data;\n    },\n\n    /**\n     * @param {string} name\n     */\n    select: function (name) {\n        var selected = this.option.selected;\n        var selectedMode = this.get('selectedMode');\n        if (selectedMode === 'single') {\n            var data = this._data;\n            each$1(data, function (dataItem) {\n                selected[dataItem.get('name')] = false;\n            });\n        }\n        selected[name] = true;\n    },\n\n    /**\n     * @param {string} name\n     */\n    unSelect: function (name) {\n        if (this.get('selectedMode') !== 'single') {\n            this.option.selected[name] = false;\n        }\n    },\n\n    /**\n     * @param {string} name\n     */\n    toggleSelected: function (name) {\n        var selected = this.option.selected;\n        // Default is true\n        if (!selected.hasOwnProperty(name)) {\n            selected[name] = true;\n        }\n        this[selected[name] ? 'unSelect' : 'select'](name);\n    },\n\n    /**\n     * @param {string} name\n     */\n    isSelected: function (name) {\n        var selected = this.option.selected;\n        return !(selected.hasOwnProperty(name) && !selected[name])\n            && indexOf(this._availableNames, name) >= 0;\n    },\n\n    defaultOption: {\n        // 一级层叠\n        zlevel: 0,\n        // 二级层叠\n        z: 4,\n        show: true,\n\n        // 布局方式，默认为水平布局，可选为：\n        // 'horizontal' | 'vertical'\n        orient: 'horizontal',\n\n        left: 'center',\n        // right: 'center',\n\n        top: 0,\n        // bottom: null,\n\n        // 水平对齐\n        // 'auto' | 'left' | 'right'\n        // 默认为 'auto', 根据 x 的位置判断是左对齐还是右对齐\n        align: 'auto',\n\n        backgroundColor: 'rgba(0,0,0,0)',\n        // 图例边框颜色\n        borderColor: '#ccc',\n        borderRadius: 0,\n        // 图例边框线宽，单位px，默认为0（无边框）\n        borderWidth: 0,\n        // 图例内边距，单位px，默认各方向内边距为5，\n        // 接受数组分别设定上右下左边距，同css\n        padding: 5,\n        // 各个item之间的间隔，单位px，默认为10，\n        // 横向布局时为水平间隔，纵向布局时为纵向间隔\n        itemGap: 10,\n        // 图例图形宽度\n        itemWidth: 25,\n        // 图例图形高度\n        itemHeight: 14,\n\n        // 图例关闭时候的颜色\n        inactiveColor: '#ccc',\n\n        textStyle: {\n            // 图例文字颜色\n            color: '#333'\n        },\n        // formatter: '',\n        // 选择模式，默认开启图例开关\n        selectedMode: true,\n        // 配置默认选中状态，可配合LEGEND.SELECTED事件做动态数据载入\n        // selected: null,\n        // 图例内容（详见legend.data，数组中每一项代表一个item\n        // data: [],\n\n        // Tooltip 相关配置\n        tooltip: {\n            show: false\n        }\n    }\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nfunction legendSelectActionHandler(methodName, payload, ecModel) {\n    var selectedMap = {};\n    var isToggleSelect = methodName === 'toggleSelected';\n    var isSelected;\n    // Update all legend components\n    ecModel.eachComponent('legend', function (legendModel) {\n        if (isToggleSelect && isSelected != null) {\n            // Force other legend has same selected status\n            // Or the first is toggled to true and other are toggled to false\n            // In the case one legend has some item unSelected in option. And if other legend\n            // doesn't has the item, they will assume it is selected.\n            legendModel[isSelected ? 'select' : 'unSelect'](payload.name);\n        }\n        else {\n            legendModel[methodName](payload.name);\n            isSelected = legendModel.isSelected(payload.name);\n        }\n        var legendData = legendModel.getData();\n        each$1(legendData, function (model) {\n            var name = model.get('name');\n            // Wrap element\n            if (name === '\\n' || name === '') {\n                return;\n            }\n            var isItemSelected = legendModel.isSelected(name);\n            if (selectedMap.hasOwnProperty(name)) {\n                // Unselected if any legend is unselected\n                selectedMap[name] = selectedMap[name] && isItemSelected;\n            }\n            else {\n                selectedMap[name] = isItemSelected;\n            }\n        });\n    });\n    // Return the event explicitly\n    return {\n        name: payload.name,\n        selected: selectedMap\n    };\n}\n/**\n * @event legendToggleSelect\n * @type {Object}\n * @property {string} type 'legendToggleSelect'\n * @property {string} [from]\n * @property {string} name Series name or data item name\n */\nregisterAction(\n    'legendToggleSelect', 'legendselectchanged',\n    curry(legendSelectActionHandler, 'toggleSelected')\n);\n\n/**\n * @event legendSelect\n * @type {Object}\n * @property {string} type 'legendSelect'\n * @property {string} name Series name or data item name\n */\nregisterAction(\n    'legendSelect', 'legendselected',\n    curry(legendSelectActionHandler, 'select')\n);\n\n/**\n * @event legendUnSelect\n * @type {Object}\n * @property {string} type 'legendUnSelect'\n * @property {string} name Series name or data item name\n */\nregisterAction(\n    'legendUnSelect', 'legendunselected',\n    curry(legendSelectActionHandler, 'unSelect')\n);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar curry$6 = curry;\nvar each$25 = each$1;\nvar Group$3 = Group;\n\nvar LegendView = extendComponentView({\n\n    type: 'legend.plain',\n\n    newlineDisabled: false,\n\n    /**\n     * @override\n     */\n    init: function () {\n\n        /**\n         * @private\n         * @type {module:zrender/container/Group}\n         */\n        this.group.add(this._contentGroup = new Group$3());\n\n        /**\n         * @private\n         * @type {module:zrender/Element}\n         */\n        this._backgroundEl;\n\n        /**\n         * If first rendering, `contentGroup.position` is [0, 0], which\n         * does not make sense and may cause unexepcted animation if adopted.\n         * @private\n         * @type {boolean}\n         */\n        this._isFirstRender = true;\n    },\n\n    /**\n     * @protected\n     */\n    getContentGroup: function () {\n        return this._contentGroup;\n    },\n\n    /**\n     * @override\n     */\n    render: function (legendModel, ecModel, api) {\n        var isFirstRender = this._isFirstRender;\n        this._isFirstRender = false;\n\n        this.resetInner();\n\n        if (!legendModel.get('show', true)) {\n            return;\n        }\n\n        var itemAlign = legendModel.get('align');\n        if (!itemAlign || itemAlign === 'auto') {\n            itemAlign = (\n                legendModel.get('left') === 'right'\n                && legendModel.get('orient') === 'vertical'\n            ) ? 'right' : 'left';\n        }\n\n        this.renderInner(itemAlign, legendModel, ecModel, api);\n\n        // Perform layout.\n        var positionInfo = legendModel.getBoxLayoutParams();\n        var viewportSize = {width: api.getWidth(), height: api.getHeight()};\n        var padding = legendModel.get('padding');\n\n        var maxSize = getLayoutRect(positionInfo, viewportSize, padding);\n\n        var mainRect = this.layoutInner(legendModel, itemAlign, maxSize, isFirstRender);\n\n        // Place mainGroup, based on the calculated `mainRect`.\n        var layoutRect = getLayoutRect(\n            defaults({width: mainRect.width, height: mainRect.height}, positionInfo),\n            viewportSize,\n            padding\n        );\n        this.group.attr('position', [layoutRect.x - mainRect.x, layoutRect.y - mainRect.y]);\n\n        // Render background after group is layout.\n        this.group.add(\n            this._backgroundEl = makeBackground(mainRect, legendModel)\n        );\n    },\n\n    /**\n     * @protected\n     */\n    resetInner: function () {\n        this.getContentGroup().removeAll();\n        this._backgroundEl && this.group.remove(this._backgroundEl);\n    },\n\n    /**\n     * @protected\n     */\n    renderInner: function (itemAlign, legendModel, ecModel, api) {\n        var contentGroup = this.getContentGroup();\n        var legendDrawnMap = createHashMap();\n        var selectMode = legendModel.get('selectedMode');\n\n        var excludeSeriesId = [];\n        ecModel.eachRawSeries(function (seriesModel) {\n            !seriesModel.get('legendHoverLink') && excludeSeriesId.push(seriesModel.id);\n        });\n\n        each$25(legendModel.getData(), function (itemModel, dataIndex) {\n            var name = itemModel.get('name');\n\n            // Use empty string or \\n as a newline string\n            if (!this.newlineDisabled && (name === '' || name === '\\n')) {\n                contentGroup.add(new Group$3({\n                    newline: true\n                }));\n                return;\n            }\n\n            // Representitive series.\n            var seriesModel = ecModel.getSeriesByName(name)[0];\n\n            if (legendDrawnMap.get(name)) {\n                // Have been drawed\n                return;\n            }\n\n            // Series legend\n            if (seriesModel) {\n                var data = seriesModel.getData();\n                var color = data.getVisual('color');\n\n                // If color is a callback function\n                if (typeof color === 'function') {\n                    // Use the first data\n                    color = color(seriesModel.getDataParams(0));\n                }\n\n                // Using rect symbol defaultly\n                var legendSymbolType = data.getVisual('legendSymbol') || 'roundRect';\n                var symbolType = data.getVisual('symbol');\n\n                var itemGroup = this._createItem(\n                    name, dataIndex, itemModel, legendModel,\n                    legendSymbolType, symbolType,\n                    itemAlign, color,\n                    selectMode\n                );\n\n                itemGroup.on('click', curry$6(dispatchSelectAction, name, api))\n                    .on('mouseover', curry$6(dispatchHighlightAction, seriesModel.name, null, api, excludeSeriesId))\n                    .on('mouseout', curry$6(dispatchDownplayAction, seriesModel.name, null, api, excludeSeriesId));\n\n                legendDrawnMap.set(name, true);\n            }\n            else {\n                // Data legend of pie, funnel\n                ecModel.eachRawSeries(function (seriesModel) {\n                    // In case multiple series has same data name\n                    if (legendDrawnMap.get(name)) {\n                        return;\n                    }\n\n                    if (seriesModel.legendDataProvider) {\n                        var data = seriesModel.legendDataProvider();\n                        var idx = data.indexOfName(name);\n                        if (idx < 0) {\n                            return;\n                        }\n\n                        var color = data.getItemVisual(idx, 'color');\n\n                        var legendSymbolType = 'roundRect';\n\n                        var itemGroup = this._createItem(\n                            name, dataIndex, itemModel, legendModel,\n                            legendSymbolType, null,\n                            itemAlign, color,\n                            selectMode\n                        );\n\n                        // FIXME: consider different series has items with the same name.\n                        itemGroup.on('click', curry$6(dispatchSelectAction, name, api))\n                            // Should not specify the series name, consider legend controls\n                            // more than one pie series.\n                            .on('mouseover', curry$6(dispatchHighlightAction, null, name, api, excludeSeriesId))\n                            .on('mouseout', curry$6(dispatchDownplayAction, null, name, api, excludeSeriesId));\n\n                        legendDrawnMap.set(name, true);\n                    }\n\n                }, this);\n            }\n\n            if (__DEV__) {\n                if (!legendDrawnMap.get(name)) {\n                    console.warn(\n                        name + ' series not exists. Legend data should be same with series name or data name.'\n                    );\n                }\n            }\n        }, this);\n    },\n\n    _createItem: function (\n        name, dataIndex, itemModel, legendModel,\n        legendSymbolType, symbolType,\n        itemAlign, color, selectMode\n    ) {\n        var itemWidth = legendModel.get('itemWidth');\n        var itemHeight = legendModel.get('itemHeight');\n        var inactiveColor = legendModel.get('inactiveColor');\n        var symbolKeepAspect = legendModel.get('symbolKeepAspect');\n\n        var isSelected = legendModel.isSelected(name);\n        var itemGroup = new Group$3();\n\n        var textStyleModel = itemModel.getModel('textStyle');\n\n        var itemIcon = itemModel.get('icon');\n\n        var tooltipModel = itemModel.getModel('tooltip');\n        var legendGlobalTooltipModel = tooltipModel.parentModel;\n\n        // Use user given icon first\n        legendSymbolType = itemIcon || legendSymbolType;\n        itemGroup.add(createSymbol(\n            legendSymbolType,\n            0,\n            0,\n            itemWidth,\n            itemHeight,\n            isSelected ? color : inactiveColor,\n            // symbolKeepAspect default true for legend\n            symbolKeepAspect == null ? true : symbolKeepAspect\n        ));\n\n        // Compose symbols\n        // PENDING\n        if (!itemIcon && symbolType\n            // At least show one symbol, can't be all none\n            && ((symbolType !== legendSymbolType) || symbolType === 'none')\n        ) {\n            var size = itemHeight * 0.8;\n            if (symbolType === 'none') {\n                symbolType = 'circle';\n            }\n            // Put symbol in the center\n            itemGroup.add(createSymbol(\n                symbolType,\n                (itemWidth - size) / 2,\n                (itemHeight - size) / 2,\n                size,\n                size,\n                isSelected ? color : inactiveColor,\n                // symbolKeepAspect default true for legend\n                symbolKeepAspect == null ? true : symbolKeepAspect\n            ));\n        }\n\n        var textX = itemAlign === 'left' ? itemWidth + 5 : -5;\n        var textAlign = itemAlign;\n\n        var formatter = legendModel.get('formatter');\n        var content = name;\n        if (typeof formatter === 'string' && formatter) {\n            content = formatter.replace('{name}', name != null ? name : '');\n        }\n        else if (typeof formatter === 'function') {\n            content = formatter(name);\n        }\n\n        itemGroup.add(new Text({\n            style: setTextStyle({}, textStyleModel, {\n                text: content,\n                x: textX,\n                y: itemHeight / 2,\n                textFill: isSelected ? textStyleModel.getTextColor() : inactiveColor,\n                textAlign: textAlign,\n                textVerticalAlign: 'middle'\n            })\n        }));\n\n        // Add a invisible rect to increase the area of mouse hover\n        var hitRect = new Rect({\n            shape: itemGroup.getBoundingRect(),\n            invisible: true,\n            tooltip: tooltipModel.get('show') ? extend({\n                content: name,\n                // Defaul formatter\n                formatter: legendGlobalTooltipModel.get('formatter', true) || function () {\n                    return name;\n                },\n                formatterParams: {\n                    componentType: 'legend',\n                    legendIndex: legendModel.componentIndex,\n                    name: name,\n                    $vars: ['name']\n                }\n            }, tooltipModel.option) : null\n        });\n        itemGroup.add(hitRect);\n\n        itemGroup.eachChild(function (child) {\n            child.silent = true;\n        });\n\n        hitRect.silent = !selectMode;\n\n        this.getContentGroup().add(itemGroup);\n\n        setHoverStyle(itemGroup);\n\n        itemGroup.__legendDataIndex = dataIndex;\n\n        return itemGroup;\n    },\n\n    /**\n     * @protected\n     */\n    layoutInner: function (legendModel, itemAlign, maxSize) {\n        var contentGroup = this.getContentGroup();\n\n        // Place items in contentGroup.\n        box(\n            legendModel.get('orient'),\n            contentGroup,\n            legendModel.get('itemGap'),\n            maxSize.width,\n            maxSize.height\n        );\n\n        var contentRect = contentGroup.getBoundingRect();\n        contentGroup.attr('position', [-contentRect.x, -contentRect.y]);\n\n        return this.group.getBoundingRect();\n    },\n\n    /**\n     * @protected\n     */\n    remove: function () {\n        this.getContentGroup().removeAll();\n        this._isFirstRender = true;\n    }\n\n});\n\nfunction dispatchSelectAction(name, api) {\n    api.dispatchAction({\n        type: 'legendToggleSelect',\n        name: name\n    });\n}\n\nfunction dispatchHighlightAction(seriesName, dataName, api, excludeSeriesId) {\n    // If element hover will move to a hoverLayer.\n    var el = api.getZr().storage.getDisplayList()[0];\n    if (!(el && el.useHoverLayer)) {\n        api.dispatchAction({\n            type: 'highlight',\n            seriesName: seriesName,\n            name: dataName,\n            excludeSeriesId: excludeSeriesId\n        });\n    }\n}\n\nfunction dispatchDownplayAction(seriesName, dataName, api, excludeSeriesId) {\n    // If element hover will move to a hoverLayer.\n    var el = api.getZr().storage.getDisplayList()[0];\n    if (!(el && el.useHoverLayer)) {\n        api.dispatchAction({\n            type: 'downplay',\n            seriesName: seriesName,\n            name: dataName,\n            excludeSeriesId: excludeSeriesId\n        });\n    }\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar legendFilter = function (ecModel) {\n\n    var legendModels = ecModel.findComponents({\n        mainType: 'legend'\n    });\n    if (legendModels && legendModels.length) {\n        ecModel.filterSeries(function (series) {\n            // If in any legend component the status is not selected.\n            // Because in legend series is assumed selected when it is not in the legend data.\n            for (var i = 0; i < legendModels.length; i++) {\n                if (!legendModels[i].isSelected(series.name)) {\n                    return false;\n                }\n            }\n            return true;\n        });\n    }\n\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n// Do not contain scrollable legend, for sake of file size.\n\n// Series Filter\nregisterProcessor(legendFilter);\n\nComponentModel.registerSubTypeDefaulter('legend', function () {\n    // Default 'plain' when no type specified.\n    return 'plain';\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar ScrollableLegendModel = LegendModel.extend({\n\n    type: 'legend.scroll',\n\n    /**\n     * @param {number} scrollDataIndex\n     */\n    setScrollDataIndex: function (scrollDataIndex) {\n        this.option.scrollDataIndex = scrollDataIndex;\n    },\n\n    defaultOption: {\n        scrollDataIndex: 0,\n        pageButtonItemGap: 5,\n        pageButtonGap: null,\n        pageButtonPosition: 'end', // 'start' or 'end'\n        pageFormatter: '{current}/{total}', // If null/undefined, do not show page.\n        pageIcons: {\n            horizontal: ['M0,0L12,-10L12,10z', 'M0,0L-12,-10L-12,10z'],\n            vertical: ['M0,0L20,0L10,-20z', 'M0,0L20,0L10,20z']\n        },\n        pageIconColor: '#2f4554',\n        pageIconInactiveColor: '#aaa',\n        pageIconSize: 15, // Can be [10, 3], which represents [width, height]\n        pageTextStyle: {\n            color: '#333'\n        },\n\n        animationDurationUpdate: 800\n    },\n\n    /**\n     * @override\n     */\n    init: function (option, parentModel, ecModel, extraOpt) {\n        var inputPositionParams = getLayoutParams(option);\n\n        ScrollableLegendModel.superCall(this, 'init', option, parentModel, ecModel, extraOpt);\n\n        mergeAndNormalizeLayoutParams$1(this, option, inputPositionParams);\n    },\n\n    /**\n     * @override\n     */\n    mergeOption: function (option, extraOpt) {\n        ScrollableLegendModel.superCall(this, 'mergeOption', option, extraOpt);\n\n        mergeAndNormalizeLayoutParams$1(this, this.option, option);\n    },\n\n    getOrient: function () {\n        return this.get('orient') === 'vertical'\n            ? {index: 1, name: 'vertical'}\n            : {index: 0, name: 'horizontal'};\n    }\n\n});\n\n// Do not `ignoreSize` to enable setting {left: 10, right: 10}.\nfunction mergeAndNormalizeLayoutParams$1(legendModel, target, raw) {\n    var orient = legendModel.getOrient();\n    var ignoreSize = [1, 1];\n    ignoreSize[orient.index] = 0;\n    mergeLayoutParam(target, raw, {\n        type: 'box', ignoreSize: ignoreSize\n    });\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Separate legend and scrollable legend to reduce package size.\n */\n\nvar Group$4 = Group;\n\nvar WH$1 = ['width', 'height'];\nvar XY$1 = ['x', 'y'];\n\nvar ScrollableLegendView = LegendView.extend({\n\n    type: 'legend.scroll',\n\n    newlineDisabled: true,\n\n    init: function () {\n\n        ScrollableLegendView.superCall(this, 'init');\n\n        /**\n         * @private\n         * @type {number} For `scroll`.\n         */\n        this._currentIndex = 0;\n\n        /**\n         * @private\n         * @type {module:zrender/container/Group}\n         */\n        this.group.add(this._containerGroup = new Group$4());\n        this._containerGroup.add(this.getContentGroup());\n\n        /**\n         * @private\n         * @type {module:zrender/container/Group}\n         */\n        this.group.add(this._controllerGroup = new Group$4());\n\n        /**\n         *\n         * @private\n         */\n        this._showController;\n    },\n\n    /**\n     * @override\n     */\n    resetInner: function () {\n        ScrollableLegendView.superCall(this, 'resetInner');\n\n        this._controllerGroup.removeAll();\n        this._containerGroup.removeClipPath();\n        this._containerGroup.__rectSize = null;\n    },\n\n    /**\n     * @override\n     */\n    renderInner: function (itemAlign, legendModel, ecModel, api) {\n        var me = this;\n\n        // Render content items.\n        ScrollableLegendView.superCall(this, 'renderInner', itemAlign, legendModel, ecModel, api);\n\n        var controllerGroup = this._controllerGroup;\n\n        // FIXME: support be 'auto' adapt to size number text length,\n        // e.g., '3/12345' should not overlap with the control arrow button.\n        var pageIconSize = legendModel.get('pageIconSize', true);\n        if (!isArray(pageIconSize)) {\n            pageIconSize = [pageIconSize, pageIconSize];\n        }\n\n        createPageButton('pagePrev', 0);\n\n        var pageTextStyleModel = legendModel.getModel('pageTextStyle');\n        controllerGroup.add(new Text({\n            name: 'pageText',\n            style: {\n                textFill: pageTextStyleModel.getTextColor(),\n                font: pageTextStyleModel.getFont(),\n                textVerticalAlign: 'middle',\n                textAlign: 'center'\n            },\n            silent: true\n        }));\n\n        createPageButton('pageNext', 1);\n\n        function createPageButton(name, iconIdx) {\n            var pageDataIndexName = name + 'DataIndex';\n            var icon = createIcon(\n                legendModel.get('pageIcons', true)[legendModel.getOrient().name][iconIdx],\n                {\n                    // Buttons will be created in each render, so we do not need\n                    // to worry about avoiding using legendModel kept in scope.\n                    onclick: bind(\n                        me._pageGo, me, pageDataIndexName, legendModel, api\n                    )\n                },\n                {\n                    x: -pageIconSize[0] / 2,\n                    y: -pageIconSize[1] / 2,\n                    width: pageIconSize[0],\n                    height: pageIconSize[1]\n                }\n            );\n            icon.name = name;\n            controllerGroup.add(icon);\n        }\n    },\n\n    /**\n     * @override\n     */\n    layoutInner: function (legendModel, itemAlign, maxSize, isFirstRender) {\n        var contentGroup = this.getContentGroup();\n        var containerGroup = this._containerGroup;\n        var controllerGroup = this._controllerGroup;\n\n        var orientIdx = legendModel.getOrient().index;\n        var wh = WH$1[orientIdx];\n        var hw = WH$1[1 - orientIdx];\n        var yx = XY$1[1 - orientIdx];\n\n        // Place items in contentGroup.\n        box(\n            legendModel.get('orient'),\n            contentGroup,\n            legendModel.get('itemGap'),\n            !orientIdx ? null : maxSize.width,\n            orientIdx ? null : maxSize.height\n        );\n\n        box(\n            // Buttons in controller are layout always horizontally.\n            'horizontal',\n            controllerGroup,\n            legendModel.get('pageButtonItemGap', true)\n        );\n\n        var contentRect = contentGroup.getBoundingRect();\n        var controllerRect = controllerGroup.getBoundingRect();\n        var showController = this._showController = contentRect[wh] > maxSize[wh];\n\n        var contentPos = [-contentRect.x, -contentRect.y];\n        // Remain contentPos when scroll animation perfroming.\n        // If first rendering, `contentGroup.position` is [0, 0], which\n        // does not make sense and may cause unexepcted animation if adopted.\n        if (!isFirstRender) {\n            contentPos[orientIdx] = contentGroup.position[orientIdx];\n        }\n\n        // Layout container group based on 0.\n        var containerPos = [0, 0];\n        var controllerPos = [-controllerRect.x, -controllerRect.y];\n        var pageButtonGap = retrieve2(\n            legendModel.get('pageButtonGap', true), legendModel.get('itemGap', true)\n        );\n\n        // Place containerGroup and controllerGroup and contentGroup.\n        if (showController) {\n            var pageButtonPosition = legendModel.get('pageButtonPosition', true);\n            // controller is on the right / bottom.\n            if (pageButtonPosition === 'end') {\n                controllerPos[orientIdx] += maxSize[wh] - controllerRect[wh];\n            }\n            // controller is on the left / top.\n            else {\n                containerPos[orientIdx] += controllerRect[wh] + pageButtonGap;\n            }\n        }\n\n        // Always align controller to content as 'middle'.\n        controllerPos[1 - orientIdx] += contentRect[hw] / 2 - controllerRect[hw] / 2;\n\n        contentGroup.attr('position', contentPos);\n        containerGroup.attr('position', containerPos);\n        controllerGroup.attr('position', controllerPos);\n\n        // Calculate `mainRect` and set `clipPath`.\n        // mainRect should not be calculated by `this.group.getBoundingRect()`\n        // for sake of the overflow.\n        var mainRect = this.group.getBoundingRect();\n        var mainRect = {x: 0, y: 0};\n        // Consider content may be overflow (should be clipped).\n        mainRect[wh] = showController ? maxSize[wh] : contentRect[wh];\n        mainRect[hw] = Math.max(contentRect[hw], controllerRect[hw]);\n        // `containerRect[yx] + containerPos[1 - orientIdx]` is 0.\n        mainRect[yx] = Math.min(0, controllerRect[yx] + controllerPos[1 - orientIdx]);\n\n        containerGroup.__rectSize = maxSize[wh];\n        if (showController) {\n            var clipShape = {x: 0, y: 0};\n            clipShape[wh] = Math.max(maxSize[wh] - controllerRect[wh] - pageButtonGap, 0);\n            clipShape[hw] = mainRect[hw];\n            containerGroup.setClipPath(new Rect({shape: clipShape}));\n            // Consider content may be larger than container, container rect\n            // can not be obtained from `containerGroup.getBoundingRect()`.\n            containerGroup.__rectSize = clipShape[wh];\n        }\n        else {\n            // Do not remove or ignore controller. Keep them set as place holders.\n            controllerGroup.eachChild(function (child) {\n                child.attr({invisible: true, silent: true});\n            });\n        }\n\n        // Content translate animation.\n        var pageInfo = this._getPageInfo(legendModel);\n        pageInfo.pageIndex != null && updateProps(\n            contentGroup,\n            {position: pageInfo.contentPosition},\n            // When switch from \"show controller\" to \"not show controller\", view should be\n            // updated immediately without animation, otherwise causes weird efffect.\n            showController ? legendModel : false\n        );\n\n        this._updatePageInfoView(legendModel, pageInfo);\n\n        return mainRect;\n    },\n\n    _pageGo: function (to, legendModel, api) {\n        var scrollDataIndex = this._getPageInfo(legendModel)[to];\n\n        scrollDataIndex != null && api.dispatchAction({\n            type: 'legendScroll',\n            scrollDataIndex: scrollDataIndex,\n            legendId: legendModel.id\n        });\n    },\n\n    _updatePageInfoView: function (legendModel, pageInfo) {\n        var controllerGroup = this._controllerGroup;\n\n        each$1(['pagePrev', 'pageNext'], function (name) {\n            var canJump = pageInfo[name + 'DataIndex'] != null;\n            var icon = controllerGroup.childOfName(name);\n            if (icon) {\n                icon.setStyle(\n                    'fill',\n                    canJump\n                        ? legendModel.get('pageIconColor', true)\n                        : legendModel.get('pageIconInactiveColor', true)\n                );\n                icon.cursor = canJump ? 'pointer' : 'default';\n            }\n        });\n\n        var pageText = controllerGroup.childOfName('pageText');\n        var pageFormatter = legendModel.get('pageFormatter');\n        var pageIndex = pageInfo.pageIndex;\n        var current = pageIndex != null ? pageIndex + 1 : 0;\n        var total = pageInfo.pageCount;\n\n        pageText && pageFormatter && pageText.setStyle(\n            'text',\n            isString(pageFormatter)\n                ? pageFormatter.replace('{current}', current).replace('{total}', total)\n                : pageFormatter({current: current, total: total})\n        );\n    },\n\n    /**\n     * @param {module:echarts/model/Model} legendModel\n     * @return {Object} {\n     *  contentPosition: Array.<number>, null when data item not found.\n     *  pageIndex: number, null when data item not found.\n     *  pageCount: number, always be a number, can be 0.\n     *  pagePrevDataIndex: number, null when no next page.\n     *  pageNextDataIndex: number, null when no previous page.\n     * }\n     */\n    _getPageInfo: function (legendModel) {\n        var scrollDataIndex = legendModel.get('scrollDataIndex', true);\n        var contentGroup = this.getContentGroup();\n        var containerRectSize = this._containerGroup.__rectSize;\n        var orientIdx = legendModel.getOrient().index;\n        var wh = WH$1[orientIdx];\n        var xy = XY$1[orientIdx];\n\n        var targetItemIndex = this._findTargetItemIndex(scrollDataIndex);\n        var children = contentGroup.children();\n        var targetItem = children[targetItemIndex];\n        var itemCount = children.length;\n        var pCount = !itemCount ? 0 : 1;\n\n        var result = {\n            contentPosition: contentGroup.position.slice(),\n            pageCount: pCount,\n            pageIndex: pCount - 1,\n            pagePrevDataIndex: null,\n            pageNextDataIndex: null\n        };\n\n        if (!targetItem) {\n            return result;\n        }\n\n        var targetItemInfo = getItemInfo(targetItem);\n        result.contentPosition[orientIdx] = -targetItemInfo.s;\n\n        // Strategy:\n        // (1) Always align based on the left/top most item.\n        // (2) It is user-friendly that the last item shown in the\n        // current window is shown at the begining of next window.\n        // Otherwise if half of the last item is cut by the window,\n        // it will have no chance to display entirely.\n        // (3) Consider that item size probably be different, we\n        // have calculate pageIndex by size rather than item index,\n        // and we can not get page index directly by division.\n        // (4) The window is to narrow to contain more than\n        // one item, we should make sure that the page can be fliped.\n\n        for (var i = targetItemIndex + 1,\n            winStartItemInfo = targetItemInfo,\n            winEndItemInfo = targetItemInfo,\n            currItemInfo = null;\n            i <= itemCount;\n            ++i\n        ) {\n            currItemInfo = getItemInfo(children[i]);\n            if (\n                // Half of the last item is out of the window.\n                (!currItemInfo && winEndItemInfo.e > winStartItemInfo.s + containerRectSize)\n                // If the current item does not intersect with the window, the new page\n                // can be started at the current item or the last item.\n                || (currItemInfo && !intersect(currItemInfo, winStartItemInfo.s))\n            ) {\n                if (winEndItemInfo.i > winStartItemInfo.i) {\n                    winStartItemInfo = winEndItemInfo;\n                }\n                else { // e.g., when page size is smaller than item size.\n                    winStartItemInfo = currItemInfo;\n                }\n                if (winStartItemInfo) {\n                    if (result.pageNextDataIndex == null) {\n                        result.pageNextDataIndex = winStartItemInfo.i;\n                    }\n                    ++result.pageCount;\n                }\n            }\n            winEndItemInfo = currItemInfo;\n        }\n\n        for (var i = targetItemIndex - 1,\n            winStartItemInfo = targetItemInfo,\n            winEndItemInfo = targetItemInfo,\n            currItemInfo = null;\n            i >= -1;\n            --i\n        ) {\n            currItemInfo = getItemInfo(children[i]);\n            if (\n                // If the the end item does not intersect with the window started\n                // from the current item, a page can be settled.\n                (!currItemInfo || !intersect(winEndItemInfo, currItemInfo.s))\n                // e.g., when page size is smaller than item size.\n                && winStartItemInfo.i < winEndItemInfo.i\n            ) {\n                winEndItemInfo = winStartItemInfo;\n                if (result.pagePrevDataIndex == null) {\n                    result.pagePrevDataIndex = winStartItemInfo.i;\n                }\n                ++result.pageCount;\n                ++result.pageIndex;\n            }\n            winStartItemInfo = currItemInfo;\n        }\n\n        return result;\n\n        function getItemInfo(el) {\n            if (el) {\n                var itemRect = el.getBoundingRect();\n                var start = itemRect[xy] + el.position[orientIdx];\n                return {\n                    s: start,\n                    e: start + itemRect[wh],\n                    i: el.__legendDataIndex\n                };\n            }\n        }\n\n        function intersect(itemInfo, winStart) {\n            return itemInfo.e >= winStart && itemInfo.s <= winStart + containerRectSize;\n        }\n    },\n\n    _findTargetItemIndex: function (targetDataIndex) {\n        var index;\n        var contentGroup = this.getContentGroup();\n        var defaultIndex;\n\n        if (this._showController) {\n            contentGroup.eachChild(function (child, idx) {\n                var legendDataIdx = child.__legendDataIndex;\n                // FIXME\n                // If the given targetDataIndex (from model) is illegal,\n                // we use defualtIndex. But the index on the legend model and\n                // action payload is still illegal. That case will not be\n                // changed until some scenario requires.\n                if (defaultIndex == null && legendDataIdx != null) {\n                    defaultIndex = idx;\n                }\n                if (legendDataIdx === targetDataIndex) {\n                    index = idx;\n                }\n            });\n        }\n\n        return index != null ? index : defaultIndex;\n    }\n\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * @event legendScroll\n * @type {Object}\n * @property {string} type 'legendScroll'\n * @property {string} scrollDataIndex\n */\nregisterAction(\n    'legendScroll', 'legendscroll',\n    function (payload, ecModel) {\n        var scrollDataIndex = payload.scrollDataIndex;\n\n        scrollDataIndex != null && ecModel.eachComponent(\n            {mainType: 'legend', subType: 'scroll', query: payload},\n            function (legendModel) {\n                legendModel.setScrollDataIndex(scrollDataIndex);\n            }\n        );\n    }\n);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * Legend component entry file8\n */\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar SliderZoomModel = DataZoomModel.extend({\n\n    type: 'dataZoom.slider',\n\n    layoutMode: 'box',\n\n    /**\n     * @protected\n     */\n    defaultOption: {\n        show: true,\n\n        // ph => placeholder. Using placehoder here because\n        // deault value can only be drived in view stage.\n        right: 'ph',  // Default align to grid rect.\n        top: 'ph',    // Default align to grid rect.\n        width: 'ph',  // Default align to grid rect.\n        height: 'ph', // Default align to grid rect.\n        left: null,   // Default align to grid rect.\n        bottom: null, // Default align to grid rect.\n\n        backgroundColor: 'rgba(47,69,84,0)',    // Background of slider zoom component.\n        // dataBackgroundColor: '#ddd',         // Background coor of data shadow and border of box,\n                                                // highest priority, remain for compatibility of\n                                                // previous version, but not recommended any more.\n        dataBackground: {\n            lineStyle: {\n                color: '#2f4554',\n                width: 0.5,\n                opacity: 0.3\n            },\n            areaStyle: {\n                color: 'rgba(47,69,84,0.3)',\n                opacity: 0.3\n            }\n        },\n        borderColor: '#ddd',                    // border color of the box. For compatibility,\n                                                // if dataBackgroundColor is set, borderColor\n                                                // is ignored.\n\n        fillerColor: 'rgba(167,183,204,0.4)',     // Color of selected area.\n        // handleColor: 'rgba(89,170,216,0.95)',     // Color of handle.\n        // handleIcon: 'path://M4.9,17.8c0-1.4,4.5-10.5,5.5-12.4c0-0.1,0.6-1.1,0.9-1.1c0.4,0,0.9,1,0.9,1.1c1.1,2.2,5.4,11,5.4,12.4v17.8c0,1.5-0.6,2.1-1.3,2.1H6.1c-0.7,0-1.3-0.6-1.3-2.1V17.8z',\n        /* eslint-disable */\n        handleIcon: 'M8.2,13.6V3.9H6.3v9.7H3.1v14.9h3.3v9.7h1.8v-9.7h3.3V13.6H8.2z M9.7,24.4H4.8v-1.4h4.9V24.4z M9.7,19.1H4.8v-1.4h4.9V19.1z',\n        /* eslint-enable */\n        // Percent of the slider height\n        handleSize: '100%',\n\n        handleStyle: {\n            color: '#a7b7cc'\n        },\n\n        labelPrecision: null,\n        labelFormatter: null,\n        showDetail: true,\n        showDataShadow: 'auto',                 // Default auto decision.\n        realtime: true,\n        zoomLock: false,                        // Whether disable zoom.\n        textStyle: {\n            color: '#333'\n        }\n    }\n\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar Rect$2 = Rect;\nvar linearMap$1 = linearMap;\nvar asc$2 = asc;\nvar bind$5 = bind;\nvar each$26 = each$1;\n\n// Constants\nvar DEFAULT_LOCATION_EDGE_GAP = 7;\nvar DEFAULT_FRAME_BORDER_WIDTH = 1;\nvar DEFAULT_FILLER_SIZE = 30;\nvar HORIZONTAL = 'horizontal';\nvar VERTICAL = 'vertical';\nvar LABEL_GAP = 5;\nvar SHOW_DATA_SHADOW_SERIES_TYPE = ['line', 'bar', 'candlestick', 'scatter'];\n\nvar SliderZoomView = DataZoomView.extend({\n\n    type: 'dataZoom.slider',\n\n    init: function (ecModel, api) {\n\n        /**\n         * @private\n         * @type {Object}\n         */\n        this._displayables = {};\n\n        /**\n         * @private\n         * @type {string}\n         */\n        this._orient;\n\n        /**\n         * [0, 100]\n         * @private\n         */\n        this._range;\n\n        /**\n         * [coord of the first handle, coord of the second handle]\n         * @private\n         */\n        this._handleEnds;\n\n        /**\n         * [length, thick]\n         * @private\n         * @type {Array.<number>}\n         */\n        this._size;\n\n        /**\n         * @private\n         * @type {number}\n         */\n        this._handleWidth;\n\n        /**\n         * @private\n         * @type {number}\n         */\n        this._handleHeight;\n\n        /**\n         * @private\n         */\n        this._location;\n\n        /**\n         * @private\n         */\n        this._dragging;\n\n        /**\n         * @private\n         */\n        this._dataShadowInfo;\n\n        this.api = api;\n    },\n\n    /**\n     * @override\n     */\n    render: function (dataZoomModel, ecModel, api, payload) {\n        SliderZoomView.superApply(this, 'render', arguments);\n\n        createOrUpdate(\n            this,\n            '_dispatchZoomAction',\n            this.dataZoomModel.get('throttle'),\n            'fixRate'\n        );\n\n        this._orient = dataZoomModel.get('orient');\n\n        if (this.dataZoomModel.get('show') === false) {\n            this.group.removeAll();\n            return;\n        }\n\n        // Notice: this._resetInterval() should not be executed when payload.type\n        // is 'dataZoom', origin this._range should be maintained, otherwise 'pan'\n        // or 'zoom' info will be missed because of 'throttle' of this.dispatchAction,\n        if (!payload || payload.type !== 'dataZoom' || payload.from !== this.uid) {\n            this._buildView();\n        }\n\n        this._updateView();\n    },\n\n    /**\n     * @override\n     */\n    remove: function () {\n        SliderZoomView.superApply(this, 'remove', arguments);\n        clear(this, '_dispatchZoomAction');\n    },\n\n    /**\n     * @override\n     */\n    dispose: function () {\n        SliderZoomView.superApply(this, 'dispose', arguments);\n        clear(this, '_dispatchZoomAction');\n    },\n\n    _buildView: function () {\n        var thisGroup = this.group;\n\n        thisGroup.removeAll();\n\n        this._resetLocation();\n        this._resetInterval();\n\n        var barGroup = this._displayables.barGroup = new Group();\n\n        this._renderBackground();\n\n        this._renderHandle();\n\n        this._renderDataShadow();\n\n        thisGroup.add(barGroup);\n\n        this._positionGroup();\n    },\n\n    /**\n     * @private\n     */\n    _resetLocation: function () {\n        var dataZoomModel = this.dataZoomModel;\n        var api = this.api;\n\n        // If some of x/y/width/height are not specified,\n        // auto-adapt according to target grid.\n        var coordRect = this._findCoordRect();\n        var ecSize = {width: api.getWidth(), height: api.getHeight()};\n        // Default align by coordinate system rect.\n        var positionInfo = this._orient === HORIZONTAL\n            ? {\n                // Why using 'right', because right should be used in vertical,\n                // and it is better to be consistent for dealing with position param merge.\n                right: ecSize.width - coordRect.x - coordRect.width,\n                top: (ecSize.height - DEFAULT_FILLER_SIZE - DEFAULT_LOCATION_EDGE_GAP),\n                width: coordRect.width,\n                height: DEFAULT_FILLER_SIZE\n            }\n            : { // vertical\n                right: DEFAULT_LOCATION_EDGE_GAP,\n                top: coordRect.y,\n                width: DEFAULT_FILLER_SIZE,\n                height: coordRect.height\n            };\n\n        // Do not write back to option and replace value 'ph', because\n        // the 'ph' value should be recalculated when resize.\n        var layoutParams = getLayoutParams(dataZoomModel.option);\n\n        // Replace the placeholder value.\n        each$1(['right', 'top', 'width', 'height'], function (name) {\n            if (layoutParams[name] === 'ph') {\n                layoutParams[name] = positionInfo[name];\n            }\n        });\n\n        var layoutRect = getLayoutRect(\n            layoutParams,\n            ecSize,\n            dataZoomModel.padding\n        );\n\n        this._location = {x: layoutRect.x, y: layoutRect.y};\n        this._size = [layoutRect.width, layoutRect.height];\n        this._orient === VERTICAL && this._size.reverse();\n    },\n\n    /**\n     * @private\n     */\n    _positionGroup: function () {\n        var thisGroup = this.group;\n        var location = this._location;\n        var orient = this._orient;\n\n        // Just use the first axis to determine mapping.\n        var targetAxisModel = this.dataZoomModel.getFirstTargetAxisModel();\n        var inverse = targetAxisModel && targetAxisModel.get('inverse');\n\n        var barGroup = this._displayables.barGroup;\n        var otherAxisInverse = (this._dataShadowInfo || {}).otherAxisInverse;\n\n        // Transform barGroup.\n        barGroup.attr(\n            (orient === HORIZONTAL && !inverse)\n            ? {scale: otherAxisInverse ? [1, 1] : [1, -1]}\n            : (orient === HORIZONTAL && inverse)\n            ? {scale: otherAxisInverse ? [-1, 1] : [-1, -1]}\n            : (orient === VERTICAL && !inverse)\n            ? {scale: otherAxisInverse ? [1, -1] : [1, 1], rotation: Math.PI / 2}\n            // Dont use Math.PI, considering shadow direction.\n            : {scale: otherAxisInverse ? [-1, -1] : [-1, 1], rotation: Math.PI / 2}\n        );\n\n        // Position barGroup\n        var rect = thisGroup.getBoundingRect([barGroup]);\n        thisGroup.attr('position', [location.x - rect.x, location.y - rect.y]);\n    },\n\n    /**\n     * @private\n     */\n    _getViewExtent: function () {\n        return [0, this._size[0]];\n    },\n\n    _renderBackground: function () {\n        var dataZoomModel = this.dataZoomModel;\n        var size = this._size;\n        var barGroup = this._displayables.barGroup;\n\n        barGroup.add(new Rect$2({\n            silent: true,\n            shape: {\n                x: 0, y: 0, width: size[0], height: size[1]\n            },\n            style: {\n                fill: dataZoomModel.get('backgroundColor')\n            },\n            z2: -40\n        }));\n\n        // Click panel, over shadow, below handles.\n        barGroup.add(new Rect$2({\n            shape: {\n                x: 0, y: 0, width: size[0], height: size[1]\n            },\n            style: {\n                fill: 'transparent'\n            },\n            z2: 0,\n            onclick: bind(this._onClickPanelClick, this)\n        }));\n    },\n\n    _renderDataShadow: function () {\n        var info = this._dataShadowInfo = this._prepareDataShadowInfo();\n\n        if (!info) {\n            return;\n        }\n\n        var size = this._size;\n        var seriesModel = info.series;\n        var data = seriesModel.getRawData();\n\n        var otherDim = seriesModel.getShadowDim\n            ? seriesModel.getShadowDim() // @see candlestick\n            : info.otherDim;\n\n        if (otherDim == null) {\n            return;\n        }\n\n        var otherDataExtent = data.getDataExtent(otherDim);\n        // Nice extent.\n        var otherOffset = (otherDataExtent[1] - otherDataExtent[0]) * 0.3;\n        otherDataExtent = [\n            otherDataExtent[0] - otherOffset,\n            otherDataExtent[1] + otherOffset\n        ];\n        var otherShadowExtent = [0, size[1]];\n\n        var thisShadowExtent = [0, size[0]];\n\n        var areaPoints = [[size[0], 0], [0, 0]];\n        var linePoints = [];\n        var step = thisShadowExtent[1] / (data.count() - 1);\n        var thisCoord = 0;\n\n        // Optimize for large data shadow\n        var stride = Math.round(data.count() / size[0]);\n        var lastIsEmpty;\n        data.each([otherDim], function (value, index) {\n            if (stride > 0 && (index % stride)) {\n                thisCoord += step;\n                return;\n            }\n\n            // FIXME\n            // Should consider axis.min/axis.max when drawing dataShadow.\n\n            // FIXME\n            // 应该使用统一的空判断？还是在list里进行空判断？\n            var isEmpty = value == null || isNaN(value) || value === '';\n            // See #4235.\n            var otherCoord = isEmpty\n                ? 0 : linearMap$1(value, otherDataExtent, otherShadowExtent, true);\n\n            // Attempt to draw data shadow precisely when there are empty value.\n            if (isEmpty && !lastIsEmpty && index) {\n                areaPoints.push([areaPoints[areaPoints.length - 1][0], 0]);\n                linePoints.push([linePoints[linePoints.length - 1][0], 0]);\n            }\n            else if (!isEmpty && lastIsEmpty) {\n                areaPoints.push([thisCoord, 0]);\n                linePoints.push([thisCoord, 0]);\n            }\n\n            areaPoints.push([thisCoord, otherCoord]);\n            linePoints.push([thisCoord, otherCoord]);\n\n            thisCoord += step;\n            lastIsEmpty = isEmpty;\n        });\n\n        var dataZoomModel = this.dataZoomModel;\n        // var dataBackgroundModel = dataZoomModel.getModel('dataBackground');\n        this._displayables.barGroup.add(new Polygon({\n            shape: {points: areaPoints},\n            style: defaults(\n                {fill: dataZoomModel.get('dataBackgroundColor')},\n                dataZoomModel.getModel('dataBackground.areaStyle').getAreaStyle()\n            ),\n            silent: true,\n            z2: -20\n        }));\n        this._displayables.barGroup.add(new Polyline({\n            shape: {points: linePoints},\n            style: dataZoomModel.getModel('dataBackground.lineStyle').getLineStyle(),\n            silent: true,\n            z2: -19\n        }));\n    },\n\n    _prepareDataShadowInfo: function () {\n        var dataZoomModel = this.dataZoomModel;\n        var showDataShadow = dataZoomModel.get('showDataShadow');\n\n        if (showDataShadow === false) {\n            return;\n        }\n\n        // Find a representative series.\n        var result;\n        var ecModel = this.ecModel;\n\n        dataZoomModel.eachTargetAxis(function (dimNames, axisIndex) {\n            var seriesModels = dataZoomModel\n                .getAxisProxy(dimNames.name, axisIndex)\n                .getTargetSeriesModels();\n\n            each$1(seriesModels, function (seriesModel) {\n                if (result) {\n                    return;\n                }\n\n                if (showDataShadow !== true && indexOf(\n                        SHOW_DATA_SHADOW_SERIES_TYPE, seriesModel.get('type')\n                    ) < 0\n                ) {\n                    return;\n                }\n\n                var thisAxis = ecModel.getComponent(dimNames.axis, axisIndex).axis;\n                var otherDim = getOtherDim(dimNames.name);\n                var otherAxisInverse;\n                var coordSys = seriesModel.coordinateSystem;\n\n                if (otherDim != null && coordSys.getOtherAxis) {\n                    otherAxisInverse = coordSys.getOtherAxis(thisAxis).inverse;\n                }\n\n                otherDim = seriesModel.getData().mapDimension(otherDim);\n\n                result = {\n                    thisAxis: thisAxis,\n                    series: seriesModel,\n                    thisDim: dimNames.name,\n                    otherDim: otherDim,\n                    otherAxisInverse: otherAxisInverse\n                };\n\n            }, this);\n\n        }, this);\n\n        return result;\n    },\n\n    _renderHandle: function () {\n        var displaybles = this._displayables;\n        var handles = displaybles.handles = [];\n        var handleLabels = displaybles.handleLabels = [];\n        var barGroup = this._displayables.barGroup;\n        var size = this._size;\n        var dataZoomModel = this.dataZoomModel;\n\n        barGroup.add(displaybles.filler = new Rect$2({\n            draggable: true,\n            cursor: getCursor(this._orient),\n            drift: bind$5(this._onDragMove, this, 'all'),\n            onmousemove: function (e) {\n                // Fot mobile devicem, prevent screen slider on the button.\n                stop(e.event);\n            },\n            ondragstart: bind$5(this._showDataInfo, this, true),\n            ondragend: bind$5(this._onDragEnd, this),\n            onmouseover: bind$5(this._showDataInfo, this, true),\n            onmouseout: bind$5(this._showDataInfo, this, false),\n            style: {\n                fill: dataZoomModel.get('fillerColor'),\n                textPosition: 'inside'\n            }\n        }));\n\n        // Frame border.\n        barGroup.add(new Rect$2({\n            silent: true,\n            subPixelOptimize: true,\n            shape: {\n                x: 0,\n                y: 0,\n                width: size[0],\n                height: size[1]\n            },\n            style: {\n                stroke: dataZoomModel.get('dataBackgroundColor')\n                    || dataZoomModel.get('borderColor'),\n                lineWidth: DEFAULT_FRAME_BORDER_WIDTH,\n                fill: 'rgba(0,0,0,0)'\n            }\n        }));\n\n        each$26([0, 1], function (handleIndex) {\n            var path = createIcon(\n                dataZoomModel.get('handleIcon'),\n                {\n                    cursor: getCursor(this._orient),\n                    draggable: true,\n                    drift: bind$5(this._onDragMove, this, handleIndex),\n                    onmousemove: function (e) {\n                        // Fot mobile devicem, prevent screen slider on the button.\n                        stop(e.event);\n                    },\n                    ondragend: bind$5(this._onDragEnd, this),\n                    onmouseover: bind$5(this._showDataInfo, this, true),\n                    onmouseout: bind$5(this._showDataInfo, this, false)\n                },\n                {x: -1, y: 0, width: 2, height: 2}\n            );\n\n            var bRect = path.getBoundingRect();\n            this._handleHeight = parsePercent$1(dataZoomModel.get('handleSize'), this._size[1]);\n            this._handleWidth = bRect.width / bRect.height * this._handleHeight;\n\n            path.setStyle(dataZoomModel.getModel('handleStyle').getItemStyle());\n            var handleColor = dataZoomModel.get('handleColor');\n            // Compatitable with previous version\n            if (handleColor != null) {\n                path.style.fill = handleColor;\n            }\n\n            barGroup.add(handles[handleIndex] = path);\n\n            var textStyleModel = dataZoomModel.textStyleModel;\n\n            this.group.add(\n                handleLabels[handleIndex] = new Text({\n                silent: true,\n                invisible: true,\n                style: {\n                    x: 0, y: 0, text: '',\n                    textVerticalAlign: 'middle',\n                    textAlign: 'center',\n                    textFill: textStyleModel.getTextColor(),\n                    textFont: textStyleModel.getFont()\n                },\n                z2: 10\n            }));\n\n        }, this);\n    },\n\n    /**\n     * @private\n     */\n    _resetInterval: function () {\n        var range = this._range = this.dataZoomModel.getPercentRange();\n        var viewExtent = this._getViewExtent();\n\n        this._handleEnds = [\n            linearMap$1(range[0], [0, 100], viewExtent, true),\n            linearMap$1(range[1], [0, 100], viewExtent, true)\n        ];\n    },\n\n    /**\n     * @private\n     * @param {(number|string)} handleIndex 0 or 1 or 'all'\n     * @param {number} delta\n     * @return {boolean} changed\n     */\n    _updateInterval: function (handleIndex, delta) {\n        var dataZoomModel = this.dataZoomModel;\n        var handleEnds = this._handleEnds;\n        var viewExtend = this._getViewExtent();\n        var minMaxSpan = dataZoomModel.findRepresentativeAxisProxy().getMinMaxSpan();\n        var percentExtent = [0, 100];\n\n        sliderMove(\n            delta,\n            handleEnds,\n            viewExtend,\n            dataZoomModel.get('zoomLock') ? 'all' : handleIndex,\n            minMaxSpan.minSpan != null\n                ? linearMap$1(minMaxSpan.minSpan, percentExtent, viewExtend, true) : null,\n            minMaxSpan.maxSpan != null\n                ? linearMap$1(minMaxSpan.maxSpan, percentExtent, viewExtend, true) : null\n        );\n\n        var lastRange = this._range;\n        var range = this._range = asc$2([\n            linearMap$1(handleEnds[0], viewExtend, percentExtent, true),\n            linearMap$1(handleEnds[1], viewExtend, percentExtent, true)\n        ]);\n\n        return !lastRange || lastRange[0] !== range[0] || lastRange[1] !== range[1];\n    },\n\n    /**\n     * @private\n     */\n    _updateView: function (nonRealtime) {\n        var displaybles = this._displayables;\n        var handleEnds = this._handleEnds;\n        var handleInterval = asc$2(handleEnds.slice());\n        var size = this._size;\n\n        each$26([0, 1], function (handleIndex) {\n            // Handles\n            var handle = displaybles.handles[handleIndex];\n            var handleHeight = this._handleHeight;\n            handle.attr({\n                scale: [handleHeight / 2, handleHeight / 2],\n                position: [handleEnds[handleIndex], size[1] / 2 - handleHeight / 2]\n            });\n        }, this);\n\n        // Filler\n        displaybles.filler.setShape({\n            x: handleInterval[0],\n            y: 0,\n            width: handleInterval[1] - handleInterval[0],\n            height: size[1]\n        });\n\n        this._updateDataInfo(nonRealtime);\n    },\n\n    /**\n     * @private\n     */\n    _updateDataInfo: function (nonRealtime) {\n        var dataZoomModel = this.dataZoomModel;\n        var displaybles = this._displayables;\n        var handleLabels = displaybles.handleLabels;\n        var orient = this._orient;\n        var labelTexts = ['', ''];\n\n        // FIXME\n        // date型，支持formatter，autoformatter（ec2 date.getAutoFormatter）\n        if (dataZoomModel.get('showDetail')) {\n            var axisProxy = dataZoomModel.findRepresentativeAxisProxy();\n\n            if (axisProxy) {\n                var axis = axisProxy.getAxisModel().axis;\n                var range = this._range;\n\n                var dataInterval = nonRealtime\n                    // See #4434, data and axis are not processed and reset yet in non-realtime mode.\n                    ? axisProxy.calculateDataWindow({\n                        start: range[0], end: range[1]\n                    }).valueWindow\n                    : axisProxy.getDataValueWindow();\n\n                labelTexts = [\n                    this._formatLabel(dataInterval[0], axis),\n                    this._formatLabel(dataInterval[1], axis)\n                ];\n            }\n        }\n\n        var orderedHandleEnds = asc$2(this._handleEnds.slice());\n\n        setLabel.call(this, 0);\n        setLabel.call(this, 1);\n\n        function setLabel(handleIndex) {\n            // Label\n            // Text should not transform by barGroup.\n            // Ignore handlers transform\n            var barTransform = getTransform(\n                displaybles.handles[handleIndex].parent, this.group\n            );\n            var direction = transformDirection(\n                handleIndex === 0 ? 'right' : 'left', barTransform\n            );\n            var offset = this._handleWidth / 2 + LABEL_GAP;\n            var textPoint = applyTransform$1(\n                [\n                    orderedHandleEnds[handleIndex] + (handleIndex === 0 ? -offset : offset),\n                    this._size[1] / 2\n                ],\n                barTransform\n            );\n            handleLabels[handleIndex].setStyle({\n                x: textPoint[0],\n                y: textPoint[1],\n                textVerticalAlign: orient === HORIZONTAL ? 'middle' : direction,\n                textAlign: orient === HORIZONTAL ? direction : 'center',\n                text: labelTexts[handleIndex]\n            });\n        }\n    },\n\n    /**\n     * @private\n     */\n    _formatLabel: function (value, axis) {\n        var dataZoomModel = this.dataZoomModel;\n        var labelFormatter = dataZoomModel.get('labelFormatter');\n\n        var labelPrecision = dataZoomModel.get('labelPrecision');\n        if (labelPrecision == null || labelPrecision === 'auto') {\n            labelPrecision = axis.getPixelPrecision();\n        }\n\n        var valueStr = (value == null || isNaN(value))\n            ? ''\n            // FIXME Glue code\n            : (axis.type === 'category' || axis.type === 'time')\n                ? axis.scale.getLabel(Math.round(value))\n                // param of toFixed should less then 20.\n                : value.toFixed(Math.min(labelPrecision, 20));\n\n        return isFunction$1(labelFormatter)\n            ? labelFormatter(value, valueStr)\n            : isString(labelFormatter)\n            ? labelFormatter.replace('{value}', valueStr)\n            : valueStr;\n    },\n\n    /**\n     * @private\n     * @param {boolean} showOrHide true: show, false: hide\n     */\n    _showDataInfo: function (showOrHide) {\n        // Always show when drgging.\n        showOrHide = this._dragging || showOrHide;\n\n        var handleLabels = this._displayables.handleLabels;\n        handleLabels[0].attr('invisible', !showOrHide);\n        handleLabels[1].attr('invisible', !showOrHide);\n    },\n\n    _onDragMove: function (handleIndex, dx, dy) {\n        this._dragging = true;\n\n        // Transform dx, dy to bar coordination.\n        var barTransform = this._displayables.barGroup.getLocalTransform();\n        var vertex = applyTransform$1([dx, dy], barTransform, true);\n\n        var changed = this._updateInterval(handleIndex, vertex[0]);\n\n        var realtime = this.dataZoomModel.get('realtime');\n\n        this._updateView(!realtime);\n\n        // Avoid dispatch dataZoom repeatly but range not changed,\n        // which cause bad visual effect when progressive enabled.\n        changed && realtime && this._dispatchZoomAction();\n    },\n\n    _onDragEnd: function () {\n        this._dragging = false;\n        this._showDataInfo(false);\n\n        // While in realtime mode and stream mode, dispatch action when\n        // drag end will cause the whole view rerender, which is unnecessary.\n        var realtime = this.dataZoomModel.get('realtime');\n        !realtime && this._dispatchZoomAction();\n    },\n\n    _onClickPanelClick: function (e) {\n        var size = this._size;\n        var localPoint = this._displayables.barGroup.transformCoordToLocal(e.offsetX, e.offsetY);\n\n        if (localPoint[0] < 0 || localPoint[0] > size[0]\n            || localPoint[1] < 0 || localPoint[1] > size[1]\n        ) {\n            return;\n        }\n\n        var handleEnds = this._handleEnds;\n        var center = (handleEnds[0] + handleEnds[1]) / 2;\n\n        var changed = this._updateInterval('all', localPoint[0] - center);\n        this._updateView();\n        changed && this._dispatchZoomAction();\n    },\n\n    /**\n     * This action will be throttled.\n     * @private\n     */\n    _dispatchZoomAction: function () {\n        var range = this._range;\n\n        this.api.dispatchAction({\n            type: 'dataZoom',\n            from: this.uid,\n            dataZoomId: this.dataZoomModel.id,\n            start: range[0],\n            end: range[1]\n        });\n    },\n\n    /**\n     * @private\n     */\n    _findCoordRect: function () {\n        // Find the grid coresponding to the first axis referred by dataZoom.\n        var rect;\n        each$26(this.getTargetCoordInfo(), function (coordInfoList) {\n            if (!rect && coordInfoList.length) {\n                var coordSys = coordInfoList[0].model.coordinateSystem;\n                rect = coordSys.getRect && coordSys.getRect();\n            }\n        });\n        if (!rect) {\n            var width = this.api.getWidth();\n            var height = this.api.getHeight();\n            rect = {\n                x: width * 0.2,\n                y: height * 0.2,\n                width: width * 0.6,\n                height: height * 0.6\n            };\n        }\n\n        return rect;\n    }\n\n});\n\nfunction getOtherDim(thisDim) {\n    // FIXME\n    // 这个逻辑和getOtherAxis里一致，但是写在这里是否不好\n    var map$$1 = {x: 'y', y: 'x', radius: 'angle', angle: 'radius'};\n    return map$$1[thisDim];\n}\n\nfunction getCursor(orient) {\n    return orient === 'vertical' ? 'ns-resize' : 'ew-resize';\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nDataZoomModel.extend({\n\n    type: 'dataZoom.inside',\n\n    /**\n     * @protected\n     */\n    defaultOption: {\n        disabled: false,   // Whether disable this inside zoom.\n        zoomLock: false,   // Whether disable zoom but only pan.\n        zoomOnMouseWheel: true, // Can be: true / false / 'shift' / 'ctrl' / 'alt'.\n        moveOnMouseMove: true,   // Can be: true / false / 'shift' / 'ctrl' / 'alt'.\n        moveOnMouseWheel: false, // Can be: true / false / 'shift' / 'ctrl' / 'alt'.\n        preventDefaultMouseMove: true\n    }\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n// Only create one roam controller for each coordinate system.\n// one roam controller might be refered by two inside data zoom\n// components (for example, one for x and one for y). When user\n// pan or zoom, only dispatch one action for those data zoom\n// components.\n\nvar ATTR$2 = '\\0_ec_dataZoom_roams';\n\n\n/**\n * @public\n * @param {module:echarts/ExtensionAPI} api\n * @param {Object} dataZoomInfo\n * @param {string} dataZoomInfo.coordId\n * @param {Function} dataZoomInfo.containsPoint\n * @param {Array.<string>} dataZoomInfo.allCoordIds\n * @param {string} dataZoomInfo.dataZoomId\n * @param {Object} dataZoomInfo.getRange\n * @param {Function} dataZoomInfo.getRange.pan\n * @param {Function} dataZoomInfo.getRange.zoom\n * @param {Function} dataZoomInfo.getRange.scrollMove\n * @param {boolean} dataZoomInfo.dataZoomModel\n */\nfunction register$2(api, dataZoomInfo) {\n    var store = giveStore$1(api);\n    var theDataZoomId = dataZoomInfo.dataZoomId;\n    var theCoordId = dataZoomInfo.coordId;\n\n    // Do clean when a dataZoom changes its target coordnate system.\n    // Avoid memory leak, dispose all not-used-registered.\n    each$1(store, function (record, coordId) {\n        var dataZoomInfos = record.dataZoomInfos;\n        if (dataZoomInfos[theDataZoomId]\n            && indexOf(dataZoomInfo.allCoordIds, theCoordId) < 0\n        ) {\n            delete dataZoomInfos[theDataZoomId];\n            record.count--;\n        }\n    });\n\n    cleanStore(store);\n\n    var record = store[theCoordId];\n    // Create if needed.\n    if (!record) {\n        record = store[theCoordId] = {\n            coordId: theCoordId,\n            dataZoomInfos: {},\n            count: 0\n        };\n        record.controller = createController(api, record);\n        record.dispatchAction = curry(dispatchAction$1, api);\n    }\n\n    // Update reference of dataZoom.\n    !(record.dataZoomInfos[theDataZoomId]) && record.count++;\n    record.dataZoomInfos[theDataZoomId] = dataZoomInfo;\n\n    var controllerParams = mergeControllerParams(record.dataZoomInfos);\n    record.controller.enable(controllerParams.controlType, controllerParams.opt);\n\n    // Consider resize, area should be always updated.\n    record.controller.setPointerChecker(dataZoomInfo.containsPoint);\n\n    // Update throttle.\n    createOrUpdate(\n        record,\n        'dispatchAction',\n        dataZoomInfo.dataZoomModel.get('throttle', true),\n        'fixRate'\n    );\n}\n\n/**\n * @public\n * @param {module:echarts/ExtensionAPI} api\n * @param {string} dataZoomId\n */\nfunction unregister$1(api, dataZoomId) {\n    var store = giveStore$1(api);\n\n    each$1(store, function (record) {\n        record.controller.dispose();\n        var dataZoomInfos = record.dataZoomInfos;\n        if (dataZoomInfos[dataZoomId]) {\n            delete dataZoomInfos[dataZoomId];\n            record.count--;\n        }\n    });\n\n    cleanStore(store);\n}\n\n/**\n * @public\n */\nfunction generateCoordId(coordModel) {\n    return coordModel.type + '\\0_' + coordModel.id;\n}\n\n/**\n * Key: coordId, value: {dataZoomInfos: [], count, controller}\n * @type {Array.<Object>}\n */\nfunction giveStore$1(api) {\n    // Mount store on zrender instance, so that we do not\n    // need to worry about dispose.\n    var zr = api.getZr();\n    return zr[ATTR$2] || (zr[ATTR$2] = {});\n}\n\nfunction createController(api, newRecord) {\n    var controller = new RoamController(api.getZr());\n\n    each$1(['pan', 'zoom', 'scrollMove'], function (eventName) {\n        controller.on(eventName, function (event) {\n            var batch = [];\n\n            each$1(newRecord.dataZoomInfos, function (info) {\n                // Check whether the behaviors (zoomOnMouseWheel, moveOnMouseMove,\n                // moveOnMouseWheel, ...) enabled.\n                if (!event.isAvailableBehavior(info.dataZoomModel.option)) {\n                    return;\n                }\n\n                var method = (info.getRange || {})[eventName];\n                var range = method && method(newRecord.controller, event);\n\n                !info.dataZoomModel.get('disabled', true) && range && batch.push({\n                    dataZoomId: info.dataZoomId,\n                    start: range[0],\n                    end: range[1]\n                });\n            });\n\n            batch.length && newRecord.dispatchAction(batch);\n        });\n    });\n\n    return controller;\n}\n\nfunction cleanStore(store) {\n    each$1(store, function (record, coordId) {\n        if (!record.count) {\n            record.controller.dispose();\n            delete store[coordId];\n        }\n    });\n}\n\n/**\n * This action will be throttled.\n */\nfunction dispatchAction$1(api, batch) {\n    api.dispatchAction({\n        type: 'dataZoom',\n        batch: batch\n    });\n}\n\n/**\n * Merge roamController settings when multiple dataZooms share one roamController.\n */\nfunction mergeControllerParams(dataZoomInfos) {\n    var controlType;\n    // DO NOT use reserved word (true, false, undefined) as key literally. Even if encapsulated\n    // as string, it is probably revert to reserved word by compress tool. See #7411.\n    var prefix = 'type_';\n    var typePriority = {\n        'type_true': 2,\n        'type_move': 1,\n        'type_false': 0,\n        'type_undefined': -1\n    };\n    var preventDefaultMouseMove = true;\n\n    each$1(dataZoomInfos, function (dataZoomInfo) {\n        var dataZoomModel = dataZoomInfo.dataZoomModel;\n        var oneType = dataZoomModel.get('disabled', true)\n            ? false\n            : dataZoomModel.get('zoomLock', true)\n            ? 'move'\n            : true;\n        if (typePriority[prefix + oneType] > typePriority[prefix + controlType]) {\n            controlType = oneType;\n        }\n\n        // Prevent default move event by default. If one false, do not prevent. Otherwise\n        // users may be confused why it does not work when multiple insideZooms exist.\n        preventDefaultMouseMove &= dataZoomModel.get('preventDefaultMouseMove', true);\n    });\n\n    return {\n        controlType: controlType,\n        opt: {\n            // RoamController will enable all of these functionalities,\n            // and the final behavior is determined by its event listener\n            // provided by each inside zoom.\n            zoomOnMouseWheel: true,\n            moveOnMouseMove: true,\n            moveOnMouseWheel: true,\n            preventDefaultMouseMove: !!preventDefaultMouseMove\n        }\n    };\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar bind$6 = bind;\n\nvar InsideZoomView = DataZoomView.extend({\n\n    type: 'dataZoom.inside',\n\n    /**\n     * @override\n     */\n    init: function (ecModel, api) {\n        /**\n         * 'throttle' is used in this.dispatchAction, so we save range\n         * to avoid missing some 'pan' info.\n         * @private\n         * @type {Array.<number>}\n         */\n        this._range;\n    },\n\n    /**\n     * @override\n     */\n    render: function (dataZoomModel, ecModel, api, payload) {\n        InsideZoomView.superApply(this, 'render', arguments);\n\n        // Hence the `throttle` util ensures to preserve command order,\n        // here simply updating range all the time will not cause missing\n        // any of the the roam change.\n        this._range = dataZoomModel.getPercentRange();\n\n        // Reset controllers.\n        each$1(this.getTargetCoordInfo(), function (coordInfoList, coordSysName) {\n\n            var allCoordIds = map(coordInfoList, function (coordInfo) {\n                return generateCoordId(coordInfo.model);\n            });\n\n            each$1(coordInfoList, function (coordInfo) {\n                var coordModel = coordInfo.model;\n\n                var getRange = {};\n                each$1(['pan', 'zoom', 'scrollMove'], function (eventName) {\n                    getRange[eventName] = bind$6(roamHandlers[eventName], this, coordInfo, coordSysName);\n                }, this);\n\n                register$2(\n                    api,\n                    {\n                        coordId: generateCoordId(coordModel),\n                        allCoordIds: allCoordIds,\n                        containsPoint: function (e, x, y) {\n                            return coordModel.coordinateSystem.containPoint([x, y]);\n                        },\n                        dataZoomId: dataZoomModel.id,\n                        dataZoomModel: dataZoomModel,\n                        getRange: getRange\n                    }\n                );\n            }, this);\n\n        }, this);\n    },\n\n    /**\n     * @override\n     */\n    dispose: function () {\n        unregister$1(this.api, this.dataZoomModel.id);\n        InsideZoomView.superApply(this, 'dispose', arguments);\n        this._range = null;\n    }\n\n});\n\nvar roamHandlers = {\n\n    /**\n     * @this {module:echarts/component/dataZoom/InsideZoomView}\n     */\n    zoom: function (coordInfo, coordSysName, controller, e) {\n        var lastRange = this._range;\n        var range = lastRange.slice();\n\n        // Calculate transform by the first axis.\n        var axisModel = coordInfo.axisModels[0];\n        if (!axisModel) {\n            return;\n        }\n\n        var directionInfo = getDirectionInfo[coordSysName](\n            null, [e.originX, e.originY], axisModel, controller, coordInfo\n        );\n        var percentPoint = (\n            directionInfo.signal > 0\n                ? (directionInfo.pixelStart + directionInfo.pixelLength - directionInfo.pixel)\n                : (directionInfo.pixel - directionInfo.pixelStart)\n            ) / directionInfo.pixelLength * (range[1] - range[0]) + range[0];\n\n        var scale = Math.max(1 / e.scale, 0);\n        range[0] = (range[0] - percentPoint) * scale + percentPoint;\n        range[1] = (range[1] - percentPoint) * scale + percentPoint;\n\n        // Restrict range.\n        var minMaxSpan = this.dataZoomModel.findRepresentativeAxisProxy().getMinMaxSpan();\n\n        sliderMove(0, range, [0, 100], 0, minMaxSpan.minSpan, minMaxSpan.maxSpan);\n\n        this._range = range;\n\n        if (lastRange[0] !== range[0] || lastRange[1] !== range[1]) {\n            return range;\n        }\n    },\n\n    /**\n     * @this {module:echarts/component/dataZoom/InsideZoomView}\n     */\n    pan: makeMover(function (range, axisModel, coordInfo, coordSysName, controller, e) {\n        var directionInfo = getDirectionInfo[coordSysName](\n            [e.oldX, e.oldY], [e.newX, e.newY], axisModel, controller, coordInfo\n        );\n\n        return directionInfo.signal\n            * (range[1] - range[0])\n            * directionInfo.pixel / directionInfo.pixelLength;\n    }),\n\n    /**\n     * @this {module:echarts/component/dataZoom/InsideZoomView}\n     */\n    scrollMove: makeMover(function (range, axisModel, coordInfo, coordSysName, controller, e) {\n        var directionInfo = getDirectionInfo[coordSysName](\n            [0, 0], [e.scrollDelta, e.scrollDelta], axisModel, controller, coordInfo\n        );\n        return directionInfo.signal * (range[1] - range[0]) * e.scrollDelta;\n    })\n};\n\nfunction makeMover(getPercentDelta) {\n    return function (coordInfo, coordSysName, controller, e) {\n        var lastRange = this._range;\n        var range = lastRange.slice();\n\n        // Calculate transform by the first axis.\n        var axisModel = coordInfo.axisModels[0];\n        if (!axisModel) {\n            return;\n        }\n\n        var percentDelta = getPercentDelta(\n            range, axisModel, coordInfo, coordSysName, controller, e\n        );\n\n        sliderMove(percentDelta, range, [0, 100], 'all');\n\n        this._range = range;\n\n        if (lastRange[0] !== range[0] || lastRange[1] !== range[1]) {\n            return range;\n        }\n    };\n}\n\nvar getDirectionInfo = {\n\n    grid: function (oldPoint, newPoint, axisModel, controller, coordInfo) {\n        var axis = axisModel.axis;\n        var ret = {};\n        var rect = coordInfo.model.coordinateSystem.getRect();\n        oldPoint = oldPoint || [0, 0];\n\n        if (axis.dim === 'x') {\n            ret.pixel = newPoint[0] - oldPoint[0];\n            ret.pixelLength = rect.width;\n            ret.pixelStart = rect.x;\n            ret.signal = axis.inverse ? 1 : -1;\n        }\n        else { // axis.dim === 'y'\n            ret.pixel = newPoint[1] - oldPoint[1];\n            ret.pixelLength = rect.height;\n            ret.pixelStart = rect.y;\n            ret.signal = axis.inverse ? -1 : 1;\n        }\n\n        return ret;\n    },\n\n    polar: function (oldPoint, newPoint, axisModel, controller, coordInfo) {\n        var axis = axisModel.axis;\n        var ret = {};\n        var polar = coordInfo.model.coordinateSystem;\n        var radiusExtent = polar.getRadiusAxis().getExtent();\n        var angleExtent = polar.getAngleAxis().getExtent();\n\n        oldPoint = oldPoint ? polar.pointToCoord(oldPoint) : [0, 0];\n        newPoint = polar.pointToCoord(newPoint);\n\n        if (axisModel.mainType === 'radiusAxis') {\n            ret.pixel = newPoint[0] - oldPoint[0];\n            // ret.pixelLength = Math.abs(radiusExtent[1] - radiusExtent[0]);\n            // ret.pixelStart = Math.min(radiusExtent[0], radiusExtent[1]);\n            ret.pixelLength = radiusExtent[1] - radiusExtent[0];\n            ret.pixelStart = radiusExtent[0];\n            ret.signal = axis.inverse ? 1 : -1;\n        }\n        else { // 'angleAxis'\n            ret.pixel = newPoint[1] - oldPoint[1];\n            // ret.pixelLength = Math.abs(angleExtent[1] - angleExtent[0]);\n            // ret.pixelStart = Math.min(angleExtent[0], angleExtent[1]);\n            ret.pixelLength = angleExtent[1] - angleExtent[0];\n            ret.pixelStart = angleExtent[0];\n            ret.signal = axis.inverse ? -1 : 1;\n        }\n\n        return ret;\n    },\n\n    singleAxis: function (oldPoint, newPoint, axisModel, controller, coordInfo) {\n        var axis = axisModel.axis;\n        var rect = coordInfo.model.coordinateSystem.getRect();\n        var ret = {};\n\n        oldPoint = oldPoint || [0, 0];\n\n        if (axis.orient === 'horizontal') {\n            ret.pixel = newPoint[0] - oldPoint[0];\n            ret.pixelLength = rect.width;\n            ret.pixelStart = rect.x;\n            ret.signal = axis.inverse ? 1 : -1;\n        }\n        else { // 'vertical'\n            ret.pixel = newPoint[1] - oldPoint[1];\n            ret.pixelLength = rect.height;\n            ret.pixelStart = rect.y;\n            ret.signal = axis.inverse ? -1 : 1;\n        }\n\n        return ret;\n    }\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n\n\n// Do not include './dataZoomSelect',\n// since it only work for toolbox dataZoom.\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar each$27 = each$1;\n\nvar preprocessor$3 = function (option) {\n    var visualMap = option && option.visualMap;\n\n    if (!isArray(visualMap)) {\n        visualMap = visualMap ? [visualMap] : [];\n    }\n\n    each$27(visualMap, function (opt) {\n        if (!opt) {\n            return;\n        }\n\n        // rename splitList to pieces\n        if (has$2(opt, 'splitList') && !has$2(opt, 'pieces')) {\n            opt.pieces = opt.splitList;\n            delete opt.splitList;\n        }\n\n        var pieces = opt.pieces;\n        if (pieces && isArray(pieces)) {\n            each$27(pieces, function (piece) {\n                if (isObject$1(piece)) {\n                    if (has$2(piece, 'start') && !has$2(piece, 'min')) {\n                        piece.min = piece.start;\n                    }\n                    if (has$2(piece, 'end') && !has$2(piece, 'max')) {\n                        piece.max = piece.end;\n                    }\n                }\n            });\n        }\n    });\n};\n\nfunction has$2(obj, name) {\n    return obj && obj.hasOwnProperty && obj.hasOwnProperty(name);\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nComponentModel.registerSubTypeDefaulter('visualMap', function (option) {\n    // Compatible with ec2, when splitNumber === 0, continuous visualMap will be used.\n    return (\n            !option.categories\n            && (\n                !(\n                    option.pieces\n                        ? option.pieces.length > 0\n                        : option.splitNumber > 0\n                )\n                || option.calculable\n            )\n        )\n        ? 'continuous' : 'piecewise';\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar VISUAL_PRIORITY = PRIORITY.VISUAL.COMPONENT;\n\nregisterVisual(VISUAL_PRIORITY, {\n    createOnAllSeries: true,\n    reset: function (seriesModel, ecModel) {\n        var resetDefines = [];\n        ecModel.eachComponent('visualMap', function (visualMapModel) {\n            var pipelineContext = seriesModel.pipelineContext;\n            if (!visualMapModel.isTargetSeries(seriesModel)\n                || (pipelineContext && pipelineContext.large)\n            ) {\n                return;\n            }\n\n            resetDefines.push(incrementalApplyVisual(\n                visualMapModel.stateList,\n                visualMapModel.targetVisuals,\n                bind(visualMapModel.getValueState, visualMapModel),\n                visualMapModel.getDataDimension(seriesModel.getData())\n            ));\n        });\n\n        return resetDefines;\n    }\n});\n\n// Only support color.\nregisterVisual(VISUAL_PRIORITY, {\n    createOnAllSeries: true,\n    reset: function (seriesModel, ecModel) {\n        var data = seriesModel.getData();\n        var visualMetaList = [];\n\n        ecModel.eachComponent('visualMap', function (visualMapModel) {\n            if (visualMapModel.isTargetSeries(seriesModel)) {\n                var visualMeta = visualMapModel.getVisualMeta(\n                    bind(getColorVisual, null, seriesModel, visualMapModel)\n                ) || {stops: [], outerColors: []};\n\n                var concreteDim = visualMapModel.getDataDimension(data);\n                var dimInfo = data.getDimensionInfo(concreteDim);\n                if (dimInfo != null) {\n                    // visualMeta.dimension should be dimension index, but not concrete dimension.\n                    visualMeta.dimension = dimInfo.index;\n                    visualMetaList.push(visualMeta);\n                }\n            }\n        });\n\n        // console.log(JSON.stringify(visualMetaList.map(a => a.stops)));\n        seriesModel.getData().setVisual('visualMeta', visualMetaList);\n    }\n});\n\n// FIXME\n// performance and export for heatmap?\n// value can be Infinity or -Infinity\nfunction getColorVisual(seriesModel, visualMapModel, value, valueState) {\n    var mappings = visualMapModel.targetVisuals[valueState];\n    var visualTypes = VisualMapping.prepareVisualTypes(mappings);\n    var resultVisual = {\n        color: seriesModel.getData().getVisual('color') // default color.\n    };\n\n    for (var i = 0, len = visualTypes.length; i < len; i++) {\n        var type = visualTypes[i];\n        var mapping = mappings[\n            type === 'opacity' ? '__alphaForOpacity' : type\n        ];\n        mapping && mapping.applyVisual(value, getVisual, setVisual);\n    }\n\n    return resultVisual.color;\n\n    function getVisual(key) {\n        return resultVisual[key];\n    }\n\n    function setVisual(key, value) {\n        resultVisual[key] = value;\n    }\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * @file Visual mapping.\n */\n\nvar visualDefault = {\n\n    /**\n     * @public\n     */\n    get: function (visualType, key, isCategory) {\n        var value = clone(\n            (defaultOption$3[visualType] || {})[key]\n        );\n\n        return isCategory\n            ? (isArray(value) ? value[value.length - 1] : value)\n            : value;\n    }\n\n};\n\nvar defaultOption$3 = {\n\n    color: {\n        active: ['#006edd', '#e0ffff'],\n        inactive: ['rgba(0,0,0,0)']\n    },\n\n    colorHue: {\n        active: [0, 360],\n        inactive: [0, 0]\n    },\n\n    colorSaturation: {\n        active: [0.3, 1],\n        inactive: [0, 0]\n    },\n\n    colorLightness: {\n        active: [0.9, 0.5],\n        inactive: [0, 0]\n    },\n\n    colorAlpha: {\n        active: [0.3, 1],\n        inactive: [0, 0]\n    },\n\n    opacity: {\n        active: [0.3, 1],\n        inactive: [0, 0]\n    },\n\n    symbol: {\n        active: ['circle', 'roundRect', 'diamond'],\n        inactive: ['none']\n    },\n\n    symbolSize: {\n        active: [10, 50],\n        inactive: [0, 0]\n    }\n};\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar mapVisual$2 = VisualMapping.mapVisual;\nvar eachVisual = VisualMapping.eachVisual;\nvar isArray$3 = isArray;\nvar each$28 = each$1;\nvar asc$3 = asc;\nvar linearMap$2 = linearMap;\nvar noop$2 = noop;\n\nvar VisualMapModel = extendComponentModel({\n\n    type: 'visualMap',\n\n    dependencies: ['series'],\n\n    /**\n     * @readOnly\n     * @type {Array.<string>}\n     */\n    stateList: ['inRange', 'outOfRange'],\n\n    /**\n     * @readOnly\n     * @type {Array.<string>}\n     */\n    replacableOptionKeys: [\n        'inRange', 'outOfRange', 'target', 'controller', 'color'\n    ],\n\n    /**\n     * [lowerBound, upperBound]\n     *\n     * @readOnly\n     * @type {Array.<number>}\n     */\n    dataBound: [-Infinity, Infinity],\n\n    /**\n     * @readOnly\n     * @type {string|Object}\n     */\n    layoutMode: {type: 'box', ignoreSize: true},\n\n    /**\n     * @protected\n     */\n    defaultOption: {\n        show: true,\n\n        zlevel: 0,\n        z: 4,\n\n        seriesIndex: 'all',     // 'all' or null/undefined: all series.\n                                // A number or an array of number: the specified series.\n\n                                // set min: 0, max: 200, only for campatible with ec2.\n                                // In fact min max should not have default value.\n        min: 0,                 // min value, must specified if pieces is not specified.\n        max: 200,               // max value, must specified if pieces is not specified.\n\n        dimension: null,\n        inRange: null,          // 'color', 'colorHue', 'colorSaturation', 'colorLightness', 'colorAlpha',\n                                // 'symbol', 'symbolSize'\n        outOfRange: null,       // 'color', 'colorHue', 'colorSaturation',\n                                // 'colorLightness', 'colorAlpha',\n                                // 'symbol', 'symbolSize'\n\n        left: 0,                // 'center' ¦ 'left' ¦ 'right' ¦ {number} (px)\n        right: null,            // The same as left.\n        top: null,              // 'top' ¦ 'bottom' ¦ 'center' ¦ {number} (px)\n        bottom: 0,              // The same as top.\n\n        itemWidth: null,\n        itemHeight: null,\n        inverse: false,\n        orient: 'vertical',        // 'horizontal' ¦ 'vertical'\n\n        backgroundColor: 'rgba(0,0,0,0)',\n        borderColor: '#ccc',       // 值域边框颜色\n        contentColor: '#5793f3',\n        inactiveColor: '#aaa',\n        borderWidth: 0,            // 值域边框线宽，单位px，默认为0（无边框）\n        padding: 5,                // 值域内边距，单位px，默认各方向内边距为5，\n                                    // 接受数组分别设定上右下左边距，同css\n        textGap: 10,               //\n        precision: 0,              // 小数精度，默认为0，无小数点\n        color: null,               //颜色（deprecated，兼容ec2，顺序同pieces，不同于inRange/outOfRange）\n\n        formatter: null,\n        text: null,                // 文本，如['高', '低']，兼容ec2，text[0]对应高值，text[1]对应低值\n        textStyle: {\n            color: '#333'          // 值域文字颜色\n        }\n    },\n\n    /**\n     * @protected\n     */\n    init: function (option, parentModel, ecModel) {\n\n        /**\n         * @private\n         * @type {Array.<number>}\n         */\n        this._dataExtent;\n\n        /**\n         * @readOnly\n         */\n        this.targetVisuals = {};\n\n        /**\n         * @readOnly\n         */\n        this.controllerVisuals = {};\n\n        /**\n         * @readOnly\n         */\n        this.textStyleModel;\n\n        /**\n         * [width, height]\n         * @readOnly\n         * @type {Array.<number>}\n         */\n        this.itemSize;\n\n        this.mergeDefaultAndTheme(option, ecModel);\n    },\n\n    /**\n     * @protected\n     */\n    optionUpdated: function (newOption, isInit) {\n        var thisOption = this.option;\n\n        // FIXME\n        // necessary?\n        // Disable realtime view update if canvas is not supported.\n        if (!env$1.canvasSupported) {\n            thisOption.realtime = false;\n        }\n\n        !isInit && replaceVisualOption(\n            thisOption, newOption, this.replacableOptionKeys\n        );\n\n        this.textStyleModel = this.getModel('textStyle');\n\n        this.resetItemSize();\n\n        this.completeVisualOption();\n    },\n\n    /**\n     * @protected\n     */\n    resetVisual: function (supplementVisualOption) {\n        var stateList = this.stateList;\n        supplementVisualOption = bind(supplementVisualOption, this);\n\n        this.controllerVisuals = createVisualMappings(\n            this.option.controller, stateList, supplementVisualOption\n        );\n        this.targetVisuals = createVisualMappings(\n            this.option.target, stateList, supplementVisualOption\n        );\n    },\n\n    /**\n     * @protected\n     * @return {Array.<number>} An array of series indices.\n     */\n    getTargetSeriesIndices: function () {\n        var optionSeriesIndex = this.option.seriesIndex;\n        var seriesIndices = [];\n\n        if (optionSeriesIndex == null || optionSeriesIndex === 'all') {\n            this.ecModel.eachSeries(function (seriesModel, index) {\n                seriesIndices.push(index);\n            });\n        }\n        else {\n            seriesIndices = normalizeToArray(optionSeriesIndex);\n        }\n\n        return seriesIndices;\n    },\n\n    /**\n     * @public\n     */\n    eachTargetSeries: function (callback, context) {\n        each$1(this.getTargetSeriesIndices(), function (seriesIndex) {\n            callback.call(context, this.ecModel.getSeriesByIndex(seriesIndex));\n        }, this);\n    },\n\n    /**\n     * @pubilc\n     */\n    isTargetSeries: function (seriesModel) {\n        var is = false;\n        this.eachTargetSeries(function (model) {\n            model === seriesModel && (is = true);\n        });\n        return is;\n    },\n\n    /**\n     * @example\n     * this.formatValueText(someVal); // format single numeric value to text.\n     * this.formatValueText(someVal, true); // format single category value to text.\n     * this.formatValueText([min, max]); // format numeric min-max to text.\n     * this.formatValueText([this.dataBound[0], max]); // using data lower bound.\n     * this.formatValueText([min, this.dataBound[1]]); // using data upper bound.\n     *\n     * @param {number|Array.<number>} value Real value, or this.dataBound[0 or 1].\n     * @param {boolean} [isCategory=false] Only available when value is number.\n     * @param {Array.<string>} edgeSymbols Open-close symbol when value is interval.\n     * @return {string}\n     * @protected\n     */\n    formatValueText: function (value, isCategory, edgeSymbols) {\n        var option = this.option;\n        var precision = option.precision;\n        var dataBound = this.dataBound;\n        var formatter = option.formatter;\n        var isMinMax;\n        var textValue;\n        edgeSymbols = edgeSymbols || ['<', '>'];\n\n        if (isArray(value)) {\n            value = value.slice();\n            isMinMax = true;\n        }\n\n        textValue = isCategory\n            ? value\n            : (isMinMax\n                ? [toFixed(value[0]), toFixed(value[1])]\n                : toFixed(value)\n            );\n\n        if (isString(formatter)) {\n            return formatter\n                .replace('{value}', isMinMax ? textValue[0] : textValue)\n                .replace('{value2}', isMinMax ? textValue[1] : textValue);\n        }\n        else if (isFunction$1(formatter)) {\n            return isMinMax\n                ? formatter(value[0], value[1])\n                : formatter(value);\n        }\n\n        if (isMinMax) {\n            if (value[0] === dataBound[0]) {\n                return edgeSymbols[0] + ' ' + textValue[1];\n            }\n            else if (value[1] === dataBound[1]) {\n                return edgeSymbols[1] + ' ' + textValue[0];\n            }\n            else {\n                return textValue[0] + ' - ' + textValue[1];\n            }\n        }\n        else { // Format single value (includes category case).\n            return textValue;\n        }\n\n        function toFixed(val) {\n            return val === dataBound[0]\n                ? 'min'\n                : val === dataBound[1]\n                ? 'max'\n                : (+val).toFixed(Math.min(precision, 20));\n        }\n    },\n\n    /**\n     * @protected\n     */\n    resetExtent: function () {\n        var thisOption = this.option;\n\n        // Can not calculate data extent by data here.\n        // Because series and data may be modified in processing stage.\n        // So we do not support the feature \"auto min/max\".\n\n        var extent = asc$3([thisOption.min, thisOption.max]);\n\n        this._dataExtent = extent;\n    },\n\n    /**\n     * @public\n     * @param {module:echarts/data/List} list\n     * @return {string} Concrete dimention. If return null/undefined,\n     *                  no dimension used.\n     */\n    getDataDimension: function (list) {\n        var optDim = this.option.dimension;\n        var listDimensions = list.dimensions;\n        if (optDim == null && !listDimensions.length) {\n            return;\n        }\n\n        if (optDim != null) {\n            return list.getDimension(optDim);\n        }\n\n        var dimNames = list.dimensions;\n        for (var i = dimNames.length - 1; i >= 0; i--) {\n            var dimName = dimNames[i];\n            var dimInfo = list.getDimensionInfo(dimName);\n            if (!dimInfo.isCalculationCoord) {\n                return dimName;\n            }\n        }\n    },\n\n    /**\n     * @public\n     * @override\n     */\n    getExtent: function () {\n        return this._dataExtent.slice();\n    },\n\n    /**\n     * @protected\n     */\n    completeVisualOption: function () {\n        var ecModel = this.ecModel;\n        var thisOption = this.option;\n        var base = {inRange: thisOption.inRange, outOfRange: thisOption.outOfRange};\n\n        var target = thisOption.target || (thisOption.target = {});\n        var controller = thisOption.controller || (thisOption.controller = {});\n\n        merge(target, base); // Do not override\n        merge(controller, base); // Do not override\n\n        var isCategory = this.isCategory();\n\n        completeSingle.call(this, target);\n        completeSingle.call(this, controller);\n        completeInactive.call(this, target, 'inRange', 'outOfRange');\n        // completeInactive.call(this, target, 'outOfRange', 'inRange');\n        completeController.call(this, controller);\n\n        function completeSingle(base) {\n            // Compatible with ec2 dataRange.color.\n            // The mapping order of dataRange.color is: [high value, ..., low value]\n            // whereas inRange.color and outOfRange.color is [low value, ..., high value]\n            // Notice: ec2 has no inverse.\n            if (isArray$3(thisOption.color)\n                // If there has been inRange: {symbol: ...}, adding color is a mistake.\n                // So adding color only when no inRange defined.\n                && !base.inRange\n            ) {\n                base.inRange = {color: thisOption.color.slice().reverse()};\n            }\n\n            // Compatible with previous logic, always give a defautl color, otherwise\n            // simple config with no inRange and outOfRange will not work.\n            // Originally we use visualMap.color as the default color, but setOption at\n            // the second time the default color will be erased. So we change to use\n            // constant DEFAULT_COLOR.\n            // If user do not want the defualt color, set inRange: {color: null}.\n            base.inRange = base.inRange || {color: ecModel.get('gradientColor')};\n\n            // If using shortcut like: {inRange: 'symbol'}, complete default value.\n            each$28(this.stateList, function (state) {\n                var visualType = base[state];\n\n                if (isString(visualType)) {\n                    var defa = visualDefault.get(visualType, 'active', isCategory);\n                    if (defa) {\n                        base[state] = {};\n                        base[state][visualType] = defa;\n                    }\n                    else {\n                        // Mark as not specified.\n                        delete base[state];\n                    }\n                }\n            }, this);\n        }\n\n        function completeInactive(base, stateExist, stateAbsent) {\n            var optExist = base[stateExist];\n            var optAbsent = base[stateAbsent];\n\n            if (optExist && !optAbsent) {\n                optAbsent = base[stateAbsent] = {};\n                each$28(optExist, function (visualData, visualType) {\n                    if (!VisualMapping.isValidType(visualType)) {\n                        return;\n                    }\n\n                    var defa = visualDefault.get(visualType, 'inactive', isCategory);\n\n                    if (defa != null) {\n                        optAbsent[visualType] = defa;\n\n                        // Compatibable with ec2:\n                        // Only inactive color to rgba(0,0,0,0) can not\n                        // make label transparent, so use opacity also.\n                        if (visualType === 'color'\n                            && !optAbsent.hasOwnProperty('opacity')\n                            && !optAbsent.hasOwnProperty('colorAlpha')\n                        ) {\n                            optAbsent.opacity = [0, 0];\n                        }\n                    }\n                });\n            }\n        }\n\n        function completeController(controller) {\n            var symbolExists = (controller.inRange || {}).symbol\n                || (controller.outOfRange || {}).symbol;\n            var symbolSizeExists = (controller.inRange || {}).symbolSize\n                || (controller.outOfRange || {}).symbolSize;\n            var inactiveColor = this.get('inactiveColor');\n\n            each$28(this.stateList, function (state) {\n\n                var itemSize = this.itemSize;\n                var visuals = controller[state];\n\n                // Set inactive color for controller if no other color\n                // attr (like colorAlpha) specified.\n                if (!visuals) {\n                    visuals = controller[state] = {\n                        color: isCategory ? inactiveColor : [inactiveColor]\n                    };\n                }\n\n                // Consistent symbol and symbolSize if not specified.\n                if (visuals.symbol == null) {\n                    visuals.symbol = symbolExists\n                        && clone(symbolExists)\n                        || (isCategory ? 'roundRect' : ['roundRect']);\n                }\n                if (visuals.symbolSize == null) {\n                    visuals.symbolSize = symbolSizeExists\n                        && clone(symbolSizeExists)\n                        || (isCategory ? itemSize[0] : [itemSize[0], itemSize[0]]);\n                }\n\n                // Filter square and none.\n                visuals.symbol = mapVisual$2(visuals.symbol, function (symbol) {\n                    return (symbol === 'none' || symbol === 'square') ? 'roundRect' : symbol;\n                });\n\n                // Normalize symbolSize\n                var symbolSize = visuals.symbolSize;\n\n                if (symbolSize != null) {\n                    var max = -Infinity;\n                    // symbolSize can be object when categories defined.\n                    eachVisual(symbolSize, function (value) {\n                        value > max && (max = value);\n                    });\n                    visuals.symbolSize = mapVisual$2(symbolSize, function (value) {\n                        return linearMap$2(value, [0, max], [0, itemSize[0]], true);\n                    });\n                }\n\n            }, this);\n        }\n    },\n\n    /**\n     * @protected\n     */\n    resetItemSize: function () {\n        this.itemSize = [\n            parseFloat(this.get('itemWidth')),\n            parseFloat(this.get('itemHeight'))\n        ];\n    },\n\n    /**\n     * @public\n     */\n    isCategory: function () {\n        return !!this.option.categories;\n    },\n\n    /**\n     * @public\n     * @abstract\n     */\n    setSelected: noop$2,\n\n    /**\n     * @public\n     * @abstract\n     * @param {*|module:echarts/data/List} valueOrData\n     * @param {number} dataIndex\n     * @return {string} state See this.stateList\n     */\n    getValueState: noop$2,\n\n    /**\n     * FIXME\n     * Do not publish to thirt-part-dev temporarily\n     * util the interface is stable. (Should it return\n     * a function but not visual meta?)\n     *\n     * @pubilc\n     * @abstract\n     * @param {Function} getColorVisual\n     *        params: value, valueState\n     *        return: color\n     * @return {Object} visualMeta\n     *        should includes {stops, outerColors}\n     *        outerColor means [colorBeyondMinValue, colorBeyondMaxValue]\n     */\n    getVisualMeta: noop$2\n\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n// Constant\nvar DEFAULT_BAR_BOUND = [20, 140];\n\nvar ContinuousModel = VisualMapModel.extend({\n\n    type: 'visualMap.continuous',\n\n    /**\n     * @protected\n     */\n    defaultOption: {\n        align: 'auto',           // 'auto', 'left', 'right', 'top', 'bottom'\n        calculable: false,       // This prop effect default component type determine,\n                                 // See echarts/component/visualMap/typeDefaulter.\n        range: null,             // selected range. In default case `range` is [min, max]\n                                 // and can auto change along with modification of min max,\n                                 // util use specifid a range.\n        realtime: true,          // Whether realtime update.\n        itemHeight: null,        // The length of the range control edge.\n        itemWidth: null,         // The length of the other side.\n        hoverLink: true,         // Enable hover highlight.\n        hoverLinkDataSize: null, // The size of hovered data.\n        hoverLinkOnHandle: null  // Whether trigger hoverLink when hover handle.\n                                 // If not specified, follow the value of `realtime`.\n    },\n\n    /**\n     * @override\n     */\n    optionUpdated: function (newOption, isInit) {\n        ContinuousModel.superApply(this, 'optionUpdated', arguments);\n\n        this.resetExtent();\n\n        this.resetVisual(function (mappingOption) {\n            mappingOption.mappingMethod = 'linear';\n            mappingOption.dataExtent = this.getExtent();\n        });\n\n        this._resetRange();\n    },\n\n    /**\n     * @protected\n     * @override\n     */\n    resetItemSize: function () {\n        ContinuousModel.superApply(this, 'resetItemSize', arguments);\n\n        var itemSize = this.itemSize;\n\n        this._orient === 'horizontal' && itemSize.reverse();\n\n        (itemSize[0] == null || isNaN(itemSize[0])) && (itemSize[0] = DEFAULT_BAR_BOUND[0]);\n        (itemSize[1] == null || isNaN(itemSize[1])) && (itemSize[1] = DEFAULT_BAR_BOUND[1]);\n    },\n\n    /**\n     * @private\n     */\n    _resetRange: function () {\n        var dataExtent = this.getExtent();\n        var range = this.option.range;\n\n        if (!range || range.auto) {\n            // `range` should always be array (so we dont use other\n            // value like 'auto') for user-friend. (consider getOption).\n            dataExtent.auto = 1;\n            this.option.range = dataExtent;\n        }\n        else if (isArray(range)) {\n            if (range[0] > range[1]) {\n                range.reverse();\n            }\n            range[0] = Math.max(range[0], dataExtent[0]);\n            range[1] = Math.min(range[1], dataExtent[1]);\n        }\n    },\n\n    /**\n     * @protected\n     * @override\n     */\n    completeVisualOption: function () {\n        VisualMapModel.prototype.completeVisualOption.apply(this, arguments);\n\n        each$1(this.stateList, function (state) {\n            var symbolSize = this.option.controller[state].symbolSize;\n            if (symbolSize && symbolSize[0] !== symbolSize[1]) {\n                symbolSize[0] = 0; // For good looking.\n            }\n        }, this);\n    },\n\n    /**\n     * @override\n     */\n    setSelected: function (selected) {\n        this.option.range = selected.slice();\n        this._resetRange();\n    },\n\n    /**\n     * @public\n     */\n    getSelected: function () {\n        var dataExtent = this.getExtent();\n\n        var dataInterval = asc(\n            (this.get('range') || []).slice()\n        );\n\n        // Clamp\n        dataInterval[0] > dataExtent[1] && (dataInterval[0] = dataExtent[1]);\n        dataInterval[1] > dataExtent[1] && (dataInterval[1] = dataExtent[1]);\n        dataInterval[0] < dataExtent[0] && (dataInterval[0] = dataExtent[0]);\n        dataInterval[1] < dataExtent[0] && (dataInterval[1] = dataExtent[0]);\n\n        return dataInterval;\n    },\n\n    /**\n     * @override\n     */\n    getValueState: function (value) {\n        var range = this.option.range;\n        var dataExtent = this.getExtent();\n\n        // When range[0] === dataExtent[0], any value larger than dataExtent[0] maps to 'inRange'.\n        // range[1] is processed likewise.\n        return (\n            (range[0] <= dataExtent[0] || range[0] <= value)\n            && (range[1] >= dataExtent[1] || value <= range[1])\n        ) ? 'inRange' : 'outOfRange';\n    },\n\n    /**\n     * @params {Array.<number>} range target value: range[0] <= value && value <= range[1]\n     * @return {Array.<Object>} [{seriesId, dataIndices: <Array.<number>>}, ...]\n     */\n    findTargetDataIndices: function (range) {\n        var result = [];\n\n        this.eachTargetSeries(function (seriesModel) {\n            var dataIndices = [];\n            var data = seriesModel.getData();\n\n            data.each(this.getDataDimension(data), function (value, dataIndex) {\n                range[0] <= value && value <= range[1] && dataIndices.push(dataIndex);\n            }, this);\n\n            result.push({seriesId: seriesModel.id, dataIndex: dataIndices});\n        }, this);\n\n        return result;\n    },\n\n    /**\n     * @implement\n     */\n    getVisualMeta: function (getColorVisual) {\n        var oVals = getColorStopValues(this, 'outOfRange', this.getExtent());\n        var iVals = getColorStopValues(this, 'inRange', this.option.range.slice());\n        var stops = [];\n\n        function setStop(value, valueState) {\n            stops.push({\n                value: value,\n                color: getColorVisual(value, valueState)\n            });\n        }\n\n        // Format to: outOfRange -- inRange -- outOfRange.\n        var iIdx = 0;\n        var oIdx = 0;\n        var iLen = iVals.length;\n        var oLen = oVals.length;\n\n        for (; oIdx < oLen && (!iVals.length || oVals[oIdx] <= iVals[0]); oIdx++) {\n            // If oVal[oIdx] === iVals[iIdx], oVal[oIdx] should be ignored.\n            if (oVals[oIdx] < iVals[iIdx]) {\n                setStop(oVals[oIdx], 'outOfRange');\n            }\n        }\n        for (var first = 1; iIdx < iLen; iIdx++, first = 0) {\n            // If range is full, value beyond min, max will be clamped.\n            // make a singularity\n            first && stops.length && setStop(iVals[iIdx], 'outOfRange');\n            setStop(iVals[iIdx], 'inRange');\n        }\n        for (var first = 1; oIdx < oLen; oIdx++) {\n            if (!iVals.length || iVals[iVals.length - 1] < oVals[oIdx]) {\n                // make a singularity\n                if (first) {\n                    stops.length && setStop(stops[stops.length - 1].value, 'outOfRange');\n                    first = 0;\n                }\n                setStop(oVals[oIdx], 'outOfRange');\n            }\n        }\n\n        var stopsLen = stops.length;\n\n        return {\n            stops: stops,\n            outerColors: [\n                stopsLen ? stops[0].color : 'transparent',\n                stopsLen ? stops[stopsLen - 1].color : 'transparent'\n            ]\n        };\n    }\n\n});\n\nfunction getColorStopValues(visualMapModel, valueState, dataExtent) {\n    if (dataExtent[0] === dataExtent[1]) {\n        return dataExtent.slice();\n    }\n\n    // When using colorHue mapping, it is not linear color any more.\n    // Moreover, canvas gradient seems not to be accurate linear.\n    // FIXME\n    // Should be arbitrary value 100? or based on pixel size?\n    var count = 200;\n    var step = (dataExtent[1] - dataExtent[0]) / count;\n\n    var value = dataExtent[0];\n    var stopValues = [];\n    for (var i = 0; i <= count && value < dataExtent[1]; i++) {\n        stopValues.push(value);\n        value += step;\n    }\n    stopValues.push(dataExtent[1]);\n\n    return stopValues;\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar VisualMapView = extendComponentView({\n\n    type: 'visualMap',\n\n    /**\n     * @readOnly\n     * @type {Object}\n     */\n    autoPositionValues: {left: 1, right: 1, top: 1, bottom: 1},\n\n    init: function (ecModel, api) {\n        /**\n         * @readOnly\n         * @type {module:echarts/model/Global}\n         */\n        this.ecModel = ecModel;\n\n        /**\n         * @readOnly\n         * @type {module:echarts/ExtensionAPI}\n         */\n        this.api = api;\n\n        /**\n         * @readOnly\n         * @type {module:echarts/component/visualMap/visualMapModel}\n         */\n        this.visualMapModel;\n    },\n\n    /**\n     * @protected\n     */\n    render: function (visualMapModel, ecModel, api, payload) {\n        this.visualMapModel = visualMapModel;\n\n        if (visualMapModel.get('show') === false) {\n            this.group.removeAll();\n            return;\n        }\n\n        this.doRender.apply(this, arguments);\n    },\n\n    /**\n     * @protected\n     */\n    renderBackground: function (group) {\n        var visualMapModel = this.visualMapModel;\n        var padding = normalizeCssArray$1(visualMapModel.get('padding') || 0);\n        var rect = group.getBoundingRect();\n\n        group.add(new Rect({\n            z2: -1, // Lay background rect on the lowest layer.\n            silent: true,\n            shape: {\n                x: rect.x - padding[3],\n                y: rect.y - padding[0],\n                width: rect.width + padding[3] + padding[1],\n                height: rect.height + padding[0] + padding[2]\n            },\n            style: {\n                fill: visualMapModel.get('backgroundColor'),\n                stroke: visualMapModel.get('borderColor'),\n                lineWidth: visualMapModel.get('borderWidth')\n            }\n        }));\n    },\n\n    /**\n     * @protected\n     * @param {number} targetValue can be Infinity or -Infinity\n     * @param {string=} visualCluster Only can be 'color' 'opacity' 'symbol' 'symbolSize'\n     * @param {Object} [opts]\n     * @param {string=} [opts.forceState] Specify state, instead of using getValueState method.\n     * @param {string=} [opts.convertOpacityToAlpha=false] For color gradient in controller widget.\n     * @return {*} Visual value.\n     */\n    getControllerVisual: function (targetValue, visualCluster, opts) {\n        opts = opts || {};\n\n        var forceState = opts.forceState;\n        var visualMapModel = this.visualMapModel;\n        var visualObj = {};\n\n        // Default values.\n        if (visualCluster === 'symbol') {\n            visualObj.symbol = visualMapModel.get('itemSymbol');\n        }\n        if (visualCluster === 'color') {\n            var defaultColor = visualMapModel.get('contentColor');\n            visualObj.color = defaultColor;\n        }\n\n        function getter(key) {\n            return visualObj[key];\n        }\n\n        function setter(key, value) {\n            visualObj[key] = value;\n        }\n\n        var mappings = visualMapModel.controllerVisuals[\n            forceState || visualMapModel.getValueState(targetValue)\n        ];\n        var visualTypes = VisualMapping.prepareVisualTypes(mappings);\n\n        each$1(visualTypes, function (type) {\n            var visualMapping = mappings[type];\n            if (opts.convertOpacityToAlpha && type === 'opacity') {\n                type = 'colorAlpha';\n                visualMapping = mappings.__alphaForOpacity;\n            }\n            if (VisualMapping.dependsOn(type, visualCluster)) {\n                visualMapping && visualMapping.applyVisual(\n                    targetValue, getter, setter\n                );\n            }\n        });\n\n        return visualObj[visualCluster];\n    },\n\n    /**\n     * @protected\n     */\n    positionGroup: function (group) {\n        var model = this.visualMapModel;\n        var api = this.api;\n\n        positionElement(\n            group,\n            model.getBoxLayoutParams(),\n            {width: api.getWidth(), height: api.getHeight()}\n        );\n    },\n\n    /**\n     * @protected\n     * @abstract\n     */\n    doRender: noop\n\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * @param {module:echarts/component/visualMap/VisualMapModel} visualMapModel\\\n * @param {module:echarts/ExtensionAPI} api\n * @param {Array.<number>} itemSize always [short, long]\n * @return {string} 'left' or 'right' or 'top' or 'bottom'\n */\nfunction getItemAlign(visualMapModel, api, itemSize) {\n    var modelOption = visualMapModel.option;\n    var itemAlign = modelOption.align;\n\n    if (itemAlign != null && itemAlign !== 'auto') {\n        return itemAlign;\n    }\n\n    // Auto decision align.\n    var ecSize = {width: api.getWidth(), height: api.getHeight()};\n    var realIndex = modelOption.orient === 'horizontal' ? 1 : 0;\n\n    var paramsSet = [\n        ['left', 'right', 'width'],\n        ['top', 'bottom', 'height']\n    ];\n    var reals = paramsSet[realIndex];\n    var fakeValue = [0, null, 10];\n\n    var layoutInput = {};\n    for (var i = 0; i < 3; i++) {\n        layoutInput[paramsSet[1 - realIndex][i]] = fakeValue[i];\n        layoutInput[reals[i]] = i === 2 ? itemSize[0] : modelOption[reals[i]];\n    }\n\n    var rParam = [['x', 'width', 3], ['y', 'height', 0]][realIndex];\n    var rect = getLayoutRect(layoutInput, ecSize, modelOption.padding);\n\n    return reals[\n        (rect.margin[rParam[2]] || 0) + rect[rParam[0]] + rect[rParam[1]] * 0.5\n            < ecSize[rParam[1]] * 0.5 ? 0 : 1\n    ];\n}\n\n/**\n * Prepare dataIndex for outside usage, where dataIndex means rawIndex, and\n * dataIndexInside means filtered index.\n */\nfunction makeHighDownBatch(batch, visualMapModel) {\n    each$1(batch || [], function (batchItem) {\n        if (batchItem.dataIndex != null) {\n            batchItem.dataIndexInside = batchItem.dataIndex;\n            batchItem.dataIndex = null;\n        }\n        batchItem.highlightKey = 'visualMap' + (visualMapModel ? visualMapModel.componentIndex : '');\n    });\n    return batch;\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar linearMap$3 = linearMap;\nvar each$29 = each$1;\nvar mathMin$7 = Math.min;\nvar mathMax$7 = Math.max;\n\n// Arbitrary value\nvar HOVER_LINK_SIZE = 12;\nvar HOVER_LINK_OUT = 6;\n\n// Notice:\n// Any \"interval\" should be by the order of [low, high].\n// \"handle0\" (handleIndex === 0) maps to\n// low data value: this._dataInterval[0] and has low coord.\n// \"handle1\" (handleIndex === 1) maps to\n// high data value: this._dataInterval[1] and has high coord.\n// The logic of transform is implemented in this._createBarGroup.\n\nvar ContinuousView = VisualMapView.extend({\n\n    type: 'visualMap.continuous',\n\n    /**\n     * @override\n     */\n    init: function () {\n\n        ContinuousView.superApply(this, 'init', arguments);\n\n        /**\n         * @private\n         */\n        this._shapes = {};\n\n        /**\n         * @private\n         */\n        this._dataInterval = [];\n\n        /**\n         * @private\n         */\n        this._handleEnds = [];\n\n        /**\n         * @private\n         */\n        this._orient;\n\n        /**\n         * @private\n         */\n        this._useHandle;\n\n        /**\n         * @private\n         */\n        this._hoverLinkDataIndices = [];\n\n        /**\n         * @private\n         */\n        this._dragging;\n\n        /**\n         * @private\n         */\n        this._hovering;\n    },\n\n    /**\n     * @protected\n     * @override\n     */\n    doRender: function (visualMapModel, ecModel, api, payload) {\n        if (!payload || payload.type !== 'selectDataRange' || payload.from !== this.uid) {\n            this._buildView();\n        }\n    },\n\n    /**\n     * @private\n     */\n    _buildView: function () {\n        this.group.removeAll();\n\n        var visualMapModel = this.visualMapModel;\n        var thisGroup = this.group;\n\n        this._orient = visualMapModel.get('orient');\n        this._useHandle = visualMapModel.get('calculable');\n\n        this._resetInterval();\n\n        this._renderBar(thisGroup);\n\n        var dataRangeText = visualMapModel.get('text');\n        this._renderEndsText(thisGroup, dataRangeText, 0);\n        this._renderEndsText(thisGroup, dataRangeText, 1);\n\n        // Do this for background size calculation.\n        this._updateView(true);\n\n        // After updating view, inner shapes is built completely,\n        // and then background can be rendered.\n        this.renderBackground(thisGroup);\n\n        // Real update view\n        this._updateView();\n\n        this._enableHoverLinkToSeries();\n        this._enableHoverLinkFromSeries();\n\n        this.positionGroup(thisGroup);\n    },\n\n    /**\n     * @private\n     */\n    _renderEndsText: function (group, dataRangeText, endsIndex) {\n        if (!dataRangeText) {\n            return;\n        }\n\n        // Compatible with ec2, text[0] map to high value, text[1] map low value.\n        var text = dataRangeText[1 - endsIndex];\n        text = text != null ? text + '' : '';\n\n        var visualMapModel = this.visualMapModel;\n        var textGap = visualMapModel.get('textGap');\n        var itemSize = visualMapModel.itemSize;\n\n        var barGroup = this._shapes.barGroup;\n        var position = this._applyTransform(\n            [\n                itemSize[0] / 2,\n                endsIndex === 0 ? -textGap : itemSize[1] + textGap\n            ],\n            barGroup\n        );\n        var align = this._applyTransform(\n            endsIndex === 0 ? 'bottom' : 'top',\n            barGroup\n        );\n        var orient = this._orient;\n        var textStyleModel = this.visualMapModel.textStyleModel;\n\n        this.group.add(new Text({\n            style: {\n                x: position[0],\n                y: position[1],\n                textVerticalAlign: orient === 'horizontal' ? 'middle' : align,\n                textAlign: orient === 'horizontal' ? align : 'center',\n                text: text,\n                textFont: textStyleModel.getFont(),\n                textFill: textStyleModel.getTextColor()\n            }\n        }));\n    },\n\n    /**\n     * @private\n     */\n    _renderBar: function (targetGroup) {\n        var visualMapModel = this.visualMapModel;\n        var shapes = this._shapes;\n        var itemSize = visualMapModel.itemSize;\n        var orient = this._orient;\n        var useHandle = this._useHandle;\n        var itemAlign = getItemAlign(visualMapModel, this.api, itemSize);\n        var barGroup = shapes.barGroup = this._createBarGroup(itemAlign);\n\n        // Bar\n        barGroup.add(shapes.outOfRange = createPolygon());\n        barGroup.add(shapes.inRange = createPolygon(\n            null,\n            useHandle ? getCursor$1(this._orient) : null,\n            bind(this._dragHandle, this, 'all', false),\n            bind(this._dragHandle, this, 'all', true)\n        ));\n\n        var textRect = visualMapModel.textStyleModel.getTextRect('国');\n        var textSize = mathMax$7(textRect.width, textRect.height);\n\n        // Handle\n        if (useHandle) {\n            shapes.handleThumbs = [];\n            shapes.handleLabels = [];\n            shapes.handleLabelPoints = [];\n\n            this._createHandle(barGroup, 0, itemSize, textSize, orient, itemAlign);\n            this._createHandle(barGroup, 1, itemSize, textSize, orient, itemAlign);\n        }\n\n        this._createIndicator(barGroup, itemSize, textSize, orient);\n\n        targetGroup.add(barGroup);\n    },\n\n    /**\n     * @private\n     */\n    _createHandle: function (barGroup, handleIndex, itemSize, textSize, orient) {\n        var onDrift = bind(this._dragHandle, this, handleIndex, false);\n        var onDragEnd = bind(this._dragHandle, this, handleIndex, true);\n        var handleThumb = createPolygon(\n            createHandlePoints(handleIndex, textSize),\n            getCursor$1(this._orient),\n            onDrift,\n            onDragEnd\n        );\n        handleThumb.position[0] = itemSize[0];\n        barGroup.add(handleThumb);\n\n        // Text is always horizontal layout but should not be effected by\n        // transform (orient/inverse). So label is built separately but not\n        // use zrender/graphic/helper/RectText, and is located based on view\n        // group (according to handleLabelPoint) but not barGroup.\n        var textStyleModel = this.visualMapModel.textStyleModel;\n        var handleLabel = new Text({\n            draggable: true,\n            drift: onDrift,\n            onmousemove: function (e) {\n                // Fot mobile devicem, prevent screen slider on the button.\n                stop(e.event);\n            },\n            ondragend: onDragEnd,\n            style: {\n                x: 0, y: 0, text: '',\n                textFont: textStyleModel.getFont(),\n                textFill: textStyleModel.getTextColor()\n            }\n        });\n        this.group.add(handleLabel);\n\n        var handleLabelPoint = [\n            orient === 'horizontal'\n                ? textSize / 2\n                : textSize * 1.5,\n            orient === 'horizontal'\n                ? (handleIndex === 0 ? -(textSize * 1.5) : (textSize * 1.5))\n                : (handleIndex === 0 ? -textSize / 2 : textSize / 2)\n        ];\n\n        var shapes = this._shapes;\n        shapes.handleThumbs[handleIndex] = handleThumb;\n        shapes.handleLabelPoints[handleIndex] = handleLabelPoint;\n        shapes.handleLabels[handleIndex] = handleLabel;\n    },\n\n    /**\n     * @private\n     */\n    _createIndicator: function (barGroup, itemSize, textSize, orient) {\n        var indicator = createPolygon([[0, 0]], 'move');\n        indicator.position[0] = itemSize[0];\n        indicator.attr({invisible: true, silent: true});\n        barGroup.add(indicator);\n\n        var textStyleModel = this.visualMapModel.textStyleModel;\n        var indicatorLabel = new Text({\n            silent: true,\n            invisible: true,\n            style: {\n                x: 0, y: 0, text: '',\n                textFont: textStyleModel.getFont(),\n                textFill: textStyleModel.getTextColor()\n            }\n        });\n        this.group.add(indicatorLabel);\n\n        var indicatorLabelPoint = [\n            orient === 'horizontal' ? textSize / 2 : HOVER_LINK_OUT + 3,\n            0\n        ];\n\n        var shapes = this._shapes;\n        shapes.indicator = indicator;\n        shapes.indicatorLabel = indicatorLabel;\n        shapes.indicatorLabelPoint = indicatorLabelPoint;\n    },\n\n    /**\n     * @private\n     */\n    _dragHandle: function (handleIndex, isEnd, dx, dy) {\n        if (!this._useHandle) {\n            return;\n        }\n\n        this._dragging = !isEnd;\n\n        if (!isEnd) {\n            // Transform dx, dy to bar coordination.\n            var vertex = this._applyTransform([dx, dy], this._shapes.barGroup, true);\n            this._updateInterval(handleIndex, vertex[1]);\n\n            // Considering realtime, update view should be executed\n            // before dispatch action.\n            this._updateView();\n        }\n\n        // dragEnd do not dispatch action when realtime.\n        if (isEnd === !this.visualMapModel.get('realtime')) { // jshint ignore:line\n            this.api.dispatchAction({\n                type: 'selectDataRange',\n                from: this.uid,\n                visualMapId: this.visualMapModel.id,\n                selected: this._dataInterval.slice()\n            });\n        }\n\n        if (isEnd) {\n            !this._hovering && this._clearHoverLinkToSeries();\n        }\n        else if (useHoverLinkOnHandle(this.visualMapModel)) {\n            this._doHoverLinkToSeries(this._handleEnds[handleIndex], false);\n        }\n    },\n\n    /**\n     * @private\n     */\n    _resetInterval: function () {\n        var visualMapModel = this.visualMapModel;\n\n        var dataInterval = this._dataInterval = visualMapModel.getSelected();\n        var dataExtent = visualMapModel.getExtent();\n        var sizeExtent = [0, visualMapModel.itemSize[1]];\n\n        this._handleEnds = [\n            linearMap$3(dataInterval[0], dataExtent, sizeExtent, true),\n            linearMap$3(dataInterval[1], dataExtent, sizeExtent, true)\n        ];\n    },\n\n    /**\n     * @private\n     * @param {(number|string)} handleIndex 0 or 1 or 'all'\n     * @param {number} dx\n     * @param {number} dy\n     */\n    _updateInterval: function (handleIndex, delta) {\n        delta = delta || 0;\n        var visualMapModel = this.visualMapModel;\n        var handleEnds = this._handleEnds;\n        var sizeExtent = [0, visualMapModel.itemSize[1]];\n\n        sliderMove(\n            delta,\n            handleEnds,\n            sizeExtent,\n            handleIndex,\n            // cross is forbiden\n            0\n        );\n\n        var dataExtent = visualMapModel.getExtent();\n        // Update data interval.\n        this._dataInterval = [\n            linearMap$3(handleEnds[0], sizeExtent, dataExtent, true),\n            linearMap$3(handleEnds[1], sizeExtent, dataExtent, true)\n        ];\n    },\n\n    /**\n     * @private\n     */\n    _updateView: function (forSketch) {\n        var visualMapModel = this.visualMapModel;\n        var dataExtent = visualMapModel.getExtent();\n        var shapes = this._shapes;\n\n        var outOfRangeHandleEnds = [0, visualMapModel.itemSize[1]];\n        var inRangeHandleEnds = forSketch ? outOfRangeHandleEnds : this._handleEnds;\n\n        var visualInRange = this._createBarVisual(\n            this._dataInterval, dataExtent, inRangeHandleEnds, 'inRange'\n        );\n        var visualOutOfRange = this._createBarVisual(\n            dataExtent, dataExtent, outOfRangeHandleEnds, 'outOfRange'\n        );\n\n        shapes.inRange\n            .setStyle({\n                fill: visualInRange.barColor,\n                opacity: visualInRange.opacity\n            })\n            .setShape('points', visualInRange.barPoints);\n        shapes.outOfRange\n            .setStyle({\n                fill: visualOutOfRange.barColor,\n                opacity: visualOutOfRange.opacity\n            })\n            .setShape('points', visualOutOfRange.barPoints);\n\n        this._updateHandle(inRangeHandleEnds, visualInRange);\n    },\n\n    /**\n     * @private\n     */\n    _createBarVisual: function (dataInterval, dataExtent, handleEnds, forceState) {\n        var opts = {\n            forceState: forceState,\n            convertOpacityToAlpha: true\n        };\n        var colorStops = this._makeColorGradient(dataInterval, opts);\n\n        var symbolSizes = [\n            this.getControllerVisual(dataInterval[0], 'symbolSize', opts),\n            this.getControllerVisual(dataInterval[1], 'symbolSize', opts)\n        ];\n        var barPoints = this._createBarPoints(handleEnds, symbolSizes);\n\n        return {\n            barColor: new LinearGradient(0, 0, 0, 1, colorStops),\n            barPoints: barPoints,\n            handlesColor: [\n                colorStops[0].color,\n                colorStops[colorStops.length - 1].color\n            ]\n        };\n    },\n\n    /**\n     * @private\n     */\n    _makeColorGradient: function (dataInterval, opts) {\n        // Considering colorHue, which is not linear, so we have to sample\n        // to calculate gradient color stops, but not only caculate head\n        // and tail.\n        var sampleNumber = 100; // Arbitrary value.\n        var colorStops = [];\n        var step = (dataInterval[1] - dataInterval[0]) / sampleNumber;\n\n        colorStops.push({\n            color: this.getControllerVisual(dataInterval[0], 'color', opts),\n            offset: 0\n        });\n\n        for (var i = 1; i < sampleNumber; i++) {\n            var currValue = dataInterval[0] + step * i;\n            if (currValue > dataInterval[1]) {\n                break;\n            }\n            colorStops.push({\n                color: this.getControllerVisual(currValue, 'color', opts),\n                offset: i / sampleNumber\n            });\n        }\n\n        colorStops.push({\n            color: this.getControllerVisual(dataInterval[1], 'color', opts),\n            offset: 1\n        });\n\n        return colorStops;\n    },\n\n    /**\n     * @private\n     */\n    _createBarPoints: function (handleEnds, symbolSizes) {\n        var itemSize = this.visualMapModel.itemSize;\n\n        return [\n            [itemSize[0] - symbolSizes[0], handleEnds[0]],\n            [itemSize[0], handleEnds[0]],\n            [itemSize[0], handleEnds[1]],\n            [itemSize[0] - symbolSizes[1], handleEnds[1]]\n        ];\n    },\n\n    /**\n     * @private\n     */\n    _createBarGroup: function (itemAlign) {\n        var orient = this._orient;\n        var inverse = this.visualMapModel.get('inverse');\n\n        return new Group(\n            (orient === 'horizontal' && !inverse)\n            ? {scale: itemAlign === 'bottom' ? [1, 1] : [-1, 1], rotation: Math.PI / 2}\n            : (orient === 'horizontal' && inverse)\n            ? {scale: itemAlign === 'bottom' ? [-1, 1] : [1, 1], rotation: -Math.PI / 2}\n            : (orient === 'vertical' && !inverse)\n            ? {scale: itemAlign === 'left' ? [1, -1] : [-1, -1]}\n            : {scale: itemAlign === 'left' ? [1, 1] : [-1, 1]}\n        );\n    },\n\n    /**\n     * @private\n     */\n    _updateHandle: function (handleEnds, visualInRange) {\n        if (!this._useHandle) {\n            return;\n        }\n\n        var shapes = this._shapes;\n        var visualMapModel = this.visualMapModel;\n        var handleThumbs = shapes.handleThumbs;\n        var handleLabels = shapes.handleLabels;\n\n        each$29([0, 1], function (handleIndex) {\n            var handleThumb = handleThumbs[handleIndex];\n            handleThumb.setStyle('fill', visualInRange.handlesColor[handleIndex]);\n            handleThumb.position[1] = handleEnds[handleIndex];\n\n            // Update handle label position.\n            var textPoint = applyTransform$1(\n                shapes.handleLabelPoints[handleIndex],\n                getTransform(handleThumb, this.group)\n            );\n            handleLabels[handleIndex].setStyle({\n                x: textPoint[0],\n                y: textPoint[1],\n                text: visualMapModel.formatValueText(this._dataInterval[handleIndex]),\n                textVerticalAlign: 'middle',\n                textAlign: this._applyTransform(\n                    this._orient === 'horizontal'\n                        ? (handleIndex === 0 ? 'bottom' : 'top')\n                        : 'left',\n                    shapes.barGroup\n                )\n            });\n        }, this);\n    },\n\n    /**\n     * @private\n     * @param {number} cursorValue\n     * @param {number} textValue\n     * @param {string} [rangeSymbol]\n     * @param {number} [halfHoverLinkSize]\n     */\n    _showIndicator: function (cursorValue, textValue, rangeSymbol, halfHoverLinkSize) {\n        var visualMapModel = this.visualMapModel;\n        var dataExtent = visualMapModel.getExtent();\n        var itemSize = visualMapModel.itemSize;\n        var sizeExtent = [0, itemSize[1]];\n        var pos = linearMap$3(cursorValue, dataExtent, sizeExtent, true);\n\n        var shapes = this._shapes;\n        var indicator = shapes.indicator;\n        if (!indicator) {\n            return;\n        }\n\n        indicator.position[1] = pos;\n        indicator.attr('invisible', false);\n        indicator.setShape('points', createIndicatorPoints(\n            !!rangeSymbol, halfHoverLinkSize, pos, itemSize[1]\n        ));\n\n        var opts = {convertOpacityToAlpha: true};\n        var color = this.getControllerVisual(cursorValue, 'color', opts);\n        indicator.setStyle('fill', color);\n\n        // Update handle label position.\n        var textPoint = applyTransform$1(\n            shapes.indicatorLabelPoint,\n            getTransform(indicator, this.group)\n        );\n\n        var indicatorLabel = shapes.indicatorLabel;\n        indicatorLabel.attr('invisible', false);\n        var align = this._applyTransform('left', shapes.barGroup);\n        var orient = this._orient;\n        indicatorLabel.setStyle({\n            text: (rangeSymbol ? rangeSymbol : '') + visualMapModel.formatValueText(textValue),\n            textVerticalAlign: orient === 'horizontal' ? align : 'middle',\n            textAlign: orient === 'horizontal' ? 'center' : align,\n            x: textPoint[0],\n            y: textPoint[1]\n        });\n    },\n\n    /**\n     * @private\n     */\n    _enableHoverLinkToSeries: function () {\n        var self = this;\n        this._shapes.barGroup\n\n            .on('mousemove', function (e) {\n                self._hovering = true;\n\n                if (!self._dragging) {\n                    var itemSize = self.visualMapModel.itemSize;\n                    var pos = self._applyTransform(\n                        [e.offsetX, e.offsetY], self._shapes.barGroup, true, true\n                    );\n                    // For hover link show when hover handle, which might be\n                    // below or upper than sizeExtent.\n                    pos[1] = mathMin$7(mathMax$7(0, pos[1]), itemSize[1]);\n                    self._doHoverLinkToSeries(\n                        pos[1],\n                        0 <= pos[0] && pos[0] <= itemSize[0]\n                    );\n                }\n            })\n\n            .on('mouseout', function () {\n                // When mouse is out of handle, hoverLink still need\n                // to be displayed when realtime is set as false.\n                self._hovering = false;\n                !self._dragging && self._clearHoverLinkToSeries();\n            });\n    },\n\n    /**\n     * @private\n     */\n    _enableHoverLinkFromSeries: function () {\n        var zr = this.api.getZr();\n\n        if (this.visualMapModel.option.hoverLink) {\n            zr.on('mouseover', this._hoverLinkFromSeriesMouseOver, this);\n            zr.on('mouseout', this._hideIndicator, this);\n        }\n        else {\n            this._clearHoverLinkFromSeries();\n        }\n    },\n\n    /**\n     * @private\n     */\n    _doHoverLinkToSeries: function (cursorPos, hoverOnBar) {\n        var visualMapModel = this.visualMapModel;\n        var itemSize = visualMapModel.itemSize;\n\n        if (!visualMapModel.option.hoverLink) {\n            return;\n        }\n\n        var sizeExtent = [0, itemSize[1]];\n        var dataExtent = visualMapModel.getExtent();\n\n        // For hover link show when hover handle, which might be below or upper than sizeExtent.\n        cursorPos = mathMin$7(mathMax$7(sizeExtent[0], cursorPos), sizeExtent[1]);\n\n        var halfHoverLinkSize = getHalfHoverLinkSize(visualMapModel, dataExtent, sizeExtent);\n        var hoverRange = [cursorPos - halfHoverLinkSize, cursorPos + halfHoverLinkSize];\n        var cursorValue = linearMap$3(cursorPos, sizeExtent, dataExtent, true);\n        var valueRange = [\n            linearMap$3(hoverRange[0], sizeExtent, dataExtent, true),\n            linearMap$3(hoverRange[1], sizeExtent, dataExtent, true)\n        ];\n        // Consider data range is out of visualMap range, see test/visualMap-continuous.html,\n        // where china and india has very large population.\n        hoverRange[0] < sizeExtent[0] && (valueRange[0] = -Infinity);\n        hoverRange[1] > sizeExtent[1] && (valueRange[1] = Infinity);\n\n        // Do not show indicator when mouse is over handle,\n        // otherwise labels overlap, especially when dragging.\n        if (hoverOnBar) {\n            if (valueRange[0] === -Infinity) {\n                this._showIndicator(cursorValue, valueRange[1], '< ', halfHoverLinkSize);\n            }\n            else if (valueRange[1] === Infinity) {\n                this._showIndicator(cursorValue, valueRange[0], '> ', halfHoverLinkSize);\n            }\n            else {\n                this._showIndicator(cursorValue, cursorValue, '≈ ', halfHoverLinkSize);\n            }\n        }\n\n        // When realtime is set as false, handles, which are in barGroup,\n        // also trigger hoverLink, which help user to realize where they\n        // focus on when dragging. (see test/heatmap-large.html)\n        // When realtime is set as true, highlight will not show when hover\n        // handle, because the label on handle, which displays a exact value\n        // but not range, might mislead users.\n        var oldBatch = this._hoverLinkDataIndices;\n        var newBatch = [];\n        if (hoverOnBar || useHoverLinkOnHandle(visualMapModel)) {\n            newBatch = this._hoverLinkDataIndices = visualMapModel.findTargetDataIndices(valueRange);\n        }\n\n        var resultBatches = compressBatches(oldBatch, newBatch);\n\n        this._dispatchHighDown('downplay', makeHighDownBatch(resultBatches[0], visualMapModel));\n        this._dispatchHighDown('highlight', makeHighDownBatch(resultBatches[1], visualMapModel));\n    },\n\n    /**\n     * @private\n     */\n    _hoverLinkFromSeriesMouseOver: function (e) {\n        var el = e.target;\n        var visualMapModel = this.visualMapModel;\n\n        if (!el || el.dataIndex == null) {\n            return;\n        }\n\n        var dataModel = this.ecModel.getSeriesByIndex(el.seriesIndex);\n\n        if (!visualMapModel.isTargetSeries(dataModel)) {\n            return;\n        }\n\n        var data = dataModel.getData(el.dataType);\n        var value = data.get(visualMapModel.getDataDimension(data), el.dataIndex, true);\n\n        if (!isNaN(value)) {\n            this._showIndicator(value, value);\n        }\n    },\n\n    /**\n     * @private\n     */\n    _hideIndicator: function () {\n        var shapes = this._shapes;\n        shapes.indicator && shapes.indicator.attr('invisible', true);\n        shapes.indicatorLabel && shapes.indicatorLabel.attr('invisible', true);\n    },\n\n    /**\n     * @private\n     */\n    _clearHoverLinkToSeries: function () {\n        this._hideIndicator();\n\n        var indices = this._hoverLinkDataIndices;\n        this._dispatchHighDown('downplay', makeHighDownBatch(indices, this.visualMapModel));\n\n        indices.length = 0;\n    },\n\n    /**\n     * @private\n     */\n    _clearHoverLinkFromSeries: function () {\n        this._hideIndicator();\n\n        var zr = this.api.getZr();\n        zr.off('mouseover', this._hoverLinkFromSeriesMouseOver);\n        zr.off('mouseout', this._hideIndicator);\n    },\n\n    /**\n     * @private\n     */\n    _applyTransform: function (vertex, element, inverse, global) {\n        var transform = getTransform(element, global ? null : this.group);\n\n        return graphic[\n            isArray(vertex) ? 'applyTransform' : 'transformDirection'\n        ](vertex, transform, inverse);\n    },\n\n    /**\n     * @private\n     */\n    _dispatchHighDown: function (type, batch) {\n        batch && batch.length && this.api.dispatchAction({\n            type: type,\n            batch: batch\n        });\n    },\n\n    /**\n     * @override\n     */\n    dispose: function () {\n        this._clearHoverLinkFromSeries();\n        this._clearHoverLinkToSeries();\n    },\n\n    /**\n     * @override\n     */\n    remove: function () {\n        this._clearHoverLinkFromSeries();\n        this._clearHoverLinkToSeries();\n    }\n\n});\n\nfunction createPolygon(points, cursor, onDrift, onDragEnd) {\n    return new Polygon({\n        shape: {points: points},\n        draggable: !!onDrift,\n        cursor: cursor,\n        drift: onDrift,\n        onmousemove: function (e) {\n            // Fot mobile devicem, prevent screen slider on the button.\n            stop(e.event);\n        },\n        ondragend: onDragEnd\n    });\n}\n\nfunction createHandlePoints(handleIndex, textSize) {\n    return handleIndex === 0\n        ? [[0, 0], [textSize, 0], [textSize, -textSize]]\n        : [[0, 0], [textSize, 0], [textSize, textSize]];\n}\n\nfunction createIndicatorPoints(isRange, halfHoverLinkSize, pos, extentMax) {\n    return isRange\n        ? [ // indicate range\n            [0, -mathMin$7(halfHoverLinkSize, mathMax$7(pos, 0))],\n            [HOVER_LINK_OUT, 0],\n            [0, mathMin$7(halfHoverLinkSize, mathMax$7(extentMax - pos, 0))]\n        ]\n        : [ // indicate single value\n            [0, 0], [5, -5], [5, 5]\n        ];\n}\n\nfunction getHalfHoverLinkSize(visualMapModel, dataExtent, sizeExtent) {\n    var halfHoverLinkSize = HOVER_LINK_SIZE / 2;\n    var hoverLinkDataSize = visualMapModel.get('hoverLinkDataSize');\n    if (hoverLinkDataSize) {\n        halfHoverLinkSize = linearMap$3(hoverLinkDataSize, dataExtent, sizeExtent, true) / 2;\n    }\n    return halfHoverLinkSize;\n}\n\nfunction useHoverLinkOnHandle(visualMapModel) {\n    var hoverLinkOnHandle = visualMapModel.get('hoverLinkOnHandle');\n    return !!(hoverLinkOnHandle == null ? visualMapModel.get('realtime') : hoverLinkOnHandle);\n}\n\nfunction getCursor$1(orient) {\n    return orient === 'vertical' ? 'ns-resize' : 'ew-resize';\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar actionInfo$2 = {\n    type: 'selectDataRange',\n    event: 'dataRangeSelected',\n    // FIXME use updateView appears wrong\n    update: 'update'\n};\n\nregisterAction(actionInfo$2, function (payload, ecModel) {\n\n    ecModel.eachComponent({mainType: 'visualMap', query: payload}, function (model) {\n        model.setSelected(payload.selected);\n    });\n\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * DataZoom component entry\n */\n\nregisterPreprocessor(preprocessor$3);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar PiecewiseModel = VisualMapModel.extend({\n\n    type: 'visualMap.piecewise',\n\n    /**\n     * Order Rule:\n     *\n     * option.categories / option.pieces / option.text / option.selected:\n     *     If !option.inverse,\n     *     Order when vertical: ['top', ..., 'bottom'].\n     *     Order when horizontal: ['left', ..., 'right'].\n     *     If option.inverse, the meaning of\n     *     the order should be reversed.\n     *\n     * this._pieceList:\n     *     The order is always [low, ..., high].\n     *\n     * Mapping from location to low-high:\n     *     If !option.inverse\n     *     When vertical, top is high.\n     *     When horizontal, right is high.\n     *     If option.inverse, reverse.\n     */\n\n    /**\n     * @protected\n     */\n    defaultOption: {\n        selected: null,             // Object. If not specified, means selected.\n                                    // When pieces and splitNumber: {'0': true, '5': true}\n                                    // When categories: {'cate1': false, 'cate3': true}\n                                    // When selected === false, means all unselected.\n\n        minOpen: false,             // Whether include values that smaller than `min`.\n        maxOpen: false,             // Whether include values that bigger than `max`.\n\n        align: 'auto',              // 'auto', 'left', 'right'\n        itemWidth: 20,              // When put the controller vertically, it is the length of\n                                    // horizontal side of each item. Otherwise, vertical side.\n        itemHeight: 14,             // When put the controller vertically, it is the length of\n                                    // vertical side of each item. Otherwise, horizontal side.\n        itemSymbol: 'roundRect',\n        pieceList: null,            // Each item is Object, with some of those attrs:\n                                    // {min, max, lt, gt, lte, gte, value,\n                                    // color, colorSaturation, colorAlpha, opacity,\n                                    // symbol, symbolSize}, which customize the range or visual\n                                    // coding of the certain piece. Besides, see \"Order Rule\".\n        categories: null,           // category names, like: ['some1', 'some2', 'some3'].\n                                    // Attr min/max are ignored when categories set. See \"Order Rule\"\n        splitNumber: 5,             // If set to 5, auto split five pieces equally.\n                                    // If set to 0 and component type not set, component type will be\n                                    // determined as \"continuous\". (It is less reasonable but for ec2\n                                    // compatibility, see echarts/component/visualMap/typeDefaulter)\n        selectedMode: 'multiple',   // Can be 'multiple' or 'single'.\n        itemGap: 10,                // The gap between two items, in px.\n        hoverLink: true,            // Enable hover highlight.\n\n        showLabel: null             // By default, when text is used, label will hide (the logic\n                                    // is remained for compatibility reason)\n    },\n\n    /**\n     * @override\n     */\n    optionUpdated: function (newOption, isInit) {\n        PiecewiseModel.superApply(this, 'optionUpdated', arguments);\n\n        /**\n         * The order is always [low, ..., high].\n         * [{text: string, interval: Array.<number>}, ...]\n         * @private\n         * @type {Array.<Object>}\n         */\n        this._pieceList = [];\n\n        this.resetExtent();\n\n        /**\n         * 'pieces', 'categories', 'splitNumber'\n         * @type {string}\n         */\n        var mode = this._mode = this._determineMode();\n\n        resetMethods[this._mode].call(this);\n\n        this._resetSelected(newOption, isInit);\n\n        var categories = this.option.categories;\n\n        this.resetVisual(function (mappingOption, state) {\n            if (mode === 'categories') {\n                mappingOption.mappingMethod = 'category';\n                mappingOption.categories = clone(categories);\n            }\n            else {\n                mappingOption.dataExtent = this.getExtent();\n                mappingOption.mappingMethod = 'piecewise';\n                mappingOption.pieceList = map(this._pieceList, function (piece) {\n                    var piece = clone(piece);\n                    if (state !== 'inRange') {\n                        // FIXME\n                        // outOfRange do not support special visual in pieces.\n                        piece.visual = null;\n                    }\n                    return piece;\n                });\n            }\n        });\n    },\n\n    /**\n     * @protected\n     * @override\n     */\n    completeVisualOption: function () {\n        // Consider this case:\n        // visualMap: {\n        //      pieces: [{symbol: 'circle', lt: 0}, {symbol: 'rect', gte: 0}]\n        // }\n        // where no inRange/outOfRange set but only pieces. So we should make\n        // default inRange/outOfRange for this case, otherwise visuals that only\n        // appear in `pieces` will not be taken into account in visual encoding.\n\n        var option = this.option;\n        var visualTypesInPieces = {};\n        var visualTypes = VisualMapping.listVisualTypes();\n        var isCategory = this.isCategory();\n\n        each$1(option.pieces, function (piece) {\n            each$1(visualTypes, function (visualType) {\n                if (piece.hasOwnProperty(visualType)) {\n                    visualTypesInPieces[visualType] = 1;\n                }\n            });\n        });\n\n        each$1(visualTypesInPieces, function (v, visualType) {\n            var exists = 0;\n            each$1(this.stateList, function (state) {\n                exists |= has(option, state, visualType)\n                    || has(option.target, state, visualType);\n            }, this);\n\n            !exists && each$1(this.stateList, function (state) {\n                (option[state] || (option[state] = {}))[visualType] = visualDefault.get(\n                    visualType, state === 'inRange' ? 'active' : 'inactive', isCategory\n                );\n            });\n        }, this);\n\n        function has(obj, state, visualType) {\n            return obj && obj[state] && (\n                isObject$1(obj[state])\n                    ? obj[state].hasOwnProperty(visualType)\n                    : obj[state] === visualType // e.g., inRange: 'symbol'\n            );\n        }\n\n        VisualMapModel.prototype.completeVisualOption.apply(this, arguments);\n    },\n\n    _resetSelected: function (newOption, isInit) {\n        var thisOption = this.option;\n        var pieceList = this._pieceList;\n\n        // Selected do not merge but all override.\n        var selected = (isInit ? thisOption : newOption).selected || {};\n        thisOption.selected = selected;\n\n        // Consider 'not specified' means true.\n        each$1(pieceList, function (piece, index) {\n            var key = this.getSelectedMapKey(piece);\n            if (!selected.hasOwnProperty(key)) {\n                selected[key] = true;\n            }\n        }, this);\n\n        if (thisOption.selectedMode === 'single') {\n            // Ensure there is only one selected.\n            var hasSel = false;\n\n            each$1(pieceList, function (piece, index) {\n                var key = this.getSelectedMapKey(piece);\n                if (selected[key]) {\n                    hasSel\n                        ? (selected[key] = false)\n                        : (hasSel = true);\n                }\n            }, this);\n        }\n        // thisOption.selectedMode === 'multiple', default: all selected.\n    },\n\n    /**\n     * @public\n     */\n    getSelectedMapKey: function (piece) {\n        return this._mode === 'categories'\n            ? piece.value + '' : piece.index + '';\n    },\n\n    /**\n     * @public\n     */\n    getPieceList: function () {\n        return this._pieceList;\n    },\n\n    /**\n     * @private\n     * @return {string}\n     */\n    _determineMode: function () {\n        var option = this.option;\n\n        return option.pieces && option.pieces.length > 0\n            ? 'pieces'\n            : this.option.categories\n            ? 'categories'\n            : 'splitNumber';\n    },\n\n    /**\n     * @public\n     * @override\n     */\n    setSelected: function (selected) {\n        this.option.selected = clone(selected);\n    },\n\n    /**\n     * @public\n     * @override\n     */\n    getValueState: function (value) {\n        var index = VisualMapping.findPieceIndex(value, this._pieceList);\n\n        return index != null\n            ? (this.option.selected[this.getSelectedMapKey(this._pieceList[index])]\n                ? 'inRange' : 'outOfRange'\n            )\n            : 'outOfRange';\n    },\n\n    /**\n     * @public\n     * @params {number} pieceIndex piece index in visualMapModel.getPieceList()\n     * @return {Array.<Object>} [{seriesId, dataIndex: <Array.<number>>}, ...]\n     */\n    findTargetDataIndices: function (pieceIndex) {\n        var result = [];\n\n        this.eachTargetSeries(function (seriesModel) {\n            var dataIndices = [];\n            var data = seriesModel.getData();\n\n            data.each(this.getDataDimension(data), function (value, dataIndex) {\n                // Should always base on model pieceList, because it is order sensitive.\n                var pIdx = VisualMapping.findPieceIndex(value, this._pieceList);\n                pIdx === pieceIndex && dataIndices.push(dataIndex);\n            }, this);\n\n            result.push({seriesId: seriesModel.id, dataIndex: dataIndices});\n        }, this);\n\n        return result;\n    },\n\n    /**\n     * @private\n     * @param {Object} piece piece.value or piece.interval is required.\n     * @return {number} Can be Infinity or -Infinity\n     */\n    getRepresentValue: function (piece) {\n        var representValue;\n        if (this.isCategory()) {\n            representValue = piece.value;\n        }\n        else {\n            if (piece.value != null) {\n                representValue = piece.value;\n            }\n            else {\n                var pieceInterval = piece.interval || [];\n                representValue = (pieceInterval[0] === -Infinity && pieceInterval[1] === Infinity)\n                    ? 0\n                    : (pieceInterval[0] + pieceInterval[1]) / 2;\n            }\n        }\n        return representValue;\n    },\n\n    getVisualMeta: function (getColorVisual) {\n        // Do not support category. (category axis is ordinal, numerical)\n        if (this.isCategory()) {\n            return;\n        }\n\n        var stops = [];\n        var outerColors = [];\n        var visualMapModel = this;\n\n        function setStop(interval, valueState) {\n            var representValue = visualMapModel.getRepresentValue({interval: interval});\n            if (!valueState) {\n                valueState = visualMapModel.getValueState(representValue);\n            }\n            var color = getColorVisual(representValue, valueState);\n            if (interval[0] === -Infinity) {\n                outerColors[0] = color;\n            }\n            else if (interval[1] === Infinity) {\n                outerColors[1] = color;\n            }\n            else {\n                stops.push(\n                    {value: interval[0], color: color},\n                    {value: interval[1], color: color}\n                );\n            }\n        }\n\n        // Suplement\n        var pieceList = this._pieceList.slice();\n        if (!pieceList.length) {\n            pieceList.push({interval: [-Infinity, Infinity]});\n        }\n        else {\n            var edge = pieceList[0].interval[0];\n            edge !== -Infinity && pieceList.unshift({interval: [-Infinity, edge]});\n            edge = pieceList[pieceList.length - 1].interval[1];\n            edge !== Infinity && pieceList.push({interval: [edge, Infinity]});\n        }\n\n        var curr = -Infinity;\n        each$1(pieceList, function (piece) {\n            var interval = piece.interval;\n            if (interval) {\n                // Fulfill gap.\n                interval[0] > curr && setStop([curr, interval[0]], 'outOfRange');\n                setStop(interval.slice());\n                curr = interval[1];\n            }\n        }, this);\n\n        return {stops: stops, outerColors: outerColors};\n    }\n\n});\n\n/**\n * Key is this._mode\n * @type {Object}\n * @this {module:echarts/component/viusalMap/PiecewiseMode}\n */\nvar resetMethods = {\n\n    splitNumber: function () {\n        var thisOption = this.option;\n        var pieceList = this._pieceList;\n        var precision = Math.min(thisOption.precision, 20);\n        var dataExtent = this.getExtent();\n        var splitNumber = thisOption.splitNumber;\n        splitNumber = Math.max(parseInt(splitNumber, 10), 1);\n        thisOption.splitNumber = splitNumber;\n\n        var splitStep = (dataExtent[1] - dataExtent[0]) / splitNumber;\n        // Precision auto-adaption\n        while (+splitStep.toFixed(precision) !== splitStep && precision < 5) {\n            precision++;\n        }\n        thisOption.precision = precision;\n        splitStep = +splitStep.toFixed(precision);\n\n        var index = 0;\n\n        if (thisOption.minOpen) {\n            pieceList.push({\n                index: index++,\n                interval: [-Infinity, dataExtent[0]],\n                close: [0, 0]\n            });\n        }\n\n        for (\n            var curr = dataExtent[0], len = index + splitNumber;\n            index < len;\n            curr += splitStep\n        ) {\n            var max = index === splitNumber - 1 ? dataExtent[1] : (curr + splitStep);\n\n            pieceList.push({\n                index: index++,\n                interval: [curr, max],\n                close: [1, 1]\n            });\n        }\n\n        if (thisOption.maxOpen) {\n            pieceList.push({\n                index: index++,\n                interval: [dataExtent[1], Infinity],\n                close: [0, 0]\n            });\n        }\n\n        reformIntervals(pieceList);\n\n        each$1(pieceList, function (piece) {\n            piece.text = this.formatValueText(piece.interval);\n        }, this);\n    },\n\n    categories: function () {\n        var thisOption = this.option;\n        each$1(thisOption.categories, function (cate) {\n            // FIXME category模式也使用pieceList，但在visualMapping中不是使用pieceList。\n            // 是否改一致。\n            this._pieceList.push({\n                text: this.formatValueText(cate, true),\n                value: cate\n            });\n        }, this);\n\n        // See \"Order Rule\".\n        normalizeReverse(thisOption, this._pieceList);\n    },\n\n    pieces: function () {\n        var thisOption = this.option;\n        var pieceList = this._pieceList;\n\n        each$1(thisOption.pieces, function (pieceListItem, index) {\n\n            if (!isObject$1(pieceListItem)) {\n                pieceListItem = {value: pieceListItem};\n            }\n\n            var item = {text: '', index: index};\n\n            if (pieceListItem.label != null) {\n                item.text = pieceListItem.label;\n            }\n\n            if (pieceListItem.hasOwnProperty('value')) {\n                var value = item.value = pieceListItem.value;\n                item.interval = [value, value];\n                item.close = [1, 1];\n            }\n            else {\n                // `min` `max` is legacy option.\n                // `lt` `gt` `lte` `gte` is recommanded.\n                var interval = item.interval = [];\n                var close = item.close = [0, 0];\n\n                var closeList = [1, 0, 1];\n                var infinityList = [-Infinity, Infinity];\n\n                var useMinMax = [];\n                for (var lg = 0; lg < 2; lg++) {\n                    var names = [['gte', 'gt', 'min'], ['lte', 'lt', 'max']][lg];\n                    for (var i = 0; i < 3 && interval[lg] == null; i++) {\n                        interval[lg] = pieceListItem[names[i]];\n                        close[lg] = closeList[i];\n                        useMinMax[lg] = i === 2;\n                    }\n                    interval[lg] == null && (interval[lg] = infinityList[lg]);\n                }\n                useMinMax[0] && interval[1] === Infinity && (close[0] = 0);\n                useMinMax[1] && interval[0] === -Infinity && (close[1] = 0);\n\n                if (__DEV__) {\n                    if (interval[0] > interval[1]) {\n                        console.warn(\n                            'Piece ' + index + 'is illegal: ' + interval\n                            + ' lower bound should not greater then uppper bound.'\n                        );\n                    }\n                }\n\n                if (interval[0] === interval[1] && close[0] && close[1]) {\n                    // Consider: [{min: 5, max: 5, visual: {...}}, {min: 0, max: 5}],\n                    // we use value to lift the priority when min === max\n                    item.value = interval[0];\n                }\n            }\n\n            item.visual = VisualMapping.retrieveVisuals(pieceListItem);\n\n            pieceList.push(item);\n\n        }, this);\n\n        // See \"Order Rule\".\n        normalizeReverse(thisOption, pieceList);\n        // Only pieces\n        reformIntervals(pieceList);\n\n        each$1(pieceList, function (piece) {\n            var close = piece.close;\n            var edgeSymbols = [['<', '≤'][close[1]], ['>', '≥'][close[0]]];\n            piece.text = piece.text || this.formatValueText(\n                piece.value != null ? piece.value : piece.interval,\n                false,\n                edgeSymbols\n            );\n        }, this);\n    }\n};\n\nfunction normalizeReverse(thisOption, pieceList) {\n    var inverse = thisOption.inverse;\n    if (thisOption.orient === 'vertical' ? !inverse : inverse) {\n            pieceList.reverse();\n    }\n}\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\nvar PiecewiseVisualMapView = VisualMapView.extend({\n\n    type: 'visualMap.piecewise',\n\n    /**\n     * @protected\n     * @override\n     */\n    doRender: function () {\n        var thisGroup = this.group;\n\n        thisGroup.removeAll();\n\n        var visualMapModel = this.visualMapModel;\n        var textGap = visualMapModel.get('textGap');\n        var textStyleModel = visualMapModel.textStyleModel;\n        var textFont = textStyleModel.getFont();\n        var textFill = textStyleModel.getTextColor();\n        var itemAlign = this._getItemAlign();\n        var itemSize = visualMapModel.itemSize;\n        var viewData = this._getViewData();\n        var endsText = viewData.endsText;\n        var showLabel = retrieve(visualMapModel.get('showLabel', true), !endsText);\n\n        endsText && this._renderEndsText(\n            thisGroup, endsText[0], itemSize, showLabel, itemAlign\n        );\n\n        each$1(viewData.viewPieceList, renderItem, this);\n\n        endsText && this._renderEndsText(\n            thisGroup, endsText[1], itemSize, showLabel, itemAlign\n        );\n\n        box(\n            visualMapModel.get('orient'), thisGroup, visualMapModel.get('itemGap')\n        );\n\n        this.renderBackground(thisGroup);\n\n        this.positionGroup(thisGroup);\n\n        function renderItem(item) {\n            var piece = item.piece;\n\n            var itemGroup = new Group();\n            itemGroup.onclick = bind(this._onItemClick, this, piece);\n\n            this._enableHoverLink(itemGroup, item.indexInModelPieceList);\n\n            var representValue = visualMapModel.getRepresentValue(piece);\n\n            this._createItemSymbol(\n                itemGroup, representValue, [0, 0, itemSize[0], itemSize[1]]\n            );\n\n            if (showLabel) {\n                var visualState = this.visualMapModel.getValueState(representValue);\n\n                itemGroup.add(new Text({\n                    style: {\n                        x: itemAlign === 'right' ? -textGap : itemSize[0] + textGap,\n                        y: itemSize[1] / 2,\n                        text: piece.text,\n                        textVerticalAlign: 'middle',\n                        textAlign: itemAlign,\n                        textFont: textFont,\n                        textFill: textFill,\n                        opacity: visualState === 'outOfRange' ? 0.5 : 1\n                    }\n                }));\n            }\n\n            thisGroup.add(itemGroup);\n        }\n    },\n\n    /**\n     * @private\n     */\n    _enableHoverLink: function (itemGroup, pieceIndex) {\n        itemGroup\n            .on('mouseover', bind(onHoverLink, this, 'highlight'))\n            .on('mouseout', bind(onHoverLink, this, 'downplay'));\n\n        function onHoverLink(method) {\n            var visualMapModel = this.visualMapModel;\n\n            visualMapModel.option.hoverLink && this.api.dispatchAction({\n                type: method,\n                batch: makeHighDownBatch(\n                    visualMapModel.findTargetDataIndices(pieceIndex),\n                    visualMapModel\n                )\n            });\n        }\n    },\n\n    /**\n     * @private\n     */\n    _getItemAlign: function () {\n        var visualMapModel = this.visualMapModel;\n        var modelOption = visualMapModel.option;\n\n        if (modelOption.orient === 'vertical') {\n            return getItemAlign(\n                visualMapModel, this.api, visualMapModel.itemSize\n            );\n        }\n        else { // horizontal, most case left unless specifying right.\n            var align = modelOption.align;\n            if (!align || align === 'auto') {\n                align = 'left';\n            }\n            return align;\n        }\n    },\n\n    /**\n     * @private\n     */\n    _renderEndsText: function (group, text, itemSize, showLabel, itemAlign) {\n        if (!text) {\n            return;\n        }\n\n        var itemGroup = new Group();\n        var textStyleModel = this.visualMapModel.textStyleModel;\n\n        itemGroup.add(new Text({\n            style: {\n                x: showLabel ? (itemAlign === 'right' ? itemSize[0] : 0) : itemSize[0] / 2,\n                y: itemSize[1] / 2,\n                textVerticalAlign: 'middle',\n                textAlign: showLabel ? itemAlign : 'center',\n                text: text,\n                textFont: textStyleModel.getFont(),\n                textFill: textStyleModel.getTextColor()\n            }\n        }));\n\n        group.add(itemGroup);\n    },\n\n    /**\n     * @private\n     * @return {Object} {peiceList, endsText} The order is the same as screen pixel order.\n     */\n    _getViewData: function () {\n        var visualMapModel = this.visualMapModel;\n\n        var viewPieceList = map(visualMapModel.getPieceList(), function (piece, index) {\n            return {piece: piece, indexInModelPieceList: index};\n        });\n        var endsText = visualMapModel.get('text');\n\n        // Consider orient and inverse.\n        var orient = visualMapModel.get('orient');\n        var inverse = visualMapModel.get('inverse');\n\n        // Order of model pieceList is always [low, ..., high]\n        if (orient === 'horizontal' ? inverse : !inverse) {\n            viewPieceList.reverse();\n        }\n        // Origin order of endsText is [high, low]\n        else if (endsText) {\n            endsText = endsText.slice().reverse();\n        }\n\n        return {viewPieceList: viewPieceList, endsText: endsText};\n    },\n\n    /**\n     * @private\n     */\n    _createItemSymbol: function (group, representValue, shapeParam) {\n        group.add(createSymbol(\n            this.getControllerVisual(representValue, 'symbol'),\n            shapeParam[0], shapeParam[1], shapeParam[2], shapeParam[3],\n            this.getControllerVisual(representValue, 'color')\n        ));\n    },\n\n    /**\n     * @private\n     */\n    _onItemClick: function (piece) {\n        var visualMapModel = this.visualMapModel;\n        var option = visualMapModel.option;\n        var selected = clone(option.selected);\n        var newKey = visualMapModel.getSelectedMapKey(piece);\n\n        if (option.selectedMode === 'single') {\n            selected[newKey] = true;\n            each$1(selected, function (o, key) {\n                selected[key] = key === newKey;\n            });\n        }\n        else {\n            selected[newKey] = !selected[newKey];\n        }\n\n        this.api.dispatchAction({\n            type: 'selectDataRange',\n            from: this.uid,\n            visualMapId: this.visualMapModel.id,\n            selected: selected\n        });\n    }\n});\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * DataZoom component entry\n */\n\nregisterPreprocessor(preprocessor$3);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n/**\n * visualMap component entry\n */\n\nvar urn = 'urn:schemas-microsoft-com:vml';\nvar win = typeof window === 'undefined' ? null : window;\n\nvar vmlInited = false;\n\nvar doc = win && win.document;\n\nfunction createNode(tagName) {\n    return doCreateNode(tagName);\n}\n\n// Avoid assign to an exported variable, for transforming to cjs.\nvar doCreateNode;\n\nif (doc && !env$1.canvasSupported) {\n    try {\n        !doc.namespaces.zrvml && doc.namespaces.add('zrvml', urn);\n        doCreateNode = function (tagName) {\n            return doc.createElement('<zrvml:' + tagName + ' class=\"zrvml\">');\n        };\n    }\n    catch (e) {\n        doCreateNode = function (tagName) {\n            return doc.createElement('<' + tagName + ' xmlns=\"' + urn + '\" class=\"zrvml\">');\n        };\n    }\n}\n\n// From raphael\nfunction initVML() {\n    if (vmlInited || !doc) {\n        return;\n    }\n    vmlInited = true;\n\n    var styleSheets = doc.styleSheets;\n    if (styleSheets.length < 31) {\n        doc.createStyleSheet().addRule('.zrvml', 'behavior:url(#default#VML)');\n    }\n    else {\n        // http://msdn.microsoft.com/en-us/library/ms531194%28VS.85%29.aspx\n        styleSheets[0].addRule('.zrvml', 'behavior:url(#default#VML)');\n    }\n}\n\n// http://www.w3.org/TR/NOTE-VML\n// TODO Use proxy like svg instead of overwrite brush methods\n\nvar CMD$3 = PathProxy.CMD;\nvar round$3 = Math.round;\nvar sqrt = Math.sqrt;\nvar abs$1 = Math.abs;\nvar cos = Math.cos;\nvar sin = Math.sin;\nvar mathMax$8 = Math.max;\n\nif (!env$1.canvasSupported) {\n\n    var comma = ',';\n    var imageTransformPrefix = 'progid:DXImageTransform.Microsoft';\n\n    var Z = 21600;\n    var Z2 = Z / 2;\n\n    var ZLEVEL_BASE = 100000;\n    var Z_BASE$1 = 1000;\n\n    var initRootElStyle = function (el) {\n        el.style.cssText = 'position:absolute;left:0;top:0;width:1px;height:1px;';\n        el.coordsize = Z + ',' + Z;\n        el.coordorigin = '0,0';\n    };\n\n    var encodeHtmlAttribute = function (s) {\n        return String(s).replace(/&/g, '&amp;').replace(/\"/g, '&quot;');\n    };\n\n    var rgb2Str = function (r, g, b) {\n        return 'rgb(' + [r, g, b].join(',') + ')';\n    };\n\n    var append = function (parent, child) {\n        if (child && parent && child.parentNode !== parent) {\n            parent.appendChild(child);\n        }\n    };\n\n    var remove = function (parent, child) {\n        if (child && parent && child.parentNode === parent) {\n            parent.removeChild(child);\n        }\n    };\n\n    var getZIndex = function (zlevel, z, z2) {\n        // z 的取值范围为 [0, 1000]\n        return (parseFloat(zlevel) || 0) * ZLEVEL_BASE + (parseFloat(z) || 0) * Z_BASE$1 + z2;\n    };\n\n    var parsePercent$3 = function (value, maxValue) {\n        if (typeof value === 'string') {\n            if (value.lastIndexOf('%') >= 0) {\n                return parseFloat(value) / 100 * maxValue;\n            }\n            return parseFloat(value);\n        }\n        return value;\n    };\n\n    /***************************************************\n     * PATH\n     **************************************************/\n\n    var setColorAndOpacity = function (el, color, opacity) {\n        var colorArr = parse(color);\n        opacity = +opacity;\n        if (isNaN(opacity)) {\n            opacity = 1;\n        }\n        if (colorArr) {\n            el.color = rgb2Str(colorArr[0], colorArr[1], colorArr[2]);\n            el.opacity = opacity * colorArr[3];\n        }\n    };\n\n    var getColorAndAlpha = function (color) {\n        var colorArr = parse(color);\n        return [\n            rgb2Str(colorArr[0], colorArr[1], colorArr[2]),\n            colorArr[3]\n        ];\n    };\n\n    var updateFillNode = function (el, style, zrEl) {\n        // TODO pattern\n        var fill = style.fill;\n        if (fill != null) {\n            // Modified from excanvas\n            if (fill instanceof Gradient) {\n                var gradientType;\n                var angle = 0;\n                var focus = [0, 0];\n                // additional offset\n                var shift = 0;\n                // scale factor for offset\n                var expansion = 1;\n                var rect = zrEl.getBoundingRect();\n                var rectWidth = rect.width;\n                var rectHeight = rect.height;\n                if (fill.type === 'linear') {\n                    gradientType = 'gradient';\n                    var transform = zrEl.transform;\n                    var p0 = [fill.x * rectWidth, fill.y * rectHeight];\n                    var p1 = [fill.x2 * rectWidth, fill.y2 * rectHeight];\n                    if (transform) {\n                        applyTransform(p0, p0, transform);\n                        applyTransform(p1, p1, transform);\n                    }\n                    var dx = p1[0] - p0[0];\n                    var dy = p1[1] - p0[1];\n                    angle = Math.atan2(dx, dy) * 180 / Math.PI;\n                    // The angle should be a non-negative number.\n                    if (angle < 0) {\n                        angle += 360;\n                    }\n\n                    // Very small angles produce an unexpected result because they are\n                    // converted to a scientific notation string.\n                    if (angle < 1e-6) {\n                        angle = 0;\n                    }\n                }\n                else {\n                    gradientType = 'gradientradial';\n                    var p0 = [fill.x * rectWidth, fill.y * rectHeight];\n                    var transform = zrEl.transform;\n                    var scale$$1 = zrEl.scale;\n                    var width = rectWidth;\n                    var height = rectHeight;\n                    focus = [\n                        // Percent in bounding rect\n                        (p0[0] - rect.x) / width,\n                        (p0[1] - rect.y) / height\n                    ];\n                    if (transform) {\n                        applyTransform(p0, p0, transform);\n                    }\n\n                    width /= scale$$1[0] * Z;\n                    height /= scale$$1[1] * Z;\n                    var dimension = mathMax$8(width, height);\n                    shift = 2 * 0 / dimension;\n                    expansion = 2 * fill.r / dimension - shift;\n                }\n\n                // We need to sort the color stops in ascending order by offset,\n                // otherwise IE won't interpret it correctly.\n                var stops = fill.colorStops.slice();\n                stops.sort(function (cs1, cs2) {\n                    return cs1.offset - cs2.offset;\n                });\n\n                var length$$1 = stops.length;\n                // Color and alpha list of first and last stop\n                var colorAndAlphaList = [];\n                var colors = [];\n                for (var i = 0; i < length$$1; i++) {\n                    var stop = stops[i];\n                    var colorAndAlpha = getColorAndAlpha(stop.color);\n                    colors.push(stop.offset * expansion + shift + ' ' + colorAndAlpha[0]);\n                    if (i === 0 || i === length$$1 - 1) {\n                        colorAndAlphaList.push(colorAndAlpha);\n                    }\n                }\n\n                if (length$$1 >= 2) {\n                    var color1 = colorAndAlphaList[0][0];\n                    var color2 = colorAndAlphaList[1][0];\n                    var opacity1 = colorAndAlphaList[0][1] * style.opacity;\n                    var opacity2 = colorAndAlphaList[1][1] * style.opacity;\n\n                    el.type = gradientType;\n                    el.method = 'none';\n                    el.focus = '100%';\n                    el.angle = angle;\n                    el.color = color1;\n                    el.color2 = color2;\n                    el.colors = colors.join(',');\n                    // When colors attribute is used, the meanings of opacity and o:opacity2\n                    // are reversed.\n                    el.opacity = opacity2;\n                    // FIXME g_o_:opacity ?\n                    el.opacity2 = opacity1;\n                }\n                if (gradientType === 'radial') {\n                    el.focusposition = focus.join(',');\n                }\n            }\n            else {\n                // FIXME Change from Gradient fill to color fill\n                setColorAndOpacity(el, fill, style.opacity);\n            }\n        }\n    };\n\n    var updateStrokeNode = function (el, style) {\n        // if (style.lineJoin != null) {\n        //     el.joinstyle = style.lineJoin;\n        // }\n        // if (style.miterLimit != null) {\n        //     el.miterlimit = style.miterLimit * Z;\n        // }\n        // if (style.lineCap != null) {\n        //     el.endcap = style.lineCap;\n        // }\n        if (style.lineDash) {\n            el.dashstyle = style.lineDash.join(' ');\n        }\n        if (style.stroke != null && !(style.stroke instanceof Gradient)) {\n            setColorAndOpacity(el, style.stroke, style.opacity);\n        }\n    };\n\n    var updateFillAndStroke = function (vmlEl, type, style, zrEl) {\n        var isFill = type === 'fill';\n        var el = vmlEl.getElementsByTagName(type)[0];\n        // Stroke must have lineWidth\n        if (style[type] != null && style[type] !== 'none' && (isFill || (!isFill && style.lineWidth))) {\n            vmlEl[isFill ? 'filled' : 'stroked'] = 'true';\n            // FIXME Remove before updating, or set `colors` will throw error\n            if (style[type] instanceof Gradient) {\n                remove(vmlEl, el);\n            }\n            if (!el) {\n                el = createNode(type);\n            }\n\n            isFill ? updateFillNode(el, style, zrEl) : updateStrokeNode(el, style);\n            append(vmlEl, el);\n        }\n        else {\n            vmlEl[isFill ? 'filled' : 'stroked'] = 'false';\n            remove(vmlEl, el);\n        }\n    };\n\n    var points$3 = [[], [], []];\n    var pathDataToString = function (path, m) {\n        var M = CMD$3.M;\n        var C = CMD$3.C;\n        var L = CMD$3.L;\n        var A = CMD$3.A;\n        var Q = CMD$3.Q;\n\n        var str = [];\n        var nPoint;\n        var cmdStr;\n        var cmd;\n        var i;\n        var xi;\n        var yi;\n        var data = path.data;\n        var dataLength = path.len();\n        for (i = 0; i < dataLength;) {\n            cmd = data[i++];\n            cmdStr = '';\n            nPoint = 0;\n            switch (cmd) {\n                case M:\n                    cmdStr = ' m ';\n                    nPoint = 1;\n                    xi = data[i++];\n                    yi = data[i++];\n                    points$3[0][0] = xi;\n                    points$3[0][1] = yi;\n                    break;\n                case L:\n                    cmdStr = ' l ';\n                    nPoint = 1;\n                    xi = data[i++];\n                    yi = data[i++];\n                    points$3[0][0] = xi;\n                    points$3[0][1] = yi;\n                    break;\n                case Q:\n                case C:\n                    cmdStr = ' c ';\n                    nPoint = 3;\n                    var x1 = data[i++];\n                    var y1 = data[i++];\n                    var x2 = data[i++];\n                    var y2 = data[i++];\n                    var x3;\n                    var y3;\n                    if (cmd === Q) {\n                        // Convert quadratic to cubic using degree elevation\n                        x3 = x2;\n                        y3 = y2;\n                        x2 = (x2 + 2 * x1) / 3;\n                        y2 = (y2 + 2 * y1) / 3;\n                        x1 = (xi + 2 * x1) / 3;\n                        y1 = (yi + 2 * y1) / 3;\n                    }\n                    else {\n                        x3 = data[i++];\n                        y3 = data[i++];\n                    }\n                    points$3[0][0] = x1;\n                    points$3[0][1] = y1;\n                    points$3[1][0] = x2;\n                    points$3[1][1] = y2;\n                    points$3[2][0] = x3;\n                    points$3[2][1] = y3;\n\n                    xi = x3;\n                    yi = y3;\n                    break;\n                case A:\n                    var x = 0;\n                    var y = 0;\n                    var sx = 1;\n                    var sy = 1;\n                    var angle = 0;\n                    if (m) {\n                        // Extract SRT from matrix\n                        x = m[4];\n                        y = m[5];\n                        sx = sqrt(m[0] * m[0] + m[1] * m[1]);\n                        sy = sqrt(m[2] * m[2] + m[3] * m[3]);\n                        angle = Math.atan2(-m[1] / sy, m[0] / sx);\n                    }\n\n                    var cx = data[i++];\n                    var cy = data[i++];\n                    var rx = data[i++];\n                    var ry = data[i++];\n                    var startAngle = data[i++] + angle;\n                    var endAngle = data[i++] + startAngle + angle;\n                    // FIXME\n                    // var psi = data[i++];\n                    i++;\n                    var clockwise = data[i++];\n\n                    var x0 = cx + cos(startAngle) * rx;\n                    var y0 = cy + sin(startAngle) * ry;\n\n                    var x1 = cx + cos(endAngle) * rx;\n                    var y1 = cy + sin(endAngle) * ry;\n\n                    var type = clockwise ? ' wa ' : ' at ';\n                    if (Math.abs(x0 - x1) < 1e-4) {\n                        // IE won't render arches drawn counter clockwise if x0 == x1.\n                        if (Math.abs(endAngle - startAngle) > 1e-2) {\n                            // Offset x0 by 1/80 of a pixel. Use something\n                            // that can be represented in binary\n                            if (clockwise) {\n                                x0 += 270 / Z;\n                            }\n                        }\n                        else {\n                            // Avoid case draw full circle\n                            if (Math.abs(y0 - cy) < 1e-4) {\n                                if ((clockwise && x0 < cx) || (!clockwise && x0 > cx)) {\n                                    y1 -= 270 / Z;\n                                }\n                                else {\n                                    y1 += 270 / Z;\n                                }\n                            }\n                            else if ((clockwise && y0 < cy) || (!clockwise && y0 > cy)) {\n                                x1 += 270 / Z;\n                            }\n                            else {\n                                x1 -= 270 / Z;\n                            }\n                        }\n                    }\n                    str.push(\n                        type,\n                        round$3(((cx - rx) * sx + x) * Z - Z2), comma,\n                        round$3(((cy - ry) * sy + y) * Z - Z2), comma,\n                        round$3(((cx + rx) * sx + x) * Z - Z2), comma,\n                        round$3(((cy + ry) * sy + y) * Z - Z2), comma,\n                        round$3((x0 * sx + x) * Z - Z2), comma,\n                        round$3((y0 * sy + y) * Z - Z2), comma,\n                        round$3((x1 * sx + x) * Z - Z2), comma,\n                        round$3((y1 * sy + y) * Z - Z2)\n                    );\n\n                    xi = x1;\n                    yi = y1;\n                    break;\n                case CMD$3.R:\n                    var p0 = points$3[0];\n                    var p1 = points$3[1];\n                    // x0, y0\n                    p0[0] = data[i++];\n                    p0[1] = data[i++];\n                    // x1, y1\n                    p1[0] = p0[0] + data[i++];\n                    p1[1] = p0[1] + data[i++];\n\n                    if (m) {\n                        applyTransform(p0, p0, m);\n                        applyTransform(p1, p1, m);\n                    }\n\n                    p0[0] = round$3(p0[0] * Z - Z2);\n                    p1[0] = round$3(p1[0] * Z - Z2);\n                    p0[1] = round$3(p0[1] * Z - Z2);\n                    p1[1] = round$3(p1[1] * Z - Z2);\n                    str.push(\n                        // x0, y0\n                        ' m ', p0[0], comma, p0[1],\n                        // x1, y0\n                        ' l ', p1[0], comma, p0[1],\n                        // x1, y1\n                        ' l ', p1[0], comma, p1[1],\n                        // x0, y1\n                        ' l ', p0[0], comma, p1[1]\n                    );\n                    break;\n                case CMD$3.Z:\n                    // FIXME Update xi, yi\n                    str.push(' x ');\n            }\n\n            if (nPoint > 0) {\n                str.push(cmdStr);\n                for (var k = 0; k < nPoint; k++) {\n                    var p = points$3[k];\n\n                    m && applyTransform(p, p, m);\n                    // 不 round 会非常慢\n                    str.push(\n                        round$3(p[0] * Z - Z2), comma, round$3(p[1] * Z - Z2),\n                        k < nPoint - 1 ? comma : ''\n                    );\n                }\n            }\n        }\n\n        return str.join('');\n    };\n\n    // Rewrite the original path method\n    Path.prototype.brushVML = function (vmlRoot) {\n        var style = this.style;\n\n        var vmlEl = this._vmlEl;\n        if (!vmlEl) {\n            vmlEl = createNode('shape');\n            initRootElStyle(vmlEl);\n\n            this._vmlEl = vmlEl;\n        }\n\n        updateFillAndStroke(vmlEl, 'fill', style, this);\n        updateFillAndStroke(vmlEl, 'stroke', style, this);\n\n        var m = this.transform;\n        var needTransform = m != null;\n        var strokeEl = vmlEl.getElementsByTagName('stroke')[0];\n        if (strokeEl) {\n            var lineWidth = style.lineWidth;\n            // Get the line scale.\n            // Determinant of this.m_ means how much the area is enlarged by the\n            // transformation. So its square root can be used as a scale factor\n            // for width.\n            if (needTransform && !style.strokeNoScale) {\n                var det = m[0] * m[3] - m[1] * m[2];\n                lineWidth *= sqrt(abs$1(det));\n            }\n            strokeEl.weight = lineWidth + 'px';\n        }\n\n        var path = this.path || (this.path = new PathProxy());\n        if (this.__dirtyPath) {\n            path.beginPath();\n            path.subPixelOptimize = false;\n            this.buildPath(path, this.shape);\n            path.toStatic();\n            this.__dirtyPath = false;\n        }\n\n        vmlEl.path = pathDataToString(path, this.transform);\n\n        vmlEl.style.zIndex = getZIndex(this.zlevel, this.z, this.z2);\n\n        // Append to root\n        append(vmlRoot, vmlEl);\n\n        // Text\n        if (style.text != null) {\n            this.drawRectText(vmlRoot, this.getBoundingRect());\n        }\n        else {\n            this.removeRectText(vmlRoot);\n        }\n    };\n\n    Path.prototype.onRemove = function (vmlRoot) {\n        remove(vmlRoot, this._vmlEl);\n        this.removeRectText(vmlRoot);\n    };\n\n    Path.prototype.onAdd = function (vmlRoot) {\n        append(vmlRoot, this._vmlEl);\n        this.appendRectText(vmlRoot);\n    };\n\n    /***************************************************\n     * IMAGE\n     **************************************************/\n    var isImage = function (img) {\n        // FIXME img instanceof Image 如果 img 是一个字符串的时候，IE8 下会报错\n        return (typeof img === 'object') && img.tagName && img.tagName.toUpperCase() === 'IMG';\n        // return img instanceof Image;\n    };\n\n    // Rewrite the original path method\n    ZImage.prototype.brushVML = function (vmlRoot) {\n        var style = this.style;\n        var image = style.image;\n\n        // Image original width, height\n        var ow;\n        var oh;\n\n        if (isImage(image)) {\n            var src = image.src;\n            if (src === this._imageSrc) {\n                ow = this._imageWidth;\n                oh = this._imageHeight;\n            }\n            else {\n                var imageRuntimeStyle = image.runtimeStyle;\n                var oldRuntimeWidth = imageRuntimeStyle.width;\n                var oldRuntimeHeight = imageRuntimeStyle.height;\n                imageRuntimeStyle.width = 'auto';\n                imageRuntimeStyle.height = 'auto';\n\n                // get the original size\n                ow = image.width;\n                oh = image.height;\n\n                // and remove overides\n                imageRuntimeStyle.width = oldRuntimeWidth;\n                imageRuntimeStyle.height = oldRuntimeHeight;\n\n                // Caching image original width, height and src\n                this._imageSrc = src;\n                this._imageWidth = ow;\n                this._imageHeight = oh;\n            }\n            image = src;\n        }\n        else {\n            if (image === this._imageSrc) {\n                ow = this._imageWidth;\n                oh = this._imageHeight;\n            }\n        }\n        if (!image) {\n            return;\n        }\n\n        var x = style.x || 0;\n        var y = style.y || 0;\n\n        var dw = style.width;\n        var dh = style.height;\n\n        var sw = style.sWidth;\n        var sh = style.sHeight;\n        var sx = style.sx || 0;\n        var sy = style.sy || 0;\n\n        var hasCrop = sw && sh;\n\n        var vmlEl = this._vmlEl;\n        if (!vmlEl) {\n            // FIXME 使用 group 在 left, top 都不是 0 的时候就无法显示了。\n            // vmlEl = vmlCore.createNode('group');\n            vmlEl = doc.createElement('div');\n            initRootElStyle(vmlEl);\n\n            this._vmlEl = vmlEl;\n        }\n\n        var vmlElStyle = vmlEl.style;\n        var hasRotation = false;\n        var m;\n        var scaleX = 1;\n        var scaleY = 1;\n        if (this.transform) {\n            m = this.transform;\n            scaleX = sqrt(m[0] * m[0] + m[1] * m[1]);\n            scaleY = sqrt(m[2] * m[2] + m[3] * m[3]);\n\n            hasRotation = m[1] || m[2];\n        }\n        if (hasRotation) {\n            // If filters are necessary (rotation exists), create them\n            // filters are bog-slow, so only create them if abbsolutely necessary\n            // The following check doesn't account for skews (which don't exist\n            // in the canvas spec (yet) anyway.\n            // From excanvas\n            var p0 = [x, y];\n            var p1 = [x + dw, y];\n            var p2 = [x, y + dh];\n            var p3 = [x + dw, y + dh];\n            applyTransform(p0, p0, m);\n            applyTransform(p1, p1, m);\n            applyTransform(p2, p2, m);\n            applyTransform(p3, p3, m);\n\n            var maxX = mathMax$8(p0[0], p1[0], p2[0], p3[0]);\n            var maxY = mathMax$8(p0[1], p1[1], p2[1], p3[1]);\n\n            var transformFilter = [];\n            transformFilter.push('M11=', m[0] / scaleX, comma,\n                        'M12=', m[2] / scaleY, comma,\n                        'M21=', m[1] / scaleX, comma,\n                        'M22=', m[3] / scaleY, comma,\n                        'Dx=', round$3(x * scaleX + m[4]), comma,\n                        'Dy=', round$3(y * scaleY + m[5]));\n\n            vmlElStyle.padding = '0 ' + round$3(maxX) + 'px ' + round$3(maxY) + 'px 0';\n            // FIXME DXImageTransform 在 IE11 的兼容模式下不起作用\n            vmlElStyle.filter = imageTransformPrefix + '.Matrix('\n                + transformFilter.join('') + ', SizingMethod=clip)';\n\n        }\n        else {\n            if (m) {\n                x = x * scaleX + m[4];\n                y = y * scaleY + m[5];\n            }\n            vmlElStyle.filter = '';\n            vmlElStyle.left = round$3(x) + 'px';\n            vmlElStyle.top = round$3(y) + 'px';\n        }\n\n        var imageEl = this._imageEl;\n        var cropEl = this._cropEl;\n\n        if (!imageEl) {\n            imageEl = doc.createElement('div');\n            this._imageEl = imageEl;\n        }\n        var imageELStyle = imageEl.style;\n        if (hasCrop) {\n            // Needs know image original width and height\n            if (!(ow && oh)) {\n                var tmpImage = new Image();\n                var self = this;\n                tmpImage.onload = function () {\n                    tmpImage.onload = null;\n                    ow = tmpImage.width;\n                    oh = tmpImage.height;\n                    // Adjust image width and height to fit the ratio destinationSize / sourceSize\n                    imageELStyle.width = round$3(scaleX * ow * dw / sw) + 'px';\n                    imageELStyle.height = round$3(scaleY * oh * dh / sh) + 'px';\n\n                    // Caching image original width, height and src\n                    self._imageWidth = ow;\n                    self._imageHeight = oh;\n                    self._imageSrc = image;\n                };\n                tmpImage.src = image;\n            }\n            else {\n                imageELStyle.width = round$3(scaleX * ow * dw / sw) + 'px';\n                imageELStyle.height = round$3(scaleY * oh * dh / sh) + 'px';\n            }\n\n            if (!cropEl) {\n                cropEl = doc.createElement('div');\n                cropEl.style.overflow = 'hidden';\n                this._cropEl = cropEl;\n            }\n            var cropElStyle = cropEl.style;\n            cropElStyle.width = round$3((dw + sx * dw / sw) * scaleX);\n            cropElStyle.height = round$3((dh + sy * dh / sh) * scaleY);\n            cropElStyle.filter = imageTransformPrefix + '.Matrix(Dx='\n                    + (-sx * dw / sw * scaleX) + ',Dy=' + (-sy * dh / sh * scaleY) + ')';\n\n            if (!cropEl.parentNode) {\n                vmlEl.appendChild(cropEl);\n            }\n            if (imageEl.parentNode !== cropEl) {\n                cropEl.appendChild(imageEl);\n            }\n        }\n        else {\n            imageELStyle.width = round$3(scaleX * dw) + 'px';\n            imageELStyle.height = round$3(scaleY * dh) + 'px';\n\n            vmlEl.appendChild(imageEl);\n\n            if (cropEl && cropEl.parentNode) {\n                vmlEl.removeChild(cropEl);\n                this._cropEl = null;\n            }\n        }\n\n        var filterStr = '';\n        var alpha = style.opacity;\n        if (alpha < 1) {\n            filterStr += '.Alpha(opacity=' + round$3(alpha * 100) + ') ';\n        }\n        filterStr += imageTransformPrefix + '.AlphaImageLoader(src=' + image + ', SizingMethod=scale)';\n\n        imageELStyle.filter = filterStr;\n\n        vmlEl.style.zIndex = getZIndex(this.zlevel, this.z, this.z2);\n\n        // Append to root\n        append(vmlRoot, vmlEl);\n\n        // Text\n        if (style.text != null) {\n            this.drawRectText(vmlRoot, this.getBoundingRect());\n        }\n    };\n\n    ZImage.prototype.onRemove = function (vmlRoot) {\n        remove(vmlRoot, this._vmlEl);\n\n        this._vmlEl = null;\n        this._cropEl = null;\n        this._imageEl = null;\n\n        this.removeRectText(vmlRoot);\n    };\n\n    ZImage.prototype.onAdd = function (vmlRoot) {\n        append(vmlRoot, this._vmlEl);\n        this.appendRectText(vmlRoot);\n    };\n\n\n    /***************************************************\n     * TEXT\n     **************************************************/\n\n    var DEFAULT_STYLE_NORMAL = 'normal';\n\n    var fontStyleCache = {};\n    var fontStyleCacheCount = 0;\n    var MAX_FONT_CACHE_SIZE = 100;\n    var fontEl = document.createElement('div');\n\n    var getFontStyle = function (fontString) {\n        var fontStyle = fontStyleCache[fontString];\n        if (!fontStyle) {\n            // Clear cache\n            if (fontStyleCacheCount > MAX_FONT_CACHE_SIZE) {\n                fontStyleCacheCount = 0;\n                fontStyleCache = {};\n            }\n\n            var style = fontEl.style;\n            var fontFamily;\n            try {\n                style.font = fontString;\n                fontFamily = style.fontFamily.split(',')[0];\n            }\n            catch (e) {\n            }\n\n            fontStyle = {\n                style: style.fontStyle || DEFAULT_STYLE_NORMAL,\n                variant: style.fontVariant || DEFAULT_STYLE_NORMAL,\n                weight: style.fontWeight || DEFAULT_STYLE_NORMAL,\n                size: parseFloat(style.fontSize || 12) | 0,\n                family: fontFamily || 'Microsoft YaHei'\n            };\n\n            fontStyleCache[fontString] = fontStyle;\n            fontStyleCacheCount++;\n        }\n        return fontStyle;\n    };\n\n    var textMeasureEl;\n    // Overwrite measure text method\n    $override$1('measureText', function (text, textFont) {\n        var doc$$1 = doc;\n        if (!textMeasureEl) {\n            textMeasureEl = doc$$1.createElement('div');\n            textMeasureEl.style.cssText = 'position:absolute;top:-20000px;left:0;'\n                + 'padding:0;margin:0;border:none;white-space:pre;';\n            doc.body.appendChild(textMeasureEl);\n        }\n\n        try {\n            textMeasureEl.style.font = textFont;\n        }\n        catch (ex) {\n            // Ignore failures to set to invalid font.\n        }\n        textMeasureEl.innerHTML = '';\n        // Don't use innerHTML or innerText because they allow markup/whitespace.\n        textMeasureEl.appendChild(doc$$1.createTextNode(text));\n        return {\n            width: textMeasureEl.offsetWidth\n        };\n    });\n\n    var tmpRect$2 = new BoundingRect();\n\n    var drawRectText = function (vmlRoot, rect, textRect, fromTextEl) {\n\n        var style = this.style;\n\n        // Optimize, avoid normalize every time.\n        this.__dirty && normalizeTextStyle(style, true);\n\n        var text = style.text;\n        // Convert to string\n        text != null && (text += '');\n        if (!text) {\n            return;\n        }\n\n        // Convert rich text to plain text. Rich text is not supported in\n        // IE8-, but tags in rich text template will be removed.\n        if (style.rich) {\n            var contentBlock = parseRichText(text, style);\n            text = [];\n            for (var i = 0; i < contentBlock.lines.length; i++) {\n                var tokens = contentBlock.lines[i].tokens;\n                var textLine = [];\n                for (var j = 0; j < tokens.length; j++) {\n                    textLine.push(tokens[j].text);\n                }\n                text.push(textLine.join(''));\n            }\n            text = text.join('\\n');\n        }\n\n        var x;\n        var y;\n        var align = style.textAlign;\n        var verticalAlign = style.textVerticalAlign;\n\n        var fontStyle = getFontStyle(style.font);\n        // FIXME encodeHtmlAttribute ?\n        var font = fontStyle.style + ' ' + fontStyle.variant + ' ' + fontStyle.weight + ' '\n            + fontStyle.size + 'px \"' + fontStyle.family + '\"';\n\n        textRect = textRect || getBoundingRect(\n            text, font, align, verticalAlign, style.textPadding, style.textLineHeight\n        );\n\n        // Transform rect to view space\n        var m = this.transform;\n        // Ignore transform for text in other element\n        if (m && !fromTextEl) {\n            tmpRect$2.copy(rect);\n            tmpRect$2.applyTransform(m);\n            rect = tmpRect$2;\n        }\n\n        if (!fromTextEl) {\n            var textPosition = style.textPosition;\n            // Text position represented by coord\n            if (textPosition instanceof Array) {\n                x = rect.x + parsePercent$3(textPosition[0], rect.width);\n                y = rect.y + parsePercent$3(textPosition[1], rect.height);\n\n                align = align || 'left';\n            }\n            else {\n                var res = this.calculateTextPosition\n                    ? this.calculateTextPosition({}, style, rect)\n                    : calculateTextPosition({}, style, rect);\n                x = res.x;\n                y = res.y;\n\n                // Default align and baseline when has textPosition\n                align = align || res.textAlign;\n                verticalAlign = verticalAlign || res.textVerticalAlign;\n            }\n        }\n        else {\n            x = rect.x;\n            y = rect.y;\n        }\n\n        x = adjustTextX(x, textRect.width, align);\n        y = adjustTextY(y, textRect.height, verticalAlign);\n\n        // Force baseline 'middle'\n        y += textRect.height / 2;\n\n        // var fontSize = fontStyle.size;\n        // 1.75 is an arbitrary number, as there is no info about the text baseline\n        // switch (baseline) {\n            // case 'hanging':\n            // case 'top':\n            //     y += fontSize / 1.75;\n            //     break;\n        //     case 'middle':\n        //         break;\n        //     default:\n        //     // case null:\n        //     // case 'alphabetic':\n        //     // case 'ideographic':\n        //     // case 'bottom':\n        //         y -= fontSize / 2.25;\n        //         break;\n        // }\n\n        // switch (align) {\n        //     case 'left':\n        //         break;\n        //     case 'center':\n        //         x -= textRect.width / 2;\n        //         break;\n        //     case 'right':\n        //         x -= textRect.width;\n        //         break;\n            // case 'end':\n                // align = elementStyle.direction == 'ltr' ? 'right' : 'left';\n                // break;\n            // case 'start':\n                // align = elementStyle.direction == 'rtl' ? 'right' : 'left';\n                // break;\n            // default:\n            //     align = 'left';\n        // }\n\n        var createNode$$1 = createNode;\n\n        var textVmlEl = this._textVmlEl;\n        var pathEl;\n        var textPathEl;\n        var skewEl;\n        if (!textVmlEl) {\n            textVmlEl = createNode$$1('line');\n            pathEl = createNode$$1('path');\n            textPathEl = createNode$$1('textpath');\n            skewEl = createNode$$1('skew');\n\n            // FIXME Why here is not cammel case\n            // Align 'center' seems wrong\n            textPathEl.style['v-text-align'] = 'left';\n\n            initRootElStyle(textVmlEl);\n\n            pathEl.textpathok = true;\n            textPathEl.on = true;\n\n            textVmlEl.from = '0 0';\n            textVmlEl.to = '1000 0.05';\n\n            append(textVmlEl, skewEl);\n            append(textVmlEl, pathEl);\n            append(textVmlEl, textPathEl);\n\n            this._textVmlEl = textVmlEl;\n        }\n        else {\n            // 这里是在前面 appendChild 保证顺序的前提下\n            skewEl = textVmlEl.firstChild;\n            pathEl = skewEl.nextSibling;\n            textPathEl = pathEl.nextSibling;\n        }\n\n        var coords = [x, y];\n        var textVmlElStyle = textVmlEl.style;\n        // Ignore transform for text in other element\n        if (m && fromTextEl) {\n            applyTransform(coords, coords, m);\n\n            skewEl.on = true;\n\n            skewEl.matrix = m[0].toFixed(3) + comma + m[2].toFixed(3) + comma\n                            + m[1].toFixed(3) + comma + m[3].toFixed(3) + ',0,0';\n\n            // Text position\n            skewEl.offset = (round$3(coords[0]) || 0) + ',' + (round$3(coords[1]) || 0);\n            // Left top point as origin\n            skewEl.origin = '0 0';\n\n            textVmlElStyle.left = '0px';\n            textVmlElStyle.top = '0px';\n        }\n        else {\n            skewEl.on = false;\n            textVmlElStyle.left = round$3(x) + 'px';\n            textVmlElStyle.top = round$3(y) + 'px';\n        }\n\n        textPathEl.string = encodeHtmlAttribute(text);\n        // TODO\n        try {\n            textPathEl.style.font = font;\n        }\n        // Error font format\n        catch (e) {}\n\n        updateFillAndStroke(textVmlEl, 'fill', {\n            fill: style.textFill,\n            opacity: style.opacity\n        }, this);\n        updateFillAndStroke(textVmlEl, 'stroke', {\n            stroke: style.textStroke,\n            opacity: style.opacity,\n            lineDash: style.lineDash || null // style.lineDash can be `false`.\n        }, this);\n\n        textVmlEl.style.zIndex = getZIndex(this.zlevel, this.z, this.z2);\n\n        // Attached to root\n        append(vmlRoot, textVmlEl);\n    };\n\n    var removeRectText = function (vmlRoot) {\n        remove(vmlRoot, this._textVmlEl);\n        this._textVmlEl = null;\n    };\n\n    var appendRectText = function (vmlRoot) {\n        append(vmlRoot, this._textVmlEl);\n    };\n\n    var list = [RectText, Displayable, ZImage, Path, Text];\n\n    // In case Displayable has been mixed in RectText\n    for (var i$3 = 0; i$3 < list.length; i$3++) {\n        var proto$8 = list[i$3].prototype;\n        proto$8.drawRectText = drawRectText;\n        proto$8.removeRectText = removeRectText;\n        proto$8.appendRectText = appendRectText;\n    }\n\n    Text.prototype.brushVML = function (vmlRoot) {\n        var style = this.style;\n        if (style.text != null) {\n            this.drawRectText(vmlRoot, {\n                x: style.x || 0, y: style.y || 0,\n                width: 0, height: 0\n            }, this.getBoundingRect(), true);\n        }\n        else {\n            this.removeRectText(vmlRoot);\n        }\n    };\n\n    Text.prototype.onRemove = function (vmlRoot) {\n        this.removeRectText(vmlRoot);\n    };\n\n    Text.prototype.onAdd = function (vmlRoot) {\n        this.appendRectText(vmlRoot);\n    };\n}\n\n/**\n * VML Painter.\n *\n * @module zrender/vml/Painter\n */\n\nfunction parseInt10$1(val) {\n    return parseInt(val, 10);\n}\n\n/**\n * @alias module:zrender/vml/Painter\n */\nfunction VMLPainter(root, storage) {\n\n    initVML();\n\n    this.root = root;\n\n    this.storage = storage;\n\n    var vmlViewport = document.createElement('div');\n\n    var vmlRoot = document.createElement('div');\n\n    vmlViewport.style.cssText = 'display:inline-block;overflow:hidden;position:relative;width:300px;height:150px;';\n\n    vmlRoot.style.cssText = 'position:absolute;left:0;top:0;';\n\n    root.appendChild(vmlViewport);\n\n    this._vmlRoot = vmlRoot;\n    this._vmlViewport = vmlViewport;\n\n    this.resize();\n\n    // Modify storage\n    var oldDelFromStorage = storage.delFromStorage;\n    var oldAddToStorage = storage.addToStorage;\n    storage.delFromStorage = function (el) {\n        oldDelFromStorage.call(storage, el);\n\n        if (el) {\n            el.onRemove && el.onRemove(vmlRoot);\n        }\n    };\n\n    storage.addToStorage = function (el) {\n        // Displayable already has a vml node\n        el.onAdd && el.onAdd(vmlRoot);\n\n        oldAddToStorage.call(storage, el);\n    };\n\n    this._firstPaint = true;\n}\n\nVMLPainter.prototype = {\n\n    constructor: VMLPainter,\n\n    getType: function () {\n        return 'vml';\n    },\n\n    /**\n     * @return {HTMLDivElement}\n     */\n    getViewportRoot: function () {\n        return this._vmlViewport;\n    },\n\n    getViewportRootOffset: function () {\n        var viewportRoot = this.getViewportRoot();\n        if (viewportRoot) {\n            return {\n                offsetLeft: viewportRoot.offsetLeft || 0,\n                offsetTop: viewportRoot.offsetTop || 0\n            };\n        }\n    },\n\n    /**\n     * 刷新\n     */\n    refresh: function () {\n\n        var list = this.storage.getDisplayList(true, true);\n\n        this._paintList(list);\n    },\n\n    _paintList: function (list) {\n        var vmlRoot = this._vmlRoot;\n        for (var i = 0; i < list.length; i++) {\n            var el = list[i];\n            if (el.invisible || el.ignore) {\n                if (!el.__alreadyNotVisible) {\n                    el.onRemove(vmlRoot);\n                }\n                // Set as already invisible\n                el.__alreadyNotVisible = true;\n            }\n            else {\n                if (el.__alreadyNotVisible) {\n                    el.onAdd(vmlRoot);\n                }\n                el.__alreadyNotVisible = false;\n                if (el.__dirty) {\n                    el.beforeBrush && el.beforeBrush();\n                    (el.brushVML || el.brush).call(el, vmlRoot);\n                    el.afterBrush && el.afterBrush();\n                }\n            }\n            el.__dirty = false;\n        }\n\n        if (this._firstPaint) {\n            // Detached from document at first time\n            // to avoid page refreshing too many times\n\n            // FIXME 如果每次都先 removeChild 可能会导致一些填充和描边的效果改变\n            this._vmlViewport.appendChild(vmlRoot);\n            this._firstPaint = false;\n        }\n    },\n\n    resize: function (width, height) {\n        var width = width == null ? this._getWidth() : width;\n        var height = height == null ? this._getHeight() : height;\n\n        if (this._width !== width || this._height !== height) {\n            this._width = width;\n            this._height = height;\n\n            var vmlViewportStyle = this._vmlViewport.style;\n            vmlViewportStyle.width = width + 'px';\n            vmlViewportStyle.height = height + 'px';\n        }\n    },\n\n    dispose: function () {\n        this.root.innerHTML = '';\n\n        this._vmlRoot =\n        this._vmlViewport =\n        this.storage = null;\n    },\n\n    getWidth: function () {\n        return this._width;\n    },\n\n    getHeight: function () {\n        return this._height;\n    },\n\n    clear: function () {\n        if (this._vmlViewport) {\n            this.root.removeChild(this._vmlViewport);\n        }\n    },\n\n    _getWidth: function () {\n        var root = this.root;\n        var stl = root.currentStyle;\n\n        return ((root.clientWidth || parseInt10$1(stl.width))\n                - parseInt10$1(stl.paddingLeft)\n                - parseInt10$1(stl.paddingRight)) | 0;\n    },\n\n    _getHeight: function () {\n        var root = this.root;\n        var stl = root.currentStyle;\n\n        return ((root.clientHeight || parseInt10$1(stl.height))\n                - parseInt10$1(stl.paddingTop)\n                - parseInt10$1(stl.paddingBottom)) | 0;\n    }\n};\n\n// Not supported methods\nfunction createMethodNotSupport(method) {\n    return function () {\n        zrLog('In IE8.0 VML mode painter not support method \"' + method + '\"');\n    };\n}\n\n// Unsupported methods\neach$1([\n    'getLayer', 'insertLayer', 'eachLayer', 'eachBuiltinLayer', 'eachOtherLayer', 'getLayers',\n    'modLayer', 'delLayer', 'clearLayer', 'toDataURL', 'pathToImage'\n], function (name) {\n    VMLPainter.prototype[name] = createMethodNotSupport(name);\n});\n\nregisterPainter('vml', VMLPainter);\n\nvar svgURI = 'http://www.w3.org/2000/svg';\n\nfunction createElement(name) {\n    return document.createElementNS(svgURI, name);\n}\n\n// TODO\n// 1. shadow\n// 2. Image: sx, sy, sw, sh\n\nvar CMD$4 = PathProxy.CMD;\nvar arrayJoin = Array.prototype.join;\n\nvar NONE = 'none';\nvar mathRound = Math.round;\nvar mathSin$3 = Math.sin;\nvar mathCos$3 = Math.cos;\nvar PI$6 = Math.PI;\nvar PI2$7 = Math.PI * 2;\nvar degree = 180 / PI$6;\n\nvar EPSILON$4 = 1e-4;\n\nfunction round4(val) {\n    return mathRound(val * 1e4) / 1e4;\n}\n\nfunction isAroundZero$1(val) {\n    return val < EPSILON$4 && val > -EPSILON$4;\n}\n\nfunction pathHasFill(style, isText) {\n    var fill = isText ? style.textFill : style.fill;\n    return fill != null && fill !== NONE;\n}\n\nfunction pathHasStroke(style, isText) {\n    var stroke = isText ? style.textStroke : style.stroke;\n    return stroke != null && stroke !== NONE;\n}\n\nfunction setTransform(svgEl, m) {\n    if (m) {\n        attr(svgEl, 'transform', 'matrix(' + arrayJoin.call(m, ',') + ')');\n    }\n}\n\nfunction attr(el, key, val) {\n    if (!val || val.type !== 'linear' && val.type !== 'radial') {\n        // Don't set attribute for gradient, since it need new dom nodes\n        el.setAttribute(key, val);\n    }\n}\n\nfunction attrXLink(el, key, val) {\n    el.setAttributeNS('http://www.w3.org/1999/xlink', key, val);\n}\n\nfunction bindStyle(svgEl, style, isText, el) {\n    if (pathHasFill(style, isText)) {\n        var fill = isText ? style.textFill : style.fill;\n        fill = fill === 'transparent' ? NONE : fill;\n        attr(svgEl, 'fill', fill);\n        attr(svgEl, 'fill-opacity', style.fillOpacity != null ? style.fillOpacity * style.opacity : style.opacity);\n    }\n    else {\n        attr(svgEl, 'fill', NONE);\n    }\n\n    if (pathHasStroke(style, isText)) {\n        var stroke = isText ? style.textStroke : style.stroke;\n        stroke = stroke === 'transparent' ? NONE : stroke;\n        attr(svgEl, 'stroke', stroke);\n        var strokeWidth = isText\n            ? style.textStrokeWidth\n            : style.lineWidth;\n        var strokeScale = !isText && style.strokeNoScale\n            ? el.getLineScale()\n            : 1;\n        attr(svgEl, 'stroke-width', strokeWidth / strokeScale);\n        // stroke then fill for text; fill then stroke for others\n        attr(svgEl, 'paint-order', isText ? 'stroke' : 'fill');\n        attr(svgEl, 'stroke-opacity', style.strokeOpacity != null ? style.strokeOpacity : style.opacity);\n        var lineDash = style.lineDash;\n        if (lineDash) {\n            attr(svgEl, 'stroke-dasharray', style.lineDash.join(','));\n            attr(svgEl, 'stroke-dashoffset', mathRound(style.lineDashOffset || 0));\n        }\n        else {\n            attr(svgEl, 'stroke-dasharray', '');\n        }\n\n        // PENDING\n        style.lineCap && attr(svgEl, 'stroke-linecap', style.lineCap);\n        style.lineJoin && attr(svgEl, 'stroke-linejoin', style.lineJoin);\n        style.miterLimit && attr(svgEl, 'stroke-miterlimit', style.miterLimit);\n    }\n    else {\n        attr(svgEl, 'stroke', NONE);\n    }\n}\n\n/***************************************************\n * PATH\n **************************************************/\nfunction pathDataToString$1(path) {\n    var str = [];\n    var data = path.data;\n    var dataLength = path.len();\n    for (var i = 0; i < dataLength;) {\n        var cmd = data[i++];\n        var cmdStr = '';\n        var nData = 0;\n        switch (cmd) {\n            case CMD$4.M:\n                cmdStr = 'M';\n                nData = 2;\n                break;\n            case CMD$4.L:\n                cmdStr = 'L';\n                nData = 2;\n                break;\n            case CMD$4.Q:\n                cmdStr = 'Q';\n                nData = 4;\n                break;\n            case CMD$4.C:\n                cmdStr = 'C';\n                nData = 6;\n                break;\n            case CMD$4.A:\n                var cx = data[i++];\n                var cy = data[i++];\n                var rx = data[i++];\n                var ry = data[i++];\n                var theta = data[i++];\n                var dTheta = data[i++];\n                var psi = data[i++];\n                var clockwise = data[i++];\n\n                var dThetaPositive = Math.abs(dTheta);\n                var isCircle = isAroundZero$1(dThetaPositive - PI2$7)\n                    && !isAroundZero$1(dThetaPositive);\n\n                var large = false;\n                if (dThetaPositive >= PI2$7) {\n                    large = true;\n                }\n                else if (isAroundZero$1(dThetaPositive)) {\n                    large = false;\n                }\n                else {\n                    large = (dTheta > -PI$6 && dTheta < 0 || dTheta > PI$6)\n                        === !!clockwise;\n                }\n\n                var x0 = round4(cx + rx * mathCos$3(theta));\n                var y0 = round4(cy + ry * mathSin$3(theta));\n\n                // It will not draw if start point and end point are exactly the same\n                // We need to shift the end point with a small value\n                // FIXME A better way to draw circle ?\n                if (isCircle) {\n                    if (clockwise) {\n                        dTheta = PI2$7 - 1e-4;\n                    }\n                    else {\n                        dTheta = -PI2$7 + 1e-4;\n                    }\n\n                    large = true;\n\n                    if (i === 9) {\n                        // Move to (x0, y0) only when CMD.A comes at the\n                        // first position of a shape.\n                        // For instance, when drawing a ring, CMD.A comes\n                        // after CMD.M, so it's unnecessary to move to\n                        // (x0, y0).\n                        str.push('M', x0, y0);\n                    }\n                }\n\n                var x = round4(cx + rx * mathCos$3(theta + dTheta));\n                var y = round4(cy + ry * mathSin$3(theta + dTheta));\n\n                // FIXME Ellipse\n                str.push('A', round4(rx), round4(ry),\n                    mathRound(psi * degree), +large, +clockwise, x, y);\n                break;\n            case CMD$4.Z:\n                cmdStr = 'Z';\n                break;\n            case CMD$4.R:\n                var x = round4(data[i++]);\n                var y = round4(data[i++]);\n                var w = round4(data[i++]);\n                var h = round4(data[i++]);\n                str.push(\n                    'M', x, y,\n                    'L', x + w, y,\n                    'L', x + w, y + h,\n                    'L', x, y + h,\n                    'L', x, y\n                );\n                break;\n        }\n        cmdStr && str.push(cmdStr);\n        for (var j = 0; j < nData; j++) {\n            // PENDING With scale\n            str.push(round4(data[i++]));\n        }\n    }\n    return str.join(' ');\n}\n\nvar svgPath = {};\nsvgPath.brush = function (el) {\n    var style = el.style;\n\n    var svgEl = el.__svgEl;\n    if (!svgEl) {\n        svgEl = createElement('path');\n        el.__svgEl = svgEl;\n    }\n\n    if (!el.path) {\n        el.createPathProxy();\n    }\n    var path = el.path;\n\n    if (el.__dirtyPath) {\n        path.beginPath();\n        path.subPixelOptimize = false;\n        el.buildPath(path, el.shape);\n        el.__dirtyPath = false;\n\n        var pathStr = pathDataToString$1(path);\n        if (pathStr.indexOf('NaN') < 0) {\n            // Ignore illegal path, which may happen such in out-of-range\n            // data in Calendar series.\n            attr(svgEl, 'd', pathStr);\n        }\n    }\n\n    bindStyle(svgEl, style, false, el);\n    setTransform(svgEl, el.transform);\n\n    if (style.text != null) {\n        svgTextDrawRectText(el, el.getBoundingRect());\n    }\n};\n\n/***************************************************\n * IMAGE\n **************************************************/\nvar svgImage = {};\nsvgImage.brush = function (el) {\n    var style = el.style;\n    var image = style.image;\n\n    if (image instanceof HTMLImageElement) {\n        var src = image.src;\n        image = src;\n    }\n    if (!image) {\n        return;\n    }\n\n    var x = style.x || 0;\n    var y = style.y || 0;\n\n    var dw = style.width;\n    var dh = style.height;\n\n    var svgEl = el.__svgEl;\n    if (!svgEl) {\n        svgEl = createElement('image');\n        el.__svgEl = svgEl;\n    }\n\n    if (image !== el.__imageSrc) {\n        attrXLink(svgEl, 'href', image);\n        // Caching image src\n        el.__imageSrc = image;\n    }\n\n    attr(svgEl, 'width', dw);\n    attr(svgEl, 'height', dh);\n\n    attr(svgEl, 'x', x);\n    attr(svgEl, 'y', y);\n\n    setTransform(svgEl, el.transform);\n\n    if (style.text != null) {\n        svgTextDrawRectText(el, el.getBoundingRect());\n    }\n};\n\n/***************************************************\n * TEXT\n **************************************************/\nvar svgText = {};\nvar tmpRect$3 = new BoundingRect();\nvar tmpTextPositionResult = {};\n\nvar svgTextDrawRectText = function (el, rect, textRect) {\n    var style = el.style;\n\n    el.__dirty && normalizeTextStyle(style, true);\n\n    var text = style.text;\n    // Convert to string\n    if (text == null) {\n        // Draw no text only when text is set to null, but not ''\n        return;\n    }\n    else {\n        text += '';\n    }\n\n    var textSvgEl = el.__textSvgEl;\n    if (!textSvgEl) {\n        textSvgEl = createElement('text');\n        el.__textSvgEl = textSvgEl;\n    }\n\n    var x;\n    var y;\n    var textPosition = style.textPosition;\n    var align = style.textAlign || 'left';\n\n    if (typeof style.fontSize === 'number') {\n        style.fontSize += 'px';\n    }\n    var font = style.font\n        || [\n            style.fontStyle || '',\n            style.fontWeight || '',\n            style.fontSize || '',\n            style.fontFamily || ''\n        ].join(' ')\n        || DEFAULT_FONT$1;\n\n    var verticalAlign = style.textVerticalAlign;\n\n    textRect = getBoundingRect(\n        text, font, align,\n        verticalAlign, style.textPadding, style.textLineHeight\n    );\n\n    var lineHeight = textRect.lineHeight;\n    // Text position represented by coord\n    if (textPosition instanceof Array) {\n        x = rect.x + textPosition[0];\n        y = rect.y + textPosition[1];\n    }\n    else {\n        var newPos = el.calculateTextPosition\n            ? el.calculateTextPosition(tmpTextPositionResult, style, rect)\n            : calculateTextPosition(tmpTextPositionResult, style, rect);\n        x = newPos.x;\n        y = newPos.y;\n        verticalAlign = newPos.textVerticalAlign;\n        align = newPos.textAlign;\n    }\n\n    setVerticalAlign(textSvgEl, verticalAlign);\n\n    if (font) {\n        textSvgEl.style.font = font;\n    }\n\n    var textPadding = style.textPadding;\n\n    // Make baseline top\n    attr(textSvgEl, 'x', x);\n    attr(textSvgEl, 'y', y);\n\n    bindStyle(textSvgEl, style, true, el);\n    if (el instanceof Text || el.style.transformText) {\n        // Transform text with element\n        setTransform(textSvgEl, el.transform);\n    }\n    else {\n        if (el.transform) {\n            tmpRect$3.copy(rect);\n            tmpRect$3.applyTransform(el.transform);\n            rect = tmpRect$3;\n        }\n        else {\n            var pos = el.transformCoordToGlobal(rect.x, rect.y);\n            rect.x = pos[0];\n            rect.y = pos[1];\n            el.transform = identity(create$1());\n        }\n\n        // Text rotation, but no element transform\n        var origin = style.textOrigin;\n        if (origin === 'center') {\n            x = textRect.width / 2 + x;\n            y = textRect.height / 2 + y;\n        }\n        else if (origin) {\n            x = origin[0] + x;\n            y = origin[1] + y;\n        }\n        var rotate$$1 = -style.textRotation || 0;\n        var transform = create$1();\n        // Apply textRotate to element matrix\n        rotate(transform, transform, rotate$$1);\n\n        var pos = [el.transform[4], el.transform[5]];\n        translate(transform, transform, pos);\n        setTransform(textSvgEl, transform);\n    }\n\n    var textLines = text.split('\\n');\n    var nTextLines = textLines.length;\n    var textAnchor = align;\n    // PENDING\n    if (textAnchor === 'left') {\n        textAnchor = 'start';\n        textPadding && (x += textPadding[3]);\n    }\n    else if (textAnchor === 'right') {\n        textAnchor = 'end';\n        textPadding && (x -= textPadding[1]);\n    }\n    else if (textAnchor === 'center') {\n        textAnchor = 'middle';\n        textPadding && (x += (textPadding[3] - textPadding[1]) / 2);\n    }\n\n    var dy = 0;\n    if (verticalAlign === 'bottom') {\n        dy = -textRect.height + lineHeight;\n        textPadding && (dy -= textPadding[2]);\n    }\n    else if (verticalAlign === 'middle') {\n        dy = (-textRect.height + lineHeight) / 2;\n        textPadding && (y += (textPadding[0] - textPadding[2]) / 2);\n    }\n    else {\n        textPadding && (dy += textPadding[0]);\n    }\n\n    // Font may affect position of each tspan elements\n    if (el.__text !== text || el.__textFont !== font) {\n        var tspanList = el.__tspanList || [];\n        el.__tspanList = tspanList;\n        for (var i = 0; i < nTextLines; i++) {\n            // Using cached tspan elements\n            var tspan = tspanList[i];\n            if (!tspan) {\n                tspan = tspanList[i] = createElement('tspan');\n                textSvgEl.appendChild(tspan);\n                setVerticalAlign(tspan, verticalAlign);\n                attr(tspan, 'text-anchor', textAnchor);\n            }\n            else {\n                tspan.innerHTML = '';\n            }\n            attr(tspan, 'x', x);\n            attr(tspan, 'y', y + i * lineHeight + dy);\n            tspan.appendChild(document.createTextNode(textLines[i]));\n        }\n        // Remove unsed tspan elements\n        for (; i < tspanList.length; i++) {\n            textSvgEl.removeChild(tspanList[i]);\n        }\n        tspanList.length = nTextLines;\n\n        el.__text = text;\n        el.__textFont = font;\n    }\n    else if (el.__tspanList.length) {\n        // Update span x and y\n        var len = el.__tspanList.length;\n        for (var i = 0; i < len; ++i) {\n            var tspan = el.__tspanList[i];\n            if (tspan) {\n                attr(tspan, 'x', x);\n                attr(tspan, 'y', y + i * lineHeight + dy);\n            }\n        }\n    }\n};\n\nfunction setVerticalAlign(textSvgEl, verticalAlign) {\n    switch (verticalAlign) {\n        case 'middle':\n            attr(textSvgEl, 'dominant-baseline', 'middle');\n            attr(textSvgEl, 'alignment-baseline', 'middle');\n            break;\n\n        case 'bottom':\n            attr(textSvgEl, 'dominant-baseline', 'ideographic');\n            attr(textSvgEl, 'alignment-baseline', 'ideographic');\n            break;\n\n        default:\n            attr(textSvgEl, 'dominant-baseline', 'hanging');\n            attr(textSvgEl, 'alignment-baseline', 'hanging');\n    }\n}\n\nsvgText.drawRectText = svgTextDrawRectText;\n\nsvgText.brush = function (el) {\n    var style = el.style;\n    if (style.text != null) {\n        // 强制设置 textPosition\n        style.textPosition = [0, 0];\n        svgTextDrawRectText(el, {\n            x: style.x || 0, y: style.y || 0,\n            width: 0, height: 0\n        }, el.getBoundingRect());\n    }\n};\n\n// Myers' Diff Algorithm\n// Modified from https://github.com/kpdecker/jsdiff/blob/master/src/diff/base.js\n\nfunction Diff() {}\n\nDiff.prototype = {\n    diff: function (oldArr, newArr, equals) {\n        if (!equals) {\n            equals = function (a, b) {\n                return a === b;\n            };\n        }\n        this.equals = equals;\n\n        var self = this;\n\n        oldArr = oldArr.slice();\n        newArr = newArr.slice();\n        // Allow subclasses to massage the input prior to running\n        var newLen = newArr.length;\n        var oldLen = oldArr.length;\n        var editLength = 1;\n        var maxEditLength = newLen + oldLen;\n        var bestPath = [{ newPos: -1, components: [] }];\n\n        // Seed editLength = 0, i.e. the content starts with the same values\n        var oldPos = this.extractCommon(bestPath[0], newArr, oldArr, 0);\n        if (bestPath[0].newPos + 1 >= newLen && oldPos + 1 >= oldLen) {\n            var indices = [];\n            for (var i = 0; i < newArr.length; i++) {\n                indices.push(i);\n            }\n            // Identity per the equality and tokenizer\n            return [{\n                indices: indices, count: newArr.length\n            }];\n        }\n\n        // Main worker method. checks all permutations of a given edit length for acceptance.\n        function execEditLength() {\n            for (var diagonalPath = -1 * editLength; diagonalPath <= editLength; diagonalPath += 2) {\n                var basePath;\n                var addPath = bestPath[diagonalPath - 1];\n                var removePath = bestPath[diagonalPath + 1];\n                var oldPos = (removePath ? removePath.newPos : 0) - diagonalPath;\n                if (addPath) {\n                    // No one else is going to attempt to use this value, clear it\n                    bestPath[diagonalPath - 1] = undefined;\n                }\n\n                var canAdd = addPath && addPath.newPos + 1 < newLen;\n                var canRemove = removePath && 0 <= oldPos && oldPos < oldLen;\n                if (!canAdd && !canRemove) {\n                    // If this path is a terminal then prune\n                    bestPath[diagonalPath] = undefined;\n                    continue;\n                }\n\n                // Select the diagonal that we want to branch from. We select the prior\n                // path whose position in the new string is the farthest from the origin\n                // and does not pass the bounds of the diff graph\n                if (!canAdd || (canRemove && addPath.newPos < removePath.newPos)) {\n                    basePath = clonePath(removePath);\n                    self.pushComponent(basePath.components, undefined, true);\n                }\n                else {\n                    basePath = addPath;   // No need to clone, we've pulled it from the list\n                    basePath.newPos++;\n                    self.pushComponent(basePath.components, true, undefined);\n                }\n\n                oldPos = self.extractCommon(basePath, newArr, oldArr, diagonalPath);\n\n                // If we have hit the end of both strings, then we are done\n                if (basePath.newPos + 1 >= newLen && oldPos + 1 >= oldLen) {\n                    return buildValues(self, basePath.components, newArr, oldArr);\n                }\n                else {\n                    // Otherwise track this path as a potential candidate and continue.\n                    bestPath[diagonalPath] = basePath;\n                }\n            }\n\n            editLength++;\n        }\n\n        while (editLength <= maxEditLength) {\n            var ret = execEditLength();\n            if (ret) {\n                return ret;\n            }\n        }\n    },\n\n    pushComponent: function (components, added, removed) {\n        var last = components[components.length - 1];\n        if (last && last.added === added && last.removed === removed) {\n            // We need to clone here as the component clone operation is just\n            // as shallow array clone\n            components[components.length - 1] = {count: last.count + 1, added: added, removed: removed };\n        }\n        else {\n            components.push({count: 1, added: added, removed: removed });\n        }\n    },\n    extractCommon: function (basePath, newArr, oldArr, diagonalPath) {\n        var newLen = newArr.length;\n        var oldLen = oldArr.length;\n        var newPos = basePath.newPos;\n        var oldPos = newPos - diagonalPath;\n        var commonCount = 0;\n\n        while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(newArr[newPos + 1], oldArr[oldPos + 1])) {\n            newPos++;\n            oldPos++;\n            commonCount++;\n        }\n\n        if (commonCount) {\n            basePath.components.push({count: commonCount});\n        }\n\n        basePath.newPos = newPos;\n        return oldPos;\n    },\n    tokenize: function (value) {\n        return value.slice();\n    },\n    join: function (value) {\n        return value.slice();\n    }\n};\n\nfunction buildValues(diff, components, newArr, oldArr) {\n    var componentPos = 0;\n    var componentLen = components.length;\n    var newPos = 0;\n    var oldPos = 0;\n\n    for (; componentPos < componentLen; componentPos++) {\n        var component = components[componentPos];\n        if (!component.removed) {\n            var indices = [];\n            for (var i = newPos; i < newPos + component.count; i++) {\n                indices.push(i);\n            }\n            component.indices = indices;\n            newPos += component.count;\n            // Common case\n            if (!component.added) {\n                oldPos += component.count;\n            }\n        }\n        else {\n            var indices = [];\n            for (var i = oldPos; i < oldPos + component.count; i++) {\n                indices.push(i);\n            }\n            component.indices = indices;\n            oldPos += component.count;\n        }\n    }\n\n    return components;\n}\n\nfunction clonePath(path) {\n    return { newPos: path.newPos, components: path.components.slice(0) };\n}\n\nvar arrayDiff = new Diff();\n\nvar arrayDiff$1 = function (oldArr, newArr, callback) {\n    return arrayDiff.diff(oldArr, newArr, callback);\n};\n\n/**\n * @file Manages elements that can be defined in <defs> in SVG,\n *       e.g., gradients, clip path, etc.\n * @author Zhang Wenli\n */\n\nvar MARK_UNUSED = '0';\nvar MARK_USED = '1';\n\n/**\n * Manages elements that can be defined in <defs> in SVG,\n * e.g., gradients, clip path, etc.\n *\n * @class\n * @param {number}          zrId      zrender instance id\n * @param {SVGElement}      svgRoot   root of SVG document\n * @param {string|string[]} tagNames  possible tag names\n * @param {string}          markLabel label name to make if the element\n *                                    is used\n */\nfunction Definable(\n    zrId,\n    svgRoot,\n    tagNames,\n    markLabel,\n    domName\n) {\n    this._zrId = zrId;\n    this._svgRoot = svgRoot;\n    this._tagNames = typeof tagNames === 'string' ? [tagNames] : tagNames;\n    this._markLabel = markLabel;\n    this._domName = domName || '_dom';\n\n    this.nextId = 0;\n}\n\n\nDefinable.prototype.createElement = createElement;\n\n\n/**\n * Get the <defs> tag for svgRoot; optionally creates one if not exists.\n *\n * @param {boolean} isForceCreating if need to create when not exists\n * @return {SVGDefsElement} SVG <defs> element, null if it doesn't\n * exist and isForceCreating is false\n */\nDefinable.prototype.getDefs = function (isForceCreating) {\n    var svgRoot = this._svgRoot;\n    var defs = this._svgRoot.getElementsByTagName('defs');\n    if (defs.length === 0) {\n        // Not exist\n        if (isForceCreating) {\n            defs = svgRoot.insertBefore(\n                this.createElement('defs'), // Create new tag\n                svgRoot.firstChild // Insert in the front of svg\n            );\n            if (!defs.contains) {\n                // IE doesn't support contains method\n                defs.contains = function (el) {\n                    var children = defs.children;\n                    if (!children) {\n                        return false;\n                    }\n                    for (var i = children.length - 1; i >= 0; --i) {\n                        if (children[i] === el) {\n                            return true;\n                        }\n                    }\n                    return false;\n                };\n            }\n            return defs;\n        }\n        else {\n            return null;\n        }\n    }\n    else {\n        return defs[0];\n    }\n};\n\n\n/**\n * Update DOM element if necessary.\n *\n * @param {Object|string} element style element. e.g., for gradient,\n *                                it may be '#ccc' or {type: 'linear', ...}\n * @param {Function|undefined} onUpdate update callback\n */\nDefinable.prototype.update = function (element, onUpdate) {\n    if (!element) {\n        return;\n    }\n\n    var defs = this.getDefs(false);\n    if (element[this._domName] && defs.contains(element[this._domName])) {\n        // Update DOM\n        if (typeof onUpdate === 'function') {\n            onUpdate(element);\n        }\n    }\n    else {\n        // No previous dom, create new\n        var dom = this.add(element);\n        if (dom) {\n            element[this._domName] = dom;\n        }\n    }\n};\n\n\n/**\n * Add gradient dom to defs\n *\n * @param {SVGElement} dom DOM to be added to <defs>\n */\nDefinable.prototype.addDom = function (dom) {\n    var defs = this.getDefs(true);\n    defs.appendChild(dom);\n};\n\n\n/**\n * Remove DOM of a given element.\n *\n * @param {SVGElement} element element to remove dom\n */\nDefinable.prototype.removeDom = function (element) {\n    var defs = this.getDefs(false);\n    if (defs && element[this._domName]) {\n        defs.removeChild(element[this._domName]);\n        element[this._domName] = null;\n    }\n};\n\n\n/**\n * Get DOMs of this element.\n *\n * @return {HTMLDomElement} doms of this defineable elements in <defs>\n */\nDefinable.prototype.getDoms = function () {\n    var defs = this.getDefs(false);\n    if (!defs) {\n        // No dom when defs is not defined\n        return [];\n    }\n\n    var doms = [];\n    each$1(this._tagNames, function (tagName) {\n        var tags = defs.getElementsByTagName(tagName);\n        // Note that tags is HTMLCollection, which is array-like\n        // rather than real array.\n        // So `doms.concat(tags)` add tags as one object.\n        doms = doms.concat([].slice.call(tags));\n    });\n\n    return doms;\n};\n\n\n/**\n * Mark DOMs to be unused before painting, and clear unused ones at the end\n * of the painting.\n */\nDefinable.prototype.markAllUnused = function () {\n    var doms = this.getDoms();\n    var that = this;\n    each$1(doms, function (dom) {\n        dom[that._markLabel] = MARK_UNUSED;\n    });\n};\n\n\n/**\n * Mark a single DOM to be used.\n *\n * @param {SVGElement} dom DOM to mark\n */\nDefinable.prototype.markUsed = function (dom) {\n    if (dom) {\n        dom[this._markLabel] = MARK_USED;\n    }\n};\n\n\n/**\n * Remove unused DOMs defined in <defs>\n */\nDefinable.prototype.removeUnused = function () {\n    var defs = this.getDefs(false);\n    if (!defs) {\n        // Nothing to remove\n        return;\n    }\n\n    var doms = this.getDoms();\n    var that = this;\n    each$1(doms, function (dom) {\n        if (dom[that._markLabel] !== MARK_USED) {\n            // Remove gradient\n            defs.removeChild(dom);\n        }\n    });\n};\n\n\n/**\n * Get SVG proxy.\n *\n * @param {Displayable} displayable displayable element\n * @return {Path|Image|Text} svg proxy of given element\n */\nDefinable.prototype.getSvgProxy = function (displayable) {\n    if (displayable instanceof Path) {\n        return svgPath;\n    }\n    else if (displayable instanceof ZImage) {\n        return svgImage;\n    }\n    else if (displayable instanceof Text) {\n        return svgText;\n    }\n    else {\n        return svgPath;\n    }\n};\n\n\n/**\n * Get text SVG element.\n *\n * @param {Displayable} displayable displayable element\n * @return {SVGElement} SVG element of text\n */\nDefinable.prototype.getTextSvgElement = function (displayable) {\n    return displayable.__textSvgEl;\n};\n\n\n/**\n * Get SVG element.\n *\n * @param {Displayable} displayable displayable element\n * @return {SVGElement} SVG element\n */\nDefinable.prototype.getSvgElement = function (displayable) {\n    return displayable.__svgEl;\n};\n\n/**\n * @file Manages SVG gradient elements.\n * @author Zhang Wenli\n */\n\n/**\n * Manages SVG gradient elements.\n *\n * @class\n * @extends Definable\n * @param   {number}     zrId    zrender instance id\n * @param   {SVGElement} svgRoot root of SVG document\n */\nfunction GradientManager(zrId, svgRoot) {\n    Definable.call(\n        this,\n        zrId,\n        svgRoot,\n        ['linearGradient', 'radialGradient'],\n        '__gradient_in_use__'\n    );\n}\n\n\ninherits(GradientManager, Definable);\n\n\n/**\n * Create new gradient DOM for fill or stroke if not exist,\n * but will not update gradient if exists.\n *\n * @param {SvgElement}  svgElement   SVG element to paint\n * @param {Displayable} displayable  zrender displayable element\n */\nGradientManager.prototype.addWithoutUpdate = function (\n    svgElement,\n    displayable\n) {\n    if (displayable && displayable.style) {\n        var that = this;\n        each$1(['fill', 'stroke'], function (fillOrStroke) {\n            if (displayable.style[fillOrStroke]\n                && (displayable.style[fillOrStroke].type === 'linear'\n                || displayable.style[fillOrStroke].type === 'radial')\n            ) {\n                var gradient = displayable.style[fillOrStroke];\n                var defs = that.getDefs(true);\n\n                // Create dom in <defs> if not exists\n                var dom;\n                if (gradient._dom) {\n                    // Gradient exists\n                    dom = gradient._dom;\n                    if (!defs.contains(gradient._dom)) {\n                        // _dom is no longer in defs, recreate\n                        that.addDom(dom);\n                    }\n                }\n                else {\n                    // New dom\n                    dom = that.add(gradient);\n                }\n\n                that.markUsed(displayable);\n\n                var id = dom.getAttribute('id');\n                svgElement.setAttribute(fillOrStroke, 'url(#' + id + ')');\n            }\n        });\n    }\n};\n\n\n/**\n * Add a new gradient tag in <defs>\n *\n * @param   {Gradient} gradient zr gradient instance\n * @return {SVGLinearGradientElement | SVGRadialGradientElement}\n *                            created DOM\n */\nGradientManager.prototype.add = function (gradient) {\n    var dom;\n    if (gradient.type === 'linear') {\n        dom = this.createElement('linearGradient');\n    }\n    else if (gradient.type === 'radial') {\n        dom = this.createElement('radialGradient');\n    }\n    else {\n        zrLog('Illegal gradient type.');\n        return null;\n    }\n\n    // Set dom id with gradient id, since each gradient instance\n    // will have no more than one dom element.\n    // id may exists before for those dirty elements, in which case\n    // id should remain the same, and other attributes should be\n    // updated.\n    gradient.id = gradient.id || this.nextId++;\n    dom.setAttribute('id', 'zr' + this._zrId\n        + '-gradient-' + gradient.id);\n\n    this.updateDom(gradient, dom);\n    this.addDom(dom);\n\n    return dom;\n};\n\n\n/**\n * Update gradient.\n *\n * @param {Gradient} gradient zr gradient instance\n */\nGradientManager.prototype.update = function (gradient) {\n    var that = this;\n    Definable.prototype.update.call(this, gradient, function () {\n        var type = gradient.type;\n        var tagName = gradient._dom.tagName;\n        if (type === 'linear' && tagName === 'linearGradient'\n            || type === 'radial' && tagName === 'radialGradient'\n        ) {\n            // Gradient type is not changed, update gradient\n            that.updateDom(gradient, gradient._dom);\n        }\n        else {\n            // Remove and re-create if type is changed\n            that.removeDom(gradient);\n            that.add(gradient);\n        }\n    });\n};\n\n\n/**\n * Update gradient dom\n *\n * @param {Gradient} gradient zr gradient instance\n * @param {SVGLinearGradientElement | SVGRadialGradientElement} dom\n *                            DOM to update\n */\nGradientManager.prototype.updateDom = function (gradient, dom) {\n    if (gradient.type === 'linear') {\n        dom.setAttribute('x1', gradient.x);\n        dom.setAttribute('y1', gradient.y);\n        dom.setAttribute('x2', gradient.x2);\n        dom.setAttribute('y2', gradient.y2);\n    }\n    else if (gradient.type === 'radial') {\n        dom.setAttribute('cx', gradient.x);\n        dom.setAttribute('cy', gradient.y);\n        dom.setAttribute('r', gradient.r);\n    }\n    else {\n        zrLog('Illegal gradient type.');\n        return;\n    }\n\n    if (gradient.global) {\n        // x1, x2, y1, y2 in range of 0 to canvas width or height\n        dom.setAttribute('gradientUnits', 'userSpaceOnUse');\n    }\n    else {\n        // x1, x2, y1, y2 in range of 0 to 1\n        dom.setAttribute('gradientUnits', 'objectBoundingBox');\n    }\n\n    // Remove color stops if exists\n    dom.innerHTML = '';\n\n    // Add color stops\n    var colors = gradient.colorStops;\n    for (var i = 0, len = colors.length; i < len; ++i) {\n        var stop = this.createElement('stop');\n        stop.setAttribute('offset', colors[i].offset * 100 + '%');\n\n        var color = colors[i].color;\n        if (color.indexOf('rgba' > -1)) {\n            // Fix Safari bug that stop-color not recognizing alpha #9014\n            var opacity = parse(color)[3];\n            var hex = toHex(color);\n\n            // stop-color cannot be color, since:\n            // The opacity value used for the gradient calculation is the\n            // *product* of the value of stop-opacity and the opacity of the\n            // value of stop-color.\n            // See https://www.w3.org/TR/SVG2/pservers.html#StopOpacityProperty\n            stop.setAttribute('stop-color', '#' + hex);\n            stop.setAttribute('stop-opacity', opacity);\n        }\n        else {\n            stop.setAttribute('stop-color', colors[i].color);\n        }\n\n        dom.appendChild(stop);\n    }\n\n    // Store dom element in gradient, to avoid creating multiple\n    // dom instances for the same gradient element\n    gradient._dom = dom;\n};\n\n/**\n * Mark a single gradient to be used\n *\n * @param {Displayable} displayable displayable element\n */\nGradientManager.prototype.markUsed = function (displayable) {\n    if (displayable.style) {\n        var gradient = displayable.style.fill;\n        if (gradient && gradient._dom) {\n            Definable.prototype.markUsed.call(this, gradient._dom);\n        }\n\n        gradient = displayable.style.stroke;\n        if (gradient && gradient._dom) {\n            Definable.prototype.markUsed.call(this, gradient._dom);\n        }\n    }\n};\n\n/**\n * @file Manages SVG clipPath elements.\n * @author Zhang Wenli\n */\n\n/**\n * Manages SVG clipPath elements.\n *\n * @class\n * @extends Definable\n * @param   {number}     zrId    zrender instance id\n * @param   {SVGElement} svgRoot root of SVG document\n */\nfunction ClippathManager(zrId, svgRoot) {\n    Definable.call(this, zrId, svgRoot, 'clipPath', '__clippath_in_use__');\n}\n\n\ninherits(ClippathManager, Definable);\n\n\n/**\n * Update clipPath.\n *\n * @param {Displayable} displayable displayable element\n */\nClippathManager.prototype.update = function (displayable) {\n    var svgEl = this.getSvgElement(displayable);\n    if (svgEl) {\n        this.updateDom(svgEl, displayable.__clipPaths, false);\n    }\n\n    var textEl = this.getTextSvgElement(displayable);\n    if (textEl) {\n        // Make another clipPath for text, since it's transform\n        // matrix is not the same with svgElement\n        this.updateDom(textEl, displayable.__clipPaths, true);\n    }\n\n    this.markUsed(displayable);\n};\n\n\n/**\n * Create an SVGElement of displayable and create a <clipPath> of its\n * clipPath\n *\n * @param {Displayable} parentEl  parent element\n * @param {ClipPath[]}  clipPaths clipPaths of parent element\n * @param {boolean}     isText    if parent element is Text\n */\nClippathManager.prototype.updateDom = function (\n    parentEl,\n    clipPaths,\n    isText\n) {\n    if (clipPaths && clipPaths.length > 0) {\n        // Has clipPath, create <clipPath> with the first clipPath\n        var defs = this.getDefs(true);\n        var clipPath = clipPaths[0];\n        var clipPathEl;\n        var id;\n\n        var dom = isText ? '_textDom' : '_dom';\n\n        if (clipPath[dom]) {\n            // Use a dom that is already in <defs>\n            id = clipPath[dom].getAttribute('id');\n            clipPathEl = clipPath[dom];\n\n            // Use a dom that is already in <defs>\n            if (!defs.contains(clipPathEl)) {\n                // This happens when set old clipPath that has\n                // been previously removed\n                defs.appendChild(clipPathEl);\n            }\n        }\n        else {\n            // New <clipPath>\n            id = 'zr' + this._zrId + '-clip-' + this.nextId;\n            ++this.nextId;\n            clipPathEl = this.createElement('clipPath');\n            clipPathEl.setAttribute('id', id);\n            defs.appendChild(clipPathEl);\n\n            clipPath[dom] = clipPathEl;\n        }\n\n        // Build path and add to <clipPath>\n        var svgProxy = this.getSvgProxy(clipPath);\n        if (clipPath.transform\n            && clipPath.parent.invTransform\n            && !isText\n        ) {\n            /**\n             * If a clipPath has a parent with transform, the transform\n             * of parent should not be considered when setting transform\n             * of clipPath. So we need to transform back from parent's\n             * transform, which is done by multiplying parent's inverse\n             * transform.\n             */\n            // Store old transform\n            var transform = Array.prototype.slice.call(\n                clipPath.transform\n            );\n\n            // Transform back from parent, and brush path\n            mul$1(\n                clipPath.transform,\n                clipPath.parent.invTransform,\n                clipPath.transform\n            );\n            svgProxy.brush(clipPath);\n\n            // Set back transform of clipPath\n            clipPath.transform = transform;\n        }\n        else {\n            svgProxy.brush(clipPath);\n        }\n\n        var pathEl = this.getSvgElement(clipPath);\n\n        clipPathEl.innerHTML = '';\n        /**\n         * Use `cloneNode()` here to appendChild to multiple parents,\n         * which may happend when Text and other shapes are using the same\n         * clipPath. Since Text will create an extra clipPath DOM due to\n         * different transform rules.\n         */\n        clipPathEl.appendChild(pathEl.cloneNode());\n\n        parentEl.setAttribute('clip-path', 'url(#' + id + ')');\n\n        if (clipPaths.length > 1) {\n            // Make the other clipPaths recursively\n            this.updateDom(clipPathEl, clipPaths.slice(1), isText);\n        }\n    }\n    else {\n        // No clipPath\n        if (parentEl) {\n            parentEl.setAttribute('clip-path', 'none');\n        }\n    }\n};\n\n/**\n * Mark a single clipPath to be used\n *\n * @param {Displayable} displayable displayable element\n */\nClippathManager.prototype.markUsed = function (displayable) {\n    var that = this;\n    // displayable.__clipPaths can only be `null`/`undefined` or an non-empty array.\n    if (displayable.__clipPaths) {\n        each$1(displayable.__clipPaths, function (clipPath) {\n            if (clipPath._dom) {\n                Definable.prototype.markUsed.call(that, clipPath._dom);\n            }\n            if (clipPath._textDom) {\n                Definable.prototype.markUsed.call(that, clipPath._textDom);\n            }\n        });\n    }\n};\n\n/**\n * @file Manages SVG shadow elements.\n * @author Zhang Wenli\n */\n\n/**\n * Manages SVG shadow elements.\n *\n * @class\n * @extends Definable\n * @param   {number}     zrId    zrender instance id\n * @param   {SVGElement} svgRoot root of SVG document\n */\nfunction ShadowManager(zrId, svgRoot) {\n    Definable.call(\n        this,\n        zrId,\n        svgRoot,\n        ['filter'],\n        '__filter_in_use__',\n        '_shadowDom'\n    );\n}\n\n\ninherits(ShadowManager, Definable);\n\n\n/**\n * Create new shadow DOM for fill or stroke if not exist,\n * but will not update shadow if exists.\n *\n * @param {SvgElement}  svgElement   SVG element to paint\n * @param {Displayable} displayable  zrender displayable element\n */\nShadowManager.prototype.addWithoutUpdate = function (\n    svgElement,\n    displayable\n) {\n    if (displayable && hasShadow(displayable.style)) {\n        var style = displayable.style;\n\n        // Create dom in <defs> if not exists\n        var dom;\n        if (style._shadowDom) {\n            // Gradient exists\n            dom = style._shadowDom;\n\n            var defs = this.getDefs(true);\n            if (!defs.contains(style._shadowDom)) {\n                // _shadowDom is no longer in defs, recreate\n                this.addDom(dom);\n            }\n        }\n        else {\n            // New dom\n            dom = this.add(displayable);\n        }\n\n        this.markUsed(displayable);\n\n        var id = dom.getAttribute('id');\n        svgElement.style.filter = 'url(#' + id + ')';\n    }\n};\n\n\n/**\n * Add a new shadow tag in <defs>\n *\n * @param {Displayable} displayable  zrender displayable element\n * @return {SVGFilterElement} created DOM\n */\nShadowManager.prototype.add = function (displayable) {\n    var dom = this.createElement('filter');\n    var style = displayable.style;\n\n    // Set dom id with shadow id, since each shadow instance\n    // will have no more than one dom element.\n    // id may exists before for those dirty elements, in which case\n    // id should remain the same, and other attributes should be\n    // updated.\n    style._shadowDomId = style._shadowDomId || this.nextId++;\n    dom.setAttribute('id', 'zr' + this._zrId\n        + '-shadow-' + style._shadowDomId);\n\n    this.updateDom(displayable, dom);\n    this.addDom(dom);\n\n    return dom;\n};\n\n\n/**\n * Update shadow.\n *\n * @param {Displayable} displayable  zrender displayable element\n */\nShadowManager.prototype.update = function (svgElement, displayable) {\n    var style = displayable.style;\n    if (hasShadow(style)) {\n        var that = this;\n        Definable.prototype.update.call(this, displayable, function (style) {\n            that.updateDom(displayable, style._shadowDom);\n        });\n    }\n    else {\n        // Remove shadow\n        this.remove(svgElement, style);\n    }\n};\n\n\n/**\n * Remove DOM and clear parent filter\n */\nShadowManager.prototype.remove = function (svgElement, style) {\n    if (style._shadowDomId != null) {\n        this.removeDom(style);\n        svgElement.style.filter = '';\n    }\n};\n\n\n/**\n * Update shadow dom\n *\n * @param {Displayable} displayable  zrender displayable element\n * @param {SVGFilterElement} dom DOM to update\n */\nShadowManager.prototype.updateDom = function (displayable, dom) {\n    var domChild = dom.getElementsByTagName('feDropShadow');\n    if (domChild.length === 0) {\n        domChild = this.createElement('feDropShadow');\n    }\n    else {\n        domChild = domChild[0];\n    }\n\n    var style = displayable.style;\n    var scaleX = displayable.scale ? (displayable.scale[0] || 1) : 1;\n    var scaleY = displayable.scale ? (displayable.scale[1] || 1) : 1;\n\n    // TODO: textBoxShadowBlur is not supported yet\n    var offsetX, offsetY, blur, color;\n    if (style.shadowBlur || style.shadowOffsetX || style.shadowOffsetY) {\n        offsetX = style.shadowOffsetX || 0;\n        offsetY = style.shadowOffsetY || 0;\n        blur = style.shadowBlur;\n        color = style.shadowColor;\n    }\n    else if (style.textShadowBlur) {\n        offsetX = style.textShadowOffsetX || 0;\n        offsetY = style.textShadowOffsetY || 0;\n        blur = style.textShadowBlur;\n        color = style.textShadowColor;\n    }\n    else {\n        // Remove shadow\n        this.removeDom(dom, style);\n        return;\n    }\n\n    domChild.setAttribute('dx', offsetX / scaleX);\n    domChild.setAttribute('dy', offsetY / scaleY);\n    domChild.setAttribute('flood-color', color);\n\n    // Divide by two here so that it looks the same as in canvas\n    // See: https://html.spec.whatwg.org/multipage/canvas.html#dom-context-2d-shadowblur\n    var stdDx = blur / 2 / scaleX;\n    var stdDy = blur / 2 / scaleY;\n    var stdDeviation = stdDx + ' ' + stdDy;\n    domChild.setAttribute('stdDeviation', stdDeviation);\n\n    // Fix filter clipping problem\n    dom.setAttribute('x', '-100%');\n    dom.setAttribute('y', '-100%');\n    dom.setAttribute('width', Math.ceil(blur / 2 * 200) + '%');\n    dom.setAttribute('height', Math.ceil(blur / 2 * 200) + '%');\n\n    dom.appendChild(domChild);\n\n    // Store dom element in shadow, to avoid creating multiple\n    // dom instances for the same shadow element\n    style._shadowDom = dom;\n};\n\n/**\n * Mark a single shadow to be used\n *\n * @param {Displayable} displayable displayable element\n */\nShadowManager.prototype.markUsed = function (displayable) {\n    var style = displayable.style;\n    if (style && style._shadowDom) {\n        Definable.prototype.markUsed.call(this, style._shadowDom);\n    }\n};\n\nfunction hasShadow(style) {\n    // TODO: textBoxShadowBlur is not supported yet\n    return style\n        && (style.shadowBlur || style.shadowOffsetX || style.shadowOffsetY\n            || style.textShadowBlur || style.textShadowOffsetX\n            || style.textShadowOffsetY);\n}\n\n/**\n * SVG Painter\n * @module zrender/svg/Painter\n */\n\nfunction parseInt10$2(val) {\n    return parseInt(val, 10);\n}\n\nfunction getSvgProxy(el) {\n    if (el instanceof Path) {\n        return svgPath;\n    }\n    else if (el instanceof ZImage) {\n        return svgImage;\n    }\n    else if (el instanceof Text) {\n        return svgText;\n    }\n    else {\n        return svgPath;\n    }\n}\n\nfunction checkParentAvailable(parent, child) {\n    return child && parent && child.parentNode !== parent;\n}\n\nfunction insertAfter(parent, child, prevSibling) {\n    if (checkParentAvailable(parent, child) && prevSibling) {\n        var nextSibling = prevSibling.nextSibling;\n        nextSibling ? parent.insertBefore(child, nextSibling)\n            : parent.appendChild(child);\n    }\n}\n\nfunction prepend(parent, child) {\n    if (checkParentAvailable(parent, child)) {\n        var firstChild = parent.firstChild;\n        firstChild ? parent.insertBefore(child, firstChild)\n            : parent.appendChild(child);\n    }\n}\n\nfunction remove$1(parent, child) {\n    if (child && parent && child.parentNode === parent) {\n        parent.removeChild(child);\n    }\n}\n\nfunction getTextSvgElement(displayable) {\n    return displayable.__textSvgEl;\n}\n\nfunction getSvgElement(displayable) {\n    return displayable.__svgEl;\n}\n\n/**\n * @alias module:zrender/svg/Painter\n * @constructor\n * @param {HTMLElement} root 绘图容器\n * @param {module:zrender/Storage} storage\n * @param {Object} opts\n */\nvar SVGPainter = function (root, storage, opts, zrId) {\n\n    this.root = root;\n    this.storage = storage;\n    this._opts = opts = extend({}, opts || {});\n\n    var svgRoot = createElement('svg');\n    svgRoot.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\n    svgRoot.setAttribute('version', '1.1');\n    svgRoot.setAttribute('baseProfile', 'full');\n    svgRoot.style.cssText = 'user-select:none;position:absolute;left:0;top:0;';\n\n    this.gradientManager = new GradientManager(zrId, svgRoot);\n    this.clipPathManager = new ClippathManager(zrId, svgRoot);\n    this.shadowManager = new ShadowManager(zrId, svgRoot);\n\n    var viewport = document.createElement('div');\n    viewport.style.cssText = 'overflow:hidden;position:relative';\n\n    this._svgRoot = svgRoot;\n    this._viewport = viewport;\n\n    root.appendChild(viewport);\n    viewport.appendChild(svgRoot);\n\n    this.resize(opts.width, opts.height);\n\n    this._visibleList = [];\n};\n\nSVGPainter.prototype = {\n\n    constructor: SVGPainter,\n\n    getType: function () {\n        return 'svg';\n    },\n\n    getViewportRoot: function () {\n        return this._viewport;\n    },\n\n    getViewportRootOffset: function () {\n        var viewportRoot = this.getViewportRoot();\n        if (viewportRoot) {\n            return {\n                offsetLeft: viewportRoot.offsetLeft || 0,\n                offsetTop: viewportRoot.offsetTop || 0\n            };\n        }\n    },\n\n    refresh: function () {\n\n        var list = this.storage.getDisplayList(true);\n\n        this._paintList(list);\n    },\n\n    setBackgroundColor: function (backgroundColor) {\n        // TODO gradient\n        this._viewport.style.background = backgroundColor;\n    },\n\n    _paintList: function (list) {\n        this.gradientManager.markAllUnused();\n        this.clipPathManager.markAllUnused();\n        this.shadowManager.markAllUnused();\n\n        var svgRoot = this._svgRoot;\n        var visibleList = this._visibleList;\n        var listLen = list.length;\n\n        var newVisibleList = [];\n        var i;\n        for (i = 0; i < listLen; i++) {\n            var displayable = list[i];\n            var svgProxy = getSvgProxy(displayable);\n            var svgElement = getSvgElement(displayable)\n                || getTextSvgElement(displayable);\n            if (!displayable.invisible) {\n                if (displayable.__dirty) {\n                    svgProxy && svgProxy.brush(displayable);\n\n                    // Update clipPath\n                    this.clipPathManager.update(displayable);\n\n                    // Update gradient and shadow\n                    if (displayable.style) {\n                        this.gradientManager\n                            .update(displayable.style.fill);\n                        this.gradientManager\n                            .update(displayable.style.stroke);\n\n                        this.shadowManager\n                            .update(svgElement, displayable);\n                    }\n\n                    displayable.__dirty = false;\n                }\n                newVisibleList.push(displayable);\n            }\n        }\n\n        var diff = arrayDiff$1(visibleList, newVisibleList);\n        var prevSvgElement;\n\n        // First do remove, in case element moved to the head and do remove\n        // after add\n        for (i = 0; i < diff.length; i++) {\n            var item = diff[i];\n            if (item.removed) {\n                for (var k = 0; k < item.count; k++) {\n                    var displayable = visibleList[item.indices[k]];\n                    var svgElement = getSvgElement(displayable);\n                    var textSvgElement = getTextSvgElement(displayable);\n                    remove$1(svgRoot, svgElement);\n                    remove$1(svgRoot, textSvgElement);\n                }\n            }\n        }\n        for (i = 0; i < diff.length; i++) {\n            var item = diff[i];\n            if (item.added) {\n                for (var k = 0; k < item.count; k++) {\n                    var displayable = newVisibleList[item.indices[k]];\n                    var svgElement = getSvgElement(displayable);\n                    var textSvgElement = getTextSvgElement(displayable);\n                    prevSvgElement\n                        ? insertAfter(svgRoot, svgElement, prevSvgElement)\n                        : prepend(svgRoot, svgElement);\n                    if (svgElement) {\n                        insertAfter(svgRoot, textSvgElement, svgElement);\n                    }\n                    else if (prevSvgElement) {\n                        insertAfter(\n                            svgRoot, textSvgElement, prevSvgElement\n                        );\n                    }\n                    else {\n                        prepend(svgRoot, textSvgElement);\n                    }\n                    // Insert text\n                    insertAfter(svgRoot, textSvgElement, svgElement);\n                    prevSvgElement = textSvgElement || svgElement\n                        || prevSvgElement;\n\n                    this.gradientManager\n                        .addWithoutUpdate(svgElement, displayable);\n                    this.shadowManager\n                        .addWithoutUpdate(prevSvgElement, displayable);\n                    this.clipPathManager.markUsed(displayable);\n                }\n            }\n            else if (!item.removed) {\n                for (var k = 0; k < item.count; k++) {\n                    var displayable = newVisibleList[item.indices[k]];\n                    prevSvgElement =\n                        svgElement =\n                        getTextSvgElement(displayable)\n                        || getSvgElement(displayable)\n                        || prevSvgElement;\n\n                    this.gradientManager.markUsed(displayable);\n                    this.gradientManager\n                        .addWithoutUpdate(svgElement, displayable);\n\n                    this.shadowManager.markUsed(displayable);\n                    this.shadowManager\n                        .addWithoutUpdate(svgElement, displayable);\n\n                    this.clipPathManager.markUsed(displayable);\n                }\n            }\n        }\n\n        this.gradientManager.removeUnused();\n        this.clipPathManager.removeUnused();\n        this.shadowManager.removeUnused();\n\n        this._visibleList = newVisibleList;\n    },\n\n    _getDefs: function (isForceCreating) {\n        var svgRoot = this._svgRoot;\n        var defs = this._svgRoot.getElementsByTagName('defs');\n        if (defs.length === 0) {\n            // Not exist\n            if (isForceCreating) {\n                var defs = svgRoot.insertBefore(\n                    createElement('defs'), // Create new tag\n                    svgRoot.firstChild // Insert in the front of svg\n                );\n                if (!defs.contains) {\n                    // IE doesn't support contains method\n                    defs.contains = function (el) {\n                        var children = defs.children;\n                        if (!children) {\n                            return false;\n                        }\n                        for (var i = children.length - 1; i >= 0; --i) {\n                            if (children[i] === el) {\n                                return true;\n                            }\n                        }\n                        return false;\n                    };\n                }\n                return defs;\n            }\n            else {\n                return null;\n            }\n        }\n        else {\n            return defs[0];\n        }\n    },\n\n    resize: function (width, height) {\n        var viewport = this._viewport;\n        // FIXME Why ?\n        viewport.style.display = 'none';\n\n        // Save input w/h\n        var opts = this._opts;\n        width != null && (opts.width = width);\n        height != null && (opts.height = height);\n\n        width = this._getSize(0);\n        height = this._getSize(1);\n\n        viewport.style.display = '';\n\n        if (this._width !== width || this._height !== height) {\n            this._width = width;\n            this._height = height;\n\n            var viewportStyle = viewport.style;\n            viewportStyle.width = width + 'px';\n            viewportStyle.height = height + 'px';\n\n            var svgRoot = this._svgRoot;\n            // Set width by 'svgRoot.width = width' is invalid\n            svgRoot.setAttribute('width', width);\n            svgRoot.setAttribute('height', height);\n        }\n    },\n\n    /**\n     * 获取绘图区域宽度\n     */\n    getWidth: function () {\n        return this._width;\n    },\n\n    /**\n     * 获取绘图区域高度\n     */\n    getHeight: function () {\n        return this._height;\n    },\n\n    _getSize: function (whIdx) {\n        var opts = this._opts;\n        var wh = ['width', 'height'][whIdx];\n        var cwh = ['clientWidth', 'clientHeight'][whIdx];\n        var plt = ['paddingLeft', 'paddingTop'][whIdx];\n        var prb = ['paddingRight', 'paddingBottom'][whIdx];\n\n        if (opts[wh] != null && opts[wh] !== 'auto') {\n            return parseFloat(opts[wh]);\n        }\n\n        var root = this.root;\n        // IE8 does not support getComputedStyle, but it use VML.\n        var stl = document.defaultView.getComputedStyle(root);\n\n        return (\n            (root[cwh] || parseInt10$2(stl[wh]) || parseInt10$2(root.style[wh]))\n            - (parseInt10$2(stl[plt]) || 0)\n            - (parseInt10$2(stl[prb]) || 0)\n        ) | 0;\n    },\n\n    dispose: function () {\n        this.root.innerHTML = '';\n\n        this._svgRoot =\n            this._viewport =\n            this.storage =\n            null;\n    },\n\n    clear: function () {\n        if (this._viewport) {\n            this.root.removeChild(this._viewport);\n        }\n    },\n\n    pathToDataUrl: function () {\n        this.refresh();\n        var html = this._svgRoot.outerHTML;\n        return 'data:image/svg+xml;charset=UTF-8,' + html;\n    }\n};\n\n// Not supported methods\nfunction createMethodNotSupport$1(method) {\n    return function () {\n        zrLog('In SVG mode painter not support method \"' + method + '\"');\n    };\n}\n\n// Unsuppoted methods\neach$1([\n    'getLayer', 'insertLayer', 'eachLayer', 'eachBuiltinLayer',\n    'eachOtherLayer', 'getLayers', 'modLayer', 'delLayer', 'clearLayer',\n    'toDataURL', 'pathToImage'\n], function (name) {\n    SVGPainter.prototype[name] = createMethodNotSupport$1(name);\n});\n\nregisterPainter('svg', SVGPainter);\n\n/*\n* Licensed to the Apache Software Foundation (ASF) under one\n* or more contributor license agreements.  See the NOTICE file\n* distributed with this work for additional information\n* regarding copyright ownership.  The ASF licenses this file\n* to you under the Apache License, Version 2.0 (the\n* \"License\"); you may not use this file except in compliance\n* with the License.  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,\n* software distributed under the License is distributed on an\n* \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n* KIND, either express or implied.  See the License for the\n* specific language governing permissions and limitations\n* under the License.\n*/\n\n// ----------------------------------------------\n// All of the modules that are allowed to be\n// imported are listed below.\n//\n// Users MUST NOT import other modules that are\n// not included in this list.\n// ----------------------------------------------\n\n\n\n// ----------------\n// Charts (series)\n// ----------------\n\n\n\n// All of the series types, for example:\n// chart.setOption({\n//     series: [{\n//         type: 'line' // or 'bar', 'pie', ...\n//     }]\n// });\n\n// -------------------\n// Coordinate systems\n// -------------------\n\n\n\n// All of the axis modules have been included in the\n// coordinate system module below, do not need to\n// make extra import.\n\n// `cartesian` coordinate system. For some historical\n// reasons, it is named as grid, for example:\n// chart.setOption({\n//     grid: {...},\n//     xAxis: {...},\n//     yAxis: {...},\n//     series: [{...}]\n// });\n// `polar` coordinate system, for example:\n// chart.setOption({\n//     polar: {...},\n//     radiusAxis: {...},\n//     angleAxis: {...},\n//     series: [{\n//         coordinateSystem: 'polar'\n//     }]\n// });\n// `geo` coordinate system, for example:\n// chart.setOption({\n//     geo: {...},\n//     series: [{\n//         coordinateSystem: 'geo'\n//     }]\n// });\n// `singleAxis` coordinate system (notice, it is a coordinate system\n// with only one axis, work for chart like theme river), for example:\n// chart.setOption({\n//     singleAxis: {...}\n//     series: [{type: 'themeRiver', ...}]\n// });\n// `parallel` coordinate system, only work for parallel series, for example:\n// chart.setOption({\n//     parallel: {...},\n//     parallelAxis: [{...}, ...],\n//     series: [{\n//         type: 'parallel'\n//     }]\n// });\n// `calendar` coordinate system. for example,\n// chart.setOptionp({\n//     calendar: {...},\n//     series: [{\n//         coordinateSystem: 'calendar'\n//     }]\n// );\n// ------------------\n// Other components\n// ------------------\n\n\n\n// `grapchic` component, for example:\n// chart.setOption({\n//     graphic: {...}\n// });\n// `toolbox` component, for example:\n// chart.setOption({\n//     toolbox: {...}\n// });\n// `tooltip` component, for example:\n// chart.setOption({\n//     tooltip: {...}\n// });\n// `axisPointer` component, for example:\n// chart.setOption({\n//     tooltip: {axisPointer: {...}, ...}\n// });\n// Or\n// chart.setOption({\n//     axisPointer: {...}\n// });\n// `brush` component, for example:\n// chart.setOption({\n//     brush: {...}\n// });\n// Or\n// chart.setOption({\n//     tooltip: {feature: {brush: {...}}\n// })\n// `title` component, for example:\n// chart.setOption({\n//     title: {...}\n// });\n// `timeline` component, for example:\n// chart.setOption({\n//     timeline: {...}\n// });\n// `markPoint` component, for example:\n// chart.setOption({\n//     series: [{markPoint: {...}}]\n// });\n// `markLine` component, for example:\n// chart.setOption({\n//     series: [{markLine: {...}}]\n// });\n// `markArea` component, for example:\n// chart.setOption({\n//     series: [{markArea: {...}}]\n// });\n// `legend` component scrollable, for example:\n// chart.setOption({\n//     legend: {type: 'scroll'}\n// });\n// `legend` component not scrollable. for example:\n// chart.setOption({\n//     legend: {...}\n// });\n// `dataZoom` component including both `dataZoomInside` and `dataZoomSlider`.\n// `dataZoom` component providing drag, pinch, wheel behaviors\n// inside coodinate system, for example:\n// chart.setOption({\n//     dataZoom: {type: 'inside'}\n// });\n// `dataZoom` component providing a slider bar, for example:\n// chart.setOption({\n//     dataZoom: {type: 'slider'}\n// });\n// `dataZoom` component including both `visualMapContinuous` and `visualMapPiecewise`.\n// `visualMap` component providing continuous bar, for example:\n// chart.setOption({\n//     visualMap: {type: 'continuous'}\n// });\n// `visualMap` component providing pieces bar, for example:\n// chart.setOption({\n//     visualMap: {type: 'piecewise'}\n// });\n// -----------------\n// Render engines\n// -----------------\n\n\n\n// Provide IE 6,7,8 compatibility.\n// Render via SVG rather than canvas.\n\nexports.version = version;\nexports.dependencies = dependencies;\nexports.PRIORITY = PRIORITY;\nexports.init = init;\nexports.connect = connect;\nexports.disConnect = disConnect;\nexports.disconnect = disconnect;\nexports.dispose = dispose;\nexports.getInstanceByDom = getInstanceByDom;\nexports.getInstanceById = getInstanceById;\nexports.registerTheme = registerTheme;\nexports.registerPreprocessor = registerPreprocessor;\nexports.registerProcessor = registerProcessor;\nexports.registerPostUpdate = registerPostUpdate;\nexports.registerAction = registerAction;\nexports.registerCoordinateSystem = registerCoordinateSystem;\nexports.getCoordinateSystemDimensions = getCoordinateSystemDimensions;\nexports.registerLayout = registerLayout;\nexports.registerVisual = registerVisual;\nexports.registerLoading = registerLoading;\nexports.extendComponentModel = extendComponentModel;\nexports.extendComponentView = extendComponentView;\nexports.extendSeriesModel = extendSeriesModel;\nexports.extendChartView = extendChartView;\nexports.setCanvasCreator = setCanvasCreator;\nexports.registerMap = registerMap;\nexports.getMap = getMap;\nexports.dataTool = dataTool;\nexports.zrender = zrender;\nexports.number = number;\nexports.format = format;\nexports.throttle = throttle;\nexports.helper = helper;\nexports.matrix = matrix;\nexports.vector = vector;\nexports.color = color;\nexports.parseGeoJSON = parseGeoJson$1;\nexports.parseGeoJson = parseGeoJson;\nexports.util = ecUtil;\nexports.graphic = graphic$1;\nexports.List = List;\nexports.Model = Model;\nexports.Axis = Axis;\nexports.env = env$1;\n\n})));\n//# sourceMappingURL=echarts.js.map\n"
  },
  {
    "path": "public/backend/vendors/js/extensions/lang-all.js",
    "content": "!function(e,a){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=a(require(\"moment\"),require(\"fullcalendar\")):\"function\"==typeof define&&define.amd?define([\"moment\",\"fullcalendar\"],a):\"object\"==typeof exports?a(require(\"moment\"),require(\"fullcalendar\")):a(e.moment,e.FullCalendar)}(\"undefined\"!=typeof self?self:this,function(e,a){return function(e){function a(n){if(t[n])return t[n].exports;var r=t[n]={i:n,l:!1,exports:{}};return e[n].call(r.exports,r,r.exports,a),r.l=!0,r.exports}var t={};return a.m=e,a.c=t,a.d=function(e,t,n){a.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:n})},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,\"a\",t),t},a.o=function(e,a){return Object.prototype.hasOwnProperty.call(e,a)},a.p=\"\",a(a.s=434)}([function(a,t){a.exports=e},function(e,t){e.exports=a},,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(66);var n=t(1);n.datepickerLocale(\"af\",\"af\",{closeText:\"Selekteer\",prevText:\"Vorige\",nextText:\"Volgende\",currentText:\"Vandag\",monthNames:[\"Januarie\",\"Februarie\",\"Maart\",\"April\",\"Mei\",\"Junie\",\"Julie\",\"Augustus\",\"September\",\"Oktober\",\"November\",\"Desember\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mrt\",\"Apr\",\"Mei\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Okt\",\"Nov\",\"Des\"],dayNames:[\"Sondag\",\"Maandag\",\"Dinsdag\",\"Woensdag\",\"Donderdag\",\"Vrydag\",\"Saterdag\"],dayNamesShort:[\"Son\",\"Maa\",\"Din\",\"Woe\",\"Don\",\"Vry\",\"Sat\"],dayNamesMin:[\"So\",\"Ma\",\"Di\",\"Wo\",\"Do\",\"Vr\",\"Sa\"],weekHeader:\"Wk\",dateFormat:\"dd/mm/yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"af\",{buttonText:{year:\"Jaar\",month:\"Maand\",week:\"Week\",day:\"Dag\",list:\"Agenda\"},allDayHtml:\"Heeldag\",eventLimitText:\"Addisionele\",noEventsMessage:\"Daar is geen gebeurtenisse nie\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"af\",{months:\"Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember\".split(\"_\"),monthsShort:\"Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des\".split(\"_\"),weekdays:\"Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag\".split(\"_\"),weekdaysShort:\"Son_Maa_Din_Woe_Don_Vry_Sat\".split(\"_\"),weekdaysMin:\"So_Ma_Di_Wo_Do_Vr_Sa\".split(\"_\"),meridiemParse:/vm|nm/i,isPM:function(e){return/^nm$/i.test(e)},meridiem:function(e,a,t){return e<12?t?\"vm\":\"VM\":t?\"nm\":\"NM\"},longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Vandag om] LT\",nextDay:\"[MÃ´re om] LT\",nextWeek:\"dddd [om] LT\",lastDay:\"[Gister om] LT\",lastWeek:\"[Laas] dddd [om] LT\",sameElse:\"L\"},relativeTime:{future:\"oor %s\",past:\"%s gelede\",s:\"'n paar sekondes\",ss:\"%d sekondes\",m:\"'n minuut\",mm:\"%d minute\",h:\"'n uur\",hh:\"%d ure\",d:\"'n dag\",dd:\"%d dae\",M:\"'n maand\",MM:\"%d maande\",y:\"'n jaar\",yy:\"%d jaar\"},dayOfMonthOrdinalParse:/\\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||e>=20?\"ste\":\"de\")},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(68);var n=t(1);n.datepickerLocale(\"ar-dz\",\"ar-DZ\",{closeText:\"Ø¥ØºÙ„Ø§Ù‚\",prevText:\"&#x3C;Ø§Ù„Ø³Ø§Ø¨Ù‚\",nextText:\"Ø§Ù„ØªØ§Ù„ÙŠ&#x3E;\",currentText:\"Ø§Ù„ÙŠÙˆÙ…\",monthNames:[\"Ø¬Ø§Ù†ÙÙŠ\",\"ÙÙŠÙØ±ÙŠ\",\"Ù…Ø§Ø±Ø³\",\"Ø£ÙØ±ÙŠÙ„\",\"Ù…Ø§ÙŠ\",\"Ø¬ÙˆØ§Ù†\",\"Ø¬ÙˆÙŠÙ„ÙŠØ©\",\"Ø£ÙˆØª\",\"Ø³Ø¨ØªÙ…Ø¨Ø±\",\"Ø£ÙƒØªÙˆØ¨Ø±\",\"Ù†ÙˆÙÙ…Ø¨Ø±\",\"Ø¯ÙŠØ³Ù…Ø¨Ø±\"],monthNamesShort:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],dayNames:[\"Ø§Ù„Ø£Ø­Ø¯\",\"Ø§Ù„Ø§Ø«Ù†ÙŠÙ†\",\"Ø§Ù„Ø«Ù„Ø§Ø«Ø§Ø¡\",\"Ø§Ù„Ø£Ø±Ø¨Ø¹Ø§Ø¡\",\"Ø§Ù„Ø®Ù…ÙŠØ³\",\"Ø§Ù„Ø¬Ù…Ø¹Ø©\",\"Ø§Ù„Ø³Ø¨Øª\"],dayNamesShort:[\"Ø§Ù„Ø£Ø­Ø¯\",\"Ø§Ù„Ø§Ø«Ù†ÙŠÙ†\",\"Ø§Ù„Ø«Ù„Ø§Ø«Ø§Ø¡\",\"Ø§Ù„Ø£Ø±Ø¨Ø¹Ø§Ø¡\",\"Ø§Ù„Ø®Ù…ÙŠØ³\",\"Ø§Ù„Ø¬Ù…Ø¹Ø©\",\"Ø§Ù„Ø³Ø¨Øª\"],dayNamesMin:[\"Ø­\",\"Ù†\",\"Ø«\",\"Ø±\",\"Ø®\",\"Ø¬\",\"Ø³\"],weekHeader:\"Ø£Ø³Ø¨ÙˆØ¹\",dateFormat:\"dd/mm/yy\",firstDay:6,isRTL:!0,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"ar-dz\",{buttonText:{month:\"Ø´Ù‡Ø±\",week:\"Ø£Ø³Ø¨ÙˆØ¹\",day:\"ÙŠÙˆÙ…\",list:\"Ø£Ø¬Ù†Ø¯Ø©\"},allDayText:\"Ø§Ù„ÙŠÙˆÙ… ÙƒÙ„Ù‡\",eventLimitText:\"Ø£Ø®Ø±Ù‰\",noEventsMessage:\"Ø£ÙŠ Ø£Ø­Ø¯Ø§Ø« Ù„Ø¹Ø±Ø¶\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"ar-dz\",{months:\"Ø¬Ø§Ù†ÙÙŠ_ÙÙŠÙØ±ÙŠ_Ù…Ø§Ø±Ø³_Ø£ÙØ±ÙŠÙ„_Ù…Ø§ÙŠ_Ø¬ÙˆØ§Ù†_Ø¬ÙˆÙŠÙ„ÙŠØ©_Ø£ÙˆØª_Ø³Ø¨ØªÙ…Ø¨Ø±_Ø£ÙƒØªÙˆØ¨Ø±_Ù†ÙˆÙÙ…Ø¨Ø±_Ø¯ÙŠØ³Ù…Ø¨Ø±\".split(\"_\"),monthsShort:\"Ø¬Ø§Ù†ÙÙŠ_ÙÙŠÙØ±ÙŠ_Ù…Ø§Ø±Ø³_Ø£ÙØ±ÙŠÙ„_Ù…Ø§ÙŠ_Ø¬ÙˆØ§Ù†_Ø¬ÙˆÙŠÙ„ÙŠØ©_Ø£ÙˆØª_Ø³Ø¨ØªÙ…Ø¨Ø±_Ø£ÙƒØªÙˆØ¨Ø±_Ù†ÙˆÙÙ…Ø¨Ø±_Ø¯ÙŠØ³Ù…Ø¨Ø±\".split(\"_\"),weekdays:\"Ø§Ù„Ø£Ø­Ø¯_Ø§Ù„Ø¥Ø«Ù†ÙŠÙ†_Ø§Ù„Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ù„Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø§Ù„Ø®Ù…ÙŠØ³_Ø§Ù„Ø¬Ù…Ø¹Ø©_Ø§Ù„Ø³Ø¨Øª\".split(\"_\"),weekdaysShort:\"Ø§Ø­Ø¯_Ø§Ø«Ù†ÙŠÙ†_Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ø±Ø¨Ø¹Ø§Ø¡_Ø®Ù…ÙŠØ³_Ø¬Ù…Ø¹Ø©_Ø³Ø¨Øª\".split(\"_\"),weekdaysMin:\"Ø£Ø­_Ø¥Ø«_Ø«Ù„Ø§_Ø£Ø±_Ø®Ù…_Ø¬Ù…_Ø³Ø¨\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Ø§Ù„ÙŠÙˆÙ… Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",nextDay:\"[ØºØ¯Ø§ Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",nextWeek:\"dddd [Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",lastDay:\"[Ø£Ù…Ø³ Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",lastWeek:\"dddd [Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",sameElse:\"L\"},relativeTime:{future:\"ÙÙŠ %s\",past:\"Ù…Ù†Ø° %s\",s:\"Ø«ÙˆØ§Ù†\",ss:\"%d Ø«Ø§Ù†ÙŠØ©\",m:\"Ø¯Ù‚ÙŠÙ‚Ø©\",mm:\"%d Ø¯Ù‚Ø§Ø¦Ù‚\",h:\"Ø³Ø§Ø¹Ø©\",hh:\"%d Ø³Ø§Ø¹Ø§Øª\",d:\"ÙŠÙˆÙ…\",dd:\"%d Ø£ÙŠØ§Ù…\",M:\"Ø´Ù‡Ø±\",MM:\"%d Ø£Ø´Ù‡Ø±\",y:\"Ø³Ù†Ø©\",yy:\"%d Ø³Ù†ÙˆØ§Øª\"},week:{dow:0,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(70);var n=t(1);n.datepickerLocale(\"ar-kw\",\"ar\",{closeText:\"Ø¥ØºÙ„Ø§Ù‚\",prevText:\"&#x3C;Ø§Ù„Ø³Ø§Ø¨Ù‚\",nextText:\"Ø§Ù„ØªØ§Ù„ÙŠ&#x3E;\",currentText:\"Ø§Ù„ÙŠÙˆÙ…\",monthNames:[\"ÙŠÙ†Ø§ÙŠØ±\",\"ÙØ¨Ø±Ø§ÙŠØ±\",\"Ù…Ø§Ø±Ø³\",\"Ø£Ø¨Ø±ÙŠÙ„\",\"Ù…Ø§ÙŠÙˆ\",\"ÙŠÙˆÙ†ÙŠÙˆ\",\"ÙŠÙˆÙ„ÙŠÙˆ\",\"Ø£ØºØ³Ø·Ø³\",\"Ø³Ø¨ØªÙ…Ø¨Ø±\",\"Ø£ÙƒØªÙˆØ¨Ø±\",\"Ù†ÙˆÙÙ…Ø¨Ø±\",\"Ø¯ÙŠØ³Ù…Ø¨Ø±\"],monthNamesShort:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],dayNames:[\"Ø§Ù„Ø£Ø­Ø¯\",\"Ø§Ù„Ø§Ø«Ù†ÙŠÙ†\",\"Ø§Ù„Ø«Ù„Ø§Ø«Ø§Ø¡\",\"Ø§Ù„Ø£Ø±Ø¨Ø¹Ø§Ø¡\",\"Ø§Ù„Ø®Ù…ÙŠØ³\",\"Ø§Ù„Ø¬Ù…Ø¹Ø©\",\"Ø§Ù„Ø³Ø¨Øª\"],dayNamesShort:[\"Ø£Ø­Ø¯\",\"Ø§Ø«Ù†ÙŠÙ†\",\"Ø«Ù„Ø§Ø«Ø§Ø¡\",\"Ø£Ø±Ø¨Ø¹Ø§Ø¡\",\"Ø®Ù…ÙŠØ³\",\"Ø¬Ù…Ø¹Ø©\",\"Ø³Ø¨Øª\"],dayNamesMin:[\"Ø­\",\"Ù†\",\"Ø«\",\"Ø±\",\"Ø®\",\"Ø¬\",\"Ø³\"],weekHeader:\"Ø£Ø³Ø¨ÙˆØ¹\",dateFormat:\"dd/mm/yy\",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"ar-kw\",{buttonText:{month:\"Ø´Ù‡Ø±\",week:\"Ø£Ø³Ø¨ÙˆØ¹\",day:\"ÙŠÙˆÙ…\",list:\"Ø£Ø¬Ù†Ø¯Ø©\"},allDayText:\"Ø§Ù„ÙŠÙˆÙ… ÙƒÙ„Ù‡\",eventLimitText:\"Ø£Ø®Ø±Ù‰\",noEventsMessage:\"Ø£ÙŠ Ø£Ø­Ø¯Ø§Ø« Ù„Ø¹Ø±Ø¶\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"ar-kw\",{months:\"ÙŠÙ†Ø§ÙŠØ±_ÙØ¨Ø±Ø§ÙŠØ±_Ù…Ø§Ø±Ø³_Ø£Ø¨Ø±ÙŠÙ„_Ù…Ø§ÙŠ_ÙŠÙˆÙ†ÙŠÙˆ_ÙŠÙˆÙ„ÙŠÙˆØ²_ØºØ´Øª_Ø´ØªÙ†Ø¨Ø±_Ø£ÙƒØªÙˆØ¨Ø±_Ù†ÙˆÙ†Ø¨Ø±_Ø¯Ø¬Ù†Ø¨Ø±\".split(\"_\"),monthsShort:\"ÙŠÙ†Ø§ÙŠØ±_ÙØ¨Ø±Ø§ÙŠØ±_Ù…Ø§Ø±Ø³_Ø£Ø¨Ø±ÙŠÙ„_Ù…Ø§ÙŠ_ÙŠÙˆÙ†ÙŠÙˆ_ÙŠÙˆÙ„ÙŠÙˆØ²_ØºØ´Øª_Ø´ØªÙ†Ø¨Ø±_Ø£ÙƒØªÙˆØ¨Ø±_Ù†ÙˆÙ†Ø¨Ø±_Ø¯Ø¬Ù†Ø¨Ø±\".split(\"_\"),weekdays:\"Ø§Ù„Ø£Ø­Ø¯_Ø§Ù„Ø¥ØªÙ†ÙŠÙ†_Ø§Ù„Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ù„Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø§Ù„Ø®Ù…ÙŠØ³_Ø§Ù„Ø¬Ù…Ø¹Ø©_Ø§Ù„Ø³Ø¨Øª\".split(\"_\"),weekdaysShort:\"Ø§Ø­Ø¯_Ø§ØªÙ†ÙŠÙ†_Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ø±Ø¨Ø¹Ø§Ø¡_Ø®Ù…ÙŠØ³_Ø¬Ù…Ø¹Ø©_Ø³Ø¨Øª\".split(\"_\"),weekdaysMin:\"Ø­_Ù†_Ø«_Ø±_Ø®_Ø¬_Ø³\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Ø§Ù„ÙŠÙˆÙ… Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",nextDay:\"[ØºØ¯Ø§ Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",nextWeek:\"dddd [Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",lastDay:\"[Ø£Ù…Ø³ Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",lastWeek:\"dddd [Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",sameElse:\"L\"},relativeTime:{future:\"ÙÙŠ %s\",past:\"Ù…Ù†Ø° %s\",s:\"Ø«ÙˆØ§Ù†\",ss:\"%d Ø«Ø§Ù†ÙŠØ©\",m:\"Ø¯Ù‚ÙŠÙ‚Ø©\",mm:\"%d Ø¯Ù‚Ø§Ø¦Ù‚\",h:\"Ø³Ø§Ø¹Ø©\",hh:\"%d Ø³Ø§Ø¹Ø§Øª\",d:\"ÙŠÙˆÙ…\",dd:\"%d Ø£ÙŠØ§Ù…\",M:\"Ø´Ù‡Ø±\",MM:\"%d Ø£Ø´Ù‡Ø±\",y:\"Ø³Ù†Ø©\",yy:\"%d Ø³Ù†ÙˆØ§Øª\"},week:{dow:0,doy:12}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(72);var n=t(1);n.datepickerLocale(\"ar-ly\",\"ar\",{closeText:\"Ø¥ØºÙ„Ø§Ù‚\",prevText:\"&#x3C;Ø§Ù„Ø³Ø§Ø¨Ù‚\",nextText:\"Ø§Ù„ØªØ§Ù„ÙŠ&#x3E;\",currentText:\"Ø§Ù„ÙŠÙˆÙ…\",monthNames:[\"ÙŠÙ†Ø§ÙŠØ±\",\"ÙØ¨Ø±Ø§ÙŠØ±\",\"Ù…Ø§Ø±Ø³\",\"Ø£Ø¨Ø±ÙŠÙ„\",\"Ù…Ø§ÙŠÙˆ\",\"ÙŠÙˆÙ†ÙŠÙˆ\",\"ÙŠÙˆÙ„ÙŠÙˆ\",\"Ø£ØºØ³Ø·Ø³\",\"Ø³Ø¨ØªÙ…Ø¨Ø±\",\"Ø£ÙƒØªÙˆØ¨Ø±\",\"Ù†ÙˆÙÙ…Ø¨Ø±\",\"Ø¯ÙŠØ³Ù…Ø¨Ø±\"],monthNamesShort:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],dayNames:[\"Ø§Ù„Ø£Ø­Ø¯\",\"Ø§Ù„Ø§Ø«Ù†ÙŠÙ†\",\"Ø§Ù„Ø«Ù„Ø§Ø«Ø§Ø¡\",\"Ø§Ù„Ø£Ø±Ø¨Ø¹Ø§Ø¡\",\"Ø§Ù„Ø®Ù…ÙŠØ³\",\"Ø§Ù„Ø¬Ù…Ø¹Ø©\",\"Ø§Ù„Ø³Ø¨Øª\"],dayNamesShort:[\"Ø£Ø­Ø¯\",\"Ø§Ø«Ù†ÙŠÙ†\",\"Ø«Ù„Ø§Ø«Ø§Ø¡\",\"Ø£Ø±Ø¨Ø¹Ø§Ø¡\",\"Ø®Ù…ÙŠØ³\",\"Ø¬Ù…Ø¹Ø©\",\"Ø³Ø¨Øª\"],dayNamesMin:[\"Ø­\",\"Ù†\",\"Ø«\",\"Ø±\",\"Ø®\",\"Ø¬\",\"Ø³\"],weekHeader:\"Ø£Ø³Ø¨ÙˆØ¹\",dateFormat:\"dd/mm/yy\",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"ar-ly\",{buttonText:{month:\"Ø´Ù‡Ø±\",week:\"Ø£Ø³Ø¨ÙˆØ¹\",day:\"ÙŠÙˆÙ…\",list:\"Ø£Ø¬Ù†Ø¯Ø©\"},allDayText:\"Ø§Ù„ÙŠÙˆÙ… ÙƒÙ„Ù‡\",eventLimitText:\"Ø£Ø®Ø±Ù‰\",noEventsMessage:\"Ø£ÙŠ Ø£Ø­Ø¯Ø§Ø« Ù„Ø¹Ø±Ø¶\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){var a={1:\"1\",2:\"2\",3:\"3\",4:\"4\",5:\"5\",6:\"6\",7:\"7\",8:\"8\",9:\"9\",0:\"0\"},t=function(e){return 0===e?0:1===e?1:2===e?2:e%100>=3&&e%100<=10?3:e%100>=11?4:5},n={s:[\"Ø£Ù‚Ù„ Ù…Ù† Ø«Ø§Ù†ÙŠØ©\",\"Ø«Ø§Ù†ÙŠØ© ÙˆØ§Ø­Ø¯Ø©\",[\"Ø«Ø§Ù†ÙŠØªØ§Ù†\",\"Ø«Ø§Ù†ÙŠØªÙŠÙ†\"],\"%d Ø«ÙˆØ§Ù†\",\"%d Ø«Ø§Ù†ÙŠØ©\",\"%d Ø«Ø§Ù†ÙŠØ©\"],m:[\"Ø£Ù‚Ù„ Ù…Ù† Ø¯Ù‚ÙŠÙ‚Ø©\",\"Ø¯Ù‚ÙŠÙ‚Ø© ÙˆØ§Ø­Ø¯Ø©\",[\"Ø¯Ù‚ÙŠÙ‚ØªØ§Ù†\",\"Ø¯Ù‚ÙŠÙ‚ØªÙŠÙ†\"],\"%d Ø¯Ù‚Ø§Ø¦Ù‚\",\"%d Ø¯Ù‚ÙŠÙ‚Ø©\",\"%d Ø¯Ù‚ÙŠÙ‚Ø©\"],h:[\"Ø£Ù‚Ù„ Ù…Ù† Ø³Ø§Ø¹Ø©\",\"Ø³Ø§Ø¹Ø© ÙˆØ§Ø­Ø¯Ø©\",[\"Ø³Ø§Ø¹ØªØ§Ù†\",\"Ø³Ø§Ø¹ØªÙŠÙ†\"],\"%d Ø³Ø§Ø¹Ø§Øª\",\"%d Ø³Ø§Ø¹Ø©\",\"%d Ø³Ø§Ø¹Ø©\"],d:[\"Ø£Ù‚Ù„ Ù…Ù† ÙŠÙˆÙ…\",\"ÙŠÙˆÙ… ÙˆØ§Ø­Ø¯\",[\"ÙŠÙˆÙ…Ø§Ù†\",\"ÙŠÙˆÙ…ÙŠÙ†\"],\"%d Ø£ÙŠØ§Ù…\",\"%d ÙŠÙˆÙ…Ù‹Ø§\",\"%d ÙŠÙˆÙ…\"],M:[\"Ø£Ù‚Ù„ Ù…Ù† Ø´Ù‡Ø±\",\"Ø´Ù‡Ø± ÙˆØ§Ø­Ø¯\",[\"Ø´Ù‡Ø±Ø§Ù†\",\"Ø´Ù‡Ø±ÙŠÙ†\"],\"%d Ø£Ø´Ù‡Ø±\",\"%d Ø´Ù‡Ø±Ø§\",\"%d Ø´Ù‡Ø±\"],y:[\"Ø£Ù‚Ù„ Ù…Ù† Ø¹Ø§Ù…\",\"Ø¹Ø§Ù… ÙˆØ§Ø­Ø¯\",[\"Ø¹Ø§Ù…Ø§Ù†\",\"Ø¹Ø§Ù…ÙŠÙ†\"],\"%d Ø£Ø¹ÙˆØ§Ù…\",\"%d Ø¹Ø§Ù…Ù‹Ø§\",\"%d Ø¹Ø§Ù…\"]},r=function(e){return function(a,r,s,d){var i=t(a),o=n[e][t(a)];return 2===i&&(o=o[r?0:1]),o.replace(/%d/i,a)}},s=[\"ÙŠÙ†Ø§ÙŠØ±\",\"ÙØ¨Ø±Ø§ÙŠØ±\",\"Ù…Ø§Ø±Ø³\",\"Ø£Ø¨Ø±ÙŠÙ„\",\"Ù…Ø§ÙŠÙˆ\",\"ÙŠÙˆÙ†ÙŠÙˆ\",\"ÙŠÙˆÙ„ÙŠÙˆ\",\"Ø£ØºØ³Ø·Ø³\",\"Ø³Ø¨ØªÙ…Ø¨Ø±\",\"Ø£ÙƒØªÙˆØ¨Ø±\",\"Ù†ÙˆÙÙ…Ø¨Ø±\",\"Ø¯ÙŠØ³Ù…Ø¨Ø±\"];return e.defineLocale(\"ar-ly\",{months:s,monthsShort:s,weekdays:\"Ø§Ù„Ø£Ø­Ø¯_Ø§Ù„Ø¥Ø«Ù†ÙŠÙ†_Ø§Ù„Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ù„Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø§Ù„Ø®Ù…ÙŠØ³_Ø§Ù„Ø¬Ù…Ø¹Ø©_Ø§Ù„Ø³Ø¨Øª\".split(\"_\"),weekdaysShort:\"Ø£Ø­Ø¯_Ø¥Ø«Ù†ÙŠÙ†_Ø«Ù„Ø§Ø«Ø§Ø¡_Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø®Ù…ÙŠØ³_Ø¬Ù…Ø¹Ø©_Ø³Ø¨Øª\".split(\"_\"),weekdaysMin:\"Ø­_Ù†_Ø«_Ø±_Ø®_Ø¬_Ø³\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"D/â€M/â€YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},meridiemParse:/Øµ|Ù…/,isPM:function(e){return\"Ù…\"===e},meridiem:function(e,a,t){return e<12?\"Øµ\":\"Ù…\"},calendar:{sameDay:\"[Ø§Ù„ÙŠÙˆÙ… Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",nextDay:\"[ØºØ¯Ù‹Ø§ Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",nextWeek:\"dddd [Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",lastDay:\"[Ø£Ù…Ø³ Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",lastWeek:\"dddd [Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",sameElse:\"L\"},relativeTime:{future:\"Ø¨Ø¹Ø¯ %s\",past:\"Ù…Ù†Ø° %s\",s:r(\"s\"),ss:r(\"s\"),m:r(\"m\"),mm:r(\"m\"),h:r(\"h\"),hh:r(\"h\"),d:r(\"d\"),dd:r(\"d\"),M:r(\"M\"),MM:r(\"M\"),y:r(\"y\"),yy:r(\"y\")},preparse:function(e){return e.replace(/ØŒ/g,\",\")},postformat:function(e){return e.replace(/\\d/g,function(e){return a[e]}).replace(/,/g,\"ØŒ\")},week:{dow:6,doy:12}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(74);var n=t(1);n.datepickerLocale(\"ar-ma\",\"ar\",{closeText:\"Ø¥ØºÙ„Ø§Ù‚\",prevText:\"&#x3C;Ø§Ù„Ø³Ø§Ø¨Ù‚\",nextText:\"Ø§Ù„ØªØ§Ù„ÙŠ&#x3E;\",currentText:\"Ø§Ù„ÙŠÙˆÙ…\",monthNames:[\"ÙŠÙ†Ø§ÙŠØ±\",\"ÙØ¨Ø±Ø§ÙŠØ±\",\"Ù…Ø§Ø±Ø³\",\"Ø£Ø¨Ø±ÙŠÙ„\",\"Ù…Ø§ÙŠÙˆ\",\"ÙŠÙˆÙ†ÙŠÙˆ\",\"ÙŠÙˆÙ„ÙŠÙˆ\",\"Ø£ØºØ³Ø·Ø³\",\"Ø³Ø¨ØªÙ…Ø¨Ø±\",\"Ø£ÙƒØªÙˆØ¨Ø±\",\"Ù†ÙˆÙÙ…Ø¨Ø±\",\"Ø¯ÙŠØ³Ù…Ø¨Ø±\"],monthNamesShort:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],dayNames:[\"Ø§Ù„Ø£Ø­Ø¯\",\"Ø§Ù„Ø§Ø«Ù†ÙŠÙ†\",\"Ø§Ù„Ø«Ù„Ø§Ø«Ø§Ø¡\",\"Ø§Ù„Ø£Ø±Ø¨Ø¹Ø§Ø¡\",\"Ø§Ù„Ø®Ù…ÙŠØ³\",\"Ø§Ù„Ø¬Ù…Ø¹Ø©\",\"Ø§Ù„Ø³Ø¨Øª\"],dayNamesShort:[\"Ø£Ø­Ø¯\",\"Ø§Ø«Ù†ÙŠÙ†\",\"Ø«Ù„Ø§Ø«Ø§Ø¡\",\"Ø£Ø±Ø¨Ø¹Ø§Ø¡\",\"Ø®Ù…ÙŠØ³\",\"Ø¬Ù…Ø¹Ø©\",\"Ø³Ø¨Øª\"],dayNamesMin:[\"Ø­\",\"Ù†\",\"Ø«\",\"Ø±\",\"Ø®\",\"Ø¬\",\"Ø³\"],weekHeader:\"Ø£Ø³Ø¨ÙˆØ¹\",dateFormat:\"dd/mm/yy\",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"ar-ma\",{buttonText:{month:\"Ø´Ù‡Ø±\",week:\"Ø£Ø³Ø¨ÙˆØ¹\",day:\"ÙŠÙˆÙ…\",list:\"Ø£Ø¬Ù†Ø¯Ø©\"},allDayText:\"Ø§Ù„ÙŠÙˆÙ… ÙƒÙ„Ù‡\",eventLimitText:\"Ø£Ø®Ø±Ù‰\",noEventsMessage:\"Ø£ÙŠ Ø£Ø­Ø¯Ø§Ø« Ù„Ø¹Ø±Ø¶\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"ar-ma\",{months:\"ÙŠÙ†Ø§ÙŠØ±_ÙØ¨Ø±Ø§ÙŠØ±_Ù…Ø§Ø±Ø³_Ø£Ø¨Ø±ÙŠÙ„_Ù…Ø§ÙŠ_ÙŠÙˆÙ†ÙŠÙˆ_ÙŠÙˆÙ„ÙŠÙˆØ²_ØºØ´Øª_Ø´ØªÙ†Ø¨Ø±_Ø£ÙƒØªÙˆØ¨Ø±_Ù†ÙˆÙ†Ø¨Ø±_Ø¯Ø¬Ù†Ø¨Ø±\".split(\"_\"),monthsShort:\"ÙŠÙ†Ø§ÙŠØ±_ÙØ¨Ø±Ø§ÙŠØ±_Ù…Ø§Ø±Ø³_Ø£Ø¨Ø±ÙŠÙ„_Ù…Ø§ÙŠ_ÙŠÙˆÙ†ÙŠÙˆ_ÙŠÙˆÙ„ÙŠÙˆØ²_ØºØ´Øª_Ø´ØªÙ†Ø¨Ø±_Ø£ÙƒØªÙˆØ¨Ø±_Ù†ÙˆÙ†Ø¨Ø±_Ø¯Ø¬Ù†Ø¨Ø±\".split(\"_\"),weekdays:\"Ø§Ù„Ø£Ø­Ø¯_Ø§Ù„Ø¥ØªÙ†ÙŠÙ†_Ø§Ù„Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ù„Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø§Ù„Ø®Ù…ÙŠØ³_Ø§Ù„Ø¬Ù…Ø¹Ø©_Ø§Ù„Ø³Ø¨Øª\".split(\"_\"),weekdaysShort:\"Ø§Ø­Ø¯_Ø§ØªÙ†ÙŠÙ†_Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ø±Ø¨Ø¹Ø§Ø¡_Ø®Ù…ÙŠØ³_Ø¬Ù…Ø¹Ø©_Ø³Ø¨Øª\".split(\"_\"),weekdaysMin:\"Ø­_Ù†_Ø«_Ø±_Ø®_Ø¬_Ø³\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Ø§Ù„ÙŠÙˆÙ… Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",nextDay:\"[ØºØ¯Ø§ Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",nextWeek:\"dddd [Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",lastDay:\"[Ø£Ù…Ø³ Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",lastWeek:\"dddd [Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",sameElse:\"L\"},relativeTime:{future:\"ÙÙŠ %s\",past:\"Ù…Ù†Ø° %s\",s:\"Ø«ÙˆØ§Ù†\",ss:\"%d Ø«Ø§Ù†ÙŠØ©\",m:\"Ø¯Ù‚ÙŠÙ‚Ø©\",mm:\"%d Ø¯Ù‚Ø§Ø¦Ù‚\",h:\"Ø³Ø§Ø¹Ø©\",hh:\"%d Ø³Ø§Ø¹Ø§Øª\",d:\"ÙŠÙˆÙ…\",dd:\"%d Ø£ÙŠØ§Ù…\",M:\"Ø´Ù‡Ø±\",MM:\"%d Ø£Ø´Ù‡Ø±\",y:\"Ø³Ù†Ø©\",yy:\"%d Ø³Ù†ÙˆØ§Øª\"},week:{dow:6,doy:12}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(76);var n=t(1);n.datepickerLocale(\"ar-sa\",\"ar\",{closeText:\"Ø¥ØºÙ„Ø§Ù‚\",prevText:\"&#x3C;Ø§Ù„Ø³Ø§Ø¨Ù‚\",nextText:\"Ø§Ù„ØªØ§Ù„ÙŠ&#x3E;\",currentText:\"Ø§Ù„ÙŠÙˆÙ…\",monthNames:[\"ÙŠÙ†Ø§ÙŠØ±\",\"ÙØ¨Ø±Ø§ÙŠØ±\",\"Ù…Ø§Ø±Ø³\",\"Ø£Ø¨Ø±ÙŠÙ„\",\"Ù…Ø§ÙŠÙˆ\",\"ÙŠÙˆÙ†ÙŠÙˆ\",\"ÙŠÙˆÙ„ÙŠÙˆ\",\"Ø£ØºØ³Ø·Ø³\",\"Ø³Ø¨ØªÙ…Ø¨Ø±\",\"Ø£ÙƒØªÙˆØ¨Ø±\",\"Ù†ÙˆÙÙ…Ø¨Ø±\",\"Ø¯ÙŠØ³Ù…Ø¨Ø±\"],monthNamesShort:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],dayNames:[\"Ø§Ù„Ø£Ø­Ø¯\",\"Ø§Ù„Ø§Ø«Ù†ÙŠÙ†\",\"Ø§Ù„Ø«Ù„Ø§Ø«Ø§Ø¡\",\"Ø§Ù„Ø£Ø±Ø¨Ø¹Ø§Ø¡\",\"Ø§Ù„Ø®Ù…ÙŠØ³\",\"Ø§Ù„Ø¬Ù…Ø¹Ø©\",\"Ø§Ù„Ø³Ø¨Øª\"],dayNamesShort:[\"Ø£Ø­Ø¯\",\"Ø§Ø«Ù†ÙŠÙ†\",\"Ø«Ù„Ø§Ø«Ø§Ø¡\",\"Ø£Ø±Ø¨Ø¹Ø§Ø¡\",\"Ø®Ù…ÙŠØ³\",\"Ø¬Ù…Ø¹Ø©\",\"Ø³Ø¨Øª\"],dayNamesMin:[\"Ø­\",\"Ù†\",\"Ø«\",\"Ø±\",\"Ø®\",\"Ø¬\",\"Ø³\"],weekHeader:\"Ø£Ø³Ø¨ÙˆØ¹\",dateFormat:\"dd/mm/yy\",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"ar-sa\",{buttonText:{month:\"Ø´Ù‡Ø±\",week:\"Ø£Ø³Ø¨ÙˆØ¹\",day:\"ÙŠÙˆÙ…\",list:\"Ø£Ø¬Ù†Ø¯Ø©\"},allDayText:\"Ø§Ù„ÙŠÙˆÙ… ÙƒÙ„Ù‡\",eventLimitText:\"Ø£Ø®Ø±Ù‰\",noEventsMessage:\"Ø£ÙŠ Ø£Ø­Ø¯Ø§Ø« Ù„Ø¹Ø±Ø¶\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){var a={1:\"Ù¡\",2:\"Ù¢\",3:\"Ù£\",4:\"Ù¤\",5:\"Ù¥\",6:\"Ù¦\",7:\"Ù§\",8:\"Ù¨\",9:\"Ù©\",0:\"Ù \"},t={\"Ù¡\":\"1\",\"Ù¢\":\"2\",\"Ù£\":\"3\",\"Ù¤\":\"4\",\"Ù¥\":\"5\",\"Ù¦\":\"6\",\"Ù§\":\"7\",\"Ù¨\":\"8\",\"Ù©\":\"9\",\"Ù \":\"0\"};return e.defineLocale(\"ar-sa\",{months:\"ÙŠÙ†Ø§ÙŠØ±_ÙØ¨Ø±Ø§ÙŠØ±_Ù…Ø§Ø±Ø³_Ø£Ø¨Ø±ÙŠÙ„_Ù…Ø§ÙŠÙˆ_ÙŠÙˆÙ†ÙŠÙˆ_ÙŠÙˆÙ„ÙŠÙˆ_Ø£ØºØ³Ø·Ø³_Ø³Ø¨ØªÙ…Ø¨Ø±_Ø£ÙƒØªÙˆØ¨Ø±_Ù†ÙˆÙÙ…Ø¨Ø±_Ø¯ÙŠØ³Ù…Ø¨Ø±\".split(\"_\"),monthsShort:\"ÙŠÙ†Ø§ÙŠØ±_ÙØ¨Ø±Ø§ÙŠØ±_Ù…Ø§Ø±Ø³_Ø£Ø¨Ø±ÙŠÙ„_Ù…Ø§ÙŠÙˆ_ÙŠÙˆÙ†ÙŠÙˆ_ÙŠÙˆÙ„ÙŠÙˆ_Ø£ØºØ³Ø·Ø³_Ø³Ø¨ØªÙ…Ø¨Ø±_Ø£ÙƒØªÙˆØ¨Ø±_Ù†ÙˆÙÙ…Ø¨Ø±_Ø¯ÙŠØ³Ù…Ø¨Ø±\".split(\"_\"),weekdays:\"Ø§Ù„Ø£Ø­Ø¯_Ø§Ù„Ø¥Ø«Ù†ÙŠÙ†_Ø§Ù„Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ù„Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø§Ù„Ø®Ù…ÙŠØ³_Ø§Ù„Ø¬Ù…Ø¹Ø©_Ø§Ù„Ø³Ø¨Øª\".split(\"_\"),weekdaysShort:\"Ø£Ø­Ø¯_Ø¥Ø«Ù†ÙŠÙ†_Ø«Ù„Ø§Ø«Ø§Ø¡_Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø®Ù…ÙŠØ³_Ø¬Ù…Ø¹Ø©_Ø³Ø¨Øª\".split(\"_\"),weekdaysMin:\"Ø­_Ù†_Ø«_Ø±_Ø®_Ø¬_Ø³\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},meridiemParse:/Øµ|Ù…/,isPM:function(e){return\"Ù…\"===e},meridiem:function(e,a,t){return e<12?\"Øµ\":\"Ù…\"},calendar:{sameDay:\"[Ø§Ù„ÙŠÙˆÙ… Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",nextDay:\"[ØºØ¯Ø§ Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",nextWeek:\"dddd [Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",lastDay:\"[Ø£Ù…Ø³ Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",lastWeek:\"dddd [Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",sameElse:\"L\"},relativeTime:{future:\"ÙÙŠ %s\",past:\"Ù…Ù†Ø° %s\",s:\"Ø«ÙˆØ§Ù†\",ss:\"%d Ø«Ø§Ù†ÙŠØ©\",m:\"Ø¯Ù‚ÙŠÙ‚Ø©\",mm:\"%d Ø¯Ù‚Ø§Ø¦Ù‚\",h:\"Ø³Ø§Ø¹Ø©\",hh:\"%d Ø³Ø§Ø¹Ø§Øª\",d:\"ÙŠÙˆÙ…\",dd:\"%d Ø£ÙŠØ§Ù…\",M:\"Ø´Ù‡Ø±\",MM:\"%d Ø£Ø´Ù‡Ø±\",y:\"Ø³Ù†Ø©\",yy:\"%d Ø³Ù†ÙˆØ§Øª\"},preparse:function(e){return e.replace(/[Ù¡Ù¢Ù£Ù¤Ù¥Ù¦Ù§Ù¨Ù©Ù ]/g,function(e){return t[e]}).replace(/ØŒ/g,\",\")},postformat:function(e){return e.replace(/\\d/g,function(e){return a[e]}).replace(/,/g,\"ØŒ\")},week:{dow:0,doy:6}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(78);var n=t(1);n.datepickerLocale(\"ar-tn\",\"ar\",{closeText:\"Ø¥ØºÙ„Ø§Ù‚\",prevText:\"&#x3C;Ø§Ù„Ø³Ø§Ø¨Ù‚\",nextText:\"Ø§Ù„ØªØ§Ù„ÙŠ&#x3E;\",currentText:\"Ø§Ù„ÙŠÙˆÙ…\",monthNames:[\"ÙŠÙ†Ø§ÙŠØ±\",\"ÙØ¨Ø±Ø§ÙŠØ±\",\"Ù…Ø§Ø±Ø³\",\"Ø£Ø¨Ø±ÙŠÙ„\",\"Ù…Ø§ÙŠÙˆ\",\"ÙŠÙˆÙ†ÙŠÙˆ\",\"ÙŠÙˆÙ„ÙŠÙˆ\",\"Ø£ØºØ³Ø·Ø³\",\"Ø³Ø¨ØªÙ…Ø¨Ø±\",\"Ø£ÙƒØªÙˆØ¨Ø±\",\"Ù†ÙˆÙÙ…Ø¨Ø±\",\"Ø¯ÙŠØ³Ù…Ø¨Ø±\"],monthNamesShort:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],dayNames:[\"Ø§Ù„Ø£Ø­Ø¯\",\"Ø§Ù„Ø§Ø«Ù†ÙŠÙ†\",\"Ø§Ù„Ø«Ù„Ø§Ø«Ø§Ø¡\",\"Ø§Ù„Ø£Ø±Ø¨Ø¹Ø§Ø¡\",\"Ø§Ù„Ø®Ù…ÙŠØ³\",\"Ø§Ù„Ø¬Ù…Ø¹Ø©\",\"Ø§Ù„Ø³Ø¨Øª\"],dayNamesShort:[\"Ø£Ø­Ø¯\",\"Ø§Ø«Ù†ÙŠÙ†\",\"Ø«Ù„Ø§Ø«Ø§Ø¡\",\"Ø£Ø±Ø¨Ø¹Ø§Ø¡\",\"Ø®Ù…ÙŠØ³\",\"Ø¬Ù…Ø¹Ø©\",\"Ø³Ø¨Øª\"],dayNamesMin:[\"Ø­\",\"Ù†\",\"Ø«\",\"Ø±\",\"Ø®\",\"Ø¬\",\"Ø³\"],weekHeader:\"Ø£Ø³Ø¨ÙˆØ¹\",dateFormat:\"dd/mm/yy\",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"ar-tn\",{buttonText:{month:\"Ø´Ù‡Ø±\",week:\"Ø£Ø³Ø¨ÙˆØ¹\",day:\"ÙŠÙˆÙ…\",list:\"Ø£Ø¬Ù†Ø¯Ø©\"},allDayText:\"Ø§Ù„ÙŠÙˆÙ… ÙƒÙ„Ù‡\",eventLimitText:\"Ø£Ø®Ø±Ù‰\",noEventsMessage:\"Ø£ÙŠ Ø£Ø­Ø¯Ø§Ø« Ù„Ø¹Ø±Ø¶\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"ar-tn\",{months:\"Ø¬Ø§Ù†ÙÙŠ_ÙÙŠÙØ±ÙŠ_Ù…Ø§Ø±Ø³_Ø£ÙØ±ÙŠÙ„_Ù…Ø§ÙŠ_Ø¬ÙˆØ§Ù†_Ø¬ÙˆÙŠÙ„ÙŠØ©_Ø£ÙˆØª_Ø³Ø¨ØªÙ…Ø¨Ø±_Ø£ÙƒØªÙˆØ¨Ø±_Ù†ÙˆÙÙ…Ø¨Ø±_Ø¯ÙŠØ³Ù…Ø¨Ø±\".split(\"_\"),monthsShort:\"Ø¬Ø§Ù†ÙÙŠ_ÙÙŠÙØ±ÙŠ_Ù…Ø§Ø±Ø³_Ø£ÙØ±ÙŠÙ„_Ù…Ø§ÙŠ_Ø¬ÙˆØ§Ù†_Ø¬ÙˆÙŠÙ„ÙŠØ©_Ø£ÙˆØª_Ø³Ø¨ØªÙ…Ø¨Ø±_Ø£ÙƒØªÙˆØ¨Ø±_Ù†ÙˆÙÙ…Ø¨Ø±_Ø¯ÙŠØ³Ù…Ø¨Ø±\".split(\"_\"),weekdays:\"Ø§Ù„Ø£Ø­Ø¯_Ø§Ù„Ø¥Ø«Ù†ÙŠÙ†_Ø§Ù„Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ù„Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø§Ù„Ø®Ù…ÙŠØ³_Ø§Ù„Ø¬Ù…Ø¹Ø©_Ø§Ù„Ø³Ø¨Øª\".split(\"_\"),weekdaysShort:\"Ø£Ø­Ø¯_Ø¥Ø«Ù†ÙŠÙ†_Ø«Ù„Ø§Ø«Ø§Ø¡_Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø®Ù…ÙŠØ³_Ø¬Ù…Ø¹Ø©_Ø³Ø¨Øª\".split(\"_\"),weekdaysMin:\"Ø­_Ù†_Ø«_Ø±_Ø®_Ø¬_Ø³\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Ø§Ù„ÙŠÙˆÙ… Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",nextDay:\"[ØºØ¯Ø§ Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",nextWeek:\"dddd [Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",lastDay:\"[Ø£Ù…Ø³ Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",lastWeek:\"dddd [Ø¹Ù„Ù‰ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",sameElse:\"L\"},relativeTime:{future:\"ÙÙŠ %s\",past:\"Ù…Ù†Ø° %s\",s:\"Ø«ÙˆØ§Ù†\",ss:\"%d Ø«Ø§Ù†ÙŠØ©\",m:\"Ø¯Ù‚ÙŠÙ‚Ø©\",mm:\"%d Ø¯Ù‚Ø§Ø¦Ù‚\",h:\"Ø³Ø§Ø¹Ø©\",hh:\"%d Ø³Ø§Ø¹Ø§Øª\",d:\"ÙŠÙˆÙ…\",dd:\"%d Ø£ÙŠØ§Ù…\",M:\"Ø´Ù‡Ø±\",MM:\"%d Ø£Ø´Ù‡Ø±\",y:\"Ø³Ù†Ø©\",yy:\"%d Ø³Ù†ÙˆØ§Øª\"},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(80);var n=t(1);n.datepickerLocale(\"ar\",\"ar\",{closeText:\"Ø¥ØºÙ„Ø§Ù‚\",prevText:\"&#x3C;Ø§Ù„Ø³Ø§Ø¨Ù‚\",nextText:\"Ø§Ù„ØªØ§Ù„ÙŠ&#x3E;\",currentText:\"Ø§Ù„ÙŠÙˆÙ…\",monthNames:[\"ÙŠÙ†Ø§ÙŠØ±\",\"ÙØ¨Ø±Ø§ÙŠØ±\",\"Ù…Ø§Ø±Ø³\",\"Ø£Ø¨Ø±ÙŠÙ„\",\"Ù…Ø§ÙŠÙˆ\",\"ÙŠÙˆÙ†ÙŠÙˆ\",\"ÙŠÙˆÙ„ÙŠÙˆ\",\"Ø£ØºØ³Ø·Ø³\",\"Ø³Ø¨ØªÙ…Ø¨Ø±\",\"Ø£ÙƒØªÙˆØ¨Ø±\",\"Ù†ÙˆÙÙ…Ø¨Ø±\",\"Ø¯ÙŠØ³Ù…Ø¨Ø±\"],monthNamesShort:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],dayNames:[\"Ø§Ù„Ø£Ø­Ø¯\",\"Ø§Ù„Ø§Ø«Ù†ÙŠÙ†\",\"Ø§Ù„Ø«Ù„Ø§Ø«Ø§Ø¡\",\"Ø§Ù„Ø£Ø±Ø¨Ø¹Ø§Ø¡\",\"Ø§Ù„Ø®Ù…ÙŠØ³\",\"Ø§Ù„Ø¬Ù…Ø¹Ø©\",\"Ø§Ù„Ø³Ø¨Øª\"],dayNamesShort:[\"Ø£Ø­Ø¯\",\"Ø§Ø«Ù†ÙŠÙ†\",\"Ø«Ù„Ø§Ø«Ø§Ø¡\",\"Ø£Ø±Ø¨Ø¹Ø§Ø¡\",\"Ø®Ù…ÙŠØ³\",\"Ø¬Ù…Ø¹Ø©\",\"Ø³Ø¨Øª\"],dayNamesMin:[\"Ø­\",\"Ù†\",\"Ø«\",\"Ø±\",\"Ø®\",\"Ø¬\",\"Ø³\"],weekHeader:\"Ø£Ø³Ø¨ÙˆØ¹\",dateFormat:\"dd/mm/yy\",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"ar\",{buttonText:{month:\"Ø´Ù‡Ø±\",week:\"Ø£Ø³Ø¨ÙˆØ¹\",day:\"ÙŠÙˆÙ…\",list:\"Ø£Ø¬Ù†Ø¯Ø©\"},allDayText:\"Ø§Ù„ÙŠÙˆÙ… ÙƒÙ„Ù‡\",eventLimitText:\"Ø£Ø®Ø±Ù‰\",noEventsMessage:\"Ø£ÙŠ Ø£Ø­Ø¯Ø§Ø« Ù„Ø¹Ø±Ø¶\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){var a={1:\"Ù¡\",2:\"Ù¢\",3:\"Ù£\",4:\"Ù¤\",5:\"Ù¥\",6:\"Ù¦\",7:\"Ù§\",8:\"Ù¨\",9:\"Ù©\",0:\"Ù \"},t={\"Ù¡\":\"1\",\"Ù¢\":\"2\",\"Ù£\":\"3\",\"Ù¤\":\"4\",\"Ù¥\":\"5\",\"Ù¦\":\"6\",\"Ù§\":\"7\",\"Ù¨\":\"8\",\"Ù©\":\"9\",\"Ù \":\"0\"},n=function(e){return 0===e?0:1===e?1:2===e?2:e%100>=3&&e%100<=10?3:e%100>=11?4:5},r={s:[\"Ø£Ù‚Ù„ Ù…Ù† Ø«Ø§Ù†ÙŠØ©\",\"Ø«Ø§Ù†ÙŠØ© ÙˆØ§Ø­Ø¯Ø©\",[\"Ø«Ø§Ù†ÙŠØªØ§Ù†\",\"Ø«Ø§Ù†ÙŠØªÙŠÙ†\"],\"%d Ø«ÙˆØ§Ù†\",\"%d Ø«Ø§Ù†ÙŠØ©\",\"%d Ø«Ø§Ù†ÙŠØ©\"],m:[\"Ø£Ù‚Ù„ Ù…Ù† Ø¯Ù‚ÙŠÙ‚Ø©\",\"Ø¯Ù‚ÙŠÙ‚Ø© ÙˆØ§Ø­Ø¯Ø©\",[\"Ø¯Ù‚ÙŠÙ‚ØªØ§Ù†\",\"Ø¯Ù‚ÙŠÙ‚ØªÙŠÙ†\"],\"%d Ø¯Ù‚Ø§Ø¦Ù‚\",\"%d Ø¯Ù‚ÙŠÙ‚Ø©\",\"%d Ø¯Ù‚ÙŠÙ‚Ø©\"],h:[\"Ø£Ù‚Ù„ Ù…Ù† Ø³Ø§Ø¹Ø©\",\"Ø³Ø§Ø¹Ø© ÙˆØ§Ø­Ø¯Ø©\",[\"Ø³Ø§Ø¹ØªØ§Ù†\",\"Ø³Ø§Ø¹ØªÙŠÙ†\"],\"%d Ø³Ø§Ø¹Ø§Øª\",\"%d Ø³Ø§Ø¹Ø©\",\"%d Ø³Ø§Ø¹Ø©\"],d:[\"Ø£Ù‚Ù„ Ù…Ù† ÙŠÙˆÙ…\",\"ÙŠÙˆÙ… ÙˆØ§Ø­Ø¯\",[\"ÙŠÙˆÙ…Ø§Ù†\",\"ÙŠÙˆÙ…ÙŠÙ†\"],\"%d Ø£ÙŠØ§Ù…\",\"%d ÙŠÙˆÙ…Ù‹Ø§\",\"%d ÙŠÙˆÙ…\"],M:[\"Ø£Ù‚Ù„ Ù…Ù† Ø´Ù‡Ø±\",\"Ø´Ù‡Ø± ÙˆØ§Ø­Ø¯\",[\"Ø´Ù‡Ø±Ø§Ù†\",\"Ø´Ù‡Ø±ÙŠÙ†\"],\"%d Ø£Ø´Ù‡Ø±\",\"%d Ø´Ù‡Ø±Ø§\",\"%d Ø´Ù‡Ø±\"],y:[\"Ø£Ù‚Ù„ Ù…Ù† Ø¹Ø§Ù…\",\"Ø¹Ø§Ù… ÙˆØ§Ø­Ø¯\",[\"Ø¹Ø§Ù…Ø§Ù†\",\"Ø¹Ø§Ù…ÙŠÙ†\"],\"%d Ø£Ø¹ÙˆØ§Ù…\",\"%d Ø¹Ø§Ù…Ù‹Ø§\",\"%d Ø¹Ø§Ù…\"]},s=function(e){return function(a,t,s,d){var i=n(a),o=r[e][n(a)];return 2===i&&(o=o[t?0:1]),o.replace(/%d/i,a)}},d=[\"ÙŠÙ†Ø§ÙŠØ±\",\"ÙØ¨Ø±Ø§ÙŠØ±\",\"Ù…Ø§Ø±Ø³\",\"Ø£Ø¨Ø±ÙŠÙ„\",\"Ù…Ø§ÙŠÙˆ\",\"ÙŠÙˆÙ†ÙŠÙˆ\",\"ÙŠÙˆÙ„ÙŠÙˆ\",\"Ø£ØºØ³Ø·Ø³\",\"Ø³Ø¨ØªÙ…Ø¨Ø±\",\"Ø£ÙƒØªÙˆØ¨Ø±\",\"Ù†ÙˆÙÙ…Ø¨Ø±\",\"Ø¯ÙŠØ³Ù…Ø¨Ø±\"];return e.defineLocale(\"ar\",{months:d,monthsShort:d,weekdays:\"Ø§Ù„Ø£Ø­Ø¯_Ø§Ù„Ø¥Ø«Ù†ÙŠÙ†_Ø§Ù„Ø«Ù„Ø§Ø«Ø§Ø¡_Ø§Ù„Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø§Ù„Ø®Ù…ÙŠØ³_Ø§Ù„Ø¬Ù…Ø¹Ø©_Ø§Ù„Ø³Ø¨Øª\".split(\"_\"),weekdaysShort:\"Ø£Ø­Ø¯_Ø¥Ø«Ù†ÙŠÙ†_Ø«Ù„Ø§Ø«Ø§Ø¡_Ø£Ø±Ø¨Ø¹Ø§Ø¡_Ø®Ù…ÙŠØ³_Ø¬Ù…Ø¹Ø©_Ø³Ø¨Øª\".split(\"_\"),weekdaysMin:\"Ø­_Ù†_Ø«_Ø±_Ø®_Ø¬_Ø³\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"D/â€M/â€YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},meridiemParse:/Øµ|Ù…/,isPM:function(e){return\"Ù…\"===e},meridiem:function(e,a,t){return e<12?\"Øµ\":\"Ù…\"},calendar:{sameDay:\"[Ø§Ù„ÙŠÙˆÙ… Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",nextDay:\"[ØºØ¯Ù‹Ø§ Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",nextWeek:\"dddd [Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",lastDay:\"[Ø£Ù…Ø³ Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",lastWeek:\"dddd [Ø¹Ù†Ø¯ Ø§Ù„Ø³Ø§Ø¹Ø©] LT\",sameElse:\"L\"},relativeTime:{future:\"Ø¨Ø¹Ø¯ %s\",past:\"Ù…Ù†Ø° %s\",s:s(\"s\"),ss:s(\"s\"),m:s(\"m\"),mm:s(\"m\"),h:s(\"h\"),hh:s(\"h\"),d:s(\"d\"),dd:s(\"d\"),M:s(\"M\"),MM:s(\"M\"),y:s(\"y\"),yy:s(\"y\")},preparse:function(e){return e.replace(/[Ù¡Ù¢Ù£Ù¤Ù¥Ù¦Ù§Ù¨Ù©Ù ]/g,function(e){return t[e]}).replace(/ØŒ/g,\",\")},postformat:function(e){return e.replace(/\\d/g,function(e){return a[e]}).replace(/,/g,\"ØŒ\")},week:{dow:6,doy:12}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(82);var n=t(1);n.datepickerLocale(\"bg\",\"bg\",{closeText:\"Ð·Ð°Ñ‚Ð²Ð¾Ñ€Ð¸\",prevText:\"&#x3C;Ð½Ð°Ð·Ð°Ð´\",nextText:\"Ð½Ð°Ð¿Ñ€ÐµÐ´&#x3E;\",nextBigText:\"&#x3E;&#x3E;\",currentText:\"Ð´Ð½ÐµÑ\",monthNames:[\"Ð¯Ð½ÑƒÐ°Ñ€Ð¸\",\"Ð¤ÐµÐ²Ñ€ÑƒÐ°Ñ€Ð¸\",\"ÐœÐ°Ñ€Ñ‚\",\"ÐÐ¿Ñ€Ð¸Ð»\",\"ÐœÐ°Ð¹\",\"Ð®Ð½Ð¸\",\"Ð®Ð»Ð¸\",\"ÐÐ²Ð³ÑƒÑÑ‚\",\"Ð¡ÐµÐ¿Ñ‚ÐµÐ¼Ð²Ñ€Ð¸\",\"ÐžÐºÑ‚Ð¾Ð¼Ð²Ñ€Ð¸\",\"ÐÐ¾ÐµÐ¼Ð²Ñ€Ð¸\",\"Ð”ÐµÐºÐµÐ¼Ð²Ñ€Ð¸\"],monthNamesShort:[\"Ð¯Ð½Ñƒ\",\"Ð¤ÐµÐ²\",\"ÐœÐ°Ñ€\",\"ÐÐ¿Ñ€\",\"ÐœÐ°Ð¹\",\"Ð®Ð½Ð¸\",\"Ð®Ð»Ð¸\",\"ÐÐ²Ð³\",\"Ð¡ÐµÐ¿\",\"ÐžÐºÑ‚\",\"ÐÐ¾Ð²\",\"Ð”ÐµÐº\"],dayNames:[\"ÐÐµÐ´ÐµÐ»Ñ\",\"ÐŸÐ¾Ð½ÐµÐ´ÐµÐ»Ð½Ð¸Ðº\",\"Ð’Ñ‚Ð¾Ñ€Ð½Ð¸Ðº\",\"Ð¡Ñ€ÑÐ´Ð°\",\"Ð§ÐµÑ‚Ð²ÑŠÑ€Ñ‚ÑŠÐº\",\"ÐŸÐµÑ‚ÑŠÐº\",\"Ð¡ÑŠÐ±Ð¾Ñ‚Ð°\"],dayNamesShort:[\"ÐÐµÐ´\",\"ÐŸÐ¾Ð½\",\"Ð’Ñ‚Ð¾\",\"Ð¡Ñ€Ñ\",\"Ð§ÐµÑ‚\",\"ÐŸÐµÑ‚\",\"Ð¡ÑŠÐ±\"],dayNamesMin:[\"ÐÐµ\",\"ÐŸÐ¾\",\"Ð’Ñ‚\",\"Ð¡Ñ€\",\"Ð§Ðµ\",\"ÐŸÐµ\",\"Ð¡ÑŠ\"],weekHeader:\"Wk\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"bg\",{buttonText:{month:\"ÐœÐµÑÐµÑ†\",week:\"Ð¡ÐµÐ´Ð¼Ð¸Ñ†Ð°\",day:\"Ð”ÐµÐ½\",list:\"Ð“Ñ€Ð°Ñ„Ð¸Ðº\"},allDayText:\"Ð¦ÑÐ» Ð´ÐµÐ½\",eventLimitText:function(e){return\"+Ð¾Ñ‰Ðµ \"+e},noEventsMessage:\"ÐÑÐ¼Ð° ÑÑŠÐ±Ð¸Ñ‚Ð¸Ñ Ð·Ð° Ð¿Ð¾ÐºÐ°Ð·Ð²Ð°Ð½Ðµ\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"bg\",{months:\"ÑÐ½ÑƒÐ°Ñ€Ð¸_Ñ„ÐµÐ²Ñ€ÑƒÐ°Ñ€Ð¸_Ð¼Ð°Ñ€Ñ‚_Ð°Ð¿Ñ€Ð¸Ð»_Ð¼Ð°Ð¹_ÑŽÐ½Ð¸_ÑŽÐ»Ð¸_Ð°Ð²Ð³ÑƒÑÑ‚_ÑÐµÐ¿Ñ‚ÐµÐ¼Ð²Ñ€Ð¸_Ð¾ÐºÑ‚Ð¾Ð¼Ð²Ñ€Ð¸_Ð½Ð¾ÐµÐ¼Ð²Ñ€Ð¸_Ð´ÐµÐºÐµÐ¼Ð²Ñ€Ð¸\".split(\"_\"),monthsShort:\"ÑÐ½Ñ€_Ñ„ÐµÐ²_Ð¼Ð°Ñ€_Ð°Ð¿Ñ€_Ð¼Ð°Ð¹_ÑŽÐ½Ð¸_ÑŽÐ»Ð¸_Ð°Ð²Ð³_ÑÐµÐ¿_Ð¾ÐºÑ‚_Ð½Ð¾Ðµ_Ð´ÐµÐº\".split(\"_\"),weekdays:\"Ð½ÐµÐ´ÐµÐ»Ñ_Ð¿Ð¾Ð½ÐµÐ´ÐµÐ»Ð½Ð¸Ðº_Ð²Ñ‚Ð¾Ñ€Ð½Ð¸Ðº_ÑÑ€ÑÐ´Ð°_Ñ‡ÐµÑ‚Ð²ÑŠÑ€Ñ‚ÑŠÐº_Ð¿ÐµÑ‚ÑŠÐº_ÑÑŠÐ±Ð¾Ñ‚Ð°\".split(\"_\"),weekdaysShort:\"Ð½ÐµÐ´_Ð¿Ð¾Ð½_Ð²Ñ‚Ð¾_ÑÑ€Ñ_Ñ‡ÐµÑ‚_Ð¿ÐµÑ‚_ÑÑŠÐ±\".split(\"_\"),weekdaysMin:\"Ð½Ð´_Ð¿Ð½_Ð²Ñ‚_ÑÑ€_Ñ‡Ñ‚_Ð¿Ñ‚_ÑÐ±\".split(\"_\"),longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"D.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY H:mm\",LLLL:\"dddd, D MMMM YYYY H:mm\"},calendar:{sameDay:\"[Ð”Ð½ÐµÑ Ð²] LT\",nextDay:\"[Ð£Ñ‚Ñ€Ðµ Ð²] LT\",nextWeek:\"dddd [Ð²] LT\",lastDay:\"[Ð’Ñ‡ÐµÑ€Ð° Ð²] LT\",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return\"[Ð’ Ð¸Ð·Ð¼Ð¸Ð½Ð°Ð»Ð°Ñ‚Ð°] dddd [Ð²] LT\";case 1:case 2:case 4:case 5:return\"[Ð’ Ð¸Ð·Ð¼Ð¸Ð½Ð°Ð»Ð¸Ñ] dddd [Ð²] LT\"}},sameElse:\"L\"},relativeTime:{future:\"ÑÐ»ÐµÐ´ %s\",past:\"Ð¿Ñ€ÐµÐ´Ð¸ %s\",s:\"Ð½ÑÐºÐ¾Ð»ÐºÐ¾ ÑÐµÐºÑƒÐ½Ð´Ð¸\",ss:\"%d ÑÐµÐºÑƒÐ½Ð´Ð¸\",m:\"Ð¼Ð¸Ð½ÑƒÑ‚Ð°\",mm:\"%d Ð¼Ð¸Ð½ÑƒÑ‚Ð¸\",h:\"Ñ‡Ð°Ñ\",hh:\"%d Ñ‡Ð°ÑÐ°\",d:\"Ð´ÐµÐ½\",dd:\"%d Ð´Ð½Ð¸\",M:\"Ð¼ÐµÑÐµÑ†\",MM:\"%d Ð¼ÐµÑÐµÑ†Ð°\",y:\"Ð³Ð¾Ð´Ð¸Ð½Ð°\",yy:\"%d Ð³Ð¾Ð´Ð¸Ð½Ð¸\"},dayOfMonthOrdinalParse:/\\d{1,2}-(ÐµÐ²|ÐµÐ½|Ñ‚Ð¸|Ð²Ð¸|Ñ€Ð¸|Ð¼Ð¸)/,ordinal:function(e){var a=e%10,t=e%100;return 0===e?e+\"-ÐµÐ²\":0===t?e+\"-ÐµÐ½\":t>10&&t<20?e+\"-Ñ‚Ð¸\":1===a?e+\"-Ð²Ð¸\":2===a?e+\"-Ñ€Ð¸\":7===a||8===a?e+\"-Ð¼Ð¸\":e+\"-Ñ‚Ð¸\"},week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(84);var n=t(1);n.datepickerLocale(\"bs\",\"bs\",{closeText:\"Zatvori\",prevText:\"&#x3C;\",nextText:\"&#x3E;\",currentText:\"Danas\",monthNames:[\"Januar\",\"Februar\",\"Mart\",\"April\",\"Maj\",\"Juni\",\"Juli\",\"August\",\"Septembar\",\"Oktobar\",\"Novmbar\",\"Decembar\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"Maj\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Okt\",\"Nov\",\"Dec\"],dayNames:[\"Nedjelja\",\"Ponedjeljak\",\"Utorak\",\"Srijeda\",\"ÄŒetvrtak\",\"Petak\",\"Subota\"],dayNamesShort:[\"Ned\",\"Pon\",\"Uto\",\"Sri\",\"ÄŒet\",\"Pet\",\"Sub\"],dayNamesMin:[\"Ne\",\"Po\",\"Ut\",\"Sr\",\"ÄŒe\",\"Pe\",\"Su\"],weekHeader:\"Sed\",dateFormat:\"dd.mm.yy.\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"bs\",{buttonText:{prev:\"ProÅ¡li\",next:\"SljedeÄ‡i\",month:\"Mjesec\",week:\"Sedmica\",day:\"Dan\",list:\"Raspored\"},allDayText:\"Cijeli dan\",eventLimitText:function(e){return\"+ joÅ¡ \"+e},noEventsMessage:\"Nema dogaÄ‘aja za prikazivanje\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a,t){var n=e+\" \";switch(t){case\"ss\":return n+=1===e?\"sekunda\":2===e||3===e||4===e?\"sekunde\":\"sekundi\";case\"m\":return a?\"jedna minuta\":\"jedne minute\";case\"mm\":return n+=1===e?\"minuta\":2===e||3===e||4===e?\"minute\":\"minuta\";case\"h\":return a?\"jedan sat\":\"jednog sata\";case\"hh\":return n+=1===e?\"sat\":2===e||3===e||4===e?\"sata\":\"sati\";case\"dd\":return n+=1===e?\"dan\":\"dana\";case\"MM\":return n+=1===e?\"mjesec\":2===e||3===e||4===e?\"mjeseca\":\"mjeseci\";case\"yy\":return n+=1===e?\"godina\":2===e||3===e||4===e?\"godine\":\"godina\"}}return e.defineLocale(\"bs\",{months:\"januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar\".split(\"_\"),monthsShort:\"jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.\".split(\"_\"),monthsParseExact:!0,weekdays:\"nedjelja_ponedjeljak_utorak_srijeda_Äetvrtak_petak_subota\".split(\"_\"),weekdaysShort:\"ned._pon._uto._sri._Äet._pet._sub.\".split(\"_\"),weekdaysMin:\"ne_po_ut_sr_Äe_pe_su\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY H:mm\",LLLL:\"dddd, D. MMMM YYYY H:mm\"},calendar:{sameDay:\"[danas u] LT\",nextDay:\"[sutra u] LT\",nextWeek:function(){switch(this.day()){case 0:return\"[u] [nedjelju] [u] LT\";case 3:return\"[u] [srijedu] [u] LT\";case 6:return\"[u] [subotu] [u] LT\";case 1:case 2:case 4:case 5:return\"[u] dddd [u] LT\"}},lastDay:\"[juÄer u] LT\",lastWeek:function(){switch(this.day()){case 0:case 3:return\"[proÅ¡lu] dddd [u] LT\";case 6:return\"[proÅ¡le] [subote] [u] LT\";case 1:case 2:case 4:case 5:return\"[proÅ¡li] dddd [u] LT\"}},sameElse:\"L\"},relativeTime:{future:\"za %s\",past:\"prije %s\",s:\"par sekundi\",ss:a,m:a,mm:a,h:a,hh:a,d:\"dan\",dd:a,M:\"mjesec\",MM:a,y:\"godinu\",yy:a},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(86);var n=t(1);n.datepickerLocale(\"ca\",\"ca\",{closeText:\"Tanca\",prevText:\"Anterior\",nextText:\"SegÃ¼ent\",currentText:\"Avui\",monthNames:[\"gener\",\"febrer\",\"marÃ§\",\"abril\",\"maig\",\"juny\",\"juliol\",\"agost\",\"setembre\",\"octubre\",\"novembre\",\"desembre\"],monthNamesShort:[\"gen\",\"feb\",\"marÃ§\",\"abr\",\"maig\",\"juny\",\"jul\",\"ag\",\"set\",\"oct\",\"nov\",\"des\"],dayNames:[\"diumenge\",\"dilluns\",\"dimarts\",\"dimecres\",\"dijous\",\"divendres\",\"dissabte\"],dayNamesShort:[\"dg\",\"dl\",\"dt\",\"dc\",\"dj\",\"dv\",\"ds\"],dayNamesMin:[\"dg\",\"dl\",\"dt\",\"dc\",\"dj\",\"dv\",\"ds\"],weekHeader:\"Set\",dateFormat:\"dd/mm/yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"ca\",{buttonText:{month:\"Mes\",week:\"Setmana\",day:\"Dia\",list:\"Agenda\"},allDayText:\"Tot el dia\",eventLimitText:\"mÃ©s\",noEventsMessage:\"No hi ha esdeveniments per mostrar\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"ca\",{months:{standalone:\"gener_febrer_marÃ§_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre\".split(\"_\"),format:\"de gener_de febrer_de marÃ§_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre\".split(\"_\"),isFormat:/D[oD]?(\\s)+MMMM/},monthsShort:\"gen._febr._marÃ§_abr._maig_juny_jul._ag._set._oct._nov._des.\".split(\"_\"),monthsParseExact:!0,weekdays:\"diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte\".split(\"_\"),weekdaysShort:\"dg._dl._dt._dc._dj._dv._ds.\".split(\"_\"),weekdaysMin:\"dg_dl_dt_dc_dj_dv_ds\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM [de] YYYY\",ll:\"D MMM YYYY\",LLL:\"D MMMM [de] YYYY [a les] H:mm\",lll:\"D MMM YYYY, H:mm\",LLLL:\"dddd D MMMM [de] YYYY [a les] H:mm\",llll:\"ddd D MMM YYYY, H:mm\"},calendar:{sameDay:function(){return\"[avui a \"+(1!==this.hours()?\"les\":\"la\")+\"] LT\"},nextDay:function(){return\"[demÃ  a \"+(1!==this.hours()?\"les\":\"la\")+\"] LT\"},nextWeek:function(){return\"dddd [a \"+(1!==this.hours()?\"les\":\"la\")+\"] LT\"},lastDay:function(){return\"[ahir a \"+(1!==this.hours()?\"les\":\"la\")+\"] LT\"},lastWeek:function(){return\"[el] dddd [passat a \"+(1!==this.hours()?\"les\":\"la\")+\"] LT\"},sameElse:\"L\"},relativeTime:{future:\"d'aquÃ­ %s\",past:\"fa %s\",s:\"uns segons\",ss:\"%d segons\",m:\"un minut\",mm:\"%d minuts\",h:\"una hora\",hh:\"%d hores\",d:\"un dia\",dd:\"%d dies\",M:\"un mes\",MM:\"%d mesos\",y:\"un any\",yy:\"%d anys\"},dayOfMonthOrdinalParse:/\\d{1,2}(r|n|t|Ã¨|a)/,ordinal:function(e,a){var t=1===e?\"r\":2===e?\"n\":3===e?\"r\":4===e?\"t\":\"Ã¨\";return\"w\"!==a&&\"W\"!==a||(t=\"a\"),e+t},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(88);var n=t(1);n.datepickerLocale(\"cs\",\"cs\",{closeText:\"ZavÅ™Ã­t\",prevText:\"&#x3C;DÅ™Ã­ve\",nextText:\"PozdÄ›ji&#x3E;\",currentText:\"NynÃ­\",monthNames:[\"leden\",\"Ãºnor\",\"bÅ™ezen\",\"duben\",\"kvÄ›ten\",\"Äerven\",\"Äervenec\",\"srpen\",\"zÃ¡Å™Ã­\",\"Å™Ã­jen\",\"listopad\",\"prosinec\"],monthNamesShort:[\"led\",\"Ãºno\",\"bÅ™e\",\"dub\",\"kvÄ›\",\"Äer\",\"Ävc\",\"srp\",\"zÃ¡Å™\",\"Å™Ã­j\",\"lis\",\"pro\"],dayNames:[\"nedÄ›le\",\"pondÄ›lÃ­\",\"ÃºterÃ½\",\"stÅ™eda\",\"Ätvrtek\",\"pÃ¡tek\",\"sobota\"],dayNamesShort:[\"ne\",\"po\",\"Ãºt\",\"st\",\"Ät\",\"pÃ¡\",\"so\"],dayNamesMin:[\"ne\",\"po\",\"Ãºt\",\"st\",\"Ät\",\"pÃ¡\",\"so\"],weekHeader:\"TÃ½d\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"cs\",{buttonText:{month:\"MÄ›sÃ­c\",week:\"TÃ½den\",day:\"Den\",list:\"Agenda\"},allDayText:\"CelÃ½ den\",eventLimitText:function(e){return\"+dalÅ¡Ã­: \"+e},noEventsMessage:\"Å½Ã¡dnÃ© akce k zobrazenÃ­\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e){return e>1&&e<5&&1!=~~(e/10)}function t(e,t,n,r){var s=e+\" \";switch(n){case\"s\":return t||r?\"pÃ¡r sekund\":\"pÃ¡r sekundami\";case\"ss\":return t||r?s+(a(e)?\"sekundy\":\"sekund\"):s+\"sekundami\";case\"m\":return t?\"minuta\":r?\"minutu\":\"minutou\";case\"mm\":return t||r?s+(a(e)?\"minuty\":\"minut\"):s+\"minutami\";case\"h\":return t?\"hodina\":r?\"hodinu\":\"hodinou\";case\"hh\":return t||r?s+(a(e)?\"hodiny\":\"hodin\"):s+\"hodinami\";case\"d\":return t||r?\"den\":\"dnem\";case\"dd\":return t||r?s+(a(e)?\"dny\":\"dnÃ­\"):s+\"dny\";case\"M\":return t||r?\"mÄ›sÃ­c\":\"mÄ›sÃ­cem\";case\"MM\":return t||r?s+(a(e)?\"mÄ›sÃ­ce\":\"mÄ›sÃ­cÅ¯\"):s+\"mÄ›sÃ­ci\";case\"y\":return t||r?\"rok\":\"rokem\";case\"yy\":return t||r?s+(a(e)?\"roky\":\"let\"):s+\"lety\"}}var n=\"leden_Ãºnor_bÅ™ezen_duben_kvÄ›ten_Äerven_Äervenec_srpen_zÃ¡Å™Ã­_Å™Ã­jen_listopad_prosinec\".split(\"_\"),r=\"led_Ãºno_bÅ™e_dub_kvÄ›_Ävn_Ävc_srp_zÃ¡Å™_Å™Ã­j_lis_pro\".split(\"_\");return e.defineLocale(\"cs\",{months:n,monthsShort:r,monthsParse:function(e,a){var t,n=[];for(t=0;t<12;t++)n[t]=new RegExp(\"^\"+e[t]+\"$|^\"+a[t]+\"$\",\"i\");return n}(n,r),shortMonthsParse:function(e){var a,t=[];for(a=0;a<12;a++)t[a]=new RegExp(\"^\"+e[a]+\"$\",\"i\");return t}(r),longMonthsParse:function(e){var a,t=[];for(a=0;a<12;a++)t[a]=new RegExp(\"^\"+e[a]+\"$\",\"i\");return t}(n),weekdays:\"nedÄ›le_pondÄ›lÃ­_ÃºterÃ½_stÅ™eda_Ätvrtek_pÃ¡tek_sobota\".split(\"_\"),weekdaysShort:\"ne_po_Ãºt_st_Ät_pÃ¡_so\".split(\"_\"),weekdaysMin:\"ne_po_Ãºt_st_Ät_pÃ¡_so\".split(\"_\"),longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY H:mm\",LLLL:\"dddd D. MMMM YYYY H:mm\",l:\"D. M. YYYY\"},calendar:{sameDay:\"[dnes v] LT\",nextDay:\"[zÃ­tra v] LT\",nextWeek:function(){switch(this.day()){case 0:return\"[v nedÄ›li v] LT\";case 1:case 2:return\"[v] dddd [v] LT\";case 3:return\"[ve stÅ™edu v] LT\";case 4:return\"[ve Ätvrtek v] LT\";case 5:return\"[v pÃ¡tek v] LT\";case 6:return\"[v sobotu v] LT\"}},lastDay:\"[vÄera v] LT\",lastWeek:function(){switch(this.day()){case 0:return\"[minulou nedÄ›li v] LT\";case 1:case 2:return\"[minulÃ©] dddd [v] LT\";case 3:return\"[minulou stÅ™edu v] LT\";case 4:case 5:return\"[minulÃ½] dddd [v] LT\";case 6:return\"[minulou sobotu v] LT\"}},sameElse:\"L\"},relativeTime:{future:\"za %s\",past:\"pÅ™ed %s\",s:t,ss:t,m:t,mm:t,h:t,hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(90);var n=t(1);n.datepickerLocale(\"da\",\"da\",{closeText:\"Luk\",prevText:\"&#x3C;Forrige\",nextText:\"NÃ¦ste&#x3E;\",currentText:\"Idag\",monthNames:[\"Januar\",\"Februar\",\"Marts\",\"April\",\"Maj\",\"Juni\",\"Juli\",\"August\",\"September\",\"Oktober\",\"November\",\"December\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"Maj\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Okt\",\"Nov\",\"Dec\"],dayNames:[\"SÃ¸ndag\",\"Mandag\",\"Tirsdag\",\"Onsdag\",\"Torsdag\",\"Fredag\",\"LÃ¸rdag\"],dayNamesShort:[\"SÃ¸n\",\"Man\",\"Tir\",\"Ons\",\"Tor\",\"Fre\",\"LÃ¸r\"],dayNamesMin:[\"SÃ¸\",\"Ma\",\"Ti\",\"On\",\"To\",\"Fr\",\"LÃ¸\"],weekHeader:\"Uge\",dateFormat:\"dd-mm-yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"da\",{buttonText:{month:\"MÃ¥ned\",week:\"Uge\",day:\"Dag\",list:\"Agenda\"},allDayText:\"Hele dagen\",eventLimitText:\"flere\",noEventsMessage:\"Ingen arrangementer at vise\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"da\",{months:\"januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december\".split(\"_\"),monthsShort:\"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec\".split(\"_\"),weekdays:\"sÃ¸ndag_mandag_tirsdag_onsdag_torsdag_fredag_lÃ¸rdag\".split(\"_\"),weekdaysShort:\"sÃ¸n_man_tir_ons_tor_fre_lÃ¸r\".split(\"_\"),weekdaysMin:\"sÃ¸_ma_ti_on_to_fr_lÃ¸\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY HH:mm\",LLLL:\"dddd [d.] D. MMMM YYYY [kl.] HH:mm\"},calendar:{sameDay:\"[i dag kl.] LT\",nextDay:\"[i morgen kl.] LT\",nextWeek:\"pÃ¥ dddd [kl.] LT\",lastDay:\"[i gÃ¥r kl.] LT\",lastWeek:\"[i] dddd[s kl.] LT\",sameElse:\"L\"},relativeTime:{future:\"om %s\",past:\"%s siden\",s:\"fÃ¥ sekunder\",ss:\"%d sekunder\",m:\"et minut\",mm:\"%d minutter\",h:\"en time\",hh:\"%d timer\",d:\"en dag\",dd:\"%d dage\",M:\"en mÃ¥ned\",MM:\"%d mÃ¥neder\",y:\"et Ã¥r\",yy:\"%d Ã¥r\"},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(92);var n=t(1);n.datepickerLocale(\"de-at\",\"de\",{closeText:\"SchlieÃŸen\",prevText:\"&#x3C;ZurÃ¼ck\",nextText:\"Vor&#x3E;\",currentText:\"Heute\",monthNames:[\"Januar\",\"Februar\",\"MÃ¤rz\",\"April\",\"Mai\",\"Juni\",\"Juli\",\"August\",\"September\",\"Oktober\",\"November\",\"Dezember\"],monthNamesShort:[\"Jan\",\"Feb\",\"MÃ¤r\",\"Apr\",\"Mai\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Okt\",\"Nov\",\"Dez\"],dayNames:[\"Sonntag\",\"Montag\",\"Dienstag\",\"Mittwoch\",\"Donnerstag\",\"Freitag\",\"Samstag\"],dayNamesShort:[\"So\",\"Mo\",\"Di\",\"Mi\",\"Do\",\"Fr\",\"Sa\"],dayNamesMin:[\"So\",\"Mo\",\"Di\",\"Mi\",\"Do\",\"Fr\",\"Sa\"],weekHeader:\"KW\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"de-at\",{buttonText:{month:\"Monat\",week:\"Woche\",day:\"Tag\",list:\"TerminÃ¼bersicht\"},allDayText:\"GanztÃ¤gig\",eventLimitText:function(e){return\"+ weitere \"+e},noEventsMessage:\"Keine Ereignisse anzuzeigen\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a,t,n){var r={m:[\"eine Minute\",\"einer Minute\"],h:[\"eine Stunde\",\"einer Stunde\"],d:[\"ein Tag\",\"einem Tag\"],dd:[e+\" Tage\",e+\" Tagen\"],M:[\"ein Monat\",\"einem Monat\"],MM:[e+\" Monate\",e+\" Monaten\"],y:[\"ein Jahr\",\"einem Jahr\"],yy:[e+\" Jahre\",e+\" Jahren\"]};return a?r[t][0]:r[t][1]}return e.defineLocale(\"de-at\",{\nmonths:\"JÃ¤nner_Februar_MÃ¤rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember\".split(\"_\"),monthsShort:\"JÃ¤n._Feb._MÃ¤rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.\".split(\"_\"),monthsParseExact:!0,weekdays:\"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag\".split(\"_\"),weekdaysShort:\"So._Mo._Di._Mi._Do._Fr._Sa.\".split(\"_\"),weekdaysMin:\"So_Mo_Di_Mi_Do_Fr_Sa\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY HH:mm\",LLLL:\"dddd, D. MMMM YYYY HH:mm\"},calendar:{sameDay:\"[heute um] LT [Uhr]\",sameElse:\"L\",nextDay:\"[morgen um] LT [Uhr]\",nextWeek:\"dddd [um] LT [Uhr]\",lastDay:\"[gestern um] LT [Uhr]\",lastWeek:\"[letzten] dddd [um] LT [Uhr]\"},relativeTime:{future:\"in %s\",past:\"vor %s\",s:\"ein paar Sekunden\",ss:\"%d Sekunden\",m:a,mm:\"%d Minuten\",h:a,hh:\"%d Stunden\",d:a,dd:a,M:a,MM:a,y:a,yy:a},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(94);var n=t(1);n.datepickerLocale(\"de-ch\",\"de\",{closeText:\"SchlieÃŸen\",prevText:\"&#x3C;ZurÃ¼ck\",nextText:\"Vor&#x3E;\",currentText:\"Heute\",monthNames:[\"Januar\",\"Februar\",\"MÃ¤rz\",\"April\",\"Mai\",\"Juni\",\"Juli\",\"August\",\"September\",\"Oktober\",\"November\",\"Dezember\"],monthNamesShort:[\"Jan\",\"Feb\",\"MÃ¤r\",\"Apr\",\"Mai\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Okt\",\"Nov\",\"Dez\"],dayNames:[\"Sonntag\",\"Montag\",\"Dienstag\",\"Mittwoch\",\"Donnerstag\",\"Freitag\",\"Samstag\"],dayNamesShort:[\"So\",\"Mo\",\"Di\",\"Mi\",\"Do\",\"Fr\",\"Sa\"],dayNamesMin:[\"So\",\"Mo\",\"Di\",\"Mi\",\"Do\",\"Fr\",\"Sa\"],weekHeader:\"KW\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"de-ch\",{buttonText:{month:\"Monat\",week:\"Woche\",day:\"Tag\",list:\"TerminÃ¼bersicht\"},allDayText:\"GanztÃ¤gig\",eventLimitText:function(e){return\"+ weitere \"+e},noEventsMessage:\"Keine Ereignisse anzuzeigen\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a,t,n){var r={m:[\"eine Minute\",\"einer Minute\"],h:[\"eine Stunde\",\"einer Stunde\"],d:[\"ein Tag\",\"einem Tag\"],dd:[e+\" Tage\",e+\" Tagen\"],M:[\"ein Monat\",\"einem Monat\"],MM:[e+\" Monate\",e+\" Monaten\"],y:[\"ein Jahr\",\"einem Jahr\"],yy:[e+\" Jahre\",e+\" Jahren\"]};return a?r[t][0]:r[t][1]}return e.defineLocale(\"de-ch\",{months:\"Januar_Februar_MÃ¤rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember\".split(\"_\"),monthsShort:\"Jan._Feb._MÃ¤rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.\".split(\"_\"),monthsParseExact:!0,weekdays:\"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag\".split(\"_\"),weekdaysShort:\"So_Mo_Di_Mi_Do_Fr_Sa\".split(\"_\"),weekdaysMin:\"So_Mo_Di_Mi_Do_Fr_Sa\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY HH:mm\",LLLL:\"dddd, D. MMMM YYYY HH:mm\"},calendar:{sameDay:\"[heute um] LT [Uhr]\",sameElse:\"L\",nextDay:\"[morgen um] LT [Uhr]\",nextWeek:\"dddd [um] LT [Uhr]\",lastDay:\"[gestern um] LT [Uhr]\",lastWeek:\"[letzten] dddd [um] LT [Uhr]\"},relativeTime:{future:\"in %s\",past:\"vor %s\",s:\"ein paar Sekunden\",ss:\"%d Sekunden\",m:a,mm:\"%d Minuten\",h:a,hh:\"%d Stunden\",d:a,dd:a,M:a,MM:a,y:a,yy:a},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(96);var n=t(1);n.datepickerLocale(\"de\",\"de\",{closeText:\"SchlieÃŸen\",prevText:\"&#x3C;ZurÃ¼ck\",nextText:\"Vor&#x3E;\",currentText:\"Heute\",monthNames:[\"Januar\",\"Februar\",\"MÃ¤rz\",\"April\",\"Mai\",\"Juni\",\"Juli\",\"August\",\"September\",\"Oktober\",\"November\",\"Dezember\"],monthNamesShort:[\"Jan\",\"Feb\",\"MÃ¤r\",\"Apr\",\"Mai\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Okt\",\"Nov\",\"Dez\"],dayNames:[\"Sonntag\",\"Montag\",\"Dienstag\",\"Mittwoch\",\"Donnerstag\",\"Freitag\",\"Samstag\"],dayNamesShort:[\"So\",\"Mo\",\"Di\",\"Mi\",\"Do\",\"Fr\",\"Sa\"],dayNamesMin:[\"So\",\"Mo\",\"Di\",\"Mi\",\"Do\",\"Fr\",\"Sa\"],weekHeader:\"KW\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"de\",{buttonText:{month:\"Monat\",week:\"Woche\",day:\"Tag\",list:\"TerminÃ¼bersicht\"},allDayText:\"GanztÃ¤gig\",eventLimitText:function(e){return\"+ weitere \"+e},noEventsMessage:\"Keine Ereignisse anzuzeigen\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a,t,n){var r={m:[\"eine Minute\",\"einer Minute\"],h:[\"eine Stunde\",\"einer Stunde\"],d:[\"ein Tag\",\"einem Tag\"],dd:[e+\" Tage\",e+\" Tagen\"],M:[\"ein Monat\",\"einem Monat\"],MM:[e+\" Monate\",e+\" Monaten\"],y:[\"ein Jahr\",\"einem Jahr\"],yy:[e+\" Jahre\",e+\" Jahren\"]};return a?r[t][0]:r[t][1]}return e.defineLocale(\"de\",{months:\"Januar_Februar_MÃ¤rz_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember\".split(\"_\"),monthsShort:\"Jan._Feb._MÃ¤rz_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.\".split(\"_\"),monthsParseExact:!0,weekdays:\"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag\".split(\"_\"),weekdaysShort:\"So._Mo._Di._Mi._Do._Fr._Sa.\".split(\"_\"),weekdaysMin:\"So_Mo_Di_Mi_Do_Fr_Sa\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY HH:mm\",LLLL:\"dddd, D. MMMM YYYY HH:mm\"},calendar:{sameDay:\"[heute um] LT [Uhr]\",sameElse:\"L\",nextDay:\"[morgen um] LT [Uhr]\",nextWeek:\"dddd [um] LT [Uhr]\",lastDay:\"[gestern um] LT [Uhr]\",lastWeek:\"[letzten] dddd [um] LT [Uhr]\"},relativeTime:{future:\"in %s\",past:\"vor %s\",s:\"ein paar Sekunden\",ss:\"%d Sekunden\",m:a,mm:\"%d Minuten\",h:a,hh:\"%d Stunden\",d:a,dd:a,M:a,MM:a,y:a,yy:a},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(98);var n=t(1);n.datepickerLocale(\"el\",\"el\",{closeText:\"ÎšÎ»ÎµÎ¯ÏƒÎ¹Î¼Î¿\",prevText:\"Î ÏÎ¿Î·Î³Î¿ÏÎ¼ÎµÎ½Î¿Ï‚\",nextText:\"Î•Ï€ÏŒÎ¼ÎµÎ½Î¿Ï‚\",currentText:\"Î£Î®Î¼ÎµÏÎ±\",monthNames:[\"Î™Î±Î½Î¿Ï…Î¬ÏÎ¹Î¿Ï‚\",\"Î¦ÎµÎ²ÏÎ¿Ï…Î¬ÏÎ¹Î¿Ï‚\",\"ÎœÎ¬ÏÏ„Î¹Î¿Ï‚\",\"Î‘Ï€ÏÎ¯Î»Î¹Î¿Ï‚\",\"ÎœÎ¬Î¹Î¿Ï‚\",\"Î™Î¿ÏÎ½Î¹Î¿Ï‚\",\"Î™Î¿ÏÎ»Î¹Î¿Ï‚\",\"Î‘ÏÎ³Î¿Ï…ÏƒÏ„Î¿Ï‚\",\"Î£ÎµÏ€Ï„Î­Î¼Î²ÏÎ¹Î¿Ï‚\",\"ÎŸÎºÏ„ÏŽÎ²ÏÎ¹Î¿Ï‚\",\"ÎÎ¿Î­Î¼Î²ÏÎ¹Î¿Ï‚\",\"Î”ÎµÎºÎ­Î¼Î²ÏÎ¹Î¿Ï‚\"],monthNamesShort:[\"Î™Î±Î½\",\"Î¦ÎµÎ²\",\"ÎœÎ±Ï\",\"Î‘Ï€Ï\",\"ÎœÎ±Î¹\",\"Î™Î¿Ï…Î½\",\"Î™Î¿Ï…Î»\",\"Î‘Ï…Î³\",\"Î£ÎµÏ€\",\"ÎŸÎºÏ„\",\"ÎÎ¿Îµ\",\"Î”ÎµÎº\"],dayNames:[\"ÎšÏ…ÏÎ¹Î±ÎºÎ®\",\"Î”ÎµÏ…Ï„Î­ÏÎ±\",\"Î¤ÏÎ¯Ï„Î·\",\"Î¤ÎµÏ„Î¬ÏÏ„Î·\",\"Î Î­Î¼Ï€Ï„Î·\",\"Î Î±ÏÎ±ÏƒÎºÎµÏ…Î®\",\"Î£Î¬Î²Î²Î±Ï„Î¿\"],dayNamesShort:[\"ÎšÏ…Ï\",\"Î”ÎµÏ…\",\"Î¤ÏÎ¹\",\"Î¤ÎµÏ„\",\"Î ÎµÎ¼\",\"Î Î±Ï\",\"Î£Î±Î²\"],dayNamesMin:[\"ÎšÏ…\",\"Î”Îµ\",\"Î¤Ï\",\"Î¤Îµ\",\"Î Îµ\",\"Î Î±\",\"Î£Î±\"],weekHeader:\"Î•Î²Î´\",dateFormat:\"dd/mm/yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"el\",{buttonText:{month:\"ÎœÎ®Î½Î±Ï‚\",week:\"Î•Î²Î´Î¿Î¼Î¬Î´Î±\",day:\"Î—Î¼Î­ÏÎ±\",list:\"Î‘Ï„Î¶Î­Î½Ï„Î±\"},allDayText:\"ÎŸÎ»Î¿Î®Î¼ÎµÏÎ¿\",eventLimitText:\"Ï€ÎµÏÎ¹ÏƒÏƒÏŒÏ„ÎµÏÎ±\",noEventsMessage:\"Î”ÎµÎ½ Ï…Ï€Î¬ÏÏ‡Î¿Ï…Î½ Î³ÎµÎ³Î¿Î½ÏŒÏ„Î± Î³Î¹Î± Î½Î± ÎµÎ¼Ï†Î±Î½Î¹ÏƒÏ„ÎµÎ¯\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e){return e instanceof Function||\"[object Function]\"===Object.prototype.toString.call(e)}return e.defineLocale(\"el\",{monthsNominativeEl:\"Î™Î±Î½Î¿Ï…Î¬ÏÎ¹Î¿Ï‚_Î¦ÎµÎ²ÏÎ¿Ï…Î¬ÏÎ¹Î¿Ï‚_ÎœÎ¬ÏÏ„Î¹Î¿Ï‚_Î‘Ï€ÏÎ¯Î»Î¹Î¿Ï‚_ÎœÎ¬Î¹Î¿Ï‚_Î™Î¿ÏÎ½Î¹Î¿Ï‚_Î™Î¿ÏÎ»Î¹Î¿Ï‚_Î‘ÏÎ³Î¿Ï…ÏƒÏ„Î¿Ï‚_Î£ÎµÏ€Ï„Î­Î¼Î²ÏÎ¹Î¿Ï‚_ÎŸÎºÏ„ÏŽÎ²ÏÎ¹Î¿Ï‚_ÎÎ¿Î­Î¼Î²ÏÎ¹Î¿Ï‚_Î”ÎµÎºÎ­Î¼Î²ÏÎ¹Î¿Ï‚\".split(\"_\"),monthsGenitiveEl:\"Î™Î±Î½Î¿Ï…Î±ÏÎ¯Î¿Ï…_Î¦ÎµÎ²ÏÎ¿Ï…Î±ÏÎ¯Î¿Ï…_ÎœÎ±ÏÏ„Î¯Î¿Ï…_Î‘Ï€ÏÎ¹Î»Î¯Î¿Ï…_ÎœÎ±ÎÎ¿Ï…_Î™Î¿Ï…Î½Î¯Î¿Ï…_Î™Î¿Ï…Î»Î¯Î¿Ï…_Î‘Ï…Î³Î¿ÏÏƒÏ„Î¿Ï…_Î£ÎµÏ€Ï„ÎµÎ¼Î²ÏÎ¯Î¿Ï…_ÎŸÎºÏ„Ï‰Î²ÏÎ¯Î¿Ï…_ÎÎ¿ÎµÎ¼Î²ÏÎ¯Î¿Ï…_Î”ÎµÎºÎµÎ¼Î²ÏÎ¯Î¿Ï…\".split(\"_\"),months:function(e,a){return e?\"string\"==typeof a&&/D/.test(a.substring(0,a.indexOf(\"MMMM\")))?this._monthsGenitiveEl[e.month()]:this._monthsNominativeEl[e.month()]:this._monthsNominativeEl},monthsShort:\"Î™Î±Î½_Î¦ÎµÎ²_ÎœÎ±Ï_Î‘Ï€Ï_ÎœÎ±ÏŠ_Î™Î¿Ï…Î½_Î™Î¿Ï…Î»_Î‘Ï…Î³_Î£ÎµÏ€_ÎŸÎºÏ„_ÎÎ¿Îµ_Î”ÎµÎº\".split(\"_\"),weekdays:\"ÎšÏ…ÏÎ¹Î±ÎºÎ®_Î”ÎµÏ…Ï„Î­ÏÎ±_Î¤ÏÎ¯Ï„Î·_Î¤ÎµÏ„Î¬ÏÏ„Î·_Î Î­Î¼Ï€Ï„Î·_Î Î±ÏÎ±ÏƒÎºÎµÏ…Î®_Î£Î¬Î²Î²Î±Ï„Î¿\".split(\"_\"),weekdaysShort:\"ÎšÏ…Ï_Î”ÎµÏ…_Î¤ÏÎ¹_Î¤ÎµÏ„_Î ÎµÎ¼_Î Î±Ï_Î£Î±Î²\".split(\"_\"),weekdaysMin:\"ÎšÏ…_Î”Îµ_Î¤Ï_Î¤Îµ_Î Îµ_Î Î±_Î£Î±\".split(\"_\"),meridiem:function(e,a,t){return e>11?t?\"Î¼Î¼\":\"ÎœÎœ\":t?\"Ï€Î¼\":\"Î Îœ\"},isPM:function(e){return\"Î¼\"===(e+\"\").toLowerCase()[0]},meridiemParse:/[Î Îœ]\\.?Îœ?\\.?/i,longDateFormat:{LT:\"h:mm A\",LTS:\"h:mm:ss A\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY h:mm A\",LLLL:\"dddd, D MMMM YYYY h:mm A\"},calendarEl:{sameDay:\"[Î£Î®Î¼ÎµÏÎ± {}] LT\",nextDay:\"[Î‘ÏÏÎ¹Î¿ {}] LT\",nextWeek:\"dddd [{}] LT\",lastDay:\"[Î§Î¸ÎµÏ‚ {}] LT\",lastWeek:function(){switch(this.day()){case 6:return\"[Ï„Î¿ Ï€ÏÎ¿Î·Î³Î¿ÏÎ¼ÎµÎ½Î¿] dddd [{}] LT\";default:return\"[Ï„Î·Î½ Ï€ÏÎ¿Î·Î³Î¿ÏÎ¼ÎµÎ½Î·] dddd [{}] LT\"}},sameElse:\"L\"},calendar:function(e,t){var n=this._calendarEl[e],r=t&&t.hours();return a(n)&&(n=n.apply(t)),n.replace(\"{}\",r%12==1?\"ÏƒÏ„Î·\":\"ÏƒÏ„Î¹Ï‚\")},relativeTime:{future:\"ÏƒÎµ %s\",past:\"%s Ï€ÏÎ¹Î½\",s:\"Î»Î¯Î³Î± Î´ÎµÏ…Ï„ÎµÏÏŒÎ»ÎµÏ€Ï„Î±\",ss:\"%d Î´ÎµÏ…Ï„ÎµÏÏŒÎ»ÎµÏ€Ï„Î±\",m:\"Î­Î½Î± Î»ÎµÏ€Ï„ÏŒ\",mm:\"%d Î»ÎµÏ€Ï„Î¬\",h:\"Î¼Î¯Î± ÏŽÏÎ±\",hh:\"%d ÏŽÏÎµÏ‚\",d:\"Î¼Î¯Î± Î¼Î­ÏÎ±\",dd:\"%d Î¼Î­ÏÎµÏ‚\",M:\"Î­Î½Î±Ï‚ Î¼Î®Î½Î±Ï‚\",MM:\"%d Î¼Î®Î½ÎµÏ‚\",y:\"Î­Î½Î±Ï‚ Ï‡ÏÏŒÎ½Î¿Ï‚\",yy:\"%d Ï‡ÏÏŒÎ½Î¹Î±\"},dayOfMonthOrdinalParse:/\\d{1,2}Î·/,ordinal:\"%dÎ·\",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(100);var n=t(1);n.datepickerLocale(\"en-au\",\"en-AU\",{closeText:\"Done\",prevText:\"Prev\",nextText:\"Next\",currentText:\"Today\",monthNames:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],dayNames:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],dayNamesShort:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],dayNamesMin:[\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"],weekHeader:\"Wk\",dateFormat:\"dd/mm/yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"en-au\")},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"en-au\",{months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),monthsShort:\"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\".split(\"_\"),weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),weekdaysShort:\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),weekdaysMin:\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),longDateFormat:{LT:\"h:mm A\",LTS:\"h:mm:ss A\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY h:mm A\",LLLL:\"dddd, D MMMM YYYY h:mm A\"},calendar:{sameDay:\"[Today at] LT\",nextDay:\"[Tomorrow at] LT\",nextWeek:\"dddd [at] LT\",lastDay:\"[Yesterday at] LT\",lastWeek:\"[Last] dddd [at] LT\",sameElse:\"L\"},relativeTime:{future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",ss:\"%d seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"},dayOfMonthOrdinalParse:/\\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?\"th\":1===a?\"st\":2===a?\"nd\":3===a?\"rd\":\"th\")},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(102),t(1).locale(\"en-ca\")},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"en-ca\",{months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),monthsShort:\"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\".split(\"_\"),weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),weekdaysShort:\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),weekdaysMin:\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),longDateFormat:{LT:\"h:mm A\",LTS:\"h:mm:ss A\",L:\"YYYY-MM-DD\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY h:mm A\",LLLL:\"dddd, MMMM D, YYYY h:mm A\"},calendar:{sameDay:\"[Today at] LT\",nextDay:\"[Tomorrow at] LT\",nextWeek:\"dddd [at] LT\",lastDay:\"[Yesterday at] LT\",lastWeek:\"[Last] dddd [at] LT\",sameElse:\"L\"},relativeTime:{future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",ss:\"%d seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"},dayOfMonthOrdinalParse:/\\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?\"th\":1===a?\"st\":2===a?\"nd\":3===a?\"rd\":\"th\")}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(104);var n=t(1);n.datepickerLocale(\"en-gb\",\"en-GB\",{closeText:\"Done\",prevText:\"Prev\",nextText:\"Next\",currentText:\"Today\",monthNames:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],dayNames:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],dayNamesShort:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],dayNamesMin:[\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"],weekHeader:\"Wk\",dateFormat:\"dd/mm/yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"en-gb\")},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"en-gb\",{months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),monthsShort:\"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\".split(\"_\"),weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),weekdaysShort:\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),weekdaysMin:\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Today at] LT\",nextDay:\"[Tomorrow at] LT\",nextWeek:\"dddd [at] LT\",lastDay:\"[Yesterday at] LT\",lastWeek:\"[Last] dddd [at] LT\",sameElse:\"L\"},relativeTime:{future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",ss:\"%d seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"},dayOfMonthOrdinalParse:/\\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?\"th\":1===a?\"st\":2===a?\"nd\":3===a?\"rd\":\"th\")},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(106),t(1).locale(\"en-ie\")},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"en-ie\",{months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),monthsShort:\"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\".split(\"_\"),weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),weekdaysShort:\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),weekdaysMin:\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD-MM-YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Today at] LT\",nextDay:\"[Tomorrow at] LT\",nextWeek:\"dddd [at] LT\",lastDay:\"[Yesterday at] LT\",lastWeek:\"[Last] dddd [at] LT\",sameElse:\"L\"},relativeTime:{future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",ss:\"%d seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"},dayOfMonthOrdinalParse:/\\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?\"th\":1===a?\"st\":2===a?\"nd\":3===a?\"rd\":\"th\")},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(108);var n=t(1);n.datepickerLocale(\"en-nz\",\"en-NZ\",{closeText:\"Done\",prevText:\"Prev\",nextText:\"Next\",currentText:\"Today\",monthNames:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],dayNames:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],dayNamesShort:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],dayNamesMin:[\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"],weekHeader:\"Wk\",dateFormat:\"dd/mm/yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"en-nz\")},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"en-nz\",{months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),monthsShort:\"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\".split(\"_\"),weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),weekdaysShort:\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),weekdaysMin:\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),longDateFormat:{LT:\"h:mm A\",LTS:\"h:mm:ss A\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY h:mm A\",LLLL:\"dddd, D MMMM YYYY h:mm A\"},calendar:{sameDay:\"[Today at] LT\",nextDay:\"[Tomorrow at] LT\",nextWeek:\"dddd [at] LT\",lastDay:\"[Yesterday at] LT\",lastWeek:\"[Last] dddd [at] LT\",sameElse:\"L\"},relativeTime:{future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",ss:\"%d seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"},dayOfMonthOrdinalParse:/\\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?\"th\":1===a?\"st\":2===a?\"nd\":3===a?\"rd\":\"th\")},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(110);var n=t(1);n.datepickerLocale(\"es-do\",\"es\",{closeText:\"Cerrar\",prevText:\"&#x3C;Ant\",nextText:\"Sig&#x3E;\",currentText:\"Hoy\",monthNames:[\"enero\",\"febrero\",\"marzo\",\"abril\",\"mayo\",\"junio\",\"julio\",\"agosto\",\"septiembre\",\"octubre\",\"noviembre\",\"diciembre\"],monthNamesShort:[\"ene\",\"feb\",\"mar\",\"abr\",\"may\",\"jun\",\"jul\",\"ago\",\"sep\",\"oct\",\"nov\",\"dic\"],dayNames:[\"domingo\",\"lunes\",\"martes\",\"miÃ©rcoles\",\"jueves\",\"viernes\",\"sÃ¡bado\"],dayNamesShort:[\"dom\",\"lun\",\"mar\",\"miÃ©\",\"jue\",\"vie\",\"sÃ¡b\"],dayNamesMin:[\"D\",\"L\",\"M\",\"X\",\"J\",\"V\",\"S\"],weekHeader:\"Sm\",dateFormat:\"dd/mm/yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"es-do\",{buttonText:{month:\"Mes\",week:\"Semana\",day:\"DÃ­a\",list:\"Agenda\"},allDayHtml:\"Todo<br/>el dÃ­a\",eventLimitText:\"mÃ¡s\",noEventsMessage:\"No hay eventos para mostrar\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){var a=\"ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.\".split(\"_\"),t=\"ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic\".split(\"_\"),n=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],r=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;return e.defineLocale(\"es-do\",{months:\"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre\".split(\"_\"),monthsShort:function(e,n){return e?/-MMM-/.test(n)?t[e.month()]:a[e.month()]:a},monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,monthsParse:n,longMonthsParse:n,shortMonthsParse:n,weekdays:\"domingo_lunes_martes_miÃ©rcoles_jueves_viernes_sÃ¡bado\".split(\"_\"),weekdaysShort:\"dom._lun._mar._miÃ©._jue._vie._sÃ¡b.\".split(\"_\"),weekdaysMin:\"do_lu_ma_mi_ju_vi_sÃ¡\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"h:mm A\",LTS:\"h:mm:ss A\",L:\"DD/MM/YYYY\",LL:\"D [de] MMMM [de] YYYY\",LLL:\"D [de] MMMM [de] YYYY h:mm A\",LLLL:\"dddd, D [de] MMMM [de] YYYY h:mm A\"},calendar:{sameDay:function(){return\"[hoy a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},nextDay:function(){return\"[maÃ±ana a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},nextWeek:function(){return\"dddd [a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},lastDay:function(){return\"[ayer a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},lastWeek:function(){return\"[el] dddd [pasado a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},sameElse:\"L\"},relativeTime:{future:\"en %s\",past:\"hace %s\",s:\"unos segundos\",ss:\"%d segundos\",m:\"un minuto\",mm:\"%d minutos\",h:\"una hora\",hh:\"%d horas\",d:\"un dÃ­a\",dd:\"%d dÃ­as\",M:\"un mes\",MM:\"%d meses\",y:\"un aÃ±o\",yy:\"%d aÃ±os\"},dayOfMonthOrdinalParse:/\\d{1,2}Âº/,ordinal:\"%dÂº\",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(112);var n=t(1);n.datepickerLocale(\"es-us\",\"es\",{closeText:\"Cerrar\",prevText:\"&#x3C;Ant\",nextText:\"Sig&#x3E;\",currentText:\"Hoy\",monthNames:[\"enero\",\"febrero\",\"marzo\",\"abril\",\"mayo\",\"junio\",\"julio\",\"agosto\",\"septiembre\",\"octubre\",\"noviembre\",\"diciembre\"],monthNamesShort:[\"ene\",\"feb\",\"mar\",\"abr\",\"may\",\"jun\",\"jul\",\"ago\",\"sep\",\"oct\",\"nov\",\"dic\"],dayNames:[\"domingo\",\"lunes\",\"martes\",\"miÃ©rcoles\",\"jueves\",\"viernes\",\"sÃ¡bado\"],dayNamesShort:[\"dom\",\"lun\",\"mar\",\"miÃ©\",\"jue\",\"vie\",\"sÃ¡b\"],dayNamesMin:[\"D\",\"L\",\"M\",\"X\",\"J\",\"V\",\"S\"],weekHeader:\"Sm\",dateFormat:\"dd/mm/yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"es-us\",{buttonText:{month:\"Mes\",week:\"Semana\",day:\"DÃ­a\",list:\"Agenda\"},allDayHtml:\"Todo<br/>el dÃ­a\",eventLimitText:\"mÃ¡s\",noEventsMessage:\"No hay eventos para mostrar\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){var a=\"ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.\".split(\"_\"),t=\"ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic\".split(\"_\");return e.defineLocale(\"es-us\",{months:\"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre\".split(\"_\"),monthsShort:function(e,n){return e?/-MMM-/.test(n)?t[e.month()]:a[e.month()]:a},monthsParseExact:!0,weekdays:\"domingo_lunes_martes_miÃ©rcoles_jueves_viernes_sÃ¡bado\".split(\"_\"),weekdaysShort:\"dom._lun._mar._miÃ©._jue._vie._sÃ¡b.\".split(\"_\"),weekdaysMin:\"do_lu_ma_mi_ju_vi_sÃ¡\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"h:mm A\",LTS:\"h:mm:ss A\",L:\"MM/DD/YYYY\",LL:\"MMMM [de] D [de] YYYY\",LLL:\"MMMM [de] D [de] YYYY h:mm A\",LLLL:\"dddd, MMMM [de] D [de] YYYY h:mm A\"},calendar:{sameDay:function(){return\"[hoy a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},nextDay:function(){return\"[maÃ±ana a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},nextWeek:function(){return\"dddd [a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},lastDay:function(){return\"[ayer a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},lastWeek:function(){return\"[el] dddd [pasado a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},sameElse:\"L\"},relativeTime:{future:\"en %s\",past:\"hace %s\",s:\"unos segundos\",ss:\"%d segundos\",m:\"un minuto\",mm:\"%d minutos\",h:\"una hora\",hh:\"%d horas\",d:\"un dÃ­a\",dd:\"%d dÃ­as\",M:\"un mes\",MM:\"%d meses\",y:\"un aÃ±o\",yy:\"%d aÃ±os\"},dayOfMonthOrdinalParse:/\\d{1,2}Âº/,ordinal:\"%dÂº\",week:{dow:0,doy:6}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(114);var n=t(1);n.datepickerLocale(\"es\",\"es\",{closeText:\"Cerrar\",prevText:\"&#x3C;Ant\",nextText:\"Sig&#x3E;\",currentText:\"Hoy\",monthNames:[\"enero\",\"febrero\",\"marzo\",\"abril\",\"mayo\",\"junio\",\"julio\",\"agosto\",\"septiembre\",\"octubre\",\"noviembre\",\"diciembre\"],monthNamesShort:[\"ene\",\"feb\",\"mar\",\"abr\",\"may\",\"jun\",\"jul\",\"ago\",\"sep\",\"oct\",\"nov\",\"dic\"],dayNames:[\"domingo\",\"lunes\",\"martes\",\"miÃ©rcoles\",\"jueves\",\"viernes\",\"sÃ¡bado\"],dayNamesShort:[\"dom\",\"lun\",\"mar\",\"miÃ©\",\"jue\",\"vie\",\"sÃ¡b\"],dayNamesMin:[\"D\",\"L\",\"M\",\"X\",\"J\",\"V\",\"S\"],weekHeader:\"Sm\",dateFormat:\"dd/mm/yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"es\",{buttonText:{month:\"Mes\",week:\"Semana\",day:\"DÃ­a\",list:\"Agenda\"},allDayHtml:\"Todo<br/>el dÃ­a\",eventLimitText:\"mÃ¡s\",noEventsMessage:\"No hay eventos para mostrar\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){var a=\"ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.\".split(\"_\"),t=\"ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic\".split(\"_\"),n=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],r=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;return e.defineLocale(\"es\",{months:\"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre\".split(\"_\"),monthsShort:function(e,n){return e?/-MMM-/.test(n)?t[e.month()]:a[e.month()]:a},monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,monthsParse:n,longMonthsParse:n,shortMonthsParse:n,weekdays:\"domingo_lunes_martes_miÃ©rcoles_jueves_viernes_sÃ¡bado\".split(\"_\"),weekdaysShort:\"dom._lun._mar._miÃ©._jue._vie._sÃ¡b.\".split(\"_\"),weekdaysMin:\"do_lu_ma_mi_ju_vi_sÃ¡\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D [de] MMMM [de] YYYY\",LLL:\"D [de] MMMM [de] YYYY H:mm\",LLLL:\"dddd, D [de] MMMM [de] YYYY H:mm\"},calendar:{sameDay:function(){return\"[hoy a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},nextDay:function(){return\"[maÃ±ana a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},nextWeek:function(){return\"dddd [a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},lastDay:function(){return\"[ayer a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},lastWeek:function(){return\"[el] dddd [pasado a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},sameElse:\"L\"},relativeTime:{future:\"en %s\",past:\"hace %s\",s:\"unos segundos\",ss:\"%d segundos\",m:\"un minuto\",mm:\"%d minutos\",h:\"una hora\",hh:\"%d horas\",d:\"un dÃ­a\",dd:\"%d dÃ­as\",M:\"un mes\",MM:\"%d meses\",y:\"un aÃ±o\",yy:\"%d aÃ±os\"},dayOfMonthOrdinalParse:/\\d{1,2}Âº/,ordinal:\"%dÂº\",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(116);var n=t(1);n.datepickerLocale(\"et\",\"et\",{closeText:\"Sulge\",prevText:\"Eelnev\",nextText:\"JÃ¤rgnev\",currentText:\"TÃ¤na\",monthNames:[\"Jaanuar\",\"Veebruar\",\"MÃ¤rts\",\"Aprill\",\"Mai\",\"Juuni\",\"Juuli\",\"August\",\"September\",\"Oktoober\",\"November\",\"Detsember\"],monthNamesShort:[\"Jaan\",\"Veebr\",\"MÃ¤rts\",\"Apr\",\"Mai\",\"Juuni\",\"Juuli\",\"Aug\",\"Sept\",\"Okt\",\"Nov\",\"Dets\"],dayNames:[\"PÃ¼hapÃ¤ev\",\"EsmaspÃ¤ev\",\"TeisipÃ¤ev\",\"KolmapÃ¤ev\",\"NeljapÃ¤ev\",\"Reede\",\"LaupÃ¤ev\"],dayNamesShort:[\"PÃ¼hap\",\"Esmasp\",\"Teisip\",\"Kolmap\",\"Neljap\",\"Reede\",\"Laup\"],dayNamesMin:[\"P\",\"E\",\"T\",\"K\",\"N\",\"R\",\"L\"],weekHeader:\"nÃ¤d\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"et\",{buttonText:{month:\"Kuu\",week:\"NÃ¤dal\",day:\"PÃ¤ev\",list:\"PÃ¤evakord\"},allDayText:\"Kogu pÃ¤ev\",eventLimitText:function(e){return\"+ veel \"+e},noEventsMessage:\"Kuvamiseks puuduvad sÃ¼ndmused\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a,t,n){var r={s:[\"mÃµne sekundi\",\"mÃµni sekund\",\"paar sekundit\"],ss:[e+\"sekundi\",e+\"sekundit\"],m:[\"Ã¼he minuti\",\"Ã¼ks minut\"],mm:[e+\" minuti\",e+\" minutit\"],h:[\"Ã¼he tunni\",\"tund aega\",\"Ã¼ks tund\"],hh:[e+\" tunni\",e+\" tundi\"],d:[\"Ã¼he pÃ¤eva\",\"Ã¼ks pÃ¤ev\"],M:[\"kuu aja\",\"kuu aega\",\"Ã¼ks kuu\"],MM:[e+\" kuu\",e+\" kuud\"],y:[\"Ã¼he aasta\",\"aasta\",\"Ã¼ks aasta\"],yy:[e+\" aasta\",e+\" aastat\"]};return a?r[t][2]?r[t][2]:r[t][1]:n?r[t][0]:r[t][1]}return e.defineLocale(\"et\",{months:\"jaanuar_veebruar_mÃ¤rts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember\".split(\"_\"),monthsShort:\"jaan_veebr_mÃ¤rts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets\".split(\"_\"),weekdays:\"pÃ¼hapÃ¤ev_esmaspÃ¤ev_teisipÃ¤ev_kolmapÃ¤ev_neljapÃ¤ev_reede_laupÃ¤ev\".split(\"_\"),weekdaysShort:\"P_E_T_K_N_R_L\".split(\"_\"),weekdaysMin:\"P_E_T_K_N_R_L\".split(\"_\"),longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY H:mm\",LLLL:\"dddd, D. MMMM YYYY H:mm\"},calendar:{sameDay:\"[TÃ¤na,] LT\",nextDay:\"[Homme,] LT\",nextWeek:\"[JÃ¤rgmine] dddd LT\",lastDay:\"[Eile,] LT\",lastWeek:\"[Eelmine] dddd LT\",sameElse:\"L\"},relativeTime:{future:\"%s pÃ¤rast\",past:\"%s tagasi\",s:a,ss:a,m:a,mm:a,h:a,hh:a,d:a,dd:\"%d pÃ¤eva\",M:a,MM:a,y:a,yy:a},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(118);var n=t(1);n.datepickerLocale(\"eu\",\"eu\",{closeText:\"Egina\",prevText:\"&#x3C;Aur\",nextText:\"Hur&#x3E;\",currentText:\"Gaur\",monthNames:[\"urtarrila\",\"otsaila\",\"martxoa\",\"apirila\",\"maiatza\",\"ekaina\",\"uztaila\",\"abuztua\",\"iraila\",\"urria\",\"azaroa\",\"abendua\"],monthNamesShort:[\"urt.\",\"ots.\",\"mar.\",\"api.\",\"mai.\",\"eka.\",\"uzt.\",\"abu.\",\"ira.\",\"urr.\",\"aza.\",\"abe.\"],dayNames:[\"igandea\",\"astelehena\",\"asteartea\",\"asteazkena\",\"osteguna\",\"ostirala\",\"larunbata\"],dayNamesShort:[\"ig.\",\"al.\",\"ar.\",\"az.\",\"og.\",\"ol.\",\"lr.\"],dayNamesMin:[\"ig\",\"al\",\"ar\",\"az\",\"og\",\"ol\",\"lr\"],weekHeader:\"As\",dateFormat:\"yy-mm-dd\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"eu\",{buttonText:{month:\"Hilabetea\",week:\"Astea\",day:\"Eguna\",list:\"Agenda\"},allDayHtml:\"Egun<br/>osoa\",eventLimitText:\"gehiago\",noEventsMessage:\"Ez dago ekitaldirik erakusteko\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"eu\",{months:\"urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua\".split(\"_\"),monthsShort:\"urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.\".split(\"_\"),monthsParseExact:!0,weekdays:\"igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata\".split(\"_\"),weekdaysShort:\"ig._al._ar._az._og._ol._lr.\".split(\"_\"),weekdaysMin:\"ig_al_ar_az_og_ol_lr\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY-MM-DD\",LL:\"YYYY[ko] MMMM[ren] D[a]\",LLL:\"YYYY[ko] MMMM[ren] D[a] HH:mm\",LLLL:\"dddd, YYYY[ko] MMMM[ren] D[a] HH:mm\",l:\"YYYY-M-D\",ll:\"YYYY[ko] MMM D[a]\",lll:\"YYYY[ko] MMM D[a] HH:mm\",llll:\"ddd, YYYY[ko] MMM D[a] HH:mm\"},calendar:{sameDay:\"[gaur] LT[etan]\",nextDay:\"[bihar] LT[etan]\",nextWeek:\"dddd LT[etan]\",lastDay:\"[atzo] LT[etan]\",lastWeek:\"[aurreko] dddd LT[etan]\",sameElse:\"L\"},relativeTime:{future:\"%s barru\",past:\"duela %s\",s:\"segundo batzuk\",ss:\"%d segundo\",m:\"minutu bat\",mm:\"%d minutu\",h:\"ordu bat\",hh:\"%d ordu\",d:\"egun bat\",dd:\"%d egun\",M:\"hilabete bat\",MM:\"%d hilabete\",y:\"urte bat\",yy:\"%d urte\"},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(120);var n=t(1);n.datepickerLocale(\"fa\",\"fa\",{closeText:\"Ø¨Ø³ØªÙ†\",prevText:\"&#x3C;Ù‚Ø¨Ù„ÛŒ\",nextText:\"Ø¨Ø¹Ø¯ÛŒ&#x3E;\",currentText:\"Ø§Ù…Ø±ÙˆØ²\",monthNames:[\"Ú˜Ø§Ù†ÙˆÛŒÙ‡\",\"ÙÙˆØ±ÛŒÙ‡\",\"Ù…Ø§Ø±Ø³\",\"Ø¢ÙˆØ±ÛŒÙ„\",\"Ù…Ù‡\",\"Ú˜ÙˆØ¦Ù†\",\"Ú˜ÙˆØ¦ÛŒÙ‡\",\"Ø§ÙˆØª\",\"Ø³Ù¾ØªØ§Ù…Ø¨Ø±\",\"Ø§Ú©ØªØ¨Ø±\",\"Ù†ÙˆØ§Ù…Ø¨Ø±\",\"Ø¯Ø³Ø§Ù…Ø¨Ø±\"],monthNamesShort:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],dayNames:[\"ÙŠÚ©Ø´Ù†Ø¨Ù‡\",\"Ø¯ÙˆØ´Ù†Ø¨Ù‡\",\"Ø³Ù‡â€ŒØ´Ù†Ø¨Ù‡\",\"Ú†Ù‡Ø§Ø±Ø´Ù†Ø¨Ù‡\",\"Ù¾Ù†Ø¬Ø´Ù†Ø¨Ù‡\",\"Ø¬Ù…Ø¹Ù‡\",\"Ø´Ù†Ø¨Ù‡\"],dayNamesShort:[\"ÛŒ\",\"Ø¯\",\"Ø³\",\"Ú†\",\"Ù¾\",\"Ø¬\",\"Ø´\"],dayNamesMin:[\"ÛŒ\",\"Ø¯\",\"Ø³\",\"Ú†\",\"Ù¾\",\"Ø¬\",\"Ø´\"],weekHeader:\"Ù‡Ù\",dateFormat:\"yy/mm/dd\",firstDay:6,isRTL:!0,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"fa\",{buttonText:{month:\"Ù…Ø§Ù‡\",week:\"Ù‡ÙØªÙ‡\",day:\"Ø±ÙˆØ²\",list:\"Ø¨Ø±Ù†Ø§Ù…Ù‡\"},allDayText:\"ØªÙ…Ø§Ù… Ø±ÙˆØ²\",eventLimitText:function(e){return\"Ø¨ÛŒØ´ Ø§Ø² \"+e},noEventsMessage:\"Ù‡ÛŒÚ† Ø±ÙˆÛŒØ¯Ø§Ø¯ÛŒ Ø¨Ù‡ Ù†Ù…Ø§ÛŒØ´\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){var a={1:\"Û±\",2:\"Û²\",3:\"Û³\",4:\"Û´\",5:\"Ûµ\",6:\"Û¶\",7:\"Û·\",8:\"Û¸\",9:\"Û¹\",0:\"Û°\"},t={\"Û±\":\"1\",\"Û²\":\"2\",\"Û³\":\"3\",\"Û´\":\"4\",\"Ûµ\":\"5\",\"Û¶\":\"6\",\"Û·\":\"7\",\"Û¸\":\"8\",\"Û¹\":\"9\",\"Û°\":\"0\"};return e.defineLocale(\"fa\",{months:\"Ú˜Ø§Ù†ÙˆÛŒÙ‡_ÙÙˆØ±ÛŒÙ‡_Ù…Ø§Ø±Ø³_Ø¢ÙˆØ±ÛŒÙ„_Ù…Ù‡_Ú˜ÙˆØ¦Ù†_Ú˜ÙˆØ¦ÛŒÙ‡_Ø§ÙˆØª_Ø³Ù¾ØªØ§Ù…Ø¨Ø±_Ø§Ú©ØªØ¨Ø±_Ù†ÙˆØ§Ù…Ø¨Ø±_Ø¯Ø³Ø§Ù…Ø¨Ø±\".split(\"_\"),monthsShort:\"Ú˜Ø§Ù†ÙˆÛŒÙ‡_ÙÙˆØ±ÛŒÙ‡_Ù…Ø§Ø±Ø³_Ø¢ÙˆØ±ÛŒÙ„_Ù…Ù‡_Ú˜ÙˆØ¦Ù†_Ú˜ÙˆØ¦ÛŒÙ‡_Ø§ÙˆØª_Ø³Ù¾ØªØ§Ù…Ø¨Ø±_Ø§Ú©ØªØ¨Ø±_Ù†ÙˆØ§Ù…Ø¨Ø±_Ø¯Ø³Ø§Ù…Ø¨Ø±\".split(\"_\"),weekdays:\"ÛŒÚ©â€ŒØ´Ù†Ø¨Ù‡_Ø¯ÙˆØ´Ù†Ø¨Ù‡_Ø³Ù‡â€ŒØ´Ù†Ø¨Ù‡_Ú†Ù‡Ø§Ø±Ø´Ù†Ø¨Ù‡_Ù¾Ù†Ø¬â€ŒØ´Ù†Ø¨Ù‡_Ø¬Ù…Ø¹Ù‡_Ø´Ù†Ø¨Ù‡\".split(\"_\"),weekdaysShort:\"ÛŒÚ©â€ŒØ´Ù†Ø¨Ù‡_Ø¯ÙˆØ´Ù†Ø¨Ù‡_Ø³Ù‡â€ŒØ´Ù†Ø¨Ù‡_Ú†Ù‡Ø§Ø±Ø´Ù†Ø¨Ù‡_Ù¾Ù†Ø¬â€ŒØ´Ù†Ø¨Ù‡_Ø¬Ù…Ø¹Ù‡_Ø´Ù†Ø¨Ù‡\".split(\"_\"),weekdaysMin:\"ÛŒ_Ø¯_Ø³_Ú†_Ù¾_Ø¬_Ø´\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},meridiemParse:/Ù‚Ø¨Ù„ Ø§Ø² Ø¸Ù‡Ø±|Ø¨Ø¹Ø¯ Ø§Ø² Ø¸Ù‡Ø±/,isPM:function(e){return/Ø¨Ø¹Ø¯ Ø§Ø² Ø¸Ù‡Ø±/.test(e)},meridiem:function(e,a,t){return e<12?\"Ù‚Ø¨Ù„ Ø§Ø² Ø¸Ù‡Ø±\":\"Ø¨Ø¹Ø¯ Ø§Ø² Ø¸Ù‡Ø±\"},calendar:{sameDay:\"[Ø§Ù…Ø±ÙˆØ² Ø³Ø§Ø¹Øª] LT\",nextDay:\"[ÙØ±Ø¯Ø§ Ø³Ø§Ø¹Øª] LT\",nextWeek:\"dddd [Ø³Ø§Ø¹Øª] LT\",lastDay:\"[Ø¯ÛŒØ±ÙˆØ² Ø³Ø§Ø¹Øª] LT\",lastWeek:\"dddd [Ù¾ÛŒØ´] [Ø³Ø§Ø¹Øª] LT\",sameElse:\"L\"},relativeTime:{future:\"Ø¯Ø± %s\",past:\"%s Ù¾ÛŒØ´\",s:\"Ú†Ù†Ø¯ Ø«Ø§Ù†ÛŒÙ‡\",ss:\"Ø«Ø§Ù†ÛŒÙ‡ d%\",m:\"ÛŒÚ© Ø¯Ù‚ÛŒÙ‚Ù‡\",mm:\"%d Ø¯Ù‚ÛŒÙ‚Ù‡\",h:\"ÛŒÚ© Ø³Ø§Ø¹Øª\",hh:\"%d Ø³Ø§Ø¹Øª\",d:\"ÛŒÚ© Ø±ÙˆØ²\",dd:\"%d Ø±ÙˆØ²\",M:\"ÛŒÚ© Ù…Ø§Ù‡\",MM:\"%d Ù…Ø§Ù‡\",y:\"ÛŒÚ© Ø³Ø§Ù„\",yy:\"%d Ø³Ø§Ù„\"},preparse:function(e){return e.replace(/[Û°-Û¹]/g,function(e){return t[e]}).replace(/ØŒ/g,\",\")},postformat:function(e){return e.replace(/\\d/g,function(e){return a[e]}).replace(/,/g,\"ØŒ\")},dayOfMonthOrdinalParse:/\\d{1,2}Ù…/,ordinal:\"%dÙ…\",week:{dow:6,doy:12}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(122);var n=t(1);n.datepickerLocale(\"fi\",\"fi\",{closeText:\"Sulje\",prevText:\"&#xAB;Edellinen\",nextText:\"Seuraava&#xBB;\",currentText:\"TÃ¤nÃ¤Ã¤n\",monthNames:[\"Tammikuu\",\"Helmikuu\",\"Maaliskuu\",\"Huhtikuu\",\"Toukokuu\",\"KesÃ¤kuu\",\"HeinÃ¤kuu\",\"Elokuu\",\"Syyskuu\",\"Lokakuu\",\"Marraskuu\",\"Joulukuu\"],monthNamesShort:[\"Tammi\",\"Helmi\",\"Maalis\",\"Huhti\",\"Touko\",\"KesÃ¤\",\"HeinÃ¤\",\"Elo\",\"Syys\",\"Loka\",\"Marras\",\"Joulu\"],dayNamesShort:[\"Su\",\"Ma\",\"Ti\",\"Ke\",\"To\",\"Pe\",\"La\"],dayNames:[\"Sunnuntai\",\"Maanantai\",\"Tiistai\",\"Keskiviikko\",\"Torstai\",\"Perjantai\",\"Lauantai\"],dayNamesMin:[\"Su\",\"Ma\",\"Ti\",\"Ke\",\"To\",\"Pe\",\"La\"],weekHeader:\"Vk\",dateFormat:\"d.m.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"fi\",{buttonText:{month:\"Kuukausi\",week:\"Viikko\",day:\"PÃ¤ivÃ¤\",list:\"Tapahtumat\"},allDayText:\"Koko pÃ¤ivÃ¤\",eventLimitText:\"lisÃ¤Ã¤\",noEventsMessage:\"Ei nÃ¤ytettÃ¤viÃ¤ tapahtumia\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a,n,r){var s=\"\";switch(n){\ncase\"s\":return r?\"muutaman sekunnin\":\"muutama sekunti\";case\"ss\":return r?\"sekunnin\":\"sekuntia\";case\"m\":return r?\"minuutin\":\"minuutti\";case\"mm\":s=r?\"minuutin\":\"minuuttia\";break;case\"h\":return r?\"tunnin\":\"tunti\";case\"hh\":s=r?\"tunnin\":\"tuntia\";break;case\"d\":return r?\"pÃ¤ivÃ¤n\":\"pÃ¤ivÃ¤\";case\"dd\":s=r?\"pÃ¤ivÃ¤n\":\"pÃ¤ivÃ¤Ã¤\";break;case\"M\":return r?\"kuukauden\":\"kuukausi\";case\"MM\":s=r?\"kuukauden\":\"kuukautta\";break;case\"y\":return r?\"vuoden\":\"vuosi\";case\"yy\":s=r?\"vuoden\":\"vuotta\"}return s=t(e,r)+\" \"+s}function t(e,a){return e<10?a?r[e]:n[e]:e}var n=\"nolla yksi kaksi kolme neljÃ¤ viisi kuusi seitsemÃ¤n kahdeksan yhdeksÃ¤n\".split(\" \"),r=[\"nolla\",\"yhden\",\"kahden\",\"kolmen\",\"neljÃ¤n\",\"viiden\",\"kuuden\",n[7],n[8],n[9]];return e.defineLocale(\"fi\",{months:\"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesÃ¤kuu_heinÃ¤kuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu\".split(\"_\"),monthsShort:\"tammi_helmi_maalis_huhti_touko_kesÃ¤_heinÃ¤_elo_syys_loka_marras_joulu\".split(\"_\"),weekdays:\"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai\".split(\"_\"),weekdaysShort:\"su_ma_ti_ke_to_pe_la\".split(\"_\"),weekdaysMin:\"su_ma_ti_ke_to_pe_la\".split(\"_\"),longDateFormat:{LT:\"HH.mm\",LTS:\"HH.mm.ss\",L:\"DD.MM.YYYY\",LL:\"Do MMMM[ta] YYYY\",LLL:\"Do MMMM[ta] YYYY, [klo] HH.mm\",LLLL:\"dddd, Do MMMM[ta] YYYY, [klo] HH.mm\",l:\"D.M.YYYY\",ll:\"Do MMM YYYY\",lll:\"Do MMM YYYY, [klo] HH.mm\",llll:\"ddd, Do MMM YYYY, [klo] HH.mm\"},calendar:{sameDay:\"[tÃ¤nÃ¤Ã¤n] [klo] LT\",nextDay:\"[huomenna] [klo] LT\",nextWeek:\"dddd [klo] LT\",lastDay:\"[eilen] [klo] LT\",lastWeek:\"[viime] dddd[na] [klo] LT\",sameElse:\"L\"},relativeTime:{future:\"%s pÃ¤Ã¤stÃ¤\",past:\"%s sitten\",s:a,ss:a,m:a,mm:a,h:a,hh:a,d:a,dd:a,M:a,MM:a,y:a,yy:a},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(124);var n=t(1);n.datepickerLocale(\"fr-ca\",\"fr-CA\",{closeText:\"Fermer\",prevText:\"PrÃ©cÃ©dent\",nextText:\"Suivant\",currentText:\"Aujourd'hui\",monthNames:[\"janvier\",\"fÃ©vrier\",\"mars\",\"avril\",\"mai\",\"juin\",\"juillet\",\"aoÃ»t\",\"septembre\",\"octobre\",\"novembre\",\"dÃ©cembre\"],monthNamesShort:[\"janv.\",\"fÃ©vr.\",\"mars\",\"avril\",\"mai\",\"juin\",\"juil.\",\"aoÃ»t\",\"sept.\",\"oct.\",\"nov.\",\"dÃ©c.\"],dayNames:[\"dimanche\",\"lundi\",\"mardi\",\"mercredi\",\"jeudi\",\"vendredi\",\"samedi\"],dayNamesShort:[\"dim.\",\"lun.\",\"mar.\",\"mer.\",\"jeu.\",\"ven.\",\"sam.\"],dayNamesMin:[\"D\",\"L\",\"M\",\"M\",\"J\",\"V\",\"S\"],weekHeader:\"Sem.\",dateFormat:\"yy-mm-dd\",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"fr-ca\",{buttonText:{year:\"AnnÃ©e\",month:\"Mois\",week:\"Semaine\",day:\"Jour\",list:\"Mon planning\"},allDayHtml:\"Toute la<br/>journÃ©e\",eventLimitText:\"en plus\",noEventsMessage:\"Aucun Ã©vÃ©nement Ã  afficher\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"fr-ca\",{months:\"janvier_fÃ©vrier_mars_avril_mai_juin_juillet_aoÃ»t_septembre_octobre_novembre_dÃ©cembre\".split(\"_\"),monthsShort:\"janv._fÃ©vr._mars_avr._mai_juin_juil._aoÃ»t_sept._oct._nov._dÃ©c.\".split(\"_\"),monthsParseExact:!0,weekdays:\"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi\".split(\"_\"),weekdaysShort:\"dim._lun._mar._mer._jeu._ven._sam.\".split(\"_\"),weekdaysMin:\"di_lu_ma_me_je_ve_sa\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY-MM-DD\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Aujourdâ€™hui Ã ] LT\",nextDay:\"[Demain Ã ] LT\",nextWeek:\"dddd [Ã ] LT\",lastDay:\"[Hier Ã ] LT\",lastWeek:\"dddd [dernier Ã ] LT\",sameElse:\"L\"},relativeTime:{future:\"dans %s\",past:\"il y a %s\",s:\"quelques secondes\",ss:\"%d secondes\",m:\"une minute\",mm:\"%d minutes\",h:\"une heure\",hh:\"%d heures\",d:\"un jour\",dd:\"%d jours\",M:\"un mois\",MM:\"%d mois\",y:\"un an\",yy:\"%d ans\"},dayOfMonthOrdinalParse:/\\d{1,2}(er|e)/,ordinal:function(e,a){switch(a){default:case\"M\":case\"Q\":case\"D\":case\"DDD\":case\"d\":return e+(1===e?\"er\":\"e\");case\"w\":case\"W\":return e+(1===e?\"re\":\"e\")}}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(126);var n=t(1);n.datepickerLocale(\"fr-ch\",\"fr-CH\",{closeText:\"Fermer\",prevText:\"&#x3C;PrÃ©c\",nextText:\"Suiv&#x3E;\",currentText:\"Courant\",monthNames:[\"janvier\",\"fÃ©vrier\",\"mars\",\"avril\",\"mai\",\"juin\",\"juillet\",\"aoÃ»t\",\"septembre\",\"octobre\",\"novembre\",\"dÃ©cembre\"],monthNamesShort:[\"janv.\",\"fÃ©vr.\",\"mars\",\"avril\",\"mai\",\"juin\",\"juil.\",\"aoÃ»t\",\"sept.\",\"oct.\",\"nov.\",\"dÃ©c.\"],dayNames:[\"dimanche\",\"lundi\",\"mardi\",\"mercredi\",\"jeudi\",\"vendredi\",\"samedi\"],dayNamesShort:[\"dim.\",\"lun.\",\"mar.\",\"mer.\",\"jeu.\",\"ven.\",\"sam.\"],dayNamesMin:[\"D\",\"L\",\"M\",\"M\",\"J\",\"V\",\"S\"],weekHeader:\"Sm\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"fr-ch\",{buttonText:{year:\"AnnÃ©e\",month:\"Mois\",week:\"Semaine\",day:\"Jour\",list:\"Mon planning\"},allDayHtml:\"Toute la<br/>journÃ©e\",eventLimitText:\"en plus\",noEventsMessage:\"Aucun Ã©vÃ©nement Ã  afficher\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"fr-ch\",{months:\"janvier_fÃ©vrier_mars_avril_mai_juin_juillet_aoÃ»t_septembre_octobre_novembre_dÃ©cembre\".split(\"_\"),monthsShort:\"janv._fÃ©vr._mars_avr._mai_juin_juil._aoÃ»t_sept._oct._nov._dÃ©c.\".split(\"_\"),monthsParseExact:!0,weekdays:\"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi\".split(\"_\"),weekdaysShort:\"dim._lun._mar._mer._jeu._ven._sam.\".split(\"_\"),weekdaysMin:\"di_lu_ma_me_je_ve_sa\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Aujourdâ€™hui Ã ] LT\",nextDay:\"[Demain Ã ] LT\",nextWeek:\"dddd [Ã ] LT\",lastDay:\"[Hier Ã ] LT\",lastWeek:\"dddd [dernier Ã ] LT\",sameElse:\"L\"},relativeTime:{future:\"dans %s\",past:\"il y a %s\",s:\"quelques secondes\",ss:\"%d secondes\",m:\"une minute\",mm:\"%d minutes\",h:\"une heure\",hh:\"%d heures\",d:\"un jour\",dd:\"%d jours\",M:\"un mois\",MM:\"%d mois\",y:\"un an\",yy:\"%d ans\"},dayOfMonthOrdinalParse:/\\d{1,2}(er|e)/,ordinal:function(e,a){switch(a){default:case\"M\":case\"Q\":case\"D\":case\"DDD\":case\"d\":return e+(1===e?\"er\":\"e\");case\"w\":case\"W\":return e+(1===e?\"re\":\"e\")}},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(128);var n=t(1);n.datepickerLocale(\"fr\",\"fr\",{closeText:\"Fermer\",prevText:\"PrÃ©cÃ©dent\",nextText:\"Suivant\",currentText:\"Aujourd'hui\",monthNames:[\"janvier\",\"fÃ©vrier\",\"mars\",\"avril\",\"mai\",\"juin\",\"juillet\",\"aoÃ»t\",\"septembre\",\"octobre\",\"novembre\",\"dÃ©cembre\"],monthNamesShort:[\"janv.\",\"fÃ©vr.\",\"mars\",\"avr.\",\"mai\",\"juin\",\"juil.\",\"aoÃ»t\",\"sept.\",\"oct.\",\"nov.\",\"dÃ©c.\"],dayNames:[\"dimanche\",\"lundi\",\"mardi\",\"mercredi\",\"jeudi\",\"vendredi\",\"samedi\"],dayNamesShort:[\"dim.\",\"lun.\",\"mar.\",\"mer.\",\"jeu.\",\"ven.\",\"sam.\"],dayNamesMin:[\"D\",\"L\",\"M\",\"M\",\"J\",\"V\",\"S\"],weekHeader:\"Sem.\",dateFormat:\"dd/mm/yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"fr\",{buttonText:{year:\"AnnÃ©e\",month:\"Mois\",week:\"Semaine\",day:\"Jour\",list:\"Mon planning\"},allDayHtml:\"Toute la<br/>journÃ©e\",eventLimitText:\"en plus\",noEventsMessage:\"Aucun Ã©vÃ©nement Ã  afficher\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"fr\",{months:\"janvier_fÃ©vrier_mars_avril_mai_juin_juillet_aoÃ»t_septembre_octobre_novembre_dÃ©cembre\".split(\"_\"),monthsShort:\"janv._fÃ©vr._mars_avr._mai_juin_juil._aoÃ»t_sept._oct._nov._dÃ©c.\".split(\"_\"),monthsParseExact:!0,weekdays:\"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi\".split(\"_\"),weekdaysShort:\"dim._lun._mar._mer._jeu._ven._sam.\".split(\"_\"),weekdaysMin:\"di_lu_ma_me_je_ve_sa\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Aujourdâ€™hui Ã ] LT\",nextDay:\"[Demain Ã ] LT\",nextWeek:\"dddd [Ã ] LT\",lastDay:\"[Hier Ã ] LT\",lastWeek:\"dddd [dernier Ã ] LT\",sameElse:\"L\"},relativeTime:{future:\"dans %s\",past:\"il y a %s\",s:\"quelques secondes\",ss:\"%d secondes\",m:\"une minute\",mm:\"%d minutes\",h:\"une heure\",hh:\"%d heures\",d:\"un jour\",dd:\"%d jours\",M:\"un mois\",MM:\"%d mois\",y:\"un an\",yy:\"%d ans\"},dayOfMonthOrdinalParse:/\\d{1,2}(er|)/,ordinal:function(e,a){switch(a){case\"D\":return e+(1===e?\"er\":\"\");default:case\"M\":case\"Q\":case\"DDD\":case\"d\":return e+(1===e?\"er\":\"e\");case\"w\":case\"W\":return e+(1===e?\"re\":\"e\")}},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(130);var n=t(1);n.datepickerLocale(\"gl\",\"gl\",{closeText:\"Pechar\",prevText:\"&#x3C;Ant\",nextText:\"Seg&#x3E;\",currentText:\"Hoxe\",monthNames:[\"Xaneiro\",\"Febreiro\",\"Marzo\",\"Abril\",\"Maio\",\"XuÃ±o\",\"Xullo\",\"Agosto\",\"Setembro\",\"Outubro\",\"Novembro\",\"Decembro\"],monthNamesShort:[\"Xan\",\"Feb\",\"Mar\",\"Abr\",\"Mai\",\"XuÃ±\",\"Xul\",\"Ago\",\"Set\",\"Out\",\"Nov\",\"Dec\"],dayNames:[\"Domingo\",\"Luns\",\"Martes\",\"MÃ©rcores\",\"Xoves\",\"Venres\",\"SÃ¡bado\"],dayNamesShort:[\"Dom\",\"Lun\",\"Mar\",\"MÃ©r\",\"Xov\",\"Ven\",\"SÃ¡b\"],dayNamesMin:[\"Do\",\"Lu\",\"Ma\",\"MÃ©\",\"Xo\",\"Ve\",\"SÃ¡\"],weekHeader:\"Sm\",dateFormat:\"dd/mm/yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"gl\",{buttonText:{month:\"Mes\",week:\"Semana\",day:\"DÃ­a\",list:\"Axenda\"},allDayHtml:\"Todo<br/>o dÃ­a\",eventLimitText:\"mÃ¡is\",noEventsMessage:\"Non hai eventos para amosar\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"gl\",{months:\"xaneiro_febreiro_marzo_abril_maio_xuÃ±o_xullo_agosto_setembro_outubro_novembro_decembro\".split(\"_\"),monthsShort:\"xan._feb._mar._abr._mai._xuÃ±._xul._ago._set._out._nov._dec.\".split(\"_\"),monthsParseExact:!0,weekdays:\"domingo_luns_martes_mÃ©rcores_xoves_venres_sÃ¡bado\".split(\"_\"),weekdaysShort:\"dom._lun._mar._mÃ©r._xov._ven._sÃ¡b.\".split(\"_\"),weekdaysMin:\"do_lu_ma_mÃ©_xo_ve_sÃ¡\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D [de] MMMM [de] YYYY\",LLL:\"D [de] MMMM [de] YYYY H:mm\",LLLL:\"dddd, D [de] MMMM [de] YYYY H:mm\"},calendar:{sameDay:function(){return\"[hoxe \"+(1!==this.hours()?\"Ã¡s\":\"Ã¡\")+\"] LT\"},nextDay:function(){return\"[maÃ±Ã¡ \"+(1!==this.hours()?\"Ã¡s\":\"Ã¡\")+\"] LT\"},nextWeek:function(){return\"dddd [\"+(1!==this.hours()?\"Ã¡s\":\"a\")+\"] LT\"},lastDay:function(){return\"[onte \"+(1!==this.hours()?\"Ã¡\":\"a\")+\"] LT\"},lastWeek:function(){return\"[o] dddd [pasado \"+(1!==this.hours()?\"Ã¡s\":\"a\")+\"] LT\"},sameElse:\"L\"},relativeTime:{future:function(e){return 0===e.indexOf(\"un\")?\"n\"+e:\"en \"+e},past:\"hai %s\",s:\"uns segundos\",ss:\"%d segundos\",m:\"un minuto\",mm:\"%d minutos\",h:\"unha hora\",hh:\"%d horas\",d:\"un dÃ­a\",dd:\"%d dÃ­as\",M:\"un mes\",MM:\"%d meses\",y:\"un ano\",yy:\"%d anos\"},dayOfMonthOrdinalParse:/\\d{1,2}Âº/,ordinal:\"%dÂº\",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(132);var n=t(1);n.datepickerLocale(\"he\",\"he\",{closeText:\"×¡×’×•×¨\",prevText:\"&#x3C;×”×§×•×“×\",nextText:\"×”×‘×&#x3E;\",currentText:\"×”×™×•×\",monthNames:[\"×™× ×•××¨\",\"×¤×‘×¨×•××¨\",\"×ž×¨×¥\",\"××¤×¨×™×œ\",\"×ž××™\",\"×™×•× ×™\",\"×™×•×œ×™\",\"××•×’×•×¡×˜\",\"×¡×¤×˜×ž×‘×¨\",\"××•×§×˜×•×‘×¨\",\"× ×•×‘×ž×‘×¨\",\"×“×¦×ž×‘×¨\"],monthNamesShort:[\"×™× ×•\",\"×¤×‘×¨\",\"×ž×¨×¥\",\"××¤×¨\",\"×ž××™\",\"×™×•× ×™\",\"×™×•×œ×™\",\"××•×’\",\"×¡×¤×˜\",\"××•×§\",\"× ×•×‘\",\"×“×¦×ž\"],dayNames:[\"×¨××©×•×Ÿ\",\"×©× ×™\",\"×©×œ×™×©×™\",\"×¨×‘×™×¢×™\",\"×—×ž×™×©×™\",\"×©×™×©×™\",\"×©×‘×ª\"],dayNamesShort:[\"×'\",\"×‘'\",\"×’'\",\"×“'\",\"×”'\",\"×•'\",\"×©×‘×ª\"],dayNamesMin:[\"×'\",\"×‘'\",\"×’'\",\"×“'\",\"×”'\",\"×•'\",\"×©×‘×ª\"],weekHeader:\"Wk\",dateFormat:\"dd/mm/yy\",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"he\",{buttonText:{month:\"×—×•×“×©\",week:\"×©×‘×•×¢\",day:\"×™×•×\",list:\"×¡×“×¨ ×™×•×\"},allDayText:\"×›×œ ×”×™×•×\",eventLimitText:\"××—×¨\",noEventsMessage:\"××™×Ÿ ××™×¨×•×¢×™× ×œ×”×¦×’×”\",weekNumberTitle:\"×©×‘×•×¢\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"he\",{months:\"×™× ×•××¨_×¤×‘×¨×•××¨_×ž×¨×¥_××¤×¨×™×œ_×ž××™_×™×•× ×™_×™×•×œ×™_××•×’×•×¡×˜_×¡×¤×˜×ž×‘×¨_××•×§×˜×•×‘×¨_× ×•×‘×ž×‘×¨_×“×¦×ž×‘×¨\".split(\"_\"),monthsShort:\"×™× ×•×³_×¤×‘×¨×³_×ž×¨×¥_××¤×¨×³_×ž××™_×™×•× ×™_×™×•×œ×™_××•×’×³_×¡×¤×˜×³_××•×§×³_× ×•×‘×³_×“×¦×ž×³\".split(\"_\"),weekdays:\"×¨××©×•×Ÿ_×©× ×™_×©×œ×™×©×™_×¨×‘×™×¢×™_×—×ž×™×©×™_×©×™×©×™_×©×‘×ª\".split(\"_\"),weekdaysShort:\"××³_×‘×³_×’×³_×“×³_×”×³_×•×³_×©×³\".split(\"_\"),weekdaysMin:\"×_×‘_×’_×“_×”_×•_×©\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D [×‘]MMMM YYYY\",LLL:\"D [×‘]MMMM YYYY HH:mm\",LLLL:\"dddd, D [×‘]MMMM YYYY HH:mm\",l:\"D/M/YYYY\",ll:\"D MMM YYYY\",lll:\"D MMM YYYY HH:mm\",llll:\"ddd, D MMM YYYY HH:mm\"},calendar:{sameDay:\"[×”×™×•× ×‘Ö¾]LT\",nextDay:\"[×ž×—×¨ ×‘Ö¾]LT\",nextWeek:\"dddd [×‘×©×¢×”] LT\",lastDay:\"[××ª×ž×•×œ ×‘Ö¾]LT\",lastWeek:\"[×‘×™×•×] dddd [×”××—×¨×•×Ÿ ×‘×©×¢×”] LT\",sameElse:\"L\"},relativeTime:{future:\"×‘×¢×•×“ %s\",past:\"×œ×¤× ×™ %s\",s:\"×ž×¡×¤×¨ ×©× ×™×•×ª\",ss:\"%d ×©× ×™×•×ª\",m:\"×“×§×”\",mm:\"%d ×“×§×•×ª\",h:\"×©×¢×”\",hh:function(e){return 2===e?\"×©×¢×ª×™×™×\":e+\" ×©×¢×•×ª\"},d:\"×™×•×\",dd:function(e){return 2===e?\"×™×•×ž×™×™×\":e+\" ×™×ž×™×\"},M:\"×—×•×“×©\",MM:function(e){return 2===e?\"×—×•×“×©×™×™×\":e+\" ×—×•×“×©×™×\"},y:\"×©× ×”\",yy:function(e){return 2===e?\"×©× ×ª×™×™×\":e%10==0&&10!==e?e+\" ×©× ×”\":e+\" ×©× ×™×\"}},meridiemParse:/××—×”\"×¦|×œ×¤× ×”\"×¦|××—×¨×™ ×”×¦×”×¨×™×™×|×œ×¤× ×™ ×”×¦×”×¨×™×™×|×œ×¤× ×•×ª ×‘×•×§×¨|×‘×‘×•×§×¨|×‘×¢×¨×‘/i,isPM:function(e){return/^(××—×”\"×¦|××—×¨×™ ×”×¦×”×¨×™×™×|×‘×¢×¨×‘)$/.test(e)},meridiem:function(e,a,t){return e<5?\"×œ×¤× ×•×ª ×‘×•×§×¨\":e<10?\"×‘×‘×•×§×¨\":e<12?t?'×œ×¤× ×”\"×¦':\"×œ×¤× ×™ ×”×¦×”×¨×™×™×\":e<18?t?'××—×”\"×¦':\"××—×¨×™ ×”×¦×”×¨×™×™×\":\"×‘×¢×¨×‘\"}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(134);var n=t(1);n.datepickerLocale(\"hi\",\"hi\",{closeText:\"à¤¬à¤‚à¤¦\",prevText:\"à¤ªà¤¿à¤›à¤²à¤¾\",nextText:\"à¤…à¤—à¤²à¤¾\",currentText:\"à¤†à¤œ\",monthNames:[\"à¤œà¤¨à¤µà¤°à¥€ \",\"à¤«à¤°à¤µà¤°à¥€\",\"à¤®à¤¾à¤°à¥à¤š\",\"à¤…à¤ªà¥à¤°à¥‡à¤²\",\"à¤®à¤ˆ\",\"à¤œà¥‚à¤¨\",\"à¤œà¥‚à¤²à¤¾à¤ˆ\",\"à¤…à¤—à¤¸à¥à¤¤ \",\"à¤¸à¤¿à¤¤à¤®à¥à¤¬à¤°\",\"à¤…à¤•à¥à¤Ÿà¥‚à¤¬à¤°\",\"à¤¨à¤µà¤®à¥à¤¬à¤°\",\"à¤¦à¤¿à¤¸à¤®à¥à¤¬à¤°\"],monthNamesShort:[\"à¤œà¤¨\",\"à¤«à¤°\",\"à¤®à¤¾à¤°à¥à¤š\",\"à¤…à¤ªà¥à¤°à¥‡à¤²\",\"à¤®à¤ˆ\",\"à¤œà¥‚à¤¨\",\"à¤œà¥‚à¤²à¤¾à¤ˆ\",\"à¤…à¤—\",\"à¤¸à¤¿à¤¤\",\"à¤…à¤•à¥à¤Ÿ\",\"à¤¨à¤µ\",\"à¤¦à¤¿\"],dayNames:[\"à¤°à¤µà¤¿à¤µà¤¾à¤°\",\"à¤¸à¥‹à¤®à¤µà¤¾à¤°\",\"à¤®à¤‚à¤—à¤²à¤µà¤¾à¤°\",\"à¤¬à¥à¤§à¤µà¤¾à¤°\",\"à¤—à¥à¤°à¥à¤µà¤¾à¤°\",\"à¤¶à¥à¤•à¥à¤°à¤µà¤¾à¤°\",\"à¤¶à¤¨à¤¿à¤µà¤¾à¤°\"],dayNamesShort:[\"à¤°à¤µà¤¿\",\"à¤¸à¥‹à¤®\",\"à¤®à¤‚à¤—à¤²\",\"à¤¬à¥à¤§\",\"à¤—à¥à¤°à¥\",\"à¤¶à¥à¤•à¥à¤°\",\"à¤¶à¤¨à¤¿\"],dayNamesMin:[\"à¤°à¤µà¤¿\",\"à¤¸à¥‹à¤®\",\"à¤®à¤‚à¤—à¤²\",\"à¤¬à¥à¤§\",\"à¤—à¥à¤°à¥\",\"à¤¶à¥à¤•à¥à¤°\",\"à¤¶à¤¨à¤¿\"],weekHeader:\"à¤¹à¤«à¥à¤¤à¤¾\",dateFormat:\"dd/mm/yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"hi\",{buttonText:{month:\"à¤®à¤¹à¥€à¤¨à¤¾\",week:\"à¤¸à¤ªà¥à¤¤à¤¾à¤¹\",day:\"à¤¦à¤¿à¤¨\",list:\"à¤•à¤¾à¤°à¥à¤¯à¤¸à¥‚à¤šà¥€\"},allDayText:\"à¤¸à¤­à¥€ à¤¦à¤¿à¤¨\",eventLimitText:function(e){return\"+à¤…à¤§à¤¿à¤• \"+e},noEventsMessage:\"à¤•à¥‹à¤ˆ à¤˜à¤Ÿà¤¨à¤¾à¤“à¤‚ à¤•à¥‹ à¤ªà¥à¤°à¤¦à¤°à¥à¤¶à¤¿à¤¤ à¤•à¤°à¤¨à¥‡ à¤•à¥‡ à¤²à¤¿à¤\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){var a={1:\"à¥§\",2:\"à¥¨\",3:\"à¥©\",4:\"à¥ª\",5:\"à¥«\",6:\"à¥¬\",7:\"à¥­\",8:\"à¥®\",9:\"à¥¯\",0:\"à¥¦\"},t={\"à¥§\":\"1\",\"à¥¨\":\"2\",\"à¥©\":\"3\",\"à¥ª\":\"4\",\"à¥«\":\"5\",\"à¥¬\":\"6\",\"à¥­\":\"7\",\"à¥®\":\"8\",\"à¥¯\":\"9\",\"à¥¦\":\"0\"};return e.defineLocale(\"hi\",{months:\"à¤œà¤¨à¤µà¤°à¥€_à¤«à¤¼à¤°à¤µà¤°à¥€_à¤®à¤¾à¤°à¥à¤š_à¤…à¤ªà¥à¤°à¥ˆà¤²_à¤®à¤ˆ_à¤œà¥‚à¤¨_à¤œà¥à¤²à¤¾à¤ˆ_à¤…à¤—à¤¸à¥à¤¤_à¤¸à¤¿à¤¤à¤®à¥à¤¬à¤°_à¤…à¤•à¥à¤Ÿà¥‚à¤¬à¤°_à¤¨à¤µà¤®à¥à¤¬à¤°_à¤¦à¤¿à¤¸à¤®à¥à¤¬à¤°\".split(\"_\"),monthsShort:\"à¤œà¤¨._à¤«à¤¼à¤°._à¤®à¤¾à¤°à¥à¤š_à¤…à¤ªà¥à¤°à¥ˆ._à¤®à¤ˆ_à¤œà¥‚à¤¨_à¤œà¥à¤²._à¤…à¤—._à¤¸à¤¿à¤¤._à¤…à¤•à¥à¤Ÿà¥‚._à¤¨à¤µ._à¤¦à¤¿à¤¸.\".split(\"_\"),monthsParseExact:!0,weekdays:\"à¤°à¤µà¤¿à¤µà¤¾à¤°_à¤¸à¥‹à¤®à¤µà¤¾à¤°_à¤®à¤‚à¤—à¤²à¤µà¤¾à¤°_à¤¬à¥à¤§à¤µà¤¾à¤°_à¤—à¥à¤°à¥‚à¤µà¤¾à¤°_à¤¶à¥à¤•à¥à¤°à¤µà¤¾à¤°_à¤¶à¤¨à¤¿à¤µà¤¾à¤°\".split(\"_\"),weekdaysShort:\"à¤°à¤µà¤¿_à¤¸à¥‹à¤®_à¤®à¤‚à¤—à¤²_à¤¬à¥à¤§_à¤—à¥à¤°à¥‚_à¤¶à¥à¤•à¥à¤°_à¤¶à¤¨à¤¿\".split(\"_\"),weekdaysMin:\"à¤°_à¤¸à¥‹_à¤®à¤‚_à¤¬à¥_à¤—à¥_à¤¶à¥_à¤¶\".split(\"_\"),longDateFormat:{LT:\"A h:mm à¤¬à¤œà¥‡\",LTS:\"A h:mm:ss à¤¬à¤œà¥‡\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY, A h:mm à¤¬à¤œà¥‡\",LLLL:\"dddd, D MMMM YYYY, A h:mm à¤¬à¤œà¥‡\"},calendar:{sameDay:\"[à¤†à¤œ] LT\",nextDay:\"[à¤•à¤²] LT\",nextWeek:\"dddd, LT\",lastDay:\"[à¤•à¤²] LT\",lastWeek:\"[à¤ªà¤¿à¤›à¤²à¥‡] dddd, LT\",sameElse:\"L\"},relativeTime:{future:\"%s à¤®à¥‡à¤‚\",past:\"%s à¤ªà¤¹à¤²à¥‡\",s:\"à¤•à¥à¤› à¤¹à¥€ à¤•à¥à¤·à¤£\",ss:\"%d à¤¸à¥‡à¤•à¤‚à¤¡\",m:\"à¤à¤• à¤®à¤¿à¤¨à¤Ÿ\",mm:\"%d à¤®à¤¿à¤¨à¤Ÿ\",h:\"à¤à¤• à¤˜à¤‚à¤Ÿà¤¾\",hh:\"%d à¤˜à¤‚à¤Ÿà¥‡\",d:\"à¤à¤• à¤¦à¤¿à¤¨\",dd:\"%d à¤¦à¤¿à¤¨\",M:\"à¤à¤• à¤®à¤¹à¥€à¤¨à¥‡\",MM:\"%d à¤®à¤¹à¥€à¤¨à¥‡\",y:\"à¤à¤• à¤µà¤°à¥à¤·\",yy:\"%d à¤µà¤°à¥à¤·\"},preparse:function(e){return e.replace(/[à¥§à¥¨à¥©à¥ªà¥«à¥¬à¥­à¥®à¥¯à¥¦]/g,function(e){return t[e]})},postformat:function(e){return e.replace(/\\d/g,function(e){return a[e]})},meridiemParse:/à¤°à¤¾à¤¤|à¤¸à¥à¤¬à¤¹|à¤¦à¥‹à¤ªà¤¹à¤°|à¤¶à¤¾à¤®/,meridiemHour:function(e,a){return 12===e&&(e=0),\"à¤°à¤¾à¤¤\"===a?e<4?e:e+12:\"à¤¸à¥à¤¬à¤¹\"===a?e:\"à¤¦à¥‹à¤ªà¤¹à¤°\"===a?e>=10?e:e+12:\"à¤¶à¤¾à¤®\"===a?e+12:void 0},meridiem:function(e,a,t){return e<4?\"à¤°à¤¾à¤¤\":e<10?\"à¤¸à¥à¤¬à¤¹\":e<17?\"à¤¦à¥‹à¤ªà¤¹à¤°\":e<20?\"à¤¶à¤¾à¤®\":\"à¤°à¤¾à¤¤\"},week:{dow:0,doy:6}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(136);var n=t(1);n.datepickerLocale(\"hr\",\"hr\",{closeText:\"Zatvori\",prevText:\"&#x3C;\",nextText:\"&#x3E;\",currentText:\"Danas\",monthNames:[\"SijeÄanj\",\"VeljaÄa\",\"OÅ¾ujak\",\"Travanj\",\"Svibanj\",\"Lipanj\",\"Srpanj\",\"Kolovoz\",\"Rujan\",\"Listopad\",\"Studeni\",\"Prosinac\"],monthNamesShort:[\"Sij\",\"Velj\",\"OÅ¾u\",\"Tra\",\"Svi\",\"Lip\",\"Srp\",\"Kol\",\"Ruj\",\"Lis\",\"Stu\",\"Pro\"],dayNames:[\"Nedjelja\",\"Ponedjeljak\",\"Utorak\",\"Srijeda\",\"ÄŒetvrtak\",\"Petak\",\"Subota\"],dayNamesShort:[\"Ned\",\"Pon\",\"Uto\",\"Sri\",\"ÄŒet\",\"Pet\",\"Sub\"],dayNamesMin:[\"Ne\",\"Po\",\"Ut\",\"Sr\",\"ÄŒe\",\"Pe\",\"Su\"],weekHeader:\"Tje\",dateFormat:\"dd.mm.yy.\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"hr\",{buttonText:{prev:\"PrijaÅ¡nji\",next:\"SljedeÄ‡i\",month:\"Mjesec\",week:\"Tjedan\",day:\"Dan\",list:\"Raspored\"},allDayText:\"Cijeli dan\",eventLimitText:function(e){return\"+ joÅ¡ \"+e},noEventsMessage:\"Nema dogaÄ‘aja za prikaz\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a,t){var n=e+\" \";switch(t){case\"ss\":return n+=1===e?\"sekunda\":2===e||3===e||4===e?\"sekunde\":\"sekundi\";case\"m\":return a?\"jedna minuta\":\"jedne minute\";case\"mm\":return n+=1===e?\"minuta\":2===e||3===e||4===e?\"minute\":\"minuta\";case\"h\":return a?\"jedan sat\":\"jednog sata\";case\"hh\":return n+=1===e?\"sat\":2===e||3===e||4===e?\"sata\":\"sati\";case\"dd\":return n+=1===e?\"dan\":\"dana\";case\"MM\":return n+=1===e?\"mjesec\":2===e||3===e||4===e?\"mjeseca\":\"mjeseci\";case\"yy\":return n+=1===e?\"godina\":2===e||3===e||4===e?\"godine\":\"godina\"}}return e.defineLocale(\"hr\",{months:{format:\"sijeÄnja_veljaÄe_oÅ¾ujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca\".split(\"_\"),standalone:\"sijeÄanj_veljaÄa_oÅ¾ujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac\".split(\"_\")},monthsShort:\"sij._velj._oÅ¾u._tra._svi._lip._srp._kol._ruj._lis._stu._pro.\".split(\"_\"),monthsParseExact:!0,weekdays:\"nedjelja_ponedjeljak_utorak_srijeda_Äetvrtak_petak_subota\".split(\"_\"),weekdaysShort:\"ned._pon._uto._sri._Äet._pet._sub.\".split(\"_\"),weekdaysMin:\"ne_po_ut_sr_Äe_pe_su\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY H:mm\",LLLL:\"dddd, D. MMMM YYYY H:mm\"},calendar:{sameDay:\"[danas u] LT\",nextDay:\"[sutra u] LT\",nextWeek:function(){switch(this.day()){case 0:return\"[u] [nedjelju] [u] LT\";case 3:return\"[u] [srijedu] [u] LT\";case 6:return\"[u] [subotu] [u] LT\";case 1:case 2:case 4:case 5:return\"[u] dddd [u] LT\"}},lastDay:\"[juÄer u] LT\",lastWeek:function(){switch(this.day()){case 0:case 3:return\"[proÅ¡lu] dddd [u] LT\";case 6:return\"[proÅ¡le] [subote] [u] LT\";case 1:case 2:case 4:case 5:return\"[proÅ¡li] dddd [u] LT\"}},sameElse:\"L\"},relativeTime:{future:\"za %s\",past:\"prije %s\",s:\"par sekundi\",ss:a,m:a,mm:a,h:a,hh:a,d:\"dan\",dd:a,M:\"mjesec\",MM:a,y:\"godinu\",yy:a},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(138);var n=t(1);n.datepickerLocale(\"hu\",\"hu\",{closeText:\"bezÃ¡r\",prevText:\"vissza\",nextText:\"elÅ‘re\",currentText:\"ma\",monthNames:[\"JanuÃ¡r\",\"FebruÃ¡r\",\"MÃ¡rcius\",\"Ãprilis\",\"MÃ¡jus\",\"JÃºnius\",\"JÃºlius\",\"Augusztus\",\"Szeptember\",\"OktÃ³ber\",\"November\",\"December\"],monthNamesShort:[\"Jan\",\"Feb\",\"MÃ¡r\",\"Ãpr\",\"MÃ¡j\",\"JÃºn\",\"JÃºl\",\"Aug\",\"Szep\",\"Okt\",\"Nov\",\"Dec\"],dayNames:[\"VasÃ¡rnap\",\"HÃ©tfÅ‘\",\"Kedd\",\"Szerda\",\"CsÃ¼tÃ¶rtÃ¶k\",\"PÃ©ntek\",\"Szombat\"],dayNamesShort:[\"Vas\",\"HÃ©t\",\"Ked\",\"Sze\",\"CsÃ¼\",\"PÃ©n\",\"Szo\"],dayNamesMin:[\"V\",\"H\",\"K\",\"Sze\",\"Cs\",\"P\",\"Szo\"],weekHeader:\"HÃ©t\",dateFormat:\"yy.mm.dd.\",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:\"\"}),n.locale(\"hu\",{buttonText:{month:\"HÃ³nap\",week:\"HÃ©t\",day:\"Nap\",list:\"NaplÃ³\"},allDayText:\"EgÃ©sz nap\",eventLimitText:\"tovÃ¡bbi\",noEventsMessage:\"Nincs megjelenÃ­thetÅ‘ esemÃ©nyek\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a,t,n){var r=e;switch(t){case\"s\":return n||a?\"nÃ©hÃ¡ny mÃ¡sodperc\":\"nÃ©hÃ¡ny mÃ¡sodperce\";case\"ss\":return r+(n||a)?\" mÃ¡sodperc\":\" mÃ¡sodperce\";case\"m\":return\"egy\"+(n||a?\" perc\":\" perce\");case\"mm\":return r+(n||a?\" perc\":\" perce\");case\"h\":return\"egy\"+(n||a?\" Ã³ra\":\" Ã³rÃ¡ja\");case\"hh\":return r+(n||a?\" Ã³ra\":\" Ã³rÃ¡ja\");case\"d\":return\"egy\"+(n||a?\" nap\":\" napja\");case\"dd\":return r+(n||a?\" nap\":\" napja\");case\"M\":return\"egy\"+(n||a?\" hÃ³nap\":\" hÃ³napja\");case\"MM\":return r+(n||a?\" hÃ³nap\":\" hÃ³napja\");case\"y\":return\"egy\"+(n||a?\" Ã©v\":\" Ã©ve\");case\"yy\":return r+(n||a?\" Ã©v\":\" Ã©ve\")}return\"\"}function t(e){return(e?\"\":\"[mÃºlt] \")+\"[\"+n[this.day()]+\"] LT[-kor]\"}var n=\"vasÃ¡rnap hÃ©tfÅ‘n kedden szerdÃ¡n csÃ¼tÃ¶rtÃ¶kÃ¶n pÃ©nteken szombaton\".split(\" \");return e.defineLocale(\"hu\",{months:\"januÃ¡r_februÃ¡r_mÃ¡rcius_Ã¡prilis_mÃ¡jus_jÃºnius_jÃºlius_augusztus_szeptember_oktÃ³ber_november_december\".split(\"_\"),monthsShort:\"jan_feb_mÃ¡rc_Ã¡pr_mÃ¡j_jÃºn_jÃºl_aug_szept_okt_nov_dec\".split(\"_\"),weekdays:\"vasÃ¡rnap_hÃ©tfÅ‘_kedd_szerda_csÃ¼tÃ¶rtÃ¶k_pÃ©ntek_szombat\".split(\"_\"),weekdaysShort:\"vas_hÃ©t_kedd_sze_csÃ¼t_pÃ©n_szo\".split(\"_\"),weekdaysMin:\"v_h_k_sze_cs_p_szo\".split(\"_\"),longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"YYYY.MM.DD.\",LL:\"YYYY. MMMM D.\",LLL:\"YYYY. MMMM D. H:mm\",LLLL:\"YYYY. MMMM D., dddd H:mm\"},meridiemParse:/de|du/i,isPM:function(e){return\"u\"===e.charAt(1).toLowerCase()},meridiem:function(e,a,t){return e<12?!0===t?\"de\":\"DE\":!0===t?\"du\":\"DU\"},calendar:{sameDay:\"[ma] LT[-kor]\",nextDay:\"[holnap] LT[-kor]\",nextWeek:function(){return t.call(this,!0)},lastDay:\"[tegnap] LT[-kor]\",lastWeek:function(){return t.call(this,!1)},sameElse:\"L\"},relativeTime:{future:\"%s mÃºlva\",past:\"%s\",s:a,ss:a,m:a,mm:a,h:a,hh:a,d:a,dd:a,M:a,MM:a,y:a,yy:a},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(140);var n=t(1);n.datepickerLocale(\"id\",\"id\",{closeText:\"Tutup\",prevText:\"&#x3C;mundur\",nextText:\"maju&#x3E;\",currentText:\"hari ini\",monthNames:[\"Januari\",\"Februari\",\"Maret\",\"April\",\"Mei\",\"Juni\",\"Juli\",\"Agustus\",\"September\",\"Oktober\",\"Nopember\",\"Desember\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"Mei\",\"Jun\",\"Jul\",\"Agus\",\"Sep\",\"Okt\",\"Nop\",\"Des\"],dayNames:[\"Minggu\",\"Senin\",\"Selasa\",\"Rabu\",\"Kamis\",\"Jumat\",\"Sabtu\"],dayNamesShort:[\"Min\",\"Sen\",\"Sel\",\"Rab\",\"kam\",\"Jum\",\"Sab\"],dayNamesMin:[\"Mg\",\"Sn\",\"Sl\",\"Rb\",\"Km\",\"jm\",\"Sb\"],weekHeader:\"Mg\",dateFormat:\"dd/mm/yy\",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"id\",{buttonText:{month:\"Bulan\",week:\"Minggu\",day:\"Hari\",list:\"Agenda\"},allDayHtml:\"Sehari<br/>penuh\",eventLimitText:\"lebih\",noEventsMessage:\"Tidak ada acara untuk ditampilkan\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"id\",{months:\"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember\".split(\"_\"),monthsShort:\"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des\".split(\"_\"),weekdays:\"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu\".split(\"_\"),weekdaysShort:\"Min_Sen_Sel_Rab_Kam_Jum_Sab\".split(\"_\"),weekdaysMin:\"Mg_Sn_Sl_Rb_Km_Jm_Sb\".split(\"_\"),longDateFormat:{LT:\"HH.mm\",LTS:\"HH.mm.ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY [pukul] HH.mm\",LLLL:\"dddd, D MMMM YYYY [pukul] HH.mm\"},meridiemParse:/pagi|siang|sore|malam/,meridiemHour:function(e,a){return 12===e&&(e=0),\"pagi\"===a?e:\"siang\"===a?e>=11?e:e+12:\"sore\"===a||\"malam\"===a?e+12:void 0},meridiem:function(e,a,t){return e<11?\"pagi\":e<15?\"siang\":e<19?\"sore\":\"malam\"},calendar:{sameDay:\"[Hari ini pukul] LT\",nextDay:\"[Besok pukul] LT\",nextWeek:\"dddd [pukul] LT\",lastDay:\"[Kemarin pukul] LT\",lastWeek:\"dddd [lalu pukul] LT\",sameElse:\"L\"},relativeTime:{future:\"dalam %s\",past:\"%s yang lalu\",s:\"beberapa detik\",ss:\"%d detik\",m:\"semenit\",mm:\"%d menit\",h:\"sejam\",hh:\"%d jam\",d:\"sehari\",dd:\"%d hari\",M:\"sebulan\",MM:\"%d bulan\",y:\"setahun\",yy:\"%d tahun\"},week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(142);var n=t(1);n.datepickerLocale(\"is\",\"is\",{closeText:\"Loka\",prevText:\"&#x3C; Fyrri\",nextText:\"NÃ¦sti &#x3E;\",currentText:\"Ã dag\",monthNames:[\"JanÃºar\",\"FebrÃºar\",\"Mars\",\"AprÃ­l\",\"MaÃ­\",\"JÃºnÃ­\",\"JÃºlÃ­\",\"ÃgÃºst\",\"September\",\"OktÃ³ber\",\"NÃ³vember\",\"Desember\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"MaÃ­\",\"JÃºn\",\"JÃºl\",\"ÃgÃº\",\"Sep\",\"Okt\",\"NÃ³v\",\"Des\"],dayNames:[\"Sunnudagur\",\"MÃ¡nudagur\",\"ÃžriÃ°judagur\",\"MiÃ°vikudagur\",\"Fimmtudagur\",\"FÃ¶studagur\",\"Laugardagur\"],dayNamesShort:[\"Sun\",\"MÃ¡n\",\"Ãžri\",\"MiÃ°\",\"Fim\",\"FÃ¶s\",\"Lau\"],dayNamesMin:[\"Su\",\"MÃ¡\",\"Ãžr\",\"Mi\",\"Fi\",\"FÃ¶\",\"La\"],weekHeader:\"Vika\",dateFormat:\"dd.mm.yy\",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"is\",{buttonText:{month:\"MÃ¡nuÃ°ur\",week:\"Vika\",day:\"Dagur\",list:\"DagskrÃ¡\"},allDayHtml:\"Allan<br/>daginn\",eventLimitText:\"meira\",noEventsMessage:\"Engir viÃ°burÃ°ir til aÃ° sÃ½na\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e){return e%100==11||e%10!=1}function t(e,t,n,r){var s=e+\" \";switch(n){case\"s\":return t||r?\"nokkrar sekÃºndur\":\"nokkrum sekÃºndum\";case\"ss\":return a(e)?s+(t||r?\"sekÃºndur\":\"sekÃºndum\"):s+\"sekÃºnda\";case\"m\":return t?\"mÃ­nÃºta\":\"mÃ­nÃºtu\";case\"mm\":return a(e)?s+(t||r?\"mÃ­nÃºtur\":\"mÃ­nÃºtum\"):t?s+\"mÃ­nÃºta\":s+\"mÃ­nÃºtu\";case\"hh\":return a(e)?s+(t||r?\"klukkustundir\":\"klukkustundum\"):s+\"klukkustund\";case\"d\":return t?\"dagur\":r?\"dag\":\"degi\";case\"dd\":return a(e)?t?s+\"dagar\":s+(r?\"daga\":\"dÃ¶gum\"):t?s+\"dagur\":s+(r?\"dag\":\"degi\");case\"M\":return t?\"mÃ¡nuÃ°ur\":r?\"mÃ¡nuÃ°\":\"mÃ¡nuÃ°i\";case\"MM\":return a(e)?t?s+\"mÃ¡nuÃ°ir\":s+(r?\"mÃ¡nuÃ°i\":\"mÃ¡nuÃ°um\"):t?s+\"mÃ¡nuÃ°ur\":s+(r?\"mÃ¡nuÃ°\":\"mÃ¡nuÃ°i\");case\"y\":return t||r?\"Ã¡r\":\"Ã¡ri\";case\"yy\":return a(e)?s+(t||r?\"Ã¡r\":\"Ã¡rum\"):s+(t||r?\"Ã¡r\":\"Ã¡ri\")}}return e.defineLocale(\"is\",{months:\"janÃºar_febrÃºar_mars_aprÃ­l_maÃ­_jÃºnÃ­_jÃºlÃ­_Ã¡gÃºst_september_oktÃ³ber_nÃ³vember_desember\".split(\"_\"),monthsShort:\"jan_feb_mar_apr_maÃ­_jÃºn_jÃºl_Ã¡gÃº_sep_okt_nÃ³v_des\".split(\"_\"),weekdays:\"sunnudagur_mÃ¡nudagur_Ã¾riÃ°judagur_miÃ°vikudagur_fimmtudagur_fÃ¶studagur_laugardagur\".split(\"_\"),weekdaysShort:\"sun_mÃ¡n_Ã¾ri_miÃ°_fim_fÃ¶s_lau\".split(\"_\"),weekdaysMin:\"Su_MÃ¡_Ãžr_Mi_Fi_FÃ¶_La\".split(\"_\"),longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY [kl.] H:mm\",LLLL:\"dddd, D. MMMM YYYY [kl.] H:mm\"},calendar:{sameDay:\"[Ã­ dag kl.] LT\",nextDay:\"[Ã¡ morgun kl.] LT\",nextWeek:\"dddd [kl.] LT\",lastDay:\"[Ã­ gÃ¦r kl.] LT\",lastWeek:\"[sÃ­Ã°asta] dddd [kl.] LT\",sameElse:\"L\"},relativeTime:{future:\"eftir %s\",past:\"fyrir %s sÃ­Ã°an\",s:t,ss:t,m:t,mm:t,h:\"klukkustund\",hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(144);var n=t(1);n.datepickerLocale(\"it\",\"it\",{closeText:\"Chiudi\",prevText:\"&#x3C;Prec\",nextText:\"Succ&#x3E;\",currentText:\"Oggi\",monthNames:[\"Gennaio\",\"Febbraio\",\"Marzo\",\"Aprile\",\"Maggio\",\"Giugno\",\"Luglio\",\"Agosto\",\"Settembre\",\"Ottobre\",\"Novembre\",\"Dicembre\"],monthNamesShort:[\"Gen\",\"Feb\",\"Mar\",\"Apr\",\"Mag\",\"Giu\",\"Lug\",\"Ago\",\"Set\",\"Ott\",\"Nov\",\"Dic\"],dayNames:[\"Domenica\",\"LunedÃ¬\",\"MartedÃ¬\",\"MercoledÃ¬\",\"GiovedÃ¬\",\"VenerdÃ¬\",\"Sabato\"],dayNamesShort:[\"Dom\",\"Lun\",\"Mar\",\"Mer\",\"Gio\",\"Ven\",\"Sab\"],dayNamesMin:[\"Do\",\"Lu\",\"Ma\",\"Me\",\"Gi\",\"Ve\",\"Sa\"],weekHeader:\"Sm\",dateFormat:\"dd/mm/yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"it\",{buttonText:{month:\"Mese\",week:\"Settimana\",day:\"Giorno\",list:\"Agenda\"},allDayHtml:\"Tutto il<br/>giorno\",eventLimitText:function(e){return\"+altri \"+e},noEventsMessage:\"Non ci sono eventi da visualizzare\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"it\",{months:\"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre\".split(\"_\"),monthsShort:\"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic\".split(\"_\"),weekdays:\"domenica_lunedÃ¬_martedÃ¬_mercoledÃ¬_giovedÃ¬_venerdÃ¬_sabato\".split(\"_\"),weekdaysShort:\"dom_lun_mar_mer_gio_ven_sab\".split(\"_\"),weekdaysMin:\"do_lu_ma_me_gi_ve_sa\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Oggi alle] LT\",nextDay:\"[Domani alle] LT\",nextWeek:\"dddd [alle] LT\",lastDay:\"[Ieri alle] LT\",lastWeek:function(){switch(this.day()){case 0:return\"[la scorsa] dddd [alle] LT\";default:return\"[lo scorso] dddd [alle] LT\"}},sameElse:\"L\"},relativeTime:{future:function(e){return(/^[0-9].+$/.test(e)?\"tra\":\"in\")+\" \"+e},past:\"%s fa\",s:\"alcuni secondi\",ss:\"%d secondi\",m:\"un minuto\",mm:\"%d minuti\",h:\"un'ora\",hh:\"%d ore\",d:\"un giorno\",dd:\"%d giorni\",M:\"un mese\",MM:\"%d mesi\",y:\"un anno\",yy:\"%d anni\"},dayOfMonthOrdinalParse:/\\d{1,2}Âº/,ordinal:\"%dÂº\",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(146);var n=t(1);n.datepickerLocale(\"ja\",\"ja\",{closeText:\"é–‰ã˜ã‚‹\",prevText:\"&#x3C;å‰\",nextText:\"æ¬¡&#x3E;\",currentText:\"ä»Šæ—¥\",monthNames:[\"1æœˆ\",\"2æœˆ\",\"3æœˆ\",\"4æœˆ\",\"5æœˆ\",\"6æœˆ\",\"7æœˆ\",\"8æœˆ\",\"9æœˆ\",\"10æœˆ\",\"11æœˆ\",\"12æœˆ\"],monthNamesShort:[\"1æœˆ\",\"2æœˆ\",\"3æœˆ\",\"4æœˆ\",\"5æœˆ\",\"6æœˆ\",\"7æœˆ\",\"8æœˆ\",\"9æœˆ\",\"10æœˆ\",\"11æœˆ\",\"12æœˆ\"],dayNames:[\"æ—¥æ›œæ—¥\",\"æœˆæ›œæ—¥\",\"ç«æ›œæ—¥\",\"æ°´æ›œæ—¥\",\"æœ¨æ›œæ—¥\",\"é‡‘æ›œæ—¥\",\"åœŸæ›œæ—¥\"],dayNamesShort:[\"æ—¥\",\"æœˆ\",\"ç«\",\"æ°´\",\"æœ¨\",\"é‡‘\",\"åœŸ\"],dayNamesMin:[\"æ—¥\",\"æœˆ\",\"ç«\",\"æ°´\",\"æœ¨\",\"é‡‘\",\"åœŸ\"],weekHeader:\"é€±\",dateFormat:\"yy/mm/dd\",firstDay:0,isRTL:!1,showMonthAfterYear:!0,yearSuffix:\"å¹´\"}),n.locale(\"ja\",{buttonText:{month:\"æœˆ\",week:\"é€±\",day:\"æ—¥\",list:\"äºˆå®šãƒªã‚¹ãƒˆ\"},allDayText:\"çµ‚æ—¥\",eventLimitText:function(e){return\"ä»– \"+e+\" ä»¶\"},noEventsMessage:\"ã‚¤ãƒ™ãƒ³ãƒˆãŒè¡¨ç¤ºã•ã‚Œãªã„ã‚ˆã†ã«\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"ja\",{months:\"1æœˆ_2æœˆ_3æœˆ_4æœˆ_5æœˆ_6æœˆ_7æœˆ_8æœˆ_9æœˆ_10æœˆ_11æœˆ_12æœˆ\".split(\"_\"),monthsShort:\"1æœˆ_2æœˆ_3æœˆ_4æœˆ_5æœˆ_6æœˆ_7æœˆ_8æœˆ_9æœˆ_10æœˆ_11æœˆ_12æœˆ\".split(\"_\"),weekdays:\"æ—¥æ›œæ—¥_æœˆæ›œæ—¥_ç«æ›œæ—¥_æ°´æ›œæ—¥_æœ¨æ›œæ—¥_é‡‘æ›œæ—¥_åœŸæ›œæ—¥\".split(\"_\"),weekdaysShort:\"æ—¥_æœˆ_ç«_æ°´_æœ¨_é‡‘_åœŸ\".split(\"_\"),weekdaysMin:\"æ—¥_æœˆ_ç«_æ°´_æœ¨_é‡‘_åœŸ\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY/MM/DD\",LL:\"YYYYå¹´MæœˆDæ—¥\",LLL:\"YYYYå¹´MæœˆDæ—¥ HH:mm\",LLLL:\"YYYYå¹´MæœˆDæ—¥ HH:mm dddd\",l:\"YYYY/MM/DD\",ll:\"YYYYå¹´MæœˆDæ—¥\",lll:\"YYYYå¹´MæœˆDæ—¥ HH:mm\",llll:\"YYYYå¹´MæœˆDæ—¥ HH:mm dddd\"},meridiemParse:/åˆå‰|åˆå¾Œ/i,isPM:function(e){return\"åˆå¾Œ\"===e},meridiem:function(e,a,t){return e<12?\"åˆå‰\":\"åˆå¾Œ\"},calendar:{sameDay:\"[ä»Šæ—¥] LT\",nextDay:\"[æ˜Žæ—¥] LT\",nextWeek:\"[æ¥é€±]dddd LT\",lastDay:\"[æ˜¨æ—¥] LT\",lastWeek:\"[å‰é€±]dddd LT\",sameElse:\"L\"},dayOfMonthOrdinalParse:/\\d{1,2}æ—¥/,ordinal:function(e,a){switch(a){case\"d\":case\"D\":case\"DDD\":return e+\"æ—¥\";default:return e}},relativeTime:{future:\"%så¾Œ\",past:\"%så‰\",s:\"æ•°ç§’\",ss:\"%dç§’\",m:\"1åˆ†\",mm:\"%dåˆ†\",h:\"1æ™‚é–“\",hh:\"%dæ™‚é–“\",d:\"1æ—¥\",dd:\"%dæ—¥\",M:\"1ãƒ¶æœˆ\",MM:\"%dãƒ¶æœˆ\",y:\"1å¹´\",yy:\"%då¹´\"}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(148);var n=t(1);n.datepickerLocale(\"ka\",\"ka\",{closeText:\"áƒ“áƒáƒ®áƒ£áƒ áƒ•áƒ\",prevText:\"áƒ¬áƒ˜áƒœáƒ\",nextText:\"áƒ¨áƒ”áƒ›áƒ“áƒ”áƒ’áƒ˜\",currentText:\"áƒ“áƒ¦áƒ”áƒ¡\",monthNames:[\"áƒ˜áƒáƒœáƒ•áƒáƒ áƒ˜\",\"áƒ—áƒ”áƒ‘áƒ”áƒ áƒ•áƒáƒšáƒ˜\",\"áƒ›áƒáƒ áƒ¢áƒ˜\",\"áƒáƒžáƒ áƒ˜áƒšáƒ˜\",\"áƒ›áƒáƒ˜áƒ¡áƒ˜\",\"áƒ˜áƒ•áƒœáƒ˜áƒ¡áƒ˜\",\"áƒ˜áƒ•áƒšáƒ˜áƒ¡áƒ˜\",\"áƒáƒ’áƒ•áƒ˜áƒ¡áƒ¢áƒ\",\"áƒ¡áƒ”áƒ¥áƒ¢áƒ”áƒ›áƒ‘áƒ”áƒ áƒ˜\",\"áƒáƒ¥áƒ¢áƒáƒ›áƒ‘áƒ”áƒ áƒ˜\",\"áƒœáƒáƒ”áƒ›áƒ‘áƒ”áƒ áƒ˜\",\"áƒ“áƒ”áƒ™áƒ”áƒ›áƒ‘áƒ”áƒ áƒ˜\"],monthNamesShort:[\"áƒ˜áƒáƒœ\",\"áƒ—áƒ”áƒ‘\",\"áƒ›áƒáƒ \",\"áƒáƒžáƒ \",\"áƒ›áƒáƒ˜\",\"áƒ˜áƒ•áƒœ\",\"áƒ˜áƒ•áƒš\",\"áƒáƒ’áƒ•\",\"áƒ¡áƒ”áƒ¥\",\"áƒáƒ¥áƒ¢\",\"áƒœáƒáƒ”\",\"áƒ“áƒ”áƒ™\"],dayNames:[\"áƒ™áƒ•áƒ˜áƒ áƒ\",\"áƒáƒ áƒ¨áƒáƒ‘áƒáƒ—áƒ˜\",\"áƒ¡áƒáƒ›áƒ¨áƒáƒ‘áƒáƒ—áƒ˜\",\"áƒáƒ—áƒ®áƒ¨áƒáƒ‘áƒáƒ—áƒ˜\",\"áƒ®áƒ£áƒ—áƒ¨áƒáƒ‘áƒáƒ—áƒ˜\",\"áƒžáƒáƒ áƒáƒ¡áƒ™áƒ”áƒ•áƒ˜\",\"áƒ¨áƒáƒ‘áƒáƒ—áƒ˜\"],dayNamesShort:[\"áƒ™áƒ•áƒ˜\",\"áƒáƒ áƒ¨\",\"áƒ¡áƒáƒ›\",\"áƒáƒ—áƒ®\",\"áƒ®áƒ£áƒ—\",\"áƒžáƒáƒ \",\"áƒ¨áƒáƒ‘\"],dayNamesMin:[\"áƒ™áƒ•\",\"áƒáƒ \",\"áƒ¡áƒ\",\"áƒáƒ—\",\"áƒ®áƒ£\",\"áƒžáƒ\",\"áƒ¨áƒ\"],weekHeader:\"áƒ™áƒ•\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"ka\",{buttonText:{month:\"áƒ—áƒ•áƒ”\",week:\"áƒ™áƒ•áƒ˜áƒ áƒ\",day:\"áƒ“áƒ¦áƒ”\",list:\"áƒ“áƒ¦áƒ˜áƒ¡ áƒ¬áƒ”áƒ¡áƒ áƒ˜áƒ’áƒ˜\"},allDayText:\"áƒ›áƒ—áƒ”áƒšáƒ˜ áƒ“áƒ¦áƒ”\",eventLimitText:function(e){return\"+ áƒ™áƒ˜áƒ“áƒ”áƒ• \"+e},noEventsMessage:\"áƒ¦áƒáƒœáƒ˜áƒ¡áƒ«áƒ˜áƒ”áƒ‘áƒ”áƒ‘áƒ˜ áƒáƒ  áƒáƒ áƒ˜áƒ¡\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"ka\",{months:{standalone:\"áƒ˜áƒáƒœáƒ•áƒáƒ áƒ˜_áƒ—áƒ”áƒ‘áƒ”áƒ áƒ•áƒáƒšáƒ˜_áƒ›áƒáƒ áƒ¢áƒ˜_áƒáƒžáƒ áƒ˜áƒšáƒ˜_áƒ›áƒáƒ˜áƒ¡áƒ˜_áƒ˜áƒ•áƒœáƒ˜áƒ¡áƒ˜_áƒ˜áƒ•áƒšáƒ˜áƒ¡áƒ˜_áƒáƒ’áƒ•áƒ˜áƒ¡áƒ¢áƒ_áƒ¡áƒ”áƒ¥áƒ¢áƒ”áƒ›áƒ‘áƒ”áƒ áƒ˜_áƒáƒ¥áƒ¢áƒáƒ›áƒ‘áƒ”áƒ áƒ˜_áƒœáƒáƒ”áƒ›áƒ‘áƒ”áƒ áƒ˜_áƒ“áƒ”áƒ™áƒ”áƒ›áƒ‘áƒ”áƒ áƒ˜\".split(\"_\"),format:\"áƒ˜áƒáƒœáƒ•áƒáƒ áƒ¡_áƒ—áƒ”áƒ‘áƒ”áƒ áƒ•áƒáƒšáƒ¡_áƒ›áƒáƒ áƒ¢áƒ¡_áƒáƒžáƒ áƒ˜áƒšáƒ˜áƒ¡_áƒ›áƒáƒ˜áƒ¡áƒ¡_áƒ˜áƒ•áƒœáƒ˜áƒ¡áƒ¡_áƒ˜áƒ•áƒšáƒ˜áƒ¡áƒ¡_áƒáƒ’áƒ•áƒ˜áƒ¡áƒ¢áƒ¡_áƒ¡áƒ”áƒ¥áƒ¢áƒ”áƒ›áƒ‘áƒ”áƒ áƒ¡_áƒáƒ¥áƒ¢áƒáƒ›áƒ‘áƒ”áƒ áƒ¡_áƒœáƒáƒ”áƒ›áƒ‘áƒ”áƒ áƒ¡_áƒ“áƒ”áƒ™áƒ”áƒ›áƒ‘áƒ”áƒ áƒ¡\".split(\"_\")},monthsShort:\"áƒ˜áƒáƒœ_áƒ—áƒ”áƒ‘_áƒ›áƒáƒ _áƒáƒžáƒ _áƒ›áƒáƒ˜_áƒ˜áƒ•áƒœ_áƒ˜áƒ•áƒš_áƒáƒ’áƒ•_áƒ¡áƒ”áƒ¥_áƒáƒ¥áƒ¢_áƒœáƒáƒ”_áƒ“áƒ”áƒ™\".split(\"_\"),weekdays:{standalone:\"áƒ™áƒ•áƒ˜áƒ áƒ_áƒáƒ áƒ¨áƒáƒ‘áƒáƒ—áƒ˜_áƒ¡áƒáƒ›áƒ¨áƒáƒ‘áƒáƒ—áƒ˜_áƒáƒ—áƒ®áƒ¨áƒáƒ‘áƒáƒ—áƒ˜_áƒ®áƒ£áƒ—áƒ¨áƒáƒ‘áƒáƒ—áƒ˜_áƒžáƒáƒ áƒáƒ¡áƒ™áƒ”áƒ•áƒ˜_áƒ¨áƒáƒ‘áƒáƒ—áƒ˜\".split(\"_\"),format:\"áƒ™áƒ•áƒ˜áƒ áƒáƒ¡_áƒáƒ áƒ¨áƒáƒ‘áƒáƒ—áƒ¡_áƒ¡áƒáƒ›áƒ¨áƒáƒ‘áƒáƒ—áƒ¡_áƒáƒ—áƒ®áƒ¨áƒáƒ‘áƒáƒ—áƒ¡_áƒ®áƒ£áƒ—áƒ¨áƒáƒ‘áƒáƒ—áƒ¡_áƒžáƒáƒ áƒáƒ¡áƒ™áƒ”áƒ•áƒ¡_áƒ¨áƒáƒ‘áƒáƒ—áƒ¡\".split(\"_\"),isFormat:/(áƒ¬áƒ˜áƒœáƒ|áƒ¨áƒ”áƒ›áƒ“áƒ”áƒ’)/},weekdaysShort:\"áƒ™áƒ•áƒ˜_áƒáƒ áƒ¨_áƒ¡áƒáƒ›_áƒáƒ—áƒ®_áƒ®áƒ£áƒ—_áƒžáƒáƒ _áƒ¨áƒáƒ‘\".split(\"_\"),weekdaysMin:\"áƒ™áƒ•_áƒáƒ _áƒ¡áƒ_áƒáƒ—_áƒ®áƒ£_áƒžáƒ_áƒ¨áƒ\".split(\"_\"),longDateFormat:{LT:\"h:mm A\",LTS:\"h:mm:ss A\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY h:mm A\",LLLL:\"dddd, D MMMM YYYY h:mm A\"},calendar:{sameDay:\"[áƒ“áƒ¦áƒ”áƒ¡] LT[-áƒ–áƒ”]\",nextDay:\"[áƒ®áƒ•áƒáƒš] LT[-áƒ–áƒ”]\",lastDay:\"[áƒ’áƒ£áƒ¨áƒ˜áƒœ] LT[-áƒ–áƒ”]\",nextWeek:\"[áƒ¨áƒ”áƒ›áƒ“áƒ”áƒ’] dddd LT[-áƒ–áƒ”]\",lastWeek:\"[áƒ¬áƒ˜áƒœáƒ] dddd LT-áƒ–áƒ”\",sameElse:\"L\"},relativeTime:{future:function(e){return/(áƒ¬áƒáƒ›áƒ˜|áƒ¬áƒ£áƒ—áƒ˜|áƒ¡áƒáƒáƒ—áƒ˜|áƒ¬áƒ”áƒšáƒ˜)/.test(e)?e.replace(/áƒ˜$/,\"áƒ¨áƒ˜\"):e+\"áƒ¨áƒ˜\"},past:function(e){return/(áƒ¬áƒáƒ›áƒ˜|áƒ¬áƒ£áƒ—áƒ˜|áƒ¡áƒáƒáƒ—áƒ˜|áƒ“áƒ¦áƒ”|áƒ—áƒ•áƒ”)/.test(e)?e.replace(/(áƒ˜|áƒ”)$/,\"áƒ˜áƒ¡ áƒ£áƒ™áƒáƒœ\"):/áƒ¬áƒ”áƒšáƒ˜/.test(e)?e.replace(/áƒ¬áƒ”áƒšáƒ˜$/,\"áƒ¬áƒšáƒ˜áƒ¡ áƒ£áƒ™áƒáƒœ\"):void 0},s:\"áƒ áƒáƒ›áƒ“áƒ”áƒœáƒ˜áƒ›áƒ” áƒ¬áƒáƒ›áƒ˜\",ss:\"%d áƒ¬áƒáƒ›áƒ˜\",m:\"áƒ¬áƒ£áƒ—áƒ˜\",mm:\"%d áƒ¬áƒ£áƒ—áƒ˜\",h:\"áƒ¡áƒáƒáƒ—áƒ˜\",hh:\"%d áƒ¡áƒáƒáƒ—áƒ˜\",d:\"áƒ“áƒ¦áƒ”\",dd:\"%d áƒ“áƒ¦áƒ”\",M:\"áƒ—áƒ•áƒ”\",MM:\"%d áƒ—áƒ•áƒ”\",y:\"áƒ¬áƒ”áƒšáƒ˜\",yy:\"%d áƒ¬áƒ”áƒšáƒ˜\"},dayOfMonthOrdinalParse:/0|1-áƒšáƒ˜|áƒ›áƒ”-\\d{1,2}|\\d{1,2}-áƒ”/,ordinal:function(e){return 0===e?e:1===e?e+\"-áƒšáƒ˜\":e<20||e<=100&&e%20==0||e%100==0?\"áƒ›áƒ”-\"+e:e+\"-áƒ”\"},week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(150);var n=t(1);n.datepickerLocale(\"kk\",\"kk\",{closeText:\"Ð–Ð°Ð±Ñƒ\",prevText:\"&#x3C;ÐÐ»Ð´Ñ‹Ò£Ò“Ñ‹\",nextText:\"ÐšÐµÐ»ÐµÑÑ–&#x3E;\",currentText:\"Ð‘Ò¯Ð³Ñ–Ð½\",monthNames:[\"ÒšÐ°Ò£Ñ‚Ð°Ñ€\",\"ÐÒ›Ð¿Ð°Ð½\",\"ÐÐ°ÑƒÑ€Ñ‹Ð·\",\"Ð¡Ó™ÑƒÑ–Ñ€\",\"ÐœÐ°Ð¼Ñ‹Ñ€\",\"ÐœÐ°ÑƒÑÑ‹Ð¼\",\"Ð¨Ñ–Ð»Ð´Ðµ\",\"Ð¢Ð°Ð¼Ñ‹Ð·\",\"ÒšÑ‹Ñ€ÐºÒ¯Ð¹ÐµÐº\",\"ÒšÐ°Ð·Ð°Ð½\",\"ÒšÐ°Ñ€Ð°ÑˆÐ°\",\"Ð–ÐµÐ»Ñ‚Ð¾Ò›ÑÐ°Ð½\"],\nmonthNamesShort:[\"ÒšÐ°Ò£\",\"ÐÒ›Ð¿\",\"ÐÐ°Ñƒ\",\"Ð¡Ó™Ñƒ\",\"ÐœÐ°Ð¼\",\"ÐœÐ°Ñƒ\",\"Ð¨Ñ–Ð»\",\"Ð¢Ð°Ð¼\",\"ÒšÑ‹Ñ€\",\"ÒšÐ°Ð·\",\"ÒšÐ°Ñ€\",\"Ð–ÐµÐ»\"],dayNames:[\"Ð–ÐµÐºÑÐµÐ½Ð±Ñ–\",\"Ð”Ò¯Ð¹ÑÐµÐ½Ð±Ñ–\",\"Ð¡ÐµÐ¹ÑÐµÐ½Ð±Ñ–\",\"Ð¡Ó™Ñ€ÑÐµÐ½Ð±Ñ–\",\"Ð‘ÐµÐ¹ÑÐµÐ½Ð±Ñ–\",\"Ð–Ò±Ð¼Ð°\",\"Ð¡ÐµÐ½Ð±Ñ–\"],dayNamesShort:[\"Ð¶ÐºÑ\",\"Ð´ÑÐ½\",\"ÑÑÐ½\",\"ÑÑ€Ñ\",\"Ð±ÑÐ½\",\"Ð¶Ð¼Ð°\",\"ÑÐ½Ð±\"],dayNamesMin:[\"Ð–Ðº\",\"Ð”Ñ\",\"Ð¡Ñ\",\"Ð¡Ñ€\",\"Ð‘Ñ\",\"Ð–Ð¼\",\"Ð¡Ð½\"],weekHeader:\"ÐÐµ\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"kk\",{buttonText:{month:\"ÐÐ¹\",week:\"ÐÐ¿Ñ‚Ð°\",day:\"ÐšÒ¯Ð½\",list:\"ÐšÒ¯Ð½ Ñ‚Ó™Ñ€Ñ‚Ñ–Ð±Ñ–\"},allDayText:\"ÐšÒ¯Ð½Ñ– Ð±Ð¾Ð¹Ñ‹\",eventLimitText:function(e){return\"+ Ñ‚Ð°Ò“Ñ‹ \"+e},noEventsMessage:\"ÐšÓ©Ñ€ÑÐµÑ‚Ñƒ Ò¯ÑˆÑ–Ð½ Ð¾Ò›Ð¸Ò“Ð°Ð»Ð°Ñ€ Ð¶Ð¾Ò›\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){var a={0:\"-ÑˆÑ–\",1:\"-ÑˆÑ–\",2:\"-ÑˆÑ–\",3:\"-ÑˆÑ–\",4:\"-ÑˆÑ–\",5:\"-ÑˆÑ–\",6:\"-ÑˆÑ‹\",7:\"-ÑˆÑ–\",8:\"-ÑˆÑ–\",9:\"-ÑˆÑ‹\",10:\"-ÑˆÑ‹\",20:\"-ÑˆÑ‹\",30:\"-ÑˆÑ‹\",40:\"-ÑˆÑ‹\",50:\"-ÑˆÑ–\",60:\"-ÑˆÑ‹\",70:\"-ÑˆÑ–\",80:\"-ÑˆÑ–\",90:\"-ÑˆÑ‹\",100:\"-ÑˆÑ–\"};return e.defineLocale(\"kk\",{months:\"Ò›Ð°Ò£Ñ‚Ð°Ñ€_Ð°Ò›Ð¿Ð°Ð½_Ð½Ð°ÑƒÑ€Ñ‹Ð·_ÑÓ™ÑƒÑ–Ñ€_Ð¼Ð°Ð¼Ñ‹Ñ€_Ð¼Ð°ÑƒÑÑ‹Ð¼_ÑˆÑ–Ð»Ð´Ðµ_Ñ‚Ð°Ð¼Ñ‹Ð·_Ò›Ñ‹Ñ€ÐºÒ¯Ð¹ÐµÐº_Ò›Ð°Ð·Ð°Ð½_Ò›Ð°Ñ€Ð°ÑˆÐ°_Ð¶ÐµÐ»Ñ‚Ð¾Ò›ÑÐ°Ð½\".split(\"_\"),monthsShort:\"Ò›Ð°Ò£_Ð°Ò›Ð¿_Ð½Ð°Ñƒ_ÑÓ™Ñƒ_Ð¼Ð°Ð¼_Ð¼Ð°Ñƒ_ÑˆÑ–Ð»_Ñ‚Ð°Ð¼_Ò›Ñ‹Ñ€_Ò›Ð°Ð·_Ò›Ð°Ñ€_Ð¶ÐµÐ»\".split(\"_\"),weekdays:\"Ð¶ÐµÐºÑÐµÐ½Ð±Ñ–_Ð´Ò¯Ð¹ÑÐµÐ½Ð±Ñ–_ÑÐµÐ¹ÑÐµÐ½Ð±Ñ–_ÑÓ™Ñ€ÑÐµÐ½Ð±Ñ–_Ð±ÐµÐ¹ÑÐµÐ½Ð±Ñ–_Ð¶Ò±Ð¼Ð°_ÑÐµÐ½Ð±Ñ–\".split(\"_\"),weekdaysShort:\"Ð¶ÐµÐº_Ð´Ò¯Ð¹_ÑÐµÐ¹_ÑÓ™Ñ€_Ð±ÐµÐ¹_Ð¶Ò±Ð¼_ÑÐµÐ½\".split(\"_\"),weekdaysMin:\"Ð¶Ðº_Ð´Ð¹_ÑÐ¹_ÑÑ€_Ð±Ð¹_Ð¶Ð¼_ÑÐ½\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Ð‘Ò¯Ð³Ñ–Ð½ ÑÐ°Ò“Ð°Ñ‚] LT\",nextDay:\"[Ð•Ñ€Ñ‚ÐµÒ£ ÑÐ°Ò“Ð°Ñ‚] LT\",nextWeek:\"dddd [ÑÐ°Ò“Ð°Ñ‚] LT\",lastDay:\"[ÐšÐµÑˆÐµ ÑÐ°Ò“Ð°Ñ‚] LT\",lastWeek:\"[Ó¨Ñ‚ÐºÐµÐ½ Ð°Ð¿Ñ‚Ð°Ð½Ñ‹Ò£] dddd [ÑÐ°Ò“Ð°Ñ‚] LT\",sameElse:\"L\"},relativeTime:{future:\"%s Ñ–ÑˆÑ–Ð½Ð´Ðµ\",past:\"%s Ð±Ò±Ñ€Ñ‹Ð½\",s:\"Ð±Ñ–Ñ€Ð½ÐµÑˆÐµ ÑÐµÐºÑƒÐ½Ð´\",ss:\"%d ÑÐµÐºÑƒÐ½Ð´\",m:\"Ð±Ñ–Ñ€ Ð¼Ð¸Ð½ÑƒÑ‚\",mm:\"%d Ð¼Ð¸Ð½ÑƒÑ‚\",h:\"Ð±Ñ–Ñ€ ÑÐ°Ò“Ð°Ñ‚\",hh:\"%d ÑÐ°Ò“Ð°Ñ‚\",d:\"Ð±Ñ–Ñ€ ÐºÒ¯Ð½\",dd:\"%d ÐºÒ¯Ð½\",M:\"Ð±Ñ–Ñ€ Ð°Ð¹\",MM:\"%d Ð°Ð¹\",y:\"Ð±Ñ–Ñ€ Ð¶Ñ‹Ð»\",yy:\"%d Ð¶Ñ‹Ð»\"},dayOfMonthOrdinalParse:/\\d{1,2}-(ÑˆÑ–|ÑˆÑ‹)/,ordinal:function(e){var t=e%10,n=e>=100?100:null;return e+(a[e]||a[t]||a[n])},week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(152);var n=t(1);n.datepickerLocale(\"ko\",\"ko\",{closeText:\"ë‹«ê¸°\",prevText:\"ì´ì „ë‹¬\",nextText:\"ë‹¤ìŒë‹¬\",currentText:\"ì˜¤ëŠ˜\",monthNames:[\"1ì›”\",\"2ì›”\",\"3ì›”\",\"4ì›”\",\"5ì›”\",\"6ì›”\",\"7ì›”\",\"8ì›”\",\"9ì›”\",\"10ì›”\",\"11ì›”\",\"12ì›”\"],monthNamesShort:[\"1ì›”\",\"2ì›”\",\"3ì›”\",\"4ì›”\",\"5ì›”\",\"6ì›”\",\"7ì›”\",\"8ì›”\",\"9ì›”\",\"10ì›”\",\"11ì›”\",\"12ì›”\"],dayNames:[\"ì¼ìš”ì¼\",\"ì›”ìš”ì¼\",\"í™”ìš”ì¼\",\"ìˆ˜ìš”ì¼\",\"ëª©ìš”ì¼\",\"ê¸ˆìš”ì¼\",\"í† ìš”ì¼\"],dayNamesShort:[\"ì¼\",\"ì›”\",\"í™”\",\"ìˆ˜\",\"ëª©\",\"ê¸ˆ\",\"í† \"],dayNamesMin:[\"ì¼\",\"ì›”\",\"í™”\",\"ìˆ˜\",\"ëª©\",\"ê¸ˆ\",\"í† \"],weekHeader:\"ì£¼\",dateFormat:\"yy. m. d.\",firstDay:0,isRTL:!1,showMonthAfterYear:!0,yearSuffix:\"ë…„\"}),n.locale(\"ko\",{buttonText:{month:\"ì›”\",week:\"ì£¼\",day:\"ì¼\",list:\"ì¼ì •ëª©ë¡\"},allDayText:\"ì¢…ì¼\",eventLimitText:\"ê°œ\",noEventsMessage:\"ì¼ì •ì´ ì—†ìŠµë‹ˆë‹¤\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"ko\",{months:\"1ì›”_2ì›”_3ì›”_4ì›”_5ì›”_6ì›”_7ì›”_8ì›”_9ì›”_10ì›”_11ì›”_12ì›”\".split(\"_\"),monthsShort:\"1ì›”_2ì›”_3ì›”_4ì›”_5ì›”_6ì›”_7ì›”_8ì›”_9ì›”_10ì›”_11ì›”_12ì›”\".split(\"_\"),weekdays:\"ì¼ìš”ì¼_ì›”ìš”ì¼_í™”ìš”ì¼_ìˆ˜ìš”ì¼_ëª©ìš”ì¼_ê¸ˆìš”ì¼_í† ìš”ì¼\".split(\"_\"),weekdaysShort:\"ì¼_ì›”_í™”_ìˆ˜_ëª©_ê¸ˆ_í† \".split(\"_\"),weekdaysMin:\"ì¼_ì›”_í™”_ìˆ˜_ëª©_ê¸ˆ_í† \".split(\"_\"),longDateFormat:{LT:\"A h:mm\",LTS:\"A h:mm:ss\",L:\"YYYY.MM.DD.\",LL:\"YYYYë…„ MMMM Dì¼\",LLL:\"YYYYë…„ MMMM Dì¼ A h:mm\",LLLL:\"YYYYë…„ MMMM Dì¼ dddd A h:mm\",l:\"YYYY.MM.DD.\",ll:\"YYYYë…„ MMMM Dì¼\",lll:\"YYYYë…„ MMMM Dì¼ A h:mm\",llll:\"YYYYë…„ MMMM Dì¼ dddd A h:mm\"},calendar:{sameDay:\"ì˜¤ëŠ˜ LT\",nextDay:\"ë‚´ì¼ LT\",nextWeek:\"dddd LT\",lastDay:\"ì–´ì œ LT\",lastWeek:\"ì§€ë‚œì£¼ dddd LT\",sameElse:\"L\"},relativeTime:{future:\"%s í›„\",past:\"%s ì „\",s:\"ëª‡ ì´ˆ\",ss:\"%dì´ˆ\",m:\"1ë¶„\",mm:\"%dë¶„\",h:\"í•œ ì‹œê°„\",hh:\"%dì‹œê°„\",d:\"í•˜ë£¨\",dd:\"%dì¼\",M:\"í•œ ë‹¬\",MM:\"%dë‹¬\",y:\"ì¼ ë…„\",yy:\"%dë…„\"},dayOfMonthOrdinalParse:/\\d{1,2}(ì¼|ì›”|ì£¼)/,ordinal:function(e,a){switch(a){case\"d\":case\"D\":case\"DDD\":return e+\"ì¼\";case\"M\":return e+\"ì›”\";case\"w\":case\"W\":return e+\"ì£¼\";default:return e}},meridiemParse:/ì˜¤ì „|ì˜¤í›„/,isPM:function(e){return\"ì˜¤í›„\"===e},meridiem:function(e,a,t){return e<12?\"ì˜¤ì „\":\"ì˜¤í›„\"}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(154);var n=t(1);n.datepickerLocale(\"lb\",\"lb\",{closeText:\"FÃ¤erdeg\",prevText:\"ZrÃ©ck\",nextText:\"Weider\",currentText:\"Haut\",monthNames:[\"Januar\",\"Februar\",\"MÃ¤erz\",\"AbrÃ«ll\",\"Mee\",\"Juni\",\"Juli\",\"August\",\"September\",\"Oktober\",\"November\",\"Dezember\"],monthNamesShort:[\"Jan\",\"Feb\",\"MÃ¤e\",\"Abr\",\"Mee\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Okt\",\"Nov\",\"Dez\"],dayNames:[\"Sonndeg\",\"MÃ©indeg\",\"DÃ«nschdeg\",\"MÃ«ttwoch\",\"Donneschdeg\",\"Freideg\",\"Samschdeg\"],dayNamesShort:[\"Son\",\"MÃ©i\",\"DÃ«n\",\"MÃ«t\",\"Don\",\"Fre\",\"Sam\"],dayNamesMin:[\"So\",\"MÃ©\",\"DÃ«\",\"MÃ«\",\"Do\",\"Fr\",\"Sa\"],weekHeader:\"W\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"lb\",{buttonText:{month:\"Mount\",week:\"Woch\",day:\"Dag\",list:\"Terminiwwersiicht\"},allDayText:\"Ganzen Dag\",eventLimitText:\"mÃ©i\",noEventsMessage:\"Nee Evenementer ze affichÃ©ieren\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a,t,n){var r={m:[\"eng Minutt\",\"enger Minutt\"],h:[\"eng Stonn\",\"enger Stonn\"],d:[\"een Dag\",\"engem Dag\"],M:[\"ee Mount\",\"engem Mount\"],y:[\"ee Joer\",\"engem Joer\"]};return a?r[t][0]:r[t][1]}function t(e){return r(e.substr(0,e.indexOf(\" \")))?\"a \"+e:\"an \"+e}function n(e){return r(e.substr(0,e.indexOf(\" \")))?\"viru \"+e:\"virun \"+e}function r(e){if(e=parseInt(e,10),isNaN(e))return!1;if(e<0)return!0;if(e<10)return 4<=e&&e<=7;if(e<100){var a=e%10,t=e/10;return r(0===a?t:a)}if(e<1e4){for(;e>=10;)e/=10;return r(e)}return e/=1e3,r(e)}return e.defineLocale(\"lb\",{months:\"Januar_Februar_MÃ¤erz_AbrÃ«ll_Mee_Juni_Juli_August_September_Oktober_November_Dezember\".split(\"_\"),monthsShort:\"Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.\".split(\"_\"),monthsParseExact:!0,weekdays:\"Sonndeg_MÃ©indeg_DÃ«nschdeg_MÃ«ttwoch_Donneschdeg_Freideg_Samschdeg\".split(\"_\"),weekdaysShort:\"So._MÃ©._DÃ«._MÃ«._Do._Fr._Sa.\".split(\"_\"),weekdaysMin:\"So_MÃ©_DÃ«_MÃ«_Do_Fr_Sa\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm [Auer]\",LTS:\"H:mm:ss [Auer]\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY H:mm [Auer]\",LLLL:\"dddd, D. MMMM YYYY H:mm [Auer]\"},calendar:{sameDay:\"[Haut um] LT\",sameElse:\"L\",nextDay:\"[Muer um] LT\",nextWeek:\"dddd [um] LT\",lastDay:\"[GÃ«schter um] LT\",lastWeek:function(){switch(this.day()){case 2:case 4:return\"[Leschten] dddd [um] LT\";default:return\"[Leschte] dddd [um] LT\"}}},relativeTime:{future:t,past:n,s:\"e puer Sekonnen\",ss:\"%d Sekonnen\",m:a,mm:\"%d Minutten\",h:a,hh:\"%d Stonnen\",d:a,dd:\"%d Deeg\",M:a,MM:\"%d MÃ©int\",y:a,yy:\"%d Joer\"},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(156);var n=t(1);n.datepickerLocale(\"lt\",\"lt\",{closeText:\"UÅ¾daryti\",prevText:\"&#x3C;Atgal\",nextText:\"Pirmyn&#x3E;\",currentText:\"Å iandien\",monthNames:[\"Sausis\",\"Vasaris\",\"Kovas\",\"Balandis\",\"GeguÅ¾Ä—\",\"BirÅ¾elis\",\"Liepa\",\"RugpjÅ«tis\",\"RugsÄ—jis\",\"Spalis\",\"Lapkritis\",\"Gruodis\"],monthNamesShort:[\"Sau\",\"Vas\",\"Kov\",\"Bal\",\"Geg\",\"Bir\",\"Lie\",\"Rugp\",\"Rugs\",\"Spa\",\"Lap\",\"Gru\"],dayNames:[\"sekmadienis\",\"pirmadienis\",\"antradienis\",\"treÄiadienis\",\"ketvirtadienis\",\"penktadienis\",\"Å¡eÅ¡tadienis\"],dayNamesShort:[\"sek\",\"pir\",\"ant\",\"tre\",\"ket\",\"pen\",\"Å¡eÅ¡\"],dayNamesMin:[\"Se\",\"Pr\",\"An\",\"Tr\",\"Ke\",\"Pe\",\"Å e\"],weekHeader:\"SAV\",dateFormat:\"yy-mm-dd\",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:\"\"}),n.locale(\"lt\",{buttonText:{month:\"MÄ—nuo\",week:\"SavaitÄ—\",day:\"Diena\",list:\"DarbotvarkÄ—\"},allDayText:\"VisÄ… dienÄ…\",eventLimitText:\"daugiau\",noEventsMessage:\"NÄ—ra Ä¯vykiÅ³ rodyti\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a,t,n){return a?\"kelios sekundÄ—s\":n?\"keliÅ³ sekundÅ¾iÅ³\":\"kelias sekundes\"}function t(e,a,t,n){return a?r(t)[0]:n?r(t)[1]:r(t)[2]}function n(e){return e%10==0||e>10&&e<20}function r(e){return d[e].split(\"_\")}function s(e,a,s,d){var i=e+\" \";return 1===e?i+t(e,a,s[0],d):a?i+(n(e)?r(s)[1]:r(s)[0]):d?i+r(s)[1]:i+(n(e)?r(s)[1]:r(s)[2])}var d={ss:\"sekundÄ—_sekundÅ¾iÅ³_sekundes\",m:\"minutÄ—_minutÄ—s_minutÄ™\",mm:\"minutÄ—s_minuÄiÅ³_minutes\",h:\"valanda_valandos_valandÄ…\",hh:\"valandos_valandÅ³_valandas\",d:\"diena_dienos_dienÄ…\",dd:\"dienos_dienÅ³_dienas\",M:\"mÄ—nuo_mÄ—nesio_mÄ—nesÄ¯\",MM:\"mÄ—nesiai_mÄ—nesiÅ³_mÄ—nesius\",y:\"metai_metÅ³_metus\",yy:\"metai_metÅ³_metus\"};return e.defineLocale(\"lt\",{months:{format:\"sausio_vasario_kovo_balandÅ¾io_geguÅ¾Ä—s_birÅ¾elio_liepos_rugpjÅ«Äio_rugsÄ—jo_spalio_lapkriÄio_gruodÅ¾io\".split(\"_\"),standalone:\"sausis_vasaris_kovas_balandis_geguÅ¾Ä—_birÅ¾elis_liepa_rugpjÅ«tis_rugsÄ—jis_spalis_lapkritis_gruodis\".split(\"_\"),isFormat:/D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?|MMMM?(\\[[^\\[\\]]*\\]|\\s)+D[oD]?/},monthsShort:\"sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd\".split(\"_\"),weekdays:{format:\"sekmadienÄ¯_pirmadienÄ¯_antradienÄ¯_treÄiadienÄ¯_ketvirtadienÄ¯_penktadienÄ¯_Å¡eÅ¡tadienÄ¯\".split(\"_\"),standalone:\"sekmadienis_pirmadienis_antradienis_treÄiadienis_ketvirtadienis_penktadienis_Å¡eÅ¡tadienis\".split(\"_\"),isFormat:/dddd HH:mm/},weekdaysShort:\"Sek_Pir_Ant_Tre_Ket_Pen_Å eÅ¡\".split(\"_\"),weekdaysMin:\"S_P_A_T_K_Pn_Å \".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY-MM-DD\",LL:\"YYYY [m.] MMMM D [d.]\",LLL:\"YYYY [m.] MMMM D [d.], HH:mm [val.]\",LLLL:\"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]\",l:\"YYYY-MM-DD\",ll:\"YYYY [m.] MMMM D [d.]\",lll:\"YYYY [m.] MMMM D [d.], HH:mm [val.]\",llll:\"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]\"},calendar:{sameDay:\"[Å iandien] LT\",nextDay:\"[Rytoj] LT\",nextWeek:\"dddd LT\",lastDay:\"[Vakar] LT\",lastWeek:\"[PraÄ—jusÄ¯] dddd LT\",sameElse:\"L\"},relativeTime:{future:\"po %s\",past:\"prieÅ¡ %s\",s:a,ss:s,m:t,mm:s,h:t,hh:s,d:t,dd:s,M:t,MM:s,y:t,yy:s},dayOfMonthOrdinalParse:/\\d{1,2}-oji/,ordinal:function(e){return e+\"-oji\"},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(158);var n=t(1);n.datepickerLocale(\"lv\",\"lv\",{closeText:\"AizvÄ“rt\",prevText:\"Iepr.\",nextText:\"NÄk.\",currentText:\"Å odien\",monthNames:[\"JanvÄris\",\"FebruÄris\",\"Marts\",\"AprÄ«lis\",\"Maijs\",\"JÅ«nijs\",\"JÅ«lijs\",\"Augusts\",\"Septembris\",\"Oktobris\",\"Novembris\",\"Decembris\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"Mai\",\"JÅ«n\",\"JÅ«l\",\"Aug\",\"Sep\",\"Okt\",\"Nov\",\"Dec\"],dayNames:[\"svÄ“tdiena\",\"pirmdiena\",\"otrdiena\",\"treÅ¡diena\",\"ceturtdiena\",\"piektdiena\",\"sestdiena\"],dayNamesShort:[\"svt\",\"prm\",\"otr\",\"tre\",\"ctr\",\"pkt\",\"sst\"],dayNamesMin:[\"Sv\",\"Pr\",\"Ot\",\"Tr\",\"Ct\",\"Pk\",\"Ss\"],weekHeader:\"Ned.\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"lv\",{buttonText:{month:\"MÄ“nesis\",week:\"NedÄ“Ä¼a\",day:\"Diena\",list:\"Dienas kÄrtÄ«ba\"},allDayText:\"Visu dienu\",eventLimitText:function(e){return\"+vÄ“l \"+e},noEventsMessage:\"Nav notikumu\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a,t){return t?a%10==1&&a%100!=11?e[2]:e[3]:a%10==1&&a%100!=11?e[0]:e[1]}function t(e,t,n){return e+\" \"+a(s[n],e,t)}function n(e,t,n){return a(s[n],e,t)}function r(e,a){return a?\"daÅ¾as sekundes\":\"daÅ¾Äm sekundÄ“m\"}var s={ss:\"sekundes_sekundÄ“m_sekunde_sekundes\".split(\"_\"),m:\"minÅ«tes_minÅ«tÄ“m_minÅ«te_minÅ«tes\".split(\"_\"),mm:\"minÅ«tes_minÅ«tÄ“m_minÅ«te_minÅ«tes\".split(\"_\"),h:\"stundas_stundÄm_stunda_stundas\".split(\"_\"),hh:\"stundas_stundÄm_stunda_stundas\".split(\"_\"),d:\"dienas_dienÄm_diena_dienas\".split(\"_\"),dd:\"dienas_dienÄm_diena_dienas\".split(\"_\"),M:\"mÄ“neÅ¡a_mÄ“neÅ¡iem_mÄ“nesis_mÄ“neÅ¡i\".split(\"_\"),MM:\"mÄ“neÅ¡a_mÄ“neÅ¡iem_mÄ“nesis_mÄ“neÅ¡i\".split(\"_\"),y:\"gada_gadiem_gads_gadi\".split(\"_\"),yy:\"gada_gadiem_gads_gadi\".split(\"_\")};return e.defineLocale(\"lv\",{months:\"janvÄris_februÄris_marts_aprÄ«lis_maijs_jÅ«nijs_jÅ«lijs_augusts_septembris_oktobris_novembris_decembris\".split(\"_\"),monthsShort:\"jan_feb_mar_apr_mai_jÅ«n_jÅ«l_aug_sep_okt_nov_dec\".split(\"_\"),weekdays:\"svÄ“tdiena_pirmdiena_otrdiena_treÅ¡diena_ceturtdiena_piektdiena_sestdiena\".split(\"_\"),weekdaysShort:\"Sv_P_O_T_C_Pk_S\".split(\"_\"),weekdaysMin:\"Sv_P_O_T_C_Pk_S\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY.\",LL:\"YYYY. [gada] D. MMMM\",LLL:\"YYYY. [gada] D. MMMM, HH:mm\",LLLL:\"YYYY. [gada] D. MMMM, dddd, HH:mm\"},calendar:{sameDay:\"[Å odien pulksten] LT\",nextDay:\"[RÄ«t pulksten] LT\",nextWeek:\"dddd [pulksten] LT\",lastDay:\"[Vakar pulksten] LT\",lastWeek:\"[PagÄjuÅ¡Ä] dddd [pulksten] LT\",sameElse:\"L\"},relativeTime:{future:\"pÄ“c %s\",past:\"pirms %s\",s:r,ss:t,m:n,mm:t,h:n,hh:t,d:n,dd:t,M:n,MM:t,y:n,yy:t},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(160);var n=t(1);n.datepickerLocale(\"mk\",\"mk\",{closeText:\"Ð—Ð°Ñ‚Ð²Ð¾Ñ€Ð¸\",prevText:\"&#x3C;\",nextText:\"&#x3E;\",currentText:\"Ð”ÐµÐ½ÐµÑ\",monthNames:[\"ÐˆÐ°Ð½ÑƒÐ°Ñ€Ð¸\",\"Ð¤ÐµÐ²Ñ€ÑƒÐ°Ñ€Ð¸\",\"ÐœÐ°Ñ€Ñ‚\",\"ÐÐ¿Ñ€Ð¸Ð»\",\"ÐœÐ°Ñ˜\",\"ÐˆÑƒÐ½Ð¸\",\"ÐˆÑƒÐ»Ð¸\",\"ÐÐ²Ð³ÑƒÑÑ‚\",\"Ð¡ÐµÐ¿Ñ‚ÐµÐ¼Ð²Ñ€Ð¸\",\"ÐžÐºÑ‚Ð¾Ð¼Ð²Ñ€Ð¸\",\"ÐÐ¾ÐµÐ¼Ð²Ñ€Ð¸\",\"Ð”ÐµÐºÐµÐ¼Ð²Ñ€Ð¸\"],monthNamesShort:[\"ÐˆÐ°Ð½\",\"Ð¤ÐµÐ²\",\"ÐœÐ°Ñ€\",\"ÐÐ¿Ñ€\",\"ÐœÐ°Ñ˜\",\"ÐˆÑƒÐ½\",\"ÐˆÑƒÐ»\",\"ÐÐ²Ð³\",\"Ð¡ÐµÐ¿\",\"ÐžÐºÑ‚\",\"ÐÐ¾Ðµ\",\"Ð”ÐµÐº\"],dayNames:[\"ÐÐµÐ´ÐµÐ»Ð°\",\"ÐŸÐ¾Ð½ÐµÐ´ÐµÐ»Ð½Ð¸Ðº\",\"Ð’Ñ‚Ð¾Ñ€Ð½Ð¸Ðº\",\"Ð¡Ñ€ÐµÐ´Ð°\",\"Ð§ÐµÑ‚Ð²Ñ€Ñ‚Ð¾Ðº\",\"ÐŸÐµÑ‚Ð¾Ðº\",\"Ð¡Ð°Ð±Ð¾Ñ‚Ð°\"],dayNamesShort:[\"ÐÐµÐ´\",\"ÐŸÐ¾Ð½\",\"Ð’Ñ‚Ð¾\",\"Ð¡Ñ€Ðµ\",\"Ð§ÐµÑ‚\",\"ÐŸÐµÑ‚\",\"Ð¡Ð°Ð±\"],dayNamesMin:[\"ÐÐµ\",\"ÐŸÐ¾\",\"Ð’Ñ‚\",\"Ð¡Ñ€\",\"Ð§Ðµ\",\"ÐŸÐµ\",\"Ð¡Ð°\"],weekHeader:\"Ð¡ÐµÐ´\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"mk\",{buttonText:{month:\"ÐœÐµÑÐµÑ†\",week:\"ÐÐµÐ´ÐµÐ»Ð°\",day:\"Ð”ÐµÐ½\",list:\"Ð“Ñ€Ð°Ñ„Ð¸Ðº\"},allDayText:\"Ð¦ÐµÐ» Ð´ÐµÐ½\",eventLimitText:function(e){return\"+Ð¿Ð¾Ð²ÐµÑœÐµ \"+e},noEventsMessage:\"ÐÐµÐ¼Ð° Ð½Ð°ÑÑ‚Ð°Ð½Ð¸ Ð·Ð° Ð¿Ñ€Ð¸ÐºÐ°Ð¶ÑƒÐ²Ð°ÑšÐµ\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"mk\",{months:\"Ñ˜Ð°Ð½ÑƒÐ°Ñ€Ð¸_Ñ„ÐµÐ²Ñ€ÑƒÐ°Ñ€Ð¸_Ð¼Ð°Ñ€Ñ‚_Ð°Ð¿Ñ€Ð¸Ð»_Ð¼Ð°Ñ˜_Ñ˜ÑƒÐ½Ð¸_Ñ˜ÑƒÐ»Ð¸_Ð°Ð²Ð³ÑƒÑÑ‚_ÑÐµÐ¿Ñ‚ÐµÐ¼Ð²Ñ€Ð¸_Ð¾ÐºÑ‚Ð¾Ð¼Ð²Ñ€Ð¸_Ð½Ð¾ÐµÐ¼Ð²Ñ€Ð¸_Ð´ÐµÐºÐµÐ¼Ð²Ñ€Ð¸\".split(\"_\"),monthsShort:\"Ñ˜Ð°Ð½_Ñ„ÐµÐ²_Ð¼Ð°Ñ€_Ð°Ð¿Ñ€_Ð¼Ð°Ñ˜_Ñ˜ÑƒÐ½_Ñ˜ÑƒÐ»_Ð°Ð²Ð³_ÑÐµÐ¿_Ð¾ÐºÑ‚_Ð½Ð¾Ðµ_Ð´ÐµÐº\".split(\"_\"),weekdays:\"Ð½ÐµÐ´ÐµÐ»Ð°_Ð¿Ð¾Ð½ÐµÐ´ÐµÐ»Ð½Ð¸Ðº_Ð²Ñ‚Ð¾Ñ€Ð½Ð¸Ðº_ÑÑ€ÐµÐ´Ð°_Ñ‡ÐµÑ‚Ð²Ñ€Ñ‚Ð¾Ðº_Ð¿ÐµÑ‚Ð¾Ðº_ÑÐ°Ð±Ð¾Ñ‚Ð°\".split(\"_\"),weekdaysShort:\"Ð½ÐµÐ´_Ð¿Ð¾Ð½_Ð²Ñ‚Ð¾_ÑÑ€Ðµ_Ñ‡ÐµÑ‚_Ð¿ÐµÑ‚_ÑÐ°Ð±\".split(\"_\"),weekdaysMin:\"Ð½e_Ð¿o_Ð²Ñ‚_ÑÑ€_Ñ‡Ðµ_Ð¿Ðµ_Ña\".split(\"_\"),longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"D.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY H:mm\",LLLL:\"dddd, D MMMM YYYY H:mm\"},calendar:{sameDay:\"[Ð”ÐµÐ½ÐµÑ Ð²Ð¾] LT\",nextDay:\"[Ð£Ñ‚Ñ€Ðµ Ð²Ð¾] LT\",nextWeek:\"[Ð’Ð¾] dddd [Ð²Ð¾] LT\",lastDay:\"[Ð’Ñ‡ÐµÑ€Ð° Ð²Ð¾] LT\",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return\"[Ð˜Ð·Ð¼Ð¸Ð½Ð°Ñ‚Ð°Ñ‚Ð°] dddd [Ð²Ð¾] LT\";case 1:case 2:case 4:case 5:return\"[Ð˜Ð·Ð¼Ð¸Ð½Ð°Ñ‚Ð¸Ð¾Ñ‚] dddd [Ð²Ð¾] LT\"}},sameElse:\"L\"},relativeTime:{future:\"Ð¿Ð¾ÑÐ»Ðµ %s\",past:\"Ð¿Ñ€ÐµÐ´ %s\",s:\"Ð½ÐµÐºÐ¾Ð»ÐºÑƒ ÑÐµÐºÑƒÐ½Ð´Ð¸\",ss:\"%d ÑÐµÐºÑƒÐ½Ð´Ð¸\",m:\"Ð¼Ð¸Ð½ÑƒÑ‚Ð°\",mm:\"%d Ð¼Ð¸Ð½ÑƒÑ‚Ð¸\",h:\"Ñ‡Ð°Ñ\",hh:\"%d Ñ‡Ð°ÑÐ°\",d:\"Ð´ÐµÐ½\",dd:\"%d Ð´ÐµÐ½Ð°\",M:\"Ð¼ÐµÑÐµÑ†\",MM:\"%d Ð¼ÐµÑÐµÑ†Ð¸\",y:\"Ð³Ð¾Ð´Ð¸Ð½Ð°\",yy:\"%d Ð³Ð¾Ð´Ð¸Ð½Ð¸\"},dayOfMonthOrdinalParse:/\\d{1,2}-(ÐµÐ²|ÐµÐ½|Ñ‚Ð¸|Ð²Ð¸|Ñ€Ð¸|Ð¼Ð¸)/,ordinal:function(e){var a=e%10,t=e%100;return 0===e?e+\"-ÐµÐ²\":0===t?e+\"-ÐµÐ½\":t>10&&t<20?e+\"-Ñ‚Ð¸\":1===a?e+\"-Ð²Ð¸\":2===a?e+\"-Ñ€Ð¸\":7===a||8===a?e+\"-Ð¼Ð¸\":e+\"-Ñ‚Ð¸\"},week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(162);var n=t(1);n.datepickerLocale(\"ms-my\",\"ms\",{closeText:\"Tutup\",prevText:\"&#x3C;Sebelum\",nextText:\"Selepas&#x3E;\",currentText:\"hari ini\",monthNames:[\"Januari\",\"Februari\",\"Mac\",\"April\",\"Mei\",\"Jun\",\"Julai\",\"Ogos\",\"September\",\"Oktober\",\"November\",\"Disember\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mac\",\"Apr\",\"Mei\",\"Jun\",\"Jul\",\"Ogo\",\"Sep\",\"Okt\",\"Nov\",\"Dis\"],dayNames:[\"Ahad\",\"Isnin\",\"Selasa\",\"Rabu\",\"Khamis\",\"Jumaat\",\"Sabtu\"],dayNamesShort:[\"Aha\",\"Isn\",\"Sel\",\"Rab\",\"kha\",\"Jum\",\"Sab\"],dayNamesMin:[\"Ah\",\"Is\",\"Se\",\"Ra\",\"Kh\",\"Ju\",\"Sa\"],weekHeader:\"Mg\",dateFormat:\"dd/mm/yy\",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"ms-my\",{buttonText:{month:\"Bulan\",week:\"Minggu\",day:\"Hari\",list:\"Agenda\"},allDayText:\"Sepanjang hari\",eventLimitText:function(e){return\"masih ada \"+e+\" acara\"},noEventsMessage:\"Tiada peristiwa untuk dipaparkan\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"ms-my\",{months:\"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember\".split(\"_\"),monthsShort:\"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis\".split(\"_\"),weekdays:\"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu\".split(\"_\"),weekdaysShort:\"Ahd_Isn_Sel_Rab_Kha_Jum_Sab\".split(\"_\"),weekdaysMin:\"Ah_Is_Sl_Rb_Km_Jm_Sb\".split(\"_\"),longDateFormat:{LT:\"HH.mm\",LTS:\"HH.mm.ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY [pukul] HH.mm\",LLLL:\"dddd, D MMMM YYYY [pukul] HH.mm\"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(e,a){return 12===e&&(e=0),\"pagi\"===a?e:\"tengahari\"===a?e>=11?e:e+12:\"petang\"===a||\"malam\"===a?e+12:void 0},meridiem:function(e,a,t){return e<11?\"pagi\":e<15?\"tengahari\":e<19?\"petang\":\"malam\"},calendar:{sameDay:\"[Hari ini pukul] LT\",nextDay:\"[Esok pukul] LT\",nextWeek:\"dddd [pukul] LT\",lastDay:\"[Kelmarin pukul] LT\",lastWeek:\"dddd [lepas pukul] LT\",sameElse:\"L\"},relativeTime:{future:\"dalam %s\",past:\"%s yang lepas\",s:\"beberapa saat\",ss:\"%d saat\",m:\"seminit\",mm:\"%d minit\",h:\"sejam\",hh:\"%d jam\",d:\"sehari\",dd:\"%d hari\",M:\"sebulan\",MM:\"%d bulan\",y:\"setahun\",yy:\"%d tahun\"},week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(164);var n=t(1);n.datepickerLocale(\"ms\",\"ms\",{closeText:\"Tutup\",prevText:\"&#x3C;Sebelum\",nextText:\"Selepas&#x3E;\",currentText:\"hari ini\",monthNames:[\"Januari\",\"Februari\",\"Mac\",\"April\",\"Mei\",\"Jun\",\"Julai\",\"Ogos\",\"September\",\"Oktober\",\"November\",\"Disember\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mac\",\"Apr\",\"Mei\",\"Jun\",\"Jul\",\"Ogo\",\"Sep\",\"Okt\",\"Nov\",\"Dis\"],dayNames:[\"Ahad\",\"Isnin\",\"Selasa\",\"Rabu\",\"Khamis\",\"Jumaat\",\"Sabtu\"],dayNamesShort:[\"Aha\",\"Isn\",\"Sel\",\"Rab\",\"kha\",\"Jum\",\"Sab\"],dayNamesMin:[\"Ah\",\"Is\",\"Se\",\"Ra\",\"Kh\",\"Ju\",\"Sa\"],weekHeader:\"Mg\",dateFormat:\"dd/mm/yy\",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"ms\",{buttonText:{month:\"Bulan\",week:\"Minggu\",day:\"Hari\",list:\"Agenda\"},allDayText:\"Sepanjang hari\",eventLimitText:function(e){return\"masih ada \"+e+\" acara\"},noEventsMessage:\"Tiada peristiwa untuk dipaparkan\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"ms\",{months:\"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember\".split(\"_\"),monthsShort:\"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis\".split(\"_\"),weekdays:\"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu\".split(\"_\"),weekdaysShort:\"Ahd_Isn_Sel_Rab_Kha_Jum_Sab\".split(\"_\"),weekdaysMin:\"Ah_Is_Sl_Rb_Km_Jm_Sb\".split(\"_\"),longDateFormat:{LT:\"HH.mm\",LTS:\"HH.mm.ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY [pukul] HH.mm\",LLLL:\"dddd, D MMMM YYYY [pukul] HH.mm\"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(e,a){return 12===e&&(e=0),\"pagi\"===a?e:\"tengahari\"===a?e>=11?e:e+12:\"petang\"===a||\"malam\"===a?e+12:void 0},meridiem:function(e,a,t){return e<11?\"pagi\":e<15?\"tengahari\":e<19?\"petang\":\"malam\"},calendar:{sameDay:\"[Hari ini pukul] LT\",nextDay:\"[Esok pukul] LT\",nextWeek:\"dddd [pukul] LT\",lastDay:\"[Kelmarin pukul] LT\",lastWeek:\"dddd [lepas pukul] LT\",sameElse:\"L\"},relativeTime:{future:\"dalam %s\",past:\"%s yang lepas\",s:\"beberapa saat\",ss:\"%d saat\",m:\"seminit\",mm:\"%d minit\",h:\"sejam\",hh:\"%d jam\",d:\"sehari\",dd:\"%d hari\",M:\"sebulan\",MM:\"%d bulan\",y:\"setahun\",yy:\"%d tahun\"},week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(166);var n=t(1);n.datepickerLocale(\"nb\",\"nb\",{closeText:\"Lukk\",prevText:\"&#xAB;Forrige\",nextText:\"Neste&#xBB;\",currentText:\"I dag\",monthNames:[\"januar\",\"februar\",\"mars\",\"april\",\"mai\",\"juni\",\"juli\",\"august\",\"september\",\"oktober\",\"november\",\"desember\"],monthNamesShort:[\"jan\",\"feb\",\"mar\",\"apr\",\"mai\",\"jun\",\"jul\",\"aug\",\"sep\",\"okt\",\"nov\",\"des\"],dayNamesShort:[\"sÃ¸n\",\"man\",\"tir\",\"ons\",\"tor\",\"fre\",\"lÃ¸r\"],dayNames:[\"sÃ¸ndag\",\"mandag\",\"tirsdag\",\"onsdag\",\"torsdag\",\"fredag\",\"lÃ¸rdag\"],dayNamesMin:[\"sÃ¸\",\"ma\",\"ti\",\"on\",\"to\",\"fr\",\"lÃ¸\"],weekHeader:\"Uke\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"nb\",{buttonText:{month:\"MÃ¥ned\",week:\"Uke\",day:\"Dag\",list:\"Agenda\"},allDayText:\"Hele dagen\",eventLimitText:\"til\",noEventsMessage:\"Ingen hendelser Ã¥ vise\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"nb\",{months:\"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember\".split(\"_\"),monthsShort:\"jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.\".split(\"_\"),monthsParseExact:!0,weekdays:\"sÃ¸ndag_mandag_tirsdag_onsdag_torsdag_fredag_lÃ¸rdag\".split(\"_\"),weekdaysShort:\"sÃ¸._ma._ti._on._to._fr._lÃ¸.\".split(\"_\"),weekdaysMin:\"sÃ¸_ma_ti_on_to_fr_lÃ¸\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY [kl.] HH:mm\",LLLL:\"dddd D. MMMM YYYY [kl.] HH:mm\"},calendar:{sameDay:\"[i dag kl.] LT\",nextDay:\"[i morgen kl.] LT\",nextWeek:\"dddd [kl.] LT\",lastDay:\"[i gÃ¥r kl.] LT\",lastWeek:\"[forrige] dddd [kl.] LT\",sameElse:\"L\"},relativeTime:{future:\"om %s\",past:\"%s siden\",s:\"noen sekunder\",ss:\"%d sekunder\",m:\"ett minutt\",mm:\"%d minutter\",h:\"en time\",hh:\"%d timer\",d:\"en dag\",dd:\"%d dager\",M:\"en mÃ¥ned\",MM:\"%d mÃ¥neder\",y:\"ett Ã¥r\",yy:\"%d Ã¥r\"},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(168);var n=t(1);n.datepickerLocale(\"nl-be\",\"nl-BE\",{closeText:\"Sluiten\",prevText:\"â†\",nextText:\"â†’\",currentText:\"Vandaag\",monthNames:[\"januari\",\"februari\",\"maart\",\"april\",\"mei\",\"juni\",\"juli\",\"augustus\",\"september\",\"oktober\",\"november\",\"december\"],monthNamesShort:[\"jan\",\"feb\",\"mrt\",\"apr\",\"mei\",\"jun\",\"jul\",\"aug\",\"sep\",\"okt\",\"nov\",\"dec\"],dayNames:[\"zondag\",\"maandag\",\"dinsdag\",\"woensdag\",\"donderdag\",\"vrijdag\",\"zaterdag\"],dayNamesShort:[\"zon\",\"maa\",\"din\",\"woe\",\"don\",\"vri\",\"zat\"],dayNamesMin:[\"zo\",\"ma\",\"di\",\"wo\",\"do\",\"vr\",\"za\"],weekHeader:\"Wk\",dateFormat:\"dd/mm/yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"nl-be\",{buttonText:{month:\"Maand\",week:\"Week\",day:\"Dag\",list:\"Agenda\"},allDayText:\"Hele dag\",eventLimitText:\"extra\",noEventsMessage:\"Geen evenementen om te laten zien\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){var a=\"jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.\".split(\"_\"),t=\"jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec\".split(\"_\"),n=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],r=/^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;return e.defineLocale(\"nl-be\",{months:\"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december\".split(\"_\"),monthsShort:function(e,n){return e?/-MMM-/.test(n)?t[e.month()]:a[e.month()]:a},monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:/^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,monthsParse:n,longMonthsParse:n,shortMonthsParse:n,weekdays:\"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag\".split(\"_\"),weekdaysShort:\"zo._ma._di._wo._do._vr._za.\".split(\"_\"),weekdaysMin:\"zo_ma_di_wo_do_vr_za\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[vandaag om] LT\",nextDay:\"[morgen om] LT\",nextWeek:\"dddd [om] LT\",lastDay:\"[gisteren om] LT\",lastWeek:\"[afgelopen] dddd [om] LT\",sameElse:\"L\"},relativeTime:{future:\"over %s\",past:\"%s geleden\",s:\"een paar seconden\",ss:\"%d seconden\",m:\"Ã©Ã©n minuut\",mm:\"%d minuten\",h:\"Ã©Ã©n uur\",hh:\"%d uur\",d:\"Ã©Ã©n dag\",dd:\"%d dagen\",M:\"Ã©Ã©n maand\",MM:\"%d maanden\",y:\"Ã©Ã©n jaar\",yy:\"%d jaar\"},dayOfMonthOrdinalParse:/\\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||e>=20?\"ste\":\"de\")},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(170);var n=t(1);n.datepickerLocale(\"nl\",\"nl\",{closeText:\"Sluiten\",prevText:\"â†\",nextText:\"â†’\",currentText:\"Vandaag\",monthNames:[\"januari\",\"februari\",\"maart\",\"april\",\"mei\",\"juni\",\"juli\",\"augustus\",\"september\",\"oktober\",\"november\",\"december\"],monthNamesShort:[\"jan\",\"feb\",\"mrt\",\"apr\",\"mei\",\"jun\",\"jul\",\"aug\",\"sep\",\"okt\",\"nov\",\"dec\"],dayNames:[\"zondag\",\"maandag\",\"dinsdag\",\"woensdag\",\"donderdag\",\"vrijdag\",\"zaterdag\"],dayNamesShort:[\"zon\",\"maa\",\"din\",\"woe\",\"don\",\"vri\",\"zat\"],dayNamesMin:[\"zo\",\"ma\",\"di\",\"wo\",\"do\",\"vr\",\"za\"],weekHeader:\"Wk\",dateFormat:\"dd-mm-yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"nl\",{buttonText:{year:\"Jaar\",month:\"Maand\",week:\"Week\",day:\"Dag\",list:\"Agenda\"},allDayText:\"Hele dag\",eventLimitText:\"extra\",noEventsMessage:\"Geen evenementen om te laten zien\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){var a=\"jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.\".split(\"_\"),t=\"jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec\".split(\"_\"),n=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],r=/^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;return e.defineLocale(\"nl\",{months:\"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december\".split(\"_\"),monthsShort:function(e,n){return e?/-MMM-/.test(n)?t[e.month()]:a[e.month()]:a},monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:/^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,monthsParse:n,longMonthsParse:n,shortMonthsParse:n,weekdays:\"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag\".split(\"_\"),weekdaysShort:\"zo._ma._di._wo._do._vr._za.\".split(\"_\"),weekdaysMin:\"zo_ma_di_wo_do_vr_za\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD-MM-YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[vandaag om] LT\",nextDay:\"[morgen om] LT\",nextWeek:\"dddd [om] LT\",lastDay:\"[gisteren om] LT\",lastWeek:\"[afgelopen] dddd [om] LT\",sameElse:\"L\"},relativeTime:{future:\"over %s\",past:\"%s geleden\",s:\"een paar seconden\",ss:\"%d seconden\",m:\"Ã©Ã©n minuut\",mm:\"%d minuten\",h:\"Ã©Ã©n uur\",hh:\"%d uur\",d:\"Ã©Ã©n dag\",dd:\"%d dagen\",M:\"Ã©Ã©n maand\",MM:\"%d maanden\",y:\"Ã©Ã©n jaar\",yy:\"%d jaar\"},dayOfMonthOrdinalParse:/\\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||e>=20?\"ste\":\"de\")},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(172);var n=t(1);n.datepickerLocale(\"nn\",\"nn\",{closeText:\"Lukk\",prevText:\"&#xAB;FÃ¸rre\",nextText:\"Neste&#xBB;\",currentText:\"I dag\",monthNames:[\"januar\",\"februar\",\"mars\",\"april\",\"mai\",\"juni\",\"juli\",\"august\",\"september\",\"oktober\",\"november\",\"desember\"],monthNamesShort:[\"jan\",\"feb\",\"mar\",\"apr\",\"mai\",\"jun\",\"jul\",\"aug\",\"sep\",\"okt\",\"nov\",\"des\"],dayNamesShort:[\"sun\",\"mÃ¥n\",\"tys\",\"ons\",\"tor\",\"fre\",\"lau\"],dayNames:[\"sundag\",\"mÃ¥ndag\",\"tysdag\",\"onsdag\",\"torsdag\",\"fredag\",\"laurdag\"],dayNamesMin:[\"su\",\"mÃ¥\",\"ty\",\"on\",\"to\",\"fr\",\"la\"],weekHeader:\"Veke\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"nn\",{buttonText:{month:\"MÃ¥nad\",week:\"Veke\",day:\"Dag\",list:\"Agenda\"},allDayText:\"Heile dagen\",eventLimitText:\"til\",noEventsMessage:\"Ingen hendelser Ã¥ vise\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"nn\",{months:\"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember\".split(\"_\"),monthsShort:\"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des\".split(\"_\"),weekdays:\"sundag_mÃ¥ndag_tysdag_onsdag_torsdag_fredag_laurdag\".split(\"_\"),weekdaysShort:\"sun_mÃ¥n_tys_ons_tor_fre_lau\".split(\"_\"),weekdaysMin:\"su_mÃ¥_ty_on_to_fr_lÃ¸\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY [kl.] H:mm\",LLLL:\"dddd D. MMMM YYYY [kl.] HH:mm\"},calendar:{sameDay:\"[I dag klokka] LT\",nextDay:\"[I morgon klokka] LT\",nextWeek:\"dddd [klokka] LT\",lastDay:\"[I gÃ¥r klokka] LT\",lastWeek:\"[FÃ¸regÃ¥ande] dddd [klokka] LT\",sameElse:\"L\"},relativeTime:{future:\"om %s\",past:\"%s sidan\",s:\"nokre sekund\",ss:\"%d sekund\",m:\"eit minutt\",mm:\"%d minutt\",h:\"ein time\",hh:\"%d timar\",d:\"ein dag\",dd:\"%d dagar\",M:\"ein mÃ¥nad\",MM:\"%d mÃ¥nader\",y:\"eit Ã¥r\",yy:\"%d Ã¥r\"},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(174);var n=t(1);n.datepickerLocale(\"pl\",\"pl\",{closeText:\"Zamknij\",prevText:\"&#x3C;Poprzedni\",nextText:\"NastÄ™pny&#x3E;\",currentText:\"DziÅ›\",monthNames:[\"StyczeÅ„\",\"Luty\",\"Marzec\",\"KwiecieÅ„\",\"Maj\",\"Czerwiec\",\"Lipiec\",\"SierpieÅ„\",\"WrzesieÅ„\",\"PaÅºdziernik\",\"Listopad\",\"GrudzieÅ„\"],monthNamesShort:[\"Sty\",\"Lu\",\"Mar\",\"Kw\",\"Maj\",\"Cze\",\"Lip\",\"Sie\",\"Wrz\",\"Pa\",\"Lis\",\"Gru\"],dayNames:[\"Niedziela\",\"PoniedziaÅ‚ek\",\"Wtorek\",\"Åšroda\",\"Czwartek\",\"PiÄ…tek\",\"Sobota\"],dayNamesShort:[\"Nie\",\"Pn\",\"Wt\",\"Åšr\",\"Czw\",\"Pt\",\"So\"],dayNamesMin:[\"N\",\"Pn\",\"Wt\",\"Åšr\",\"Cz\",\"Pt\",\"So\"],weekHeader:\"Tydz\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"pl\",{buttonText:{month:\"MiesiÄ…c\",week:\"TydzieÅ„\",day:\"DzieÅ„\",list:\"Plan dnia\"},allDayText:\"CaÅ‚y dzieÅ„\",eventLimitText:\"wiÄ™cej\",noEventsMessage:\"Brak wydarzeÅ„ do wyÅ›wietlenia\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e){return e%10<5&&e%10>1&&~~(e/10)%10!=1}function t(e,t,n){var r=e+\" \";switch(n){case\"ss\":return r+(a(e)?\"sekundy\":\"sekund\");case\"m\":return t?\"minuta\":\"minutÄ™\";case\"mm\":return r+(a(e)?\"minuty\":\"minut\");case\"h\":return t?\"godzina\":\"godzinÄ™\";case\"hh\":return r+(a(e)?\"godziny\":\"godzin\");case\"MM\":return r+(a(e)?\"miesiÄ…ce\":\"miesiÄ™cy\");case\"yy\":return r+(a(e)?\"lata\":\"lat\")}}var n=\"styczeÅ„_luty_marzec_kwiecieÅ„_maj_czerwiec_lipiec_sierpieÅ„_wrzesieÅ„_paÅºdziernik_listopad_grudzieÅ„\".split(\"_\"),r=\"stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_wrzeÅ›nia_paÅºdziernika_listopada_grudnia\".split(\"_\");return e.defineLocale(\"pl\",{months:function(e,a){return e?\"\"===a?\"(\"+r[e.month()]+\"|\"+n[e.month()]+\")\":/D MMMM/.test(a)?r[e.month()]:n[e.month()]:n},monthsShort:\"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paÅº_lis_gru\".split(\"_\"),weekdays:\"niedziela_poniedziaÅ‚ek_wtorek_Å›roda_czwartek_piÄ…tek_sobota\".split(\"_\"),weekdaysShort:\"ndz_pon_wt_Å›r_czw_pt_sob\".split(\"_\"),weekdaysMin:\"Nd_Pn_Wt_Åšr_Cz_Pt_So\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[DziÅ› o] LT\",nextDay:\"[Jutro o] LT\",nextWeek:function(){switch(this.day()){case 0:return\"[W niedzielÄ™ o] LT\";case 2:return\"[We wtorek o] LT\";case 3:return\"[W Å›rodÄ™ o] LT\";case 6:return\"[W sobotÄ™ o] LT\";default:return\"[W] dddd [o] LT\"}},lastDay:\"[Wczoraj o] LT\",lastWeek:function(){switch(this.day()){case 0:return\"[W zeszÅ‚Ä… niedzielÄ™ o] LT\";case 3:return\"[W zeszÅ‚Ä… Å›rodÄ™ o] LT\";case 6:return\"[W zeszÅ‚Ä… sobotÄ™ o] LT\";default:return\"[W zeszÅ‚y] dddd [o] LT\"}},sameElse:\"L\"},relativeTime:{future:\"za %s\",past:\"%s temu\",s:\"kilka sekund\",ss:t,m:t,mm:t,h:t,hh:t,d:\"1 dzieÅ„\",dd:\"%d dni\",M:\"miesiÄ…c\",MM:t,y:\"rok\",yy:t},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(176);var n=t(1);n.datepickerLocale(\"pt-br\",\"pt-BR\",{closeText:\"Fechar\",prevText:\"&#x3C;Anterior\",nextText:\"PrÃ³ximo&#x3E;\",currentText:\"Hoje\",monthNames:[\"Janeiro\",\"Fevereiro\",\"MarÃ§o\",\"Abril\",\"Maio\",\"Junho\",\"Julho\",\"Agosto\",\"Setembro\",\"Outubro\",\"Novembro\",\"Dezembro\"],monthNamesShort:[\"Jan\",\"Fev\",\"Mar\",\"Abr\",\"Mai\",\"Jun\",\"Jul\",\"Ago\",\"Set\",\"Out\",\"Nov\",\"Dez\"],dayNames:[\"Domingo\",\"Segunda-feira\",\"TerÃ§a-feira\",\"Quarta-feira\",\"Quinta-feira\",\"Sexta-feira\",\"SÃ¡bado\"],dayNamesShort:[\"Dom\",\"Seg\",\"Ter\",\"Qua\",\"Qui\",\"Sex\",\"SÃ¡b\"],dayNamesMin:[\"Dom\",\"Seg\",\"Ter\",\"Qua\",\"Qui\",\"Sex\",\"SÃ¡b\"],weekHeader:\"Sm\",dateFormat:\"dd/mm/yy\",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"pt-br\",{buttonText:{month:\"MÃªs\",week:\"Semana\",day:\"Dia\",list:\"Compromissos\"},allDayText:\"dia inteiro\",eventLimitText:function(e){return\"mais +\"+e},noEventsMessage:\"NÃ£o hÃ¡ eventos para mostrar\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"pt-br\",{months:\"janeiro_fevereiro_marÃ§o_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro\".split(\"_\"),monthsShort:\"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez\".split(\"_\"),weekdays:\"Domingo_Segunda-feira_TerÃ§a-feira_Quarta-feira_Quinta-feira_Sexta-feira_SÃ¡bado\".split(\"_\"),weekdaysShort:\"Dom_Seg_Ter_Qua_Qui_Sex_SÃ¡b\".split(\"_\"),weekdaysMin:\"Do_2Âª_3Âª_4Âª_5Âª_6Âª_SÃ¡\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D [de] MMMM [de] YYYY\",LLL:\"D [de] MMMM [de] YYYY [Ã s] HH:mm\",\nLLLL:\"dddd, D [de] MMMM [de] YYYY [Ã s] HH:mm\"},calendar:{sameDay:\"[Hoje Ã s] LT\",nextDay:\"[AmanhÃ£ Ã s] LT\",nextWeek:\"dddd [Ã s] LT\",lastDay:\"[Ontem Ã s] LT\",lastWeek:function(){return 0===this.day()||6===this.day()?\"[Ãšltimo] dddd [Ã s] LT\":\"[Ãšltima] dddd [Ã s] LT\"},sameElse:\"L\"},relativeTime:{future:\"em %s\",past:\"hÃ¡ %s\",s:\"poucos segundos\",ss:\"%d segundos\",m:\"um minuto\",mm:\"%d minutos\",h:\"uma hora\",hh:\"%d horas\",d:\"um dia\",dd:\"%d dias\",M:\"um mÃªs\",MM:\"%d meses\",y:\"um ano\",yy:\"%d anos\"},dayOfMonthOrdinalParse:/\\d{1,2}Âº/,ordinal:\"%dÂº\"})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(178);var n=t(1);n.datepickerLocale(\"pt\",\"pt\",{closeText:\"Fechar\",prevText:\"Anterior\",nextText:\"Seguinte\",currentText:\"Hoje\",monthNames:[\"Janeiro\",\"Fevereiro\",\"MarÃ§o\",\"Abril\",\"Maio\",\"Junho\",\"Julho\",\"Agosto\",\"Setembro\",\"Outubro\",\"Novembro\",\"Dezembro\"],monthNamesShort:[\"Jan\",\"Fev\",\"Mar\",\"Abr\",\"Mai\",\"Jun\",\"Jul\",\"Ago\",\"Set\",\"Out\",\"Nov\",\"Dez\"],dayNames:[\"Domingo\",\"Segunda-feira\",\"TerÃ§a-feira\",\"Quarta-feira\",\"Quinta-feira\",\"Sexta-feira\",\"SÃ¡bado\"],dayNamesShort:[\"Dom\",\"Seg\",\"Ter\",\"Qua\",\"Qui\",\"Sex\",\"SÃ¡b\"],dayNamesMin:[\"Dom\",\"Seg\",\"Ter\",\"Qua\",\"Qui\",\"Sex\",\"SÃ¡b\"],weekHeader:\"Sem\",dateFormat:\"dd/mm/yy\",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"pt\",{buttonText:{month:\"MÃªs\",week:\"Semana\",day:\"Dia\",list:\"Agenda\"},allDayText:\"Todo o dia\",eventLimitText:\"mais\",noEventsMessage:\"NÃ£o hÃ¡ eventos para mostrar\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"pt\",{months:\"janeiro_fevereiro_marÃ§o_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro\".split(\"_\"),monthsShort:\"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez\".split(\"_\"),weekdays:\"Domingo_Segunda-feira_TerÃ§a-feira_Quarta-feira_Quinta-feira_Sexta-feira_SÃ¡bado\".split(\"_\"),weekdaysShort:\"Dom_Seg_Ter_Qua_Qui_Sex_SÃ¡b\".split(\"_\"),weekdaysMin:\"Do_2Âª_3Âª_4Âª_5Âª_6Âª_SÃ¡\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D [de] MMMM [de] YYYY\",LLL:\"D [de] MMMM [de] YYYY HH:mm\",LLLL:\"dddd, D [de] MMMM [de] YYYY HH:mm\"},calendar:{sameDay:\"[Hoje Ã s] LT\",nextDay:\"[AmanhÃ£ Ã s] LT\",nextWeek:\"dddd [Ã s] LT\",lastDay:\"[Ontem Ã s] LT\",lastWeek:function(){return 0===this.day()||6===this.day()?\"[Ãšltimo] dddd [Ã s] LT\":\"[Ãšltima] dddd [Ã s] LT\"},sameElse:\"L\"},relativeTime:{future:\"em %s\",past:\"hÃ¡ %s\",s:\"segundos\",ss:\"%d segundos\",m:\"um minuto\",mm:\"%d minutos\",h:\"uma hora\",hh:\"%d horas\",d:\"um dia\",dd:\"%d dias\",M:\"um mÃªs\",MM:\"%d meses\",y:\"um ano\",yy:\"%d anos\"},dayOfMonthOrdinalParse:/\\d{1,2}Âº/,ordinal:\"%dÂº\",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(180);var n=t(1);n.datepickerLocale(\"ro\",\"ro\",{closeText:\"ÃŽnchide\",prevText:\"&#xAB; Luna precedentÄƒ\",nextText:\"Luna urmÄƒtoare &#xBB;\",currentText:\"Azi\",monthNames:[\"Ianuarie\",\"Februarie\",\"Martie\",\"Aprilie\",\"Mai\",\"Iunie\",\"Iulie\",\"August\",\"Septembrie\",\"Octombrie\",\"Noiembrie\",\"Decembrie\"],monthNamesShort:[\"Ian\",\"Feb\",\"Mar\",\"Apr\",\"Mai\",\"Iun\",\"Iul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],dayNames:[\"DuminicÄƒ\",\"Luni\",\"MarÅ£i\",\"Miercuri\",\"Joi\",\"Vineri\",\"SÃ¢mbÄƒtÄƒ\"],dayNamesShort:[\"Dum\",\"Lun\",\"Mar\",\"Mie\",\"Joi\",\"Vin\",\"SÃ¢m\"],dayNamesMin:[\"Du\",\"Lu\",\"Ma\",\"Mi\",\"Jo\",\"Vi\",\"SÃ¢\"],weekHeader:\"SÄƒpt\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"ro\",{buttonText:{prev:\"precedentÄƒ\",next:\"urmÄƒtoare\",month:\"LunÄƒ\",week:\"SÄƒptÄƒmÃ¢nÄƒ\",day:\"Zi\",list:\"AgendÄƒ\"},allDayText:\"ToatÄƒ ziua\",eventLimitText:function(e){return\"+alte \"+e},noEventsMessage:\"Nu existÄƒ evenimente de afiÈ™at\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a,t){var n={ss:\"secunde\",mm:\"minute\",hh:\"ore\",dd:\"zile\",MM:\"luni\",yy:\"ani\"},r=\" \";return(e%100>=20||e>=100&&e%100==0)&&(r=\" de \"),e+r+n[t]}return e.defineLocale(\"ro\",{months:\"ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie\".split(\"_\"),monthsShort:\"ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.\".split(\"_\"),monthsParseExact:!0,weekdays:\"duminicÄƒ_luni_marÈ›i_miercuri_joi_vineri_sÃ¢mbÄƒtÄƒ\".split(\"_\"),weekdaysShort:\"Dum_Lun_Mar_Mie_Joi_Vin_SÃ¢m\".split(\"_\"),weekdaysMin:\"Du_Lu_Ma_Mi_Jo_Vi_SÃ¢\".split(\"_\"),longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY H:mm\",LLLL:\"dddd, D MMMM YYYY H:mm\"},calendar:{sameDay:\"[azi la] LT\",nextDay:\"[mÃ¢ine la] LT\",nextWeek:\"dddd [la] LT\",lastDay:\"[ieri la] LT\",lastWeek:\"[fosta] dddd [la] LT\",sameElse:\"L\"},relativeTime:{future:\"peste %s\",past:\"%s Ã®n urmÄƒ\",s:\"cÃ¢teva secunde\",ss:a,m:\"un minut\",mm:a,h:\"o orÄƒ\",hh:a,d:\"o zi\",dd:a,M:\"o lunÄƒ\",MM:a,y:\"un an\",yy:a},week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(182);var n=t(1);n.datepickerLocale(\"ru\",\"ru\",{closeText:\"Ð—Ð°ÐºÑ€Ñ‹Ñ‚ÑŒ\",prevText:\"&#x3C;ÐŸÑ€ÐµÐ´\",nextText:\"Ð¡Ð»ÐµÐ´&#x3E;\",currentText:\"Ð¡ÐµÐ³Ð¾Ð´Ð½Ñ\",monthNames:[\"Ð¯Ð½Ð²Ð°Ñ€ÑŒ\",\"Ð¤ÐµÐ²Ñ€Ð°Ð»ÑŒ\",\"ÐœÐ°Ñ€Ñ‚\",\"ÐÐ¿Ñ€ÐµÐ»ÑŒ\",\"ÐœÐ°Ð¹\",\"Ð˜ÑŽÐ½ÑŒ\",\"Ð˜ÑŽÐ»ÑŒ\",\"ÐÐ²Ð³ÑƒÑÑ‚\",\"Ð¡ÐµÐ½Ñ‚ÑÐ±Ñ€ÑŒ\",\"ÐžÐºÑ‚ÑÐ±Ñ€ÑŒ\",\"ÐÐ¾ÑÐ±Ñ€ÑŒ\",\"Ð”ÐµÐºÐ°Ð±Ñ€ÑŒ\"],monthNamesShort:[\"Ð¯Ð½Ð²\",\"Ð¤ÐµÐ²\",\"ÐœÐ°Ñ€\",\"ÐÐ¿Ñ€\",\"ÐœÐ°Ð¹\",\"Ð˜ÑŽÐ½\",\"Ð˜ÑŽÐ»\",\"ÐÐ²Ð³\",\"Ð¡ÐµÐ½\",\"ÐžÐºÑ‚\",\"ÐÐ¾Ñ\",\"Ð”ÐµÐº\"],dayNames:[\"Ð²Ð¾ÑÐºÑ€ÐµÑÐµÐ½ÑŒÐµ\",\"Ð¿Ð¾Ð½ÐµÐ´ÐµÐ»ÑŒÐ½Ð¸Ðº\",\"Ð²Ñ‚Ð¾Ñ€Ð½Ð¸Ðº\",\"ÑÑ€ÐµÐ´Ð°\",\"Ñ‡ÐµÑ‚Ð²ÐµÑ€Ð³\",\"Ð¿ÑÑ‚Ð½Ð¸Ñ†Ð°\",\"ÑÑƒÐ±Ð±Ð¾Ñ‚Ð°\"],dayNamesShort:[\"Ð²ÑÐº\",\"Ð¿Ð½Ð´\",\"Ð²Ñ‚Ñ€\",\"ÑÑ€Ð´\",\"Ñ‡Ñ‚Ð²\",\"Ð¿Ñ‚Ð½\",\"ÑÐ±Ñ‚\"],dayNamesMin:[\"Ð’Ñ\",\"ÐŸÐ½\",\"Ð’Ñ‚\",\"Ð¡Ñ€\",\"Ð§Ñ‚\",\"ÐŸÑ‚\",\"Ð¡Ð±\"],weekHeader:\"ÐÐµÐ´\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"ru\",{buttonText:{month:\"ÐœÐµÑÑÑ†\",week:\"ÐÐµÐ´ÐµÐ»Ñ\",day:\"Ð”ÐµÐ½ÑŒ\",list:\"ÐŸÐ¾Ð²ÐµÑÑ‚ÐºÐ° Ð´Ð½Ñ\"},allDayText:\"Ð’ÐµÑÑŒ Ð´ÐµÐ½ÑŒ\",eventLimitText:function(e){return\"+ ÐµÑ‰Ñ‘ \"+e},noEventsMessage:\"ÐÐµÑ‚ ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ð¹ Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a){var t=e.split(\"_\");return a%10==1&&a%100!=11?t[0]:a%10>=2&&a%10<=4&&(a%100<10||a%100>=20)?t[1]:t[2]}function t(e,t,n){var r={ss:t?\"ÑÐµÐºÑƒÐ½Ð´Ð°_ÑÐµÐºÑƒÐ½Ð´Ñ‹_ÑÐµÐºÑƒÐ½Ð´\":\"ÑÐµÐºÑƒÐ½Ð´Ñƒ_ÑÐµÐºÑƒÐ½Ð´Ñ‹_ÑÐµÐºÑƒÐ½Ð´\",mm:t?\"Ð¼Ð¸Ð½ÑƒÑ‚Ð°_Ð¼Ð¸Ð½ÑƒÑ‚Ñ‹_Ð¼Ð¸Ð½ÑƒÑ‚\":\"Ð¼Ð¸Ð½ÑƒÑ‚Ñƒ_Ð¼Ð¸Ð½ÑƒÑ‚Ñ‹_Ð¼Ð¸Ð½ÑƒÑ‚\",hh:\"Ñ‡Ð°Ñ_Ñ‡Ð°ÑÐ°_Ñ‡Ð°ÑÐ¾Ð²\",dd:\"Ð´ÐµÐ½ÑŒ_Ð´Ð½Ñ_Ð´Ð½ÐµÐ¹\",MM:\"Ð¼ÐµÑÑÑ†_Ð¼ÐµÑÑÑ†Ð°_Ð¼ÐµÑÑÑ†ÐµÐ²\",yy:\"Ð³Ð¾Ð´_Ð³Ð¾Ð´Ð°_Ð»ÐµÑ‚\"};return\"m\"===n?t?\"Ð¼Ð¸Ð½ÑƒÑ‚Ð°\":\"Ð¼Ð¸Ð½ÑƒÑ‚Ñƒ\":e+\" \"+a(r[n],+e)}var n=[/^ÑÐ½Ð²/i,/^Ñ„ÐµÐ²/i,/^Ð¼Ð°Ñ€/i,/^Ð°Ð¿Ñ€/i,/^Ð¼Ð°[Ð¹Ñ]/i,/^Ð¸ÑŽÐ½/i,/^Ð¸ÑŽÐ»/i,/^Ð°Ð²Ð³/i,/^ÑÐµÐ½/i,/^Ð¾ÐºÑ‚/i,/^Ð½Ð¾Ñ/i,/^Ð´ÐµÐº/i];return e.defineLocale(\"ru\",{months:{format:\"ÑÐ½Ð²Ð°Ñ€Ñ_Ñ„ÐµÐ²Ñ€Ð°Ð»Ñ_Ð¼Ð°Ñ€Ñ‚Ð°_Ð°Ð¿Ñ€ÐµÐ»Ñ_Ð¼Ð°Ñ_Ð¸ÑŽÐ½Ñ_Ð¸ÑŽÐ»Ñ_Ð°Ð²Ð³ÑƒÑÑ‚Ð°_ÑÐµÐ½Ñ‚ÑÐ±Ñ€Ñ_Ð¾ÐºÑ‚ÑÐ±Ñ€Ñ_Ð½Ð¾ÑÐ±Ñ€Ñ_Ð´ÐµÐºÐ°Ð±Ñ€Ñ\".split(\"_\"),standalone:\"ÑÐ½Ð²Ð°Ñ€ÑŒ_Ñ„ÐµÐ²Ñ€Ð°Ð»ÑŒ_Ð¼Ð°Ñ€Ñ‚_Ð°Ð¿Ñ€ÐµÐ»ÑŒ_Ð¼Ð°Ð¹_Ð¸ÑŽÐ½ÑŒ_Ð¸ÑŽÐ»ÑŒ_Ð°Ð²Ð³ÑƒÑÑ‚_ÑÐµÐ½Ñ‚ÑÐ±Ñ€ÑŒ_Ð¾ÐºÑ‚ÑÐ±Ñ€ÑŒ_Ð½Ð¾ÑÐ±Ñ€ÑŒ_Ð´ÐµÐºÐ°Ð±Ñ€ÑŒ\".split(\"_\")},monthsShort:{format:\"ÑÐ½Ð²._Ñ„ÐµÐ²Ñ€._Ð¼Ð°Ñ€._Ð°Ð¿Ñ€._Ð¼Ð°Ñ_Ð¸ÑŽÐ½Ñ_Ð¸ÑŽÐ»Ñ_Ð°Ð²Ð³._ÑÐµÐ½Ñ‚._Ð¾ÐºÑ‚._Ð½Ð¾ÑÐ±._Ð´ÐµÐº.\".split(\"_\"),standalone:\"ÑÐ½Ð²._Ñ„ÐµÐ²Ñ€._Ð¼Ð°Ñ€Ñ‚_Ð°Ð¿Ñ€._Ð¼Ð°Ð¹_Ð¸ÑŽÐ½ÑŒ_Ð¸ÑŽÐ»ÑŒ_Ð°Ð²Ð³._ÑÐµÐ½Ñ‚._Ð¾ÐºÑ‚._Ð½Ð¾ÑÐ±._Ð´ÐµÐº.\".split(\"_\")},weekdays:{standalone:\"Ð²Ð¾ÑÐºÑ€ÐµÑÐµÐ½ÑŒÐµ_Ð¿Ð¾Ð½ÐµÐ´ÐµÐ»ÑŒÐ½Ð¸Ðº_Ð²Ñ‚Ð¾Ñ€Ð½Ð¸Ðº_ÑÑ€ÐµÐ´Ð°_Ñ‡ÐµÑ‚Ð²ÐµÑ€Ð³_Ð¿ÑÑ‚Ð½Ð¸Ñ†Ð°_ÑÑƒÐ±Ð±Ð¾Ñ‚Ð°\".split(\"_\"),format:\"Ð²Ð¾ÑÐºÑ€ÐµÑÐµÐ½ÑŒÐµ_Ð¿Ð¾Ð½ÐµÐ´ÐµÐ»ÑŒÐ½Ð¸Ðº_Ð²Ñ‚Ð¾Ñ€Ð½Ð¸Ðº_ÑÑ€ÐµÐ´Ñƒ_Ñ‡ÐµÑ‚Ð²ÐµÑ€Ð³_Ð¿ÑÑ‚Ð½Ð¸Ñ†Ñƒ_ÑÑƒÐ±Ð±Ð¾Ñ‚Ñƒ\".split(\"_\"),isFormat:/\\[ ?[Ð’Ð²] ?(?:Ð¿Ñ€Ð¾ÑˆÐ»ÑƒÑŽ|ÑÐ»ÐµÐ´ÑƒÑŽÑ‰ÑƒÑŽ|ÑÑ‚Ñƒ)? ?\\] ?dddd/},weekdaysShort:\"Ð²Ñ_Ð¿Ð½_Ð²Ñ‚_ÑÑ€_Ñ‡Ñ‚_Ð¿Ñ‚_ÑÐ±\".split(\"_\"),weekdaysMin:\"Ð²Ñ_Ð¿Ð½_Ð²Ñ‚_ÑÑ€_Ñ‡Ñ‚_Ð¿Ñ‚_ÑÐ±\".split(\"_\"),monthsParse:n,longMonthsParse:n,shortMonthsParse:n,monthsRegex:/^(ÑÐ½Ð²Ð°Ñ€[ÑŒÑ]|ÑÐ½Ð²\\.?|Ñ„ÐµÐ²Ñ€Ð°Ð»[ÑŒÑ]|Ñ„ÐµÐ²Ñ€?\\.?|Ð¼Ð°Ñ€Ñ‚Ð°?|Ð¼Ð°Ñ€\\.?|Ð°Ð¿Ñ€ÐµÐ»[ÑŒÑ]|Ð°Ð¿Ñ€\\.?|Ð¼Ð°[Ð¹Ñ]|Ð¸ÑŽÐ½[ÑŒÑ]|Ð¸ÑŽÐ½\\.?|Ð¸ÑŽÐ»[ÑŒÑ]|Ð¸ÑŽÐ»\\.?|Ð°Ð²Ð³ÑƒÑÑ‚Ð°?|Ð°Ð²Ð³\\.?|ÑÐµÐ½Ñ‚ÑÐ±Ñ€[ÑŒÑ]|ÑÐµÐ½Ñ‚?\\.?|Ð¾ÐºÑ‚ÑÐ±Ñ€[ÑŒÑ]|Ð¾ÐºÑ‚\\.?|Ð½Ð¾ÑÐ±Ñ€[ÑŒÑ]|Ð½Ð¾ÑÐ±?\\.?|Ð´ÐµÐºÐ°Ð±Ñ€[ÑŒÑ]|Ð´ÐµÐº\\.?)/i,monthsShortRegex:/^(ÑÐ½Ð²Ð°Ñ€[ÑŒÑ]|ÑÐ½Ð²\\.?|Ñ„ÐµÐ²Ñ€Ð°Ð»[ÑŒÑ]|Ñ„ÐµÐ²Ñ€?\\.?|Ð¼Ð°Ñ€Ñ‚Ð°?|Ð¼Ð°Ñ€\\.?|Ð°Ð¿Ñ€ÐµÐ»[ÑŒÑ]|Ð°Ð¿Ñ€\\.?|Ð¼Ð°[Ð¹Ñ]|Ð¸ÑŽÐ½[ÑŒÑ]|Ð¸ÑŽÐ½\\.?|Ð¸ÑŽÐ»[ÑŒÑ]|Ð¸ÑŽÐ»\\.?|Ð°Ð²Ð³ÑƒÑÑ‚Ð°?|Ð°Ð²Ð³\\.?|ÑÐµÐ½Ñ‚ÑÐ±Ñ€[ÑŒÑ]|ÑÐµÐ½Ñ‚?\\.?|Ð¾ÐºÑ‚ÑÐ±Ñ€[ÑŒÑ]|Ð¾ÐºÑ‚\\.?|Ð½Ð¾ÑÐ±Ñ€[ÑŒÑ]|Ð½Ð¾ÑÐ±?\\.?|Ð´ÐµÐºÐ°Ð±Ñ€[ÑŒÑ]|Ð´ÐµÐº\\.?)/i,monthsStrictRegex:/^(ÑÐ½Ð²Ð°Ñ€[ÑÑŒ]|Ñ„ÐµÐ²Ñ€Ð°Ð»[ÑÑŒ]|Ð¼Ð°Ñ€Ñ‚Ð°?|Ð°Ð¿Ñ€ÐµÐ»[ÑÑŒ]|Ð¼Ð°[ÑÐ¹]|Ð¸ÑŽÐ½[ÑÑŒ]|Ð¸ÑŽÐ»[ÑÑŒ]|Ð°Ð²Ð³ÑƒÑÑ‚Ð°?|ÑÐµÐ½Ñ‚ÑÐ±Ñ€[ÑÑŒ]|Ð¾ÐºÑ‚ÑÐ±Ñ€[ÑÑŒ]|Ð½Ð¾ÑÐ±Ñ€[ÑÑŒ]|Ð´ÐµÐºÐ°Ð±Ñ€[ÑÑŒ])/i,monthsShortStrictRegex:/^(ÑÐ½Ð²\\.|Ñ„ÐµÐ²Ñ€?\\.|Ð¼Ð°Ñ€[Ñ‚.]|Ð°Ð¿Ñ€\\.|Ð¼Ð°[ÑÐ¹]|Ð¸ÑŽÐ½[ÑŒÑ.]|Ð¸ÑŽÐ»[ÑŒÑ.]|Ð°Ð²Ð³\\.|ÑÐµÐ½Ñ‚?\\.|Ð¾ÐºÑ‚\\.|Ð½Ð¾ÑÐ±?\\.|Ð´ÐµÐº\\.)/i,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY Ð³.\",LLL:\"D MMMM YYYY Ð³., H:mm\",LLLL:\"dddd, D MMMM YYYY Ð³., H:mm\"},calendar:{sameDay:\"[Ð¡ÐµÐ³Ð¾Ð´Ð½Ñ Ð²] LT\",nextDay:\"[Ð—Ð°Ð²Ñ‚Ñ€Ð° Ð²] LT\",lastDay:\"[Ð’Ñ‡ÐµÑ€Ð° Ð²] LT\",nextWeek:function(e){if(e.week()===this.week())return 2===this.day()?\"[Ð’Ð¾] dddd [Ð²] LT\":\"[Ð’] dddd [Ð²] LT\";switch(this.day()){case 0:return\"[Ð’ ÑÐ»ÐµÐ´ÑƒÑŽÑ‰ÐµÐµ] dddd [Ð²] LT\";case 1:case 2:case 4:return\"[Ð’ ÑÐ»ÐµÐ´ÑƒÑŽÑ‰Ð¸Ð¹] dddd [Ð²] LT\";case 3:case 5:case 6:return\"[Ð’ ÑÐ»ÐµÐ´ÑƒÑŽÑ‰ÑƒÑŽ] dddd [Ð²] LT\"}},lastWeek:function(e){if(e.week()===this.week())return 2===this.day()?\"[Ð’Ð¾] dddd [Ð²] LT\":\"[Ð’] dddd [Ð²] LT\";switch(this.day()){case 0:return\"[Ð’ Ð¿Ñ€Ð¾ÑˆÐ»Ð¾Ðµ] dddd [Ð²] LT\";case 1:case 2:case 4:return\"[Ð’ Ð¿Ñ€Ð¾ÑˆÐ»Ñ‹Ð¹] dddd [Ð²] LT\";case 3:case 5:case 6:return\"[Ð’ Ð¿Ñ€Ð¾ÑˆÐ»ÑƒÑŽ] dddd [Ð²] LT\"}},sameElse:\"L\"},relativeTime:{future:\"Ñ‡ÐµÑ€ÐµÐ· %s\",past:\"%s Ð½Ð°Ð·Ð°Ð´\",s:\"Ð½ÐµÑÐºÐ¾Ð»ÑŒÐºÐ¾ ÑÐµÐºÑƒÐ½Ð´\",ss:t,m:t,mm:t,h:\"Ñ‡Ð°Ñ\",hh:t,d:\"Ð´ÐµÐ½ÑŒ\",dd:t,M:\"Ð¼ÐµÑÑÑ†\",MM:t,y:\"Ð³Ð¾Ð´\",yy:t},meridiemParse:/Ð½Ð¾Ñ‡Ð¸|ÑƒÑ‚Ñ€Ð°|Ð´Ð½Ñ|Ð²ÐµÑ‡ÐµÑ€Ð°/i,isPM:function(e){return/^(Ð´Ð½Ñ|Ð²ÐµÑ‡ÐµÑ€Ð°)$/.test(e)},meridiem:function(e,a,t){return e<4?\"Ð½Ð¾Ñ‡Ð¸\":e<12?\"ÑƒÑ‚Ñ€Ð°\":e<17?\"Ð´Ð½Ñ\":\"Ð²ÐµÑ‡ÐµÑ€Ð°\"},dayOfMonthOrdinalParse:/\\d{1,2}-(Ð¹|Ð³Ð¾|Ñ)/,ordinal:function(e,a){switch(a){case\"M\":case\"d\":case\"DDD\":return e+\"-Ð¹\";case\"D\":return e+\"-Ð³Ð¾\";case\"w\":case\"W\":return e+\"-Ñ\";default:return e}},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(184);var n=t(1);n.datepickerLocale(\"sk\",\"sk\",{closeText:\"ZavrieÅ¥\",prevText:\"&#x3C;PredchÃ¡dzajÃºci\",nextText:\"NasledujÃºci&#x3E;\",currentText:\"Dnes\",monthNames:[\"januÃ¡r\",\"februÃ¡r\",\"marec\",\"aprÃ­l\",\"mÃ¡j\",\"jÃºn\",\"jÃºl\",\"august\",\"september\",\"oktÃ³ber\",\"november\",\"december\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"MÃ¡j\",\"JÃºn\",\"JÃºl\",\"Aug\",\"Sep\",\"Okt\",\"Nov\",\"Dec\"],dayNames:[\"nedeÄ¾a\",\"pondelok\",\"utorok\",\"streda\",\"Å¡tvrtok\",\"piatok\",\"sobota\"],dayNamesShort:[\"Ned\",\"Pon\",\"Uto\",\"Str\",\"Å tv\",\"Pia\",\"Sob\"],dayNamesMin:[\"Ne\",\"Po\",\"Ut\",\"St\",\"Å t\",\"Pia\",\"So\"],weekHeader:\"Ty\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"sk\",{buttonText:{month:\"Mesiac\",week:\"TÃ½Å¾deÅˆ\",day:\"DeÅˆ\",list:\"Rozvrh\"},allDayText:\"CelÃ½ deÅˆ\",eventLimitText:function(e){return\"+ÄalÅ¡ie: \"+e},noEventsMessage:\"Å½iadne akcie na zobrazenie\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e){return e>1&&e<5}function t(e,t,n,r){var s=e+\" \";switch(n){case\"s\":return t||r?\"pÃ¡r sekÃºnd\":\"pÃ¡r sekundami\";case\"ss\":return t||r?s+(a(e)?\"sekundy\":\"sekÃºnd\"):s+\"sekundami\";case\"m\":return t?\"minÃºta\":r?\"minÃºtu\":\"minÃºtou\";case\"mm\":return t||r?s+(a(e)?\"minÃºty\":\"minÃºt\"):s+\"minÃºtami\";case\"h\":return t?\"hodina\":r?\"hodinu\":\"hodinou\";case\"hh\":return t||r?s+(a(e)?\"hodiny\":\"hodÃ­n\"):s+\"hodinami\";case\"d\":return t||r?\"deÅˆ\":\"dÅˆom\";case\"dd\":return t||r?s+(a(e)?\"dni\":\"dnÃ­\"):s+\"dÅˆami\";case\"M\":return t||r?\"mesiac\":\"mesiacom\";case\"MM\":return t||r?s+(a(e)?\"mesiace\":\"mesiacov\"):s+\"mesiacmi\";case\"y\":return t||r?\"rok\":\"rokom\";case\"yy\":return t||r?s+(a(e)?\"roky\":\"rokov\"):s+\"rokmi\"}}var n=\"januÃ¡r_februÃ¡r_marec_aprÃ­l_mÃ¡j_jÃºn_jÃºl_august_september_oktÃ³ber_november_december\".split(\"_\"),r=\"jan_feb_mar_apr_mÃ¡j_jÃºn_jÃºl_aug_sep_okt_nov_dec\".split(\"_\");return e.defineLocale(\"sk\",{months:n,monthsShort:r,weekdays:\"nedeÄ¾a_pondelok_utorok_streda_Å¡tvrtok_piatok_sobota\".split(\"_\"),weekdaysShort:\"ne_po_ut_st_Å¡t_pi_so\".split(\"_\"),weekdaysMin:\"ne_po_ut_st_Å¡t_pi_so\".split(\"_\"),longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY H:mm\",LLLL:\"dddd D. MMMM YYYY H:mm\"},calendar:{sameDay:\"[dnes o] LT\",nextDay:\"[zajtra o] LT\",nextWeek:function(){switch(this.day()){case 0:return\"[v nedeÄ¾u o] LT\";case 1:case 2:return\"[v] dddd [o] LT\";case 3:return\"[v stredu o] LT\";case 4:return\"[vo Å¡tvrtok o] LT\";case 5:return\"[v piatok o] LT\";case 6:return\"[v sobotu o] LT\"}},lastDay:\"[vÄera o] LT\",lastWeek:function(){switch(this.day()){case 0:return\"[minulÃº nedeÄ¾u o] LT\";case 1:case 2:return\"[minulÃ½] dddd [o] LT\";case 3:return\"[minulÃº stredu o] LT\";case 4:case 5:return\"[minulÃ½] dddd [o] LT\";case 6:return\"[minulÃº sobotu o] LT\"}},sameElse:\"L\"},relativeTime:{future:\"za %s\",past:\"pred %s\",s:t,ss:t,m:t,mm:t,h:t,hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(186);var n=t(1);n.datepickerLocale(\"sl\",\"sl\",{closeText:\"Zapri\",prevText:\"&#x3C;PrejÅ¡nji\",nextText:\"Naslednji&#x3E;\",currentText:\"Trenutni\",monthNames:[\"Januar\",\"Februar\",\"Marec\",\"April\",\"Maj\",\"Junij\",\"Julij\",\"Avgust\",\"September\",\"Oktober\",\"November\",\"December\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"Maj\",\"Jun\",\"Jul\",\"Avg\",\"Sep\",\"Okt\",\"Nov\",\"Dec\"],dayNames:[\"Nedelja\",\"Ponedeljek\",\"Torek\",\"Sreda\",\"ÄŒetrtek\",\"Petek\",\"Sobota\"],dayNamesShort:[\"Ned\",\"Pon\",\"Tor\",\"Sre\",\"ÄŒet\",\"Pet\",\"Sob\"],dayNamesMin:[\"Ne\",\"Po\",\"To\",\"Sr\",\"ÄŒe\",\"Pe\",\"So\"],weekHeader:\"Teden\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"sl\",{buttonText:{month:\"Mesec\",week:\"Teden\",day:\"Dan\",list:\"Dnevni red\"},allDayText:\"Ves dan\",eventLimitText:\"veÄ\",noEventsMessage:\"Ni dogodkov za prikaz\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a,t,n){var r=e+\" \";switch(t){case\"s\":return a||n?\"nekaj sekund\":\"nekaj sekundami\";case\"ss\":return r+=1===e?a?\"sekundo\":\"sekundi\":2===e?a||n?\"sekundi\":\"sekundah\":e<5?a||n?\"sekunde\":\"sekundah\":\"sekund\";case\"m\":return a?\"ena minuta\":\"eno minuto\";case\"mm\":return r+=1===e?a?\"minuta\":\"minuto\":2===e?a||n?\"minuti\":\"minutama\":e<5?a||n?\"minute\":\"minutami\":a||n?\"minut\":\"minutami\";case\"h\":return a?\"ena ura\":\"eno uro\";case\"hh\":return r+=1===e?a?\"ura\":\"uro\":2===e?a||n?\"uri\":\"urama\":e<5?a||n?\"ure\":\"urami\":a||n?\"ur\":\"urami\";case\"d\":return a||n?\"en dan\":\"enim dnem\";case\"dd\":return r+=1===e?a||n?\"dan\":\"dnem\":2===e?a||n?\"dni\":\"dnevoma\":a||n?\"dni\":\"dnevi\";case\"M\":return a||n?\"en mesec\":\"enim mesecem\";case\"MM\":return r+=1===e?a||n?\"mesec\":\"mesecem\":2===e?a||n?\"meseca\":\"mesecema\":e<5?a||n?\"mesece\":\"meseci\":a||n?\"mesecev\":\"meseci\";case\"y\":return a||n?\"eno leto\":\"enim letom\";case\"yy\":return r+=1===e?a||n?\"leto\":\"letom\":2===e?a||n?\"leti\":\"letoma\":e<5?a||n?\"leta\":\"leti\":a||n?\"let\":\"leti\"}}return e.defineLocale(\"sl\",{months:\"januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december\".split(\"_\"),monthsShort:\"jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.\".split(\"_\"),monthsParseExact:!0,weekdays:\"nedelja_ponedeljek_torek_sreda_Äetrtek_petek_sobota\".split(\"_\"),weekdaysShort:\"ned._pon._tor._sre._Äet._pet._sob.\".split(\"_\"),weekdaysMin:\"ne_po_to_sr_Äe_pe_so\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY H:mm\",LLLL:\"dddd, D. MMMM YYYY H:mm\"},calendar:{sameDay:\"[danes ob] LT\",nextDay:\"[jutri ob] LT\",nextWeek:function(){switch(this.day()){case 0:return\"[v] [nedeljo] [ob] LT\";case 3:return\"[v] [sredo] [ob] LT\";case 6:return\"[v] [soboto] [ob] LT\";case 1:case 2:case 4:case 5:return\"[v] dddd [ob] LT\"}},lastDay:\"[vÄeraj ob] LT\",lastWeek:function(){switch(this.day()){case 0:return\"[prejÅ¡njo] [nedeljo] [ob] LT\";case 3:return\"[prejÅ¡njo] [sredo] [ob] LT\";case 6:return\"[prejÅ¡njo] [soboto] [ob] LT\";case 1:case 2:case 4:case 5:return\"[prejÅ¡nji] dddd [ob] LT\"}},sameElse:\"L\"},relativeTime:{future:\"Äez %s\",past:\"pred %s\",s:a,ss:a,m:a,mm:a,h:a,hh:a,d:a,dd:a,M:a,MM:a,y:a,yy:a},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(188);var n=t(1);n.datepickerLocale(\"sq\",\"sq\",{closeText:\"mbylle\",prevText:\"&#x3C;mbrapa\",nextText:\"PÃ«rpara&#x3E;\",currentText:\"sot\",monthNames:[\"Janar\",\"Shkurt\",\"Mars\",\"Prill\",\"Maj\",\"Qershor\",\"Korrik\",\"Gusht\",\"Shtator\",\"Tetor\",\"NÃ«ntor\",\"Dhjetor\"],monthNamesShort:[\"Jan\",\"Shk\",\"Mar\",\"Pri\",\"Maj\",\"Qer\",\"Kor\",\"Gus\",\"Sht\",\"Tet\",\"NÃ«n\",\"Dhj\"],dayNames:[\"E Diel\",\"E HÃ«nÃ«\",\"E MartÃ«\",\"E MÃ«rkurÃ«\",\"E Enjte\",\"E Premte\",\"E Shtune\"],dayNamesShort:[\"Di\",\"HÃ«\",\"Ma\",\"MÃ«\",\"En\",\"Pr\",\"Sh\"],dayNamesMin:[\"Di\",\"HÃ«\",\"Ma\",\"MÃ«\",\"En\",\"Pr\",\"Sh\"],weekHeader:\"Ja\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"sq\",{buttonText:{month:\"Muaj\",week:\"JavÃ«\",day:\"DitÃ«\",list:\"ListÃ«\"},allDayHtml:\"GjithÃ«<br/>ditÃ«n\",eventLimitText:function(e){return\"+mÃ« tepÃ«r \"+e},noEventsMessage:\"Nuk ka evente pÃ«r tÃ« shfaqur\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"sq\",{months:\"Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_NÃ«ntor_Dhjetor\".split(\"_\"),monthsShort:\"Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_NÃ«n_Dhj\".split(\"_\"),weekdays:\"E Diel_E HÃ«nÃ«_E MartÃ«_E MÃ«rkurÃ«_E Enjte_E Premte_E ShtunÃ«\".split(\"_\"),weekdaysShort:\"Die_HÃ«n_Mar_MÃ«r_Enj_Pre_Sht\".split(\"_\"),weekdaysMin:\"D_H_Ma_MÃ«_E_P_Sh\".split(\"_\"),weekdaysParseExact:!0,meridiemParse:/PD|MD/,isPM:function(e){return\"M\"===e.charAt(0)},meridiem:function(e,a,t){return e<12?\"PD\":\"MD\"},longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Sot nÃ«] LT\",nextDay:\"[NesÃ«r nÃ«] LT\",nextWeek:\"dddd [nÃ«] LT\",lastDay:\"[Dje nÃ«] LT\",lastWeek:\"dddd [e kaluar nÃ«] LT\",sameElse:\"L\"},relativeTime:{future:\"nÃ« %s\",past:\"%s mÃ« parÃ«\",s:\"disa sekonda\",ss:\"%d sekonda\",m:\"njÃ« minutÃ«\",mm:\"%d minuta\",h:\"njÃ« orÃ«\",hh:\"%d orÃ«\",d:\"njÃ« ditÃ«\",dd:\"%d ditÃ«\",M:\"njÃ« muaj\",MM:\"%d muaj\",y:\"njÃ« vit\",yy:\"%d vite\"},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(190);var n=t(1);n.datepickerLocale(\"sr-cyrl\",\"sr\",{closeText:\"Ð—Ð°Ñ‚Ð²Ð¾Ñ€Ð¸\",prevText:\"&#x3C;\",nextText:\"&#x3E;\",currentText:\"Ð”Ð°Ð½Ð°Ñ\",monthNames:[\"ÐˆÐ°Ð½ÑƒÐ°Ñ€\",\"Ð¤ÐµÐ±Ñ€ÑƒÐ°Ñ€\",\"ÐœÐ°Ñ€Ñ‚\",\"ÐÐ¿Ñ€Ð¸Ð»\",\"ÐœÐ°Ñ˜\",\"ÐˆÑƒÐ½\",\"ÐˆÑƒÐ»\",\"ÐÐ²Ð³ÑƒÑÑ‚\",\"Ð¡ÐµÐ¿Ñ‚ÐµÐ¼Ð±Ð°Ñ€\",\"ÐžÐºÑ‚Ð¾Ð±Ð°Ñ€\",\"ÐÐ¾Ð²ÐµÐ¼Ð±Ð°Ñ€\",\"Ð”ÐµÑ†ÐµÐ¼Ð±Ð°Ñ€\"],monthNamesShort:[\"ÐˆÐ°Ð½\",\"Ð¤ÐµÐ±\",\"ÐœÐ°Ñ€\",\"ÐÐ¿Ñ€\",\"ÐœÐ°Ñ˜\",\"ÐˆÑƒÐ½\",\"ÐˆÑƒÐ»\",\"ÐÐ²Ð³\",\"Ð¡ÐµÐ¿\",\"ÐžÐºÑ‚\",\"ÐÐ¾Ð²\",\"Ð”ÐµÑ†\"],dayNames:[\"ÐÐµÐ´ÐµÑ™Ð°\",\"ÐŸÐ¾Ð½ÐµÐ´ÐµÑ™Ð°Ðº\",\"Ð£Ñ‚Ð¾Ñ€Ð°Ðº\",\"Ð¡Ñ€ÐµÐ´Ð°\",\"Ð§ÐµÑ‚Ð²Ñ€Ñ‚Ð°Ðº\",\"ÐŸÐµÑ‚Ð°Ðº\",\"Ð¡ÑƒÐ±Ð¾Ñ‚Ð°\"],dayNamesShort:[\"ÐÐµÐ´\",\"ÐŸÐ¾Ð½\",\"Ð£Ñ‚Ð¾\",\"Ð¡Ñ€Ðµ\",\"Ð§ÐµÑ‚\",\"ÐŸÐµÑ‚\",\"Ð¡ÑƒÐ±\"],dayNamesMin:[\"ÐÐµ\",\"ÐŸÐ¾\",\"Ð£Ñ‚\",\"Ð¡Ñ€\",\"Ð§Ðµ\",\"ÐŸÐµ\",\"Ð¡Ñƒ\"],weekHeader:\"Ð¡ÐµÐ´\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"sr-cyrl\",{buttonText:{prev:\"ÐŸÑ€ÐµÑ‚Ñ…Ð¾Ð´Ð½Ð°\",next:\"ÑÐ»ÐµÐ´ÐµÑ›Ð¸\",month:\"ÐœÐµÑÐµÑ†\",week:\"ÐÐµÐ´ÐµÑ™Ð°\",day:\"Ð”Ð°Ð½\",list:\"ÐŸÐ»Ð°Ð½ÐµÑ€\"},allDayText:\"Ð¦ÐµÐ¾ Ð´Ð°Ð½\",eventLimitText:function(e){return\"+ Ñ˜Ð¾Ñˆ \"+e},noEventsMessage:\"ÐÐµÐ¼Ð° Ð´Ð¾Ð³Ð°Ñ’Ð°Ñ˜Ð° Ð·Ð° Ð¿Ñ€Ð¸ÐºÐ°Ð·\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){var a={words:{ss:[\"ÑÐµÐºÑƒÐ½Ð´Ð°\",\"ÑÐµÐºÑƒÐ½Ð´Ðµ\",\"ÑÐµÐºÑƒÐ½Ð´Ð¸\"],m:[\"Ñ˜ÐµÐ´Ð°Ð½ Ð¼Ð¸Ð½ÑƒÑ‚\",\"Ñ˜ÐµÐ´Ð½Ðµ Ð¼Ð¸Ð½ÑƒÑ‚Ðµ\"],mm:[\"Ð¼Ð¸Ð½ÑƒÑ‚\",\"Ð¼Ð¸Ð½ÑƒÑ‚Ðµ\",\"Ð¼Ð¸Ð½ÑƒÑ‚Ð°\"],h:[\"Ñ˜ÐµÐ´Ð°Ð½ ÑÐ°Ñ‚\",\"Ñ˜ÐµÐ´Ð½Ð¾Ð³ ÑÐ°Ñ‚Ð°\"],hh:[\"ÑÐ°Ñ‚\",\"ÑÐ°Ñ‚Ð°\",\"ÑÐ°Ñ‚Ð¸\"],dd:[\"Ð´Ð°Ð½\",\"Ð´Ð°Ð½Ð°\",\"Ð´Ð°Ð½Ð°\"],MM:[\"Ð¼ÐµÑÐµÑ†\",\"Ð¼ÐµÑÐµÑ†Ð°\",\"Ð¼ÐµÑÐµÑ†Ð¸\"],yy:[\"Ð³Ð¾Ð´Ð¸Ð½Ð°\",\"Ð³Ð¾Ð´Ð¸Ð½Ðµ\",\"Ð³Ð¾Ð´Ð¸Ð½Ð°\"]},correctGrammaticalCase:function(e,a){return 1===e?a[0]:e>=2&&e<=4?a[1]:a[2]},translate:function(e,t,n){var r=a.words[n];return 1===n.length?t?r[0]:r[1]:e+\" \"+a.correctGrammaticalCase(e,r)}};return e.defineLocale(\"sr-cyrl\",{months:\"Ñ˜Ð°Ð½ÑƒÐ°Ñ€_Ñ„ÐµÐ±Ñ€ÑƒÐ°Ñ€_Ð¼Ð°Ñ€Ñ‚_Ð°Ð¿Ñ€Ð¸Ð»_Ð¼Ð°Ñ˜_Ñ˜ÑƒÐ½_Ñ˜ÑƒÐ»_Ð°Ð²Ð³ÑƒÑÑ‚_ÑÐµÐ¿Ñ‚ÐµÐ¼Ð±Ð°Ñ€_Ð¾ÐºÑ‚Ð¾Ð±Ð°Ñ€_Ð½Ð¾Ð²ÐµÐ¼Ð±Ð°Ñ€_Ð´ÐµÑ†ÐµÐ¼Ð±Ð°Ñ€\".split(\"_\"),monthsShort:\"Ñ˜Ð°Ð½._Ñ„ÐµÐ±._Ð¼Ð°Ñ€._Ð°Ð¿Ñ€._Ð¼Ð°Ñ˜_Ñ˜ÑƒÐ½_Ñ˜ÑƒÐ»_Ð°Ð²Ð³._ÑÐµÐ¿._Ð¾ÐºÑ‚._Ð½Ð¾Ð²._Ð´ÐµÑ†.\".split(\"_\"),monthsParseExact:!0,weekdays:\"Ð½ÐµÐ´ÐµÑ™Ð°_Ð¿Ð¾Ð½ÐµÐ´ÐµÑ™Ð°Ðº_ÑƒÑ‚Ð¾Ñ€Ð°Ðº_ÑÑ€ÐµÐ´Ð°_Ñ‡ÐµÑ‚Ð²Ñ€Ñ‚Ð°Ðº_Ð¿ÐµÑ‚Ð°Ðº_ÑÑƒÐ±Ð¾Ñ‚Ð°\".split(\"_\"),weekdaysShort:\"Ð½ÐµÐ´._Ð¿Ð¾Ð½._ÑƒÑ‚Ð¾._ÑÑ€Ðµ._Ñ‡ÐµÑ‚._Ð¿ÐµÑ‚._ÑÑƒÐ±.\".split(\"_\"),weekdaysMin:\"Ð½Ðµ_Ð¿Ð¾_ÑƒÑ‚_ÑÑ€_Ñ‡Ðµ_Ð¿Ðµ_ÑÑƒ\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY H:mm\",LLLL:\"dddd, D. MMMM YYYY H:mm\"},calendar:{sameDay:\"[Ð´Ð°Ð½Ð°Ñ Ñƒ] LT\",nextDay:\"[ÑÑƒÑ‚Ñ€Ð° Ñƒ] LT\",nextWeek:function(){switch(this.day()){case 0:return\"[Ñƒ] [Ð½ÐµÐ´ÐµÑ™Ñƒ] [Ñƒ] LT\";case 3:return\"[Ñƒ] [ÑÑ€ÐµÐ´Ñƒ] [Ñƒ] LT\";case 6:return\"[Ñƒ] [ÑÑƒÐ±Ð¾Ñ‚Ñƒ] [Ñƒ] LT\";case 1:case 2:case 4:case 5:return\"[Ñƒ] dddd [Ñƒ] LT\"}},lastDay:\"[Ñ˜ÑƒÑ‡Ðµ Ñƒ] LT\",lastWeek:function(){return[\"[Ð¿Ñ€Ð¾ÑˆÐ»Ðµ] [Ð½ÐµÐ´ÐµÑ™Ðµ] [Ñƒ] LT\",\"[Ð¿Ñ€Ð¾ÑˆÐ»Ð¾Ð³] [Ð¿Ð¾Ð½ÐµÐ´ÐµÑ™ÐºÐ°] [Ñƒ] LT\",\"[Ð¿Ñ€Ð¾ÑˆÐ»Ð¾Ð³] [ÑƒÑ‚Ð¾Ñ€ÐºÐ°] [Ñƒ] LT\",\"[Ð¿Ñ€Ð¾ÑˆÐ»Ðµ] [ÑÑ€ÐµÐ´Ðµ] [Ñƒ] LT\",\"[Ð¿Ñ€Ð¾ÑˆÐ»Ð¾Ð³] [Ñ‡ÐµÑ‚Ð²Ñ€Ñ‚ÐºÐ°] [Ñƒ] LT\",\"[Ð¿Ñ€Ð¾ÑˆÐ»Ð¾Ð³] [Ð¿ÐµÑ‚ÐºÐ°] [Ñƒ] LT\",\"[Ð¿Ñ€Ð¾ÑˆÐ»Ðµ] [ÑÑƒÐ±Ð¾Ñ‚Ðµ] [Ñƒ] LT\"][this.day()]},sameElse:\"L\"},relativeTime:{future:\"Ð·Ð° %s\",past:\"Ð¿Ñ€Ðµ %s\",s:\"Ð½ÐµÐºÐ¾Ð»Ð¸ÐºÐ¾ ÑÐµÐºÑƒÐ½Ð´Ð¸\",ss:a.translate,m:a.translate,mm:a.translate,h:a.translate,hh:a.translate,d:\"Ð´Ð°Ð½\",dd:a.translate,M:\"Ð¼ÐµÑÐµÑ†\",MM:a.translate,y:\"Ð³Ð¾Ð´Ð¸Ð½Ñƒ\",yy:a.translate},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(192);var n=t(1);n.datepickerLocale(\"sr\",\"sr-SR\",{closeText:\"Zatvori\",prevText:\"&#x3C;\",nextText:\"&#x3E;\",currentText:\"Danas\",monthNames:[\"Januar\",\"Februar\",\"Mart\",\"April\",\"Maj\",\"Jun\",\"Jul\",\"Avgust\",\"Septembar\",\"Oktobar\",\"Novembar\",\"Decembar\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"Maj\",\"Jun\",\"Jul\",\"Avg\",\"Sep\",\"Okt\",\"Nov\",\"Dec\"],dayNames:[\"Nedelja\",\"Ponedeljak\",\"Utorak\",\"Sreda\",\"ÄŒetvrtak\",\"Petak\",\"Subota\"],dayNamesShort:[\"Ned\",\"Pon\",\"Uto\",\"Sre\",\"ÄŒet\",\"Pet\",\"Sub\"],dayNamesMin:[\"Ne\",\"Po\",\"Ut\",\"Sr\",\"ÄŒe\",\"Pe\",\"Su\"],weekHeader:\"Sed\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"sr\",{buttonText:{prev:\"Prethodna\",next:\"SledecÌi\",month:\"MÐµsÐµc\",week:\"NÐµdÐµlja\",day:\"Dan\",list:\"PlanÐµr\"},allDayText:\"CÐµo dan\",eventLimitText:function(e){return\"+ joÅ¡ \"+e},noEventsMessage:\"NÐµma dogaÄ‘aja za prikaz\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){var a={words:{ss:[\"sekunda\",\"sekunde\",\"sekundi\"],m:[\"jedan minut\",\"jedne minute\"],mm:[\"minut\",\"minute\",\"minuta\"],h:[\"jedan sat\",\"jednog sata\"],hh:[\"sat\",\"sata\",\"sati\"],dd:[\"dan\",\"dana\",\"dana\"],MM:[\"mesec\",\"meseca\",\"meseci\"],yy:[\"godina\",\"godine\",\"godina\"]},correctGrammaticalCase:function(e,a){return 1===e?a[0]:e>=2&&e<=4?a[1]:a[2]},translate:function(e,t,n){var r=a.words[n];return 1===n.length?t?r[0]:r[1]:e+\" \"+a.correctGrammaticalCase(e,r)}};return e.defineLocale(\"sr\",{months:\"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar\".split(\"_\"),monthsShort:\"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.\".split(\"_\"),monthsParseExact:!0,weekdays:\"nedelja_ponedeljak_utorak_sreda_Äetvrtak_petak_subota\".split(\"_\"),weekdaysShort:\"ned._pon._uto._sre._Äet._pet._sub.\".split(\"_\"),weekdaysMin:\"ne_po_ut_sr_Äe_pe_su\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY H:mm\",LLLL:\"dddd, D. MMMM YYYY H:mm\"},calendar:{sameDay:\"[danas u] LT\",nextDay:\"[sutra u] LT\",nextWeek:function(){switch(this.day()){case 0:return\"[u] [nedelju] [u] LT\";case 3:return\"[u] [sredu] [u] LT\";case 6:return\"[u] [subotu] [u] LT\";case 1:case 2:case 4:case 5:return\"[u] dddd [u] LT\"}},lastDay:\"[juÄe u] LT\",lastWeek:function(){return[\"[proÅ¡le] [nedelje] [u] LT\",\"[proÅ¡log] [ponedeljka] [u] LT\",\"[proÅ¡log] [utorka] [u] LT\",\"[proÅ¡le] [srede] [u] LT\",\"[proÅ¡log] [Äetvrtka] [u] LT\",\"[proÅ¡log] [petka] [u] LT\",\"[proÅ¡le] [subote] [u] LT\"][this.day()]},sameElse:\"L\"},relativeTime:{future:\"za %s\",past:\"pre %s\",s:\"nekoliko sekundi\",ss:a.translate,m:a.translate,mm:a.translate,h:a.translate,hh:a.translate,d:\"dan\",dd:a.translate,M:\"mesec\",MM:a.translate,y:\"godinu\",yy:a.translate},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(194);var n=t(1);n.datepickerLocale(\"sv\",\"sv\",{closeText:\"StÃ¤ng\",prevText:\"&#xAB;FÃ¶rra\",nextText:\"NÃ¤sta&#xBB;\",currentText:\"Idag\",monthNames:[\"Januari\",\"Februari\",\"Mars\",\"April\",\"Maj\",\"Juni\",\"Juli\",\"Augusti\",\"September\",\"Oktober\",\"November\",\"December\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"Maj\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Okt\",\"Nov\",\"Dec\"],dayNamesShort:[\"SÃ¶n\",\"MÃ¥n\",\"Tis\",\"Ons\",\"Tor\",\"Fre\",\"LÃ¶r\"],dayNames:[\"SÃ¶ndag\",\"MÃ¥ndag\",\"Tisdag\",\"Onsdag\",\"Torsdag\",\"Fredag\",\"LÃ¶rdag\"],dayNamesMin:[\"SÃ¶\",\"MÃ¥\",\"Ti\",\"On\",\"To\",\"Fr\",\"LÃ¶\"],weekHeader:\"v. \",dateFormat:\"yy-mm-dd\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"sv\",{buttonText:{month:\"MÃ¥nad\",week:\"Vecka\",day:\"Dag\",list:\"Program\"},allDayText:\"Heldag\",eventLimitText:\"till\",noEventsMessage:\"Inga hÃ¤ndelser att visa\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"sv\",{months:\"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december\".split(\"_\"),monthsShort:\"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec\".split(\"_\"),weekdays:\"sÃ¶ndag_mÃ¥ndag_tisdag_onsdag_torsdag_fredag_lÃ¶rdag\".split(\"_\"),weekdaysShort:\"sÃ¶n_mÃ¥n_tis_ons_tor_fre_lÃ¶r\".split(\"_\"),weekdaysMin:\"sÃ¶_mÃ¥_ti_on_to_fr_lÃ¶\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY-MM-DD\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY [kl.] HH:mm\",LLLL:\"dddd D MMMM YYYY [kl.] HH:mm\",lll:\"D MMM YYYY HH:mm\",llll:\"ddd D MMM YYYY HH:mm\"},calendar:{sameDay:\"[Idag] LT\",nextDay:\"[Imorgon] LT\",lastDay:\"[IgÃ¥r] LT\",nextWeek:\"[PÃ¥] dddd LT\",lastWeek:\"[I] dddd[s] LT\",sameElse:\"L\"},relativeTime:{future:\"om %s\",past:\"fÃ¶r %s sedan\",s:\"nÃ¥gra sekunder\",ss:\"%d sekunder\",m:\"en minut\",mm:\"%d minuter\",h:\"en timme\",hh:\"%d timmar\",d:\"en dag\",dd:\"%d dagar\",M:\"en mÃ¥nad\",MM:\"%d mÃ¥nader\",y:\"ett Ã¥r\",yy:\"%d Ã¥r\"},dayOfMonthOrdinalParse:/\\d{1,2}(e|a)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?\"e\":1===a?\"a\":2===a?\"a\":\"e\")},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(196);var n=t(1);n.datepickerLocale(\"th\",\"th\",{closeText:\"à¸›à¸´à¸”\",prevText:\"&#xAB;&#xA0;à¸¢à¹‰à¸­à¸™\",nextText:\"à¸–à¸±à¸”à¹„à¸›&#xA0;&#xBB;\",currentText:\"à¸§à¸±à¸™à¸™à¸µà¹‰\",monthNames:[\"à¸¡à¸à¸£à¸²à¸„à¸¡\",\"à¸à¸¸à¸¡à¸ à¸²à¸žà¸±à¸™à¸˜à¹Œ\",\"à¸¡à¸µà¸™à¸²à¸„à¸¡\",\"à¹€à¸¡à¸©à¸²à¸¢à¸™\",\"à¸žà¸¤à¸©à¸ à¸²à¸„à¸¡\",\"à¸¡à¸´à¸–à¸¸à¸™à¸²à¸¢à¸™\",\"à¸à¸£à¸à¸Žà¸²à¸„à¸¡\",\"à¸ªà¸´à¸‡à¸«à¸²à¸„à¸¡\",\"à¸à¸±à¸™à¸¢à¸²à¸¢à¸™\",\"à¸•à¸¸à¸¥à¸²à¸„à¸¡\",\"à¸žà¸¤à¸¨à¸ˆà¸´à¸à¸²à¸¢à¸™\",\"à¸˜à¸±à¸™à¸§à¸²à¸„à¸¡\"],monthNamesShort:[\"à¸¡.à¸„.\",\"à¸.à¸ž.\",\"à¸¡à¸µ.à¸„.\",\"à¹€à¸¡.à¸¢.\",\"à¸ž.à¸„.\",\"à¸¡à¸´.à¸¢.\",\"à¸.à¸„.\",\"à¸ª.à¸„.\",\"à¸.à¸¢.\",\"à¸•.à¸„.\",\"à¸ž.à¸¢.\",\"à¸˜.à¸„.\"],dayNames:[\"à¸­à¸²à¸—à¸´à¸•à¸¢à¹Œ\",\"à¸ˆà¸±à¸™à¸—à¸£à¹Œ\",\"à¸­à¸±à¸‡à¸„à¸²à¸£\",\"à¸žà¸¸à¸˜\",\"à¸žà¸¤à¸«à¸±à¸ªà¸šà¸”à¸µ\",\"à¸¨à¸¸à¸à¸£à¹Œ\",\"à¹€à¸ªà¸²à¸£à¹Œ\"],dayNamesShort:[\"à¸­à¸².\",\"à¸ˆ.\",\"à¸­.\",\"à¸ž.\",\"à¸žà¸¤.\",\"à¸¨.\",\"à¸ª.\"],dayNamesMin:[\"à¸­à¸².\",\"à¸ˆ.\",\"à¸­.\",\"à¸ž.\",\"à¸žà¸¤.\",\"à¸¨.\",\"à¸ª.\"],weekHeader:\"Wk\",dateFormat:\"dd/mm/yy\",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"th\",{buttonText:{month:\"à¹€à¸”à¸·à¸­à¸™\",week:\"à¸ªà¸±à¸›à¸”à¸²à¸«à¹Œ\",day:\"à¸§à¸±à¸™\",list:\"à¹à¸œà¸™à¸‡à¸²à¸™\"},allDayText:\"à¸•à¸¥à¸­à¸”à¸§à¸±à¸™\",eventLimitText:\"à¹€à¸žà¸´à¹ˆà¸¡à¹€à¸•à¸´à¸¡\",noEventsMessage:\"à¹„à¸¡à¹ˆà¸¡à¸µà¸à¸´à¸ˆà¸à¸£à¸£à¸¡à¸—à¸µà¹ˆà¸ˆà¸°à¹à¸ªà¸”à¸‡\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"th\",{months:\"à¸¡à¸à¸£à¸²à¸„à¸¡_à¸à¸¸à¸¡à¸ à¸²à¸žà¸±à¸™à¸˜à¹Œ_à¸¡à¸µà¸™à¸²à¸„à¸¡_à¹€à¸¡à¸©à¸²à¸¢à¸™_à¸žà¸¤à¸©à¸ à¸²à¸„à¸¡_à¸¡à¸´à¸–à¸¸à¸™à¸²à¸¢à¸™_à¸à¸£à¸à¸Žà¸²à¸„à¸¡_à¸ªà¸´à¸‡à¸«à¸²à¸„à¸¡_à¸à¸±à¸™à¸¢à¸²à¸¢à¸™_à¸•à¸¸à¸¥à¸²à¸„à¸¡_à¸žà¸¤à¸¨à¸ˆà¸´à¸à¸²à¸¢à¸™_à¸˜à¸±à¸™à¸§à¸²à¸„à¸¡\".split(\"_\"),monthsShort:\"à¸¡.à¸„._à¸.à¸ž._à¸¡à¸µ.à¸„._à¹€à¸¡.à¸¢._à¸ž.à¸„._à¸¡à¸´.à¸¢._à¸.à¸„._à¸ª.à¸„._à¸.à¸¢._à¸•.à¸„._à¸ž.à¸¢._à¸˜.à¸„.\".split(\"_\"),monthsParseExact:!0,weekdays:\"à¸­à¸²à¸—à¸´à¸•à¸¢à¹Œ_à¸ˆà¸±à¸™à¸—à¸£à¹Œ_à¸­à¸±à¸‡à¸„à¸²à¸£_à¸žà¸¸à¸˜_à¸žà¸¤à¸«à¸±à¸ªà¸šà¸”à¸µ_à¸¨à¸¸à¸à¸£à¹Œ_à¹€à¸ªà¸²à¸£à¹Œ\".split(\"_\"),weekdaysShort:\"à¸­à¸²à¸—à¸´à¸•à¸¢à¹Œ_à¸ˆà¸±à¸™à¸—à¸£à¹Œ_à¸­à¸±à¸‡à¸„à¸²à¸£_à¸žà¸¸à¸˜_à¸žà¸¤à¸«à¸±à¸ª_à¸¨à¸¸à¸à¸£à¹Œ_à¹€à¸ªà¸²à¸£à¹Œ\".split(\"_\"),weekdaysMin:\"à¸­à¸²._à¸ˆ._à¸­._à¸ž._à¸žà¸¤._à¸¨._à¸ª.\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY à¹€à¸§à¸¥à¸² H:mm\",LLLL:\"à¸§à¸±à¸™ddddà¸—à¸µà¹ˆ D MMMM YYYY à¹€à¸§à¸¥à¸² H:mm\"},meridiemParse:/à¸à¹ˆà¸­à¸™à¹€à¸—à¸µà¹ˆà¸¢à¸‡|à¸«à¸¥à¸±à¸‡à¹€à¸—à¸µà¹ˆà¸¢à¸‡/,isPM:function(e){return\"à¸«à¸¥à¸±à¸‡à¹€à¸—à¸µà¹ˆà¸¢à¸‡\"===e},meridiem:function(e,a,t){return e<12?\"à¸à¹ˆà¸­à¸™à¹€à¸—à¸µà¹ˆà¸¢à¸‡\":\"à¸«à¸¥à¸±à¸‡à¹€à¸—à¸µà¹ˆà¸¢à¸‡\"},calendar:{sameDay:\"[à¸§à¸±à¸™à¸™à¸µà¹‰ à¹€à¸§à¸¥à¸²] LT\",nextDay:\"[à¸žà¸£à¸¸à¹ˆà¸‡à¸™à¸µà¹‰ à¹€à¸§à¸¥à¸²] LT\",nextWeek:\"dddd[à¸«à¸™à¹‰à¸² à¹€à¸§à¸¥à¸²] LT\",lastDay:\"[à¹€à¸¡à¸·à¹ˆà¸­à¸§à¸²à¸™à¸™à¸µà¹‰ à¹€à¸§à¸¥à¸²] LT\",lastWeek:\"[à¸§à¸±à¸™]dddd[à¸—à¸µà¹ˆà¹à¸¥à¹‰à¸§ à¹€à¸§à¸¥à¸²] LT\",sameElse:\"L\"},relativeTime:{future:\"à¸­à¸µà¸ %s\",past:\"%sà¸—à¸µà¹ˆà¹à¸¥à¹‰à¸§\",s:\"à¹„à¸¡à¹ˆà¸à¸µà¹ˆà¸§à¸´à¸™à¸²à¸—à¸µ\",ss:\"%d à¸§à¸´à¸™à¸²à¸—à¸µ\",m:\"1 à¸™à¸²à¸—à¸µ\",mm:\"%d à¸™à¸²à¸—à¸µ\",h:\"1 à¸Šà¸±à¹ˆà¸§à¹‚à¸¡à¸‡\",hh:\"%d à¸Šà¸±à¹ˆà¸§à¹‚à¸¡à¸‡\",d:\"1 à¸§à¸±à¸™\",dd:\"%d à¸§à¸±à¸™\",M:\"1 à¹€à¸”à¸·à¸­à¸™\",MM:\"%d à¹€à¸”à¸·à¸­à¸™\",y:\"1 à¸›à¸µ\",yy:\"%d à¸›à¸µ\"}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(198);var n=t(1);n.datepickerLocale(\"tr\",\"tr\",{closeText:\"kapat\",prevText:\"&#x3C;geri\",nextText:\"ileri&#x3e\",currentText:\"bugÃ¼n\",monthNames:[\"Ocak\",\"Åžubat\",\"Mart\",\"Nisan\",\"MayÄ±s\",\"Haziran\",\"Temmuz\",\"AÄŸustos\",\"EylÃ¼l\",\"Ekim\",\"KasÄ±m\",\"AralÄ±k\"],monthNamesShort:[\"Oca\",\"Åžub\",\"Mar\",\"Nis\",\"May\",\"Haz\",\"Tem\",\"AÄŸu\",\"Eyl\",\"Eki\",\"Kas\",\"Ara\"],dayNames:[\"Pazar\",\"Pazartesi\",\"SalÄ±\",\"Ã‡arÅŸamba\",\"PerÅŸembe\",\"Cuma\",\"Cumartesi\"],dayNamesShort:[\"Pz\",\"Pt\",\"Sa\",\"Ã‡a\",\"Pe\",\"Cu\",\"Ct\"],dayNamesMin:[\"Pz\",\"Pt\",\"Sa\",\"Ã‡a\",\"Pe\",\"Cu\",\"Ct\"],weekHeader:\"Hf\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"tr\",{buttonText:{next:\"ileri\",month:\"Ay\",week:\"Hafta\",day:\"GÃ¼n\",list:\"Ajanda\"},allDayText:\"TÃ¼m gÃ¼n\",eventLimitText:\"daha fazla\",noEventsMessage:\"Herhangi bir etkinlik gÃ¶rÃ¼ntÃ¼lemek iÃ§in\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){var a={1:\"'inci\",5:\"'inci\",8:\"'inci\",70:\"'inci\",80:\"'inci\",2:\"'nci\",7:\"'nci\",20:\"'nci\",50:\"'nci\",3:\"'Ã¼ncÃ¼\",4:\"'Ã¼ncÃ¼\",100:\"'Ã¼ncÃ¼\",6:\"'ncÄ±\",9:\"'uncu\",10:\"'uncu\",30:\"'uncu\",60:\"'Ä±ncÄ±\",90:\"'Ä±ncÄ±\"};return e.defineLocale(\"tr\",{months:\"Ocak_Åžubat_Mart_Nisan_MayÄ±s_Haziran_Temmuz_AÄŸustos_EylÃ¼l_Ekim_KasÄ±m_AralÄ±k\".split(\"_\"),monthsShort:\"Oca_Åžub_Mar_Nis_May_Haz_Tem_AÄŸu_Eyl_Eki_Kas_Ara\".split(\"_\"),weekdays:\"Pazar_Pazartesi_SalÄ±_Ã‡arÅŸamba_PerÅŸembe_Cuma_Cumartesi\".split(\"_\"),weekdaysShort:\"Paz_Pts_Sal_Ã‡ar_Per_Cum_Cts\".split(\"_\"),weekdaysMin:\"Pz_Pt_Sa_Ã‡a_Pe_Cu_Ct\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[bugÃ¼n saat] LT\",nextDay:\"[yarÄ±n saat] LT\",nextWeek:\"[gelecek] dddd [saat] LT\",lastDay:\"[dÃ¼n] LT\",lastWeek:\"[geÃ§en] dddd [saat] LT\",sameElse:\"L\"},relativeTime:{future:\"%s sonra\",past:\"%s Ã¶nce\",s:\"birkaÃ§ saniye\",ss:\"%d saniye\",m:\"bir dakika\",mm:\"%d dakika\",h:\"bir saat\",hh:\"%d saat\",d:\"bir gÃ¼n\",dd:\"%d gÃ¼n\",M:\"bir ay\",MM:\"%d ay\",y:\"bir yÄ±l\",yy:\"%d yÄ±l\"},ordinal:function(e,t){switch(t){case\"d\":case\"D\":case\"Do\":case\"DD\":return e;default:if(0===e)return e+\"'Ä±ncÄ±\";var n=e%10,r=e%100-n,s=e>=100?100:null;return e+(a[n]||a[r]||a[s])}},week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(200);var n=t(1);n.datepickerLocale(\"uk\",\"uk\",{closeText:\"Ð—Ð°ÐºÑ€Ð¸Ñ‚Ð¸\",prevText:\"&#x3C;\",nextText:\"&#x3E;\",currentText:\"Ð¡ÑŒÐ¾Ð³Ð¾Ð´Ð½Ñ–\",monthNames:[\"Ð¡Ñ–Ñ‡ÐµÐ½ÑŒ\",\"Ð›ÑŽÑ‚Ð¸Ð¹\",\"Ð‘ÐµÑ€ÐµÐ·ÐµÐ½ÑŒ\",\"ÐšÐ²Ñ–Ñ‚ÐµÐ½ÑŒ\",\"Ð¢Ñ€Ð°Ð²ÐµÐ½ÑŒ\",\"Ð§ÐµÑ€Ð²ÐµÐ½ÑŒ\",\"Ð›Ð¸Ð¿ÐµÐ½ÑŒ\",\"Ð¡ÐµÑ€Ð¿ÐµÐ½ÑŒ\",\"Ð’ÐµÑ€ÐµÑÐµÐ½ÑŒ\",\"Ð–Ð¾Ð²Ñ‚ÐµÐ½ÑŒ\",\"Ð›Ð¸ÑÑ‚Ð¾Ð¿Ð°Ð´\",\"Ð“Ñ€ÑƒÐ´ÐµÐ½ÑŒ\"],monthNamesShort:[\"Ð¡Ñ–Ñ‡\",\"Ð›ÑŽÑ‚\",\"Ð‘ÐµÑ€\",\"ÐšÐ²Ñ–\",\"Ð¢Ñ€Ð°\",\"Ð§ÐµÑ€\",\"Ð›Ð¸Ð¿\",\"Ð¡ÐµÑ€\",\"Ð’ÐµÑ€\",\"Ð–Ð¾Ð²\",\"Ð›Ð¸Ñ\",\"Ð“Ñ€Ñƒ\"],dayNames:[\"Ð½ÐµÐ´Ñ–Ð»Ñ\",\"Ð¿Ð¾Ð½ÐµÐ´Ñ–Ð»Ð¾Ðº\",\"Ð²Ñ–Ð²Ñ‚Ð¾Ñ€Ð¾Ðº\",\"ÑÐµÑ€ÐµÐ´Ð°\",\"Ñ‡ÐµÑ‚Ð²ÐµÑ€\",\"Ð¿â€™ÑÑ‚Ð½Ð¸Ñ†Ñ\",\"ÑÑƒÐ±Ð¾Ñ‚Ð°\"],dayNamesShort:[\"Ð½ÐµÐ´\",\"Ð¿Ð½Ð´\",\"Ð²Ñ–Ð²\",\"ÑÑ€Ð´\",\"Ñ‡Ñ‚Ð²\",\"Ð¿Ñ‚Ð½\",\"ÑÐ±Ñ‚\"],dayNamesMin:[\"ÐÐ´\",\"ÐŸÐ½\",\"Ð’Ñ‚\",\"Ð¡Ñ€\",\"Ð§Ñ‚\",\"ÐŸÑ‚\",\"Ð¡Ð±\"],weekHeader:\"Ð¢Ð¸Ð¶\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"uk\",{buttonText:{month:\"ÐœÑ–ÑÑÑ†ÑŒ\",week:\"Ð¢Ð¸Ð¶Ð´ÐµÐ½ÑŒ\",day:\"Ð”ÐµÐ½ÑŒ\",list:\"ÐŸÐ¾Ñ€ÑÐ´Ð¾Ðº Ð´ÐµÐ½Ð½Ð¸Ð¹\"},allDayText:\"Ð£Ð²ÐµÑÑŒ Ð´ÐµÐ½ÑŒ\",eventLimitText:function(e){return\"+Ñ‰Ðµ \"+e+\"...\"},noEventsMessage:\"ÐÐµÐ¼Ð°Ñ” Ð¿Ð¾Ð´Ñ–Ð¹ Ð´Ð»Ñ Ð²Ñ–Ð´Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a){var t=e.split(\"_\");return a%10==1&&a%100!=11?t[0]:a%10>=2&&a%10<=4&&(a%100<10||a%100>=20)?t[1]:t[2]}function t(e,t,n){var r={ss:t?\"ÑÐµÐºÑƒÐ½Ð´Ð°_ÑÐµÐºÑƒÐ½Ð´Ð¸_ÑÐµÐºÑƒÐ½Ð´\":\"ÑÐµÐºÑƒÐ½Ð´Ñƒ_ÑÐµÐºÑƒÐ½Ð´Ð¸_ÑÐµÐºÑƒÐ½Ð´\",mm:t?\"Ñ…Ð²Ð¸Ð»Ð¸Ð½Ð°_Ñ…Ð²Ð¸Ð»Ð¸Ð½Ð¸_Ñ…Ð²Ð¸Ð»Ð¸Ð½\":\"Ñ…Ð²Ð¸Ð»Ð¸Ð½Ñƒ_Ñ…Ð²Ð¸Ð»Ð¸Ð½Ð¸_Ñ…Ð²Ð¸Ð»Ð¸Ð½\",hh:t?\"Ð³Ð¾Ð´Ð¸Ð½Ð°_Ð³Ð¾Ð´Ð¸Ð½Ð¸_Ð³Ð¾Ð´Ð¸Ð½\":\"Ð³Ð¾Ð´Ð¸Ð½Ñƒ_Ð³Ð¾Ð´Ð¸Ð½Ð¸_Ð³Ð¾Ð´Ð¸Ð½\",dd:\"Ð´ÐµÐ½ÑŒ_Ð´Ð½Ñ–_Ð´Ð½Ñ–Ð²\",MM:\"Ð¼Ñ–ÑÑÑ†ÑŒ_Ð¼Ñ–ÑÑÑ†Ñ–_Ð¼Ñ–ÑÑÑ†Ñ–Ð²\",yy:\"Ñ€Ñ–Ðº_Ñ€Ð¾ÐºÐ¸_Ñ€Ð¾ÐºÑ–Ð²\"};return\"m\"===n?t?\"Ñ…Ð²Ð¸Ð»Ð¸Ð½Ð°\":\"Ñ…Ð²Ð¸Ð»Ð¸Ð½Ñƒ\":\"h\"===n?t?\"Ð³Ð¾Ð´Ð¸Ð½Ð°\":\"Ð³Ð¾Ð´Ð¸Ð½Ñƒ\":e+\" \"+a(r[n],+e)}function n(e,a){var t={nominative:\"Ð½ÐµÐ´Ñ–Ð»Ñ_Ð¿Ð¾Ð½ÐµÐ´Ñ–Ð»Ð¾Ðº_Ð²Ñ–Ð²Ñ‚Ð¾Ñ€Ð¾Ðº_ÑÐµÑ€ÐµÐ´Ð°_Ñ‡ÐµÑ‚Ð²ÐµÑ€_Ð¿â€™ÑÑ‚Ð½Ð¸Ñ†Ñ_ÑÑƒÐ±Ð¾Ñ‚Ð°\".split(\"_\"),accusative:\"Ð½ÐµÐ´Ñ–Ð»ÑŽ_Ð¿Ð¾Ð½ÐµÐ´Ñ–Ð»Ð¾Ðº_Ð²Ñ–Ð²Ñ‚Ð¾Ñ€Ð¾Ðº_ÑÐµÑ€ÐµÐ´Ñƒ_Ñ‡ÐµÑ‚Ð²ÐµÑ€_Ð¿â€™ÑÑ‚Ð½Ð¸Ñ†ÑŽ_ÑÑƒÐ±Ð¾Ñ‚Ñƒ\".split(\"_\"),genitive:\"Ð½ÐµÐ´Ñ–Ð»Ñ–_Ð¿Ð¾Ð½ÐµÐ´Ñ–Ð»ÐºÐ°_Ð²Ñ–Ð²Ñ‚Ð¾Ñ€ÐºÐ°_ÑÐµÑ€ÐµÐ´Ð¸_Ñ‡ÐµÑ‚Ð²ÐµÑ€Ð³Ð°_Ð¿â€™ÑÑ‚Ð½Ð¸Ñ†Ñ–_ÑÑƒÐ±Ð¾Ñ‚Ð¸\".split(\"_\")};return e?t[/(\\[[Ð’Ð²Ð£Ñƒ]\\]) ?dddd/.test(a)?\"accusative\":/\\[?(?:Ð¼Ð¸Ð½ÑƒÐ»Ð¾Ñ—|Ð½Ð°ÑÑ‚ÑƒÐ¿Ð½Ð¾Ñ—)? ?\\] ?dddd/.test(a)?\"genitive\":\"nominative\"][e.day()]:t.nominative}function r(e){return function(){return e+\"Ð¾\"+(11===this.hours()?\"Ð±\":\"\")+\"] LT\"}}return e.defineLocale(\"uk\",{months:{format:\"ÑÑ–Ñ‡Ð½Ñ_Ð»ÑŽÑ‚Ð¾Ð³Ð¾_Ð±ÐµÑ€ÐµÐ·Ð½Ñ_ÐºÐ²Ñ–Ñ‚Ð½Ñ_Ñ‚Ñ€Ð°Ð²Ð½Ñ_Ñ‡ÐµÑ€Ð²Ð½Ñ_Ð»Ð¸Ð¿Ð½Ñ_ÑÐµÑ€Ð¿Ð½Ñ_Ð²ÐµÑ€ÐµÑÐ½Ñ_Ð¶Ð¾Ð²Ñ‚Ð½Ñ_Ð»Ð¸ÑÑ‚Ð¾Ð¿Ð°Ð´Ð°_Ð³Ñ€ÑƒÐ´Ð½Ñ\".split(\"_\"),standalone:\"ÑÑ–Ñ‡ÐµÐ½ÑŒ_Ð»ÑŽÑ‚Ð¸Ð¹_Ð±ÐµÑ€ÐµÐ·ÐµÐ½ÑŒ_ÐºÐ²Ñ–Ñ‚ÐµÐ½ÑŒ_Ñ‚Ñ€Ð°Ð²ÐµÐ½ÑŒ_Ñ‡ÐµÑ€Ð²ÐµÐ½ÑŒ_Ð»Ð¸Ð¿ÐµÐ½ÑŒ_ÑÐµÑ€Ð¿ÐµÐ½ÑŒ_Ð²ÐµÑ€ÐµÑÐµÐ½ÑŒ_Ð¶Ð¾Ð²Ñ‚ÐµÐ½ÑŒ_Ð»Ð¸ÑÑ‚Ð¾Ð¿Ð°Ð´_Ð³Ñ€ÑƒÐ´ÐµÐ½ÑŒ\".split(\"_\")},monthsShort:\"ÑÑ–Ñ‡_Ð»ÑŽÑ‚_Ð±ÐµÑ€_ÐºÐ²Ñ–Ñ‚_Ñ‚Ñ€Ð°Ð²_Ñ‡ÐµÑ€Ð²_Ð»Ð¸Ð¿_ÑÐµÑ€Ð¿_Ð²ÐµÑ€_Ð¶Ð¾Ð²Ñ‚_Ð»Ð¸ÑÑ‚_Ð³Ñ€ÑƒÐ´\".split(\"_\"),weekdays:n,weekdaysShort:\"Ð½Ð´_Ð¿Ð½_Ð²Ñ‚_ÑÑ€_Ñ‡Ñ‚_Ð¿Ñ‚_ÑÐ±\".split(\"_\"),weekdaysMin:\"Ð½Ð´_Ð¿Ð½_Ð²Ñ‚_ÑÑ€_Ñ‡Ñ‚_Ð¿Ñ‚_ÑÐ±\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY Ñ€.\",LLL:\"D MMMM YYYY Ñ€., HH:mm\",LLLL:\"dddd, D MMMM YYYY Ñ€., HH:mm\"},calendar:{sameDay:r(\"[Ð¡ÑŒÐ¾Ð³Ð¾Ð´Ð½Ñ– \"),nextDay:r(\"[Ð—Ð°Ð²Ñ‚Ñ€Ð° \"),lastDay:r(\"[Ð’Ñ‡Ð¾Ñ€Ð° \"),nextWeek:r(\"[Ð£] dddd [\"),lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return r(\"[ÐœÐ¸Ð½ÑƒÐ»Ð¾Ñ—] dddd [\").call(this);case 1:case 2:case 4:return r(\"[ÐœÐ¸Ð½ÑƒÐ»Ð¾Ð³Ð¾] dddd [\").call(this)}},sameElse:\"L\"},relativeTime:{future:\"Ð·Ð° %s\",past:\"%s Ñ‚Ð¾Ð¼Ñƒ\",s:\"Ð´ÐµÐºÑ–Ð»ÑŒÐºÐ° ÑÐµÐºÑƒÐ½Ð´\",ss:t,m:t,mm:t,h:\"Ð³Ð¾Ð´Ð¸Ð½Ñƒ\",hh:t,d:\"Ð´ÐµÐ½ÑŒ\",dd:t,M:\"Ð¼Ñ–ÑÑÑ†ÑŒ\",MM:t,y:\"Ñ€Ñ–Ðº\",yy:t},meridiemParse:/Ð½Ð¾Ñ‡Ñ–|Ñ€Ð°Ð½ÐºÑƒ|Ð´Ð½Ñ|Ð²ÐµÑ‡Ð¾Ñ€Ð°/,isPM:function(e){return/^(Ð´Ð½Ñ|Ð²ÐµÑ‡Ð¾Ñ€Ð°)$/.test(e)},meridiem:function(e,a,t){return e<4?\"Ð½Ð¾Ñ‡Ñ–\":e<12?\"Ñ€Ð°Ð½ÐºÑƒ\":e<17?\"Ð´Ð½Ñ\":\"Ð²ÐµÑ‡Ð¾Ñ€Ð°\"},dayOfMonthOrdinalParse:/\\d{1,2}-(Ð¹|Ð³Ð¾)/,ordinal:function(e,a){switch(a){case\"M\":case\"d\":case\"DDD\":case\"w\":case\"W\":return e+\"-Ð¹\"\n;case\"D\":return e+\"-Ð³Ð¾\";default:return e}},week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(202);var n=t(1);n.datepickerLocale(\"vi\",\"vi\",{closeText:\"ÄÃ³ng\",prevText:\"&#x3C;TrÆ°á»›c\",nextText:\"Tiáº¿p&#x3E;\",currentText:\"HÃ´m nay\",monthNames:[\"ThÃ¡ng Má»™t\",\"ThÃ¡ng Hai\",\"ThÃ¡ng Ba\",\"ThÃ¡ng TÆ°\",\"ThÃ¡ng NÄƒm\",\"ThÃ¡ng SÃ¡u\",\"ThÃ¡ng Báº£y\",\"ThÃ¡ng TÃ¡m\",\"ThÃ¡ng ChÃ­n\",\"ThÃ¡ng MÆ°á»i\",\"ThÃ¡ng MÆ°á»i Má»™t\",\"ThÃ¡ng MÆ°á»i Hai\"],monthNamesShort:[\"ThÃ¡ng 1\",\"ThÃ¡ng 2\",\"ThÃ¡ng 3\",\"ThÃ¡ng 4\",\"ThÃ¡ng 5\",\"ThÃ¡ng 6\",\"ThÃ¡ng 7\",\"ThÃ¡ng 8\",\"ThÃ¡ng 9\",\"ThÃ¡ng 10\",\"ThÃ¡ng 11\",\"ThÃ¡ng 12\"],dayNames:[\"Chá»§ Nháº­t\",\"Thá»© Hai\",\"Thá»© Ba\",\"Thá»© TÆ°\",\"Thá»© NÄƒm\",\"Thá»© SÃ¡u\",\"Thá»© Báº£y\"],dayNamesShort:[\"CN\",\"T2\",\"T3\",\"T4\",\"T5\",\"T6\",\"T7\"],dayNamesMin:[\"CN\",\"T2\",\"T3\",\"T4\",\"T5\",\"T6\",\"T7\"],weekHeader:\"Tu\",dateFormat:\"dd/mm/yy\",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"vi\",{buttonText:{month:\"ThÃ¡ng\",week:\"TuÃ¢Ì€n\",day:\"NgÃ y\",list:\"Lá»‹ch biá»ƒu\"},allDayText:\"Cáº£ ngÃ y\",eventLimitText:function(e){return\"+ thÃªm \"+e},noEventsMessage:\"KhÃ´ng cÃ³ sá»± kiá»‡n Ä‘á»ƒ hiá»ƒn thá»‹\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"vi\",{months:\"thÃ¡ng 1_thÃ¡ng 2_thÃ¡ng 3_thÃ¡ng 4_thÃ¡ng 5_thÃ¡ng 6_thÃ¡ng 7_thÃ¡ng 8_thÃ¡ng 9_thÃ¡ng 10_thÃ¡ng 11_thÃ¡ng 12\".split(\"_\"),monthsShort:\"Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12\".split(\"_\"),monthsParseExact:!0,weekdays:\"chá»§ nháº­t_thá»© hai_thá»© ba_thá»© tÆ°_thá»© nÄƒm_thá»© sÃ¡u_thá»© báº£y\".split(\"_\"),weekdaysShort:\"CN_T2_T3_T4_T5_T6_T7\".split(\"_\"),weekdaysMin:\"CN_T2_T3_T4_T5_T6_T7\".split(\"_\"),weekdaysParseExact:!0,meridiemParse:/sa|ch/i,isPM:function(e){return/^ch$/i.test(e)},meridiem:function(e,a,t){return e<12?t?\"sa\":\"SA\":t?\"ch\":\"CH\"},longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM [nÄƒm] YYYY\",LLL:\"D MMMM [nÄƒm] YYYY HH:mm\",LLLL:\"dddd, D MMMM [nÄƒm] YYYY HH:mm\",l:\"DD/M/YYYY\",ll:\"D MMM YYYY\",lll:\"D MMM YYYY HH:mm\",llll:\"ddd, D MMM YYYY HH:mm\"},calendar:{sameDay:\"[HÃ´m nay lÃºc] LT\",nextDay:\"[NgÃ y mai lÃºc] LT\",nextWeek:\"dddd [tuáº§n tá»›i lÃºc] LT\",lastDay:\"[HÃ´m qua lÃºc] LT\",lastWeek:\"dddd [tuáº§n rá»“i lÃºc] LT\",sameElse:\"L\"},relativeTime:{future:\"%s tá»›i\",past:\"%s trÆ°á»›c\",s:\"vÃ i giÃ¢y\",ss:\"%d giÃ¢y\",m:\"má»™t phÃºt\",mm:\"%d phÃºt\",h:\"má»™t giá»\",hh:\"%d giá»\",d:\"má»™t ngÃ y\",dd:\"%d ngÃ y\",M:\"má»™t thÃ¡ng\",MM:\"%d thÃ¡ng\",y:\"má»™t nÄƒm\",yy:\"%d nÄƒm\"},dayOfMonthOrdinalParse:/\\d{1,2}/,ordinal:function(e){return e},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(204);var n=t(1);n.datepickerLocale(\"zh-cn\",\"zh-CN\",{closeText:\"å…³é—­\",prevText:\"&#x3C;ä¸Šæœˆ\",nextText:\"ä¸‹æœˆ&#x3E;\",currentText:\"ä»Šå¤©\",monthNames:[\"ä¸€æœˆ\",\"äºŒæœˆ\",\"ä¸‰æœˆ\",\"å››æœˆ\",\"äº”æœˆ\",\"å…­æœˆ\",\"ä¸ƒæœˆ\",\"å…«æœˆ\",\"ä¹æœˆ\",\"åæœˆ\",\"åä¸€æœˆ\",\"åäºŒæœˆ\"],monthNamesShort:[\"ä¸€æœˆ\",\"äºŒæœˆ\",\"ä¸‰æœˆ\",\"å››æœˆ\",\"äº”æœˆ\",\"å…­æœˆ\",\"ä¸ƒæœˆ\",\"å…«æœˆ\",\"ä¹æœˆ\",\"åæœˆ\",\"åä¸€æœˆ\",\"åäºŒæœˆ\"],dayNames:[\"æ˜ŸæœŸæ—¥\",\"æ˜ŸæœŸä¸€\",\"æ˜ŸæœŸäºŒ\",\"æ˜ŸæœŸä¸‰\",\"æ˜ŸæœŸå››\",\"æ˜ŸæœŸäº”\",\"æ˜ŸæœŸå…­\"],dayNamesShort:[\"å‘¨æ—¥\",\"å‘¨ä¸€\",\"å‘¨äºŒ\",\"å‘¨ä¸‰\",\"å‘¨å››\",\"å‘¨äº”\",\"å‘¨å…­\"],dayNamesMin:[\"æ—¥\",\"ä¸€\",\"äºŒ\",\"ä¸‰\",\"å››\",\"äº”\",\"å…­\"],weekHeader:\"å‘¨\",dateFormat:\"yy-mm-dd\",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:\"å¹´\"}),n.locale(\"zh-cn\",{buttonText:{month:\"æœˆ\",week:\"å‘¨\",day:\"æ—¥\",list:\"æ—¥ç¨‹\"},allDayText:\"å…¨å¤©\",eventLimitText:function(e){return\"å¦å¤– \"+e+\" ä¸ª\"},noEventsMessage:\"æ²¡æœ‰äº‹ä»¶æ˜¾ç¤º\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"zh-cn\",{months:\"ä¸€æœˆ_äºŒæœˆ_ä¸‰æœˆ_å››æœˆ_äº”æœˆ_å…­æœˆ_ä¸ƒæœˆ_å…«æœˆ_ä¹æœˆ_åæœˆ_åä¸€æœˆ_åäºŒæœˆ\".split(\"_\"),monthsShort:\"1æœˆ_2æœˆ_3æœˆ_4æœˆ_5æœˆ_6æœˆ_7æœˆ_8æœˆ_9æœˆ_10æœˆ_11æœˆ_12æœˆ\".split(\"_\"),weekdays:\"æ˜ŸæœŸæ—¥_æ˜ŸæœŸä¸€_æ˜ŸæœŸäºŒ_æ˜ŸæœŸä¸‰_æ˜ŸæœŸå››_æ˜ŸæœŸäº”_æ˜ŸæœŸå…­\".split(\"_\"),weekdaysShort:\"å‘¨æ—¥_å‘¨ä¸€_å‘¨äºŒ_å‘¨ä¸‰_å‘¨å››_å‘¨äº”_å‘¨å…­\".split(\"_\"),weekdaysMin:\"æ—¥_ä¸€_äºŒ_ä¸‰_å››_äº”_å…­\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY/MM/DD\",LL:\"YYYYå¹´MæœˆDæ—¥\",LLL:\"YYYYå¹´MæœˆDæ—¥Ahç‚¹mmåˆ†\",LLLL:\"YYYYå¹´MæœˆDæ—¥ddddAhç‚¹mmåˆ†\",l:\"YYYY/M/D\",ll:\"YYYYå¹´MæœˆDæ—¥\",lll:\"YYYYå¹´MæœˆDæ—¥ HH:mm\",llll:\"YYYYå¹´MæœˆDæ—¥dddd HH:mm\"},meridiemParse:/å‡Œæ™¨|æ—©ä¸Š|ä¸Šåˆ|ä¸­åˆ|ä¸‹åˆ|æ™šä¸Š/,meridiemHour:function(e,a){return 12===e&&(e=0),\"å‡Œæ™¨\"===a||\"æ—©ä¸Š\"===a||\"ä¸Šåˆ\"===a?e:\"ä¸‹åˆ\"===a||\"æ™šä¸Š\"===a?e+12:e>=11?e:e+12},meridiem:function(e,a,t){var n=100*e+a;return n<600?\"å‡Œæ™¨\":n<900?\"æ—©ä¸Š\":n<1130?\"ä¸Šåˆ\":n<1230?\"ä¸­åˆ\":n<1800?\"ä¸‹åˆ\":\"æ™šä¸Š\"},calendar:{sameDay:\"[ä»Šå¤©]LT\",nextDay:\"[æ˜Žå¤©]LT\",nextWeek:\"[ä¸‹]ddddLT\",lastDay:\"[æ˜¨å¤©]LT\",lastWeek:\"[ä¸Š]ddddLT\",sameElse:\"L\"},dayOfMonthOrdinalParse:/\\d{1,2}(æ—¥|æœˆ|å‘¨)/,ordinal:function(e,a){switch(a){case\"d\":case\"D\":case\"DDD\":return e+\"æ—¥\";case\"M\":return e+\"æœˆ\";case\"w\":case\"W\":return e+\"å‘¨\";default:return e}},relativeTime:{future:\"%så†…\",past:\"%så‰\",s:\"å‡ ç§’\",ss:\"%d ç§’\",m:\"1 åˆ†é’Ÿ\",mm:\"%d åˆ†é’Ÿ\",h:\"1 å°æ—¶\",hh:\"%d å°æ—¶\",d:\"1 å¤©\",dd:\"%d å¤©\",M:\"1 ä¸ªæœˆ\",MM:\"%d ä¸ªæœˆ\",y:\"1 å¹´\",yy:\"%d å¹´\"},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(206);var n=t(1);n.datepickerLocale(\"zh-tw\",\"zh-TW\",{closeText:\"é—œé–‰\",prevText:\"&#x3C;ä¸Šæœˆ\",nextText:\"ä¸‹æœˆ&#x3E;\",currentText:\"ä»Šå¤©\",monthNames:[\"ä¸€æœˆ\",\"äºŒæœˆ\",\"ä¸‰æœˆ\",\"å››æœˆ\",\"äº”æœˆ\",\"å…­æœˆ\",\"ä¸ƒæœˆ\",\"å…«æœˆ\",\"ä¹æœˆ\",\"åæœˆ\",\"åä¸€æœˆ\",\"åäºŒæœˆ\"],monthNamesShort:[\"ä¸€æœˆ\",\"äºŒæœˆ\",\"ä¸‰æœˆ\",\"å››æœˆ\",\"äº”æœˆ\",\"å…­æœˆ\",\"ä¸ƒæœˆ\",\"å…«æœˆ\",\"ä¹æœˆ\",\"åæœˆ\",\"åä¸€æœˆ\",\"åäºŒæœˆ\"],dayNames:[\"æ˜ŸæœŸæ—¥\",\"æ˜ŸæœŸä¸€\",\"æ˜ŸæœŸäºŒ\",\"æ˜ŸæœŸä¸‰\",\"æ˜ŸæœŸå››\",\"æ˜ŸæœŸäº”\",\"æ˜ŸæœŸå…­\"],dayNamesShort:[\"å‘¨æ—¥\",\"å‘¨ä¸€\",\"å‘¨äºŒ\",\"å‘¨ä¸‰\",\"å‘¨å››\",\"å‘¨äº”\",\"å‘¨å…­\"],dayNamesMin:[\"æ—¥\",\"ä¸€\",\"äºŒ\",\"ä¸‰\",\"å››\",\"äº”\",\"å…­\"],weekHeader:\"å‘¨\",dateFormat:\"yy/mm/dd\",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:\"å¹´\"}),n.locale(\"zh-tw\",{buttonText:{month:\"æœˆ\",week:\"é€±\",day:\"å¤©\",list:\"æ´»å‹•åˆ—è¡¨\"},allDayText:\"æ•´å¤©\",eventLimitText:\"é¡¯ç¤ºæ›´å¤š\",noEventsMessage:\"æ²¡æœ‰ä»»ä½•æ´»å‹•\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"zh-tw\",{months:\"ä¸€æœˆ_äºŒæœˆ_ä¸‰æœˆ_å››æœˆ_äº”æœˆ_å…­æœˆ_ä¸ƒæœˆ_å…«æœˆ_ä¹æœˆ_åæœˆ_åä¸€æœˆ_åäºŒæœˆ\".split(\"_\"),monthsShort:\"1æœˆ_2æœˆ_3æœˆ_4æœˆ_5æœˆ_6æœˆ_7æœˆ_8æœˆ_9æœˆ_10æœˆ_11æœˆ_12æœˆ\".split(\"_\"),weekdays:\"æ˜ŸæœŸæ—¥_æ˜ŸæœŸä¸€_æ˜ŸæœŸäºŒ_æ˜ŸæœŸä¸‰_æ˜ŸæœŸå››_æ˜ŸæœŸäº”_æ˜ŸæœŸå…­\".split(\"_\"),weekdaysShort:\"é€±æ—¥_é€±ä¸€_é€±äºŒ_é€±ä¸‰_é€±å››_é€±äº”_é€±å…­\".split(\"_\"),weekdaysMin:\"æ—¥_ä¸€_äºŒ_ä¸‰_å››_äº”_å…­\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY/MM/DD\",LL:\"YYYYå¹´MæœˆDæ—¥\",LLL:\"YYYYå¹´MæœˆDæ—¥ HH:mm\",LLLL:\"YYYYå¹´MæœˆDæ—¥dddd HH:mm\",l:\"YYYY/M/D\",ll:\"YYYYå¹´MæœˆDæ—¥\",lll:\"YYYYå¹´MæœˆDæ—¥ HH:mm\",llll:\"YYYYå¹´MæœˆDæ—¥dddd HH:mm\"},meridiemParse:/å‡Œæ™¨|æ—©ä¸Š|ä¸Šåˆ|ä¸­åˆ|ä¸‹åˆ|æ™šä¸Š/,meridiemHour:function(e,a){return 12===e&&(e=0),\"å‡Œæ™¨\"===a||\"æ—©ä¸Š\"===a||\"ä¸Šåˆ\"===a?e:\"ä¸­åˆ\"===a?e>=11?e:e+12:\"ä¸‹åˆ\"===a||\"æ™šä¸Š\"===a?e+12:void 0},meridiem:function(e,a,t){var n=100*e+a;return n<600?\"å‡Œæ™¨\":n<900?\"æ—©ä¸Š\":n<1130?\"ä¸Šåˆ\":n<1230?\"ä¸­åˆ\":n<1800?\"ä¸‹åˆ\":\"æ™šä¸Š\"},calendar:{sameDay:\"[ä»Šå¤©]LT\",nextDay:\"[æ˜Žå¤©]LT\",nextWeek:\"[ä¸‹]ddddLT\",lastDay:\"[æ˜¨å¤©]LT\",lastWeek:\"[ä¸Š]ddddLT\",sameElse:\"L\"},dayOfMonthOrdinalParse:/\\d{1,2}(æ—¥|æœˆ|é€±)/,ordinal:function(e,a){switch(a){case\"d\":case\"D\":case\"DDD\":return e+\"æ—¥\";case\"M\":return e+\"æœˆ\";case\"w\":case\"W\":return e+\"é€±\";default:return e}},relativeTime:{future:\"%så…§\",past:\"%så‰\",s:\"å¹¾ç§’\",ss:\"%d ç§’\",m:\"1 åˆ†é˜\",mm:\"%d åˆ†é˜\",h:\"1 å°æ™‚\",hh:\"%d å°æ™‚\",d:\"1 å¤©\",dd:\"%d å¤©\",M:\"1 å€‹æœˆ\",MM:\"%d å€‹æœˆ\",y:\"1 å¹´\",yy:\"%d å¹´\"}})})},,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,function(e,a,t){t(65),t(67),t(69),t(71),t(73),t(75),t(77),t(79),t(81),t(83),t(85),t(87),t(89),t(91),t(93),t(95),t(97),t(99),t(101),t(103),t(105),t(107),t(109),t(111),t(113),t(115),t(117),t(119),t(121),t(123),t(125),t(127),t(129),t(131),t(133),t(135),t(137),t(139),t(141),t(143),t(145),t(147),t(149),t(151),t(153),t(155),t(157),t(159),t(161),t(163),t(165),t(167),t(169),t(171),t(173),t(175),t(177),t(179),t(181),t(183),t(185),t(187),t(189),t(191),t(193),t(195),t(197),t(199),t(201),t(203),t(205),e.exports=t(435)},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0});var n=t(0),r=t(1);n.locale(\"en\"),r.locale(\"en\"),window.jQuery.datepicker&&window.jQuery.datepicker.setDefaults(window.jQuery.datepicker.regional[\"\"])}])});"
  },
  {
    "path": "public/backend/vendors/js/extensions/locale-all.js",
    "content": "!function(e,a){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=a(require(\"moment\"),require(\"fullcalendar\")):\"function\"==typeof define&&define.amd?define([\"moment\",\"fullcalendar\"],a):\"object\"==typeof exports?a(require(\"moment\"),require(\"fullcalendar\")):a(e.moment,e.FullCalendar)}(\"undefined\"!=typeof self?self:this,function(e,a){return function(e){function a(n){if(t[n])return t[n].exports;var r=t[n]={i:n,l:!1,exports:{}};return e[n].call(r.exports,r,r.exports,a),r.l=!0,r.exports}var t={};return a.m=e,a.c=t,a.d=function(e,t,n){a.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:n})},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,\"a\",t),t},a.o=function(e,a){return Object.prototype.hasOwnProperty.call(e,a)},a.p=\"\",a(a.s=438)}([function(a,t){a.exports=e},function(e,t){e.exports=a},,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(72);var n=t(1);n.datepickerLocale(\"af\",\"af\",{closeText:\"Selekteer\",prevText:\"Vorige\",nextText:\"Volgende\",currentText:\"Vandag\",monthNames:[\"Januarie\",\"Februarie\",\"Maart\",\"April\",\"Mei\",\"Junie\",\"Julie\",\"Augustus\",\"September\",\"Oktober\",\"November\",\"Desember\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mrt\",\"Apr\",\"Mei\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Okt\",\"Nov\",\"Des\"],dayNames:[\"Sondag\",\"Maandag\",\"Dinsdag\",\"Woensdag\",\"Donderdag\",\"Vrydag\",\"Saterdag\"],dayNamesShort:[\"Son\",\"Maa\",\"Din\",\"Woe\",\"Don\",\"Vry\",\"Sat\"],dayNamesMin:[\"So\",\"Ma\",\"Di\",\"Wo\",\"Do\",\"Vr\",\"Sa\"],weekHeader:\"Wk\",dateFormat:\"dd/mm/yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"af\",{buttonText:{year:\"Jaar\",month:\"Maand\",week:\"Week\",day:\"Dag\",list:\"Agenda\"},allDayHtml:\"Heeldag\",eventLimitText:\"Addisionele\",noEventsMessage:\"Daar is geen gebeurtenisse nie\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"af\",{months:\"Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember\".split(\"_\"),monthsShort:\"Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des\".split(\"_\"),weekdays:\"Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag\".split(\"_\"),weekdaysShort:\"Son_Maa_Din_Woe_Don_Vry_Sat\".split(\"_\"),weekdaysMin:\"So_Ma_Di_Wo_Do_Vr_Sa\".split(\"_\"),meridiemParse:/vm|nm/i,isPM:function(e){return/^nm$/i.test(e)},meridiem:function(e,a,t){return e<12?t?\"vm\":\"VM\":t?\"nm\":\"NM\"},longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Vandag om] LT\",nextDay:\"[Môre om] LT\",nextWeek:\"dddd [om] LT\",lastDay:\"[Gister om] LT\",lastWeek:\"[Laas] dddd [om] LT\",sameElse:\"L\"},relativeTime:{future:\"oor %s\",past:\"%s gelede\",s:\"'n paar sekondes\",ss:\"%d sekondes\",m:\"'n minuut\",mm:\"%d minute\",h:\"'n uur\",hh:\"%d ure\",d:\"'n dag\",dd:\"%d dae\",M:\"'n maand\",MM:\"%d maande\",y:\"'n jaar\",yy:\"%d jaar\"},dayOfMonthOrdinalParse:/\\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||e>=20?\"ste\":\"de\")},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(74);var n=t(1);n.datepickerLocale(\"ar-dz\",\"ar-DZ\",{closeText:\"إغلاق\",prevText:\"&#x3C;السابق\",nextText:\"التالي&#x3E;\",currentText:\"اليوم\",monthNames:[\"جانفي\",\"فيفري\",\"مارس\",\"أفريل\",\"ماي\",\"جوان\",\"جويلية\",\"أوت\",\"سبتمبر\",\"أكتوبر\",\"نوفمبر\",\"ديسمبر\"],monthNamesShort:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],dayNames:[\"الأحد\",\"الاثنين\",\"الثلاثاء\",\"الأربعاء\",\"الخميس\",\"الجمعة\",\"السبت\"],dayNamesShort:[\"الأحد\",\"الاثنين\",\"الثلاثاء\",\"الأربعاء\",\"الخميس\",\"الجمعة\",\"السبت\"],dayNamesMin:[\"ح\",\"ن\",\"ث\",\"ر\",\"خ\",\"ج\",\"س\"],weekHeader:\"أسبوع\",dateFormat:\"dd/mm/yy\",firstDay:6,isRTL:!0,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"ar-dz\",{buttonText:{month:\"شهر\",week:\"أسبوع\",day:\"يوم\",list:\"أجندة\"},allDayText:\"اليوم كله\",eventLimitText:\"أخرى\",noEventsMessage:\"أي أحداث لعرض\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"ar-dz\",{months:\"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر\".split(\"_\"),monthsShort:\"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر\".split(\"_\"),weekdays:\"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت\".split(\"_\"),weekdaysShort:\"احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت\".split(\"_\"),weekdaysMin:\"أح_إث_ثلا_أر_خم_جم_سب\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[اليوم على الساعة] LT\",nextDay:\"[غدا على الساعة] LT\",nextWeek:\"dddd [على الساعة] LT\",lastDay:\"[أمس على الساعة] LT\",lastWeek:\"dddd [على الساعة] LT\",sameElse:\"L\"},relativeTime:{future:\"في %s\",past:\"منذ %s\",s:\"ثوان\",ss:\"%d ثانية\",m:\"دقيقة\",mm:\"%d دقائق\",h:\"ساعة\",hh:\"%d ساعات\",d:\"يوم\",dd:\"%d أيام\",M:\"شهر\",MM:\"%d أشهر\",y:\"سنة\",yy:\"%d سنوات\"},week:{dow:0,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(76);var n=t(1);n.datepickerLocale(\"ar-kw\",\"ar\",{closeText:\"إغلاق\",prevText:\"&#x3C;السابق\",nextText:\"التالي&#x3E;\",currentText:\"اليوم\",monthNames:[\"يناير\",\"فبراير\",\"مارس\",\"أبريل\",\"مايو\",\"يونيو\",\"يوليو\",\"أغسطس\",\"سبتمبر\",\"أكتوبر\",\"نوفمبر\",\"ديسمبر\"],monthNamesShort:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],dayNames:[\"الأحد\",\"الاثنين\",\"الثلاثاء\",\"الأربعاء\",\"الخميس\",\"الجمعة\",\"السبت\"],dayNamesShort:[\"أحد\",\"اثنين\",\"ثلاثاء\",\"أربعاء\",\"خميس\",\"جمعة\",\"سبت\"],dayNamesMin:[\"ح\",\"ن\",\"ث\",\"ر\",\"خ\",\"ج\",\"س\"],weekHeader:\"أسبوع\",dateFormat:\"dd/mm/yy\",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"ar-kw\",{buttonText:{month:\"شهر\",week:\"أسبوع\",day:\"يوم\",list:\"أجندة\"},allDayText:\"اليوم كله\",eventLimitText:\"أخرى\",noEventsMessage:\"أي أحداث لعرض\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"ar-kw\",{months:\"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر\".split(\"_\"),monthsShort:\"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر\".split(\"_\"),weekdays:\"الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت\".split(\"_\"),weekdaysShort:\"احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت\".split(\"_\"),weekdaysMin:\"ح_ن_ث_ر_خ_ج_س\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[اليوم على الساعة] LT\",nextDay:\"[غدا على الساعة] LT\",nextWeek:\"dddd [على الساعة] LT\",lastDay:\"[أمس على الساعة] LT\",lastWeek:\"dddd [على الساعة] LT\",sameElse:\"L\"},relativeTime:{future:\"في %s\",past:\"منذ %s\",s:\"ثوان\",ss:\"%d ثانية\",m:\"دقيقة\",mm:\"%d دقائق\",h:\"ساعة\",hh:\"%d ساعات\",d:\"يوم\",dd:\"%d أيام\",M:\"شهر\",MM:\"%d أشهر\",y:\"سنة\",yy:\"%d سنوات\"},week:{dow:0,doy:12}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(78);var n=t(1);n.datepickerLocale(\"ar-ly\",\"ar\",{closeText:\"إغلاق\",prevText:\"&#x3C;السابق\",nextText:\"التالي&#x3E;\",currentText:\"اليوم\",monthNames:[\"يناير\",\"فبراير\",\"مارس\",\"أبريل\",\"مايو\",\"يونيو\",\"يوليو\",\"أغسطس\",\"سبتمبر\",\"أكتوبر\",\"نوفمبر\",\"ديسمبر\"],monthNamesShort:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],dayNames:[\"الأحد\",\"الاثنين\",\"الثلاثاء\",\"الأربعاء\",\"الخميس\",\"الجمعة\",\"السبت\"],dayNamesShort:[\"أحد\",\"اثنين\",\"ثلاثاء\",\"أربعاء\",\"خميس\",\"جمعة\",\"سبت\"],dayNamesMin:[\"ح\",\"ن\",\"ث\",\"ر\",\"خ\",\"ج\",\"س\"],weekHeader:\"أسبوع\",dateFormat:\"dd/mm/yy\",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"ar-ly\",{buttonText:{month:\"شهر\",week:\"أسبوع\",day:\"يوم\",list:\"أجندة\"},allDayText:\"اليوم كله\",eventLimitText:\"أخرى\",noEventsMessage:\"أي أحداث لعرض\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){var a={1:\"1\",2:\"2\",3:\"3\",4:\"4\",5:\"5\",6:\"6\",7:\"7\",8:\"8\",9:\"9\",0:\"0\"},t=function(e){return 0===e?0:1===e?1:2===e?2:e%100>=3&&e%100<=10?3:e%100>=11?4:5},n={s:[\"أقل من ثانية\",\"ثانية واحدة\",[\"ثانيتان\",\"ثانيتين\"],\"%d ثوان\",\"%d ثانية\",\"%d ثانية\"],m:[\"أقل من دقيقة\",\"دقيقة واحدة\",[\"دقيقتان\",\"دقيقتين\"],\"%d دقائق\",\"%d دقيقة\",\"%d دقيقة\"],h:[\"أقل من ساعة\",\"ساعة واحدة\",[\"ساعتان\",\"ساعتين\"],\"%d ساعات\",\"%d ساعة\",\"%d ساعة\"],d:[\"أقل من يوم\",\"يوم واحد\",[\"يومان\",\"يومين\"],\"%d أيام\",\"%d يومًا\",\"%d يوم\"],M:[\"أقل من شهر\",\"شهر واحد\",[\"شهران\",\"شهرين\"],\"%d أشهر\",\"%d شهرا\",\"%d شهر\"],y:[\"أقل من عام\",\"عام واحد\",[\"عامان\",\"عامين\"],\"%d أعوام\",\"%d عامًا\",\"%d عام\"]},r=function(e){return function(a,r,s,d){var i=t(a),o=n[e][t(a)];return 2===i&&(o=o[r?0:1]),o.replace(/%d/i,a)}},s=[\"يناير\",\"فبراير\",\"مارس\",\"أبريل\",\"مايو\",\"يونيو\",\"يوليو\",\"أغسطس\",\"سبتمبر\",\"أكتوبر\",\"نوفمبر\",\"ديسمبر\"];return e.defineLocale(\"ar-ly\",{months:s,monthsShort:s,weekdays:\"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت\".split(\"_\"),weekdaysShort:\"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت\".split(\"_\"),weekdaysMin:\"ح_ن_ث_ر_خ_ج_س\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"D/‏M/‏YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},meridiemParse:/ص|م/,isPM:function(e){return\"م\"===e},meridiem:function(e,a,t){return e<12?\"ص\":\"م\"},calendar:{sameDay:\"[اليوم عند الساعة] LT\",nextDay:\"[غدًا عند الساعة] LT\",nextWeek:\"dddd [عند الساعة] LT\",lastDay:\"[أمس عند الساعة] LT\",lastWeek:\"dddd [عند الساعة] LT\",sameElse:\"L\"},relativeTime:{future:\"بعد %s\",past:\"منذ %s\",s:r(\"s\"),ss:r(\"s\"),m:r(\"m\"),mm:r(\"m\"),h:r(\"h\"),hh:r(\"h\"),d:r(\"d\"),dd:r(\"d\"),M:r(\"M\"),MM:r(\"M\"),y:r(\"y\"),yy:r(\"y\")},preparse:function(e){return e.replace(/،/g,\",\")},postformat:function(e){return e.replace(/\\d/g,function(e){return a[e]}).replace(/,/g,\"،\")},week:{dow:6,doy:12}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(80);var n=t(1);n.datepickerLocale(\"ar-ma\",\"ar\",{closeText:\"إغلاق\",prevText:\"&#x3C;السابق\",nextText:\"التالي&#x3E;\",currentText:\"اليوم\",monthNames:[\"يناير\",\"فبراير\",\"مارس\",\"أبريل\",\"مايو\",\"يونيو\",\"يوليو\",\"أغسطس\",\"سبتمبر\",\"أكتوبر\",\"نوفمبر\",\"ديسمبر\"],monthNamesShort:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],dayNames:[\"الأحد\",\"الاثنين\",\"الثلاثاء\",\"الأربعاء\",\"الخميس\",\"الجمعة\",\"السبت\"],dayNamesShort:[\"أحد\",\"اثنين\",\"ثلاثاء\",\"أربعاء\",\"خميس\",\"جمعة\",\"سبت\"],dayNamesMin:[\"ح\",\"ن\",\"ث\",\"ر\",\"خ\",\"ج\",\"س\"],weekHeader:\"أسبوع\",dateFormat:\"dd/mm/yy\",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"ar-ma\",{buttonText:{month:\"شهر\",week:\"أسبوع\",day:\"يوم\",list:\"أجندة\"},allDayText:\"اليوم كله\",eventLimitText:\"أخرى\",noEventsMessage:\"أي أحداث لعرض\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"ar-ma\",{months:\"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر\".split(\"_\"),monthsShort:\"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر\".split(\"_\"),weekdays:\"الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت\".split(\"_\"),weekdaysShort:\"احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت\".split(\"_\"),weekdaysMin:\"ح_ن_ث_ر_خ_ج_س\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[اليوم على الساعة] LT\",nextDay:\"[غدا على الساعة] LT\",nextWeek:\"dddd [على الساعة] LT\",lastDay:\"[أمس على الساعة] LT\",lastWeek:\"dddd [على الساعة] LT\",sameElse:\"L\"},relativeTime:{future:\"في %s\",past:\"منذ %s\",s:\"ثوان\",ss:\"%d ثانية\",m:\"دقيقة\",mm:\"%d دقائق\",h:\"ساعة\",hh:\"%d ساعات\",d:\"يوم\",dd:\"%d أيام\",M:\"شهر\",MM:\"%d أشهر\",y:\"سنة\",yy:\"%d سنوات\"},week:{dow:6,doy:12}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(82);var n=t(1);n.datepickerLocale(\"ar-sa\",\"ar\",{closeText:\"إغلاق\",prevText:\"&#x3C;السابق\",nextText:\"التالي&#x3E;\",currentText:\"اليوم\",monthNames:[\"يناير\",\"فبراير\",\"مارس\",\"أبريل\",\"مايو\",\"يونيو\",\"يوليو\",\"أغسطس\",\"سبتمبر\",\"أكتوبر\",\"نوفمبر\",\"ديسمبر\"],monthNamesShort:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],dayNames:[\"الأحد\",\"الاثنين\",\"الثلاثاء\",\"الأربعاء\",\"الخميس\",\"الجمعة\",\"السبت\"],dayNamesShort:[\"أحد\",\"اثنين\",\"ثلاثاء\",\"أربعاء\",\"خميس\",\"جمعة\",\"سبت\"],dayNamesMin:[\"ح\",\"ن\",\"ث\",\"ر\",\"خ\",\"ج\",\"س\"],weekHeader:\"أسبوع\",dateFormat:\"dd/mm/yy\",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"ar-sa\",{buttonText:{month:\"شهر\",week:\"أسبوع\",day:\"يوم\",list:\"أجندة\"},allDayText:\"اليوم كله\",eventLimitText:\"أخرى\",noEventsMessage:\"أي أحداث لعرض\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){var a={1:\"١\",2:\"٢\",3:\"٣\",4:\"٤\",5:\"٥\",6:\"٦\",7:\"٧\",8:\"٨\",9:\"٩\",0:\"٠\"},t={\"١\":\"1\",\"٢\":\"2\",\"٣\":\"3\",\"٤\":\"4\",\"٥\":\"5\",\"٦\":\"6\",\"٧\":\"7\",\"٨\":\"8\",\"٩\":\"9\",\"٠\":\"0\"};return e.defineLocale(\"ar-sa\",{months:\"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر\".split(\"_\"),monthsShort:\"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر\".split(\"_\"),weekdays:\"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت\".split(\"_\"),weekdaysShort:\"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت\".split(\"_\"),weekdaysMin:\"ح_ن_ث_ر_خ_ج_س\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},meridiemParse:/ص|م/,isPM:function(e){return\"م\"===e},meridiem:function(e,a,t){return e<12?\"ص\":\"م\"},calendar:{sameDay:\"[اليوم على الساعة] LT\",nextDay:\"[غدا على الساعة] LT\",nextWeek:\"dddd [على الساعة] LT\",lastDay:\"[أمس على الساعة] LT\",lastWeek:\"dddd [على الساعة] LT\",sameElse:\"L\"},relativeTime:{future:\"في %s\",past:\"منذ %s\",s:\"ثوان\",ss:\"%d ثانية\",m:\"دقيقة\",mm:\"%d دقائق\",h:\"ساعة\",hh:\"%d ساعات\",d:\"يوم\",dd:\"%d أيام\",M:\"شهر\",MM:\"%d أشهر\",y:\"سنة\",yy:\"%d سنوات\"},preparse:function(e){return e.replace(/[١٢٣٤٥٦٧٨٩٠]/g,function(e){return t[e]}).replace(/،/g,\",\")},postformat:function(e){return e.replace(/\\d/g,function(e){return a[e]}).replace(/,/g,\"،\")},week:{dow:0,doy:6}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(84);var n=t(1);n.datepickerLocale(\"ar-tn\",\"ar\",{closeText:\"إغلاق\",prevText:\"&#x3C;السابق\",nextText:\"التالي&#x3E;\",currentText:\"اليوم\",monthNames:[\"يناير\",\"فبراير\",\"مارس\",\"أبريل\",\"مايو\",\"يونيو\",\"يوليو\",\"أغسطس\",\"سبتمبر\",\"أكتوبر\",\"نوفمبر\",\"ديسمبر\"],monthNamesShort:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],dayNames:[\"الأحد\",\"الاثنين\",\"الثلاثاء\",\"الأربعاء\",\"الخميس\",\"الجمعة\",\"السبت\"],dayNamesShort:[\"أحد\",\"اثنين\",\"ثلاثاء\",\"أربعاء\",\"خميس\",\"جمعة\",\"سبت\"],dayNamesMin:[\"ح\",\"ن\",\"ث\",\"ر\",\"خ\",\"ج\",\"س\"],weekHeader:\"أسبوع\",dateFormat:\"dd/mm/yy\",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"ar-tn\",{buttonText:{month:\"شهر\",week:\"أسبوع\",day:\"يوم\",list:\"أجندة\"},allDayText:\"اليوم كله\",eventLimitText:\"أخرى\",noEventsMessage:\"أي أحداث لعرض\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"ar-tn\",{months:\"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر\".split(\"_\"),monthsShort:\"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر\".split(\"_\"),weekdays:\"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت\".split(\"_\"),weekdaysShort:\"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت\".split(\"_\"),weekdaysMin:\"ح_ن_ث_ر_خ_ج_س\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[اليوم على الساعة] LT\",nextDay:\"[غدا على الساعة] LT\",nextWeek:\"dddd [على الساعة] LT\",lastDay:\"[أمس على الساعة] LT\",lastWeek:\"dddd [على الساعة] LT\",sameElse:\"L\"},relativeTime:{future:\"في %s\",past:\"منذ %s\",s:\"ثوان\",ss:\"%d ثانية\",m:\"دقيقة\",mm:\"%d دقائق\",h:\"ساعة\",hh:\"%d ساعات\",d:\"يوم\",dd:\"%d أيام\",M:\"شهر\",MM:\"%d أشهر\",y:\"سنة\",yy:\"%d سنوات\"},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(86);var n=t(1);n.datepickerLocale(\"ar\",\"ar\",{closeText:\"إغلاق\",prevText:\"&#x3C;السابق\",nextText:\"التالي&#x3E;\",currentText:\"اليوم\",monthNames:[\"يناير\",\"فبراير\",\"مارس\",\"أبريل\",\"مايو\",\"يونيو\",\"يوليو\",\"أغسطس\",\"سبتمبر\",\"أكتوبر\",\"نوفمبر\",\"ديسمبر\"],monthNamesShort:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],dayNames:[\"الأحد\",\"الاثنين\",\"الثلاثاء\",\"الأربعاء\",\"الخميس\",\"الجمعة\",\"السبت\"],dayNamesShort:[\"أحد\",\"اثنين\",\"ثلاثاء\",\"أربعاء\",\"خميس\",\"جمعة\",\"سبت\"],dayNamesMin:[\"ح\",\"ن\",\"ث\",\"ر\",\"خ\",\"ج\",\"س\"],weekHeader:\"أسبوع\",dateFormat:\"dd/mm/yy\",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"ar\",{buttonText:{month:\"شهر\",week:\"أسبوع\",day:\"يوم\",list:\"أجندة\"},allDayText:\"اليوم كله\",eventLimitText:\"أخرى\",noEventsMessage:\"أي أحداث لعرض\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){var a={1:\"١\",2:\"٢\",3:\"٣\",4:\"٤\",5:\"٥\",6:\"٦\",7:\"٧\",8:\"٨\",9:\"٩\",0:\"٠\"},t={\"١\":\"1\",\"٢\":\"2\",\"٣\":\"3\",\"٤\":\"4\",\"٥\":\"5\",\"٦\":\"6\",\"٧\":\"7\",\"٨\":\"8\",\"٩\":\"9\",\"٠\":\"0\"},n=function(e){return 0===e?0:1===e?1:2===e?2:e%100>=3&&e%100<=10?3:e%100>=11?4:5},r={s:[\"أقل من ثانية\",\"ثانية واحدة\",[\"ثانيتان\",\"ثانيتين\"],\"%d ثوان\",\"%d ثانية\",\"%d ثانية\"],m:[\"أقل من دقيقة\",\"دقيقة واحدة\",[\"دقيقتان\",\"دقيقتين\"],\"%d دقائق\",\"%d دقيقة\",\"%d دقيقة\"],h:[\"أقل من ساعة\",\"ساعة واحدة\",[\"ساعتان\",\"ساعتين\"],\"%d ساعات\",\"%d ساعة\",\"%d ساعة\"],d:[\"أقل من يوم\",\"يوم واحد\",[\"يومان\",\"يومين\"],\"%d أيام\",\"%d يومًا\",\"%d يوم\"],M:[\"أقل من شهر\",\"شهر واحد\",[\"شهران\",\"شهرين\"],\"%d أشهر\",\"%d شهرا\",\"%d شهر\"],y:[\"أقل من عام\",\"عام واحد\",[\"عامان\",\"عامين\"],\"%d أعوام\",\"%d عامًا\",\"%d عام\"]},s=function(e){return function(a,t,s,d){var i=n(a),o=r[e][n(a)];return 2===i&&(o=o[t?0:1]),o.replace(/%d/i,a)}},d=[\"يناير\",\"فبراير\",\"مارس\",\"أبريل\",\"مايو\",\"يونيو\",\"يوليو\",\"أغسطس\",\"سبتمبر\",\"أكتوبر\",\"نوفمبر\",\"ديسمبر\"];return e.defineLocale(\"ar\",{months:d,monthsShort:d,weekdays:\"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت\".split(\"_\"),weekdaysShort:\"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت\".split(\"_\"),weekdaysMin:\"ح_ن_ث_ر_خ_ج_س\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"D/‏M/‏YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},meridiemParse:/ص|م/,isPM:function(e){return\"م\"===e},meridiem:function(e,a,t){return e<12?\"ص\":\"م\"},calendar:{sameDay:\"[اليوم عند الساعة] LT\",nextDay:\"[غدًا عند الساعة] LT\",nextWeek:\"dddd [عند الساعة] LT\",lastDay:\"[أمس عند الساعة] LT\",lastWeek:\"dddd [عند الساعة] LT\",sameElse:\"L\"},relativeTime:{future:\"بعد %s\",past:\"منذ %s\",s:s(\"s\"),ss:s(\"s\"),m:s(\"m\"),mm:s(\"m\"),h:s(\"h\"),hh:s(\"h\"),d:s(\"d\"),dd:s(\"d\"),M:s(\"M\"),MM:s(\"M\"),y:s(\"y\"),yy:s(\"y\")},preparse:function(e){return e.replace(/[١٢٣٤٥٦٧٨٩٠]/g,function(e){return t[e]}).replace(/،/g,\",\")},postformat:function(e){return e.replace(/\\d/g,function(e){return a[e]}).replace(/,/g,\"،\")},week:{dow:6,doy:12}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(88);var n=t(1);n.datepickerLocale(\"be\",\"be\",{closeText:\"Зачыніць\",prevText:\"&#x3C;Папярэд\",nextText:\"След&#x3E;\",currentText:\"Сёння\",monthNames:[\"Студзень\",\"Люты\",\"Сакавік\",\"Красавік\",\"Трав\",\"Чэрвень\",\"Ліпень\",\"Жнівень\",\"Верасень\",\"Кастрычнік\",\"Лістапад\",\"Снежань\"],monthNamesShort:[\"Студ\",\"Лют\",\"Сак\",\"Крас\",\"Трав\",\"Чэрв\",\"Ліп\",\"Жнів\",\"Вер\",\"Каст\",\"Ліст\",\"Снеж\"],dayNames:[\"нядзеля\",\"панядзелак\",\"аўторак\",\"серада\",\"чацвер\",\"пятніца\",\"субота\"],dayNamesShort:[\"ндз\",\"пнд\",\"аўт\",\"срд\",\"чцв\",\"птн\",\"сбт\"],dayNamesMin:[\"Нд\",\"Пн\",\"Ат\",\"Ср\",\"Чц\",\"Пт\",\"Сб\"],weekHeader:\"Ндз\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"be\",{buttonText:{month:\"Месяц\",week:\"Тыдзень\",day:\"Дзень\",list:\"Парадак дня\"},allDayHtml:\"Увесь<br />дзень\",eventLimitText:function(e){return\"+ яшчэ \"+e},noEventsMessage:\"Няма падзей для адлюстравання\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a){var t=e.split(\"_\");return a%10==1&&a%100!=11?t[0]:a%10>=2&&a%10<=4&&(a%100<10||a%100>=20)?t[1]:t[2]}function t(e,t,n){var r={ss:t?\"секунда_секунды_секунд\":\"секунду_секунды_секунд\",mm:t?\"хвіліна_хвіліны_хвілін\":\"хвіліну_хвіліны_хвілін\",hh:t?\"гадзіна_гадзіны_гадзін\":\"гадзіну_гадзіны_гадзін\",dd:\"дзень_дні_дзён\",MM:\"месяц_месяцы_месяцаў\",yy:\"год_гады_гадоў\"};return\"m\"===n?t?\"хвіліна\":\"хвіліну\":\"h\"===n?t?\"гадзіна\":\"гадзіну\":e+\" \"+a(r[n],+e)}return e.defineLocale(\"be\",{months:{format:\"студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня\".split(\"_\"),standalone:\"студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань\".split(\"_\")},monthsShort:\"студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж\".split(\"_\"),weekdays:{format:\"нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу\".split(\"_\"),standalone:\"нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота\".split(\"_\"),isFormat:/\\[ ?[Ууў] ?(?:мінулую|наступную)? ?\\] ?dddd/},weekdaysShort:\"нд_пн_ат_ср_чц_пт_сб\".split(\"_\"),weekdaysMin:\"нд_пн_ат_ср_чц_пт_сб\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY г.\",LLL:\"D MMMM YYYY г., HH:mm\",LLLL:\"dddd, D MMMM YYYY г., HH:mm\"},calendar:{sameDay:\"[Сёння ў] LT\",nextDay:\"[Заўтра ў] LT\",lastDay:\"[Учора ў] LT\",nextWeek:function(){return\"[У] dddd [ў] LT\"},lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return\"[У мінулую] dddd [ў] LT\";case 1:case 2:case 4:return\"[У мінулы] dddd [ў] LT\"}},sameElse:\"L\"},relativeTime:{future:\"праз %s\",past:\"%s таму\",s:\"некалькі секунд\",m:t,mm:t,h:t,hh:t,d:\"дзень\",dd:t,M:\"месяц\",MM:t,y:\"год\",yy:t},meridiemParse:/ночы|раніцы|дня|вечара/,isPM:function(e){return/^(дня|вечара)$/.test(e)},meridiem:function(e,a,t){return e<4?\"ночы\":e<12?\"раніцы\":e<17?\"дня\":\"вечара\"},dayOfMonthOrdinalParse:/\\d{1,2}-(і|ы|га)/,ordinal:function(e,a){switch(a){case\"M\":case\"d\":case\"DDD\":case\"w\":case\"W\":return e%10!=2&&e%10!=3||e%100==12||e%100==13?e+\"-ы\":e+\"-і\";case\"D\":return e+\"-га\";default:return e}},week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(90);var n=t(1);n.datepickerLocale(\"bg\",\"bg\",{closeText:\"затвори\",prevText:\"&#x3C;назад\",nextText:\"напред&#x3E;\",nextBigText:\"&#x3E;&#x3E;\",currentText:\"днес\",monthNames:[\"Януари\",\"Февруари\",\"Март\",\"Април\",\"Май\",\"Юни\",\"Юли\",\"Август\",\"Септември\",\"Октомври\",\"Ноември\",\"Декември\"],monthNamesShort:[\"Яну\",\"Фев\",\"Мар\",\"Апр\",\"Май\",\"Юни\",\"Юли\",\"Авг\",\"Сеп\",\"Окт\",\"Нов\",\"Дек\"],dayNames:[\"Неделя\",\"Понеделник\",\"Вторник\",\"Сряда\",\"Четвъртък\",\"Петък\",\"Събота\"],dayNamesShort:[\"Нед\",\"Пон\",\"Вто\",\"Сря\",\"Чет\",\"Пет\",\"Съб\"],dayNamesMin:[\"Не\",\"По\",\"Вт\",\"Ср\",\"Че\",\"Пе\",\"Съ\"],weekHeader:\"Wk\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"bg\",{buttonText:{month:\"Месец\",week:\"Седмица\",day:\"Ден\",list:\"График\"},allDayText:\"Цял ден\",eventLimitText:function(e){return\"+още \"+e},noEventsMessage:\"Няма събития за показване\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"bg\",{months:\"януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември\".split(\"_\"),monthsShort:\"янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек\".split(\"_\"),weekdays:\"неделя_понеделник_вторник_сряда_четвъртък_петък_събота\".split(\"_\"),weekdaysShort:\"нед_пон_вто_сря_чет_пет_съб\".split(\"_\"),weekdaysMin:\"нд_пн_вт_ср_чт_пт_сб\".split(\"_\"),longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"D.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY H:mm\",LLLL:\"dddd, D MMMM YYYY H:mm\"},calendar:{sameDay:\"[Днес в] LT\",nextDay:\"[Утре в] LT\",nextWeek:\"dddd [в] LT\",lastDay:\"[Вчера в] LT\",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return\"[В изминалата] dddd [в] LT\";case 1:case 2:case 4:case 5:return\"[В изминалия] dddd [в] LT\"}},sameElse:\"L\"},relativeTime:{future:\"след %s\",past:\"преди %s\",s:\"няколко секунди\",ss:\"%d секунди\",m:\"минута\",mm:\"%d минути\",h:\"час\",hh:\"%d часа\",d:\"ден\",dd:\"%d дни\",M:\"месец\",MM:\"%d месеца\",y:\"година\",yy:\"%d години\"},dayOfMonthOrdinalParse:/\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,ordinal:function(e){var a=e%10,t=e%100;return 0===e?e+\"-ев\":0===t?e+\"-ен\":t>10&&t<20?e+\"-ти\":1===a?e+\"-ви\":2===a?e+\"-ри\":7===a||8===a?e+\"-ми\":e+\"-ти\"},week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(92);var n=t(1);n.datepickerLocale(\"bs\",\"bs\",{closeText:\"Zatvori\",prevText:\"&#x3C;\",nextText:\"&#x3E;\",currentText:\"Danas\",monthNames:[\"Januar\",\"Februar\",\"Mart\",\"April\",\"Maj\",\"Juni\",\"Juli\",\"August\",\"Septembar\",\"Oktobar\",\"Novmbar\",\"Decembar\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"Maj\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Okt\",\"Nov\",\"Dec\"],dayNames:[\"Nedjelja\",\"Ponedjeljak\",\"Utorak\",\"Srijeda\",\"Četvrtak\",\"Petak\",\"Subota\"],dayNamesShort:[\"Ned\",\"Pon\",\"Uto\",\"Sri\",\"Čet\",\"Pet\",\"Sub\"],dayNamesMin:[\"Ne\",\"Po\",\"Ut\",\"Sr\",\"Če\",\"Pe\",\"Su\"],weekHeader:\"Sed\",dateFormat:\"dd.mm.yy.\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"bs\",{buttonText:{prev:\"Prošli\",next:\"Sljedeći\",month:\"Mjesec\",week:\"Sedmica\",day:\"Dan\",list:\"Raspored\"},allDayText:\"Cijeli dan\",eventLimitText:function(e){return\"+ još \"+e},noEventsMessage:\"Nema događaja za prikazivanje\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a,t){var n=e+\" \";switch(t){case\"ss\":return n+=1===e?\"sekunda\":2===e||3===e||4===e?\"sekunde\":\"sekundi\";case\"m\":return a?\"jedna minuta\":\"jedne minute\";case\"mm\":return n+=1===e?\"minuta\":2===e||3===e||4===e?\"minute\":\"minuta\";case\"h\":return a?\"jedan sat\":\"jednog sata\";case\"hh\":return n+=1===e?\"sat\":2===e||3===e||4===e?\"sata\":\"sati\";case\"dd\":return n+=1===e?\"dan\":\"dana\";case\"MM\":return n+=1===e?\"mjesec\":2===e||3===e||4===e?\"mjeseca\":\"mjeseci\";case\"yy\":return n+=1===e?\"godina\":2===e||3===e||4===e?\"godine\":\"godina\"}}return e.defineLocale(\"bs\",{months:\"januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar\".split(\"_\"),monthsShort:\"jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.\".split(\"_\"),monthsParseExact:!0,weekdays:\"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota\".split(\"_\"),weekdaysShort:\"ned._pon._uto._sri._čet._pet._sub.\".split(\"_\"),weekdaysMin:\"ne_po_ut_sr_če_pe_su\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY H:mm\",LLLL:\"dddd, D. MMMM YYYY H:mm\"},calendar:{sameDay:\"[danas u] LT\",nextDay:\"[sutra u] LT\",nextWeek:function(){switch(this.day()){case 0:return\"[u] [nedjelju] [u] LT\";case 3:return\"[u] [srijedu] [u] LT\";case 6:return\"[u] [subotu] [u] LT\";case 1:case 2:case 4:case 5:return\"[u] dddd [u] LT\"}},lastDay:\"[jučer u] LT\",lastWeek:function(){switch(this.day()){case 0:case 3:return\"[prošlu] dddd [u] LT\";case 6:return\"[prošle] [subote] [u] LT\";case 1:case 2:case 4:case 5:return\"[prošli] dddd [u] LT\"}},sameElse:\"L\"},relativeTime:{future:\"za %s\",past:\"prije %s\",s:\"par sekundi\",ss:a,m:a,mm:a,h:a,hh:a,d:\"dan\",dd:a,M:\"mjesec\",MM:a,y:\"godinu\",yy:a},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(94);var n=t(1);n.datepickerLocale(\"ca\",\"ca\",{closeText:\"Tanca\",prevText:\"Anterior\",nextText:\"Següent\",currentText:\"Avui\",monthNames:[\"gener\",\"febrer\",\"març\",\"abril\",\"maig\",\"juny\",\"juliol\",\"agost\",\"setembre\",\"octubre\",\"novembre\",\"desembre\"],monthNamesShort:[\"gen\",\"feb\",\"març\",\"abr\",\"maig\",\"juny\",\"jul\",\"ag\",\"set\",\"oct\",\"nov\",\"des\"],dayNames:[\"diumenge\",\"dilluns\",\"dimarts\",\"dimecres\",\"dijous\",\"divendres\",\"dissabte\"],dayNamesShort:[\"dg\",\"dl\",\"dt\",\"dc\",\"dj\",\"dv\",\"ds\"],dayNamesMin:[\"dg\",\"dl\",\"dt\",\"dc\",\"dj\",\"dv\",\"ds\"],weekHeader:\"Set\",dateFormat:\"dd/mm/yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"ca\",{buttonText:{month:\"Mes\",week:\"Setmana\",day:\"Dia\",list:\"Agenda\"},allDayText:\"Tot el dia\",eventLimitText:\"més\",noEventsMessage:\"No hi ha esdeveniments per mostrar\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"ca\",{months:{standalone:\"gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre\".split(\"_\"),format:\"de gener_de febrer_de març_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre\".split(\"_\"),isFormat:/D[oD]?(\\s)+MMMM/},monthsShort:\"gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.\".split(\"_\"),monthsParseExact:!0,weekdays:\"diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte\".split(\"_\"),weekdaysShort:\"dg._dl._dt._dc._dj._dv._ds.\".split(\"_\"),weekdaysMin:\"dg_dl_dt_dc_dj_dv_ds\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM [de] YYYY\",ll:\"D MMM YYYY\",LLL:\"D MMMM [de] YYYY [a les] H:mm\",lll:\"D MMM YYYY, H:mm\",LLLL:\"dddd D MMMM [de] YYYY [a les] H:mm\",llll:\"ddd D MMM YYYY, H:mm\"},calendar:{sameDay:function(){return\"[avui a \"+(1!==this.hours()?\"les\":\"la\")+\"] LT\"},nextDay:function(){return\"[demà a \"+(1!==this.hours()?\"les\":\"la\")+\"] LT\"},nextWeek:function(){return\"dddd [a \"+(1!==this.hours()?\"les\":\"la\")+\"] LT\"},lastDay:function(){return\"[ahir a \"+(1!==this.hours()?\"les\":\"la\")+\"] LT\"},lastWeek:function(){return\"[el] dddd [passat a \"+(1!==this.hours()?\"les\":\"la\")+\"] LT\"},sameElse:\"L\"},relativeTime:{future:\"d'aquí %s\",past:\"fa %s\",s:\"uns segons\",ss:\"%d segons\",m:\"un minut\",mm:\"%d minuts\",h:\"una hora\",hh:\"%d hores\",d:\"un dia\",dd:\"%d dies\",M:\"un mes\",MM:\"%d mesos\",y:\"un any\",yy:\"%d anys\"},dayOfMonthOrdinalParse:/\\d{1,2}(r|n|t|è|a)/,ordinal:function(e,a){var t=1===e?\"r\":2===e?\"n\":3===e?\"r\":4===e?\"t\":\"è\";return\"w\"!==a&&\"W\"!==a||(t=\"a\"),e+t},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(96);var n=t(1);n.datepickerLocale(\"cs\",\"cs\",{closeText:\"Zavřít\",prevText:\"&#x3C;Dříve\",nextText:\"Později&#x3E;\",currentText:\"Nyní\",monthNames:[\"leden\",\"únor\",\"březen\",\"duben\",\"květen\",\"červen\",\"červenec\",\"srpen\",\"září\",\"říjen\",\"listopad\",\"prosinec\"],monthNamesShort:[\"led\",\"úno\",\"bře\",\"dub\",\"kvě\",\"čer\",\"čvc\",\"srp\",\"zář\",\"říj\",\"lis\",\"pro\"],dayNames:[\"neděle\",\"pondělí\",\"úterý\",\"středa\",\"čtvrtek\",\"pátek\",\"sobota\"],dayNamesShort:[\"ne\",\"po\",\"út\",\"st\",\"čt\",\"pá\",\"so\"],dayNamesMin:[\"ne\",\"po\",\"út\",\"st\",\"čt\",\"pá\",\"so\"],weekHeader:\"Týd\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"cs\",{buttonText:{month:\"Měsíc\",week:\"Týden\",day:\"Den\",list:\"Agenda\"},allDayText:\"Celý den\",eventLimitText:function(e){return\"+další: \"+e},noEventsMessage:\"Žádné akce k zobrazení\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e){return e>1&&e<5&&1!=~~(e/10)}function t(e,t,n,r){var s=e+\" \";switch(n){case\"s\":return t||r?\"pár sekund\":\"pár sekundami\";case\"ss\":return t||r?s+(a(e)?\"sekundy\":\"sekund\"):s+\"sekundami\";case\"m\":return t?\"minuta\":r?\"minutu\":\"minutou\";case\"mm\":return t||r?s+(a(e)?\"minuty\":\"minut\"):s+\"minutami\";case\"h\":return t?\"hodina\":r?\"hodinu\":\"hodinou\";case\"hh\":return t||r?s+(a(e)?\"hodiny\":\"hodin\"):s+\"hodinami\";case\"d\":return t||r?\"den\":\"dnem\";case\"dd\":return t||r?s+(a(e)?\"dny\":\"dní\"):s+\"dny\";case\"M\":return t||r?\"měsíc\":\"měsícem\";case\"MM\":return t||r?s+(a(e)?\"měsíce\":\"měsíců\"):s+\"měsíci\";case\"y\":return t||r?\"rok\":\"rokem\";case\"yy\":return t||r?s+(a(e)?\"roky\":\"let\"):s+\"lety\"}}var n=\"leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec\".split(\"_\"),r=\"led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro\".split(\"_\");return e.defineLocale(\"cs\",{months:n,monthsShort:r,monthsParse:function(e,a){var t,n=[];for(t=0;t<12;t++)n[t]=new RegExp(\"^\"+e[t]+\"$|^\"+a[t]+\"$\",\"i\");return n}(n,r),shortMonthsParse:function(e){var a,t=[];for(a=0;a<12;a++)t[a]=new RegExp(\"^\"+e[a]+\"$\",\"i\");return t}(r),longMonthsParse:function(e){var a,t=[];for(a=0;a<12;a++)t[a]=new RegExp(\"^\"+e[a]+\"$\",\"i\");return t}(n),weekdays:\"neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota\".split(\"_\"),weekdaysShort:\"ne_po_út_st_čt_pá_so\".split(\"_\"),weekdaysMin:\"ne_po_út_st_čt_pá_so\".split(\"_\"),longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY H:mm\",LLLL:\"dddd D. MMMM YYYY H:mm\",l:\"D. M. YYYY\"},calendar:{sameDay:\"[dnes v] LT\",nextDay:\"[zítra v] LT\",nextWeek:function(){switch(this.day()){case 0:return\"[v neděli v] LT\";case 1:case 2:return\"[v] dddd [v] LT\";case 3:return\"[ve středu v] LT\";case 4:return\"[ve čtvrtek v] LT\";case 5:return\"[v pátek v] LT\";case 6:return\"[v sobotu v] LT\"}},lastDay:\"[včera v] LT\",lastWeek:function(){switch(this.day()){case 0:return\"[minulou neděli v] LT\";case 1:case 2:return\"[minulé] dddd [v] LT\";case 3:return\"[minulou středu v] LT\";case 4:case 5:return\"[minulý] dddd [v] LT\";case 6:return\"[minulou sobotu v] LT\"}},sameElse:\"L\"},relativeTime:{future:\"za %s\",past:\"před %s\",s:t,ss:t,m:t,mm:t,h:t,hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(98);var n=t(1);n.datepickerLocale(\"da\",\"da\",{closeText:\"Luk\",\nprevText:\"&#x3C;Forrige\",nextText:\"Næste&#x3E;\",currentText:\"Idag\",monthNames:[\"Januar\",\"Februar\",\"Marts\",\"April\",\"Maj\",\"Juni\",\"Juli\",\"August\",\"September\",\"Oktober\",\"November\",\"December\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"Maj\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Okt\",\"Nov\",\"Dec\"],dayNames:[\"Søndag\",\"Mandag\",\"Tirsdag\",\"Onsdag\",\"Torsdag\",\"Fredag\",\"Lørdag\"],dayNamesShort:[\"Søn\",\"Man\",\"Tir\",\"Ons\",\"Tor\",\"Fre\",\"Lør\"],dayNamesMin:[\"Sø\",\"Ma\",\"Ti\",\"On\",\"To\",\"Fr\",\"Lø\"],weekHeader:\"Uge\",dateFormat:\"dd-mm-yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"da\",{buttonText:{month:\"Måned\",week:\"Uge\",day:\"Dag\",list:\"Agenda\"},allDayText:\"Hele dagen\",eventLimitText:\"flere\",noEventsMessage:\"Ingen arrangementer at vise\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"da\",{months:\"januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december\".split(\"_\"),monthsShort:\"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec\".split(\"_\"),weekdays:\"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag\".split(\"_\"),weekdaysShort:\"søn_man_tir_ons_tor_fre_lør\".split(\"_\"),weekdaysMin:\"sø_ma_ti_on_to_fr_lø\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY HH:mm\",LLLL:\"dddd [d.] D. MMMM YYYY [kl.] HH:mm\"},calendar:{sameDay:\"[i dag kl.] LT\",nextDay:\"[i morgen kl.] LT\",nextWeek:\"på dddd [kl.] LT\",lastDay:\"[i går kl.] LT\",lastWeek:\"[i] dddd[s kl.] LT\",sameElse:\"L\"},relativeTime:{future:\"om %s\",past:\"%s siden\",s:\"få sekunder\",ss:\"%d sekunder\",m:\"et minut\",mm:\"%d minutter\",h:\"en time\",hh:\"%d timer\",d:\"en dag\",dd:\"%d dage\",M:\"en måned\",MM:\"%d måneder\",y:\"et år\",yy:\"%d år\"},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(100);var n=t(1);n.datepickerLocale(\"de-at\",\"de\",{closeText:\"Schließen\",prevText:\"&#x3C;Zurück\",nextText:\"Vor&#x3E;\",currentText:\"Heute\",monthNames:[\"Januar\",\"Februar\",\"März\",\"April\",\"Mai\",\"Juni\",\"Juli\",\"August\",\"September\",\"Oktober\",\"November\",\"Dezember\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mär\",\"Apr\",\"Mai\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Okt\",\"Nov\",\"Dez\"],dayNames:[\"Sonntag\",\"Montag\",\"Dienstag\",\"Mittwoch\",\"Donnerstag\",\"Freitag\",\"Samstag\"],dayNamesShort:[\"So\",\"Mo\",\"Di\",\"Mi\",\"Do\",\"Fr\",\"Sa\"],dayNamesMin:[\"So\",\"Mo\",\"Di\",\"Mi\",\"Do\",\"Fr\",\"Sa\"],weekHeader:\"KW\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"de-at\",{buttonText:{year:\"Jahr\",month:\"Monat\",week:\"Woche\",day:\"Tag\",list:\"Terminübersicht\"},allDayText:\"Ganztägig\",eventLimitText:function(e){return\"+ weitere \"+e},noEventsMessage:\"Keine Ereignisse anzuzeigen\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a,t,n){var r={m:[\"eine Minute\",\"einer Minute\"],h:[\"eine Stunde\",\"einer Stunde\"],d:[\"ein Tag\",\"einem Tag\"],dd:[e+\" Tage\",e+\" Tagen\"],M:[\"ein Monat\",\"einem Monat\"],MM:[e+\" Monate\",e+\" Monaten\"],y:[\"ein Jahr\",\"einem Jahr\"],yy:[e+\" Jahre\",e+\" Jahren\"]};return a?r[t][0]:r[t][1]}return e.defineLocale(\"de-at\",{months:\"Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember\".split(\"_\"),monthsShort:\"Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.\".split(\"_\"),monthsParseExact:!0,weekdays:\"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag\".split(\"_\"),weekdaysShort:\"So._Mo._Di._Mi._Do._Fr._Sa.\".split(\"_\"),weekdaysMin:\"So_Mo_Di_Mi_Do_Fr_Sa\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY HH:mm\",LLLL:\"dddd, D. MMMM YYYY HH:mm\"},calendar:{sameDay:\"[heute um] LT [Uhr]\",sameElse:\"L\",nextDay:\"[morgen um] LT [Uhr]\",nextWeek:\"dddd [um] LT [Uhr]\",lastDay:\"[gestern um] LT [Uhr]\",lastWeek:\"[letzten] dddd [um] LT [Uhr]\"},relativeTime:{future:\"in %s\",past:\"vor %s\",s:\"ein paar Sekunden\",ss:\"%d Sekunden\",m:a,mm:\"%d Minuten\",h:a,hh:\"%d Stunden\",d:a,dd:a,M:a,MM:a,y:a,yy:a},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(102);var n=t(1);n.datepickerLocale(\"de-ch\",\"de\",{closeText:\"Schließen\",prevText:\"&#x3C;Zurück\",nextText:\"Vor&#x3E;\",currentText:\"Heute\",monthNames:[\"Januar\",\"Februar\",\"März\",\"April\",\"Mai\",\"Juni\",\"Juli\",\"August\",\"September\",\"Oktober\",\"November\",\"Dezember\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mär\",\"Apr\",\"Mai\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Okt\",\"Nov\",\"Dez\"],dayNames:[\"Sonntag\",\"Montag\",\"Dienstag\",\"Mittwoch\",\"Donnerstag\",\"Freitag\",\"Samstag\"],dayNamesShort:[\"So\",\"Mo\",\"Di\",\"Mi\",\"Do\",\"Fr\",\"Sa\"],dayNamesMin:[\"So\",\"Mo\",\"Di\",\"Mi\",\"Do\",\"Fr\",\"Sa\"],weekHeader:\"KW\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"de-ch\",{buttonText:{year:\"Jahr\",month:\"Monat\",week:\"Woche\",day:\"Tag\",list:\"Terminübersicht\"},allDayText:\"Ganztägig\",eventLimitText:function(e){return\"+ weitere \"+e},noEventsMessage:\"Keine Ereignisse anzuzeigen\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a,t,n){var r={m:[\"eine Minute\",\"einer Minute\"],h:[\"eine Stunde\",\"einer Stunde\"],d:[\"ein Tag\",\"einem Tag\"],dd:[e+\" Tage\",e+\" Tagen\"],M:[\"ein Monat\",\"einem Monat\"],MM:[e+\" Monate\",e+\" Monaten\"],y:[\"ein Jahr\",\"einem Jahr\"],yy:[e+\" Jahre\",e+\" Jahren\"]};return a?r[t][0]:r[t][1]}return e.defineLocale(\"de-ch\",{months:\"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember\".split(\"_\"),monthsShort:\"Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.\".split(\"_\"),monthsParseExact:!0,weekdays:\"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag\".split(\"_\"),weekdaysShort:\"So_Mo_Di_Mi_Do_Fr_Sa\".split(\"_\"),weekdaysMin:\"So_Mo_Di_Mi_Do_Fr_Sa\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY HH:mm\",LLLL:\"dddd, D. MMMM YYYY HH:mm\"},calendar:{sameDay:\"[heute um] LT [Uhr]\",sameElse:\"L\",nextDay:\"[morgen um] LT [Uhr]\",nextWeek:\"dddd [um] LT [Uhr]\",lastDay:\"[gestern um] LT [Uhr]\",lastWeek:\"[letzten] dddd [um] LT [Uhr]\"},relativeTime:{future:\"in %s\",past:\"vor %s\",s:\"ein paar Sekunden\",ss:\"%d Sekunden\",m:a,mm:\"%d Minuten\",h:a,hh:\"%d Stunden\",d:a,dd:a,M:a,MM:a,y:a,yy:a},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(104);var n=t(1);n.datepickerLocale(\"de\",\"de\",{closeText:\"Schließen\",prevText:\"&#x3C;Zurück\",nextText:\"Vor&#x3E;\",currentText:\"Heute\",monthNames:[\"Januar\",\"Februar\",\"März\",\"April\",\"Mai\",\"Juni\",\"Juli\",\"August\",\"September\",\"Oktober\",\"November\",\"Dezember\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mär\",\"Apr\",\"Mai\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Okt\",\"Nov\",\"Dez\"],dayNames:[\"Sonntag\",\"Montag\",\"Dienstag\",\"Mittwoch\",\"Donnerstag\",\"Freitag\",\"Samstag\"],dayNamesShort:[\"So\",\"Mo\",\"Di\",\"Mi\",\"Do\",\"Fr\",\"Sa\"],dayNamesMin:[\"So\",\"Mo\",\"Di\",\"Mi\",\"Do\",\"Fr\",\"Sa\"],weekHeader:\"KW\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"de\",{buttonText:{year:\"Jahr\",month:\"Monat\",week:\"Woche\",day:\"Tag\",list:\"Terminübersicht\"},allDayText:\"Ganztägig\",eventLimitText:function(e){return\"+ weitere \"+e},noEventsMessage:\"Keine Ereignisse anzuzeigen\",dayOfMonthFormat:\"ddd DD.MM.\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a,t,n){var r={m:[\"eine Minute\",\"einer Minute\"],h:[\"eine Stunde\",\"einer Stunde\"],d:[\"ein Tag\",\"einem Tag\"],dd:[e+\" Tage\",e+\" Tagen\"],M:[\"ein Monat\",\"einem Monat\"],MM:[e+\" Monate\",e+\" Monaten\"],y:[\"ein Jahr\",\"einem Jahr\"],yy:[e+\" Jahre\",e+\" Jahren\"]};return a?r[t][0]:r[t][1]}return e.defineLocale(\"de\",{months:\"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember\".split(\"_\"),monthsShort:\"Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.\".split(\"_\"),monthsParseExact:!0,weekdays:\"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag\".split(\"_\"),weekdaysShort:\"So._Mo._Di._Mi._Do._Fr._Sa.\".split(\"_\"),weekdaysMin:\"So_Mo_Di_Mi_Do_Fr_Sa\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY HH:mm\",LLLL:\"dddd, D. MMMM YYYY HH:mm\"},calendar:{sameDay:\"[heute um] LT [Uhr]\",sameElse:\"L\",nextDay:\"[morgen um] LT [Uhr]\",nextWeek:\"dddd [um] LT [Uhr]\",lastDay:\"[gestern um] LT [Uhr]\",lastWeek:\"[letzten] dddd [um] LT [Uhr]\"},relativeTime:{future:\"in %s\",past:\"vor %s\",s:\"ein paar Sekunden\",ss:\"%d Sekunden\",m:a,mm:\"%d Minuten\",h:a,hh:\"%d Stunden\",d:a,dd:a,M:a,MM:a,y:a,yy:a},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(106);var n=t(1);n.datepickerLocale(\"el\",\"el\",{closeText:\"Κλείσιμο\",prevText:\"Προηγούμενος\",nextText:\"Επόμενος\",currentText:\"Σήμερα\",monthNames:[\"Ιανουάριος\",\"Φεβρουάριος\",\"Μάρτιος\",\"Απρίλιος\",\"Μάιος\",\"Ιούνιος\",\"Ιούλιος\",\"Αύγουστος\",\"Σεπτέμβριος\",\"Οκτώβριος\",\"Νοέμβριος\",\"Δεκέμβριος\"],monthNamesShort:[\"Ιαν\",\"Φεβ\",\"Μαρ\",\"Απρ\",\"Μαι\",\"Ιουν\",\"Ιουλ\",\"Αυγ\",\"Σεπ\",\"Οκτ\",\"Νοε\",\"Δεκ\"],dayNames:[\"Κυριακή\",\"Δευτέρα\",\"Τρίτη\",\"Τετάρτη\",\"Πέμπτη\",\"Παρασκευή\",\"Σάββατο\"],dayNamesShort:[\"Κυρ\",\"Δευ\",\"Τρι\",\"Τετ\",\"Πεμ\",\"Παρ\",\"Σαβ\"],dayNamesMin:[\"Κυ\",\"Δε\",\"Τρ\",\"Τε\",\"Πε\",\"Πα\",\"Σα\"],weekHeader:\"Εβδ\",dateFormat:\"dd/mm/yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"el\",{buttonText:{month:\"Μήνας\",week:\"Εβδομάδα\",day:\"Ημέρα\",list:\"Ατζέντα\"},allDayText:\"Ολοήμερο\",eventLimitText:\"περισσότερα\",noEventsMessage:\"Δεν υπάρχουν γεγονότα για να εμφανιστεί\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e){return e instanceof Function||\"[object Function]\"===Object.prototype.toString.call(e)}return e.defineLocale(\"el\",{monthsNominativeEl:\"Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος\".split(\"_\"),monthsGenitiveEl:\"Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου\".split(\"_\"),months:function(e,a){return e?\"string\"==typeof a&&/D/.test(a.substring(0,a.indexOf(\"MMMM\")))?this._monthsGenitiveEl[e.month()]:this._monthsNominativeEl[e.month()]:this._monthsNominativeEl},monthsShort:\"Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ\".split(\"_\"),weekdays:\"Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο\".split(\"_\"),weekdaysShort:\"Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ\".split(\"_\"),weekdaysMin:\"Κυ_Δε_Τρ_Τε_Πε_Πα_Σα\".split(\"_\"),meridiem:function(e,a,t){return e>11?t?\"μμ\":\"ΜΜ\":t?\"πμ\":\"ΠΜ\"},isPM:function(e){return\"μ\"===(e+\"\").toLowerCase()[0]},meridiemParse:/[ΠΜ]\\.?Μ?\\.?/i,longDateFormat:{LT:\"h:mm A\",LTS:\"h:mm:ss A\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY h:mm A\",LLLL:\"dddd, D MMMM YYYY h:mm A\"},calendarEl:{sameDay:\"[Σήμερα {}] LT\",nextDay:\"[Αύριο {}] LT\",nextWeek:\"dddd [{}] LT\",lastDay:\"[Χθες {}] LT\",lastWeek:function(){switch(this.day()){case 6:return\"[το προηγούμενο] dddd [{}] LT\";default:return\"[την προηγούμενη] dddd [{}] LT\"}},sameElse:\"L\"},calendar:function(e,t){var n=this._calendarEl[e],r=t&&t.hours();return a(n)&&(n=n.apply(t)),n.replace(\"{}\",r%12==1?\"στη\":\"στις\")},relativeTime:{future:\"σε %s\",past:\"%s πριν\",s:\"λίγα δευτερόλεπτα\",ss:\"%d δευτερόλεπτα\",m:\"ένα λεπτό\",mm:\"%d λεπτά\",h:\"μία ώρα\",hh:\"%d ώρες\",d:\"μία μέρα\",dd:\"%d μέρες\",M:\"ένας μήνας\",MM:\"%d μήνες\",y:\"ένας χρόνος\",yy:\"%d χρόνια\"},dayOfMonthOrdinalParse:/\\d{1,2}η/,ordinal:\"%dη\",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(108);var n=t(1);n.datepickerLocale(\"en-au\",\"en-AU\",{closeText:\"Done\",prevText:\"Prev\",nextText:\"Next\",currentText:\"Today\",monthNames:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],dayNames:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],dayNamesShort:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],dayNamesMin:[\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"],weekHeader:\"Wk\",dateFormat:\"dd/mm/yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"en-au\")},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"en-au\",{months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),monthsShort:\"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\".split(\"_\"),weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),weekdaysShort:\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),weekdaysMin:\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),longDateFormat:{LT:\"h:mm A\",LTS:\"h:mm:ss A\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY h:mm A\",LLLL:\"dddd, D MMMM YYYY h:mm A\"},calendar:{sameDay:\"[Today at] LT\",nextDay:\"[Tomorrow at] LT\",nextWeek:\"dddd [at] LT\",lastDay:\"[Yesterday at] LT\",lastWeek:\"[Last] dddd [at] LT\",sameElse:\"L\"},relativeTime:{future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",ss:\"%d seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"},dayOfMonthOrdinalParse:/\\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?\"th\":1===a?\"st\":2===a?\"nd\":3===a?\"rd\":\"th\")},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(110),t(1).locale(\"en-ca\")},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"en-ca\",{months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),monthsShort:\"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\".split(\"_\"),weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),weekdaysShort:\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),weekdaysMin:\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),longDateFormat:{LT:\"h:mm A\",LTS:\"h:mm:ss A\",L:\"YYYY-MM-DD\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY h:mm A\",LLLL:\"dddd, MMMM D, YYYY h:mm A\"},calendar:{sameDay:\"[Today at] LT\",nextDay:\"[Tomorrow at] LT\",nextWeek:\"dddd [at] LT\",lastDay:\"[Yesterday at] LT\",lastWeek:\"[Last] dddd [at] LT\",sameElse:\"L\"},relativeTime:{future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",ss:\"%d seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"},dayOfMonthOrdinalParse:/\\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?\"th\":1===a?\"st\":2===a?\"nd\":3===a?\"rd\":\"th\")}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(112);var n=t(1);n.datepickerLocale(\"en-gb\",\"en-GB\",{closeText:\"Done\",prevText:\"Prev\",nextText:\"Next\",currentText:\"Today\",monthNames:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],dayNames:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],dayNamesShort:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],dayNamesMin:[\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"],weekHeader:\"Wk\",dateFormat:\"dd/mm/yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"en-gb\")},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"en-gb\",{months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),monthsShort:\"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\".split(\"_\"),weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),weekdaysShort:\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),weekdaysMin:\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Today at] LT\",nextDay:\"[Tomorrow at] LT\",nextWeek:\"dddd [at] LT\",lastDay:\"[Yesterday at] LT\",lastWeek:\"[Last] dddd [at] LT\",sameElse:\"L\"},relativeTime:{future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",ss:\"%d seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"},dayOfMonthOrdinalParse:/\\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?\"th\":1===a?\"st\":2===a?\"nd\":3===a?\"rd\":\"th\")},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(114),t(1).locale(\"en-ie\")},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"en-ie\",{months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),monthsShort:\"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\".split(\"_\"),weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),weekdaysShort:\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),weekdaysMin:\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD-MM-YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Today at] LT\",nextDay:\"[Tomorrow at] LT\",nextWeek:\"dddd [at] LT\",lastDay:\"[Yesterday at] LT\",lastWeek:\"[Last] dddd [at] LT\",sameElse:\"L\"},relativeTime:{future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",ss:\"%d seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"},dayOfMonthOrdinalParse:/\\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?\"th\":1===a?\"st\":2===a?\"nd\":3===a?\"rd\":\"th\")},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(116);var n=t(1);n.datepickerLocale(\"en-nz\",\"en-NZ\",{closeText:\"Done\",prevText:\"Prev\",nextText:\"Next\",currentText:\"Today\",monthNames:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],dayNames:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],dayNamesShort:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],dayNamesMin:[\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"],weekHeader:\"Wk\",dateFormat:\"dd/mm/yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"en-nz\")},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"en-nz\",{months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),monthsShort:\"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec\".split(\"_\"),weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),weekdaysShort:\"Sun_Mon_Tue_Wed_Thu_Fri_Sat\".split(\"_\"),weekdaysMin:\"Su_Mo_Tu_We_Th_Fr_Sa\".split(\"_\"),longDateFormat:{LT:\"h:mm A\",LTS:\"h:mm:ss A\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY h:mm A\",LLLL:\"dddd, D MMMM YYYY h:mm A\"},calendar:{sameDay:\"[Today at] LT\",nextDay:\"[Tomorrow at] LT\",nextWeek:\"dddd [at] LT\",lastDay:\"[Yesterday at] LT\",lastWeek:\"[Last] dddd [at] LT\",sameElse:\"L\"},relativeTime:{future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",ss:\"%d seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"},dayOfMonthOrdinalParse:/\\d{1,2}(st|nd|rd|th)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?\"th\":1===a?\"st\":2===a?\"nd\":3===a?\"rd\":\"th\")},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(118);var n=t(1);n.datepickerLocale(\"es-do\",\"es\",{closeText:\"Cerrar\",prevText:\"&#x3C;Ant\",nextText:\"Sig&#x3E;\",currentText:\"Hoy\",monthNames:[\"enero\",\"febrero\",\"marzo\",\"abril\",\"mayo\",\"junio\",\"julio\",\"agosto\",\"septiembre\",\"octubre\",\"noviembre\",\"diciembre\"],monthNamesShort:[\"ene\",\"feb\",\"mar\",\"abr\",\"may\",\"jun\",\"jul\",\"ago\",\"sep\",\"oct\",\"nov\",\"dic\"],dayNames:[\"domingo\",\"lunes\",\"martes\",\"miércoles\",\"jueves\",\"viernes\",\"sábado\"],dayNamesShort:[\"dom\",\"lun\",\"mar\",\"mié\",\"jue\",\"vie\",\"sáb\"],dayNamesMin:[\"D\",\"L\",\"M\",\"X\",\"J\",\"V\",\"S\"],weekHeader:\"Sm\",dateFormat:\"dd/mm/yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"es-do\",{buttonText:{month:\"Mes\",week:\"Semana\",day:\"Día\",list:\"Agenda\"},allDayHtml:\"Todo<br/>el día\",eventLimitText:\"más\",noEventsMessage:\"No hay eventos para mostrar\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){var a=\"ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.\".split(\"_\"),t=\"ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic\".split(\"_\"),n=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],r=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;return e.defineLocale(\"es-do\",{months:\"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre\".split(\"_\"),monthsShort:function(e,n){return e?/-MMM-/.test(n)?t[e.month()]:a[e.month()]:a},monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,monthsParse:n,longMonthsParse:n,shortMonthsParse:n,weekdays:\"domingo_lunes_martes_miércoles_jueves_viernes_sábado\".split(\"_\"),weekdaysShort:\"dom._lun._mar._mié._jue._vie._sáb.\".split(\"_\"),weekdaysMin:\"do_lu_ma_mi_ju_vi_sá\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"h:mm A\",LTS:\"h:mm:ss A\",L:\"DD/MM/YYYY\",LL:\"D [de] MMMM [de] YYYY\",LLL:\"D [de] MMMM [de] YYYY h:mm A\",LLLL:\"dddd, D [de] MMMM [de] YYYY h:mm A\"},calendar:{sameDay:function(){return\"[hoy a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},nextDay:function(){return\"[mañana a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},nextWeek:function(){return\"dddd [a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},lastDay:function(){return\"[ayer a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},lastWeek:function(){return\"[el] dddd [pasado a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},sameElse:\"L\"},relativeTime:{future:\"en %s\",past:\"hace %s\",s:\"unos segundos\",ss:\"%d segundos\",m:\"un minuto\",mm:\"%d minutos\",h:\"una hora\",hh:\"%d horas\",d:\"un día\",dd:\"%d días\",M:\"un mes\",MM:\"%d meses\",y:\"un año\",yy:\"%d años\"},dayOfMonthOrdinalParse:/\\d{1,2}º/,ordinal:\"%dº\",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(120);var n=t(1);n.datepickerLocale(\"es-us\",\"es\",{closeText:\"Cerrar\",prevText:\"&#x3C;Ant\",nextText:\"Sig&#x3E;\",currentText:\"Hoy\",monthNames:[\"enero\",\"febrero\",\"marzo\",\"abril\",\"mayo\",\"junio\",\"julio\",\"agosto\",\"septiembre\",\"octubre\",\"noviembre\",\"diciembre\"],monthNamesShort:[\"ene\",\"feb\",\"mar\",\"abr\",\"may\",\"jun\",\"jul\",\"ago\",\"sep\",\"oct\",\"nov\",\"dic\"],dayNames:[\"domingo\",\"lunes\",\"martes\",\"miércoles\",\"jueves\",\"viernes\",\"sábado\"],dayNamesShort:[\"dom\",\"lun\",\"mar\",\"mié\",\"jue\",\"vie\",\"sáb\"],dayNamesMin:[\"D\",\"L\",\"M\",\"X\",\"J\",\"V\",\"S\"],weekHeader:\"Sm\",dateFormat:\"dd/mm/yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"es-us\",{buttonText:{month:\"Mes\",week:\"Semana\",day:\"Día\",list:\"Agenda\"},allDayHtml:\"Todo<br/>el día\",eventLimitText:\"más\",noEventsMessage:\"No hay eventos para mostrar\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){var a=\"ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.\".split(\"_\"),t=\"ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic\".split(\"_\");return e.defineLocale(\"es-us\",{months:\"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre\".split(\"_\"),monthsShort:function(e,n){return e?/-MMM-/.test(n)?t[e.month()]:a[e.month()]:a},monthsParseExact:!0,weekdays:\"domingo_lunes_martes_miércoles_jueves_viernes_sábado\".split(\"_\"),weekdaysShort:\"dom._lun._mar._mié._jue._vie._sáb.\".split(\"_\"),weekdaysMin:\"do_lu_ma_mi_ju_vi_sá\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"h:mm A\",LTS:\"h:mm:ss A\",L:\"MM/DD/YYYY\",LL:\"MMMM [de] D [de] YYYY\",LLL:\"MMMM [de] D [de] YYYY h:mm A\",LLLL:\"dddd, MMMM [de] D [de] YYYY h:mm A\"},calendar:{sameDay:function(){return\"[hoy a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},nextDay:function(){return\"[mañana a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},nextWeek:function(){return\"dddd [a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},lastDay:function(){return\"[ayer a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},lastWeek:function(){return\"[el] dddd [pasado a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},sameElse:\"L\"},relativeTime:{future:\"en %s\",past:\"hace %s\",s:\"unos segundos\",ss:\"%d segundos\",m:\"un minuto\",mm:\"%d minutos\",h:\"una hora\",hh:\"%d horas\",d:\"un día\",dd:\"%d días\",M:\"un mes\",MM:\"%d meses\",y:\"un año\",yy:\"%d años\"},dayOfMonthOrdinalParse:/\\d{1,2}º/,ordinal:\"%dº\",week:{dow:0,doy:6}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(122);var n=t(1);n.datepickerLocale(\"es\",\"es\",{closeText:\"Cerrar\",prevText:\"&#x3C;Ant\",nextText:\"Sig&#x3E;\",currentText:\"Hoy\",monthNames:[\"enero\",\"febrero\",\"marzo\",\"abril\",\"mayo\",\"junio\",\"julio\",\"agosto\",\"septiembre\",\"octubre\",\"noviembre\",\"diciembre\"],monthNamesShort:[\"ene\",\"feb\",\"mar\",\"abr\",\"may\",\"jun\",\"jul\",\"ago\",\"sep\",\"oct\",\"nov\",\"dic\"],dayNames:[\"domingo\",\"lunes\",\"martes\",\"miércoles\",\"jueves\",\"viernes\",\"sábado\"],dayNamesShort:[\"dom\",\"lun\",\"mar\",\"mié\",\"jue\",\"vie\",\"sáb\"],dayNamesMin:[\"D\",\"L\",\"M\",\"X\",\"J\",\"V\",\"S\"],weekHeader:\"Sm\",dateFormat:\"dd/mm/yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"es\",{buttonText:{month:\"Mes\",week:\"Semana\",day:\"Día\",list:\"Agenda\"},allDayHtml:\"Todo<br/>el día\",eventLimitText:\"más\",noEventsMessage:\"No hay eventos para mostrar\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){var a=\"ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.\".split(\"_\"),t=\"ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic\".split(\"_\"),n=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],r=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;return e.defineLocale(\"es\",{months:\"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre\".split(\"_\"),monthsShort:function(e,n){return e?/-MMM-/.test(n)?t[e.month()]:a[e.month()]:a},monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,monthsParse:n,longMonthsParse:n,shortMonthsParse:n,weekdays:\"domingo_lunes_martes_miércoles_jueves_viernes_sábado\".split(\"_\"),weekdaysShort:\"dom._lun._mar._mié._jue._vie._sáb.\".split(\"_\"),weekdaysMin:\"do_lu_ma_mi_ju_vi_sá\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D [de] MMMM [de] YYYY\",LLL:\"D [de] MMMM [de] YYYY H:mm\",LLLL:\"dddd, D [de] MMMM [de] YYYY H:mm\"},calendar:{sameDay:function(){return\"[hoy a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},nextDay:function(){return\"[mañana a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},nextWeek:function(){return\"dddd [a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},lastDay:function(){return\"[ayer a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},lastWeek:function(){return\"[el] dddd [pasado a la\"+(1!==this.hours()?\"s\":\"\")+\"] LT\"},sameElse:\"L\"},relativeTime:{future:\"en %s\",past:\"hace %s\",s:\"unos segundos\",ss:\"%d segundos\",m:\"un minuto\",mm:\"%d minutos\",h:\"una hora\",hh:\"%d horas\",d:\"un día\",dd:\"%d días\",M:\"un mes\",MM:\"%d meses\",y:\"un año\",yy:\"%d años\"},dayOfMonthOrdinalParse:/\\d{1,2}º/,ordinal:\"%dº\",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(124);var n=t(1);n.datepickerLocale(\"et\",\"et\",{closeText:\"Sulge\",prevText:\"Eelnev\",nextText:\"Järgnev\",currentText:\"Täna\",monthNames:[\"Jaanuar\",\"Veebruar\",\"Märts\",\"Aprill\",\"Mai\",\"Juuni\",\"Juuli\",\"August\",\"September\",\"Oktoober\",\"November\",\"Detsember\"],monthNamesShort:[\"Jaan\",\"Veebr\",\"Märts\",\"Apr\",\"Mai\",\"Juuni\",\"Juuli\",\"Aug\",\"Sept\",\"Okt\",\"Nov\",\"Dets\"],dayNames:[\"Pühapäev\",\"Esmaspäev\",\"Teisipäev\",\"Kolmapäev\",\"Neljapäev\",\"Reede\",\"Laupäev\"],dayNamesShort:[\"Pühap\",\"Esmasp\",\"Teisip\",\"Kolmap\",\"Neljap\",\"Reede\",\"Laup\"],dayNamesMin:[\"P\",\"E\",\"T\",\"K\",\"N\",\"R\",\"L\"],weekHeader:\"näd\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"et\",{buttonText:{month:\"Kuu\",week:\"Nädal\",day:\"Päev\",list:\"Päevakord\"},allDayText:\"Kogu päev\",eventLimitText:function(e){return\"+ veel \"+e},noEventsMessage:\"Kuvamiseks puuduvad sündmused\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a,t,n){var r={s:[\"mõne sekundi\",\"mõni sekund\",\"paar sekundit\"],ss:[e+\"sekundi\",e+\"sekundit\"],m:[\"ühe minuti\",\"üks minut\"],mm:[e+\" minuti\",e+\" minutit\"],h:[\"ühe tunni\",\"tund aega\",\"üks tund\"],hh:[e+\" tunni\",e+\" tundi\"],d:[\"ühe päeva\",\"üks päev\"],M:[\"kuu aja\",\"kuu aega\",\"üks kuu\"],MM:[e+\" kuu\",e+\" kuud\"],y:[\"ühe aasta\",\"aasta\",\"üks aasta\"],yy:[e+\" aasta\",e+\" aastat\"]};return a?r[t][2]?r[t][2]:r[t][1]:n?r[t][0]:r[t][1]}return e.defineLocale(\"et\",{months:\"jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember\".split(\"_\"),monthsShort:\"jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets\".split(\"_\"),weekdays:\"pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev\".split(\"_\"),weekdaysShort:\"P_E_T_K_N_R_L\".split(\"_\"),weekdaysMin:\"P_E_T_K_N_R_L\".split(\"_\"),longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY H:mm\",LLLL:\"dddd, D. MMMM YYYY H:mm\"},calendar:{sameDay:\"[Täna,] LT\",nextDay:\"[Homme,] LT\",nextWeek:\"[Järgmine] dddd LT\",lastDay:\"[Eile,] LT\",lastWeek:\"[Eelmine] dddd LT\",sameElse:\"L\"},relativeTime:{future:\"%s pärast\",past:\"%s tagasi\",s:a,ss:a,m:a,mm:a,h:a,hh:a,d:a,dd:\"%d päeva\",M:a,MM:a,y:a,yy:a},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(126);var n=t(1);n.datepickerLocale(\"eu\",\"eu\",{closeText:\"Egina\",prevText:\"&#x3C;Aur\",nextText:\"Hur&#x3E;\",currentText:\"Gaur\",monthNames:[\"urtarrila\",\"otsaila\",\"martxoa\",\"apirila\",\"maiatza\",\"ekaina\",\"uztaila\",\"abuztua\",\"iraila\",\"urria\",\"azaroa\",\"abendua\"],monthNamesShort:[\"urt.\",\"ots.\",\"mar.\",\"api.\",\"mai.\",\"eka.\",\"uzt.\",\"abu.\",\"ira.\",\"urr.\",\"aza.\",\"abe.\"],dayNames:[\"igandea\",\"astelehena\",\"asteartea\",\"asteazkena\",\"osteguna\",\"ostirala\",\"larunbata\"],dayNamesShort:[\"ig.\",\"al.\",\"ar.\",\"az.\",\"og.\",\"ol.\",\"lr.\"],dayNamesMin:[\"ig\",\"al\",\"ar\",\"az\",\"og\",\"ol\",\"lr\"],weekHeader:\"As\",dateFormat:\"yy-mm-dd\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"eu\",{buttonText:{month:\"Hilabetea\",week:\"Astea\",day:\"Eguna\",list:\"Agenda\"},allDayHtml:\"Egun<br/>osoa\",eventLimitText:\"gehiago\",noEventsMessage:\"Ez dago ekitaldirik erakusteko\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"eu\",{months:\"urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua\".split(\"_\"),monthsShort:\"urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.\".split(\"_\"),monthsParseExact:!0,weekdays:\"igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata\".split(\"_\"),weekdaysShort:\"ig._al._ar._az._og._ol._lr.\".split(\"_\"),weekdaysMin:\"ig_al_ar_az_og_ol_lr\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY-MM-DD\",LL:\"YYYY[ko] MMMM[ren] D[a]\",LLL:\"YYYY[ko] MMMM[ren] D[a] HH:mm\",LLLL:\"dddd, YYYY[ko] MMMM[ren] D[a] HH:mm\",l:\"YYYY-M-D\",ll:\"YYYY[ko] MMM D[a]\",lll:\"YYYY[ko] MMM D[a] HH:mm\",llll:\"ddd, YYYY[ko] MMM D[a] HH:mm\"},calendar:{sameDay:\"[gaur] LT[etan]\",nextDay:\"[bihar] LT[etan]\",nextWeek:\"dddd LT[etan]\",lastDay:\"[atzo] LT[etan]\",lastWeek:\"[aurreko] dddd LT[etan]\",sameElse:\"L\"},relativeTime:{future:\"%s barru\",past:\"duela %s\",s:\"segundo batzuk\",ss:\"%d segundo\",m:\"minutu bat\",mm:\"%d minutu\",h:\"ordu bat\",hh:\"%d ordu\",d:\"egun bat\",dd:\"%d egun\",M:\"hilabete bat\",MM:\"%d hilabete\",y:\"urte bat\",yy:\"%d urte\"},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(128);var n=t(1);n.datepickerLocale(\"fa\",\"fa\",{closeText:\"بستن\",prevText:\"&#x3C;قبلی\",nextText:\"بعدی&#x3E;\",currentText:\"امروز\",\nmonthNames:[\"ژانویه\",\"فوریه\",\"مارس\",\"آوریل\",\"مه\",\"ژوئن\",\"ژوئیه\",\"اوت\",\"سپتامبر\",\"اکتبر\",\"نوامبر\",\"دسامبر\"],monthNamesShort:[\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\"],dayNames:[\"يکشنبه\",\"دوشنبه\",\"سه‌شنبه\",\"چهارشنبه\",\"پنجشنبه\",\"جمعه\",\"شنبه\"],dayNamesShort:[\"ی\",\"د\",\"س\",\"چ\",\"پ\",\"ج\",\"ش\"],dayNamesMin:[\"ی\",\"د\",\"س\",\"چ\",\"پ\",\"ج\",\"ش\"],weekHeader:\"هف\",dateFormat:\"yy/mm/dd\",firstDay:6,isRTL:!0,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"fa\",{buttonText:{month:\"ماه\",week:\"هفته\",day:\"روز\",list:\"برنامه\"},allDayText:\"تمام روز\",eventLimitText:function(e){return\"بیش از \"+e},noEventsMessage:\"هیچ رویدادی به نمایش\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){var a={1:\"۱\",2:\"۲\",3:\"۳\",4:\"۴\",5:\"۵\",6:\"۶\",7:\"۷\",8:\"۸\",9:\"۹\",0:\"۰\"},t={\"۱\":\"1\",\"۲\":\"2\",\"۳\":\"3\",\"۴\":\"4\",\"۵\":\"5\",\"۶\":\"6\",\"۷\":\"7\",\"۸\":\"8\",\"۹\":\"9\",\"۰\":\"0\"};return e.defineLocale(\"fa\",{months:\"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر\".split(\"_\"),monthsShort:\"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر\".split(\"_\"),weekdays:\"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه\".split(\"_\"),weekdaysShort:\"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه\".split(\"_\"),weekdaysMin:\"ی_د_س_چ_پ_ج_ش\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},meridiemParse:/قبل از ظهر|بعد از ظهر/,isPM:function(e){return/بعد از ظهر/.test(e)},meridiem:function(e,a,t){return e<12?\"قبل از ظهر\":\"بعد از ظهر\"},calendar:{sameDay:\"[امروز ساعت] LT\",nextDay:\"[فردا ساعت] LT\",nextWeek:\"dddd [ساعت] LT\",lastDay:\"[دیروز ساعت] LT\",lastWeek:\"dddd [پیش] [ساعت] LT\",sameElse:\"L\"},relativeTime:{future:\"در %s\",past:\"%s پیش\",s:\"چند ثانیه\",ss:\"ثانیه d%\",m:\"یک دقیقه\",mm:\"%d دقیقه\",h:\"یک ساعت\",hh:\"%d ساعت\",d:\"یک روز\",dd:\"%d روز\",M:\"یک ماه\",MM:\"%d ماه\",y:\"یک سال\",yy:\"%d سال\"},preparse:function(e){return e.replace(/[۰-۹]/g,function(e){return t[e]}).replace(/،/g,\",\")},postformat:function(e){return e.replace(/\\d/g,function(e){return a[e]}).replace(/,/g,\"،\")},dayOfMonthOrdinalParse:/\\d{1,2}م/,ordinal:\"%dم\",week:{dow:6,doy:12}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(130);var n=t(1);n.datepickerLocale(\"fi\",\"fi\",{closeText:\"Sulje\",prevText:\"&#xAB;Edellinen\",nextText:\"Seuraava&#xBB;\",currentText:\"Tänään\",monthNames:[\"Tammikuu\",\"Helmikuu\",\"Maaliskuu\",\"Huhtikuu\",\"Toukokuu\",\"Kesäkuu\",\"Heinäkuu\",\"Elokuu\",\"Syyskuu\",\"Lokakuu\",\"Marraskuu\",\"Joulukuu\"],monthNamesShort:[\"Tammi\",\"Helmi\",\"Maalis\",\"Huhti\",\"Touko\",\"Kesä\",\"Heinä\",\"Elo\",\"Syys\",\"Loka\",\"Marras\",\"Joulu\"],dayNamesShort:[\"Su\",\"Ma\",\"Ti\",\"Ke\",\"To\",\"Pe\",\"La\"],dayNames:[\"Sunnuntai\",\"Maanantai\",\"Tiistai\",\"Keskiviikko\",\"Torstai\",\"Perjantai\",\"Lauantai\"],dayNamesMin:[\"Su\",\"Ma\",\"Ti\",\"Ke\",\"To\",\"Pe\",\"La\"],weekHeader:\"Vk\",dateFormat:\"d.m.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"fi\",{buttonText:{month:\"Kuukausi\",week:\"Viikko\",day:\"Päivä\",list:\"Tapahtumat\"},allDayText:\"Koko päivä\",eventLimitText:\"lisää\",noEventsMessage:\"Ei näytettäviä tapahtumia\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a,n,r){var s=\"\";switch(n){case\"s\":return r?\"muutaman sekunnin\":\"muutama sekunti\";case\"ss\":return r?\"sekunnin\":\"sekuntia\";case\"m\":return r?\"minuutin\":\"minuutti\";case\"mm\":s=r?\"minuutin\":\"minuuttia\";break;case\"h\":return r?\"tunnin\":\"tunti\";case\"hh\":s=r?\"tunnin\":\"tuntia\";break;case\"d\":return r?\"päivän\":\"päivä\";case\"dd\":s=r?\"päivän\":\"päivää\";break;case\"M\":return r?\"kuukauden\":\"kuukausi\";case\"MM\":s=r?\"kuukauden\":\"kuukautta\";break;case\"y\":return r?\"vuoden\":\"vuosi\";case\"yy\":s=r?\"vuoden\":\"vuotta\"}return s=t(e,r)+\" \"+s}function t(e,a){return e<10?a?r[e]:n[e]:e}var n=\"nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän\".split(\" \"),r=[\"nolla\",\"yhden\",\"kahden\",\"kolmen\",\"neljän\",\"viiden\",\"kuuden\",n[7],n[8],n[9]];return e.defineLocale(\"fi\",{months:\"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu\".split(\"_\"),monthsShort:\"tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu\".split(\"_\"),weekdays:\"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai\".split(\"_\"),weekdaysShort:\"su_ma_ti_ke_to_pe_la\".split(\"_\"),weekdaysMin:\"su_ma_ti_ke_to_pe_la\".split(\"_\"),longDateFormat:{LT:\"HH.mm\",LTS:\"HH.mm.ss\",L:\"DD.MM.YYYY\",LL:\"Do MMMM[ta] YYYY\",LLL:\"Do MMMM[ta] YYYY, [klo] HH.mm\",LLLL:\"dddd, Do MMMM[ta] YYYY, [klo] HH.mm\",l:\"D.M.YYYY\",ll:\"Do MMM YYYY\",lll:\"Do MMM YYYY, [klo] HH.mm\",llll:\"ddd, Do MMM YYYY, [klo] HH.mm\"},calendar:{sameDay:\"[tänään] [klo] LT\",nextDay:\"[huomenna] [klo] LT\",nextWeek:\"dddd [klo] LT\",lastDay:\"[eilen] [klo] LT\",lastWeek:\"[viime] dddd[na] [klo] LT\",sameElse:\"L\"},relativeTime:{future:\"%s päästä\",past:\"%s sitten\",s:a,ss:a,m:a,mm:a,h:a,hh:a,d:a,dd:a,M:a,MM:a,y:a,yy:a},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(132);var n=t(1);n.datepickerLocale(\"fr-ca\",\"fr-CA\",{closeText:\"Fermer\",prevText:\"Précédent\",nextText:\"Suivant\",currentText:\"Aujourd'hui\",monthNames:[\"janvier\",\"février\",\"mars\",\"avril\",\"mai\",\"juin\",\"juillet\",\"août\",\"septembre\",\"octobre\",\"novembre\",\"décembre\"],monthNamesShort:[\"janv.\",\"févr.\",\"mars\",\"avril\",\"mai\",\"juin\",\"juil.\",\"août\",\"sept.\",\"oct.\",\"nov.\",\"déc.\"],dayNames:[\"dimanche\",\"lundi\",\"mardi\",\"mercredi\",\"jeudi\",\"vendredi\",\"samedi\"],dayNamesShort:[\"dim.\",\"lun.\",\"mar.\",\"mer.\",\"jeu.\",\"ven.\",\"sam.\"],dayNamesMin:[\"D\",\"L\",\"M\",\"M\",\"J\",\"V\",\"S\"],weekHeader:\"Sem.\",dateFormat:\"yy-mm-dd\",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"fr-ca\",{buttonText:{year:\"Année\",month:\"Mois\",week:\"Semaine\",day:\"Jour\",list:\"Mon planning\"},allDayHtml:\"Toute la<br/>journée\",eventLimitText:\"en plus\",noEventsMessage:\"Aucun événement à afficher\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"fr-ca\",{months:\"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre\".split(\"_\"),monthsShort:\"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.\".split(\"_\"),monthsParseExact:!0,weekdays:\"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi\".split(\"_\"),weekdaysShort:\"dim._lun._mar._mer._jeu._ven._sam.\".split(\"_\"),weekdaysMin:\"di_lu_ma_me_je_ve_sa\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY-MM-DD\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Aujourd’hui à] LT\",nextDay:\"[Demain à] LT\",nextWeek:\"dddd [à] LT\",lastDay:\"[Hier à] LT\",lastWeek:\"dddd [dernier à] LT\",sameElse:\"L\"},relativeTime:{future:\"dans %s\",past:\"il y a %s\",s:\"quelques secondes\",ss:\"%d secondes\",m:\"une minute\",mm:\"%d minutes\",h:\"une heure\",hh:\"%d heures\",d:\"un jour\",dd:\"%d jours\",M:\"un mois\",MM:\"%d mois\",y:\"un an\",yy:\"%d ans\"},dayOfMonthOrdinalParse:/\\d{1,2}(er|e)/,ordinal:function(e,a){switch(a){default:case\"M\":case\"Q\":case\"D\":case\"DDD\":case\"d\":return e+(1===e?\"er\":\"e\");case\"w\":case\"W\":return e+(1===e?\"re\":\"e\")}}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(134);var n=t(1);n.datepickerLocale(\"fr-ch\",\"fr-CH\",{closeText:\"Fermer\",prevText:\"&#x3C;Préc\",nextText:\"Suiv&#x3E;\",currentText:\"Courant\",monthNames:[\"janvier\",\"février\",\"mars\",\"avril\",\"mai\",\"juin\",\"juillet\",\"août\",\"septembre\",\"octobre\",\"novembre\",\"décembre\"],monthNamesShort:[\"janv.\",\"févr.\",\"mars\",\"avril\",\"mai\",\"juin\",\"juil.\",\"août\",\"sept.\",\"oct.\",\"nov.\",\"déc.\"],dayNames:[\"dimanche\",\"lundi\",\"mardi\",\"mercredi\",\"jeudi\",\"vendredi\",\"samedi\"],dayNamesShort:[\"dim.\",\"lun.\",\"mar.\",\"mer.\",\"jeu.\",\"ven.\",\"sam.\"],dayNamesMin:[\"D\",\"L\",\"M\",\"M\",\"J\",\"V\",\"S\"],weekHeader:\"Sm\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"fr-ch\",{buttonText:{year:\"Année\",month:\"Mois\",week:\"Semaine\",day:\"Jour\",list:\"Mon planning\"},allDayHtml:\"Toute la<br/>journée\",eventLimitText:\"en plus\",noEventsMessage:\"Aucun événement à afficher\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"fr-ch\",{months:\"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre\".split(\"_\"),monthsShort:\"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.\".split(\"_\"),monthsParseExact:!0,weekdays:\"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi\".split(\"_\"),weekdaysShort:\"dim._lun._mar._mer._jeu._ven._sam.\".split(\"_\"),weekdaysMin:\"di_lu_ma_me_je_ve_sa\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Aujourd’hui à] LT\",nextDay:\"[Demain à] LT\",nextWeek:\"dddd [à] LT\",lastDay:\"[Hier à] LT\",lastWeek:\"dddd [dernier à] LT\",sameElse:\"L\"},relativeTime:{future:\"dans %s\",past:\"il y a %s\",s:\"quelques secondes\",ss:\"%d secondes\",m:\"une minute\",mm:\"%d minutes\",h:\"une heure\",hh:\"%d heures\",d:\"un jour\",dd:\"%d jours\",M:\"un mois\",MM:\"%d mois\",y:\"un an\",yy:\"%d ans\"},dayOfMonthOrdinalParse:/\\d{1,2}(er|e)/,ordinal:function(e,a){switch(a){default:case\"M\":case\"Q\":case\"D\":case\"DDD\":case\"d\":return e+(1===e?\"er\":\"e\");case\"w\":case\"W\":return e+(1===e?\"re\":\"e\")}},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(136);var n=t(1);n.datepickerLocale(\"fr\",\"fr\",{closeText:\"Fermer\",prevText:\"Précédent\",nextText:\"Suivant\",currentText:\"Aujourd'hui\",monthNames:[\"janvier\",\"février\",\"mars\",\"avril\",\"mai\",\"juin\",\"juillet\",\"août\",\"septembre\",\"octobre\",\"novembre\",\"décembre\"],monthNamesShort:[\"janv.\",\"févr.\",\"mars\",\"avr.\",\"mai\",\"juin\",\"juil.\",\"août\",\"sept.\",\"oct.\",\"nov.\",\"déc.\"],dayNames:[\"dimanche\",\"lundi\",\"mardi\",\"mercredi\",\"jeudi\",\"vendredi\",\"samedi\"],dayNamesShort:[\"dim.\",\"lun.\",\"mar.\",\"mer.\",\"jeu.\",\"ven.\",\"sam.\"],dayNamesMin:[\"D\",\"L\",\"M\",\"M\",\"J\",\"V\",\"S\"],weekHeader:\"Sem.\",dateFormat:\"dd/mm/yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"fr\",{buttonText:{year:\"Année\",month:\"Mois\",week:\"Semaine\",day:\"Jour\",list:\"Mon planning\"},allDayHtml:\"Toute la<br/>journée\",eventLimitText:\"en plus\",noEventsMessage:\"Aucun événement à afficher\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"fr\",{months:\"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre\".split(\"_\"),monthsShort:\"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.\".split(\"_\"),monthsParseExact:!0,weekdays:\"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi\".split(\"_\"),weekdaysShort:\"dim._lun._mar._mer._jeu._ven._sam.\".split(\"_\"),weekdaysMin:\"di_lu_ma_me_je_ve_sa\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Aujourd’hui à] LT\",nextDay:\"[Demain à] LT\",nextWeek:\"dddd [à] LT\",lastDay:\"[Hier à] LT\",lastWeek:\"dddd [dernier à] LT\",sameElse:\"L\"},relativeTime:{future:\"dans %s\",past:\"il y a %s\",s:\"quelques secondes\",ss:\"%d secondes\",m:\"une minute\",mm:\"%d minutes\",h:\"une heure\",hh:\"%d heures\",d:\"un jour\",dd:\"%d jours\",M:\"un mois\",MM:\"%d mois\",y:\"un an\",yy:\"%d ans\"},dayOfMonthOrdinalParse:/\\d{1,2}(er|)/,ordinal:function(e,a){switch(a){case\"D\":return e+(1===e?\"er\":\"\");default:case\"M\":case\"Q\":case\"DDD\":case\"d\":return e+(1===e?\"er\":\"e\");case\"w\":case\"W\":return e+(1===e?\"re\":\"e\")}},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(138);var n=t(1);n.datepickerLocale(\"gl\",\"gl\",{closeText:\"Pechar\",prevText:\"&#x3C;Ant\",nextText:\"Seg&#x3E;\",currentText:\"Hoxe\",monthNames:[\"Xaneiro\",\"Febreiro\",\"Marzo\",\"Abril\",\"Maio\",\"Xuño\",\"Xullo\",\"Agosto\",\"Setembro\",\"Outubro\",\"Novembro\",\"Decembro\"],monthNamesShort:[\"Xan\",\"Feb\",\"Mar\",\"Abr\",\"Mai\",\"Xuñ\",\"Xul\",\"Ago\",\"Set\",\"Out\",\"Nov\",\"Dec\"],dayNames:[\"Domingo\",\"Luns\",\"Martes\",\"Mércores\",\"Xoves\",\"Venres\",\"Sábado\"],dayNamesShort:[\"Dom\",\"Lun\",\"Mar\",\"Mér\",\"Xov\",\"Ven\",\"Sáb\"],dayNamesMin:[\"Do\",\"Lu\",\"Ma\",\"Mé\",\"Xo\",\"Ve\",\"Sá\"],weekHeader:\"Sm\",dateFormat:\"dd/mm/yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"gl\",{buttonText:{month:\"Mes\",week:\"Semana\",day:\"Día\",list:\"Axenda\"},allDayHtml:\"Todo<br/>o día\",eventLimitText:\"máis\",noEventsMessage:\"Non hai eventos para amosar\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"gl\",{months:\"xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro\".split(\"_\"),monthsShort:\"xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.\".split(\"_\"),monthsParseExact:!0,weekdays:\"domingo_luns_martes_mércores_xoves_venres_sábado\".split(\"_\"),weekdaysShort:\"dom._lun._mar._mér._xov._ven._sáb.\".split(\"_\"),weekdaysMin:\"do_lu_ma_mé_xo_ve_sá\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D [de] MMMM [de] YYYY\",LLL:\"D [de] MMMM [de] YYYY H:mm\",LLLL:\"dddd, D [de] MMMM [de] YYYY H:mm\"},calendar:{sameDay:function(){return\"[hoxe \"+(1!==this.hours()?\"ás\":\"á\")+\"] LT\"},nextDay:function(){return\"[mañá \"+(1!==this.hours()?\"ás\":\"á\")+\"] LT\"},nextWeek:function(){return\"dddd [\"+(1!==this.hours()?\"ás\":\"a\")+\"] LT\"},lastDay:function(){return\"[onte \"+(1!==this.hours()?\"á\":\"a\")+\"] LT\"},lastWeek:function(){return\"[o] dddd [pasado \"+(1!==this.hours()?\"ás\":\"a\")+\"] LT\"},sameElse:\"L\"},relativeTime:{future:function(e){return 0===e.indexOf(\"un\")?\"n\"+e:\"en \"+e},past:\"hai %s\",s:\"uns segundos\",ss:\"%d segundos\",m:\"un minuto\",mm:\"%d minutos\",h:\"unha hora\",hh:\"%d horas\",d:\"un día\",dd:\"%d días\",M:\"un mes\",MM:\"%d meses\",y:\"un ano\",yy:\"%d anos\"},dayOfMonthOrdinalParse:/\\d{1,2}º/,ordinal:\"%dº\",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(140);var n=t(1);n.datepickerLocale(\"he\",\"he\",{closeText:\"סגור\",prevText:\"&#x3C;הקודם\",nextText:\"הבא&#x3E;\",currentText:\"היום\",monthNames:[\"ינואר\",\"פברואר\",\"מרץ\",\"אפריל\",\"מאי\",\"יוני\",\"יולי\",\"אוגוסט\",\"ספטמבר\",\"אוקטובר\",\"נובמבר\",\"דצמבר\"],monthNamesShort:[\"ינו\",\"פבר\",\"מרץ\",\"אפר\",\"מאי\",\"יוני\",\"יולי\",\"אוג\",\"ספט\",\"אוק\",\"נוב\",\"דצמ\"],dayNames:[\"ראשון\",\"שני\",\"שלישי\",\"רביעי\",\"חמישי\",\"שישי\",\"שבת\"],dayNamesShort:[\"א'\",\"ב'\",\"ג'\",\"ד'\",\"ה'\",\"ו'\",\"שבת\"],dayNamesMin:[\"א'\",\"ב'\",\"ג'\",\"ד'\",\"ה'\",\"ו'\",\"שבת\"],weekHeader:\"Wk\",dateFormat:\"dd/mm/yy\",firstDay:0,isRTL:!0,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"he\",{buttonText:{month:\"חודש\",week:\"שבוע\",day:\"יום\",list:\"סדר יום\"},allDayText:\"כל היום\",eventLimitText:\"אחר\",noEventsMessage:\"אין אירועים להצגה\",weekNumberTitle:\"שבוע\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"he\",{months:\"ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר\".split(\"_\"),monthsShort:\"ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳\".split(\"_\"),weekdays:\"ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת\".split(\"_\"),weekdaysShort:\"א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳\".split(\"_\"),weekdaysMin:\"א_ב_ג_ד_ה_ו_ש\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D [ב]MMMM YYYY\",LLL:\"D [ב]MMMM YYYY HH:mm\",LLLL:\"dddd, D [ב]MMMM YYYY HH:mm\",l:\"D/M/YYYY\",ll:\"D MMM YYYY\",lll:\"D MMM YYYY HH:mm\",llll:\"ddd, D MMM YYYY HH:mm\"},calendar:{sameDay:\"[היום ב־]LT\",nextDay:\"[מחר ב־]LT\",nextWeek:\"dddd [בשעה] LT\",lastDay:\"[אתמול ב־]LT\",lastWeek:\"[ביום] dddd [האחרון בשעה] LT\",sameElse:\"L\"},relativeTime:{future:\"בעוד %s\",past:\"לפני %s\",s:\"מספר שניות\",ss:\"%d שניות\",m:\"דקה\",mm:\"%d דקות\",h:\"שעה\",hh:function(e){return 2===e?\"שעתיים\":e+\" שעות\"},d:\"יום\",dd:function(e){return 2===e?\"יומיים\":e+\" ימים\"},M:\"חודש\",MM:function(e){return 2===e?\"חודשיים\":e+\" חודשים\"},y:\"שנה\",yy:function(e){return 2===e?\"שנתיים\":e%10==0&&10!==e?e+\" שנה\":e+\" שנים\"}},meridiemParse:/אחה\"צ|לפנה\"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,isPM:function(e){return/^(אחה\"צ|אחרי הצהריים|בערב)$/.test(e)},meridiem:function(e,a,t){return e<5?\"לפנות בוקר\":e<10?\"בבוקר\":e<12?t?'לפנה\"צ':\"לפני הצהריים\":e<18?t?'אחה\"צ':\"אחרי הצהריים\":\"בערב\"}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(142);var n=t(1);n.datepickerLocale(\"hi\",\"hi\",{closeText:\"बंद\",prevText:\"पिछला\",nextText:\"अगला\",currentText:\"आज\",monthNames:[\"जनवरी \",\"फरवरी\",\"मार्च\",\"अप्रेल\",\"मई\",\"जून\",\"जूलाई\",\"अगस्त \",\"सितम्बर\",\"अक्टूबर\",\"नवम्बर\",\"दिसम्बर\"],monthNamesShort:[\"जन\",\"फर\",\"मार्च\",\"अप्रेल\",\"मई\",\"जून\",\"जूलाई\",\"अग\",\"सित\",\"अक्ट\",\"नव\",\"दि\"],dayNames:[\"रविवार\",\"सोमवार\",\"मंगलवार\",\"बुधवार\",\"गुरुवार\",\"शुक्रवार\",\"शनिवार\"],dayNamesShort:[\"रवि\",\"सोम\",\"मंगल\",\"बुध\",\"गुरु\",\"शुक्र\",\"शनि\"],dayNamesMin:[\"रवि\",\"सोम\",\"मंगल\",\"बुध\",\"गुरु\",\"शुक्र\",\"शनि\"],weekHeader:\"हफ्ता\",dateFormat:\"dd/mm/yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"hi\",{buttonText:{month:\"महीना\",week:\"सप्ताह\",day:\"दिन\",list:\"कार्यसूची\"},allDayText:\"सभी दिन\",eventLimitText:function(e){return\"+अधिक \"+e},noEventsMessage:\"कोई घटनाओं को प्रदर्शित करने के लिए\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){var a={1:\"१\",2:\"२\",3:\"३\",4:\"४\",5:\"५\",6:\"६\",7:\"७\",8:\"८\",9:\"९\",0:\"०\"},t={\"१\":\"1\",\"२\":\"2\",\"३\":\"3\",\"४\":\"4\",\"५\":\"5\",\"६\":\"6\",\"७\":\"7\",\"८\":\"8\",\"९\":\"9\",\"०\":\"0\"};return e.defineLocale(\"hi\",{months:\"जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर\".split(\"_\"),monthsShort:\"जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.\".split(\"_\"),monthsParseExact:!0,weekdays:\"रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार\".split(\"_\"),weekdaysShort:\"रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि\".split(\"_\"),weekdaysMin:\"र_सो_मं_बु_गु_शु_श\".split(\"_\"),longDateFormat:{LT:\"A h:mm बजे\",LTS:\"A h:mm:ss बजे\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY, A h:mm बजे\",LLLL:\"dddd, D MMMM YYYY, A h:mm बजे\"},calendar:{sameDay:\"[आज] LT\",nextDay:\"[कल] LT\",nextWeek:\"dddd, LT\",lastDay:\"[कल] LT\",lastWeek:\"[पिछले] dddd, LT\",sameElse:\"L\"},relativeTime:{future:\"%s में\",past:\"%s पहले\",s:\"कुछ ही क्षण\",ss:\"%d सेकंड\",m:\"एक मिनट\",mm:\"%d मिनट\",h:\"एक घंटा\",hh:\"%d घंटे\",d:\"एक दिन\",dd:\"%d दिन\",M:\"एक महीने\",MM:\"%d महीने\",y:\"एक वर्ष\",yy:\"%d वर्ष\"},preparse:function(e){return e.replace(/[१२३४५६७८९०]/g,function(e){return t[e]})},postformat:function(e){return e.replace(/\\d/g,function(e){return a[e]})},meridiemParse:/रात|सुबह|दोपहर|शाम/,meridiemHour:function(e,a){return 12===e&&(e=0),\"रात\"===a?e<4?e:e+12:\"सुबह\"===a?e:\"दोपहर\"===a?e>=10?e:e+12:\"शाम\"===a?e+12:void 0},meridiem:function(e,a,t){return e<4?\"रात\":e<10?\"सुबह\":e<17?\"दोपहर\":e<20?\"शाम\":\"रात\"},week:{dow:0,doy:6}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(144);var n=t(1);n.datepickerLocale(\"hr\",\"hr\",{closeText:\"Zatvori\",prevText:\"&#x3C;\",nextText:\"&#x3E;\",currentText:\"Danas\",monthNames:[\"Siječanj\",\"Veljača\",\"Ožujak\",\"Travanj\",\"Svibanj\",\"Lipanj\",\"Srpanj\",\"Kolovoz\",\"Rujan\",\"Listopad\",\"Studeni\",\"Prosinac\"],monthNamesShort:[\"Sij\",\"Velj\",\"Ožu\",\"Tra\",\"Svi\",\"Lip\",\"Srp\",\"Kol\",\"Ruj\",\"Lis\",\"Stu\",\"Pro\"],dayNames:[\"Nedjelja\",\"Ponedjeljak\",\"Utorak\",\"Srijeda\",\"Četvrtak\",\"Petak\",\"Subota\"],dayNamesShort:[\"Ned\",\"Pon\",\"Uto\",\"Sri\",\"Čet\",\"Pet\",\"Sub\"],dayNamesMin:[\"Ne\",\"Po\",\"Ut\",\"Sr\",\"Če\",\"Pe\",\"Su\"],weekHeader:\"Tje\",dateFormat:\"dd.mm.yy.\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"hr\",{buttonText:{prev:\"Prijašnji\",next:\"Sljedeći\",month:\"Mjesec\",week:\"Tjedan\",day:\"Dan\",list:\"Raspored\"},allDayText:\"Cijeli dan\",eventLimitText:function(e){return\"+ još \"+e},noEventsMessage:\"Nema događaja za prikaz\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a,t){var n=e+\" \";switch(t){case\"ss\":return n+=1===e?\"sekunda\":2===e||3===e||4===e?\"sekunde\":\"sekundi\";case\"m\":return a?\"jedna minuta\":\"jedne minute\";case\"mm\":return n+=1===e?\"minuta\":2===e||3===e||4===e?\"minute\":\"minuta\";case\"h\":return a?\"jedan sat\":\"jednog sata\";case\"hh\":return n+=1===e?\"sat\":2===e||3===e||4===e?\"sata\":\"sati\";case\"dd\":return n+=1===e?\"dan\":\"dana\";case\"MM\":return n+=1===e?\"mjesec\":2===e||3===e||4===e?\"mjeseca\":\"mjeseci\";case\"yy\":return n+=1===e?\"godina\":2===e||3===e||4===e?\"godine\":\"godina\"}}return e.defineLocale(\"hr\",{months:{format:\"siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca\".split(\"_\"),standalone:\"siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac\".split(\"_\")},monthsShort:\"sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.\".split(\"_\"),monthsParseExact:!0,weekdays:\"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota\".split(\"_\"),weekdaysShort:\"ned._pon._uto._sri._čet._pet._sub.\".split(\"_\"),weekdaysMin:\"ne_po_ut_sr_če_pe_su\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY H:mm\",LLLL:\"dddd, D. MMMM YYYY H:mm\"},calendar:{sameDay:\"[danas u] LT\",nextDay:\"[sutra u] LT\",nextWeek:function(){switch(this.day()){case 0:return\"[u] [nedjelju] [u] LT\";case 3:return\"[u] [srijedu] [u] LT\";case 6:return\"[u] [subotu] [u] LT\";case 1:case 2:case 4:case 5:return\"[u] dddd [u] LT\"}},lastDay:\"[jučer u] LT\",lastWeek:function(){switch(this.day()){case 0:case 3:return\"[prošlu] dddd [u] LT\";case 6:return\"[prošle] [subote] [u] LT\";case 1:case 2:case 4:case 5:return\"[prošli] dddd [u] LT\"}},sameElse:\"L\"},relativeTime:{future:\"za %s\",past:\"prije %s\",s:\"par sekundi\",ss:a,m:a,mm:a,h:a,hh:a,d:\"dan\",dd:a,M:\"mjesec\",MM:a,y:\"godinu\",yy:a},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(146);var n=t(1);n.datepickerLocale(\"hu\",\"hu\",{closeText:\"bezár\",prevText:\"vissza\",nextText:\"előre\",currentText:\"ma\",monthNames:[\"Január\",\"Február\",\"Március\",\"Április\",\"Május\",\"Június\",\"Július\",\"Augusztus\",\"Szeptember\",\"Október\",\"November\",\"December\"],monthNamesShort:[\"Jan\",\"Feb\",\"Már\",\"Ápr\",\"Máj\",\"Jún\",\"Júl\",\"Aug\",\"Szep\",\"Okt\",\"Nov\",\"Dec\"],dayNames:[\"Vasárnap\",\"Hétfő\",\"Kedd\",\"Szerda\",\"Csütörtök\",\"Péntek\",\"Szombat\"],dayNamesShort:[\"Vas\",\"Hét\",\"Ked\",\"Sze\",\"Csü\",\"Pén\",\"Szo\"],dayNamesMin:[\"V\",\"H\",\"K\",\"Sze\",\"Cs\",\"P\",\"Szo\"],weekHeader:\"Hét\",dateFormat:\"yy.mm.dd.\",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:\"\"}),n.locale(\"hu\",{buttonText:{month:\"Hónap\",week:\"Hét\",day:\"Nap\",list:\"Napló\"},allDayText:\"Egész nap\",eventLimitText:\"további\",noEventsMessage:\"Nincs megjeleníthető esemény\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a,t,n){var r=e;switch(t){case\"s\":return n||a?\"néhány másodperc\":\"néhány másodperce\";case\"ss\":return r+(n||a)?\" másodperc\":\" másodperce\";case\"m\":return\"egy\"+(n||a?\" perc\":\" perce\");case\"mm\":return r+(n||a?\" perc\":\" perce\");case\"h\":return\"egy\"+(n||a?\" óra\":\" órája\");case\"hh\":return r+(n||a?\" óra\":\" órája\");case\"d\":return\"egy\"+(n||a?\" nap\":\" napja\");case\"dd\":return r+(n||a?\" nap\":\" napja\");case\"M\":return\"egy\"+(n||a?\" hónap\":\" hónapja\");case\"MM\":return r+(n||a?\" hónap\":\" hónapja\");case\"y\":return\"egy\"+(n||a?\" év\":\" éve\");case\"yy\":return r+(n||a?\" év\":\" éve\")}return\"\"}function t(e){return(e?\"\":\"[múlt] \")+\"[\"+n[this.day()]+\"] LT[-kor]\"}var n=\"vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton\".split(\" \");return e.defineLocale(\"hu\",{months:\"január_február_március_április_május_június_július_augusztus_szeptember_október_november_december\".split(\"_\"),monthsShort:\"jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec\".split(\"_\"),weekdays:\"vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat\".split(\"_\"),weekdaysShort:\"vas_hét_kedd_sze_csüt_pén_szo\".split(\"_\"),weekdaysMin:\"v_h_k_sze_cs_p_szo\".split(\"_\"),longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"YYYY.MM.DD.\",LL:\"YYYY. MMMM D.\",LLL:\"YYYY. MMMM D. H:mm\",LLLL:\"YYYY. MMMM D., dddd H:mm\"},meridiemParse:/de|du/i,isPM:function(e){return\"u\"===e.charAt(1).toLowerCase()},meridiem:function(e,a,t){return e<12?!0===t?\"de\":\"DE\":!0===t?\"du\":\"DU\"},calendar:{sameDay:\"[ma] LT[-kor]\",nextDay:\"[holnap] LT[-kor]\",nextWeek:function(){return t.call(this,!0)},lastDay:\"[tegnap] LT[-kor]\",lastWeek:function(){return t.call(this,!1)},sameElse:\"L\"},relativeTime:{future:\"%s múlva\",past:\"%s\",s:a,ss:a,m:a,mm:a,h:a,hh:a,d:a,dd:a,M:a,MM:a,y:a,yy:a},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(148);var n=t(1);n.datepickerLocale(\"id\",\"id\",{closeText:\"Tutup\",prevText:\"&#x3C;mundur\",nextText:\"maju&#x3E;\",currentText:\"hari ini\",monthNames:[\"Januari\",\"Februari\",\"Maret\",\"April\",\"Mei\",\"Juni\",\"Juli\",\"Agustus\",\"September\",\"Oktober\",\"Nopember\",\"Desember\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"Mei\",\"Jun\",\"Jul\",\"Agus\",\"Sep\",\"Okt\",\"Nop\",\"Des\"],dayNames:[\"Minggu\",\"Senin\",\"Selasa\",\"Rabu\",\"Kamis\",\"Jumat\",\"Sabtu\"],dayNamesShort:[\"Min\",\"Sen\",\"Sel\",\"Rab\",\"kam\",\"Jum\",\"Sab\"],dayNamesMin:[\"Mg\",\"Sn\",\"Sl\",\"Rb\",\"Km\",\"jm\",\"Sb\"],weekHeader:\"Mg\",dateFormat:\"dd/mm/yy\",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"id\",{buttonText:{month:\"Bulan\",week:\"Minggu\",day:\"Hari\",list:\"Agenda\"},allDayHtml:\"Sehari<br/>penuh\",eventLimitText:\"lebih\",noEventsMessage:\"Tidak ada acara untuk ditampilkan\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"id\",{months:\"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember\".split(\"_\"),monthsShort:\"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des\".split(\"_\"),weekdays:\"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu\".split(\"_\"),weekdaysShort:\"Min_Sen_Sel_Rab_Kam_Jum_Sab\".split(\"_\"),weekdaysMin:\"Mg_Sn_Sl_Rb_Km_Jm_Sb\".split(\"_\"),longDateFormat:{LT:\"HH.mm\",LTS:\"HH.mm.ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY [pukul] HH.mm\",LLLL:\"dddd, D MMMM YYYY [pukul] HH.mm\"},meridiemParse:/pagi|siang|sore|malam/,meridiemHour:function(e,a){return 12===e&&(e=0),\"pagi\"===a?e:\"siang\"===a?e>=11?e:e+12:\"sore\"===a||\"malam\"===a?e+12:void 0},meridiem:function(e,a,t){return e<11?\"pagi\":e<15?\"siang\":e<19?\"sore\":\"malam\"},calendar:{sameDay:\"[Hari ini pukul] LT\",nextDay:\"[Besok pukul] LT\",nextWeek:\"dddd [pukul] LT\",lastDay:\"[Kemarin pukul] LT\",lastWeek:\"dddd [lalu pukul] LT\",sameElse:\"L\"},relativeTime:{future:\"dalam %s\",past:\"%s yang lalu\",s:\"beberapa detik\",ss:\"%d detik\",m:\"semenit\",mm:\"%d menit\",h:\"sejam\",hh:\"%d jam\",d:\"sehari\",dd:\"%d hari\",M:\"sebulan\",MM:\"%d bulan\",y:\"setahun\",yy:\"%d tahun\"},week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(150);var n=t(1);n.datepickerLocale(\"is\",\"is\",{closeText:\"Loka\",prevText:\"&#x3C; Fyrri\",nextText:\"Næsti &#x3E;\",currentText:\"Í dag\",monthNames:[\"Janúar\",\"Febrúar\",\"Mars\",\"Apríl\",\"Maí\",\"Júní\",\"Júlí\",\"Ágúst\",\"September\",\"Október\",\"Nóvember\",\"Desember\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"Maí\",\"Jún\",\"Júl\",\"Ágú\",\"Sep\",\"Okt\",\"Nóv\",\"Des\"],dayNames:[\"Sunnudagur\",\"Mánudagur\",\"Þriðjudagur\",\"Miðvikudagur\",\"Fimmtudagur\",\"Föstudagur\",\"Laugardagur\"],dayNamesShort:[\"Sun\",\"Mán\",\"Þri\",\"Mið\",\"Fim\",\"Fös\",\"Lau\"],dayNamesMin:[\"Su\",\"Má\",\"Þr\",\"Mi\",\"Fi\",\"Fö\",\"La\"],weekHeader:\"Vika\",dateFormat:\"dd.mm.yy\",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"is\",{buttonText:{month:\"Mánuður\",week:\"Vika\",day:\"Dagur\",list:\"Dagskrá\"},allDayHtml:\"Allan<br/>daginn\",eventLimitText:\"meira\",noEventsMessage:\"Engir viðburðir til að sýna\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e){return e%100==11||e%10!=1}function t(e,t,n,r){var s=e+\" \";switch(n){case\"s\":return t||r?\"nokkrar sekúndur\":\"nokkrum sekúndum\";case\"ss\":return a(e)?s+(t||r?\"sekúndur\":\"sekúndum\"):s+\"sekúnda\";case\"m\":return t?\"mínúta\":\"mínútu\";case\"mm\":return a(e)?s+(t||r?\"mínútur\":\"mínútum\"):t?s+\"mínúta\":s+\"mínútu\";case\"hh\":return a(e)?s+(t||r?\"klukkustundir\":\"klukkustundum\"):s+\"klukkustund\";case\"d\":return t?\"dagur\":r?\"dag\":\"degi\";case\"dd\":return a(e)?t?s+\"dagar\":s+(r?\"daga\":\"dögum\"):t?s+\"dagur\":s+(r?\"dag\":\"degi\");case\"M\":return t?\"mánuður\":r?\"mánuð\":\"mánuði\";case\"MM\":return a(e)?t?s+\"mánuðir\":s+(r?\"mánuði\":\"mánuðum\"):t?s+\"mánuður\":s+(r?\"mánuð\":\"mánuði\");case\"y\":return t||r?\"ár\":\"ári\";case\"yy\":return a(e)?s+(t||r?\"ár\":\"árum\"):s+(t||r?\"ár\":\"ári\")}}return e.defineLocale(\"is\",{months:\"janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember\".split(\"_\"),monthsShort:\"jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des\".split(\"_\"),weekdays:\"sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur\".split(\"_\"),weekdaysShort:\"sun_mán_þri_mið_fim_fös_lau\".split(\"_\"),weekdaysMin:\"Su_Má_Þr_Mi_Fi_Fö_La\".split(\"_\"),longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY [kl.] H:mm\",LLLL:\"dddd, D. MMMM YYYY [kl.] H:mm\"},calendar:{sameDay:\"[í dag kl.] LT\",nextDay:\"[á morgun kl.] LT\",nextWeek:\"dddd [kl.] LT\",lastDay:\"[í gær kl.] LT\",lastWeek:\"[síðasta] dddd [kl.] LT\",sameElse:\"L\"},relativeTime:{future:\"eftir %s\",past:\"fyrir %s síðan\",s:t,ss:t,m:t,mm:t,h:\"klukkustund\",hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(152);var n=t(1);n.datepickerLocale(\"it\",\"it\",{closeText:\"Chiudi\",prevText:\"&#x3C;Prec\",nextText:\"Succ&#x3E;\",currentText:\"Oggi\",monthNames:[\"Gennaio\",\"Febbraio\",\"Marzo\",\"Aprile\",\"Maggio\",\"Giugno\",\"Luglio\",\"Agosto\",\"Settembre\",\"Ottobre\",\"Novembre\",\"Dicembre\"],monthNamesShort:[\"Gen\",\"Feb\",\"Mar\",\"Apr\",\"Mag\",\"Giu\",\"Lug\",\"Ago\",\"Set\",\"Ott\",\"Nov\",\"Dic\"],dayNames:[\"Domenica\",\"Lunedì\",\"Martedì\",\"Mercoledì\",\"Giovedì\",\"Venerdì\",\"Sabato\"],dayNamesShort:[\"Dom\",\"Lun\",\"Mar\",\"Mer\",\"Gio\",\"Ven\",\"Sab\"],dayNamesMin:[\"Do\",\"Lu\",\"Ma\",\"Me\",\"Gi\",\"Ve\",\"Sa\"],weekHeader:\"Sm\",dateFormat:\"dd/mm/yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"it\",{buttonText:{month:\"Mese\",week:\"Settimana\",day:\"Giorno\",list:\"Agenda\"},allDayHtml:\"Tutto il<br/>giorno\",eventLimitText:function(e){return\"+altri \"+e},noEventsMessage:\"Non ci sono eventi da visualizzare\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"it\",{months:\"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre\".split(\"_\"),monthsShort:\"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic\".split(\"_\"),weekdays:\"domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato\".split(\"_\"),weekdaysShort:\"dom_lun_mar_mer_gio_ven_sab\".split(\"_\"),weekdaysMin:\"do_lu_ma_me_gi_ve_sa\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Oggi alle] LT\",nextDay:\"[Domani alle] LT\",nextWeek:\"dddd [alle] LT\",lastDay:\"[Ieri alle] LT\",lastWeek:function(){switch(this.day()){case 0:return\"[la scorsa] dddd [alle] LT\";default:return\"[lo scorso] dddd [alle] LT\"}},sameElse:\"L\"},relativeTime:{future:function(e){return(/^[0-9].+$/.test(e)?\"tra\":\"in\")+\" \"+e},past:\"%s fa\",s:\"alcuni secondi\",ss:\"%d secondi\",m:\"un minuto\",mm:\"%d minuti\",h:\"un'ora\",hh:\"%d ore\",d:\"un giorno\",dd:\"%d giorni\",M:\"un mese\",MM:\"%d mesi\",y:\"un anno\",yy:\"%d anni\"},dayOfMonthOrdinalParse:/\\d{1,2}º/,ordinal:\"%dº\",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(154);var n=t(1);n.datepickerLocale(\"ja\",\"ja\",{closeText:\"閉じる\",prevText:\"&#x3C;前\",nextText:\"次&#x3E;\",currentText:\"今日\",monthNames:[\"1月\",\"2月\",\"3月\",\"4月\",\"5月\",\"6月\",\"7月\",\"8月\",\"9月\",\"10月\",\"11月\",\"12月\"],monthNamesShort:[\"1月\",\"2月\",\"3月\",\"4月\",\"5月\",\"6月\",\"7月\",\"8月\",\"9月\",\"10月\",\"11月\",\"12月\"],dayNames:[\"日曜日\",\"月曜日\",\"火曜日\",\"水曜日\",\"木曜日\",\"金曜日\",\"土曜日\"],dayNamesShort:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],dayNamesMin:[\"日\",\"月\",\"火\",\"水\",\"木\",\"金\",\"土\"],weekHeader:\"週\",dateFormat:\"yy/mm/dd\",firstDay:0,isRTL:!1,showMonthAfterYear:!0,yearSuffix:\"年\"}),n.locale(\"ja\",{buttonText:{month:\"月\",week:\"週\",day:\"日\",list:\"予定リスト\"},allDayText:\"終日\",eventLimitText:function(e){return\"他 \"+e+\" 件\"},noEventsMessage:\"表示する予定はありません\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"ja\",{months:\"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月\".split(\"_\"),monthsShort:\"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月\".split(\"_\"),weekdays:\"日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日\".split(\"_\"),weekdaysShort:\"日_月_火_水_木_金_土\".split(\"_\"),weekdaysMin:\"日_月_火_水_木_金_土\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY/MM/DD\",LL:\"YYYY年M月D日\",LLL:\"YYYY年M月D日 HH:mm\",LLLL:\"YYYY年M月D日 dddd HH:mm\",l:\"YYYY/MM/DD\",ll:\"YYYY年M月D日\",lll:\"YYYY年M月D日 HH:mm\",llll:\"YYYY年M月D日(ddd) HH:mm\"},meridiemParse:/午前|午後/i,isPM:function(e){return\"午後\"===e},meridiem:function(e,a,t){return e<12?\"午前\":\"午後\"},calendar:{sameDay:\"[今日] LT\",nextDay:\"[明日] LT\",\nnextWeek:function(e){return e.week()<this.week()?\"[来週]dddd LT\":\"dddd LT\"},lastDay:\"[昨日] LT\",lastWeek:function(e){return this.week()<e.week()?\"[先週]dddd LT\":\"dddd LT\"},sameElse:\"L\"},dayOfMonthOrdinalParse:/\\d{1,2}日/,ordinal:function(e,a){switch(a){case\"d\":case\"D\":case\"DDD\":return e+\"日\";default:return e}},relativeTime:{future:\"%s後\",past:\"%s前\",s:\"数秒\",ss:\"%d秒\",m:\"1分\",mm:\"%d分\",h:\"1時間\",hh:\"%d時間\",d:\"1日\",dd:\"%d日\",M:\"1ヶ月\",MM:\"%dヶ月\",y:\"1年\",yy:\"%d年\"}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(156);var n=t(1);n.datepickerLocale(\"ka\",\"ka\",{closeText:\"დახურვა\",prevText:\"წინა\",nextText:\"შემდეგი\",currentText:\"დღეს\",monthNames:[\"იანვარი\",\"თებერვალი\",\"მარტი\",\"აპრილი\",\"მაისი\",\"ივნისი\",\"ივლისი\",\"აგვისტო\",\"სექტემბერი\",\"ოქტომბერი\",\"ნოემბერი\",\"დეკემბერი\"],monthNamesShort:[\"იან\",\"თებ\",\"მარ\",\"აპრ\",\"მაი\",\"ივნ\",\"ივლ\",\"აგვ\",\"სექ\",\"ოქტ\",\"ნოე\",\"დეკ\"],dayNames:[\"კვირა\",\"ორშაბათი\",\"სამშაბათი\",\"ოთხშაბათი\",\"ხუთშაბათი\",\"პარასკევი\",\"შაბათი\"],dayNamesShort:[\"კვი\",\"ორშ\",\"სამ\",\"ოთხ\",\"ხუთ\",\"პარ\",\"შაბ\"],dayNamesMin:[\"კვ\",\"ორ\",\"სა\",\"ოთ\",\"ხუ\",\"პა\",\"შა\"],weekHeader:\"კვ\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"ka\",{buttonText:{month:\"თვე\",week:\"კვირა\",day:\"დღე\",list:\"დღის წესრიგი\"},allDayText:\"მთელი დღე\",eventLimitText:function(e){return\"+ კიდევ \"+e},noEventsMessage:\"ღონისძიებები არ არის\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"ka\",{months:{standalone:\"იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი\".split(\"_\"),format:\"იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს\".split(\"_\")},monthsShort:\"იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ\".split(\"_\"),weekdays:{standalone:\"კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი\".split(\"_\"),format:\"კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს\".split(\"_\"),isFormat:/(წინა|შემდეგ)/},weekdaysShort:\"კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ\".split(\"_\"),weekdaysMin:\"კვ_ორ_სა_ოთ_ხუ_პა_შა\".split(\"_\"),longDateFormat:{LT:\"h:mm A\",LTS:\"h:mm:ss A\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY h:mm A\",LLLL:\"dddd, D MMMM YYYY h:mm A\"},calendar:{sameDay:\"[დღეს] LT[-ზე]\",nextDay:\"[ხვალ] LT[-ზე]\",lastDay:\"[გუშინ] LT[-ზე]\",nextWeek:\"[შემდეგ] dddd LT[-ზე]\",lastWeek:\"[წინა] dddd LT-ზე\",sameElse:\"L\"},relativeTime:{future:function(e){return/(წამი|წუთი|საათი|წელი)/.test(e)?e.replace(/ი$/,\"ში\"):e+\"ში\"},past:function(e){return/(წამი|წუთი|საათი|დღე|თვე)/.test(e)?e.replace(/(ი|ე)$/,\"ის წინ\"):/წელი/.test(e)?e.replace(/წელი$/,\"წლის წინ\"):void 0},s:\"რამდენიმე წამი\",ss:\"%d წამი\",m:\"წუთი\",mm:\"%d წუთი\",h:\"საათი\",hh:\"%d საათი\",d:\"დღე\",dd:\"%d დღე\",M:\"თვე\",MM:\"%d თვე\",y:\"წელი\",yy:\"%d წელი\"},dayOfMonthOrdinalParse:/0|1-ლი|მე-\\d{1,2}|\\d{1,2}-ე/,ordinal:function(e){return 0===e?e:1===e?e+\"-ლი\":e<20||e<=100&&e%20==0||e%100==0?\"მე-\"+e:e+\"-ე\"},week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(158);var n=t(1);n.datepickerLocale(\"kk\",\"kk\",{closeText:\"Жабу\",prevText:\"&#x3C;Алдыңғы\",nextText:\"Келесі&#x3E;\",currentText:\"Бүгін\",monthNames:[\"Қаңтар\",\"Ақпан\",\"Наурыз\",\"Сәуір\",\"Мамыр\",\"Маусым\",\"Шілде\",\"Тамыз\",\"Қыркүйек\",\"Қазан\",\"Қараша\",\"Желтоқсан\"],monthNamesShort:[\"Қаң\",\"Ақп\",\"Нау\",\"Сәу\",\"Мам\",\"Мау\",\"Шіл\",\"Там\",\"Қыр\",\"Қаз\",\"Қар\",\"Жел\"],dayNames:[\"Жексенбі\",\"Дүйсенбі\",\"Сейсенбі\",\"Сәрсенбі\",\"Бейсенбі\",\"Жұма\",\"Сенбі\"],dayNamesShort:[\"жкс\",\"дсн\",\"ссн\",\"срс\",\"бсн\",\"жма\",\"снб\"],dayNamesMin:[\"Жк\",\"Дс\",\"Сс\",\"Ср\",\"Бс\",\"Жм\",\"Сн\"],weekHeader:\"Не\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"kk\",{buttonText:{month:\"Ай\",week:\"Апта\",day:\"Күн\",list:\"Күн тәртібі\"},allDayText:\"Күні бойы\",eventLimitText:function(e){return\"+ тағы \"+e},noEventsMessage:\"Көрсету үшін оқиғалар жоқ\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){var a={0:\"-ші\",1:\"-ші\",2:\"-ші\",3:\"-ші\",4:\"-ші\",5:\"-ші\",6:\"-шы\",7:\"-ші\",8:\"-ші\",9:\"-шы\",10:\"-шы\",20:\"-шы\",30:\"-шы\",40:\"-шы\",50:\"-ші\",60:\"-шы\",70:\"-ші\",80:\"-ші\",90:\"-шы\",100:\"-ші\"};return e.defineLocale(\"kk\",{months:\"қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан\".split(\"_\"),monthsShort:\"қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел\".split(\"_\"),weekdays:\"жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі\".split(\"_\"),weekdaysShort:\"жек_дүй_сей_сәр_бей_жұм_сен\".split(\"_\"),weekdaysMin:\"жк_дй_сй_ср_бй_жм_сн\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Бүгін сағат] LT\",nextDay:\"[Ертең сағат] LT\",nextWeek:\"dddd [сағат] LT\",lastDay:\"[Кеше сағат] LT\",lastWeek:\"[Өткен аптаның] dddd [сағат] LT\",sameElse:\"L\"},relativeTime:{future:\"%s ішінде\",past:\"%s бұрын\",s:\"бірнеше секунд\",ss:\"%d секунд\",m:\"бір минут\",mm:\"%d минут\",h:\"бір сағат\",hh:\"%d сағат\",d:\"бір күн\",dd:\"%d күн\",M:\"бір ай\",MM:\"%d ай\",y:\"бір жыл\",yy:\"%d жыл\"},dayOfMonthOrdinalParse:/\\d{1,2}-(ші|шы)/,ordinal:function(e){var t=e%10,n=e>=100?100:null;return e+(a[e]||a[t]||a[n])},week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(160);var n=t(1);n.datepickerLocale(\"ko\",\"ko\",{closeText:\"닫기\",prevText:\"이전달\",nextText:\"다음달\",currentText:\"오늘\",monthNames:[\"1월\",\"2월\",\"3월\",\"4월\",\"5월\",\"6월\",\"7월\",\"8월\",\"9월\",\"10월\",\"11월\",\"12월\"],monthNamesShort:[\"1월\",\"2월\",\"3월\",\"4월\",\"5월\",\"6월\",\"7월\",\"8월\",\"9월\",\"10월\",\"11월\",\"12월\"],dayNames:[\"일요일\",\"월요일\",\"화요일\",\"수요일\",\"목요일\",\"금요일\",\"토요일\"],dayNamesShort:[\"일\",\"월\",\"화\",\"수\",\"목\",\"금\",\"토\"],dayNamesMin:[\"일\",\"월\",\"화\",\"수\",\"목\",\"금\",\"토\"],weekHeader:\"주\",dateFormat:\"yy. m. d.\",firstDay:0,isRTL:!1,showMonthAfterYear:!0,yearSuffix:\"년\"}),n.locale(\"ko\",{buttonText:{month:\"월\",week:\"주\",day:\"일\",list:\"일정목록\"},allDayText:\"종일\",eventLimitText:\"개\",noEventsMessage:\"일정이 없습니다\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"ko\",{months:\"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월\".split(\"_\"),monthsShort:\"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월\".split(\"_\"),weekdays:\"일요일_월요일_화요일_수요일_목요일_금요일_토요일\".split(\"_\"),weekdaysShort:\"일_월_화_수_목_금_토\".split(\"_\"),weekdaysMin:\"일_월_화_수_목_금_토\".split(\"_\"),longDateFormat:{LT:\"A h:mm\",LTS:\"A h:mm:ss\",L:\"YYYY.MM.DD.\",LL:\"YYYY년 MMMM D일\",LLL:\"YYYY년 MMMM D일 A h:mm\",LLLL:\"YYYY년 MMMM D일 dddd A h:mm\",l:\"YYYY.MM.DD.\",ll:\"YYYY년 MMMM D일\",lll:\"YYYY년 MMMM D일 A h:mm\",llll:\"YYYY년 MMMM D일 dddd A h:mm\"},calendar:{sameDay:\"오늘 LT\",nextDay:\"내일 LT\",nextWeek:\"dddd LT\",lastDay:\"어제 LT\",lastWeek:\"지난주 dddd LT\",sameElse:\"L\"},relativeTime:{future:\"%s 후\",past:\"%s 전\",s:\"몇 초\",ss:\"%d초\",m:\"1분\",mm:\"%d분\",h:\"한 시간\",hh:\"%d시간\",d:\"하루\",dd:\"%d일\",M:\"한 달\",MM:\"%d달\",y:\"일 년\",yy:\"%d년\"},dayOfMonthOrdinalParse:/\\d{1,2}(일|월|주)/,ordinal:function(e,a){switch(a){case\"d\":case\"D\":case\"DDD\":return e+\"일\";case\"M\":return e+\"월\";case\"w\":case\"W\":return e+\"주\";default:return e}},meridiemParse:/오전|오후/,isPM:function(e){return\"오후\"===e},meridiem:function(e,a,t){return e<12?\"오전\":\"오후\"}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(162);var n=t(1);n.datepickerLocale(\"lb\",\"lb\",{closeText:\"Fäerdeg\",prevText:\"Zréck\",nextText:\"Weider\",currentText:\"Haut\",monthNames:[\"Januar\",\"Februar\",\"Mäerz\",\"Abrëll\",\"Mee\",\"Juni\",\"Juli\",\"August\",\"September\",\"Oktober\",\"November\",\"Dezember\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mäe\",\"Abr\",\"Mee\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Okt\",\"Nov\",\"Dez\"],dayNames:[\"Sonndeg\",\"Méindeg\",\"Dënschdeg\",\"Mëttwoch\",\"Donneschdeg\",\"Freideg\",\"Samschdeg\"],dayNamesShort:[\"Son\",\"Méi\",\"Dën\",\"Mët\",\"Don\",\"Fre\",\"Sam\"],dayNamesMin:[\"So\",\"Mé\",\"Dë\",\"Më\",\"Do\",\"Fr\",\"Sa\"],weekHeader:\"W\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"lb\",{buttonText:{month:\"Mount\",week:\"Woch\",day:\"Dag\",list:\"Terminiwwersiicht\"},allDayText:\"Ganzen Dag\",eventLimitText:\"méi\",noEventsMessage:\"Nee Evenementer ze affichéieren\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a,t,n){var r={m:[\"eng Minutt\",\"enger Minutt\"],h:[\"eng Stonn\",\"enger Stonn\"],d:[\"een Dag\",\"engem Dag\"],M:[\"ee Mount\",\"engem Mount\"],y:[\"ee Joer\",\"engem Joer\"]};return a?r[t][0]:r[t][1]}function t(e){return r(e.substr(0,e.indexOf(\" \")))?\"a \"+e:\"an \"+e}function n(e){return r(e.substr(0,e.indexOf(\" \")))?\"viru \"+e:\"virun \"+e}function r(e){if(e=parseInt(e,10),isNaN(e))return!1;if(e<0)return!0;if(e<10)return 4<=e&&e<=7;if(e<100){var a=e%10,t=e/10;return r(0===a?t:a)}if(e<1e4){for(;e>=10;)e/=10;return r(e)}return e/=1e3,r(e)}return e.defineLocale(\"lb\",{months:\"Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember\".split(\"_\"),monthsShort:\"Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.\".split(\"_\"),monthsParseExact:!0,weekdays:\"Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg\".split(\"_\"),weekdaysShort:\"So._Mé._Dë._Më._Do._Fr._Sa.\".split(\"_\"),weekdaysMin:\"So_Mé_Dë_Më_Do_Fr_Sa\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm [Auer]\",LTS:\"H:mm:ss [Auer]\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY H:mm [Auer]\",LLLL:\"dddd, D. MMMM YYYY H:mm [Auer]\"},calendar:{sameDay:\"[Haut um] LT\",sameElse:\"L\",nextDay:\"[Muer um] LT\",nextWeek:\"dddd [um] LT\",lastDay:\"[Gëschter um] LT\",lastWeek:function(){switch(this.day()){case 2:case 4:return\"[Leschten] dddd [um] LT\";default:return\"[Leschte] dddd [um] LT\"}}},relativeTime:{future:t,past:n,s:\"e puer Sekonnen\",ss:\"%d Sekonnen\",m:a,mm:\"%d Minutten\",h:a,hh:\"%d Stonnen\",d:a,dd:\"%d Deeg\",M:a,MM:\"%d Méint\",y:a,yy:\"%d Joer\"},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(164);var n=t(1);n.datepickerLocale(\"lt\",\"lt\",{closeText:\"Uždaryti\",prevText:\"&#x3C;Atgal\",nextText:\"Pirmyn&#x3E;\",currentText:\"Šiandien\",monthNames:[\"Sausis\",\"Vasaris\",\"Kovas\",\"Balandis\",\"Gegužė\",\"Birželis\",\"Liepa\",\"Rugpjūtis\",\"Rugsėjis\",\"Spalis\",\"Lapkritis\",\"Gruodis\"],monthNamesShort:[\"Sau\",\"Vas\",\"Kov\",\"Bal\",\"Geg\",\"Bir\",\"Lie\",\"Rugp\",\"Rugs\",\"Spa\",\"Lap\",\"Gru\"],dayNames:[\"sekmadienis\",\"pirmadienis\",\"antradienis\",\"trečiadienis\",\"ketvirtadienis\",\"penktadienis\",\"šeštadienis\"],dayNamesShort:[\"sek\",\"pir\",\"ant\",\"tre\",\"ket\",\"pen\",\"šeš\"],dayNamesMin:[\"Se\",\"Pr\",\"An\",\"Tr\",\"Ke\",\"Pe\",\"Še\"],weekHeader:\"SAV\",dateFormat:\"yy-mm-dd\",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:\"\"}),n.locale(\"lt\",{buttonText:{month:\"Mėnuo\",week:\"Savaitė\",day:\"Diena\",list:\"Darbotvarkė\"},allDayText:\"Visą dieną\",eventLimitText:\"daugiau\",noEventsMessage:\"Nėra įvykių rodyti\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a,t,n){return a?\"kelios sekundės\":n?\"kelių sekundžių\":\"kelias sekundes\"}function t(e,a,t,n){return a?r(t)[0]:n?r(t)[1]:r(t)[2]}function n(e){return e%10==0||e>10&&e<20}function r(e){return d[e].split(\"_\")}function s(e,a,s,d){var i=e+\" \";return 1===e?i+t(e,a,s[0],d):a?i+(n(e)?r(s)[1]:r(s)[0]):d?i+r(s)[1]:i+(n(e)?r(s)[1]:r(s)[2])}var d={ss:\"sekundė_sekundžių_sekundes\",m:\"minutė_minutės_minutę\",mm:\"minutės_minučių_minutes\",h:\"valanda_valandos_valandą\",hh:\"valandos_valandų_valandas\",d:\"diena_dienos_dieną\",dd:\"dienos_dienų_dienas\",M:\"mėnuo_mėnesio_mėnesį\",MM:\"mėnesiai_mėnesių_mėnesius\",y:\"metai_metų_metus\",yy:\"metai_metų_metus\"};return e.defineLocale(\"lt\",{months:{format:\"sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio\".split(\"_\"),standalone:\"sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis\".split(\"_\"),isFormat:/D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?|MMMM?(\\[[^\\[\\]]*\\]|\\s)+D[oD]?/},monthsShort:\"sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd\".split(\"_\"),weekdays:{format:\"sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį\".split(\"_\"),standalone:\"sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis\".split(\"_\"),isFormat:/dddd HH:mm/},weekdaysShort:\"Sek_Pir_Ant_Tre_Ket_Pen_Šeš\".split(\"_\"),weekdaysMin:\"S_P_A_T_K_Pn_Š\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY-MM-DD\",LL:\"YYYY [m.] MMMM D [d.]\",LLL:\"YYYY [m.] MMMM D [d.], HH:mm [val.]\",LLLL:\"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]\",l:\"YYYY-MM-DD\",ll:\"YYYY [m.] MMMM D [d.]\",lll:\"YYYY [m.] MMMM D [d.], HH:mm [val.]\",llll:\"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]\"},calendar:{sameDay:\"[Šiandien] LT\",nextDay:\"[Rytoj] LT\",nextWeek:\"dddd LT\",lastDay:\"[Vakar] LT\",lastWeek:\"[Praėjusį] dddd LT\",sameElse:\"L\"},relativeTime:{future:\"po %s\",past:\"prieš %s\",s:a,ss:s,m:t,mm:s,h:t,hh:s,d:t,dd:s,M:t,MM:s,y:t,yy:s},dayOfMonthOrdinalParse:/\\d{1,2}-oji/,ordinal:function(e){return e+\"-oji\"},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(166);var n=t(1);n.datepickerLocale(\"lv\",\"lv\",{closeText:\"Aizvērt\",prevText:\"Iepr.\",nextText:\"Nāk.\",currentText:\"Šodien\",monthNames:[\"Janvāris\",\"Februāris\",\"Marts\",\"Aprīlis\",\"Maijs\",\"Jūnijs\",\"Jūlijs\",\"Augusts\",\"Septembris\",\"Oktobris\",\"Novembris\",\"Decembris\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"Mai\",\"Jūn\",\"Jūl\",\"Aug\",\"Sep\",\"Okt\",\"Nov\",\"Dec\"],dayNames:[\"svētdiena\",\"pirmdiena\",\"otrdiena\",\"trešdiena\",\"ceturtdiena\",\"piektdiena\",\"sestdiena\"],dayNamesShort:[\"svt\",\"prm\",\"otr\",\"tre\",\"ctr\",\"pkt\",\"sst\"],dayNamesMin:[\"Sv\",\"Pr\",\"Ot\",\"Tr\",\"Ct\",\"Pk\",\"Ss\"],weekHeader:\"Ned.\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"lv\",{buttonText:{month:\"Mēnesis\",week:\"Nedēļa\",day:\"Diena\",list:\"Dienas kārtība\"},allDayText:\"Visu dienu\",eventLimitText:function(e){return\"+vēl \"+e},noEventsMessage:\"Nav notikumu\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a,t){return t?a%10==1&&a%100!=11?e[2]:e[3]:a%10==1&&a%100!=11?e[0]:e[1]}function t(e,t,n){return e+\" \"+a(s[n],e,t)}function n(e,t,n){return a(s[n],e,t)}function r(e,a){return a?\"dažas sekundes\":\"dažām sekundēm\"}var s={ss:\"sekundes_sekundēm_sekunde_sekundes\".split(\"_\"),m:\"minūtes_minūtēm_minūte_minūtes\".split(\"_\"),mm:\"minūtes_minūtēm_minūte_minūtes\".split(\"_\"),h:\"stundas_stundām_stunda_stundas\".split(\"_\"),hh:\"stundas_stundām_stunda_stundas\".split(\"_\"),d:\"dienas_dienām_diena_dienas\".split(\"_\"),dd:\"dienas_dienām_diena_dienas\".split(\"_\"),M:\"mēneša_mēnešiem_mēnesis_mēneši\".split(\"_\"),MM:\"mēneša_mēnešiem_mēnesis_mēneši\".split(\"_\"),y:\"gada_gadiem_gads_gadi\".split(\"_\"),yy:\"gada_gadiem_gads_gadi\".split(\"_\")};return e.defineLocale(\"lv\",{months:\"janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris\".split(\"_\"),monthsShort:\"jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec\".split(\"_\"),weekdays:\"svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena\".split(\"_\"),weekdaysShort:\"Sv_P_O_T_C_Pk_S\".split(\"_\"),weekdaysMin:\"Sv_P_O_T_C_Pk_S\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY.\",LL:\"YYYY. [gada] D. MMMM\",LLL:\"YYYY. [gada] D. MMMM, HH:mm\",LLLL:\"YYYY. [gada] D. MMMM, dddd, HH:mm\"},calendar:{sameDay:\"[Šodien pulksten] LT\",nextDay:\"[Rīt pulksten] LT\",nextWeek:\"dddd [pulksten] LT\",lastDay:\"[Vakar pulksten] LT\",lastWeek:\"[Pagājušā] dddd [pulksten] LT\",sameElse:\"L\"},relativeTime:{future:\"pēc %s\",past:\"pirms %s\",s:r,ss:t,m:n,mm:t,h:n,hh:t,d:n,dd:t,M:n,MM:t,y:n,yy:t},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(168);var n=t(1);n.datepickerLocale(\"mk\",\"mk\",{closeText:\"Затвори\",prevText:\"&#x3C;\",nextText:\"&#x3E;\",currentText:\"Денес\",monthNames:[\"Јануари\",\"Февруари\",\"Март\",\"Април\",\"Мај\",\"Јуни\",\"Јули\",\"Август\",\"Септември\",\"Октомври\",\"Ноември\",\"Декември\"],monthNamesShort:[\"Јан\",\"Фев\",\"Мар\",\"Апр\",\"Мај\",\"Јун\",\"Јул\",\"Авг\",\"Сеп\",\"Окт\",\"Ное\",\"Дек\"],dayNames:[\"Недела\",\"Понеделник\",\"Вторник\",\"Среда\",\"Четврток\",\"Петок\",\"Сабота\"],dayNamesShort:[\"Нед\",\"Пон\",\"Вто\",\"Сре\",\"Чет\",\"Пет\",\"Саб\"],dayNamesMin:[\"Не\",\"По\",\"Вт\",\"Ср\",\"Че\",\"Пе\",\"Са\"],weekHeader:\"Сед\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"mk\",{buttonText:{month:\"Месец\",week:\"Недела\",day:\"Ден\",list:\"График\"},allDayText:\"Цел ден\",eventLimitText:function(e){return\"+повеќе \"+e},noEventsMessage:\"Нема настани за прикажување\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"mk\",{months:\"јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември\".split(\"_\"),monthsShort:\"јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек\".split(\"_\"),weekdays:\"недела_понеделник_вторник_среда_четврток_петок_сабота\".split(\"_\"),weekdaysShort:\"нед_пон_вто_сре_чет_пет_саб\".split(\"_\"),weekdaysMin:\"нe_пo_вт_ср_че_пе_сa\".split(\"_\"),longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"D.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY H:mm\",LLLL:\"dddd, D MMMM YYYY H:mm\"},calendar:{sameDay:\"[Денес во] LT\",nextDay:\"[Утре во] LT\",nextWeek:\"[Во] dddd [во] LT\",lastDay:\"[Вчера во] LT\",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return\"[Изминатата] dddd [во] LT\";case 1:case 2:case 4:case 5:return\"[Изминатиот] dddd [во] LT\"}},sameElse:\"L\"},relativeTime:{future:\"после %s\",past:\"пред %s\",s:\"неколку секунди\",ss:\"%d секунди\",m:\"минута\",mm:\"%d минути\",h:\"час\",hh:\"%d часа\",d:\"ден\",dd:\"%d дена\",M:\"месец\",MM:\"%d месеци\",y:\"година\",yy:\"%d години\"},dayOfMonthOrdinalParse:/\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,ordinal:function(e){var a=e%10,t=e%100;return 0===e?e+\"-ев\":0===t?e+\"-ен\":t>10&&t<20?e+\"-ти\":1===a?e+\"-ви\":2===a?e+\"-ри\":7===a||8===a?e+\"-ми\":e+\"-ти\"},week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(170);var n=t(1);n.datepickerLocale(\"ms-my\",\"ms\",{closeText:\"Tutup\",prevText:\"&#x3C;Sebelum\",nextText:\"Selepas&#x3E;\",currentText:\"hari ini\",monthNames:[\"Januari\",\"Februari\",\"Mac\",\"April\",\"Mei\",\"Jun\",\"Julai\",\"Ogos\",\"September\",\"Oktober\",\"November\",\"Disember\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mac\",\"Apr\",\"Mei\",\"Jun\",\"Jul\",\"Ogo\",\"Sep\",\"Okt\",\"Nov\",\"Dis\"],dayNames:[\"Ahad\",\"Isnin\",\"Selasa\",\"Rabu\",\"Khamis\",\"Jumaat\",\"Sabtu\"],dayNamesShort:[\"Aha\",\"Isn\",\"Sel\",\"Rab\",\"kha\",\"Jum\",\"Sab\"],dayNamesMin:[\"Ah\",\"Is\",\"Se\",\"Ra\",\"Kh\",\"Ju\",\"Sa\"],weekHeader:\"Mg\",dateFormat:\"dd/mm/yy\",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"ms-my\",{buttonText:{month:\"Bulan\",week:\"Minggu\",day:\"Hari\",list:\"Agenda\"},allDayText:\"Sepanjang hari\",eventLimitText:function(e){return\"masih ada \"+e+\" acara\"},noEventsMessage:\"Tiada peristiwa untuk dipaparkan\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"ms-my\",{months:\"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember\".split(\"_\"),monthsShort:\"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis\".split(\"_\"),weekdays:\"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu\".split(\"_\"),weekdaysShort:\"Ahd_Isn_Sel_Rab_Kha_Jum_Sab\".split(\"_\"),weekdaysMin:\"Ah_Is_Sl_Rb_Km_Jm_Sb\".split(\"_\"),longDateFormat:{LT:\"HH.mm\",LTS:\"HH.mm.ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY [pukul] HH.mm\",LLLL:\"dddd, D MMMM YYYY [pukul] HH.mm\"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(e,a){return 12===e&&(e=0),\"pagi\"===a?e:\"tengahari\"===a?e>=11?e:e+12:\"petang\"===a||\"malam\"===a?e+12:void 0},meridiem:function(e,a,t){return e<11?\"pagi\":e<15?\"tengahari\":e<19?\"petang\":\"malam\"},calendar:{sameDay:\"[Hari ini pukul] LT\",nextDay:\"[Esok pukul] LT\",nextWeek:\"dddd [pukul] LT\",lastDay:\"[Kelmarin pukul] LT\",lastWeek:\"dddd [lepas pukul] LT\",sameElse:\"L\"},relativeTime:{future:\"dalam %s\",past:\"%s yang lepas\",s:\"beberapa saat\",ss:\"%d saat\",m:\"seminit\",mm:\"%d minit\",h:\"sejam\",hh:\"%d jam\",d:\"sehari\",dd:\"%d hari\",M:\"sebulan\",MM:\"%d bulan\",y:\"setahun\",yy:\"%d tahun\"},week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(172);var n=t(1);n.datepickerLocale(\"ms\",\"ms\",{closeText:\"Tutup\",prevText:\"&#x3C;Sebelum\",nextText:\"Selepas&#x3E;\",currentText:\"hari ini\",monthNames:[\"Januari\",\"Februari\",\"Mac\",\"April\",\"Mei\",\"Jun\",\"Julai\",\"Ogos\",\"September\",\"Oktober\",\"November\",\"Disember\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mac\",\"Apr\",\"Mei\",\"Jun\",\"Jul\",\"Ogo\",\"Sep\",\"Okt\",\"Nov\",\"Dis\"],dayNames:[\"Ahad\",\"Isnin\",\"Selasa\",\"Rabu\",\"Khamis\",\"Jumaat\",\"Sabtu\"],dayNamesShort:[\"Aha\",\"Isn\",\"Sel\",\"Rab\",\"kha\",\"Jum\",\"Sab\"],dayNamesMin:[\"Ah\",\"Is\",\"Se\",\"Ra\",\"Kh\",\"Ju\",\"Sa\"],weekHeader:\"Mg\",dateFormat:\"dd/mm/yy\",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"ms\",{buttonText:{month:\"Bulan\",week:\"Minggu\",day:\"Hari\",list:\"Agenda\"},allDayText:\"Sepanjang hari\",eventLimitText:function(e){return\"masih ada \"+e+\" acara\"},noEventsMessage:\"Tiada peristiwa untuk dipaparkan\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"ms\",{months:\"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember\".split(\"_\"),monthsShort:\"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis\".split(\"_\"),weekdays:\"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu\".split(\"_\"),weekdaysShort:\"Ahd_Isn_Sel_Rab_Kha_Jum_Sab\".split(\"_\"),weekdaysMin:\"Ah_Is_Sl_Rb_Km_Jm_Sb\".split(\"_\"),longDateFormat:{LT:\"HH.mm\",LTS:\"HH.mm.ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY [pukul] HH.mm\",LLLL:\"dddd, D MMMM YYYY [pukul] HH.mm\"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(e,a){return 12===e&&(e=0),\"pagi\"===a?e:\"tengahari\"===a?e>=11?e:e+12:\"petang\"===a||\"malam\"===a?e+12:void 0},meridiem:function(e,a,t){return e<11?\"pagi\":e<15?\"tengahari\":e<19?\"petang\":\"malam\"},calendar:{sameDay:\"[Hari ini pukul] LT\",nextDay:\"[Esok pukul] LT\",nextWeek:\"dddd [pukul] LT\",lastDay:\"[Kelmarin pukul] LT\",lastWeek:\"dddd [lepas pukul] LT\",sameElse:\"L\"},relativeTime:{future:\"dalam %s\",past:\"%s yang lepas\",s:\"beberapa saat\",ss:\"%d saat\",m:\"seminit\",mm:\"%d minit\",h:\"sejam\",hh:\"%d jam\",d:\"sehari\",dd:\"%d hari\",M:\"sebulan\",MM:\"%d bulan\",y:\"setahun\",yy:\"%d tahun\"},week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(174);var n=t(1);n.datepickerLocale(\"nb\",\"nb\",{closeText:\"Lukk\",prevText:\"&#xAB;Forrige\",nextText:\"Neste&#xBB;\",currentText:\"I dag\",monthNames:[\"januar\",\"februar\",\"mars\",\"april\",\"mai\",\"juni\",\"juli\",\"august\",\"september\",\"oktober\",\"november\",\"desember\"],monthNamesShort:[\"jan\",\"feb\",\"mar\",\"apr\",\"mai\",\"jun\",\"jul\",\"aug\",\"sep\",\"okt\",\"nov\",\"des\"],dayNamesShort:[\"søn\",\"man\",\"tir\",\"ons\",\"tor\",\"fre\",\"lør\"],dayNames:[\"søndag\",\"mandag\",\"tirsdag\",\"onsdag\",\"torsdag\",\"fredag\",\"lørdag\"],dayNamesMin:[\"sø\",\"ma\",\"ti\",\"on\",\"to\",\"fr\",\"lø\"],weekHeader:\"Uke\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"nb\",{buttonText:{month:\"Måned\",week:\"Uke\",day:\"Dag\",list:\"Agenda\"},allDayText:\"Hele dagen\",eventLimitText:\"til\",noEventsMessage:\"Ingen hendelser å vise\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"nb\",{months:\"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember\".split(\"_\"),monthsShort:\"jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.\".split(\"_\"),monthsParseExact:!0,weekdays:\"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag\".split(\"_\"),weekdaysShort:\"sø._ma._ti._on._to._fr._lø.\".split(\"_\"),weekdaysMin:\"sø_ma_ti_on_to_fr_lø\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY [kl.] HH:mm\",LLLL:\"dddd D. MMMM YYYY [kl.] HH:mm\"},calendar:{sameDay:\"[i dag kl.] LT\",nextDay:\"[i morgen kl.] LT\",nextWeek:\"dddd [kl.] LT\",lastDay:\"[i går kl.] LT\",lastWeek:\"[forrige] dddd [kl.] LT\",sameElse:\"L\"},relativeTime:{future:\"om %s\",past:\"%s siden\",s:\"noen sekunder\",ss:\"%d sekunder\",m:\"ett minutt\",mm:\"%d minutter\",h:\"en time\",hh:\"%d timer\",d:\"en dag\",dd:\"%d dager\",M:\"en måned\",MM:\"%d måneder\",y:\"ett år\",yy:\"%d år\"},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(176);var n=t(1);n.datepickerLocale(\"nl-be\",\"nl-BE\",{closeText:\"Sluiten\",prevText:\"←\",nextText:\"→\",currentText:\"Vandaag\",monthNames:[\"januari\",\"februari\",\"maart\",\"april\",\"mei\",\"juni\",\"juli\",\"augustus\",\"september\",\"oktober\",\"november\",\"december\"],monthNamesShort:[\"jan\",\"feb\",\"mrt\",\"apr\",\"mei\",\"jun\",\"jul\",\"aug\",\"sep\",\"okt\",\"nov\",\"dec\"],dayNames:[\"zondag\",\"maandag\",\"dinsdag\",\"woensdag\",\"donderdag\",\"vrijdag\",\"zaterdag\"],dayNamesShort:[\"zon\",\"maa\",\"din\",\"woe\",\"don\",\"vri\",\"zat\"],dayNamesMin:[\"zo\",\"ma\",\"di\",\"wo\",\"do\",\"vr\",\"za\"],weekHeader:\"Wk\",dateFormat:\"dd/mm/yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"nl-be\",{buttonText:{month:\"Maand\",week:\"Week\",day:\"Dag\",list:\"Agenda\"},allDayText:\"Hele dag\",eventLimitText:\"extra\",noEventsMessage:\"Geen evenementen om te laten zien\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){var a=\"jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.\".split(\"_\"),t=\"jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec\".split(\"_\"),n=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],r=/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;return e.defineLocale(\"nl-be\",{months:\"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december\".split(\"_\"),monthsShort:function(e,n){return e?/-MMM-/.test(n)?t[e.month()]:a[e.month()]:a},monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,monthsParse:n,longMonthsParse:n,shortMonthsParse:n,weekdays:\"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag\".split(\"_\"),weekdaysShort:\"zo._ma._di._wo._do._vr._za.\".split(\"_\"),weekdaysMin:\"zo_ma_di_wo_do_vr_za\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[vandaag om] LT\",nextDay:\"[morgen om] LT\",nextWeek:\"dddd [om] LT\",lastDay:\"[gisteren om] LT\",lastWeek:\"[afgelopen] dddd [om] LT\",sameElse:\"L\"},relativeTime:{future:\"over %s\",past:\"%s geleden\",s:\"een paar seconden\",ss:\"%d seconden\",m:\"één minuut\",mm:\"%d minuten\",h:\"één uur\",hh:\"%d uur\",d:\"één dag\",dd:\"%d dagen\",M:\"één maand\",MM:\"%d maanden\",y:\"één jaar\",yy:\"%d jaar\"},dayOfMonthOrdinalParse:/\\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||e>=20?\"ste\":\"de\")},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(178);var n=t(1);n.datepickerLocale(\"nl\",\"nl\",{closeText:\"Sluiten\",prevText:\"←\",nextText:\"→\",currentText:\"Vandaag\",monthNames:[\"januari\",\"februari\",\"maart\",\"april\",\"mei\",\"juni\",\"juli\",\"augustus\",\"september\",\"oktober\",\"november\",\"december\"],monthNamesShort:[\"jan\",\"feb\",\"mrt\",\"apr\",\"mei\",\"jun\",\"jul\",\"aug\",\"sep\",\"okt\",\"nov\",\"dec\"],dayNames:[\"zondag\",\"maandag\",\"dinsdag\",\"woensdag\",\"donderdag\",\"vrijdag\",\"zaterdag\"],dayNamesShort:[\"zon\",\"maa\",\"din\",\"woe\",\"don\",\"vri\",\"zat\"],dayNamesMin:[\"zo\",\"ma\",\"di\",\"wo\",\"do\",\"vr\",\"za\"],weekHeader:\"Wk\",dateFormat:\"dd-mm-yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"nl\",{buttonText:{year:\"Jaar\",month:\"Maand\",week:\"Week\",day:\"Dag\",list:\"Agenda\"},allDayText:\"Hele dag\",eventLimitText:\"extra\",noEventsMessage:\"Geen evenementen om te laten zien\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){var a=\"jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.\".split(\"_\"),t=\"jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec\".split(\"_\"),n=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],r=/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;return e.defineLocale(\"nl\",{months:\"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december\".split(\"_\"),monthsShort:function(e,n){return e?/-MMM-/.test(n)?t[e.month()]:a[e.month()]:a},monthsRegex:r,monthsShortRegex:r,monthsStrictRegex:/^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,monthsParse:n,longMonthsParse:n,shortMonthsParse:n,weekdays:\"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag\".split(\"_\"),weekdaysShort:\"zo._ma._di._wo._do._vr._za.\".split(\"_\"),weekdaysMin:\"zo_ma_di_wo_do_vr_za\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD-MM-YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[vandaag om] LT\",nextDay:\"[morgen om] LT\",nextWeek:\"dddd [om] LT\",lastDay:\"[gisteren om] LT\",lastWeek:\"[afgelopen] dddd [om] LT\",sameElse:\"L\"},relativeTime:{future:\"over %s\",past:\"%s geleden\",s:\"een paar seconden\",ss:\"%d seconden\",m:\"één minuut\",mm:\"%d minuten\",h:\"één uur\",hh:\"%d uur\",d:\"één dag\",dd:\"%d dagen\",M:\"één maand\",MM:\"%d maanden\",y:\"één jaar\",yy:\"%d jaar\"},dayOfMonthOrdinalParse:/\\d{1,2}(ste|de)/,ordinal:function(e){return e+(1===e||8===e||e>=20?\"ste\":\"de\")},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(180);var n=t(1);n.datepickerLocale(\"nn\",\"nn\",{closeText:\"Lukk\",prevText:\"&#xAB;Førre\",nextText:\"Neste&#xBB;\",currentText:\"I dag\",monthNames:[\"januar\",\"februar\",\"mars\",\"april\",\"mai\",\"juni\",\"juli\",\"august\",\"september\",\"oktober\",\"november\",\"desember\"],monthNamesShort:[\"jan\",\"feb\",\"mar\",\"apr\",\"mai\",\"jun\",\"jul\",\"aug\",\"sep\",\"okt\",\"nov\",\"des\"],dayNamesShort:[\"sun\",\"mån\",\"tys\",\"ons\",\"tor\",\"fre\",\"lau\"],dayNames:[\"sundag\",\"måndag\",\"tysdag\",\"onsdag\",\"torsdag\",\"fredag\",\"laurdag\"],dayNamesMin:[\"su\",\"må\",\"ty\",\"on\",\"to\",\"fr\",\"la\"],weekHeader:\"Veke\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"nn\",{buttonText:{month:\"Månad\",week:\"Veke\",day:\"Dag\",list:\"Agenda\"},allDayText:\"Heile dagen\",eventLimitText:\"til\",noEventsMessage:\"Ingen hendelser å vise\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"nn\",{months:\"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember\".split(\"_\"),monthsShort:\"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des\".split(\"_\"),weekdays:\"sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag\".split(\"_\"),weekdaysShort:\"sun_mån_tys_ons_tor_fre_lau\".split(\"_\"),weekdaysMin:\"su_må_ty_on_to_fr_lø\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY [kl.] H:mm\",LLLL:\"dddd D. MMMM YYYY [kl.] HH:mm\"},calendar:{sameDay:\"[I dag klokka] LT\",nextDay:\"[I morgon klokka] LT\",nextWeek:\"dddd [klokka] LT\",lastDay:\"[I går klokka] LT\",lastWeek:\"[Føregåande] dddd [klokka] LT\",sameElse:\"L\"},relativeTime:{future:\"om %s\",past:\"%s sidan\",s:\"nokre sekund\",ss:\"%d sekund\",m:\"eit minutt\",mm:\"%d minutt\",h:\"ein time\",hh:\"%d timar\",d:\"ein dag\",dd:\"%d dagar\",M:\"ein månad\",MM:\"%d månader\",y:\"eit år\",yy:\"%d år\"},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(182);var n=t(1);n.datepickerLocale(\"pl\",\"pl\",{closeText:\"Zamknij\",prevText:\"&#x3C;Poprzedni\",nextText:\"Następny&#x3E;\",currentText:\"Dziś\",monthNames:[\"Styczeń\",\"Luty\",\"Marzec\",\"Kwiecień\",\"Maj\",\"Czerwiec\",\"Lipiec\",\"Sierpień\",\"Wrzesień\",\"Październik\",\"Listopad\",\"Grudzień\"],monthNamesShort:[\"Sty\",\"Lu\",\"Mar\",\"Kw\",\"Maj\",\"Cze\",\"Lip\",\"Sie\",\"Wrz\",\"Pa\",\"Lis\",\"Gru\"],dayNames:[\"Niedziela\",\"Poniedziałek\",\"Wtorek\",\"Środa\",\"Czwartek\",\"Piątek\",\"Sobota\"],dayNamesShort:[\"Nie\",\"Pn\",\"Wt\",\"Śr\",\"Czw\",\"Pt\",\"So\"],dayNamesMin:[\"N\",\"Pn\",\"Wt\",\"Śr\",\"Cz\",\"Pt\",\"So\"],weekHeader:\"Tydz\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"pl\",{buttonText:{month:\"Miesiąc\",week:\"Tydzień\",day:\"Dzień\",list:\"Plan dnia\"},allDayText:\"Cały dzień\",eventLimitText:\"więcej\",noEventsMessage:\"Brak wydarzeń do wyświetlenia\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e){return e%10<5&&e%10>1&&~~(e/10)%10!=1}function t(e,t,n){var r=e+\" \";switch(n){case\"ss\":return r+(a(e)?\"sekundy\":\"sekund\");case\"m\":return t?\"minuta\":\"minutę\";case\"mm\":return r+(a(e)?\"minuty\":\"minut\")\n;case\"h\":return t?\"godzina\":\"godzinę\";case\"hh\":return r+(a(e)?\"godziny\":\"godzin\");case\"MM\":return r+(a(e)?\"miesiące\":\"miesięcy\");case\"yy\":return r+(a(e)?\"lata\":\"lat\")}}var n=\"styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień\".split(\"_\"),r=\"stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia\".split(\"_\");return e.defineLocale(\"pl\",{months:function(e,a){return e?\"\"===a?\"(\"+r[e.month()]+\"|\"+n[e.month()]+\")\":/D MMMM/.test(a)?r[e.month()]:n[e.month()]:n},monthsShort:\"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru\".split(\"_\"),weekdays:\"niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota\".split(\"_\"),weekdaysShort:\"ndz_pon_wt_śr_czw_pt_sob\".split(\"_\"),weekdaysMin:\"Nd_Pn_Wt_Śr_Cz_Pt_So\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Dziś o] LT\",nextDay:\"[Jutro o] LT\",nextWeek:function(){switch(this.day()){case 0:return\"[W niedzielę o] LT\";case 2:return\"[We wtorek o] LT\";case 3:return\"[W środę o] LT\";case 6:return\"[W sobotę o] LT\";default:return\"[W] dddd [o] LT\"}},lastDay:\"[Wczoraj o] LT\",lastWeek:function(){switch(this.day()){case 0:return\"[W zeszłą niedzielę o] LT\";case 3:return\"[W zeszłą środę o] LT\";case 6:return\"[W zeszłą sobotę o] LT\";default:return\"[W zeszły] dddd [o] LT\"}},sameElse:\"L\"},relativeTime:{future:\"za %s\",past:\"%s temu\",s:\"kilka sekund\",ss:t,m:t,mm:t,h:t,hh:t,d:\"1 dzień\",dd:\"%d dni\",M:\"miesiąc\",MM:t,y:\"rok\",yy:t},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(184);var n=t(1);n.datepickerLocale(\"pt-br\",\"pt-BR\",{closeText:\"Fechar\",prevText:\"&#x3C;Anterior\",nextText:\"Próximo&#x3E;\",currentText:\"Hoje\",monthNames:[\"Janeiro\",\"Fevereiro\",\"Março\",\"Abril\",\"Maio\",\"Junho\",\"Julho\",\"Agosto\",\"Setembro\",\"Outubro\",\"Novembro\",\"Dezembro\"],monthNamesShort:[\"Jan\",\"Fev\",\"Mar\",\"Abr\",\"Mai\",\"Jun\",\"Jul\",\"Ago\",\"Set\",\"Out\",\"Nov\",\"Dez\"],dayNames:[\"Domingo\",\"Segunda-feira\",\"Terça-feira\",\"Quarta-feira\",\"Quinta-feira\",\"Sexta-feira\",\"Sábado\"],dayNamesShort:[\"Dom\",\"Seg\",\"Ter\",\"Qua\",\"Qui\",\"Sex\",\"Sáb\"],dayNamesMin:[\"Dom\",\"Seg\",\"Ter\",\"Qua\",\"Qui\",\"Sex\",\"Sáb\"],weekHeader:\"Sm\",dateFormat:\"dd/mm/yy\",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"pt-br\",{buttonText:{month:\"Mês\",week:\"Semana\",day:\"Dia\",list:\"Compromissos\"},allDayText:\"dia inteiro\",eventLimitText:function(e){return\"mais +\"+e},noEventsMessage:\"Não há eventos para mostrar\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"pt-br\",{months:\"janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro\".split(\"_\"),monthsShort:\"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez\".split(\"_\"),weekdays:\"Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado\".split(\"_\"),weekdaysShort:\"Dom_Seg_Ter_Qua_Qui_Sex_Sáb\".split(\"_\"),weekdaysMin:\"Do_2ª_3ª_4ª_5ª_6ª_Sá\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D [de] MMMM [de] YYYY\",LLL:\"D [de] MMMM [de] YYYY [às] HH:mm\",LLLL:\"dddd, D [de] MMMM [de] YYYY [às] HH:mm\"},calendar:{sameDay:\"[Hoje às] LT\",nextDay:\"[Amanhã às] LT\",nextWeek:\"dddd [às] LT\",lastDay:\"[Ontem às] LT\",lastWeek:function(){return 0===this.day()||6===this.day()?\"[Último] dddd [às] LT\":\"[Última] dddd [às] LT\"},sameElse:\"L\"},relativeTime:{future:\"em %s\",past:\"há %s\",s:\"poucos segundos\",ss:\"%d segundos\",m:\"um minuto\",mm:\"%d minutos\",h:\"uma hora\",hh:\"%d horas\",d:\"um dia\",dd:\"%d dias\",M:\"um mês\",MM:\"%d meses\",y:\"um ano\",yy:\"%d anos\"},dayOfMonthOrdinalParse:/\\d{1,2}º/,ordinal:\"%dº\"})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(186);var n=t(1);n.datepickerLocale(\"pt\",\"pt\",{closeText:\"Fechar\",prevText:\"Anterior\",nextText:\"Seguinte\",currentText:\"Hoje\",monthNames:[\"Janeiro\",\"Fevereiro\",\"Março\",\"Abril\",\"Maio\",\"Junho\",\"Julho\",\"Agosto\",\"Setembro\",\"Outubro\",\"Novembro\",\"Dezembro\"],monthNamesShort:[\"Jan\",\"Fev\",\"Mar\",\"Abr\",\"Mai\",\"Jun\",\"Jul\",\"Ago\",\"Set\",\"Out\",\"Nov\",\"Dez\"],dayNames:[\"Domingo\",\"Segunda-feira\",\"Terça-feira\",\"Quarta-feira\",\"Quinta-feira\",\"Sexta-feira\",\"Sábado\"],dayNamesShort:[\"Dom\",\"Seg\",\"Ter\",\"Qua\",\"Qui\",\"Sex\",\"Sáb\"],dayNamesMin:[\"Dom\",\"Seg\",\"Ter\",\"Qua\",\"Qui\",\"Sex\",\"Sáb\"],weekHeader:\"Sem\",dateFormat:\"dd/mm/yy\",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"pt\",{buttonText:{month:\"Mês\",week:\"Semana\",day:\"Dia\",list:\"Agenda\"},allDayText:\"Todo o dia\",eventLimitText:\"mais\",noEventsMessage:\"Não há eventos para mostrar\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"pt\",{months:\"janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro\".split(\"_\"),monthsShort:\"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez\".split(\"_\"),weekdays:\"Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado\".split(\"_\"),weekdaysShort:\"Dom_Seg_Ter_Qua_Qui_Sex_Sáb\".split(\"_\"),weekdaysMin:\"Do_2ª_3ª_4ª_5ª_6ª_Sá\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D [de] MMMM [de] YYYY\",LLL:\"D [de] MMMM [de] YYYY HH:mm\",LLLL:\"dddd, D [de] MMMM [de] YYYY HH:mm\"},calendar:{sameDay:\"[Hoje às] LT\",nextDay:\"[Amanhã às] LT\",nextWeek:\"dddd [às] LT\",lastDay:\"[Ontem às] LT\",lastWeek:function(){return 0===this.day()||6===this.day()?\"[Último] dddd [às] LT\":\"[Última] dddd [às] LT\"},sameElse:\"L\"},relativeTime:{future:\"em %s\",past:\"há %s\",s:\"segundos\",ss:\"%d segundos\",m:\"um minuto\",mm:\"%d minutos\",h:\"uma hora\",hh:\"%d horas\",d:\"um dia\",dd:\"%d dias\",M:\"um mês\",MM:\"%d meses\",y:\"um ano\",yy:\"%d anos\"},dayOfMonthOrdinalParse:/\\d{1,2}º/,ordinal:\"%dº\",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(188);var n=t(1);n.datepickerLocale(\"ro\",\"ro\",{closeText:\"Închide\",prevText:\"&#xAB; Luna precedentă\",nextText:\"Luna următoare &#xBB;\",currentText:\"Azi\",monthNames:[\"Ianuarie\",\"Februarie\",\"Martie\",\"Aprilie\",\"Mai\",\"Iunie\",\"Iulie\",\"August\",\"Septembrie\",\"Octombrie\",\"Noiembrie\",\"Decembrie\"],monthNamesShort:[\"Ian\",\"Feb\",\"Mar\",\"Apr\",\"Mai\",\"Iun\",\"Iul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],dayNames:[\"Duminică\",\"Luni\",\"Marţi\",\"Miercuri\",\"Joi\",\"Vineri\",\"Sâmbătă\"],dayNamesShort:[\"Dum\",\"Lun\",\"Mar\",\"Mie\",\"Joi\",\"Vin\",\"Sâm\"],dayNamesMin:[\"Du\",\"Lu\",\"Ma\",\"Mi\",\"Jo\",\"Vi\",\"Sâ\"],weekHeader:\"Săpt\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"ro\",{buttonText:{prev:\"precedentă\",next:\"următoare\",month:\"Lună\",week:\"Săptămână\",day:\"Zi\",list:\"Agendă\"},allDayText:\"Toată ziua\",eventLimitText:function(e){return\"+alte \"+e},noEventsMessage:\"Nu există evenimente de afișat\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a,t){var n={ss:\"secunde\",mm:\"minute\",hh:\"ore\",dd:\"zile\",MM:\"luni\",yy:\"ani\"},r=\" \";return(e%100>=20||e>=100&&e%100==0)&&(r=\" de \"),e+r+n[t]}return e.defineLocale(\"ro\",{months:\"ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie\".split(\"_\"),monthsShort:\"ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.\".split(\"_\"),monthsParseExact:!0,weekdays:\"duminică_luni_marți_miercuri_joi_vineri_sâmbătă\".split(\"_\"),weekdaysShort:\"Dum_Lun_Mar_Mie_Joi_Vin_Sâm\".split(\"_\"),weekdaysMin:\"Du_Lu_Ma_Mi_Jo_Vi_Sâ\".split(\"_\"),longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY H:mm\",LLLL:\"dddd, D MMMM YYYY H:mm\"},calendar:{sameDay:\"[azi la] LT\",nextDay:\"[mâine la] LT\",nextWeek:\"dddd [la] LT\",lastDay:\"[ieri la] LT\",lastWeek:\"[fosta] dddd [la] LT\",sameElse:\"L\"},relativeTime:{future:\"peste %s\",past:\"%s în urmă\",s:\"câteva secunde\",ss:a,m:\"un minut\",mm:a,h:\"o oră\",hh:a,d:\"o zi\",dd:a,M:\"o lună\",MM:a,y:\"un an\",yy:a},week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(190);var n=t(1);n.datepickerLocale(\"ru\",\"ru\",{closeText:\"Закрыть\",prevText:\"&#x3C;Пред\",nextText:\"След&#x3E;\",currentText:\"Сегодня\",monthNames:[\"Январь\",\"Февраль\",\"Март\",\"Апрель\",\"Май\",\"Июнь\",\"Июль\",\"Август\",\"Сентябрь\",\"Октябрь\",\"Ноябрь\",\"Декабрь\"],monthNamesShort:[\"Янв\",\"Фев\",\"Мар\",\"Апр\",\"Май\",\"Июн\",\"Июл\",\"Авг\",\"Сен\",\"Окт\",\"Ноя\",\"Дек\"],dayNames:[\"воскресенье\",\"понедельник\",\"вторник\",\"среда\",\"четверг\",\"пятница\",\"суббота\"],dayNamesShort:[\"вск\",\"пнд\",\"втр\",\"срд\",\"чтв\",\"птн\",\"сбт\"],dayNamesMin:[\"Вс\",\"Пн\",\"Вт\",\"Ср\",\"Чт\",\"Пт\",\"Сб\"],weekHeader:\"Нед\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"ru\",{buttonText:{month:\"Месяц\",week:\"Неделя\",day:\"День\",list:\"Повестка дня\"},allDayText:\"Весь день\",eventLimitText:function(e){return\"+ ещё \"+e},noEventsMessage:\"Нет событий для отображения\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a){var t=e.split(\"_\");return a%10==1&&a%100!=11?t[0]:a%10>=2&&a%10<=4&&(a%100<10||a%100>=20)?t[1]:t[2]}function t(e,t,n){var r={ss:t?\"секунда_секунды_секунд\":\"секунду_секунды_секунд\",mm:t?\"минута_минуты_минут\":\"минуту_минуты_минут\",hh:\"час_часа_часов\",dd:\"день_дня_дней\",MM:\"месяц_месяца_месяцев\",yy:\"год_года_лет\"};return\"m\"===n?t?\"минута\":\"минуту\":e+\" \"+a(r[n],+e)}var n=[/^янв/i,/^фев/i,/^мар/i,/^апр/i,/^ма[йя]/i,/^июн/i,/^июл/i,/^авг/i,/^сен/i,/^окт/i,/^ноя/i,/^дек/i];return e.defineLocale(\"ru\",{months:{format:\"января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря\".split(\"_\"),standalone:\"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь\".split(\"_\")},monthsShort:{format:\"янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.\".split(\"_\"),standalone:\"янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.\".split(\"_\")},weekdays:{standalone:\"воскресенье_понедельник_вторник_среда_четверг_пятница_суббота\".split(\"_\"),format:\"воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу\".split(\"_\"),isFormat:/\\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\\] ?dddd/},weekdaysShort:\"вс_пн_вт_ср_чт_пт_сб\".split(\"_\"),weekdaysMin:\"вс_пн_вт_ср_чт_пт_сб\".split(\"_\"),monthsParse:n,longMonthsParse:n,shortMonthsParse:n,monthsRegex:/^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,monthsShortRegex:/^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,monthsStrictRegex:/^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,monthsShortStrictRegex:/^(янв\\.|февр?\\.|мар[т.]|апр\\.|ма[яй]|июн[ья.]|июл[ья.]|авг\\.|сент?\\.|окт\\.|нояб?\\.|дек\\.)/i,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY г.\",LLL:\"D MMMM YYYY г., H:mm\",LLLL:\"dddd, D MMMM YYYY г., H:mm\"},calendar:{sameDay:\"[Сегодня, в] LT\",nextDay:\"[Завтра, в] LT\",lastDay:\"[Вчера, в] LT\",nextWeek:function(e){if(e.week()===this.week())return 2===this.day()?\"[Во] dddd, [в] LT\":\"[В] dddd, [в] LT\";switch(this.day()){case 0:return\"[В следующее] dddd, [в] LT\";case 1:case 2:case 4:return\"[В следующий] dddd, [в] LT\";case 3:case 5:case 6:return\"[В следующую] dddd, [в] LT\"}},lastWeek:function(e){if(e.week()===this.week())return 2===this.day()?\"[Во] dddd, [в] LT\":\"[В] dddd, [в] LT\";switch(this.day()){case 0:return\"[В прошлое] dddd, [в] LT\";case 1:case 2:case 4:return\"[В прошлый] dddd, [в] LT\";case 3:case 5:case 6:return\"[В прошлую] dddd, [в] LT\"}},sameElse:\"L\"},relativeTime:{future:\"через %s\",past:\"%s назад\",s:\"несколько секунд\",ss:t,m:t,mm:t,h:\"час\",hh:t,d:\"день\",dd:t,M:\"месяц\",MM:t,y:\"год\",yy:t},meridiemParse:/ночи|утра|дня|вечера/i,isPM:function(e){return/^(дня|вечера)$/.test(e)},meridiem:function(e,a,t){return e<4?\"ночи\":e<12?\"утра\":e<17?\"дня\":\"вечера\"},dayOfMonthOrdinalParse:/\\d{1,2}-(й|го|я)/,ordinal:function(e,a){switch(a){case\"M\":case\"d\":case\"DDD\":return e+\"-й\";case\"D\":return e+\"-го\";case\"w\":case\"W\":return e+\"-я\";default:return e}},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(192);var n=t(1);n.datepickerLocale(\"sk\",\"sk\",{closeText:\"Zavrieť\",prevText:\"&#x3C;Predchádzajúci\",nextText:\"Nasledujúci&#x3E;\",currentText:\"Dnes\",monthNames:[\"január\",\"február\",\"marec\",\"apríl\",\"máj\",\"jún\",\"júl\",\"august\",\"september\",\"október\",\"november\",\"december\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"Máj\",\"Jún\",\"Júl\",\"Aug\",\"Sep\",\"Okt\",\"Nov\",\"Dec\"],dayNames:[\"nedeľa\",\"pondelok\",\"utorok\",\"streda\",\"štvrtok\",\"piatok\",\"sobota\"],dayNamesShort:[\"Ned\",\"Pon\",\"Uto\",\"Str\",\"Štv\",\"Pia\",\"Sob\"],dayNamesMin:[\"Ne\",\"Po\",\"Ut\",\"St\",\"Št\",\"Pia\",\"So\"],weekHeader:\"Ty\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"sk\",{buttonText:{month:\"Mesiac\",week:\"Týždeň\",day:\"Deň\",list:\"Rozvrh\"},allDayText:\"Celý deň\",eventLimitText:function(e){return\"+ďalšie: \"+e},noEventsMessage:\"Žiadne akcie na zobrazenie\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e){return e>1&&e<5}function t(e,t,n,r){var s=e+\" \";switch(n){case\"s\":return t||r?\"pár sekúnd\":\"pár sekundami\";case\"ss\":return t||r?s+(a(e)?\"sekundy\":\"sekúnd\"):s+\"sekundami\";case\"m\":return t?\"minúta\":r?\"minútu\":\"minútou\";case\"mm\":return t||r?s+(a(e)?\"minúty\":\"minút\"):s+\"minútami\";case\"h\":return t?\"hodina\":r?\"hodinu\":\"hodinou\";case\"hh\":return t||r?s+(a(e)?\"hodiny\":\"hodín\"):s+\"hodinami\";case\"d\":return t||r?\"deň\":\"dňom\";case\"dd\":return t||r?s+(a(e)?\"dni\":\"dní\"):s+\"dňami\";case\"M\":return t||r?\"mesiac\":\"mesiacom\";case\"MM\":return t||r?s+(a(e)?\"mesiace\":\"mesiacov\"):s+\"mesiacmi\";case\"y\":return t||r?\"rok\":\"rokom\";case\"yy\":return t||r?s+(a(e)?\"roky\":\"rokov\"):s+\"rokmi\"}}var n=\"január_február_marec_apríl_máj_jún_júl_august_september_október_november_december\".split(\"_\"),r=\"jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec\".split(\"_\");return e.defineLocale(\"sk\",{months:n,monthsShort:r,weekdays:\"nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota\".split(\"_\"),weekdaysShort:\"ne_po_ut_st_št_pi_so\".split(\"_\"),weekdaysMin:\"ne_po_ut_st_št_pi_so\".split(\"_\"),longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY H:mm\",LLLL:\"dddd D. MMMM YYYY H:mm\"},calendar:{sameDay:\"[dnes o] LT\",nextDay:\"[zajtra o] LT\",nextWeek:function(){switch(this.day()){case 0:return\"[v nedeľu o] LT\";case 1:case 2:return\"[v] dddd [o] LT\";case 3:return\"[v stredu o] LT\";case 4:return\"[vo štvrtok o] LT\";case 5:return\"[v piatok o] LT\";case 6:return\"[v sobotu o] LT\"}},lastDay:\"[včera o] LT\",lastWeek:function(){switch(this.day()){case 0:return\"[minulú nedeľu o] LT\";case 1:case 2:return\"[minulý] dddd [o] LT\";case 3:return\"[minulú stredu o] LT\";case 4:case 5:return\"[minulý] dddd [o] LT\";case 6:return\"[minulú sobotu o] LT\"}},sameElse:\"L\"},relativeTime:{future:\"za %s\",past:\"pred %s\",s:t,ss:t,m:t,mm:t,h:t,hh:t,d:t,dd:t,M:t,MM:t,y:t,yy:t},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(194);var n=t(1);n.datepickerLocale(\"sl\",\"sl\",{closeText:\"Zapri\",prevText:\"&#x3C;Prejšnji\",nextText:\"Naslednji&#x3E;\",currentText:\"Trenutni\",monthNames:[\"Januar\",\"Februar\",\"Marec\",\"April\",\"Maj\",\"Junij\",\"Julij\",\"Avgust\",\"September\",\"Oktober\",\"November\",\"December\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"Maj\",\"Jun\",\"Jul\",\"Avg\",\"Sep\",\"Okt\",\"Nov\",\"Dec\"],dayNames:[\"Nedelja\",\"Ponedeljek\",\"Torek\",\"Sreda\",\"Četrtek\",\"Petek\",\"Sobota\"],dayNamesShort:[\"Ned\",\"Pon\",\"Tor\",\"Sre\",\"Čet\",\"Pet\",\"Sob\"],dayNamesMin:[\"Ne\",\"Po\",\"To\",\"Sr\",\"Če\",\"Pe\",\"So\"],weekHeader:\"Teden\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"sl\",{buttonText:{month:\"Mesec\",week:\"Teden\",day:\"Dan\",list:\"Dnevni red\"},allDayText:\"Ves dan\",eventLimitText:\"več\",noEventsMessage:\"Ni dogodkov za prikaz\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a,t,n){var r=e+\" \";switch(t){case\"s\":return a||n?\"nekaj sekund\":\"nekaj sekundami\";case\"ss\":return r+=1===e?a?\"sekundo\":\"sekundi\":2===e?a||n?\"sekundi\":\"sekundah\":e<5?a||n?\"sekunde\":\"sekundah\":\"sekund\";case\"m\":return a?\"ena minuta\":\"eno minuto\";case\"mm\":return r+=1===e?a?\"minuta\":\"minuto\":2===e?a||n?\"minuti\":\"minutama\":e<5?a||n?\"minute\":\"minutami\":a||n?\"minut\":\"minutami\";case\"h\":return a?\"ena ura\":\"eno uro\";case\"hh\":return r+=1===e?a?\"ura\":\"uro\":2===e?a||n?\"uri\":\"urama\":e<5?a||n?\"ure\":\"urami\":a||n?\"ur\":\"urami\";case\"d\":return a||n?\"en dan\":\"enim dnem\";case\"dd\":return r+=1===e?a||n?\"dan\":\"dnem\":2===e?a||n?\"dni\":\"dnevoma\":a||n?\"dni\":\"dnevi\";case\"M\":return a||n?\"en mesec\":\"enim mesecem\";case\"MM\":return r+=1===e?a||n?\"mesec\":\"mesecem\":2===e?a||n?\"meseca\":\"mesecema\":e<5?a||n?\"mesece\":\"meseci\":a||n?\"mesecev\":\"meseci\";case\"y\":return a||n?\"eno leto\":\"enim letom\";case\"yy\":return r+=1===e?a||n?\"leto\":\"letom\":2===e?a||n?\"leti\":\"letoma\":e<5?a||n?\"leta\":\"leti\":a||n?\"let\":\"leti\"}}return e.defineLocale(\"sl\",{months:\"januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december\".split(\"_\"),monthsShort:\"jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.\".split(\"_\"),monthsParseExact:!0,weekdays:\"nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota\".split(\"_\"),weekdaysShort:\"ned._pon._tor._sre._čet._pet._sob.\".split(\"_\"),weekdaysMin:\"ne_po_to_sr_če_pe_so\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY H:mm\",LLLL:\"dddd, D. MMMM YYYY H:mm\"},calendar:{sameDay:\"[danes ob] LT\",nextDay:\"[jutri ob] LT\",nextWeek:function(){switch(this.day()){case 0:return\"[v] [nedeljo] [ob] LT\";case 3:return\"[v] [sredo] [ob] LT\";case 6:return\"[v] [soboto] [ob] LT\";case 1:case 2:case 4:case 5:return\"[v] dddd [ob] LT\"}},lastDay:\"[včeraj ob] LT\",lastWeek:function(){switch(this.day()){case 0:return\"[prejšnjo] [nedeljo] [ob] LT\";case 3:return\"[prejšnjo] [sredo] [ob] LT\";case 6:return\"[prejšnjo] [soboto] [ob] LT\";case 1:case 2:case 4:case 5:return\"[prejšnji] dddd [ob] LT\"}},sameElse:\"L\"},relativeTime:{future:\"čez %s\",past:\"pred %s\",s:a,ss:a,m:a,mm:a,h:a,hh:a,d:a,dd:a,M:a,MM:a,y:a,yy:a},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(196);var n=t(1);n.datepickerLocale(\"sq\",\"sq\",{closeText:\"mbylle\",prevText:\"&#x3C;mbrapa\",nextText:\"Përpara&#x3E;\",currentText:\"sot\",monthNames:[\"Janar\",\"Shkurt\",\"Mars\",\"Prill\",\"Maj\",\"Qershor\",\"Korrik\",\"Gusht\",\"Shtator\",\"Tetor\",\"Nëntor\",\"Dhjetor\"],monthNamesShort:[\"Jan\",\"Shk\",\"Mar\",\"Pri\",\"Maj\",\"Qer\",\"Kor\",\"Gus\",\"Sht\",\"Tet\",\"Nën\",\"Dhj\"],dayNames:[\"E Diel\",\"E Hënë\",\"E Martë\",\"E Mërkurë\",\"E Enjte\",\"E Premte\",\"E Shtune\"],dayNamesShort:[\"Di\",\"Hë\",\"Ma\",\"Më\",\"En\",\"Pr\",\"Sh\"],dayNamesMin:[\"Di\",\"Hë\",\"Ma\",\"Më\",\"En\",\"Pr\",\"Sh\"],weekHeader:\"Ja\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"sq\",{buttonText:{month:\"Muaj\",week:\"Javë\",day:\"Ditë\",list:\"Listë\"},allDayHtml:\"Gjithë<br/>ditën\",eventLimitText:function(e){return\"+më tepër \"+e},noEventsMessage:\"Nuk ka evente për të shfaqur\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"sq\",{months:\"Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor\".split(\"_\"),monthsShort:\"Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj\".split(\"_\"),weekdays:\"E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë\".split(\"_\"),weekdaysShort:\"Die_Hën_Mar_Mër_Enj_Pre_Sht\".split(\"_\"),weekdaysMin:\"D_H_Ma_Më_E_P_Sh\".split(\"_\"),weekdaysParseExact:!0,meridiemParse:/PD|MD/,isPM:function(e){return\"M\"===e.charAt(0)},meridiem:function(e,a,t){return e<12?\"PD\":\"MD\"},longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[Sot në] LT\",nextDay:\"[Nesër në] LT\",nextWeek:\"dddd [në] LT\",lastDay:\"[Dje në] LT\",lastWeek:\"dddd [e kaluar në] LT\",sameElse:\"L\"},relativeTime:{future:\"në %s\",past:\"%s më parë\",s:\"disa sekonda\",ss:\"%d sekonda\",m:\"një minutë\",mm:\"%d minuta\",h:\"një orë\",hh:\"%d orë\",d:\"një ditë\",dd:\"%d ditë\",M:\"një muaj\",MM:\"%d muaj\",y:\"një vit\",yy:\"%d vite\"},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(198);var n=t(1);n.datepickerLocale(\"sr-cyrl\",\"sr\",{closeText:\"Затвори\",prevText:\"&#x3C;\",nextText:\"&#x3E;\",currentText:\"Данас\",monthNames:[\"Јануар\",\"Фебруар\",\"Март\",\"Април\",\"Мај\",\"Јун\",\"Јул\",\"Август\",\"Септембар\",\"Октобар\",\"Новембар\",\"Децембар\"],monthNamesShort:[\"Јан\",\"Феб\",\"Мар\",\"Апр\",\"Мај\",\"Јун\",\"Јул\",\"Авг\",\"Сеп\",\"Окт\",\"Нов\",\"Дец\"],dayNames:[\"Недеља\",\"Понедељак\",\"Уторак\",\"Среда\",\"Четвртак\",\"Петак\",\"Субота\"],dayNamesShort:[\"Нед\",\"Пон\",\"Уто\",\"Сре\",\"Чет\",\"Пет\",\"Суб\"],dayNamesMin:[\"Не\",\"По\",\"Ут\",\"Ср\",\"Че\",\"Пе\",\"Су\"],weekHeader:\"Сед\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"sr-cyrl\",{buttonText:{prev:\"Претходна\",next:\"следећи\",month:\"Месец\",week:\"Недеља\",day:\"Дан\",list:\"Планер\"},allDayText:\"Цео дан\",eventLimitText:function(e){return\"+ још \"+e},noEventsMessage:\"Нема догађаја за приказ\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){var a={words:{ss:[\"секунда\",\"секунде\",\"секунди\"],m:[\"један минут\",\"једне минуте\"],mm:[\"минут\",\"минуте\",\"минута\"],h:[\"један сат\",\"једног сата\"],hh:[\"сат\",\"сата\",\"сати\"],dd:[\"дан\",\"дана\",\"дана\"],MM:[\"месец\",\"месеца\",\"месеци\"],yy:[\"година\",\"године\",\"година\"]},correctGrammaticalCase:function(e,a){return 1===e?a[0]:e>=2&&e<=4?a[1]:a[2]},translate:function(e,t,n){var r=a.words[n];return 1===n.length?t?r[0]:r[1]:e+\" \"+a.correctGrammaticalCase(e,r)}};return e.defineLocale(\"sr-cyrl\",{months:\"јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар\".split(\"_\"),monthsShort:\"јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.\".split(\"_\"),monthsParseExact:!0,weekdays:\"недеља_понедељак_уторак_среда_четвртак_петак_субота\".split(\"_\"),weekdaysShort:\"нед._пон._уто._сре._чет._пет._суб.\".split(\"_\"),weekdaysMin:\"не_по_ут_ср_че_пе_су\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY H:mm\",LLLL:\"dddd, D. MMMM YYYY H:mm\"},calendar:{sameDay:\"[данас у] LT\",nextDay:\"[сутра у] LT\",nextWeek:function(){switch(this.day()){case 0:return\"[у] [недељу] [у] LT\";case 3:return\"[у] [среду] [у] LT\";case 6:return\"[у] [суботу] [у] LT\";case 1:case 2:case 4:case 5:return\"[у] dddd [у] LT\"}},lastDay:\"[јуче у] LT\",lastWeek:function(){return[\"[прошле] [недеље] [у] LT\",\"[прошлог] [понедељка] [у] LT\",\"[прошлог] [уторка] [у] LT\",\"[прошле] [среде] [у] LT\",\"[прошлог] [четвртка] [у] LT\",\"[прошлог] [петка] [у] LT\",\"[прошле] [суботе] [у] LT\"][this.day()]},sameElse:\"L\"},relativeTime:{future:\"за %s\",past:\"пре %s\",s:\"неколико секунди\",ss:a.translate,m:a.translate,mm:a.translate,h:a.translate,hh:a.translate,d:\"дан\",dd:a.translate,M:\"месец\",MM:a.translate,y:\"годину\",yy:a.translate},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(200);var n=t(1);n.datepickerLocale(\"sr\",\"sr-SR\",{closeText:\"Zatvori\",prevText:\"&#x3C;\",nextText:\"&#x3E;\",currentText:\"Danas\",monthNames:[\"Januar\",\"Februar\",\"Mart\",\"April\",\"Maj\",\"Jun\",\"Jul\",\"Avgust\",\"Septembar\",\"Oktobar\",\"Novembar\",\"Decembar\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"Maj\",\"Jun\",\"Jul\",\"Avg\",\"Sep\",\"Okt\",\"Nov\",\"Dec\"],dayNames:[\"Nedelja\",\"Ponedeljak\",\"Utorak\",\"Sreda\",\"Četvrtak\",\"Petak\",\"Subota\"],dayNamesShort:[\"Ned\",\"Pon\",\"Uto\",\"Sre\",\"Čet\",\"Pet\",\"Sub\"],dayNamesMin:[\"Ne\",\"Po\",\"Ut\",\"Sr\",\"Če\",\"Pe\",\"Su\"],weekHeader:\"Sed\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"sr\",{buttonText:{prev:\"Prethodna\",next:\"Sledeći\",month:\"Mеsеc\",week:\"Nеdеlja\",day:\"Dan\",list:\"Planеr\"},allDayText:\"Cеo dan\",eventLimitText:function(e){return\"+ još \"+e},noEventsMessage:\"Nеma događaja za prikaz\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){var a={words:{ss:[\"sekunda\",\"sekunde\",\"sekundi\"],m:[\"jedan minut\",\"jedne minute\"],mm:[\"minut\",\"minute\",\"minuta\"],h:[\"jedan sat\",\"jednog sata\"],hh:[\"sat\",\"sata\",\"sati\"],dd:[\"dan\",\"dana\",\"dana\"],MM:[\"mesec\",\"meseca\",\"meseci\"],yy:[\"godina\",\"godine\",\"godina\"]},correctGrammaticalCase:function(e,a){return 1===e?a[0]:e>=2&&e<=4?a[1]:a[2]},translate:function(e,t,n){var r=a.words[n];return 1===n.length?t?r[0]:r[1]:e+\" \"+a.correctGrammaticalCase(e,r)}};return e.defineLocale(\"sr\",{months:\"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar\".split(\"_\"),monthsShort:\"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.\".split(\"_\"),monthsParseExact:!0,weekdays:\"nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota\".split(\"_\"),weekdaysShort:\"ned._pon._uto._sre._čet._pet._sub.\".split(\"_\"),weekdaysMin:\"ne_po_ut_sr_če_pe_su\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D. MMMM YYYY\",LLL:\"D. MMMM YYYY H:mm\",LLLL:\"dddd, D. MMMM YYYY H:mm\"},calendar:{sameDay:\"[danas u] LT\",nextDay:\"[sutra u] LT\",nextWeek:function(){switch(this.day()){case 0:return\"[u] [nedelju] [u] LT\";case 3:return\"[u] [sredu] [u] LT\";case 6:return\"[u] [subotu] [u] LT\";case 1:case 2:case 4:case 5:return\"[u] dddd [u] LT\"}},lastDay:\"[juče u] LT\",lastWeek:function(){return[\"[prošle] [nedelje] [u] LT\",\"[prošlog] [ponedeljka] [u] LT\",\"[prošlog] [utorka] [u] LT\",\"[prošle] [srede] [u] LT\",\"[prošlog] [četvrtka] [u] LT\",\"[prošlog] [petka] [u] LT\",\"[prošle] [subote] [u] LT\"][this.day()]},sameElse:\"L\"},relativeTime:{future:\"za %s\",past:\"pre %s\",s:\"nekoliko sekundi\",ss:a.translate,m:a.translate,mm:a.translate,h:a.translate,hh:a.translate,d:\"dan\",dd:a.translate,M:\"mesec\",MM:a.translate,y:\"godinu\",yy:a.translate},dayOfMonthOrdinalParse:/\\d{1,2}\\./,ordinal:\"%d.\",week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(202);var n=t(1);n.datepickerLocale(\"sv\",\"sv\",{closeText:\"Stäng\",prevText:\"&#xAB;Förra\",nextText:\"Nästa&#xBB;\",currentText:\"Idag\",monthNames:[\"Januari\",\"Februari\",\"Mars\",\"April\",\"Maj\",\"Juni\",\"Juli\",\"Augusti\",\"September\",\"Oktober\",\"November\",\"December\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"Maj\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Okt\",\"Nov\",\"Dec\"],dayNamesShort:[\"Sön\",\"Mån\",\"Tis\",\"Ons\",\"Tor\",\"Fre\",\"Lör\"],dayNames:[\"Söndag\",\"Måndag\",\"Tisdag\",\"Onsdag\",\"Torsdag\",\"Fredag\",\"Lördag\"],dayNamesMin:[\"Sö\",\"Må\",\"Ti\",\"On\",\"To\",\"Fr\",\"Lö\"],weekHeader:\"v. \",dateFormat:\"yy-mm-dd\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"sv\",{buttonText:{month:\"Månad\",week:\"Vecka\",day:\"Dag\",list:\"Program\"},allDayText:\"Heldag\",eventLimitText:\"till\",noEventsMessage:\"Inga händelser att visa\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"sv\",{months:\"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december\".split(\"_\"),monthsShort:\"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec\".split(\"_\"),weekdays:\"söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag\".split(\"_\"),weekdaysShort:\"sön_mån_tis_ons_tor_fre_lör\".split(\"_\"),weekdaysMin:\"sö_må_ti_on_to_fr_lö\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY-MM-DD\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY [kl.] HH:mm\",LLLL:\"dddd D MMMM YYYY [kl.] HH:mm\",lll:\"D MMM YYYY HH:mm\",llll:\"ddd D MMM YYYY HH:mm\"},calendar:{sameDay:\"[Idag] LT\",nextDay:\"[Imorgon] LT\",lastDay:\"[Igår] LT\",nextWeek:\"[På] dddd LT\",lastWeek:\"[I] dddd[s] LT\",sameElse:\"L\"},relativeTime:{future:\"om %s\",past:\"för %s sedan\",s:\"några sekunder\",ss:\"%d sekunder\",m:\"en minut\",mm:\"%d minuter\",h:\"en timme\",hh:\"%d timmar\",d:\"en dag\",dd:\"%d dagar\",M:\"en månad\",MM:\"%d månader\",y:\"ett år\",yy:\"%d år\"},dayOfMonthOrdinalParse:/\\d{1,2}(e|a)/,ordinal:function(e){var a=e%10;return e+(1==~~(e%100/10)?\"e\":1===a?\"a\":2===a?\"a\":\"e\")},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(204);var n=t(1);n.datepickerLocale(\"th\",\"th\",{closeText:\"ปิด\",prevText:\"&#xAB;&#xA0;ย้อน\",nextText:\"ถัดไป&#xA0;&#xBB;\",currentText:\"วันนี้\",monthNames:[\"มกราคม\",\"กุมภาพันธ์\",\"มีนาคม\",\"เมษายน\",\"พฤษภาคม\",\"มิถุนายน\",\"กรกฎาคม\",\"สิงหาคม\",\"กันยายน\",\"ตุลาคม\",\"พฤศจิกายน\",\"ธันวาคม\"],monthNamesShort:[\"ม.ค.\",\"ก.พ.\",\"มี.ค.\",\"เม.ย.\",\"พ.ค.\",\"มิ.ย.\",\"ก.ค.\",\"ส.ค.\",\"ก.ย.\",\"ต.ค.\",\"พ.ย.\",\"ธ.ค.\"],dayNames:[\"อาทิตย์\",\"จันทร์\",\"อังคาร\",\"พุธ\",\"พฤหัสบดี\",\"ศุกร์\",\"เสาร์\"],dayNamesShort:[\"อา.\",\"จ.\",\"อ.\",\"พ.\",\"พฤ.\",\"ศ.\",\"ส.\"],dayNamesMin:[\"อา.\",\"จ.\",\"อ.\",\"พ.\",\"พฤ.\",\"ศ.\",\"ส.\"],weekHeader:\"Wk\",dateFormat:\"dd/mm/yy\",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"th\",{buttonText:{month:\"เดือน\",week:\"สัปดาห์\",day:\"วัน\",list:\"แผนงาน\"},allDayText:\"ตลอดวัน\",eventLimitText:\"เพิ่มเติม\",noEventsMessage:\"ไม่มีกิจกรรมที่จะแสดง\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"th\",{months:\"มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม\".split(\"_\"),monthsShort:\"ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.\".split(\"_\"),monthsParseExact:!0,weekdays:\"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์\".split(\"_\"),weekdaysShort:\"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์\".split(\"_\"),weekdaysMin:\"อา._จ._อ._พ._พฤ._ศ._ส.\".split(\"_\"),weekdaysParseExact:!0,longDateFormat:{LT:\"H:mm\",LTS:\"H:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY เวลา H:mm\",LLLL:\"วันddddที่ D MMMM YYYY เวลา H:mm\"},meridiemParse:/ก่อนเที่ยง|หลังเที่ยง/,isPM:function(e){return\"หลังเที่ยง\"===e},meridiem:function(e,a,t){return e<12?\"ก่อนเที่ยง\":\"หลังเที่ยง\"},calendar:{sameDay:\"[วันนี้ เวลา] LT\",nextDay:\"[พรุ่งนี้ เวลา] LT\",nextWeek:\"dddd[หน้า เวลา] LT\",lastDay:\"[เมื่อวานนี้ เวลา] LT\",lastWeek:\"[วัน]dddd[ที่แล้ว เวลา] LT\",sameElse:\"L\"},relativeTime:{future:\"อีก %s\",past:\"%sที่แล้ว\",s:\"ไม่กี่วินาที\",ss:\"%d วินาที\",m:\"1 นาที\",mm:\"%d นาที\",h:\"1 ชั่วโมง\",hh:\"%d ชั่วโมง\",d:\"1 วัน\",dd:\"%d วัน\",M:\"1 เดือน\",MM:\"%d เดือน\",y:\"1 ปี\",yy:\"%d ปี\"}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(206);var n=t(1);n.datepickerLocale(\"tr\",\"tr\",{closeText:\"kapat\",prevText:\"&#x3C;geri\",nextText:\"ileri&#x3e\",currentText:\"bugün\",monthNames:[\"Ocak\",\"Şubat\",\"Mart\",\"Nisan\",\"Mayıs\",\"Haziran\",\"Temmuz\",\"Ağustos\",\"Eylül\",\"Ekim\",\"Kasım\",\"Aralık\"],monthNamesShort:[\"Oca\",\"Şub\",\"Mar\",\"Nis\",\"May\",\"Haz\",\"Tem\",\"Ağu\",\"Eyl\",\"Eki\",\"Kas\",\"Ara\"],dayNames:[\"Pazar\",\"Pazartesi\",\"Salı\",\"Çarşamba\",\"Perşembe\",\"Cuma\",\"Cumartesi\"],dayNamesShort:[\"Pz\",\"Pt\",\"Sa\",\"Ça\",\"Pe\",\"Cu\",\"Ct\"],dayNamesMin:[\"Pz\",\"Pt\",\"Sa\",\"Ça\",\"Pe\",\"Cu\",\"Ct\"],weekHeader:\"Hf\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"tr\",{buttonText:{next:\"ileri\",month:\"Ay\",week:\"Hafta\",day:\"Gün\",list:\"Ajanda\"},allDayText:\"Tüm gün\",eventLimitText:\"daha fazla\",noEventsMessage:\"Gösterilecek etkinlik yok\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){var a={1:\"'inci\",5:\"'inci\",8:\"'inci\",70:\"'inci\",80:\"'inci\",2:\"'nci\",7:\"'nci\",20:\"'nci\",50:\"'nci\",3:\"'üncü\",4:\"'üncü\",100:\"'üncü\",6:\"'ncı\",9:\"'uncu\",10:\"'uncu\",30:\"'uncu\",60:\"'ıncı\",90:\"'ıncı\"};return e.defineLocale(\"tr\",{months:\"Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık\".split(\"_\"),monthsShort:\"Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara\".split(\"_\"),weekdays:\"Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi\".split(\"_\"),weekdaysShort:\"Paz_Pts_Sal_Çar_Per_Cum_Cts\".split(\"_\"),weekdaysMin:\"Pz_Pt_Sa_Ça_Pe_Cu_Ct\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY\",LLL:\"D MMMM YYYY HH:mm\",LLLL:\"dddd, D MMMM YYYY HH:mm\"},calendar:{sameDay:\"[bugün saat] LT\",nextDay:\"[yarın saat] LT\",nextWeek:\"[gelecek] dddd [saat] LT\",lastDay:\"[dün] LT\",lastWeek:\"[geçen] dddd [saat] LT\",sameElse:\"L\"},relativeTime:{future:\"%s sonra\",past:\"%s önce\",s:\"birkaç saniye\",ss:\"%d saniye\",m:\"bir dakika\",mm:\"%d dakika\",h:\"bir saat\",hh:\"%d saat\",d:\"bir gün\",dd:\"%d gün\",M:\"bir ay\",MM:\"%d ay\",y:\"bir yıl\",yy:\"%d yıl\"},ordinal:function(e,t){switch(t){case\"d\":case\"D\":case\"Do\":case\"DD\":return e;default:if(0===e)return e+\"'ıncı\";var n=e%10,r=e%100-n,s=e>=100?100:null;return e+(a[n]||a[r]||a[s])}},week:{dow:1,doy:7}})})},function(e,a,t){\nObject.defineProperty(a,\"__esModule\",{value:!0}),t(208);var n=t(1);n.datepickerLocale(\"uk\",\"uk\",{closeText:\"Закрити\",prevText:\"&#x3C;\",nextText:\"&#x3E;\",currentText:\"Сьогодні\",monthNames:[\"Січень\",\"Лютий\",\"Березень\",\"Квітень\",\"Травень\",\"Червень\",\"Липень\",\"Серпень\",\"Вересень\",\"Жовтень\",\"Листопад\",\"Грудень\"],monthNamesShort:[\"Січ\",\"Лют\",\"Бер\",\"Кві\",\"Тра\",\"Чер\",\"Лип\",\"Сер\",\"Вер\",\"Жов\",\"Лис\",\"Гру\"],dayNames:[\"неділя\",\"понеділок\",\"вівторок\",\"середа\",\"четвер\",\"п’ятниця\",\"субота\"],dayNamesShort:[\"нед\",\"пнд\",\"вів\",\"срд\",\"чтв\",\"птн\",\"сбт\"],dayNamesMin:[\"Нд\",\"Пн\",\"Вт\",\"Ср\",\"Чт\",\"Пт\",\"Сб\"],weekHeader:\"Тиж\",dateFormat:\"dd.mm.yy\",firstDay:1,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"uk\",{buttonText:{month:\"Місяць\",week:\"Тиждень\",day:\"День\",list:\"Порядок денний\"},allDayText:\"Увесь день\",eventLimitText:function(e){return\"+ще \"+e+\"...\"},noEventsMessage:\"Немає подій для відображення\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){function a(e,a){var t=e.split(\"_\");return a%10==1&&a%100!=11?t[0]:a%10>=2&&a%10<=4&&(a%100<10||a%100>=20)?t[1]:t[2]}function t(e,t,n){var r={ss:t?\"секунда_секунди_секунд\":\"секунду_секунди_секунд\",mm:t?\"хвилина_хвилини_хвилин\":\"хвилину_хвилини_хвилин\",hh:t?\"година_години_годин\":\"годину_години_годин\",dd:\"день_дні_днів\",MM:\"місяць_місяці_місяців\",yy:\"рік_роки_років\"};return\"m\"===n?t?\"хвилина\":\"хвилину\":\"h\"===n?t?\"година\":\"годину\":e+\" \"+a(r[n],+e)}function n(e,a){var t={nominative:\"неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота\".split(\"_\"),accusative:\"неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу\".split(\"_\"),genitive:\"неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи\".split(\"_\")};return e?t[/(\\[[ВвУу]\\]) ?dddd/.test(a)?\"accusative\":/\\[?(?:минулої|наступної)? ?\\] ?dddd/.test(a)?\"genitive\":\"nominative\"][e.day()]:t.nominative}function r(e){return function(){return e+\"о\"+(11===this.hours()?\"б\":\"\")+\"] LT\"}}return e.defineLocale(\"uk\",{months:{format:\"січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня\".split(\"_\"),standalone:\"січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень\".split(\"_\")},monthsShort:\"січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд\".split(\"_\"),weekdays:n,weekdaysShort:\"нд_пн_вт_ср_чт_пт_сб\".split(\"_\"),weekdaysMin:\"нд_пн_вт_ср_чт_пт_сб\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD.MM.YYYY\",LL:\"D MMMM YYYY р.\",LLL:\"D MMMM YYYY р., HH:mm\",LLLL:\"dddd, D MMMM YYYY р., HH:mm\"},calendar:{sameDay:r(\"[Сьогодні \"),nextDay:r(\"[Завтра \"),lastDay:r(\"[Вчора \"),nextWeek:r(\"[У] dddd [\"),lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return r(\"[Минулої] dddd [\").call(this);case 1:case 2:case 4:return r(\"[Минулого] dddd [\").call(this)}},sameElse:\"L\"},relativeTime:{future:\"за %s\",past:\"%s тому\",s:\"декілька секунд\",ss:t,m:t,mm:t,h:\"годину\",hh:t,d:\"день\",dd:t,M:\"місяць\",MM:t,y:\"рік\",yy:t},meridiemParse:/ночі|ранку|дня|вечора/,isPM:function(e){return/^(дня|вечора)$/.test(e)},meridiem:function(e,a,t){return e<4?\"ночі\":e<12?\"ранку\":e<17?\"дня\":\"вечора\"},dayOfMonthOrdinalParse:/\\d{1,2}-(й|го)/,ordinal:function(e,a){switch(a){case\"M\":case\"d\":case\"DDD\":case\"w\":case\"W\":return e+\"-й\";case\"D\":return e+\"-го\";default:return e}},week:{dow:1,doy:7}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(210);var n=t(1);n.datepickerLocale(\"vi\",\"vi\",{closeText:\"Đóng\",prevText:\"&#x3C;Trước\",nextText:\"Tiếp&#x3E;\",currentText:\"Hôm nay\",monthNames:[\"Tháng Một\",\"Tháng Hai\",\"Tháng Ba\",\"Tháng Tư\",\"Tháng Năm\",\"Tháng Sáu\",\"Tháng Bảy\",\"Tháng Tám\",\"Tháng Chín\",\"Tháng Mười\",\"Tháng Mười Một\",\"Tháng Mười Hai\"],monthNamesShort:[\"Tháng 1\",\"Tháng 2\",\"Tháng 3\",\"Tháng 4\",\"Tháng 5\",\"Tháng 6\",\"Tháng 7\",\"Tháng 8\",\"Tháng 9\",\"Tháng 10\",\"Tháng 11\",\"Tháng 12\"],dayNames:[\"Chủ Nhật\",\"Thứ Hai\",\"Thứ Ba\",\"Thứ Tư\",\"Thứ Năm\",\"Thứ Sáu\",\"Thứ Bảy\"],dayNamesShort:[\"CN\",\"T2\",\"T3\",\"T4\",\"T5\",\"T6\",\"T7\"],dayNamesMin:[\"CN\",\"T2\",\"T3\",\"T4\",\"T5\",\"T6\",\"T7\"],weekHeader:\"Tu\",dateFormat:\"dd/mm/yy\",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:\"\"}),n.locale(\"vi\",{buttonText:{month:\"Tháng\",week:\"Tuần\",day:\"Ngày\",list:\"Lịch biểu\"},allDayText:\"Cả ngày\",eventLimitText:function(e){return\"+ thêm \"+e},noEventsMessage:\"Không có sự kiện để hiển thị\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"vi\",{months:\"tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12\".split(\"_\"),monthsShort:\"Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12\".split(\"_\"),monthsParseExact:!0,weekdays:\"chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy\".split(\"_\"),weekdaysShort:\"CN_T2_T3_T4_T5_T6_T7\".split(\"_\"),weekdaysMin:\"CN_T2_T3_T4_T5_T6_T7\".split(\"_\"),weekdaysParseExact:!0,meridiemParse:/sa|ch/i,isPM:function(e){return/^ch$/i.test(e)},meridiem:function(e,a,t){return e<12?t?\"sa\":\"SA\":t?\"ch\":\"CH\"},longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"DD/MM/YYYY\",LL:\"D MMMM [năm] YYYY\",LLL:\"D MMMM [năm] YYYY HH:mm\",LLLL:\"dddd, D MMMM [năm] YYYY HH:mm\",l:\"DD/M/YYYY\",ll:\"D MMM YYYY\",lll:\"D MMM YYYY HH:mm\",llll:\"ddd, D MMM YYYY HH:mm\"},calendar:{sameDay:\"[Hôm nay lúc] LT\",nextDay:\"[Ngày mai lúc] LT\",nextWeek:\"dddd [tuần tới lúc] LT\",lastDay:\"[Hôm qua lúc] LT\",lastWeek:\"dddd [tuần rồi lúc] LT\",sameElse:\"L\"},relativeTime:{future:\"%s tới\",past:\"%s trước\",s:\"vài giây\",ss:\"%d giây\",m:\"một phút\",mm:\"%d phút\",h:\"một giờ\",hh:\"%d giờ\",d:\"một ngày\",dd:\"%d ngày\",M:\"một tháng\",MM:\"%d tháng\",y:\"một năm\",yy:\"%d năm\"},dayOfMonthOrdinalParse:/\\d{1,2}/,ordinal:function(e){return e},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(212);var n=t(1);n.datepickerLocale(\"zh-cn\",\"zh-CN\",{closeText:\"关闭\",prevText:\"&#x3C;上月\",nextText:\"下月&#x3E;\",currentText:\"今天\",monthNames:[\"一月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"十一月\",\"十二月\"],monthNamesShort:[\"一月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"十一月\",\"十二月\"],dayNames:[\"星期日\",\"星期一\",\"星期二\",\"星期三\",\"星期四\",\"星期五\",\"星期六\"],dayNamesShort:[\"周日\",\"周一\",\"周二\",\"周三\",\"周四\",\"周五\",\"周六\"],dayNamesMin:[\"日\",\"一\",\"二\",\"三\",\"四\",\"五\",\"六\"],weekHeader:\"周\",dateFormat:\"yy-mm-dd\",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:\"年\"}),n.locale(\"zh-cn\",{buttonText:{month:\"月\",week:\"周\",day:\"日\",list:\"日程\"},allDayText:\"全天\",eventLimitText:function(e){return\"另外 \"+e+\" 个\"},noEventsMessage:\"没有事件显示\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"zh-cn\",{months:\"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月\".split(\"_\"),monthsShort:\"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月\".split(\"_\"),weekdays:\"星期日_星期一_星期二_星期三_星期四_星期五_星期六\".split(\"_\"),weekdaysShort:\"周日_周一_周二_周三_周四_周五_周六\".split(\"_\"),weekdaysMin:\"日_一_二_三_四_五_六\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY/MM/DD\",LL:\"YYYY年M月D日\",LLL:\"YYYY年M月D日Ah点mm分\",LLLL:\"YYYY年M月D日ddddAh点mm分\",l:\"YYYY/M/D\",ll:\"YYYY年M月D日\",lll:\"YYYY年M月D日 HH:mm\",llll:\"YYYY年M月D日dddd HH:mm\"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(e,a){return 12===e&&(e=0),\"凌晨\"===a||\"早上\"===a||\"上午\"===a?e:\"下午\"===a||\"晚上\"===a?e+12:e>=11?e:e+12},meridiem:function(e,a,t){var n=100*e+a;return n<600?\"凌晨\":n<900?\"早上\":n<1130?\"上午\":n<1230?\"中午\":n<1800?\"下午\":\"晚上\"},calendar:{sameDay:\"[今天]LT\",nextDay:\"[明天]LT\",nextWeek:\"[下]ddddLT\",lastDay:\"[昨天]LT\",lastWeek:\"[上]ddddLT\",sameElse:\"L\"},dayOfMonthOrdinalParse:/\\d{1,2}(日|月|周)/,ordinal:function(e,a){switch(a){case\"d\":case\"D\":case\"DDD\":return e+\"日\";case\"M\":return e+\"月\";case\"w\":case\"W\":return e+\"周\";default:return e}},relativeTime:{future:\"%s内\",past:\"%s前\",s:\"几秒\",ss:\"%d 秒\",m:\"1 分钟\",mm:\"%d 分钟\",h:\"1 小时\",hh:\"%d 小时\",d:\"1 天\",dd:\"%d 天\",M:\"1 个月\",MM:\"%d 个月\",y:\"1 年\",yy:\"%d 年\"},week:{dow:1,doy:4}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(214);var n=t(1);n.datepickerLocale(\"zh-hk\",\"zh-HK\",{closeText:\"關閉\",prevText:\"&#x3C;上月\",nextText:\"下月&#x3E;\",currentText:\"今天\",monthNames:[\"一月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"十一月\",\"十二月\"],monthNamesShort:[\"一月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"十一月\",\"十二月\"],dayNames:[\"星期日\",\"星期一\",\"星期二\",\"星期三\",\"星期四\",\"星期五\",\"星期六\"],dayNamesShort:[\"周日\",\"周一\",\"周二\",\"周三\",\"周四\",\"周五\",\"周六\"],dayNamesMin:[\"日\",\"一\",\"二\",\"三\",\"四\",\"五\",\"六\"],weekHeader:\"周\",dateFormat:\"yy/mm/dd\",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:\"年\"}),n.locale(\"zh-hk\",{buttonText:{month:\"月\",week:\"週\",day:\"天\",list:\"活動列表\"},allDayText:\"整天\",eventLimitText:\"顯示更多\",noEventsMessage:\"没有任何活動\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"zh-hk\",{months:\"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月\".split(\"_\"),monthsShort:\"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月\".split(\"_\"),weekdays:\"星期日_星期一_星期二_星期三_星期四_星期五_星期六\".split(\"_\"),weekdaysShort:\"週日_週一_週二_週三_週四_週五_週六\".split(\"_\"),weekdaysMin:\"日_一_二_三_四_五_六\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY/MM/DD\",LL:\"YYYY年M月D日\",LLL:\"YYYY年M月D日 HH:mm\",LLLL:\"YYYY年M月D日dddd HH:mm\",l:\"YYYY/M/D\",ll:\"YYYY年M月D日\",lll:\"YYYY年M月D日 HH:mm\",llll:\"YYYY年M月D日dddd HH:mm\"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(e,a){return 12===e&&(e=0),\"凌晨\"===a||\"早上\"===a||\"上午\"===a?e:\"中午\"===a?e>=11?e:e+12:\"下午\"===a||\"晚上\"===a?e+12:void 0},meridiem:function(e,a,t){var n=100*e+a;return n<600?\"凌晨\":n<900?\"早上\":n<1130?\"上午\":n<1230?\"中午\":n<1800?\"下午\":\"晚上\"},calendar:{sameDay:\"[今天]LT\",nextDay:\"[明天]LT\",nextWeek:\"[下]ddddLT\",lastDay:\"[昨天]LT\",lastWeek:\"[上]ddddLT\",sameElse:\"L\"},dayOfMonthOrdinalParse:/\\d{1,2}(日|月|週)/,ordinal:function(e,a){switch(a){case\"d\":case\"D\":case\"DDD\":return e+\"日\";case\"M\":return e+\"月\";case\"w\":case\"W\":return e+\"週\";default:return e}},relativeTime:{future:\"%s內\",past:\"%s前\",s:\"幾秒\",ss:\"%d 秒\",m:\"1 分鐘\",mm:\"%d 分鐘\",h:\"1 小時\",hh:\"%d 小時\",d:\"1 天\",dd:\"%d 天\",M:\"1 個月\",MM:\"%d 個月\",y:\"1 年\",yy:\"%d 年\"}})})},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0}),t(216);var n=t(1);n.datepickerLocale(\"zh-tw\",\"zh-TW\",{closeText:\"關閉\",prevText:\"&#x3C;上月\",nextText:\"下月&#x3E;\",currentText:\"今天\",monthNames:[\"一月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"十一月\",\"十二月\"],monthNamesShort:[\"一月\",\"二月\",\"三月\",\"四月\",\"五月\",\"六月\",\"七月\",\"八月\",\"九月\",\"十月\",\"十一月\",\"十二月\"],dayNames:[\"星期日\",\"星期一\",\"星期二\",\"星期三\",\"星期四\",\"星期五\",\"星期六\"],dayNamesShort:[\"周日\",\"周一\",\"周二\",\"周三\",\"周四\",\"周五\",\"周六\"],dayNamesMin:[\"日\",\"一\",\"二\",\"三\",\"四\",\"五\",\"六\"],weekHeader:\"周\",dateFormat:\"yy/mm/dd\",firstDay:1,isRTL:!1,showMonthAfterYear:!0,yearSuffix:\"年\"}),n.locale(\"zh-tw\",{buttonText:{month:\"月\",week:\"週\",day:\"天\",list:\"活動列表\"},allDayText:\"整天\",eventLimitText:\"顯示更多\",noEventsMessage:\"没有任何活動\"})},function(e,a,t){!function(e,a){a(t(0))}(0,function(e){return e.defineLocale(\"zh-tw\",{months:\"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月\".split(\"_\"),monthsShort:\"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月\".split(\"_\"),weekdays:\"星期日_星期一_星期二_星期三_星期四_星期五_星期六\".split(\"_\"),weekdaysShort:\"週日_週一_週二_週三_週四_週五_週六\".split(\"_\"),weekdaysMin:\"日_一_二_三_四_五_六\".split(\"_\"),longDateFormat:{LT:\"HH:mm\",LTS:\"HH:mm:ss\",L:\"YYYY/MM/DD\",LL:\"YYYY年M月D日\",LLL:\"YYYY年M月D日 HH:mm\",LLLL:\"YYYY年M月D日dddd HH:mm\",l:\"YYYY/M/D\",ll:\"YYYY年M月D日\",lll:\"YYYY年M月D日 HH:mm\",llll:\"YYYY年M月D日dddd HH:mm\"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(e,a){return 12===e&&(e=0),\"凌晨\"===a||\"早上\"===a||\"上午\"===a?e:\"中午\"===a?e>=11?e:e+12:\"下午\"===a||\"晚上\"===a?e+12:void 0},meridiem:function(e,a,t){var n=100*e+a;return n<600?\"凌晨\":n<900?\"早上\":n<1130?\"上午\":n<1230?\"中午\":n<1800?\"下午\":\"晚上\"},calendar:{sameDay:\"[今天] LT\",nextDay:\"[明天] LT\",nextWeek:\"[下]dddd LT\",lastDay:\"[昨天] LT\",lastWeek:\"[上]dddd LT\",sameElse:\"L\"},dayOfMonthOrdinalParse:/\\d{1,2}(日|月|週)/,ordinal:function(e,a){switch(a){case\"d\":case\"D\":case\"DDD\":return e+\"日\";case\"M\":return e+\"月\";case\"w\":case\"W\":return e+\"週\";default:return e}},relativeTime:{future:\"%s內\",past:\"%s前\",s:\"幾秒\",ss:\"%d 秒\",m:\"1 分鐘\",mm:\"%d 分鐘\",h:\"1 小時\",hh:\"%d 小時\",d:\"1 天\",dd:\"%d 天\",M:\"1 個月\",MM:\"%d 個月\",y:\"1 年\",yy:\"%d 年\"}})})},,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,function(e,a,t){t(71),t(73),t(75),t(77),t(79),t(81),t(83),t(85),t(87),t(89),t(91),t(93),t(95),t(97),t(99),t(101),t(103),t(105),t(107),t(109),t(111),t(113),t(115),t(117),t(119),t(121),t(123),t(125),t(127),t(129),t(131),t(133),t(135),t(137),t(139),t(141),t(143),t(145),t(147),t(149),t(151),t(153),t(155),t(157),t(159),t(161),t(163),t(165),t(167),t(169),t(171),t(173),t(175),t(177),t(179),t(181),t(183),t(185),t(187),t(189),t(191),t(193),t(195),t(197),t(199),t(201),t(203),t(205),t(207),t(209),t(211),t(213),t(215),e.exports=t(439)},function(e,a,t){Object.defineProperty(a,\"__esModule\",{value:!0});var n=t(0),r=t(1);n.locale(\"en\"),r.locale(\"en\"),window.jQuery.datepicker&&window.jQuery.datepicker.setDefaults(window.jQuery.datepicker.regional[\"\"])}])});"
  },
  {
    "path": "public/backend/vendors/js/extensions/transition.js",
    "content": ";(function(){\n  /* ========================================================================\n   * Bootstrap: transition.js v3.0.2\n   * http://getbootstrap.com/javascript/#transitions\n   * ========================================================================\n   * Copyright 2013 Twitter, Inc.\n   *\n   * Licensed under the Apache License, Version 2.0 (the \"License\");\n   * you may not use this file except in compliance with the License.\n   * You may obtain a copy of the License at\n   *\n   * http://www.apache.org/licenses/LICENSE-2.0\n   *\n   * Unless required by applicable law or agreed to in writing, software\n   * distributed under the License is distributed on an \"AS IS\" BASIS,\n   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   * See the License for the specific language governing permissions and\n   * limitations under the License.\n   * ======================================================================== */\n  \n  \n  +function ($) { \"use strict\";\n  \n    // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)\n    // ============================================================\n  \n    function transitionEnd() {\n      var el = document.createElement('bootstrap')\n  \n      var transEndEventNames = {\n        'WebkitTransition' : 'webkitTransitionEnd'\n      , 'MozTransition'    : 'transitionend'\n      , 'OTransition'      : 'oTransitionEnd otransitionend'\n      , 'transition'       : 'transitionend'\n      }\n  \n      for (var name in transEndEventNames) {\n        if (el.style[name] !== undefined) {\n          return { end: transEndEventNames[name] }\n        }\n      }\n    }\n  \n    // http://blog.alexmaccaw.com/css-transitions\n    $.fn.emulateTransitionEnd = function (duration) {\n      var called = false, $el = this\n      $(this).one($.support.transition.end, function () { called = true })\n      var callback = function () { if (!called) $($el).trigger($.support.transition.end) }\n      setTimeout(callback, duration)\n      return this\n    }\n  \n    $(function () {\n      $.support.transition = transitionEnd()\n    })\n  \n  }(jQuery);\n  \n})();"
  },
  {
    "path": "public/backend/vendors/js/extensions/wNumb.js",
    "content": "(function (factory) {\n\n    if ( typeof define === 'function' && define.amd ) {\n\n        // AMD. Register as an anonymous module.\n        define([], factory);\n\n    } else if ( typeof exports === 'object' ) {\n\n        // Node/CommonJS\n        module.exports = factory();\n\n    } else {\n\n        // Browser globals\n        window.wNumb = factory();\n    }\n\n}(function(){\n\n\t'use strict';\n\nvar\n/** @const */ FormatOptions = [\n\t'decimals',\n\t'thousand',\n\t'mark',\n\t'prefix',\n\t'postfix',\n\t'encoder',\n\t'decoder',\n\t'negativeBefore',\n\t'negative',\n\t'edit',\n\t'undo'\n];\n\n// General\n\n\t// Reverse a string\n\tfunction strReverse ( a ) {\n\t\treturn a.split('').reverse().join('');\n\t}\n\n\t// Check if a string starts with a specified prefix.\n\tfunction strStartsWith ( input, match ) {\n\t\treturn input.substring(0, match.length) === match;\n\t}\n\n\t// Check is a string ends in a specified postfix.\n\tfunction strEndsWith ( input, match ) {\n\t\treturn input.slice(-1 * match.length) === match;\n\t}\n\n\t// Throw an error if formatting options are incompatible.\n\tfunction throwEqualError( F, a, b ) {\n\t\tif ( (F[a] || F[b]) && (F[a] === F[b]) ) {\n\t\t\tthrow new Error(a);\n\t\t}\n\t}\n\n\t// Check if a number is finite and not NaN\n\tfunction isValidNumber ( input ) {\n\t\treturn typeof input === 'number' && isFinite( input );\n\t}\n\n\t// Provide rounding-accurate toFixed method.\n\tfunction toFixed ( value, decimals ) {\n\t\tvar scale = Math.pow(10, decimals);\n\t\treturn ( Math.round(value * scale) / scale).toFixed( decimals );\n\t}\n\n\n// Formatting\n\n\t// Accept a number as input, output formatted string.\n\tfunction formatTo ( decimals, thousand, mark, prefix, postfix, encoder, decoder, negativeBefore, negative, edit, undo, input ) {\n\n\t\tvar originalInput = input, inputIsNegative, inputPieces, inputBase, inputDecimals = '', output = '';\n\n\t\t// Apply user encoder to the input.\n\t\t// Expected outcome: number.\n\t\tif ( encoder ) {\n\t\t\tinput = encoder(input);\n\t\t}\n\n\t\t// Stop if no valid number was provided, the number is infinite or NaN.\n\t\tif ( !isValidNumber(input) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Rounding away decimals might cause a value of -0\n\t\t// when using very small ranges. Remove those cases.\n\t\tif ( decimals !== false && parseFloat(input.toFixed(decimals)) === 0 ) {\n\t\t\tinput = 0;\n\t\t}\n\n\t\t// Formatting is done on absolute numbers,\n\t\t// decorated by an optional negative symbol.\n\t\tif ( input < 0 ) {\n\t\t\tinputIsNegative = true;\n\t\t\tinput = Math.abs(input);\n\t\t}\n\n\t\t// Reduce the number of decimals to the specified option.\n\t\tif ( decimals !== false ) {\n\t\t\tinput = toFixed( input, decimals );\n\t\t}\n\n\t\t// Transform the number into a string, so it can be split.\n\t\tinput = input.toString();\n\n\t\t// Break the number on the decimal separator.\n\t\tif ( input.indexOf('.') !== -1 ) {\n\t\t\tinputPieces = input.split('.');\n\n\t\t\tinputBase = inputPieces[0];\n\n\t\t\tif ( mark ) {\n\t\t\t\tinputDecimals = mark + inputPieces[1];\n\t\t\t}\n\n\t\t} else {\n\n\t\t// If it isn't split, the entire number will do.\n\t\t\tinputBase = input;\n\t\t}\n\n\t\t// Group numbers in sets of three.\n\t\tif ( thousand ) {\n\t\t\tinputBase = strReverse(inputBase).match(/.{1,3}/g);\n\t\t\tinputBase = strReverse(inputBase.join( strReverse( thousand ) ));\n\t\t}\n\n\t\t// If the number is negative, prefix with negation symbol.\n\t\tif ( inputIsNegative && negativeBefore ) {\n\t\t\toutput += negativeBefore;\n\t\t}\n\n\t\t// Prefix the number\n\t\tif ( prefix ) {\n\t\t\toutput += prefix;\n\t\t}\n\n\t\t// Normal negative option comes after the prefix. Defaults to '-'.\n\t\tif ( inputIsNegative && negative ) {\n\t\t\toutput += negative;\n\t\t}\n\n\t\t// Append the actual number.\n\t\toutput += inputBase;\n\t\toutput += inputDecimals;\n\n\t\t// Apply the postfix.\n\t\tif ( postfix ) {\n\t\t\toutput += postfix;\n\t\t}\n\n\t\t// Run the output through a user-specified post-formatter.\n\t\tif ( edit ) {\n\t\t\toutput = edit ( output, originalInput );\n\t\t}\n\n\t\t// All done.\n\t\treturn output;\n\t}\n\n\t// Accept a sting as input, output decoded number.\n\tfunction formatFrom ( decimals, thousand, mark, prefix, postfix, encoder, decoder, negativeBefore, negative, edit, undo, input ) {\n\n\t\tvar originalInput = input, inputIsNegative, output = '';\n\n\t\t// User defined pre-decoder. Result must be a non empty string.\n\t\tif ( undo ) {\n\t\t\tinput = undo(input);\n\t\t}\n\n\t\t// Test the input. Can't be empty.\n\t\tif ( !input || typeof input !== 'string' ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// If the string starts with the negativeBefore value: remove it.\n\t\t// Remember is was there, the number is negative.\n\t\tif ( negativeBefore && strStartsWith(input, negativeBefore) ) {\n\t\t\tinput = input.replace(negativeBefore, '');\n\t\t\tinputIsNegative = true;\n\t\t}\n\n\t\t// Repeat the same procedure for the prefix.\n\t\tif ( prefix && strStartsWith(input, prefix) ) {\n\t\t\tinput = input.replace(prefix, '');\n\t\t}\n\n\t\t// And again for negative.\n\t\tif ( negative && strStartsWith(input, negative) ) {\n\t\t\tinput = input.replace(negative, '');\n\t\t\tinputIsNegative = true;\n\t\t}\n\n\t\t// Remove the postfix.\n\t\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/slice\n\t\tif ( postfix && strEndsWith(input, postfix) ) {\n\t\t\tinput = input.slice(0, -1 * postfix.length);\n\t\t}\n\n\t\t// Remove the thousand grouping.\n\t\tif ( thousand ) {\n\t\t\tinput = input.split(thousand).join('');\n\t\t}\n\n\t\t// Set the decimal separator back to period.\n\t\tif ( mark ) {\n\t\t\tinput = input.replace(mark, '.');\n\t\t}\n\n\t\t// Prepend the negative symbol.\n\t\tif ( inputIsNegative ) {\n\t\t\toutput += '-';\n\t\t}\n\n\t\t// Add the number\n\t\toutput += input;\n\n\t\t// Trim all non-numeric characters (allow '.' and '-');\n\t\toutput = output.replace(/[^0-9\\.\\-.]/g, '');\n\n\t\t// The value contains no parse-able number.\n\t\tif ( output === '' ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Covert to number.\n\t\toutput = Number(output);\n\n\t\t// Run the user-specified post-decoder.\n\t\tif ( decoder ) {\n\t\t\toutput = decoder(output);\n\t\t}\n\n\t\t// Check is the output is valid, otherwise: return false.\n\t\tif ( !isValidNumber(output) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn output;\n\t}\n\n\n// Framework\n\n\t// Validate formatting options\n\tfunction validate ( inputOptions ) {\n\n\t\tvar i, optionName, optionValue,\n\t\t\tfilteredOptions = {};\n\n\t\tfor ( i = 0; i < FormatOptions.length; i+=1 ) {\n\n\t\t\toptionName = FormatOptions[i];\n\t\t\toptionValue = inputOptions[optionName];\n\n\t\t\tif ( optionValue === undefined ) {\n\n\t\t\t\t// Only default if negativeBefore isn't set.\n\t\t\t\tif ( optionName === 'negative' && !filteredOptions.negativeBefore ) {\n\t\t\t\t\tfilteredOptions[optionName] = '-';\n\t\t\t\t// Don't set a default for mark when 'thousand' is set.\n\t\t\t\t} else if ( optionName === 'mark' && filteredOptions.thousand !== '.' ) {\n\t\t\t\t\tfilteredOptions[optionName] = '.';\n\t\t\t\t} else {\n\t\t\t\t\tfilteredOptions[optionName] = false;\n\t\t\t\t}\n\n\t\t\t// Floating points in JS are stable up to 7 decimals.\n\t\t\t} else if ( optionName === 'decimals' ) {\n\t\t\t\tif ( optionValue >= 0 && optionValue < 8 ) {\n\t\t\t\t\tfilteredOptions[optionName] = optionValue;\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(optionName);\n\t\t\t\t}\n\n\t\t\t// These options, when provided, must be functions.\n\t\t\t} else if ( optionName === 'encoder' || optionName === 'decoder' || optionName === 'edit' || optionName === 'undo' ) {\n\t\t\t\tif ( typeof optionValue === 'function' ) {\n\t\t\t\t\tfilteredOptions[optionName] = optionValue;\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(optionName);\n\t\t\t\t}\n\n\t\t\t// Other options are strings.\n\t\t\t} else {\n\n\t\t\t\tif ( typeof optionValue === 'string' ) {\n\t\t\t\t\tfilteredOptions[optionName] = optionValue;\n\t\t\t\t} else {\n\t\t\t\t\tthrow new Error(optionName);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Some values can't be extracted from a\n\t\t// string if certain combinations are present.\n\t\tthrowEqualError(filteredOptions, 'mark', 'thousand');\n\t\tthrowEqualError(filteredOptions, 'prefix', 'negative');\n\t\tthrowEqualError(filteredOptions, 'prefix', 'negativeBefore');\n\n\t\treturn filteredOptions;\n\t}\n\n\t// Pass all options as function arguments\n\tfunction passAll ( options, method, input ) {\n\t\tvar i, args = [];\n\n\t\t// Add all options in order of FormatOptions\n\t\tfor ( i = 0; i < FormatOptions.length; i+=1 ) {\n\t\t\targs.push(options[FormatOptions[i]]);\n\t\t}\n\n\t\t// Append the input, then call the method, presenting all\n\t\t// options as arguments.\n\t\targs.push(input);\n\t\treturn method.apply('', args);\n\t}\n\n\t/** @constructor */\n\tfunction wNumb ( options ) {\n\n\t\tif ( !(this instanceof wNumb) ) {\n\t\t\treturn new wNumb ( options );\n\t\t}\n\n\t\tif ( typeof options !== \"object\" ) {\n\t\t\treturn;\n\t\t}\n\n\t\toptions = validate(options);\n\n\t\t// Call 'formatTo' with proper arguments.\n\t\tthis.to = function ( input ) {\n\t\t\treturn passAll(options, formatTo, input);\n\t\t};\n\n\t\t// Call 'formatFrom' with proper arguments.\n\t\tthis.from = function ( input ) {\n\t\t\treturn passAll(options, formatFrom, input);\n\t\t};\n\t}\n\n\t/** @export */\n\treturn wNumb;\n\n}));\n"
  },
  {
    "path": "public/backend/vendors/js/forms/extended/maxlength/bootstrap-maxlength.js",
    "content": "(function ($) {\n  'use strict';\n  /**\n   * We need an event when the elements are destroyed\n   * because if an input is removed, we have to remove the\n   * maxlength object associated (if any).\n   * From:\n   * http://stackoverflow.com/questions/2200494/jquery-trigger-event-when-an-element-is-removed-from-the-dom\n   */\n  if (!$.event.special.destroyed) {\n    $.event.special.destroyed = {\n      remove: function (o) {\n        if (o.handler) {\n          o.handler();\n        }\n      }\n    };\n  }\n\n\n  $.fn.extend({\n    maxlength: function (options, callback) {\n      var documentBody = $('body'),\n        defaults = {\n          showOnReady: false, // true to always show when indicator is ready\n          alwaysShow: false, // if true the indicator it's always shown.\n          threshold: 10, // Represents how many chars left are needed to show up the counter\n          warningClass: 'label label-success',\n          limitReachedClass: 'label label-important label-danger',\n          separator: ' / ',\n          preText: '',\n          postText: '',\n          showMaxLength: true,\n          placement: 'bottom',\n          message: null, // an alternative way to provide the message text\n          showCharsTyped: true, // show the number of characters typed and not the number of characters remaining\n          validate: false, // if the browser doesn't support the maxlength attribute, attempt to type more than\n          // the indicated chars, will be prevented.\n          utf8: false, // counts using bytesize rather than length. eg: '£' is counted as 2 characters.\n          appendToParent: false, // append the indicator to the input field's parent instead of body\n          twoCharLinebreak: true,  // count linebreak as 2 characters to match IE/Chrome textarea validation. As well as DB storage.\n          customMaxAttribute: null,  // null = use maxlength attribute and browser functionality, string = use specified attribute instead.\n          allowOverMax: false\n          // Form submit validation is handled on your own.  when maxlength has been exceeded 'overmax' class added to element\n        };\n\n      if ($.isFunction(options) && !callback) {\n        callback = options;\n        options = {};\n      }\n      options = $.extend(defaults, options);\n\n\n      /**\n      * Return the byte count of the specified character in UTF8 encoding.\n      * Note: This won't cover UTF-8 characters that are 4 bytes long.\n      *\n      * @param input\n      * @return {number}\n      */\n      function utf8CharByteCount(character) {\n        var c = character.charCodeAt();\n        // Not c then 0, else c < 128 then 1, else c < 2048 then 2, else 3\n        return !c ? 0 : c < 128 ? 1 : c < 2048 ? 2 : 3;\n      }\n\n      /**\n      * Return the length of the specified input in UTF8 encoding.\n      *\n      * @param input\n      * @return {number}\n      */\n      function utf8Length(string) {\n        return string.split(\"\")\n          .map(utf8CharByteCount)\n          // Prevent reduce from throwing an error if the string is empty.\n          .concat(0)\n          .reduce(function(sum, val) { return sum + val; });\n      }\n\n      /**\n      * Return the length of the specified input.\n      *\n      * @param input\n      * @return {number}\n      */\n      function inputLength(input) {\n        var text = input.val();\n\n        if (options.twoCharLinebreak) {\n          // Count all line breaks as 2 characters\n          text = text.replace(/\\r(?!\\n)|\\n(?!\\r)/g, '\\r\\n');\n        } else {\n          // Remove all double-character (\\r\\n) linebreaks, so they're counted only once.\n          text = text.replace(new RegExp('\\r?\\n', 'g'), '\\n');\n        }\n\n        var currentLength = 0;\n\n        if (options.utf8) {\n          currentLength = utf8Length(text);\n        } else {\n          currentLength = text.length;\n        }\n        return currentLength;\n      }\n\n      /**\n      * Truncate the text of the specified input.\n      *\n      * @param input\n      * @param limit\n      */\n      function truncateChars(input, maxlength) {\n        var text = input.val();\n\n        if (options.twoCharLinebreak) {\n          text = text.replace(/\\r(?!\\n)|\\n(?!\\r)/g, '\\r\\n');\n\n          if (text[text.length - 1] === '\\n') {\n            maxlength -= text.length % 2;\n          }\n        }\n\n        if (options.utf8) {\n          var indexedSize = text.split(\"\").map(utf8CharByteCount);\n          for (\n            var removedBytes = 0,\n                bytesPastMax = utf8Length(text) - maxlength\n            ;removedBytes < bytesPastMax\n            ;removedBytes += indexedSize.pop()\n          );\n          maxlength -= (maxlength - indexedSize.length);\n        }\n\n        input.val(text.substr(0, maxlength));\n      }\n\n      /**\n       * Return true if the indicator should be showing up.\n       *\n       * @param input\n       * @param threshold\n       * @param maxlength\n       * @return {number}\n       */\n      function charsLeftThreshold(input, threshold, maxlength) {\n        var output = true;\n        if (!options.alwaysShow && (maxlength - inputLength(input) > threshold)) {\n          output = false;\n        }\n        return output;\n      }\n\n      /**\n       * Returns how many chars are left to complete the fill up of the form.\n       *\n       * @param input\n       * @param maxlength\n       * @return {number}\n       */\n      function remainingChars(input, maxlength) {\n        var length = maxlength - inputLength(input);\n        return length;\n      }\n\n      /**\n       * When called displays the indicator.\n       *\n       * @param indicator\n       */\n      function showRemaining(currentInput, indicator) {\n        indicator.css({\n          display: 'block'\n        });\n        currentInput.trigger('maxlength.shown');\n      }\n\n      /**\n       * When called shows the indicator.\n       *\n       * @param indicator\n       */\n      function hideRemaining(currentInput, indicator) {\n\n        if (options.alwaysShow) {\n          return;\n        }\n\n        indicator.css({\n          display: 'none'\n        });\n        currentInput.trigger('maxlength.hidden');\n      }\n\n      /**\n      * This function updates the value in the indicator\n      *\n      * @param maxLengthThisInput\n      * @param typedChars\n      * @return String\n      */\n      function updateMaxLengthHTML(currentInputText, maxLengthThisInput, typedChars) {\n        var output = '';\n        if (options.message) {\n          if (typeof options.message === 'function') {\n            output = options.message(currentInputText, maxLengthThisInput);\n          } else {\n            output = options.message.replace('%charsTyped%', typedChars)\n              .replace('%charsRemaining%', maxLengthThisInput - typedChars)\n              .replace('%charsTotal%', maxLengthThisInput);\n          }\n        } else {\n          if (options.preText) {\n            output += options.preText;\n          }\n          if (!options.showCharsTyped) {\n            output += maxLengthThisInput - typedChars;\n          }\n          else {\n            output += typedChars;\n          }\n          if (options.showMaxLength) {\n            output += options.separator + maxLengthThisInput;\n          }\n          if (options.postText) {\n            output += options.postText;\n          }\n        }\n        return output;\n      }\n\n      /**\n       * This function updates the value of the counter in the indicator.\n       * Wants as parameters: the number of remaining chars, the element currently managed,\n       * the maxLength for the current input and the indicator generated for it.\n       *\n       * @param remaining\n       * @param currentInput\n       * @param maxLengthCurrentInput\n       * @param maxLengthIndicator\n       */\n      function manageRemainingVisibility(remaining, currentInput, maxLengthCurrentInput, maxLengthIndicator) {\n        if (maxLengthIndicator) {\n          maxLengthIndicator.html(updateMaxLengthHTML(currentInput.val(), maxLengthCurrentInput, (maxLengthCurrentInput - remaining)));\n\n          if (remaining > 0) {\n            if (charsLeftThreshold(currentInput, options.threshold, maxLengthCurrentInput)) {\n              showRemaining(currentInput, maxLengthIndicator.removeClass(options.limitReachedClass).addClass(options.warningClass));\n            } else {\n              hideRemaining(currentInput, maxLengthIndicator);\n            }\n          } else {\n            showRemaining(currentInput, maxLengthIndicator.removeClass(options.warningClass).addClass(options.limitReachedClass));\n          }\n        }\n\n        if (options.customMaxAttribute) {\n          // class to use for form validation on custom maxlength attribute\n          if (remaining < 0) {\n            currentInput.addClass('overmax');\n          } else {\n            currentInput.removeClass('overmax');\n          }\n        }\n      }\n\n      /**\n       * This function returns an object containing all the\n       * informations about the position of the current input\n       *\n       * @param currentInput\n       * @return object {bottom height left right top width}\n       *\n       */\n      function getPosition(currentInput) {\n        var el = currentInput[0];\n        return $.extend({}, (typeof el.getBoundingClientRect === 'function') ? el.getBoundingClientRect() : {\n          width: el.offsetWidth,\n          height: el.offsetHeight\n        }, currentInput.offset());\n      }\n\n      /**\n       * This function places the maxLengthIndicator based on placement config object.\n       *\n       * @param {object} placement\n       * @param {$} maxLengthIndicator\n       * @return null\n       *\n       */\n      function placeWithCSS(placement, maxLengthIndicator) {\n        if (!placement || !maxLengthIndicator){\n          return;\n        }\n\n        var POSITION_KEYS = [\n          'top',\n          'bottom',\n          'left',\n          'right',\n          'position'\n        ];\n\n        var cssPos = {};\n\n        // filter css properties to position\n        $.each(POSITION_KEYS, function (i, key) {\n          var val = options.placement[key];\n          if (typeof val !== 'undefined'){\n            cssPos[key] = val;\n          }\n        });\n\n        maxLengthIndicator.css(cssPos);\n\n        return;\n      }\n\n\n      /**\n       * This function places the maxLengthIndicator at the\n       * top / bottom / left / right of the currentInput\n       *\n       * @param currentInput\n       * @param maxLengthIndicator\n       * @return null\n       *\n       */\n      function place(currentInput, maxLengthIndicator) {\n        var pos = getPosition(currentInput);\n\n        // Supports custom placement handler\n        if ($.type(options.placement) === 'function'){\n          options.placement(currentInput, maxLengthIndicator, pos);\n          return;\n        }\n\n        // Supports custom placement via css positional properties\n        if ($.isPlainObject(options.placement)){\n          placeWithCSS(options.placement, maxLengthIndicator);\n          return;\n        }\n\n        var inputOuter = currentInput.outerWidth(),\n          outerWidth = maxLengthIndicator.outerWidth(),\n          actualWidth = maxLengthIndicator.width(),\n          actualHeight = maxLengthIndicator.height();\n\n        // get the right position if the indicator is appended to the input's parent\n        if (options.appendToParent) {\n          pos.top -= currentInput.parent().offset().top;\n          pos.left -= currentInput.parent().offset().left;\n        }\n\n        switch (options.placement) {\n          case 'bottom':\n            maxLengthIndicator.css({ top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 });\n            break;\n          case 'top':\n            maxLengthIndicator.css({ top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 });\n            break;\n          case 'left':\n            maxLengthIndicator.css({ top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth });\n            break;\n          case 'right':\n            maxLengthIndicator.css({ top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width });\n            break;\n          case 'bottom-right':\n            maxLengthIndicator.css({ top: pos.top + pos.height, left: pos.left + pos.width });\n            break;\n          case 'top-right':\n            maxLengthIndicator.css({ top: pos.top - actualHeight, left: pos.left + inputOuter });\n            break;\n          case 'top-left':\n            maxLengthIndicator.css({ top: pos.top - actualHeight, left: pos.left - outerWidth });\n            break;\n          case 'bottom-left':\n            maxLengthIndicator.css({ top: pos.top + currentInput.outerHeight(), left: pos.left - outerWidth });\n            break;\n          case 'centered-right':\n            maxLengthIndicator.css({ top: pos.top + (actualHeight / 2), left: pos.left + inputOuter - outerWidth - 3 });\n            break;\n\n            // Some more options for placements\n          case 'bottom-right-inside':\n            maxLengthIndicator.css({ top: pos.top + pos.height, left: pos.left + pos.width - outerWidth });\n            break;\n          case 'top-right-inside':\n            maxLengthIndicator.css({ top: pos.top - actualHeight, left: pos.left + inputOuter - outerWidth });\n            break;\n          case 'top-left-inside':\n            maxLengthIndicator.css({ top: pos.top - actualHeight, left: pos.left });\n            break;\n          case 'bottom-left-inside':\n            maxLengthIndicator.css({ top: pos.top + currentInput.outerHeight(), left: pos.left });\n            break;\n        }\n      }\n\n      /**\n       * This function returns true if the indicator position needs to\n       * be recalculated when the currentInput changes\n       *\n       * @return {boolean}\n       *\n       */\n      function isPlacementMutable() {\n        return options.placement === 'bottom-right-inside' || options.placement === 'top-right-inside' || typeof options.placement === 'function' || (options.message && typeof options.message === 'function');\n      }\n\n      /**\n       * This function retrieves the maximum length of currentInput\n       *\n       * @param currentInput\n       * @return {number}\n       *\n       */\n      function getMaxLength(currentInput) {\n        var max = currentInput.attr('maxlength') || options.customMaxAttribute;\n\n        if (options.customMaxAttribute && !options.allowOverMax) {\n          var custom = currentInput.attr(options.customMaxAttribute);\n          if (!max || custom < max) {\n            max = custom;\n          }\n        }\n\n        if (!max) {\n          max = currentInput.attr('size');\n        }\n        return max;\n      }\n\n      return this.each(function () {\n\n        var currentInput = $(this),\n          maxLengthCurrentInput,\n          maxLengthIndicator;\n\n        $(window).resize(function () {\n          if (maxLengthIndicator) {\n            place(currentInput, maxLengthIndicator);\n          }\n        });\n\n        function firstInit() {\n          var maxlengthContent = updateMaxLengthHTML(currentInput.val(), maxLengthCurrentInput, '0');\n          maxLengthCurrentInput = getMaxLength(currentInput);\n\n          if (!maxLengthIndicator) {\n            maxLengthIndicator = $('<span class=\"bootstrap-maxlength\"></span>').css({\n              display: 'none',\n              position: 'absolute',\n              whiteSpace: 'nowrap',\n              zIndex: 1099\n            }).html(maxlengthContent);\n          }\n\n          // We need to detect resizes if we are dealing with a textarea:\n          if (currentInput.is('textarea')) {\n            currentInput.data('maxlenghtsizex', currentInput.outerWidth());\n            currentInput.data('maxlenghtsizey', currentInput.outerHeight());\n\n            currentInput.mouseup(function () {\n              if (currentInput.outerWidth() !== currentInput.data('maxlenghtsizex') || currentInput.outerHeight() !== currentInput.data('maxlenghtsizey')) {\n                place(currentInput, maxLengthIndicator);\n              }\n\n              currentInput.data('maxlenghtsizex', currentInput.outerWidth());\n              currentInput.data('maxlenghtsizey', currentInput.outerHeight());\n            });\n          }\n\n          if (options.appendToParent) {\n            currentInput.parent().append(maxLengthIndicator);\n            currentInput.parent().css('position', 'relative');\n          } else {\n            documentBody.append(maxLengthIndicator);\n          }\n\n          var remaining = remainingChars(currentInput, getMaxLength(currentInput));\n          manageRemainingVisibility(remaining, currentInput, maxLengthCurrentInput, maxLengthIndicator);\n          place(currentInput, maxLengthIndicator);\n        }\n\n        if (options.showOnReady) {\n          currentInput.ready(function () {\n            firstInit();\n          });\n        } else {\n          currentInput.focus(function () {\n            firstInit();\n          });\n        }\n\n        currentInput.on('maxlength.reposition', function () {\n          place(currentInput, maxLengthIndicator);\n        });\n\n\n        currentInput.on('destroyed', function () {\n          if (maxLengthIndicator) {\n            maxLengthIndicator.remove();\n          }\n        });\n\n        currentInput.on('blur', function () {\n          if (maxLengthIndicator && !options.showOnReady) {\n            maxLengthIndicator.remove();\n          }\n        });\n\n        currentInput.on('input', function () {\n          var maxlength = getMaxLength(currentInput),\n            remaining = remainingChars(currentInput, maxlength),\n            output = true;\n\n          if (options.validate && remaining < 0) {\n            truncateChars(currentInput, maxlength);\n            output = false;\n          } else {\n            manageRemainingVisibility(remaining, currentInput, maxLengthCurrentInput, maxLengthIndicator);\n          }\n\n          if (isPlacementMutable()) {\n            place(currentInput, maxLengthIndicator);\n          }\n\n          return output;\n        });\n      });\n    }\n  });\n}(jQuery));"
  },
  {
    "path": "public/backend/vendors/js/forms/extended/typeahead/handlebars.js",
    "content": "/*!\n\n handlebars v1.2.0\n\nCopyright (C) 2011 by Yehuda Katz\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n@license\n*/\nvar Handlebars = (function() {\n// handlebars/safe-string.js\nvar __module4__ = (function() {\n  \"use strict\";\n  var __exports__;\n  // Build out our basic SafeString type\n  function SafeString(string) {\n    this.string = string;\n  }\n\n  SafeString.prototype.toString = function() {\n    return \"\" + this.string;\n  };\n\n  __exports__ = SafeString;\n  return __exports__;\n})();\n\n// handlebars/utils.js\nvar __module3__ = (function(__dependency1__) {\n  \"use strict\";\n  var __exports__ = {};\n  /*jshint -W004 */\n  var SafeString = __dependency1__;\n\n  var escape = {\n    \"&\": \"&amp;\",\n    \"<\": \"&lt;\",\n    \">\": \"&gt;\",\n    '\"': \"&quot;\",\n    \"'\": \"&#x27;\",\n    \"`\": \"&#x60;\"\n  };\n\n  var badChars = /[&<>\"'`]/g;\n  var possible = /[&<>\"'`]/;\n\n  function escapeChar(chr) {\n    return escape[chr] || \"&amp;\";\n  }\n\n  function extend(obj, value) {\n    for(var key in value) {\n      if(Object.prototype.hasOwnProperty.call(value, key)) {\n        obj[key] = value[key];\n      }\n    }\n  }\n\n  __exports__.extend = extend;var toString = Object.prototype.toString;\n  __exports__.toString = toString;\n  // Sourced from lodash\n  // https://github.com/bestiejs/lodash/blob/master/LICENSE.txt\n  var isFunction = function(value) {\n    return typeof value === 'function';\n  };\n  // fallback for older versions of Chrome and Safari\n  if (isFunction(/x/)) {\n    isFunction = function(value) {\n      return typeof value === 'function' && toString.call(value) === '[object Function]';\n    };\n  }\n  var isFunction;\n  __exports__.isFunction = isFunction;\n  var isArray = Array.isArray || function(value) {\n    return (value && typeof value === 'object') ? toString.call(value) === '[object Array]' : false;\n  };\n  __exports__.isArray = isArray;\n\n  function escapeExpression(string) {\n    // don't escape SafeStrings, since they're already safe\n    if (string instanceof SafeString) {\n      return string.toString();\n    } else if (!string && string !== 0) {\n      return \"\";\n    }\n\n    // Force a string conversion as this will be done by the append regardless and\n    // the regex test will do this transparently behind the scenes, causing issues if\n    // an object's to string has escaped characters in it.\n    string = \"\" + string;\n\n    if(!possible.test(string)) { return string; }\n    return string.replace(badChars, escapeChar);\n  }\n\n  __exports__.escapeExpression = escapeExpression;function isEmpty(value) {\n    if (!value && value !== 0) {\n      return true;\n    } else if (isArray(value) && value.length === 0) {\n      return true;\n    } else {\n      return false;\n    }\n  }\n\n  __exports__.isEmpty = isEmpty;\n  return __exports__;\n})(__module4__);\n\n// handlebars/exception.js\nvar __module5__ = (function() {\n  \"use strict\";\n  var __exports__;\n\n  var errorProps = ['description', 'fileName', 'lineNumber', 'message', 'name', 'number', 'stack'];\n\n  function Exception(/* message */) {\n    var tmp = Error.prototype.constructor.apply(this, arguments);\n\n    // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.\n    for (var idx = 0; idx < errorProps.length; idx++) {\n      this[errorProps[idx]] = tmp[errorProps[idx]];\n    }\n  }\n\n  Exception.prototype = new Error();\n\n  __exports__ = Exception;\n  return __exports__;\n})();\n\n// handlebars/base.js\nvar __module2__ = (function(__dependency1__, __dependency2__) {\n  \"use strict\";\n  var __exports__ = {};\n  var Utils = __dependency1__;\n  var Exception = __dependency2__;\n\n  var VERSION = \"1.2.0\";\n  __exports__.VERSION = VERSION;var COMPILER_REVISION = 4;\n  __exports__.COMPILER_REVISION = COMPILER_REVISION;\n  var REVISION_CHANGES = {\n    1: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it\n    2: '== 1.0.0-rc.3',\n    3: '== 1.0.0-rc.4',\n    4: '>= 1.0.0'\n  };\n  __exports__.REVISION_CHANGES = REVISION_CHANGES;\n  var isArray = Utils.isArray,\n      isFunction = Utils.isFunction,\n      toString = Utils.toString,\n      objectType = '[object Object]';\n\n  function HandlebarsEnvironment(helpers, partials) {\n    this.helpers = helpers || {};\n    this.partials = partials || {};\n\n    registerDefaultHelpers(this);\n  }\n\n  __exports__.HandlebarsEnvironment = HandlebarsEnvironment;HandlebarsEnvironment.prototype = {\n    constructor: HandlebarsEnvironment,\n\n    logger: logger,\n    log: log,\n\n    registerHelper: function(name, fn, inverse) {\n      if (toString.call(name) === objectType) {\n        if (inverse || fn) { throw new Exception('Arg not supported with multiple helpers'); }\n        Utils.extend(this.helpers, name);\n      } else {\n        if (inverse) { fn.not = inverse; }\n        this.helpers[name] = fn;\n      }\n    },\n\n    registerPartial: function(name, str) {\n      if (toString.call(name) === objectType) {\n        Utils.extend(this.partials,  name);\n      } else {\n        this.partials[name] = str;\n      }\n    }\n  };\n\n  function registerDefaultHelpers(instance) {\n    instance.registerHelper('helperMissing', function(arg) {\n      if(arguments.length === 2) {\n        return undefined;\n      } else {\n        throw new Error(\"Missing helper: '\" + arg + \"'\");\n      }\n    });\n\n    instance.registerHelper('blockHelperMissing', function(context, options) {\n      var inverse = options.inverse || function() {}, fn = options.fn;\n\n      if (isFunction(context)) { context = context.call(this); }\n\n      if(context === true) {\n        return fn(this);\n      } else if(context === false || context == null) {\n        return inverse(this);\n      } else if (isArray(context)) {\n        if(context.length > 0) {\n          return instance.helpers.each(context, options);\n        } else {\n          return inverse(this);\n        }\n      } else {\n        return fn(context);\n      }\n    });\n\n    instance.registerHelper('each', function(context, options) {\n      var fn = options.fn, inverse = options.inverse;\n      var i = 0, ret = \"\", data;\n\n      if (isFunction(context)) { context = context.call(this); }\n\n      if (options.data) {\n        data = createFrame(options.data);\n      }\n\n      if(context && typeof context === 'object') {\n        if (isArray(context)) {\n          for(var j = context.length; i<j; i++) {\n            if (data) {\n              data.index = i;\n              data.first = (i === 0);\n              data.last  = (i === (context.length-1));\n            }\n            ret = ret + fn(context[i], { data: data });\n          }\n        } else {\n          for(var key in context) {\n            if(context.hasOwnProperty(key)) {\n              if(data) { \n                data.key = key; \n                data.index = i;\n                data.first = (i === 0);\n              }\n              ret = ret + fn(context[key], {data: data});\n              i++;\n            }\n          }\n        }\n      }\n\n      if(i === 0){\n        ret = inverse(this);\n      }\n\n      return ret;\n    });\n\n    instance.registerHelper('if', function(conditional, options) {\n      if (isFunction(conditional)) { conditional = conditional.call(this); }\n\n      // Default behavior is to render the positive path if the value is truthy and not empty.\n      // The `includeZero` option may be set to treat the condtional as purely not empty based on the\n      // behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative.\n      if ((!options.hash.includeZero && !conditional) || Utils.isEmpty(conditional)) {\n        return options.inverse(this);\n      } else {\n        return options.fn(this);\n      }\n    });\n\n    instance.registerHelper('unless', function(conditional, options) {\n      return instance.helpers['if'].call(this, conditional, {fn: options.inverse, inverse: options.fn, hash: options.hash});\n    });\n\n    instance.registerHelper('with', function(context, options) {\n      if (isFunction(context)) { context = context.call(this); }\n\n      if (!Utils.isEmpty(context)) return options.fn(context);\n    });\n\n    instance.registerHelper('log', function(context, options) {\n      var level = options.data && options.data.level != null ? parseInt(options.data.level, 10) : 1;\n      instance.log(level, context);\n    });\n  }\n\n  var logger = {\n    methodMap: { 0: 'debug', 1: 'info', 2: 'warn', 3: 'error' },\n\n    // State enum\n    DEBUG: 0,\n    INFO: 1,\n    WARN: 2,\n    ERROR: 3,\n    level: 3,\n\n    // can be overridden in the host environment\n    log: function(level, obj) {\n      if (logger.level <= level) {\n        var method = logger.methodMap[level];\n        if (typeof console !== 'undefined' && console[method]) {\n          console[method].call(console, obj);\n        }\n      }\n    }\n  };\n  __exports__.logger = logger;\n  function log(level, obj) { logger.log(level, obj); }\n\n  __exports__.log = log;var createFrame = function(object) {\n    var obj = {};\n    Utils.extend(obj, object);\n    return obj;\n  };\n  __exports__.createFrame = createFrame;\n  return __exports__;\n})(__module3__, __module5__);\n\n// handlebars/runtime.js\nvar __module6__ = (function(__dependency1__, __dependency2__, __dependency3__) {\n  \"use strict\";\n  var __exports__ = {};\n  var Utils = __dependency1__;\n  var Exception = __dependency2__;\n  var COMPILER_REVISION = __dependency3__.COMPILER_REVISION;\n  var REVISION_CHANGES = __dependency3__.REVISION_CHANGES;\n\n  function checkRevision(compilerInfo) {\n    var compilerRevision = compilerInfo && compilerInfo[0] || 1,\n        currentRevision = COMPILER_REVISION;\n\n    if (compilerRevision !== currentRevision) {\n      if (compilerRevision < currentRevision) {\n        var runtimeVersions = REVISION_CHANGES[currentRevision],\n            compilerVersions = REVISION_CHANGES[compilerRevision];\n        throw new Error(\"Template was precompiled with an older version of Handlebars than the current runtime. \"+\n              \"Please update your precompiler to a newer version (\"+runtimeVersions+\") or downgrade your runtime to an older version (\"+compilerVersions+\").\");\n      } else {\n        // Use the embedded version info since the runtime doesn't know about this revision yet\n        throw new Error(\"Template was precompiled with a newer version of Handlebars than the current runtime. \"+\n              \"Please update your runtime to a newer version (\"+compilerInfo[1]+\").\");\n      }\n    }\n  }\n\n  __exports__.checkRevision = checkRevision;// TODO: Remove this line and break up compilePartial\n\n  function template(templateSpec, env) {\n    if (!env) {\n      throw new Error(\"No environment passed to template\");\n    }\n\n    // Note: Using env.VM references rather than local var references throughout this section to allow\n    // for external users to override these as psuedo-supported APIs.\n    var invokePartialWrapper = function(partial, name, context, helpers, partials, data) {\n      var result = env.VM.invokePartial.apply(this, arguments);\n      if (result != null) { return result; }\n\n      if (env.compile) {\n        var options = { helpers: helpers, partials: partials, data: data };\n        partials[name] = env.compile(partial, { data: data !== undefined }, env);\n        return partials[name](context, options);\n      } else {\n        throw new Exception(\"The partial \" + name + \" could not be compiled when running in runtime-only mode\");\n      }\n    };\n\n    // Just add water\n    var container = {\n      escapeExpression: Utils.escapeExpression,\n      invokePartial: invokePartialWrapper,\n      programs: [],\n      program: function(i, fn, data) {\n        var programWrapper = this.programs[i];\n        if(data) {\n          programWrapper = program(i, fn, data);\n        } else if (!programWrapper) {\n          programWrapper = this.programs[i] = program(i, fn);\n        }\n        return programWrapper;\n      },\n      merge: function(param, common) {\n        var ret = param || common;\n\n        if (param && common && (param !== common)) {\n          ret = {};\n          Utils.extend(ret, common);\n          Utils.extend(ret, param);\n        }\n        return ret;\n      },\n      programWithDepth: env.VM.programWithDepth,\n      noop: env.VM.noop,\n      compilerInfo: null\n    };\n\n    return function(context, options) {\n      options = options || {};\n      var namespace = options.partial ? options : env,\n          helpers,\n          partials;\n\n      if (!options.partial) {\n        helpers = options.helpers;\n        partials = options.partials;\n      }\n      var result = templateSpec.call(\n            container,\n            namespace, context,\n            helpers,\n            partials,\n            options.data);\n\n      if (!options.partial) {\n        env.VM.checkRevision(container.compilerInfo);\n      }\n\n      return result;\n    };\n  }\n\n  __exports__.template = template;function programWithDepth(i, fn, data /*, $depth */) {\n    var args = Array.prototype.slice.call(arguments, 3);\n\n    var prog = function(context, options) {\n      options = options || {};\n\n      return fn.apply(this, [context, options.data || data].concat(args));\n    };\n    prog.program = i;\n    prog.depth = args.length;\n    return prog;\n  }\n\n  __exports__.programWithDepth = programWithDepth;function program(i, fn, data) {\n    var prog = function(context, options) {\n      options = options || {};\n\n      return fn(context, options.data || data);\n    };\n    prog.program = i;\n    prog.depth = 0;\n    return prog;\n  }\n\n  __exports__.program = program;function invokePartial(partial, name, context, helpers, partials, data) {\n    var options = { partial: true, helpers: helpers, partials: partials, data: data };\n\n    if(partial === undefined) {\n      throw new Exception(\"The partial \" + name + \" could not be found\");\n    } else if(partial instanceof Function) {\n      return partial(context, options);\n    }\n  }\n\n  __exports__.invokePartial = invokePartial;function noop() { return \"\"; }\n\n  __exports__.noop = noop;\n  return __exports__;\n})(__module3__, __module5__, __module2__);\n\n// handlebars.runtime.js\nvar __module1__ = (function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__) {\n  \"use strict\";\n  var __exports__;\n  /*globals Handlebars: true */\n  var base = __dependency1__;\n\n  // Each of these augment the Handlebars object. No need to setup here.\n  // (This is done to easily share code between commonjs and browse envs)\n  var SafeString = __dependency2__;\n  var Exception = __dependency3__;\n  var Utils = __dependency4__;\n  var runtime = __dependency5__;\n\n  // For compatibility and usage outside of module systems, make the Handlebars object a namespace\n  var create = function() {\n    var hb = new base.HandlebarsEnvironment();\n\n    Utils.extend(hb, base);\n    hb.SafeString = SafeString;\n    hb.Exception = Exception;\n    hb.Utils = Utils;\n\n    hb.VM = runtime;\n    hb.template = function(spec) {\n      return runtime.template(spec, hb);\n    };\n\n    return hb;\n  };\n\n  var Handlebars = create();\n  Handlebars.create = create;\n\n  __exports__ = Handlebars;\n  return __exports__;\n})(__module2__, __module4__, __module5__, __module3__, __module6__);\n\n// handlebars/compiler/ast.js\nvar __module7__ = (function(__dependency1__) {\n  \"use strict\";\n  var __exports__;\n  var Exception = __dependency1__;\n\n  var AST = {\n    ProgramNode: function(statements, inverseStrip, inverse) {\n      this.type = \"program\";\n      this.statements = statements;\n      this.strip = {};\n\n      if(inverse) {\n        this.inverse = new AST.ProgramNode(inverse, inverseStrip);\n        this.strip.right = inverseStrip.left;\n      } else if (inverseStrip) {\n        this.strip.left = inverseStrip.right;\n      }\n    },\n\n    MustacheNode: function(rawParams, hash, open, strip) {\n      this.type = \"mustache\";\n      this.hash = hash;\n      this.strip = strip;\n\n      // Open may be a string parsed from the parser or a passed boolean flag\n      if (open != null && open.charAt) {\n        // Must use charAt to support IE pre-10\n        var escapeFlag = open.charAt(3) || open.charAt(2);\n        this.escaped = escapeFlag !== '{' && escapeFlag !== '&';\n      } else {\n        this.escaped = !!open;\n      }\n\n      var id = this.id = rawParams[0];\n      var params = this.params = rawParams.slice(1);\n\n      // a mustache is an eligible helper if:\n      // * its id is simple (a single part, not `this` or `..`)\n      var eligibleHelper = this.eligibleHelper = id.isSimple;\n\n      // a mustache is definitely a helper if:\n      // * it is an eligible helper, and\n      // * it has at least one parameter or hash segment\n      this.isHelper = eligibleHelper && (params.length || hash);\n\n      // if a mustache is an eligible helper but not a definite\n      // helper, it is ambiguous, and will be resolved in a later\n      // pass or at runtime.\n    },\n\n    PartialNode: function(partialName, context, strip) {\n      this.type         = \"partial\";\n      this.partialName  = partialName;\n      this.context      = context;\n      this.strip = strip;\n    },\n\n    BlockNode: function(mustache, program, inverse, close) {\n      if(mustache.id.original !== close.path.original) {\n        throw new Exception(mustache.id.original + \" doesn't match \" + close.path.original);\n      }\n\n      this.type = \"block\";\n      this.mustache = mustache;\n      this.program  = program;\n      this.inverse  = inverse;\n\n      this.strip = {\n        left: mustache.strip.left,\n        right: close.strip.right\n      };\n\n      (program || inverse).strip.left = mustache.strip.right;\n      (inverse || program).strip.right = close.strip.left;\n\n      if (inverse && !program) {\n        this.isInverse = true;\n      }\n    },\n\n    ContentNode: function(string) {\n      this.type = \"content\";\n      this.string = string;\n    },\n\n    HashNode: function(pairs) {\n      this.type = \"hash\";\n      this.pairs = pairs;\n    },\n\n    IdNode: function(parts) {\n      this.type = \"ID\";\n\n      var original = \"\",\n          dig = [],\n          depth = 0;\n\n      for(var i=0,l=parts.length; i<l; i++) {\n        var part = parts[i].part;\n        original += (parts[i].separator || '') + part;\n\n        if (part === \"..\" || part === \".\" || part === \"this\") {\n          if (dig.length > 0) { throw new Exception(\"Invalid path: \" + original); }\n          else if (part === \"..\") { depth++; }\n          else { this.isScoped = true; }\n        }\n        else { dig.push(part); }\n      }\n\n      this.original = original;\n      this.parts    = dig;\n      this.string   = dig.join('.');\n      this.depth    = depth;\n\n      // an ID is simple if it only has one part, and that part is not\n      // `..` or `this`.\n      this.isSimple = parts.length === 1 && !this.isScoped && depth === 0;\n\n      this.stringModeValue = this.string;\n    },\n\n    PartialNameNode: function(name) {\n      this.type = \"PARTIAL_NAME\";\n      this.name = name.original;\n    },\n\n    DataNode: function(id) {\n      this.type = \"DATA\";\n      this.id = id;\n    },\n\n    StringNode: function(string) {\n      this.type = \"STRING\";\n      this.original =\n        this.string =\n        this.stringModeValue = string;\n    },\n\n    IntegerNode: function(integer) {\n      this.type = \"INTEGER\";\n      this.original =\n        this.integer = integer;\n      this.stringModeValue = Number(integer);\n    },\n\n    BooleanNode: function(bool) {\n      this.type = \"BOOLEAN\";\n      this.bool = bool;\n      this.stringModeValue = bool === \"true\";\n    },\n\n    CommentNode: function(comment) {\n      this.type = \"comment\";\n      this.comment = comment;\n    }\n  };\n\n  // Must be exported as an object rather than the root of the module as the jison lexer\n  // most modify the object to operate properly.\n  __exports__ = AST;\n  return __exports__;\n})(__module5__);\n\n// handlebars/compiler/parser.js\nvar __module9__ = (function() {\n  \"use strict\";\n  var __exports__;\n  /* jshint ignore:start */\n  /* Jison generated parser */\n  var handlebars = (function(){\n  var parser = {trace: function trace() { },\n  yy: {},\n  symbols_: {\"error\":2,\"root\":3,\"statements\":4,\"EOF\":5,\"program\":6,\"simpleInverse\":7,\"statement\":8,\"openInverse\":9,\"closeBlock\":10,\"openBlock\":11,\"mustache\":12,\"partial\":13,\"CONTENT\":14,\"COMMENT\":15,\"OPEN_BLOCK\":16,\"inMustache\":17,\"CLOSE\":18,\"OPEN_INVERSE\":19,\"OPEN_ENDBLOCK\":20,\"path\":21,\"OPEN\":22,\"OPEN_UNESCAPED\":23,\"CLOSE_UNESCAPED\":24,\"OPEN_PARTIAL\":25,\"partialName\":26,\"partial_option0\":27,\"inMustache_repetition0\":28,\"inMustache_option0\":29,\"dataName\":30,\"param\":31,\"STRING\":32,\"INTEGER\":33,\"BOOLEAN\":34,\"hash\":35,\"hash_repetition_plus0\":36,\"hashSegment\":37,\"ID\":38,\"EQUALS\":39,\"DATA\":40,\"pathSegments\":41,\"SEP\":42,\"$accept\":0,\"$end\":1},\n  terminals_: {2:\"error\",5:\"EOF\",14:\"CONTENT\",15:\"COMMENT\",16:\"OPEN_BLOCK\",18:\"CLOSE\",19:\"OPEN_INVERSE\",20:\"OPEN_ENDBLOCK\",22:\"OPEN\",23:\"OPEN_UNESCAPED\",24:\"CLOSE_UNESCAPED\",25:\"OPEN_PARTIAL\",32:\"STRING\",33:\"INTEGER\",34:\"BOOLEAN\",38:\"ID\",39:\"EQUALS\",40:\"DATA\",42:\"SEP\"},\n  productions_: [0,[3,2],[3,1],[6,2],[6,3],[6,2],[6,1],[6,1],[6,0],[4,1],[4,2],[8,3],[8,3],[8,1],[8,1],[8,1],[8,1],[11,3],[9,3],[10,3],[12,3],[12,3],[13,4],[7,2],[17,3],[17,1],[31,1],[31,1],[31,1],[31,1],[31,1],[35,1],[37,3],[26,1],[26,1],[26,1],[30,2],[21,1],[41,3],[41,1],[27,0],[27,1],[28,0],[28,2],[29,0],[29,1],[36,1],[36,2]],\n  performAction: function anonymous(yytext,yyleng,yylineno,yy,yystate,$$,_$) {\n\n  var $0 = $$.length - 1;\n  switch (yystate) {\n  case 1: return new yy.ProgramNode($$[$0-1]); \n  break;\n  case 2: return new yy.ProgramNode([]); \n  break;\n  case 3:this.$ = new yy.ProgramNode([], $$[$0-1], $$[$0]);\n  break;\n  case 4:this.$ = new yy.ProgramNode($$[$0-2], $$[$0-1], $$[$0]);\n  break;\n  case 5:this.$ = new yy.ProgramNode($$[$0-1], $$[$0], []);\n  break;\n  case 6:this.$ = new yy.ProgramNode($$[$0]);\n  break;\n  case 7:this.$ = new yy.ProgramNode([]);\n  break;\n  case 8:this.$ = new yy.ProgramNode([]);\n  break;\n  case 9:this.$ = [$$[$0]];\n  break;\n  case 10: $$[$0-1].push($$[$0]); this.$ = $$[$0-1]; \n  break;\n  case 11:this.$ = new yy.BlockNode($$[$0-2], $$[$0-1].inverse, $$[$0-1], $$[$0]);\n  break;\n  case 12:this.$ = new yy.BlockNode($$[$0-2], $$[$0-1], $$[$0-1].inverse, $$[$0]);\n  break;\n  case 13:this.$ = $$[$0];\n  break;\n  case 14:this.$ = $$[$0];\n  break;\n  case 15:this.$ = new yy.ContentNode($$[$0]);\n  break;\n  case 16:this.$ = new yy.CommentNode($$[$0]);\n  break;\n  case 17:this.$ = new yy.MustacheNode($$[$0-1][0], $$[$0-1][1], $$[$0-2], stripFlags($$[$0-2], $$[$0]));\n  break;\n  case 18:this.$ = new yy.MustacheNode($$[$0-1][0], $$[$0-1][1], $$[$0-2], stripFlags($$[$0-2], $$[$0]));\n  break;\n  case 19:this.$ = {path: $$[$0-1], strip: stripFlags($$[$0-2], $$[$0])};\n  break;\n  case 20:this.$ = new yy.MustacheNode($$[$0-1][0], $$[$0-1][1], $$[$0-2], stripFlags($$[$0-2], $$[$0]));\n  break;\n  case 21:this.$ = new yy.MustacheNode($$[$0-1][0], $$[$0-1][1], $$[$0-2], stripFlags($$[$0-2], $$[$0]));\n  break;\n  case 22:this.$ = new yy.PartialNode($$[$0-2], $$[$0-1], stripFlags($$[$0-3], $$[$0]));\n  break;\n  case 23:this.$ = stripFlags($$[$0-1], $$[$0]);\n  break;\n  case 24:this.$ = [[$$[$0-2]].concat($$[$0-1]), $$[$0]];\n  break;\n  case 25:this.$ = [[$$[$0]], null];\n  break;\n  case 26:this.$ = $$[$0];\n  break;\n  case 27:this.$ = new yy.StringNode($$[$0]);\n  break;\n  case 28:this.$ = new yy.IntegerNode($$[$0]);\n  break;\n  case 29:this.$ = new yy.BooleanNode($$[$0]);\n  break;\n  case 30:this.$ = $$[$0];\n  break;\n  case 31:this.$ = new yy.HashNode($$[$0]);\n  break;\n  case 32:this.$ = [$$[$0-2], $$[$0]];\n  break;\n  case 33:this.$ = new yy.PartialNameNode($$[$0]);\n  break;\n  case 34:this.$ = new yy.PartialNameNode(new yy.StringNode($$[$0]));\n  break;\n  case 35:this.$ = new yy.PartialNameNode(new yy.IntegerNode($$[$0]));\n  break;\n  case 36:this.$ = new yy.DataNode($$[$0]);\n  break;\n  case 37:this.$ = new yy.IdNode($$[$0]);\n  break;\n  case 38: $$[$0-2].push({part: $$[$0], separator: $$[$0-1]}); this.$ = $$[$0-2]; \n  break;\n  case 39:this.$ = [{part: $$[$0]}];\n  break;\n  case 42:this.$ = [];\n  break;\n  case 43:$$[$0-1].push($$[$0]);\n  break;\n  case 46:this.$ = [$$[$0]];\n  break;\n  case 47:$$[$0-1].push($$[$0]);\n  break;\n  }\n  },\n  table: [{3:1,4:2,5:[1,3],8:4,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,11],22:[1,13],23:[1,14],25:[1,15]},{1:[3]},{5:[1,16],8:17,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,11],22:[1,13],23:[1,14],25:[1,15]},{1:[2,2]},{5:[2,9],14:[2,9],15:[2,9],16:[2,9],19:[2,9],20:[2,9],22:[2,9],23:[2,9],25:[2,9]},{4:20,6:18,7:19,8:4,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,21],20:[2,8],22:[1,13],23:[1,14],25:[1,15]},{4:20,6:22,7:19,8:4,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,21],20:[2,8],22:[1,13],23:[1,14],25:[1,15]},{5:[2,13],14:[2,13],15:[2,13],16:[2,13],19:[2,13],20:[2,13],22:[2,13],23:[2,13],25:[2,13]},{5:[2,14],14:[2,14],15:[2,14],16:[2,14],19:[2,14],20:[2,14],22:[2,14],23:[2,14],25:[2,14]},{5:[2,15],14:[2,15],15:[2,15],16:[2,15],19:[2,15],20:[2,15],22:[2,15],23:[2,15],25:[2,15]},{5:[2,16],14:[2,16],15:[2,16],16:[2,16],19:[2,16],20:[2,16],22:[2,16],23:[2,16],25:[2,16]},{17:23,21:24,30:25,38:[1,28],40:[1,27],41:26},{17:29,21:24,30:25,38:[1,28],40:[1,27],41:26},{17:30,21:24,30:25,38:[1,28],40:[1,27],41:26},{17:31,21:24,30:25,38:[1,28],40:[1,27],41:26},{21:33,26:32,32:[1,34],33:[1,35],38:[1,28],41:26},{1:[2,1]},{5:[2,10],14:[2,10],15:[2,10],16:[2,10],19:[2,10],20:[2,10],22:[2,10],23:[2,10],25:[2,10]},{10:36,20:[1,37]},{4:38,8:4,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,11],20:[2,7],22:[1,13],23:[1,14],25:[1,15]},{7:39,8:17,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,21],20:[2,6],22:[1,13],23:[1,14],25:[1,15]},{17:23,18:[1,40],21:24,30:25,38:[1,28],40:[1,27],41:26},{10:41,20:[1,37]},{18:[1,42]},{18:[2,42],24:[2,42],28:43,32:[2,42],33:[2,42],34:[2,42],38:[2,42],40:[2,42]},{18:[2,25],24:[2,25]},{18:[2,37],24:[2,37],32:[2,37],33:[2,37],34:[2,37],38:[2,37],40:[2,37],42:[1,44]},{21:45,38:[1,28],41:26},{18:[2,39],24:[2,39],32:[2,39],33:[2,39],34:[2,39],38:[2,39],40:[2,39],42:[2,39]},{18:[1,46]},{18:[1,47]},{24:[1,48]},{18:[2,40],21:50,27:49,38:[1,28],41:26},{18:[2,33],38:[2,33]},{18:[2,34],38:[2,34]},{18:[2,35],38:[2,35]},{5:[2,11],14:[2,11],15:[2,11],16:[2,11],19:[2,11],20:[2,11],22:[2,11],23:[2,11],25:[2,11]},{21:51,38:[1,28],41:26},{8:17,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,11],20:[2,3],22:[1,13],23:[1,14],25:[1,15]},{4:52,8:4,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,11],20:[2,5],22:[1,13],23:[1,14],25:[1,15]},{14:[2,23],15:[2,23],16:[2,23],19:[2,23],20:[2,23],22:[2,23],23:[2,23],25:[2,23]},{5:[2,12],14:[2,12],15:[2,12],16:[2,12],19:[2,12],20:[2,12],22:[2,12],23:[2,12],25:[2,12]},{14:[2,18],15:[2,18],16:[2,18],19:[2,18],20:[2,18],22:[2,18],23:[2,18],25:[2,18]},{18:[2,44],21:56,24:[2,44],29:53,30:60,31:54,32:[1,57],33:[1,58],34:[1,59],35:55,36:61,37:62,38:[1,63],40:[1,27],41:26},{38:[1,64]},{18:[2,36],24:[2,36],32:[2,36],33:[2,36],34:[2,36],38:[2,36],40:[2,36]},{14:[2,17],15:[2,17],16:[2,17],19:[2,17],20:[2,17],22:[2,17],23:[2,17],25:[2,17]},{5:[2,20],14:[2,20],15:[2,20],16:[2,20],19:[2,20],20:[2,20],22:[2,20],23:[2,20],25:[2,20]},{5:[2,21],14:[2,21],15:[2,21],16:[2,21],19:[2,21],20:[2,21],22:[2,21],23:[2,21],25:[2,21]},{18:[1,65]},{18:[2,41]},{18:[1,66]},{8:17,9:5,11:6,12:7,13:8,14:[1,9],15:[1,10],16:[1,12],19:[1,11],20:[2,4],22:[1,13],23:[1,14],25:[1,15]},{18:[2,24],24:[2,24]},{18:[2,43],24:[2,43],32:[2,43],33:[2,43],34:[2,43],38:[2,43],40:[2,43]},{18:[2,45],24:[2,45]},{18:[2,26],24:[2,26],32:[2,26],33:[2,26],34:[2,26],38:[2,26],40:[2,26]},{18:[2,27],24:[2,27],32:[2,27],33:[2,27],34:[2,27],38:[2,27],40:[2,27]},{18:[2,28],24:[2,28],32:[2,28],33:[2,28],34:[2,28],38:[2,28],40:[2,28]},{18:[2,29],24:[2,29],32:[2,29],33:[2,29],34:[2,29],38:[2,29],40:[2,29]},{18:[2,30],24:[2,30],32:[2,30],33:[2,30],34:[2,30],38:[2,30],40:[2,30]},{18:[2,31],24:[2,31],37:67,38:[1,68]},{18:[2,46],24:[2,46],38:[2,46]},{18:[2,39],24:[2,39],32:[2,39],33:[2,39],34:[2,39],38:[2,39],39:[1,69],40:[2,39],42:[2,39]},{18:[2,38],24:[2,38],32:[2,38],33:[2,38],34:[2,38],38:[2,38],40:[2,38],42:[2,38]},{5:[2,22],14:[2,22],15:[2,22],16:[2,22],19:[2,22],20:[2,22],22:[2,22],23:[2,22],25:[2,22]},{5:[2,19],14:[2,19],15:[2,19],16:[2,19],19:[2,19],20:[2,19],22:[2,19],23:[2,19],25:[2,19]},{18:[2,47],24:[2,47],38:[2,47]},{39:[1,69]},{21:56,30:60,31:70,32:[1,57],33:[1,58],34:[1,59],38:[1,28],40:[1,27],41:26},{18:[2,32],24:[2,32],38:[2,32]}],\n  defaultActions: {3:[2,2],16:[2,1],50:[2,41]},\n  parseError: function parseError(str, hash) {\n      throw new Error(str);\n  },\n  parse: function parse(input) {\n      var self = this, stack = [0], vstack = [null], lstack = [], table = this.table, yytext = \"\", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n      this.lexer.setInput(input);\n      this.lexer.yy = this.yy;\n      this.yy.lexer = this.lexer;\n      this.yy.parser = this;\n      if (typeof this.lexer.yylloc == \"undefined\")\n          this.lexer.yylloc = {};\n      var yyloc = this.lexer.yylloc;\n      lstack.push(yyloc);\n      var ranges = this.lexer.options && this.lexer.options.ranges;\n      if (typeof this.yy.parseError === \"function\")\n          this.parseError = this.yy.parseError;\n      function popStack(n) {\n          stack.length = stack.length - 2 * n;\n          vstack.length = vstack.length - n;\n          lstack.length = lstack.length - n;\n      }\n      function lex() {\n          var token;\n          token = self.lexer.lex() || 1;\n          if (typeof token !== \"number\") {\n              token = self.symbols_[token] || token;\n          }\n          return token;\n      }\n      var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n      while (true) {\n          state = stack[stack.length - 1];\n          if (this.defaultActions[state]) {\n              action = this.defaultActions[state];\n          } else {\n              if (symbol === null || typeof symbol == \"undefined\") {\n                  symbol = lex();\n              }\n              action = table[state] && table[state][symbol];\n          }\n          if (typeof action === \"undefined\" || !action.length || !action[0]) {\n              var errStr = \"\";\n              if (!recovering) {\n                  expected = [];\n                  for (p in table[state])\n                      if (this.terminals_[p] && p > 2) {\n                          expected.push(\"'\" + this.terminals_[p] + \"'\");\n                      }\n                  if (this.lexer.showPosition) {\n                      errStr = \"Parse error on line \" + (yylineno + 1) + \":\\n\" + this.lexer.showPosition() + \"\\nExpecting \" + expected.join(\", \") + \", got '\" + (this.terminals_[symbol] || symbol) + \"'\";\n                  } else {\n                      errStr = \"Parse error on line \" + (yylineno + 1) + \": Unexpected \" + (symbol == 1?\"end of input\":\"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n                  }\n                  this.parseError(errStr, {text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected});\n              }\n          }\n          if (action[0] instanceof Array && action.length > 1) {\n              throw new Error(\"Parse Error: multiple actions possible at state: \" + state + \", token: \" + symbol);\n          }\n          switch (action[0]) {\n          case 1:\n              stack.push(symbol);\n              vstack.push(this.lexer.yytext);\n              lstack.push(this.lexer.yylloc);\n              stack.push(action[1]);\n              symbol = null;\n              if (!preErrorSymbol) {\n                  yyleng = this.lexer.yyleng;\n                  yytext = this.lexer.yytext;\n                  yylineno = this.lexer.yylineno;\n                  yyloc = this.lexer.yylloc;\n                  if (recovering > 0)\n                      recovering--;\n              } else {\n                  symbol = preErrorSymbol;\n                  preErrorSymbol = null;\n              }\n              break;\n          case 2:\n              len = this.productions_[action[1]][1];\n              yyval.$ = vstack[vstack.length - len];\n              yyval._$ = {first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column};\n              if (ranges) {\n                  yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]];\n              }\n              r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack);\n              if (typeof r !== \"undefined\") {\n                  return r;\n              }\n              if (len) {\n                  stack = stack.slice(0, -1 * len * 2);\n                  vstack = vstack.slice(0, -1 * len);\n                  lstack = lstack.slice(0, -1 * len);\n              }\n              stack.push(this.productions_[action[1]][0]);\n              vstack.push(yyval.$);\n              lstack.push(yyval._$);\n              newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n              stack.push(newState);\n              break;\n          case 3:\n              return true;\n          }\n      }\n      return true;\n  }\n  };\n\n\n  function stripFlags(open, close) {\n    return {\n      left: open.charAt(2) === '~',\n      right: close.charAt(0) === '~' || close.charAt(1) === '~'\n    };\n  }\n\n  /* Jison generated lexer */\n  var lexer = (function(){\n  var lexer = ({EOF:1,\n  parseError:function parseError(str, hash) {\n          if (this.yy.parser) {\n              this.yy.parser.parseError(str, hash);\n          } else {\n              throw new Error(str);\n          }\n      },\n  setInput:function (input) {\n          this._input = input;\n          this._more = this._less = this.done = false;\n          this.yylineno = this.yyleng = 0;\n          this.yytext = this.matched = this.match = '';\n          this.conditionStack = ['INITIAL'];\n          this.yylloc = {first_line:1,first_column:0,last_line:1,last_column:0};\n          if (this.options.ranges) this.yylloc.range = [0,0];\n          this.offset = 0;\n          return this;\n      },\n  input:function () {\n          var ch = this._input[0];\n          this.yytext += ch;\n          this.yyleng++;\n          this.offset++;\n          this.match += ch;\n          this.matched += ch;\n          var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n          if (lines) {\n              this.yylineno++;\n              this.yylloc.last_line++;\n          } else {\n              this.yylloc.last_column++;\n          }\n          if (this.options.ranges) this.yylloc.range[1]++;\n\n          this._input = this._input.slice(1);\n          return ch;\n      },\n  unput:function (ch) {\n          var len = ch.length;\n          var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n          this._input = ch + this._input;\n          this.yytext = this.yytext.substr(0, this.yytext.length-len-1);\n          //this.yyleng -= len;\n          this.offset -= len;\n          var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n          this.match = this.match.substr(0, this.match.length-1);\n          this.matched = this.matched.substr(0, this.matched.length-1);\n\n          if (lines.length-1) this.yylineno -= lines.length-1;\n          var r = this.yylloc.range;\n\n          this.yylloc = {first_line: this.yylloc.first_line,\n            last_line: this.yylineno+1,\n            first_column: this.yylloc.first_column,\n            last_column: lines ?\n                (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length:\n                this.yylloc.first_column - len\n            };\n\n          if (this.options.ranges) {\n              this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n          }\n          return this;\n      },\n  more:function () {\n          this._more = true;\n          return this;\n      },\n  less:function (n) {\n          this.unput(this.match.slice(n));\n      },\n  pastInput:function () {\n          var past = this.matched.substr(0, this.matched.length - this.match.length);\n          return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n      },\n  upcomingInput:function () {\n          var next = this.match;\n          if (next.length < 20) {\n              next += this._input.substr(0, 20-next.length);\n          }\n          return (next.substr(0,20)+(next.length > 20 ? '...':'')).replace(/\\n/g, \"\");\n      },\n  showPosition:function () {\n          var pre = this.pastInput();\n          var c = new Array(pre.length + 1).join(\"-\");\n          return pre + this.upcomingInput() + \"\\n\" + c+\"^\";\n      },\n  next:function () {\n          if (this.done) {\n              return this.EOF;\n          }\n          if (!this._input) this.done = true;\n\n          var token,\n              match,\n              tempMatch,\n              index,\n              col,\n              lines;\n          if (!this._more) {\n              this.yytext = '';\n              this.match = '';\n          }\n          var rules = this._currentRules();\n          for (var i=0;i < rules.length; i++) {\n              tempMatch = this._input.match(this.rules[rules[i]]);\n              if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n                  match = tempMatch;\n                  index = i;\n                  if (!this.options.flex) break;\n              }\n          }\n          if (match) {\n              lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n              if (lines) this.yylineno += lines.length;\n              this.yylloc = {first_line: this.yylloc.last_line,\n                             last_line: this.yylineno+1,\n                             first_column: this.yylloc.last_column,\n                             last_column: lines ? lines[lines.length-1].length-lines[lines.length-1].match(/\\r?\\n?/)[0].length : this.yylloc.last_column + match[0].length};\n              this.yytext += match[0];\n              this.match += match[0];\n              this.matches = match;\n              this.yyleng = this.yytext.length;\n              if (this.options.ranges) {\n                  this.yylloc.range = [this.offset, this.offset += this.yyleng];\n              }\n              this._more = false;\n              this._input = this._input.slice(match[0].length);\n              this.matched += match[0];\n              token = this.performAction.call(this, this.yy, this, rules[index],this.conditionStack[this.conditionStack.length-1]);\n              if (this.done && this._input) this.done = false;\n              if (token) return token;\n              else return;\n          }\n          if (this._input === \"\") {\n              return this.EOF;\n          } else {\n              return this.parseError('Lexical error on line '+(this.yylineno+1)+'. Unrecognized text.\\n'+this.showPosition(),\n                      {text: \"\", token: null, line: this.yylineno});\n          }\n      },\n  lex:function lex() {\n          var r = this.next();\n          if (typeof r !== 'undefined') {\n              return r;\n          } else {\n              return this.lex();\n          }\n      },\n  begin:function begin(condition) {\n          this.conditionStack.push(condition);\n      },\n  popState:function popState() {\n          return this.conditionStack.pop();\n      },\n  _currentRules:function _currentRules() {\n          return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules;\n      },\n  topState:function () {\n          return this.conditionStack[this.conditionStack.length-2];\n      },\n  pushState:function begin(condition) {\n          this.begin(condition);\n      }});\n  lexer.options = {};\n  lexer.performAction = function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\n\n\n  function strip(start, end) {\n    return yy_.yytext = yy_.yytext.substr(start, yy_.yyleng-end);\n  }\n\n\n  var YYSTATE=YY_START\n  switch($avoiding_name_collisions) {\n  case 0:\n                                     if(yy_.yytext.slice(-2) === \"\\\\\\\\\") {\n                                       strip(0,1);\n                                       this.begin(\"mu\");\n                                     } else if(yy_.yytext.slice(-1) === \"\\\\\") {\n                                       strip(0,1);\n                                       this.begin(\"emu\");\n                                     } else {\n                                       this.begin(\"mu\");\n                                     }\n                                     if(yy_.yytext) return 14;\n                                   \n  break;\n  case 1:return 14;\n  break;\n  case 2:\n                                     this.popState();\n                                     return 14;\n                                   \n  break;\n  case 3:strip(0,4); this.popState(); return 15;\n  break;\n  case 4:return 25;\n  break;\n  case 5:return 16;\n  break;\n  case 6:return 20;\n  break;\n  case 7:return 19;\n  break;\n  case 8:return 19;\n  break;\n  case 9:return 23;\n  break;\n  case 10:return 22;\n  break;\n  case 11:this.popState(); this.begin('com');\n  break;\n  case 12:strip(3,5); this.popState(); return 15;\n  break;\n  case 13:return 22;\n  break;\n  case 14:return 39;\n  break;\n  case 15:return 38;\n  break;\n  case 16:return 38;\n  break;\n  case 17:return 42;\n  break;\n  case 18:// ignore whitespace\n  break;\n  case 19:this.popState(); return 24;\n  break;\n  case 20:this.popState(); return 18;\n  break;\n  case 21:yy_.yytext = strip(1,2).replace(/\\\\\"/g,'\"'); return 32;\n  break;\n  case 22:yy_.yytext = strip(1,2).replace(/\\\\'/g,\"'\"); return 32;\n  break;\n  case 23:return 40;\n  break;\n  case 24:return 34;\n  break;\n  case 25:return 34;\n  break;\n  case 26:return 33;\n  break;\n  case 27:return 38;\n  break;\n  case 28:yy_.yytext = strip(1,2); return 38;\n  break;\n  case 29:return 'INVALID';\n  break;\n  case 30:return 5;\n  break;\n  }\n  };\n  lexer.rules = [/^(?:[^\\x00]*?(?=(\\{\\{)))/,/^(?:[^\\x00]+)/,/^(?:[^\\x00]{2,}?(?=(\\{\\{|\\\\\\{\\{|\\\\\\\\\\{\\{|$)))/,/^(?:[\\s\\S]*?--\\}\\})/,/^(?:\\{\\{(~)?>)/,/^(?:\\{\\{(~)?#)/,/^(?:\\{\\{(~)?\\/)/,/^(?:\\{\\{(~)?\\^)/,/^(?:\\{\\{(~)?\\s*else\\b)/,/^(?:\\{\\{(~)?\\{)/,/^(?:\\{\\{(~)?&)/,/^(?:\\{\\{!--)/,/^(?:\\{\\{![\\s\\S]*?\\}\\})/,/^(?:\\{\\{(~)?)/,/^(?:=)/,/^(?:\\.\\.)/,/^(?:\\.(?=([=~}\\s\\/.])))/,/^(?:[\\/.])/,/^(?:\\s+)/,/^(?:\\}(~)?\\}\\})/,/^(?:(~)?\\}\\})/,/^(?:\"(\\\\[\"]|[^\"])*\")/,/^(?:'(\\\\[']|[^'])*')/,/^(?:@)/,/^(?:true(?=([~}\\s])))/,/^(?:false(?=([~}\\s])))/,/^(?:-?[0-9]+(?=([~}\\s])))/,/^(?:([^\\s!\"#%-,\\.\\/;->@\\[-\\^`\\{-~]+(?=([=~}\\s\\/.]))))/,/^(?:\\[[^\\]]*\\])/,/^(?:.)/,/^(?:$)/];\n  lexer.conditions = {\"mu\":{\"rules\":[4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30],\"inclusive\":false},\"emu\":{\"rules\":[2],\"inclusive\":false},\"com\":{\"rules\":[3],\"inclusive\":false},\"INITIAL\":{\"rules\":[0,1,30],\"inclusive\":true}};\n  return lexer;})()\n  parser.lexer = lexer;\n  function Parser () { this.yy = {}; }Parser.prototype = parser;parser.Parser = Parser;\n  return new Parser;\n  })();__exports__ = handlebars;\n  /* jshint ignore:end */\n  return __exports__;\n})();\n\n// handlebars/compiler/base.js\nvar __module8__ = (function(__dependency1__, __dependency2__) {\n  \"use strict\";\n  var __exports__ = {};\n  var parser = __dependency1__;\n  var AST = __dependency2__;\n\n  __exports__.parser = parser;\n\n  function parse(input) {\n    // Just return if an already-compile AST was passed in.\n    if(input.constructor === AST.ProgramNode) { return input; }\n\n    parser.yy = AST;\n    return parser.parse(input);\n  }\n\n  __exports__.parse = parse;\n  return __exports__;\n})(__module9__, __module7__);\n\n// handlebars/compiler/javascript-compiler.js\nvar __module11__ = (function(__dependency1__) {\n  \"use strict\";\n  var __exports__;\n  var COMPILER_REVISION = __dependency1__.COMPILER_REVISION;\n  var REVISION_CHANGES = __dependency1__.REVISION_CHANGES;\n  var log = __dependency1__.log;\n\n  function Literal(value) {\n    this.value = value;\n  }\n\n  function JavaScriptCompiler() {}\n\n  JavaScriptCompiler.prototype = {\n    // PUBLIC API: You can override these methods in a subclass to provide\n    // alternative compiled forms for name lookup and buffering semantics\n    nameLookup: function(parent, name /* , type*/) {\n      var wrap,\n          ret;\n      if (parent.indexOf('depth') === 0) {\n        wrap = true;\n      }\n\n      if (/^[0-9]+$/.test(name)) {\n        ret = parent + \"[\" + name + \"]\";\n      } else if (JavaScriptCompiler.isValidJavaScriptVariableName(name)) {\n        ret = parent + \".\" + name;\n      }\n      else {\n        ret = parent + \"['\" + name + \"']\";\n      }\n\n      if (wrap) {\n        return '(' + parent + ' && ' + ret + ')';\n      } else {\n        return ret;\n      }\n    },\n\n    compilerInfo: function() {\n      var revision = COMPILER_REVISION,\n          versions = REVISION_CHANGES[revision];\n      return \"this.compilerInfo = [\"+revision+\",'\"+versions+\"'];\\n\";\n    },\n\n    appendToBuffer: function(string) {\n      if (this.environment.isSimple) {\n        return \"return \" + string + \";\";\n      } else {\n        return {\n          appendToBuffer: true,\n          content: string,\n          toString: function() { return \"buffer += \" + string + \";\"; }\n        };\n      }\n    },\n\n    initializeBuffer: function() {\n      return this.quotedString(\"\");\n    },\n\n    namespace: \"Handlebars\",\n    // END PUBLIC API\n\n    compile: function(environment, options, context, asObject) {\n      this.environment = environment;\n      this.options = options || {};\n\n      log('debug', this.environment.disassemble() + \"\\n\\n\");\n\n      this.name = this.environment.name;\n      this.isChild = !!context;\n      this.context = context || {\n        programs: [],\n        environments: [],\n        aliases: { }\n      };\n\n      this.preamble();\n\n      this.stackSlot = 0;\n      this.stackVars = [];\n      this.registers = { list: [] };\n      this.compileStack = [];\n      this.inlineStack = [];\n\n      this.compileChildren(environment, options);\n\n      var opcodes = environment.opcodes, opcode;\n\n      this.i = 0;\n\n      for(var l=opcodes.length; this.i<l; this.i++) {\n        opcode = opcodes[this.i];\n\n        if(opcode.opcode === 'DECLARE') {\n          this[opcode.name] = opcode.value;\n        } else {\n          this[opcode.opcode].apply(this, opcode.args);\n        }\n\n        // Reset the stripNext flag if it was not set by this operation.\n        if (opcode.opcode !== this.stripNext) {\n          this.stripNext = false;\n        }\n      }\n\n      // Flush any trailing content that might be pending.\n      this.pushSource('');\n\n      return this.createFunctionContext(asObject);\n    },\n\n    preamble: function() {\n      var out = [];\n\n      if (!this.isChild) {\n        var namespace = this.namespace;\n\n        var copies = \"helpers = this.merge(helpers, \" + namespace + \".helpers);\";\n        if (this.environment.usePartial) { copies = copies + \" partials = this.merge(partials, \" + namespace + \".partials);\"; }\n        if (this.options.data) { copies = copies + \" data = data || {};\"; }\n        out.push(copies);\n      } else {\n        out.push('');\n      }\n\n      if (!this.environment.isSimple) {\n        out.push(\", buffer = \" + this.initializeBuffer());\n      } else {\n        out.push(\"\");\n      }\n\n      // track the last context pushed into place to allow skipping the\n      // getContext opcode when it would be a noop\n      this.lastContext = 0;\n      this.source = out;\n    },\n\n    createFunctionContext: function(asObject) {\n      var locals = this.stackVars.concat(this.registers.list);\n\n      if(locals.length > 0) {\n        this.source[1] = this.source[1] + \", \" + locals.join(\", \");\n      }\n\n      // Generate minimizer alias mappings\n      if (!this.isChild) {\n        for (var alias in this.context.aliases) {\n          if (this.context.aliases.hasOwnProperty(alias)) {\n            this.source[1] = this.source[1] + ', ' + alias + '=' + this.context.aliases[alias];\n          }\n        }\n      }\n\n      if (this.source[1]) {\n        this.source[1] = \"var \" + this.source[1].substring(2) + \";\";\n      }\n\n      // Merge children\n      if (!this.isChild) {\n        this.source[1] += '\\n' + this.context.programs.join('\\n') + '\\n';\n      }\n\n      if (!this.environment.isSimple) {\n        this.pushSource(\"return buffer;\");\n      }\n\n      var params = this.isChild ? [\"depth0\", \"data\"] : [\"Handlebars\", \"depth0\", \"helpers\", \"partials\", \"data\"];\n\n      for(var i=0, l=this.environment.depths.list.length; i<l; i++) {\n        params.push(\"depth\" + this.environment.depths.list[i]);\n      }\n\n      // Perform a second pass over the output to merge content when possible\n      var source = this.mergeSource();\n\n      if (!this.isChild) {\n        source = this.compilerInfo()+source;\n      }\n\n      if (asObject) {\n        params.push(source);\n\n        return Function.apply(this, params);\n      } else {\n        var functionSource = 'function ' + (this.name || '') + '(' + params.join(',') + ') {\\n  ' + source + '}';\n        log('debug', functionSource + \"\\n\\n\");\n        return functionSource;\n      }\n    },\n    mergeSource: function() {\n      // WARN: We are not handling the case where buffer is still populated as the source should\n      // not have buffer append operations as their final action.\n      var source = '',\n          buffer;\n      for (var i = 0, len = this.source.length; i < len; i++) {\n        var line = this.source[i];\n        if (line.appendToBuffer) {\n          if (buffer) {\n            buffer = buffer + '\\n    + ' + line.content;\n          } else {\n            buffer = line.content;\n          }\n        } else {\n          if (buffer) {\n            source += 'buffer += ' + buffer + ';\\n  ';\n            buffer = undefined;\n          }\n          source += line + '\\n  ';\n        }\n      }\n      return source;\n    },\n\n    // [blockValue]\n    //\n    // On stack, before: hash, inverse, program, value\n    // On stack, after: return value of blockHelperMissing\n    //\n    // The purpose of this opcode is to take a block of the form\n    // `{{#foo}}...{{/foo}}`, resolve the value of `foo`, and\n    // replace it on the stack with the result of properly\n    // invoking blockHelperMissing.\n    blockValue: function() {\n      this.context.aliases.blockHelperMissing = 'helpers.blockHelperMissing';\n\n      var params = [\"depth0\"];\n      this.setupParams(0, params);\n\n      this.replaceStack(function(current) {\n        params.splice(1, 0, current);\n        return \"blockHelperMissing.call(\" + params.join(\", \") + \")\";\n      });\n    },\n\n    // [ambiguousBlockValue]\n    //\n    // On stack, before: hash, inverse, program, value\n    // Compiler value, before: lastHelper=value of last found helper, if any\n    // On stack, after, if no lastHelper: same as [blockValue]\n    // On stack, after, if lastHelper: value\n    ambiguousBlockValue: function() {\n      this.context.aliases.blockHelperMissing = 'helpers.blockHelperMissing';\n\n      var params = [\"depth0\"];\n      this.setupParams(0, params);\n\n      var current = this.topStack();\n      params.splice(1, 0, current);\n\n      // Use the options value generated from the invocation\n      params[params.length-1] = 'options';\n\n      this.pushSource(\"if (!\" + this.lastHelper + \") { \" + current + \" = blockHelperMissing.call(\" + params.join(\", \") + \"); }\");\n    },\n\n    // [appendContent]\n    //\n    // On stack, before: ...\n    // On stack, after: ...\n    //\n    // Appends the string value of `content` to the current buffer\n    appendContent: function(content) {\n      if (this.pendingContent) {\n        content = this.pendingContent + content;\n      }\n      if (this.stripNext) {\n        content = content.replace(/^\\s+/, '');\n      }\n\n      this.pendingContent = content;\n    },\n\n    // [strip]\n    //\n    // On stack, before: ...\n    // On stack, after: ...\n    //\n    // Removes any trailing whitespace from the prior content node and flags\n    // the next operation for stripping if it is a content node.\n    strip: function() {\n      if (this.pendingContent) {\n        this.pendingContent = this.pendingContent.replace(/\\s+$/, '');\n      }\n      this.stripNext = 'strip';\n    },\n\n    // [append]\n    //\n    // On stack, before: value, ...\n    // On stack, after: ...\n    //\n    // Coerces `value` to a String and appends it to the current buffer.\n    //\n    // If `value` is truthy, or 0, it is coerced into a string and appended\n    // Otherwise, the empty string is appended\n    append: function() {\n      // Force anything that is inlined onto the stack so we don't have duplication\n      // when we examine local\n      this.flushInline();\n      var local = this.popStack();\n      this.pushSource(\"if(\" + local + \" || \" + local + \" === 0) { \" + this.appendToBuffer(local) + \" }\");\n      if (this.environment.isSimple) {\n        this.pushSource(\"else { \" + this.appendToBuffer(\"''\") + \" }\");\n      }\n    },\n\n    // [appendEscaped]\n    //\n    // On stack, before: value, ...\n    // On stack, after: ...\n    //\n    // Escape `value` and append it to the buffer\n    appendEscaped: function() {\n      this.context.aliases.escapeExpression = 'this.escapeExpression';\n\n      this.pushSource(this.appendToBuffer(\"escapeExpression(\" + this.popStack() + \")\"));\n    },\n\n    // [getContext]\n    //\n    // On stack, before: ...\n    // On stack, after: ...\n    // Compiler value, after: lastContext=depth\n    //\n    // Set the value of the `lastContext` compiler value to the depth\n    getContext: function(depth) {\n      if(this.lastContext !== depth) {\n        this.lastContext = depth;\n      }\n    },\n\n    // [lookupOnContext]\n    //\n    // On stack, before: ...\n    // On stack, after: currentContext[name], ...\n    //\n    // Looks up the value of `name` on the current context and pushes\n    // it onto the stack.\n    lookupOnContext: function(name) {\n      this.push(this.nameLookup('depth' + this.lastContext, name, 'context'));\n    },\n\n    // [pushContext]\n    //\n    // On stack, before: ...\n    // On stack, after: currentContext, ...\n    //\n    // Pushes the value of the current context onto the stack.\n    pushContext: function() {\n      this.pushStackLiteral('depth' + this.lastContext);\n    },\n\n    // [resolvePossibleLambda]\n    //\n    // On stack, before: value, ...\n    // On stack, after: resolved value, ...\n    //\n    // If the `value` is a lambda, replace it on the stack by\n    // the return value of the lambda\n    resolvePossibleLambda: function() {\n      this.context.aliases.functionType = '\"function\"';\n\n      this.replaceStack(function(current) {\n        return \"typeof \" + current + \" === functionType ? \" + current + \".apply(depth0) : \" + current;\n      });\n    },\n\n    // [lookup]\n    //\n    // On stack, before: value, ...\n    // On stack, after: value[name], ...\n    //\n    // Replace the value on the stack with the result of looking\n    // up `name` on `value`\n    lookup: function(name) {\n      this.replaceStack(function(current) {\n        return current + \" == null || \" + current + \" === false ? \" + current + \" : \" + this.nameLookup(current, name, 'context');\n      });\n    },\n\n    // [lookupData]\n    //\n    // On stack, before: ...\n    // On stack, after: data, ...\n    //\n    // Push the data lookup operator\n    lookupData: function() {\n      this.push('data');\n    },\n\n    // [pushStringParam]\n    //\n    // On stack, before: ...\n    // On stack, after: string, currentContext, ...\n    //\n    // This opcode is designed for use in string mode, which\n    // provides the string value of a parameter along with its\n    // depth rather than resolving it immediately.\n    pushStringParam: function(string, type) {\n      this.pushStackLiteral('depth' + this.lastContext);\n\n      this.pushString(type);\n\n      if (typeof string === 'string') {\n        this.pushString(string);\n      } else {\n        this.pushStackLiteral(string);\n      }\n    },\n\n    emptyHash: function() {\n      this.pushStackLiteral('{}');\n\n      if (this.options.stringParams) {\n        this.register('hashTypes', '{}');\n        this.register('hashContexts', '{}');\n      }\n    },\n    pushHash: function() {\n      this.hash = {values: [], types: [], contexts: []};\n    },\n    popHash: function() {\n      var hash = this.hash;\n      this.hash = undefined;\n\n      if (this.options.stringParams) {\n        this.register('hashContexts', '{' + hash.contexts.join(',') + '}');\n        this.register('hashTypes', '{' + hash.types.join(',') + '}');\n      }\n      this.push('{\\n    ' + hash.values.join(',\\n    ') + '\\n  }');\n    },\n\n    // [pushString]\n    //\n    // On stack, before: ...\n    // On stack, after: quotedString(string), ...\n    //\n    // Push a quoted version of `string` onto the stack\n    pushString: function(string) {\n      this.pushStackLiteral(this.quotedString(string));\n    },\n\n    // [push]\n    //\n    // On stack, before: ...\n    // On stack, after: expr, ...\n    //\n    // Push an expression onto the stack\n    push: function(expr) {\n      this.inlineStack.push(expr);\n      return expr;\n    },\n\n    // [pushLiteral]\n    //\n    // On stack, before: ...\n    // On stack, after: value, ...\n    //\n    // Pushes a value onto the stack. This operation prevents\n    // the compiler from creating a temporary variable to hold\n    // it.\n    pushLiteral: function(value) {\n      this.pushStackLiteral(value);\n    },\n\n    // [pushProgram]\n    //\n    // On stack, before: ...\n    // On stack, after: program(guid), ...\n    //\n    // Push a program expression onto the stack. This takes\n    // a compile-time guid and converts it into a runtime-accessible\n    // expression.\n    pushProgram: function(guid) {\n      if (guid != null) {\n        this.pushStackLiteral(this.programExpression(guid));\n      } else {\n        this.pushStackLiteral(null);\n      }\n    },\n\n    // [invokeHelper]\n    //\n    // On stack, before: hash, inverse, program, params..., ...\n    // On stack, after: result of helper invocation\n    //\n    // Pops off the helper's parameters, invokes the helper,\n    // and pushes the helper's return value onto the stack.\n    //\n    // If the helper is not found, `helperMissing` is called.\n    invokeHelper: function(paramSize, name) {\n      this.context.aliases.helperMissing = 'helpers.helperMissing';\n\n      var helper = this.lastHelper = this.setupHelper(paramSize, name, true);\n      var nonHelper = this.nameLookup('depth' + this.lastContext, name, 'context');\n\n      this.push(helper.name + ' || ' + nonHelper);\n      this.replaceStack(function(name) {\n        return name + ' ? ' + name + '.call(' +\n            helper.callParams + \") \" + \": helperMissing.call(\" +\n            helper.helperMissingParams + \")\";\n      });\n    },\n\n    // [invokeKnownHelper]\n    //\n    // On stack, before: hash, inverse, program, params..., ...\n    // On stack, after: result of helper invocation\n    //\n    // This operation is used when the helper is known to exist,\n    // so a `helperMissing` fallback is not required.\n    invokeKnownHelper: function(paramSize, name) {\n      var helper = this.setupHelper(paramSize, name);\n      this.push(helper.name + \".call(\" + helper.callParams + \")\");\n    },\n\n    // [invokeAmbiguous]\n    //\n    // On stack, before: hash, inverse, program, params..., ...\n    // On stack, after: result of disambiguation\n    //\n    // This operation is used when an expression like `{{foo}}`\n    // is provided, but we don't know at compile-time whether it\n    // is a helper or a path.\n    //\n    // This operation emits more code than the other options,\n    // and can be avoided by passing the `knownHelpers` and\n    // `knownHelpersOnly` flags at compile-time.\n    invokeAmbiguous: function(name, helperCall) {\n      this.context.aliases.functionType = '\"function\"';\n\n      this.pushStackLiteral('{}');    // Hash value\n      var helper = this.setupHelper(0, name, helperCall);\n\n      var helperName = this.lastHelper = this.nameLookup('helpers', name, 'helper');\n\n      var nonHelper = this.nameLookup('depth' + this.lastContext, name, 'context');\n      var nextStack = this.nextStack();\n\n      this.pushSource('if (' + nextStack + ' = ' + helperName + ') { ' + nextStack + ' = ' + nextStack + '.call(' + helper.callParams + '); }');\n      this.pushSource('else { ' + nextStack + ' = ' + nonHelper + '; ' + nextStack + ' = typeof ' + nextStack + ' === functionType ? ' + nextStack + '.call(' + helper.callParams + ') : ' + nextStack + '; }');\n    },\n\n    // [invokePartial]\n    //\n    // On stack, before: context, ...\n    // On stack after: result of partial invocation\n    //\n    // This operation pops off a context, invokes a partial with that context,\n    // and pushes the result of the invocation back.\n    invokePartial: function(name) {\n      var params = [this.nameLookup('partials', name, 'partial'), \"'\" + name + \"'\", this.popStack(), \"helpers\", \"partials\"];\n\n      if (this.options.data) {\n        params.push(\"data\");\n      }\n\n      this.context.aliases.self = \"this\";\n      this.push(\"self.invokePartial(\" + params.join(\", \") + \")\");\n    },\n\n    // [assignToHash]\n    //\n    // On stack, before: value, hash, ...\n    // On stack, after: hash, ...\n    //\n    // Pops a value and hash off the stack, assigns `hash[key] = value`\n    // and pushes the hash back onto the stack.\n    assignToHash: function(key) {\n      var value = this.popStack(),\n          context,\n          type;\n\n      if (this.options.stringParams) {\n        type = this.popStack();\n        context = this.popStack();\n      }\n\n      var hash = this.hash;\n      if (context) {\n        hash.contexts.push(\"'\" + key + \"': \" + context);\n      }\n      if (type) {\n        hash.types.push(\"'\" + key + \"': \" + type);\n      }\n      hash.values.push(\"'\" + key + \"': (\" + value + \")\");\n    },\n\n    // HELPERS\n\n    compiler: JavaScriptCompiler,\n\n    compileChildren: function(environment, options) {\n      var children = environment.children, child, compiler;\n\n      for(var i=0, l=children.length; i<l; i++) {\n        child = children[i];\n        compiler = new this.compiler();\n\n        var index = this.matchExistingProgram(child);\n\n        if (index == null) {\n          this.context.programs.push('');     // Placeholder to prevent name conflicts for nested children\n          index = this.context.programs.length;\n          child.index = index;\n          child.name = 'program' + index;\n          this.context.programs[index] = compiler.compile(child, options, this.context);\n          this.context.environments[index] = child;\n        } else {\n          child.index = index;\n          child.name = 'program' + index;\n        }\n      }\n    },\n    matchExistingProgram: function(child) {\n      for (var i = 0, len = this.context.environments.length; i < len; i++) {\n        var environment = this.context.environments[i];\n        if (environment && environment.equals(child)) {\n          return i;\n        }\n      }\n    },\n\n    programExpression: function(guid) {\n      this.context.aliases.self = \"this\";\n\n      if(guid == null) {\n        return \"self.noop\";\n      }\n\n      var child = this.environment.children[guid],\n          depths = child.depths.list, depth;\n\n      var programParams = [child.index, child.name, \"data\"];\n\n      for(var i=0, l = depths.length; i<l; i++) {\n        depth = depths[i];\n\n        if(depth === 1) { programParams.push(\"depth0\"); }\n        else { programParams.push(\"depth\" + (depth - 1)); }\n      }\n\n      return (depths.length === 0 ? \"self.program(\" : \"self.programWithDepth(\") + programParams.join(\", \") + \")\";\n    },\n\n    register: function(name, val) {\n      this.useRegister(name);\n      this.pushSource(name + \" = \" + val + \";\");\n    },\n\n    useRegister: function(name) {\n      if(!this.registers[name]) {\n        this.registers[name] = true;\n        this.registers.list.push(name);\n      }\n    },\n\n    pushStackLiteral: function(item) {\n      return this.push(new Literal(item));\n    },\n\n    pushSource: function(source) {\n      if (this.pendingContent) {\n        this.source.push(this.appendToBuffer(this.quotedString(this.pendingContent)));\n        this.pendingContent = undefined;\n      }\n\n      if (source) {\n        this.source.push(source);\n      }\n    },\n\n    pushStack: function(item) {\n      this.flushInline();\n\n      var stack = this.incrStack();\n      if (item) {\n        this.pushSource(stack + \" = \" + item + \";\");\n      }\n      this.compileStack.push(stack);\n      return stack;\n    },\n\n    replaceStack: function(callback) {\n      var prefix = '',\n          inline = this.isInline(),\n          stack;\n\n      // If we are currently inline then we want to merge the inline statement into the\n      // replacement statement via ','\n      if (inline) {\n        var top = this.popStack(true);\n\n        if (top instanceof Literal) {\n          // Literals do not need to be inlined\n          stack = top.value;\n        } else {\n          // Get or create the current stack name for use by the inline\n          var name = this.stackSlot ? this.topStackName() : this.incrStack();\n\n          prefix = '(' + this.push(name) + ' = ' + top + '),';\n          stack = this.topStack();\n        }\n      } else {\n        stack = this.topStack();\n      }\n\n      var item = callback.call(this, stack);\n\n      if (inline) {\n        if (this.inlineStack.length || this.compileStack.length) {\n          this.popStack();\n        }\n        this.push('(' + prefix + item + ')');\n      } else {\n        // Prevent modification of the context depth variable. Through replaceStack\n        if (!/^stack/.test(stack)) {\n          stack = this.nextStack();\n        }\n\n        this.pushSource(stack + \" = (\" + prefix + item + \");\");\n      }\n      return stack;\n    },\n\n    nextStack: function() {\n      return this.pushStack();\n    },\n\n    incrStack: function() {\n      this.stackSlot++;\n      if(this.stackSlot > this.stackVars.length) { this.stackVars.push(\"stack\" + this.stackSlot); }\n      return this.topStackName();\n    },\n    topStackName: function() {\n      return \"stack\" + this.stackSlot;\n    },\n    flushInline: function() {\n      var inlineStack = this.inlineStack;\n      if (inlineStack.length) {\n        this.inlineStack = [];\n        for (var i = 0, len = inlineStack.length; i < len; i++) {\n          var entry = inlineStack[i];\n          if (entry instanceof Literal) {\n            this.compileStack.push(entry);\n          } else {\n            this.pushStack(entry);\n          }\n        }\n      }\n    },\n    isInline: function() {\n      return this.inlineStack.length;\n    },\n\n    popStack: function(wrapped) {\n      var inline = this.isInline(),\n          item = (inline ? this.inlineStack : this.compileStack).pop();\n\n      if (!wrapped && (item instanceof Literal)) {\n        return item.value;\n      } else {\n        if (!inline) {\n          this.stackSlot--;\n        }\n        return item;\n      }\n    },\n\n    topStack: function(wrapped) {\n      var stack = (this.isInline() ? this.inlineStack : this.compileStack),\n          item = stack[stack.length - 1];\n\n      if (!wrapped && (item instanceof Literal)) {\n        return item.value;\n      } else {\n        return item;\n      }\n    },\n\n    quotedString: function(str) {\n      return '\"' + str\n        .replace(/\\\\/g, '\\\\\\\\')\n        .replace(/\"/g, '\\\\\"')\n        .replace(/\\n/g, '\\\\n')\n        .replace(/\\r/g, '\\\\r')\n        .replace(/\\u2028/g, '\\\\u2028')   // Per Ecma-262 7.3 + 7.8.4\n        .replace(/\\u2029/g, '\\\\u2029') + '\"';\n    },\n\n    setupHelper: function(paramSize, name, missingParams) {\n      var params = [];\n      this.setupParams(paramSize, params, missingParams);\n      var foundHelper = this.nameLookup('helpers', name, 'helper');\n\n      return {\n        params: params,\n        name: foundHelper,\n        callParams: [\"depth0\"].concat(params).join(\", \"),\n        helperMissingParams: missingParams && [\"depth0\", this.quotedString(name)].concat(params).join(\", \")\n      };\n    },\n\n    // the params and contexts arguments are passed in arrays\n    // to fill in\n    setupParams: function(paramSize, params, useRegister) {\n      var options = [], contexts = [], types = [], param, inverse, program;\n\n      options.push(\"hash:\" + this.popStack());\n\n      inverse = this.popStack();\n      program = this.popStack();\n\n      // Avoid setting fn and inverse if neither are set. This allows\n      // helpers to do a check for `if (options.fn)`\n      if (program || inverse) {\n        if (!program) {\n          this.context.aliases.self = \"this\";\n          program = \"self.noop\";\n        }\n\n        if (!inverse) {\n         this.context.aliases.self = \"this\";\n          inverse = \"self.noop\";\n        }\n\n        options.push(\"inverse:\" + inverse);\n        options.push(\"fn:\" + program);\n      }\n\n      for(var i=0; i<paramSize; i++) {\n        param = this.popStack();\n        params.push(param);\n\n        if(this.options.stringParams) {\n          types.push(this.popStack());\n          contexts.push(this.popStack());\n        }\n      }\n\n      if (this.options.stringParams) {\n        options.push(\"contexts:[\" + contexts.join(\",\") + \"]\");\n        options.push(\"types:[\" + types.join(\",\") + \"]\");\n        options.push(\"hashContexts:hashContexts\");\n        options.push(\"hashTypes:hashTypes\");\n      }\n\n      if(this.options.data) {\n        options.push(\"data:data\");\n      }\n\n      options = \"{\" + options.join(\",\") + \"}\";\n      if (useRegister) {\n        this.register('options', options);\n        params.push('options');\n      } else {\n        params.push(options);\n      }\n      return params.join(\", \");\n    }\n  };\n\n  var reservedWords = (\n    \"break else new var\" +\n    \" case finally return void\" +\n    \" catch for switch while\" +\n    \" continue function this with\" +\n    \" default if throw\" +\n    \" delete in try\" +\n    \" do instanceof typeof\" +\n    \" abstract enum int short\" +\n    \" boolean export interface static\" +\n    \" byte extends long super\" +\n    \" char final native synchronized\" +\n    \" class float package throws\" +\n    \" const goto private transient\" +\n    \" debugger implements protected volatile\" +\n    \" double import public let yield\"\n  ).split(\" \");\n\n  var compilerWords = JavaScriptCompiler.RESERVED_WORDS = {};\n\n  for(var i=0, l=reservedWords.length; i<l; i++) {\n    compilerWords[reservedWords[i]] = true;\n  }\n\n  JavaScriptCompiler.isValidJavaScriptVariableName = function(name) {\n    if(!JavaScriptCompiler.RESERVED_WORDS[name] && /^[a-zA-Z_$][0-9a-zA-Z_$]+$/.test(name)) {\n      return true;\n    }\n    return false;\n  };\n\n  __exports__ = JavaScriptCompiler;\n  return __exports__;\n})(__module2__);\n\n// handlebars/compiler/compiler.js\nvar __module10__ = (function(__dependency1__, __dependency2__, __dependency3__, __dependency4__) {\n  \"use strict\";\n  var __exports__ = {};\n  var Exception = __dependency1__;\n  var parse = __dependency2__.parse;\n  var JavaScriptCompiler = __dependency3__;\n  var AST = __dependency4__;\n\n  function Compiler() {}\n\n  __exports__.Compiler = Compiler;// the foundHelper register will disambiguate helper lookup from finding a\n  // function in a context. This is necessary for mustache compatibility, which\n  // requires that context functions in blocks are evaluated by blockHelperMissing,\n  // and then proceed as if the resulting value was provided to blockHelperMissing.\n\n  Compiler.prototype = {\n    compiler: Compiler,\n\n    disassemble: function() {\n      var opcodes = this.opcodes, opcode, out = [], params, param;\n\n      for (var i=0, l=opcodes.length; i<l; i++) {\n        opcode = opcodes[i];\n\n        if (opcode.opcode === 'DECLARE') {\n          out.push(\"DECLARE \" + opcode.name + \"=\" + opcode.value);\n        } else {\n          params = [];\n          for (var j=0; j<opcode.args.length; j++) {\n            param = opcode.args[j];\n            if (typeof param === \"string\") {\n              param = \"\\\"\" + param.replace(\"\\n\", \"\\\\n\") + \"\\\"\";\n            }\n            params.push(param);\n          }\n          out.push(opcode.opcode + \" \" + params.join(\" \"));\n        }\n      }\n\n      return out.join(\"\\n\");\n    },\n\n    equals: function(other) {\n      var len = this.opcodes.length;\n      if (other.opcodes.length !== len) {\n        return false;\n      }\n\n      for (var i = 0; i < len; i++) {\n        var opcode = this.opcodes[i],\n            otherOpcode = other.opcodes[i];\n        if (opcode.opcode !== otherOpcode.opcode || opcode.args.length !== otherOpcode.args.length) {\n          return false;\n        }\n        for (var j = 0; j < opcode.args.length; j++) {\n          if (opcode.args[j] !== otherOpcode.args[j]) {\n            return false;\n          }\n        }\n      }\n\n      len = this.children.length;\n      if (other.children.length !== len) {\n        return false;\n      }\n      for (i = 0; i < len; i++) {\n        if (!this.children[i].equals(other.children[i])) {\n          return false;\n        }\n      }\n\n      return true;\n    },\n\n    guid: 0,\n\n    compile: function(program, options) {\n      this.opcodes = [];\n      this.children = [];\n      this.depths = {list: []};\n      this.options = options;\n\n      // These changes will propagate to the other compiler components\n      var knownHelpers = this.options.knownHelpers;\n      this.options.knownHelpers = {\n        'helperMissing': true,\n        'blockHelperMissing': true,\n        'each': true,\n        'if': true,\n        'unless': true,\n        'with': true,\n        'log': true\n      };\n      if (knownHelpers) {\n        for (var name in knownHelpers) {\n          this.options.knownHelpers[name] = knownHelpers[name];\n        }\n      }\n\n      return this.accept(program);\n    },\n\n    accept: function(node) {\n      var strip = node.strip || {},\n          ret;\n      if (strip.left) {\n        this.opcode('strip');\n      }\n\n      ret = this[node.type](node);\n\n      if (strip.right) {\n        this.opcode('strip');\n      }\n\n      return ret;\n    },\n\n    program: function(program) {\n      var statements = program.statements;\n\n      for(var i=0, l=statements.length; i<l; i++) {\n        this.accept(statements[i]);\n      }\n      this.isSimple = l === 1;\n\n      this.depths.list = this.depths.list.sort(function(a, b) {\n        return a - b;\n      });\n\n      return this;\n    },\n\n    compileProgram: function(program) {\n      var result = new this.compiler().compile(program, this.options);\n      var guid = this.guid++, depth;\n\n      this.usePartial = this.usePartial || result.usePartial;\n\n      this.children[guid] = result;\n\n      for(var i=0, l=result.depths.list.length; i<l; i++) {\n        depth = result.depths.list[i];\n\n        if(depth < 2) { continue; }\n        else { this.addDepth(depth - 1); }\n      }\n\n      return guid;\n    },\n\n    block: function(block) {\n      var mustache = block.mustache,\n          program = block.program,\n          inverse = block.inverse;\n\n      if (program) {\n        program = this.compileProgram(program);\n      }\n\n      if (inverse) {\n        inverse = this.compileProgram(inverse);\n      }\n\n      var type = this.classifyMustache(mustache);\n\n      if (type === \"helper\") {\n        this.helperMustache(mustache, program, inverse);\n      } else if (type === \"simple\") {\n        this.simpleMustache(mustache);\n\n        // now that the simple mustache is resolved, we need to\n        // evaluate it by executing `blockHelperMissing`\n        this.opcode('pushProgram', program);\n        this.opcode('pushProgram', inverse);\n        this.opcode('emptyHash');\n        this.opcode('blockValue');\n      } else {\n        this.ambiguousMustache(mustache, program, inverse);\n\n        // now that the simple mustache is resolved, we need to\n        // evaluate it by executing `blockHelperMissing`\n        this.opcode('pushProgram', program);\n        this.opcode('pushProgram', inverse);\n        this.opcode('emptyHash');\n        this.opcode('ambiguousBlockValue');\n      }\n\n      this.opcode('append');\n    },\n\n    hash: function(hash) {\n      var pairs = hash.pairs, pair, val;\n\n      this.opcode('pushHash');\n\n      for(var i=0, l=pairs.length; i<l; i++) {\n        pair = pairs[i];\n        val  = pair[1];\n\n        if (this.options.stringParams) {\n          if(val.depth) {\n            this.addDepth(val.depth);\n          }\n          this.opcode('getContext', val.depth || 0);\n          this.opcode('pushStringParam', val.stringModeValue, val.type);\n        } else {\n          this.accept(val);\n        }\n\n        this.opcode('assignToHash', pair[0]);\n      }\n      this.opcode('popHash');\n    },\n\n    partial: function(partial) {\n      var partialName = partial.partialName;\n      this.usePartial = true;\n\n      if(partial.context) {\n        this.ID(partial.context);\n      } else {\n        this.opcode('push', 'depth0');\n      }\n\n      this.opcode('invokePartial', partialName.name);\n      this.opcode('append');\n    },\n\n    content: function(content) {\n      this.opcode('appendContent', content.string);\n    },\n\n    mustache: function(mustache) {\n      var options = this.options;\n      var type = this.classifyMustache(mustache);\n\n      if (type === \"simple\") {\n        this.simpleMustache(mustache);\n      } else if (type === \"helper\") {\n        this.helperMustache(mustache);\n      } else {\n        this.ambiguousMustache(mustache);\n      }\n\n      if(mustache.escaped && !options.noEscape) {\n        this.opcode('appendEscaped');\n      } else {\n        this.opcode('append');\n      }\n    },\n\n    ambiguousMustache: function(mustache, program, inverse) {\n      var id = mustache.id,\n          name = id.parts[0],\n          isBlock = program != null || inverse != null;\n\n      this.opcode('getContext', id.depth);\n\n      this.opcode('pushProgram', program);\n      this.opcode('pushProgram', inverse);\n\n      this.opcode('invokeAmbiguous', name, isBlock);\n    },\n\n    simpleMustache: function(mustache) {\n      var id = mustache.id;\n\n      if (id.type === 'DATA') {\n        this.DATA(id);\n      } else if (id.parts.length) {\n        this.ID(id);\n      } else {\n        // Simplified ID for `this`\n        this.addDepth(id.depth);\n        this.opcode('getContext', id.depth);\n        this.opcode('pushContext');\n      }\n\n      this.opcode('resolvePossibleLambda');\n    },\n\n    helperMustache: function(mustache, program, inverse) {\n      var params = this.setupFullMustacheParams(mustache, program, inverse),\n          name = mustache.id.parts[0];\n\n      if (this.options.knownHelpers[name]) {\n        this.opcode('invokeKnownHelper', params.length, name);\n      } else if (this.options.knownHelpersOnly) {\n        throw new Error(\"You specified knownHelpersOnly, but used the unknown helper \" + name);\n      } else {\n        this.opcode('invokeHelper', params.length, name);\n      }\n    },\n\n    ID: function(id) {\n      this.addDepth(id.depth);\n      this.opcode('getContext', id.depth);\n\n      var name = id.parts[0];\n      if (!name) {\n        this.opcode('pushContext');\n      } else {\n        this.opcode('lookupOnContext', id.parts[0]);\n      }\n\n      for(var i=1, l=id.parts.length; i<l; i++) {\n        this.opcode('lookup', id.parts[i]);\n      }\n    },\n\n    DATA: function(data) {\n      this.options.data = true;\n      if (data.id.isScoped || data.id.depth) {\n        throw new Exception('Scoped data references are not supported: ' + data.original);\n      }\n\n      this.opcode('lookupData');\n      var parts = data.id.parts;\n      for(var i=0, l=parts.length; i<l; i++) {\n        this.opcode('lookup', parts[i]);\n      }\n    },\n\n    STRING: function(string) {\n      this.opcode('pushString', string.string);\n    },\n\n    INTEGER: function(integer) {\n      this.opcode('pushLiteral', integer.integer);\n    },\n\n    BOOLEAN: function(bool) {\n      this.opcode('pushLiteral', bool.bool);\n    },\n\n    comment: function() {},\n\n    // HELPERS\n    opcode: function(name) {\n      this.opcodes.push({ opcode: name, args: [].slice.call(arguments, 1) });\n    },\n\n    declare: function(name, value) {\n      this.opcodes.push({ opcode: 'DECLARE', name: name, value: value });\n    },\n\n    addDepth: function(depth) {\n      if(isNaN(depth)) { throw new Error(\"EWOT\"); }\n      if(depth === 0) { return; }\n\n      if(!this.depths[depth]) {\n        this.depths[depth] = true;\n        this.depths.list.push(depth);\n      }\n    },\n\n    classifyMustache: function(mustache) {\n      var isHelper   = mustache.isHelper;\n      var isEligible = mustache.eligibleHelper;\n      var options    = this.options;\n\n      // if ambiguous, we can possibly resolve the ambiguity now\n      if (isEligible && !isHelper) {\n        var name = mustache.id.parts[0];\n\n        if (options.knownHelpers[name]) {\n          isHelper = true;\n        } else if (options.knownHelpersOnly) {\n          isEligible = false;\n        }\n      }\n\n      if (isHelper) { return \"helper\"; }\n      else if (isEligible) { return \"ambiguous\"; }\n      else { return \"simple\"; }\n    },\n\n    pushParams: function(params) {\n      var i = params.length, param;\n\n      while(i--) {\n        param = params[i];\n\n        if(this.options.stringParams) {\n          if(param.depth) {\n            this.addDepth(param.depth);\n          }\n\n          this.opcode('getContext', param.depth || 0);\n          this.opcode('pushStringParam', param.stringModeValue, param.type);\n        } else {\n          this[param.type](param);\n        }\n      }\n    },\n\n    setupMustacheParams: function(mustache) {\n      var params = mustache.params;\n      this.pushParams(params);\n\n      if(mustache.hash) {\n        this.hash(mustache.hash);\n      } else {\n        this.opcode('emptyHash');\n      }\n\n      return params;\n    },\n\n    // this will replace setupMustacheParams when we're done\n    setupFullMustacheParams: function(mustache, program, inverse) {\n      var params = mustache.params;\n      this.pushParams(params);\n\n      this.opcode('pushProgram', program);\n      this.opcode('pushProgram', inverse);\n\n      if(mustache.hash) {\n        this.hash(mustache.hash);\n      } else {\n        this.opcode('emptyHash');\n      }\n\n      return params;\n    }\n  };\n\n  function precompile(input, options) {\n    if (input == null || (typeof input !== 'string' && input.constructor !== AST.ProgramNode)) {\n      throw new Exception(\"You must pass a string or Handlebars AST to Handlebars.precompile. You passed \" + input);\n    }\n\n    options = options || {};\n    if (!('data' in options)) {\n      options.data = true;\n    }\n\n    var ast = parse(input);\n    var environment = new Compiler().compile(ast, options);\n    return new JavaScriptCompiler().compile(environment, options);\n  }\n\n  __exports__.precompile = precompile;function compile(input, options, env) {\n    if (input == null || (typeof input !== 'string' && input.constructor !== AST.ProgramNode)) {\n      throw new Exception(\"You must pass a string or Handlebars AST to Handlebars.compile. You passed \" + input);\n    }\n\n    options = options || {};\n\n    if (!('data' in options)) {\n      options.data = true;\n    }\n\n    var compiled;\n\n    function compileInput() {\n      var ast = parse(input);\n      var environment = new Compiler().compile(ast, options);\n      var templateSpec = new JavaScriptCompiler().compile(environment, options, undefined, true);\n      return env.template(templateSpec);\n    }\n\n    // Template is only compiled on first use and cached after that point.\n    return function(context, options) {\n      if (!compiled) {\n        compiled = compileInput();\n      }\n      return compiled.call(this, context, options);\n    };\n  }\n\n  __exports__.compile = compile;\n  return __exports__;\n})(__module5__, __module8__, __module11__, __module7__);\n\n// handlebars.js\nvar __module0__ = (function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__) {\n  \"use strict\";\n  var __exports__;\n  /*globals Handlebars: true */\n  var Handlebars = __dependency1__;\n\n  // Compiler imports\n  var AST = __dependency2__;\n  var Parser = __dependency3__.parser;\n  var parse = __dependency3__.parse;\n  var Compiler = __dependency4__.Compiler;\n  var compile = __dependency4__.compile;\n  var precompile = __dependency4__.precompile;\n  var JavaScriptCompiler = __dependency5__;\n\n  var _create = Handlebars.create;\n  var create = function() {\n    var hb = _create();\n\n    hb.compile = function(input, options) {\n      return compile(input, options, hb);\n    };\n    hb.precompile = precompile;\n\n    hb.AST = AST;\n    hb.Compiler = Compiler;\n    hb.JavaScriptCompiler = JavaScriptCompiler;\n    hb.Parser = Parser;\n    hb.parse = parse;\n\n    return hb;\n  };\n\n  Handlebars = create();\n  Handlebars.create = create;\n\n  __exports__ = Handlebars;\n  return __exports__;\n})(__module1__, __module7__, __module8__, __module10__, __module11__);\n\n  return __module0__;\n})();\n"
  },
  {
    "path": "public/backend/vendors/js/forms/select/select2.full.js",
    "content": "/*!\n * Select2 4.0.10\n * https://select2.github.io\n *\n * Released under the MIT license\n * https://github.com/select2/select2/blob/master/LICENSE.md\n */\n;(function (factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module.\n    define(['jquery'], factory);\n  } else if (typeof module === 'object' && module.exports) {\n    // Node/CommonJS\n    module.exports = function (root, jQuery) {\n      if (jQuery === undefined) {\n        // require('jQuery') returns a factory that requires window to\n        // build a jQuery instance, we normalize how we use modules\n        // that require this pattern but the window provided is a noop\n        // if it's defined (how jquery works)\n        if (typeof window !== 'undefined') {\n          jQuery = require('jquery');\n        }\n        else {\n          jQuery = require('jquery')(root);\n        }\n      }\n      factory(jQuery);\n      return jQuery;\n    };\n  } else {\n    // Browser globals\n    factory(jQuery);\n  }\n} (function (jQuery) {\n  // This is needed so we can catch the AMD loader configuration and use it\n  // The inner file should be wrapped (by `banner.start.js`) in a function that\n  // returns the AMD loader references.\n  var S2 =(function () {\n  // Restore the Select2 AMD loader so it can be used\n  // Needed mostly in the language files, where the loader is not inserted\n  if (jQuery && jQuery.fn && jQuery.fn.select2 && jQuery.fn.select2.amd) {\n    var S2 = jQuery.fn.select2.amd;\n  }\nvar S2;(function () { if (!S2 || !S2.requirejs) {\nif (!S2) { S2 = {}; } else { require = S2; }\n/**\n * @license almond 0.3.3 Copyright jQuery Foundation and other contributors.\n * Released under MIT license, http://github.com/requirejs/almond/LICENSE\n */\n//Going sloppy to avoid 'use strict' string cost, but strict practices should\n//be followed.\n/*global setTimeout: false */\n\nvar requirejs, require, define;\n(function (undef) {\n    var main, req, makeMap, handlers,\n        defined = {},\n        waiting = {},\n        config = {},\n        defining = {},\n        hasOwn = Object.prototype.hasOwnProperty,\n        aps = [].slice,\n        jsSuffixRegExp = /\\.js$/;\n\n    function hasProp(obj, prop) {\n        return hasOwn.call(obj, prop);\n    }\n\n    /**\n     * Given a relative module name, like ./something, normalize it to\n     * a real name that can be mapped to a path.\n     * @param {String} name the relative name\n     * @param {String} baseName a real name that the name arg is relative\n     * to.\n     * @returns {String} normalized name\n     */\n    function normalize(name, baseName) {\n        var nameParts, nameSegment, mapValue, foundMap, lastIndex,\n            foundI, foundStarMap, starI, i, j, part, normalizedBaseParts,\n            baseParts = baseName && baseName.split(\"/\"),\n            map = config.map,\n            starMap = (map && map['*']) || {};\n\n        //Adjust any relative paths.\n        if (name) {\n            name = name.split('/');\n            lastIndex = name.length - 1;\n\n            // If wanting node ID compatibility, strip .js from end\n            // of IDs. Have to do this here, and not in nameToUrl\n            // because node allows either .js or non .js to map\n            // to same file.\n            if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) {\n                name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, '');\n            }\n\n            // Starts with a '.' so need the baseName\n            if (name[0].charAt(0) === '.' && baseParts) {\n                //Convert baseName to array, and lop off the last part,\n                //so that . matches that 'directory' and not name of the baseName's\n                //module. For instance, baseName of 'one/two/three', maps to\n                //'one/two/three.js', but we want the directory, 'one/two' for\n                //this normalization.\n                normalizedBaseParts = baseParts.slice(0, baseParts.length - 1);\n                name = normalizedBaseParts.concat(name);\n            }\n\n            //start trimDots\n            for (i = 0; i < name.length; i++) {\n                part = name[i];\n                if (part === '.') {\n                    name.splice(i, 1);\n                    i -= 1;\n                } else if (part === '..') {\n                    // If at the start, or previous value is still ..,\n                    // keep them so that when converted to a path it may\n                    // still work when converted to a path, even though\n                    // as an ID it is less than ideal. In larger point\n                    // releases, may be better to just kick out an error.\n                    if (i === 0 || (i === 1 && name[2] === '..') || name[i - 1] === '..') {\n                        continue;\n                    } else if (i > 0) {\n                        name.splice(i - 1, 2);\n                        i -= 2;\n                    }\n                }\n            }\n            //end trimDots\n\n            name = name.join('/');\n        }\n\n        //Apply map config if available.\n        if ((baseParts || starMap) && map) {\n            nameParts = name.split('/');\n\n            for (i = nameParts.length; i > 0; i -= 1) {\n                nameSegment = nameParts.slice(0, i).join(\"/\");\n\n                if (baseParts) {\n                    //Find the longest baseName segment match in the config.\n                    //So, do joins on the biggest to smallest lengths of baseParts.\n                    for (j = baseParts.length; j > 0; j -= 1) {\n                        mapValue = map[baseParts.slice(0, j).join('/')];\n\n                        //baseName segment has  config, find if it has one for\n                        //this name.\n                        if (mapValue) {\n                            mapValue = mapValue[nameSegment];\n                            if (mapValue) {\n                                //Match, update name to the new value.\n                                foundMap = mapValue;\n                                foundI = i;\n                                break;\n                            }\n                        }\n                    }\n                }\n\n                if (foundMap) {\n                    break;\n                }\n\n                //Check for a star map match, but just hold on to it,\n                //if there is a shorter segment match later in a matching\n                //config, then favor over this star map.\n                if (!foundStarMap && starMap && starMap[nameSegment]) {\n                    foundStarMap = starMap[nameSegment];\n                    starI = i;\n                }\n            }\n\n            if (!foundMap && foundStarMap) {\n                foundMap = foundStarMap;\n                foundI = starI;\n            }\n\n            if (foundMap) {\n                nameParts.splice(0, foundI, foundMap);\n                name = nameParts.join('/');\n            }\n        }\n\n        return name;\n    }\n\n    function makeRequire(relName, forceSync) {\n        return function () {\n            //A version of a require function that passes a moduleName\n            //value for items that may need to\n            //look up paths relative to the moduleName\n            var args = aps.call(arguments, 0);\n\n            //If first arg is not require('string'), and there is only\n            //one arg, it is the array form without a callback. Insert\n            //a null so that the following concat is correct.\n            if (typeof args[0] !== 'string' && args.length === 1) {\n                args.push(null);\n            }\n            return req.apply(undef, args.concat([relName, forceSync]));\n        };\n    }\n\n    function makeNormalize(relName) {\n        return function (name) {\n            return normalize(name, relName);\n        };\n    }\n\n    function makeLoad(depName) {\n        return function (value) {\n            defined[depName] = value;\n        };\n    }\n\n    function callDep(name) {\n        if (hasProp(waiting, name)) {\n            var args = waiting[name];\n            delete waiting[name];\n            defining[name] = true;\n            main.apply(undef, args);\n        }\n\n        if (!hasProp(defined, name) && !hasProp(defining, name)) {\n            throw new Error('No ' + name);\n        }\n        return defined[name];\n    }\n\n    //Turns a plugin!resource to [plugin, resource]\n    //with the plugin being undefined if the name\n    //did not have a plugin prefix.\n    function splitPrefix(name) {\n        var prefix,\n            index = name ? name.indexOf('!') : -1;\n        if (index > -1) {\n            prefix = name.substring(0, index);\n            name = name.substring(index + 1, name.length);\n        }\n        return [prefix, name];\n    }\n\n    //Creates a parts array for a relName where first part is plugin ID,\n    //second part is resource ID. Assumes relName has already been normalized.\n    function makeRelParts(relName) {\n        return relName ? splitPrefix(relName) : [];\n    }\n\n    /**\n     * Makes a name map, normalizing the name, and using a plugin\n     * for normalization if necessary. Grabs a ref to plugin\n     * too, as an optimization.\n     */\n    makeMap = function (name, relParts) {\n        var plugin,\n            parts = splitPrefix(name),\n            prefix = parts[0],\n            relResourceName = relParts[1];\n\n        name = parts[1];\n\n        if (prefix) {\n            prefix = normalize(prefix, relResourceName);\n            plugin = callDep(prefix);\n        }\n\n        //Normalize according\n        if (prefix) {\n            if (plugin && plugin.normalize) {\n                name = plugin.normalize(name, makeNormalize(relResourceName));\n            } else {\n                name = normalize(name, relResourceName);\n            }\n        } else {\n            name = normalize(name, relResourceName);\n            parts = splitPrefix(name);\n            prefix = parts[0];\n            name = parts[1];\n            if (prefix) {\n                plugin = callDep(prefix);\n            }\n        }\n\n        //Using ridiculous property names for space reasons\n        return {\n            f: prefix ? prefix + '!' + name : name, //fullName\n            n: name,\n            pr: prefix,\n            p: plugin\n        };\n    };\n\n    function makeConfig(name) {\n        return function () {\n            return (config && config.config && config.config[name]) || {};\n        };\n    }\n\n    handlers = {\n        require: function (name) {\n            return makeRequire(name);\n        },\n        exports: function (name) {\n            var e = defined[name];\n            if (typeof e !== 'undefined') {\n                return e;\n            } else {\n                return (defined[name] = {});\n            }\n        },\n        module: function (name) {\n            return {\n                id: name,\n                uri: '',\n                exports: defined[name],\n                config: makeConfig(name)\n            };\n        }\n    };\n\n    main = function (name, deps, callback, relName) {\n        var cjsModule, depName, ret, map, i, relParts,\n            args = [],\n            callbackType = typeof callback,\n            usingExports;\n\n        //Use name if no relName\n        relName = relName || name;\n        relParts = makeRelParts(relName);\n\n        //Call the callback to define the module, if necessary.\n        if (callbackType === 'undefined' || callbackType === 'function') {\n            //Pull out the defined dependencies and pass the ordered\n            //values to the callback.\n            //Default to [require, exports, module] if no deps\n            deps = !deps.length && callback.length ? ['require', 'exports', 'module'] : deps;\n            for (i = 0; i < deps.length; i += 1) {\n                map = makeMap(deps[i], relParts);\n                depName = map.f;\n\n                //Fast path CommonJS standard dependencies.\n                if (depName === \"require\") {\n                    args[i] = handlers.require(name);\n                } else if (depName === \"exports\") {\n                    //CommonJS module spec 1.1\n                    args[i] = handlers.exports(name);\n                    usingExports = true;\n                } else if (depName === \"module\") {\n                    //CommonJS module spec 1.1\n                    cjsModule = args[i] = handlers.module(name);\n                } else if (hasProp(defined, depName) ||\n                           hasProp(waiting, depName) ||\n                           hasProp(defining, depName)) {\n                    args[i] = callDep(depName);\n                } else if (map.p) {\n                    map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {});\n                    args[i] = defined[depName];\n                } else {\n                    throw new Error(name + ' missing ' + depName);\n                }\n            }\n\n            ret = callback ? callback.apply(defined[name], args) : undefined;\n\n            if (name) {\n                //If setting exports via \"module\" is in play,\n                //favor that over return value and exports. After that,\n                //favor a non-undefined return value over exports use.\n                if (cjsModule && cjsModule.exports !== undef &&\n                        cjsModule.exports !== defined[name]) {\n                    defined[name] = cjsModule.exports;\n                } else if (ret !== undef || !usingExports) {\n                    //Use the return value from the function.\n                    defined[name] = ret;\n                }\n            }\n        } else if (name) {\n            //May just be an object definition for the module. Only\n            //worry about defining if have a module name.\n            defined[name] = callback;\n        }\n    };\n\n    requirejs = require = req = function (deps, callback, relName, forceSync, alt) {\n        if (typeof deps === \"string\") {\n            if (handlers[deps]) {\n                //callback in this case is really relName\n                return handlers[deps](callback);\n            }\n            //Just return the module wanted. In this scenario, the\n            //deps arg is the module name, and second arg (if passed)\n            //is just the relName.\n            //Normalize module name, if it contains . or ..\n            return callDep(makeMap(deps, makeRelParts(callback)).f);\n        } else if (!deps.splice) {\n            //deps is a config object, not an array.\n            config = deps;\n            if (config.deps) {\n                req(config.deps, config.callback);\n            }\n            if (!callback) {\n                return;\n            }\n\n            if (callback.splice) {\n                //callback is an array, which means it is a dependency list.\n                //Adjust args if there are dependencies\n                deps = callback;\n                callback = relName;\n                relName = null;\n            } else {\n                deps = undef;\n            }\n        }\n\n        //Support require(['a'])\n        callback = callback || function () {};\n\n        //If relName is a function, it is an errback handler,\n        //so remove it.\n        if (typeof relName === 'function') {\n            relName = forceSync;\n            forceSync = alt;\n        }\n\n        //Simulate async callback;\n        if (forceSync) {\n            main(undef, deps, callback, relName);\n        } else {\n            //Using a non-zero value because of concern for what old browsers\n            //do, and latest browsers \"upgrade\" to 4 if lower value is used:\n            //http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout:\n            //If want a value immediately, use require('id') instead -- something\n            //that works in almond on the global level, but not guaranteed and\n            //unlikely to work in other AMD implementations.\n            setTimeout(function () {\n                main(undef, deps, callback, relName);\n            }, 4);\n        }\n\n        return req;\n    };\n\n    /**\n     * Just drops the config on the floor, but returns req in case\n     * the config return value is used.\n     */\n    req.config = function (cfg) {\n        return req(cfg);\n    };\n\n    /**\n     * Expose module registry for debugging and tooling\n     */\n    requirejs._defined = defined;\n\n    define = function (name, deps, callback) {\n        if (typeof name !== 'string') {\n            throw new Error('See almond README: incorrect module build, no module name');\n        }\n\n        //This module may not have dependencies\n        if (!deps.splice) {\n            //deps is not an array, so probably means\n            //an object literal or factory function for\n            //the value. Adjust args.\n            callback = deps;\n            deps = [];\n        }\n\n        if (!hasProp(defined, name) && !hasProp(waiting, name)) {\n            waiting[name] = [name, deps, callback];\n        }\n    };\n\n    define.amd = {\n        jQuery: true\n    };\n}());\n\nS2.requirejs = requirejs;S2.require = require;S2.define = define;\n}\n}());\nS2.define(\"almond\", function(){});\n\n/* global jQuery:false, $:false */\nS2.define('jquery',[],function () {\n  var _$ = jQuery || $;\n\n  if (_$ == null && console && console.error) {\n    console.error(\n      'Select2: An instance of jQuery or a jQuery-compatible library was not ' +\n      'found. Make sure that you are including jQuery before Select2 on your ' +\n      'web page.'\n    );\n  }\n\n  return _$;\n});\n\nS2.define('select2/utils',[\n  'jquery'\n], function ($) {\n  var Utils = {};\n\n  Utils.Extend = function (ChildClass, SuperClass) {\n    var __hasProp = {}.hasOwnProperty;\n\n    function BaseConstructor () {\n      this.constructor = ChildClass;\n    }\n\n    for (var key in SuperClass) {\n      if (__hasProp.call(SuperClass, key)) {\n        ChildClass[key] = SuperClass[key];\n      }\n    }\n\n    BaseConstructor.prototype = SuperClass.prototype;\n    ChildClass.prototype = new BaseConstructor();\n    ChildClass.__super__ = SuperClass.prototype;\n\n    return ChildClass;\n  };\n\n  function getMethods (theClass) {\n    var proto = theClass.prototype;\n\n    var methods = [];\n\n    for (var methodName in proto) {\n      var m = proto[methodName];\n\n      if (typeof m !== 'function') {\n        continue;\n      }\n\n      if (methodName === 'constructor') {\n        continue;\n      }\n\n      methods.push(methodName);\n    }\n\n    return methods;\n  }\n\n  Utils.Decorate = function (SuperClass, DecoratorClass) {\n    var decoratedMethods = getMethods(DecoratorClass);\n    var superMethods = getMethods(SuperClass);\n\n    function DecoratedClass () {\n      var unshift = Array.prototype.unshift;\n\n      var argCount = DecoratorClass.prototype.constructor.length;\n\n      var calledConstructor = SuperClass.prototype.constructor;\n\n      if (argCount > 0) {\n        unshift.call(arguments, SuperClass.prototype.constructor);\n\n        calledConstructor = DecoratorClass.prototype.constructor;\n      }\n\n      calledConstructor.apply(this, arguments);\n    }\n\n    DecoratorClass.displayName = SuperClass.displayName;\n\n    function ctr () {\n      this.constructor = DecoratedClass;\n    }\n\n    DecoratedClass.prototype = new ctr();\n\n    for (var m = 0; m < superMethods.length; m++) {\n      var superMethod = superMethods[m];\n\n      DecoratedClass.prototype[superMethod] =\n        SuperClass.prototype[superMethod];\n    }\n\n    var calledMethod = function (methodName) {\n      // Stub out the original method if it's not decorating an actual method\n      var originalMethod = function () {};\n\n      if (methodName in DecoratedClass.prototype) {\n        originalMethod = DecoratedClass.prototype[methodName];\n      }\n\n      var decoratedMethod = DecoratorClass.prototype[methodName];\n\n      return function () {\n        var unshift = Array.prototype.unshift;\n\n        unshift.call(arguments, originalMethod);\n\n        return decoratedMethod.apply(this, arguments);\n      };\n    };\n\n    for (var d = 0; d < decoratedMethods.length; d++) {\n      var decoratedMethod = decoratedMethods[d];\n\n      DecoratedClass.prototype[decoratedMethod] = calledMethod(decoratedMethod);\n    }\n\n    return DecoratedClass;\n  };\n\n  var Observable = function () {\n    this.listeners = {};\n  };\n\n  Observable.prototype.on = function (event, callback) {\n    this.listeners = this.listeners || {};\n\n    if (event in this.listeners) {\n      this.listeners[event].push(callback);\n    } else {\n      this.listeners[event] = [callback];\n    }\n  };\n\n  Observable.prototype.trigger = function (event) {\n    var slice = Array.prototype.slice;\n    var params = slice.call(arguments, 1);\n\n    this.listeners = this.listeners || {};\n\n    // Params should always come in as an array\n    if (params == null) {\n      params = [];\n    }\n\n    // If there are no arguments to the event, use a temporary object\n    if (params.length === 0) {\n      params.push({});\n    }\n\n    // Set the `_type` of the first object to the event\n    params[0]._type = event;\n\n    if (event in this.listeners) {\n      this.invoke(this.listeners[event], slice.call(arguments, 1));\n    }\n\n    if ('*' in this.listeners) {\n      this.invoke(this.listeners['*'], arguments);\n    }\n  };\n\n  Observable.prototype.invoke = function (listeners, params) {\n    for (var i = 0, len = listeners.length; i < len; i++) {\n      listeners[i].apply(this, params);\n    }\n  };\n\n  Utils.Observable = Observable;\n\n  Utils.generateChars = function (length) {\n    var chars = '';\n\n    for (var i = 0; i < length; i++) {\n      var randomChar = Math.floor(Math.random() * 36);\n      chars += randomChar.toString(36);\n    }\n\n    return chars;\n  };\n\n  Utils.bind = function (func, context) {\n    return function () {\n      func.apply(context, arguments);\n    };\n  };\n\n  Utils._convertData = function (data) {\n    for (var originalKey in data) {\n      var keys = originalKey.split('-');\n\n      var dataLevel = data;\n\n      if (keys.length === 1) {\n        continue;\n      }\n\n      for (var k = 0; k < keys.length; k++) {\n        var key = keys[k];\n\n        // Lowercase the first letter\n        // By default, dash-separated becomes camelCase\n        key = key.substring(0, 1).toLowerCase() + key.substring(1);\n\n        if (!(key in dataLevel)) {\n          dataLevel[key] = {};\n        }\n\n        if (k == keys.length - 1) {\n          dataLevel[key] = data[originalKey];\n        }\n\n        dataLevel = dataLevel[key];\n      }\n\n      delete data[originalKey];\n    }\n\n    return data;\n  };\n\n  Utils.hasScroll = function (index, el) {\n    // Adapted from the function created by @ShadowScripter\n    // and adapted by @BillBarry on the Stack Exchange Code Review website.\n    // The original code can be found at\n    // http://codereview.stackexchange.com/q/13338\n    // and was designed to be used with the Sizzle selector engine.\n\n    var $el = $(el);\n    var overflowX = el.style.overflowX;\n    var overflowY = el.style.overflowY;\n\n    //Check both x and y declarations\n    if (overflowX === overflowY &&\n        (overflowY === 'hidden' || overflowY === 'visible')) {\n      return false;\n    }\n\n    if (overflowX === 'scroll' || overflowY === 'scroll') {\n      return true;\n    }\n\n    return ($el.innerHeight() < el.scrollHeight ||\n      $el.innerWidth() < el.scrollWidth);\n  };\n\n  Utils.escapeMarkup = function (markup) {\n    var replaceMap = {\n      '\\\\': '&#92;',\n      '&': '&amp;',\n      '<': '&lt;',\n      '>': '&gt;',\n      '\"': '&quot;',\n      '\\'': '&#39;',\n      '/': '&#47;'\n    };\n\n    // Do not try to escape the markup if it's not a string\n    if (typeof markup !== 'string') {\n      return markup;\n    }\n\n    return String(markup).replace(/[&<>\"'\\/\\\\]/g, function (match) {\n      return replaceMap[match];\n    });\n  };\n\n  // Append an array of jQuery nodes to a given element.\n  Utils.appendMany = function ($element, $nodes) {\n    // jQuery 1.7.x does not support $.fn.append() with an array\n    // Fall back to a jQuery object collection using $.fn.add()\n    if ($.fn.jquery.substr(0, 3) === '1.7') {\n      var $jqNodes = $();\n\n      $.map($nodes, function (node) {\n        $jqNodes = $jqNodes.add(node);\n      });\n\n      $nodes = $jqNodes;\n    }\n\n    $element.append($nodes);\n  };\n\n  // Cache objects in Utils.__cache instead of $.data (see #4346)\n  Utils.__cache = {};\n\n  var id = 0;\n  Utils.GetUniqueElementId = function (element) {\n    // Get a unique element Id. If element has no id,\n    // creates a new unique number, stores it in the id\n    // attribute and returns the new id.\n    // If an id already exists, it simply returns it.\n\n    var select2Id = element.getAttribute('data-select2-id');\n    if (select2Id == null) {\n      // If element has id, use it.\n      if (element.id) {\n        select2Id = element.id;\n        element.setAttribute('data-select2-id', select2Id);\n      } else {\n        element.setAttribute('data-select2-id', ++id);\n        select2Id = id.toString();\n      }\n    }\n    return select2Id;\n  };\n\n  Utils.StoreData = function (element, name, value) {\n    // Stores an item in the cache for a specified element.\n    // name is the cache key.\n    var id = Utils.GetUniqueElementId(element);\n    if (!Utils.__cache[id]) {\n      Utils.__cache[id] = {};\n    }\n\n    Utils.__cache[id][name] = value;\n  };\n\n  Utils.GetData = function (element, name) {\n    // Retrieves a value from the cache by its key (name)\n    // name is optional. If no name specified, return\n    // all cache items for the specified element.\n    // and for a specified element.\n    var id = Utils.GetUniqueElementId(element);\n    if (name) {\n      if (Utils.__cache[id]) {\n        if (Utils.__cache[id][name] != null) {\n          return Utils.__cache[id][name];\n        }\n        return $(element).data(name); // Fallback to HTML5 data attribs.\n      }\n      return $(element).data(name); // Fallback to HTML5 data attribs.\n    } else {\n      return Utils.__cache[id];\n    }\n  };\n\n  Utils.RemoveData = function (element) {\n    // Removes all cached items for a specified element.\n    var id = Utils.GetUniqueElementId(element);\n    if (Utils.__cache[id] != null) {\n      delete Utils.__cache[id];\n    }\n\n    element.removeAttribute('data-select2-id');\n  };\n\n  return Utils;\n});\n\nS2.define('select2/results',[\n  'jquery',\n  './utils'\n], function ($, Utils) {\n  function Results ($element, options, dataAdapter) {\n    this.$element = $element;\n    this.data = dataAdapter;\n    this.options = options;\n\n    Results.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(Results, Utils.Observable);\n\n  Results.prototype.render = function () {\n    var $results = $(\n      '<ul class=\"select2-results__options\" role=\"listbox\"></ul>'\n    );\n\n    if (this.options.get('multiple')) {\n      $results.attr('aria-multiselectable', 'true');\n    }\n\n    this.$results = $results;\n\n    return $results;\n  };\n\n  Results.prototype.clear = function () {\n    this.$results.empty();\n  };\n\n  Results.prototype.displayMessage = function (params) {\n    var escapeMarkup = this.options.get('escapeMarkup');\n\n    this.clear();\n    this.hideLoading();\n\n    var $message = $(\n      '<li role=\"alert\" aria-live=\"assertive\"' +\n      ' class=\"select2-results__option\"></li>'\n    );\n\n    var message = this.options.get('translations').get(params.message);\n\n    $message.append(\n      escapeMarkup(\n        message(params.args)\n      )\n    );\n\n    $message[0].className += ' select2-results__message';\n\n    this.$results.append($message);\n  };\n\n  Results.prototype.hideMessages = function () {\n    this.$results.find('.select2-results__message').remove();\n  };\n\n  Results.prototype.append = function (data) {\n    this.hideLoading();\n\n    var $options = [];\n\n    if (data.results == null || data.results.length === 0) {\n      if (this.$results.children().length === 0) {\n        this.trigger('results:message', {\n          message: 'noResults'\n        });\n      }\n\n      return;\n    }\n\n    data.results = this.sort(data.results);\n\n    for (var d = 0; d < data.results.length; d++) {\n      var item = data.results[d];\n\n      var $option = this.option(item);\n\n      $options.push($option);\n    }\n\n    this.$results.append($options);\n  };\n\n  Results.prototype.position = function ($results, $dropdown) {\n    var $resultsContainer = $dropdown.find('.select2-results');\n    $resultsContainer.append($results);\n  };\n\n  Results.prototype.sort = function (data) {\n    var sorter = this.options.get('sorter');\n\n    return sorter(data);\n  };\n\n  Results.prototype.highlightFirstItem = function () {\n    var $options = this.$results\n      .find('.select2-results__option[aria-selected]');\n\n    var $selected = $options.filter('[aria-selected=true]');\n\n    // Check if there are any selected options\n    if ($selected.length > 0) {\n      // If there are selected options, highlight the first\n      $selected.first().trigger('mouseenter');\n    } else {\n      // If there are no selected options, highlight the first option\n      // in the dropdown\n      $options.first().trigger('mouseenter');\n    }\n\n    this.ensureHighlightVisible();\n  };\n\n  Results.prototype.setClasses = function () {\n    var self = this;\n\n    this.data.current(function (selected) {\n      var selectedIds = $.map(selected, function (s) {\n        return s.id.toString();\n      });\n\n      var $options = self.$results\n        .find('.select2-results__option[aria-selected]');\n\n      $options.each(function () {\n        var $option = $(this);\n\n        var item = Utils.GetData(this, 'data');\n\n        // id needs to be converted to a string when comparing\n        var id = '' + item.id;\n\n        if ((item.element != null && item.element.selected) ||\n            (item.element == null && $.inArray(id, selectedIds) > -1)) {\n          $option.attr('aria-selected', 'true');\n        } else {\n          $option.attr('aria-selected', 'false');\n        }\n      });\n\n    });\n  };\n\n  Results.prototype.showLoading = function (params) {\n    this.hideLoading();\n\n    var loadingMore = this.options.get('translations').get('searching');\n\n    var loading = {\n      disabled: true,\n      loading: true,\n      text: loadingMore(params)\n    };\n    var $loading = this.option(loading);\n    $loading.className += ' loading-results';\n\n    this.$results.prepend($loading);\n  };\n\n  Results.prototype.hideLoading = function () {\n    this.$results.find('.loading-results').remove();\n  };\n\n  Results.prototype.option = function (data) {\n    var option = document.createElement('li');\n    option.className = 'select2-results__option';\n\n    var attrs = {\n      'role': 'option',\n      'aria-selected': 'false'\n    };\n\n    var matches = window.Element.prototype.matches ||\n      window.Element.prototype.msMatchesSelector ||\n      window.Element.prototype.webkitMatchesSelector;\n\n    if ((data.element != null && matches.call(data.element, ':disabled')) ||\n        (data.element == null && data.disabled)) {\n      delete attrs['aria-selected'];\n      attrs['aria-disabled'] = 'true';\n    }\n\n    if (data.id == null) {\n      delete attrs['aria-selected'];\n    }\n\n    if (data._resultId != null) {\n      option.id = data._resultId;\n    }\n\n    if (data.title) {\n      option.title = data.title;\n    }\n\n    if (data.children) {\n      attrs.role = 'group';\n      attrs['aria-label'] = data.text;\n      delete attrs['aria-selected'];\n    }\n\n    for (var attr in attrs) {\n      var val = attrs[attr];\n\n      option.setAttribute(attr, val);\n    }\n\n    if (data.children) {\n      var $option = $(option);\n\n      var label = document.createElement('strong');\n      label.className = 'select2-results__group';\n\n      var $label = $(label);\n      this.template(data, label);\n\n      var $children = [];\n\n      for (var c = 0; c < data.children.length; c++) {\n        var child = data.children[c];\n\n        var $child = this.option(child);\n\n        $children.push($child);\n      }\n\n      var $childrenContainer = $('<ul></ul>', {\n        'class': 'select2-results__options select2-results__options--nested'\n      });\n\n      $childrenContainer.append($children);\n\n      $option.append(label);\n      $option.append($childrenContainer);\n    } else {\n      this.template(data, option);\n    }\n\n    Utils.StoreData(option, 'data', data);\n\n    return option;\n  };\n\n  Results.prototype.bind = function (container, $container) {\n    var self = this;\n\n    var id = container.id + '-results';\n\n    this.$results.attr('id', id);\n\n    container.on('results:all', function (params) {\n      self.clear();\n      self.append(params.data);\n\n      if (container.isOpen()) {\n        self.setClasses();\n        self.highlightFirstItem();\n      }\n    });\n\n    container.on('results:append', function (params) {\n      self.append(params.data);\n\n      if (container.isOpen()) {\n        self.setClasses();\n      }\n    });\n\n    container.on('query', function (params) {\n      self.hideMessages();\n      self.showLoading(params);\n    });\n\n    container.on('select', function () {\n      if (!container.isOpen()) {\n        return;\n      }\n\n      self.setClasses();\n\n      if (self.options.get('scrollAfterSelect')) {\n        self.highlightFirstItem();\n      }\n    });\n\n    container.on('unselect', function () {\n      if (!container.isOpen()) {\n        return;\n      }\n\n      self.setClasses();\n\n      if (self.options.get('scrollAfterSelect')) {\n        self.highlightFirstItem();\n      }\n    });\n\n    container.on('open', function () {\n      // When the dropdown is open, aria-expended=\"true\"\n      self.$results.attr('aria-expanded', 'true');\n      self.$results.attr('aria-hidden', 'false');\n\n      self.setClasses();\n      self.ensureHighlightVisible();\n    });\n\n    container.on('close', function () {\n      // When the dropdown is closed, aria-expended=\"false\"\n      self.$results.attr('aria-expanded', 'false');\n      self.$results.attr('aria-hidden', 'true');\n      self.$results.removeAttr('aria-activedescendant');\n    });\n\n    container.on('results:toggle', function () {\n      var $highlighted = self.getHighlightedResults();\n\n      if ($highlighted.length === 0) {\n        return;\n      }\n\n      $highlighted.trigger('mouseup');\n    });\n\n    container.on('results:select', function () {\n      var $highlighted = self.getHighlightedResults();\n\n      if ($highlighted.length === 0) {\n        return;\n      }\n\n      var data = Utils.GetData($highlighted[0], 'data');\n\n      if ($highlighted.attr('aria-selected') == 'true') {\n        self.trigger('close', {});\n      } else {\n        self.trigger('select', {\n          data: data\n        });\n      }\n    });\n\n    container.on('results:previous', function () {\n      var $highlighted = self.getHighlightedResults();\n\n      var $options = self.$results.find('[aria-selected]');\n\n      var currentIndex = $options.index($highlighted);\n\n      // If we are already at the top, don't move further\n      // If no options, currentIndex will be -1\n      if (currentIndex <= 0) {\n        return;\n      }\n\n      var nextIndex = currentIndex - 1;\n\n      // If none are highlighted, highlight the first\n      if ($highlighted.length === 0) {\n        nextIndex = 0;\n      }\n\n      var $next = $options.eq(nextIndex);\n\n      $next.trigger('mouseenter');\n\n      var currentOffset = self.$results.offset().top;\n      var nextTop = $next.offset().top;\n      var nextOffset = self.$results.scrollTop() + (nextTop - currentOffset);\n\n      if (nextIndex === 0) {\n        self.$results.scrollTop(0);\n      } else if (nextTop - currentOffset < 0) {\n        self.$results.scrollTop(nextOffset);\n      }\n    });\n\n    container.on('results:next', function () {\n      var $highlighted = self.getHighlightedResults();\n\n      var $options = self.$results.find('[aria-selected]');\n\n      var currentIndex = $options.index($highlighted);\n\n      var nextIndex = currentIndex + 1;\n\n      // If we are at the last option, stay there\n      if (nextIndex >= $options.length) {\n        return;\n      }\n\n      var $next = $options.eq(nextIndex);\n\n      $next.trigger('mouseenter');\n\n      var currentOffset = self.$results.offset().top +\n        self.$results.outerHeight(false);\n      var nextBottom = $next.offset().top + $next.outerHeight(false);\n      var nextOffset = self.$results.scrollTop() + nextBottom - currentOffset;\n\n      if (nextIndex === 0) {\n        self.$results.scrollTop(0);\n      } else if (nextBottom > currentOffset) {\n        self.$results.scrollTop(nextOffset);\n      }\n    });\n\n    container.on('results:focus', function (params) {\n      params.element.addClass('select2-results__option--highlighted');\n    });\n\n    container.on('results:message', function (params) {\n      self.displayMessage(params);\n    });\n\n    if ($.fn.mousewheel) {\n      this.$results.on('mousewheel', function (e) {\n        var top = self.$results.scrollTop();\n\n        var bottom = self.$results.get(0).scrollHeight - top + e.deltaY;\n\n        var isAtTop = e.deltaY > 0 && top - e.deltaY <= 0;\n        var isAtBottom = e.deltaY < 0 && bottom <= self.$results.height();\n\n        if (isAtTop) {\n          self.$results.scrollTop(0);\n\n          e.preventDefault();\n          e.stopPropagation();\n        } else if (isAtBottom) {\n          self.$results.scrollTop(\n            self.$results.get(0).scrollHeight - self.$results.height()\n          );\n\n          e.preventDefault();\n          e.stopPropagation();\n        }\n      });\n    }\n\n    this.$results.on('mouseup', '.select2-results__option[aria-selected]',\n      function (evt) {\n      var $this = $(this);\n\n      var data = Utils.GetData(this, 'data');\n\n      if ($this.attr('aria-selected') === 'true') {\n        if (self.options.get('multiple')) {\n          self.trigger('unselect', {\n            originalEvent: evt,\n            data: data\n          });\n        } else {\n          self.trigger('close', {});\n        }\n\n        return;\n      }\n\n      self.trigger('select', {\n        originalEvent: evt,\n        data: data\n      });\n    });\n\n    this.$results.on('mouseenter', '.select2-results__option[aria-selected]',\n      function (evt) {\n      var data = Utils.GetData(this, 'data');\n\n      self.getHighlightedResults()\n          .removeClass('select2-results__option--highlighted');\n\n      self.trigger('results:focus', {\n        data: data,\n        element: $(this)\n      });\n    });\n  };\n\n  Results.prototype.getHighlightedResults = function () {\n    var $highlighted = this.$results\n    .find('.select2-results__option--highlighted');\n\n    return $highlighted;\n  };\n\n  Results.prototype.destroy = function () {\n    this.$results.remove();\n  };\n\n  Results.prototype.ensureHighlightVisible = function () {\n    var $highlighted = this.getHighlightedResults();\n\n    if ($highlighted.length === 0) {\n      return;\n    }\n\n    var $options = this.$results.find('[aria-selected]');\n\n    var currentIndex = $options.index($highlighted);\n\n    var currentOffset = this.$results.offset().top;\n    var nextTop = $highlighted.offset().top;\n    var nextOffset = this.$results.scrollTop() + (nextTop - currentOffset);\n\n    var offsetDelta = nextTop - currentOffset;\n    nextOffset -= $highlighted.outerHeight(false) * 2;\n\n    if (currentIndex <= 2) {\n      this.$results.scrollTop(0);\n    } else if (offsetDelta > this.$results.outerHeight() || offsetDelta < 0) {\n      this.$results.scrollTop(nextOffset);\n    }\n  };\n\n  Results.prototype.template = function (result, container) {\n    var template = this.options.get('templateResult');\n    var escapeMarkup = this.options.get('escapeMarkup');\n\n    var content = template(result, container);\n\n    if (content == null) {\n      container.style.display = 'none';\n    } else if (typeof content === 'string') {\n      container.innerHTML = escapeMarkup(content);\n    } else {\n      $(container).append(content);\n    }\n  };\n\n  return Results;\n});\n\nS2.define('select2/keys',[\n\n], function () {\n  var KEYS = {\n    BACKSPACE: 8,\n    TAB: 9,\n    ENTER: 13,\n    SHIFT: 16,\n    CTRL: 17,\n    ALT: 18,\n    ESC: 27,\n    SPACE: 32,\n    PAGE_UP: 33,\n    PAGE_DOWN: 34,\n    END: 35,\n    HOME: 36,\n    LEFT: 37,\n    UP: 38,\n    RIGHT: 39,\n    DOWN: 40,\n    DELETE: 46\n  };\n\n  return KEYS;\n});\n\nS2.define('select2/selection/base',[\n  'jquery',\n  '../utils',\n  '../keys'\n], function ($, Utils, KEYS) {\n  function BaseSelection ($element, options) {\n    this.$element = $element;\n    this.options = options;\n\n    BaseSelection.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(BaseSelection, Utils.Observable);\n\n  BaseSelection.prototype.render = function () {\n    var $selection = $(\n      '<span class=\"select2-selection\" role=\"combobox\" ' +\n      ' aria-haspopup=\"true\" aria-expanded=\"false\">' +\n      '</span>'\n    );\n\n    this._tabindex = 0;\n\n    if (Utils.GetData(this.$element[0], 'old-tabindex') != null) {\n      this._tabindex = Utils.GetData(this.$element[0], 'old-tabindex');\n    } else if (this.$element.attr('tabindex') != null) {\n      this._tabindex = this.$element.attr('tabindex');\n    }\n\n    $selection.attr('title', this.$element.attr('title'));\n    $selection.attr('tabindex', this._tabindex);\n    $selection.attr('aria-disabled', 'false');\n\n    this.$selection = $selection;\n\n    return $selection;\n  };\n\n  BaseSelection.prototype.bind = function (container, $container) {\n    var self = this;\n\n    var resultsId = container.id + '-results';\n\n    this.container = container;\n\n    this.$selection.on('focus', function (evt) {\n      self.trigger('focus', evt);\n    });\n\n    this.$selection.on('blur', function (evt) {\n      self._handleBlur(evt);\n    });\n\n    this.$selection.on('keydown', function (evt) {\n      self.trigger('keypress', evt);\n\n      if (evt.which === KEYS.SPACE) {\n        evt.preventDefault();\n      }\n    });\n\n    container.on('results:focus', function (params) {\n      self.$selection.attr('aria-activedescendant', params.data._resultId);\n    });\n\n    container.on('selection:update', function (params) {\n      self.update(params.data);\n    });\n\n    container.on('open', function () {\n      // When the dropdown is open, aria-expanded=\"true\"\n      self.$selection.attr('aria-expanded', 'true');\n      self.$selection.attr('aria-owns', resultsId);\n\n      self._attachCloseHandler(container);\n    });\n\n    container.on('close', function () {\n      // When the dropdown is closed, aria-expanded=\"false\"\n      self.$selection.attr('aria-expanded', 'false');\n      self.$selection.removeAttr('aria-activedescendant');\n      self.$selection.removeAttr('aria-owns');\n\n      self.$selection.trigger('focus');\n\n      self._detachCloseHandler(container);\n    });\n\n    container.on('enable', function () {\n      self.$selection.attr('tabindex', self._tabindex);\n      self.$selection.attr('aria-disabled', 'false');\n    });\n\n    container.on('disable', function () {\n      self.$selection.attr('tabindex', '-1');\n      self.$selection.attr('aria-disabled', 'true');\n    });\n  };\n\n  BaseSelection.prototype._handleBlur = function (evt) {\n    var self = this;\n\n    // This needs to be delayed as the active element is the body when the tab\n    // key is pressed, possibly along with others.\n    window.setTimeout(function () {\n      // Don't trigger `blur` if the focus is still in the selection\n      if (\n        (document.activeElement == self.$selection[0]) ||\n        ($.contains(self.$selection[0], document.activeElement))\n      ) {\n        return;\n      }\n\n      self.trigger('blur', evt);\n    }, 1);\n  };\n\n  BaseSelection.prototype._attachCloseHandler = function (container) {\n\n    $(document.body).on('mousedown.select2.' + container.id, function (e) {\n      var $target = $(e.target);\n\n      var $select = $target.closest('.select2');\n\n      var $all = $('.select2.select2-container--open');\n\n      $all.each(function () {\n        if (this == $select[0]) {\n          return;\n        }\n\n        var $element = Utils.GetData(this, 'element');\n\n        $element.select2('close');\n      });\n    });\n  };\n\n  BaseSelection.prototype._detachCloseHandler = function (container) {\n    $(document.body).off('mousedown.select2.' + container.id);\n  };\n\n  BaseSelection.prototype.position = function ($selection, $container) {\n    var $selectionContainer = $container.find('.selection');\n    $selectionContainer.append($selection);\n  };\n\n  BaseSelection.prototype.destroy = function () {\n    this._detachCloseHandler(this.container);\n  };\n\n  BaseSelection.prototype.update = function (data) {\n    throw new Error('The `update` method must be defined in child classes.');\n  };\n\n  return BaseSelection;\n});\n\nS2.define('select2/selection/single',[\n  'jquery',\n  './base',\n  '../utils',\n  '../keys'\n], function ($, BaseSelection, Utils, KEYS) {\n  function SingleSelection () {\n    SingleSelection.__super__.constructor.apply(this, arguments);\n  }\n\n  Utils.Extend(SingleSelection, BaseSelection);\n\n  SingleSelection.prototype.render = function () {\n    var $selection = SingleSelection.__super__.render.call(this);\n\n    $selection.addClass('select2-selection--single');\n\n    $selection.html(\n      '<span class=\"select2-selection__rendered\"></span>' +\n      '<span class=\"select2-selection__arrow\" role=\"presentation\">' +\n        '<b role=\"presentation\"></b>' +\n      '</span>'\n    );\n\n    return $selection;\n  };\n\n  SingleSelection.prototype.bind = function (container, $container) {\n    var self = this;\n\n    SingleSelection.__super__.bind.apply(this, arguments);\n\n    var id = container.id + '-container';\n\n    this.$selection.find('.select2-selection__rendered')\n      .attr('id', id)\n      .attr('role', 'textbox')\n      .attr('aria-readonly', 'true');\n    this.$selection.attr('aria-labelledby', id);\n\n    this.$selection.on('mousedown', function (evt) {\n      // Only respond to left clicks\n      if (evt.which !== 1) {\n        return;\n      }\n\n      self.trigger('toggle', {\n        originalEvent: evt\n      });\n    });\n\n    this.$selection.on('focus', function (evt) {\n      // User focuses on the container\n    });\n\n    this.$selection.on('blur', function (evt) {\n      // User exits the container\n    });\n\n    container.on('focus', function (evt) {\n      if (!container.isOpen()) {\n        self.$selection.trigger('focus');\n      }\n    });\n  };\n\n  SingleSelection.prototype.clear = function () {\n    var $rendered = this.$selection.find('.select2-selection__rendered');\n    $rendered.empty();\n    $rendered.removeAttr('title'); // clear tooltip on empty\n  };\n\n  SingleSelection.prototype.display = function (data, container) {\n    var template = this.options.get('templateSelection');\n    var escapeMarkup = this.options.get('escapeMarkup');\n\n    return escapeMarkup(template(data, container));\n  };\n\n  SingleSelection.prototype.selectionContainer = function () {\n    return $('<span></span>');\n  };\n\n  SingleSelection.prototype.update = function (data) {\n    if (data.length === 0) {\n      this.clear();\n      return;\n    }\n\n    var selection = data[0];\n\n    var $rendered = this.$selection.find('.select2-selection__rendered');\n    var formatted = this.display(selection, $rendered);\n\n    $rendered.empty().append(formatted);\n\n    var title = selection.title || selection.text;\n\n    if (title) {\n      $rendered.attr('title', title);\n    } else {\n      $rendered.removeAttr('title');\n    }\n  };\n\n  return SingleSelection;\n});\n\nS2.define('select2/selection/multiple',[\n  'jquery',\n  './base',\n  '../utils'\n], function ($, BaseSelection, Utils) {\n  function MultipleSelection ($element, options) {\n    MultipleSelection.__super__.constructor.apply(this, arguments);\n  }\n\n  Utils.Extend(MultipleSelection, BaseSelection);\n\n  MultipleSelection.prototype.render = function () {\n    var $selection = MultipleSelection.__super__.render.call(this);\n\n    $selection.addClass('select2-selection--multiple');\n\n    $selection.html(\n      '<ul class=\"select2-selection__rendered\"></ul>'\n    );\n\n    return $selection;\n  };\n\n  MultipleSelection.prototype.bind = function (container, $container) {\n    var self = this;\n\n    MultipleSelection.__super__.bind.apply(this, arguments);\n\n    this.$selection.on('click', function (evt) {\n      self.trigger('toggle', {\n        originalEvent: evt\n      });\n    });\n\n    this.$selection.on(\n      'click',\n      '.select2-selection__choice__remove',\n      function (evt) {\n        // Ignore the event if it is disabled\n        if (self.options.get('disabled')) {\n          return;\n        }\n\n        var $remove = $(this);\n        var $selection = $remove.parent();\n\n        var data = Utils.GetData($selection[0], 'data');\n\n        self.trigger('unselect', {\n          originalEvent: evt,\n          data: data\n        });\n      }\n    );\n  };\n\n  MultipleSelection.prototype.clear = function () {\n    var $rendered = this.$selection.find('.select2-selection__rendered');\n    $rendered.empty();\n    $rendered.removeAttr('title');\n  };\n\n  MultipleSelection.prototype.display = function (data, container) {\n    var template = this.options.get('templateSelection');\n    var escapeMarkup = this.options.get('escapeMarkup');\n\n    return escapeMarkup(template(data, container));\n  };\n\n  MultipleSelection.prototype.selectionContainer = function () {\n    var $container = $(\n      '<li class=\"select2-selection__choice\">' +\n        '<span class=\"select2-selection__choice__remove\" role=\"presentation\">' +\n          '&times;' +\n        '</span>' +\n      '</li>'\n    );\n\n    return $container;\n  };\n\n  MultipleSelection.prototype.update = function (data) {\n    this.clear();\n\n    if (data.length === 0) {\n      return;\n    }\n\n    var $selections = [];\n\n    for (var d = 0; d < data.length; d++) {\n      var selection = data[d];\n\n      var $selection = this.selectionContainer();\n      var formatted = this.display(selection, $selection);\n\n      $selection.append(formatted);\n\n      var title = selection.title || selection.text;\n\n      if (title) {\n        $selection.attr('title', title);\n      }\n\n      Utils.StoreData($selection[0], 'data', selection);\n\n      $selections.push($selection);\n    }\n\n    var $rendered = this.$selection.find('.select2-selection__rendered');\n\n    Utils.appendMany($rendered, $selections);\n  };\n\n  return MultipleSelection;\n});\n\nS2.define('select2/selection/placeholder',[\n  '../utils'\n], function (Utils) {\n  function Placeholder (decorated, $element, options) {\n    this.placeholder = this.normalizePlaceholder(options.get('placeholder'));\n\n    decorated.call(this, $element, options);\n  }\n\n  Placeholder.prototype.normalizePlaceholder = function (_, placeholder) {\n    if (typeof placeholder === 'string') {\n      placeholder = {\n        id: '',\n        text: placeholder\n      };\n    }\n\n    return placeholder;\n  };\n\n  Placeholder.prototype.createPlaceholder = function (decorated, placeholder) {\n    var $placeholder = this.selectionContainer();\n\n    $placeholder.html(this.display(placeholder));\n    $placeholder.addClass('select2-selection__placeholder')\n                .removeClass('select2-selection__choice');\n\n    return $placeholder;\n  };\n\n  Placeholder.prototype.update = function (decorated, data) {\n    var singlePlaceholder = (\n      data.length == 1 && data[0].id != this.placeholder.id\n    );\n    var multipleSelections = data.length > 1;\n\n    if (multipleSelections || singlePlaceholder) {\n      return decorated.call(this, data);\n    }\n\n    this.clear();\n\n    var $placeholder = this.createPlaceholder(this.placeholder);\n\n    this.$selection.find('.select2-selection__rendered').append($placeholder);\n  };\n\n  return Placeholder;\n});\n\nS2.define('select2/selection/allowClear',[\n  'jquery',\n  '../keys',\n  '../utils'\n], function ($, KEYS, Utils) {\n  function AllowClear () { }\n\n  AllowClear.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    if (this.placeholder == null) {\n      if (this.options.get('debug') && window.console && console.error) {\n        console.error(\n          'Select2: The `allowClear` option should be used in combination ' +\n          'with the `placeholder` option.'\n        );\n      }\n    }\n\n    this.$selection.on('mousedown', '.select2-selection__clear',\n      function (evt) {\n        self._handleClear(evt);\n    });\n\n    container.on('keypress', function (evt) {\n      self._handleKeyboardClear(evt, container);\n    });\n  };\n\n  AllowClear.prototype._handleClear = function (_, evt) {\n    // Ignore the event if it is disabled\n    if (this.options.get('disabled')) {\n      return;\n    }\n\n    var $clear = this.$selection.find('.select2-selection__clear');\n\n    // Ignore the event if nothing has been selected\n    if ($clear.length === 0) {\n      return;\n    }\n\n    evt.stopPropagation();\n\n    var data = Utils.GetData($clear[0], 'data');\n\n    var previousVal = this.$element.val();\n    this.$element.val(this.placeholder.id);\n\n    var unselectData = {\n      data: data\n    };\n    this.trigger('clear', unselectData);\n    if (unselectData.prevented) {\n      this.$element.val(previousVal);\n      return;\n    }\n\n    for (var d = 0; d < data.length; d++) {\n      unselectData = {\n        data: data[d]\n      };\n\n      // Trigger the `unselect` event, so people can prevent it from being\n      // cleared.\n      this.trigger('unselect', unselectData);\n\n      // If the event was prevented, don't clear it out.\n      if (unselectData.prevented) {\n        this.$element.val(previousVal);\n        return;\n      }\n    }\n\n    this.$element.trigger('change');\n\n    this.trigger('toggle', {});\n  };\n\n  AllowClear.prototype._handleKeyboardClear = function (_, evt, container) {\n    if (container.isOpen()) {\n      return;\n    }\n\n    if (evt.which == KEYS.DELETE || evt.which == KEYS.BACKSPACE) {\n      this._handleClear(evt);\n    }\n  };\n\n  AllowClear.prototype.update = function (decorated, data) {\n    decorated.call(this, data);\n\n    if (this.$selection.find('.select2-selection__placeholder').length > 0 ||\n        data.length === 0) {\n      return;\n    }\n\n    var removeAll = this.options.get('translations').get('removeAllItems');   \n\n    var $remove = $(\n      '<span class=\"select2-selection__clear\" title=\"' + removeAll() +'\">' +\n        '&times;' +\n      '</span>'\n    );\n    Utils.StoreData($remove[0], 'data', data);\n\n    this.$selection.find('.select2-selection__rendered').prepend($remove);\n  };\n\n  return AllowClear;\n});\n\nS2.define('select2/selection/search',[\n  'jquery',\n  '../utils',\n  '../keys'\n], function ($, Utils, KEYS) {\n  function Search (decorated, $element, options) {\n    decorated.call(this, $element, options);\n  }\n\n  Search.prototype.render = function (decorated) {\n    var $search = $(\n      '<li class=\"select2-search select2-search--inline\">' +\n        '<input class=\"select2-search__field\" type=\"search\" tabindex=\"-1\"' +\n        ' autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"none\"' +\n        ' spellcheck=\"false\" role=\"searchbox\" aria-autocomplete=\"list\" />' +\n      '</li>'\n    );\n\n    this.$searchContainer = $search;\n    this.$search = $search.find('input');\n\n    var $rendered = decorated.call(this);\n\n    this._transferTabIndex();\n\n    return $rendered;\n  };\n\n  Search.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    var resultsId = container.id + '-results';\n\n    decorated.call(this, container, $container);\n\n    container.on('open', function () {\n      self.$search.attr('aria-controls', resultsId);\n      self.$search.trigger('focus');\n    });\n\n    container.on('close', function () {\n      self.$search.val('');\n      self.$search.removeAttr('aria-controls');\n      self.$search.removeAttr('aria-activedescendant');\n      self.$search.trigger('focus');\n    });\n\n    container.on('enable', function () {\n      self.$search.prop('disabled', false);\n\n      self._transferTabIndex();\n    });\n\n    container.on('disable', function () {\n      self.$search.prop('disabled', true);\n    });\n\n    container.on('focus', function (evt) {\n      self.$search.trigger('focus');\n    });\n\n    container.on('results:focus', function (params) {\n      if (params.data._resultId) {\n        self.$search.attr('aria-activedescendant', params.data._resultId);\n      } else {\n        self.$search.removeAttr('aria-activedescendant');\n      }\n    });\n\n    this.$selection.on('focusin', '.select2-search--inline', function (evt) {\n      self.trigger('focus', evt);\n    });\n\n    this.$selection.on('focusout', '.select2-search--inline', function (evt) {\n      self._handleBlur(evt);\n    });\n\n    this.$selection.on('keydown', '.select2-search--inline', function (evt) {\n      evt.stopPropagation();\n\n      self.trigger('keypress', evt);\n\n      self._keyUpPrevented = evt.isDefaultPrevented();\n\n      var key = evt.which;\n\n      if (key === KEYS.BACKSPACE && self.$search.val() === '') {\n        var $previousChoice = self.$searchContainer\n          .prev('.select2-selection__choice');\n\n        if ($previousChoice.length > 0) {\n          var item = Utils.GetData($previousChoice[0], 'data');\n\n          self.searchRemoveChoice(item);\n\n          evt.preventDefault();\n        }\n      }\n    });\n\n    this.$selection.on('click', '.select2-search--inline', function (evt) {\n      if (self.$search.val()) {\n        evt.stopPropagation();\n      }\n    });\n\n    // Try to detect the IE version should the `documentMode` property that\n    // is stored on the document. This is only implemented in IE and is\n    // slightly cleaner than doing a user agent check.\n    // This property is not available in Edge, but Edge also doesn't have\n    // this bug.\n    var msie = document.documentMode;\n    var disableInputEvents = msie && msie <= 11;\n\n    // Workaround for browsers which do not support the `input` event\n    // This will prevent double-triggering of events for browsers which support\n    // both the `keyup` and `input` events.\n    this.$selection.on(\n      'input.searchcheck',\n      '.select2-search--inline',\n      function (evt) {\n        // IE will trigger the `input` event when a placeholder is used on a\n        // search box. To get around this issue, we are forced to ignore all\n        // `input` events in IE and keep using `keyup`.\n        if (disableInputEvents) {\n          self.$selection.off('input.search input.searchcheck');\n          return;\n        }\n\n        // Unbind the duplicated `keyup` event\n        self.$selection.off('keyup.search');\n      }\n    );\n\n    this.$selection.on(\n      'keyup.search input.search',\n      '.select2-search--inline',\n      function (evt) {\n        // IE will trigger the `input` event when a placeholder is used on a\n        // search box. To get around this issue, we are forced to ignore all\n        // `input` events in IE and keep using `keyup`.\n        if (disableInputEvents && evt.type === 'input') {\n          self.$selection.off('input.search input.searchcheck');\n          return;\n        }\n\n        var key = evt.which;\n\n        // We can freely ignore events from modifier keys\n        if (key == KEYS.SHIFT || key == KEYS.CTRL || key == KEYS.ALT) {\n          return;\n        }\n\n        // Tabbing will be handled during the `keydown` phase\n        if (key == KEYS.TAB) {\n          return;\n        }\n\n        self.handleSearch(evt);\n      }\n    );\n  };\n\n  /**\n   * This method will transfer the tabindex attribute from the rendered\n   * selection to the search box. This allows for the search box to be used as\n   * the primary focus instead of the selection container.\n   *\n   * @private\n   */\n  Search.prototype._transferTabIndex = function (decorated) {\n    this.$search.attr('tabindex', this.$selection.attr('tabindex'));\n    this.$selection.attr('tabindex', '-1');\n  };\n\n  Search.prototype.createPlaceholder = function (decorated, placeholder) {\n    this.$search.attr('placeholder', placeholder.text);\n  };\n\n  Search.prototype.update = function (decorated, data) {\n    var searchHadFocus = this.$search[0] == document.activeElement;\n\n    this.$search.attr('placeholder', '');\n\n    decorated.call(this, data);\n\n    this.$selection.find('.select2-selection__rendered')\n                   .append(this.$searchContainer);\n\n    this.resizeSearch();\n    if (searchHadFocus) {\n      this.$search.trigger('focus');\n    }\n  };\n\n  Search.prototype.handleSearch = function () {\n    this.resizeSearch();\n\n    if (!this._keyUpPrevented) {\n      var input = this.$search.val();\n\n      this.trigger('query', {\n        term: input\n      });\n    }\n\n    this._keyUpPrevented = false;\n  };\n\n  Search.prototype.searchRemoveChoice = function (decorated, item) {\n    this.trigger('unselect', {\n      data: item\n    });\n\n    this.$search.val(item.text);\n    this.handleSearch();\n  };\n\n  Search.prototype.resizeSearch = function () {\n    this.$search.css('width', '25px');\n\n    var width = '';\n\n    if (this.$search.attr('placeholder') !== '') {\n      width = this.$selection.find('.select2-selection__rendered').width();\n    } else {\n      var minimumWidth = this.$search.val().length + 1;\n\n      width = (minimumWidth * 0.75) + 'em';\n    }\n\n    this.$search.css('width', width);\n  };\n\n  return Search;\n});\n\nS2.define('select2/selection/eventRelay',[\n  'jquery'\n], function ($) {\n  function EventRelay () { }\n\n  EventRelay.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n    var relayEvents = [\n      'open', 'opening',\n      'close', 'closing',\n      'select', 'selecting',\n      'unselect', 'unselecting',\n      'clear', 'clearing'\n    ];\n\n    var preventableEvents = [\n      'opening', 'closing', 'selecting', 'unselecting', 'clearing'\n    ];\n\n    decorated.call(this, container, $container);\n\n    container.on('*', function (name, params) {\n      // Ignore events that should not be relayed\n      if ($.inArray(name, relayEvents) === -1) {\n        return;\n      }\n\n      // The parameters should always be an object\n      params = params || {};\n\n      // Generate the jQuery event for the Select2 event\n      var evt = $.Event('select2:' + name, {\n        params: params\n      });\n\n      self.$element.trigger(evt);\n\n      // Only handle preventable events if it was one\n      if ($.inArray(name, preventableEvents) === -1) {\n        return;\n      }\n\n      params.prevented = evt.isDefaultPrevented();\n    });\n  };\n\n  return EventRelay;\n});\n\nS2.define('select2/translation',[\n  'jquery',\n  'require'\n], function ($, require) {\n  function Translation (dict) {\n    this.dict = dict || {};\n  }\n\n  Translation.prototype.all = function () {\n    return this.dict;\n  };\n\n  Translation.prototype.get = function (key) {\n    return this.dict[key];\n  };\n\n  Translation.prototype.extend = function (translation) {\n    this.dict = $.extend({}, translation.all(), this.dict);\n  };\n\n  // Static functions\n\n  Translation._cache = {};\n\n  Translation.loadPath = function (path) {\n    if (!(path in Translation._cache)) {\n      var translations = require(path);\n\n      Translation._cache[path] = translations;\n    }\n\n    return new Translation(Translation._cache[path]);\n  };\n\n  return Translation;\n});\n\nS2.define('select2/diacritics',[\n\n], function () {\n  var diacritics = {\n    '\\u24B6': 'A',\n    '\\uFF21': 'A',\n    '\\u00C0': 'A',\n    '\\u00C1': 'A',\n    '\\u00C2': 'A',\n    '\\u1EA6': 'A',\n    '\\u1EA4': 'A',\n    '\\u1EAA': 'A',\n    '\\u1EA8': 'A',\n    '\\u00C3': 'A',\n    '\\u0100': 'A',\n    '\\u0102': 'A',\n    '\\u1EB0': 'A',\n    '\\u1EAE': 'A',\n    '\\u1EB4': 'A',\n    '\\u1EB2': 'A',\n    '\\u0226': 'A',\n    '\\u01E0': 'A',\n    '\\u00C4': 'A',\n    '\\u01DE': 'A',\n    '\\u1EA2': 'A',\n    '\\u00C5': 'A',\n    '\\u01FA': 'A',\n    '\\u01CD': 'A',\n    '\\u0200': 'A',\n    '\\u0202': 'A',\n    '\\u1EA0': 'A',\n    '\\u1EAC': 'A',\n    '\\u1EB6': 'A',\n    '\\u1E00': 'A',\n    '\\u0104': 'A',\n    '\\u023A': 'A',\n    '\\u2C6F': 'A',\n    '\\uA732': 'AA',\n    '\\u00C6': 'AE',\n    '\\u01FC': 'AE',\n    '\\u01E2': 'AE',\n    '\\uA734': 'AO',\n    '\\uA736': 'AU',\n    '\\uA738': 'AV',\n    '\\uA73A': 'AV',\n    '\\uA73C': 'AY',\n    '\\u24B7': 'B',\n    '\\uFF22': 'B',\n    '\\u1E02': 'B',\n    '\\u1E04': 'B',\n    '\\u1E06': 'B',\n    '\\u0243': 'B',\n    '\\u0182': 'B',\n    '\\u0181': 'B',\n    '\\u24B8': 'C',\n    '\\uFF23': 'C',\n    '\\u0106': 'C',\n    '\\u0108': 'C',\n    '\\u010A': 'C',\n    '\\u010C': 'C',\n    '\\u00C7': 'C',\n    '\\u1E08': 'C',\n    '\\u0187': 'C',\n    '\\u023B': 'C',\n    '\\uA73E': 'C',\n    '\\u24B9': 'D',\n    '\\uFF24': 'D',\n    '\\u1E0A': 'D',\n    '\\u010E': 'D',\n    '\\u1E0C': 'D',\n    '\\u1E10': 'D',\n    '\\u1E12': 'D',\n    '\\u1E0E': 'D',\n    '\\u0110': 'D',\n    '\\u018B': 'D',\n    '\\u018A': 'D',\n    '\\u0189': 'D',\n    '\\uA779': 'D',\n    '\\u01F1': 'DZ',\n    '\\u01C4': 'DZ',\n    '\\u01F2': 'Dz',\n    '\\u01C5': 'Dz',\n    '\\u24BA': 'E',\n    '\\uFF25': 'E',\n    '\\u00C8': 'E',\n    '\\u00C9': 'E',\n    '\\u00CA': 'E',\n    '\\u1EC0': 'E',\n    '\\u1EBE': 'E',\n    '\\u1EC4': 'E',\n    '\\u1EC2': 'E',\n    '\\u1EBC': 'E',\n    '\\u0112': 'E',\n    '\\u1E14': 'E',\n    '\\u1E16': 'E',\n    '\\u0114': 'E',\n    '\\u0116': 'E',\n    '\\u00CB': 'E',\n    '\\u1EBA': 'E',\n    '\\u011A': 'E',\n    '\\u0204': 'E',\n    '\\u0206': 'E',\n    '\\u1EB8': 'E',\n    '\\u1EC6': 'E',\n    '\\u0228': 'E',\n    '\\u1E1C': 'E',\n    '\\u0118': 'E',\n    '\\u1E18': 'E',\n    '\\u1E1A': 'E',\n    '\\u0190': 'E',\n    '\\u018E': 'E',\n    '\\u24BB': 'F',\n    '\\uFF26': 'F',\n    '\\u1E1E': 'F',\n    '\\u0191': 'F',\n    '\\uA77B': 'F',\n    '\\u24BC': 'G',\n    '\\uFF27': 'G',\n    '\\u01F4': 'G',\n    '\\u011C': 'G',\n    '\\u1E20': 'G',\n    '\\u011E': 'G',\n    '\\u0120': 'G',\n    '\\u01E6': 'G',\n    '\\u0122': 'G',\n    '\\u01E4': 'G',\n    '\\u0193': 'G',\n    '\\uA7A0': 'G',\n    '\\uA77D': 'G',\n    '\\uA77E': 'G',\n    '\\u24BD': 'H',\n    '\\uFF28': 'H',\n    '\\u0124': 'H',\n    '\\u1E22': 'H',\n    '\\u1E26': 'H',\n    '\\u021E': 'H',\n    '\\u1E24': 'H',\n    '\\u1E28': 'H',\n    '\\u1E2A': 'H',\n    '\\u0126': 'H',\n    '\\u2C67': 'H',\n    '\\u2C75': 'H',\n    '\\uA78D': 'H',\n    '\\u24BE': 'I',\n    '\\uFF29': 'I',\n    '\\u00CC': 'I',\n    '\\u00CD': 'I',\n    '\\u00CE': 'I',\n    '\\u0128': 'I',\n    '\\u012A': 'I',\n    '\\u012C': 'I',\n    '\\u0130': 'I',\n    '\\u00CF': 'I',\n    '\\u1E2E': 'I',\n    '\\u1EC8': 'I',\n    '\\u01CF': 'I',\n    '\\u0208': 'I',\n    '\\u020A': 'I',\n    '\\u1ECA': 'I',\n    '\\u012E': 'I',\n    '\\u1E2C': 'I',\n    '\\u0197': 'I',\n    '\\u24BF': 'J',\n    '\\uFF2A': 'J',\n    '\\u0134': 'J',\n    '\\u0248': 'J',\n    '\\u24C0': 'K',\n    '\\uFF2B': 'K',\n    '\\u1E30': 'K',\n    '\\u01E8': 'K',\n    '\\u1E32': 'K',\n    '\\u0136': 'K',\n    '\\u1E34': 'K',\n    '\\u0198': 'K',\n    '\\u2C69': 'K',\n    '\\uA740': 'K',\n    '\\uA742': 'K',\n    '\\uA744': 'K',\n    '\\uA7A2': 'K',\n    '\\u24C1': 'L',\n    '\\uFF2C': 'L',\n    '\\u013F': 'L',\n    '\\u0139': 'L',\n    '\\u013D': 'L',\n    '\\u1E36': 'L',\n    '\\u1E38': 'L',\n    '\\u013B': 'L',\n    '\\u1E3C': 'L',\n    '\\u1E3A': 'L',\n    '\\u0141': 'L',\n    '\\u023D': 'L',\n    '\\u2C62': 'L',\n    '\\u2C60': 'L',\n    '\\uA748': 'L',\n    '\\uA746': 'L',\n    '\\uA780': 'L',\n    '\\u01C7': 'LJ',\n    '\\u01C8': 'Lj',\n    '\\u24C2': 'M',\n    '\\uFF2D': 'M',\n    '\\u1E3E': 'M',\n    '\\u1E40': 'M',\n    '\\u1E42': 'M',\n    '\\u2C6E': 'M',\n    '\\u019C': 'M',\n    '\\u24C3': 'N',\n    '\\uFF2E': 'N',\n    '\\u01F8': 'N',\n    '\\u0143': 'N',\n    '\\u00D1': 'N',\n    '\\u1E44': 'N',\n    '\\u0147': 'N',\n    '\\u1E46': 'N',\n    '\\u0145': 'N',\n    '\\u1E4A': 'N',\n    '\\u1E48': 'N',\n    '\\u0220': 'N',\n    '\\u019D': 'N',\n    '\\uA790': 'N',\n    '\\uA7A4': 'N',\n    '\\u01CA': 'NJ',\n    '\\u01CB': 'Nj',\n    '\\u24C4': 'O',\n    '\\uFF2F': 'O',\n    '\\u00D2': 'O',\n    '\\u00D3': 'O',\n    '\\u00D4': 'O',\n    '\\u1ED2': 'O',\n    '\\u1ED0': 'O',\n    '\\u1ED6': 'O',\n    '\\u1ED4': 'O',\n    '\\u00D5': 'O',\n    '\\u1E4C': 'O',\n    '\\u022C': 'O',\n    '\\u1E4E': 'O',\n    '\\u014C': 'O',\n    '\\u1E50': 'O',\n    '\\u1E52': 'O',\n    '\\u014E': 'O',\n    '\\u022E': 'O',\n    '\\u0230': 'O',\n    '\\u00D6': 'O',\n    '\\u022A': 'O',\n    '\\u1ECE': 'O',\n    '\\u0150': 'O',\n    '\\u01D1': 'O',\n    '\\u020C': 'O',\n    '\\u020E': 'O',\n    '\\u01A0': 'O',\n    '\\u1EDC': 'O',\n    '\\u1EDA': 'O',\n    '\\u1EE0': 'O',\n    '\\u1EDE': 'O',\n    '\\u1EE2': 'O',\n    '\\u1ECC': 'O',\n    '\\u1ED8': 'O',\n    '\\u01EA': 'O',\n    '\\u01EC': 'O',\n    '\\u00D8': 'O',\n    '\\u01FE': 'O',\n    '\\u0186': 'O',\n    '\\u019F': 'O',\n    '\\uA74A': 'O',\n    '\\uA74C': 'O',\n    '\\u0152': 'OE',\n    '\\u01A2': 'OI',\n    '\\uA74E': 'OO',\n    '\\u0222': 'OU',\n    '\\u24C5': 'P',\n    '\\uFF30': 'P',\n    '\\u1E54': 'P',\n    '\\u1E56': 'P',\n    '\\u01A4': 'P',\n    '\\u2C63': 'P',\n    '\\uA750': 'P',\n    '\\uA752': 'P',\n    '\\uA754': 'P',\n    '\\u24C6': 'Q',\n    '\\uFF31': 'Q',\n    '\\uA756': 'Q',\n    '\\uA758': 'Q',\n    '\\u024A': 'Q',\n    '\\u24C7': 'R',\n    '\\uFF32': 'R',\n    '\\u0154': 'R',\n    '\\u1E58': 'R',\n    '\\u0158': 'R',\n    '\\u0210': 'R',\n    '\\u0212': 'R',\n    '\\u1E5A': 'R',\n    '\\u1E5C': 'R',\n    '\\u0156': 'R',\n    '\\u1E5E': 'R',\n    '\\u024C': 'R',\n    '\\u2C64': 'R',\n    '\\uA75A': 'R',\n    '\\uA7A6': 'R',\n    '\\uA782': 'R',\n    '\\u24C8': 'S',\n    '\\uFF33': 'S',\n    '\\u1E9E': 'S',\n    '\\u015A': 'S',\n    '\\u1E64': 'S',\n    '\\u015C': 'S',\n    '\\u1E60': 'S',\n    '\\u0160': 'S',\n    '\\u1E66': 'S',\n    '\\u1E62': 'S',\n    '\\u1E68': 'S',\n    '\\u0218': 'S',\n    '\\u015E': 'S',\n    '\\u2C7E': 'S',\n    '\\uA7A8': 'S',\n    '\\uA784': 'S',\n    '\\u24C9': 'T',\n    '\\uFF34': 'T',\n    '\\u1E6A': 'T',\n    '\\u0164': 'T',\n    '\\u1E6C': 'T',\n    '\\u021A': 'T',\n    '\\u0162': 'T',\n    '\\u1E70': 'T',\n    '\\u1E6E': 'T',\n    '\\u0166': 'T',\n    '\\u01AC': 'T',\n    '\\u01AE': 'T',\n    '\\u023E': 'T',\n    '\\uA786': 'T',\n    '\\uA728': 'TZ',\n    '\\u24CA': 'U',\n    '\\uFF35': 'U',\n    '\\u00D9': 'U',\n    '\\u00DA': 'U',\n    '\\u00DB': 'U',\n    '\\u0168': 'U',\n    '\\u1E78': 'U',\n    '\\u016A': 'U',\n    '\\u1E7A': 'U',\n    '\\u016C': 'U',\n    '\\u00DC': 'U',\n    '\\u01DB': 'U',\n    '\\u01D7': 'U',\n    '\\u01D5': 'U',\n    '\\u01D9': 'U',\n    '\\u1EE6': 'U',\n    '\\u016E': 'U',\n    '\\u0170': 'U',\n    '\\u01D3': 'U',\n    '\\u0214': 'U',\n    '\\u0216': 'U',\n    '\\u01AF': 'U',\n    '\\u1EEA': 'U',\n    '\\u1EE8': 'U',\n    '\\u1EEE': 'U',\n    '\\u1EEC': 'U',\n    '\\u1EF0': 'U',\n    '\\u1EE4': 'U',\n    '\\u1E72': 'U',\n    '\\u0172': 'U',\n    '\\u1E76': 'U',\n    '\\u1E74': 'U',\n    '\\u0244': 'U',\n    '\\u24CB': 'V',\n    '\\uFF36': 'V',\n    '\\u1E7C': 'V',\n    '\\u1E7E': 'V',\n    '\\u01B2': 'V',\n    '\\uA75E': 'V',\n    '\\u0245': 'V',\n    '\\uA760': 'VY',\n    '\\u24CC': 'W',\n    '\\uFF37': 'W',\n    '\\u1E80': 'W',\n    '\\u1E82': 'W',\n    '\\u0174': 'W',\n    '\\u1E86': 'W',\n    '\\u1E84': 'W',\n    '\\u1E88': 'W',\n    '\\u2C72': 'W',\n    '\\u24CD': 'X',\n    '\\uFF38': 'X',\n    '\\u1E8A': 'X',\n    '\\u1E8C': 'X',\n    '\\u24CE': 'Y',\n    '\\uFF39': 'Y',\n    '\\u1EF2': 'Y',\n    '\\u00DD': 'Y',\n    '\\u0176': 'Y',\n    '\\u1EF8': 'Y',\n    '\\u0232': 'Y',\n    '\\u1E8E': 'Y',\n    '\\u0178': 'Y',\n    '\\u1EF6': 'Y',\n    '\\u1EF4': 'Y',\n    '\\u01B3': 'Y',\n    '\\u024E': 'Y',\n    '\\u1EFE': 'Y',\n    '\\u24CF': 'Z',\n    '\\uFF3A': 'Z',\n    '\\u0179': 'Z',\n    '\\u1E90': 'Z',\n    '\\u017B': 'Z',\n    '\\u017D': 'Z',\n    '\\u1E92': 'Z',\n    '\\u1E94': 'Z',\n    '\\u01B5': 'Z',\n    '\\u0224': 'Z',\n    '\\u2C7F': 'Z',\n    '\\u2C6B': 'Z',\n    '\\uA762': 'Z',\n    '\\u24D0': 'a',\n    '\\uFF41': 'a',\n    '\\u1E9A': 'a',\n    '\\u00E0': 'a',\n    '\\u00E1': 'a',\n    '\\u00E2': 'a',\n    '\\u1EA7': 'a',\n    '\\u1EA5': 'a',\n    '\\u1EAB': 'a',\n    '\\u1EA9': 'a',\n    '\\u00E3': 'a',\n    '\\u0101': 'a',\n    '\\u0103': 'a',\n    '\\u1EB1': 'a',\n    '\\u1EAF': 'a',\n    '\\u1EB5': 'a',\n    '\\u1EB3': 'a',\n    '\\u0227': 'a',\n    '\\u01E1': 'a',\n    '\\u00E4': 'a',\n    '\\u01DF': 'a',\n    '\\u1EA3': 'a',\n    '\\u00E5': 'a',\n    '\\u01FB': 'a',\n    '\\u01CE': 'a',\n    '\\u0201': 'a',\n    '\\u0203': 'a',\n    '\\u1EA1': 'a',\n    '\\u1EAD': 'a',\n    '\\u1EB7': 'a',\n    '\\u1E01': 'a',\n    '\\u0105': 'a',\n    '\\u2C65': 'a',\n    '\\u0250': 'a',\n    '\\uA733': 'aa',\n    '\\u00E6': 'ae',\n    '\\u01FD': 'ae',\n    '\\u01E3': 'ae',\n    '\\uA735': 'ao',\n    '\\uA737': 'au',\n    '\\uA739': 'av',\n    '\\uA73B': 'av',\n    '\\uA73D': 'ay',\n    '\\u24D1': 'b',\n    '\\uFF42': 'b',\n    '\\u1E03': 'b',\n    '\\u1E05': 'b',\n    '\\u1E07': 'b',\n    '\\u0180': 'b',\n    '\\u0183': 'b',\n    '\\u0253': 'b',\n    '\\u24D2': 'c',\n    '\\uFF43': 'c',\n    '\\u0107': 'c',\n    '\\u0109': 'c',\n    '\\u010B': 'c',\n    '\\u010D': 'c',\n    '\\u00E7': 'c',\n    '\\u1E09': 'c',\n    '\\u0188': 'c',\n    '\\u023C': 'c',\n    '\\uA73F': 'c',\n    '\\u2184': 'c',\n    '\\u24D3': 'd',\n    '\\uFF44': 'd',\n    '\\u1E0B': 'd',\n    '\\u010F': 'd',\n    '\\u1E0D': 'd',\n    '\\u1E11': 'd',\n    '\\u1E13': 'd',\n    '\\u1E0F': 'd',\n    '\\u0111': 'd',\n    '\\u018C': 'd',\n    '\\u0256': 'd',\n    '\\u0257': 'd',\n    '\\uA77A': 'd',\n    '\\u01F3': 'dz',\n    '\\u01C6': 'dz',\n    '\\u24D4': 'e',\n    '\\uFF45': 'e',\n    '\\u00E8': 'e',\n    '\\u00E9': 'e',\n    '\\u00EA': 'e',\n    '\\u1EC1': 'e',\n    '\\u1EBF': 'e',\n    '\\u1EC5': 'e',\n    '\\u1EC3': 'e',\n    '\\u1EBD': 'e',\n    '\\u0113': 'e',\n    '\\u1E15': 'e',\n    '\\u1E17': 'e',\n    '\\u0115': 'e',\n    '\\u0117': 'e',\n    '\\u00EB': 'e',\n    '\\u1EBB': 'e',\n    '\\u011B': 'e',\n    '\\u0205': 'e',\n    '\\u0207': 'e',\n    '\\u1EB9': 'e',\n    '\\u1EC7': 'e',\n    '\\u0229': 'e',\n    '\\u1E1D': 'e',\n    '\\u0119': 'e',\n    '\\u1E19': 'e',\n    '\\u1E1B': 'e',\n    '\\u0247': 'e',\n    '\\u025B': 'e',\n    '\\u01DD': 'e',\n    '\\u24D5': 'f',\n    '\\uFF46': 'f',\n    '\\u1E1F': 'f',\n    '\\u0192': 'f',\n    '\\uA77C': 'f',\n    '\\u24D6': 'g',\n    '\\uFF47': 'g',\n    '\\u01F5': 'g',\n    '\\u011D': 'g',\n    '\\u1E21': 'g',\n    '\\u011F': 'g',\n    '\\u0121': 'g',\n    '\\u01E7': 'g',\n    '\\u0123': 'g',\n    '\\u01E5': 'g',\n    '\\u0260': 'g',\n    '\\uA7A1': 'g',\n    '\\u1D79': 'g',\n    '\\uA77F': 'g',\n    '\\u24D7': 'h',\n    '\\uFF48': 'h',\n    '\\u0125': 'h',\n    '\\u1E23': 'h',\n    '\\u1E27': 'h',\n    '\\u021F': 'h',\n    '\\u1E25': 'h',\n    '\\u1E29': 'h',\n    '\\u1E2B': 'h',\n    '\\u1E96': 'h',\n    '\\u0127': 'h',\n    '\\u2C68': 'h',\n    '\\u2C76': 'h',\n    '\\u0265': 'h',\n    '\\u0195': 'hv',\n    '\\u24D8': 'i',\n    '\\uFF49': 'i',\n    '\\u00EC': 'i',\n    '\\u00ED': 'i',\n    '\\u00EE': 'i',\n    '\\u0129': 'i',\n    '\\u012B': 'i',\n    '\\u012D': 'i',\n    '\\u00EF': 'i',\n    '\\u1E2F': 'i',\n    '\\u1EC9': 'i',\n    '\\u01D0': 'i',\n    '\\u0209': 'i',\n    '\\u020B': 'i',\n    '\\u1ECB': 'i',\n    '\\u012F': 'i',\n    '\\u1E2D': 'i',\n    '\\u0268': 'i',\n    '\\u0131': 'i',\n    '\\u24D9': 'j',\n    '\\uFF4A': 'j',\n    '\\u0135': 'j',\n    '\\u01F0': 'j',\n    '\\u0249': 'j',\n    '\\u24DA': 'k',\n    '\\uFF4B': 'k',\n    '\\u1E31': 'k',\n    '\\u01E9': 'k',\n    '\\u1E33': 'k',\n    '\\u0137': 'k',\n    '\\u1E35': 'k',\n    '\\u0199': 'k',\n    '\\u2C6A': 'k',\n    '\\uA741': 'k',\n    '\\uA743': 'k',\n    '\\uA745': 'k',\n    '\\uA7A3': 'k',\n    '\\u24DB': 'l',\n    '\\uFF4C': 'l',\n    '\\u0140': 'l',\n    '\\u013A': 'l',\n    '\\u013E': 'l',\n    '\\u1E37': 'l',\n    '\\u1E39': 'l',\n    '\\u013C': 'l',\n    '\\u1E3D': 'l',\n    '\\u1E3B': 'l',\n    '\\u017F': 'l',\n    '\\u0142': 'l',\n    '\\u019A': 'l',\n    '\\u026B': 'l',\n    '\\u2C61': 'l',\n    '\\uA749': 'l',\n    '\\uA781': 'l',\n    '\\uA747': 'l',\n    '\\u01C9': 'lj',\n    '\\u24DC': 'm',\n    '\\uFF4D': 'm',\n    '\\u1E3F': 'm',\n    '\\u1E41': 'm',\n    '\\u1E43': 'm',\n    '\\u0271': 'm',\n    '\\u026F': 'm',\n    '\\u24DD': 'n',\n    '\\uFF4E': 'n',\n    '\\u01F9': 'n',\n    '\\u0144': 'n',\n    '\\u00F1': 'n',\n    '\\u1E45': 'n',\n    '\\u0148': 'n',\n    '\\u1E47': 'n',\n    '\\u0146': 'n',\n    '\\u1E4B': 'n',\n    '\\u1E49': 'n',\n    '\\u019E': 'n',\n    '\\u0272': 'n',\n    '\\u0149': 'n',\n    '\\uA791': 'n',\n    '\\uA7A5': 'n',\n    '\\u01CC': 'nj',\n    '\\u24DE': 'o',\n    '\\uFF4F': 'o',\n    '\\u00F2': 'o',\n    '\\u00F3': 'o',\n    '\\u00F4': 'o',\n    '\\u1ED3': 'o',\n    '\\u1ED1': 'o',\n    '\\u1ED7': 'o',\n    '\\u1ED5': 'o',\n    '\\u00F5': 'o',\n    '\\u1E4D': 'o',\n    '\\u022D': 'o',\n    '\\u1E4F': 'o',\n    '\\u014D': 'o',\n    '\\u1E51': 'o',\n    '\\u1E53': 'o',\n    '\\u014F': 'o',\n    '\\u022F': 'o',\n    '\\u0231': 'o',\n    '\\u00F6': 'o',\n    '\\u022B': 'o',\n    '\\u1ECF': 'o',\n    '\\u0151': 'o',\n    '\\u01D2': 'o',\n    '\\u020D': 'o',\n    '\\u020F': 'o',\n    '\\u01A1': 'o',\n    '\\u1EDD': 'o',\n    '\\u1EDB': 'o',\n    '\\u1EE1': 'o',\n    '\\u1EDF': 'o',\n    '\\u1EE3': 'o',\n    '\\u1ECD': 'o',\n    '\\u1ED9': 'o',\n    '\\u01EB': 'o',\n    '\\u01ED': 'o',\n    '\\u00F8': 'o',\n    '\\u01FF': 'o',\n    '\\u0254': 'o',\n    '\\uA74B': 'o',\n    '\\uA74D': 'o',\n    '\\u0275': 'o',\n    '\\u0153': 'oe',\n    '\\u01A3': 'oi',\n    '\\u0223': 'ou',\n    '\\uA74F': 'oo',\n    '\\u24DF': 'p',\n    '\\uFF50': 'p',\n    '\\u1E55': 'p',\n    '\\u1E57': 'p',\n    '\\u01A5': 'p',\n    '\\u1D7D': 'p',\n    '\\uA751': 'p',\n    '\\uA753': 'p',\n    '\\uA755': 'p',\n    '\\u24E0': 'q',\n    '\\uFF51': 'q',\n    '\\u024B': 'q',\n    '\\uA757': 'q',\n    '\\uA759': 'q',\n    '\\u24E1': 'r',\n    '\\uFF52': 'r',\n    '\\u0155': 'r',\n    '\\u1E59': 'r',\n    '\\u0159': 'r',\n    '\\u0211': 'r',\n    '\\u0213': 'r',\n    '\\u1E5B': 'r',\n    '\\u1E5D': 'r',\n    '\\u0157': 'r',\n    '\\u1E5F': 'r',\n    '\\u024D': 'r',\n    '\\u027D': 'r',\n    '\\uA75B': 'r',\n    '\\uA7A7': 'r',\n    '\\uA783': 'r',\n    '\\u24E2': 's',\n    '\\uFF53': 's',\n    '\\u00DF': 's',\n    '\\u015B': 's',\n    '\\u1E65': 's',\n    '\\u015D': 's',\n    '\\u1E61': 's',\n    '\\u0161': 's',\n    '\\u1E67': 's',\n    '\\u1E63': 's',\n    '\\u1E69': 's',\n    '\\u0219': 's',\n    '\\u015F': 's',\n    '\\u023F': 's',\n    '\\uA7A9': 's',\n    '\\uA785': 's',\n    '\\u1E9B': 's',\n    '\\u24E3': 't',\n    '\\uFF54': 't',\n    '\\u1E6B': 't',\n    '\\u1E97': 't',\n    '\\u0165': 't',\n    '\\u1E6D': 't',\n    '\\u021B': 't',\n    '\\u0163': 't',\n    '\\u1E71': 't',\n    '\\u1E6F': 't',\n    '\\u0167': 't',\n    '\\u01AD': 't',\n    '\\u0288': 't',\n    '\\u2C66': 't',\n    '\\uA787': 't',\n    '\\uA729': 'tz',\n    '\\u24E4': 'u',\n    '\\uFF55': 'u',\n    '\\u00F9': 'u',\n    '\\u00FA': 'u',\n    '\\u00FB': 'u',\n    '\\u0169': 'u',\n    '\\u1E79': 'u',\n    '\\u016B': 'u',\n    '\\u1E7B': 'u',\n    '\\u016D': 'u',\n    '\\u00FC': 'u',\n    '\\u01DC': 'u',\n    '\\u01D8': 'u',\n    '\\u01D6': 'u',\n    '\\u01DA': 'u',\n    '\\u1EE7': 'u',\n    '\\u016F': 'u',\n    '\\u0171': 'u',\n    '\\u01D4': 'u',\n    '\\u0215': 'u',\n    '\\u0217': 'u',\n    '\\u01B0': 'u',\n    '\\u1EEB': 'u',\n    '\\u1EE9': 'u',\n    '\\u1EEF': 'u',\n    '\\u1EED': 'u',\n    '\\u1EF1': 'u',\n    '\\u1EE5': 'u',\n    '\\u1E73': 'u',\n    '\\u0173': 'u',\n    '\\u1E77': 'u',\n    '\\u1E75': 'u',\n    '\\u0289': 'u',\n    '\\u24E5': 'v',\n    '\\uFF56': 'v',\n    '\\u1E7D': 'v',\n    '\\u1E7F': 'v',\n    '\\u028B': 'v',\n    '\\uA75F': 'v',\n    '\\u028C': 'v',\n    '\\uA761': 'vy',\n    '\\u24E6': 'w',\n    '\\uFF57': 'w',\n    '\\u1E81': 'w',\n    '\\u1E83': 'w',\n    '\\u0175': 'w',\n    '\\u1E87': 'w',\n    '\\u1E85': 'w',\n    '\\u1E98': 'w',\n    '\\u1E89': 'w',\n    '\\u2C73': 'w',\n    '\\u24E7': 'x',\n    '\\uFF58': 'x',\n    '\\u1E8B': 'x',\n    '\\u1E8D': 'x',\n    '\\u24E8': 'y',\n    '\\uFF59': 'y',\n    '\\u1EF3': 'y',\n    '\\u00FD': 'y',\n    '\\u0177': 'y',\n    '\\u1EF9': 'y',\n    '\\u0233': 'y',\n    '\\u1E8F': 'y',\n    '\\u00FF': 'y',\n    '\\u1EF7': 'y',\n    '\\u1E99': 'y',\n    '\\u1EF5': 'y',\n    '\\u01B4': 'y',\n    '\\u024F': 'y',\n    '\\u1EFF': 'y',\n    '\\u24E9': 'z',\n    '\\uFF5A': 'z',\n    '\\u017A': 'z',\n    '\\u1E91': 'z',\n    '\\u017C': 'z',\n    '\\u017E': 'z',\n    '\\u1E93': 'z',\n    '\\u1E95': 'z',\n    '\\u01B6': 'z',\n    '\\u0225': 'z',\n    '\\u0240': 'z',\n    '\\u2C6C': 'z',\n    '\\uA763': 'z',\n    '\\u0386': '\\u0391',\n    '\\u0388': '\\u0395',\n    '\\u0389': '\\u0397',\n    '\\u038A': '\\u0399',\n    '\\u03AA': '\\u0399',\n    '\\u038C': '\\u039F',\n    '\\u038E': '\\u03A5',\n    '\\u03AB': '\\u03A5',\n    '\\u038F': '\\u03A9',\n    '\\u03AC': '\\u03B1',\n    '\\u03AD': '\\u03B5',\n    '\\u03AE': '\\u03B7',\n    '\\u03AF': '\\u03B9',\n    '\\u03CA': '\\u03B9',\n    '\\u0390': '\\u03B9',\n    '\\u03CC': '\\u03BF',\n    '\\u03CD': '\\u03C5',\n    '\\u03CB': '\\u03C5',\n    '\\u03B0': '\\u03C5',\n    '\\u03CE': '\\u03C9',\n    '\\u03C2': '\\u03C3',\n    '\\u2019': '\\''\n  };\n\n  return diacritics;\n});\n\nS2.define('select2/data/base',[\n  '../utils'\n], function (Utils) {\n  function BaseAdapter ($element, options) {\n    BaseAdapter.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(BaseAdapter, Utils.Observable);\n\n  BaseAdapter.prototype.current = function (callback) {\n    throw new Error('The `current` method must be defined in child classes.');\n  };\n\n  BaseAdapter.prototype.query = function (params, callback) {\n    throw new Error('The `query` method must be defined in child classes.');\n  };\n\n  BaseAdapter.prototype.bind = function (container, $container) {\n    // Can be implemented in subclasses\n  };\n\n  BaseAdapter.prototype.destroy = function () {\n    // Can be implemented in subclasses\n  };\n\n  BaseAdapter.prototype.generateResultId = function (container, data) {\n    var id = container.id + '-result-';\n\n    id += Utils.generateChars(4);\n\n    if (data.id != null) {\n      id += '-' + data.id.toString();\n    } else {\n      id += '-' + Utils.generateChars(4);\n    }\n    return id;\n  };\n\n  return BaseAdapter;\n});\n\nS2.define('select2/data/select',[\n  './base',\n  '../utils',\n  'jquery'\n], function (BaseAdapter, Utils, $) {\n  function SelectAdapter ($element, options) {\n    this.$element = $element;\n    this.options = options;\n\n    SelectAdapter.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(SelectAdapter, BaseAdapter);\n\n  SelectAdapter.prototype.current = function (callback) {\n    var data = [];\n    var self = this;\n\n    this.$element.find(':selected').each(function () {\n      var $option = $(this);\n\n      var option = self.item($option);\n\n      data.push(option);\n    });\n\n    callback(data);\n  };\n\n  SelectAdapter.prototype.select = function (data) {\n    var self = this;\n\n    data.selected = true;\n\n    // If data.element is a DOM node, use it instead\n    if ($(data.element).is('option')) {\n      data.element.selected = true;\n\n      this.$element.trigger('change');\n\n      return;\n    }\n\n    if (this.$element.prop('multiple')) {\n      this.current(function (currentData) {\n        var val = [];\n\n        data = [data];\n        data.push.apply(data, currentData);\n\n        for (var d = 0; d < data.length; d++) {\n          var id = data[d].id;\n\n          if ($.inArray(id, val) === -1) {\n            val.push(id);\n          }\n        }\n\n        self.$element.val(val);\n        self.$element.trigger('change');\n      });\n    } else {\n      var val = data.id;\n\n      this.$element.val(val);\n      this.$element.trigger('change');\n    }\n  };\n\n  SelectAdapter.prototype.unselect = function (data) {\n    var self = this;\n\n    if (!this.$element.prop('multiple')) {\n      return;\n    }\n\n    data.selected = false;\n\n    if ($(data.element).is('option')) {\n      data.element.selected = false;\n\n      this.$element.trigger('change');\n\n      return;\n    }\n\n    this.current(function (currentData) {\n      var val = [];\n\n      for (var d = 0; d < currentData.length; d++) {\n        var id = currentData[d].id;\n\n        if (id !== data.id && $.inArray(id, val) === -1) {\n          val.push(id);\n        }\n      }\n\n      self.$element.val(val);\n\n      self.$element.trigger('change');\n    });\n  };\n\n  SelectAdapter.prototype.bind = function (container, $container) {\n    var self = this;\n\n    this.container = container;\n\n    container.on('select', function (params) {\n      self.select(params.data);\n    });\n\n    container.on('unselect', function (params) {\n      self.unselect(params.data);\n    });\n  };\n\n  SelectAdapter.prototype.destroy = function () {\n    // Remove anything added to child elements\n    this.$element.find('*').each(function () {\n      // Remove any custom data set by Select2\n      Utils.RemoveData(this);\n    });\n  };\n\n  SelectAdapter.prototype.query = function (params, callback) {\n    var data = [];\n    var self = this;\n\n    var $options = this.$element.children();\n\n    $options.each(function () {\n      var $option = $(this);\n\n      if (!$option.is('option') && !$option.is('optgroup')) {\n        return;\n      }\n\n      var option = self.item($option);\n\n      var matches = self.matches(params, option);\n\n      if (matches !== null) {\n        data.push(matches);\n      }\n    });\n\n    callback({\n      results: data\n    });\n  };\n\n  SelectAdapter.prototype.addOptions = function ($options) {\n    Utils.appendMany(this.$element, $options);\n  };\n\n  SelectAdapter.prototype.option = function (data) {\n    var option;\n\n    if (data.children) {\n      option = document.createElement('optgroup');\n      option.label = data.text;\n    } else {\n      option = document.createElement('option');\n\n      if (option.textContent !== undefined) {\n        option.textContent = data.text;\n      } else {\n        option.innerText = data.text;\n      }\n    }\n\n    if (data.id !== undefined) {\n      option.value = data.id;\n    }\n\n    if (data.disabled) {\n      option.disabled = true;\n    }\n\n    if (data.selected) {\n      option.selected = true;\n    }\n\n    if (data.title) {\n      option.title = data.title;\n    }\n\n    var $option = $(option);\n\n    var normalizedData = this._normalizeItem(data);\n    normalizedData.element = option;\n\n    // Override the option's data with the combined data\n    Utils.StoreData(option, 'data', normalizedData);\n\n    return $option;\n  };\n\n  SelectAdapter.prototype.item = function ($option) {\n    var data = {};\n\n    data = Utils.GetData($option[0], 'data');\n\n    if (data != null) {\n      return data;\n    }\n\n    if ($option.is('option')) {\n      data = {\n        id: $option.val(),\n        text: $option.text(),\n        disabled: $option.prop('disabled'),\n        selected: $option.prop('selected'),\n        title: $option.prop('title')\n      };\n    } else if ($option.is('optgroup')) {\n      data = {\n        text: $option.prop('label'),\n        children: [],\n        title: $option.prop('title')\n      };\n\n      var $children = $option.children('option');\n      var children = [];\n\n      for (var c = 0; c < $children.length; c++) {\n        var $child = $($children[c]);\n\n        var child = this.item($child);\n\n        children.push(child);\n      }\n\n      data.children = children;\n    }\n\n    data = this._normalizeItem(data);\n    data.element = $option[0];\n\n    Utils.StoreData($option[0], 'data', data);\n\n    return data;\n  };\n\n  SelectAdapter.prototype._normalizeItem = function (item) {\n    if (item !== Object(item)) {\n      item = {\n        id: item,\n        text: item\n      };\n    }\n\n    item = $.extend({}, {\n      text: ''\n    }, item);\n\n    var defaults = {\n      selected: false,\n      disabled: false\n    };\n\n    if (item.id != null) {\n      item.id = item.id.toString();\n    }\n\n    if (item.text != null) {\n      item.text = item.text.toString();\n    }\n\n    if (item._resultId == null && item.id && this.container != null) {\n      item._resultId = this.generateResultId(this.container, item);\n    }\n\n    return $.extend({}, defaults, item);\n  };\n\n  SelectAdapter.prototype.matches = function (params, data) {\n    var matcher = this.options.get('matcher');\n\n    return matcher(params, data);\n  };\n\n  return SelectAdapter;\n});\n\nS2.define('select2/data/array',[\n  './select',\n  '../utils',\n  'jquery'\n], function (SelectAdapter, Utils, $) {\n  function ArrayAdapter ($element, options) {\n    this._dataToConvert = options.get('data') || [];\n\n    ArrayAdapter.__super__.constructor.call(this, $element, options);\n  }\n\n  Utils.Extend(ArrayAdapter, SelectAdapter);\n\n  ArrayAdapter.prototype.bind = function (container, $container) {\n    ArrayAdapter.__super__.bind.call(this, container, $container);\n\n    this.addOptions(this.convertToOptions(this._dataToConvert));\n  };\n\n  ArrayAdapter.prototype.select = function (data) {\n    var $option = this.$element.find('option').filter(function (i, elm) {\n      return elm.value == data.id.toString();\n    });\n\n    if ($option.length === 0) {\n      $option = this.option(data);\n\n      this.addOptions($option);\n    }\n\n    ArrayAdapter.__super__.select.call(this, data);\n  };\n\n  ArrayAdapter.prototype.convertToOptions = function (data) {\n    var self = this;\n\n    var $existing = this.$element.find('option');\n    var existingIds = $existing.map(function () {\n      return self.item($(this)).id;\n    }).get();\n\n    var $options = [];\n\n    // Filter out all items except for the one passed in the argument\n    function onlyItem (item) {\n      return function () {\n        return $(this).val() == item.id;\n      };\n    }\n\n    for (var d = 0; d < data.length; d++) {\n      var item = this._normalizeItem(data[d]);\n\n      // Skip items which were pre-loaded, only merge the data\n      if ($.inArray(item.id, existingIds) >= 0) {\n        var $existingOption = $existing.filter(onlyItem(item));\n\n        var existingData = this.item($existingOption);\n        var newData = $.extend(true, {}, item, existingData);\n\n        var $newOption = this.option(newData);\n\n        $existingOption.replaceWith($newOption);\n\n        continue;\n      }\n\n      var $option = this.option(item);\n\n      if (item.children) {\n        var $children = this.convertToOptions(item.children);\n\n        Utils.appendMany($option, $children);\n      }\n\n      $options.push($option);\n    }\n\n    return $options;\n  };\n\n  return ArrayAdapter;\n});\n\nS2.define('select2/data/ajax',[\n  './array',\n  '../utils',\n  'jquery'\n], function (ArrayAdapter, Utils, $) {\n  function AjaxAdapter ($element, options) {\n    this.ajaxOptions = this._applyDefaults(options.get('ajax'));\n\n    if (this.ajaxOptions.processResults != null) {\n      this.processResults = this.ajaxOptions.processResults;\n    }\n\n    AjaxAdapter.__super__.constructor.call(this, $element, options);\n  }\n\n  Utils.Extend(AjaxAdapter, ArrayAdapter);\n\n  AjaxAdapter.prototype._applyDefaults = function (options) {\n    var defaults = {\n      data: function (params) {\n        return $.extend({}, params, {\n          q: params.term\n        });\n      },\n      transport: function (params, success, failure) {\n        var $request = $.ajax(params);\n\n        $request.then(success);\n        $request.fail(failure);\n\n        return $request;\n      }\n    };\n\n    return $.extend({}, defaults, options, true);\n  };\n\n  AjaxAdapter.prototype.processResults = function (results) {\n    return results;\n  };\n\n  AjaxAdapter.prototype.query = function (params, callback) {\n    var matches = [];\n    var self = this;\n\n    if (this._request != null) {\n      // JSONP requests cannot always be aborted\n      if ($.isFunction(this._request.abort)) {\n        this._request.abort();\n      }\n\n      this._request = null;\n    }\n\n    var options = $.extend({\n      type: 'GET'\n    }, this.ajaxOptions);\n\n    if (typeof options.url === 'function') {\n      options.url = options.url.call(this.$element, params);\n    }\n\n    if (typeof options.data === 'function') {\n      options.data = options.data.call(this.$element, params);\n    }\n\n    function request () {\n      var $request = options.transport(options, function (data) {\n        var results = self.processResults(data, params);\n\n        if (self.options.get('debug') && window.console && console.error) {\n          // Check to make sure that the response included a `results` key.\n          if (!results || !results.results || !$.isArray(results.results)) {\n            console.error(\n              'Select2: The AJAX results did not return an array in the ' +\n              '`results` key of the response.'\n            );\n          }\n        }\n\n        callback(results);\n      }, function () {\n        // Attempt to detect if a request was aborted\n        // Only works if the transport exposes a status property\n        if ('status' in $request &&\n            ($request.status === 0 || $request.status === '0')) {\n          return;\n        }\n\n        self.trigger('results:message', {\n          message: 'errorLoading'\n        });\n      });\n\n      self._request = $request;\n    }\n\n    if (this.ajaxOptions.delay && params.term != null) {\n      if (this._queryTimeout) {\n        window.clearTimeout(this._queryTimeout);\n      }\n\n      this._queryTimeout = window.setTimeout(request, this.ajaxOptions.delay);\n    } else {\n      request();\n    }\n  };\n\n  return AjaxAdapter;\n});\n\nS2.define('select2/data/tags',[\n  'jquery'\n], function ($) {\n  function Tags (decorated, $element, options) {\n    var tags = options.get('tags');\n\n    var createTag = options.get('createTag');\n\n    if (createTag !== undefined) {\n      this.createTag = createTag;\n    }\n\n    var insertTag = options.get('insertTag');\n\n    if (insertTag !== undefined) {\n        this.insertTag = insertTag;\n    }\n\n    decorated.call(this, $element, options);\n\n    if ($.isArray(tags)) {\n      for (var t = 0; t < tags.length; t++) {\n        var tag = tags[t];\n        var item = this._normalizeItem(tag);\n\n        var $option = this.option(item);\n\n        this.$element.append($option);\n      }\n    }\n  }\n\n  Tags.prototype.query = function (decorated, params, callback) {\n    var self = this;\n\n    this._removeOldTags();\n\n    if (params.term == null || params.page != null) {\n      decorated.call(this, params, callback);\n      return;\n    }\n\n    function wrapper (obj, child) {\n      var data = obj.results;\n\n      for (var i = 0; i < data.length; i++) {\n        var option = data[i];\n\n        var checkChildren = (\n          option.children != null &&\n          !wrapper({\n            results: option.children\n          }, true)\n        );\n\n        var optionText = (option.text || '').toUpperCase();\n        var paramsTerm = (params.term || '').toUpperCase();\n\n        var checkText = optionText === paramsTerm;\n\n        if (checkText || checkChildren) {\n          if (child) {\n            return false;\n          }\n\n          obj.data = data;\n          callback(obj);\n\n          return;\n        }\n      }\n\n      if (child) {\n        return true;\n      }\n\n      var tag = self.createTag(params);\n\n      if (tag != null) {\n        var $option = self.option(tag);\n        $option.attr('data-select2-tag', true);\n\n        self.addOptions([$option]);\n\n        self.insertTag(data, tag);\n      }\n\n      obj.results = data;\n\n      callback(obj);\n    }\n\n    decorated.call(this, params, wrapper);\n  };\n\n  Tags.prototype.createTag = function (decorated, params) {\n    var term = $.trim(params.term);\n\n    if (term === '') {\n      return null;\n    }\n\n    return {\n      id: term,\n      text: term\n    };\n  };\n\n  Tags.prototype.insertTag = function (_, data, tag) {\n    data.unshift(tag);\n  };\n\n  Tags.prototype._removeOldTags = function (_) {\n    var $options = this.$element.find('option[data-select2-tag]');\n\n    $options.each(function () {\n      if (this.selected) {\n        return;\n      }\n\n      $(this).remove();\n    });\n  };\n\n  return Tags;\n});\n\nS2.define('select2/data/tokenizer',[\n  'jquery'\n], function ($) {\n  function Tokenizer (decorated, $element, options) {\n    var tokenizer = options.get('tokenizer');\n\n    if (tokenizer !== undefined) {\n      this.tokenizer = tokenizer;\n    }\n\n    decorated.call(this, $element, options);\n  }\n\n  Tokenizer.prototype.bind = function (decorated, container, $container) {\n    decorated.call(this, container, $container);\n\n    this.$search =  container.dropdown.$search || container.selection.$search ||\n      $container.find('.select2-search__field');\n  };\n\n  Tokenizer.prototype.query = function (decorated, params, callback) {\n    var self = this;\n\n    function createAndSelect (data) {\n      // Normalize the data object so we can use it for checks\n      var item = self._normalizeItem(data);\n\n      // Check if the data object already exists as a tag\n      // Select it if it doesn't\n      var $existingOptions = self.$element.find('option').filter(function () {\n        return $(this).val() === item.id;\n      });\n\n      // If an existing option wasn't found for it, create the option\n      if (!$existingOptions.length) {\n        var $option = self.option(item);\n        $option.attr('data-select2-tag', true);\n\n        self._removeOldTags();\n        self.addOptions([$option]);\n      }\n\n      // Select the item, now that we know there is an option for it\n      select(item);\n    }\n\n    function select (data) {\n      self.trigger('select', {\n        data: data\n      });\n    }\n\n    params.term = params.term || '';\n\n    var tokenData = this.tokenizer(params, this.options, createAndSelect);\n\n    if (tokenData.term !== params.term) {\n      // Replace the search term if we have the search box\n      if (this.$search.length) {\n        this.$search.val(tokenData.term);\n        this.$search.trigger('focus');\n      }\n\n      params.term = tokenData.term;\n    }\n\n    decorated.call(this, params, callback);\n  };\n\n  Tokenizer.prototype.tokenizer = function (_, params, options, callback) {\n    var separators = options.get('tokenSeparators') || [];\n    var term = params.term;\n    var i = 0;\n\n    var createTag = this.createTag || function (params) {\n      return {\n        id: params.term,\n        text: params.term\n      };\n    };\n\n    while (i < term.length) {\n      var termChar = term[i];\n\n      if ($.inArray(termChar, separators) === -1) {\n        i++;\n\n        continue;\n      }\n\n      var part = term.substr(0, i);\n      var partParams = $.extend({}, params, {\n        term: part\n      });\n\n      var data = createTag(partParams);\n\n      if (data == null) {\n        i++;\n        continue;\n      }\n\n      callback(data);\n\n      // Reset the term to not include the tokenized portion\n      term = term.substr(i + 1) || '';\n      i = 0;\n    }\n\n    return {\n      term: term\n    };\n  };\n\n  return Tokenizer;\n});\n\nS2.define('select2/data/minimumInputLength',[\n\n], function () {\n  function MinimumInputLength (decorated, $e, options) {\n    this.minimumInputLength = options.get('minimumInputLength');\n\n    decorated.call(this, $e, options);\n  }\n\n  MinimumInputLength.prototype.query = function (decorated, params, callback) {\n    params.term = params.term || '';\n\n    if (params.term.length < this.minimumInputLength) {\n      this.trigger('results:message', {\n        message: 'inputTooShort',\n        args: {\n          minimum: this.minimumInputLength,\n          input: params.term,\n          params: params\n        }\n      });\n\n      return;\n    }\n\n    decorated.call(this, params, callback);\n  };\n\n  return MinimumInputLength;\n});\n\nS2.define('select2/data/maximumInputLength',[\n\n], function () {\n  function MaximumInputLength (decorated, $e, options) {\n    this.maximumInputLength = options.get('maximumInputLength');\n\n    decorated.call(this, $e, options);\n  }\n\n  MaximumInputLength.prototype.query = function (decorated, params, callback) {\n    params.term = params.term || '';\n\n    if (this.maximumInputLength > 0 &&\n        params.term.length > this.maximumInputLength) {\n      this.trigger('results:message', {\n        message: 'inputTooLong',\n        args: {\n          maximum: this.maximumInputLength,\n          input: params.term,\n          params: params\n        }\n      });\n\n      return;\n    }\n\n    decorated.call(this, params, callback);\n  };\n\n  return MaximumInputLength;\n});\n\nS2.define('select2/data/maximumSelectionLength',[\n\n], function (){\n  function MaximumSelectionLength (decorated, $e, options) {\n    this.maximumSelectionLength = options.get('maximumSelectionLength');\n\n    decorated.call(this, $e, options);\n  }\n\n  MaximumSelectionLength.prototype.bind =\n    function (decorated, container, $container) {\n      var self = this;\n\n      decorated.call(this, container, $container);\n\n      container.on('select', function () {\n        self._checkIfMaximumSelected();\n      });\n  };\n\n  MaximumSelectionLength.prototype.query =\n    function (decorated, params, callback) {\n      var self = this;\n\n      this._checkIfMaximumSelected(function () {\n        decorated.call(self, params, callback);\n      });\n  };\n\n  MaximumSelectionLength.prototype._checkIfMaximumSelected =\n    function (_, successCallback) {\n      var self = this;\n\n      this.current(function (currentData) {\n        var count = currentData != null ? currentData.length : 0;\n        if (self.maximumSelectionLength > 0 &&\n          count >= self.maximumSelectionLength) {\n          self.trigger('results:message', {\n            message: 'maximumSelected',\n            args: {\n              maximum: self.maximumSelectionLength\n            }\n          });\n          return;\n        }\n\n        if (successCallback) {\n          successCallback();\n        }\n      });\n  };\n\n  return MaximumSelectionLength;\n});\n\nS2.define('select2/dropdown',[\n  'jquery',\n  './utils'\n], function ($, Utils) {\n  function Dropdown ($element, options) {\n    this.$element = $element;\n    this.options = options;\n\n    Dropdown.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(Dropdown, Utils.Observable);\n\n  Dropdown.prototype.render = function () {\n    var $dropdown = $(\n      '<span class=\"select2-dropdown\">' +\n        '<span class=\"select2-results\"></span>' +\n      '</span>'\n    );\n\n    $dropdown.attr('dir', this.options.get('dir'));\n\n    this.$dropdown = $dropdown;\n\n    return $dropdown;\n  };\n\n  Dropdown.prototype.bind = function () {\n    // Should be implemented in subclasses\n  };\n\n  Dropdown.prototype.position = function ($dropdown, $container) {\n    // Should be implemented in subclasses\n  };\n\n  Dropdown.prototype.destroy = function () {\n    // Remove the dropdown from the DOM\n    this.$dropdown.remove();\n  };\n\n  return Dropdown;\n});\n\nS2.define('select2/dropdown/search',[\n  'jquery',\n  '../utils'\n], function ($, Utils) {\n  function Search () { }\n\n  Search.prototype.render = function (decorated) {\n    var $rendered = decorated.call(this);\n\n    var $search = $(\n      '<span class=\"select2-search select2-search--dropdown\">' +\n        '<input class=\"select2-search__field\" type=\"search\" tabindex=\"-1\"' +\n        ' autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"none\"' +\n        ' spellcheck=\"false\" role=\"searchbox\" aria-autocomplete=\"list\" />' +\n      '</span>'\n    );\n\n    this.$searchContainer = $search;\n    this.$search = $search.find('input');\n\n    $rendered.prepend($search);\n\n    return $rendered;\n  };\n\n  Search.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    var resultsId = container.id + '-results';\n\n    decorated.call(this, container, $container);\n\n    this.$search.on('keydown', function (evt) {\n      self.trigger('keypress', evt);\n\n      self._keyUpPrevented = evt.isDefaultPrevented();\n    });\n\n    // Workaround for browsers which do not support the `input` event\n    // This will prevent double-triggering of events for browsers which support\n    // both the `keyup` and `input` events.\n    this.$search.on('input', function (evt) {\n      // Unbind the duplicated `keyup` event\n      $(this).off('keyup');\n    });\n\n    this.$search.on('keyup input', function (evt) {\n      self.handleSearch(evt);\n    });\n\n    container.on('open', function () {\n      self.$search.attr('tabindex', 0);\n      self.$search.attr('aria-controls', resultsId);\n\n      self.$search.trigger('focus');\n\n      window.setTimeout(function () {\n        self.$search.trigger('focus');\n      }, 0);\n    });\n\n    container.on('close', function () {\n      self.$search.attr('tabindex', -1);\n      self.$search.removeAttr('aria-controls');\n      self.$search.removeAttr('aria-activedescendant');\n\n      self.$search.val('');\n      self.$search.trigger('blur');\n    });\n\n    container.on('focus', function () {\n      if (!container.isOpen()) {\n        self.$search.trigger('focus');\n      }\n    });\n\n    container.on('results:all', function (params) {\n      if (params.query.term == null || params.query.term === '') {\n        var showSearch = self.showSearch(params);\n\n        if (showSearch) {\n          self.$searchContainer.removeClass('select2-search--hide');\n        } else {\n          self.$searchContainer.addClass('select2-search--hide');\n        }\n      }\n    });\n\n    container.on('results:focus', function (params) {\n      if (params.data._resultId) {\n        self.$search.attr('aria-activedescendant', params.data._resultId);\n      } else {\n        self.$search.removeAttr('aria-activedescendant');\n      }\n    });\n  };\n\n  Search.prototype.handleSearch = function (evt) {\n    if (!this._keyUpPrevented) {\n      var input = this.$search.val();\n\n      this.trigger('query', {\n        term: input\n      });\n    }\n\n    this._keyUpPrevented = false;\n  };\n\n  Search.prototype.showSearch = function (_, params) {\n    return true;\n  };\n\n  return Search;\n});\n\nS2.define('select2/dropdown/hidePlaceholder',[\n\n], function () {\n  function HidePlaceholder (decorated, $element, options, dataAdapter) {\n    this.placeholder = this.normalizePlaceholder(options.get('placeholder'));\n\n    decorated.call(this, $element, options, dataAdapter);\n  }\n\n  HidePlaceholder.prototype.append = function (decorated, data) {\n    data.results = this.removePlaceholder(data.results);\n\n    decorated.call(this, data);\n  };\n\n  HidePlaceholder.prototype.normalizePlaceholder = function (_, placeholder) {\n    if (typeof placeholder === 'string') {\n      placeholder = {\n        id: '',\n        text: placeholder\n      };\n    }\n\n    return placeholder;\n  };\n\n  HidePlaceholder.prototype.removePlaceholder = function (_, data) {\n    var modifiedData = data.slice(0);\n\n    for (var d = data.length - 1; d >= 0; d--) {\n      var item = data[d];\n\n      if (this.placeholder.id === item.id) {\n        modifiedData.splice(d, 1);\n      }\n    }\n\n    return modifiedData;\n  };\n\n  return HidePlaceholder;\n});\n\nS2.define('select2/dropdown/infiniteScroll',[\n  'jquery'\n], function ($) {\n  function InfiniteScroll (decorated, $element, options, dataAdapter) {\n    this.lastParams = {};\n\n    decorated.call(this, $element, options, dataAdapter);\n\n    this.$loadingMore = this.createLoadingMore();\n    this.loading = false;\n  }\n\n  InfiniteScroll.prototype.append = function (decorated, data) {\n    this.$loadingMore.remove();\n    this.loading = false;\n\n    decorated.call(this, data);\n\n    if (this.showLoadingMore(data)) {\n      this.$results.append(this.$loadingMore);\n      this.loadMoreIfNeeded();\n    }\n  };\n\n  InfiniteScroll.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    container.on('query', function (params) {\n      self.lastParams = params;\n      self.loading = true;\n    });\n\n    container.on('query:append', function (params) {\n      self.lastParams = params;\n      self.loading = true;\n    });\n\n    this.$results.on('scroll', this.loadMoreIfNeeded.bind(this));\n  };\n\n  InfiniteScroll.prototype.loadMoreIfNeeded = function () {\n    var isLoadMoreVisible = $.contains(\n      document.documentElement,\n      this.$loadingMore[0]\n    );\n\n    if (this.loading || !isLoadMoreVisible) {\n      return;\n    }\n\n    var currentOffset = this.$results.offset().top +\n      this.$results.outerHeight(false);\n    var loadingMoreOffset = this.$loadingMore.offset().top +\n      this.$loadingMore.outerHeight(false);\n\n    if (currentOffset + 50 >= loadingMoreOffset) {\n      this.loadMore();\n    }\n  };\n\n  InfiniteScroll.prototype.loadMore = function () {\n    this.loading = true;\n\n    var params = $.extend({}, {page: 1}, this.lastParams);\n\n    params.page++;\n\n    this.trigger('query:append', params);\n  };\n\n  InfiniteScroll.prototype.showLoadingMore = function (_, data) {\n    return data.pagination && data.pagination.more;\n  };\n\n  InfiniteScroll.prototype.createLoadingMore = function () {\n    var $option = $(\n      '<li ' +\n      'class=\"select2-results__option select2-results__option--load-more\"' +\n      'role=\"option\" aria-disabled=\"true\"></li>'\n    );\n\n    var message = this.options.get('translations').get('loadingMore');\n\n    $option.html(message(this.lastParams));\n\n    return $option;\n  };\n\n  return InfiniteScroll;\n});\n\nS2.define('select2/dropdown/attachBody',[\n  'jquery',\n  '../utils'\n], function ($, Utils) {\n  function AttachBody (decorated, $element, options) {\n    this.$dropdownParent = $(options.get('dropdownParent') || document.body);\n\n    decorated.call(this, $element, options);\n  }\n\n  AttachBody.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    container.on('open', function () {\n      self._showDropdown();\n      self._attachPositioningHandler(container);\n\n      // Must bind after the results handlers to ensure correct sizing\n      self._bindContainerResultHandlers(container);\n    });\n\n    container.on('close', function () {\n      self._hideDropdown();\n      self._detachPositioningHandler(container);\n    });\n\n    this.$dropdownContainer.on('mousedown', function (evt) {\n      evt.stopPropagation();\n    });\n  };\n\n  AttachBody.prototype.destroy = function (decorated) {\n    decorated.call(this);\n\n    this.$dropdownContainer.remove();\n  };\n\n  AttachBody.prototype.position = function (decorated, $dropdown, $container) {\n    // Clone all of the container classes\n    $dropdown.attr('class', $container.attr('class'));\n\n    $dropdown.removeClass('select2');\n    $dropdown.addClass('select2-container--open');\n\n    $dropdown.css({\n      position: 'absolute',\n      top: -999999\n    });\n\n    this.$container = $container;\n  };\n\n  AttachBody.prototype.render = function (decorated) {\n    var $container = $('<span></span>');\n\n    var $dropdown = decorated.call(this);\n    $container.append($dropdown);\n\n    this.$dropdownContainer = $container;\n\n    return $container;\n  };\n\n  AttachBody.prototype._hideDropdown = function (decorated) {\n    this.$dropdownContainer.detach();\n  };\n\n  AttachBody.prototype._bindContainerResultHandlers =\n      function (decorated, container) {\n\n    // These should only be bound once\n    if (this._containerResultsHandlersBound) {\n      return;\n    }\n\n    var self = this;\n\n    container.on('results:all', function () {\n      self._positionDropdown();\n      self._resizeDropdown();\n    });\n\n    container.on('results:append', function () {\n      self._positionDropdown();\n      self._resizeDropdown();\n    });\n\n    container.on('results:message', function () {\n      self._positionDropdown();\n      self._resizeDropdown();\n    });\n\n    container.on('select', function () {\n      self._positionDropdown();\n      self._resizeDropdown();\n    });\n\n    container.on('unselect', function () {\n      self._positionDropdown();\n      self._resizeDropdown();\n    });\n\n    this._containerResultsHandlersBound = true;\n  };\n\n  AttachBody.prototype._attachPositioningHandler =\n      function (decorated, container) {\n    var self = this;\n\n    var scrollEvent = 'scroll.select2.' + container.id;\n    var resizeEvent = 'resize.select2.' + container.id;\n    var orientationEvent = 'orientationchange.select2.' + container.id;\n\n    var $watchers = this.$container.parents().filter(Utils.hasScroll);\n    $watchers.each(function () {\n      Utils.StoreData(this, 'select2-scroll-position', {\n        x: $(this).scrollLeft(),\n        y: $(this).scrollTop()\n      });\n    });\n\n    $watchers.on(scrollEvent, function (ev) {\n      var position = Utils.GetData(this, 'select2-scroll-position');\n      $(this).scrollTop(position.y);\n    });\n\n    $(window).on(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent,\n      function (e) {\n      self._positionDropdown();\n      self._resizeDropdown();\n    });\n  };\n\n  AttachBody.prototype._detachPositioningHandler =\n      function (decorated, container) {\n    var scrollEvent = 'scroll.select2.' + container.id;\n    var resizeEvent = 'resize.select2.' + container.id;\n    var orientationEvent = 'orientationchange.select2.' + container.id;\n\n    var $watchers = this.$container.parents().filter(Utils.hasScroll);\n    $watchers.off(scrollEvent);\n\n    $(window).off(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent);\n  };\n\n  AttachBody.prototype._positionDropdown = function () {\n    var $window = $(window);\n\n    var isCurrentlyAbove = this.$dropdown.hasClass('select2-dropdown--above');\n    var isCurrentlyBelow = this.$dropdown.hasClass('select2-dropdown--below');\n\n    var newDirection = null;\n\n    var offset = this.$container.offset();\n\n    offset.bottom = offset.top + this.$container.outerHeight(false);\n\n    var container = {\n      height: this.$container.outerHeight(false)\n    };\n\n    container.top = offset.top;\n    container.bottom = offset.top + container.height;\n\n    var dropdown = {\n      height: this.$dropdown.outerHeight(false)\n    };\n\n    var viewport = {\n      top: $window.scrollTop(),\n      bottom: $window.scrollTop() + $window.height()\n    };\n\n    var enoughRoomAbove = viewport.top < (offset.top - dropdown.height);\n    var enoughRoomBelow = viewport.bottom > (offset.bottom + dropdown.height);\n\n    var css = {\n      left: offset.left,\n      top: container.bottom\n    };\n\n    // Determine what the parent element is to use for calculating the offset\n    var $offsetParent = this.$dropdownParent;\n\n    // For statically positioned elements, we need to get the element\n    // that is determining the offset\n    if ($offsetParent.css('position') === 'static') {\n      $offsetParent = $offsetParent.offsetParent();\n    }\n\n    var parentOffset = $offsetParent.offset();\n\n    css.top -= parentOffset.top;\n    css.left -= parentOffset.left;\n\n    if (!isCurrentlyAbove && !isCurrentlyBelow) {\n      newDirection = 'below';\n    }\n\n    if (!enoughRoomBelow && enoughRoomAbove && !isCurrentlyAbove) {\n      newDirection = 'above';\n    } else if (!enoughRoomAbove && enoughRoomBelow && isCurrentlyAbove) {\n      newDirection = 'below';\n    }\n\n    if (newDirection == 'above' ||\n      (isCurrentlyAbove && newDirection !== 'below')) {\n      css.top = container.top - parentOffset.top - dropdown.height;\n    }\n\n    if (newDirection != null) {\n      this.$dropdown\n        .removeClass('select2-dropdown--below select2-dropdown--above')\n        .addClass('select2-dropdown--' + newDirection);\n      this.$container\n        .removeClass('select2-container--below select2-container--above')\n        .addClass('select2-container--' + newDirection);\n    }\n\n    this.$dropdownContainer.css(css);\n  };\n\n  AttachBody.prototype._resizeDropdown = function () {\n    var css = {\n      width: this.$container.outerWidth(false) + 'px'\n    };\n\n    if (this.options.get('dropdownAutoWidth')) {\n      css.minWidth = css.width;\n      css.position = 'relative';\n      css.width = 'auto';\n    }\n\n    this.$dropdown.css(css);\n  };\n\n  AttachBody.prototype._showDropdown = function (decorated) {\n    this.$dropdownContainer.appendTo(this.$dropdownParent);\n\n    this._positionDropdown();\n    this._resizeDropdown();\n  };\n\n  return AttachBody;\n});\n\nS2.define('select2/dropdown/minimumResultsForSearch',[\n\n], function () {\n  function countResults (data) {\n    var count = 0;\n\n    for (var d = 0; d < data.length; d++) {\n      var item = data[d];\n\n      if (item.children) {\n        count += countResults(item.children);\n      } else {\n        count++;\n      }\n    }\n\n    return count;\n  }\n\n  function MinimumResultsForSearch (decorated, $element, options, dataAdapter) {\n    this.minimumResultsForSearch = options.get('minimumResultsForSearch');\n\n    if (this.minimumResultsForSearch < 0) {\n      this.minimumResultsForSearch = Infinity;\n    }\n\n    decorated.call(this, $element, options, dataAdapter);\n  }\n\n  MinimumResultsForSearch.prototype.showSearch = function (decorated, params) {\n    if (countResults(params.data.results) < this.minimumResultsForSearch) {\n      return false;\n    }\n\n    return decorated.call(this, params);\n  };\n\n  return MinimumResultsForSearch;\n});\n\nS2.define('select2/dropdown/selectOnClose',[\n  '../utils'\n], function (Utils) {\n  function SelectOnClose () { }\n\n  SelectOnClose.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    container.on('close', function (params) {\n      self._handleSelectOnClose(params);\n    });\n  };\n\n  SelectOnClose.prototype._handleSelectOnClose = function (_, params) {\n    if (params && params.originalSelect2Event != null) {\n      var event = params.originalSelect2Event;\n\n      // Don't select an item if the close event was triggered from a select or\n      // unselect event\n      if (event._type === 'select' || event._type === 'unselect') {\n        return;\n      }\n    }\n\n    var $highlightedResults = this.getHighlightedResults();\n\n    // Only select highlighted results\n    if ($highlightedResults.length < 1) {\n      return;\n    }\n\n    var data = Utils.GetData($highlightedResults[0], 'data');\n\n    // Don't re-select already selected resulte\n    if (\n      (data.element != null && data.element.selected) ||\n      (data.element == null && data.selected)\n    ) {\n      return;\n    }\n\n    this.trigger('select', {\n        data: data\n    });\n  };\n\n  return SelectOnClose;\n});\n\nS2.define('select2/dropdown/closeOnSelect',[\n\n], function () {\n  function CloseOnSelect () { }\n\n  CloseOnSelect.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    container.on('select', function (evt) {\n      self._selectTriggered(evt);\n    });\n\n    container.on('unselect', function (evt) {\n      self._selectTriggered(evt);\n    });\n  };\n\n  CloseOnSelect.prototype._selectTriggered = function (_, evt) {\n    var originalEvent = evt.originalEvent;\n\n    // Don't close if the control key is being held\n    if (originalEvent && (originalEvent.ctrlKey || originalEvent.metaKey)) {\n      return;\n    }\n\n    this.trigger('close', {\n      originalEvent: originalEvent,\n      originalSelect2Event: evt\n    });\n  };\n\n  return CloseOnSelect;\n});\n\nS2.define('select2/i18n/en',[],function () {\n  // English\n  return {\n    errorLoading: function () {\n      return 'The results could not be loaded.';\n    },\n    inputTooLong: function (args) {\n      var overChars = args.input.length - args.maximum;\n\n      var message = 'Please delete ' + overChars + ' character';\n\n      if (overChars != 1) {\n        message += 's';\n      }\n\n      return message;\n    },\n    inputTooShort: function (args) {\n      var remainingChars = args.minimum - args.input.length;\n\n      var message = 'Please enter ' + remainingChars + ' or more characters';\n\n      return message;\n    },\n    loadingMore: function () {\n      return 'Loading more results…';\n    },\n    maximumSelected: function (args) {\n      var message = 'You can only select ' + args.maximum + ' item';\n\n      if (args.maximum != 1) {\n        message += 's';\n      }\n\n      return message;\n    },\n    noResults: function () {\n      return 'No results found';\n    },\n    searching: function () {\n      return 'Searching…';\n    },\n    removeAllItems: function () {\n      return 'Remove all items';\n    }\n  };\n});\n\nS2.define('select2/defaults',[\n  'jquery',\n  'require',\n\n  './results',\n\n  './selection/single',\n  './selection/multiple',\n  './selection/placeholder',\n  './selection/allowClear',\n  './selection/search',\n  './selection/eventRelay',\n\n  './utils',\n  './translation',\n  './diacritics',\n\n  './data/select',\n  './data/array',\n  './data/ajax',\n  './data/tags',\n  './data/tokenizer',\n  './data/minimumInputLength',\n  './data/maximumInputLength',\n  './data/maximumSelectionLength',\n\n  './dropdown',\n  './dropdown/search',\n  './dropdown/hidePlaceholder',\n  './dropdown/infiniteScroll',\n  './dropdown/attachBody',\n  './dropdown/minimumResultsForSearch',\n  './dropdown/selectOnClose',\n  './dropdown/closeOnSelect',\n\n  './i18n/en'\n], function ($, require,\n\n             ResultsList,\n\n             SingleSelection, MultipleSelection, Placeholder, AllowClear,\n             SelectionSearch, EventRelay,\n\n             Utils, Translation, DIACRITICS,\n\n             SelectData, ArrayData, AjaxData, Tags, Tokenizer,\n             MinimumInputLength, MaximumInputLength, MaximumSelectionLength,\n\n             Dropdown, DropdownSearch, HidePlaceholder, InfiniteScroll,\n             AttachBody, MinimumResultsForSearch, SelectOnClose, CloseOnSelect,\n\n             EnglishTranslation) {\n  function Defaults () {\n    this.reset();\n  }\n\n  Defaults.prototype.apply = function (options) {\n    options = $.extend(true, {}, this.defaults, options);\n\n    if (options.dataAdapter == null) {\n      if (options.ajax != null) {\n        options.dataAdapter = AjaxData;\n      } else if (options.data != null) {\n        options.dataAdapter = ArrayData;\n      } else {\n        options.dataAdapter = SelectData;\n      }\n\n      if (options.minimumInputLength > 0) {\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          MinimumInputLength\n        );\n      }\n\n      if (options.maximumInputLength > 0) {\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          MaximumInputLength\n        );\n      }\n\n      if (options.maximumSelectionLength > 0) {\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          MaximumSelectionLength\n        );\n      }\n\n      if (options.tags) {\n        options.dataAdapter = Utils.Decorate(options.dataAdapter, Tags);\n      }\n\n      if (options.tokenSeparators != null || options.tokenizer != null) {\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          Tokenizer\n        );\n      }\n\n      if (options.query != null) {\n        var Query = require(options.amdBase + 'compat/query');\n\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          Query\n        );\n      }\n\n      if (options.initSelection != null) {\n        var InitSelection = require(options.amdBase + 'compat/initSelection');\n\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          InitSelection\n        );\n      }\n    }\n\n    if (options.resultsAdapter == null) {\n      options.resultsAdapter = ResultsList;\n\n      if (options.ajax != null) {\n        options.resultsAdapter = Utils.Decorate(\n          options.resultsAdapter,\n          InfiniteScroll\n        );\n      }\n\n      if (options.placeholder != null) {\n        options.resultsAdapter = Utils.Decorate(\n          options.resultsAdapter,\n          HidePlaceholder\n        );\n      }\n\n      if (options.selectOnClose) {\n        options.resultsAdapter = Utils.Decorate(\n          options.resultsAdapter,\n          SelectOnClose\n        );\n      }\n    }\n\n    if (options.dropdownAdapter == null) {\n      if (options.multiple) {\n        options.dropdownAdapter = Dropdown;\n      } else {\n        var SearchableDropdown = Utils.Decorate(Dropdown, DropdownSearch);\n\n        options.dropdownAdapter = SearchableDropdown;\n      }\n\n      if (options.minimumResultsForSearch !== 0) {\n        options.dropdownAdapter = Utils.Decorate(\n          options.dropdownAdapter,\n          MinimumResultsForSearch\n        );\n      }\n\n      if (options.closeOnSelect) {\n        options.dropdownAdapter = Utils.Decorate(\n          options.dropdownAdapter,\n          CloseOnSelect\n        );\n      }\n\n      if (\n        options.dropdownCssClass != null ||\n        options.dropdownCss != null ||\n        options.adaptDropdownCssClass != null\n      ) {\n        var DropdownCSS = require(options.amdBase + 'compat/dropdownCss');\n\n        options.dropdownAdapter = Utils.Decorate(\n          options.dropdownAdapter,\n          DropdownCSS\n        );\n      }\n\n      options.dropdownAdapter = Utils.Decorate(\n        options.dropdownAdapter,\n        AttachBody\n      );\n    }\n\n    if (options.selectionAdapter == null) {\n      if (options.multiple) {\n        options.selectionAdapter = MultipleSelection;\n      } else {\n        options.selectionAdapter = SingleSelection;\n      }\n\n      // Add the placeholder mixin if a placeholder was specified\n      if (options.placeholder != null) {\n        options.selectionAdapter = Utils.Decorate(\n          options.selectionAdapter,\n          Placeholder\n        );\n      }\n\n      if (options.allowClear) {\n        options.selectionAdapter = Utils.Decorate(\n          options.selectionAdapter,\n          AllowClear\n        );\n      }\n\n      if (options.multiple) {\n        options.selectionAdapter = Utils.Decorate(\n          options.selectionAdapter,\n          SelectionSearch\n        );\n      }\n\n      if (\n        options.containerCssClass != null ||\n        options.containerCss != null ||\n        options.adaptContainerCssClass != null\n      ) {\n        var ContainerCSS = require(options.amdBase + 'compat/containerCss');\n\n        options.selectionAdapter = Utils.Decorate(\n          options.selectionAdapter,\n          ContainerCSS\n        );\n      }\n\n      options.selectionAdapter = Utils.Decorate(\n        options.selectionAdapter,\n        EventRelay\n      );\n    }\n\n    // If the defaults were not previously applied from an element, it is\n    // possible for the language option to have not been resolved\n    options.language = this._resolveLanguage(options.language);\n\n    // Always fall back to English since it will always be complete\n    options.language.push('en');\n\n    var uniqueLanguages = [];\n\n    for (var l = 0; l < options.language.length; l++) {\n      var language = options.language[l];\n\n      if (uniqueLanguages.indexOf(language) === -1) {\n        uniqueLanguages.push(language);\n      }\n    }\n\n    options.language = uniqueLanguages;\n\n    options.translations = this._processTranslations(\n      options.language,\n      options.debug\n    );\n\n    return options;\n  };\n\n  Defaults.prototype.reset = function () {\n    function stripDiacritics (text) {\n      // Used 'uni range + named function' from http://jsperf.com/diacritics/18\n      function match(a) {\n        return DIACRITICS[a] || a;\n      }\n\n      return text.replace(/[^\\u0000-\\u007E]/g, match);\n    }\n\n    function matcher (params, data) {\n      // Always return the object if there is nothing to compare\n      if ($.trim(params.term) === '') {\n        return data;\n      }\n\n      // Do a recursive check for options with children\n      if (data.children && data.children.length > 0) {\n        // Clone the data object if there are children\n        // This is required as we modify the object to remove any non-matches\n        var match = $.extend(true, {}, data);\n\n        // Check each child of the option\n        for (var c = data.children.length - 1; c >= 0; c--) {\n          var child = data.children[c];\n\n          var matches = matcher(params, child);\n\n          // If there wasn't a match, remove the object in the array\n          if (matches == null) {\n            match.children.splice(c, 1);\n          }\n        }\n\n        // If any children matched, return the new object\n        if (match.children.length > 0) {\n          return match;\n        }\n\n        // If there were no matching children, check just the plain object\n        return matcher(params, match);\n      }\n\n      var original = stripDiacritics(data.text).toUpperCase();\n      var term = stripDiacritics(params.term).toUpperCase();\n\n      // Check if the text contains the term\n      if (original.indexOf(term) > -1) {\n        return data;\n      }\n\n      // If it doesn't contain the term, don't return anything\n      return null;\n    }\n\n    this.defaults = {\n      amdBase: './',\n      amdLanguageBase: './i18n/',\n      closeOnSelect: true,\n      debug: false,\n      dropdownAutoWidth: false,\n      escapeMarkup: Utils.escapeMarkup,\n      language: {},\n      matcher: matcher,\n      minimumInputLength: 0,\n      maximumInputLength: 0,\n      maximumSelectionLength: 0,\n      minimumResultsForSearch: 0,\n      selectOnClose: false,\n      scrollAfterSelect: false,\n      sorter: function (data) {\n        return data;\n      },\n      templateResult: function (result) {\n        return result.text;\n      },\n      templateSelection: function (selection) {\n        return selection.text;\n      },\n      theme: 'default',\n      width: 'resolve'\n    };\n  };\n\n  Defaults.prototype.applyFromElement = function (options, $element) {\n    var optionLanguage = options.language;\n    var defaultLanguage = this.defaults.language;\n    var elementLanguage = $element.prop('lang');\n    var parentLanguage = $element.closest('[lang]').prop('lang');\n\n    var languages = Array.prototype.concat.call(\n      this._resolveLanguage(elementLanguage),\n      this._resolveLanguage(optionLanguage),\n      this._resolveLanguage(defaultLanguage),\n      this._resolveLanguage(parentLanguage)\n    );\n\n    options.language = languages;\n\n    return options;\n  };\n\n  Defaults.prototype._resolveLanguage = function (language) {\n    if (!language) {\n      return [];\n    }\n\n    if ($.isEmptyObject(language)) {\n      return [];\n    }\n\n    if ($.isPlainObject(language)) {\n      return [language];\n    }\n\n    var languages;\n\n    if (!$.isArray(language)) {\n      languages = [language];\n    } else {\n      languages = language;\n    }\n\n    var resolvedLanguages = [];\n\n    for (var l = 0; l < languages.length; l++) {\n      resolvedLanguages.push(languages[l]);\n\n      if (typeof languages[l] === 'string' && languages[l].indexOf('-') > 0) {\n        // Extract the region information if it is included\n        var languageParts = languages[l].split('-');\n        var baseLanguage = languageParts[0];\n\n        resolvedLanguages.push(baseLanguage);\n      }\n    }\n\n    return resolvedLanguages;\n  };\n\n  Defaults.prototype._processTranslations = function (languages, debug) {\n    var translations = new Translation();\n\n    for (var l = 0; l < languages.length; l++) {\n      var languageData = new Translation();\n\n      var language = languages[l];\n\n      if (typeof language === 'string') {\n        try {\n          // Try to load it with the original name\n          languageData = Translation.loadPath(language);\n        } catch (e) {\n          try {\n            // If we couldn't load it, check if it wasn't the full path\n            language = this.defaults.amdLanguageBase + language;\n            languageData = Translation.loadPath(language);\n          } catch (ex) {\n            // The translation could not be loaded at all. Sometimes this is\n            // because of a configuration problem, other times this can be\n            // because of how Select2 helps load all possible translation files\n            if (debug && window.console && console.warn) {\n              console.warn(\n                'Select2: The language file for \"' + language + '\" could ' +\n                'not be automatically loaded. A fallback will be used instead.'\n              );\n            }\n          }\n        }\n      } else if ($.isPlainObject(language)) {\n        languageData = new Translation(language);\n      } else {\n        languageData = language;\n      }\n\n      translations.extend(languageData);\n    }\n\n    return translations;\n  };\n\n  Defaults.prototype.set = function (key, value) {\n    var camelKey = $.camelCase(key);\n\n    var data = {};\n    data[camelKey] = value;\n\n    var convertedData = Utils._convertData(data);\n\n    $.extend(true, this.defaults, convertedData);\n  };\n\n  var defaults = new Defaults();\n\n  return defaults;\n});\n\nS2.define('select2/options',[\n  'require',\n  'jquery',\n  './defaults',\n  './utils'\n], function (require, $, Defaults, Utils) {\n  function Options (options, $element) {\n    this.options = options;\n\n    if ($element != null) {\n      this.fromElement($element);\n    }\n\n    if ($element != null) {\n      this.options = Defaults.applyFromElement(this.options, $element);\n    }\n\n    this.options = Defaults.apply(this.options);\n\n    if ($element && $element.is('input')) {\n      var InputCompat = require(this.get('amdBase') + 'compat/inputData');\n\n      this.options.dataAdapter = Utils.Decorate(\n        this.options.dataAdapter,\n        InputCompat\n      );\n    }\n  }\n\n  Options.prototype.fromElement = function ($e) {\n    var excludedData = ['select2'];\n\n    if (this.options.multiple == null) {\n      this.options.multiple = $e.prop('multiple');\n    }\n\n    if (this.options.disabled == null) {\n      this.options.disabled = $e.prop('disabled');\n    }\n\n    if (this.options.dir == null) {\n      if ($e.prop('dir')) {\n        this.options.dir = $e.prop('dir');\n      } else if ($e.closest('[dir]').prop('dir')) {\n        this.options.dir = $e.closest('[dir]').prop('dir');\n      } else {\n        this.options.dir = 'ltr';\n      }\n    }\n\n    $e.prop('disabled', this.options.disabled);\n    $e.prop('multiple', this.options.multiple);\n\n    if (Utils.GetData($e[0], 'select2Tags')) {\n      if (this.options.debug && window.console && console.warn) {\n        console.warn(\n          'Select2: The `data-select2-tags` attribute has been changed to ' +\n          'use the `data-data` and `data-tags=\"true\"` attributes and will be ' +\n          'removed in future versions of Select2.'\n        );\n      }\n\n      Utils.StoreData($e[0], 'data', Utils.GetData($e[0], 'select2Tags'));\n      Utils.StoreData($e[0], 'tags', true);\n    }\n\n    if (Utils.GetData($e[0], 'ajaxUrl')) {\n      if (this.options.debug && window.console && console.warn) {\n        console.warn(\n          'Select2: The `data-ajax-url` attribute has been changed to ' +\n          '`data-ajax--url` and support for the old attribute will be removed' +\n          ' in future versions of Select2.'\n        );\n      }\n\n      $e.attr('ajax--url', Utils.GetData($e[0], 'ajaxUrl'));\n      Utils.StoreData($e[0], 'ajax-Url', Utils.GetData($e[0], 'ajaxUrl'));\n    }\n\n    var dataset = {};\n\n    function upperCaseLetter(_, letter) {\n      return letter.toUpperCase();\n    }\n\n    // Pre-load all of the attributes which are prefixed with `data-`\n    for (var attr = 0; attr < $e[0].attributes.length; attr++) {\n      var attributeName = $e[0].attributes[attr].name;\n      var prefix = 'data-';\n\n      if (attributeName.substr(0, prefix.length) == prefix) {\n        // Get the contents of the attribute after `data-`\n        var dataName = attributeName.substring(prefix.length);\n\n        // Get the data contents from the consistent source\n        // This is more than likely the jQuery data helper\n        var dataValue = Utils.GetData($e[0], dataName);\n\n        // camelCase the attribute name to match the spec\n        var camelDataName = dataName.replace(/-([a-z])/g, upperCaseLetter);\n\n        // Store the data attribute contents into the dataset since\n        dataset[camelDataName] = dataValue;\n      }\n    }\n\n    // Prefer the element's `dataset` attribute if it exists\n    // jQuery 1.x does not correctly handle data attributes with multiple dashes\n    if ($.fn.jquery && $.fn.jquery.substr(0, 2) == '1.' && $e[0].dataset) {\n      dataset = $.extend(true, {}, $e[0].dataset, dataset);\n    }\n\n    // Prefer our internal data cache if it exists\n    var data = $.extend(true, {}, Utils.GetData($e[0]), dataset);\n\n    data = Utils._convertData(data);\n\n    for (var key in data) {\n      if ($.inArray(key, excludedData) > -1) {\n        continue;\n      }\n\n      if ($.isPlainObject(this.options[key])) {\n        $.extend(this.options[key], data[key]);\n      } else {\n        this.options[key] = data[key];\n      }\n    }\n\n    return this;\n  };\n\n  Options.prototype.get = function (key) {\n    return this.options[key];\n  };\n\n  Options.prototype.set = function (key, val) {\n    this.options[key] = val;\n  };\n\n  return Options;\n});\n\nS2.define('select2/core',[\n  'jquery',\n  './options',\n  './utils',\n  './keys'\n], function ($, Options, Utils, KEYS) {\n  var Select2 = function ($element, options) {\n    if (Utils.GetData($element[0], 'select2') != null) {\n      Utils.GetData($element[0], 'select2').destroy();\n    }\n\n    this.$element = $element;\n\n    this.id = this._generateId($element);\n\n    options = options || {};\n\n    this.options = new Options(options, $element);\n\n    Select2.__super__.constructor.call(this);\n\n    // Set up the tabindex\n\n    var tabindex = $element.attr('tabindex') || 0;\n    Utils.StoreData($element[0], 'old-tabindex', tabindex);\n    $element.attr('tabindex', '-1');\n\n    // Set up containers and adapters\n\n    var DataAdapter = this.options.get('dataAdapter');\n    this.dataAdapter = new DataAdapter($element, this.options);\n\n    var $container = this.render();\n\n    this._placeContainer($container);\n\n    var SelectionAdapter = this.options.get('selectionAdapter');\n    this.selection = new SelectionAdapter($element, this.options);\n    this.$selection = this.selection.render();\n\n    this.selection.position(this.$selection, $container);\n\n    var DropdownAdapter = this.options.get('dropdownAdapter');\n    this.dropdown = new DropdownAdapter($element, this.options);\n    this.$dropdown = this.dropdown.render();\n\n    this.dropdown.position(this.$dropdown, $container);\n\n    var ResultsAdapter = this.options.get('resultsAdapter');\n    this.results = new ResultsAdapter($element, this.options, this.dataAdapter);\n    this.$results = this.results.render();\n\n    this.results.position(this.$results, this.$dropdown);\n\n    // Bind events\n\n    var self = this;\n\n    // Bind the container to all of the adapters\n    this._bindAdapters();\n\n    // Register any DOM event handlers\n    this._registerDomEvents();\n\n    // Register any internal event handlers\n    this._registerDataEvents();\n    this._registerSelectionEvents();\n    this._registerDropdownEvents();\n    this._registerResultsEvents();\n    this._registerEvents();\n\n    // Set the initial state\n    this.dataAdapter.current(function (initialData) {\n      self.trigger('selection:update', {\n        data: initialData\n      });\n    });\n\n    // Hide the original select\n    $element.addClass('select2-hidden-accessible');\n    $element.attr('aria-hidden', 'true');\n\n    // Synchronize any monitored attributes\n    this._syncAttributes();\n\n    Utils.StoreData($element[0], 'select2', this);\n\n    // Ensure backwards compatibility with $element.data('select2').\n    $element.data('select2', this);\n  };\n\n  Utils.Extend(Select2, Utils.Observable);\n\n  Select2.prototype._generateId = function ($element) {\n    var id = '';\n\n    if ($element.attr('id') != null) {\n      id = $element.attr('id');\n    } else if ($element.attr('name') != null) {\n      id = $element.attr('name') + '-' + Utils.generateChars(2);\n    } else {\n      id = Utils.generateChars(4);\n    }\n\n    id = id.replace(/(:|\\.|\\[|\\]|,)/g, '');\n    id = 'select2-' + id;\n\n    return id;\n  };\n\n  Select2.prototype._placeContainer = function ($container) {\n    $container.insertAfter(this.$element);\n\n    var width = this._resolveWidth(this.$element, this.options.get('width'));\n\n    if (width != null) {\n      $container.css('width', width);\n    }\n  };\n\n  Select2.prototype._resolveWidth = function ($element, method) {\n    var WIDTH = /^width:(([-+]?([0-9]*\\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;\n\n    if (method == 'resolve') {\n      var styleWidth = this._resolveWidth($element, 'style');\n\n      if (styleWidth != null) {\n        return styleWidth;\n      }\n\n      return this._resolveWidth($element, 'element');\n    }\n\n    if (method == 'element') {\n      var elementWidth = $element.outerWidth(false);\n\n      if (elementWidth <= 0) {\n        return 'auto';\n      }\n\n      return elementWidth + 'px';\n    }\n\n    if (method == 'style') {\n      var style = $element.attr('style');\n\n      if (typeof(style) !== 'string') {\n        return null;\n      }\n\n      var attrs = style.split(';');\n\n      for (var i = 0, l = attrs.length; i < l; i = i + 1) {\n        var attr = attrs[i].replace(/\\s/g, '');\n        var matches = attr.match(WIDTH);\n\n        if (matches !== null && matches.length >= 1) {\n          return matches[1];\n        }\n      }\n\n      return null;\n    }\n\n    if (method == 'computedstyle') {\n      var computedStyle = window.getComputedStyle($element[0]);\n\n      return computedStyle.width;\n    }\n\n    return method;\n  };\n\n  Select2.prototype._bindAdapters = function () {\n    this.dataAdapter.bind(this, this.$container);\n    this.selection.bind(this, this.$container);\n\n    this.dropdown.bind(this, this.$container);\n    this.results.bind(this, this.$container);\n  };\n\n  Select2.prototype._registerDomEvents = function () {\n    var self = this;\n\n    this.$element.on('change.select2', function () {\n      self.dataAdapter.current(function (data) {\n        self.trigger('selection:update', {\n          data: data\n        });\n      });\n    });\n\n    this.$element.on('focus.select2', function (evt) {\n      self.trigger('focus', evt);\n    });\n\n    this._syncA = Utils.bind(this._syncAttributes, this);\n    this._syncS = Utils.bind(this._syncSubtree, this);\n\n    if (this.$element[0].attachEvent) {\n      this.$element[0].attachEvent('onpropertychange', this._syncA);\n    }\n\n    var observer = window.MutationObserver ||\n      window.WebKitMutationObserver ||\n      window.MozMutationObserver\n    ;\n\n    if (observer != null) {\n      this._observer = new observer(function (mutations) {\n        $.each(mutations, self._syncA);\n        $.each(mutations, self._syncS);\n      });\n      this._observer.observe(this.$element[0], {\n        attributes: true,\n        childList: true,\n        subtree: false\n      });\n    } else if (this.$element[0].addEventListener) {\n      this.$element[0].addEventListener(\n        'DOMAttrModified',\n        self._syncA,\n        false\n      );\n      this.$element[0].addEventListener(\n        'DOMNodeInserted',\n        self._syncS,\n        false\n      );\n      this.$element[0].addEventListener(\n        'DOMNodeRemoved',\n        self._syncS,\n        false\n      );\n    }\n  };\n\n  Select2.prototype._registerDataEvents = function () {\n    var self = this;\n\n    this.dataAdapter.on('*', function (name, params) {\n      self.trigger(name, params);\n    });\n  };\n\n  Select2.prototype._registerSelectionEvents = function () {\n    var self = this;\n    var nonRelayEvents = ['toggle', 'focus'];\n\n    this.selection.on('toggle', function () {\n      self.toggleDropdown();\n    });\n\n    this.selection.on('focus', function (params) {\n      self.focus(params);\n    });\n\n    this.selection.on('*', function (name, params) {\n      if ($.inArray(name, nonRelayEvents) !== -1) {\n        return;\n      }\n\n      self.trigger(name, params);\n    });\n  };\n\n  Select2.prototype._registerDropdownEvents = function () {\n    var self = this;\n\n    this.dropdown.on('*', function (name, params) {\n      self.trigger(name, params);\n    });\n  };\n\n  Select2.prototype._registerResultsEvents = function () {\n    var self = this;\n\n    this.results.on('*', function (name, params) {\n      self.trigger(name, params);\n    });\n  };\n\n  Select2.prototype._registerEvents = function () {\n    var self = this;\n\n    this.on('open', function () {\n      self.$container.addClass('select2-container--open');\n    });\n\n    this.on('close', function () {\n      self.$container.removeClass('select2-container--open');\n    });\n\n    this.on('enable', function () {\n      self.$container.removeClass('select2-container--disabled');\n    });\n\n    this.on('disable', function () {\n      self.$container.addClass('select2-container--disabled');\n    });\n\n    this.on('blur', function () {\n      self.$container.removeClass('select2-container--focus');\n    });\n\n    this.on('query', function (params) {\n      if (!self.isOpen()) {\n        self.trigger('open', {});\n      }\n\n      this.dataAdapter.query(params, function (data) {\n        self.trigger('results:all', {\n          data: data,\n          query: params\n        });\n      });\n    });\n\n    this.on('query:append', function (params) {\n      this.dataAdapter.query(params, function (data) {\n        self.trigger('results:append', {\n          data: data,\n          query: params\n        });\n      });\n    });\n\n    this.on('keypress', function (evt) {\n      var key = evt.which;\n\n      if (self.isOpen()) {\n        if (key === KEYS.ESC || key === KEYS.TAB ||\n            (key === KEYS.UP && evt.altKey)) {\n          self.close();\n\n          evt.preventDefault();\n        } else if (key === KEYS.ENTER) {\n          self.trigger('results:select', {});\n\n          evt.preventDefault();\n        } else if ((key === KEYS.SPACE && evt.ctrlKey)) {\n          self.trigger('results:toggle', {});\n\n          evt.preventDefault();\n        } else if (key === KEYS.UP) {\n          self.trigger('results:previous', {});\n\n          evt.preventDefault();\n        } else if (key === KEYS.DOWN) {\n          self.trigger('results:next', {});\n\n          evt.preventDefault();\n        }\n      } else {\n        if (key === KEYS.ENTER || key === KEYS.SPACE ||\n            (key === KEYS.DOWN && evt.altKey)) {\n          self.open();\n\n          evt.preventDefault();\n        }\n      }\n    });\n  };\n\n  Select2.prototype._syncAttributes = function () {\n    this.options.set('disabled', this.$element.prop('disabled'));\n\n    if (this.options.get('disabled')) {\n      if (this.isOpen()) {\n        this.close();\n      }\n\n      this.trigger('disable', {});\n    } else {\n      this.trigger('enable', {});\n    }\n  };\n\n  Select2.prototype._syncSubtree = function (evt, mutations) {\n    var changed = false;\n    var self = this;\n\n    // Ignore any mutation events raised for elements that aren't options or\n    // optgroups. This handles the case when the select element is destroyed\n    if (\n      evt && evt.target && (\n        evt.target.nodeName !== 'OPTION' && evt.target.nodeName !== 'OPTGROUP'\n      )\n    ) {\n      return;\n    }\n\n    if (!mutations) {\n      // If mutation events aren't supported, then we can only assume that the\n      // change affected the selections\n      changed = true;\n    } else if (mutations.addedNodes && mutations.addedNodes.length > 0) {\n      for (var n = 0; n < mutations.addedNodes.length; n++) {\n        var node = mutations.addedNodes[n];\n\n        if (node.selected) {\n          changed = true;\n        }\n      }\n    } else if (mutations.removedNodes && mutations.removedNodes.length > 0) {\n      changed = true;\n    }\n\n    // Only re-pull the data if we think there is a change\n    if (changed) {\n      this.dataAdapter.current(function (currentData) {\n        self.trigger('selection:update', {\n          data: currentData\n        });\n      });\n    }\n  };\n\n  /**\n   * Override the trigger method to automatically trigger pre-events when\n   * there are events that can be prevented.\n   */\n  Select2.prototype.trigger = function (name, args) {\n    var actualTrigger = Select2.__super__.trigger;\n    var preTriggerMap = {\n      'open': 'opening',\n      'close': 'closing',\n      'select': 'selecting',\n      'unselect': 'unselecting',\n      'clear': 'clearing'\n    };\n\n    if (args === undefined) {\n      args = {};\n    }\n\n    if (name in preTriggerMap) {\n      var preTriggerName = preTriggerMap[name];\n      var preTriggerArgs = {\n        prevented: false,\n        name: name,\n        args: args\n      };\n\n      actualTrigger.call(this, preTriggerName, preTriggerArgs);\n\n      if (preTriggerArgs.prevented) {\n        args.prevented = true;\n\n        return;\n      }\n    }\n\n    actualTrigger.call(this, name, args);\n  };\n\n  Select2.prototype.toggleDropdown = function () {\n    if (this.options.get('disabled')) {\n      return;\n    }\n\n    if (this.isOpen()) {\n      this.close();\n    } else {\n      this.open();\n    }\n  };\n\n  Select2.prototype.open = function () {\n    if (this.isOpen()) {\n      return;\n    }\n\n    this.trigger('query', {});\n  };\n\n  Select2.prototype.close = function () {\n    if (!this.isOpen()) {\n      return;\n    }\n\n    this.trigger('close', {});\n  };\n\n  Select2.prototype.isOpen = function () {\n    return this.$container.hasClass('select2-container--open');\n  };\n\n  Select2.prototype.hasFocus = function () {\n    return this.$container.hasClass('select2-container--focus');\n  };\n\n  Select2.prototype.focus = function (data) {\n    // No need to re-trigger focus events if we are already focused\n    if (this.hasFocus()) {\n      return;\n    }\n\n    this.$container.addClass('select2-container--focus');\n    this.trigger('focus', {});\n  };\n\n  Select2.prototype.enable = function (args) {\n    if (this.options.get('debug') && window.console && console.warn) {\n      console.warn(\n        'Select2: The `select2(\"enable\")` method has been deprecated and will' +\n        ' be removed in later Select2 versions. Use $element.prop(\"disabled\")' +\n        ' instead.'\n      );\n    }\n\n    if (args == null || args.length === 0) {\n      args = [true];\n    }\n\n    var disabled = !args[0];\n\n    this.$element.prop('disabled', disabled);\n  };\n\n  Select2.prototype.data = function () {\n    if (this.options.get('debug') &&\n        arguments.length > 0 && window.console && console.warn) {\n      console.warn(\n        'Select2: Data can no longer be set using `select2(\"data\")`. You ' +\n        'should consider setting the value instead using `$element.val()`.'\n      );\n    }\n\n    var data = [];\n\n    this.dataAdapter.current(function (currentData) {\n      data = currentData;\n    });\n\n    return data;\n  };\n\n  Select2.prototype.val = function (args) {\n    if (this.options.get('debug') && window.console && console.warn) {\n      console.warn(\n        'Select2: The `select2(\"val\")` method has been deprecated and will be' +\n        ' removed in later Select2 versions. Use $element.val() instead.'\n      );\n    }\n\n    if (args == null || args.length === 0) {\n      return this.$element.val();\n    }\n\n    var newVal = args[0];\n\n    if ($.isArray(newVal)) {\n      newVal = $.map(newVal, function (obj) {\n        return obj.toString();\n      });\n    }\n\n    this.$element.val(newVal).trigger('change');\n  };\n\n  Select2.prototype.destroy = function () {\n    this.$container.remove();\n\n    if (this.$element[0].detachEvent) {\n      this.$element[0].detachEvent('onpropertychange', this._syncA);\n    }\n\n    if (this._observer != null) {\n      this._observer.disconnect();\n      this._observer = null;\n    } else if (this.$element[0].removeEventListener) {\n      this.$element[0]\n        .removeEventListener('DOMAttrModified', this._syncA, false);\n      this.$element[0]\n        .removeEventListener('DOMNodeInserted', this._syncS, false);\n      this.$element[0]\n        .removeEventListener('DOMNodeRemoved', this._syncS, false);\n    }\n\n    this._syncA = null;\n    this._syncS = null;\n\n    this.$element.off('.select2');\n    this.$element.attr('tabindex',\n    Utils.GetData(this.$element[0], 'old-tabindex'));\n\n    this.$element.removeClass('select2-hidden-accessible');\n    this.$element.attr('aria-hidden', 'false');\n    Utils.RemoveData(this.$element[0]);\n    this.$element.removeData('select2');\n\n    this.dataAdapter.destroy();\n    this.selection.destroy();\n    this.dropdown.destroy();\n    this.results.destroy();\n\n    this.dataAdapter = null;\n    this.selection = null;\n    this.dropdown = null;\n    this.results = null;\n  };\n\n  Select2.prototype.render = function () {\n    var $container = $(\n      '<span class=\"select2 select2-container\">' +\n        '<span class=\"selection\"></span>' +\n        '<span class=\"dropdown-wrapper\" aria-hidden=\"true\"></span>' +\n      '</span>'\n    );\n\n    $container.attr('dir', this.options.get('dir'));\n\n    this.$container = $container;\n\n    this.$container.addClass('select2-container--' + this.options.get('theme'));\n\n    Utils.StoreData($container[0], 'element', this.$element);\n\n    return $container;\n  };\n\n  return Select2;\n});\n\nS2.define('select2/compat/utils',[\n  'jquery'\n], function ($) {\n  function syncCssClasses ($dest, $src, adapter) {\n    var classes, replacements = [], adapted;\n\n    classes = $.trim($dest.attr('class'));\n\n    if (classes) {\n      classes = '' + classes; // for IE which returns object\n\n      $(classes.split(/\\s+/)).each(function () {\n        // Save all Select2 classes\n        if (this.indexOf('select2-') === 0) {\n          replacements.push(this);\n        }\n      });\n    }\n\n    classes = $.trim($src.attr('class'));\n\n    if (classes) {\n      classes = '' + classes; // for IE which returns object\n\n      $(classes.split(/\\s+/)).each(function () {\n        // Only adapt non-Select2 classes\n        if (this.indexOf('select2-') !== 0) {\n          adapted = adapter(this);\n\n          if (adapted != null) {\n            replacements.push(adapted);\n          }\n        }\n      });\n    }\n\n    $dest.attr('class', replacements.join(' '));\n  }\n\n  return {\n    syncCssClasses: syncCssClasses\n  };\n});\n\nS2.define('select2/compat/containerCss',[\n  'jquery',\n  './utils'\n], function ($, CompatUtils) {\n  // No-op CSS adapter that discards all classes by default\n  function _containerAdapter (clazz) {\n    return null;\n  }\n\n  function ContainerCSS () { }\n\n  ContainerCSS.prototype.render = function (decorated) {\n    var $container = decorated.call(this);\n\n    var containerCssClass = this.options.get('containerCssClass') || '';\n\n    if ($.isFunction(containerCssClass)) {\n      containerCssClass = containerCssClass(this.$element);\n    }\n\n    var containerCssAdapter = this.options.get('adaptContainerCssClass');\n    containerCssAdapter = containerCssAdapter || _containerAdapter;\n\n    if (containerCssClass.indexOf(':all:') !== -1) {\n      containerCssClass = containerCssClass.replace(':all:', '');\n\n      var _cssAdapter = containerCssAdapter;\n\n      containerCssAdapter = function (clazz) {\n        var adapted = _cssAdapter(clazz);\n\n        if (adapted != null) {\n          // Append the old one along with the adapted one\n          return adapted + ' ' + clazz;\n        }\n\n        return clazz;\n      };\n    }\n\n    var containerCss = this.options.get('containerCss') || {};\n\n    if ($.isFunction(containerCss)) {\n      containerCss = containerCss(this.$element);\n    }\n\n    CompatUtils.syncCssClasses($container, this.$element, containerCssAdapter);\n\n    $container.css(containerCss);\n    $container.addClass(containerCssClass);\n\n    return $container;\n  };\n\n  return ContainerCSS;\n});\n\nS2.define('select2/compat/dropdownCss',[\n  'jquery',\n  './utils'\n], function ($, CompatUtils) {\n  // No-op CSS adapter that discards all classes by default\n  function _dropdownAdapter (clazz) {\n    return null;\n  }\n\n  function DropdownCSS () { }\n\n  DropdownCSS.prototype.render = function (decorated) {\n    var $dropdown = decorated.call(this);\n\n    var dropdownCssClass = this.options.get('dropdownCssClass') || '';\n\n    if ($.isFunction(dropdownCssClass)) {\n      dropdownCssClass = dropdownCssClass(this.$element);\n    }\n\n    var dropdownCssAdapter = this.options.get('adaptDropdownCssClass');\n    dropdownCssAdapter = dropdownCssAdapter || _dropdownAdapter;\n\n    if (dropdownCssClass.indexOf(':all:') !== -1) {\n      dropdownCssClass = dropdownCssClass.replace(':all:', '');\n\n      var _cssAdapter = dropdownCssAdapter;\n\n      dropdownCssAdapter = function (clazz) {\n        var adapted = _cssAdapter(clazz);\n\n        if (adapted != null) {\n          // Append the old one along with the adapted one\n          return adapted + ' ' + clazz;\n        }\n\n        return clazz;\n      };\n    }\n\n    var dropdownCss = this.options.get('dropdownCss') || {};\n\n    if ($.isFunction(dropdownCss)) {\n      dropdownCss = dropdownCss(this.$element);\n    }\n\n    CompatUtils.syncCssClasses($dropdown, this.$element, dropdownCssAdapter);\n\n    $dropdown.css(dropdownCss);\n    $dropdown.addClass(dropdownCssClass);\n\n    return $dropdown;\n  };\n\n  return DropdownCSS;\n});\n\nS2.define('select2/compat/initSelection',[\n  'jquery'\n], function ($) {\n  function InitSelection (decorated, $element, options) {\n    if (options.get('debug') && window.console && console.warn) {\n      console.warn(\n        'Select2: The `initSelection` option has been deprecated in favor' +\n        ' of a custom data adapter that overrides the `current` method. ' +\n        'This method is now called multiple times instead of a single ' +\n        'time when the instance is initialized. Support will be removed ' +\n        'for the `initSelection` option in future versions of Select2'\n      );\n    }\n\n    this.initSelection = options.get('initSelection');\n    this._isInitialized = false;\n\n    decorated.call(this, $element, options);\n  }\n\n  InitSelection.prototype.current = function (decorated, callback) {\n    var self = this;\n\n    if (this._isInitialized) {\n      decorated.call(this, callback);\n\n      return;\n    }\n\n    this.initSelection.call(null, this.$element, function (data) {\n      self._isInitialized = true;\n\n      if (!$.isArray(data)) {\n        data = [data];\n      }\n\n      callback(data);\n    });\n  };\n\n  return InitSelection;\n});\n\nS2.define('select2/compat/inputData',[\n  'jquery',\n  '../utils'\n], function ($, Utils) {\n  function InputData (decorated, $element, options) {\n    this._currentData = [];\n    this._valueSeparator = options.get('valueSeparator') || ',';\n\n    if ($element.prop('type') === 'hidden') {\n      if (options.get('debug') && console && console.warn) {\n        console.warn(\n          'Select2: Using a hidden input with Select2 is no longer ' +\n          'supported and may stop working in the future. It is recommended ' +\n          'to use a `<select>` element instead.'\n        );\n      }\n    }\n\n    decorated.call(this, $element, options);\n  }\n\n  InputData.prototype.current = function (_, callback) {\n    function getSelected (data, selectedIds) {\n      var selected = [];\n\n      if (data.selected || $.inArray(data.id, selectedIds) !== -1) {\n        data.selected = true;\n        selected.push(data);\n      } else {\n        data.selected = false;\n      }\n\n      if (data.children) {\n        selected.push.apply(selected, getSelected(data.children, selectedIds));\n      }\n\n      return selected;\n    }\n\n    var selected = [];\n\n    for (var d = 0; d < this._currentData.length; d++) {\n      var data = this._currentData[d];\n\n      selected.push.apply(\n        selected,\n        getSelected(\n          data,\n          this.$element.val().split(\n            this._valueSeparator\n          )\n        )\n      );\n    }\n\n    callback(selected);\n  };\n\n  InputData.prototype.select = function (_, data) {\n    if (!this.options.get('multiple')) {\n      this.current(function (allData) {\n        $.map(allData, function (data) {\n          data.selected = false;\n        });\n      });\n\n      this.$element.val(data.id);\n      this.$element.trigger('change');\n    } else {\n      var value = this.$element.val();\n      value += this._valueSeparator + data.id;\n\n      this.$element.val(value);\n      this.$element.trigger('change');\n    }\n  };\n\n  InputData.prototype.unselect = function (_, data) {\n    var self = this;\n\n    data.selected = false;\n\n    this.current(function (allData) {\n      var values = [];\n\n      for (var d = 0; d < allData.length; d++) {\n        var item = allData[d];\n\n        if (data.id == item.id) {\n          continue;\n        }\n\n        values.push(item.id);\n      }\n\n      self.$element.val(values.join(self._valueSeparator));\n      self.$element.trigger('change');\n    });\n  };\n\n  InputData.prototype.query = function (_, params, callback) {\n    var results = [];\n\n    for (var d = 0; d < this._currentData.length; d++) {\n      var data = this._currentData[d];\n\n      var matches = this.matches(params, data);\n\n      if (matches !== null) {\n        results.push(matches);\n      }\n    }\n\n    callback({\n      results: results\n    });\n  };\n\n  InputData.prototype.addOptions = function (_, $options) {\n    var options = $.map($options, function ($option) {\n      return Utils.GetData($option[0], 'data');\n    });\n\n    this._currentData.push.apply(this._currentData, options);\n  };\n\n  return InputData;\n});\n\nS2.define('select2/compat/matcher',[\n  'jquery'\n], function ($) {\n  function oldMatcher (matcher) {\n    function wrappedMatcher (params, data) {\n      var match = $.extend(true, {}, data);\n\n      if (params.term == null || $.trim(params.term) === '') {\n        return match;\n      }\n\n      if (data.children) {\n        for (var c = data.children.length - 1; c >= 0; c--) {\n          var child = data.children[c];\n\n          // Check if the child object matches\n          // The old matcher returned a boolean true or false\n          var doesMatch = matcher(params.term, child.text, child);\n\n          // If the child didn't match, pop it off\n          if (!doesMatch) {\n            match.children.splice(c, 1);\n          }\n        }\n\n        if (match.children.length > 0) {\n          return match;\n        }\n      }\n\n      if (matcher(params.term, data.text, data)) {\n        return match;\n      }\n\n      return null;\n    }\n\n    return wrappedMatcher;\n  }\n\n  return oldMatcher;\n});\n\nS2.define('select2/compat/query',[\n\n], function () {\n  function Query (decorated, $element, options) {\n    if (options.get('debug') && window.console && console.warn) {\n      console.warn(\n        'Select2: The `query` option has been deprecated in favor of a ' +\n        'custom data adapter that overrides the `query` method. Support ' +\n        'will be removed for the `query` option in future versions of ' +\n        'Select2.'\n      );\n    }\n\n    decorated.call(this, $element, options);\n  }\n\n  Query.prototype.query = function (_, params, callback) {\n    params.callback = callback;\n\n    var query = this.options.get('query');\n\n    query.call(null, params);\n  };\n\n  return Query;\n});\n\nS2.define('select2/dropdown/attachContainer',[\n\n], function () {\n  function AttachContainer (decorated, $element, options) {\n    decorated.call(this, $element, options);\n  }\n\n  AttachContainer.prototype.position =\n    function (decorated, $dropdown, $container) {\n    var $dropdownContainer = $container.find('.dropdown-wrapper');\n    $dropdownContainer.append($dropdown);\n\n    $dropdown.addClass('select2-dropdown--below');\n    $container.addClass('select2-container--below');\n  };\n\n  return AttachContainer;\n});\n\nS2.define('select2/dropdown/stopPropagation',[\n\n], function () {\n  function StopPropagation () { }\n\n  StopPropagation.prototype.bind = function (decorated, container, $container) {\n    decorated.call(this, container, $container);\n\n    var stoppedEvents = [\n    'blur',\n    'change',\n    'click',\n    'dblclick',\n    'focus',\n    'focusin',\n    'focusout',\n    'input',\n    'keydown',\n    'keyup',\n    'keypress',\n    'mousedown',\n    'mouseenter',\n    'mouseleave',\n    'mousemove',\n    'mouseover',\n    'mouseup',\n    'search',\n    'touchend',\n    'touchstart'\n    ];\n\n    this.$dropdown.on(stoppedEvents.join(' '), function (evt) {\n      evt.stopPropagation();\n    });\n  };\n\n  return StopPropagation;\n});\n\nS2.define('select2/selection/stopPropagation',[\n\n], function () {\n  function StopPropagation () { }\n\n  StopPropagation.prototype.bind = function (decorated, container, $container) {\n    decorated.call(this, container, $container);\n\n    var stoppedEvents = [\n      'blur',\n      'change',\n      'click',\n      'dblclick',\n      'focus',\n      'focusin',\n      'focusout',\n      'input',\n      'keydown',\n      'keyup',\n      'keypress',\n      'mousedown',\n      'mouseenter',\n      'mouseleave',\n      'mousemove',\n      'mouseover',\n      'mouseup',\n      'search',\n      'touchend',\n      'touchstart'\n    ];\n\n    this.$selection.on(stoppedEvents.join(' '), function (evt) {\n      evt.stopPropagation();\n    });\n  };\n\n  return StopPropagation;\n});\n\n/*!\n * jQuery Mousewheel 3.1.13\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n */\n\n(function (factory) {\n    if ( typeof S2.define === 'function' && S2.define.amd ) {\n        // AMD. Register as an anonymous module.\n        S2.define('jquery-mousewheel',['jquery'], factory);\n    } else if (typeof exports === 'object') {\n        // Node/CommonJS style for Browserify\n        module.exports = factory;\n    } else {\n        // Browser globals\n        factory(jQuery);\n    }\n}(function ($) {\n\n    var toFix  = ['wheel', 'mousewheel', 'DOMMouseScroll', 'MozMousePixelScroll'],\n        toBind = ( 'onwheel' in document || document.documentMode >= 9 ) ?\n                    ['wheel'] : ['mousewheel', 'DomMouseScroll', 'MozMousePixelScroll'],\n        slice  = Array.prototype.slice,\n        nullLowestDeltaTimeout, lowestDelta;\n\n    if ( $.event.fixHooks ) {\n        for ( var i = toFix.length; i; ) {\n            $.event.fixHooks[ toFix[--i] ] = $.event.mouseHooks;\n        }\n    }\n\n    var special = $.event.special.mousewheel = {\n        version: '3.1.12',\n\n        setup: function() {\n            if ( this.addEventListener ) {\n                for ( var i = toBind.length; i; ) {\n                    this.addEventListener( toBind[--i], handler, false );\n                }\n            } else {\n                this.onmousewheel = handler;\n            }\n            // Store the line height and page height for this particular element\n            $.data(this, 'mousewheel-line-height', special.getLineHeight(this));\n            $.data(this, 'mousewheel-page-height', special.getPageHeight(this));\n        },\n\n        teardown: function() {\n            if ( this.removeEventListener ) {\n                for ( var i = toBind.length; i; ) {\n                    this.removeEventListener( toBind[--i], handler, false );\n                }\n            } else {\n                this.onmousewheel = null;\n            }\n            // Clean up the data we added to the element\n            $.removeData(this, 'mousewheel-line-height');\n            $.removeData(this, 'mousewheel-page-height');\n        },\n\n        getLineHeight: function(elem) {\n            var $elem = $(elem),\n                $parent = $elem['offsetParent' in $.fn ? 'offsetParent' : 'parent']();\n            if (!$parent.length) {\n                $parent = $('body');\n            }\n            return parseInt($parent.css('fontSize'), 10) || parseInt($elem.css('fontSize'), 10) || 16;\n        },\n\n        getPageHeight: function(elem) {\n            return $(elem).height();\n        },\n\n        settings: {\n            adjustOldDeltas: true, // see shouldAdjustOldDeltas() below\n            normalizeOffset: true  // calls getBoundingClientRect for each event\n        }\n    };\n\n    $.fn.extend({\n        mousewheel: function(fn) {\n            return fn ? this.bind('mousewheel', fn) : this.trigger('mousewheel');\n        },\n\n        unmousewheel: function(fn) {\n            return this.unbind('mousewheel', fn);\n        }\n    });\n\n\n    function handler(event) {\n        var orgEvent   = event || window.event,\n            args       = slice.call(arguments, 1),\n            delta      = 0,\n            deltaX     = 0,\n            deltaY     = 0,\n            absDelta   = 0,\n            offsetX    = 0,\n            offsetY    = 0;\n        event = $.event.fix(orgEvent);\n        event.type = 'mousewheel';\n\n        // Old school scrollwheel delta\n        if ( 'detail'      in orgEvent ) { deltaY = orgEvent.detail * -1;      }\n        if ( 'wheelDelta'  in orgEvent ) { deltaY = orgEvent.wheelDelta;       }\n        if ( 'wheelDeltaY' in orgEvent ) { deltaY = orgEvent.wheelDeltaY;      }\n        if ( 'wheelDeltaX' in orgEvent ) { deltaX = orgEvent.wheelDeltaX * -1; }\n\n        // Firefox < 17 horizontal scrolling related to DOMMouseScroll event\n        if ( 'axis' in orgEvent && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) {\n            deltaX = deltaY * -1;\n            deltaY = 0;\n        }\n\n        // Set delta to be deltaY or deltaX if deltaY is 0 for backwards compatabilitiy\n        delta = deltaY === 0 ? deltaX : deltaY;\n\n        // New school wheel delta (wheel event)\n        if ( 'deltaY' in orgEvent ) {\n            deltaY = orgEvent.deltaY * -1;\n            delta  = deltaY;\n        }\n        if ( 'deltaX' in orgEvent ) {\n            deltaX = orgEvent.deltaX;\n            if ( deltaY === 0 ) { delta  = deltaX * -1; }\n        }\n\n        // No change actually happened, no reason to go any further\n        if ( deltaY === 0 && deltaX === 0 ) { return; }\n\n        // Need to convert lines and pages to pixels if we aren't already in pixels\n        // There are three delta modes:\n        //   * deltaMode 0 is by pixels, nothing to do\n        //   * deltaMode 1 is by lines\n        //   * deltaMode 2 is by pages\n        if ( orgEvent.deltaMode === 1 ) {\n            var lineHeight = $.data(this, 'mousewheel-line-height');\n            delta  *= lineHeight;\n            deltaY *= lineHeight;\n            deltaX *= lineHeight;\n        } else if ( orgEvent.deltaMode === 2 ) {\n            var pageHeight = $.data(this, 'mousewheel-page-height');\n            delta  *= pageHeight;\n            deltaY *= pageHeight;\n            deltaX *= pageHeight;\n        }\n\n        // Store lowest absolute delta to normalize the delta values\n        absDelta = Math.max( Math.abs(deltaY), Math.abs(deltaX) );\n\n        if ( !lowestDelta || absDelta < lowestDelta ) {\n            lowestDelta = absDelta;\n\n            // Adjust older deltas if necessary\n            if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {\n                lowestDelta /= 40;\n            }\n        }\n\n        // Adjust older deltas if necessary\n        if ( shouldAdjustOldDeltas(orgEvent, absDelta) ) {\n            // Divide all the things by 40!\n            delta  /= 40;\n            deltaX /= 40;\n            deltaY /= 40;\n        }\n\n        // Get a whole, normalized value for the deltas\n        delta  = Math[ delta  >= 1 ? 'floor' : 'ceil' ](delta  / lowestDelta);\n        deltaX = Math[ deltaX >= 1 ? 'floor' : 'ceil' ](deltaX / lowestDelta);\n        deltaY = Math[ deltaY >= 1 ? 'floor' : 'ceil' ](deltaY / lowestDelta);\n\n        // Normalise offsetX and offsetY properties\n        if ( special.settings.normalizeOffset && this.getBoundingClientRect ) {\n            var boundingRect = this.getBoundingClientRect();\n            offsetX = event.clientX - boundingRect.left;\n            offsetY = event.clientY - boundingRect.top;\n        }\n\n        // Add information to the event object\n        event.deltaX = deltaX;\n        event.deltaY = deltaY;\n        event.deltaFactor = lowestDelta;\n        event.offsetX = offsetX;\n        event.offsetY = offsetY;\n        // Go ahead and set deltaMode to 0 since we converted to pixels\n        // Although this is a little odd since we overwrite the deltaX/Y\n        // properties with normalized deltas.\n        event.deltaMode = 0;\n\n        // Add event and delta to the front of the arguments\n        args.unshift(event, delta, deltaX, deltaY);\n\n        // Clearout lowestDelta after sometime to better\n        // handle multiple device types that give different\n        // a different lowestDelta\n        // Ex: trackpad = 3 and mouse wheel = 120\n        if (nullLowestDeltaTimeout) { clearTimeout(nullLowestDeltaTimeout); }\n        nullLowestDeltaTimeout = setTimeout(nullLowestDelta, 200);\n\n        return ($.event.dispatch || $.event.handle).apply(this, args);\n    }\n\n    function nullLowestDelta() {\n        lowestDelta = null;\n    }\n\n    function shouldAdjustOldDeltas(orgEvent, absDelta) {\n        // If this is an older event and the delta is divisable by 120,\n        // then we are assuming that the browser is treating this as an\n        // older mouse wheel event and that we should divide the deltas\n        // by 40 to try and get a more usable deltaFactor.\n        // Side note, this actually impacts the reported scroll distance\n        // in older browsers and can cause scrolling to be slower than native.\n        // Turn this off by setting $.event.special.mousewheel.settings.adjustOldDeltas to false.\n        return special.settings.adjustOldDeltas && orgEvent.type === 'mousewheel' && absDelta % 120 === 0;\n    }\n\n}));\n\nS2.define('jquery.select2',[\n  'jquery',\n  'jquery-mousewheel',\n\n  './select2/core',\n  './select2/defaults',\n  './select2/utils'\n], function ($, _, Select2, Defaults, Utils) {\n  if ($.fn.select2 == null) {\n    // All methods that should return the element\n    var thisMethods = ['open', 'close', 'destroy'];\n\n    $.fn.select2 = function (options) {\n      options = options || {};\n\n      if (typeof options === 'object') {\n        this.each(function () {\n          var instanceOptions = $.extend(true, {}, options);\n\n          var instance = new Select2($(this), instanceOptions);\n        });\n\n        return this;\n      } else if (typeof options === 'string') {\n        var ret;\n        var args = Array.prototype.slice.call(arguments, 1);\n\n        this.each(function () {\n          var instance = Utils.GetData(this, 'select2');\n\n          if (instance == null && window.console && console.error) {\n            console.error(\n              'The select2(\\'' + options + '\\') method was called on an ' +\n              'element that is not using Select2.'\n            );\n          }\n\n          ret = instance[options].apply(instance, args);\n        });\n\n        // Check if we should be returning `this`\n        if ($.inArray(options, thisMethods) > -1) {\n          return this;\n        }\n\n        return ret;\n      } else {\n        throw new Error('Invalid arguments for Select2: ' + options);\n      }\n    };\n  }\n\n  if ($.fn.select2.defaults == null) {\n    $.fn.select2.defaults = Defaults;\n  }\n\n  return Select2;\n});\n\n  // Return the AMD loader configuration so it can be used outside of this file\n  return {\n    define: S2.define,\n    require: S2.require\n  };\n}());\n\n  // Autoload the jQuery bindings\n  // We know that all of the modules exist above this, so we're safe\n  var select2 = S2.require('jquery.select2');\n\n  // Hold the AMD module references on the jQuery function that was just loaded\n  // This allows Select2 to use the internal loader outside of this file, such\n  // as in the language files.\n  jQuery.fn.select2.amd = S2;\n\n  // Return the Select2 instance for anyone who is importing it.\n  return select2;\n}));\n"
  },
  {
    "path": "public/backend/vendors/js/forms/select/select2.js",
    "content": "/*!\n * Select2 4.0.10\n * https://select2.github.io\n *\n * Released under the MIT license\n * https://github.com/select2/select2/blob/master/LICENSE.md\n */\n;(function (factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module.\n    define(['jquery'], factory);\n  } else if (typeof module === 'object' && module.exports) {\n    // Node/CommonJS\n    module.exports = function (root, jQuery) {\n      if (jQuery === undefined) {\n        // require('jQuery') returns a factory that requires window to\n        // build a jQuery instance, we normalize how we use modules\n        // that require this pattern but the window provided is a noop\n        // if it's defined (how jquery works)\n        if (typeof window !== 'undefined') {\n          jQuery = require('jquery');\n        }\n        else {\n          jQuery = require('jquery')(root);\n        }\n      }\n      factory(jQuery);\n      return jQuery;\n    };\n  } else {\n    // Browser globals\n    factory(jQuery);\n  }\n} (function (jQuery) {\n  // This is needed so we can catch the AMD loader configuration and use it\n  // The inner file should be wrapped (by `banner.start.js`) in a function that\n  // returns the AMD loader references.\n  var S2 =(function () {\n  // Restore the Select2 AMD loader so it can be used\n  // Needed mostly in the language files, where the loader is not inserted\n  if (jQuery && jQuery.fn && jQuery.fn.select2 && jQuery.fn.select2.amd) {\n    var S2 = jQuery.fn.select2.amd;\n  }\nvar S2;(function () { if (!S2 || !S2.requirejs) {\nif (!S2) { S2 = {}; } else { require = S2; }\n/**\n * @license almond 0.3.3 Copyright jQuery Foundation and other contributors.\n * Released under MIT license, http://github.com/requirejs/almond/LICENSE\n */\n//Going sloppy to avoid 'use strict' string cost, but strict practices should\n//be followed.\n/*global setTimeout: false */\n\nvar requirejs, require, define;\n(function (undef) {\n    var main, req, makeMap, handlers,\n        defined = {},\n        waiting = {},\n        config = {},\n        defining = {},\n        hasOwn = Object.prototype.hasOwnProperty,\n        aps = [].slice,\n        jsSuffixRegExp = /\\.js$/;\n\n    function hasProp(obj, prop) {\n        return hasOwn.call(obj, prop);\n    }\n\n    /**\n     * Given a relative module name, like ./something, normalize it to\n     * a real name that can be mapped to a path.\n     * @param {String} name the relative name\n     * @param {String} baseName a real name that the name arg is relative\n     * to.\n     * @returns {String} normalized name\n     */\n    function normalize(name, baseName) {\n        var nameParts, nameSegment, mapValue, foundMap, lastIndex,\n            foundI, foundStarMap, starI, i, j, part, normalizedBaseParts,\n            baseParts = baseName && baseName.split(\"/\"),\n            map = config.map,\n            starMap = (map && map['*']) || {};\n\n        //Adjust any relative paths.\n        if (name) {\n            name = name.split('/');\n            lastIndex = name.length - 1;\n\n            // If wanting node ID compatibility, strip .js from end\n            // of IDs. Have to do this here, and not in nameToUrl\n            // because node allows either .js or non .js to map\n            // to same file.\n            if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) {\n                name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, '');\n            }\n\n            // Starts with a '.' so need the baseName\n            if (name[0].charAt(0) === '.' && baseParts) {\n                //Convert baseName to array, and lop off the last part,\n                //so that . matches that 'directory' and not name of the baseName's\n                //module. For instance, baseName of 'one/two/three', maps to\n                //'one/two/three.js', but we want the directory, 'one/two' for\n                //this normalization.\n                normalizedBaseParts = baseParts.slice(0, baseParts.length - 1);\n                name = normalizedBaseParts.concat(name);\n            }\n\n            //start trimDots\n            for (i = 0; i < name.length; i++) {\n                part = name[i];\n                if (part === '.') {\n                    name.splice(i, 1);\n                    i -= 1;\n                } else if (part === '..') {\n                    // If at the start, or previous value is still ..,\n                    // keep them so that when converted to a path it may\n                    // still work when converted to a path, even though\n                    // as an ID it is less than ideal. In larger point\n                    // releases, may be better to just kick out an error.\n                    if (i === 0 || (i === 1 && name[2] === '..') || name[i - 1] === '..') {\n                        continue;\n                    } else if (i > 0) {\n                        name.splice(i - 1, 2);\n                        i -= 2;\n                    }\n                }\n            }\n            //end trimDots\n\n            name = name.join('/');\n        }\n\n        //Apply map config if available.\n        if ((baseParts || starMap) && map) {\n            nameParts = name.split('/');\n\n            for (i = nameParts.length; i > 0; i -= 1) {\n                nameSegment = nameParts.slice(0, i).join(\"/\");\n\n                if (baseParts) {\n                    //Find the longest baseName segment match in the config.\n                    //So, do joins on the biggest to smallest lengths of baseParts.\n                    for (j = baseParts.length; j > 0; j -= 1) {\n                        mapValue = map[baseParts.slice(0, j).join('/')];\n\n                        //baseName segment has  config, find if it has one for\n                        //this name.\n                        if (mapValue) {\n                            mapValue = mapValue[nameSegment];\n                            if (mapValue) {\n                                //Match, update name to the new value.\n                                foundMap = mapValue;\n                                foundI = i;\n                                break;\n                            }\n                        }\n                    }\n                }\n\n                if (foundMap) {\n                    break;\n                }\n\n                //Check for a star map match, but just hold on to it,\n                //if there is a shorter segment match later in a matching\n                //config, then favor over this star map.\n                if (!foundStarMap && starMap && starMap[nameSegment]) {\n                    foundStarMap = starMap[nameSegment];\n                    starI = i;\n                }\n            }\n\n            if (!foundMap && foundStarMap) {\n                foundMap = foundStarMap;\n                foundI = starI;\n            }\n\n            if (foundMap) {\n                nameParts.splice(0, foundI, foundMap);\n                name = nameParts.join('/');\n            }\n        }\n\n        return name;\n    }\n\n    function makeRequire(relName, forceSync) {\n        return function () {\n            //A version of a require function that passes a moduleName\n            //value for items that may need to\n            //look up paths relative to the moduleName\n            var args = aps.call(arguments, 0);\n\n            //If first arg is not require('string'), and there is only\n            //one arg, it is the array form without a callback. Insert\n            //a null so that the following concat is correct.\n            if (typeof args[0] !== 'string' && args.length === 1) {\n                args.push(null);\n            }\n            return req.apply(undef, args.concat([relName, forceSync]));\n        };\n    }\n\n    function makeNormalize(relName) {\n        return function (name) {\n            return normalize(name, relName);\n        };\n    }\n\n    function makeLoad(depName) {\n        return function (value) {\n            defined[depName] = value;\n        };\n    }\n\n    function callDep(name) {\n        if (hasProp(waiting, name)) {\n            var args = waiting[name];\n            delete waiting[name];\n            defining[name] = true;\n            main.apply(undef, args);\n        }\n\n        if (!hasProp(defined, name) && !hasProp(defining, name)) {\n            throw new Error('No ' + name);\n        }\n        return defined[name];\n    }\n\n    //Turns a plugin!resource to [plugin, resource]\n    //with the plugin being undefined if the name\n    //did not have a plugin prefix.\n    function splitPrefix(name) {\n        var prefix,\n            index = name ? name.indexOf('!') : -1;\n        if (index > -1) {\n            prefix = name.substring(0, index);\n            name = name.substring(index + 1, name.length);\n        }\n        return [prefix, name];\n    }\n\n    //Creates a parts array for a relName where first part is plugin ID,\n    //second part is resource ID. Assumes relName has already been normalized.\n    function makeRelParts(relName) {\n        return relName ? splitPrefix(relName) : [];\n    }\n\n    /**\n     * Makes a name map, normalizing the name, and using a plugin\n     * for normalization if necessary. Grabs a ref to plugin\n     * too, as an optimization.\n     */\n    makeMap = function (name, relParts) {\n        var plugin,\n            parts = splitPrefix(name),\n            prefix = parts[0],\n            relResourceName = relParts[1];\n\n        name = parts[1];\n\n        if (prefix) {\n            prefix = normalize(prefix, relResourceName);\n            plugin = callDep(prefix);\n        }\n\n        //Normalize according\n        if (prefix) {\n            if (plugin && plugin.normalize) {\n                name = plugin.normalize(name, makeNormalize(relResourceName));\n            } else {\n                name = normalize(name, relResourceName);\n            }\n        } else {\n            name = normalize(name, relResourceName);\n            parts = splitPrefix(name);\n            prefix = parts[0];\n            name = parts[1];\n            if (prefix) {\n                plugin = callDep(prefix);\n            }\n        }\n\n        //Using ridiculous property names for space reasons\n        return {\n            f: prefix ? prefix + '!' + name : name, //fullName\n            n: name,\n            pr: prefix,\n            p: plugin\n        };\n    };\n\n    function makeConfig(name) {\n        return function () {\n            return (config && config.config && config.config[name]) || {};\n        };\n    }\n\n    handlers = {\n        require: function (name) {\n            return makeRequire(name);\n        },\n        exports: function (name) {\n            var e = defined[name];\n            if (typeof e !== 'undefined') {\n                return e;\n            } else {\n                return (defined[name] = {});\n            }\n        },\n        module: function (name) {\n            return {\n                id: name,\n                uri: '',\n                exports: defined[name],\n                config: makeConfig(name)\n            };\n        }\n    };\n\n    main = function (name, deps, callback, relName) {\n        var cjsModule, depName, ret, map, i, relParts,\n            args = [],\n            callbackType = typeof callback,\n            usingExports;\n\n        //Use name if no relName\n        relName = relName || name;\n        relParts = makeRelParts(relName);\n\n        //Call the callback to define the module, if necessary.\n        if (callbackType === 'undefined' || callbackType === 'function') {\n            //Pull out the defined dependencies and pass the ordered\n            //values to the callback.\n            //Default to [require, exports, module] if no deps\n            deps = !deps.length && callback.length ? ['require', 'exports', 'module'] : deps;\n            for (i = 0; i < deps.length; i += 1) {\n                map = makeMap(deps[i], relParts);\n                depName = map.f;\n\n                //Fast path CommonJS standard dependencies.\n                if (depName === \"require\") {\n                    args[i] = handlers.require(name);\n                } else if (depName === \"exports\") {\n                    //CommonJS module spec 1.1\n                    args[i] = handlers.exports(name);\n                    usingExports = true;\n                } else if (depName === \"module\") {\n                    //CommonJS module spec 1.1\n                    cjsModule = args[i] = handlers.module(name);\n                } else if (hasProp(defined, depName) ||\n                           hasProp(waiting, depName) ||\n                           hasProp(defining, depName)) {\n                    args[i] = callDep(depName);\n                } else if (map.p) {\n                    map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {});\n                    args[i] = defined[depName];\n                } else {\n                    throw new Error(name + ' missing ' + depName);\n                }\n            }\n\n            ret = callback ? callback.apply(defined[name], args) : undefined;\n\n            if (name) {\n                //If setting exports via \"module\" is in play,\n                //favor that over return value and exports. After that,\n                //favor a non-undefined return value over exports use.\n                if (cjsModule && cjsModule.exports !== undef &&\n                        cjsModule.exports !== defined[name]) {\n                    defined[name] = cjsModule.exports;\n                } else if (ret !== undef || !usingExports) {\n                    //Use the return value from the function.\n                    defined[name] = ret;\n                }\n            }\n        } else if (name) {\n            //May just be an object definition for the module. Only\n            //worry about defining if have a module name.\n            defined[name] = callback;\n        }\n    };\n\n    requirejs = require = req = function (deps, callback, relName, forceSync, alt) {\n        if (typeof deps === \"string\") {\n            if (handlers[deps]) {\n                //callback in this case is really relName\n                return handlers[deps](callback);\n            }\n            //Just return the module wanted. In this scenario, the\n            //deps arg is the module name, and second arg (if passed)\n            //is just the relName.\n            //Normalize module name, if it contains . or ..\n            return callDep(makeMap(deps, makeRelParts(callback)).f);\n        } else if (!deps.splice) {\n            //deps is a config object, not an array.\n            config = deps;\n            if (config.deps) {\n                req(config.deps, config.callback);\n            }\n            if (!callback) {\n                return;\n            }\n\n            if (callback.splice) {\n                //callback is an array, which means it is a dependency list.\n                //Adjust args if there are dependencies\n                deps = callback;\n                callback = relName;\n                relName = null;\n            } else {\n                deps = undef;\n            }\n        }\n\n        //Support require(['a'])\n        callback = callback || function () {};\n\n        //If relName is a function, it is an errback handler,\n        //so remove it.\n        if (typeof relName === 'function') {\n            relName = forceSync;\n            forceSync = alt;\n        }\n\n        //Simulate async callback;\n        if (forceSync) {\n            main(undef, deps, callback, relName);\n        } else {\n            //Using a non-zero value because of concern for what old browsers\n            //do, and latest browsers \"upgrade\" to 4 if lower value is used:\n            //http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout:\n            //If want a value immediately, use require('id') instead -- something\n            //that works in almond on the global level, but not guaranteed and\n            //unlikely to work in other AMD implementations.\n            setTimeout(function () {\n                main(undef, deps, callback, relName);\n            }, 4);\n        }\n\n        return req;\n    };\n\n    /**\n     * Just drops the config on the floor, but returns req in case\n     * the config return value is used.\n     */\n    req.config = function (cfg) {\n        return req(cfg);\n    };\n\n    /**\n     * Expose module registry for debugging and tooling\n     */\n    requirejs._defined = defined;\n\n    define = function (name, deps, callback) {\n        if (typeof name !== 'string') {\n            throw new Error('See almond README: incorrect module build, no module name');\n        }\n\n        //This module may not have dependencies\n        if (!deps.splice) {\n            //deps is not an array, so probably means\n            //an object literal or factory function for\n            //the value. Adjust args.\n            callback = deps;\n            deps = [];\n        }\n\n        if (!hasProp(defined, name) && !hasProp(waiting, name)) {\n            waiting[name] = [name, deps, callback];\n        }\n    };\n\n    define.amd = {\n        jQuery: true\n    };\n}());\n\nS2.requirejs = requirejs;S2.require = require;S2.define = define;\n}\n}());\nS2.define(\"almond\", function(){});\n\n/* global jQuery:false, $:false */\nS2.define('jquery',[],function () {\n  var _$ = jQuery || $;\n\n  if (_$ == null && console && console.error) {\n    console.error(\n      'Select2: An instance of jQuery or a jQuery-compatible library was not ' +\n      'found. Make sure that you are including jQuery before Select2 on your ' +\n      'web page.'\n    );\n  }\n\n  return _$;\n});\n\nS2.define('select2/utils',[\n  'jquery'\n], function ($) {\n  var Utils = {};\n\n  Utils.Extend = function (ChildClass, SuperClass) {\n    var __hasProp = {}.hasOwnProperty;\n\n    function BaseConstructor () {\n      this.constructor = ChildClass;\n    }\n\n    for (var key in SuperClass) {\n      if (__hasProp.call(SuperClass, key)) {\n        ChildClass[key] = SuperClass[key];\n      }\n    }\n\n    BaseConstructor.prototype = SuperClass.prototype;\n    ChildClass.prototype = new BaseConstructor();\n    ChildClass.__super__ = SuperClass.prototype;\n\n    return ChildClass;\n  };\n\n  function getMethods (theClass) {\n    var proto = theClass.prototype;\n\n    var methods = [];\n\n    for (var methodName in proto) {\n      var m = proto[methodName];\n\n      if (typeof m !== 'function') {\n        continue;\n      }\n\n      if (methodName === 'constructor') {\n        continue;\n      }\n\n      methods.push(methodName);\n    }\n\n    return methods;\n  }\n\n  Utils.Decorate = function (SuperClass, DecoratorClass) {\n    var decoratedMethods = getMethods(DecoratorClass);\n    var superMethods = getMethods(SuperClass);\n\n    function DecoratedClass () {\n      var unshift = Array.prototype.unshift;\n\n      var argCount = DecoratorClass.prototype.constructor.length;\n\n      var calledConstructor = SuperClass.prototype.constructor;\n\n      if (argCount > 0) {\n        unshift.call(arguments, SuperClass.prototype.constructor);\n\n        calledConstructor = DecoratorClass.prototype.constructor;\n      }\n\n      calledConstructor.apply(this, arguments);\n    }\n\n    DecoratorClass.displayName = SuperClass.displayName;\n\n    function ctr () {\n      this.constructor = DecoratedClass;\n    }\n\n    DecoratedClass.prototype = new ctr();\n\n    for (var m = 0; m < superMethods.length; m++) {\n      var superMethod = superMethods[m];\n\n      DecoratedClass.prototype[superMethod] =\n        SuperClass.prototype[superMethod];\n    }\n\n    var calledMethod = function (methodName) {\n      // Stub out the original method if it's not decorating an actual method\n      var originalMethod = function () {};\n\n      if (methodName in DecoratedClass.prototype) {\n        originalMethod = DecoratedClass.prototype[methodName];\n      }\n\n      var decoratedMethod = DecoratorClass.prototype[methodName];\n\n      return function () {\n        var unshift = Array.prototype.unshift;\n\n        unshift.call(arguments, originalMethod);\n\n        return decoratedMethod.apply(this, arguments);\n      };\n    };\n\n    for (var d = 0; d < decoratedMethods.length; d++) {\n      var decoratedMethod = decoratedMethods[d];\n\n      DecoratedClass.prototype[decoratedMethod] = calledMethod(decoratedMethod);\n    }\n\n    return DecoratedClass;\n  };\n\n  var Observable = function () {\n    this.listeners = {};\n  };\n\n  Observable.prototype.on = function (event, callback) {\n    this.listeners = this.listeners || {};\n\n    if (event in this.listeners) {\n      this.listeners[event].push(callback);\n    } else {\n      this.listeners[event] = [callback];\n    }\n  };\n\n  Observable.prototype.trigger = function (event) {\n    var slice = Array.prototype.slice;\n    var params = slice.call(arguments, 1);\n\n    this.listeners = this.listeners || {};\n\n    // Params should always come in as an array\n    if (params == null) {\n      params = [];\n    }\n\n    // If there are no arguments to the event, use a temporary object\n    if (params.length === 0) {\n      params.push({});\n    }\n\n    // Set the `_type` of the first object to the event\n    params[0]._type = event;\n\n    if (event in this.listeners) {\n      this.invoke(this.listeners[event], slice.call(arguments, 1));\n    }\n\n    if ('*' in this.listeners) {\n      this.invoke(this.listeners['*'], arguments);\n    }\n  };\n\n  Observable.prototype.invoke = function (listeners, params) {\n    for (var i = 0, len = listeners.length; i < len; i++) {\n      listeners[i].apply(this, params);\n    }\n  };\n\n  Utils.Observable = Observable;\n\n  Utils.generateChars = function (length) {\n    var chars = '';\n\n    for (var i = 0; i < length; i++) {\n      var randomChar = Math.floor(Math.random() * 36);\n      chars += randomChar.toString(36);\n    }\n\n    return chars;\n  };\n\n  Utils.bind = function (func, context) {\n    return function () {\n      func.apply(context, arguments);\n    };\n  };\n\n  Utils._convertData = function (data) {\n    for (var originalKey in data) {\n      var keys = originalKey.split('-');\n\n      var dataLevel = data;\n\n      if (keys.length === 1) {\n        continue;\n      }\n\n      for (var k = 0; k < keys.length; k++) {\n        var key = keys[k];\n\n        // Lowercase the first letter\n        // By default, dash-separated becomes camelCase\n        key = key.substring(0, 1).toLowerCase() + key.substring(1);\n\n        if (!(key in dataLevel)) {\n          dataLevel[key] = {};\n        }\n\n        if (k == keys.length - 1) {\n          dataLevel[key] = data[originalKey];\n        }\n\n        dataLevel = dataLevel[key];\n      }\n\n      delete data[originalKey];\n    }\n\n    return data;\n  };\n\n  Utils.hasScroll = function (index, el) {\n    // Adapted from the function created by @ShadowScripter\n    // and adapted by @BillBarry on the Stack Exchange Code Review website.\n    // The original code can be found at\n    // http://codereview.stackexchange.com/q/13338\n    // and was designed to be used with the Sizzle selector engine.\n\n    var $el = $(el);\n    var overflowX = el.style.overflowX;\n    var overflowY = el.style.overflowY;\n\n    //Check both x and y declarations\n    if (overflowX === overflowY &&\n        (overflowY === 'hidden' || overflowY === 'visible')) {\n      return false;\n    }\n\n    if (overflowX === 'scroll' || overflowY === 'scroll') {\n      return true;\n    }\n\n    return ($el.innerHeight() < el.scrollHeight ||\n      $el.innerWidth() < el.scrollWidth);\n  };\n\n  Utils.escapeMarkup = function (markup) {\n    var replaceMap = {\n      '\\\\': '&#92;',\n      '&': '&amp;',\n      '<': '&lt;',\n      '>': '&gt;',\n      '\"': '&quot;',\n      '\\'': '&#39;',\n      '/': '&#47;'\n    };\n\n    // Do not try to escape the markup if it's not a string\n    if (typeof markup !== 'string') {\n      return markup;\n    }\n\n    return String(markup).replace(/[&<>\"'\\/\\\\]/g, function (match) {\n      return replaceMap[match];\n    });\n  };\n\n  // Append an array of jQuery nodes to a given element.\n  Utils.appendMany = function ($element, $nodes) {\n    // jQuery 1.7.x does not support $.fn.append() with an array\n    // Fall back to a jQuery object collection using $.fn.add()\n    if ($.fn.jquery.substr(0, 3) === '1.7') {\n      var $jqNodes = $();\n\n      $.map($nodes, function (node) {\n        $jqNodes = $jqNodes.add(node);\n      });\n\n      $nodes = $jqNodes;\n    }\n\n    $element.append($nodes);\n  };\n\n  // Cache objects in Utils.__cache instead of $.data (see #4346)\n  Utils.__cache = {};\n\n  var id = 0;\n  Utils.GetUniqueElementId = function (element) {\n    // Get a unique element Id. If element has no id,\n    // creates a new unique number, stores it in the id\n    // attribute and returns the new id.\n    // If an id already exists, it simply returns it.\n\n    var select2Id = element.getAttribute('data-select2-id');\n    if (select2Id == null) {\n      // If element has id, use it.\n      if (element.id) {\n        select2Id = element.id;\n        element.setAttribute('data-select2-id', select2Id);\n      } else {\n        element.setAttribute('data-select2-id', ++id);\n        select2Id = id.toString();\n      }\n    }\n    return select2Id;\n  };\n\n  Utils.StoreData = function (element, name, value) {\n    // Stores an item in the cache for a specified element.\n    // name is the cache key.\n    var id = Utils.GetUniqueElementId(element);\n    if (!Utils.__cache[id]) {\n      Utils.__cache[id] = {};\n    }\n\n    Utils.__cache[id][name] = value;\n  };\n\n  Utils.GetData = function (element, name) {\n    // Retrieves a value from the cache by its key (name)\n    // name is optional. If no name specified, return\n    // all cache items for the specified element.\n    // and for a specified element.\n    var id = Utils.GetUniqueElementId(element);\n    if (name) {\n      if (Utils.__cache[id]) {\n        if (Utils.__cache[id][name] != null) {\n          return Utils.__cache[id][name];\n        }\n        return $(element).data(name); // Fallback to HTML5 data attribs.\n      }\n      return $(element).data(name); // Fallback to HTML5 data attribs.\n    } else {\n      return Utils.__cache[id];\n    }\n  };\n\n  Utils.RemoveData = function (element) {\n    // Removes all cached items for a specified element.\n    var id = Utils.GetUniqueElementId(element);\n    if (Utils.__cache[id] != null) {\n      delete Utils.__cache[id];\n    }\n\n    element.removeAttribute('data-select2-id');\n  };\n\n  return Utils;\n});\n\nS2.define('select2/results',[\n  'jquery',\n  './utils'\n], function ($, Utils) {\n  function Results ($element, options, dataAdapter) {\n    this.$element = $element;\n    this.data = dataAdapter;\n    this.options = options;\n\n    Results.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(Results, Utils.Observable);\n\n  Results.prototype.render = function () {\n    var $results = $(\n      '<ul class=\"select2-results__options\" role=\"listbox\"></ul>'\n    );\n\n    if (this.options.get('multiple')) {\n      $results.attr('aria-multiselectable', 'true');\n    }\n\n    this.$results = $results;\n\n    return $results;\n  };\n\n  Results.prototype.clear = function () {\n    this.$results.empty();\n  };\n\n  Results.prototype.displayMessage = function (params) {\n    var escapeMarkup = this.options.get('escapeMarkup');\n\n    this.clear();\n    this.hideLoading();\n\n    var $message = $(\n      '<li role=\"alert\" aria-live=\"assertive\"' +\n      ' class=\"select2-results__option\"></li>'\n    );\n\n    var message = this.options.get('translations').get(params.message);\n\n    $message.append(\n      escapeMarkup(\n        message(params.args)\n      )\n    );\n\n    $message[0].className += ' select2-results__message';\n\n    this.$results.append($message);\n  };\n\n  Results.prototype.hideMessages = function () {\n    this.$results.find('.select2-results__message').remove();\n  };\n\n  Results.prototype.append = function (data) {\n    this.hideLoading();\n\n    var $options = [];\n\n    if (data.results == null || data.results.length === 0) {\n      if (this.$results.children().length === 0) {\n        this.trigger('results:message', {\n          message: 'noResults'\n        });\n      }\n\n      return;\n    }\n\n    data.results = this.sort(data.results);\n\n    for (var d = 0; d < data.results.length; d++) {\n      var item = data.results[d];\n\n      var $option = this.option(item);\n\n      $options.push($option);\n    }\n\n    this.$results.append($options);\n  };\n\n  Results.prototype.position = function ($results, $dropdown) {\n    var $resultsContainer = $dropdown.find('.select2-results');\n    $resultsContainer.append($results);\n  };\n\n  Results.prototype.sort = function (data) {\n    var sorter = this.options.get('sorter');\n\n    return sorter(data);\n  };\n\n  Results.prototype.highlightFirstItem = function () {\n    var $options = this.$results\n      .find('.select2-results__option[aria-selected]');\n\n    var $selected = $options.filter('[aria-selected=true]');\n\n    // Check if there are any selected options\n    if ($selected.length > 0) {\n      // If there are selected options, highlight the first\n      $selected.first().trigger('mouseenter');\n    } else {\n      // If there are no selected options, highlight the first option\n      // in the dropdown\n      $options.first().trigger('mouseenter');\n    }\n\n    this.ensureHighlightVisible();\n  };\n\n  Results.prototype.setClasses = function () {\n    var self = this;\n\n    this.data.current(function (selected) {\n      var selectedIds = $.map(selected, function (s) {\n        return s.id.toString();\n      });\n\n      var $options = self.$results\n        .find('.select2-results__option[aria-selected]');\n\n      $options.each(function () {\n        var $option = $(this);\n\n        var item = Utils.GetData(this, 'data');\n\n        // id needs to be converted to a string when comparing\n        var id = '' + item.id;\n\n        if ((item.element != null && item.element.selected) ||\n            (item.element == null && $.inArray(id, selectedIds) > -1)) {\n          $option.attr('aria-selected', 'true');\n        } else {\n          $option.attr('aria-selected', 'false');\n        }\n      });\n\n    });\n  };\n\n  Results.prototype.showLoading = function (params) {\n    this.hideLoading();\n\n    var loadingMore = this.options.get('translations').get('searching');\n\n    var loading = {\n      disabled: true,\n      loading: true,\n      text: loadingMore(params)\n    };\n    var $loading = this.option(loading);\n    $loading.className += ' loading-results';\n\n    this.$results.prepend($loading);\n  };\n\n  Results.prototype.hideLoading = function () {\n    this.$results.find('.loading-results').remove();\n  };\n\n  Results.prototype.option = function (data) {\n    var option = document.createElement('li');\n    option.className = 'select2-results__option';\n\n    var attrs = {\n      'role': 'option',\n      'aria-selected': 'false'\n    };\n\n    var matches = window.Element.prototype.matches ||\n      window.Element.prototype.msMatchesSelector ||\n      window.Element.prototype.webkitMatchesSelector;\n\n    if ((data.element != null && matches.call(data.element, ':disabled')) ||\n        (data.element == null && data.disabled)) {\n      delete attrs['aria-selected'];\n      attrs['aria-disabled'] = 'true';\n    }\n\n    if (data.id == null) {\n      delete attrs['aria-selected'];\n    }\n\n    if (data._resultId != null) {\n      option.id = data._resultId;\n    }\n\n    if (data.title) {\n      option.title = data.title;\n    }\n\n    if (data.children) {\n      attrs.role = 'group';\n      attrs['aria-label'] = data.text;\n      delete attrs['aria-selected'];\n    }\n\n    for (var attr in attrs) {\n      var val = attrs[attr];\n\n      option.setAttribute(attr, val);\n    }\n\n    if (data.children) {\n      var $option = $(option);\n\n      var label = document.createElement('strong');\n      label.className = 'select2-results__group';\n\n      var $label = $(label);\n      this.template(data, label);\n\n      var $children = [];\n\n      for (var c = 0; c < data.children.length; c++) {\n        var child = data.children[c];\n\n        var $child = this.option(child);\n\n        $children.push($child);\n      }\n\n      var $childrenContainer = $('<ul></ul>', {\n        'class': 'select2-results__options select2-results__options--nested'\n      });\n\n      $childrenContainer.append($children);\n\n      $option.append(label);\n      $option.append($childrenContainer);\n    } else {\n      this.template(data, option);\n    }\n\n    Utils.StoreData(option, 'data', data);\n\n    return option;\n  };\n\n  Results.prototype.bind = function (container, $container) {\n    var self = this;\n\n    var id = container.id + '-results';\n\n    this.$results.attr('id', id);\n\n    container.on('results:all', function (params) {\n      self.clear();\n      self.append(params.data);\n\n      if (container.isOpen()) {\n        self.setClasses();\n        self.highlightFirstItem();\n      }\n    });\n\n    container.on('results:append', function (params) {\n      self.append(params.data);\n\n      if (container.isOpen()) {\n        self.setClasses();\n      }\n    });\n\n    container.on('query', function (params) {\n      self.hideMessages();\n      self.showLoading(params);\n    });\n\n    container.on('select', function () {\n      if (!container.isOpen()) {\n        return;\n      }\n\n      self.setClasses();\n\n      if (self.options.get('scrollAfterSelect')) {\n        self.highlightFirstItem();\n      }\n    });\n\n    container.on('unselect', function () {\n      if (!container.isOpen()) {\n        return;\n      }\n\n      self.setClasses();\n\n      if (self.options.get('scrollAfterSelect')) {\n        self.highlightFirstItem();\n      }\n    });\n\n    container.on('open', function () {\n      // When the dropdown is open, aria-expended=\"true\"\n      self.$results.attr('aria-expanded', 'true');\n      self.$results.attr('aria-hidden', 'false');\n\n      self.setClasses();\n      self.ensureHighlightVisible();\n    });\n\n    container.on('close', function () {\n      // When the dropdown is closed, aria-expended=\"false\"\n      self.$results.attr('aria-expanded', 'false');\n      self.$results.attr('aria-hidden', 'true');\n      self.$results.removeAttr('aria-activedescendant');\n    });\n\n    container.on('results:toggle', function () {\n      var $highlighted = self.getHighlightedResults();\n\n      if ($highlighted.length === 0) {\n        return;\n      }\n\n      $highlighted.trigger('mouseup');\n    });\n\n    container.on('results:select', function () {\n      var $highlighted = self.getHighlightedResults();\n\n      if ($highlighted.length === 0) {\n        return;\n      }\n\n      var data = Utils.GetData($highlighted[0], 'data');\n\n      if ($highlighted.attr('aria-selected') == 'true') {\n        self.trigger('close', {});\n      } else {\n        self.trigger('select', {\n          data: data\n        });\n      }\n    });\n\n    container.on('results:previous', function () {\n      var $highlighted = self.getHighlightedResults();\n\n      var $options = self.$results.find('[aria-selected]');\n\n      var currentIndex = $options.index($highlighted);\n\n      // If we are already at the top, don't move further\n      // If no options, currentIndex will be -1\n      if (currentIndex <= 0) {\n        return;\n      }\n\n      var nextIndex = currentIndex - 1;\n\n      // If none are highlighted, highlight the first\n      if ($highlighted.length === 0) {\n        nextIndex = 0;\n      }\n\n      var $next = $options.eq(nextIndex);\n\n      $next.trigger('mouseenter');\n\n      var currentOffset = self.$results.offset().top;\n      var nextTop = $next.offset().top;\n      var nextOffset = self.$results.scrollTop() + (nextTop - currentOffset);\n\n      if (nextIndex === 0) {\n        self.$results.scrollTop(0);\n      } else if (nextTop - currentOffset < 0) {\n        self.$results.scrollTop(nextOffset);\n      }\n    });\n\n    container.on('results:next', function () {\n      var $highlighted = self.getHighlightedResults();\n\n      var $options = self.$results.find('[aria-selected]');\n\n      var currentIndex = $options.index($highlighted);\n\n      var nextIndex = currentIndex + 1;\n\n      // If we are at the last option, stay there\n      if (nextIndex >= $options.length) {\n        return;\n      }\n\n      var $next = $options.eq(nextIndex);\n\n      $next.trigger('mouseenter');\n\n      var currentOffset = self.$results.offset().top +\n        self.$results.outerHeight(false);\n      var nextBottom = $next.offset().top + $next.outerHeight(false);\n      var nextOffset = self.$results.scrollTop() + nextBottom - currentOffset;\n\n      if (nextIndex === 0) {\n        self.$results.scrollTop(0);\n      } else if (nextBottom > currentOffset) {\n        self.$results.scrollTop(nextOffset);\n      }\n    });\n\n    container.on('results:focus', function (params) {\n      params.element.addClass('select2-results__option--highlighted');\n    });\n\n    container.on('results:message', function (params) {\n      self.displayMessage(params);\n    });\n\n    if ($.fn.mousewheel) {\n      this.$results.on('mousewheel', function (e) {\n        var top = self.$results.scrollTop();\n\n        var bottom = self.$results.get(0).scrollHeight - top + e.deltaY;\n\n        var isAtTop = e.deltaY > 0 && top - e.deltaY <= 0;\n        var isAtBottom = e.deltaY < 0 && bottom <= self.$results.height();\n\n        if (isAtTop) {\n          self.$results.scrollTop(0);\n\n          e.preventDefault();\n          e.stopPropagation();\n        } else if (isAtBottom) {\n          self.$results.scrollTop(\n            self.$results.get(0).scrollHeight - self.$results.height()\n          );\n\n          e.preventDefault();\n          e.stopPropagation();\n        }\n      });\n    }\n\n    this.$results.on('mouseup', '.select2-results__option[aria-selected]',\n      function (evt) {\n      var $this = $(this);\n\n      var data = Utils.GetData(this, 'data');\n\n      if ($this.attr('aria-selected') === 'true') {\n        if (self.options.get('multiple')) {\n          self.trigger('unselect', {\n            originalEvent: evt,\n            data: data\n          });\n        } else {\n          self.trigger('close', {});\n        }\n\n        return;\n      }\n\n      self.trigger('select', {\n        originalEvent: evt,\n        data: data\n      });\n    });\n\n    this.$results.on('mouseenter', '.select2-results__option[aria-selected]',\n      function (evt) {\n      var data = Utils.GetData(this, 'data');\n\n      self.getHighlightedResults()\n          .removeClass('select2-results__option--highlighted');\n\n      self.trigger('results:focus', {\n        data: data,\n        element: $(this)\n      });\n    });\n  };\n\n  Results.prototype.getHighlightedResults = function () {\n    var $highlighted = this.$results\n    .find('.select2-results__option--highlighted');\n\n    return $highlighted;\n  };\n\n  Results.prototype.destroy = function () {\n    this.$results.remove();\n  };\n\n  Results.prototype.ensureHighlightVisible = function () {\n    var $highlighted = this.getHighlightedResults();\n\n    if ($highlighted.length === 0) {\n      return;\n    }\n\n    var $options = this.$results.find('[aria-selected]');\n\n    var currentIndex = $options.index($highlighted);\n\n    var currentOffset = this.$results.offset().top;\n    var nextTop = $highlighted.offset().top;\n    var nextOffset = this.$results.scrollTop() + (nextTop - currentOffset);\n\n    var offsetDelta = nextTop - currentOffset;\n    nextOffset -= $highlighted.outerHeight(false) * 2;\n\n    if (currentIndex <= 2) {\n      this.$results.scrollTop(0);\n    } else if (offsetDelta > this.$results.outerHeight() || offsetDelta < 0) {\n      this.$results.scrollTop(nextOffset);\n    }\n  };\n\n  Results.prototype.template = function (result, container) {\n    var template = this.options.get('templateResult');\n    var escapeMarkup = this.options.get('escapeMarkup');\n\n    var content = template(result, container);\n\n    if (content == null) {\n      container.style.display = 'none';\n    } else if (typeof content === 'string') {\n      container.innerHTML = escapeMarkup(content);\n    } else {\n      $(container).append(content);\n    }\n  };\n\n  return Results;\n});\n\nS2.define('select2/keys',[\n\n], function () {\n  var KEYS = {\n    BACKSPACE: 8,\n    TAB: 9,\n    ENTER: 13,\n    SHIFT: 16,\n    CTRL: 17,\n    ALT: 18,\n    ESC: 27,\n    SPACE: 32,\n    PAGE_UP: 33,\n    PAGE_DOWN: 34,\n    END: 35,\n    HOME: 36,\n    LEFT: 37,\n    UP: 38,\n    RIGHT: 39,\n    DOWN: 40,\n    DELETE: 46\n  };\n\n  return KEYS;\n});\n\nS2.define('select2/selection/base',[\n  'jquery',\n  '../utils',\n  '../keys'\n], function ($, Utils, KEYS) {\n  function BaseSelection ($element, options) {\n    this.$element = $element;\n    this.options = options;\n\n    BaseSelection.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(BaseSelection, Utils.Observable);\n\n  BaseSelection.prototype.render = function () {\n    var $selection = $(\n      '<span class=\"select2-selection\" role=\"combobox\" ' +\n      ' aria-haspopup=\"true\" aria-expanded=\"false\">' +\n      '</span>'\n    );\n\n    this._tabindex = 0;\n\n    if (Utils.GetData(this.$element[0], 'old-tabindex') != null) {\n      this._tabindex = Utils.GetData(this.$element[0], 'old-tabindex');\n    } else if (this.$element.attr('tabindex') != null) {\n      this._tabindex = this.$element.attr('tabindex');\n    }\n\n    $selection.attr('title', this.$element.attr('title'));\n    $selection.attr('tabindex', this._tabindex);\n    $selection.attr('aria-disabled', 'false');\n\n    this.$selection = $selection;\n\n    return $selection;\n  };\n\n  BaseSelection.prototype.bind = function (container, $container) {\n    var self = this;\n\n    var resultsId = container.id + '-results';\n\n    this.container = container;\n\n    this.$selection.on('focus', function (evt) {\n      self.trigger('focus', evt);\n    });\n\n    this.$selection.on('blur', function (evt) {\n      self._handleBlur(evt);\n    });\n\n    this.$selection.on('keydown', function (evt) {\n      self.trigger('keypress', evt);\n\n      if (evt.which === KEYS.SPACE) {\n        evt.preventDefault();\n      }\n    });\n\n    container.on('results:focus', function (params) {\n      self.$selection.attr('aria-activedescendant', params.data._resultId);\n    });\n\n    container.on('selection:update', function (params) {\n      self.update(params.data);\n    });\n\n    container.on('open', function () {\n      // When the dropdown is open, aria-expanded=\"true\"\n      self.$selection.attr('aria-expanded', 'true');\n      self.$selection.attr('aria-owns', resultsId);\n\n      self._attachCloseHandler(container);\n    });\n\n    container.on('close', function () {\n      // When the dropdown is closed, aria-expanded=\"false\"\n      self.$selection.attr('aria-expanded', 'false');\n      self.$selection.removeAttr('aria-activedescendant');\n      self.$selection.removeAttr('aria-owns');\n\n      self.$selection.trigger('focus');\n\n      self._detachCloseHandler(container);\n    });\n\n    container.on('enable', function () {\n      self.$selection.attr('tabindex', self._tabindex);\n      self.$selection.attr('aria-disabled', 'false');\n    });\n\n    container.on('disable', function () {\n      self.$selection.attr('tabindex', '-1');\n      self.$selection.attr('aria-disabled', 'true');\n    });\n  };\n\n  BaseSelection.prototype._handleBlur = function (evt) {\n    var self = this;\n\n    // This needs to be delayed as the active element is the body when the tab\n    // key is pressed, possibly along with others.\n    window.setTimeout(function () {\n      // Don't trigger `blur` if the focus is still in the selection\n      if (\n        (document.activeElement == self.$selection[0]) ||\n        ($.contains(self.$selection[0], document.activeElement))\n      ) {\n        return;\n      }\n\n      self.trigger('blur', evt);\n    }, 1);\n  };\n\n  BaseSelection.prototype._attachCloseHandler = function (container) {\n\n    $(document.body).on('mousedown.select2.' + container.id, function (e) {\n      var $target = $(e.target);\n\n      var $select = $target.closest('.select2');\n\n      var $all = $('.select2.select2-container--open');\n\n      $all.each(function () {\n        if (this == $select[0]) {\n          return;\n        }\n\n        var $element = Utils.GetData(this, 'element');\n\n        $element.select2('close');\n      });\n    });\n  };\n\n  BaseSelection.prototype._detachCloseHandler = function (container) {\n    $(document.body).off('mousedown.select2.' + container.id);\n  };\n\n  BaseSelection.prototype.position = function ($selection, $container) {\n    var $selectionContainer = $container.find('.selection');\n    $selectionContainer.append($selection);\n  };\n\n  BaseSelection.prototype.destroy = function () {\n    this._detachCloseHandler(this.container);\n  };\n\n  BaseSelection.prototype.update = function (data) {\n    throw new Error('The `update` method must be defined in child classes.');\n  };\n\n  return BaseSelection;\n});\n\nS2.define('select2/selection/single',[\n  'jquery',\n  './base',\n  '../utils',\n  '../keys'\n], function ($, BaseSelection, Utils, KEYS) {\n  function SingleSelection () {\n    SingleSelection.__super__.constructor.apply(this, arguments);\n  }\n\n  Utils.Extend(SingleSelection, BaseSelection);\n\n  SingleSelection.prototype.render = function () {\n    var $selection = SingleSelection.__super__.render.call(this);\n\n    $selection.addClass('select2-selection--single');\n\n    $selection.html(\n      '<span class=\"select2-selection__rendered\"></span>' +\n      '<span class=\"select2-selection__arrow\" role=\"presentation\">' +\n        '<b role=\"presentation\"></b>' +\n      '</span>'\n    );\n\n    return $selection;\n  };\n\n  SingleSelection.prototype.bind = function (container, $container) {\n    var self = this;\n\n    SingleSelection.__super__.bind.apply(this, arguments);\n\n    var id = container.id + '-container';\n\n    this.$selection.find('.select2-selection__rendered')\n      .attr('id', id)\n      .attr('role', 'textbox')\n      .attr('aria-readonly', 'true');\n    this.$selection.attr('aria-labelledby', id);\n\n    this.$selection.on('mousedown', function (evt) {\n      // Only respond to left clicks\n      if (evt.which !== 1) {\n        return;\n      }\n\n      self.trigger('toggle', {\n        originalEvent: evt\n      });\n    });\n\n    this.$selection.on('focus', function (evt) {\n      // User focuses on the container\n    });\n\n    this.$selection.on('blur', function (evt) {\n      // User exits the container\n    });\n\n    container.on('focus', function (evt) {\n      if (!container.isOpen()) {\n        self.$selection.trigger('focus');\n      }\n    });\n  };\n\n  SingleSelection.prototype.clear = function () {\n    var $rendered = this.$selection.find('.select2-selection__rendered');\n    $rendered.empty();\n    $rendered.removeAttr('title'); // clear tooltip on empty\n  };\n\n  SingleSelection.prototype.display = function (data, container) {\n    var template = this.options.get('templateSelection');\n    var escapeMarkup = this.options.get('escapeMarkup');\n\n    return escapeMarkup(template(data, container));\n  };\n\n  SingleSelection.prototype.selectionContainer = function () {\n    return $('<span></span>');\n  };\n\n  SingleSelection.prototype.update = function (data) {\n    if (data.length === 0) {\n      this.clear();\n      return;\n    }\n\n    var selection = data[0];\n\n    var $rendered = this.$selection.find('.select2-selection__rendered');\n    var formatted = this.display(selection, $rendered);\n\n    $rendered.empty().append(formatted);\n\n    var title = selection.title || selection.text;\n\n    if (title) {\n      $rendered.attr('title', title);\n    } else {\n      $rendered.removeAttr('title');\n    }\n  };\n\n  return SingleSelection;\n});\n\nS2.define('select2/selection/multiple',[\n  'jquery',\n  './base',\n  '../utils'\n], function ($, BaseSelection, Utils) {\n  function MultipleSelection ($element, options) {\n    MultipleSelection.__super__.constructor.apply(this, arguments);\n  }\n\n  Utils.Extend(MultipleSelection, BaseSelection);\n\n  MultipleSelection.prototype.render = function () {\n    var $selection = MultipleSelection.__super__.render.call(this);\n\n    $selection.addClass('select2-selection--multiple');\n\n    $selection.html(\n      '<ul class=\"select2-selection__rendered\"></ul>'\n    );\n\n    return $selection;\n  };\n\n  MultipleSelection.prototype.bind = function (container, $container) {\n    var self = this;\n\n    MultipleSelection.__super__.bind.apply(this, arguments);\n\n    this.$selection.on('click', function (evt) {\n      self.trigger('toggle', {\n        originalEvent: evt\n      });\n    });\n\n    this.$selection.on(\n      'click',\n      '.select2-selection__choice__remove',\n      function (evt) {\n        // Ignore the event if it is disabled\n        if (self.options.get('disabled')) {\n          return;\n        }\n\n        var $remove = $(this);\n        var $selection = $remove.parent();\n\n        var data = Utils.GetData($selection[0], 'data');\n\n        self.trigger('unselect', {\n          originalEvent: evt,\n          data: data\n        });\n      }\n    );\n  };\n\n  MultipleSelection.prototype.clear = function () {\n    var $rendered = this.$selection.find('.select2-selection__rendered');\n    $rendered.empty();\n    $rendered.removeAttr('title');\n  };\n\n  MultipleSelection.prototype.display = function (data, container) {\n    var template = this.options.get('templateSelection');\n    var escapeMarkup = this.options.get('escapeMarkup');\n\n    return escapeMarkup(template(data, container));\n  };\n\n  MultipleSelection.prototype.selectionContainer = function () {\n    var $container = $(\n      '<li class=\"select2-selection__choice\">' +\n        '<span class=\"select2-selection__choice__remove\" role=\"presentation\">' +\n          '&times;' +\n        '</span>' +\n      '</li>'\n    );\n\n    return $container;\n  };\n\n  MultipleSelection.prototype.update = function (data) {\n    this.clear();\n\n    if (data.length === 0) {\n      return;\n    }\n\n    var $selections = [];\n\n    for (var d = 0; d < data.length; d++) {\n      var selection = data[d];\n\n      var $selection = this.selectionContainer();\n      var formatted = this.display(selection, $selection);\n\n      $selection.append(formatted);\n\n      var title = selection.title || selection.text;\n\n      if (title) {\n        $selection.attr('title', title);\n      }\n\n      Utils.StoreData($selection[0], 'data', selection);\n\n      $selections.push($selection);\n    }\n\n    var $rendered = this.$selection.find('.select2-selection__rendered');\n\n    Utils.appendMany($rendered, $selections);\n  };\n\n  return MultipleSelection;\n});\n\nS2.define('select2/selection/placeholder',[\n  '../utils'\n], function (Utils) {\n  function Placeholder (decorated, $element, options) {\n    this.placeholder = this.normalizePlaceholder(options.get('placeholder'));\n\n    decorated.call(this, $element, options);\n  }\n\n  Placeholder.prototype.normalizePlaceholder = function (_, placeholder) {\n    if (typeof placeholder === 'string') {\n      placeholder = {\n        id: '',\n        text: placeholder\n      };\n    }\n\n    return placeholder;\n  };\n\n  Placeholder.prototype.createPlaceholder = function (decorated, placeholder) {\n    var $placeholder = this.selectionContainer();\n\n    $placeholder.html(this.display(placeholder));\n    $placeholder.addClass('select2-selection__placeholder')\n                .removeClass('select2-selection__choice');\n\n    return $placeholder;\n  };\n\n  Placeholder.prototype.update = function (decorated, data) {\n    var singlePlaceholder = (\n      data.length == 1 && data[0].id != this.placeholder.id\n    );\n    var multipleSelections = data.length > 1;\n\n    if (multipleSelections || singlePlaceholder) {\n      return decorated.call(this, data);\n    }\n\n    this.clear();\n\n    var $placeholder = this.createPlaceholder(this.placeholder);\n\n    this.$selection.find('.select2-selection__rendered').append($placeholder);\n  };\n\n  return Placeholder;\n});\n\nS2.define('select2/selection/allowClear',[\n  'jquery',\n  '../keys',\n  '../utils'\n], function ($, KEYS, Utils) {\n  function AllowClear () { }\n\n  AllowClear.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    if (this.placeholder == null) {\n      if (this.options.get('debug') && window.console && console.error) {\n        console.error(\n          'Select2: The `allowClear` option should be used in combination ' +\n          'with the `placeholder` option.'\n        );\n      }\n    }\n\n    this.$selection.on('mousedown', '.select2-selection__clear',\n      function (evt) {\n        self._handleClear(evt);\n    });\n\n    container.on('keypress', function (evt) {\n      self._handleKeyboardClear(evt, container);\n    });\n  };\n\n  AllowClear.prototype._handleClear = function (_, evt) {\n    // Ignore the event if it is disabled\n    if (this.options.get('disabled')) {\n      return;\n    }\n\n    var $clear = this.$selection.find('.select2-selection__clear');\n\n    // Ignore the event if nothing has been selected\n    if ($clear.length === 0) {\n      return;\n    }\n\n    evt.stopPropagation();\n\n    var data = Utils.GetData($clear[0], 'data');\n\n    var previousVal = this.$element.val();\n    this.$element.val(this.placeholder.id);\n\n    var unselectData = {\n      data: data\n    };\n    this.trigger('clear', unselectData);\n    if (unselectData.prevented) {\n      this.$element.val(previousVal);\n      return;\n    }\n\n    for (var d = 0; d < data.length; d++) {\n      unselectData = {\n        data: data[d]\n      };\n\n      // Trigger the `unselect` event, so people can prevent it from being\n      // cleared.\n      this.trigger('unselect', unselectData);\n\n      // If the event was prevented, don't clear it out.\n      if (unselectData.prevented) {\n        this.$element.val(previousVal);\n        return;\n      }\n    }\n\n    this.$element.trigger('change');\n\n    this.trigger('toggle', {});\n  };\n\n  AllowClear.prototype._handleKeyboardClear = function (_, evt, container) {\n    if (container.isOpen()) {\n      return;\n    }\n\n    if (evt.which == KEYS.DELETE || evt.which == KEYS.BACKSPACE) {\n      this._handleClear(evt);\n    }\n  };\n\n  AllowClear.prototype.update = function (decorated, data) {\n    decorated.call(this, data);\n\n    if (this.$selection.find('.select2-selection__placeholder').length > 0 ||\n        data.length === 0) {\n      return;\n    }\n\n    var removeAll = this.options.get('translations').get('removeAllItems');   \n\n    var $remove = $(\n      '<span class=\"select2-selection__clear\" title=\"' + removeAll() +'\">' +\n        '&times;' +\n      '</span>'\n    );\n    Utils.StoreData($remove[0], 'data', data);\n\n    this.$selection.find('.select2-selection__rendered').prepend($remove);\n  };\n\n  return AllowClear;\n});\n\nS2.define('select2/selection/search',[\n  'jquery',\n  '../utils',\n  '../keys'\n], function ($, Utils, KEYS) {\n  function Search (decorated, $element, options) {\n    decorated.call(this, $element, options);\n  }\n\n  Search.prototype.render = function (decorated) {\n    var $search = $(\n      '<li class=\"select2-search select2-search--inline\">' +\n        '<input class=\"select2-search__field\" type=\"search\" tabindex=\"-1\"' +\n        ' autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"none\"' +\n        ' spellcheck=\"false\" role=\"searchbox\" aria-autocomplete=\"list\" />' +\n      '</li>'\n    );\n\n    this.$searchContainer = $search;\n    this.$search = $search.find('input');\n\n    var $rendered = decorated.call(this);\n\n    this._transferTabIndex();\n\n    return $rendered;\n  };\n\n  Search.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    var resultsId = container.id + '-results';\n\n    decorated.call(this, container, $container);\n\n    container.on('open', function () {\n      self.$search.attr('aria-controls', resultsId);\n      self.$search.trigger('focus');\n    });\n\n    container.on('close', function () {\n      self.$search.val('');\n      self.$search.removeAttr('aria-controls');\n      self.$search.removeAttr('aria-activedescendant');\n      self.$search.trigger('focus');\n    });\n\n    container.on('enable', function () {\n      self.$search.prop('disabled', false);\n\n      self._transferTabIndex();\n    });\n\n    container.on('disable', function () {\n      self.$search.prop('disabled', true);\n    });\n\n    container.on('focus', function (evt) {\n      self.$search.trigger('focus');\n    });\n\n    container.on('results:focus', function (params) {\n      if (params.data._resultId) {\n        self.$search.attr('aria-activedescendant', params.data._resultId);\n      } else {\n        self.$search.removeAttr('aria-activedescendant');\n      }\n    });\n\n    this.$selection.on('focusin', '.select2-search--inline', function (evt) {\n      self.trigger('focus', evt);\n    });\n\n    this.$selection.on('focusout', '.select2-search--inline', function (evt) {\n      self._handleBlur(evt);\n    });\n\n    this.$selection.on('keydown', '.select2-search--inline', function (evt) {\n      evt.stopPropagation();\n\n      self.trigger('keypress', evt);\n\n      self._keyUpPrevented = evt.isDefaultPrevented();\n\n      var key = evt.which;\n\n      if (key === KEYS.BACKSPACE && self.$search.val() === '') {\n        var $previousChoice = self.$searchContainer\n          .prev('.select2-selection__choice');\n\n        if ($previousChoice.length > 0) {\n          var item = Utils.GetData($previousChoice[0], 'data');\n\n          self.searchRemoveChoice(item);\n\n          evt.preventDefault();\n        }\n      }\n    });\n\n    this.$selection.on('click', '.select2-search--inline', function (evt) {\n      if (self.$search.val()) {\n        evt.stopPropagation();\n      }\n    });\n\n    // Try to detect the IE version should the `documentMode` property that\n    // is stored on the document. This is only implemented in IE and is\n    // slightly cleaner than doing a user agent check.\n    // This property is not available in Edge, but Edge also doesn't have\n    // this bug.\n    var msie = document.documentMode;\n    var disableInputEvents = msie && msie <= 11;\n\n    // Workaround for browsers which do not support the `input` event\n    // This will prevent double-triggering of events for browsers which support\n    // both the `keyup` and `input` events.\n    this.$selection.on(\n      'input.searchcheck',\n      '.select2-search--inline',\n      function (evt) {\n        // IE will trigger the `input` event when a placeholder is used on a\n        // search box. To get around this issue, we are forced to ignore all\n        // `input` events in IE and keep using `keyup`.\n        if (disableInputEvents) {\n          self.$selection.off('input.search input.searchcheck');\n          return;\n        }\n\n        // Unbind the duplicated `keyup` event\n        self.$selection.off('keyup.search');\n      }\n    );\n\n    this.$selection.on(\n      'keyup.search input.search',\n      '.select2-search--inline',\n      function (evt) {\n        // IE will trigger the `input` event when a placeholder is used on a\n        // search box. To get around this issue, we are forced to ignore all\n        // `input` events in IE and keep using `keyup`.\n        if (disableInputEvents && evt.type === 'input') {\n          self.$selection.off('input.search input.searchcheck');\n          return;\n        }\n\n        var key = evt.which;\n\n        // We can freely ignore events from modifier keys\n        if (key == KEYS.SHIFT || key == KEYS.CTRL || key == KEYS.ALT) {\n          return;\n        }\n\n        // Tabbing will be handled during the `keydown` phase\n        if (key == KEYS.TAB) {\n          return;\n        }\n\n        self.handleSearch(evt);\n      }\n    );\n  };\n\n  /**\n   * This method will transfer the tabindex attribute from the rendered\n   * selection to the search box. This allows for the search box to be used as\n   * the primary focus instead of the selection container.\n   *\n   * @private\n   */\n  Search.prototype._transferTabIndex = function (decorated) {\n    this.$search.attr('tabindex', this.$selection.attr('tabindex'));\n    this.$selection.attr('tabindex', '-1');\n  };\n\n  Search.prototype.createPlaceholder = function (decorated, placeholder) {\n    this.$search.attr('placeholder', placeholder.text);\n  };\n\n  Search.prototype.update = function (decorated, data) {\n    var searchHadFocus = this.$search[0] == document.activeElement;\n\n    this.$search.attr('placeholder', '');\n\n    decorated.call(this, data);\n\n    this.$selection.find('.select2-selection__rendered')\n                   .append(this.$searchContainer);\n\n    this.resizeSearch();\n    if (searchHadFocus) {\n      this.$search.trigger('focus');\n    }\n  };\n\n  Search.prototype.handleSearch = function () {\n    this.resizeSearch();\n\n    if (!this._keyUpPrevented) {\n      var input = this.$search.val();\n\n      this.trigger('query', {\n        term: input\n      });\n    }\n\n    this._keyUpPrevented = false;\n  };\n\n  Search.prototype.searchRemoveChoice = function (decorated, item) {\n    this.trigger('unselect', {\n      data: item\n    });\n\n    this.$search.val(item.text);\n    this.handleSearch();\n  };\n\n  Search.prototype.resizeSearch = function () {\n    this.$search.css('width', '25px');\n\n    var width = '';\n\n    if (this.$search.attr('placeholder') !== '') {\n      width = this.$selection.find('.select2-selection__rendered').width();\n    } else {\n      var minimumWidth = this.$search.val().length + 1;\n\n      width = (minimumWidth * 0.75) + 'em';\n    }\n\n    this.$search.css('width', width);\n  };\n\n  return Search;\n});\n\nS2.define('select2/selection/eventRelay',[\n  'jquery'\n], function ($) {\n  function EventRelay () { }\n\n  EventRelay.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n    var relayEvents = [\n      'open', 'opening',\n      'close', 'closing',\n      'select', 'selecting',\n      'unselect', 'unselecting',\n      'clear', 'clearing'\n    ];\n\n    var preventableEvents = [\n      'opening', 'closing', 'selecting', 'unselecting', 'clearing'\n    ];\n\n    decorated.call(this, container, $container);\n\n    container.on('*', function (name, params) {\n      // Ignore events that should not be relayed\n      if ($.inArray(name, relayEvents) === -1) {\n        return;\n      }\n\n      // The parameters should always be an object\n      params = params || {};\n\n      // Generate the jQuery event for the Select2 event\n      var evt = $.Event('select2:' + name, {\n        params: params\n      });\n\n      self.$element.trigger(evt);\n\n      // Only handle preventable events if it was one\n      if ($.inArray(name, preventableEvents) === -1) {\n        return;\n      }\n\n      params.prevented = evt.isDefaultPrevented();\n    });\n  };\n\n  return EventRelay;\n});\n\nS2.define('select2/translation',[\n  'jquery',\n  'require'\n], function ($, require) {\n  function Translation (dict) {\n    this.dict = dict || {};\n  }\n\n  Translation.prototype.all = function () {\n    return this.dict;\n  };\n\n  Translation.prototype.get = function (key) {\n    return this.dict[key];\n  };\n\n  Translation.prototype.extend = function (translation) {\n    this.dict = $.extend({}, translation.all(), this.dict);\n  };\n\n  // Static functions\n\n  Translation._cache = {};\n\n  Translation.loadPath = function (path) {\n    if (!(path in Translation._cache)) {\n      var translations = require(path);\n\n      Translation._cache[path] = translations;\n    }\n\n    return new Translation(Translation._cache[path]);\n  };\n\n  return Translation;\n});\n\nS2.define('select2/diacritics',[\n\n], function () {\n  var diacritics = {\n    '\\u24B6': 'A',\n    '\\uFF21': 'A',\n    '\\u00C0': 'A',\n    '\\u00C1': 'A',\n    '\\u00C2': 'A',\n    '\\u1EA6': 'A',\n    '\\u1EA4': 'A',\n    '\\u1EAA': 'A',\n    '\\u1EA8': 'A',\n    '\\u00C3': 'A',\n    '\\u0100': 'A',\n    '\\u0102': 'A',\n    '\\u1EB0': 'A',\n    '\\u1EAE': 'A',\n    '\\u1EB4': 'A',\n    '\\u1EB2': 'A',\n    '\\u0226': 'A',\n    '\\u01E0': 'A',\n    '\\u00C4': 'A',\n    '\\u01DE': 'A',\n    '\\u1EA2': 'A',\n    '\\u00C5': 'A',\n    '\\u01FA': 'A',\n    '\\u01CD': 'A',\n    '\\u0200': 'A',\n    '\\u0202': 'A',\n    '\\u1EA0': 'A',\n    '\\u1EAC': 'A',\n    '\\u1EB6': 'A',\n    '\\u1E00': 'A',\n    '\\u0104': 'A',\n    '\\u023A': 'A',\n    '\\u2C6F': 'A',\n    '\\uA732': 'AA',\n    '\\u00C6': 'AE',\n    '\\u01FC': 'AE',\n    '\\u01E2': 'AE',\n    '\\uA734': 'AO',\n    '\\uA736': 'AU',\n    '\\uA738': 'AV',\n    '\\uA73A': 'AV',\n    '\\uA73C': 'AY',\n    '\\u24B7': 'B',\n    '\\uFF22': 'B',\n    '\\u1E02': 'B',\n    '\\u1E04': 'B',\n    '\\u1E06': 'B',\n    '\\u0243': 'B',\n    '\\u0182': 'B',\n    '\\u0181': 'B',\n    '\\u24B8': 'C',\n    '\\uFF23': 'C',\n    '\\u0106': 'C',\n    '\\u0108': 'C',\n    '\\u010A': 'C',\n    '\\u010C': 'C',\n    '\\u00C7': 'C',\n    '\\u1E08': 'C',\n    '\\u0187': 'C',\n    '\\u023B': 'C',\n    '\\uA73E': 'C',\n    '\\u24B9': 'D',\n    '\\uFF24': 'D',\n    '\\u1E0A': 'D',\n    '\\u010E': 'D',\n    '\\u1E0C': 'D',\n    '\\u1E10': 'D',\n    '\\u1E12': 'D',\n    '\\u1E0E': 'D',\n    '\\u0110': 'D',\n    '\\u018B': 'D',\n    '\\u018A': 'D',\n    '\\u0189': 'D',\n    '\\uA779': 'D',\n    '\\u01F1': 'DZ',\n    '\\u01C4': 'DZ',\n    '\\u01F2': 'Dz',\n    '\\u01C5': 'Dz',\n    '\\u24BA': 'E',\n    '\\uFF25': 'E',\n    '\\u00C8': 'E',\n    '\\u00C9': 'E',\n    '\\u00CA': 'E',\n    '\\u1EC0': 'E',\n    '\\u1EBE': 'E',\n    '\\u1EC4': 'E',\n    '\\u1EC2': 'E',\n    '\\u1EBC': 'E',\n    '\\u0112': 'E',\n    '\\u1E14': 'E',\n    '\\u1E16': 'E',\n    '\\u0114': 'E',\n    '\\u0116': 'E',\n    '\\u00CB': 'E',\n    '\\u1EBA': 'E',\n    '\\u011A': 'E',\n    '\\u0204': 'E',\n    '\\u0206': 'E',\n    '\\u1EB8': 'E',\n    '\\u1EC6': 'E',\n    '\\u0228': 'E',\n    '\\u1E1C': 'E',\n    '\\u0118': 'E',\n    '\\u1E18': 'E',\n    '\\u1E1A': 'E',\n    '\\u0190': 'E',\n    '\\u018E': 'E',\n    '\\u24BB': 'F',\n    '\\uFF26': 'F',\n    '\\u1E1E': 'F',\n    '\\u0191': 'F',\n    '\\uA77B': 'F',\n    '\\u24BC': 'G',\n    '\\uFF27': 'G',\n    '\\u01F4': 'G',\n    '\\u011C': 'G',\n    '\\u1E20': 'G',\n    '\\u011E': 'G',\n    '\\u0120': 'G',\n    '\\u01E6': 'G',\n    '\\u0122': 'G',\n    '\\u01E4': 'G',\n    '\\u0193': 'G',\n    '\\uA7A0': 'G',\n    '\\uA77D': 'G',\n    '\\uA77E': 'G',\n    '\\u24BD': 'H',\n    '\\uFF28': 'H',\n    '\\u0124': 'H',\n    '\\u1E22': 'H',\n    '\\u1E26': 'H',\n    '\\u021E': 'H',\n    '\\u1E24': 'H',\n    '\\u1E28': 'H',\n    '\\u1E2A': 'H',\n    '\\u0126': 'H',\n    '\\u2C67': 'H',\n    '\\u2C75': 'H',\n    '\\uA78D': 'H',\n    '\\u24BE': 'I',\n    '\\uFF29': 'I',\n    '\\u00CC': 'I',\n    '\\u00CD': 'I',\n    '\\u00CE': 'I',\n    '\\u0128': 'I',\n    '\\u012A': 'I',\n    '\\u012C': 'I',\n    '\\u0130': 'I',\n    '\\u00CF': 'I',\n    '\\u1E2E': 'I',\n    '\\u1EC8': 'I',\n    '\\u01CF': 'I',\n    '\\u0208': 'I',\n    '\\u020A': 'I',\n    '\\u1ECA': 'I',\n    '\\u012E': 'I',\n    '\\u1E2C': 'I',\n    '\\u0197': 'I',\n    '\\u24BF': 'J',\n    '\\uFF2A': 'J',\n    '\\u0134': 'J',\n    '\\u0248': 'J',\n    '\\u24C0': 'K',\n    '\\uFF2B': 'K',\n    '\\u1E30': 'K',\n    '\\u01E8': 'K',\n    '\\u1E32': 'K',\n    '\\u0136': 'K',\n    '\\u1E34': 'K',\n    '\\u0198': 'K',\n    '\\u2C69': 'K',\n    '\\uA740': 'K',\n    '\\uA742': 'K',\n    '\\uA744': 'K',\n    '\\uA7A2': 'K',\n    '\\u24C1': 'L',\n    '\\uFF2C': 'L',\n    '\\u013F': 'L',\n    '\\u0139': 'L',\n    '\\u013D': 'L',\n    '\\u1E36': 'L',\n    '\\u1E38': 'L',\n    '\\u013B': 'L',\n    '\\u1E3C': 'L',\n    '\\u1E3A': 'L',\n    '\\u0141': 'L',\n    '\\u023D': 'L',\n    '\\u2C62': 'L',\n    '\\u2C60': 'L',\n    '\\uA748': 'L',\n    '\\uA746': 'L',\n    '\\uA780': 'L',\n    '\\u01C7': 'LJ',\n    '\\u01C8': 'Lj',\n    '\\u24C2': 'M',\n    '\\uFF2D': 'M',\n    '\\u1E3E': 'M',\n    '\\u1E40': 'M',\n    '\\u1E42': 'M',\n    '\\u2C6E': 'M',\n    '\\u019C': 'M',\n    '\\u24C3': 'N',\n    '\\uFF2E': 'N',\n    '\\u01F8': 'N',\n    '\\u0143': 'N',\n    '\\u00D1': 'N',\n    '\\u1E44': 'N',\n    '\\u0147': 'N',\n    '\\u1E46': 'N',\n    '\\u0145': 'N',\n    '\\u1E4A': 'N',\n    '\\u1E48': 'N',\n    '\\u0220': 'N',\n    '\\u019D': 'N',\n    '\\uA790': 'N',\n    '\\uA7A4': 'N',\n    '\\u01CA': 'NJ',\n    '\\u01CB': 'Nj',\n    '\\u24C4': 'O',\n    '\\uFF2F': 'O',\n    '\\u00D2': 'O',\n    '\\u00D3': 'O',\n    '\\u00D4': 'O',\n    '\\u1ED2': 'O',\n    '\\u1ED0': 'O',\n    '\\u1ED6': 'O',\n    '\\u1ED4': 'O',\n    '\\u00D5': 'O',\n    '\\u1E4C': 'O',\n    '\\u022C': 'O',\n    '\\u1E4E': 'O',\n    '\\u014C': 'O',\n    '\\u1E50': 'O',\n    '\\u1E52': 'O',\n    '\\u014E': 'O',\n    '\\u022E': 'O',\n    '\\u0230': 'O',\n    '\\u00D6': 'O',\n    '\\u022A': 'O',\n    '\\u1ECE': 'O',\n    '\\u0150': 'O',\n    '\\u01D1': 'O',\n    '\\u020C': 'O',\n    '\\u020E': 'O',\n    '\\u01A0': 'O',\n    '\\u1EDC': 'O',\n    '\\u1EDA': 'O',\n    '\\u1EE0': 'O',\n    '\\u1EDE': 'O',\n    '\\u1EE2': 'O',\n    '\\u1ECC': 'O',\n    '\\u1ED8': 'O',\n    '\\u01EA': 'O',\n    '\\u01EC': 'O',\n    '\\u00D8': 'O',\n    '\\u01FE': 'O',\n    '\\u0186': 'O',\n    '\\u019F': 'O',\n    '\\uA74A': 'O',\n    '\\uA74C': 'O',\n    '\\u0152': 'OE',\n    '\\u01A2': 'OI',\n    '\\uA74E': 'OO',\n    '\\u0222': 'OU',\n    '\\u24C5': 'P',\n    '\\uFF30': 'P',\n    '\\u1E54': 'P',\n    '\\u1E56': 'P',\n    '\\u01A4': 'P',\n    '\\u2C63': 'P',\n    '\\uA750': 'P',\n    '\\uA752': 'P',\n    '\\uA754': 'P',\n    '\\u24C6': 'Q',\n    '\\uFF31': 'Q',\n    '\\uA756': 'Q',\n    '\\uA758': 'Q',\n    '\\u024A': 'Q',\n    '\\u24C7': 'R',\n    '\\uFF32': 'R',\n    '\\u0154': 'R',\n    '\\u1E58': 'R',\n    '\\u0158': 'R',\n    '\\u0210': 'R',\n    '\\u0212': 'R',\n    '\\u1E5A': 'R',\n    '\\u1E5C': 'R',\n    '\\u0156': 'R',\n    '\\u1E5E': 'R',\n    '\\u024C': 'R',\n    '\\u2C64': 'R',\n    '\\uA75A': 'R',\n    '\\uA7A6': 'R',\n    '\\uA782': 'R',\n    '\\u24C8': 'S',\n    '\\uFF33': 'S',\n    '\\u1E9E': 'S',\n    '\\u015A': 'S',\n    '\\u1E64': 'S',\n    '\\u015C': 'S',\n    '\\u1E60': 'S',\n    '\\u0160': 'S',\n    '\\u1E66': 'S',\n    '\\u1E62': 'S',\n    '\\u1E68': 'S',\n    '\\u0218': 'S',\n    '\\u015E': 'S',\n    '\\u2C7E': 'S',\n    '\\uA7A8': 'S',\n    '\\uA784': 'S',\n    '\\u24C9': 'T',\n    '\\uFF34': 'T',\n    '\\u1E6A': 'T',\n    '\\u0164': 'T',\n    '\\u1E6C': 'T',\n    '\\u021A': 'T',\n    '\\u0162': 'T',\n    '\\u1E70': 'T',\n    '\\u1E6E': 'T',\n    '\\u0166': 'T',\n    '\\u01AC': 'T',\n    '\\u01AE': 'T',\n    '\\u023E': 'T',\n    '\\uA786': 'T',\n    '\\uA728': 'TZ',\n    '\\u24CA': 'U',\n    '\\uFF35': 'U',\n    '\\u00D9': 'U',\n    '\\u00DA': 'U',\n    '\\u00DB': 'U',\n    '\\u0168': 'U',\n    '\\u1E78': 'U',\n    '\\u016A': 'U',\n    '\\u1E7A': 'U',\n    '\\u016C': 'U',\n    '\\u00DC': 'U',\n    '\\u01DB': 'U',\n    '\\u01D7': 'U',\n    '\\u01D5': 'U',\n    '\\u01D9': 'U',\n    '\\u1EE6': 'U',\n    '\\u016E': 'U',\n    '\\u0170': 'U',\n    '\\u01D3': 'U',\n    '\\u0214': 'U',\n    '\\u0216': 'U',\n    '\\u01AF': 'U',\n    '\\u1EEA': 'U',\n    '\\u1EE8': 'U',\n    '\\u1EEE': 'U',\n    '\\u1EEC': 'U',\n    '\\u1EF0': 'U',\n    '\\u1EE4': 'U',\n    '\\u1E72': 'U',\n    '\\u0172': 'U',\n    '\\u1E76': 'U',\n    '\\u1E74': 'U',\n    '\\u0244': 'U',\n    '\\u24CB': 'V',\n    '\\uFF36': 'V',\n    '\\u1E7C': 'V',\n    '\\u1E7E': 'V',\n    '\\u01B2': 'V',\n    '\\uA75E': 'V',\n    '\\u0245': 'V',\n    '\\uA760': 'VY',\n    '\\u24CC': 'W',\n    '\\uFF37': 'W',\n    '\\u1E80': 'W',\n    '\\u1E82': 'W',\n    '\\u0174': 'W',\n    '\\u1E86': 'W',\n    '\\u1E84': 'W',\n    '\\u1E88': 'W',\n    '\\u2C72': 'W',\n    '\\u24CD': 'X',\n    '\\uFF38': 'X',\n    '\\u1E8A': 'X',\n    '\\u1E8C': 'X',\n    '\\u24CE': 'Y',\n    '\\uFF39': 'Y',\n    '\\u1EF2': 'Y',\n    '\\u00DD': 'Y',\n    '\\u0176': 'Y',\n    '\\u1EF8': 'Y',\n    '\\u0232': 'Y',\n    '\\u1E8E': 'Y',\n    '\\u0178': 'Y',\n    '\\u1EF6': 'Y',\n    '\\u1EF4': 'Y',\n    '\\u01B3': 'Y',\n    '\\u024E': 'Y',\n    '\\u1EFE': 'Y',\n    '\\u24CF': 'Z',\n    '\\uFF3A': 'Z',\n    '\\u0179': 'Z',\n    '\\u1E90': 'Z',\n    '\\u017B': 'Z',\n    '\\u017D': 'Z',\n    '\\u1E92': 'Z',\n    '\\u1E94': 'Z',\n    '\\u01B5': 'Z',\n    '\\u0224': 'Z',\n    '\\u2C7F': 'Z',\n    '\\u2C6B': 'Z',\n    '\\uA762': 'Z',\n    '\\u24D0': 'a',\n    '\\uFF41': 'a',\n    '\\u1E9A': 'a',\n    '\\u00E0': 'a',\n    '\\u00E1': 'a',\n    '\\u00E2': 'a',\n    '\\u1EA7': 'a',\n    '\\u1EA5': 'a',\n    '\\u1EAB': 'a',\n    '\\u1EA9': 'a',\n    '\\u00E3': 'a',\n    '\\u0101': 'a',\n    '\\u0103': 'a',\n    '\\u1EB1': 'a',\n    '\\u1EAF': 'a',\n    '\\u1EB5': 'a',\n    '\\u1EB3': 'a',\n    '\\u0227': 'a',\n    '\\u01E1': 'a',\n    '\\u00E4': 'a',\n    '\\u01DF': 'a',\n    '\\u1EA3': 'a',\n    '\\u00E5': 'a',\n    '\\u01FB': 'a',\n    '\\u01CE': 'a',\n    '\\u0201': 'a',\n    '\\u0203': 'a',\n    '\\u1EA1': 'a',\n    '\\u1EAD': 'a',\n    '\\u1EB7': 'a',\n    '\\u1E01': 'a',\n    '\\u0105': 'a',\n    '\\u2C65': 'a',\n    '\\u0250': 'a',\n    '\\uA733': 'aa',\n    '\\u00E6': 'ae',\n    '\\u01FD': 'ae',\n    '\\u01E3': 'ae',\n    '\\uA735': 'ao',\n    '\\uA737': 'au',\n    '\\uA739': 'av',\n    '\\uA73B': 'av',\n    '\\uA73D': 'ay',\n    '\\u24D1': 'b',\n    '\\uFF42': 'b',\n    '\\u1E03': 'b',\n    '\\u1E05': 'b',\n    '\\u1E07': 'b',\n    '\\u0180': 'b',\n    '\\u0183': 'b',\n    '\\u0253': 'b',\n    '\\u24D2': 'c',\n    '\\uFF43': 'c',\n    '\\u0107': 'c',\n    '\\u0109': 'c',\n    '\\u010B': 'c',\n    '\\u010D': 'c',\n    '\\u00E7': 'c',\n    '\\u1E09': 'c',\n    '\\u0188': 'c',\n    '\\u023C': 'c',\n    '\\uA73F': 'c',\n    '\\u2184': 'c',\n    '\\u24D3': 'd',\n    '\\uFF44': 'd',\n    '\\u1E0B': 'd',\n    '\\u010F': 'd',\n    '\\u1E0D': 'd',\n    '\\u1E11': 'd',\n    '\\u1E13': 'd',\n    '\\u1E0F': 'd',\n    '\\u0111': 'd',\n    '\\u018C': 'd',\n    '\\u0256': 'd',\n    '\\u0257': 'd',\n    '\\uA77A': 'd',\n    '\\u01F3': 'dz',\n    '\\u01C6': 'dz',\n    '\\u24D4': 'e',\n    '\\uFF45': 'e',\n    '\\u00E8': 'e',\n    '\\u00E9': 'e',\n    '\\u00EA': 'e',\n    '\\u1EC1': 'e',\n    '\\u1EBF': 'e',\n    '\\u1EC5': 'e',\n    '\\u1EC3': 'e',\n    '\\u1EBD': 'e',\n    '\\u0113': 'e',\n    '\\u1E15': 'e',\n    '\\u1E17': 'e',\n    '\\u0115': 'e',\n    '\\u0117': 'e',\n    '\\u00EB': 'e',\n    '\\u1EBB': 'e',\n    '\\u011B': 'e',\n    '\\u0205': 'e',\n    '\\u0207': 'e',\n    '\\u1EB9': 'e',\n    '\\u1EC7': 'e',\n    '\\u0229': 'e',\n    '\\u1E1D': 'e',\n    '\\u0119': 'e',\n    '\\u1E19': 'e',\n    '\\u1E1B': 'e',\n    '\\u0247': 'e',\n    '\\u025B': 'e',\n    '\\u01DD': 'e',\n    '\\u24D5': 'f',\n    '\\uFF46': 'f',\n    '\\u1E1F': 'f',\n    '\\u0192': 'f',\n    '\\uA77C': 'f',\n    '\\u24D6': 'g',\n    '\\uFF47': 'g',\n    '\\u01F5': 'g',\n    '\\u011D': 'g',\n    '\\u1E21': 'g',\n    '\\u011F': 'g',\n    '\\u0121': 'g',\n    '\\u01E7': 'g',\n    '\\u0123': 'g',\n    '\\u01E5': 'g',\n    '\\u0260': 'g',\n    '\\uA7A1': 'g',\n    '\\u1D79': 'g',\n    '\\uA77F': 'g',\n    '\\u24D7': 'h',\n    '\\uFF48': 'h',\n    '\\u0125': 'h',\n    '\\u1E23': 'h',\n    '\\u1E27': 'h',\n    '\\u021F': 'h',\n    '\\u1E25': 'h',\n    '\\u1E29': 'h',\n    '\\u1E2B': 'h',\n    '\\u1E96': 'h',\n    '\\u0127': 'h',\n    '\\u2C68': 'h',\n    '\\u2C76': 'h',\n    '\\u0265': 'h',\n    '\\u0195': 'hv',\n    '\\u24D8': 'i',\n    '\\uFF49': 'i',\n    '\\u00EC': 'i',\n    '\\u00ED': 'i',\n    '\\u00EE': 'i',\n    '\\u0129': 'i',\n    '\\u012B': 'i',\n    '\\u012D': 'i',\n    '\\u00EF': 'i',\n    '\\u1E2F': 'i',\n    '\\u1EC9': 'i',\n    '\\u01D0': 'i',\n    '\\u0209': 'i',\n    '\\u020B': 'i',\n    '\\u1ECB': 'i',\n    '\\u012F': 'i',\n    '\\u1E2D': 'i',\n    '\\u0268': 'i',\n    '\\u0131': 'i',\n    '\\u24D9': 'j',\n    '\\uFF4A': 'j',\n    '\\u0135': 'j',\n    '\\u01F0': 'j',\n    '\\u0249': 'j',\n    '\\u24DA': 'k',\n    '\\uFF4B': 'k',\n    '\\u1E31': 'k',\n    '\\u01E9': 'k',\n    '\\u1E33': 'k',\n    '\\u0137': 'k',\n    '\\u1E35': 'k',\n    '\\u0199': 'k',\n    '\\u2C6A': 'k',\n    '\\uA741': 'k',\n    '\\uA743': 'k',\n    '\\uA745': 'k',\n    '\\uA7A3': 'k',\n    '\\u24DB': 'l',\n    '\\uFF4C': 'l',\n    '\\u0140': 'l',\n    '\\u013A': 'l',\n    '\\u013E': 'l',\n    '\\u1E37': 'l',\n    '\\u1E39': 'l',\n    '\\u013C': 'l',\n    '\\u1E3D': 'l',\n    '\\u1E3B': 'l',\n    '\\u017F': 'l',\n    '\\u0142': 'l',\n    '\\u019A': 'l',\n    '\\u026B': 'l',\n    '\\u2C61': 'l',\n    '\\uA749': 'l',\n    '\\uA781': 'l',\n    '\\uA747': 'l',\n    '\\u01C9': 'lj',\n    '\\u24DC': 'm',\n    '\\uFF4D': 'm',\n    '\\u1E3F': 'm',\n    '\\u1E41': 'm',\n    '\\u1E43': 'm',\n    '\\u0271': 'm',\n    '\\u026F': 'm',\n    '\\u24DD': 'n',\n    '\\uFF4E': 'n',\n    '\\u01F9': 'n',\n    '\\u0144': 'n',\n    '\\u00F1': 'n',\n    '\\u1E45': 'n',\n    '\\u0148': 'n',\n    '\\u1E47': 'n',\n    '\\u0146': 'n',\n    '\\u1E4B': 'n',\n    '\\u1E49': 'n',\n    '\\u019E': 'n',\n    '\\u0272': 'n',\n    '\\u0149': 'n',\n    '\\uA791': 'n',\n    '\\uA7A5': 'n',\n    '\\u01CC': 'nj',\n    '\\u24DE': 'o',\n    '\\uFF4F': 'o',\n    '\\u00F2': 'o',\n    '\\u00F3': 'o',\n    '\\u00F4': 'o',\n    '\\u1ED3': 'o',\n    '\\u1ED1': 'o',\n    '\\u1ED7': 'o',\n    '\\u1ED5': 'o',\n    '\\u00F5': 'o',\n    '\\u1E4D': 'o',\n    '\\u022D': 'o',\n    '\\u1E4F': 'o',\n    '\\u014D': 'o',\n    '\\u1E51': 'o',\n    '\\u1E53': 'o',\n    '\\u014F': 'o',\n    '\\u022F': 'o',\n    '\\u0231': 'o',\n    '\\u00F6': 'o',\n    '\\u022B': 'o',\n    '\\u1ECF': 'o',\n    '\\u0151': 'o',\n    '\\u01D2': 'o',\n    '\\u020D': 'o',\n    '\\u020F': 'o',\n    '\\u01A1': 'o',\n    '\\u1EDD': 'o',\n    '\\u1EDB': 'o',\n    '\\u1EE1': 'o',\n    '\\u1EDF': 'o',\n    '\\u1EE3': 'o',\n    '\\u1ECD': 'o',\n    '\\u1ED9': 'o',\n    '\\u01EB': 'o',\n    '\\u01ED': 'o',\n    '\\u00F8': 'o',\n    '\\u01FF': 'o',\n    '\\u0254': 'o',\n    '\\uA74B': 'o',\n    '\\uA74D': 'o',\n    '\\u0275': 'o',\n    '\\u0153': 'oe',\n    '\\u01A3': 'oi',\n    '\\u0223': 'ou',\n    '\\uA74F': 'oo',\n    '\\u24DF': 'p',\n    '\\uFF50': 'p',\n    '\\u1E55': 'p',\n    '\\u1E57': 'p',\n    '\\u01A5': 'p',\n    '\\u1D7D': 'p',\n    '\\uA751': 'p',\n    '\\uA753': 'p',\n    '\\uA755': 'p',\n    '\\u24E0': 'q',\n    '\\uFF51': 'q',\n    '\\u024B': 'q',\n    '\\uA757': 'q',\n    '\\uA759': 'q',\n    '\\u24E1': 'r',\n    '\\uFF52': 'r',\n    '\\u0155': 'r',\n    '\\u1E59': 'r',\n    '\\u0159': 'r',\n    '\\u0211': 'r',\n    '\\u0213': 'r',\n    '\\u1E5B': 'r',\n    '\\u1E5D': 'r',\n    '\\u0157': 'r',\n    '\\u1E5F': 'r',\n    '\\u024D': 'r',\n    '\\u027D': 'r',\n    '\\uA75B': 'r',\n    '\\uA7A7': 'r',\n    '\\uA783': 'r',\n    '\\u24E2': 's',\n    '\\uFF53': 's',\n    '\\u00DF': 's',\n    '\\u015B': 's',\n    '\\u1E65': 's',\n    '\\u015D': 's',\n    '\\u1E61': 's',\n    '\\u0161': 's',\n    '\\u1E67': 's',\n    '\\u1E63': 's',\n    '\\u1E69': 's',\n    '\\u0219': 's',\n    '\\u015F': 's',\n    '\\u023F': 's',\n    '\\uA7A9': 's',\n    '\\uA785': 's',\n    '\\u1E9B': 's',\n    '\\u24E3': 't',\n    '\\uFF54': 't',\n    '\\u1E6B': 't',\n    '\\u1E97': 't',\n    '\\u0165': 't',\n    '\\u1E6D': 't',\n    '\\u021B': 't',\n    '\\u0163': 't',\n    '\\u1E71': 't',\n    '\\u1E6F': 't',\n    '\\u0167': 't',\n    '\\u01AD': 't',\n    '\\u0288': 't',\n    '\\u2C66': 't',\n    '\\uA787': 't',\n    '\\uA729': 'tz',\n    '\\u24E4': 'u',\n    '\\uFF55': 'u',\n    '\\u00F9': 'u',\n    '\\u00FA': 'u',\n    '\\u00FB': 'u',\n    '\\u0169': 'u',\n    '\\u1E79': 'u',\n    '\\u016B': 'u',\n    '\\u1E7B': 'u',\n    '\\u016D': 'u',\n    '\\u00FC': 'u',\n    '\\u01DC': 'u',\n    '\\u01D8': 'u',\n    '\\u01D6': 'u',\n    '\\u01DA': 'u',\n    '\\u1EE7': 'u',\n    '\\u016F': 'u',\n    '\\u0171': 'u',\n    '\\u01D4': 'u',\n    '\\u0215': 'u',\n    '\\u0217': 'u',\n    '\\u01B0': 'u',\n    '\\u1EEB': 'u',\n    '\\u1EE9': 'u',\n    '\\u1EEF': 'u',\n    '\\u1EED': 'u',\n    '\\u1EF1': 'u',\n    '\\u1EE5': 'u',\n    '\\u1E73': 'u',\n    '\\u0173': 'u',\n    '\\u1E77': 'u',\n    '\\u1E75': 'u',\n    '\\u0289': 'u',\n    '\\u24E5': 'v',\n    '\\uFF56': 'v',\n    '\\u1E7D': 'v',\n    '\\u1E7F': 'v',\n    '\\u028B': 'v',\n    '\\uA75F': 'v',\n    '\\u028C': 'v',\n    '\\uA761': 'vy',\n    '\\u24E6': 'w',\n    '\\uFF57': 'w',\n    '\\u1E81': 'w',\n    '\\u1E83': 'w',\n    '\\u0175': 'w',\n    '\\u1E87': 'w',\n    '\\u1E85': 'w',\n    '\\u1E98': 'w',\n    '\\u1E89': 'w',\n    '\\u2C73': 'w',\n    '\\u24E7': 'x',\n    '\\uFF58': 'x',\n    '\\u1E8B': 'x',\n    '\\u1E8D': 'x',\n    '\\u24E8': 'y',\n    '\\uFF59': 'y',\n    '\\u1EF3': 'y',\n    '\\u00FD': 'y',\n    '\\u0177': 'y',\n    '\\u1EF9': 'y',\n    '\\u0233': 'y',\n    '\\u1E8F': 'y',\n    '\\u00FF': 'y',\n    '\\u1EF7': 'y',\n    '\\u1E99': 'y',\n    '\\u1EF5': 'y',\n    '\\u01B4': 'y',\n    '\\u024F': 'y',\n    '\\u1EFF': 'y',\n    '\\u24E9': 'z',\n    '\\uFF5A': 'z',\n    '\\u017A': 'z',\n    '\\u1E91': 'z',\n    '\\u017C': 'z',\n    '\\u017E': 'z',\n    '\\u1E93': 'z',\n    '\\u1E95': 'z',\n    '\\u01B6': 'z',\n    '\\u0225': 'z',\n    '\\u0240': 'z',\n    '\\u2C6C': 'z',\n    '\\uA763': 'z',\n    '\\u0386': '\\u0391',\n    '\\u0388': '\\u0395',\n    '\\u0389': '\\u0397',\n    '\\u038A': '\\u0399',\n    '\\u03AA': '\\u0399',\n    '\\u038C': '\\u039F',\n    '\\u038E': '\\u03A5',\n    '\\u03AB': '\\u03A5',\n    '\\u038F': '\\u03A9',\n    '\\u03AC': '\\u03B1',\n    '\\u03AD': '\\u03B5',\n    '\\u03AE': '\\u03B7',\n    '\\u03AF': '\\u03B9',\n    '\\u03CA': '\\u03B9',\n    '\\u0390': '\\u03B9',\n    '\\u03CC': '\\u03BF',\n    '\\u03CD': '\\u03C5',\n    '\\u03CB': '\\u03C5',\n    '\\u03B0': '\\u03C5',\n    '\\u03CE': '\\u03C9',\n    '\\u03C2': '\\u03C3',\n    '\\u2019': '\\''\n  };\n\n  return diacritics;\n});\n\nS2.define('select2/data/base',[\n  '../utils'\n], function (Utils) {\n  function BaseAdapter ($element, options) {\n    BaseAdapter.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(BaseAdapter, Utils.Observable);\n\n  BaseAdapter.prototype.current = function (callback) {\n    throw new Error('The `current` method must be defined in child classes.');\n  };\n\n  BaseAdapter.prototype.query = function (params, callback) {\n    throw new Error('The `query` method must be defined in child classes.');\n  };\n\n  BaseAdapter.prototype.bind = function (container, $container) {\n    // Can be implemented in subclasses\n  };\n\n  BaseAdapter.prototype.destroy = function () {\n    // Can be implemented in subclasses\n  };\n\n  BaseAdapter.prototype.generateResultId = function (container, data) {\n    var id = container.id + '-result-';\n\n    id += Utils.generateChars(4);\n\n    if (data.id != null) {\n      id += '-' + data.id.toString();\n    } else {\n      id += '-' + Utils.generateChars(4);\n    }\n    return id;\n  };\n\n  return BaseAdapter;\n});\n\nS2.define('select2/data/select',[\n  './base',\n  '../utils',\n  'jquery'\n], function (BaseAdapter, Utils, $) {\n  function SelectAdapter ($element, options) {\n    this.$element = $element;\n    this.options = options;\n\n    SelectAdapter.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(SelectAdapter, BaseAdapter);\n\n  SelectAdapter.prototype.current = function (callback) {\n    var data = [];\n    var self = this;\n\n    this.$element.find(':selected').each(function () {\n      var $option = $(this);\n\n      var option = self.item($option);\n\n      data.push(option);\n    });\n\n    callback(data);\n  };\n\n  SelectAdapter.prototype.select = function (data) {\n    var self = this;\n\n    data.selected = true;\n\n    // If data.element is a DOM node, use it instead\n    if ($(data.element).is('option')) {\n      data.element.selected = true;\n\n      this.$element.trigger('change');\n\n      return;\n    }\n\n    if (this.$element.prop('multiple')) {\n      this.current(function (currentData) {\n        var val = [];\n\n        data = [data];\n        data.push.apply(data, currentData);\n\n        for (var d = 0; d < data.length; d++) {\n          var id = data[d].id;\n\n          if ($.inArray(id, val) === -1) {\n            val.push(id);\n          }\n        }\n\n        self.$element.val(val);\n        self.$element.trigger('change');\n      });\n    } else {\n      var val = data.id;\n\n      this.$element.val(val);\n      this.$element.trigger('change');\n    }\n  };\n\n  SelectAdapter.prototype.unselect = function (data) {\n    var self = this;\n\n    if (!this.$element.prop('multiple')) {\n      return;\n    }\n\n    data.selected = false;\n\n    if ($(data.element).is('option')) {\n      data.element.selected = false;\n\n      this.$element.trigger('change');\n\n      return;\n    }\n\n    this.current(function (currentData) {\n      var val = [];\n\n      for (var d = 0; d < currentData.length; d++) {\n        var id = currentData[d].id;\n\n        if (id !== data.id && $.inArray(id, val) === -1) {\n          val.push(id);\n        }\n      }\n\n      self.$element.val(val);\n\n      self.$element.trigger('change');\n    });\n  };\n\n  SelectAdapter.prototype.bind = function (container, $container) {\n    var self = this;\n\n    this.container = container;\n\n    container.on('select', function (params) {\n      self.select(params.data);\n    });\n\n    container.on('unselect', function (params) {\n      self.unselect(params.data);\n    });\n  };\n\n  SelectAdapter.prototype.destroy = function () {\n    // Remove anything added to child elements\n    this.$element.find('*').each(function () {\n      // Remove any custom data set by Select2\n      Utils.RemoveData(this);\n    });\n  };\n\n  SelectAdapter.prototype.query = function (params, callback) {\n    var data = [];\n    var self = this;\n\n    var $options = this.$element.children();\n\n    $options.each(function () {\n      var $option = $(this);\n\n      if (!$option.is('option') && !$option.is('optgroup')) {\n        return;\n      }\n\n      var option = self.item($option);\n\n      var matches = self.matches(params, option);\n\n      if (matches !== null) {\n        data.push(matches);\n      }\n    });\n\n    callback({\n      results: data\n    });\n  };\n\n  SelectAdapter.prototype.addOptions = function ($options) {\n    Utils.appendMany(this.$element, $options);\n  };\n\n  SelectAdapter.prototype.option = function (data) {\n    var option;\n\n    if (data.children) {\n      option = document.createElement('optgroup');\n      option.label = data.text;\n    } else {\n      option = document.createElement('option');\n\n      if (option.textContent !== undefined) {\n        option.textContent = data.text;\n      } else {\n        option.innerText = data.text;\n      }\n    }\n\n    if (data.id !== undefined) {\n      option.value = data.id;\n    }\n\n    if (data.disabled) {\n      option.disabled = true;\n    }\n\n    if (data.selected) {\n      option.selected = true;\n    }\n\n    if (data.title) {\n      option.title = data.title;\n    }\n\n    var $option = $(option);\n\n    var normalizedData = this._normalizeItem(data);\n    normalizedData.element = option;\n\n    // Override the option's data with the combined data\n    Utils.StoreData(option, 'data', normalizedData);\n\n    return $option;\n  };\n\n  SelectAdapter.prototype.item = function ($option) {\n    var data = {};\n\n    data = Utils.GetData($option[0], 'data');\n\n    if (data != null) {\n      return data;\n    }\n\n    if ($option.is('option')) {\n      data = {\n        id: $option.val(),\n        text: $option.text(),\n        disabled: $option.prop('disabled'),\n        selected: $option.prop('selected'),\n        title: $option.prop('title')\n      };\n    } else if ($option.is('optgroup')) {\n      data = {\n        text: $option.prop('label'),\n        children: [],\n        title: $option.prop('title')\n      };\n\n      var $children = $option.children('option');\n      var children = [];\n\n      for (var c = 0; c < $children.length; c++) {\n        var $child = $($children[c]);\n\n        var child = this.item($child);\n\n        children.push(child);\n      }\n\n      data.children = children;\n    }\n\n    data = this._normalizeItem(data);\n    data.element = $option[0];\n\n    Utils.StoreData($option[0], 'data', data);\n\n    return data;\n  };\n\n  SelectAdapter.prototype._normalizeItem = function (item) {\n    if (item !== Object(item)) {\n      item = {\n        id: item,\n        text: item\n      };\n    }\n\n    item = $.extend({}, {\n      text: ''\n    }, item);\n\n    var defaults = {\n      selected: false,\n      disabled: false\n    };\n\n    if (item.id != null) {\n      item.id = item.id.toString();\n    }\n\n    if (item.text != null) {\n      item.text = item.text.toString();\n    }\n\n    if (item._resultId == null && item.id && this.container != null) {\n      item._resultId = this.generateResultId(this.container, item);\n    }\n\n    return $.extend({}, defaults, item);\n  };\n\n  SelectAdapter.prototype.matches = function (params, data) {\n    var matcher = this.options.get('matcher');\n\n    return matcher(params, data);\n  };\n\n  return SelectAdapter;\n});\n\nS2.define('select2/data/array',[\n  './select',\n  '../utils',\n  'jquery'\n], function (SelectAdapter, Utils, $) {\n  function ArrayAdapter ($element, options) {\n    this._dataToConvert = options.get('data') || [];\n\n    ArrayAdapter.__super__.constructor.call(this, $element, options);\n  }\n\n  Utils.Extend(ArrayAdapter, SelectAdapter);\n\n  ArrayAdapter.prototype.bind = function (container, $container) {\n    ArrayAdapter.__super__.bind.call(this, container, $container);\n\n    this.addOptions(this.convertToOptions(this._dataToConvert));\n  };\n\n  ArrayAdapter.prototype.select = function (data) {\n    var $option = this.$element.find('option').filter(function (i, elm) {\n      return elm.value == data.id.toString();\n    });\n\n    if ($option.length === 0) {\n      $option = this.option(data);\n\n      this.addOptions($option);\n    }\n\n    ArrayAdapter.__super__.select.call(this, data);\n  };\n\n  ArrayAdapter.prototype.convertToOptions = function (data) {\n    var self = this;\n\n    var $existing = this.$element.find('option');\n    var existingIds = $existing.map(function () {\n      return self.item($(this)).id;\n    }).get();\n\n    var $options = [];\n\n    // Filter out all items except for the one passed in the argument\n    function onlyItem (item) {\n      return function () {\n        return $(this).val() == item.id;\n      };\n    }\n\n    for (var d = 0; d < data.length; d++) {\n      var item = this._normalizeItem(data[d]);\n\n      // Skip items which were pre-loaded, only merge the data\n      if ($.inArray(item.id, existingIds) >= 0) {\n        var $existingOption = $existing.filter(onlyItem(item));\n\n        var existingData = this.item($existingOption);\n        var newData = $.extend(true, {}, item, existingData);\n\n        var $newOption = this.option(newData);\n\n        $existingOption.replaceWith($newOption);\n\n        continue;\n      }\n\n      var $option = this.option(item);\n\n      if (item.children) {\n        var $children = this.convertToOptions(item.children);\n\n        Utils.appendMany($option, $children);\n      }\n\n      $options.push($option);\n    }\n\n    return $options;\n  };\n\n  return ArrayAdapter;\n});\n\nS2.define('select2/data/ajax',[\n  './array',\n  '../utils',\n  'jquery'\n], function (ArrayAdapter, Utils, $) {\n  function AjaxAdapter ($element, options) {\n    this.ajaxOptions = this._applyDefaults(options.get('ajax'));\n\n    if (this.ajaxOptions.processResults != null) {\n      this.processResults = this.ajaxOptions.processResults;\n    }\n\n    AjaxAdapter.__super__.constructor.call(this, $element, options);\n  }\n\n  Utils.Extend(AjaxAdapter, ArrayAdapter);\n\n  AjaxAdapter.prototype._applyDefaults = function (options) {\n    var defaults = {\n      data: function (params) {\n        return $.extend({}, params, {\n          q: params.term\n        });\n      },\n      transport: function (params, success, failure) {\n        var $request = $.ajax(params);\n\n        $request.then(success);\n        $request.fail(failure);\n\n        return $request;\n      }\n    };\n\n    return $.extend({}, defaults, options, true);\n  };\n\n  AjaxAdapter.prototype.processResults = function (results) {\n    return results;\n  };\n\n  AjaxAdapter.prototype.query = function (params, callback) {\n    var matches = [];\n    var self = this;\n\n    if (this._request != null) {\n      // JSONP requests cannot always be aborted\n      if ($.isFunction(this._request.abort)) {\n        this._request.abort();\n      }\n\n      this._request = null;\n    }\n\n    var options = $.extend({\n      type: 'GET'\n    }, this.ajaxOptions);\n\n    if (typeof options.url === 'function') {\n      options.url = options.url.call(this.$element, params);\n    }\n\n    if (typeof options.data === 'function') {\n      options.data = options.data.call(this.$element, params);\n    }\n\n    function request () {\n      var $request = options.transport(options, function (data) {\n        var results = self.processResults(data, params);\n\n        if (self.options.get('debug') && window.console && console.error) {\n          // Check to make sure that the response included a `results` key.\n          if (!results || !results.results || !$.isArray(results.results)) {\n            console.error(\n              'Select2: The AJAX results did not return an array in the ' +\n              '`results` key of the response.'\n            );\n          }\n        }\n\n        callback(results);\n      }, function () {\n        // Attempt to detect if a request was aborted\n        // Only works if the transport exposes a status property\n        if ('status' in $request &&\n            ($request.status === 0 || $request.status === '0')) {\n          return;\n        }\n\n        self.trigger('results:message', {\n          message: 'errorLoading'\n        });\n      });\n\n      self._request = $request;\n    }\n\n    if (this.ajaxOptions.delay && params.term != null) {\n      if (this._queryTimeout) {\n        window.clearTimeout(this._queryTimeout);\n      }\n\n      this._queryTimeout = window.setTimeout(request, this.ajaxOptions.delay);\n    } else {\n      request();\n    }\n  };\n\n  return AjaxAdapter;\n});\n\nS2.define('select2/data/tags',[\n  'jquery'\n], function ($) {\n  function Tags (decorated, $element, options) {\n    var tags = options.get('tags');\n\n    var createTag = options.get('createTag');\n\n    if (createTag !== undefined) {\n      this.createTag = createTag;\n    }\n\n    var insertTag = options.get('insertTag');\n\n    if (insertTag !== undefined) {\n        this.insertTag = insertTag;\n    }\n\n    decorated.call(this, $element, options);\n\n    if ($.isArray(tags)) {\n      for (var t = 0; t < tags.length; t++) {\n        var tag = tags[t];\n        var item = this._normalizeItem(tag);\n\n        var $option = this.option(item);\n\n        this.$element.append($option);\n      }\n    }\n  }\n\n  Tags.prototype.query = function (decorated, params, callback) {\n    var self = this;\n\n    this._removeOldTags();\n\n    if (params.term == null || params.page != null) {\n      decorated.call(this, params, callback);\n      return;\n    }\n\n    function wrapper (obj, child) {\n      var data = obj.results;\n\n      for (var i = 0; i < data.length; i++) {\n        var option = data[i];\n\n        var checkChildren = (\n          option.children != null &&\n          !wrapper({\n            results: option.children\n          }, true)\n        );\n\n        var optionText = (option.text || '').toUpperCase();\n        var paramsTerm = (params.term || '').toUpperCase();\n\n        var checkText = optionText === paramsTerm;\n\n        if (checkText || checkChildren) {\n          if (child) {\n            return false;\n          }\n\n          obj.data = data;\n          callback(obj);\n\n          return;\n        }\n      }\n\n      if (child) {\n        return true;\n      }\n\n      var tag = self.createTag(params);\n\n      if (tag != null) {\n        var $option = self.option(tag);\n        $option.attr('data-select2-tag', true);\n\n        self.addOptions([$option]);\n\n        self.insertTag(data, tag);\n      }\n\n      obj.results = data;\n\n      callback(obj);\n    }\n\n    decorated.call(this, params, wrapper);\n  };\n\n  Tags.prototype.createTag = function (decorated, params) {\n    var term = $.trim(params.term);\n\n    if (term === '') {\n      return null;\n    }\n\n    return {\n      id: term,\n      text: term\n    };\n  };\n\n  Tags.prototype.insertTag = function (_, data, tag) {\n    data.unshift(tag);\n  };\n\n  Tags.prototype._removeOldTags = function (_) {\n    var $options = this.$element.find('option[data-select2-tag]');\n\n    $options.each(function () {\n      if (this.selected) {\n        return;\n      }\n\n      $(this).remove();\n    });\n  };\n\n  return Tags;\n});\n\nS2.define('select2/data/tokenizer',[\n  'jquery'\n], function ($) {\n  function Tokenizer (decorated, $element, options) {\n    var tokenizer = options.get('tokenizer');\n\n    if (tokenizer !== undefined) {\n      this.tokenizer = tokenizer;\n    }\n\n    decorated.call(this, $element, options);\n  }\n\n  Tokenizer.prototype.bind = function (decorated, container, $container) {\n    decorated.call(this, container, $container);\n\n    this.$search =  container.dropdown.$search || container.selection.$search ||\n      $container.find('.select2-search__field');\n  };\n\n  Tokenizer.prototype.query = function (decorated, params, callback) {\n    var self = this;\n\n    function createAndSelect (data) {\n      // Normalize the data object so we can use it for checks\n      var item = self._normalizeItem(data);\n\n      // Check if the data object already exists as a tag\n      // Select it if it doesn't\n      var $existingOptions = self.$element.find('option').filter(function () {\n        return $(this).val() === item.id;\n      });\n\n      // If an existing option wasn't found for it, create the option\n      if (!$existingOptions.length) {\n        var $option = self.option(item);\n        $option.attr('data-select2-tag', true);\n\n        self._removeOldTags();\n        self.addOptions([$option]);\n      }\n\n      // Select the item, now that we know there is an option for it\n      select(item);\n    }\n\n    function select (data) {\n      self.trigger('select', {\n        data: data\n      });\n    }\n\n    params.term = params.term || '';\n\n    var tokenData = this.tokenizer(params, this.options, createAndSelect);\n\n    if (tokenData.term !== params.term) {\n      // Replace the search term if we have the search box\n      if (this.$search.length) {\n        this.$search.val(tokenData.term);\n        this.$search.trigger('focus');\n      }\n\n      params.term = tokenData.term;\n    }\n\n    decorated.call(this, params, callback);\n  };\n\n  Tokenizer.prototype.tokenizer = function (_, params, options, callback) {\n    var separators = options.get('tokenSeparators') || [];\n    var term = params.term;\n    var i = 0;\n\n    var createTag = this.createTag || function (params) {\n      return {\n        id: params.term,\n        text: params.term\n      };\n    };\n\n    while (i < term.length) {\n      var termChar = term[i];\n\n      if ($.inArray(termChar, separators) === -1) {\n        i++;\n\n        continue;\n      }\n\n      var part = term.substr(0, i);\n      var partParams = $.extend({}, params, {\n        term: part\n      });\n\n      var data = createTag(partParams);\n\n      if (data == null) {\n        i++;\n        continue;\n      }\n\n      callback(data);\n\n      // Reset the term to not include the tokenized portion\n      term = term.substr(i + 1) || '';\n      i = 0;\n    }\n\n    return {\n      term: term\n    };\n  };\n\n  return Tokenizer;\n});\n\nS2.define('select2/data/minimumInputLength',[\n\n], function () {\n  function MinimumInputLength (decorated, $e, options) {\n    this.minimumInputLength = options.get('minimumInputLength');\n\n    decorated.call(this, $e, options);\n  }\n\n  MinimumInputLength.prototype.query = function (decorated, params, callback) {\n    params.term = params.term || '';\n\n    if (params.term.length < this.minimumInputLength) {\n      this.trigger('results:message', {\n        message: 'inputTooShort',\n        args: {\n          minimum: this.minimumInputLength,\n          input: params.term,\n          params: params\n        }\n      });\n\n      return;\n    }\n\n    decorated.call(this, params, callback);\n  };\n\n  return MinimumInputLength;\n});\n\nS2.define('select2/data/maximumInputLength',[\n\n], function () {\n  function MaximumInputLength (decorated, $e, options) {\n    this.maximumInputLength = options.get('maximumInputLength');\n\n    decorated.call(this, $e, options);\n  }\n\n  MaximumInputLength.prototype.query = function (decorated, params, callback) {\n    params.term = params.term || '';\n\n    if (this.maximumInputLength > 0 &&\n        params.term.length > this.maximumInputLength) {\n      this.trigger('results:message', {\n        message: 'inputTooLong',\n        args: {\n          maximum: this.maximumInputLength,\n          input: params.term,\n          params: params\n        }\n      });\n\n      return;\n    }\n\n    decorated.call(this, params, callback);\n  };\n\n  return MaximumInputLength;\n});\n\nS2.define('select2/data/maximumSelectionLength',[\n\n], function (){\n  function MaximumSelectionLength (decorated, $e, options) {\n    this.maximumSelectionLength = options.get('maximumSelectionLength');\n\n    decorated.call(this, $e, options);\n  }\n\n  MaximumSelectionLength.prototype.bind =\n    function (decorated, container, $container) {\n      var self = this;\n\n      decorated.call(this, container, $container);\n\n      container.on('select', function () {\n        self._checkIfMaximumSelected();\n      });\n  };\n\n  MaximumSelectionLength.prototype.query =\n    function (decorated, params, callback) {\n      var self = this;\n\n      this._checkIfMaximumSelected(function () {\n        decorated.call(self, params, callback);\n      });\n  };\n\n  MaximumSelectionLength.prototype._checkIfMaximumSelected =\n    function (_, successCallback) {\n      var self = this;\n\n      this.current(function (currentData) {\n        var count = currentData != null ? currentData.length : 0;\n        if (self.maximumSelectionLength > 0 &&\n          count >= self.maximumSelectionLength) {\n          self.trigger('results:message', {\n            message: 'maximumSelected',\n            args: {\n              maximum: self.maximumSelectionLength\n            }\n          });\n          return;\n        }\n\n        if (successCallback) {\n          successCallback();\n        }\n      });\n  };\n\n  return MaximumSelectionLength;\n});\n\nS2.define('select2/dropdown',[\n  'jquery',\n  './utils'\n], function ($, Utils) {\n  function Dropdown ($element, options) {\n    this.$element = $element;\n    this.options = options;\n\n    Dropdown.__super__.constructor.call(this);\n  }\n\n  Utils.Extend(Dropdown, Utils.Observable);\n\n  Dropdown.prototype.render = function () {\n    var $dropdown = $(\n      '<span class=\"select2-dropdown\">' +\n        '<span class=\"select2-results\"></span>' +\n      '</span>'\n    );\n\n    $dropdown.attr('dir', this.options.get('dir'));\n\n    this.$dropdown = $dropdown;\n\n    return $dropdown;\n  };\n\n  Dropdown.prototype.bind = function () {\n    // Should be implemented in subclasses\n  };\n\n  Dropdown.prototype.position = function ($dropdown, $container) {\n    // Should be implemented in subclasses\n  };\n\n  Dropdown.prototype.destroy = function () {\n    // Remove the dropdown from the DOM\n    this.$dropdown.remove();\n  };\n\n  return Dropdown;\n});\n\nS2.define('select2/dropdown/search',[\n  'jquery',\n  '../utils'\n], function ($, Utils) {\n  function Search () { }\n\n  Search.prototype.render = function (decorated) {\n    var $rendered = decorated.call(this);\n\n    var $search = $(\n      '<span class=\"select2-search select2-search--dropdown\">' +\n        '<input class=\"select2-search__field\" type=\"search\" tabindex=\"-1\"' +\n        ' autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"none\"' +\n        ' spellcheck=\"false\" role=\"searchbox\" aria-autocomplete=\"list\" />' +\n      '</span>'\n    );\n\n    this.$searchContainer = $search;\n    this.$search = $search.find('input');\n\n    $rendered.prepend($search);\n\n    return $rendered;\n  };\n\n  Search.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    var resultsId = container.id + '-results';\n\n    decorated.call(this, container, $container);\n\n    this.$search.on('keydown', function (evt) {\n      self.trigger('keypress', evt);\n\n      self._keyUpPrevented = evt.isDefaultPrevented();\n    });\n\n    // Workaround for browsers which do not support the `input` event\n    // This will prevent double-triggering of events for browsers which support\n    // both the `keyup` and `input` events.\n    this.$search.on('input', function (evt) {\n      // Unbind the duplicated `keyup` event\n      $(this).off('keyup');\n    });\n\n    this.$search.on('keyup input', function (evt) {\n      self.handleSearch(evt);\n    });\n\n    container.on('open', function () {\n      self.$search.attr('tabindex', 0);\n      self.$search.attr('aria-controls', resultsId);\n\n      self.$search.trigger('focus');\n\n      window.setTimeout(function () {\n        self.$search.trigger('focus');\n      }, 0);\n    });\n\n    container.on('close', function () {\n      self.$search.attr('tabindex', -1);\n      self.$search.removeAttr('aria-controls');\n      self.$search.removeAttr('aria-activedescendant');\n\n      self.$search.val('');\n      self.$search.trigger('blur');\n    });\n\n    container.on('focus', function () {\n      if (!container.isOpen()) {\n        self.$search.trigger('focus');\n      }\n    });\n\n    container.on('results:all', function (params) {\n      if (params.query.term == null || params.query.term === '') {\n        var showSearch = self.showSearch(params);\n\n        if (showSearch) {\n          self.$searchContainer.removeClass('select2-search--hide');\n        } else {\n          self.$searchContainer.addClass('select2-search--hide');\n        }\n      }\n    });\n\n    container.on('results:focus', function (params) {\n      if (params.data._resultId) {\n        self.$search.attr('aria-activedescendant', params.data._resultId);\n      } else {\n        self.$search.removeAttr('aria-activedescendant');\n      }\n    });\n  };\n\n  Search.prototype.handleSearch = function (evt) {\n    if (!this._keyUpPrevented) {\n      var input = this.$search.val();\n\n      this.trigger('query', {\n        term: input\n      });\n    }\n\n    this._keyUpPrevented = false;\n  };\n\n  Search.prototype.showSearch = function (_, params) {\n    return true;\n  };\n\n  return Search;\n});\n\nS2.define('select2/dropdown/hidePlaceholder',[\n\n], function () {\n  function HidePlaceholder (decorated, $element, options, dataAdapter) {\n    this.placeholder = this.normalizePlaceholder(options.get('placeholder'));\n\n    decorated.call(this, $element, options, dataAdapter);\n  }\n\n  HidePlaceholder.prototype.append = function (decorated, data) {\n    data.results = this.removePlaceholder(data.results);\n\n    decorated.call(this, data);\n  };\n\n  HidePlaceholder.prototype.normalizePlaceholder = function (_, placeholder) {\n    if (typeof placeholder === 'string') {\n      placeholder = {\n        id: '',\n        text: placeholder\n      };\n    }\n\n    return placeholder;\n  };\n\n  HidePlaceholder.prototype.removePlaceholder = function (_, data) {\n    var modifiedData = data.slice(0);\n\n    for (var d = data.length - 1; d >= 0; d--) {\n      var item = data[d];\n\n      if (this.placeholder.id === item.id) {\n        modifiedData.splice(d, 1);\n      }\n    }\n\n    return modifiedData;\n  };\n\n  return HidePlaceholder;\n});\n\nS2.define('select2/dropdown/infiniteScroll',[\n  'jquery'\n], function ($) {\n  function InfiniteScroll (decorated, $element, options, dataAdapter) {\n    this.lastParams = {};\n\n    decorated.call(this, $element, options, dataAdapter);\n\n    this.$loadingMore = this.createLoadingMore();\n    this.loading = false;\n  }\n\n  InfiniteScroll.prototype.append = function (decorated, data) {\n    this.$loadingMore.remove();\n    this.loading = false;\n\n    decorated.call(this, data);\n\n    if (this.showLoadingMore(data)) {\n      this.$results.append(this.$loadingMore);\n      this.loadMoreIfNeeded();\n    }\n  };\n\n  InfiniteScroll.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    container.on('query', function (params) {\n      self.lastParams = params;\n      self.loading = true;\n    });\n\n    container.on('query:append', function (params) {\n      self.lastParams = params;\n      self.loading = true;\n    });\n\n    this.$results.on('scroll', this.loadMoreIfNeeded.bind(this));\n  };\n\n  InfiniteScroll.prototype.loadMoreIfNeeded = function () {\n    var isLoadMoreVisible = $.contains(\n      document.documentElement,\n      this.$loadingMore[0]\n    );\n\n    if (this.loading || !isLoadMoreVisible) {\n      return;\n    }\n\n    var currentOffset = this.$results.offset().top +\n      this.$results.outerHeight(false);\n    var loadingMoreOffset = this.$loadingMore.offset().top +\n      this.$loadingMore.outerHeight(false);\n\n    if (currentOffset + 50 >= loadingMoreOffset) {\n      this.loadMore();\n    }\n  };\n\n  InfiniteScroll.prototype.loadMore = function () {\n    this.loading = true;\n\n    var params = $.extend({}, {page: 1}, this.lastParams);\n\n    params.page++;\n\n    this.trigger('query:append', params);\n  };\n\n  InfiniteScroll.prototype.showLoadingMore = function (_, data) {\n    return data.pagination && data.pagination.more;\n  };\n\n  InfiniteScroll.prototype.createLoadingMore = function () {\n    var $option = $(\n      '<li ' +\n      'class=\"select2-results__option select2-results__option--load-more\"' +\n      'role=\"option\" aria-disabled=\"true\"></li>'\n    );\n\n    var message = this.options.get('translations').get('loadingMore');\n\n    $option.html(message(this.lastParams));\n\n    return $option;\n  };\n\n  return InfiniteScroll;\n});\n\nS2.define('select2/dropdown/attachBody',[\n  'jquery',\n  '../utils'\n], function ($, Utils) {\n  function AttachBody (decorated, $element, options) {\n    this.$dropdownParent = $(options.get('dropdownParent') || document.body);\n\n    decorated.call(this, $element, options);\n  }\n\n  AttachBody.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    container.on('open', function () {\n      self._showDropdown();\n      self._attachPositioningHandler(container);\n\n      // Must bind after the results handlers to ensure correct sizing\n      self._bindContainerResultHandlers(container);\n    });\n\n    container.on('close', function () {\n      self._hideDropdown();\n      self._detachPositioningHandler(container);\n    });\n\n    this.$dropdownContainer.on('mousedown', function (evt) {\n      evt.stopPropagation();\n    });\n  };\n\n  AttachBody.prototype.destroy = function (decorated) {\n    decorated.call(this);\n\n    this.$dropdownContainer.remove();\n  };\n\n  AttachBody.prototype.position = function (decorated, $dropdown, $container) {\n    // Clone all of the container classes\n    $dropdown.attr('class', $container.attr('class'));\n\n    $dropdown.removeClass('select2');\n    $dropdown.addClass('select2-container--open');\n\n    $dropdown.css({\n      position: 'absolute',\n      top: -999999\n    });\n\n    this.$container = $container;\n  };\n\n  AttachBody.prototype.render = function (decorated) {\n    var $container = $('<span></span>');\n\n    var $dropdown = decorated.call(this);\n    $container.append($dropdown);\n\n    this.$dropdownContainer = $container;\n\n    return $container;\n  };\n\n  AttachBody.prototype._hideDropdown = function (decorated) {\n    this.$dropdownContainer.detach();\n  };\n\n  AttachBody.prototype._bindContainerResultHandlers =\n      function (decorated, container) {\n\n    // These should only be bound once\n    if (this._containerResultsHandlersBound) {\n      return;\n    }\n\n    var self = this;\n\n    container.on('results:all', function () {\n      self._positionDropdown();\n      self._resizeDropdown();\n    });\n\n    container.on('results:append', function () {\n      self._positionDropdown();\n      self._resizeDropdown();\n    });\n\n    container.on('results:message', function () {\n      self._positionDropdown();\n      self._resizeDropdown();\n    });\n\n    container.on('select', function () {\n      self._positionDropdown();\n      self._resizeDropdown();\n    });\n\n    container.on('unselect', function () {\n      self._positionDropdown();\n      self._resizeDropdown();\n    });\n\n    this._containerResultsHandlersBound = true;\n  };\n\n  AttachBody.prototype._attachPositioningHandler =\n      function (decorated, container) {\n    var self = this;\n\n    var scrollEvent = 'scroll.select2.' + container.id;\n    var resizeEvent = 'resize.select2.' + container.id;\n    var orientationEvent = 'orientationchange.select2.' + container.id;\n\n    var $watchers = this.$container.parents().filter(Utils.hasScroll);\n    $watchers.each(function () {\n      Utils.StoreData(this, 'select2-scroll-position', {\n        x: $(this).scrollLeft(),\n        y: $(this).scrollTop()\n      });\n    });\n\n    $watchers.on(scrollEvent, function (ev) {\n      var position = Utils.GetData(this, 'select2-scroll-position');\n      $(this).scrollTop(position.y);\n    });\n\n    $(window).on(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent,\n      function (e) {\n      self._positionDropdown();\n      self._resizeDropdown();\n    });\n  };\n\n  AttachBody.prototype._detachPositioningHandler =\n      function (decorated, container) {\n    var scrollEvent = 'scroll.select2.' + container.id;\n    var resizeEvent = 'resize.select2.' + container.id;\n    var orientationEvent = 'orientationchange.select2.' + container.id;\n\n    var $watchers = this.$container.parents().filter(Utils.hasScroll);\n    $watchers.off(scrollEvent);\n\n    $(window).off(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent);\n  };\n\n  AttachBody.prototype._positionDropdown = function () {\n    var $window = $(window);\n\n    var isCurrentlyAbove = this.$dropdown.hasClass('select2-dropdown--above');\n    var isCurrentlyBelow = this.$dropdown.hasClass('select2-dropdown--below');\n\n    var newDirection = null;\n\n    var offset = this.$container.offset();\n\n    offset.bottom = offset.top + this.$container.outerHeight(false);\n\n    var container = {\n      height: this.$container.outerHeight(false)\n    };\n\n    container.top = offset.top;\n    container.bottom = offset.top + container.height;\n\n    var dropdown = {\n      height: this.$dropdown.outerHeight(false)\n    };\n\n    var viewport = {\n      top: $window.scrollTop(),\n      bottom: $window.scrollTop() + $window.height()\n    };\n\n    var enoughRoomAbove = viewport.top < (offset.top - dropdown.height);\n    var enoughRoomBelow = viewport.bottom > (offset.bottom + dropdown.height);\n\n    var css = {\n      left: offset.left,\n      top: container.bottom\n    };\n\n    // Determine what the parent element is to use for calculating the offset\n    var $offsetParent = this.$dropdownParent;\n\n    // For statically positioned elements, we need to get the element\n    // that is determining the offset\n    if ($offsetParent.css('position') === 'static') {\n      $offsetParent = $offsetParent.offsetParent();\n    }\n\n    var parentOffset = $offsetParent.offset();\n\n    css.top -= parentOffset.top;\n    css.left -= parentOffset.left;\n\n    if (!isCurrentlyAbove && !isCurrentlyBelow) {\n      newDirection = 'below';\n    }\n\n    if (!enoughRoomBelow && enoughRoomAbove && !isCurrentlyAbove) {\n      newDirection = 'above';\n    } else if (!enoughRoomAbove && enoughRoomBelow && isCurrentlyAbove) {\n      newDirection = 'below';\n    }\n\n    if (newDirection == 'above' ||\n      (isCurrentlyAbove && newDirection !== 'below')) {\n      css.top = container.top - parentOffset.top - dropdown.height;\n    }\n\n    if (newDirection != null) {\n      this.$dropdown\n        .removeClass('select2-dropdown--below select2-dropdown--above')\n        .addClass('select2-dropdown--' + newDirection);\n      this.$container\n        .removeClass('select2-container--below select2-container--above')\n        .addClass('select2-container--' + newDirection);\n    }\n\n    this.$dropdownContainer.css(css);\n  };\n\n  AttachBody.prototype._resizeDropdown = function () {\n    var css = {\n      width: this.$container.outerWidth(false) + 'px'\n    };\n\n    if (this.options.get('dropdownAutoWidth')) {\n      css.minWidth = css.width;\n      css.position = 'relative';\n      css.width = 'auto';\n    }\n\n    this.$dropdown.css(css);\n  };\n\n  AttachBody.prototype._showDropdown = function (decorated) {\n    this.$dropdownContainer.appendTo(this.$dropdownParent);\n\n    this._positionDropdown();\n    this._resizeDropdown();\n  };\n\n  return AttachBody;\n});\n\nS2.define('select2/dropdown/minimumResultsForSearch',[\n\n], function () {\n  function countResults (data) {\n    var count = 0;\n\n    for (var d = 0; d < data.length; d++) {\n      var item = data[d];\n\n      if (item.children) {\n        count += countResults(item.children);\n      } else {\n        count++;\n      }\n    }\n\n    return count;\n  }\n\n  function MinimumResultsForSearch (decorated, $element, options, dataAdapter) {\n    this.minimumResultsForSearch = options.get('minimumResultsForSearch');\n\n    if (this.minimumResultsForSearch < 0) {\n      this.minimumResultsForSearch = Infinity;\n    }\n\n    decorated.call(this, $element, options, dataAdapter);\n  }\n\n  MinimumResultsForSearch.prototype.showSearch = function (decorated, params) {\n    if (countResults(params.data.results) < this.minimumResultsForSearch) {\n      return false;\n    }\n\n    return decorated.call(this, params);\n  };\n\n  return MinimumResultsForSearch;\n});\n\nS2.define('select2/dropdown/selectOnClose',[\n  '../utils'\n], function (Utils) {\n  function SelectOnClose () { }\n\n  SelectOnClose.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    container.on('close', function (params) {\n      self._handleSelectOnClose(params);\n    });\n  };\n\n  SelectOnClose.prototype._handleSelectOnClose = function (_, params) {\n    if (params && params.originalSelect2Event != null) {\n      var event = params.originalSelect2Event;\n\n      // Don't select an item if the close event was triggered from a select or\n      // unselect event\n      if (event._type === 'select' || event._type === 'unselect') {\n        return;\n      }\n    }\n\n    var $highlightedResults = this.getHighlightedResults();\n\n    // Only select highlighted results\n    if ($highlightedResults.length < 1) {\n      return;\n    }\n\n    var data = Utils.GetData($highlightedResults[0], 'data');\n\n    // Don't re-select already selected resulte\n    if (\n      (data.element != null && data.element.selected) ||\n      (data.element == null && data.selected)\n    ) {\n      return;\n    }\n\n    this.trigger('select', {\n        data: data\n    });\n  };\n\n  return SelectOnClose;\n});\n\nS2.define('select2/dropdown/closeOnSelect',[\n\n], function () {\n  function CloseOnSelect () { }\n\n  CloseOnSelect.prototype.bind = function (decorated, container, $container) {\n    var self = this;\n\n    decorated.call(this, container, $container);\n\n    container.on('select', function (evt) {\n      self._selectTriggered(evt);\n    });\n\n    container.on('unselect', function (evt) {\n      self._selectTriggered(evt);\n    });\n  };\n\n  CloseOnSelect.prototype._selectTriggered = function (_, evt) {\n    var originalEvent = evt.originalEvent;\n\n    // Don't close if the control key is being held\n    if (originalEvent && (originalEvent.ctrlKey || originalEvent.metaKey)) {\n      return;\n    }\n\n    this.trigger('close', {\n      originalEvent: originalEvent,\n      originalSelect2Event: evt\n    });\n  };\n\n  return CloseOnSelect;\n});\n\nS2.define('select2/i18n/en',[],function () {\n  // English\n  return {\n    errorLoading: function () {\n      return 'The results could not be loaded.';\n    },\n    inputTooLong: function (args) {\n      var overChars = args.input.length - args.maximum;\n\n      var message = 'Please delete ' + overChars + ' character';\n\n      if (overChars != 1) {\n        message += 's';\n      }\n\n      return message;\n    },\n    inputTooShort: function (args) {\n      var remainingChars = args.minimum - args.input.length;\n\n      var message = 'Please enter ' + remainingChars + ' or more characters';\n\n      return message;\n    },\n    loadingMore: function () {\n      return 'Loading more results…';\n    },\n    maximumSelected: function (args) {\n      var message = 'You can only select ' + args.maximum + ' item';\n\n      if (args.maximum != 1) {\n        message += 's';\n      }\n\n      return message;\n    },\n    noResults: function () {\n      return 'No results found';\n    },\n    searching: function () {\n      return 'Searching…';\n    },\n    removeAllItems: function () {\n      return 'Remove all items';\n    }\n  };\n});\n\nS2.define('select2/defaults',[\n  'jquery',\n  'require',\n\n  './results',\n\n  './selection/single',\n  './selection/multiple',\n  './selection/placeholder',\n  './selection/allowClear',\n  './selection/search',\n  './selection/eventRelay',\n\n  './utils',\n  './translation',\n  './diacritics',\n\n  './data/select',\n  './data/array',\n  './data/ajax',\n  './data/tags',\n  './data/tokenizer',\n  './data/minimumInputLength',\n  './data/maximumInputLength',\n  './data/maximumSelectionLength',\n\n  './dropdown',\n  './dropdown/search',\n  './dropdown/hidePlaceholder',\n  './dropdown/infiniteScroll',\n  './dropdown/attachBody',\n  './dropdown/minimumResultsForSearch',\n  './dropdown/selectOnClose',\n  './dropdown/closeOnSelect',\n\n  './i18n/en'\n], function ($, require,\n\n             ResultsList,\n\n             SingleSelection, MultipleSelection, Placeholder, AllowClear,\n             SelectionSearch, EventRelay,\n\n             Utils, Translation, DIACRITICS,\n\n             SelectData, ArrayData, AjaxData, Tags, Tokenizer,\n             MinimumInputLength, MaximumInputLength, MaximumSelectionLength,\n\n             Dropdown, DropdownSearch, HidePlaceholder, InfiniteScroll,\n             AttachBody, MinimumResultsForSearch, SelectOnClose, CloseOnSelect,\n\n             EnglishTranslation) {\n  function Defaults () {\n    this.reset();\n  }\n\n  Defaults.prototype.apply = function (options) {\n    options = $.extend(true, {}, this.defaults, options);\n\n    if (options.dataAdapter == null) {\n      if (options.ajax != null) {\n        options.dataAdapter = AjaxData;\n      } else if (options.data != null) {\n        options.dataAdapter = ArrayData;\n      } else {\n        options.dataAdapter = SelectData;\n      }\n\n      if (options.minimumInputLength > 0) {\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          MinimumInputLength\n        );\n      }\n\n      if (options.maximumInputLength > 0) {\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          MaximumInputLength\n        );\n      }\n\n      if (options.maximumSelectionLength > 0) {\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          MaximumSelectionLength\n        );\n      }\n\n      if (options.tags) {\n        options.dataAdapter = Utils.Decorate(options.dataAdapter, Tags);\n      }\n\n      if (options.tokenSeparators != null || options.tokenizer != null) {\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          Tokenizer\n        );\n      }\n\n      if (options.query != null) {\n        var Query = require(options.amdBase + 'compat/query');\n\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          Query\n        );\n      }\n\n      if (options.initSelection != null) {\n        var InitSelection = require(options.amdBase + 'compat/initSelection');\n\n        options.dataAdapter = Utils.Decorate(\n          options.dataAdapter,\n          InitSelection\n        );\n      }\n    }\n\n    if (options.resultsAdapter == null) {\n      options.resultsAdapter = ResultsList;\n\n      if (options.ajax != null) {\n        options.resultsAdapter = Utils.Decorate(\n          options.resultsAdapter,\n          InfiniteScroll\n        );\n      }\n\n      if (options.placeholder != null) {\n        options.resultsAdapter = Utils.Decorate(\n          options.resultsAdapter,\n          HidePlaceholder\n        );\n      }\n\n      if (options.selectOnClose) {\n        options.resultsAdapter = Utils.Decorate(\n          options.resultsAdapter,\n          SelectOnClose\n        );\n      }\n    }\n\n    if (options.dropdownAdapter == null) {\n      if (options.multiple) {\n        options.dropdownAdapter = Dropdown;\n      } else {\n        var SearchableDropdown = Utils.Decorate(Dropdown, DropdownSearch);\n\n        options.dropdownAdapter = SearchableDropdown;\n      }\n\n      if (options.minimumResultsForSearch !== 0) {\n        options.dropdownAdapter = Utils.Decorate(\n          options.dropdownAdapter,\n          MinimumResultsForSearch\n        );\n      }\n\n      if (options.closeOnSelect) {\n        options.dropdownAdapter = Utils.Decorate(\n          options.dropdownAdapter,\n          CloseOnSelect\n        );\n      }\n\n      if (\n        options.dropdownCssClass != null ||\n        options.dropdownCss != null ||\n        options.adaptDropdownCssClass != null\n      ) {\n        var DropdownCSS = require(options.amdBase + 'compat/dropdownCss');\n\n        options.dropdownAdapter = Utils.Decorate(\n          options.dropdownAdapter,\n          DropdownCSS\n        );\n      }\n\n      options.dropdownAdapter = Utils.Decorate(\n        options.dropdownAdapter,\n        AttachBody\n      );\n    }\n\n    if (options.selectionAdapter == null) {\n      if (options.multiple) {\n        options.selectionAdapter = MultipleSelection;\n      } else {\n        options.selectionAdapter = SingleSelection;\n      }\n\n      // Add the placeholder mixin if a placeholder was specified\n      if (options.placeholder != null) {\n        options.selectionAdapter = Utils.Decorate(\n          options.selectionAdapter,\n          Placeholder\n        );\n      }\n\n      if (options.allowClear) {\n        options.selectionAdapter = Utils.Decorate(\n          options.selectionAdapter,\n          AllowClear\n        );\n      }\n\n      if (options.multiple) {\n        options.selectionAdapter = Utils.Decorate(\n          options.selectionAdapter,\n          SelectionSearch\n        );\n      }\n\n      if (\n        options.containerCssClass != null ||\n        options.containerCss != null ||\n        options.adaptContainerCssClass != null\n      ) {\n        var ContainerCSS = require(options.amdBase + 'compat/containerCss');\n\n        options.selectionAdapter = Utils.Decorate(\n          options.selectionAdapter,\n          ContainerCSS\n        );\n      }\n\n      options.selectionAdapter = Utils.Decorate(\n        options.selectionAdapter,\n        EventRelay\n      );\n    }\n\n    // If the defaults were not previously applied from an element, it is\n    // possible for the language option to have not been resolved\n    options.language = this._resolveLanguage(options.language);\n\n    // Always fall back to English since it will always be complete\n    options.language.push('en');\n\n    var uniqueLanguages = [];\n\n    for (var l = 0; l < options.language.length; l++) {\n      var language = options.language[l];\n\n      if (uniqueLanguages.indexOf(language) === -1) {\n        uniqueLanguages.push(language);\n      }\n    }\n\n    options.language = uniqueLanguages;\n\n    options.translations = this._processTranslations(\n      options.language,\n      options.debug\n    );\n\n    return options;\n  };\n\n  Defaults.prototype.reset = function () {\n    function stripDiacritics (text) {\n      // Used 'uni range + named function' from http://jsperf.com/diacritics/18\n      function match(a) {\n        return DIACRITICS[a] || a;\n      }\n\n      return text.replace(/[^\\u0000-\\u007E]/g, match);\n    }\n\n    function matcher (params, data) {\n      // Always return the object if there is nothing to compare\n      if ($.trim(params.term) === '') {\n        return data;\n      }\n\n      // Do a recursive check for options with children\n      if (data.children && data.children.length > 0) {\n        // Clone the data object if there are children\n        // This is required as we modify the object to remove any non-matches\n        var match = $.extend(true, {}, data);\n\n        // Check each child of the option\n        for (var c = data.children.length - 1; c >= 0; c--) {\n          var child = data.children[c];\n\n          var matches = matcher(params, child);\n\n          // If there wasn't a match, remove the object in the array\n          if (matches == null) {\n            match.children.splice(c, 1);\n          }\n        }\n\n        // If any children matched, return the new object\n        if (match.children.length > 0) {\n          return match;\n        }\n\n        // If there were no matching children, check just the plain object\n        return matcher(params, match);\n      }\n\n      var original = stripDiacritics(data.text).toUpperCase();\n      var term = stripDiacritics(params.term).toUpperCase();\n\n      // Check if the text contains the term\n      if (original.indexOf(term) > -1) {\n        return data;\n      }\n\n      // If it doesn't contain the term, don't return anything\n      return null;\n    }\n\n    this.defaults = {\n      amdBase: './',\n      amdLanguageBase: './i18n/',\n      closeOnSelect: true,\n      debug: false,\n      dropdownAutoWidth: false,\n      escapeMarkup: Utils.escapeMarkup,\n      language: {},\n      matcher: matcher,\n      minimumInputLength: 0,\n      maximumInputLength: 0,\n      maximumSelectionLength: 0,\n      minimumResultsForSearch: 0,\n      selectOnClose: false,\n      scrollAfterSelect: false,\n      sorter: function (data) {\n        return data;\n      },\n      templateResult: function (result) {\n        return result.text;\n      },\n      templateSelection: function (selection) {\n        return selection.text;\n      },\n      theme: 'default',\n      width: 'resolve'\n    };\n  };\n\n  Defaults.prototype.applyFromElement = function (options, $element) {\n    var optionLanguage = options.language;\n    var defaultLanguage = this.defaults.language;\n    var elementLanguage = $element.prop('lang');\n    var parentLanguage = $element.closest('[lang]').prop('lang');\n\n    var languages = Array.prototype.concat.call(\n      this._resolveLanguage(elementLanguage),\n      this._resolveLanguage(optionLanguage),\n      this._resolveLanguage(defaultLanguage),\n      this._resolveLanguage(parentLanguage)\n    );\n\n    options.language = languages;\n\n    return options;\n  };\n\n  Defaults.prototype._resolveLanguage = function (language) {\n    if (!language) {\n      return [];\n    }\n\n    if ($.isEmptyObject(language)) {\n      return [];\n    }\n\n    if ($.isPlainObject(language)) {\n      return [language];\n    }\n\n    var languages;\n\n    if (!$.isArray(language)) {\n      languages = [language];\n    } else {\n      languages = language;\n    }\n\n    var resolvedLanguages = [];\n\n    for (var l = 0; l < languages.length; l++) {\n      resolvedLanguages.push(languages[l]);\n\n      if (typeof languages[l] === 'string' && languages[l].indexOf('-') > 0) {\n        // Extract the region information if it is included\n        var languageParts = languages[l].split('-');\n        var baseLanguage = languageParts[0];\n\n        resolvedLanguages.push(baseLanguage);\n      }\n    }\n\n    return resolvedLanguages;\n  };\n\n  Defaults.prototype._processTranslations = function (languages, debug) {\n    var translations = new Translation();\n\n    for (var l = 0; l < languages.length; l++) {\n      var languageData = new Translation();\n\n      var language = languages[l];\n\n      if (typeof language === 'string') {\n        try {\n          // Try to load it with the original name\n          languageData = Translation.loadPath(language);\n        } catch (e) {\n          try {\n            // If we couldn't load it, check if it wasn't the full path\n            language = this.defaults.amdLanguageBase + language;\n            languageData = Translation.loadPath(language);\n          } catch (ex) {\n            // The translation could not be loaded at all. Sometimes this is\n            // because of a configuration problem, other times this can be\n            // because of how Select2 helps load all possible translation files\n            if (debug && window.console && console.warn) {\n              console.warn(\n                'Select2: The language file for \"' + language + '\" could ' +\n                'not be automatically loaded. A fallback will be used instead.'\n              );\n            }\n          }\n        }\n      } else if ($.isPlainObject(language)) {\n        languageData = new Translation(language);\n      } else {\n        languageData = language;\n      }\n\n      translations.extend(languageData);\n    }\n\n    return translations;\n  };\n\n  Defaults.prototype.set = function (key, value) {\n    var camelKey = $.camelCase(key);\n\n    var data = {};\n    data[camelKey] = value;\n\n    var convertedData = Utils._convertData(data);\n\n    $.extend(true, this.defaults, convertedData);\n  };\n\n  var defaults = new Defaults();\n\n  return defaults;\n});\n\nS2.define('select2/options',[\n  'require',\n  'jquery',\n  './defaults',\n  './utils'\n], function (require, $, Defaults, Utils) {\n  function Options (options, $element) {\n    this.options = options;\n\n    if ($element != null) {\n      this.fromElement($element);\n    }\n\n    if ($element != null) {\n      this.options = Defaults.applyFromElement(this.options, $element);\n    }\n\n    this.options = Defaults.apply(this.options);\n\n    if ($element && $element.is('input')) {\n      var InputCompat = require(this.get('amdBase') + 'compat/inputData');\n\n      this.options.dataAdapter = Utils.Decorate(\n        this.options.dataAdapter,\n        InputCompat\n      );\n    }\n  }\n\n  Options.prototype.fromElement = function ($e) {\n    var excludedData = ['select2'];\n\n    if (this.options.multiple == null) {\n      this.options.multiple = $e.prop('multiple');\n    }\n\n    if (this.options.disabled == null) {\n      this.options.disabled = $e.prop('disabled');\n    }\n\n    if (this.options.dir == null) {\n      if ($e.prop('dir')) {\n        this.options.dir = $e.prop('dir');\n      } else if ($e.closest('[dir]').prop('dir')) {\n        this.options.dir = $e.closest('[dir]').prop('dir');\n      } else {\n        this.options.dir = 'ltr';\n      }\n    }\n\n    $e.prop('disabled', this.options.disabled);\n    $e.prop('multiple', this.options.multiple);\n\n    if (Utils.GetData($e[0], 'select2Tags')) {\n      if (this.options.debug && window.console && console.warn) {\n        console.warn(\n          'Select2: The `data-select2-tags` attribute has been changed to ' +\n          'use the `data-data` and `data-tags=\"true\"` attributes and will be ' +\n          'removed in future versions of Select2.'\n        );\n      }\n\n      Utils.StoreData($e[0], 'data', Utils.GetData($e[0], 'select2Tags'));\n      Utils.StoreData($e[0], 'tags', true);\n    }\n\n    if (Utils.GetData($e[0], 'ajaxUrl')) {\n      if (this.options.debug && window.console && console.warn) {\n        console.warn(\n          'Select2: The `data-ajax-url` attribute has been changed to ' +\n          '`data-ajax--url` and support for the old attribute will be removed' +\n          ' in future versions of Select2.'\n        );\n      }\n\n      $e.attr('ajax--url', Utils.GetData($e[0], 'ajaxUrl'));\n      Utils.StoreData($e[0], 'ajax-Url', Utils.GetData($e[0], 'ajaxUrl'));\n    }\n\n    var dataset = {};\n\n    function upperCaseLetter(_, letter) {\n      return letter.toUpperCase();\n    }\n\n    // Pre-load all of the attributes which are prefixed with `data-`\n    for (var attr = 0; attr < $e[0].attributes.length; attr++) {\n      var attributeName = $e[0].attributes[attr].name;\n      var prefix = 'data-';\n\n      if (attributeName.substr(0, prefix.length) == prefix) {\n        // Get the contents of the attribute after `data-`\n        var dataName = attributeName.substring(prefix.length);\n\n        // Get the data contents from the consistent source\n        // This is more than likely the jQuery data helper\n        var dataValue = Utils.GetData($e[0], dataName);\n\n        // camelCase the attribute name to match the spec\n        var camelDataName = dataName.replace(/-([a-z])/g, upperCaseLetter);\n\n        // Store the data attribute contents into the dataset since\n        dataset[camelDataName] = dataValue;\n      }\n    }\n\n    // Prefer the element's `dataset` attribute if it exists\n    // jQuery 1.x does not correctly handle data attributes with multiple dashes\n    if ($.fn.jquery && $.fn.jquery.substr(0, 2) == '1.' && $e[0].dataset) {\n      dataset = $.extend(true, {}, $e[0].dataset, dataset);\n    }\n\n    // Prefer our internal data cache if it exists\n    var data = $.extend(true, {}, Utils.GetData($e[0]), dataset);\n\n    data = Utils._convertData(data);\n\n    for (var key in data) {\n      if ($.inArray(key, excludedData) > -1) {\n        continue;\n      }\n\n      if ($.isPlainObject(this.options[key])) {\n        $.extend(this.options[key], data[key]);\n      } else {\n        this.options[key] = data[key];\n      }\n    }\n\n    return this;\n  };\n\n  Options.prototype.get = function (key) {\n    return this.options[key];\n  };\n\n  Options.prototype.set = function (key, val) {\n    this.options[key] = val;\n  };\n\n  return Options;\n});\n\nS2.define('select2/core',[\n  'jquery',\n  './options',\n  './utils',\n  './keys'\n], function ($, Options, Utils, KEYS) {\n  var Select2 = function ($element, options) {\n    if (Utils.GetData($element[0], 'select2') != null) {\n      Utils.GetData($element[0], 'select2').destroy();\n    }\n\n    this.$element = $element;\n\n    this.id = this._generateId($element);\n\n    options = options || {};\n\n    this.options = new Options(options, $element);\n\n    Select2.__super__.constructor.call(this);\n\n    // Set up the tabindex\n\n    var tabindex = $element.attr('tabindex') || 0;\n    Utils.StoreData($element[0], 'old-tabindex', tabindex);\n    $element.attr('tabindex', '-1');\n\n    // Set up containers and adapters\n\n    var DataAdapter = this.options.get('dataAdapter');\n    this.dataAdapter = new DataAdapter($element, this.options);\n\n    var $container = this.render();\n\n    this._placeContainer($container);\n\n    var SelectionAdapter = this.options.get('selectionAdapter');\n    this.selection = new SelectionAdapter($element, this.options);\n    this.$selection = this.selection.render();\n\n    this.selection.position(this.$selection, $container);\n\n    var DropdownAdapter = this.options.get('dropdownAdapter');\n    this.dropdown = new DropdownAdapter($element, this.options);\n    this.$dropdown = this.dropdown.render();\n\n    this.dropdown.position(this.$dropdown, $container);\n\n    var ResultsAdapter = this.options.get('resultsAdapter');\n    this.results = new ResultsAdapter($element, this.options, this.dataAdapter);\n    this.$results = this.results.render();\n\n    this.results.position(this.$results, this.$dropdown);\n\n    // Bind events\n\n    var self = this;\n\n    // Bind the container to all of the adapters\n    this._bindAdapters();\n\n    // Register any DOM event handlers\n    this._registerDomEvents();\n\n    // Register any internal event handlers\n    this._registerDataEvents();\n    this._registerSelectionEvents();\n    this._registerDropdownEvents();\n    this._registerResultsEvents();\n    this._registerEvents();\n\n    // Set the initial state\n    this.dataAdapter.current(function (initialData) {\n      self.trigger('selection:update', {\n        data: initialData\n      });\n    });\n\n    // Hide the original select\n    $element.addClass('select2-hidden-accessible');\n    $element.attr('aria-hidden', 'true');\n\n    // Synchronize any monitored attributes\n    this._syncAttributes();\n\n    Utils.StoreData($element[0], 'select2', this);\n\n    // Ensure backwards compatibility with $element.data('select2').\n    $element.data('select2', this);\n  };\n\n  Utils.Extend(Select2, Utils.Observable);\n\n  Select2.prototype._generateId = function ($element) {\n    var id = '';\n\n    if ($element.attr('id') != null) {\n      id = $element.attr('id');\n    } else if ($element.attr('name') != null) {\n      id = $element.attr('name') + '-' + Utils.generateChars(2);\n    } else {\n      id = Utils.generateChars(4);\n    }\n\n    id = id.replace(/(:|\\.|\\[|\\]|,)/g, '');\n    id = 'select2-' + id;\n\n    return id;\n  };\n\n  Select2.prototype._placeContainer = function ($container) {\n    $container.insertAfter(this.$element);\n\n    var width = this._resolveWidth(this.$element, this.options.get('width'));\n\n    if (width != null) {\n      $container.css('width', width);\n    }\n  };\n\n  Select2.prototype._resolveWidth = function ($element, method) {\n    var WIDTH = /^width:(([-+]?([0-9]*\\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;\n\n    if (method == 'resolve') {\n      var styleWidth = this._resolveWidth($element, 'style');\n\n      if (styleWidth != null) {\n        return styleWidth;\n      }\n\n      return this._resolveWidth($element, 'element');\n    }\n\n    if (method == 'element') {\n      var elementWidth = $element.outerWidth(false);\n\n      if (elementWidth <= 0) {\n        return 'auto';\n      }\n\n      return elementWidth + 'px';\n    }\n\n    if (method == 'style') {\n      var style = $element.attr('style');\n\n      if (typeof(style) !== 'string') {\n        return null;\n      }\n\n      var attrs = style.split(';');\n\n      for (var i = 0, l = attrs.length; i < l; i = i + 1) {\n        var attr = attrs[i].replace(/\\s/g, '');\n        var matches = attr.match(WIDTH);\n\n        if (matches !== null && matches.length >= 1) {\n          return matches[1];\n        }\n      }\n\n      return null;\n    }\n\n    if (method == 'computedstyle') {\n      var computedStyle = window.getComputedStyle($element[0]);\n\n      return computedStyle.width;\n    }\n\n    return method;\n  };\n\n  Select2.prototype._bindAdapters = function () {\n    this.dataAdapter.bind(this, this.$container);\n    this.selection.bind(this, this.$container);\n\n    this.dropdown.bind(this, this.$container);\n    this.results.bind(this, this.$container);\n  };\n\n  Select2.prototype._registerDomEvents = function () {\n    var self = this;\n\n    this.$element.on('change.select2', function () {\n      self.dataAdapter.current(function (data) {\n        self.trigger('selection:update', {\n          data: data\n        });\n      });\n    });\n\n    this.$element.on('focus.select2', function (evt) {\n      self.trigger('focus', evt);\n    });\n\n    this._syncA = Utils.bind(this._syncAttributes, this);\n    this._syncS = Utils.bind(this._syncSubtree, this);\n\n    if (this.$element[0].attachEvent) {\n      this.$element[0].attachEvent('onpropertychange', this._syncA);\n    }\n\n    var observer = window.MutationObserver ||\n      window.WebKitMutationObserver ||\n      window.MozMutationObserver\n    ;\n\n    if (observer != null) {\n      this._observer = new observer(function (mutations) {\n        $.each(mutations, self._syncA);\n        $.each(mutations, self._syncS);\n      });\n      this._observer.observe(this.$element[0], {\n        attributes: true,\n        childList: true,\n        subtree: false\n      });\n    } else if (this.$element[0].addEventListener) {\n      this.$element[0].addEventListener(\n        'DOMAttrModified',\n        self._syncA,\n        false\n      );\n      this.$element[0].addEventListener(\n        'DOMNodeInserted',\n        self._syncS,\n        false\n      );\n      this.$element[0].addEventListener(\n        'DOMNodeRemoved',\n        self._syncS,\n        false\n      );\n    }\n  };\n\n  Select2.prototype._registerDataEvents = function () {\n    var self = this;\n\n    this.dataAdapter.on('*', function (name, params) {\n      self.trigger(name, params);\n    });\n  };\n\n  Select2.prototype._registerSelectionEvents = function () {\n    var self = this;\n    var nonRelayEvents = ['toggle', 'focus'];\n\n    this.selection.on('toggle', function () {\n      self.toggleDropdown();\n    });\n\n    this.selection.on('focus', function (params) {\n      self.focus(params);\n    });\n\n    this.selection.on('*', function (name, params) {\n      if ($.inArray(name, nonRelayEvents) !== -1) {\n        return;\n      }\n\n      self.trigger(name, params);\n    });\n  };\n\n  Select2.prototype._registerDropdownEvents = function () {\n    var self = this;\n\n    this.dropdown.on('*', function (name, params) {\n      self.trigger(name, params);\n    });\n  };\n\n  Select2.prototype._registerResultsEvents = function () {\n    var self = this;\n\n    this.results.on('*', function (name, params) {\n      self.trigger(name, params);\n    });\n  };\n\n  Select2.prototype._registerEvents = function () {\n    var self = this;\n\n    this.on('open', function () {\n      self.$container.addClass('select2-container--open');\n    });\n\n    this.on('close', function () {\n      self.$container.removeClass('select2-container--open');\n    });\n\n    this.on('enable', function () {\n      self.$container.removeClass('select2-container--disabled');\n    });\n\n    this.on('disable', function () {\n      self.$container.addClass('select2-container--disabled');\n    });\n\n    this.on('blur', function () {\n      self.$container.removeClass('select2-container--focus');\n    });\n\n    this.on('query', function (params) {\n      if (!self.isOpen()) {\n        self.trigger('open', {});\n      }\n\n      this.dataAdapter.query(params, function (data) {\n        self.trigger('results:all', {\n          data: data,\n          query: params\n        });\n      });\n    });\n\n    this.on('query:append', function (params) {\n      this.dataAdapter.query(params, function (data) {\n        self.trigger('results:append', {\n          data: data,\n          query: params\n        });\n      });\n    });\n\n    this.on('keypress', function (evt) {\n      var key = evt.which;\n\n      if (self.isOpen()) {\n        if (key === KEYS.ESC || key === KEYS.TAB ||\n            (key === KEYS.UP && evt.altKey)) {\n          self.close();\n\n          evt.preventDefault();\n        } else if (key === KEYS.ENTER) {\n          self.trigger('results:select', {});\n\n          evt.preventDefault();\n        } else if ((key === KEYS.SPACE && evt.ctrlKey)) {\n          self.trigger('results:toggle', {});\n\n          evt.preventDefault();\n        } else if (key === KEYS.UP) {\n          self.trigger('results:previous', {});\n\n          evt.preventDefault();\n        } else if (key === KEYS.DOWN) {\n          self.trigger('results:next', {});\n\n          evt.preventDefault();\n        }\n      } else {\n        if (key === KEYS.ENTER || key === KEYS.SPACE ||\n            (key === KEYS.DOWN && evt.altKey)) {\n          self.open();\n\n          evt.preventDefault();\n        }\n      }\n    });\n  };\n\n  Select2.prototype._syncAttributes = function () {\n    this.options.set('disabled', this.$element.prop('disabled'));\n\n    if (this.options.get('disabled')) {\n      if (this.isOpen()) {\n        this.close();\n      }\n\n      this.trigger('disable', {});\n    } else {\n      this.trigger('enable', {});\n    }\n  };\n\n  Select2.prototype._syncSubtree = function (evt, mutations) {\n    var changed = false;\n    var self = this;\n\n    // Ignore any mutation events raised for elements that aren't options or\n    // optgroups. This handles the case when the select element is destroyed\n    if (\n      evt && evt.target && (\n        evt.target.nodeName !== 'OPTION' && evt.target.nodeName !== 'OPTGROUP'\n      )\n    ) {\n      return;\n    }\n\n    if (!mutations) {\n      // If mutation events aren't supported, then we can only assume that the\n      // change affected the selections\n      changed = true;\n    } else if (mutations.addedNodes && mutations.addedNodes.length > 0) {\n      for (var n = 0; n < mutations.addedNodes.length; n++) {\n        var node = mutations.addedNodes[n];\n\n        if (node.selected) {\n          changed = true;\n        }\n      }\n    } else if (mutations.removedNodes && mutations.removedNodes.length > 0) {\n      changed = true;\n    }\n\n    // Only re-pull the data if we think there is a change\n    if (changed) {\n      this.dataAdapter.current(function (currentData) {\n        self.trigger('selection:update', {\n          data: currentData\n        });\n      });\n    }\n  };\n\n  /**\n   * Override the trigger method to automatically trigger pre-events when\n   * there are events that can be prevented.\n   */\n  Select2.prototype.trigger = function (name, args) {\n    var actualTrigger = Select2.__super__.trigger;\n    var preTriggerMap = {\n      'open': 'opening',\n      'close': 'closing',\n      'select': 'selecting',\n      'unselect': 'unselecting',\n      'clear': 'clearing'\n    };\n\n    if (args === undefined) {\n      args = {};\n    }\n\n    if (name in preTriggerMap) {\n      var preTriggerName = preTriggerMap[name];\n      var preTriggerArgs = {\n        prevented: false,\n        name: name,\n        args: args\n      };\n\n      actualTrigger.call(this, preTriggerName, preTriggerArgs);\n\n      if (preTriggerArgs.prevented) {\n        args.prevented = true;\n\n        return;\n      }\n    }\n\n    actualTrigger.call(this, name, args);\n  };\n\n  Select2.prototype.toggleDropdown = function () {\n    if (this.options.get('disabled')) {\n      return;\n    }\n\n    if (this.isOpen()) {\n      this.close();\n    } else {\n      this.open();\n    }\n  };\n\n  Select2.prototype.open = function () {\n    if (this.isOpen()) {\n      return;\n    }\n\n    this.trigger('query', {});\n  };\n\n  Select2.prototype.close = function () {\n    if (!this.isOpen()) {\n      return;\n    }\n\n    this.trigger('close', {});\n  };\n\n  Select2.prototype.isOpen = function () {\n    return this.$container.hasClass('select2-container--open');\n  };\n\n  Select2.prototype.hasFocus = function () {\n    return this.$container.hasClass('select2-container--focus');\n  };\n\n  Select2.prototype.focus = function (data) {\n    // No need to re-trigger focus events if we are already focused\n    if (this.hasFocus()) {\n      return;\n    }\n\n    this.$container.addClass('select2-container--focus');\n    this.trigger('focus', {});\n  };\n\n  Select2.prototype.enable = function (args) {\n    if (this.options.get('debug') && window.console && console.warn) {\n      console.warn(\n        'Select2: The `select2(\"enable\")` method has been deprecated and will' +\n        ' be removed in later Select2 versions. Use $element.prop(\"disabled\")' +\n        ' instead.'\n      );\n    }\n\n    if (args == null || args.length === 0) {\n      args = [true];\n    }\n\n    var disabled = !args[0];\n\n    this.$element.prop('disabled', disabled);\n  };\n\n  Select2.prototype.data = function () {\n    if (this.options.get('debug') &&\n        arguments.length > 0 && window.console && console.warn) {\n      console.warn(\n        'Select2: Data can no longer be set using `select2(\"data\")`. You ' +\n        'should consider setting the value instead using `$element.val()`.'\n      );\n    }\n\n    var data = [];\n\n    this.dataAdapter.current(function (currentData) {\n      data = currentData;\n    });\n\n    return data;\n  };\n\n  Select2.prototype.val = function (args) {\n    if (this.options.get('debug') && window.console && console.warn) {\n      console.warn(\n        'Select2: The `select2(\"val\")` method has been deprecated and will be' +\n        ' removed in later Select2 versions. Use $element.val() instead.'\n      );\n    }\n\n    if (args == null || args.length === 0) {\n      return this.$element.val();\n    }\n\n    var newVal = args[0];\n\n    if ($.isArray(newVal)) {\n      newVal = $.map(newVal, function (obj) {\n        return obj.toString();\n      });\n    }\n\n    this.$element.val(newVal).trigger('change');\n  };\n\n  Select2.prototype.destroy = function () {\n    this.$container.remove();\n\n    if (this.$element[0].detachEvent) {\n      this.$element[0].detachEvent('onpropertychange', this._syncA);\n    }\n\n    if (this._observer != null) {\n      this._observer.disconnect();\n      this._observer = null;\n    } else if (this.$element[0].removeEventListener) {\n      this.$element[0]\n        .removeEventListener('DOMAttrModified', this._syncA, false);\n      this.$element[0]\n        .removeEventListener('DOMNodeInserted', this._syncS, false);\n      this.$element[0]\n        .removeEventListener('DOMNodeRemoved', this._syncS, false);\n    }\n\n    this._syncA = null;\n    this._syncS = null;\n\n    this.$element.off('.select2');\n    this.$element.attr('tabindex',\n    Utils.GetData(this.$element[0], 'old-tabindex'));\n\n    this.$element.removeClass('select2-hidden-accessible');\n    this.$element.attr('aria-hidden', 'false');\n    Utils.RemoveData(this.$element[0]);\n    this.$element.removeData('select2');\n\n    this.dataAdapter.destroy();\n    this.selection.destroy();\n    this.dropdown.destroy();\n    this.results.destroy();\n\n    this.dataAdapter = null;\n    this.selection = null;\n    this.dropdown = null;\n    this.results = null;\n  };\n\n  Select2.prototype.render = function () {\n    var $container = $(\n      '<span class=\"select2 select2-container\">' +\n        '<span class=\"selection\"></span>' +\n        '<span class=\"dropdown-wrapper\" aria-hidden=\"true\"></span>' +\n      '</span>'\n    );\n\n    $container.attr('dir', this.options.get('dir'));\n\n    this.$container = $container;\n\n    this.$container.addClass('select2-container--' + this.options.get('theme'));\n\n    Utils.StoreData($container[0], 'element', this.$element);\n\n    return $container;\n  };\n\n  return Select2;\n});\n\nS2.define('jquery-mousewheel',[\n  'jquery'\n], function ($) {\n  // Used to shim jQuery.mousewheel for non-full builds.\n  return $;\n});\n\nS2.define('jquery.select2',[\n  'jquery',\n  'jquery-mousewheel',\n\n  './select2/core',\n  './select2/defaults',\n  './select2/utils'\n], function ($, _, Select2, Defaults, Utils) {\n  if ($.fn.select2 == null) {\n    // All methods that should return the element\n    var thisMethods = ['open', 'close', 'destroy'];\n\n    $.fn.select2 = function (options) {\n      options = options || {};\n\n      if (typeof options === 'object') {\n        this.each(function () {\n          var instanceOptions = $.extend(true, {}, options);\n\n          var instance = new Select2($(this), instanceOptions);\n        });\n\n        return this;\n      } else if (typeof options === 'string') {\n        var ret;\n        var args = Array.prototype.slice.call(arguments, 1);\n\n        this.each(function () {\n          var instance = Utils.GetData(this, 'select2');\n\n          if (instance == null && window.console && console.error) {\n            console.error(\n              'The select2(\\'' + options + '\\') method was called on an ' +\n              'element that is not using Select2.'\n            );\n          }\n\n          ret = instance[options].apply(instance, args);\n        });\n\n        // Check if we should be returning `this`\n        if ($.inArray(options, thisMethods) > -1) {\n          return this;\n        }\n\n        return ret;\n      } else {\n        throw new Error('Invalid arguments for Select2: ' + options);\n      }\n    };\n  }\n\n  if ($.fn.select2.defaults == null) {\n    $.fn.select2.defaults = Defaults;\n  }\n\n  return Select2;\n});\n\n  // Return the AMD loader configuration so it can be used outside of this file\n  return {\n    define: S2.define,\n    require: S2.require\n  };\n}());\n\n  // Autoload the jQuery bindings\n  // We know that all of the modules exist above this, so we're safe\n  var select2 = S2.require('jquery.select2');\n\n  // Hold the AMD module references on the jQuery function that was just loaded\n  // This allows Select2 to use the internal loader outside of this file, such\n  // as in the language files.\n  jQuery.fn.select2.amd = S2;\n\n  // Return the Select2 instance for anyone who is importing it.\n  return select2;\n}));\n"
  },
  {
    "path": "public/backend/vendors/js/forms/spinner/jquery.bootstrap-touchspin.js",
    "content": "/*\n *  Bootstrap TouchSpin - v4.2.5\n *  A mobile and touch friendly input spinner component for Bootstrap 3 & 4.\n *  http://www.virtuosoft.eu/code/bootstrap-touchspin/\n *\n *  Made by István Ujj-Mészáros\n *  Under Apache License v2.0 License\n */\n(function(factory) {\n  if (typeof define === 'function' && define.amd) {\n    define(['jquery'], factory);\n  } else if (typeof module === 'object' && module.exports) {\n    module.exports = function(root, jQuery) {\n      if (jQuery === undefined) {\n        if (typeof window !== 'undefined') {\n          jQuery = require('jquery');\n        }\n        else {\n          jQuery = require('jquery')(root);\n        }\n      }\n      factory(jQuery);\n      return jQuery;\n    };\n  } else {\n    factory(jQuery);\n  }\n}(function($) {\n  'use strict';\n\n  var _currentSpinnerId = 0;\n\n  $.fn.TouchSpin = function(options) {\n\n    var defaults = {\n      min: 0, // If null, there is no minimum enforced\n      max: 100, // If null, there is no maximum enforced\n      initval: '',\n      replacementval: '',\n      step: 1,\n      decimals: 0,\n      stepinterval: 100,\n      forcestepdivisibility: 'round', // none | floor | round | ceil\n      stepintervaldelay: 500,\n      verticalbuttons: false,\n      verticalup: '+',\n      verticaldown: '-',\n      verticalupclass: '',\n      verticaldownclass: '',\n      prefix: '',\n      postfix: '',\n      prefix_extraclass: '',\n      postfix_extraclass: '',\n      booster: true,\n      boostat: 10,\n      maxboostedstep: false,\n      mousewheel: true,\n      buttondown_class: 'btn btn-primary',\n      buttonup_class: 'btn btn-primary',\n      buttondown_txt: '-',\n      buttonup_txt: '+',\n      callback_before_calculation: function(value) {\n        return value;\n      },\n      callback_after_calculation: function(value) {\n        return value;\n      }\n    };\n\n    var attributeMap = {\n      min: 'min',\n      max: 'max',\n      initval: 'init-val',\n      replacementval: 'replacement-val',\n      step: 'step',\n      decimals: 'decimals',\n      stepinterval: 'step-interval',\n      verticalbuttons: 'vertical-buttons',\n      verticalupclass: 'vertical-up-class',\n      verticaldownclass: 'vertical-down-class',\n      forcestepdivisibility: 'force-step-divisibility',\n      stepintervaldelay: 'step-interval-delay',\n      prefix: 'prefix',\n      postfix: 'postfix',\n      prefix_extraclass: 'prefix-extra-class',\n      postfix_extraclass: 'postfix-extra-class',\n      booster: 'booster',\n      boostat: 'boostat',\n      maxboostedstep: 'max-boosted-step',\n      mousewheel: 'mouse-wheel',\n      buttondown_class: 'button-down-class',\n      buttonup_class: 'button-up-class',\n      buttondown_txt: 'button-down-txt',\n      buttonup_txt: 'button-up-txt'\n    };\n\n    return this.each(function() {\n\n      var settings,\n        originalinput = $(this),\n        originalinput_data = originalinput.data(),\n        _detached_prefix,\n        _detached_postfix,\n        container,\n        elements,\n        value,\n        downSpinTimer,\n        upSpinTimer,\n        downDelayTimeout,\n        upDelayTimeout,\n        spincount = 0,\n        spinning = false;\n\n      init();\n\n      function init() {\n        if (originalinput.data('alreadyinitialized')) {\n          return;\n        }\n\n        originalinput.data('alreadyinitialized', true);\n        _currentSpinnerId += 1;\n        originalinput.data('spinnerid', _currentSpinnerId);\n\n        if (!originalinput.is('input')) {\n          console.log('Must be an input.');\n          return;\n        }\n\n        _initSettings();\n        _setInitval();\n        _checkValue();\n        _buildHtml();\n        _initElements();\n        _hideEmptyPrefixPostfix();\n        _bindEvents();\n        _bindEventsInterface();\n      }\n\n      function _setInitval() {\n        if (settings.initval !== '' && originalinput.val() === '') {\n          originalinput.val(settings.initval);\n        }\n      }\n\n      function changeSettings(newsettings) {\n        _updateSettings(newsettings);\n        _checkValue();\n\n        var value = elements.input.val();\n\n        if (value !== '') {\n          value = Number(settings.callback_before_calculation(elements.input.val()));\n          elements.input.val(settings.callback_after_calculation(Number(value).toFixed(settings.decimals)));\n        }\n      }\n\n      function _initSettings() {\n        settings = $.extend({}, defaults, originalinput_data, _parseAttributes(), options);\n      }\n\n      function _parseAttributes() {\n        var data = {};\n        $.each(attributeMap, function(key, value) {\n          var attrName = 'bts-' + value + '';\n          if (originalinput.is('[data-' + attrName + ']')) {\n            data[key] = originalinput.data(attrName);\n          }\n        });\n        return data;\n      }\n\n      function _destroy() {\n        var $parent = originalinput.parent();\n\n        stopSpin();\n\n        originalinput.off('.touchspin');\n\n        if ($parent.hasClass('bootstrap-touchspin-injected')) {\n          originalinput.siblings().remove();\n          originalinput.unwrap();\n        }\n        else {\n          $('.bootstrap-touchspin-injected', $parent).remove();\n          $parent.removeClass('bootstrap-touchspin');\n        }\n\n        originalinput.data('alreadyinitialized', false);\n      }\n\n      function _updateSettings(newsettings) {\n        settings = $.extend({}, settings, newsettings);\n\n        // Update postfix and prefix texts if those settings were changed.\n        if (newsettings.postfix) {\n          var $postfix = originalinput.parent().find('.bootstrap-touchspin-postfix');\n\n          if ($postfix.length === 0) {\n            _detached_postfix.insertAfter(originalinput);\n          }\n\n          originalinput.parent().find('.bootstrap-touchspin-postfix .input-group-text').text(newsettings.postfix);\n        }\n\n        if (newsettings.prefix) {\n          var $prefix = originalinput.parent().find('.bootstrap-touchspin-prefix');\n\n          if ($prefix.length === 0) {\n            _detached_prefix.insertBefore(originalinput);\n          }\n\n          originalinput.parent().find('.bootstrap-touchspin-prefix .input-group-text').text(newsettings.prefix);\n        }\n\n        _hideEmptyPrefixPostfix();\n      }\n\n      function _buildHtml() {\n        var initval = originalinput.val(),\n          parentelement = originalinput.parent();\n\n        if (initval !== '') {\n          initval = settings.callback_after_calculation(Number(initval).toFixed(settings.decimals));\n        }\n\n        originalinput.data('initvalue', initval).val(initval);\n        originalinput.addClass('form-control');\n\n        if (parentelement.hasClass('input-group')) {\n          _advanceInputGroup(parentelement);\n        }\n        else {\n          _buildInputGroup();\n        }\n      }\n\n      function _advanceInputGroup(parentelement) {\n        parentelement.addClass('bootstrap-touchspin');\n\n        var prev = originalinput.prev(),\n          next = originalinput.next();\n\n        var downhtml,\n          uphtml,\n          prefixhtml = '<span class=\"input-group-prepend bootstrap-touchspin-prefix input-group-prepend bootstrap-touchspin-injected\"><span class=\"input-group-text\">' + settings.prefix + '</span></span>',\n          postfixhtml = '<span class=\"input-group-append bootstrap-touchspin-postfix input-group-append bootstrap-touchspin-injected\"><span class=\"input-group-text\">' + settings.postfix + '</span></span>';\n\n        if (prev.hasClass('input-group-btn') || prev.hasClass('input-group-prepend')) {\n          downhtml = '<button class=\"' + settings.buttondown_class + ' bootstrap-touchspin-down bootstrap-touchspin-injected\" type=\"button\">' + settings.buttondown_txt + '</button>';\n          prev.append(downhtml);\n        }\n        else {\n          downhtml = '<span class=\"input-group-btn input-group-prepend bootstrap-touchspin-injected\"><button class=\"' + settings.buttondown_class + ' bootstrap-touchspin-down\" type=\"button\">' + settings.buttondown_txt + '</button></span>';\n          $(downhtml).insertBefore(originalinput);\n        }\n\n        if (next.hasClass('input-group-btn') || next.hasClass('input-group-append')) {\n          uphtml = '<button class=\"' + settings.buttonup_class + ' bootstrap-touchspin-up bootstrap-touchspin-injected\" type=\"button\">' + settings.buttonup_txt + '</button>';\n          next.prepend(uphtml);\n        }\n        else {\n          uphtml = '<span class=\"input-group-btn input-group-append bootstrap-touchspin-injected\"><button class=\"' + settings.buttonup_class + ' bootstrap-touchspin-up\" type=\"button\">' + settings.buttonup_txt + '</button></span>';\n          $(uphtml).insertAfter(originalinput);\n        }\n\n        $(prefixhtml).insertBefore(originalinput);\n        $(postfixhtml).insertAfter(originalinput);\n\n        container = parentelement;\n      }\n\n      function _buildInputGroup() {\n        var html;\n\n        var inputGroupSize = '';\n        if (originalinput.hasClass('input-sm')) {\n          inputGroupSize = 'input-group-sm';\n        }\n\n        if (originalinput.hasClass('input-lg')) {\n          inputGroupSize = 'input-group-lg';\n        }\n\n        if (settings.verticalbuttons) {\n          html = '<div class=\"input-group ' + inputGroupSize + ' bootstrap-touchspin bootstrap-touchspin-injected\"><span class=\"input-group-prepend bootstrap-touchspin-prefix\"><span class=\"input-group-text\">' + settings.prefix + '</span></span><span class=\"bootstrap-touchspin-postfix input-group-append\"><span class=\"input-group-text\">' + settings.postfix + '</span></span><span class=\"input-group-btn-vertical\"><button class=\"' + settings.buttondown_class + ' bootstrap-touchspin-up ' + settings.verticalupclass + '\" type=\"button\">' + settings.verticalup + '</button><button class=\"' + settings.buttonup_class + ' bootstrap-touchspin-down ' + settings.verticaldownclass + '\" type=\"button\">' + settings.verticaldown + '</button></span></div>';\n        }\n        else {\n          html = '<div class=\"input-group bootstrap-touchspin bootstrap-touchspin-injected\"><span class=\"input-group-btn input-group-prepend\"><button class=\"' + settings.buttondown_class + ' bootstrap-touchspin-down\" type=\"button\">' + settings.buttondown_txt + '</button></span><span class=\"bootstrap-touchspin-prefix input-group-prepend\"><span class=\"input-group-text\">' + settings.prefix + '</span></span><span class=\"bootstrap-touchspin-postfix input-group-append\"><span class=\"input-group-text\">' + settings.postfix + '</span></span><span class=\"input-group-btn input-group-append\"><button class=\"' + settings.buttonup_class + ' bootstrap-touchspin-up\" type=\"button\">' + settings.buttonup_txt + '</button></span></div>';\n        }\n\n        container = $(html).insertBefore(originalinput);\n\n        $('.bootstrap-touchspin-prefix', container).after(originalinput);\n\n        if (originalinput.hasClass('input-sm')) {\n          container.addClass('input-group-sm');\n        }\n        else if (originalinput.hasClass('input-lg')) {\n          container.addClass('input-group-lg');\n        }\n      }\n\n      function _initElements() {\n        elements = {\n          down: $('.bootstrap-touchspin-down', container),\n          up: $('.bootstrap-touchspin-up', container),\n          input: $('input', container),\n          prefix: $('.bootstrap-touchspin-prefix', container).addClass(settings.prefix_extraclass),\n          postfix: $('.bootstrap-touchspin-postfix', container).addClass(settings.postfix_extraclass)\n        };\n      }\n\n      function _hideEmptyPrefixPostfix() {\n        if (settings.prefix === '') {\n          _detached_prefix = elements.prefix.detach();\n        }\n\n        if (settings.postfix === '') {\n          _detached_postfix = elements.postfix.detach();\n        }\n      }\n\n      function _bindEvents() {\n        originalinput.on('keydown.touchspin', function(ev) {\n          var code = ev.keyCode || ev.which;\n\n          if (code === 38) {\n            if (spinning !== 'up') {\n              upOnce();\n              startUpSpin();\n            }\n            ev.preventDefault();\n          }\n          else if (code === 40) {\n            if (spinning !== 'down') {\n              downOnce();\n              startDownSpin();\n            }\n            ev.preventDefault();\n          }\n        });\n\n        originalinput.on('keyup.touchspin', function(ev) {\n          var code = ev.keyCode || ev.which;\n\n          if (code === 38) {\n            stopSpin();\n          }\n          else if (code === 40) {\n            stopSpin();\n          }\n        });\n\n        originalinput.on('blur.touchspin', function() {\n          _checkValue();\n          originalinput.val(settings.callback_after_calculation(originalinput.val()));\n        });\n\n        elements.down.on('keydown', function(ev) {\n          var code = ev.keyCode || ev.which;\n\n          if (code === 32 || code === 13) {\n            if (spinning !== 'down') {\n              downOnce();\n              startDownSpin();\n            }\n            ev.preventDefault();\n          }\n        });\n\n        elements.down.on('keyup.touchspin', function(ev) {\n          var code = ev.keyCode || ev.which;\n\n          if (code === 32 || code === 13) {\n            stopSpin();\n          }\n        });\n\n        elements.up.on('keydown.touchspin', function(ev) {\n          var code = ev.keyCode || ev.which;\n\n          if (code === 32 || code === 13) {\n            if (spinning !== 'up') {\n              upOnce();\n              startUpSpin();\n            }\n            ev.preventDefault();\n          }\n        });\n\n        elements.up.on('keyup.touchspin', function(ev) {\n          var code = ev.keyCode || ev.which;\n\n          if (code === 32 || code === 13) {\n            stopSpin();\n          }\n        });\n\n        elements.down.on('mousedown.touchspin', function(ev) {\n          elements.down.off('touchstart.touchspin');  // android 4 workaround\n\n          if (originalinput.is(':disabled')) {\n            return;\n          }\n\n          downOnce();\n          startDownSpin();\n\n          ev.preventDefault();\n          ev.stopPropagation();\n        });\n\n        elements.down.on('touchstart.touchspin', function(ev) {\n          elements.down.off('mousedown.touchspin');  // android 4 workaround\n\n          if (originalinput.is(':disabled')) {\n            return;\n          }\n\n          downOnce();\n          startDownSpin();\n\n          ev.preventDefault();\n          ev.stopPropagation();\n        });\n\n        elements.up.on('mousedown.touchspin', function(ev) {\n          elements.up.off('touchstart.touchspin');  // android 4 workaround\n\n          if (originalinput.is(':disabled')) {\n            return;\n          }\n\n          upOnce();\n          startUpSpin();\n\n          ev.preventDefault();\n          ev.stopPropagation();\n        });\n\n        elements.up.on('touchstart.touchspin', function(ev) {\n          elements.up.off('mousedown.touchspin');  // android 4 workaround\n\n          if (originalinput.is(':disabled')) {\n            return;\n          }\n\n          upOnce();\n          startUpSpin();\n\n          ev.preventDefault();\n          ev.stopPropagation();\n        });\n\n        elements.up.on('mouseup.touchspin mouseout.touchspin touchleave.touchspin touchend.touchspin touchcancel.touchspin', function(ev) {\n          if (!spinning) {\n            return;\n          }\n\n          ev.stopPropagation();\n          stopSpin();\n        });\n\n        elements.down.on('mouseup.touchspin mouseout.touchspin touchleave.touchspin touchend.touchspin touchcancel.touchspin', function(ev) {\n          if (!spinning) {\n            return;\n          }\n\n          ev.stopPropagation();\n          stopSpin();\n        });\n\n        elements.down.on('mousemove.touchspin touchmove.touchspin', function(ev) {\n          if (!spinning) {\n            return;\n          }\n\n          ev.stopPropagation();\n          ev.preventDefault();\n        });\n\n        elements.up.on('mousemove.touchspin touchmove.touchspin', function(ev) {\n          if (!spinning) {\n            return;\n          }\n\n          ev.stopPropagation();\n          ev.preventDefault();\n        });\n\n        originalinput.on('mousewheel.touchspin DOMMouseScroll.touchspin', function(ev) {\n          if (!settings.mousewheel || !originalinput.is(':focus')) {\n            return;\n          }\n\n          var delta = ev.originalEvent.wheelDelta || -ev.originalEvent.deltaY || -ev.originalEvent.detail;\n\n          ev.stopPropagation();\n          ev.preventDefault();\n\n          if (delta < 0) {\n            downOnce();\n          }\n          else {\n            upOnce();\n          }\n        });\n      }\n\n      function _bindEventsInterface() {\n        originalinput.on('touchspin.destroy', function() {\n          _destroy();\n        });\n\n        originalinput.on('touchspin.uponce', function() {\n          stopSpin();\n          upOnce();\n        });\n\n        originalinput.on('touchspin.downonce', function() {\n          stopSpin();\n          downOnce();\n        });\n\n        originalinput.on('touchspin.startupspin', function() {\n          startUpSpin();\n        });\n\n        originalinput.on('touchspin.startdownspin', function() {\n          startDownSpin();\n        });\n\n        originalinput.on('touchspin.stopspin', function() {\n          stopSpin();\n        });\n\n        originalinput.on('touchspin.updatesettings', function(e, newsettings) {\n          changeSettings(newsettings);\n        });\n      }\n\n      function _forcestepdivisibility(value) {\n        switch (settings.forcestepdivisibility) {\n          case 'round':\n            return (Math.round(value / settings.step) * settings.step).toFixed(settings.decimals);\n          case 'floor':\n            return (Math.floor(value / settings.step) * settings.step).toFixed(settings.decimals);\n          case 'ceil':\n            return (Math.ceil(value / settings.step) * settings.step).toFixed(settings.decimals);\n          default:\n            return value;\n        }\n      }\n\n      function _checkValue() {\n        var val, parsedval, returnval;\n\n        val = settings.callback_before_calculation(originalinput.val());\n\n        if (val === '') {\n          if (settings.replacementval !== '') {\n            originalinput.val(settings.replacementval);\n            originalinput.trigger('change');\n          }\n          return;\n        }\n\n        if (settings.decimals > 0 && val === '.') {\n          return;\n        }\n\n        parsedval = parseFloat(val);\n\n        if (isNaN(parsedval)) {\n          if (settings.replacementval !== '') {\n            parsedval = settings.replacementval;\n          }\n          else {\n            parsedval = 0;\n          }\n        }\n\n        returnval = parsedval;\n\n        if (parsedval.toString() !== val) {\n          returnval = parsedval;\n        }\n\n        if ((settings.min !== null) && (parsedval < settings.min)) {\n          returnval = settings.min;\n        }\n\n        if ((settings.max !== null) && (parsedval > settings.max)) {\n          returnval = settings.max;\n        }\n\n        returnval = _forcestepdivisibility(returnval);\n\n        if (Number(val).toString() !== returnval.toString()) {\n          originalinput.val(returnval);\n          originalinput.trigger('change');\n        }\n      }\n\n      function _getBoostedStep() {\n        if (!settings.booster) {\n          return settings.step;\n        }\n        else {\n          var boosted = Math.pow(2, Math.floor(spincount / settings.boostat)) * settings.step;\n\n          if (settings.maxboostedstep) {\n            if (boosted > settings.maxboostedstep) {\n              boosted = settings.maxboostedstep;\n              value = Math.round((value / boosted)) * boosted;\n            }\n          }\n\n          return Math.max(settings.step, boosted);\n        }\n      }\n\n      function upOnce() {\n        _checkValue();\n\n        value = parseFloat(settings.callback_before_calculation(elements.input.val()));\n        if (isNaN(value)) {\n          value = 0;\n        }\n\n        var initvalue = value,\n          boostedstep = _getBoostedStep();\n\n        value = value + boostedstep;\n\n        if ((settings.max !== null) && (value > settings.max)) {\n          value = settings.max;\n          originalinput.trigger('touchspin.on.max');\n          stopSpin();\n        }\n\n        elements.input.val(settings.callback_after_calculation(Number(value).toFixed(settings.decimals)));\n\n        if (initvalue !== value) {\n          originalinput.trigger('change');\n        }\n      }\n\n      function downOnce() {\n        _checkValue();\n\n        value = parseFloat(settings.callback_before_calculation(elements.input.val()));\n        if (isNaN(value)) {\n          value = 0;\n        }\n\n        var initvalue = value,\n          boostedstep = _getBoostedStep();\n\n        value = value - boostedstep;\n\n        if ((settings.min !== null) && (value < settings.min)) {\n          value = settings.min;\n          originalinput.trigger('touchspin.on.min');\n          stopSpin();\n        }\n\n        elements.input.val(settings.callback_after_calculation(Number(value).toFixed(settings.decimals)));\n\n        if (initvalue !== value) {\n          originalinput.trigger('change');\n        }\n      }\n\n      function startDownSpin() {\n        stopSpin();\n\n        spincount = 0;\n        spinning = 'down';\n\n        originalinput.trigger('touchspin.on.startspin');\n        originalinput.trigger('touchspin.on.startdownspin');\n\n        downDelayTimeout = setTimeout(function() {\n          downSpinTimer = setInterval(function() {\n            spincount++;\n            downOnce();\n          }, settings.stepinterval);\n        }, settings.stepintervaldelay);\n      }\n\n      function startUpSpin() {\n        stopSpin();\n\n        spincount = 0;\n        spinning = 'up';\n\n        originalinput.trigger('touchspin.on.startspin');\n        originalinput.trigger('touchspin.on.startupspin');\n\n        upDelayTimeout = setTimeout(function() {\n          upSpinTimer = setInterval(function() {\n            spincount++;\n            upOnce();\n          }, settings.stepinterval);\n        }, settings.stepintervaldelay);\n      }\n\n      function stopSpin() {\n        clearTimeout(downDelayTimeout);\n        clearTimeout(upDelayTimeout);\n        clearInterval(downSpinTimer);\n        clearInterval(upSpinTimer);\n\n        switch (spinning) {\n          case 'up':\n            originalinput.trigger('touchspin.on.stopupspin');\n            originalinput.trigger('touchspin.on.stopspin');\n            break;\n          case 'down':\n            originalinput.trigger('touchspin.on.stopdownspin');\n            originalinput.trigger('touchspin.on.stopspin');\n            break;\n        }\n\n        spincount = 0;\n        spinning = false;\n      }\n\n    });\n\n  };\n\n}));"
  },
  {
    "path": "public/backend/vendors/js/forms/toggle/switchery.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\nfunction 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 * Meta info, accessible in the global scope unless you use AMD option.\n */\n\nrequire.loader = 'component';\n\n/**\n * Internal helper object, contains a sorting function for semantiv versioning\n */\nrequire.helper = {};\nrequire.helper.semVerSort = function(a, b) {\n  var aArray = a.version.split('.');\n  var bArray = b.version.split('.');\n  for (var i=0; i<aArray.length; ++i) {\n    var aInt = parseInt(aArray[i], 10);\n    var bInt = parseInt(bArray[i], 10);\n    if (aInt === bInt) {\n      var aLex = aArray[i].substr((\"\"+aInt).length);\n      var bLex = bArray[i].substr((\"\"+bInt).length);\n      if (aLex === '' && bLex !== '') return 1;\n      if (aLex !== '' && bLex === '') return -1;\n      if (aLex !== '' && bLex !== '') return aLex > bLex ? 1 : -1;\n      continue;\n    } else if (aInt > bInt) {\n      return 1;\n    } else {\n      return -1;\n    }\n  }\n  return 0;\n}\n\n/**\n * Find and require a module which name starts with the provided name.\n * If multiple modules exists, the highest semver is used. \n * This function can only be used for remote dependencies.\n\n * @param {String} name - module name: `user~repo`\n * @param {Boolean} returnPath - returns the canonical require path if true, \n *                               otherwise it returns the epxorted module\n */\nrequire.latest = function (name, returnPath) {\n  function showError(name) {\n    throw new Error('failed to find latest module of \"' + name + '\"');\n  }\n  // only remotes with semvers, ignore local files conataining a '/'\n  var versionRegexp = /(.*)~(.*)@v?(\\d+\\.\\d+\\.\\d+[^\\/]*)$/;\n  var remoteRegexp = /(.*)~(.*)/;\n  if (!remoteRegexp.test(name)) showError(name);\n  var moduleNames = Object.keys(require.modules);\n  var semVerCandidates = [];\n  var otherCandidates = []; // for instance: name of the git branch\n  for (var i=0; i<moduleNames.length; i++) {\n    var moduleName = moduleNames[i];\n    if (new RegExp(name + '@').test(moduleName)) {\n        var version = moduleName.substr(name.length+1);\n        var semVerMatch = versionRegexp.exec(moduleName);\n        if (semVerMatch != null) {\n          semVerCandidates.push({version: version, name: moduleName});\n        } else {\n          otherCandidates.push({version: version, name: moduleName});\n        } \n    }\n  }\n  if (semVerCandidates.concat(otherCandidates).length === 0) {\n    showError(name);\n  }\n  if (semVerCandidates.length > 0) {\n    var module = semVerCandidates.sort(require.helper.semVerSort).pop().name;\n    if (returnPath === true) {\n      return module;\n    }\n    return require(module);\n  }\n  // if the build contains more than one branch of the same module\n  // you should not use this funciton\n  var module = otherCandidates.sort(function(a, b) {return a.name > b.name})[0].name;\n  if (returnPath === true) {\n    return module;\n  }\n  return require(module);\n}\n\n/**\n * Registered modules.\n */\n\nrequire.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\nrequire.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\nrequire.define = function (name, exports) {\n  require.modules[name] = {\n    exports: exports\n  };\n};\nrequire.register(\"abpetkov~transitionize@0.0.3\", function (exports, module) {\n\n/**\n * Transitionize 0.0.2\n * https://github.com/abpetkov/transitionize\n *\n * Authored by Alexander Petkov\n * https://github.com/abpetkov\n *\n * Copyright 2013, Alexander Petkov\n * License: The MIT License (MIT)\n * http://opensource.org/licenses/MIT\n *\n */\n\n/**\n * Expose `Transitionize`.\n */\n\nmodule.exports = Transitionize;\n\n/**\n * Initialize new Transitionize.\n *\n * @param {Object} element\n * @param {Object} props\n * @api public\n */\n\nfunction Transitionize(element, props) {\n  if (!(this instanceof Transitionize)) return new Transitionize(element, props);\n\n  this.element = element;\n  this.props = props || {};\n  this.init();\n}\n\n/**\n * Detect if Safari.\n *\n * @returns {Boolean}\n * @api private\n */\n\nTransitionize.prototype.isSafari = function() {\n  return (/Safari/).test(navigator.userAgent) && (/Apple Computer/).test(navigator.vendor);\n};\n\n/**\n * Loop though the object and push the keys and values in an array.\n * Apply the CSS3 transition to the element and prefix with -webkit- for Safari.\n *\n * @api private\n */\n\nTransitionize.prototype.init = function() {\n  var transitions = [];\n\n  for (var key in this.props) {\n    transitions.push(key + ' ' + this.props[key]);\n  }\n\n  this.element.style.transition = transitions.join(', ');\n  if (this.isSafari()) this.element.style.webkitTransition = transitions.join(', ');\n};\n});\n\nrequire.register(\"ftlabs~fastclick@v0.6.11\", function (exports, module) {\n/**\n * @preserve FastClick: polyfill to remove click delays on browsers with touch UIs.\n *\n * @version 0.6.11\n * @codingstandard ftlabs-jsv2\n * @copyright The Financial Times Limited [All Rights Reserved]\n * @license MIT License (see LICENSE.txt)\n */\n\n/*jslint browser:true, node:true*/\n/*global define, Event, Node*/\n\n\n/**\n * Instantiate fast-clicking listeners on the specificed layer.\n *\n * @constructor\n * @param {Element} layer The layer to listen on\n */\nfunction FastClick(layer) {\n\t'use strict';\n\tvar oldOnClick, self = this;\n\n\n\t/**\n\t * Whether a click is currently being tracked.\n\t *\n\t * @type boolean\n\t */\n\tthis.trackingClick = false;\n\n\n\t/**\n\t * Timestamp for when when click tracking started.\n\t *\n\t * @type number\n\t */\n\tthis.trackingClickStart = 0;\n\n\n\t/**\n\t * The element being tracked for a click.\n\t *\n\t * @type EventTarget\n\t */\n\tthis.targetElement = null;\n\n\n\t/**\n\t * X-coordinate of touch start event.\n\t *\n\t * @type number\n\t */\n\tthis.touchStartX = 0;\n\n\n\t/**\n\t * Y-coordinate of touch start event.\n\t *\n\t * @type number\n\t */\n\tthis.touchStartY = 0;\n\n\n\t/**\n\t * ID of the last touch, retrieved from Touch.identifier.\n\t *\n\t * @type number\n\t */\n\tthis.lastTouchIdentifier = 0;\n\n\n\t/**\n\t * Touchmove boundary, beyond which a click will be cancelled.\n\t *\n\t * @type number\n\t */\n\tthis.touchBoundary = 10;\n\n\n\t/**\n\t * The FastClick layer.\n\t *\n\t * @type Element\n\t */\n\tthis.layer = layer;\n\n\tif (!layer || !layer.nodeType) {\n\t\tthrow new TypeError('Layer must be a document node');\n\t}\n\n\t/** @type function() */\n\tthis.onClick = function() { return FastClick.prototype.onClick.apply(self, arguments); };\n\n\t/** @type function() */\n\tthis.onMouse = function() { return FastClick.prototype.onMouse.apply(self, arguments); };\n\n\t/** @type function() */\n\tthis.onTouchStart = function() { return FastClick.prototype.onTouchStart.apply(self, arguments); };\n\n\t/** @type function() */\n\tthis.onTouchMove = function() { return FastClick.prototype.onTouchMove.apply(self, arguments); };\n\n\t/** @type function() */\n\tthis.onTouchEnd = function() { return FastClick.prototype.onTouchEnd.apply(self, arguments); };\n\n\t/** @type function() */\n\tthis.onTouchCancel = function() { return FastClick.prototype.onTouchCancel.apply(self, arguments); };\n\n\tif (FastClick.notNeeded(layer)) {\n\t\treturn;\n\t}\n\n\t// Set up event handlers as required\n\tif (this.deviceIsAndroid) {\n\t\tlayer.addEventListener('mouseover', this.onMouse, true);\n\t\tlayer.addEventListener('mousedown', this.onMouse, true);\n\t\tlayer.addEventListener('mouseup', this.onMouse, true);\n\t}\n\n\tlayer.addEventListener('click', this.onClick, true);\n\tlayer.addEventListener('touchstart', this.onTouchStart, false);\n\tlayer.addEventListener('touchmove', this.onTouchMove, false);\n\tlayer.addEventListener('touchend', this.onTouchEnd, false);\n\tlayer.addEventListener('touchcancel', this.onTouchCancel, false);\n\n\t// Hack is required for browsers that don't support Event#stopImmediatePropagation (e.g. Android 2)\n\t// which is how FastClick normally stops click events bubbling to callbacks registered on the FastClick\n\t// layer when they are cancelled.\n\tif (!Event.prototype.stopImmediatePropagation) {\n\t\tlayer.removeEventListener = function(type, callback, capture) {\n\t\t\tvar rmv = Node.prototype.removeEventListener;\n\t\t\tif (type === 'click') {\n\t\t\t\trmv.call(layer, type, callback.hijacked || callback, capture);\n\t\t\t} else {\n\t\t\t\trmv.call(layer, type, callback, capture);\n\t\t\t}\n\t\t};\n\n\t\tlayer.addEventListener = function(type, callback, capture) {\n\t\t\tvar adv = Node.prototype.addEventListener;\n\t\t\tif (type === 'click') {\n\t\t\t\tadv.call(layer, type, callback.hijacked || (callback.hijacked = function(event) {\n\t\t\t\t\tif (!event.propagationStopped) {\n\t\t\t\t\t\tcallback(event);\n\t\t\t\t\t}\n\t\t\t\t}), capture);\n\t\t\t} else {\n\t\t\t\tadv.call(layer, type, callback, capture);\n\t\t\t}\n\t\t};\n\t}\n\n\t// If a handler is already declared in the element's onclick attribute, it will be fired before\n\t// FastClick's onClick handler. Fix this by pulling out the user-defined handler function and\n\t// adding it as listener.\n\tif (typeof layer.onclick === 'function') {\n\n\t\t// Android browser on at least 3.2 requires a new reference to the function in layer.onclick\n\t\t// - the old one won't work if passed to addEventListener directly.\n\t\toldOnClick = layer.onclick;\n\t\tlayer.addEventListener('click', function(event) {\n\t\t\toldOnClick(event);\n\t\t}, false);\n\t\tlayer.onclick = null;\n\t}\n}\n\n\n/**\n * Android requires exceptions.\n *\n * @type boolean\n */\nFastClick.prototype.deviceIsAndroid = navigator.userAgent.indexOf('Android') > 0;\n\n\n/**\n * iOS requires exceptions.\n *\n * @type boolean\n */\nFastClick.prototype.deviceIsIOS = /iP(ad|hone|od)/.test(navigator.userAgent);\n\n\n/**\n * iOS 4 requires an exception for select elements.\n *\n * @type boolean\n */\nFastClick.prototype.deviceIsIOS4 = FastClick.prototype.deviceIsIOS && (/OS 4_\\d(_\\d)?/).test(navigator.userAgent);\n\n\n/**\n * iOS 6.0(+?) requires the target element to be manually derived\n *\n * @type boolean\n */\nFastClick.prototype.deviceIsIOSWithBadTarget = FastClick.prototype.deviceIsIOS && (/OS ([6-9]|\\d{2})_\\d/).test(navigator.userAgent);\n\n\n/**\n * Determine whether a given element requires a native click.\n *\n * @param {EventTarget|Element} target Target DOM element\n * @returns {boolean} Returns true if the element needs a native click\n */\nFastClick.prototype.needsClick = function(target) {\n\t'use strict';\n\tswitch (target.nodeName.toLowerCase()) {\n\n\t// Don't send a synthetic click to disabled inputs (issue #62)\n\tcase 'button':\n\tcase 'select':\n\tcase 'textarea':\n\t\tif (target.disabled) {\n\t\t\treturn true;\n\t\t}\n\n\t\tbreak;\n\tcase 'input':\n\n\t\t// File inputs need real clicks on iOS 6 due to a browser bug (issue #68)\n\t\tif ((this.deviceIsIOS && target.type === 'file') || target.disabled) {\n\t\t\treturn true;\n\t\t}\n\n\t\tbreak;\n\tcase 'label':\n\tcase 'video':\n\t\treturn true;\n\t}\n\n\treturn (/\\bneedsclick\\b/).test(target.className);\n};\n\n\n/**\n * Determine whether a given element requires a call to focus to simulate click into element.\n *\n * @param {EventTarget|Element} target Target DOM element\n * @returns {boolean} Returns true if the element requires a call to focus to simulate native click.\n */\nFastClick.prototype.needsFocus = function(target) {\n\t'use strict';\n\tswitch (target.nodeName.toLowerCase()) {\n\tcase 'textarea':\n\t\treturn true;\n\tcase 'select':\n\t\treturn !this.deviceIsAndroid;\n\tcase 'input':\n\t\tswitch (target.type) {\n\t\tcase 'button':\n\t\tcase 'checkbox':\n\t\tcase 'file':\n\t\tcase 'image':\n\t\tcase 'radio':\n\t\tcase 'submit':\n\t\t\treturn false;\n\t\t}\n\n\t\t// No point in attempting to focus disabled inputs\n\t\treturn !target.disabled && !target.readOnly;\n\tdefault:\n\t\treturn (/\\bneedsfocus\\b/).test(target.className);\n\t}\n};\n\n\n/**\n * Send a click event to the specified element.\n *\n * @param {EventTarget|Element} targetElement\n * @param {Event} event\n */\nFastClick.prototype.sendClick = function(targetElement, event) {\n\t'use strict';\n\tvar clickEvent, touch;\n\n\t// On some Android devices activeElement needs to be blurred otherwise the synthetic click will have no effect (#24)\n\tif (document.activeElement && document.activeElement !== targetElement) {\n\t\tdocument.activeElement.blur();\n\t}\n\n\ttouch = event.changedTouches[0];\n\n\t// Synthesise a click event, with an extra attribute so it can be tracked\n\tclickEvent = document.createEvent('MouseEvents');\n\tclickEvent.initMouseEvent(this.determineEventType(targetElement), true, true, window, 1, touch.screenX, touch.screenY, touch.clientX, touch.clientY, false, false, false, false, 0, null);\n\tclickEvent.forwardedTouchEvent = true;\n\ttargetElement.dispatchEvent(clickEvent);\n};\n\nFastClick.prototype.determineEventType = function(targetElement) {\n\t'use strict';\n\n\t//Issue #159: Android Chrome Select Box does not open with a synthetic click event\n\tif (this.deviceIsAndroid && targetElement.tagName.toLowerCase() === 'select') {\n\t\treturn 'mousedown';\n\t}\n\n\treturn 'click';\n};\n\n\n/**\n * @param {EventTarget|Element} targetElement\n */\nFastClick.prototype.focus = function(targetElement) {\n\t'use strict';\n\tvar length;\n\n\t// Issue #160: on iOS 7, some input elements (e.g. date datetime) throw a vague TypeError on setSelectionRange. These elements don't have an integer value for the selectionStart and selectionEnd properties, but unfortunately that can't be used for detection because accessing the properties also throws a TypeError. Just check the type instead. Filed as Apple bug #15122724.\n\tif (this.deviceIsIOS && targetElement.setSelectionRange && targetElement.type.indexOf('date') !== 0 && targetElement.type !== 'time') {\n\t\tlength = targetElement.value.length;\n\t\ttargetElement.setSelectionRange(length, length);\n\t} else {\n\t\ttargetElement.focus();\n\t}\n};\n\n\n/**\n * Check whether the given target element is a child of a scrollable layer and if so, set a flag on it.\n *\n * @param {EventTarget|Element} targetElement\n */\nFastClick.prototype.updateScrollParent = function(targetElement) {\n\t'use strict';\n\tvar scrollParent, parentElement;\n\n\tscrollParent = targetElement.fastClickScrollParent;\n\n\t// Attempt to discover whether the target element is contained within a scrollable layer. Re-check if the\n\t// target element was moved to another parent.\n\tif (!scrollParent || !scrollParent.contains(targetElement)) {\n\t\tparentElement = targetElement;\n\t\tdo {\n\t\t\tif (parentElement.scrollHeight > parentElement.offsetHeight) {\n\t\t\t\tscrollParent = parentElement;\n\t\t\t\ttargetElement.fastClickScrollParent = parentElement;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tparentElement = parentElement.parentElement;\n\t\t} while (parentElement);\n\t}\n\n\t// Always update the scroll top tracker if possible.\n\tif (scrollParent) {\n\t\tscrollParent.fastClickLastScrollTop = scrollParent.scrollTop;\n\t}\n};\n\n\n/**\n * @param {EventTarget} targetElement\n * @returns {Element|EventTarget}\n */\nFastClick.prototype.getTargetElementFromEventTarget = function(eventTarget) {\n\t'use strict';\n\n\t// On some older browsers (notably Safari on iOS 4.1 - see issue #56) the event target may be a text node.\n\tif (eventTarget.nodeType === Node.TEXT_NODE) {\n\t\treturn eventTarget.parentNode;\n\t}\n\n\treturn eventTarget;\n};\n\n\n/**\n * On touch start, record the position and scroll offset.\n *\n * @param {Event} event\n * @returns {boolean}\n */\nFastClick.prototype.onTouchStart = function(event) {\n\t'use strict';\n\tvar targetElement, touch, selection;\n\n\t// Ignore multiple touches, otherwise pinch-to-zoom is prevented if both fingers are on the FastClick element (issue #111).\n\tif (event.targetTouches.length > 1) {\n\t\treturn true;\n\t}\n\n\ttargetElement = this.getTargetElementFromEventTarget(event.target);\n\ttouch = event.targetTouches[0];\n\n\tif (this.deviceIsIOS) {\n\n\t\t// Only trusted events will deselect text on iOS (issue #49)\n\t\tselection = window.getSelection();\n\t\tif (selection.rangeCount && !selection.isCollapsed) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (!this.deviceIsIOS4) {\n\n\t\t\t// Weird things happen on iOS when an alert or confirm dialog is opened from a click event callback (issue #23):\n\t\t\t// when the user next taps anywhere else on the page, new touchstart and touchend events are dispatched\n\t\t\t// with the same identifier as the touch event that previously triggered the click that triggered the alert.\n\t\t\t// Sadly, there is an issue on iOS 4 that causes some normal touch events to have the same identifier as an\n\t\t\t// immediately preceeding touch event (issue #52), so this fix is unavailable on that platform.\n\t\t\tif (touch.identifier === this.lastTouchIdentifier) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tthis.lastTouchIdentifier = touch.identifier;\n\n\t\t\t// If the target element is a child of a scrollable layer (using -webkit-overflow-scrolling: touch) and:\n\t\t\t// 1) the user does a fling scroll on the scrollable layer\n\t\t\t// 2) the user stops the fling scroll with another tap\n\t\t\t// then the event.target of the last 'touchend' event will be the element that was under the user's finger\n\t\t\t// when the fling scroll was started, causing FastClick to send a click event to that layer - unless a check\n\t\t\t// is made to ensure that a parent layer was not scrolled before sending a synthetic click (issue #42).\n\t\t\tthis.updateScrollParent(targetElement);\n\t\t}\n\t}\n\n\tthis.trackingClick = true;\n\tthis.trackingClickStart = event.timeStamp;\n\tthis.targetElement = targetElement;\n\n\tthis.touchStartX = touch.pageX;\n\tthis.touchStartY = touch.pageY;\n\n\t// Prevent phantom clicks on fast double-tap (issue #36)\n\tif ((event.timeStamp - this.lastClickTime) < 200) {\n\t\tevent.preventDefault();\n\t}\n\n\treturn true;\n};\n\n\n/**\n * Based on a touchmove event object, check whether the touch has moved past a boundary since it started.\n *\n * @param {Event} event\n * @returns {boolean}\n */\nFastClick.prototype.touchHasMoved = function(event) {\n\t'use strict';\n\tvar touch = event.changedTouches[0], boundary = this.touchBoundary;\n\n\tif (Math.abs(touch.pageX - this.touchStartX) > boundary || Math.abs(touch.pageY - this.touchStartY) > boundary) {\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n\n\n/**\n * Update the last position.\n *\n * @param {Event} event\n * @returns {boolean}\n */\nFastClick.prototype.onTouchMove = function(event) {\n\t'use strict';\n\tif (!this.trackingClick) {\n\t\treturn true;\n\t}\n\n\t// If the touch has moved, cancel the click tracking\n\tif (this.targetElement !== this.getTargetElementFromEventTarget(event.target) || this.touchHasMoved(event)) {\n\t\tthis.trackingClick = false;\n\t\tthis.targetElement = null;\n\t}\n\n\treturn true;\n};\n\n\n/**\n * Attempt to find the labelled control for the given label element.\n *\n * @param {EventTarget|HTMLLabelElement} labelElement\n * @returns {Element|null}\n */\nFastClick.prototype.findControl = function(labelElement) {\n\t'use strict';\n\n\t// Fast path for newer browsers supporting the HTML5 control attribute\n\tif (labelElement.control !== undefined) {\n\t\treturn labelElement.control;\n\t}\n\n\t// All browsers under test that support touch events also support the HTML5 htmlFor attribute\n\tif (labelElement.htmlFor) {\n\t\treturn document.getElementById(labelElement.htmlFor);\n\t}\n\n\t// If no for attribute exists, attempt to retrieve the first labellable descendant element\n\t// the list of which is defined here: http://www.w3.org/TR/html5/forms.html#category-label\n\treturn labelElement.querySelector('button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea');\n};\n\n\n/**\n * On touch end, determine whether to send a click event at once.\n *\n * @param {Event} event\n * @returns {boolean}\n */\nFastClick.prototype.onTouchEnd = function(event) {\n\t'use strict';\n\tvar forElement, trackingClickStart, targetTagName, scrollParent, touch, targetElement = this.targetElement;\n\n\tif (!this.trackingClick) {\n\t\treturn true;\n\t}\n\n\t// Prevent phantom clicks on fast double-tap (issue #36)\n\tif ((event.timeStamp - this.lastClickTime) < 200) {\n\t\tthis.cancelNextClick = true;\n\t\treturn true;\n\t}\n\n\t// Reset to prevent wrong click cancel on input (issue #156).\n\tthis.cancelNextClick = false;\n\n\tthis.lastClickTime = event.timeStamp;\n\n\ttrackingClickStart = this.trackingClickStart;\n\tthis.trackingClick = false;\n\tthis.trackingClickStart = 0;\n\n\t// On some iOS devices, the targetElement supplied with the event is invalid if the layer\n\t// is performing a transition or scroll, and has to be re-detected manually. Note that\n\t// for this to function correctly, it must be called *after* the event target is checked!\n\t// See issue #57; also filed as rdar://13048589 .\n\tif (this.deviceIsIOSWithBadTarget) {\n\t\ttouch = event.changedTouches[0];\n\n\t\t// In certain cases arguments of elementFromPoint can be negative, so prevent setting targetElement to null\n\t\ttargetElement = document.elementFromPoint(touch.pageX - window.pageXOffset, touch.pageY - window.pageYOffset) || targetElement;\n\t\ttargetElement.fastClickScrollParent = this.targetElement.fastClickScrollParent;\n\t}\n\n\ttargetTagName = targetElement.tagName.toLowerCase();\n\tif (targetTagName === 'label') {\n\t\tforElement = this.findControl(targetElement);\n\t\tif (forElement) {\n\t\t\tthis.focus(targetElement);\n\t\t\tif (this.deviceIsAndroid) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\ttargetElement = forElement;\n\t\t}\n\t} else if (this.needsFocus(targetElement)) {\n\n\t\t// Case 1: If the touch started a while ago (best guess is 100ms based on tests for issue #36) then focus will be triggered anyway. Return early and unset the target element reference so that the subsequent click will be allowed through.\n\t\t// Case 2: Without this exception for input elements tapped when the document is contained in an iframe, then any inputted text won't be visible even though the value attribute is updated as the user types (issue #37).\n\t\tif ((event.timeStamp - trackingClickStart) > 100 || (this.deviceIsIOS && window.top !== window && targetTagName === 'input')) {\n\t\t\tthis.targetElement = null;\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.focus(targetElement);\n\n\t\t// Select elements need the event to go through on iOS 4, otherwise the selector menu won't open.\n\t\tif (!this.deviceIsIOS4 || targetTagName !== 'select') {\n\t\t\tthis.targetElement = null;\n\t\t\tevent.preventDefault();\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tif (this.deviceIsIOS && !this.deviceIsIOS4) {\n\n\t\t// Don't send a synthetic click event if the target element is contained within a parent layer that was scrolled\n\t\t// and this tap is being used to stop the scrolling (usually initiated by a fling - issue #42).\n\t\tscrollParent = targetElement.fastClickScrollParent;\n\t\tif (scrollParent && scrollParent.fastClickLastScrollTop !== scrollParent.scrollTop) {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\t// Prevent the actual click from going though - unless the target node is marked as requiring\n\t// real clicks or if it is in the whitelist in which case only non-programmatic clicks are permitted.\n\tif (!this.needsClick(targetElement)) {\n\t\tevent.preventDefault();\n\t\tthis.sendClick(targetElement, event);\n\t}\n\n\treturn false;\n};\n\n\n/**\n * On touch cancel, stop tracking the click.\n *\n * @returns {void}\n */\nFastClick.prototype.onTouchCancel = function() {\n\t'use strict';\n\tthis.trackingClick = false;\n\tthis.targetElement = null;\n};\n\n\n/**\n * Determine mouse events which should be permitted.\n *\n * @param {Event} event\n * @returns {boolean}\n */\nFastClick.prototype.onMouse = function(event) {\n\t'use strict';\n\n\t// If a target element was never set (because a touch event was never fired) allow the event\n\tif (!this.targetElement) {\n\t\treturn true;\n\t}\n\n\tif (event.forwardedTouchEvent) {\n\t\treturn true;\n\t}\n\n\t// Programmatically generated events targeting a specific element should be permitted\n\tif (!event.cancelable) {\n\t\treturn true;\n\t}\n\n\t// Derive and check the target element to see whether the mouse event needs to be permitted;\n\t// unless explicitly enabled, prevent non-touch click events from triggering actions,\n\t// to prevent ghost/doubleclicks.\n\tif (!this.needsClick(this.targetElement) || this.cancelNextClick) {\n\n\t\t// Prevent any user-added listeners declared on FastClick element from being fired.\n\t\tif (event.stopImmediatePropagation) {\n\t\t\tevent.stopImmediatePropagation();\n\t\t} else {\n\n\t\t\t// Part of the hack for browsers that don't support Event#stopImmediatePropagation (e.g. Android 2)\n\t\t\tevent.propagationStopped = true;\n\t\t}\n\n\t\t// Cancel the event\n\t\tevent.stopPropagation();\n\t\tevent.preventDefault();\n\n\t\treturn false;\n\t}\n\n\t// If the mouse event is permitted, return true for the action to go through.\n\treturn true;\n};\n\n\n/**\n * On actual clicks, determine whether this is a touch-generated click, a click action occurring\n * naturally after a delay after a touch (which needs to be cancelled to avoid duplication), or\n * an actual click which should be permitted.\n *\n * @param {Event} event\n * @returns {boolean}\n */\nFastClick.prototype.onClick = function(event) {\n\t'use strict';\n\tvar permitted;\n\n\t// It's possible for another FastClick-like library delivered with third-party code to fire a click event before FastClick does (issue #44). In that case, set the click-tracking flag back to false and return early. This will cause onTouchEnd to return early.\n\tif (this.trackingClick) {\n\t\tthis.targetElement = null;\n\t\tthis.trackingClick = false;\n\t\treturn true;\n\t}\n\n\t// Very odd behaviour on iOS (issue #18): if a submit element is present inside a form and the user hits enter in the iOS simulator or clicks the Go button on the pop-up OS keyboard the a kind of 'fake' click event will be triggered with the submit-type input element as the target.\n\tif (event.target.type === 'submit' && event.detail === 0) {\n\t\treturn true;\n\t}\n\n\tpermitted = this.onMouse(event);\n\n\t// Only unset targetElement if the click is not permitted. This will ensure that the check for !targetElement in onMouse fails and the browser's click doesn't go through.\n\tif (!permitted) {\n\t\tthis.targetElement = null;\n\t}\n\n\t// If clicks are permitted, return true for the action to go through.\n\treturn permitted;\n};\n\n\n/**\n * Remove all FastClick's event listeners.\n *\n * @returns {void}\n */\nFastClick.prototype.destroy = function() {\n\t'use strict';\n\tvar layer = this.layer;\n\n\tif (this.deviceIsAndroid) {\n\t\tlayer.removeEventListener('mouseover', this.onMouse, true);\n\t\tlayer.removeEventListener('mousedown', this.onMouse, true);\n\t\tlayer.removeEventListener('mouseup', this.onMouse, true);\n\t}\n\n\tlayer.removeEventListener('click', this.onClick, true);\n\tlayer.removeEventListener('touchstart', this.onTouchStart, false);\n\tlayer.removeEventListener('touchmove', this.onTouchMove, false);\n\tlayer.removeEventListener('touchend', this.onTouchEnd, false);\n\tlayer.removeEventListener('touchcancel', this.onTouchCancel, false);\n};\n\n\n/**\n * Check whether FastClick is needed.\n *\n * @param {Element} layer The layer to listen on\n */\nFastClick.notNeeded = function(layer) {\n\t'use strict';\n\tvar metaViewport;\n\tvar chromeVersion;\n\n\t// Devices that don't support touch don't need FastClick\n\tif (typeof window.ontouchstart === 'undefined') {\n\t\treturn true;\n\t}\n\n\t// Chrome version - zero for other browsers\n\tchromeVersion = +(/Chrome\\/([0-9]+)/.exec(navigator.userAgent) || [,0])[1];\n\n\tif (chromeVersion) {\n\n\t\tif (FastClick.prototype.deviceIsAndroid) {\n\t\t\tmetaViewport = document.querySelector('meta[name=viewport]');\n\t\t\t\n\t\t\tif (metaViewport) {\n\t\t\t\t// Chrome on Android with user-scalable=\"no\" doesn't need FastClick (issue #89)\n\t\t\t\tif (metaViewport.content.indexOf('user-scalable=no') !== -1) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\t// Chrome 32 and above with width=device-width or less don't need FastClick\n\t\t\t\tif (chromeVersion > 31 && window.innerWidth <= window.screen.width) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Chrome desktop doesn't need FastClick (issue #15)\n\t\t} else {\n\t\t\treturn true;\n\t\t}\n\t}\n\n\t// IE10 with -ms-touch-action: none, which disables double-tap-to-zoom (issue #97)\n\tif (layer.style.msTouchAction === 'none') {\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n\n\n/**\n * Factory method for creating a FastClick object\n *\n * @param {Element} layer The layer to listen on\n */\nFastClick.attach = function(layer) {\n\t'use strict';\n\treturn new FastClick(layer);\n};\n\n\nif (typeof define !== 'undefined' && define.amd) {\n\n\t// AMD. Register as an anonymous module.\n\tdefine(function() {\n\t\t'use strict';\n\t\treturn FastClick;\n\t});\n} else if (typeof module !== 'undefined' && module.exports) {\n\tmodule.exports = FastClick.attach;\n\tmodule.exports.FastClick = FastClick;\n} else {\n\twindow.FastClick = FastClick;\n}\n\n});\n\nrequire.register(\"component~indexof@0.0.3\", function (exports, module) {\nmodule.exports = function(arr, obj){\n  if (arr.indexOf) return arr.indexOf(obj);\n  for (var i = 0; i < arr.length; ++i) {\n    if (arr[i] === obj) return i;\n  }\n  return -1;\n};\n});\n\nrequire.register(\"component~classes@1.2.1\", function (exports, module) {\n/**\n * Module dependencies.\n */\n\nvar index = require('component~indexof@0.0.3');\n\n/**\n * Whitespace regexp.\n */\n\nvar re = /\\s+/;\n\n/**\n * toString reference.\n */\n\nvar toString = Object.prototype.toString;\n\n/**\n * Wrap `el` in a `ClassList`.\n *\n * @param {Element} el\n * @return {ClassList}\n * @api public\n */\n\nmodule.exports = function(el){\n  return new ClassList(el);\n};\n\n/**\n * Initialize a new ClassList for `el`.\n *\n * @param {Element} el\n * @api private\n */\n\nfunction ClassList(el) {\n  if (!el) throw new Error('A DOM element reference is required');\n  this.el = el;\n  this.list = el.classList;\n}\n\n/**\n * Add class `name` if not already present.\n *\n * @param {String} name\n * @return {ClassList}\n * @api public\n */\n\nClassList.prototype.add = function(name){\n  // classList\n  if (this.list) {\n    this.list.add(name);\n    return this;\n  }\n\n  // fallback\n  var arr = this.array();\n  var i = index(arr, name);\n  if (!~i) arr.push(name);\n  this.el.className = arr.join(' ');\n  return this;\n};\n\n/**\n * Remove class `name` when present, or\n * pass a regular expression to remove\n * any which match.\n *\n * @param {String|RegExp} name\n * @return {ClassList}\n * @api public\n */\n\nClassList.prototype.remove = function(name){\n  if ('[object RegExp]' == toString.call(name)) {\n    return this.removeMatching(name);\n  }\n\n  // classList\n  if (this.list) {\n    this.list.remove(name);\n    return this;\n  }\n\n  // fallback\n  var arr = this.array();\n  var i = index(arr, name);\n  if (~i) arr.splice(i, 1);\n  this.el.className = arr.join(' ');\n  return this;\n};\n\n/**\n * Remove all classes matching `re`.\n *\n * @param {RegExp} re\n * @return {ClassList}\n * @api private\n */\n\nClassList.prototype.removeMatching = function(re){\n  var arr = this.array();\n  for (var i = 0; i < arr.length; i++) {\n    if (re.test(arr[i])) {\n      this.remove(arr[i]);\n    }\n  }\n  return this;\n};\n\n/**\n * Toggle class `name`, can force state via `force`.\n *\n * For browsers that support classList, but do not support `force` yet,\n * the mistake will be detected and corrected.\n *\n * @param {String} name\n * @param {Boolean} force\n * @return {ClassList}\n * @api public\n */\n\nClassList.prototype.toggle = function(name, force){\n  // classList\n  if (this.list) {\n    if (\"undefined\" !== typeof force) {\n      if (force !== this.list.toggle(name, force)) {\n        this.list.toggle(name); // toggle again to correct\n      }\n    } else {\n      this.list.toggle(name);\n    }\n    return this;\n  }\n\n  // fallback\n  if (\"undefined\" !== typeof force) {\n    if (!force) {\n      this.remove(name);\n    } else {\n      this.add(name);\n    }\n  } else {\n    if (this.has(name)) {\n      this.remove(name);\n    } else {\n      this.add(name);\n    }\n  }\n\n  return this;\n};\n\n/**\n * Return an array of classes.\n *\n * @return {Array}\n * @api public\n */\n\nClassList.prototype.array = function(){\n  var str = this.el.className.replace(/^\\s+|\\s+$/g, '');\n  var arr = str.split(re);\n  if ('' === arr[0]) arr.shift();\n  return arr;\n};\n\n/**\n * Check if class `name` is present.\n *\n * @param {String} name\n * @return {ClassList}\n * @api public\n */\n\nClassList.prototype.has =\nClassList.prototype.contains = function(name){\n  return this.list\n    ? this.list.contains(name)\n    : !! ~index(this.array(), name);\n};\n\n});\n\nrequire.register(\"component~event@0.1.4\", function (exports, module) {\nvar bind = window.addEventListener ? 'addEventListener' : 'attachEvent',\n    unbind = window.removeEventListener ? 'removeEventListener' : 'detachEvent',\n    prefix = bind !== 'addEventListener' ? 'on' : '';\n\n/**\n * Bind `el` event `type` to `fn`.\n *\n * @param {Element} el\n * @param {String} type\n * @param {Function} fn\n * @param {Boolean} capture\n * @return {Function}\n * @api public\n */\n\nexports.bind = function(el, type, fn, capture){\n  el[bind](prefix + type, fn, capture || false);\n  return fn;\n};\n\n/**\n * Unbind `el` event `type`'s callback `fn`.\n *\n * @param {Element} el\n * @param {String} type\n * @param {Function} fn\n * @param {Boolean} capture\n * @return {Function}\n * @api public\n */\n\nexports.unbind = function(el, type, fn, capture){\n  el[unbind](prefix + type, fn, capture || false);\n  return fn;\n};\n});\n\nrequire.register(\"component~query@0.0.3\", function (exports, module) {\nfunction one(selector, el) {\n  return el.querySelector(selector);\n}\n\nexports = module.exports = function(selector, el){\n  el = el || document;\n  return one(selector, el);\n};\n\nexports.all = function(selector, el){\n  el = el || document;\n  return el.querySelectorAll(selector);\n};\n\nexports.engine = function(obj){\n  if (!obj.one) throw new Error('.one callback required');\n  if (!obj.all) throw new Error('.all callback required');\n  one = obj.one;\n  exports.all = obj.all;\n  return exports;\n};\n\n});\n\nrequire.register(\"component~matches-selector@0.1.5\", function (exports, module) {\n/**\n * Module dependencies.\n */\n\nvar query = require('component~query@0.0.3');\n\n/**\n * Element prototype.\n */\n\nvar proto = Element.prototype;\n\n/**\n * Vendor function.\n */\n\nvar vendor = proto.matches\n  || proto.webkitMatchesSelector\n  || proto.mozMatchesSelector\n  || proto.msMatchesSelector\n  || proto.oMatchesSelector;\n\n/**\n * Expose `match()`.\n */\n\nmodule.exports = match;\n\n/**\n * Match `el` to `selector`.\n *\n * @param {Element} el\n * @param {String} selector\n * @return {Boolean}\n * @api public\n */\n\nfunction match(el, selector) {\n  if (!el || el.nodeType !== 1) return false;\n  if (vendor) return vendor.call(el, selector);\n  var nodes = query.all(selector, el.parentNode);\n  for (var i = 0; i < nodes.length; ++i) {\n    if (nodes[i] == el) return true;\n  }\n  return false;\n}\n\n});\n\nrequire.register(\"component~closest@0.1.4\", function (exports, module) {\nvar matches = require('component~matches-selector@0.1.5')\n\nmodule.exports = function (element, selector, checkYoSelf, root) {\n  element = checkYoSelf ? {parentNode: element} : element\n\n  root = root || document\n\n  // Make sure `element !== document` and `element != null`\n  // otherwise we get an illegal invocation\n  while ((element = element.parentNode) && element !== document) {\n    if (matches(element, selector))\n      return element\n    // After `matches` on the edge case that\n    // the selector matches the root\n    // (when the root is not the document)\n    if (element === root)\n      return\n  }\n}\n\n});\n\nrequire.register(\"component~delegate@0.2.3\", function (exports, module) {\n/**\n * Module dependencies.\n */\n\nvar closest = require('component~closest@0.1.4')\n  , event = require('component~event@0.1.4');\n\n/**\n * Delegate event `type` to `selector`\n * and invoke `fn(e)`. A callback function\n * is returned which may be passed to `.unbind()`.\n *\n * @param {Element} el\n * @param {String} selector\n * @param {String} type\n * @param {Function} fn\n * @param {Boolean} capture\n * @return {Function}\n * @api public\n */\n\nexports.bind = function(el, selector, type, fn, capture){\n  return event.bind(el, type, function(e){\n    var target = e.target || e.srcElement;\n    e.delegateTarget = closest(target, selector, true, el);\n    if (e.delegateTarget) fn.call(el, e);\n  }, capture);\n};\n\n/**\n * Unbind event `type`'s callback `fn`.\n *\n * @param {Element} el\n * @param {String} type\n * @param {Function} fn\n * @param {Boolean} capture\n * @api public\n */\n\nexports.unbind = function(el, type, fn, capture){\n  event.unbind(el, type, fn, capture);\n};\n\n});\n\nrequire.register(\"component~events@1.0.9\", function (exports, module) {\n\n/**\n * Module dependencies.\n */\n\nvar events = require('component~event@0.1.4');\nvar delegate = require('component~delegate@0.2.3');\n\n/**\n * Expose `Events`.\n */\n\nmodule.exports = Events;\n\n/**\n * Initialize an `Events` with the given\n * `el` object which events will be bound to,\n * and the `obj` which will receive method calls.\n *\n * @param {Object} el\n * @param {Object} obj\n * @api public\n */\n\nfunction Events(el, obj) {\n  if (!(this instanceof Events)) return new Events(el, obj);\n  if (!el) throw new Error('element required');\n  if (!obj) throw new Error('object required');\n  this.el = el;\n  this.obj = obj;\n  this._events = {};\n}\n\n/**\n * Subscription helper.\n */\n\nEvents.prototype.sub = function(event, method, cb){\n  this._events[event] = this._events[event] || {};\n  this._events[event][method] = cb;\n};\n\n/**\n * Bind to `event` with optional `method` name.\n * When `method` is undefined it becomes `event`\n * with the \"on\" prefix.\n *\n * Examples:\n *\n *  Direct event handling:\n *\n *    events.bind('click') // implies \"onclick\"\n *    events.bind('click', 'remove')\n *    events.bind('click', 'sort', 'asc')\n *\n *  Delegated event handling:\n *\n *    events.bind('click li > a')\n *    events.bind('click li > a', 'remove')\n *    events.bind('click a.sort-ascending', 'sort', 'asc')\n *    events.bind('click a.sort-descending', 'sort', 'desc')\n *\n * @param {String} event\n * @param {String|function} [method]\n * @return {Function} callback\n * @api public\n */\n\nEvents.prototype.bind = function(event, method){\n  var e = parse(event);\n  var el = this.el;\n  var obj = this.obj;\n  var name = e.name;\n  var method = method || 'on' + name;\n  var args = [].slice.call(arguments, 2);\n\n  // callback\n  function cb(){\n    var a = [].slice.call(arguments).concat(args);\n    obj[method].apply(obj, a);\n  }\n\n  // bind\n  if (e.selector) {\n    cb = delegate.bind(el, e.selector, name, cb);\n  } else {\n    events.bind(el, name, cb);\n  }\n\n  // subscription for unbinding\n  this.sub(name, method, cb);\n\n  return cb;\n};\n\n/**\n * Unbind a single binding, all bindings for `event`,\n * or all bindings within the manager.\n *\n * Examples:\n *\n *  Unbind direct handlers:\n *\n *     events.unbind('click', 'remove')\n *     events.unbind('click')\n *     events.unbind()\n *\n * Unbind delegate handlers:\n *\n *     events.unbind('click', 'remove')\n *     events.unbind('click')\n *     events.unbind()\n *\n * @param {String|Function} [event]\n * @param {String|Function} [method]\n * @api public\n */\n\nEvents.prototype.unbind = function(event, method){\n  if (0 == arguments.length) return this.unbindAll();\n  if (1 == arguments.length) return this.unbindAllOf(event);\n\n  // no bindings for this event\n  var bindings = this._events[event];\n  if (!bindings) return;\n\n  // no bindings for this method\n  var cb = bindings[method];\n  if (!cb) return;\n\n  events.unbind(this.el, event, cb);\n};\n\n/**\n * Unbind all events.\n *\n * @api private\n */\n\nEvents.prototype.unbindAll = function(){\n  for (var event in this._events) {\n    this.unbindAllOf(event);\n  }\n};\n\n/**\n * Unbind all events for `event`.\n *\n * @param {String} event\n * @api private\n */\n\nEvents.prototype.unbindAllOf = function(event){\n  var bindings = this._events[event];\n  if (!bindings) return;\n\n  for (var method in bindings) {\n    this.unbind(event, method);\n  }\n};\n\n/**\n * Parse `event`.\n *\n * @param {String} event\n * @return {Object}\n * @api private\n */\n\nfunction parse(event) {\n  var parts = event.split(/ +/);\n  return {\n    name: parts.shift(),\n    selector: parts.join(' ')\n  }\n}\n\n});\n\nrequire.register(\"switchery\", function (exports, module) {\n/**\n * Switchery 0.8.1\n * http://abpetkov.github.io/switchery/\n *\n * Authored by Alexander Petkov\n * https://github.com/abpetkov\n *\n * Copyright 2013-2015, Alexander Petkov\n * License: The MIT License (MIT)\n * http://opensource.org/licenses/MIT\n *\n */\n\n/**\n * External dependencies.\n */\n\nvar transitionize = require('abpetkov~transitionize@0.0.3')\n  , fastclick = require('ftlabs~fastclick@v0.6.11')\n  , classes = require('component~classes@1.2.1')\n  , events = require('component~events@1.0.9');\n\n/**\n * Expose `Switchery`.\n */\n\nmodule.exports = Switchery;\n\n/**\n * Set Switchery default values.\n *\n * @api public\n */\n\nvar defaults = {\n    color             : '#64bd63'\n  , secondaryColor    : '#dfdfdf'\n  , jackColor         : '#fff'\n  , jackSecondaryColor: null\n  , className         : 'switchery'\n  , disabled          : false\n  , disabledOpacity   : 0.5\n  , speed             : '0.4s'\n  , size              : 'default'\n};\n\n/**\n * Create Switchery object.\n *\n * @param {Object} element\n * @param {Object} options\n * @api public\n */\n\nfunction Switchery(element, options) {\n  if (!(this instanceof Switchery)) return new Switchery(element, options);\n\n  this.element = element;\n  this.options = options || {};\n\n  for (var i in defaults) {\n    if (this.options[i] == null) {\n      this.options[i] = defaults[i];\n    }\n  }\n\n  if (this.element != null && this.element.type == 'checkbox') this.init();\n  if (this.isDisabled() === true) this.disable();\n}\n\n/**\n * Hide the target element.\n *\n * @api private\n */\n\nSwitchery.prototype.hide = function() {\n  this.element.style.display = 'none';\n};\n\n/**\n * Show custom switch after the target element.\n *\n * @api private\n */\n\nSwitchery.prototype.show = function() {\n  var switcher = this.create();\n  this.insertAfter(this.element, switcher);\n};\n\n/**\n * Create custom switch.\n *\n * @returns {Object} this.switcher\n * @api private\n */\n\nSwitchery.prototype.create = function() {\n  this.switcher = document.createElement('span');\n  this.jack = document.createElement('small');\n  this.switcher.appendChild(this.jack);\n  this.switcher.className = this.options.className;\n  this.events = events(this.switcher, this);\n\n  return this.switcher;\n};\n\n/**\n * Insert after element after another element.\n *\n * @param {Object} reference\n * @param {Object} target\n * @api private\n */\n\nSwitchery.prototype.insertAfter = function(reference, target) {\n  reference.parentNode.insertBefore(target, reference.nextSibling);\n};\n\n/**\n * Set switch jack proper position.\n *\n * @param {Boolean} clicked - we need this in order to uncheck the input when the switch is clicked\n * @api private\n */\n\nSwitchery.prototype.setPosition = function (clicked) {\n  var checked = this.isChecked()\n    , switcher = this.switcher\n    , jack = this.jack;\n\n  if (clicked && checked) checked = false;\n  else if (clicked && !checked) checked = true;\n\n  if (checked === true) {\n    this.element.checked = true;\n\n    if (window.getComputedStyle) jack.style.left = parseInt(window.getComputedStyle(switcher).width) - parseInt(window.getComputedStyle(jack).width) + 'px';\n    else jack.style.left = parseInt(switcher.currentStyle['width']) - parseInt(jack.currentStyle['width']) + 'px';\n\n    if (this.options.color) this.colorize();\n    this.setSpeed();\n  } else {\n    jack.style.left = 0;\n    this.element.checked = false;\n    this.switcher.style.boxShadow = 'inset 0 0 0 0 ' + this.options.secondaryColor;\n    this.switcher.style.borderColor = this.options.secondaryColor;\n    this.switcher.style.backgroundColor = (this.options.secondaryColor !== defaults.secondaryColor) ? this.options.secondaryColor : '#fff';\n    this.jack.style.backgroundColor = (this.options.jackSecondaryColor !== this.options.jackColor) ? this.options.jackSecondaryColor : this.options.jackColor;\n    this.setSpeed();\n  }\n};\n\n/**\n * Set speed.\n *\n * @api private\n */\n\nSwitchery.prototype.setSpeed = function() {\n  var switcherProp = {}\n    , jackProp = {\n        'background-color': this.options.speed\n      , 'left': this.options.speed.replace(/[a-z]/, '') / 2 + 's'\n    };\n\n  if (this.isChecked()) {\n    switcherProp = {\n        'border': this.options.speed\n      , 'box-shadow': this.options.speed\n      , 'background-color': this.options.speed.replace(/[a-z]/, '') * 3 + 's'\n    };\n  } else {\n    switcherProp = {\n        'border': this.options.speed\n      , 'box-shadow': this.options.speed\n    };\n  }\n\n  transitionize(this.switcher, switcherProp);\n  transitionize(this.jack, jackProp);\n};\n\n/**\n * Set switch size.\n *\n * @api private\n */\n\nSwitchery.prototype.setSize = function() {\n  var small = 'switchery-small',\n   normal = 'switchery-default',\n   large = 'switchery-large';\n\n  switch (this.options.size) {\n    case 'small':\n      classes(this.switcher).add(small);\n      break;\n    case 'large':\n      classes(this.switcher).add(large);\n      break;\n    default:\n      classes(this.switcher).add(normal);\n      break;\n  }\n};\n\n/**\n * Set switch color.\n *\n * @api private\n */\n\nSwitchery.prototype.colorize = function() {\n  var switcherHeight = this.switcher.offsetHeight / 2;\n\n  this.switcher.style.backgroundColor = this.options.color;\n  this.switcher.style.borderColor = this.options.color;\n  this.switcher.style.boxShadow = 'inset 0 0 0 ' + switcherHeight + 'px ' + this.options.color;\n  this.jack.style.backgroundColor = this.options.jackColor;\n};\n\n/**\n * Handle the onchange event.\n *\n * @param {Boolean} state\n * @api private\n */\n\nSwitchery.prototype.handleOnchange = function(state) {\n  if (document.dispatchEvent) {\n    var event = document.createEvent('HTMLEvents');\n    event.initEvent('change', true, true);\n    this.element.dispatchEvent(event);\n  } else {\n    this.element.fireEvent('onchange');\n  }\n};\n\n/**\n * Handle the native input element state change.\n * A `change` event must be fired in order to detect the change.\n *\n * @api private\n */\n\nSwitchery.prototype.handleChange = function() {\n  var self = this\n    , el = this.element;\n\n  if (el.addEventListener) {\n    el.addEventListener('change', function() {\n      self.setPosition();\n    });\n  } else {\n    el.attachEvent('onchange', function() {\n      self.setPosition();\n    });\n  }\n};\n\n/**\n * Handle the switch click event.\n *\n * @api private\n */\n\nSwitchery.prototype.handleClick = function() {\n  var switcher = this.switcher;\n\n  fastclick(switcher);\n  this.events.bind('click', 'bindClick');\n};\n\n/**\n * Attach all methods that need to happen on switcher click.\n *\n * @api private\n */\n\nSwitchery.prototype.bindClick = function() {\n  var parent = this.element.parentNode.tagName.toLowerCase()\n    , labelParent = (parent === 'label') ? false : true;\n\n  this.setPosition(labelParent);\n  this.handleOnchange(this.element.checked);\n};\n\n/**\n * Mark an individual switch as already handled.\n *\n * @api private\n */\n\nSwitchery.prototype.markAsSwitched = function() {\n  this.element.setAttribute('data-switchery', true);\n};\n\n/**\n * Check if an individual switch is already handled.\n *\n * @api private\n */\n\nSwitchery.prototype.markedAsSwitched = function() {\n  return this.element.getAttribute('data-switchery');\n};\n\n/**\n * Initialize Switchery.\n *\n * @api private\n */\n\nSwitchery.prototype.init = function() {\n  this.hide();\n  this.show();\n  this.setSize();\n  this.setPosition();\n  this.markAsSwitched();\n  this.handleChange();\n  this.handleClick();\n};\n\n/**\n * See if input is checked.\n *\n * @returns {Boolean}\n * @api public\n */\n\nSwitchery.prototype.isChecked = function() {\n  return this.element.checked;\n};\n\n/**\n * See if switcher should be disabled.\n *\n * @returns {Boolean}\n * @api public\n */\n\nSwitchery.prototype.isDisabled = function() {\n  return this.options.disabled || this.element.disabled || this.element.readOnly;\n};\n\n/**\n * Destroy all event handlers attached to the switch.\n *\n * @api public\n */\n\nSwitchery.prototype.destroy = function() {\n  this.events.unbind();\n};\n\n/**\n * Enable disabled switch element.\n *\n * @api public\n */\n\nSwitchery.prototype.enable = function() {\n  if (this.options.disabled) this.options.disabled = false;\n  if (this.element.disabled) this.element.disabled = false;\n  if (this.element.readOnly) this.element.readOnly = false;\n  this.switcher.style.opacity = 1;\n  this.events.bind('click', 'bindClick');\n};\n\n/**\n * Disable switch element.\n *\n * @api public\n */\n\nSwitchery.prototype.disable = function() {\n  if (!this.options.disabled) this.options.disabled = true;\n  if (!this.element.disabled) this.element.disabled = true;\n  if (!this.element.readOnly) this.element.readOnly = true;\n  this.switcher.style.opacity = this.options.disabledOpacity;\n  this.destroy();\n};\n\n});\n\nif (typeof exports == \"object\") {\n  module.exports = require(\"switchery\");\n} else if (typeof define == \"function\" && define.amd) {\n  define(\"Switchery\", [], function(){ return require(\"switchery\"); });\n} else {\n  (this || window)[\"Switchery\"] = require(\"switchery\");\n}\n})()\n"
  },
  {
    "path": "public/backend/vendors/js/forms/validation/jqBootstrapValidation.js",
    "content": "/*! jqBootstrapValidation - v1.3.7 - 2013-05-07\n* http://reactiveraven.github.com/jqBootstrapValidation\n* Copyright (c) 2013 David Godfrey; Licensed MIT */\n\n(function ($) {\n\n    var createdElements = [];\n\n    var defaults = {\n        options: {\n            prependExistingHelpBlock: false,\n            sniffHtml: true, // sniff for 'required', 'maxlength', etc\n            preventSubmit: true, // stop the form submit event from firing if validation fails\n            submitError: false, // function called if there is an error when trying to submit\n            submitSuccess: false, // function called just before a successful submit event is sent to the server\n            semanticallyStrict: false, // set to true to tidy up generated HTML output\n            removeSuccess : true,\n            bindEvents: [],\n            autoAdd: {\n                helpBlocks: true\n            },\n            filter: function () {\n                // return $(this).is(\":visible\"); // only validate elements you can see\n                return true; // validate everything\n            }\n        },\n        methods: {\n            init: function (options) {\n\n                // Get a clean copy of the defaults for extending\n                var settings = $.extend(true, {}, defaults);\n                // Set up the options based on the input\n                settings.options = $.extend(true, settings.options, options);\n\n                var $siblingElements = this;\n\n                var uniqueForms = $.unique(\n                    $siblingElements.map(function () {\n                        return $(this).parents(\"form\")[0];\n                    }).toArray()\n                );\n\n                $(uniqueForms).bind(\"submit.validationSubmit\", function (e) {\n                    var $form = $(this);\n                    var warningsFound = 0;\n                    // Get all inputs\n                    var $allInputs = $form.find(\"input,textarea,select\").not(\"[type=submit],[type=image]\").filter(settings.options.filter);\n                    var $allControlGroups = $form.find(\".form-group\");\n\n                    // Only trigger validation on the ones that actually _have_ validation\n                    var $inputsWithValidators = $allInputs.filter(function () {\n                        return $(this).triggerHandler(\"getValidatorCount.validation\") > 0;\n                    });\n                    $inputsWithValidators.trigger(\"submit.validation\");\n\n                    // But all of them are out-of-focus now, because we're submitting.\n                    $allInputs.trigger(\"validationLostFocus.validation\");\n\n                    // Okay, now check each controlgroup for errors (or warnings)\n                    $allControlGroups.each(function (i, el) {\n                        var $controlGroup = $(el);\n                        if ($controlGroup.hasClass(\"issue\") || $controlGroup.hasClass(\"error\")) {\n                            $controlGroup.removeClass(\"issue\").addClass(\"error\");\n                            warningsFound++;\n                        }\n                    });\n\n                    if (warningsFound) {\n                        // If we found any warnings, maybe we should prevent the submit\n                        // event, and trigger 'submitError' (if they're set up)\n                        if (settings.options.preventSubmit) {\n                            e.preventDefault();\n                            e.stopImmediatePropagation();\n                        }\n                        $form.addClass(\"error\");\n                        if ($.isFunction(settings.options.submitError)) {\n                            settings.options.submitError($form, e, $inputsWithValidators.jqBootstrapValidation(\"collectErrors\", true));\n                        }\n                    } else {\n                        // Woo! No errors! We can pass the submit event to submitSuccess\n                        // (if it has been set up)\n                        $form.removeClass(\"error\");\n                        if ($.isFunction(settings.options.submitSuccess)) {\n                            settings.options.submitSuccess($form, e);\n                        }\n                    }\n                });\n\n                return this.each(function () {\n\n                    // Get references to everything we're interested in\n                    var $this = $(this),\n                        $controlGroup = $this.parents(\".form-group\").first(),\n                        $helpBlock = $controlGroup.find(\".help-block\").first(),\n                        $form = $this.parents(\"form\").first(),\n                        validatorNames = [];\n\n                    // create message container if not exists\n                    if (!$helpBlock.length && settings.options.autoAdd && settings.options.autoAdd.helpBlocks) {\n                        $helpBlock = $('<div class=\"help-block\" />');\n                        $controlGroup.find('.controls').append($helpBlock);\n                        createdElements.push($helpBlock[0]);\n                    }\n\n                    // =============================================================\n                    //                                     SNIFF HTML FOR VALIDATORS\n                    // =============================================================\n\n                    // *snort sniff snuffle*\n\n                    if (settings.options.sniffHtml) {\n                        var message;\n                        // ---------------------------------------------------------\n                        //                                                   PATTERN\n                        // ---------------------------------------------------------\n                        if ($this.data(\"validationPatternPattern\")) {\n                            $this.attr(\"pattern\", $this.data(\"validationPatternPattern\"));\n                        }\n                        if ($this.attr(\"pattern\") !== undefined) {\n                            message = \"Not in the expected format<!-- data-validation-pattern-message to override -->\";\n                            if ($this.data(\"validationPatternMessage\")) {\n                                message = $this.data(\"validationPatternMessage\");\n                            }\n                            $this.data(\"validationPatternMessage\", message);\n                            $this.data(\"validationPatternRegex\", $this.attr(\"pattern\"));\n                        }\n                        // ---------------------------------------------------------\n                        //                                                       MAX\n                        // ---------------------------------------------------------\n                        if ($this.attr(\"max\") !== undefined || $this.attr(\"aria-valuemax\") !== undefined) {\n                            var max = ($this.attr(\"max\") !== undefined ? $this.attr(\"max\") : $this.attr(\"aria-valuemax\"));\n                            message = \"Too high: Maximum of '\" + max + \"'<!-- data-validation-max-message to override -->\";\n                            if ($this.data(\"validationMaxMessage\")) {\n                                message = $this.data(\"validationMaxMessage\");\n                            }\n                            $this.data(\"validationMaxMessage\", message);\n                            $this.data(\"validationMaxMax\", max);\n                        }\n                        // ---------------------------------------------------------\n                        //                                                       MIN\n                        // ---------------------------------------------------------\n                        if ($this.attr(\"min\") !== undefined || $this.attr(\"aria-valuemin\") !== undefined) {\n                            var min = ($this.attr(\"min\") !== undefined ? $this.attr(\"min\") : $this.attr(\"aria-valuemin\"));\n                            message = \"Too low: Minimum of '\" + min + \"'<!-- data-validation-min-message to override -->\";\n                            if ($this.data(\"validationMinMessage\")) {\n                                message = $this.data(\"validationMinMessage\");\n                            }\n                            $this.data(\"validationMinMessage\", message);\n                            $this.data(\"validationMinMin\", min);\n                        }\n                        // ---------------------------------------------------------\n                        //                                                 MAXLENGTH\n                        // ---------------------------------------------------------\n                        if ($this.attr(\"maxlength\") !== undefined) {\n                            message = \"Too long: Maximum of '\" + $this.attr(\"maxlength\") + \"' characters<!-- data-validation-maxlength-message to override -->\";\n                            if ($this.data(\"validationMaxlengthMessage\")) {\n                                message = $this.data(\"validationMaxlengthMessage\");\n                            }\n                            $this.data(\"validationMaxlengthMessage\", message);\n                            $this.data(\"validationMaxlengthMaxlength\", $this.attr(\"maxlength\"));\n                        }\n                        // ---------------------------------------------------------\n                        //                                                 MINLENGTH\n                        // ---------------------------------------------------------\n                        if ($this.attr(\"minlength\") !== undefined) {\n                            message = \"Too short: Minimum of '\" + $this.attr(\"minlength\") + \"' characters<!-- data-validation-minlength-message to override -->\";\n                            if ($this.data(\"validationMinlengthMessage\")) {\n                                message = $this.data(\"validationMinlengthMessage\");\n                            }\n                            $this.data(\"validationMinlengthMessage\", message);\n                            $this.data(\"validationMinlengthMinlength\", $this.attr(\"minlength\"));\n                        }\n                        // ---------------------------------------------------------\n                        //                                                  REQUIRED\n                        // ---------------------------------------------------------\n                        if ($this.attr(\"required\") !== undefined || $this.attr(\"aria-required\") !== undefined) {\n                            message = settings.builtInValidators.required.message;\n                            if ($this.data(\"validationRequiredMessage\")) {\n                                message = $this.data(\"validationRequiredMessage\");\n                            }\n                            $this.data(\"validationRequiredMessage\", message);\n                        }\n                        // ---------------------------------------------------------\n                        //                                                    NUMBER\n                        // ---------------------------------------------------------\n                        if ($this.attr(\"type\") !== undefined && $this.attr(\"type\").toLowerCase() === \"number\") {\n                            message = settings.validatorTypes.number.message; // TODO: fix this\n                            if ($this.data(\"validationNumberMessage\")) {\n                                message = $this.data(\"validationNumberMessage\");\n                            }\n                            $this.data(\"validationNumberMessage\", message);\n\n                            var step = settings.validatorTypes.number.step; // TODO: and this\n                            if ($this.data(\"validationNumberStep\")) {\n                                step = $this.data(\"validationNumberStep\");\n                            }\n                            $this.data(\"validationNumberStep\", step);\n\n                            var decimal = settings.validatorTypes.number.decimal;\n                            if ($this.data(\"validationNumberDecimal\")) {\n                                decimal = $this.data(\"validationNumberDecimal\");\n                            }\n                            $this.data(\"validationNumberDecimal\", decimal);\n                        }\n                        // ---------------------------------------------------------\n                        //                                                     EMAIL\n                        // ---------------------------------------------------------\n                        if ($this.attr(\"type\") !== undefined && $this.attr(\"type\").toLowerCase() === \"email\") {\n                            message = \"Not a valid email address<!-- data-validation-email-message to override -->\";\n                            if ($this.data(\"validationEmailMessage\")) {\n                                message = $this.data(\"validationEmailMessage\");\n                            }\n                            $this.data(\"validationEmailMessage\", message);\n                        }\n                        // ---------------------------------------------------------\n                        //                                                MINCHECKED\n                        // ---------------------------------------------------------\n                        if ($this.attr(\"minchecked\") !== undefined) {\n                            message = \"Not enough options checked; Minimum of '\" + $this.attr(\"minchecked\") + \"' required<!-- data-validation-minchecked-message to override -->\";\n                            if ($this.data(\"validationMincheckedMessage\")) {\n                                message = $this.data(\"validationMincheckedMessage\");\n                            }\n                            $this.data(\"validationMincheckedMessage\", message);\n                            $this.data(\"validationMincheckedMinchecked\", $this.attr(\"minchecked\"));\n                        }\n                        // ---------------------------------------------------------\n                        //                                                MAXCHECKED\n                        // ---------------------------------------------------------\n                        if ($this.attr(\"maxchecked\") !== undefined) {\n                            message = \"Too many options checked; Maximum of '\" + $this.attr(\"maxchecked\") + \"' required<!-- data-validation-maxchecked-message to override -->\";\n                            if ($this.data(\"validationMaxcheckedMessage\")) {\n                                message = $this.data(\"validationMaxcheckedMessage\");\n                            }\n                            $this.data(\"validationMaxcheckedMessage\", message);\n                            $this.data(\"validationMaxcheckedMaxchecked\", $this.attr(\"maxchecked\"));\n                        }\n                    }\n\n                    // =============================================================\n                    //                                       COLLECT VALIDATOR NAMES\n                    // =============================================================\n\n                    // Get named validators\n                    if ($this.data(\"validation\") !== undefined) {\n                        validatorNames = $this.data(\"validation\").split(\",\");\n                    }\n\n                    // Get extra ones defined on the element's data attributes\n                    $.each($this.data(), function (i, el) {\n                        var parts = i.replace(/([A-Z])/g, \",$1\").split(\",\");\n                        if (parts[0] === \"validation\" && parts[1]) {\n                            validatorNames.push(parts[1]);\n                        }\n                    });\n\n                    // =============================================================\n                    //                                     NORMALISE VALIDATOR NAMES\n                    // =============================================================\n\n                    var validatorNamesToInspect = validatorNames;\n                    var newValidatorNamesToInspect = [];\n\n                    var uppercaseEachValidatorName = function (i, el) {\n                        validatorNames[i] = formatValidatorName(el);\n                    };\n\n                    var inspectValidators = function (i, el) {\n                        if ($this.data(\"validation\" + el + \"Shortcut\") !== undefined) {\n                            // Are these custom validators?\n                            // Pull them out!\n                            $.each($this.data(\"validation\" + el + \"Shortcut\").split(\",\"), function (i2, el2) {\n                                newValidatorNamesToInspect.push(el2);\n                            });\n                        } else if (settings.builtInValidators[el.toLowerCase()]) {\n                            // Is this a recognised built-in?\n                            // Pull it out!\n                            var validator = settings.builtInValidators[el.toLowerCase()];\n                            if (validator.type.toLowerCase() === \"shortcut\") {\n                                $.each(validator.shortcut.split(\",\"), function (i, el) {\n                                    el = formatValidatorName(el);\n                                    newValidatorNamesToInspect.push(el);\n                                    validatorNames.push(el);\n                                });\n                            }\n                        }\n                    };\n\n                    do // repeatedly expand 'shortcut' validators into their real validators\n                    {\n                        // Uppercase only the first letter of each name\n                        $.each(validatorNames, uppercaseEachValidatorName);\n\n                        // Remove duplicate validator names\n                        validatorNames = $.unique(validatorNames);\n\n                        // Pull out the new validator names from each shortcut\n                        newValidatorNamesToInspect = [];\n                        $.each(validatorNamesToInspect, inspectValidators);\n\n                        validatorNamesToInspect = newValidatorNamesToInspect;\n\n                    } while (validatorNamesToInspect.length > 0);\n\n                    // =============================================================\n                    //                                       SET UP VALIDATOR ARRAYS\n                    // =============================================================\n\n                    /* We're gonna generate something like\n                     *\n                     * {\n                     *   \"regex\": [\n                     *     { -- a validator object here --},\n                     *     { -- a validator object here --}\n                     *   ],\n                     *   \"required\": [\n                     *     { -- a validator object here --},\n                     *     { -- a validator object here --}\n                     *   ]\n                     * }\n                     *\n                     * with a few more entries.\n                     *\n                     * Because we only add a few validators to each field, most of the\n                     * keys will be empty arrays with no validator objects in them, and\n                     * thats fine.\n                     */\n\n                    var validators = {};\n\n                    $.each(validatorNames, function (i, el) {\n                        // Set up the 'override' message\n                        var message = $this.data(\"validation\" + el + \"Message\");\n                        var hasOverrideMessage = !!message;\n                        var foundValidator = false;\n                        if (!message) {\n                            message = \"'\" + el + \"' validation failed <!-- Add attribute 'data-validation-\" + el.toLowerCase() + \"-message' to input to change this message -->\";\n                        }\n\n                        $.each(\n                            settings.validatorTypes,\n                            function (validatorType, validatorTemplate) {\n                                if (validators[validatorType] === undefined) {\n                                    validators[validatorType] = [];\n                                }\n                                if (!foundValidator && $this.data(\"validation\" + el + formatValidatorName(validatorTemplate.name)) !== undefined) {\n                                    var initted = validatorTemplate.init($this, el);\n                                    if (hasOverrideMessage) {\n                                        initted.message = message;\n                                    }\n\n                                    validators[validatorType].push(\n                                        $.extend(\n                                            true,\n                                            {\n                                                name: formatValidatorName(validatorTemplate.name),\n                                                message: message\n                                            },\n                                            initted\n                                        )\n                                    );\n                                    foundValidator = true;\n                                }\n                            }\n                        );\n\n                        if (!foundValidator && settings.builtInValidators[el.toLowerCase()]) {\n\n                            var validator = $.extend(true, {}, settings.builtInValidators[el.toLowerCase()]);\n                            if (hasOverrideMessage) {\n                                validator.message = message;\n                            }\n                            var validatorType = validator.type.toLowerCase();\n\n                            if (validatorType === \"shortcut\") {\n                                foundValidator = true;\n                            } else {\n                                $.each(\n                                    settings.validatorTypes,\n                                    function (validatorTemplateType, validatorTemplate) {\n                                        if (validators[validatorTemplateType] === undefined) {\n                                            validators[validatorTemplateType] = [];\n                                        }\n                                        if (!foundValidator && validatorType === validatorTemplateType.toLowerCase()) {\n                                            $this.data(\n                                                \"validation\" + el + formatValidatorName(validatorTemplate.name),\n                                                validator[validatorTemplate.name.toLowerCase()]\n                                            );\n                                            validators[validatorType].push(\n                                                $.extend(\n                                                    validator,\n                                                    validatorTemplate.init($this, el)\n                                                )\n                                            );\n                                            foundValidator = true;\n                                        }\n                                    }\n                                );\n                            }\n                        }\n\n                        if (!foundValidator) {\n                            $.error(\"Cannot find validation info for '\" + el + \"'\");\n                        }\n                    });\n\n                    // =============================================================\n                    //                                         STORE FALLBACK VALUES\n                    // =============================================================\n\n                    $helpBlock.data(\n                        \"original-contents\",\n                        (\n                            $helpBlock.data(\"original-contents\") ?\n                                $helpBlock.data(\"original-contents\") :\n                                $helpBlock.html()\n                            )\n                    );\n\n                    $helpBlock.data(\n                        \"original-role\",\n                        (\n                            $helpBlock.data(\"original-role\") ?\n                                $helpBlock.data(\"original-role\") :\n                                $helpBlock.attr(\"role\")\n                            )\n                    );\n\n                    $controlGroup.data(\n                        \"original-classes\",\n                        (\n                            $controlGroup.data(\"original-clases\") ?\n                                $controlGroup.data(\"original-classes\") :\n                                $controlGroup.attr(\"class\")\n                            )\n                    );\n\n                    $this.data(\n                        \"original-aria-invalid\",\n                        (\n                            $this.data(\"original-aria-invalid\") ?\n                                $this.data(\"original-aria-invalid\") :\n                                $this.attr(\"aria-invalid\")\n                            )\n                    );\n\n                    // =============================================================\n                    //                                                    VALIDATION\n                    // =============================================================\n\n                    $this.bind(\n                        \"validation.validation\",\n                        function (event, params) {\n\n                            var value = getValue($this);\n\n                            // Get a list of the errors to apply\n                            var errorsFound = [];\n\n                            $.each(validators, function (validatorType, validatorTypeArray) {\n                                if (\n                                    value || // has a truthy value\n                                        value.length || // not an empty string\n                                        ( // am including empty values\n                                            (\n                                                params &&\n                                                    params.includeEmpty\n                                                ) || !!settings.validatorTypes[validatorType].includeEmpty\n                                            ) ||\n                                        ( // validator is blocking submit\n                                            !!settings.validatorTypes[validatorType].blockSubmit &&\n                                                params && !!params.submitting\n                                            )\n                                    ) {\n                                    $.each(\n                                        validatorTypeArray,\n                                        function (i, validator) {\n                                            if (settings.validatorTypes[validatorType].validate($this, value, validator)) {\n                                                errorsFound.push(validator.message);\n                                            }\n                                        }\n                                    );\n                                }\n                            });\n\n                            return errorsFound;\n                        }\n                    );\n\n                    $this.bind(\n                        \"getValidators.validation\",\n                        function () {\n                            return validators;\n                        }\n                    );\n\n                    var numValidators = 0;\n\n                    $.each(validators, function (i, el) {\n                        numValidators += el.length;\n                    });\n\n                    $this.bind(\"getValidatorCount.validation\", function () {\n                        return numValidators;\n                    });\n\n                    // =============================================================\n                    //                                             WATCH FOR CHANGES\n                    // =============================================================\n                    $this.bind(\n                        \"submit.validation\",\n                        function () {\n                            return $this.triggerHandler(\"change.validation\", {submitting: true});\n                        }\n                    );\n                    $this.bind(\n                        (\n                            settings.options.bindEvents.length > 0 ?\n                                settings.options.bindEvents :\n                                [\n                                    \"keyup\",\n                                    \"focus\",\n                                    \"blur\",\n                                    \"click\",\n                                    \"keydown\",\n                                    \"keypress\",\n                                    \"change\"\n                                ]\n                            ).concat([\"revalidate\"]).join(\".validation \") + \".validation\",\n                        function (e, params) {\n\n                            var value = getValue($this);\n\n                            var errorsFound = [];\n\n                            if (params && !!params.submitting) {\n                                $controlGroup.data(\"jqbvIsSubmitting\", true);\n                            } else if (e.type !== \"revalidate\") {\n                                $controlGroup.data(\"jqbvIsSubmitting\", false);\n                            }\n\n                            var formIsSubmitting = !!$controlGroup.data(\"jqbvIsSubmitting\");\n\n                            $controlGroup.find(\"input,textarea,select\").not('[type=submit]').each(function (i, el) {\n                                var oldCount = errorsFound.length;\n                                $.each($(el).triggerHandler(\"validation.validation\", params) || [], function (j, message) {\n                                    errorsFound.push(message);\n                                });\n                                if (errorsFound.length > oldCount) {\n                                    $(el).attr(\"aria-invalid\", \"true\");\n                                } else {\n                                    var original = $this.data(\"original-aria-invalid\");\n                                    $(el).attr(\"aria-invalid\", (original !== undefined ? original : false));\n                                }\n                            });\n\n                            $form.find(\"input,select,textarea\").not($this).not(\"[name=\\\"\" + $this.attr(\"name\") + \"\\\"]\").trigger(\"validationLostFocus.validation\");\n\n                            errorsFound = $.unique(errorsFound.sort());\n\n                            // Were there any errors?\n                            if (errorsFound.length) {\n                                // Better flag it up as a warning.\n                                $controlGroup.removeClass(\"validate error issue\").addClass(formIsSubmitting ? \"error\" : \"issue\");\n\n                                // How many errors did we find?\n                                if (settings.options.semanticallyStrict && errorsFound.length === 1) {\n                                    // Only one? Being strict? Just output it.\n                                    $helpBlock.html(errorsFound[0] +\n                                        ( settings.options.prependExistingHelpBlock ? $helpBlock.data(\"original-contents\") : \"\" ));\n                                } else {\n                                    // Multiple? Being sloppy? Glue them together into an UL.\n                                    $helpBlock.html(\"<ul role=\\\"alert\\\"><li>\" + errorsFound.join(\"</li><li>\") + \"</li></ul>\" +\n                                        ( settings.options.prependExistingHelpBlock ? $helpBlock.data(\"original-contents\") : \"\" ));\n                                }\n                            } else {\n                                $controlGroup.removeClass(\"issue error validate\");\n                                if (value.length > 0) {\n                                    $controlGroup.addClass(\"validate\");\n                                }\n                                $helpBlock.html($helpBlock.data(\"original-contents\"));\n                            }\n\n                            if (e.type === \"blur\") {\n                                if( settings.options.removeSuccess ){\n                                    // $controlGroup.removeClass(\"validate\");\n                                }\n                            }\n                        }\n                    );\n                    $this.bind(\"validationLostFocus.validation\", function () {\n                        if( settings.options.removeSuccess ){\n                            // $controlGroup.removeClass(\"validate\");\n                        }\n                    });\n                });\n            },\n            destroy: function () {\n\n                return this.each(\n                    function () {\n\n                        var\n                            $this = $(this),\n                            $controlGroup = $this.parents(\".form-group\").first(),\n                            $helpBlock = $controlGroup.find(\".help-block\").first(),\n                            $form = $this.parents(\"form\").first();\n\n                        // remove our events\n                        $this.unbind('.validation'); // events are namespaced.\n                        $form.unbind(\".validationSubmit\");\n                        // reset help text\n                        $helpBlock.html($helpBlock.data(\"original-contents\"));\n                        // reset classes\n                        $controlGroup.attr(\"class\", $controlGroup.data(\"original-classes\"));\n                        // reset aria\n                        $this.attr(\"aria-invalid\", $this.data(\"original-aria-invalid\"));\n                        // reset role\n                        $helpBlock.attr(\"role\", $this.data(\"original-role\"));\n                        // remove all elements we created\n                        if ($.inArray($helpBlock[0], createdElements) > -1) {\n                            $helpBlock.remove();\n                        }\n\n                    }\n                );\n\n            },\n            collectErrors: function (includeEmpty) {\n\n                var errorMessages = {};\n                this.each(function (i, el) {\n                    var $el = $(el);\n                    var name = $el.attr(\"name\");\n                    var errors = $el.triggerHandler(\"validation.validation\", {includeEmpty: true});\n                    errorMessages[name] = $.extend(true, errors, errorMessages[name]);\n                });\n\n                $.each(errorMessages, function (i, el) {\n                    if (el.length === 0) {\n                        delete errorMessages[i];\n                    }\n                });\n\n                return errorMessages;\n\n            },\n            hasErrors: function () {\n\n                var errorMessages = [];\n\n                this.find('input,select,textarea').add(this).each(function (i, el) {\n                    errorMessages = errorMessages.concat(\n                        $(el).triggerHandler(\"getValidators.validation\") ? $(el).triggerHandler(\"validation.validation\", {submitting: true}) : []\n                    );\n                });\n\n                return (errorMessages.length > 0);\n            },\n            override: function (newDefaults) {\n                defaults = $.extend(true, defaults, newDefaults);\n            }\n        },\n        validatorTypes: {\n            callback: {\n                name: \"callback\",\n                init: function ($this, name) {\n                    var result = {\n                        validatorName: name,\n                        callback: $this.data(\"validation\" + name + \"Callback\"),\n                        lastValue: $this.val(),\n                        lastValid: true,\n                        lastFinished: true\n                    };\n\n                    var message = \"Not valid\";\n                    if ($this.data(\"validation\" + name + \"Message\")) {\n                        message = $this.data(\"validation\" + name + \"Message\");\n                    }\n                    result.message = message;\n\n                    return result;\n                },\n                validate: function ($this, value, validator) {\n                    if (validator.lastValue === value && validator.lastFinished) {\n                        return !validator.lastValid;\n                    }\n\n                    if (validator.lastFinished === true) {\n                        validator.lastValue = value;\n                        validator.lastValid = true;\n                        validator.lastFinished = false;\n\n                        var rrjqbvValidator = validator;\n                        var rrjqbvThis = $this;\n                        executeFunctionByName(\n                            validator.callback,\n                            window,\n                            $this,\n                            value,\n                            function (data) {\n                                if (rrjqbvValidator.lastValue === data.value) {\n                                    rrjqbvValidator.lastValid = data.valid;\n                                    if (data.message) {\n                                        rrjqbvValidator.message = data.message;\n                                    }\n                                    rrjqbvValidator.lastFinished = true;\n                                    rrjqbvThis.data(\n                                        \"validation\" + rrjqbvValidator.validatorName + \"Message\",\n                                        rrjqbvValidator.message\n                                    );\n\n                                    // Timeout is set to avoid problems with the events being considered 'already fired'\n                                    setTimeout(function () {\n                                        if (!$this.is(\":focus\") && $this.parents(\"form\").first().data(\"jqbvIsSubmitting\")) {\n                                            rrjqbvThis.trigger(\"blur.validation\");\n                                        } else {\n                                            rrjqbvThis.trigger(\"revalidate.validation\");\n                                        }\n                                    }, 1); // doesn't need a long timeout, just long enough for the event bubble to burst\n                                }\n                            }\n                        );\n                    }\n\n                    return false;\n\n                }\n            },\n            ajax: {\n                name: \"ajax\",\n                init: function ($this, name) {\n                    return {\n                        validatorName: name,\n                        url: $this.data(\"validation\" + name + \"Ajax\"),\n                        lastValue: $this.val(),\n                        lastValid: true,\n                        lastFinished: true\n                    };\n                },\n                validate: function ($this, value, validator) {\n                    if (\"\" + validator.lastValue === \"\" + value && validator.lastFinished === true) {\n                        return validator.lastValid === false;\n                    }\n\n                    if (validator.lastFinished === true) {\n                        validator.lastValue = value;\n                        validator.lastValid = true;\n                        validator.lastFinished = false;\n                        $.ajax({\n                            url: validator.url,\n                            data: \"value=\" + encodeURIComponent(value) + \"&field=\" + $this.attr(\"name\"),\n                            dataType: \"json\",\n                            success : function (data) {\n                                if (\"\" + validator.lastValue === \"\" + data.value) {\n                                    validator.lastValid = !!(data.valid);\n                                    if (data.message) {\n                                        validator.message = data.message;\n                                    }\n                                    validator.lastFinished = true;\n                                    $this.data(\"validation\" + validator.validatorName + \"Message\", validator.message);\n                                    // Timeout is set to avoid problems with the events being considered 'already fired'\n                                    setTimeout(function () {\n                                        $this.trigger(\"revalidate.validation\");\n                                    }, 1); // doesn't need a long timeout, just long enough for the event bubble to burst\n                                }\n                            },\n                            failure: function () {\n                                validator.lastValid = true;\n                                validator.message = \"ajax call failed\";\n                                validator.lastFinished = true;\n                                $this.data(\"validation\" + validator.validatorName + \"Message\", validator.message);\n                                // Timeout is set to avoid problems with the events being considered 'already fired'\n                                setTimeout(function () {\n                                    $this.trigger(\"revalidate.validation\");\n                                }, 1); // doesn't need a long timeout, just long enough for the event bubble to burst\n                            }\n                        });\n                    }\n\n                    return false;\n\n                }\n            },\n            regex: {\n                name: \"regex\",\n                init: function ($this, name) {\n                    var result = {};\n                    var regexString = $this.data(\"validation\" + name + \"Regex\");\n                    result.regex = regexFromString(regexString);\n                    if (regexString === undefined) {\n                        $.error(\"Can't find regex for '\" + name + \"' validator on '\" + $this.attr(\"name\") + \"'\");\n                    }\n\n                    var message = \"Not in the expected format\";\n                    if ($this.data(\"validation\" + name + \"Message\")) {\n                        message = $this.data(\"validation\" + name + \"Message\");\n                    }\n\n                    result.message = message;\n\n                    result.originalName = name;\n                    return result;\n                },\n                validate: function ($this, value, validator) {\n                    return (!validator.regex.test(value) && !validator.negative) ||\n                        (validator.regex.test(value) && validator.negative);\n                }\n            },\n            email: {\n                name: \"email\",\n                init: function ($this, name) {\n                    var result = {};\n                    result.regex = regexFromString('[a-zA-Z0-9.!#$%&\\u2019*+/=?^_`{|}~-]+@[A-Za-z0-9.-]+\\\\.[A-Za-z]{2,4}');\n\n                    var message = \"Not a valid email address\";\n                    if ($this.data(\"validation\" + name + \"Message\")) {\n                        message = $this.data(\"validation\" + name + \"Message\");\n                    }\n\n                    result.message = message;\n\n                    result.originalName = name;\n                    return result;\n                },\n                validate: function ($this, value, validator) {\n                    return (!validator.regex.test(value) && !validator.negative) ||\n                        (validator.regex.test(value) && validator.negative);\n                }\n            },\n            required: {\n                name: \"required\",\n                init: function ($this, name) {\n                    var message = \"This is required\";\n                    if ($this.data(\"validation\" + name + \"Message\")) {\n                        message = $this.data(\"validation\" + name + \"Message\");\n                    }\n\n                    return {message: message, includeEmpty: true};\n                },\n                validate: function ($this, value, validator) {\n                    return !!(\n                        (value.length === 0 && !validator.negative) ||\n                            (value.length > 0 && validator.negative)\n                        );\n                },\n                blockSubmit: true\n            },\n            match: {\n                name: \"match\",\n                init: function ($this, name) {\n                    var elementName = $this.data(\"validation\" + name + \"Match\");\n                    var $form = $this.parents(\"form\").first();\n                    var $element = $form.find(\"[name=\\\"\" + elementName + \"\\\"]\").first();\n                    $element.bind(\"validation.validation\", function () {\n                        $this.trigger(\"revalidate.validation\", {submitting: true});\n                    });\n                    var result = {};\n                    result.element = $element;\n\n                    if ($element.length === 0) {\n                        $.error(\"Can't find field '\" + elementName + \"' to match '\" + $this.attr(\"name\") + \"' against in '\" + name + \"' validator\");\n                    }\n\n                    var message = \"Must match\";\n                    var $label = null;\n                    if (($label = $form.find(\"label[for=\\\"\" + elementName + \"\\\"]\")).length) {\n                        message += \" '\" + $label.text() + \"'\";\n                    } else if (($label = $element.parents(\".form-group\").first().find(\"label\")).length) {\n                        message += \" '\" + $label.first().text() + \"'\";\n                    }\n\n                    if ($this.data(\"validation\" + name + \"Message\")) {\n                        message = $this.data(\"validation\" + name + \"Message\");\n                    }\n\n                    result.message = message;\n\n                    return result;\n                },\n                validate: function ($this, value, validator) {\n                    return (value !== validator.element.val() && !validator.negative) ||\n                        (value === validator.element.val() && validator.negative);\n                },\n                blockSubmit: true,\n                includeEmpty: true\n            },\n            max: {\n                name: \"max\",\n                init: function ($this, name) {\n                    var result = {};\n\n                    result.max = $this.data(\"validation\" + name + \"Max\");\n\n                    result.message = \"Too high: Maximum of '\" + result.max + \"'\";\n                    if ($this.data(\"validation\" + name + \"Message\")) {\n                        result.message = $this.data(\"validation\" + name + \"Message\");\n                    }\n\n                    return result;\n                },\n                validate: function ($this, value, validator) {\n                    return (parseFloat(value, 10) > parseFloat(validator.max, 10) && !validator.negative) ||\n                        (parseFloat(value, 10) <= parseFloat(validator.max, 10) && validator.negative);\n                }\n            },\n            min: {\n                name: \"min\",\n                init: function ($this, name) {\n                    var result = {};\n\n                    result.min = $this.data(\"validation\" + name + \"Min\");\n\n                    result.message = \"Too low: Minimum of '\" + result.min + \"'\";\n                    if ($this.data(\"validation\" + name + \"Message\")) {\n                        result.message = $this.data(\"validation\" + name + \"Message\");\n                    }\n\n                    return result;\n                },\n                validate: function ($this, value, validator) {\n                    return (parseFloat(value) < parseFloat(validator.min) && !validator.negative) ||\n                        (parseFloat(value) >= parseFloat(validator.min) && validator.negative);\n                }\n            },\n            maxlength: {\n                name: \"maxlength\",\n                init: function ($this, name) {\n                    var result = {};\n\n                    result.maxlength = $this.data(\"validation\" + name + \"Maxlength\");\n\n                    result.message = \"Too long: Maximum of '\" + result.maxlength + \"' characters\";\n                    if ($this.data(\"validation\" + name + \"Message\")) {\n                        result.message = $this.data(\"validation\" + name + \"Message\");\n                    }\n\n                    return result;\n                },\n                validate: function ($this, value, validator) {\n                    return ((value.length > validator.maxlength) && !validator.negative) ||\n                        ((value.length <= validator.maxlength) && validator.negative);\n                }\n            },\n            minlength: {\n                name: \"minlength\",\n                init: function ($this, name) {\n                    var result = {};\n\n                    result.minlength = $this.data(\"validation\" + name + \"Minlength\");\n\n                    result.message = \"Too short: Minimum of '\" + result.minlength + \"' characters\";\n                    if ($this.data(\"validation\" + name + \"Message\")) {\n                        result.message = $this.data(\"validation\" + name + \"Message\");\n                    }\n\n                    return result;\n                },\n                validate: function ($this, value, validator) {\n                    return ((value.length < validator.minlength) && !validator.negative) ||\n                        ((value.length >= validator.minlength) && validator.negative);\n                }\n            },\n            maxchecked: {\n                name: \"maxchecked\",\n                init: function ($this, name) {\n                    var result = {};\n\n                    var elements = $this.parents(\"form\").first().find(\"[name=\\\"\" + $this.attr(\"name\") + \"\\\"]\");\n                    elements.bind(\"change.validation click.validation\", function () {\n                        $this.trigger(\"revalidate.validation\", {includeEmpty: true});\n                    });\n\n                    result.elements = elements;\n                    result.maxchecked = $this.data(\"validation\" + name + \"Maxchecked\");\n\n                    var message = \"Too many: Max '\" + result.maxchecked + \"' checked\";\n                    if ($this.data(\"validation\" + name + \"Message\")) {\n                        message = $this.data(\"validation\" + name + \"Message\");\n                    }\n                    result.message = message;\n\n                    return result;\n                },\n                validate: function ($this, value, validator) {\n                    return (validator.elements.filter(\":checked\").length > validator.maxchecked && !validator.negative) ||\n                        (validator.elements.filter(\":checked\").length <= validator.maxchecked && validator.negative);\n                },\n                blockSubmit: true\n            },\n            minchecked: {\n                name: \"minchecked\",\n                init: function ($this, name) {\n                    var result = {};\n\n                    var elements = $this.parents(\"form\").first().find(\"[name=\\\"\" + $this.attr(\"name\") + \"\\\"]\");\n                    elements.bind(\"change.validation click.validation\", function () {\n                        $this.trigger(\"revalidate.validation\", {includeEmpty: true});\n                    });\n\n                    result.elements = elements;\n                    result.minchecked = $this.data(\"validation\" + name + \"Minchecked\");\n\n                    var message = \"Too few: Min '\" + result.minchecked + \"' checked\";\n                    if ($this.data(\"validation\" + name + \"Message\")) {\n                        message = $this.data(\"validation\" + name + \"Message\");\n                    }\n                    result.message = message;\n\n                    return result;\n                },\n                validate: function ($this, value, validator) {\n                    return (validator.elements.filter(\":checked\").length < validator.minchecked && !validator.negative) ||\n                        (validator.elements.filter(\":checked\").length >= validator.minchecked && validator.negative);\n                },\n                blockSubmit: true,\n                includeEmpty: true\n            },\n            number: {\n                name: \"number\",\n                init: function ($this, name) {\n                    var result = {};\n                    result.step = 1;\n                    if ($this.attr(\"step\")) {\n                        result.step = $this.attr(\"step\");\n                    }\n                    if ($this.data(\"validation\" + name + \"Step\")) {\n                        result.step = $this.data(\"validation\" + name + \"Step\");\n                    }\n\n                    result.decimal = \".\";\n                    if ($this.data(\"validation\" + name + \"Decimal\")) {\n                        result.decimal = $this.data(\"validation\" + name + \"Decimal\");\n                    }\n\n                    result.thousands = \"\";\n                    if ($this.data(\"validation\" + name + \"Thousands\")) {\n                        result.thousands = $this.data(\"validation\" + name + \"Thousands\");\n                    }\n\n                    result.regex = regexFromString(\"([+-]?\\\\d+(\\\\\" + result.decimal + \"\\\\d+)?)?\");\n\n                    result.message = \"Must be a number\";\n                    var dataMessage = $this.data(\"validation\" + name + \"Message\");\n                    if (dataMessage) {\n                        result.message = dataMessage;\n                    }\n\n                    return result;\n                },\n                validate: function ($this, value, validator) {\n                    var globalValue = value.replace(validator.decimal, \".\").replace(validator.thousands, \"\");\n                    var multipliedValue = parseFloat(globalValue);\n                    var multipliedStep = parseFloat(validator.step);\n                    while (multipliedStep % 1 !== 0) {\n                        /* thanks to @jkey #57 */\n                        multipliedStep = parseFloat(multipliedStep.toPrecision(12)) * 10;\n                        multipliedValue = parseFloat(multipliedValue.toPrecision(12)) * 10;\n                    }\n                    var regexResult = validator.regex.test(value);\n                    var stepResult = parseFloat(multipliedValue) % parseFloat(multipliedStep) === 0;\n                    var typeResult = !isNaN(parseFloat(globalValue)) && isFinite(globalValue);\n                    var result = !(regexResult && stepResult && typeResult);\n                    return result;\n                },\n                message: \"Must be a number\"\n            }\n        },\n        builtInValidators: {\n            email: {\n                name: \"Email\",\n                type: \"email\"\n            },\n            passwordagain: {\n                name: \"Passwordagain\",\n                type: \"match\",\n                match: \"password\",\n                message: \"Does not match the given password<!-- data-validator-paswordagain-message to override -->\"\n            },\n            positive: {\n                name: \"Positive\",\n                type: \"shortcut\",\n                shortcut: \"number,positivenumber\"\n            },\n            negative: {\n                name: \"Negative\",\n                type: \"shortcut\",\n                shortcut: \"number,negativenumber\"\n            },\n            integer: {\n                name: \"Integer\",\n                type: \"regex\",\n                regex: \"[+-]?\\\\d+\",\n                message: \"No decimal places allowed<!-- data-validator-integer-message to override -->\"\n            },\n            positivenumber: {\n                name: \"Positivenumber\",\n                type: \"min\",\n                min: 0,\n                message: \"Must be a positive number<!-- data-validator-positivenumber-message to override -->\"\n            },\n            negativenumber: {\n                name: \"Negativenumber\",\n                type: \"max\",\n                max: 0,\n                message: \"Must be a negative number<!-- data-validator-negativenumber-message to override -->\"\n            },\n            required: {\n                name: \"Required\",\n                type: \"required\",\n                message: \"This is required<!-- data-validator-required-message to override -->\"\n            },\n            checkone: {\n                name: \"Checkone\",\n                type: \"minchecked\",\n                minchecked: 1,\n                message: \"Check at least one option<!-- data-validation-checkone-message to override -->\"\n            },\n            number: {\n                name: \"Number\",\n                type: \"number\",\n                decimal: \".\",\n                step: \"1\"\n            },\n            pattern: {\n                name: \"Pattern\",\n                type: \"regex\",\n                message: \"Not in expected format\"\n            }\n        }\n    };\n\n    var formatValidatorName = function (name) {\n        return name\n            .toLowerCase()\n            .replace(\n            /(^|\\s)([a-z])/g,\n            function (m, p1, p2) {\n                return p1 + p2.toUpperCase();\n            }\n        )\n            ;\n    };\n\n    var getValue = function ($this) {\n        // Extract the value we're talking about\n        var value = null;\n        var type = $this.attr(\"type\");\n        if (type === \"checkbox\") {\n            value = ($this.is(\":checked\") ? value : \"\");\n            var checkboxParent = $this.parents(\"form\").first() || $this.parents(\".form-group\").first();\n            if (checkboxParent) {\n                value = checkboxParent.find(\"input[name='\" + $this.attr(\"name\") + \"']:checked\").map(function (i, el) {\n                    return $(el).val();\n                }).toArray().join(\",\");\n            }\n        }\n        else if (type === \"radio\") {\n            value = ($('input[name=\"' + $this.attr(\"name\") + '\"]:checked').length > 0 ? $this.val() : \"\");\n            var radioParent = $this.parents(\"form\").first() || $this.parents(\".form-group\").first();\n            if (radioParent) {\n                value = radioParent.find(\"input[name='\" + $this.attr(\"name\") + \"']:checked\").map(function (i, el) {\n                    return $(el).val();\n                }).toArray().join(\",\");\n            }\n        } else if (type === \"number\") {\n            if ($this[0].validity.valid) {\n                value = $this.val();\n            } else {\n                if ($this[0].validity.badInput || $this[0].validity.stepMismatch) {\n                    value = \"NaN\";\n                } else {\n                    value = \"\";\n                }\n            }\n        } else {\n            value = $this.val();\n        }\n        return value;\n    };\n\n    function regexFromString(inputstring) {\n        return new RegExp(\"^\" + inputstring + \"$\");\n    }\n\n    /**\n     * Thanks to Jason Bunting / Alex Nazarov via StackOverflow.com\n     *\n     * http://stackoverflow.com/a/4351575\n     **/\n    function executeFunctionByName(functionName, context /*, args */) {\n        var args = Array.prototype.slice.call(arguments, 2);\n        var namespaces = functionName.split(\".\");\n        var func = namespaces.pop();\n        for (var i = 0; i < namespaces.length; i++) {\n            context = context[namespaces[i]];\n        }\n        return context[func].apply(context, args);\n    }\n\n    $.fn.jqBootstrapValidation = function (method) {\n\n        if (defaults.methods[method]) {\n            return defaults.methods[method].apply(this, Array.prototype.slice.call(arguments, 1));\n        } else if (typeof method === 'object' || !method) {\n            return defaults.methods.init.apply(this, arguments);\n        } else {\n            $.error('Method ' + method + ' does not exist on jQuery.jqBootstrapValidation');\n            return null;\n        }\n\n    };\n\n    $.jqBootstrapValidation = function (options) {\n        $(\":input\").not(\"[type=image],[type=submit]\").jqBootstrapValidation.apply(this, arguments);\n    };\n\n})(jQuery);\n"
  },
  {
    "path": "public/backend/vendors/js/media/plyr.js",
    "content": "typeof navigator === \"object\" && (function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define('Plyr', factory) :\n  (global = global || self, global.Plyr = factory());\n}(this, function () { 'use strict';\n\n  function _classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  }\n\n  function _defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  function _createClass(Constructor, protoProps, staticProps) {\n    if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) _defineProperties(Constructor, staticProps);\n    return Constructor;\n  }\n\n  function _defineProperty(obj, key, value) {\n    if (key in obj) {\n      Object.defineProperty(obj, key, {\n        value: value,\n        enumerable: true,\n        configurable: true,\n        writable: true\n      });\n    } else {\n      obj[key] = value;\n    }\n\n    return obj;\n  }\n\n  function _slicedToArray(arr, i) {\n    return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\n  }\n\n  function _toConsumableArray(arr) {\n    return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\n  }\n\n  function _arrayWithoutHoles(arr) {\n    if (Array.isArray(arr)) {\n      for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n      return arr2;\n    }\n  }\n\n  function _arrayWithHoles(arr) {\n    if (Array.isArray(arr)) return arr;\n  }\n\n  function _iterableToArray(iter) {\n    if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n  }\n\n  function _iterableToArrayLimit(arr, i) {\n    var _arr = [];\n    var _n = true;\n    var _d = false;\n    var _e = undefined;\n\n    try {\n      for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n        _arr.push(_s.value);\n\n        if (i && _arr.length === i) break;\n      }\n    } catch (err) {\n      _d = true;\n      _e = err;\n    } finally {\n      try {\n        if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n      } finally {\n        if (_d) throw _e;\n      }\n    }\n\n    return _arr;\n  }\n\n  function _nonIterableSpread() {\n    throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n  }\n\n  function _nonIterableRest() {\n    throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n  }\n\n  var defaults = {\n    addCSS: true,\n    // Add CSS to the element to improve usability (required here or in your CSS!)\n    thumbWidth: 15,\n    // The width of the thumb handle\n    watch: true // Watch for new elements that match a string target\n\n  };\n\n  // Element matches a selector\n  function matches(element, selector) {\n\n    function match() {\n      return Array.from(document.querySelectorAll(selector)).includes(this);\n    }\n\n    var matches = match;\n    return matches.call(element, selector);\n  }\n\n  // Trigger event\n  function trigger(element, type) {\n    if (!element || !type) {\n      return;\n    } // Create and dispatch the event\n\n\n    var event = new Event(type); // Dispatch the event\n\n    element.dispatchEvent(event);\n  }\n\n  // ==========================================================================\n  // Type checking utils\n  // ==========================================================================\n  var getConstructor = function getConstructor(input) {\n    return input !== null && typeof input !== 'undefined' ? input.constructor : null;\n  };\n\n  var instanceOf = function instanceOf(input, constructor) {\n    return Boolean(input && constructor && input instanceof constructor);\n  };\n\n  var isNullOrUndefined = function isNullOrUndefined(input) {\n    return input === null || typeof input === 'undefined';\n  };\n\n  var isObject = function isObject(input) {\n    return getConstructor(input) === Object;\n  };\n\n  var isNumber = function isNumber(input) {\n    return getConstructor(input) === Number && !Number.isNaN(input);\n  };\n\n  var isString = function isString(input) {\n    return getConstructor(input) === String;\n  };\n\n  var isBoolean = function isBoolean(input) {\n    return getConstructor(input) === Boolean;\n  };\n\n  var isFunction = function isFunction(input) {\n    return getConstructor(input) === Function;\n  };\n\n  var isArray = function isArray(input) {\n    return Array.isArray(input);\n  };\n\n  var isNodeList = function isNodeList(input) {\n    return instanceOf(input, NodeList);\n  };\n\n  var isElement = function isElement(input) {\n    return instanceOf(input, Element);\n  };\n\n  var isEvent = function isEvent(input) {\n    return instanceOf(input, Event);\n  };\n\n  var isEmpty = function isEmpty(input) {\n    return isNullOrUndefined(input) || (isString(input) || isArray(input) || isNodeList(input)) && !input.length || isObject(input) && !Object.keys(input).length;\n  };\n\n  var is = {\n    nullOrUndefined: isNullOrUndefined,\n    object: isObject,\n    number: isNumber,\n    string: isString,\n    boolean: isBoolean,\n    function: isFunction,\n    array: isArray,\n    nodeList: isNodeList,\n    element: isElement,\n    event: isEvent,\n    empty: isEmpty\n  };\n\n  // Get the number of decimal places\n  function getDecimalPlaces(value) {\n    var match = \"\".concat(value).match(/(?:\\.(\\d+))?(?:[eE]([+-]?\\d+))?$/);\n\n    if (!match) {\n      return 0;\n    }\n\n    return Math.max(0, // Number of digits right of decimal point.\n    (match[1] ? match[1].length : 0) - ( // Adjust for scientific notation.\n    match[2] ? +match[2] : 0));\n  } // Round to the nearest step\n\n  function round(number, step) {\n    if (step < 1) {\n      var places = getDecimalPlaces(step);\n      return parseFloat(number.toFixed(places));\n    }\n\n    return Math.round(number / step) * step;\n  }\n\n  var RangeTouch =\n  /*#__PURE__*/\n  function () {\n    /**\n     * Setup a new instance\n     * @param {String|Element} target\n     * @param {Object} options\n     */\n    function RangeTouch(target, options) {\n      _classCallCheck(this, RangeTouch);\n\n      if (is.element(target)) {\n        // An Element is passed, use it directly\n        this.element = target;\n      } else if (is.string(target)) {\n        // A CSS Selector is passed, fetch it from the DOM\n        this.element = document.querySelector(target);\n      }\n\n      if (!is.element(this.element) || !is.empty(this.element.rangeTouch)) {\n        return;\n      }\n\n      this.config = Object.assign({}, defaults, options);\n      this.init();\n    }\n\n    _createClass(RangeTouch, [{\n      key: \"init\",\n      value: function init() {\n        // Bail if not a touch enabled device\n        if (!RangeTouch.enabled) {\n          return;\n        } // Add useful CSS\n\n\n        if (this.config.addCSS) {\n          // TODO: Restore original values on destroy\n          this.element.style.userSelect = 'none';\n          this.element.style.webKitUserSelect = 'none';\n          this.element.style.touchAction = 'manipulation';\n        }\n\n        this.listeners(true);\n        this.element.rangeTouch = this;\n      }\n    }, {\n      key: \"destroy\",\n      value: function destroy() {\n        // Bail if not a touch enabled device\n        if (!RangeTouch.enabled) {\n          return;\n        }\n\n        this.listeners(false);\n        this.element.rangeTouch = null;\n      }\n    }, {\n      key: \"listeners\",\n      value: function listeners(toggle) {\n        var _this = this;\n\n        var method = toggle ? 'addEventListener' : 'removeEventListener'; // Listen for events\n\n        ['touchstart', 'touchmove', 'touchend'].forEach(function (type) {\n          _this.element[method](type, function (event) {\n            return _this.set(event);\n          }, false);\n        });\n      }\n      /**\n       * Get the value based on touch position\n       * @param {Event} event\n       */\n\n    }, {\n      key: \"get\",\n      value: function get(event) {\n        if (!RangeTouch.enabled || !is.event(event)) {\n          return null;\n        }\n\n        var input = event.target;\n        var touch = event.changedTouches[0];\n        var min = parseFloat(input.getAttribute('min')) || 0;\n        var max = parseFloat(input.getAttribute('max')) || 100;\n        var step = parseFloat(input.getAttribute('step')) || 1;\n        var delta = max - min; // Calculate percentage\n\n        var percent;\n        var clientRect = input.getBoundingClientRect();\n        var thumbWidth = 100 / clientRect.width * (this.config.thumbWidth / 2) / 100; // Determine left percentage\n\n        percent = 100 / clientRect.width * (touch.clientX - clientRect.left); // Don't allow outside bounds\n\n        if (percent < 0) {\n          percent = 0;\n        } else if (percent > 100) {\n          percent = 100;\n        } // Factor in the thumb offset\n\n\n        if (percent < 50) {\n          percent -= (100 - percent * 2) * thumbWidth;\n        } else if (percent > 50) {\n          percent += (percent - 50) * 2 * thumbWidth;\n        } // Find the closest step to the mouse position\n\n\n        return min + round(delta * (percent / 100), step);\n      }\n      /**\n       * Update range value based on position\n       * @param {Event} event\n       */\n\n    }, {\n      key: \"set\",\n      value: function set(event) {\n        if (!RangeTouch.enabled || !is.event(event) || event.target.disabled) {\n          return;\n        } // Prevent text highlight on iOS\n\n\n        event.preventDefault(); // Set value\n\n        event.target.value = this.get(event); // Trigger event\n\n        trigger(event.target, event.type === 'touchend' ? 'change' : 'input');\n      }\n    }], [{\n      key: \"setup\",\n\n      /**\n       * Setup multiple instances\n       * @param {String|Element|NodeList|Array} target\n       * @param {Object} options\n       */\n      value: function setup(target) {\n        var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n        var targets = null;\n\n        if (is.empty(target) || is.string(target)) {\n          targets = Array.from(document.querySelectorAll(is.string(target) ? target : 'input[type=\"range\"]'));\n        } else if (is.element(target)) {\n          targets = [target];\n        } else if (is.nodeList(target)) {\n          targets = Array.from(target);\n        } else if (is.array(target)) {\n          targets = target.filter(is.element);\n        }\n\n        if (is.empty(targets)) {\n          return null;\n        }\n\n        var config = Object.assign({}, defaults, options);\n\n        if (is.string(target) && config.watch) {\n          // Create an observer instance\n          var observer = new MutationObserver(function (mutations) {\n            Array.from(mutations).forEach(function (mutation) {\n              Array.from(mutation.addedNodes).forEach(function (node) {\n                if (!is.element(node) || !matches(node, target)) {\n                  return;\n                } // eslint-disable-next-line no-unused-vars\n\n\n                var range = new RangeTouch(node, config);\n              });\n            });\n          }); // Pass in the target node, as well as the observer options\n\n          observer.observe(document.body, {\n            childList: true,\n            subtree: true\n          });\n        }\n\n        return targets.map(function (t) {\n          return new RangeTouch(t, options);\n        });\n      }\n    }, {\n      key: \"enabled\",\n      get: function get() {\n        return 'ontouchstart' in document.documentElement;\n      }\n    }]);\n\n    return RangeTouch;\n  }();\n\n  // ==========================================================================\n  // Type checking utils\n  // ==========================================================================\n  var getConstructor$1 = function getConstructor(input) {\n    return input !== null && typeof input !== 'undefined' ? input.constructor : null;\n  };\n\n  var instanceOf$1 = function instanceOf(input, constructor) {\n    return Boolean(input && constructor && input instanceof constructor);\n  };\n\n  var isNullOrUndefined$1 = function isNullOrUndefined(input) {\n    return input === null || typeof input === 'undefined';\n  };\n\n  var isObject$1 = function isObject(input) {\n    return getConstructor$1(input) === Object;\n  };\n\n  var isNumber$1 = function isNumber(input) {\n    return getConstructor$1(input) === Number && !Number.isNaN(input);\n  };\n\n  var isString$1 = function isString(input) {\n    return getConstructor$1(input) === String;\n  };\n\n  var isBoolean$1 = function isBoolean(input) {\n    return getConstructor$1(input) === Boolean;\n  };\n\n  var isFunction$1 = function isFunction(input) {\n    return getConstructor$1(input) === Function;\n  };\n\n  var isArray$1 = function isArray(input) {\n    return Array.isArray(input);\n  };\n\n  var isWeakMap = function isWeakMap(input) {\n    return instanceOf$1(input, WeakMap);\n  };\n\n  var isNodeList$1 = function isNodeList(input) {\n    return instanceOf$1(input, NodeList);\n  };\n\n  var isElement$1 = function isElement(input) {\n    return instanceOf$1(input, Element);\n  };\n\n  var isTextNode = function isTextNode(input) {\n    return getConstructor$1(input) === Text;\n  };\n\n  var isEvent$1 = function isEvent(input) {\n    return instanceOf$1(input, Event);\n  };\n\n  var isKeyboardEvent = function isKeyboardEvent(input) {\n    return instanceOf$1(input, KeyboardEvent);\n  };\n\n  var isCue = function isCue(input) {\n    return instanceOf$1(input, window.TextTrackCue) || instanceOf$1(input, window.VTTCue);\n  };\n\n  var isTrack = function isTrack(input) {\n    return instanceOf$1(input, TextTrack) || !isNullOrUndefined$1(input) && isString$1(input.kind);\n  };\n\n  var isPromise = function isPromise(input) {\n    return instanceOf$1(input, Promise);\n  };\n\n  var isEmpty$1 = function isEmpty(input) {\n    return isNullOrUndefined$1(input) || (isString$1(input) || isArray$1(input) || isNodeList$1(input)) && !input.length || isObject$1(input) && !Object.keys(input).length;\n  };\n\n  var isUrl = function isUrl(input) {\n    // Accept a URL object\n    if (instanceOf$1(input, window.URL)) {\n      return true;\n    } // Must be string from here\n\n\n    if (!isString$1(input)) {\n      return false;\n    } // Add the protocol if required\n\n\n    var string = input;\n\n    if (!input.startsWith('http://') || !input.startsWith('https://')) {\n      string = \"http://\".concat(input);\n    }\n\n    try {\n      return !isEmpty$1(new URL(string).hostname);\n    } catch (e) {\n      return false;\n    }\n  };\n\n  var is$1 = {\n    nullOrUndefined: isNullOrUndefined$1,\n    object: isObject$1,\n    number: isNumber$1,\n    string: isString$1,\n    boolean: isBoolean$1,\n    function: isFunction$1,\n    array: isArray$1,\n    weakMap: isWeakMap,\n    nodeList: isNodeList$1,\n    element: isElement$1,\n    textNode: isTextNode,\n    event: isEvent$1,\n    keyboardEvent: isKeyboardEvent,\n    cue: isCue,\n    track: isTrack,\n    promise: isPromise,\n    url: isUrl,\n    empty: isEmpty$1\n  };\n\n  // ==========================================================================\n  // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n  // https://www.youtube.com/watch?v=NPM6172J22g\n\n  var supportsPassiveListeners = function () {\n    // Test via a getter in the options object to see if the passive property is accessed\n    var supported = false;\n\n    try {\n      var options = Object.defineProperty({}, 'passive', {\n        get: function get() {\n          supported = true;\n          return null;\n        }\n      });\n      window.addEventListener('test', null, options);\n      window.removeEventListener('test', null, options);\n    } catch (e) {// Do nothing\n    }\n\n    return supported;\n  }(); // Toggle event listener\n\n\n  function toggleListener(element, event, callback) {\n    var _this = this;\n\n    var toggle = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n    var passive = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n    var capture = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : false;\n\n    // Bail if no element, event, or callback\n    if (!element || !('addEventListener' in element) || is$1.empty(event) || !is$1.function(callback)) {\n      return;\n    } // Allow multiple events\n\n\n    var events = event.split(' '); // Build options\n    // Default to just the capture boolean for browsers with no passive listener support\n\n    var options = capture; // If passive events listeners are supported\n\n    if (supportsPassiveListeners) {\n      options = {\n        // Whether the listener can be passive (i.e. default never prevented)\n        passive: passive,\n        // Whether the listener is a capturing listener or not\n        capture: capture\n      };\n    } // If a single node is passed, bind the event listener\n\n\n    events.forEach(function (type) {\n      if (_this && _this.eventListeners && toggle) {\n        // Cache event listener\n        _this.eventListeners.push({\n          element: element,\n          type: type,\n          callback: callback,\n          options: options\n        });\n      }\n\n      element[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n    });\n  } // Bind event handler\n\n  function on(element) {\n    var events = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n    var callback = arguments.length > 2 ? arguments[2] : undefined;\n    var passive = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n    var capture = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n    toggleListener.call(this, element, events, callback, true, passive, capture);\n  } // Unbind event handler\n\n  function off(element) {\n    var events = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n    var callback = arguments.length > 2 ? arguments[2] : undefined;\n    var passive = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n    var capture = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n    toggleListener.call(this, element, events, callback, false, passive, capture);\n  } // Bind once-only event handler\n\n  function once(element) {\n    var _this2 = this;\n\n    var events = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n    var callback = arguments.length > 2 ? arguments[2] : undefined;\n    var passive = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;\n    var capture = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n    var onceCallback = function onceCallback() {\n      off(element, events, onceCallback, passive, capture);\n\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n\n      callback.apply(_this2, args);\n    };\n\n    toggleListener.call(this, element, events, onceCallback, true, passive, capture);\n  } // Trigger event\n\n  function triggerEvent(element) {\n    var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n    var bubbles = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n    var detail = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n\n    // Bail if no element\n    if (!is$1.element(element) || is$1.empty(type)) {\n      return;\n    } // Create and dispatch the event\n\n\n    var event = new CustomEvent(type, {\n      bubbles: bubbles,\n      detail: Object.assign({}, detail, {\n        plyr: this\n      })\n    }); // Dispatch the event\n\n    element.dispatchEvent(event);\n  } // Unbind all cached event listeners\n\n  function unbindListeners() {\n    if (this && this.eventListeners) {\n      this.eventListeners.forEach(function (item) {\n        var element = item.element,\n            type = item.type,\n            callback = item.callback,\n            options = item.options;\n        element.removeEventListener(type, callback, options);\n      });\n      this.eventListeners = [];\n    }\n  } // Run method when / if player is ready\n\n  function ready() {\n    var _this3 = this;\n\n    return new Promise(function (resolve) {\n      return _this3.ready ? setTimeout(resolve, 0) : on.call(_this3, _this3.elements.container, 'ready', resolve);\n    }).then(function () {});\n  }\n\n  function cloneDeep(object) {\n    return JSON.parse(JSON.stringify(object));\n  } // Get a nested value in an object\n\n  function getDeep(object, path) {\n    return path.split('.').reduce(function (obj, key) {\n      return obj && obj[key];\n    }, object);\n  } // Deep extend destination object with N more objects\n\n  function extend() {\n    var target = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n    for (var _len = arguments.length, sources = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      sources[_key - 1] = arguments[_key];\n    }\n\n    if (!sources.length) {\n      return target;\n    }\n\n    var source = sources.shift();\n\n    if (!is$1.object(source)) {\n      return target;\n    }\n\n    Object.keys(source).forEach(function (key) {\n      if (is$1.object(source[key])) {\n        if (!Object.keys(target).includes(key)) {\n          Object.assign(target, _defineProperty({}, key, {}));\n        }\n\n        extend(target[key], source[key]);\n      } else {\n        Object.assign(target, _defineProperty({}, key, source[key]));\n      }\n    });\n    return extend.apply(void 0, [target].concat(sources));\n  }\n\n  function wrap(elements, wrapper) {\n    // Convert `elements` to an array, if necessary.\n    var targets = elements.length ? elements : [elements]; // Loops backwards to prevent having to clone the wrapper on the\n    // first element (see `child` below).\n\n    Array.from(targets).reverse().forEach(function (element, index) {\n      var child = index > 0 ? wrapper.cloneNode(true) : wrapper; // Cache the current parent and sibling.\n\n      var parent = element.parentNode;\n      var sibling = element.nextSibling; // Wrap the element (is automatically removed from its current\n      // parent).\n\n      child.appendChild(element); // 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\n      if (sibling) {\n        parent.insertBefore(child, sibling);\n      } else {\n        parent.appendChild(child);\n      }\n    });\n  } // Set attributes\n\n  function setAttributes(element, attributes) {\n    if (!is$1.element(element) || is$1.empty(attributes)) {\n      return;\n    } // Assume null and undefined attributes should be left out,\n    // Setting them would otherwise convert them to \"null\" and \"undefined\"\n\n\n    Object.entries(attributes).filter(function (_ref) {\n      var _ref2 = _slicedToArray(_ref, 2),\n          value = _ref2[1];\n\n      return !is$1.nullOrUndefined(value);\n    }).forEach(function (_ref3) {\n      var _ref4 = _slicedToArray(_ref3, 2),\n          key = _ref4[0],\n          value = _ref4[1];\n\n      return element.setAttribute(key, value);\n    });\n  } // Create a DocumentFragment\n\n  function createElement(type, attributes, text) {\n    // Create a new <element>\n    var element = document.createElement(type); // Set all passed attributes\n\n    if (is$1.object(attributes)) {\n      setAttributes(element, attributes);\n    } // Add text node\n\n\n    if (is$1.string(text)) {\n      element.innerText = text;\n    } // Return built element\n\n\n    return element;\n  } // Inaert an element after another\n\n  function insertAfter(element, target) {\n    if (!is$1.element(element) || !is$1.element(target)) {\n      return;\n    }\n\n    target.parentNode.insertBefore(element, target.nextSibling);\n  } // Insert a DocumentFragment\n\n  function insertElement(type, parent, attributes, text) {\n    if (!is$1.element(parent)) {\n      return;\n    }\n\n    parent.appendChild(createElement(type, attributes, text));\n  } // Remove element(s)\n\n  function removeElement(element) {\n    if (is$1.nodeList(element) || is$1.array(element)) {\n      Array.from(element).forEach(removeElement);\n      return;\n    }\n\n    if (!is$1.element(element) || !is$1.element(element.parentNode)) {\n      return;\n    }\n\n    element.parentNode.removeChild(element);\n  } // Remove all child elements\n\n  function emptyElement(element) {\n    if (!is$1.element(element)) {\n      return;\n    }\n\n    var length = element.childNodes.length;\n\n    while (length > 0) {\n      element.removeChild(element.lastChild);\n      length -= 1;\n    }\n  } // Replace element\n\n  function replaceElement(newChild, oldChild) {\n    if (!is$1.element(oldChild) || !is$1.element(oldChild.parentNode) || !is$1.element(newChild)) {\n      return null;\n    }\n\n    oldChild.parentNode.replaceChild(newChild, oldChild);\n    return newChild;\n  } // Get an attribute object from a string selector\n\n  function getAttributesFromSelector(sel, existingAttributes) {\n    // For example:\n    // '.test' to { class: 'test' }\n    // '#test' to { id: 'test' }\n    // '[data-test=\"test\"]' to { 'data-test': 'test' }\n    if (!is$1.string(sel) || is$1.empty(sel)) {\n      return {};\n    }\n\n    var attributes = {};\n    var existing = extend({}, existingAttributes);\n    sel.split(',').forEach(function (s) {\n      // Remove whitespace\n      var selector = s.trim();\n      var className = selector.replace('.', '');\n      var stripped = selector.replace(/[[\\]]/g, ''); // Get the parts and value\n\n      var parts = stripped.split('=');\n\n      var _parts = _slicedToArray(parts, 1),\n          key = _parts[0];\n\n      var value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : ''; // Get the first character\n\n      var start = selector.charAt(0);\n\n      switch (start) {\n        case '.':\n          // Add to existing classname\n          if (is$1.string(existing.class)) {\n            attributes.class = \"\".concat(existing.class, \" \").concat(className);\n          } else {\n            attributes.class = className;\n          }\n\n          break;\n\n        case '#':\n          // ID selector\n          attributes.id = selector.replace('#', '');\n          break;\n\n        case '[':\n          // Attribute selector\n          attributes[key] = value;\n          break;\n\n        default:\n          break;\n      }\n    });\n    return extend(existing, attributes);\n  } // Toggle hidden\n\n  function toggleHidden(element, hidden) {\n    if (!is$1.element(element)) {\n      return;\n    }\n\n    var hide = hidden;\n\n    if (!is$1.boolean(hide)) {\n      hide = !element.hidden;\n    }\n\n    if (hide) {\n      element.setAttribute('hidden', '');\n    } else {\n      element.removeAttribute('hidden');\n    }\n  } // Mirror Element.classList.toggle, with IE compatibility for \"force\" argument\n\n  function toggleClass(element, className, force) {\n    if (is$1.nodeList(element)) {\n      return Array.from(element).map(function (e) {\n        return toggleClass(e, className, force);\n      });\n    }\n\n    if (is$1.element(element)) {\n      var method = 'toggle';\n\n      if (typeof force !== 'undefined') {\n        method = force ? 'add' : 'remove';\n      }\n\n      element.classList[method](className);\n      return element.classList.contains(className);\n    }\n\n    return false;\n  } // Has class name\n\n  function hasClass(element, className) {\n    return is$1.element(element) && element.classList.contains(className);\n  } // Element matches selector\n\n  function matches$1(element, selector) {\n\n    function match() {\n      return Array.from(document.querySelectorAll(selector)).includes(this);\n    }\n\n    var matches = match;\n    return matches.call(element, selector);\n  } // Find all elements\n\n  function getElements(selector) {\n    return this.elements.container.querySelectorAll(selector);\n  } // Find a single element\n\n  function getElement(selector) {\n    return this.elements.container.querySelector(selector);\n  } // Trap focus inside container\n\n  function trapFocus() {\n    var element = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n    var toggle = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n    if (!is$1.element(element)) {\n      return;\n    }\n\n    var focusable = getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n    var first = focusable[0];\n    var last = focusable[focusable.length - 1];\n\n    var trap = function trap(event) {\n      // Bail if not tab key or not fullscreen\n      if (event.key !== 'Tab' || event.keyCode !== 9) {\n        return;\n      } // Get the current focused element\n\n\n      var focused = document.activeElement;\n\n      if (focused === last && !event.shiftKey) {\n        // Move focus to first element that can be tabbed if Shift isn't used\n        first.focus();\n        event.preventDefault();\n      } else if (focused === first && event.shiftKey) {\n        // Move focus to last element that can be tabbed if Shift is used\n        last.focus();\n        event.preventDefault();\n      }\n    };\n\n    toggleListener.call(this, this.elements.container, 'keydown', trap, toggle, false);\n  } // Set focus and tab focus class\n\n  function setFocus() {\n    var element = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n    var tabFocus = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n    if (!is$1.element(element)) {\n      return;\n    } // Set regular focus\n\n\n    element.focus({\n      preventScroll: true\n    }); // If we want to mimic keyboard focus via tab\n\n    if (tabFocus) {\n      toggleClass(element, this.config.classNames.tabFocus);\n    }\n  }\n\n  // ==========================================================================\n  var transitionEndEvent = function () {\n    var element = document.createElement('span');\n    var events = {\n      WebkitTransition: 'webkitTransitionEnd',\n      MozTransition: 'transitionend',\n      OTransition: 'oTransitionEnd otransitionend',\n      transition: 'transitionend'\n    };\n    var type = Object.keys(events).find(function (event) {\n      return element.style[event] !== undefined;\n    });\n    return is$1.string(type) ? events[type] : false;\n  }(); // Force repaint of element\n\n  function repaint(element) {\n    setTimeout(function () {\n      try {\n        toggleHidden(element, true);\n        element.offsetHeight; // eslint-disable-line\n\n        toggleHidden(element, false);\n      } catch (e) {// Do nothing\n      }\n    }, 0);\n  }\n\n  // ==========================================================================\n  // Browser sniffing\n  // Unfortunately, due to mixed support, UA sniffing is required\n  // ==========================================================================\n  var browser = {\n    isIE:\n    /* @cc_on!@ */\n    !!document.documentMode,\n    isEdge: window.navigator.userAgent.includes('Edge'),\n    isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n    isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n    isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform)\n  };\n\n  var defaultCodecs = {\n    'audio/ogg': 'vorbis',\n    'audio/wav': '1',\n    'video/webm': 'vp8, vorbis',\n    'video/mp4': 'avc1.42E01E, mp4a.40.2',\n    'video/ogg': 'theora'\n  }; // Check for feature support\n\n  var support = {\n    // Basic support\n    audio: 'canPlayType' in document.createElement('audio'),\n    video: 'canPlayType' in document.createElement('video'),\n    // Check for support\n    // Basic functionality vs full UI\n    check: function check(type, provider, playsinline) {\n      var canPlayInline = browser.isIPhone && playsinline && support.playsinline;\n      var api = support[type] || provider !== 'html5';\n      var ui = api && support.rangeInput && (type !== 'video' || !browser.isIPhone || canPlayInline);\n      return {\n        api: api,\n        ui: ui\n      };\n    },\n    // Picture-in-picture support\n    // Safari & Chrome only currently\n    pip: function () {\n      if (browser.isIPhone) {\n        return false;\n      } // Safari\n      // https://developer.apple.com/documentation/webkitjs/adding_picture_in_picture_to_your_safari_media_controls\n\n\n      if (is$1.function(createElement('video').webkitSetPresentationMode)) {\n        return true;\n      } // Chrome\n      // https://developers.google.com/web/updates/2018/10/watch-video-using-picture-in-picture\n\n\n      if (document.pictureInPictureEnabled && !createElement('video').disablePictureInPicture) {\n        return true;\n      }\n\n      return false;\n    }(),\n    // Airplay support\n    // Safari only currently\n    airplay: is$1.function(window.WebKitPlaybackTargetAvailabilityEvent),\n    // Inline playback support\n    // https://webkit.org/blog/6784/new-video-policies-for-ios/\n    playsinline: 'playsInline' in document.createElement('video'),\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    mime: function mime(input) {\n      if (is$1.empty(input)) {\n        return false;\n      }\n\n      var _input$split = input.split('/'),\n          _input$split2 = _slicedToArray(_input$split, 1),\n          mediaType = _input$split2[0];\n\n      var type = input; // Verify we're using HTML5 and there's no media type mismatch\n\n      if (!this.isHTML5 || mediaType !== this.type) {\n        return false;\n      } // Add codec if required\n\n\n      if (Object.keys(defaultCodecs).includes(type)) {\n        type += \"; codecs=\\\"\".concat(defaultCodecs[input], \"\\\"\");\n      }\n\n      try {\n        return Boolean(type && this.media.canPlayType(type).replace(/no/, ''));\n      } catch (e) {\n        return false;\n      }\n    },\n    // Check for textTracks support\n    textTracks: 'textTracks' in document.createElement('video'),\n    // <input type=\"range\"> Sliders\n    rangeInput: function () {\n      var range = document.createElement('input');\n      range.type = 'range';\n      return range.type === 'range';\n    }(),\n    // Touch\n    // NOTE: Remember a device can be mouse + touch enabled so we check on first touch event\n    touch: 'ontouchstart' in document.documentElement,\n    // Detect transitions support\n    transitions: transitionEndEvent !== false,\n    // Reduced motion iOS & MacOS setting\n    // https://webkit.org/blog/7551/responsive-design-for-motion/\n    reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches\n  };\n\n  function validateRatio(input) {\n    if (!is$1.array(input) && (!is$1.string(input) || !input.includes(':'))) {\n      return false;\n    }\n\n    var ratio = is$1.array(input) ? input : input.split(':');\n    return ratio.map(Number).every(is$1.number);\n  }\n  function reduceAspectRatio(ratio) {\n    if (!is$1.array(ratio) || !ratio.every(is$1.number)) {\n      return null;\n    }\n\n    var _ratio = _slicedToArray(ratio, 2),\n        width = _ratio[0],\n        height = _ratio[1];\n\n    var getDivider = function getDivider(w, h) {\n      return h === 0 ? w : getDivider(h, w % h);\n    };\n\n    var divider = getDivider(width, height);\n    return [width / divider, height / divider];\n  }\n  function getAspectRatio(input) {\n    var parse = function parse(ratio) {\n      if (!validateRatio(ratio)) {\n        return null;\n      }\n\n      return ratio.split(':').map(Number);\n    }; // Provided ratio\n\n\n    var ratio = parse(input); // Get from config\n\n    if (ratio === null) {\n      ratio = parse(this.config.ratio);\n    } // Get from embed\n\n\n    if (ratio === null && !is$1.empty(this.embed) && is$1.array(this.embed.ratio)) {\n      ratio = this.embed.ratio;\n    } // Get from HTML5 video\n\n\n    if (ratio === null && this.isHTML5) {\n      var _this$media = this.media,\n          videoWidth = _this$media.videoWidth,\n          videoHeight = _this$media.videoHeight;\n      ratio = reduceAspectRatio([videoWidth, videoHeight]);\n    }\n\n    return ratio;\n  } // Set aspect ratio for responsive container\n\n  function setAspectRatio(input) {\n    if (!this.isVideo) {\n      return {};\n    }\n\n    var ratio = getAspectRatio.call(this, input);\n\n    var _ref = is$1.array(ratio) ? ratio : [0, 0],\n        _ref2 = _slicedToArray(_ref, 2),\n        w = _ref2[0],\n        h = _ref2[1];\n\n    var padding = 100 / w * h;\n    this.elements.wrapper.style.paddingBottom = \"\".concat(padding, \"%\"); // For Vimeo we have an extra <div> to hide the standard controls and UI\n\n    if (this.isVimeo && this.supported.ui) {\n      var height = 240;\n      var offset = (height - padding) / (height / 50);\n      this.media.style.transform = \"translateY(-\".concat(offset, \"%)\");\n    } else if (this.isHTML5) {\n      this.elements.wrapper.classList.toggle(this.config.classNames.videoFixedRatio, ratio !== null);\n    }\n\n    return {\n      padding: padding,\n      ratio: ratio\n    };\n  }\n\n  // ==========================================================================\n  var html5 = {\n    getSources: function getSources() {\n      var _this = this;\n\n      if (!this.isHTML5) {\n        return [];\n      }\n\n      var sources = Array.from(this.media.querySelectorAll('source')); // Filter out unsupported sources (if type is specified)\n\n      return sources.filter(function (source) {\n        var type = source.getAttribute('type');\n\n        if (is$1.empty(type)) {\n          return true;\n        }\n\n        return support.mime.call(_this, type);\n      });\n    },\n    // Get quality levels\n    getQualityOptions: function getQualityOptions() {\n      // Get sizes from <source> elements\n      return html5.getSources.call(this).map(function (source) {\n        return Number(source.getAttribute('size'));\n      }).filter(Boolean);\n    },\n    extend: function extend() {\n      if (!this.isHTML5) {\n        return;\n      }\n\n      var player = this; // Set aspect ratio if set\n\n      setAspectRatio.call(player); // Quality\n\n      Object.defineProperty(player.media, 'quality', {\n        get: function get() {\n          // Get sources\n          var sources = html5.getSources.call(player);\n          var source = sources.find(function (source) {\n            return source.getAttribute('src') === player.source;\n          }); // Return size, if match is found\n\n          return source && Number(source.getAttribute('size'));\n        },\n        set: function set(input) {\n          // Get sources\n          var sources = html5.getSources.call(player); // Get first match for requested size\n\n          var source = sources.find(function (source) {\n            return Number(source.getAttribute('size')) === input;\n          }); // No matching source found\n\n          if (!source) {\n            return;\n          } // Get current state\n\n\n          var _player$media = player.media,\n              currentTime = _player$media.currentTime,\n              paused = _player$media.paused,\n              preload = _player$media.preload,\n              readyState = _player$media.readyState; // Set new source\n\n          player.media.src = source.getAttribute('src'); // Prevent loading if preload=\"none\" and the current source isn't loaded (#1044)\n\n          if (preload !== 'none' || readyState) {\n            // Restore time\n            player.once('loadedmetadata', function () {\n              player.currentTime = currentTime; // Resume playing\n\n              if (!paused) {\n                player.play();\n              }\n            }); // Load new source\n\n            player.media.load();\n          } // Trigger change event\n\n\n          triggerEvent.call(player, player.media, 'qualitychange', false, {\n            quality: input\n          });\n        }\n      });\n    },\n    // Cancel current network requests\n    // See https://github.com/sampotts/plyr/issues/174\n    cancelRequests: function cancelRequests() {\n      if (!this.isHTML5) {\n        return;\n      } // Remove child sources\n\n\n      removeElement(html5.getSources.call(this)); // Set blank video src attribute\n      // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n      // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n\n      this.media.setAttribute('src', this.config.blankVideo); // Load the new empty source\n      // This will cancel existing requests\n      // See https://github.com/sampotts/plyr/issues/174\n\n      this.media.load(); // Debugging\n\n      this.debug.log('Cancelled network requests');\n    }\n  };\n\n  // ==========================================================================\n\n  function dedupe(array) {\n    if (!is$1.array(array)) {\n      return array;\n    }\n\n    return array.filter(function (item, index) {\n      return array.indexOf(item) === index;\n    });\n  } // Get the closest value in an array\n\n  function closest(array, value) {\n    if (!is$1.array(array) || !array.length) {\n      return null;\n    }\n\n    return array.reduce(function (prev, curr) {\n      return Math.abs(curr - value) < Math.abs(prev - value) ? curr : prev;\n    });\n  }\n\n  // ==========================================================================\n\n  function generateId(prefix) {\n    return \"\".concat(prefix, \"-\").concat(Math.floor(Math.random() * 10000));\n  } // Format string\n\n  function format(input) {\n    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n\n    if (is$1.empty(input)) {\n      return input;\n    }\n\n    return input.toString().replace(/{(\\d+)}/g, function (match, i) {\n      return args[i].toString();\n    });\n  } // Get percentage\n\n  function getPercentage(current, max) {\n    if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n      return 0;\n    }\n\n    return (current / max * 100).toFixed(2);\n  } // Replace all occurances of a string in a string\n\n  function replaceAll() {\n    var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n    var find = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n    var replace = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';\n    return input.replace(new RegExp(find.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g, '\\\\$1'), 'g'), replace.toString());\n  } // Convert to title case\n\n  function toTitleCase() {\n    var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n    return input.toString().replace(/\\w\\S*/g, function (text) {\n      return text.charAt(0).toUpperCase() + text.substr(1).toLowerCase();\n    });\n  } // Convert string to pascalCase\n\n  function toPascalCase() {\n    var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n    var string = input.toString(); // Convert kebab case\n\n    string = replaceAll(string, '-', ' '); // Convert snake case\n\n    string = replaceAll(string, '_', ' '); // Convert to title case\n\n    string = toTitleCase(string); // Convert to pascal case\n\n    return replaceAll(string, ' ', '');\n  } // Convert string to pascalCase\n\n  function toCamelCase() {\n    var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n    var string = input.toString(); // Convert to pascal case\n\n    string = toPascalCase(string); // Convert first character to lowercase\n\n    return string.charAt(0).toLowerCase() + string.slice(1);\n  } // Remove HTML from a string\n\n  function stripHTML(source) {\n    var fragment = document.createDocumentFragment();\n    var element = document.createElement('div');\n    fragment.appendChild(element);\n    element.innerHTML = source;\n    return fragment.firstChild.innerText;\n  } // Like outerHTML, but also works for DocumentFragment\n\n  function getHTML(element) {\n    var wrapper = document.createElement('div');\n    wrapper.appendChild(element);\n    return wrapper.innerHTML;\n  }\n\n  var resources = {\n    pip: 'PIP',\n    airplay: 'AirPlay',\n    html5: 'HTML5',\n    vimeo: 'Vimeo',\n    youtube: 'YouTube'\n  };\n  var i18n = {\n    get: function get() {\n      var key = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n      var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n      if (is$1.empty(key) || is$1.empty(config)) {\n        return '';\n      }\n\n      var string = getDeep(config.i18n, key);\n\n      if (is$1.empty(string)) {\n        if (Object.keys(resources).includes(key)) {\n          return resources[key];\n        }\n\n        return '';\n      }\n\n      var replace = {\n        '{seektime}': config.seekTime,\n        '{title}': config.title\n      };\n      Object.entries(replace).forEach(function (_ref) {\n        var _ref2 = _slicedToArray(_ref, 2),\n            key = _ref2[0],\n            value = _ref2[1];\n\n        string = replaceAll(string, key, value);\n      });\n      return string;\n    }\n  };\n\n  var Storage =\n  /*#__PURE__*/\n  function () {\n    function Storage(player) {\n      _classCallCheck(this, Storage);\n\n      this.enabled = player.config.storage.enabled;\n      this.key = player.config.storage.key;\n    } // Check for actual support (see if we can use it)\n\n\n    _createClass(Storage, [{\n      key: \"get\",\n      value: function get(key) {\n        if (!Storage.supported || !this.enabled) {\n          return null;\n        }\n\n        var store = window.localStorage.getItem(this.key);\n\n        if (is$1.empty(store)) {\n          return null;\n        }\n\n        var json = JSON.parse(store);\n        return is$1.string(key) && key.length ? json[key] : json;\n      }\n    }, {\n      key: \"set\",\n      value: function set(object) {\n        // Bail if we don't have localStorage support or it's disabled\n        if (!Storage.supported || !this.enabled) {\n          return;\n        } // Can only store objectst\n\n\n        if (!is$1.object(object)) {\n          return;\n        } // Get current storage\n\n\n        var storage = this.get(); // Default to empty object\n\n        if (is$1.empty(storage)) {\n          storage = {};\n        } // Update the working copy of the values\n\n\n        extend(storage, object); // Update storage\n\n        window.localStorage.setItem(this.key, JSON.stringify(storage));\n      }\n    }], [{\n      key: \"supported\",\n      get: function get() {\n        try {\n          if (!('localStorage' in window)) {\n            return false;\n          }\n\n          var test = '___test'; // Try to use it (it might be disabled, e.g. user is in private mode)\n          // see: https://github.com/sampotts/plyr/issues/131\n\n          window.localStorage.setItem(test, test);\n          window.localStorage.removeItem(test);\n          return true;\n        } catch (e) {\n          return false;\n        }\n      }\n    }]);\n\n    return Storage;\n  }();\n\n  // ==========================================================================\n  // Fetch wrapper\n  // Using XHR to avoid issues with older browsers\n  // ==========================================================================\n  function fetch(url) {\n    var responseType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'text';\n    return new Promise(function (resolve, reject) {\n      try {\n        var request = new XMLHttpRequest(); // Check for CORS support\n\n        if (!('withCredentials' in request)) {\n          return;\n        }\n\n        request.addEventListener('load', function () {\n          if (responseType === 'text') {\n            try {\n              resolve(JSON.parse(request.responseText));\n            } catch (e) {\n              resolve(request.responseText);\n            }\n          } else {\n            resolve(request.response);\n          }\n        });\n        request.addEventListener('error', function () {\n          throw new Error(request.status);\n        });\n        request.open('GET', url, true); // Set the required response type\n\n        request.responseType = responseType;\n        request.send();\n      } catch (e) {\n        reject(e);\n      }\n    });\n  }\n\n  // ==========================================================================\n\n  function loadSprite(url, id) {\n    if (!is$1.string(url)) {\n      return;\n    }\n\n    var prefix = 'cache';\n    var hasId = is$1.string(id);\n    var isCached = false;\n\n    var exists = function exists() {\n      return document.getElementById(id) !== null;\n    };\n\n    var update = function update(container, data) {\n      container.innerHTML = data; // Check again incase of race condition\n\n      if (hasId && exists()) {\n        return;\n      } // Inject the SVG to the body\n\n\n      document.body.insertAdjacentElement('afterbegin', container);\n    }; // Only load once if ID set\n\n\n    if (!hasId || !exists()) {\n      var useStorage = Storage.supported; // Create container\n\n      var container = document.createElement('div');\n      container.setAttribute('hidden', '');\n\n      if (hasId) {\n        container.setAttribute('id', id);\n      } // Check in cache\n\n\n      if (useStorage) {\n        var cached = window.localStorage.getItem(\"\".concat(prefix, \"-\").concat(id));\n        isCached = cached !== null;\n\n        if (isCached) {\n          var data = JSON.parse(cached);\n          update(container, data.content);\n        }\n      } // Get the sprite\n\n\n      fetch(url).then(function (result) {\n        if (is$1.empty(result)) {\n          return;\n        }\n\n        if (useStorage) {\n          window.localStorage.setItem(\"\".concat(prefix, \"-\").concat(id), JSON.stringify({\n            content: result\n          }));\n        }\n\n        update(container, result);\n      }).catch(function () {});\n    }\n  }\n\n  // ==========================================================================\n\n  var getHours = function getHours(value) {\n    return Math.trunc(value / 60 / 60 % 60, 10);\n  };\n  var getMinutes = function getMinutes(value) {\n    return Math.trunc(value / 60 % 60, 10);\n  };\n  var getSeconds = function getSeconds(value) {\n    return Math.trunc(value % 60, 10);\n  }; // Format time to UI friendly string\n\n  function formatTime() {\n    var time = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n    var displayHours = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n    var inverted = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n    // Bail if the value isn't a number\n    if (!is$1.number(time)) {\n      return formatTime(null, displayHours, inverted);\n    } // Format time component to add leading zero\n\n\n    var format = function format(value) {\n      return \"0\".concat(value).slice(-2);\n    }; // Breakdown to hours, mins, secs\n\n\n    var hours = getHours(time);\n    var mins = getMinutes(time);\n    var secs = getSeconds(time); // Do we need to display hours?\n\n    if (displayHours || hours > 0) {\n      hours = \"\".concat(hours, \":\");\n    } else {\n      hours = '';\n    } // Render\n\n\n    return \"\".concat(inverted && time > 0 ? '-' : '').concat(hours).concat(format(mins), \":\").concat(format(secs));\n  }\n\n  var controls = {\n    // Get icon URL\n    getIconUrl: function getIconUrl() {\n      var url = new URL(this.config.iconUrl, window.location);\n      var cors = url.host !== window.location.host || browser.isIE && !window.svg4everybody;\n      return {\n        url: this.config.iconUrl,\n        cors: cors\n      };\n    },\n    // Find the UI controls\n    findElements: function findElements() {\n      try {\n        this.elements.controls = getElement.call(this, this.config.selectors.controls.wrapper); // Buttons\n\n        this.elements.buttons = {\n          play: getElements.call(this, this.config.selectors.buttons.play),\n          pause: getElement.call(this, this.config.selectors.buttons.pause),\n          restart: getElement.call(this, this.config.selectors.buttons.restart),\n          rewind: getElement.call(this, this.config.selectors.buttons.rewind),\n          fastForward: getElement.call(this, this.config.selectors.buttons.fastForward),\n          mute: getElement.call(this, this.config.selectors.buttons.mute),\n          pip: getElement.call(this, this.config.selectors.buttons.pip),\n          airplay: getElement.call(this, this.config.selectors.buttons.airplay),\n          settings: getElement.call(this, this.config.selectors.buttons.settings),\n          captions: getElement.call(this, this.config.selectors.buttons.captions),\n          fullscreen: getElement.call(this, this.config.selectors.buttons.fullscreen)\n        }; // Progress\n\n        this.elements.progress = getElement.call(this, this.config.selectors.progress); // Inputs\n\n        this.elements.inputs = {\n          seek: getElement.call(this, this.config.selectors.inputs.seek),\n          volume: getElement.call(this, this.config.selectors.inputs.volume)\n        }; // Display\n\n        this.elements.display = {\n          buffer: getElement.call(this, this.config.selectors.display.buffer),\n          currentTime: getElement.call(this, this.config.selectors.display.currentTime),\n          duration: getElement.call(this, this.config.selectors.display.duration)\n        }; // Seek tooltip\n\n        if (is$1.element(this.elements.progress)) {\n          this.elements.display.seekTooltip = this.elements.progress.querySelector(\".\".concat(this.config.classNames.tooltip));\n        }\n\n        return true;\n      } catch (error) {\n        // Log it\n        this.debug.warn('It looks like there is a problem with your custom controls HTML', error); // Restore native video controls\n\n        this.toggleNativeControls(true);\n        return false;\n      }\n    },\n    // Create <svg> icon\n    createIcon: function createIcon(type, attributes) {\n      var namespace = 'http://www.w3.org/2000/svg';\n      var iconUrl = controls.getIconUrl.call(this);\n      var iconPath = \"\".concat(!iconUrl.cors ? iconUrl.url : '', \"#\").concat(this.config.iconPrefix); // Create <svg>\n\n      var icon = document.createElementNS(namespace, 'svg');\n      setAttributes(icon, extend(attributes, {\n        role: 'presentation',\n        focusable: 'false'\n      })); // Create the <use> to reference sprite\n\n      var use = document.createElementNS(namespace, 'use');\n      var path = \"\".concat(iconPath, \"-\").concat(type); // Set `href` attributes\n      // https://github.com/sampotts/plyr/issues/460\n      // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n\n      if ('href' in use) {\n        use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n      } // Always set the older attribute even though it's \"deprecated\" (it'll be around for ages)\n\n\n      use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path); // Add <use> to <svg>\n\n      icon.appendChild(use);\n      return icon;\n    },\n    // Create hidden text label\n    createLabel: function createLabel(key) {\n      var attr = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      var text = i18n.get(key, this.config);\n      var attributes = Object.assign({}, attr, {\n        class: [attr.class, this.config.classNames.hidden].filter(Boolean).join(' ')\n      });\n      return createElement('span', attributes, text);\n    },\n    // Create a badge\n    createBadge: function createBadge(text) {\n      if (is$1.empty(text)) {\n        return null;\n      }\n\n      var badge = createElement('span', {\n        class: this.config.classNames.menu.value\n      });\n      badge.appendChild(createElement('span', {\n        class: this.config.classNames.menu.badge\n      }, text));\n      return badge;\n    },\n    // Create a <button>\n    createButton: function createButton(buttonType, attr) {\n      var _this = this;\n\n      var attributes = extend({}, attr);\n      var type = toCamelCase(buttonType);\n      var props = {\n        element: 'button',\n        toggle: false,\n        label: null,\n        icon: null,\n        labelPressed: null,\n        iconPressed: null\n      };\n      ['element', 'icon', 'label'].forEach(function (key) {\n        if (Object.keys(attributes).includes(key)) {\n          props[key] = attributes[key];\n          delete attributes[key];\n        }\n      }); // Default to 'button' type to prevent form submission\n\n      if (props.element === 'button' && !Object.keys(attributes).includes('type')) {\n        attributes.type = 'button';\n      } // Set class name\n\n\n      if (Object.keys(attributes).includes('class')) {\n        if (!attributes.class.split(' ').some(function (c) {\n          return c === _this.config.classNames.control;\n        })) {\n          extend(attributes, {\n            class: \"\".concat(attributes.class, \" \").concat(this.config.classNames.control)\n          });\n        }\n      } else {\n        attributes.class = this.config.classNames.control;\n      } // Large play button\n\n\n      switch (buttonType) {\n        case 'play':\n          props.toggle = true;\n          props.label = 'play';\n          props.labelPressed = 'pause';\n          props.icon = 'play';\n          props.iconPressed = 'pause';\n          break;\n\n        case 'mute':\n          props.toggle = true;\n          props.label = 'mute';\n          props.labelPressed = 'unmute';\n          props.icon = 'volume';\n          props.iconPressed = 'muted';\n          break;\n\n        case 'captions':\n          props.toggle = true;\n          props.label = 'enableCaptions';\n          props.labelPressed = 'disableCaptions';\n          props.icon = 'captions-off';\n          props.iconPressed = 'captions-on';\n          break;\n\n        case 'fullscreen':\n          props.toggle = true;\n          props.label = 'enterFullscreen';\n          props.labelPressed = 'exitFullscreen';\n          props.icon = 'enter-fullscreen';\n          props.iconPressed = 'exit-fullscreen';\n          break;\n\n        case 'play-large':\n          attributes.class += \" \".concat(this.config.classNames.control, \"--overlaid\");\n          type = 'play';\n          props.label = 'play';\n          props.icon = 'play';\n          break;\n\n        default:\n          if (is$1.empty(props.label)) {\n            props.label = type;\n          }\n\n          if (is$1.empty(props.icon)) {\n            props.icon = buttonType;\n          }\n\n      }\n\n      var button = createElement(props.element); // Setup toggle icon and labels\n\n      if (props.toggle) {\n        // Icon\n        button.appendChild(controls.createIcon.call(this, props.iconPressed, {\n          class: 'icon--pressed'\n        }));\n        button.appendChild(controls.createIcon.call(this, props.icon, {\n          class: 'icon--not-pressed'\n        })); // Label/Tooltip\n\n        button.appendChild(controls.createLabel.call(this, props.labelPressed, {\n          class: 'label--pressed'\n        }));\n        button.appendChild(controls.createLabel.call(this, props.label, {\n          class: 'label--not-pressed'\n        }));\n      } else {\n        button.appendChild(controls.createIcon.call(this, props.icon));\n        button.appendChild(controls.createLabel.call(this, props.label));\n      } // Merge and set attributes\n\n\n      extend(attributes, getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n      setAttributes(button, attributes); // We have multiple play buttons\n\n      if (type === 'play') {\n        if (!is$1.array(this.elements.buttons[type])) {\n          this.elements.buttons[type] = [];\n        }\n\n        this.elements.buttons[type].push(button);\n      } else {\n        this.elements.buttons[type] = button;\n      }\n\n      return button;\n    },\n    // Create an <input type='range'>\n    createRange: function createRange(type, attributes) {\n      // Seek input\n      var input = createElement('input', extend(getAttributesFromSelector(this.config.selectors.inputs[type]), {\n        type: 'range',\n        min: 0,\n        max: 100,\n        step: 0.01,\n        value: 0,\n        autocomplete: 'off',\n        // A11y fixes for https://github.com/sampotts/plyr/issues/905\n        role: 'slider',\n        'aria-label': i18n.get(type, this.config),\n        'aria-valuemin': 0,\n        'aria-valuemax': 100,\n        'aria-valuenow': 0\n      }, attributes));\n      this.elements.inputs[type] = input; // Set the fill for webkit now\n\n      controls.updateRangeFill.call(this, input); // Improve support on touch devices\n\n      RangeTouch.setup(input);\n      return input;\n    },\n    // Create a <progress>\n    createProgress: function createProgress(type, attributes) {\n      var progress = createElement('progress', extend(getAttributesFromSelector(this.config.selectors.display[type]), {\n        min: 0,\n        max: 100,\n        value: 0,\n        role: 'progressbar',\n        'aria-hidden': true\n      }, attributes)); // Create the label inside\n\n      if (type !== 'volume') {\n        progress.appendChild(createElement('span', null, '0'));\n        var suffixKey = {\n          played: 'played',\n          buffer: 'buffered'\n        }[type];\n        var suffix = suffixKey ? i18n.get(suffixKey, this.config) : '';\n        progress.innerText = \"% \".concat(suffix.toLowerCase());\n      }\n\n      this.elements.display[type] = progress;\n      return progress;\n    },\n    // Create time display\n    createTime: function createTime(type, attrs) {\n      var attributes = getAttributesFromSelector(this.config.selectors.display[type], attrs);\n      var container = createElement('div', extend(attributes, {\n        class: \"\".concat(attributes.class ? attributes.class : '', \" \").concat(this.config.classNames.display.time, \" \").trim(),\n        'aria-label': i18n.get(type, this.config)\n      }), '00:00'); // Reference for updates\n\n      this.elements.display[type] = container;\n      return container;\n    },\n    // Bind keyboard shortcuts for a menu item\n    // We have to bind to keyup otherwise Firefox triggers a click when a keydown event handler shifts focus\n    // https://bugzilla.mozilla.org/show_bug.cgi?id=1220143\n    bindMenuItemShortcuts: function bindMenuItemShortcuts(menuItem, type) {\n      var _this2 = this;\n\n      // Navigate through menus via arrow keys and space\n      on(menuItem, 'keydown keyup', function (event) {\n        // We only care about space and ⬆️ ⬇️️ ➡️\n        if (![32, 38, 39, 40].includes(event.which)) {\n          return;\n        } // Prevent play / seek\n\n\n        event.preventDefault();\n        event.stopPropagation(); // We're just here to prevent the keydown bubbling\n\n        if (event.type === 'keydown') {\n          return;\n        }\n\n        var isRadioButton = matches$1(menuItem, '[role=\"menuitemradio\"]'); // Show the respective menu\n\n        if (!isRadioButton && [32, 39].includes(event.which)) {\n          controls.showMenuPanel.call(_this2, type, true);\n        } else {\n          var target;\n\n          if (event.which !== 32) {\n            if (event.which === 40 || isRadioButton && event.which === 39) {\n              target = menuItem.nextElementSibling;\n\n              if (!is$1.element(target)) {\n                target = menuItem.parentNode.firstElementChild;\n              }\n            } else {\n              target = menuItem.previousElementSibling;\n\n              if (!is$1.element(target)) {\n                target = menuItem.parentNode.lastElementChild;\n              }\n            }\n\n            setFocus.call(_this2, target, true);\n          }\n        }\n      }, false); // Enter will fire a `click` event but we still need to manage focus\n      // So we bind to keyup which fires after and set focus here\n\n      on(menuItem, 'keyup', function (event) {\n        if (event.which !== 13) {\n          return;\n        }\n\n        controls.focusFirstMenuItem.call(_this2, null, true);\n      });\n    },\n    // Create a settings menu item\n    createMenuItem: function createMenuItem(_ref) {\n      var _this3 = this;\n\n      var value = _ref.value,\n          list = _ref.list,\n          type = _ref.type,\n          title = _ref.title,\n          _ref$badge = _ref.badge,\n          badge = _ref$badge === void 0 ? null : _ref$badge,\n          _ref$checked = _ref.checked,\n          checked = _ref$checked === void 0 ? false : _ref$checked;\n      var attributes = getAttributesFromSelector(this.config.selectors.inputs[type]);\n      var menuItem = createElement('button', extend(attributes, {\n        type: 'button',\n        role: 'menuitemradio',\n        class: \"\".concat(this.config.classNames.control, \" \").concat(attributes.class ? attributes.class : '').trim(),\n        'aria-checked': checked,\n        value: value\n      }));\n      var flex = createElement('span'); // We have to set as HTML incase of special characters\n\n      flex.innerHTML = title;\n\n      if (is$1.element(badge)) {\n        flex.appendChild(badge);\n      }\n\n      menuItem.appendChild(flex); // Replicate radio button behaviour\n\n      Object.defineProperty(menuItem, 'checked', {\n        enumerable: true,\n        get: function get() {\n          return menuItem.getAttribute('aria-checked') === 'true';\n        },\n        set: function set(checked) {\n          // Ensure exclusivity\n          if (checked) {\n            Array.from(menuItem.parentNode.children).filter(function (node) {\n              return matches$1(node, '[role=\"menuitemradio\"]');\n            }).forEach(function (node) {\n              return node.setAttribute('aria-checked', 'false');\n            });\n          }\n\n          menuItem.setAttribute('aria-checked', checked ? 'true' : 'false');\n        }\n      });\n      this.listeners.bind(menuItem, 'click keyup', function (event) {\n        if (is$1.keyboardEvent(event) && event.which !== 32) {\n          return;\n        }\n\n        event.preventDefault();\n        event.stopPropagation();\n        menuItem.checked = true;\n\n        switch (type) {\n          case 'language':\n            _this3.currentTrack = Number(value);\n            break;\n\n          case 'quality':\n            _this3.quality = value;\n            break;\n\n          case 'speed':\n            _this3.speed = parseFloat(value);\n            break;\n\n          default:\n            break;\n        }\n\n        controls.showMenuPanel.call(_this3, 'home', is$1.keyboardEvent(event));\n      }, type, false);\n      controls.bindMenuItemShortcuts.call(this, menuItem, type);\n      list.appendChild(menuItem);\n    },\n    // Format a time for display\n    formatTime: function formatTime$1() {\n      var time = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n      var inverted = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n      // Bail if the value isn't a number\n      if (!is$1.number(time)) {\n        return time;\n      } // Always display hours if duration is over an hour\n\n\n      var forceHours = getHours(this.duration) > 0;\n      return formatTime(time, forceHours, inverted);\n    },\n    // Update the displayed time\n    updateTimeDisplay: function updateTimeDisplay() {\n      var target = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;\n      var time = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n      var inverted = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n      // Bail if there's no element to display or the value isn't a number\n      if (!is$1.element(target) || !is$1.number(time)) {\n        return;\n      } // eslint-disable-next-line no-param-reassign\n\n\n      target.innerText = controls.formatTime(time, inverted);\n    },\n    // Update volume UI and storage\n    updateVolume: function updateVolume() {\n      if (!this.supported.ui) {\n        return;\n      } // Update range\n\n\n      if (is$1.element(this.elements.inputs.volume)) {\n        controls.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n      } // Update mute state\n\n\n      if (is$1.element(this.elements.buttons.mute)) {\n        this.elements.buttons.mute.pressed = this.muted || this.volume === 0;\n      }\n    },\n    // Update seek value and lower fill\n    setRange: function setRange(target) {\n      var value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n      if (!is$1.element(target)) {\n        return;\n      } // eslint-disable-next-line\n\n\n      target.value = value; // Webkit range fill\n\n      controls.updateRangeFill.call(this, target);\n    },\n    // Update <progress> elements\n    updateProgress: function updateProgress(event) {\n      var _this4 = this;\n\n      if (!this.supported.ui || !is$1.event(event)) {\n        return;\n      }\n\n      var value = 0;\n\n      var setProgress = function setProgress(target, input) {\n        var value = is$1.number(input) ? input : 0;\n        var progress = is$1.element(target) ? target : _this4.elements.display.buffer; // Update value and label\n\n        if (is$1.element(progress)) {\n          progress.value = value; // Update text label inside\n\n          var label = progress.getElementsByTagName('span')[0];\n\n          if (is$1.element(label)) {\n            label.childNodes[0].nodeValue = value;\n          }\n        }\n      };\n\n      if (event) {\n        switch (event.type) {\n          // Video playing\n          case 'timeupdate':\n          case 'seeking':\n          case 'seeked':\n            value = getPercentage(this.currentTime, this.duration); // Set seek range value only if it's a 'natural' time event\n\n            if (event.type === 'timeupdate') {\n              controls.setRange.call(this, this.elements.inputs.seek, value);\n            }\n\n            break;\n          // Check buffer status\n\n          case 'playing':\n          case 'progress':\n            setProgress(this.elements.display.buffer, this.buffered * 100);\n            break;\n\n          default:\n            break;\n        }\n      }\n    },\n    // Webkit polyfill for lower fill range\n    updateRangeFill: function updateRangeFill(target) {\n      // Get range from event if event passed\n      var range = is$1.event(target) ? target.target : target; // Needs to be a valid <input type='range'>\n\n      if (!is$1.element(range) || range.getAttribute('type') !== 'range') {\n        return;\n      } // Set aria values for https://github.com/sampotts/plyr/issues/905\n\n\n      if (matches$1(range, this.config.selectors.inputs.seek)) {\n        range.setAttribute('aria-valuenow', this.currentTime);\n        var currentTime = controls.formatTime(this.currentTime);\n        var duration = controls.formatTime(this.duration);\n        var format = i18n.get('seekLabel', this.config);\n        range.setAttribute('aria-valuetext', format.replace('{currentTime}', currentTime).replace('{duration}', duration));\n      } else if (matches$1(range, this.config.selectors.inputs.volume)) {\n        var percent = range.value * 100;\n        range.setAttribute('aria-valuenow', percent);\n        range.setAttribute('aria-valuetext', \"\".concat(percent.toFixed(1), \"%\"));\n      } else {\n        range.setAttribute('aria-valuenow', range.value);\n      } // WebKit only\n\n\n      if (!browser.isWebkit) {\n        return;\n      } // Set CSS custom property\n\n\n      range.style.setProperty('--value', \"\".concat(range.value / range.max * 100, \"%\"));\n    },\n    // Update hover tooltip for seeking\n    updateSeekTooltip: function updateSeekTooltip(event) {\n      var _this5 = this;\n\n      // Bail if setting not true\n      if (!this.config.tooltips.seek || !is$1.element(this.elements.inputs.seek) || !is$1.element(this.elements.display.seekTooltip) || this.duration === 0) {\n        return;\n      } // Calculate percentage\n\n\n      var percent = 0;\n      var clientRect = this.elements.progress.getBoundingClientRect();\n      var visible = \"\".concat(this.config.classNames.tooltip, \"--visible\");\n\n      var toggle = function toggle(_toggle) {\n        toggleClass(_this5.elements.display.seekTooltip, visible, _toggle);\n      }; // Hide on touch\n\n\n      if (this.touch) {\n        toggle(false);\n        return;\n      } // Determine percentage, if already visible\n\n\n      if (is$1.event(event)) {\n        percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n      } else if (hasClass(this.elements.display.seekTooltip, visible)) {\n        percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n      } else {\n        return;\n      } // Set bounds\n\n\n      if (percent < 0) {\n        percent = 0;\n      } else if (percent > 100) {\n        percent = 100;\n      } // Display the time a click would seek to\n\n\n      controls.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent); // Set position\n\n      this.elements.display.seekTooltip.style.left = \"\".concat(percent, \"%\"); // Show/hide the tooltip\n      // If the event is a moues in/out and percentage is inside bounds\n\n      if (is$1.event(event) && ['mouseenter', 'mouseleave'].includes(event.type)) {\n        toggle(event.type === 'mouseenter');\n      }\n    },\n    // Handle time change event\n    timeUpdate: function timeUpdate(event) {\n      // Only invert if only one time element is displayed and used for both duration and currentTime\n      var invert = !is$1.element(this.elements.display.duration) && this.config.invertTime; // Duration\n\n      controls.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert); // Ignore updates while seeking\n\n      if (event && event.type === 'timeupdate' && this.media.seeking) {\n        return;\n      } // Playing progress\n\n\n      controls.updateProgress.call(this, event);\n    },\n    // Show the duration on metadataloaded or durationchange events\n    durationUpdate: function durationUpdate() {\n      // Bail if no UI or durationchange event triggered after playing/seek when invertTime is false\n      if (!this.supported.ui || !this.config.invertTime && this.currentTime) {\n        return;\n      } // If duration is the 2**32 (shaka), Infinity (HLS), DASH-IF (Number.MAX_SAFE_INTEGER || Number.MAX_VALUE) indicating live we hide the currentTime and progressbar.\n      // https://github.com/video-dev/hls.js/blob/5820d29d3c4c8a46e8b75f1e3afa3e68c1a9a2db/src/controller/buffer-controller.js#L415\n      // https://github.com/google/shaka-player/blob/4d889054631f4e1cf0fbd80ddd2b71887c02e232/lib/media/streaming_engine.js#L1062\n      // https://github.com/Dash-Industry-Forum/dash.js/blob/69859f51b969645b234666800d4cb596d89c602d/src/dash/models/DashManifestModel.js#L338\n\n\n      if (this.duration >= Math.pow(2, 32)) {\n        toggleHidden(this.elements.display.currentTime, true);\n        toggleHidden(this.elements.progress, true);\n        return;\n      } // Update ARIA values\n\n\n      if (is$1.element(this.elements.inputs.seek)) {\n        this.elements.inputs.seek.setAttribute('aria-valuemax', this.duration);\n      } // If there's a spot to display duration\n\n\n      var hasDuration = is$1.element(this.elements.display.duration); // If there's only one time display, display duration there\n\n      if (!hasDuration && this.config.displayDuration && this.paused) {\n        controls.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n      } // If there's a duration element, update content\n\n\n      if (hasDuration) {\n        controls.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n      } // Update the tooltip (if visible)\n\n\n      controls.updateSeekTooltip.call(this);\n    },\n    // Hide/show a tab\n    toggleMenuButton: function toggleMenuButton(setting, toggle) {\n      toggleHidden(this.elements.settings.buttons[setting], !toggle);\n    },\n    // Update the selected setting\n    updateSetting: function updateSetting(setting, container, input) {\n      var pane = this.elements.settings.panels[setting];\n      var value = null;\n      var list = container;\n\n      if (setting === 'captions') {\n        value = this.currentTrack;\n      } else {\n        value = !is$1.empty(input) ? input : this[setting]; // Get default\n\n        if (is$1.empty(value)) {\n          value = this.config[setting].default;\n        } // Unsupported value\n\n\n        if (!is$1.empty(this.options[setting]) && !this.options[setting].includes(value)) {\n          this.debug.warn(\"Unsupported value of '\".concat(value, \"' for \").concat(setting));\n          return;\n        } // Disabled value\n\n\n        if (!this.config[setting].options.includes(value)) {\n          this.debug.warn(\"Disabled value of '\".concat(value, \"' for \").concat(setting));\n          return;\n        }\n      } // Get the list if we need to\n\n\n      if (!is$1.element(list)) {\n        list = pane && pane.querySelector('[role=\"menu\"]');\n      } // If there's no list it means it's not been rendered...\n\n\n      if (!is$1.element(list)) {\n        return;\n      } // Update the label\n\n\n      var label = this.elements.settings.buttons[setting].querySelector(\".\".concat(this.config.classNames.menu.value));\n      label.innerHTML = controls.getLabel.call(this, setting, value); // Find the radio option and check it\n\n      var target = list && list.querySelector(\"[value=\\\"\".concat(value, \"\\\"]\"));\n\n      if (is$1.element(target)) {\n        target.checked = true;\n      }\n    },\n    // Translate a value into a nice label\n    getLabel: function getLabel(setting, value) {\n      switch (setting) {\n        case 'speed':\n          return value === 1 ? i18n.get('normal', this.config) : \"\".concat(value, \"&times;\");\n\n        case 'quality':\n          if (is$1.number(value)) {\n            var label = i18n.get(\"qualityLabel.\".concat(value), this.config);\n\n            if (!label.length) {\n              return \"\".concat(value, \"p\");\n            }\n\n            return label;\n          }\n\n          return toTitleCase(value);\n\n        case 'captions':\n          return captions.getLabel.call(this);\n\n        default:\n          return null;\n      }\n    },\n    // Set the quality menu\n    setQualityMenu: function setQualityMenu(options) {\n      var _this6 = this;\n\n      // Menu required\n      if (!is$1.element(this.elements.settings.panels.quality)) {\n        return;\n      }\n\n      var type = 'quality';\n      var list = this.elements.settings.panels.quality.querySelector('[role=\"menu\"]'); // Set options if passed and filter based on uniqueness and config\n\n      if (is$1.array(options)) {\n        this.options.quality = dedupe(options).filter(function (quality) {\n          return _this6.config.quality.options.includes(quality);\n        });\n      } // Toggle the pane and tab\n\n\n      var toggle = !is$1.empty(this.options.quality) && this.options.quality.length > 1;\n      controls.toggleMenuButton.call(this, type, toggle); // Empty the menu\n\n      emptyElement(list); // Check if we need to toggle the parent\n\n      controls.checkMenu.call(this); // If we're hiding, nothing more to do\n\n      if (!toggle) {\n        return;\n      } // Get the badge HTML for HD, 4K etc\n\n\n      var getBadge = function getBadge(quality) {\n        var label = i18n.get(\"qualityBadge.\".concat(quality), _this6.config);\n\n        if (!label.length) {\n          return null;\n        }\n\n        return controls.createBadge.call(_this6, label);\n      }; // Sort options by the config and then render options\n\n\n      this.options.quality.sort(function (a, b) {\n        var sorting = _this6.config.quality.options;\n        return sorting.indexOf(a) > sorting.indexOf(b) ? 1 : -1;\n      }).forEach(function (quality) {\n        controls.createMenuItem.call(_this6, {\n          value: quality,\n          list: list,\n          type: type,\n          title: controls.getLabel.call(_this6, 'quality', quality),\n          badge: getBadge(quality)\n        });\n      });\n      controls.updateSetting.call(this, type, list);\n    },\n    // Set the looping options\n\n    /* setLoopMenu() {\n        // Menu required\n        if (!is.element(this.elements.settings.panels.loop)) {\n            return;\n        }\n         const options = ['start', 'end', 'all', 'reset'];\n        const list = this.elements.settings.panels.loop.querySelector('[role=\"menu\"]');\n         // Show the pane and tab\n        toggleHidden(this.elements.settings.buttons.loop, false);\n        toggleHidden(this.elements.settings.panels.loop, false);\n         // Toggle the pane and tab\n        const toggle = !is.empty(this.loop.options);\n        controls.toggleMenuButton.call(this, 'loop', toggle);\n         // Empty the menu\n        emptyElement(list);\n         options.forEach(option => {\n            const item = createElement('li');\n             const button = createElement(\n                'button',\n                extend(getAttributesFromSelector(this.config.selectors.buttons.loop), {\n                    type: 'button',\n                    class: this.config.classNames.control,\n                    'data-plyr-loop-action': option,\n                }),\n                i18n.get(option, this.config)\n            );\n             if (['start', 'end'].includes(option)) {\n                const badge = controls.createBadge.call(this, '00:00');\n                button.appendChild(badge);\n            }\n             item.appendChild(button);\n            list.appendChild(item);\n        });\n    }, */\n    // Get current selected caption language\n    // TODO: rework this to user the getter in the API?\n    // Set a list of available captions languages\n    setCaptionsMenu: function setCaptionsMenu() {\n      var _this7 = this;\n\n      // Menu required\n      if (!is$1.element(this.elements.settings.panels.captions)) {\n        return;\n      } // TODO: Captions or language? Currently it's mixed\n\n\n      var type = 'captions';\n      var list = this.elements.settings.panels.captions.querySelector('[role=\"menu\"]');\n      var tracks = captions.getTracks.call(this);\n      var toggle = Boolean(tracks.length); // Toggle the pane and tab\n\n      controls.toggleMenuButton.call(this, type, toggle); // Empty the menu\n\n      emptyElement(list); // Check if we need to toggle the parent\n\n      controls.checkMenu.call(this); // If there's no captions, bail\n\n      if (!toggle) {\n        return;\n      } // Generate options data\n\n\n      var options = tracks.map(function (track, value) {\n        return {\n          value: value,\n          checked: _this7.captions.toggled && _this7.currentTrack === value,\n          title: captions.getLabel.call(_this7, track),\n          badge: track.language && controls.createBadge.call(_this7, track.language.toUpperCase()),\n          list: list,\n          type: 'language'\n        };\n      }); // Add the \"Disabled\" option to turn off captions\n\n      options.unshift({\n        value: -1,\n        checked: !this.captions.toggled,\n        title: i18n.get('disabled', this.config),\n        list: list,\n        type: 'language'\n      }); // Generate options\n\n      options.forEach(controls.createMenuItem.bind(this));\n      controls.updateSetting.call(this, type, list);\n    },\n    // Set a list of available captions languages\n    setSpeedMenu: function setSpeedMenu(options) {\n      var _this8 = this;\n\n      // Menu required\n      if (!is$1.element(this.elements.settings.panels.speed)) {\n        return;\n      }\n\n      var type = 'speed';\n      var list = this.elements.settings.panels.speed.querySelector('[role=\"menu\"]'); // Set the speed options\n\n      if (is$1.array(options)) {\n        this.options.speed = options;\n      } else if (this.isHTML5 || this.isVimeo) {\n        this.options.speed = [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2];\n      } // Set options if passed and filter based on config\n\n\n      this.options.speed = this.options.speed.filter(function (speed) {\n        return _this8.config.speed.options.includes(speed);\n      }); // Toggle the pane and tab\n\n      var toggle = !is$1.empty(this.options.speed) && this.options.speed.length > 1;\n      controls.toggleMenuButton.call(this, type, toggle); // Empty the menu\n\n      emptyElement(list); // Check if we need to toggle the parent\n\n      controls.checkMenu.call(this); // If we're hiding, nothing more to do\n\n      if (!toggle) {\n        return;\n      } // Create items\n\n\n      this.options.speed.forEach(function (speed) {\n        controls.createMenuItem.call(_this8, {\n          value: speed,\n          list: list,\n          type: type,\n          title: controls.getLabel.call(_this8, 'speed', speed)\n        });\n      });\n      controls.updateSetting.call(this, type, list);\n    },\n    // Check if we need to hide/show the settings menu\n    checkMenu: function checkMenu() {\n      var buttons = this.elements.settings.buttons;\n      var visible = !is$1.empty(buttons) && Object.values(buttons).some(function (button) {\n        return !button.hidden;\n      });\n      toggleHidden(this.elements.settings.menu, !visible);\n    },\n    // Focus the first menu item in a given (or visible) menu\n    focusFirstMenuItem: function focusFirstMenuItem(pane) {\n      var tabFocus = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n      if (this.elements.settings.popup.hidden) {\n        return;\n      }\n\n      var target = pane;\n\n      if (!is$1.element(target)) {\n        target = Object.values(this.elements.settings.panels).find(function (pane) {\n          return !pane.hidden;\n        });\n      }\n\n      var firstItem = target.querySelector('[role^=\"menuitem\"]');\n      setFocus.call(this, firstItem, tabFocus);\n    },\n    // Show/hide menu\n    toggleMenu: function toggleMenu(input) {\n      var popup = this.elements.settings.popup;\n      var button = this.elements.buttons.settings; // Menu and button are required\n\n      if (!is$1.element(popup) || !is$1.element(button)) {\n        return;\n      } // True toggle by default\n\n\n      var hidden = popup.hidden;\n      var show = hidden;\n\n      if (is$1.boolean(input)) {\n        show = input;\n      } else if (is$1.keyboardEvent(input) && input.which === 27) {\n        show = false;\n      } else if (is$1.event(input)) {\n        // If Plyr is in a shadowDOM, the event target is set to the component, instead of the\n        // Element in the shadowDOM. The path, if available, is complete.\n        var target = is$1.function(input.composedPath) ? input.composedPath()[0] : input.target;\n        var isMenuItem = popup.contains(target); // If the click was inside the menu or if the click\n        // wasn't the button or menu item and we're trying to\n        // show the menu (a doc click shouldn't show the menu)\n\n        if (isMenuItem || !isMenuItem && input.target !== button && show) {\n          return;\n        }\n      } // Set button attributes\n\n\n      button.setAttribute('aria-expanded', show); // Show the actual popup\n\n      toggleHidden(popup, !show); // Add class hook\n\n      toggleClass(this.elements.container, this.config.classNames.menu.open, show); // Focus the first item if key interaction\n\n      if (show && is$1.keyboardEvent(input)) {\n        controls.focusFirstMenuItem.call(this, null, true);\n      } else if (!show && !hidden) {\n        // If closing, re-focus the button\n        setFocus.call(this, button, is$1.keyboardEvent(input));\n      }\n    },\n    // Get the natural size of a menu panel\n    getMenuSize: function getMenuSize(tab) {\n      var clone = tab.cloneNode(true);\n      clone.style.position = 'absolute';\n      clone.style.opacity = 0;\n      clone.removeAttribute('hidden'); // Append to parent so we get the \"real\" size\n\n      tab.parentNode.appendChild(clone); // Get the sizes before we remove\n\n      var width = clone.scrollWidth;\n      var height = clone.scrollHeight; // Remove from the DOM\n\n      removeElement(clone);\n      return {\n        width: width,\n        height: height\n      };\n    },\n    // Show a panel in the menu\n    showMenuPanel: function showMenuPanel() {\n      var _this9 = this;\n\n      var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n      var tabFocus = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      var target = this.elements.container.querySelector(\"#plyr-settings-\".concat(this.id, \"-\").concat(type)); // Nothing to show, bail\n\n      if (!is$1.element(target)) {\n        return;\n      } // Hide all other panels\n\n\n      var container = target.parentNode;\n      var current = Array.from(container.children).find(function (node) {\n        return !node.hidden;\n      }); // If we can do fancy animations, we'll animate the height/width\n\n      if (support.transitions && !support.reducedMotion) {\n        // Set the current width as a base\n        container.style.width = \"\".concat(current.scrollWidth, \"px\");\n        container.style.height = \"\".concat(current.scrollHeight, \"px\"); // Get potential sizes\n\n        var size = controls.getMenuSize.call(this, target); // Restore auto height/width\n\n        var restore = function restore(event) {\n          // We're only bothered about height and width on the container\n          if (event.target !== container || !['width', 'height'].includes(event.propertyName)) {\n            return;\n          } // Revert back to auto\n\n\n          container.style.width = '';\n          container.style.height = ''; // Only listen once\n\n          off.call(_this9, container, transitionEndEvent, restore);\n        }; // Listen for the transition finishing and restore auto height/width\n\n\n        on.call(this, container, transitionEndEvent, restore); // Set dimensions to target\n\n        container.style.width = \"\".concat(size.width, \"px\");\n        container.style.height = \"\".concat(size.height, \"px\");\n      } // Set attributes on current tab\n\n\n      toggleHidden(current, true); // Set attributes on target\n\n      toggleHidden(target, false); // Focus the first item\n\n      controls.focusFirstMenuItem.call(this, target, tabFocus);\n    },\n    // Set the download URL\n    setDownloadUrl: function setDownloadUrl() {\n      var button = this.elements.buttons.download; // Bail if no button\n\n      if (!is$1.element(button)) {\n        return;\n      } // Set attribute\n\n\n      button.setAttribute('href', this.download);\n    },\n    // Build the default HTML\n    create: function create(data) {\n      var _this10 = this;\n\n      var bindMenuItemShortcuts = controls.bindMenuItemShortcuts,\n          createButton = controls.createButton,\n          createProgress = controls.createProgress,\n          createRange = controls.createRange,\n          createTime = controls.createTime,\n          setQualityMenu = controls.setQualityMenu,\n          setSpeedMenu = controls.setSpeedMenu,\n          showMenuPanel = controls.showMenuPanel;\n      this.elements.controls = null; // Larger overlaid play button\n\n      if (this.config.controls.includes('play-large')) {\n        this.elements.container.appendChild(createButton.call(this, 'play-large'));\n      } // Create the container\n\n\n      var container = createElement('div', getAttributesFromSelector(this.config.selectors.controls.wrapper));\n      this.elements.controls = container; // Default item attributes\n\n      var defaultAttributes = {\n        class: 'plyr__controls__item'\n      }; // Loop through controls in order\n\n      dedupe(this.config.controls).forEach(function (control) {\n        // Restart button\n        if (control === 'restart') {\n          container.appendChild(createButton.call(_this10, 'restart', defaultAttributes));\n        } // Rewind button\n\n\n        if (control === 'rewind') {\n          container.appendChild(createButton.call(_this10, 'rewind', defaultAttributes));\n        } // Play/Pause button\n\n\n        if (control === 'play') {\n          container.appendChild(createButton.call(_this10, 'play', defaultAttributes));\n        } // Fast forward button\n\n\n        if (control === 'fast-forward') {\n          container.appendChild(createButton.call(_this10, 'fast-forward', defaultAttributes));\n        } // Progress\n\n\n        if (control === 'progress') {\n          var progressContainer = createElement('div', {\n            class: \"\".concat(defaultAttributes.class, \" plyr__progress__container\")\n          });\n          var progress = createElement('div', getAttributesFromSelector(_this10.config.selectors.progress)); // Seek range slider\n\n          progress.appendChild(createRange.call(_this10, 'seek', {\n            id: \"plyr-seek-\".concat(data.id)\n          })); // Buffer progress\n\n          progress.appendChild(createProgress.call(_this10, 'buffer')); // TODO: Add loop display indicator\n          // Seek tooltip\n\n          if (_this10.config.tooltips.seek) {\n            var tooltip = createElement('span', {\n              class: _this10.config.classNames.tooltip\n            }, '00:00');\n            progress.appendChild(tooltip);\n            _this10.elements.display.seekTooltip = tooltip;\n          }\n\n          _this10.elements.progress = progress;\n          progressContainer.appendChild(_this10.elements.progress);\n          container.appendChild(progressContainer);\n        } // Media current time display\n\n\n        if (control === 'current-time') {\n          container.appendChild(createTime.call(_this10, 'currentTime', defaultAttributes));\n        } // Media duration display\n\n\n        if (control === 'duration') {\n          container.appendChild(createTime.call(_this10, 'duration', defaultAttributes));\n        } // Volume controls\n\n\n        if (control === 'mute' || control === 'volume') {\n          var volume = _this10.elements.volume; // Create the volume container if needed\n\n          if (!is$1.element(volume) || !container.contains(volume)) {\n            volume = createElement('div', extend({}, defaultAttributes, {\n              class: \"\".concat(defaultAttributes.class, \" plyr__volume\").trim()\n            }));\n            _this10.elements.volume = volume;\n            container.appendChild(volume);\n          } // Toggle mute button\n\n\n          if (control === 'mute') {\n            volume.appendChild(createButton.call(_this10, 'mute'));\n          } // Volume range control\n\n\n          if (control === 'volume') {\n            // Set the attributes\n            var attributes = {\n              max: 1,\n              step: 0.05,\n              value: _this10.config.volume\n            }; // Create the volume range slider\n\n            volume.appendChild(createRange.call(_this10, 'volume', extend(attributes, {\n              id: \"plyr-volume-\".concat(data.id)\n            })));\n          }\n        } // Toggle captions button\n\n\n        if (control === 'captions') {\n          container.appendChild(createButton.call(_this10, 'captions', defaultAttributes));\n        } // Settings button / menu\n\n\n        if (control === 'settings' && !is$1.empty(_this10.config.settings)) {\n          var _control = createElement('div', extend({}, defaultAttributes, {\n            class: \"\".concat(defaultAttributes.class, \" plyr__menu\").trim(),\n            hidden: ''\n          }));\n\n          _control.appendChild(createButton.call(_this10, 'settings', {\n            'aria-haspopup': true,\n            'aria-controls': \"plyr-settings-\".concat(data.id),\n            'aria-expanded': false\n          }));\n\n          var popup = createElement('div', {\n            class: 'plyr__menu__container',\n            id: \"plyr-settings-\".concat(data.id),\n            hidden: ''\n          });\n          var inner = createElement('div');\n          var home = createElement('div', {\n            id: \"plyr-settings-\".concat(data.id, \"-home\")\n          }); // Create the menu\n\n          var menu = createElement('div', {\n            role: 'menu'\n          });\n          home.appendChild(menu);\n          inner.appendChild(home);\n          _this10.elements.settings.panels.home = home; // Build the menu items\n\n          _this10.config.settings.forEach(function (type) {\n            // TODO: bundle this with the createMenuItem helper and bindings\n            var menuItem = createElement('button', extend(getAttributesFromSelector(_this10.config.selectors.buttons.settings), {\n              type: 'button',\n              class: \"\".concat(_this10.config.classNames.control, \" \").concat(_this10.config.classNames.control, \"--forward\"),\n              role: 'menuitem',\n              'aria-haspopup': true,\n              hidden: ''\n            })); // Bind menu shortcuts for keyboard users\n\n            bindMenuItemShortcuts.call(_this10, menuItem, type); // Show menu on click\n\n            on(menuItem, 'click', function () {\n              showMenuPanel.call(_this10, type, false);\n            });\n            var flex = createElement('span', null, i18n.get(type, _this10.config));\n            var value = createElement('span', {\n              class: _this10.config.classNames.menu.value\n            }); // Speed contains HTML entities\n\n            value.innerHTML = data[type];\n            flex.appendChild(value);\n            menuItem.appendChild(flex);\n            menu.appendChild(menuItem); // Build the panes\n\n            var pane = createElement('div', {\n              id: \"plyr-settings-\".concat(data.id, \"-\").concat(type),\n              hidden: ''\n            }); // Back button\n\n            var backButton = createElement('button', {\n              type: 'button',\n              class: \"\".concat(_this10.config.classNames.control, \" \").concat(_this10.config.classNames.control, \"--back\")\n            }); // Visible label\n\n            backButton.appendChild(createElement('span', {\n              'aria-hidden': true\n            }, i18n.get(type, _this10.config))); // Screen reader label\n\n            backButton.appendChild(createElement('span', {\n              class: _this10.config.classNames.hidden\n            }, i18n.get('menuBack', _this10.config))); // Go back via keyboard\n\n            on(pane, 'keydown', function (event) {\n              // We only care about <-\n              if (event.which !== 37) {\n                return;\n              } // Prevent seek\n\n\n              event.preventDefault();\n              event.stopPropagation(); // Show the respective menu\n\n              showMenuPanel.call(_this10, 'home', true);\n            }, false); // Go back via button click\n\n            on(backButton, 'click', function () {\n              showMenuPanel.call(_this10, 'home', false);\n            }); // Add to pane\n\n            pane.appendChild(backButton); // Menu\n\n            pane.appendChild(createElement('div', {\n              role: 'menu'\n            }));\n            inner.appendChild(pane);\n            _this10.elements.settings.buttons[type] = menuItem;\n            _this10.elements.settings.panels[type] = pane;\n          });\n\n          popup.appendChild(inner);\n\n          _control.appendChild(popup);\n\n          container.appendChild(_control);\n          _this10.elements.settings.popup = popup;\n          _this10.elements.settings.menu = _control;\n        } // Picture in picture button\n\n\n        if (control === 'pip' && support.pip) {\n          container.appendChild(createButton.call(_this10, 'pip', defaultAttributes));\n        } // Airplay button\n\n\n        if (control === 'airplay' && support.airplay) {\n          container.appendChild(createButton.call(_this10, 'airplay', defaultAttributes));\n        } // Download button\n\n\n        if (control === 'download') {\n          var _attributes = extend({}, defaultAttributes, {\n            element: 'a',\n            href: _this10.download,\n            target: '_blank'\n          });\n\n          var download = _this10.config.urls.download;\n\n          if (!is$1.url(download) && _this10.isEmbed) {\n            extend(_attributes, {\n              icon: \"logo-\".concat(_this10.provider),\n              label: _this10.provider\n            });\n          }\n\n          container.appendChild(createButton.call(_this10, 'download', _attributes));\n        } // Toggle fullscreen button\n\n\n        if (control === 'fullscreen') {\n          container.appendChild(createButton.call(_this10, 'fullscreen', defaultAttributes));\n        }\n      }); // Set available quality levels\n\n      if (this.isHTML5) {\n        setQualityMenu.call(this, html5.getQualityOptions.call(this));\n      }\n\n      setSpeedMenu.call(this);\n      return container;\n    },\n    // Insert controls\n    inject: function inject() {\n      var _this11 = this;\n\n      // Sprite\n      if (this.config.loadSprite) {\n        var icon = controls.getIconUrl.call(this); // Only load external sprite using AJAX\n\n        if (icon.cors) {\n          loadSprite(icon.url, 'sprite-plyr');\n        }\n      } // Create a unique ID\n\n\n      this.id = Math.floor(Math.random() * 10000); // Null by default\n\n      var container = null;\n      this.elements.controls = null; // Set template properties\n\n      var props = {\n        id: this.id,\n        seektime: this.config.seekTime,\n        title: this.config.title\n      };\n      var update = true; // If function, run it and use output\n\n      if (is$1.function(this.config.controls)) {\n        this.config.controls = this.config.controls.call(this, props);\n      } // Convert falsy controls to empty array (primarily for empty strings)\n\n\n      if (!this.config.controls) {\n        this.config.controls = [];\n      }\n\n      if (is$1.element(this.config.controls) || is$1.string(this.config.controls)) {\n        // HTMLElement or Non-empty string passed as the option\n        container = this.config.controls;\n      } else {\n        // Create controls\n        container = controls.create.call(this, {\n          id: this.id,\n          seektime: this.config.seekTime,\n          speed: this.speed,\n          quality: this.quality,\n          captions: captions.getLabel.call(this) // TODO: Looping\n          // loop: 'None',\n\n        });\n        update = false;\n      } // Replace props with their value\n\n\n      var replace = function replace(input) {\n        var result = input;\n        Object.entries(props).forEach(function (_ref2) {\n          var _ref3 = _slicedToArray(_ref2, 2),\n              key = _ref3[0],\n              value = _ref3[1];\n\n          result = replaceAll(result, \"{\".concat(key, \"}\"), value);\n        });\n        return result;\n      }; // Update markup\n\n\n      if (update) {\n        if (is$1.string(this.config.controls)) {\n          container = replace(container);\n        } else if (is$1.element(container)) {\n          container.innerHTML = replace(container.innerHTML);\n        }\n      } // Controls container\n\n\n      var target; // Inject to custom location\n\n      if (is$1.string(this.config.selectors.controls.container)) {\n        target = document.querySelector(this.config.selectors.controls.container);\n      } // Inject into the container by default\n\n\n      if (!is$1.element(target)) {\n        target = this.elements.container;\n      } // Inject controls HTML (needs to be before captions, hence \"afterbegin\")\n\n\n      var insertMethod = is$1.element(container) ? 'insertAdjacentElement' : 'insertAdjacentHTML';\n      target[insertMethod]('afterbegin', container); // Find the elements if need be\n\n      if (!is$1.element(this.elements.controls)) {\n        controls.findElements.call(this);\n      } // Add pressed property to buttons\n\n\n      if (!is$1.empty(this.elements.buttons)) {\n        var addProperty = function addProperty(button) {\n          var className = _this11.config.classNames.controlPressed;\n          Object.defineProperty(button, 'pressed', {\n            enumerable: true,\n            get: function get() {\n              return hasClass(button, className);\n            },\n            set: function set() {\n              var pressed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n              toggleClass(button, className, pressed);\n            }\n          });\n        }; // Toggle classname when pressed property is set\n\n\n        Object.values(this.elements.buttons).filter(Boolean).forEach(function (button) {\n          if (is$1.array(button) || is$1.nodeList(button)) {\n            Array.from(button).filter(Boolean).forEach(addProperty);\n          } else {\n            addProperty(button);\n          }\n        });\n      } // Edge sometimes doesn't finish the paint so force a repaint\n\n\n      if (browser.isEdge) {\n        repaint(target);\n      } // Setup tooltips\n\n\n      if (this.config.tooltips.controls) {\n        var _this$config = this.config,\n            classNames = _this$config.classNames,\n            selectors = _this$config.selectors;\n        var selector = \"\".concat(selectors.controls.wrapper, \" \").concat(selectors.labels, \" .\").concat(classNames.hidden);\n        var labels = getElements.call(this, selector);\n        Array.from(labels).forEach(function (label) {\n          toggleClass(label, _this11.config.classNames.hidden, false);\n          toggleClass(label, _this11.config.classNames.tooltip, true);\n        });\n      }\n    }\n  };\n\n  /**\n   * Parse a string to a URL object\n   * @param {String} input - the URL to be parsed\n   * @param {Boolean} safe - failsafe parsing\n   */\n\n  function parseUrl(input) {\n    var safe = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n    var url = input;\n\n    if (safe) {\n      var parser = document.createElement('a');\n      parser.href = url;\n      url = parser.href;\n    }\n\n    try {\n      return new URL(url);\n    } catch (e) {\n      return null;\n    }\n  } // Convert object to URLSearchParams\n\n  function buildUrlParams(input) {\n    var params = new URLSearchParams();\n\n    if (is$1.object(input)) {\n      Object.entries(input).forEach(function (_ref) {\n        var _ref2 = _slicedToArray(_ref, 2),\n            key = _ref2[0],\n            value = _ref2[1];\n\n        params.set(key, value);\n      });\n    }\n\n    return params;\n  }\n\n  var captions = {\n    // Setup captions\n    setup: function setup() {\n      // Requires UI support\n      if (!this.supported.ui) {\n        return;\n      } // Only Vimeo and HTML5 video supported at this point\n\n\n      if (!this.isVideo || this.isYouTube || this.isHTML5 && !support.textTracks) {\n        // Clear menu and hide\n        if (is$1.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n          controls.setCaptionsMenu.call(this);\n        }\n\n        return;\n      } // Inject the container\n\n\n      if (!is$1.element(this.elements.captions)) {\n        this.elements.captions = createElement('div', getAttributesFromSelector(this.config.selectors.captions));\n        insertAfter(this.elements.captions, this.elements.wrapper);\n      } // Fix IE captions if CORS is used\n      // Fetch captions and inject as blobs instead (data URIs not supported!)\n\n\n      if (browser.isIE && window.URL) {\n        var elements = this.media.querySelectorAll('track');\n        Array.from(elements).forEach(function (track) {\n          var src = track.getAttribute('src');\n          var url = parseUrl(src);\n\n          if (url !== null && url.hostname !== window.location.href.hostname && ['http:', 'https:'].includes(url.protocol)) {\n            fetch(src, 'blob').then(function (blob) {\n              track.setAttribute('src', window.URL.createObjectURL(blob));\n            }).catch(function () {\n              removeElement(track);\n            });\n          }\n        });\n      } // Get and set initial data\n      // The \"preferred\" options are not realized unless / until the wanted language has a match\n      // * languages: Array of user's browser languages.\n      // * language:  The language preferred by user settings or config\n      // * active:    The state preferred by user settings or config\n      // * toggled:   The real captions state\n\n\n      var browserLanguages = navigator.languages || [navigator.language || navigator.userLanguage || 'en'];\n      var languages = dedupe(browserLanguages.map(function (language) {\n        return language.split('-')[0];\n      }));\n      var language = (this.storage.get('language') || this.config.captions.language || 'auto').toLowerCase(); // Use first browser language when language is 'auto'\n\n      if (language === 'auto') {\n        var _languages = _slicedToArray(languages, 1);\n\n        language = _languages[0];\n      }\n\n      var active = this.storage.get('captions');\n\n      if (!is$1.boolean(active)) {\n        active = this.config.captions.active;\n      }\n\n      Object.assign(this.captions, {\n        toggled: false,\n        active: active,\n        language: language,\n        languages: languages\n      }); // Watch changes to textTracks and update captions menu\n\n      if (this.isHTML5) {\n        var trackEvents = this.config.captions.update ? 'addtrack removetrack' : 'removetrack';\n        on.call(this, this.media.textTracks, trackEvents, captions.update.bind(this));\n      } // Update available languages in list next tick (the event must not be triggered before the listeners)\n\n\n      setTimeout(captions.update.bind(this), 0);\n    },\n    // Update available language options in settings based on tracks\n    update: function update() {\n      var _this = this;\n\n      var tracks = captions.getTracks.call(this, true); // Get the wanted language\n\n      var _this$captions = this.captions,\n          active = _this$captions.active,\n          language = _this$captions.language,\n          meta = _this$captions.meta,\n          currentTrackNode = _this$captions.currentTrackNode;\n      var languageExists = Boolean(tracks.find(function (track) {\n        return track.language === language;\n      })); // Handle tracks (add event listener and \"pseudo\"-default)\n\n      if (this.isHTML5 && this.isVideo) {\n        tracks.filter(function (track) {\n          return !meta.get(track);\n        }).forEach(function (track) {\n          _this.debug.log('Track added', track); // Attempt to store if the original dom element was \"default\"\n\n\n          meta.set(track, {\n            default: track.mode === 'showing'\n          }); // Turn off native caption rendering to avoid double captions\n\n          track.mode = 'hidden'; // Add event listener for cue changes\n\n          on.call(_this, track, 'cuechange', function () {\n            return captions.updateCues.call(_this);\n          });\n        });\n      } // Update language first time it matches, or if the previous matching track was removed\n\n\n      if (languageExists && this.language !== language || !tracks.includes(currentTrackNode)) {\n        captions.setLanguage.call(this, language);\n        captions.toggle.call(this, active && languageExists);\n      } // Enable or disable captions based on track length\n\n\n      toggleClass(this.elements.container, this.config.classNames.captions.enabled, !is$1.empty(tracks)); // Update available languages in list\n\n      if ((this.config.controls || []).includes('settings') && this.config.settings.includes('captions')) {\n        controls.setCaptionsMenu.call(this);\n      }\n    },\n    // Toggle captions display\n    // Used internally for the toggleCaptions method, with the passive option forced to false\n    toggle: function toggle(input) {\n      var passive = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n      // If there's no full support\n      if (!this.supported.ui) {\n        return;\n      }\n\n      var toggled = this.captions.toggled; // Current state\n\n      var activeClass = this.config.classNames.captions.active; // Get the next state\n      // If the method is called without parameter, toggle based on current value\n\n      var active = is$1.nullOrUndefined(input) ? !toggled : input; // Update state and trigger event\n\n      if (active !== toggled) {\n        // When passive, don't override user preferences\n        if (!passive) {\n          this.captions.active = active;\n          this.storage.set({\n            captions: active\n          });\n        } // Force language if the call isn't passive and there is no matching language to toggle to\n\n\n        if (!this.language && active && !passive) {\n          var tracks = captions.getTracks.call(this);\n          var track = captions.findTrack.call(this, [this.captions.language].concat(_toConsumableArray(this.captions.languages)), true); // Override user preferences to avoid switching languages if a matching track is added\n\n          this.captions.language = track.language; // Set caption, but don't store in localStorage as user preference\n\n          captions.set.call(this, tracks.indexOf(track));\n          return;\n        } // Toggle button if it's enabled\n\n\n        if (this.elements.buttons.captions) {\n          this.elements.buttons.captions.pressed = active;\n        } // Add class hook\n\n\n        toggleClass(this.elements.container, activeClass, active);\n        this.captions.toggled = active; // Update settings menu\n\n        controls.updateSetting.call(this, 'captions'); // Trigger event (not used internally)\n\n        triggerEvent.call(this, this.media, active ? 'captionsenabled' : 'captionsdisabled');\n      }\n    },\n    // Set captions by track index\n    // Used internally for the currentTrack setter with the passive option forced to false\n    set: function set(index) {\n      var passive = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n      var tracks = captions.getTracks.call(this); // Disable captions if setting to -1\n\n      if (index === -1) {\n        captions.toggle.call(this, false, passive);\n        return;\n      }\n\n      if (!is$1.number(index)) {\n        this.debug.warn('Invalid caption argument', index);\n        return;\n      }\n\n      if (!(index in tracks)) {\n        this.debug.warn('Track not found', index);\n        return;\n      }\n\n      if (this.captions.currentTrack !== index) {\n        this.captions.currentTrack = index;\n        var track = tracks[index];\n\n        var _ref = track || {},\n            language = _ref.language; // Store reference to node for invalidation on remove\n\n\n        this.captions.currentTrackNode = track; // Update settings menu\n\n        controls.updateSetting.call(this, 'captions'); // When passive, don't override user preferences\n\n        if (!passive) {\n          this.captions.language = language;\n          this.storage.set({\n            language: language\n          });\n        } // Handle Vimeo captions\n\n\n        if (this.isVimeo) {\n          this.embed.enableTextTrack(language);\n        } // Trigger event\n\n\n        triggerEvent.call(this, this.media, 'languagechange');\n      } // Show captions\n\n\n      captions.toggle.call(this, true, passive);\n\n      if (this.isHTML5 && this.isVideo) {\n        // If we change the active track while a cue is already displayed we need to update it\n        captions.updateCues.call(this);\n      }\n    },\n    // Set captions by language\n    // Used internally for the language setter with the passive option forced to false\n    setLanguage: function setLanguage(input) {\n      var passive = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n      if (!is$1.string(input)) {\n        this.debug.warn('Invalid language argument', input);\n        return;\n      } // Normalize\n\n\n      var language = input.toLowerCase();\n      this.captions.language = language; // Set currentTrack\n\n      var tracks = captions.getTracks.call(this);\n      var track = captions.findTrack.call(this, [language]);\n      captions.set.call(this, tracks.indexOf(track), passive);\n    },\n    // Get current valid caption tracks\n    // If update is false it will also ignore tracks without metadata\n    // This is used to \"freeze\" the language options when captions.update is false\n    getTracks: function getTracks() {\n      var _this2 = this;\n\n      var update = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n      // Handle media or textTracks missing or null\n      var tracks = Array.from((this.media || {}).textTracks || []); // For HTML5, use cache instead of current tracks when it exists (if captions.update is false)\n      // Filter out removed tracks and tracks that aren't captions/subtitles (for example metadata)\n\n      return tracks.filter(function (track) {\n        return !_this2.isHTML5 || update || _this2.captions.meta.has(track);\n      }).filter(function (track) {\n        return ['captions', 'subtitles'].includes(track.kind);\n      });\n    },\n    // Match tracks based on languages and get the first\n    findTrack: function findTrack(languages) {\n      var _this3 = this;\n\n      var force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      var tracks = captions.getTracks.call(this);\n\n      var sortIsDefault = function sortIsDefault(track) {\n        return Number((_this3.captions.meta.get(track) || {}).default);\n      };\n\n      var sorted = Array.from(tracks).sort(function (a, b) {\n        return sortIsDefault(b) - sortIsDefault(a);\n      });\n      var track;\n      languages.every(function (language) {\n        track = sorted.find(function (track) {\n          return track.language === language;\n        });\n        return !track; // Break iteration if there is a match\n      }); // If no match is found but is required, get first\n\n      return track || (force ? sorted[0] : undefined);\n    },\n    // Get the current track\n    getCurrentTrack: function getCurrentTrack() {\n      return captions.getTracks.call(this)[this.currentTrack];\n    },\n    // Get UI label for track\n    getLabel: function getLabel(track) {\n      var currentTrack = track;\n\n      if (!is$1.track(currentTrack) && support.textTracks && this.captions.toggled) {\n        currentTrack = captions.getCurrentTrack.call(this);\n      }\n\n      if (is$1.track(currentTrack)) {\n        if (!is$1.empty(currentTrack.label)) {\n          return currentTrack.label;\n        }\n\n        if (!is$1.empty(currentTrack.language)) {\n          return track.language.toUpperCase();\n        }\n\n        return i18n.get('enabled', this.config);\n      }\n\n      return i18n.get('disabled', this.config);\n    },\n    // Update captions using current track's active cues\n    // Also optional array argument in case there isn't any track (ex: vimeo)\n    updateCues: function updateCues(input) {\n      // Requires UI\n      if (!this.supported.ui) {\n        return;\n      }\n\n      if (!is$1.element(this.elements.captions)) {\n        this.debug.warn('No captions element to render to');\n        return;\n      } // Only accept array or empty input\n\n\n      if (!is$1.nullOrUndefined(input) && !Array.isArray(input)) {\n        this.debug.warn('updateCues: Invalid input', input);\n        return;\n      }\n\n      var cues = input; // Get cues from track\n\n      if (!cues) {\n        var track = captions.getCurrentTrack.call(this);\n        cues = Array.from((track || {}).activeCues || []).map(function (cue) {\n          return cue.getCueAsHTML();\n        }).map(getHTML);\n      } // Set new caption text\n\n\n      var content = cues.map(function (cueText) {\n        return cueText.trim();\n      }).join('\\n');\n      var changed = content !== this.elements.captions.innerHTML;\n\n      if (changed) {\n        // Empty the container and create a new child element\n        emptyElement(this.elements.captions);\n        var caption = createElement('span', getAttributesFromSelector(this.config.selectors.caption));\n        caption.innerHTML = content;\n        this.elements.captions.appendChild(caption); // Trigger event\n\n        triggerEvent.call(this, this.media, 'cuechange');\n      }\n    }\n  };\n\n  // ==========================================================================\n  // Plyr default config\n  // ==========================================================================\n  var defaults$1 = {\n    // Disable\n    enabled: true,\n    // Custom media title\n    title: '',\n    // Logging to console\n    debug: false,\n    // Auto play (if supported)\n    autoplay: false,\n    // Only allow one media playing at once (vimeo only)\n    autopause: true,\n    // Allow inline playback on iOS (this effects YouTube/Vimeo - HTML5 requires the attribute present)\n    // TODO: Remove iosNative fullscreen option in favour of this (logic needs work)\n    playsinline: true,\n    // Default time to skip when rewind/fast forward\n    seekTime: 10,\n    // Default volume\n    volume: 1,\n    muted: false,\n    // Pass a custom duration\n    duration: null,\n    // Display the media duration on load in the current time position\n    // If you have opted to display both duration and currentTime, this is ignored\n    displayDuration: true,\n    // Invert the current time to be a countdown\n    invertTime: true,\n    // Clicking the currentTime inverts it's value to show time left rather than elapsed\n    toggleInvert: true,\n    // Force an aspect ratio\n    // The format must be `'w:h'` (e.g. `'16:9'`)\n    ratio: null,\n    // Click video container to play/pause\n    clickToPlay: true,\n    // Auto hide the controls\n    hideControls: true,\n    // Reset to start when playback ended\n    resetOnEnd: false,\n    // Disable the standard context menu\n    disableContextMenu: true,\n    // Sprite (for icons)\n    loadSprite: true,\n    iconPrefix: 'plyr',\n    iconUrl: 'https://cdn.plyr.io/3.5.4/plyr.svg',\n    // Blank video (used to prevent errors on source change)\n    blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n    // Quality default\n    quality: {\n      default: 576,\n      options: [4320, 2880, 2160, 1440, 1080, 720, 576, 480, 360, 240]\n    },\n    // Set loops\n    loop: {\n      active: false // start: null,\n      // end: null,\n\n    },\n    // Speed default and options to display\n    speed: {\n      selected: 1,\n      options: [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2]\n    },\n    // Keyboard shortcut settings\n    keyboard: {\n      focused: true,\n      global: false\n    },\n    // Display tooltips\n    tooltips: {\n      controls: false,\n      seek: true\n    },\n    // Captions settings\n    captions: {\n      active: false,\n      language: 'auto',\n      // Listen to new tracks added after Plyr is initialized.\n      // This is needed for streaming captions, but may result in unselectable options\n      update: false\n    },\n    // Fullscreen settings\n    fullscreen: {\n      enabled: true,\n      // Allow fullscreen?\n      fallback: true,\n      // Fallback using full viewport/window\n      iosNative: false // Use the native fullscreen in iOS (disables custom controls)\n\n    },\n    // Local storage\n    storage: {\n      enabled: true,\n      key: 'plyr'\n    },\n    // Default controls\n    controls: ['play-large', // 'restart',\n    // 'rewind',\n    'play', // 'fast-forward',\n    'progress', 'current-time', 'mute', 'volume', 'captions', 'settings', 'pip', 'airplay', // 'download',\n    'fullscreen'],\n    settings: ['captions', 'quality', 'speed'],\n    // Localisation\n    i18n: {\n      restart: 'Restart',\n      rewind: 'Rewind {seektime}s',\n      play: 'Play',\n      pause: 'Pause',\n      fastForward: 'Forward {seektime}s',\n      seek: 'Seek',\n      seekLabel: '{currentTime} of {duration}',\n      played: 'Played',\n      buffered: 'Buffered',\n      currentTime: 'Current time',\n      duration: 'Duration',\n      volume: 'Volume',\n      mute: 'Mute',\n      unmute: 'Unmute',\n      enableCaptions: 'Enable captions',\n      disableCaptions: 'Disable captions',\n      download: 'Download',\n      enterFullscreen: 'Enter fullscreen',\n      exitFullscreen: 'Exit fullscreen',\n      frameTitle: 'Player for {title}',\n      captions: 'Captions',\n      settings: 'Settings',\n      menuBack: 'Go back to previous menu',\n      speed: 'Speed',\n      normal: 'Normal',\n      quality: 'Quality',\n      loop: 'Loop',\n      start: 'Start',\n      end: 'End',\n      all: 'All',\n      reset: 'Reset',\n      disabled: 'Disabled',\n      enabled: 'Enabled',\n      advertisement: 'Ad',\n      qualityBadge: {\n        2160: '4K',\n        1440: 'HD',\n        1080: 'HD',\n        720: 'HD',\n        576: 'SD',\n        480: 'SD'\n      }\n    },\n    // URLs\n    urls: {\n      download: null,\n      vimeo: {\n        sdk: 'https://player.vimeo.com/api/player.js',\n        iframe: 'https://player.vimeo.com/video/{0}?{1}',\n        api: 'https://vimeo.com/api/v2/video/{0}.json'\n      },\n      youtube: {\n        sdk: 'https://www.youtube.com/iframe_api',\n        api: 'https://noembed.com/embed?url=https://www.youtube.com/watch?v={0}' // 'https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title),fileDetails)&part=snippet',\n\n      },\n      googleIMA: {\n        sdk: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js'\n      }\n    },\n    // Custom control listeners\n    listeners: {\n      seek: null,\n      play: null,\n      pause: null,\n      restart: null,\n      rewind: null,\n      fastForward: null,\n      mute: null,\n      volume: null,\n      captions: null,\n      download: null,\n      fullscreen: null,\n      pip: null,\n      airplay: null,\n      speed: null,\n      quality: null,\n      loop: null,\n      language: null\n    },\n    // Events to watch and bubble\n    events: [// Events to watch on HTML5 media elements and bubble\n    // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n    'ended', 'progress', 'stalled', 'playing', 'waiting', 'canplay', 'canplaythrough', 'loadstart', 'loadeddata', 'loadedmetadata', 'timeupdate', 'volumechange', 'play', 'pause', 'error', 'seeking', 'seeked', 'emptied', 'ratechange', 'cuechange', // Custom events\n    'download', 'enterfullscreen', 'exitfullscreen', 'captionsenabled', 'captionsdisabled', 'languagechange', 'controlshidden', 'controlsshown', 'ready', // YouTube\n    'statechange', // Quality\n    'qualitychange', // Ads\n    'adsloaded', 'adscontentpause', 'adscontentresume', 'adstarted', 'adsmidpoint', 'adscomplete', 'adsallcomplete', 'adsimpression', 'adsclick'],\n    // Selectors\n    // Change these to match your template if using custom HTML\n    selectors: {\n      editable: 'input, textarea, select, [contenteditable]',\n      container: '.plyr',\n      controls: {\n        container: null,\n        wrapper: '.plyr__controls'\n      },\n      labels: '[data-plyr]',\n      buttons: {\n        play: '[data-plyr=\"play\"]',\n        pause: '[data-plyr=\"pause\"]',\n        restart: '[data-plyr=\"restart\"]',\n        rewind: '[data-plyr=\"rewind\"]',\n        fastForward: '[data-plyr=\"fast-forward\"]',\n        mute: '[data-plyr=\"mute\"]',\n        captions: '[data-plyr=\"captions\"]',\n        download: '[data-plyr=\"download\"]',\n        fullscreen: '[data-plyr=\"fullscreen\"]',\n        pip: '[data-plyr=\"pip\"]',\n        airplay: '[data-plyr=\"airplay\"]',\n        settings: '[data-plyr=\"settings\"]',\n        loop: '[data-plyr=\"loop\"]'\n      },\n      inputs: {\n        seek: '[data-plyr=\"seek\"]',\n        volume: '[data-plyr=\"volume\"]',\n        speed: '[data-plyr=\"speed\"]',\n        language: '[data-plyr=\"language\"]',\n        quality: '[data-plyr=\"quality\"]'\n      },\n      display: {\n        currentTime: '.plyr__time--current',\n        duration: '.plyr__time--duration',\n        buffer: '.plyr__progress__buffer',\n        loop: '.plyr__progress__loop',\n        // Used later\n        volume: '.plyr__volume--display'\n      },\n      progress: '.plyr__progress',\n      captions: '.plyr__captions',\n      caption: '.plyr__caption'\n    },\n    // Class hooks added to the player in different states\n    classNames: {\n      type: 'plyr--{0}',\n      provider: 'plyr--{0}',\n      video: 'plyr__video-wrapper',\n      embed: 'plyr__video-embed',\n      videoFixedRatio: 'plyr__video-wrapper--fixed-ratio',\n      embedContainer: 'plyr__video-embed__container',\n      poster: 'plyr__poster',\n      posterEnabled: 'plyr__poster-enabled',\n      ads: 'plyr__ads',\n      control: 'plyr__control',\n      controlPressed: 'plyr__control--pressed',\n      playing: 'plyr--playing',\n      paused: 'plyr--paused',\n      stopped: 'plyr--stopped',\n      loading: 'plyr--loading',\n      hover: 'plyr--hover',\n      tooltip: 'plyr__tooltip',\n      cues: 'plyr__cues',\n      hidden: 'plyr__sr-only',\n      hideControls: 'plyr--hide-controls',\n      isIos: 'plyr--is-ios',\n      isTouch: 'plyr--is-touch',\n      uiSupported: 'plyr--full-ui',\n      noTransition: 'plyr--no-transition',\n      display: {\n        time: 'plyr__time'\n      },\n      menu: {\n        value: 'plyr__menu__value',\n        badge: 'plyr__badge',\n        open: 'plyr--menu-open'\n      },\n      captions: {\n        enabled: 'plyr--captions-enabled',\n        active: 'plyr--captions-active'\n      },\n      fullscreen: {\n        enabled: 'plyr--fullscreen-enabled',\n        fallback: 'plyr--fullscreen-fallback'\n      },\n      pip: {\n        supported: 'plyr--pip-supported',\n        active: 'plyr--pip-active'\n      },\n      airplay: {\n        supported: 'plyr--airplay-supported',\n        active: 'plyr--airplay-active'\n      },\n      tabFocus: 'plyr__tab-focus',\n      previewThumbnails: {\n        // Tooltip thumbs\n        thumbContainer: 'plyr__preview-thumb',\n        thumbContainerShown: 'plyr__preview-thumb--is-shown',\n        imageContainer: 'plyr__preview-thumb__image-container',\n        timeContainer: 'plyr__preview-thumb__time-container',\n        // Scrubbing\n        scrubbingContainer: 'plyr__preview-scrubbing',\n        scrubbingContainerShown: 'plyr__preview-scrubbing--is-shown'\n      }\n    },\n    // Embed attributes\n    attributes: {\n      embed: {\n        provider: 'data-plyr-provider',\n        id: 'data-plyr-embed-id'\n      }\n    },\n    // Advertisements plugin\n    // Register for an account here: http://vi.ai/publisher-video-monetization/?aid=plyrio\n    ads: {\n      enabled: false,\n      publisherId: '',\n      tagUrl: ''\n    },\n    // Preview Thumbnails plugin\n    previewThumbnails: {\n      enabled: false,\n      src: ''\n    },\n    // Vimeo plugin\n    vimeo: {\n      byline: false,\n      portrait: false,\n      title: false,\n      speed: true,\n      transparent: false\n    },\n    // YouTube plugin\n    youtube: {\n      noCookie: false,\n      // Whether to use an alternative version of YouTube without cookies\n      rel: 0,\n      // No related vids\n      showinfo: 0,\n      // Hide info\n      iv_load_policy: 3,\n      // Hide annotations\n      modestbranding: 1 // Hide logos as much as possible (they still show one in the corner when paused)\n\n    }\n  };\n\n  // ==========================================================================\n  // Plyr states\n  // ==========================================================================\n  var pip = {\n    active: 'picture-in-picture',\n    inactive: 'inline'\n  };\n\n  // ==========================================================================\n  // Plyr supported types and providers\n  // ==========================================================================\n  var providers = {\n    html5: 'html5',\n    youtube: 'youtube',\n    vimeo: 'vimeo'\n  };\n  var types = {\n    audio: 'audio',\n    video: 'video'\n  };\n  /**\n   * Get provider by URL\n   * @param {String} url\n   */\n\n  function getProviderByUrl(url) {\n    // YouTube\n    if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtube-nocookie\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n      return providers.youtube;\n    } // Vimeo\n\n\n    if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{0,9}(?=\\b|\\/)/.test(url)) {\n      return providers.vimeo;\n    }\n\n    return null;\n  }\n\n  // ==========================================================================\n  // Console wrapper\n  // ==========================================================================\n  var noop = function noop() {};\n\n  var Console =\n  /*#__PURE__*/\n  function () {\n    function Console() {\n      var enabled = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n      _classCallCheck(this, Console);\n\n      this.enabled = window.console && enabled;\n\n      if (this.enabled) {\n        this.log('Debugging enabled');\n      }\n    }\n\n    _createClass(Console, [{\n      key: \"log\",\n      get: function get() {\n        // eslint-disable-next-line no-console\n        return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n      }\n    }, {\n      key: \"warn\",\n      get: function get() {\n        // eslint-disable-next-line no-console\n        return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n      }\n    }, {\n      key: \"error\",\n      get: function get() {\n        // eslint-disable-next-line no-console\n        return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n      }\n    }]);\n\n    return Console;\n  }();\n\n  function onChange() {\n    if (!this.enabled) {\n      return;\n    } // Update toggle button\n\n\n    var button = this.player.elements.buttons.fullscreen;\n\n    if (is$1.element(button)) {\n      button.pressed = this.active;\n    } // Trigger an event\n\n\n    triggerEvent.call(this.player, this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true); // Trap focus in container\n\n    if (!browser.isIos) {\n      trapFocus.call(this.player, this.target, this.active);\n    }\n  }\n\n  function toggleFallback() {\n    var _this = this;\n\n    var toggle = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n    // Store or restore scroll position\n    if (toggle) {\n      this.scrollPosition = {\n        x: window.scrollX || 0,\n        y: window.scrollY || 0\n      };\n    } else {\n      window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n    } // Toggle scroll\n\n\n    document.body.style.overflow = toggle ? 'hidden' : ''; // Toggle class hook\n\n    toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle); // Force full viewport on iPhone X+\n\n    if (browser.isIos) {\n      var viewport = document.head.querySelector('meta[name=\"viewport\"]');\n      var property = 'viewport-fit=cover'; // Inject the viewport meta if required\n\n      if (!viewport) {\n        viewport = document.createElement('meta');\n        viewport.setAttribute('name', 'viewport');\n      } // Check if the property already exists\n\n\n      var hasProperty = is$1.string(viewport.content) && viewport.content.includes(property);\n\n      if (toggle) {\n        this.cleanupViewport = !hasProperty;\n\n        if (!hasProperty) {\n          viewport.content += \",\".concat(property);\n        }\n      } else if (this.cleanupViewport) {\n        viewport.content = viewport.content.split(',').filter(function (part) {\n          return part.trim() !== property;\n        }).join(',');\n      } // Force a repaint as sometimes Safari doesn't want to fill the screen\n\n\n      setTimeout(function () {\n        return repaint(_this.target);\n      }, 100);\n    } // Toggle button and fire events\n\n\n    onChange.call(this);\n  }\n\n  var Fullscreen =\n  /*#__PURE__*/\n  function () {\n    function Fullscreen(player) {\n      var _this2 = this;\n\n      _classCallCheck(this, Fullscreen);\n\n      // Keep reference to parent\n      this.player = player; // Get prefix\n\n      this.prefix = Fullscreen.prefix;\n      this.property = Fullscreen.property; // Scroll position\n\n      this.scrollPosition = {\n        x: 0,\n        y: 0\n      }; // Force the use of 'full window/browser' rather than fullscreen\n\n      this.forceFallback = player.config.fullscreen.fallback === 'force'; // Register event listeners\n      // Handle event (incase user presses escape etc)\n\n      on.call(this.player, document, this.prefix === 'ms' ? 'MSFullscreenChange' : \"\".concat(this.prefix, \"fullscreenchange\"), function () {\n        // TODO: Filter for target??\n        onChange.call(_this2);\n      }); // Fullscreen toggle on double click\n\n      on.call(this.player, this.player.elements.container, 'dblclick', function (event) {\n        // Ignore double click in controls\n        if (is$1.element(_this2.player.elements.controls) && _this2.player.elements.controls.contains(event.target)) {\n          return;\n        }\n\n        _this2.toggle();\n      }); // Update the UI\n\n      this.update();\n    } // Determine if native supported\n\n\n    _createClass(Fullscreen, [{\n      key: \"update\",\n      // Update UI\n      value: function update() {\n        if (this.enabled) {\n          var mode;\n\n          if (this.forceFallback) {\n            mode = 'Fallback (forced)';\n          } else if (Fullscreen.native) {\n            mode = 'Native';\n          } else {\n            mode = 'Fallback';\n          }\n\n          this.player.debug.log(\"\".concat(mode, \" fullscreen enabled\"));\n        } else {\n          this.player.debug.log('Fullscreen not supported and fallback disabled');\n        } // Add styling hook to show button\n\n\n        toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n      } // Make an element fullscreen\n\n    }, {\n      key: \"enter\",\n      value: function enter() {\n        if (!this.enabled) {\n          return;\n        } // iOS native fullscreen doesn't need the request step\n\n\n        if (browser.isIos && this.player.config.fullscreen.iosNative) {\n          this.target.webkitEnterFullscreen();\n        } else if (!Fullscreen.native || this.forceFallback) {\n          toggleFallback.call(this, true);\n        } else if (!this.prefix) {\n          this.target.requestFullscreen();\n        } else if (!is$1.empty(this.prefix)) {\n          this.target[\"\".concat(this.prefix, \"Request\").concat(this.property)]();\n        }\n      } // Bail from fullscreen\n\n    }, {\n      key: \"exit\",\n      value: function exit() {\n        if (!this.enabled) {\n          return;\n        } // iOS native fullscreen\n\n\n        if (browser.isIos && this.player.config.fullscreen.iosNative) {\n          this.target.webkitExitFullscreen();\n          this.player.play();\n        } else if (!Fullscreen.native || this.forceFallback) {\n          toggleFallback.call(this, false);\n        } else if (!this.prefix) {\n          (document.cancelFullScreen || document.exitFullscreen).call(document);\n        } else if (!is$1.empty(this.prefix)) {\n          var action = this.prefix === 'moz' ? 'Cancel' : 'Exit';\n          document[\"\".concat(this.prefix).concat(action).concat(this.property)]();\n        }\n      } // Toggle state\n\n    }, {\n      key: \"toggle\",\n      value: function toggle() {\n        if (!this.active) {\n          this.enter();\n        } else {\n          this.exit();\n        }\n      }\n    }, {\n      key: \"usingNative\",\n      // If we're actually using native\n      get: function get() {\n        return Fullscreen.native && !this.forceFallback;\n      } // Get the prefix for handlers\n\n    }, {\n      key: \"enabled\",\n      // Determine if fullscreen is enabled\n      get: function get() {\n        return (Fullscreen.native || this.player.config.fullscreen.fallback) && this.player.config.fullscreen.enabled && this.player.supported.ui && this.player.isVideo;\n      } // Get active state\n\n    }, {\n      key: \"active\",\n      get: function get() {\n        if (!this.enabled) {\n          return false;\n        } // Fallback using classname\n\n\n        if (!Fullscreen.native || this.forceFallback) {\n          return hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n        }\n\n        var element = !this.prefix ? document.fullscreenElement : document[\"\".concat(this.prefix).concat(this.property, \"Element\")];\n        return element === this.target;\n      } // Get target element\n\n    }, {\n      key: \"target\",\n      get: function get() {\n        return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n      }\n    }], [{\n      key: \"native\",\n      get: function get() {\n        return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n      }\n    }, {\n      key: \"prefix\",\n      get: function get() {\n        // No prefix\n        if (is$1.function(document.exitFullscreen)) {\n          return '';\n        } // Check for fullscreen support by vendor prefix\n\n\n        var value = '';\n        var prefixes = ['webkit', 'moz', 'ms'];\n        prefixes.some(function (pre) {\n          if (is$1.function(document[\"\".concat(pre, \"ExitFullscreen\")]) || is$1.function(document[\"\".concat(pre, \"CancelFullScreen\")])) {\n            value = pre;\n            return true;\n          }\n\n          return false;\n        });\n        return value;\n      }\n    }, {\n      key: \"property\",\n      get: function get() {\n        return this.prefix === 'moz' ? 'FullScreen' : 'Fullscreen';\n      }\n    }]);\n\n    return Fullscreen;\n  }();\n\n  // ==========================================================================\n  // Load image avoiding xhr/fetch CORS issues\n  // Server status can't be obtained this way unfortunately, so this uses \"naturalWidth\" to determine if the image has loaded\n  // By default it checks if it is at least 1px, but you can add a second argument to change this\n  // ==========================================================================\n  function loadImage(src) {\n    var minWidth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n    return new Promise(function (resolve, reject) {\n      var image = new Image();\n\n      var handler = function handler() {\n        delete image.onload;\n        delete image.onerror;\n        (image.naturalWidth >= minWidth ? resolve : reject)(image);\n      };\n\n      Object.assign(image, {\n        onload: handler,\n        onerror: handler,\n        src: src\n      });\n    });\n  }\n\n  // ==========================================================================\n  var ui = {\n    addStyleHook: function addStyleHook() {\n      toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n      toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n    },\n    // Toggle native HTML5 media controls\n    toggleNativeControls: function toggleNativeControls() {\n      var toggle = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n      if (toggle && this.isHTML5) {\n        this.media.setAttribute('controls', '');\n      } else {\n        this.media.removeAttribute('controls');\n      }\n    },\n    // Setup the UI\n    build: function build() {\n      var _this = this;\n\n      // Re-attach media element listeners\n      // TODO: Use event bubbling?\n      this.listeners.media(); // Don't setup interface if no support\n\n      if (!this.supported.ui) {\n        this.debug.warn(\"Basic support only for \".concat(this.provider, \" \").concat(this.type)); // Restore native controls\n\n        ui.toggleNativeControls.call(this, true); // Bail\n\n        return;\n      } // Inject custom controls if not present\n\n\n      if (!is$1.element(this.elements.controls)) {\n        // Inject custom controls\n        controls.inject.call(this); // Re-attach control listeners\n\n        this.listeners.controls();\n      } // Remove native controls\n\n\n      ui.toggleNativeControls.call(this); // Setup captions for HTML5\n\n      if (this.isHTML5) {\n        captions.setup.call(this);\n      } // Reset volume\n\n\n      this.volume = null; // Reset mute state\n\n      this.muted = null; // Reset loop state\n\n      this.loop = null; // Reset quality setting\n\n      this.quality = null; // Reset speed\n\n      this.speed = null; // Reset volume display\n\n      controls.updateVolume.call(this); // Reset time display\n\n      controls.timeUpdate.call(this); // Update the UI\n\n      ui.checkPlaying.call(this); // Check for picture-in-picture support\n\n      toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo); // Check for airplay support\n\n      toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5); // Add iOS class\n\n      toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos); // Add touch class\n\n      toggleClass(this.elements.container, this.config.classNames.isTouch, this.touch); // Ready for API calls\n\n      this.ready = true; // Ready event at end of execution stack\n\n      setTimeout(function () {\n        triggerEvent.call(_this, _this.media, 'ready');\n      }, 0); // Set the title\n\n      ui.setTitle.call(this); // Assure the poster image is set, if the property was added before the element was created\n\n      if (this.poster) {\n        ui.setPoster.call(this, this.poster, false).catch(function () {});\n      } // Manually set the duration if user has overridden it.\n      // The event listeners for it doesn't get called if preload is disabled (#701)\n\n\n      if (this.config.duration) {\n        controls.durationUpdate.call(this);\n      }\n    },\n    // Setup aria attribute for play and iframe title\n    setTitle: function setTitle() {\n      // Find the current text\n      var label = i18n.get('play', this.config); // If there's a media title set, use that for the label\n\n      if (is$1.string(this.config.title) && !is$1.empty(this.config.title)) {\n        label += \", \".concat(this.config.title);\n      } // If there's a play button, set label\n\n\n      Array.from(this.elements.buttons.play || []).forEach(function (button) {\n        button.setAttribute('aria-label', label);\n      }); // Set iframe title\n      // https://github.com/sampotts/plyr/issues/124\n\n      if (this.isEmbed) {\n        var iframe = getElement.call(this, 'iframe');\n\n        if (!is$1.element(iframe)) {\n          return;\n        } // Default to media type\n\n\n        var title = !is$1.empty(this.config.title) ? this.config.title : 'video';\n        var format = i18n.get('frameTitle', this.config);\n        iframe.setAttribute('title', format.replace('{title}', title));\n      }\n    },\n    // Toggle poster\n    togglePoster: function togglePoster(enable) {\n      toggleClass(this.elements.container, this.config.classNames.posterEnabled, enable);\n    },\n    // Set the poster image (async)\n    // Used internally for the poster setter, with the passive option forced to false\n    setPoster: function setPoster(poster) {\n      var _this2 = this;\n\n      var passive = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n      // Don't override if call is passive\n      if (passive && this.poster) {\n        return Promise.reject(new Error('Poster already set'));\n      } // Set property synchronously to respect the call order\n\n\n      this.media.setAttribute('poster', poster); // Wait until ui is ready\n\n      return ready.call(this) // Load image\n      .then(function () {\n        return loadImage(poster);\n      }).catch(function (err) {\n        // Hide poster on error unless it's been set by another call\n        if (poster === _this2.poster) {\n          ui.togglePoster.call(_this2, false);\n        } // Rethrow\n\n\n        throw err;\n      }).then(function () {\n        // Prevent race conditions\n        if (poster !== _this2.poster) {\n          throw new Error('setPoster cancelled by later call to setPoster');\n        }\n      }).then(function () {\n        Object.assign(_this2.elements.poster.style, {\n          backgroundImage: \"url('\".concat(poster, \"')\"),\n          // Reset backgroundSize as well (since it can be set to \"cover\" for padded thumbnails for youtube)\n          backgroundSize: ''\n        });\n        ui.togglePoster.call(_this2, true);\n        return poster;\n      });\n    },\n    // Check playing state\n    checkPlaying: function checkPlaying(event) {\n      var _this3 = this;\n\n      // Class hooks\n      toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n      toggleClass(this.elements.container, this.config.classNames.paused, this.paused);\n      toggleClass(this.elements.container, this.config.classNames.stopped, this.stopped); // Set state\n\n      Array.from(this.elements.buttons.play || []).forEach(function (target) {\n        target.pressed = _this3.playing;\n      }); // Only update controls on non timeupdate events\n\n      if (is$1.event(event) && event.type === 'timeupdate') {\n        return;\n      } // Toggle controls\n\n\n      ui.toggleControls.call(this);\n    },\n    // Check if media is loading\n    checkLoading: function checkLoading(event) {\n      var _this4 = this;\n\n      this.loading = ['stalled', 'waiting'].includes(event.type); // Clear timer\n\n      clearTimeout(this.timers.loading); // Timer to prevent flicker when seeking\n\n      this.timers.loading = setTimeout(function () {\n        // Update progress bar loading class state\n        toggleClass(_this4.elements.container, _this4.config.classNames.loading, _this4.loading); // Update controls visibility\n\n        ui.toggleControls.call(_this4);\n      }, this.loading ? 250 : 0);\n    },\n    // Toggle controls based on state and `force` argument\n    toggleControls: function toggleControls(force) {\n      var controls = this.elements.controls;\n\n      if (controls && this.config.hideControls) {\n        // Don't hide controls if a touch-device user recently seeked. (Must be limited to touch devices, or it occasionally prevents desktop controls from hiding.)\n        var recentTouchSeek = this.touch && this.lastSeekTime + 2000 > Date.now(); // Show controls if force, loading, paused, button interaction, or recent seek, otherwise hide\n\n        this.toggleControls(Boolean(force || this.loading || this.paused || controls.pressed || controls.hover || recentTouchSeek));\n      }\n    }\n  };\n\n  var Listeners =\n  /*#__PURE__*/\n  function () {\n    function Listeners(player) {\n      _classCallCheck(this, Listeners);\n\n      this.player = player;\n      this.lastKey = null;\n      this.focusTimer = null;\n      this.lastKeyDown = null;\n      this.handleKey = this.handleKey.bind(this);\n      this.toggleMenu = this.toggleMenu.bind(this);\n      this.setTabFocus = this.setTabFocus.bind(this);\n      this.firstTouch = this.firstTouch.bind(this);\n    } // Handle key presses\n\n\n    _createClass(Listeners, [{\n      key: \"handleKey\",\n      value: function handleKey(event) {\n        var player = this.player;\n        var elements = player.elements;\n        var code = event.keyCode ? event.keyCode : event.which;\n        var pressed = event.type === 'keydown';\n        var repeat = pressed && code === this.lastKey; // Bail if a modifier key is set\n\n        if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n          return;\n        } // If the event is bubbled from the media element\n        // Firefox doesn't get the keycode for whatever reason\n\n\n        if (!is$1.number(code)) {\n          return;\n        } // Seek by the number keys\n\n\n        var seekByKey = function seekByKey() {\n          // Divide the max duration into 10th's and times by the number value\n          player.currentTime = player.duration / 10 * (code - 48);\n        }; // Handle the key on keydown\n        // Reset on keyup\n\n\n        if (pressed) {\n          // Check focused element\n          // and if the focused element is not editable (e.g. text input)\n          // and any that accept key input http://webaim.org/techniques/keyboard/\n          var focused = document.activeElement;\n\n          if (is$1.element(focused)) {\n            var editable = player.config.selectors.editable;\n            var seek = elements.inputs.seek;\n\n            if (focused !== seek && matches$1(focused, editable)) {\n              return;\n            }\n\n            if (event.which === 32 && matches$1(focused, 'button, [role^=\"menuitem\"]')) {\n              return;\n            }\n          } // Which keycodes should we prevent default\n\n\n          var preventDefault = [32, 37, 38, 39, 40, 48, 49, 50, 51, 52, 53, 54, 56, 57, 67, 70, 73, 75, 76, 77, 79]; // If the code is found prevent default (e.g. prevent scrolling for arrows)\n\n          if (preventDefault.includes(code)) {\n            event.preventDefault();\n            event.stopPropagation();\n          }\n\n          switch (code) {\n            case 48:\n            case 49:\n            case 50:\n            case 51:\n            case 52:\n            case 53:\n            case 54:\n            case 55:\n            case 56:\n            case 57:\n              // 0-9\n              if (!repeat) {\n                seekByKey();\n              }\n\n              break;\n\n            case 32:\n            case 75:\n              // Space and K key\n              if (!repeat) {\n                player.togglePlay();\n              }\n\n              break;\n\n            case 38:\n              // Arrow up\n              player.increaseVolume(0.1);\n              break;\n\n            case 40:\n              // Arrow down\n              player.decreaseVolume(0.1);\n              break;\n\n            case 77:\n              // M key\n              if (!repeat) {\n                player.muted = !player.muted;\n              }\n\n              break;\n\n            case 39:\n              // Arrow forward\n              player.forward();\n              break;\n\n            case 37:\n              // Arrow back\n              player.rewind();\n              break;\n\n            case 70:\n              // F key\n              player.fullscreen.toggle();\n              break;\n\n            case 67:\n              // C key\n              if (!repeat) {\n                player.toggleCaptions();\n              }\n\n              break;\n\n            case 76:\n              // L key\n              player.loop = !player.loop;\n              break;\n\n            /* case 73:\n            this.setLoop('start');\n            break;\n            case 76:\n            this.setLoop();\n            break;\n            case 79:\n            this.setLoop('end');\n            break; */\n\n            default:\n              break;\n          } // Escape is handle natively when in full screen\n          // So we only need to worry about non native\n\n\n          if (code === 27 && !player.fullscreen.usingNative && player.fullscreen.active) {\n            player.fullscreen.toggle();\n          } // Store last code for next cycle\n\n\n          this.lastKey = code;\n        } else {\n          this.lastKey = null;\n        }\n      } // Toggle menu\n\n    }, {\n      key: \"toggleMenu\",\n      value: function toggleMenu(event) {\n        controls.toggleMenu.call(this.player, event);\n      } // Device is touch enabled\n\n    }, {\n      key: \"firstTouch\",\n      value: function firstTouch() {\n        var player = this.player;\n        var elements = player.elements;\n        player.touch = true; // Add touch class\n\n        toggleClass(elements.container, player.config.classNames.isTouch, true);\n      }\n    }, {\n      key: \"setTabFocus\",\n      value: function setTabFocus(event) {\n        var player = this.player;\n        var elements = player.elements;\n        clearTimeout(this.focusTimer); // Ignore any key other than tab\n\n        if (event.type === 'keydown' && event.which !== 9) {\n          return;\n        } // Store reference to event timeStamp\n\n\n        if (event.type === 'keydown') {\n          this.lastKeyDown = event.timeStamp;\n        } // Remove current classes\n\n\n        var removeCurrent = function removeCurrent() {\n          var className = player.config.classNames.tabFocus;\n          var current = getElements.call(player, \".\".concat(className));\n          toggleClass(current, className, false);\n        }; // Determine if a key was pressed to trigger this event\n\n\n        var wasKeyDown = event.timeStamp - this.lastKeyDown <= 20; // Ignore focus events if a key was pressed prior\n\n        if (event.type === 'focus' && !wasKeyDown) {\n          return;\n        } // Remove all current\n\n\n        removeCurrent(); // Delay the adding of classname until the focus has changed\n        // This event fires before the focusin event\n\n        this.focusTimer = setTimeout(function () {\n          var focused = document.activeElement; // Ignore if current focus element isn't inside the player\n\n          if (!elements.container.contains(focused)) {\n            return;\n          }\n\n          toggleClass(document.activeElement, player.config.classNames.tabFocus, true);\n        }, 10);\n      } // Global window & document listeners\n\n    }, {\n      key: \"global\",\n      value: function global() {\n        var toggle = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n        var player = this.player; // Keyboard shortcuts\n\n        if (player.config.keyboard.global) {\n          toggleListener.call(player, window, 'keydown keyup', this.handleKey, toggle, false);\n        } // Click anywhere closes menu\n\n\n        toggleListener.call(player, document.body, 'click', this.toggleMenu, toggle); // Detect touch by events\n\n        once.call(player, document.body, 'touchstart', this.firstTouch); // Tab focus detection\n\n        toggleListener.call(player, document.body, 'keydown focus blur', this.setTabFocus, toggle, false, true);\n      } // Container listeners\n\n    }, {\n      key: \"container\",\n      value: function container() {\n        var player = this.player;\n        var config = player.config,\n            elements = player.elements,\n            timers = player.timers; // Keyboard shortcuts\n\n        if (!config.keyboard.global && config.keyboard.focused) {\n          on.call(player, elements.container, 'keydown keyup', this.handleKey, false);\n        } // Toggle controls on mouse events and entering fullscreen\n\n\n        on.call(player, elements.container, 'mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen', function (event) {\n          var controls = elements.controls; // Remove button states for fullscreen\n\n          if (controls && event.type === 'enterfullscreen') {\n            controls.pressed = false;\n            controls.hover = false;\n          } // Show, then hide after a timeout unless another control event occurs\n\n\n          var show = ['touchstart', 'touchmove', 'mousemove'].includes(event.type);\n          var delay = 0;\n\n          if (show) {\n            ui.toggleControls.call(player, true); // Use longer timeout for touch devices\n\n            delay = player.touch ? 3000 : 2000;\n          } // Clear timer\n\n\n          clearTimeout(timers.controls); // Set new timer to prevent flicker when seeking\n\n          timers.controls = setTimeout(function () {\n            return ui.toggleControls.call(player, false);\n          }, delay);\n        }); // Force edge to repaint on exit fullscreen\n        // TODO: Fix weird bug where Edge doesn't re-draw when exiting fullscreen\n\n        /* if (browser.isEdge) {\n            on.call(player, elements.container, 'exitfullscreen', () => {\n                setTimeout(() => repaint(elements.container), 100);\n            });\n        } */\n        // Set a gutter for Vimeo\n\n        var setGutter = function setGutter(ratio, padding, toggle) {\n          if (!player.isVimeo) {\n            return;\n          }\n\n          var target = player.elements.wrapper.firstChild;\n\n          var _ratio = _slicedToArray(ratio, 2),\n              y = _ratio[1];\n\n          var _getAspectRatio$call = getAspectRatio.call(player),\n              _getAspectRatio$call2 = _slicedToArray(_getAspectRatio$call, 2),\n              videoX = _getAspectRatio$call2[0],\n              videoY = _getAspectRatio$call2[1];\n\n          target.style.maxWidth = toggle ? \"\".concat(y / videoY * videoX, \"px\") : null;\n          target.style.margin = toggle ? '0 auto' : null;\n        }; // Resize on fullscreen change\n\n\n        var setPlayerSize = function setPlayerSize(measure) {\n          // If we don't need to measure the viewport\n          if (!measure) {\n            return setAspectRatio.call(player);\n          }\n\n          var rect = elements.container.getBoundingClientRect();\n          var width = rect.width,\n              height = rect.height;\n          return setAspectRatio.call(player, \"\".concat(width, \":\").concat(height));\n        };\n\n        var resized = function resized() {\n          window.clearTimeout(timers.resized);\n          timers.resized = window.setTimeout(setPlayerSize, 50);\n        };\n\n        on.call(player, elements.container, 'enterfullscreen exitfullscreen', function (event) {\n          var _player$fullscreen = player.fullscreen,\n              target = _player$fullscreen.target,\n              usingNative = _player$fullscreen.usingNative; // Ignore for iOS native\n\n          if (!player.isEmbed || target !== elements.container) {\n            return;\n          }\n\n          var isEnter = event.type === 'enterfullscreen'; // Set the player size when entering fullscreen to viewport size\n\n          var _setPlayerSize = setPlayerSize(isEnter),\n              padding = _setPlayerSize.padding,\n              ratio = _setPlayerSize.ratio; // Set Vimeo gutter\n\n\n          setGutter(ratio, padding, isEnter); // If not using native fullscreen, we need to check for resizes of viewport\n\n          if (!usingNative) {\n            if (isEnter) {\n              on.call(player, window, 'resize', resized);\n            } else {\n              off.call(player, window, 'resize', resized);\n            }\n          }\n        });\n      } // Listen for media events\n\n    }, {\n      key: \"media\",\n      value: function media() {\n        var _this = this;\n\n        var player = this.player;\n        var elements = player.elements; // Time change on media\n\n        on.call(player, player.media, 'timeupdate seeking seeked', function (event) {\n          return controls.timeUpdate.call(player, event);\n        }); // Display duration\n\n        on.call(player, player.media, 'durationchange loadeddata loadedmetadata', function (event) {\n          return controls.durationUpdate.call(player, event);\n        }); // Check for audio tracks on load\n        // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n\n        on.call(player, player.media, 'canplay loadeddata', function () {\n          toggleHidden(elements.volume, !player.hasAudio);\n          toggleHidden(elements.buttons.mute, !player.hasAudio);\n        }); // Handle the media finishing\n\n        on.call(player, player.media, 'ended', function () {\n          // Show poster on end\n          if (player.isHTML5 && player.isVideo && player.config.resetOnEnd) {\n            // Restart\n            player.restart();\n          }\n        }); // Check for buffer progress\n\n        on.call(player, player.media, 'progress playing seeking seeked', function (event) {\n          return controls.updateProgress.call(player, event);\n        }); // Handle volume changes\n\n        on.call(player, player.media, 'volumechange', function (event) {\n          return controls.updateVolume.call(player, event);\n        }); // Handle play/pause\n\n        on.call(player, player.media, 'playing play pause ended emptied timeupdate', function (event) {\n          return ui.checkPlaying.call(player, event);\n        }); // Loading state\n\n        on.call(player, player.media, 'waiting canplay seeked playing', function (event) {\n          return ui.checkLoading.call(player, event);\n        }); // Click video\n\n        if (player.supported.ui && player.config.clickToPlay && !player.isAudio) {\n          // Re-fetch the wrapper\n          var wrapper = getElement.call(player, \".\".concat(player.config.classNames.video)); // Bail if there's no wrapper (this should never happen)\n\n          if (!is$1.element(wrapper)) {\n            return;\n          } // On click play, pause or restart\n\n\n          on.call(player, elements.container, 'click', function (event) {\n            var targets = [elements.container, wrapper]; // Ignore if click if not container or in video wrapper\n\n            if (!targets.includes(event.target) && !wrapper.contains(event.target)) {\n              return;\n            } // Touch devices will just show controls (if hidden)\n\n\n            if (player.touch && player.config.hideControls) {\n              return;\n            }\n\n            if (player.ended) {\n              _this.proxy(event, player.restart, 'restart');\n\n              _this.proxy(event, player.play, 'play');\n            } else {\n              _this.proxy(event, player.togglePlay, 'play');\n            }\n          });\n        } // Disable right click\n\n\n        if (player.supported.ui && player.config.disableContextMenu) {\n          on.call(player, elements.wrapper, 'contextmenu', function (event) {\n            event.preventDefault();\n          }, false);\n        } // Volume change\n\n\n        on.call(player, player.media, 'volumechange', function () {\n          // Save to storage\n          player.storage.set({\n            volume: player.volume,\n            muted: player.muted\n          });\n        }); // Speed change\n\n        on.call(player, player.media, 'ratechange', function () {\n          // Update UI\n          controls.updateSetting.call(player, 'speed'); // Save to storage\n\n\n          player.storage.set({\n            speed: player.speed\n          });\n        }); // Quality change\n\n        on.call(player, player.media, 'qualitychange', function (event) {\n          // Update UI\n          controls.updateSetting.call(player, 'quality', null, event.detail.quality);\n        }); // Update download link when ready and if quality changes\n\n        on.call(player, player.media, 'ready qualitychange', function () {\n          controls.setDownloadUrl.call(player);\n        }); // Proxy events to container\n        // Bubble up key events for Edge\n\n        var proxyEvents = player.config.events.concat(['keyup', 'keydown']).join(' ');\n        on.call(player, player.media, proxyEvents, function (event) {\n          var _event$detail = event.detail,\n              detail = _event$detail === void 0 ? {} : _event$detail; // Get error details from media\n\n          if (event.type === 'error') {\n            detail = player.media.error;\n          }\n\n          triggerEvent.call(player, elements.container, event.type, true, detail);\n        });\n      } // Run default and custom handlers\n\n    }, {\n      key: \"proxy\",\n      value: function proxy(event, defaultHandler, customHandlerKey) {\n        var player = this.player;\n        var customHandler = player.config.listeners[customHandlerKey];\n        var hasCustomHandler = is$1.function(customHandler);\n        var returned = true; // Execute custom handler\n\n        if (hasCustomHandler) {\n          returned = customHandler.call(player, event);\n        } // Only call default handler if not prevented in custom handler\n\n\n        if (returned && is$1.function(defaultHandler)) {\n          defaultHandler.call(player, event);\n        }\n      } // Trigger custom and default handlers\n\n    }, {\n      key: \"bind\",\n      value: function bind(element, type, defaultHandler, customHandlerKey) {\n        var _this2 = this;\n\n        var passive = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : true;\n        var player = this.player;\n        var customHandler = player.config.listeners[customHandlerKey];\n        var hasCustomHandler = is$1.function(customHandler);\n        on.call(player, element, type, function (event) {\n          return _this2.proxy(event, defaultHandler, customHandlerKey);\n        }, passive && !hasCustomHandler);\n      } // Listen for control events\n\n    }, {\n      key: \"controls\",\n      value: function controls$1() {\n        var _this3 = this;\n\n        var player = this.player;\n        var elements = player.elements; // IE doesn't support input event, so we fallback to change\n\n        var inputEvent = browser.isIE ? 'change' : 'input'; // Play/pause toggle\n\n        if (elements.buttons.play) {\n          Array.from(elements.buttons.play).forEach(function (button) {\n            _this3.bind(button, 'click', player.togglePlay, 'play');\n          });\n        } // Pause\n\n\n        this.bind(elements.buttons.restart, 'click', player.restart, 'restart'); // Rewind\n\n        this.bind(elements.buttons.rewind, 'click', player.rewind, 'rewind'); // Rewind\n\n        this.bind(elements.buttons.fastForward, 'click', player.forward, 'fastForward'); // Mute toggle\n\n        this.bind(elements.buttons.mute, 'click', function () {\n          player.muted = !player.muted;\n        }, 'mute'); // Captions toggle\n\n        this.bind(elements.buttons.captions, 'click', function () {\n          return player.toggleCaptions();\n        }); // Download\n\n        this.bind(elements.buttons.download, 'click', function () {\n          triggerEvent.call(player, player.media, 'download');\n        }, 'download'); // Fullscreen toggle\n\n        this.bind(elements.buttons.fullscreen, 'click', function () {\n          player.fullscreen.toggle();\n        }, 'fullscreen'); // Picture-in-Picture\n\n        this.bind(elements.buttons.pip, 'click', function () {\n          player.pip = 'toggle';\n        }, 'pip'); // Airplay\n\n        this.bind(elements.buttons.airplay, 'click', player.airplay, 'airplay'); // Settings menu - click toggle\n\n        this.bind(elements.buttons.settings, 'click', function (event) {\n          // Prevent the document click listener closing the menu\n          event.stopPropagation();\n\n          controls.toggleMenu.call(player, event);\n        }); // Settings menu - keyboard toggle\n        // We have to bind to keyup otherwise Firefox triggers a click when a keydown event handler shifts focus\n        // https://bugzilla.mozilla.org/show_bug.cgi?id=1220143\n\n        this.bind(elements.buttons.settings, 'keyup', function (event) {\n          var code = event.which; // We only care about space and return\n\n          if (![13, 32].includes(code)) {\n            return;\n          } // Because return triggers a click anyway, all we need to do is set focus\n\n\n          if (code === 13) {\n            controls.focusFirstMenuItem.call(player, null, true);\n\n            return;\n          } // Prevent scroll\n\n\n          event.preventDefault(); // Prevent playing video (Firefox)\n\n          event.stopPropagation(); // Toggle menu\n\n          controls.toggleMenu.call(player, event);\n        }, null, false // Can't be passive as we're preventing default\n        ); // Escape closes menu\n\n        this.bind(elements.settings.menu, 'keydown', function (event) {\n          if (event.which === 27) {\n            controls.toggleMenu.call(player, event);\n          }\n        }); // Set range input alternative \"value\", which matches the tooltip time (#954)\n\n        this.bind(elements.inputs.seek, 'mousedown mousemove', function (event) {\n          var rect = elements.progress.getBoundingClientRect();\n          var percent = 100 / rect.width * (event.pageX - rect.left);\n          event.currentTarget.setAttribute('seek-value', percent);\n        }); // Pause while seeking\n\n        this.bind(elements.inputs.seek, 'mousedown mouseup keydown keyup touchstart touchend', function (event) {\n          var seek = event.currentTarget;\n          var code = event.keyCode ? event.keyCode : event.which;\n          var attribute = 'play-on-seeked';\n\n          if (is$1.keyboardEvent(event) && code !== 39 && code !== 37) {\n            return;\n          } // Record seek time so we can prevent hiding controls for a few seconds after seek\n\n\n          player.lastSeekTime = Date.now(); // Was playing before?\n\n          var play = seek.hasAttribute(attribute); // Done seeking\n\n          var done = ['mouseup', 'touchend', 'keyup'].includes(event.type); // If we're done seeking and it was playing, resume playback\n\n          if (play && done) {\n            seek.removeAttribute(attribute);\n            player.play();\n          } else if (!done && player.playing) {\n            seek.setAttribute(attribute, '');\n            player.pause();\n          }\n        }); // Fix range inputs on iOS\n        // Super weird iOS bug where after you interact with an <input type=\"range\">,\n        // it takes over further interactions on the page. This is a hack\n\n        if (browser.isIos) {\n          var inputs = getElements.call(player, 'input[type=\"range\"]');\n          Array.from(inputs).forEach(function (input) {\n            return _this3.bind(input, inputEvent, function (event) {\n              return repaint(event.target);\n            });\n          });\n        } // Seek\n\n\n        this.bind(elements.inputs.seek, inputEvent, function (event) {\n          var seek = event.currentTarget; // If it exists, use seek-value instead of \"value\" for consistency with tooltip time (#954)\n\n          var seekTo = seek.getAttribute('seek-value');\n\n          if (is$1.empty(seekTo)) {\n            seekTo = seek.value;\n          }\n\n          seek.removeAttribute('seek-value');\n          player.currentTime = seekTo / seek.max * player.duration;\n        }, 'seek'); // Seek tooltip\n\n        this.bind(elements.progress, 'mouseenter mouseleave mousemove', function (event) {\n          return controls.updateSeekTooltip.call(player, event);\n        }); // Preview thumbnails plugin\n        // TODO: Really need to work on some sort of plug-in wide event bus or pub-sub for this\n\n        this.bind(elements.progress, 'mousemove touchmove', function (event) {\n          var previewThumbnails = player.previewThumbnails;\n\n          if (previewThumbnails && previewThumbnails.loaded) {\n            previewThumbnails.startMove(event);\n          }\n        }); // Hide thumbnail preview - on mouse click, mouse leave, and video play/seek. All four are required, e.g., for buffering\n\n        this.bind(elements.progress, 'mouseleave click', function () {\n          var previewThumbnails = player.previewThumbnails;\n\n          if (previewThumbnails && previewThumbnails.loaded) {\n            previewThumbnails.endMove(false, true);\n          }\n        }); // Show scrubbing preview\n\n        this.bind(elements.progress, 'mousedown touchstart', function (event) {\n          var previewThumbnails = player.previewThumbnails;\n\n          if (previewThumbnails && previewThumbnails.loaded) {\n            previewThumbnails.startScrubbing(event);\n          }\n        });\n        this.bind(elements.progress, 'mouseup touchend', function (event) {\n          var previewThumbnails = player.previewThumbnails;\n\n          if (previewThumbnails && previewThumbnails.loaded) {\n            previewThumbnails.endScrubbing(event);\n          }\n        }); // Polyfill for lower fill in <input type=\"range\"> for webkit\n\n        if (browser.isWebkit) {\n          Array.from(getElements.call(player, 'input[type=\"range\"]')).forEach(function (element) {\n            _this3.bind(element, 'input', function (event) {\n              return controls.updateRangeFill.call(player, event.target);\n            });\n          });\n        } // Current time invert\n        // Only if one time element is used for both currentTime and duration\n\n\n        if (player.config.toggleInvert && !is$1.element(elements.display.duration)) {\n          this.bind(elements.display.currentTime, 'click', function () {\n            // Do nothing if we're at the start\n            if (player.currentTime === 0) {\n              return;\n            }\n\n            player.config.invertTime = !player.config.invertTime;\n\n            controls.timeUpdate.call(player);\n          });\n        } // Volume\n\n\n        this.bind(elements.inputs.volume, inputEvent, function (event) {\n          player.volume = event.target.value;\n        }, 'volume'); // Update controls.hover state (used for ui.toggleControls to avoid hiding when interacting)\n\n        this.bind(elements.controls, 'mouseenter mouseleave', function (event) {\n          elements.controls.hover = !player.touch && event.type === 'mouseenter';\n        }); // Update controls.pressed state (used for ui.toggleControls to avoid hiding when interacting)\n\n        this.bind(elements.controls, 'mousedown mouseup touchstart touchend touchcancel', function (event) {\n          elements.controls.pressed = ['mousedown', 'touchstart'].includes(event.type);\n        }); // Show controls when they receive focus (e.g., when using keyboard tab key)\n\n        this.bind(elements.controls, 'focusin', function () {\n          var config = player.config,\n              elements = player.elements,\n              timers = player.timers; // Skip transition to prevent focus from scrolling the parent element\n\n          toggleClass(elements.controls, config.classNames.noTransition, true); // Toggle\n\n          ui.toggleControls.call(player, true); // Restore transition\n\n          setTimeout(function () {\n            toggleClass(elements.controls, config.classNames.noTransition, false);\n          }, 0); // Delay a little more for mouse users\n\n          var delay = _this3.touch ? 3000 : 4000; // Clear timer\n\n          clearTimeout(timers.controls); // Hide again after delay\n\n          timers.controls = setTimeout(function () {\n            return ui.toggleControls.call(player, false);\n          }, delay);\n        }); // Mouse wheel for volume\n\n        this.bind(elements.inputs.volume, 'wheel', function (event) {\n          // Detect \"natural\" scroll - suppored on OS X Safari only\n          // Other browsers on OS X will be inverted until support improves\n          var inverted = event.webkitDirectionInvertedFromDevice; // Get delta from event. Invert if `inverted` is true\n\n          var _map = [event.deltaX, -event.deltaY].map(function (value) {\n            return inverted ? -value : value;\n          }),\n              _map2 = _slicedToArray(_map, 2),\n              x = _map2[0],\n              y = _map2[1]; // Using the biggest delta, normalize to 1 or -1 (or 0 if no delta)\n\n\n          var direction = Math.sign(Math.abs(x) > Math.abs(y) ? x : y); // Change the volume by 2%\n\n          player.increaseVolume(direction / 50); // Don't break page scrolling at max and min\n\n          var volume = player.media.volume;\n\n          if (direction === 1 && volume < 1 || direction === -1 && volume > 0) {\n            event.preventDefault();\n          }\n        }, 'volume', false);\n      }\n    }]);\n\n    return Listeners;\n  }();\n\n  var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\n  function createCommonjsModule(fn, module) {\n  \treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n  }\n\n  var loadjs_umd = createCommonjsModule(function (module, exports) {\n    (function (root, factory) {\n      {\n        module.exports = factory();\n      }\n    })(commonjsGlobal, function () {\n      /**\n       * Global dependencies.\n       * @global {Object} document - DOM\n       */\n      var devnull = function devnull() {},\n          bundleIdCache = {},\n          bundleResultCache = {},\n          bundleCallbackQueue = {};\n      /**\n       * Subscribe to bundle load event.\n       * @param {string[]} bundleIds - Bundle ids\n       * @param {Function} callbackFn - The callback function\n       */\n\n\n      function subscribe(bundleIds, callbackFn) {\n        // listify\n        bundleIds = bundleIds.push ? bundleIds : [bundleIds];\n        var depsNotFound = [],\n            i = bundleIds.length,\n            numWaiting = i,\n            fn,\n            bundleId,\n            r,\n            q; // define callback function\n\n        fn = function fn(bundleId, pathsNotFound) {\n          if (pathsNotFound.length) depsNotFound.push(bundleId);\n          numWaiting--;\n          if (!numWaiting) callbackFn(depsNotFound);\n        }; // register callback\n\n\n        while (i--) {\n          bundleId = bundleIds[i]; // execute callback if in result cache\n\n          r = bundleResultCache[bundleId];\n\n          if (r) {\n            fn(bundleId, r);\n            continue;\n          } // add to callback queue\n\n\n          q = bundleCallbackQueue[bundleId] = bundleCallbackQueue[bundleId] || [];\n          q.push(fn);\n        }\n      }\n      /**\n       * Publish bundle load event.\n       * @param {string} bundleId - Bundle id\n       * @param {string[]} pathsNotFound - List of files not found\n       */\n\n\n      function publish(bundleId, pathsNotFound) {\n        // exit if id isn't defined\n        if (!bundleId) return;\n        var q = bundleCallbackQueue[bundleId]; // cache result\n\n        bundleResultCache[bundleId] = pathsNotFound; // exit if queue is empty\n\n        if (!q) return; // empty callback queue\n\n        while (q.length) {\n          q[0](bundleId, pathsNotFound);\n          q.splice(0, 1);\n        }\n      }\n      /**\n       * Execute callbacks.\n       * @param {Object or Function} args - The callback args\n       * @param {string[]} depsNotFound - List of dependencies not found\n       */\n\n\n      function executeCallbacks(args, depsNotFound) {\n        // accept function as argument\n        if (args.call) args = {\n          success: args\n        }; // success and error callbacks\n\n        if (depsNotFound.length) (args.error || devnull)(depsNotFound);else (args.success || devnull)(args);\n      }\n      /**\n       * Load individual file.\n       * @param {string} path - The file path\n       * @param {Function} callbackFn - The callback function\n       */\n\n\n      function loadFile(path, callbackFn, args, numTries) {\n        var doc = document,\n            async = args.async,\n            maxTries = (args.numRetries || 0) + 1,\n            beforeCallbackFn = args.before || devnull,\n            pathStripped = path.replace(/^(css|img)!/, ''),\n            isLegacyIECss,\n            e;\n        numTries = numTries || 0;\n\n        if (/(^css!|\\.css$)/.test(path)) {\n          // css\n          e = doc.createElement('link');\n          e.rel = 'stylesheet';\n          e.href = pathStripped; // tag IE9+\n\n          isLegacyIECss = 'hideFocus' in e; // use preload in IE Edge (to detect load errors)\n\n          if (isLegacyIECss && e.relList) {\n            isLegacyIECss = 0;\n            e.rel = 'preload';\n            e.as = 'style';\n          }\n        } else if (/(^img!|\\.(png|gif|jpg|svg)$)/.test(path)) {\n          // image\n          e = doc.createElement('img');\n          e.src = pathStripped;\n        } else {\n          // javascript\n          e = doc.createElement('script');\n          e.src = path;\n          e.async = async === undefined ? true : async;\n        }\n\n        e.onload = e.onerror = e.onbeforeload = function (ev) {\n          var result = ev.type[0]; // treat empty stylesheets as failures to get around lack of onerror\n          // support in IE9-11\n\n          if (isLegacyIECss) {\n            try {\n              if (!e.sheet.cssText.length) result = 'e';\n            } catch (x) {\n              // sheets objects created from load errors don't allow access to\n              // `cssText` (unless error is Code:18 SecurityError)\n              if (x.code != 18) result = 'e';\n            }\n          } // handle retries in case of load failure\n\n\n          if (result == 'e') {\n            // increment counter\n            numTries += 1; // exit function and try again\n\n            if (numTries < maxTries) {\n              return loadFile(path, callbackFn, args, numTries);\n            }\n          } else if (e.rel == 'preload' && e.as == 'style') {\n            // activate preloaded stylesheets\n            return e.rel = 'stylesheet'; // jshint ignore:line\n          } // execute callback\n\n\n          callbackFn(path, result, ev.defaultPrevented);\n        }; // add to document (unless callback returns `false`)\n\n\n        if (beforeCallbackFn(path, e) !== false) doc.head.appendChild(e);\n      }\n      /**\n       * Load multiple files.\n       * @param {string[]} paths - The file paths\n       * @param {Function} callbackFn - The callback function\n       */\n\n\n      function loadFiles(paths, callbackFn, args) {\n        // listify paths\n        paths = paths.push ? paths : [paths];\n        var numWaiting = paths.length,\n            x = numWaiting,\n            pathsNotFound = [],\n            fn,\n            i; // define callback function\n\n        fn = function fn(path, result, defaultPrevented) {\n          // handle error\n          if (result == 'e') pathsNotFound.push(path); // handle beforeload event. If defaultPrevented then that means the load\n          // will be blocked (ex. Ghostery/ABP on Safari)\n\n          if (result == 'b') {\n            if (defaultPrevented) pathsNotFound.push(path);else return;\n          }\n\n          numWaiting--;\n          if (!numWaiting) callbackFn(pathsNotFound);\n        }; // load scripts\n\n\n        for (i = 0; i < x; i++) {\n          loadFile(paths[i], fn, args);\n        }\n      }\n      /**\n       * Initiate script load and register bundle.\n       * @param {(string|string[])} paths - The file paths\n       * @param {(string|Function|Object)} [arg1] - The (1) bundleId or (2) success\n       *   callback or (3) object literal with success/error arguments, numRetries,\n       *   etc.\n       * @param {(Function|Object)} [arg2] - The (1) success callback or (2) object\n       *   literal with success/error arguments, numRetries, etc.\n       */\n\n\n      function loadjs(paths, arg1, arg2) {\n        var bundleId, args; // bundleId (if string)\n\n        if (arg1 && arg1.trim) bundleId = arg1; // args (default is {})\n\n        args = (bundleId ? arg2 : arg1) || {}; // throw error if bundle is already defined\n\n        if (bundleId) {\n          if (bundleId in bundleIdCache) {\n            throw \"LoadJS\";\n          } else {\n            bundleIdCache[bundleId] = true;\n          }\n        }\n\n        function loadFn(resolve, reject) {\n          loadFiles(paths, function (pathsNotFound) {\n            // execute callbacks\n            executeCallbacks(args, pathsNotFound); // resolve Promise\n\n            if (resolve) {\n              executeCallbacks({\n                success: resolve,\n                error: reject\n              }, pathsNotFound);\n            } // publish bundle load event\n\n\n            publish(bundleId, pathsNotFound);\n          }, args);\n        }\n\n        if (args.returnPromise) return new Promise(loadFn);else loadFn();\n      }\n      /**\n       * Execute callbacks when dependencies have been satisfied.\n       * @param {(string|string[])} deps - List of bundle ids\n       * @param {Object} args - success/error arguments\n       */\n\n\n      loadjs.ready = function ready(deps, args) {\n        // subscribe to bundle load event\n        subscribe(deps, function (depsNotFound) {\n          // execute callbacks\n          executeCallbacks(args, depsNotFound);\n        });\n        return loadjs;\n      };\n      /**\n       * Manually satisfy bundle dependencies.\n       * @param {string} bundleId - The bundle id\n       */\n\n\n      loadjs.done = function done(bundleId) {\n        publish(bundleId, []);\n      };\n      /**\n       * Reset loadjs dependencies statuses\n       */\n\n\n      loadjs.reset = function reset() {\n        bundleIdCache = {};\n        bundleResultCache = {};\n        bundleCallbackQueue = {};\n      };\n      /**\n       * Determine if bundle has already been defined\n       * @param String} bundleId - The bundle id\n       */\n\n\n      loadjs.isDefined = function isDefined(bundleId) {\n        return bundleId in bundleIdCache;\n      }; // export\n\n\n      return loadjs;\n    });\n  });\n\n  // ==========================================================================\n  function loadScript(url) {\n    return new Promise(function (resolve, reject) {\n      loadjs_umd(url, {\n        success: resolve,\n        error: reject\n      });\n    });\n  }\n\n  function parseId(url) {\n    if (is$1.empty(url)) {\n      return null;\n    }\n\n    if (is$1.number(Number(url))) {\n      return url;\n    }\n\n    var regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n    return url.match(regex) ? RegExp.$2 : url;\n  } // Set playback state and trigger change (only on actual change)\n\n\n  function assurePlaybackState(play) {\n    if (play && !this.embed.hasPlayed) {\n      this.embed.hasPlayed = true;\n    }\n\n    if (this.media.paused === play) {\n      this.media.paused = !play;\n      triggerEvent.call(this, this.media, play ? 'play' : 'pause');\n    }\n  }\n\n  var vimeo = {\n    setup: function setup() {\n      var _this = this;\n\n      // Add embed class for responsive\n      toggleClass(this.elements.wrapper, this.config.classNames.embed, true); // Set intial ratio\n\n      setAspectRatio.call(this); // Load the SDK if not already\n\n      if (!is$1.object(window.Vimeo)) {\n        loadScript(this.config.urls.vimeo.sdk).then(function () {\n          vimeo.ready.call(_this);\n        }).catch(function (error) {\n          _this.debug.warn('Vimeo SDK (player.js) failed to load', error);\n        });\n      } else {\n        vimeo.ready.call(this);\n      }\n    },\n    // API Ready\n    ready: function ready() {\n      var _this2 = this;\n\n      var player = this;\n      var config = player.config.vimeo; // Get Vimeo params for the iframe\n\n      var params = buildUrlParams(extend({}, {\n        loop: player.config.loop.active,\n        autoplay: player.autoplay,\n        muted: player.muted,\n        gesture: 'media',\n        playsinline: !this.config.fullscreen.iosNative\n      }, config)); // Get the source URL or ID\n\n      var source = player.media.getAttribute('src'); // Get from <div> if needed\n\n      if (is$1.empty(source)) {\n        source = player.media.getAttribute(player.config.attributes.embed.id);\n      }\n\n      var id = parseId(source); // Build an iframe\n\n      var iframe = createElement('iframe');\n      var src = format(player.config.urls.vimeo.iframe, id, params);\n      iframe.setAttribute('src', src);\n      iframe.setAttribute('allowfullscreen', '');\n      iframe.setAttribute('allowtransparency', '');\n      iframe.setAttribute('allow', 'autoplay'); // Get poster, if already set\n\n      var poster = player.poster; // Inject the package\n\n      var wrapper = createElement('div', {\n        poster: poster,\n        class: player.config.classNames.embedContainer\n      });\n      wrapper.appendChild(iframe);\n      player.media = replaceElement(wrapper, player.media); // Get poster image\n\n      fetch(format(player.config.urls.vimeo.api, id), 'json').then(function (response) {\n        if (is$1.empty(response)) {\n          return;\n        } // Get the URL for thumbnail\n\n\n        var url = new URL(response[0].thumbnail_large); // Get original image\n\n        url.pathname = \"\".concat(url.pathname.split('_')[0], \".jpg\"); // Set and show poster\n\n        ui.setPoster.call(player, url.href).catch(function () {});\n      }); // Setup instance\n      // https://github.com/vimeo/player.js\n\n      player.embed = new window.Vimeo.Player(iframe, {\n        autopause: player.config.autopause,\n        muted: player.muted\n      });\n      player.media.paused = true;\n      player.media.currentTime = 0; // Disable native text track rendering\n\n      if (player.supported.ui) {\n        player.embed.disableTextTrack();\n      } // Create a faux HTML5 API using the Vimeo API\n\n\n      player.media.play = function () {\n        assurePlaybackState.call(player, true);\n        return player.embed.play();\n      };\n\n      player.media.pause = function () {\n        assurePlaybackState.call(player, false);\n        return player.embed.pause();\n      };\n\n      player.media.stop = function () {\n        player.pause();\n        player.currentTime = 0;\n      }; // Seeking\n\n\n      var currentTime = player.media.currentTime;\n      Object.defineProperty(player.media, 'currentTime', {\n        get: function get() {\n          return currentTime;\n        },\n        set: function set(time) {\n          // Vimeo will automatically play on seek if the video hasn't been played before\n          // Get current paused state and volume etc\n          var embed = player.embed,\n              media = player.media,\n              paused = player.paused,\n              volume = player.volume;\n          var restorePause = paused && !embed.hasPlayed; // Set seeking state and trigger event\n\n          media.seeking = true;\n          triggerEvent.call(player, media, 'seeking'); // If paused, mute until seek is complete\n\n          Promise.resolve(restorePause && embed.setVolume(0)) // Seek\n          .then(function () {\n            return embed.setCurrentTime(time);\n          }) // Restore paused\n          .then(function () {\n            return restorePause && embed.pause();\n          }) // Restore volume\n          .then(function () {\n            return restorePause && embed.setVolume(volume);\n          }).catch(function () {// Do nothing\n          });\n        }\n      }); // Playback speed\n\n      var speed = player.config.speed.selected;\n      Object.defineProperty(player.media, 'playbackRate', {\n        get: function get() {\n          return speed;\n        },\n        set: function set(input) {\n          player.embed.setPlaybackRate(input).then(function () {\n            speed = input;\n            triggerEvent.call(player, player.media, 'ratechange');\n          }).catch(function (error) {\n            // Hide menu item (and menu if empty)\n            if (error.name === 'Error') {\n              controls.setSpeedMenu.call(player, []);\n            }\n          });\n        }\n      }); // Volume\n\n      var volume = player.config.volume;\n      Object.defineProperty(player.media, 'volume', {\n        get: function get() {\n          return volume;\n        },\n        set: function set(input) {\n          player.embed.setVolume(input).then(function () {\n            volume = input;\n            triggerEvent.call(player, player.media, 'volumechange');\n          });\n        }\n      }); // Muted\n\n      var muted = player.config.muted;\n      Object.defineProperty(player.media, 'muted', {\n        get: function get() {\n          return muted;\n        },\n        set: function set(input) {\n          var toggle = is$1.boolean(input) ? input : false;\n          player.embed.setVolume(toggle ? 0 : player.config.volume).then(function () {\n            muted = toggle;\n            triggerEvent.call(player, player.media, 'volumechange');\n          });\n        }\n      }); // Loop\n\n      var loop = player.config.loop;\n      Object.defineProperty(player.media, 'loop', {\n        get: function get() {\n          return loop;\n        },\n        set: function set(input) {\n          var toggle = is$1.boolean(input) ? input : player.config.loop.active;\n          player.embed.setLoop(toggle).then(function () {\n            loop = toggle;\n          });\n        }\n      }); // Source\n\n      var currentSrc;\n      player.embed.getVideoUrl().then(function (value) {\n        currentSrc = value;\n        controls.setDownloadUrl.call(player);\n      }).catch(function (error) {\n        _this2.debug.warn(error);\n      });\n      Object.defineProperty(player.media, 'currentSrc', {\n        get: function get() {\n          return currentSrc;\n        }\n      }); // Ended\n\n      Object.defineProperty(player.media, 'ended', {\n        get: function get() {\n          return player.currentTime === player.duration;\n        }\n      }); // Set aspect ratio based on video size\n\n      Promise.all([player.embed.getVideoWidth(), player.embed.getVideoHeight()]).then(function (dimensions) {\n        var _dimensions = _slicedToArray(dimensions, 2),\n            width = _dimensions[0],\n            height = _dimensions[1];\n\n        player.embed.ratio = [width, height];\n        setAspectRatio.call(_this2);\n      }); // Set autopause\n\n      player.embed.setAutopause(player.config.autopause).then(function (state) {\n        player.config.autopause = state;\n      }); // Get title\n\n      player.embed.getVideoTitle().then(function (title) {\n        player.config.title = title;\n        ui.setTitle.call(_this2);\n      }); // Get current time\n\n      player.embed.getCurrentTime().then(function (value) {\n        currentTime = value;\n        triggerEvent.call(player, player.media, 'timeupdate');\n      }); // Get duration\n\n      player.embed.getDuration().then(function (value) {\n        player.media.duration = value;\n        triggerEvent.call(player, player.media, 'durationchange');\n      }); // Get captions\n\n      player.embed.getTextTracks().then(function (tracks) {\n        player.media.textTracks = tracks;\n        captions.setup.call(player);\n      });\n      player.embed.on('cuechange', function (_ref) {\n        var _ref$cues = _ref.cues,\n            cues = _ref$cues === void 0 ? [] : _ref$cues;\n        var strippedCues = cues.map(function (cue) {\n          return stripHTML(cue.text);\n        });\n        captions.updateCues.call(player, strippedCues);\n      });\n      player.embed.on('loaded', function () {\n        // Assure state and events are updated on autoplay\n        player.embed.getPaused().then(function (paused) {\n          assurePlaybackState.call(player, !paused);\n\n          if (!paused) {\n            triggerEvent.call(player, player.media, 'playing');\n          }\n        });\n\n        if (is$1.element(player.embed.element) && player.supported.ui) {\n          var frame = player.embed.element; // Fix keyboard focus issues\n          // https://github.com/sampotts/plyr/issues/317\n\n          frame.setAttribute('tabindex', -1);\n        }\n      });\n      player.embed.on('play', function () {\n        assurePlaybackState.call(player, true);\n        triggerEvent.call(player, player.media, 'playing');\n      });\n      player.embed.on('pause', function () {\n        assurePlaybackState.call(player, false);\n      });\n      player.embed.on('timeupdate', function (data) {\n        player.media.seeking = false;\n        currentTime = data.seconds;\n        triggerEvent.call(player, player.media, 'timeupdate');\n      });\n      player.embed.on('progress', function (data) {\n        player.media.buffered = data.percent;\n        triggerEvent.call(player, player.media, 'progress'); // Check all loaded\n\n        if (parseInt(data.percent, 10) === 1) {\n          triggerEvent.call(player, player.media, 'canplaythrough');\n        } // Get duration as if we do it before load, it gives an incorrect value\n        // https://github.com/sampotts/plyr/issues/891\n\n\n        player.embed.getDuration().then(function (value) {\n          if (value !== player.media.duration) {\n            player.media.duration = value;\n            triggerEvent.call(player, player.media, 'durationchange');\n          }\n        });\n      });\n      player.embed.on('seeked', function () {\n        player.media.seeking = false;\n        triggerEvent.call(player, player.media, 'seeked');\n      });\n      player.embed.on('ended', function () {\n        player.media.paused = true;\n        triggerEvent.call(player, player.media, 'ended');\n      });\n      player.embed.on('error', function (detail) {\n        player.media.error = detail;\n        triggerEvent.call(player, player.media, 'error');\n      }); // Rebuild UI\n\n      setTimeout(function () {\n        return ui.build.call(player);\n      }, 0);\n    }\n  };\n\n  // ==========================================================================\n\n  function parseId$1(url) {\n    if (is$1.empty(url)) {\n      return null;\n    }\n\n    var regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n    return url.match(regex) ? RegExp.$2 : url;\n  } // Set playback state and trigger change (only on actual change)\n\n\n  function assurePlaybackState$1(play) {\n    if (play && !this.embed.hasPlayed) {\n      this.embed.hasPlayed = true;\n    }\n\n    if (this.media.paused === play) {\n      this.media.paused = !play;\n      triggerEvent.call(this, this.media, play ? 'play' : 'pause');\n    }\n  }\n\n  function getHost(config) {\n    if (config.noCookie) {\n      return 'https://www.youtube-nocookie.com';\n    }\n\n    if (window.location.protocol === 'http:') {\n      return 'http://www.youtube.com';\n    } // Use YouTube's default\n\n\n    return undefined;\n  }\n\n  var youtube = {\n    setup: function setup() {\n      var _this = this;\n\n      // Add embed class for responsive\n      toggleClass(this.elements.wrapper, this.config.classNames.embed, true); // Setup API\n\n      if (is$1.object(window.YT) && is$1.function(window.YT.Player)) {\n        youtube.ready.call(this);\n      } else {\n        // Load the API\n        loadScript(this.config.urls.youtube.sdk).catch(function (error) {\n          _this.debug.warn('YouTube API failed to load', error);\n        }); // Setup callback for the API\n        // YouTube has it's own system of course...\n\n        window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || []; // Add to queue\n\n        window.onYouTubeReadyCallbacks.push(function () {\n          youtube.ready.call(_this);\n        }); // Set callback to process queue\n\n        window.onYouTubeIframeAPIReady = function () {\n          window.onYouTubeReadyCallbacks.forEach(function (callback) {\n            callback();\n          });\n        };\n      }\n    },\n    // Get the media title\n    getTitle: function getTitle(videoId) {\n      var _this2 = this;\n\n      var url = format(this.config.urls.youtube.api, videoId);\n      fetch(url).then(function (data) {\n        if (is$1.object(data)) {\n          var title = data.title,\n              height = data.height,\n              width = data.width; // Set title\n\n          _this2.config.title = title;\n          ui.setTitle.call(_this2); // Set aspect ratio\n\n          _this2.embed.ratio = [width, height];\n        }\n\n        setAspectRatio.call(_this2);\n      }).catch(function () {\n        // Set aspect ratio\n        setAspectRatio.call(_this2);\n      });\n    },\n    // API ready\n    ready: function ready() {\n      var player = this; // Ignore already setup (race condition)\n\n      var currentId = player.media.getAttribute('id');\n\n      if (!is$1.empty(currentId) && currentId.startsWith('youtube-')) {\n        return;\n      } // Get the source URL or ID\n\n\n      var source = player.media.getAttribute('src'); // Get from <div> if needed\n\n      if (is$1.empty(source)) {\n        source = player.media.getAttribute(this.config.attributes.embed.id);\n      } // Replace the <iframe> with a <div> due to YouTube API issues\n\n\n      var videoId = parseId$1(source);\n      var id = generateId(player.provider); // Get poster, if already set\n\n      var poster = player.poster; // Replace media element\n\n      var container = createElement('div', {\n        id: id,\n        poster: poster\n      });\n      player.media = replaceElement(container, player.media); // Id to poster wrapper\n\n      var posterSrc = function posterSrc(format) {\n        return \"https://i.ytimg.com/vi/\".concat(videoId, \"/\").concat(format, \"default.jpg\");\n      }; // Check thumbnail images in order of quality, but reject fallback thumbnails (120px wide)\n\n\n      loadImage(posterSrc('maxres'), 121) // Higest quality and unpadded\n      .catch(function () {\n        return loadImage(posterSrc('sd'), 121);\n      }) // 480p padded 4:3\n      .catch(function () {\n        return loadImage(posterSrc('hq'));\n      }) // 360p padded 4:3. Always exists\n      .then(function (image) {\n        return ui.setPoster.call(player, image.src);\n      }).then(function (posterSrc) {\n        // If the image is padded, use background-size \"cover\" instead (like youtube does too with their posters)\n        if (!posterSrc.includes('maxres')) {\n          player.elements.poster.style.backgroundSize = 'cover';\n        }\n      }).catch(function () {});\n      var config = player.config.youtube; // Setup instance\n      // https://developers.google.com/youtube/iframe_api_reference\n\n      player.embed = new window.YT.Player(id, {\n        videoId: videoId,\n        host: getHost(config),\n        playerVars: extend({}, {\n          autoplay: player.config.autoplay ? 1 : 0,\n          // Autoplay\n          hl: player.config.hl,\n          // iframe interface language\n          controls: player.supported.ui ? 0 : 1,\n          // Only show controls if not fully supported\n          disablekb: 1,\n          // Disable keyboard as we handle it\n          playsinline: !player.config.fullscreen.iosNative ? 1 : 0,\n          // Allow iOS inline playback\n          // Captions are flaky on YouTube\n          cc_load_policy: player.captions.active ? 1 : 0,\n          cc_lang_pref: player.config.captions.language,\n          // Tracking for stats\n          widget_referrer: window ? window.location.href : null\n        }, config),\n        events: {\n          onError: function onError(event) {\n            // YouTube may fire onError twice, so only handle it once\n            if (!player.media.error) {\n              var code = event.data; // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n\n              var message = {\n                2: 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.',\n                5: 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.',\n                100: 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.',\n                101: 'The owner of the requested video does not allow it to be played in embedded players.',\n                150: 'The owner of the requested video does not allow it to be played in embedded players.'\n              }[code] || 'An unknown error occured';\n              player.media.error = {\n                code: code,\n                message: message\n              };\n              triggerEvent.call(player, player.media, 'error');\n            }\n          },\n          onPlaybackRateChange: function onPlaybackRateChange(event) {\n            // Get the instance\n            var instance = event.target; // Get current speed\n\n            player.media.playbackRate = instance.getPlaybackRate();\n            triggerEvent.call(player, player.media, 'ratechange');\n          },\n          onReady: function onReady(event) {\n            // Bail if onReady has already been called. See issue #1108\n            if (is$1.function(player.media.play)) {\n              return;\n            } // Get the instance\n\n\n            var instance = event.target; // Get the title\n\n            youtube.getTitle.call(player, videoId); // Create a faux HTML5 API using the YouTube API\n\n            player.media.play = function () {\n              assurePlaybackState$1.call(player, true);\n              instance.playVideo();\n            };\n\n            player.media.pause = function () {\n              assurePlaybackState$1.call(player, false);\n              instance.pauseVideo();\n            };\n\n            player.media.stop = function () {\n              instance.stopVideo();\n            };\n\n            player.media.duration = instance.getDuration();\n            player.media.paused = true; // Seeking\n\n            player.media.currentTime = 0;\n            Object.defineProperty(player.media, 'currentTime', {\n              get: function get() {\n                return Number(instance.getCurrentTime());\n              },\n              set: function set(time) {\n                // If paused and never played, mute audio preventively (YouTube starts playing on seek if the video hasn't been played yet).\n                if (player.paused && !player.embed.hasPlayed) {\n                  player.embed.mute();\n                } // Set seeking state and trigger event\n\n\n                player.media.seeking = true;\n                triggerEvent.call(player, player.media, 'seeking'); // Seek after events sent\n\n                instance.seekTo(time);\n              }\n            }); // Playback speed\n\n            Object.defineProperty(player.media, 'playbackRate', {\n              get: function get() {\n                return instance.getPlaybackRate();\n              },\n              set: function set(input) {\n                instance.setPlaybackRate(input);\n              }\n            }); // Volume\n\n            var volume = player.config.volume;\n            Object.defineProperty(player.media, 'volume', {\n              get: function get() {\n                return volume;\n              },\n              set: function set(input) {\n                volume = input;\n                instance.setVolume(volume * 100);\n                triggerEvent.call(player, player.media, 'volumechange');\n              }\n            }); // Muted\n\n            var muted = player.config.muted;\n            Object.defineProperty(player.media, 'muted', {\n              get: function get() {\n                return muted;\n              },\n              set: function set(input) {\n                var toggle = is$1.boolean(input) ? input : muted;\n                muted = toggle;\n                instance[toggle ? 'mute' : 'unMute']();\n                triggerEvent.call(player, player.media, 'volumechange');\n              }\n            }); // Source\n\n            Object.defineProperty(player.media, 'currentSrc', {\n              get: function get() {\n                return instance.getVideoUrl();\n              }\n            }); // Ended\n\n            Object.defineProperty(player.media, 'ended', {\n              get: function get() {\n                return player.currentTime === player.duration;\n              }\n            }); // Get available speeds\n\n            player.options.speed = instance.getAvailablePlaybackRates(); // Set the tabindex to avoid focus entering iframe\n\n            if (player.supported.ui) {\n              player.media.setAttribute('tabindex', -1);\n            }\n\n            triggerEvent.call(player, player.media, 'timeupdate');\n            triggerEvent.call(player, player.media, 'durationchange'); // Reset timer\n\n            clearInterval(player.timers.buffering); // Setup buffering\n\n            player.timers.buffering = setInterval(function () {\n              // Get loaded % from YouTube\n              player.media.buffered = instance.getVideoLoadedFraction(); // Trigger progress only when we actually buffer something\n\n              if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n                triggerEvent.call(player, player.media, 'progress');\n              } // Set last buffer point\n\n\n              player.media.lastBuffered = player.media.buffered; // Bail if we're at 100%\n\n              if (player.media.buffered === 1) {\n                clearInterval(player.timers.buffering); // Trigger event\n\n                triggerEvent.call(player, player.media, 'canplaythrough');\n              }\n            }, 200); // Rebuild UI\n\n            setTimeout(function () {\n              return ui.build.call(player);\n            }, 50);\n          },\n          onStateChange: function onStateChange(event) {\n            // Get the instance\n            var instance = event.target; // Reset timer\n\n            clearInterval(player.timers.playing);\n            var seeked = player.media.seeking && [1, 2].includes(event.data);\n\n            if (seeked) {\n              // Unset seeking and fire seeked event\n              player.media.seeking = false;\n              triggerEvent.call(player, player.media, 'seeked');\n            } // Handle events\n            // -1   Unstarted\n            // 0    Ended\n            // 1    Playing\n            // 2    Paused\n            // 3    Buffering\n            // 5    Video cued\n\n\n            switch (event.data) {\n              case -1:\n                // Update scrubber\n                triggerEvent.call(player, player.media, 'timeupdate'); // Get loaded % from YouTube\n\n                player.media.buffered = instance.getVideoLoadedFraction();\n                triggerEvent.call(player, player.media, 'progress');\n                break;\n\n              case 0:\n                assurePlaybackState$1.call(player, false); // YouTube doesn't support loop for a single video, so mimick it.\n\n                if (player.media.loop) {\n                  // YouTube needs a call to `stopVideo` before playing again\n                  instance.stopVideo();\n                  instance.playVideo();\n                } else {\n                  triggerEvent.call(player, player.media, 'ended');\n                }\n\n                break;\n\n              case 1:\n                // Restore paused state (YouTube starts playing on seek if the video hasn't been played yet)\n                if (!player.config.autoplay && player.media.paused && !player.embed.hasPlayed) {\n                  player.media.pause();\n                } else {\n                  assurePlaybackState$1.call(player, true);\n                  triggerEvent.call(player, player.media, 'playing'); // Poll to get playback progress\n\n                  player.timers.playing = setInterval(function () {\n                    triggerEvent.call(player, player.media, 'timeupdate');\n                  }, 50); // Check duration again due to YouTube bug\n                  // https://github.com/sampotts/plyr/issues/374\n                  // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n\n                  if (player.media.duration !== instance.getDuration()) {\n                    player.media.duration = instance.getDuration();\n                    triggerEvent.call(player, player.media, 'durationchange');\n                  }\n                }\n\n                break;\n\n              case 2:\n                // Restore audio (YouTube starts playing on seek if the video hasn't been played yet)\n                if (!player.muted) {\n                  player.embed.unMute();\n                }\n\n                assurePlaybackState$1.call(player, false);\n                break;\n\n              default:\n                break;\n            }\n\n            triggerEvent.call(player, player.elements.container, 'statechange', false, {\n              code: event.data\n            });\n          }\n        }\n      });\n    }\n  };\n\n  // ==========================================================================\n  var media = {\n    // Setup media\n    setup: function setup() {\n      // If there's no media, bail\n      if (!this.media) {\n        this.debug.warn('No media element found!');\n        return;\n      } // Add type class\n\n\n      toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true); // Add provider class\n\n      toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true); // Add video class for embeds\n      // This will require changes if audio embeds are added\n\n      if (this.isEmbed) {\n        toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n      } // Inject the player wrapper\n\n\n      if (this.isVideo) {\n        // Create the wrapper div\n        this.elements.wrapper = createElement('div', {\n          class: this.config.classNames.video\n        }); // Wrap the video in a container\n\n        wrap(this.media, this.elements.wrapper); // Faux poster container\n\n        this.elements.poster = createElement('div', {\n          class: this.config.classNames.poster\n        });\n        this.elements.wrapper.appendChild(this.elements.poster);\n      }\n\n      if (this.isHTML5) {\n        html5.extend.call(this);\n      } else if (this.isYouTube) {\n        youtube.setup.call(this);\n      } else if (this.isVimeo) {\n        vimeo.setup.call(this);\n      }\n    }\n  };\n\n  var destroy = function destroy(instance) {\n    // Destroy our adsManager\n    if (instance.manager) {\n      instance.manager.destroy();\n    } // Destroy our adsManager\n\n\n    if (instance.elements.displayContainer) {\n      instance.elements.displayContainer.destroy();\n    }\n\n    instance.elements.container.remove();\n  };\n\n  var Ads =\n  /*#__PURE__*/\n  function () {\n    /**\n     * Ads constructor.\n     * @param {Object} player\n     * @return {Ads}\n     */\n    function Ads(player) {\n      var _this = this;\n\n      _classCallCheck(this, Ads);\n\n      this.player = player;\n      this.config = player.config.ads;\n      this.playing = false;\n      this.initialized = false;\n      this.elements = {\n        container: null,\n        displayContainer: null\n      };\n      this.manager = null;\n      this.loader = null;\n      this.cuePoints = null;\n      this.events = {};\n      this.safetyTimer = null;\n      this.countdownTimer = null; // Setup a promise to resolve when the IMA manager is ready\n\n      this.managerPromise = new Promise(function (resolve, reject) {\n        // The ad is loaded and ready\n        _this.on('loaded', resolve); // Ads failed\n\n\n        _this.on('error', reject);\n      });\n      this.load();\n    }\n\n    _createClass(Ads, [{\n      key: \"load\",\n\n      /**\n       * Load the IMA SDK\n       */\n      value: function load() {\n        var _this2 = this;\n\n        if (!this.enabled) {\n          return;\n        } // Check if the Google IMA3 SDK is loaded or load it ourselves\n\n\n        if (!is$1.object(window.google) || !is$1.object(window.google.ima)) {\n          loadScript(this.player.config.urls.googleIMA.sdk).then(function () {\n            _this2.ready();\n          }).catch(function () {\n            // Script failed to load or is blocked\n            _this2.trigger('error', new Error('Google IMA SDK failed to load'));\n          });\n        } else {\n          this.ready();\n        }\n      }\n      /**\n       * Get the ads instance ready\n       */\n\n    }, {\n      key: \"ready\",\n      value: function ready() {\n        var _this3 = this;\n\n        // Double check we're enabled\n        if (!this.enabled) {\n          destroy(this);\n        } // Start ticking our safety timer. If the whole advertisement\n        // thing doesn't resolve within our set time; we bail\n\n\n        this.startSafetyTimer(12000, 'ready()'); // Clear the safety timer\n\n        this.managerPromise.then(function () {\n          _this3.clearSafetyTimer('onAdsManagerLoaded()');\n        }); // Set listeners on the Plyr instance\n\n        this.listeners(); // Setup the IMA SDK\n\n        this.setupIMA();\n      } // Build the tag URL\n\n    }, {\n      key: \"setupIMA\",\n\n      /**\n       * In order for the SDK to display ads for our video, we need to tell it where to put them,\n       * so here we define our ad container. This div is set up to render on top of the video player.\n       * Using the code below, we tell the SDK to render ads within that div. We also provide a\n       * handle to the content video player - the SDK will poll the current time of our player to\n       * properly place mid-rolls. After we create the ad display container, we initialize it. On\n       * mobile devices, this initialization is done as the result of a user action.\n       */\n      value: function setupIMA() {\n        // Create the container for our advertisements\n        this.elements.container = createElement('div', {\n          class: this.player.config.classNames.ads\n        });\n        this.player.elements.container.appendChild(this.elements.container); // So we can run VPAID2\n\n        google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED); // Set language\n\n        google.ima.settings.setLocale(this.player.config.ads.language); // Set playback for iOS10+\n\n        google.ima.settings.setDisableCustomPlaybackForIOS10Plus(this.player.config.playsinline); // We assume the adContainer is the video container of the plyr element that will house the ads\n\n        this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container, this.player.media); // Request video ads to be pre-loaded\n\n        this.requestAds();\n      }\n      /**\n       * Request advertisements\n       */\n\n    }, {\n      key: \"requestAds\",\n      value: function requestAds() {\n        var _this4 = this;\n\n        var container = this.player.elements.container;\n\n        try {\n          // Create ads loader\n          this.loader = new google.ima.AdsLoader(this.elements.displayContainer); // Listen and respond to ads loaded and error events\n\n          this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, function (event) {\n            return _this4.onAdsManagerLoaded(event);\n          }, false);\n          this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, function (error) {\n            return _this4.onAdError(error);\n          }, false); // Request video ads\n\n          var request = new google.ima.AdsRequest();\n          request.adTagUrl = this.tagUrl; // Specify the linear and nonlinear slot sizes. This helps the SDK\n          // to select the correct creative if multiple are returned\n\n          request.linearAdSlotWidth = container.offsetWidth;\n          request.linearAdSlotHeight = container.offsetHeight;\n          request.nonLinearAdSlotWidth = container.offsetWidth;\n          request.nonLinearAdSlotHeight = container.offsetHeight; // We only overlay ads as we only support video.\n\n          request.forceNonLinearFullSlot = false; // Mute based on current state\n\n          request.setAdWillPlayMuted(!this.player.muted);\n          this.loader.requestAds(request);\n        } catch (e) {\n          this.onAdError(e);\n        }\n      }\n      /**\n       * Update the ad countdown\n       * @param {Boolean} start\n       */\n\n    }, {\n      key: \"pollCountdown\",\n      value: function pollCountdown() {\n        var _this5 = this;\n\n        var start = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n        if (!start) {\n          clearInterval(this.countdownTimer);\n          this.elements.container.removeAttribute('data-badge-text');\n          return;\n        }\n\n        var update = function update() {\n          var time = formatTime(Math.max(_this5.manager.getRemainingTime(), 0));\n          var label = \"\".concat(i18n.get('advertisement', _this5.player.config), \" - \").concat(time);\n\n          _this5.elements.container.setAttribute('data-badge-text', label);\n        };\n\n        this.countdownTimer = setInterval(update, 100);\n      }\n      /**\n       * This method is called whenever the ads are ready inside the AdDisplayContainer\n       * @param {Event} adsManagerLoadedEvent\n       */\n\n    }, {\n      key: \"onAdsManagerLoaded\",\n      value: function onAdsManagerLoaded(event) {\n        var _this6 = this;\n\n        // Load could occur after a source change (race condition)\n        if (!this.enabled) {\n          return;\n        } // Get the ads manager\n\n\n        var settings = new google.ima.AdsRenderingSettings(); // Tell the SDK to save and restore content video state on our behalf\n\n        settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n        settings.enablePreloading = true; // The SDK is polling currentTime on the contentPlayback. And needs a duration\n        // so it can determine when to start the mid- and post-roll\n\n        this.manager = event.getAdsManager(this.player, settings); // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n\n        this.cuePoints = this.manager.getCuePoints(); // Add listeners to the required events\n        // Advertisement error events\n\n        this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, function (error) {\n          return _this6.onAdError(error);\n        }); // Advertisement regular events\n\n        Object.keys(google.ima.AdEvent.Type).forEach(function (type) {\n          _this6.manager.addEventListener(google.ima.AdEvent.Type[type], function (event) {\n            return _this6.onAdEvent(event);\n          });\n        }); // Resolve our adsManager\n\n        this.trigger('loaded');\n      }\n    }, {\n      key: \"addCuePoints\",\n      value: function addCuePoints() {\n        var _this7 = this;\n\n        // Add advertisement cue's within the time line if available\n        if (!is$1.empty(this.cuePoints)) {\n          this.cuePoints.forEach(function (cuePoint) {\n            if (cuePoint !== 0 && cuePoint !== -1 && cuePoint < _this7.player.duration) {\n              var seekElement = _this7.player.elements.progress;\n\n              if (is$1.element(seekElement)) {\n                var cuePercentage = 100 / _this7.player.duration * cuePoint;\n                var cue = createElement('span', {\n                  class: _this7.player.config.classNames.cues\n                });\n                cue.style.left = \"\".concat(cuePercentage.toString(), \"%\");\n                seekElement.appendChild(cue);\n              }\n            }\n          });\n        }\n      }\n      /**\n       * This is where all the event handling takes place. Retrieve the ad from the event. Some\n       * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n       * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n       * @param {Event} event\n       */\n\n    }, {\n      key: \"onAdEvent\",\n      value: function onAdEvent(event) {\n        var _this8 = this;\n\n        var container = this.player.elements.container; // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n        // don't have ad object associated\n\n        var ad = event.getAd();\n        var adData = event.getAdData(); // Proxy event\n\n        var dispatchEvent = function dispatchEvent(type) {\n          var event = \"ads\".concat(type.replace(/_/g, '').toLowerCase());\n          triggerEvent.call(_this8.player, _this8.player.media, event);\n        }; // Bubble the event\n\n\n        dispatchEvent(event.type);\n\n        switch (event.type) {\n          case google.ima.AdEvent.Type.LOADED:\n            // This is the first event sent for an ad - it is possible to determine whether the\n            // ad is a video ad or an overlay\n            this.trigger('loaded'); // Start countdown\n\n            this.pollCountdown(true);\n\n            if (!ad.isLinear()) {\n              // Position AdDisplayContainer correctly for overlay\n              ad.width = container.offsetWidth;\n              ad.height = container.offsetHeight;\n            } // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n            // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n\n\n            break;\n\n          case google.ima.AdEvent.Type.STARTED:\n            // Set volume to match player\n            this.manager.setVolume(this.player.volume);\n            break;\n\n          case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n            // All ads for the current videos are done. We can now request new advertisements\n            // in case the video is re-played\n            // TODO: Example for what happens when a next video in a playlist would be loaded.\n            // So here we load a new video when all ads are done.\n            // Then we load new ads within a new adsManager. When the video\n            // Is started - after - the ads are loaded, then we get ads.\n            // You can also easily test cancelling and reloading by running\n            // player.ads.cancel() and player.ads.play from the console I guess.\n            // this.player.source = {\n            //     type: 'video',\n            //     title: 'View From A Blue Moon',\n            //     sources: [{\n            //         src:\n            // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n            // 'video/mp4', }], poster:\n            // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n            // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n            // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n            // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n            // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n            // };\n            // TODO: So there is still this thing where a video should only be allowed to start\n            // playing when the IMA SDK is ready or has failed\n            this.loadAds();\n            break;\n\n          case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n            // This event indicates the ad has started - the video player can adjust the UI,\n            // for example display a pause button and remaining time. Fired when content should\n            // be paused. This usually happens right before an ad is about to cover the content\n            this.pauseContent();\n            break;\n\n          case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n            // This event indicates the ad has finished - the video player can perform\n            // appropriate UI actions, such as removing the timer for remaining time detection.\n            // Fired when content should be resumed. This usually happens when an ad finishes\n            // or collapses\n            this.pollCountdown();\n            this.resumeContent();\n            break;\n\n          case google.ima.AdEvent.Type.LOG:\n            if (adData.adError) {\n              this.player.debug.warn(\"Non-fatal ad error: \".concat(adData.adError.getMessage()));\n            }\n\n            break;\n\n          default:\n            break;\n        }\n      }\n      /**\n       * Any ad error handling comes through here\n       * @param {Event} event\n       */\n\n    }, {\n      key: \"onAdError\",\n      value: function onAdError(event) {\n        this.cancel();\n        this.player.debug.warn('Ads error', event);\n      }\n      /**\n       * Setup hooks for Plyr and window events. This ensures\n       * the mid- and post-roll launch at the correct time. And\n       * resize the advertisement when the player resizes\n       */\n\n    }, {\n      key: \"listeners\",\n      value: function listeners() {\n        var _this9 = this;\n\n        var container = this.player.elements.container;\n        var time;\n        this.player.on('canplay', function () {\n          _this9.addCuePoints();\n        });\n        this.player.on('ended', function () {\n          _this9.loader.contentComplete();\n        });\n        this.player.on('timeupdate', function () {\n          time = _this9.player.currentTime;\n        });\n        this.player.on('seeked', function () {\n          var seekedTime = _this9.player.currentTime;\n\n          if (is$1.empty(_this9.cuePoints)) {\n            return;\n          }\n\n          _this9.cuePoints.forEach(function (cuePoint, index) {\n            if (time < cuePoint && cuePoint < seekedTime) {\n              _this9.manager.discardAdBreak();\n\n              _this9.cuePoints.splice(index, 1);\n            }\n          });\n        }); // Listen to the resizing of the window. And resize ad accordingly\n        // TODO: eventually implement ResizeObserver\n\n        window.addEventListener('resize', function () {\n          if (_this9.manager) {\n            _this9.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n          }\n        });\n      }\n      /**\n       * Initialize the adsManager and start playing advertisements\n       */\n\n    }, {\n      key: \"play\",\n      value: function play() {\n        var _this10 = this;\n\n        var container = this.player.elements.container;\n\n        if (!this.managerPromise) {\n          this.resumeContent();\n        } // Play the requested advertisement whenever the adsManager is ready\n\n\n        this.managerPromise.then(function () {\n          // Set volume to match player\n          _this10.manager.setVolume(_this10.player.volume); // Initialize the container. Must be done via a user action on mobile devices\n\n\n          _this10.elements.displayContainer.initialize();\n\n          try {\n            if (!_this10.initialized) {\n              // Initialize the ads manager. Ad rules playlist will start at this time\n              _this10.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL); // Call play to start showing the ad. Single video and overlay ads will\n              // start at this time; the call will be ignored for ad rules\n\n\n              _this10.manager.start();\n            }\n\n            _this10.initialized = true;\n          } catch (adError) {\n            // An error may be thrown if there was a problem with the\n            // VAST response\n            _this10.onAdError(adError);\n          }\n        }).catch(function () {});\n      }\n      /**\n       * Resume our video\n       */\n\n    }, {\n      key: \"resumeContent\",\n      value: function resumeContent() {\n        // Hide the advertisement container\n        this.elements.container.style.zIndex = ''; // Ad is stopped\n\n        this.playing = false; // Play video\n\n        this.player.media.play();\n      }\n      /**\n       * Pause our video\n       */\n\n    }, {\n      key: \"pauseContent\",\n      value: function pauseContent() {\n        // Show the advertisement container\n        this.elements.container.style.zIndex = 3; // Ad is playing\n\n        this.playing = true; // Pause our video.\n\n        this.player.media.pause();\n      }\n      /**\n       * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n       * allowed to call new ads based on google policies, as they interpret this as an accidental\n       * video requests. https://developers.google.com/interactive-\n       * media-ads/docs/sdks/android/faq#8\n       */\n\n    }, {\n      key: \"cancel\",\n      value: function cancel() {\n        // Pause our video\n        if (this.initialized) {\n          this.resumeContent();\n        } // Tell our instance that we're done for now\n\n\n        this.trigger('error'); // Re-create our adsManager\n\n        this.loadAds();\n      }\n      /**\n       * Re-create our adsManager\n       */\n\n    }, {\n      key: \"loadAds\",\n      value: function loadAds() {\n        var _this11 = this;\n\n        // Tell our adsManager to go bye bye\n        this.managerPromise.then(function () {\n          // Destroy our adsManager\n          if (_this11.manager) {\n            _this11.manager.destroy();\n          } // Re-set our adsManager promises\n\n\n          _this11.managerPromise = new Promise(function (resolve) {\n            _this11.on('loaded', resolve);\n\n            _this11.player.debug.log(_this11.manager);\n          }); // Now request some new advertisements\n\n          _this11.requestAds();\n        }).catch(function () {});\n      }\n      /**\n       * Handles callbacks after an ad event was invoked\n       * @param {String} event - Event type\n       */\n\n    }, {\n      key: \"trigger\",\n      value: function trigger(event) {\n        var _this12 = this;\n\n        for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n          args[_key - 1] = arguments[_key];\n        }\n\n        var handlers = this.events[event];\n\n        if (is$1.array(handlers)) {\n          handlers.forEach(function (handler) {\n            if (is$1.function(handler)) {\n              handler.apply(_this12, args);\n            }\n          });\n        }\n      }\n      /**\n       * Add event listeners\n       * @param {String} event - Event type\n       * @param {Function} callback - Callback for when event occurs\n       * @return {Ads}\n       */\n\n    }, {\n      key: \"on\",\n      value: function on(event, callback) {\n        if (!is$1.array(this.events[event])) {\n          this.events[event] = [];\n        }\n\n        this.events[event].push(callback);\n        return this;\n      }\n      /**\n       * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n       * The advertisement has 12 seconds to get its things together. We stop this timer when the\n       * advertisement is playing, or when a user action is required to start, then we clear the\n       * timer on ad ready\n       * @param {Number} time\n       * @param {String} from\n       */\n\n    }, {\n      key: \"startSafetyTimer\",\n      value: function startSafetyTimer(time, from) {\n        var _this13 = this;\n\n        this.player.debug.log(\"Safety timer invoked from: \".concat(from));\n        this.safetyTimer = setTimeout(function () {\n          _this13.cancel();\n\n          _this13.clearSafetyTimer('startSafetyTimer()');\n        }, time);\n      }\n      /**\n       * Clear our safety timer(s)\n       * @param {String} from\n       */\n\n    }, {\n      key: \"clearSafetyTimer\",\n      value: function clearSafetyTimer(from) {\n        if (!is$1.nullOrUndefined(this.safetyTimer)) {\n          this.player.debug.log(\"Safety timer cleared from: \".concat(from));\n          clearTimeout(this.safetyTimer);\n          this.safetyTimer = null;\n        }\n      }\n    }, {\n      key: \"enabled\",\n      get: function get() {\n        var config = this.config;\n        return this.player.isHTML5 && this.player.isVideo && config.enabled && (!is$1.empty(config.publisherId) || is$1.url(config.tagUrl));\n      }\n    }, {\n      key: \"tagUrl\",\n      get: function get() {\n        var config = this.config;\n\n        if (is$1.url(config.tagUrl)) {\n          return config.tagUrl;\n        }\n\n        var params = {\n          AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n          AV_CHANNELID: '5a0458dc28a06145e4519d21',\n          AV_URL: window.location.hostname,\n          cb: Date.now(),\n          AV_WIDTH: 640,\n          AV_HEIGHT: 480,\n          AV_CDIM2: this.publisherId\n        };\n        var base = 'https://go.aniview.com/api/adserver6/vast/';\n        return \"\".concat(base, \"?\").concat(buildUrlParams(params));\n      }\n    }]);\n\n    return Ads;\n  }();\n\n  var parseVtt = function parseVtt(vttDataString) {\n    var processedList = [];\n    var frames = vttDataString.split(/\\r\\n\\r\\n|\\n\\n|\\r\\r/);\n    frames.forEach(function (frame) {\n      var result = {};\n      var lines = frame.split(/\\r\\n|\\n|\\r/);\n      lines.forEach(function (line) {\n        if (!is$1.number(result.startTime)) {\n          // The line with start and end times on it is the first line of interest\n          var matchTimes = line.match(/([0-9]{2})?:?([0-9]{2}):([0-9]{2}).([0-9]{2,3})( ?--> ?)([0-9]{2})?:?([0-9]{2}):([0-9]{2}).([0-9]{2,3})/); // Note that this currently ignores caption formatting directives that are optionally on the end of this line - fine for non-captions VTT\n\n          if (matchTimes) {\n            result.startTime = Number(matchTimes[1] || 0) * 60 * 60 + Number(matchTimes[2]) * 60 + Number(matchTimes[3]) + Number(\"0.\".concat(matchTimes[4]));\n            result.endTime = Number(matchTimes[6] || 0) * 60 * 60 + Number(matchTimes[7]) * 60 + Number(matchTimes[8]) + Number(\"0.\".concat(matchTimes[9]));\n          }\n        } else if (!is$1.empty(line.trim()) && is$1.empty(result.text)) {\n          // If we already have the startTime, then we're definitely up to the text line(s)\n          var lineSplit = line.trim().split('#xywh=');\n\n          var _lineSplit = _slicedToArray(lineSplit, 1);\n\n          result.text = _lineSplit[0];\n\n          // If there's content in lineSplit[1], then we have sprites. If not, then it's just one frame per image\n          if (lineSplit[1]) {\n            var _lineSplit$1$split = lineSplit[1].split(',');\n\n            var _lineSplit$1$split2 = _slicedToArray(_lineSplit$1$split, 4);\n\n            result.x = _lineSplit$1$split2[0];\n            result.y = _lineSplit$1$split2[1];\n            result.w = _lineSplit$1$split2[2];\n            result.h = _lineSplit$1$split2[3];\n          }\n        }\n      });\n\n      if (result.text) {\n        processedList.push(result);\n      }\n    });\n    return processedList;\n  };\n  /**\n   * Preview thumbnails for seek hover and scrubbing\n   * Seeking: Hover over the seek bar (desktop only): shows a small preview container above the seek bar\n   * Scrubbing: Click and drag the seek bar (desktop and mobile): shows the preview image over the entire video, as if the video is scrubbing at very high speed\n   *\n   * Notes:\n   * - Thumbs are set via JS settings on Plyr init, not HTML5 'track' property. Using the track property would be a bit gross, because it doesn't support custom 'kinds'. kind=metadata might be used for something else, and we want to allow multiple thumbnails tracks. Tracks must have a unique combination of 'kind' and 'label'. We would have to do something like kind=metadata,label=thumbnails1 / kind=metadata,label=thumbnails2. Square peg, round hole\n   * - VTT info: the image URL is relative to the VTT, not the current document. But if the url starts with a slash, it will naturally be relative to the current domain. https://support.jwplayer.com/articles/how-to-add-preview-thumbnails\n   * - This implementation uses multiple separate img elements. Other implementations use background-image on one element. This would be nice and simple, but Firefox and Safari have flickering issues with replacing backgrounds of larger images. It seems that YouTube perhaps only avoids this because they don't have the option for high-res previews (even the fullscreen ones, when mousedown/seeking). Images appear over the top of each other, and previous ones are discarded once the new ones have been rendered\n   */\n\n\n  var PreviewThumbnails =\n  /*#__PURE__*/\n  function () {\n    /**\n     * PreviewThumbnails constructor.\n     * @param {Plyr} player\n     * @return {PreviewThumbnails}\n     */\n    function PreviewThumbnails(player) {\n      _classCallCheck(this, PreviewThumbnails);\n\n      this.player = player;\n      this.thumbnails = [];\n      this.loaded = false;\n      this.lastMouseMoveTime = Date.now();\n      this.mouseDown = false;\n      this.loadedImages = [];\n      this.elements = {\n        thumb: {},\n        scrubbing: {}\n      };\n      this.load();\n    }\n\n    _createClass(PreviewThumbnails, [{\n      key: \"load\",\n      value: function load() {\n        var _this = this;\n\n        // Togglethe regular seek tooltip\n        if (this.player.elements.display.seekTooltip) {\n          this.player.elements.display.seekTooltip.hidden = this.enabled;\n        }\n\n        if (!this.enabled) {\n          return;\n        }\n\n        this.getThumbnails().then(function () {\n          // Render DOM elements\n          _this.render(); // Check to see if thumb container size was specified manually in CSS\n\n\n          _this.determineContainerAutoSizing();\n\n          _this.loaded = true;\n        });\n      } // Download VTT files and parse them\n\n    }, {\n      key: \"getThumbnails\",\n      value: function getThumbnails() {\n        var _this2 = this;\n\n        return new Promise(function (resolve) {\n          var src = _this2.player.config.previewThumbnails.src;\n\n          if (is$1.empty(src)) {\n            throw new Error('Missing previewThumbnails.src config attribute');\n          } // If string, convert into single-element list\n\n\n          var urls = is$1.string(src) ? [src] : src; // Loop through each src URL. Download and process the VTT file, storing the resulting data in this.thumbnails\n\n          var promises = urls.map(function (u) {\n            return _this2.getThumbnail(u);\n          });\n          Promise.all(promises).then(function () {\n            // Sort smallest to biggest (e.g., [120p, 480p, 1080p])\n            _this2.thumbnails.sort(function (x, y) {\n              return x.height - y.height;\n            });\n\n            _this2.player.debug.log('Preview thumbnails', _this2.thumbnails);\n\n            resolve();\n          });\n        });\n      } // Process individual VTT file\n\n    }, {\n      key: \"getThumbnail\",\n      value: function getThumbnail(url) {\n        var _this3 = this;\n\n        return new Promise(function (resolve) {\n          fetch(url).then(function (response) {\n            var thumbnail = {\n              frames: parseVtt(response),\n              height: null,\n              urlPrefix: ''\n            }; // If the URLs don't start with '/', then we need to set their relative path to be the location of the VTT file\n            // If the URLs do start with '/', then they obviously don't need a prefix, so it will remain blank\n            // If the thumbnail URLs start with with none of '/', 'http://' or 'https://', then we need to set their relative path to be the location of the VTT file\n\n            if (!thumbnail.frames[0].text.startsWith('/') && !thumbnail.frames[0].text.startsWith('http://') && !thumbnail.frames[0].text.startsWith('https://')) {\n              thumbnail.urlPrefix = url.substring(0, url.lastIndexOf('/') + 1);\n            } // Download the first frame, so that we can determine/set the height of this thumbnailsDef\n\n\n            var tempImage = new Image();\n\n            tempImage.onload = function () {\n              thumbnail.height = tempImage.naturalHeight;\n              thumbnail.width = tempImage.naturalWidth;\n\n              _this3.thumbnails.push(thumbnail);\n\n              resolve();\n            };\n\n            tempImage.src = thumbnail.urlPrefix + thumbnail.frames[0].text;\n          });\n        });\n      }\n    }, {\n      key: \"startMove\",\n      value: function startMove(event) {\n        if (!this.loaded) {\n          return;\n        }\n\n        if (!is$1.event(event) || !['touchmove', 'mousemove'].includes(event.type)) {\n          return;\n        } // Wait until media has a duration\n\n\n        if (!this.player.media.duration) {\n          return;\n        }\n\n        if (event.type === 'touchmove') {\n          // Calculate seek hover position as approx video seconds\n          this.seekTime = this.player.media.duration * (this.player.elements.inputs.seek.value / 100);\n        } else {\n          // Calculate seek hover position as approx video seconds\n          var clientRect = this.player.elements.progress.getBoundingClientRect();\n          var percentage = 100 / clientRect.width * (event.pageX - clientRect.left);\n          this.seekTime = this.player.media.duration * (percentage / 100);\n\n          if (this.seekTime < 0) {\n            // The mousemove fires for 10+px out to the left\n            this.seekTime = 0;\n          }\n\n          if (this.seekTime > this.player.media.duration - 1) {\n            // Took 1 second off the duration for safety, because different players can disagree on the real duration of a video\n            this.seekTime = this.player.media.duration - 1;\n          }\n\n          this.mousePosX = event.pageX; // Set time text inside image container\n\n          this.elements.thumb.time.innerText = formatTime(this.seekTime);\n        } // Download and show image\n\n\n        this.showImageAtCurrentTime();\n      }\n    }, {\n      key: \"endMove\",\n      value: function endMove() {\n        this.toggleThumbContainer(false, true);\n      }\n    }, {\n      key: \"startScrubbing\",\n      value: function startScrubbing(event) {\n        // Only act on left mouse button (0), or touch device (event.button is false)\n        if (event.button === false || event.button === 0) {\n          this.mouseDown = true; // Wait until media has a duration\n\n          if (this.player.media.duration) {\n            this.toggleScrubbingContainer(true);\n            this.toggleThumbContainer(false, true); // Download and show image\n\n            this.showImageAtCurrentTime();\n          }\n        }\n      }\n    }, {\n      key: \"endScrubbing\",\n      value: function endScrubbing() {\n        var _this4 = this;\n\n        this.mouseDown = false; // Hide scrubbing preview. But wait until the video has successfully seeked before hiding the scrubbing preview\n\n        if (Math.ceil(this.lastTime) === Math.ceil(this.player.media.currentTime)) {\n          // The video was already seeked/loaded at the chosen time - hide immediately\n          this.toggleScrubbingContainer(false);\n        } else {\n          // The video hasn't seeked yet. Wait for that\n          once.call(this.player, this.player.media, 'timeupdate', function () {\n            // Re-check mousedown - we might have already started scrubbing again\n            if (!_this4.mouseDown) {\n              _this4.toggleScrubbingContainer(false);\n            }\n          });\n        }\n      }\n      /**\n       * Setup hooks for Plyr and window events\n       */\n\n    }, {\n      key: \"listeners\",\n      value: function listeners() {\n        var _this5 = this;\n\n        // Hide thumbnail preview - on mouse click, mouse leave (in listeners.js for now), and video play/seek. All four are required, e.g., for buffering\n        this.player.on('play', function () {\n          _this5.toggleThumbContainer(false, true);\n        });\n        this.player.on('seeked', function () {\n          _this5.toggleThumbContainer(false);\n        });\n        this.player.on('timeupdate', function () {\n          _this5.lastTime = _this5.player.media.currentTime;\n        });\n      }\n      /**\n       * Create HTML elements for image containers\n       */\n\n    }, {\n      key: \"render\",\n      value: function render() {\n        // Create HTML element: plyr__preview-thumbnail-container\n        this.elements.thumb.container = createElement('div', {\n          class: this.player.config.classNames.previewThumbnails.thumbContainer\n        }); // Wrapper for the image for styling\n\n        this.elements.thumb.imageContainer = createElement('div', {\n          class: this.player.config.classNames.previewThumbnails.imageContainer\n        });\n        this.elements.thumb.container.appendChild(this.elements.thumb.imageContainer); // Create HTML element, parent+span: time text (e.g., 01:32:00)\n\n        var timeContainer = createElement('div', {\n          class: this.player.config.classNames.previewThumbnails.timeContainer\n        });\n        this.elements.thumb.time = createElement('span', {}, '00:00');\n        timeContainer.appendChild(this.elements.thumb.time);\n        this.elements.thumb.container.appendChild(timeContainer); // Inject the whole thumb\n\n        if (is$1.element(this.player.elements.progress)) {\n          this.player.elements.progress.appendChild(this.elements.thumb.container);\n        } // Create HTML element: plyr__preview-scrubbing-container\n\n\n        this.elements.scrubbing.container = createElement('div', {\n          class: this.player.config.classNames.previewThumbnails.scrubbingContainer\n        });\n        this.player.elements.wrapper.appendChild(this.elements.scrubbing.container);\n      }\n    }, {\n      key: \"showImageAtCurrentTime\",\n      value: function showImageAtCurrentTime() {\n        var _this6 = this;\n\n        if (this.mouseDown) {\n          this.setScrubbingContainerSize();\n        } else {\n          this.setThumbContainerSizeAndPos();\n        } // Find the desired thumbnail index\n        // TODO: Handle a video longer than the thumbs where thumbNum is null\n\n\n        var thumbNum = this.thumbnails[0].frames.findIndex(function (frame) {\n          return _this6.seekTime >= frame.startTime && _this6.seekTime <= frame.endTime;\n        });\n        var hasThumb = thumbNum >= 0;\n        var qualityIndex = 0; // Show the thumb container if we're not scrubbing\n\n        if (!this.mouseDown) {\n          this.toggleThumbContainer(hasThumb);\n        } // No matching thumb found\n\n\n        if (!hasThumb) {\n          return;\n        } // Check to see if we've already downloaded higher quality versions of this image\n\n\n        this.thumbnails.forEach(function (thumbnail, index) {\n          if (_this6.loadedImages.includes(thumbnail.frames[thumbNum].text)) {\n            qualityIndex = index;\n          }\n        }); // Only proceed if either thumbnum or thumbfilename has changed\n\n        if (thumbNum !== this.showingThumb) {\n          this.showingThumb = thumbNum;\n          this.loadImage(qualityIndex);\n        }\n      } // Show the image that's currently specified in this.showingThumb\n\n    }, {\n      key: \"loadImage\",\n      value: function loadImage() {\n        var _this7 = this;\n\n        var qualityIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n        var thumbNum = this.showingThumb;\n        var thumbnail = this.thumbnails[qualityIndex];\n        var urlPrefix = thumbnail.urlPrefix;\n        var frame = thumbnail.frames[thumbNum];\n        var thumbFilename = thumbnail.frames[thumbNum].text;\n        var thumbUrl = urlPrefix + thumbFilename;\n\n        if (!this.currentImageElement || this.currentImageElement.dataset.filename !== thumbFilename) {\n          // If we're already loading a previous image, remove its onload handler - we don't want it to load after this one\n          // Only do this if not using sprites. Without sprites we really want to show as many images as possible, as a best-effort\n          if (this.loadingImage && this.usingSprites) {\n            this.loadingImage.onload = null;\n          } // We're building and adding a new image. In other implementations of similar functionality (YouTube), background image\n          // is instead used. But this causes issues with larger images in Firefox and Safari - switching between background\n          // images causes a flicker. Putting a new image over the top does not\n\n\n          var previewImage = new Image();\n          previewImage.src = thumbUrl;\n          previewImage.dataset.index = thumbNum;\n          previewImage.dataset.filename = thumbFilename;\n          this.showingThumbFilename = thumbFilename;\n          this.player.debug.log(\"Loading image: \".concat(thumbUrl)); // For some reason, passing the named function directly causes it to execute immediately. So I've wrapped it in an anonymous function...\n\n          previewImage.onload = function () {\n            return _this7.showImage(previewImage, frame, qualityIndex, thumbNum, thumbFilename, true);\n          };\n\n          this.loadingImage = previewImage;\n          this.removeOldImages(previewImage);\n        } else {\n          // Update the existing image\n          this.showImage(this.currentImageElement, frame, qualityIndex, thumbNum, thumbFilename, false);\n          this.currentImageElement.dataset.index = thumbNum;\n          this.removeOldImages(this.currentImageElement);\n        }\n      }\n    }, {\n      key: \"showImage\",\n      value: function showImage(previewImage, frame, qualityIndex, thumbNum, thumbFilename) {\n        var newImage = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : true;\n        this.player.debug.log(\"Showing thumb: \".concat(thumbFilename, \". num: \").concat(thumbNum, \". qual: \").concat(qualityIndex, \". newimg: \").concat(newImage));\n        this.setImageSizeAndOffset(previewImage, frame);\n\n        if (newImage) {\n          this.currentImageContainer.appendChild(previewImage);\n          this.currentImageElement = previewImage;\n\n          if (!this.loadedImages.includes(thumbFilename)) {\n            this.loadedImages.push(thumbFilename);\n          }\n        } // Preload images before and after the current one\n        // Show higher quality of the same frame\n        // Each step here has a short time delay, and only continues if still hovering/seeking the same spot. This is to protect slow connections from overloading\n\n\n        this.preloadNearby(thumbNum, true).then(this.preloadNearby(thumbNum, false)).then(this.getHigherQuality(qualityIndex, previewImage, frame, thumbFilename));\n      } // Remove all preview images that aren't the designated current image\n\n    }, {\n      key: \"removeOldImages\",\n      value: function removeOldImages(currentImage) {\n        var _this8 = this;\n\n        // Get a list of all images, convert it from a DOM list to an array\n        Array.from(this.currentImageContainer.children).forEach(function (image) {\n          if (image.tagName.toLowerCase() !== 'img') {\n            return;\n          }\n\n          var removeDelay = _this8.usingSprites ? 500 : 1000;\n\n          if (image.dataset.index !== currentImage.dataset.index && !image.dataset.deleting) {\n            // Wait 200ms, as the new image can take some time to show on certain browsers (even though it was downloaded before showing). This will prevent flicker, and show some generosity towards slower clients\n            // First set attribute 'deleting' to prevent multi-handling of this on repeat firing of this function\n            image.dataset.deleting = true; // This has to be set before the timeout - to prevent issues switching between hover and scrub\n\n            var currentImageContainer = _this8.currentImageContainer;\n            setTimeout(function () {\n              currentImageContainer.removeChild(image);\n\n              _this8.player.debug.log(\"Removing thumb: \".concat(image.dataset.filename));\n            }, removeDelay);\n          }\n        });\n      } // Preload images before and after the current one. Only if the user is still hovering/seeking the same frame\n      // This will only preload the lowest quality\n\n    }, {\n      key: \"preloadNearby\",\n      value: function preloadNearby(thumbNum) {\n        var _this9 = this;\n\n        var forward = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n        return new Promise(function (resolve) {\n          setTimeout(function () {\n            var oldThumbFilename = _this9.thumbnails[0].frames[thumbNum].text;\n\n            if (_this9.showingThumbFilename === oldThumbFilename) {\n              // Find the nearest thumbs with different filenames. Sometimes it'll be the next index, but in the case of sprites, it might be 100+ away\n              var thumbnailsClone;\n\n              if (forward) {\n                thumbnailsClone = _this9.thumbnails[0].frames.slice(thumbNum);\n              } else {\n                thumbnailsClone = _this9.thumbnails[0].frames.slice(0, thumbNum).reverse();\n              }\n\n              var foundOne = false;\n              thumbnailsClone.forEach(function (frame) {\n                var newThumbFilename = frame.text;\n\n                if (newThumbFilename !== oldThumbFilename) {\n                  // Found one with a different filename. Make sure it hasn't already been loaded on this page visit\n                  if (!_this9.loadedImages.includes(newThumbFilename)) {\n                    foundOne = true;\n\n                    _this9.player.debug.log(\"Preloading thumb filename: \".concat(newThumbFilename));\n\n                    var urlPrefix = _this9.thumbnails[0].urlPrefix;\n                    var thumbURL = urlPrefix + newThumbFilename;\n                    var previewImage = new Image();\n                    previewImage.src = thumbURL;\n\n                    previewImage.onload = function () {\n                      _this9.player.debug.log(\"Preloaded thumb filename: \".concat(newThumbFilename));\n\n                      if (!_this9.loadedImages.includes(newThumbFilename)) _this9.loadedImages.push(newThumbFilename); // We don't resolve until the thumb is loaded\n\n                      resolve();\n                    };\n                  }\n                }\n              }); // If there are none to preload then we want to resolve immediately\n\n              if (!foundOne) {\n                resolve();\n              }\n            }\n          }, 300);\n        });\n      } // If user has been hovering current image for half a second, look for a higher quality one\n\n    }, {\n      key: \"getHigherQuality\",\n      value: function getHigherQuality(currentQualityIndex, previewImage, frame, thumbFilename) {\n        var _this10 = this;\n\n        if (currentQualityIndex < this.thumbnails.length - 1) {\n          // Only use the higher quality version if it's going to look any better - if the current thumb is of a lower pixel density than the thumbnail container\n          var previewImageHeight = previewImage.naturalHeight;\n\n          if (this.usingSprites) {\n            previewImageHeight = frame.h;\n          }\n\n          if (previewImageHeight < this.thumbContainerHeight) {\n            // Recurse back to the loadImage function - show a higher quality one, but only if the viewer is on this frame for a while\n            setTimeout(function () {\n              // Make sure the mouse hasn't already moved on and started hovering at another image\n              if (_this10.showingThumbFilename === thumbFilename) {\n                _this10.player.debug.log(\"Showing higher quality thumb for: \".concat(thumbFilename));\n\n                _this10.loadImage(currentQualityIndex + 1);\n              }\n            }, 300);\n          }\n        }\n      }\n    }, {\n      key: \"toggleThumbContainer\",\n      value: function toggleThumbContainer() {\n        var toggle = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n        var clearShowing = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n        var className = this.player.config.classNames.previewThumbnails.thumbContainerShown;\n        this.elements.thumb.container.classList.toggle(className, toggle);\n\n        if (!toggle && clearShowing) {\n          this.showingThumb = null;\n          this.showingThumbFilename = null;\n        }\n      }\n    }, {\n      key: \"toggleScrubbingContainer\",\n      value: function toggleScrubbingContainer() {\n        var toggle = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n        var className = this.player.config.classNames.previewThumbnails.scrubbingContainerShown;\n        this.elements.scrubbing.container.classList.toggle(className, toggle);\n\n        if (!toggle) {\n          this.showingThumb = null;\n          this.showingThumbFilename = null;\n        }\n      }\n    }, {\n      key: \"determineContainerAutoSizing\",\n      value: function determineContainerAutoSizing() {\n        if (this.elements.thumb.imageContainer.clientHeight > 20) {\n          // This will prevent auto sizing in this.setThumbContainerSizeAndPos()\n          this.sizeSpecifiedInCSS = true;\n        }\n      } // Set the size to be about a quarter of the size of video. Unless option dynamicSize === false, in which case it needs to be set in CSS\n\n    }, {\n      key: \"setThumbContainerSizeAndPos\",\n      value: function setThumbContainerSizeAndPos() {\n        if (!this.sizeSpecifiedInCSS) {\n          var thumbWidth = Math.floor(this.thumbContainerHeight * this.thumbAspectRatio);\n          this.elements.thumb.imageContainer.style.height = \"\".concat(this.thumbContainerHeight, \"px\");\n          this.elements.thumb.imageContainer.style.width = \"\".concat(thumbWidth, \"px\");\n        }\n\n        this.setThumbContainerPos();\n      }\n    }, {\n      key: \"setThumbContainerPos\",\n      value: function setThumbContainerPos() {\n        var seekbarRect = this.player.elements.progress.getBoundingClientRect();\n        var plyrRect = this.player.elements.container.getBoundingClientRect();\n        var container = this.elements.thumb.container; // Find the lowest and highest desired left-position, so we don't slide out the side of the video container\n\n        var minVal = plyrRect.left - seekbarRect.left + 10;\n        var maxVal = plyrRect.right - seekbarRect.left - container.clientWidth - 10; // Set preview container position to: mousepos, minus seekbar.left, minus half of previewContainer.clientWidth\n\n        var previewPos = this.mousePosX - seekbarRect.left - container.clientWidth / 2;\n\n        if (previewPos < minVal) {\n          previewPos = minVal;\n        }\n\n        if (previewPos > maxVal) {\n          previewPos = maxVal;\n        }\n\n        container.style.left = \"\".concat(previewPos, \"px\");\n      } // Can't use 100% width, in case the video is a different aspect ratio to the video container\n\n    }, {\n      key: \"setScrubbingContainerSize\",\n      value: function setScrubbingContainerSize() {\n        this.elements.scrubbing.container.style.width = \"\".concat(this.player.media.clientWidth, \"px\"); // Can't use media.clientHeight - html5 video goes big and does black bars above and below\n\n        this.elements.scrubbing.container.style.height = \"\".concat(this.player.media.clientWidth / this.thumbAspectRatio, \"px\");\n      } // Sprites need to be offset to the correct location\n\n    }, {\n      key: \"setImageSizeAndOffset\",\n      value: function setImageSizeAndOffset(previewImage, frame) {\n        if (!this.usingSprites) {\n          return;\n        } // Find difference between height and preview container height\n\n\n        var multiplier = this.thumbContainerHeight / frame.h;\n        previewImage.style.height = \"\".concat(Math.floor(previewImage.naturalHeight * multiplier), \"px\");\n        previewImage.style.width = \"\".concat(Math.floor(previewImage.naturalWidth * multiplier), \"px\");\n        previewImage.style.left = \"-\".concat(frame.x * multiplier, \"px\");\n        previewImage.style.top = \"-\".concat(frame.y * multiplier, \"px\");\n      }\n    }, {\n      key: \"enabled\",\n      get: function get() {\n        return this.player.isHTML5 && this.player.isVideo && this.player.config.previewThumbnails.enabled;\n      }\n    }, {\n      key: \"currentImageContainer\",\n      get: function get() {\n        if (this.mouseDown) {\n          return this.elements.scrubbing.container;\n        }\n\n        return this.elements.thumb.imageContainer;\n      }\n    }, {\n      key: \"usingSprites\",\n      get: function get() {\n        return Object.keys(this.thumbnails[0].frames[0]).includes('w');\n      }\n    }, {\n      key: \"thumbAspectRatio\",\n      get: function get() {\n        if (this.usingSprites) {\n          return this.thumbnails[0].frames[0].w / this.thumbnails[0].frames[0].h;\n        }\n\n        return this.thumbnails[0].width / this.thumbnails[0].height;\n      }\n    }, {\n      key: \"thumbContainerHeight\",\n      get: function get() {\n        if (this.mouseDown) {\n          // Can't use media.clientHeight - HTML5 video goes big and does black bars above and below\n          return Math.floor(this.player.media.clientWidth / this.thumbAspectRatio);\n        }\n\n        return Math.floor(this.player.media.clientWidth / this.thumbAspectRatio / 4);\n      }\n    }, {\n      key: \"currentImageElement\",\n      get: function get() {\n        if (this.mouseDown) {\n          return this.currentScrubbingImageElement;\n        }\n\n        return this.currentThumbnailImageElement;\n      },\n      set: function set(element) {\n        if (this.mouseDown) {\n          this.currentScrubbingImageElement = element;\n        } else {\n          this.currentThumbnailImageElement = element;\n        }\n      }\n    }]);\n\n    return PreviewThumbnails;\n  }();\n\n  var source = {\n    // Add elements to HTML5 media (source, tracks, etc)\n    insertElements: function insertElements(type, attributes) {\n      var _this = this;\n\n      if (is$1.string(attributes)) {\n        insertElement(type, this.media, {\n          src: attributes\n        });\n      } else if (is$1.array(attributes)) {\n        attributes.forEach(function (attribute) {\n          insertElement(type, _this.media, attribute);\n        });\n      }\n    },\n    // Update source\n    // Sources are not checked for support so be careful\n    change: function change(input) {\n      var _this2 = this;\n\n      if (!getDeep(input, 'sources.length')) {\n        this.debug.warn('Invalid source format');\n        return;\n      } // Cancel current network requests\n\n\n      html5.cancelRequests.call(this); // Destroy instance and re-setup\n\n      this.destroy.call(this, function () {\n        // Reset quality options\n        _this2.options.quality = []; // Remove elements\n\n        removeElement(_this2.media);\n        _this2.media = null; // Reset class name\n\n        if (is$1.element(_this2.elements.container)) {\n          _this2.elements.container.removeAttribute('class');\n        } // Set the type and provider\n\n\n        var sources = input.sources,\n            type = input.type;\n\n        var _sources = _slicedToArray(sources, 1),\n            _sources$ = _sources[0],\n            _sources$$provider = _sources$.provider,\n            provider = _sources$$provider === void 0 ? providers.html5 : _sources$$provider,\n            src = _sources$.src;\n\n        var tagName = provider === 'html5' ? type : 'div';\n        var attributes = provider === 'html5' ? {} : {\n          src: src\n        };\n        Object.assign(_this2, {\n          provider: provider,\n          type: type,\n          // Check for support\n          supported: support.check(type, provider, _this2.config.playsinline),\n          // Create new element\n          media: createElement(tagName, attributes)\n        }); // Inject the new element\n\n        _this2.elements.container.appendChild(_this2.media); // Autoplay the new source?\n\n\n        if (is$1.boolean(input.autoplay)) {\n          _this2.config.autoplay = input.autoplay;\n        } // Set attributes for audio and video\n\n\n        if (_this2.isHTML5) {\n          if (_this2.config.crossorigin) {\n            _this2.media.setAttribute('crossorigin', '');\n          }\n\n          if (_this2.config.autoplay) {\n            _this2.media.setAttribute('autoplay', '');\n          }\n\n          if (!is$1.empty(input.poster)) {\n            _this2.poster = input.poster;\n          }\n\n          if (_this2.config.loop.active) {\n            _this2.media.setAttribute('loop', '');\n          }\n\n          if (_this2.config.muted) {\n            _this2.media.setAttribute('muted', '');\n          }\n\n          if (_this2.config.playsinline) {\n            _this2.media.setAttribute('playsinline', '');\n          }\n        } // Restore class hook\n\n\n        ui.addStyleHook.call(_this2); // Set new sources for html5\n\n        if (_this2.isHTML5) {\n          source.insertElements.call(_this2, 'source', sources);\n        } // Set video title\n\n\n        _this2.config.title = input.title; // Set up from scratch\n\n        media.setup.call(_this2); // HTML5 stuff\n\n        if (_this2.isHTML5) {\n          // Setup captions\n          if (Object.keys(input).includes('tracks')) {\n            source.insertElements.call(_this2, 'track', input.tracks);\n          }\n        } // If HTML5 or embed but not fully supported, setupInterface and call ready now\n\n\n        if (_this2.isHTML5 || _this2.isEmbed && !_this2.supported.ui) {\n          // Setup interface\n          ui.build.call(_this2);\n        } // Load HTML5 sources\n\n\n        if (_this2.isHTML5) {\n          _this2.media.load();\n        } // Reload thumbnails\n\n\n        if (_this2.previewThumbnails) {\n          _this2.previewThumbnails.load();\n        } // Update the fullscreen support\n\n\n        _this2.fullscreen.update();\n      }, true);\n    }\n  };\n\n  /**\n   * Returns a number whose value is limited to the given range.\n   *\n   * Example: limit the output of this computation to between 0 and 255\n   * (x * 255).clamp(0, 255)\n   *\n   * @param {Number} input\n   * @param {Number} min The lower boundary of the output range\n   * @param {Number} max The upper boundary of the output range\n   * @returns A number in the range [min, max]\n   * @type Number\n   */\n  function clamp() {\n    var input = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n    var min = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n    var max = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 255;\n    return Math.min(Math.max(input, min), max);\n  }\n\n  // TODO: Use a WeakMap for private globals\n  // const globals = new WeakMap();\n  // Plyr instance\n\n  var Plyr =\n  /*#__PURE__*/\n  function () {\n    function Plyr(target, options) {\n      var _this = this;\n\n      _classCallCheck(this, Plyr);\n\n      this.timers = {}; // State\n\n      this.ready = false;\n      this.loading = false;\n      this.failed = false; // Touch device\n\n      this.touch = support.touch; // Set the media element\n\n      this.media = target; // String selector passed\n\n      if (is$1.string(this.media)) {\n        this.media = document.querySelectorAll(this.media);\n      } // jQuery, NodeList or Array passed, use first element\n\n\n      if (window.jQuery && this.media instanceof jQuery || is$1.nodeList(this.media) || is$1.array(this.media)) {\n        // eslint-disable-next-line\n        this.media = this.media[0];\n      } // Set config\n\n\n      this.config = extend({}, defaults$1, Plyr.defaults, options || {}, function () {\n        try {\n          return JSON.parse(_this.media.getAttribute('data-plyr-config'));\n        } catch (e) {\n          return {};\n        }\n      }()); // Elements cache\n\n      this.elements = {\n        container: null,\n        captions: null,\n        buttons: {},\n        display: {},\n        progress: {},\n        inputs: {},\n        settings: {\n          popup: null,\n          menu: null,\n          panels: {},\n          buttons: {}\n        }\n      }; // Captions\n\n      this.captions = {\n        active: null,\n        currentTrack: -1,\n        meta: new WeakMap()\n      }; // Fullscreen\n\n      this.fullscreen = {\n        active: false\n      }; // Options\n\n      this.options = {\n        speed: [],\n        quality: []\n      }; // Debugging\n      // TODO: move to globals\n\n      this.debug = new Console(this.config.debug); // Log config options and support\n\n      this.debug.log('Config', this.config);\n      this.debug.log('Support', support); // We need an element to setup\n\n      if (is$1.nullOrUndefined(this.media) || !is$1.element(this.media)) {\n        this.debug.error('Setup failed: no suitable element passed');\n        return;\n      } // Bail if the element is initialized\n\n\n      if (this.media.plyr) {\n        this.debug.warn('Target already setup');\n        return;\n      } // Bail if not enabled\n\n\n      if (!this.config.enabled) {\n        this.debug.error('Setup failed: disabled by config');\n        return;\n      } // Bail if disabled or no basic support\n      // You may want to disable certain UAs etc\n\n\n      if (!support.check().api) {\n        this.debug.error('Setup failed: no support');\n        return;\n      } // Cache original element state for .destroy()\n\n\n      var clone = this.media.cloneNode(true);\n      clone.autoplay = false;\n      this.elements.original = clone; // Set media type based on tag or data attribute\n      // Supported: video, audio, vimeo, youtube\n\n      var type = this.media.tagName.toLowerCase(); // Embed properties\n\n      var iframe = null;\n      var url = null; // Different setup based on type\n\n      switch (type) {\n        case 'div':\n          // Find the frame\n          iframe = this.media.querySelector('iframe'); // <iframe> type\n\n          if (is$1.element(iframe)) {\n            // Detect provider\n            url = parseUrl(iframe.getAttribute('src'));\n            this.provider = getProviderByUrl(url.toString()); // Rework elements\n\n            this.elements.container = this.media;\n            this.media = iframe; // Reset classname\n\n            this.elements.container.className = ''; // Get attributes from URL and set config\n\n            if (url.search.length) {\n              var truthy = ['1', 'true'];\n\n              if (truthy.includes(url.searchParams.get('autoplay'))) {\n                this.config.autoplay = true;\n              }\n\n              if (truthy.includes(url.searchParams.get('loop'))) {\n                this.config.loop.active = true;\n              } // TODO: replace fullscreen.iosNative with this playsinline config option\n              // YouTube requires the playsinline in the URL\n\n\n              if (this.isYouTube) {\n                this.config.playsinline = truthy.includes(url.searchParams.get('playsinline'));\n                this.config.youtube.hl = url.searchParams.get('hl'); // TODO: Should this be setting language?\n              } else {\n                this.config.playsinline = true;\n              }\n            }\n          } else {\n            // <div> with attributes\n            this.provider = this.media.getAttribute(this.config.attributes.embed.provider); // Remove attribute\n\n            this.media.removeAttribute(this.config.attributes.embed.provider);\n          } // Unsupported or missing provider\n\n\n          if (is$1.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n            this.debug.error('Setup failed: Invalid provider');\n            return;\n          } // Audio will come later for external providers\n\n\n          this.type = types.video;\n          break;\n\n        case 'video':\n        case 'audio':\n          this.type = type;\n          this.provider = providers.html5; // Get config from attributes\n\n          if (this.media.hasAttribute('crossorigin')) {\n            this.config.crossorigin = true;\n          }\n\n          if (this.media.hasAttribute('autoplay')) {\n            this.config.autoplay = true;\n          }\n\n          if (this.media.hasAttribute('playsinline') || this.media.hasAttribute('webkit-playsinline')) {\n            this.config.playsinline = true;\n          }\n\n          if (this.media.hasAttribute('muted')) {\n            this.config.muted = true;\n          }\n\n          if (this.media.hasAttribute('loop')) {\n            this.config.loop.active = true;\n          }\n\n          break;\n\n        default:\n          this.debug.error('Setup failed: unsupported type');\n          return;\n      } // Check for support again but with type\n\n\n      this.supported = support.check(this.type, this.provider, this.config.playsinline); // If no support for even API, bail\n\n      if (!this.supported.api) {\n        this.debug.error('Setup failed: no support');\n        return;\n      }\n\n      this.eventListeners = []; // Create listeners\n\n      this.listeners = new Listeners(this); // Setup local storage for user settings\n\n      this.storage = new Storage(this); // Store reference\n\n      this.media.plyr = this; // Wrap media\n\n      if (!is$1.element(this.elements.container)) {\n        this.elements.container = createElement('div', {\n          tabindex: 0\n        });\n        wrap(this.media, this.elements.container);\n      } // Add style hook\n\n\n      ui.addStyleHook.call(this); // Setup media\n\n      media.setup.call(this); // Listen for events if debugging\n\n      if (this.config.debug) {\n        on.call(this, this.elements.container, this.config.events.join(' '), function (event) {\n          _this.debug.log(\"event: \".concat(event.type));\n        });\n      } // Setup interface\n      // If embed but not fully supported, build interface now to avoid flash of controls\n\n\n      if (this.isHTML5 || this.isEmbed && !this.supported.ui) {\n        ui.build.call(this);\n      } // Container listeners\n\n\n      this.listeners.container(); // Global listeners\n\n      this.listeners.global(); // Setup fullscreen\n\n      this.fullscreen = new Fullscreen(this); // Setup ads if provided\n\n      if (this.config.ads.enabled) {\n        this.ads = new Ads(this);\n      } // Autoplay if required\n\n\n      if (this.isHTML5 && this.config.autoplay) {\n        setTimeout(function () {\n          return _this.play();\n        }, 10);\n      } // Seek time will be recorded (in listeners.js) so we can prevent hiding controls for a few seconds after seek\n\n\n      this.lastSeekTime = 0; // Setup preview thumbnails if enabled\n\n      if (this.config.previewThumbnails.enabled) {\n        this.previewThumbnails = new PreviewThumbnails(this);\n      }\n    } // ---------------------------------------\n    // API\n    // ---------------------------------------\n\n    /**\n     * Types and provider helpers\n     */\n\n\n    _createClass(Plyr, [{\n      key: \"play\",\n\n      /**\n       * Play the media, or play the advertisement (if they are not blocked)\n       */\n      value: function play() {\n        var _this2 = this;\n\n        if (!is$1.function(this.media.play)) {\n          return null;\n        } // Intecept play with ads\n\n\n        if (this.ads && this.ads.enabled) {\n          this.ads.managerPromise.then(function () {\n            return _this2.ads.play();\n          }).catch(function () {\n            return _this2.media.play();\n          });\n        } // Return the promise (for HTML5)\n\n\n        return this.media.play();\n      }\n      /**\n       * Pause the media\n       */\n\n    }, {\n      key: \"pause\",\n      value: function pause() {\n        if (!this.playing || !is$1.function(this.media.pause)) {\n          return;\n        }\n\n        this.media.pause();\n      }\n      /**\n       * Get playing state\n       */\n\n    }, {\n      key: \"togglePlay\",\n\n      /**\n       * Toggle playback based on current status\n       * @param {Boolean} input\n       */\n      value: function togglePlay(input) {\n        // Toggle based on current state if nothing passed\n        var toggle = is$1.boolean(input) ? input : !this.playing;\n\n        if (toggle) {\n          this.play();\n        } else {\n          this.pause();\n        }\n      }\n      /**\n       * Stop playback\n       */\n\n    }, {\n      key: \"stop\",\n      value: function stop() {\n        if (this.isHTML5) {\n          this.pause();\n          this.restart();\n        } else if (is$1.function(this.media.stop)) {\n          this.media.stop();\n        }\n      }\n      /**\n       * Restart playback\n       */\n\n    }, {\n      key: \"restart\",\n      value: function restart() {\n        this.currentTime = 0;\n      }\n      /**\n       * Rewind\n       * @param {Number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n       */\n\n    }, {\n      key: \"rewind\",\n      value: function rewind(seekTime) {\n        this.currentTime = this.currentTime - (is$1.number(seekTime) ? seekTime : this.config.seekTime);\n      }\n      /**\n       * Fast forward\n       * @param {Number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n       */\n\n    }, {\n      key: \"forward\",\n      value: function forward(seekTime) {\n        this.currentTime = this.currentTime + (is$1.number(seekTime) ? seekTime : this.config.seekTime);\n      }\n      /**\n       * Seek to a time\n       * @param {Number} input - where to seek to in seconds. Defaults to 0 (the start)\n       */\n\n    }, {\n      key: \"increaseVolume\",\n\n      /**\n       * Increase volume\n       * @param {Boolean} step - How much to decrease by (between 0 and 1)\n       */\n      value: function increaseVolume(step) {\n        var volume = this.media.muted ? 0 : this.volume;\n        this.volume = volume + (is$1.number(step) ? step : 0);\n      }\n      /**\n       * Decrease volume\n       * @param {Boolean} step - How much to decrease by (between 0 and 1)\n       */\n\n    }, {\n      key: \"decreaseVolume\",\n      value: function decreaseVolume(step) {\n        this.increaseVolume(-step);\n      }\n      /**\n       * Set muted state\n       * @param {Boolean} mute\n       */\n\n    }, {\n      key: \"toggleCaptions\",\n\n      /**\n       * Toggle captions\n       * @param {Boolean} input - Whether to enable captions\n       */\n      value: function toggleCaptions(input) {\n        captions.toggle.call(this, input, false);\n      }\n      /**\n       * Set the caption track by index\n       * @param {Number} - Caption index\n       */\n\n    }, {\n      key: \"airplay\",\n\n      /**\n       * Trigger the airplay dialog\n       * TODO: update player with state, support, enabled\n       */\n      value: function airplay() {\n        // Show dialog if supported\n        if (support.airplay) {\n          this.media.webkitShowPlaybackTargetPicker();\n        }\n      }\n      /**\n       * Toggle the player controls\n       * @param {Boolean} [toggle] - Whether to show the controls\n       */\n\n    }, {\n      key: \"toggleControls\",\n      value: function toggleControls(toggle) {\n        // Don't toggle if missing UI support or if it's audio\n        if (this.supported.ui && !this.isAudio) {\n          // Get state before change\n          var isHidden = hasClass(this.elements.container, this.config.classNames.hideControls); // Negate the argument if not undefined since adding the class to hides the controls\n\n          var force = typeof toggle === 'undefined' ? undefined : !toggle; // Apply and get updated state\n\n          var hiding = toggleClass(this.elements.container, this.config.classNames.hideControls, force); // Close menu\n\n          if (hiding && this.config.controls.includes('settings') && !is$1.empty(this.config.settings)) {\n            controls.toggleMenu.call(this, false);\n          } // Trigger event on change\n\n\n          if (hiding !== isHidden) {\n            var eventName = hiding ? 'controlshidden' : 'controlsshown';\n            triggerEvent.call(this, this.media, eventName);\n          }\n\n          return !hiding;\n        }\n\n        return false;\n      }\n      /**\n       * Add event listeners\n       * @param {String} event - Event type\n       * @param {Function} callback - Callback for when event occurs\n       */\n\n    }, {\n      key: \"on\",\n      value: function on$1(event, callback) {\n        on.call(this, this.elements.container, event, callback);\n      }\n      /**\n       * Add event listeners once\n       * @param {String} event - Event type\n       * @param {Function} callback - Callback for when event occurs\n       */\n\n    }, {\n      key: \"once\",\n      value: function once$1(event, callback) {\n        once.call(this, this.elements.container, event, callback);\n      }\n      /**\n       * Remove event listeners\n       * @param {String} event - Event type\n       * @param {Function} callback - Callback for when event occurs\n       */\n\n    }, {\n      key: \"off\",\n      value: function off$1(event, callback) {\n        off(this.elements.container, event, callback);\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       * @param {Function} callback - Callback for when destroy is complete\n       * @param {Boolean} soft - Whether it's a soft destroy (for source changes etc)\n       */\n\n    }, {\n      key: \"destroy\",\n      value: function destroy(callback) {\n        var _this3 = this;\n\n        var soft = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n        if (!this.ready) {\n          return;\n        }\n\n        var done = function done() {\n          // Reset overflow (incase destroyed while in fullscreen)\n          document.body.style.overflow = ''; // GC for embed\n\n          _this3.embed = null; // If it's a soft destroy, make minimal changes\n\n          if (soft) {\n            if (Object.keys(_this3.elements).length) {\n              // Remove elements\n              removeElement(_this3.elements.buttons.play);\n              removeElement(_this3.elements.captions);\n              removeElement(_this3.elements.controls);\n              removeElement(_this3.elements.wrapper); // Clear for GC\n\n              _this3.elements.buttons.play = null;\n              _this3.elements.captions = null;\n              _this3.elements.controls = null;\n              _this3.elements.wrapper = null;\n            } // Callback\n\n\n            if (is$1.function(callback)) {\n              callback();\n            }\n          } else {\n            // Unbind listeners\n            unbindListeners.call(_this3); // Replace the container with the original element provided\n\n            replaceElement(_this3.elements.original, _this3.elements.container); // Event\n\n            triggerEvent.call(_this3, _this3.elements.original, 'destroyed', true); // Callback\n\n            if (is$1.function(callback)) {\n              callback.call(_this3.elements.original);\n            } // Reset state\n\n\n            _this3.ready = false; // Clear for garbage collection\n\n            setTimeout(function () {\n              _this3.elements = null;\n              _this3.media = null;\n            }, 200);\n          }\n        }; // Stop playback\n\n\n        this.stop(); // Clear timeouts\n\n        clearTimeout(this.timers.loading);\n        clearTimeout(this.timers.controls);\n        clearTimeout(this.timers.resized); // Provider specific stuff\n\n        if (this.isHTML5) {\n          // Restore native video controls\n          ui.toggleNativeControls.call(this, true); // Clean up\n\n          done();\n        } else if (this.isYouTube) {\n          // Clear timers\n          clearInterval(this.timers.buffering);\n          clearInterval(this.timers.playing); // Destroy YouTube API\n\n          if (this.embed !== null && is$1.function(this.embed.destroy)) {\n            this.embed.destroy();\n          } // Clean up\n\n\n          done();\n        } else if (this.isVimeo) {\n          // Destroy Vimeo API\n          // then clean up (wait, to prevent postmessage errors)\n          if (this.embed !== null) {\n            this.embed.unload().then(done);\n          } // Vimeo does not always return\n\n\n          setTimeout(done, 200);\n        }\n      }\n      /**\n       * Check for support for a mime type (HTML5 only)\n       * @param {String} type - Mime type\n       */\n\n    }, {\n      key: \"supports\",\n      value: function supports(type) {\n        return support.mime.call(this, type);\n      }\n      /**\n       * Check for support\n       * @param {String} type - Player type (audio/video)\n       * @param {String} provider - Provider (html5/youtube/vimeo)\n       * @param {Boolean} inline - Where player has `playsinline` sttribute\n       */\n\n    }, {\n      key: \"isHTML5\",\n      get: function get() {\n        return Boolean(this.provider === providers.html5);\n      }\n    }, {\n      key: \"isEmbed\",\n      get: function get() {\n        return Boolean(this.isYouTube || this.isVimeo);\n      }\n    }, {\n      key: \"isYouTube\",\n      get: function get() {\n        return Boolean(this.provider === providers.youtube);\n      }\n    }, {\n      key: \"isVimeo\",\n      get: function get() {\n        return Boolean(this.provider === providers.vimeo);\n      }\n    }, {\n      key: \"isVideo\",\n      get: function get() {\n        return Boolean(this.type === types.video);\n      }\n    }, {\n      key: \"isAudio\",\n      get: function get() {\n        return Boolean(this.type === types.audio);\n      }\n    }, {\n      key: \"playing\",\n      get: function get() {\n        return Boolean(this.ready && !this.paused && !this.ended);\n      }\n      /**\n       * Get paused state\n       */\n\n    }, {\n      key: \"paused\",\n      get: function get() {\n        return Boolean(this.media.paused);\n      }\n      /**\n       * Get stopped state\n       */\n\n    }, {\n      key: \"stopped\",\n      get: function get() {\n        return Boolean(this.paused && this.currentTime === 0);\n      }\n      /**\n       * Get ended state\n       */\n\n    }, {\n      key: \"ended\",\n      get: function get() {\n        return Boolean(this.media.ended);\n      }\n    }, {\n      key: \"currentTime\",\n      set: function set(input) {\n        // Bail if media duration isn't available yet\n        if (!this.duration) {\n          return;\n        } // Validate input\n\n\n        var inputIsValid = is$1.number(input) && input > 0; // Set\n\n        this.media.currentTime = inputIsValid ? Math.min(input, this.duration) : 0; // Logging\n\n        this.debug.log(\"Seeking to \".concat(this.currentTime, \" seconds\"));\n      }\n      /**\n       * Get current time\n       */\n      ,\n      get: function get() {\n        return Number(this.media.currentTime);\n      }\n      /**\n       * Get buffered\n       */\n\n    }, {\n      key: \"buffered\",\n      get: function get() {\n        var buffered = this.media.buffered; // YouTube / Vimeo return a float between 0-1\n\n        if (is$1.number(buffered)) {\n          return buffered;\n        } // HTML5\n        // TODO: Handle buffered chunks of the media\n        // (i.e. seek to another section buffers only that section)\n\n\n        if (buffered && buffered.length && this.duration > 0) {\n          return buffered.end(0) / this.duration;\n        }\n\n        return 0;\n      }\n      /**\n       * Get seeking status\n       */\n\n    }, {\n      key: \"seeking\",\n      get: function get() {\n        return Boolean(this.media.seeking);\n      }\n      /**\n       * Get the duration of the current media\n       */\n\n    }, {\n      key: \"duration\",\n      get: function get() {\n        // Faux duration set via config\n        var fauxDuration = parseFloat(this.config.duration); // Media duration can be NaN or Infinity before the media has loaded\n\n        var realDuration = (this.media || {}).duration;\n        var duration = !is$1.number(realDuration) || realDuration === Infinity ? 0 : realDuration; // If config duration is funky, use regular duration\n\n        return fauxDuration || duration;\n      }\n      /**\n       * Set the player volume\n       * @param {Number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n       */\n\n    }, {\n      key: \"volume\",\n      set: function set(value) {\n        var volume = value;\n        var max = 1;\n        var min = 0;\n\n        if (is$1.string(volume)) {\n          volume = Number(volume);\n        } // Load volume from storage if no value specified\n\n\n        if (!is$1.number(volume)) {\n          volume = this.storage.get('volume');\n        } // Use config if all else fails\n\n\n        if (!is$1.number(volume)) {\n          volume = this.config.volume;\n        } // Maximum is volumeMax\n\n\n        if (volume > max) {\n          volume = max;\n        } // Minimum is volumeMin\n\n\n        if (volume < min) {\n          volume = min;\n        } // Update config\n\n\n        this.config.volume = volume; // Set the player volume\n\n        this.media.volume = volume; // If muted, and we're increasing volume manually, reset muted state\n\n        if (!is$1.empty(value) && this.muted && volume > 0) {\n          this.muted = false;\n        }\n      }\n      /**\n       * Get the current player volume\n       */\n      ,\n      get: function get() {\n        return Number(this.media.volume);\n      }\n    }, {\n      key: \"muted\",\n      set: function set(mute) {\n        var toggle = mute; // Load muted state from storage\n\n        if (!is$1.boolean(toggle)) {\n          toggle = this.storage.get('muted');\n        } // Use config if all else fails\n\n\n        if (!is$1.boolean(toggle)) {\n          toggle = this.config.muted;\n        } // Update config\n\n\n        this.config.muted = toggle; // Set mute on the player\n\n        this.media.muted = toggle;\n      }\n      /**\n       * Get current muted state\n       */\n      ,\n      get: function get() {\n        return Boolean(this.media.muted);\n      }\n      /**\n       * Check if the media has audio\n       */\n\n    }, {\n      key: \"hasAudio\",\n      get: function get() {\n        // Assume yes for all non HTML5 (as we can't tell...)\n        if (!this.isHTML5) {\n          return true;\n        }\n\n        if (this.isAudio) {\n          return true;\n        } // Get audio tracks\n\n\n        return Boolean(this.media.mozHasAudio) || Boolean(this.media.webkitAudioDecodedByteCount) || Boolean(this.media.audioTracks && this.media.audioTracks.length);\n      }\n      /**\n       * Set playback speed\n       * @param {Number} speed - the speed of playback (0.5-2.0)\n       */\n\n    }, {\n      key: \"speed\",\n      set: function set(input) {\n        var _this4 = this;\n\n        var speed = null;\n\n        if (is$1.number(input)) {\n          speed = input;\n        }\n\n        if (!is$1.number(speed)) {\n          speed = this.storage.get('speed');\n        }\n\n        if (!is$1.number(speed)) {\n          speed = this.config.speed.selected;\n        } // Clamp to min/max\n\n\n        var min = this.minimumSpeed,\n            max = this.maximumSpeed;\n        speed = clamp(speed, min, max); // Update config\n\n        this.config.speed.selected = speed; // Set media speed\n\n        setTimeout(function () {\n          _this4.media.playbackRate = speed;\n        }, 0);\n      }\n      /**\n       * Get current playback speed\n       */\n      ,\n      get: function get() {\n        return Number(this.media.playbackRate);\n      }\n      /**\n       * Get the minimum allowed speed\n       */\n\n    }, {\n      key: \"minimumSpeed\",\n      get: function get() {\n        if (this.isYouTube) {\n          // https://developers.google.com/youtube/iframe_api_reference#setPlaybackRate\n          return Math.min.apply(Math, _toConsumableArray(this.options.speed));\n        }\n\n        if (this.isVimeo) {\n          // https://github.com/vimeo/player.js/#setplaybackrateplaybackrate-number-promisenumber-rangeerrorerror\n          return 0.5;\n        } // https://stackoverflow.com/a/32320020/1191319\n\n\n        return 0.0625;\n      }\n      /**\n       * Get the maximum allowed speed\n       */\n\n    }, {\n      key: \"maximumSpeed\",\n      get: function get() {\n        if (this.isYouTube) {\n          // https://developers.google.com/youtube/iframe_api_reference#setPlaybackRate\n          return Math.max.apply(Math, _toConsumableArray(this.options.speed));\n        }\n\n        if (this.isVimeo) {\n          // https://github.com/vimeo/player.js/#setplaybackrateplaybackrate-number-promisenumber-rangeerrorerror\n          return 2;\n        } // https://stackoverflow.com/a/32320020/1191319\n\n\n        return 16;\n      }\n      /**\n       * Set playback quality\n       * Currently HTML5 & YouTube only\n       * @param {Number} input - Quality level\n       */\n\n    }, {\n      key: \"quality\",\n      set: function set(input) {\n        var config = this.config.quality;\n        var options = this.options.quality;\n\n        if (!options.length) {\n          return;\n        }\n\n        var quality = [!is$1.empty(input) && Number(input), this.storage.get('quality'), config.selected, config.default].find(is$1.number);\n        var updateStorage = true;\n\n        if (!options.includes(quality)) {\n          var value = closest(options, quality);\n          this.debug.warn(\"Unsupported quality option: \".concat(quality, \", using \").concat(value, \" instead\"));\n          quality = value; // Don't update storage if quality is not supported\n\n          updateStorage = false;\n        } // Update config\n\n\n        config.selected = quality; // Set quality\n\n        this.media.quality = quality; // Save to storage\n\n        if (updateStorage) {\n          this.storage.set({\n            quality: quality\n          });\n        }\n      }\n      /**\n       * Get current quality level\n       */\n      ,\n      get: function get() {\n        return this.media.quality;\n      }\n      /**\n       * Toggle loop\n       * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n       * @param {Boolean} input - Whether to loop or not\n       */\n\n    }, {\n      key: \"loop\",\n      set: function set(input) {\n        var toggle = is$1.boolean(input) ? input : this.config.loop.active;\n        this.config.loop.active = toggle;\n        this.media.loop = toggle; // Set default to be a true toggle\n\n        /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n         switch (type) {\n            case 'start':\n                if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n                    this.config.loop.end = null;\n                }\n                this.config.loop.start = this.currentTime;\n                // this.config.loop.indicator.start = this.elements.display.played.value;\n                break;\n             case 'end':\n                if (this.config.loop.start >= this.currentTime) {\n                    return this;\n                }\n                this.config.loop.end = this.currentTime;\n                // this.config.loop.indicator.end = this.elements.display.played.value;\n                break;\n             case 'all':\n                this.config.loop.start = 0;\n                this.config.loop.end = this.duration - 2;\n                this.config.loop.indicator.start = 0;\n                this.config.loop.indicator.end = 100;\n                break;\n             case 'toggle':\n                if (this.config.loop.active) {\n                    this.config.loop.start = 0;\n                    this.config.loop.end = null;\n                } else {\n                    this.config.loop.start = 0;\n                    this.config.loop.end = this.duration - 2;\n                }\n                break;\n             default:\n                this.config.loop.start = 0;\n                this.config.loop.end = null;\n                break;\n        } */\n      }\n      /**\n       * Get current loop state\n       */\n      ,\n      get: function get() {\n        return Boolean(this.media.loop);\n      }\n      /**\n       * Set new media source\n       * @param {Object} input - The new source object (see docs)\n       */\n\n    }, {\n      key: \"source\",\n      set: function set(input) {\n        source.change.call(this, input);\n      }\n      /**\n       * Get current source\n       */\n      ,\n      get: function get() {\n        return this.media.currentSrc;\n      }\n      /**\n       * Get a download URL (either source or custom)\n       */\n\n    }, {\n      key: \"download\",\n      get: function get() {\n        var download = this.config.urls.download;\n        return is$1.url(download) ? download : this.source;\n      }\n      /**\n       * Set the download URL\n       */\n      ,\n      set: function set(input) {\n        if (!is$1.url(input)) {\n          return;\n        }\n\n        this.config.urls.download = input;\n        controls.setDownloadUrl.call(this);\n      }\n      /**\n       * Set the poster image for a video\n       * @param {String} input - the URL for the new poster image\n       */\n\n    }, {\n      key: \"poster\",\n      set: function set(input) {\n        if (!this.isVideo) {\n          this.debug.warn('Poster can only be set for video');\n          return;\n        }\n\n        ui.setPoster.call(this, input, false).catch(function () {});\n      }\n      /**\n       * Get the current poster image\n       */\n      ,\n      get: function get() {\n        if (!this.isVideo) {\n          return null;\n        }\n\n        return this.media.getAttribute('poster');\n      }\n      /**\n       * Get the current aspect ratio in use\n       */\n\n    }, {\n      key: \"ratio\",\n      get: function get() {\n        if (!this.isVideo) {\n          return null;\n        }\n\n        var ratio = reduceAspectRatio(getAspectRatio.call(this));\n        return is$1.array(ratio) ? ratio.join(':') : ratio;\n      }\n      /**\n       * Set video aspect ratio\n       */\n      ,\n      set: function set(input) {\n        if (!this.isVideo) {\n          this.debug.warn('Aspect ratio can only be set for video');\n          return;\n        }\n\n        if (!is$1.string(input) || !validateRatio(input)) {\n          this.debug.error(\"Invalid aspect ratio specified (\".concat(input, \")\"));\n          return;\n        }\n\n        this.config.ratio = input;\n        setAspectRatio.call(this);\n      }\n      /**\n       * Set the autoplay state\n       * @param {Boolean} input - Whether to autoplay or not\n       */\n\n    }, {\n      key: \"autoplay\",\n      set: function set(input) {\n        var toggle = is$1.boolean(input) ? input : this.config.autoplay;\n        this.config.autoplay = toggle;\n      }\n      /**\n       * Get the current autoplay state\n       */\n      ,\n      get: function get() {\n        return Boolean(this.config.autoplay);\n      }\n    }, {\n      key: \"currentTrack\",\n      set: function set(input) {\n        captions.set.call(this, input, false);\n      }\n      /**\n       * Get the current caption track index (-1 if disabled)\n       */\n      ,\n      get: function get() {\n        var _this$captions = this.captions,\n            toggled = _this$captions.toggled,\n            currentTrack = _this$captions.currentTrack;\n        return toggled ? currentTrack : -1;\n      }\n      /**\n       * Set the wanted language for captions\n       * Since tracks can be added later it won't update the actual caption track until there is a matching track\n       * @param {String} - Two character ISO language code (e.g. EN, FR, PT, etc)\n       */\n\n    }, {\n      key: \"language\",\n      set: function set(input) {\n        captions.setLanguage.call(this, input, false);\n      }\n      /**\n       * Get the current track's language\n       */\n      ,\n      get: function get() {\n        return (captions.getCurrentTrack.call(this) || {}).language;\n      }\n      /**\n       * Toggle picture-in-picture playback on WebKit/MacOS\n       * TODO: update player with state, support, enabled\n       * TODO: detect outside changes\n       */\n\n    }, {\n      key: \"pip\",\n      set: function set(input) {\n        // Bail if no support\n        if (!support.pip) {\n          return;\n        } // Toggle based on current state if not passed\n\n\n        var toggle = is$1.boolean(input) ? input : !this.pip; // Toggle based on current state\n        // Safari\n\n        if (is$1.function(this.media.webkitSetPresentationMode)) {\n          this.media.webkitSetPresentationMode(toggle ? pip.active : pip.inactive);\n        } // Chrome\n\n\n        if (is$1.function(this.media.requestPictureInPicture)) {\n          if (!this.pip && toggle) {\n            this.media.requestPictureInPicture();\n          } else if (this.pip && !toggle) {\n            document.exitPictureInPicture();\n          }\n        }\n      }\n      /**\n       * Get the current picture-in-picture state\n       */\n      ,\n      get: function get() {\n        if (!support.pip) {\n          return null;\n        } // Safari\n\n\n        if (!is$1.empty(this.media.webkitPresentationMode)) {\n          return this.media.webkitPresentationMode === pip.active;\n        } // Chrome\n\n\n        return this.media === document.pictureInPictureElement;\n      }\n    }], [{\n      key: \"supported\",\n      value: function supported(type, provider, inline) {\n        return support.check(type, provider, inline);\n      }\n      /**\n       * Load an SVG sprite into the page\n       * @param {String} url - URL for the SVG sprite\n       * @param {String} [id] - Unique ID\n       */\n\n    }, {\n      key: \"loadSprite\",\n      value: function loadSprite$1(url, id) {\n        return loadSprite(url, id);\n      }\n      /**\n       * Setup multiple instances\n       * @param {*} selector\n       * @param {Object} options\n       */\n\n    }, {\n      key: \"setup\",\n      value: function setup(selector) {\n        var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n        var targets = null;\n\n        if (is$1.string(selector)) {\n          targets = Array.from(document.querySelectorAll(selector));\n        } else if (is$1.nodeList(selector)) {\n          targets = Array.from(selector);\n        } else if (is$1.array(selector)) {\n          targets = selector.filter(is$1.element);\n        }\n\n        if (is$1.empty(targets)) {\n          return null;\n        }\n\n        return targets.map(function (t) {\n          return new Plyr(t, options);\n        });\n      }\n    }]);\n\n    return Plyr;\n  }();\n\n  Plyr.defaults = cloneDeep(defaults$1);\n\n  return Plyr;\n\n}));\n"
  },
  {
    "path": "public/backend/vendors/js/media/plyr.polyfilled.js",
    "content": "\"object\"==typeof navigator&&function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(\"Plyr\",t):e.Plyr=t()}(this,function(){\"use strict\";var e=\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:{};function t(e,t){return e(t={exports:{}},t.exports),t.exports}var n=t(function(e){var t=e.exports=\"undefined\"!=typeof window&&window.Math==Math?window:\"undefined\"!=typeof self&&self.Math==Math?self:Function(\"return this\")();\"number\"==typeof __g&&(__g=t)}),i=t(function(e){var t=e.exports={version:\"2.5.3\"};\"number\"==typeof __e&&(__e=t)}),r=(i.version,function(e){return\"object\"==typeof e?null!==e:\"function\"==typeof e}),o=function(e){if(!r(e))throw TypeError(e+\" is not an object!\");return e},a=function(e){try{return!!e()}catch(e){return!0}},s=!a(function(){return 7!=Object.defineProperty({},\"a\",{get:function(){return 7}}).a}),l=n.document,c=r(l)&&r(l.createElement),u=function(e){return c?l.createElement(e):{}},f=!s&&!a(function(){return 7!=Object.defineProperty(u(\"div\"),\"a\",{get:function(){return 7}}).a}),d=function(e,t){if(!r(e))return e;var n,i;if(t&&\"function\"==typeof(n=e.toString)&&!r(i=n.call(e)))return i;if(\"function\"==typeof(n=e.valueOf)&&!r(i=n.call(e)))return i;if(!t&&\"function\"==typeof(n=e.toString)&&!r(i=n.call(e)))return i;throw TypeError(\"Can't convert object to primitive value\")},h=Object.defineProperty,p={f:s?Object.defineProperty:function(e,t,n){if(o(e),t=d(t,!0),o(n),f)try{return h(e,t,n)}catch(e){}if(\"get\"in n||\"set\"in n)throw TypeError(\"Accessors not supported!\");return\"value\"in n&&(e[t]=n.value),e}},g=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},m=s?function(e,t,n){return p.f(e,t,g(1,n))}:function(e,t,n){return e[t]=n,e},y={}.hasOwnProperty,v=function(e,t){return y.call(e,t)},b=0,w=Math.random(),E=function(e){return\"Symbol(\".concat(void 0===e?\"\":e,\")_\",(++b+w).toString(36))},k=t(function(e){var t=E(\"src\"),r=Function.toString,o=(\"\"+r).split(\"toString\");i.inspectSource=function(e){return r.call(e)},(e.exports=function(e,i,r,a){var s=\"function\"==typeof r;s&&(v(r,\"name\")||m(r,\"name\",i)),e[i]!==r&&(s&&(v(r,t)||m(r,t,e[i]?\"\"+e[i]:o.join(String(i)))),e===n?e[i]=r:a?e[i]?e[i]=r:m(e,i,r):(delete e[i],m(e,i,r)))})(Function.prototype,\"toString\",function(){return\"function\"==typeof this&&this[t]||r.call(this)})}),T=function(e){if(\"function\"!=typeof e)throw TypeError(e+\" is not a function!\");return e},S=function(e,t,n){if(T(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,i){return e.call(t,n,i)};case 3:return function(n,i,r){return e.call(t,n,i,r)}}return function(){return e.apply(t,arguments)}},A=function(e,t,r){var o,a,s,l,c=e&A.F,u=e&A.G,f=e&A.S,d=e&A.P,h=e&A.B,p=u?n:f?n[t]||(n[t]={}):(n[t]||{}).prototype,g=u?i:i[t]||(i[t]={}),y=g.prototype||(g.prototype={});for(o in u&&(r=t),r)s=((a=!c&&p&&void 0!==p[o])?p:r)[o],l=h&&a?S(s,n):d&&\"function\"==typeof s?S(Function.call,s):s,p&&k(p,o,s,e&A.U),g[o]!=s&&m(g,o,l),d&&y[o]!=s&&(y[o]=s)};n.core=i,A.F=1,A.G=2,A.S=4,A.P=8,A.B=16,A.W=32,A.U=64,A.R=128;for(var _,C=A,P=E(\"typed_array\"),M=E(\"view\"),x=!(!n.ArrayBuffer||!n.DataView),L=x,O=0,N=\"Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array\".split(\",\");O<9;)(_=n[N[O++]])?(m(_.prototype,P,!0),m(_.prototype,M,!0)):L=!1;var j={ABV:x,CONSTR:L,TYPED:P,VIEW:M},I=function(e,t,n){for(var i in t)k(e,i,t[i],n);return e},F=function(e,t,n,i){if(!(e instanceof t)||void 0!==i&&i in e)throw TypeError(n+\": incorrect invocation!\");return e},R=Math.ceil,q=Math.floor,B=function(e){return isNaN(e=+e)?0:(e>0?q:R)(e)},U=Math.min,V=function(e){return e>0?U(B(e),9007199254740991):0},D=function(e){if(void 0===e)return 0;var t=B(e),n=V(t);if(t!==n)throw RangeError(\"Wrong length!\");return n},H={}.toString,W=function(e){return H.call(e).slice(8,-1)},z=Object(\"z\").propertyIsEnumerable(0)?Object:function(e){return\"String\"==W(e)?e.split(\"\"):Object(e)},G=function(e){if(null==e)throw TypeError(\"Can't call method on  \"+e);return e},Y=function(e){return z(G(e))},K=Math.max,Q=Math.min,J=function(e,t){return(e=B(e))<0?K(e+t,0):Q(e,t)},$=function(e){return function(t,n,i){var r,o=Y(t),a=V(o.length),s=J(i,a);if(e&&n!=n){for(;a>s;)if((r=o[s++])!=r)return!0}else for(;a>s;s++)if((e||s in o)&&o[s]===n)return e||s||0;return!e&&-1}},X=n[\"__core-js_shared__\"]||(n[\"__core-js_shared__\"]={}),Z=function(e){return X[e]||(X[e]={})},ee=Z(\"keys\"),te=function(e){return ee[e]||(ee[e]=E(e))},ne=$(!1),ie=te(\"IE_PROTO\"),re=function(e,t){var n,i=Y(e),r=0,o=[];for(n in i)n!=ie&&v(i,n)&&o.push(n);for(;t.length>r;)v(i,n=t[r++])&&(~ne(o,n)||o.push(n));return o},oe=\"constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf\".split(\",\"),ae=oe.concat(\"length\",\"prototype\"),se={f:Object.getOwnPropertyNames||function(e){return re(e,ae)}},le=function(e){return Object(G(e))},ce=function(e){for(var t=le(this),n=V(t.length),i=arguments.length,r=J(i>1?arguments[1]:void 0,n),o=i>2?arguments[2]:void 0,a=void 0===o?n:J(o,n);a>r;)t[r++]=e;return t},ue=t(function(e){var t=Z(\"wks\"),i=n.Symbol,r=\"function\"==typeof i;(e.exports=function(e){return t[e]||(t[e]=r&&i[e]||(r?i:E)(\"Symbol.\"+e))}).store=t}),fe=p.f,de=ue(\"toStringTag\"),he=function(e,t,n){e&&!v(e=n?e:e.prototype,de)&&fe(e,de,{configurable:!0,value:t})},pe=t(function(e,t){var i=se.f,r=p.f,o=\"prototype\",l=\"Wrong index!\",c=n.ArrayBuffer,u=n.DataView,f=n.Math,d=n.RangeError,h=n.Infinity,g=c,y=f.abs,v=f.pow,b=f.floor,w=f.log,E=f.LN2,k=s?\"_b\":\"buffer\",T=s?\"_l\":\"byteLength\",S=s?\"_o\":\"byteOffset\";function A(e,t,n){var i,r,o,a=new Array(n),s=8*n-t-1,l=(1<<s)-1,c=l>>1,u=23===t?v(2,-24)-v(2,-77):0,f=0,d=e<0||0===e&&1/e<0?1:0;for((e=y(e))!=e||e===h?(r=e!=e?1:0,i=l):(i=b(w(e)/E),e*(o=v(2,-i))<1&&(i--,o*=2),(e+=i+c>=1?u/o:u*v(2,1-c))*o>=2&&(i++,o/=2),i+c>=l?(r=0,i=l):i+c>=1?(r=(e*o-1)*v(2,t),i+=c):(r=e*v(2,c-1)*v(2,t),i=0));t>=8;a[f++]=255&r,r/=256,t-=8);for(i=i<<t|r,s+=t;s>0;a[f++]=255&i,i/=256,s-=8);return a[--f]|=128*d,a}function _(e,t,n){var i,r=8*n-t-1,o=(1<<r)-1,a=o>>1,s=r-7,l=n-1,c=e[l--],u=127&c;for(c>>=7;s>0;u=256*u+e[l],l--,s-=8);for(i=u&(1<<-s)-1,u>>=-s,s+=t;s>0;i=256*i+e[l],l--,s-=8);if(0===u)u=1-a;else{if(u===o)return i?NaN:c?-h:h;i+=v(2,t),u-=a}return(c?-1:1)*i*v(2,u-t)}function C(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]}function P(e){return[255&e]}function M(e){return[255&e,e>>8&255]}function x(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]}function L(e){return A(e,52,8)}function O(e){return A(e,23,4)}function N(e,t,n){r(e[o],t,{get:function(){return this[n]}})}function R(e,t,n,i){var r=D(+n);if(r+t>e[T])throw d(l);var o=e[k]._b,a=r+e[S],s=o.slice(a,a+t);return i?s:s.reverse()}function q(e,t,n,i,r,o){var a=D(+n);if(a+t>e[T])throw d(l);for(var s=e[k]._b,c=a+e[S],u=i(+r),f=0;f<t;f++)s[c+f]=u[o?f:t-f-1]}if(j.ABV){if(!a(function(){c(1)})||!a(function(){new c(-1)})||a(function(){return new c,new c(1.5),new c(NaN),\"ArrayBuffer\"!=c.name})){for(var U,H=(c=function(e){return F(this,c),new g(D(e))})[o]=g[o],W=i(g),z=0;W.length>z;)(U=W[z++])in c||m(c,U,g[U]);H.constructor=c}var G=new u(new c(2)),Y=u[o].setInt8;G.setInt8(0,2147483648),G.setInt8(1,2147483649),!G.getInt8(0)&&G.getInt8(1)||I(u[o],{setInt8:function(e,t){Y.call(this,e,t<<24>>24)},setUint8:function(e,t){Y.call(this,e,t<<24>>24)}},!0)}else c=function(e){F(this,c,\"ArrayBuffer\");var t=D(e);this._b=ce.call(new Array(t),0),this[T]=t},u=function(e,t,n){F(this,u,\"DataView\"),F(e,c,\"DataView\");var i=e[T],r=B(t);if(r<0||r>i)throw d(\"Wrong offset!\");if(r+(n=void 0===n?i-r:V(n))>i)throw d(\"Wrong length!\");this[k]=e,this[S]=r,this[T]=n},s&&(N(c,\"byteLength\",\"_l\"),N(u,\"buffer\",\"_b\"),N(u,\"byteLength\",\"_l\"),N(u,\"byteOffset\",\"_o\")),I(u[o],{getInt8:function(e){return R(this,1,e)[0]<<24>>24},getUint8:function(e){return R(this,1,e)[0]},getInt16:function(e){var t=R(this,2,e,arguments[1]);return(t[1]<<8|t[0])<<16>>16},getUint16:function(e){var t=R(this,2,e,arguments[1]);return t[1]<<8|t[0]},getInt32:function(e){return C(R(this,4,e,arguments[1]))},getUint32:function(e){return C(R(this,4,e,arguments[1]))>>>0},getFloat32:function(e){return _(R(this,4,e,arguments[1]),23,4)},getFloat64:function(e){return _(R(this,8,e,arguments[1]),52,8)},setInt8:function(e,t){q(this,1,e,P,t)},setUint8:function(e,t){q(this,1,e,P,t)},setInt16:function(e,t){q(this,2,e,M,t,arguments[2])},setUint16:function(e,t){q(this,2,e,M,t,arguments[2])},setInt32:function(e,t){q(this,4,e,x,t,arguments[2])},setUint32:function(e,t){q(this,4,e,x,t,arguments[2])},setFloat32:function(e,t){q(this,4,e,O,t,arguments[2])},setFloat64:function(e,t){q(this,8,e,L,t,arguments[2])}});he(c,\"ArrayBuffer\"),he(u,\"DataView\"),m(u[o],j.VIEW,!0),t.ArrayBuffer=c,t.DataView=u}),ge=ue(\"species\"),me=function(e,t){var n,i=o(e).constructor;return void 0===i||null==(n=o(i)[ge])?t:T(n)},ye=ue(\"species\"),ve=function(e){var t=n[e];s&&t&&!t[ye]&&p.f(t,ye,{configurable:!0,get:function(){return this}})},be=n.ArrayBuffer,we=pe.ArrayBuffer,Ee=pe.DataView,ke=j.ABV&&be.isView,Te=we.prototype.slice,Se=j.VIEW;C(C.G+C.W+C.F*(be!==we),{ArrayBuffer:we}),C(C.S+C.F*!j.CONSTR,\"ArrayBuffer\",{isView:function(e){return ke&&ke(e)||r(e)&&Se in e}}),C(C.P+C.U+C.F*a(function(){return!new we(2).slice(1,void 0).byteLength}),\"ArrayBuffer\",{slice:function(e,t){if(void 0!==Te&&void 0===t)return Te.call(o(this),e);for(var n=o(this).byteLength,i=J(e,n),r=J(void 0===t?n:t,n),a=new(me(this,we))(V(r-i)),s=new Ee(this),l=new Ee(a),c=0;i<r;)l.setUint8(c++,s.getUint8(i++));return a}}),ve(\"ArrayBuffer\");var Ae=ue(\"toStringTag\"),_e=\"Arguments\"==W(function(){return arguments}()),Ce=function(e){var t,n,i;return void 0===e?\"Undefined\":null===e?\"Null\":\"string\"==typeof(n=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),Ae))?n:_e?W(t):\"Object\"==(i=W(t))&&\"function\"==typeof t.callee?\"Arguments\":i},Pe={},Me=ue(\"iterator\"),xe=Array.prototype,Le=function(e){return void 0!==e&&(Pe.Array===e||xe[Me]===e)},Oe=Object.keys||function(e){return re(e,oe)},Ne=s?Object.defineProperties:function(e,t){o(e);for(var n,i=Oe(t),r=i.length,a=0;r>a;)p.f(e,n=i[a++],t[n]);return e},je=n.document,Ie=je&&je.documentElement,Fe=te(\"IE_PROTO\"),Re=function(){},qe=function(){var e,t=u(\"iframe\"),n=oe.length;for(t.style.display=\"none\",Ie.appendChild(t),t.src=\"javascript:\",(e=t.contentWindow.document).open(),e.write(\"<script>document.F=Object<\\/script>\"),e.close(),qe=e.F;n--;)delete qe.prototype[oe[n]];return qe()},Be=Object.create||function(e,t){var n;return null!==e?(Re.prototype=o(e),n=new Re,Re.prototype=null,n[Fe]=e):n=qe(),void 0===t?n:Ne(n,t)},Ue=te(\"IE_PROTO\"),Ve=Object.prototype,De=Object.getPrototypeOf||function(e){return e=le(e),v(e,Ue)?e[Ue]:\"function\"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?Ve:null},He=ue(\"iterator\"),We=i.getIteratorMethod=function(e){if(null!=e)return e[He]||e[\"@@iterator\"]||Pe[Ce(e)]},ze=Array.isArray||function(e){return\"Array\"==W(e)},Ge=ue(\"species\"),Ye=function(e,t){return new(function(e){var t;return ze(e)&&(\"function\"!=typeof(t=e.constructor)||t!==Array&&!ze(t.prototype)||(t=void 0),r(t)&&null===(t=t[Ge])&&(t=void 0)),void 0===t?Array:t}(e))(t)},Ke=function(e,t){var n=1==e,i=2==e,r=3==e,o=4==e,a=6==e,s=5==e||a,l=t||Ye;return function(t,c,u){for(var f,d,h=le(t),p=z(h),g=S(c,u,3),m=V(p.length),y=0,v=n?l(t,m):i?l(t,0):void 0;m>y;y++)if((s||y in p)&&(d=g(f=p[y],y,h),e))if(n)v[y]=d;else if(d)switch(e){case 3:return!0;case 5:return f;case 6:return y;case 2:v.push(f)}else if(o)return!1;return a?-1:r||o?o:v}},Qe=ue(\"unscopables\"),Je=Array.prototype;null==Je[Qe]&&m(Je,Qe,{});var $e=function(e){Je[Qe][e]=!0},Xe=function(e,t){return{value:t,done:!!e}},Ze={};m(Ze,ue(\"iterator\"),function(){return this});var et=function(e,t,n){e.prototype=Be(Ze,{next:g(1,n)}),he(e,t+\" Iterator\")},tt=ue(\"iterator\"),nt=!([].keys&&\"next\"in[].keys()),it=function(){return this},rt=function(e,t,n,i,r,o,a){et(n,t,i);var s,l,c,u=function(e){if(!nt&&e in p)return p[e];switch(e){case\"keys\":case\"values\":return function(){return new n(this,e)}}return function(){return new n(this,e)}},f=t+\" Iterator\",d=\"values\"==r,h=!1,p=e.prototype,g=p[tt]||p[\"@@iterator\"]||r&&p[r],y=!nt&&g||u(r),b=r?d?u(\"entries\"):y:void 0,w=\"Array\"==t&&p.entries||g;if(w&&(c=De(w.call(new e)))!==Object.prototype&&c.next&&(he(c,f,!0),v(c,tt)||m(c,tt,it)),d&&g&&\"values\"!==g.name&&(h=!0,y=function(){return g.call(this)}),(nt||h||!p[tt])&&m(p,tt,y),Pe[t]=y,Pe[f]=it,r)if(s={values:d?y:u(\"values\"),keys:o?y:u(\"keys\"),entries:b},a)for(l in s)l in p||k(p,l,s[l]);else C(C.P+C.F*(nt||h),t,s);return s},ot=rt(Array,\"Array\",function(e,t){this._t=Y(e),this._i=0,this._k=t},function(){var e=this._t,t=this._k,n=this._i++;return!e||n>=e.length?(this._t=void 0,Xe(1)):Xe(0,\"keys\"==t?n:\"values\"==t?e[n]:[n,e[n]])},\"values\");Pe.Arguments=Pe.Array,$e(\"keys\"),$e(\"values\"),$e(\"entries\");var at=ue(\"iterator\"),st=!1;try{[7][at]().return=function(){st=!0}}catch(e){}var lt=function(e,t){if(!t&&!st)return!1;var n=!1;try{var i=[7],r=i[at]();r.next=function(){return{done:n=!0}},i[at]=function(){return r},e(i)}catch(e){}return n},ct=[].copyWithin||function(e,t){var n=le(this),i=V(n.length),r=J(e,i),o=J(t,i),a=arguments.length>2?arguments[2]:void 0,s=Math.min((void 0===a?i:J(a,i))-o,i-r),l=1;for(o<r&&r<o+s&&(l=-1,o+=s-1,r+=s-1);s-- >0;)o in n?n[r]=n[o]:delete n[r],r+=l,o+=l;return n},ut={f:{}.propertyIsEnumerable},ft=Object.getOwnPropertyDescriptor,dt={f:s?ft:function(e,t){if(e=Y(e),t=d(t,!0),f)try{return ft(e,t)}catch(e){}if(v(e,t))return g(!ut.f.call(e,t),e[t])}},ht=t(function(e){if(s){var t=n,i=a,o=C,l=j,c=pe,u=S,f=F,h=g,y=m,b=I,w=B,k=V,T=D,A=J,_=d,P=v,M=Ce,x=r,L=le,O=Le,N=Be,R=De,q=se.f,U=We,H=E,W=ue,z=Ke,G=$,Y=me,K=ot,Q=Pe,X=lt,Z=ve,ee=ce,te=ct,ne=p,ie=dt,re=ne.f,oe=ie.f,ae=t.RangeError,fe=t.TypeError,de=t.Uint8Array,he=Array.prototype,ge=c.ArrayBuffer,ye=c.DataView,be=z(0),we=z(2),Ee=z(3),ke=z(4),Te=z(5),Se=z(6),Ae=G(!0),_e=G(!1),Me=K.values,xe=K.keys,Oe=K.entries,Ne=he.lastIndexOf,je=he.reduce,Ie=he.reduceRight,Fe=he.join,Re=he.sort,qe=he.slice,Ue=he.toString,Ve=he.toLocaleString,He=W(\"iterator\"),ze=W(\"toStringTag\"),Ge=H(\"typed_constructor\"),Ye=H(\"def_constructor\"),Qe=l.CONSTR,Je=l.TYPED,$e=l.VIEW,Xe=z(1,function(e,t){return it(Y(e,e[Ye]),t)}),Ze=i(function(){return 1===new de(new Uint16Array([1]).buffer)[0]}),et=!!de&&!!de.prototype.set&&i(function(){new de(1).set({})}),tt=function(e,t){var n=w(e);if(n<0||n%t)throw ae(\"Wrong offset!\");return n},nt=function(e){if(x(e)&&Je in e)return e;throw fe(e+\" is not a typed array!\")},it=function(e,t){if(!(x(e)&&Ge in e))throw fe(\"It is not a typed array constructor!\");return new e(t)},rt=function(e,t){return at(Y(e,e[Ye]),t)},at=function(e,t){for(var n=0,i=t.length,r=it(e,i);i>n;)r[n]=t[n++];return r},st=function(e,t,n){re(e,t,{get:function(){return this._d[n]}})},ut=function(e){var t,n,i,r,o,a,s=L(e),l=arguments.length,c=l>1?arguments[1]:void 0,f=void 0!==c,d=U(s);if(null!=d&&!O(d)){for(a=d.call(s),i=[],t=0;!(o=a.next()).done;t++)i.push(o.value);s=i}for(f&&l>2&&(c=u(c,arguments[2],2)),t=0,n=k(s.length),r=it(this,n);n>t;t++)r[t]=f?c(s[t],t):s[t];return r},ft=function(){for(var e=0,t=arguments.length,n=it(this,t);t>e;)n[e]=arguments[e++];return n},ht=!!de&&i(function(){Ve.call(new de(1))}),pt=function(){return Ve.apply(ht?qe.call(nt(this)):nt(this),arguments)},gt={copyWithin:function(e,t){return te.call(nt(this),e,t,arguments.length>2?arguments[2]:void 0)},every:function(e){return ke(nt(this),e,arguments.length>1?arguments[1]:void 0)},fill:function(e){return ee.apply(nt(this),arguments)},filter:function(e){return rt(this,we(nt(this),e,arguments.length>1?arguments[1]:void 0))},find:function(e){return Te(nt(this),e,arguments.length>1?arguments[1]:void 0)},findIndex:function(e){return Se(nt(this),e,arguments.length>1?arguments[1]:void 0)},forEach:function(e){be(nt(this),e,arguments.length>1?arguments[1]:void 0)},indexOf:function(e){return _e(nt(this),e,arguments.length>1?arguments[1]:void 0)},includes:function(e){return Ae(nt(this),e,arguments.length>1?arguments[1]:void 0)},join:function(e){return Fe.apply(nt(this),arguments)},lastIndexOf:function(e){return Ne.apply(nt(this),arguments)},map:function(e){return Xe(nt(this),e,arguments.length>1?arguments[1]:void 0)},reduce:function(e){return je.apply(nt(this),arguments)},reduceRight:function(e){return Ie.apply(nt(this),arguments)},reverse:function(){for(var e,t=nt(this).length,n=Math.floor(t/2),i=0;i<n;)e=this[i],this[i++]=this[--t],this[t]=e;return this},some:function(e){return Ee(nt(this),e,arguments.length>1?arguments[1]:void 0)},sort:function(e){return Re.call(nt(this),e)},subarray:function(e,t){var n=nt(this),i=n.length,r=A(e,i);return new(Y(n,n[Ye]))(n.buffer,n.byteOffset+r*n.BYTES_PER_ELEMENT,k((void 0===t?i:A(t,i))-r))}},mt=function(e,t){return rt(this,qe.call(nt(this),e,t))},yt=function(e){nt(this);var t=tt(arguments[1],1),n=this.length,i=L(e),r=k(i.length),o=0;if(r+t>n)throw ae(\"Wrong length!\");for(;o<r;)this[t+o]=i[o++]},vt={entries:function(){return Oe.call(nt(this))},keys:function(){return xe.call(nt(this))},values:function(){return Me.call(nt(this))}},bt=function(e,t){return x(e)&&e[Je]&&\"symbol\"!=typeof t&&t in e&&String(+t)==String(t)},wt=function(e,t){return bt(e,t=_(t,!0))?h(2,e[t]):oe(e,t)},Et=function(e,t,n){return!(bt(e,t=_(t,!0))&&x(n)&&P(n,\"value\"))||P(n,\"get\")||P(n,\"set\")||n.configurable||P(n,\"writable\")&&!n.writable||P(n,\"enumerable\")&&!n.enumerable?re(e,t,n):(e[t]=n.value,e)};Qe||(ie.f=wt,ne.f=Et),o(o.S+o.F*!Qe,\"Object\",{getOwnPropertyDescriptor:wt,defineProperty:Et}),i(function(){Ue.call({})})&&(Ue=Ve=function(){return Fe.call(this)});var kt=b({},gt);b(kt,vt),y(kt,He,vt.values),b(kt,{slice:mt,set:yt,constructor:function(){},toString:Ue,toLocaleString:pt}),st(kt,\"buffer\",\"b\"),st(kt,\"byteOffset\",\"o\"),st(kt,\"byteLength\",\"l\"),st(kt,\"length\",\"e\"),re(kt,ze,{get:function(){return this[Je]}}),e.exports=function(e,n,r,a){var s=e+((a=!!a)?\"Clamped\":\"\")+\"Array\",c=\"get\"+e,u=\"set\"+e,d=t[s],h=d||{},p=d&&R(d),g=!d||!l.ABV,m={},v=d&&d.prototype,b=function(e,t){re(e,t,{get:function(){return function(e,t){var i=e._d;return i.v[c](t*n+i.o,Ze)}(this,t)},set:function(e){return function(e,t,i){var r=e._d;a&&(i=(i=Math.round(i))<0?0:i>255?255:255&i),r.v[u](t*n+r.o,i,Ze)}(this,t,e)},enumerable:!0})};g?(d=r(function(e,t,i,r){f(e,d,s,\"_d\");var o,a,l,c,u=0,h=0;if(x(t)){if(!(t instanceof ge||\"ArrayBuffer\"==(c=M(t))||\"SharedArrayBuffer\"==c))return Je in t?at(d,t):ut.call(d,t);o=t,h=tt(i,n);var p=t.byteLength;if(void 0===r){if(p%n)throw ae(\"Wrong length!\");if((a=p-h)<0)throw ae(\"Wrong length!\")}else if((a=k(r)*n)+h>p)throw ae(\"Wrong length!\");l=a/n}else l=T(t),o=new ge(a=l*n);for(y(e,\"_d\",{b:o,o:h,l:a,e:l,v:new ye(o)});u<l;)b(e,u++)}),v=d.prototype=N(kt),y(v,\"constructor\",d)):i(function(){d(1)})&&i(function(){new d(-1)})&&X(function(e){new d,new d(null),new d(1.5),new d(e)},!0)||(d=r(function(e,t,i,r){var o;return f(e,d,s),x(t)?t instanceof ge||\"ArrayBuffer\"==(o=M(t))||\"SharedArrayBuffer\"==o?void 0!==r?new h(t,tt(i,n),r):void 0!==i?new h(t,tt(i,n)):new h(t):Je in t?at(d,t):ut.call(d,t):new h(T(t))}),be(p!==Function.prototype?q(h).concat(q(p)):q(h),function(e){e in d||y(d,e,h[e])}),d.prototype=v,v.constructor=d);var w=v[He],E=!!w&&(\"values\"==w.name||null==w.name),S=vt.values;y(d,Ge,!0),y(v,Je,s),y(v,$e,!0),y(v,Ye,d),(a?new d(1)[ze]==s:ze in v)||re(v,ze,{get:function(){return s}}),m[s]=d,o(o.G+o.W+o.F*(d!=h),m),o(o.S,s,{BYTES_PER_ELEMENT:n}),o(o.S+o.F*i(function(){h.of.call(d,1)}),s,{from:ut,of:ft}),\"BYTES_PER_ELEMENT\"in v||y(v,\"BYTES_PER_ELEMENT\",n),o(o.P,s,gt),Z(s),o(o.P+o.F*et,s,{set:yt}),o(o.P+o.F*!E,s,vt),v.toString!=Ue&&(v.toString=Ue),o(o.P+o.F*i(function(){new d(1).slice()}),s,{slice:mt}),o(o.P+o.F*(i(function(){return[1,2].toLocaleString()!=new d([1,2]).toLocaleString()})||!i(function(){v.toLocaleString.call([1,2])})),s,{toLocaleString:pt}),Q[s]=E?w:S,E||y(v,He,S)}}else e.exports=function(){}});ht(\"Int8\",1,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht(\"Uint8\",1,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht(\"Uint8\",1,function(e){return function(t,n,i){return e(this,t,n,i)}},!0),ht(\"Int16\",2,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht(\"Uint16\",2,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht(\"Int32\",4,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht(\"Uint32\",4,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht(\"Float32\",4,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht(\"Float64\",8,function(e){return function(t,n,i){return e(this,t,n,i)}});var pt=function(e,t,n,i){try{return i?t(o(n)[0],n[1]):t(n)}catch(t){var r=e.return;throw void 0!==r&&o(r.call(e)),t}},gt=t(function(e){var t={},n={},i=e.exports=function(e,i,r,a,s){var l,c,u,f,d=s?function(){return e}:We(e),h=S(r,a,i?2:1),p=0;if(\"function\"!=typeof d)throw TypeError(e+\" is not iterable!\");if(Le(d)){for(l=V(e.length);l>p;p++)if((f=i?h(o(c=e[p])[0],c[1]):h(e[p]))===t||f===n)return f}else for(u=d.call(e);!(c=u.next()).done;)if((f=pt(u,h,c.value,i))===t||f===n)return f};i.BREAK=t,i.RETURN=n}),mt=t(function(e){var t=E(\"meta\"),n=p.f,i=0,o=Object.isExtensible||function(){return!0},s=!a(function(){return o(Object.preventExtensions({}))}),l=function(e){n(e,t,{value:{i:\"O\"+ ++i,w:{}}})},c=e.exports={KEY:t,NEED:!1,fastKey:function(e,n){if(!r(e))return\"symbol\"==typeof e?e:(\"string\"==typeof e?\"S\":\"P\")+e;if(!v(e,t)){if(!o(e))return\"F\";if(!n)return\"E\";l(e)}return e[t].i},getWeak:function(e,n){if(!v(e,t)){if(!o(e))return!0;if(!n)return!1;l(e)}return e[t].w},onFreeze:function(e){return s&&c.NEED&&o(e)&&!v(e,t)&&l(e),e}}}),yt=(mt.KEY,mt.NEED,mt.fastKey,mt.getWeak,mt.onFreeze,function(e,t){if(!r(e)||e._t!==t)throw TypeError(\"Incompatible receiver, \"+t+\" required!\");return e}),vt=p.f,bt=mt.fastKey,wt=s?\"_s\":\"size\",Et=function(e,t){var n,i=bt(t);if(\"F\"!==i)return e._i[i];for(n=e._f;n;n=n.n)if(n.k==t)return n},kt={getConstructor:function(e,t,n,i){var r=e(function(e,o){F(e,r,t,\"_i\"),e._t=t,e._i=Be(null),e._f=void 0,e._l=void 0,e[wt]=0,null!=o&&gt(o,n,e[i],e)});return I(r.prototype,{clear:function(){for(var e=yt(this,t),n=e._i,i=e._f;i;i=i.n)i.r=!0,i.p&&(i.p=i.p.n=void 0),delete n[i.i];e._f=e._l=void 0,e[wt]=0},delete:function(e){var n=yt(this,t),i=Et(n,e);if(i){var r=i.n,o=i.p;delete n._i[i.i],i.r=!0,o&&(o.n=r),r&&(r.p=o),n._f==i&&(n._f=r),n._l==i&&(n._l=o),n[wt]--}return!!i},forEach:function(e){yt(this,t);for(var n,i=S(e,arguments.length>1?arguments[1]:void 0,3);n=n?n.n:this._f;)for(i(n.v,n.k,this);n&&n.r;)n=n.p},has:function(e){return!!Et(yt(this,t),e)}}),s&&vt(r.prototype,\"size\",{get:function(){return yt(this,t)[wt]}}),r},def:function(e,t,n){var i,r,o=Et(e,t);return o?o.v=n:(e._l=o={i:r=bt(t,!0),k:t,v:n,p:i=e._l,n:void 0,r:!1},e._f||(e._f=o),i&&(i.n=o),e[wt]++,\"F\"!==r&&(e._i[r]=o)),e},getEntry:Et,setStrong:function(e,t,n){rt(e,t,function(e,n){this._t=yt(e,t),this._k=n,this._l=void 0},function(){for(var e=this._k,t=this._l;t&&t.r;)t=t.p;return this._t&&(this._l=t=t?t.n:this._t._f)?Xe(0,\"keys\"==e?t.k:\"values\"==e?t.v:[t.k,t.v]):(this._t=void 0,Xe(1))},n?\"entries\":\"values\",!n,!0),ve(t)}},Tt=function(e,t){if(o(e),!r(t)&&null!==t)throw TypeError(t+\": can't set as prototype!\")},St={set:Object.setPrototypeOf||(\"__proto__\"in{}?function(e,t,n){try{(n=S(Function.call,dt.f(Object.prototype,\"__proto__\").set,2))(e,[]),t=!(e instanceof Array)}catch(e){t=!0}return function(e,i){return Tt(e,i),t?e.__proto__=i:n(e,i),e}}({},!1):void 0),check:Tt},At=St.set,_t=function(e,t,i,o,s,l){var c=n[e],u=c,f=s?\"set\":\"add\",d=u&&u.prototype,h={},p=function(e){var t=d[e];k(d,e,\"delete\"==e?function(e){return!(l&&!r(e))&&t.call(this,0===e?0:e)}:\"has\"==e?function(e){return!(l&&!r(e))&&t.call(this,0===e?0:e)}:\"get\"==e?function(e){return l&&!r(e)?void 0:t.call(this,0===e?0:e)}:\"add\"==e?function(e){return t.call(this,0===e?0:e),this}:function(e,n){return t.call(this,0===e?0:e,n),this})};if(\"function\"==typeof u&&(l||d.forEach&&!a(function(){(new u).entries().next()}))){var g=new u,m=g[f](l?{}:-0,1)!=g,y=a(function(){g.has(1)}),v=lt(function(e){new u(e)}),b=!l&&a(function(){for(var e=new u,t=5;t--;)e[f](t,t);return!e.has(-0)});v||((u=t(function(t,n){F(t,u,e);var i=function(e,t,n){var i,o=t.constructor;return o!==n&&\"function\"==typeof o&&(i=o.prototype)!==n.prototype&&r(i)&&At&&At(e,i),e}(new c,t,u);return null!=n&&gt(n,s,i[f],i),i})).prototype=d,d.constructor=u),(y||b)&&(p(\"delete\"),p(\"has\"),s&&p(\"get\")),(b||m)&&p(f),l&&d.clear&&delete d.clear}else u=o.getConstructor(t,e,s,f),I(u.prototype,i),mt.NEED=!0;return he(u,e),h[e]=u,C(C.G+C.W+C.F*(u!=c),h),l||o.setStrong(u,e,s),u},Ct=(_t(\"Map\",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{get:function(e){var t=kt.getEntry(yt(this,\"Map\"),e);return t&&t.v},set:function(e,t){return kt.def(yt(this,\"Map\"),0===e?0:e,t)}},kt,!0),_t(\"Set\",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{add:function(e){return kt.def(yt(this,\"Set\"),e=0===e?0:e,e)}},kt),{f:Object.getOwnPropertySymbols}),Pt=Object.assign,Mt=!Pt||a(function(){var e={},t={},n=Symbol(),i=\"abcdefghijklmnopqrst\";return e[n]=7,i.split(\"\").forEach(function(e){t[e]=e}),7!=Pt({},e)[n]||Object.keys(Pt({},t)).join(\"\")!=i})?function(e,t){for(var n=le(e),i=arguments.length,r=1,o=Ct.f,a=ut.f;i>r;)for(var s,l=z(arguments[r++]),c=o?Oe(l).concat(o(l)):Oe(l),u=c.length,f=0;u>f;)a.call(l,s=c[f++])&&(n[s]=l[s]);return n}:Pt,xt=mt.getWeak,Lt=Ke(5),Ot=Ke(6),Nt=0,jt=function(e){return e._l||(e._l=new It)},It=function(){this.a=[]},Ft=function(e,t){return Lt(e.a,function(e){return e[0]===t})};It.prototype={get:function(e){var t=Ft(this,e);if(t)return t[1]},has:function(e){return!!Ft(this,e)},set:function(e,t){var n=Ft(this,e);n?n[1]=t:this.a.push([e,t])},delete:function(e){var t=Ot(this.a,function(t){return t[0]===e});return~t&&this.a.splice(t,1),!!~t}};var Rt={getConstructor:function(e,t,n,i){var o=e(function(e,r){F(e,o,t,\"_i\"),e._t=t,e._i=Nt++,e._l=void 0,null!=r&&gt(r,n,e[i],e)});return I(o.prototype,{delete:function(e){if(!r(e))return!1;var n=xt(e);return!0===n?jt(yt(this,t)).delete(e):n&&v(n,this._i)&&delete n[this._i]},has:function(e){if(!r(e))return!1;var n=xt(e);return!0===n?jt(yt(this,t)).has(e):n&&v(n,this._i)}}),o},def:function(e,t,n){var i=xt(o(t),!0);return!0===i?jt(e).set(t,n):i[e._i]=n,e},ufstore:jt};t(function(e){var t,n=Ke(0),i=mt.getWeak,o=Object.isExtensible,s=Rt.ufstore,l={},c=function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},u={get:function(e){if(r(e)){var t=i(e);return!0===t?s(yt(this,\"WeakMap\")).get(e):t?t[this._i]:void 0}},set:function(e,t){return Rt.def(yt(this,\"WeakMap\"),e,t)}},f=e.exports=_t(\"WeakMap\",c,u,Rt,!0,!0);a(function(){return 7!=(new f).set((Object.freeze||Object)(l),7).get(l)})&&(t=Rt.getConstructor(c,\"WeakMap\"),Mt(t.prototype,u),mt.NEED=!0,n([\"delete\",\"has\",\"get\",\"set\"],function(e){var n=f.prototype,i=n[e];k(n,e,function(n,a){if(r(n)&&!o(n)){this._f||(this._f=new t);var s=this._f[e](n,a);return\"set\"==e?this:s}return i.call(this,n,a)})}))});_t(\"WeakSet\",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{add:function(e){return Rt.def(yt(this,\"WeakSet\"),e,!0)}},Rt,!1,!0);var qt=(n.Reflect||{}).apply,Bt=Function.apply;C(C.S+C.F*!a(function(){qt(function(){})}),\"Reflect\",{apply:function(e,t,n){var i=T(e),r=o(n);return qt?qt(i,t,r):Bt.call(i,t,r)}});var Ut=function(e,t,n){var i=void 0===n;switch(t.length){case 0:return i?e():e.call(n);case 1:return i?e(t[0]):e.call(n,t[0]);case 2:return i?e(t[0],t[1]):e.call(n,t[0],t[1]);case 3:return i?e(t[0],t[1],t[2]):e.call(n,t[0],t[1],t[2]);case 4:return i?e(t[0],t[1],t[2],t[3]):e.call(n,t[0],t[1],t[2],t[3])}return e.apply(n,t)},Vt=[].slice,Dt={},Ht=Function.bind||function(e){var t=T(this),n=Vt.call(arguments,1),i=function(){var r=n.concat(Vt.call(arguments));return this instanceof i?function(e,t,n){if(!(t in Dt)){for(var i=[],r=0;r<t;r++)i[r]=\"a[\"+r+\"]\";Dt[t]=Function(\"F,a\",\"return new F(\"+i.join(\",\")+\")\")}return Dt[t](e,n)}(t,r.length,r):Ut(t,r,e)};return r(t.prototype)&&(i.prototype=t.prototype),i},Wt=(n.Reflect||{}).construct,zt=a(function(){function e(){}return!(Wt(function(){},[],e)instanceof e)}),Gt=!a(function(){Wt(function(){})});C(C.S+C.F*(zt||Gt),\"Reflect\",{construct:function(e,t){T(e),o(t);var n=arguments.length<3?e:T(arguments[2]);if(Gt&&!zt)return Wt(e,t,n);if(e==n){switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3])}var i=[null];return i.push.apply(i,t),new(Ht.apply(e,i))}var a=n.prototype,s=Be(r(a)?a:Object.prototype),l=Function.apply.call(e,s,t);return r(l)?l:s}}),C(C.S+C.F*a(function(){Reflect.defineProperty(p.f({},1,{value:1}),1,{value:2})}),\"Reflect\",{defineProperty:function(e,t,n){o(e),t=d(t,!0),o(n);try{return p.f(e,t,n),!0}catch(e){return!1}}});var Yt=dt.f;C(C.S,\"Reflect\",{deleteProperty:function(e,t){var n=Yt(o(e),t);return!(n&&!n.configurable)&&delete e[t]}}),C(C.S,\"Reflect\",{get:function e(t,n){var i,a,s=arguments.length<3?t:arguments[2];return o(t)===s?t[n]:(i=dt.f(t,n))?v(i,\"value\")?i.value:void 0!==i.get?i.get.call(s):void 0:r(a=De(t))?e(a,n,s):void 0}}),C(C.S,\"Reflect\",{getOwnPropertyDescriptor:function(e,t){return dt.f(o(e),t)}}),C(C.S,\"Reflect\",{getPrototypeOf:function(e){return De(o(e))}}),C(C.S,\"Reflect\",{has:function(e,t){return t in e}});var Kt=Object.isExtensible;C(C.S,\"Reflect\",{isExtensible:function(e){return o(e),!Kt||Kt(e)}});var Qt=n.Reflect,Jt=Qt&&Qt.ownKeys||function(e){var t=se.f(o(e)),n=Ct.f;return n?t.concat(n(e)):t};C(C.S,\"Reflect\",{ownKeys:Jt});var $t=Object.preventExtensions;C(C.S,\"Reflect\",{preventExtensions:function(e){o(e);try{return $t&&$t(e),!0}catch(e){return!1}}}),C(C.S,\"Reflect\",{set:function e(t,n,i){var a,s,l=arguments.length<4?t:arguments[3],c=dt.f(o(t),n);if(!c){if(r(s=De(t)))return e(s,n,i,l);c=g(0)}return v(c,\"value\")?!(!1===c.writable||!r(l)||((a=dt.f(l,n)||g(0)).value=i,p.f(l,n,a),0)):void 0!==c.set&&(c.set.call(l,i),!0)}}),St&&C(C.S,\"Reflect\",{setPrototypeOf:function(e,t){St.check(e,t);try{return St.set(e,t),!0}catch(e){return!1}}});var Xt,Zt,en,tn=n.process,nn=n.setImmediate,rn=n.clearImmediate,on=n.MessageChannel,an=n.Dispatch,sn=0,ln={},cn=function(){var e=+this;if(ln.hasOwnProperty(e)){var t=ln[e];delete ln[e],t()}},un=function(e){cn.call(e.data)};nn&&rn||(nn=function(e){for(var t=[],n=1;arguments.length>n;)t.push(arguments[n++]);return ln[++sn]=function(){Ut(\"function\"==typeof e?e:Function(e),t)},Xt(sn),sn},rn=function(e){delete ln[e]},\"process\"==W(tn)?Xt=function(e){tn.nextTick(S(cn,e,1))}:an&&an.now?Xt=function(e){an.now(S(cn,e,1))}:on?(en=(Zt=new on).port2,Zt.port1.onmessage=un,Xt=S(en.postMessage,en,1)):n.addEventListener&&\"function\"==typeof postMessage&&!n.importScripts?(Xt=function(e){n.postMessage(e+\"\",\"*\")},n.addEventListener(\"message\",un,!1)):Xt=\"onreadystatechange\"in u(\"script\")?function(e){Ie.appendChild(u(\"script\")).onreadystatechange=function(){Ie.removeChild(this),cn.call(e)}}:function(e){setTimeout(S(cn,e,1),0)});var fn={set:nn,clear:rn},dn=fn.set,hn=n.MutationObserver||n.WebKitMutationObserver,pn=n.process,gn=n.Promise,mn=\"process\"==W(pn);function yn(e){var t,n;this.promise=new e(function(e,i){if(void 0!==t||void 0!==n)throw TypeError(\"Bad Promise constructor\");t=e,n=i}),this.resolve=T(t),this.reject=T(n)}var vn,bn,wn,En,kn={f:function(e){return new yn(e)}},Tn=function(e){try{return{e:!1,v:e()}}catch(e){return{e:!0,v:e}}},Sn=fn.set,An=function(){var e,t,i,r=function(){var n,r;for(mn&&(n=pn.domain)&&n.exit();e;){r=e.fn,e=e.next;try{r()}catch(n){throw e?i():t=void 0,n}}t=void 0,n&&n.enter()};if(mn)i=function(){pn.nextTick(r)};else if(!hn||n.navigator&&n.navigator.standalone)if(gn&&gn.resolve){var o=gn.resolve();i=function(){o.then(r)}}else i=function(){dn.call(n,r)};else{var a=!0,s=document.createTextNode(\"\");new hn(r).observe(s,{characterData:!0}),i=function(){s.data=a=!a}}return function(n){var r={fn:n,next:void 0};t&&(t.next=r),e||(e=r,i()),t=r}}(),_n=n.TypeError,Cn=n.process,Pn=n.Promise,Mn=\"process\"==Ce(Cn),xn=function(){},Ln=bn=kn.f,On=!!function(){try{var e=Pn.resolve(1),t=(e.constructor={})[ue(\"species\")]=function(e){e(xn,xn)};return(Mn||\"function\"==typeof PromiseRejectionEvent)&&e.then(xn)instanceof t}catch(e){}}(),Nn=function(e){var t;return!(!r(e)||\"function\"!=typeof(t=e.then))&&t},jn=function(e,t){if(!e._n){e._n=!0;var n=e._c;An(function(){for(var i=e._v,r=1==e._s,o=0,a=function(t){var n,o,a=r?t.ok:t.fail,s=t.resolve,l=t.reject,c=t.domain;try{a?(r||(2==e._h&&Rn(e),e._h=1),!0===a?n=i:(c&&c.enter(),n=a(i),c&&c.exit()),n===t.promise?l(_n(\"Promise-chain cycle\")):(o=Nn(n))?o.call(n,s,l):s(n)):l(i)}catch(e){l(e)}};n.length>o;)a(n[o++]);e._c=[],e._n=!1,t&&!e._h&&In(e)})}},In=function(e){Sn.call(n,function(){var t,i,r,o=e._v,a=Fn(e);if(a&&(t=Tn(function(){Mn?Cn.emit(\"unhandledRejection\",o,e):(i=n.onunhandledrejection)?i({promise:e,reason:o}):(r=n.console)&&r.error&&r.error(\"Unhandled promise rejection\",o)}),e._h=Mn||Fn(e)?2:1),e._a=void 0,a&&t.e)throw t.v})},Fn=function(e){return 1!==e._h&&0===(e._a||e._c).length},Rn=function(e){Sn.call(n,function(){var t;Mn?Cn.emit(\"rejectionHandled\",e):(t=n.onrejectionhandled)&&t({promise:e,reason:e._v})})},qn=function(e){var t=this;t._d||(t._d=!0,(t=t._w||t)._v=e,t._s=2,t._a||(t._a=t._c.slice()),jn(t,!0))},Bn=function(e){var t,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===e)throw _n(\"Promise can't be resolved itself\");(t=Nn(e))?An(function(){var i={_w:n,_d:!1};try{t.call(e,S(Bn,i,1),S(qn,i,1))}catch(e){qn.call(i,e)}}):(n._v=e,n._s=1,jn(n,!1))}catch(e){qn.call({_w:n,_d:!1},e)}}};On||(Pn=function(e){F(this,Pn,\"Promise\",\"_h\"),T(e),vn.call(this);try{e(S(Bn,this,1),S(qn,this,1))}catch(e){qn.call(this,e)}},(vn=function(e){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1}).prototype=I(Pn.prototype,{then:function(e,t){var n=Ln(me(this,Pn));return n.ok=\"function\"!=typeof e||e,n.fail=\"function\"==typeof t&&t,n.domain=Mn?Cn.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&jn(this,!1),n.promise},catch:function(e){return this.then(void 0,e)}}),wn=function(){var e=new vn;this.promise=e,this.resolve=S(Bn,e,1),this.reject=S(qn,e,1)},kn.f=Ln=function(e){return e===Pn||e===En?new wn(e):bn(e)}),C(C.G+C.W+C.F*!On,{Promise:Pn}),he(Pn,\"Promise\"),ve(\"Promise\"),En=i.Promise,C(C.S+C.F*!On,\"Promise\",{reject:function(e){var t=Ln(this);return(0,t.reject)(e),t.promise}}),C(C.S+C.F*!On,\"Promise\",{resolve:function(e){return function(e,t){if(o(e),r(t)&&t.constructor===e)return t;var n=kn.f(e);return(0,n.resolve)(t),n.promise}(this,e)}}),C(C.S+C.F*!(On&&lt(function(e){Pn.all(e).catch(xn)})),\"Promise\",{all:function(e){var t=this,n=Ln(t),i=n.resolve,r=n.reject,o=Tn(function(){var n=[],o=0,a=1;gt(e,!1,function(e){var s=o++,l=!1;n.push(void 0),a++,t.resolve(e).then(function(e){l||(l=!0,n[s]=e,--a||i(n))},r)}),--a||i(n)});return o.e&&r(o.v),n.promise},race:function(e){var t=this,n=Ln(t),i=n.reject,r=Tn(function(){gt(e,!1,function(e){t.resolve(e).then(n.resolve,i)})});return r.e&&i(r.v),n.promise}});var Un={f:ue},Vn=p.f,Dn=function(e){var t=i.Symbol||(i.Symbol=n.Symbol||{});\"_\"==e.charAt(0)||e in t||Vn(t,e,{value:Un.f(e)})},Hn=se.f,Wn={}.toString,zn=\"object\"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],Gn={f:function(e){return zn&&\"[object Window]\"==Wn.call(e)?function(e){try{return Hn(e)}catch(e){return zn.slice()}}(e):Hn(Y(e))}},Yn=mt.KEY,Kn=dt.f,Qn=p.f,Jn=Gn.f,$n=n.Symbol,Xn=n.JSON,Zn=Xn&&Xn.stringify,ei=ue(\"_hidden\"),ti=ue(\"toPrimitive\"),ni={}.propertyIsEnumerable,ii=Z(\"symbol-registry\"),ri=Z(\"symbols\"),oi=Z(\"op-symbols\"),ai=Object.prototype,si=\"function\"==typeof $n,li=n.QObject,ci=!li||!li.prototype||!li.prototype.findChild,ui=s&&a(function(){return 7!=Be(Qn({},\"a\",{get:function(){return Qn(this,\"a\",{value:7}).a}})).a})?function(e,t,n){var i=Kn(ai,t);i&&delete ai[t],Qn(e,t,n),i&&e!==ai&&Qn(ai,t,i)}:Qn,fi=function(e){var t=ri[e]=Be($n.prototype);return t._k=e,t},di=si&&\"symbol\"==typeof $n.iterator?function(e){return\"symbol\"==typeof e}:function(e){return e instanceof $n},hi=function(e,t,n){return e===ai&&hi(oi,t,n),o(e),t=d(t,!0),o(n),v(ri,t)?(n.enumerable?(v(e,ei)&&e[ei][t]&&(e[ei][t]=!1),n=Be(n,{enumerable:g(0,!1)})):(v(e,ei)||Qn(e,ei,g(1,{})),e[ei][t]=!0),ui(e,t,n)):Qn(e,t,n)},pi=function(e,t){o(e);for(var n,i=function(e){var t=Oe(e),n=Ct.f;if(n)for(var i,r=n(e),o=ut.f,a=0;r.length>a;)o.call(e,i=r[a++])&&t.push(i);return t}(t=Y(t)),r=0,a=i.length;a>r;)hi(e,n=i[r++],t[n]);return e},gi=function(e){var t=ni.call(this,e=d(e,!0));return!(this===ai&&v(ri,e)&&!v(oi,e))&&(!(t||!v(this,e)||!v(ri,e)||v(this,ei)&&this[ei][e])||t)},mi=function(e,t){if(e=Y(e),t=d(t,!0),e!==ai||!v(ri,t)||v(oi,t)){var n=Kn(e,t);return!n||!v(ri,t)||v(e,ei)&&e[ei][t]||(n.enumerable=!0),n}},yi=function(e){for(var t,n=Jn(Y(e)),i=[],r=0;n.length>r;)v(ri,t=n[r++])||t==ei||t==Yn||i.push(t);return i},vi=function(e){for(var t,n=e===ai,i=Jn(n?oi:Y(e)),r=[],o=0;i.length>o;)!v(ri,t=i[o++])||n&&!v(ai,t)||r.push(ri[t]);return r};si||(k(($n=function(){if(this instanceof $n)throw TypeError(\"Symbol is not a constructor!\");var e=E(arguments.length>0?arguments[0]:void 0),t=function(n){this===ai&&t.call(oi,n),v(this,ei)&&v(this[ei],e)&&(this[ei][e]=!1),ui(this,e,g(1,n))};return s&&ci&&ui(ai,e,{configurable:!0,set:t}),fi(e)}).prototype,\"toString\",function(){return this._k}),dt.f=mi,p.f=hi,se.f=Gn.f=yi,ut.f=gi,Ct.f=vi,s&&k(ai,\"propertyIsEnumerable\",gi,!0),Un.f=function(e){return fi(ue(e))}),C(C.G+C.W+C.F*!si,{Symbol:$n});for(var bi=\"hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables\".split(\",\"),wi=0;bi.length>wi;)ue(bi[wi++]);for(var Ei=Oe(ue.store),ki=0;Ei.length>ki;)Dn(Ei[ki++]);C(C.S+C.F*!si,\"Symbol\",{for:function(e){return v(ii,e+=\"\")?ii[e]:ii[e]=$n(e)},keyFor:function(e){if(!di(e))throw TypeError(e+\" is not a symbol!\");for(var t in ii)if(ii[t]===e)return t},useSetter:function(){ci=!0},useSimple:function(){ci=!1}}),C(C.S+C.F*!si,\"Object\",{create:function(e,t){return void 0===t?Be(e):pi(Be(e),t)},defineProperty:hi,defineProperties:pi,getOwnPropertyDescriptor:mi,getOwnPropertyNames:yi,getOwnPropertySymbols:vi}),Xn&&C(C.S+C.F*(!si||a(function(){var e=$n();return\"[null]\"!=Zn([e])||\"{}\"!=Zn({a:e})||\"{}\"!=Zn(Object(e))})),\"JSON\",{stringify:function(e){for(var t,n,i=[e],o=1;arguments.length>o;)i.push(arguments[o++]);if(n=t=i[1],(r(t)||void 0!==e)&&!di(e))return ze(t)||(t=function(e,t){if(\"function\"==typeof n&&(t=n.call(this,e,t)),!di(t))return t}),i[1]=t,Zn.apply(Xn,i)}}),$n.prototype[ti]||m($n.prototype,ti,$n.prototype.valueOf),he($n,\"Symbol\"),he(Math,\"Math\",!0),he(n.JSON,\"JSON\",!0);var Ti=function(e,t){var n=(i.Object||{})[e]||Object[e],r={};r[e]=t(n),C(C.S+C.F*a(function(){n(1)}),\"Object\",r)},Si=mt.onFreeze;Ti(\"freeze\",function(e){return function(t){return e&&r(t)?e(Si(t)):t}});var Ai=mt.onFreeze;Ti(\"seal\",function(e){return function(t){return e&&r(t)?e(Ai(t)):t}});var _i=mt.onFreeze;Ti(\"preventExtensions\",function(e){return function(t){return e&&r(t)?e(_i(t)):t}}),Ti(\"isFrozen\",function(e){return function(t){return!r(t)||!!e&&e(t)}}),Ti(\"isSealed\",function(e){return function(t){return!r(t)||!!e&&e(t)}}),Ti(\"isExtensible\",function(e){return function(t){return!!r(t)&&(!e||e(t))}});var Ci=dt.f;Ti(\"getOwnPropertyDescriptor\",function(){return function(e,t){return Ci(Y(e),t)}}),Ti(\"getPrototypeOf\",function(){return function(e){return De(le(e))}}),Ti(\"keys\",function(){return function(e){return Oe(le(e))}}),Ti(\"getOwnPropertyNames\",function(){return Gn.f}),C(C.S+C.F,\"Object\",{assign:Mt});var Pi=Object.is||function(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t};C(C.S,\"Object\",{is:Pi});var Mi=p.f,xi=Function.prototype,Li=/^\\s*function ([^ (]*)/;\"name\"in xi||s&&Mi(xi,\"name\",{configurable:!0,get:function(){try{return(\"\"+this).match(Li)[1]}catch(e){return\"\"}}}),C(C.S,\"String\",{raw:function(e){for(var t=Y(e.raw),n=V(t.length),i=arguments.length,r=[],o=0;n>o;)r.push(String(t[o++])),o<i&&r.push(String(arguments[o]));return r.join(\"\")}});var Oi=String.fromCharCode,Ni=String.fromCodePoint;C(C.S+C.F*(!!Ni&&1!=Ni.length),\"String\",{fromCodePoint:function(e){for(var t,n=[],i=arguments.length,r=0;i>r;){if(t=+arguments[r++],J(t,1114111)!==t)throw RangeError(t+\" is not a valid code point\");n.push(t<65536?Oi(t):Oi(55296+((t-=65536)>>10),t%1024+56320))}return n.join(\"\")}});var ji,Ii=(ji=!1,function(e,t){var n,i,r=String(G(e)),o=B(t),a=r.length;return o<0||o>=a?ji?\"\":void 0:(n=r.charCodeAt(o))<55296||n>56319||o+1===a||(i=r.charCodeAt(o+1))<56320||i>57343?ji?r.charAt(o):n:ji?r.slice(o,o+2):i-56320+(n-55296<<10)+65536});C(C.P,\"String\",{codePointAt:function(e){return Ii(this,e)}});var Fi=function(e){var t=String(G(this)),n=\"\",i=B(e);if(i<0||i==1/0)throw RangeError(\"Count can't be negative\");for(;i>0;(i>>>=1)&&(t+=t))1&i&&(n+=t);return n};C(C.P,\"String\",{repeat:Fi});var Ri=ue(\"match\"),qi=function(e){var t;return r(e)&&(void 0!==(t=e[Ri])?!!t:\"RegExp\"==W(e))},Bi=function(e,t,n){if(qi(t))throw TypeError(\"String#\"+n+\" doesn't accept regex!\");return String(G(e))},Ui=ue(\"match\"),Vi=function(e){var t=/./;try{\"/./\"[e](t)}catch(n){try{return t[Ui]=!1,!\"/./\"[e](t)}catch(e){}}return!0},Di=\"\".startsWith;C(C.P+C.F*Vi(\"startsWith\"),\"String\",{startsWith:function(e){var t=Bi(this,e,\"startsWith\"),n=V(Math.min(arguments.length>1?arguments[1]:void 0,t.length)),i=String(e);return Di?Di.call(t,i,n):t.slice(n,n+i.length)===i}});var Hi=\"\".endsWith;C(C.P+C.F*Vi(\"endsWith\"),\"String\",{endsWith:function(e){var t=Bi(this,e,\"endsWith\"),n=arguments.length>1?arguments[1]:void 0,i=V(t.length),r=void 0===n?i:Math.min(V(n),i),o=String(e);return Hi?Hi.call(t,o,r):t.slice(r-o.length,r)===o}});C(C.P+C.F*Vi(\"includes\"),\"String\",{includes:function(e){return!!~Bi(this,e,\"includes\").indexOf(e,arguments.length>1?arguments[1]:void 0)}});s&&\"g\"!=/./g.flags&&p.f(RegExp.prototype,\"flags\",{configurable:!0,get:function(){var e=o(this),t=\"\";return e.global&&(t+=\"g\"),e.ignoreCase&&(t+=\"i\"),e.multiline&&(t+=\"m\"),e.unicode&&(t+=\"u\"),e.sticky&&(t+=\"y\"),t}});var Wi=function(e,t,n){var i=ue(e),r=n(G,i,\"\"[e]),o=r[0],s=r[1];a(function(){var t={};return t[i]=function(){return 7},7!=\"\"[e](t)})&&(k(String.prototype,e,o),m(RegExp.prototype,i,2==t?function(e,t){return s.call(e,this,t)}:function(e){return s.call(e,this)}))};Wi(\"match\",1,function(e,t,n){return[function(n){var i=e(this),r=null==n?void 0:n[t];return void 0!==r?r.call(n,i):new RegExp(n)[t](String(i))},n]}),Wi(\"replace\",2,function(e,t,n){return[function(i,r){var o=e(this),a=null==i?void 0:i[t];return void 0!==a?a.call(i,o,r):n.call(String(o),i,r)},n]}),Wi(\"split\",2,function(e,t,n){var i=qi,r=n,o=[].push;if(\"c\"==\"abbc\".split(/(b)*/)[1]||4!=\"test\".split(/(?:)/,-1).length||2!=\"ab\".split(/(?:ab)*/).length||4!=\".\".split(/(.?)(.?)/).length||\".\".split(/()()/).length>1||\"\".split(/.?/).length){var a=void 0===/()??/.exec(\"\")[1];n=function(e,t){var n=String(this);if(void 0===e&&0===t)return[];if(!i(e))return r.call(n,e,t);var s,l,c,u,f,d=[],h=(e.ignoreCase?\"i\":\"\")+(e.multiline?\"m\":\"\")+(e.unicode?\"u\":\"\")+(e.sticky?\"y\":\"\"),p=0,g=void 0===t?4294967295:t>>>0,m=new RegExp(e.source,h+\"g\");for(a||(s=new RegExp(\"^\"+m.source+\"$(?!\\\\s)\",h));(l=m.exec(n))&&!((c=l.index+l[0].length)>p&&(d.push(n.slice(p,l.index)),!a&&l.length>1&&l[0].replace(s,function(){for(f=1;f<arguments.length-2;f++)void 0===arguments[f]&&(l[f]=void 0)}),l.length>1&&l.index<n.length&&o.apply(d,l.slice(1)),u=l[0].length,p=c,d.length>=g));)m.lastIndex===l.index&&m.lastIndex++;return p===n.length?!u&&m.test(\"\")||d.push(\"\"):d.push(n.slice(p)),d.length>g?d.slice(0,g):d}}else\"0\".split(void 0,0).length&&(n=function(e,t){return void 0===e&&0===t?[]:r.call(this,e,t)});return[function(i,r){var o=e(this),a=null==i?void 0:i[t];return void 0!==a?a.call(i,o,r):n.call(String(o),i,r)},n]}),Wi(\"search\",1,function(e,t,n){return[function(n){var i=e(this),r=null==n?void 0:n[t];return void 0!==r?r.call(n,i):new RegExp(n)[t](String(i))},n]});var zi=function(e,t,n){t in e?p.f(e,t,g(0,n)):e[t]=n};C(C.S+C.F*!lt(function(e){}),\"Array\",{from:function(e){var t,n,i,r,o=le(e),a=\"function\"==typeof this?this:Array,s=arguments.length,l=s>1?arguments[1]:void 0,c=void 0!==l,u=0,f=We(o);if(c&&(l=S(l,s>2?arguments[2]:void 0,2)),null==f||a==Array&&Le(f))for(n=new a(t=V(o.length));t>u;u++)zi(n,u,c?l(o[u],u):o[u]);else for(r=f.call(o),n=new a;!(i=r.next()).done;u++)zi(n,u,c?pt(r,l,[i.value,u],!0):i.value);return n.length=u,n}}),C(C.S+C.F*a(function(){function e(){}return!(Array.of.call(e)instanceof e)}),\"Array\",{of:function(){for(var e=0,t=arguments.length,n=new(\"function\"==typeof this?this:Array)(t);t>e;)zi(n,e,arguments[e++]);return n.length=t,n}}),C(C.P,\"Array\",{copyWithin:ct}),$e(\"copyWithin\");var Gi=Ke(5),Yi=!0;\"find\"in[]&&Array(1).find(function(){Yi=!1}),C(C.P+C.F*Yi,\"Array\",{find:function(e){return Gi(this,e,arguments.length>1?arguments[1]:void 0)}}),$e(\"find\");var Ki=Ke(6),Qi=!0;\"findIndex\"in[]&&Array(1).findIndex(function(){Qi=!1}),C(C.P+C.F*Qi,\"Array\",{findIndex:function(e){return Ki(this,e,arguments.length>1?arguments[1]:void 0)}}),$e(\"findIndex\"),C(C.P,\"Array\",{fill:ce}),$e(\"fill\");var Ji=n.isFinite;C(C.S,\"Number\",{isFinite:function(e){return\"number\"==typeof e&&Ji(e)}});var $i=Math.floor,Xi=function(e){return!r(e)&&isFinite(e)&&$i(e)===e};C(C.S,\"Number\",{isInteger:Xi});var Zi=Math.abs;C(C.S,\"Number\",{isSafeInteger:function(e){return Xi(e)&&Zi(e)<=9007199254740991}}),C(C.S,\"Number\",{isNaN:function(e){return e!=e}}),C(C.S,\"Number\",{EPSILON:Math.pow(2,-52)}),C(C.S,\"Number\",{MIN_SAFE_INTEGER:-9007199254740991}),C(C.S,\"Number\",{MAX_SAFE_INTEGER:9007199254740991});var er=Math.log1p||function(e){return(e=+e)>-1e-8&&e<1e-8?e-e*e/2:Math.log(1+e)},tr=Math.sqrt,nr=Math.acosh;C(C.S+C.F*!(nr&&710==Math.floor(nr(Number.MAX_VALUE))&&nr(1/0)==1/0),\"Math\",{acosh:function(e){return(e=+e)<1?NaN:e>94906265.62425156?Math.log(e)+Math.LN2:er(e-1+tr(e-1)*tr(e+1))}});var ir=Math.asinh;C(C.S+C.F*!(ir&&1/ir(0)>0),\"Math\",{asinh:function e(t){return isFinite(t=+t)&&0!=t?t<0?-e(-t):Math.log(t+Math.sqrt(t*t+1)):t}});var rr=Math.atanh;C(C.S+C.F*!(rr&&1/rr(-0)<0),\"Math\",{atanh:function(e){return 0==(e=+e)?e:Math.log((1+e)/(1-e))/2}});var or=Math.sign||function(e){return 0==(e=+e)||e!=e?e:e<0?-1:1};C(C.S,\"Math\",{cbrt:function(e){return or(e=+e)*Math.pow(Math.abs(e),1/3)}}),C(C.S,\"Math\",{clz32:function(e){return(e>>>=0)?31-Math.floor(Math.log(e+.5)*Math.LOG2E):32}});var ar=Math.exp;C(C.S,\"Math\",{cosh:function(e){return(ar(e=+e)+ar(-e))/2}});var sr=Math.expm1,lr=!sr||sr(10)>22025.465794806718||sr(10)<22025.465794806718||-2e-17!=sr(-2e-17)?function(e){return 0==(e=+e)?e:e>-1e-6&&e<1e-6?e+e*e/2:Math.exp(e)-1}:sr;C(C.S+C.F*(lr!=Math.expm1),\"Math\",{expm1:lr});var cr=Math.pow,ur=cr(2,-52),fr=cr(2,-23),dr=cr(2,127)*(2-fr),hr=cr(2,-126),pr=Math.fround||function(e){var t,n,i=Math.abs(e),r=or(e);return i<hr?r*(i/hr/fr+1/ur-1/ur)*hr*fr:(n=(t=(1+fr/ur)*i)-(t-i))>dr||n!=n?r*(1/0):r*n};C(C.S,\"Math\",{fround:pr});var gr=Math.abs;C(C.S,\"Math\",{hypot:function(e,t){for(var n,i,r=0,o=0,a=arguments.length,s=0;o<a;)s<(n=gr(arguments[o++]))?(r=r*(i=s/n)*i+1,s=n):r+=n>0?(i=n/s)*i:n;return s===1/0?1/0:s*Math.sqrt(r)}});var mr=Math.imul;C(C.S+C.F*a(function(){return-5!=mr(4294967295,5)||2!=mr.length}),\"Math\",{imul:function(e,t){var n=+e,i=+t,r=65535&n,o=65535&i;return 0|r*o+((65535&n>>>16)*o+r*(65535&i>>>16)<<16>>>0)}}),C(C.S,\"Math\",{log1p:er}),C(C.S,\"Math\",{log10:function(e){return Math.log(e)*Math.LOG10E}}),C(C.S,\"Math\",{log2:function(e){return Math.log(e)/Math.LN2}}),C(C.S,\"Math\",{sign:or});var yr=Math.exp;C(C.S+C.F*a(function(){return-2e-17!=!Math.sinh(-2e-17)}),\"Math\",{sinh:function(e){return Math.abs(e=+e)<1?(lr(e)-lr(-e))/2:(yr(e-1)-yr(-e-1))*(Math.E/2)}});var vr=Math.exp;C(C.S,\"Math\",{tanh:function(e){var t=lr(e=+e),n=lr(-e);return t==1/0?1:n==1/0?-1:(t-n)/(vr(e)+vr(-e))}}),C(C.S,\"Math\",{trunc:function(e){return(e>0?Math.floor:Math.ceil)(e)}});var br=$(!0);C(C.P,\"Array\",{includes:function(e){return br(this,e,arguments.length>1?arguments[1]:void 0)}}),$e(\"includes\");var wr=ut.f,Er=function(e){return function(t){for(var n,i=Y(t),r=Oe(i),o=r.length,a=0,s=[];o>a;)wr.call(i,n=r[a++])&&s.push(e?[n,i[n]]:i[n]);return s}},kr=Er(!1);C(C.S,\"Object\",{values:function(e){return kr(e)}});var Tr=Er(!0);C(C.S,\"Object\",{entries:function(e){return Tr(e)}}),C(C.S,\"Object\",{getOwnPropertyDescriptors:function(e){for(var t,n,i=Y(e),r=dt.f,o=Jt(i),a={},s=0;o.length>s;)void 0!==(n=r(i,t=o[s++]))&&zi(a,t,n);return a}});var Sr=function(e,t,n,i){var r=String(G(e)),o=r.length,a=void 0===n?\" \":String(n),s=V(t);if(s<=o||\"\"==a)return r;var l=s-o,c=Fi.call(a,Math.ceil(l/a.length));return c.length>l&&(c=c.slice(0,l)),i?c+r:r+c},Ar=n.navigator,_r=Ar&&Ar.userAgent||\"\";C(C.P+C.F*/Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(_r),\"String\",{padStart:function(e){return Sr(this,e,arguments.length>1?arguments[1]:void 0,!0)}}),C(C.P+C.F*/Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(_r),\"String\",{padEnd:function(e){return Sr(this,e,arguments.length>1?arguments[1]:void 0,!1)}});var Cr=[].slice,Pr=/MSIE .\\./.test(_r),Mr=function(e){return function(t,n){var i=arguments.length>2,r=!!i&&Cr.call(arguments,2);return e(i?function(){(\"function\"==typeof t?t:Function(t)).apply(this,r)}:t,n)}};C(C.G+C.B+C.F*Pr,{setTimeout:Mr(n.setTimeout),setInterval:Mr(n.setInterval)}),C(C.G+C.B,{setImmediate:fn.set,clearImmediate:fn.clear});for(var xr=ue(\"iterator\"),Lr=ue(\"toStringTag\"),Or=Pe.Array,Nr={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},jr=Oe(Nr),Ir=0;Ir<jr.length;Ir++){var Fr,Rr=jr[Ir],qr=Nr[Rr],Br=n[Rr],Ur=Br&&Br.prototype;if(Ur&&(Ur[xr]||m(Ur,xr,Or),Ur[Lr]||m(Ur,Lr,Rr),Pe[Rr]=Or,qr))for(Fr in ot)Ur[Fr]||k(Ur,Fr,ot[Fr],!0)}t(function(t){!function(e){var n,i=Object.prototype,r=i.hasOwnProperty,o=\"function\"==typeof Symbol?Symbol:{},a=o.iterator||\"@@iterator\",s=o.asyncIterator||\"@@asyncIterator\",l=o.toStringTag||\"@@toStringTag\",c=e.regeneratorRuntime;if(c)t.exports=c;else{(c=e.regeneratorRuntime=t.exports).wrap=b;var u=\"suspendedStart\",f=\"suspendedYield\",d=\"executing\",h=\"completed\",p={},g={};g[a]=function(){return this};var m=Object.getPrototypeOf,y=m&&m(m(x([])));y&&y!==i&&r.call(y,a)&&(g=y);var v=T.prototype=E.prototype=Object.create(g);k.prototype=v.constructor=T,T.constructor=k,T[l]=k.displayName=\"GeneratorFunction\",c.isGeneratorFunction=function(e){var t=\"function\"==typeof e&&e.constructor;return!!t&&(t===k||\"GeneratorFunction\"===(t.displayName||t.name))},c.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,T):(e.__proto__=T,l in e||(e[l]=\"GeneratorFunction\")),e.prototype=Object.create(v),e},c.awrap=function(e){return{__await:e}},S(A.prototype),A.prototype[s]=function(){return this},c.AsyncIterator=A,c.async=function(e,t,n,i){var r=new A(b(e,t,n,i));return c.isGeneratorFunction(t)?r:r.next().then(function(e){return e.done?e.value:r.next()})},S(v),v[l]=\"Generator\",v[a]=function(){return this},v.toString=function(){return\"[object Generator]\"},c.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var i=t.pop();if(i in e)return n.value=i,n.done=!1,n}return n.done=!0,n}},c.values=x,M.prototype={constructor:M,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=n,this.done=!1,this.delegate=null,this.method=\"next\",this.arg=n,this.tryEntries.forEach(P),!e)for(var t in this)\"t\"===t.charAt(0)&&r.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=n)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if(\"throw\"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function i(i,r){return s.type=\"throw\",s.arg=e,t.next=i,r&&(t.method=\"next\",t.arg=n),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var a=this.tryEntries[o],s=a.completion;if(\"root\"===a.tryLoc)return i(\"end\");if(a.tryLoc<=this.prev){var l=r.call(a,\"catchLoc\"),c=r.call(a,\"finallyLoc\");if(l&&c){if(this.prev<a.catchLoc)return i(a.catchLoc,!0);if(this.prev<a.finallyLoc)return i(a.finallyLoc)}else if(l){if(this.prev<a.catchLoc)return i(a.catchLoc,!0)}else{if(!c)throw new Error(\"try statement without catch or finally\");if(this.prev<a.finallyLoc)return i(a.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,\"finallyLoc\")&&this.prev<i.finallyLoc){var o=i;break}}o&&(\"break\"===e||\"continue\"===e)&&o.tryLoc<=t&&t<=o.finallyLoc&&(o=null);var a=o?o.completion:{};return a.type=e,a.arg=t,o?(this.method=\"next\",this.next=o.finallyLoc,p):this.complete(a)},complete:function(e,t){if(\"throw\"===e.type)throw e.arg;return\"break\"===e.type||\"continue\"===e.type?this.next=e.arg:\"return\"===e.type?(this.rval=this.arg=e.arg,this.method=\"return\",this.next=\"end\"):\"normal\"===e.type&&t&&(this.next=t),p},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),P(n),p}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var i=n.completion;if(\"throw\"===i.type){var r=i.arg;P(n)}return r}}throw new Error(\"illegal catch attempt\")},delegateYield:function(e,t,i){return this.delegate={iterator:x(e),resultName:t,nextLoc:i},\"next\"===this.method&&(this.arg=n),p}}}function b(e,t,n,i){var r=t&&t.prototype instanceof E?t:E,o=Object.create(r.prototype),a=new M(i||[]);return o._invoke=function(e,t,n){var i=u;return function(r,o){if(i===d)throw new Error(\"Generator is already running\");if(i===h){if(\"throw\"===r)throw o;return L()}for(n.method=r,n.arg=o;;){var a=n.delegate;if(a){var s=_(a,n);if(s){if(s===p)continue;return s}}if(\"next\"===n.method)n.sent=n._sent=n.arg;else if(\"throw\"===n.method){if(i===u)throw i=h,n.arg;n.dispatchException(n.arg)}else\"return\"===n.method&&n.abrupt(\"return\",n.arg);i=d;var l=w(e,t,n);if(\"normal\"===l.type){if(i=n.done?h:f,l.arg===p)continue;return{value:l.arg,done:n.done}}\"throw\"===l.type&&(i=h,n.method=\"throw\",n.arg=l.arg)}}}(e,n,a),o}function w(e,t,n){try{return{type:\"normal\",arg:e.call(t,n)}}catch(e){return{type:\"throw\",arg:e}}}function E(){}function k(){}function T(){}function S(e){[\"next\",\"throw\",\"return\"].forEach(function(t){e[t]=function(e){return this._invoke(t,e)}})}function A(t){function n(e,i,o,a){var s=w(t[e],t,i);if(\"throw\"!==s.type){var l=s.arg,c=l.value;return c&&\"object\"==typeof c&&r.call(c,\"__await\")?Promise.resolve(c.__await).then(function(e){n(\"next\",e,o,a)},function(e){n(\"throw\",e,o,a)}):Promise.resolve(c).then(function(e){l.value=e,o(l)},a)}a(s.arg)}var i;\"object\"==typeof e.process&&e.process.domain&&(n=e.process.domain.bind(n)),this._invoke=function(e,t){function r(){return new Promise(function(i,r){n(e,t,i,r)})}return i=i?i.then(r,r):r()}}function _(e,t){var i=e.iterator[t.method];if(i===n){if(t.delegate=null,\"throw\"===t.method){if(e.iterator.return&&(t.method=\"return\",t.arg=n,_(e,t),\"throw\"===t.method))return p;t.method=\"throw\",t.arg=new TypeError(\"The iterator does not provide a 'throw' method\")}return p}var r=w(i,e.iterator,t.arg);if(\"throw\"===r.type)return t.method=\"throw\",t.arg=r.arg,t.delegate=null,p;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,\"return\"!==t.method&&(t.method=\"next\",t.arg=n),t.delegate=null,p):o:(t.method=\"throw\",t.arg=new TypeError(\"iterator result is not an object\"),t.delegate=null,p)}function C(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function P(e){var t=e.completion||{};t.type=\"normal\",delete t.arg,e.completion=t}function M(e){this.tryEntries=[{tryLoc:\"root\"}],e.forEach(C,this),this.reset(!0)}function x(e){if(e){var t=e[a];if(t)return t.call(e);if(\"function\"==typeof e.next)return e;if(!isNaN(e.length)){var i=-1,o=function t(){for(;++i<e.length;)if(r.call(e,i))return t.value=e[i],t.done=!1,t;return t.value=n,t.done=!0,t};return o.next=o}}return{next:L}}function L(){return{value:n,done:!0}}}(\"object\"==typeof e?e:\"object\"==typeof window?window:\"object\"==typeof self?self:e)});try{var Vr=new window.CustomEvent(\"test\");if(Vr.preventDefault(),!0!==Vr.defaultPrevented)throw new Error(\"Could not prevent default\")}catch(e){var Dr=function(e,t){var n,i;return t=t||{bubbles:!1,cancelable:!1,detail:void 0},(n=document.createEvent(\"CustomEvent\")).initCustomEvent(e,t.bubbles,t.cancelable,t.detail),i=n.preventDefault,n.preventDefault=function(){i.call(this);try{Object.defineProperty(this,\"defaultPrevented\",{get:function(){return!0}})}catch(e){this.defaultPrevented=!0}},n};Dr.prototype=window.Event.prototype,window.CustomEvent=Dr}!function(e){var t=function(){try{return!!Symbol.iterator}catch(e){return!1}}(),n=function(e){var n={next:function(){var t=e.shift();return{done:void 0===t,value:t}}};return t&&(n[Symbol.iterator]=function(){return n}),n},i=function(e){return encodeURIComponent(e).replace(/%20/g,\"+\")},r=function(e){return decodeURIComponent(e).replace(/\\+/g,\" \")};\"URLSearchParams\"in e&&\"a=1\"===new URLSearchParams(\"?a=1\").toString()||function(){var o=function(e){if(Object.defineProperty(this,\"_entries\",{value:{}}),\"string\"==typeof e){if(\"\"!==e)for(var t,n=(e=e.replace(/^\\?/,\"\")).split(\"&\"),i=0;i<n.length;i++)t=n[i].split(\"=\"),this.append(r(t[0]),t.length>1?r(t[1]):\"\")}else if(e instanceof o){var a=this;e.forEach(function(e,t){a.append(e,t)})}},a=o.prototype;a.append=function(e,t){e in this._entries?this._entries[e].push(t.toString()):this._entries[e]=[t.toString()]},a.delete=function(e){delete this._entries[e]},a.get=function(e){return e in this._entries?this._entries[e][0]:null},a.getAll=function(e){return e in this._entries?this._entries[e].slice(0):[]},a.has=function(e){return e in this._entries},a.set=function(e,t){this._entries[e]=[t.toString()]},a.forEach=function(e,t){var n;for(var i in this._entries)if(this._entries.hasOwnProperty(i)){n=this._entries[i];for(var r=0;r<n.length;r++)e.call(t,n[r],i,this)}},a.keys=function(){var e=[];return this.forEach(function(t,n){e.push(n)}),n(e)},a.values=function(){var e=[];return this.forEach(function(t){e.push(t)}),n(e)},a.entries=function(){var e=[];return this.forEach(function(t,n){e.push([n,t])}),n(e)},t&&(a[Symbol.iterator]=a.entries),a.toString=function(){var e=\"\";return this.forEach(function(t,n){e.length>0&&(e+=\"&\"),e+=i(n)+\"=\"+i(t)}),e},e.URLSearchParams=o}()}(void 0!==e?e:\"undefined\"!=typeof window?window:\"undefined\"!=typeof self?self:e),function(e){if(function(){try{var e=new URL(\"b\",\"http://a\");return e.pathname=\"c%20d\",\"http://a/c%20d\"===e.href&&e.searchParams}catch(e){return!1}}()||function(){var t=e.URL,n=function(e,t){\"string\"!=typeof e&&(e=String(e));var n=document.implementation.createHTMLDocument(\"\");if(window.doc=n,t){var i=n.createElement(\"base\");i.href=t,n.head.appendChild(i)}var r=n.createElement(\"a\");if(r.href=e,n.body.appendChild(r),r.href=r.href,\":\"===r.protocol||!/:/.test(r.href))throw new TypeError(\"Invalid URL\");Object.defineProperty(this,\"_anchorElement\",{value:r})},i=n.prototype;[\"hash\",\"host\",\"hostname\",\"port\",\"protocol\",\"search\"].forEach(function(e){!function(e){Object.defineProperty(i,e,{get:function(){return this._anchorElement[e]},set:function(t){this._anchorElement[e]=t},enumerable:!0})}(e)}),Object.defineProperties(i,{toString:{get:function(){var e=this;return function(){return e.href}}},href:{get:function(){return this._anchorElement.href.replace(/\\?$/,\"\")},set:function(e){this._anchorElement.href=e},enumerable:!0},pathname:{get:function(){return this._anchorElement.pathname.replace(/(^\\/?)/,\"/\")},set:function(e){this._anchorElement.pathname=e},enumerable:!0},origin:{get:function(){var e={\"http:\":80,\"https:\":443,\"ftp:\":21}[this._anchorElement.protocol],t=this._anchorElement.port!=e&&\"\"!==this._anchorElement.port;return this._anchorElement.protocol+\"//\"+this._anchorElement.hostname+(t?\":\"+this._anchorElement.port:\"\")},enumerable:!0},password:{get:function(){return\"\"},set:function(e){},enumerable:!0},username:{get:function(){return\"\"},set:function(e){},enumerable:!0},searchParams:{get:function(){var e=new URLSearchParams(this.search),t=this;return[\"append\",\"delete\",\"set\"].forEach(function(n){var i=e[n];e[n]=function(){i.apply(e,arguments),t.search=e.toString()}}),e},enumerable:!0}}),n.createObjectURL=function(e){return t.createObjectURL.apply(t,arguments)},n.revokeObjectURL=function(e){return t.revokeObjectURL.apply(t,arguments)},e.URL=n}(),void 0!==e.location&&!(\"origin\"in e.location)){var t=function(){return e.location.protocol+\"//\"+e.location.hostname+(e.location.port?\":\"+e.location.port:\"\")};try{Object.defineProperty(e.location,\"origin\",{get:t,enumerable:!0})}catch(n){setInterval(function(){e.location.origin=t()},100)}}}(void 0!==e?e:\"undefined\"!=typeof window?window:\"undefined\"!=typeof self?self:e);var Hr,Wr=t(function(e,t){var n;n=function(){var e=function(){},t={},n={},i={};function r(e,t){if(e){var r=i[e];if(n[e]=t,r)for(;r.length;)r[0](e,t),r.splice(0,1)}}function o(t,n){t.call&&(t={success:t}),n.length?(t.error||e)(n):(t.success||e)(t)}function a(t,n,i,r){var o,s,l=document,c=i.async,u=(i.numRetries||0)+1,f=i.before||e,d=t.replace(/^(css|img)!/,\"\");r=r||0,/(^css!|\\.css$)/.test(t)?(o=!0,(s=l.createElement(\"link\")).rel=\"stylesheet\",s.href=d):/(^img!|\\.(png|gif|jpg|svg)$)/.test(t)?(s=l.createElement(\"img\")).src=d:((s=l.createElement(\"script\")).src=t,s.async=void 0===c||c),s.onload=s.onerror=s.onbeforeload=function(e){var l=e.type[0];if(o&&\"hideFocus\"in s)try{s.sheet.cssText.length||(l=\"e\")}catch(e){l=\"e\"}if(\"e\"==l&&(r+=1)<u)return a(t,n,i,r);n(t,l,e.defaultPrevented)},!1!==f(t,s)&&l.head.appendChild(s)}function s(e,n,i){var s,l;if(n&&n.trim&&(s=n),l=(s?i:n)||{},s){if(s in t)throw\"LoadJS\";t[s]=!0}!function(e,t,n){var i,r,o=(e=e.push?e:[e]).length,s=o,l=[];for(i=function(e,n,i){if(\"e\"==n&&l.push(e),\"b\"==n){if(!i)return;l.push(e)}--o||t(l)},r=0;r<s;r++)a(e[r],i,n)}(e,function(e){o(l,e),r(s,e)},l)}return s.ready=function(e,t){return function(e,t){e=e.push?e:[e];var r,o,a,s=[],l=e.length,c=l;for(r=function(e,n){n.length&&s.push(e),--c||t(s)};l--;)o=e[l],(a=n[o])?r(o,a):(i[o]=i[o]||[]).push(r)}(e,function(e){o(t,e)}),s},s.done=function(e){r(e,[])},s.reset=function(){t={},n={},i={}},s.isDefined=function(e){return e in t},s},e.exports=n()}),zr=function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")},Gr=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,\"value\"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),Yr=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},Kr=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],i=!0,r=!1,o=void 0;try{for(var a,s=e[Symbol.iterator]();!(i=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);i=!0);}catch(e){r=!0,o=e}finally{try{!i&&s.return&&s.return()}finally{if(r)throw o}}return n}(e,t);throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")}}(),Qr=function(){function e(t){zr(this,e),this.enabled=t.config.storage.enabled,this.key=t.config.storage.key}return Gr(e,[{key:\"get\",value:function(t){if(!e.supported||!this.enabled)return null;var n=window.localStorage.getItem(this.key);if(Xr.is.empty(n))return null;var i=JSON.parse(n);return Xr.is.string(t)&&t.length?i[t]:i}},{key:\"set\",value:function(t){if(e.supported&&this.enabled&&Xr.is.object(t)){var n=this.get();Xr.is.empty(n)&&(n={}),Xr.extend(n,t),window.localStorage.setItem(this.key,JSON.stringify(n))}}}],[{key:\"supported\",get:function(){try{if(!(\"localStorage\"in window))return!1;return window.localStorage.setItem(\"___test\",\"___test\"),window.localStorage.removeItem(\"___test\"),!0}catch(e){return!1}}}]),e}(),Jr={html5:\"html5\",youtube:\"youtube\",vimeo:\"vimeo\"},$r={audio:\"audio\",video:\"video\"},Xr={is:{object:function(e){return Xr.getConstructor(e)===Object},number:function(e){return Xr.getConstructor(e)===Number&&!Number.isNaN(e)},string:function(e){return Xr.getConstructor(e)===String},boolean:function(e){return Xr.getConstructor(e)===Boolean},function:function(e){return Xr.getConstructor(e)===Function},array:function(e){return!Xr.is.nullOrUndefined(e)&&Array.isArray(e)},weakMap:function(e){return Xr.is.instanceof(e,WeakMap)},nodeList:function(e){return Xr.is.instanceof(e,NodeList)},element:function(e){return Xr.is.instanceof(e,Element)},textNode:function(e){return Xr.getConstructor(e)===Text},event:function(e){return Xr.is.instanceof(e,Event)},cue:function(e){return Xr.is.instanceof(e,window.TextTrackCue)||Xr.is.instanceof(e,window.VTTCue)},track:function(e){return Xr.is.instanceof(e,TextTrack)||!Xr.is.nullOrUndefined(e)&&Xr.is.string(e.kind)},url:function(e){return!Xr.is.nullOrUndefined(e)&&/(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(e)},nullOrUndefined:function(e){return null==e},empty:function(e){return Xr.is.nullOrUndefined(e)||(Xr.is.string(e)||Xr.is.array(e)||Xr.is.nodeList(e))&&!e.length||Xr.is.object(e)&&!Object.keys(e).length},instanceof:function(e,t){return Boolean(e&&t&&e instanceof t)}},getConstructor:function(e){return Xr.is.nullOrUndefined(e)?null:e.constructor},getBrowser:function(){return{isIE:!!document.documentMode,isWebkit:\"WebkitAppearance\"in document.documentElement.style&&!/Edge/.test(navigator.userAgent),isIPhone:/(iPhone|iPod)/gi.test(navigator.platform),isIos:/(iPad|iPhone|iPod)/gi.test(navigator.platform)}},fetch:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"text\";return new Promise(function(n,i){try{var r=new XMLHttpRequest;if(!(\"withCredentials\"in r))return;r.addEventListener(\"load\",function(){if(\"text\"===t)try{n(JSON.parse(r.responseText))}catch(e){n(r.responseText)}else n(r.response)}),r.addEventListener(\"error\",function(){throw new Error(r.statusText)}),r.open(\"GET\",e,!0),r.responseType=t,r.send()}catch(e){i(e)}})},loadImage:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return new Promise(function(n,i){var r=new Image,o=function(){delete r.onload,delete r.onerror,(r.naturalWidth>=t?n:i)(r)};Object.assign(r,{onload:o,onerror:o,src:e})})},loadScript:function(e){return new Promise(function(t,n){Wr(e,{success:t,error:n})})},loadSprite:function(e,t){if(Xr.is.string(e)){var n=Xr.is.string(t),i=function(){return null!==document.getElementById(t)},r=function(e,t){e.innerHTML=t,n&&i()||document.body.insertAdjacentElement(\"afterbegin\",e)};if(!n||!i()){var o=Qr.supported,a=document.createElement(\"div\");if(Xr.toggleHidden(a,!0),n&&a.setAttribute(\"id\",t),o){var s=window.localStorage.getItem(\"cache-\"+t);if(null!==s){var l=JSON.parse(s);r(a,l.content)}}Xr.fetch(e).then(function(e){Xr.is.empty(e)||(o&&window.localStorage.setItem(\"cache-\"+t,JSON.stringify({content:e})),r(a,e))}).catch(function(){})}}},generateId:function(e){return e+\"-\"+Math.floor(1e4*Math.random())},wrap:function(e,t){var n=e.length?e:[e];Array.from(n).reverse().forEach(function(e,n){var i=n>0?t.cloneNode(!0):t,r=e.parentNode,o=e.nextSibling;i.appendChild(e),o?r.insertBefore(i,o):r.appendChild(i)})},createElement:function(e,t,n){var i=document.createElement(e);return Xr.is.object(t)&&Xr.setAttributes(i,t),Xr.is.string(n)&&(i.innerText=n),i},insertAfter:function(e,t){t.parentNode.insertBefore(e,t.nextSibling)},insertElement:function(e,t,n,i){t.appendChild(Xr.createElement(e,n,i))},removeElement:function(e){Xr.is.nodeList(e)||Xr.is.array(e)?Array.from(e).forEach(Xr.removeElement):Xr.is.element(e)&&Xr.is.element(e.parentNode)&&e.parentNode.removeChild(e)},emptyElement:function(e){for(var t=e.childNodes.length;t>0;)e.removeChild(e.lastChild),t-=1},replaceElement:function(e,t){return Xr.is.element(t)&&Xr.is.element(t.parentNode)&&Xr.is.element(e)?(t.parentNode.replaceChild(e,t),e):null},setAttributes:function(e,t){Xr.is.element(e)&&!Xr.is.empty(t)&&Object.entries(t).forEach(function(t){var n=Kr(t,2),i=n[0],r=n[1];e.setAttribute(i,r)})},getAttributesFromSelector:function(e,t){if(!Xr.is.string(e)||Xr.is.empty(e))return{};var n={},i=t;return e.split(\",\").forEach(function(e){var t=e.trim(),r=t.replace(\".\",\"\"),o=t.replace(/[[\\]]/g,\"\").split(\"=\"),a=o[0],s=o.length>1?o[1].replace(/[\"']/g,\"\"):\"\";switch(t.charAt(0)){case\".\":Xr.is.object(i)&&Xr.is.string(i.class)&&(i.class+=\" \"+r),n.class=r;break;case\"#\":n.id=t.replace(\"#\",\"\");break;case\"[\":n[a]=s}}),n},toggleHidden:function(e,t){if(Xr.is.element(e)){var n=t;Xr.is.boolean(n)||(n=!e.hasAttribute(\"hidden\")),n?e.setAttribute(\"hidden\",\"\"):e.removeAttribute(\"hidden\")}},toggleClass:function(e,t,n){if(Xr.is.element(e)){var i=\"toggle\";return void 0!==n&&(i=n?\"add\":\"remove\"),e.classList[i](t),e.classList.contains(t)}return null},hasClass:function(e,t){return Xr.is.element(e)&&e.classList.contains(t)},matches:function(e,t){var n={Element:Element};var i=n.matches||n.webkitMatchesSelector||n.mozMatchesSelector||n.msMatchesSelector||function(){return Array.from(document.querySelectorAll(t)).includes(this)};return i.call(e,t)},getElements:function(e){return this.elements.container.querySelectorAll(e)},getElement:function(e){return this.elements.container.querySelector(e)},getFocusElement:function(){var e=document.activeElement;return e=e&&e!==document.body?document.querySelector(\":focus\"):null},trapFocus:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(Xr.is.element(e)){var n=Xr.getElements.call(this,\"button:not(:disabled), input:not(:disabled), [tabindex]\"),i=n[0],r=n[n.length-1],o=function(e){if(\"Tab\"===e.key&&9===e.keyCode){var t=Xr.getFocusElement();t!==r||e.shiftKey?t===i&&e.shiftKey&&(r.focus(),e.preventDefault()):(i.focus(),e.preventDefault())}};t?Xr.on(this.elements.container,\"keydown\",o,!1):Xr.off(this.elements.container,\"keydown\",o,!1)}},toggleListener:function(e,t,n){var i=arguments.length>3&&void 0!==arguments[3]&&arguments[3],r=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],o=arguments.length>5&&void 0!==arguments[5]&&arguments[5];if(!Xr.is.empty(e)&&!Xr.is.empty(t)&&Xr.is.function(n))if(Xr.is.nodeList(e)||Xr.is.array(e))Array.from(e).forEach(function(e){e instanceof Node&&Xr.toggleListener.call(null,e,t,n,i,r,o)});else{var a=t.split(\" \"),s=o;Zr.passiveListeners&&(s={passive:r,capture:o}),a.forEach(function(t){e[i?\"addEventListener\":\"removeEventListener\"](t,n,s)})}},on:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"\",n=arguments[2],i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],r=arguments.length>4&&void 0!==arguments[4]&&arguments[4];Xr.toggleListener(e,t,n,!0,i,r)},off:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"\",n=arguments[2],i=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],r=arguments.length>4&&void 0!==arguments[4]&&arguments[4];Xr.toggleListener(e,t,n,!1,i,r)},dispatchEvent:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"\",n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};if(Xr.is.element(e)&&!Xr.is.empty(t)){var r=new CustomEvent(t,{bubbles:n,detail:Object.assign({},i,{plyr:this})});e.dispatchEvent(r)}},toggleState:function(e,t){if(Xr.is.array(e)||Xr.is.nodeList(e))Array.from(e).forEach(function(e){return Xr.toggleState(e,t)});else if(Xr.is.element(e)){var n=\"true\"===e.getAttribute(\"aria-pressed\"),i=Xr.is.boolean(t)?t:!n;e.setAttribute(\"aria-pressed\",i)}},format:function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];return Xr.is.empty(e)?e:e.toString().replace(/{(\\d+)}/g,function(e,t){return Xr.is.string(n[t])?n[t]:\"\"})},getPercentage:function(e,t){return 0===e||0===t||Number.isNaN(e)||Number.isNaN(t)?0:(e/t*100).toFixed(2)},getHours:function(e){return parseInt(e/60/60%60,10)},getMinutes:function(e){return parseInt(e/60%60,10)},getSeconds:function(e){return parseInt(e%60,10)},formatTime:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!Xr.is.number(e))return Xr.formatTime(null,t,n);var i=function(e){return(\"0\"+e).slice(-2)},r=Xr.getHours(e),o=Xr.getMinutes(e),a=Xr.getSeconds(e);return t||r>0?r+=\":\":r=\"\",(n?\"-\":\"\")+r+i(o)+\":\"+i(a)},replaceAll:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"\",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:\"\";return e.replace(new RegExp(t.toString().replace(/([.*+?^=!:${}()|[\\]/\\\\])/g,\"\\\\$1\"),\"g\"),n.toString())},toTitleCase:function(){return(arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\").toString().replace(/\\w\\S*/g,function(e){return e.charAt(0).toUpperCase()+e.substr(1).toLowerCase()})},toPascalCase:function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\").toString();return e=Xr.replaceAll(e,\"-\",\" \"),e=Xr.replaceAll(e,\"_\",\" \"),e=Xr.toTitleCase(e),Xr.replaceAll(e,\" \",\"\")},toCamelCase:function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\").toString();return(e=Xr.toPascalCase(e)).charAt(0).toLowerCase()+e.slice(1)},extend:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length,n=Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];if(!n.length)return e;var r=n.shift();return Xr.is.object(r)?(Object.keys(r).forEach(function(t){Xr.is.object(r[t])?(Object.keys(e).includes(t)||Object.assign(e,Yr({},t,{})),Xr.extend(e[t],r[t])):Object.assign(e,Yr({},t,r[t]))}),Xr.extend.apply(Xr,[e].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}(n)))):e},dedupe:function(e){return Xr.is.array(e)?e.filter(function(t,n){return e.indexOf(t)===n}):e},cloneDeep:function(e){return JSON.parse(JSON.stringify(e))},getDeep:function(e,t){return t.split(\".\").reduce(function(e,t){return e&&e[t]},e)},closest:function(e,t){return Xr.is.array(e)&&e.length?e.reduce(function(e,n){return Math.abs(n-t)<Math.abs(e-t)?n:e}):null},getProviderByUrl:function(e){return/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(e)?Jr.youtube:/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{0,9}(?=\\b|\\/)/.test(e)?Jr.vimeo:null},parseYouTubeId:function(e){if(Xr.is.empty(e))return null;return e.match(/^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/)?RegExp.$2:e},parseVimeoId:function(e){if(Xr.is.empty(e))return null;if(Xr.is.number(Number(e)))return e;return e.match(/^.*(vimeo.com\\/|video\\/)(\\d+).*/)?RegExp.$2:e},parseUrl:function(e){var t=document.createElement(\"a\");return t.href=e,t},getUrlParams:function(e){var t=e;(e.startsWith(\"http://\")||e.startsWith(\"https://\"))&&(t=Xr.parseUrl(e).search);return Xr.is.empty(t)?null:t.slice(t.indexOf(\"?\")+1).split(\"&\").reduce(function(e,t){var n=t.split(\"=\"),i=Kr(n,2),r=i[0],o=i[1];return Object.assign(e,Yr({},r,decodeURIComponent(o)))},{})},buildUrlParams:function(e){return Xr.is.object(e)?Object.keys(e).map(function(t){return encodeURIComponent(t)+\"=\"+encodeURIComponent(e[t])}).join(\"&\"):\"\"},stripHTML:function(e){var t=document.createDocumentFragment(),n=document.createElement(\"div\");return t.appendChild(n),n.innerHTML=e,t.firstChild.innerText},getHTML:function(e){var t=document.createElement(\"div\");return t.appendChild(e),t.innerHTML},getAspectRatio:function(e,t){var n=function e(t,n){return 0===n?t:e(n,t%n)}(e,t);return e/n+\":\"+t/n},get transitionEndEvent(){var e=document.createElement(\"span\"),t={WebkitTransition:\"webkitTransitionEnd\",MozTransition:\"transitionend\",OTransition:\"oTransitionEnd otransitionend\",transition:\"transitionend\"},n=Object.keys(t).find(function(t){return void 0!==e.style[t]});return!!Xr.is.string(n)&&t[n]},repaint:function(e){setTimeout(function(){Xr.toggleHidden(e,!0),e.offsetHeight,Xr.toggleHidden(e,!1)},0)}},Zr={audio:\"canPlayType\"in document.createElement(\"audio\"),video:\"canPlayType\"in document.createElement(\"video\"),check:function(e,t,n){var i=!1,r=!1,o=Xr.getBrowser(),a=o.isIPhone&&n&&Zr.playsinline;switch(t+\":\"+e){case\"html5:video\":r=(i=Zr.video)&&Zr.rangeInput&&(!o.isIPhone||a);break;case\"html5:audio\":r=(i=Zr.audio)&&Zr.rangeInput;break;case\"youtube:video\":case\"vimeo:video\":i=!0,r=Zr.rangeInput&&(!o.isIPhone||a);break;default:r=(i=Zr.audio&&Zr.video)&&Zr.rangeInput}return{api:i,ui:r}},pip:!Xr.getBrowser().isIPhone&&Xr.is.function(Xr.createElement(\"video\").webkitSetPresentationMode),airplay:Xr.is.function(window.WebKitPlaybackTargetAvailabilityEvent),playsinline:\"playsInline\"in document.createElement(\"video\"),mime:function(e){var t=this.media;try{if(!this.isHTML5||!Xr.is.function(t.canPlayType))return!1;if(e.includes(\"codecs=\"))return t.canPlayType(e).replace(/no/,\"\");if(this.isVideo)switch(e){case\"video/webm\":return t.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/,\"\");case\"video/mp4\":return t.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/,\"\");case\"video/ogg\":return t.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/,\"\");default:return!1}else if(this.isAudio)switch(e){case\"audio/mpeg\":return t.canPlayType(\"audio/mpeg;\").replace(/no/,\"\");case\"audio/ogg\":return t.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/,\"\");case\"audio/wav\":return t.canPlayType('audio/wav; codecs=\"1\"').replace(/no/,\"\");default:return!1}}catch(e){return!1}return!1},textTracks:\"textTracks\"in document.createElement(\"video\"),passiveListeners:function(){var e=!1;try{var t=Object.defineProperty({},\"passive\",{get:function(){return e=!0,null}});window.addEventListener(\"test\",null,t),window.removeEventListener(\"test\",null,t)}catch(e){}return e}(),rangeInput:(Hr=document.createElement(\"input\"),Hr.type=\"range\",\"range\"===Hr.type),touch:\"ontouchstart\"in document.documentElement,transitions:!1!==Xr.transitionEndEvent,reducedMotion:\"matchMedia\"in window&&window.matchMedia(\"(prefers-reduced-motion)\").matches},eo={getSources:function(){return this.isHTML5?this.media.querySelectorAll(\"source\"):null},getQualityOptions:function(){if(!this.isHTML5)return null;var e=eo.getSources.call(this);if(Xr.is.empty(e))return null;var t=Array.from(e).filter(function(e){return!Xr.is.empty(e.getAttribute(\"size\"))});return Xr.is.empty(t)?null:Xr.dedupe(t.map(function(e){return Number(e.getAttribute(\"size\"))}))},extend:function(){if(this.isHTML5){var e=this;Object.defineProperty(e.media,\"quality\",{get:function(){var t=eo.getSources.call(e);if(Xr.is.empty(t))return null;var n=Array.from(t).filter(function(t){return t.getAttribute(\"src\")===e.source});return Xr.is.empty(n)?null:Number(n[0].getAttribute(\"size\"))},set:function(t){var n=eo.getSources.call(e);if(!Xr.is.empty(n)){var i=Array.from(n).filter(function(e){return Number(e.getAttribute(\"size\"))===t});if(!Xr.is.empty(i)){var r=i.filter(function(t){return Zr.mime.call(e,t.getAttribute(\"type\"))});if(!Xr.is.empty(r)){Xr.dispatchEvent.call(e,e.media,\"qualityrequested\",!1,{quality:t});var o=e.currentTime,a=e.playing;e.media.src=r[0].getAttribute(\"src\");e.on(\"loadedmetadata\",function t(){e.currentTime=o,e.off(\"loadedmetadata\",t)}),e.media.load(),a&&e.play(),Xr.dispatchEvent.call(e,e.media,\"qualitychange\",!1,{quality:t})}}}}})}},cancelRequests:function(){this.isHTML5&&(Xr.removeElement(eo.getSources()),this.media.setAttribute(\"src\",this.config.blankVideo),this.media.load(),this.debug.log(\"Cancelled network requests\"))}},to=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(Xr.is.empty(e)||Xr.is.empty(t))return\"\";var n=Xr.getDeep(t.i18n,e);if(Xr.is.empty(n))return\"\";var i={\"{seektime}\":t.seekTime,\"{title}\":t.title};return Object.entries(i).forEach(function(e){var t=Kr(e,2),i=t[0],r=t[1];n=Xr.replaceAll(n,i,r)}),n},no=Xr.getBrowser(),io={getIconUrl:function(){var e=new URL(this.config.iconUrl,window.location).host!==window.location.host||no.isIE&&!window.svg4everybody;return{url:this.config.iconUrl,cors:e}},findElements:function(){try{return this.elements.controls=Xr.getElement.call(this,this.config.selectors.controls.wrapper),this.elements.buttons={play:Xr.getElements.call(this,this.config.selectors.buttons.play),pause:Xr.getElement.call(this,this.config.selectors.buttons.pause),restart:Xr.getElement.call(this,this.config.selectors.buttons.restart),rewind:Xr.getElement.call(this,this.config.selectors.buttons.rewind),fastForward:Xr.getElement.call(this,this.config.selectors.buttons.fastForward),mute:Xr.getElement.call(this,this.config.selectors.buttons.mute),pip:Xr.getElement.call(this,this.config.selectors.buttons.pip),airplay:Xr.getElement.call(this,this.config.selectors.buttons.airplay),settings:Xr.getElement.call(this,this.config.selectors.buttons.settings),captions:Xr.getElement.call(this,this.config.selectors.buttons.captions),fullscreen:Xr.getElement.call(this,this.config.selectors.buttons.fullscreen)},this.elements.progress=Xr.getElement.call(this,this.config.selectors.progress),this.elements.inputs={seek:Xr.getElement.call(this,this.config.selectors.inputs.seek),volume:Xr.getElement.call(this,this.config.selectors.inputs.volume)},this.elements.display={buffer:Xr.getElement.call(this,this.config.selectors.display.buffer),currentTime:Xr.getElement.call(this,this.config.selectors.display.currentTime),duration:Xr.getElement.call(this,this.config.selectors.display.duration)},Xr.is.element(this.elements.progress)&&(this.elements.display.seekTooltip=this.elements.progress.querySelector(\".\"+this.config.classNames.tooltip)),!0}catch(e){return this.debug.warn(\"It looks like there is a problem with your custom controls HTML\",e),this.toggleNativeControls(!0),!1}},createIcon:function(e,t){var n=io.getIconUrl.call(this),i=(n.cors?\"\":n.url)+\"#\"+this.config.iconPrefix,r=document.createElementNS(\"http://www.w3.org/2000/svg\",\"svg\");Xr.setAttributes(r,Xr.extend(t,{role:\"presentation\",focusable:\"false\"}));var o=document.createElementNS(\"http://www.w3.org/2000/svg\",\"use\"),a=i+\"-\"+e;return\"href\"in o?o.setAttributeNS(\"http://www.w3.org/1999/xlink\",\"href\",a):o.setAttributeNS(\"http://www.w3.org/1999/xlink\",\"xlink:href\",a),r.appendChild(o),r},createLabel:function(e,t){var n=to(e,this.config),i=Object.assign({},t);switch(e){case\"pip\":n=\"PIP\";break;case\"airplay\":n=\"AirPlay\"}return\"class\"in i?i.class+=\" \"+this.config.classNames.hidden:i.class=this.config.classNames.hidden,Xr.createElement(\"span\",i,n)},createBadge:function(e){if(Xr.is.empty(e))return null;var t=Xr.createElement(\"span\",{class:this.config.classNames.menu.value});return t.appendChild(Xr.createElement(\"span\",{class:this.config.classNames.menu.badge},e)),t},createButton:function(e,t){var n=Xr.createElement(\"button\"),i=Object.assign({},t),r=Xr.toCamelCase(e),o=!1,a=void 0,s=void 0,l=void 0,c=void 0;switch(\"type\"in i||(i.type=\"button\"),\"class\"in i?i.class.includes(this.config.classNames.control)&&(i.class+=\" \"+this.config.classNames.control):i.class=this.config.classNames.control,e){case\"play\":o=!0,a=\"play\",l=\"pause\",s=\"play\",c=\"pause\";break;case\"mute\":o=!0,a=\"mute\",l=\"unmute\",s=\"volume\",c=\"muted\";break;case\"captions\":o=!0,a=\"enableCaptions\",l=\"disableCaptions\",s=\"captions-off\",c=\"captions-on\";break;case\"fullscreen\":o=!0,a=\"enterFullscreen\",l=\"exitFullscreen\",s=\"enter-fullscreen\",c=\"exit-fullscreen\";break;case\"play-large\":i.class+=\" \"+this.config.classNames.control+\"--overlaid\",r=\"play\",a=\"play\",s=\"play\";break;default:a=r,s=e}return o?(n.appendChild(io.createIcon.call(this,c,{class:\"icon--pressed\"})),n.appendChild(io.createIcon.call(this,s,{class:\"icon--not-pressed\"})),n.appendChild(io.createLabel.call(this,l,{class:\"label--pressed\"})),n.appendChild(io.createLabel.call(this,a,{class:\"label--not-pressed\"})),i[\"aria-pressed\"]=!1):(n.appendChild(io.createIcon.call(this,s)),n.appendChild(io.createLabel.call(this,a))),Xr.extend(i,Xr.getAttributesFromSelector(this.config.selectors.buttons[r],i)),Xr.setAttributes(n,i),\"play\"===r?(Xr.is.array(this.elements.buttons[r])||(this.elements.buttons[r]=[]),this.elements.buttons[r].push(n)):this.elements.buttons[r]=n,n},createRange:function(e,t){var n=Xr.createElement(\"label\",{for:t.id,id:t.id+\"-label\",class:this.config.classNames.hidden},to(e,this.config)),i=Xr.createElement(\"input\",Xr.extend(Xr.getAttributesFromSelector(this.config.selectors.inputs[e]),{type:\"range\",min:0,max:100,step:.01,value:0,autocomplete:\"off\",role:\"slider\",\"aria-labelledby\":t.id+\"-label\",\"aria-valuemin\":0,\"aria-valuemax\":100,\"aria-valuenow\":0},t));return this.elements.inputs[e]=i,io.updateRangeFill.call(this,i),{label:n,input:i}},createProgress:function(e,t){var n=Xr.createElement(\"progress\",Xr.extend(Xr.getAttributesFromSelector(this.config.selectors.display[e]),{min:0,max:100,value:0,role:\"presentation\",\"aria-hidden\":!0},t));if(\"volume\"!==e){n.appendChild(Xr.createElement(\"span\",null,\"0\"));var i=\"\";switch(e){case\"played\":i=to(\"played\",this.config);break;case\"buffer\":i=to(\"buffered\",this.config)}n.innerText=\"% \"+i.toLowerCase()}return this.elements.display[e]=n,n},createTime:function(e){var t=Xr.getAttributesFromSelector(this.config.selectors.display[e]),n=Xr.createElement(\"div\",Xr.extend(t,{class:\"plyr__time \"+t.class,\"aria-label\":to(e,this.config)}),\"00:00\");return this.elements.display[e]=n,n},createMenuItem:function(e){var t=e.value,n=e.list,i=e.type,r=e.title,o=e.badge,a=void 0===o?null:o,s=e.checked,l=void 0!==s&&s,c=Xr.createElement(\"li\"),u=Xr.createElement(\"label\",{class:this.config.classNames.control}),f=Xr.createElement(\"input\",Xr.extend(Xr.getAttributesFromSelector(this.config.selectors.inputs[i]),{type:\"radio\",name:\"plyr-\"+i,value:t,checked:l,class:\"plyr__sr-only\"})),d=Xr.createElement(\"span\",{hidden:\"\"});u.appendChild(f),u.appendChild(d),u.insertAdjacentHTML(\"beforeend\",r),Xr.is.element(a)&&u.appendChild(a),c.appendChild(u),n.appendChild(c)},updateTimeDisplay:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(Xr.is.element(e)&&Xr.is.number(t)){var i=Xr.getHours(this.duration)>0;e.innerText=Xr.formatTime(t,i,n)}},updateVolume:function(){this.supported.ui&&(Xr.is.element(this.elements.inputs.volume)&&io.setRange.call(this,this.elements.inputs.volume,this.muted?0:this.volume),Xr.is.element(this.elements.buttons.mute)&&Xr.toggleState(this.elements.buttons.mute,this.muted||0===this.volume))},setRange:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;Xr.is.element(e)&&(e.value=t,io.updateRangeFill.call(this,e))},updateProgress:function(e){var t=this;if(this.supported.ui&&Xr.is.event(e)){var n=0;if(e)switch(e.type){case\"timeupdate\":case\"seeking\":case\"seeked\":n=Xr.getPercentage(this.currentTime,this.duration),\"timeupdate\"===e.type&&io.setRange.call(this,this.elements.inputs.seek,n);break;case\"playing\":case\"progress\":!function(e,n){var i=Xr.is.number(n)?n:0,r=Xr.is.element(e)?e:t.elements.display.buffer;if(Xr.is.element(r)){r.value=i;var o=r.getElementsByTagName(\"span\")[0];Xr.is.element(o)&&(o.childNodes[0].nodeValue=i)}}(this.elements.display.buffer,100*this.buffered)}}},updateRangeFill:function(e){var t=Xr.is.event(e)?e.target:e;Xr.is.element(t)&&\"range\"===t.getAttribute(\"type\")&&(t.setAttribute(\"aria-valuenow\",t.value),no.isWebkit&&t.style.setProperty(\"--value\",t.value/t.max*100+\"%\"))},updateSeekTooltip:function(e){var t=this;if(this.config.tooltips.seek&&Xr.is.element(this.elements.inputs.seek)&&Xr.is.element(this.elements.display.seekTooltip)&&0!==this.duration){var n=0,i=this.elements.progress.getBoundingClientRect(),r=this.config.classNames.tooltip+\"--visible\",o=function(e){Xr.toggleClass(t.elements.display.seekTooltip,r,e)};if(this.touch)o(!1);else{if(Xr.is.event(e))n=100/i.width*(e.pageX-i.left);else{if(!Xr.hasClass(this.elements.display.seekTooltip,r))return;n=parseFloat(this.elements.display.seekTooltip.style.left,10)}n<0?n=0:n>100&&(n=100),io.updateTimeDisplay.call(this,this.elements.display.seekTooltip,this.duration/100*n),this.elements.display.seekTooltip.style.left=n+\"%\",Xr.is.event(e)&&[\"mouseenter\",\"mouseleave\"].includes(e.type)&&o(\"mouseenter\"===e.type)}}},timeUpdate:function(e){var t=!Xr.is.element(this.elements.display.duration)&&this.config.invertTime;io.updateTimeDisplay.call(this,this.elements.display.currentTime,t?this.duration-this.currentTime:this.currentTime,t),e&&\"timeupdate\"===e.type&&this.media.seeking||io.updateProgress.call(this,e)},durationUpdate:function(){if(this.supported.ui&&(this.config.invertTime||!this.currentTime)){var e=Xr.is.element(this.elements.display.duration);!e&&this.config.displayDuration&&this.paused&&io.updateTimeDisplay.call(this,this.elements.display.currentTime,this.duration),e&&io.updateTimeDisplay.call(this,this.elements.display.duration,this.duration),io.updateSeekTooltip.call(this)}},toggleTab:function(e,t){Xr.toggleHidden(this.elements.settings.tabs[e],!t)},setQualityMenu:function(e){var t=this;if(Xr.is.element(this.elements.settings.panes.quality)){var n=this.elements.settings.panes.quality.querySelector(\"ul\");Xr.is.array(e)&&(this.options.quality=e.filter(function(e){return t.config.quality.options.includes(e)}));var i=!Xr.is.empty(this.options.quality)&&this.options.quality.length>1;if(io.toggleTab.call(this,\"quality\",i),io.checkMenu.call(this),i){Xr.emptyElement(n);this.options.quality.sort(function(e,n){var i=t.config.quality.options;return i.indexOf(e)>i.indexOf(n)?1:-1}).forEach(function(e){io.createMenuItem.call(t,{value:e,list:n,type:\"quality\",title:io.getLabel.call(t,\"quality\",e),badge:function(e){var n=to(\"qualityBadge.\"+e,t.config);return n.length?io.createBadge.call(t,n):null}(e)})}),io.updateSetting.call(this,\"quality\",n)}}},getLabel:function(e,t){switch(e){case\"speed\":return 1===t?to(\"normal\",this.config):t+\"&times;\";case\"quality\":if(Xr.is.number(t)){var n=to(\"qualityLabel.\"+t,this.config);return n.length?n:t+\"p\"}return Xr.toTitleCase(t);case\"captions\":return ro.getLabel.call(this);default:return null}},updateSetting:function(e,t,n){var i=this.elements.settings.panes[e],r=null,o=t;switch(e){case\"captions\":r=this.currentTrack;break;default:if(r=Xr.is.empty(n)?this[e]:n,Xr.is.empty(r)&&(r=this.config[e].default),!Xr.is.empty(this.options[e])&&!this.options[e].includes(r))return void this.debug.warn(\"Unsupported value of '\"+r+\"' for \"+e);if(!this.config[e].options.includes(r))return void this.debug.warn(\"Disabled value of '\"+r+\"' for \"+e)}if(Xr.is.element(o)||(o=i&&i.querySelector(\"ul\")),Xr.is.element(o)){this.elements.settings.tabs[e].querySelector(\".\"+this.config.classNames.menu.value).innerHTML=io.getLabel.call(this,e,r);var a=o&&o.querySelector('input[value=\"'+r+'\"]');Xr.is.element(a)&&(a.checked=!0)}},setCaptionsMenu:function(){var e=this,t=this.elements.settings.panes.captions.querySelector(\"ul\"),n=ro.getTracks.call(this);if(io.toggleTab.call(this,\"captions\",n.length),Xr.emptyElement(t),io.checkMenu.call(this),n.length){var i=n.map(function(n,i){return{value:i,checked:e.captions.active&&e.currentTrack===i,title:ro.getLabel.call(e,n),badge:n.language&&io.createBadge.call(e,n.language.toUpperCase()),list:t,type:\"language\"}});i.unshift({value:-1,checked:!this.captions.active,title:to(\"disabled\",this.config),list:t,type:\"language\"}),i.forEach(io.createMenuItem.bind(this)),io.updateSetting.call(this,\"captions\",t)}},setSpeedMenu:function(e){var t=this;if(this.config.controls.includes(\"settings\")&&this.config.settings.includes(\"speed\")&&Xr.is.element(this.elements.settings.panes.speed)){Xr.is.array(e)?this.options.speed=e:(this.isHTML5||this.isVimeo)&&(this.options.speed=[.5,.75,1,1.25,1.5,1.75,2]),this.options.speed=this.options.speed.filter(function(e){return t.config.speed.options.includes(e)});var n=!Xr.is.empty(this.options.speed)&&this.options.speed.length>1;if(io.toggleTab.call(this,\"speed\",n),io.checkMenu.call(this),n){var i=this.elements.settings.panes.speed.querySelector(\"ul\");Xr.emptyElement(i),this.options.speed.forEach(function(e){io.createMenuItem.call(t,{value:e,list:i,type:\"speed\",title:io.getLabel.call(t,\"speed\",e)})}),io.updateSetting.call(this,\"speed\",i)}}},checkMenu:function(){var e=this.elements.settings.tabs,t=!Xr.is.empty(e)&&Object.values(e).some(function(e){return!e.hidden});Xr.toggleHidden(this.elements.settings.menu,!t)},toggleMenu:function(e){var t=this.elements.settings.form,n=this.elements.buttons.settings;if(Xr.is.element(t)&&Xr.is.element(n)){var i=Xr.is.boolean(e)?e:Xr.is.element(t)&&t.hasAttribute(\"hidden\");if(Xr.is.event(e)){var r=Xr.is.element(t)&&t.contains(e.target),o=e.target===this.elements.buttons.settings;if(r||!r&&!o&&i)return;o&&e.stopPropagation()}Xr.is.element(n)&&n.setAttribute(\"aria-expanded\",i),Xr.is.element(t)&&(Xr.toggleHidden(t,!i),Xr.toggleClass(this.elements.container,this.config.classNames.menu.open,i),i?t.removeAttribute(\"tabindex\"):t.setAttribute(\"tabindex\",-1))}},getTabSize:function(e){var t=e.cloneNode(!0);t.style.position=\"absolute\",t.style.opacity=0,t.removeAttribute(\"hidden\"),Array.from(t.querySelectorAll(\"input[name]\")).forEach(function(e){var t=e.getAttribute(\"name\");e.setAttribute(\"name\",t+\"-clone\")}),e.parentNode.appendChild(t);var n=t.scrollWidth,i=t.scrollHeight;return Xr.removeElement(t),{width:n,height:i}},showTab:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"\",t=this.elements.settings.menu,n=document.getElementById(e);if(Xr.is.element(n)&&\"tabpanel\"===n.getAttribute(\"role\")){var i=t.querySelector('[role=\"tabpanel\"]:not([hidden])'),r=i.parentNode;if(Array.from(t.querySelectorAll('[aria-controls=\"'+i.getAttribute(\"id\")+'\"]')).forEach(function(e){e.setAttribute(\"aria-expanded\",!1)}),Zr.transitions&&!Zr.reducedMotion){r.style.width=i.scrollWidth+\"px\",r.style.height=i.scrollHeight+\"px\";var o=io.getTabSize.call(this,n);Xr.on(r,Xr.transitionEndEvent,function e(t){t.target===r&&[\"width\",\"height\"].includes(t.propertyName)&&(r.style.width=\"\",r.style.height=\"\",Xr.off(r,Xr.transitionEndEvent,e))}),r.style.width=o.width+\"px\",r.style.height=o.height+\"px\"}Xr.toggleHidden(i,!0),i.setAttribute(\"tabindex\",-1),Xr.toggleHidden(n,!1);var a=Xr.getElements.call(this,'[aria-controls=\"'+e+'\"]');Array.from(a).forEach(function(e){e.setAttribute(\"aria-expanded\",!0)}),n.removeAttribute(\"tabindex\"),n.querySelectorAll(\"button:not(:disabled), input:not(:disabled), [tabindex]\")[0].focus()}},create:function(e){var t=this;if(Xr.is.empty(this.config.controls))return null;var n=Xr.createElement(\"div\",Xr.getAttributesFromSelector(this.config.selectors.controls.wrapper));if(this.config.controls.includes(\"restart\")&&n.appendChild(io.createButton.call(this,\"restart\")),this.config.controls.includes(\"rewind\")&&n.appendChild(io.createButton.call(this,\"rewind\")),this.config.controls.includes(\"play\")&&n.appendChild(io.createButton.call(this,\"play\")),this.config.controls.includes(\"fast-forward\")&&n.appendChild(io.createButton.call(this,\"fast-forward\")),this.config.controls.includes(\"progress\")){var i=Xr.createElement(\"div\",Xr.getAttributesFromSelector(this.config.selectors.progress)),r=io.createRange.call(this,\"seek\",{id:\"plyr-seek-\"+e.id});if(i.appendChild(r.label),i.appendChild(r.input),i.appendChild(io.createProgress.call(this,\"buffer\")),this.config.tooltips.seek){var o=Xr.createElement(\"span\",{class:this.config.classNames.tooltip},\"00:00\");i.appendChild(o),this.elements.display.seekTooltip=o}this.elements.progress=i,n.appendChild(this.elements.progress)}if(this.config.controls.includes(\"current-time\")&&n.appendChild(io.createTime.call(this,\"currentTime\")),this.config.controls.includes(\"duration\")&&n.appendChild(io.createTime.call(this,\"duration\")),this.config.controls.includes(\"mute\")&&n.appendChild(io.createButton.call(this,\"mute\")),this.config.controls.includes(\"volume\")){var a=Xr.createElement(\"div\",{class:\"plyr__volume\"}),s={max:1,step:.05,value:this.config.volume},l=io.createRange.call(this,\"volume\",Xr.extend(s,{id:\"plyr-volume-\"+e.id}));a.appendChild(l.label),a.appendChild(l.input),this.elements.volume=a,n.appendChild(a)}if(this.config.controls.includes(\"captions\")&&n.appendChild(io.createButton.call(this,\"captions\")),this.config.controls.includes(\"settings\")&&!Xr.is.empty(this.config.settings)){var c=Xr.createElement(\"div\",{class:\"plyr__menu\",hidden:\"\"});c.appendChild(io.createButton.call(this,\"settings\",{id:\"plyr-settings-toggle-\"+e.id,\"aria-haspopup\":!0,\"aria-controls\":\"plyr-settings-\"+e.id,\"aria-expanded\":!1}));var u=Xr.createElement(\"form\",{class:\"plyr__menu__container\",id:\"plyr-settings-\"+e.id,hidden:\"\",\"aria-labelled-by\":\"plyr-settings-toggle-\"+e.id,role:\"tablist\",tabindex:-1}),f=Xr.createElement(\"div\"),d=Xr.createElement(\"div\",{id:\"plyr-settings-\"+e.id+\"-home\",\"aria-labelled-by\":\"plyr-settings-toggle-\"+e.id,role:\"tabpanel\"}),h=Xr.createElement(\"ul\",{role:\"tablist\"});this.config.settings.forEach(function(n){var i=Xr.createElement(\"li\",{role:\"tab\",hidden:\"\"}),r=Xr.createElement(\"button\",Xr.extend(Xr.getAttributesFromSelector(t.config.selectors.buttons.settings),{type:\"button\",class:t.config.classNames.control+\" \"+t.config.classNames.control+\"--forward\",id:\"plyr-settings-\"+e.id+\"-\"+n+\"-tab\",\"aria-haspopup\":!0,\"aria-controls\":\"plyr-settings-\"+e.id+\"-\"+n,\"aria-expanded\":!1}),to(n,t.config)),o=Xr.createElement(\"span\",{class:t.config.classNames.menu.value});o.innerHTML=e[n],r.appendChild(o),i.appendChild(r),h.appendChild(i),t.elements.settings.tabs[n]=i}),d.appendChild(h),f.appendChild(d),this.config.settings.forEach(function(n){var i=Xr.createElement(\"div\",{id:\"plyr-settings-\"+e.id+\"-\"+n,hidden:\"\",\"aria-labelled-by\":\"plyr-settings-\"+e.id+\"-\"+n+\"-tab\",role:\"tabpanel\",tabindex:-1}),r=Xr.createElement(\"button\",{type:\"button\",class:t.config.classNames.control+\" \"+t.config.classNames.control+\"--back\",\"aria-haspopup\":!0,\"aria-controls\":\"plyr-settings-\"+e.id+\"-home\",\"aria-expanded\":!1},to(n,t.config));i.appendChild(r);var o=Xr.createElement(\"ul\");i.appendChild(o),f.appendChild(i),t.elements.settings.panes[n]=i}),u.appendChild(f),c.appendChild(u),n.appendChild(c),this.elements.settings.form=u,this.elements.settings.menu=c}return this.config.controls.includes(\"pip\")&&Zr.pip&&n.appendChild(io.createButton.call(this,\"pip\")),this.config.controls.includes(\"airplay\")&&Zr.airplay&&n.appendChild(io.createButton.call(this,\"airplay\")),this.config.controls.includes(\"fullscreen\")&&n.appendChild(io.createButton.call(this,\"fullscreen\")),this.config.controls.includes(\"play-large\")&&this.elements.container.appendChild(io.createButton.call(this,\"play-large\")),this.elements.controls=n,this.isHTML5&&io.setQualityMenu.call(this,eo.getQualityOptions.call(this)),io.setSpeedMenu.call(this),n},inject:function(){var e=this;if(this.config.loadSprite){var t=io.getIconUrl.call(this);t.cors&&Xr.loadSprite(t.url,\"sprite-plyr\")}this.id=Math.floor(1e4*Math.random());var n=null;this.elements.controls=null;var i={id:this.id,seektime:this.config.seekTime,title:this.config.title},r=!0;Xr.is.string(this.config.controls)||Xr.is.element(this.config.controls)?n=this.config.controls:Xr.is.function(this.config.controls)?n=this.config.controls.call(this,i):(n=io.create.call(this,{id:this.id,seektime:this.config.seekTime,speed:this.speed,quality:this.quality,captions:ro.getLabel.call(this)}),r=!1);var o=function(e){var t=e;return Object.entries(i).forEach(function(e){var n=Kr(e,2),i=n[0],r=n[1];t=Xr.replaceAll(t,\"{\"+i+\"}\",r)}),t};r&&(Xr.is.string(this.config.controls)?n=o(n):Xr.is.element(n)&&(n.innerHTML=o(n.innerHTML)));var a=void 0;if(Xr.is.string(this.config.selectors.controls.container)&&(a=document.querySelector(this.config.selectors.controls.container)),Xr.is.element(a)||(a=this.elements.container),Xr.is.element(n)?a.appendChild(n):n&&a.insertAdjacentHTML(\"beforeend\",n),Xr.is.element(this.elements.controls)||io.findElements.call(this),window.navigator.userAgent.includes(\"Edge\")&&Xr.repaint(a),this.config.tooltips.controls){var s=Xr.getElements.call(this,[this.config.selectors.controls.wrapper,\" \",this.config.selectors.labels,\" .\",this.config.classNames.hidden].join(\"\"));Array.from(s).forEach(function(t){Xr.toggleClass(t,e.config.classNames.hidden,!1),Xr.toggleClass(t,e.config.classNames.tooltip,!0),t.setAttribute(\"role\",\"tooltip\")})}}},ro={setup:function(){if(this.supported.ui)if(!this.isVideo||this.isYouTube||this.isHTML5&&!Zr.textTracks)Xr.is.array(this.config.controls)&&this.config.controls.includes(\"settings\")&&this.config.settings.includes(\"captions\")&&io.setCaptionsMenu.call(this);else{if(Xr.is.element(this.elements.captions)||(this.elements.captions=Xr.createElement(\"div\",Xr.getAttributesFromSelector(this.config.selectors.captions)),Xr.insertAfter(this.elements.captions,this.elements.wrapper)),Xr.getBrowser().isIE&&window.URL){var e=this.media.querySelectorAll(\"track\");Array.from(e).forEach(function(e){var t=e.getAttribute(\"src\"),n=Xr.parseUrl(t);n.hostname!==window.location.href.hostname&&[\"http:\",\"https:\"].includes(n.protocol)&&Xr.fetch(t,\"blob\").then(function(t){e.setAttribute(\"src\",window.URL.createObjectURL(t))}).catch(function(){Xr.removeElement(e)})})}var t=this.storage.get(\"captions\");Xr.is.boolean(t)||(t=this.config.captions.active);var n=this.storage.get(\"language\")||this.config.captions.language;if(\"auto\"===n){var i=(navigator.language||navigator.userLanguage).split(\"-\");n=Kr(i,1)[0]}if(ro.setLanguage.call(this,n,t),this.isHTML5){var r=this.config.captions.update?\"addtrack removetrack\":\"removetrack\";Xr.on(this.media.textTracks,r,ro.update.bind(this))}setTimeout(ro.update.bind(this),0)}},update:function(){var e=this,t=ro.getTracks.call(this,!0),n=this.captions,i=n.language,r=n.meta;this.isHTML5&&this.isVideo&&t.filter(function(e){return!r.get(e)}).forEach(function(t){e.debug.log(\"Track added\",t),r.set(t,{default:\"showing\"===t.mode}),t.mode=\"hidden\",Xr.on(t,\"cuechange\",function(){return ro.updateCues.call(e)})});var o=!t.find(function(t){return t===e.captions.currentTrackNode}),a=this.language!==i&&t.find(function(e){return e.language===i});(o||a)&&ro.setLanguage.call(this,i,this.config.captions.active),Xr.toggleClass(this.elements.container,this.config.classNames.captions.enabled,!Xr.is.empty(t)),(this.config.controls||[]).includes(\"settings\")&&this.config.settings.includes(\"captions\")&&io.setCaptionsMenu.call(this)},set:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],i=ro.getTracks.call(this);if(-1!==e)if(Xr.is.number(e))if(e in i){if(this.captions.currentTrack!==e){this.captions.currentTrack=e;var r=ro.getCurrentTrack.call(this),o=(r||{}).language;this.captions.currentTrackNode=r,t&&(this.captions.language=o),this.isVimeo&&this.embed.enableTextTrack(o),Xr.dispatchEvent.call(this,this.media,\"languagechange\")}this.isHTML5&&this.isVideo&&ro.updateCues.call(this),n&&this.toggleCaptions(!0)}else this.debug.warn(\"Track not found\",e);else this.debug.warn(\"Invalid caption argument\",e);else this.toggleCaptions(!1)},setLanguage:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(Xr.is.string(e)){this.captions.language=e.toLowerCase();var n=ro.getTracks.call(this),i=ro.getCurrentTrack.call(this,!0);ro.set.call(this,n.indexOf(i),!1,t)}else this.debug.warn(\"Invalid language argument\",e)},getTracks:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return Array.from((this.media||{}).textTracks||[]).filter(function(n){return!e.isHTML5||t||e.captions.meta.has(n)}).filter(function(e){return[\"captions\",\"subtitles\"].includes(e.kind)})},getCurrentTrack:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],n=ro.getTracks.call(this),i=function(t){return Number((e.captions.meta.get(t)||{}).default)},r=Array.from(n).sort(function(e,t){return i(t)-i(e)});return!t&&n[this.currentTrack]||r.find(function(t){return t.language===e.captions.language})||r[0]},getLabel:function(e){var t=e;return!Xr.is.track(t)&&Zr.textTracks&&this.captions.active&&(t=ro.getCurrentTrack.call(this)),Xr.is.track(t)?Xr.is.empty(t.label)?Xr.is.empty(t.language)?to(\"enabled\",this.config):e.language.toUpperCase():t.label:to(\"disabled\",this.config)},updateCues:function(e){if(this.supported.ui)if(Xr.is.element(this.elements.captions))if(Xr.is.nullOrUndefined(e)||Array.isArray(e)){var t=e;if(!t){var n=ro.getCurrentTrack.call(this);t=Array.from((n||{}).activeCues||[]).map(function(e){return e.getCueAsHTML()}).map(Xr.getHTML)}var i=t.map(function(e){return e.trim()}).join(\"\\n\");if(i!==this.elements.captions.innerHTML){Xr.emptyElement(this.elements.captions);var r=Xr.createElement(\"span\",Xr.getAttributesFromSelector(this.config.selectors.caption));r.innerHTML=i,this.elements.captions.appendChild(r),Xr.dispatchEvent.call(this,this.media,\"cuechange\")}}else this.debug.warn(\"updateCues: Invalid input\",e);else this.debug.warn(\"No captions element to render to\")}},oo=function(){},ao=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];zr(this,e),this.enabled=window.console&&t,this.enabled&&this.log(\"Debugging enabled\")}return Gr(e,[{key:\"log\",get:function(){return this.enabled?Function.prototype.bind.call(console.log,console):oo}},{key:\"warn\",get:function(){return this.enabled?Function.prototype.bind.call(console.warn,console):oo}},{key:\"error\",get:function(){return this.enabled?Function.prototype.bind.call(console.error,console):oo}}]),e}(),so={enabled:!0,title:\"\",debug:!1,autoplay:!1,autopause:!0,seekTime:10,volume:1,muted:!1,duration:null,displayDuration:!0,invertTime:!0,toggleInvert:!0,ratio:\"16:9\",clickToPlay:!0,hideControls:!0,resetOnEnd:!1,disableContextMenu:!0,loadSprite:!0,iconPrefix:\"plyr\",iconUrl:\"https://cdn.plyr.io/3.3.12/plyr.svg\",blankVideo:\"https://cdn.plyr.io/static/blank.mp4\",quality:{default:576,options:[4320,2880,2160,1440,1080,720,576,480,360,240,\"default\"]},loop:{active:!1},speed:{selected:1,options:[.5,.75,1,1.25,1.5,1.75,2]},keyboard:{focused:!0,global:!1},tooltips:{controls:!1,seek:!0},captions:{active:!1,language:\"auto\",update:!1},fullscreen:{enabled:!0,fallback:!0,iosNative:!1},storage:{enabled:!0,key:\"plyr\"},controls:[\"play-large\",\"play\",\"progress\",\"current-time\",\"mute\",\"volume\",\"captions\",\"settings\",\"pip\",\"airplay\",\"fullscreen\"],settings:[\"captions\",\"quality\",\"speed\"],i18n:{restart:\"Restart\",rewind:\"Rewind {seektime}s\",play:\"Play\",pause:\"Pause\",fastForward:\"Forward {seektime}s\",seek:\"Seek\",played:\"Played\",buffered:\"Buffered\",currentTime:\"Current time\",duration:\"Duration\",volume:\"Volume\",mute:\"Mute\",unmute:\"Unmute\",enableCaptions:\"Enable captions\",disableCaptions:\"Disable captions\",enterFullscreen:\"Enter fullscreen\",exitFullscreen:\"Exit fullscreen\",frameTitle:\"Player for {title}\",captions:\"Captions\",settings:\"Settings\",speed:\"Speed\",normal:\"Normal\",quality:\"Quality\",loop:\"Loop\",start:\"Start\",end:\"End\",all:\"All\",reset:\"Reset\",disabled:\"Disabled\",enabled:\"Enabled\",advertisement:\"Ad\",qualityBadge:{2160:\"4K\",1440:\"HD\",1080:\"HD\",720:\"HD\",576:\"SD\",480:\"SD\"}},urls:{vimeo:{sdk:\"https://player.vimeo.com/api/player.js\",iframe:\"https://player.vimeo.com/video/{0}?{1}\",api:\"https://vimeo.com/api/v2/video/{0}.json\"},youtube:{sdk:\"https://www.youtube.com/iframe_api\",api:\"https://www.googleapis.com/youtube/v3/videos?id={0}&key={1}&fields=items(snippet(title))&part=snippet\"},googleIMA:{sdk:\"https://imasdk.googleapis.com/js/sdkloader/ima3.js\"}},listeners:{seek:null,play:null,pause:null,restart:null,rewind:null,fastForward:null,mute:null,volume:null,captions:null,fullscreen:null,pip:null,airplay:null,speed:null,quality:null,loop:null,language:null},events:[\"ended\",\"progress\",\"stalled\",\"playing\",\"waiting\",\"canplay\",\"canplaythrough\",\"loadstart\",\"loadeddata\",\"loadedmetadata\",\"timeupdate\",\"volumechange\",\"play\",\"pause\",\"error\",\"seeking\",\"seeked\",\"emptied\",\"ratechange\",\"cuechange\",\"enterfullscreen\",\"exitfullscreen\",\"captionsenabled\",\"captionsdisabled\",\"languagechange\",\"controlshidden\",\"controlsshown\",\"ready\",\"statechange\",\"qualitychange\",\"qualityrequested\",\"adsloaded\",\"adscontentpause\",\"adscontentresume\",\"adstarted\",\"adsmidpoint\",\"adscomplete\",\"adsallcomplete\",\"adsimpression\",\"adsclick\"],selectors:{editable:\"input, textarea, select, [contenteditable]\",container:\".plyr\",controls:{container:null,wrapper:\".plyr__controls\"},labels:\"[data-plyr]\",buttons:{play:'[data-plyr=\"play\"]',pause:'[data-plyr=\"pause\"]',restart:'[data-plyr=\"restart\"]',rewind:'[data-plyr=\"rewind\"]',fastForward:'[data-plyr=\"fast-forward\"]',mute:'[data-plyr=\"mute\"]',captions:'[data-plyr=\"captions\"]',fullscreen:'[data-plyr=\"fullscreen\"]',pip:'[data-plyr=\"pip\"]',airplay:'[data-plyr=\"airplay\"]',settings:'[data-plyr=\"settings\"]',loop:'[data-plyr=\"loop\"]'},inputs:{seek:'[data-plyr=\"seek\"]',volume:'[data-plyr=\"volume\"]',speed:'[data-plyr=\"speed\"]',language:'[data-plyr=\"language\"]',quality:'[data-plyr=\"quality\"]'},display:{currentTime:\".plyr__time--current\",duration:\".plyr__time--duration\",buffer:\".plyr__progress__buffer\",loop:\".plyr__progress__loop\",volume:\".plyr__volume--display\"},progress:\".plyr__progress\",captions:\".plyr__captions\",caption:\".plyr__caption\",menu:{quality:\".js-plyr__menu__list--quality\"}},classNames:{type:\"plyr--{0}\",provider:\"plyr--{0}\",video:\"plyr__video-wrapper\",embed:\"plyr__video-embed\",embedContainer:\"plyr__video-embed__container\",poster:\"plyr__poster\",posterEnabled:\"plyr__poster-enabled\",ads:\"plyr__ads\",control:\"plyr__control\",playing:\"plyr--playing\",paused:\"plyr--paused\",stopped:\"plyr--stopped\",loading:\"plyr--loading\",hover:\"plyr--hover\",tooltip:\"plyr__tooltip\",cues:\"plyr__cues\",hidden:\"plyr__sr-only\",hideControls:\"plyr--hide-controls\",isIos:\"plyr--is-ios\",isTouch:\"plyr--is-touch\",uiSupported:\"plyr--full-ui\",noTransition:\"plyr--no-transition\",menu:{value:\"plyr__menu__value\",badge:\"plyr__badge\",open:\"plyr--menu-open\"},captions:{enabled:\"plyr--captions-enabled\",active:\"plyr--captions-active\"},fullscreen:{enabled:\"plyr--fullscreen-enabled\",fallback:\"plyr--fullscreen-fallback\"},pip:{supported:\"plyr--pip-supported\",active:\"plyr--pip-active\"},airplay:{supported:\"plyr--airplay-supported\",active:\"plyr--airplay-active\"},tabFocus:\"plyr__tab-focus\"},attributes:{embed:{provider:\"data-plyr-provider\",id:\"data-plyr-embed-id\"}},keys:{google:null},ads:{enabled:!1,publisherId:\"\"}},lo=Xr.getBrowser();function co(){if(this.enabled){var e=this.player.elements.buttons.fullscreen;Xr.is.element(e)&&Xr.toggleState(e,this.active),Xr.dispatchEvent.call(this.player,this.target,this.active?\"enterfullscreen\":\"exitfullscreen\",!0),lo.isIos||Xr.trapFocus.call(this.player,this.target,this.active)}}function uo(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];e?this.scrollPosition={x:window.scrollX||0,y:window.scrollY||0}:window.scrollTo(this.scrollPosition.x,this.scrollPosition.y),document.body.style.overflow=e?\"hidden\":\"\",Xr.toggleClass(this.target,this.player.config.classNames.fullscreen.fallback,e),co.call(this)}var fo=function(){function e(t){var n=this;zr(this,e),this.player=t,this.prefix=e.prefix,this.property=e.property,this.scrollPosition={x:0,y:0},Xr.on(document,\"ms\"===this.prefix?\"MSFullscreenChange\":this.prefix+\"fullscreenchange\",function(){co.call(n)}),Xr.on(this.player.elements.container,\"dblclick\",function(e){Xr.is.element(n.player.elements.controls)&&n.player.elements.controls.contains(e.target)||n.toggle()}),this.update()}return Gr(e,[{key:\"update\",value:function(){this.enabled?this.player.debug.log((e.native?\"Native\":\"Fallback\")+\" fullscreen enabled\"):this.player.debug.log(\"Fullscreen not supported and fallback disabled\"),Xr.toggleClass(this.player.elements.container,this.player.config.classNames.fullscreen.enabled,this.enabled)}},{key:\"enter\",value:function(){this.enabled&&(lo.isIos&&this.player.config.fullscreen.iosNative?this.player.playing&&this.target.webkitEnterFullscreen():e.native?this.prefix?Xr.is.empty(this.prefix)||this.target[this.prefix+\"Request\"+this.property]():this.target.requestFullscreen():uo.call(this,!0))}},{key:\"exit\",value:function(){if(this.enabled)if(lo.isIos&&this.player.config.fullscreen.iosNative)this.target.webkitExitFullscreen(),this.player.play();else if(e.native)if(this.prefix){if(!Xr.is.empty(this.prefix)){var t=\"moz\"===this.prefix?\"Cancel\":\"Exit\";document[\"\"+this.prefix+t+this.property]()}}else(document.cancelFullScreen||document.exitFullscreen).call(document);else uo.call(this,!1)}},{key:\"toggle\",value:function(){this.active?this.exit():this.enter()}},{key:\"enabled\",get:function(){return(e.native||this.player.config.fullscreen.fallback)&&this.player.config.fullscreen.enabled&&this.player.supported.ui&&this.player.isVideo}},{key:\"active\",get:function(){return!!this.enabled&&(e.native?(this.prefix?document[\"\"+this.prefix+this.property+\"Element\"]:document.fullscreenElement)===this.target:Xr.hasClass(this.target,this.player.config.classNames.fullscreen.fallback))}},{key:\"target\",get:function(){return lo.isIos&&this.player.config.fullscreen.iosNative?this.player.media:this.player.elements.container}}],[{key:\"native\",get:function(){return!!(document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled||document.msFullscreenEnabled)}},{key:\"prefix\",get:function(){if(Xr.is.function(document.exitFullscreen))return\"\";var e=\"\";return[\"webkit\",\"moz\",\"ms\"].some(function(t){return!(!Xr.is.function(document[t+\"ExitFullscreen\"])&&!Xr.is.function(document[t+\"CancelFullScreen\"]))&&(e=t,!0)}),e}},{key:\"property\",get:function(){return\"moz\"===this.prefix?\"FullScreen\":\"Fullscreen\"}}]),e}(),ho=Xr.getBrowser(),po={addStyleHook:function(){Xr.toggleClass(this.elements.container,this.config.selectors.container.replace(\".\",\"\"),!0),Xr.toggleClass(this.elements.container,this.config.classNames.uiSupported,this.supported.ui)},toggleNativeControls:function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0]&&this.isHTML5?this.media.setAttribute(\"controls\",\"\"):this.media.removeAttribute(\"controls\")},build:function(){var e=this;if(this.listeners.media(),!this.supported.ui)return this.debug.warn(\"Basic support only for \"+this.provider+\" \"+this.type),void po.toggleNativeControls.call(this,!0);Xr.is.element(this.elements.controls)||(io.inject.call(this),this.listeners.controls()),po.toggleNativeControls.call(this),this.isHTML5&&ro.setup.call(this),this.volume=null,this.muted=null,this.speed=null,this.loop=null,this.quality=null,io.updateVolume.call(this),io.timeUpdate.call(this),po.checkPlaying.call(this),Xr.toggleClass(this.elements.container,this.config.classNames.pip.supported,Zr.pip&&this.isHTML5&&this.isVideo),Xr.toggleClass(this.elements.container,this.config.classNames.airplay.supported,Zr.airplay&&this.isHTML5),Xr.toggleClass(this.elements.container,this.config.classNames.isIos,ho.isIos),Xr.toggleClass(this.elements.container,this.config.classNames.isTouch,this.touch),this.ready=!0,setTimeout(function(){Xr.dispatchEvent.call(e,e.media,\"ready\")},0),po.setTitle.call(this),this.poster&&this.elements.poster&&!this.elements.poster.style.backgroundImage&&po.setPoster.call(this,this.poster),this.config.duration&&io.durationUpdate.call(this)},setTitle:function(){var e=to(\"play\",this.config);if(Xr.is.string(this.config.title)&&!Xr.is.empty(this.config.title)&&(e+=\", \"+this.config.title,this.elements.container.setAttribute(\"aria-label\",this.config.title)),Xr.is.nodeList(this.elements.buttons.play)&&Array.from(this.elements.buttons.play).forEach(function(t){t.setAttribute(\"aria-label\",e)}),this.isEmbed){var t=Xr.getElement.call(this,\"iframe\");if(!Xr.is.element(t))return;var n=Xr.is.empty(this.config.title)?\"video\":this.config.title,i=to(\"frameTitle\",this.config);t.setAttribute(\"title\",i.replace(\"{title}\",n))}},togglePoster:function(e){Xr.toggleClass(this.elements.container,this.config.classNames.posterEnabled,e)},setPoster:function(e){var t=this;if(this.media.setAttribute(\"poster\",e),!Xr.is.element(this.elements.poster))return Promise.reject();var n=Xr.loadImage(e).then(function(){return t.elements.poster.style.backgroundImage=\"url('\"+e+\"')\",Object.assign(t.elements.poster.style,{backgroundImage:\"url('\"+e+\"')\",backgroundSize:\"\"}),po.togglePoster.call(t,!0),e});return n.catch(function(){return po.togglePoster.call(t,!1)}),n},checkPlaying:function(e){Xr.toggleClass(this.elements.container,this.config.classNames.playing,this.playing),Xr.toggleClass(this.elements.container,this.config.classNames.paused,this.paused),Xr.toggleClass(this.elements.container,this.config.classNames.stopped,this.stopped),Xr.toggleState(this.elements.buttons.play,this.playing),Xr.is.event(e)&&\"timeupdate\"===e.type||po.toggleControls.call(this)},checkLoading:function(e){var t=this;this.loading=[\"stalled\",\"waiting\"].includes(e.type),clearTimeout(this.timers.loading),this.timers.loading=setTimeout(function(){Xr.toggleClass(t.elements.container,t.config.classNames.loading,t.loading),po.toggleControls.call(t)},this.loading?250:0)},toggleControls:function(e){var t=this.elements.controls;t&&this.config.hideControls&&this.toggleControls(Boolean(e||this.loading||this.paused||t.pressed||t.hover))}},go=Xr.getBrowser(),mo=function(){function e(t){zr(this,e),this.player=t,this.lastKey=null,this.handleKey=this.handleKey.bind(this),this.toggleMenu=this.toggleMenu.bind(this),this.firstTouch=this.firstTouch.bind(this)}return Gr(e,[{key:\"handleKey\",value:function(e){var t=this,n=e.keyCode?e.keyCode:e.which,i=\"keydown\"===e.type,r=i&&n===this.lastKey;if(!(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)&&Xr.is.number(n)){if(i){var o=Xr.getFocusElement();if(Xr.is.element(o)&&o!==this.player.elements.inputs.seek&&Xr.matches(o,this.player.config.selectors.editable))return;switch([48,49,50,51,52,53,54,56,57,32,75,38,40,77,39,37,70,67,73,76,79].includes(n)&&(e.preventDefault(),e.stopPropagation()),n){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:r||(t.player.currentTime=t.player.duration/10*(n-48));break;case 32:case 75:r||this.player.togglePlay();break;case 38:this.player.increaseVolume(.1);break;case 40:this.player.decreaseVolume(.1);break;case 77:r||(this.player.muted=!this.player.muted);break;case 39:this.player.forward();break;case 37:this.player.rewind();break;case 70:this.player.fullscreen.toggle();break;case 67:r||this.player.toggleCaptions();break;case 76:this.player.loop=!this.player.loop}!this.player.fullscreen.enabled&&this.player.fullscreen.active&&27===n&&this.player.fullscreen.toggle(),this.lastKey=n}else this.lastKey=null}}},{key:\"toggleMenu\",value:function(e){io.toggleMenu.call(this.player,e)}},{key:\"firstTouch\",value:function(){this.player.touch=!0,Xr.toggleClass(this.player.elements.container,this.player.config.classNames.isTouch,!0),Xr.off(document.body,\"touchstart\",this.firstTouch)}},{key:\"global\",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.player.config.keyboard.global&&Xr.toggleListener(window,\"keydown keyup\",this.handleKey,e,!1),Xr.toggleListener(document.body,\"click\",this.toggleMenu,e),Xr.on(document.body,\"touchstart\",this.firstTouch)}},{key:\"container\",value:function(){var e=this;!this.player.config.keyboard.global&&this.player.config.keyboard.focused&&Xr.on(this.player.elements.container,\"keydown keyup\",this.handleKey,!1),Xr.on(this.player.elements.container,\"focusout\",function(t){Xr.toggleClass(t.target,e.player.config.classNames.tabFocus,!1)}),Xr.on(this.player.elements.container,\"keydown\",function(t){9===t.keyCode&&setTimeout(function(){Xr.toggleClass(Xr.getFocusElement(),e.player.config.classNames.tabFocus,!0)},0)}),Xr.on(this.player.elements.container,\"mousemove mouseleave touchstart touchmove enterfullscreen exitfullscreen\",function(t){var n=e.player.elements.controls;\"enterfullscreen\"===t.type&&(n.pressed=!1,n.hover=!1);var i=0;[\"touchstart\",\"touchmove\",\"mousemove\"].includes(t.type)&&(po.toggleControls.call(e.player,!0),i=e.player.touch?3e3:2e3),clearTimeout(e.player.timers.controls),e.player.timers.controls=setTimeout(function(){return po.toggleControls.call(e.player,!1)},i)})}},{key:\"media\",value:function(){var e=this;if(Xr.on(this.player.media,\"timeupdate seeking seeked\",function(t){return io.timeUpdate.call(e.player,t)}),Xr.on(this.player.media,\"durationchange loadeddata loadedmetadata\",function(t){return io.durationUpdate.call(e.player,t)}),Xr.on(this.player.media,\"loadeddata\",function(){Xr.toggleHidden(e.player.elements.volume,!e.player.hasAudio),Xr.toggleHidden(e.player.elements.buttons.mute,!e.player.hasAudio)}),Xr.on(this.player.media,\"ended\",function(){e.player.isHTML5&&e.player.isVideo&&e.player.config.resetOnEnd&&e.player.restart()}),Xr.on(this.player.media,\"progress playing seeking seeked\",function(t){return io.updateProgress.call(e.player,t)}),Xr.on(this.player.media,\"volumechange\",function(t){return io.updateVolume.call(e.player,t)}),Xr.on(this.player.media,\"playing play pause ended emptied timeupdate\",function(t){return po.checkPlaying.call(e.player,t)}),Xr.on(this.player.media,\"waiting canplay seeked playing\",function(t){return po.checkLoading.call(e.player,t)}),Xr.on(this.player.media,\"playing\",function(){e.player.ads&&e.player.ads.enabled&&!e.player.ads.initialized&&e.player.ads.managerPromise.then(function(){return e.player.ads.play()}).catch(function(){return e.player.play()})}),this.player.supported.ui&&this.player.config.clickToPlay&&!this.player.isAudio){var t=Xr.getElement.call(this.player,\".\"+this.player.config.classNames.video);if(!Xr.is.element(t))return;Xr.on(t,\"click\",function(){e.player.config.hideControls&&e.player.touch&&!e.player.paused||(e.player.paused?e.player.play():e.player.ended?(e.player.restart(),e.player.play()):e.player.pause())})}this.player.supported.ui&&this.player.config.disableContextMenu&&Xr.on(this.player.elements.wrapper,\"contextmenu\",function(e){e.preventDefault()},!1),Xr.on(this.player.media,\"volumechange\",function(){e.player.storage.set({volume:e.player.volume,muted:e.player.muted})}),Xr.on(this.player.media,\"ratechange\",function(){io.updateSetting.call(e.player,\"speed\"),e.player.storage.set({speed:e.player.speed})}),Xr.on(this.player.media,\"qualityrequested\",function(t){e.player.storage.set({quality:t.detail.quality})}),Xr.on(this.player.media,\"qualitychange\",function(t){io.updateSetting.call(e.player,\"quality\",null,t.detail.quality)}),Xr.on(this.player.media,\"languagechange\",function(){io.updateSetting.call(e.player,\"captions\"),e.player.storage.set({language:e.player.language})}),Xr.on(this.player.media,\"captionsenabled captionsdisabled\",function(){io.updateSetting.call(e.player,\"captions\"),e.player.storage.set({captions:e.player.captions.active})}),Xr.on(this.player.media,this.player.config.events.concat([\"keyup\",\"keydown\"]).join(\" \"),function(t){var n=t.detail,i=void 0===n?{}:n;\"error\"===t.type&&(i=e.player.media.error),Xr.dispatchEvent.call(e.player,e.player.elements.container,t.type,!0,i)})}},{key:\"controls\",value:function(){var e=this,t=go.isIE?\"change\":\"input\",n=function(t,n,i){var r=e.player.config.listeners[i],o=!0;Xr.is.function(r)&&(o=r.call(e.player,t)),o&&Xr.is.function(n)&&n.call(e.player,t)},i=function(t,i,r,o){var a=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],s=e.player.config.listeners[o],l=Xr.is.function(s);Xr.on(t,i,function(e){return n(e,r,o)},a&&!l)};i(this.player.elements.buttons.play,\"click\",this.player.togglePlay,\"play\"),i(this.player.elements.buttons.restart,\"click\",this.player.restart,\"restart\"),i(this.player.elements.buttons.rewind,\"click\",this.player.rewind,\"rewind\"),i(this.player.elements.buttons.fastForward,\"click\",this.player.forward,\"fastForward\"),i(this.player.elements.buttons.mute,\"click\",function(){e.player.muted=!e.player.muted},\"mute\"),i(this.player.elements.buttons.captions,\"click\",this.player.toggleCaptions),i(this.player.elements.buttons.fullscreen,\"click\",function(){e.player.fullscreen.toggle()},\"fullscreen\"),i(this.player.elements.buttons.pip,\"click\",function(){e.player.pip=\"toggle\"},\"pip\"),i(this.player.elements.buttons.airplay,\"click\",this.player.airplay,\"airplay\"),i(this.player.elements.buttons.settings,\"click\",function(t){io.toggleMenu.call(e.player,t)}),i(this.player.elements.settings.form,\"click\",function(t){t.stopPropagation();var i=function(){var t=\"plyr-settings-\"+e.player.id+\"-home\";io.showTab.call(e.player,t)};if(Xr.matches(t.target,e.player.config.selectors.inputs.language))n(t,function(){e.player.currentTrack=Number(t.target.value),i()},\"language\");else if(Xr.matches(t.target,e.player.config.selectors.inputs.quality))n(t,function(){e.player.quality=t.target.value,i()},\"quality\");else if(Xr.matches(t.target,e.player.config.selectors.inputs.speed))n(t,function(){e.player.speed=parseFloat(t.target.value),i()},\"speed\");else{var r=t.target;io.showTab.call(e.player,r.getAttribute(\"aria-controls\"))}}),i(this.player.elements.inputs.seek,\"mousedown mousemove\",function(t){var n=e.player.elements.progress.getBoundingClientRect(),i=100/n.width*(t.pageX-n.left);t.currentTarget.setAttribute(\"seek-value\",i)}),i(this.player.elements.inputs.seek,\"mousedown mouseup keydown keyup touchstart touchend\",function(t){var n=t.currentTarget,i=t.keyCode?t.keyCode:t.which,r=t.type;if(\"keydown\"!==r&&\"keyup\"!==r||39===i||37===i){var o=n.hasAttribute(\"play-on-seeked\"),a=[\"mouseup\",\"touchend\",\"keyup\"].includes(t.type);o&&a?(n.removeAttribute(\"play-on-seeked\"),e.player.play()):!a&&e.player.playing&&(n.setAttribute(\"play-on-seeked\",\"\"),e.player.pause())}}),i(this.player.elements.inputs.seek,t,function(t){var n=t.currentTarget,i=n.getAttribute(\"seek-value\");Xr.is.empty(i)&&(i=n.value),n.removeAttribute(\"seek-value\"),e.player.currentTime=i/n.max*e.player.duration},\"seek\"),this.player.config.toggleInvert&&!Xr.is.element(this.player.elements.display.duration)&&i(this.player.elements.display.currentTime,\"click\",function(){0!==e.player.currentTime&&(e.player.config.invertTime=!e.player.config.invertTime,io.timeUpdate.call(e.player))}),i(this.player.elements.inputs.volume,t,function(t){e.player.volume=t.target.value},\"volume\"),go.isWebkit&&i(Xr.getElements.call(this.player,'input[type=\"range\"]'),\"input\",function(t){io.updateRangeFill.call(e.player,t.target)}),i(this.player.elements.progress,\"mouseenter mouseleave mousemove\",function(t){return io.updateSeekTooltip.call(e.player,t)}),i(this.player.elements.controls,\"mouseenter mouseleave\",function(t){e.player.elements.controls.hover=!e.player.touch&&\"mouseenter\"===t.type}),i(this.player.elements.controls,\"mousedown mouseup touchstart touchend touchcancel\",function(t){e.player.elements.controls.pressed=[\"mousedown\",\"touchstart\"].includes(t.type)}),i(this.player.elements.controls,\"focusin focusout\",function(t){var n=e.player,i=n.config,r=n.elements,o=n.timers;if(Xr.toggleClass(r.controls,i.classNames.noTransition,\"focusin\"===t.type),po.toggleControls.call(e.player,\"focusin\"===t.type),\"focusin\"===t.type){setTimeout(function(){Xr.toggleClass(r.controls,i.classNames.noTransition,!1)},0);var a=e.touch?3e3:4e3;clearTimeout(o.controls),o.controls=setTimeout(function(){return po.toggleControls.call(e.player,!1)},a)}}),i(this.player.elements.inputs.volume,\"wheel\",function(t){var n=t.webkitDirectionInvertedFromDevice,i=0;(t.deltaY<0||t.deltaX>0)&&(n?(e.player.decreaseVolume(.02),i=-1):(e.player.increaseVolume(.02),i=1)),(t.deltaY>0||t.deltaX<0)&&(n?(e.player.increaseVolume(.02),i=1):(e.player.decreaseVolume(.02),i=-1)),(1===i&&e.player.media.volume<1||-1===i&&e.player.media.volume>0)&&t.preventDefault()},\"volume\",!1)}},{key:\"clear\",value:function(){this.global(!1)}}]),e}();function yo(e){e&&!this.embed.hasPlayed&&(this.embed.hasPlayed=!0),this.media.paused===e&&(this.media.paused=!e,Xr.dispatchEvent.call(this,this.media,e?\"play\":\"pause\"))}var vo={setup:function(){var e=this;Xr.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),vo.setAspectRatio.call(this),Xr.is.object(window.Vimeo)?vo.ready.call(this):Xr.loadScript(this.config.urls.vimeo.sdk).then(function(){vo.ready.call(e)}).catch(function(t){e.debug.warn(\"Vimeo API failed to load\",t)})},setAspectRatio:function(e){var t=Xr.is.string(e)?e.split(\":\"):this.config.ratio.split(\":\"),n=100/t[0]*t[1];if(this.elements.wrapper.style.paddingBottom=n+\"%\",this.supported.ui){var i=(240-n)/4.8;this.media.style.transform=\"translateY(-\"+i+\"%)\"}},ready:function(){var e=this,t=this,n={loop:t.config.loop.active,autoplay:t.autoplay,byline:!1,portrait:!1,title:!1,speed:!0,transparent:0,gesture:\"media\",playsinline:!this.config.fullscreen.iosNative},i=Xr.buildUrlParams(n),r=t.media.getAttribute(\"src\");Xr.is.empty(r)&&(r=t.media.getAttribute(t.config.attributes.embed.id));var o=Xr.parseVimeoId(r),a=Xr.createElement(\"iframe\"),s=Xr.format(t.config.urls.vimeo.iframe,o,i);a.setAttribute(\"src\",s),a.setAttribute(\"allowfullscreen\",\"\"),a.setAttribute(\"allowtransparency\",\"\"),a.setAttribute(\"allow\",\"autoplay\");var l=Xr.createElement(\"div\",{class:t.config.classNames.embedContainer});l.appendChild(a),t.media=Xr.replaceElement(l,t.media),Xr.fetch(Xr.format(t.config.urls.vimeo.api,o),\"json\").then(function(e){if(!Xr.is.empty(e)){var n=new URL(e[0].thumbnail_large);n.pathname=n.pathname.split(\"_\")[0]+\".jpg\",po.setPoster.call(t,n.href)}}),t.embed=new window.Vimeo.Player(a,{autopause:t.config.autopause,muted:t.muted}),t.media.paused=!0,t.media.currentTime=0,t.supported.ui&&t.embed.disableTextTrack(),t.media.play=function(){return yo.call(t,!0),t.embed.play()},t.media.pause=function(){return yo.call(t,!1),t.embed.pause()},t.media.stop=function(){t.pause(),t.currentTime=0};var c=t.media.currentTime;Object.defineProperty(t.media,\"currentTime\",{get:function(){return c},set:function(e){var n=t.embed,i=t.media,r=t.paused,o=t.volume,a=r&&!n.hasPlayed;i.seeking=!0,Xr.dispatchEvent.call(t,i,\"seeking\"),Promise.resolve(a&&n.setVolume(0)).then(function(){return n.setCurrentTime(e)}).then(function(){return a&&n.pause()}).then(function(){return a&&n.setVolume(o)}).catch(function(){})}});var u=t.config.speed.selected;Object.defineProperty(t.media,\"playbackRate\",{get:function(){return u},set:function(e){t.embed.setPlaybackRate(e).then(function(){u=e,Xr.dispatchEvent.call(t,t.media,\"ratechange\")}).catch(function(e){\"Error\"===e.name&&io.setSpeedMenu.call(t,[])})}});var f=t.config.volume;Object.defineProperty(t.media,\"volume\",{get:function(){return f},set:function(e){t.embed.setVolume(e).then(function(){f=e,Xr.dispatchEvent.call(t,t.media,\"volumechange\")})}});var d=t.config.muted;Object.defineProperty(t.media,\"muted\",{get:function(){return d},set:function(e){var n=!!Xr.is.boolean(e)&&e;t.embed.setVolume(n?0:t.config.volume).then(function(){d=n,Xr.dispatchEvent.call(t,t.media,\"volumechange\")})}});var h=t.config.loop;Object.defineProperty(t.media,\"loop\",{get:function(){return h},set:function(e){var n=Xr.is.boolean(e)?e:t.config.loop.active;t.embed.setLoop(n).then(function(){h=n})}});var p=void 0;t.embed.getVideoUrl().then(function(e){p=e}).catch(function(t){e.debug.warn(t)}),Object.defineProperty(t.media,\"currentSrc\",{get:function(){return p}}),Object.defineProperty(t.media,\"ended\",{get:function(){return t.currentTime===t.duration}}),Promise.all([t.embed.getVideoWidth(),t.embed.getVideoHeight()]).then(function(t){var n=Xr.getAspectRatio(t[0],t[1]);vo.setAspectRatio.call(e,n)}),t.embed.setAutopause(t.config.autopause).then(function(e){t.config.autopause=e}),t.embed.getVideoTitle().then(function(n){t.config.title=n,po.setTitle.call(e)}),t.embed.getCurrentTime().then(function(e){c=e,Xr.dispatchEvent.call(t,t.media,\"timeupdate\")}),t.embed.getDuration().then(function(e){t.media.duration=e,Xr.dispatchEvent.call(t,t.media,\"durationchange\")}),t.embed.getTextTracks().then(function(e){t.media.textTracks=e,ro.setup.call(t)}),t.embed.on(\"cuechange\",function(e){var n=e.cues,i=(void 0===n?[]:n).map(function(e){return Xr.stripHTML(e.text)});ro.updateCues.call(t,i)}),t.embed.on(\"loaded\",function(){(t.embed.getPaused().then(function(e){yo.call(t,!e),e||Xr.dispatchEvent.call(t,t.media,\"playing\")}),Xr.is.element(t.embed.element)&&t.supported.ui)&&t.embed.element.setAttribute(\"tabindex\",-1)}),t.embed.on(\"play\",function(){yo.call(t,!0),Xr.dispatchEvent.call(t,t.media,\"playing\")}),t.embed.on(\"pause\",function(){yo.call(t,!1)}),t.embed.on(\"timeupdate\",function(e){t.media.seeking=!1,c=e.seconds,Xr.dispatchEvent.call(t,t.media,\"timeupdate\")}),t.embed.on(\"progress\",function(e){t.media.buffered=e.percent,Xr.dispatchEvent.call(t,t.media,\"progress\"),1===parseInt(e.percent,10)&&Xr.dispatchEvent.call(t,t.media,\"canplaythrough\"),t.embed.getDuration().then(function(e){e!==t.media.duration&&(t.media.duration=e,Xr.dispatchEvent.call(t,t.media,\"durationchange\"))})}),t.embed.on(\"seeked\",function(){t.media.seeking=!1,Xr.dispatchEvent.call(t,t.media,\"seeked\")}),t.embed.on(\"ended\",function(){t.media.paused=!0,Xr.dispatchEvent.call(t,t.media,\"ended\")}),t.embed.on(\"error\",function(e){t.media.error=e,Xr.dispatchEvent.call(t,t.media,\"error\")}),setTimeout(function(){return po.build.call(t)},0)}};function bo(e){switch(e){case\"hd2160\":return 2160;case 2160:return\"hd2160\";case\"hd1440\":return 1440;case 1440:return\"hd1440\";case\"hd1080\":return 1080;case 1080:return\"hd1080\";case\"hd720\":return 720;case 720:return\"hd720\";case\"large\":return 480;case 480:return\"large\";case\"medium\":return 360;case 360:return\"medium\";case\"small\":return 240;case 240:return\"small\";default:return\"default\"}}function wo(e){e&&!this.embed.hasPlayed&&(this.embed.hasPlayed=!0),this.media.paused===e&&(this.media.paused=!e,Xr.dispatchEvent.call(this,this.media,e?\"play\":\"pause\"))}var Eo={setup:function(){var e=this;Xr.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),Eo.setAspectRatio.call(this),Xr.is.object(window.YT)&&Xr.is.function(window.YT.Player)?Eo.ready.call(this):(Xr.loadScript(this.config.urls.youtube.sdk).catch(function(t){e.debug.warn(\"YouTube API failed to load\",t)}),window.onYouTubeReadyCallbacks=window.onYouTubeReadyCallbacks||[],window.onYouTubeReadyCallbacks.push(function(){Eo.ready.call(e)}),window.onYouTubeIframeAPIReady=function(){window.onYouTubeReadyCallbacks.forEach(function(e){e()})})},getTitle:function(e){var t=this;if(Xr.is.function(this.embed.getVideoData)){var n=this.embed.getVideoData().title;if(Xr.is.empty(n))return this.config.title=n,void po.setTitle.call(this)}var i=this.config.keys.google;if(Xr.is.string(i)&&!Xr.is.empty(i)){var r=Xr.format(this.config.urls.youtube.api,e,i);Xr.fetch(r).then(function(e){Xr.is.object(e)&&(t.config.title=e.items[0].snippet.title,po.setTitle.call(t))}).catch(function(){})}},setAspectRatio:function(){var e=this.config.ratio.split(\":\");this.elements.wrapper.style.paddingBottom=100/e[0]*e[1]+\"%\"},ready:function(){var e=this,t=e.media.getAttribute(\"id\");if(Xr.is.empty(t)||!t.startsWith(\"youtube-\")){var n=e.media.getAttribute(\"src\");Xr.is.empty(n)&&(n=e.media.getAttribute(this.config.attributes.embed.id));var i=Xr.parseYouTubeId(n),r=Xr.generateId(e.provider),o=Xr.createElement(\"div\",{id:r});e.media=Xr.replaceElement(o,e.media);var a=function(e){return\"https://img.youtube.com/vi/\"+i+\"/\"+e+\"default.jpg\"};Xr.loadImage(a(\"maxres\"),121).catch(function(){return Xr.loadImage(a(\"sd\"),121)}).catch(function(){return Xr.loadImage(a(\"hq\"))}).then(function(t){return po.setPoster.call(e,t.src)}).then(function(t){t.includes(\"maxres\")||(e.elements.poster.style.backgroundSize=\"cover\")}),e.embed=new window.YT.Player(r,{videoId:i,playerVars:{autoplay:e.config.autoplay?1:0,controls:e.supported.ui?0:1,rel:0,showinfo:0,iv_load_policy:3,modestbranding:1,disablekb:1,playsinline:1,widget_referrer:window?window.location.href:null,cc_load_policy:e.captions.active?1:0,cc_lang_pref:e.config.captions.language},events:{onError:function(t){if(!Xr.is.object(e.media.error)){var n={code:t.data};switch(t.data){case 2:n.message=\"The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.\";break;case 5:n.message=\"The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.\";break;case 100:n.message=\"The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.\";break;case 101:case 150:n.message=\"The owner of the requested video does not allow it to be played in embedded players.\";break;default:n.message=\"An unknown error occured\"}e.media.error=n,Xr.dispatchEvent.call(e,e.media,\"error\")}},onPlaybackQualityChange:function(){Xr.dispatchEvent.call(e,e.media,\"qualitychange\",!1,{quality:e.media.quality})},onPlaybackRateChange:function(t){var n=t.target;e.media.playbackRate=n.getPlaybackRate(),Xr.dispatchEvent.call(e,e.media,\"ratechange\")},onReady:function(t){var n=t.target;Eo.getTitle.call(e,i),e.media.play=function(){wo.call(e,!0),n.playVideo()},e.media.pause=function(){wo.call(e,!1),n.pauseVideo()},e.media.stop=function(){n.stopVideo()},e.media.duration=n.getDuration(),e.media.paused=!0,e.media.currentTime=0,Object.defineProperty(e.media,\"currentTime\",{get:function(){return Number(n.getCurrentTime())},set:function(t){e.paused&&e.embed.mute(),e.media.seeking=!0,Xr.dispatchEvent.call(e,e.media,\"seeking\"),n.seekTo(t)}}),Object.defineProperty(e.media,\"playbackRate\",{get:function(){return n.getPlaybackRate()},set:function(e){n.setPlaybackRate(e)}}),Object.defineProperty(e.media,\"quality\",{get:function(){return bo(n.getPlaybackQuality())},set:function(t){var i=t;n.setPlaybackQuality(bo(i)),Xr.dispatchEvent.call(e,e.media,\"qualityrequested\",!1,{quality:i})}});var r=e.config.volume;Object.defineProperty(e.media,\"volume\",{get:function(){return r},set:function(t){r=t,n.setVolume(100*r),Xr.dispatchEvent.call(e,e.media,\"volumechange\")}});var o=e.config.muted;Object.defineProperty(e.media,\"muted\",{get:function(){return o},set:function(t){var i=Xr.is.boolean(t)?t:o;o=i,n[i?\"mute\":\"unMute\"](),Xr.dispatchEvent.call(e,e.media,\"volumechange\")}}),Object.defineProperty(e.media,\"currentSrc\",{get:function(){return n.getVideoUrl()}}),Object.defineProperty(e.media,\"ended\",{get:function(){return e.currentTime===e.duration}}),e.options.speed=n.getAvailablePlaybackRates(),e.supported.ui&&e.media.setAttribute(\"tabindex\",-1),Xr.dispatchEvent.call(e,e.media,\"timeupdate\"),Xr.dispatchEvent.call(e,e.media,\"durationchange\"),clearInterval(e.timers.buffering),e.timers.buffering=setInterval(function(){e.media.buffered=n.getVideoLoadedFraction(),(null===e.media.lastBuffered||e.media.lastBuffered<e.media.buffered)&&Xr.dispatchEvent.call(e,e.media,\"progress\"),e.media.lastBuffered=e.media.buffered,1===e.media.buffered&&(clearInterval(e.timers.buffering),Xr.dispatchEvent.call(e,e.media,\"canplaythrough\"))},200),setTimeout(function(){return po.build.call(e)},50)},onStateChange:function(t){var n,i=t.target;switch(clearInterval(e.timers.playing),e.media.seeking&&[1,2].includes(t.data)&&(e.media.seeking=!1,Xr.dispatchEvent.call(e,e.media,\"seeked\")),t.data){case-1:Xr.dispatchEvent.call(e,e.media,\"timeupdate\"),e.media.buffered=i.getVideoLoadedFraction(),Xr.dispatchEvent.call(e,e.media,\"progress\");break;case 0:wo.call(e,!1),e.media.loop?(i.stopVideo(),i.playVideo()):Xr.dispatchEvent.call(e,e.media,\"ended\");break;case 1:e.media.paused&&!e.embed.hasPlayed?e.media.pause():(wo.call(e,!0),Xr.dispatchEvent.call(e,e.media,\"playing\"),e.timers.playing=setInterval(function(){Xr.dispatchEvent.call(e,e.media,\"timeupdate\")},50),e.media.duration!==i.getDuration()&&(e.media.duration=i.getDuration(),Xr.dispatchEvent.call(e,e.media,\"durationchange\")),io.setQualityMenu.call(e,(n=i.getAvailableQualityLevels(),Xr.is.empty(n)?n:Xr.dedupe(n.map(function(e){return bo(e)})))));break;case 2:e.muted||e.embed.unMute(),wo.call(e,!1)}Xr.dispatchEvent.call(e,e.elements.container,\"statechange\",!1,{code:t.data})}}})}}},ko={setup:function(){if(this.media)if(Xr.toggleClass(this.elements.container,this.config.classNames.type.replace(\"{0}\",this.type),!0),Xr.toggleClass(this.elements.container,this.config.classNames.provider.replace(\"{0}\",this.provider),!0),this.isEmbed&&Xr.toggleClass(this.elements.container,this.config.classNames.type.replace(\"{0}\",\"video\"),!0),this.isVideo&&(this.elements.wrapper=Xr.createElement(\"div\",{class:this.config.classNames.video}),Xr.wrap(this.media,this.elements.wrapper),this.elements.poster=Xr.createElement(\"div\",{class:this.config.classNames.poster}),this.elements.wrapper.appendChild(this.elements.poster)),this.isEmbed)switch(this.provider){case\"youtube\":Eo.setup.call(this);break;case\"vimeo\":vo.setup.call(this)}else this.isHTML5&&eo.extend.call(this);else this.debug.warn(\"No media element found!\")}},To=function(){function e(t){var n=this;zr(this,e),this.player=t,this.publisherId=t.config.ads.publisherId,this.playing=!1,this.initialized=!1,this.elements={container:null,displayContainer:null},this.manager=null,this.loader=null,this.cuePoints=null,this.events={},this.safetyTimer=null,this.countdownTimer=null,this.managerPromise=new Promise(function(e,t){n.on(\"loaded\",e),n.on(\"error\",t)}),this.load()}return Gr(e,[{key:\"load\",value:function(){var e=this;this.enabled&&(Xr.is.object(window.google)&&Xr.is.object(window.google.ima)?this.ready():Xr.loadScript(this.player.config.urls.googleIMA.sdk).then(function(){e.ready()}).catch(function(){e.trigger(\"error\",new Error(\"Google IMA SDK failed to load\"))}))}},{key:\"ready\",value:function(){var e=this;this.startSafetyTimer(12e3,\"ready()\"),this.managerPromise.then(function(){e.clearSafetyTimer(\"onAdsManagerLoaded()\")}),this.listeners(),this.setupIMA()}},{key:\"setupIMA\",value:function(){this.elements.container=Xr.createElement(\"div\",{class:this.player.config.classNames.ads}),this.player.elements.container.appendChild(this.elements.container),google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED),google.ima.settings.setLocale(this.player.config.ads.language),this.elements.displayContainer=new google.ima.AdDisplayContainer(this.elements.container),this.requestAds()}},{key:\"requestAds\",value:function(){var e=this,t=this.player.elements.container;try{this.loader=new google.ima.AdsLoader(this.elements.displayContainer),this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,function(t){return e.onAdsManagerLoaded(t)},!1),this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(t){return e.onAdError(t)},!1);var n=new google.ima.AdsRequest;n.adTagUrl=this.tagUrl,n.linearAdSlotWidth=t.offsetWidth,n.linearAdSlotHeight=t.offsetHeight,n.nonLinearAdSlotWidth=t.offsetWidth,n.nonLinearAdSlotHeight=t.offsetHeight,n.forceNonLinearFullSlot=!1,n.setAdWillPlayMuted(!this.player.muted),this.loader.requestAds(n)}catch(e){this.onAdError(e)}}},{key:\"pollCountdown\",value:function(){var e=this;if(!(arguments.length>0&&void 0!==arguments[0]&&arguments[0]))return clearInterval(this.countdownTimer),void this.elements.container.removeAttribute(\"data-badge-text\");this.countdownTimer=setInterval(function(){var t=Xr.formatTime(Math.max(e.manager.getRemainingTime(),0)),n=to(\"advertisement\",e.player.config)+\" - \"+t;e.elements.container.setAttribute(\"data-badge-text\",n)},100)}},{key:\"onAdsManagerLoaded\",value:function(e){var t=this,n=new google.ima.AdsRenderingSettings;n.restoreCustomPlaybackStateOnAdBreakComplete=!0,n.enablePreloading=!0,this.manager=e.getAdsManager(this.player,n),this.cuePoints=this.manager.getCuePoints(),Xr.is.empty(this.cuePoints)||this.cuePoints.forEach(function(e){if(0!==e&&-1!==e&&e<t.player.duration){var n=t.player.elements.progress;if(Xr.is.element(n)){var i=100/t.player.duration*e,r=Xr.createElement(\"span\",{class:t.player.config.classNames.cues});r.style.left=i.toString()+\"%\",n.appendChild(r)}}}),this.manager.setVolume(this.player.volume),this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(e){return t.onAdError(e)}),Object.keys(google.ima.AdEvent.Type).forEach(function(e){t.manager.addEventListener(google.ima.AdEvent.Type[e],function(e){return t.onAdEvent(e)})}),this.trigger(\"loaded\")}},{key:\"onAdEvent\",value:function(e){var t=this,n=this.player.elements.container,i=e.getAd(),r=function(e){var n=\"ads\"+e.replace(/_/g,\"\").toLowerCase();Xr.dispatchEvent.call(t.player,t.player.media,n)};switch(e.type){case google.ima.AdEvent.Type.LOADED:this.trigger(\"loaded\"),r(e.type),this.pollCountdown(!0),i.isLinear()||(i.width=n.offsetWidth,i.height=n.offsetHeight);break;case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:r(e.type),this.loadAds();break;case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:r(e.type),this.pauseContent();break;case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:r(e.type),this.pollCountdown(),this.resumeContent();break;case google.ima.AdEvent.Type.STARTED:case google.ima.AdEvent.Type.MIDPOINT:case google.ima.AdEvent.Type.COMPLETE:case google.ima.AdEvent.Type.IMPRESSION:case google.ima.AdEvent.Type.CLICK:r(e.type)}}},{key:\"onAdError\",value:function(e){this.cancel(),this.player.debug.warn(\"Ads error\",e)}},{key:\"listeners\",value:function(){var e=this,t=this.player.elements.container,n=void 0;this.player.on(\"ended\",function(){e.loader.contentComplete()}),this.player.on(\"seeking\",function(){return n=e.player.currentTime}),this.player.on(\"seeked\",function(){var t=e.player.currentTime;Xr.is.empty(e.cuePoints)||e.cuePoints.forEach(function(i,r){n<i&&i<t&&(e.manager.discardAdBreak(),e.cuePoints.splice(r,1))})}),window.addEventListener(\"resize\",function(){e.manager&&e.manager.resize(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL)})}},{key:\"play\",value:function(){var e=this,t=this.player.elements.container;this.managerPromise||this.resumeContent(),this.managerPromise.then(function(){e.elements.displayContainer.initialize();try{e.initialized||(e.manager.init(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL),e.manager.start()),e.initialized=!0}catch(t){e.onAdError(t)}}).catch(function(){})}},{key:\"resumeContent\",value:function(){this.elements.container.style.zIndex=\"\",this.playing=!1,this.player.currentTime<this.player.duration&&this.player.play()}},{key:\"pauseContent\",value:function(){this.elements.container.style.zIndex=3,this.playing=!0,this.player.pause()}},{key:\"cancel\",value:function(){this.initialized&&this.resumeContent(),this.trigger(\"error\"),this.loadAds()}},{key:\"loadAds\",value:function(){var e=this;this.managerPromise.then(function(){e.manager&&e.manager.destroy(),e.managerPromise=new Promise(function(t){e.on(\"loaded\",t),e.player.debug.log(e.manager)}),e.requestAds()}).catch(function(){})}},{key:\"trigger\",value:function(e){for(var t=this,n=arguments.length,i=Array(n>1?n-1:0),r=1;r<n;r++)i[r-1]=arguments[r];var o=this.events[e];Xr.is.array(o)&&o.forEach(function(e){Xr.is.function(e)&&e.apply(t,i)})}},{key:\"on\",value:function(e,t){return Xr.is.array(this.events[e])||(this.events[e]=[]),this.events[e].push(t),this}},{key:\"startSafetyTimer\",value:function(e,t){var n=this;this.player.debug.log(\"Safety timer invoked from: \"+t),this.safetyTimer=setTimeout(function(){n.cancel(),n.clearSafetyTimer(\"startSafetyTimer()\")},e)}},{key:\"clearSafetyTimer\",value:function(e){Xr.is.nullOrUndefined(this.safetyTimer)||(this.player.debug.log(\"Safety timer cleared from: \"+e),clearTimeout(this.safetyTimer),this.safetyTimer=null)}},{key:\"enabled\",get:function(){return this.player.isVideo&&this.player.config.ads.enabled&&!Xr.is.empty(this.publisherId)}},{key:\"tagUrl\",get:function(){var e={AV_PUBLISHERID:\"58c25bb0073ef448b1087ad6\",AV_CHANNELID:\"5a0458dc28a06145e4519d21\",AV_URL:location.hostname,cb:Date.now(),AV_WIDTH:640,AV_HEIGHT:480,AV_CDIM2:this.publisherId};return\"https://go.aniview.com/api/adserver6/vast/?\"+Xr.buildUrlParams(e)}}]),e}(),So={insertElements:function(e,t){var n=this;Xr.is.string(t)?Xr.insertElement(e,this.media,{src:t}):Xr.is.array(t)&&t.forEach(function(t){Xr.insertElement(e,n.media,t)})},change:function(e){var t=this;Xr.is.object(e)&&\"sources\"in e&&e.sources.length?(eo.cancelRequests.call(this),this.destroy.call(this,function(){switch(t.options.quality=[],Xr.removeElement(t.media),t.media=null,Xr.is.element(t.elements.container)&&t.elements.container.removeAttribute(\"class\"),t.type=e.type,t.provider=Xr.is.empty(e.sources[0].provider)?Jr.html5:e.sources[0].provider,t.supported=Zr.check(t.type,t.provider,t.config.playsinline),t.provider+\":\"+t.type){case\"html5:video\":t.media=Xr.createElement(\"video\");break;case\"html5:audio\":t.media=Xr.createElement(\"audio\");break;case\"youtube:video\":case\"vimeo:video\":t.media=Xr.createElement(\"div\",{src:e.sources[0].src})}t.elements.container.appendChild(t.media),Xr.is.boolean(e.autoplay)&&(t.config.autoplay=e.autoplay),t.isHTML5&&(t.config.crossorigin&&t.media.setAttribute(\"crossorigin\",\"\"),t.config.autoplay&&t.media.setAttribute(\"autoplay\",\"\"),Xr.is.empty(e.poster)||(t.poster=e.poster),t.config.loop.active&&t.media.setAttribute(\"loop\",\"\"),t.config.muted&&t.media.setAttribute(\"muted\",\"\"),t.config.playsinline&&t.media.setAttribute(\"playsinline\",\"\")),po.addStyleHook.call(t),t.isHTML5&&So.insertElements.call(t,\"source\",e.sources),t.config.title=e.title,ko.setup.call(t),t.isHTML5&&(\"tracks\"in e&&So.insertElements.call(t,\"track\",e.tracks),t.media.load()),(t.isHTML5||t.isEmbed&&!t.supported.ui)&&po.build.call(t),t.fullscreen.update()},!0)):this.debug.warn(\"Invalid source format\")}},Ao=function(){function e(t,n){var i=this;if(zr(this,e),this.timers={},this.ready=!1,this.loading=!1,this.failed=!1,this.touch=Zr.touch,this.media=t,Xr.is.string(this.media)&&(this.media=document.querySelectorAll(this.media)),(window.jQuery&&this.media instanceof jQuery||Xr.is.nodeList(this.media)||Xr.is.array(this.media))&&(this.media=this.media[0]),this.config=Xr.extend({},so,e.defaults,n||{},function(){try{return JSON.parse(i.media.getAttribute(\"data-plyr-config\"))}catch(e){return{}}}()),this.elements={container:null,buttons:{},display:{},progress:{},inputs:{},settings:{menu:null,panes:{},tabs:{}},captions:null},this.captions={active:null,currentTrack:-1,meta:new WeakMap},this.fullscreen={active:!1},this.options={speed:[],quality:[]},this.debug=new ao(this.config.debug),this.debug.log(\"Config\",this.config),this.debug.log(\"Support\",Zr),!Xr.is.nullOrUndefined(this.media)&&Xr.is.element(this.media))if(this.media.plyr)this.debug.warn(\"Target already setup\");else if(this.config.enabled)if(Zr.check().api){var r=this.media.cloneNode(!0);r.autoplay=!1,this.elements.original=r;var o=this.media.tagName.toLowerCase(),a=null,s=null,l=null;switch(o){case\"div\":if(a=this.media.querySelector(\"iframe\"),Xr.is.element(a)){if(s=a.getAttribute(\"src\"),this.provider=Xr.getProviderByUrl(s),this.elements.container=this.media,this.media=a,this.elements.container.className=\"\",l=Xr.getUrlParams(s),!Xr.is.empty(l)){var c=[\"1\",\"true\"];c.includes(l.autoplay)&&(this.config.autoplay=!0),c.includes(l.loop)&&(this.config.loop.active=!0),this.isYouTube?this.config.playsinline=c.includes(l.playsinline):this.config.playsinline=!0}}else this.provider=this.media.getAttribute(this.config.attributes.embed.provider),this.media.removeAttribute(this.config.attributes.embed.provider);if(Xr.is.empty(this.provider)||!Object.keys(Jr).includes(this.provider))return void this.debug.error(\"Setup failed: Invalid provider\");this.type=$r.video;break;case\"video\":case\"audio\":this.type=o,this.provider=Jr.html5,this.media.hasAttribute(\"crossorigin\")&&(this.config.crossorigin=!0),this.media.hasAttribute(\"autoplay\")&&(this.config.autoplay=!0),this.media.hasAttribute(\"playsinline\")&&(this.config.playsinline=!0),this.media.hasAttribute(\"muted\")&&(this.config.muted=!0),this.media.hasAttribute(\"loop\")&&(this.config.loop.active=!0);break;default:return void this.debug.error(\"Setup failed: unsupported type\")}this.supported=Zr.check(this.type,this.provider,this.config.playsinline),this.supported.api?(this.listeners=new mo(this),this.storage=new Qr(this),this.media.plyr=this,Xr.is.element(this.elements.container)||(this.elements.container=Xr.createElement(\"div\"),Xr.wrap(this.media,this.elements.container)),this.elements.container.setAttribute(\"tabindex\",0),po.addStyleHook.call(this),ko.setup.call(this),this.config.debug&&Xr.on(this.elements.container,this.config.events.join(\" \"),function(e){i.debug.log(\"event: \"+e.type)}),(this.isHTML5||this.isEmbed&&!this.supported.ui)&&po.build.call(this),this.listeners.container(),this.listeners.global(),this.fullscreen=new fo(this),this.ads=new To(this),this.config.autoplay&&this.play()):this.debug.error(\"Setup failed: no support\")}else this.debug.error(\"Setup failed: no support\");else this.debug.error(\"Setup failed: disabled by config\");else this.debug.error(\"Setup failed: no suitable element passed\")}return Gr(e,[{key:\"play\",value:function(){return Xr.is.function(this.media.play)?this.media.play():null}},{key:\"pause\",value:function(){this.playing&&Xr.is.function(this.media.pause)&&this.media.pause()}},{key:\"togglePlay\",value:function(e){(Xr.is.boolean(e)?e:!this.playing)?this.play():this.pause()}},{key:\"stop\",value:function(){this.isHTML5?(this.pause(),this.restart()):Xr.is.function(this.media.stop)&&this.media.stop()}},{key:\"restart\",value:function(){this.currentTime=0}},{key:\"rewind\",value:function(e){this.currentTime=this.currentTime-(Xr.is.number(e)?e:this.config.seekTime)}},{key:\"forward\",value:function(e){this.currentTime=this.currentTime+(Xr.is.number(e)?e:this.config.seekTime)}},{key:\"increaseVolume\",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t+(Xr.is.number(e)?e:1)}},{key:\"decreaseVolume\",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t-(Xr.is.number(e)?e:1)}},{key:\"toggleCaptions\",value:function(e){if(this.supported.ui){var t=Xr.is.boolean(e)?e:!this.elements.container.classList.contains(this.config.classNames.captions.active);Xr.toggleState(this.elements.buttons.captions,t),Xr.toggleClass(this.elements.container,this.config.classNames.captions.active,t),t!==this.captions.active&&(this.captions.active=t,Xr.dispatchEvent.call(this,this.media,this.captions.active?\"captionsenabled\":\"captionsdisabled\"))}}},{key:\"airplay\",value:function(){Zr.airplay&&this.media.webkitShowPlaybackTargetPicker()}},{key:\"toggleControls\",value:function(e){if(this.supported.ui&&!this.isAudio){var t=Xr.hasClass(this.elements.container,this.config.classNames.hideControls),n=void 0===e?void 0:!e,i=Xr.toggleClass(this.elements.container,this.config.classNames.hideControls,n);if(i&&this.config.controls.includes(\"settings\")&&!Xr.is.empty(this.config.settings)&&io.toggleMenu.call(this,!1),i!==t){var r=i?\"controlshidden\":\"controlsshown\";Xr.dispatchEvent.call(this,this.media,r)}return!i}return!1}},{key:\"on\",value:function(e,t){Xr.on(this.elements.container,e,t)}},{key:\"off\",value:function(e,t){Xr.off(this.elements.container,e,t)}},{key:\"destroy\",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(this.ready){var i=function(){document.body.style.overflow=\"\",t.embed=null,n?(Object.keys(t.elements).length&&(Xr.removeElement(t.elements.buttons.play),Xr.removeElement(t.elements.captions),Xr.removeElement(t.elements.controls),Xr.removeElement(t.elements.wrapper),t.elements.buttons.play=null,t.elements.captions=null,t.elements.controls=null,t.elements.wrapper=null),Xr.is.function(e)&&e()):(t.listeners.clear(),Xr.replaceElement(t.elements.original,t.elements.container),Xr.dispatchEvent.call(t,t.elements.original,\"destroyed\",!0),Xr.is.function(e)&&e.call(t.elements.original),t.ready=!1,setTimeout(function(){t.elements=null,t.media=null},200))};switch(this.stop(),this.provider+\":\"+this.type){case\"html5:video\":case\"html5:audio\":clearTimeout(this.timers.loading),po.toggleNativeControls.call(this,!0),i();break;case\"youtube:video\":clearInterval(this.timers.buffering),clearInterval(this.timers.playing),null!==this.embed&&Xr.is.function(this.embed.destroy)&&this.embed.destroy(),i();break;case\"vimeo:video\":null!==this.embed&&this.embed.unload().then(i),setTimeout(i,200)}}}},{key:\"supports\",value:function(e){return Zr.mime.call(this,e)}},{key:\"isHTML5\",get:function(){return Boolean(this.provider===Jr.html5)}},{key:\"isEmbed\",get:function(){return Boolean(this.isYouTube||this.isVimeo)}},{key:\"isYouTube\",get:function(){return Boolean(this.provider===Jr.youtube)}},{key:\"isVimeo\",get:function(){return Boolean(this.provider===Jr.vimeo)}},{key:\"isVideo\",get:function(){return Boolean(this.type===$r.video)}},{key:\"isAudio\",get:function(){return Boolean(this.type===$r.audio)}},{key:\"playing\",get:function(){return Boolean(this.ready&&!this.paused&&!this.ended)}},{key:\"paused\",get:function(){return Boolean(this.media.paused)}},{key:\"stopped\",get:function(){return Boolean(this.paused&&0===this.currentTime)}},{key:\"ended\",get:function(){return Boolean(this.media.ended)}},{key:\"currentTime\",set:function(e){if(this.duration){var t=Xr.is.number(e)&&e>0;this.media.currentTime=t?Math.min(e,this.duration):0,this.debug.log(\"Seeking to \"+this.currentTime+\" seconds\")}},get:function(){return Number(this.media.currentTime)}},{key:\"buffered\",get:function(){var e=this.media.buffered;return Xr.is.number(e)?e:e&&e.length&&this.duration>0?e.end(0)/this.duration:0}},{key:\"seeking\",get:function(){return Boolean(this.media.seeking)}},{key:\"duration\",get:function(){var e=parseFloat(this.config.duration),t=(this.media||{}).duration||0;return e||t}},{key:\"volume\",set:function(e){var t=e;Xr.is.string(t)&&(t=Number(t)),Xr.is.number(t)||(t=this.storage.get(\"volume\")),Xr.is.number(t)||(t=this.config.volume),t>1&&(t=1),t<0&&(t=0),this.config.volume=t,this.media.volume=t,!Xr.is.empty(e)&&this.muted&&t>0&&(this.muted=!1)},get:function(){return Number(this.media.volume)}},{key:\"muted\",set:function(e){var t=e;Xr.is.boolean(t)||(t=this.storage.get(\"muted\")),Xr.is.boolean(t)||(t=this.config.muted),this.config.muted=t,this.media.muted=t},get:function(){return Boolean(this.media.muted)}},{key:\"hasAudio\",get:function(){return!this.isHTML5||(!!this.isAudio||(Boolean(this.media.mozHasAudio)||Boolean(this.media.webkitAudioDecodedByteCount)||Boolean(this.media.audioTracks&&this.media.audioTracks.length)))}},{key:\"speed\",set:function(e){var t=null;Xr.is.number(e)&&(t=e),Xr.is.number(t)||(t=this.storage.get(\"speed\")),Xr.is.number(t)||(t=this.config.speed.selected),t<.1&&(t=.1),t>2&&(t=2),this.config.speed.options.includes(t)?(this.config.speed.selected=t,this.media.playbackRate=t):this.debug.warn(\"Unsupported speed (\"+t+\")\")},get:function(){return Number(this.media.playbackRate)}},{key:\"quality\",set:function(e){var t=null;if(Xr.is.empty(e)||(t=Number(e)),Xr.is.number(t)||(t=this.storage.get(\"quality\")),Xr.is.number(t)||(t=this.config.quality.selected),Xr.is.number(t)||(t=this.config.quality.default),this.options.quality.length){if(!this.options.quality.includes(t)){var n=Xr.closest(this.options.quality,t);this.debug.warn(\"Unsupported quality option: \"+t+\", using \"+n+\" instead\"),t=n}this.config.quality.selected=t,this.media.quality=t}},get:function(){return this.media.quality}},{key:\"loop\",set:function(e){var t=Xr.is.boolean(e)?e:this.config.loop.active;this.config.loop.active=t,this.media.loop=t},get:function(){return Boolean(this.media.loop)}},{key:\"source\",set:function(e){So.change.call(this,e)},get:function(){return this.media.currentSrc}},{key:\"poster\",set:function(e){this.isVideo?po.setPoster.call(this,e):this.debug.warn(\"Poster can only be set for video\")},get:function(){return this.isVideo?this.media.getAttribute(\"poster\"):null}},{key:\"autoplay\",set:function(e){var t=Xr.is.boolean(e)?e:this.config.autoplay;this.config.autoplay=t},get:function(){return Boolean(this.config.autoplay)}},{key:\"currentTrack\",set:function(e){ro.set.call(this,e)},get:function(){var e=this.captions,t=e.active,n=e.currentTrack;return t?n:-1}},{key:\"language\",set:function(e){ro.setLanguage.call(this,e)},get:function(){return(ro.getCurrentTrack.call(this)||{}).language}},{key:\"pip\",set:function(e){var t=\"picture-in-picture\",n=\"inline\";if(Zr.pip){var i=Xr.is.boolean(e)?e:this.pip===n;this.media.webkitSetPresentationMode(i?t:n)}},get:function(){return Zr.pip?this.media.webkitPresentationMode:null}}],[{key:\"supported\",value:function(e,t,n){return Zr.check(e,t,n)}},{key:\"loadSprite\",value:function(e,t){return Xr.loadSprite(e,t)}},{key:\"setup\",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=null;return Xr.is.string(t)?i=Array.from(document.querySelectorAll(t)):Xr.is.nodeList(t)?i=Array.from(t):Xr.is.array(t)&&(i=t.filter(Xr.is.element)),Xr.is.empty(i)?null:i.map(function(t){return new e(t,n)})}}]),e}();return Ao.defaults=Xr.cloneDeep(so),Ao});\n//# sourceMappingURL=plyr.polyfilled.js.map\n"
  },
  {
    "path": "public/backend/vendors/js/pickers/pickadate/legacy.js",
    "content": "\n/*jshint\n   asi: true,\n   unused: true,\n   boss: true,\n   loopfunc: true,\n   eqnull: true\n */\n\n\n/*!\n * Legacy browser support\n */\n\n\n// Map array support\nif ( ![].map ) {\n    Array.prototype.map = function ( callback, self ) {\n        var array = this, len = array.length, newArray = new Array( len )\n        for ( var i = 0; i < len; i++ ) {\n            if ( i in array ) {\n                newArray[ i ] = callback.call( self, array[ i ], i, array )\n            }\n        }\n        return newArray\n    }\n}\n\n\n// Filter array support\nif ( ![].filter ) {\n    Array.prototype.filter = function( callback ) {\n        if ( this == null ) throw new TypeError()\n        var t = Object( this ), len = t.length >>> 0\n        if ( typeof callback != 'function' ) throw new TypeError()\n        var newArray = [], thisp = arguments[ 1 ]\n        for ( var i = 0; i < len; i++ ) {\n          if ( i in t ) {\n            var val = t[ i ]\n            if ( callback.call( thisp, val, i, t ) ) newArray.push( val )\n          }\n        }\n        return newArray\n    }\n}\n\n\n// Index of array support\nif ( ![].indexOf ) {\n    Array.prototype.indexOf = function( searchElement ) {\n        if ( this == null ) throw new TypeError()\n        var t = Object( this ), len = t.length >>> 0\n        if ( len === 0 ) return -1\n        var n = 0\n        if ( arguments.length > 1 ) {\n            n = Number( arguments[ 1 ] )\n            if ( n != n ) {\n                n = 0\n            }\n            else if ( n !== 0 && n != Infinity && n != -Infinity ) {\n                n = ( n > 0 || -1 ) * Math.floor( Math.abs( n ) )\n            }\n        }\n        if ( n >= len ) return -1\n        var k = n >= 0 ? n : Math.max( len - Math.abs( n ), 0 )\n        for ( ; k < len; k++ ) {\n            if ( k in t && t[ k ] === searchElement ) return k\n        }\n        return -1\n    }\n}\n\n\n/*!\n * Cross-Browser Split 1.1.1\n * Copyright 2007-2012 Steven Levithan <stevenlevithan.com>\n * Available under the MIT License\n * http://blog.stevenlevithan.com/archives/cross-browser-split\n */\nvar nativeSplit = String.prototype.split, compliantExecNpcg = /()??/.exec('')[1] === undefined\nString.prototype.split = function(separator, limit) {\n    var str = this\n    if (Object.prototype.toString.call(separator) !== '[object RegExp]') {\n        return nativeSplit.call(str, separator, limit)\n    }\n    var output = [],\n        flags = (separator.ignoreCase ? 'i' : '') +\n                (separator.multiline  ? 'm' : '') +\n                (separator.extended   ? 'x' : '') +\n                (separator.sticky     ? 'y' : ''),\n        lastLastIndex = 0,\n        separator2, match, lastIndex, lastLength\n    separator = new RegExp(separator.source, flags + 'g')\n    str += ''\n    if (!compliantExecNpcg) {\n        separator2 = new RegExp('^' + separator.source + '$(?!\\\\s)', flags)\n    }\n    limit = limit === undefined ? -1 >>> 0 : limit >>> 0\n    while (match = separator.exec(str)) {\n        lastIndex = match.index + match[0].length\n        if (lastIndex > lastLastIndex) {\n            output.push(str.slice(lastLastIndex, match.index))\n            if (!compliantExecNpcg && match.length > 1) {\n                match[0].replace(separator2, function () {\n                    for (var i = 1; i < arguments.length - 2; i++) {\n                        if (arguments[i] === undefined) {\n                            match[i] = undefined\n                        }\n                    }\n                })\n            }\n            if (match.length > 1 && match.index < str.length) {\n                Array.prototype.push.apply(output, match.slice(1))\n            }\n            lastLength = match[0].length\n            lastLastIndex = lastIndex\n            if (output.length >= limit) {\n                break\n            }\n        }\n        if (separator.lastIndex === match.index) {\n            separator.lastIndex++\n        }\n    }\n    if (lastLastIndex === str.length) {\n        if (lastLength || !separator.test('')) {\n            output.push('')\n        }\n    } else {\n        output.push(str.slice(lastLastIndex))\n    }\n    return output.length > limit ? output.slice(0, limit) : output\n};\n"
  },
  {
    "path": "public/backend/vendors/js/pickers/pickadate/picker.date.js",
    "content": "/*!\n * Date picker for pickadate.js v3.6.4\n * http://amsul.github.io/pickadate.js/date.htm\n */\n\n(function ( factory ) {\n\n    // AMD.\n    if ( typeof define == 'function' && define.amd )\n        define( ['./picker', 'jquery'], factory )\n\n    // Node.js/browserify.\n    else if ( typeof exports == 'object' )\n        module.exports = factory( require('./picker.js'), require('jquery') )\n\n    // Browser globals.\n    else factory( Picker, jQuery )\n\n}(function( Picker, $ ) {\n\n\n/**\n * Globals and constants\n */\nvar DAYS_IN_WEEK = 7,\n    WEEKS_IN_CALENDAR = 6,\n    _ = Picker._\n\n\n\n/**\n * The date picker constructor\n */\nfunction DatePicker( picker, settings ) {\n\n    var calendar = this,\n        element = picker.$node[ 0 ],\n        elementValue = element.value,\n        elementDataValue = picker.$node.data( 'value' ),\n        valueString = elementDataValue || elementValue,\n        formatString = elementDataValue ? settings.formatSubmit : settings.format,\n        isRTL = function() {\n\n            return element.currentStyle ?\n\n                // For IE.\n                element.currentStyle.direction == 'rtl' :\n\n                // For normal browsers.\n                getComputedStyle( picker.$root[0] ).direction == 'rtl'\n        }\n\n    calendar.settings = settings\n    calendar.$node = picker.$node\n\n    // The queue of methods that will be used to build item objects.\n    calendar.queue = {\n        min: 'measure create',\n        max: 'measure create',\n        now: 'now create',\n        select: 'parse create validate',\n        highlight: 'parse navigate create validate',\n        view: 'parse create validate viewset',\n        disable: 'deactivate',\n        enable: 'activate'\n    }\n\n    // The component's item object.\n    calendar.item = {}\n\n    calendar.item.clear = null\n    calendar.item.disable = ( settings.disable || [] ).slice( 0 )\n    calendar.item.enable = -(function( collectionDisabled ) {\n        return collectionDisabled[ 0 ] === true ? collectionDisabled.shift() : -1\n    })( calendar.item.disable )\n\n    calendar.\n        set( 'min', settings.min ).\n        set( 'max', settings.max ).\n        set( 'now' )\n\n    // When there’s a value, set the `select`, which in turn\n    // also sets the `highlight` and `view`.\n    if ( valueString ) {\n        calendar.set( 'select', valueString, {\n            format: formatString,\n            defaultValue: true\n        })\n    }\n\n    // If there’s no value, default to highlighting “today”.\n    else {\n        calendar.\n            set( 'select', null ).\n            set( 'highlight', calendar.item.now )\n    }\n\n\n    // The keycode to movement mapping.\n    calendar.key = {\n        40: 7, // Down\n        38: -7, // Up\n        39: function() { return isRTL() ? -1 : 1 }, // Right\n        37: function() { return isRTL() ? 1 : -1 }, // Left\n        go: function( timeChange ) {\n            var highlightedObject = calendar.item.highlight,\n                targetDate = new Date( highlightedObject.year, highlightedObject.month, highlightedObject.date + timeChange )\n            calendar.set(\n                'highlight',\n                targetDate,\n                { interval: timeChange }\n            )\n            this.render()\n        }\n    }\n\n\n    // Bind some picker events.\n    picker.\n        on( 'render', function() {\n            picker.$root.find( '.' + settings.klass.selectMonth ).on( 'change', function() {\n                var value = this.value\n                if ( value ) {\n                    picker.set( 'highlight', [ picker.get( 'view' ).year, value, picker.get( 'highlight' ).date ] )\n                    picker.$root.find( '.' + settings.klass.selectMonth ).trigger( 'focus' )\n                }\n            })\n            picker.$root.find( '.' + settings.klass.selectYear ).on( 'change', function() {\n                var value = this.value\n                if ( value ) {\n                    picker.set( 'highlight', [ value, picker.get( 'view' ).month, picker.get( 'highlight' ).date ] )\n                    picker.$root.find( '.' + settings.klass.selectYear ).trigger( 'focus' )\n                }\n            })\n        }, 1 ).\n        on( 'open', function() {\n            var includeToday = ''\n            if ( calendar.disabled( calendar.get('now') ) ) {\n                includeToday = ':not(.' + settings.klass.buttonToday + ')'\n            }\n            picker.$root.find( 'button' + includeToday + ', select' ).attr( 'disabled', false )\n        }, 1 ).\n        on( 'close', function() {\n            picker.$root.find( 'button, select' ).attr( 'disabled', true )\n        }, 1 )\n\n} //DatePicker\n\n\n/**\n * Set a datepicker item object.\n */\nDatePicker.prototype.set = function( type, value, options ) {\n\n    var calendar = this,\n        calendarItem = calendar.item\n\n    // If the value is `null` just set it immediately.\n    if ( value === null ) {\n        if ( type == 'clear' ) type = 'select'\n        calendarItem[ type ] = value\n        return calendar\n    }\n\n    // Otherwise go through the queue of methods, and invoke the functions.\n    // Update this as the time unit, and set the final value as this item.\n    // * In the case of `enable`, keep the queue but set `disable` instead.\n    //   And in the case of `flip`, keep the queue but set `enable` instead.\n    calendarItem[ ( type == 'enable' ? 'disable' : type == 'flip' ? 'enable' : type ) ] = calendar.queue[ type ].split( ' ' ).map( function( method ) {\n        value = calendar[ method ]( type, value, options )\n        return value\n    }).pop()\n\n    // Check if we need to cascade through more updates.\n    if ( type == 'select' ) {\n        calendar.set( 'highlight', calendarItem.select, options )\n    }\n    else if ( type == 'highlight' ) {\n        calendar.set( 'view', calendarItem.highlight, options )\n    }\n    else if ( type.match( /^(flip|min|max|disable|enable)$/ ) ) {\n        if ( calendarItem.select && calendar.disabled( calendarItem.select ) ) {\n            calendar.set( 'select', calendarItem.select, options )\n        }\n        if ( calendarItem.highlight && calendar.disabled( calendarItem.highlight ) ) {\n            calendar.set( 'highlight', calendarItem.highlight, options )\n        }\n    }\n\n    return calendar\n} //DatePicker.prototype.set\n\n\n/**\n * Get a datepicker item object.\n */\nDatePicker.prototype.get = function( type ) {\n    return this.item[ type ]\n} //DatePicker.prototype.get\n\n\n/**\n * Create a picker date object.\n */\nDatePicker.prototype.create = function( type, value, options ) {\n\n    var isInfiniteValue,\n        calendar = this\n\n    // If there’s no value, use the type as the value.\n    value = value === undefined ? type : value\n\n\n    // If it’s infinity, update the value.\n    if ( value == -Infinity || value == Infinity ) {\n        isInfiniteValue = value\n    }\n\n    // If it’s an object, use the native date object.\n    else if ( $.isPlainObject( value ) && _.isInteger( value.pick ) ) {\n        value = value.obj\n    }\n\n    // If it’s an array, convert it into a date and make sure\n    // that it’s a valid date – otherwise default to today.\n    else if ( $.isArray( value ) ) {\n        value = new Date( value[ 0 ], value[ 1 ], value[ 2 ] )\n        value = _.isDate( value ) ? value : calendar.create().obj\n    }\n\n    // If it’s a number or date object, make a normalized date.\n    else if ( _.isInteger( value ) || _.isDate( value ) ) {\n        value = calendar.normalize( new Date( value ), options )\n    }\n\n    // If it’s a literal true or any other case, set it to now.\n    else /*if ( value === true )*/ {\n        value = calendar.now( type, value, options )\n    }\n\n    // Return the compiled object.\n    return {\n        year: isInfiniteValue || value.getFullYear(),\n        month: isInfiniteValue || value.getMonth(),\n        date: isInfiniteValue || value.getDate(),\n        day: isInfiniteValue || value.getDay(),\n        obj: isInfiniteValue || value,\n        pick: isInfiniteValue || value.getTime()\n    }\n} //DatePicker.prototype.create\n\n\n/**\n * Create a range limit object using an array, date object,\n * literal “true”, or integer relative to another time.\n */\nDatePicker.prototype.createRange = function( from, to ) {\n\n    var calendar = this,\n        createDate = function( date ) {\n            if ( date === true || $.isArray( date ) || _.isDate( date ) ) {\n                return calendar.create( date )\n            }\n            return date\n        }\n\n    // Create objects if possible.\n    if ( !_.isInteger( from ) ) {\n        from = createDate( from )\n    }\n    if ( !_.isInteger( to ) ) {\n        to = createDate( to )\n    }\n\n    // Create relative dates.\n    if ( _.isInteger( from ) && $.isPlainObject( to ) ) {\n        from = [ to.year, to.month, to.date + from ];\n    }\n    else if ( _.isInteger( to ) && $.isPlainObject( from ) ) {\n        to = [ from.year, from.month, from.date + to ];\n    }\n\n    return {\n        from: createDate( from ),\n        to: createDate( to )\n    }\n} //DatePicker.prototype.createRange\n\n\n/**\n * Check if a date unit falls within a date range object.\n */\nDatePicker.prototype.withinRange = function( range, dateUnit ) {\n    range = this.createRange(range.from, range.to)\n    return dateUnit.pick >= range.from.pick && dateUnit.pick <= range.to.pick\n}\n\n\n/**\n * Check if two date range objects overlap.\n */\nDatePicker.prototype.overlapRanges = function( one, two ) {\n\n    var calendar = this\n\n    // Convert the ranges into comparable dates.\n    one = calendar.createRange( one.from, one.to )\n    two = calendar.createRange( two.from, two.to )\n\n    return calendar.withinRange( one, two.from ) || calendar.withinRange( one, two.to ) ||\n        calendar.withinRange( two, one.from ) || calendar.withinRange( two, one.to )\n}\n\n\n/**\n * Get the date today.\n */\nDatePicker.prototype.now = function( type, value, options ) {\n    value = new Date()\n    if ( options && options.rel ) {\n        value.setDate( value.getDate() + options.rel )\n    }\n    return this.normalize( value, options )\n}\n\n\n/**\n * Navigate to next/prev month.\n */\nDatePicker.prototype.navigate = function( type, value, options ) {\n\n    var targetDateObject,\n        targetYear,\n        targetMonth,\n        targetDate,\n        isTargetArray = $.isArray( value ),\n        isTargetObject = $.isPlainObject( value ),\n        viewsetObject = this.item.view/*,\n        safety = 100*/\n\n\n    if ( isTargetArray || isTargetObject ) {\n\n        if ( isTargetObject ) {\n            targetYear = value.year\n            targetMonth = value.month\n            targetDate = value.date\n        }\n        else {\n            targetYear = +value[0]\n            targetMonth = +value[1]\n            targetDate = +value[2]\n        }\n\n        // If we’re navigating months but the view is in a different\n        // month, navigate to the view’s year and month.\n        if ( options && options.nav && viewsetObject && viewsetObject.month !== targetMonth ) {\n            targetYear = viewsetObject.year\n            targetMonth = viewsetObject.month\n        }\n\n        // Figure out the expected target year and month.\n        targetDateObject = new Date( targetYear, targetMonth + ( options && options.nav ? options.nav : 0 ), 1 )\n        targetYear = targetDateObject.getFullYear()\n        targetMonth = targetDateObject.getMonth()\n\n        // If the month we’re going to doesn’t have enough days,\n        // keep decreasing the date until we reach the month’s last date.\n        while ( /*safety &&*/ new Date( targetYear, targetMonth, targetDate ).getMonth() !== targetMonth ) {\n            targetDate -= 1\n            /*safety -= 1\n            if ( !safety ) {\n                throw 'Fell into an infinite loop while navigating to ' + new Date( targetYear, targetMonth, targetDate ) + '.'\n            }*/\n        }\n\n        value = [ targetYear, targetMonth, targetDate ]\n    }\n\n    return value\n} //DatePicker.prototype.navigate\n\n\n/**\n * Normalize a date by setting the hours to midnight.\n */\nDatePicker.prototype.normalize = function( value/*, options*/ ) {\n    value.setHours( 0, 0, 0, 0 )\n    return value\n}\n\n\n/**\n * Measure the range of dates.\n */\nDatePicker.prototype.measure = function( type, value/*, options*/ ) {\n\n    var calendar = this\n    \n    // If it's an integer, get a date relative to today.\n    if ( _.isInteger( value ) ) {\n        value = calendar.now( type, value, { rel: value } )\n    }\n\n    // If it’s anything false-y, remove the limits.\n    else if ( !value ) {\n        value = type == 'min' ? -Infinity : Infinity\n    }\n\n    // If it’s a string, parse it.\n    else if ( typeof value == 'string' ) {\n        value = calendar.parse( type, value )\n    }\n\n    return value\n} ///DatePicker.prototype.measure\n\n\n/**\n * Create a viewset object based on navigation.\n */\nDatePicker.prototype.viewset = function( type, dateObject/*, options*/ ) {\n    return this.create([ dateObject.year, dateObject.month, 1 ])\n}\n\n\n/**\n * Validate a date as enabled and shift if needed.\n */\nDatePicker.prototype.validate = function( type, dateObject, options ) {\n\n    var calendar = this,\n\n        // Keep a reference to the original date.\n        originalDateObject = dateObject,\n\n        // Make sure we have an interval.\n        interval = options && options.interval ? options.interval : 1,\n\n        // Check if the calendar enabled dates are inverted.\n        isFlippedBase = calendar.item.enable === -1,\n\n        // Check if we have any enabled dates after/before now.\n        hasEnabledBeforeTarget, hasEnabledAfterTarget,\n\n        // The min & max limits.\n        minLimitObject = calendar.item.min,\n        maxLimitObject = calendar.item.max,\n\n        // Check if we’ve reached the limit during shifting.\n        reachedMin, reachedMax,\n\n        // Check if the calendar is inverted and at least one weekday is enabled.\n        hasEnabledWeekdays = isFlippedBase && calendar.item.disable.filter( function( value ) {\n\n            // If there’s a date, check where it is relative to the target.\n            if ( $.isArray( value ) ) {\n                var dateTime = calendar.create( value ).pick\n                if ( dateTime < dateObject.pick ) hasEnabledBeforeTarget = true\n                else if ( dateTime > dateObject.pick ) hasEnabledAfterTarget = true\n            }\n\n            // Return only integers for enabled weekdays.\n            return _.isInteger( value )\n        }).length/*,\n\n        safety = 100*/\n\n\n\n    // Cases to validate for:\n    // [1] Not inverted and date disabled.\n    // [2] Inverted and some dates enabled.\n    // [3] Not inverted and out of range.\n    //\n    // Cases to **not** validate for:\n    // • Navigating months.\n    // • Not inverted and date enabled.\n    // • Inverted and all dates disabled.\n    // • ..and anything else.\n    if ( !options || (!options.nav && !options.defaultValue) ) if (\n        /* 1 */ ( !isFlippedBase && calendar.disabled( dateObject ) ) ||\n        /* 2 */ ( isFlippedBase && calendar.disabled( dateObject ) && ( hasEnabledWeekdays || hasEnabledBeforeTarget || hasEnabledAfterTarget ) ) ||\n        /* 3 */ ( !isFlippedBase && (dateObject.pick <= minLimitObject.pick || dateObject.pick >= maxLimitObject.pick) )\n    ) {\n\n\n        // When inverted, flip the direction if there aren’t any enabled weekdays\n        // and there are no enabled dates in the direction of the interval.\n        if ( isFlippedBase && !hasEnabledWeekdays && ( ( !hasEnabledAfterTarget && interval > 0 ) || ( !hasEnabledBeforeTarget && interval < 0 ) ) ) {\n            interval *= -1\n        }\n\n\n        // Keep looping until we reach an enabled date.\n        while ( /*safety &&*/ calendar.disabled( dateObject ) ) {\n\n            /*safety -= 1\n            if ( !safety ) {\n                throw 'Fell into an infinite loop while validating ' + dateObject.obj + '.'\n            }*/\n\n\n            // If we’ve looped into the next/prev month with a large interval, return to the original date and flatten the interval.\n            if ( Math.abs( interval ) > 1 && ( dateObject.month < originalDateObject.month || dateObject.month > originalDateObject.month ) ) {\n                dateObject = originalDateObject\n                interval = interval > 0 ? 1 : -1\n            }\n\n\n            // If we’ve reached the min/max limit, reverse the direction, flatten the interval and set it to the limit.\n            if ( dateObject.pick <= minLimitObject.pick ) {\n                reachedMin = true\n                interval = 1\n                dateObject = calendar.create([\n                    minLimitObject.year,\n                    minLimitObject.month,\n                    minLimitObject.date + (dateObject.pick === minLimitObject.pick ? 0 : -1)\n                ])\n            }\n            else if ( dateObject.pick >= maxLimitObject.pick ) {\n                reachedMax = true\n                interval = -1\n                dateObject = calendar.create([\n                    maxLimitObject.year,\n                    maxLimitObject.month,\n                    maxLimitObject.date + (dateObject.pick === maxLimitObject.pick ? 0 : 1)\n                ])\n            }\n\n\n            // If we’ve reached both limits, just break out of the loop.\n            if ( reachedMin && reachedMax ) {\n                break\n            }\n\n\n            // Finally, create the shifted date using the interval and keep looping.\n            dateObject = calendar.create([ dateObject.year, dateObject.month, dateObject.date + interval ])\n        }\n\n    } //endif\n\n\n    // Return the date object settled on.\n    return dateObject\n} //DatePicker.prototype.validate\n\n\n/**\n * Check if a date is disabled.\n */\nDatePicker.prototype.disabled = function( dateToVerify ) {\n\n    var\n        calendar = this,\n\n        // Filter through the disabled dates to check if this is one.\n        isDisabledMatch = calendar.item.disable.filter( function( dateToDisable ) {\n\n            // If the date is a number, match the weekday with 0index and `firstDay` check.\n            if ( _.isInteger( dateToDisable ) ) {\n                return dateToVerify.day === ( calendar.settings.firstDay ? dateToDisable : dateToDisable - 1 ) % 7\n            }\n\n            // If it’s an array or a native JS date, create and match the exact date.\n            if ( $.isArray( dateToDisable ) || _.isDate( dateToDisable ) ) {\n                return dateToVerify.pick === calendar.create( dateToDisable ).pick\n            }\n\n            // If it’s an object, match a date within the “from” and “to” range.\n            if ( $.isPlainObject( dateToDisable ) ) {\n                return calendar.withinRange( dateToDisable, dateToVerify )\n            }\n        })\n\n    // If this date matches a disabled date, confirm it’s not inverted.\n    isDisabledMatch = isDisabledMatch.length && !isDisabledMatch.filter(function( dateToDisable ) {\n        return $.isArray( dateToDisable ) && dateToDisable[3] == 'inverted' ||\n            $.isPlainObject( dateToDisable ) && dateToDisable.inverted\n    }).length\n\n    // Check the calendar “enabled” flag and respectively flip the\n    // disabled state. Then also check if it’s beyond the min/max limits.\n    return calendar.item.enable === -1 ? !isDisabledMatch : isDisabledMatch ||\n        dateToVerify.pick < calendar.item.min.pick ||\n        dateToVerify.pick > calendar.item.max.pick\n\n} //DatePicker.prototype.disabled\n\n\n/**\n * Parse a string into a usable type.\n */\nDatePicker.prototype.parse = function( type, value, options ) {\n\n    var calendar = this,\n        parsingObject = {}\n\n    // If it’s already parsed, we’re good.\n    if ( !value || typeof value != 'string' ) {\n        return value\n    }\n\n    // We need a `.format` to parse the value with.\n    if ( !( options && options.format ) ) {\n        options = options || {}\n        options.format = calendar.settings.format\n    }\n\n    // Convert the format into an array and then map through it.\n    calendar.formats.toArray( options.format ).map( function( label ) {\n\n        var\n            // Grab the formatting label.\n            formattingLabel = calendar.formats[ label ],\n\n            // The format length is from the formatting label function or the\n            // label length without the escaping exclamation (!) mark.\n            formatLength = formattingLabel ? _.trigger( formattingLabel, calendar, [ value, parsingObject ] ) : label.replace( /^!/, '' ).length\n\n        // If there's a format label, split the value up to the format length.\n        // Then add it to the parsing object with appropriate label.\n        if ( formattingLabel ) {\n            parsingObject[ label ] = value.substr( 0, formatLength )\n        }\n\n        // Update the value as the substring from format length to end.\n        value = value.substr( formatLength )\n    })\n\n    // Compensate for month 0index.\n    return [\n        parsingObject.yyyy || parsingObject.yy,\n        +( parsingObject.mm || parsingObject.m ) - 1,\n        parsingObject.dd || parsingObject.d\n    ]\n} //DatePicker.prototype.parse\n\n\n/**\n * Various formats to display the object in.\n */\nDatePicker.prototype.formats = (function() {\n\n    // Return the length of the first word in a collection.\n    function getWordLengthFromCollection( string, collection, dateObject ) {\n\n        // Grab the first word from the string.\n        // Regex pattern from http://stackoverflow.com/q/150033\n        var word = string.match( /[^\\x00-\\x7F]+|[a-zA-Z0-9_\\u0080-\\u00FF]+/ )[ 0 ]\n\n        // If there's no month index, add it to the date object\n        if ( !dateObject.mm && !dateObject.m ) {\n            dateObject.m = collection.indexOf( word ) + 1\n        }\n\n        // Return the length of the word.\n        return word.length\n    }\n\n    // Get the length of the first word in a string.\n    function getFirstWordLength( string ) {\n        return string.match( /[a-zA-Z0-9_\\u0080-\\u00FF]+/ )[ 0 ].length\n    }\n\n    return {\n\n        d: function( string, dateObject ) {\n\n            // If there's string, then get the digits length.\n            // Otherwise return the selected date.\n            return string ? _.digits( string ) : dateObject.date\n        },\n        dd: function( string, dateObject ) {\n\n            // If there's a string, then the length is always 2.\n            // Otherwise return the selected date with a leading zero.\n            return string ? 2 : _.lead( dateObject.date )\n        },\n        ddd: function( string, dateObject ) {\n\n            // If there's a string, then get the length of the first word.\n            // Otherwise return the short selected weekday.\n            return string ? getFirstWordLength( string ) : this.settings.weekdaysShort[ dateObject.day ]\n        },\n        dddd: function( string, dateObject ) {\n\n            // If there's a string, then get the length of the first word.\n            // Otherwise return the full selected weekday.\n            return string ? getFirstWordLength( string ) : this.settings.weekdaysFull[ dateObject.day ]\n        },\n        m: function( string, dateObject ) {\n\n            // If there's a string, then get the length of the digits\n            // Otherwise return the selected month with 0index compensation.\n            return string ? _.digits( string ) : dateObject.month + 1\n        },\n        mm: function( string, dateObject ) {\n\n            // If there's a string, then the length is always 2.\n            // Otherwise return the selected month with 0index and leading zero.\n            return string ? 2 : _.lead( dateObject.month + 1 )\n        },\n        mmm: function( string, dateObject ) {\n\n            var collection = this.settings.monthsShort\n\n            // If there's a string, get length of the relevant month from the short\n            // months collection. Otherwise return the selected month from that collection.\n            return string ? getWordLengthFromCollection( string, collection, dateObject ) : collection[ dateObject.month ]\n        },\n        mmmm: function( string, dateObject ) {\n\n            var collection = this.settings.monthsFull\n\n            // If there's a string, get length of the relevant month from the full\n            // months collection. Otherwise return the selected month from that collection.\n            return string ? getWordLengthFromCollection( string, collection, dateObject ) : collection[ dateObject.month ]\n        },\n        yy: function( string, dateObject ) {\n\n            // If there's a string, then the length is always 2.\n            // Otherwise return the selected year by slicing out the first 2 digits.\n            return string ? 2 : ( '' + dateObject.year ).slice( 2 )\n        },\n        yyyy: function( string, dateObject ) {\n\n            // If there's a string, then the length is always 4.\n            // Otherwise return the selected year.\n            return string ? 4 : dateObject.year\n        },\n\n        // Create an array by splitting the formatting string passed.\n        toArray: function( formatString ) { return formatString.split( /(d{1,4}|m{1,4}|y{4}|yy|!.)/g ) },\n\n        // Format an object into a string using the formatting options.\n        toString: function ( formatString, itemObject ) {\n            var calendar = this\n            return calendar.formats.toArray( formatString ).map( function( label ) {\n                return _.trigger( calendar.formats[ label ], calendar, [ 0, itemObject ] ) || label.replace( /^!/, '' )\n            }).join( '' )\n        }\n    }\n})() //DatePicker.prototype.formats\n\n\n\n\n/**\n * Check if two date units are the exact.\n */\nDatePicker.prototype.isDateExact = function( one, two ) {\n\n    var calendar = this\n\n    // When we’re working with weekdays, do a direct comparison.\n    if (\n        ( _.isInteger( one ) && _.isInteger( two ) ) ||\n        ( typeof one == 'boolean' && typeof two == 'boolean' )\n     ) {\n        return one === two\n    }\n\n    // When we’re working with date representations, compare the “pick” value.\n    if (\n        ( _.isDate( one ) || $.isArray( one ) ) &&\n        ( _.isDate( two ) || $.isArray( two ) )\n    ) {\n        return calendar.create( one ).pick === calendar.create( two ).pick\n    }\n\n    // When we’re working with range objects, compare the “from” and “to”.\n    if ( $.isPlainObject( one ) && $.isPlainObject( two ) ) {\n        return calendar.isDateExact( one.from, two.from ) && calendar.isDateExact( one.to, two.to )\n    }\n\n    return false\n}\n\n\n/**\n * Check if two date units overlap.\n */\nDatePicker.prototype.isDateOverlap = function( one, two ) {\n\n    var calendar = this,\n        firstDay = calendar.settings.firstDay ? 1 : 0\n\n    // When we’re working with a weekday index, compare the days.\n    if ( _.isInteger( one ) && ( _.isDate( two ) || $.isArray( two ) ) ) {\n        one = one % 7 + firstDay\n        return one === calendar.create( two ).day + 1\n    }\n    if ( _.isInteger( two ) && ( _.isDate( one ) || $.isArray( one ) ) ) {\n        two = two % 7 + firstDay\n        return two === calendar.create( one ).day + 1\n    }\n\n    // When we’re working with range objects, check if the ranges overlap.\n    if ( $.isPlainObject( one ) && $.isPlainObject( two ) ) {\n        return calendar.overlapRanges( one, two )\n    }\n\n    return false\n}\n\n\n/**\n * Flip the “enabled” state.\n */\nDatePicker.prototype.flipEnable = function(val) {\n    var itemObject = this.item\n    itemObject.enable = val || (itemObject.enable == -1 ? 1 : -1)\n}\n\n\n/**\n * Mark a collection of dates as “disabled”.\n */\nDatePicker.prototype.deactivate = function( type, datesToDisable ) {\n\n    var calendar = this,\n        disabledItems = calendar.item.disable.slice(0)\n\n\n    // If we’re flipping, that’s all we need to do.\n    if ( datesToDisable == 'flip' ) {\n        calendar.flipEnable()\n    }\n\n    else if ( datesToDisable === false ) {\n        calendar.flipEnable(1)\n        disabledItems = []\n    }\n\n    else if ( datesToDisable === true ) {\n        calendar.flipEnable(-1)\n        disabledItems = []\n    }\n\n    // Otherwise go through the dates to disable.\n    else {\n\n        datesToDisable.map(function( unitToDisable ) {\n\n            var matchFound\n\n            // When we have disabled items, check for matches.\n            // If something is matched, immediately break out.\n            for ( var index = 0; index < disabledItems.length; index += 1 ) {\n                if ( calendar.isDateExact( unitToDisable, disabledItems[index] ) ) {\n                    matchFound = true\n                    break\n                }\n            }\n\n            // If nothing was found, add the validated unit to the collection.\n            if ( !matchFound ) {\n                if (\n                    _.isInteger( unitToDisable ) ||\n                    _.isDate( unitToDisable ) ||\n                    $.isArray( unitToDisable ) ||\n                    ( $.isPlainObject( unitToDisable ) && unitToDisable.from && unitToDisable.to )\n                ) {\n                    disabledItems.push( unitToDisable )\n                }\n            }\n        })\n    }\n\n    // Return the updated collection.\n    return disabledItems\n} //DatePicker.prototype.deactivate\n\n\n/**\n * Mark a collection of dates as “enabled”.\n */\nDatePicker.prototype.activate = function( type, datesToEnable ) {\n\n    var calendar = this,\n        disabledItems = calendar.item.disable,\n        disabledItemsCount = disabledItems.length\n\n    // If we’re flipping, that’s all we need to do.\n    if ( datesToEnable == 'flip' ) {\n        calendar.flipEnable()\n    }\n\n    else if ( datesToEnable === true ) {\n        calendar.flipEnable(1)\n        disabledItems = []\n    }\n\n    else if ( datesToEnable === false ) {\n        calendar.flipEnable(-1)\n        disabledItems = []\n    }\n\n    // Otherwise go through the disabled dates.\n    else {\n\n        datesToEnable.map(function( unitToEnable ) {\n\n            var matchFound,\n                disabledUnit,\n                index,\n                isExactRange\n\n            // Go through the disabled items and try to find a match.\n            for ( index = 0; index < disabledItemsCount; index += 1 ) {\n\n                disabledUnit = disabledItems[index]\n\n                // When an exact match is found, remove it from the collection.\n                if ( calendar.isDateExact( disabledUnit, unitToEnable ) ) {\n                    matchFound = disabledItems[index] = null\n                    isExactRange = true\n                    break\n                }\n\n                // When an overlapped match is found, add the “inverted” state to it.\n                else if ( calendar.isDateOverlap( disabledUnit, unitToEnable ) ) {\n                    if ( $.isPlainObject( unitToEnable ) ) {\n                        unitToEnable.inverted = true\n                        matchFound = unitToEnable\n                    }\n                    else if ( $.isArray( unitToEnable ) ) {\n                        matchFound = unitToEnable\n                        if ( !matchFound[3] ) matchFound.push( 'inverted' )\n                    }\n                    else if ( _.isDate( unitToEnable ) ) {\n                        matchFound = [ unitToEnable.getFullYear(), unitToEnable.getMonth(), unitToEnable.getDate(), 'inverted' ]\n                    }\n                    break\n                }\n            }\n\n            // If a match was found, remove a previous duplicate entry.\n            if ( matchFound ) for ( index = 0; index < disabledItemsCount; index += 1 ) {\n                if ( calendar.isDateExact( disabledItems[index], unitToEnable ) ) {\n                    disabledItems[index] = null\n                    break\n                }\n            }\n\n            // In the event that we’re dealing with an exact range of dates,\n            // make sure there are no “inverted” dates because of it.\n            if ( isExactRange ) for ( index = 0; index < disabledItemsCount; index += 1 ) {\n                if ( calendar.isDateOverlap( disabledItems[index], unitToEnable ) ) {\n                    disabledItems[index] = null\n                    break\n                }\n            }\n\n            // If something is still matched, add it into the collection.\n            if ( matchFound ) {\n                disabledItems.push( matchFound )\n            }\n        })\n    }\n\n    // Return the updated collection.\n    return disabledItems.filter(function( val ) { return val != null })\n} //DatePicker.prototype.activate\n\n\n/**\n * Create a string for the nodes in the picker.\n */\nDatePicker.prototype.nodes = function( isOpen ) {\n\n    var\n        calendar = this,\n        settings = calendar.settings,\n        calendarItem = calendar.item,\n        nowObject = calendarItem.now,\n        selectedObject = calendarItem.select,\n        highlightedObject = calendarItem.highlight,\n        viewsetObject = calendarItem.view,\n        disabledCollection = calendarItem.disable,\n        minLimitObject = calendarItem.min,\n        maxLimitObject = calendarItem.max,\n\n\n        // Create the calendar table head using a copy of weekday labels collection.\n        // * We do a copy so we don't mutate the original array.\n        tableHead = (function( collection, fullCollection ) {\n\n            // If the first day should be Monday, move Sunday to the end.\n            if ( settings.firstDay ) {\n                collection.push( collection.shift() )\n                fullCollection.push( fullCollection.shift() )\n            }\n\n            // Create and return the table head group.\n            return _.node(\n                'thead',\n                _.node(\n                    'tr',\n                    _.group({\n                        min: 0,\n                        max: DAYS_IN_WEEK - 1,\n                        i: 1,\n                        node: 'th',\n                        item: function( counter ) {\n                            return [\n                                collection[ counter ],\n                                settings.klass.weekdays,\n                                'scope=col title=\"' + fullCollection[ counter ] + '\"'\n                            ]\n                        }\n                    })\n                )\n            ) //endreturn\n        })( ( settings.showWeekdaysFull ? settings.weekdaysFull : settings.weekdaysShort ).slice( 0 ), settings.weekdaysFull.slice( 0 ) ), //tableHead\n\n\n        // Create the nav for next/prev month.\n        createMonthNav = function( next ) {\n\n            // Otherwise, return the created month tag.\n            return _.node(\n                'div',\n                ' ',\n                settings.klass[ 'nav' + ( next ? 'Next' : 'Prev' ) ] + (\n\n                    // If the focused month is outside the range, disabled the button.\n                    ( next && viewsetObject.year >= maxLimitObject.year && viewsetObject.month >= maxLimitObject.month ) ||\n                    ( !next && viewsetObject.year <= minLimitObject.year && viewsetObject.month <= minLimitObject.month ) ?\n                    ' ' + settings.klass.navDisabled : ''\n                ),\n                'data-nav=' + ( next || -1 ) + ' ' + 'tabindex=\"0\" ' +\n                _.ariaAttr({\n                    role: 'button',\n                    controls: calendar.$node[0].id + '_table'\n                }) + ' ' +\n                'title=\"' + (next ? settings.labelMonthNext : settings.labelMonthPrev ) + '\"'\n            ) //endreturn\n        }, //createMonthNav\n\n\n        // Create the month label.\n        createMonthLabel = function() {\n\n            var monthsCollection = settings.showMonthsShort ? settings.monthsShort : settings.monthsFull\n\n            // If there are months to select, add a dropdown menu.\n            if ( settings.selectMonths ) {\n\n                return _.node( 'select',\n                    _.group({\n                        min: 0,\n                        max: 11,\n                        i: 1,\n                        node: 'option',\n                        item: function( loopedMonth ) {\n\n                            return [\n\n                                // The looped month and no classes.\n                                monthsCollection[ loopedMonth ], 0,\n\n                                // Set the value and selected index.\n                                'value=' + loopedMonth +\n                                ( viewsetObject.month == loopedMonth ? ' selected' : '' ) +\n                                (\n                                    (\n                                        ( viewsetObject.year == minLimitObject.year && loopedMonth < minLimitObject.month ) ||\n                                        ( viewsetObject.year == maxLimitObject.year && loopedMonth > maxLimitObject.month )\n                                    ) ?\n                                    ' disabled' : ''\n                                )\n                            ]\n                        }\n                    }),\n                    settings.klass.selectMonth,\n                    ( isOpen ? '' : 'disabled' ) + ' ' +\n                    _.ariaAttr({ controls: calendar.$node[0].id + '_table' }) + ' ' +\n                    'title=\"' + settings.labelMonthSelect + '\"'\n                )\n            }\n\n            // If there's a need for a month selector\n            return _.node( 'div', monthsCollection[ viewsetObject.month ], settings.klass.month )\n        }, //createMonthLabel\n\n\n        // Create the year label.\n        createYearLabel = function() {\n\n            var focusedYear = viewsetObject.year,\n\n            // If years selector is set to a literal \"true\", set it to 5. Otherwise\n            // divide in half to get half before and half after focused year.\n            numberYears = settings.selectYears === true ? 5 : ~~( settings.selectYears / 2 )\n\n            // If there are years to select, add a dropdown menu.\n            if ( numberYears ) {\n\n                var\n                    minYear = minLimitObject.year,\n                    maxYear = maxLimitObject.year,\n                    lowestYear = focusedYear - numberYears,\n                    highestYear = focusedYear + numberYears\n\n                // If the min year is greater than the lowest year, increase the highest year\n                // by the difference and set the lowest year to the min year.\n                if ( minYear > lowestYear ) {\n                    highestYear += minYear - lowestYear\n                    lowestYear = minYear\n                }\n\n                // If the max year is less than the highest year, decrease the lowest year\n                // by the lower of the two: available and needed years. Then set the\n                // highest year to the max year.\n                if ( maxYear < highestYear ) {\n\n                    var availableYears = lowestYear - minYear,\n                        neededYears = highestYear - maxYear\n\n                    lowestYear -= availableYears > neededYears ? neededYears : availableYears\n                    highestYear = maxYear\n                }\n\n                return _.node( 'select',\n                    _.group({\n                        min: lowestYear,\n                        max: highestYear,\n                        i: 1,\n                        node: 'option',\n                        item: function( loopedYear ) {\n                            return [\n\n                                // The looped year and no classes.\n                                loopedYear, 0,\n\n                                // Set the value and selected index.\n                                'value=' + loopedYear + ( focusedYear == loopedYear ? ' selected' : '' )\n                            ]\n                        }\n                    }),\n                    settings.klass.selectYear,\n                    ( isOpen ? '' : 'disabled' ) + ' ' + _.ariaAttr({ controls: calendar.$node[0].id + '_table' }) + ' ' +\n                    'title=\"' + settings.labelYearSelect + '\"'\n                )\n            }\n\n            // Otherwise just return the year focused\n            return _.node( 'div', focusedYear, settings.klass.year )\n        } //createYearLabel\n\n\n    // Create and return the entire calendar.\n    return _.node(\n        'div',\n        ( settings.selectYears ? createYearLabel() + createMonthLabel() : createMonthLabel() + createYearLabel() ) +\n        createMonthNav() + createMonthNav( 1 ),\n        settings.klass.header\n    ) + _.node(\n        'table',\n        tableHead +\n        _.node(\n            'tbody',\n            _.group({\n                min: 0,\n                max: WEEKS_IN_CALENDAR - 1,\n                i: 1,\n                node: 'tr',\n                item: function( rowCounter ) {\n\n                    // If Monday is the first day and the month starts on Sunday, shift the date back a week.\n                    var shiftDateBy = settings.firstDay && calendar.create([ viewsetObject.year, viewsetObject.month, 1 ]).day === 0 ? -7 : 0\n\n                    return [\n                        _.group({\n                            min: DAYS_IN_WEEK * rowCounter - viewsetObject.day + shiftDateBy + 1, // Add 1 for weekday 0index\n                            max: function() {\n                                return this.min + DAYS_IN_WEEK - 1\n                            },\n                            i: 1,\n                            node: 'td',\n                            item: function( targetDate ) {\n\n                                // Convert the time date from a relative date to a target date.\n                                targetDate = calendar.create([ viewsetObject.year, viewsetObject.month, targetDate + ( settings.firstDay ? 1 : 0 ) ])\n\n                                var isSelected = selectedObject && selectedObject.pick == targetDate.pick,\n                                    isHighlighted = highlightedObject && highlightedObject.pick == targetDate.pick,\n                                    isDisabled = disabledCollection && calendar.disabled( targetDate ) || targetDate.pick < minLimitObject.pick || targetDate.pick > maxLimitObject.pick,\n                                    formattedDate = _.trigger( calendar.formats.toString, calendar, [ settings.format, targetDate ] ),\n                                    calendarNodeUniqueId = settings.id + '_' + targetDate.pick\n\n                                return [\n                                    _.node(\n                                        'div',\n                                        targetDate.date,\n                                        (function( klasses ) {\n\n                                            // Add the `infocus` or `outfocus` classes based on month in view.\n                                            klasses.push( viewsetObject.month == targetDate.month ? settings.klass.infocus : settings.klass.outfocus )\n\n                                            // Add the `today` class if needed.\n                                            if ( nowObject.pick == targetDate.pick ) {\n                                                klasses.push( settings.klass.now )\n                                            }\n\n                                            // Add the `selected` class if something's selected and the time matches.\n                                            if ( isSelected ) {\n                                                klasses.push( settings.klass.selected )\n                                            }\n\n                                            // Add the `highlighted` class if something's highlighted and the time matches.\n                                            if ( isHighlighted ) {\n                                                klasses.push( settings.klass.highlighted )\n                                            }\n\n                                            // Add the `disabled` class if something's disabled and the object matches.\n                                            if ( isDisabled ) {\n                                                klasses.push( settings.klass.disabled )\n                                            }\n\n                                            return klasses.join( ' ' )\n                                        })([ settings.klass.day ]),\n                                        'data-pick=' + targetDate.pick + ' id=' + calendarNodeUniqueId + ' tabindex=\"0\" ' + _.ariaAttr({\n                                            role: 'gridcell',\n                                            label: formattedDate,\n                                            selected: isSelected && calendar.$node.val() === formattedDate ? true : null,\n                                            activedescendant: isHighlighted ? targetDate.pick : null,\n                                            disabled: isDisabled ? true : null\n                                        })\n                                    ),\n                                    ''\n                                ] //endreturn\n                            }\n                        })\n                    ] //endreturn\n                }\n            })\n        ),\n        settings.klass.table,\n        'id=\"' + calendar.$node[0].id + '_table' + '\" ' + _.ariaAttr({\n            role: 'grid',\n            controls: calendar.$node[0].id,\n            readonly: true\n        })\n    ) +\n\n    // * For Firefox forms to submit, make sure to set the buttons’ `type` attributes as “button”.\n    _.node(\n        'div',\n        _.node( 'button', settings.today, settings.klass.buttonToday,\n            'type=button data-pick=' + nowObject.pick +\n            ( isOpen && !calendar.disabled(nowObject) ? '' : ' disabled' ) + ' ' +\n            _.ariaAttr({ controls: calendar.$node[0].id }) ) +\n        _.node( 'button', settings.clear, settings.klass.buttonClear,\n            'type=button data-clear=1' +\n            ( isOpen ? '' : ' disabled' ) + ' ' +\n            _.ariaAttr({ controls: calendar.$node[0].id }) ) +\n        _.node('button', settings.close, settings.klass.buttonClose,\n            'type=button data-close=true ' +\n            ( isOpen ? '' : ' disabled' ) + ' ' +\n            _.ariaAttr({ controls: calendar.$node[0].id }) ),\n        settings.klass.footer\n    ) //endreturn\n} //DatePicker.prototype.nodes\n\n\n\n\n/**\n * The date picker defaults.\n */\nDatePicker.defaults = (function( prefix ) {\n\n    return {\n\n        // The title label to use for the month nav buttons\n        labelMonthNext: 'Next month',\n        labelMonthPrev: 'Previous month',\n\n        // The title label to use for the dropdown selectors\n        labelMonthSelect: 'Select a month',\n        labelYearSelect: 'Select a year',\n\n        // Months and weekdays\n        monthsFull: [ 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' ],\n        monthsShort: [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ],\n        weekdaysFull: [ 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday' ],\n        weekdaysShort: [ 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat' ],\n\n        // Today and clear\n        today: 'Today',\n        clear: 'Clear',\n        close: 'Close',\n\n        // Picker close behavior\n        closeOnSelect: true,\n        closeOnClear: true,\n\n        // Update input value on select/clear\n        updateInput: true,\n\n        // The format to show on the `input` element\n        format: 'd mmmm, yyyy',\n\n        // Classes\n        klass: {\n\n            table: prefix + 'table',\n\n            header: prefix + 'header',\n\n            navPrev: prefix + 'nav--prev',\n            navNext: prefix + 'nav--next',\n            navDisabled: prefix + 'nav--disabled',\n\n            month: prefix + 'month',\n            year: prefix + 'year',\n\n            selectMonth: prefix + 'select--month',\n            selectYear: prefix + 'select--year',\n\n            weekdays: prefix + 'weekday',\n\n            day: prefix + 'day',\n            disabled: prefix + 'day--disabled',\n            selected: prefix + 'day--selected',\n            highlighted: prefix + 'day--highlighted',\n            now: prefix + 'day--today',\n            infocus: prefix + 'day--infocus',\n            outfocus: prefix + 'day--outfocus',\n\n            footer: prefix + 'footer',\n\n            buttonClear: prefix + 'button--clear',\n            buttonToday: prefix + 'button--today',\n            buttonClose: prefix + 'button--close'\n        }\n    }\n})( Picker.klasses().picker + '__' )\n\n\n\n\n\n/**\n * Extend the picker to add the date picker.\n */\nPicker.extend( 'pickadate', DatePicker )\n\n\n}));\n\n\n\n"
  },
  {
    "path": "public/backend/vendors/js/pickers/pickadate/picker.js",
    "content": "/*!\n * pickadate.js v3.6.4, 2019/05/25\n * By Amsul, http://amsul.ca\n * Hosted on http://amsul.github.io/pickadate.js\n * Licensed under MIT\n */\n\n(function ( factory ) {\n\n    // AMD.\n    if ( typeof define == 'function' && define.amd )\n        define( 'picker', ['jquery'], factory )\n\n    // Node.js/browserify.\n    else if ( typeof exports == 'object' )\n        module.exports = factory( require('jquery') )\n\n    // Browser globals.\n    else if ( typeof window == 'object' )\n        window.Picker = factory( jQuery )\n    \n    else this.Picker = factory( jQuery )\n\n}(function( $ ) {\n\nvar $window = $( window )\nvar $document = $( document )\nvar $html = $( document.documentElement )\nvar supportsTransitions = document.documentElement.style.transition != null\n\n\n/**\n * The picker constructor that creates a blank picker.\n */\nfunction PickerConstructor( ELEMENT, NAME, COMPONENT, OPTIONS ) {\n\n    // If there’s no element, return the picker constructor.\n    if ( !ELEMENT ) return PickerConstructor\n\n\n    var\n        IS_DEFAULT_THEME = false,\n\n\n        // The state of the picker.\n        STATE = {\n            id: ELEMENT.id || 'P' + Math.abs( ~~(Math.random() * new Date()) ),\n            handlingOpen: false,\n        },\n\n\n        // Merge the defaults and options passed.\n        SETTINGS = COMPONENT ? $.extend( true, {}, COMPONENT.defaults, OPTIONS ) : OPTIONS || {},\n\n\n        // Merge the default classes with the settings classes.\n        CLASSES = $.extend( {}, PickerConstructor.klasses(), SETTINGS.klass ),\n\n\n        // The element node wrapper into a jQuery object.\n        $ELEMENT = $( ELEMENT ),\n\n\n        // Pseudo picker constructor.\n        PickerInstance = function() {\n            return this.start()\n        },\n\n\n        // The picker prototype.\n        P = PickerInstance.prototype = {\n\n            constructor: PickerInstance,\n\n            $node: $ELEMENT,\n\n\n            /**\n             * Initialize everything\n             */\n            start: function() {\n\n                // If it’s already started, do nothing.\n                if ( STATE && STATE.start ) return P\n\n\n                // Update the picker states.\n                STATE.methods = {}\n                STATE.start = true\n                STATE.open = false\n                STATE.type = ELEMENT.type\n\n\n                // Confirm focus state, convert into text input to remove UA stylings,\n                // and set as readonly to prevent keyboard popup.\n                ELEMENT.autofocus = ELEMENT == getActiveElement()\n                ELEMENT.readOnly = !SETTINGS.editable\n                SETTINGS.id = ELEMENT.id = ELEMENT.id || STATE.id\n                if ( ELEMENT.type != 'text' ) {\n                    ELEMENT.type = 'text'\n                }\n\n                // Create a new picker component with the settings.\n                P.component = new COMPONENT(P, SETTINGS)\n\n\n                // Create the picker root and then prepare it.\n                P.$root = $( '<div class=\"' + CLASSES.picker + '\" id=\"' + ELEMENT.id + '_root\" />' )\n                prepareElementRoot()\n\n\n                // Create the picker holder and then prepare it.\n                P.$holder = $( createWrappedComponent() ).appendTo( P.$root )\n                prepareElementHolder()\n\n\n                // If there’s a format for the hidden input element, create the element.\n                if ( SETTINGS.formatSubmit ) {\n                    prepareElementHidden()\n                }\n\n\n                // Prepare the input element.\n                prepareElement()\n\n\n                // Insert the hidden input as specified in the settings.\n                if ( SETTINGS.containerHidden ) $( SETTINGS.containerHidden ).append( P._hidden )\n                else $ELEMENT.after( P._hidden )\n\n\n                // Insert the root as specified in the settings.\n                if ( SETTINGS.container ) $( SETTINGS.container ).append( P.$root )\n                else $ELEMENT.after( P.$root )\n\n\n                // Bind the default component and settings events.\n                P.on({\n                    start: P.component.onStart,\n                    render: P.component.onRender,\n                    stop: P.component.onStop,\n                    open: P.component.onOpen,\n                    close: P.component.onClose,\n                    set: P.component.onSet\n                }).on({\n                    start: SETTINGS.onStart,\n                    render: SETTINGS.onRender,\n                    stop: SETTINGS.onStop,\n                    open: SETTINGS.onOpen,\n                    close: SETTINGS.onClose,\n                    set: SETTINGS.onSet\n                })\n\n\n                // Once we’re all set, check the theme in use.\n                IS_DEFAULT_THEME = isUsingDefaultTheme( P.$holder[0] )\n\n\n                // If the element has autofocus, open the picker.\n                if ( ELEMENT.autofocus ) {\n                    P.open()\n                }\n\n\n                // Trigger queued the “start” and “render” events.\n                return P.trigger( 'start' ).trigger( 'render' )\n            }, //start\n\n\n            /**\n             * Render a new picker\n             */\n            render: function( entireComponent ) {\n\n                // Insert a new component holder in the root or box.\n                if ( entireComponent ) {\n                    P.$holder = $( createWrappedComponent() )\n                    prepareElementHolder()\n                    P.$root.html( P.$holder )\n                }\n                else P.$root.find( '.' + CLASSES.box ).html( P.component.nodes( STATE.open ) )\n\n                // Trigger the queued “render” events.\n                return P.trigger( 'render' )\n            }, //render\n\n\n            /**\n             * Destroy everything\n             */\n            stop: function() {\n\n                // If it’s already stopped, do nothing.\n                if ( !STATE.start ) return P\n\n                // Then close the picker.\n                P.close()\n\n                // Remove the hidden field.\n                if ( P._hidden ) {\n                    P._hidden.parentNode.removeChild( P._hidden )\n                }\n\n                // Remove the root.\n                P.$root.remove()\n\n                // Remove the input class, remove the stored data, and unbind\n                // the events (after a tick for IE - see `P.close`).\n                $ELEMENT.removeClass( CLASSES.input ).removeData( NAME )\n                setTimeout( function() {\n                    $ELEMENT.off( '.' + STATE.id )\n                }, 0)\n\n                // Restore the element state\n                ELEMENT.type = STATE.type\n                ELEMENT.readOnly = false\n\n                // Trigger the queued “stop” events.\n                P.trigger( 'stop' )\n\n                // Reset the picker states.\n                STATE.methods = {}\n                STATE.start = false\n\n                return P\n            }, //stop\n\n\n            /**\n             * Open up the picker\n             */\n            open: function( dontGiveFocus ) {\n\n                // If it’s already open, do nothing.\n                if ( STATE.open ) return P\n\n                // Add the “active” class.\n                $ELEMENT.addClass( CLASSES.active )\n\n                // * A Firefox bug, when `html` has `overflow:hidden`, results in\n                //   killing transitions :(. So add the “opened” state on the next tick.\n                //   Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=625289\n                setTimeout( function() {\n\n                    // Add the “opened” class to the picker root.\n                    P.$root.addClass( CLASSES.opened )\n                    aria( P.$root[0], 'hidden', false )\n\n                }, 0 )\n\n                // If we have to give focus, bind the element and doc events.\n                if ( dontGiveFocus !== false ) {\n\n                    // Set it as open.\n                    STATE.open = true\n\n                    // Prevent the page from scrolling.\n                    if ( IS_DEFAULT_THEME ) {\n                        $('body').\n                            css( 'overflow', 'hidden' ).\n                            css( 'padding-right', '+=' + getScrollbarWidth() )\n                    }\n\n                    // Pass focus to the root element’s jQuery object.\n                    focusPickerOnceOpened()\n\n                    // Bind the document events.\n                    $document.on( 'click.' + STATE.id + ' focusin.' + STATE.id, function( event ) {\n                        // If the picker is currently midway through processing\n                        // the opening sequence of events then don't handle clicks\n                        // on any part of the DOM. This is caused by a bug in Chrome 73\n                        // where a click event is being generated with the incorrect\n                        // path in it.\n                        // In short, if someone does a click that finishes after the\n                        // new element is created then the path contains only the\n                        // parent element and not the input element itself.\n                        if (STATE.handlingOpen) {\n                          return;\n                        }\n\n                        var target = getRealEventTarget( event, ELEMENT )\n\n                        // If the target of the event is not the element, close the picker picker.\n                        // * Don’t worry about clicks or focusins on the root because those don’t bubble up.\n                        //   Also, for Firefox, a click on an `option` element bubbles up directly\n                        //   to the doc. So make sure the target wasn't the doc.\n                        // * In Firefox stopPropagation() doesn’t prevent right-click events from bubbling,\n                        //   which causes the picker to unexpectedly close when right-clicking it. So make\n                        //   sure the event wasn’t a right-click.\n                        // * In Chrome 62 and up, password autofill causes a simulated focusin event which\n                        //   closes the picker.\n                        if ( ! event.isSimulated && target != ELEMENT && target != document && event.which != 3 ) {\n\n                            // If the target was the holder that covers the screen,\n                            // keep the element focused to maintain tabindex.\n                            P.close( target === P.$holder[0] )\n                        }\n\n                    }).on( 'keydown.' + STATE.id, function( event ) {\n\n                        var\n                            // Get the keycode.\n                            keycode = event.keyCode,\n\n                            // Translate that to a selection change.\n                            keycodeToMove = P.component.key[ keycode ],\n\n                            // Grab the target.\n                            target = getRealEventTarget( event, ELEMENT )\n\n\n                        // On escape, close the picker and give focus.\n                        if ( keycode == 27 ) {\n                            P.close( true )\n                        }\n\n\n                        // Check if there is a key movement or “enter” keypress on the element.\n                        else if ( target == P.$holder[0] && ( keycodeToMove || keycode == 13 ) ) {\n\n                            // Prevent the default action to stop page movement.\n                            event.preventDefault()\n\n                            // Trigger the key movement action.\n                            if ( keycodeToMove ) {\n                                PickerConstructor._.trigger( P.component.key.go, P, [ PickerConstructor._.trigger( keycodeToMove ) ] )\n                            }\n\n                            // On “enter”, if the highlighted item isn’t disabled, set the value and close.\n                            else if ( !P.$root.find( '.' + CLASSES.highlighted ).hasClass( CLASSES.disabled ) ) {\n                                P.set( 'select', P.component.item.highlight )\n                                if ( SETTINGS.closeOnSelect ) {\n                                    P.close( true )\n                                }\n                            }\n                        }\n\n\n                        // If the target is within the root and “enter” is pressed,\n                        // prevent the default action and trigger a click on the target instead.\n                        else if ( $.contains( P.$root[0], target ) && keycode == 13 ) {\n                            event.preventDefault()\n                            target.click()\n                        }\n                    })\n                }\n\n                // Trigger the queued “open” events.\n                return P.trigger( 'open' )\n            }, //open\n\n\n            /**\n             * Close the picker\n             */\n            close: function( giveFocus ) {\n\n                // If we need to give focus, do it before changing states.\n                if ( giveFocus ) {\n                    if ( SETTINGS.editable ) {\n                        ELEMENT.focus()\n                    }\n                    else {\n                        // ....ah yes! It would’ve been incomplete without a crazy workaround for IE :|\n                        // The focus is triggered *after* the close has completed - causing it\n                        // to open again. So unbind and rebind the event at the next tick.\n                        P.$holder.off( 'focus.toOpen' ).focus()\n                        setTimeout( function() {\n                            P.$holder.on( 'focus.toOpen', handleFocusToOpenEvent )\n                        }, 0 )\n                    }\n                }\n\n                // Remove the “active” class.\n                $ELEMENT.removeClass( CLASSES.active )\n\n                // * A Firefox bug, when `html` has `overflow:hidden`, results in\n                //   killing transitions :(. So remove the “opened” state on the next tick.\n                //   Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=625289\n                setTimeout( function() {\n\n                    // Remove the “opened” and “focused” class from the picker root.\n                    P.$root.removeClass( CLASSES.opened + ' ' + CLASSES.focused )\n                    aria( P.$root[0], 'hidden', true )\n\n                }, 0 )\n\n                // If it’s already closed, do nothing more.\n                if ( !STATE.open ) return P\n\n                // Set it as closed.\n                STATE.open = false\n\n                // Allow the page to scroll.\n                if ( IS_DEFAULT_THEME ) {\n                    $('body').\n                        css( 'overflow', '' ).\n                        css( 'padding-right', '-=' + getScrollbarWidth() )\n                }\n\n                // Unbind the document events.\n                $document.off( '.' + STATE.id )\n\n                // Trigger the queued “close” events.\n                return P.trigger( 'close' )\n            }, //close\n\n\n            /**\n             * Clear the values\n             */\n            clear: function( options ) {\n                return P.set( 'clear', null, options )\n            }, //clear\n\n\n            /**\n             * Set something\n             */\n            set: function( thing, value, options ) {\n\n                var thingItem, thingValue,\n                    thingIsObject = $.isPlainObject( thing ),\n                    thingObject = thingIsObject ? thing : {}\n\n                // Make sure we have usable options.\n                options = thingIsObject && $.isPlainObject( value ) ? value : options || {}\n\n                if ( thing ) {\n\n                    // If the thing isn’t an object, make it one.\n                    if ( !thingIsObject ) {\n                        thingObject[ thing ] = value\n                    }\n\n                    // Go through the things of items to set.\n                    for ( thingItem in thingObject ) {\n\n                        // Grab the value of the thing.\n                        thingValue = thingObject[ thingItem ]\n\n                        // First, if the item exists and there’s a value, set it.\n                        if ( thingItem in P.component.item ) {\n                            if ( thingValue === undefined ) thingValue = null\n                            P.component.set( thingItem, thingValue, options )\n                        }\n\n                        // Then, check to update the element value and broadcast a change.\n                        if ( ( thingItem == 'select' || thingItem == 'clear' ) && SETTINGS.updateInput ) {\n                            $ELEMENT.\n                                val( thingItem == 'clear' ? '' : P.get( thingItem, SETTINGS.format ) ).\n                                trigger( 'change' )\n                        }\n                    }\n\n                    // Render a new picker.\n                    P.render()\n                }\n\n                // When the method isn’t muted, trigger queued “set” events and pass the `thingObject`.\n                return options.muted ? P : P.trigger( 'set', thingObject )\n            }, //set\n\n\n            /**\n             * Get something\n             */\n            get: function( thing, format ) {\n\n                // Make sure there’s something to get.\n                thing = thing || 'value'\n\n                // If a picker state exists, return that.\n                if ( STATE[ thing ] != null ) {\n                    return STATE[ thing ]\n                }\n\n                // Return the submission value, if that.\n                if ( thing == 'valueSubmit' ) {\n                    if ( P._hidden ) {\n                        return P._hidden.value\n                    }\n                    thing = 'value'\n                }\n\n                // Return the value, if that.\n                if ( thing == 'value' ) {\n                    return ELEMENT.value\n                }\n\n                // Check if a component item exists, return that.\n                if ( thing in P.component.item ) {\n                    if ( typeof format == 'string' ) {\n                        var thingValue = P.component.get( thing )\n                        return thingValue ?\n                            PickerConstructor._.trigger(\n                                P.component.formats.toString,\n                                P.component,\n                                [ format, thingValue ]\n                            ) : ''\n                    }\n                    return P.component.get( thing )\n                }\n            }, //get\n\n\n\n            /**\n             * Bind events on the things.\n             */\n            on: function( thing, method, internal ) {\n\n                var thingName, thingMethod,\n                    thingIsObject = $.isPlainObject( thing ),\n                    thingObject = thingIsObject ? thing : {}\n\n                if ( thing ) {\n\n                    // If the thing isn’t an object, make it one.\n                    if ( !thingIsObject ) {\n                        thingObject[ thing ] = method\n                    }\n\n                    // Go through the things to bind to.\n                    for ( thingName in thingObject ) {\n\n                        // Grab the method of the thing.\n                        thingMethod = thingObject[ thingName ]\n\n                        // If it was an internal binding, prefix it.\n                        if ( internal ) {\n                            thingName = '_' + thingName\n                        }\n\n                        // Make sure the thing methods collection exists.\n                        STATE.methods[ thingName ] = STATE.methods[ thingName ] || []\n\n                        // Add the method to the relative method collection.\n                        STATE.methods[ thingName ].push( thingMethod )\n                    }\n                }\n\n                return P\n            }, //on\n\n\n\n            /**\n             * Unbind events on the things.\n             */\n            off: function() {\n                var i, thingName,\n                    names = arguments;\n                for ( i = 0, namesCount = names.length; i < namesCount; i += 1 ) {\n                    thingName = names[i]\n                    if ( thingName in STATE.methods ) {\n                        delete STATE.methods[thingName]\n                    }\n                }\n                return P\n            },\n\n\n            /**\n             * Fire off method events.\n             */\n            trigger: function( name, data ) {\n                var _trigger = function( name ) {\n                    var methodList = STATE.methods[ name ]\n                    if ( methodList ) {\n                        methodList.map( function( method ) {\n                            PickerConstructor._.trigger( method, P, [ data ] )\n                        })\n                    }\n                }\n                _trigger( '_' + name )\n                _trigger( name )\n                return P\n            } //trigger\n        } //PickerInstance.prototype\n\n\n    /**\n     * Wrap the picker holder components together.\n     */\n    function createWrappedComponent() {\n\n        // Create a picker wrapper holder\n        return PickerConstructor._.node( 'div',\n\n            // Create a picker wrapper node\n            PickerConstructor._.node( 'div',\n\n                // Create a picker frame\n                PickerConstructor._.node( 'div',\n\n                    // Create a picker box node\n                    PickerConstructor._.node( 'div',\n\n                        // Create the components nodes.\n                        P.component.nodes( STATE.open ),\n\n                        // The picker box class\n                        CLASSES.box\n                    ),\n\n                    // Picker wrap class\n                    CLASSES.wrap\n                ),\n\n                // Picker frame class\n                CLASSES.frame\n            ),\n\n            // Picker holder class\n            CLASSES.holder,\n\n            'tabindex=\"-1\"'\n        ) //endreturn\n    } //createWrappedComponent\n\n    /**\n     * Prepare the input element with all bindings.\n     */\n    function prepareElement() {\n\n        $ELEMENT.\n\n            // Store the picker data by component name.\n            data(NAME, P).\n\n            // Add the “input” class name.\n            addClass(CLASSES.input).\n\n            // If there’s a `data-value`, update the value of the element.\n            val( $ELEMENT.data('value') ?\n                P.get('select', SETTINGS.format) :\n                ELEMENT.value\n            ).\n\n            // On focus/click, open the picker.\n            on( 'focus.' + STATE.id + ' click.' + STATE.id,\n                function(event) {\n                    event.preventDefault()\n                    P.open()\n                }\n            )\n\n            // Mousedown handler to capture when the user starts interacting\n            // with the picker. This is used in working around a bug in Chrome 73.\n            .on('mousedown', function() {\n              STATE.handlingOpen = true;\n              var handler = function() {\n                // By default mouseup events are fired before a click event.\n                // By using a timeout we can force the mouseup to be handled\n                // after the corresponding click event is handled.\n                setTimeout(function() {\n                  $(document).off('mouseup', handler);\n                  STATE.handlingOpen = false;\n                }, 0);\n              };\n              $(document).on('mouseup', handler);\n            });\n\n\n        // Only bind keydown events if the element isn’t editable.\n        if ( !SETTINGS.editable ) {\n\n            $ELEMENT.\n\n                // Handle keyboard event based on the picker being opened or not.\n                on( 'keydown.' + STATE.id, handleKeydownEvent )\n        }\n\n\n        // Update the aria attributes.\n        aria(ELEMENT, {\n            haspopup: true,\n            readonly: false,\n            owns: ELEMENT.id + '_root'\n        })\n    }\n\n\n    /**\n     * Prepare the root picker element with all bindings.\n     */\n    function prepareElementRoot() {\n        aria( P.$root[0], 'hidden', true )\n    }\n\n\n     /**\n      * Prepare the holder picker element with all bindings.\n      */\n    function prepareElementHolder() {\n\n        P.$holder.\n\n            on({\n\n                // For iOS8.\n                keydown: handleKeydownEvent,\n\n                'focus.toOpen': handleFocusToOpenEvent,\n\n                blur: function() {\n                    // Remove the “target” class.\n                    $ELEMENT.removeClass( CLASSES.target )\n                },\n\n                // When something within the holder is focused, stop from bubbling\n                // to the doc and remove the “focused” state from the root.\n                focusin: function( event ) {\n                    P.$root.removeClass( CLASSES.focused )\n                    event.stopPropagation()\n                },\n\n                // When something within the holder is clicked, stop it\n                // from bubbling to the doc.\n                'mousedown click': function( event ) {\n\n                    var target = getRealEventTarget( event, ELEMENT )\n\n                    // Make sure the target isn’t the root holder so it can bubble up.\n                    if ( target != P.$holder[0] ) {\n\n                        event.stopPropagation()\n\n                        // * For mousedown events, cancel the default action in order to\n                        //   prevent cases where focus is shifted onto external elements\n                        //   when using things like jQuery mobile or MagnificPopup (ref: #249 & #120).\n                        //   Also, for Firefox, don’t prevent action on the `option` element.\n                        if ( event.type == 'mousedown' && !$( target ).is( 'input, select, textarea, button, option' )) {\n\n                            event.preventDefault()\n\n                            // Re-focus onto the holder so that users can click away\n                            // from elements focused within the picker.\n                            P.$holder.eq(0).focus()\n                        }\n                    }\n                }\n\n            }).\n\n            // If there’s a click on an actionable element, carry out the actions.\n            on( 'click', '[data-pick], [data-nav], [data-clear], [data-close]', function() {\n\n                var $target = $( this ),\n                    targetData = $target.data(),\n                    targetDisabled = $target.hasClass( CLASSES.navDisabled ) || $target.hasClass( CLASSES.disabled ),\n\n                    // * For IE, non-focusable elements can be active elements as well\n                    //   (http://stackoverflow.com/a/2684561).\n                    activeElement = getActiveElement()\n                    activeElement = activeElement && ( (activeElement.type || activeElement.href ) ? activeElement : null);\n\n                // If it’s disabled or nothing inside is actively focused, re-focus the element.\n                if ( targetDisabled || activeElement && !$.contains( P.$root[0], activeElement ) ) {\n                    P.$holder.eq(0).focus()\n                }\n\n                // If something is superficially changed, update the `highlight` based on the `nav`.\n                if ( !targetDisabled && targetData.nav ) {\n                    P.set( 'highlight', P.component.item.highlight, { nav: targetData.nav } )\n                }\n\n                // If something is picked, set `select` then close with focus.\n                else if ( !targetDisabled && 'pick' in targetData ) {\n                    P.set( 'select', targetData.pick )\n                    if ( SETTINGS.closeOnSelect ) {\n                        P.close( true )\n                    }\n                }\n\n                // If a “clear” button is pressed, empty the values and close with focus.\n                else if ( targetData.clear ) {\n                    P.clear()\n                    if ( SETTINGS.closeOnClear ) {\n                        P.close( true )\n                    }\n                }\n\n                else if ( targetData.close ) {\n                    P.close( true )\n                }\n\n            }) //P.$holder\n\n    }\n\n\n     /**\n      * Prepare the hidden input element along with all bindings.\n      */\n    function prepareElementHidden() {\n\n        var name\n\n        if ( SETTINGS.hiddenName === true ) {\n            name = ELEMENT.name\n            ELEMENT.name = ''\n        }\n        else {\n            name = [\n                typeof SETTINGS.hiddenPrefix == 'string' ? SETTINGS.hiddenPrefix : '',\n                typeof SETTINGS.hiddenSuffix == 'string' ? SETTINGS.hiddenSuffix : '_submit'\n            ]\n            name = name[0] + ELEMENT.name + name[1]\n        }\n\n        P._hidden = $(\n            '<input ' +\n            'type=hidden ' +\n\n            // Create the name using the original input’s with a prefix and suffix.\n            'name=\"' + name + '\"' +\n\n            // If the element has a value, set the hidden value as well.\n            (\n                $ELEMENT.data('value') || ELEMENT.value ?\n                    ' value=\"' + P.get('select', SETTINGS.formatSubmit) + '\"' :\n                    ''\n            ) +\n            '>'\n        )[0]\n\n        $ELEMENT.\n\n            // If the value changes, update the hidden input with the correct format.\n            on('change.' + STATE.id, function() {\n                P._hidden.value = ELEMENT.value ?\n                    P.get('select', SETTINGS.formatSubmit) :\n                    ''\n            })\n    }\n\n\n    // Wait for transitions to end before focusing the holder. Otherwise, while\n    // using the `container` option, the view jumps to the container.\n    function focusPickerOnceOpened() {\n\n        if (IS_DEFAULT_THEME && supportsTransitions) {\n            P.$holder.find('.' + CLASSES.frame).one('transitionend', function() {\n                P.$holder.eq(0).focus()\n            })\n        }\n        else {\n            setTimeout(function() {\n                P.$holder.eq(0).focus()\n            }, 0)\n        }\n    }\n\n\n    function handleFocusToOpenEvent(event) {\n\n        // Stop the event from propagating to the doc.\n        event.stopPropagation()\n\n        // Add the “target” class.\n        $ELEMENT.addClass( CLASSES.target )\n\n        // Add the “focused” class to the root.\n        P.$root.addClass( CLASSES.focused )\n\n        // And then finally open the picker.\n        P.open()\n    }\n\n\n    // For iOS8.\n    function handleKeydownEvent( event ) {\n\n        var keycode = event.keyCode,\n\n            // Check if one of the delete keys was pressed.\n            isKeycodeDelete = /^(8|46)$/.test(keycode)\n\n        // For some reason IE clears the input value on “escape”.\n        if ( keycode == 27 ) {\n            P.close( true )\n            return false\n        }\n\n        // Check if `space` or `delete` was pressed or the picker is closed with a key movement.\n        if ( keycode == 32 || isKeycodeDelete || !STATE.open && P.component.key[keycode] ) {\n\n            // Prevent it from moving the page and bubbling to doc.\n            event.preventDefault()\n            event.stopPropagation()\n\n            // If `delete` was pressed, clear the values and close the picker.\n            // Otherwise open the picker.\n            if ( isKeycodeDelete ) { P.clear().close() }\n            else { P.open() }\n        }\n    }\n\n\n    // Return a new picker instance.\n    return new PickerInstance()\n} //PickerConstructor\n\n\n\n/**\n * The default classes and prefix to use for the HTML classes.\n */\nPickerConstructor.klasses = function( prefix ) {\n    prefix = prefix || 'picker'\n    return {\n\n        picker: prefix,\n        opened: prefix + '--opened',\n        focused: prefix + '--focused',\n\n        input: prefix + '__input',\n        active: prefix + '__input--active',\n        target: prefix + '__input--target',\n\n        holder: prefix + '__holder',\n\n        frame: prefix + '__frame',\n        wrap: prefix + '__wrap',\n\n        box: prefix + '__box'\n    }\n} //PickerConstructor.klasses\n\n\n\n/**\n * Check if the default theme is being used.\n */\nfunction isUsingDefaultTheme( element ) {\n\n    var theme,\n        prop = 'position'\n\n    // For IE.\n    if ( element.currentStyle ) {\n        theme = element.currentStyle[prop]\n    }\n\n    // For normal browsers.\n    else if ( window.getComputedStyle ) {\n        theme = getComputedStyle( element )[prop]\n    }\n\n    return theme == 'fixed'\n}\n\n\n\n/**\n * Get the width of the browser’s scrollbar.\n * Taken from: https://github.com/VodkaBears/Remodal/blob/master/src/jquery.remodal.js\n */\nfunction getScrollbarWidth() {\n\n    if ( $html.height() <= $window.height() ) {\n        return 0\n    }\n\n    var $outer = $( '<div style=\"visibility:hidden;width:100px\" />' ).\n        appendTo( 'body' )\n\n    // Get the width without scrollbars.\n    var widthWithoutScroll = $outer[0].offsetWidth\n\n    // Force adding scrollbars.\n    $outer.css( 'overflow', 'scroll' )\n\n    // Add the inner div.\n    var $inner = $( '<div style=\"width:100%\" />' ).appendTo( $outer )\n\n    // Get the width with scrollbars.\n    var widthWithScroll = $inner[0].offsetWidth\n\n    // Remove the divs.\n    $outer.remove()\n\n    // Return the difference between the widths.\n    return widthWithoutScroll - widthWithScroll\n}\n\n\n\n/**\n * Get the target element from the event.\n * If ELEMENT is supplied and present in the event path (ELEMENT is ancestor of the target),\n * returns ELEMENT instead\n */\nfunction getRealEventTarget( event, ELEMENT ) {\n\n    var path = []\n\n    if ( event.path ) {\n        path = event.path\n    }\n\n    if ( event.originalEvent && event.originalEvent.path ) {\n        path = event.originalEvent.path\n    }\n\n    if ( path && path.length > 0 ) {\n        if ( ELEMENT && path.indexOf( ELEMENT ) >= 0 ) {\n            return ELEMENT\n        } else {\n            return path[0]\n        }\n    }\n\n    return event.target\n}\n\n/**\n * PickerConstructor helper methods.\n */\nPickerConstructor._ = {\n\n    /**\n     * Create a group of nodes. Expects:\n     * `\n        {\n            min:    {Integer},\n            max:    {Integer},\n            i:      {Integer},\n            node:   {String},\n            item:   {Function}\n        }\n     * `\n     */\n    group: function( groupObject ) {\n\n        var\n            // Scope for the looped object\n            loopObjectScope,\n\n            // Create the nodes list\n            nodesList = '',\n\n            // The counter starts from the `min`\n            counter = PickerConstructor._.trigger( groupObject.min, groupObject )\n\n\n        // Loop from the `min` to `max`, incrementing by `i`\n        for ( ; counter <= PickerConstructor._.trigger( groupObject.max, groupObject, [ counter ] ); counter += groupObject.i ) {\n\n            // Trigger the `item` function within scope of the object\n            loopObjectScope = PickerConstructor._.trigger( groupObject.item, groupObject, [ counter ] )\n\n            // Splice the subgroup and create nodes out of the sub nodes\n            nodesList += PickerConstructor._.node(\n                groupObject.node,\n                loopObjectScope[ 0 ],   // the node\n                loopObjectScope[ 1 ],   // the classes\n                loopObjectScope[ 2 ]    // the attributes\n            )\n        }\n\n        // Return the list of nodes\n        return nodesList\n    }, //group\n\n\n    /**\n     * Create a dom node string\n     */\n    node: function( wrapper, item, klass, attribute ) {\n\n        // If the item is false-y, just return an empty string\n        if ( !item ) return ''\n\n        // If the item is an array, do a join\n        item = $.isArray( item ) ? item.join( '' ) : item\n\n        // Check for the class\n        klass = klass ? ' class=\"' + klass + '\"' : ''\n\n        // Check for any attributes\n        attribute = attribute ? ' ' + attribute : ''\n\n        // Return the wrapped item\n        return '<' + wrapper + klass + attribute + '>' + item + '</' + wrapper + '>'\n    }, //node\n\n\n    /**\n     * Lead numbers below 10 with a zero.\n     */\n    lead: function( number ) {\n        return ( number < 10 ? '0': '' ) + number\n    },\n\n\n    /**\n     * Trigger a function otherwise return the value.\n     */\n    trigger: function( callback, scope, args ) {\n        return typeof callback == 'function' ? callback.apply( scope, args || [] ) : callback\n    },\n\n\n    /**\n     * If the second character is a digit, length is 2 otherwise 1.\n     */\n    digits: function( string ) {\n        return ( /\\d/ ).test( string[ 1 ] ) ? 2 : 1\n    },\n\n\n    /**\n     * Tell if something is a date object.\n     */\n    isDate: function( value ) {\n        return {}.toString.call( value ).indexOf( 'Date' ) > -1 && this.isInteger( value.getDate() )\n    },\n\n\n    /**\n     * Tell if something is an integer.\n     */\n    isInteger: function( value ) {\n        return {}.toString.call( value ).indexOf( 'Number' ) > -1 && value % 1 === 0\n    },\n\n\n    /**\n     * Create ARIA attribute strings.\n     */\n    ariaAttr: ariaAttr\n} //PickerConstructor._\n\n\n\n/**\n * Extend the picker with a component and defaults.\n */\nPickerConstructor.extend = function( name, Component ) {\n\n    // Extend jQuery.\n    $.fn[ name ] = function( options, action ) {\n\n        // Grab the component data.\n        var componentData = this.data( name )\n\n        // If the picker is requested, return the data object.\n        if ( options == 'picker' ) {\n            return componentData\n        }\n\n        // If the component data exists and `options` is a string, carry out the action.\n        if ( componentData && typeof options == 'string' ) {\n            return PickerConstructor._.trigger( componentData[ options ], componentData, [ action ] )\n        }\n\n        // Otherwise go through each matched element and if the component\n        // doesn’t exist, create a new picker using `this` element\n        // and merging the defaults and options with a deep copy.\n        return this.each( function() {\n            var $this = $( this )\n            if ( !$this.data( name ) ) {\n                new PickerConstructor( this, name, Component, options )\n            }\n        })\n    }\n\n    // Set the defaults.\n    $.fn[ name ].defaults = Component.defaults\n} //PickerConstructor.extend\n\n\n\nfunction aria(element, attribute, value) {\n    if ( $.isPlainObject(attribute) ) {\n        for ( var key in attribute ) {\n            ariaSet(element, key, attribute[key])\n        }\n    }\n    else {\n        ariaSet(element, attribute, value)\n    }\n}\nfunction ariaSet(element, attribute, value) {\n    element.setAttribute(\n        (attribute == 'role' ? '' : 'aria-') + attribute,\n        value\n    )\n}\nfunction ariaAttr(attribute, data) {\n    if ( !$.isPlainObject(attribute) ) {\n        attribute = { attribute: data }\n    }\n    data = ''\n    for ( var key in attribute ) {\n        var attr = (key == 'role' ? '' : 'aria-') + key,\n            attrVal = attribute[key]\n        data += attrVal == null ? '' : attr + '=\"' + attribute[key] + '\"'\n    }\n    return data\n}\n\n// IE8 bug throws an error for activeElements within iframes.\nfunction getActiveElement() {\n    try {\n        return document.activeElement\n    } catch ( err ) { }\n}\n\n\n\n// Expose the picker constructor.\nreturn PickerConstructor\n\n\n}));\n"
  },
  {
    "path": "public/backend/vendors/js/pickers/pickadate/picker.time.js",
    "content": "/*!\n * Time picker for pickadate.js v3.6.4\n * http://amsul.github.io/pickadate.js/time.htm\n */\n\n(function ( factory ) {\n\n    // AMD.\n    if ( typeof define == 'function' && define.amd )\n        define( ['./picker', 'jquery'], factory )\n\n    // Node.js/browserify.\n    else if ( typeof exports == 'object' )\n        module.exports = factory( require('./picker.js'), require('jquery') )\n\n    // Browser globals.\n    else factory( Picker, jQuery )\n\n}(function( Picker, $ ) {\n\n\n/**\n * Globals and constants\n */\nvar HOURS_IN_DAY = 24,\n    MINUTES_IN_HOUR = 60,\n    HOURS_TO_NOON = 12,\n    MINUTES_IN_DAY = HOURS_IN_DAY * MINUTES_IN_HOUR,\n    _ = Picker._\n\n\n\n/**\n * The time picker constructor\n */\nfunction TimePicker( picker, settings ) {\n\n    var clock = this,\n        elementValue = picker.$node[ 0 ].value,\n        elementDataValue = picker.$node.data( 'value' ),\n        valueString = elementDataValue || elementValue,\n        formatString = elementDataValue ? settings.formatSubmit : settings.format\n\n    clock.settings = settings\n    clock.$node = picker.$node\n\n    // The queue of methods that will be used to build item objects.\n    clock.queue = {\n        interval: 'i',\n        min: 'measure create',\n        max: 'measure create',\n        now: 'now create',\n        select: 'parse create validate',\n        highlight: 'parse create validate',\n        view: 'parse create validate',\n        disable: 'deactivate',\n        enable: 'activate'\n    }\n\n    // The component's item object.\n    clock.item = {}\n\n    clock.item.clear = null\n    clock.item.interval = settings.interval || 30\n    clock.item.disable = ( settings.disable || [] ).slice( 0 )\n    clock.item.enable = -(function( collectionDisabled ) {\n        return collectionDisabled[ 0 ] === true ? collectionDisabled.shift() : -1\n    })( clock.item.disable )\n\n    clock.\n        set( 'min', settings.min ).\n        set( 'max', settings.max ).\n        set( 'now' )\n\n    // When there’s a value, set the `select`, which in turn\n    // also sets the `highlight` and `view`.\n    if ( valueString ) {\n        clock.set( 'select', valueString, {\n            format: formatString\n        })\n    }\n\n    // If there’s no value, default to highlighting “today”.\n    else {\n        clock.\n            set( 'select', null ).\n            set( 'highlight', clock.item.now )\n    }\n\n    // The keycode to movement mapping.\n    clock.key = {\n        40: 1, // Down\n        38: -1, // Up\n        39: 1, // Right\n        37: -1, // Left\n        go: function( timeChange ) {\n            clock.set(\n                'highlight',\n                clock.item.highlight.pick + timeChange * clock.item.interval,\n                { interval: timeChange * clock.item.interval }\n            )\n            this.render()\n        }\n    }\n\n\n    // Bind some picker events.\n    picker.\n        on( 'render', function() {\n            var $pickerHolder = picker.$root.children(),\n                $viewset = $pickerHolder.find( '.' + settings.klass.viewset ),\n                vendors = function( prop ) {\n                    return ['webkit', 'moz', 'ms', 'o', ''].map(function( vendor ) {\n                        return ( vendor ? '-' + vendor + '-' : '' ) + prop\n                    })\n                },\n                animations = function( $el, state ) {\n                    vendors( 'transform' ).map(function( prop ) {\n                        $el.css( prop, state )\n                    })\n                    vendors( 'transition' ).map(function( prop ) {\n                        $el.css( prop, state )\n                    })\n                }\n            if ( $viewset.length ) {\n                animations( $pickerHolder, 'none' )\n                $pickerHolder[ 0 ].scrollTop = ~~$viewset.position().top - ( $viewset[ 0 ].clientHeight * 2 )\n                animations( $pickerHolder, '' )\n            }\n        }, 1 ).\n        on( 'open', function() {\n            picker.$root.find( 'button' ).attr( 'disabled', false )\n        }, 1 ).\n        on( 'close', function() {\n            picker.$root.find( 'button' ).attr( 'disabled', true )\n        }, 1 )\n\n} //TimePicker\n\n\n/**\n * Set a timepicker item object.\n */\nTimePicker.prototype.set = function( type, value, options ) {\n\n    var clock = this,\n        clockItem = clock.item\n\n    // If the value is `null` just set it immediately.\n    if ( value === null ) {\n        if ( type == 'clear' ) type = 'select'\n        clockItem[ type ] = value\n        return clock\n    }\n\n    // Otherwise go through the queue of methods, and invoke the functions.\n    // Update this as the time unit, and set the final value as this item.\n    // * In the case of `enable`, keep the queue but set `disable` instead.\n    //   And in the case of `flip`, keep the queue but set `enable` instead.\n    clockItem[ ( type == 'enable' ? 'disable' : type == 'flip' ? 'enable' : type ) ] = clock.queue[ type ].split( ' ' ).map( function( method ) {\n        value = clock[ method ]( type, value, options )\n        return value\n    }).pop()\n\n    // Check if we need to cascade through more updates.\n    if ( type == 'select' ) {\n        clock.set( 'highlight', clockItem.select, options )\n    }\n    else if ( type == 'highlight' ) {\n        clock.set( 'view', clockItem.highlight, options )\n    }\n    else if ( type == 'interval' ) {\n        clock.\n            set( 'min', clockItem.min, options ).\n            set( 'max', clockItem.max, options )\n    }\n    else if ( type.match( /^(flip|min|max|disable|enable)$/ ) ) {\n        if ( clockItem.select && clock.disabled( clockItem.select ) ) {\n            clock.set( 'select', value, options )\n        }\n        if ( clockItem.highlight && clock.disabled( clockItem.highlight ) ) {\n            clock.set( 'highlight', value, options )\n        }\n        if ( type == 'min' ) {\n            clock.set( 'max', clockItem.max, options )\n        }\n    }\n\n    return clock\n} //TimePicker.prototype.set\n\n\n/**\n * Get a timepicker item object.\n */\nTimePicker.prototype.get = function( type ) {\n    return this.item[ type ]\n} //TimePicker.prototype.get\n\n\n/**\n * Create a picker time object.\n */\nTimePicker.prototype.create = function( type, value, options ) {\n\n    var clock = this\n\n    // If there’s no value, use the type as the value.\n    value = value === undefined ? type : value\n\n    // If it’s a date object, convert it into an array.\n    if ( _.isDate( value ) ) {\n        value = [ value.getHours(), value.getMinutes() ]\n    }\n\n    // If it’s an object, use the “pick” value.\n    if ( $.isPlainObject( value ) && _.isInteger( value.pick ) ) {\n        value = value.pick\n    }\n\n    // If it’s an array, convert it into minutes.\n    else if ( $.isArray( value ) ) {\n        value = +value[ 0 ] * MINUTES_IN_HOUR + (+value[ 1 ])\n    }\n\n    // If no valid value is passed, set it to “now”.\n    else if ( !_.isInteger( value ) ) {\n        value = clock.now( type, value, options )\n    }\n\n    // If we’re setting the max, make sure it’s greater than the min.\n    if ( type == 'max' && value < clock.item.min.pick ) {\n        value += MINUTES_IN_DAY\n    }\n\n    // If the value doesn’t fall directly on the interval,\n    // add one interval to indicate it as “passed”.\n    if ( type != 'min' && type != 'max' && (value - clock.item.min.pick) % clock.item.interval !== 0 ) {\n        value += clock.item.interval\n    }\n\n    // Normalize it into a “reachable” interval.\n    value = clock.normalize( type, value, options )\n\n    // Return the compiled object.\n    return {\n\n        // Divide to get hours from minutes.\n        hour: ~~( HOURS_IN_DAY + value / MINUTES_IN_HOUR ) % HOURS_IN_DAY,\n\n        // The remainder is the minutes.\n        mins: ( MINUTES_IN_HOUR + value % MINUTES_IN_HOUR ) % MINUTES_IN_HOUR,\n\n        // The time in total minutes.\n        time: ( MINUTES_IN_DAY + value ) % MINUTES_IN_DAY,\n\n        // Reference to the “relative” value to pick.\n        pick: value % MINUTES_IN_DAY\n    }\n} //TimePicker.prototype.create\n\n\n/**\n * Create a range limit object using an array, date object,\n * literal “true”, or integer relative to another time.\n */\nTimePicker.prototype.createRange = function( from, to ) {\n\n    var clock = this,\n        createTime = function( time ) {\n            if ( time === true || $.isArray( time ) || _.isDate( time ) ) {\n                return clock.create( time )\n            }\n            return time\n        }\n\n    // Create objects if possible.\n    if ( !_.isInteger( from ) ) {\n        from = createTime( from )\n    }\n    if ( !_.isInteger( to ) ) {\n        to = createTime( to )\n    }\n\n    // Create relative times.\n    if ( _.isInteger( from ) && $.isPlainObject( to ) ) {\n        from = [ to.hour, to.mins + ( from * clock.settings.interval ) ];\n    }\n    else if ( _.isInteger( to ) && $.isPlainObject( from ) ) {\n        to = [ from.hour, from.mins + ( to * clock.settings.interval ) ];\n    }\n\n    return {\n        from: createTime( from ),\n        to: createTime( to )\n    }\n} //TimePicker.prototype.createRange\n\n\n/**\n * Check if a time unit falls within a time range object.\n */\nTimePicker.prototype.withinRange = function( range, timeUnit ) {\n    range = this.createRange(range.from, range.to)\n    return timeUnit.pick >= range.from.pick && timeUnit.pick <= range.to.pick\n}\n\n\n/**\n * Check if two time range objects overlap.\n */\nTimePicker.prototype.overlapRanges = function( one, two ) {\n\n    var clock = this\n\n    // Convert the ranges into comparable times.\n    one = clock.createRange( one.from, one.to )\n    two = clock.createRange( two.from, two.to )\n\n    return clock.withinRange( one, two.from ) || clock.withinRange( one, two.to ) ||\n        clock.withinRange( two, one.from ) || clock.withinRange( two, one.to )\n}\n\n\n/**\n * Get the time relative to now.\n */\nTimePicker.prototype.now = function( type, value/*, options*/ ) {\n\n    var interval = this.item.interval,\n        date = new Date(),\n        nowMinutes = date.getHours() * MINUTES_IN_HOUR + date.getMinutes(),\n        isValueInteger = _.isInteger( value ),\n        isBelowInterval\n\n    // Make sure “now” falls within the interval range.\n    nowMinutes -= nowMinutes % interval\n\n    // Check if the difference is less than the interval itself.\n    isBelowInterval = value < 0 && interval * value + nowMinutes <= -interval\n\n    // Add an interval because the time has “passed”.\n    nowMinutes += type == 'min' && isBelowInterval ? 0 : interval\n\n    // If the value is a number, adjust by that many intervals.\n    if ( isValueInteger ) {\n        nowMinutes += interval * (\n            isBelowInterval && type != 'max' ?\n                value + 1 :\n                value\n            )\n    }\n\n    // Return the final calculation.\n    return nowMinutes\n} //TimePicker.prototype.now\n\n\n/**\n * Normalize minutes to be “reachable” based on the min and interval.\n */\nTimePicker.prototype.normalize = function( type, value/*, options*/ ) {\n\n    var interval = this.item.interval,\n        minTime = this.item.min && this.item.min.pick || 0\n\n    // If setting min time, don’t shift anything.\n    // Otherwise get the value and min difference and then\n    // normalize the difference with the interval.\n    value -= type == 'min' ? 0 : ( value - minTime ) % interval\n\n    // Return the adjusted value.\n    return value\n} //TimePicker.prototype.normalize\n\n\n/**\n * Measure the range of minutes.\n */\nTimePicker.prototype.measure = function( type, value, options ) {\n\n    var clock = this\n\n    // If it’s anything false-y, set it to the default.\n    if ( !value ) {\n        value = type == 'min' ? [ 0, 0 ] : [ HOURS_IN_DAY - 1, MINUTES_IN_HOUR - 1 ]\n    }\n\n    // If it’s a string, parse it.\n    if ( typeof value == 'string' ) {\n        value = clock.parse( type, value )\n    }\n\n    // If it’s a literal true, or an integer, make it relative to now.\n    else if ( value === true || _.isInteger( value ) ) {\n        value = clock.now( type, value, options )\n    }\n\n    // If it’s an object already, just normalize it.\n    else if ( $.isPlainObject( value ) && _.isInteger( value.pick ) ) {\n        value = clock.normalize( type, value.pick, options )\n    }\n\n    return value\n} ///TimePicker.prototype.measure\n\n\n/**\n * Validate an object as enabled.\n */\nTimePicker.prototype.validate = function( type, timeObject, options ) {\n\n    var clock = this,\n        interval = options && options.interval ? options.interval : clock.item.interval\n\n    // Check if the object is disabled.\n    if ( clock.disabled( timeObject ) ) {\n\n        // Shift with the interval until we reach an enabled time.\n        timeObject = clock.shift( timeObject, interval )\n    }\n\n    // Scope the object into range.\n    timeObject = clock.scope( timeObject )\n\n    // Do a second check to see if we landed on a disabled min/max.\n    // In that case, shift using the opposite interval as before.\n    if ( clock.disabled( timeObject ) ) {\n        timeObject = clock.shift( timeObject, interval * -1 )\n    }\n\n    // Return the final object.\n    return timeObject\n} //TimePicker.prototype.validate\n\n\n/**\n * Check if an object is disabled.\n */\nTimePicker.prototype.disabled = function( timeToVerify ) {\n\n    var clock = this,\n\n        // Filter through the disabled times to check if this is one.\n        isDisabledMatch = clock.item.disable.filter( function( timeToDisable ) {\n\n            // If the time is a number, match the hours.\n            if ( _.isInteger( timeToDisable ) ) {\n                return timeToVerify.hour == timeToDisable\n            }\n\n            // If it’s an array, create the object and match the times.\n            if ( $.isArray( timeToDisable ) || _.isDate( timeToDisable ) ) {\n                return timeToVerify.pick == clock.create( timeToDisable ).pick\n            }\n\n            // If it’s an object, match a time within the “from” and “to” range.\n            if ( $.isPlainObject( timeToDisable ) ) {\n                return clock.withinRange( timeToDisable, timeToVerify )\n            }\n        })\n\n    // If this time matches a disabled time, confirm it’s not inverted.\n    isDisabledMatch = isDisabledMatch.length && !isDisabledMatch.filter(function( timeToDisable ) {\n        return $.isArray( timeToDisable ) && timeToDisable[2] == 'inverted' ||\n            $.isPlainObject( timeToDisable ) && timeToDisable.inverted\n    }).length\n\n    // If the clock is \"enabled\" flag is flipped, flip the condition.\n    return clock.item.enable === -1 ? !isDisabledMatch : isDisabledMatch ||\n        timeToVerify.pick < clock.item.min.pick ||\n        timeToVerify.pick > clock.item.max.pick\n} //TimePicker.prototype.disabled\n\n\n/**\n * Shift an object by an interval until we reach an enabled object.\n */\nTimePicker.prototype.shift = function( timeObject, interval ) {\n\n    var clock = this,\n        minLimit = clock.item.min.pick,\n        maxLimit = clock.item.max.pick/*,\n        safety = 1000*/\n\n    interval = interval || clock.item.interval\n\n    // Keep looping as long as the time is disabled.\n    while ( /*safety &&*/ clock.disabled( timeObject ) ) {\n\n        /*safety -= 1\n        if ( !safety ) {\n            throw 'Fell into an infinite loop while shifting to ' + timeObject.hour + ':' + timeObject.mins + '.'\n        }*/\n\n        // Increase/decrease the time by the interval and keep looping.\n        timeObject = clock.create( timeObject.pick += interval )\n\n        // If we've looped beyond the limits, break out of the loop.\n        if ( timeObject.pick <= minLimit || timeObject.pick >= maxLimit ) {\n            break\n        }\n    }\n\n    // Return the final object.\n    return timeObject\n} //TimePicker.prototype.shift\n\n\n/**\n * Scope an object to be within range of min and max.\n */\nTimePicker.prototype.scope = function( timeObject ) {\n    var minLimit = this.item.min.pick,\n        maxLimit = this.item.max.pick\n    return this.create( timeObject.pick > maxLimit ? maxLimit : timeObject.pick < minLimit ? minLimit : timeObject )\n} //TimePicker.prototype.scope\n\n\n/**\n * Parse a string into a usable type.\n */\nTimePicker.prototype.parse = function( type, value, options ) {\n\n    var hour, minutes, isPM, item, parseValue,\n        clock = this,\n        parsingObject = {}\n\n    // If it’s already parsed, we’re good.\n    if ( !value || typeof value != 'string' ) {\n        return value\n    }\n\n    // We need a `.format` to parse the value with.\n    if ( !( options && options.format ) ) {\n        options = options || {}\n        options.format = clock.settings.format\n    }\n\n    // Convert the format into an array and then map through it.\n    clock.formats.toArray( options.format ).map( function( label ) {\n\n        var\n            substring,\n\n            // Grab the formatting label.\n            formattingLabel = clock.formats[ label ],\n\n            // The format length is from the formatting label function or the\n            // label length without the escaping exclamation (!) mark.\n            formatLength = formattingLabel ?\n                _.trigger( formattingLabel, clock, [ value, parsingObject ] ) :\n                label.replace( /^!/, '' ).length\n\n        // If there's a format label, split the value up to the format length.\n        // Then add it to the parsing object with appropriate label.\n        if ( formattingLabel ) {\n            substring = value.substr( 0, formatLength )\n            parsingObject[ label ] = substring.match(/^\\d+$/) ? +substring : substring\n        }\n\n        // Update the time value as the substring from format length to end.\n        value = value.substr( formatLength )\n    })\n\n    // Grab the hour and minutes from the parsing object.\n    for ( item in parsingObject ) {\n        parseValue = parsingObject[item]\n        if ( _.isInteger(parseValue) ) {\n            if ( item.match(/^(h|hh)$/i) ) {\n                hour = parseValue\n                if ( item == 'h' || item == 'hh' ) {\n                    hour %= 12\n                }\n            }\n            else if ( item == 'i' ) {\n                minutes = parseValue\n            }\n        }\n        else if ( item.match(/^a$/i) && parseValue.match(/^p/i) && ('h' in parsingObject || 'hh' in parsingObject) ) {\n            isPM = true\n        }\n    }\n\n    // Calculate it in minutes and return.\n    return (isPM ? hour + 12 : hour) * MINUTES_IN_HOUR + minutes\n} //TimePicker.prototype.parse\n\n\n/**\n * Various formats to display the object in.\n */\nTimePicker.prototype.formats = {\n\n    h: function( string, timeObject ) {\n\n        // If there's string, then get the digits length.\n        // Otherwise return the selected hour in \"standard\" format.\n        return string ? _.digits( string ) : timeObject.hour % HOURS_TO_NOON || HOURS_TO_NOON\n    },\n    hh: function( string, timeObject ) {\n\n        // If there's a string, then the length is always 2.\n        // Otherwise return the selected hour in \"standard\" format with a leading zero.\n        return string ? 2 : _.lead( timeObject.hour % HOURS_TO_NOON || HOURS_TO_NOON )\n    },\n    H: function( string, timeObject ) {\n\n        // If there's string, then get the digits length.\n        // Otherwise return the selected hour in \"military\" format as a string.\n        return string ? _.digits( string ) : '' + ( timeObject.hour % 24 )\n    },\n    HH: function( string, timeObject ) {\n\n        // If there's string, then get the digits length.\n        // Otherwise return the selected hour in \"military\" format with a leading zero.\n        return string ? _.digits( string ) : _.lead( timeObject.hour % 24 )\n    },\n    i: function( string, timeObject ) {\n\n        // If there's a string, then the length is always 2.\n        // Otherwise return the selected minutes.\n        return string ? 2 : _.lead( timeObject.mins )\n    },\n    a: function( string, timeObject ) {\n\n        // If there's a string, then the length is always 4.\n        // Otherwise check if it's more than \"noon\" and return either am/pm.\n        return string ? 4 : MINUTES_IN_DAY / 2 > timeObject.time % MINUTES_IN_DAY ? 'a.m.' : 'p.m.'\n    },\n    A: function( string, timeObject ) {\n\n        // If there's a string, then the length is always 2.\n        // Otherwise check if it's more than \"noon\" and return either am/pm.\n        return string ? 2 : MINUTES_IN_DAY / 2 > timeObject.time % MINUTES_IN_DAY ? 'AM' : 'PM'\n    },\n\n    // Create an array by splitting the formatting string passed.\n    toArray: function( formatString ) { return formatString.split( /(h{1,2}|H{1,2}|i|a|A|!.)/g ) },\n\n    // Format an object into a string using the formatting options.\n    toString: function ( formatString, itemObject ) {\n        var clock = this\n        return clock.formats.toArray( formatString ).map( function( label ) {\n            return _.trigger( clock.formats[ label ], clock, [ 0, itemObject ] ) || label.replace( /^!/, '' )\n        }).join( '' )\n    }\n} //TimePicker.prototype.formats\n\n\n\n\n/**\n * Check if two time units are the exact.\n */\nTimePicker.prototype.isTimeExact = function( one, two ) {\n\n    var clock = this\n\n    // When we’re working with minutes, do a direct comparison.\n    if (\n        ( _.isInteger( one ) && _.isInteger( two ) ) ||\n        ( typeof one == 'boolean' && typeof two == 'boolean' )\n     ) {\n        return one === two\n    }\n\n    // When we’re working with time representations, compare the “pick” value.\n    if (\n        ( _.isDate( one ) || $.isArray( one ) ) &&\n        ( _.isDate( two ) || $.isArray( two ) )\n    ) {\n        return clock.create( one ).pick === clock.create( two ).pick\n    }\n\n    // When we’re working with range objects, compare the “from” and “to”.\n    if ( $.isPlainObject( one ) && $.isPlainObject( two ) ) {\n        return clock.isTimeExact( one.from, two.from ) && clock.isTimeExact( one.to, two.to )\n    }\n\n    return false\n}\n\n\n/**\n * Check if two time units overlap.\n */\nTimePicker.prototype.isTimeOverlap = function( one, two ) {\n\n    var clock = this\n\n    // When we’re working with an integer, compare the hours.\n    if ( _.isInteger( one ) && ( _.isDate( two ) || $.isArray( two ) ) ) {\n        return one === clock.create( two ).hour\n    }\n    if ( _.isInteger( two ) && ( _.isDate( one ) || $.isArray( one ) ) ) {\n        return two === clock.create( one ).hour\n    }\n\n    // When we’re working with range objects, check if the ranges overlap.\n    if ( $.isPlainObject( one ) && $.isPlainObject( two ) ) {\n        return clock.overlapRanges( one, two )\n    }\n\n    return false\n}\n\n\n/**\n * Flip the “enabled” state.\n */\nTimePicker.prototype.flipEnable = function(val) {\n    var itemObject = this.item\n    itemObject.enable = val || (itemObject.enable == -1 ? 1 : -1)\n}\n\n\n/**\n * Mark a collection of times as “disabled”.\n */\nTimePicker.prototype.deactivate = function( type, timesToDisable ) {\n\n    var clock = this,\n        disabledItems = clock.item.disable.slice(0)\n\n\n    // If we’re flipping, that’s all we need to do.\n    if ( timesToDisable == 'flip' ) {\n        clock.flipEnable()\n    }\n\n    else if ( timesToDisable === false ) {\n        clock.flipEnable(1)\n        disabledItems = []\n    }\n\n    else if ( timesToDisable === true ) {\n        clock.flipEnable(-1)\n        disabledItems = []\n    }\n\n    // Otherwise go through the times to disable.\n    else {\n\n        timesToDisable.map(function( unitToDisable ) {\n\n            var matchFound\n\n            // When we have disabled items, check for matches.\n            // If something is matched, immediately break out.\n            for ( var index = 0; index < disabledItems.length; index += 1 ) {\n                if ( clock.isTimeExact( unitToDisable, disabledItems[index] ) ) {\n                    matchFound = true\n                    break\n                }\n            }\n\n            // If nothing was found, add the validated unit to the collection.\n            if ( !matchFound ) {\n                if (\n                    _.isInteger( unitToDisable ) ||\n                    _.isDate( unitToDisable ) ||\n                    $.isArray( unitToDisable ) ||\n                    ( $.isPlainObject( unitToDisable ) && unitToDisable.from && unitToDisable.to )\n                ) {\n                    disabledItems.push( unitToDisable )\n                }\n            }\n        })\n    }\n\n    // Return the updated collection.\n    return disabledItems\n} //TimePicker.prototype.deactivate\n\n\n/**\n * Mark a collection of times as “enabled”.\n */\nTimePicker.prototype.activate = function( type, timesToEnable ) {\n\n    var clock = this,\n        disabledItems = clock.item.disable,\n        disabledItemsCount = disabledItems.length\n\n    // If we’re flipping, that’s all we need to do.\n    if ( timesToEnable == 'flip' ) {\n        clock.flipEnable()\n    }\n\n    else if ( timesToEnable === true ) {\n        clock.flipEnable(1)\n        disabledItems = []\n    }\n\n    else if ( timesToEnable === false ) {\n        clock.flipEnable(-1)\n        disabledItems = []\n    }\n\n    // Otherwise go through the disabled times.\n    else {\n\n        timesToEnable.map(function( unitToEnable ) {\n\n            var matchFound,\n                disabledUnit,\n                index,\n                isRangeMatched\n\n            // Go through the disabled items and try to find a match.\n            for ( index = 0; index < disabledItemsCount; index += 1 ) {\n\n                disabledUnit = disabledItems[index]\n\n                // When an exact match is found, remove it from the collection.\n                if ( clock.isTimeExact( disabledUnit, unitToEnable ) ) {\n                    matchFound = disabledItems[index] = null\n                    isRangeMatched = true\n                    break\n                }\n\n                // When an overlapped match is found, add the “inverted” state to it.\n                else if ( clock.isTimeOverlap( disabledUnit, unitToEnable ) ) {\n                    if ( $.isPlainObject( unitToEnable ) ) {\n                        unitToEnable.inverted = true\n                        matchFound = unitToEnable\n                    }\n                    else if ( $.isArray( unitToEnable ) ) {\n                        matchFound = unitToEnable\n                        if ( !matchFound[2] ) matchFound.push( 'inverted' )\n                    }\n                    else if ( _.isDate( unitToEnable ) ) {\n                        matchFound = [ unitToEnable.getFullYear(), unitToEnable.getMonth(), unitToEnable.getDate(), 'inverted' ]\n                    }\n                    break\n                }\n            }\n\n            // If a match was found, remove a previous duplicate entry.\n            if ( matchFound ) for ( index = 0; index < disabledItemsCount; index += 1 ) {\n                if ( clock.isTimeExact( disabledItems[index], unitToEnable ) ) {\n                    disabledItems[index] = null\n                    break\n                }\n            }\n\n            // In the event that we’re dealing with an overlap of range times,\n            // make sure there are no “inverted” times because of it.\n            if ( isRangeMatched ) for ( index = 0; index < disabledItemsCount; index += 1 ) {\n                if ( clock.isTimeOverlap( disabledItems[index], unitToEnable ) ) {\n                    disabledItems[index] = null\n                    break\n                }\n            }\n\n            // If something is still matched, add it into the collection.\n            if ( matchFound ) {\n                disabledItems.push( matchFound )\n            }\n        })\n    }\n\n    // Return the updated collection.\n    return disabledItems.filter(function( val ) { return val != null })\n} //TimePicker.prototype.activate\n\n\n/**\n * The division to use for the range intervals.\n */\nTimePicker.prototype.i = function( type, value/*, options*/ ) {\n    return _.isInteger( value ) && value > 0 ? value : this.item.interval\n}\n\n\n/**\n * Create a string for the nodes in the picker.\n */\nTimePicker.prototype.nodes = function( isOpen ) {\n\n    var\n        clock = this,\n        settings = clock.settings,\n        selectedObject = clock.item.select,\n        highlightedObject = clock.item.highlight,\n        viewsetObject = clock.item.view,\n        disabledCollection = clock.item.disable\n\n    return _.node(\n        'ul',\n        _.group({\n            min: clock.item.min.pick,\n            max: clock.item.max.pick,\n            i: clock.item.interval,\n            node: 'li',\n            item: function( loopedTime ) {\n                loopedTime = clock.create( loopedTime )\n                var timeMinutes = loopedTime.pick,\n                    isSelected = selectedObject && selectedObject.pick == timeMinutes,\n                    isHighlighted = highlightedObject && highlightedObject.pick == timeMinutes,\n                    isDisabled = disabledCollection && clock.disabled( loopedTime ),\n                    formattedTime = _.trigger( clock.formats.toString, clock, [ settings.format, loopedTime ] )\n                return [\n                    _.trigger( clock.formats.toString, clock, [ _.trigger( settings.formatLabel, clock, [ loopedTime ] ) || settings.format, loopedTime ] ),\n                    (function( klasses ) {\n\n                        if ( isSelected ) {\n                            klasses.push( settings.klass.selected )\n                        }\n\n                        if ( isHighlighted ) {\n                            klasses.push( settings.klass.highlighted )\n                        }\n\n                        if ( viewsetObject && viewsetObject.pick == timeMinutes ) {\n                            klasses.push( settings.klass.viewset )\n                        }\n\n                        if ( isDisabled ) {\n                            klasses.push( settings.klass.disabled )\n                        }\n\n                        return klasses.join( ' ' )\n                    })( [ settings.klass.listItem ] ),\n                    'data-pick=' + loopedTime.pick + ' ' + _.ariaAttr({\n                        role: 'option',\n                        label: formattedTime,\n                        selected: isSelected && clock.$node.val() === formattedTime ? true : null,\n                        activedescendant: isHighlighted ? true : null,\n                        disabled: isDisabled ? true : null\n                    })\n                ]\n            }\n        }) +\n\n        // * For Firefox forms to submit, make sure to set the button’s `type` attribute as “button”.\n        _.node(\n            'li',\n            _.node(\n                'button',\n                settings.clear,\n                settings.klass.buttonClear,\n                'type=button data-clear=1' + ( isOpen ? '' : ' disabled' ) + ' ' +\n                _.ariaAttr({ controls: clock.$node[0].id })\n            ),\n            '', _.ariaAttr({ role: 'presentation' })\n        ),\n        settings.klass.list,\n        _.ariaAttr({ role: 'listbox', controls: clock.$node[0].id })\n    )\n} //TimePicker.prototype.nodes\n\n\n\n\n\n\n\n/**\n * Extend the picker to add the component with the defaults.\n */\nTimePicker.defaults = (function( prefix ) {\n\n    return {\n\n        // Clear\n        clear: 'Clear',\n\n        // The format to show on the `input` element\n        format: 'h:i A',\n\n        // The interval between each time\n        interval: 30,\n\n        // Picker close behavior\n        closeOnSelect: true,\n        closeOnClear: true,\n\n        // Update input value on select/clear\n        updateInput: true,\n\n        // Classes\n        klass: {\n\n            picker: prefix + ' ' + prefix + '--time',\n            holder: prefix + '__holder',\n\n            list: prefix + '__list',\n            listItem: prefix + '__list-item',\n\n            disabled: prefix + '__list-item--disabled',\n            selected: prefix + '__list-item--selected',\n            highlighted: prefix + '__list-item--highlighted',\n            viewset: prefix + '__list-item--viewset',\n            now: prefix + '__list-item--now',\n\n            buttonClear: prefix + '__button--clear'\n        }\n    }\n})( Picker.klasses().picker )\n\n\n\n\n\n/**\n * Extend the picker to add the time picker.\n */\nPicker.extend( 'pickatime', TimePicker )\n\n\n}));\n\n\n\n"
  },
  {
    "path": "public/backend/vendors/js/tables/ag-grid/ag-grid-community.min.noStyle.js",
    "content": "// ag-grid-community v21.2.1\n!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof exports?exports.agGrid=t():e.agGrid=t()}(window,function(){return function(e){var t={};function o(i){if(t[i])return t[i].exports;var n=t[i]={i:i,l:!1,exports:{}};return e[i].call(n.exports,n,n.exports,o),n.l=!0,n.exports}return o.m=e,o.c=t,o.d=function(e,t,i){o.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},o.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},o.t=function(e,t){if(1&t&&(e=o(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(o.r(i),Object.defineProperty(i,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var n in e)o.d(i,n,function(t){return e[t]}.bind(null,n));return i},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,\"a\",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p=\"\",o(o.s=146)}([function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */Object.defineProperty(t,\"__esModule\",{value:!0});var i=o(1),n=function(){function e(e,t){if(this.beanWrappers={},this.registeredModules=[],this.componentsMappedByName={},this.destroyed=!1,e&&e.beans){this.contextParams=e,this.registeredModules=e.registeredModules,this.logger=t,this.logger.log(\">> creating ag-Application Context\"),this.setupComponents(),this.createBeans();var o=this.getBeanInstances();this.wireBeans(o),this.logger.log(\">> ag-Application Context ready - component is alive\")}}return e.prototype.getBeanInstances=function(){return i._.mapObject(this.beanWrappers,function(e){return e.beanInstance})},e.prototype.setupComponents=function(){var e=this;this.contextParams.components&&this.contextParams.components.forEach(function(t){return e.addComponent(t)})},e.prototype.addComponent=function(e){var t=e.componentName.replace(/([a-z])([A-Z])/g,\"$1-$2\").toLowerCase().toUpperCase();this.componentsMappedByName[t]=e.theClass},e.prototype.createComponentFromElement=function(e,t){var o=e.nodeName;if(this.componentsMappedByName&&this.componentsMappedByName[o]){var i=new this.componentsMappedByName[o];return this.wireBean(i,t),i}return null},e.prototype.wireBean=function(e,t){if(!e)throw Error(\"Can't wire to bean since it is null\");this.wireBeans([e],t)},e.prototype.wireBeans=function(e,t){this.autoWireBeans(e),this.methodWireBeans(e),this.callLifeCycleMethods(e,\"preConstructMethods\"),i._.exists(t)&&e.forEach(t),this.callLifeCycleMethods(e,\"postConstructMethods\")},e.prototype.createBeans=function(){var e=this;this.contextParams.beans.forEach(this.createBeanWrapper.bind(this)),this.contextParams.overrideBeans&&this.contextParams.overrideBeans.forEach(this.createBeanWrapper.bind(this)),i._.iterateObject(this.beanWrappers,function(t,o){var i;o.bean.__agBeanMetaData&&o.bean.__agBeanMetaData.autowireMethods&&o.bean.__agBeanMetaData.autowireMethods.agConstructor&&(i=o.bean.__agBeanMetaData.autowireMethods.agConstructor);var n,r,s=e.getBeansForParameters(i,o.bean.name),a=(n=o.bean,r=[null].concat(s),new(n.bind.apply(n,r)));o.beanInstance=a,e.logger.log(\"bean \"+e.getBeanName(a)+\" created\")})},e.prototype.createBeanWrapper=function(e){var t=e.__agBeanMetaData;if(!t){var o=void 0;return o=e.prototype.constructor?e.prototype.constructor.name:\"\"+e,void console.error(\"context item \"+o+\" is not a bean\")}var i={bean:e,beanInstance:null,beanName:t.beanName};this.beanWrappers[t.beanName]=i},e.prototype.autoWireBeans=function(e){var t=this;e.forEach(function(e){t.forEachMetaDataInHierarchy(e,function(o,i){var n=o.agClassAttributes;n&&n.forEach(function(o){var n=t.lookupBeanInstance(i,o.beanName,o.optional);e[o.attributeName]=n})})})},e.prototype.methodWireBeans=function(e){var t=this;e.forEach(function(e){t.forEachMetaDataInHierarchy(e,function(o,n){i._.iterateObject(o.autowireMethods,function(o,i){if(\"agConstructor\"!==o){var r=t.getBeansForParameters(i,n);e[o].apply(e,r)}})})})},e.prototype.forEachMetaDataInHierarchy=function(e,t){for(var o=Object.getPrototypeOf(e);null!=o;){var i=o.constructor;if(i.hasOwnProperty(\"__agBeanMetaData\"))t(i.__agBeanMetaData,this.getBeanName(i));o=Object.getPrototypeOf(o)}},e.prototype.getBeanName=function(e){if(e.__agBeanMetaData&&e.__agBeanMetaData.beanName)return e.__agBeanMetaData.beanName;var t=e.toString();return t.substring(9,t.indexOf(\"(\"))},e.prototype.getBeansForParameters=function(e,t){var o=this,n=[];return e&&i._.iterateObject(e,function(e,i){var r=o.lookupBeanInstance(t,i);n[Number(e)]=r}),n},e.prototype.lookupBeanInstance=function(e,t,o){if(void 0===o&&(o=!1),\"context\"===t)return this;if(this.contextParams.seed&&this.contextParams.seed.hasOwnProperty(t))return this.contextParams.seed[t];var i=this.beanWrappers[t];return i?i.beanInstance:(o||console.error(\"ag-Grid: unable to find bean reference \"+t+\" while initialising \"+e),null)},e.prototype.callLifeCycleMethods=function(e,t){var o=this;e.forEach(function(e){o.forEachMetaDataInHierarchy(e,function(o){var i=o[t];i&&i.forEach(function(t){return e[t]()})})})},e.prototype.getBean=function(e){return this.lookupBeanInstance(\"getBean\",e,!0)},e.prototype.getEnterpriseDefaultComponents=function(){return this.contextParams.enterpriseDefaultComponents},e.prototype.destroy=function(){if(!this.destroyed){this.logger.log(\">> Shutting down ag-Application Context\");var e=this.getBeanInstances();this.callLifeCycleMethods(e,\"preDestroyMethods\"),this.contextParams.seed=null,this.destroyed=!0,this.logger.log(\">> ag-Application Context shut down - component is dead\")}},e.prototype.isModuleRegistered=function(e){return-1!==this.registeredModules.indexOf(e)},e}();function r(e,t,o,i,n,r){if(null!==t)if(\"number\"!=typeof r){var a=s(e.constructor);a.agClassAttributes||(a.agClassAttributes=[]),a.agClassAttributes.push({attributeName:n,beanName:t,optional:o})}else console.error(\"ag-Grid: Autowired should be on an attribute\");else console.error(\"ag-Grid: Autowired name should not be null\")}function s(e){return e.hasOwnProperty(\"__agBeanMetaData\")||(e.__agBeanMetaData={}),e.__agBeanMetaData}t.Context=n,t.PreConstruct=function(e,t,o){var i=s(e.constructor);i.postConstructMethods||(i.preConstructMethods=[]),i.preConstructMethods.push(t)},t.PostConstruct=function(e,t,o){var i=s(e.constructor);i.postConstructMethods||(i.postConstructMethods=[]),i.postConstructMethods.push(t)},t.PreDestroy=function(e,t,o){var i=s(e.constructor);i.preDestroyMethods||(i.preDestroyMethods=[]),i.preDestroyMethods.push(t)},t.Bean=function(e){return function(t){s(t).beanName=e}},t.Autowired=function(e){return function(t,o,i){r(t,e,!1,t,o,null)}},t.Optional=function(e){return function(t,o,i){r(t,e,!0,t,o,null)}},t.Qualifier=function(e){return function(t,o,i){var n,r=\"function\"==typeof t?t:t.constructor;if(\"number\"==typeof i){var a=void 0;o?(n=s(r),a=o):(n=s(r),a=\"agConstructor\"),n.autowireMethods||(n.autowireMethods={}),n.autowireMethods[a]||(n.autowireMethods[a]={}),n.autowireMethods[a][i]=e}}}},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */function i(e){for(var o in e)t.hasOwnProperty(o)||(t[o]=e[o])}Object.defineProperty(t,\"__esModule\",{value:!0}),i(o(148)),i(o(149)),i(o(150)),i(o(151))},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)},r=this&&this.__param||function(e,t){return function(o,i){t(o,i,e)}};Object.defineProperty(t,\"__esModule\",{value:!0});var s=o(1),a=o(3),l=o(6),p=o(64),u=o(8),d=o(0),c=o(9),h=o(4),f=o(42),g=o(101),y=o(114),v=o(28),m=o(91),C=o(115);function E(e){return!0===e||\"true\"===e}var w=function(){function e(){this.propertyEventService=new a.EventService,this.domDataKey=\"__AG_\"+Math.random().toString(),this.layoutElements=[]}var t;return t=e,e.prototype.agWire=function(e,t){this.gridOptions.api=e,this.gridOptions.columnApi=t,this.checkForDeprecated(),this.checkForViolations()},e.prototype.destroy=function(){this.gridOptions.api=null,this.gridOptions.columnApi=null},e.prototype.init=function(){!0!==this.gridOptions.suppressPropertyNamesCheck&&(this.checkGridOptionsProperties(),this.checkColumnDefProperties());var e=this.useAsyncEvents();this.eventService.addGlobalListener(this.globalEventHandler.bind(this),e),this.isGroupSelectsChildren()&&this.isSuppressParentsInRowNodes()&&console.warn(\"ag-Grid: groupSelectsChildren does not work wth suppressParentsInRowNodes, this selection method needs the part in rowNode to work\"),this.isGroupSelectsChildren()&&(this.isRowSelectionMulti()||console.warn(\"ag-Grid: rowSelection must be 'multiple' for groupSelectsChildren to make sense\"),this.isRowModelServerSide()&&console.warn(\"ag-Grid: group selects children is NOT support for Server Side Row Model. This is because the rows are lazy loaded, so selecting a group is not possible asthe grid has no way of knowing what the children are.\")),this.isGroupRemoveSingleChildren()&&this.isGroupHideOpenParents()&&console.warn(\"ag-Grid: groupRemoveSingleChildren and groupHideOpenParents do not work with each other, you need to pick one. And don't ask us how to us these together on our support forum either you will get the same answer!\"),this.addEventListener(t.PROP_DOM_LAYOUT,this.updateLayoutClasses.bind(this))},e.prototype.checkColumnDefProperties=function(){var e=this;null!=this.gridOptions.columnDefs&&this.gridOptions.columnDefs.forEach(function(t){var o=Object.getOwnPropertyNames(t),i=y.ColDefUtil.ALL_PROPERTIES.concat(y.ColDefUtil.FRAMEWORK_PROPERTIES);e.checkProperties(o,i,i,\"colDef\",\"https://www.ag-grid.com/javascript-grid-column-properties/\")})},e.prototype.checkGridOptionsProperties=function(){var e=Object.getOwnPropertyNames(this.gridOptions),t=g.PropertyKeys.ALL_PROPERTIES.concat(g.PropertyKeys.FRAMEWORK_PROPERTIES);Object.keys(v.Events).forEach(function(e){return t.push(p.ComponentUtil.getCallbackForEvent(v.Events[e]))});var o=t.concat(\"api\",\"columnApi\");this.checkProperties(e,o,t,\"gridOptions\",\"https://www.ag-grid.com/javascript-grid-properties/\")},e.prototype.checkProperties=function(e,t,o,i,n){var r=s._.fuzzyCheckStrings(e,t,o),a=Object.keys(r);a.forEach(function(e){var t=r[e];console.warn(\"ag-grid: invalid \"+i+\" property '\"+e+\"' did you mean any of these: \"+t.slice(0,8).join(\",\"))}),a.length>0&&console.warn(\"ag-grid: to see all the valid \"+i+\" properties please check: \"+n)},e.prototype.getDomData=function(e,t){var o=e[this.domDataKey];if(o)return o[t]},e.prototype.setDomData=function(e,t,o){var i=e[this.domDataKey];s._.missing(i)&&(i={},e[this.domDataKey]=i),i[t]=o},e.prototype.isEnterprise=function(){return this.enterprise},e.prototype.isRowSelection=function(){return\"single\"===this.gridOptions.rowSelection||\"multiple\"===this.gridOptions.rowSelection},e.prototype.isRowDeselection=function(){return E(this.gridOptions.rowDeselection)},e.prototype.isRowSelectionMulti=function(){return\"multiple\"===this.gridOptions.rowSelection},e.prototype.isRowMultiSelectWithClick=function(){return E(this.gridOptions.rowMultiSelectWithClick)},e.prototype.getContext=function(){return this.gridOptions.context},e.prototype.isPivotMode=function(){return E(this.gridOptions.pivotMode)},e.prototype.isPivotTotals=function(){return E(this.gridOptions.pivotTotals)},e.prototype.getPivotColumnGroupTotals=function(){return this.gridOptions.pivotColumnGroupTotals},e.prototype.getPivotRowTotals=function(){return this.gridOptions.pivotRowTotals},e.prototype.isRowModelInfinite=function(){return this.gridOptions.rowModelType===l.Constants.ROW_MODEL_TYPE_INFINITE},e.prototype.isRowModelViewport=function(){return this.gridOptions.rowModelType===l.Constants.ROW_MODEL_TYPE_VIEWPORT},e.prototype.isRowModelServerSide=function(){return this.gridOptions.rowModelType===l.Constants.ROW_MODEL_TYPE_SERVER_SIDE},e.prototype.isRowModelDefault=function(){return s._.missing(this.gridOptions.rowModelType)||this.gridOptions.rowModelType===l.Constants.ROW_MODEL_TYPE_CLIENT_SIDE||this.gridOptions.rowModelType===l.Constants.DEPRECATED_ROW_MODEL_TYPE_NORMAL},e.prototype.isFullRowEdit=function(){return\"fullRow\"===this.gridOptions.editType},e.prototype.isSuppressFocusAfterRefresh=function(){return E(this.gridOptions.suppressFocusAfterRefresh)},e.prototype.isSuppressBrowserResizeObserver=function(){return E(this.gridOptions.suppressBrowserResizeObserver)},e.prototype.isSuppressMaintainUnsortedOrder=function(){return E(this.gridOptions.suppressMaintainUnsortedOrder)},e.prototype.isShowToolPanel=function(){return E(this.gridOptions.sideBar&&Array.isArray(this.getSideBar().toolPanels))},e.prototype.getSideBar=function(){return this.gridOptions.sideBar},e.prototype.isSuppressTouch=function(){return E(this.gridOptions.suppressTouch)},e.prototype.isSuppressRowTransform=function(){return E(this.gridOptions.suppressRowTransform)},e.prototype.isSuppressSetColumnStateEvents=function(){return E(this.gridOptions.suppressSetColumnStateEvents)},e.prototype.useAsyncEvents=function(){return!E(this.gridOptions.suppressAsyncEvents)},e.prototype.isEnableCellChangeFlash=function(){return E(this.gridOptions.enableCellChangeFlash)},e.prototype.isGroupSelectsChildren=function(){var e=E(this.gridOptions.groupSelectsChildren);return e&&this.isTreeData()?(console.warn(\"ag-Grid: groupSelectsChildren does not work with tree data\"),!1):e},e.prototype.isSuppressRowHoverHighlight=function(){return E(this.gridOptions.suppressRowHoverHighlight)},e.prototype.isGroupSelectsFiltered=function(){return E(this.gridOptions.groupSelectsFiltered)},e.prototype.isGroupHideOpenParents=function(){return E(this.gridOptions.groupHideOpenParents)},e.prototype.isGroupMultiAutoColumn=function(){return E(this.gridOptions.groupMultiAutoColumn)||E(this.gridOptions.groupHideOpenParents)},e.prototype.isGroupRemoveSingleChildren=function(){return E(this.gridOptions.groupRemoveSingleChildren)},e.prototype.isGroupRemoveLowestSingleChildren=function(){return E(this.gridOptions.groupRemoveLowestSingleChildren)},e.prototype.isGroupIncludeFooter=function(){return E(this.gridOptions.groupIncludeFooter)},e.prototype.isGroupIncludeTotalFooter=function(){return E(this.gridOptions.groupIncludeTotalFooter)},e.prototype.isGroupSuppressBlankHeader=function(){return E(this.gridOptions.groupSuppressBlankHeader)},e.prototype.isSuppressRowClickSelection=function(){return E(this.gridOptions.suppressRowClickSelection)},e.prototype.isSuppressCellSelection=function(){return E(this.gridOptions.suppressCellSelection)},e.prototype.isSuppressMultiSort=function(){return E(this.gridOptions.suppressMultiSort)},e.prototype.isMultiSortKeyCtrl=function(){return\"ctrl\"===this.gridOptions.multiSortKey},e.prototype.isGroupSuppressAutoColumn=function(){return E(this.gridOptions.groupSuppressAutoColumn)},e.prototype.isSuppressDragLeaveHidesColumns=function(){return E(this.gridOptions.suppressDragLeaveHidesColumns)},e.prototype.isSuppressScrollOnNewData=function(){return E(this.gridOptions.suppressScrollOnNewData)},e.prototype.isRowDragManaged=function(){return E(this.gridOptions.rowDragManaged)},e.prototype.isSuppressRowDrag=function(){return E(this.gridOptions.suppressRowDrag)},e.prototype.getDomLayout=function(){var e=this,t=this.gridOptions.domLayout;return t===l.Constants.DOM_LAYOUT_PRINT||t===l.Constants.DOM_LAYOUT_AUTO_HEIGHT||t===l.Constants.DOM_LAYOUT_NORMAL?t:null==t?l.Constants.DOM_LAYOUT_NORMAL:(s._.doOnce(function(){return console.warn(\"ag-Grid: \"+e.gridOptions.domLayout+\" is not valid for DOM Layout, valid values are \"+l.Constants.DOM_LAYOUT_NORMAL+\", \"+l.Constants.DOM_LAYOUT_AUTO_HEIGHT+\" and \"+l.Constants.DOM_LAYOUT_PRINT)},\"warn about dom layout values\"),l.Constants.DOM_LAYOUT_NORMAL)},e.prototype.isSuppressHorizontalScroll=function(){return E(this.gridOptions.suppressHorizontalScroll)},e.prototype.isSuppressMaxRenderedRowRestriction=function(){return E(this.gridOptions.suppressMaxRenderedRowRestriction)},e.prototype.isExcludeChildrenWhenTreeDataFiltering=function(){return E(this.gridOptions.excludeChildrenWhenTreeDataFiltering)},e.prototype.isAlwaysShowVerticalScroll=function(){return E(this.gridOptions.alwaysShowVerticalScroll)},e.prototype.isSuppressLoadingOverlay=function(){return E(this.gridOptions.suppressLoadingOverlay)},e.prototype.isSuppressNoRowsOverlay=function(){return E(this.gridOptions.suppressNoRowsOverlay)},e.prototype.isSuppressFieldDotNotation=function(){return E(this.gridOptions.suppressFieldDotNotation)},e.prototype.getPinnedTopRowData=function(){return this.gridOptions.pinnedTopRowData},e.prototype.getPinnedBottomRowData=function(){return this.gridOptions.pinnedBottomRowData},e.prototype.isFunctionsPassive=function(){return E(this.gridOptions.functionsPassive)},e.prototype.isSuppressTabbing=function(){return E(this.gridOptions.suppressTabbing)},e.prototype.isSuppressChangeDetection=function(){return E(this.gridOptions.suppressChangeDetection)},e.prototype.isSuppressAnimationFrame=function(){return E(this.gridOptions.suppressAnimationFrame)},e.prototype.getQuickFilterText=function(){return this.gridOptions.quickFilterText},e.prototype.isCacheQuickFilter=function(){return E(this.gridOptions.cacheQuickFilter)},e.prototype.isUnSortIcon=function(){return E(this.gridOptions.unSortIcon)},e.prototype.isSuppressMenuHide=function(){return E(this.gridOptions.suppressMenuHide)},e.prototype.isEnterMovesDownAfterEdit=function(){return E(this.gridOptions.enterMovesDownAfterEdit)},e.prototype.isEnterMovesDown=function(){return E(this.gridOptions.enterMovesDown)},e.prototype.getRowStyle=function(){return this.gridOptions.rowStyle},e.prototype.getRowClass=function(){return this.gridOptions.rowClass},e.prototype.getRowStyleFunc=function(){return this.gridOptions.getRowStyle},e.prototype.getRowClassFunc=function(){return this.gridOptions.getRowClass},e.prototype.rowClassRules=function(){return this.gridOptions.rowClassRules},e.prototype.getCreateChartContainerFunc=function(){return this.gridOptions.createChartContainer},e.prototype.getPopupParent=function(){return this.gridOptions.popupParent},e.prototype.getBlockLoadDebounceMillis=function(){return this.gridOptions.blockLoadDebounceMillis},e.prototype.getPostProcessPopupFunc=function(){return this.gridOptions.postProcessPopup},e.prototype.getDoesDataFlowerFunc=function(){return this.gridOptions.doesDataFlower},e.prototype.getPaginationNumberFormatterFunc=function(){return this.gridOptions.paginationNumberFormatter},e.prototype.getChildCountFunc=function(){return this.gridOptions.getChildCount},e.prototype.getDefaultGroupSortComparator=function(){return this.gridOptions.defaultGroupSortComparator},e.prototype.getIsFullWidthCellFunc=function(){return this.gridOptions.isFullWidthCell},e.prototype.getFullWidthCellRendererParams=function(){return this.gridOptions.fullWidthCellRendererParams},e.prototype.isEmbedFullWidthRows=function(){return E(this.gridOptions.embedFullWidthRows)||E(this.gridOptions.deprecatedEmbedFullWidthRows)},e.prototype.getSuppressKeyboardEventFunc=function(){return this.gridOptions.suppressKeyboardEvent},e.prototype.getBusinessKeyForNodeFunc=function(){return this.gridOptions.getBusinessKeyForNode},e.prototype.getApi=function(){return this.gridOptions.api},e.prototype.getColumnApi=function(){return this.gridOptions.columnApi},e.prototype.isDeltaRowDataMode=function(){return E(this.gridOptions.deltaRowDataMode)},e.prototype.isDeltaColumnMode=function(){return E(this.gridOptions.deltaColumnMode)},e.prototype.isEnsureDomOrder=function(){return E(this.gridOptions.ensureDomOrder)},e.prototype.isEnableCharts=function(){return!!E(this.gridOptions.enableCharts)&&(!!this.context.isModuleRegistered(\"chartsModule\")||(s._.doOnce(function(){console.warn(\"ag-grid: Charts is enabled but the Charts Module has not been included.\")},\"ChartsModuleCheck\"),!1))},e.prototype.getColResizeDefault=function(){return this.gridOptions.colResizeDefault},e.prototype.isSingleClickEdit=function(){return E(this.gridOptions.singleClickEdit)},e.prototype.isSuppressClickEdit=function(){return E(this.gridOptions.suppressClickEdit)},e.prototype.isStopEditingWhenGridLosesFocus=function(){return E(this.gridOptions.stopEditingWhenGridLosesFocus)},e.prototype.getGroupDefaultExpanded=function(){return this.gridOptions.groupDefaultExpanded},e.prototype.getMaxConcurrentDatasourceRequests=function(){return this.gridOptions.maxConcurrentDatasourceRequests},e.prototype.getMaxBlocksInCache=function(){return this.gridOptions.maxBlocksInCache},e.prototype.getCacheOverflowSize=function(){return this.gridOptions.cacheOverflowSize},e.prototype.getPaginationPageSize=function(){return this.gridOptions.paginationPageSize},e.prototype.isPaginateChildRows=function(){return!!(this.isGroupSuppressRow()||this.isGroupRemoveSingleChildren()||this.isGroupRemoveLowestSingleChildren())||E(this.gridOptions.paginateChildRows)},e.prototype.getCacheBlockSize=function(){return this.gridOptions.cacheBlockSize},e.prototype.getInfiniteInitialRowCount=function(){return this.gridOptions.infiniteInitialRowCount},e.prototype.isPurgeClosedRowNodes=function(){return E(this.gridOptions.purgeClosedRowNodes)},e.prototype.isSuppressPaginationPanel=function(){return E(this.gridOptions.suppressPaginationPanel)},e.prototype.getRowData=function(){return this.gridOptions.rowData},e.prototype.isGroupUseEntireRow=function(e){return!e&&E(this.gridOptions.groupUseEntireRow)},e.prototype.isEnableRtl=function(){return E(this.gridOptions.enableRtl)},e.prototype.getAutoGroupColumnDef=function(){return this.gridOptions.autoGroupColumnDef},e.prototype.isGroupSuppressRow=function(){return E(this.gridOptions.groupSuppressRow)},e.prototype.getRowGroupPanelShow=function(){return this.gridOptions.rowGroupPanelShow},e.prototype.getPivotPanelShow=function(){return this.gridOptions.pivotPanelShow},e.prototype.isAngularCompileRows=function(){return E(this.gridOptions.angularCompileRows)},e.prototype.isAngularCompileFilters=function(){return E(this.gridOptions.angularCompileFilters)},e.prototype.isAngularCompileHeaders=function(){return E(this.gridOptions.angularCompileHeaders)},e.prototype.isDebug=function(){return E(this.gridOptions.debug)},e.prototype.getColumnDefs=function(){return this.gridOptions.columnDefs},e.prototype.getColumnTypes=function(){return this.gridOptions.columnTypes},e.prototype.getDatasource=function(){return this.gridOptions.datasource},e.prototype.getViewportDatasource=function(){return this.gridOptions.viewportDatasource},e.prototype.getServerSideDatasource=function(){return this.gridOptions.serverSideDatasource},e.prototype.isAccentedSort=function(){return E(this.gridOptions.accentedSort)},e.prototype.isEnableBrowserTooltips=function(){return E(this.gridOptions.enableBrowserTooltips)},e.prototype.isEnableCellExpressions=function(){return E(this.gridOptions.enableCellExpressions)},e.prototype.isEnableGroupEdit=function(){return E(this.gridOptions.enableGroupEdit)},e.prototype.isSuppressMiddleClickScrolls=function(){return E(this.gridOptions.suppressMiddleClickScrolls)},e.prototype.isPreventDefaultOnContextMenu=function(){return E(this.gridOptions.preventDefaultOnContextMenu)},e.prototype.isSuppressPreventDefaultOnMouseWheel=function(){return E(this.gridOptions.suppressPreventDefaultOnMouseWheel)},e.prototype.isSuppressColumnVirtualisation=function(){return E(this.gridOptions.suppressColumnVirtualisation)},e.prototype.isSuppressContextMenu=function(){return E(this.gridOptions.suppressContextMenu)},e.prototype.isAllowContextMenuWithControlKey=function(){return E(this.gridOptions.allowContextMenuWithControlKey)},e.prototype.isSuppressCopyRowsToClipboard=function(){return E(this.gridOptions.suppressCopyRowsToClipboard)},e.prototype.isCopyHeadersToClipboard=function(){return E(this.gridOptions.copyHeadersToClipboard)},e.prototype.isSuppressClipboardPaste=function(){return E(this.gridOptions.suppressClipboardPaste)},e.prototype.isPagination=function(){return E(this.gridOptions.pagination)},e.prototype.isSuppressEnterpriseResetOnNewColumns=function(){return E(this.gridOptions.suppressEnterpriseResetOnNewColumns)},e.prototype.getProcessDataFromClipboardFunc=function(){return this.gridOptions.processDataFromClipboard},e.prototype.getBatchUpdateWaitMillis=function(){return s._.exists(this.gridOptions.batchUpdateWaitMillis)?this.gridOptions.batchUpdateWaitMillis:l.Constants.BATCH_WAIT_MILLIS},e.prototype.isSuppressMovableColumns=function(){return E(this.gridOptions.suppressMovableColumns)},e.prototype.isAnimateRows=function(){return!this.isEnsureDomOrder()&&E(this.gridOptions.animateRows)},e.prototype.isSuppressColumnMoveAnimation=function(){return E(this.gridOptions.suppressColumnMoveAnimation)},e.prototype.isSuppressAggFuncInHeader=function(){return E(this.gridOptions.suppressAggFuncInHeader)},e.prototype.isSuppressAggAtRootLevel=function(){return E(this.gridOptions.suppressAggAtRootLevel)},e.prototype.isEnableRangeSelection=function(){return this.enterprise&&E(this.gridOptions.enableRangeSelection)},e.prototype.isEnableRangeHandle=function(){return E(this.gridOptions.enableRangeHandle)},e.prototype.isEnableFillHandle=function(){return E(this.gridOptions.enableFillHandle)},e.prototype.isSuppressMultiRangeSelection=function(){return E(this.gridOptions.suppressMultiRangeSelection)},e.prototype.isPaginationAutoPageSize=function(){return E(this.gridOptions.paginationAutoPageSize)},e.prototype.isRememberGroupStateWhenNewData=function(){return E(this.gridOptions.rememberGroupStateWhenNewData)},e.prototype.getIcons=function(){return this.gridOptions.icons},e.prototype.getAggFuncs=function(){return this.gridOptions.aggFuncs},e.prototype.getSortingOrder=function(){return this.gridOptions.sortingOrder},e.prototype.getAlignedGrids=function(){return this.gridOptions.alignedGrids},e.prototype.isMasterDetail=function(){var e=this,t=E(this.gridOptions.masterDetail);return s._.doOnce(function(){t&&!e.enterprise&&console.warn(\"ag-grid: Master Detail is an Enterprise feature of ag-Grid.\")},\"MasterDetailEnterpriseCheck\"),t&&this.enterprise},e.prototype.isKeepDetailRows=function(){return E(this.gridOptions.keepDetailRows)},e.prototype.getKeepDetailRowsCount=function(){return this.gridOptions.keepDetailRowsCount>0?this.gridOptions.keepDetailRowsCount:10},e.prototype.getIsRowMasterFunc=function(){return this.gridOptions.isRowMaster},e.prototype.getIsRowSelectableFunc=function(){return this.gridOptions.isRowSelectable},e.prototype.getGroupRowRendererParams=function(){return this.gridOptions.groupRowRendererParams},e.prototype.getOverlayLoadingTemplate=function(){return this.gridOptions.overlayLoadingTemplate},e.prototype.getOverlayNoRowsTemplate=function(){return this.gridOptions.overlayNoRowsTemplate},e.prototype.isSuppressAutoSize=function(){return E(this.gridOptions.suppressAutoSize)},e.prototype.isEnableCellTextSelection=function(){return E(this.gridOptions.enableCellTextSelection)},e.prototype.isSuppressParentsInRowNodes=function(){return E(this.gridOptions.suppressParentsInRowNodes)},e.prototype.isFunctionsReadOnly=function(){return E(this.gridOptions.functionsReadOnly)},e.prototype.isFloatingFilter=function(){return this.gridOptions.floatingFilter},e.prototype.isEnableCellTextSelect=function(){return E(this.gridOptions.enableCellTextSelection)},e.prototype.isEnableOldSetFilterModel=function(){return E(this.gridOptions.enableOldSetFilterModel)},e.prototype.getDefaultColDef=function(){return this.gridOptions.defaultColDef},e.prototype.getDefaultColGroupDef=function(){return this.gridOptions.defaultColGroupDef},e.prototype.getDefaultExportParams=function(){return this.gridOptions.defaultExportParams},e.prototype.isSuppressCsvExport=function(){return E(this.gridOptions.suppressCsvExport)},e.prototype.isAllowShowChangeAfterFilter=function(){return E(this.gridOptions.allowShowChangeAfterFilter)},e.prototype.isSuppressExcelExport=function(){return E(this.gridOptions.suppressExcelExport)},e.prototype.isSuppressMakeColumnVisibleAfterUnGroup=function(){return E(this.gridOptions.suppressMakeColumnVisibleAfterUnGroup)},e.prototype.getNodeChildDetailsFunc=function(){return this.gridOptions.getNodeChildDetails},e.prototype.getDataPathFunc=function(){return this.gridOptions.getDataPath},e.prototype.getIsServerSideGroupFunc=function(){return this.gridOptions.isServerSideGroup},e.prototype.getServerSideGroupKeyFunc=function(){return this.gridOptions.getServerSideGroupKey},e.prototype.getGroupRowAggNodesFunc=function(){return this.gridOptions.groupRowAggNodes},e.prototype.getContextMenuItemsFunc=function(){return this.gridOptions.getContextMenuItems},e.prototype.getMainMenuItemsFunc=function(){return this.gridOptions.getMainMenuItems},e.prototype.getChartToolbarItemsFunc=function(){return this.gridOptions.getChartToolbarItems},e.prototype.getRowNodeIdFunc=function(){return this.gridOptions.getRowNodeId},e.prototype.getNavigateToNextCellFunc=function(){return this.gridOptions.navigateToNextCell},e.prototype.getTabToNextCellFunc=function(){return this.gridOptions.tabToNextCell},e.prototype.isTreeData=function(){var e=this,t=E(this.gridOptions.treeData);return s._.doOnce(function(){t&&!e.enterprise&&console.warn(\"ag-grid: TreeData is an Enterprise feature of ag-Grid.\")},\"TreeDataEnterpriseCheck\"),t},e.prototype.isValueCache=function(){return E(this.gridOptions.valueCache)},e.prototype.isValueCacheNeverExpires=function(){return E(this.gridOptions.valueCacheNeverExpires)},e.prototype.isDeltaSort=function(){return E(this.gridOptions.deltaSort)},e.prototype.isAggregateOnlyChangedColumns=function(){return E(this.gridOptions.aggregateOnlyChangedColumns)},e.prototype.getProcessSecondaryColDefFunc=function(){return this.gridOptions.processSecondaryColDef},e.prototype.getProcessSecondaryColGroupDefFunc=function(){return this.gridOptions.processSecondaryColGroupDef},e.prototype.getSendToClipboardFunc=function(){return this.gridOptions.sendToClipboard},e.prototype.getProcessRowPostCreateFunc=function(){return this.gridOptions.processRowPostCreate},e.prototype.getProcessCellForClipboardFunc=function(){return this.gridOptions.processCellForClipboard},e.prototype.getProcessHeaderForClipboardFunc=function(){return this.gridOptions.processHeaderForClipboard},e.prototype.getProcessCellFromClipboardFunc=function(){return this.gridOptions.processCellFromClipboard},e.prototype.getViewportRowModelPageSize=function(){return e=this.gridOptions.viewportRowModelPageSize,t=5,e>0?e:t;var e,t},e.prototype.getViewportRowModelBufferSize=function(){return e=this.gridOptions.viewportRowModelBufferSize,t=5,e>=0?e:t;var e,t},e.prototype.isServerSideSortingAlwaysResets=function(){return E(this.gridOptions.serverSideSortingAlwaysResets)},e.prototype.getPostSortFunc=function(){return this.gridOptions.postSort},e.prototype.getProcessChartOptionsFunc=function(){return this.gridOptions.processChartOptions},e.prototype.getClipboardDeliminator=function(){return s._.exists(this.gridOptions.clipboardDeliminator)?this.gridOptions.clipboardDeliminator:\"\\t\"},e.prototype.setProperty=function(e,t){var o=this.gridOptions,i=o[e];if(i!==t){o[e]=t;var n={type:e,currentValue:t,previousValue:i};this.propertyEventService.dispatchEvent(n)}},e.prototype.addLayoutElement=function(e){this.layoutElements.push(e),this.updateLayoutClasses()},e.prototype.updateLayoutClasses=function(){var e=this.getDomLayout(),t=e===l.Constants.DOM_LAYOUT_AUTO_HEIGHT,o=e===l.Constants.DOM_LAYOUT_PRINT,i=e===l.Constants.DOM_LAYOUT_NORMAL;this.layoutElements.forEach(function(e){s._.addOrRemoveCssClass(e,\"ag-layout-auto-height\",t),s._.addOrRemoveCssClass(e,\"ag-layout-normal\",i),s._.addOrRemoveCssClass(e,\"ag-layout-print\",o)})},e.prototype.addEventListener=function(e,o){t.checkEventDeprecation(e),this.propertyEventService.addEventListener(e,o)},e.checkEventDeprecation=function(e){\"floatingRowDataChanged\"===e&&console.warn(\"ag-Grid: floatingRowDataChanged is now called pinnedRowDataChanged\")},e.prototype.removeEventListener=function(e,t){this.propertyEventService.removeEventListener(e,t)},e.prototype.getAutoSizePadding=function(){return this.gridOptions.autoSizePadding&&this.gridOptions.autoSizePadding>0?this.gridOptions.autoSizePadding:20},e.prototype.getHeaderHeight=function(){return\"number\"==typeof this.gridOptions.headerHeight?this.gridOptions.headerHeight:this.specialForNewMaterial(25,\"headerHeight\")},e.prototype.getFloatingFiltersHeight=function(){return\"number\"==typeof this.gridOptions.floatingFiltersHeight?this.gridOptions.floatingFiltersHeight:this.specialForNewMaterial(25,\"headerHeight\")},e.prototype.getGroupHeaderHeight=function(){return\"number\"==typeof this.gridOptions.groupHeaderHeight?this.gridOptions.groupHeaderHeight:this.getHeaderHeight()},e.prototype.getPivotHeaderHeight=function(){return\"number\"==typeof this.gridOptions.pivotHeaderHeight?this.gridOptions.pivotHeaderHeight:this.getHeaderHeight()},e.prototype.getPivotGroupHeaderHeight=function(){return\"number\"==typeof this.gridOptions.pivotGroupHeaderHeight?this.gridOptions.pivotGroupHeaderHeight:this.getGroupHeaderHeight()},e.prototype.isExternalFilterPresent=function(){return\"function\"==typeof this.gridOptions.isExternalFilterPresent&&this.gridOptions.isExternalFilterPresent()},e.prototype.doesExternalFilterPass=function(e){return\"function\"==typeof this.gridOptions.doesExternalFilterPass&&this.gridOptions.doesExternalFilterPass(e)},e.prototype.getDocument=function(){var e=null;return this.gridOptions.getDocument&&s._.exists(this.gridOptions.getDocument)&&(e=this.gridOptions.getDocument()),e&&s._.exists(e)?e:document},e.prototype.getMinColWidth=function(){return this.gridOptions.minColWidth&&this.gridOptions.minColWidth>t.MIN_COL_WIDTH?this.gridOptions.minColWidth:t.MIN_COL_WIDTH},e.prototype.getMaxColWidth=function(){return this.gridOptions.maxColWidth&&this.gridOptions.maxColWidth>t.MIN_COL_WIDTH?this.gridOptions.maxColWidth:null},e.prototype.getColWidth=function(){return\"number\"!=typeof this.gridOptions.colWidth||this.gridOptions.colWidth<t.MIN_COL_WIDTH?200:this.gridOptions.colWidth},e.prototype.getRowBuffer=function(){var e=this.gridOptions.rowBuffer;return\"number\"==typeof e?e<0&&(s._.doOnce(function(){return console.warn(\"ag-Grid: rowBuffer should not be negative\")},\"warn rowBuffer negative\"),this.gridOptions.rowBuffer=e=0):e=l.Constants.ROW_BUFFER_SIZE,e},e.prototype.getRowBufferInPixels=function(){return this.getRowBuffer()*this.getRowHeightAsNumber()},e.prototype.getScrollbarWidth=function(){if(null==this.scrollWidth){var e=\"number\"==typeof this.gridOptions.scrollbarWidth&&this.gridOptions.scrollbarWidth>=0;this.scrollWidth=e?this.gridOptions.scrollbarWidth:s._.getScrollbarWidth()}return this.scrollWidth},e.prototype.checkForDeprecated=function(){var e=this,t=this.gridOptions;t.suppressUnSort&&console.warn(\"ag-grid: as of v1.12.4 suppressUnSort is not used. Please use sortingOrder instead.\"),t.suppressDescSort&&console.warn(\"ag-grid: as of v1.12.4 suppressDescSort is not used. Please use sortingOrder instead.\"),t.groupAggFields&&console.warn(\"ag-grid: as of v3 groupAggFields is not used. Please add appropriate agg fields to your columns.\"),t.groupHidePivotColumns&&console.warn(\"ag-grid: as of v3 groupHidePivotColumns is not used as pivot columns are now called rowGroup columns. Please refer to the documentation\"),t.groupKeys&&console.warn(\"ag-grid: as of v3 groupKeys is not used. You need to set rowGroupIndex on the columns to group. Please refer to the documentation\"),\"boolean\"==typeof t.groupDefaultExpanded&&console.warn(\"ag-grid: groupDefaultExpanded can no longer be boolean. for groupDefaultExpanded=true, use groupDefaultExpanded=9999 instead, to expand all the groups\"),(t.onRowDeselected||t.rowDeselected)&&console.warn(\"ag-grid: since version 3.4 event rowDeselected no longer exists, please check the docs\"),t.rowsAlreadyGrouped&&console.warn(\"ag-grid: since version 3.4 rowsAlreadyGrouped no longer exists, please use getNodeChildDetails() instead\"),t.groupAggFunction&&console.warn(\"ag-grid: since version 4.3.x groupAggFunction is now called groupRowAggNodes\"),t.checkboxSelection&&console.warn(\"ag-grid: since version 8.0.x checkboxSelection is not supported as a grid option. If you want this on all columns, use defaultColDef instead and set it there\"),t.paginationInitialRowCount&&console.warn(\"ag-grid: since version 9.0.x paginationInitialRowCount is now called infiniteInitialRowCount\"),t.infinitePageSize&&console.warn(\"ag-grid: since version 9.0.x infinitePageSize is now called cacheBlockSize\"),t.infiniteBlockSize&&console.warn(\"ag-grid: since version 10.0.x infiniteBlockSize is now called cacheBlockSize\"),t.maxPagesInCache&&console.warn(\"ag-grid: since version 10.0.x maxPagesInCache is now called maxBlocksInCache\"),t.paginationOverflowSize&&console.warn(\"ag-grid: since version 10.0.x paginationOverflowSize is now called cacheOverflowSize\"),t.suppressMenuFilterPanel&&console.warn(\"ag-grid: since version 11.0.x, use property colDef.menuTabs=['generalMenuTab','columnsMenuTab'] instead of suppressMenuFilterPanel=true\"),t.suppressMenuMainPanel&&console.warn(\"ag-grid: since version 11.0.x, use property colDef.menuTabs=['filterMenuTab','columnsMenuTab'] instead of suppressMenuMainPanel=true\"),t.suppressMenuColumnPanel&&console.warn(\"ag-grid: since version 11.0.x, use property colDef.menuTabs=['generalMenuTab','filterMenuTab'] instead of suppressMenuColumnPanel=true\"),t.suppressUseColIdForGroups&&console.warn(\"ag-grid: since version 11.0.x, this is not in use anymore. You should be able to remove it from your definition\"),t.groupSuppressRow&&console.warn(\"ag-grid: since version 18.2.x, 'groupSuppressRow' should not be used anymore. Instead remove row groups and perform custom sorting.\"),t.groupColumnDef&&console.warn(\"ag-grid: since version 11.0.x, groupColumnDef has been renamed, this property is now called autoGroupColumnDef. Please change your configuration accordingly\"),t.slaveGrids&&console.warn(\"ag-grid: since version 12.x, slaveGrids has been renamed, this property is now called alignedGrids. Please change your configuration accordingly\"),t.floatingTopRowData&&console.warn(\"ag-grid: since version 12.x, floatingTopRowData is now called pinnedTopRowData\"),t.floatingBottomRowData&&console.warn(\"ag-grid: since version 12.x, floatingBottomRowData is now called pinnedBottomRowData\"),t.paginationStartPage&&console.warn(\"ag-grid: since version 12.x, paginationStartPage is gone, please call api.paginationGoToPage(\"+t.paginationStartPage+\") instead.\"),t.getHeaderCellTemplate&&console.warn(\"ag-grid: since version 15.x, getHeaderCellTemplate is gone, please check the header documentation on how to set header templates.\"),t.headerCellTemplate&&console.warn(\"ag-grid: since version 15.x, headerCellTemplate is gone, please check the header documentation on how to set header templates.\"),t.headerCellRenderer&&console.warn(\"ag-grid: since version 15.x, headerCellRenderer is gone, please check the header documentation on how to set header templates.\"),t.angularCompileHeaders&&console.warn(\"ag-grid: since version 15.x, angularCompileHeaders is gone, please see the getting started for Angular 1 docs to see how to do headers in Angular 1.x.\"),t.pivotTotals&&(console.warn(\"ag-grid: since version 18.x, pivotTotals has been removed, instead if using pivotTotals, set pivotColumnGroupTotals='before'|'after'.\"),t.pivotColumnGroupTotals=\"before\"),\"inMemory\"===t.rowModelType&&(console.warn(\"ag-grid: since version 18.x, The In Memory Row Model has been renamed to the Client Side Row Model, set rowModelType='clientSide' instead.\"),t.rowModelType=\"clientSide\"),\"enterprise\"===t.rowModelType&&(console.warn(\"ag-grid: since version 18.x, The Enterprise Row Model has been renamed to the Server Side Row Model, set rowModelType='serverSide' instead.\"),t.rowModelType=\"serverSide\"),t.layoutInterval&&console.warn(\"ag-grid: since version 18.x, layoutInterval is no longer a property. This is because the grid now uses CSS Flex for layout.\"),t.gridAutoHeight&&(console.warn(\"ag-grid: since version 19.x, gridAutoHeight is gone, please use domLayout=autoHeight instead\"),t.domLayout=\"autoHeight\"),!0===t.showToolPanel&&(console.warn(\"ag-grid: since version 19.x, showToolPanel is gone, please specify toolPanel components. See https://www.ag-grid.com/javascript-grid-tool-panel/\"),t.showToolPanel=void 0,t.sideBar=t.sideBar||!0),!1===t.showToolPanel&&(console.warn(\"ag-grid: since version 19.x, showToolPanel is gone, please specify toolPanel components. See https://www.ag-grid.com/javascript-grid-tool-panel/\"),t.showToolPanel=void 0,t.sideBar=t.sideBar||!1);var o={toolPanelSuppressRowGroups:\"suppressRowGroups\",toolPanelSuppressValues:\"suppressValues\",toolPanelSuppressPivots:\"suppressPivots\",toolPanelSuppressPivotMode:\"suppressPivotMode\",toolPanelSuppressColumnFilter:\"suppressColumnFilter\",toolPanelSuppressColumnSelectAll:\"suppressColumnSelectAll\",toolPanelSuppressSideButtons:\"suppressSideButtons\",toolPanelSuppressColumnExpandAll:\"suppressColumnExpandAll\",contractColumnSelection:\"contractColumnSelection\"},i={};Object.keys(o).forEach(function(t){var n=o[t],r=e.gridOptions[t];if(void 0!==r){if(\"toolPanelSuppressSideButtons\"===t)return void console.warn(\"ag-grid: since v19.0 toolPanelSuppressSideButtons has been completely removed. See https://www.ag-grid.com/javascript-grid-tool-panel/\");console.warn(\"ag-grid: since v19.0 gridOptions.\"+t+\" is deprecated, please use gridOptions.sideBar.toolPanel[columnsIndex].componentParams.\"+n),i[n]=r}}),Object.keys(i).length>0&&!s._.exists(t.sideBar)&&(console.warn(\"ag-grid: since version 19.x, sideBar is mandatory if using toolPanel related properties. See https://www.ag-grid.com/javascript-grid-tool-panel/\"),t.sideBar=!0),null!=t.sideBar&&(t.sideBar=C.SideBarDefParser.parse(t.sideBar));var n=this.gridOptions.sideBar;if(Object.keys(i).length>0&&n&&n.toolPanels){var r=n.toolPanels.filter(function(e){return\"columns\"===e.id});1===r.length&&s._.mergeDeep(r[0],{componentParams:i})}t.enableStatusBar&&(console.warn(\"ag-grid: since version 19.x, enableStatusBar is gone, please specify statusBar components\"),t.statusBar=t.statusBar||{components:[{component:\"agAggregationComponent\"}]}),t.alwaysShowStatusBar&&console.warn(\"ag-grid: since version 19.x, alwaysShowStatusBar is gone. Please specify a min-height on the ag-status-bar css class, eg .ag-status-bar {min-height: 35px; }\"),(t.enableServerSideSorting||t.enableSorting)&&(console.warn(\"ag-Grid: since v20, grid options enableSorting and enableServerSideSorting are gone. Instead set sortable=true on the column definition for the columns sorting are allowed on. To migrate from gridOption.enableSorting=true, set gridOptions.defaultColDef.sortable=true\"),t.defaultColDef||(t.defaultColDef={}),t.defaultColDef.sortable||(t.defaultColDef.sortable=!0)),(t.enableFilter||t.enableServerSideFilter)&&(console.warn(\"ag-Grid: since v20, grid options enableFilter and enableServerSideFilter are gone. Instead set filter=true (if not already specifying a specific filter) on the column definition for the columns filtering is allowed on. To migrate from gridOptions.enableFilter=true, set gridOptions.defaultColDef.filter=true. If you are explicitly setting specific filters for each column (ie colDef.filter is already set) the you don't need to do anything.\"),t.defaultColDef||(t.defaultColDef={}),t.defaultColDef.filter||(t.defaultColDef.filter=!0)),t.enableColResize&&(console.warn(\"ag-Grid: since v20, grid options enableColResize is gone. Instead set resizable=true on the column definition for the columns resizing are allowed on. To migrate from gridOption.enableColResize=true, set gridOptions.defaultColDef.resizable=true\"),t.defaultColDef||(t.defaultColDef={}),t.defaultColDef.resizable||(t.defaultColDef.resizable=!0)),t.deprecatedEmbedFullWidthRows&&console.warn(\"ag-Grid: since v21.2, deprecatedEmbedFullWidthRows has been replaced with embedFullWidthRows.\"),t.suppressTabbing&&console.warn(\"ag-Grid: since v20.1, suppressTabbing is replaced with the more powerful grid callback suppressKeyboardEvent(params) which can suppress any keyboard event including tabbing.\"),t.doesDataFlower&&console.warn(\"ag-Grid: since v21.1, doesDataFlower is deprecated. Master/Detail is the new way for showing child data for a row and was introduced over a year ago. Please migrate your code to use master/detail instead.\")},e.prototype.checkForViolations=function(){this.isTreeData()&&this.treeDataViolations()},e.prototype.treeDataViolations=function(){this.isRowModelDefault()&&s._.missing(this.getDataPathFunc())&&console.warn(\"ag-Grid: property usingTreeData=true with rowModel=clientSide, but you did not provide getDataPath function, please provide getDataPath function if using tree data.\"),this.isRowModelServerSide()&&(s._.missing(this.getIsServerSideGroupFunc())&&console.warn(\"ag-Grid: property usingTreeData=true with rowModel=serverSide, but you did not provide isServerSideGroup function, please provide isServerSideGroup function if using tree data.\"),s._.missing(this.getServerSideGroupKeyFunc())&&console.warn(\"ag-Grid: property usingTreeData=true with rowModel=serverSide, but you did not provide getServerSideGroupKey function, please provide getServerSideGroupKey function if using tree data.\"))},e.prototype.getLocaleTextFunc=function(){if(this.gridOptions.localeTextFunc)return this.gridOptions.localeTextFunc;var e=this;return function(t,o){var i=e.gridOptions.localeText;return i&&i[t]?i[t]:o}},e.prototype.globalEventHandler=function(e,t){var o=p.ComponentUtil.getCallbackForEvent(e);\"function\"==typeof this.gridOptions[o]&&this.gridOptions[o](t)},e.prototype.getRowHeightAsNumber=function(){return!this.gridOptions.rowHeight||s._.missing(this.gridOptions.rowHeight)?this.getDefaultRowHeight():this.gridOptions.rowHeight&&this.isNumeric(this.gridOptions.rowHeight)?this.gridOptions.rowHeight:(console.warn(\"ag-Grid row height must be a number if not using standard row model\"),this.getDefaultRowHeight())},e.prototype.getRowHeightForNode=function(e,t){if(void 0===t&&(t=!1),\"function\"==typeof this.gridOptions.getRowHeight){if(t)return{height:this.getDefaultRowHeight(),estimated:!0};var o={node:e,data:e.data,api:this.gridOptions.api,context:this.gridOptions.context};return{height:this.gridOptions.getRowHeight(o),estimated:!1}}if(e.detail&&this.isMasterDetail())return this.isNumeric(this.gridOptions.detailRowHeight)?{height:this.gridOptions.detailRowHeight,estimated:!1}:{height:300,estimated:!1};var i=this.getDefaultRowHeight(),n=this.gridOptions.rowHeight&&this.isNumeric(this.gridOptions.rowHeight)?this.gridOptions.rowHeight:i,r=Math.min(i,n);if(this.columnController.isAutoRowHeightActive()){if(t)return{height:n,estimated:!0};var s=this.autoHeightCalculator.getPreferredHeightForRow(e);return{height:Math.max(s,r),estimated:!1}}return{height:n,estimated:!1}},e.prototype.isDynamicRowHeight=function(){return\"function\"==typeof this.gridOptions.getRowHeight},e.prototype.getVirtualItemHeight=function(){return this.specialForNewMaterial(20,\"virtualItemHeight\")},e.prototype.isNumeric=function(e){return!isNaN(e)&&\"number\"==typeof e},e.prototype.specialForNewMaterial=function(e,t){var o=this.environment.getTheme().theme;return o&&0===o.indexOf(\"ag-theme\")?this.environment.getSassVariable(o,t):e},e.prototype.getDefaultRowHeight=function(){return this.specialForNewMaterial(25,\"rowHeight\")},e.MIN_COL_WIDTH=10,e.PROP_HEADER_HEIGHT=\"headerHeight\",e.PROP_GROUP_REMOVE_SINGLE_CHILDREN=\"groupRemoveSingleChildren\",e.PROP_GROUP_REMOVE_LOWEST_SINGLE_CHILDREN=\"groupRemoveLowestSingleChildren\",e.PROP_PIVOT_HEADER_HEIGHT=\"pivotHeaderHeight\",e.PROP_SUPPRESS_CLIPBOARD_PASTE=\"suppressClipboardPaste\",e.PROP_GROUP_HEADER_HEIGHT=\"groupHeaderHeight\",e.PROP_PIVOT_GROUP_HEADER_HEIGHT=\"pivotGroupHeaderHeight\",e.PROP_FLOATING_FILTERS_HEIGHT=\"floatingFiltersHeight\",e.PROP_SUPPRESS_ROW_DRAG=\"suppressRowDrag\",e.PROP_POPUP_PARENT=\"popupParent\",e.PROP_DOM_LAYOUT=\"domLayout\",i([d.Autowired(\"gridOptions\"),n(\"design:type\",Object)],e.prototype,\"gridOptions\",void 0),i([d.Autowired(\"columnController\"),n(\"design:type\",h.ColumnController)],e.prototype,\"columnController\",void 0),i([d.Autowired(\"eventService\"),n(\"design:type\",a.EventService)],e.prototype,\"eventService\",void 0),i([d.Autowired(\"enterprise\"),n(\"design:type\",Boolean)],e.prototype,\"enterprise\",void 0),i([d.Autowired(\"gridApi\"),n(\"design:type\",u.GridApi)],e.prototype,\"gridApi\",void 0),i([d.Autowired(\"columnApi\"),n(\"design:type\",c.ColumnApi)],e.prototype,\"columnApi\",void 0),i([d.Autowired(\"environment\"),n(\"design:type\",f.Environment)],e.prototype,\"environment\",void 0),i([d.Autowired(\"autoHeightCalculator\"),n(\"design:type\",m.AutoHeightCalculator)],e.prototype,\"autoHeightCalculator\",void 0),i([d.Autowired(\"context\"),n(\"design:type\",d.Context)],e.prototype,\"context\",void 0),i([r(0,d.Qualifier(\"gridApi\")),r(1,d.Qualifier(\"columnApi\")),n(\"design:type\",Function),n(\"design:paramtypes\",[u.GridApi,c.ColumnApi]),n(\"design:returntype\",void 0)],e.prototype,\"agWire\",null),i([d.PreDestroy,n(\"design:type\",Function),n(\"design:paramtypes\",[]),n(\"design:returntype\",void 0)],e.prototype,\"destroy\",null),i([d.PostConstruct,n(\"design:type\",Function),n(\"design:paramtypes\",[]),n(\"design:returntype\",void 0)],e.prototype,\"init\",null),e=t=i([d.Bean(\"gridOptionsWrapper\")],e)}();t.GridOptionsWrapper=w},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)},r=this&&this.__param||function(e,t){return function(o,i){t(o,i,e)}};Object.defineProperty(t,\"__esModule\",{value:!0});var s=o(12),a=o(0),l=o(0),p=o(2),u=o(1),d=function(){function e(){this.allSyncListeners={},this.allAsyncListeners={},this.globalSyncListeners=[],this.globalAsyncListeners=[],this.asyncFunctionsQueue=[],this.scheduled=!1,this.firedEvents={}}var t;return t=e,e.prototype.setBeans=function(e,t,o){if(void 0===o&&(o=null),this.logger=e.create(\"EventService\"),o){var i=t.useAsyncEvents();this.addGlobalListener(o,i)}},e.prototype.getListenerList=function(e,t){var o=t?this.allAsyncListeners:this.allSyncListeners,i=o[e];return i||(i=[],o[e]=i),i},e.prototype.addEventListener=function(e,t,o){void 0===o&&(o=!1);var i=this.getListenerList(e,o);i.indexOf(t)<0&&i.push(t)},e.prototype.addModalPriorityEventListener=function(e,o,i){void 0===i&&(i=!1),this.addEventListener(e+t.PRIORITY,o,i)},e.prototype.addGlobalListener=function(e,t){void 0===t&&(t=!1),t?this.globalAsyncListeners.push(e):this.globalSyncListeners.push(e)},e.prototype.removeEventListener=function(e,t,o){void 0===o&&(o=!1);var i=this.getListenerList(e,o);u._.removeFromArray(i,t)},e.prototype.removeGlobalListener=function(e,t){void 0===t&&(t=!1),t?u._.removeFromArray(this.globalAsyncListeners,e):u._.removeFromArray(this.globalSyncListeners,e)},e.prototype.dispatchEvent=function(e){this.dispatchToListeners(e,!0),this.dispatchToListeners(e,!1),this.firedEvents[e.type]=!0},e.prototype.dispatchEventOnce=function(e){this.firedEvents[e.type]||this.dispatchEvent(e)},e.prototype.dispatchToListeners=function(e,o){var i=this,n=o?this.globalAsyncListeners:this.globalSyncListeners,r=e.type,s=this.getListenerList(r+t.PRIORITY,o);u._.forEachSnapshotFirst(s,function(t){o?i.dispatchAsync(function(){return t(e)}):t(e)});var a=this.getListenerList(r,o);u._.forEachSnapshotFirst(a,function(t){o?i.dispatchAsync(function(){return t(e)}):t(e)}),u._.forEachSnapshotFirst(n,function(t){o?i.dispatchAsync(function(){return t(r,e)}):t(r,e)})},e.prototype.dispatchAsync=function(e){this.asyncFunctionsQueue.push(e),this.scheduled||(window.setTimeout(this.flushAsyncQueue.bind(this),0),this.scheduled=!0)},e.prototype.flushAsyncQueue=function(){this.scheduled=!1;var e=this.asyncFunctionsQueue.slice();this.asyncFunctionsQueue=[],e.forEach(function(e){return e()})},e.PRIORITY=\"-P1\",i([r(0,l.Qualifier(\"loggerFactory\")),r(1,l.Qualifier(\"gridOptionsWrapper\")),r(2,l.Qualifier(\"globalEventListener\")),n(\"design:type\",Function),n(\"design:paramtypes\",[s.LoggerFactory,p.GridOptionsWrapper,Function]),n(\"design:returntype\",void 0)],e.prototype,\"setBeans\",null),e=t=i([a.Bean(\"eventService\")],e)}();t.EventService=d},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)},r=this&&this.__param||function(e,t){return function(o,i){t(o,i,e)}};Object.defineProperty(t,\"__esModule\",{value:!0});var s=o(29),a=o(11),l=o(2),p=o(21),u=o(39),d=o(50),c=o(40),h=o(3),f=o(33),g=o(12),y=o(5),v=o(34),m=o(89),C=o(0),E=o(52),w=o(112),R=o(35),_=o(8),O=o(9),S=o(1),b=function(){function e(){this.primaryHeaderRowCount=0,this.secondaryHeaderRowCount=0,this.secondaryColumnsPresent=!1,this.gridHeaderRowCount=0,this.displayedLeftColumns=[],this.displayedRightColumns=[],this.displayedCenterColumns=[],this.allDisplayedColumns=[],this.allDisplayedVirtualColumns=[],this.allDisplayedCenterVirtualColumns=[],this.rowGroupColumns=[],this.valueColumns=[],this.pivotColumns=[],this.ready=!1,this.autoGroupsNeedBuilding=!1,this.pivotMode=!1,this.bodyWidth=0,this.leftWidth=0,this.rightWidth=0,this.bodyWidthDirty=!0}return e.prototype.init=function(){var e=this.gridOptionsWrapper.isPivotMode();this.suppressColumnVirtualisation=this.gridOptionsWrapper.isSuppressColumnVirtualisation(),this.isPivotSettingAllowed(e)&&(this.pivotMode=e),this.usingTreeData=this.gridOptionsWrapper.isTreeData()},e.prototype.setColumnDefs=function(e,t){void 0===t&&(t=\"api\");var o=!!this.columnDefs;this.columnDefs=e,this.valueCache.expire(),this.autoGroupsNeedBuilding=!0;var i=this.primaryColumns,n=this.columnFactory.createColumnTree(e,!0,i);this.primaryColumnTree=n.columnTree,this.primaryHeaderRowCount=n.treeDept+1,this.primaryColumns=this.getColumnsFromTree(this.primaryColumnTree),this.extractRowGroupColumns(t,i),this.extractPivotColumns(t,i),this.createValueColumns(t,i),this.ready=!0,this.updateGridColumns(),this.updateDisplayedColumns(t),this.checkDisplayedVirtualColumns(),this.gridOptionsWrapper.isDeltaColumnMode()&&o&&this.resetColumnState(!0,t);var r={type:y.Events.EVENT_COLUMN_EVERYTHING_CHANGED,api:this.gridApi,columnApi:this.columnApi,source:t};this.eventService.dispatchEvent(r);var s={type:y.Events.EVENT_NEW_COLUMNS_LOADED,api:this.gridApi,columnApi:this.columnApi};this.eventService.dispatchEvent(s)},e.prototype.isAutoRowHeightActive=function(){return this.autoRowHeightColumns&&this.autoRowHeightColumns.length>0},e.prototype.getAllAutoRowHeightCols=function(){return this.autoRowHeightColumns},e.prototype.setVirtualViewportLeftAndRight=function(){this.gridOptionsWrapper.isEnableRtl()?(this.viewportLeft=this.bodyWidth-this.scrollPosition-this.scrollWidth,this.viewportRight=this.bodyWidth-this.scrollPosition):(this.viewportLeft=this.scrollPosition,this.viewportRight=this.scrollWidth+this.scrollPosition)},e.prototype.getDisplayedColumnsStartingAt=function(e){for(var t=e,o=[];t&&S._.exists(t);)o.push(t),t=this.getDisplayedColAfter(t);return o},e.prototype.checkDisplayedVirtualColumns=function(){if(S._.exists(this.displayedCenterColumns)){var e=this.allDisplayedVirtualColumns.map(function(e){return e.getId()}).join(\"#\");if(this.updateVirtualSets(),e!==this.allDisplayedVirtualColumns.map(function(e){return e.getId()}).join(\"#\")){var t={type:y.Events.EVENT_VIRTUAL_COLUMNS_CHANGED,api:this.gridApi,columnApi:this.columnApi};this.eventService.dispatchEvent(t)}}},e.prototype.setVirtualViewportPosition=function(e,t){(e!==this.scrollWidth||t!==this.scrollPosition||this.bodyWidthDirty)&&(this.scrollWidth=e,this.scrollPosition=t,this.bodyWidthDirty=!0,this.setVirtualViewportLeftAndRight(),this.ready&&this.checkDisplayedVirtualColumns())},e.prototype.isPivotMode=function(){return this.pivotMode},e.prototype.isPivotSettingAllowed=function(e){return!e||(!this.gridOptionsWrapper.isTreeData()||(console.warn(\"ag-Grid: Pivot mode not available in conjunction Tree Data i.e. 'gridOptions.treeData: true'\"),!1))},e.prototype.setPivotMode=function(e,t){if(void 0===t&&(t=\"api\"),e!==this.pivotMode&&this.isPivotSettingAllowed(this.pivotMode)){this.pivotMode=e,this.autoGroupsNeedBuilding=!0,this.updateGridColumns(),this.updateDisplayedColumns(t);var o={type:y.Events.EVENT_COLUMN_PIVOT_MODE_CHANGED,api:this.gridApi,columnApi:this.columnApi};this.eventService.dispatchEvent(o)}},e.prototype.getSecondaryPivotColumn=function(e,t){if(!this.secondaryColumnsPresent)return null;var o=this.getPrimaryColumn(t),i=null;return this.secondaryColumns&&this.secondaryColumns.forEach(function(t){var n=t.getColDef().pivotKeys,r=t.getColDef().pivotValueColumn;S._.compareArrays(n,e)&&r===o&&(i=t)}),i},e.prototype.setBeans=function(e){this.logger=e.create(\"ColumnController\")},e.prototype.setFirstRightAndLastLeftPinned=function(e){var t,o;this.gridOptionsWrapper.isEnableRtl()?(t=this.displayedLeftColumns?this.displayedLeftColumns[0]:null,o=this.displayedRightColumns?S._.last(this.displayedRightColumns):null):(t=this.displayedLeftColumns?S._.last(this.displayedLeftColumns):null,o=this.displayedRightColumns?this.displayedRightColumns[0]:null),this.gridColumns.forEach(function(i){i.setLastLeftPinned(i===t,e),i.setFirstRightPinned(i===o,e)})},e.prototype.autoSizeColumns=function(e,t){var o=this;void 0===t&&(t=\"api\");for(var i=[],n=-1;0!==n;)n=0,this.actionOnGridColumns(e,function(e){if(i.indexOf(e)>=0)return!1;var r=o.autoWidthCalculator.getPreferredWidthForColumn(e);if(r>0){var s=o.normaliseColumnWidth(e,r);e.setActualWidth(s,t),i.push(e),n++}return!0},t);if(i.length>0){var r={type:y.Events.EVENT_COLUMN_RESIZED,columns:i,column:1===i.length?i[0]:null,finished:!0,api:this.gridApi,columnApi:this.columnApi,source:\"autosizeColumns\"};this.eventService.dispatchEvent(r)}},e.prototype.autoSizeColumn=function(e,t){void 0===t&&(t=\"api\"),e&&this.autoSizeColumns([e],t)},e.prototype.autoSizeAllColumns=function(e){void 0===e&&(e=\"api\");var t=this.getAllDisplayedColumns();this.autoSizeColumns(t,e)},e.prototype.getColumnsFromTree=function(e){var t=[];return function e(o){for(var i=0;i<o.length;i++){var n=o[i];n instanceof a.Column?t.push(n):n instanceof v.OriginalColumnGroup&&e(n.getChildren())}}(e),t},e.prototype.getAllDisplayedColumnGroups=function(){return this.displayedLeftColumnTree&&this.displayedRightColumnTree&&this.displayedCentreColumnTree?this.displayedLeftColumnTree.concat(this.displayedCentreColumnTree).concat(this.displayedRightColumnTree):null},e.prototype.getPrimaryColumnTree=function(){return this.primaryColumnTree},e.prototype.getHeaderRowCount=function(){return this.gridHeaderRowCount},e.prototype.getLeftDisplayedColumnGroups=function(){return this.displayedLeftColumnTree},e.prototype.getRightDisplayedColumnGroups=function(){return this.displayedRightColumnTree},e.prototype.getCenterDisplayedColumnGroups=function(){return this.displayedCentreColumnTree},e.prototype.getDisplayedColumnGroups=function(e){switch(e){case a.Column.PINNED_LEFT:return this.getLeftDisplayedColumnGroups();case a.Column.PINNED_RIGHT:return this.getRightDisplayedColumnGroups();default:return this.getCenterDisplayedColumnGroups()}},e.prototype.isColumnDisplayed=function(e){return this.getAllDisplayedColumns().indexOf(e)>=0},e.prototype.getAllDisplayedColumns=function(){return this.allDisplayedColumns},e.prototype.getAllDisplayedVirtualColumns=function(){return this.allDisplayedVirtualColumns},e.prototype.getDisplayedLeftColumnsForRow=function(e){return this.colSpanActive?this.getDisplayedColumnsForRow(e,this.displayedLeftColumns):this.displayedLeftColumns},e.prototype.getDisplayedRightColumnsForRow=function(e){return this.colSpanActive?this.getDisplayedColumnsForRow(e,this.displayedRightColumns):this.displayedRightColumns},e.prototype.getDisplayedColumnsForRow=function(e,t,o,i){for(var n,r=[],s=null,a=function(a){var l,p=t[a],u=t.length-a,d=Math.min(p.getColSpan(e),u),c=[p];if(d>1){for(var h=d-1,f=1;f<=h;f++)c.push(t[a+f]);a+=h}if(o?(l=!1,c.forEach(function(e){o(e)&&(l=!0)})):l=!0,l){if(0===r.length&&s)!!i&&i(p)&&r.push(s);r.push(p)}s=p,n=a},l=0;l<t.length;l++)a(l),l=n;return r},e.prototype.getAllDisplayedCenterVirtualColumnsForRow=function(e){var t=this;if(!this.colSpanActive)return this.allDisplayedCenterVirtualColumns;var o=this.suppressColumnVirtualisation?null:this.isColumnInViewport.bind(this);return this.getDisplayedColumnsForRow(e,this.displayedCenterColumns,o,function(e){return e.getLeft()>t.viewportLeft})},e.prototype.isColumnInViewport=function(e){var t=e.getLeft(),o=e.getLeft()+e.getActualWidth(),i=this.viewportLeft-200,n=this.viewportRight+200;return!(t<i&&o<i)&&!(t>n&&o>n)},e.prototype.getPinnedLeftContainerWidth=function(){return this.getWidthOfColsInList(this.displayedLeftColumns)},e.prototype.getPinnedRightContainerWidth=function(){return this.getWidthOfColsInList(this.displayedRightColumns)},e.prototype.updatePrimaryColumnList=function(e,t,o,i,n,r){var s=this;if(void 0===r&&(r=\"api\"),e&&!S._.missingOrEmpty(e)){var a=!1;if(e.forEach(function(e){var n=s.getPrimaryColumn(e);if(n){if(o){if(t.indexOf(n)>=0)return;t.push(n)}else{if(t.indexOf(n)<0)return;S._.removeFromArray(t,n)}i(n),a=!0}}),a){this.autoGroupsNeedBuilding&&this.updateGridColumns(),this.updateDisplayedColumns(r);var l={type:n,columns:t,column:1===t.length?t[0]:null,api:this.gridApi,columnApi:this.columnApi,source:r};this.eventService.dispatchEvent(l)}}},e.prototype.setRowGroupColumns=function(e,t){void 0===t&&(t=\"api\"),this.autoGroupsNeedBuilding=!0,this.setPrimaryColumnList(e,this.rowGroupColumns,y.Events.EVENT_COLUMN_ROW_GROUP_CHANGED,this.setRowGroupActive.bind(this),t)},e.prototype.setRowGroupActive=function(e,t,o){e!==t.isRowGroupActive()&&(t.setRowGroupActive(e,o),e||this.gridOptionsWrapper.isSuppressMakeColumnVisibleAfterUnGroup()||t.setVisible(!0,o))},e.prototype.addRowGroupColumn=function(e,t){void 0===t&&(t=\"api\"),e&&this.addRowGroupColumns([e],t)},e.prototype.addRowGroupColumns=function(e,t){void 0===t&&(t=\"api\"),this.autoGroupsNeedBuilding=!0,this.updatePrimaryColumnList(e,this.rowGroupColumns,!0,this.setRowGroupActive.bind(this,!0),y.Events.EVENT_COLUMN_ROW_GROUP_CHANGED,t)},e.prototype.removeRowGroupColumns=function(e,t){void 0===t&&(t=\"api\"),this.autoGroupsNeedBuilding=!0,this.updatePrimaryColumnList(e,this.rowGroupColumns,!1,this.setRowGroupActive.bind(this,!1),y.Events.EVENT_COLUMN_ROW_GROUP_CHANGED,t)},e.prototype.removeRowGroupColumn=function(e,t){void 0===t&&(t=\"api\"),e&&this.removeRowGroupColumns([e],t)},e.prototype.addPivotColumns=function(e,t){void 0===t&&(t=\"api\"),this.updatePrimaryColumnList(e,this.pivotColumns,!0,function(e){return e.setPivotActive(!0,t)},y.Events.EVENT_COLUMN_PIVOT_CHANGED,t)},e.prototype.setPivotColumns=function(e,t){void 0===t&&(t=\"api\"),this.setPrimaryColumnList(e,this.pivotColumns,y.Events.EVENT_COLUMN_PIVOT_CHANGED,function(e,o){o.setPivotActive(e,t)},t)},e.prototype.addPivotColumn=function(e,t){void 0===t&&(t=\"api\"),this.addPivotColumns([e],t)},e.prototype.removePivotColumns=function(e,t){void 0===t&&(t=\"api\"),this.updatePrimaryColumnList(e,this.pivotColumns,!1,function(e){return e.setPivotActive(!1,t)},y.Events.EVENT_COLUMN_PIVOT_CHANGED,t)},e.prototype.removePivotColumn=function(e,t){void 0===t&&(t=\"api\"),this.removePivotColumns([e],t)},e.prototype.setPrimaryColumnList=function(e,t,o,i,n){var r=this;t.length=0,S._.exists(e)&&e.forEach(function(e){var o=r.getPrimaryColumn(e);o&&t.push(o)}),this.primaryColumns.forEach(function(e){var o=t.indexOf(e)>=0;i(o,e)}),this.autoGroupsNeedBuilding&&this.updateGridColumns(),this.updateDisplayedColumns(n);var s={type:o,columns:t,column:1===t.length?t[0]:null,api:this.gridApi,columnApi:this.columnApi,source:n};this.eventService.dispatchEvent(s)},e.prototype.setValueColumns=function(e,t){void 0===t&&(t=\"api\"),this.setPrimaryColumnList(e,this.valueColumns,y.Events.EVENT_COLUMN_VALUE_CHANGED,this.setValueActive.bind(this),t)},e.prototype.setValueActive=function(e,t,o){if(e!==t.isValueActive()&&(t.setValueActive(e,o),e&&!t.getAggFunc())){var i=this.aggFuncService.getDefaultAggFunc(t);t.setAggFunc(i)}},e.prototype.addValueColumns=function(e,t){void 0===t&&(t=\"api\"),this.updatePrimaryColumnList(e,this.valueColumns,!0,this.setValueActive.bind(this,!0),y.Events.EVENT_COLUMN_VALUE_CHANGED,t)},e.prototype.addValueColumn=function(e,t){void 0===t&&(t=\"api\"),e&&this.addValueColumns([e],t)},e.prototype.removeValueColumn=function(e,t){void 0===t&&(t=\"api\"),this.removeValueColumns([e],t)},e.prototype.removeValueColumns=function(e,t){void 0===t&&(t=\"api\"),this.updatePrimaryColumnList(e,this.valueColumns,!1,this.setValueActive.bind(this,!1),y.Events.EVENT_COLUMN_VALUE_CHANGED,t)},e.prototype.normaliseColumnWidth=function(e,t){return t<e.getMinWidth()&&(t=e.getMinWidth()),e.isGreaterThanMax(t)&&(t=e.getMaxWidth()),t},e.prototype.getPrimaryOrGridColumn=function(e){var t=this.getPrimaryColumn(e);return t||this.getGridColumn(e)},e.prototype.setColumnWidth=function(e,t,o,i,n){void 0===n&&(n=\"api\");var r=this.getPrimaryOrGridColumn(e);if(r){var s=[];if(s.push({width:t,ratios:[1],columns:[r]}),\"shift\"===this.gridOptionsWrapper.getColResizeDefault()&&(o=!o),o){var a=this.getDisplayedColAfter(r);if(!a)return;var l=r.getActualWidth()-t,p=a.getActualWidth()+l;s.push({width:p,ratios:[1],columns:[a]})}this.resizeColumnSets(s,i,n)}},e.prototype.checkMinAndMaxWidthsForSet=function(e){var t=e.columns,o=e.width,i=0,n=0,r=!0;return t.forEach(function(e){i+=e.getMinWidth(),e.getMaxWidth()>0?n+=e.getMaxWidth():r=!1}),o>=i&&(!r||o<=n)},e.prototype.resizeColumnSets=function(e,t,o){if(S._.every(e,this.checkMinAndMaxWidthsForSet.bind(this))){var i=[],n=[];e.forEach(function(e){var t=e.width,o=e.columns,r=e.ratios,s={},a={};o.forEach(function(e){return n.push(e)});for(var l=!0,p=0,u=function(){if(++p>1e3)return console.error(\"ag-Grid: infinite loop in resizeColumnSets\"),\"break\";l=!1;var e=[],i=[],n=0,u=t;o.forEach(function(t,o){if(a[t.getId()])u-=s[t.getId()];else{e.push(t);var l=r[o];n+=l,i.push(l)}});var d=1/n;e.forEach(function(o,i){var n;i===e.length-1?n=u:(n=Math.round(r[i]*t*d),u-=n),n<o.getMinWidth()?(n=o.getMinWidth(),a[o.getId()]=!0,l=!0):o.getMaxWidth()>0&&n>o.getMaxWidth()&&(n=o.getMaxWidth(),a[o.getId()]=!0,l=!0),s[o.getId()]=n})};l;){if(\"break\"===u())break}o.forEach(function(e){var t=s[e.getId()];e.getActualWidth()!==t&&(e.setActualWidth(t),i.push(e))})});var r=i.length>0;if(r&&(this.setLeftValues(o),this.updateBodyWidths(),this.checkDisplayedVirtualColumns()),r||t){var s={type:y.Events.EVENT_COLUMN_RESIZED,columns:n,column:1===n.length?n[0]:null,finished:t,api:this.gridApi,columnApi:this.columnApi,source:o};this.eventService.dispatchEvent(s)}}else if(t){var a=e&&e.length>0?e[0].columns:null,l={type:y.Events.EVENT_COLUMN_RESIZED,columns:a,column:a&&1===a.length?a[0]:null,finished:t,api:this.gridApi,columnApi:this.columnApi,source:o};this.eventService.dispatchEvent(l)}},e.prototype.setColumnAggFunc=function(e,t,o){if(void 0===o&&(o=\"api\"),e){e.setAggFunc(t);var i={type:y.Events.EVENT_COLUMN_VALUE_CHANGED,columns:[e],column:e,api:this.gridApi,columnApi:this.columnApi,source:o};this.eventService.dispatchEvent(i)}},e.prototype.moveRowGroupColumn=function(e,t,o){void 0===o&&(o=\"api\");var i=this.rowGroupColumns[e];this.rowGroupColumns.splice(e,1),this.rowGroupColumns.splice(t,0,i);var n={type:y.Events.EVENT_COLUMN_ROW_GROUP_CHANGED,columns:this.rowGroupColumns,column:1===this.rowGroupColumns.length?this.rowGroupColumns[0]:null,api:this.gridApi,columnApi:this.columnApi,source:o};this.eventService.dispatchEvent(n)},e.prototype.moveColumns=function(e,t,o){if(void 0===o&&(o=\"api\"),this.columnAnimationService.start(),t>this.gridColumns.length-e.length)return console.warn(\"ag-Grid: tried to insert columns in invalid location, toIndex = \"+t),void console.warn(\"ag-Grid: remember that you should not count the moving columns when calculating the new index\");var i=this.getGridColumns(e);if(!!this.doesMovePassRules(i,t)){S._.moveInArray(this.gridColumns,i,t),this.updateDisplayedColumns(o);var n={type:y.Events.EVENT_COLUMN_MOVED,columns:i,column:1===i.length?i[0]:null,toIndex:t,api:this.gridApi,columnApi:this.columnApi,source:o};this.eventService.dispatchEvent(n),this.columnAnimationService.finish()}},e.prototype.doesMovePassRules=function(e,t){var o=this.gridColumns.slice();return S._.moveInArray(o,e,t),!!this.doesMovePassMarryChildren(o)&&!!this.doesMovePassLockedPositions(o)},e.prototype.doesMovePassLockedPositions=function(e){var t=!1,o=!0;return e.forEach(function(e){e.getColDef().lockPosition?t&&(o=!1):t=!0}),o},e.prototype.doesMovePassMarryChildren=function(e){var t=!0;return this.columnUtils.depthFirstOriginalTreeSearch(null,this.gridBalancedTree,function(o){if(o instanceof v.OriginalColumnGroup){var i=o;if(i.getColGroupDef()&&i.getColGroupDef().marryChildren){var n=[];i.getLeafColumns().forEach(function(t){var o=e.indexOf(t);n.push(o)}),Math.max.apply(Math,n)-Math.min.apply(Math,n)>i.getLeafColumns().length-1&&(t=!1)}}}),t},e.prototype.moveColumn=function(e,t,o){void 0===o&&(o=\"api\"),this.moveColumns([e],t,o)},e.prototype.moveColumnByIndex=function(e,t,o){void 0===o&&(o=\"api\");var i=this.gridColumns[e];this.moveColumn(i,t,o)},e.prototype.getBodyContainerWidth=function(){return this.bodyWidth},e.prototype.getContainerWidth=function(e){switch(e){case a.Column.PINNED_LEFT:return this.leftWidth;case a.Column.PINNED_RIGHT:return this.rightWidth;default:return this.bodyWidth}},e.prototype.updateBodyWidths=function(){var e=this.getWidthOfColsInList(this.displayedCenterColumns),t=this.getWidthOfColsInList(this.displayedLeftColumns),o=this.getWidthOfColsInList(this.displayedRightColumns);if(this.bodyWidthDirty=this.bodyWidth!==e,this.bodyWidth!==e||this.leftWidth!==t||this.rightWidth!==o){this.bodyWidth=e,this.leftWidth=t,this.rightWidth=o;var i={type:y.Events.EVENT_DISPLAYED_COLUMNS_WIDTH_CHANGED,api:this.gridApi,columnApi:this.columnApi};this.eventService.dispatchEvent(i)}},e.prototype.getValueColumns=function(){return this.valueColumns?this.valueColumns:[]},e.prototype.getPivotColumns=function(){return this.pivotColumns?this.pivotColumns:[]},e.prototype.isPivotActive=function(){return this.pivotColumns&&this.pivotColumns.length>0&&this.pivotMode},e.prototype.getRowGroupColumns=function(){return this.rowGroupColumns?this.rowGroupColumns:[]},e.prototype.getDisplayedCenterColumns=function(){return this.displayedCenterColumns},e.prototype.getDisplayedLeftColumns=function(){return this.displayedLeftColumns},e.prototype.getDisplayedRightColumns=function(){return this.displayedRightColumns},e.prototype.getDisplayedColumns=function(e){switch(e){case a.Column.PINNED_LEFT:return this.getDisplayedLeftColumns();case a.Column.PINNED_RIGHT:return this.getDisplayedRightColumns();default:return this.getDisplayedCenterColumns()}},e.prototype.getAllPrimaryColumns=function(){return this.primaryColumns?this.primaryColumns.slice():null},e.prototype.getSecondaryColumns=function(){return this.secondaryColumns?this.secondaryColumns.slice():null},e.prototype.getAllColumnsForQuickFilter=function(){return this.columnsForQuickFilter},e.prototype.getAllGridColumns=function(){return this.gridColumns},e.prototype.isEmpty=function(){return S._.missingOrEmpty(this.gridColumns)},e.prototype.isRowGroupEmpty=function(){return S._.missingOrEmpty(this.rowGroupColumns)},e.prototype.setColumnVisible=function(e,t,o){void 0===o&&(o=\"api\"),this.setColumnsVisible([e],t,o)},e.prototype.setColumnsVisible=function(e,t,o){var i=this;void 0===o&&(o=\"api\"),this.columnAnimationService.start(),this.actionOnGridColumns(e,function(e){return e.isVisible()!==t&&(e.setVisible(t,o),!0)},o,function(){return{type:y.Events.EVENT_COLUMN_VISIBLE,visible:t,column:null,columns:null,api:i.gridApi,columnApi:i.columnApi,source:o}}),this.columnAnimationService.finish()},e.prototype.setColumnPinned=function(e,t,o){void 0===o&&(o=\"api\"),e&&this.setColumnsPinned([e],t,o)},e.prototype.setColumnsPinned=function(e,t,o){var i,n=this;(void 0===o&&(o=\"api\"),\"print\"!==this.gridOptionsWrapper.getDomLayout())?(this.columnAnimationService.start(),i=!0===t||t===a.Column.PINNED_LEFT?a.Column.PINNED_LEFT:t===a.Column.PINNED_RIGHT?a.Column.PINNED_RIGHT:null,this.actionOnGridColumns(e,function(e){return e.getPinned()!==i&&(e.setPinned(i),!0)},o,function(){return{type:y.Events.EVENT_COLUMN_PINNED,pinned:i,column:null,columns:null,api:n.gridApi,columnApi:n.columnApi,source:o}}),this.columnAnimationService.finish()):console.warn(\"Changing the column pinning status is not allowed with domLayout='print'\")},e.prototype.actionOnGridColumns=function(e,t,o,i){var n=this;if(!S._.missingOrEmpty(e)){var r=[];if(e.forEach(function(e){var o=n.getGridColumn(e);o&&(!1!==t(o)&&r.push(o))}),0!==r.length&&(this.updateDisplayedColumns(o),S._.exists(i)&&i)){var s=i();s.columns=r,s.column=1===r.length?r[0]:null,this.eventService.dispatchEvent(s)}}},e.prototype.getDisplayedColBefore=function(e){var t=this.getAllDisplayedColumns(),o=t.indexOf(e);return o>0?t[o-1]:null},e.prototype.getDisplayedColAfter=function(e){var t=this.getAllDisplayedColumns(),o=t.indexOf(e);return o<t.length-1?t[o+1]:null},e.prototype.getDisplayedGroupAfter=function(e){for(var t=e.getDisplayedLeafColumns()[0],o=e.getOriginalColumnGroup().getLevel();;){if(!(t=this.getDisplayedColAfter(t)))return null;for(var i=t.getParent();i.getOriginalColumnGroup().getLevel()!==o;)i=i.getParent();if(i!==e)return i}},e.prototype.isPinningLeft=function(){return this.displayedLeftColumns.length>0},e.prototype.isPinningRight=function(){return this.displayedRightColumns.length>0},e.prototype.getPrimaryAndSecondaryAndAutoColumns=function(){var e=this.primaryColumns?this.primaryColumns.slice(0):[];return this.groupAutoColumns&&S._.exists(this.groupAutoColumns)&&this.groupAutoColumns.forEach(function(t){return e.push(t)}),this.secondaryColumnsPresent&&this.secondaryColumns&&this.secondaryColumns.forEach(function(t){return e.push(t)}),e},e.prototype.createStateItemFromColumn=function(e){var t=e.isRowGroupActive()?this.rowGroupColumns.indexOf(e):null,o=e.isPivotActive()?this.pivotColumns.indexOf(e):null,i=e.isValueActive()?e.getAggFunc():null;return{colId:e.getColId(),hide:!e.isVisible(),aggFunc:i,width:e.getActualWidth(),pivotIndex:o,pinned:e.getPinned(),rowGroupIndex:t}},e.prototype.getColumnState=function(){if(S._.missing(this.primaryColumns))return[];var e=this.primaryColumns.map(this.createStateItemFromColumn.bind(this)),t=(this.groupAutoColumns?this.groupAutoColumns.map(this.createStateItemFromColumn.bind(this)):[]).concat(e);return this.pivotMode||this.orderColumnStateList(t),t},e.prototype.orderColumnStateList=function(e){var t=this.gridColumns.map(function(e){return e.getColId()});e.sort(function(e,o){return t.indexOf(e.colId)-t.indexOf(o.colId)})},e.prototype.resetColumnState=function(e,t){void 0===e&&(e=!1),void 0===t&&(t=\"api\");var o=this.getColumnsFromTree(this.primaryColumnTree),i=[],n=1e3,r=1e3;o&&o.forEach(function(e){var t=e.getColDef().rowGroupIndex,o=e.getColDef().rowGroup,s=e.getColDef().pivotIndex,a=e.getColDef().pivot,l={colId:e.getColId(),aggFunc:e.getColDef().aggFunc,hide:e.getColDef().hide,pinned:e.getColDef().pinned,rowGroupIndex:t,pivotIndex:e.getColDef().pivotIndex,width:e.getColDef().width};S._.missing(t)&&o&&(l.rowGroupIndex=n++),S._.missing(s)&&a&&(l.pivotIndex=r++),i.push(l)}),this.setColumnState(i,e,t)},e.prototype.setColumnState=function(e,t,o){var i=this;if(void 0===t&&(t=!1),void 0===o&&(o=\"api\"),S._.missingOrEmpty(this.primaryColumns))return!1;var n=this.getColumnState();this.autoGroupsNeedBuilding=!0;var r=this.primaryColumns.slice();this.rowGroupColumns=[],this.valueColumns=[],this.pivotColumns=[];var s=!0,a={},l={},p=[];if(e&&e.forEach(function(e){if(S._.exists(i.getAutoColumn(e.colId)))p.push(e);else{var t=i.getPrimaryColumn(e.colId);t?(i.syncColumnWithStateItem(t,e,a,l,o),S._.removeFromArray(r,t)):(console.warn(\"ag-grid: column \"+e.colId+\" not found\"),s=!1)}}),r.forEach(this.syncColumnWithNoState.bind(this)),this.rowGroupColumns.sort(this.sortColumnListUsingIndexes.bind(this,a)),this.pivotColumns.sort(this.sortColumnListUsingIndexes.bind(this,l)),this.updateGridColumns(),p.forEach(function(e){var t=i.getAutoColumn(e.colId);i.syncColumnWithStateItem(t,e,a,l,o)}),e){var u=e.map(function(e){return e.colId});this.gridColumns.sort(function(e,t){return u.indexOf(e.getId())-u.indexOf(t.getId())})}if(this.putFixedColumnsFirst(),this.updateDisplayedColumns(o),!t){var d={type:y.Events.EVENT_COLUMN_EVERYTHING_CHANGED,api:this.gridApi,columnApi:this.columnApi,source:o};this.eventService.dispatchEvent(d)}return this.raiseColumnEvents(n,o),s},e.prototype.raiseColumnEvents=function(e,t){var o=this;if(!this.gridOptionsWrapper.isSuppressSetColumnStateEvents()){var i=this.getColumnState(),n=function(n,r,s){if(!S._.compareArrays(e.map(r).sort(),i.map(r).sort())){var a={type:n,columns:s,column:1===s.length?s[0]:null,api:o.gridApi,columnApi:o.columnApi,source:t};o.eventService.dispatchEvent(a)}},r=function(t){var i=[],n={};return e.forEach(function(e){n[e.colId]=e}),o.gridColumns.forEach(function(e){var o=n[e.getColId()];o&&!t(o,e)||i.push(e)}),i};n(y.Events.EVENT_COLUMN_VALUE_CHANGED,function(e){return e.colId+\"-\"+e.aggFunc},this.valueColumns);n(y.Events.EVENT_COLUMN_PIVOT_CHANGED,function(e){return e.colId+\"-\"+e.pivotIndex},this.pivotColumns);n(y.Events.EVENT_COLUMN_ROW_GROUP_CHANGED,function(e){return e.colId+\"-\"+e.rowGroupIndex},this.rowGroupColumns);this.raiseColumnPinnedEvent(r(function(e,t){return e.pinned!==t.getPinned()}),t);var s=r(function(e,t){return e.hide===t.isVisible()});this.raiseColumnVisibleEvent(s,t);this.raiseColumnResizeEvent(r(function(e,t){return e.width!==t.getActualWidth()}),t),this.raiseColumnMovedEvent(e,t)}},e.prototype.raiseColumnPinnedEvent=function(e,t){if(e.length>0){var o={type:y.Events.EVENT_COLUMN_PINNED,pinned:null,columns:e,column:null,api:this.gridApi,columnApi:this.columnApi,source:t};this.eventService.dispatchEvent(o)}},e.prototype.raiseColumnVisibleEvent=function(e,t){if(e.length>0){var o={type:y.Events.EVENT_COLUMN_VISIBLE,visible:void 0,columns:e,column:null,api:this.gridApi,columnApi:this.columnApi,source:t};this.eventService.dispatchEvent(o)}},e.prototype.raiseColumnResizeEvent=function(e,t){if(e.length>0){var o={type:y.Events.EVENT_COLUMN_RESIZED,columns:e,column:null,finished:!0,api:this.gridApi,columnApi:this.columnApi,source:t};this.eventService.dispatchEvent(o)}},e.prototype.raiseColumnMovedEvent=function(e,t){for(var o=[],i=this.getColumnState(),n=function(t){var n=e[t],s=i[t];if(!n||s.hide)return\"continue\";if(n.colId!==s.colId){var a=S._.find(r.allDisplayedColumns,function(e){return e.getColId()===s.colId});o.push(a)}},r=this,s=0;s<i.length;s++)n(s);if(o.length>0){var a={type:y.Events.EVENT_COLUMN_MOVED,columns:o,column:null,toIndex:void 0,api:this.gridApi,columnApi:this.columnApi,source:t};this.eventService.dispatchEvent(a)}},e.prototype.sortColumnListUsingIndexes=function(e,t,o){return e[t.getId()]-e[o.getId()]},e.prototype.syncColumnWithNoState=function(e,t){e.setVisible(!1,t),e.setAggFunc(null),e.setPinned(null),e.setRowGroupActive(!1,t),e.setPivotActive(!1,t),e.setValueActive(!1,t)},e.prototype.syncColumnWithStateItem=function(e,t,o,i,n){if(e){e.setVisible(!t.hide,n),e.setPinned(t.pinned);var r=this.gridOptionsWrapper.getMinColWidth();t.width&&r&&t.width>=r&&e.setActualWidth(t.width,n),\"string\"==typeof t.aggFunc?(e.setAggFunc(t.aggFunc),e.setValueActive(!0,n),this.valueColumns.push(e)):(S._.exists(t.aggFunc)&&console.warn(\"ag-Grid: stateItem.aggFunc must be a string. if using your own aggregation functions, register the functions first before using them in get/set state. This is because it isintended for the column state to be stored and retrieved as simple JSON.\"),e.setAggFunc(null),e.setValueActive(!1,n)),\"number\"==typeof t.rowGroupIndex?(this.rowGroupColumns.push(e),e.setRowGroupActive(!0,n),o[e.getId()]=t.rowGroupIndex):e.setRowGroupActive(!1,n),\"number\"==typeof t.pivotIndex?(this.pivotColumns.push(e),e.setPivotActive(!0,n),i[e.getId()]=t.pivotIndex):e.setPivotActive(!1,n)}},e.prototype.getGridColumns=function(e){return this.getColumns(e,this.getGridColumn.bind(this))},e.prototype.getColumns=function(e,t){var o=[];return e&&e.forEach(function(e){var i=t(e);i&&o.push(i)}),o},e.prototype.getColumnWithValidation=function(e){if(null==e)return null;var t=this.getGridColumn(e);return t||console.warn(\"ag-Grid: could not find column \"+e),t},e.prototype.getPrimaryColumn=function(e){return this.getColumn(e,this.primaryColumns)},e.prototype.getGridColumn=function(e){return this.getColumn(e,this.gridColumns)},e.prototype.getColumn=function(e,t){if(!e)return null;for(var o=0;o<t.length;o++)if(this.columnsMatch(t[o],e))return t[o];return this.getAutoColumn(e)},e.prototype.getAutoColumn=function(e){var t=this;return this.groupAutoColumns&&S._.exists(this.groupAutoColumns)&&!S._.missing(this.groupAutoColumns)?S._.find(this.groupAutoColumns,function(o){return t.columnsMatch(o,e)}):null},e.prototype.columnsMatch=function(e,t){var o=e===t,i=e.getColDef()===t,n=e.getColId()==t;return o||i||n},e.prototype.getDisplayNameForColumn=function(e,t,o){if(void 0===o&&(o=!1),!e)return null;var i=this.getHeaderName(e.getColDef(),e,null,null,t);return o?this.wrapHeaderNameWithAggFunc(e,i):i},e.prototype.getDisplayNameForOriginalColumnGroup=function(e,t,o){var i=t?t.getColGroupDef():null;return i?this.getHeaderName(i,null,e,t,o):null},e.prototype.getDisplayNameForColumnGroup=function(e,t){return this.getDisplayNameForOriginalColumnGroup(e,e.getOriginalColumnGroup(),t)},e.prototype.getHeaderName=function(e,t,o,i,n){var r=e.headerValueGetter;if(r){var s={colDef:e,column:t,columnGroup:o,originalColumnGroup:i,location:n,api:this.gridOptionsWrapper.getApi(),context:this.gridOptionsWrapper.getContext()};return\"function\"==typeof r?r(s):\"string\"==typeof r?this.expressionService.evaluate(r,s):(console.warn(\"ag-grid: headerValueGetter must be a function or a string\"),\"\")}return null!=e.headerName?e.headerName:e.field?S._.camelCaseToHumanText(e.field):\"\"},e.prototype.wrapHeaderNameWithAggFunc=function(e,t){if(this.gridOptionsWrapper.isSuppressAggFuncInHeader())return t;var o,i=e.getColDef().pivotValueColumn,n=null;if(S._.exists(i))n=i?i.getAggFunc():null,o=!0;else{var r=e.isValueActive(),s=this.pivotMode||!this.isRowGroupEmpty();r&&s?(n=e.getAggFunc(),o=!0):o=!1}if(o){var a=\"string\"==typeof n?n:\"func\";return this.gridOptionsWrapper.getLocaleTextFunc()(a,a)+\"(\"+t+\")\"}return t},e.prototype.getColumnGroup=function(e,t){if(!e)return null;if(e instanceof s.ColumnGroup)return e;var o=this.getAllDisplayedColumnGroups(),i=\"number\"==typeof t,n=null;return this.columnUtils.depthFirstAllColumnTreeSearch(o,function(o){if(o instanceof s.ColumnGroup){var r=o;(i?e===r.getGroupId()&&t===r.getInstanceId():e===r.getGroupId())&&(n=r)}}),n},e.prototype.isReady=function(){return this.ready},e.prototype.createValueColumns=function(e,t){this.valueColumns=this.extractColumns(t,this.valueColumns,function(t,o){return t.setValueActive(o,e)},function(){return null},function(e){return!!e.aggFunc}),this.valueColumns.forEach(function(e){e.getAggFunc()||e.setAggFunc(e.getColDef().aggFunc)})},e.prototype.extractRowGroupColumns=function(e,t){this.rowGroupColumns=this.extractColumns(t,this.rowGroupColumns,function(t,o){return t.setRowGroupActive(o,e)},function(e){return e.rowGroupIndex},function(e){return e.rowGroup})},e.prototype.extractColumns=function(e,t,o,i,n){var r=this;t||(t=[]);var s=t.filter(function(e){return r.primaryColumns.indexOf(e)<0}),a=t.filter(function(e){return r.primaryColumns.indexOf(e)>=0}),l=this.primaryColumns.filter(function(t){return!e||e.indexOf(t)<0});s.forEach(function(e){return o(e,!1)});var p=[];return l.forEach(function(e){\"number\"==typeof i(e.getColDef())&&p.push(e)}),p.sort(function(e,t){var o=i(e.getColDef()),n=i(t.getColDef());return o===n?0:o<n?-1:1}),l.forEach(function(e){if(n(e.getColDef())){if(p.indexOf(e)>=0)return;p.push(e)}}),p.forEach(function(e){return o(e,!0)}),a.concat(p)},e.prototype.extractPivotColumns=function(e,t){this.pivotColumns=this.extractColumns(t,this.pivotColumns,function(t,o){return t.setPivotActive(o,e)},function(e){return e.pivotIndex},function(e){return e.pivot})},e.prototype.resetColumnGroupState=function(e){void 0===e&&(e=\"api\");var t=[];this.columnUtils.depthFirstOriginalTreeSearch(null,this.primaryColumnTree,function(e){if(e instanceof v.OriginalColumnGroup){var o={groupId:e.getGroupId(),open:e.getColGroupDef().openByDefault};t.push(o)}}),this.setColumnGroupState(t,e)},e.prototype.getColumnGroupState=function(){var e=[];return this.columnUtils.depthFirstOriginalTreeSearch(null,this.gridBalancedTree,function(t){if(t instanceof v.OriginalColumnGroup){var o=t;e.push({groupId:o.getGroupId(),open:o.isExpanded()})}}),e},e.prototype.setColumnGroupState=function(e,t){var o=this;void 0===t&&(t=\"api\"),this.columnAnimationService.start();var i=[];e.forEach(function(e){var t=e.groupId,n=e.open,r=o.getOriginalColumnGroup(t);r&&r.isExpanded()!==n&&(o.logger.log(\"columnGroupOpened(\"+r.getGroupId()+\",\"+n+\")\"),r.setExpanded(n),i.push(r))}),this.updateGroupsAndDisplayedColumns(t),this.setFirstRightAndLastLeftPinned(t),i.forEach(function(e){var t={type:y.Events.EVENT_COLUMN_GROUP_OPENED,columnGroup:e,api:o.gridApi,columnApi:o.columnApi};o.eventService.dispatchEvent(t)}),this.columnAnimationService.finish()},e.prototype.setColumnGroupOpened=function(e,t,o){var i;void 0===o&&(o=\"api\"),i=e instanceof v.OriginalColumnGroup?e.getId():e,this.setColumnGroupState([{groupId:i,open:t}],o)},e.prototype.getOriginalColumnGroup=function(e){if(e instanceof v.OriginalColumnGroup)return e;\"string\"!=typeof e&&console.error(\"ag-Grid: group key must be a string\");var t=null;return this.columnUtils.depthFirstOriginalTreeSearch(null,this.gridBalancedTree,function(o){if(o instanceof v.OriginalColumnGroup){var i=o;i.getId()===e&&(t=i)}}),t},e.prototype.calculateColumnsForDisplay=function(){var e=this;return this.pivotMode&&!this.secondaryColumnsPresent?S._.filter(this.gridColumns,function(t){var o=e.groupAutoColumns&&e.groupAutoColumns.indexOf(t)>=0,i=e.valueColumns&&e.valueColumns.indexOf(t)>=0;return o||i}):S._.filter(this.gridColumns,function(t){return e.groupAutoColumns&&e.groupAutoColumns.indexOf(t)>=0||t.isVisible()})},e.prototype.checkColSpanActiveInCols=function(e){var t=!1;return e.forEach(function(e){S._.exists(e.getColDef().colSpan)&&(t=!0)}),t},e.prototype.calculateColumnsForGroupDisplay=function(){var e=this;this.groupDisplayColumns=[];var t=function(t){var o=t.getColDef();o&&S._.exists(o.showRowGroup)&&e.groupDisplayColumns.push(t)};this.gridColumns.forEach(t),this.groupAutoColumns&&this.groupAutoColumns.forEach(t)},e.prototype.getGroupDisplayColumns=function(){return this.groupDisplayColumns},e.prototype.updateDisplayedColumns=function(e){var t=this.calculateColumnsForDisplay();this.buildDisplayedTrees(t),this.calculateColumnsForGroupDisplay(),this.updateGroupsAndDisplayedColumns(e),this.setFirstRightAndLastLeftPinned(e)},e.prototype.isSecondaryColumnsPresent=function(){return this.secondaryColumnsPresent},e.prototype.setSecondaryColumns=function(e,t){void 0===t&&(t=\"api\");var o=e&&e.length>0;if(o||this.secondaryColumnsPresent){if(o){this.processSecondaryColumnDefinitions(e);var i=this.columnFactory.createColumnTree(e,!1);this.secondaryBalancedTree=i.columnTree,this.secondaryHeaderRowCount=i.treeDept+1,this.secondaryColumns=this.getColumnsFromTree(this.secondaryBalancedTree),this.secondaryColumnsPresent=!0}else this.secondaryBalancedTree=null,this.secondaryHeaderRowCount=-1,this.secondaryColumns=null,this.secondaryColumnsPresent=!1;this.updateGridColumns(),this.updateDisplayedColumns(t)}},e.prototype.processSecondaryColumnDefinitions=function(e){var t=this.gridOptionsWrapper.getProcessSecondaryColDefFunc(),o=this.gridOptionsWrapper.getProcessSecondaryColGroupDefFunc();(t||o)&&e&&function e(i){i.forEach(function(i){if(S._.exists(i.children)){var n=i;o&&o(n),e(n.children)}else{t&&t(i)}})}(e)},e.prototype.updateGridColumns=function(){this.gridColsArePrimary&&(this.lastPrimaryOrder=this.gridColumns),this.secondaryColumns&&this.secondaryBalancedTree?(this.gridBalancedTree=this.secondaryBalancedTree.slice(),this.gridHeaderRowCount=this.secondaryHeaderRowCount,this.gridColumns=this.secondaryColumns.slice(),this.gridColsArePrimary=!1):(this.gridBalancedTree=this.primaryColumnTree.slice(),this.gridHeaderRowCount=this.primaryHeaderRowCount,this.gridColumns=this.primaryColumns.slice(),this.gridColsArePrimary=!0,this.orderGridColsLikeLastPrimary()),this.addAutoGroupToGridColumns(),this.autoRowHeightColumns=this.gridColumns.filter(function(e){return e.getColDef().autoHeight}),this.putFixedColumnsFirst(),this.setupQuickFilterColumns(),this.clearDisplayedColumns(),this.colSpanActive=this.checkColSpanActiveInCols(this.gridColumns);var e={type:y.Events.EVENT_GRID_COLUMNS_CHANGED,api:this.gridApi,columnApi:this.columnApi};this.eventService.dispatchEvent(e)},e.prototype.orderGridColsLikeLastPrimary=function(){var e=this;if(!S._.missing(this.lastPrimaryOrder)){var t=!0;if(this.gridColumns.forEach(function(o){e.lastPrimaryOrder.indexOf(o)>=0&&(t=!1)}),!t){var o=this.lastPrimaryOrder.filter(function(t){return e.gridColumns.indexOf(t)>=0}),i=this.gridColumns.filter(function(e){return o.indexOf(e)<0}),n=o.slice();i.forEach(function(e){var t=e.getOriginalParent();if(t){for(var o=[];!o.length&&t;){t.getLeafColumns().forEach(function(e){var t=n.indexOf(e)>=0,i=o.indexOf(e)<0;t&&i&&o.push(e)}),t=t.getOriginalParent()}if(o.length){var i=o.map(function(e){return n.indexOf(e)}),r=Math.max.apply(Math,i);S._.insertIntoArray(n,e,r+1)}else n.push(e)}else n.push(e)}),this.gridColumns=n}}},e.prototype.isPrimaryColumnGroupsPresent=function(){return this.primaryHeaderRowCount>1},e.prototype.setupQuickFilterColumns=function(){this.groupAutoColumns?this.columnsForQuickFilter=this.primaryColumns.concat(this.groupAutoColumns):this.columnsForQuickFilter=this.primaryColumns},e.prototype.putFixedColumnsFirst=function(){var e=this.gridColumns.filter(function(e){return e.getColDef().lockPosition}),t=this.gridColumns.filter(function(e){return!e.getColDef().lockPosition});this.gridColumns=e.concat(t)},e.prototype.addAutoGroupToGridColumns=function(){if(this.createGroupAutoColumnsIfNeeded(),!S._.missing(this.groupAutoColumns)){this.gridColumns=this.groupAutoColumns?this.groupAutoColumns.concat(this.gridColumns):this.gridColumns;var e=this.columnFactory.createForAutoGroups(this.groupAutoColumns,this.gridBalancedTree);this.gridBalancedTree=e.concat(this.gridBalancedTree)}},e.prototype.clearDisplayedColumns=function(){this.displayedLeftColumnTree=[],this.displayedRightColumnTree=[],this.displayedCentreColumnTree=[],this.displayedLeftHeaderRows={},this.displayedRightHeaderRows={},this.displayedCentreHeaderRows={},this.displayedLeftColumns=[],this.displayedRightColumns=[],this.displayedCenterColumns=[],this.allDisplayedColumns=[],this.allDisplayedVirtualColumns=[]},e.prototype.updateGroupsAndDisplayedColumns=function(e){this.updateOpenClosedVisibilityInColumnGroups(),this.updateDisplayedColumnsFromTrees(e),this.updateVirtualSets(),this.updateBodyWidths();var t={type:y.Events.EVENT_DISPLAYED_COLUMNS_CHANGED,api:this.gridApi,columnApi:this.columnApi};this.eventService.dispatchEvent(t)},e.prototype.updateDisplayedColumnsFromTrees=function(e){this.addToDisplayedColumns(this.displayedLeftColumnTree,this.displayedLeftColumns),this.addToDisplayedColumns(this.displayedCentreColumnTree,this.displayedCenterColumns),this.addToDisplayedColumns(this.displayedRightColumnTree,this.displayedRightColumns),this.setupAllDisplayedColumns(),this.setLeftValues(e)},e.prototype.setupAllDisplayedColumns=function(){this.gridOptionsWrapper.isEnableRtl()?this.allDisplayedColumns=this.displayedRightColumns.concat(this.displayedCenterColumns).concat(this.displayedLeftColumns):this.allDisplayedColumns=this.displayedLeftColumns.concat(this.displayedCenterColumns).concat(this.displayedRightColumns)},e.prototype.setLeftValues=function(e){this.setLeftValuesOfColumns(e),this.setLeftValuesOfGroups()},e.prototype.setLeftValuesOfColumns=function(e){var t=this,o=this.primaryColumns.slice(0),i=this.gridOptionsWrapper.isEnableRtl();[this.displayedLeftColumns,this.displayedRightColumns,this.displayedCenterColumns].forEach(function(n){if(i){var r=t.getWidthOfColsInList(n);n.forEach(function(t){r-=t.getActualWidth(),t.setLeft(r,e)})}else{var s=0;n.forEach(function(t){t.setLeft(s,e),s+=t.getActualWidth()})}S._.removeAllFromArray(o,n)}),o.forEach(function(t){t.setLeft(null,e)})},e.prototype.setLeftValuesOfGroups=function(){[this.displayedLeftColumnTree,this.displayedRightColumnTree,this.displayedCentreColumnTree].forEach(function(e){e.forEach(function(e){e instanceof s.ColumnGroup&&e.checkLeft()})})},e.prototype.addToDisplayedColumns=function(e,t){t.length=0,this.columnUtils.depthFirstDisplayedColumnTreeSearch(e,function(e){e instanceof a.Column&&t.push(e)})},e.prototype.updateDisplayedCenterVirtualColumns=function(){this.suppressColumnVirtualisation?this.allDisplayedCenterVirtualColumns=this.displayedCenterColumns:this.allDisplayedCenterVirtualColumns=this.filterOutColumnsWithinViewport(),this.allDisplayedVirtualColumns=this.allDisplayedCenterVirtualColumns.concat(this.displayedLeftColumns).concat(this.displayedRightColumns);var e={};return this.allDisplayedVirtualColumns.forEach(function(t){e[t.getId()]=!0}),e},e.prototype.getVirtualHeaderGroupRow=function(e,t){var o;switch(e){case a.Column.PINNED_LEFT:o=this.displayedLeftHeaderRows[t];break;case a.Column.PINNED_RIGHT:o=this.displayedRightHeaderRows[t];break;default:o=this.displayedCentreHeaderRows[t]}return S._.missing(o)&&(o=[]),o},e.prototype.updateDisplayedVirtualGroups=function(e){function t(o,i,n){for(var r=!1,s=0;s<o.length;s++){var l=o[s],p=void 0;if(l instanceof a.Column)p=!0===e[l.getId()];else p=t(l.getDisplayedChildren(),i,n+1);p&&(r=!0,i[n]||(i[n]=[]),i[n].push(l))}return r}this.displayedLeftHeaderRows={},this.displayedRightHeaderRows={},this.displayedCentreHeaderRows={},t(this.displayedLeftColumnTree,this.displayedLeftHeaderRows,0),t(this.displayedRightColumnTree,this.displayedRightHeaderRows,0),t(this.displayedCentreColumnTree,this.displayedCentreHeaderRows,0)},e.prototype.updateVirtualSets=function(){var e=this.updateDisplayedCenterVirtualColumns();this.updateDisplayedVirtualGroups(e)},e.prototype.filterOutColumnsWithinViewport=function(){return S._.filter(this.displayedCenterColumns,this.isColumnInViewport.bind(this))},e.prototype.sizeColumnsToFit=function(e,t){var o=this;void 0===t&&(t=\"api\");var i=this.getAllDisplayedColumns();if(!(e<=0||0===i.length)){for(var n=S._.filter(i,function(e){return!0===e.getColDef().suppressSizeToFit}),r=S._.filter(i,function(e){return!0!==e.getColDef().suppressSizeToFit}),s=r.slice(0),a=!1;!a;){a=!0;var l=e-this.getWidthOfColsInList(n);if(l<=0)r.forEach(function(e){e.setMinimum(t)});else for(var p=l/this.getWidthOfColsInList(r),u=l,d=r.length-1;d>=0;d--){var c=r[d],h=Math.round(c.getActualWidth()*p);if(h<c.getMinWidth())c.setMinimum(t),f(c),a=!1;else if(c.isGreaterThanMax(h))c.setActualWidth(c.getMaxWidth(),t),f(c),a=!1;else{0===d?c.setActualWidth(u,t):c.setActualWidth(h,t)}u-=h}}this.setLeftValues(t),this.updateBodyWidths(),s.forEach(function(e){var t={type:y.Events.EVENT_COLUMN_RESIZED,column:e,columns:[e],finished:!0,api:o.gridApi,columnApi:o.columnApi,source:\"sizeColumnsToFit\"};o.eventService.dispatchEvent(t)})}function f(e){S._.removeFromArray(r,e),n.push(e)}},e.prototype.buildDisplayedTrees=function(e){var t=S._.filter(e,function(e){return\"left\"===e.getPinned()}),o=S._.filter(e,function(e){return\"right\"===e.getPinned()}),i=S._.filter(e,function(e){return\"left\"!==e.getPinned()&&\"right\"!==e.getPinned()}),n=new m.GroupInstanceIdCreator;this.displayedLeftColumnTree=this.displayedGroupCreator.createDisplayedGroups(t,this.gridBalancedTree,n,a.Column.PINNED_LEFT,this.displayedLeftColumnTree),this.displayedRightColumnTree=this.displayedGroupCreator.createDisplayedGroups(o,this.gridBalancedTree,n,a.Column.PINNED_RIGHT,this.displayedRightColumnTree),this.displayedCentreColumnTree=this.displayedGroupCreator.createDisplayedGroups(i,this.gridBalancedTree,n,null,this.displayedCentreColumnTree)},e.prototype.updateOpenClosedVisibilityInColumnGroups=function(){var e=this.getAllDisplayedColumnGroups();this.columnUtils.depthFirstAllColumnTreeSearch(e,function(e){e instanceof s.ColumnGroup&&e.calculateDisplayedColumns()})},e.prototype.getGroupAutoColumns=function(){return this.groupAutoColumns},e.prototype.createGroupAutoColumnsIfNeeded=function(){if(this.autoGroupsNeedBuilding){this.autoGroupsNeedBuilding=!1;var e=this.gridOptionsWrapper.isGroupUseEntireRow(this.pivotMode),t=this.gridOptionsWrapper.isGroupSuppressAutoColumn()&&!this.pivotMode,o=this.gridOptionsWrapper.isGroupSuppressRow();if((this.rowGroupColumns.length>0||this.usingTreeData)&&!t&&!e&&!o){var i=this.autoGroupColService.createAutoGroupColumns(this.rowGroupColumns);!this.autoColsEqual(i,this.groupAutoColumns)&&(this.groupAutoColumns=i)}else this.groupAutoColumns=null}},e.prototype.autoColsEqual=function(e,t){if(!e&&!t)return!0;if(!e||!t)return!1;if(e.length!==t.length)return!1;for(var o=0;o<e.length;o++){var i=e[o],n=t[o];if(i.getColId()!==n.getColId())return!1}return!0},e.prototype.getWidthOfColsInList=function(e){for(var t=0,o=0;o<e.length;o++)t+=e[o].getActualWidth();return t},e.prototype.getGridBalancedTree=function(){return this.gridBalancedTree},i([C.Autowired(\"gridOptionsWrapper\"),n(\"design:type\",l.GridOptionsWrapper)],e.prototype,\"gridOptionsWrapper\",void 0),i([C.Autowired(\"expressionService\"),n(\"design:type\",p.ExpressionService)],e.prototype,\"expressionService\",void 0),i([C.Autowired(\"columnFactory\"),n(\"design:type\",u.ColumnFactory)],e.prototype,\"columnFactory\",void 0),i([C.Autowired(\"displayedGroupCreator\"),n(\"design:type\",d.DisplayedGroupCreator)],e.prototype,\"displayedGroupCreator\",void 0),i([C.Autowired(\"autoWidthCalculator\"),n(\"design:type\",c.AutoWidthCalculator)],e.prototype,\"autoWidthCalculator\",void 0),i([C.Autowired(\"eventService\"),n(\"design:type\",h.EventService)],e.prototype,\"eventService\",void 0),i([C.Autowired(\"columnUtils\"),n(\"design:type\",f.ColumnUtils)],e.prototype,\"columnUtils\",void 0),i([C.Autowired(\"context\"),n(\"design:type\",C.Context)],e.prototype,\"context\",void 0),i([C.Autowired(\"columnAnimationService\"),n(\"design:type\",E.ColumnAnimationService)],e.prototype,\"columnAnimationService\",void 0),i([C.Autowired(\"autoGroupColService\"),n(\"design:type\",w.AutoGroupColService)],e.prototype,\"autoGroupColService\",void 0),i([C.Optional(\"aggFuncService\"),n(\"design:type\",Object)],e.prototype,\"aggFuncService\",void 0),i([C.Optional(\"valueCache\"),n(\"design:type\",R.ValueCache)],e.prototype,\"valueCache\",void 0),i([C.Autowired(\"columnApi\"),n(\"design:type\",O.ColumnApi)],e.prototype,\"columnApi\",void 0),i([C.Autowired(\"gridApi\"),n(\"design:type\",_.GridApi)],e.prototype,\"gridApi\",void 0),i([C.PostConstruct,n(\"design:type\",Function),n(\"design:paramtypes\",[]),n(\"design:returntype\",void 0)],e.prototype,\"init\",null),i([r(0,C.Qualifier(\"loggerFactory\")),n(\"design:type\",Function),n(\"design:paramtypes\",[g.LoggerFactory]),n(\"design:returntype\",void 0)],e.prototype,\"setBeans\",null),e=i([C.Bean(\"columnController\")],e)}();t.ColumnController=b},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */Object.defineProperty(t,\"__esModule\",{value:!0});var i=o(28);t.Events=i.Events},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */Object.defineProperty(t,\"__esModule\",{value:!0});var i=function(){function e(){}return e.STEP_EVERYTHING=0,e.STEP_FILTER=1,e.STEP_SORT=2,e.STEP_MAP=3,e.STEP_AGGREGATE=4,e.STEP_PIVOT=5,e.ROW_BUFFER_SIZE=10,e.LAYOUT_INTERVAL=500,e.BATCH_WAIT_MILLIS=50,e.EXPORT_TYPE_DRAG_COPY=\"dragCopy\",e.EXPORT_TYPE_CLIPBOARD=\"clipboard\",e.EXPORT_TYPE_EXCEL=\"excel\",e.EXPORT_TYPE_CSV=\"csv\",e.KEY_BACKSPACE=8,e.KEY_TAB=9,e.KEY_NEW_LINE=10,e.KEY_ENTER=13,e.KEY_SHIFT=16,e.KEY_ESCAPE=27,e.KEY_SPACE=32,e.KEY_LEFT=37,e.KEY_UP=38,e.KEY_RIGHT=39,e.KEY_DOWN=40,e.KEY_DELETE=46,e.KEY_A=65,e.KEY_C=67,e.KEY_V=86,e.KEY_D=68,e.KEY_F2=113,e.KEY_PAGE_UP=33,e.KEY_PAGE_DOWN=34,e.KEY_PAGE_HOME=36,e.KEY_PAGE_END=35,e.ROW_MODEL_TYPE_INFINITE=\"infinite\",e.ROW_MODEL_TYPE_VIEWPORT=\"viewport\",e.ROW_MODEL_TYPE_CLIENT_SIDE=\"clientSide\",e.ROW_MODEL_TYPE_SERVER_SIDE=\"serverSide\",e.DEPRECATED_ROW_MODEL_TYPE_NORMAL=\"normal\",e.ALWAYS=\"always\",e.ONLY_WHEN_GROUPING=\"onlyWhenGrouping\",e.PINNED_TOP=\"top\",e.PINNED_BOTTOM=\"bottom\",e.DOM_LAYOUT_NORMAL=\"normal\",e.DOM_LAYOUT_PRINT=\"print\",e.DOM_LAYOUT_AUTO_HEIGHT=\"autoHeight\",e.GROUP_AUTO_COLUMN_ID=\"ag-Grid-AutoColumn\",e}();t.Constants=i},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}),r=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},s=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(0),l=o(13),p=o(1),u=new p.NumberSequence,d=function(e){function t(t){var o=e.call(this)||this;return o.childComponents=[],o.annotatedEventListeners=[],o.displayed=!0,o.visible=!0,o.compId=u.next(),t&&o.setTemplate(t),o}return n(t,e),t.prototype.getCompId=function(){return this.compId},t.prototype.createChildComponentsFromTags=function(e){var t=this;p._.copyNodeList(e.childNodes).forEach(function(o){var i=t.getContext().createComponentFromElement(o,function(e){t.copyAttributesFromNode(o,e.getGui())});if(i){if(i.addItems&&o.children.length){t.createChildComponentsFromTags(o);var n=Array.prototype.slice.call(o.children);i.addItems(n)}t.swapComponentForNode(i,e,o)}else o.childNodes&&t.createChildComponentsFromTags(o)})},t.prototype.copyAttributesFromNode=function(e,t){p._.iterateNamedNodeMap(e.attributes,function(e,o){t.setAttribute(e,o)})},t.prototype.swapComponentForNode=function(e,t,o){var i=e.getGui();t.replaceChild(i,o),t.insertBefore(document.createComment(o.nodeName),i),this.childComponents.push(e),this.swapInComponentForQuerySelectors(e,o)},t.prototype.swapInComponentForQuerySelectors=function(e,t){for(var o=Object.getPrototypeOf(this),i=this;null!=o;){var n=o.__agComponentMetaData,r=o.constructor.name;n&&n[r]&&n[r].querySelectors&&n[r].querySelectors.forEach(function(o){i[o.attributeName]===t&&(i[o.attributeName]=e)}),o=Object.getPrototypeOf(o)}},t.prototype.setTemplate=function(e){var t=p._.loadTemplate(e);this.setTemplateFromElement(t)},t.prototype.setTemplateFromElement=function(e){this.eGui=e,this.eGui.__agComponent=this,this.addAnnotatedEventListeners(),this.wireQuerySelectors(),!!this.getContext()&&this.createChildComponentsFromTags(this.getGui())},t.prototype.createChildComponentsPreConstruct=function(){!!this.getGui()&&this.createChildComponentsFromTags(this.getGui())},t.prototype.wireQuerySelectors=function(){var e=this;if(this.eGui)for(var t=Object.getPrototypeOf(this),o=function(){var o=t.__agComponentMetaData,n=t.constructor.name;if(o&&o[n]&&o[n].querySelectors){var r=i;o[n].querySelectors.forEach(function(t){var o=e.eGui.querySelector(t.querySelector);if(o){var i=o.__agComponent;r[t.attributeName]=i||o}})}t=Object.getPrototypeOf(t)},i=this;null!=t;)o()},t.prototype.addAnnotatedEventListeners=function(){var e=this;if(this.removeAnnotatedEventListeners(),this.eGui){var t=this.getAgComponentMetaData(\"listenerMethods\");p._.missingOrEmpty(t)||(this.annotatedEventListeners||(this.annotatedEventListeners=[]),t.forEach(function(t){var o=e[t.methodName].bind(e);e.eGui.addEventListener(t.eventName,o),e.annotatedEventListeners.push({eventName:t.eventName,listener:o})}))}},t.prototype.getAgComponentMetaData=function(e){for(var t=[],o=Object.getPrototypeOf(this);null!=o;){var i=o.__agComponentMetaData,n=o.constructor.name;if(void 0===n){var r=/function\\s([^(]{1,})\\(/.exec(o.constructor.toString());r&&r.length>1&&(n=r[1].trim())}i&&i[n]&&i[n][e]&&(t=t.concat(i[n][e])),o=Object.getPrototypeOf(o)}return t},t.prototype.removeAnnotatedEventListeners=function(){var e=this;this.annotatedEventListeners&&this.eGui&&(this.annotatedEventListeners.forEach(function(t){e.eGui.removeEventListener(t.eventName,t.listener)}),this.annotatedEventListeners=[])},t.prototype.getGui=function(){return this.eGui},t.prototype.setParentComponent=function(e){this.parentComponent=e},t.prototype.getParentComponent=function(){return this.parentComponent},t.prototype.setGui=function(e){this.eGui=e},t.prototype.queryForHtmlElement=function(e){return this.eGui.querySelector(e)},t.prototype.queryForHtmlInputElement=function(e){return this.eGui.querySelector(e)},t.prototype.appendChild=function(e){if(p._.isNodeOrElement(e))this.eGui.appendChild(e);else{var t=e;this.eGui.appendChild(t.getGui()),this.childComponents.push(t)}},t.prototype.addFeature=function(e,t){e.wireBean(t),t.destroy&&this.addDestroyFunc(t.destroy.bind(t))},t.prototype.isDisplayed=function(){return this.displayed},t.prototype.setVisible=function(e){e!==this.visible&&(this.visible=e,p._.setVisible(this.eGui,e))},t.prototype.setDisplayed=function(e){if(e!==this.displayed){this.displayed=e,p._.setDisplayed(this.eGui,e);var o={type:t.EVENT_DISPLAYED_CHANGED,visible:this.displayed};this.dispatchEvent(o)}},t.prototype.addOrRemoveCssClass=function(e,t){p._.addOrRemoveCssClass(this.eGui,e,t)},t.prototype.destroy=function(){e.prototype.destroy.call(this),this.childComponents.forEach(function(e){e&&e.destroy&&e.destroy()}),this.childComponents.length=0,this.removeAnnotatedEventListeners()},t.prototype.addGuiEventListener=function(e,t){var o=this;this.getGui().addEventListener(e,t),this.addDestroyFunc(function(){return o.getGui().removeEventListener(e,t)})},t.prototype.addCssClass=function(e){p._.addCssClass(this.getGui(),e)},t.prototype.removeCssClass=function(e){p._.removeCssClass(this.getGui(),e)},t.prototype.getAttribute=function(e){var t=this.getGui();return t?t.getAttribute(e):null},t.prototype.getRefElement=function(e){return this.queryForHtmlElement('[ref=\"'+e+'\"]')},t.EVENT_DISPLAYED_CHANGED=\"displayedChanged\",r([a.PreConstruct,s(\"design:type\",Function),s(\"design:paramtypes\",[]),s(\"design:returntype\",void 0)],t.prototype,\"createChildComponentsPreConstruct\",null),t}(l.BeanStub);t.Component=d},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(65),s=o(17),a=o(14),l=o(4),p=o(19),u=o(2),d=o(20),c=o(3),h=o(6),f=o(0),g=o(23),y=o(22),v=o(53),m=o(25),C=o(113),E=o(35),w=o(59),R=o(24),_=o(37),O=o(1),S=function(){function e(){this.detailGridInfoMap={}}return e.prototype.registerGridComp=function(e){this.gridPanel=e},e.prototype.registerGridCore=function(e){this.gridCore=e},e.prototype.registerHeaderRootComp=function(e){this.headerRootComp=e},e.prototype.init=function(){switch(this.rowModel.getType()){case h.Constants.ROW_MODEL_TYPE_CLIENT_SIDE:this.clientSideRowModel=this.rowModel;break;case h.Constants.ROW_MODEL_TYPE_INFINITE:this.infinitePageRowModel=this.rowModel;break;case h.Constants.ROW_MODEL_TYPE_SERVER_SIDE:this.serverSideRowModel=this.rowModel}},e.prototype.__getAlignedGridService=function(){return this.alignedGridsService},e.prototype.addDetailGridInfo=function(e,t){this.detailGridInfoMap[e]=t},e.prototype.removeDetailGridInfo=function(e){this.detailGridInfoMap[e]=void 0},e.prototype.getDetailGridInfo=function(e){return this.detailGridInfoMap[e]},e.prototype.forEachDetailGridInfo=function(e){var t=0;O._.iterateObject(this.detailGridInfoMap,function(o,i){O._.exists(i)&&(e(i,t),t++)})},e.prototype.getDataAsCsv=function(e){return this.csvCreator.getDataAsCsv(e)},e.prototype.exportDataAsCsv=function(e){this.csvCreator.exportDataAsCsv(e)},e.prototype.getDataAsExcel=function(e){return this.excelCreator||console.warn(\"ag-Grid: Excel export is only available in ag-Grid Enterprise\"),this.excelCreator.getDataAsExcelXml(e)},e.prototype.exportDataAsExcel=function(e){this.excelCreator||console.warn(\"ag-Grid: Excel export is only available in ag-Grid Enterprise\"),this.excelCreator.exportDataAsExcel(e)},e.prototype.setEnterpriseDatasource=function(e){console.warn(\"ag-grid: since version 18.x, api.setEnterpriseDatasource() should be replaced with api.setServerSideDatasource()\"),this.setServerSideDatasource(e)},e.prototype.setServerSideDatasource=function(e){this.gridOptionsWrapper.isRowModelServerSide()?this.rowModel.setDatasource(e):console.warn(\"ag-Grid: you can only use an enterprise datasource when gridOptions.rowModelType is '\"+h.Constants.ROW_MODEL_TYPE_SERVER_SIDE+\"'\")},e.prototype.setDatasource=function(e){this.gridOptionsWrapper.isRowModelInfinite()?this.rowModel.setDatasource(e):console.warn(\"ag-Grid: you can only use a datasource when gridOptions.rowModelType is '\"+h.Constants.ROW_MODEL_TYPE_INFINITE+\"'\")},e.prototype.setViewportDatasource=function(e){this.gridOptionsWrapper.isRowModelViewport()?this.rowModel.setViewportDatasource(e):console.warn(\"ag-Grid: you can only use a viewport datasource when gridOptions.rowModelType is '\"+h.Constants.ROW_MODEL_TYPE_VIEWPORT+\"'\")},e.prototype.setRowData=function(e){if(this.gridOptionsWrapper.isRowModelDefault())if(this.gridOptionsWrapper.isDeltaRowDataMode()){var t=this.immutableService.createTransactionForRowData(e),o=t[0],i=t[1];this.clientSideRowModel.updateRowData(o,i),this.rowRenderer.refreshFullWidthRows()}else this.selectionController.reset(),this.clientSideRowModel.setRowData(e);else console.warn(\"cannot call setRowData unless using normal row model\")},e.prototype.setFloatingTopRowData=function(e){console.warn(\"ag-Grid: since v12, api.setFloatingTopRowData() is now api.setPinnedTopRowData()\"),this.setPinnedTopRowData(e)},e.prototype.setFloatingBottomRowData=function(e){console.warn(\"ag-Grid: since v12, api.setFloatingBottomRowData() is now api.setPinnedBottomRowData()\"),this.setPinnedBottomRowData(e)},e.prototype.getFloatingTopRowCount=function(){return console.warn(\"ag-Grid: since v12, api.getFloatingTopRowCount() is now api.getPinnedTopRowCount()\"),this.getPinnedTopRowCount()},e.prototype.getFloatingBottomRowCount=function(){return console.warn(\"ag-Grid: since v12, api.getFloatingBottomRowCount() is now api.getPinnedBottomRowCount()\"),this.getPinnedBottomRowCount()},e.prototype.getFloatingTopRow=function(e){return console.warn(\"ag-Grid: since v12, api.getFloatingTopRow() is now api.getPinnedTopRow()\"),this.getPinnedTopRow(e)},e.prototype.getFloatingBottomRow=function(e){return console.warn(\"ag-Grid: since v12, api.getFloatingBottomRow() is now api.getPinnedBottomRow()\"),this.getPinnedBottomRow(e)},e.prototype.setPinnedTopRowData=function(e){this.pinnedRowModel.setPinnedTopRowData(e)},e.prototype.setPinnedBottomRowData=function(e){this.pinnedRowModel.setPinnedBottomRowData(e)},e.prototype.getPinnedTopRowCount=function(){return this.pinnedRowModel.getPinnedTopRowCount()},e.prototype.getPinnedBottomRowCount=function(){return this.pinnedRowModel.getPinnedBottomRowCount()},e.prototype.getPinnedTopRow=function(e){return this.pinnedRowModel.getPinnedTopRow(e)},e.prototype.getPinnedBottomRow=function(e){return this.pinnedRowModel.getPinnedBottomRow(e)},e.prototype.setColumnDefs=function(e,t){void 0===t&&(t=\"api\"),this.columnController.setColumnDefs(e,t)},e.prototype.expireValueCache=function(){this.valueCache.expire()},e.prototype.getVerticalPixelRange=function(){return this.gridPanel.getVScrollPosition()},e.prototype.getHorizontalPixelRange=function(){return this.gridPanel.getHScrollPosition()},e.prototype.setAlwaysShowVerticalScroll=function(e){this.gridOptionsWrapper.setProperty(\"alwaysShowVerticalScroll\",e)},e.prototype.refreshToolPanel=function(){this.gridCore.refreshSideBar()},e.prototype.refreshCells=function(e){void 0===e&&(e={}),Array.isArray(e)?console.warn(\"since ag-Grid v11.1, refreshCells() now takes parameters, please see the documentation.\"):this.rowRenderer.refreshCells(e)},e.prototype.flashCells=function(e){void 0===e&&(e={}),this.rowRenderer.flashCells(e)},e.prototype.redrawRows=function(e){void 0===e&&(e={}),e&&e.rowNodes?this.rowRenderer.redrawRows(e.rowNodes):this.rowRenderer.redrawAfterModelUpdate()},e.prototype.timeFullRedraw=function(e){void 0===e&&(e=1);var t=0,o=0,i=0,n=this;!function r(){var s=(new Date).getTime();n.rowRenderer.redrawAfterModelUpdate();var a=(new Date).getTime();window.setTimeout(function(){var n=(new Date).getTime(),l=a-s,p=n-a;console.log(\"duration:  processing = \"+l+\"ms, reflow = \"+p+\"ms\"),o+=l,i+=p,++t<e?window.setTimeout(r,1e3):(console.log(\"tests complete. iteration count = \"+t),console.log(\"average processing = \"+o/t+\"ms\"),console.log(\"average reflow = \"+i/t+\"ms\"))},0)}()},e.prototype.refreshView=function(){console.warn(\"ag-Grid: since v11.1, refreshView() is deprecated, please call refreshCells() or redrawRows() instead\"),this.redrawRows()},e.prototype.refreshRows=function(e){console.warn(\"since ag-Grid v11.1, refreshRows() is deprecated, please use refreshCells({rowNodes: rows}) or redrawRows({rowNodes: rows}) instead\"),this.refreshCells({rowNodes:e})},e.prototype.rowDataChanged=function(e){console.warn(\"ag-Grid: rowDataChanged is deprecated, either call refreshView() to refresh everything, or call rowNode.setRowData(newData) to set value on a particular node\"),this.redrawRows()},e.prototype.softRefreshView=function(){console.error(\"ag-Grid: since v16, softRefreshView() is no longer supported. Please check the documentation on how to refresh.\")},e.prototype.refreshGroupRows=function(){console.warn(\"ag-Grid: since v11.1, refreshGroupRows() is no longer supported, call refreshCells() instead. Because refreshCells() now does dirty checking, it will only refresh cells that have changed, so it should not be necessary to only refresh the group rows.\"),this.refreshCells()},e.prototype.setFunctionsReadOnly=function(e){this.gridOptionsWrapper.setProperty(\"functionsReadOnly\",e)},e.prototype.refreshHeader=function(){this.headerRootComp.refreshHeader(),this.gridPanel.setHeaderAndFloatingHeights()},e.prototype.isAnyFilterPresent=function(){return this.filterManager.isAnyFilterPresent()},e.prototype.isAdvancedFilterPresent=function(){return console.warn(\"ag-Grid: isAdvancedFilterPresent() is deprecated, please use isColumnFilterPresent()\"),this.isColumnFilterPresent()},e.prototype.isColumnFilterPresent=function(){return this.filterManager.isAdvancedFilterPresent()},e.prototype.isQuickFilterPresent=function(){return this.filterManager.isQuickFilterPresent()},e.prototype.getModel=function(){return this.rowModel},e.prototype.setRowNodeExpanded=function(e,t){e&&e.setExpanded(t)},e.prototype.onGroupExpandedOrCollapsed=function(e){O._.missing(this.clientSideRowModel)&&console.warn(\"ag-Grid: cannot call onGroupExpandedOrCollapsed unless using normal row model\"),O._.exists(e)&&console.warn(\"ag-Grid: api.onGroupExpandedOrCollapsed - refreshFromIndex parameter is no longer used, the grid will refresh all rows\"),this.clientSideRowModel.refreshModel({step:h.Constants.STEP_MAP})},e.prototype.refreshInMemoryRowModel=function(e){console.warn(\"ag-grid: since version 18.x, api.refreshInMemoryRowModel() should be replaced with api.refreshClientSideRowModel()\"),this.refreshClientSideRowModel(e)},e.prototype.refreshClientSideRowModel=function(e){O._.missing(this.clientSideRowModel)&&console.warn(\"cannot call refreshClientSideRowModel unless using normal row model\");var t=h.Constants.STEP_EVERYTHING,o={group:h.Constants.STEP_EVERYTHING,filter:h.Constants.STEP_FILTER,map:h.Constants.STEP_MAP,aggregate:h.Constants.STEP_AGGREGATE,sort:h.Constants.STEP_SORT,pivot:h.Constants.STEP_PIVOT};if(O._.exists(e)&&(t=o[e]),O._.missing(t))console.error(\"ag-Grid: invalid step \"+e+\", available steps are \"+Object.keys(o).join(\", \"));else{var i={step:t,keepRenderedRows:!0,animate:!0,keepEditingRows:!0};this.clientSideRowModel.refreshModel(i)}},e.prototype.isAnimationFrameQueueEmpty=function(){return this.animationFrameService.isQueueEmpty()},e.prototype.getRowNode=function(e){return this.rowModel.getRowNode(e)},e.prototype.expandAll=function(){O._.missing(this.clientSideRowModel)?console.warn(\"ag-Grid: cannot call expandAll unless using normal row model\"):this.clientSideRowModel.expandOrCollapseAll(!0)},e.prototype.collapseAll=function(){O._.missing(this.clientSideRowModel)?console.warn(\"ag-Grid: cannot call collapseAll unless using normal row model\"):this.clientSideRowModel.expandOrCollapseAll(!1)},e.prototype.addVirtualRowListener=function(e,t,o){\"string\"!=typeof e&&console.warn(\"ag-Grid: addVirtualRowListener is deprecated, please use addRenderedRowListener.\"),this.addRenderedRowListener(e,t,o)},e.prototype.addRenderedRowListener=function(e,t,o){\"virtualRowSelected\"===e&&console.warn(\"ag-Grid: event virtualRowSelected is deprecated, to register for individual row\\n                selection events, add a listener directly to the row node.\"),this.rowRenderer.addRenderedRowListener(e,t,o)},e.prototype.setQuickFilter=function(e){this.filterManager.setQuickFilter(e)},e.prototype.selectIndex=function(e,t,o){console.warn(\"ag-Grid: do not use api for selection, call node.setSelected(value) instead\"),o&&console.warn(\"ag-Grid: suppressEvents is no longer supported, stop listening for the event if you no longer want it\"),this.selectionController.selectIndex(e,t)},e.prototype.deselectIndex=function(e,t){void 0===t&&(t=!1),console.warn(\"ag-Grid: do not use api for selection, call node.setSelected(value) instead\"),t&&console.warn(\"ag-Grid: suppressEvents is no longer supported, stop listening for the event if you no longer want it\"),this.selectionController.deselectIndex(e)},e.prototype.selectNode=function(e,t,o){void 0===t&&(t=!1),void 0===o&&(o=!1),console.warn(\"ag-Grid: API for selection is deprecated, call node.setSelected(value) instead\"),o&&console.warn(\"ag-Grid: suppressEvents is no longer supported, stop listening for the event if you no longer want it\"),e.setSelectedParams({newValue:!0,clearSelection:!t})},e.prototype.deselectNode=function(e,t){void 0===t&&(t=!1),console.warn(\"ag-Grid: API for selection is deprecated, call node.setSelected(value) instead\"),t&&console.warn(\"ag-Grid: suppressEvents is no longer supported, stop listening for the event if you no longer want it\"),e.setSelectedParams({newValue:!1})},e.prototype.selectAll=function(){this.selectionController.selectAllRowNodes()},e.prototype.deselectAll=function(){this.selectionController.deselectAllRowNodes()},e.prototype.selectAllFiltered=function(){this.selectionController.selectAllRowNodes(!0)},e.prototype.deselectAllFiltered=function(){this.selectionController.deselectAllRowNodes(!0)},e.prototype.recomputeAggregates=function(){O._.missing(this.clientSideRowModel)&&console.warn(\"cannot call recomputeAggregates unless using normal row model\"),console.warn(\"recomputeAggregates is deprecated, please call api.refreshClientSideRowModel('aggregate') instead\"),this.clientSideRowModel.refreshModel({step:h.Constants.STEP_AGGREGATE})},e.prototype.sizeColumnsToFit=function(){this.gridPanel.sizeColumnsToFit()},e.prototype.showLoadingOverlay=function(){this.gridPanel.showLoadingOverlay()},e.prototype.showNoRowsOverlay=function(){this.gridPanel.showNoRowsOverlay()},e.prototype.hideOverlay=function(){this.gridPanel.hideOverlay()},e.prototype.isNodeSelected=function(e){return console.warn(\"ag-Grid: no need to call api.isNodeSelected(), just call node.isSelected() instead\"),e.isSelected()},e.prototype.getSelectedNodesById=function(){return console.error(\"ag-Grid: since version 3.4, getSelectedNodesById no longer exists, use getSelectedNodes() instead\"),null},e.prototype.getSelectedNodes=function(){return this.selectionController.getSelectedNodes()},e.prototype.getSelectedRows=function(){return this.selectionController.getSelectedRows()},e.prototype.getBestCostNodeSelection=function(){return this.selectionController.getBestCostNodeSelection()},e.prototype.getRenderedNodes=function(){return this.rowRenderer.getRenderedNodes()},e.prototype.ensureColIndexVisible=function(e){console.warn(\"ag-Grid: ensureColIndexVisible(index) no longer supported, use ensureColumnVisible(colKey) instead.\")},e.prototype.ensureColumnVisible=function(e){this.gridPanel.ensureColumnVisible(e)},e.prototype.ensureIndexVisible=function(e,t){this.gridPanel.ensureIndexVisible(e,t)},e.prototype.ensureNodeVisible=function(e,t){this.gridCore.ensureNodeVisible(e,t)},e.prototype.forEachLeafNode=function(e){O._.missing(this.clientSideRowModel)&&console.warn(\"cannot call forEachNode unless using normal row model\"),this.clientSideRowModel.forEachLeafNode(e)},e.prototype.forEachNode=function(e){this.rowModel.forEachNode(e)},e.prototype.forEachNodeAfterFilter=function(e){O._.missing(this.clientSideRowModel)&&console.warn(\"cannot call forEachNodeAfterFilter unless using normal row model\"),this.clientSideRowModel.forEachNodeAfterFilter(e)},e.prototype.forEachNodeAfterFilterAndSort=function(e){O._.missing(this.clientSideRowModel)&&console.warn(\"cannot call forEachNodeAfterFilterAndSort unless using normal row model\"),this.clientSideRowModel.forEachNodeAfterFilterAndSort(e)},e.prototype.getFilterApiForColDef=function(e){return console.warn(\"ag-grid API method getFilterApiForColDef deprecated, use getFilterApi instead\"),this.getFilterInstance(e)},e.prototype.getFilterInstance=function(e){var t=this.columnController.getPrimaryColumn(e);if(t)return this.filterManager.getFilterComponent(t,\"NO_UI\").resolveNow(null,function(e){return e})},e.prototype.getFilterApi=function(e){return console.warn(\"ag-Grid: getFilterApi is deprecated, use getFilterInstance instead\"),this.getFilterInstance(e)},e.prototype.destroyFilter=function(e){var t=this.columnController.getPrimaryColumn(e);if(t)return this.filterManager.destroyFilter(t,\"filterDestroyed\")},e.prototype.getStatusPanel=function(e){if(this.statusBarService)return this.statusBarService.getStatusPanel(e)},e.prototype.getColumnDef=function(e){var t=this.columnController.getPrimaryColumn(e);return t?t.getColDef():null},e.prototype.onFilterChanged=function(){this.filterManager.onFilterChanged()},e.prototype.onSortChanged=function(){this.sortController.onSortChanged()},e.prototype.setSortModel=function(e,t){void 0===t&&(t=\"api\"),this.sortController.setSortModel(e,t)},e.prototype.getSortModel=function(){return this.sortController.getSortModel()},e.prototype.setFilterModel=function(e){this.filterManager.setFilterModel(e)},e.prototype.getFilterModel=function(){return this.filterManager.getFilterModel()},e.prototype.getFocusedCell=function(){return this.focusedCellController.getFocusedCell()},e.prototype.clearFocusedCell=function(){return this.focusedCellController.clearFocusedCell()},e.prototype.setFocusedCell=function(e,t,o){this.focusedCellController.setFocusedCell(e,t,o,!0)},e.prototype.setSuppressRowDrag=function(e){this.gridOptionsWrapper.setProperty(u.GridOptionsWrapper.PROP_SUPPRESS_ROW_DRAG,e)},e.prototype.setHeaderHeight=function(e){this.gridOptionsWrapper.setProperty(u.GridOptionsWrapper.PROP_HEADER_HEIGHT,e),this.doLayout()},e.prototype.setGridAutoHeight=function(e){console.warn(\"api.setGridAutoHeight(boolean) is deprecated, please use api.setDomLayout() instead\"),this.setDomLayout(e?\"autoHeight\":\"normal\")},e.prototype.setDomLayout=function(e){this.gridOptionsWrapper.setProperty(u.GridOptionsWrapper.PROP_DOM_LAYOUT,e)},e.prototype.setEnableCellTextSelection=function(e){this.gridPanel.setCellTextSelection(e)},e.prototype.setGroupHeaderHeight=function(e){this.gridOptionsWrapper.setProperty(u.GridOptionsWrapper.PROP_GROUP_HEADER_HEIGHT,e),this.doLayout()},e.prototype.setFloatingFiltersHeight=function(e){this.gridOptionsWrapper.setProperty(u.GridOptionsWrapper.PROP_FLOATING_FILTERS_HEIGHT,e),this.doLayout()},e.prototype.setPivotGroupHeaderHeight=function(e){this.gridOptionsWrapper.setProperty(u.GridOptionsWrapper.PROP_PIVOT_GROUP_HEADER_HEIGHT,e),this.doLayout()},e.prototype.setPivotHeaderHeight=function(e){this.gridOptionsWrapper.setProperty(u.GridOptionsWrapper.PROP_PIVOT_HEADER_HEIGHT,e),this.doLayout()},e.prototype.isSideBarVisible=function(){return this.gridCore.isSideBarVisible()},e.prototype.setSideBarVisible=function(e){this.gridCore.setSideBarVisible(e)},e.prototype.showToolPanel=function(e){console.warn(\"ag-grid: from v19 api.showToolPanel has been deprecated in favour of api.setSideBarVisible\"),this.setSideBarVisible(e)},e.prototype.openToolPanel=function(e){this.gridCore.openToolPanel(e)},e.prototype.closeToolPanel=function(){this.gridCore.closeToolPanel()},e.prototype.getOpenedToolPanel=function(){return this.gridCore.getOpenedToolPanel()},e.prototype.getSideBar=function(){return this.gridCore.getSideBar()},e.prototype.setSideBar=function(e){return this.gridCore.setSideBar(e)},e.prototype.setSuppressClipboardPaste=function(e){this.gridOptionsWrapper.setProperty(u.GridOptionsWrapper.PROP_SUPPRESS_CLIPBOARD_PASTE,e)},e.prototype.isToolPanelShowing=function(){return this.gridCore.isToolPanelShowing()},e.prototype.doLayout=function(){this.gridPanel.checkViewportAndScrolls()},e.prototype.resetRowHeights=function(){O._.exists(this.clientSideRowModel)&&this.clientSideRowModel.resetRowHeights()},e.prototype.setGroupRemoveSingleChildren=function(e){this.gridOptionsWrapper.setProperty(u.GridOptionsWrapper.PROP_GROUP_REMOVE_SINGLE_CHILDREN,e)},e.prototype.setGroupRemoveLowestSingleChildren=function(e){this.gridOptionsWrapper.setProperty(u.GridOptionsWrapper.PROP_GROUP_REMOVE_LOWEST_SINGLE_CHILDREN,e)},e.prototype.onRowHeightChanged=function(){O._.exists(this.clientSideRowModel)&&this.clientSideRowModel.onRowHeightChanged()},e.prototype.getValue=function(e,t){var o=this.columnController.getPrimaryColumn(e);return O._.missing(o)&&(o=this.columnController.getGridColumn(e)),O._.missing(o)?null:this.valueService.getValue(o,t)},e.prototype.addEventListener=function(e,t){var o=this.gridOptionsWrapper.useAsyncEvents();this.eventService.addEventListener(e,t,o)},e.prototype.addGlobalListener=function(e){var t=this.gridOptionsWrapper.useAsyncEvents();this.eventService.addGlobalListener(e,t)},e.prototype.removeEventListener=function(e,t){var o=this.gridOptionsWrapper.useAsyncEvents();this.eventService.removeEventListener(e,t,o)},e.prototype.removeGlobalListener=function(e){var t=this.gridOptionsWrapper.useAsyncEvents();this.eventService.removeGlobalListener(e,t)},e.prototype.dispatchEvent=function(e){this.eventService.dispatchEvent(e)},e.prototype.destroy=function(){this.gridCore.destroy(),this.context.destroy()},e.prototype.resetQuickFilter=function(){this.rowModel.forEachNode(function(e){return e.quickFilterAggregateText=null})},e.prototype.getRangeSelections=function(){return console.warn(\"ag-Grid: in v20.1.x, api.getRangeSelections() is gone, please use getCellRanges() instead.\\n        We had to change how cell selections works a small bit to allow charting to integrate. The return type of\\n        getCellRanges() is a bit different, please check the ag-Grid documentation.\"),null},e.prototype.getCellRanges=function(){return this.rangeController?this.rangeController.getCellRanges():(console.warn(\"ag-Grid: cell range selection is only available in ag-Grid Enterprise\"),null)},e.prototype.camelCaseToHumanReadable=function(e){return O._.camelCaseToHumanText(e)},e.prototype.addRangeSelection=function(e){console.warn(\"ag-Grid: As of version 21.x, range selection changed slightly to allow charting integration. Please call api.addCellRange() instead of api.addRangeSelection()\")},e.prototype.addCellRange=function(e){this.rangeController||console.warn(\"ag-Grid: cell range selection is only available in ag-Grid Enterprise\"),this.rangeController.addCellRange(e)},e.prototype.clearRangeSelection=function(){this.rangeController||console.warn(\"ag-Grid: cell range selection is only available in ag-Grid Enterprise\"),this.rangeController.removeAllCellRanges()},e.prototype.chartRange=function(e){if(this.context.isModuleRegistered(\"chartsModule\"))return this.chartService.chartCellRange(e);O._.doOnce(function(){console.warn(\"ag-grid: Cannot chart range - the Charts Module has not been included.\")},\"ChartsModuleCheck\")},e.prototype.copySelectedRowsToClipboard=function(e,t){this.clipboardService||console.warn(\"ag-Grid: clipboard is only available in ag-Grid Enterprise\"),this.clipboardService.copySelectedRowsToClipboard(e,t)},e.prototype.copySelectedRangeToClipboard=function(e){this.clipboardService||console.warn(\"ag-Grid: clipboard is only available in ag-Grid Enterprise\"),this.clipboardService.copySelectedRangeToClipboard(e)},e.prototype.copySelectedRangeDown=function(){this.clipboardService||console.warn(\"ag-Grid: clipboard is only available in ag-Grid Enterprise\"),this.clipboardService.copyRangeDown()},e.prototype.showColumnMenuAfterButtonClick=function(e,t){var o=this.columnController.getGridColumn(e);this.menuFactory.showMenuAfterButtonClick(o,t)},e.prototype.showColumnMenuAfterMouseClick=function(e,t){var o=this.columnController.getGridColumn(e);this.menuFactory.showMenuAfterMouseEvent(o,t)},e.prototype.hidePopupMenu=function(){this.contextMenuFactory&&this.contextMenuFactory.hideActiveMenu(),this.menuFactory.hideActiveMenu()},e.prototype.setPopupParent=function(e){this.gridOptionsWrapper.setProperty(u.GridOptionsWrapper.PROP_POPUP_PARENT,e)},e.prototype.tabToNextCell=function(){return this.rowRenderer.tabToNextCell(!1)},e.prototype.tabToPreviousCell=function(){return this.rowRenderer.tabToNextCell(!0)},e.prototype.getCellRendererInstances=function(e){return void 0===e&&(e={}),this.rowRenderer.getCellRendererInstances(e)},e.prototype.getCellEditorInstances=function(e){return void 0===e&&(e={}),this.rowRenderer.getCellEditorInstances(e)},e.prototype.getEditingCells=function(){return this.rowRenderer.getEditingCells()},e.prototype.stopEditing=function(e){void 0===e&&(e=!1),this.rowRenderer.stopEditing(e)},e.prototype.startEditingCell=function(e){var t=this.columnController.getGridColumn(e.colKey);if(t){var o={rowIndex:e.rowIndex,rowPinned:e.rowPinned,column:t};O._.missing(e.rowPinned)&&this.gridPanel.ensureIndexVisible(e.rowIndex),this.rowRenderer.startEditingCell(o,e.keyPress,e.charPress)}else console.warn(\"ag-Grid: no column found for \"+e.colKey)},e.prototype.addAggFunc=function(e,t){this.aggFuncService&&this.aggFuncService.addAggFunc(e,t)},e.prototype.addAggFuncs=function(e){this.aggFuncService&&this.aggFuncService.addAggFuncs(e)},e.prototype.clearAggFuncs=function(){this.aggFuncService&&this.aggFuncService.clear()},e.prototype.updateRowData=function(e){var t=null;return this.clientSideRowModel?t=this.clientSideRowModel.updateRowData(e):this.infinitePageRowModel?this.infinitePageRowModel.updateRowData(e):console.error(\"ag-Grid: updateRowData() only works with ClientSideRowModel and InfiniteRowModel.\"),this.rowRenderer.refreshFullWidthRows(),this.gridOptionsWrapper.isSuppressChangeDetection()||this.rowRenderer.refreshCells(),t},e.prototype.batchUpdateRowData=function(e,t){this.clientSideRowModel?this.clientSideRowModel.batchUpdateRowData(e,t):console.error(\"ag-Grid: api.batchUpdateRowData() only works with ClientSideRowModel.\")},e.prototype.insertItemsAtIndex=function(e,t,o){void 0===o&&(o=!1),console.warn(\"ag-Grid: insertItemsAtIndex() is deprecated, use updateRowData(transaction) instead.\"),this.updateRowData({add:t,addIndex:e,update:null,remove:null})},e.prototype.removeItems=function(e,t){void 0===t&&(t=!1),console.warn(\"ag-Grid: removeItems() is deprecated, use updateRowData(transaction) instead.\");var o=e.map(function(e){return e.data});this.updateRowData({add:null,addIndex:null,update:null,remove:o})},e.prototype.addItems=function(e,t){void 0===t&&(t=!1),console.warn(\"ag-Grid: addItems() is deprecated, use updateRowData(transaction) instead.\"),this.updateRowData({add:e,addIndex:null,update:null,remove:null})},e.prototype.refreshVirtualPageCache=function(){console.warn(\"ag-Grid: refreshVirtualPageCache() is now called refreshInfiniteCache(), please call refreshInfiniteCache() instead\"),this.refreshInfiniteCache()},e.prototype.refreshInfinitePageCache=function(){console.warn(\"ag-Grid: refreshInfinitePageCache() is now called refreshInfiniteCache(), please call refreshInfiniteCache() instead\"),this.refreshInfiniteCache()},e.prototype.refreshInfiniteCache=function(){this.infinitePageRowModel?this.infinitePageRowModel.refreshCache():console.warn(\"ag-Grid: api.refreshInfiniteCache is only available when rowModelType='infinite'.\")},e.prototype.purgeVirtualPageCache=function(){console.warn(\"ag-Grid: purgeVirtualPageCache() is now called purgeInfiniteCache(), please call purgeInfiniteCache() instead\"),this.purgeInfinitePageCache()},e.prototype.purgeInfinitePageCache=function(){console.warn(\"ag-Grid: purgeInfinitePageCache() is now called purgeInfiniteCache(), please call purgeInfiniteCache() instead\"),this.purgeInfiniteCache()},e.prototype.purgeInfiniteCache=function(){this.infinitePageRowModel?this.infinitePageRowModel.purgeCache():console.warn(\"ag-Grid: api.purgeInfiniteCache is only available when rowModelType='infinite'.\")},e.prototype.purgeEnterpriseCache=function(e){console.warn(\"ag-grid: since version 18.x, api.purgeEnterpriseCache() should be replaced with api.purgeServerSideCache()\"),this.purgeServerSideCache(e)},e.prototype.purgeServerSideCache=function(e){this.serverSideRowModel?this.serverSideRowModel.purgeCache(e):console.warn(\"ag-Grid: api.purgeServerSideCache is only available when rowModelType='enterprise'.\")},e.prototype.getVirtualRowCount=function(){return console.warn(\"ag-Grid: getVirtualRowCount() is now called getInfiniteRowCount(), please call getInfiniteRowCount() instead\"),this.getInfiniteRowCount()},e.prototype.getInfiniteRowCount=function(){if(this.infinitePageRowModel)return this.infinitePageRowModel.getVirtualRowCount();console.warn(\"ag-Grid: api.getVirtualRowCount is only available when rowModelType='virtual'.\")},e.prototype.isMaxRowFound=function(){if(this.infinitePageRowModel)return this.infinitePageRowModel.isMaxRowFound();console.warn(\"ag-Grid: api.isMaxRowFound is only available when rowModelType='virtual'.\")},e.prototype.setVirtualRowCount=function(e,t){console.warn(\"ag-Grid: setVirtualRowCount() is now called setInfiniteRowCount(), please call setInfiniteRowCount() instead\"),this.setInfiniteRowCount(e,t)},e.prototype.setInfiniteRowCount=function(e,t){this.infinitePageRowModel?this.infinitePageRowModel.setVirtualRowCount(e,t):console.warn(\"ag-Grid: api.setVirtualRowCount is only available when rowModelType='virtual'.\")},e.prototype.getVirtualPageState=function(){return console.warn(\"ag-Grid: getVirtualPageState() is now called getCacheBlockState(), please call getCacheBlockState() instead\"),this.getCacheBlockState()},e.prototype.getInfinitePageState=function(){return console.warn(\"ag-Grid: getInfinitePageState() is now called getCacheBlockState(), please call getCacheBlockState() instead\"),this.getCacheBlockState()},e.prototype.getCacheBlockState=function(){return this.infinitePageRowModel?this.infinitePageRowModel.getBlockState():this.serverSideRowModel?this.serverSideRowModel.getBlockState():void console.warn(\"ag-Grid: api.getCacheBlockState() is only available when rowModelType='infinite' or rowModelType='serverSide'.\")},e.prototype.checkGridSize=function(){this.gridPanel.setHeaderAndFloatingHeights()},e.prototype.getFirstRenderedRow=function(){return console.warn(\"in ag-Grid v12, getFirstRenderedRow() was renamed to getFirstDisplayedRow()\"),this.getFirstDisplayedRow()},e.prototype.getFirstDisplayedRow=function(){return this.rowRenderer.getFirstVirtualRenderedRow()},e.prototype.getLastRenderedRow=function(){return console.warn(\"in ag-Grid v12, getLastRenderedRow() was renamed to getLastDisplayedRow()\"),this.getLastDisplayedRow()},e.prototype.getLastDisplayedRow=function(){return this.rowRenderer.getLastVirtualRenderedRow()},e.prototype.getDisplayedRowAtIndex=function(e){return this.rowModel.getRow(e)},e.prototype.getDisplayedRowCount=function(){return this.rowModel.getRowCount()},e.prototype.paginationIsLastPageFound=function(){return this.paginationProxy.isLastPageFound()},e.prototype.paginationGetPageSize=function(){return this.paginationProxy.getPageSize()},e.prototype.paginationSetPageSize=function(e){this.gridOptionsWrapper.setProperty(\"paginationPageSize\",e)},e.prototype.paginationGetCurrentPage=function(){return this.paginationProxy.getCurrentPage()},e.prototype.paginationGetTotalPages=function(){return this.paginationProxy.getTotalPages()},e.prototype.paginationGetRowCount=function(){return this.paginationProxy.getMasterRowCount()},e.prototype.paginationGoToNextPage=function(){this.paginationProxy.goToNextPage()},e.prototype.paginationGoToPreviousPage=function(){this.paginationProxy.goToPreviousPage()},e.prototype.paginationGoToFirstPage=function(){this.paginationProxy.goToFirstPage()},e.prototype.paginationGoToLastPage=function(){this.paginationProxy.goToLastPage()},e.prototype.paginationGoToPage=function(e){this.paginationProxy.goToPage(e)},i([f.Autowired(\"immutableService\"),n(\"design:type\",C.ImmutableService)],e.prototype,\"immutableService\",void 0),i([f.Autowired(\"csvCreator\"),n(\"design:type\",r.CsvCreator)],e.prototype,\"csvCreator\",void 0),i([f.Optional(\"excelCreator\"),n(\"design:type\",Object)],e.prototype,\"excelCreator\",void 0),i([f.Autowired(\"rowRenderer\"),n(\"design:type\",s.RowRenderer)],e.prototype,\"rowRenderer\",void 0),i([f.Autowired(\"filterManager\"),n(\"design:type\",a.FilterManager)],e.prototype,\"filterManager\",void 0),i([f.Autowired(\"columnController\"),n(\"design:type\",l.ColumnController)],e.prototype,\"columnController\",void 0),i([f.Autowired(\"selectionController\"),n(\"design:type\",p.SelectionController)],e.prototype,\"selectionController\",void 0),i([f.Autowired(\"gridOptionsWrapper\"),n(\"design:type\",u.GridOptionsWrapper)],e.prototype,\"gridOptionsWrapper\",void 0),i([f.Autowired(\"valueService\"),n(\"design:type\",d.ValueService)],e.prototype,\"valueService\",void 0),i([f.Autowired(\"alignedGridsService\"),n(\"design:type\",w.AlignedGridsService)],e.prototype,\"alignedGridsService\",void 0),i([f.Autowired(\"eventService\"),n(\"design:type\",c.EventService)],e.prototype,\"eventService\",void 0),i([f.Autowired(\"pinnedRowModel\"),n(\"design:type\",R.PinnedRowModel)],e.prototype,\"pinnedRowModel\",void 0),i([f.Autowired(\"context\"),n(\"design:type\",f.Context)],e.prototype,\"context\",void 0),i([f.Autowired(\"rowModel\"),n(\"design:type\",Object)],e.prototype,\"rowModel\",void 0),i([f.Autowired(\"sortController\"),n(\"design:type\",g.SortController)],e.prototype,\"sortController\",void 0),i([f.Autowired(\"paginationProxy\"),n(\"design:type\",m.PaginationProxy)],e.prototype,\"paginationProxy\",void 0),i([f.Autowired(\"focusedCellController\"),n(\"design:type\",y.FocusedCellController)],e.prototype,\"focusedCellController\",void 0),i([f.Optional(\"rangeController\"),n(\"design:type\",Object)],e.prototype,\"rangeController\",void 0),i([f.Optional(\"clipboardService\"),n(\"design:type\",Object)],e.prototype,\"clipboardService\",void 0),i([f.Optional(\"aggFuncService\"),n(\"design:type\",Object)],e.prototype,\"aggFuncService\",void 0),i([f.Autowired(\"menuFactory\"),n(\"design:type\",Object)],e.prototype,\"menuFactory\",void 0),i([f.Optional(\"contextMenuFactory\"),n(\"design:type\",Object)],e.prototype,\"contextMenuFactory\",void 0),i([f.Autowired(\"cellRendererFactory\"),n(\"design:type\",v.CellRendererFactory)],e.prototype,\"cellRendererFactory\",void 0),i([f.Autowired(\"valueCache\"),n(\"design:type\",E.ValueCache)],e.prototype,\"valueCache\",void 0),i([f.Optional(\"sideBarComp\"),n(\"design:type\",Object)],e.prototype,\"sideBarComp\",void 0),i([f.Autowired(\"animationFrameService\"),n(\"design:type\",_.AnimationFrameService)],e.prototype,\"animationFrameService\",void 0),i([f.Optional(\"statusBarService\"),n(\"design:type\",Object)],e.prototype,\"statusBarService\",void 0),i([f.Optional(\"chartService\"),n(\"design:type\",Object)],e.prototype,\"chartService\",void 0),i([f.PostConstruct,n(\"design:type\",Function),n(\"design:paramtypes\",[]),n(\"design:returntype\",void 0)],e.prototype,\"init\",null),e=i([f.Bean(\"gridApi\")],e)}();t.GridApi=S},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(4),s=o(0),a=function(){function e(){}return e.prototype.sizeColumnsToFit=function(e){this.columnController.sizeColumnsToFit(e,\"api\")},e.prototype.setColumnGroupOpened=function(e,t){this.columnController.setColumnGroupOpened(e,t,\"api\")},e.prototype.getColumnGroup=function(e,t){return this.columnController.getColumnGroup(e,t)},e.prototype.getOriginalColumnGroup=function(e){return this.columnController.getOriginalColumnGroup(e)},e.prototype.getDisplayNameForColumn=function(e,t){return this.columnController.getDisplayNameForColumn(e,t)},e.prototype.getDisplayNameForColumnGroup=function(e,t){return this.columnController.getDisplayNameForColumnGroup(e,t)},e.prototype.getColumn=function(e){return this.columnController.getPrimaryColumn(e)},e.prototype.setColumnState=function(e){return this.columnController.setColumnState(e,!1,\"api\")},e.prototype.getColumnState=function(){return this.columnController.getColumnState()},e.prototype.resetColumnState=function(){this.columnController.resetColumnState(!1,\"api\")},e.prototype.getColumnGroupState=function(){return this.columnController.getColumnGroupState()},e.prototype.setColumnGroupState=function(e){this.columnController.setColumnGroupState(e,\"api\")},e.prototype.resetColumnGroupState=function(){this.columnController.resetColumnGroupState(\"api\")},e.prototype.isPinning=function(){return this.columnController.isPinningLeft()||this.columnController.isPinningRight()},e.prototype.isPinningLeft=function(){return this.columnController.isPinningLeft()},e.prototype.isPinningRight=function(){return this.columnController.isPinningRight()},e.prototype.getDisplayedColAfter=function(e){return this.columnController.getDisplayedColAfter(e)},e.prototype.getDisplayedColBefore=function(e){return this.columnController.getDisplayedColBefore(e)},e.prototype.setColumnVisible=function(e,t){this.columnController.setColumnVisible(e,t,\"api\")},e.prototype.setColumnsVisible=function(e,t){this.columnController.setColumnsVisible(e,t,\"api\")},e.prototype.setColumnPinned=function(e,t){this.columnController.setColumnPinned(e,t,\"api\")},e.prototype.setColumnsPinned=function(e,t){this.columnController.setColumnsPinned(e,t,\"api\")},e.prototype.getAllColumns=function(){return this.columnController.getAllPrimaryColumns()},e.prototype.getAllGridColumns=function(){return this.columnController.getAllGridColumns()},e.prototype.getDisplayedLeftColumns=function(){return this.columnController.getDisplayedLeftColumns()},e.prototype.getDisplayedCenterColumns=function(){return this.columnController.getDisplayedCenterColumns()},e.prototype.getDisplayedRightColumns=function(){return this.columnController.getDisplayedRightColumns()},e.prototype.getAllDisplayedColumns=function(){return this.columnController.getAllDisplayedColumns()},e.prototype.getAllDisplayedVirtualColumns=function(){return this.columnController.getAllDisplayedVirtualColumns()},e.prototype.moveColumn=function(e,t){\"number\"==typeof e?(console.warn(\"ag-Grid: you are using moveColumn(fromIndex, toIndex) - moveColumn takes a column key and a destination index, not two indexes, to move with indexes use moveColumnByIndex(from,to) instead\"),this.columnController.moveColumnByIndex(e,t,\"api\")):this.columnController.moveColumn(e,t,\"api\")},e.prototype.moveColumnByIndex=function(e,t){this.columnController.moveColumnByIndex(e,t,\"api\")},e.prototype.moveColumns=function(e,t){this.columnController.moveColumns(e,t,\"api\")},e.prototype.moveRowGroupColumn=function(e,t){this.columnController.moveRowGroupColumn(e,t)},e.prototype.setColumnAggFunc=function(e,t){this.columnController.setColumnAggFunc(e,t)},e.prototype.setColumnWidth=function(e,t,o){void 0===o&&(o=!0),this.columnController.setColumnWidth(e,t,!1,o)},e.prototype.setPivotMode=function(e){this.columnController.setPivotMode(e)},e.prototype.isPivotMode=function(){return this.columnController.isPivotMode()},e.prototype.getSecondaryPivotColumn=function(e,t){return this.columnController.getSecondaryPivotColumn(e,t)},e.prototype.setValueColumns=function(e){this.columnController.setValueColumns(e,\"api\")},e.prototype.getValueColumns=function(){return this.columnController.getValueColumns()},e.prototype.removeValueColumn=function(e){this.columnController.removeValueColumn(e,\"api\")},e.prototype.removeValueColumns=function(e){this.columnController.removeValueColumns(e,\"api\")},e.prototype.addValueColumn=function(e){this.columnController.addValueColumn(e,\"api\")},e.prototype.addValueColumns=function(e){this.columnController.addValueColumns(e,\"api\")},e.prototype.setRowGroupColumns=function(e){this.columnController.setRowGroupColumns(e,\"api\")},e.prototype.removeRowGroupColumn=function(e){this.columnController.removeRowGroupColumn(e,\"api\")},e.prototype.removeRowGroupColumns=function(e){this.columnController.removeRowGroupColumns(e,\"api\")},e.prototype.addRowGroupColumn=function(e){this.columnController.addRowGroupColumn(e,\"api\")},e.prototype.addRowGroupColumns=function(e){this.columnController.addRowGroupColumns(e,\"api\")},e.prototype.getRowGroupColumns=function(){return this.columnController.getRowGroupColumns()},e.prototype.setPivotColumns=function(e){this.columnController.setPivotColumns(e,\"api\")},e.prototype.removePivotColumn=function(e){this.columnController.removePivotColumn(e,\"api\")},e.prototype.removePivotColumns=function(e){this.columnController.removePivotColumns(e,\"api\")},e.prototype.addPivotColumn=function(e){this.columnController.addPivotColumn(e,\"api\")},e.prototype.addPivotColumns=function(e){this.columnController.addPivotColumns(e,\"api\")},e.prototype.getPivotColumns=function(){return this.columnController.getPivotColumns()},e.prototype.getLeftDisplayedColumnGroups=function(){return this.columnController.getLeftDisplayedColumnGroups()},e.prototype.getCenterDisplayedColumnGroups=function(){return this.columnController.getCenterDisplayedColumnGroups()},e.prototype.getRightDisplayedColumnGroups=function(){return this.columnController.getRightDisplayedColumnGroups()},e.prototype.getAllDisplayedColumnGroups=function(){return this.columnController.getAllDisplayedColumnGroups()},e.prototype.autoSizeColumn=function(e){return this.columnController.autoSizeColumn(e,\"api\")},e.prototype.autoSizeColumns=function(e){return this.columnController.autoSizeColumns(e,\"api\")},e.prototype.autoSizeAllColumns=function(){this.columnController.autoSizeAllColumns(\"api\")},e.prototype.setSecondaryColumns=function(e){this.columnController.setSecondaryColumns(e,\"api\")},e.prototype.getSecondaryColumns=function(){return this.columnController.getSecondaryColumns()},e.prototype.getPrimaryColumns=function(){return this.columnController.getAllPrimaryColumns()},e.prototype.columnGroupOpened=function(e,t){console.error(\"ag-Grid: columnGroupOpened no longer exists, use setColumnGroupOpened\"),this.setColumnGroupOpened(e,t)},e.prototype.hideColumns=function(e,t){console.error(\"ag-Grid: hideColumns is deprecated, use setColumnsVisible\"),this.columnController.setColumnsVisible(e,!t,\"api\")},e.prototype.hideColumn=function(e,t){console.error(\"ag-Grid: hideColumn is deprecated, use setColumnVisible\"),this.columnController.setColumnVisible(e,!t,\"api\")},e.prototype.setState=function(e){return console.error(\"ag-Grid: setState is deprecated, use setColumnState\"),this.setColumnState(e)},e.prototype.getState=function(){return console.error(\"ag-Grid: getState is deprecated, use getColumnState\"),this.getColumnState()},e.prototype.resetState=function(){console.error(\"ag-Grid: resetState is deprecated, use resetColumnState\"),this.resetColumnState()},e.prototype.getAggregationColumns=function(){return console.error(\"ag-Grid: getAggregationColumns is deprecated, use getValueColumns\"),this.columnController.getValueColumns()},e.prototype.removeAggregationColumn=function(e){console.error(\"ag-Grid: removeAggregationColumn is deprecated, use removeValueColumn\"),this.columnController.removeValueColumn(e,\"api\")},e.prototype.removeAggregationColumns=function(e){console.error(\"ag-Grid: removeAggregationColumns is deprecated, use removeValueColumns\"),this.columnController.removeValueColumns(e,\"api\")},e.prototype.addAggregationColumn=function(e){console.error(\"ag-Grid: addAggregationColumn is deprecated, use addValueColumn\"),this.columnController.addValueColumn(e,\"api\")},e.prototype.addAggregationColumns=function(e){console.error(\"ag-Grid: addAggregationColumns is deprecated, use addValueColumns\"),this.columnController.addValueColumns(e,\"api\")},e.prototype.setColumnAggFunction=function(e,t){console.error(\"ag-Grid: setColumnAggFunction is deprecated, use setColumnAggFunc\"),this.columnController.setColumnAggFunc(e,t,\"api\")},e.prototype.getDisplayNameForCol=function(e){return console.error(\"ag-Grid: getDisplayNameForCol is deprecated, use getDisplayNameForColumn\"),this.getDisplayNameForColumn(e,null)},i([s.Autowired(\"columnController\"),n(\"design:type\",r.ColumnController)],e.prototype,\"columnController\",void 0),e=i([s.Bean(\"columnApi\")],e)}();t.ColumnApi=a},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */function i(e,t,o,i){null!==e?\"number\"!=typeof i?s(t,\"querySelectors\",{attributeName:o,querySelector:e}):console.error(\"ag-Grid: QuerySelector should be on an attribute\"):console.error(\"ag-Grid: QuerySelector selector should not be null\")}function n(e,t,o){null!==e?s(t,\"listenerMethods\",{methodName:o,eventName:e}):console.error(\"ag-Grid: EventListener eventName should not be null\")}function r(e,t,o){null!==e?s(t,\"methods\",{methodName:o,alias:e}):console.error(\"ag-Grid: EventListener eventName should not be null\")}function s(e,t,o){var i=function(e,t){e.__agComponentMetaData||(e.__agComponentMetaData={});e.__agComponentMetaData[t]||(e.__agComponentMetaData[t]={});return e.__agComponentMetaData[t]}(e,e.constructor.name);i[t]||(i[t]=[]),i[t].push(o)}Object.defineProperty(t,\"__esModule\",{value:!0}),t.QuerySelector=function(e){return i.bind(this,e)},t.RefSelector=function(e){return i.bind(this,\"[ref=\"+e+\"]\")},t.Listener=function(e){return n.bind(this,e)},t.Method=function(e){return r.bind(this,e)}},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(3),s=o(1),a=o(0),l=o(2),p=o(33),u=o(9),d=o(8),c=function(){function e(e,t,o,i){this.moving=!1,this.menuVisible=!1,this.filterActive=!1,this.eventService=new r.EventService,this.rowGroupActive=!1,this.pivotActive=!1,this.aggregationActive=!1,this.colDef=e,this.userProvidedColDef=t,this.visible=!e.hide,this.sort=e.sort,this.sortedAt=e.sortedAt,this.colId=o,this.primary=i}return e.prototype.setColDef=function(e,t){this.colDef=e,this.userProvidedColDef=t},e.prototype.getUserProvidedColDef=function(){return this.userProvidedColDef},e.prototype.setParent=function(e){this.parent=e},e.prototype.getParent=function(){return this.parent},e.prototype.setOriginalParent=function(e){this.originalParent=e},e.prototype.getOriginalParent=function(){return this.originalParent},e.prototype.initialise=function(){this.setPinned(this.colDef.pinned);var e=this.gridOptionsWrapper.getMinColWidth(),t=this.gridOptionsWrapper.getMaxColWidth();this.colDef.minWidth?this.minWidth=this.colDef.minWidth:this.minWidth=e,this.colDef.maxWidth?this.maxWidth=this.colDef.maxWidth:this.maxWidth=t,this.actualWidth=this.columnUtils.calculateColInitialWidth(this.colDef);var o=this.gridOptionsWrapper.isSuppressFieldDotNotation();this.fieldContainsDots=s._.exists(this.colDef.field)&&this.colDef.field.indexOf(\".\")>=0&&!o,this.tooltipFieldContainsDots=s._.exists(this.colDef.tooltipField)&&this.colDef.tooltipField.indexOf(\".\")>=0&&!o,this.validate()},e.prototype.isEmptyGroup=function(){return!1},e.prototype.isRowGroupDisplayed=function(e){if(s._.missing(this.colDef)||s._.missing(this.colDef.showRowGroup))return!1;var t=!0===this.colDef.showRowGroup,o=this.colDef.showRowGroup===e;return t||o},e.prototype.getUniqueId=function(){return this.getId()},e.prototype.isPrimary=function(){return this.primary},e.prototype.isFilterAllowed=function(){var e=!!this.colDef.filter||!!this.colDef.filterFramework;return this.primary&&e},e.prototype.isFieldContainsDots=function(){return this.fieldContainsDots},e.prototype.isTooltipFieldContainsDots=function(){return this.tooltipFieldContainsDots},e.prototype.validate=function(){var e=this.colDef;if(!this.gridOptionsWrapper.isEnterprise()){[\"enableRowGroup\",\"rowGroup\",\"rowGroupIndex\",\"enablePivot\",\"enableValue\",\"pivot\",\"pivotIndex\",\"aggFunc\",\"chartDataType\"].forEach(function(t){s._.exists(e[t])&&console.warn(\"ag-Grid: \"+t+\" is only valid in ag-Grid-Enterprise, your column definition should not have \"+t)})}if(this.gridOptionsWrapper.isTreeData()){[\"rowGroup\",\"rowGroupIndex\",\"pivot\",\"pivotIndex\"].forEach(function(t){s._.exists(e[t])&&console.warn(\"ag-Grid: \"+t+\" is not possible when doing tree data, your column definition should not have \"+t)})}s._.exists(this.colDef.width)&&\"number\"!=typeof this.colDef.width&&console.warn(\"ag-Grid: colDef.width should be a number, not \"+typeof this.colDef.width),s._.get(this,\"colDef.cellRendererParams.restrictToOneGroup\",null)&&console.warn(\"ag-Grid: Since ag-grid 11.0.0 cellRendererParams.restrictToOneGroup is deprecated. You should use showRowGroup\"),s._.get(this,\"colDef.cellRendererParams.keyMap\",null)&&console.warn(\"ag-Grid: Since ag-grid 11.0.0 cellRendererParams.keyMap is deprecated. You should use colDef.keyCreator\"),s._.get(this,\"colDef.cellRendererParams.keyMap\",null)&&console.warn(\"ag-Grid: Since ag-grid 11.0.0 cellRendererParams.keyMap is deprecated. You should use colDef.keyCreator\"),e.floatingCellRenderer&&(console.warn(\"ag-Grid: since v11, floatingCellRenderer is now pinnedRowCellRenderer\"),this.colDef.pinnedRowCellRenderer=e.floatingCellRenderer),e.floatingRendererFramework&&(console.warn(\"ag-Grid: since v11, floatingRendererFramework is now pinnedRowCellRendererFramework\"),this.colDef.pinnedRowCellRendererFramework=e.floatingRendererFramework),e.floatingRendererParams&&(console.warn(\"ag-Grid: since v11, floatingRendererParams is now pinnedRowCellRendererParams\"),this.colDef.pinnedRowCellRendererParams=e.floatingRendererParams),e.floatingValueFormatter&&(console.warn(\"ag-Grid: since v11, floatingValueFormatter is now pinnedRowValueFormatter\"),this.colDef.pinnedRowValueFormatter=e.floatingValueFormatter),e.cellFormatter&&(console.warn(\"ag-Grid: since v12, cellFormatter is now valueFormatter\"),s._.missing(this.colDef.valueFormatter)&&(this.colDef.valueFormatter=e.cellFormatter)),e.headerCellTemplate&&console.warn(\"ag-Grid: since v15, headerCellTemplate is gone, use header component instead.\"),e.headerCellRenderer&&console.warn(\"ag-Grid: since v15, headerCellRenderer is gone, use header component instead.\"),e.volatile&&console.warn(\"ag-Grid: since v16, colDef.volatile is gone, please check refresh docs on how to refresh specific cells.\"),e.suppressSorting&&(console.warn(\"ag-Grid: since v20, colDef.suppressSorting is gone, instead use colDef.sortable=false.\",this.colDef),this.colDef.sortable=!1),e.suppressFilter&&(console.warn(\"ag-Grid: since v20, colDef.suppressFilter is gone, instead use colDef.filter=false.\",this.colDef),this.colDef.filter=!1),e.suppressResize&&(console.warn(\"ag-Grid: since v20, colDef.suppressResize is gone, instead use colDef.resizable=false.\",this.colDef),this.colDef.resizable=!1),e.tooltip&&(console.warn(\"ag-Grid: since v20.1, colDef.tooltip is gone, instead use colDef.tooltipValueGetter.\",this.colDef),this.colDef.tooltipValueGetter=e.tooltip)},e.prototype.addEventListener=function(e,t){this.eventService.addEventListener(e,t)},e.prototype.removeEventListener=function(e,t){this.eventService.removeEventListener(e,t)},e.prototype.createIsColumnFuncParams=function(e){return{node:e,data:e.data,column:this,colDef:this.colDef,context:this.gridOptionsWrapper.getContext(),api:this.gridOptionsWrapper.getApi(),columnApi:this.gridOptionsWrapper.getColumnApi()}},e.prototype.isSuppressNavigable=function(e){if(\"boolean\"==typeof this.colDef.suppressNavigable)return this.colDef.suppressNavigable;if(\"function\"==typeof this.colDef.suppressNavigable){var t=this.createIsColumnFuncParams(e);return(0,this.colDef.suppressNavigable)(t)}return!1},e.prototype.isCellEditable=function(e){return!(e.group&&!this.gridOptionsWrapper.isEnableGroupEdit())&&this.isColumnFunc(e,this.colDef.editable)},e.prototype.isRowDrag=function(e){return this.isColumnFunc(e,this.colDef.rowDrag)},e.prototype.isDndSource=function(e){return this.isColumnFunc(e,this.colDef.dndSource)},e.prototype.isCellCheckboxSelection=function(e){return this.isColumnFunc(e,this.colDef.checkboxSelection)},e.prototype.isSuppressPaste=function(e){return this.isColumnFunc(e,this.colDef?this.colDef.suppressPaste:null)},e.prototype.isResizable=function(){return!0===this.colDef.resizable},e.prototype.isColumnFunc=function(e,t){return\"boolean\"==typeof t?t:\"function\"==typeof t&&t(this.createIsColumnFuncParams(e))},e.prototype.setMoving=function(t,o){void 0===o&&(o=\"api\"),this.moving=t,this.eventService.dispatchEvent(this.createColumnEvent(e.EVENT_MOVING_CHANGED,o))},e.prototype.createColumnEvent=function(e,t){return{api:this.gridApi,columnApi:this.columnApi,type:e,column:this,columns:[this],source:t}},e.prototype.isMoving=function(){return this.moving},e.prototype.getSort=function(){return this.sort},e.prototype.setSort=function(t,o){void 0===o&&(o=\"api\"),this.sort!==t&&(this.sort=t,this.eventService.dispatchEvent(this.createColumnEvent(e.EVENT_SORT_CHANGED,o)))},e.prototype.setMenuVisible=function(t,o){void 0===o&&(o=\"api\"),this.menuVisible!==t&&(this.menuVisible=t,this.eventService.dispatchEvent(this.createColumnEvent(e.EVENT_MENU_VISIBLE_CHANGED,o)))},e.prototype.isMenuVisible=function(){return this.menuVisible},e.prototype.isSortAscending=function(){return this.sort===e.SORT_ASC},e.prototype.isSortDescending=function(){return this.sort===e.SORT_DESC},e.prototype.isSortNone=function(){return s._.missing(this.sort)},e.prototype.isSorting=function(){return s._.exists(this.sort)},e.prototype.getSortedAt=function(){return this.sortedAt},e.prototype.setSortedAt=function(e){this.sortedAt=e},e.prototype.setAggFunc=function(e){this.aggFunc=e},e.prototype.getAggFunc=function(){return this.aggFunc},e.prototype.getLeft=function(){return this.left},e.prototype.getOldLeft=function(){return this.oldLeft},e.prototype.getRight=function(){return this.left+this.actualWidth},e.prototype.setLeft=function(t,o){void 0===o&&(o=\"api\"),this.oldLeft=this.left,this.left!==t&&(this.left=t,this.eventService.dispatchEvent(this.createColumnEvent(e.EVENT_LEFT_CHANGED,o)))},e.prototype.isFilterActive=function(){return this.filterActive},e.prototype.setFilterActive=function(t,o,i){void 0===o&&(o=\"api\"),this.filterActive!==t&&(this.filterActive=t,this.eventService.dispatchEvent(this.createColumnEvent(e.EVENT_FILTER_ACTIVE_CHANGED,o)));var n=this.createColumnEvent(e.EVENT_FILTER_CHANGED,o);i&&s._.mergeDeep(n,i),this.eventService.dispatchEvent(n)},e.prototype.setPinned=function(t){!0===t||t===e.PINNED_LEFT?this.pinned=e.PINNED_LEFT:t===e.PINNED_RIGHT?this.pinned=e.PINNED_RIGHT:this.pinned=null},e.prototype.setFirstRightPinned=function(t,o){void 0===o&&(o=\"api\"),this.firstRightPinned!==t&&(this.firstRightPinned=t,this.eventService.dispatchEvent(this.createColumnEvent(e.EVENT_FIRST_RIGHT_PINNED_CHANGED,o)))},e.prototype.setLastLeftPinned=function(t,o){void 0===o&&(o=\"api\"),this.lastLeftPinned!==t&&(this.lastLeftPinned=t,this.eventService.dispatchEvent(this.createColumnEvent(e.EVENT_LAST_LEFT_PINNED_CHANGED,o)))},e.prototype.isFirstRightPinned=function(){return this.firstRightPinned},e.prototype.isLastLeftPinned=function(){return this.lastLeftPinned},e.prototype.isPinned=function(){return this.pinned===e.PINNED_LEFT||this.pinned===e.PINNED_RIGHT},e.prototype.isPinnedLeft=function(){return this.pinned===e.PINNED_LEFT},e.prototype.isPinnedRight=function(){return this.pinned===e.PINNED_RIGHT},e.prototype.getPinned=function(){return this.pinned},e.prototype.setVisible=function(t,o){void 0===o&&(o=\"api\");var i=!0===t;this.visible!==i&&(this.visible=i,this.eventService.dispatchEvent(this.createColumnEvent(e.EVENT_VISIBLE_CHANGED,o)))},e.prototype.isVisible=function(){return this.visible},e.prototype.getColDef=function(){return this.colDef},e.prototype.getColumnGroupShow=function(){return this.colDef.columnGroupShow},e.prototype.getColId=function(){return this.colId},e.prototype.getId=function(){return this.getColId()},e.prototype.getDefinition=function(){return this.colDef},e.prototype.getActualWidth=function(){return this.actualWidth},e.prototype.createBaseColDefParams=function(e){return{node:e,data:e.data,colDef:this.colDef,column:this,api:this.gridOptionsWrapper.getApi(),columnApi:this.gridOptionsWrapper.getColumnApi(),context:this.gridOptionsWrapper.getContext()}},e.prototype.getColSpan=function(e){if(s._.missing(this.colDef.colSpan))return 1;var t=this.createBaseColDefParams(e),o=this.colDef.colSpan(t);return Math.max(o,1)},e.prototype.getRowSpan=function(e){if(s._.missing(this.colDef.rowSpan))return 1;var t=this.createBaseColDefParams(e),o=this.colDef.rowSpan(t);return Math.max(o,1)},e.prototype.setActualWidth=function(t,o){void 0===o&&(o=\"api\"),this.actualWidth!==t&&(this.actualWidth=t,this.eventService.dispatchEvent(this.createColumnEvent(e.EVENT_WIDTH_CHANGED,o)))},e.prototype.isGreaterThanMax=function(e){return!!this.maxWidth&&e>this.maxWidth},e.prototype.getMinWidth=function(){return this.minWidth},e.prototype.getMaxWidth=function(){return this.maxWidth},e.prototype.setMinimum=function(e){void 0===e&&(e=\"api\"),this.setActualWidth(this.minWidth,e)},e.prototype.setRowGroupActive=function(t,o){void 0===o&&(o=\"api\"),this.rowGroupActive!==t&&(this.rowGroupActive=t,this.eventService.dispatchEvent(this.createColumnEvent(e.EVENT_ROW_GROUP_CHANGED,o)))},e.prototype.isRowGroupActive=function(){return this.rowGroupActive},e.prototype.setPivotActive=function(t,o){void 0===o&&(o=\"api\"),this.pivotActive!==t&&(this.pivotActive=t,this.eventService.dispatchEvent(this.createColumnEvent(e.EVENT_PIVOT_CHANGED,o)))},e.prototype.isPivotActive=function(){return this.pivotActive},e.prototype.isAnyFunctionActive=function(){return this.isPivotActive()||this.isRowGroupActive()||this.isValueActive()},e.prototype.isAnyFunctionAllowed=function(){return this.isAllowPivot()||this.isAllowRowGroup()||this.isAllowValue()},e.prototype.setValueActive=function(t,o){void 0===o&&(o=\"api\"),this.aggregationActive!==t&&(this.aggregationActive=t,this.eventService.dispatchEvent(this.createColumnEvent(e.EVENT_VALUE_CHANGED,o)))},e.prototype.isValueActive=function(){return this.aggregationActive},e.prototype.isAllowPivot=function(){return!0===this.colDef.enablePivot},e.prototype.isAllowValue=function(){return!0===this.colDef.enableValue},e.prototype.isAllowRowGroup=function(){return!0===this.colDef.enableRowGroup},e.prototype.getMenuTabs=function(e){var t=this.getColDef().menuTabs;return null==t&&(t=e),t},e.prototype.isLockPosition=function(){return console.warn(\"ag-Grid: since v21, col.isLockPosition() should not be used, please use col.getColDef().lockPosition instead.\"),!!this.colDef&&!!this.colDef.lockPosition},e.prototype.isLockVisible=function(){return console.warn(\"ag-Grid: since v21, col.isLockVisible() should not be used, please use col.getColDef().lockVisible instead.\"),!!this.colDef&&!!this.colDef.lockVisible},e.prototype.isLockPinned=function(){return console.warn(\"ag-Grid: since v21, col.isLockPinned() should not be used, please use col.getColDef().lockPinned instead.\"),!!this.colDef&&!!this.colDef.lockPinned},e.EVENT_MOVING_CHANGED=\"movingChanged\",e.EVENT_LEFT_CHANGED=\"leftChanged\",e.EVENT_WIDTH_CHANGED=\"widthChanged\",e.EVENT_LAST_LEFT_PINNED_CHANGED=\"lastLeftPinnedChanged\",e.EVENT_FIRST_RIGHT_PINNED_CHANGED=\"firstRightPinnedChanged\",e.EVENT_VISIBLE_CHANGED=\"visibleChanged\",e.EVENT_FILTER_CHANGED=\"filterChanged\",e.EVENT_FILTER_ACTIVE_CHANGED=\"filterActiveChanged\",e.EVENT_SORT_CHANGED=\"sortChanged\",e.EVENT_MENU_VISIBLE_CHANGED=\"menuVisibleChanged\",e.EVENT_ROW_GROUP_CHANGED=\"columnRowGroupChanged\",e.EVENT_PIVOT_CHANGED=\"columnPivotChanged\",e.EVENT_VALUE_CHANGED=\"columnValueChanged\",e.PINNED_RIGHT=\"right\",e.PINNED_LEFT=\"left\",e.SORT_ASC=\"asc\",e.SORT_DESC=\"desc\",i([a.Autowired(\"gridOptionsWrapper\"),n(\"design:type\",l.GridOptionsWrapper)],e.prototype,\"gridOptionsWrapper\",void 0),i([a.Autowired(\"columnUtils\"),n(\"design:type\",p.ColumnUtils)],e.prototype,\"columnUtils\",void 0),i([a.Autowired(\"columnApi\"),n(\"design:type\",u.ColumnApi)],e.prototype,\"columnApi\",void 0),i([a.Autowired(\"gridApi\"),n(\"design:type\",d.GridApi)],e.prototype,\"gridApi\",void 0),i([a.PostConstruct,n(\"design:type\",Function),n(\"design:paramtypes\",[]),n(\"design:returntype\",void 0)],e.prototype,\"initialise\",null),e}();t.Column=c},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)},r=this&&this.__param||function(e,t){return function(o,i){t(o,i,e)}};Object.defineProperty(t,\"__esModule\",{value:!0});var s=o(2),a=o(0),l=o(0),p=function(){function e(){}return e.prototype.setBeans=function(e){this.logging=e.isDebug()},e.prototype.create=function(e){return new u(e,this.isLogging.bind(this))},e.prototype.isLogging=function(){return this.logging},i([r(0,l.Qualifier(\"gridOptionsWrapper\")),n(\"design:type\",Function),n(\"design:paramtypes\",[s.GridOptionsWrapper]),n(\"design:returntype\",void 0)],e.prototype,\"setBeans\",null),e=i([a.Bean(\"loggerFactory\")],e)}();t.LoggerFactory=p;var u=function(){function e(e,t){this.name=e,this.isLoggingFunc=t}return e.prototype.isLogging=function(){return this.isLoggingFunc()},e.prototype.log=function(e){this.isLoggingFunc()&&console.log(\"ag-Grid.\"+this.name+\": \"+e)},e}();t.Logger=u},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(3),s=o(2),a=o(0),l=o(1),p=function(){function e(){this.destroyFunctions=[],this.destroyed=!1}return e.prototype.getFrameworkOverrides=function(){return this.frameworkOverrides},e.prototype.getContext=function(){return this.context},e.prototype.destroy=function(){this.destroyFunctions.forEach(function(e){return e()}),this.destroyFunctions.length=0,this.destroyed=!0,this.dispatchEvent({type:e.EVENT_DESTROYED})},e.prototype.addEventListener=function(e,t){this.localEventService||(this.localEventService=new r.EventService),this.localEventService.addEventListener(e,t)},e.prototype.removeEventListener=function(e,t){this.localEventService&&this.localEventService.removeEventListener(e,t)},e.prototype.dispatchEventAsync=function(e){var t=this;window.setTimeout(function(){return t.dispatchEvent(e)},0)},e.prototype.dispatchEvent=function(e){this.localEventService&&this.localEventService.dispatchEvent(e)},e.prototype.addDestroyableEventListener=function(e,t,o){var i=this;if(!this.destroyed){e instanceof HTMLElement?l._.addSafePassiveEventListener(this.getFrameworkOverrides(),e,t,o):e instanceof Window?e.addEventListener(t,o):(s.GridOptionsWrapper,e.addEventListener(t,o));var n=function(){e instanceof HTMLElement?e.removeEventListener(t,o):e instanceof Window?e.removeEventListener(t,o):(s.GridOptionsWrapper,e.removeEventListener(t,o)),i.destroyFunctions=i.destroyFunctions.filter(function(e){return e!==n})};return this.destroyFunctions.push(n),n}},e.prototype.isAlive=function(){return!this.destroyed},e.prototype.addDestroyFunc=function(e){this.isAlive()?this.destroyFunctions.push(e):e()},e.EVENT_DESTROYED=\"destroyed\",i([a.Autowired(\"context\"),n(\"design:type\",a.Context)],e.prototype,\"context\",void 0),i([a.Autowired(\"frameworkOverrides\"),n(\"design:type\",Object)],e.prototype,\"frameworkOverrides\",void 0),i([a.PreDestroy,n(\"design:type\",Function),n(\"design:paramtypes\",[]),n(\"design:returntype\",void 0)],e.prototype,\"destroy\",null),e}();t.BeanStub=p},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(1),s=o(2),a=o(26),l=o(20),p=o(4),u=o(9),d=o(0),c=o(3),h=o(5),f=o(8),g=o(16),y=function(){function e(){this.allFilters={},this.quickFilter=null,this.quickFilterParts=null,this.processingFilterChange=!1}var t;return t=e,e.prototype.registerGridCore=function(e){this.gridCore=e},e.prototype.init=function(){this.eventService.addEventListener(h.Events.EVENT_ROW_DATA_CHANGED,this.onNewRowsLoaded.bind(this)),this.eventService.addEventListener(h.Events.EVENT_NEW_COLUMNS_LOADED,this.onNewColumnsLoaded.bind(this)),this.quickFilter=this.parseQuickFilter(this.gridOptionsWrapper.getQuickFilterText()),this.setQuickFilterParts(),this.allowShowChangeAfterFilter=this.gridOptionsWrapper.isAllowShowChangeAfterFilter(),this.checkExternalFilter()},e.prototype.setQuickFilterParts=function(){this.quickFilter?this.quickFilterParts=this.quickFilter.split(\" \"):this.quickFilterParts=null},e.prototype.setFilterModel=function(e){var t=this,o=[];if(e){var i=Object.keys(e);r._.iterateObject(this.allFilters,function(n,s){r._.removeFromArray(i,n);var a=e[n];t.setModelOnFilterWrapper(s.filterPromise,a),o.push(s.filterPromise)}),r._.iterateArray(i,function(i){var n=t.columnController.getPrimaryColumn(i);if(n){var r=t.getOrCreateFilterWrapper(n,\"NO_UI\");t.setModelOnFilterWrapper(r.filterPromise,e[i]),o.push(r.filterPromise)}else console.warn(\"Warning ag-grid setFilterModel - no column found for colId \"+i)})}else r._.iterateObject(this.allFilters,function(e,i){t.setModelOnFilterWrapper(i.filterPromise,null),o.push(i.filterPromise)});r.Promise.all(o).then(function(e){t.onFilterChanged()})},e.prototype.setModelOnFilterWrapper=function(e,t){e.then(function(e){\"function\"==typeof e.setModel?e.setModel(t):console.warn(\"Warning ag-grid - filter missing setModel method, which is needed for setFilterModel\")})},e.prototype.getFilterModel=function(){var e={};return r._.iterateObject(this.allFilters,function(t,o){var i=o.filterPromise.resolveNow(null,function(e){return e});if(null==i)return null;if(\"function\"==typeof i.getModel){var n=i.getModel();r._.exists(n)&&(e[t]=n)}else console.warn(\"Warning ag-grid - filter API missing getModel method, which is needed for getFilterModel\")}),e},e.prototype.isAdvancedFilterPresent=function(){return this.advancedFilterPresent},e.prototype.setAdvancedFilterPresent=function(){var e=!1;r._.iterateObject(this.allFilters,function(t,o){o.filterPromise.resolveNow(!1,function(e){return e.isFilterActive()})&&(e=!0)}),this.advancedFilterPresent=e},e.prototype.updateFilterFlagInColumns=function(e,t){r._.iterateObject(this.allFilters,function(o,i){var n=i.filterPromise.resolveNow(!1,function(e){return e.isFilterActive()});i.column.setFilterActive(n,e,t)})},e.prototype.isAnyFilterPresent=function(){return this.isQuickFilterPresent()||this.advancedFilterPresent||this.externalFilterPresent},e.prototype.doesFilterPass=function(e,t){for(var o=e.data,i=Object.keys(this.allFilters),n=0,r=i.length;n<r;n++){var s=i[n],a=this.allFilters[s];if(void 0!==a){var l=a.filterPromise.resolveNow(void 0,function(e){return e});if(void 0!==l&&l!==t&&l.isFilterActive()){l.doesFilterPass||console.error(\"Filter is missing method doesFilterPass\");var p={node:e,data:o};if(!l.doesFilterPass(p))return!1}}}return!0},e.prototype.parseQuickFilter=function(e){return r._.missing(e)||\"\"===e?null:this.gridOptionsWrapper.isRowModelDefault()?e.toUpperCase():(console.warn(\"ag-grid: quick filtering only works with the Client-side Row Model\"),null)},e.prototype.setQuickFilter=function(e){var t=this.parseQuickFilter(e);this.quickFilter!==t&&(this.quickFilter=t,this.setQuickFilterParts(),this.onFilterChanged())},e.prototype.checkExternalFilter=function(){this.externalFilterPresent=this.gridOptionsWrapper.isExternalFilterPresent()},e.prototype.onFilterChanged=function(e){this.setAdvancedFilterPresent(),this.updateFilterFlagInColumns(\"filterChanged\",e),this.checkExternalFilter(),r._.iterateObject(this.allFilters,function(e,t){t.filterPromise.then(function(e){e.onAnyFilterChanged&&e.onAnyFilterChanged()})});var t={type:h.Events.EVENT_FILTER_CHANGED,api:this.gridApi,columnApi:this.columnApi};e&&r._.mergeDeep(t,e),this.processingFilterChange=!0,this.eventService.dispatchEvent(t),this.processingFilterChange=!1},e.prototype.isSuppressFlashingCellsBecauseFiltering=function(){return!this.allowShowChangeAfterFilter&&this.processingFilterChange},e.prototype.isQuickFilterPresent=function(){return null!==this.quickFilter},e.prototype.doesRowPassOtherFilters=function(e,t){return this.doesRowPassFilter(t,e)},e.prototype.doesRowPassQuickFilterNoCache=function(e,t){var o=this,i=this.columnController.getAllColumnsForQuickFilter(),n=!1;return i.forEach(function(i){if(!n){var s=o.getQuickFilterTextForColumn(i,e);r._.exists(s)&&s.indexOf(t)>=0&&(n=!0)}}),n},e.prototype.doesRowPassQuickFilterCache=function(e,t){return e.quickFilterAggregateText||this.aggregateRowForQuickFilter(e),e.quickFilterAggregateText.indexOf(t)>=0},e.prototype.doesRowPassQuickFilter=function(e){var t=this,o=!0,i=this.gridOptionsWrapper.isCacheQuickFilter();return this.quickFilterParts.forEach(function(n){(i?t.doesRowPassQuickFilterCache(e,n):t.doesRowPassQuickFilterNoCache(e,n))||(o=!1)}),o},e.prototype.doesRowPassFilter=function(e,t){return!(this.isQuickFilterPresent()&&!this.doesRowPassQuickFilter(e))&&(!(this.externalFilterPresent&&!this.gridOptionsWrapper.doesExternalFilterPass(e))&&!(this.advancedFilterPresent&&!this.doesFilterPass(e,t)))},e.prototype.getQuickFilterTextForColumn=function(e,t){var o,i=this.valueService.getValue(e,t,!0),n=e.getColDef();if(e.getColDef().getQuickFilterText){var s={value:i,node:t,data:t.data,column:e,colDef:n,context:this.gridOptionsWrapper.getContext()};o=e.getColDef().getQuickFilterText(s)}else o=i;return r._.exists(o)?o.toString().toUpperCase():null},e.prototype.aggregateRowForQuickFilter=function(e){var o=this,i=[];this.columnController.getAllColumnsForQuickFilter().forEach(function(t){var n=o.getQuickFilterTextForColumn(t,e);r._.exists(n)&&i.push(n)}),e.quickFilterAggregateText=i.join(t.QUICK_FILTER_SEPARATOR)},e.prototype.onNewRowsLoaded=function(e){r._.iterateObject(this.allFilters,function(e,t){t.filterPromise.then(function(e){e.onNewRowsLoaded&&e.onNewRowsLoaded()})}),this.updateFilterFlagInColumns(e),this.setAdvancedFilterPresent()},e.prototype.createValueGetter=function(e){var t=this;return function(o){return t.valueService.getValue(e,o,!0)}},e.prototype.getFilterComponent=function(e,t){return this.getOrCreateFilterWrapper(e,t).filterPromise},e.prototype.isFilterActive=function(e){var t=this.cachedFilter(e);return!!t&&t.filterPromise.resolveNow(!1,function(e){return e.isFilterActive()})},e.prototype.getOrCreateFilterWrapper=function(e,t){var o=this.cachedFilter(e);return o?\"NO_UI\"!==t&&this.putIntoGui(o,t):(o=this.createFilterWrapper(e,t),this.allFilters[e.getColId()]=o),o},e.prototype.cachedFilter=function(e){return this.allFilters[e.getColId()]},e.prototype.createFilterInstance=function(e,t){var o=this,i=\"agTextColumnFilter\";this.gridOptionsWrapper.isEnterprise()&&(i=\"agSetColumnFilter\");var n,s=r._.cloneObject(e.getColDef()),a=this.createFilterParams(e,s,t);a.filterChangedCallback=this.onFilterChanged.bind(this),a.filterModifiedCallback=function(){var t={type:h.Events.EVENT_FILTER_MODIFIED,api:o.gridApi,columnApi:o.columnApi,column:e,filterInstance:n};o.eventService.dispatchEvent(t)};var l=this.userComponentFactory.newFilterComponent(s,a,i,function(e,t){return r._.assign(e,{doesRowPassOtherFilter:o.doesRowPassOtherFilters.bind(o,t)})});return l.then(function(e){return n=e}),l},e.prototype.createFilterParams=function(e,t,o){void 0===o&&(o=null);var i={api:this.gridOptionsWrapper.getApi(),column:e,colDef:t,rowModel:this.rowModel,filterChangedCallback:null,filterModifiedCallback:null,valueGetter:this.createValueGetter(e),context:this.gridOptionsWrapper.getContext(),doesRowPassOtherFilter:null};return o&&(i.$scope=o),i},e.prototype.createFilterWrapper=function(e,t){var o={column:e,filterPromise:null,scope:null,compiledElement:null,guiPromise:r.Promise.external()};return o.scope=this.gridOptionsWrapper.isAngularCompileFilters()?this.$scope.$new():null,o.filterPromise=this.createFilterInstance(e,o.scope),this.putIntoGui(o,t),o},e.prototype.putIntoGui=function(e,t){var o=this,i=document.createElement(\"div\");i.className=\"ag-filter\",e.filterPromise.then(function(n){var s=n.getGui();if(r._.missing(s)&&console.warn(\"getGui method from filter returned \"+s+\", it should be a DOM element or an HTML template string.\"),\"string\"==typeof s&&(s=r._.loadTemplate(s)),i.appendChild(s),e.scope){var a=o.$compile(i)(e.scope);e.compiledElement=a,window.setTimeout(function(){return e.scope.$apply()},0)}e.guiPromise.resolve(i),o.eventService.dispatchEvent({type:h.Events.EVENT_FILTER_OPENED,column:e.column,source:t,eGui:i,api:o.gridApi,columnApi:o.columnApi})})},e.prototype.onNewColumnsLoaded=function(){var e=this,t=!1;r._.iterateObject(this.allFilters,function(o,i){!e.columnController.getPrimaryColumn(i.column)&&(t=!0,e.disposeFilterWrapper(i,\"filterDestroyed\"))}),t&&this.onFilterChanged()},e.prototype.destroyFilter=function(e,t){void 0===t&&(t=\"api\");var o=this.allFilters[e.getColId()];o&&(this.disposeFilterWrapper(o,t),this.onFilterChanged())},e.prototype.disposeFilterWrapper=function(e,t){var o=this;e.filterPromise.then(function(i){i.setModel(null),i.destroy&&i.destroy(),e.column.setFilterActive(!1,t),e.scope&&(e.compiledElement&&e.compiledElement.remove(),e.scope.$destroy()),delete o.allFilters[e.column.getColId()]})},e.prototype.destroy=function(){var e=this;r._.iterateObject(this.allFilters,function(t,o){e.disposeFilterWrapper(o,\"filterDestroyed\")})},e.QUICK_FILTER_SEPARATOR=\"\\n\",i([d.Autowired(\"$compile\"),n(\"design:type\",Object)],e.prototype,\"$compile\",void 0),i([d.Autowired(\"$scope\"),n(\"design:type\",Object)],e.prototype,\"$scope\",void 0),i([d.Autowired(\"gridOptionsWrapper\"),n(\"design:type\",s.GridOptionsWrapper)],e.prototype,\"gridOptionsWrapper\",void 0),i([d.Autowired(\"popupService\"),n(\"design:type\",a.PopupService)],e.prototype,\"popupService\",void 0),i([d.Autowired(\"valueService\"),n(\"design:type\",l.ValueService)],e.prototype,\"valueService\",void 0),i([d.Autowired(\"columnController\"),n(\"design:type\",p.ColumnController)],e.prototype,\"columnController\",void 0),i([d.Autowired(\"rowModel\"),n(\"design:type\",Object)],e.prototype,\"rowModel\",void 0),i([d.Autowired(\"eventService\"),n(\"design:type\",c.EventService)],e.prototype,\"eventService\",void 0),i([d.Autowired(\"enterprise\"),n(\"design:type\",Boolean)],e.prototype,\"enterprise\",void 0),i([d.Autowired(\"context\"),n(\"design:type\",d.Context)],e.prototype,\"context\",void 0),i([d.Autowired(\"columnApi\"),n(\"design:type\",u.ColumnApi)],e.prototype,\"columnApi\",void 0),i([d.Autowired(\"gridApi\"),n(\"design:type\",f.GridApi)],e.prototype,\"gridApi\",void 0),i([d.Autowired(\"userComponentFactory\"),n(\"design:type\",g.UserComponentFactory)],e.prototype,\"userComponentFactory\",void 0),i([d.PostConstruct,n(\"design:type\",Function),n(\"design:paramtypes\",[]),n(\"design:returntype\",void 0)],e.prototype,\"init\",null),i([d.PreDestroy,n(\"design:type\",Function),n(\"design:paramtypes\",[]),n(\"design:returntype\",void 0)],e.prototype,\"destroy\",null),e=t=i([d.Bean(\"filterManager\")],e)}();t.FilterManager=y},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)},r=this&&this.__param||function(e,t){return function(o,i){t(o,i,e)}};Object.defineProperty(t,\"__esModule\",{value:!0});var s,a,l,p=o(12),u=o(0),d=o(2),c=o(30),h=o(4),f=o(42),g=o(1);!function(e){e[e.ToolPanel=0]=\"ToolPanel\",e[e.HeaderCell=1]=\"HeaderCell\",e[e.RowDrag=2]=\"RowDrag\"}(s=t.DragSourceType||(t.DragSourceType={})),function(e){e[e.Up=0]=\"Up\",e[e.Down=1]=\"Down\"}(a=t.VDirection||(t.VDirection={})),function(e){e[e.Left=0]=\"Left\",e[e.Right=1]=\"Right\"}(l=t.HDirection||(t.HDirection={}));var y=function(){function e(){this.dragSourceAndParamsList=[],this.dropTargets=[]}var t;return t=e,e.prototype.init=function(){this.ePinnedIcon=g._.createIcon(\"columnMovePin\",this.gridOptionsWrapper,null),this.ePlusIcon=g._.createIcon(\"columnMoveAdd\",this.gridOptionsWrapper,null),this.eHiddenIcon=g._.createIcon(\"columnMoveHide\",this.gridOptionsWrapper,null),this.eMoveIcon=g._.createIcon(\"columnMoveMove\",this.gridOptionsWrapper,null),this.eLeftIcon=g._.createIcon(\"columnMoveLeft\",this.gridOptionsWrapper,null),this.eRightIcon=g._.createIcon(\"columnMoveRight\",this.gridOptionsWrapper,null),this.eGroupIcon=g._.createIcon(\"columnMoveGroup\",this.gridOptionsWrapper,null),this.eAggregateIcon=g._.createIcon(\"columnMoveValue\",this.gridOptionsWrapper,null),this.ePivotIcon=g._.createIcon(\"columnMovePivot\",this.gridOptionsWrapper,null),this.eDropNotAllowedIcon=g._.createIcon(\"dropNotAllowed\",this.gridOptionsWrapper,null)},e.prototype.setBeans=function(e){this.logger=e.create(\"OldToolPanelDragAndDropService\")},e.prototype.getStringType=function(e){switch(e){case s.RowDrag:return\"row\";case s.HeaderCell:return\"headerCell\";case s.ToolPanel:return\"toolPanel\";default:return console.warn(\"ag-Grid: bug - unknown drag type \"+e),null}},e.prototype.addDragSource=function(e,t){void 0===t&&(t=!1);var o={eElement:e.eElement,dragStartPixels:e.dragStartPixels,onDragStart:this.onDragStart.bind(this,e),onDragStop:this.onDragStop.bind(this),onDragging:this.onDragging.bind(this)};this.dragSourceAndParamsList.push({params:o,dragSource:e}),this.dragService.addDragSource(o,t)},e.prototype.removeDragSource=function(e){var t=g._.find(this.dragSourceAndParamsList,function(t){return t.dragSource===e});t&&(this.dragService.removeDragSource(t.params),g._.removeFromArray(this.dragSourceAndParamsList,t))},e.prototype.destroy=function(){var e=this;this.dragSourceAndParamsList.forEach(function(t){e.dragService.removeDragSource(t.params)}),this.dragSourceAndParamsList.length=0},e.prototype.nudge=function(){this.dragging&&this.onDragging(this.eventLastTime,!0)},e.prototype.onDragStart=function(e,t){this.dragging=!0,this.dragSource=e,this.eventLastTime=t,this.dragItem=this.dragSource.dragItemCallback(),this.lastDropTarget=this.dragSource.dragSourceDropTarget,this.dragSource.dragStarted&&this.dragSource.dragStarted(),this.createGhost()},e.prototype.onDragStop=function(e){if(this.eventLastTime=null,this.dragging=!1,this.dragSource.dragStopped&&this.dragSource.dragStopped(),this.lastDropTarget&&this.lastDropTarget.onDragStop){var t=this.createDropTargetEvent(this.lastDropTarget,e,null,null,!1);this.lastDropTarget.onDragStop(t)}this.lastDropTarget=null,this.dragItem=null,this.removeGhost()},e.prototype.onDragging=function(e,t){var o=this.workOutHDirection(e),i=this.workOutVDirection(e);this.eventLastTime=e,this.positionGhost(e);var n=g._.find(this.dropTargets,this.isMouseOnDropTarget.bind(this,e));if(n!==this.lastDropTarget)this.leaveLastTargetIfExists(e,o,i,t),this.enterDragTargetIfExists(n,e,o,i,t),this.lastDropTarget=n;else if(n){var r=this.createDropTargetEvent(n,e,o,i,t);n.onDragging(r)}},e.prototype.enterDragTargetIfExists=function(e,t,o,i,n){if(e){var r=this.createDropTargetEvent(e,t,o,i,n);e.onDragEnter(r),this.setGhostIcon(e.getIconName?e.getIconName():null)}},e.prototype.leaveLastTargetIfExists=function(e,t,o,i){if(this.lastDropTarget){var n=this.createDropTargetEvent(this.lastDropTarget,e,t,o,i);this.lastDropTarget.onDragLeave(n),this.setGhostIcon(null)}},e.prototype.getAllContainersFromDropTarget=function(e){var t=[e.getContainer()],o=e.getSecondaryContainers?e.getSecondaryContainers():null;return o&&(t=t.concat(o)),t},e.prototype.isMouseOnDropTarget=function(e,t){var o=this.getAllContainersFromDropTarget(t),i=!1;return o.forEach(function(t){if(t){var o=t.getBoundingClientRect();if(0!==o.width&&0!==o.height){var n=e.clientX>=o.left&&e.clientX<=o.right,r=e.clientY>=o.top&&e.clientY<=o.bottom;n&&r&&(i=!0)}}}),!!i&&t.isInterestedIn(this.dragSource.type)},e.prototype.addDropTarget=function(e){this.dropTargets.push(e)},e.prototype.workOutHDirection=function(e){return this.eventLastTime.clientX>e.clientX?l.Left:this.eventLastTime.clientX<e.clientX?l.Right:null},e.prototype.workOutVDirection=function(e){return this.eventLastTime.clientY>e.clientY?a.Up:this.eventLastTime.clientY<e.clientY?a.Down:null},e.prototype.createDropTargetEvent=function(e,t,o,i,n){var r=e.getContainer().getBoundingClientRect();return{event:t,x:t.clientX-r.left,y:t.clientY-r.top,vDirection:i,hDirection:o,dragSource:this.dragSource,fromNudge:n,dragItem:this.dragItem}},e.prototype.positionGhost=function(e){var t=this.eGhost.getBoundingClientRect().height,o=g._.getBodyWidth()-2,i=g._.getBodyHeight()-2,n=e.pageY-t/2,r=e.pageX-30,s=this.gridOptionsWrapper.getDocument(),a=window.pageYOffset||s.documentElement.scrollTop,l=window.pageXOffset||s.documentElement.scrollLeft;o>0&&r+this.eGhost.clientWidth>o+l&&(r=o+l-this.eGhost.clientWidth),r<0&&(r=0),i>0&&n+this.eGhost.clientHeight>i+a&&(n=i+a-this.eGhost.clientHeight),n<0&&(n=0),this.eGhost.style.left=r+\"px\",this.eGhost.style.top=n+\"px\"},e.prototype.removeGhost=function(){this.eGhost&&this.eGhostParent&&this.eGhostParent.removeChild(this.eGhost),this.eGhost=null},e.prototype.createGhost=function(){this.eGhost=g._.loadTemplate(t.GHOST_TEMPLATE);var e=this.environment.getTheme().theme;e&&g._.addCssClass(this.eGhost,e),this.eGhostIcon=this.eGhost.querySelector(\".ag-dnd-ghost-icon\"),this.setGhostIcon(null),this.eGhost.querySelector(\".ag-dnd-ghost-label\").innerHTML=g._.escape(this.dragSource.dragItemName),this.eGhost.style.height=\"25px\",this.eGhost.style.top=\"20px\",this.eGhost.style.left=\"20px\";var o=this.gridOptionsWrapper.getDocument();this.eGhostParent=o.querySelector(\"body\"),this.eGhostParent?this.eGhostParent.appendChild(this.eGhost):console.warn(\"ag-Grid: could not find document body, it is needed for dragging columns\")},e.prototype.setGhostIcon=function(e,o){var i;switch(void 0===o&&(o=!1),g._.clearElement(this.eGhostIcon),e){case t.ICON_ADD:i=this.ePlusIcon;break;case t.ICON_PINNED:i=this.ePinnedIcon;break;case t.ICON_MOVE:i=this.eMoveIcon;break;case t.ICON_LEFT:i=this.eLeftIcon;break;case t.ICON_RIGHT:i=this.eRightIcon;break;case t.ICON_GROUP:i=this.eGroupIcon;break;case t.ICON_AGGREGATE:i=this.eAggregateIcon;break;case t.ICON_PIVOT:i=this.ePivotIcon;break;case t.ICON_NOT_ALLOWED:i=this.eDropNotAllowedIcon;break;default:i=this.eHiddenIcon}this.eGhostIcon.appendChild(i),g._.addOrRemoveCssClass(this.eGhostIcon,\"ag-shake-left-to-right\",o)},e.ICON_PINNED=\"pinned\",e.ICON_ADD=\"add\",e.ICON_MOVE=\"move\",e.ICON_LEFT=\"left\",e.ICON_RIGHT=\"right\",e.ICON_GROUP=\"group\",e.ICON_AGGREGATE=\"aggregate\",e.ICON_PIVOT=\"pivot\",e.ICON_NOT_ALLOWED=\"notAllowed\",e.GHOST_TEMPLATE='<div class=\"ag-dnd-ghost\">  <span class=\"ag-dnd-ghost-icon ag-shake-left-to-right\"></span>  <div class=\"ag-dnd-ghost-label\">  </div></div>',i([u.Autowired(\"gridOptionsWrapper\"),n(\"design:type\",d.GridOptionsWrapper)],e.prototype,\"gridOptionsWrapper\",void 0),i([u.Autowired(\"dragService\"),n(\"design:type\",c.DragService)],e.prototype,\"dragService\",void 0),i([u.Autowired(\"environment\"),n(\"design:type\",f.Environment)],e.prototype,\"environment\",void 0),i([u.Autowired(\"columnController\"),n(\"design:type\",h.ColumnController)],e.prototype,\"columnController\",void 0),i([u.PostConstruct,n(\"design:type\",Function),n(\"design:paramtypes\",[]),n(\"design:returntype\",void 0)],e.prototype,\"init\",null),i([r(0,u.Qualifier(\"loggerFactory\")),n(\"design:type\",Function),n(\"design:paramtypes\",[p.LoggerFactory]),n(\"design:returntype\",void 0)],e.prototype,\"setBeans\",null),i([u.PreDestroy,n(\"design:type\",Function),n(\"design:paramtypes\",[]),n(\"design:returntype\",void 0)],e.prototype,\"destroy\",null),e=t=i([u.Bean(\"dragAndDropService\")],e)}();t.DragAndDropService=y},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var r,s=o(0),a=o(2),l=o(72),p=o(81),u=o(82),d=o(1);!function(e){e[e.DEFAULT=0]=\"DEFAULT\",e[e.REGISTERED_BY_NAME=1]=\"REGISTERED_BY_NAME\",e[e.HARDCODED=2]=\"HARDCODED\"}(r=t.ComponentSource||(t.ComponentSource={}));var c=function(){function e(){}return e.prototype.newDateComponent=function(e){return this.createAndInitUserComponent(this.gridOptions,e,\"dateComponent\",\"agDateInput\")},e.prototype.newHeaderComponent=function(e){return this.createAndInitUserComponent(e.column.getColDef(),e,\"headerComponent\",\"agColumnHeader\")},e.prototype.newHeaderGroupComponent=function(e){return this.createAndInitUserComponent(e.columnGroup.getColGroupDef(),e,\"headerGroupComponent\",\"agColumnGroupHeader\")},e.prototype.newFullWidthGroupRowInnerCellRenderer=function(e){return this.createAndInitUserComponent(this.gridOptions,e,\"groupRowInnerRenderer\",null,!0)},e.prototype.newFullWidthCellRenderer=function(e,t,o){return this.createAndInitUserComponent(null,e,t,o)},e.prototype.newCellRenderer=function(e,t){return this.createAndInitUserComponent(e,t,\"cellRenderer\",null,!0)},e.prototype.newPinnedRowCellRenderer=function(e,t){return this.createAndInitUserComponent(e,t,\"pinnedRowCellRenderer\",null,!0)},e.prototype.newCellEditor=function(e,t){return this.createAndInitUserComponent(e,t,\"cellEditor\",\"agCellEditor\")},e.prototype.newInnerCellRenderer=function(e,t){return this.createAndInitUserComponent(e,t,\"innerRenderer\",null)},e.prototype.newLoadingOverlayComponent=function(e){return this.createAndInitUserComponent(this.gridOptions,e,\"loadingOverlayComponent\",\"agLoadingOverlay\")},e.prototype.newNoRowsOverlayComponent=function(e){return this.createAndInitUserComponent(this.gridOptions,e,\"noRowsOverlayComponent\",\"agNoRowsOverlay\")},e.prototype.newTooltipComponent=function(e){var t=e.colDef;return this.createAndInitUserComponent(t,e,\"tooltipComponent\",\"agTooltipComponent\")},e.prototype.newFilterComponent=function(e,t,o,i){return this.createAndInitUserComponent(e,t,\"filter\",o,!1,i)},e.prototype.newFloatingFilterComponent=function(e,t,o){return this.createAndInitUserComponent(e,t,\"floatingFilterComponent\",o,!0)},e.prototype.newToolPanelComponent=function(e,t){return this.createAndInitUserComponent(e,t,\"toolPanel\")},e.prototype.newStatusPanelComponent=function(e,t){return this.createAndInitUserComponent(e,t,\"statusPanel\")},e.prototype.createAndInitUserComponent=function(e,t,o,i,n,r){void 0===n&&(n=!1),e||(e=this.gridOptions);var s=this.createComponentInstance(e,o,t,i,n);if(!s)return null;var a=s.componentInstance,l=this.createFinalParams(e,o,t,s.paramsFromSelector);this.addReactHacks(l);var p=r?r(l,a):l,u=this.initComponent(a,p);return null==u?d.Promise.resolve(a):u.map(function(e){return a})},e.prototype.addReactHacks=function(e){var t=this.context.getBean(\"agGridReact\");t&&(e.agGridReact=d._.cloneObject(t));var o=this.context.getBean(\"frameworkComponentWrapper\");o&&(e.frameworkComponentWrapper=o)},e.prototype.createUserComponentFromConcreteClass=function(e,t){var o=new e;return this.initComponent(o,t),o},e.prototype.lookupComponentClassDef=function(e,t,o,i){void 0===o&&(o=null);var n,s=null,a=null,l=null,p=null;if(null!=e){var u=e[t];null==u||!0===u||(\"string\"==typeof u?s=u:\"boolean\"==typeof u||(this.agComponentUtils.doesImplementIComponent(u)?a=u:l=u)),p=e[t+\"Framework\"],n=e[t+\"Selector\"]}if(a&&p||s&&p||l&&p)throw Error(\"ag-grid: you are trying to specify: \"+t+\" twice as a component.\");if(p&&!this.frameworkComponentWrapper)throw Error(\"ag-grid: you are specifying a framework component but you are not using a framework version of ag-grid for : \"+t);if(n&&(s||a||l||p))throw Error(\"ag-grid: you can't specify both, the selector and the component of ag-grid for : \"+t);if(p)return{componentFromFramework:!0,component:p,source:r.HARDCODED,paramsFromSelector:null};if(a)return{componentFromFramework:!1,component:a,source:r.HARDCODED,paramsFromSelector:null};if(l)return this.agComponentUtils.adaptFunction(t,l,!1,r.HARDCODED);var d,c=n?n(o):null;if(!(d=c&&c.component?c.component:s||i))return null;var h=this.lookupFromRegisteredComponents(t,d);return{componentFromFramework:h.componentFromFramework,component:h.component,source:h.source,paramsFromSelector:c?c.params:null}},e.prototype.lookupFromRegisteredComponents=function(e,t){var o=null!=t?t:e,i=this.userComponentRegistry.retrieve(o);return null==i?null:i.componentFromFramework?{component:i.component,componentFromFramework:!0,source:r.REGISTERED_BY_NAME,paramsFromSelector:null}:this.agComponentUtils.doesImplementIComponent(i.component)?{component:i.component,componentFromFramework:!1,source:i.source==l.RegisteredComponentSource.REGISTERED?r.REGISTERED_BY_NAME:r.DEFAULT,paramsFromSelector:null}:this.agComponentUtils.adaptFunction(e,i.component,i.componentFromFramework,i.source==l.RegisteredComponentSource.REGISTERED?r.REGISTERED_BY_NAME:r.DEFAULT)},e.prototype.createFinalParams=function(e,t,o,i){void 0===i&&(i=null);var n={};d._.mergeDeep(n,o);var r=e?e[t+\"Params\"]:null;return null!=r&&(\"function\"==typeof r?d._.mergeDeep(n,r(o)):\"object\"==typeof r&&d._.mergeDeep(n,r)),d._.mergeDeep(n,i),n},e.prototype.createComponentInstance=function(e,t,o,i,n){var r,s=this.lookupComponentClassDef(e,t,o,i);if(!s||!s.component)return n||console.error(\"Error creating component \"+t+\"=>\"+i),null;if(s.componentFromFramework){var a=s.component,l=this.componentMetadataProvider.retrieve(t);r=this.frameworkComponentWrapper.wrap(a,l.mandatoryMethodList,l.optionalMethodList,i)}else r=new s.component;return{componentInstance:r,paramsFromSelector:s.paramsFromSelector}},e.prototype.initComponent=function(e,t){return this.context.wireBean(e),null==e.init?void 0:e.init(t)},i([s.Autowired(\"gridOptions\"),n(\"design:type\",Object)],e.prototype,\"gridOptions\",void 0),i([s.Autowired(\"gridOptionsWrapper\"),n(\"design:type\",a.GridOptionsWrapper)],e.prototype,\"gridOptionsWrapper\",void 0),i([s.Autowired(\"context\"),n(\"design:type\",s.Context)],e.prototype,\"context\",void 0),i([s.Autowired(\"agComponentUtils\"),n(\"design:type\",p.AgComponentUtils)],e.prototype,\"agComponentUtils\",void 0),i([s.Autowired(\"componentMetadataProvider\"),n(\"design:type\",u.ComponentMetadataProvider)],e.prototype,\"componentMetadataProvider\",void 0),i([s.Autowired(\"userComponentRegistry\"),n(\"design:type\",l.UserComponentRegistry)],e.prototype,\"userComponentRegistry\",void 0),i([s.Optional(\"frameworkComponentWrapper\"),n(\"design:type\",Object)],e.prototype,\"frameworkComponentWrapper\",void 0),e=i([s.Bean(\"userComponentFactory\")],e)}();t.UserComponentFactory=c},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}),r=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},s=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)},a=this&&this.__param||function(e,t){return function(o,i){t(o,i,e)}};Object.defineProperty(t,\"__esModule\",{value:!0});var l=o(2),p=o(3),u=o(66),d=o(11),c=o(5),h=o(6),f=o(41),g=o(0),y=o(9),v=o(4),m=o(12),C=o(22),E=o(69),w=o(13),R=o(25),_=o(8),O=o(24),S=o(31),b=o(37),P=o(55),A=o(1),D=o(56),T=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.destroyFuncsForColumnListeners=[],t.rowCompsByIndex={},t.floatingTopRowComps=[],t.floatingBottomRowComps=[],t.refreshInProgress=!1,t}return n(t,e),t.prototype.registerGridCore=function(e){this.gridCore=e},t.prototype.getGridCore=function(){return this.gridCore},t.prototype.agWire=function(e){this.logger=e.create(\"RowRenderer\")},t.prototype.registerGridComp=function(e){this.gridPanel=e,this.rowContainers=this.gridPanel.getRowContainers(),this.addDestroyableEventListener(this.eventService,c.Events.EVENT_PAGINATION_CHANGED,this.onPageLoaded.bind(this)),this.addDestroyableEventListener(this.eventService,c.Events.EVENT_PINNED_ROW_DATA_CHANGED,this.onPinnedRowDataChanged.bind(this)),this.addDestroyableEventListener(this.eventService,c.Events.EVENT_DISPLAYED_COLUMNS_CHANGED,this.onDisplayedColumnsChanged.bind(this)),this.addDestroyableEventListener(this.eventService,c.Events.EVENT_BODY_SCROLL,this.redrawAfterScroll.bind(this)),this.addDestroyableEventListener(this.eventService,c.Events.EVENT_BODY_HEIGHT_CHANGED,this.redrawAfterScroll.bind(this)),this.addDestroyableEventListener(this.gridOptionsWrapper,l.GridOptionsWrapper.PROP_DOM_LAYOUT,this.onDomLayoutChanged.bind(this)),this.registerCellEventListeners(),this.printLayout=this.gridOptionsWrapper.getDomLayout()===h.Constants.DOM_LAYOUT_PRINT,this.embedFullWidthRows=this.printLayout||this.gridOptionsWrapper.isEmbedFullWidthRows(),this.redrawAfterModelUpdate()},t.prototype.registerCellEventListeners=function(){var e=this;this.addDestroyableEventListener(this.eventService,c.Events.EVENT_CELL_FOCUSED,function(t){e.forEachCellComp(function(e){return e.onCellFocused(t)})}),this.addDestroyableEventListener(this.eventService,c.Events.EVENT_FLASH_CELLS,function(t){e.forEachCellComp(function(e){return e.onFlashCells(t)})}),this.addDestroyableEventListener(this.eventService,c.Events.EVENT_COLUMN_HOVER_CHANGED,function(){e.forEachCellComp(function(e){return e.onColumnHover()})}),this.addDestroyableEventListener(this.eventService,c.Events.EVENT_DISPLAYED_COLUMNS_WIDTH_CHANGED,function(){e.printLayout&&e.forEachCellComp(function(e){return e.onLeftChanged()})}),this.gridOptionsWrapper.isEnableRangeSelection()&&(this.addDestroyableEventListener(this.eventService,c.Events.EVENT_RANGE_SELECTION_CHANGED,function(){e.forEachCellComp(function(e){return e.onRangeSelectionChanged()})}),this.addDestroyableEventListener(this.eventService,c.Events.EVENT_COLUMN_MOVED,function(){e.forEachCellComp(function(e){return e.updateRangeBordersIfRangeCount()})}),this.addDestroyableEventListener(this.eventService,c.Events.EVENT_COLUMN_PINNED,function(){e.forEachCellComp(function(e){return e.updateRangeBordersIfRangeCount()})}),this.addDestroyableEventListener(this.eventService,c.Events.EVENT_COLUMN_VISIBLE,function(){e.forEachCellComp(function(e){return e.updateRangeBordersIfRangeCount()})})),this.refreshListenersToColumnsForCellComps(),this.addDestroyableEventListener(this.eventService,c.Events.EVENT_GRID_COLUMNS_CHANGED,this.refreshListenersToColumnsForCellComps.bind(this)),this.addDestroyFunc(this.removeGridColumnListeners.bind(this))},t.prototype.removeGridColumnListeners=function(){this.destroyFuncsForColumnListeners.forEach(function(e){return e()}),this.destroyFuncsForColumnListeners.length=0},t.prototype.refreshListenersToColumnsForCellComps=function(){var e=this;this.removeGridColumnListeners();var t=this.columnController.getAllGridColumns();t&&t.forEach(function(t){var o=function(o){e.forEachCellComp(function(e){e.getColumn()===t&&o(e)})},i=function(){o(function(e){return e.onLeftChanged()})},n=function(){o(function(e){return e.onWidthChanged()})},r=function(){o(function(e){return e.onFirstRightPinnedChanged()})},s=function(){o(function(e){return e.onLastLeftPinnedChanged()})};t.addEventListener(d.Column.EVENT_LEFT_CHANGED,i),t.addEventListener(d.Column.EVENT_WIDTH_CHANGED,n),t.addEventListener(d.Column.EVENT_FIRST_RIGHT_PINNED_CHANGED,r),t.addEventListener(d.Column.EVENT_LAST_LEFT_PINNED_CHANGED,s),e.destroyFuncsForColumnListeners.push(function(){t.removeEventListener(d.Column.EVENT_LEFT_CHANGED,i),t.removeEventListener(d.Column.EVENT_WIDTH_CHANGED,n),t.removeEventListener(d.Column.EVENT_FIRST_RIGHT_PINNED_CHANGED,r),t.removeEventListener(d.Column.EVENT_LAST_LEFT_PINNED_CHANGED,s)})})},t.prototype.onDomLayoutChanged=function(){var e=this.gridOptionsWrapper.getDomLayout()===h.Constants.DOM_LAYOUT_PRINT,t=e||this.gridOptionsWrapper.isEmbedFullWidthRows(),o=t!==this.embedFullWidthRows||this.printLayout!==e;this.printLayout=e,this.embedFullWidthRows=t,o&&this.redrawAfterModelUpdate()},t.prototype.datasourceChanged=function(){this.firstRenderedRow=0,this.lastRenderedRow=-1;var e=Object.keys(this.rowCompsByIndex);this.removeRowComps(e)},t.prototype.onPageLoaded=function(e){A._.missing(e)&&(e={type:c.Events.EVENT_MODEL_UPDATED,api:this.gridApi,columnApi:this.columnApi,animate:!1,keepRenderedRows:!1,newData:!1,newPage:!1}),this.onModelUpdated(e)},t.prototype.getAllCellsForColumn=function(e){var t=[];function o(o,i){var n=i.getCellForCol(e);n&&t.push(n)}return A._.iterateObject(this.rowCompsByIndex,o),A._.iterateObject(this.floatingBottomRowComps,o),A._.iterateObject(this.floatingTopRowComps,o),t},t.prototype.refreshFloatingRowComps=function(){this.refreshFloatingRows(this.floatingTopRowComps,this.pinnedRowModel.getPinnedTopRowData(),this.rowContainers.floatingTopPinnedLeft,this.rowContainers.floatingTopPinnedRight,this.rowContainers.floatingTop,this.rowContainers.floatingTopFullWidth),this.refreshFloatingRows(this.floatingBottomRowComps,this.pinnedRowModel.getPinnedBottomRowData(),this.rowContainers.floatingBottomPinnedLeft,this.rowContainers.floatingBottomPinnedRight,this.rowContainers.floatingBottom,this.rowContainers.floatingBottomFullWith)},t.prototype.refreshFloatingRows=function(e,t,o,i,n,r){var s=this;e.forEach(function(e){e.destroy()}),e.length=0,t&&t.forEach(function(t){var a=new u.RowComp(s.$scope,n,o,i,r,t,s.beans,!1,!1,s.printLayout,s.embedFullWidthRows);a.init(),e.push(a)}),this.flushContainers(e)},t.prototype.onPinnedRowDataChanged=function(){this.redrawAfterModelUpdate({recycleRows:!0})},t.prototype.onModelUpdated=function(e){var t={recycleRows:e.keepRenderedRows,animate:e.animate,newData:e.newData,newPage:e.newPage,onlyBody:!0};this.redrawAfterModelUpdate(t)},t.prototype.getRenderedIndexesForRowNodes=function(e){var t=[];return A._.missing(e)?t:(A._.iterateObject(this.rowCompsByIndex,function(o,i){var n=i.getRowNode();e.indexOf(n)>=0&&t.push(o)}),t)},t.prototype.redrawRows=function(e){if(e&&0!=e.length){var t=this.getRenderedIndexesForRowNodes(e);this.removeRowComps(t),this.redrawAfterModelUpdate({recycleRows:!0})}},t.prototype.getCellToRestoreFocusToAfterRefresh=function(e){var t=e.suppressKeepFocus?null:this.focusedCellController.getFocusCellToUseAfterRefresh();if(A._.missing(t))return null;var o=document.activeElement,i=this.gridOptionsWrapper.getDomData(o,f.CellComp.DOM_DATA_KEY_CELL_COMP);return A._.missing(i)?null:t},t.prototype.redrawAfterModelUpdate=function(e){void 0===e&&(e={}),this.getLockOnRefresh();var t=this.getCellToRestoreFocusToAfterRefresh(e);this.sizeContainerToPageHeight(),this.scrollToTopIfNewData(e);var o=!this.printLayout&&e.recycleRows,i=e.animate&&this.gridOptionsWrapper.isAnimateRows(),n=this.binRowComps(o);this.redraw(n,i),e.onlyBody||this.refreshFloatingRowComps(),this.restoreFocusedCell(t),this.releaseLockOnRefresh()},t.prototype.scrollToTopIfNewData=function(e){var t=e.newData||e.newPage,o=this.gridOptionsWrapper.isSuppressScrollOnNewData();t&&!o&&this.gridPanel.scrollToTop()},t.prototype.sizeContainerToPageHeight=function(){var e=[this.rowContainers.body,this.rowContainers.fullWidth,this.rowContainers.pinnedLeft,this.rowContainers.pinnedRight];if(this.printLayout)e.forEach(function(e){return e.setHeight(null)});else{var t=this.paginationProxy.getCurrentPageHeight();0===t&&(t=1),this.maxDivHeightScaler.setModelHeight(t);var o=this.maxDivHeightScaler.getUiContainerHeight();e.forEach(function(e){return e.setHeight(o)})}},t.prototype.getLockOnRefresh=function(){if(this.refreshInProgress)throw new Error(\"ag-Grid: cannot get grid to draw rows when it is in the middle of drawing rows. Your code probably called a grid API method while the grid was in the render stage. To overcome this, put the API call into a timeout, eg instead of api.refreshView(), call setTimeout(function(){api.refreshView(),0}). To see what part of your code that caused the refresh check this stacktrace.\");this.refreshInProgress=!0},t.prototype.releaseLockOnRefresh=function(){this.refreshInProgress=!1},t.prototype.restoreFocusedCell=function(e){e&&this.focusedCellController.setFocusedCell(e.rowIndex,e.column,e.rowPinned,!0)},t.prototype.stopEditing=function(e){void 0===e&&(e=!1),this.forEachRowComp(function(t,o){o.stopEditing(e)})},t.prototype.forEachCellComp=function(e){this.forEachRowComp(function(t,o){return o.forEachCellComp(e)})},t.prototype.forEachRowComp=function(e){A._.iterateObject(this.rowCompsByIndex,e),A._.iterateObject(this.floatingTopRowComps,e),A._.iterateObject(this.floatingBottomRowComps,e)},t.prototype.addRenderedRowListener=function(e,t,o){var i=this.rowCompsByIndex[t];i&&i.addEventListener(e,o)},t.prototype.flashCells=function(e){void 0===e&&(e={}),this.forEachCellCompFiltered(e.rowNodes,e.columns,function(e){return e.flashCell()})},t.prototype.refreshCells=function(e){void 0===e&&(e={});var t={forceRefresh:e.force,newData:!1};this.forEachCellCompFiltered(e.rowNodes,e.columns,function(e){return e.refreshCell(t)})},t.prototype.getCellRendererInstances=function(e){var t=[];return this.forEachCellCompFiltered(e.rowNodes,e.columns,function(e){var o=e.getCellRenderer();o&&t.push(o)}),t},t.prototype.getCellEditorInstances=function(e){var t=[];return this.forEachCellCompFiltered(e.rowNodes,e.columns,function(e){var o=e.getCellEditor();o&&t.push(o)}),t},t.prototype.getEditingCells=function(){var e=[];return this.forEachCellComp(function(t){if(t.isEditing()){var o=t.getCellPosition();e.push(o)}}),e},t.prototype.forEachCellCompFiltered=function(e,t,o){var i,n,r=this;A._.exists(e)&&(i={top:{},bottom:{},normal:{}},e.forEach(function(e){e.rowPinned===h.Constants.PINNED_TOP?i.top[e.id]=!0:e.rowPinned===h.Constants.PINNED_BOTTOM?i.bottom[e.id]=!0:i.normal[e.id]=!0})),A._.exists(t)&&(n={},t.forEach(function(e){var t=r.columnController.getGridColumn(e);A._.exists(t)&&(n[t.getId()]=!0)}));var s=function(e){var t=e.getRowNode(),r=t.id,s=t.rowPinned;if(A._.exists(i))if(s===h.Constants.PINNED_BOTTOM){if(!i.bottom[r])return}else if(s===h.Constants.PINNED_TOP){if(!i.top[r])return}else if(!i.normal[r])return;e.forEachCellComp(function(e){var t=e.getColumn().getId();n&&!n[t]||o(e)})};A._.iterateObject(this.rowCompsByIndex,function(e,t){s(t)}),this.floatingTopRowComps&&this.floatingTopRowComps.forEach(s),this.floatingBottomRowComps&&this.floatingBottomRowComps.forEach(s)},t.prototype.destroy=function(){e.prototype.destroy.call(this);var t=Object.keys(this.rowCompsByIndex);this.removeRowComps(t)},t.prototype.binRowComps=function(e){var t,o=this,i={};return e?(t=[],A._.iterateObject(this.rowCompsByIndex,function(e,n){var r=n.getRowNode();A._.exists(r.id)?(i[r.id]=n,delete o.rowCompsByIndex[e]):t.push(e)})):t=Object.keys(this.rowCompsByIndex),this.removeRowComps(t),i},t.prototype.removeRowComps=function(e){var t=this;e.forEach(function(e){t.rowCompsByIndex[e].destroy(),delete t.rowCompsByIndex[e]})},t.prototype.redrawAfterScroll=function(){this.getLockOnRefresh(),this.redraw(null,!1,!0),this.releaseLockOnRefresh()},t.prototype.removeRowCompsNotToDraw=function(e){var t={};e.forEach(function(e){return t[e]=!0});var o=Object.keys(this.rowCompsByIndex),i=A._.filter(o,function(e){return!t[e]});this.removeRowComps(i)},t.prototype.calculateIndexesToDraw=function(){var e=this,t=A._.createArrayOfNumbers(this.firstRenderedRow,this.lastRenderedRow);return A._.iterateObject(this.rowCompsByIndex,function(o,i){var n=Number(o);(n<e.firstRenderedRow||n>e.lastRenderedRow)&&e.doNotUnVirtualiseRow(i)&&t.push(n)}),t.sort(function(e,t){return e-t}),t},t.prototype.redraw=function(e,t,o){var i=this;void 0===t&&(t=!1),void 0===o&&(o=!1),this.maxDivHeightScaler.updateOffset(),this.workOutFirstAndLastRowsToRender();var n=this.calculateIndexesToDraw();this.removeRowCompsNotToDraw(n),this.printLayout&&(t=!1);var r=[],s=[];n.forEach(function(n){var a=i.createOrUpdateRowComp(n,e,t,o);A._.exists(a)&&(s.push(a),A._.pushAll(r,a.getAndClearNextVMTurnFunctions()))}),this.flushContainers(s),A._.executeNextVMTurn(r),o&&!this.gridOptionsWrapper.isSuppressAnimationFrame()&&!this.printLayout?this.beans.taskQueue.addP2Task(this.destroyRowComps.bind(this,e,t)):this.destroyRowComps(e,t),this.checkAngularCompile(),this.gridPanel.updateRowCount()},t.prototype.flushContainers=function(e){A._.iterateObject(this.rowContainers,function(e,t){t&&t.flushRowTemplates()}),e.forEach(function(e){return e.afterFlush()})},t.prototype.onDisplayedColumnsChanged=function(){var e=this.columnController.isPinningLeft(),t=this.columnController.isPinningRight();(this.pinningLeft!==e||t!==this.pinningRight)&&(this.pinningLeft=e,this.pinningRight=t,this.embedFullWidthRows&&this.redrawFullWidthEmbeddedRows())},t.prototype.redrawFullWidthEmbeddedRows=function(){var e=[];A._.iterateObject(this.rowCompsByIndex,function(t,o){if(o.isFullWidth()){var i=o.getRowNode().rowIndex;e.push(i.toString())}}),this.refreshFloatingRowComps(),this.removeRowComps(e),this.redrawAfterScroll()},t.prototype.refreshFullWidthRows=function(){var e=[];A._.iterateObject(this.rowCompsByIndex,function(t,o){if(o.isFullWidth()&&!o.refreshFullWidth()){var i=o.getRowNode().rowIndex;e.push(i.toString())}}),this.removeRowComps(e),this.redrawAfterScroll()},t.prototype.createOrUpdateRowComp=function(e,t,o,i){var n,r=this.rowCompsByIndex[e];if(r||(n=this.paginationProxy.getRow(e),A._.exists(n)&&A._.exists(t)&&t[n.id]&&n.alreadyRendered&&(r=t[n.id],t[n.id]=null)),!r){if(n||(n=this.paginationProxy.getRow(e)),!A._.exists(n))return;r=this.createRowComp(n,o,i)}else r.ensureDomOrder();return n&&(n.alreadyRendered=!0),this.rowCompsByIndex[e]=r,r},t.prototype.destroyRowComps=function(e,t){var o=[];A._.iterateObject(e,function(e,i){i&&(i.destroy(t),A._.pushAll(o,i.getAndClearDelayedDestroyFunctions()))}),A._.executeInAWhile(o)},t.prototype.checkAngularCompile=function(){var e=this;this.gridOptionsWrapper.isAngularCompileRows()&&window.setTimeout(function(){e.$scope.$apply()},0)},t.prototype.workOutFirstAndLastRowsToRender=function(){var e,t;if(this.paginationProxy.isRowsToRender())if(this.printLayout)e=this.paginationProxy.getPageFirstRow(),t=this.paginationProxy.getPageLastRow();else{var o=this.paginationProxy.getPixelOffset(),i=this.maxDivHeightScaler.getOffset(),n=this.gridPanel.getVScrollPosition(),r=n.top,s=n.bottom,a=this.gridOptionsWrapper.getRowBufferInPixels(),l=r+o+i-a,p=s+o+i+a;this.ensureAllRowsInRangeHaveHeightsCalculated(l,p);var u=this.paginationProxy.getRowIndexAtPixel(l),d=this.paginationProxy.getRowIndexAtPixel(p),f=this.paginationProxy.getPageFirstRow(),g=this.paginationProxy.getPageLastRow();u<f&&(u=f),d>g&&(d=g),e=u,t=d}else e=0,t=-1;var y=this.gridOptionsWrapper.getDomLayout()===h.Constants.DOM_LAYOUT_NORMAL,v=this.gridOptionsWrapper.isSuppressMaxRenderedRowRestriction(),m=Math.max(this.gridOptionsWrapper.getRowBuffer(),500);y&&!v&&t-e>m&&(t=e+m);var C=e!==this.firstRenderedRow,E=t!==this.lastRenderedRow;if(C||E){this.firstRenderedRow=e,this.lastRenderedRow=t;var w={type:c.Events.EVENT_VIEWPORT_CHANGED,firstRow:e,lastRow:t,api:this.gridApi,columnApi:this.columnApi};this.eventService.dispatchEvent(w)}if(this.paginationProxy.isRowsToRender()){var R={type:c.Events.EVENT_FIRST_DATA_RENDERED,firstRow:e,lastRow:t,api:this.gridApi,columnApi:this.columnApi};this.eventService.dispatchEventOnce(R)}},t.prototype.ensureAllRowsInRangeHaveHeightsCalculated=function(e,t){this.paginationProxy.ensureRowHeightsValid(e,t,-1,-1)&&(this.sizeContainerToPageHeight(),this.maxDivHeightScaler.updateOffset())},t.prototype.getFirstVirtualRenderedRow=function(){return this.firstRenderedRow},t.prototype.getLastVirtualRenderedRow=function(){return this.lastRenderedRow},t.prototype.doNotUnVirtualiseRow=function(e){var t=e.getRowNode(),o=this.focusedCellController.isRowNodeFocused(t),i=e.isEditing(),n=t.detail;return!!(o||i||n)&&!!this.paginationProxy.isRowPresent(t)},t.prototype.createRowComp=function(e,t,o){var i=this.gridOptionsWrapper.isSuppressAnimationFrame(),n=o&&!i&&!this.printLayout,r=new u.RowComp(this.$scope,this.rowContainers.body,this.rowContainers.pinnedLeft,this.rowContainers.pinnedRight,this.rowContainers.fullWidth,e,this.beans,t,n,this.printLayout,this.embedFullWidthRows);return r.init(),r},t.prototype.getRenderedNodes=function(){var e=this.rowCompsByIndex;return Object.keys(e).map(function(t){return e[t].getRowNode()})},t.prototype.navigateToNextCell=function(e,t,o,i){for(var n=o,r=!1;!r;){if(this.gridOptionsWrapper.isEnableRtl()?t===h.Constants.KEY_LEFT&&(n=this.getLastCellOfColSpan(n)):t===h.Constants.KEY_RIGHT&&(n=this.getLastCellOfColSpan(n)),n=this.cellNavigationService.getNextCellToFocus(t,n),A._.missing(n))r=!0;else{var s=this.rowPositionUtils.getRowNode(n);if(!s.detail)if(s.group){var a=this.columnController.isPivotMode();this.gridOptionsWrapper.isGroupUseEntireRow(a)||(r=!0)}else r=!0}}if(i){var l=this.gridOptionsWrapper.getNavigateToNextCellFunc();if(A._.exists(l)){var p=l({key:t,previousCellPosition:o,nextCellPosition:n||null,event:e});A._.exists(p)?(p.floating&&(A._.doOnce(function(){console.warn(\"ag-Grid: tabToNextCellFunc return type should have attributes: rowIndex, rowPinned, column. However you had 'floating', maybe you meant 'rowPinned'?\")},\"no floating in userCell\"),p.rowPinned=p.floating),n={rowPinned:p.rowPinned,rowIndex:p.rowIndex,column:p.column}):n=null}}n&&(this.ensureCellVisible(n),n=this.getComponentForCell(n).getCellPosition(),this.ensureCellVisible(n),this.focusedCellController.setFocusedCell(n.rowIndex,n.column,n.rowPinned,!0),this.rangeController&&this.rangeController.setRangeToCell(n))},t.prototype.getLastCellOfColSpan=function(e){var t=this.getComponentForCell(e);if(!t)return e;var o=t.getColSpanningList();return 1===o.length?e:{rowIndex:e.rowIndex,column:A._.last(o),rowPinned:e.rowPinned}},t.prototype.ensureCellVisible=function(e){A._.missing(e.rowPinned)&&this.gridPanel.ensureIndexVisible(e.rowIndex),e.column.isPinned()||this.gridPanel.ensureColumnVisible(e.column),this.gridPanel.horizontallyScrollHeaderCenterAndFloatingCenter(),this.animationFrameService.flushAllFrames()},t.prototype.startEditingCell=function(e,t,o){var i=this.getComponentForCell(e);i&&i.startRowOrCellEdit(t,o)},t.prototype.getComponentForCell=function(e){var t;switch(e.rowPinned){case h.Constants.PINNED_TOP:t=this.floatingTopRowComps[e.rowIndex];break;case h.Constants.PINNED_BOTTOM:t=this.floatingBottomRowComps[e.rowIndex];break;default:t=this.rowCompsByIndex[e.rowIndex]}return t?t.getRenderedCellForColumn(e.column):null},t.prototype.getRowNode=function(e){switch(e.rowPinned){case h.Constants.PINNED_TOP:return this.pinnedRowModel.getPinnedTopRowData()[e.rowIndex];case h.Constants.PINNED_BOTTOM:return this.pinnedRowModel.getPinnedBottomRowData()[e.rowIndex];default:return this.rowModel.getRow(e.rowIndex)}},t.prototype.onTabKeyDown=function(e,t){var o=t.shiftKey;this.moveToCellAfter(e,o)&&t.preventDefault()},t.prototype.tabToNextCell=function(e){var t=this.focusedCellController.getFocusedCell();if(A._.missing(t))return!1;var o=this.getComponentForCell(t);return!A._.missing(o)&&this.moveToCellAfter(o,e)},t.prototype.moveToCellAfter=function(e,t){return e.isEditing()?this.gridOptionsWrapper.isFullRowEdit()?this.moveToNextEditingRow(e,t):this.moveToNextEditingCell(e,t):this.moveToNextCellNotEditing(e,t)},t.prototype.moveToNextEditingCell=function(e,t){var o=e.getCellPosition();e.stopEditing();var i=this.findNextCellToFocusOn(o,t,!0),n=A._.exists(i);return n&&(i.startEditingIfEnabled(null,null,!0),i.focusCell(!1)),n},t.prototype.moveToNextEditingRow=function(e,t){var o=e.getCellPosition(),i=this.findNextCellToFocusOn(o,t,!0),n=A._.exists(i);return n&&this.moveEditToNextCellOrRow(e,i),n},t.prototype.moveToNextCellNotEditing=function(e,t){var o=e.getCellPosition(),i=this.findNextCellToFocusOn(o,t,!1),n=A._.exists(i);return n&&i.focusCell(!0),n},t.prototype.moveEditToNextCellOrRow=function(e,t){var o=e.getCellPosition(),i=t.getCellPosition();if(o.rowIndex===i.rowIndex&&o.rowPinned===i.rowPinned)e.setFocusOutOnEditor(),t.setFocusInOnEditor();else{var n=e.getRenderedRow(),r=t.getRenderedRow();e.setFocusOutOnEditor(),n.stopEditing(),r.startRowEditing(),t.setFocusInOnEditor()}t.focusCell()},t.prototype.findNextCellToFocusOn=function(e,t,o){for(var i=e;;){t||(i=this.getLastCellOfColSpan(i)),i=this.cellNavigationService.getNextTabbedCell(i,t);var n=this.gridOptionsWrapper.getTabToNextCellFunc();if(A._.exists(n)){var r=n({backwards:t,editing:o,previousCellPosition:e,nextCellPosition:i||null});A._.exists(r)?(r.floating&&(A._.doOnce(function(){console.warn(\"ag-Grid: tabToNextCellFunc return type should have attributes: rowIndex, rowPinned, column. However you had 'floating', maybe you meant 'rowPinned'?\")},\"no floating in userCell\"),r.rowPinned=r.floating),i={rowIndex:r.rowIndex,column:r.column,rowPinned:r.rowPinned}):i=null}if(!i)return null;if(o){var s=this.lookupRowNodeForCell(i);if(!i.column.isCellEditable(s))continue}A._.missing(i.rowPinned)&&this.gridPanel.ensureIndexVisible(i.rowIndex),i.column.isPinned()||this.gridPanel.ensureColumnVisible(i.column),this.gridPanel.horizontallyScrollHeaderCenterAndFloatingCenter(),this.animationFrameService.flushAllFrames();var a=this.getComponentForCell(i);if(!A._.missing(a)&&!a.isSuppressNavigable())return this.rangeController&&this.rangeController.setRangeToCell(i),a}},t.prototype.lookupRowNodeForCell=function(e){return e.rowPinned===h.Constants.PINNED_TOP?this.pinnedRowModel.getPinnedTopRow(e.rowIndex):e.rowPinned===h.Constants.PINNED_BOTTOM?this.pinnedRowModel.getPinnedBottomRow(e.rowIndex):this.paginationProxy.getRow(e.rowIndex)},r([g.Autowired(\"paginationProxy\"),s(\"design:type\",R.PaginationProxy)],t.prototype,\"paginationProxy\",void 0),r([g.Autowired(\"columnController\"),s(\"design:type\",v.ColumnController)],t.prototype,\"columnController\",void 0),r([g.Autowired(\"gridOptionsWrapper\"),s(\"design:type\",l.GridOptionsWrapper)],t.prototype,\"gridOptionsWrapper\",void 0),r([g.Autowired(\"$scope\"),s(\"design:type\",Object)],t.prototype,\"$scope\",void 0),r([g.Autowired(\"eventService\"),s(\"design:type\",p.EventService)],t.prototype,\"eventService\",void 0),r([g.Autowired(\"pinnedRowModel\"),s(\"design:type\",O.PinnedRowModel)],t.prototype,\"pinnedRowModel\",void 0),r([g.Autowired(\"rowModel\"),s(\"design:type\",Object)],t.prototype,\"rowModel\",void 0),r([g.Autowired(\"loggerFactory\"),s(\"design:type\",m.LoggerFactory)],t.prototype,\"loggerFactory\",void 0),r([g.Autowired(\"focusedCellController\"),s(\"design:type\",C.FocusedCellController)],t.prototype,\"focusedCellController\",void 0),r([g.Autowired(\"cellNavigationService\"),s(\"design:type\",E.CellNavigationService)],t.prototype,\"cellNavigationService\",void 0),r([g.Autowired(\"columnApi\"),s(\"design:type\",y.ColumnApi)],t.prototype,\"columnApi\",void 0),r([g.Autowired(\"gridApi\"),s(\"design:type\",_.GridApi)],t.prototype,\"gridApi\",void 0),r([g.Autowired(\"beans\"),s(\"design:type\",S.Beans)],t.prototype,\"beans\",void 0),r([g.Autowired(\"maxDivHeightScaler\"),s(\"design:type\",P.MaxDivHeightScaler)],t.prototype,\"maxDivHeightScaler\",void 0),r([g.Autowired(\"animationFrameService\"),s(\"design:type\",b.AnimationFrameService)],t.prototype,\"animationFrameService\",void 0),r([g.Autowired(\"rowPositionUtils\"),s(\"design:type\",D.RowPositionUtils)],t.prototype,\"rowPositionUtils\",void 0),r([g.Optional(\"rangeController\"),s(\"design:type\",Object)],t.prototype,\"rangeController\",void 0),r([a(0,g.Qualifier(\"loggerFactory\")),s(\"design:type\",Function),s(\"design:paramtypes\",[m.LoggerFactory]),s(\"design:returntype\",void 0)],t.prototype,\"agWire\",null),t=r([g.Bean(\"rowRenderer\")],t)}(w.BeanStub);t.RowRenderer=T},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(3),s=o(5),a=o(2),l=o(19),p=o(20),u=o(4),d=o(9),c=o(0),h=o(6),f=o(35),g=o(8),y=o(1),v=function(){function e(){this.childrenMapped={},this.selectable=!0,this.__objectId=e.OBJECT_ID_SEQUENCE++,this.alreadyRendered=!1,this.selected=!1}return e.prototype.setData=function(e){var t=this.data;this.data=e,this.valueCache.onDataChanged(),this.updateDataOnDetailNode(),this.checkRowSelectable();var o=this.createDataChangedEvent(e,t,!1);this.dispatchLocalEvent(o)},e.prototype.updateDataOnDetailNode=function(){this.detailNode&&(this.detailNode.data=this.data)},e.prototype.createDataChangedEvent=function(t,o,i){return{type:e.EVENT_DATA_CHANGED,node:this,oldData:o,newData:t,update:i}},e.prototype.createLocalRowEvent=function(e){return{type:e,node:this}},e.prototype.updateData=function(e){var t=this.data;this.data=e,this.updateDataOnDetailNode(),this.checkRowSelectable(),this.updateDataOnDetailNode();var o=this.createDataChangedEvent(e,t,!0);this.dispatchLocalEvent(o)},e.prototype.getRowIndexString=function(){return this.rowPinned===h.Constants.PINNED_TOP?\"t-\"+this.rowIndex:this.rowPinned===h.Constants.PINNED_BOTTOM?\"b-\"+this.rowIndex:this.rowIndex.toString()},e.prototype.createDaemonNode=function(){var t=new e;return this.context.wireBean(t),t.id=this.id,t.data=this.data,t.daemon=!0,t.selected=this.selected,t.level=this.level,t},e.prototype.setDataAndId=function(e,t){var o=y._.exists(this.id)?this.createDaemonNode():null,i=this.data;this.data=e,this.updateDataOnDetailNode(),this.setId(t),this.selectionController.syncInRowNode(this,o),this.checkRowSelectable();var n=this.createDataChangedEvent(e,i,!1);this.dispatchLocalEvent(n)},e.prototype.checkRowSelectable=function(){var e=this.gridOptionsWrapper.getIsRowSelectableFunc(),t=e&&y._.exists(this);this.setRowSelectable(!t||e(this))},e.prototype.setRowSelectable=function(t){this.selectable!==t&&(this.selectable=t,this.eventService&&this.eventService.dispatchEvent(this.createLocalRowEvent(e.EVENT_SELECTABLE_CHANGED)))},e.prototype.setId=function(e){var t=this.gridOptionsWrapper.getRowNodeIdFunc();t?this.data?this.id=t(this.data):this.id=void 0:this.id=e},e.prototype.isPixelInRange=function(e){return e>=this.rowTop&&e<this.rowTop+this.rowHeight},e.prototype.clearRowTop=function(){this.oldRowTop=this.rowTop,this.setRowTop(null)},e.prototype.setFirstChild=function(t){this.firstChild!==t&&(this.firstChild=t,this.eventService&&this.eventService.dispatchEvent(this.createLocalRowEvent(e.EVENT_FIRST_CHILD_CHANGED)))},e.prototype.setLastChild=function(t){this.lastChild!==t&&(this.lastChild=t,this.eventService&&this.eventService.dispatchEvent(this.createLocalRowEvent(e.EVENT_LAST_CHILD_CHANGED)))},e.prototype.setChildIndex=function(t){this.childIndex!==t&&(this.childIndex=t,this.eventService&&this.eventService.dispatchEvent(this.createLocalRowEvent(e.EVENT_CHILD_INDEX_CHANGED)))},e.prototype.setRowTop=function(t){this.rowTop!==t&&(this.rowTop=t,this.eventService&&this.eventService.dispatchEvent(this.createLocalRowEvent(e.EVENT_TOP_CHANGED)))},e.prototype.setDragging=function(t){this.dragging!==t&&(this.dragging=t,this.eventService&&this.eventService.dispatchEvent(this.createLocalRowEvent(e.EVENT_DRAGGING_CHANGED)))},e.prototype.setAllChildrenCount=function(t){this.allChildrenCount!==t&&(this.allChildrenCount=t,this.eventService&&this.eventService.dispatchEvent(this.createLocalRowEvent(e.EVENT_ALL_CHILDREN_COUNT_CHANGED)))},e.prototype.setRowHeight=function(t,o){void 0===o&&(o=!1),this.rowHeight=t,this.rowHeightEstimated=o,this.eventService&&this.eventService.dispatchEvent(this.createLocalRowEvent(e.EVENT_HEIGHT_CHANGED))},e.prototype.setRowIndex=function(t){this.rowIndex=t,this.eventService&&this.eventService.dispatchEvent(this.createLocalRowEvent(e.EVENT_ROW_INDEX_CHANGED))},e.prototype.setUiLevel=function(t){this.uiLevel!==t&&(this.uiLevel=t,this.eventService&&this.eventService.dispatchEvent(this.createLocalRowEvent(e.EVENT_UI_LEVEL_CHANGED)))},e.prototype.setExpanded=function(t){if(this.expanded!==t){this.expanded=t,this.eventService&&this.eventService.dispatchEvent(this.createLocalRowEvent(e.EVENT_EXPANDED_CHANGED));var o=this.createGlobalRowEvent(s.Events.EVENT_ROW_GROUP_OPENED);this.mainEventService.dispatchEvent(o),this.gridOptionsWrapper.isGroupIncludeFooter()&&this.gridApi.redrawRows({rowNodes:[this]})}},e.prototype.createGlobalRowEvent=function(e){return{type:e,node:this,data:this.data,rowIndex:this.rowIndex,rowPinned:this.rowPinned,context:this.gridOptionsWrapper.getContext(),api:this.gridOptionsWrapper.getApi(),columnApi:this.gridOptionsWrapper.getColumnApi()}},e.prototype.dispatchLocalEvent=function(e){this.eventService&&this.eventService.dispatchEvent(e)},e.prototype.setDataValue=function(e,t){var o=this.columnController.getPrimaryColumn(e);this.valueService.setValue(this,o,t),this.dispatchCellChangedEvent(o,t)},e.prototype.setGroupValue=function(e,t){var o=this.columnController.getGridColumn(e);y._.missing(this.groupData)&&(this.groupData={}),this.groupData[o.getColId()]=t,this.dispatchCellChangedEvent(o,t)},e.prototype.setAggData=function(e){var t=this,o=y._.getAllKeysInObjects([this.aggData,e]);this.aggData=e,this.eventService&&o.forEach(function(e){var o=t.columnController.getGridColumn(e),i=t.aggData?t.aggData[e]:void 0;t.dispatchCellChangedEvent(o,i)})},e.prototype.hasChildren=function(){return this.group||this.childrenAfterGroup&&this.childrenAfterGroup.length>0},e.prototype.isEmptyRowGroupNode=function(){return this.group&&y._.missingOrEmpty(this.childrenAfterGroup)},e.prototype.dispatchCellChangedEvent=function(t,o){var i={type:e.EVENT_CELL_CHANGED,node:this,column:t,newValue:o};this.dispatchLocalEvent(i)},e.prototype.resetQuickFilterAggregateText=function(){this.quickFilterAggregateText=null},e.prototype.isExpandable=function(){return this.hasChildren()||this.master},e.prototype.isSelected=function(){return this.footer?this.sibling.isSelected():this.selected},e.prototype.depthFirstSearch=function(e){this.childrenAfterGroup&&this.childrenAfterGroup.forEach(function(t){return t.depthFirstSearch(e)}),e(this)},e.prototype.calculateSelectedFromChildren=function(){var e,t=!1,o=!1,i=!1;if(this.childrenAfterGroup)for(var n=0;n<this.childrenAfterGroup.length;n++){var r=this.childrenAfterGroup[n];if(r.selectable)switch(r.isSelected()){case!0:t=!0;break;case!1:o=!0;break;default:i=!0}}e=i?void 0:!(!t||o)||!(!t&&o)&&void 0,this.selectThisNode(e)},e.prototype.setSelectedInitialValue=function(e){this.selected=e},e.prototype.setSelected=function(e,t,o){void 0===t&&(t=!1),void 0===o&&(o=!1),this.setSelectedParams({newValue:e,clearSelection:t,suppressFinishActions:o,rangeSelect:!1})},e.prototype.isRowPinned=function(){return this.rowPinned===h.Constants.PINNED_TOP||this.rowPinned===h.Constants.PINNED_BOTTOM},e.prototype.setSelectedParams=function(e){var t=this.gridOptionsWrapper.isGroupSelectsChildren(),o=!0===e.newValue,i=!0===e.clearSelection,n=!0===e.suppressFinishActions,r=!0===e.rangeSelect,a=t&&!0===e.groupSelectsFiltered;if(void 0===this.id)return console.warn(\"ag-Grid: cannot select node until id for node is known\"),0;if(this.rowPinned)return console.warn(\"ag-Grid: cannot select pinned rows\"),0;if(this.footer)return this.sibling.setSelectedParams(e);if(r){var l=this.selectionController.getLastSelectedNode()!==this,p=this.gridOptionsWrapper.isRowSelectionMulti();if(l&&p)return this.doRowRangeSelection()}var u=0;a&&this.group||this.selectThisNode(o)&&u++;if(t&&this.group&&(u+=this.selectChildNodes(o,a)),!n){if(o&&(i||!this.gridOptionsWrapper.isRowSelectionMulti())&&(u+=this.selectionController.clearOtherNodes(this)),u>0){this.selectionController.updateGroupsFromChildrenSelections();var d={type:s.Events.EVENT_SELECTION_CHANGED,api:this.gridApi,columnApi:this.columnApi};this.mainEventService.dispatchEvent(d)}o&&this.selectionController.setLastSelectedNode(this)}return u},e.prototype.doRowRangeSelection=function(){var e=0,t=this.gridOptionsWrapper.isGroupSelectsChildren(),o=this.selectionController.getLastSelectedNode();this.rowModel.getNodesInRangeForSelection(this,o).forEach(function(o){o.group&&t||o.selectThisNode(!0)&&e++}),this.selectionController.updateGroupsFromChildrenSelections();var i={type:s.Events.EVENT_SELECTION_CHANGED,api:this.gridApi,columnApi:this.columnApi};return this.mainEventService.dispatchEvent(i),e},e.prototype.isParentOfNode=function(e){for(var t=this.parent;t;){if(t===e)return!0;t=t.parent}return!1},e.prototype.selectThisNode=function(t){if(!this.selectable||this.selected===t)return!1;this.selected=t,this.eventService&&this.dispatchLocalEvent(this.createLocalRowEvent(e.EVENT_ROW_SELECTED));var o=this.createGlobalRowEvent(s.Events.EVENT_ROW_SELECTED);return this.mainEventService.dispatchEvent(o),!0},e.prototype.selectChildNodes=function(e,t){var o=t?this.childrenAfterFilter:this.childrenAfterGroup,i=0;if(!y._.missing(o)){for(var n=0;n<o.length;n++)i+=o[n].setSelectedParams({newValue:e,clearSelection:!1,suppressFinishActions:!0,groupSelectsFiltered:t});return i}},e.prototype.addEventListener=function(e,t){this.eventService||(this.eventService=new r.EventService),this.eventService.addEventListener(e,t)},e.prototype.removeEventListener=function(e,t){this.eventService.removeEventListener(e,t)},e.prototype.onMouseEnter=function(){this.dispatchLocalEvent(this.createLocalRowEvent(e.EVENT_MOUSE_ENTER))},e.prototype.onMouseLeave=function(){this.dispatchLocalEvent(this.createLocalRowEvent(e.EVENT_MOUSE_LEAVE))},e.prototype.getFirstChildOfFirstChild=function(e){for(var t,o=this,i=!0,n=!1;i&&!n;){var r=o.parent;y._.exists(r)&&o.firstChild?r.rowGroupColumn===e&&(n=!0,t=r):i=!1,o=r}return n?t:null},e.OBJECT_ID_SEQUENCE=0,e.EVENT_ROW_SELECTED=\"rowSelected\",e.EVENT_DATA_CHANGED=\"dataChanged\",e.EVENT_CELL_CHANGED=\"cellChanged\",e.EVENT_ALL_CHILDREN_COUNT_CHANGED=\"allChildrenCountChanged\",e.EVENT_MOUSE_ENTER=\"mouseEnter\",e.EVENT_MOUSE_LEAVE=\"mouseLeave\",e.EVENT_HEIGHT_CHANGED=\"heightChanged\",e.EVENT_TOP_CHANGED=\"topChanged\",e.EVENT_FIRST_CHILD_CHANGED=\"firstChildChanged\",e.EVENT_LAST_CHILD_CHANGED=\"lastChildChanged\",e.EVENT_CHILD_INDEX_CHANGED=\"childIndexChanged\",e.EVENT_ROW_INDEX_CHANGED=\"rowIndexChanged\",e.EVENT_EXPANDED_CHANGED=\"expandedChanged\",e.EVENT_SELECTABLE_CHANGED=\"selectableChanged\",e.EVENT_UI_LEVEL_CHANGED=\"uiLevelChanged\",e.EVENT_DRAGGING_CHANGED=\"draggingChanged\",i([c.Autowired(\"eventService\"),n(\"design:type\",r.EventService)],e.prototype,\"mainEventService\",void 0),i([c.Autowired(\"gridOptionsWrapper\"),n(\"design:type\",a.GridOptionsWrapper)],e.prototype,\"gridOptionsWrapper\",void 0),i([c.Autowired(\"selectionController\"),n(\"design:type\",l.SelectionController)],e.prototype,\"selectionController\",void 0),i([c.Autowired(\"columnController\"),n(\"design:type\",u.ColumnController)],e.prototype,\"columnController\",void 0),i([c.Autowired(\"valueService\"),n(\"design:type\",p.ValueService)],e.prototype,\"valueService\",void 0),i([c.Autowired(\"rowModel\"),n(\"design:type\",Object)],e.prototype,\"rowModel\",void 0),i([c.Autowired(\"context\"),n(\"design:type\",c.Context)],e.prototype,\"context\",void 0),i([c.Autowired(\"valueCache\"),n(\"design:type\",f.ValueCache)],e.prototype,\"valueCache\",void 0),i([c.Autowired(\"columnApi\"),n(\"design:type\",d.ColumnApi)],e.prototype,\"columnApi\",void 0),i([c.Autowired(\"gridApi\"),n(\"design:type\",g.GridApi)],e.prototype,\"gridApi\",void 0),e}();t.RowNode=v},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)},r=this&&this.__param||function(e,t){return function(o,i){t(o,i,e)}};Object.defineProperty(t,\"__esModule\",{value:!0});var s=o(0),a=o(0),l=o(12),p=o(3),u=o(5),d=o(0),c=o(2),h=o(0),f=o(6),g=o(9),y=o(8),v=o(1),m=o(51),C=function(){function e(){}return e.prototype.setBeans=function(e){this.logger=e.create(\"SelectionController\"),this.reset(),this.gridOptionsWrapper.isRowModelDefault()?this.eventService.addEventListener(u.Events.EVENT_ROW_DATA_CHANGED,this.reset.bind(this)):this.logger.log(\"dont know what to do here\")},e.prototype.init=function(){this.groupSelectsChildren=this.gridOptionsWrapper.isGroupSelectsChildren(),this.eventService.addEventListener(u.Events.EVENT_ROW_SELECTED,this.onRowSelected.bind(this))},e.prototype.setLastSelectedNode=function(e){this.lastSelectedNode=e},e.prototype.getLastSelectedNode=function(){return this.lastSelectedNode},e.prototype.getSelectedNodes=function(){var e=[];return v._.iterateObject(this.selectedNodes,function(t,o){o&&e.push(o)}),e},e.prototype.getSelectedRows=function(){var e=[];return v._.iterateObject(this.selectedNodes,function(t,o){o&&o.data&&e.push(o.data)}),e},e.prototype.removeGroupsFromSelection=function(){var e=this;v._.iterateObject(this.selectedNodes,function(t,o){o&&o.group&&(e.selectedNodes[o.id]=void 0)})},e.prototype.updateGroupsFromChildrenSelections=function(e){if(this.gridOptionsWrapper.isGroupSelectsChildren()&&this.rowModel.getType()===f.Constants.ROW_MODEL_TYPE_CLIENT_SIDE){var t=this.rowModel.getRootNode();e||(e=new m.ChangedPath(!0,t)).setInactive(),e.forEachChangedNodeDepthFirst(function(e){e!==t&&e.calculateSelectedFromChildren()})}},e.prototype.getNodeForIdIfSelected=function(e){return this.selectedNodes[e]},e.prototype.clearOtherNodes=function(e){var t=this,o={},i=0;return v._.iterateObject(this.selectedNodes,function(n,r){if(r&&r.id!==e.id){var s=t.selectedNodes[r.id];i+=s.setSelectedParams({newValue:!1,clearSelection:!1,suppressFinishActions:!0}),t.groupSelectsChildren&&r.parent&&(o[r.parent.id]=r.parent)}}),v._.iterateObject(o,function(e,t){t.calculateSelectedFromChildren()}),i},e.prototype.onRowSelected=function(e){var t=e.node;this.groupSelectsChildren&&t.group||(t.isSelected()?this.selectedNodes[t.id]=t:this.selectedNodes[t.id]=void 0)},e.prototype.syncInRowNode=function(e,t){this.syncInOldRowNode(e,t),this.syncInNewRowNode(e)},e.prototype.syncInOldRowNode=function(e,t){v._.exists(t)&&e.id!==t.id&&(v._.exists(this.selectedNodes[t.id])&&(this.selectedNodes[t.id]=t))},e.prototype.syncInNewRowNode=function(e){v._.exists(this.selectedNodes[e.id])?(e.setSelectedInitialValue(!0),this.selectedNodes[e.id]=e):e.setSelectedInitialValue(!1)},e.prototype.reset=function(){this.logger.log(\"reset\"),this.selectedNodes={},this.lastSelectedNode=null},e.prototype.getBestCostNodeSelection=function(){this.rowModel.getType()!==f.Constants.ROW_MODEL_TYPE_CLIENT_SIDE&&console.warn(\"getBestCostNodeSelection is only available when using normal row model\");var e=this.rowModel.getTopLevelNodes();if(null!==e){var t=[];return function e(o){for(var i=0,n=o.length;i<n;i++){var r=o[i];r.isSelected()?t.push(r):r.group&&r.children&&e(r.children)}}(e),t}console.warn(\"selectAll not available doing rowModel=virtual\")},e.prototype.setRowModel=function(e){this.rowModel=e},e.prototype.isEmpty=function(){var e=0;return v._.iterateObject(this.selectedNodes,function(t,o){o&&e++}),0===e},e.prototype.deselectAllRowNodes=function(e){void 0===e&&(e=!1);var t=function(e){return e.selectThisNode(!1)},o=this.rowModel.getType()===f.Constants.ROW_MODEL_TYPE_CLIENT_SIDE;if(e){if(!o)return void console.error(\"ag-Grid: selecting just filtered only works with In Memory Row Model\");this.rowModel.forEachNodeAfterFilter(t)}else v._.iterateObject(this.selectedNodes,function(e,o){o&&t(o)}),this.reset();o&&this.groupSelectsChildren&&this.updateGroupsFromChildrenSelections();var i={type:u.Events.EVENT_SELECTION_CHANGED,api:this.gridApi,columnApi:this.columnApi};this.eventService.dispatchEvent(i)},e.prototype.selectAllRowNodes=function(e){if(void 0===e&&(e=!1),this.rowModel.getType()!==f.Constants.ROW_MODEL_TYPE_CLIENT_SIDE)throw new Error(\"selectAll only available with normal row model, ie not \"+this.rowModel.getType());var t=this.rowModel,o=function(e){return e.selectThisNode(!0)};e?t.forEachNodeAfterFilter(o):t.forEachNode(o),this.rowModel.getType()===f.Constants.ROW_MODEL_TYPE_CLIENT_SIDE&&this.groupSelectsChildren&&this.updateGroupsFromChildrenSelections();var i={type:u.Events.EVENT_SELECTION_CHANGED,api:this.gridApi,columnApi:this.columnApi};this.eventService.dispatchEvent(i)},e.prototype.selectNode=function(e,t){e&&e.setSelectedParams({newValue:!0,clearSelection:!t})},e.prototype.deselectIndex=function(e){var t=this.rowModel.getRow(e);this.deselectNode(t)},e.prototype.deselectNode=function(e){e&&e.setSelectedParams({newValue:!1,clearSelection:!1})},e.prototype.selectIndex=function(e,t){var o=this.rowModel.getRow(e);this.selectNode(o,t)},i([d.Autowired(\"eventService\"),n(\"design:type\",p.EventService)],e.prototype,\"eventService\",void 0),i([d.Autowired(\"rowModel\"),n(\"design:type\",Object)],e.prototype,\"rowModel\",void 0),i([d.Autowired(\"gridOptionsWrapper\"),n(\"design:type\",c.GridOptionsWrapper)],e.prototype,\"gridOptionsWrapper\",void 0),i([d.Autowired(\"columnApi\"),n(\"design:type\",g.ColumnApi)],e.prototype,\"columnApi\",void 0),i([d.Autowired(\"gridApi\"),n(\"design:type\",y.GridApi)],e.prototype,\"gridApi\",void 0),i([r(0,a.Qualifier(\"loggerFactory\")),n(\"design:type\",Function),n(\"design:paramtypes\",[l.LoggerFactory]),n(\"design:returntype\",void 0)],e.prototype,\"setBeans\",null),i([h.PostConstruct,n(\"design:type\",Function),n(\"design:paramtypes\",[]),n(\"design:returntype\",void 0)],e.prototype,\"init\",null),e=i([s.Bean(\"selectionController\")],e)}();t.SelectionController=C},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(2),s=o(21),a=o(4),l=o(0),p=o(5),u=o(3),d=o(35),c=o(1),h=function(){function e(){this.initialised=!1}return e.prototype.init=function(){this.cellExpressions=this.gridOptionsWrapper.isEnableCellExpressions(),this.initialised=!0},e.prototype.getValue=function(e,t,o,i){if(void 0===o&&(o=!1),void 0===i&&(i=!1),this.initialised||this.init(),t){var n,r=e.getColDef(),s=r.field,a=e.getId(),l=t.data,p=t.groupData&&void 0!==t.groupData[a],u=!i&&t.aggData&&void 0!==t.aggData[a];if(o&&r.filterValueGetter?n=this.executeFilterValueGetter(r.filterValueGetter,l,e,t):this.gridOptionsWrapper.isTreeData()&&u?n=t.aggData[a]:this.gridOptionsWrapper.isTreeData()&&r.valueGetter?n=this.executeValueGetter(r.valueGetter,l,e,t):this.gridOptionsWrapper.isTreeData()&&s&&l?n=c._.getValueUsingField(l,s,e.isFieldContainsDots()):p?n=t.groupData[a]:u?n=t.aggData[a]:r.valueGetter?n=this.executeValueGetter(r.valueGetter,l,e,t):s&&l&&(n=c._.getValueUsingField(l,s,e.isFieldContainsDots())),this.cellExpressions&&\"string\"==typeof n&&0===n.indexOf(\"=\")){var d=n.substring(1);n=this.executeValueGetter(d,l,e,t)}return n}},e.prototype.setValue=function(e,t,o,i){var n=this.columnController.getPrimaryColumn(t);if(e&&n){var r=e.data;c._.missing(r)&&(e.data={});var s=n.getColDef(),a=s.field,l=s.newValueHandler,u=s.valueSetter;if(c._.missing(a)&&c._.missing(l)&&c._.missing(u))console.warn(\"ag-Grid: you need either field or valueSetter set on colDef for editing to work\");else{var d,h={node:e,data:e.data,oldValue:this.getValue(n,e),newValue:o,colDef:n.getColDef(),column:n,api:this.gridOptionsWrapper.getApi(),columnApi:this.gridOptionsWrapper.getColumnApi(),context:this.gridOptionsWrapper.getContext()};if(h.newValue=o,void 0===(d=l&&c._.exists(l)?l(h):c._.exists(u)?this.expressionService.evaluate(u,h):this.setValueUsingField(r,a,o,n.isFieldContainsDots()))&&(d=!0),d){e.resetQuickFilterAggregateText(),this.valueCache.onDataChanged(),h.newValue=this.getValue(n,e);var f=n.getColDef().onCellValueChanged;if(\"function\"==typeof f&&setTimeout(function(){return f(h)},0),!i){var g={type:p.Events.EVENT_CELL_VALUE_CHANGED,event:null,rowIndex:e.rowIndex,rowPinned:e.rowPinned,column:h.column,api:h.api,colDef:h.colDef,columnApi:h.columnApi,context:h.context,data:e.data,node:e,oldValue:h.oldValue,newValue:h.newValue,value:h.newValue};this.eventService.dispatchEvent(g)}}}}},e.prototype.setValueUsingField=function(e,t,o,i){if(!t)return!1;if(i)for(var n=t.split(\".\"),r=e;n.length>0&&r;){var s=n.shift();0===n.length?r[s]=o:r=r[s]}else e[t]=o;return!0},e.prototype.executeFilterValueGetter=function(e,t,o,i){var n={data:t,node:i,column:o,colDef:o.getColDef(),api:this.gridOptionsWrapper.getApi(),columnApi:this.gridOptionsWrapper.getColumnApi(),context:this.gridOptionsWrapper.getContext(),getValue:this.getValueCallback.bind(this,i)};return this.expressionService.evaluate(e,n)},e.prototype.executeValueGetter=function(e,t,o,i){var n=o.getId(),r=this.valueCache.getValue(i,n);if(void 0!==r)return r;var s={data:t,node:i,column:o,colDef:o.getColDef(),api:this.gridOptionsWrapper.getApi(),columnApi:this.gridOptionsWrapper.getColumnApi(),context:this.gridOptionsWrapper.getContext(),getValue:this.getValueCallback.bind(this,i)},a=this.expressionService.evaluate(e,s);return this.valueCache.setValue(i,n,a),a},e.prototype.getValueCallback=function(e,t){var o=this.columnController.getPrimaryColumn(t);return o?this.getValue(o,e):null},e.prototype.getKeyForNode=function(e,t){var o=this.getValue(e,t),i=e.getColDef().keyCreator,n=i?i({value:o}):o;return\"string\"==typeof n||null==n?n:(\"[object Object]\"===(n=String(n))&&c._.doOnce(function(){console.warn(\"ag-Grid: a column you are grouping or pivoting by has objects as values. If you want to group by complex objects then either a) use a colDef.keyCreator (se ag-Grid docs) or b) to toString() on the object to return a key\")},\"getKeyForNode - warn about [object,object]\"),n)},i([l.Autowired(\"gridOptionsWrapper\"),n(\"design:type\",r.GridOptionsWrapper)],e.prototype,\"gridOptionsWrapper\",void 0),i([l.Autowired(\"expressionService\"),n(\"design:type\",s.ExpressionService)],e.prototype,\"expressionService\",void 0),i([l.Autowired(\"columnController\"),n(\"design:type\",a.ColumnController)],e.prototype,\"columnController\",void 0),i([l.Autowired(\"eventService\"),n(\"design:type\",u.EventService)],e.prototype,\"eventService\",void 0),i([l.Autowired(\"valueCache\"),n(\"design:type\",d.ValueCache)],e.prototype,\"valueCache\",void 0),i([l.PostConstruct,n(\"design:type\",Function),n(\"design:paramtypes\",[]),n(\"design:returntype\",void 0)],e.prototype,\"init\",null),e=i([l.Bean(\"valueService\")],e)}();t.ValueService=h},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)},r=this&&this.__param||function(e,t){return function(o,i){t(o,i,e)}};Object.defineProperty(t,\"__esModule\",{value:!0});var s=o(12),a=o(0),l=o(0),p=function(){function e(){this.expressionToFunctionCache={}}return e.prototype.setBeans=function(e){this.logger=e.create(\"ExpressionService\")},e.prototype.evaluate=function(e,t){if(\"function\"==typeof e)return e(t);if(\"string\"==typeof e){var o=e;return this.evaluateExpression(o,t)}console.error(\"ag-Grid: value should be either a string or a function\",e)},e.prototype.evaluateExpression=function(e,t){try{return this.createExpressionFunction(e)(t.value,t.context,t.oldValue,t.newValue,t.value,t.node,t.data,t.colDef,t.rowIndex,t.api,t.columnApi,t.getValue,t.column,t.columnGroup)}catch(t){return console.log(\"Processing of the expression failed\"),console.log(\"Expression = \"+e),console.log(\"Exception = \"+t),null}},e.prototype.createExpressionFunction=function(e){if(this.expressionToFunctionCache[e])return this.expressionToFunctionCache[e];var t=this.createFunctionBody(e),o=new Function(\"x, ctx, oldValue, newValue, value, node, data, colDef, rowIndex, api, columnApi, getValue, column, columnGroup\",t);return this.expressionToFunctionCache[e]=o,o},e.prototype.createFunctionBody=function(e){return e.indexOf(\"return\")>=0?e:\"return \"+e+\";\"},i([r(0,l.Qualifier(\"loggerFactory\")),n(\"design:type\",Function),n(\"design:paramtypes\",[s.LoggerFactory]),n(\"design:returntype\",void 0)],e.prototype,\"setBeans\",null),e=i([a.Bean(\"expressionService\")],e)}();t.ExpressionService=p},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(0),s=o(3),a=o(5),l=o(2),p=o(9),u=o(4),d=o(8),c=o(41),h=o(1),f=function(){function e(){}return e.prototype.init=function(){this.eventService.addEventListener(a.Events.EVENT_COLUMN_PIVOT_MODE_CHANGED,this.clearFocusedCell.bind(this)),this.eventService.addEventListener(a.Events.EVENT_COLUMN_EVERYTHING_CHANGED,this.clearFocusedCell.bind(this)),this.eventService.addEventListener(a.Events.EVENT_COLUMN_GROUP_OPENED,this.clearFocusedCell.bind(this)),this.eventService.addEventListener(a.Events.EVENT_COLUMN_ROW_GROUP_CHANGED,this.clearFocusedCell.bind(this))},e.prototype.clearFocusedCell=function(){this.focusedCellPosition=null,this.onCellFocused(!1)},e.prototype.getFocusedCell=function(){return this.focusedCellPosition},e.prototype.getFocusCellToUseAfterRefresh=function(){return this.gridOptionsWrapper.isSuppressFocusAfterRefresh()?null:this.focusedCellPosition&&this.getGridCellForDomElement(document.activeElement)?this.focusedCellPosition:null},e.prototype.getGridCellForDomElement=function(e){for(var t=e;t;){var o=this.gridOptionsWrapper.getDomData(t,c.CellComp.DOM_DATA_KEY_CELL_COMP);if(o)return o.getCellPosition();t=t.parentNode}return null},e.prototype.setFocusedCell=function(e,t,o,i){void 0===i&&(i=!1);var n=h._.makeNull(this.columnController.getGridColumn(t));this.focusedCellPosition={rowIndex:e,rowPinned:h._.makeNull(o),column:n},this.onCellFocused(i)},e.prototype.isCellFocused=function(e){return!h._.missing(this.focusedCellPosition)&&(this.focusedCellPosition.column===e.column&&this.isRowFocused(e.rowIndex,e.rowPinned))},e.prototype.isRowNodeFocused=function(e){return this.isRowFocused(e.rowIndex,e.rowPinned)},e.prototype.isAnyCellFocused=function(){return!!this.focusedCellPosition},e.prototype.isRowFocused=function(e,t){if(h._.missing(this.focusedCellPosition))return!1;var o=h._.makeNull(t);return this.focusedCellPosition.rowIndex===e&&this.focusedCellPosition.rowPinned===o},e.prototype.onCellFocused=function(e){var t={type:a.Events.EVENT_CELL_FOCUSED,forceBrowserFocus:e,rowIndex:null,column:null,floating:null,api:this.gridApi,columnApi:this.columnApi,rowPinned:null};this.focusedCellPosition&&(t.rowIndex=this.focusedCellPosition.rowIndex,t.column=this.focusedCellPosition.column,t.rowPinned=this.focusedCellPosition.rowPinned),this.eventService.dispatchEvent(t)},i([r.Autowired(\"eventService\"),n(\"design:type\",s.EventService)],e.prototype,\"eventService\",void 0),i([r.Autowired(\"gridOptionsWrapper\"),n(\"design:type\",l.GridOptionsWrapper)],e.prototype,\"gridOptionsWrapper\",void 0),i([r.Autowired(\"columnController\"),n(\"design:type\",u.ColumnController)],e.prototype,\"columnController\",void 0),i([r.Autowired(\"columnApi\"),n(\"design:type\",p.ColumnApi)],e.prototype,\"columnApi\",void 0),i([r.Autowired(\"gridApi\"),n(\"design:type\",d.GridApi)],e.prototype,\"gridApi\",void 0),i([r.PostConstruct,n(\"design:type\",Function),n(\"design:paramtypes\",[]),n(\"design:returntype\",void 0)],e.prototype,\"init\",null),e=i([r.Bean(\"focusedCellController\")],e)}();t.FocusedCellController=f},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(11),s=o(0),a=o(2),l=o(9),p=o(4),u=o(3),d=o(5),c=o(8),h=o(1),f=function(){function e(){}var t;return t=e,e.prototype.progressSort=function(e,t,o){void 0===o&&(o=\"api\");var i=this.getNextSortDirection(e);this.setSortForColumn(e,i,t,o)},e.prototype.setSortForColumn=function(e,t,o,i){if(void 0===i&&(i=\"api\"),t!==r.Column.SORT_ASC&&t!==r.Column.SORT_DESC&&(t=null),e.setSort(t,i),e.getSort()){var n=Number((new Date).valueOf());e.setSortedAt(n)}else e.setSortedAt(null);o&&!this.gridOptionsWrapper.isSuppressMultiSort()||this.clearSortBarThisColumn(e,i),this.dispatchSortChangedEvents()},e.prototype.onSortChanged=function(){this.dispatchSortChangedEvents()},e.prototype.dispatchSortChangedEvents=function(){var e={type:d.Events.EVENT_SORT_CHANGED,api:this.gridApi,columnApi:this.columnApi};this.eventService.dispatchEvent(e)},e.prototype.clearSortBarThisColumn=function(e,t){this.columnController.getPrimaryAndSecondaryAndAutoColumns().forEach(function(o){o!==e&&o.setSort(void 0,t)})},e.prototype.getNextSortDirection=function(e){var o;if(o=e.getColDef().sortingOrder?e.getColDef().sortingOrder:this.gridOptionsWrapper.getSortingOrder()?this.gridOptionsWrapper.getSortingOrder():t.DEFAULT_SORTING_ORDER,!Array.isArray(o)||o.length<=0)return console.warn(\"ag-grid: sortingOrder must be an array with at least one element, currently it's \"+o),null;var i,n=o.indexOf(e.getSort()),r=n<0,s=n==o.length-1;return i=r||s?o[0]:o[n+1],t.DEFAULT_SORTING_ORDER.indexOf(i)<0?(console.warn(\"ag-grid: invalid sort type \"+i),null):i},e.prototype.getSortModel=function(){var e=this.getColumnsWithSortingOrdered();return h._.map(e,function(e){return{colId:e.getColId(),sort:e.getSort()}})},e.prototype.setSortModel=function(e,t){var o=this;void 0===t&&(t=\"api\");var i=e&&e.length>0;this.columnController.getPrimaryAndSecondaryAndAutoColumns().forEach(function(n){var r=null,s=-1;if(i&&n.getColDef().sortable)for(var a=0;a<e.length;a++){var l=e[a];\"string\"==typeof l.colId&&\"string\"==typeof n.getColId()&&o.compareColIds(l,n)&&(r=l.sort,s=a)}r?(n.setSort(r,t),n.setSortedAt(s)):(n.setSort(null,t),n.setSortedAt(null))}),this.dispatchSortChangedEvents()},e.prototype.compareColIds=function(e,t){return e.colId===t.getColId()},e.prototype.getColumnsWithSortingOrdered=function(){var e=this.columnController.getPrimaryAndSecondaryAndAutoColumns(),t=h._.filter(e,function(e){return!!e.getSort()});return t.sort(function(e,t){return e.sortedAt-t.sortedAt}),t},e.prototype.getSortForRowController=function(){var e=this.getColumnsWithSortingOrdered();return h._.map(e,function(e){return{inverter:e.getSort()===r.Column.SORT_ASC?1:-1,column:e}})},e.DEFAULT_SORTING_ORDER=[r.Column.SORT_ASC,r.Column.SORT_DESC,null],i([s.Autowired(\"gridOptionsWrapper\"),n(\"design:type\",a.GridOptionsWrapper)],e.prototype,\"gridOptionsWrapper\",void 0),i([s.Autowired(\"columnController\"),n(\"design:type\",p.ColumnController)],e.prototype,\"columnController\",void 0),i([s.Autowired(\"eventService\"),n(\"design:type\",u.EventService)],e.prototype,\"eventService\",void 0),i([s.Autowired(\"columnApi\"),n(\"design:type\",l.ColumnApi)],e.prototype,\"columnApi\",void 0),i([s.Autowired(\"gridApi\"),n(\"design:type\",c.GridApi)],e.prototype,\"gridApi\",void 0),e=t=i([s.Bean(\"sortController\")],e)}();t.SortController=f},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(2),s=o(18),a=o(0),l=o(3),p=o(5),u=o(6),d=o(9),c=o(8),h=o(1),f=function(){function e(){}return e.prototype.init=function(){this.setPinnedTopRowData(this.gridOptionsWrapper.getPinnedTopRowData()),this.setPinnedBottomRowData(this.gridOptionsWrapper.getPinnedBottomRowData())},e.prototype.isEmpty=function(e){var t=e===u.Constants.PINNED_TOP?this.pinnedTopRows:this.pinnedBottomRows;return h._.missingOrEmpty(t)},e.prototype.isRowsToRender=function(e){return!this.isEmpty(e)},e.prototype.getRowAtPixel=function(e,t){var o=t===u.Constants.PINNED_TOP?this.pinnedTopRows:this.pinnedBottomRows;if(h._.missingOrEmpty(o))return 0;for(var i=0;i<o.length;i++){var n=o[i];if(n.rowTop+n.rowHeight-1>=e)return i}return o.length-1},e.prototype.setPinnedTopRowData=function(e){this.pinnedTopRows=this.createNodesFromData(e,!0);var t={type:p.Events.EVENT_PINNED_ROW_DATA_CHANGED,api:this.gridApi,columnApi:this.columnApi};this.eventService.dispatchEvent(t)},e.prototype.setPinnedBottomRowData=function(e){this.pinnedBottomRows=this.createNodesFromData(e,!1);var t={type:p.Events.EVENT_PINNED_ROW_DATA_CHANGED,api:this.gridApi,columnApi:this.columnApi};this.eventService.dispatchEvent(t)},e.prototype.createNodesFromData=function(e,t){var o=this,i=[];if(e){var n=0;e.forEach(function(e,r){var a=new s.RowNode;o.context.wireBean(a),a.data=e,a.id=(t?\"t\":\"b\")+\"-\"+r,a.rowPinned=t?u.Constants.PINNED_TOP:u.Constants.PINNED_BOTTOM,a.setRowTop(n),a.setRowHeight(o.gridOptionsWrapper.getRowHeightForNode(a).height),a.setRowIndex(r),n+=a.rowHeight,i.push(a)})}return i},e.prototype.getPinnedTopRowData=function(){return this.pinnedTopRows},e.prototype.getPinnedBottomRowData=function(){return this.pinnedBottomRows},e.prototype.getPinnedTopTotalHeight=function(){return this.getTotalHeight(this.pinnedTopRows)},e.prototype.getPinnedTopRowCount=function(){return this.pinnedTopRows?this.pinnedTopRows.length:0},e.prototype.getPinnedBottomRowCount=function(){return this.pinnedBottomRows?this.pinnedBottomRows.length:0},e.prototype.getPinnedTopRow=function(e){return this.pinnedTopRows[e]},e.prototype.getPinnedBottomRow=function(e){return this.pinnedBottomRows[e]},e.prototype.forEachPinnedTopRow=function(e){h._.missingOrEmpty(this.pinnedTopRows)||this.pinnedTopRows.forEach(e)},e.prototype.forEachPinnedBottomRow=function(e){h._.missingOrEmpty(this.pinnedBottomRows)||this.pinnedBottomRows.forEach(e)},e.prototype.getPinnedBottomTotalHeight=function(){return this.getTotalHeight(this.pinnedBottomRows)},e.prototype.getTotalHeight=function(e){if(e&&0!==e.length){var t=h._.last(e);return t.rowTop+t.rowHeight}return 0},i([a.Autowired(\"gridOptionsWrapper\"),n(\"design:type\",r.GridOptionsWrapper)],e.prototype,\"gridOptionsWrapper\",void 0),i([a.Autowired(\"eventService\"),n(\"design:type\",l.EventService)],e.prototype,\"eventService\",void 0),i([a.Autowired(\"context\"),n(\"design:type\",a.Context)],e.prototype,\"context\",void 0),i([a.Autowired(\"columnApi\"),n(\"design:type\",d.ColumnApi)],e.prototype,\"columnApi\",void 0),i([a.Autowired(\"gridApi\"),n(\"design:type\",c.GridApi)],e.prototype,\"gridApi\",void 0),i([a.PostConstruct,n(\"design:type\",Function),n(\"design:paramtypes\",[]),n(\"design:returntype\",void 0)],e.prototype,\"init\",null),e=i([a.Bean(\"pinnedRowModel\")],e)}();t.PinnedRowModel=f},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}),r=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},s=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(13),l=o(3),p=o(5),u=o(0),d=o(2),c=o(19),h=o(9),f=o(8),g=o(1),y=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.currentPage=0,t.topDisplayedRowIndex=0,t.bottomDisplayedRowIndex=0,t.pixelOffset=0,t.masterRowCount=0,t}return n(t,e),t.prototype.postConstruct=function(){this.active=this.gridOptionsWrapper.isPagination(),this.paginateChildRows=this.gridOptionsWrapper.isPaginateChildRows(),this.addDestroyableEventListener(this.eventService,p.Events.EVENT_MODEL_UPDATED,this.onModelUpdated.bind(this)),this.addDestroyableEventListener(this.gridOptionsWrapper,\"paginationPageSize\",this.onModelUpdated.bind(this)),this.onModelUpdated()},t.prototype.ensureRowHeightsValid=function(e,t,o,i){var n=this.rowModel.ensureRowHeightsValid(e,t,this.getPageFirstRow(),this.getPageLastRow());return n&&this.calculatePages(),n},t.prototype.onModelUpdated=function(e){this.calculatePages();var t={type:p.Events.EVENT_PAGINATION_CHANGED,animate:!!e&&e.animate,newData:!!e&&e.newData,newPage:!!e&&e.newPage,keepRenderedRows:!!e&&e.keepRenderedRows,api:this.gridApi,columnApi:this.columnApi};this.eventService.dispatchEvent(t)},t.prototype.goToPage=function(e){if(this.active&&this.currentPage!==e){this.currentPage=e;var t={type:p.Events.EVENT_MODEL_UPDATED,animate:!1,keepRenderedRows:!1,newData:!1,newPage:!0,api:this.gridApi,columnApi:this.columnApi};this.onModelUpdated(t)}},t.prototype.getPixelOffset=function(){return this.pixelOffset},t.prototype.getRow=function(e){return this.rowModel.getRow(e)},t.prototype.getRowNode=function(e){return this.rowModel.getRowNode(e)},t.prototype.getRowIndexAtPixel=function(e){return this.rowModel.getRowIndexAtPixel(e)},t.prototype.getCurrentPageHeight=function(){return g._.missing(this.topRowBounds)||g._.missing(this.bottomRowBounds)?0:Math.max(this.bottomRowBounds.rowTop+this.bottomRowBounds.rowHeight-this.topRowBounds.rowTop,0)},t.prototype.isRowPresent=function(e){return!!this.rowModel.isRowPresent(e)&&(e.rowIndex>=this.topDisplayedRowIndex&&e.rowIndex<=this.bottomDisplayedRowIndex)},t.prototype.isEmpty=function(){return this.rowModel.isEmpty()},t.prototype.isRowsToRender=function(){return this.rowModel.isRowsToRender()},t.prototype.getNodesInRangeForSelection=function(e,t){return this.rowModel.getNodesInRangeForSelection(e,t)},t.prototype.forEachNode=function(e){return this.rowModel.forEachNode(e)},t.prototype.getType=function(){return this.rowModel.getType()},t.prototype.getRowBounds=function(e){var t=this.rowModel.getRowBounds(e);return t.rowIndex=e,t},t.prototype.getPageFirstRow=function(){return this.topRowBounds?this.topRowBounds.rowIndex:-1},t.prototype.getPageLastRow=function(){return this.bottomRowBounds?this.bottomRowBounds.rowIndex:-1},t.prototype.getRowCount=function(){return this.rowModel.getRowCount()},t.prototype.goToPageWithIndex=function(e){if(this.active){var t=Math.floor(e/this.pageSize);this.goToPage(t)}},t.prototype.isLastPageFound=function(){return this.rowModel.isLastRowFound()},t.prototype.getCurrentPage=function(){return this.currentPage},t.prototype.goToNextPage=function(){this.goToPage(this.currentPage+1)},t.prototype.goToPreviousPage=function(){this.goToPage(this.currentPage-1)},t.prototype.goToFirstPage=function(){this.goToPage(0)},t.prototype.goToLastPage=function(){var e=this.rowModel.getRowCount(),t=Math.floor(e/this.pageSize);this.goToPage(t)},t.prototype.getPageSize=function(){return this.pageSize},t.prototype.getTotalPages=function(){return this.totalPages},t.prototype.setPageSize=function(){this.pageSize=this.gridOptionsWrapper.getPaginationPageSize(),this.pageSize>=1||(this.pageSize=100)},t.prototype.calculatePages=function(){this.active?(this.setPageSize(),this.paginateChildRows?this.calculatePagesAllRows():this.calculatePagesMasterRowsOnly()):this.calculatedPagesNotActive(),this.topRowBounds=this.rowModel.getRowBounds(this.topDisplayedRowIndex),this.topRowBounds&&(this.topRowBounds.rowIndex=this.topDisplayedRowIndex),this.bottomRowBounds=this.rowModel.getRowBounds(this.bottomDisplayedRowIndex),this.bottomRowBounds&&(this.bottomRowBounds.rowIndex=this.bottomDisplayedRowIndex),this.pixelOffset=g._.exists(this.topRowBounds)?this.topRowBounds.rowTop:0},t.prototype.setZeroRows=function(){this.topDisplayedRowIndex=0,this.bottomDisplayedRowIndex=-1,this.currentPage=0,this.totalPages=0},t.prototype.calculatePagesMasterRowsOnly=function(){if(this.masterRowCount=this.rowModel.getTopLevelRowCount(),0!==this.masterRowCount){var e=this.masterRowCount-1;this.totalPages=Math.floor(e/this.pageSize)+1,this.currentPage>=this.totalPages&&(this.currentPage=this.totalPages-1),(!g._.isNumeric(this.currentPage)||this.currentPage<0)&&(this.currentPage=0);var t=this.pageSize*this.currentPage,o=this.pageSize*(this.currentPage+1)-1;if(o>e&&(o=e),this.topDisplayedRowIndex=this.rowModel.getTopLevelRowDisplayedIndex(t),o===e)this.bottomDisplayedRowIndex=this.rowModel.getRowCount()-1;else{var i=this.rowModel.getTopLevelRowDisplayedIndex(o+1);this.bottomDisplayedRowIndex=i-1}}else this.setZeroRows()},t.prototype.getMasterRowCount=function(){return this.masterRowCount},t.prototype.calculatePagesAllRows=function(){if(this.masterRowCount=this.rowModel.getRowCount(),0!==this.masterRowCount){var e=this.masterRowCount-1;this.totalPages=Math.floor(e/this.pageSize)+1,this.currentPage>=this.totalPages&&(this.currentPage=this.totalPages-1),(!g._.isNumeric(this.currentPage)||this.currentPage<0)&&(this.currentPage=0),this.topDisplayedRowIndex=this.pageSize*this.currentPage,this.bottomDisplayedRowIndex=this.pageSize*(this.currentPage+1)-1,this.bottomDisplayedRowIndex>e&&(this.bottomDisplayedRowIndex=e)}else this.setZeroRows()},t.prototype.calculatedPagesNotActive=function(){this.pageSize=this.rowModel.getRowCount(),this.totalPages=1,this.currentPage=0,this.topDisplayedRowIndex=0,this.bottomDisplayedRowIndex=this.rowModel.getRowCount()-1},r([u.Autowired(\"rowModel\"),s(\"design:type\",Object)],t.prototype,\"rowModel\",void 0),r([u.Autowired(\"eventService\"),s(\"design:type\",l.EventService)],t.prototype,\"eventService\",void 0),r([u.Autowired(\"gridOptionsWrapper\"),s(\"design:type\",d.GridOptionsWrapper)],t.prototype,\"gridOptionsWrapper\",void 0),r([u.Autowired(\"selectionController\"),s(\"design:type\",c.SelectionController)],t.prototype,\"selectionController\",void 0),r([u.Autowired(\"columnApi\"),s(\"design:type\",h.ColumnApi)],t.prototype,\"columnApi\",void 0),r([u.Autowired(\"gridApi\"),s(\"design:type\",f.GridApi)],t.prototype,\"gridApi\",void 0),r([u.PostConstruct,s(\"design:type\",Function),s(\"design:paramtypes\",[]),s(\"design:returntype\",void 0)],t.prototype,\"postConstruct\",null),t=r([u.Bean(\"paginationProxy\")],t)}(a.BeanStub);t.PaginationProxy=y},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(6),s=o(0),a=o(2),l=o(42),p=o(3),u=o(5),d=o(1),c=function(){function e(){this.popupList=[]}return e.prototype.registerGridCore=function(e){this.gridCore=e},e.prototype.getDocument=function(){return this.gridOptionsWrapper.getDocument()},e.prototype.getPopupParent=function(){var e=this.gridOptionsWrapper.getPopupParent();return e||this.gridCore.getRootGui()},e.prototype.positionPopupForMenu=function(e){var t,o=e.eventSource.getBoundingClientRect(),i=this.getDocument(),n=this.getPopupParent();t=n===i.body?i.documentElement.getBoundingClientRect():n.getBoundingClientRect();var r=o.top-t.top;r=this.keepYWithinBounds(e,r);var s=e.ePopup.clientWidth>0?e.ePopup.clientWidth:200;e.ePopup.style.minWidth=s+\"px\";var a,l=t.right-t.left-s;function p(){return o.right-t.left-2}function u(){return o.left-t.left-s}this.gridOptionsWrapper.isEnableRtl()?((a=u())<0&&(a=p()),a>l&&(a=0)):((a=p())>l&&(a=u()),a<0&&(a=0)),e.ePopup.style.left=a+\"px\",e.ePopup.style.top=r+\"px\"},e.prototype.positionPopupUnderMouseEvent=function(e){var t=this.calculatePointerAlign(e.mouseEvent),o=t.x,i=t.y,n=e.ePopup,r=e.nudgeX,s=e.nudgeY;this.positionPopup({ePopup:n,x:o,y:i,nudgeX:r,nudgeY:s,keepWithinBounds:!0}),this.callPostProcessPopup(e.ePopup,null,e.mouseEvent,e.type,e.column,e.rowNode)},e.prototype.calculatePointerAlign=function(e){var t=this.getDocument(),o=this.getPopupParent(),i=o.getBoundingClientRect(),n=t.documentElement.getBoundingClientRect();return{x:e.clientX-(o===t.body?n.left:i.left),y:e.clientY-(o===t.body?n.top:i.top)}},e.prototype.positionPopupUnderComponent=function(e){var t,o=e.eventSource.getBoundingClientRect(),i=this.getDocument(),n=this.getPopupParent(),r=e.alignSide||\"left\";t=n===i.body?i.documentElement.getBoundingClientRect():n.getBoundingClientRect();var s=o.left-t.left;\"right\"===r&&(s-=e.ePopup.offsetWidth-o.width),this.positionPopup({ePopup:e.ePopup,minWidth:e.minWidth,minHeight:e.minHeight,nudgeX:e.nudgeX,nudgeY:e.nudgeY,x:s,y:o.top-t.top+o.height,keepWithinBounds:e.keepWithinBounds}),this.callPostProcessPopup(e.ePopup,e.eventSource,null,e.type,e.column,e.rowNode)},e.prototype.positionPopupOverComponent=function(e){var t,o=e.eventSource.getBoundingClientRect(),i=this.getDocument(),n=this.getPopupParent();t=n===i.body?i.documentElement.getBoundingClientRect():n.getBoundingClientRect(),this.positionPopup({ePopup:e.ePopup,minWidth:e.minWidth,nudgeX:e.nudgeX,nudgeY:e.nudgeY,x:o.left-t.left,y:o.top-t.top,keepWithinBounds:e.keepWithinBounds}),this.callPostProcessPopup(e.ePopup,e.eventSource,null,e.type,e.column,e.rowNode)},e.prototype.callPostProcessPopup=function(e,t,o,i,n,r){var s=this.gridOptionsWrapper.getPostProcessPopupFunc();s&&s({column:n,rowNode:r,ePopup:e,type:i,eventSource:t,mouseEvent:o})},e.prototype.positionPopup=function(e){var t=e.x,o=e.y;e.nudgeX&&(t+=e.nudgeX),e.nudgeY&&(o+=e.nudgeY),e.keepWithinBounds&&(t=this.keepXWithinBounds(e,t),o=this.keepYWithinBounds(e,o)),e.ePopup.style.left=t+\"px\",e.ePopup.style.top=o+\"px\"},e.prototype.keepYWithinBounds=function(e,t){var o=this.gridOptionsWrapper.getDocument(),i=o.documentElement,n=this.getPopupParent(),r=n.getBoundingClientRect(),s=o.documentElement.getBoundingClientRect(),a=n===o.body,l=Math.min(200,r.height),p=0;e.minHeight&&e.minHeight<l?l=e.minHeight:e.ePopup.offsetHeight>0&&(l=e.ePopup.clientHeight,p=d._.getAbsoluteHeight(e.ePopup)-l);var u=a?d._.getAbsoluteHeight(i)+i.scrollTop:r.height;a&&(u-=Math.abs(s.top-r.top));var c=u-l-p-3;return Math.min(Math.max(t,0),Math.abs(c))},e.prototype.keepXWithinBounds=function(e,t){var o=this.gridOptionsWrapper.getDocument(),i=o.documentElement,n=this.getPopupParent(),r=n.getBoundingClientRect(),s=o.documentElement.getBoundingClientRect(),a=n===o.body,l=e.ePopup,p=Math.min(200,r.width),u=0;e.minWidth&&e.minWidth<p?p=e.minWidth:l.offsetWidth>0&&(p=l.offsetWidth,l.style.minWidth=p+\"px\",u=d._.getAbsoluteWidth(l)-p);var c=a?d._.getAbsoluteWidth(i)+i.scrollLeft:r.width;a&&(c-=Math.abs(s.left-r.left));var h=c-p-u-3;return Math.min(Math.max(t,0),Math.abs(h))},e.prototype.addAsModalPopup=function(e,t,o,i){return this.addPopup(!0,e,t,o,i)},e.prototype.addPopup=function(e,t,o,i,n,s){var a=this,l=this.gridOptionsWrapper.getDocument();if(!l)return console.warn(\"ag-grid: could not find the document, document is empty\"),function(){};var p=d._.findIndex(this.popupList,function(e){return e.element===t});if(-1!==p)return this.popupList[p].hideFunc;var c=this.getPopupParent();c.appendChild(t),t.style.top=\"0px\",t.style.left=\"0px\";var h=document.createElement(\"div\"),f=this.environment.getTheme().theme;f&&d._.addCssClass(h,f),d._.addCssClass(h,\"ag-popup\"),d._.addCssClass(t,this.gridOptionsWrapper.isEnableRtl()?\"ag-rtl\":\"ag-ltr\"),h.appendChild(t),c.appendChild(h),s?this.setAlwaysOnTop(h,!0):this.bringPopupToFront(h);var g=!1,y=function(e){(e.which||e.keyCode)===r.Constants.KEY_ESCAPE&&h.contains(document.activeElement)&&C(null)},v=function(e){C(e)},m=function(e){C(null,e)},C=function(e,o){a.isEventFromCurrentPopup(e,o,t)||a.isEventSameChainAsOriginalEvent(n,e,o)||g||(g=!0,c.removeChild(h),l.removeEventListener(\"keydown\",y),l.removeEventListener(\"mousedown\",v),l.removeEventListener(\"touchstart\",m),l.removeEventListener(\"contextmenu\",v),a.eventService.removeEventListener(u.Events.EVENT_DRAG_STARTED,v),i&&i(),a.popupList=a.popupList.filter(function(e){return e.element!==t}))};return window.setTimeout(function(){o&&l.addEventListener(\"keydown\",y),e&&(l.addEventListener(\"mousedown\",v),a.eventService.addEventListener(u.Events.EVENT_DRAG_STARTED,v),l.addEventListener(\"touchstart\",m),l.addEventListener(\"contextmenu\",v))},0),this.popupList.push({element:t,hideFunc:C}),C},e.prototype.isEventFromCurrentPopup=function(e,t,o){var i=e||t;if(!i)return!1;var n=d._.findIndex(this.popupList,function(e){return e.element===o});if(-1===n)return!1;for(var r=n;r<this.popupList.length;r++){var s=this.popupList[r];if(d._.isElementInEventPath(s.element,i))return!0}for(var a=i.target;a&&a!=document.body;){if(a.classList.contains(\"ag-custom-component-popup\")||null===a.parentElement)return!0;a=a.parentElement}},e.prototype.isEventSameChainAsOriginalEvent=function(e,t,o){var i=null;if(t?i=t:o&&(i=o.touches[0]),i&&e){var n=t?t.screenX:0,r=t?t.screenY:0,s=Math.abs(e.screenX-n)<5,a=Math.abs(e.screenY-r)<5;if(s&&a)return!0}return!1},e.prototype.getWrapper=function(e){for(;!d._.containsClass(e,\"ag-popup\")&&e.parentElement;)e=e.parentElement;return d._.containsClass(e,\"ag-popup\")?e:null},e.prototype.setAlwaysOnTop=function(e,t){var o=this.getWrapper(e);o&&(d._.addOrRemoveCssClass(o,\"ag-always-on-top\",!!t),t&&this.bringPopupToFront(o))},e.prototype.bringPopupToFront=function(e){var t=this.getPopupParent(),o=Array.prototype.slice.call(t.querySelectorAll(\".ag-popup\")),i=o.length,n=Array.prototype.slice.call(t.querySelectorAll(\".ag-popup.ag-always-on-top\")),r=n.length,s=this.getWrapper(e);if(s&&!(i<=1)&&t.contains(e)){var a=o.indexOf(s);if(r)d._.containsClass(s,\"ag-always-on-top\")?a!==i-1&&d._.last(n).insertAdjacentElement(\"afterend\",s):a!==i-r-1&&n[0].insertAdjacentElement(\"beforebegin\",s);else a!==i-1&&d._.last(o).insertAdjacentElement(\"afterend\",s);var l={type:\"popupToFront\",api:this.gridOptionsWrapper.getApi(),columnApi:this.gridOptionsWrapper.getColumnApi(),eWrapper:s};this.eventService.dispatchEvent(l)}},i([s.Autowired(\"gridOptionsWrapper\"),n(\"design:type\",a.GridOptionsWrapper)],e.prototype,\"gridOptionsWrapper\",void 0),i([s.Autowired(\"environment\"),n(\"design:type\",l.Environment)],e.prototype,\"environment\",void 0),i([s.Autowired(\"eventService\"),n(\"design:type\",p.EventService)],e.prototype,\"eventService\",void 0),e=i([s.Bean(\"popupService\")],e)}();t.PopupService=c},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}),r=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},s=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var a,l=o(10),p=o(104),u=o(54),d=o(1);!function(e){e[e.One=0]=\"One\",e[e.Two=1]=\"Two\"}(a=t.ConditionPosition||(t.ConditionPosition={}));var c={loadingOoo:\"Loading...\",empty:\"Choose One\",equals:\"Equals\",notEqual:\"Not equal\",lessThan:\"Less than\",greaterThan:\"Greater than\",inRange:\"In range\",lessThanOrEqual:\"Less than or equals\",greaterThanOrEqual:\"Greater than or equals\",filterOoo:\"Filter...\",contains:\"Contains\",notContains:\"Not contains\",startsWith:\"Starts with\",endsWith:\"Ends with\",searchOoo:\"Search...\",selectAll:\"Select All\",applyFilter:\"Apply Filter\",clearFilter:\"Clear Filter\",andCondition:\"AND\",orCondition:\"OR\"},h=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t.prototype.showValueFrom=function(e){return!this.doesFilterHaveHiddenInput(e)&&e!==t.EMPTY},t.prototype.showValueTo=function(e){return e===t.IN_RANGE},t.prototype.onFloatingFilterChanged=function(e,t){this.setValueFromFloatingFilter(t),this.setTypeFromFloatingFilter(e),this.onUiChanged(!0)},t.prototype.setTypeFromFloatingFilter=function(e){this.eType1.value=e,this.eType2.value=null,this.eJoinOperatorAnd.checked=!0},t.prototype.getModelFromUi=function(){return this.isConditionUiComplete(a.One)?this.isAllowTwoConditions()&&this.isConditionUiComplete(a.Two)?{filterType:this.getFilterType(),operator:this.getJoinOperator(),condition1:this.createCondition(a.One),condition2:this.createCondition(a.Two)}:this.createCondition(a.One):null},t.prototype.getCondition1Type=function(){return this.eType1.value},t.prototype.getCondition2Type=function(){return this.eType2.value},t.prototype.getJoinOperator=function(){return this.eJoinOperatorOr.checked?\"OR\":\"AND\"},t.prototype.areModelsEqual=function(e,t){if(!e&&!t)return!0;if(!e&&t||e&&!t)return!1;var o,i=!e.operator,n=!t.operator;if(!i&&n||i&&!n)return!1;if(i){var r=e,s=t;o=this.areSimpleModelsEqual(r,s)}else{var a=e,l=t;o=a.operator===l.operator&&this.areSimpleModelsEqual(a.condition1,l.condition1)&&this.areSimpleModelsEqual(a.condition2,l.condition2)}return o},t.prototype.setModelIntoUi=function(e){if(e.operator){var t=e,o=\"OR\"===t.operator;this.eJoinOperatorAnd.checked=!o,this.eJoinOperatorOr.checked=o,this.eType1.value=t.condition1.type,this.eType2.value=t.condition2.type,this.setConditionIntoUi(t.condition1,a.One),this.setConditionIntoUi(t.condition2,a.Two)}else{var i=e;this.eJoinOperatorAnd.checked=!0,this.eJoinOperatorOr.checked=!1,this.eType1.value=i.type,this.eType2.value=this.optionsFactory.getDefaultOption(),this.setConditionIntoUi(i,a.One),this.setConditionIntoUi(null,a.Two)}},t.prototype.doesFilterPass=function(e){var t=this.getModel();if(t.operator){var o=t,i=this.individualConditionPasses(e,o.condition1),n=this.individualConditionPasses(e,o.condition2);return\"AND\"===o.operator?i&&n:i||n}var r=t;return this.individualConditionPasses(e,r)},t.prototype.setParams=function(t){e.prototype.setParams.call(this,t),this.simpleFilterParams=t,this.optionsFactory=new p.OptionsFactory,this.optionsFactory.init(t,this.getDefaultFilterOptions()),this.allowTwoConditions=!t.suppressAndOrCondition,this.putOptionsIntoDropdown(),this.addChangedListeners()},t.prototype.putOptionsIntoDropdown=function(){var e=this,t=this.optionsFactory.getFilterOptions();t.forEach(function(t){var o=function(){var o=\"string\"==typeof t?t:t.displayKey,i=e.translate(o),n=document.createElement(\"option\");return n.text=i,n.value=o,n};e.eType1.add(o()),e.eType2.add(o())});var o=t.length<=1;this.eType1.disabled=o,this.eType2.disabled=o},t.prototype.isAllowTwoConditions=function(){return this.allowTwoConditions},t.prototype.createBodyTemplate=function(){var e=this.createValueTemplate(a.One),t=this.createValueTemplate(a.Two),o=\"ag-simple-filter-and-or-\"+this.getCompId(),i=this.gridOptionsWrapper.getLocaleTextFunc();return'<select class=\"ag-filter-select\" ref=\"eOptions1\"></select>\\n                '+e+\"\\n                \"+('<div class=\"ag-filter-condition\" ref=\"eJoinOperatorPanel\">\\n                    <label>\\n                        <input ref=\"eJoinOperatorAnd\" type=\"radio\" class=\"and\" name=\"'+o+'\" value=\"AND\")} checked=\"checked\" />\\n                        '+i(\"andCondition\",\"AND\")+'\\n                    </label>\\n                    <label>\\n                        <input ref=\"eJoinOperatorOr\" type=\"radio\" class=\"or\" name=\"'+o+'\" value=\"OR\" />\\n                        '+i(\"orCondition\",\"OR\")+\"\\n                    </label>\\n                </div>\")+'\\n                <select class=\"ag-filter-select\" ref=\"eOptions2\"></select>\\n                '+t},t.prototype.updateUiVisibility=function(){var e=this.isConditionUiComplete(a.One),t=this.allowTwoConditions&&e;d._.setDisplayed(this.eCondition2Body,t),d._.setDisplayed(this.eType2,t),d._.setDisplayed(this.eJoinOperatorPanel,t)},t.prototype.resetUiToDefaults=function(){this.eJoinOperatorAnd.checked=!0;var e=this.optionsFactory.getDefaultOption();this.eType1.value=e,this.eType2.value=e},t.prototype.translate=function(e){var t=this.gridOptionsWrapper.getLocaleTextFunc(),o=c[e];return!o&&this.optionsFactory.getCustomOption(e)&&(o=this.optionsFactory.getCustomOption(e).displayName),t(e,o)},t.prototype.addChangedListeners=function(){var e=this,t=function(){return e.onUiChanged()};this.addDestroyableEventListener(this.eType1,\"change\",t),this.addDestroyableEventListener(this.eType2,\"change\",t),this.addDestroyableEventListener(this.eJoinOperatorOr,\"change\",t),this.addDestroyableEventListener(this.eJoinOperatorAnd,\"change\",t)},t.prototype.doesFilterHaveHiddenInput=function(e){var t=this.optionsFactory.getCustomOption(e);return t&&t.hideFilterInput},t.EMPTY=\"empty\",t.EQUALS=\"equals\",t.NOT_EQUAL=\"notEqual\",t.LESS_THAN=\"lessThan\",t.LESS_THAN_OR_EQUAL=\"lessThanOrEqual\",t.GREATER_THAN=\"greaterThan\",t.GREATER_THAN_OR_EQUAL=\"greaterThanOrEqual\",t.IN_RANGE=\"inRange\",t.CONTAINS=\"contains\",t.NOT_CONTAINS=\"notContains\",t.STARTS_WITH=\"startsWith\",t.ENDS_WITH=\"endsWith\",r([l.RefSelector(\"eOptions1\"),s(\"design:type\",HTMLSelectElement)],t.prototype,\"eType1\",void 0),r([l.RefSelector(\"eOptions2\"),s(\"design:type\",HTMLSelectElement)],t.prototype,\"eType2\",void 0),r([l.RefSelector(\"eJoinOperatorAnd\"),s(\"design:type\",HTMLInputElement)],t.prototype,\"eJoinOperatorAnd\",void 0),r([l.RefSelector(\"eJoinOperatorOr\"),s(\"design:type\",HTMLInputElement)],t.prototype,\"eJoinOperatorOr\",void 0),r([l.RefSelector(\"eCondition2Body\"),s(\"design:type\",HTMLElement)],t.prototype,\"eCondition2Body\",void 0),r([l.RefSelector(\"eJoinOperatorPanel\"),s(\"design:type\",HTMLElement)],t.prototype,\"eJoinOperatorPanel\",void 0),t}(u.ProvidedFilter);t.SimpleFilter=h},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */Object.defineProperty(t,\"__esModule\",{value:!0});var i=function(){function e(){}return e.EVENT_COLUMN_EVERYTHING_CHANGED=\"columnEverythingChanged\",e.EVENT_NEW_COLUMNS_LOADED=\"newColumnsLoaded\",e.EVENT_COLUMN_PIVOT_MODE_CHANGED=\"columnPivotModeChanged\",e.EVENT_COLUMN_ROW_GROUP_CHANGED=\"columnRowGroupChanged\",e.EVENT_EXPAND_COLLAPSE_ALL=\"expandOrCollapseAll\",e.EVENT_COLUMN_PIVOT_CHANGED=\"columnPivotChanged\",e.EVENT_GRID_COLUMNS_CHANGED=\"gridColumnsChanged\",e.EVENT_COLUMN_VALUE_CHANGED=\"columnValueChanged\",e.EVENT_COLUMN_MOVED=\"columnMoved\",e.EVENT_COLUMN_VISIBLE=\"columnVisible\",e.EVENT_COLUMN_PINNED=\"columnPinned\",e.EVENT_COLUMN_GROUP_OPENED=\"columnGroupOpened\",e.EVENT_COLUMN_RESIZED=\"columnResized\",e.EVENT_DISPLAYED_COLUMNS_CHANGED=\"displayedColumnsChanged\",e.EVENT_VIRTUAL_COLUMNS_CHANGED=\"virtualColumnsChanged\",e.EVENT_ROW_GROUP_OPENED=\"rowGroupOpened\",e.EVENT_ROW_DATA_CHANGED=\"rowDataChanged\",e.EVENT_ROW_DATA_UPDATED=\"rowDataUpdated\",e.EVENT_PINNED_ROW_DATA_CHANGED=\"pinnedRowDataChanged\",e.EVENT_RANGE_SELECTION_CHANGED=\"rangeSelectionChanged\",e.EVENT_CHART_RANGE_SELECTION_CHANGED=\"chartRangeSelectionChanged\",e.EVENT_CHART_OPTIONS_CHANGED=\"chartOptionsChanged\",e.EVENT_TOOL_PANEL_VISIBLE_CHANGED=\"toolPanelVisibleChanged\",e.EVENT_MODEL_UPDATED=\"modelUpdated\",e.EVENT_PASTE_START=\"pasteStart\",e.EVENT_PASTE_END=\"pasteEnd\",e.EVENT_CELL_CLICKED=\"cellClicked\",e.EVENT_CELL_DOUBLE_CLICKED=\"cellDoubleClicked\",e.EVENT_CELL_MOUSE_DOWN=\"cellMouseDown\",e.EVENT_CELL_CONTEXT_MENU=\"cellContextMenu\",e.EVENT_CELL_VALUE_CHANGED=\"cellValueChanged\",e.EVENT_ROW_VALUE_CHANGED=\"rowValueChanged\",e.EVENT_CELL_FOCUSED=\"cellFocused\",e.EVENT_ROW_SELECTED=\"rowSelected\",e.EVENT_SELECTION_CHANGED=\"selectionChanged\",e.EVENT_CELL_KEY_DOWN=\"cellKeyDown\",e.EVENT_CELL_KEY_PRESS=\"cellKeyPress\",e.EVENT_CELL_MOUSE_OVER=\"cellMouseOver\",e.EVENT_CELL_MOUSE_OUT=\"cellMouseOut\",e.EVENT_FILTER_CHANGED=\"filterChanged\",e.EVENT_FILTER_MODIFIED=\"filterModified\",e.EVENT_FILTER_OPENED=\"filterOpened\",e.EVENT_SORT_CHANGED=\"sortChanged\",e.EVENT_VIRTUAL_ROW_REMOVED=\"virtualRowRemoved\",e.EVENT_ROW_CLICKED=\"rowClicked\",e.EVENT_ROW_DOUBLE_CLICKED=\"rowDoubleClicked\",e.EVENT_GRID_READY=\"gridReady\",e.EVENT_GRID_SIZE_CHANGED=\"gridSizeChanged\",e.EVENT_VIEWPORT_CHANGED=\"viewportChanged\",e.EVENT_FIRST_DATA_RENDERED=\"firstDataRendered\",e.EVENT_DRAG_STARTED=\"dragStarted\",e.EVENT_DRAG_STOPPED=\"dragStopped\",e.EVENT_ROW_EDITING_STARTED=\"rowEditingStarted\",e.EVENT_ROW_EDITING_STOPPED=\"rowEditingStopped\",e.EVENT_CELL_EDITING_STARTED=\"cellEditingStarted\",e.EVENT_CELL_EDITING_STOPPED=\"cellEditingStopped\",e.EVENT_BODY_SCROLL=\"bodyScroll\",e.EVENT_ANIMATION_QUEUE_EMPTY=\"animationQueueEmpty\",e.EVENT_HEIGHT_SCALE_CHANGED=\"heightScaleChanged\",e.EVENT_PAGINATION_CHANGED=\"paginationChanged\",e.EVENT_COMPONENT_STATE_CHANGED=\"componentStateChanged\",e.EVENT_BODY_HEIGHT_CHANGED=\"bodyHeightChanged\",e.EVENT_DISPLAYED_COLUMNS_WIDTH_CHANGED=\"displayedColumnsWidthChanged\",e.EVENT_SCROLL_VISIBILITY_CHANGED=\"scrollVisibilityChanged\",e.EVENT_COLUMN_HOVER_CHANGED=\"columnHoverChanged\",e.EVENT_FLASH_CELLS=\"flashCells\",e.EVENT_ROW_DRAG_ENTER=\"rowDragEnter\",e.EVENT_ROW_DRAG_MOVE=\"rowDragMove\",e.EVENT_ROW_DRAG_LEAVE=\"rowDragLeave\",e.EVENT_ROW_DRAG_END=\"rowDragEnd\",e.EVENT_COLUMN_ROW_GROUP_CHANGE_REQUEST=\"columnRowGroupChangeRequest\",e.EVENT_COLUMN_PIVOT_CHANGE_REQUEST=\"columnPivotChangeRequest\",e.EVENT_COLUMN_VALUE_CHANGE_REQUEST=\"columnValueChangeRequest\",e.EVENT_COLUMN_AGG_FUNC_CHANGE_REQUEST=\"columnAggFuncChangeRequest\",e}();t.Events=i},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(11),s=o(3),a=o(0),l=o(2),p=o(1),u=function(){function e(e,t,o,i){this.displayedChildren=[],this.localEventService=new s.EventService,this.groupId=t,this.instanceId=o,this.originalColumnGroup=e,this.pinned=i}return e.createUniqueId=function(e,t){return e+\"_\"+t},e.prototype.reset=function(){this.parent=null,this.children=null,this.displayedChildren=null},e.prototype.getParent=function(){return this.parent},e.prototype.setParent=function(e){this.parent=e},e.prototype.getUniqueId=function(){return e.createUniqueId(this.groupId,this.instanceId)},e.prototype.isEmptyGroup=function(){return 0===this.displayedChildren.length},e.prototype.isMoving=function(){var e=this.getOriginalColumnGroup().getLeafColumns();if(!e||0===e.length)return!1;var t=!0;return e.forEach(function(e){e.isMoving()||(t=!1)}),t},e.prototype.checkLeft=function(){if(this.displayedChildren.forEach(function(t){t instanceof e&&t.checkLeft()}),this.displayedChildren.length>0)if(this.gridOptionsWrapper.isEnableRtl()){var t=p._.last(this.displayedChildren).getLeft();this.setLeft(t)}else{var o=this.displayedChildren[0].getLeft();this.setLeft(o)}else this.setLeft(null)},e.prototype.getLeft=function(){return this.left},e.prototype.getOldLeft=function(){return this.oldLeft},e.prototype.setLeft=function(t){this.oldLeft=t,this.left!==t&&(this.left=t,this.localEventService.dispatchEvent(this.createAgEvent(e.EVENT_LEFT_CHANGED)))},e.prototype.getPinned=function(){return this.pinned},e.prototype.createAgEvent=function(e){return{type:e}},e.prototype.addEventListener=function(e,t){this.localEventService.addEventListener(e,t)},e.prototype.removeEventListener=function(e,t){this.localEventService.removeEventListener(e,t)},e.prototype.getGroupId=function(){return this.groupId},e.prototype.getInstanceId=function(){return this.instanceId},e.prototype.isChildInThisGroupDeepSearch=function(t){var o=!1;return this.children.forEach(function(i){t===i&&(o=!0),i instanceof e&&i.isChildInThisGroupDeepSearch(t)&&(o=!0)}),o},e.prototype.getActualWidth=function(){var e=0;return this.displayedChildren&&this.displayedChildren.forEach(function(t){e+=t.getActualWidth()}),e},e.prototype.isResizable=function(){if(!this.displayedChildren)return!1;var e=!1;return this.displayedChildren.forEach(function(t){t.isResizable()&&(e=!0)}),e},e.prototype.getMinWidth=function(){var e=0;return this.displayedChildren.forEach(function(t){e+=t.getMinWidth()}),e},e.prototype.addChild=function(e){this.children||(this.children=[]),this.children.push(e)},e.prototype.getDisplayedChildren=function(){return this.displayedChildren},e.prototype.getLeafColumns=function(){var e=[];return this.addLeafColumns(e),e},e.prototype.getDisplayedLeafColumns=function(){var e=[];return this.addDisplayedLeafColumns(e),e},e.prototype.getDefinition=function(){return this.originalColumnGroup.getColGroupDef()},e.prototype.getColGroupDef=function(){return this.originalColumnGroup.getColGroupDef()},e.prototype.isPadding=function(){return this.originalColumnGroup.isPadding()},e.prototype.isExpandable=function(){return this.originalColumnGroup.isExpandable()},e.prototype.isExpanded=function(){return this.originalColumnGroup.isExpanded()},e.prototype.setExpanded=function(e){this.originalColumnGroup.setExpanded(e)},e.prototype.addDisplayedLeafColumns=function(t){this.displayedChildren.forEach(function(o){o instanceof r.Column?t.push(o):o instanceof e&&o.addDisplayedLeafColumns(t)})},e.prototype.addLeafColumns=function(t){this.children.forEach(function(o){o instanceof r.Column?t.push(o):o instanceof e&&o.addLeafColumns(t)})},e.prototype.getChildren=function(){return this.children},e.prototype.getColumnGroupShow=function(){return this.originalColumnGroup.getColumnGroupShow()},e.prototype.getOriginalColumnGroup=function(){return this.originalColumnGroup},e.prototype.calculateDisplayedColumns=function(){var t=this;this.displayedChildren=[];var o=this;if(this.isPadding())for(;o.getParent()&&o.isPadding();)o=o.getParent();o.originalColumnGroup.isExpandable()?this.children.forEach(function(i){switch(i.getColumnGroupShow()){case e.HEADER_GROUP_SHOW_OPEN:o.originalColumnGroup.isExpanded()&&t.displayedChildren.push(i);break;case e.HEADER_GROUP_SHOW_CLOSED:o.originalColumnGroup.isExpanded()||t.displayedChildren.push(i);break;default:t.displayedChildren.push(i)}}):this.displayedChildren=this.children,this.localEventService.dispatchEvent(this.createAgEvent(e.EVENT_DISPLAYED_CHILDREN_CHANGED))},e.HEADER_GROUP_SHOW_OPEN=\"open\",e.HEADER_GROUP_SHOW_CLOSED=\"closed\",e.HEADER_GROUP_PADDING=\"padding\",e.EVENT_LEFT_CHANGED=\"leftChanged\",e.EVENT_DISPLAYED_CHILDREN_CHANGED=\"displayedChildrenChanged\",i([a.Autowired(\"gridOptionsWrapper\"),n(\"design:type\",l.GridOptionsWrapper)],e.prototype,\"gridOptionsWrapper\",void 0),e}();t.ColumnGroup=u},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(0),s=o(12),a=o(3),l=o(5),p=o(2),u=o(9),d=o(8),c=o(1),h=function(){function e(){this.onMouseUpListener=this.onMouseUp.bind(this),this.onMouseMoveListener=this.onMouseMove.bind(this),this.onTouchEndListener=this.onTouchUp.bind(this),this.onTouchMoveListener=this.onTouchMove.bind(this),this.dragEndFunctions=[],this.dragSources=[]}return e.prototype.init=function(){this.logger=this.loggerFactory.create(\"DragService\")},e.prototype.destroy=function(){this.dragSources.forEach(this.removeListener.bind(this)),this.dragSources.length=0},e.prototype.removeListener=function(e){var t=e.dragSource.eElement,o=e.mouseDownListener;if(t.removeEventListener(\"mousedown\",o),e.touchEnabled){var i=e.touchStartListener;t.removeEventListener(\"touchstart\",i,{passive:!0})}},e.prototype.removeDragSource=function(e){var t=c._.find(this.dragSources,function(t){return t.dragSource===e});t&&(this.removeListener(t),c._.removeFromArray(this.dragSources,t))},e.prototype.setNoSelectToBody=function(e){var t=this.gridOptionsWrapper.getDocument().querySelector(\"body\");c._.exists(t)&&c._.addOrRemoveCssClass(t,\"ag-unselectable\",e)},e.prototype.addDragSource=function(e,t){void 0===t&&(t=!1);var o=this.onMouseDown.bind(this,e);e.eElement.addEventListener(\"mousedown\",o);var i=null,n=this.gridOptionsWrapper.isSuppressTouch();t&&!n&&(i=this.onTouchStart.bind(this,e),e.eElement.addEventListener(\"touchstart\",i,{passive:!1})),this.dragSources.push({dragSource:e,mouseDownListener:o,touchStartListener:i,touchEnabled:t})},e.prototype.onTouchStart=function(e,t){var o=this;this.currentDragParams=e,this.dragging=!1;var i=t.touches[0];this.touchLastTime=i,this.touchStart=i,t.preventDefault(),e.eElement.addEventListener(\"touchmove\",this.onTouchMoveListener,{passive:!0}),e.eElement.addEventListener(\"touchend\",this.onTouchEndListener,{passive:!0}),e.eElement.addEventListener(\"touchcancel\",this.onTouchEndListener,{passive:!0}),this.dragEndFunctions.push(function(){e.eElement.removeEventListener(\"touchmove\",o.onTouchMoveListener,{passive:!0}),e.eElement.removeEventListener(\"touchend\",o.onTouchEndListener,{passive:!0}),e.eElement.removeEventListener(\"touchcancel\",o.onTouchEndListener,{passive:!0})}),0===e.dragStartPixels&&this.onCommonMove(i,this.touchStart)},e.prototype.onMouseDown=function(e,t){var o=this;if(!(e.skipMouseEvent&&e.skipMouseEvent(t)||t._alreadyProcessedByDragService||(t._alreadyProcessedByDragService=!0,0!==t.button))){this.currentDragParams=e,this.dragging=!1,this.mouseStartEvent=t;var i=this.gridOptionsWrapper.getDocument();this.setNoSelectToBody(!0),i.addEventListener(\"mousemove\",this.onMouseMoveListener),i.addEventListener(\"mouseup\",this.onMouseUpListener),this.dragEndFunctions.push(function(){i.removeEventListener(\"mousemove\",o.onMouseMoveListener),i.removeEventListener(\"mouseup\",o.onMouseUpListener)}),0===e.dragStartPixels&&this.onMouseMove(t)}},e.prototype.isEventNearStartEvent=function(e,t){var o=this.currentDragParams.dragStartPixels,i=c._.exists(o)?o:4;return c._.areEventsNear(e,t,i)},e.prototype.getFirstActiveTouch=function(e){for(var t=0;t<e.length;t++)if(e[t].identifier===this.touchStart.identifier)return e[t];return null},e.prototype.onCommonMove=function(e,t){if(!this.dragging){if(!this.dragging&&this.isEventNearStartEvent(e,t))return;this.dragging=!0;var o={type:l.Events.EVENT_DRAG_STARTED,api:this.gridApi,columnApi:this.columnApi};this.eventService.dispatchEvent(o),this.currentDragParams.onDragStart(t)}this.currentDragParams.onDragging(e)},e.prototype.onTouchMove=function(e){var t=this.getFirstActiveTouch(e.touches);t&&this.onCommonMove(t,this.touchStart)},e.prototype.onMouseMove=function(e){this.onCommonMove(e,this.mouseStartEvent)},e.prototype.onTouchUp=function(e){var t=this.getFirstActiveTouch(e.changedTouches);t||(t=this.touchLastTime),this.onUpCommon(t)},e.prototype.onMouseUp=function(e){this.onUpCommon(e)},e.prototype.onUpCommon=function(e){if(this.dragging){this.dragging=!1,this.currentDragParams.onDragStop(e);var t={type:l.Events.EVENT_DRAG_STOPPED,api:this.gridApi,columnApi:this.columnApi};this.eventService.dispatchEvent(t)}this.setNoSelectToBody(!1),this.mouseStartEvent=null,this.touchStart=null,this.touchLastTime=null,this.currentDragParams=null,this.dragEndFunctions.forEach(function(e){return e()}),this.dragEndFunctions.length=0},i([r.Autowired(\"loggerFactory\"),n(\"design:type\",s.LoggerFactory)],e.prototype,\"loggerFactory\",void 0),i([r.Autowired(\"eventService\"),n(\"design:type\",a.EventService)],e.prototype,\"eventService\",void 0),i([r.Autowired(\"gridOptionsWrapper\"),n(\"design:type\",p.GridOptionsWrapper)],e.prototype,\"gridOptionsWrapper\",void 0),i([r.Autowired(\"columnApi\"),n(\"design:type\",u.ColumnApi)],e.prototype,\"columnApi\",void 0),i([r.Autowired(\"gridApi\"),n(\"design:type\",d.GridApi)],e.prototype,\"gridApi\",void 0),i([r.PostConstruct,n(\"design:type\",Function),n(\"design:paramtypes\",[]),n(\"design:returntype\",void 0)],e.prototype,\"init\",null),i([r.PreDestroy,n(\"design:type\",Function),n(\"design:paramtypes\",[]),n(\"design:returntype\",void 0)],e.prototype,\"destroy\",null),e=i([r.Bean(\"dragService\")],e)}();t.DragService=h},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(0),s=o(9),a=o(4),l=o(8),p=o(2),u=o(21),d=o(17),c=o(70),h=o(20),f=o(3),g=o(52),y=o(22),v=o(53),m=o(26),C=o(44),E=o(83),w=o(46),R=o(25),_=o(37),O=o(16),S=o(15),b=o(23),P=o(14),A=o(55),D=o(84),T=o(110),F=o(85),N=o(56),L=function(){function e(){}return e.prototype.registerGridComp=function(e){this.gridPanel=e},e.prototype.postConstruct=function(){this.doingMasterDetail=this.gridOptionsWrapper.isMasterDetail()},i([r.Autowired(\"paginationProxy\"),n(\"design:type\",R.PaginationProxy)],e.prototype,\"paginationProxy\",void 0),i([r.Autowired(\"context\"),n(\"design:type\",r.Context)],e.prototype,\"context\",void 0),i([r.Autowired(\"columnApi\"),n(\"design:type\",s.ColumnApi)],e.prototype,\"columnApi\",void 0),i([r.Autowired(\"gridApi\"),n(\"design:type\",l.GridApi)],e.prototype,\"gridApi\",void 0),i([r.Autowired(\"gridOptionsWrapper\"),n(\"design:type\",p.GridOptionsWrapper)],e.prototype,\"gridOptionsWrapper\",void 0),i([r.Autowired(\"expressionService\"),n(\"design:type\",u.ExpressionService)],e.prototype,\"expressionService\",void 0),i([r.Autowired(\"rowRenderer\"),n(\"design:type\",d.RowRenderer)],e.prototype,\"rowRenderer\",void 0),i([r.Autowired(\"$compile\"),n(\"design:type\",Object)],e.prototype,\"$compile\",void 0),i([r.Autowired(\"templateService\"),n(\"design:type\",c.TemplateService)],e.prototype,\"templateService\",void 0),i([r.Autowired(\"valueService\"),n(\"design:type\",h.ValueService)],e.prototype,\"valueService\",void 0),i([r.Autowired(\"eventService\"),n(\"design:type\",f.EventService)],e.prototype,\"eventService\",void 0),i([r.Autowired(\"columnController\"),n(\"design:type\",a.ColumnController)],e.prototype,\"columnController\",void 0),i([r.Autowired(\"columnAnimationService\"),n(\"design:type\",g.ColumnAnimationService)],e.prototype,\"columnAnimationService\",void 0),i([r.Optional(\"rangeController\"),n(\"design:type\",Object)],e.prototype,\"rangeController\",void 0),i([r.Autowired(\"focusedCellController\"),n(\"design:type\",y.FocusedCellController)],e.prototype,\"focusedCellController\",void 0),i([r.Optional(\"contextMenuFactory\"),n(\"design:type\",Object)],e.prototype,\"contextMenuFactory\",void 0),i([r.Autowired(\"cellRendererFactory\"),n(\"design:type\",v.CellRendererFactory)],e.prototype,\"cellRendererFactory\",void 0),i([r.Autowired(\"popupService\"),n(\"design:type\",m.PopupService)],e.prototype,\"popupService\",void 0),i([r.Autowired(\"valueFormatterService\"),n(\"design:type\",C.ValueFormatterService)],e.prototype,\"valueFormatterService\",void 0),i([r.Autowired(\"stylingService\"),n(\"design:type\",E.StylingService)],e.prototype,\"stylingService\",void 0),i([r.Autowired(\"columnHoverService\"),n(\"design:type\",w.ColumnHoverService)],e.prototype,\"columnHoverService\",void 0),i([r.Autowired(\"enterprise\"),n(\"design:type\",Boolean)],e.prototype,\"enterprise\",void 0),i([r.Autowired(\"userComponentFactory\"),n(\"design:type\",O.UserComponentFactory)],e.prototype,\"userComponentFactory\",void 0),i([r.Autowired(\"animationFrameService\"),n(\"design:type\",_.AnimationFrameService)],e.prototype,\"taskQueue\",void 0),i([r.Autowired(\"dragAndDropService\"),n(\"design:type\",S.DragAndDropService)],e.prototype,\"dragAndDropService\",void 0),i([r.Autowired(\"sortController\"),n(\"design:type\",b.SortController)],e.prototype,\"sortController\",void 0),i([r.Autowired(\"filterManager\"),n(\"design:type\",P.FilterManager)],e.prototype,\"filterManager\",void 0),i([r.Autowired(\"maxDivHeightScaler\"),n(\"design:type\",A.MaxDivHeightScaler)],e.prototype,\"maxDivHeightScaler\",void 0),i([r.Autowired(\"tooltipManager\"),n(\"design:type\",D.TooltipManager)],e.prototype,\"tooltipManager\",void 0),i([r.Autowired(\"frameworkOverrides\"),n(\"design:type\",Object)],e.prototype,\"frameworkOverrides\",void 0),i([r.Autowired(\"detailRowCompCache\"),n(\"design:type\",T.DetailRowCompCache)],e.prototype,\"detailRowCompCache\",void 0),i([r.Autowired(\"cellPositionUtils\"),n(\"design:type\",F.CellPositionUtils)],e.prototype,\"cellPositionUtils\",void 0),i([r.Autowired(\"rowPositionUtils\"),n(\"design:type\",N.RowPositionUtils)],e.prototype,\"rowPositionUtils\",void 0),i([r.PostConstruct,n(\"design:type\",Function),n(\"design:paramtypes\",[]),n(\"design:returntype\",void 0)],e.prototype,\"postConstruct\",null),e=i([r.Bean(\"beans\")],e)}();t.Beans=L},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)});Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(87),s=o(1),a=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t.prototype.onValueChange=function(e){var o=this;return this.addDestroyableEventListener(this,t.EVENT_CHANGED,function(){e(o.getValue())}),this},t.prototype.getWidth=function(){return this.getGui().clientWidth},t.prototype.setWidth=function(e){return s._.setFixedWidth(this.getGui(),e),this},t.prototype.getValue=function(){return this.value},t.prototype.setValue=function(e,o){return this.value===e?this:(this.value=e,o||this.dispatchEvent({type:t.EVENT_CHANGED}),this)},t.EVENT_CHANGED=\"valueChange\",t}(r.AgAbstractLabel);t.AgAbstractField=a},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(2),s=o(29),a=o(34),l=o(0),p=o(0),u=function(){function e(){}return e.prototype.calculateColInitialWidth=function(e){return e.width?e.width<this.gridOptionsWrapper.getMinColWidth()?this.gridOptionsWrapper.getMinColWidth():e.width:this.gridOptionsWrapper.getColWidth()},e.prototype.getOriginalPathForColumn=function(e,t){var o=[],i=!1;return function t(n,r){for(var s=0;s<n.length;s++){if(i)return;var l=n[s];if(l instanceof a.OriginalColumnGroup)t(l.getChildren(),r+1),o[r]=l;else l===e&&(i=!0)}}(t,0),i?o:null},e.prototype.depthFirstOriginalTreeSearch=function(e,t,o){var i=this;t&&t.forEach(function(t){t instanceof a.OriginalColumnGroup&&i.depthFirstOriginalTreeSearch(t,t.getChildren(),o),o(t,e)})},e.prototype.depthFirstAllColumnTreeSearch=function(e,t){var o=this;e&&e.forEach(function(e){e instanceof s.ColumnGroup&&o.depthFirstAllColumnTreeSearch(e.getChildren(),t),t(e)})},e.prototype.depthFirstDisplayedColumnTreeSearch=function(e,t){var o=this;e&&e.forEach(function(e){e instanceof s.ColumnGroup&&o.depthFirstDisplayedColumnTreeSearch(e.getDisplayedChildren(),t),t(e)})},i([p.Autowired(\"gridOptionsWrapper\"),n(\"design:type\",r.GridOptionsWrapper)],e.prototype,\"gridOptionsWrapper\",void 0),e=i([l.Bean(\"columnUtils\")],e)}();t.ColumnUtils=u},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */Object.defineProperty(t,\"__esModule\",{value:!0});var i=o(29),n=o(11),r=o(3),s=function(){function e(e,t,o,i){this.localEventService=new r.EventService,this.expandable=!1,this.colGroupDef=e,this.groupId=t,this.expanded=e&&!!e.openByDefault,this.padding=o,this.level=i}return e.prototype.setOriginalParent=function(e){this.originalParent=this.originalParent},e.prototype.getOriginalParent=function(){return this.originalParent},e.prototype.getLevel=function(){return this.level},e.prototype.isVisible=function(){return!!this.children&&this.children.some(function(e){return e.isVisible()})},e.prototype.isPadding=function(){return this.padding},e.prototype.setExpanded=function(t){this.expanded=void 0!==t&&t;var o={type:e.EVENT_EXPANDED_CHANGED};this.localEventService.dispatchEvent(o)},e.prototype.isExpandable=function(){return this.expandable},e.prototype.isExpanded=function(){return this.expanded},e.prototype.getGroupId=function(){return this.groupId},e.prototype.getId=function(){return this.getGroupId()},e.prototype.setChildren=function(e){this.children=e},e.prototype.getChildren=function(){return this.children},e.prototype.getColGroupDef=function(){return this.colGroupDef},e.prototype.getLeafColumns=function(){var e=[];return this.addLeafColumns(e),e},e.prototype.addLeafColumns=function(t){this.children&&this.children.forEach(function(o){o instanceof n.Column?t.push(o):o instanceof e&&o.addLeafColumns(t)})},e.prototype.getColumnGroupShow=function(){return this.padding?i.ColumnGroup.HEADER_GROUP_PADDING:this.colGroupDef.columnGroupShow},e.prototype.setupExpandable=function(){var e=this;this.setExpandable(),this.getLeafColumns().forEach(function(t){return t.addEventListener(n.Column.EVENT_VISIBLE_CHANGED,e.onColumnVisibilityChanged.bind(e))})},e.prototype.setExpandable=function(){if(!this.isPadding()){for(var t=!1,o=!1,n=!1,r=this.findChildren(),s=0,a=r.length;s<a;s++){var l=r[s];if(l.isVisible()){var p=l.getColumnGroupShow();if(p===i.ColumnGroup.HEADER_GROUP_SHOW_OPEN)t=!0,n=!0;else if(p===i.ColumnGroup.HEADER_GROUP_SHOW_CLOSED)o=!0,n=!0;else{if(t=!0,o=!0,p===i.ColumnGroup.HEADER_GROUP_PADDING)n=l.children.some(function(e){return void 0!==e.getColumnGroupShow()})}}}var u=t&&o&&n;if(this.expandable!==u){this.expandable=u;var d={type:e.EVENT_EXPANDABLE_CHANGED};this.localEventService.dispatchEvent(d)}}},e.prototype.findChildren=function(){var t=this.children,o=t[0];if(o&&(!o.isPadding||!o.isPadding()))return t;for(;1===t.length&&t[0]instanceof e;)t=t[0].children;return t},e.prototype.onColumnVisibilityChanged=function(){this.setExpandable()},e.prototype.addEventListener=function(e,t){this.localEventService.addEventListener(e,t)},e.prototype.removeEventListener=function(e,t){this.localEventService.removeEventListener(e,t)},e.EVENT_EXPANDED_CHANGED=\"expandedChanged\",e.EVENT_EXPANDABLE_CHANGED=\"expandableChanged\",e}();t.OriginalColumnGroup=s},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(0),s=o(2),a=function(){function e(){this.cacheVersion=0}return e.prototype.init=function(){this.active=this.gridOptionsWrapper.isValueCache(),this.neverExpires=this.gridOptionsWrapper.isValueCacheNeverExpires()},e.prototype.onDataChanged=function(){this.neverExpires||this.expire()},e.prototype.expire=function(){this.cacheVersion++},e.prototype.setValue=function(e,t,o){this.active&&(e.__cacheVersion!==this.cacheVersion&&(e.__cacheVersion=this.cacheVersion,e.__cacheData={}),e.__cacheData[t]=o)},e.prototype.getValue=function(e,t){return this.active&&e.__cacheVersion===this.cacheVersion&&void 0!==e.__cacheData[t]?e.__cacheData[t]:void 0},i([r.Autowired(\"gridOptionsWrapper\"),n(\"design:type\",s.GridOptionsWrapper)],e.prototype,\"gridOptionsWrapper\",void 0),i([r.PostConstruct,n(\"design:type\",Function),n(\"design:paramtypes\",[]),n(\"design:returntype\",void 0)],e.prototype,\"init\",null),e=i([r.Bean(\"valueCache\")],e)}();t.ValueCache=a},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)});Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(7),s=o(1),a=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t.prototype.isPopup=function(){return!0},t.prototype.setParentComponent=function(t){s._.addCssClass(t.getGui(),\"ag-has-popup\"),e.prototype.setParentComponent.call(this,t)},t.prototype.destroy=function(){var t=this.parentComponent;t&&t.isAlive()&&s._.removeCssClass(t.getGui(),\"ag-has-popup\"),e.prototype.destroy.call(this)},t}(r.Component);t.PopupComponent=a},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(0),s=o(2),a=o(28),l=o(3),p=function(){function e(){this.p1Tasks=[],this.p2Tasks=[],this.ticking=!1,this.scrollGoingDown=!0,this.lastScrollTop=0}return e.prototype.setScrollTop=function(e){this.scrollGoingDown=e>this.lastScrollTop,this.lastScrollTop=e},e.prototype.registerGridComp=function(e){this.gridPanel=e},e.prototype.init=function(){this.useAnimationFrame=!this.gridOptionsWrapper.isSuppressAnimationFrame()},e.prototype.verifyAnimationFrameOn=function(e){!1===this.useAnimationFrame&&console.warn(\"ag-Grid: AnimationFrameService.\"+e+\" called but animation frames are off\")},e.prototype.addP1Task=function(e,t){this.verifyAnimationFrameOn(\"addP1Task\");var o={task:e,index:t};this.p1Tasks.push(o),this.schedule()},e.prototype.addP2Task=function(e){this.verifyAnimationFrameOn(\"addP2Task\"),this.p2Tasks.push(e),this.schedule()},e.prototype.executeFrame=function(e){this.verifyAnimationFrameOn(\"executeFrame\"),this.scrollGoingDown?this.p1Tasks.sort(function(e,t){return t.index-e.index}):this.p1Tasks.sort(function(e,t){return e.index-t.index});for(var t=(new Date).getTime(),o=(new Date).getTime()-t,i=e<=0;i||o<e;){if(!this.gridPanel.executeFrame())if(this.p1Tasks.length>0){this.p1Tasks.pop().task()}else{if(!(this.p2Tasks.length>0))break;this.p2Tasks.pop()()}o=(new Date).getTime()-t}this.p1Tasks.length>0||this.p2Tasks.length>0?this.requestFrame():this.stopTicking()},e.prototype.stopTicking=function(){this.ticking=!1;var e={type:a.Events.EVENT_ANIMATION_QUEUE_EMPTY,columnApi:this.gridOptionsWrapper.getColumnApi(),api:this.gridOptionsWrapper.getApi()};this.eventService.dispatchEvent(e)},e.prototype.flushAllFrames=function(){this.useAnimationFrame&&this.executeFrame(-1)},e.prototype.schedule=function(){this.useAnimationFrame&&(this.ticking||(this.ticking=!0,this.requestFrame()))},e.prototype.requestFrame=function(){var e=this.executeFrame.bind(this,60);window.requestAnimationFrame?window.requestAnimationFrame(e):window.webkitRequestAnimationFrame?window.webkitRequestAnimationFrame(e):window.setTimeout(e,0)},e.prototype.isQueueEmpty=function(){return this.ticking},i([r.Autowired(\"gridOptionsWrapper\"),n(\"design:type\",s.GridOptionsWrapper)],e.prototype,\"gridOptionsWrapper\",void 0),i([r.Autowired(\"eventService\"),n(\"design:type\",l.EventService)],e.prototype,\"eventService\",void 0),i([r.PostConstruct,n(\"design:type\",Function),n(\"design:paramtypes\",[]),n(\"design:returntype\",void 0)],e.prototype,\"init\",null),e=i([r.Bean(\"animationFrameService\")],e)}();t.AnimationFrameService=p},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}),r=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},s=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(0),l=o(2),p=o(47),u=o(32),d=o(1),c=function(e){function t(){var t=e.call(this)||this;return t.className=\"ag-checkbox\",t.displayTag=\"input\",t.inputType=\"checkbox\",t.labelAlignment=\"right\",t.iconMap={selected:\"checkboxChecked\",unselected:\"checkboxUnchecked\",indeterminate:\"checkboxIndeterminate\"},t.selected=!1,t.readOnly=!1,t.passive=!1,t.setTemplate(t.TEMPLATE.replace(/%displayField%/g,t.displayTag)),t}return n(t,e),t.prototype.postConstruct=function(){e.prototype.postConstruct.call(this),d._.addCssClass(this.eInput,\"ag-hidden\"),this.addIconsPlaceholder(),this.updateIcons()},t.prototype.addInputListeners=function(){var e=this;this.addDestroyableEventListener(this.getGui(),\"click\",function(t){return e.onClick(t)}),this.addDestroyableEventListener(this.eInput,\"change\",function(t){return e.setValue(t.target.checked,!0)})},t.prototype.addIconsPlaceholder=function(){var e=document.createElement(\"div\");this.eWrapper.appendChild(e),this.eIconEl=e},t.prototype.onClick=function(e){d._.addAgGridEventPath(e),this.readOnly||this.toggle()},t.prototype.getNextValue=function(){return void 0===this.selected||!this.selected},t.prototype.setPassive=function(e){this.passive=e},t.prototype.setReadOnly=function(e){this.readOnly=e,this.updateIcons()},t.prototype.isReadOnly=function(){return this.readOnly},t.prototype.isSelected=function(){return this.selected},t.prototype.toggle=function(){var e=this.getNextValue();if(this.passive){var o={type:t.EVENT_CHANGED,selected:e};this.dispatchEvent(o)}else this.setValue(e)},t.prototype.setSelected=function(e,t){if(this.selected!==e&&(this.selected=\"boolean\"==typeof e?e:void 0,this.eInput.checked=this.selected,this.updateIcons(),!t)){var o={type:u.AgAbstractField.EVENT_CHANGED,selected:this.selected};this.dispatchEvent(o)}},t.prototype.getIconName=function(){var e=this.getValue(),t=void 0===e?\"indeterminate\":e?\"selected\":\"unselected\",o=this.isReadOnly()?\"ReadOnly\":\"\";return\"\"+this.iconMap[t]+o},t.prototype.updateIcons=function(){d._.clearElement(this.eIconEl),this.eIconEl.appendChild(d._.createIconNoSpan(this.getIconName(),this.gridOptionsWrapper,null))},t.prototype.getValue=function(){return this.isSelected()},t.prototype.setValue=function(e,t){return this.setSelected(e,t),this},r([a.Autowired(\"gridOptionsWrapper\"),s(\"design:type\",l.GridOptionsWrapper)],t.prototype,\"gridOptionsWrapper\",void 0),t}(p.AgAbstractInputField);t.AgCheckbox=c},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)},r=this&&this.__param||function(e,t){return function(o,i){t(o,i,e)}};Object.defineProperty(t,\"__esModule\",{value:!0});var s=o(2),a=o(12),l=o(33),p=o(116),u=o(34),d=o(11),c=o(0),h=o(165),f=o(1),g=function(){function e(){}return e.prototype.setBeans=function(e){this.logger=e.create(\"ColumnFactory\")},e.prototype.createColumnTree=function(e,t,o){var i=new p.ColumnKeyCreator;if(o){var n=o.map(function(e){return e.getId()});i.addExistingKeys(n)}var r=o?o.slice():null,s=this.recursivelyCreateColumns(e,0,t,r,i,null),a=this.findMaxDept(s,0);this.logger.log(\"Number of levels for grouped columns is \"+a);var l=this.balanceColumnTree(s,0,a,i);return this.columnUtils.depthFirstOriginalTreeSearch(null,l,function(e,t){e instanceof u.OriginalColumnGroup&&e.setupExpandable(),e.setOriginalParent(t)}),{columnTree:l,treeDept:a}},e.prototype.createForAutoGroups=function(e,t){var o=this,i=[];return e.forEach(function(e){var n=o.createAutoGroupTreeItem(t,e);i.push(n)}),i},e.prototype.createAutoGroupTreeItem=function(e,t){for(var o=t,i=this.findDepth(e)-1;i>=0;i--){var n=new u.OriginalColumnGroup(null,\"FAKE_PATH_\"+t.getId()+\"}_\"+i,!0,i);this.context.wireBean(n),n.setChildren([o]),o.setOriginalParent(n),o=n}return o},e.prototype.findDepth=function(e){for(var t=0,o=e;o&&o[0]&&o[0]instanceof u.OriginalColumnGroup;)t++,o=o[0].getChildren();return t},e.prototype.balanceColumnTree=function(e,t,o,i){for(var n=[],r=0;r<e.length;r++){var s=e[r];if(s instanceof u.OriginalColumnGroup){var a=s,l=this.balanceColumnTree(a.getChildren(),t+1,o,i);a.setChildren(l),n.push(a)}else{for(var p=void 0,d=void 0,c=o-1;c>=t;c--){var h=i.getUniqueKey(null,null),f=this.createMergedColGroupDef(null),g=new u.OriginalColumnGroup(f,h,!0,t);this.context.wireBean(g),d&&d.setChildren([g]),d=g,p||(p=d)}if(p){if(n.push(p),e.some(function(e){return e instanceof u.OriginalColumnGroup})){d.setChildren([s]);continue}d.setChildren(e);break}n.push(s)}}return n},e.prototype.findMaxDept=function(e,t){for(var o=t,i=0;i<e.length;i++){var n=e[i];if(n instanceof u.OriginalColumnGroup){var r=n,s=this.findMaxDept(r.getChildren(),t+1);o<s&&(o=s)}}return o},e.prototype.recursivelyCreateColumns=function(e,t,o,i,n,r){var s=this,a=[];return e?(e.forEach(function(e){var l;l=s.isColumnGroup(e)?s.createColumnGroup(o,e,t,i,n,r):s.createColumn(o,e,i,n,r),a.push(l)}),a):a},e.prototype.createColumnGroup=function(e,t,o,i,n,r){var s=this.createMergedColGroupDef(t),a=n.getUniqueKey(s.groupId,null),l=new u.OriginalColumnGroup(s,a,!1,o);this.context.wireBean(l);var p=this.recursivelyCreateColumns(s.children,o+1,e,i,n,l);return l.setChildren(p),l},e.prototype.createMergedColGroupDef=function(e){var t={};return f._.assign(t,this.gridOptionsWrapper.getDefaultColGroupDef()),f._.assign(t,e),this.checkForDeprecatedItems(t),t},e.prototype.createColumn=function(e,t,o,i,n){var r=this.mergeColDefs(t);this.checkForDeprecatedItems(r);var s=this.findExistingColumn(t,o);if(s)s.setColDef(r,t);else{var a=i.getUniqueKey(r.colId,r.field);s=new d.Column(r,t,a,e),this.context.wireBean(s)}return s},e.prototype.findExistingColumn=function(e,t){var o=f._.find(t,function(t){var o=t.getUserProvidedColDef();return!!o&&(o===e||!!(null!==o.colId&&void 0!==o.colId)&&o.colId===e.colId)});return o&&f._.removeFromArray(t,o),o},e.prototype.mergeColDefs=function(e){var t={};return f._.assign(t,this.gridOptionsWrapper.getDefaultColDef()),e.type&&this.assignColumnTypes(e,t),f._.assign(t,e),t},e.prototype.assignColumnTypes=function(e,t){var o;if(e.type instanceof Array){e.type.some(function(e){return\"string\"!=typeof e})?console.warn(\"ag-grid: if colDef.type is supplied an array it should be of type 'string[]'\"):o=e.type}else{if(\"string\"!=typeof e.type)return void console.warn(\"ag-grid: colDef.type should be of type 'string' | 'string[]'\");o=e.type.split(\",\")}var i=f._.assign({},this.gridOptionsWrapper.getColumnTypes(),h.DefaultColumnTypes);o.forEach(function(e){var o=i[e.trim()];o?f._.assign(t,o):console.warn(\"ag-grid: colDef.type '\"+e+\"' does not correspond to defined gridOptions.columnTypes\")})},e.prototype.checkForDeprecatedItems=function(e){if(e){var t=e;void 0!==t.group&&console.warn(\"ag-grid: colDef.group is invalid, please check documentation on how to do grouping as it changed in version 3\"),void 0!==t.headerGroup&&console.warn(\"ag-grid: colDef.headerGroup is invalid, please check documentation on how to do grouping as it changed in version 3\"),void 0!==t.headerGroupShow&&console.warn(\"ag-grid: colDef.headerGroupShow is invalid, should be columnGroupShow, please check documentation on how to do grouping as it changed in version 3\"),void 0!==t.suppressRowGroup&&console.warn(\"ag-grid: colDef.suppressRowGroup is deprecated, please use colDef.type instead\"),void 0!==t.suppressAggregation&&console.warn(\"ag-grid: colDef.suppressAggregation is deprecated, please use colDef.type instead\"),(t.suppressRowGroup||t.suppressAggregation)&&console.warn(\"ag-grid: colDef.suppressAggregation and colDef.suppressRowGroup are deprecated, use allowRowGroup, allowPivot and allowValue instead\"),t.displayName&&(console.warn(\"ag-grid: Found displayName \"+t.displayName+\", please use headerName instead, displayName is deprecated.\"),t.headerName=t.displayName)}},e.prototype.isColumnGroup=function(e){return void 0!==e.children},i([c.Autowired(\"gridOptionsWrapper\"),n(\"design:type\",s.GridOptionsWrapper)],e.prototype,\"gridOptionsWrapper\",void 0),i([c.Autowired(\"columnUtils\"),n(\"design:type\",l.ColumnUtils)],e.prototype,\"columnUtils\",void 0),i([c.Autowired(\"context\"),n(\"design:type\",c.Context)],e.prototype,\"context\",void 0),i([r(0,c.Qualifier(\"loggerFactory\")),n(\"design:type\",Function),n(\"design:paramtypes\",[a.LoggerFactory]),n(\"design:returntype\",void 0)],e.prototype,\"setBeans\",null),e=i([c.Bean(\"columnFactory\")],e)}();t.ColumnFactory=g},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(17),s=o(0),a=o(2),l=o(111),p=function(){function e(){}return e.prototype.registerGridComp=function(e){this.gridPanel=e},e.prototype.registerHeaderRootComp=function(e){this.headerRootComp=e},e.prototype.getPreferredWidthForColumn=function(e){var t=this.getHeaderCellForColumn(e);if(!t)return-1;var o=document.createElement(\"span\");o.style.position=\"fixed\";var i=this.gridPanel.getCenterContainer();i.appendChild(o),this.putRowCellsIntoDummyContainer(e,o),this.cloneItemIntoDummy(t,o);var n=o.offsetWidth;return i.removeChild(o),n+this.gridOptionsWrapper.getAutoSizePadding()},e.prototype.getHeaderCellForColumn=function(e){var t=null;return this.headerRootComp.forEachHeaderElement(function(o){if(o instanceof l.HeaderWrapperComp){var i=o;i.getColumn()===e&&(t=i)}}),t?t.getGui():null},e.prototype.putRowCellsIntoDummyContainer=function(e,t){var o=this;this.rowRenderer.getAllCellsForColumn(e).forEach(function(e){return o.cloneItemIntoDummy(e,t)})},e.prototype.cloneItemIntoDummy=function(e,t){var o=e.cloneNode(!0);o.style.width=\"\",o.style.position=\"static\",o.style.left=\"\";var i=document.createElement(\"div\");i.style.display=\"table-row\",i.appendChild(o),t.appendChild(i)},i([s.Autowired(\"rowRenderer\"),n(\"design:type\",r.RowRenderer)],e.prototype,\"rowRenderer\",void 0),i([s.Autowired(\"gridOptionsWrapper\"),n(\"design:type\",a.GridOptionsWrapper)],e.prototype,\"gridOptionsWrapper\",void 0),e=i([s.Bean(\"autoWidthCalculator\")],e)}();t.AutoWidthCalculator=p},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}),r=this&&this.__assign||function(){return(r=Object.assign||function(e){for(var t,o=1,i=arguments.length;o<i;o++)for(var n in t=arguments[o])Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e}).apply(this,arguments)};Object.defineProperty(t,\"__esModule\",{value:!0});var s=o(11),a=o(6),l=o(5),p=o(7),u=o(67),d=o(102),c=o(152),h=o(68),f=o(1),g=o(153),y=function(e){function t(t,o,i,n,r,s,a){var l=e.call(this)||this;if(l.editingCell=!1,l.suppressRefreshCell=!1,l.scope=null,l.cellEditorVersion=0,l.cellRendererVersion=0,l.scope=t,l.beans=o,l.column=i,l.rowNode=n,l.rowComp=r,l.autoHeightCell=s,l.printLayout=a,l.createGridCellVo(),l.rangeSelectionEnabled=o.gridOptionsWrapper.isEnableRangeSelection(),l.cellFocused=l.beans.focusedCellController.isCellFocused(l.cellPosition),l.firstRightPinned=l.column.isFirstRightPinned(),l.lastLeftPinned=l.column.isLastLeftPinned(),l.rangeSelectionEnabled){var p=l.beans.rangeController;l.rangeCount=p.getCellRangeCount(l.cellPosition),l.rangeCount&&(l.hasChartRange=p.getCellRanges().every(function(e){return f._.exists(e.type)}))}return l.getValueAndFormat(),l.setUsingWrapper(),l.chooseCellRenderer(),l.setupColSpan(),l.rowSpan=l.column.getRowSpan(l.rowNode),l}return n(t,e),t.prototype.getCreateTemplate=function(){var e=this.beans.gridOptionsWrapper.isEnableCellTextSelection()?\"\":'unselectable=\"on\"',t=[],o=this.column,i=this.getCellWidth(),n=this.modifyLeftForPrintLayout(this.getCellLeft()),r=this.getInitialValueToRender(),s=f._.get(this.column,\"colDef.template\",null)?r:f._.escape(r);this.tooltip=this.getToolTip();var a=f._.escape(this.tooltip),l=f._.escape(o.getId()),p=\"\",u=\"\",d=this.preProcessStylesFromColDef(),c=this.getInitialCssClasses(),h=this.getStylesForRowSpanning();return this.usingWrapper&&(p='<div ref=\"eCellWrapper\" class=\"ag-cell-wrapper\"><span ref=\"eCellValue\" class=\"ag-cell-value\" '+e+\">\",u=\"</span></div>\"),t.push(\"<div\"),t.push(' tabindex=\"-1\"'),t.push(\" \"+e),t.push(' role=\"gridcell\"'),t.push(' comp-id=\"'+this.getCompId()+'\" '),t.push(' col-id=\"'+l+'\"'),t.push(' class=\"'+c.join(\" \")+'\"'),this.beans.gridOptionsWrapper.isEnableBrowserTooltips()&&f._.exists(a)&&t.push('title=\"'+a+'\"'),t.push(' style=\"width: '+i+\"px; left: \"+n+\"px; \"+d+\" \"+h+'\" >'),t.push(p),f._.exists(s,!0)&&t.push(s),t.push(u),t.push(\"</div>\"),t.join(\"\")},t.prototype.getStylesForRowSpanning=function(){return 1===this.rowSpan?\"\":\"height: \"+this.beans.gridOptionsWrapper.getRowHeightAsNumber()*this.rowSpan+\"px; z-index: 1;\"},t.prototype.afterAttached=function(){var e='[comp-id=\"'+this.getCompId()+'\"]',t=this.eParentRow.querySelector(e);this.setGui(t),this.addDomData(),this.populateTemplate(),this.createCellRendererInstance(!0),this.angular1Compile(),this.rangeSelectionEnabled&&this.shouldHaveSelectionHandle()&&this.addSelectionHandle(),f._.exists(this.tooltip)&&!this.beans.gridOptionsWrapper.isEnableBrowserTooltips()&&this.beans.tooltipManager.registerTooltip(this)},t.prototype.onColumnHover=function(){var e=this.beans.columnHoverService.isHovered(this.column);f._.addOrRemoveCssClass(this.getGui(),\"ag-column-hover\",e)},t.prototype.onCellChanged=function(e){e.column===this.column&&this.refreshCell({})},t.prototype.getCellLeft=function(){return(this.beans.gridOptionsWrapper.isEnableRtl()&&this.colsSpanning?f._.last(this.colsSpanning):this.column).getLeft()},t.prototype.getCellWidth=function(){if(!this.colsSpanning)return this.column.getActualWidth();var e=0;return this.colsSpanning.forEach(function(t){return e+=t.getActualWidth()}),e},t.prototype.onFlashCells=function(e){var t=this.beans.cellPositionUtils.createId(this.cellPosition);e.cells[t]&&this.animateCell(\"highlight\")},t.prototype.setupColSpan=function(){f._.missing(this.getComponentHolder().colSpan)||(this.addDestroyableEventListener(this.beans.eventService,l.Events.EVENT_DISPLAYED_COLUMNS_CHANGED,this.onDisplayColumnsChanged.bind(this)),this.addDestroyableEventListener(this.beans.eventService,l.Events.EVENT_DISPLAYED_COLUMNS_WIDTH_CHANGED,this.onWidthChanged.bind(this)),this.colsSpanning=this.getColSpanningList())},t.prototype.getColSpanningList=function(){var e=this.column.getColSpan(this.rowNode),t=[];if(1===e)t.push(this.column);else for(var o=this.column,i=this.column.getPinned(),n=0;o&&n<e&&(t.push(o),(o=this.beans.columnController.getDisplayedColAfter(o))&&!f._.missing(o))&&i===o.getPinned();n++);return t},t.prototype.onDisplayColumnsChanged=function(){var e=this.getColSpanningList();f._.compareArrays(this.colsSpanning,e)||(this.colsSpanning=e,this.onWidthChanged(),this.onLeftChanged())},t.prototype.getInitialCssClasses=function(){var e=[\"ag-cell\",\"ag-cell-not-inline-editing\"];return this.autoHeightCell||e.push(\"ag-cell-with-height\"),!this.beans.gridOptionsWrapper.isSuppressCellSelection()&&this.cellFocused&&e.push(\"ag-cell-focus\"),this.firstRightPinned&&e.push(\"ag-cell-first-right-pinned\"),this.lastLeftPinned&&e.push(\"ag-cell-last-left-pinned\"),this.beans.columnHoverService.isHovered(this.column)&&e.push(\"ag-column-hover\"),f._.pushAll(e,this.preProcessClassesFromColDef()),f._.pushAll(e,this.preProcessCellClassRules()),f._.pushAll(e,this.getInitialRangeClasses()),this.usingWrapper||e.push(\"ag-cell-value\"),e},t.prototype.getInitialValueToRender=function(){if(this.usingCellRenderer)return\"string\"==typeof this.cellRendererGui?this.cellRendererGui:\"\";var e=this.getComponentHolder();if(e.template)return e.template;if(e.templateUrl){var t=this.beans.templateService.getTemplate(e.templateUrl,this.refreshCell.bind(this,!0));return t||\"\"}return this.getValueToUse()},t.prototype.getRenderedRow=function(){return this.rowComp},t.prototype.isSuppressNavigable=function(){return this.column.isSuppressNavigable(this.rowNode)},t.prototype.getCellRenderer=function(){return this.cellRenderer},t.prototype.getCellEditor=function(){return this.cellEditor},t.prototype.refreshCell=function(e){if(!this.suppressRefreshCell&&!this.editingCell){var t=this.getComponentHolder(),o=e&&e.newData,i=e&&e.suppressFlash||t.suppressCellFlash,n=e&&e.forceRefresh,r=this.value;this.getValueAndFormat();var s=!this.valuesAreEqual(r,this.value);if(n||s){!o&&this.attemptCellRendererRefresh()||this.replaceContentsAfterRefresh();var a=this.beans.filterManager.isSuppressFlashingCellsBecauseFiltering();!i&&!a&&(this.beans.gridOptionsWrapper.isEnableCellChangeFlash()||t.enableCellChangeFlash)&&this.flashCell(),this.postProcessStylesFromColDef(),this.postProcessClassesFromColDef()}this.updateAngular1ScopeAndCompile(),this.refreshToolTip(),this.postProcessCellClassRules()}},t.prototype.flashCell=function(){this.animateCell(\"data-changed\")},t.prototype.animateCell=function(e){var t=\"ag-cell-\"+e,o=\"ag-cell-\"+e+\"-animation\",i=this.getGui();f._.addCssClass(i,t),f._.removeCssClass(i,o),window.setTimeout(function(){f._.removeCssClass(i,t),f._.addCssClass(i,o),window.setTimeout(function(){f._.removeCssClass(i,o)},1e3)},500)},t.prototype.replaceContentsAfterRefresh=function(){f._.clearElement(this.eParentOfValue),this.cellRenderer&&this.cellRenderer.destroy&&this.cellRenderer.destroy(),this.cellRenderer=null,this.cellRendererGui=null,this.putDataIntoCellAfterRefresh(),this.updateAngular1ScopeAndCompile()},t.prototype.updateAngular1ScopeAndCompile=function(){this.beans.gridOptionsWrapper.isAngularCompileRows()&&this.scope&&(this.scope.data=r({},this.rowNode.data),this.angular1Compile())},t.prototype.angular1Compile=function(){if(this.beans.gridOptionsWrapper.isAngularCompileRows()){var e=this.getGui();if(!e.classList.contains(\"ng-scope\")||0===e.childElementCount){var t=this.beans.$compile(e)(this.scope);this.addDestroyFunc(function(){t.remove()})}}},t.prototype.postProcessStylesFromColDef=function(){var e=this.processStylesFromColDef();e&&f._.addStylesToElement(this.getGui(),e)},t.prototype.preProcessStylesFromColDef=function(){var e=this.processStylesFromColDef();return f._.cssStyleObjectToMarkup(e)},t.prototype.processStylesFromColDef=function(){var e=this.getComponentHolder();if(e.cellStyle){var t=void 0;if(\"function\"==typeof e.cellStyle){var o={value:this.value,data:this.rowNode.data,node:this.rowNode,colDef:e,column:this.column,$scope:this.scope,context:this.beans.gridOptionsWrapper.getContext(),api:this.beans.gridOptionsWrapper.getApi()};t=(0,e.cellStyle)(o)}else t=e.cellStyle;return t}},t.prototype.postProcessClassesFromColDef=function(){var e=this;this.processClassesFromColDef(function(t){return f._.addCssClass(e.getGui(),t)})},t.prototype.preProcessClassesFromColDef=function(){var e=[];return this.processClassesFromColDef(function(t){return e.push(t)}),e},t.prototype.processClassesFromColDef=function(e){var t=this.getComponentHolder();this.beans.stylingService.processStaticCellClasses(t,{value:this.value,data:this.rowNode.data,node:this.rowNode,colDef:t,rowIndex:this.rowNode.rowIndex,$scope:this.scope,api:this.beans.gridOptionsWrapper.getApi(),columnApi:this.beans.gridOptionsWrapper.getColumnApi(),context:this.beans.gridOptionsWrapper.getContext()},e)},t.prototype.putDataIntoCellAfterRefresh=function(){var e=this.getComponentHolder();if(e.template)this.eParentOfValue.innerHTML=e.template;else if(e.templateUrl){var t=this.beans.templateService.getTemplate(e.templateUrl,this.refreshCell.bind(this,!0));t&&(this.eParentOfValue.innerHTML=t)}else if(this.chooseCellRenderer(),this.usingCellRenderer)this.createCellRendererInstance();else{var o=this.getValueToUse();null!=o&&(this.eParentOfValue.innerHTML=f._.escape(o))}},t.prototype.attemptCellRendererRefresh=function(){if(f._.missing(this.cellRenderer)||!this.cellRenderer||f._.missing(this.cellRenderer.refresh))return!1;var e=this.createCellRendererParams(),t=this.beans.userComponentFactory.createFinalParams(this.getComponentHolder(),this.cellRendererType,e),o=this.cellRenderer.refresh(t);return!0===o||void 0===o},t.prototype.refreshToolTip=function(){var e=this.getToolTip();if(this.tooltip!==e){var t=f._.exists(e),o=f._.exists(this.tooltip);if(!t||this.tooltip!==e.toString())if(this.tooltip=e,this.beans.gridOptionsWrapper.isEnableBrowserTooltips())if(t){var i=f._.escape(this.tooltip);this.eParentOfValue.setAttribute(\"title\",i)}else this.eParentOfValue.removeAttribute(\"title\");else o?t||this.beans.tooltipManager.unregisterTooltip(this):t&&this.beans.tooltipManager.registerTooltip(this)}},t.prototype.valuesAreEqual=function(e,t){var o=this.getComponentHolder(),i=o?o.equals:null;return i?i(e,t):e===t},t.prototype.getToolTip=function(){var e=this.getComponentHolder(),t=this.rowNode.data;if(e.tooltipField&&f._.exists(t))return f._.getValueUsingField(t,e.tooltipField,this.column.isTooltipFieldContainsDots());var o=e.tooltipValueGetter||e.tooltip;return o?o({api:this.beans.gridOptionsWrapper.getApi(),columnApi:this.beans.gridOptionsWrapper.getColumnApi(),colDef:e,column:this.getColumn(),context:this.beans.gridOptionsWrapper.getContext(),value:this.value,valueFormatted:this.valueFormatted,rowIndex:this.cellPosition.rowIndex,node:this.rowNode,data:this.rowNode.data,$scope:this.scope}):null},t.prototype.getTooltipText=function(e){return void 0===e&&(e=!0),e?f._.escape(this.tooltip):this.tooltip},t.prototype.processCellClassRules=function(e,t){var o=this.getComponentHolder();this.beans.stylingService.processClassRules(o.cellClassRules,{value:this.value,data:this.rowNode.data,node:this.rowNode,colDef:o,rowIndex:this.cellPosition.rowIndex,api:this.beans.gridOptionsWrapper.getApi(),columnApi:this.beans.gridOptionsWrapper.getColumnApi(),$scope:this.scope,context:this.beans.gridOptionsWrapper.getContext()},e,t)},t.prototype.postProcessCellClassRules=function(){var e=this;this.processCellClassRules(function(t){f._.addCssClass(e.getGui(),t)},function(t){f._.removeCssClass(e.getGui(),t)})},t.prototype.preProcessCellClassRules=function(){var e=[];return this.processCellClassRules(function(t){e.push(t)},function(e){}),e},t.prototype.setUsingWrapper=function(){var e=this.getComponentHolder();if(this.rowNode.rowPinned)return this.usingWrapper=!1,this.includeSelectionComponent=!1,this.includeRowDraggingComponent=!1,void(this.includeDndSourceComponent=!1);var t=\"function\"==typeof e.checkboxSelection,o=\"function\"==typeof e.rowDrag,i=\"function\"==typeof e.dndSource;this.includeSelectionComponent=t||!0===e.checkboxSelection,this.includeRowDraggingComponent=o||!0===e.rowDrag,this.includeDndSourceComponent=i||!0===e.dndSource,this.usingWrapper=this.includeRowDraggingComponent||this.includeSelectionComponent||this.includeDndSourceComponent},t.prototype.chooseCellRenderer=function(){var e=this.getComponentHolder();if(e.template||e.templateUrl)this.usingCellRenderer=!1;else{var o=this.createCellRendererParams(),i=this.beans.userComponentFactory.lookupComponentClassDef(e,\"cellRenderer\",o);this.beans.userComponentFactory.lookupComponentClassDef(e,\"pinnedRowCellRenderer\",o)&&this.rowNode.rowPinned?(this.cellRendererType=t.CELL_RENDERER_TYPE_PINNED,this.usingCellRenderer=!0):i?(this.cellRendererType=t.CELL_RENDERER_TYPE_NORMAL,this.usingCellRenderer=!0):this.usingCellRenderer=!1}},t.prototype.createCellRendererInstance=function(e){var o=this;if(void 0===e&&(e=!1),this.usingCellRenderer){var i=this.beans.gridOptionsWrapper.isAngularCompileRows(),n=this.beans.gridOptionsWrapper.isSuppressAnimationFrame();(i||n||this.autoHeightCell)&&(e=!1);var r=this.createCellRendererParams();this.cellRendererVersion++;var s=this.afterCellRendererCreated.bind(this,this.cellRendererVersion),a=this.cellRendererType===t.CELL_RENDERER_TYPE_NORMAL,l=function(){var e;(e=a?o.beans.userComponentFactory.newCellRenderer(o.getComponentHolder(),r):o.beans.userComponentFactory.newPinnedRowCellRenderer(o.getComponentHolder(),r))&&e.then(s)};e?this.beans.taskQueue.addP2Task(l):l()}},t.prototype.afterCellRendererCreated=function(e,t){this.isAlive()&&e===this.cellRendererVersion?(this.cellRenderer=t,this.cellRendererGui=this.cellRenderer.getGui(),f._.missing(this.cellRendererGui)||this.editingCell||this.eParentOfValue.appendChild(this.cellRendererGui)):t.destroy&&t.destroy()},t.prototype.createCellRendererParams=function(){var e=this;return{value:this.value,valueFormatted:this.valueFormatted,getValue:this.getValue.bind(this),setValue:function(t){e.beans.valueService.setValue(e.rowNode,e.column,t)},formatValue:this.formatValue.bind(this),data:this.rowNode.data,node:this.rowNode,colDef:this.getComponentHolder(),column:this.column,$scope:this.scope,rowIndex:this.cellPosition.rowIndex,api:this.beans.gridOptionsWrapper.getApi(),columnApi:this.beans.gridOptionsWrapper.getColumnApi(),context:this.beans.gridOptionsWrapper.getContext(),refreshCell:this.refreshCell.bind(this),eGridCell:this.getGui(),eParentOfValue:this.eParentOfValue,addRowCompListener:this.rowComp?this.rowComp.addEventListener.bind(this.rowComp):null,addRenderedRowListener:function(t,o){console.warn(\"ag-Grid: since ag-Grid .v11, params.addRenderedRowListener() is now params.addRowCompListener()\"),e.rowComp&&e.rowComp.addEventListener(t,o)}}},t.prototype.formatValue=function(e){var t=this.beans.valueFormatterService.formatValue(this.column,this.rowNode,this.scope,e);return null!=t?t:e},t.prototype.getValueToUse=function(){return null!==this.valueFormatted&&void 0!==this.valueFormatted?this.valueFormatted:this.value},t.prototype.getValueAndFormat=function(){this.value=this.getValue(),this.valueFormatted=this.beans.valueFormatterService.formatValue(this.column,this.rowNode,this.scope,this.value)},t.prototype.getValue=function(){var e=this.rowNode.leafGroup&&this.beans.columnController.isPivotMode(),t=this.rowNode.group&&this.rowNode.expanded&&!this.rowNode.footer&&!e,o=this.beans.gridOptionsWrapper.isGroupIncludeFooter(),i=this.beans.gridOptionsWrapper.isGroupSuppressBlankHeader(),n=t&&o&&!i;return this.beans.valueService.getValue(this.column,this.rowNode,!1,n)},t.prototype.onMouseEvent=function(e,t){if(!f._.isStopPropagationForAgGrid(t))switch(e){case\"click\":this.onCellClicked(t);break;case\"mousedown\":this.onMouseDown(t);break;case\"dblclick\":this.onCellDoubleClicked(t);break;case\"mouseout\":this.onMouseOut(t);break;case\"mouseover\":this.onMouseOver(t)}},t.prototype.dispatchCellContextMenuEvent=function(e){var t=this.getComponentHolder(),o=this.createEvent(e,l.Events.EVENT_CELL_CONTEXT_MENU);this.beans.eventService.dispatchEvent(o),t.onCellContextMenu&&window.setTimeout(function(){return t.onCellContextMenu(o)},0)},t.prototype.createEvent=function(e,t){var o={node:this.rowNode,data:this.rowNode.data,value:this.value,column:this.column,colDef:this.getComponentHolder(),context:this.beans.gridOptionsWrapper.getContext(),api:this.beans.gridApi,columnApi:this.beans.columnApi,rowPinned:this.rowNode.rowPinned,event:e,type:t,rowIndex:this.rowNode.rowIndex};return this.scope&&(o.$scope=this.scope),o},t.prototype.onMouseOut=function(e){var t=this.createEvent(e,l.Events.EVENT_CELL_MOUSE_OUT);this.beans.eventService.dispatchEvent(t),this.beans.columnHoverService.clearMouseOver()},t.prototype.onMouseOver=function(e){var t=this.createEvent(e,l.Events.EVENT_CELL_MOUSE_OVER);this.beans.eventService.dispatchEvent(t),this.beans.columnHoverService.setMouseOver([this.column])},t.prototype.onCellDoubleClicked=function(e){var t=this.getComponentHolder(),o=this.createEvent(e,l.Events.EVENT_CELL_DOUBLE_CLICKED);this.beans.eventService.dispatchEvent(o),\"function\"==typeof t.onCellDoubleClicked&&window.setTimeout(function(){return t.onCellDoubleClicked(o)},0),!this.beans.gridOptionsWrapper.isSingleClickEdit()&&!this.beans.gridOptionsWrapper.isSuppressClickEdit()&&this.startRowOrCellEdit()},t.prototype.startRowOrCellEdit=function(e,t){this.beans.gridOptionsWrapper.isFullRowEdit()?this.rowComp.startRowEditing(e,t,this):this.startEditingIfEnabled(e,t,!0)},t.prototype.isCellEditable=function(){return this.column.isCellEditable(this.rowNode)},t.prototype.startEditingIfEnabled=function(e,t,o){if(void 0===e&&(e=null),void 0===t&&(t=null),void 0===o&&(o=!1),this.isCellEditable()&&!this.editingCell){this.editingCell=!0,this.cellEditorVersion++;var i=this.afterCellEditorCreated.bind(this,this.cellEditorVersion),n=this.createCellEditorParams(e,t,o);this.createCellEditor(n).then(i),f._.missing(this.cellEditor)&&o&&this.focusCell(!0)}},t.prototype.createCellEditor=function(e){var t=this;return this.beans.userComponentFactory.newCellEditor(this.column.getColDef(),e).map(function(o){if(!(o.isPopup&&o.isPopup()))return o;t.beans.gridOptionsWrapper.isFullRowEdit()&&console.warn(\"ag-Grid: popup cellEditor does not work with fullRowEdit - you cannot use them both - either turn off fullRowEdit, or stop using popup editors.\");var i=new h.PopupEditorWrapper(o);return t.beans.context.wireBean(i),i.init(e),i})},t.prototype.afterCellEditorCreated=function(e,t){if(!(e!==this.cellEditorVersion)&&this.editingCell){if(t.isCancelBeforeStart&&t.isCancelBeforeStart())return t.destroy&&t.destroy(),void(this.editingCell=!1);if(!t.getGui)return console.warn(\"ag-Grid: cellEditor for column \"+this.column.getId()+\" is missing getGui() method\"),t.render&&console.warn(\"ag-Grid: we found 'render' on the component, are you trying to set a React renderer but added it as colDef.cellEditor instead of colDef.cellEditorFmk?\"),t.destroy&&t.destroy(),void(this.editingCell=!1);this.cellEditor=t,this.cellEditorInPopup=void 0!==t.isPopup&&t.isPopup(),this.setInlineEditingClass(),this.cellEditorInPopup?this.addPopupCellEditor():this.addInCellEditor(),t.afterGuiAttached&&t.afterGuiAttached();var o=this.createEvent(null,l.Events.EVENT_CELL_EDITING_STARTED);this.beans.eventService.dispatchEvent(o)}else t.destroy&&t.destroy()},t.prototype.addInCellEditor=function(){f._.clearElement(this.getGui()),this.cellEditor&&this.getGui().appendChild(this.cellEditor.getGui()),this.angular1Compile()},t.prototype.addPopupCellEditor=function(){var e=this,t=this.cellEditor?this.cellEditor.getGui():null;this.hideEditorPopup=this.beans.popupService.addAsModalPopup(t,!0,function(){e.onPopupEditorClosed()}),this.beans.popupService.positionPopupOverComponent({column:this.column,rowNode:this.rowNode,type:\"popupCellEditor\",eventSource:this.getGui(),ePopup:t,keepWithinBounds:!0}),this.angular1Compile()},t.prototype.onPopupEditorClosed=function(){this.editingCell&&(this.stopRowOrCellEdit(),this.beans.focusedCellController.isCellFocused(this.cellPosition)&&this.focusCell(!0))},t.prototype.setInlineEditingClass=function(){var e=this.editingCell&&!this.cellEditorInPopup,t=this.editingCell&&this.cellEditorInPopup;f._.addOrRemoveCssClass(this.getGui(),\"ag-cell-inline-editing\",e),f._.addOrRemoveCssClass(this.getGui(),\"ag-cell-not-inline-editing\",!e),f._.addOrRemoveCssClass(this.getGui(),\"ag-cell-popup-editing\",t),f._.addOrRemoveCssClass(this.getGui().parentNode,\"ag-row-inline-editing\",e),f._.addOrRemoveCssClass(this.getGui().parentNode,\"ag-row-not-inline-editing\",!e)},t.prototype.createCellEditorParams=function(e,t,o){return{value:this.getValue(),keyPress:e,charPress:t,column:this.column,colDef:this.column.getColDef(),rowIndex:this.cellPosition.rowIndex,node:this.rowNode,data:this.rowNode.data,api:this.beans.gridOptionsWrapper.getApi(),cellStartedEdit:o,columnApi:this.beans.gridOptionsWrapper.getColumnApi(),context:this.beans.gridOptionsWrapper.getContext(),$scope:this.scope,onKeyDown:this.onKeyDown.bind(this),stopEditing:this.stopEditingAndFocus.bind(this),eGridCell:this.getGui(),parseValue:this.parseValue.bind(this),formatValue:this.formatValue.bind(this)}},t.prototype.stopEditingAndFocus=function(e){void 0===e&&(e=!1),this.stopRowOrCellEdit(),this.focusCell(!0),e||this.navigateAfterEdit()},t.prototype.parseValue=function(e){var t=this.getComponentHolder(),o={node:this.rowNode,data:this.rowNode.data,oldValue:this.value,newValue:e,colDef:t,column:this.column,api:this.beans.gridOptionsWrapper.getApi(),columnApi:this.beans.gridOptionsWrapper.getColumnApi(),context:this.beans.gridOptionsWrapper.getContext()},i=t.valueParser;return f._.exists(i)?this.beans.expressionService.evaluate(i,o):e},t.prototype.focusCell=function(e){void 0===e&&(e=!1),this.beans.focusedCellController.setFocusedCell(this.cellPosition.rowIndex,this.column,this.rowNode.rowPinned,e)},t.prototype.setFocusInOnEditor=function(){this.editingCell&&(this.cellEditor&&this.cellEditor.focusIn?this.cellEditor.focusIn():this.focusCell(!0))},t.prototype.isEditing=function(){return this.editingCell},t.prototype.onKeyDown=function(e){var t=e.which||e.keyCode;switch(t){case a.Constants.KEY_ENTER:this.onEnterKeyDown();break;case a.Constants.KEY_F2:this.onF2KeyDown();break;case a.Constants.KEY_ESCAPE:this.onEscapeKeyDown();break;case a.Constants.KEY_TAB:this.onTabKeyDown(e);break;case a.Constants.KEY_BACKSPACE:case a.Constants.KEY_DELETE:this.onBackspaceOrDeleteKeyPressed(t);break;case a.Constants.KEY_DOWN:case a.Constants.KEY_UP:case a.Constants.KEY_RIGHT:case a.Constants.KEY_LEFT:this.onNavigationKeyPressed(e,t)}},t.prototype.setFocusOutOnEditor=function(){this.editingCell&&this.cellEditor&&this.cellEditor.focusOut&&this.cellEditor.focusOut()},t.prototype.onNavigationKeyPressed=function(e,t){this.editingCell||(e.shiftKey&&this.rangeSelectionEnabled?this.onShiftRangeSelect(t):this.beans.rowRenderer.navigateToNextCell(e,t,this.cellPosition,!0),e.preventDefault())},t.prototype.onShiftRangeSelect=function(e){var t=this.beans.rangeController.extendLatestRangeInDirection(e);t&&this.beans.rowRenderer.ensureCellVisible(t)},t.prototype.onTabKeyDown=function(e){this.beans.rowRenderer.onTabKeyDown(this,e)},t.prototype.onBackspaceOrDeleteKeyPressed=function(e){this.editingCell||this.startRowOrCellEdit(e)},t.prototype.onEnterKeyDown=function(){this.editingCell||this.rowComp.isEditing()?this.stopEditingAndFocus():this.beans.gridOptionsWrapper.isEnterMovesDown()?this.beans.rowRenderer.navigateToNextCell(null,a.Constants.KEY_DOWN,this.cellPosition,!1):this.startRowOrCellEdit(a.Constants.KEY_ENTER)},t.prototype.navigateAfterEdit=function(){this.beans.gridOptionsWrapper.isFullRowEdit()||this.beans.gridOptionsWrapper.isEnterMovesDownAfterEdit()&&this.beans.rowRenderer.navigateToNextCell(null,a.Constants.KEY_DOWN,this.cellPosition,!1)},t.prototype.onF2KeyDown=function(){this.editingCell||this.startRowOrCellEdit(a.Constants.KEY_F2)},t.prototype.onEscapeKeyDown=function(){this.editingCell&&(this.stopRowOrCellEdit(!0),this.focusCell(!0))},t.prototype.onKeyPress=function(e){if(!(f._.getTarget(e)!==this.getGui())&&!this.editingCell){var t=String.fromCharCode(e.charCode);\" \"===t?this.onSpaceKeyPressed(e):f._.isEventFromPrintableCharacter(e)&&(this.startRowOrCellEdit(null,t),e.preventDefault())}},t.prototype.onSpaceKeyPressed=function(e){if(!this.editingCell&&this.beans.gridOptionsWrapper.isRowSelection()){var t=this.rowNode.isSelected();this.rowNode.setSelected(!t)}e.preventDefault()},t.prototype.onMouseDown=function(e){var t=!1,o=e.button,i=e.ctrlKey,n=e.metaKey,r=e.shiftKey,s=e.target,a=this.beans,p=a.eventService,u=a.rangeController;if(u&&(u.isCellInAnyRange(this.getCellPosition())&&2===o))return;if(f._.isBrowserIE()&&s.classList.contains(\"ag-cell\")&&(t=!0),!r||u&&!u.getCellRanges().length?this.focusCell(t):e.preventDefault(),!f._.isElementChildOfClass(s,\"ag-selection-checkbox\",3)){if(f._.isLeftClick(e)&&u){var d=this.cellPosition;if(r)u.extendLatestRangeToCell(d);else{var c=i||n;u.setRangeToCell(d,c)}}var h=this.createEvent(e,l.Events.EVENT_CELL_MOUSE_DOWN);p.dispatchEvent(h)}},t.prototype.isDoubleClickOnIPad=function(){if(!f._.isUserAgentIPad())return!1;var e=(new Date).getTime(),t=e-this.lastIPadMouseClickEvent<200;return this.lastIPadMouseClickEvent=e,t},t.prototype.onCellClicked=function(e){if(this.isDoubleClickOnIPad())return this.onCellDoubleClicked(e),void e.preventDefault();var t=this.createEvent(e,l.Events.EVENT_CELL_CLICKED);this.beans.eventService.dispatchEvent(t);var o=this.getComponentHolder();o.onCellClicked&&window.setTimeout(function(){return o.onCellClicked(t)},0),(this.beans.gridOptionsWrapper.isSingleClickEdit()||o.singleClickEdit)&&!this.beans.gridOptionsWrapper.isSuppressClickEdit()&&this.startRowOrCellEdit(),f._.doIeFocusHack(this.getGui())},t.prototype.createGridCellVo=function(){this.cellPosition={rowIndex:this.rowNode.rowIndex,rowPinned:this.rowNode.rowPinned,column:this.column}},t.prototype.getCellPosition=function(){return this.cellPosition},t.prototype.getParentRow=function(){return this.eParentRow},t.prototype.setParentRow=function(e){this.eParentRow=e},t.prototype.getColumn=function(){return this.column},t.prototype.getComponentHolder=function(){return this.column.getColDef()},t.prototype.detach=function(){this.eParentRow.removeChild(this.getGui())},t.prototype.destroy=function(){e.prototype.destroy.call(this),this.cellEditor&&this.cellEditor.destroy&&(this.cellEditor.destroy(),this.cellEditor=null),this.cellRenderer&&this.cellRenderer.destroy&&(this.cellRenderer.destroy(),this.cellRenderer=null),this.selectionHandle&&this.selectionHandle.destroy()},t.prototype.onLeftChanged=function(){var e=this.modifyLeftForPrintLayout(this.getCellLeft());this.getGui().style.left=e+\"px\"},t.prototype.modifyLeftForPrintLayout=function(e){return this.printLayout?this.column.getPinned()===s.Column.PINNED_LEFT?e:this.column.getPinned()===s.Column.PINNED_RIGHT?this.beans.columnController.getPinnedLeftContainerWidth()+this.beans.columnController.getBodyContainerWidth()+e:this.beans.columnController.getPinnedLeftContainerWidth()+e:e},t.prototype.onWidthChanged=function(){var e=this.getCellWidth();this.getGui().style.width=e+\"px\"},t.prototype.getRangeBorders=function(){var e,t,o=this,i=this.beans.gridOptionsWrapper.isEnableRtl(),n=!1,r=!1,s=!1,a=!1,l=this.cellPosition.column,p=this.beans.rangeController;i?(e=this.beans.columnController.getDisplayedColAfter(l),t=this.beans.columnController.getDisplayedColBefore(l)):(e=this.beans.columnController.getDisplayedColBefore(l),t=this.beans.columnController.getDisplayedColAfter(l));var u=p.getCellRanges().filter(function(e){return p.isCellInSpecificRange(o.cellPosition,e)});e||(a=!0),t||(r=!0);for(var d=0;d<u.length&&!(n&&r&&s&&a);d++){var c=u[d],h=p.getRangeStartRow(c),f=p.getRangeEndRow(c);!n&&this.beans.rowPositionUtils.sameRow(h,this.cellPosition)&&(n=!0),!s&&this.beans.rowPositionUtils.sameRow(f,this.cellPosition)&&(s=!0),!a&&c.columns.indexOf(e)<0&&(a=!0),!r&&c.columns.indexOf(t)<0&&(r=!0)}return{top:n,right:r,bottom:s,left:a}},t.prototype.getInitialRangeClasses=function(){var e=[];if(!this.rangeSelectionEnabled||!this.rangeCount)return e;var t=this.beans.rangeController;e.push(\"ag-cell-range-selected\"),this.hasChartRange&&e.push(\"ag-cell-range-chart\");var o=Math.min(this.rangeCount,4);if(e.push(\"ag-cell-range-selected-\"+o),1!==this.rangeCount||t.isMoreThanOneCell()||e.push(\"ag-cell-range-single-cell\"),this.rangeCount>0){var i=this.getRangeBorders();i.top&&e.push(\"ag-cell-range-top\"),i.right&&e.push(\"ag-cell-range-right\"),i.bottom&&e.push(\"ag-cell-range-bottom\"),i.left&&e.push(\"ag-cell-range-left\")}return this.selectionHandle&&e.push(\"ag-cell-range-handle\"),e},t.prototype.onRowIndexChanged=function(){this.createGridCellVo(),this.onCellFocused(),this.onRangeSelectionChanged()},t.prototype.onRangeSelectionChanged=function(){if(this.beans.enterprise){var e=this.beans,t=this.cellPosition,o=this.rangeCount,i=e.rangeController,n=i.getCellRangeCount(t),r=this.getGui();o!==n&&(f._.addOrRemoveCssClass(r,\"ag-cell-range-selected\",0!==n),f._.addOrRemoveCssClass(r,\"ag-cell-range-selected-1\",1===n),f._.addOrRemoveCssClass(r,\"ag-cell-range-selected-2\",2===n),f._.addOrRemoveCssClass(r,\"ag-cell-range-selected-3\",3===n),f._.addOrRemoveCssClass(r,\"ag-cell-range-selected-4\",n>=4),this.rangeCount=n);var s=this.rangeCount&&i.getCellRanges().every(function(e){return f._.exists(e.type)});this.hasChartRange!==s&&(f._.addOrRemoveCssClass(r,\"ag-cell-range-chart\",s),this.hasChartRange=s),this.updateRangeBorders();var a=1===this.rangeCount&&!i.isMoreThanOneCell();f._.addOrRemoveCssClass(r,\"ag-cell-range-single-cell\",a),this.refreshHandle(),f._.addOrRemoveCssClass(r,\"ag-cell-range-handle\",!!this.selectionHandle)}},t.prototype.shouldHaveSelectionHandle=function(){var e=this.beans,t=e.gridOptionsWrapper,o=e.rangeController,i=this.getGui(),n=o.getCellRanges(),r=n.length;if(!r)return!1;var s=f._.last(n),a=n[0].type===d.CellRangeType.DIMENSION,l=(t.isEnableFillHandle()||t.isEnableRangeHandle()||this.hasChartRange&&!a)&&1===r;if(!l&&this.hasChartRange){var p=this.getCellPosition();l=a&&2===r&&o.isCellInSpecificRange(this.getCellPosition(),s);var u=a&&o.isCellInSpecificRange(p,n[0]);f._.addOrRemoveCssClass(i,\"ag-cell-range-chart-category\",u)}return this.rangeCount&&l&&null!=s.endRow&&this.beans.rangeController.isContiguousRange(s)&&(f._.containsClass(i,\"ag-cell-range-single-cell\")||f._.containsClass(i,\"ag-cell-range-bottom\")&&f._.containsClass(i,\"ag-cell-range-right\"))},t.prototype.addSelectionHandle=function(){var e=this.beans,t=e.gridOptionsWrapper,o=e.context,i=e.rangeController,n=f._.last(i.getCellRanges()).type,r=t.isEnableFillHandle()&&f._.missing(n)?\"fill\":\"range\";this.selectionHandle&&this.selectionHandle.getType()!==r&&(this.selectionHandle.destroy(),this.selectionHandle=void 0),this.selectionHandle||(this.selectionHandle=o.createComponentFromElement(document.createElement(\"ag-\"+r+\"-handle\"))),this.selectionHandle.refresh(this)},t.prototype.updateRangeBordersIfRangeCount=function(){this.rangeCount>0&&(this.updateRangeBorders(),this.refreshHandle())},t.prototype.refreshHandle=function(){var e=this.shouldHaveSelectionHandle();this.selectionHandle&&!e&&(this.selectionHandle.destroy(),this.selectionHandle=null),e&&this.addSelectionHandle()},t.prototype.updateRangeBorders=function(){var e=this.getRangeBorders(),t=1===this.rangeCount&&!this.beans.rangeController.isMoreThanOneCell(),o=!t&&e.top,i=!t&&e.right,n=!t&&e.bottom,r=!t&&e.left,s=this.getGui();f._.addOrRemoveCssClass(s,\"ag-cell-range-top\",o),f._.addOrRemoveCssClass(s,\"ag-cell-range-right\",i),f._.addOrRemoveCssClass(s,\"ag-cell-range-bottom\",n),f._.addOrRemoveCssClass(s,\"ag-cell-range-left\",r)},t.prototype.onFirstRightPinnedChanged=function(){var e=this.column.isFirstRightPinned();this.firstRightPinned!==e&&(this.firstRightPinned=e,f._.addOrRemoveCssClass(this.getGui(),\"ag-cell-first-right-pinned\",e))},t.prototype.onLastLeftPinnedChanged=function(){var e=this.column.isLastLeftPinned();this.lastLeftPinned!==e&&(this.lastLeftPinned=e,f._.addOrRemoveCssClass(this.getGui(),\"ag-cell-last-left-pinned\",e))},t.prototype.populateTemplate=function(){this.usingWrapper?(this.eParentOfValue=this.getRefElement(\"eCellValue\"),this.eCellWrapper=this.getRefElement(\"eCellWrapper\"),this.includeRowDraggingComponent&&this.addRowDragging(),this.includeDndSourceComponent&&this.addDndSource(),this.includeSelectionComponent&&this.addSelectionCheckbox()):this.eParentOfValue=this.getGui()},t.prototype.getFrameworkOverrides=function(){return this.beans.frameworkOverrides},t.prototype.addRowDragging=function(){var e=this.beans.gridOptionsWrapper.isPagination(),t=this.beans.gridOptionsWrapper.isRowDragManaged(),o=this.beans.gridOptionsWrapper.isRowModelDefault();if(t){if(!o)return void f._.doOnce(function(){return console.warn(\"ag-Grid: managed row dragging is only allowed in the Client Side Row Model\")},\"CellComp.addRowDragging\");if(e)return void f._.doOnce(function(){return console.warn(\"ag-Grid: managed row dragging is not possible when doing pagination\")},\"CellComp.addRowDragging\")}var i=new c.RowDragComp(this.rowNode,this.column,this.getValueToUse(),this.beans);this.addFeature(this.beans.context,i),this.eCellWrapper.insertBefore(i.getGui(),this.eParentOfValue)},t.prototype.addDndSource=function(){var e=new g.DndSourceComp(this.rowNode,this.column,this.getValueToUse(),this.beans,this.getGui());this.addFeature(this.beans.context,e),this.eCellWrapper.insertBefore(e.getGui(),this.eParentOfValue)},t.prototype.addSelectionCheckbox=function(){var e=new u.CheckboxSelectionComponent;this.beans.context.wireBean(e);var t=this.getComponentHolder().checkboxSelection;t=\"function\"==typeof t?t:null,e.init({rowNode:this.rowNode,column:this.column,visibleFunc:t}),this.addDestroyFunc(function(){return e.destroy()}),this.eCellWrapper.insertBefore(e.getGui(),this.eParentOfValue)},t.prototype.addDomData=function(){var e=this,o=this.getGui();this.beans.gridOptionsWrapper.setDomData(o,t.DOM_DATA_KEY_CELL_COMP,this),this.addDestroyFunc(function(){return e.beans.gridOptionsWrapper.setDomData(o,t.DOM_DATA_KEY_CELL_COMP,null)})},t.prototype.onCellFocused=function(e){var t=this.beans.focusedCellController.isCellFocused(this.cellPosition);t!==this.cellFocused&&(!this.beans.gridOptionsWrapper.isSuppressCellSelection()&&f._.addOrRemoveCssClass(this.getGui(),\"ag-cell-focus\",t),this.cellFocused=t);if(t&&e&&e.forceBrowserFocus){var o=this.getGui();o.focus(),f._.doIeFocusHack(o)}var i=this.beans.gridOptionsWrapper.isFullRowEdit();t||i||!this.editingCell||this.stopRowOrCellEdit()},t.prototype.stopRowOrCellEdit=function(e){void 0===e&&(e=!1),this.beans.gridOptionsWrapper.isFullRowEdit()?this.rowComp.stopRowEditing(e):this.stopEditing(e)},t.prototype.stopEditing=function(e){if(void 0===e&&(e=!1),this.editingCell)if(this.cellEditor){var t,o=!1;if(!e)this.cellEditor.isCancelAfterEnd&&this.cellEditor.isCancelAfterEnd()||(t=this.cellEditor.getValue(),o=!0);if(this.editingCell=!1,this.cellEditor.destroy&&this.cellEditor.destroy(),this.cellEditor=null,this.cellEditorInPopup&&this.hideEditorPopup)this.hideEditorPopup(),this.hideEditorPopup=null;else if(f._.clearElement(this.getGui()),this.usingWrapper)this.getGui().appendChild(this.eCellWrapper);else if(this.cellRenderer){var i=this.cellRendererGui;i&&this.getGui().appendChild(i)}this.setInlineEditingClass(),o&&(this.suppressRefreshCell=!0,this.rowNode.setDataValue(this.column,t),this.suppressRefreshCell=!1),this.refreshCell({forceRefresh:!0,suppressFlash:!0});var n=this.createEvent(null,l.Events.EVENT_CELL_EDITING_STOPPED);this.beans.eventService.dispatchEvent(n)}else this.editingCell=!1},t.DOM_DATA_KEY_CELL_COMP=\"cellComp\",t.CELL_RENDERER_TYPE_NORMAL=\"cellRenderer\",t.CELL_RENDERER_TYPE_PINNED=\"pinnedRowCellRenderer\",t}(p.Component);t.CellComp=y},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(0),s=o(1),a={\"ag-theme-material\":{headerHeight:56,virtualItemHeight:40,rowHeight:48},\"ag-theme-classic\":{headerHeight:25,virtualItemHeight:20,rowHeight:25},\"ag-theme-balham\":{headerHeight:32,virtualItemHeight:28,rowHeight:28}},l={headerHeight:[\"ag-header-row\"],virtualItemHeight:[\"ag-virtual-list-container\",\"ag-virtual-list-item\"],rowHeight:[\"ag-row\"]},p={},u=function(){function e(){}return e.prototype.getSassVariable=function(e,t){var o=\"ag-theme-\"+(e.match(\"material\")?\"material\":e.match(\"balham\")?\"balham\":\"classic\"),i=a[o][t],n=0;if(p[e]||(p[e]={}),p[e][t])return p[e][t];if(l[t]){var r=l[t],u=document.createElement(\"div\"),d=r.reduce(function(t,o,i){0===i&&s._.addCssClass(t,e);var n=document.createElement(\"div\");return s._.addCssClass(n,o),t.appendChild(n),n},u);document.body&&(document.body.appendChild(u),n=parseInt(window.getComputedStyle(d).height,10),document.body.removeChild(u))}return p[e][t]=n||i,p[e][t]},e.prototype.isThemeDark=function(){var e=this.getTheme().theme;return!!e&&e.indexOf(\"dark\")>=0},e.prototype.getTheme=function(){for(var e,t=/\\bag-(fresh|dark|blue|material|bootstrap|(?:theme-([\\w\\-]*)))\\b/,o=this.eGridDiv;o&&!(e=t.exec(o.className));)o=o.parentElement;if(!e)return{};var i=e[0];if(void 0===e[2]){var n=i.replace(\"ag-\",\"ag-theme-\");s._.doOnce(function(){return console.warn(\"ag-Grid: As of v19 old theme are no longer provided. Please replace \"+i+\" with \"+n+\".\")},\"using-old-theme\")}return{theme:i,el:o}},i([r.Autowired(\"eGridDiv\"),n(\"design:type\",HTMLElement)],e.prototype,\"eGridDiv\",void 0),e=i([r.Bean(\"environment\")],e)}();t.Environment=u},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */Object.defineProperty(t,\"__esModule\",{value:!0});var i=o(3),n=o(1),r=function(){function e(e,t){var o=this;void 0===t&&(t=!1),this.destroyFuncs=[],this.touching=!1,this.eventService=new i.EventService,this.eElement=e,this.preventMouseClick=t;var n=this.onTouchStart.bind(this),r=this.onTouchMove.bind(this),s=this.onTouchEnd.bind(this);this.eElement.addEventListener(\"touchstart\",n,{passive:!0}),this.eElement.addEventListener(\"touchmove\",r,{passive:!0}),this.eElement.addEventListener(\"touchend\",s,{passive:!1}),this.destroyFuncs.push(function(){o.eElement.removeEventListener(\"touchstart\",n,{passive:!0}),o.eElement.removeEventListener(\"touchmove\",r,{passive:!0}),o.eElement.removeEventListener(\"touchend\",s,{passive:!1})})}return e.prototype.getActiveTouch=function(e){for(var t=0;t<e.length;t++){if(e[t].identifier===this.touchStart.identifier)return e[t]}return null},e.prototype.addEventListener=function(e,t){this.eventService.addEventListener(e,t)},e.prototype.removeEventListener=function(e,t){this.eventService.removeEventListener(e,t)},e.prototype.onTouchStart=function(t){var o=this;if(!this.touching){this.touchStart=t.touches[0],this.touching=!0,this.moved=!1;var i=this.touchStart;window.setTimeout(function(){var n=o.touchStart===i;if(o.touching&&n&&!o.moved){o.moved=!0;var r={type:e.EVENT_LONG_TAP,touchStart:o.touchStart,touchEvent:t};o.eventService.dispatchEvent(r)}},500)}},e.prototype.onTouchMove=function(e){if(this.touching){var t=this.getActiveTouch(e.touches);if(t)!n._.areEventsNear(t,this.touchStart,4)&&(this.moved=!0)}},e.prototype.onTouchEnd=function(t){if(this.touching){if(!this.moved){var o={type:e.EVENT_TAP,touchStart:this.touchStart};this.eventService.dispatchEvent(o),this.checkForDoubleTap()}this.preventMouseClick&&t.preventDefault(),this.touching=!1}},e.prototype.checkForDoubleTap=function(){var t=(new Date).getTime();if(this.lastTapTime&&this.lastTapTime>0)if(t-this.lastTapTime>e.DOUBLE_TAP_MILLIS){var o={type:e.EVENT_DOUBLE_TAP,touchStart:this.touchStart};this.eventService.dispatchEvent(o),this.lastTapTime=null}else this.lastTapTime=t;else this.lastTapTime=t},e.prototype.destroy=function(){this.destroyFuncs.forEach(function(e){return e()})},e.EVENT_TAP=\"tap\",e.EVENT_DOUBLE_TAP=\"doubleTap\",e.EVENT_LONG_TAP=\"longTap\",e.DOUBLE_TAP_MILLIS=500,e}();t.TouchListener=r},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(0),s=o(2),a=o(21),l=function(){function e(){}return e.prototype.formatValue=function(e,t,o,i){var n,r=e.getColDef(),s=null;if(n=t&&t.rowPinned&&r.pinnedRowValueFormatter?r.pinnedRowValueFormatter:r.valueFormatter){var a={value:i,node:t,data:t?t.data:null,colDef:e.getColDef(),column:e,api:this.gridOptionsWrapper.getApi(),columnApi:this.gridOptionsWrapper.getColumnApi(),context:this.gridOptionsWrapper.getContext()};a.$scope=o,s=this.expressionService.evaluate(n,a)}else if(r.refData)return r.refData[i]||\"\";return null==s&&Array.isArray(i)&&(s=i.join(\", \")),s},i([r.Autowired(\"gridOptionsWrapper\"),n(\"design:type\",s.GridOptionsWrapper)],e.prototype,\"gridOptionsWrapper\",void 0),i([r.Autowired(\"expressionService\"),n(\"design:type\",a.ExpressionService)],e.prototype,\"expressionService\",void 0),e=i([r.Bean(\"valueFormatterService\")],e)}();t.ValueFormatterService=l},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(0),s=o(0),a=o(2),l=o(1),p=function(){function e(){this.gridInstanceId=t.gridInstanceSequence.next()}var t;return t=e,e.prototype.init=function(){this.stampDomElementWithGridInstance()},e.prototype.stampDomElementWithGridInstance=function(){this.eGridDiv[t.GRID_DOM_KEY]=this.gridInstanceId},e.prototype.getRenderedCellForEvent=function(e){return l._.getCellCompForEvent(this.gridOptionsWrapper,e)},e.prototype.isEventFromThisGrid=function(e){for(var o=l._.getEventPath(e),i=0;i<o.length;i++){var n=o[i][t.GRID_DOM_KEY];if(l._.exists(n))return n===this.gridInstanceId}return!1},e.prototype.getCellPositionForEvent=function(e){var t=this.getRenderedCellForEvent(e);return t?t.getCellPosition():null},e.gridInstanceSequence=new l.NumberSequence,e.GRID_DOM_KEY=\"__ag_grid_instance\",i([s.Autowired(\"gridOptionsWrapper\"),n(\"design:type\",a.GridOptionsWrapper)],e.prototype,\"gridOptionsWrapper\",void 0),i([s.Autowired(\"eGridDiv\"),n(\"design:type\",HTMLElement)],e.prototype,\"eGridDiv\",void 0),i([r.PostConstruct,n(\"design:type\",Function),n(\"design:paramtypes\",[]),n(\"design:returntype\",void 0)],e.prototype,\"init\",null),e=t=i([r.Bean(\"mouseEventService\")],e)}();t.MouseEventService=p},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}),r=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},s=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(3),l=o(0),p=o(5),u=o(13),d=o(9),c=o(8),h=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t.prototype.setMouseOver=function(e){this.selectedColumns=e;var t={type:p.Events.EVENT_COLUMN_HOVER_CHANGED,api:this.gridApi,columnApi:this.columnApi};this.eventService.dispatchEvent(t)},t.prototype.clearMouseOver=function(){this.selectedColumns=null;var e={type:p.Events.EVENT_COLUMN_HOVER_CHANGED,api:this.gridApi,columnApi:this.columnApi};this.eventService.dispatchEvent(e)},t.prototype.isHovered=function(e){return this.selectedColumns&&this.selectedColumns.indexOf(e)>=0},r([l.Autowired(\"eventService\"),s(\"design:type\",a.EventService)],t.prototype,\"eventService\",void 0),r([l.Autowired(\"columnApi\"),s(\"design:type\",d.ColumnApi)],t.prototype,\"columnApi\",void 0),r([l.Autowired(\"gridApi\"),s(\"design:type\",c.GridApi)],t.prototype,\"gridApi\",void 0),t=r([l.Bean(\"columnHoverService\")],t)}(u.BeanStub);t.ColumnHoverService=h},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}),r=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},s=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(10),l=o(32),p=o(1),u=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.config={},t.TEMPLATE='<div class=\"ag-input-field\" role=\"presentation\">\\n            <label ref=\"eLabel\"></label>\\n            <div ref=\"eWrapper\" class=\"ag-wrapper ag-input-wrapper\" role=\"presentation\">\\n                <%displayField% ref=\"eInput\"></%displayField%>\\n            </div>\\n        </div>',t}return n(t,e),t.prototype.postConstruct=function(){e.prototype.postConstruct.call(this),this.setInputType(),p._.addCssClass(this.getGui(),this.className);var t=this.config,o=t.width,i=t.value;null!=o&&this.setWidth(o),null!=i&&this.setValue(i),this.addInputListeners()},t.prototype.addInputListeners=function(){var e=this;this.addDestroyableEventListener(this.eInput,\"input\",function(t){var o=t.target.value;e.setValue(o)})},t.prototype.setInputType=function(){this.inputType&&this.eInput.setAttribute(\"type\",this.inputType)},t.prototype.getInputElement=function(){return this.eInput},t.prototype.setInputWidth=function(e){return p._.setElementWidth(this.eWrapper,e),this},t.prototype.setInputName=function(e){return this.getInputElement().setAttribute(\"name\",e),this},r([a.RefSelector(\"eLabel\"),s(\"design:type\",HTMLElement)],t.prototype,\"eLabel\",void 0),r([a.RefSelector(\"eWrapper\"),s(\"design:type\",HTMLElement)],t.prototype,\"eWrapper\",void 0),r([a.RefSelector(\"eInput\"),s(\"design:type\",Object)],t.prototype,\"eInput\",void 0),t}(l.AgAbstractField);t.AgAbstractInputField=u},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(0),s=o(3),a=o(5),l=o(4),p=o(9),u=o(8),d=o(2),c=function(){function e(){}return e.prototype.setScrollsVisible=function(e){if(this.horizontalScrollShowing!==e.horizontalScrollShowing||this.verticalScrollShowing!==e.verticalScrollShowing){this.horizontalScrollShowing=e.horizontalScrollShowing,this.verticalScrollShowing=e.verticalScrollShowing;var t={type:a.Events.EVENT_SCROLL_VISIBILITY_CHANGED,api:this.gridApi,columnApi:this.columnApi};this.eventService.dispatchEvent(t)}},e.prototype.isHorizontalScrollShowing=function(){return this.horizontalScrollShowing},e.prototype.isVerticalScrollShowing=function(){return this.verticalScrollShowing},i([r.Autowired(\"eventService\"),n(\"design:type\",s.EventService)],e.prototype,\"eventService\",void 0),i([r.Autowired(\"columnController\"),n(\"design:type\",l.ColumnController)],e.prototype,\"columnController\",void 0),i([r.Autowired(\"columnApi\"),n(\"design:type\",p.ColumnApi)],e.prototype,\"columnApi\",void 0),i([r.Autowired(\"gridApi\"),n(\"design:type\",u.GridApi)],e.prototype,\"gridApi\",void 0),i([r.Autowired(\"gridOptionsWrapper\"),n(\"design:type\",d.GridOptionsWrapper)],e.prototype,\"gridOptionsWrapper\",void 0),e=i([r.Bean(\"scrollVisibleService\")],e)}();t.ScrollVisibleService=c},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(0),s=o(4),a=o(6),l=o(19),p=o(2),u=o(50),d=o(39),c=o(89),h=o(29),f=o(24),g=o(1),y=function(){function e(e){var t=e.columnController,o=e.valueService,i=e.gridOptionsWrapper,n=e.processCellCallback,r=e.processHeaderCallback,s=e.cellAndHeaderEscaper;this.columnController=t,this.valueService=o,this.gridOptionsWrapper=i,this.processCellCallback=n,this.processHeaderCallback=r,this.cellAndHeaderEscaper=s}return e.prototype.extractHeaderValue=function(e){var t=this.getHeaderName(this.processHeaderCallback,e);return null==t&&(t=\"\"),this.cellAndHeaderEscaper?this.cellAndHeaderEscaper(t):t},e.prototype.extractRowCellValue=function(e,t,o,i){var n,r=this.columnController.getRowGroupColumns().length>0;return n=i&&i.group&&r&&0===t?this.createValueForGroupNode(i):this.valueService.getValue(e,i),null==(n=this.processCell(i,e,n,this.processCellCallback,o))&&(n=\"\"),this.cellAndHeaderEscaper?this.cellAndHeaderEscaper(n):n},e.prototype.getHeaderName=function(e,t){return e?e({column:t,api:this.gridOptionsWrapper.getApi(),columnApi:this.gridOptionsWrapper.getColumnApi(),context:this.gridOptionsWrapper.getContext()}):this.columnController.getDisplayNameForColumn(t,\"csv\",!0)},e.prototype.createValueForGroupNode=function(e){for(var t=[e.key];e.parent;)e=e.parent,t.push(e.key);return t.reverse().join(\" -> \")},e.prototype.processCell=function(e,t,o,i,n){return i?i({column:t,node:e,value:o,api:this.gridOptionsWrapper.getApi(),columnApi:this.gridOptionsWrapper.getColumnApi(),context:this.gridOptionsWrapper.getContext(),type:n}):o},e}();t.BaseGridSerializingSession=y;var v=function(){function e(){}return e.prototype.serialize=function(e,t){var o=t&&t.skipGroups,i=t&&t.skipHeader,n=t&&t.columnGroups,r=t&&t.skipFooters,s=t&&t.skipPinnedTop,l=t&&t.skipPinnedBottom,p=t&&t.customHeader,u=t&&t.customFooter,d=t&&t.allColumns,h=t&&t.onlySelected,f=t&&t.columnKeys,y=t&&t.onlySelectedAllPages,v=t&&t.shouldRowBeSkipped||function(){return!1},m=this.gridOptionsWrapper.getApi(),C=this.gridOptionsWrapper.isGroupRemoveSingleChildren(),E=this.gridOptionsWrapper.isGroupRemoveLowestSingleChildren(),w=this.gridOptionsWrapper.getContext(),R=this.columnController.isPivotMode(),_=this.rowModel.getType()===a.Constants.ROW_MODEL_TYPE_CLIENT_SIDE,O=!_&&h,S=[];if(S=g._.existsAndNotEmpty(f)?this.columnController.getGridColumns(f):d&&!R?(S=this.gridOptionsWrapper.isTreeData()?this.columnController.getGridColumns([a.Constants.GROUP_AUTO_COLUMN_ID]):[]).concat(this.columnController.getAllPrimaryColumns()||[]):this.columnController.getAllDisplayedColumns(),p&&e.addCustomHeader(p),e.prepare(S),n){var b=new c.GroupInstanceIdCreator,P=this.displayedGroupCreator.createDisplayedGroups(S,this.columnController.getGridBalancedTree(),b,null);this.recursivelyAddHeaderGroups(P,e)}if(!i){var A=e.onNewHeaderRow();S.forEach(function(e,t){A.onColumn(e,t,void 0)})}(this.pinnedRowModel.forEachPinnedTopRow(D),R)?this.rowModel.forEachPivotNode?this.rowModel.forEachPivotNode(D):this.rowModel.forEachNode(D):y||O?this.selectionController.getSelectedNodes().forEach(function(e){D(e)}):_?this.rowModel.forEachNodeAfterFilterAndSort(D):this.rowModel.forEachNode(D);function D(t){var i=E&&t.leafGroup,n=1===t.allChildrenCount&&(C||i);if((!t.group||!o&&!n)&&((!r||!t.footer)&&(!h||t.isSelected())&&(!s||\"top\"!==t.rowPinned)&&(!l||\"bottom\"!==t.rowPinned)&&(!(-1===t.level)||t.leafGroup)&&!v({node:t,api:m,context:w}))){var a=e.onNewBodyRow();S.forEach(function(e,o){a.onColumn(e,o,t)})}}return this.pinnedRowModel.forEachPinnedBottomRow(D),u&&e.addCustomFooter(u),e.parse()},e.prototype.recursivelyAddHeaderGroups=function(e,t){var o=[];e.forEach(function(e){var t=e;t.getChildren&&t.getChildren().forEach(function(e){return o.push(e)})}),e.length>0&&e[0]instanceof h.ColumnGroup&&this.doAddHeaderHeader(t,e),o&&o.length>0&&this.recursivelyAddHeaderGroups(o,t)},e.prototype.doAddHeaderHeader=function(e,t){var o=this,i=e.onNewHeaderGroupingRow(),n=0;t.forEach(function(e){var t=e,r=o.columnController.getDisplayNameForColumnGroup(t,\"header\");i.onColumn(r||\"\",n++,t.getLeafColumns().length-1)})},i([r.Autowired(\"displayedGroupCreator\"),n(\"design:type\",u.DisplayedGroupCreator)],e.prototype,\"displayedGroupCreator\",void 0),i([r.Autowired(\"columnController\"),n(\"design:type\",s.ColumnController)],e.prototype,\"columnController\",void 0),i([r.Autowired(\"rowModel\"),n(\"design:type\",Object)],e.prototype,\"rowModel\",void 0),i([r.Autowired(\"pinnedRowModel\"),n(\"design:type\",f.PinnedRowModel)],e.prototype,\"pinnedRowModel\",void 0),i([r.Autowired(\"selectionController\"),n(\"design:type\",l.SelectionController)],e.prototype,\"selectionController\",void 0),i([r.Autowired(\"columnFactory\"),n(\"design:type\",d.ColumnFactory)],e.prototype,\"columnFactory\",void 0),i([r.Autowired(\"gridOptionsWrapper\"),n(\"design:type\",p.GridOptionsWrapper)],e.prototype,\"gridOptionsWrapper\",void 0),e=i([r.Bean(\"gridSerializer\")],e)}();t.GridSerializer=v,function(e){e[e.HEADER_GROUPING=0]=\"HEADER_GROUPING\",e[e.HEADER=1]=\"HEADER\",e[e.BODY=2]=\"BODY\"}(t.RowType||(t.RowType={}))},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(0),s=o(33),a=o(29),l=o(34),p=o(0),u=o(1),d=function(){function e(){}return e.prototype.createDisplayedGroups=function(e,t,o,i,n){var r,s,a=this,l=[],p=this.mapOldGroupsById(n);return e.forEach(function(e){for(var n=a.getOriginalPathForColumn(t,e),d=[],c=!s,h=0;h<n.length;h++)if(c||n[h]!==s[h]){var f=a.createColumnGroup(n[h],o,p,i);d[h]=f,0==h?l.push(f):d[h-1].addChild(f)}else d[h]=r[h];0===d.length?l.push(e):u._.last(d).addChild(e);r=d,s=n}),this.setupParentsIntoColumns(l,null),l},e.prototype.createColumnGroup=function(e,t,o,i){var n=e.getGroupId(),r=t.getInstanceIdForKey(n),s=o[a.ColumnGroup.createUniqueId(n,r)];return s&&s.getOriginalColumnGroup()!==e&&(s=null),u._.exists(s)?s.reset():(s=new a.ColumnGroup(e,n,r,i),this.context.wireBean(s)),s},e.prototype.mapOldGroupsById=function(e){var t={},o=function(e){e.forEach(function(e){if(e instanceof a.ColumnGroup){var i=e;t[e.getUniqueId()]=i,o(i.getChildren())}})};return e&&o(e),t},e.prototype.setupParentsIntoColumns=function(e,t){var o=this;e.forEach(function(e){if(e.setParent(t),e instanceof a.ColumnGroup){var i=e;o.setupParentsIntoColumns(i.getChildren(),i)}})},e.prototype.getOriginalPathForColumn=function(e,t){var o=[],i=!1;return function e(n,r){for(var s=0;s<n.length;s++){if(i)return;var a=n[s];if(a instanceof l.OriginalColumnGroup)e(a.getChildren(),r+1),o[r]=a;else a===t&&(i=!0)}}(e,0),i?o:(console.warn(\"could not get path\"),null)},i([r.Autowired(\"columnUtils\"),n(\"design:type\",s.ColumnUtils)],e.prototype,\"columnUtils\",void 0),i([r.Autowired(\"context\"),n(\"design:type\",p.Context)],e.prototype,\"context\",void 0),e=i([p.Bean(\"displayedGroupCreator\")],e)}();t.DisplayedGroupCreator=d},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */Object.defineProperty(t,\"__esModule\",{value:!0});var i=function(){function e(e,t){this.active=!0,this.nodeIdsToColumns={},this.mapToItems={},this.keepingColumns=e,this.pathRoot={rowNode:t,children:null},this.mapToItems[t.id]=this.pathRoot}return e.prototype.setInactive=function(){this.active=!1},e.prototype.isActive=function(){return this.active},e.prototype.depthFirstSearchChangedPath=function(e,t){if(e.children)for(var o=0;o<e.children.length;o++)this.depthFirstSearchChangedPath(e.children[o],t);t(e.rowNode)},e.prototype.depthFirstSearchEverything=function(e,t,o){if(e.childrenAfterGroup)for(var i=0;i<e.childrenAfterGroup.length;i++){var n=e.childrenAfterGroup[i];n.childrenAfterGroup?this.depthFirstSearchEverything(e.childrenAfterGroup[i],t,o):o&&t(n)}t(e)},e.prototype.forEachChangedNodeDepthFirst=function(e,t){void 0===t&&(t=!1),this.active?this.depthFirstSearchChangedPath(this.pathRoot,e):this.depthFirstSearchEverything(this.pathRoot.rowNode,e,t)},e.prototype.executeFromRootNode=function(e){e(this.pathRoot.rowNode)},e.prototype.createPathItems=function(e){for(var t=e,o=0;!this.mapToItems[t.id];){var i={rowNode:t,children:null};this.mapToItems[t.id]=i,o++,t=t.parent}return o},e.prototype.populateColumnsMap=function(e,t){var o=this;if(this.keepingColumns&&t)for(var i=e;i;)this.nodeIdsToColumns[i.id]||(this.nodeIdsToColumns[i.id]={}),t.forEach(function(e){return o.nodeIdsToColumns[i.id][e.getId()]=!0}),i=i.parent},e.prototype.linkPathItems=function(e,t){for(var o=e,i=0;i<t;i++){var n=this.mapToItems[o.id],r=this.mapToItems[o.parent.id];r.children||(r.children=[]),r.children.push(n),o=o.parent}},e.prototype.addParentNode=function(e,t){var o=this.createPathItems(e);this.linkPathItems(e,o),this.populateColumnsMap(e,t)},e.prototype.canSkip=function(e){return this.active&&!this.mapToItems[e.id]},e.prototype.getValueColumnsForNode=function(e,t){if(!this.keepingColumns)return t;var o=this.nodeIdsToColumns[e.id];return t.filter(function(e){return o[e.getId()]})},e.prototype.getNotValueColumnsForNode=function(e,t){if(!this.keepingColumns)return null;var o=this.nodeIdsToColumns[e.id];return t.filter(function(e){return!o[e.getId()]})},e}();t.ChangedPath=i},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(0),s=o(2),a=function(){function e(){this.executeNextFuncs=[],this.executeLaterFuncs=[],this.active=!1,this.animationThreadCount=0}return e.prototype.registerGridComp=function(e){this.gridPanel=e},e.prototype.isActive=function(){return this.active},e.prototype.start=function(){this.active||this.gridOptionsWrapper.isSuppressColumnMoveAnimation()||this.gridOptionsWrapper.isEnableRtl()||(this.ensureAnimationCssClassPresent(),this.active=!0)},e.prototype.finish=function(){this.active&&(this.flush(),this.active=!1)},e.prototype.executeNextVMTurn=function(e){this.active?this.executeNextFuncs.push(e):e()},e.prototype.executeLaterVMTurn=function(e){this.active?this.executeLaterFuncs.push(e):e()},e.prototype.ensureAnimationCssClassPresent=function(){var e=this;this.animationThreadCount++;var t=this.animationThreadCount;this.gridPanel.setColumnMovingCss(!0),this.executeLaterFuncs.push(function(){e.animationThreadCount===t&&e.gridPanel.setColumnMovingCss(!1)})},e.prototype.flush=function(){var e=this.executeNextFuncs;this.executeNextFuncs=[];var t=this.executeLaterFuncs;this.executeLaterFuncs=[],0===e.length&&0===t.length||(window.setTimeout(function(){return e.forEach(function(e){return e()})},0),window.setTimeout(function(){return t.forEach(function(e){return e()})},300))},i([r.Autowired(\"gridOptionsWrapper\"),n(\"design:type\",s.GridOptionsWrapper)],e.prototype,\"gridOptionsWrapper\",void 0),e=i([r.Bean(\"columnAnimationService\")],e)}();t.ColumnAnimationService=a},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(0),s=o(2),a=o(3),l=o(21),p=o(71),u=o(77),d=o(76),c=o(1),h=function(){function e(){this.cellRendererMap={}}var t;return t=e,e.prototype.init=function(){this.cellRendererMap[t.ANIMATE_SLIDE]=p.AnimateSlideCellRenderer,this.cellRendererMap[t.ANIMATE_SHOW_CHANGE]=u.AnimateShowChangeCellRenderer,this.cellRendererMap[t.GROUP]=d.GroupCellRenderer},e.prototype.addCellRenderer=function(e,t){this.cellRendererMap[e]=t},e.prototype.getCellRenderer=function(e){var t=this.cellRendererMap[e];return c._.missing(t)?(console.warn(\"ag-Grid: unable to find cellRenderer for key \"+e),null):t},e.ANIMATE_SLIDE=\"animateSlide\",e.ANIMATE_SHOW_CHANGE=\"animateShowChange\",e.GROUP=\"group\",i([r.Autowired(\"gridOptionsWrapper\"),n(\"design:type\",s.GridOptionsWrapper)],e.prototype,\"gridOptionsWrapper\",void 0),i([r.Autowired(\"expressionService\"),n(\"design:type\",l.ExpressionService)],e.prototype,\"expressionService\",void 0),i([r.Autowired(\"eventService\"),n(\"design:type\",a.EventService)],e.prototype,\"eventService\",void 0),i([r.PostConstruct,n(\"design:type\",Function),n(\"design:paramtypes\",[]),n(\"design:returntype\",void 0)],e.prototype,\"init\",null),e=t=i([r.Bean(\"cellRendererFactory\")],e)}();t.CellRendererFactory=h},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}),r=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},s=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(7),l=o(10),p=o(0),u=o(2),d=o(1),c=o(6),h=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t.prototype.onFilterChanged=function(){console.warn(\"ag-Grid: you should not call onFilterChanged() directly on the filter, please call\\n        gridApi.onFilterChanged() instead. onFilterChanged is not part of the exposed filter interface (it was\\n        a method that existed on an old version of the filters that was not intended for public use.\"),this.providedFilterParams.filterChangedCallback()},t.prototype.isFilterActive=function(){return!!this.appliedModel},t.prototype.postConstruct=function(){var e=this.createTemplate();this.setTemplate(e)},t.prototype.init=function(e){this.setParams(e),this.resetUiToDefaults(),this.updateUiVisibility(),this.setupOnBtApplyDebounce()},t.prototype.setParams=function(e){var o=this;if(this.providedFilterParams=e,this.clearActive=!0===e.clearButton,this.applyActive=t.isUseApplyButton(e),e.newRowsAction===t.NEW_ROWS_ACTION_KEEP)this.newRowsActionKeep=!0;else if(e.newRowsAction===t.NEW_ROWS_ACTION_CLEAR)this.newRowsActionKeep=!1;else{var i=this.rowModel.getType(),n=[c.Constants.ROW_MODEL_TYPE_SERVER_SIDE,c.Constants.ROW_MODEL_TYPE_INFINITE];this.newRowsActionKeep=n.indexOf(i)>=0}d._.setDisplayed(this.eApplyButton,this.applyActive),this.addDestroyableEventListener(this.eApplyButton,\"click\",function(){return o.onBtApply()}),d._.setDisplayed(this.eClearButton,this.clearActive),this.addDestroyableEventListener(this.eClearButton,\"click\",this.onBtClear.bind(this));var r=this.applyActive||this.clearActive;d._.setDisplayed(this.eButtonsPanel,r)},t.prototype.getDefaultDebounceMs=function(){return 0},t.prototype.setupOnBtApplyDebounce=function(){var e=t.getDebounceMs(this.providedFilterParams,this.getDefaultDebounceMs());this.onBtApplyDebounce=d._.debounce(this.onBtApply.bind(this),e)},t.prototype.getModel=function(){return this.appliedModel},t.prototype.setModel=function(e){e?this.setModelIntoUi(e):this.resetUiToDefaults(),this.updateUiVisibility(),this.applyModel()},t.prototype.onBtClear=function(){this.resetUiToDefaults(),this.updateUiVisibility(),this.onUiChanged()},t.prototype.applyModel=function(){var e=this.appliedModel;return this.appliedModel=this.getModelFromUi(),!this.areModelsEqual(this.appliedModel,e)},t.prototype.onBtApply=function(e){void 0===e&&(e=!1),this.applyModel()&&this.providedFilterParams.filterChangedCallback({afterFloatingFilter:e})},t.prototype.onNewRowsLoaded=function(){this.newRowsActionKeep||(this.resetUiToDefaults(),this.appliedModel=null)},t.prototype.isNewRowsActionKeep=function(){return this.newRowsActionKeep},t.prototype.onUiChanged=function(e){void 0===e&&(e=!1),this.updateUiVisibility(),this.providedFilterParams.filterModifiedCallback(),e?this.onBtApply(!0):this.applyActive||this.onBtApplyDebounce()},t.prototype.createTemplate=function(){var e=this.createBodyTemplate(),t=this.gridOptionsWrapper.getLocaleTextFunc();return\"<div>\\n                    <div class='ag-filter-body-wrapper' ref=\\\"eFilterBodyWrapper\\\">\"+e+'</div>\\n                    <div class=\"ag-filter-apply-panel\" ref=\"eButtonsPanel\">\\n                        <button type=\"button\" ref=\"eClearButton\">'+t(\"clearFilter\",\"Clear Filter\")+'</button>\\n                        <button type=\"button\" ref=\"eApplyButton\">'+t(\"applyFilter\",\"Apply Filter\")+\"</button>\\n                    </div>\\n                </div>\"},t.getDebounceMs=function(e,o){return t.isUseApplyButton(e)?(null!=e.debounceMs&&console.warn(\"ag-Grid: debounceMs is ignored when applyButton = true\"),0):null!=e.debounceMs?e.debounceMs:o},t.isUseApplyButton=function(e){return e.apply&&!e.applyButton&&(console.warn(\"ag-Grid: as of ag-Grid v21, filterParams.apply is now filterParams.applyButton, please change to applyButton\"),e.applyButton=!0),!0===e.applyButton},t.NEW_ROWS_ACTION_KEEP=\"keep\",t.NEW_ROWS_ACTION_CLEAR=\"clear\",r([l.RefSelector(\"eButtonsPanel\"),s(\"design:type\",HTMLElement)],t.prototype,\"eButtonsPanel\",void 0),r([l.RefSelector(\"eFilterBodyWrapper\"),s(\"design:type\",HTMLElement)],t.prototype,\"eFilterBodyWrapper\",void 0),r([l.RefSelector(\"eApplyButton\"),s(\"design:type\",HTMLElement)],t.prototype,\"eApplyButton\",void 0),r([l.RefSelector(\"eClearButton\"),s(\"design:type\",HTMLElement)],t.prototype,\"eClearButton\",void 0),r([p.Autowired(\"gridOptionsWrapper\"),s(\"design:type\",u.GridOptionsWrapper)],t.prototype,\"gridOptionsWrapper\",void 0),r([p.Autowired(\"rowModel\"),s(\"design:type\",Object)],t.prototype,\"rowModel\",void 0),r([p.PostConstruct,s(\"design:type\",Function),s(\"design:paramtypes\",[]),s(\"design:returntype\",void 0)],t.prototype,\"postConstruct\",null),t}(a.Component);t.ProvidedFilter=h},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}),r=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},s=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(13),l=o(0),p=o(3),u=o(28),d=o(2),c=o(1),h=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.scrollY=0,t.uiBodyHeight=0,t}return n(t,e),t.prototype.postConstruct=function(){this.addDestroyableEventListener(this.eventService,u.Events.EVENT_BODY_HEIGHT_CHANGED,this.updateOffset.bind(this)),this.scrollBarWidth=this.gridOptionsWrapper.getScrollbarWidth(),this.maxDivHeight=c._.getMaxDivHeight()},t.prototype.registerGridComp=function(e){this.gridPanel=e},t.prototype.isScaling=function(){return this.scaling},t.prototype.getOffset=function(){return this.offset},t.prototype.updateOffset=function(){if(this.scaling){var e=this.gridPanel.getVScrollPosition().top,t=this.getUiBodyHeight();(e!==this.scrollY||t!==this.uiBodyHeight)&&(this.scrollY=e,this.uiBodyHeight=t,this.calculateOffset())}},t.prototype.calculateOffset=function(){this.uiContainerHeight=this.maxDivHeight,this.pixelsToShave=this.modelHeight-this.uiContainerHeight,this.maxScrollY=this.uiContainerHeight-this.uiBodyHeight;var e=this.scrollY/this.maxScrollY;this.setOffset(e*this.pixelsToShave)},t.prototype.clearOffset=function(){this.uiContainerHeight=this.modelHeight,this.pixelsToShave=0,this.setOffset(0)},t.prototype.setOffset=function(e){var t=\"number\"==typeof e?Math.floor(e):null;this.offset!==t&&(this.offset=t,this.eventService.dispatchEvent({type:u.Events.EVENT_HEIGHT_SCALE_CHANGED}))},t.prototype.setModelHeight=function(e){this.modelHeight=e,this.scaling=this.maxDivHeight>0&&e>this.maxDivHeight,this.scaling?this.calculateOffset():this.clearOffset()},t.prototype.getUiContainerHeight=function(){return this.uiContainerHeight},t.prototype.getRealPixelPosition=function(e){return e-this.offset},t.prototype.getUiBodyHeight=function(){var e=this.gridPanel.getVScrollPosition();return e.bottom-e.top},t.prototype.getScrollPositionForPixel=function(e){if(this.pixelsToShave<=0)return e;var t=e/(this.modelHeight-this.getUiBodyHeight());return this.maxScrollY*t},r([l.Autowired(\"eventService\"),s(\"design:type\",p.EventService)],t.prototype,\"eventService\",void 0),r([l.Autowired(\"gridOptionsWrapper\"),s(\"design:type\",d.GridOptionsWrapper)],t.prototype,\"gridOptionsWrapper\",void 0),r([l.PostConstruct,s(\"design:type\",Function),s(\"design:paramtypes\",[]),s(\"design:returntype\",void 0)],t.prototype,\"postConstruct\",null),t=r([l.Bean(\"maxDivHeightScaler\")],t)}(a.BeanStub);t.MaxDivHeightScaler=h},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(6),s=o(0),a=o(24),l=o(1),p=function(){function e(){}return e.prototype.getRowNode=function(e){switch(e.rowPinned){case r.Constants.PINNED_TOP:return this.pinnedRowModel.getPinnedTopRowData()[e.rowIndex];case r.Constants.PINNED_BOTTOM:return this.pinnedRowModel.getPinnedBottomRowData()[e.rowIndex];default:return this.rowModel.getRow(e.rowIndex)}},e.prototype.sameRow=function(e,t){return!e&&!t||!(e&&!t||!e&&t)&&(e.rowIndex===t.rowIndex&&e.rowPinned==t.rowPinned)},e.prototype.before=function(e,t){switch(e.rowPinned){case r.Constants.PINNED_TOP:if(t.rowPinned!==r.Constants.PINNED_TOP)return!0;break;case r.Constants.PINNED_BOTTOM:if(t.rowPinned!==r.Constants.PINNED_BOTTOM)return!1;break;default:if(l._.exists(t.rowPinned))return t.rowPinned!==r.Constants.PINNED_TOP}return e.rowIndex<t.rowIndex},i([s.Autowired(\"rowModel\"),n(\"design:type\",Object)],e.prototype,\"rowModel\",void 0),i([s.Autowired(\"pinnedRowModel\"),n(\"design:type\",a.PinnedRowModel)],e.prototype,\"pinnedRowModel\",void 0),e=i([s.Bean(\"rowPositionUtils\")],e)}();t.RowPositionUtils=p},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(2),s=o(0),a=o(30),l=function(){function e(){}return e.prototype.addResizeBar=function(e){var t=this,o={dragStartPixels:e.dragStartPixels||0,eElement:e.eResizeBar,onDragStart:this.onDragStart.bind(this,e),onDragStop:this.onDragStop.bind(this,e),onDragging:this.onDragging.bind(this,e)};this.dragService.addDragSource(o,!0);return function(){return t.dragService.removeDragSource(o)}},e.prototype.onDragStart=function(e,t){this.draggingStarted=!0,this.dragStartX=t.clientX,this.setResizeIcons();var o=t instanceof MouseEvent&&!0===t.shiftKey;e.onResizeStart(o)},e.prototype.setResizeIcons=function(){this.oldBodyCursor=this.eGridDiv.style.cursor,this.oldMsUserSelect=this.eGridDiv.style.msUserSelect,this.oldWebkitUserSelect=this.eGridDiv.style.webkitUserSelect,this.eGridDiv.style.cursor=\"col-resize\",this.eGridDiv.style.msUserSelect=\"none\",this.eGridDiv.style.webkitUserSelect=\"none\"},e.prototype.onDragStop=function(e,t){e.onResizeEnd(this.resizeAmount),this.resetIcons()},e.prototype.resetIcons=function(){this.eGridDiv.style.cursor=this.oldBodyCursor,this.eGridDiv.style.msUserSelect=this.oldMsUserSelect,this.eGridDiv.style.webkitUserSelect=this.oldWebkitUserSelect},e.prototype.onDragging=function(e,t){this.resizeAmount=t.clientX-this.dragStartX,e.onResizing(this.resizeAmount)},i([s.Autowired(\"gridOptionsWrapper\"),n(\"design:type\",r.GridOptionsWrapper)],e.prototype,\"gridOptionsWrapper\",void 0),i([s.Autowired(\"dragService\"),n(\"design:type\",a.DragService)],e.prototype,\"dragService\",void 0),i([s.Autowired(\"eGridDiv\"),n(\"design:type\",HTMLElement)],e.prototype,\"eGridDiv\",void 0),e=i([s.Bean(\"horizontalResizeService\")],e)}();t.HorizontalResizeService=l},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)});Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(11),s=o(13),a=o(6),l=o(1),p=function(e){function t(t,o,i,n){var r=e.call(this)||this;return r.columnOrGroup=t,r.eCell=o,r.colsSpanning=n,r.beans=i,r.printLayout=i.gridOptionsWrapper.getDomLayout()===a.Constants.DOM_LAYOUT_PRINT,r}return n(t,e),t.prototype.setColsSpanning=function(e){this.colsSpanning=e,this.onLeftChanged()},t.prototype.getColumnOrGroup=function(){return this.beans.gridOptionsWrapper.isEnableRtl()&&this.colsSpanning?l._.last(this.colsSpanning):this.columnOrGroup},t.prototype.init=function(){this.addDestroyableEventListener(this.columnOrGroup,r.Column.EVENT_LEFT_CHANGED,this.onLeftChanged.bind(this)),this.setLeftFirstTime()},t.prototype.setLeftFirstTime=function(){var e=this.beans.gridOptionsWrapper.isSuppressColumnMoveAnimation(),t=l._.exists(this.columnOrGroup.getOldLeft());this.beans.columnAnimationService.isActive()&&t&&!e?this.animateInLeft():this.onLeftChanged()},t.prototype.animateInLeft=function(){var e=this,t=this.getColumnOrGroup().getLeft(),o=this.getColumnOrGroup().getOldLeft();this.setLeft(o),this.actualLeft=t,this.beans.columnAnimationService.executeNextVMTurn(function(){e.actualLeft===t&&e.setLeft(t)})},t.prototype.onLeftChanged=function(){var e=this.getColumnOrGroup(),t=e.getLeft();this.actualLeft=this.modifyLeftForPrintLayout(e,t),this.setLeft(this.actualLeft)},t.prototype.modifyLeftForPrintLayout=function(e,t){return this.printLayout?e.getPinned()===r.Column.PINNED_LEFT?t:e.getPinned()===r.Column.PINNED_RIGHT?this.beans.columnController.getPinnedLeftContainerWidth()+this.beans.columnController.getBodyContainerWidth()+t:this.beans.columnController.getPinnedLeftContainerWidth()+t:t},t.prototype.setLeft=function(e){l._.exists(e)&&(this.eCell.style.left=e+\"px\")},t}(s.BeanStub);t.SetLeftFeature=p},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)},r=this&&this.__param||function(e,t){return function(o,i){t(o,i,e)}};Object.defineProperty(t,\"__esModule\",{value:!0});var s=o(2),a=o(4),l=o(3),p=o(12),u=o(5),d=o(0),c=o(0),h=o(0),f=o(0),g=function(){function e(){this.consuming=!1}return e.prototype.setBeans=function(e){this.logger=e.create(\"AlignedGridsService\")},e.prototype.registerGridComp=function(e){this.gridPanel=e},e.prototype.init=function(){this.eventService.addEventListener(u.Events.EVENT_COLUMN_MOVED,this.fireColumnEvent.bind(this)),this.eventService.addEventListener(u.Events.EVENT_COLUMN_VISIBLE,this.fireColumnEvent.bind(this)),this.eventService.addEventListener(u.Events.EVENT_COLUMN_PINNED,this.fireColumnEvent.bind(this)),this.eventService.addEventListener(u.Events.EVENT_COLUMN_GROUP_OPENED,this.fireColumnEvent.bind(this)),this.eventService.addEventListener(u.Events.EVENT_COLUMN_RESIZED,this.fireColumnEvent.bind(this)),this.eventService.addEventListener(u.Events.EVENT_BODY_SCROLL,this.fireScrollEvent.bind(this))},e.prototype.fireEvent=function(e){if(!this.consuming){var t=this.gridOptionsWrapper.getAlignedGrids();t&&t.forEach(function(t){if(t.api){var o=t.api.__getAlignedGridService();e(o)}})}},e.prototype.onEvent=function(e){this.consuming=!0,e(),this.consuming=!1},e.prototype.fireColumnEvent=function(e){this.fireEvent(function(t){t.onColumnEvent(e)})},e.prototype.fireScrollEvent=function(e){\"horizontal\"===e.direction&&this.fireEvent(function(t){t.onScrollEvent(e)})},e.prototype.onScrollEvent=function(e){var t=this;this.onEvent(function(){t.gridPanel.setHorizontalScrollPosition(e.left)})},e.prototype.getMasterColumns=function(e){var t=[];return e.columns?e.columns.forEach(function(e){t.push(e)}):e.column&&t.push(e.column),t},e.prototype.getColumnIds=function(e){var t=[];return e.columns?e.columns.forEach(function(e){t.push(e.getColId())}):e.column&&t.push(e.column.getColId()),t},e.prototype.onColumnEvent=function(e){var t=this;this.onEvent(function(){switch(e.type){case u.Events.EVENT_COLUMN_MOVED:case u.Events.EVENT_COLUMN_VISIBLE:case u.Events.EVENT_COLUMN_PINNED:case u.Events.EVENT_COLUMN_RESIZED:var o=e;t.processColumnEvent(o);break;case u.Events.EVENT_COLUMN_GROUP_OPENED:var i=e;t.processGroupOpenedEvent(i);break;case u.Events.EVENT_COLUMN_PIVOT_CHANGED:console.warn(\"ag-Grid: pivoting is not supported with aligned grids. You can only use one of these features at a time in a grid.\")}})},e.prototype.processGroupOpenedEvent=function(e){var t,o=e.columnGroup;if(o){var i=o.getGroupId();t=this.columnController.getOriginalColumnGroup(i)}o&&!t||(this.logger.log(\"onColumnEvent-> processing \"+e+\" expanded = \"+o.isExpanded()),this.columnController.setColumnGroupOpened(t,o.isExpanded(),\"alignedGridChanged\"))},e.prototype.processColumnEvent=function(e){var t,o=this,i=e.column;if(i&&(t=this.columnController.getPrimaryColumn(i.getColId())),!i||t){var n=this.getColumnIds(e),r=this.getMasterColumns(e);switch(e.type){case u.Events.EVENT_COLUMN_MOVED:var s=e;this.logger.log(\"onColumnEvent-> processing \"+e.type+\" toIndex = \"+s.toIndex),this.columnController.moveColumns(n,s.toIndex,\"alignedGridChanged\");break;case u.Events.EVENT_COLUMN_VISIBLE:var a=e;this.logger.log(\"onColumnEvent-> processing \"+e.type+\" visible = \"+a.visible),this.columnController.setColumnsVisible(n,a.visible,\"alignedGridChanged\");break;case u.Events.EVENT_COLUMN_PINNED:var l=e;this.logger.log(\"onColumnEvent-> processing \"+e.type+\" pinned = \"+l.pinned),this.columnController.setColumnsPinned(n,l.pinned,\"alignedGridChanged\");break;case u.Events.EVENT_COLUMN_RESIZED:var p=e;r.forEach(function(t){o.logger.log(\"onColumnEvent-> processing \"+e.type+\" actualWidth = \"+t.getActualWidth()),o.columnController.setColumnWidth(t.getColId(),t.getActualWidth(),!1,p.finished,\"alignedGridChanged\")})}var d=this.gridPanel.isVerticalScrollShowing();this.gridOptionsWrapper.getAlignedGrids().forEach(function(e){e.api.setAlwaysShowVerticalScroll(d)})}},i([h.Autowired(\"gridOptionsWrapper\"),n(\"design:type\",s.GridOptionsWrapper)],e.prototype,\"gridOptionsWrapper\",void 0),i([h.Autowired(\"columnController\"),n(\"design:type\",a.ColumnController)],e.prototype,\"columnController\",void 0),i([h.Autowired(\"eventService\"),n(\"design:type\",l.EventService)],e.prototype,\"eventService\",void 0),i([r(0,c.Qualifier(\"loggerFactory\")),n(\"design:type\",Function),n(\"design:paramtypes\",[p.LoggerFactory]),n(\"design:returntype\",void 0)],e.prototype,\"setBeans\",null),i([f.PostConstruct,n(\"design:type\",Function),n(\"design:paramtypes\",[]),n(\"design:returntype\",void 0)],e.prototype,\"init\",null),e=i([d.Bean(\"alignedGridsService\")],e)}();t.AlignedGridsService=g},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(0),s=o(2),a=o(1),l=function(){function e(){}return e.prototype.observeResize=function(e,t,o){void 0===o&&(o=50);var i,n,r,s,l,p=this.frameworkOverrides,u=a._.debounce(t,o),d=this.gridOptionsWrapper.isSuppressBrowserResizeObserver();return!!window.ResizeObserver&&!d?((l=new window.ResizeObserver(u)).observe(e),function(){return l.disconnect()}):(i=a._.offsetWidth(e),n=a._.offsetHeight(e),r=!0,(s=function(){if(r){var l=a._.offsetWidth(e),u=a._.offsetHeight(e);(l!==i||u!==n)&&(i=l,n=u,t()),p.setTimeout(s,o)}})(),function(){return r=!1})},i([r.Autowired(\"gridOptionsWrapper\"),n(\"design:type\",s.GridOptionsWrapper)],e.prototype,\"gridOptionsWrapper\",void 0),i([r.Autowired(\"frameworkOverrides\"),n(\"design:type\",Object)],e.prototype,\"frameworkOverrides\",void 0),e=i([r.Bean(\"resizeObserverService\")],e)}();t.ResizeObserverService=l},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)});Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(1),s=o(18),a=function(e){function t(o,i){var n=e.call(this)||this;return n.version=0,n.state=t.STATE_DIRTY,n.rowNodeCacheParams=i,n.blockNumber=o,n.startRow=o*i.blockSize,n.endRow=n.startRow+i.blockSize,n}return n(t,e),t.prototype.isAnyNodeOpen=function(e){var t=!1;return this.forEachNodeCallback(function(e){e.expanded&&(t=!0)},e),t},t.prototype.forEachNodeCallback=function(e,t){for(var o=this.startRow;o<this.endRow;o++){if(o<t)e(this.getRowUsingLocalIndex(o),o)}},t.prototype.forEachNode=function(e,t,o,i){this.forEachNodeCallback(function(o){e(o,t.next()),i&&o.childrenCache&&o.childrenCache.forEachNodeDeep(e,t)},o)},t.prototype.forEachNodeDeep=function(e,t,o){this.forEachNode(e,t,o,!0)},t.prototype.forEachNodeShallow=function(e,t,o){this.forEachNode(e,t,o,!1)},t.prototype.getVersion=function(){return this.version},t.prototype.getLastAccessed=function(){return this.lastAccessed},t.prototype.getRowUsingLocalIndex=function(e,t){void 0===t&&(t=!1),t||(this.lastAccessed=this.rowNodeCacheParams.lastAccessedSequence.next());var o=e-this.startRow;return this.rowNodes[o]},t.prototype.init=function(e){this.beans=e,this.createRowNodes()},t.prototype.getStartRow=function(){return this.startRow},t.prototype.getEndRow=function(){return this.endRow},t.prototype.getBlockNumber=function(){return this.blockNumber},t.prototype.setDirty=function(){this.version++,this.state=t.STATE_DIRTY},t.prototype.setDirtyAndPurge=function(){this.setDirty(),this.rowNodes.forEach(function(e){e.setData(null)})},t.prototype.getState=function(){return this.state},t.prototype.setRowNode=function(e,t){var o=e-this.startRow;this.rowNodes[o]=t},t.prototype.setBlankRowNode=function(e){var t=e-this.startRow,o=this.createBlankRowNode(e);return this.rowNodes[t]=o,o},t.prototype.setNewData=function(e,t){var o=this.setBlankRowNode(e);return this.setDataAndId(o,t,this.startRow+e),o},t.prototype.createBlankRowNode=function(e){var t=new s.RowNode;return this.beans.context.wireBean(t),t.setRowHeight(this.rowNodeCacheParams.rowHeight),t},t.prototype.createRowNodes=function(){this.rowNodes=[];for(var e=0;e<this.rowNodeCacheParams.blockSize;e++){var t=this.startRow+e,o=this.createBlankRowNode(t);this.rowNodes.push(o)}},t.prototype.load=function(){this.state=t.STATE_LOADING,this.loadFromDatasource()},t.prototype.pageLoadFailed=function(){this.state=t.STATE_FAILED;var e={type:t.EVENT_LOAD_COMPLETE,success:!1,page:this,lastRow:null};this.dispatchEvent(e)},t.prototype.populateWithRowData=function(e){var t=this,o=[];this.rowNodes.forEach(function(i,n){var r=e[n];i.stub&&o.push(i),t.setDataAndId(i,r,t.startRow+n)}),o.length>0&&this.beans.rowRenderer.redrawRows(o)},t.prototype.destroy=function(){e.prototype.destroy.call(this),this.rowNodes.forEach(function(e){e.childrenCache&&(e.childrenCache.destroy(),e.childrenCache=null),e.clearRowTop()})},t.prototype.pageLoaded=function(e,o,i){e===this.version&&(this.state=t.STATE_LOADED,this.populateWithRowData(o)),i=r._.cleanNumber(i);var n={type:t.EVENT_LOAD_COMPLETE,success:!0,page:this,lastRow:i};this.dispatchEvent(n)},t.EVENT_LOAD_COMPLETE=\"loadComplete\",t.STATE_DIRTY=\"dirty\",t.STATE_LOADING=\"loading\",t.STATE_LOADED=\"loaded\",t.STATE_FAILED=\"failed\",t}(o(13).BeanStub);t.RowNodeBlock=a},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}),r=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},s=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(30),l=o(0),p=o(98),u=o(7),d=o(1),c=function(e){function t(t){var o=e.call(this,t)||this;return o.RESIZE_TEMPLATE='\\n        <div class=\"ag-resizer-wrapper\">\\n            <div ref=\"eTopLeftResizer\" class=\"ag-resizer ag-resizer-topLeft\"></div>\\n            <div ref=\"eTopResizer\" class=\"ag-resizer ag-resizer-top\"></div>\\n            <div ref=\"eTopRightResizer\" class=\"ag-resizer ag-resizer-topRight\"></div>\\n            <div ref=\"eRightResizer\" class=\"ag-resizer ag-resizer-right\"></div>\\n            <div ref=\"eBottomRightResizer\" class=\"ag-resizer ag-resizer-bottomRight\"></div>\\n            <div ref=\"eBottomResizer\" class=\"ag-resizer ag-resizer-bottom\"></div>\\n            <div ref=\"eBottomLeftResizer\" class=\"ag-resizer ag-resizer-bottomLeft\"></div>\\n            <div ref=\"eLeftResizer\" class=\"ag-resizer ag-resizer-left\"></div>\\n        </div>\\n    ',o.MAXIMIZE_BTN_TEMPLATE='<div class=\"ag-dialog-button\"></span>',o.resizable={},o.isResizable=!1,o.movable=!1,o.isMoving=!1,o.isMaximizable=!1,o.isMaximized=!1,o.maximizeListeners=[],o.resizeListenerDestroy=null,o.isResizing=!1,o.lastPosition={x:0,y:0,width:0,height:0},o}return n(t,e),t.prototype.postConstruct=function(){var t=this,o=this.getGui(),i=this.config,n=i.movable,r=i.resizable,s=i.maximizable;d._.addCssClass(o,\"ag-dialog\"),this.moveElement=this.eTitleBar,e.prototype.postConstruct.call(this),this.addDestroyableEventListener(o,\"focusin\",function(e){o.contains(e.relatedTarget)||t.popupService.bringPopupToFront(o)}),n&&this.setMovable(n),s&&this.setMaximizable(s),this.addResizers(),r&&this.setResizable(r)},t.prototype.renderComponent=function(){var e=this.getGui(),t=this.config,o=t.alwaysOnTop,i=t.modal;this.close=this.popupService.addPopup(i,e,!0,this.destroy.bind(this),void 0,o),e.focus()},t.prototype.addResizers=function(){var e=this.getGui();if(e){var t=(new DOMParser).parseFromString(this.RESIZE_TEMPLATE,\"text/html\").body;e.appendChild(t.firstChild),this.createMap()}},t.prototype.createMap=function(){var e=this.getGui();this.resizerMap={topLeft:{element:e.querySelector(\"[ref=eTopLeftResizer]\")},top:{element:e.querySelector(\"[ref=eTopResizer]\")},topRight:{element:e.querySelector(\"[ref=eTopRightResizer]\")},right:{element:e.querySelector(\"[ref=eRightResizer]\")},bottomRight:{element:e.querySelector(\"[ref=eBottomRightResizer]\")},bottom:{element:e.querySelector(\"[ref=eBottomResizer]\")},bottomLeft:{element:e.querySelector(\"[ref=eBottomLeftResizer]\")},left:{element:e.querySelector(\"[ref=eLeftResizer]\")}}},t.prototype.getResizerElement=function(e){return this.resizerMap[e].element},t.prototype.onResizeStart=function(e){this.isResizing=!0,this.updateDragStartPosition(e.clientX,e.clientY)},t.prototype.onResize=function(e,t){if(this.isResizing){var o=!!t.match(/left/i),i=!!t.match(/right/i),n=!!t.match(/top/i),r=!!t.match(/bottom/i),s=o||i,a=n||r,l=this.calculateMouseMovement({e:e,isLeft:o,isTop:n}),p=l.movementX,u=l.movementY,d=0,c=0;if(s&&p){var h=o?-1:1,f=this.getWidth(),g=f+p*h,y=!1;o&&(d=f-g,(this.position.x+d<=0||g<=this.minWidth)&&(y=!0,d=0)),y||this.setWidth(g)}if(a&&u){h=n?-1:1;var v=this.getHeight(),m=v+u*h,C=!1;n&&(c=v-m,(this.position.y+c<=0||m<=this.minHeight)&&(C=!0,c=0)),C||this.setHeight(m)}this.updateDragStartPosition(e.clientX,e.clientY),(d||c)&&this.offsetElement(this.position.x+d,this.position.y+c)}},t.prototype.onResizeEnd=function(){this.isResizing=!1;var e={type:\"resize\",api:this.gridOptionsWrapper.getApi(),columnApi:this.gridOptionsWrapper.getColumnApi()};this.localEventService&&this.localEventService.dispatchEvent(e)},t.prototype.onMoveStart=function(e){this.isMoving=!0,this.updateDragStartPosition(e.clientX,e.clientY)},t.prototype.onMove=function(e){if(this.isMoving){var t=this.position,o=t.x,i=t.y,n=this.calculateMouseMovement({e:e,isTop:!0,anywhereWithin:!0,topBuffer:this.getHeight()-this.getBodyHeight()}),r=n.movementX,s=n.movementY;this.offsetElement(o+r,i+s),this.updateDragStartPosition(e.clientX,e.clientY)}},t.prototype.onMoveEnd=function(){this.isMoving=!1},t.prototype.toggleMaximize=function(){if(this.isMaximized){var e=this.lastPosition,t=e.x,o=e.y,i=e.width,n=e.height;this.setWidth(i),this.setHeight(n),this.offsetElement(t,o)}else this.lastPosition.width=this.getWidth(),this.lastPosition.height=this.getHeight(),this.lastPosition.x=this.position.x,this.lastPosition.y=this.position.y,this.offsetElement(0,0),this.setHeight(\"100%\"),this.setWidth(\"100%\");this.isMaximized=!this.isMaximized,this.refreshMaximizeIcon()},t.prototype.refreshMaximizeIcon=function(){d._.addOrRemoveCssClass(this.maximizeIcon,\"ag-hidden\",this.isMaximized),d._.addOrRemoveCssClass(this.minimizeIcon,\"ag-hidden\",!this.isMaximized)},t.prototype.clearMaximizebleListeners=function(){this.maximizeListeners.length&&(this.maximizeListeners.forEach(function(e){return e()}),this.maximizeListeners.length=0),this.resizeListenerDestroy&&(this.resizeListenerDestroy(),this.resizeListenerDestroy=null)},t.prototype.destroy=function(){e.prototype.destroy.call(this),this.setResizable(!1),this.setMovable(!1),this.maximizeButtonComp&&(this.maximizeButtonComp.destroy(),this.maximizeButtonComp=void 0),this.clearMaximizebleListeners()},t.prototype.setResizable=function(e){var t=this,o=!1;\"boolean\"==typeof e&&(e={topLeft:e,top:e,topRight:e,right:e,bottomRight:e,bottom:e,bottomLeft:e,left:e}),Object.keys(e).forEach(function(i){var n=i,r=!!e[n],s=t.getResizerElement(n),a=t.resizerMap[n].dragSource||{eElement:s,onDragStart:t.onResizeStart.bind(t),onDragging:function(e){return t.onResize(e,n)},onDragStop:t.onResizeEnd.bind(t)};!!t.resizable[n]===r&&(t.isAlive()||r)||(r?(t.dragService.addDragSource(a),s.style.pointerEvents=\"all\",o=!0):(t.dragService.removeDragSource(a),s.style.pointerEvents=\"none\"),t.resizerMap[n].dragSource=r?a:void 0)}),this.isResizable=o},t.prototype.setMovable=function(e){if(e!==this.movable){this.movable=e;var t=this.moveElementDragListener||{eElement:this.moveElement,onDragStart:this.onMoveStart.bind(this),onDragging:this.onMove.bind(this),onDragStop:this.onMoveEnd.bind(this)};e?(this.dragService.addDragSource(t),this.moveElementDragListener=t):(this.dragService.removeDragSource(t),this.moveElementDragListener=void 0)}},t.prototype.setMaximizable=function(e){var t=this;if(!1===e)return this.clearMaximizebleListeners(),void(this.maximizeButtonComp&&(this.maximizeButtonComp.destroy(),this.maximizeButtonComp=this.maximizeIcon=this.minimizeIcon=void 0));var o=this.eTitleBar;if(o&&e!==this.isMaximizable){var i=this.maximizeButtonComp=new u.Component(this.MAXIMIZE_BTN_TEMPLATE);this.getContext().wireBean(i);var n=i.getGui();n.appendChild(this.maximizeIcon=d._.createIconNoSpan(\"maximize\",this.gridOptionsWrapper)),n.appendChild(this.minimizeIcon=d._.createIconNoSpan(\"minimize\",this.gridOptionsWrapper)),d._.addCssClass(this.minimizeIcon,\"ag-hidden\"),i.addDestroyableEventListener(n,\"click\",this.toggleMaximize.bind(this)),this.addTitleBarButton(i,0),this.maximizeListeners.push(this.addDestroyableEventListener(o,\"dblclick\",this.toggleMaximize.bind(this))),this.resizeListenerDestroy=this.addDestroyableEventListener(this,\"resize\",function(){t.isMaximized=!1,t.refreshMaximizeIcon()})}},r([l.Autowired(\"dragService\"),s(\"design:type\",a.DragService)],t.prototype,\"dragService\",void 0),t}(p.AgPanel);t.AgDialog=c},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)});Object.defineProperty(t,\"__esModule\",{value:!0});var r=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.className=\"ag-number-field\",t.inputType=\"number\",t}return n(t,e),t.prototype.postConstruct=function(){var t=this;e.prototype.postConstruct.call(this),this.addDestroyableEventListener(this.eInput,\"blur\",function(){var e=t.normalizeValue(t.eInput.value);t.value!==e&&t.setValue(e)})},t.prototype.normalizeValue=function(e){if(\"\"===e)return\"\";this.precision&&(e=this.adjustPrecision(e));var t=parseFloat(e);return null!=this.min&&t<this.min?e=this.min.toString():null!=this.max&&t>this.max&&(e=this.max.toString()),e},t.prototype.adjustPrecision=function(e){if(this.precision){var t=parseFloat(e).toFixed(this.precision);e=parseFloat(t).toString()}return e},t.prototype.setMin=function(e){return this.min===e?this:(this.min=e,null!=this.min?this.eInput.setAttribute(\"min\",e.toString()):this.eInput.removeAttribute(\"min\"),this)},t.prototype.setMax=function(e){return this.max===e?this:(this.max=e,null!=this.max?this.eInput.setAttribute(\"max\",e.toString()):this.eInput.removeAttribute(\"max\"),this)},t.prototype.setPrecision=function(e){return this.precision=e,this},t.prototype.setStep=function(e){return this.step===e?this:(this.step=e,null!=e?this.eInput.setAttribute(\"step\",e.toString()):this.eInput.removeAttribute(\"step\"),this)},t.prototype.setValue=function(t,o){return(t=this.adjustPrecision(t))!=this.normalizeValue(t)?this:e.prototype.setValue.call(this,t,o)},t}(o(99).AgInputTextField);t.AgInputNumberField=r},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */Object.defineProperty(t,\"__esModule\",{value:!0});var i=o(5),n=o(101),r=o(2),s=o(1),a=function(){function e(){}return e.getEventCallbacks=function(){return e.EVENT_CALLBACKS||(e.EVENT_CALLBACKS=[],e.EVENT_CALLBACKS_NO_PREFIX=[],e.EVENTS.forEach(function(t){e.EVENT_CALLBACKS.push(e.getCallbackForEvent(t)),e.EVENT_CALLBACKS_NO_PREFIX.push(t)})),e.EVENT_CALLBACKS},e.copyAttributesToGridOptions=function(t,o,i){void 0===i&&(i=!1),l(o),\"object\"!=typeof t&&(t={});var n=t;return e.ARRAY_PROPERTIES.concat(e.STRING_PROPERTIES).concat(e.OBJECT_PROPERTIES).concat(e.FUNCTION_PROPERTIES).forEach(function(e){void 0!==o[e]&&(n[e]=o[e])}),e.BOOLEAN_PROPERTIES.forEach(function(t){void 0!==o[t]&&(n[t]=e.toBoolean(o[t]))}),e.NUMBER_PROPERTIES.forEach(function(t){void 0!==o[t]&&(n[t]=e.toNumber(o[t]))}),e.getEventCallbacks().forEach(function(e){void 0!==o[e]&&(n[e]=o[e])}),i||e.EVENT_CALLBACKS_NO_PREFIX.forEach(function(t){var i=e.getCallbackForEvent(t);void 0===o[t]&&void 0===o[i]||r.GridOptionsWrapper.checkEventDeprecation(t)}),t},e.getCallbackForEvent=function(e){return!e||e.length<2?e:\"on\"+e[0].toUpperCase()+e.substr(1)},e.processOnChange=function(t,o,n,r){if(t){l(t);var a=o;e.ARRAY_PROPERTIES.concat(e.OBJECT_PROPERTIES).concat(e.STRING_PROPERTIES).forEach(function(e){t[e]&&(a[e]=t[e].currentValue)}),e.BOOLEAN_PROPERTIES.forEach(function(o){t[o]&&(a[o]=e.toBoolean(t[o].currentValue))}),e.NUMBER_PROPERTIES.forEach(function(o){t[o]&&(a[o]=e.toNumber(t[o].currentValue))}),e.getEventCallbacks().forEach(function(e){t[e]&&(a[e]=t[e].currentValue)}),t.enableCellTextSelection&&n.setEnableCellTextSelection(e.toBoolean(t.enableCellTextSelection.currentValue)),t.showToolPanel&&n.showToolPanel(e.toBoolean(t.showToolPanel.currentValue)),t.quickFilterText&&n.setQuickFilter(t.quickFilterText.currentValue),t.rowData&&n.setRowData(t.rowData.currentValue),t.pinnedTopRowData&&n.setPinnedTopRowData(t.pinnedTopRowData.currentValue),t.pinnedBottomRowData&&n.setPinnedBottomRowData(t.pinnedBottomRowData.currentValue),t.columnDefs&&n.setColumnDefs(t.columnDefs.currentValue,\"gridOptionsChanged\"),t.datasource&&n.setDatasource(t.datasource.currentValue),t.headerHeight&&n.setHeaderHeight(e.toNumber(t.headerHeight.currentValue)),t.paginationPageSize&&n.paginationSetPageSize(e.toNumber(t.paginationPageSize.currentValue)),t.pivotMode&&r.setPivotMode(e.toBoolean(t.pivotMode.currentValue)),t.groupRemoveSingleChildren&&n.setGroupRemoveSingleChildren(e.toBoolean(t.groupRemoveSingleChildren.currentValue)),t.suppressRowDrag&&n.setSuppressRowDrag(e.toBoolean(t.suppressRowDrag.currentValue)),t.gridAutoHeight&&n.setGridAutoHeight(e.toBoolean(t.gridAutoHeight.currentValue)),t.suppressClipboardPaste&&n.setSuppressClipboardPaste(e.toBoolean(t.suppressClipboardPaste.currentValue)),t.sideBar&&n.setSideBar(t.sideBar.currentValue),t.datasource&&n.setDatasource(t.datasource.currentValue);var p={type:i.Events.EVENT_COMPONENT_STATE_CHANGED,api:o.api,columnApi:o.columnApi};s._.iterateObject(t,function(e,t){p[e]=t}),n.dispatchEvent(p)}},e.toBoolean=function(e){return\"boolean\"==typeof e?e:\"string\"==typeof e&&(\"TRUE\"===e.toUpperCase()||\"\"==e)},e.toNumber=function(e){return\"number\"==typeof e?e:\"string\"==typeof e?Number(e):void 0},e.EVENTS=[],e.STRING_PROPERTIES=n.PropertyKeys.STRING_PROPERTIES,e.OBJECT_PROPERTIES=n.PropertyKeys.OBJECT_PROPERTIES,e.ARRAY_PROPERTIES=n.PropertyKeys.ARRAY_PROPERTIES,e.NUMBER_PROPERTIES=n.PropertyKeys.NUMBER_PROPERTIES,e.BOOLEAN_PROPERTIES=n.PropertyKeys.BOOLEAN_PROPERTIES,e.FUNCTION_PROPERTIES=n.PropertyKeys.FUNCTION_PROPERTIES,e.ALL_PROPERTIES=n.PropertyKeys.ALL_PROPERTIES,e}();function l(e){(e.rowDeselected||e.onRowDeselected)&&console.warn(\"ag-grid: as of v3.4 rowDeselected no longer exists. Please check the docs.\")}t.ComponentUtil=a,s._.iterateObject(i.Events,function(e,t){a.EVENTS.push(t)})},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}),r=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},s=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(0),l=o(49),p=o(90),u=o(4),d=o(20),c=o(2),h=o(6),f=o(1),g=function(e){function t(t){var o=e.call(this,{columnController:t.columnController,valueService:t.valueService,gridOptionsWrapper:t.gridOptionsWrapper,processCellCallback:t.processCellCallback,processHeaderCallback:t.processHeaderCallback})||this;o.result=\"\",o.lineOpened=!1;var i=t.suppressQuotes,n=t.columnSeparator;return o.suppressQuotes=i,o.columnSeparator=n,o}return n(t,e),t.prototype.prepare=function(e){},t.prototype.addCustomHeader=function(e){e&&(this.result+=e+\"\\r\\n\")},t.prototype.addCustomFooter=function(e){e&&(this.result+=e+\"\\r\\n\")},t.prototype.onNewHeaderGroupingRow=function(){return this.lineOpened&&(this.result+=\"\\r\\n\"),{onColumn:this.onNewHeaderGroupingRowColumn.bind(this)}},t.prototype.onNewHeaderGroupingRowColumn=function(e,t,o){0!=t&&(this.result+=this.columnSeparator),this.result+=this.putInQuotes(e,this.suppressQuotes);for(var i=1;i<=o;i++)this.result+=this.columnSeparator+this.putInQuotes(\"\",this.suppressQuotes);this.lineOpened=!0},t.prototype.onNewHeaderRow=function(){return this.lineOpened&&(this.result+=\"\\r\\n\"),{onColumn:this.onNewHeaderRowColumn.bind(this)}},t.prototype.onNewHeaderRowColumn=function(e,t,o){0!=t&&(this.result+=this.columnSeparator),this.result+=this.putInQuotes(this.extractHeaderValue(e),this.suppressQuotes),this.lineOpened=!0},t.prototype.onNewBodyRow=function(){return this.lineOpened&&(this.result+=\"\\r\\n\"),{onColumn:this.onNewBodyRowColumn.bind(this)}},t.prototype.onNewBodyRowColumn=function(e,t,o){0!=t&&(this.result+=this.columnSeparator),this.result+=this.putInQuotes(this.extractRowCellValue(e,t,h.Constants.EXPORT_TYPE_CSV,o),this.suppressQuotes),this.lineOpened=!0},t.prototype.putInQuotes=function(e,t){return t?e:null==e?'\"\"':(\"string\"==typeof e?o=e:\"function\"==typeof e.toString?o=e.toString():(console.warn(\"unknown value type during csv conversion\"),o=\"\"),'\"'+o.replace(/\"/g,'\"\"')+'\"');var o},t.prototype.parse=function(){return this.result},t}(l.BaseGridSerializingSession);t.CsvSerializingSession=g;var y=function(){function e(){}return e.prototype.setBeans=function(e){this.beans=e},e.prototype.export=function(e){if(this.isExportSuppressed())return console.warn(\"ag-grid: Export cancelled. Export is not allowed as per your configuration.\"),\"\";var t=this.getMergedParamsAndData(e),o=t.mergedParams,i=t.data,n=o&&o.fileName&&0!==o.fileName.length?o.fileName:this.getDefaultFileName();return-1===n.indexOf(\".\")&&(n=n+\".\"+this.getDefaultFileExtension()),this.beans.downloader.download(n,this.packageFile(i)),i},e.prototype.getData=function(e){return this.getMergedParamsAndData(e).data},e.prototype.getMergedParamsAndData=function(e){var t=this.mergeDefaultParams(e);return{mergedParams:t,data:this.beans.gridSerializer.serialize(this.createSerializingSession(t),t)}},e.prototype.mergeDefaultParams=function(e){var t=this.beans.gridOptionsWrapper.getDefaultExportParams(),o={};return f._.assign(o,t),f._.assign(o,e),o},e.prototype.packageFile=function(e){return new Blob([\"\\ufeff\",e],{type:window.navigator.msSaveOrOpenBlob?this.getMimeType():\"octet/stream\"})},e}();t.BaseCreator=y;var v=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t.prototype.postConstruct=function(){this.setBeans({downloader:this.downloader,gridSerializer:this.gridSerializer,gridOptionsWrapper:this.gridOptionsWrapper})},t.prototype.exportDataAsCsv=function(e){return this.export(e)},t.prototype.getDataAsCsv=function(e){return this.getData(e)},t.prototype.getMimeType=function(){return\"text/csv;charset=utf-8;\"},t.prototype.getDefaultFileName=function(){return\"export.csv\"},t.prototype.getDefaultFileExtension=function(){return\"csv\"},t.prototype.createSerializingSession=function(e){var t=this.columnController,o=this.valueService,i=this.gridOptionsWrapper,n=e,r=n.processCellCallback,s=n.processHeaderCallback,a=n.suppressQuotes,l=n.columnSeparator;return new g({columnController:t,valueService:o,gridOptionsWrapper:i,processCellCallback:r||void 0,processHeaderCallback:s||void 0,suppressQuotes:a||!1,columnSeparator:l||\",\"})},t.prototype.isExportSuppressed=function(){return this.gridOptionsWrapper.isSuppressCsvExport()},r([a.Autowired(\"columnController\"),s(\"design:type\",u.ColumnController)],t.prototype,\"columnController\",void 0),r([a.Autowired(\"valueService\"),s(\"design:type\",d.ValueService)],t.prototype,\"valueService\",void 0),r([a.Autowired(\"downloader\"),s(\"design:type\",p.Downloader)],t.prototype,\"downloader\",void 0),r([a.Autowired(\"gridSerializer\"),s(\"design:type\",l.GridSerializer)],t.prototype,\"gridSerializer\",void 0),r([a.Autowired(\"gridOptionsWrapper\"),s(\"design:type\",c.GridOptionsWrapper)],t.prototype,\"gridOptionsWrapper\",void 0),r([a.PostConstruct,s(\"design:type\",Function),s(\"design:paramtypes\",[]),s(\"design:returntype\",void 0)],t.prototype,\"postConstruct\",null),t=r([a.Bean(\"csvCreator\")],t)}(y);t.CsvCreator=v},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}),r=this&&this.__assign||function(){return(r=Object.assign||function(e){for(var t,o=1,i=arguments.length;o<i;o++)for(var n in t=arguments[o])Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e}).apply(this,arguments)};Object.defineProperty(t,\"__esModule\",{value:!0});var s=o(41),a=o(18),l=o(11),p=o(5),u=o(7),d=o(1),c=function(e){function t(t,o,i,n,r,s,a,l,p,u,d){var c=e.call(this)||this;return c.eAllRowContainers=[],c.active=!0,c.rowContainerReadyCount=0,c.refreshNeeded=!1,c.columnRefreshPending=!1,c.cellComps={},c.createSecondPassFuncs=[],c.removeFirstPassFuncs=[],c.removeSecondPassFuncs=[],c.initialised=!1,c.parentScope=t,c.beans=a,c.bodyContainerComp=o,c.pinnedLeftContainerComp=i,c.pinnedRightContainerComp=n,c.fullWidthContainerComp=r,c.rowNode=s,c.rowIsEven=c.rowNode.rowIndex%2==0,c.paginationPage=c.beans.paginationProxy.getCurrentPage(),c.useAnimationFrameForCreate=p,c.printLayout=u,c.embedFullWidth=d,c.setAnimateFlags(l),c}return n(t,e),t.prototype.init=function(){var e=this;this.rowFocused=this.beans.focusedCellController.isRowFocused(this.rowNode.rowIndex,this.rowNode.rowPinned),this.scope=this.createChildScopeOrNull(this.rowNode.data),this.setupRowContainers(),this.addListeners(),this.slideRowIn&&this.createSecondPassFuncs.push(function(){e.onTopChanged()}),this.fadeRowIn&&this.createSecondPassFuncs.push(function(){e.eAllRowContainers.forEach(function(e){return d._.removeCssClass(e,\"ag-opacity-zero\")})})},t.prototype.createTemplate=function(e,t){void 0===t&&(t=null);var o=[],i=this.rowNode.rowHeight,n=this.getInitialRowClasses(t).join(\" \"),r=d._.escape(this.rowNode.id),s=this.preProcessStylesFromGridOptions(),a=this.getRowBusinessKey(),l=d._.escape(a),p=this.getInitialRowTopStyle(),u=this.rowNode.getRowIndexString(),c=this.beans.gridPanel.headerRootComp.getHeaderRowCount();return o.push(\"<div\"),o.push(' role=\"row\"'),o.push(' row-index=\"'+u+'\" aria-rowindex=\"'+(c+this.rowNode.rowIndex+1)+'\"'),o.push(r?' row-id=\"'+r+'\"':\"\"),o.push(a?' row-business-key=\"'+l+'\"':\"\"),o.push(' comp-id=\"'+this.getCompId()+'\"'),o.push(' class=\"'+n+'\"'),o.push(' style=\"height: '+i+\"px; \"+p+\" \"+s+'\">'),o.push(e),o.push(\"</div>\"),o.join(\"\")},t.prototype.getCellForCol=function(e){var t=this.cellComps[e.getColId()];return t?t.getGui():null},t.prototype.afterFlush=function(){this.initialised||(this.initialised=!0,this.executeProcessRowPostCreateFunc())},t.prototype.executeProcessRowPostCreateFunc=function(){var e=this.beans.gridOptionsWrapper.getProcessRowPostCreateFunc();e&&e({eRow:this.eBodyRow,ePinnedLeftRow:this.ePinnedLeftRow,ePinnedRightRow:this.ePinnedRightRow,node:this.rowNode,api:this.beans.gridOptionsWrapper.getApi(),rowIndex:this.rowNode.rowIndex,addRenderedRowListener:this.addEventListener.bind(this),columnApi:this.beans.gridOptionsWrapper.getColumnApi(),context:this.beans.gridOptionsWrapper.getContext()})},t.prototype.getInitialRowTopStyle=function(){if(this.printLayout)return\"\";var e=this.slideRowIn?this.roundRowTopToBounds(this.rowNode.oldRowTop):this.rowNode.rowTop,t=this.applyPaginationOffset(e),o=this.beans.maxDivHeightScaler.getRealPixelPosition(t);return this.beans.gridOptionsWrapper.isSuppressRowTransform()?\"top: \"+o+\"px; \":\"transform: translateY(\"+o+\"px);\"},t.prototype.getRowBusinessKey=function(){var e=this.beans.gridOptionsWrapper.getBusinessKeyForNodeFunc();if(\"function\"==typeof e)return e(this.rowNode)},t.prototype.areAllContainersReady=function(){return 3===this.rowContainerReadyCount},t.prototype.lazyCreateCells=function(e,t){if(this.active){var o=this.createCells(e);t.innerHTML=o.template,this.callAfterRowAttachedOnCells(o.cellComps,t),this.rowContainerReadyCount++,this.areAllContainersReady()&&this.refreshNeeded&&this.refreshCells()}},t.prototype.createRowContainer=function(e,t,o){var i=this,n=this.useAnimationFrameForCreate,r=n?{cellComps:[],template:\"\"}:this.createCells(t),s=this.createTemplate(r.template);e.appendRowTemplate(s,function(){var s=e.getRowElement(i.getCompId());i.afterRowAttached(e,s),o(s),n?i.beans.taskQueue.addP1Task(i.lazyCreateCells.bind(i,t,s),i.rowNode.rowIndex):(i.callAfterRowAttachedOnCells(r.cellComps,s),i.rowContainerReadyCount=3)})},t.prototype.createChildScopeOrNull=function(e){if(!this.beans.gridOptionsWrapper.isAngularCompileRows())return null;var t=this.parentScope.$new();return t.data=r({},e),t.rowNode=this.rowNode,t.context=this.beans.gridOptionsWrapper.getContext(),this.addDestroyFunc(function(){t.$destroy(),t.data=null,t.rowNode=null,t.context=null}),t},t.prototype.setupRowContainers=function(){var e=this.beans.gridOptionsWrapper.getIsFullWidthCellFunc(),o=!!e&&e(this.rowNode),i=this.beans.doingMasterDetail&&this.rowNode.detail,n=this.beans.columnController.isPivotMode(),r=this.rowNode.group&&!this.rowNode.footer&&this.beans.gridOptionsWrapper.isGroupUseEntireRow(n);this.rowNode.stub?this.createFullWidthRows(t.LOADING_CELL_RENDERER,t.LOADING_CELL_RENDERER_COMP_NAME):i?this.createFullWidthRows(t.DETAIL_CELL_RENDERER,t.DETAIL_CELL_RENDERER_COMP_NAME):o?this.createFullWidthRows(t.FULL_WIDTH_CELL_RENDERER,null):r?this.createFullWidthRows(t.GROUP_ROW_RENDERER,t.GROUP_ROW_RENDERER_COMP_NAME):this.setupNormalRowContainers()},t.prototype.setupNormalRowContainers=function(){var e,t,o,i=this;this.printLayout?(e=this.beans.columnController.getAllDisplayedColumns(),t=[],o=[]):(e=this.beans.columnController.getAllDisplayedCenterVirtualColumnsForRow(this.rowNode),t=this.beans.columnController.getDisplayedLeftColumnsForRow(this.rowNode),o=this.beans.columnController.getDisplayedRightColumnsForRow(this.rowNode)),this.createRowContainer(this.bodyContainerComp,e,function(e){return i.eBodyRow=e}),this.createRowContainer(this.pinnedRightContainerComp,o,function(e){return i.ePinnedRightRow=e}),this.createRowContainer(this.pinnedLeftContainerComp,t,function(e){return i.ePinnedLeftRow=e})},t.prototype.createFullWidthRows=function(e,t){var o=this;this.fullWidthRow=!0,this.embedFullWidth?(this.createFullWidthRowContainer(this.bodyContainerComp,null,null,e,t,function(e){o.eFullWidthRowBody=e},function(e){o.fullWidthRowComponentBody=e}),this.printLayout||(this.createFullWidthRowContainer(this.pinnedLeftContainerComp,l.Column.PINNED_LEFT,\"ag-cell-last-left-pinned\",e,t,function(e){o.eFullWidthRowLeft=e},function(e){o.fullWidthRowComponentLeft=e}),this.createFullWidthRowContainer(this.pinnedRightContainerComp,l.Column.PINNED_RIGHT,\"ag-cell-first-right-pinned\",e,t,function(e){o.eFullWidthRowRight=e},function(e){o.fullWidthRowComponentRight=e}))):this.createFullWidthRowContainer(this.fullWidthContainerComp,null,null,e,t,function(e){o.eFullWidthRow=e},function(e){o.fullWidthRowComponent=e})},t.prototype.setAnimateFlags=function(e){if(e){var t=d._.exists(this.rowNode.oldRowTop);this.slideRowIn=t,this.fadeRowIn=!t}else this.slideRowIn=!1,this.fadeRowIn=!1},t.prototype.isEditing=function(){return this.editingRow},t.prototype.stopRowEditing=function(e){this.stopEditing(e)},t.prototype.isFullWidth=function(){return this.fullWidthRow},t.prototype.refreshFullWidth=function(){var e=this,t=function(t,o,i){if(!t||!o)return!0;if(!o.refresh)return!1;var n=e.createFullWidthParams(t,i);return o.refresh(n)},o=t(this.eFullWidthRow,this.fullWidthRowComponent,null),i=t(this.eFullWidthRowBody,this.fullWidthRowComponentBody,null),n=t(this.eFullWidthRowLeft,this.fullWidthRowComponentLeft,l.Column.PINNED_LEFT),r=t(this.eFullWidthRowRight,this.fullWidthRowComponentRight,l.Column.PINNED_RIGHT);return o&&i&&n&&r},t.prototype.addListeners=function(){this.addDestroyableEventListener(this.rowNode,a.RowNode.EVENT_HEIGHT_CHANGED,this.onRowHeightChanged.bind(this)),this.addDestroyableEventListener(this.rowNode,a.RowNode.EVENT_ROW_SELECTED,this.onRowSelected.bind(this)),this.addDestroyableEventListener(this.rowNode,a.RowNode.EVENT_ROW_INDEX_CHANGED,this.onRowIndexChanged.bind(this)),this.addDestroyableEventListener(this.rowNode,a.RowNode.EVENT_TOP_CHANGED,this.onTopChanged.bind(this)),this.addDestroyableEventListener(this.rowNode,a.RowNode.EVENT_EXPANDED_CHANGED,this.onExpandedChanged.bind(this)),this.addDestroyableEventListener(this.rowNode,a.RowNode.EVENT_DATA_CHANGED,this.onRowNodeDataChanged.bind(this)),this.addDestroyableEventListener(this.rowNode,a.RowNode.EVENT_CELL_CHANGED,this.onRowNodeCellChanged.bind(this)),this.addDestroyableEventListener(this.rowNode,a.RowNode.EVENT_DRAGGING_CHANGED,this.onRowNodeDraggingChanged.bind(this));var e=this.beans.eventService;this.addDestroyableEventListener(e,p.Events.EVENT_HEIGHT_SCALE_CHANGED,this.onTopChanged.bind(this)),this.addDestroyableEventListener(e,p.Events.EVENT_DISPLAYED_COLUMNS_CHANGED,this.onDisplayedColumnsChanged.bind(this)),this.addDestroyableEventListener(e,p.Events.EVENT_VIRTUAL_COLUMNS_CHANGED,this.onVirtualColumnsChanged.bind(this)),this.addDestroyableEventListener(e,p.Events.EVENT_COLUMN_RESIZED,this.onColumnResized.bind(this)),this.addDestroyableEventListener(e,p.Events.EVENT_CELL_FOCUSED,this.onCellFocusChanged.bind(this)),this.addDestroyableEventListener(e,p.Events.EVENT_PAGINATION_CHANGED,this.onPaginationChanged.bind(this)),this.addDestroyableEventListener(e,p.Events.EVENT_GRID_COLUMNS_CHANGED,this.onGridColumnsChanged.bind(this)),this.addDestroyableEventListener(e,p.Events.EVENT_MODEL_UPDATED,this.onModelUpdated.bind(this)),this.addListenersForCellComps()},t.prototype.addListenersForCellComps=function(){var e=this;this.addDestroyableEventListener(this.rowNode,a.RowNode.EVENT_ROW_INDEX_CHANGED,function(){e.forEachCellComp(function(e){return e.onRowIndexChanged()})}),this.addDestroyableEventListener(this.rowNode,a.RowNode.EVENT_CELL_CHANGED,function(t){e.forEachCellComp(function(e){return e.onCellChanged(t)})})},t.prototype.onGridColumnsChanged=function(){this.removeRenderedCells(Object.keys(this.cellComps))},t.prototype.onRowNodeDataChanged=function(e){this.forEachCellComp(function(t){return t.refreshCell({suppressFlash:!e.update,newData:!e.update})}),this.onRowSelected(),this.postProcessCss()},t.prototype.onRowNodeCellChanged=function(e){this.postProcessCss()},t.prototype.postProcessCss=function(){this.postProcessStylesFromGridOptions(),this.postProcessClassesFromGridOptions(),this.postProcessRowClassRules(),this.postProcessRowDragging()},t.prototype.onRowNodeDraggingChanged=function(){this.postProcessRowDragging()},t.prototype.postProcessRowDragging=function(){var e=this.rowNode.dragging;this.eAllRowContainers.forEach(function(t){return d._.addOrRemoveCssClass(t,\"ag-row-dragging\",e)})},t.prototype.onExpandedChanged=function(){var e=this.rowNode;this.eAllRowContainers.forEach(function(t){return d._.addOrRemoveCssClass(t,\"ag-row-group-expanded\",e.expanded)}),this.eAllRowContainers.forEach(function(t){return d._.addOrRemoveCssClass(t,\"ag-row-group-contracted\",!e.expanded)})},t.prototype.onDisplayedColumnsChanged=function(){this.fullWidthRow||this.refreshCells()},t.prototype.destroyFullWidthComponents=function(){this.fullWidthRowComponent&&(this.beans.detailRowCompCache.addOrDestroy(this.rowNode,null,this.fullWidthRowComponent),this.fullWidthRowComponent=null),this.fullWidthRowComponentBody&&(this.beans.detailRowCompCache.addOrDestroy(this.rowNode,null,this.fullWidthRowComponentBody),this.fullWidthRowComponent=null),this.fullWidthRowComponentLeft&&(this.beans.detailRowCompCache.addOrDestroy(this.rowNode,l.Column.PINNED_LEFT,this.fullWidthRowComponentLeft),this.fullWidthRowComponentLeft=null),this.fullWidthRowComponentRight&&(this.beans.detailRowCompCache.addOrDestroy(this.rowNode,l.Column.PINNED_RIGHT,this.fullWidthRowComponentRight),this.fullWidthRowComponent=null)},t.prototype.getContainerForCell=function(e){switch(e){case l.Column.PINNED_LEFT:return this.ePinnedLeftRow;case l.Column.PINNED_RIGHT:return this.ePinnedRightRow;default:return this.eBodyRow}},t.prototype.onVirtualColumnsChanged=function(){this.fullWidthRow||this.refreshCells()},t.prototype.onColumnResized=function(){this.fullWidthRow||this.refreshCells()},t.prototype.refreshCells=function(){if(this.areAllContainersReady())if(this.beans.gridOptionsWrapper.isSuppressAnimationFrame()||this.printLayout)this.refreshCellsInAnimationFrame();else{if(this.columnRefreshPending)return;this.beans.taskQueue.addP1Task(this.refreshCellsInAnimationFrame.bind(this),this.rowNode.rowIndex)}else this.refreshNeeded=!0},t.prototype.refreshCellsInAnimationFrame=function(){if(this.active){var e,t,o;this.columnRefreshPending=!1,this.printLayout?(e=this.beans.columnController.getAllDisplayedColumns(),t=[],o=[]):(e=this.beans.columnController.getAllDisplayedCenterVirtualColumnsForRow(this.rowNode),t=this.beans.columnController.getDisplayedLeftColumnsForRow(this.rowNode),o=this.beans.columnController.getDisplayedRightColumnsForRow(this.rowNode)),this.insertCellsIntoContainer(this.eBodyRow,e),this.insertCellsIntoContainer(this.ePinnedLeftRow,t),this.insertCellsIntoContainer(this.ePinnedRightRow,o);var i=Object.keys(this.cellComps);e.forEach(function(e){return d._.removeFromArray(i,e.getId())}),t.forEach(function(e){return d._.removeFromArray(i,e.getId())}),o.forEach(function(e){return d._.removeFromArray(i,e.getId())});var n=d._.filter(i,this.isCellEligibleToBeRemoved.bind(this));this.removeRenderedCells(n)}},t.prototype.removeRenderedCells=function(e){var t=this;e.forEach(function(e){var o=t.cellComps[e];d._.missing(o)||(o.detach(),o.destroy(),t.cellComps[e]=null)})},t.prototype.isCellEligibleToBeRemoved=function(e){var t=this.beans.columnController.getAllDisplayedColumns(),o=this.cellComps[e];if(!o)return!0;if(this.isCellInWrongRow(o))return!0;var i=o.isEditing(),n=this.beans.focusedCellController.isCellFocused(o.getCellPosition());if(i||n){var r=o.getColumn();return!(t.indexOf(r)>=0)}return!0},t.prototype.ensureCellInCorrectContainer=function(e){if(!this.printLayout){var t=e.getGui(),o=e.getColumn().getPinned(),i=this.getContainerForCell(o),n=e.getParentRow();n!==i&&(n&&n.removeChild(t),i.appendChild(t),e.setParentRow(i))}},t.prototype.isCellInWrongRow=function(e){var t=e.getColumn(),o=this.getContainerForCell(t.getPinned());return e.getParentRow()!==o},t.prototype.insertCellsIntoContainer=function(e,t){var o=this;if(e){var i=[],n=[];t.forEach(function(t){var r=t.getId(),s=o.cellComps[r];s?o.ensureCellInCorrectContainer(s):o.createNewCell(t,e,i,n)}),i.length>0&&(d._.appendHtml(e,i.join(\"\")),this.callAfterRowAttachedOnCells(n,e))}},t.prototype.addDomData=function(e){var o=this.beans.gridOptionsWrapper;o.setDomData(e,t.DOM_DATA_KEY_RENDERED_ROW,this),this.addDestroyFunc(function(){o.setDomData(e,t.DOM_DATA_KEY_RENDERED_ROW,null)})},t.prototype.createNewCell=function(e,t,o,i){var n=new s.CellComp(this.scope,this.beans,e,this.rowNode,this,!1,this.printLayout),r=n.getCreateTemplate();o.push(r),i.push(n),this.cellComps[e.getId()]=n,n.setParentRow(t)},t.prototype.onMouseEvent=function(e,t){switch(e){case\"dblclick\":this.onRowDblClick(t);break;case\"click\":this.onRowClick(t)}},t.prototype.createRowEvent=function(e,t){return{type:e,node:this.rowNode,data:this.rowNode.data,rowIndex:this.rowNode.rowIndex,rowPinned:this.rowNode.rowPinned,context:this.beans.gridOptionsWrapper.getContext(),api:this.beans.gridOptionsWrapper.getApi(),columnApi:this.beans.gridOptionsWrapper.getColumnApi(),event:t}},t.prototype.createRowEventWithSource=function(e,t){var o=this.createRowEvent(e,t);return o.source=this,o},t.prototype.onRowDblClick=function(e){if(!d._.isStopPropagationForAgGrid(e)){var t=this.createRowEventWithSource(p.Events.EVENT_ROW_DOUBLE_CLICKED,e);this.beans.eventService.dispatchEvent(t)}},t.prototype.onRowClick=function(e){if(!d._.isStopPropagationForAgGrid(e)){var t=this.createRowEventWithSource(p.Events.EVENT_ROW_CLICKED,e);this.beans.eventService.dispatchEvent(t);var o=e.ctrlKey||e.metaKey,i=e.shiftKey;if(!this.rowNode.group&&this.rowNode.selectable&&!this.rowNode.rowPinned&&this.beans.gridOptionsWrapper.isRowSelection()&&!this.beans.gridOptionsWrapper.isSuppressRowClickSelection()){var n=this.beans.gridOptionsWrapper.isRowMultiSelectWithClick(),r=this.beans.gridOptionsWrapper.isRowDeselection();if(this.rowNode.isSelected())n?this.rowNode.setSelectedParams({newValue:!1}):o?r&&this.rowNode.setSelectedParams({newValue:!1}):this.rowNode.setSelectedParams({newValue:!0,clearSelection:!0});else{var s=!n&&!o;this.rowNode.setSelectedParams({newValue:!0,clearSelection:s,rangeSelect:i})}}}},t.prototype.createFullWidthRowContainer=function(e,t,o,i,n,r,s){var a=this,l=this.createTemplate(\"\",o);e.appendRowTemplate(l,function(){var o=e.getRowElement(a.getCompId()),l=a.createFullWidthParams(o,t),p=function(e){if(a.isAlive()){var t=e.getGui();o.appendChild(t),s(e)}else e.destroy&&e.destroy()},u=a.beans.detailRowCompCache.get(a.rowNode,t);if(u)p(u);else{var d=a.beans.userComponentFactory.newFullWidthCellRenderer(l,i,n);if(!d)return void console.error(\"ag-Grid: fullWidthCellRenderer not defined\");d.then(p)}a.afterRowAttached(e,o),r(o),a.angular1Compile(o)})},t.prototype.angular1Compile=function(e){this.scope&&this.beans.$compile(e)(this.scope)},t.prototype.createFullWidthParams=function(e,t){return{fullWidth:!0,data:this.rowNode.data,node:this.rowNode,value:this.rowNode.key,$scope:this.scope?this.scope:this.parentScope,$compile:this.beans.$compile,rowIndex:this.rowNode.rowIndex,api:this.beans.gridOptionsWrapper.getApi(),columnApi:this.beans.gridOptionsWrapper.getColumnApi(),context:this.beans.gridOptionsWrapper.getContext(),eGridCell:e,eParentOfValue:e,pinned:t,addRenderedRowListener:this.addEventListener.bind(this)}},t.prototype.getInitialRowClasses=function(e){var t=[],o=this.beans.gridOptionsWrapper.isTreeData(),i=this.rowNode;return d._.exists(e)&&t.push(e),t.push(\"ag-row\"),t.push(this.rowFocused?\"ag-row-focus\":\"ag-row-no-focus\"),this.fadeRowIn&&t.push(\"ag-opacity-zero\"),t.push(this.rowIsEven?\"ag-row-even\":\"ag-row-odd\"),i.isSelected()&&t.push(\"ag-row-selected\"),i.group?(t.push(\"ag-row-group\"),t.push(\"ag-row-level-\"+i.level),i.footer&&t.push(\"ag-row-footer\")):t.push(\"ag-row-level-\"+(i.parent?i.parent.level+1:\"0\")),i.stub&&t.push(\"ag-row-stub\"),this.fullWidthRow&&t.push(\"ag-full-width-row\"),(o?i.allChildrenCount:i.group&&!i.footer)&&t.push(i.expanded?\"ag-row-group-expanded\":\"ag-row-group-contracted\"),i.dragging&&t.push(\"ag-row-dragging\"),d._.pushAll(t,this.processClassesFromGridOptions()),d._.pushAll(t,this.preProcessRowClassRules()),t.push(this.printLayout?\"ag-row-position-relative\":\"ag-row-position-absolute\"),this.firstRowOnPage=this.isFirstRowOnPage(),this.lastRowOnPage=this.isLastRowOnPage(),this.firstRowOnPage&&t.push(\"ag-row-first\"),this.lastRowOnPage&&t.push(\"ag-row-last\"),t},t.prototype.isFirstRowOnPage=function(){return this.rowNode.rowIndex===this.beans.paginationProxy.getPageFirstRow()},t.prototype.isLastRowOnPage=function(){return this.rowNode.rowIndex===this.beans.paginationProxy.getPageLastRow()},t.prototype.onModelUpdated=function(){var e=this.isFirstRowOnPage(),t=this.isLastRowOnPage();this.firstRowOnPage!==e&&(this.firstRowOnPage=e,this.eAllRowContainers.forEach(function(t){return d._.addOrRemoveCssClass(t,\"ag-row-first\",e)})),this.lastRowOnPage!==t&&(this.lastRowOnPage=t,this.eAllRowContainers.forEach(function(e){return d._.addOrRemoveCssClass(e,\"ag-row-last\",t)}))},t.prototype.preProcessRowClassRules=function(){var e=[];return this.processRowClassRules(function(t){e.push(t)},function(e){}),e},t.prototype.processRowClassRules=function(e,t){this.beans.stylingService.processClassRules(this.beans.gridOptionsWrapper.rowClassRules(),{value:void 0,colDef:void 0,data:this.rowNode.data,node:this.rowNode,rowIndex:this.rowNode.rowIndex,api:this.beans.gridOptionsWrapper.getApi(),columnApi:this.beans.gridOptionsWrapper.getColumnApi(),$scope:this.scope,context:this.beans.gridOptionsWrapper.getContext()},e,t)},t.prototype.stopEditing=function(e){if(void 0===e&&(e=!1),this.forEachCellComp(function(t){t.stopEditing(e)}),this.editingRow){if(!e){var t=this.createRowEvent(p.Events.EVENT_ROW_VALUE_CHANGED);this.beans.eventService.dispatchEvent(t)}this.setEditingRow(!1)}},t.prototype.setEditingRow=function(e){this.editingRow=e,this.eAllRowContainers.forEach(function(t){return d._.addOrRemoveCssClass(t,\"ag-row-editing\",e)});var t=e?this.createRowEvent(p.Events.EVENT_ROW_EDITING_STARTED):this.createRowEvent(p.Events.EVENT_ROW_EDITING_STOPPED);this.beans.eventService.dispatchEvent(t)},t.prototype.startRowEditing=function(e,t,o){void 0===e&&(e=null),void 0===t&&(t=null),void 0===o&&(o=null),this.editingRow||(this.forEachCellComp(function(i){var n=i===o;n?i.startEditingIfEnabled(e,t,n):i.startEditingIfEnabled(null,null,n)}),this.setEditingRow(!0))},t.prototype.forEachCellComp=function(e){d._.iterateObject(this.cellComps,function(t,o){o&&e(o)})},t.prototype.postProcessClassesFromGridOptions=function(){var e=this,t=this.processClassesFromGridOptions();t&&t.length&&t.forEach(function(t){e.eAllRowContainers.forEach(function(e){return d._.addCssClass(e,t)})})},t.prototype.postProcessRowClassRules=function(){var e=this;this.processRowClassRules(function(t){e.eAllRowContainers.forEach(function(e){return d._.addCssClass(e,t)})},function(t){e.eAllRowContainers.forEach(function(e){return d._.removeCssClass(e,t)})})},t.prototype.processClassesFromGridOptions=function(){var e=[],t=function(t){\"string\"==typeof t?e.push(t):Array.isArray(t)&&t.forEach(function(t){return e.push(t)})},o=this.beans.gridOptionsWrapper.getRowClass();if(o){if(\"function\"==typeof o)return void console.warn(\"ag-Grid: rowClass should not be a function, please use getRowClass instead\");t(o)}var i=this.beans.gridOptionsWrapper.getRowClassFunc();i&&t(i({node:this.rowNode,data:this.rowNode.data,rowIndex:this.rowNode.rowIndex,context:this.beans.gridOptionsWrapper.getContext(),api:this.beans.gridOptionsWrapper.getApi()}));return e},t.prototype.preProcessStylesFromGridOptions=function(){var e=this.processStylesFromGridOptions();return d._.cssStyleObjectToMarkup(e)},t.prototype.postProcessStylesFromGridOptions=function(){var e=this.processStylesFromGridOptions();this.eAllRowContainers.forEach(function(t){return d._.addStylesToElement(t,e)})},t.prototype.processStylesFromGridOptions=function(){var e=this.beans.gridOptionsWrapper.getRowStyle();if(!e||\"function\"!=typeof e){var t,o=this.beans.gridOptionsWrapper.getRowStyleFunc();if(o)t=o({data:this.rowNode.data,node:this.rowNode,api:this.beans.gridOptionsWrapper.getApi(),context:this.beans.gridOptionsWrapper.getContext(),$scope:this.scope});return d._.assign({},e,t)}console.warn(\"ag-Grid: rowStyle should be an object of key/value styles, not be a function, use getRowStyle() instead\")},t.prototype.createCells=function(e){var t=this,o=[],i=[];return e.forEach(function(e){var n=new s.CellComp(t.scope,t.beans,e,t.rowNode,t,!1,t.printLayout),r=n.getCreateTemplate();o.push(r),i.push(n),t.cellComps[e.getId()]=n}),{template:o.join(\"\"),cellComps:i}},t.prototype.onRowSelected=function(){var e=this.rowNode.isSelected();this.eAllRowContainers.forEach(function(t){return d._.addOrRemoveCssClass(t,\"ag-row-selected\",e)})},t.prototype.callAfterRowAttachedOnCells=function(e,t){var o=this;e.forEach(function(e){e.setParentRow(t),e.afterAttached(),o.editingRow&&e.startEditingIfEnabled()})},t.prototype.afterRowAttached=function(e,t){var o=this;this.addDomData(t),this.removeSecondPassFuncs.push(function(){e.removeRowElement(t)}),this.removeFirstPassFuncs.push(function(){if(d._.exists(o.rowNode.rowTop)){var e=o.roundRowTopToBounds(o.rowNode.rowTop);o.setRowTop(e)}else d._.addCssClass(t,\"ag-opacity-zero\")}),this.eAllRowContainers.push(t),this.useAnimationFrameForCreate?this.beans.taskQueue.addP2Task(this.addHoverFunctionality.bind(this,t)):this.addHoverFunctionality(t)},t.prototype.addHoverFunctionality=function(e){var t=this;this.active&&(this.addDestroyableEventListener(e,\"mouseenter\",function(){return t.rowNode.onMouseEnter()}),this.addDestroyableEventListener(e,\"mouseleave\",function(){return t.rowNode.onMouseLeave()}),this.addDestroyableEventListener(this.rowNode,a.RowNode.EVENT_MOUSE_ENTER,function(){t.beans.gridOptionsWrapper.isSuppressRowHoverHighlight()||d._.addCssClass(e,\"ag-row-hover\")}),this.addDestroyableEventListener(this.rowNode,a.RowNode.EVENT_MOUSE_LEAVE,function(){d._.removeCssClass(e,\"ag-row-hover\")}))},t.prototype.roundRowTopToBounds=function(e){var t=this.beans.gridPanel.getVScrollPosition(),o=this.applyPaginationOffset(t.top,!0)-100,i=this.applyPaginationOffset(t.bottom,!0)+100;return Math.min(Math.max(o,e),i)},t.prototype.getFrameworkOverrides=function(){return this.beans.frameworkOverrides},t.prototype.onRowHeightChanged=function(){if(d._.exists(this.rowNode.rowHeight)){var e=this.rowNode.rowHeight+\"px\";this.eAllRowContainers.forEach(function(t){return t.style.height=e})}},t.prototype.addEventListener=function(t,o){\"renderedRowRemoved\"!==t&&\"rowRemoved\"!==t||(t=p.Events.EVENT_VIRTUAL_ROW_REMOVED,console.warn(\"ag-Grid: Since version 11, event renderedRowRemoved is now called \"+p.Events.EVENT_VIRTUAL_ROW_REMOVED)),e.prototype.addEventListener.call(this,t,o)},t.prototype.removeEventListener=function(t,o){\"renderedRowRemoved\"!==t&&\"rowRemoved\"!==t||(t=p.Events.EVENT_VIRTUAL_ROW_REMOVED,console.warn(\"ag-Grid: Since version 11, event renderedRowRemoved and rowRemoved is now called \"+p.Events.EVENT_VIRTUAL_ROW_REMOVED)),e.prototype.removeEventListener.call(this,t,o)},t.prototype.destroy=function(t){(void 0===t&&(t=!1),e.prototype.destroy.call(this),this.active=!1,this.destroyFullWidthComponents(),t)?(this.removeFirstPassFuncs.forEach(function(e){return e()}),this.removeSecondPassFuncs.push(this.destroyContainingCells.bind(this))):(this.destroyContainingCells(),this.getAndClearDelayedDestroyFunctions().forEach(function(e){return e()}));var o=this.createRowEvent(p.Events.EVENT_VIRTUAL_ROW_REMOVED);this.dispatchEvent(o),this.beans.eventService.dispatchEvent(o)},t.prototype.destroyContainingCells=function(){this.forEachCellComp(function(e){return e.destroy()}),this.destroyFullWidthComponents()},t.prototype.getAndClearDelayedDestroyFunctions=function(){var e=this.removeSecondPassFuncs;return this.removeSecondPassFuncs=[],e},t.prototype.onCellFocusChanged=function(){var e=this.beans.focusedCellController.isRowFocused(this.rowNode.rowIndex,this.rowNode.rowPinned);e!==this.rowFocused&&(this.eAllRowContainers.forEach(function(t){return d._.addOrRemoveCssClass(t,\"ag-row-focus\",e)}),this.eAllRowContainers.forEach(function(t){return d._.addOrRemoveCssClass(t,\"ag-row-no-focus\",!e)}),this.rowFocused=e),!e&&this.editingRow&&this.stopEditing(!1)},t.prototype.onPaginationChanged=function(){var e=this.beans.paginationProxy.getCurrentPage();this.paginationPage!==e&&(this.paginationPage=e,this.onTopChanged())},t.prototype.onTopChanged=function(){this.setRowTop(this.rowNode.rowTop)},t.prototype.applyPaginationOffset=function(e,t){return void 0===t&&(t=!1),this.rowNode.isRowPinned()?e:e+this.beans.paginationProxy.getPixelOffset()*(t?1:-1)},t.prototype.setRowTop=function(e){if(!this.printLayout&&d._.exists(e)){var t=this.applyPaginationOffset(e),o=this.beans.maxDivHeightScaler.getRealPixelPosition(t)+\"px\";this.beans.gridOptionsWrapper.isSuppressRowTransform()?this.eAllRowContainers.forEach(function(e){return e.style.top=o}):this.eAllRowContainers.forEach(function(e){return e.style.transform=\"translateY(\"+o+\")\"})}},t.prototype.getAndClearNextVMTurnFunctions=function(){var e=this.createSecondPassFuncs;return this.createSecondPassFuncs=[],e},t.prototype.getRowNode=function(){return this.rowNode},t.prototype.getRenderedCellForColumn=function(e){var t=this,o=this.cellComps[e.getColId()];if(o)return o;var i=Object.keys(this.cellComps).map(function(e){return t.cellComps[e]}).filter(function(t){return t&&-1!==t.getColSpanningList().indexOf(e)});return i.length?i[0]:void 0},t.prototype.onRowIndexChanged=function(){this.onCellFocusChanged(),this.updateRowIndexes()},t.prototype.updateRowIndexes=function(){var e=this,t=this.rowNode.getRowIndexString(),o=this.rowNode.rowIndex%2==0,i=this.rowIsEven!==o,n=this.beans.gridPanel.headerRootComp.getHeaderRowCount();i&&(this.rowIsEven=o),this.eAllRowContainers.forEach(function(r){r.setAttribute(\"row-index\",t),r.setAttribute(\"aria-rowindex\",(n+e.rowNode.rowIndex+1).toString()),i&&(d._.addOrRemoveCssClass(r,\"ag-row-even\",o),d._.addOrRemoveCssClass(r,\"ag-row-odd\",!o))})},t.prototype.ensureDomOrder=function(){[{el:this.getBodyRowElement(),ct:this.bodyContainerComp},{el:this.getPinnedLeftRowElement(),ct:this.pinnedLeftContainerComp},{el:this.getPinnedRightRowElement(),ct:this.pinnedRightContainerComp},{el:this.getFullWidthRowElement(),ct:this.fullWidthContainerComp}].forEach(function(e){e.el&&e.ct.ensureDomOrder(e.el)})},t.prototype.getPinnedLeftRowElement=function(){return this.ePinnedLeftRow?this.ePinnedLeftRow:this.eFullWidthRowLeft},t.prototype.getPinnedRightRowElement=function(){return this.ePinnedRightRow?this.ePinnedRightRow:this.eFullWidthRowRight},t.prototype.getBodyRowElement=function(){return this.eBodyRow?this.eBodyRow:this.eFullWidthRowBody},t.prototype.getFullWidthRowElement=function(){return this.eFullWidthRow},t.DOM_DATA_KEY_RENDERED_ROW=\"renderedRow\",t.FULL_WIDTH_CELL_RENDERER=\"fullWidthCellRenderer\",t.GROUP_ROW_RENDERER=\"groupRowRenderer\",t.GROUP_ROW_RENDERER_COMP_NAME=\"agGroupRowRenderer\",t.LOADING_CELL_RENDERER=\"loadingCellRenderer\",t.LOADING_CELL_RENDERER_COMP_NAME=\"agLoadingCellRenderer\",t.DETAIL_CELL_RENDERER=\"detailCellRenderer\",t.DETAIL_CELL_RENDERER_COMP_NAME=\"agDetailCellRenderer\",t}(u.Component);t.RowComp=c},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}),r=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},s=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(7),l=o(18),p=o(0),u=o(2),d=o(5),c=o(3),h=o(8),f=o(9),g=o(1),y=function(e){function t(){return e.call(this,'<span class=\"ag-selection-checkbox\" unselectable=\"on\"/>')||this}return n(t,e),t.prototype.createAndAddIcons=function(){this.eCheckedIcon=g._.createIconNoSpan(\"checkboxChecked\",this.gridOptionsWrapper,this.column),this.eUncheckedIcon=g._.createIconNoSpan(\"checkboxUnchecked\",this.gridOptionsWrapper,this.column),this.eIndeterminateIcon=g._.createIconNoSpan(\"checkboxIndeterminate\",this.gridOptionsWrapper,this.column);var e=this.getGui();e.appendChild(this.eCheckedIcon),e.appendChild(this.eUncheckedIcon),e.appendChild(this.eIndeterminateIcon)},t.prototype.onDataChanged=function(){this.onSelectionChanged()},t.prototype.onSelectableChanged=function(){this.showOrHideSelect()},t.prototype.onSelectionChanged=function(){var e=this.rowNode.isSelected();g._.setDisplayed(this.eCheckedIcon,!0===e),g._.setDisplayed(this.eUncheckedIcon,!1===e),g._.setDisplayed(this.eIndeterminateIcon,\"boolean\"!=typeof e)},t.prototype.onCheckedClicked=function(){var e=this.gridOptionsWrapper.isGroupSelectsFiltered();return this.rowNode.setSelectedParams({newValue:!1,groupSelectsFiltered:e})},t.prototype.onUncheckedClicked=function(e){var t=this.gridOptionsWrapper.isGroupSelectsFiltered();return this.rowNode.setSelectedParams({newValue:!0,rangeSelect:e.shiftKey,groupSelectsFiltered:t})},t.prototype.onIndeterminateClicked=function(e){0===this.onUncheckedClicked(e)&&this.onCheckedClicked()},t.prototype.init=function(e){this.rowNode=e.rowNode,this.column=e.column,this.createAndAddIcons(),this.onSelectionChanged(),this.addGuiEventListener(\"click\",function(e){return g._.stopPropagationForAgGrid(e)}),this.addGuiEventListener(\"dblclick\",function(e){return g._.stopPropagationForAgGrid(e)}),this.addDestroyableEventListener(this.eCheckedIcon,\"click\",this.onCheckedClicked.bind(this)),this.addDestroyableEventListener(this.eUncheckedIcon,\"click\",this.onUncheckedClicked.bind(this)),this.addDestroyableEventListener(this.eIndeterminateIcon,\"click\",this.onIndeterminateClicked.bind(this)),this.addDestroyableEventListener(this.rowNode,l.RowNode.EVENT_ROW_SELECTED,this.onSelectionChanged.bind(this)),this.addDestroyableEventListener(this.rowNode,l.RowNode.EVENT_DATA_CHANGED,this.onDataChanged.bind(this)),this.addDestroyableEventListener(this.rowNode,l.RowNode.EVENT_SELECTABLE_CHANGED,this.onSelectableChanged.bind(this)),this.isRowSelectableFunc=this.gridOptionsWrapper.getIsRowSelectableFunc(),(this.isRowSelectableFunc||this.checkboxCallbackExists())&&(this.addDestroyableEventListener(this.eventService,d.Events.EVENT_DISPLAYED_COLUMNS_CHANGED,this.showOrHideSelect.bind(this)),this.showOrHideSelect())},t.prototype.showOrHideSelect=function(){var e=this.rowNode.selectable;e&&this.checkboxCallbackExists()&&(e=this.column.isCellCheckboxSelection(this.rowNode)),this.setDisplayed(e)},t.prototype.checkboxCallbackExists=function(){var e=this.column?this.column.getColDef():null;return e&&\"function\"==typeof e.checkboxSelection},r([p.Autowired(\"gridOptionsWrapper\"),s(\"design:type\",u.GridOptionsWrapper)],t.prototype,\"gridOptionsWrapper\",void 0),r([p.Autowired(\"eventService\"),s(\"design:type\",c.EventService)],t.prototype,\"eventService\",void 0),r([p.Autowired(\"gridApi\"),s(\"design:type\",h.GridApi)],t.prototype,\"gridApi\",void 0),r([p.Autowired(\"columnApi\"),s(\"design:type\",f.ColumnApi)],t.prototype,\"columnApi\",void 0),t}(a.Component);t.CheckboxSelectionComponent=y},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}),r=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},s=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(36),l=o(0),p=o(2),u=o(1),d=function(e){function t(t){var o=e.call(this,'<div class=\"ag-popup-editor\" tabindex=\"-1\"/>')||this;return o.getGuiCalledOnChild=!1,o.cellEditor=t,o}return n(t,e),t.prototype.onKeyDown=function(e){u._.isUserSuppressingKeyboardEvent(this.gridOptionsWrapper,e,this.params.node,this.params.column,!0)||this.params.onKeyDown(e)},t.prototype.getGui=function(){return this.getGuiCalledOnChild||(this.appendChild(this.cellEditor.getGui()),this.getGuiCalledOnChild=!0),e.prototype.getGui.call(this)},t.prototype.init=function(o){var i=this;this.params=o,this.gridOptionsWrapper.setDomData(this.getGui(),t.DOM_KEY_POPUP_EDITOR_WRAPPER,!0),this.addDestroyFunc(function(){i.cellEditor.destroy&&i.cellEditor.destroy()}),this.addDestroyableEventListener(e.prototype.getGui.call(this),\"keydown\",this.onKeyDown.bind(this))},t.prototype.afterGuiAttached=function(){this.cellEditor.afterGuiAttached&&this.cellEditor.afterGuiAttached()},t.prototype.getValue=function(){return this.cellEditor.getValue()},t.prototype.isCancelBeforeStart=function(){if(this.cellEditor.isCancelBeforeStart)return this.cellEditor.isCancelBeforeStart()},t.prototype.isCancelAfterEnd=function(){if(this.cellEditor.isCancelAfterEnd)return this.cellEditor.isCancelAfterEnd()},t.prototype.focusIn=function(){this.cellEditor.focusIn&&this.cellEditor.focusIn()},t.prototype.focusOut=function(){this.cellEditor.focusOut&&this.cellEditor.focusOut()},t.DOM_KEY_POPUP_EDITOR_WRAPPER=\"popupEditorWrapper\",r([l.Autowired(\"gridOptionsWrapper\"),s(\"design:type\",p.GridOptionsWrapper)],t.prototype,\"gridOptionsWrapper\",void 0),t}(a.PopupComponent);t.PopupEditorWrapper=d},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(0),s=o(6),a=o(4),l=o(2),p=o(24),u=o(1),d=function(){function e(){}return e.prototype.getNextCellToFocus=function(e,t){for(var o=t,i=!1;!i;){switch(e){case s.Constants.KEY_UP:o=this.getCellAbove(o);break;case s.Constants.KEY_DOWN:o=this.getCellBelow(o);break;case s.Constants.KEY_RIGHT:o=this.gridOptionsWrapper.isEnableRtl()?this.getCellToLeft(o):this.getCellToRight(o);break;case s.Constants.KEY_LEFT:o=this.gridOptionsWrapper.isEnableRtl()?this.getCellToRight(o):this.getCellToLeft(o);break;default:o=null,console.warn(\"ag-Grid: unknown key for navigation \"+e)}i=!o||this.isCellGoodToFocusOn(o)}return o},e.prototype.isCellGoodToFocusOn=function(e){var t,o=e.column;switch(e.rowPinned){case s.Constants.PINNED_TOP:t=this.pinnedRowModel.getPinnedTopRow(e.rowIndex);break;case s.Constants.PINNED_BOTTOM:t=this.pinnedRowModel.getPinnedBottomRow(e.rowIndex);break;default:t=this.rowModel.getRow(e.rowIndex)}return!o.isSuppressNavigable(t)},e.prototype.getCellToLeft=function(e){if(!e)return null;var t=this.columnController.getDisplayedColBefore(e.column);return t?{rowIndex:e.rowIndex,column:t,rowPinned:e.rowPinned}:null},e.prototype.getCellToRight=function(e){if(!e)return null;var t=this.columnController.getDisplayedColAfter(e.column);return t?{rowIndex:e.rowIndex,column:t,rowPinned:e.rowPinned}:null},e.prototype.getRowBelow=function(e){var t=e.rowIndex,o=e.rowPinned;if(this.isLastRowInContainer(e))switch(o){case s.Constants.PINNED_BOTTOM:return null;case s.Constants.PINNED_TOP:return this.rowModel.isRowsToRender()?{rowIndex:0,rowPinned:null}:this.pinnedRowModel.isRowsToRender(s.Constants.PINNED_BOTTOM)?{rowIndex:0,rowPinned:s.Constants.PINNED_BOTTOM}:null;default:return this.pinnedRowModel.isRowsToRender(s.Constants.PINNED_BOTTOM)?{rowIndex:0,rowPinned:s.Constants.PINNED_BOTTOM}:null}return{rowIndex:t+1,rowPinned:o}},e.prototype.getCellBelow=function(e){if(!e)return null;var t=this.getRowBelow(e);return t?{rowIndex:t.rowIndex,column:e.column,rowPinned:t.rowPinned}:null},e.prototype.isLastRowInContainer=function(e){var t=e.rowPinned,o=e.rowIndex;return t===s.Constants.PINNED_TOP?this.pinnedRowModel.getPinnedTopRowData().length-1<=o:t===s.Constants.PINNED_BOTTOM?this.pinnedRowModel.getPinnedBottomRowData().length-1<=o:this.rowModel.getRowCount()-1<=o},e.prototype.getRowAbove=function(e){var t=e.rowIndex,o=e.rowPinned;return 0===t?o===s.Constants.PINNED_TOP?null:o&&this.rowModel.isRowsToRender()?this.getLastBodyCell():this.pinnedRowModel.isRowsToRender(s.Constants.PINNED_TOP)?this.getLastFloatingTopRow():null:{rowIndex:t-1,rowPinned:o}},e.prototype.getCellAbove=function(e){if(!e)return null;var t=this.getRowAbove({rowIndex:e.rowIndex,rowPinned:e.rowPinned});return t?{rowIndex:t.rowIndex,column:e.column,rowPinned:t.rowPinned}:null},e.prototype.getLastBodyCell=function(){return{rowIndex:this.rowModel.getRowCount()-1,rowPinned:null}},e.prototype.getLastFloatingTopRow=function(){return{rowIndex:this.pinnedRowModel.getPinnedTopRowData().length-1,rowPinned:s.Constants.PINNED_TOP}},e.prototype.getNextTabbedCell=function(e,t){return t?this.getNextTabbedCellBackwards(e):this.getNextTabbedCellForwards(e)},e.prototype.getNextTabbedCellForwards=function(e){var t=this.columnController.getAllDisplayedColumns(),o=e.rowIndex,i=e.rowPinned,n=this.columnController.getDisplayedColAfter(e.column);if(!n){n=t[0];var r=this.getRowBelow(e);if(u._.missing(r))return null;o=r?r.rowIndex:null,i=r?r.rowPinned:null}return{rowIndex:o,column:n,rowPinned:i}},e.prototype.getNextTabbedCellBackwards=function(e){var t=this.columnController.getAllDisplayedColumns(),o=e.rowIndex,i=e.rowPinned,n=this.columnController.getDisplayedColBefore(e.column);if(!n){n=u._.last(t);var r=this.getRowAbove({rowIndex:e.rowIndex,rowPinned:e.rowPinned});if(u._.missing(r))return null;o=r?r.rowIndex:null,i=r?r.rowPinned:null}return{rowIndex:o,column:n,rowPinned:i}},i([r.Autowired(\"columnController\"),n(\"design:type\",a.ColumnController)],e.prototype,\"columnController\",void 0),i([r.Autowired(\"rowModel\"),n(\"design:type\",Object)],e.prototype,\"rowModel\",void 0),i([r.Autowired(\"pinnedRowModel\"),n(\"design:type\",p.PinnedRowModel)],e.prototype,\"pinnedRowModel\",void 0),i([r.Autowired(\"gridOptionsWrapper\"),n(\"design:type\",l.GridOptionsWrapper)],e.prototype,\"gridOptionsWrapper\",void 0),e=i([r.Bean(\"cellNavigationService\")],e)}();t.CellNavigationService=d},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(0),s=o(0),a=function(){function e(){this.templateCache={},this.waitingCallbacks={}}return e.prototype.getTemplate=function(e,t){var o=this.templateCache[e];if(o)return o;var i=this.waitingCallbacks[e],n=this;if(!i){i=[],this.waitingCallbacks[e]=i;var r=new XMLHttpRequest;r.onload=function(){n.handleHttpResult(this,e)},r.open(\"GET\",e),r.send()}return t&&i.push(t),null},e.prototype.handleHttpResult=function(e,t){if(200===e.status&&null!==e.response){this.templateCache[t]=e.response||e.responseText;for(var o=this.waitingCallbacks[t],i=0;i<o.length;i++){(0,o[i])()}if(this.$scope){var n=this;window.setTimeout(function(){n.$scope.$apply()},0)}}else console.warn(\"Unable to get template error \"+e.status+\" - \"+t)},i([s.Autowired(\"$scope\"),n(\"design:type\",Object)],e.prototype,\"$scope\",void 0),e=i([r.Bean(\"templateService\")],e)}();t.TemplateService=a},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}),r=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},s=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(7),l=o(1),p=o(0),u=o(14),d=function(e){function t(){var o=e.call(this,t.TEMPLATE)||this;return o.refreshCount=0,o.eCurrent=o.queryForHtmlElement(\".ag-value-slide-current\"),o}return n(t,e),t.prototype.init=function(e){this.params=e,this.refresh(e)},t.prototype.addSlideAnimation=function(){var e=this;this.refreshCount++;var t=this.refreshCount;this.ePrevious&&this.getGui().removeChild(this.ePrevious),this.ePrevious=l._.loadTemplate('<span class=\"ag-value-slide-previous ag-value-slide-out\"></span>'),this.ePrevious.innerHTML=this.eCurrent.innerHTML,this.getGui().insertBefore(this.ePrevious,this.eCurrent),window.setTimeout(function(){t===e.refreshCount&&l._.addCssClass(e.ePrevious,\"ag-value-slide-out-end\")},50),window.setTimeout(function(){t===e.refreshCount&&(e.getGui().removeChild(e.ePrevious),e.ePrevious=null)},3e3)},t.prototype.refresh=function(e){var t=e.value;if(l._.missing(t)&&(t=\"\"),t!==this.lastValue&&!this.filterManager.isSuppressFlashingCellsBecauseFiltering())return this.addSlideAnimation(),this.lastValue=t,l._.exists(e.valueFormatted)?this.eCurrent.innerHTML=e.valueFormatted:l._.exists(e.value)?this.eCurrent.innerHTML=t:l._.clearElement(this.eCurrent),!0},t.TEMPLATE='<span><span class=\"ag-value-slide-current\"></span></span>',r([p.Autowired(\"filterManager\"),s(\"design:type\",u.FilterManager)],t.prototype,\"filterManager\",void 0),t}(a.Component);t.AnimateSlideCellRenderer=d},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var r,s=o(73),a=o(0),l=o(74),p=o(154),u=o(155),d=o(76),c=o(77),h=o(71),f=o(156),g=o(78),y=o(105),v=o(106),m=o(107),C=o(79),E=o(157),w=o(158),R=o(159),_=o(1),O=o(160),S=o(161),b=o(80),P=o(162),A=o(163);!function(e){e[e.DEFAULT=0]=\"DEFAULT\",e[e.REGISTERED=1]=\"REGISTERED\"}(r=t.RegisteredComponentSource||(t.RegisteredComponentSource={}));var D=function(){function e(){this.agGridDefaults={agDateInput:O.DefaultDateComponent,agColumnHeader:p.HeaderComp,agColumnGroupHeader:u.HeaderGroupComp,agTextColumnFloatingFilter:A.TextFloatingFilter,agNumberColumnFloatingFilter:P.NumberFloatingFilter,agDateColumnFloatingFilter:S.DateFloatingFilter,agAnimateShowChangeCellRenderer:c.AnimateShowChangeCellRenderer,agAnimateSlideCellRenderer:h.AnimateSlideCellRenderer,agGroupCellRenderer:d.GroupCellRenderer,agGroupRowRenderer:d.GroupCellRenderer,agLoadingCellRenderer:f.LoadingCellRenderer,agCellEditor:s.TextCellEditor,agTextCellEditor:s.TextCellEditor,agSelectCellEditor:g.SelectCellEditor,agPopupTextCellEditor:y.PopupTextCellEditor,agPopupSelectCellEditor:v.PopupSelectCellEditor,agLargeTextCellEditor:m.LargeTextCellEditor,agTextColumnFilter:b.TextFilter,agNumberColumnFilter:C.NumberFilter,agDateColumnFilter:l.DateFilter,agLoadingOverlay:E.LoadingOverlayComponent,agNoRowsOverlay:w.NoRowsOverlayComponent,agTooltipComponent:R.TooltipComponent},this.agDeprecatedNames={set:{newComponentName:\"agSetColumnFilter\",propertyHolder:\"filter\"},text:{newComponentName:\"agTextColumnFilter\",propertyHolder:\"filter\"},number:{newComponentName:\"agNumberColumnFilter\",propertyHolder:\"filter\"},date:{newComponentName:\"agDateColumnFilter\",propertyHolder:\"filter\"},group:{newComponentName:\"agGroupCellRenderer\",propertyHolder:\"cellRenderer\"},animateShowChange:{newComponentName:\"agAnimateShowChangeCellRenderer\",propertyHolder:\"cellRenderer\"},animateSlide:{newComponentName:\"agAnimateSlideCellRenderer\",propertyHolder:\"cellRenderer\"},select:{newComponentName:\"agSelectCellEditor\",propertyHolder:\"cellEditor\"},largeText:{newComponentName:\"agLargeTextCellEditor\",propertyHolder:\"cellEditor\"},popupSelect:{newComponentName:\"agPopupSelectCellEditor\",propertyHolder:\"cellEditor\"},popupText:{newComponentName:\"agPopupTextCellEditor\",propertyHolder:\"cellEditor\"},richSelect:{newComponentName:\"agRichSelectCellEditor\",propertyHolder:\"cellEditor\"},headerComponent:{newComponentName:\"agColumnHeader\",propertyHolder:\"headerComponent\"}},this.jsComponents={},this.frameworkComponents={}}return e.prototype.init=function(){var e=this,t=this.context.getEnterpriseDefaultComponents();t&&_._.forEach(t,function(t){e.registerDefaultComponent(t.componentName,t.theClass)}),null!=this.gridOptions.components&&Object.keys(this.gridOptions.components).forEach(function(t){e.registerComponent(t,e.gridOptions.components[t])}),null!=this.gridOptions.frameworkComponents&&Object.keys(this.gridOptions.frameworkComponents).forEach(function(t){e.registerFwComponent(t,e.gridOptions.frameworkComponents[t])})},e.prototype.registerDefaultComponent=function(e,t){var o=this.translateIfDeprecated(e);this.agGridDefaults[o]?console.error(\"Trying to overwrite a default component. You should call registerComponent\"):this.agGridDefaults[o]=t},e.prototype.registerComponent=function(e,t){var o=this.translateIfDeprecated(e);this.frameworkComponents[o]?console.error(\"Trying to register a component that you have already registered for frameworks: \"+o):this.jsComponents[o]=t},e.prototype.registerFwComponent=function(e,t){var o=this.translateIfDeprecated(e);this.jsComponents[o]?console.error(\"Trying to register a component that you have already registered for plain javascript: \"+o):this.frameworkComponents[o]=t},e.prototype.retrieve=function(e){var t=this.translateIfDeprecated(e);return this.frameworkComponents[t]?{componentFromFramework:!0,component:this.frameworkComponents[t],source:r.REGISTERED}:this.jsComponents[t]?{componentFromFramework:!1,component:this.jsComponents[t],source:r.REGISTERED}:this.agGridDefaults[t]?this.agGridDefaults[t]?{componentFromFramework:!1,component:this.agGridDefaults[t],source:r.DEFAULT}:null:(Object.keys(this.agGridDefaults).indexOf(t)<0&&console.warn(\"ag-Grid: Looking for component [\"+t+\"] but it wasn't found.\"),null)},e.prototype.translateIfDeprecated=function(e){var t=this.agDeprecatedNames[e];return null!=t?(_._.doOnce(function(){console.warn(\"ag-grid. Since v15.0 component names have been renamed to be namespaced. You should rename \"+t.propertyHolder+\":\"+e+\" to \"+t.propertyHolder+\":\"+t.newComponentName)},\"DEPRECATE_COMPONENT_\"+e),t.newComponentName):e},i([a.Autowired(\"gridOptions\"),n(\"design:type\",Object)],e.prototype,\"gridOptions\",void 0),i([a.Autowired(\"context\"),n(\"design:type\",a.Context)],e.prototype,\"context\",void 0),i([a.PostConstruct,n(\"design:type\",Function),n(\"design:paramtypes\",[]),n(\"design:returntype\",void 0)],e.prototype,\"init\",null),e=i([a.Bean(\"userComponentRegistry\")],e)}();t.UserComponentRegistry=D},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)});Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(6),s=o(36),a=o(1),l=function(e){function t(){var o=e.call(this,t.TEMPLATE)||this;return o.eInput=o.getGui().querySelector(\"input\"),o}return n(t,e),t.prototype.init=function(e){this.params=e;var t,o=this.eInput;e.cellStartedEdit?(this.focusAfterAttached=!0,e.keyPress===r.Constants.KEY_BACKSPACE||e.keyPress===r.Constants.KEY_DELETE?t=\"\":e.charPress?t=e.charPress:(t=this.getStartValue(e),e.keyPress!==r.Constants.KEY_F2&&(this.highlightAllOnFocus=!0))):(this.focusAfterAttached=!1,t=this.getStartValue(e));a._.exists(t)&&(o.value=t),this.addDestroyableEventListener(o,\"keydown\",function(e){var t=e.keyCode===r.Constants.KEY_PAGE_UP,o=e.keyCode===r.Constants.KEY_PAGE_DOWN;(t||o)&&e.preventDefault()})},t.prototype.afterGuiAttached=function(){if(this.focusAfterAttached){var e=this.eInput;if(e.focus(),this.highlightAllOnFocus)e.select();else{var t=e.value?e.value.length:0;t>0&&e.setSelectionRange(t,t)}}},t.prototype.focusIn=function(){var e=this.eInput;e.focus(),e.select()},t.prototype.getValue=function(){var e=this.eInput;return this.params.parseValue(e.value)},t.prototype.getStartValue=function(e){return e.useFormatter||e.column.getColDef().refData?e.formatValue(e.value):e.value},t.prototype.isPopup=function(){return!1},t.TEMPLATE='<div class=\"ag-input-wrapper\" role=\"presentation\"><input class=\"ag-cell-edit-input\" type=\"text\"/></div>',t}(s.PopupComponent);t.TextCellEditor=l},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}),r=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},s=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(10),l=o(0),p=o(16),u=o(1),d=o(103),c=o(27),h=o(75),f=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t.prototype.mapRangeFromModel=function(e){return{from:u._.parseYyyyMmDdToDate(e.dateFrom,\"-\"),to:u._.parseYyyyMmDdToDate(e.dateTo,\"-\")}},t.prototype.setValueFromFloatingFilter=function(e){if(null!=e){var t=u._.parseYyyyMmDdToDate(e,\"-\");this.dateCompFrom1.setDate(t)}else this.dateCompFrom1.setDate(null);this.dateCompTo1.setDate(null),this.dateCompFrom2.setDate(null),this.dateCompTo2.setDate(null)},t.prototype.setConditionIntoUi=function(e,t){var o=t===c.ConditionPosition.One,i=e?e.dateFrom:null,n=e?e.dateTo:null,r=u._.parseYyyyMmDdToDate(i,\"-\"),s=u._.parseYyyyMmDdToDate(n,\"-\"),a=o?this.dateCompFrom1:this.dateCompFrom2,l=o?this.dateCompTo1:this.dateCompTo2;a.setDate(r),l.setDate(s)},t.prototype.resetUiToDefaults=function(){e.prototype.resetUiToDefaults.call(this),this.dateCompTo1.setDate(null),this.dateCompTo2.setDate(null),this.dateCompFrom1.setDate(null),this.dateCompFrom2.setDate(null)},t.prototype.comparator=function(){return this.dateFilterParams.comparator?this.dateFilterParams.comparator:this.defaultComparator.bind(this)},t.prototype.defaultComparator=function(e,t){return t<e?-1:t>e?1:null!=t?0:-1},t.prototype.setParams=function(t){e.prototype.setParams.call(this,t),this.dateFilterParams=t,this.createDateComponents()},t.prototype.createDateComponents=function(){var e=this,t={onDateChanged:function(){return e.onUiChanged()},filterParams:this.dateFilterParams};this.dateCompFrom1=new d.DateCompWrapper(this.userComponentFactory,t,this.ePanelFrom1),this.dateCompFrom2=new d.DateCompWrapper(this.userComponentFactory,t,this.ePanelFrom2),this.dateCompTo1=new d.DateCompWrapper(this.userComponentFactory,t,this.ePanelTo1),this.dateCompTo2=new d.DateCompWrapper(this.userComponentFactory,t,this.ePanelTo2),this.addDestroyFunc(function(){e.dateCompFrom1.destroy(),e.dateCompFrom2.destroy(),e.dateCompTo1.destroy(),e.dateCompTo2.destroy()})},t.prototype.getDefaultFilterOptions=function(){return t.DEFAULT_FILTER_OPTIONS},t.prototype.createValueTemplate=function(e){var t=e===c.ConditionPosition.One?\"1\":\"2\";return'<div class=\"ag-filter-body\" ref=\"eCondition'+t+'Body\">\\n                    <div class=\"ag-filter-date-from\" ref=\"ePanelFrom'+t+'\">\\n                    </div>\\n                    <div class=\"ag-filter-date-to\" ref=\"ePanelTo'+t+'\"\">\\n                    </div>\\n                </div>'},t.prototype.isConditionUiComplete=function(e){var t=e===c.ConditionPosition.One,o=t?this.getCondition1Type():this.getCondition2Type(),i=t?this.dateCompFrom1:this.dateCompFrom2,n=t?this.dateCompTo1:this.dateCompTo2,r=i.getDate(),s=n.getDate();return o!==c.SimpleFilter.EMPTY&&(!!this.doesFilterHaveHiddenInput(o)||(o===c.SimpleFilter.IN_RANGE?null!=r&&null!=s:null!=r))},t.prototype.areSimpleModelsEqual=function(e,t){return e.dateFrom===t.dateFrom&&e.dateTo===t.dateTo&&e.type===t.type},t.prototype.getFilterType=function(){return t.FILTER_TYPE},t.prototype.createCondition=function(e){var o=e===c.ConditionPosition.One,i=o?this.getCondition1Type():this.getCondition2Type(),n=o?this.dateCompTo1:this.dateCompTo2,r=o?this.dateCompFrom1:this.dateCompFrom2;return{dateTo:u._.serializeDateToYyyyMmDd(n.getDate(),\"-\"),dateFrom:u._.serializeDateToYyyyMmDd(r.getDate(),\"-\"),type:i,filterType:t.FILTER_TYPE}},t.prototype.updateUiVisibility=function(){e.prototype.updateUiVisibility.call(this);var t=this.showValueFrom(this.getCondition1Type());u._.setDisplayed(this.ePanelFrom1,t);var o=this.showValueTo(this.getCondition1Type());u._.setDisplayed(this.ePanelTo1,o);var i=this.showValueFrom(this.getCondition2Type());u._.setDisplayed(this.ePanelFrom2,i);var n=this.showValueTo(this.getCondition2Type());u._.setDisplayed(this.ePanelTo2,n)},t.FILTER_TYPE=\"date\",t.DEFAULT_FILTER_OPTIONS=[h.ScalerFilter.EQUALS,h.ScalerFilter.GREATER_THAN,h.ScalerFilter.LESS_THAN,h.ScalerFilter.NOT_EQUAL,h.ScalerFilter.IN_RANGE],r([a.RefSelector(\"ePanelFrom1\"),s(\"design:type\",HTMLElement)],t.prototype,\"ePanelFrom1\",void 0),r([a.RefSelector(\"ePanelFrom2\"),s(\"design:type\",HTMLElement)],t.prototype,\"ePanelFrom2\",void 0),r([a.RefSelector(\"ePanelTo1\"),s(\"design:type\",HTMLElement)],t.prototype,\"ePanelTo1\",void 0),r([a.RefSelector(\"ePanelTo2\"),s(\"design:type\",HTMLElement)],t.prototype,\"ePanelTo2\",void 0),r([l.Autowired(\"userComponentFactory\"),s(\"design:type\",p.UserComponentFactory)],t.prototype,\"userComponentFactory\",void 0),t}(h.ScalerFilter);t.DateFilter=f},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)});Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(27),s=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t.prototype.setParams=function(t){e.prototype.setParams.call(this,t),this.scalarFilterParams=t,this.checkDeprecatedParams()},t.prototype.checkDeprecatedParams=function(){this.scalarFilterParams.nullComparator&&(console.warn(\"ag-Grid: Since v21.0, the property filterParams.nullComparator is deprecated. Please use filterParams.includeBlanksInEquals, filterParams.includeBlanksInLessThan and filterParams.includeBlanksInGreaterThan instead.\"),this.scalarFilterParams.includeBlanksInEquals=this.scalarFilterParams.nullComparator.equals,this.scalarFilterParams.includeBlanksInLessThan=this.scalarFilterParams.nullComparator.lessThan,this.scalarFilterParams.includeBlanksInGreaterThan=this.scalarFilterParams.nullComparator.greaterThan)},t.prototype.nullComparator=function(e,o,i){if(null==i){var n=this.canNullsPassFilter(e);if(e===t.EMPTY)return 0;if(e===t.EQUALS)return n?0:1;if(e===t.GREATER_THAN)return n?1:-1;if(e===t.GREATER_THAN_OR_EQUAL)return n?1:-1;if(e===t.LESS_THAN_OR_EQUAL)return n?-1:1;if(e===t.LESS_THAN)return n?-1:1;if(e===t.NOT_EQUAL)return n?1:0}return this.comparator()(o,i)},t.prototype.canNullsPassFilter=function(e){switch(e){case r.SimpleFilter.GREATER_THAN:case r.SimpleFilter.GREATER_THAN_OR_EQUAL:return this.scalarFilterParams.includeBlanksInGreaterThan;case r.SimpleFilter.LESS_THAN:case r.SimpleFilter.LESS_THAN_OR_EQUAL:return this.scalarFilterParams.includeBlanksInLessThan;case r.SimpleFilter.EQUALS:return this.scalarFilterParams.includeBlanksInEquals}},t.prototype.individualConditionPasses=function(e,o){var i=this.scalarFilterParams.valueGetter(e.node),n=this.mapRangeFromModel(o),r=n.from,s=n.to,a=o.type,l=this.optionsFactory.getCustomOption(a);if(l&&(null!=r||l.hideFilterInput))return l.test(r,i);var p=this.nullComparator(a,r,i);if(a===t.EQUALS)return 0===p;if(a===t.GREATER_THAN)return p>0;if(a===t.GREATER_THAN_OR_EQUAL)return p>=0;if(a===t.LESS_THAN_OR_EQUAL)return p<=0;if(a===t.LESS_THAN)return p<0;if(a===t.NOT_EQUAL)return 0!=p;var u=this.nullComparator(a,s,i);if(a===t.IN_RANGE)return this.scalarFilterParams.inRangeInclusive?p>=0&&u<=0:p>0&&u<0;throw new Error(\"Unexpected type of filter: \"+a)},t.DEFAULT_NULL_COMPARATOR={equals:!1,lessThan:!1,greaterThan:!1},t}(r.SimpleFilter);t.ScalerFilter=s},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}),r=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},s=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(2),l=o(21),p=o(3),u=o(6),d=o(0),c=o(7),h=o(18),f=o(44),g=o(67),y=o(4),v=o(11),m=o(10),C=o(45),E=o(16),w=o(1),R=function(e){function t(){return e.call(this,t.TEMPLATE)||this}return n(t,e),t.prototype.init=function(e){this.params=e,this.gridOptionsWrapper.isGroupIncludeTotalFooter()&&this.assignBlankValueToGroupFooterCell(e);var t=this.isEmbeddedRowMismatch(),o=null==e.value;this.cellIsBlank=t||o,this.cellIsBlank||(this.setupDragOpenParents(),this.addExpandAndContract(),this.addCheckboxIfNeeded(),this.addValueElement(),this.setupIndent())},t.prototype.assignBlankValueToGroupFooterCell=function(e){e.value||-1!=e.node.level||(e.value=\"\")},t.prototype.isEmbeddedRowMismatch=function(){if(this.params.fullWidth&&this.gridOptionsWrapper.isEmbedFullWidthRows()){var e=this.params.pinned===v.Column.PINNED_LEFT,t=this.params.pinned===v.Column.PINNED_RIGHT,o=!e&&!t;return this.gridOptionsWrapper.isEnableRtl()?this.columnController.isPinningLeft()?!t:!o:this.columnController.isPinningLeft()?!e:!o}return!1},t.prototype.setIndent=function(){if(!this.gridOptionsWrapper.isGroupHideOpenParents()){var e=this.params,t=e.node.uiLevel;e.padding>=0?this.setPaddingDeprecatedWay(t,e.padding):(this.indentClass&&this.removeCssClass(this.indentClass),this.indentClass=\"ag-row-group-indent-\"+t,this.addCssClass(this.indentClass))}},t.prototype.setPaddingDeprecatedWay=function(e,t){w._.doOnce(function(){return console.warn(\"ag-Grid: since v14.2, configuring padding for groupCellRenderer should be done with Sass variables and themes. Please see the ag-Grid documentation page for Themes, in particular the property $row-group-indent-size.\")},\"groupCellRenderer->doDeprecatedWay\");var o=e*t;this.gridOptionsWrapper.isEnableRtl()?this.getGui().style.paddingRight=o+\"px\":this.getGui().style.paddingLeft=o+\"px\"},t.prototype.setupIndent=function(){var e=this.params.node;this.params.suppressPadding||(this.addDestroyableEventListener(e,h.RowNode.EVENT_UI_LEVEL_CHANGED,this.setIndent.bind(this)),this.setIndent())},t.prototype.addValueElement=function(){var e=this.params,t=this.displayedGroup;t.footer?this.createFooterCell():t.hasChildren()||w._.get(e.colDef,\"cellRendererParams.innerRenderer\",null)||w._.get(e.colDef,\"cellRendererParams.innerRendererFramework\",null)?(this.createGroupCell(),t.hasChildren()&&this.addChildCount()):this.createLeafCell()},t.prototype.createFooterCell=function(){var e,t=this.params.footerValueGetter;if(t){var o=w._.cloneObject(this.params);o.value=this.params.value,\"function\"==typeof t?e=t(o):\"string\"==typeof t?e=this.expressionService.evaluate(t,o):console.warn(\"ag-Grid: footerValueGetter should be either a function or a string (expression)\")}else e=\"Total \"+this.params.value;this.eValue.innerHTML=e},t.prototype.createGroupCell=function(){var e,t=this,o=this.params,i=this.displayedGroup.rowGroupColumn,n=i||o.column,r=this.params.value,s=n?this.valueFormatterService.formatValue(n,o.node,o.scope,r):null;o.valueFormatted=s,(e=1==o.fullWidth?this.useFullWidth(o):this.useInnerRenderer(this.params.colDef.cellRendererParams,n.getColDef(),o))&&e.then(function(e){t.innerCellRenderer=e})},t.prototype.useInnerRenderer=function(e,t,o){var i=this,n=null,r=this.userComponentFactory.lookupComponentClassDef(e,\"innerRenderer\");if(r&&null!=r.component&&r.source!=E.ComponentSource.DEFAULT)n=this.userComponentFactory.newInnerCellRenderer(e,o);else{var s=this.userComponentFactory.lookupComponentClassDef(t,\"cellRenderer\");n=s&&s.source!=E.ComponentSource.DEFAULT?this.userComponentFactory.newCellRenderer(t,o):s&&s.source==E.ComponentSource.DEFAULT&&w._.get(t,\"cellRendererParams.innerRenderer\",null)?this.userComponentFactory.newInnerCellRenderer(t.cellRendererParams,o):this.userComponentFactory.newCellRenderer({},o)}return null!=n?n.then(function(e){null!=e?w._.bindCellRendererToHtmlElement(n,i.eValue):i.eValue.innerText=null!=o.valueFormatted?o.valueFormatted:o.value}):this.eValue.innerText=null!=o.valueFormatted?o.valueFormatted:o.value,n},t.prototype.useFullWidth=function(e){var t=this.userComponentFactory.newFullWidthGroupRowInnerCellRenderer(e);return null!=t?w._.bindCellRendererToHtmlElement(t,this.eValue):this.eValue.innerText=null!=e.valueFormatted?e.valueFormatted:e.value,t},t.prototype.addChildCount=function(){this.params.suppressCount||(this.addDestroyableEventListener(this.displayedGroup,h.RowNode.EVENT_ALL_CHILDREN_COUNT_CHANGED,this.updateChildCount.bind(this)),this.updateChildCount())},t.prototype.updateChildCount=function(){var e=this.displayedGroup.allChildrenCount;this.eChildCount.innerHTML=e>=0?\"(\"+e+\")\":\"\"},t.prototype.createLeafCell=function(){w._.exists(this.params.value)&&(this.eValue.innerText=this.params.valueFormatted?this.params.valueFormatted:this.params.value)},t.prototype.isUserWantsSelected=function(){var e=this.params.checkbox;return\"function\"==typeof e?e(this.params):!0===e},t.prototype.addCheckboxIfNeeded=function(){var e=this.displayedGroup,t=this.isUserWantsSelected()&&!e.footer&&!e.rowPinned&&!e.detail;if(t){var o=new g.CheckboxSelectionComponent;this.getContext().wireBean(o),o.init({rowNode:e,column:this.params.column}),this.eCheckbox.appendChild(o.getGui()),this.addDestroyFunc(function(){return o.destroy()})}w._.addOrRemoveCssClass(this.eCheckbox,\"ag-invisible\",!t)},t.prototype.addExpandAndContract=function(){var e=this.params,t=e.eGridCell,o=w._.createIconNoSpan(\"groupExpanded\",this.gridOptionsWrapper,null),i=w._.createIconNoSpan(\"groupContracted\",this.gridOptionsWrapper,null);this.eExpanded.appendChild(o),this.eContracted.appendChild(i),this.addDestroyableEventListener(this.eExpanded,\"click\",this.onExpandClicked.bind(this)),this.addDestroyableEventListener(this.eContracted,\"click\",this.onExpandClicked.bind(this)),this.addDestroyableEventListener(t,\"keydown\",this.onKeyDown.bind(this)),this.addDestroyableEventListener(e.node,h.RowNode.EVENT_EXPANDED_CHANGED,this.showExpandAndContractIcons.bind(this)),this.showExpandAndContractIcons(),this.addDestroyableEventListener(this.displayedGroup,h.RowNode.EVENT_ALL_CHILDREN_COUNT_CHANGED,this.onAllChildrenCountChanged.bind(this)),this.gridOptionsWrapper.isEnableGroupEdit()||!this.isExpandable()||e.suppressDoubleClickExpand||this.addDestroyableEventListener(t,\"dblclick\",this.onCellDblClicked.bind(this))},t.prototype.onAllChildrenCountChanged=function(){this.showExpandAndContractIcons(),this.setIndent()},t.prototype.onKeyDown=function(e){if(w._.isKeyPressed(e,u.Constants.KEY_ENTER)){if(this.params.suppressEnterExpand)return;if(this.params.column&&this.params.column.isCellEditable(this.params.node))return;e.preventDefault(),this.onExpandOrContract()}},t.prototype.setupDragOpenParents=function(){var e=this.params.column,t=this.params.node;if(this.gridOptionsWrapper.isGroupHideOpenParents())if(t.hasChildren()){var o=t.rowGroupColumn;this.draggedFromHideOpenParents=!!o&&!e.isRowGroupDisplayed(o.getId())}else this.draggedFromHideOpenParents=!0;else this.draggedFromHideOpenParents=!1;if(this.draggedFromHideOpenParents)for(var i=t.parent;!w._.missing(i);){if(i.rowGroupColumn&&e.isRowGroupDisplayed(i.rowGroupColumn.getId())){this.displayedGroup=i;break}i=i.parent}w._.missing(this.displayedGroup)&&(this.displayedGroup=t)},t.prototype.onExpandClicked=function(e){w._.isStopPropagationForAgGrid(e)||(w._.stopPropagationForAgGrid(e),this.onExpandOrContract())},t.prototype.onCellDblClicked=function(e){w._.isStopPropagationForAgGrid(e)||(w._.isElementInEventPath(this.eExpanded,e)||w._.isElementInEventPath(this.eContracted,e)||this.onExpandOrContract())},t.prototype.onExpandOrContract=function(){var e=this.displayedGroup;e.setExpanded(!e.expanded)},t.prototype.isExpandable=function(){var e=this.params.node,t=this.columnController.isPivotMode()&&e.leafGroup;return this.draggedFromHideOpenParents||e.isExpandable()&&!e.footer&&!t},t.prototype.showExpandAndContractIcons=function(){var e=this.params.node;if(this.isExpandable()){var t=!!this.draggedFromHideOpenParents||e.expanded;w._.setDisplayed(this.eContracted,!t),w._.setDisplayed(this.eExpanded,t)}else w._.setDisplayed(this.eExpanded,!1),w._.setDisplayed(this.eContracted,!1);var o=this.displayedGroup,i=this.columnController.isPivotMode()&&o.leafGroup,n=!o.isExpandable(),r=o.footer||n||i;this.addOrRemoveCssClass(\"ag-row-group\",!r),this.addOrRemoveCssClass(\"ag-row-group-leaf-indent\",r)},t.prototype.destroy=function(){e.prototype.destroy.call(this),this.innerCellRenderer&&this.innerCellRenderer.destroy&&this.innerCellRenderer.destroy()},t.prototype.refresh=function(){return!1},t.TEMPLATE='<span class=\"ag-cell-wrapper\"><span class=\"ag-group-expanded\" ref=\"eExpanded\"></span><span class=\"ag-group-contracted\" ref=\"eContracted\"></span><span class=\"ag-group-checkbox ag-invisible\" ref=\"eCheckbox\"></span><span class=\"ag-group-value\" ref=\"eValue\"></span><span class=\"ag-group-child-count\" ref=\"eChildCount\"></span></span>',r([d.Autowired(\"gridOptionsWrapper\"),s(\"design:type\",a.GridOptionsWrapper)],t.prototype,\"gridOptionsWrapper\",void 0),r([d.Autowired(\"expressionService\"),s(\"design:type\",l.ExpressionService)],t.prototype,\"expressionService\",void 0),r([d.Autowired(\"eventService\"),s(\"design:type\",p.EventService)],t.prototype,\"eventService\",void 0),r([d.Autowired(\"valueFormatterService\"),s(\"design:type\",f.ValueFormatterService)],t.prototype,\"valueFormatterService\",void 0),r([d.Autowired(\"columnController\"),s(\"design:type\",y.ColumnController)],t.prototype,\"columnController\",void 0),r([d.Autowired(\"mouseEventService\"),s(\"design:type\",C.MouseEventService)],t.prototype,\"mouseEventService\",void 0),r([d.Autowired(\"userComponentFactory\"),s(\"design:type\",E.UserComponentFactory)],t.prototype,\"userComponentFactory\",void 0),r([m.RefSelector(\"eExpanded\"),s(\"design:type\",HTMLElement)],t.prototype,\"eExpanded\",void 0),r([m.RefSelector(\"eContracted\"),s(\"design:type\",HTMLElement)],t.prototype,\"eContracted\",void 0),r([m.RefSelector(\"eCheckbox\"),s(\"design:type\",HTMLElement)],t.prototype,\"eCheckbox\",void 0),r([m.RefSelector(\"eValue\"),s(\"design:type\",HTMLElement)],t.prototype,\"eValue\",void 0),r([m.RefSelector(\"eChildCount\"),s(\"design:type\",HTMLElement)],t.prototype,\"eChildCount\",void 0),t}(c.Component);t.GroupCellRenderer=R},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}),r=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},s=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(7),l=o(1),p=o(14),u=o(0),d=function(e){function t(){var o=e.call(this,t.TEMPLATE)||this;return o.refreshCount=0,o}return n(t,e),t.prototype.init=function(e){this.eValue=this.queryForHtmlElement(\".ag-value-change-value\"),this.eDelta=this.queryForHtmlElement(\".ag-value-change-delta\"),this.refresh(e)},t.prototype.showDelta=function(e,t){var o=Math.abs(t),i=e.formatValue(o),n=l._.exists(i)?i:o,r=t>=0;this.eDelta.innerHTML=r?\"↑\"+n:\"↓\"+n,l._.addOrRemoveCssClass(this.eDelta,\"ag-value-change-delta-up\",r),l._.addOrRemoveCssClass(this.eDelta,\"ag-value-change-delta-down\",!r)},t.prototype.setTimerToRemoveDelta=function(){var e=this;this.refreshCount++;var t=this.refreshCount;window.setTimeout(function(){t===e.refreshCount&&e.hideDeltaValue()},2e3)},t.prototype.hideDeltaValue=function(){l._.removeCssClass(this.eValue,\"ag-value-change-value-highlight\"),l._.clearElement(this.eDelta)},t.prototype.refresh=function(e){var t=e.value;if(t!==this.lastValue&&(l._.exists(e.valueFormatted)?this.eValue.innerHTML=e.valueFormatted:l._.exists(e.value)?this.eValue.innerHTML=t:l._.clearElement(this.eValue),!this.filterManager.isSuppressFlashingCellsBecauseFiltering())){if(\"number\"==typeof t&&\"number\"==typeof this.lastValue){var o=t-this.lastValue;this.showDelta(e,o)}return this.lastValue&&l._.addCssClass(this.eValue,\"ag-value-change-value-highlight\"),this.setTimerToRemoveDelta(),this.lastValue=t,!0}},t.TEMPLATE='<span><span class=\"ag-value-change-delta\"></span><span class=\"ag-value-change-value\"></span></span>',r([u.Autowired(\"filterManager\"),s(\"design:type\",p.FilterManager)],t.prototype,\"filterManager\",void 0),t}(a.Component);t.AnimateShowChangeCellRenderer=d},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}),r=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},s=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(36),l=o(6),p=o(0),u=o(2),d=o(44),c=o(1),h=function(e){function t(){var t=e.call(this,'<div class=\"ag-cell-edit-input\"><select class=\"ag-cell-edit-input\"/></div>')||this;return t.eSelect=t.getGui().querySelector(\"select\"),t}return n(t,e),t.prototype.init=function(e){var t=this;this.focusAfterAttached=e.cellStartedEdit,c._.missing(e.values)?console.warn(\"ag-Grid: no values found for select cellEditor\"):(e.values.forEach(function(o){var i=document.createElement(\"option\");i.value=o;var n=t.valueFormatterService.formatValue(e.column,null,null,o),r=null!=n;i.text=r?n:o,e.value===o&&(i.selected=!0),t.eSelect.appendChild(i)}),this.gridOptionsWrapper.isFullRowEdit()||this.addDestroyableEventListener(this.eSelect,\"change\",function(){return e.stopEditing()}),this.addDestroyableEventListener(this.eSelect,\"keydown\",function(e){(e.keyCode===l.Constants.KEY_UP||e.keyCode===l.Constants.KEY_DOWN)&&e.stopPropagation()}),this.addDestroyableEventListener(this.eSelect,\"mousedown\",function(e){e.stopPropagation()}))},t.prototype.afterGuiAttached=function(){this.focusAfterAttached&&this.eSelect.focus()},t.prototype.focusIn=function(){this.eSelect.focus()},t.prototype.getValue=function(){return this.eSelect.value},t.prototype.isPopup=function(){return!1},r([p.Autowired(\"gridOptionsWrapper\"),s(\"design:type\",u.GridOptionsWrapper)],t.prototype,\"gridOptionsWrapper\",void 0),r([p.Autowired(\"valueFormatterService\"),s(\"design:type\",d.ValueFormatterService)],t.prototype,\"valueFormatterService\",void 0),t}(a.PopupComponent);t.SelectCellEditor=h},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}),r=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},s=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(10),l=o(1),p=o(27),u=o(75),d=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t.prototype.mapRangeFromModel=function(e){return{from:e.filter,to:e.filterTo}},t.prototype.getDefaultDebounceMs=function(){return 500},t.prototype.resetUiToDefaults=function(){e.prototype.resetUiToDefaults.call(this),this.eValueFrom1.value=null,this.eValueFrom2.value=null,this.eValueTo1.value=null,this.eValueTo2.value=null},t.prototype.setConditionIntoUi=function(e,t){var o=t===p.ConditionPosition.One,i=o?this.eValueFrom1:this.eValueFrom2,n=o?this.eValueTo1:this.eValueTo2;i.value=e?\"\"+e.filter:null,n.value=e?\"\"+e.filterTo:null},t.prototype.setValueFromFloatingFilter=function(e){this.eValueFrom1.value=e,this.eValueFrom2.value=null,this.eValueTo1.value=null,this.eValueTo2.value=null},t.prototype.comparator=function(){return function(e,t){return e===t?0:e<t?1:e>t?-1:void 0}},t.prototype.setParams=function(t){e.prototype.setParams.call(this,t),this.addValueChangedListeners()},t.prototype.addValueChangedListeners=function(){var e=this,t=function(){return e.onUiChanged()};this.addDestroyableEventListener(this.eValueFrom1,\"input\",t),this.addDestroyableEventListener(this.eValueFrom2,\"input\",t),this.addDestroyableEventListener(this.eValueTo1,\"input\",t),this.addDestroyableEventListener(this.eValueTo2,\"input\",t)},t.prototype.afterGuiAttached=function(){this.eValueFrom1.focus()},t.prototype.getDefaultFilterOptions=function(){return t.DEFAULT_FILTER_OPTIONS},t.prototype.createValueTemplate=function(e){var t=e===p.ConditionPosition.One?\"1\":\"2\",o=this.translate.bind(this);return'<div class=\"ag-filter-body\" ref=\"eCondition'+t+'Body\" role=\"presentation\">\\n            <div class=\"ag-input-wrapper\" role=\"presentation\">\\n                <input class=\"ag-filter-filter\" ref=\"eValueFrom'+t+'\" type=\"text\" placeholder=\"'+o(\"filterOoo\")+'\"/>\\n            </div>\\n             <div class=\"ag-input-wrapper ag-filter-number-to\" ref=\"ePanel'+t+'\" role=\"presentation\">\\n                <input class=\"ag-filter-filter\" ref=\"eValueTo'+t+'\" type=\"text\" placeholder=\"'+o(\"filterOoo\")+'\"/>\\n            </div>\\n        </div>'},t.prototype.isConditionUiComplete=function(e){var t=e===p.ConditionPosition.One,o=t?this.getCondition1Type():this.getCondition2Type(),i=t?this.eValueFrom1:this.eValueFrom2,n=t?this.eValueTo1:this.eValueTo2,r=this.stringToFloat(i.value),s=this.stringToFloat(n.value);return o!==p.SimpleFilter.EMPTY&&(!!this.doesFilterHaveHiddenInput(o)||(o===p.SimpleFilter.IN_RANGE?null!=r&&null!=s:null!=r))},t.prototype.areSimpleModelsEqual=function(e,t){return e.filter===t.filter&&e.filterTo===t.filterTo&&e.type===t.type},t.prototype.getFilterType=function(){return t.FILTER_TYPE},t.prototype.stringToFloat=function(e){var t=l._.makeNull(e);return t&&\"\"===t.trim()&&(t=null),null!=t?parseFloat(t):null},t.prototype.createCondition=function(e){var o=e===p.ConditionPosition.One,i=o?this.getCondition1Type():this.getCondition2Type(),n=o?this.eValueFrom1:this.eValueFrom2,r=this.stringToFloat(n.value),s=o?this.eValueTo1:this.eValueTo2,a=this.stringToFloat(s.value),l={filterType:t.FILTER_TYPE,type:i};return this.doesFilterHaveHiddenInput(i)||(l.filter=r,l.filterTo=a),l},t.prototype.updateUiVisibility=function(){e.prototype.updateUiVisibility.call(this);var t=this.showValueFrom(this.getCondition1Type());l._.setDisplayed(this.eValueFrom1,t);var o=this.showValueTo(this.getCondition1Type());l._.setDisplayed(this.eValueTo1,o);var i=this.showValueFrom(this.getCondition2Type());l._.setDisplayed(this.eValueFrom2,i);var n=this.showValueTo(this.getCondition2Type());l._.setDisplayed(this.eValueTo2,n)},t.FILTER_TYPE=\"number\",t.DEFAULT_FILTER_OPTIONS=[u.ScalerFilter.EQUALS,u.ScalerFilter.NOT_EQUAL,u.ScalerFilter.LESS_THAN,u.ScalerFilter.LESS_THAN_OR_EQUAL,u.ScalerFilter.GREATER_THAN,u.ScalerFilter.GREATER_THAN_OR_EQUAL,u.ScalerFilter.IN_RANGE],r([a.RefSelector(\"eValueFrom1\"),s(\"design:type\",HTMLInputElement)],t.prototype,\"eValueFrom1\",void 0),r([a.RefSelector(\"eValueFrom2\"),s(\"design:type\",HTMLInputElement)],t.prototype,\"eValueFrom2\",void 0),r([a.RefSelector(\"eValueTo1\"),s(\"design:type\",HTMLInputElement)],t.prototype,\"eValueTo1\",void 0),r([a.RefSelector(\"eValueTo2\"),s(\"design:type\",HTMLInputElement)],t.prototype,\"eValueTo2\",void 0),t}(u.ScalerFilter);t.NumberFilter=d},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}),r=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},s=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(10),l=o(1),p=o(27),u=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t.prototype.getDefaultDebounceMs=function(){return 500},t.prototype.getValue=function(e){var t=e.value;return(t=l._.makeNull(t))&&\"\"===t.trim()&&(t=null),t},t.prototype.addValueChangedListeners=function(){var e=this,t=function(){return e.onUiChanged()};this.addDestroyableEventListener(this.eValue1,\"input\",t),this.addDestroyableEventListener(this.eValue2,\"input\",t)},t.prototype.setParams=function(o){e.prototype.setParams.call(this,o),this.textFilterParams=o,this.comparator=this.textFilterParams.textCustomComparator?this.textFilterParams.textCustomComparator:t.DEFAULT_COMPARATOR,this.formatter=this.textFilterParams.textFormatter?this.textFilterParams.textFormatter:1==this.textFilterParams.caseSensitive?t.DEFAULT_FORMATTER:t.DEFAULT_LOWERCASE_FORMATTER,this.addValueChangedListeners()},t.prototype.setConditionIntoUi=function(e,t){(t===p.ConditionPosition.One?this.eValue1:this.eValue2).value=e?e.filter:null},t.prototype.createCondition=function(e){var o=e===p.ConditionPosition.One,i=o?this.getCondition1Type():this.getCondition2Type(),n=o?this.eValue1:this.eValue2,r=this.getValue(n),s={filterType:t.FILTER_TYPE,type:i};return this.doesFilterHaveHiddenInput(i)||(s.filter=r),s},t.prototype.getFilterType=function(){return t.FILTER_TYPE},t.prototype.areSimpleModelsEqual=function(e,t){return e.filter===t.filter&&e.type===t.type},t.prototype.resetUiToDefaults=function(){e.prototype.resetUiToDefaults.call(this),this.eValue1.value=null,this.eValue2.value=null},t.prototype.setValueFromFloatingFilter=function(e){this.eValue1.value=e,this.eValue2.value=null},t.prototype.getDefaultFilterOptions=function(){return t.DEFAULT_FILTER_OPTIONS},t.prototype.createValueTemplate=function(e){var t=e===p.ConditionPosition.One?\"1\":\"2\";return'<div class=\"ag-filter-body\" ref=\"eCondition'+t+'Body\" role=\"presentation\">\\n            <div class=\"ag-input-wrapper\" ref=\"eInputWrapper'+t+'\" role=\"presentation\">\\n                <input class=\"ag-filter-filter\" ref=\"eValue'+t+'\" type=\"text\" placeholder=\"'+this.gridOptionsWrapper.getLocaleTextFunc()(\"filterOoo\",\"Filter...\")+'\"/>\\n            </div>\\n        </div>'},t.prototype.updateUiVisibility=function(){e.prototype.updateUiVisibility.call(this);var t=this.showValueFrom(this.getCondition1Type());l._.setDisplayed(this.eInputWrapper1,t);var o=this.showValueFrom(this.getCondition2Type());l._.setDisplayed(this.eInputWrapper2,o)},t.prototype.afterGuiAttached=function(){this.eValue1.focus()},t.prototype.isConditionUiComplete=function(e){var t=e===p.ConditionPosition.One,o=t?this.getCondition1Type():this.getCondition2Type(),i=t?this.eValue1:this.eValue2;if(o===p.SimpleFilter.EMPTY)return!1;var n=this.getValue(i);return!!this.doesFilterHaveHiddenInput(o)||null!=n},t.prototype.individualConditionPasses=function(e,t){var o=t.filter,i=t.type,n=this.textFilterParams.valueGetter(e.node),r=this.formatter(n),s=this.optionsFactory.getCustomOption(i);if(s&&(null!=o||s.hideFilterInput))return s.test(o,r);if(null==n)return i===p.SimpleFilter.NOT_EQUAL||i===p.SimpleFilter.NOT_CONTAINS;var a=this.formatter(o);return this.comparator(i,r,a)},t.FILTER_TYPE=\"text\",t.DEFAULT_FILTER_OPTIONS=[p.SimpleFilter.CONTAINS,p.SimpleFilter.NOT_CONTAINS,p.SimpleFilter.EQUALS,p.SimpleFilter.NOT_EQUAL,p.SimpleFilter.STARTS_WITH,p.SimpleFilter.ENDS_WITH],t.DEFAULT_FORMATTER=function(e){return e},t.DEFAULT_LOWERCASE_FORMATTER=function(e){return null==e?null:e.toString().toLowerCase()},t.DEFAULT_COMPARATOR=function(e,o,i){switch(e){case t.CONTAINS:return o.indexOf(i)>=0;case t.NOT_CONTAINS:return-1===o.indexOf(i);case t.EQUALS:return o===i;case t.NOT_EQUAL:return o!=i;case t.STARTS_WITH:return 0===o.indexOf(i);case t.ENDS_WITH:var n=o.lastIndexOf(i);return n>=0&&n===o.length-i.length;default:return console.warn(\"invalid filter type \"+e),!1}},r([a.RefSelector(\"eValue1\"),s(\"design:type\",HTMLInputElement)],t.prototype,\"eValue1\",void 0),r([a.RefSelector(\"eValue2\"),s(\"design:type\",HTMLInputElement)],t.prototype,\"eValue2\",void 0),r([a.RefSelector(\"eInputWrapper1\"),s(\"design:type\",HTMLElement)],t.prototype,\"eInputWrapper1\",void 0),r([a.RefSelector(\"eInputWrapper2\"),s(\"design:type\",HTMLElement)],t.prototype,\"eInputWrapper2\",void 0),t}(p.SimpleFilter);t.TextFilter=u},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(0),s=o(82),a=o(1),l=function(){function e(){}return e.prototype.adaptFunction=function(e,t,o,i){if(null==t)return{component:null,componentFromFramework:o,source:i,paramsFromSelector:null};var n=this.componentMetadataProvider.retrieve(e);return n&&n.functionAdapter?{componentFromFramework:o,component:n.functionAdapter(t),source:i,paramsFromSelector:null}:null},e.prototype.adaptCellRendererFunction=function(e){return function(){function t(){}return t.prototype.refresh=function(e){return!1},t.prototype.getGui=function(){var t=e(this.params),o=typeof t;return\"string\"===o||\"number\"===o||\"boolean\"===o?a._.loadTemplate(\"<span>\"+t+\"</span>\"):t},t.prototype.init=function(e){this.params=e},t}()},e.prototype.doesImplementIComponent=function(e){return!!e&&(e.prototype&&\"getGui\"in e.prototype)},i([r.Autowired(\"componentMetadataProvider\"),n(\"design:type\",s.ComponentMetadataProvider)],e.prototype,\"componentMetadataProvider\",void 0),e=i([r.Bean(\"agComponentUtils\")],e)}();t.AgComponentUtils=l},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(0),s=o(81),a=function(){function e(){}return e.prototype.postConstruct=function(){this.componentMetaData={dateComponent:{mandatoryMethodList:[\"getDate\",\"setDate\"],optionalMethodList:[\"afterGuiAttached\"]},detailCellRenderer:{mandatoryMethodList:[],optionalMethodList:[\"refresh\"]},headerComponent:{mandatoryMethodList:[],optionalMethodList:[]},headerGroupComponent:{mandatoryMethodList:[],optionalMethodList:[]},loadingCellRenderer:{mandatoryMethodList:[],optionalMethodList:[]},loadingOverlayComponent:{mandatoryMethodList:[],optionalMethodList:[]},noRowsOverlayComponent:{mandatoryMethodList:[],optionalMethodList:[]},floatingFilterComponent:{mandatoryMethodList:[\"onParentModelChanged\"],optionalMethodList:[\"afterGuiAttached\"]},floatingFilterWrapperComponent:{mandatoryMethodList:[],optionalMethodList:[]},cellRenderer:{mandatoryMethodList:[],optionalMethodList:[\"refresh\",\"afterGuiAttached\"],functionAdapter:this.agComponentUtils.adaptCellRendererFunction.bind(this.agComponentUtils)},cellEditor:{mandatoryMethodList:[\"getValue\"],optionalMethodList:[\"isPopup\",\"isCancelBeforeStart\",\"isCancelAfterEnd\",\"focusIn\",\"focusOut\",\"afterGuiAttached\"]},innerRenderer:{mandatoryMethodList:[],optionalMethodList:[\"afterGuiAttached\"],functionAdapter:this.agComponentUtils.adaptCellRendererFunction.bind(this.agComponentUtils)},fullWidthCellRenderer:{mandatoryMethodList:[],optionalMethodList:[\"refresh\",\"afterGuiAttached\"],functionAdapter:this.agComponentUtils.adaptCellRendererFunction.bind(this.agComponentUtils)},pinnedRowCellRenderer:{mandatoryMethodList:[],optionalMethodList:[\"refresh\",\"afterGuiAttached\"],functionAdapter:this.agComponentUtils.adaptCellRendererFunction.bind(this.agComponentUtils)},groupRowInnerRenderer:{mandatoryMethodList:[],optionalMethodList:[\"afterGuiAttached\"],functionAdapter:this.agComponentUtils.adaptCellRendererFunction.bind(this.agComponentUtils)},groupRowRenderer:{mandatoryMethodList:[],optionalMethodList:[\"afterGuiAttached\"],functionAdapter:this.agComponentUtils.adaptCellRendererFunction.bind(this.agComponentUtils)},filter:{mandatoryMethodList:[\"isFilterActive\",\"doesFilterPass\",\"getModel\",\"setModel\"],optionalMethodList:[\"afterGuiAttached\",\"onNewRowsLoaded\",\"getModelAsString\",\"onFloatingFilterChanged\"]},filterComponent:{mandatoryMethodList:[\"isFilterActive\",\"doesFilterPass\",\"getModel\",\"setModel\"],optionalMethodList:[\"afterGuiAttached\",\"onNewRowsLoaded\",\"getModelAsString\",\"onFloatingFilterChanged\"]},statusPanel:{mandatoryMethodList:[],optionalMethodList:[\"afterGuiAttached\"]},toolPanel:{mandatoryMethodList:[],optionalMethodList:[\"refresh\",\"afterGuiAttached\"]},tooltipComponent:{mandatoryMethodList:[],optionalMethodList:[]}}},e.prototype.retrieve=function(e){return this.componentMetaData[e]},i([r.Autowired(\"agComponentUtils\"),n(\"design:type\",s.AgComponentUtils)],e.prototype,\"agComponentUtils\",void 0),i([r.PostConstruct,n(\"design:type\",Function),n(\"design:paramtypes\",[]),n(\"design:returntype\",void 0)],e.prototype,\"postConstruct\",null),e=i([r.Bean(\"componentMetadataProvider\")],e)}();t.ComponentMetadataProvider=a},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(0),s=o(21),a=function(){function e(){}return e.prototype.processAllCellClasses=function(e,t,o,i){this.processClassRules(e.cellClassRules,t,o,i),this.processStaticCellClasses(e,t,o)},e.prototype.processClassRules=function(e,t,o,i){if(\"object\"==typeof e&&null!==e)for(var n=Object.keys(e),r=0;r<n.length;r++){var s=n[r],a=e[s],l=void 0;\"string\"==typeof a?l=this.expressionService.evaluate(a,t):\"function\"==typeof a&&(l=a(t)),l?o(s):i&&i(s)}},e.prototype.processStaticCellClasses=function(e,t,o){if(e.cellClass){var i=void 0;if(\"function\"==typeof e.cellClass)i=(0,e.cellClass)(t);else i=e.cellClass;\"string\"==typeof i?o(i):Array.isArray(i)&&i.forEach(function(e){o(e)})}},i([r.Autowired(\"expressionService\"),n(\"design:type\",s.ExpressionService)],e.prototype,\"expressionService\",void 0),e=i([r.Bean(\"stylingService\")],e)}();t.StylingService=a},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(0),s=o(26),a=o(16),l=o(2),p=o(9),u=o(8),d=o(1),c=function(){function e(){this.DEFAULT_HIDE_TOOLTIP_TIMEOUT=1e4,this.MOUSEOUT_HIDE_TOOLTIP_TIMEOUT=1e3,this.MOUSEOVER_SHOW_TOOLTIP_TIMEOUT=2e3,this.HIDE_SHOW_ONLY=!0,this.showTimeoutId=0,this.hideTimeoutId=0,this.registeredComponents={}}return e.prototype.registerTooltip=function(e){var t=this,o=e.getGui(),i=e.getCompId();this.registeredComponents[i]={tooltipComp:void 0,destroyFunc:void 0,eventDestroyFuncs:[e.addDestroyableEventListener(o,\"mouseover\",function(o){return t.processMouseOver(o,e)}),e.addDestroyableEventListener(o,\"mousemove\",function(e){return t.processMouseMove(e)}),e.addDestroyableEventListener(o,\"mousedown\",this.hideTooltip.bind(this)),e.addDestroyableEventListener(o,\"mouseout\",this.processMouseOut.bind(this))]},e.addDestroyFunc(function(){return t.unregisterTooltip(e)})},e.prototype.unregisterTooltip=function(e){var t=e.getCompId(),o=this.registeredComponents[t];this.activeComponent===e&&this.hideTooltip(),e.isAlive()&&o&&o.eventDestroyFuncs.length&&o.eventDestroyFuncs.forEach(function(e){return e()}),delete this.registeredComponents[t]},e.prototype.processMouseOver=function(e,t){var o=this.MOUSEOVER_SHOW_TOOLTIP_TIMEOUT;if(this.activeComponent){if(this.lastHoveredComponent===this.activeComponent)return;o=200}else if(this.showTimeoutId&&this.lastHoveredComponent===t)return;this.clearTimers(this.HIDE_SHOW_ONLY),this.lastHoveredComponent!==t&&(this.lastHoveredComponent=t,this.lastMouseEvent=e,this.showTimeoutId=window.setTimeout(this.showTooltip.bind(this),o,e))},e.prototype.processMouseOut=function(e){var t=this.activeComponent,o=e.relatedTarget;if(t){if(!t.getGui().contains(o)){var i=this.registeredComponents[t.getCompId()];d._.addCssClass(i.tooltipComp.getGui(),\"ag-tooltip-hiding\"),this.lastHoveredComponent=void 0,this.clearTimers(),this.hideTimeoutId=window.setTimeout(this.hideTooltip.bind(this),this.MOUSEOUT_HIDE_TOOLTIP_TIMEOUT)}}else{if(this.lastHoveredComponent){var n=this.lastHoveredComponent.getGui().contains(o);if(this.showTimeoutId&&n)return;n||(this.lastHoveredComponent=void 0)}this.clearTimers()}},e.prototype.processMouseMove=function(e){this.lastMouseEvent=e},e.prototype.showTooltip=function(e){var t=this.lastHoveredComponent,o=t,i=this.registeredComponents[t.getCompId()];this.hideTooltip();var n={api:this.gridApi,columnApi:this.columnApi,colDef:t.getComponentHolder(),column:o.getColumn&&o.getColumn(),context:this.gridOptionsWrapper.getContext(),rowIndex:o.getCellPosition&&o.getCellPosition().rowIndex,value:t.getTooltipText()};this.createTooltipComponent(n,i,e)},e.prototype.createTooltipComponent=function(e,t,o){var i=this;this.userComponentFactory.newTooltipComponent(e).then(function(e){if(t){t.tooltipComp=e;var o=e.getGui();d._.containsClass(o,\"ag-tooltip\")||d._.addCssClass(o,\"ag-tooltip-custom\");var n=i.popupService.addPopup(!1,o,!1);t.destroyFunc=function(){n(),e.destroy&&e.destroy()},i.popupService.positionPopupUnderMouseEvent({type:\"tooltip\",mouseEvent:i.lastMouseEvent,ePopup:o,nudgeY:18}),i.activeComponent=i.lastHoveredComponent,i.hideTimeoutId=window.setTimeout(i.hideTooltip.bind(i),i.DEFAULT_HIDE_TOOLTIP_TIMEOUT)}})},e.prototype.hideTooltip=function(){var e=this.activeComponent;if(this.clearTimers(),e){var t=e.getCompId(),o=this.registeredComponents[t];this.activeComponent=void 0,o&&(o.destroyFunc&&o.destroyFunc(),this.clearRegisteredComponent(o))}},e.prototype.clearRegisteredComponent=function(e){delete e.destroyFunc,delete e.tooltipComp},e.prototype.clearTimers=function(e){void 0===e&&(e=!1),this.hideTimeoutId&&!e&&(window.clearTimeout(this.hideTimeoutId),this.hideTimeoutId=0),this.showTimeoutId&&(window.clearTimeout(this.showTimeoutId),this.showTimeoutId=0)},i([r.Autowired(\"popupService\"),n(\"design:type\",s.PopupService)],e.prototype,\"popupService\",void 0),i([r.Autowired(\"userComponentFactory\"),n(\"design:type\",a.UserComponentFactory)],e.prototype,\"userComponentFactory\",void 0),i([r.Autowired(\"columnApi\"),n(\"design:type\",p.ColumnApi)],e.prototype,\"columnApi\",void 0),i([r.Autowired(\"gridApi\"),n(\"design:type\",u.GridApi)],e.prototype,\"gridApi\",void 0),i([r.Autowired(\"gridOptionsWrapper\"),n(\"design:type\",l.GridOptionsWrapper)],e.prototype,\"gridOptionsWrapper\",void 0),e=i([r.Bean(\"tooltipManager\")],e)}();t.TooltipManager=c},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s};Object.defineProperty(t,\"__esModule\",{value:!0});var n=o(0),r=function(){function e(){}return e.prototype.createId=function(e){var t=e.rowIndex,o=e.rowPinned;return t+\".\"+(null==o?\"null\":o)+\".\"+e.column.getId()},e.prototype.equals=function(e,t){var o=e.column===t.column,i=e.rowPinned===t.rowPinned,n=e.rowIndex===t.rowIndex;return o&&i&&n},e=i([n.Bean(\"cellPositionUtils\")],e)}();t.CellPositionUtils=r},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */Object.defineProperty(t,\"__esModule\",{value:!0});var i=o(1),n=function(){function e(){}return e.addHeaderClassesFromColDef=function(e,t,o,n,r){i._.missing(e)||this.addColumnClassesFromCollDef(e.headerClass,e,t,o,n,r)},e.addToolPanelClassesFromColDef=function(e,t,o,n,r){i._.missing(e)||this.addColumnClassesFromCollDef(e.toolPanelClass,e,t,o,n,r)},e.addColumnClassesFromCollDef=function(e,t,o,n,r,s){if(!i._.missing(e)){var a;if(\"function\"==typeof e)a=e({colDef:t,column:r,columnGroup:s,context:n.getContext(),api:n.getApi()});else a=e;\"string\"==typeof a?i._.addCssClass(o,a):Array.isArray(a)&&a.forEach(function(e){i._.addCssClass(o,e)})}},e}();t.CssClassApplier=n},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}),r=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},s=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(7),l=o(0),p=o(1),u=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.labelSeparator=\"\",t.labelAlignment=\"left\",t.config={},t.label=\"\",t}return n(t,e),t.prototype.postConstruct=function(){p._.addCssClass(this.getGui(),\"ag-labeled\");var e=this.config,t=e.labelSeparator,o=e.label,i=e.labelWidth,n=e.labelAlignment;null!=t&&this.setLabelSeparator(t),null!=o&&this.setLabel(o),null!=i&&this.setLabelWidth(i),this.setLabelAlignment(n||this.labelAlignment),this.refreshLabel()},t.prototype.refreshLabel=function(){this.eLabel.innerText=this.label+this.labelSeparator,p._.addOrRemoveCssClass(this.eLabel,\"ag-hidden\",\"\"===this.label)},t.prototype.setLabelSeparator=function(e){return this.labelSeparator===e?this:(this.labelSeparator=e,null!=this.label&&this.refreshLabel(),this)},t.prototype.setLabel=function(e){return this.label===e?this:(this.label=e,this.refreshLabel(),this)},t.prototype.setLabelAlignment=function(e){var t=this.getGui();return p._.addOrRemoveCssClass(t,\"ag-label-align-left\",\"left\"===e),p._.addOrRemoveCssClass(t,\"ag-label-align-right\",\"right\"===e),p._.addOrRemoveCssClass(t,\"ag-label-align-top\",\"top\"===e),this},t.prototype.setLabelWidth=function(e){return null==this.label?this:(p._.setElementWidth(this.eLabel,e),this)},r([l.PostConstruct,s(\"design:type\",Function),s(\"design:paramtypes\",[]),s(\"design:returntype\",void 0)],t.prototype,\"postConstruct\",null),t}(a.Component);t.AgAbstractLabel=u},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}),r=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},s=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(13),l=o(0),p=o(46),u=function(e){function t(t,o){var i=e.call(this)||this;return i.columns=t,i.element=o,i}return n(t,e),t.prototype.postConstruct=function(){this.addMouseHoverListeners()},t.prototype.addMouseHoverListeners=function(){this.addDestroyableEventListener(this.element,\"mouseout\",this.onMouseOut.bind(this)),this.addDestroyableEventListener(this.element,\"mouseover\",this.onMouseOver.bind(this))},t.prototype.onMouseOut=function(){this.columnHoverService.clearMouseOver()},t.prototype.onMouseOver=function(){this.columnHoverService.setMouseOver(this.columns)},r([l.Autowired(\"columnHoverService\"),s(\"design:type\",p.ColumnHoverService)],t.prototype,\"columnHoverService\",void 0),r([l.PostConstruct,s(\"design:type\",Function),s(\"design:paramtypes\",[]),s(\"design:returntype\",void 0)],t.prototype,\"postConstruct\",null),t}(a.BeanStub);t.HoverFeature=u},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */Object.defineProperty(t,\"__esModule\",{value:!0});var i=function(){function e(){this.existingIds={}}return e.prototype.getInstanceIdForKey=function(e){var t,o=this.existingIds[e];return t=\"number\"!=typeof o?0:o+1,this.existingIds[e]=t,t},e}();t.GroupInstanceIdCreator=i},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s};Object.defineProperty(t,\"__esModule\",{value:!0});var n=o(0),r=function(){function e(){}return e.prototype.download=function(e,t){if(window.navigator.msSaveOrOpenBlob)window.navigator.msSaveOrOpenBlob(t,e);else{var o=document.createElement(\"a\"),i=window.URL.createObjectURL(t);o.setAttribute(\"href\",i),o.setAttribute(\"download\",e),o.style.display=\"none\",document.body.appendChild(o),o.dispatchEvent(new MouseEvent(\"click\",{bubbles:!1,cancelable:!0,view:window})),document.body.removeChild(o),window.setTimeout(function(){window.URL.revokeObjectURL(i)},0)}},e=i([n.Bean(\"downloader\")],e)}();t.Downloader=r},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(0),s=o(31),a=o(41),l=o(4),p=o(1),u=function(){function e(){}return e.prototype.registerGridComp=function(e){this.gridPanel=e},e.prototype.getPreferredHeightForRow=function(e){var t=this;this.eDummyContainer||(this.eDummyContainer=document.createElement(\"div\"),p._.addCssClass(this.eDummyContainer,\"ag-row ag-row-no-focus\"));var o=this.gridPanel.getCenterContainer();o.appendChild(this.eDummyContainer);var i=[];this.columnController.getAllAutoRowHeightCols().filter(function(e){return e.isVisible()}).forEach(function(o){var n=new a.CellComp(t.$scope,t.beans,o,e,null,!0,!1);n.setParentRow(t.eDummyContainer),i.push(n)});var n=i.map(function(e){return e.getCreateTemplate()}).join(\" \");this.eDummyContainer.innerHTML=n,i.forEach(function(e){return e.afterAttached()});for(var r=0,s=0;s<this.eDummyContainer.children.length;s++){var l=this.eDummyContainer.children[s];l.offsetHeight>r&&(r=l.offsetHeight)}return o.removeChild(this.eDummyContainer),i.forEach(function(e){e.detach(),e.destroy()}),p._.clearElement(this.eDummyContainer),r},i([r.Autowired(\"beans\"),n(\"design:type\",s.Beans)],e.prototype,\"beans\",void 0),i([r.Autowired(\"$scope\"),n(\"design:type\",Object)],e.prototype,\"$scope\",void 0),i([r.Autowired(\"columnController\"),n(\"design:type\",l.ColumnController)],e.prototype,\"columnController\",void 0),e=i([r.Bean(\"autoHeightCalculator\")],e)}();t.AutoHeightCalculator=u},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */Object.defineProperty(t,\"__esModule\",{value:!0});var i=o(2),n=o(19),r=o(9),s=o(4),a=o(17),l=o(93),p=o(14),u=o(20),d=o(3),c=o(94),h=o(8),f=o(39),g=o(50),y=o(21),v=o(70),m=o(26),C=o(12),E=o(33),w=o(40),R=o(57),_=o(0),O=o(65),S=o(125),b=o(126),P=o(15),A=o(30),D=o(23),T=o(22),F=o(45),N=o(69),L=o(127),I=o(129),M=o(131),G=o(5),x=o(132),W=o(134),H=o(53),V=o(44),B=o(38),k=o(97),j=o(136),U=o(48),z=o(90),Y=o(137),K=o(49),q=o(83),Q=o(46),X=o(52),$=o(130),J=o(128),Z=o(112),ee=o(25),te=o(122),oe=o(113),ie=o(6),ne=o(35),re=o(174),se=o(59),ae=o(24),le=o(16),pe=o(72),ue=o(81),de=o(82),ce=o(31),he=o(42),fe=o(37),ge=o(123),ye=o(55),ve=o(95),me=o(91),Ce=o(175),Ee=o(60),we=o(138),Re=o(84),_e=o(124),Oe=o(139),Se=o(62),be=o(98),Pe=o(99),Ae=o(140),De=o(141),Te=o(1),Fe=o(142),Ne=o(63),Le=o(100),Ie=o(143),Me=o(144),Ge=o(145),xe=o(110),We=o(56),He=o(85),Ve=function(){function e(t,o,G){t||console.error(\"ag-Grid: no div element provided to the grid\"),o||console.error(\"ag-Grid: no gridOptions provided to the grid\"),this.gridOptions=o;var x=this.getRowModelClass(o),W=!Te._.missingOrEmpty(e.enterpriseBeans),ie=this.extractModuleEntity(e.modulesToInclude,function(e){return e.beans?e.beans:[]}),Ve=this.extractModuleEntity(e.modulesToInclude,function(e){return e.enterpriseBeans?e.enterpriseBeans:[]}),Be=this.extractModuleEntity(e.modulesToInclude,function(e){return e.enterpriseComponents?e.enterpriseComponents:[]}),ke=this.extractModuleEntity(e.modulesToInclude,function(e){return e.enterpriseDefaultComponents?e.enterpriseDefaultComponents:[]}),je=G?G.frameworkOverrides:null;Te._.missing(je)&&(je=new j.VanillaFrameworkOverrides);var Ue=[];e.enterpriseBeans&&(Ue=Ue.concat(e.enterpriseBeans).concat(Ve)),e.frameworkBeans&&(Ue=Ue.concat(e.frameworkBeans));var ze={enterprise:W,gridOptions:o,eGridDiv:t,$scope:G?G.$scope:null,$compile:G?G.$compile:null,quickFilterOnScope:G?G.quickFilterOnScope:null,globalEventListener:G?G.globalEventListener:null,frameworkOverrides:je};G&&G.seedBeanInstances&&Te._.assign(ze,G.seedBeanInstances);var Ye=[{componentName:\"AgCheckbox\",theClass:B.AgCheckbox},{componentName:\"AgRadioButton\",theClass:k.AgRadioButton},{componentName:\"AgToggleButton\",theClass:Ge.AgToggleButton},{componentName:\"AgInputTextField\",theClass:Pe.AgInputTextField},{componentName:\"AgInputTextArea\",theClass:Ae.AgInputTextArea},{componentName:\"AgInputNumberField\",theClass:Ne.AgInputNumberField},{componentName:\"AgInputRange\",theClass:Le.AgInputRange},{componentName:\"AgSelect\",theClass:Ie.AgSelect},{componentName:\"AgSlider\",theClass:De.AgSlider},{componentName:\"AgAngleSelect\",theClass:Me.AgAngleSelect},{componentName:\"AgColorPicker\",theClass:Fe.AgColorPicker},{componentName:\"AgGridComp\",theClass:c.GridPanel},{componentName:\"AgHeaderRoot\",theClass:l.HeaderRootComp},{componentName:\"AgPagination\",theClass:Ce.PaginationComp},{componentName:\"AgOverlayWrapper\",theClass:_e.OverlayWrapperComponent},{componentName:\"AgGroupComponent\",theClass:Oe.AgGroupComponent},{componentName:\"AgPanel\",theClass:be.AgPanel},{componentName:\"AgDialog\",theClass:Se.AgDialog}];e.enterpriseComponents&&(Ye=Ye.concat(e.enterpriseComponents).concat(Be));var Ke={overrideBeans:Ue,seed:ze,beans:[x,ce.Beans,We.RowPositionUtils,He.CellPositionUtils,te.PaginationAutoPageSizeService,h.GridApi,pe.UserComponentRegistry,ue.AgComponentUtils,de.ComponentMetadataProvider,Ee.ResizeObserverService,pe.UserComponentRegistry,le.UserComponentFactory,ye.MaxDivHeightScaler,me.AutoHeightCalculator,H.CellRendererFactory,R.HorizontalResizeService,ae.PinnedRowModel,A.DragService,g.DisplayedGroupCreator,d.EventService,i.GridOptionsWrapper,m.PopupService,n.SelectionController,p.FilterManager,s.ColumnController,ee.PaginationProxy,a.RowRenderer,y.ExpressionService,f.ColumnFactory,O.CsvCreator,z.Downloader,Y.XmlFactory,K.GridSerializer,v.TemplateService,se.AlignedGridsService,ge.NavigationService,m.PopupService,ne.ValueCache,u.ValueService,C.LoggerFactory,E.ColumnUtils,w.AutoWidthCalculator,b.StandardMenuFactory,P.DragAndDropService,r.ColumnApi,T.FocusedCellController,F.MouseEventService,he.Environment,N.CellNavigationService,L.FilterStage,I.SortStage,M.FlattenStage,J.FilterService,V.ValueFormatterService,q.StylingService,U.ScrollVisibleService,D.SortController,Q.ColumnHoverService,X.ColumnAnimationService,$.SortService,ve.SelectableService,Z.AutoGroupColService,oe.ImmutableService,re.ChangeDetectionService,fe.AnimationFrameService,Re.TooltipManager,we.ZipContainer,xe.DetailRowCompCache].concat(ie),components:Ye,enterpriseDefaultComponents:e.enterpriseDefaultComponents.concat(ke),registeredModules:e.modulesToInclude.map(function(e){return e.moduleName}),debug:!!o.debug};this.logger=new C.Logger(\"ag-Grid\",function(){return o.debug});var qe=new C.Logger(\"Context\",function(){return Ke.debug});this.context=new _.Context(Ke,qe);var Qe=new S.GridCore;this.context.wireBean(Qe),this.setColumnsAndData(),this.dispatchGridReadyEvent(o),this.logger.log(\"initialised successfully, enterprise = \"+W)}return e.setEnterpriseBeans=function(t,o){e.enterpriseBeans=t,Te._.iterateObject(o,function(t,o){return e.RowModelClasses[t]=o})},e.setEnterpriseComponents=function(t){e.enterpriseComponents=t},e.setFrameworkBeans=function(t){e.frameworkBeans=t},e.setEnterpriseDefaultComponents=function(t){e.enterpriseDefaultComponents=t},e.addModule=function(t){var o;(o=e.modulesToInclude).push.apply(o,t)},e.prototype.extractModuleEntity=function(e,t){return[].concat.apply([],e.map(t))},e.prototype.setColumnsAndData=function(){var e=this.context.getBean(\"gridOptionsWrapper\"),t=this.context.getBean(\"columnController\"),o=this.context.getBean(\"rowModel\"),i=e.getColumnDefs(),n=e.getRowData();Te._.missing(i)&&Te._.missing(n)||(Te._.exists(i)&&t.setColumnDefs(i,\"gridInitializing\"),Te._.exists(n)&&o.getType()===ie.Constants.ROW_MODEL_TYPE_CLIENT_SIDE&&o.setRowData(n))},e.prototype.dispatchGridReadyEvent=function(e){var t=this.context.getBean(\"eventService\"),o={type:G.Events.EVENT_GRID_READY,api:e.api,columnApi:e.columnApi};t.dispatchEvent(o)},e.prototype.getRowModelClass=function(t){var o=t.rowModelType;if(o=\"enterprise\"===o?ie.Constants.ROW_MODEL_TYPE_SERVER_SIDE:o,Te._.exists(o)){var i=e.RowModelClasses[o];if(Te._.exists(i))return i;if(\"normal\"===o)return console.warn(\"ag-Grid: normal rowModel deprecated. Should now be called client side row model instead.\"),W.ClientSideRowModel;console.error(\"ag-Grid: could not find matching row model for rowModelType \"+o),o===ie.Constants.ROW_MODEL_TYPE_VIEWPORT&&console.error(\"ag-Grid: rowModelType viewport is only available in ag-Grid Enterprise\"),o===ie.Constants.ROW_MODEL_TYPE_SERVER_SIDE&&console.error(\"ag-Grid: rowModelType server side is only available in ag-Grid Enterprise\")}return W.ClientSideRowModel},e.prototype.destroy=function(){this.gridOptions.api.destroy()},e.enterpriseBeans=[],e.enterpriseComponents=[],e.enterpriseDefaultComponents=[],e.modulesToInclude=[],e.RowModelClasses={infinite:x.InfiniteRowModel,clientSide:W.ClientSideRowModel},e}();t.Grid=Ve},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}),r=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},s=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(2),l=o(4),p=o(11),u=o(0),d=o(117),c=o(3),h=o(5),f=o(7),g=o(10),y=o(8),v=o(40),m=o(6),C=o(1),E=function(e){function t(){return e.call(this,t.TEMPLATE)||this}return n(t,e),t.prototype.registerGridComp=function(e){this.gridPanel=e,this.childContainers.forEach(function(t){return t.registerGridComp(e)})},t.prototype.postConstruct=function(){var e=this;this.printLayout=this.gridOptionsWrapper.getDomLayout()===m.Constants.DOM_LAYOUT_PRINT,this.gridApi.registerHeaderRootComp(this),this.autoWidthCalculator.registerHeaderRootComp(this);var t=new d.HeaderContainer(this.eHeaderContainer,this.eHeaderViewport,null),o=new d.HeaderContainer(this.ePinnedLeftHeader,null,p.Column.PINNED_LEFT),i=new d.HeaderContainer(this.ePinnedRightHeader,null,p.Column.PINNED_RIGHT);this.childContainers=[t,o,i],this.childContainers.forEach(function(t){return e.getContext().wireBean(t)}),this.addDestroyableEventListener(this.eventService,h.Events.EVENT_COLUMN_VALUE_CHANGED,this.refreshHeader.bind(this)),this.addDestroyableEventListener(this.gridOptionsWrapper,a.GridOptionsWrapper.PROP_DOM_LAYOUT,this.onDomLayoutChanged.bind(this)),this.addDestroyableEventListener(this.eventService,h.Events.EVENT_COLUMN_PIVOT_MODE_CHANGED,this.onPivotModeChanged.bind(this)),this.onPivotModeChanged(),this.addPreventHeaderScroll(),this.columnController.isReady()&&this.refreshHeader()},t.prototype.onDomLayoutChanged=function(){var e=this.gridOptionsWrapper.getDomLayout()===m.Constants.DOM_LAYOUT_PRINT;this.printLayout!==e&&(this.printLayout=e,this.refreshHeader())},t.prototype.setHorizontalScroll=function(e){this.eHeaderContainer.style.transform=\"translateX(\"+e+\"px)\"},t.prototype.forEachHeaderElement=function(e){this.childContainers.forEach(function(t){return t.forEachHeaderElement(e)})},t.prototype.destroy=function(){e.prototype.destroy.call(this),this.childContainers.forEach(function(e){return e.destroy()})},t.prototype.refreshHeader=function(){this.childContainers.forEach(function(e){return e.refresh()})},t.prototype.onPivotModeChanged=function(){var e=this.columnController.isPivotMode();C._.addOrRemoveCssClass(this.getGui(),\"ag-pivot-on\",e),C._.addOrRemoveCssClass(this.getGui(),\"ag-pivot-off\",!e)},t.prototype.setHeight=function(e){var t=e+\"px\";this.getGui().style.height=t,this.getGui().style.minHeight=t},t.prototype.addPreventHeaderScroll=function(){var e=this;this.addDestroyableEventListener(this.eHeaderViewport,\"scroll\",function(){var t=e.eHeaderViewport.scrollLeft;0!==t&&(e.gridPanel.scrollHorizontally(t),e.eHeaderViewport.scrollLeft=0)})},t.prototype.setHeaderContainerWidth=function(e){this.eHeaderContainer.style.width=e+\"px\"},t.prototype.setLeftVisible=function(e){C._.setDisplayed(this.ePinnedLeftHeader,e)},t.prototype.setRightVisible=function(e){C._.setDisplayed(this.ePinnedRightHeader,e)},t.prototype.getHeaderRowCount=function(){return 0===this.childContainers.length?0:this.childContainers[0].getRowComps().length},t.TEMPLATE='<div class=\"ag-header\" role=\"presentation\">\\n            <div class=\"ag-pinned-left-header\" ref=\"ePinnedLeftHeader\" role=\"presentation\"></div>\\n            <div class=\"ag-header-viewport\" ref=\"eHeaderViewport\" role=\"presentation\">\\n                <div class=\"ag-header-container\" ref=\"eHeaderContainer\" role=\"rowgroup\"></div>\\n            </div>\\n            <div class=\"ag-pinned-right-header\" ref=\"ePinnedRightHeader\" role=\"presentation\"></div>\\n        </div>',r([g.RefSelector(\"ePinnedLeftHeader\"),s(\"design:type\",HTMLElement)],t.prototype,\"ePinnedLeftHeader\",void 0),r([g.RefSelector(\"ePinnedRightHeader\"),s(\"design:type\",HTMLElement)],t.prototype,\"ePinnedRightHeader\",void 0),r([g.RefSelector(\"eHeaderContainer\"),s(\"design:type\",HTMLElement)],t.prototype,\"eHeaderContainer\",void 0),r([g.RefSelector(\"eHeaderViewport\"),s(\"design:type\",HTMLElement)],t.prototype,\"eHeaderViewport\",void 0),r([u.Autowired(\"gridOptionsWrapper\"),s(\"design:type\",a.GridOptionsWrapper)],t.prototype,\"gridOptionsWrapper\",void 0),r([u.Autowired(\"columnController\"),s(\"design:type\",l.ColumnController)],t.prototype,\"columnController\",void 0),r([u.Autowired(\"eventService\"),s(\"design:type\",c.EventService)],t.prototype,\"eventService\",void 0),r([u.Autowired(\"gridApi\"),s(\"design:type\",y.GridApi)],t.prototype,\"gridApi\",void 0),r([u.Autowired(\"autoWidthCalculator\"),s(\"design:type\",v.AutoWidthCalculator)],t.prototype,\"autoWidthCalculator\",void 0),r([u.PostConstruct,s(\"design:type\",Function),s(\"design:paramtypes\",[]),s(\"design:returntype\",void 0)],t.prototype,\"postConstruct\",null),t}(f.Component);t.HeaderRootComp=E},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}),r=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},s=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(2),l=o(4),p=o(9),u=o(17),d=o(0),c=o(3),h=o(5),f=o(30),g=o(6),y=o(45),v=o(22),m=o(48),C=o(170),E=o(25),w=o(122),R=o(68),_=o(59),O=o(24),S=o(8),b=o(37),P=o(66),A=o(123),D=o(20),T=o(43),F=o(15),N=o(171),L=o(55),I=o(124),M=o(7),G=o(91),x=o(52),W=o(40),H=o(31),V=o(10),B=o(93),k=o(60),j=o(1),U='<div class=\"ag-root ag-unselectable\" role=\"grid\" unselectable=\"on\">\\n        <ag-header-root ref=\"headerRoot\" unselectable=\"on\"></ag-header-root>\\n        <div class=\"ag-floating-top\" ref=\"eTop\" role=\"presentation\" unselectable=\"on\">\\n            <div class=\"ag-pinned-left-floating-top\" ref=\"eLeftTop\" role=\"presentation\" unselectable=\"on\"></div>\\n            <div class=\"ag-floating-top-viewport\" ref=\"eTopViewport\" role=\"presentation\" unselectable=\"on\">\\n                <div class=\"ag-floating-top-container\" ref=\"eTopContainer\" role=\"presentation\" unselectable=\"on\"></div>\\n            </div>\\n            <div class=\"ag-pinned-right-floating-top\" ref=\"eRightTop\" role=\"presentation\" unselectable=\"on\"></div>\\n            <div class=\"ag-floating-top-full-width-container\" ref=\"eTopFullWidthContainer\" role=\"presentation\" unselectable=\"on\"></div>\\n        </div>\\n        <div class=\"ag-body-viewport\" ref=\"eBodyViewport\" role=\"presentation\" unselectable=\"on\">\\n            <div class=\"ag-pinned-left-cols-container\" ref=\"eLeftContainer\" role=\"presentation\" unselectable=\"on\"></div>\\n            <div class=\"ag-center-cols-clipper\" ref=\"eCenterColsClipper\" role=\"presentation\" unselectable=\"on\">\\n                <div class=\"ag-center-cols-viewport\" ref=\"eCenterViewport\" role=\"presentation\" unselectable=\"on\">\\n                    <div class=\"ag-center-cols-container\" ref=\"eCenterContainer\" role=\"rowgroup\" unselectable=\"on\"></div>\\n                </div>\\n            </div>\\n            <div class=\"ag-pinned-right-cols-container\" ref=\"eRightContainer\" role=\"presentation\" unselectable=\"on\"></div>\\n            <div class=\"ag-full-width-container\" ref=\"eFullWidthContainer\" role=\"presentation\" unselectable=\"on\"></div>\\n        </div>\\n        <div class=\"ag-floating-bottom\" ref=\"eBottom\" role=\"presentation\" unselectable=\"on\">\\n            <div class=\"ag-pinned-left-floating-bottom\" ref=\"eLeftBottom\" role=\"presentation\" unselectable=\"on\"></div>\\n            <div class=\"ag-floating-bottom-viewport\" ref=\"eBottomViewport\" role=\"presentation\" unselectable=\"on\">\\n                <div class=\"ag-floating-bottom-container\" ref=\"eBottomContainer\" role=\"presentation\" unselectable=\"on\"></div>\\n            </div>\\n            <div class=\"ag-pinned-right-floating-bottom\" ref=\"eRightBottom\" role=\"presentation\" unselectable=\"on\"></div>\\n            <div class=\"ag-floating-bottom-full-width-container\" ref=\"eBottomFullWidthContainer\" role=\"presentation\" unselectable=\"on\"></div>\\n        </div>\\n        <div class=\"ag-body-horizontal-scroll\" ref=\"eHorizontalScrollBody\" aria-hidden=\"true\">\\n            <div class=\"ag-horizontal-left-spacer\" ref=\"eHorizontalLeftSpacer\"></div>\\n            <div class=\"ag-body-horizontal-scroll-viewport\" ref=\"eBodyHorizontalScrollViewport\">\\n                <div class=\"ag-body-horizontal-scroll-container\" ref=\"eBodyHorizontalScrollContainer\"></div>\\n            </div>\\n            <div class=\"ag-horizontal-right-spacer\" ref=\"eHorizontalRightSpacer\"></div>\\n        </div>\\n        <ag-overlay-wrapper ref=\"overlayWrapper\"></ag-overlay-wrapper>\\n    </div>',z=function(e){function t(){var t=e.call(this,U)||this;return t.scrollLeft=-1,t.scrollTop=-1,t.nextScrollTop=-1,t.resetLastHorizontalScrollElementDebounce=j._.debounce(t.resetLastHorizontalScrollElement.bind(t),500),t}return n(t,e),t.prototype.getVScrollPosition=function(){return{top:this.eBodyViewport.scrollTop,bottom:this.eBodyViewport.scrollTop+this.eBodyViewport.offsetHeight}},t.prototype.getHScrollPosition=function(){return{left:this.eCenterViewport.scrollLeft,right:this.eCenterViewport.scrollLeft+this.eCenterViewport.offsetWidth}},t.prototype.onRowDataChanged=function(){this.showOrHideOverlay()},t.prototype.showOrHideOverlay=function(){var e=this.paginationProxy.isEmpty(),t=this.gridOptionsWrapper.isSuppressNoRowsOverlay();this[e&&!t?\"showNoRowsOverlay\":\"hideOverlay\"]()},t.prototype.onNewColumnsLoaded=function(){this.columnController.isReady()&&!this.paginationProxy.isEmpty()&&this.hideOverlay()},t.prototype.init=function(){var e=this;this.scrollWidth=this.gridOptionsWrapper.getScrollbarWidth(),this.enableRtl=this.gridOptionsWrapper.isEnableRtl(),this.printLayout=this.gridOptionsWrapper.getDomLayout()===g.Constants.DOM_LAYOUT_PRINT,this.gridOptionsWrapper.addLayoutElement(this.getGui()),this.gridOptionsWrapper.addLayoutElement(this.eBodyViewport),this.suppressScrollOnFloatingRow(),this.setupRowAnimationCssClass(),this.buildRowContainerComponents(),this.addEventListeners(),this.addDragListeners(),this.addScrollListener(),this.gridOptionsWrapper.isRowModelDefault()&&!this.gridOptionsWrapper.getRowData()&&this.showLoadingOverlay(),this.setCellTextSelection(this.gridOptionsWrapper.isEnableCellTextSelect()),this.setPinnedContainerSize(),this.setHeaderAndFloatingHeights(),this.disableBrowserDragging(),this.addMouseListeners(),this.addKeyboardEvents(),this.addBodyViewportListener(),this.addStopEditingWhenGridLosesFocus(),this.mockContextMenuForIPad(),this.addRowDragListener(),this.$scope&&this.addAngularApplyCheck(),this.onDisplayedColumnsWidthChanged(),this.gridApi.registerGridComp(this),this.alignedGridsService.registerGridComp(this),this.headerRootComp.registerGridComp(this),this.navigationService.registerGridComp(this),this.heightScaler.registerGridComp(this),this.autoHeightCalculator.registerGridComp(this),this.columnAnimationService.registerGridComp(this),this.autoWidthCalculator.registerGridComp(this),this.paginationAutoPageSizeService.registerGridComp(this),this.beans.registerGridComp(this),this.rowRenderer.registerGridComp(this),this.animationFrameService.registerGridComp(this),this.rangeController&&this.rangeController.registerGridComp(this),[this.eCenterViewport,this.eBodyViewport].forEach(function(t){var o=e.resizeObserverService.observeResize(t,e.onCenterViewportResized.bind(e));e.addDestroyFunc(function(){return o()})})},t.prototype.onDomLayoutChanged=function(){var e=this.gridOptionsWrapper.getDomLayout()===g.Constants.DOM_LAYOUT_PRINT;this.printLayout!==e&&(this.printLayout=e,this.setWidthsOfContainers(),this.setPinnedContainerSize())},t.prototype.onCenterViewportResized=function(){j._.isVisible(this.eCenterViewport)?this.checkViewportAndScrolls():this.bodyHeight=0},t.prototype.setColumnMovingCss=function(e){this.addOrRemoveCssClass(\"ag-column-moving\",e)},t.prototype.setCellTextSelection=function(e){void 0===e&&(e=!1),[this.eTop,this.eBodyViewport,this.eBottom].forEach(function(t){return j._.addOrRemoveCssClass(t,\"ag-selectable\",e)})},t.prototype.addRowDragListener=function(){var e=new N.RowDragFeature(this.eBodyViewport,this);this.getContext().wireBean(e),this.dragAndDropService.addDropTarget(e)},t.prototype.addStopEditingWhenGridLosesFocus=function(){var e=this;if(this.gridOptionsWrapper.isStopEditingWhenGridLosesFocus()){var t=function(t){for(var o=!1,i=t.relatedTarget;j._.exists(i)&&!o;){var n=!!e.gridOptionsWrapper.getDomData(i,R.PopupEditorWrapper.DOM_KEY_POPUP_EDITOR_WRAPPER),r=e.eBodyViewport===i||e.eBottom===i||e.eTop===i;o=n||r,i=i.parentNode}o||e.rowRenderer.stopEditing()};this.addDestroyableEventListener(this.eBodyViewport,\"focusout\",t),this.addDestroyableEventListener(this.eTop,\"focusout\",t),this.addDestroyableEventListener(this.eBottom,\"focusout\",t)}},t.prototype.addAngularApplyCheck=function(){var e=this,t=!1,o=function(){t||(t=!0,window.setTimeout(function(){t=!1,e.$scope.$apply()},0))};this.addDestroyableEventListener(this.eventService,h.Events.EVENT_DISPLAYED_COLUMNS_CHANGED,o),this.addDestroyableEventListener(this.eventService,h.Events.EVENT_VIRTUAL_COLUMNS_CHANGED,o)},t.prototype.disableBrowserDragging=function(){this.addGuiEventListener(\"dragstart\",function(e){if(e.target instanceof HTMLImageElement)return e.preventDefault(),!1})},t.prototype.addEventListeners=function(){this.addDestroyableEventListener(this.eventService,h.Events.EVENT_DISPLAYED_COLUMNS_CHANGED,this.onDisplayedColumnsChanged.bind(this)),this.addDestroyableEventListener(this.eventService,h.Events.EVENT_DISPLAYED_COLUMNS_WIDTH_CHANGED,this.onDisplayedColumnsWidthChanged.bind(this)),this.addDestroyableEventListener(this.eventService,h.Events.EVENT_PINNED_ROW_DATA_CHANGED,this.setHeaderAndFloatingHeights.bind(this)),this.addDestroyableEventListener(this.eventService,h.Events.EVENT_ROW_DATA_CHANGED,this.onRowDataChanged.bind(this)),this.addDestroyableEventListener(this.eventService,h.Events.EVENT_ROW_DATA_UPDATED,this.onRowDataChanged.bind(this)),this.addDestroyableEventListener(this.eventService,h.Events.EVENT_NEW_COLUMNS_LOADED,this.onNewColumnsLoaded.bind(this)),this.addDestroyableEventListener(this.gridOptionsWrapper,a.GridOptionsWrapper.PROP_HEADER_HEIGHT,this.setHeaderAndFloatingHeights.bind(this)),this.addDestroyableEventListener(this.gridOptionsWrapper,a.GridOptionsWrapper.PROP_PIVOT_HEADER_HEIGHT,this.setHeaderAndFloatingHeights.bind(this)),this.addDestroyableEventListener(this.gridOptionsWrapper,a.GridOptionsWrapper.PROP_GROUP_HEADER_HEIGHT,this.setHeaderAndFloatingHeights.bind(this)),this.addDestroyableEventListener(this.gridOptionsWrapper,a.GridOptionsWrapper.PROP_PIVOT_GROUP_HEADER_HEIGHT,this.setHeaderAndFloatingHeights.bind(this)),this.addDestroyableEventListener(this.gridOptionsWrapper,a.GridOptionsWrapper.PROP_FLOATING_FILTERS_HEIGHT,this.setHeaderAndFloatingHeights.bind(this)),this.addDestroyableEventListener(this.gridOptionsWrapper,a.GridOptionsWrapper.PROP_DOM_LAYOUT,this.onDomLayoutChanged.bind(this))},t.prototype.addDragListeners=function(){var e=this;this.gridOptionsWrapper.isEnableRangeSelection()&&!j._.missing(this.rangeController)&&[this.eLeftContainer,this.eRightContainer,this.eCenterContainer,this.eTop,this.eBottom].forEach(function(t){var o={eElement:t,onDragStart:e.rangeController.onDragStart.bind(e.rangeController),onDragStop:e.rangeController.onDragStop.bind(e.rangeController),onDragging:e.rangeController.onDragging.bind(e.rangeController)};e.dragService.addDragSource(o),e.addDestroyFunc(function(){return e.dragService.removeDragSource(o)})})},t.prototype.addMouseListeners=function(){var e=this;[\"click\",\"mousedown\",\"dblclick\",\"contextmenu\",\"mouseover\",\"mouseout\"].forEach(function(t){var o=e.processMouseEvent.bind(e,t);e.eAllCellContainers.forEach(function(i){return e.addDestroyableEventListener(i,t,o)})})},t.prototype.addKeyboardEvents=function(){var e=this;[\"keydown\",\"keypress\"].forEach(function(t){var o=e.processKeyboardEvent.bind(e,t);e.eAllCellContainers.forEach(function(i){e.addDestroyableEventListener(i,t,o)})})},t.prototype.addBodyViewportListener=function(){var e=this;this.addDestroyableEventListener(this.eBodyViewport,\"contextmenu\",function(t){var o=j._.getTarget(t);o!==e.eBodyViewport&&o!==e.eCenterViewport||(e.onContextMenu(t,null,null,null,null),e.preventDefaultOnContextMenu(t))})},t.prototype.getBodyClientRect=function(){if(this.eBodyViewport)return this.eBodyViewport.getBoundingClientRect()},t.prototype.getRowForEvent=function(e){for(var t=j._.getTarget(e);t;){var o=this.gridOptionsWrapper.getDomData(t,P.RowComp.DOM_DATA_KEY_RENDERED_ROW);if(o)return o;t=t.parentElement}return null},t.prototype.processKeyboardEvent=function(e,t){var o=j._.getCellCompForEvent(this.gridOptionsWrapper,t);if(o){var i=o.getRenderedRow().getRowNode(),n=o.getColumn(),r=o.isEditing();if(!j._.isUserSuppressingKeyboardEvent(this.gridOptionsWrapper,t,i,n,r))switch(e){case\"keydown\":!r&&this.navigationService.handlePageScrollingKey(t)||o.onKeyDown(t),this.doClipboardOperations(t,o);break;case\"keypress\":o.onKeyPress(t)}if(\"keydown\"===e){var s=o.createEvent(t,h.Events.EVENT_CELL_KEY_DOWN);this.beans.eventService.dispatchEvent(s)}if(\"keypress\"===e){var a=o.createEvent(t,h.Events.EVENT_CELL_KEY_PRESS);this.beans.eventService.dispatchEvent(a)}}},t.prototype.doClipboardOperations=function(e,t){if((e.ctrlKey||e.metaKey)&&!t.isEditing()&&this.mouseEventService.isEventFromThisGrid(e))switch(e.which){case g.Constants.KEY_A:return this.onCtrlAndA(e);case g.Constants.KEY_C:return this.onCtrlAndC(e);case g.Constants.KEY_V:return this.onCtrlAndV();case g.Constants.KEY_D:return this.onCtrlAndD(e)}},t.prototype.scrollToTop=function(){this.eBodyViewport.scrollTop=0},t.prototype.processMouseEvent=function(e,t){if(this.mouseEventService.isEventFromThisGrid(t)&&!j._.isStopPropagationForAgGrid(t)){var o=this.getRowForEvent(t),i=this.mouseEventService.getRenderedCellForEvent(t);\"contextmenu\"===e?this.handleContextMenuMouseEvent(t,null,o,i):(i&&i.onMouseEvent(e,t),o&&o.onMouseEvent(e,t)),this.preventDefaultOnContextMenu(t)}},t.prototype.mockContextMenuForIPad=function(){var e=this;j._.isUserAgentIPad()&&this.eAllCellContainers.forEach(function(t){var o=new T.TouchListener(t);e.addDestroyableEventListener(o,T.TouchListener.EVENT_LONG_TAP,function(t){var o=e.getRowForEvent(t.touchEvent),i=e.mouseEventService.getRenderedCellForEvent(t.touchEvent);e.handleContextMenuMouseEvent(null,t.touchEvent,o,i)}),e.addDestroyFunc(function(){return o.destroy()})})},t.prototype.handleContextMenuMouseEvent=function(e,t,o,i){var n=o?o.getRowNode():null,r=i?i.getColumn():null,s=null;if(r){var a=e||t;i.dispatchCellContextMenuEvent(a),s=this.valueService.getValue(r,n)}this.onContextMenu(e,t,n,r,s)},t.prototype.onContextMenu=function(e,t,o,i,n){if((this.gridOptionsWrapper.isAllowContextMenuWithControlKey()||!e||!e.ctrlKey&&!e.metaKey)&&this.contextMenuFactory&&!this.gridOptionsWrapper.isSuppressContextMenu()){var r=e||t.touches[0];this.contextMenuFactory.showMenu(o,i,n,r),(e||t).preventDefault()}},t.prototype.preventDefaultOnContextMenu=function(e){var t=this.gridOptionsWrapper,o=e.which;(t.isPreventDefaultOnContextMenu()||t.isSuppressMiddleClickScrolls()&&2===o)&&e.preventDefault()},t.prototype.onCtrlAndA=function(e){var t=this.columnController,o=this.pinnedRowModel,i=this.paginationProxy,n=this.rangeController,r=g.Constants.PINNED_BOTTOM,s=g.Constants.PINNED_TOP;if(n&&i.isRowsToRender()){var a=[o.isEmpty(s),o.isEmpty(r)],l=a[0]?null:s,p=void 0,u=void 0;a[1]?(p=null,u=this.paginationProxy.getRowCount()-1):(p=r,u=o.getPinnedBottomRowData().length-1);var d=t.getAllDisplayedColumns();if(j._.missingOrEmpty(d))return;n.setCellRange({rowStartIndex:0,rowStartPinned:l,rowEndIndex:u,rowEndPinned:p,columnStart:d[0],columnEnd:j._.last(d)})}e.preventDefault()},t.prototype.onCtrlAndC=function(e){if(this.clipboardService&&!this.gridOptionsWrapper.isEnableCellTextSelection()){var t=this.focusedCellController.getFocusedCell();this.clipboardService.copyToClipboard(),e.preventDefault(),t&&this.focusedCellController.setFocusedCell(t.rowIndex,t.column,t.rowPinned,!0)}},t.prototype.onCtrlAndV=function(){this.enterprise&&!this.gridOptionsWrapper.isSuppressClipboardPaste()&&this.clipboardService.pasteFromClipboard()},t.prototype.onCtrlAndD=function(e){this.enterprise&&(this.clipboardService.copyRangeDown(),e.preventDefault())},t.prototype.ensureIndexVisible=function(e,t){if(!this.printLayout){var o=this.paginationProxy.getRowCount();if(\"number\"!=typeof e||e<0||e>=o)console.warn(\"invalid row index for ensureIndexVisible: \"+e);else{this.paginationProxy.goToPageWithIndex(e);var i,n=this.paginationProxy.getRow(e);do{var r=n.rowTop,s=n.rowHeight,a=this.paginationProxy.getPixelOffset(),l=n.rowTop-a,p=l+n.rowHeight,u=this.getVScrollPosition(),d=this.heightScaler.getOffset(),c=u.top+d,h=u.bottom+d,f=h-c,g=this.heightScaler.getScrollPositionForPixel(l),y=this.heightScaler.getScrollPositionForPixel(p-f),v=Math.min((g+y)/2,l),m=null;\"top\"===t?m=g:\"bottom\"===t?m=y:\"middle\"===t?m=v:c>l?m=g:h<p&&(m=y),null!==m&&(this.eBodyViewport.scrollTop=m,this.rowRenderer.redrawAfterScroll()),i=r!==n.rowTop||s!==n.rowHeight}while(i);this.animationFrameService.flushAllFrames()}}},t.prototype.getCenterWidth=function(){return this.eCenterViewport.clientWidth},t.prototype.isVerticalScrollShowing=function(){var e=this.gridOptionsWrapper.isAlwaysShowVerticalScroll();return j._.addOrRemoveCssClass(this.eBodyViewport,\"ag-force-vertical-scroll\",e),e||j._.isVerticalScrollShowing(this.eBodyViewport)},t.prototype.isHorizontalScrollShowing=function(){return j._.isHorizontalScrollShowing(this.eCenterViewport)},t.prototype.checkViewportAndScrolls=function(){this.updateScrollVisibleService(),this.checkBodyHeight(),this.onHorizontalViewportChanged(),this.setPinnedContainerSize()},t.prototype.updateScrollVisibleService=function(){this.updateScrollVisibleServiceImpl(),setTimeout(this.updateScrollVisibleServiceImpl.bind(this),500)},t.prototype.updateScrollVisibleServiceImpl=function(){var e={horizontalScrollShowing:!1,verticalScrollShowing:!1};e.verticalScrollShowing=this.isVerticalScrollShowing(),e.horizontalScrollShowing=this.isHorizontalScrollShowing(),this.scrollVisibleService.setScrollsVisible(e),this.setHorizontalScrollVisible(e.horizontalScrollShowing),this.setVerticalScrollPaddingVisible(e.verticalScrollShowing)},t.prototype.setHorizontalScrollVisible=function(e){var t=this.gridOptionsWrapper.isSuppressHorizontalScroll(),o=e&&this.gridOptionsWrapper.getScrollbarWidth()||0,i=t?0:o,n=j._.isBrowserIE()&&e;this.eCenterViewport.style.height=\"calc(100% + \"+o+\"px)\",j._.setFixedHeight(this.eHorizontalScrollBody,i),j._.setFixedHeight(this.eBodyHorizontalScrollViewport,i+(n?1:0)),j._.setFixedHeight(this.eBodyHorizontalScrollContainer,i)},t.prototype.setVerticalScrollPaddingVisible=function(e){var t=e?\"scroll\":\"hidden\";this.eTop.style.overflowY=this.eBottom.style.overflowY=t,this.setFakeHScrollSpacerWidths()},t.prototype.updateRowCount=function(){var e=(this.headerRootComp.getHeaderRowCount()+this.paginationProxy.getRowCount()).toString();this.getGui().setAttribute(\"aria-rowcount\",e)},t.prototype.ensureColumnVisible=function(e){var t=this.columnController.getGridColumn(e);if(t)if(t.isPinned())console.warn(\"calling ensureIndexVisible on a \"+t.getPinned()+\" pinned column doesn't make sense for column \"+t.getColId());else if(this.columnController.isColumnDisplayed(t)){var o,i,n=t.getLeft(),r=n+t.getActualWidth(),s=this.eCenterViewport.clientWidth,a=this.getCenterViewportScrollLeft(),l=this.columnController.getBodyContainerWidth();this.enableRtl?(o=l-a-s,i=l-a):(o=a,i=s+a);var p=o>n,u=i<r,d=s<t.getActualWidth(),c=p||d,h=u,f=this.getCenterViewportScrollLeft();(c||h)&&(f=this.enableRtl?c?l-s-n:l-r:c?n:r-s,this.setCenterViewportScrollLeft(f)),this.onHorizontalViewportChanged(),this.animationFrameService.flushAllFrames()}else console.warn(\"column is not currently visible\")},t.prototype.showLoadingOverlay=function(){this.gridOptionsWrapper.isSuppressLoadingOverlay()||this.overlayWrapper.showLoadingOverlay()},t.prototype.showNoRowsOverlay=function(){this.gridOptionsWrapper.isSuppressNoRowsOverlay()||this.overlayWrapper.showNoRowsOverlay()},t.prototype.hideOverlay=function(){this.overlayWrapper.hideOverlay()},t.prototype.sizeColumnsToFit=function(e){var t=this,o=this.eBodyViewport.clientWidth;o>0?this.columnController.sizeColumnsToFit(o,\"sizeColumnsToFit\"):void 0===e?window.setTimeout(function(){t.sizeColumnsToFit(100)},0):100===e?window.setTimeout(function(){t.sizeColumnsToFit(500)},100):500===e?window.setTimeout(function(){t.sizeColumnsToFit(-1)},500):console.warn(\"ag-Grid: tried to call sizeColumnsToFit() but the grid is coming back with zero width, maybe the grid is not visible yet on the screen?\")},t.prototype.getCenterContainer=function(){return this.eCenterContainer},t.prototype.getDropTargetBodyContainers=function(){return[this.eCenterViewport,this.eTopViewport,this.eBottomViewport]},t.prototype.getDropTargetLeftContainers=function(){return[this.eLeftContainer,this.eLeftBottom,this.eLeftTop]},t.prototype.getDropTargetRightContainers=function(){return[this.eRightContainer,this.eRightBottom,this.eRightTop]},t.prototype.buildRowContainerComponents=function(){var e=this;this.eAllCellContainers=[this.eLeftContainer,this.eRightContainer,this.eCenterContainer,this.eTop,this.eBottom,this.eFullWidthContainer],this.rowContainerComponents={body:new C.RowContainerComponent({eContainer:this.eCenterContainer,eWrapper:this.eCenterColsClipper,eViewport:this.eBodyViewport}),fullWidth:new C.RowContainerComponent({eContainer:this.eFullWidthContainer}),pinnedLeft:new C.RowContainerComponent({eContainer:this.eLeftContainer}),pinnedRight:new C.RowContainerComponent({eContainer:this.eRightContainer}),floatingTop:new C.RowContainerComponent({eContainer:this.eTopContainer}),floatingTopPinnedLeft:new C.RowContainerComponent({eContainer:this.eLeftTop}),floatingTopPinnedRight:new C.RowContainerComponent({eContainer:this.eRightTop}),floatingTopFullWidth:new C.RowContainerComponent({eContainer:this.eTopFullWidthContainer,hideWhenNoChildren:!0}),floatingBottom:new C.RowContainerComponent({eContainer:this.eBottomContainer}),floatingBottomPinnedLeft:new C.RowContainerComponent({eContainer:this.eLeftBottom}),floatingBottomPinnedRight:new C.RowContainerComponent({eContainer:this.eRightBottom}),floatingBottomFullWith:new C.RowContainerComponent({eContainer:this.eBottomFullWidthContainer,hideWhenNoChildren:!0})},j._.iterateObject(this.rowContainerComponents,function(t,o){o&&e.getContext().wireBean(o)})},t.prototype.setupRowAnimationCssClass=function(){var e=this,t=function(){var t=e.gridOptionsWrapper.isAnimateRows()&&!e.heightScaler.isScaling();j._.addOrRemoveCssClass(e.eBodyViewport,\"ag-row-animation\",t),j._.addOrRemoveCssClass(e.eBodyViewport,\"ag-row-no-animation\",!t)};t(),this.addDestroyableEventListener(this.eventService,h.Events.EVENT_HEIGHT_SCALE_CHANGED,t)},t.prototype.suppressScrollOnFloatingRow=function(){var e=this;this.addDestroyableEventListener(this.eTopViewport,\"scroll\",function(){return e.eTopViewport.scrollLeft=0}),this.addDestroyableEventListener(this.eBottomViewport,\"scroll\",function(){return e.eTopViewport.scrollLeft=0})},t.prototype.getRowContainers=function(){return this.rowContainerComponents},t.prototype.getFloatingTopBottom=function(){return[this.eTop,this.eBottom]},t.prototype.onDisplayedColumnsChanged=function(){this.setPinnedContainerSize(),this.setHeaderAndFloatingHeights(),this.onHorizontalViewportChanged(),this.updateScrollVisibleService()},t.prototype.onDisplayedColumnsWidthChanged=function(){this.setWidthsOfContainers(),this.onHorizontalViewportChanged(),this.updateScrollVisibleService(),this.enableRtl&&this.horizontallyScrollHeaderCenterAndFloatingCenter()},t.prototype.setWidthsOfContainers=function(){this.setCenterWidth(),this.setPinnedContainerSize()},t.prototype.setCenterWidth=function(){var e=this.columnController.getBodyContainerWidth();this.printLayout&&(e+=this.columnController.getPinnedLeftContainerWidth()+this.columnController.getPinnedRightContainerWidth());this.headerRootComp.setHeaderContainerWidth(e);var t=e+\"px\";this.eCenterContainer.style.width=t,this.eBottomContainer.style.width=t,this.eTopContainer.style.width=t,this.printLayout||(this.eBodyHorizontalScrollContainer.style.width=t)},t.prototype.setPinnedLeftWidth=function(){var e=this,t=this.pinningLeft,o=this.columnController.getPinnedLeftContainerWidth(),i=this.pinningLeft=!this.printLayout&&o>0,n=[this.eLeftContainer,this.eLeftTop,this.eLeftBottom];t!==i&&this.headerRootComp.setLeftVisible(i),n.forEach(function(t){return j._.setDisplayed(t,e.pinningLeft)}),i&&n.forEach(function(e){return j._.setFixedWidth(e,o)})},t.prototype.setPinnedRightWidth=function(){var e=this.pinningRight,t=this.columnController.getPinnedRightContainerWidth(),o=this.pinningRight=!this.printLayout&&t>0,i=[this.eRightContainer,this.eRightTop,this.eRightBottom];e!==o&&this.headerRootComp.setRightVisible(o),i.forEach(function(e){return j._.setDisplayed(e,o)}),o&&i.forEach(function(e){return j._.setFixedWidth(e,t)})},t.prototype.setPinnedContainerSize=function(){this.setPinnedLeftWidth(),this.setPinnedRightWidth(),this.setFakeHScrollSpacerWidths()},t.prototype.setFakeHScrollSpacerWidths=function(){var e=this.columnController.getPinnedRightContainerWidth();!this.enableRtl&&this.isVerticalScrollShowing()&&(e+=this.scrollWidth),j._.setFixedWidth(this.eHorizontalRightSpacer,e),j._.addOrRemoveCssClass(this.eHorizontalRightSpacer,\"ag-scroller-corner\",e<=this.scrollWidth);var t=this.columnController.getPinnedLeftContainerWidth();this.enableRtl&&this.isVerticalScrollShowing()&&(t+=this.scrollWidth),j._.setFixedWidth(this.eHorizontalLeftSpacer,t),j._.addOrRemoveCssClass(this.eHorizontalLeftSpacer,\"ag-scroller-corner\",t<=this.scrollWidth)},t.prototype.checkBodyHeight=function(){var e=this.eBodyViewport.clientHeight;if(this.bodyHeight!==e){this.bodyHeight=e;var t={type:h.Events.EVENT_BODY_HEIGHT_CHANGED,api:this.gridApi,columnApi:this.columnApi};this.eventService.dispatchEvent(t)}},t.prototype.setHeaderAndFloatingHeights=function(){var e,t,o,i=this,n=i.columnController,r=i.gridOptionsWrapper,s=i.pinnedRowModel,a=i.eTop,l=i.eBottom,p=0,u=n.getHeaderRowCount();n.isPivotMode()?(p=0,t=r.getPivotGroupHeaderHeight(),o=r.getPivotHeaderHeight()):(r.isFloatingFilter()&&u++,p=r.isFloatingFilter()?1:0,t=r.getGroupHeaderHeight(),o=r.getHeaderHeight());var d=u-(1+p);e=p*r.getFloatingFiltersHeight(),e+=d*t,e+=o,this.headerRootComp.setHeight(e);var c=s.getPinnedTopTotalHeight();c&&(c+=1);var h=s.getPinnedBottomTotalHeight();h&&(h+=1);var f=c+\"px\",g=h+\"px\";a.style.minHeight=f,a.style.height=f,a.style.display=c?\"inherit\":\"none\",l.style.minHeight=g,l.style.height=g,l.style.display=h?\"inherit\":\"none\",this.checkBodyHeight()},t.prototype.getBodyHeight=function(){return this.bodyHeight},t.prototype.setHorizontalScrollPosition=function(e){this.eCenterViewport.scrollLeft=e,this.doHorizontalScroll(e)},t.prototype.setVerticalScrollPosition=function(e){this.eBodyViewport.scrollTop=e},t.prototype.scrollHorizontally=function(e){var t=this.eCenterViewport.scrollLeft;return this.setHorizontalScrollPosition(t+e),this.eCenterViewport.scrollLeft-t},t.prototype.scrollVertically=function(e){var t=this.eBodyViewport.scrollTop;return this.setVerticalScrollPosition(t+e),this.eBodyViewport.scrollTop-t},t.prototype.addScrollListener=function(){this.addDestroyableEventListener(this.eCenterViewport,\"scroll\",this.onCenterViewportScroll.bind(this)),this.addDestroyableEventListener(this.eBodyHorizontalScrollViewport,\"scroll\",this.onFakeHorizontalScroll.bind(this)),this.addDestroyableEventListener(this.eBodyViewport,\"scroll\",this.onVerticalScroll.bind(this))},t.prototype.onVerticalScroll=function(){var e=this.eBodyViewport.scrollTop;this.animationFrameService.setScrollTop(e),this.nextScrollTop=e,this.gridOptionsWrapper.isSuppressAnimationFrame()?this.redrawRowsAfterScroll():this.animationFrameService.schedule()},t.prototype.executeFrame=function(){var e=this.scrollTop!==this.nextScrollTop;return e&&(this.scrollTop=this.nextScrollTop,this.redrawRowsAfterScroll()),e},t.prototype.isControllingScroll=function(e){return this.lastHorizontalScrollElement?e===this.lastHorizontalScrollElement:(this.lastHorizontalScrollElement=e,!0)},t.prototype.onFakeHorizontalScroll=function(){this.isControllingScroll(this.eBodyHorizontalScrollViewport)&&this.onBodyHorizontalScroll(this.eBodyHorizontalScrollViewport)},t.prototype.onCenterViewportScroll=function(){this.isControllingScroll(this.eCenterViewport)&&this.onBodyHorizontalScroll(this.eCenterViewport)},t.prototype.onBodyHorizontalScroll=function(e){var t=this.eCenterViewport,o=t.scrollWidth,i=t.clientWidth,n=Math.floor(j._.getScrollLeft(e,this.enableRtl));n<0||n+i>o||(this.doHorizontalScroll(n),this.resetLastHorizontalScrollElementDebounce())},t.prototype.resetLastHorizontalScrollElement=function(){this.lastHorizontalScrollElement=null},t.prototype.doHorizontalScroll=function(e){this.scrollLeft=e;var t={type:h.Events.EVENT_BODY_SCROLL,api:this.gridApi,columnApi:this.columnApi,direction:\"horizontal\",left:this.scrollLeft,top:this.scrollTop};this.eventService.dispatchEvent(t),this.horizontallyScrollHeaderCenterAndFloatingCenter(e),this.onHorizontalViewportChanged()},t.prototype.redrawRowsAfterScroll=function(){var e={type:h.Events.EVENT_BODY_SCROLL,direction:\"vertical\",api:this.gridApi,columnApi:this.columnApi,left:this.scrollLeft,top:this.scrollTop};this.eventService.dispatchEvent(e)},t.prototype.onHorizontalViewportChanged=function(){var e=this.eCenterViewport.clientWidth,t=this.getCenterViewportScrollLeft();this.columnController.setVirtualViewportPosition(e,t)},t.prototype.getCenterViewportScrollLeft=function(){return j._.getScrollLeft(this.eCenterViewport,this.enableRtl)},t.prototype.setCenterViewportScrollLeft=function(e){j._.setScrollLeft(this.eCenterViewport,e,this.enableRtl)},t.prototype.horizontallyScrollHeaderCenterAndFloatingCenter=function(e){void 0===e&&(e=this.getCenterViewportScrollLeft());var t=this.enableRtl?e:-e,o=this.eCenterViewport,i=o.clientWidth,n=o.scrollWidth;if(!(Math.abs(t)+i>n||this.enableRtl&&t<0||!this.enableRtl&&t>0)){this.headerRootComp.setHorizontalScroll(t),this.eBottomContainer.style.transform=\"translateX(\"+t+\"px)\",this.eTopContainer.style.transform=\"translateX(\"+t+\"px)\";var r=this.lastHorizontalScrollElement===this.eCenterViewport?this.eBodyHorizontalScrollViewport:this.eCenterViewport;j._.setScrollLeft(r,e,this.enableRtl)}},t.prototype.addScrollEventListener=function(e){this.eBodyViewport.addEventListener(\"scroll\",e)},t.prototype.removeScrollEventListener=function(e){this.eBodyViewport.removeEventListener(\"scroll\",e)},r([d.Autowired(\"alignedGridsService\"),s(\"design:type\",_.AlignedGridsService)],t.prototype,\"alignedGridsService\",void 0),r([d.Autowired(\"gridOptionsWrapper\"),s(\"design:type\",a.GridOptionsWrapper)],t.prototype,\"gridOptionsWrapper\",void 0),r([d.Autowired(\"columnController\"),s(\"design:type\",l.ColumnController)],t.prototype,\"columnController\",void 0),r([d.Autowired(\"rowRenderer\"),s(\"design:type\",u.RowRenderer)],t.prototype,\"rowRenderer\",void 0),r([d.Autowired(\"pinnedRowModel\"),s(\"design:type\",O.PinnedRowModel)],t.prototype,\"pinnedRowModel\",void 0),r([d.Autowired(\"eventService\"),s(\"design:type\",c.EventService)],t.prototype,\"eventService\",void 0),r([d.Autowired(\"animationFrameService\"),s(\"design:type\",b.AnimationFrameService)],t.prototype,\"animationFrameService\",void 0),r([d.Autowired(\"navigationService\"),s(\"design:type\",A.NavigationService)],t.prototype,\"navigationService\",void 0),r([d.Autowired(\"autoHeightCalculator\"),s(\"design:type\",G.AutoHeightCalculator)],t.prototype,\"autoHeightCalculator\",void 0),r([d.Autowired(\"columnAnimationService\"),s(\"design:type\",x.ColumnAnimationService)],t.prototype,\"columnAnimationService\",void 0),r([d.Autowired(\"autoWidthCalculator\"),s(\"design:type\",W.AutoWidthCalculator)],t.prototype,\"autoWidthCalculator\",void 0),r([d.Autowired(\"paginationAutoPageSizeService\"),s(\"design:type\",w.PaginationAutoPageSizeService)],t.prototype,\"paginationAutoPageSizeService\",void 0),r([d.Autowired(\"beans\"),s(\"design:type\",H.Beans)],t.prototype,\"beans\",void 0),r([d.Autowired(\"paginationProxy\"),s(\"design:type\",E.PaginationProxy)],t.prototype,\"paginationProxy\",void 0),r([d.Autowired(\"columnApi\"),s(\"design:type\",p.ColumnApi)],t.prototype,\"columnApi\",void 0),r([d.Autowired(\"gridApi\"),s(\"design:type\",S.GridApi)],t.prototype,\"gridApi\",void 0),r([d.Autowired(\"dragService\"),s(\"design:type\",f.DragService)],t.prototype,\"dragService\",void 0),r([d.Autowired(\"mouseEventService\"),s(\"design:type\",y.MouseEventService)],t.prototype,\"mouseEventService\",void 0),r([d.Autowired(\"focusedCellController\"),s(\"design:type\",v.FocusedCellController)],t.prototype,\"focusedCellController\",void 0),r([d.Autowired(\"$scope\"),s(\"design:type\",Object)],t.prototype,\"$scope\",void 0),r([d.Autowired(\"scrollVisibleService\"),s(\"design:type\",m.ScrollVisibleService)],t.prototype,\"scrollVisibleService\",void 0),r([d.Autowired(\"valueService\"),s(\"design:type\",D.ValueService)],t.prototype,\"valueService\",void 0),r([d.Autowired(\"dragAndDropService\"),s(\"design:type\",F.DragAndDropService)],t.prototype,\"dragAndDropService\",void 0),r([d.Autowired(\"maxDivHeightScaler\"),s(\"design:type\",L.MaxDivHeightScaler)],t.prototype,\"heightScaler\",void 0),r([d.Autowired(\"enterprise\"),s(\"design:type\",Boolean)],t.prototype,\"enterprise\",void 0),r([d.Autowired(\"resizeObserverService\"),s(\"design:type\",k.ResizeObserverService)],t.prototype,\"resizeObserverService\",void 0),r([d.Optional(\"rangeController\"),s(\"design:type\",Object)],t.prototype,\"rangeController\",void 0),r([d.Optional(\"contextMenuFactory\"),s(\"design:type\",Object)],t.prototype,\"contextMenuFactory\",void 0),r([d.Optional(\"clipboardService\"),s(\"design:type\",Object)],t.prototype,\"clipboardService\",void 0),r([V.RefSelector(\"eBodyViewport\"),s(\"design:type\",HTMLElement)],t.prototype,\"eBodyViewport\",void 0),r([V.RefSelector(\"eCenterContainer\"),s(\"design:type\",HTMLElement)],t.prototype,\"eCenterContainer\",void 0),r([V.RefSelector(\"eCenterViewport\"),s(\"design:type\",HTMLElement)],t.prototype,\"eCenterViewport\",void 0),r([V.RefSelector(\"eLeftContainer\"),s(\"design:type\",HTMLElement)],t.prototype,\"eLeftContainer\",void 0),r([V.RefSelector(\"eRightContainer\"),s(\"design:type\",HTMLElement)],t.prototype,\"eRightContainer\",void 0),r([V.RefSelector(\"eCenterColsClipper\"),s(\"design:type\",HTMLElement)],t.prototype,\"eCenterColsClipper\",void 0),r([V.RefSelector(\"eHorizontalScrollBody\"),s(\"design:type\",HTMLElement)],t.prototype,\"eHorizontalScrollBody\",void 0),r([V.RefSelector(\"eHorizontalLeftSpacer\"),s(\"design:type\",HTMLElement)],t.prototype,\"eHorizontalLeftSpacer\",void 0),r([V.RefSelector(\"eHorizontalRightSpacer\"),s(\"design:type\",HTMLElement)],t.prototype,\"eHorizontalRightSpacer\",void 0),r([V.RefSelector(\"eBodyHorizontalScrollViewport\"),s(\"design:type\",HTMLElement)],t.prototype,\"eBodyHorizontalScrollViewport\",void 0),r([V.RefSelector(\"eBodyHorizontalScrollContainer\"),s(\"design:type\",HTMLElement)],t.prototype,\"eBodyHorizontalScrollContainer\",void 0),r([V.RefSelector(\"eFullWidthContainer\"),s(\"design:type\",HTMLElement)],t.prototype,\"eFullWidthContainer\",void 0),r([V.RefSelector(\"eTop\"),s(\"design:type\",HTMLElement)],t.prototype,\"eTop\",void 0),r([V.RefSelector(\"eLeftTop\"),s(\"design:type\",HTMLElement)],t.prototype,\"eLeftTop\",void 0),r([V.RefSelector(\"eRightTop\"),s(\"design:type\",HTMLElement)],t.prototype,\"eRightTop\",void 0),r([V.RefSelector(\"eTopContainer\"),s(\"design:type\",HTMLElement)],t.prototype,\"eTopContainer\",void 0),r([V.RefSelector(\"eTopViewport\"),s(\"design:type\",HTMLElement)],t.prototype,\"eTopViewport\",void 0),r([V.RefSelector(\"eTopFullWidthContainer\"),s(\"design:type\",HTMLElement)],t.prototype,\"eTopFullWidthContainer\",void 0),r([V.RefSelector(\"eBottom\"),s(\"design:type\",HTMLElement)],t.prototype,\"eBottom\",void 0),r([V.RefSelector(\"eLeftBottom\"),s(\"design:type\",HTMLElement)],t.prototype,\"eLeftBottom\",void 0),r([V.RefSelector(\"eRightBottom\"),s(\"design:type\",HTMLElement)],t.prototype,\"eRightBottom\",void 0),r([V.RefSelector(\"eBottomContainer\"),s(\"design:type\",HTMLElement)],t.prototype,\"eBottomContainer\",void 0),r([V.RefSelector(\"eBottomViewport\"),s(\"design:type\",HTMLElement)],t.prototype,\"eBottomViewport\",void 0),r([V.RefSelector(\"eBottomFullWidthContainer\"),s(\"design:type\",HTMLElement)],t.prototype,\"eBottomFullWidthContainer\",void 0),r([V.RefSelector(\"headerRoot\"),s(\"design:type\",B.HeaderRootComp)],t.prototype,\"headerRootComp\",void 0),r([V.RefSelector(\"overlayWrapper\"),s(\"design:type\",I.OverlayWrapperComponent)],t.prototype,\"overlayWrapper\",void 0),r([d.PostConstruct,s(\"design:type\",Function),s(\"design:paramtypes\",[]),s(\"design:returntype\",void 0)],t.prototype,\"init\",null),t}(M.Component);t.GridPanel=z},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(0),s=o(2),a=o(1),l=function(){function e(){}return e.prototype.init=function(){this.groupSelectsChildren=this.gridOptionsWrapper.isGroupSelectsChildren(),this.isRowSelectableFunc=this.gridOptionsWrapper.getIsRowSelectableFunc()},e.prototype.updateSelectableAfterGrouping=function(e){if(this.isRowSelectableFunc){this.recurseDown(e.childrenAfterGroup,function(e){return e.childrenAfterGroup})}},e.prototype.updateSelectableAfterFiltering=function(e){if(this.isRowSelectableFunc){this.recurseDown(e.childrenAfterGroup,function(e){return e.childrenAfterFilter})}},e.prototype.recurseDown=function(e,t){var o=this;e.forEach(function(e){if(e.group){var i;if(e.hasChildren()&&o.recurseDown(t(e),t),o.groupSelectsChildren){var n=a._.find(t(e),\"selectable\",!0);i=a._.exists(n)}else i=!!o.isRowSelectableFunc&&o.isRowSelectableFunc(e);e.setRowSelectable(i)}})},i([r.Autowired(\"gridOptionsWrapper\"),n(\"design:type\",s.GridOptionsWrapper)],e.prototype,\"gridOptionsWrapper\",void 0),i([r.PostConstruct,n(\"design:type\",Function),n(\"design:paramtypes\",[]),n(\"design:returntype\",void 0)],e.prototype,\"init\",null),e=i([r.Bean(\"selectableService\")],e)}();t.SelectableService=l},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)});Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(13),s=o(61),a=o(1),l=function(e){function t(t){var o=e.call(this)||this;return o.maxRowFound=!1,o.blocks={},o.blockCount=0,o.virtualRowCount=t.initialRowCount,o.cacheParams=t,o}return n(t,e),t.prototype.destroy=function(){var t=this;e.prototype.destroy.call(this),this.forEachBlockInOrder(function(e){return t.destroyBlock(e)})},t.prototype.init=function(){var e=this;this.active=!0,this.addDestroyFunc(function(){return e.active=!1})},t.prototype.isActive=function(){return this.active},t.prototype.getVirtualRowCount=function(){return this.virtualRowCount},t.prototype.hack_setVirtualRowCount=function(e){this.virtualRowCount=e},t.prototype.isMaxRowFound=function(){return this.maxRowFound},t.prototype.onPageLoaded=function(e){this.cacheParams.rowNodeBlockLoader.loadComplete(),this.checkBlockToLoad(),this.isActive()&&(this.logger.log(\"onPageLoaded: page = \"+e.page.getBlockNumber()+\", lastRow = \"+e.lastRow),e.success&&this.checkVirtualRowCount(e.page,e.lastRow))},t.prototype.purgeBlocksIfNeeded=function(e){var o=this,i=[];this.forEachBlockInOrder(function(t){t!==e&&i.push(t)}),i.sort(function(e,t){return t.getLastAccessed()-e.getLastAccessed()});var n=this.cacheParams.maxBlocksInCache>0,r=n?this.cacheParams.maxBlocksInCache-1:null,a=t.MAX_EMPTY_BLOCKS_TO_KEEP-1;i.forEach(function(e,t){if(e.getState()===s.RowNodeBlock.STATE_DIRTY&&t>=a||!!n&&t>=r){if(e.isAnyNodeOpen(o.virtualRowCount))return;o.removeBlockFromCache(e)}})},t.prototype.postCreateBlock=function(e){e.addEventListener(s.RowNodeBlock.EVENT_LOAD_COMPLETE,this.onPageLoaded.bind(this)),this.setBlock(e.getBlockNumber(),e),this.purgeBlocksIfNeeded(e),this.checkBlockToLoad()},t.prototype.removeBlockFromCache=function(e){e&&this.destroyBlock(e)},t.prototype.checkBlockToLoad=function(){this.cacheParams.rowNodeBlockLoader.checkBlockToLoad()},t.prototype.checkVirtualRowCount=function(e,t){if(\"number\"==typeof t&&t>=0)this.virtualRowCount=t,this.maxRowFound=!0,this.onCacheUpdated();else if(!this.maxRowFound){var o=(e.getBlockNumber()+1)*this.cacheParams.blockSize+this.cacheParams.overflowSize;this.virtualRowCount<o?(this.virtualRowCount=o,this.onCacheUpdated()):this.cacheParams.dynamicRowHeight&&this.onCacheUpdated()}},t.prototype.setVirtualRowCount=function(e,t){this.virtualRowCount=e,a._.exists(t)&&(this.maxRowFound=t),this.maxRowFound||this.virtualRowCount%this.cacheParams.blockSize==0&&this.virtualRowCount++,this.onCacheUpdated()},t.prototype.forEachNodeDeep=function(e,t){var o=this;void 0===t&&(t=new a.NumberSequence),this.forEachBlockInOrder(function(i){i.forEachNodeDeep(e,t,o.virtualRowCount)})},t.prototype.forEachBlockInOrder=function(e){var t=this.getBlockIdsSorted();this.forEachBlockId(t,e)},t.prototype.forEachBlockInReverseOrder=function(e){var t=this.getBlockIdsSorted().reverse();this.forEachBlockId(t,e)},t.prototype.forEachBlockId=function(e,t){var o=this;e.forEach(function(e){var i=o.blocks[e];t(i,e)})},t.prototype.getBlockIdsSorted=function(){return Object.keys(this.blocks).map(function(e){return parseInt(e,10)}).sort(function(e,t){return e-t})},t.prototype.getBlock=function(e){return this.blocks[e]},t.prototype.setBlock=function(e,t){this.blocks[e]=t,this.blockCount++,this.cacheParams.rowNodeBlockLoader.addBlock(t)},t.prototype.destroyBlock=function(e){delete this.blocks[e.getBlockNumber()],e.destroy(),this.blockCount--,this.cacheParams.rowNodeBlockLoader.removeBlock(e)},t.prototype.onCacheUpdated=function(){if(this.isActive()){var e={type:t.EVENT_CACHE_UPDATED};this.dispatchEvent(e)}},t.prototype.purgeCache=function(){var e=this;this.forEachBlockInOrder(function(t){return e.removeBlockFromCache(t)}),this.virtualRowCount=this.cacheParams.initialRowCount,this.maxRowFound=!1,this.onCacheUpdated()},t.prototype.getRowNodesInRange=function(e,t){var o=this,i=[],n=-1,r=!1,s=new a.NumberSequence;a._.missing(e)&&(r=!0);var l=!1;return this.forEachBlockInOrder(function(a,p){l||(r&&n+1!==p?l=!0:(n=p,a.forEachNodeShallow(function(o){var n=o===e||o===t;(r||n)&&i.push(o),n&&(r=!r)},s,o.virtualRowCount)))}),l||r?[]:i},t.EVENT_CACHE_UPDATED=\"cacheUpdated\",t.MAX_EMPTY_BLOCKS_TO_KEEP=2,t}(r.BeanStub);t.RowNodeCache=l},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)});Object.defineProperty(t,\"__esModule\",{value:!0});var r=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.className=\"ag-radio-button\",t.inputType=\"radio\",t.iconMap={selected:\"radioButtonOn\",unselected:\"radioButtonOff\"},t}return n(t,e),t.prototype.toggle=function(){var e=this.getNextValue();this.setValue(e)},t.prototype.getIconName=function(){var e=this.getValue()?\"selected\":\"unselected\",t=this.isReadOnly()?\"ReadOnly\":\"\";return\"\"+this.iconMap[e]+t},t}(o(38).AgCheckbox);t.AgRadioButton=r},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}),r=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},s=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(10),l=o(0),p=o(7),u=o(26),d=o(2),c=o(1),h=function(e){function t(o){var i=e.call(this,t.TEMPLATE)||this;return i.closable=!0,i.positioned=!1,i.dragStartPosition={x:0,y:0},i.position={x:0,y:0},i.size={width:void 0,height:void 0},i.config=o,i}return n(t,e),t.prototype.postConstruct=function(){var e=this,t=this.config,o=t.component,i=t.closable,n=t.hideTitleBar,r=t.title,s=t.minWidth,a=t.width,l=t.minHeight,p=t.height,u=t.centered,d=t.x,h=t.y,f=this.getGui();o&&this.setBodyComponent(o),n?c._.addCssClass(this.eTitleBar,\"ag-hidden\"):(r&&this.setTitle(r),this.setClosable(null!=i?i:this.closable)),this.addDestroyableEventListener(this.eTitleBar,\"mousedown\",function(t){if(f.contains(t.relatedTarget)||f.contains(document.activeElement)||e.eTitleBarButtons.contains(t.target))t.preventDefault();else{var o=e.eContentWrapper.querySelector(\"button, [href], input, select, textarea, [tabindex]\");o&&o.focus()}}),this.positioned||(this.minHeight=null!=l?l:250,this.minWidth=null!=s?s:250,this.popupParent=this.popupService.getPopupParent(),a&&this.setWidth(a),p&&this.setHeight(p),this.renderComponent&&this.renderComponent(),a&&p||this.refreshSize(),u?this.center():(d||h)&&this.offsetElement(d,h),this.positioned=!0,this.eContentWrapper.style.height=\"0\")},t.prototype.renderComponent=function(){var e=this,t=this.getGui();t.focus(),this.close=function(){t.parentElement.removeChild(t),e.destroy()}},t.prototype.updateDragStartPosition=function(e,t){this.dragStartPosition={x:e,y:t}},t.prototype.calculateMouseMovement=function(e){var t=this.popupParent.getBoundingClientRect(),o=e.e,i=e.isLeft,n=e.isTop,r=e.anywhereWithin,s=e.topBuffer,a=o.clientX-this.dragStartPosition.x,l=o.clientY-this.dragStartPosition.y,p=this.getWidth(),u=this.getHeight(),d=t.left>=o.clientX&&this.position.x<=0||t.right<=o.clientX&&t.right<=this.position.x+t.left+p;return d||(d=i?a<0&&o.clientX>this.position.x+t.left||a>0&&o.clientX<this.position.x+t.left:r?a<0&&o.clientX>this.position.x+t.left+p||a>0&&o.clientX<this.position.x+t.left:a<0&&o.clientX>this.position.x+t.left+p||a>0&&o.clientX<this.position.x+t.left+p),{movementX:a=d?0:a,movementY:l=t.top>=o.clientY&&this.position.y<=0||t.bottom<=o.clientY&&t.bottom<=this.position.y+t.top+u||n&&(l<0&&o.clientY>this.position.y+t.top+(s||0)||l>0&&o.clientY<this.position.y+t.top)||!n&&(l<0&&o.clientY>this.position.y+t.top+u||l>0&&o.clientY<this.position.y+t.top+u)?0:l}},t.prototype.refreshSize=function(){var e=this.size,t=e.width,o=e.height;t||this.setWidth(this.getGui().offsetWidth),o||this.setHeight(this.getGui().offsetHeight)},t.prototype.offsetElement=function(e,t){void 0===e&&(e=0),void 0===t&&(t=0);var o=this.getGui();this.popupService.positionPopup({ePopup:o,x:e,y:t,minWidth:this.minWidth,minHeight:this.minHeight,keepWithinBounds:!0}),this.position.x=parseInt(o.style.left,10),this.position.y=parseInt(o.style.top,10)},t.prototype.getHeight=function(){return this.size.height},t.prototype.setHeight=function(e){var t=this.getGui(),o=!1;if(\"string\"==typeof e&&-1!==e.indexOf(\"%\"))c._.setFixedHeight(t,e),e=c._.getAbsoluteHeight(t),o=!0;else{e=Math.max(this.minHeight,e);var i=t.offsetParent;i&&i.clientHeight&&e+this.position.y>i.clientHeight&&(e=i.clientHeight-this.position.y)}this.size.height!==e&&(this.size.height=e,o?(t.style.maxHeight=\"unset\",t.style.minHeight=\"unset\"):c._.setFixedHeight(t,e))},t.prototype.getWidth=function(){return this.size.width},t.prototype.setWidth=function(e){var t=this.getGui(),o=!1;if(\"string\"==typeof e&&-1!==e.indexOf(\"%\"))c._.setFixedWidth(t,e),e=c._.getAbsoluteWidth(t),o=!0;else{e=Math.max(this.minWidth,e);var i=t.offsetParent;i&&i.clientWidth&&e+this.position.x>i.clientWidth&&(e=i.clientWidth-this.position.x)}this.size.width!==e&&(this.size.width=e,o?(t.style.maxWidth=\"unset\",t.style.minWidth=\"unset\"):c._.setFixedWidth(t,e))},t.prototype.center=function(){var e=this.getGui(),t=e.offsetParent.clientWidth/2-this.getWidth()/2,o=e.offsetParent.clientHeight/2-this.getHeight()/2;this.offsetElement(t,o)},t.prototype.setClosable=function(e){if(e!==this.closable&&(this.closable=e),e){var o=this.closeButtonComp=new p.Component(t.CLOSE_BTN_TEMPLATE);this.getContext().wireBean(o),(i=o.getGui()).appendChild(c._.createIconNoSpan(\"close\",this.gridOptionsWrapper)),this.addTitleBarButton(o),o.addDestroyableEventListener(i,\"click\",this.onBtClose.bind(this))}else if(this.closeButtonComp){var i;(i=this.closeButtonComp.getGui()).parentElement.removeChild(i),this.closeButtonComp.destroy(),this.closeButtonComp=void 0}},t.prototype.setBodyComponent=function(e){e.setParentComponent(this),this.eContentWrapper.appendChild(e.getGui())},t.prototype.addTitleBarButton=function(e,t){var o=this.eTitleBarButtons,i=o.children,n=i.length;null==t&&(t=n),t=Math.max(0,Math.min(t,n));var r=e.getGui();c._.addCssClass(r,\"ag-button\"),0===t?o.insertAdjacentElement(\"afterbegin\",r):t===n?o.insertAdjacentElement(\"beforeend\",r):i[t-1].insertAdjacentElement(\"afterend\",r),e.setParentComponent(this)},t.prototype.getBodyHeight=function(){return c._.getInnerHeight(this.eContentWrapper)},t.prototype.getBodyWidth=function(){return c._.getInnerWidth(this.eContentWrapper)},t.prototype.setTitle=function(e){this.eTitle.innerText=e},t.prototype.onBtClose=function(){this.close()},t.prototype.destroy=function(){e.prototype.destroy.call(this),this.closeButtonComp&&(this.closeButtonComp.destroy(),this.closeButtonComp=void 0);var t=this.getGui();t&&t.offsetParent&&this.close()},t.TEMPLATE='<div class=\"ag-panel\" tabindex=\"-1\">\\n            <div ref=\"eTitleBar\" class=\"ag-title-bar ag-unselectable\">\\n                <span ref=\"eTitle\" class=\"ag-title-bar-title\"></span>\\n                <div ref=\"eTitleBarButtons\" class=\"ag-title-bar-buttons\"></div>\\n            </div>\\n            <div ref=\"eContentWrapper\" class=\"ag-panel-content-wrapper\"></div>\\n        </div>',t.CLOSE_BTN_TEMPLATE='<div class=\"ag-button\"></div>',r([l.Autowired(\"popupService\"),s(\"design:type\",u.PopupService)],t.prototype,\"popupService\",void 0),r([l.Autowired(\"gridOptionsWrapper\"),s(\"design:type\",d.GridOptionsWrapper)],t.prototype,\"gridOptionsWrapper\",void 0),r([a.RefSelector(\"eContentWrapper\"),s(\"design:type\",HTMLElement)],t.prototype,\"eContentWrapper\",void 0),r([a.RefSelector(\"eTitleBar\"),s(\"design:type\",HTMLElement)],t.prototype,\"eTitleBar\",void 0),r([a.RefSelector(\"eTitleBarButtons\"),s(\"design:type\",HTMLElement)],t.prototype,\"eTitleBarButtons\",void 0),r([a.RefSelector(\"eTitle\"),s(\"design:type\",HTMLElement)],t.prototype,\"eTitle\",void 0),r([l.PostConstruct,s(\"design:type\",Function),s(\"design:paramtypes\",[]),s(\"design:returntype\",void 0)],t.prototype,\"postConstruct\",null),t}(p.Component);t.AgPanel=h},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)});Object.defineProperty(t,\"__esModule\",{value:!0});var r=function(e){function t(t){var o=e.call(this)||this;return o.className=\"ag-text-field\",o.displayTag=\"input\",o.inputType=\"text\",o.setTemplate(o.TEMPLATE.replace(/%displayField%/g,o.displayTag)),t&&(o.config=t),o}return n(t,e),t.prototype.setValue=function(t,o){var i=e.prototype.setValue.call(this,t,o);return this.eInput.value!==t&&(this.eInput.value=t),i},t}(o(47).AgAbstractInputField);t.AgInputTextField=r},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)});Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(47),s=o(1),a=function(e){function t(t){var o=e.call(this)||this;return o.className=\"ag-range-field\",o.displayTag=\"input\",o.inputType=\"range\",o.setTemplate(o.TEMPLATE.replace(/%displayField%/g,o.displayTag)),t&&(o.config=t),o}return n(t,e),t.prototype.postConstruct=function(){e.prototype.postConstruct.call(this);var t=this.config,o=t.min,i=t.max,n=t.step;null!=o&&this.setMinValue(o),null!=i&&this.setMaxValue(i),this.setStep(n||1)},t.prototype.addInputListeners=function(){var e=this,t=s._.isBrowserIE()?\"change\":\"input\";this.addDestroyableEventListener(this.eInput,t,function(t){var o=t.target.value;e.setValue(o)})},t.prototype.setMinValue=function(e){return this.min=e,this.eInput.setAttribute(\"min\",e.toString()),this},t.prototype.setMaxValue=function(e){return this.max=e,this.eInput.setAttribute(\"max\",e.toString()),this},t.prototype.setStep=function(e){return this.step=e,this.eInput.setAttribute(\"step\",e.toString()),this},t.prototype.setValue=function(t,o){null!=this.min&&(t=Math.max(parseFloat(t),this.min).toString()),null!=this.max&&(t=Math.min(parseFloat(t),this.max).toString());var i=e.prototype.setValue.call(this,t,o);return this.eInput.value=t,i},t}(r.AgAbstractInputField);t.AgInputRange=a},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */Object.defineProperty(t,\"__esModule\",{value:!0});var i=function(){function e(){}return e.STRING_PROPERTIES=[\"sortingOrder\",\"rowClass\",\"rowSelection\",\"overlayLoadingTemplate\",\"overlayNoRowsTemplate\",\"quickFilterText\",\"rowModelType\",\"editType\",\"domLayout\",\"clipboardDeliminator\",\"rowGroupPanelShow\",\"multiSortKey\",\"pivotColumnGroupTotals\",\"pivotRowTotals\",\"pivotPanelShow\"],e.OBJECT_PROPERTIES=[\"components\",\"frameworkComponents\",\"rowStyle\",\"context\",\"autoGroupColumnDef\",\"groupColumnDef\",\"localeText\",\"icons\",\"datasource\",\"serverSideDatasource\",\"viewportDatasource\",\"groupRowRendererParams\",\"aggFuncs\",\"fullWidthCellRendererParams\",\"defaultColGroupDef\",\"defaultColDef\",\"defaultExportParams\",\"columnTypes\",\"rowClassRules\",\"detailGridOptions\",\"detailCellRendererParams\",\"loadingCellRendererParams\",\"loadingOverlayComponentParams\",\"noRowsOverlayComponentParams\",\"popupParent\",\"colResizeDefault\",\"reduxStore\",\"statusBar\",\"sideBar\"],e.ARRAY_PROPERTIES=[\"slaveGrids\",\"alignedGrids\",\"rowData\",\"columnDefs\",\"excelStyles\",\"pinnedTopRowData\",\"pinnedBottomRowData\"],e.NUMBER_PROPERTIES=[\"rowHeight\",\"detailRowHeight\",\"rowBuffer\",\"colWidth\",\"headerHeight\",\"groupHeaderHeight\",\"floatingFiltersHeight\",\"pivotHeaderHeight\",\"pivotGroupHeaderHeight\",\"groupDefaultExpanded\",\"minColWidth\",\"maxColWidth\",\"viewportRowModelPageSize\",\"viewportRowModelBufferSize\",\"autoSizePadding\",\"maxBlocksInCache\",\"maxConcurrentDatasourceRequests\",\"cacheOverflowSize\",\"paginationPageSize\",\"cacheBlockSize\",\"infiniteInitialRowCount\",\"scrollbarWidth\",\"paginationStartPage\",\"infiniteBlockSize\",\"batchUpdateWaitMillis\",\"blockLoadDebounceMillis\",\"keepDetailRowsCount\"],e.BOOLEAN_PROPERTIES=[\"toolPanelSuppressRowGroups\",\"toolPanelSuppressValues\",\"toolPanelSuppressPivots\",\"toolPanelSuppressPivotMode\",\"toolPanelSuppressSideButtons\",\"toolPanelSuppressColumnFilter\",\"toolPanelSuppressColumnSelectAll\",\"toolPanelSuppressColumnExpandAll\",\"suppressMakeColumnVisibleAfterUnGroup\",\"suppressRowClickSelection\",\"suppressCellSelection\",\"suppressHorizontalScroll\",\"alwaysShowVerticalScroll\",\"debug\",\"enableBrowserTooltips\",\"enableColResize\",\"enableCellExpressions\",\"enableSorting\",\"enableServerSideSorting\",\"enableFilter\",\"enableServerSideFilter\",\"angularCompileRows\",\"angularCompileFilters\",\"angularCompileHeaders\",\"groupSuppressAutoColumn\",\"groupSelectsChildren\",\"groupIncludeFooter\",\"groupIncludeTotalFooter\",\"groupUseEntireRow\",\"groupSuppressRow\",\"groupSuppressBlankHeader\",\"forPrint\",\"suppressMenuHide\",\"rowDeselection\",\"unSortIcon\",\"suppressMultiSort\",\"singleClickEdit\",\"suppressLoadingOverlay\",\"suppressNoRowsOverlay\",\"suppressAutoSize\",\"suppressParentsInRowNodes\",\"showToolPanel\",\"suppressColumnMoveAnimation\",\"suppressMovableColumns\",\"suppressFieldDotNotation\",\"enableRangeSelection\",\"enableRangeHandle\",\"enableFillHandle\",\"deltaSort\",\"suppressTouch\",\"suppressAsyncEvents\",\"allowContextMenuWithControlKey\",\"suppressContextMenu\",\"suppressMenuFilterPanel\",\"suppressMenuMainPanel\",\"suppressMenuColumnPanel\",\"rememberGroupStateWhenNewData\",\"enableCellChangeFlash\",\"suppressDragLeaveHidesColumns\",\"suppressMiddleClickScrolls\",\"suppressPreventDefaultOnMouseWheel\",\"suppressUseColIdForGroups\",\"suppressCopyRowsToClipboard\",\"copyHeadersToClipboard\",\"pivotMode\",\"suppressAggFuncInHeader\",\"suppressColumnVirtualisation\",\"suppressAggAtRootLevel\",\"suppressFocusAfterRefresh\",\"functionsPassive\",\"functionsReadOnly\",\"animateRows\",\"groupSelectsFiltered\",\"groupRemoveSingleChildren\",\"groupRemoveLowestSingleChildren\",\"enableRtl\",\"suppressClickEdit\",\"rowDragManaged\",\"suppressRowDrag\",\"enableGroupEdit\",\"embedFullWidthRows\",\"deprecatedEmbedFullWidthRows\",\"suppressTabbing\",\"suppressPaginationPanel\",\"floatingFilter\",\"groupHideOpenParents\",\"groupMultiAutoColumn\",\"pagination\",\"stopEditingWhenGridLosesFocus\",\"paginationAutoPageSize\",\"suppressScrollOnNewData\",\"purgeClosedRowNodes\",\"cacheQuickFilter\",\"deltaRowDataMode\",\"ensureDomOrder\",\"accentedSort\",\"pivotTotals\",\"suppressChangeDetection\",\"valueCache\",\"valueCacheNeverExpires\",\"aggregateOnlyChangedColumns\",\"suppressAnimationFrame\",\"suppressExcelExport\",\"suppressCsvExport\",\"treeData\",\"masterDetail\",\"suppressMultiRangeSelection\",\"enterMovesDownAfterEdit\",\"enterMovesDown\",\"suppressPropertyNamesCheck\",\"rowMultiSelectWithClick\",\"contractColumnSelection\",\"suppressEnterpriseResetOnNewColumns\",\"enableOldSetFilterModel\",\"suppressRowHoverHighlight\",\"gridAutoHeight\",\"suppressRowTransform\",\"suppressClipboardPaste\",\"serverSideSortingAlwaysResets\",\"reactNext\",\"suppressSetColumnStateEvents\",\"enableCharts\",\"deltaColumnMode\",\"suppressMaintainUnsortedOrder\",\"enableCellTextSelection\",\"suppressBrowserResizeObserver\",\"suppressMaxRenderedRowRestriction\",\"excludeChildrenWhenTreeDataFiltering\",\"keepDetailRows\",\"paginateChildRows\",\"preventDefaultOnContextMenu\"],e.FUNCTION_PROPERTIES=[\"localeTextFunc\",\"groupRowInnerRenderer\",\"groupRowInnerRendererFramework\",\"dateComponent\",\"dateComponentFramework\",\"groupRowRenderer\",\"groupRowRendererFramework\",\"isExternalFilterPresent\",\"getRowHeight\",\"doesExternalFilterPass\",\"getRowClass\",\"getRowStyle\",\"getRowClassRules\",\"traverseNode\",\"getContextMenuItems\",\"getMainMenuItems\",\"processRowPostCreate\",\"processCellForClipboard\",\"getNodeChildDetails\",\"groupRowAggNodes\",\"getRowNodeId\",\"isFullWidthCell\",\"fullWidthCellRenderer\",\"fullWidthCellRendererFramework\",\"doesDataFlower\",\"processSecondaryColDef\",\"processSecondaryColGroupDef\",\"getBusinessKeyForNode\",\"sendToClipboard\",\"navigateToNextCell\",\"tabToNextCell\",\"getDetailRowData\",\"processCellFromClipboard\",\"getDocument\",\"postProcessPopup\",\"getChildCount\",\"getDataPath\",\"loadingCellRenderer\",\"loadingCellRendererFramework\",\"loadingOverlayComponent\",\"loadingOverlayComponentFramework\",\"noRowsOverlayComponent\",\"noRowsOverlayComponentFramework\",\"detailCellRenderer\",\"detailCellRendererFramework\",\"onGridReady\",\"defaultGroupSortComparator\",\"isRowMaster\",\"isRowSelectable\",\"postSort\",\"processHeaderForClipboard\",\"paginationNumberFormatter\",\"processDataFromClipboard\",\"getServerSideGroupKey\",\"isServerSideGroup\",\"suppressKeyboardEvent\",\"createChartContainer\",\"processChartOptions\",\"getChartToolbarItems\"],e.ALL_PROPERTIES=e.ARRAY_PROPERTIES.concat(e.OBJECT_PROPERTIES).concat(e.STRING_PROPERTIES).concat(e.NUMBER_PROPERTIES).concat(e.FUNCTION_PROPERTIES).concat(e.BOOLEAN_PROPERTIES),e.FRAMEWORK_PROPERTIES=[\"__ob__\",\"__metadata__\",\"mappedColumnProperties\",\"hasChildColumns\",\"toColDef\",\"createColDefFromGridColumn\"],e}();t.PropertyKeys=i},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */Object.defineProperty(t,\"__esModule\",{value:!0}),function(e){e[e.VALUE=0]=\"VALUE\",e[e.DIMENSION=1]=\"DIMENSION\"}(t.CellRangeType||(t.CellRangeType={}))},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */Object.defineProperty(t,\"__esModule\",{value:!0});var i=function(){function e(e,t,o){var i=this;this.alive=!0,e.newDateComponent(t).then(function(e){i.alive?(i.dateComp=e,o.appendChild(e.getGui()),e.afterGuiAttached&&e.afterGuiAttached(),i.tempValue&&e.setDate(i.tempValue)):e.destroy&&e.destroy()})}return e.prototype.destroy=function(){this.alive=!1,this.dateComp&&this.dateComp.destroy&&this.dateComp.destroy()},e.prototype.getDate=function(){return this.dateComp?this.dateComp.getDate():this.tempValue},e.prototype.setDate=function(e){this.dateComp?this.dateComp.setDate(e):this.tempValue=e},e}();t.DateCompWrapper=i},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */Object.defineProperty(t,\"__esModule\",{value:!0});var i=function(){function e(){this.customFilterOptions={}}return e.prototype.init=function(e,t){this.filterOptions=e.filterOptions?e.filterOptions:t,this.mapCustomOptions(),this.selectDefaultItem(e)},e.prototype.getFilterOptions=function(){return this.filterOptions},e.prototype.mapCustomOptions=function(){var e=this;this.filterOptions&&this.filterOptions.forEach(function(t){\"string\"!=typeof t&&(t.displayKey?t.displayName?t.test?e.customFilterOptions[t.displayKey]=t:console.warn(\"ag-Grid: ignoring FilterOptionDef as it doesn't contain a 'test'\"):console.warn(\"ag-Grid: ignoring FilterOptionDef as it doesn't contain a 'displayName'\"):console.warn(\"ag-Grid: ignoring FilterOptionDef as it doesn't contain a 'displayKey'\"))})},e.prototype.selectDefaultItem=function(e){if(e.defaultOption)this.defaultOption=e.defaultOption;else if(this.filterOptions.length>=1){var t=this.filterOptions[0];\"string\"==typeof t?this.defaultOption=t:t.displayKey?this.defaultOption=t.displayKey:console.warn(\"ag-Grid: invalid FilterOptionDef supplied as it doesn't contain a 'displayKey'\")}else console.warn(\"ag-Grid: no filter options for filter\")},e.prototype.getDefaultOption=function(){return this.defaultOption},e.prototype.getCustomOption=function(e){return this.customFilterOptions[e]},e}();t.OptionsFactory=i},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)});Object.defineProperty(t,\"__esModule\",{value:!0});var r=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t.prototype.isPopup=function(){return!0},t}(o(73).TextCellEditor);t.PopupTextCellEditor=r},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)});Object.defineProperty(t,\"__esModule\",{value:!0});var r=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t.prototype.isPopup=function(){return!0},t}(o(78).SelectCellEditor);t.PopupSelectCellEditor=r},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)});Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(36),s=o(6),a=o(1),l=function(e){function t(){return e.call(this,t.TEMPLATE)||this}return n(t,e),t.prototype.init=function(e){this.params=e,this.focusAfterAttached=e.cellStartedEdit,this.textarea=document.createElement(\"textarea\"),this.textarea.maxLength=e.maxLength?e.maxLength:\"200\",this.textarea.cols=e.cols?e.cols:\"60\",this.textarea.rows=e.rows?e.rows:\"10\",a._.exists(e.value)&&(this.textarea.value=e.value.toString()),this.getGui().querySelector(\".ag-large-textarea\").appendChild(this.textarea),this.addGuiEventListener(\"keydown\",this.onKeyDown.bind(this))},t.prototype.onKeyDown=function(e){var t=e.which||e.keyCode;(t==s.Constants.KEY_LEFT||t==s.Constants.KEY_UP||t==s.Constants.KEY_RIGHT||t==s.Constants.KEY_DOWN||e.shiftKey&&t==s.Constants.KEY_ENTER)&&e.stopPropagation()},t.prototype.afterGuiAttached=function(){this.focusAfterAttached&&this.textarea.focus()},t.prototype.getValue=function(){return this.params.parseValue(this.textarea.value)},t.TEMPLATE='<div class=\"ag-large-text\" tabindex=\"0\"><div class=\"ag-large-textarea\"></div></div>',t}(r.PopupComponent);t.LargeTextCellEditor=l},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)});Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(7),s=o(27),a=o(104),l=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t.prototype.getDefaultDebounceMs=function(){return 0},t.prototype.getTextFromModel=function(e){if(!e)return null;if(e.operator){var t=e,o=this.conditionToString(t.condition1),i=this.conditionToString(t.condition2);return o+\" \"+t.operator+\" \"+i}var n=e;return this.conditionToString(n)},t.prototype.isEventFromFloatingFilter=function(e){return e&&e.afterFloatingFilter},t.prototype.getLastType=function(){return this.lastType},t.prototype.setLastTypeFromModel=function(e){if(e){var t;if(e.operator)t=e.condition1;else t=e;this.lastType=t.type}},t.prototype.canWeEditAfterModelFromParentFilter=function(e){if(!e)return this.isTypeEditable(this.lastType);if(e.operator)return!1;var t=e;return this.isTypeEditable(t.type)},t.prototype.init=function(e){this.optionsFactory=new a.OptionsFactory,this.optionsFactory.init(e.filterParams,this.getDefaultFilterOptions()),this.lastType=this.optionsFactory.getDefaultOption();var t=this.isTypeEditable(this.lastType);this.setEditable(t)},t.prototype.doesFilterHaveHiddenInput=function(e){var t=this.optionsFactory.getCustomOption(e);return t&&t.hideFilterInput},t.prototype.isTypeEditable=function(e){return!this.doesFilterHaveHiddenInput(e)&&(e&&e!=s.SimpleFilter.IN_RANGE&&e!=s.SimpleFilter.EMPTY)},t}(r.Component);t.SimpleFloatingFilter=l},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}),r=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},s=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(10),l=o(1),p=o(6),u=o(54),d=o(0),c=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t.prototype.postConstruct=function(){this.setTemplate('<div class=\"ag-input-wrapper\" role=\"presentation\">\\n                <input ref=\"eFloatingFilterText\" class=\"ag-floating-filter-input\">\\n            </div>')},t.prototype.getDefaultDebounceMs=function(){return 500},t.prototype.onParentModelChanged=function(e,t){if(!this.isEventFromFloatingFilter(t)){this.setLastTypeFromModel(e);var o=this.getTextFromModel(e);this.eFloatingFilterText.value=o;var i=this.canWeEditAfterModelFromParentFilter(e);this.setEditable(i)}},t.prototype.init=function(t){e.prototype.init.call(this,t),this.params=t,this.applyActive=u.ProvidedFilter.isUseApplyButton(this.params.filterParams);var o=u.ProvidedFilter.getDebounceMs(this.params.filterParams,this.getDefaultDebounceMs()),i=l._.debounce(this.syncUpWithParentFilter.bind(this),o);this.addDestroyableEventListener(this.eFloatingFilterText,\"input\",i),this.addDestroyableEventListener(this.eFloatingFilterText,\"keypress\",i),this.addDestroyableEventListener(this.eFloatingFilterText,\"keydown\",i);var n=t.column.getDefinition();n.filterParams&&n.filterParams.filterOptions&&1===n.filterParams.filterOptions.length&&\"inRange\"===n.filterParams.filterOptions[0]&&(this.eFloatingFilterText.disabled=!0)},t.prototype.syncUpWithParentFilter=function(e){var t=this,o=this.eFloatingFilterText.value,i=l._.isKeyPressed(e,p.Constants.KEY_ENTER);this.applyActive&&!i||this.params.parentFilterInstance(function(e){e&&e.onFloatingFilterChanged(t.getLastType(),o)})},t.prototype.setEditable=function(e){this.eFloatingFilterText.disabled=!e},r([a.RefSelector(\"eFloatingFilterText\"),s(\"design:type\",HTMLInputElement)],t.prototype,\"eFloatingFilterText\",void 0),r([d.PostConstruct,s(\"design:type\",Function),s(\"design:paramtypes\",[]),s(\"design:returntype\",void 0)],t.prototype,\"postConstruct\",null),t}(o(108).SimpleFloatingFilter);t.TextInputFloatingFilter=c},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(11),s=o(0),a=o(2),l=function(){function e(){this.cacheItems=[]}return e.prototype.postConstruct=function(){this.active=this.gridOptionsWrapper.isKeepDetailRows(),this.maxCacheSize=this.gridOptionsWrapper.getKeepDetailRowsCount()},e.prototype.addOrDestroy=function(e,t,o){if(!this.active||!e.detail)this.destroyFullWidthRow(o);else{var i=this.getCacheItem(e,!0);switch(t){case r.Column.PINNED_LEFT:this.destroyFullWidthRow(i.left),i.left=o;break;case r.Column.PINNED_RIGHT:this.destroyFullWidthRow(i.right),i.right=o;break;default:this.destroyFullWidthRow(i.center),i.center=o}this.cacheItems.sort(function(e,t){return t.lastAccessedTime-e.lastAccessedTime}),this.purgeCache(this.maxCacheSize)}},e.prototype.getCacheItem=function(e,t){var o;void 0===t&&(t=!1);for(var i=0;i<this.cacheItems.length;i++){var n=this.cacheItems[i];if(n.rowNode===e){o=n;break}}return!o&&t&&(o={rowNode:e},this.cacheItems.push(o)),o&&this.stampCacheItem(o),o},e.prototype.stampCacheItem=function(e){e.lastAccessedTime=(new Date).getTime()},e.prototype.destroyFullWidthRow=function(e){e&&e.destroy&&e.destroy()},e.prototype.purgeCache=function(e){for(var t=e;t<this.cacheItems.length;t++){var o=this.cacheItems[t];this.destroyFullWidthRow(o.center),this.destroyFullWidthRow(o.left),this.destroyFullWidthRow(o.right)}this.cacheItems.length>e&&(this.cacheItems.length=e)},e.prototype.get=function(e,t){if(e.detail){var o,i=this.getCacheItem(e);if(i)switch(t){case r.Column.PINNED_LEFT:i.left&&(o=i.left,i.left=void 0);break;case r.Column.PINNED_RIGHT:i.right&&(o=i.right,i.right=void 0);break;default:i.center&&(o=i.center,i.center=void 0)}return o}},e.prototype.destroy=function(){this.purgeCache(0)},i([s.Autowired(\"gridOptionsWrapper\"),n(\"design:type\",a.GridOptionsWrapper)],e.prototype,\"gridOptionsWrapper\",void 0),i([s.PostConstruct,n(\"design:type\",Function),n(\"design:paramtypes\",[]),n(\"design:returntype\",void 0)],e.prototype,\"postConstruct\",null),i([s.PreDestroy,n(\"design:type\",Function),n(\"design:paramtypes\",[]),n(\"design:returntype\",void 0)],e.prototype,\"destroy\",null),e=i([s.Bean(\"detailRowCompCache\")],e)}();t.DetailRowCompCache=l},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}),r=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},s=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(7),l=o(0),p=o(11),u=o(15),d=o(9),c=o(4),h=o(57),f=o(2),g=o(86),y=o(58),v=o(8),m=o(23),C=o(3),E=o(16),w=o(38),R=o(10),_=o(164),O=o(5),S=o(46),b=o(31),P=o(88),A=o(43),D=o(1),T=function(e){function t(o,i,n){var r=e.call(this,t.TEMPLATE)||this;return r.column=o,r.dragSourceDropTarget=i,r.pinned=n,r}return n(t,e),t.prototype.getColumn=function(){return this.column},t.prototype.getComponentHolder=function(){return this.column.getColDef()},t.prototype.init=function(){var e=this.getComponentHolder(),t=this.columnController.getDisplayNameForColumn(this.column,\"header\",!0),o=e.sortable,i=this.menuFactory.isMenuEnabled(this.column)&&!e.suppressMenu;this.appendHeaderComp(t,o,i),this.setupWidth(),this.setupMovingCss(),this.setupTooltip(),this.setupResize(),this.setupMenuClass(),this.setupSortableClass(o),this.addColumnHoverListener(),this.addFeature(this.getContext(),new P.HoverFeature([this.column],this.getGui())),this.addDestroyableEventListener(this.column,p.Column.EVENT_FILTER_ACTIVE_CHANGED,this.onFilterChanged.bind(this)),this.onFilterChanged(),this.addFeature(this.getContext(),new _.SelectAllFeature(this.cbSelectAll,this.column));var n=new y.SetLeftFeature(this.column,this.getGui(),this.beans);n.init(),this.addDestroyFunc(n.destroy.bind(n)),this.addAttributes(),g.CssClassApplier.addHeaderClassesFromColDef(e,this.getGui(),this.gridOptionsWrapper,this.column,null)},t.prototype.addColumnHoverListener=function(){this.addDestroyableEventListener(this.eventService,O.Events.EVENT_COLUMN_HOVER_CHANGED,this.onColumnHover.bind(this)),this.onColumnHover()},t.prototype.onColumnHover=function(){var e=this.columnHoverService.isHovered(this.column);D._.addOrRemoveCssClass(this.getGui(),\"ag-column-hover\",e)},t.prototype.setupSortableClass=function(e){if(e){var t=this.getGui();D._.addCssClass(t,\"ag-header-cell-sortable\")}},t.prototype.onFilterChanged=function(){var e=this.column.isFilterActive();D._.addOrRemoveCssClass(this.getGui(),\"ag-header-cell-filtered\",e)},t.prototype.appendHeaderComp=function(e,t,o){var i=this,n={column:this.column,displayName:e,enableSorting:t,enableMenu:o,showColumnMenu:function(e){i.gridApi.showColumnMenuAfterButtonClick(i.column,e)},progressSort:function(e){i.sortController.progressSort(i.column,!!e,\"uiColumnSorted\")},setSort:function(e,t){i.sortController.setSortForColumn(i.column,e,!!t,\"uiColumnSorted\")},api:this.gridApi,columnApi:this.columnApi,context:this.gridOptionsWrapper.getContext()},r=this.afterHeaderCompCreated.bind(this,e);this.userComponentFactory.newHeaderComponent(n).then(r)},t.prototype.afterHeaderCompCreated=function(e,t){this.appendChild(t),this.setupMove(t.getGui(),e)},t.prototype.onColumnMovingChanged=function(){this.column.isMoving()?D._.addCssClass(this.getGui(),\"ag-header-cell-moving\"):D._.removeCssClass(this.getGui(),\"ag-header-cell-moving\")},t.prototype.setupMove=function(e,t){var o=this;if(!(this.gridOptionsWrapper.isSuppressMovableColumns()||this.getComponentHolder().suppressMovable||this.column.getColDef().lockPosition)&&e){var i={type:u.DragSourceType.HeaderCell,eElement:e,dragItemCallback:function(){return o.createDragItem()},dragItemName:t,dragSourceDropTarget:this.dragSourceDropTarget,dragStarted:function(){return o.column.setMoving(!0,\"uiColumnMoved\")},dragStopped:function(){return o.column.setMoving(!1,\"uiColumnMoved\")}};this.dragAndDropService.addDragSource(i,!0),this.addDestroyFunc(function(){return o.dragAndDropService.removeDragSource(i)})}},t.prototype.createDragItem=function(){var e={};return e[this.column.getId()]=this.column.isVisible(),{columns:[this.column],visibleState:e}},t.prototype.setupResize=function(){var e=this,t=this.getComponentHolder();if(this.eResize)if(this.column.isResizable()){var o=this.horizontalResizeService.addResizeBar({eResizeBar:this.eResize,onResizeStart:this.onResizeStart.bind(this),onResizing:this.onResizing.bind(this,!1),onResizeEnd:this.onResizing.bind(this,!0)});if(this.addDestroyFunc(o),!this.gridOptionsWrapper.isSuppressAutoSize()&&!t.suppressAutoSize){this.addDestroyableEventListener(this.eResize,\"dblclick\",function(){e.columnController.autoSizeColumn(e.column,\"uiColumnResized\")});var i=new A.TouchListener(this.eResize);this.addDestroyableEventListener(i,A.TouchListener.EVENT_DOUBLE_TAP,function(){e.columnController.autoSizeColumn(e.column,\"uiColumnResized\")}),this.addDestroyFunc(i.destroy.bind(i))}}else D._.removeFromParent(this.eResize)},t.prototype.onResizing=function(e,t){var o=this.normaliseResizeAmount(t),i=this.resizeStartWidth+o;this.columnController.setColumnWidth(this.column,i,this.resizeWithShiftKey,e,\"uiColumnDragged\"),e&&D._.removeCssClass(this.getGui(),\"ag-column-resizing\")},t.prototype.onResizeStart=function(e){this.resizeStartWidth=this.column.getActualWidth(),this.resizeWithShiftKey=e,D._.addCssClass(this.getGui(),\"ag-column-resizing\")},t.prototype.getTooltipText=function(){return this.getComponentHolder().headerTooltip},t.prototype.setupTooltip=function(){var e=this.getTooltipText();null!=e&&(this.gridOptionsWrapper.isEnableBrowserTooltips()?this.getGui().setAttribute(\"title\",e):this.beans.tooltipManager.registerTooltip(this))},t.prototype.setupMovingCss=function(){this.addDestroyableEventListener(this.column,p.Column.EVENT_MOVING_CHANGED,this.onColumnMovingChanged.bind(this)),this.onColumnMovingChanged()},t.prototype.addAttributes=function(){this.getGui().setAttribute(\"col-id\",this.column.getColId())},t.prototype.setupWidth=function(){this.addDestroyableEventListener(this.column,p.Column.EVENT_WIDTH_CHANGED,this.onColumnWidthChanged.bind(this)),this.onColumnWidthChanged()},t.prototype.setupMenuClass=function(){this.addDestroyableEventListener(this.column,p.Column.EVENT_MENU_VISIBLE_CHANGED,this.onMenuVisible.bind(this)),this.onColumnWidthChanged()},t.prototype.onMenuVisible=function(){this.addOrRemoveCssClass(\"ag-column-menu-visible\",this.column.isMenuVisible())},t.prototype.onColumnWidthChanged=function(){this.getGui().style.width=this.column.getActualWidth()+\"px\"},t.prototype.normaliseResizeAmount=function(e){var t=e;return this.gridOptionsWrapper.isEnableRtl()?this.pinned!==p.Column.PINNED_LEFT&&(t*=-1):this.pinned===p.Column.PINNED_RIGHT&&(t*=-1),t},t.TEMPLATE='<div class=\"ag-header-cell\" role=\"presentation\" unselectable=\"on\"><div ref=\"eResize\" class=\"ag-header-cell-resize\" role=\"presentation\"></div><ag-checkbox ref=\"cbSelectAll\" class=\"ag-header-select-all\" role=\"presentation\"></ag-checkbox></div>',r([l.Autowired(\"gridOptionsWrapper\"),s(\"design:type\",f.GridOptionsWrapper)],t.prototype,\"gridOptionsWrapper\",void 0),r([l.Autowired(\"dragAndDropService\"),s(\"design:type\",u.DragAndDropService)],t.prototype,\"dragAndDropService\",void 0),r([l.Autowired(\"columnController\"),s(\"design:type\",c.ColumnController)],t.prototype,\"columnController\",void 0),r([l.Autowired(\"horizontalResizeService\"),s(\"design:type\",h.HorizontalResizeService)],t.prototype,\"horizontalResizeService\",void 0),r([l.Autowired(\"menuFactory\"),s(\"design:type\",Object)],t.prototype,\"menuFactory\",void 0),r([l.Autowired(\"gridApi\"),s(\"design:type\",v.GridApi)],t.prototype,\"gridApi\",void 0),r([l.Autowired(\"columnApi\"),s(\"design:type\",d.ColumnApi)],t.prototype,\"columnApi\",void 0),r([l.Autowired(\"sortController\"),s(\"design:type\",m.SortController)],t.prototype,\"sortController\",void 0),r([l.Autowired(\"eventService\"),s(\"design:type\",C.EventService)],t.prototype,\"eventService\",void 0),r([l.Autowired(\"userComponentFactory\"),s(\"design:type\",E.UserComponentFactory)],t.prototype,\"userComponentFactory\",void 0),r([l.Autowired(\"columnHoverService\"),s(\"design:type\",S.ColumnHoverService)],t.prototype,\"columnHoverService\",void 0),r([l.Autowired(\"beans\"),s(\"design:type\",b.Beans)],t.prototype,\"beans\",void 0),r([R.RefSelector(\"eResize\"),s(\"design:type\",HTMLElement)],t.prototype,\"eResize\",void 0),r([R.RefSelector(\"cbSelectAll\"),s(\"design:type\",w.AgCheckbox)],t.prototype,\"cbSelectAll\",void 0),r([l.PostConstruct,s(\"design:type\",Function),s(\"design:paramtypes\",[]),s(\"design:returntype\",void 0)],t.prototype,\"init\",null),t}(a.Component);t.HeaderWrapperComp=T},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(0),s=o(11),a=o(2),l=o(4),p=o(39),u=o(6),d=o(1),c=function(){function e(){}var t;return t=e,e.prototype.createAutoGroupColumns=function(e){var t=this,o=[],i=this.gridOptionsWrapper.isTreeData(),n=this.gridOptionsWrapper.isGroupMultiAutoColumn();return i&&n&&(console.warn(\"ag-Grid: you cannot mix groupMultiAutoColumn with treeData, only one column can be used to display groups when doing tree data\"),n=!1),n?e.forEach(function(e,i){o.push(t.createOneAutoGroupColumn(e,i))}):o.push(this.createOneAutoGroupColumn()),o},e.prototype.createOneAutoGroupColumn=function(e,o){var i,n=this.generateDefaultColDef(e);i=e?u.Constants.GROUP_AUTO_COLUMN_ID+\"-\"+e.getId():t.GROUP_AUTO_COLUMN_BUNDLE_ID;var r=this.gridOptionsWrapper.getAutoGroupColumnDef();(d._.mergeDeep(n,r),(n=this.columnFactory.mergeColDefs(n)).colId=i,this.gridOptionsWrapper.isTreeData())||d._.missing(n.field)&&d._.missing(n.valueGetter)&&d._.missing(n.filterValueGetter)&&(n.filter=!1);o&&o>0&&(n.headerCheckboxSelection=!1);var a=new s.Column(n,null,i,!0);return this.context.wireBean(a),a},e.prototype.generateDefaultColDef=function(e){var t=this.gridOptionsWrapper.getAutoGroupColumnDef(),o={headerName:this.gridOptionsWrapper.getLocaleTextFunc()(\"group\",\"Group\")};if(t&&(t.cellRenderer||t.cellRendererFramework)||(o.cellRenderer=\"agGroupCellRenderer\"),e){var i=e.getColDef();d._.assign(o,{headerName:this.columnController.getDisplayNameForColumn(e,\"header\"),headerValueGetter:i.headerValueGetter}),i.cellRenderer&&d._.assign(o,{cellRendererParams:{innerRenderer:i.cellRenderer,innerRendererParams:i.cellRendererParams}}),o.showRowGroup=e.getColId()}else o.showRowGroup=!0;return o},e.GROUP_AUTO_COLUMN_BUNDLE_ID=u.Constants.GROUP_AUTO_COLUMN_ID,i([r.Autowired(\"gridOptionsWrapper\"),n(\"design:type\",a.GridOptionsWrapper)],e.prototype,\"gridOptionsWrapper\",void 0),i([r.Autowired(\"context\"),n(\"design:type\",r.Context)],e.prototype,\"context\",void 0),i([r.Autowired(\"columnController\"),n(\"design:type\",l.ColumnController)],e.prototype,\"columnController\",void 0),i([r.Autowired(\"columnFactory\"),n(\"design:type\",p.ColumnFactory)],e.prototype,\"columnFactory\",void 0),e=t=i([r.Bean(\"autoGroupColService\")],e)}();t.AutoGroupColService=c},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(0),s=o(6),a=o(2),l=o(1),p=function(){function e(){}return e.prototype.postConstruct=function(){this.rowModel.getType()===s.Constants.ROW_MODEL_TYPE_CLIENT_SIDE&&(this.clientSideRowModel=this.rowModel)},e.prototype.createTransactionForRowData=function(e){if(l._.missing(this.clientSideRowModel))console.error(\"ag-Grid: ImmutableService only works with ClientSideRowModel\");else{var t=this.gridOptionsWrapper.getRowNodeIdFunc();if(t&&!l._.missing(t)){var o={remove:[],update:[],add:[]},i=this.clientSideRowModel.getCopyOfNodesMap(),n=this.gridOptionsWrapper.isSuppressMaintainUnsortedOrder()?null:{};return l._.exists(e)&&e.forEach(function(e,r){var s=t(e),a=i[s];(n&&(n[s]=r),a)?(a.data!==e&&o.update.push(e),i[s]=void 0):o.add.push(e)}),l._.iterateObject(i,function(e,t){t&&o.remove.push(t.data)}),[o,n]}console.error(\"ag-Grid: ImmutableService requires getRowNodeId() callback to be implemented, your row data need IDs!\")}},i([r.Autowired(\"rowModel\"),n(\"design:type\",Object)],e.prototype,\"rowModel\",void 0),i([r.Autowired(\"gridOptionsWrapper\"),n(\"design:type\",a.GridOptionsWrapper)],e.prototype,\"gridOptionsWrapper\",void 0),i([r.PostConstruct,n(\"design:type\",Function),n(\"design:paramtypes\",[]),n(\"design:returntype\",void 0)],e.prototype,\"postConstruct\",null),e=i([r.Bean(\"immutableService\")],e)}();t.ImmutableService=p},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */Object.defineProperty(t,\"__esModule\",{value:!0});var i=function(){function e(){}return e.STRING_PROPERTIES=[\"headerName\",\"columnGroupShow\",\"headerClass\",\"toolPanelClass\",\"headerValueGetter\",\"pivotKeys\",\"groupId\",\"colId\",\"sort\",\"field\",\"type\",\"tooltipComponent\",\"tooltipField\",\"headerTooltip\",\"cellClass\",\"showRowGroup\",\"template\",\"templateUrl\",\"filter\",\"aggFunc\",\"cellRenderer\",\"cellEditor\",\"pinned\",\"chartDataType\"],e.OBJECT_PROPERTIES=[\"headerGroupComponent\",\"headerGroupComponentFramework\",\"headerGroupComponentParams\",\"cellStyle\",\"cellRendererParams\",\"cellEditorFramework\",\"cellEditorParams\",\"pinnedRowCellRendererFramework\",\"pinnedRowCellRendererParams\",\"filterFramework\",\"filterParams\",\"pivotValueColumn\",\"headerComponent\",\"headerComponentFramework\",\"headerComponentParams\",\"floatingFilterComponent\",\"floatingFilterComponentParams\",\"floatingFilterComponentFramework\",\"tooltipComponent\",\"tooltipComponentParams\",\"tooltipComponentFramework\",\"refData\"],e.ARRAY_PROPERTIES=[\"children\",\"sortingOrder\",\"allowedAggFuncs\",\"menuTabs\",\"pivotTotalColumnIds\",\"cellClassRules\",\"icons\"],e.NUMBER_PROPERTIES=[\"sortedAt\",\"width\",\"minWidth\",\"maxWidth\",\"rowGroupIndex\",\"pivotIndex\"],e.BOOLEAN_PROPERTIES=[\"suppressCellFlash\",\"suppressToolPanel\",\"openByDefault\",\"marryChildren\",\"hide\",\"rowGroup\",\"pivot\",\"checkboxSelection\",\"headerCheckboxSelection\",\"headerCheckboxSelectionFilteredOnly\",\"suppressMenu\",\"suppressSorting\",\"suppressMovable\",\"suppressFilter\",\"lockPosition\",\"lockVisible\",\"lockPinned\",\"unSortIcon\",\"suppressSizeToFit\",\"suppressResize\",\"suppressAutoSize\",\"enableRowGroup\",\"enablePivot\",\"enableValue\",\"editable\",\"suppressPaste\",\"suppressNavigable\",\"enableCellChangeFlash\",\"rowDrag\",\"dndSource\",\"autoHeight\",\"sortable\",\"resizable\",\"singleClickEdit\"],e.FUNCTION_PROPERTIES=[\"dndSourceOnRowDrag\",\"valueGetter\",\"valueSetter\",\"filterValueGetter\",\"keyCreator\",\"cellRenderer\",\"cellRendererFramework\",\"pinnedRowCellRenderer\",\"valueFormatter\",\"pinnedRowValueFormatter\",\"valueParser\",\"comparator\",\"equals\",\"pivotComparator\",\"suppressKeyboardEvent\",\"colSpan\",\"rowSpan\",\"getQuickFilterText\",\"newValueHandler\",\"onCellValueChanged\",\"onCellClicked\",\"onCellDoubleClicked\",\"onCellContextMenu\",\"tooltip\",\"tooltipValueGetter\",\"tooltipComponent\",\"tooltipComponentFramework\",\"cellRendererSelector\",\"cellEditorSelector\"],e.ALL_PROPERTIES=e.ARRAY_PROPERTIES.concat(e.OBJECT_PROPERTIES).concat(e.STRING_PROPERTIES).concat(e.NUMBER_PROPERTIES).concat(e.FUNCTION_PROPERTIES).concat(e.BOOLEAN_PROPERTIES),e.FRAMEWORK_PROPERTIES=[\"__ob__\",\"__metadata__\",\"mappedColumnProperties\",\"hasChildColumns\",\"toColDef\",\"createColDefFromGridColumn\"],e}();t.ColDefUtil=i},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */Object.defineProperty(t,\"__esModule\",{value:!0});var i=function(){function e(){}return e.parse=function(t){if(!t)return null;if(!0===t)return{toolPanels:[e.DEFAULT_COLUMN_COMP,e.DEFAULT_FILTER_COMP],defaultToolPanel:\"columns\"};if(\"string\"==typeof t)return e.parse([t]);if(Array.isArray(t)){var o=[];return t.forEach(function(t){var i=e.DEFAULT_BY_KEY[t];i?o.push(i):console.warn(\"ag-grid: the key \"+t+\" is not a valid key for specifying a tool panel, valid keys are: \"+Object.keys(e.DEFAULT_BY_KEY).join(\",\"))}),0===o.length?null:{toolPanels:o,defaultToolPanel:o[0].id}}return{toolPanels:e.parseComponents(t.toolPanels),defaultToolPanel:t.defaultToolPanel,hiddenByDefault:t.hiddenByDefault}},e.parseComponents=function(t){var o=[];return t.forEach(function(t){var i=null;if(\"string\"==typeof t){var n=e.DEFAULT_BY_KEY[t];if(!n)return void console.warn(\"ag-grid: the key \"+t+\" is not a valid key for specifying a tool panel, valid keys are: \"+Object.keys(e.DEFAULT_BY_KEY).join(\",\"));i=n}else i=t;o.push(i)}),o},e.DEFAULT_COLUMN_COMP={id:\"columns\",labelDefault:\"Columns\",labelKey:\"columns\",iconKey:\"columns\",toolPanel:\"agColumnsToolPanel\"},e.DEFAULT_FILTER_COMP={id:\"filters\",labelDefault:\"Filters\",labelKey:\"filters\",iconKey:\"filter\",toolPanel:\"agFiltersToolPanel\"},e.DEFAULT_BY_KEY={columns:e.DEFAULT_COLUMN_COMP,filters:e.DEFAULT_FILTER_COMP},e}();t.SideBarDefParser=i},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */Object.defineProperty(t,\"__esModule\",{value:!0});var i=o(1),n=function(){function e(){this.existingKeys=[]}return e.prototype.addExistingKeys=function(e){this.existingKeys=this.existingKeys.concat(e)},e.prototype.getUniqueKey=function(e,t){e=i._.toStringOrNull(e);for(var o=0;;){var n=void 0;if(e?(n=e,0!==o&&(n+=\"_\"+o)):t?(n=t,0!==o&&(n+=\"_\"+o)):n=\"\"+o,this.existingKeys.indexOf(n)<0)return this.existingKeys.push(n),n;o++}},e}();t.ColumnKeyCreator=n},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(2),s=o(0),a=o(15),l=o(4),p=o(3),u=o(5),d=o(118),c=o(119),h=o(11),f=o(48),g=o(1),y=function(){function e(e,t,o){this.headerRowComps=[],this.eContainer=e,this.pinned=o,this.eViewport=t}return e.prototype.registerGridComp=function(e){this.setupDragAndDrop(e)},e.prototype.forEachHeaderElement=function(e){this.headerRowComps.forEach(function(t){return t.forEachHeaderElement(e)})},e.prototype.init=function(){this.scrollWidth=this.gridOptionsWrapper.getScrollbarWidth(),this.eventService.addEventListener(u.Events.EVENT_COLUMN_VALUE_CHANGED,this.onColumnValueChanged.bind(this)),this.eventService.addEventListener(u.Events.EVENT_COLUMN_ROW_GROUP_CHANGED,this.onColumnRowGroupChanged.bind(this)),this.eventService.addEventListener(u.Events.EVENT_GRID_COLUMNS_CHANGED,this.onGridColumnsChanged.bind(this)),this.eventService.addEventListener(u.Events.EVENT_SCROLL_VISIBILITY_CHANGED,this.onScrollVisibilityChanged.bind(this)),this.eventService.addEventListener(u.Events.EVENT_COLUMN_RESIZED,this.onColumnResized.bind(this)),this.eventService.addEventListener(u.Events.EVENT_DISPLAYED_COLUMNS_CHANGED,this.onDisplayedColumnsChanged.bind(this))},e.prototype.onColumnRowGroupChanged=function(){this.onGridColumnsChanged()},e.prototype.onColumnValueChanged=function(){this.onGridColumnsChanged()},e.prototype.onColumnResized=function(){this.setWidthOfPinnedContainer()},e.prototype.onDisplayedColumnsChanged=function(){this.setWidthOfPinnedContainer()},e.prototype.onScrollVisibilityChanged=function(){this.setWidthOfPinnedContainer()},e.prototype.setWidthOfPinnedContainer=function(){var e=this.pinned===h.Column.PINNED_LEFT,t=this.pinned===h.Column.PINNED_RIGHT,o=this.columnController,i=this.gridOptionsWrapper.isEnableRtl();if(e||t){var n=o[e?\"getPinnedLeftContainerWidth\":\"getPinnedRightContainerWidth\"]();this.scrollVisibleService.isVerticalScrollShowing()&&(i&&e||!i&&t)&&(n+=this.scrollWidth),g._.setFixedWidth(this.eContainer,n)}},e.prototype.destroy=function(){this.removeHeaderRowComps()},e.prototype.getRowComps=function(){return this.headerRowComps},e.prototype.onGridColumnsChanged=function(){this.removeAndCreateAllRowComps()},e.prototype.removeAndCreateAllRowComps=function(){this.removeHeaderRowComps(),this.createHeaderRowComps()},e.prototype.refresh=function(){this.removeAndCreateAllRowComps()},e.prototype.setupDragAndDrop=function(e){var t=this.eViewport?this.eViewport:this.eContainer,o=new c.BodyDropTarget(this.pinned,t);this.context.wireBean(o),o.registerGridComp(e)},e.prototype.removeHeaderRowComps=function(){this.headerRowComps.forEach(function(e){e.destroy()}),this.headerRowComps.length=0,g._.clearElement(this.eContainer)},e.prototype.createHeaderRowComps=function(){for(var e=this.columnController.getHeaderRowCount(),t=0;t<e;t++){var o=t!==e-1?d.HeaderRowType.COLUMN_GROUP:d.HeaderRowType.COLUMN,i=new d.HeaderRowComp(t,o,this.pinned,this.dropTarget);this.context.wireBean(i),this.headerRowComps.push(i),i.getGui().setAttribute(\"aria-rowindex\",this.headerRowComps.length.toString()),this.eContainer.appendChild(i.getGui())}if(this.gridOptionsWrapper.isFloatingFilter()&&!this.columnController.isPivotMode()){i=new d.HeaderRowComp(e,d.HeaderRowType.FLOATING_FILTER,this.pinned,this.dropTarget);this.context.wireBean(i),this.headerRowComps.push(i),i.getGui().setAttribute(\"aria-rowindex\",this.headerRowComps.length.toString()),this.eContainer.appendChild(i.getGui())}},i([s.Autowired(\"gridOptionsWrapper\"),n(\"design:type\",r.GridOptionsWrapper)],e.prototype,\"gridOptionsWrapper\",void 0),i([s.Autowired(\"context\"),n(\"design:type\",s.Context)],e.prototype,\"context\",void 0),i([s.Autowired(\"$scope\"),n(\"design:type\",Object)],e.prototype,\"$scope\",void 0),i([s.Autowired(\"dragAndDropService\"),n(\"design:type\",a.DragAndDropService)],e.prototype,\"dragAndDropService\",void 0),i([s.Autowired(\"columnController\"),n(\"design:type\",l.ColumnController)],e.prototype,\"columnController\",void 0),i([s.Autowired(\"eventService\"),n(\"design:type\",p.EventService)],e.prototype,\"eventService\",void 0),i([s.Autowired(\"scrollVisibleService\"),n(\"design:type\",f.ScrollVisibleService)],e.prototype,\"scrollVisibleService\",void 0),i([s.PostConstruct,n(\"design:type\",Function),n(\"design:paramtypes\",[]),n(\"design:returntype\",void 0)],e.prototype,\"init\",null),e}();t.HeaderContainer=y},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}),r=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},s=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var a,l=o(7),p=o(0),u=o(2),d=o(4),c=o(11),h=o(3),f=o(5),g=o(111),y=o(167),v=o(14),m=o(8),C=o(6),E=o(1),w=o(168);!function(e){e[e.COLUMN_GROUP=0]=\"COLUMN_GROUP\",e[e.COLUMN=1]=\"COLUMN\",e[e.FLOATING_FILTER=2]=\"FLOATING_FILTER\"}(a=t.HeaderRowType||(t.HeaderRowType={}));var R=function(e){function t(t,o,i,n){var r=e.call(this,'<div class=\"ag-header-row\" role=\"row\"/>')||this;return r.headerComps={},r.dept=t,r.type=o,r.pinned=i,r.dropTarget=n,r}return n(t,e),t.prototype.forEachHeaderElement=function(e){var t=this;Object.keys(this.headerComps).forEach(function(o){e(t.headerComps[o])})},t.prototype.destroy=function(){var t=Object.keys(this.headerComps);this.removeAndDestroyChildComponents(t),e.prototype.destroy.call(this)},t.prototype.removeAndDestroyChildComponents=function(e){var t=this;e.forEach(function(e){var o=t.headerComps[e];t.getGui().removeChild(o.getGui()),o.destroy(),delete t.headerComps[e]})},t.prototype.onRowHeightChanged=function(){var e,t,o=this.columnController.getHeaderRowCount(),i=[],n=0;this.columnController.isPivotMode()?(n=0,e=this.gridOptionsWrapper.getPivotGroupHeaderHeight(),t=this.gridOptionsWrapper.getPivotHeaderHeight()):(this.gridOptionsWrapper.isFloatingFilter()&&o++,n=this.gridOptionsWrapper.isFloatingFilter()?1:0,e=this.gridOptionsWrapper.getGroupHeaderHeight(),t=this.gridOptionsWrapper.getHeaderHeight());for(var r=o-(1+n),s=0;s<r;s++)i.push(e);i.push(t);for(s=0;s<n;s++)i.push(this.gridOptionsWrapper.getFloatingFiltersHeight());var a=0;for(s=0;s<this.dept;s++)a+=i[s];this.getGui().style.top=a+\"px\",this.getGui().style.height=i[this.dept]+\"px\"},t.prototype.init=function(){this.onRowHeightChanged(),this.onVirtualColumnsChanged(),this.setWidth(),this.addDestroyableEventListener(this.gridOptionsWrapper,u.GridOptionsWrapper.PROP_HEADER_HEIGHT,this.onRowHeightChanged.bind(this)),this.addDestroyableEventListener(this.gridOptionsWrapper,u.GridOptionsWrapper.PROP_PIVOT_HEADER_HEIGHT,this.onRowHeightChanged.bind(this)),this.addDestroyableEventListener(this.gridOptionsWrapper,u.GridOptionsWrapper.PROP_GROUP_HEADER_HEIGHT,this.onRowHeightChanged.bind(this)),this.addDestroyableEventListener(this.gridOptionsWrapper,u.GridOptionsWrapper.PROP_PIVOT_GROUP_HEADER_HEIGHT,this.onRowHeightChanged.bind(this)),this.addDestroyableEventListener(this.gridOptionsWrapper,u.GridOptionsWrapper.PROP_FLOATING_FILTERS_HEIGHT,this.onRowHeightChanged.bind(this)),this.addDestroyableEventListener(this.eventService,f.Events.EVENT_VIRTUAL_COLUMNS_CHANGED,this.onVirtualColumnsChanged.bind(this)),this.addDestroyableEventListener(this.eventService,f.Events.EVENT_DISPLAYED_COLUMNS_CHANGED,this.onDisplayedColumnsChanged.bind(this)),this.addDestroyableEventListener(this.eventService,f.Events.EVENT_COLUMN_RESIZED,this.onColumnResized.bind(this)),this.addDestroyableEventListener(this.eventService,f.Events.EVENT_GRID_COLUMNS_CHANGED,this.onGridColumnsChanged.bind(this))},t.prototype.onColumnResized=function(){this.setWidth()},t.prototype.setWidth=function(){var e=this.getWidthForRow();this.getGui().style.width=e+\"px\"},t.prototype.getWidthForRow=function(){return this.gridOptionsWrapper.getDomLayout()===C.Constants.DOM_LAYOUT_PRINT?E._.missing(this.pinned)?this.columnController.getContainerWidth(c.Column.PINNED_RIGHT)+this.columnController.getContainerWidth(c.Column.PINNED_LEFT)+this.columnController.getContainerWidth(null):0:this.columnController.getContainerWidth(this.pinned)},t.prototype.onGridColumnsChanged=function(){this.removeAndDestroyAllChildComponents()},t.prototype.removeAndDestroyAllChildComponents=function(){var e=Object.keys(this.headerComps);this.removeAndDestroyChildComponents(e)},t.prototype.onDisplayedColumnsChanged=function(){this.onVirtualColumnsChanged(),this.setWidth()},t.prototype.getItemsAtDept=function(){var e=this;if(this.gridOptionsWrapper.getDomLayout()===C.Constants.DOM_LAYOUT_PRINT){if(E._.missing(this.pinned)){var t=[];return[c.Column.PINNED_LEFT,null,c.Column.PINNED_RIGHT].forEach(function(o){var i=e.columnController.getVirtualHeaderGroupRow(o,e.type==a.FLOATING_FILTER?e.dept-1:e.dept);t=t.concat(i)}),t}return[]}return this.columnController.getVirtualHeaderGroupRow(this.pinned,this.type==a.FLOATING_FILTER?this.dept-1:this.dept)},t.prototype.onVirtualColumnsChanged=function(){var e,t=this,o=Object.keys(this.headerComps),i=this.getItemsAtDept(),n=this.gridOptionsWrapper.isEnsureDomOrder();i.forEach(function(i){if(!i.isEmptyGroup()){var r,s,a=i.getUniqueId(),l=t.getGui();o.indexOf(a)>=0?(E._.removeFromArray(o,a),s=(r=t.headerComps[a]).getGui(),n&&E._.ensureDomOrder(l,s,e),e=s):(r=t.createHeaderComp(i),t.headerComps[a]=r,s=r.getGui(),n?E._.insertWithDomOrder(l,s,e):l.appendChild(s),e=s)}}),this.removeAndDestroyChildComponents(o)},t.prototype.createHeaderComp=function(e){var t;switch(this.type){case a.COLUMN:t=new g.HeaderWrapperComp(e,this.dropTarget,this.pinned);break;case a.COLUMN_GROUP:t=new y.HeaderGroupWrapperComp(e,this.dropTarget,this.pinned);break;case a.FLOATING_FILTER:t=new w.FloatingFilterWrapper(e)}return this.getContext().wireBean(t),t},r([p.Autowired(\"gridOptionsWrapper\"),s(\"design:type\",u.GridOptionsWrapper)],t.prototype,\"gridOptionsWrapper\",void 0),r([p.Autowired(\"gridApi\"),s(\"design:type\",m.GridApi)],t.prototype,\"gridApi\",void 0),r([p.Autowired(\"columnController\"),s(\"design:type\",d.ColumnController)],t.prototype,\"columnController\",void 0),r([p.Autowired(\"eventService\"),s(\"design:type\",h.EventService)],t.prototype,\"eventService\",void 0),r([p.Autowired(\"filterManager\"),s(\"design:type\",v.FilterManager)],t.prototype,\"filterManager\",void 0),r([p.PostConstruct,s(\"design:type\",Function),s(\"design:paramtypes\",[]),s(\"design:returntype\",void 0)],t.prototype,\"init\",null),t}(l.Component);t.HeaderRowComp=R},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var r,s=o(15),a=o(0),l=o(120),p=o(11),u=o(121),d=o(4);!function(e){e[e.ColumnMove=0]=\"ColumnMove\",e[e.Pivot=1]=\"Pivot\"}(r||(r={}));var c=function(){function e(e,t){this.dropListeners={},this.pinned=e,this.eContainer=t}return e.prototype.registerGridComp=function(e){switch(this.gridPanel=e,this.moveColumnController.registerGridComp(e),this.pinned){case p.Column.PINNED_LEFT:this.eSecondaryContainers=this.gridPanel.getDropTargetLeftContainers();break;case p.Column.PINNED_RIGHT:this.eSecondaryContainers=this.gridPanel.getDropTargetRightContainers();break;default:this.eSecondaryContainers=this.gridPanel.getDropTargetBodyContainers()}},e.prototype.isInterestedIn=function(e){return e===s.DragSourceType.HeaderCell||e===s.DragSourceType.ToolPanel},e.prototype.getSecondaryContainers=function(){return this.eSecondaryContainers},e.prototype.getContainer=function(){return this.eContainer},e.prototype.init=function(){this.moveColumnController=new l.MoveColumnController(this.pinned,this.eContainer),this.context.wireBean(this.moveColumnController);var e=new u.BodyDropPivotTarget(this.pinned);this.context.wireBean(e),this.dropListeners[r.ColumnMove]=this.moveColumnController,this.dropListeners[r.Pivot]=e,this.dragAndDropService.addDropTarget(this)},e.prototype.getIconName=function(){return this.currentDropListener.getIconName()},e.prototype.getDropType=function(e){return this.columnController.isPivotMode()&&e.dragSource.type===s.DragSourceType.ToolPanel?r.Pivot:r.ColumnMove},e.prototype.onDragEnter=function(e){var t=this.getDropType(e);this.currentDropListener=this.dropListeners[t],this.currentDropListener.onDragEnter(e)},e.prototype.onDragLeave=function(e){this.currentDropListener.onDragLeave(e)},e.prototype.onDragging=function(e){this.currentDropListener.onDragging(e)},e.prototype.onDragStop=function(e){this.currentDropListener.onDragStop(e)},i([a.Autowired(\"context\"),n(\"design:type\",a.Context)],e.prototype,\"context\",void 0),i([a.Autowired(\"dragAndDropService\"),n(\"design:type\",s.DragAndDropService)],e.prototype,\"dragAndDropService\",void 0),i([a.Autowired(\"columnController\"),n(\"design:type\",d.ColumnController)],e.prototype,\"columnController\",void 0),i([a.PostConstruct,n(\"design:type\",Function),n(\"design:paramtypes\",[]),n(\"design:returntype\",void 0)],e.prototype,\"init\",null),e}();t.BodyDropTarget=c},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(0),s=o(12),a=o(4),l=o(11),p=o(1),u=o(15),d=o(2),c=function(){function e(e,t){this.needToMoveLeft=!1,this.needToMoveRight=!1,this.pinned=e,this.eContainer=t,this.centerContainer=!p._.exists(e)}return e.prototype.registerGridComp=function(e){this.gridPanel=e},e.prototype.init=function(){this.logger=this.loggerFactory.create(\"MoveColumnController\")},e.prototype.getIconName=function(){return this.pinned?u.DragAndDropService.ICON_PINNED:u.DragAndDropService.ICON_MOVE},e.prototype.onDragEnter=function(e){var t=e.dragItem.columns;if(e.dragSource.type===u.DragSourceType.ToolPanel)this.setColumnsVisible(t,!0,\"uiColumnDragged\");else{var o=e.dragItem.visibleState,i=t.filter(function(e){return o[e.getId()]});this.setColumnsVisible(i,!0,\"uiColumnDragged\")}this.setColumnsPinned(t,this.pinned,\"uiColumnDragged\"),this.onDragging(e,!0)},e.prototype.onDragLeave=function(e){if(!this.gridOptionsWrapper.isSuppressDragLeaveHidesColumns()&&!e.fromNudge){var t=e.dragSource.dragItemCallback().columns;this.setColumnsVisible(t,!1,\"uiColumnDragged\")}this.ensureIntervalCleared()},e.prototype.setColumnsVisible=function(e,t,o){if(void 0===o&&(o=\"api\"),e){var i=e.filter(function(e){return!e.getColDef().lockVisible});this.columnController.setColumnsVisible(i,t,o)}},e.prototype.setColumnsPinned=function(e,t,o){if(void 0===o&&(o=\"api\"),e){var i=e.filter(function(e){return!e.getColDef().lockPinned});this.columnController.setColumnsPinned(i,t,o)}},e.prototype.onDragStop=function(){this.ensureIntervalCleared()},e.prototype.normaliseX=function(e){this.gridOptionsWrapper.isEnableRtl()&&(e=this.eContainer.clientWidth-e);return this.centerContainer&&(e+=this.gridPanel.getCenterViewportScrollLeft()),e},e.prototype.checkCenterForScrolling=function(e){if(this.centerContainer){var t=this.gridPanel.getCenterViewportScrollLeft(),o=t+this.gridPanel.getCenterWidth();this.gridOptionsWrapper.isEnableRtl()?(this.needToMoveRight=e<t+50,this.needToMoveLeft=e>o-50):(this.needToMoveLeft=e<t+50,this.needToMoveRight=e>o-50),this.needToMoveLeft||this.needToMoveRight?this.ensureIntervalStarted():this.ensureIntervalCleared()}},e.prototype.onDragging=function(e,t){var o=this;if(void 0===t&&(t=!1),this.lastDraggingEvent=e,!p._.missing(e.hDirection)){var i=this.normaliseX(e.x);t||this.checkCenterForScrolling(i);var n=this.normaliseDirection(e.hDirection),r=e.dragSource.type,s=e.dragSource.dragItemCallback().columns;s=s.filter(function(e){return!e.getColDef().lockPinned||e.getPinned()==o.pinned}),this.attemptMoveColumns(r,s,n,i,t)}},e.prototype.normaliseDirection=function(e){if(!this.gridOptionsWrapper.isEnableRtl())return e;switch(e){case u.HDirection.Left:return u.HDirection.Right;case u.HDirection.Right:return u.HDirection.Left;default:console.error(\"ag-Grid: Unknown direction \"+e)}},e.prototype.calculateOldIndex=function(e){var t=this.columnController.getAllGridColumns(),o=[];e.forEach(function(e){return o.push(t.indexOf(e))}),p._.sortNumberArray(o);var i=o[0];return p._.last(o)-i!==o.length-1?null:i},e.prototype.attemptMoveColumns=function(e,t,o,i,n){var r=o===u.HDirection.Left,s=o===u.HDirection.Right,a=this.calculateValidMoves(t,s,i),l=this.calculateOldIndex(t);if(0!==a.length){var p=a[0],d=null!==l&&!n;if(e==u.DragSourceType.HeaderCell&&(d=null!==l),d){if(r&&p>=l)return;if(s&&p<=l)return}for(var c=0;c<a.length;c++){var h=a[c];if(this.columnController.doesMovePassRules(t,h))return void this.columnController.moveColumns(t,h,\"uiColumnDragged\")}}},e.prototype.calculateValidMoves=function(e,t,o){var i,n=this.columnController.getDisplayedColumns(this.pinned),r=this.columnController.getAllGridColumns(),s=function(t){return e.indexOf(t)<0},a=n.filter(function(t){return e.indexOf(t)>=0}),l=n.filter(s),p=r.filter(s),u=0,d=o;if(t){var c=0;a.forEach(function(e){return c+=e.getActualWidth()}),d-=c}if(d>0){for(var h=0;h<l.length;h++){if((d-=l[h].getActualWidth())<0)break;u++}t&&u++}if(u>0){var f=l[u-1];i=p.indexOf(f)+1}else i=0;var g=[i];if(t)for(var y=i+1,v=r.length-1;y<=v;)g.push(y),y++;else{y=i,v=r.length-1;for(var m=r[y];y<=v&&this.isColumnHidden(n,m);)y++,g.push(y),m=r[y];y=i-1;for(;y>=0;)g.push(y),y--}return g},e.prototype.isColumnHidden=function(e,t){return e.indexOf(t)<0},e.prototype.ensureIntervalStarted=function(){this.movingIntervalId||(this.intervalCount=0,this.failedMoveAttempts=0,this.movingIntervalId=window.setInterval(this.moveInterval.bind(this),100),this.needToMoveLeft?this.dragAndDropService.setGhostIcon(u.DragAndDropService.ICON_LEFT,!0):this.dragAndDropService.setGhostIcon(u.DragAndDropService.ICON_RIGHT,!0))},e.prototype.ensureIntervalCleared=function(){this.moveInterval&&(window.clearInterval(this.movingIntervalId),this.movingIntervalId=null,this.dragAndDropService.setGhostIcon(u.DragAndDropService.ICON_MOVE))},e.prototype.moveInterval=function(){var e,t;if(this.intervalCount++,(e=10+5*this.intervalCount)>100&&(e=100),this.needToMoveLeft?t=this.gridPanel.scrollHorizontally(-e):this.needToMoveRight&&(t=this.gridPanel.scrollHorizontally(e)),0!==t)this.onDragging(this.lastDraggingEvent),this.failedMoveAttempts=0;else{this.failedMoveAttempts++;var o=this.lastDraggingEvent.dragItem.columns.filter(function(e){return!e.getColDef().lockPinned});if(o.length>0&&(this.dragAndDropService.setGhostIcon(u.DragAndDropService.ICON_PINNED),this.failedMoveAttempts>7)){var i=this.needToMoveLeft?l.Column.PINNED_LEFT:l.Column.PINNED_RIGHT;this.setColumnsPinned(o,i,\"uiColumnDragged\"),this.dragAndDropService.nudge()}}},i([r.Autowired(\"loggerFactory\"),n(\"design:type\",s.LoggerFactory)],e.prototype,\"loggerFactory\",void 0),i([r.Autowired(\"columnController\"),n(\"design:type\",a.ColumnController)],e.prototype,\"columnController\",void 0),i([r.Autowired(\"dragAndDropService\"),n(\"design:type\",u.DragAndDropService)],e.prototype,\"dragAndDropService\",void 0),i([r.Autowired(\"gridOptionsWrapper\"),n(\"design:type\",d.GridOptionsWrapper)],e.prototype,\"gridOptionsWrapper\",void 0),i([r.PostConstruct,n(\"design:type\",Function),n(\"design:paramtypes\",[]),n(\"design:returntype\",void 0)],e.prototype,\"init\",null),e}();t.MoveColumnController=c},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(15),s=o(4),a=o(0),l=o(2),p=function(){function e(e){this.columnsToAggregate=[],this.columnsToGroup=[],this.columnsToPivot=[],this.pinned=e}return e.prototype.onDragEnter=function(e){var t=this;(this.clearColumnsList(),this.gridOptionsWrapper.isFunctionsReadOnly())||e.dragItem.columns.forEach(function(e){e.isPrimary()&&(e.isAnyFunctionActive()||(e.isAllowValue()?t.columnsToAggregate.push(e):e.isAllowRowGroup()?t.columnsToGroup.push(e):e.isAllowRowGroup()&&t.columnsToPivot.push(e)))})},e.prototype.getIconName=function(){return this.columnsToAggregate.length+this.columnsToGroup.length+this.columnsToPivot.length>0?this.pinned?r.DragAndDropService.ICON_PINNED:r.DragAndDropService.ICON_MOVE:null},e.prototype.onDragLeave=function(e){this.clearColumnsList()},e.prototype.clearColumnsList=function(){this.columnsToAggregate.length=0,this.columnsToGroup.length=0,this.columnsToPivot.length=0},e.prototype.onDragging=function(e){},e.prototype.onDragStop=function(e){this.columnsToAggregate.length>0&&this.columnController.addValueColumns(this.columnsToAggregate,\"toolPanelDragAndDrop\"),this.columnsToGroup.length>0&&this.columnController.addRowGroupColumns(this.columnsToGroup,\"toolPanelDragAndDrop\"),this.columnsToPivot.length>0&&this.columnController.addPivotColumns(this.columnsToPivot,\"toolPanelDragAndDrop\")},i([a.Autowired(\"columnController\"),n(\"design:type\",s.ColumnController)],e.prototype,\"columnController\",void 0),i([a.Autowired(\"gridOptionsWrapper\"),n(\"design:type\",l.GridOptionsWrapper)],e.prototype,\"gridOptionsWrapper\",void 0),e}();t.BodyDropPivotTarget=p},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}),r=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},s=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(13),l=o(3),p=o(5),u=o(0),d=o(2),c=o(48),h=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t.prototype.registerGridComp=function(e){this.gridPanel=e,this.addDestroyableEventListener(this.eventService,p.Events.EVENT_BODY_HEIGHT_CHANGED,this.onBodyHeightChanged.bind(this)),this.addDestroyableEventListener(this.eventService,p.Events.EVENT_SCROLL_VISIBILITY_CHANGED,this.onScrollVisibilityChanged.bind(this)),this.checkPageSize()},t.prototype.notActive=function(){return!this.gridOptionsWrapper.isPaginationAutoPageSize()},t.prototype.onScrollVisibilityChanged=function(){this.checkPageSize()},t.prototype.onBodyHeightChanged=function(){this.checkPageSize()},t.prototype.checkPageSize=function(){if(!this.notActive()){var e=this.gridOptionsWrapper.getRowHeightAsNumber(),t=this.gridPanel.getBodyHeight();if(t>0){var o=Math.floor(t/e);this.gridOptionsWrapper.setProperty(\"paginationPageSize\",o)}}},r([u.Autowired(\"eventService\"),s(\"design:type\",l.EventService)],t.prototype,\"eventService\",void 0),r([u.Autowired(\"gridOptionsWrapper\"),s(\"design:type\",d.GridOptionsWrapper)],t.prototype,\"gridOptionsWrapper\",void 0),r([u.Autowired(\"scrollVisibleService\"),s(\"design:type\",c.ScrollVisibleService)],t.prototype,\"scrollVisibleService\",void 0),t=r([u.Bean(\"paginationAutoPageSizeService\")],t)}(a.BeanStub);t.PaginationAutoPageSizeService=h},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(0),s=o(6),a=o(45),l=o(25),p=o(22),u=o(37),d=o(4),c=o(2),h=o(1),f=function(){function e(){this.timeLastPageEventProcessed=0}return e.prototype.init=function(){this.scrollWidth=this.gridOptionsWrapper.getScrollbarWidth()},e.prototype.registerGridComp=function(e){this.gridPanel=e},e.prototype.handlePageScrollingKey=function(e){var t=e.which||e.keyCode,o=e.altKey,i=e.ctrlKey,n=this.mouseEventService.getCellPositionForEvent(e);if(!n)return!1;var r=!1;switch(t){case s.Constants.KEY_PAGE_HOME:case s.Constants.KEY_PAGE_END:i||o||(this.onHomeOrEndKey(t),r=!0);break;case s.Constants.KEY_LEFT:case s.Constants.KEY_RIGHT:i&&!o&&(this.onCtrlLeftOrRight(t,n),r=!0);break;case s.Constants.KEY_UP:case s.Constants.KEY_DOWN:i&&!o&&(this.onCtrlUpOrDown(t,n),r=!0);break;case s.Constants.KEY_PAGE_DOWN:i||o||(this.onPageDown(n),r=!0);break;case s.Constants.KEY_PAGE_UP:i||o||(this.onPageUp(n),r=!0)}return r&&e.preventDefault(),r},e.prototype.isTimeSinceLastPageEventToRecent=function(){return(new Date).getTime()-this.timeLastPageEventProcessed<100},e.prototype.setTimeLastPageEventProcessed=function(){this.timeLastPageEventProcessed=(new Date).getTime()},e.prototype.onPageDown=function(e){if(!this.isTimeSinceLastPageEventToRecent()){var t=this.gridPanel.getVScrollPosition(),o=t.bottom-t.top;this.gridPanel.isHorizontalScrollShowing()&&(o-=this.scrollWidth);var i=this.paginationProxy.getPixelOffset(),n=t.top+o,r=this.paginationProxy.getRowIndexAtPixel(n+i),s=this.paginationProxy.getRow(e.rowIndex).rowTop+o-i,a=this.paginationProxy.getRowIndexAtPixel(s+i),l=this.paginationProxy.getPageLastRow();a>l&&(a=l),r>l&&(r=l),this.navigateTo(r,\"top\",null,a,e.column),this.setTimeLastPageEventProcessed()}},e.prototype.onPageUp=function(e){if(!this.isTimeSinceLastPageEventToRecent()){var t=this.gridPanel.getVScrollPosition(),o=t.bottom-t.top;this.gridPanel.isHorizontalScrollShowing()&&(o-=this.scrollWidth);var i=this.paginationProxy.getPixelOffset(),n=t.top,r=this.paginationProxy.getRowIndexAtPixel(n+i),s=this.paginationProxy.getRow(e.rowIndex),a=s.rowTop+s.rowHeight-o-i,l=this.paginationProxy.getRowIndexAtPixel(a+i),p=this.paginationProxy.getPageFirstRow();l<p&&(l=p),r<p&&(r=p),this.navigateTo(r,\"bottom\",null,l,e.column),this.setTimeLastPageEventProcessed()}},e.prototype.navigateTo=function(e,t,o,i,n){if(h._.exists(o)&&this.gridPanel.ensureColumnVisible(o),h._.exists(e)&&this.gridPanel.ensureIndexVisible(e,t),this.animationFrameService.flushAllFrames(),this.focusedCellController.setFocusedCell(i,n,null,!0),this.rangeController){var r={rowIndex:i,rowPinned:null,column:n};this.rangeController.setRangeToCell(r)}},e.prototype.onCtrlUpOrDown=function(e,t){var o=e===s.Constants.KEY_UP?0:this.paginationProxy.getPageLastRow();this.navigateTo(o,null,t.column,o,t.column)},e.prototype.onCtrlLeftOrRight=function(e,t){var o=e===s.Constants.KEY_LEFT,i=this.columnController.getAllDisplayedColumns(),n=o?i[0]:h._.last(i);this.navigateTo(t.rowIndex,null,n,t.rowIndex,n)},e.prototype.onHomeOrEndKey=function(e){var t=e===s.Constants.KEY_PAGE_HOME,o=this.columnController.getAllDisplayedColumns(),i=t?o[0]:h._.last(o),n=t?0:this.paginationProxy.getPageLastRow();this.navigateTo(n,null,i,n,i)},i([r.Autowired(\"mouseEventService\"),n(\"design:type\",a.MouseEventService)],e.prototype,\"mouseEventService\",void 0),i([r.Autowired(\"paginationProxy\"),n(\"design:type\",l.PaginationProxy)],e.prototype,\"paginationProxy\",void 0),i([r.Autowired(\"focusedCellController\"),n(\"design:type\",p.FocusedCellController)],e.prototype,\"focusedCellController\",void 0),i([r.Autowired(\"animationFrameService\"),n(\"design:type\",u.AnimationFrameService)],e.prototype,\"animationFrameService\",void 0),i([r.Optional(\"rangeController\"),n(\"design:type\",Object)],e.prototype,\"rangeController\",void 0),i([r.Autowired(\"columnController\"),n(\"design:type\",d.ColumnController)],e.prototype,\"columnController\",void 0),i([r.Autowired(\"gridOptionsWrapper\"),n(\"design:type\",c.GridOptionsWrapper)],e.prototype,\"gridOptionsWrapper\",void 0),i([r.PostConstruct,n(\"design:type\",Function),n(\"design:paramtypes\",[]),n(\"design:returntype\",void 0)],e.prototype,\"init\",null),e=i([r.Bean(\"navigationService\")],e)}();t.NavigationService=f},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}),r=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},s=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var a,l=o(2),p=o(0),u=o(7),d=o(16),c=o(10),h=o(1);!function(e){e[e.Loading=0]=\"Loading\",e[e.NoRows=1]=\"NoRows\"}(a||(a={}));var f=function(e){function t(){return e.call(this,t.TEMPLATE)||this}return n(t,e),t.prototype.postConstruct=function(){this.gridOptionsWrapper.addLayoutElement(this.eOverlayWrapper),this.setDisplayed(!1)},t.prototype.setWrapperTypeClass=function(e){h._.addOrRemoveCssClass(this.eOverlayWrapper,\"ag-overlay-loading-wrapper\",e===a.Loading),h._.addOrRemoveCssClass(this.eOverlayWrapper,\"ag-overlay-no-rows-wrapper\",e===a.NoRows)},t.prototype.showLoadingOverlay=function(){var e=this;this.setWrapperTypeClass(a.Loading),this.destroyActiveOverlay();var t={api:this.gridOptionsWrapper.getApi()};this.userComponentFactory.newLoadingOverlayComponent(t).then(function(t){e.eOverlayWrapper.appendChild(t.getGui()),e.activeOverlay=t}),this.setDisplayed(!0)},t.prototype.showNoRowsOverlay=function(){var e=this;this.setWrapperTypeClass(a.NoRows),this.destroyActiveOverlay();var t={api:this.gridOptionsWrapper.getApi()};this.userComponentFactory.newNoRowsOverlayComponent(t).then(function(t){e.eOverlayWrapper.appendChild(t.getGui()),e.activeOverlay=t}),this.setDisplayed(!0)},t.prototype.destroyActiveOverlay=function(){this.activeOverlay&&(this.activeOverlay.destroy&&this.activeOverlay.destroy(),this.activeOverlay=void 0,h._.clearElement(this.eOverlayWrapper))},t.prototype.hideOverlay=function(){this.destroyActiveOverlay(),this.setDisplayed(!1)},t.prototype.destroy=function(){e.prototype.destroy.call(this),this.destroyActiveOverlay()},t.TEMPLATE='<div class=\"ag-overlay\" aria-hidden=\"true\">\\n            <div class=\"ag-overlay-panel\">\\n                <div class=\"ag-overlay-wrapper\" ref=\"eOverlayWrapper\"></div>\\n            </div>\\n        </div>',r([p.Autowired(\"gridOptionsWrapper\"),s(\"design:type\",l.GridOptionsWrapper)],t.prototype,\"gridOptionsWrapper\",void 0),r([p.Autowired(\"userComponentFactory\"),s(\"design:type\",d.UserComponentFactory)],t.prototype,\"userComponentFactory\",void 0),r([c.RefSelector(\"eOverlayWrapper\"),s(\"design:type\",HTMLElement)],t.prototype,\"eOverlayWrapper\",void 0),r([p.PostConstruct,s(\"design:type\",Function),s(\"design:paramtypes\",[]),s(\"design:returntype\",void 0)],t.prototype,\"postConstruct\",null),t}(u.Component);t.OverlayWrapperComponent=f},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}),r=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},s=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(2),l=o(9),p=o(4),u=o(17),d=o(14),c=o(3),h=o(94),f=o(12),g=o(26),y=o(0),v=o(22),m=o(7),C=o(8),E=o(10),w=o(5),R=o(60),_=o(115),O=o(1),S=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t.prototype.init=function(){var e=this;this.logger=this.loggerFactory.create(\"GridCore\");var o=this.enterprise?t.TEMPLATE_ENTERPRISE:t.TEMPLATE_NORMAL;if(this.setTemplate(o),[this.gridApi,this.filterManager,this.rowRenderer,this.popupService].forEach(function(t){return t.registerGridCore(e)}),this.enterprise&&this.clipboardService.registerGridCore(this),this.gridOptionsWrapper.addLayoutElement(this.getGui()),this.setSideBarVisible(this.gridOptionsWrapper.isShowToolPanel()),this.eGridDiv.appendChild(this.getGui()),this.addDestroyFunc(function(){e.eGridDiv.removeChild(e.getGui())}),this.$scope){var i=this.$scope.$watch(this.quickFilterOnScope,function(t){return e.filterManager.setQuickFilter(t)});this.addDestroyFunc(i)}this.addRtlSupport(),this.logger.log(\"ready\"),this.gridOptionsWrapper.addLayoutElement(this.eRootWrapperBody);var n=this.gridPanel.getGui();this.addDestroyableEventListener(n,\"focusin\",function(){O._.addCssClass(n,\"ag-has-focus\")}),this.addDestroyableEventListener(n,\"focusout\",function(e){n.contains(e.relatedTarget)||O._.removeCssClass(n,\"ag-has-focus\")});var r=this.resizeObserverService.observeResize(this.eGridDiv,this.onGridSizeChanged.bind(this));this.addDestroyFunc(function(){return r()})},t.prototype.onGridSizeChanged=function(){var e={type:w.Events.EVENT_GRID_SIZE_CHANGED,api:this.gridApi,columnApi:this.columnApi,clientWidth:this.eGridDiv.clientWidth,clientHeight:this.eGridDiv.clientHeight};this.eventService.dispatchEvent(e)},t.prototype.addRtlSupport=function(){var e=this.gridOptionsWrapper.isEnableRtl()?\"ag-rtl\":\"ag-ltr\";O._.addCssClass(this.getGui(),e)},t.prototype.getRootGui=function(){return this.getGui()},t.prototype.isSideBarVisible=function(){return!!this.sideBarComp&&this.sideBarComp.isDisplayed()},t.prototype.setSideBarVisible=function(e){this.sideBarComp?this.sideBarComp.setDisplayed(e):e&&console.warn(\"ag-Grid: toolPanel is only available in ag-Grid Enterprise\")},t.prototype.closeToolPanel=function(){this.sideBarComp?this.sideBarComp.close():console.warn(\"ag-Grid: toolPanel is only available in ag-Grid Enterprise\")},t.prototype.getSideBar=function(){return this.gridOptions.sideBar},t.prototype.refreshSideBar=function(){this.sideBarComp&&this.sideBarComp.refresh()},t.prototype.setSideBar=function(e){this.eRootWrapperBody.removeChild(this.sideBarComp.getGui()),this.gridOptions.sideBar=_.SideBarDefParser.parse(e),this.sideBarComp.reset(),this.eRootWrapperBody.appendChild(this.sideBarComp.getGui())},t.prototype.getOpenedToolPanel=function(){return this.sideBarComp?this.sideBarComp.openedItem():null},t.prototype.openToolPanel=function(e){this.sideBarComp?this.sideBarComp.openToolPanel(e):console.warn(\"ag-Grid: toolPanel is only available in ag-Grid Enterprise\")},t.prototype.isToolPanelShowing=function(){return this.sideBarComp.isToolPanelShowing()},t.prototype.destroy=function(){e.prototype.destroy.call(this),this.logger.log(\"Grid DOM removed\")},t.prototype.ensureNodeVisible=function(e,t){if(void 0===t&&(t=\"top\"),this.doingVirtualPaging)throw new Error(\"Cannot use ensureNodeVisible when doing virtual paging, as we cannot check rows that are not in memory\");for(var o=this.rowModel.getRowCount(),i=\"function\"==typeof e,n=-1,r=0;r<o;r++){var s=this.rowModel.getRow(r);if(i){if(e(s)){n=r;break}}else if(e===s||e===s.data){n=r;break}}n>=0&&this.gridPanel.ensureIndexVisible(n,t)},t.TEMPLATE_NORMAL='<div class=\"ag-root-wrapper\">\\n            <div class=\"ag-root-wrapper-body\" ref=\"rootWrapperBody\">\\n                <ag-grid-comp ref=\"gridPanel\"></ag-grid-comp>\\n            </div>\\n            <ag-pagination></ag-pagination>\\n        </div>',t.TEMPLATE_ENTERPRISE='<div class=\"ag-root-wrapper\">\\n            <ag-grid-header-drop-zones></ag-grid-header-drop-zones>\\n            <div ref=\"rootWrapperBody\" class=\"ag-root-wrapper-body\">\\n                <ag-grid-comp ref=\"gridPanel\"></ag-grid-comp>\\n                <ag-side-bar ref=\"sideBar\"></ag-side-bar>\\n            </div>\\n            <ag-status-bar ref=\"statusBar\"></ag-status-bar>\\n            <ag-pagination></ag-pagination>\\n            <ag-watermark></ag-watermark>\\n        </div>',r([y.Autowired(\"enterprise\"),s(\"design:type\",Boolean)],t.prototype,\"enterprise\",void 0),r([y.Autowired(\"gridOptions\"),s(\"design:type\",Object)],t.prototype,\"gridOptions\",void 0),r([y.Autowired(\"gridOptionsWrapper\"),s(\"design:type\",a.GridOptionsWrapper)],t.prototype,\"gridOptionsWrapper\",void 0),r([y.Autowired(\"rowModel\"),s(\"design:type\",Object)],t.prototype,\"rowModel\",void 0),r([y.Autowired(\"resizeObserverService\"),s(\"design:type\",R.ResizeObserverService)],t.prototype,\"resizeObserverService\",void 0),r([y.Autowired(\"columnController\"),s(\"design:type\",p.ColumnController)],t.prototype,\"columnController\",void 0),r([y.Autowired(\"rowRenderer\"),s(\"design:type\",u.RowRenderer)],t.prototype,\"rowRenderer\",void 0),r([y.Autowired(\"filterManager\"),s(\"design:type\",d.FilterManager)],t.prototype,\"filterManager\",void 0),r([y.Autowired(\"eventService\"),s(\"design:type\",c.EventService)],t.prototype,\"eventService\",void 0),r([y.Autowired(\"eGridDiv\"),s(\"design:type\",HTMLElement)],t.prototype,\"eGridDiv\",void 0),r([y.Autowired(\"$scope\"),s(\"design:type\",Object)],t.prototype,\"$scope\",void 0),r([y.Autowired(\"quickFilterOnScope\"),s(\"design:type\",String)],t.prototype,\"quickFilterOnScope\",void 0),r([y.Autowired(\"popupService\"),s(\"design:type\",g.PopupService)],t.prototype,\"popupService\",void 0),r([y.Autowired(\"focusedCellController\"),s(\"design:type\",v.FocusedCellController)],t.prototype,\"focusedCellController\",void 0),r([y.Autowired(\"loggerFactory\"),s(\"design:type\",f.LoggerFactory)],t.prototype,\"loggerFactory\",void 0),r([y.Autowired(\"columnApi\"),s(\"design:type\",l.ColumnApi)],t.prototype,\"columnApi\",void 0),r([y.Autowired(\"gridApi\"),s(\"design:type\",C.GridApi)],t.prototype,\"gridApi\",void 0),r([y.Optional(\"clipboardService\"),s(\"design:type\",Object)],t.prototype,\"clipboardService\",void 0),r([E.RefSelector(\"gridPanel\"),s(\"design:type\",h.GridPanel)],t.prototype,\"gridPanel\",void 0),r([E.RefSelector(\"sideBar\"),s(\"design:type\",Object)],t.prototype,\"sideBarComp\",void 0),r([E.RefSelector(\"rootWrapperBody\"),s(\"design:type\",HTMLElement)],t.prototype,\"eRootWrapperBody\",void 0),r([y.PostConstruct,s(\"design:type\",Function),s(\"design:paramtypes\",[]),s(\"design:returntype\",void 0)],t.prototype,\"init\",null),t}(m.Component);t.GridCore=S},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(0),s=o(14),a=o(26),l=o(2),p=o(3),u=o(1),d=function(){function e(){}return e.prototype.hideActiveMenu=function(){this.hidePopup&&this.hidePopup()},e.prototype.showMenuAfterMouseEvent=function(e,t){var o=this;this.showPopup(e,function(i){o.popupService.positionPopupUnderMouseEvent({column:e,type:\"columnMenu\",mouseEvent:t,ePopup:i})})},e.prototype.showMenuAfterButtonClick=function(e,t){var o=this;this.showPopup(e,function(i){o.popupService.positionPopupUnderComponent({type:\"columnMenu\",eventSource:t,ePopup:i,keepWithinBounds:!0,column:e})})},e.prototype.showPopup=function(e,t){var o,i=this,n=this.filterManager.getOrCreateFilterWrapper(e,\"COLUMN_MENU\"),r=document.createElement(\"div\");u._.addCssClass(r,\"ag-menu\"),n.guiPromise.promise.then(function(e){r.appendChild(e)});var s=function(e){\"horizontal\"===e.direction&&o()};this.eventService.addEventListener(\"bodyScroll\",s);o=this.popupService.addAsModalPopup(r,!0,function(){i.eventService.removeEventListener(\"bodyScroll\",s),e.setMenuVisible(!1,\"contextMenu\")}),t(r),n.filterPromise.then(function(e){if(e.afterGuiAttached){var t={hidePopup:o};e.afterGuiAttached(t)}}),this.hidePopup=o,e.setMenuVisible(!0,\"contextMenu\")},e.prototype.isMenuEnabled=function(e){return e.isFilterAllowed()},i([r.Autowired(\"eventService\"),n(\"design:type\",p.EventService)],e.prototype,\"eventService\",void 0),i([r.Autowired(\"filterManager\"),n(\"design:type\",s.FilterManager)],e.prototype,\"filterManager\",void 0),i([r.Autowired(\"popupService\"),n(\"design:type\",a.PopupService)],e.prototype,\"popupService\",void 0),i([r.Autowired(\"gridOptionsWrapper\"),n(\"design:type\",l.GridOptionsWrapper)],e.prototype,\"gridOptionsWrapper\",void 0),e=i([r.Bean(\"menuFactory\")],e)}();t.StandardMenuFactory=d},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(0),s=o(2),a=o(128),l=o(95),p=function(){function e(){}return e.prototype.execute=function(e){var t=e.rowNode,o=e.changedPath;this.filterService.filter(o),this.selectableService.updateSelectableAfterFiltering(t)},i([r.Autowired(\"gridOptionsWrapper\"),n(\"design:type\",s.GridOptionsWrapper)],e.prototype,\"gridOptionsWrapper\",void 0),i([r.Autowired(\"selectableService\"),n(\"design:type\",l.SelectableService)],e.prototype,\"selectableService\",void 0),i([r.Autowired(\"filterService\"),n(\"design:type\",a.FilterService)],e.prototype,\"filterService\",void 0),e=i([r.Bean(\"filterStage\")],e)}();t.FilterStage=p},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(0),s=o(14),a=o(2),l=function(){function e(){}return e.prototype.postConstruct=function(){this.doingTreeData=this.gridOptionsWrapper.isTreeData()},e.prototype.filter=function(e){var t=this.filterManager.isAnyFilterPresent();this.filterNodes(t,e)},e.prototype.filterNodes=function(e,t){var o=this,i=function(t,i){t.hasChildren()?(t.childrenAfterFilter=e&&!i?t.childrenAfterGroup.filter(function(e){var t=e.childrenAfterFilter&&e.childrenAfterFilter.length>0,i=e.data&&o.filterManager.doesRowPassFilter(e);return t||i}):t.childrenAfterGroup,o.setAllChildrenCount(t)):(t.childrenAfterFilter=t.childrenAfterGroup,t.setAllChildrenCount(null))};if(this.doingTreeDataFiltering()){var n=function(e,t){if(e.childrenAfterGroup)for(var r=0;r<e.childrenAfterGroup.length;r++){var s=e.childrenAfterGroup[r],a=t||o.filterManager.doesRowPassFilter(s);s.childrenAfterGroup?n(e.childrenAfterGroup[r],a):i(s,a)}i(e,t)};t.executeFromRootNode(function(e){return n(e,!1)})}else{t.forEachChangedNodeDepthFirst(function(e){return i(e,!1)},!0)}},e.prototype.setAllChildrenCountTreeData=function(e){var t=0;e.childrenAfterFilter.forEach(function(e){t++,t+=e.allChildrenCount}),e.setAllChildrenCount(t)},e.prototype.setAllChildrenCountGridGrouping=function(e){var t=0;e.childrenAfterFilter.forEach(function(e){e.group?t+=e.allChildrenCount:t++}),e.setAllChildrenCount(t)},e.prototype.setAllChildrenCount=function(e){this.doingTreeData?this.setAllChildrenCountTreeData(e):this.setAllChildrenCountGridGrouping(e)},e.prototype.doingTreeDataFiltering=function(){return this.gridOptionsWrapper.isTreeData()&&!this.gridOptionsWrapper.isExcludeChildrenWhenTreeDataFiltering()},i([r.Autowired(\"filterManager\"),n(\"design:type\",s.FilterManager)],e.prototype,\"filterManager\",void 0),i([r.Autowired(\"gridOptionsWrapper\"),n(\"design:type\",a.GridOptionsWrapper)],e.prototype,\"gridOptionsWrapper\",void 0),i([r.PostConstruct,n(\"design:type\",Function),n(\"design:paramtypes\",[]),n(\"design:returntype\",void 0)],e.prototype,\"postConstruct\",null),e=i([r.Bean(\"filterService\")],e)}();t.FilterService=l},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(0),s=o(2),a=o(130),l=o(23),p=o(4),u=o(1),d=function(){function e(){}return e.prototype.execute=function(e){var t=this.sortController.getSortForRowController(),o=u._.exists(t)&&t.length>0,i=o&&u._.exists(e.rowNodeTransactions)&&this.gridOptionsWrapper.isDeltaSort(),n=i?this.calculateDirtyNodes(e.rowNodeTransactions):null,r=this.columnController.getValueColumns(),s=u._.missingOrEmpty(r);this.sortService.sort(t,o,i,n,e.changedPath,s)},e.prototype.calculateDirtyNodes=function(e){var t={},o=function(e){e&&e.forEach(function(e){return t[e.id]=!0})};return e.forEach(function(e){o(e.add),o(e.update),o(e.remove)}),t},i([r.Autowired(\"gridOptionsWrapper\"),n(\"design:type\",s.GridOptionsWrapper)],e.prototype,\"gridOptionsWrapper\",void 0),i([r.Autowired(\"sortService\"),n(\"design:type\",a.SortService)],e.prototype,\"sortService\",void 0),i([r.Autowired(\"sortController\"),n(\"design:type\",l.SortController)],e.prototype,\"sortController\",void 0),i([r.Autowired(\"columnController\"),n(\"design:type\",p.ColumnController)],e.prototype,\"columnController\",void 0),e=i([r.Bean(\"sortStage\")],e)}();t.SortStage=d},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(0),s=o(23),a=o(20),l=o(2),p=o(4),u=o(1),d=function(){function e(){}return e.prototype.init=function(){this.postSortFunc=this.gridOptionsWrapper.getPostSortFunc()},e.prototype.sort=function(e,t,o,i,n,r){var s=this;n.forEachChangedNodeDepthFirst(function(a){if(s.pullDownGroupDataForHideOpenParents(a.childrenAfterFilter,!0),t){var l=o?s.doDeltaSort(a,e,i,n,r):s.doFullSort(a,e);a.childrenAfterSort=l.map(function(e){return e.rowNode})}else a.childrenAfterSort=a.childrenAfterFilter.slice(0);s.updateChildIndexes(a),s.postSortFunc&&s.postSortFunc(a.childrenAfterSort)}),this.updateGroupDataForHiddenOpenParents(n)},e.prototype.doFullSort=function(e,t){var o=e.childrenAfterFilter.map(this.mapNodeToSortedNode.bind(this));return o.sort(this.compareRowNodes.bind(this,t)),o},e.prototype.mapNodeToSortedNode=function(e,t){return{currentPos:t,rowNode:e}},e.prototype.doDeltaSort=function(e,t,o,i,n){var r=e.childrenAfterSort.filter(function(e){var t=!o[e.id],r=n||i.canSkip(e);return t&&r}).map(this.mapNodeToSortedNode.bind(this)),s={};r.forEach(function(e){return s[e.rowNode.id]=e.rowNode});var a=e.childrenAfterFilter.filter(function(e){return!s[e.id]}).map(this.mapNodeToSortedNode.bind(this));return a.sort(this.compareRowNodes.bind(this,t)),0===a.length?r:0===r.length?a:this.mergeSortedArrays(t,r,a)},e.prototype.mergeSortedArrays=function(e,t,o){for(var i=[],n=0,r=0;n<t.length&&r<o.length;){this.compareRowNodes(e,t[n],o[r])<0?i.push(t[n++]):i.push(o[r++])}for(;n<t.length;)i.push(t[n++]);for(;r<o.length;)i.push(o[r++]);return i},e.prototype.compareRowNodes=function(e,t,o){for(var i=t.rowNode,n=o.rowNode,r=0,s=e.length;r<s;r++){var a=e[r],l=-1===a.inverter,p=this.getValue(i,a.column),d=this.getValue(n,a.column),c=void 0;if(0!==(c=a.column.getColDef().comparator?a.column.getColDef().comparator(p,d,i,n,l):u._.defaultComparator(p,d,this.gridOptionsWrapper.isAccentedSort())))return c*a.inverter}return t.currentPos-o.currentPos},e.prototype.getValue=function(e,t){return this.valueService.getValue(t,e)},e.prototype.updateChildIndexes=function(e){if(!u._.missing(e.childrenAfterSort))for(var t=e.childrenAfterSort,o=0;o<t.length;o++){var i=t[o],n=0===o,r=o===e.childrenAfterSort.length-1;i.setFirstChild(n),i.setLastChild(r),i.setChildIndex(o)}},e.prototype.updateGroupDataForHiddenOpenParents=function(e){var t=this;if(this.gridOptionsWrapper.isGroupHideOpenParents()){var o=function(e){t.pullDownGroupDataForHideOpenParents(e.childrenAfterSort,!1),e.childrenAfterSort.forEach(function(e){e.hasChildren()&&o(e)})};e.executeFromRootNode(function(e){return o(e)})}},e.prototype.pullDownGroupDataForHideOpenParents=function(e,t){var o=this;u._.missing(e)||this.gridOptionsWrapper.isGroupHideOpenParents()&&e.forEach(function(e){o.columnController.getGroupDisplayColumns().forEach(function(i){var n=i.getColDef().showRowGroup;if(\"string\"==typeof n){var r=n,s=o.columnController.getPrimaryColumn(r);if(!(s===e.rowGroupColumn))if(t)e.setGroupValue(i.getId(),null);else{var a=e.getFirstChildOfFirstChild(s);a&&e.setGroupValue(i.getId(),a.key)}}else console.error(\"ag-Grid: groupHideOpenParents only works when specifying specific columns for colDef.showRowGroup\")})})},i([r.Autowired(\"sortController\"),n(\"design:type\",s.SortController)],e.prototype,\"sortController\",void 0),i([r.Autowired(\"columnController\"),n(\"design:type\",p.ColumnController)],e.prototype,\"columnController\",void 0),i([r.Autowired(\"valueService\"),n(\"design:type\",a.ValueService)],e.prototype,\"valueService\",void 0),i([r.Autowired(\"gridOptionsWrapper\"),n(\"design:type\",l.GridOptionsWrapper)],e.prototype,\"gridOptionsWrapper\",void 0),i([r.PostConstruct,n(\"design:type\",Function),n(\"design:paramtypes\",[]),n(\"design:returntype\",void 0)],e.prototype,\"init\",null),e=i([r.Bean(\"sortService\")],e)}();t.SortService=d},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(0),s=o(18),a=o(2),l=o(19),p=o(3),u=o(4),d=o(1),c=function(){function e(){}return e.prototype.execute=function(e){var t=e.rowNode,o=[],i={value:0},n=this.columnController.isPivotMode(),r=n&&t.leafGroup,s=r?[t]:t.childrenAfterSort;return this.recursivelyAddToRowsToDisplay(s,o,i,n,0),!r&&this.gridOptionsWrapper.isGroupIncludeTotalFooter()&&(this.ensureFooterNodeExists(t),this.addRowNodeToRowsToDisplay(t.sibling,o,i,0)),o},e.prototype.recursivelyAddToRowsToDisplay=function(e,t,o,i,n){if(!d._.missingOrEmpty(e))for(var r=this.gridOptionsWrapper.isGroupSuppressRow(),s=this.gridOptionsWrapper.isGroupHideOpenParents(),a=this.gridOptionsWrapper.isGroupRemoveSingleChildren(),l=!a&&this.gridOptionsWrapper.isGroupRemoveLowestSingleChildren(),p=0;p<e.length;p++){var u=e[p],c=u.hasChildren(),h=r&&c,f=i&&!c,g=a&&c&&1===u.childrenAfterGroup.length,y=l&&c&&u.leafGroup&&1===u.childrenAfterGroup.length,v=i&&u.leafGroup,m=s&&u.expanded&&!v;if(!(f||h||m||g||y)&&this.addRowNodeToRowsToDisplay(u,t,o,n),!i||!u.leafGroup)if(c){var C=g||y;if(u.expanded||C){var E=C?n:n+1;this.recursivelyAddToRowsToDisplay(u.childrenAfterSort,t,o,i,E),this.gridOptionsWrapper.isGroupIncludeFooter()&&(this.ensureFooterNodeExists(u),this.addRowNodeToRowsToDisplay(u.sibling,t,o,n))}}else if(u.master&&u.expanded){var w=this.createDetailNode(u);this.addRowNodeToRowsToDisplay(w,t,o,n)}}},e.prototype.addRowNodeToRowsToDisplay=function(e,t,o,i){t.push(e);var n=this.gridOptionsWrapper.isGroupMultiAutoColumn();e.setUiLevel(n?0:i)},e.prototype.ensureFooterNodeExists=function(e){if(!d._.exists(e.sibling)){var t=new s.RowNode;this.context.wireBean(t),Object.keys(e).forEach(function(o){t[o]=e[o]}),t.footer=!0,t.rowTop=null,t.oldRowTop=null,d._.exists(t.id)&&(t.id=\"rowGroupFooter_\"+t.id),t.sibling=e,e.sibling=t}},e.prototype.createDetailNode=function(e){if(d._.exists(e.detailNode))return e.detailNode;var t=new s.RowNode;return this.context.wireBean(t),t.detail=!0,t.selectable=!1,t.flower=t.detail,t.parent=e,d._.exists(e.id)&&(t.id=\"detail_\"+e.id),t.data=e.data,t.level=e.level+1,e.detailNode=t,e.childFlower=e.detailNode,t},i([r.Autowired(\"gridOptionsWrapper\"),n(\"design:type\",a.GridOptionsWrapper)],e.prototype,\"gridOptionsWrapper\",void 0),i([r.Autowired(\"selectionController\"),n(\"design:type\",l.SelectionController)],e.prototype,\"selectionController\",void 0),i([r.Autowired(\"eventService\"),n(\"design:type\",p.EventService)],e.prototype,\"eventService\",void 0),i([r.Autowired(\"context\"),n(\"design:type\",r.Context)],e.prototype,\"context\",void 0),i([r.Autowired(\"columnController\"),n(\"design:type\",u.ColumnController)],e.prototype,\"columnController\",void 0),e=i([r.Bean(\"flattenStage\")],e)}();t.FlattenStage=c},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}),r=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},s=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(2),l=o(0),p=o(3),u=o(19),d=o(5),c=o(23),h=o(14),f=o(6),g=o(172),y=o(13),v=o(96),m=o(133),C=o(8),E=o(9),w=o(1),R=o(17),_=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t.prototype.getRowBounds=function(e){return{rowHeight:this.rowHeight,rowTop:this.rowHeight*e}},t.prototype.ensureRowHeightsValid=function(e,t,o,i){return!1},t.prototype.init=function(){var e=this;this.gridOptionsWrapper.isRowModelInfinite()&&(this.rowHeight=this.gridOptionsWrapper.getRowHeightAsNumber(),this.addEventListeners(),this.setDatasource(this.gridOptionsWrapper.getDatasource()),this.addDestroyFunc(function(){return e.destroyCache()}))},t.prototype.destroyDatasource=function(){this.datasource&&(this.datasource.destroy&&this.datasource.destroy(),this.rowRenderer.datasourceChanged(),this.datasource=null)},t.prototype.isLastRowFound=function(){return!!this.infiniteCache&&this.infiniteCache.isMaxRowFound()},t.prototype.addEventListeners=function(){this.addDestroyableEventListener(this.eventService,d.Events.EVENT_FILTER_CHANGED,this.onFilterChanged.bind(this)),this.addDestroyableEventListener(this.eventService,d.Events.EVENT_SORT_CHANGED,this.onSortChanged.bind(this)),this.addDestroyableEventListener(this.eventService,d.Events.EVENT_COLUMN_EVERYTHING_CHANGED,this.onColumnEverything.bind(this))},t.prototype.onFilterChanged=function(){this.reset()},t.prototype.onSortChanged=function(){this.reset()},t.prototype.onColumnEverything=function(){(!this.cacheParams||this.isSortModelDifferent())&&this.reset()},t.prototype.isSortModelDifferent=function(){return!w._.jsonEquals(this.cacheParams.sortModel,this.sortController.getSortModel())},t.prototype.getType=function(){return f.Constants.ROW_MODEL_TYPE_INFINITE},t.prototype.setDatasource=function(e){this.destroyDatasource(),this.datasource=e,e&&(this.checkForDeprecated(),this.reset())},t.prototype.checkForDeprecated=function(){var e=this.datasource;w._.exists(e.maxConcurrentRequests)&&console.error(\"ag-Grid: since version 5.1.x, maxConcurrentRequests is replaced with grid property maxConcurrentDatasourceRequests\"),w._.exists(e.maxPagesInCache)&&console.error(\"ag-Grid: since version 5.1.x, maxPagesInCache is replaced with grid property maxPagesInPaginationCache\"),w._.exists(e.overflowSize)&&console.error(\"ag-Grid: since version 5.1.x, overflowSize is replaced with grid property paginationOverflowSize\"),w._.exists(e.blockSize)&&console.error(\"ag-Grid: since version 5.1.x, pageSize/blockSize is replaced with grid property infinitePageSize\")},t.prototype.isEmpty=function(){return w._.missing(this.infiniteCache)},t.prototype.isRowsToRender=function(){return w._.exists(this.infiniteCache)},t.prototype.getNodesInRangeForSelection=function(e,t){return this.infiniteCache?this.infiniteCache.getRowNodesInRange(e,t):[]},t.prototype.reset=function(){if(!w._.missing(this.datasource)){w._.exists(this.gridOptionsWrapper.getRowNodeIdFunc())||this.selectionController.reset(),this.resetCache();var e=this.createModelUpdatedEvent();this.eventService.dispatchEvent(e)}},t.prototype.createModelUpdatedEvent=function(){return{type:d.Events.EVENT_MODEL_UPDATED,api:this.gridApi,columnApi:this.columnApi,newPage:!1,newData:!1,keepRenderedRows:!1,animate:!1}},t.prototype.resetCache=function(){this.destroyCache();var e=this.gridOptionsWrapper.getMaxConcurrentDatasourceRequests(),t=this.gridOptionsWrapper.getBlockLoadDebounceMillis();this.rowNodeBlockLoader=new m.RowNodeBlockLoader(e,t),this.getContext().wireBean(this.rowNodeBlockLoader),this.cacheParams={datasource:this.datasource,filterModel:this.filterManager.getFilterModel(),sortModel:this.sortController.getSortModel(),rowNodeBlockLoader:this.rowNodeBlockLoader,maxConcurrentRequests:e,overflowSize:this.gridOptionsWrapper.getCacheOverflowSize(),initialRowCount:this.gridOptionsWrapper.getInfiniteInitialRowCount(),maxBlocksInCache:this.gridOptionsWrapper.getMaxBlocksInCache(),blockSize:this.gridOptionsWrapper.getCacheBlockSize(),rowHeight:this.gridOptionsWrapper.getRowHeightAsNumber(),lastAccessedSequence:new w.NumberSequence},this.cacheParams.maxConcurrentRequests&&this.cacheParams.maxConcurrentRequests>=1||(this.cacheParams.maxConcurrentRequests=2),this.cacheParams.blockSize&&this.cacheParams.blockSize>=1||(this.cacheParams.blockSize=100),this.cacheParams.initialRowCount>=1||(this.cacheParams.initialRowCount=0),this.cacheParams.overflowSize>=1||(this.cacheParams.overflowSize=1),this.infiniteCache=new g.InfiniteCache(this.cacheParams),this.getContext().wireBean(this.infiniteCache),this.infiniteCache.addEventListener(v.RowNodeCache.EVENT_CACHE_UPDATED,this.onCacheUpdated.bind(this))},t.prototype.destroyCache=function(){this.infiniteCache&&(this.infiniteCache.destroy(),this.infiniteCache=null),this.rowNodeBlockLoader&&(this.rowNodeBlockLoader.destroy(),this.rowNodeBlockLoader=null)},t.prototype.onCacheUpdated=function(){var e=this.createModelUpdatedEvent();this.eventService.dispatchEvent(e)},t.prototype.getRow=function(e){return this.infiniteCache?this.infiniteCache.getRow(e):null},t.prototype.getRowNode=function(e){var t=null;return this.forEachNode(function(o){o.id===e&&(t=o)}),t},t.prototype.forEachNode=function(e){this.infiniteCache&&this.infiniteCache.forEachNodeDeep(e,new w.NumberSequence)},t.prototype.getCurrentPageHeight=function(){return this.getRowCount()*this.rowHeight},t.prototype.getTopLevelRowCount=function(){return this.getRowCount()},t.prototype.getTopLevelRowDisplayedIndex=function(e){return e},t.prototype.getRowIndexAtPixel=function(e){if(0!==this.rowHeight){var t=Math.floor(e/this.rowHeight),o=this.getRowCount()-1;return t>o?o:t}return 0},t.prototype.getRowCount=function(){return this.infiniteCache?this.infiniteCache.getVirtualRowCount():0},t.prototype.updateRowData=function(e){w._.exists(e.remove)||w._.exists(e.update)?console.warn(\"ag-Grid: updateRowData for InfiniteRowModel does not support remove or update, only add\"):w._.missing(e.addIndex)?console.warn(\"ag-Grid: updateRowData for InfiniteRowModel requires add and addIndex to be set\"):this.infiniteCache&&this.infiniteCache.insertItemsAtIndex(e.addIndex,e.add)},t.prototype.isRowPresent=function(e){return!1},t.prototype.refreshCache=function(){this.infiniteCache&&this.infiniteCache.refreshCache()},t.prototype.purgeCache=function(){this.infiniteCache&&this.infiniteCache.purgeCache()},t.prototype.getVirtualRowCount=function(){return this.infiniteCache?this.infiniteCache.getVirtualRowCount():null},t.prototype.isMaxRowFound=function(){if(this.infiniteCache)return this.infiniteCache.isMaxRowFound()},t.prototype.setVirtualRowCount=function(e,t){this.infiniteCache&&this.infiniteCache.setVirtualRowCount(e,t)},t.prototype.getBlockState=function(){return this.rowNodeBlockLoader?this.rowNodeBlockLoader.getBlockState():null},r([l.Autowired(\"gridOptionsWrapper\"),s(\"design:type\",a.GridOptionsWrapper)],t.prototype,\"gridOptionsWrapper\",void 0),r([l.Autowired(\"filterManager\"),s(\"design:type\",h.FilterManager)],t.prototype,\"filterManager\",void 0),r([l.Autowired(\"sortController\"),s(\"design:type\",c.SortController)],t.prototype,\"sortController\",void 0),r([l.Autowired(\"selectionController\"),s(\"design:type\",u.SelectionController)],t.prototype,\"selectionController\",void 0),r([l.Autowired(\"eventService\"),s(\"design:type\",p.EventService)],t.prototype,\"eventService\",void 0),r([l.Autowired(\"gridApi\"),s(\"design:type\",C.GridApi)],t.prototype,\"gridApi\",void 0),r([l.Autowired(\"columnApi\"),s(\"design:type\",E.ColumnApi)],t.prototype,\"columnApi\",void 0),r([l.Autowired(\"rowRenderer\"),s(\"design:type\",R.RowRenderer)],t.prototype,\"rowRenderer\",void 0),r([l.PostConstruct,s(\"design:type\",Function),s(\"design:paramtypes\",[]),s(\"design:returntype\",void 0)],t.prototype,\"init\",null),r([l.PreDestroy,s(\"design:type\",Function),s(\"design:paramtypes\",[]),s(\"design:returntype\",void 0)],t.prototype,\"destroyDatasource\",null),t=r([l.Bean(\"rowModel\")],t)}(y.BeanStub);t.InfiniteRowModel=_},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)},r=this&&this.__param||function(e,t){return function(o,i){t(o,i,e)}};Object.defineProperty(t,\"__esModule\",{value:!0});var s=o(61),a=o(12),l=o(0),p=o(1),u=function(){function e(e,t){this.activeBlockLoadsCount=0,this.blocks=[],this.active=!0,this.maxConcurrentRequests=e,t&&t>0&&(this.checkBlockToLoadDebounce=p._.debounce(this.performCheckBlocksToLoad.bind(this),t))}return e.prototype.setBeans=function(e){this.logger=e.create(\"RowNodeBlockLoader\")},e.prototype.addBlock=function(e){this.blocks.push(e)},e.prototype.removeBlock=function(e){p._.removeFromArray(this.blocks,e)},e.prototype.destroy=function(){this.active=!1},e.prototype.loadComplete=function(){this.activeBlockLoadsCount--},e.prototype.checkBlockToLoad=function(){this.checkBlockToLoadDebounce?this.checkBlockToLoadDebounce():this.performCheckBlocksToLoad()},e.prototype.performCheckBlocksToLoad=function(){if(this.active)if(this.printCacheStatus(),this.activeBlockLoadsCount>=this.maxConcurrentRequests)this.logger.log(\"checkBlockToLoad: max loads exceeded\");else{var e=null;this.blocks.forEach(function(t){t.getState()===s.RowNodeBlock.STATE_DIRTY&&(e=t)}),e?(e.load(),this.activeBlockLoadsCount++,this.logger.log(\"checkBlockToLoad: loading page \"+e.getBlockNumber()),this.printCacheStatus()):this.logger.log(\"checkBlockToLoad: no pages to load\")}},e.prototype.getBlockState=function(){var e={};return this.blocks.forEach(function(t){var o=t.getNodeIdPrefix(),i={blockNumber:t.getBlockNumber(),startRow:t.getStartRow(),endRow:t.getEndRow(),pageStatus:t.getState()};p._.exists(o)?e[o+t.getBlockNumber()]=i:e[t.getBlockNumber()]=i}),e},e.prototype.printCacheStatus=function(){this.logger.isLogging()&&this.logger.log(\"printCacheStatus: activePageLoadsCount = \"+this.activeBlockLoadsCount+\", blocks = \"+JSON.stringify(this.getBlockState()))},e.prototype.isLoading=function(){return this.activeBlockLoadsCount>0},i([r(0,l.Qualifier(\"loggerFactory\")),n(\"design:type\",Function),n(\"design:paramtypes\",[a.LoggerFactory]),n(\"design:returntype\",void 0)],e.prototype,\"setBeans\",null),e}();t.RowNodeBlockLoader=u},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var r,s=o(6),a=o(2),l=o(9),p=o(4),u=o(14),d=o(18),c=o(3),h=o(5),f=o(0),g=o(19),y=o(135),v=o(51),m=o(20),C=o(35),E=o(8),w=o(1);!function(e){e[e.Normal=0]=\"Normal\",e[e.AfterFilter=1]=\"AfterFilter\",e[e.AfterFilterAndSort=2]=\"AfterFilterAndSort\",e[e.PivotNodes=3]=\"PivotNodes\"}(r||(r={}));var R=function(){function e(){}return e.prototype.init=function(){var e=this.refreshModel.bind(this,{step:s.Constants.STEP_EVERYTHING}),t=this.refreshModel.bind(this,{step:s.Constants.STEP_EVERYTHING,afterColumnsChanged:!0});this.eventService.addModalPriorityEventListener(h.Events.EVENT_COLUMN_EVERYTHING_CHANGED,t),this.eventService.addModalPriorityEventListener(h.Events.EVENT_COLUMN_ROW_GROUP_CHANGED,e),this.eventService.addModalPriorityEventListener(h.Events.EVENT_COLUMN_VALUE_CHANGED,this.onValueChanged.bind(this)),this.eventService.addModalPriorityEventListener(h.Events.EVENT_COLUMN_PIVOT_CHANGED,this.refreshModel.bind(this,{step:s.Constants.STEP_PIVOT})),this.eventService.addModalPriorityEventListener(h.Events.EVENT_ROW_GROUP_OPENED,this.onRowGroupOpened.bind(this)),this.eventService.addModalPriorityEventListener(h.Events.EVENT_FILTER_CHANGED,this.onFilterChanged.bind(this)),this.eventService.addModalPriorityEventListener(h.Events.EVENT_SORT_CHANGED,this.onSortChanged.bind(this)),this.eventService.addModalPriorityEventListener(h.Events.EVENT_COLUMN_PIVOT_MODE_CHANGED,e);var o=this.refreshModel.bind(this,{step:s.Constants.STEP_MAP,keepRenderedRows:!0,animate:!0});this.gridOptionsWrapper.addEventListener(a.GridOptionsWrapper.PROP_GROUP_REMOVE_SINGLE_CHILDREN,o),this.gridOptionsWrapper.addEventListener(a.GridOptionsWrapper.PROP_GROUP_REMOVE_LOWEST_SINGLE_CHILDREN,o),this.rootNode=new d.RowNode,this.nodeManager=new y.ClientSideNodeManager(this.rootNode,this.gridOptionsWrapper,this.context,this.eventService,this.columnController,this.gridApi,this.columnApi,this.selectionController),this.context.wireBean(this.rootNode)},e.prototype.ensureRowHeightsValid=function(e,t,o,i){var n,r=!1;do{n=!1;for(var s=this.getRowIndexAtPixel(e),a=this.getRowIndexAtPixel(t),l=Math.max(s,o),p=Math.min(a,i),u=l;u<=p;u++){var d=this.getRow(u);if(d.rowHeightEstimated){var c=this.gridOptionsWrapper.getRowHeightForNode(d);d.setRowHeight(c.height),n=!0,r=!0}}n&&this.setRowTops()}while(n);return r},e.prototype.setRowTops=function(){for(var e=0,t=0;t<this.rowsToDisplay.length;t++){var o=this.gridOptionsWrapper.getDomLayout()===s.Constants.DOM_LAYOUT_NORMAL,i=this.rowsToDisplay[t];if(w._.missing(i.rowHeight)){var n=this.gridOptionsWrapper.getRowHeightForNode(i,o);i.setRowHeight(n.height,n.estimated)}i.setRowTop(e),i.setRowIndex(t),e+=i.rowHeight}},e.prototype.resetRowTops=function(e,t){if(e.clearRowTop(),e.hasChildren()){if(e.childrenAfterGroup)if(!(t.isActive()&&!e.expanded))for(var o=0;o<e.childrenAfterGroup.length;o++)this.resetRowTops(e.childrenAfterGroup[o],t);e.sibling&&e.sibling.clearRowTop()}e.detailNode&&e.detailNode.clearRowTop()},e.prototype.ensureRowAtPixel=function(e,t){var o=this.getRowIndexAtPixel(t);return this.getRow(o)!==e&&(w._.removeFromArray(this.rootNode.allLeafChildren,e),w._.insertIntoArray(this.rootNode.allLeafChildren,e,o),this.refreshModel({step:s.Constants.STEP_EVERYTHING,keepRenderedRows:!0,animate:!0,keepEditingRows:!0}),!0)},e.prototype.isLastRowFound=function(){return!0},e.prototype.getRowCount=function(){return this.rowsToDisplay?this.rowsToDisplay.length:0},e.prototype.getTopLevelRowCount=function(){return this.rowsToDisplay&&this.rowsToDisplay[0]===this.rootNode?1:this.rootNode.childrenAfterFilter?this.rootNode.childrenAfterFilter.length:0},e.prototype.getTopLevelRowDisplayedIndex=function(e){if(this.rowsToDisplay&&this.rowsToDisplay[0]===this.rootNode)return e;var t=this.rootNode.childrenAfterSort[e];if(this.gridOptionsWrapper.isGroupHideOpenParents())for(;t.expanded&&t.childrenAfterSort&&t.childrenAfterSort.length>0;)t=t.childrenAfterSort[0];return t.rowIndex},e.prototype.getRowBounds=function(e){if(w._.missing(this.rowsToDisplay))return null;var t=this.rowsToDisplay[e];return t?{rowTop:t.rowTop,rowHeight:t.rowHeight}:null},e.prototype.onRowGroupOpened=function(){var e=this.gridOptionsWrapper.isAnimateRows();this.refreshModel({step:s.Constants.STEP_MAP,keepRenderedRows:!0,animate:e})},e.prototype.onFilterChanged=function(){var e=this.gridOptionsWrapper.isAnimateRows();this.refreshModel({step:s.Constants.STEP_FILTER,keepRenderedRows:!0,animate:e})},e.prototype.onSortChanged=function(){var e=this.gridOptionsWrapper.isAnimateRows();this.refreshModel({step:s.Constants.STEP_SORT,keepRenderedRows:!0,animate:e,keepEditingRows:!0})},e.prototype.getType=function(){return s.Constants.ROW_MODEL_TYPE_CLIENT_SIDE},e.prototype.onValueChanged=function(){this.columnController.isPivotActive()?this.refreshModel({step:s.Constants.STEP_PIVOT}):this.refreshModel({step:s.Constants.STEP_AGGREGATE})},e.prototype.createChangePath=function(e){var t=w._.missingOrEmpty(e),o=new v.ChangedPath(!1,this.rootNode);return(t||this.gridOptionsWrapper.isTreeData())&&o.setInactive(),o},e.prototype.refreshModel=function(e){var t=this,o=this.createChangePath(e.rowNodeTransactions);switch(e.step){case s.Constants.STEP_EVERYTHING:this.doRowGrouping(e.groupState,e.rowNodeTransactions,e.rowNodeOrder,o,e.afterColumnsChanged);case s.Constants.STEP_FILTER:this.doFilter(o);case s.Constants.STEP_PIVOT:this.doPivot(o);case s.Constants.STEP_AGGREGATE:this.doAggregate(o);case s.Constants.STEP_SORT:this.doSort(e.rowNodeTransactions,o);case s.Constants.STEP_MAP:this.doRowsToDisplay()}this.resetRowTops(this.rootNode,o),this.setRowTops();var i={type:h.Events.EVENT_MODEL_UPDATED,api:this.gridApi,columnApi:this.columnApi,animate:e.animate,keepRenderedRows:e.keepRenderedRows,newData:e.newData,newPage:!1};this.eventService.dispatchEvent(i),this.$scope&&window.setTimeout(function(){t.$scope.$apply()},0)},e.prototype.isEmpty=function(){var e;return e=w._.exists(this.gridOptionsWrapper.getNodeChildDetailsFunc())?w._.missing(this.rootNode.childrenAfterGroup)||0===this.rootNode.childrenAfterGroup.length:w._.missing(this.rootNode.allLeafChildren)||0===this.rootNode.allLeafChildren.length,w._.missing(this.rootNode)||e||!this.columnController.isReady()},e.prototype.isRowsToRender=function(){return w._.exists(this.rowsToDisplay)&&this.rowsToDisplay.length>0},e.prototype.getNodesInRangeForSelection=function(e,t){var o,i=!t,n=!1,r=[],s=this.gridOptionsWrapper.isGroupSelectsChildren();return this.forEachNodeAfterFilterAndSort(function(a){var l=i&&!n;if(i||a!==t&&a!==e||(i=!0),!(a.group&&s)){var p=i&&!n,u=a.isParentOfNode(o);(p||u)&&r.push(a)}l&&(a!==t&&a!==e||(n=!0,o=a===t?t:e))}),r},e.prototype.setDatasource=function(e){console.error(\"ag-Grid: should never call setDatasource on clientSideRowController\")},e.prototype.getTopLevelNodes=function(){return this.rootNode?this.rootNode.childrenAfterGroup:null},e.prototype.getRootNode=function(){return this.rootNode},e.prototype.getRow=function(e){return this.rowsToDisplay[e]},e.prototype.isRowPresent=function(e){return this.rowsToDisplay.indexOf(e)>=0},e.prototype.getRowIndexAtPixel=function(e){if(this.isEmpty())return-1;var t=0,o=this.rowsToDisplay.length-1;if(e<=0)return 0;if(w._.last(this.rowsToDisplay).rowTop<=e)return this.rowsToDisplay.length-1;for(;;){var i=Math.floor((t+o)/2),n=this.rowsToDisplay[i];if(this.isRowInPixel(n,e))return i;n.rowTop<e?t=i+1:n.rowTop>e&&(o=i-1)}},e.prototype.isRowInPixel=function(e,t){var o=e.rowTop,i=e.rowTop+e.rowHeight;return o<=t&&i>t},e.prototype.getCurrentPageHeight=function(){if(this.rowsToDisplay&&this.rowsToDisplay.length>0){var e=w._.last(this.rowsToDisplay);return e.rowTop+e.rowHeight}return 0},e.prototype.forEachLeafNode=function(e){this.rootNode.allLeafChildren&&this.rootNode.allLeafChildren.forEach(function(t,o){return e(t,o)})},e.prototype.forEachNode=function(e){this.recursivelyWalkNodesAndCallback(this.rootNode.childrenAfterGroup,e,r.Normal,0)},e.prototype.forEachNodeAfterFilter=function(e){this.recursivelyWalkNodesAndCallback(this.rootNode.childrenAfterFilter,e,r.AfterFilter,0)},e.prototype.forEachNodeAfterFilterAndSort=function(e){this.recursivelyWalkNodesAndCallback(this.rootNode.childrenAfterSort,e,r.AfterFilterAndSort,0)},e.prototype.forEachPivotNode=function(e){this.recursivelyWalkNodesAndCallback([this.rootNode],e,r.PivotNodes,0)},e.prototype.recursivelyWalkNodesAndCallback=function(e,t,o,i){if(e)for(var n=0;n<e.length;n++){var s=e[n];if(t(s,i++),s.hasChildren()){var a=null;switch(o){case r.Normal:a=s.childrenAfterGroup;break;case r.AfterFilter:a=s.childrenAfterFilter;break;case r.AfterFilterAndSort:a=s.childrenAfterSort;break;case r.PivotNodes:a=s.leafGroup?null:s.childrenAfterSort}a&&(i=this.recursivelyWalkNodesAndCallback(a,t,o,i))}}return i},e.prototype.doAggregate=function(e){this.aggregationStage&&this.aggregationStage.execute({rowNode:this.rootNode,changedPath:e})},e.prototype.expandOrCollapseAll=function(e){var t=this.gridOptionsWrapper.isTreeData();this.rootNode&&function o(i){if(!i)return;i.forEach(function(i){(t?w._.exists(i.childrenAfterGroup):i.group)&&(i.expanded=e,o(i.childrenAfterGroup))})}(this.rootNode.childrenAfterGroup),this.refreshModel({step:s.Constants.STEP_MAP});var o=e?\"expandAll\":\"collapseAll\",i={api:this.gridApi,columnApi:this.columnApi,type:h.Events.EVENT_EXPAND_COLLAPSE_ALL,source:o};this.eventService.dispatchEvent(i)},e.prototype.doSort=function(e,t){this.sortStage.execute({rowNode:this.rootNode,rowNodeTransactions:e,changedPath:t})},e.prototype.doRowGrouping=function(e,t,o,i,n){var r=this;w._.exists(this.gridOptionsWrapper.getNodeChildDetailsFunc())||(this.groupStage?(t&&w._.exists(t)?t.forEach(function(e){r.groupStage.execute({rowNode:r.rootNode,rowNodeTransaction:e,rowNodeOrder:o,changedPath:i})}):(this.selectionController.removeGroupsFromSelection(),this.groupStage.execute({rowNode:this.rootNode,changedPath:i,afterColumnsChanged:n}),this.restoreGroupState(e)),this.gridOptionsWrapper.isGroupSelectsChildren()&&this.selectionController.updateGroupsFromChildrenSelections(i)):this.rootNode.childrenAfterGroup=this.rootNode.allLeafChildren)},e.prototype.restoreGroupState=function(e){e&&w._.traverseNodesWithKey(this.rootNode.childrenAfterGroup,function(t,o){\"boolean\"==typeof e[o]&&(t.expanded=e[o])})},e.prototype.doFilter=function(e){this.filterStage.execute({rowNode:this.rootNode,changedPath:e})},e.prototype.doPivot=function(e){this.pivotStage&&this.pivotStage.execute({rowNode:this.rootNode,changedPath:e})},e.prototype.getGroupState=function(){if(!this.rootNode.childrenAfterGroup||!this.gridOptionsWrapper.isRememberGroupStateWhenNewData())return null;var e={};return w._.traverseNodesWithKey(this.rootNode.childrenAfterGroup,function(t,o){return e[o]=t.expanded}),e},e.prototype.getCopyOfNodesMap=function(){return this.nodeManager.getCopyOfNodesMap()},e.prototype.getRowNode=function(e){return this.nodeManager.getRowNode(e)},e.prototype.setRowData=function(e){var t=this.getGroupState();this.nodeManager.setRowData(e);var o={type:h.Events.EVENT_ROW_DATA_CHANGED,api:this.gridApi,columnApi:this.columnApi};this.eventService.dispatchEvent(o),this.refreshModel({step:s.Constants.STEP_EVERYTHING,groupState:t,newData:!0})},e.prototype.batchUpdateRowData=function(e,t){var o=this;if(!this.rowDataTransactionBatch){this.rowDataTransactionBatch=[];var i=this.gridOptionsWrapper.getBatchUpdateWaitMillis();window.setTimeout(function(){o.executeBatchUpdateRowData(),o.rowDataTransactionBatch=null},i)}this.rowDataTransactionBatch.push({rowDataTransaction:e,callback:t})},e.prototype.executeBatchUpdateRowData=function(){var e=this;this.valueCache.onDataChanged();var t=[],o=[];this.rowDataTransactionBatch&&this.rowDataTransactionBatch.forEach(function(i){var n=e.nodeManager.updateRowData(i.rowDataTransaction,null);o.push(n),i.callback&&t.push(i.callback.bind(null,n))}),this.commonUpdateRowData(o),t.length>0&&window.setTimeout(function(){t.forEach(function(e){return e()})},0)},e.prototype.updateRowData=function(e,t){this.valueCache.onDataChanged();var o=this.nodeManager.updateRowData(e,t);return this.commonUpdateRowData([o],t),o},e.prototype.commonUpdateRowData=function(e,t){this.refreshModel({step:s.Constants.STEP_EVERYTHING,rowNodeTransactions:e,rowNodeOrder:t,keepRenderedRows:!0,animate:!0,keepEditingRows:!0});var o={type:h.Events.EVENT_ROW_DATA_UPDATED,api:this.gridApi,columnApi:this.columnApi};this.eventService.dispatchEvent(o)},e.prototype.doRowsToDisplay=function(){this.rowsToDisplay=this.flattenStage.execute({rowNode:this.rootNode})},e.prototype.onRowHeightChanged=function(){this.refreshModel({step:s.Constants.STEP_MAP,keepRenderedRows:!0,keepEditingRows:!0})},e.prototype.resetRowHeights=function(){this.forEachNode(function(e){return e.setRowHeight(null)}),this.onRowHeightChanged()},i([f.Autowired(\"gridOptionsWrapper\"),n(\"design:type\",a.GridOptionsWrapper)],e.prototype,\"gridOptionsWrapper\",void 0),i([f.Autowired(\"columnController\"),n(\"design:type\",p.ColumnController)],e.prototype,\"columnController\",void 0),i([f.Autowired(\"filterManager\"),n(\"design:type\",u.FilterManager)],e.prototype,\"filterManager\",void 0),i([f.Autowired(\"$scope\"),n(\"design:type\",Object)],e.prototype,\"$scope\",void 0),i([f.Autowired(\"selectionController\"),n(\"design:type\",g.SelectionController)],e.prototype,\"selectionController\",void 0),i([f.Autowired(\"eventService\"),n(\"design:type\",c.EventService)],e.prototype,\"eventService\",void 0),i([f.Autowired(\"context\"),n(\"design:type\",f.Context)],e.prototype,\"context\",void 0),i([f.Autowired(\"valueService\"),n(\"design:type\",m.ValueService)],e.prototype,\"valueService\",void 0),i([f.Autowired(\"valueCache\"),n(\"design:type\",C.ValueCache)],e.prototype,\"valueCache\",void 0),i([f.Autowired(\"columnApi\"),n(\"design:type\",l.ColumnApi)],e.prototype,\"columnApi\",void 0),i([f.Autowired(\"gridApi\"),n(\"design:type\",E.GridApi)],e.prototype,\"gridApi\",void 0),i([f.Autowired(\"filterStage\"),n(\"design:type\",Object)],e.prototype,\"filterStage\",void 0),i([f.Autowired(\"sortStage\"),n(\"design:type\",Object)],e.prototype,\"sortStage\",void 0),i([f.Autowired(\"flattenStage\"),n(\"design:type\",Object)],e.prototype,\"flattenStage\",void 0),i([f.Optional(\"groupStage\"),n(\"design:type\",Object)],e.prototype,\"groupStage\",void 0),i([f.Optional(\"aggregationStage\"),n(\"design:type\",Object)],e.prototype,\"aggregationStage\",void 0),i([f.Optional(\"pivotStage\"),n(\"design:type\",Object)],e.prototype,\"pivotStage\",void 0),i([f.PostConstruct,n(\"design:type\",Function),n(\"design:paramtypes\",[]),n(\"design:returntype\",void 0)],e.prototype,\"init\",null),e=i([f.Bean(\"rowModel\")],e)}();t.ClientSideRowModel=R},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */Object.defineProperty(t,\"__esModule\",{value:!0});var i=o(18),n=o(5),r=o(1),s=function(){function e(t,o,i,n,r,s,a,l){this.nextId=0,this.allNodesMap={},this.rootNode=t,this.gridOptionsWrapper=o,this.context=i,this.eventService=n,this.columnController=r,this.gridApi=s,this.columnApi=a,this.selectionController=l,this.rootNode.group=!0,this.rootNode.level=-1,this.rootNode.id=e.ROOT_NODE_ID,this.rootNode.allLeafChildren=[],this.rootNode.childrenAfterGroup=[],this.rootNode.childrenAfterSort=[],this.rootNode.childrenAfterFilter=[],this.postConstruct()}return e.prototype.postConstruct=function(){this.getNodeChildDetails=this.gridOptionsWrapper.getNodeChildDetailsFunc(),this.suppressParentsInRowNodes=this.gridOptionsWrapper.isSuppressParentsInRowNodes(),this.doesDataFlower=this.gridOptionsWrapper.getDoesDataFlowerFunc(),this.isRowMasterFunc=this.gridOptionsWrapper.getIsRowMasterFunc(),this.doingLegacyTreeData=r._.exists(this.getNodeChildDetails),this.doingMasterDetail=this.gridOptionsWrapper.isMasterDetail(),this.getNodeChildDetails&&console.warn(\"ag-Grid: the callback nodeChildDetailsFunc() is now deprecated. The new way of doing\\n                                    tree data in ag-Grid was introduced in v14 (released November 2017). In the next\\n                                    major release of ag-Grid we will be dropping support for the old version of\\n                                    tree data. If you are reading this message, please go to the docs to see how\\n                                    to implement Tree Data without using nodeChildDetailsFunc().\")},e.prototype.getCopyOfNodesMap=function(){return r._.cloneObject(this.allNodesMap)},e.prototype.getRowNode=function(e){return this.allNodesMap[e]},e.prototype.setRowData=function(t){if(this.rootNode.childrenAfterFilter=null,this.rootNode.childrenAfterGroup=null,this.rootNode.childrenAfterSort=null,this.rootNode.childrenMapped=null,this.nextId=0,this.allNodesMap={},!t)return this.rootNode.allLeafChildren=[],void(this.rootNode.childrenAfterGroup=[]);var o=this.recursiveFunction(t,this.rootNode,e.TOP_LEVEL);this.doingLegacyTreeData?(this.rootNode.childrenAfterGroup=o,this.setLeafChildren(this.rootNode)):this.rootNode.allLeafChildren=o},e.prototype.updateRowData=function(e,t){if(this.isLegacyTreeData())return null;e.add,e.addIndex,e.remove,e.update;var o={remove:[],update:[],add:[]};return this.executeAdd(e,o),this.executeRemove(e,o),this.executeUpdate(e,o),t&&r._.sortRowNodesByOrder(this.rootNode.allLeafChildren,t),o},e.prototype.executeAdd=function(e,t){var o=this,i=e.add,n=e.addIndex;i&&(\"number\"==typeof n&&n>=0?i.reverse().forEach(function(e){var i=o.addRowNode(e,n);t.add.push(i)}):i.forEach(function(e){var i=o.addRowNode(e);t.add.push(i)}))},e.prototype.executeRemove=function(e,t){var o=this,i=e.remove;if(i){var r={},s=!1;if(i.forEach(function(e){var i=o.lookupRowNode(e);i&&(i.isSelected()&&(s=!0),i.setSelected(!1,!1,!0),i.clearRowTop(),r[i.id]=!0,delete o.allNodesMap[i.id],t.remove.push(i))}),this.rootNode.allLeafChildren=this.rootNode.allLeafChildren.filter(function(e){return!r[e.id]}),s){this.selectionController.updateGroupsFromChildrenSelections();var a={type:n.Events.EVENT_SELECTION_CHANGED,api:this.gridApi,columnApi:this.columnApi};this.eventService.dispatchEvent(a)}}},e.prototype.executeUpdate=function(e,t){var o=this,i=e.update;i&&i.forEach(function(e){var i=o.lookupRowNode(e);i&&(i.updateData(e),t.update.push(i))})},e.prototype.addRowNode=function(t,o){var i=this.createNode(t,this.rootNode,e.TOP_LEVEL);return r._.exists(o)?r._.insertIntoArray(this.rootNode.allLeafChildren,i,o):this.rootNode.allLeafChildren.push(i),i},e.prototype.lookupRowNode=function(e){var t,o=this.gridOptionsWrapper.getRowNodeIdFunc();if(r._.exists(o)){var i=o(e);if(!(t=this.allNodesMap[i]))return console.error(\"ag-Grid: could not find row id=\"+i+\", data item was not found for this id\"),null}else if(!(t=r._.find(this.rootNode.allLeafChildren,function(t){return t.data===e})))return console.error(\"ag-Grid: could not find data item as object was not found\",e),null;return t},e.prototype.recursiveFunction=function(e,t,o){var i=this;if(\"string\"!=typeof e){var n=[];return e.forEach(function(e){var r=i.createNode(e,t,o);n.push(r)}),n}console.warn(\"ag-Grid: rowData must be an array, however you passed in a string. If you are loading JSON, make sure you convert the JSON string to JavaScript objects first\")},e.prototype.createNode=function(e,t,o){var n=new i.RowNode;this.context.wireBean(n);var s=this.gridOptionsWrapper.isTreeData(),a=!s&&r._.exists(this.getNodeChildDetails)?this.getNodeChildDetails(e):null;if(a&&a.group)n.group=!0,n.childrenAfterGroup=this.recursiveFunction(a.children,n,o+1),n.expanded=!0===a.expanded,n.field=a.field,n.key=a.key,n.canFlower=n.master,this.setLeafChildren(n);else if(n.group=!1,s)n.master=!1,n.expanded=!1;else{this.doesDataFlower?n.master=this.doesDataFlower(e):this.doingMasterDetail?this.isRowMasterFunc?n.master=this.isRowMasterFunc(e):n.master=!0:n.master=!1;var l=this.columnController.getRowGroupColumns(),p=o+(l?l.length:0);n.expanded=!!n.master&&this.isExpanded(p)}return n.canFlower=n.master,t&&!this.suppressParentsInRowNodes&&(n.parent=t),n.level=o,n.setDataAndId(e,this.nextId.toString()),this.allNodesMap[n.id]&&console.warn(\"ag-grid: duplicate node id '\"+n.id+\"' detected from getRowNodeId callback, this could cause issues in your grid.\"),this.allNodesMap[n.id]=n,this.nextId++,n},e.prototype.isExpanded=function(e){var t=this.gridOptionsWrapper.getGroupDefaultExpanded();return-1===t||e<t},e.prototype.setLeafChildren=function(e){e.allLeafChildren=[],e.childrenAfterGroup&&e.childrenAfterGroup.forEach(function(t){t.group?t.allLeafChildren&&t.allLeafChildren.forEach(function(t){return e.allLeafChildren.push(t)}):e.allLeafChildren.push(t)})},e.prototype.isLegacyTreeData=function(){return!!r._.exists(this.gridOptionsWrapper.getNodeChildDetailsFunc())&&(console.warn(\"ag-Grid: adding and removing rows is not supported when using nodeChildDetailsFunc, ie it is not supported for legacy tree data. Please see the docs on the new preferred way of providing tree data that works with delta updates.\"),!0)},e.TOP_LEVEL=0,e.ROOT_NODE_ID=\"ROOT_NODE_ID\",e}();t.ClientSideNodeManager=s},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */Object.defineProperty(t,\"__esModule\",{value:!0});var i=function(){function e(){}return e.prototype.setTimeout=function(e,t){window.setTimeout(e,t)},e.prototype.addEventListenerOutsideAngular=function(e,t,o,i){e.addEventListener(t,o,i)},e}();t.VanillaFrameworkOverrides=i},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s};Object.defineProperty(t,\"__esModule\",{value:!0});var n=o(0),r=function(){function e(){}return e.prototype.createHeader=function(e){void 0===e&&(e={});var t=[\"version\"];return e.version||(e.version=\"1.0\"),e.encoding&&t.push(\"encoding\"),e.standalone&&t.push(\"standalone\"),\"<?xml \"+t.map(function(t){return t+'=\"'+e[t]+'\"'}).join(\" \")+\" ?>\"},e.prototype.createXml=function(e,t){var o=this,i=\"\";e.properties&&(e.properties.prefixedAttributes&&e.properties.prefixedAttributes.forEach(function(e){Object.keys(e.map).forEach(function(n){i+=o.returnAttributeIfPopulated(e.prefix+n,e.map[n],t)})}),e.properties.rawMap&&Object.keys(e.properties.rawMap).forEach(function(n){i+=o.returnAttributeIfPopulated(n,e.properties.rawMap[n],t)}));var n=\"<\"+e.name+i;return e.children||null!=e.textNode?null!=e.textNode?n+\">\"+e.textNode+\"</\"+e.name+\">\\r\\n\":(n+=\">\\r\\n\",e.children&&e.children.forEach(function(e){n+=o.createXml(e,t)}),n+\"</\"+e.name+\">\\r\\n\"):n+\"/>\\r\\n\"},e.prototype.returnAttributeIfPopulated=function(e,t,o){if(!t&&\"\"!==t&&0!==t)return\"\";var i=t;return\"boolean\"==typeof t&&o&&(i=o(t)),\" \"+e+'=\"'+i+'\"'},e=i([n.Bean(\"xmlFactory\")],e)}();t.XmlFactory=r},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s};Object.defineProperty(t,\"__esModule\",{value:!0});var n=o(0),r=o(1),s=[0,1996959894,-301047508,-1727442502,124634137,1886057615,-379345611,-1637575261,249268274,2044508324,-522852066,-1747789432,162941995,2125561021,-407360249,-1866523247,498536548,1789927666,-205950648,-2067906082,450548861,1843258603,-187386543,-2083289657,325883990,1684777152,-43845254,-1973040660,335633487,1661365465,-99664541,-1928851979,997073096,1281953886,-715111964,-1570279054,1006888145,1258607687,-770865667,-1526024853,901097722,1119000684,-608450090,-1396901568,853044451,1172266101,-589951537,-1412350631,651767980,1373503546,-925412992,-1076862698,565507253,1454621731,-809855591,-1195530993,671266974,1594198024,-972236366,-1324619484,795835527,1483230225,-1050600021,-1234817731,1994146192,31158534,-1731059524,-271249366,1907459465,112637215,-1614814043,-390540237,2013776290,251722036,-1777751922,-519137256,2137656763,141376813,-1855689577,-429695999,1802195444,476864866,-2056965928,-228458418,1812370925,453092731,-2113342271,-183516073,1706088902,314042704,-1950435094,-54949764,1658658271,366619977,-1932296973,-69972891,1303535960,984961486,-1547960204,-725929758,1256170817,1037604311,-1529756563,-740887301,1131014506,879679996,-1385723834,-631195440,1141124467,855842277,-1442165665,-586318647,1342533948,654459306,-1106571248,-921952122,1466479909,544179635,-1184443383,-832445281,1591671054,702138776,-1328506846,-942167884,1504918807,783551873,-1212326853,-1061524307,-306674912,-1698712650,62317068,1957810842,-355121351,-1647151185,81470997,1943803523,-480048366,-1805370492,225274430,2053790376,-468791541,-1828061283,167816743,2097651377,-267414716,-2029476910,503444072,1762050814,-144550051,-2140837941,426522225,1852507879,-19653770,-1982649376,282753626,1742555852,-105259153,-1900089351,397917763,1622183637,-690576408,-1580100738,953729732,1340076626,-776247311,-1497606297,1068828381,1219638859,-670225446,-1358292148,906185462,1090812512,-547295293,-1469587627,829329135,1181335161,-882789492,-1134132454,628085408,1382605366,-871598187,-1156888829,570562233,1426400815,-977650754,-1296233688,733239954,1555261956,-1026031705,-1244606671,752459403,1541320221,-1687895376,-328994266,1969922972,40735498,-1677130071,-351390145,1913087877,83908371,-1782625662,-491226604,2075208622,213261112,-1831694693,-438977011,2094854071,198958881,-2032938284,-237706686,1759359992,534414190,-2118248755,-155638181,1873836001,414664567,-2012718362,-15766928,1711684554,285281116,-1889165569,-127750551,1634467795,376229701,-1609899400,-686959890,1308918612,956543938,-1486412191,-799009033,1231636301,1047427035,-1362007478,-640263460,1088359270,936918e3,-1447252397,-558129467,1202900863,817233897,-1111625188,-893730166,1404277552,615818150,-1160759803,-841546093,1423857449,601450431,-1285129682,-1000256840,1567103746,711928724,-1274298825,-1022587231,1510334235,755167117],a=function(){function e(){var e=this;this.folders=[],this.files=[],this.addFolder=function(t){e.folders.push({path:t,created:new Date})}}return e.prototype.addFolders=function(e){e.forEach(this.addFolder)},e.prototype.addFile=function(e,t){this.files.push({path:e,created:new Date,content:t})},e.prototype.clearStream=function(){this.folders=[],this.files=[]},e.prototype.getContent=function(e){void 0===e&&(e=\"application/zip\");var t=this.buildFileStream(),o=this.buildUint8Array(t);return this.clearStream(),new Blob([o],{type:e})},e.prototype.buildFileStream=function(e){void 0===e&&(e=\"\");for(var t=this.folders.concat(this.files),o=t.length,i=\"\",n=0,r=0,s=0,a=t;s<a.length;s++){var l=a[s],p=this.getHeader(l,n),u=p.fileHeader,d=p.folderHeader,c=p.content;n+=u.length+c.length,r+=d.length,e+=u+c,i+=d}return e+i+this.buildFolderEnd(o,r,n)},e.prototype.getHeader=function(e,t){var o=e.content,i=e.path,n=e.created,s=r._.utf8_encode,a=r._.decToHex,l=s(i),p=l!==i,u=this.convertTime(n),d=this.convertDate(n),c=\"\";if(p){var h=a(1,1)+a(this.getFromCrc32Table(l),4)+l;c=\"up\"+a(h.length,2)+h}var f=\"\\n\\0\"+(p?\"\\0\\b\":\"\\0\\0\")+\"\\0\\0\"+a(u,2)+a(d,2)+a(o?this.getFromCrc32Table(o):0,4)+a(o?o.length:0,4)+a(o?o.length:0,4)+a(l.length,2)+a(c.length,2);return{fileHeader:\"PK\u0003\u0004\"+f+l+c,folderHeader:\"PK\u0001\u0002\u0014\\0\"+f+\"\\0\\0\\0\\0\\0\\0\"+(o?\"\\0\\0\\0\\0\":\"\u0010\\0\\0\\0\")+a(t,4)+l+c,content:o||\"\"}},e.prototype.buildFolderEnd=function(e,t,o){var i=r._.decToHex;return\"PK\u0005\u0006\\0\\0\\0\\0\"+i(e,2)+i(e,2)+i(t,4)+i(o,4)+\"\\0\\0\"},e.prototype.buildUint8Array=function(e){for(var t=new Uint8Array(e.length),o=0;o<t.length;o++)t[o]=e.charCodeAt(o);return t},e.prototype.getFromCrc32Table=function(e,t){if(void 0===t&&(t=0),!e.length)return 0;t^=-1;for(var o=0,i=0;i<e.length;i++)o=e.charCodeAt(i),t=t>>>8^s[255&(t^o)];return-1^t},e.prototype.convertTime=function(e){var t=e.getHours();return t<<=6,t|=e.getMinutes(),t<<=5,t|=e.getSeconds()/2},e.prototype.convertDate=function(e){var t=e.getFullYear()-1980;return t<<=4,t|=e.getMonth()+1,t<<=5,t|=e.getDate()},e=i([n.Bean(\"zipContainer\")],e)}();t.ZipContainer=a},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}),r=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},s=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(7),l=o(10),p=o(0),u=o(2),d=o(38),c=o(1),h=function(e){function t(o){var i=e.call(this,t.TEMPLATE)||this;i.suppressEnabledCheckbox=!0,i.suppressOpenCloseIcons=!1,o||(o={});var n=o.title,r=o.enabled,s=o.items,a=o.suppressEnabledCheckbox,l=o.suppressOpenCloseIcons;return i.title=n,i.enabled=null==r||r,i.items=s||[],null!=a&&(i.suppressEnabledCheckbox=a),null!=l&&(i.suppressOpenCloseIcons=l),i}return n(t,e),t.prototype.postConstruct=function(){if(this.items.length){var e=this.items;this.items=[],this.addItems(e)}var t=this.gridOptionsWrapper.getLocaleTextFunc();this.cbGroupEnabled.setLabel(t(\"enabled\",\"Enabled\")),this.title&&this.setTitle(this.title),this.enabled&&this.setEnabled(this.enabled),this.hideEnabledCheckbox(this.suppressEnabledCheckbox),this.hideOpenCloseIcons(this.suppressOpenCloseIcons),this.setupExpandContract()},t.prototype.setupExpandContract=function(){var e=this;this.eGroupClosedIcon.appendChild(c._.createIcon(\"columnSelectClosed\",this.gridOptionsWrapper,null)),this.eGroupOpenedIcon.appendChild(c._.createIcon(\"columnSelectOpen\",this.gridOptionsWrapper,null)),this.setOpenClosedIcons(),this.addDestroyableEventListener(this.groupTitle,\"click\",function(){return e.toggleGroupExpand()})},t.prototype.setOpenClosedIcons=function(){var e=this.expanded;c._.setDisplayed(this.eGroupClosedIcon,!e),c._.setDisplayed(this.eGroupOpenedIcon,e)},t.prototype.isExpanded=function(){return this.expanded},t.prototype.toggleGroupExpand=function(e){var t=this.getGui();if(this.suppressOpenCloseIcons)return this.expanded=!0,c._.removeCssClass(t,\"ag-collapsed\"),this;if(e=null!=e?e:!this.expanded,this.expanded===e)return this;if(this.expanded=e,this.setOpenClosedIcons(),c._.addOrRemoveCssClass(t,\"ag-collapsed\",!e),this.expanded){this.dispatchEvent({type:\"expanded\"})}return this},t.prototype.addItems=function(e){var t=this;e.forEach(function(e){return t.addItem(e)})},t.prototype.addItem=function(e){var t=this.groupContainer,o=e instanceof a.Component?e.getGui():e;c._.addCssClass(o,\"ag-group-item\"),t.appendChild(o),this.items.push(o)},t.prototype.setTitle=function(e){return this.lbGroupTitle.innerText=e,this},t.prototype.setEnabled=function(e,t){return this.enabled=e,c._.addOrRemoveCssClass(this.getGui(),\"ag-disabled\",!e),this.toggleGroupExpand(e),t||this.cbGroupEnabled.setValue(e),this},t.prototype.isEnabled=function(){return this.enabled},t.prototype.onEnableChange=function(e){var t=this;return this.cbGroupEnabled.onValueChange(function(o){t.setEnabled(o,!0),e(o)}),this},t.prototype.hideEnabledCheckbox=function(e){return c._.addOrRemoveCssClass(this.eToolbar,\"ag-hidden\",e),this},t.prototype.hideOpenCloseIcons=function(e){return this.suppressOpenCloseIcons=e,c._.addOrRemoveCssClass(this.getGui(),\"ag-collapsible\",!e),e&&this.toggleGroupExpand(!0),this},t.TEMPLATE='<div class=\"ag-group-component\">\\n            <div class=\"ag-group-component-title-bar\" ref=\"groupTitle\">\\n                 <span class=\"ag-column-group-icons\">\\n                    <span class=\"ag-column-group-closed-icon\" ref=\"eGroupOpenedIcon\"></span>\\n                    <span class=\"ag-column-group-opened-icon\" ref=\"eGroupClosedIcon\"></span>\\n                </span>\\n                <span ref=\"lbGroupTitle\" class=\"ag-group-component-title\"></span>\\n            </div>\\n            <div ref=\"eToolbar\" class=\"ag-group-component-toolbar\">\\n                <ag-checkbox ref=\"cbGroupEnabled\"></ag-checkbox>\\n            </div>\\n            <div ref=\"eContainer\" class=\"ag-group-component-container\"></div>\\n        </div>',r([p.Autowired(\"gridOptionsWrapper\"),s(\"design:type\",u.GridOptionsWrapper)],t.prototype,\"gridOptionsWrapper\",void 0),r([l.RefSelector(\"groupTitle\"),s(\"design:type\",HTMLElement)],t.prototype,\"groupTitle\",void 0),r([l.RefSelector(\"eGroupOpenedIcon\"),s(\"design:type\",HTMLElement)],t.prototype,\"eGroupOpenedIcon\",void 0),r([l.RefSelector(\"eGroupClosedIcon\"),s(\"design:type\",HTMLElement)],t.prototype,\"eGroupClosedIcon\",void 0),r([l.RefSelector(\"eToolbar\"),s(\"design:type\",HTMLElement)],t.prototype,\"eToolbar\",void 0),r([l.RefSelector(\"cbGroupEnabled\"),s(\"design:type\",d.AgCheckbox)],t.prototype,\"cbGroupEnabled\",void 0),r([l.RefSelector(\"lbGroupTitle\"),s(\"design:type\",HTMLElement)],t.prototype,\"lbGroupTitle\",void 0),r([l.RefSelector(\"eContainer\"),s(\"design:type\",HTMLElement)],t.prototype,\"groupContainer\",void 0),r([p.PostConstruct,s(\"design:type\",Function),s(\"design:paramtypes\",[]),s(\"design:returntype\",void 0)],t.prototype,\"postConstruct\",null),t}(a.Component);t.AgGroupComponent=h},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)});Object.defineProperty(t,\"__esModule\",{value:!0});var r=function(e){function t(t){var o=e.call(this)||this;return o.className=\"ag-text-area\",o.displayTag=\"textarea\",o.inputType=\"\",o.setTemplate(o.TEMPLATE.replace(/%displayField%/g,o.displayTag)),t&&(o.config=t),o}return n(t,e),t.prototype.setValue=function(t,o){var i=e.prototype.setValue.call(this,t,o);return this.eInput.value=t,i},t}(o(47).AgAbstractInputField);t.AgInputTextArea=r},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}),r=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},s=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(10),l=o(100),p=o(87),u=o(63),d=o(32),c=function(e){function t(){var o=e.call(this,t.TEMPLATE)||this;return o.labelAlignment=\"top\",o}return n(t,e),t.prototype.postConstruct=function(){e.prototype.postConstruct.call(this),this.setMinValue(0)},t.prototype.onValueChange=function(e){var t=this,o=d.AgAbstractField.EVENT_CHANGED;return this.addDestroyableEventListener(this.eText,o,function(){var o=parseFloat(t.eText.getValue());t.eSlider.setValue(o.toString(),!0),e(o||0)}),this.addDestroyableEventListener(this.eSlider,o,function(){var o=t.eSlider.getValue();t.eText.setValue(o,!0),e(parseFloat(o))}),this},t.prototype.setSliderWidth=function(e){return this.eSlider.setWidth(e),this},t.prototype.setTextFieldWidth=function(e){return this.eText.setWidth(e),this},t.prototype.setMinValue=function(e){return this.eSlider.setMinValue(e),this.eText.setMin(e),this},t.prototype.setMaxValue=function(e){return this.eSlider.setMaxValue(e),this.eText.setMax(e),this},t.prototype.getValue=function(){return this.eText.getValue()},t.prototype.setValue=function(e){return this.getValue()===e?this:(this.eText.setValue(e,!0),this.eSlider.setValue(e,!0),this.dispatchEvent({type:d.AgAbstractField.EVENT_CHANGED}),this)},t.prototype.setStep=function(e){return this.eSlider.setStep(e),this.eText.setStep(e),this},t.TEMPLATE='<div class=\"ag-slider\">\\n            <label ref=\"eLabel\"></label>\\n            <div class=\"ag-wrapper\">\\n                <ag-input-range ref=\"eSlider\"></ag-input-range>\\n                <ag-input-number-field ref=\"eText\"></ag-input-number-field>\\n            </div>\\n        </div>',r([a.RefSelector(\"eLabel\"),s(\"design:type\",HTMLElement)],t.prototype,\"eLabel\",void 0),r([a.RefSelector(\"eSlider\"),s(\"design:type\",l.AgInputRange)],t.prototype,\"eSlider\",void 0),r([a.RefSelector(\"eText\"),s(\"design:type\",u.AgInputNumberField)],t.prototype,\"eText\",void 0),t}(p.AgAbstractLabel);t.AgSlider=c},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)});Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(176),s=o(62),a=o(177),l=o(32),p=o(1),u=function(e){function t(t){var o=e.call(this)||this;return o.displayTag=\"div\",o.className=\"ag-color-picker\",o.pickerIcon=\"colorPicker\",o.setTemplate(o.TEMPLATE.replace(/%displayField%/g,o.displayTag)),t&&t.color&&(o.value=t.color),o}return n(t,e),t.prototype.postConstruct=function(){var t=this;e.prototype.postConstruct.call(this),p._.addCssClass(this.getGui(),this.className),this.addDestroyableEventListener(this.eDisplayField,\"click\",function(){return t.showPicker()}),this.value&&this.setValue(this.value)},t.prototype.showPicker=function(){var e=this;if(this.displayedPicker)this.displayedPicker=!1;else{var t=this.getGui().getBoundingClientRect(),o=new s.AgDialog({closable:!1,modal:!0,hideTitleBar:!0,minWidth:190,width:190,height:250,x:t.right-190,y:t.top-250});this.getContext().wireBean(o),p._.addCssClass(o.getGui(),\"ag-color-dialog\");var i=new r.AgColorPanel({picker:this});this.getContext().wireBean(i),i.addDestroyFunc(function(){o.isAlive()&&o.destroy()}),o.setParentComponent(this),o.setBodyComponent(i),i.setValue(this.getValue()),o.addDestroyFunc(function(){var t=e.isDestroyingPicker;e.displayedPicker=!1,t?e.isDestroyingPicker=!1:(e.isDestroyingPicker=!0,i.isAlive()&&i.destroy())})}},t.prototype.setValue=function(e){return this.value===e?this:(this.value=e,this.eDisplayField.style.backgroundColor=e,this.dispatchEvent({type:l.AgAbstractField.EVENT_CHANGED}),this)},t.prototype.getValue=function(){return this.value},t}(a.AgPickerField);t.AgColorPicker=u},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)});Object.defineProperty(t,\"__esModule\",{value:!0});var r=function(e){function t(){var t=e.call(this)||this;return t.className=\"ag-select\",t.displayTag=\"select\",t.inputType=\"\",t.setTemplate(t.TEMPLATE.replace(/%displayField%/g,t.displayTag)),t}return n(t,e),t.prototype.addOptions=function(e){var t=this;return e.forEach(function(e){return t.addOption(e)}),this},t.prototype.addOption=function(e){var t=document.createElement(\"option\");return t.value=e.value,t.text=e.text||e.value,this.eInput.appendChild(t),this},t.prototype.setValue=function(t,o){var i=e.prototype.setValue.call(this,t,o);return this.eInput.value=t,i},t}(o(47).AgAbstractInputField);t.AgSelect=r},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}),r=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},s=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(87),l=o(10),p=o(0),u=o(30),d=o(63),c=o(32),h=o(1),f=function(e){function t(){var o=e.call(this,t.TEMPLATE)||this;return o.radius=0,o.offsetX=0,o.offsetY=0,o}return n(t,e),t.prototype.postConstruct=function(){var t=this;e.prototype.postConstruct.call(this),this.dragListener={eElement:this.eParentCircle,dragStartPixels:0,onDragStart:function(e){t.parentCircleRect=t.eParentCircle.getBoundingClientRect()},onDragging:function(e){return t.calculateAngleDrag(e)},onDragStop:function(){}},this.dragService.addDragSource(this.dragListener),this.eAngleValue.setLabel(\"\").setLabelWidth(5).setInputWidth(45).setMin(0).setMax(360).setValue(\"\"+this.degrees).onValueChange(function(e){null!=e&&\"\"!==e||(e=\"0\"),e=t.eAngleValue.normalizeValue(e);var o=parseFloat(e);o>180&&(o-=360),t.setValue(o)}),this.updateNumberInput(),h._.exists(this.getValue())&&this.eAngleValue.setValue(this.normalizeNegativeValue(this.getValue()).toString()),this.addDestroyableEventListener(this,c.AgAbstractField.EVENT_CHANGED,function(){t.eAngleValue.getInputElement().contains(document.activeElement)||t.updateNumberInput()})},t.prototype.updateNumberInput=function(){var e=this.normalizeNegativeValue(this.getValue());this.eAngleValue.setValue(e.toString())},t.prototype.positionChildCircle=function(e){var t=this.parentCircleRect||{width:24,height:24},o=this.eChildCircle,i=t.width/2,n=t.height/2;o.style.left=i+8*Math.cos(e)+\"px\",o.style.top=n+8*Math.sin(e)+\"px\"},t.prototype.calculatePolar=function(){var e=this.offsetX,t=this.offsetY,o=Math.atan2(t,e);this.degrees=this.toDegrees(o),this.radius=Math.sqrt(e*e+t*t),this.positionChildCircle(o)},t.prototype.calculateCartesian=function(){var e=this.toRadians(this.getValue()),t=this.getRadius();this.setOffsetX(Math.cos(e)*t).setOffsetY(Math.sin(e)*t)},t.prototype.setOffsetX=function(e){return this.offsetX!==e&&(this.offsetX=e,this.calculatePolar()),this},t.prototype.setOffsetY=function(e){return this.offsetY!==e&&(this.offsetY=e,this.calculatePolar()),this},t.prototype.calculateAngleDrag=function(e){var t=this.parentCircleRect,o=t.width/2,i=t.height/2,n=e.clientX-t.left-o,r=e.clientY-t.top-i,s=Math.atan2(r,n);this.setValue(s,!0)},t.prototype.toDegrees=function(e){return e/Math.PI*180},t.prototype.toRadians=function(e){return e/180*Math.PI},t.prototype.normalizeNegativeValue=function(e){return e<0?360+e:e},t.prototype.normalizeAngle180=function(e){return(e%=2*Math.PI)<-Math.PI?e+=2*Math.PI:e>=Math.PI&&(e-=2*Math.PI),e},t.prototype.getRadius=function(){return this.radius},t.prototype.setRadius=function(e){return this.radius===e?this:(this.radius=e,this.calculateCartesian(),this)},t.prototype.onValueChange=function(e){var t=this;return this.addDestroyableEventListener(this,c.AgAbstractField.EVENT_CHANGED,function(){e(t.degrees)}),this},t.prototype.getValue=function(e){return e?this.toRadians(this.degrees):this.degrees},t.prototype.setValue=function(e,t){var o;return o=t?e:this.normalizeAngle180(this.toRadians(e)),e=this.toDegrees(o),this.degrees!==e&&(this.degrees=Math.floor(e),this.calculateCartesian(),this.positionChildCircle(o),this.dispatchEvent({type:c.AgAbstractField.EVENT_CHANGED})),this},t.prototype.setWidth=function(e){return h._.setFixedWidth(this.getGui(),e),this},t.prototype.destroy=function(){e.prototype.destroy.call(this),this.dragService.removeDragSource(this.dragListener)},t.TEMPLATE='<div class=\"ag-angle-select\">\\n            <label ref=\"eLabel\"></label>\\n            <div class=\"ag-wrapper\">\\n                <div ref=\"eAngleSelectField\" class=\"ag-angle-select-field\">\\n                    <div ref=\"eParentCircle\" class=\"ag-parent-circle\">\\n                        <div ref=\"eChildCircle\" class=\"ag-child-circle\"></div>\\n                    </div>\\n                </div>\\n                <ag-input-number-field ref=\"eAngleValue\"></ag-input-number-field>\\n            </div>\\n        </div>',r([l.RefSelector(\"eLabel\"),s(\"design:type\",HTMLElement)],t.prototype,\"eLabel\",void 0),r([l.RefSelector(\"eParentCircle\"),s(\"design:type\",HTMLElement)],t.prototype,\"eParentCircle\",void 0),r([l.RefSelector(\"eChildCircle\"),s(\"design:type\",HTMLElement)],t.prototype,\"eChildCircle\",void 0),r([l.RefSelector(\"eAngleValue\"),s(\"design:type\",d.AgInputNumberField)],t.prototype,\"eAngleValue\",void 0),r([p.Autowired(\"dragService\"),s(\"design:type\",u.DragService)],t.prototype,\"dragService\",void 0),t}(a.AgAbstractLabel);t.AgAngleSelect=f},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)});Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(97),s=o(1),a=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.className=\"ag-toggle-button\",t}return n(t,e),t.prototype.postConstruct=function(){e.prototype.postConstruct.call(this),s._.addCssClass(this.eIconEl,\"ag-icon\")},t.prototype.updateIcons=function(){var e=this.getValue();s._.addOrRemoveCssClass(this.eIconEl,\"ag-icon-toggle-on\",e),s._.addOrRemoveCssClass(this.eIconEl,\"ag-icon-toggle-off\",!e)},t.prototype.setValue=function(t,o){return e.prototype.setValue.call(this,t,o),s._.addOrRemoveCssClass(this.getGui(),\"ag-selected\",this.getValue()),this},t}(r.AgRadioButton);t.AgToggleButton=a},function(e,t,o){\"use strict\";(function(e){\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */\nObject.defineProperty(t,\"__esModule\",{value:!0});var i=void 0===e?{}:e;i.HTMLElement=\"undefined\"==typeof HTMLElement?{}:HTMLElement,i.HTMLButtonElement=\"undefined\"==typeof HTMLButtonElement?{}:HTMLButtonElement,i.HTMLSelectElement=\"undefined\"==typeof HTMLSelectElement?{}:HTMLSelectElement,i.HTMLInputElement=\"undefined\"==typeof HTMLInputElement?{}:HTMLInputElement,i.Node=\"undefined\"==typeof Node?{}:Node,i.MouseEvent=\"undefined\"==typeof MouseEvent?{}:MouseEvent;var n=o(39);t.ColumnFactory=n.ColumnFactory;var r=o(4);t.ColumnController=r.ColumnController;var s=o(116);t.ColumnKeyCreator=s.ColumnKeyCreator;var a=o(33);t.ColumnUtils=a.ColumnUtils;var l=o(50);t.DisplayedGroupCreator=l.DisplayedGroupCreator;var p=o(89);t.GroupInstanceIdCreator=p.GroupInstanceIdCreator;var u=o(64);t.ComponentUtil=u.ComponentUtil;var d=o(114);t.ColDefUtil=d.ColDefUtil;var c=o(72);t.UserComponentRegistry=c.UserComponentRegistry;var h=o(16);t.UserComponentFactory=h.UserComponentFactory;var f=o(166);t.initialiseAgGridWithAngular1=f.initialiseAgGridWithAngular1;var g=o(178);t.initialiseAgGridWithWebComponents=g.initialiseAgGridWithWebComponents;var y=o(13);t.BeanStub=y.BeanStub;var v=o(0);t.Context=v.Context,t.Autowired=v.Autowired,t.PostConstruct=v.PostConstruct,t.PreConstruct=v.PreConstruct,t.Optional=v.Optional,t.Bean=v.Bean,t.Qualifier=v.Qualifier,t.PreDestroy=v.PreDestroy;var m=o(10);t.QuerySelector=m.QuerySelector,t.Listener=m.Listener,t.RefSelector=m.RefSelector;var C=o(15);t.DragAndDropService=C.DragAndDropService,t.DragSourceType=C.DragSourceType,t.HDirection=C.HDirection,t.VDirection=C.VDirection;var E=o(30);t.DragService=E.DragService;var w=o(11);t.Column=w.Column;var R=o(29);t.ColumnGroup=R.ColumnGroup;var _=o(34);t.OriginalColumnGroup=_.OriginalColumnGroup;var O=o(18);t.RowNode=O.RowNode;var S=o(14);t.FilterManager=S.FilterManager;var b=o(54);t.ProvidedFilter=b.ProvidedFilter;var P=o(27);t.SimpleFilter=P.SimpleFilter;var A=o(75);t.ScalerFilter=A.ScalerFilter;var D=o(79);t.NumberFilter=D.NumberFilter;var T=o(80);t.TextFilter=T.TextFilter;var F=o(74);t.DateFilter=F.DateFilter;var N=o(94);t.GridPanel=N.GridPanel;var L=o(48);t.ScrollVisibleService=L.ScrollVisibleService;var I=o(45);t.MouseEventService=I.MouseEventService;var M=o(121);t.BodyDropPivotTarget=M.BodyDropPivotTarget;var G=o(119);t.BodyDropTarget=G.BodyDropTarget;var x=o(86);t.CssClassApplier=x.CssClassApplier;var W=o(117);t.HeaderContainer=W.HeaderContainer;var H=o(93);t.HeaderRootComp=H.HeaderRootComp;var V=o(118);t.HeaderRowComp=V.HeaderRowComp;var B=o(57);t.HorizontalResizeService=B.HorizontalResizeService;var k=o(120);t.MoveColumnController=k.MoveColumnController;var j=o(126);t.StandardMenuFactory=j.StandardMenuFactory;var U=o(179);t.TabbedLayout=U.TabbedLayout;var z=o(180);t.VerticalStack=z.VerticalStack;var Y=o(181);t.simpleHttpRequest=Y.simpleHttpRequest;var K=o(60);t.ResizeObserverService=K.ResizeObserverService;var q=o(107);t.LargeTextCellEditor=q.LargeTextCellEditor;var Q=o(68);t.PopupEditorWrapper=Q.PopupEditorWrapper;var X=o(106);t.PopupSelectCellEditor=X.PopupSelectCellEditor;var $=o(105);t.PopupTextCellEditor=$.PopupTextCellEditor;var J=o(78);t.SelectCellEditor=J.SelectCellEditor;var Z=o(73);t.TextCellEditor=Z.TextCellEditor;var ee=o(77);t.AnimateShowChangeCellRenderer=ee.AnimateShowChangeCellRenderer;var te=o(71);t.AnimateSlideCellRenderer=te.AnimateSlideCellRenderer;var oe=o(76);t.GroupCellRenderer=oe.GroupCellRenderer;var ie=o(58);t.SetLeftFeature=ie.SetLeftFeature;var ne=o(40);t.AutoWidthCalculator=ne.AutoWidthCalculator;var re=o(53);t.CellRendererFactory=re.CellRendererFactory;var se=o(67);t.CheckboxSelectionComponent=se.CheckboxSelectionComponent;var ae=o(41);t.CellComp=ae.CellComp;var le=o(66);t.RowComp=le.RowComp;var pe=o(17);t.RowRenderer=pe.RowRenderer;var ue=o(44);t.ValueFormatterService=ue.ValueFormatterService;var de=o(127);t.FilterStage=de.FilterStage;var ce=o(131);t.FlattenStage=ce.FlattenStage;var he=o(129);t.SortStage=he.SortStage;var fe=o(24);t.PinnedRowModel=fe.PinnedRowModel;var ge=o(134);t.ClientSideRowModel=ge.ClientSideRowModel;var ye=o(51);t.ChangedPath=ye.ChangedPath;var ve=o(135);t.ClientSideNodeManager=ve.ClientSideNodeManager;var me=o(132);t.InfiniteRowModel=me.InfiniteRowModel;var Ce=o(61);t.RowNodeBlock=Ce.RowNodeBlock;var Ee=o(133);t.RowNodeBlockLoader=Ee.RowNodeBlockLoader;var we=o(25);t.PaginationProxy=we.PaginationProxy;var Re=o(96);t.RowNodeCache=Re.RowNodeCache;var _e=o(83);t.StylingService=_e.StylingService;var Oe=o(32);t.AgAbstractField=Oe.AgAbstractField;var Se=o(38);t.AgCheckbox=Se.AgCheckbox;var be=o(97);t.AgRadioButton=be.AgRadioButton;var Pe=o(145);t.AgToggleButton=Pe.AgToggleButton;var Ae=o(99);t.AgInputTextField=Ae.AgInputTextField;var De=o(140);t.AgInputTextArea=De.AgInputTextArea;var Te=o(63);t.AgInputNumberField=Te.AgInputNumberField;var Fe=o(100);t.AgInputRange=Fe.AgInputRange;var Ne=o(143);t.AgSelect=Ne.AgSelect;var Le=o(141);t.AgSlider=Le.AgSlider;var Ie=o(144);t.AgAngleSelect=Ie.AgAngleSelect;var Me=o(142);t.AgColorPicker=Me.AgColorPicker;var Ge=o(139);t.AgGroupComponent=Ge.AgGroupComponent;var xe=o(62);t.AgDialog=xe.AgDialog;var We=o(98);t.AgPanel=We.AgPanel;var He=o(182);t.MessageBox=He.MessageBox;var Ve=o(7);t.Component=Ve.Component;var Be=o(36);t.PopupComponent=Be.PopupComponent;var ke=o(26);t.PopupService=ke.PopupService;var je=o(43);t.TouchListener=je.TouchListener;var Ue=o(102);t.CellRangeType=Ue.CellRangeType;var ze=o(65);t.CsvCreator=ze.CsvCreator,t.BaseCreator=ze.BaseCreator;var Ye=o(90);t.Downloader=Ye.Downloader;var Ke=o(137);t.XmlFactory=Ke.XmlFactory;var qe=o(49);t.BaseGridSerializingSession=qe.BaseGridSerializingSession,t.GridSerializer=qe.GridSerializer;var Qe=o(49);t.RowType=Qe.RowType;var Xe=o(138);t.ZipContainer=Xe.ZipContainer;var $e=o(136);t.VanillaFrameworkOverrides=$e.VanillaFrameworkOverrides;var Je=o(69);t.CellNavigationService=Je.CellNavigationService;var Ze=o(59);t.AlignedGridsService=Ze.AlignedGridsService;var et=o(6);t.Constants=et.Constants;var tt=o(92);t.Grid=tt.Grid;var ot=o(8);t.GridApi=ot.GridApi;var it=o(28);t.Events=it.Events;var nt=o(22);t.FocusedCellController=nt.FocusedCellController;var rt=o(183);t.defaultGroupComparator=rt.defaultGroupComparator;var st=o(2);t.GridOptionsWrapper=st.GridOptionsWrapper;var at=o(3);t.EventService=at.EventService;var lt=o(95);t.SelectableService=lt.SelectableService;var pt=o(125);t.GridCore=pt.GridCore;var ut=o(12);t.Logger=ut.Logger;var dt=o(19);t.SelectionController=dt.SelectionController;var ct=o(23);t.SortController=ct.SortController;var ht=o(70);t.TemplateService=ht.TemplateService;var ft=o(1);t.Color=ft.Color,t.Utils=ft.Utils,t.NumberSequence=ft.NumberSequence,t._=ft._,t.Promise=ft.Promise;var gt=o(20);t.ValueService=gt.ValueService;var yt=o(21);t.ExpressionService=yt.ExpressionService;var vt=o(12);t.LoggerFactory=vt.LoggerFactory;var mt=o(85);t.CellPositionUtils=mt.CellPositionUtils;var Ct=o(56);t.RowPositionUtils=Ct.RowPositionUtils;var Et=o(9);t.ColumnApi=Et.ColumnApi;var wt=o(184);t.BaseComponentWrapper=wt.BaseComponentWrapper;var Rt=o(42);t.Environment=Rt.Environment;var _t=o(84);t.TooltipManager=_t.TooltipManager;var Ot=o(185);t.ChartType=Ot.ChartType}).call(this,o(147))},function(e,t){var o;o=function(){return this}();try{o=o||new Function(\"return this\")()}catch(e){\"object\"==typeof window&&(o=window)}e.exports=o},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */Object.defineProperty(t,\"__esModule\",{value:!0});var i=function(){function e(e,t,o,i){void 0===i&&(i=1),this.r=Math.min(1,Math.max(0,e||0)),this.g=Math.min(1,Math.max(0,t||0)),this.b=Math.min(1,Math.max(0,o||0)),this.a=Math.min(1,Math.max(0,i||0))}return e.fromString=function(t){if(t.indexOf(\"#\")>=0)return e.fromHexString(t);var o=e.nameToHex[t];if(o)return e.fromHexString(o);if(t.indexOf(\"rgb\")>=0)return e.fromRgbaString(t);throw new Error(\"Invalid color string: '\"+t+\"'\")},e.fromHexString=function(t){var o=t.match(e.hexRe);if(o)return new e((i=parseInt(o[1],16))/255,(n=parseInt(o[2],16))/255,(r=parseInt(o[3],16))/255,(s=void 0!==o[4]?parseInt(o[4],16):255)/255);if(o=t.match(e.shortHexRe)){var i=parseInt(o[1],16),n=parseInt(o[2],16),r=parseInt(o[3],16),s=void 0!==o[4]?parseInt(o[4],16):15;return new e((i+=16*i)/255,(n+=16*n)/255,(r+=16*r)/255,(s+=16*s)/255)}throw new Error(\"Malformed hexadecimal color string: '\"+t+\"'\")},e.fromRgbaString=function(t){var o=t.match(e.rgbRe);if(o)return new e(+o[1]/255,+o[2]/255,+o[3]/255);if(o=t.match(e.rgbaRe))return new e(+o[1]/255,+o[2]/255,+o[3]/255,+o[4]);throw new Error(\"Malformed rgb/rgba color string: '\"+t+\"'\")},e.fromArray=function(t){if(4===t.length)return new e(t[0],t[1],t[2],t[3]);if(3===t.length)return new e(t[0],t[1],t[2]);throw new Error(\"The given array should contain 3 or 4 color components (numbers).\")},e.fromHSB=function(t,o,i,n){void 0===n&&(n=1);var r=e.HSBtoRGB(t,o,i);return new e(r[0],r[1],r[2],n)},e.padHex=function(e){return 1===e.length?\"0\"+e:e},e.prototype.toHexString=function(){var t=\"#\"+e.padHex(Math.round(255*this.r).toString(16))+e.padHex(Math.round(255*this.g).toString(16))+e.padHex(Math.round(255*this.b).toString(16));return this.a<1&&(t+=e.padHex(Math.round(255*this.a).toString(16))),t},e.prototype.toRgbaString=function(e){void 0===e&&(e=3);var t=[Math.round(255*this.r),Math.round(255*this.g),Math.round(255*this.b)],o=Math.pow(10,e);return 1!==this.a?(t.push(Math.round(this.a*o)/o),\"rgba(\"+t.join(\", \")+\")\"):\"rgb(\"+t.join(\", \")+\")\"},e.prototype.toString=function(){return 1===this.a?this.toHexString():this.toRgbaString()},e.prototype.toHSB=function(){return e.RGBtoHSB(this.r,this.g,this.b)},e.RGBtoHSB=function(e,t,o){var i=Math.min(e,t,o),n=Math.max(e,t,o),r=NaN;if(i!==n){var s=n-i,a=(n-e)/s,l=(n-t)/s,p=(n-o)/s;r=e===n?p-l:t===n?2+a-p:4+l-a,(r/=6)<0&&(r+=1)}return[360*r,0!==n?(n-i)/n:0,n]},e.HSBtoRGB=function(e,t,o){isNaN(e)&&(e=0),e=(e%360+360)%360/360;var i=0,n=0,r=0;if(0===t)i=n=r=o;else{var s=6*(e-Math.floor(e)),a=s-Math.floor(s),l=o*(1-t),p=o*(1-t*a),u=o*(1-t*(1-a));switch(s>>0){case 0:i=o,n=u,r=l;break;case 1:i=p,n=o,r=l;break;case 2:i=l,n=o,r=u;break;case 3:i=l,n=p,r=o;break;case 4:i=u,n=l,r=o;break;case 5:i=o,n=l,r=p}}return[i,n,r]},e.prototype.derive=function(t,o,i,n){var r=e.RGBtoHSB(this.r,this.g,this.b),s=r[2];0==s&&i>1&&(s=.05);var a=((r[0]+t)%360+360)%360,l=Math.max(Math.min(r[1]*o,1),0);s=Math.max(Math.min(s*i,1),0);var p=Math.max(Math.min(this.a*n,1),0),u=e.HSBtoRGB(a,l,s);return u.push(p),e.fromArray(u)},e.prototype.brighter=function(){return this.derive(0,1,1/.7,1)},e.prototype.darker=function(){return this.derive(0,1,.7,1)},e.hexRe=/\\s*#([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})?\\s*$/,e.shortHexRe=/\\s*#([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])?\\s*$/,e.rgbRe=/\\s*rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)\\s*/,e.rgbaRe=/\\s*rgba\\((\\d+),\\s*(\\d+),\\s*(\\d+),\\s*([.\\d]+)\\)\\s*/,e.nameToHex=Object.freeze({aliceblue:\"#F0F8FF\",antiquewhite:\"#FAEBD7\",aqua:\"#00FFFF\",aquamarine:\"#7FFFD4\",azure:\"#F0FFFF\",beige:\"#F5F5DC\",bisque:\"#FFE4C4\",black:\"#000000\",blanchedalmond:\"#FFEBCD\",blue:\"#0000FF\",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\",fuchsia:\"#FF00FF\",gainsboro:\"#DCDCDC\",ghostwhite:\"#F8F8FF\",gold:\"#FFD700\",goldenrod:\"#DAA520\",gray:\"#808080\",green:\"#008000\",greenyellow:\"#ADFF2F\",grey:\"#808080\",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\",lightgreen:\"#90EE90\",lightgrey:\"#D3D3D3\",lightpink:\"#FFB6C1\",lightsalmon:\"#FFA07A\",lightseagreen:\"#20B2AA\",lightskyblue:\"#87CEFA\",lightslategray:\"#778899\",lightslategrey:\"#778899\",lightsteelblue:\"#B0C4DE\",lightyellow:\"#FFFFE0\",lime:\"#00FF00\",limegreen:\"#32CD32\",linen:\"#FAF0E6\",magenta:\"#FF00FF\",maroon:\"#800000\",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\",navy:\"#000080\",oldlace:\"#FDF5E6\",olive:\"#808000\",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\",purple:\"#800080\",rebeccapurple:\"#663399\",red:\"#FF0000\",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:\"#FFFFFF\",whitesmoke:\"#F5F5F5\",yellow:\"#FFFF00\",yellowgreen:\"#9ACD32\"}),e}();t.Color=i},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */Object.defineProperty(t,\"__esModule\",{value:!0});var i=o(6),n=/((\\/\\/.*$)|(\\/\\*[\\s\\S]*?\\*\\/))/gm,r=/([^\\s,]+)/g,s={\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"},a=/[&<>\"']/g,l=function(){function e(){}return e.doIeFocusHack=function(e){(t._.isBrowserIE()||t._.isBrowserEdge())&&(t._.missing(document.activeElement)||document.activeElement===document.body)&&e.focus()},e.doOnce=function(e,t){this.doOnceFlags[t]||(e(),this.doOnceFlags[t]=!0)},e.isLeftClick=function(e){return\"buttons\"in e?1==e.buttons:1==(e.which||e.button)},e.areEventsNear=function(e,t,o){if(0===o)return!1;var i=Math.abs(e.clientX-t.clientX),n=Math.abs(e.clientY-t.clientY);return Math.max(i,n)<=o},e.jsonEquals=function(e,t){return(e?JSON.stringify(e):null)===(t?JSON.stringify(t):null)},e.shallowCompare=function(e,t){if(this.missing(e)&&this.missing(t))return!0;if(this.missing(e)||this.missing(t))return!1;if(e.length!==t.length)return!1;for(var o=0;o<e.length;o++)if(e[o]!==t[o])return!1;return!0},e.getNameOfClass=function(e){var t=e.toString(),o=/function (.{1,})\\(/.exec(t);return o&&o.length>1?o[1]:\"\"},e.values=function(e){var t=[];return this.iterateObject(e,function(e,o){t.push(o)}),t},e.getValueUsingField=function(e,t,o){if(t&&e){if(o){for(var i=t.split(\".\"),n=e,r=0;r<i.length;r++)if(n=n[i[r]],this.missing(n))return null;return n}return e[t]}},e.getElementSize=function(e){var t=window.getComputedStyle(e),o=t.height,i=t.width,n=t.paddingTop,r=t.paddingRight,s=t.paddingBottom,a=t.paddingLeft,l=t.marginTop,p=t.marginRight,u=t.marginBottom,d=t.marginLeft,c=t.boxSizing;return{height:parseFloat(o),width:parseFloat(i),paddingTop:parseFloat(n),paddingRight:parseFloat(r),paddingBottom:parseFloat(s),paddingLeft:parseFloat(a),marginTop:parseFloat(l),marginRight:parseFloat(p),marginBottom:parseFloat(u),marginLeft:parseFloat(d),boxSizing:c}},e.getInnerHeight=function(e){var t=this.getElementSize(e);return\"border-box\"===t.boxSizing?t.height-t.paddingTop-t.paddingBottom:t.height},e.getInnerWidth=function(e){var t=this.getElementSize(e);return\"border-box\"===t.boxSizing?t.width-t.paddingLeft-t.paddingRight:t.width},e.getAbsoluteHeight=function(e){var t=this.getElementSize(e),o=t.marginBottom+t.marginTop;return Math.ceil(e.offsetHeight+o)},e.getAbsoluteWidth=function(e){var t=this.getElementSize(e),o=t.marginLeft+t.marginRight;return Math.ceil(e.offsetWidth+o)},e.getScrollLeft=function(e,t){var o=e.scrollLeft;return t&&(o=Math.abs(o),this.isBrowserChrome()&&(o=e.scrollWidth-e.clientWidth-o)),o},e.cleanNumber=function(e){return\"string\"==typeof e&&(e=parseInt(e,10)),e=\"number\"==typeof e?Math.floor(e):null},e.setScrollLeft=function(e,t,o){o&&((this.isBrowserSafari()||this.isBrowserChrome())&&(t=e.scrollWidth-e.clientWidth-t),this.isBrowserFirefox()&&(t*=-1)),e.scrollLeft=t},e.iterateNamedNodeMap=function(e,t){if(e)for(var o=0;o<e.length;o++){var i=e[o];t(i.name,i.value)}},e.iterateObject=function(e,t){if(e&&!this.missing(e))if(Array.isArray(e))e.forEach(function(e,o){t(o+\"\",e)});else for(var o=Object.keys(e),i=0;i<o.length;i++){var n=o[i],r=e[n];t(n,r)}},e.cloneObject=function(e){for(var t={},o=Object.keys(e),i=0;i<o.length;i++){var n=o[i],r=e[n];t[n]=r}return t},e.deepCloneObject=function(e){return JSON.parse(JSON.stringify(e))},e.map=function(e,t){for(var o=[],i=0;i<e.length;i++){var n=t(e[i],i);o.push(n)}return o},e.mapObject=function(t,o){var i=[];return e.iterateObject(t,function(e,t){i.push(o(t))}),i},e.forEach=function(e,t){if(e)for(var o=0;o<e.length;o++){t(e[o],o)}},e.filter=function(e,t){var o=[];return e.forEach(function(e){t(e)&&o.push(e)}),o},e.getAllKeysInObjects=function(e){var t={};return e.forEach(function(e){e&&Object.keys(e).forEach(function(e){return t[e]=null})}),Object.keys(t)},e.mergeDeep=function(t,o){this.exists(o)&&this.iterateObject(o,function(o,i){var n=t[o];n!==i&&(\"object\"==typeof n&&\"object\"==typeof i?e.mergeDeep(n,i):t[o]=i)})},e.assign=function(e){for(var t=this,o=[],i=1;i<arguments.length;i++)o[i-1]=arguments[i];return o.forEach(function(o){t.exists(o)&&t.iterateObject(o,function(t,o){e[t]=o})}),e},e.flatten=function(e){return[].concat.apply([],e)},e.parseYyyyMmDdToDate=function(e,t){try{if(!e)return null;if(-1===e.indexOf(t))return null;var o=e.split(t);return 3!=o.length?null:new Date(Number(o[0]),Number(o[1])-1,Number(o[2]))}catch(e){return null}},e.serializeDateToYyyyMmDd=function(t,o){return t?t.getFullYear()+o+e.pad(t.getMonth()+1,2)+o+e.pad(t.getDate(),2):null},e.pad=function(e,t){for(var o=e+\"\";o.length<t;)o=\"0\"+o;return o},e.pushAll=function(e,t){this.missing(t)||this.missing(e)||t.forEach(function(t){return e.push(t)})},e.createArrayOfNumbers=function(e,t){for(var o=[],i=e;i<=t;i++)o.push(i);return o},e.getFunctionParameters=function(e){var t=e.toString().replace(n,\"\"),o=t.slice(t.indexOf(\"(\")+1,t.indexOf(\")\")).match(r);return null===o?[]:o},e.find=function(e,t,o){if(null==e)return null;if(!Array.isArray(e)){var i=this.values(e);return this.find(i,t,o)}for(var n=e,r=null,s=0;s<n.length;s++){var a=n[s];if(\"string\"==typeof t){if(a[t]===o){r=a;break}}else if(t(a)){r=a;break}}return r},e.toStrings=function(e){return this.map(e,function(e){return null!=e&&e.toString?e.toString():null})},e.iterateArray=function(e,t){for(var o=0;o<e.length;o++){t(e[o],o)}},e.findIndex=function(e,t){for(var o=0;o<e.length;o++)if(t(e[o],o,e))return o;return-1},e.isNode=function(e){return\"function\"==typeof Node?e instanceof Node:e&&\"object\"==typeof e&&\"number\"==typeof e.nodeType&&\"string\"==typeof e.nodeName},e.isElement=function(e){return\"function\"==typeof HTMLElement?e instanceof HTMLElement:e&&\"object\"==typeof e&&null!==e&&1===e.nodeType&&\"string\"==typeof e.nodeName},e.isNodeOrElement=function(e){return this.isNode(e)||this.isElement(e)},e.copyNodeList=function(e){for(var t=e?e.length:0,o=[],i=0;i<t;i++)o.push(e[i]);return o},e.isEventFromPrintableCharacter=function(o){var n=String.fromCharCode(o.charCode);if(this.isKeyPressed(o,i.Constants.KEY_NEW_LINE))return!1;if(o.altKey||o.ctrlKey)return!1;if(t._.exists(o.key)){var r=1===o.key.length,s=e.isNumpadDelWithNumlockOnForEdgeOrIe(o);return r||s}return e.PRINTABLE_CHARACTERS.indexOf(n)>=0},e.isUserSuppressingKeyboardEvent=function(e,t,o,i,n){var r=e.getSuppressKeyboardEventFunc(),s=i.getColDef().suppressKeyboardEvent;if(!r&&!s)return!1;var a={event:t,editing:n,column:i,api:e.getApi(),node:o,data:o.data,colDef:i.getColDef(),context:e.getContext(),columnApi:e.getColumnApi()};if(s&&s(a))return!0;return!!r&&r(a)},e.getCellCompForEvent=function(e,t){for(var o=this.getTarget(t);o;){var i=e.getDomData(o,\"cellComp\");if(i)return i;o=o.parentElement}return null},e.addChangeListener=function(e,t){e.addEventListener(\"changed\",t),e.addEventListener(\"paste\",t),e.addEventListener(\"input\",t),e.addEventListener(\"keydown\",t),e.addEventListener(\"keyup\",t)},e.makeNull=function(e){return null==e||\"\"===e?null:e},e.missing=function(e){return!this.exists(e)},e.missingOrEmpty=function(e){return!e||this.missing(e)||0===e.length},e.missingOrEmptyObject=function(e){return this.missing(e)||0===Object.keys(e).length},e.exists=function(e,t){return void 0===t&&(t=!1),null!=e&&(\"\"!==e||t)},e.firstExistingValue=function(){for(var e=[],o=0;o<arguments.length;o++)e[o]=arguments[o];for(var i=0;i<e.length;i++){var n=e[i];if(t._.exists(n))return n}return null},e.anyExists=function(e){if(e)for(var t=0;t<e.length;t++)if(this.exists(e[t]))return!0;return!1},e.existsAndNotEmpty=function(e){return null!=e&&this.exists(e)&&e.length>0},e.clearElement=function(e){for(;e&&e.firstChild;)e.removeChild(e.firstChild)},e.removeElement=function(e,t){this.removeFromParent(e.querySelector(t))},e.removeFromParent=function(e){e&&e.parentNode&&e.parentNode.removeChild(e)},e.isVisible=function(e){return null!==e.offsetParent},e.callIfPresent=function(e){e&&e()},e.loadTemplate=function(e){var t=document.createElement(\"div\");return t.innerHTML=e,t.firstChild},e.appendHtml=function(e,t){e.lastChild?e.insertAdjacentHTML(\"afterbegin\",t):e.innerHTML=t},e.addOrRemoveCssClass=function(e,t,o){o?this.addCssClass(e,t):this.removeCssClass(e,t)},e.radioCssClass=function(e,o,i){for(var n=e.parentElement.firstChild;n;)t._.addOrRemoveCssClass(n,o,i?n!==e:n===e),n=n.nextSibling},e.addCssClass=function(e,t){var o=this;if(t&&0!==t.length)if(t.indexOf(\" \")>=0)t.split(\" \").forEach(function(t){return o.addCssClass(e,t)});else if(e.classList)e.classList.contains(t)||e.classList.add(t);else if(e.className&&e.className.length>0){var i=e.className.split(\" \");i.indexOf(t)<0&&(i.push(t),e.setAttribute(\"class\",i.join(\" \")))}else e.setAttribute(\"class\",t)},e.removeCssClass=function(e,t){if(e.classList)e.classList.contains(t)&&e.classList.remove(t);else if(e.className&&e.className.length>0){var o=e.className.split(\" \");if(o.indexOf(t)>=0){for(;o.indexOf(t)>=0;)o.splice(o.indexOf(t),1);e.setAttribute(\"class\",o.join(\" \"))}}},e.containsClass=function(e,t){if(e.classList)return e.classList.contains(t);if(e.className){var o=e.className===t,i=e.className.indexOf(\" \"+t+\" \")>=0,n=0===e.className.indexOf(t+\" \"),r=e.className.lastIndexOf(\" \"+t)===e.className.length-t.length-1;return o||i||n||r}return!1},e.getElementAttribute=function(e,t){return e.attributes&&e.attributes[t]?e.attributes[t].value:null},e.offsetHeight=function(e){return e&&e.clientHeight?e.clientHeight:0},e.offsetWidth=function(e){return e&&e.clientWidth?e.clientWidth:0},e.sortNumberArray=function(e){e.sort(function(e,t){return e-t})},e.removeRepeatsFromArray=function(e,t){if(e)for(var o=e.length-2;o>=0;o--){var i=e[o]===t,n=e[o+1]===t;i&&n&&e.splice(o+1,1)}},e.removeFromArray=function(e,t){var o=e.indexOf(t);o>=0&&e.splice(o,1)},e.removeAllFromArray=function(e,t){t.forEach(function(t){var o=e.indexOf(t);o>=0&&e.splice(o,1)})},e.insertIntoArray=function(e,t,o){e.splice(o,0,t)},e.insertArrayIntoArray=function(e,t,o){if(!this.missing(e)&&!this.missing(t))for(var i=t.length-1;i>=0;i--){var n=t[i];this.insertIntoArray(e,n,o)}},e.moveInArray=function(e,t,o){var i=this;t.forEach(function(t){i.removeFromArray(e,t)}),t.slice().reverse().forEach(function(t){i.insertIntoArray(e,t,o)})},e.defaultComparator=function(e,t,o){void 0===o&&(o=!1);var i=null==e,n=null==t;if(e&&e.toNumber&&(e=e.toNumber()),t&&t.toNumber&&(t=t.toNumber()),i&&n)return 0;if(i)return-1;if(n)return 1;if(\"string\"==typeof e){if(!o)return r(e,t);try{return e.localeCompare(t)}catch(o){return r(e,t)}}return e<t?-1:e>t?1:0;function r(e,t){return e>t?1:e<t?-1:0}},e.last=function(e){if(e&&e.length)return e[e.length-1]},e.compareArrays=function(e,t){if(this.missing(e)&&this.missing(t))return!0;if(this.missing(e)||this.missing(t)||!e||!t)return!1;if(e.length!==t.length)return!1;for(var o=0;o<e.length;o++)if(e[o]!==t[o])return!1;return!0},e.ensureDomOrder=function(e,t,o){o&&o.nextSibling===t||(o?o.nextSibling?e.insertBefore(t,o.nextSibling):e.appendChild(t):e.firstChild&&e.firstChild!==t&&e.insertAdjacentElement(\"afterbegin\",t))},e.insertWithDomOrder=function(e,t,o){o?o.nextSibling?e.insertBefore(t,o.nextSibling):e.appendChild(t):e.firstChild?e.insertBefore(t,e.firstChild):e.appendChild(t)},e.insertTemplateWithDomOrder=function(e,t,o){var i;return o?(o.insertAdjacentHTML(\"afterend\",t),i=o.nextSibling):(e.firstChild?e.insertAdjacentHTML(\"afterbegin\",t):e.innerHTML=t,i=e.firstChild),i},e.every=function(e,t){if(!e||0===e.length)return!0;for(var o=0;o<e.length;o++)if(!t(e[o]))return!1;return!0},e.toStringOrNull=function(e){return this.exists(e)&&e.toString?e.toString():null},e.formatSize=function(e){return\"number\"==typeof e?e+\"px\":e},e.formatNumberTwoDecimalPlacesAndCommas=function(e){return\"number\"!=typeof e?\"\":(Math.round(100*e)/100).toString().replace(/(\\d)(?=(\\d{3})+(?!\\d))/g,\"$1,\")},e.formatNumberCommas=function(e){return\"number\"!=typeof e?\"\":e.toString().replace(/(\\d)(?=(\\d{3})+(?!\\d))/g,\"$1,\")},e.prependDC=function(e,t){this.exists(e.firstChild)?e.insertBefore(t,e.firstChild):e.appendChild(t)},e.createIcon=function(e,t,o){var i=this.createIconNoSpan(e,t,o);if(i.className.indexOf(\"ag-icon\")>-1)return i;var n=document.createElement(\"span\");return n.appendChild(i),n},e.createIconNoSpan=function(e,t,o,i){var n=null,r=o&&o.getColDef().icons;if(r&&(n=r[e]),t&&!n){var s=t.getIcons();s&&(n=s[e])}if(n){var a=void 0;if(\"function\"==typeof n)a=n();else{if(\"string\"!=typeof n)throw new Error(\"icon from grid options needs to be a string or a function\");a=n}if(\"string\"==typeof a)return this.loadTemplate(a);if(this.isNodeOrElement(a))return a;throw new Error(\"iconRenderer should return back a string or a dom object\")}var l=document.createElement(\"span\"),p=this.iconNameClassMap[e];if(!p){if(!i)throw new Error(e+\" did not find class\");p=e}return l.setAttribute(\"class\",\"ag-icon ag-icon-\"+p),l.setAttribute(\"unselectable\",\"on\"),l},e.addStylesToElement=function(e,t){var o=this;t&&Object.keys(t).forEach(function(i){var n=o.hyphenToCamelCase(i);n&&(e.style[n]=t[i])})},e.isHorizontalScrollShowing=function(e){return e.clientWidth<e.scrollWidth},e.isVerticalScrollShowing=function(e){return e.clientHeight<e.scrollHeight},e.getMaxDivHeight=function(){if(!document.body)return-1;var e=1e6,t=navigator.userAgent.toLowerCase().match(/firefox/)?6e6:1e9,o=this.loadTemplate(\"<div/>\");for(document.body.appendChild(o);;){var i=2*e;if(o.style.height=i+\"px\",i>t||o.clientHeight!==i)break;e=i}return document.body.removeChild(o),e},e.getScrollbarWidth=function(){var e=document.body,t=document.createElement(\"div\");t.style.width=t.style.height=\"100px\",t.style.opacity=\"0\",t.style.overflow=\"scroll\",t.style.msOverflowStyle=\"scrollbar\",t.style.position=\"absolute\",e.appendChild(t);var o=t.offsetWidth-t.clientWidth;return t.parentNode&&t.parentNode.removeChild(t),o},e.hasOverflowScrolling=function(){var e=[\"webkit\",\"moz\",\"o\",\"ms\"],t=document.createElement(\"div\"),o=!1;document.getElementsByTagName(\"body\")[0].appendChild(t),t.setAttribute(\"style\",e.map(function(e){return\"-\"+e+\"-overflow-scrolling: touch\"}).concat(\"overflow-scrolling: touch\").join(\";\"));var i=window.getComputedStyle(t);if(\"touch\"===i.overflowScrolling&&(o=!0),!o)for(var n=0,r=e;n<r.length;n++)if(\"touch\"===i[r[n]+\"OverflowScrolling\"]){o=!0;break}return t.parentNode&&t.parentNode.removeChild(t),o},e.isKeyPressed=function(e,t){return(e.which||e.keyCode)===t},e.isCharacterKey=function(e){var t=e.which;return\"number\"==typeof t&&t?!e.ctrlKey&&!e.metaKey&&!e.altKey&&8!==e.which&&16!==e.which:void 0===t},e.setDisplayed=function(e,t){this.addOrRemoveCssClass(e,\"ag-hidden\",!t)},e.setVisible=function(e,t){this.addOrRemoveCssClass(e,\"ag-invisible\",!t)},e.setElementWidth=function(e,t){\"flex\"===t?(e.style.width=null,e.style.minWidth=null,e.style.maxWidth=null,e.style.flex=\"1 1 auto\"):this.setFixedWidth(e,t)},e.setFixedWidth=function(e,t){t=this.formatSize(t),e.style.width=t,e.style.maxWidth=t,e.style.minWidth=t},e.setElementHeight=function(e,t){\"flex\"===t?(e.style.height=null,e.style.minHeight=null,e.style.maxHeight=null,e.style.flex=\"1 1 auto\"):this.setFixedHeight(e,t)},e.setFixedHeight=function(e,t){t=this.formatSize(t),e.style.height=t,e.style.maxHeight=t,e.style.minHeight=t},e.isBrowserIE=function(){return void 0===this.isIE&&(this.isIE=!!document.documentMode),this.isIE},e.isBrowserEdge=function(){return void 0===this.isEdge&&(this.isEdge=!this.isBrowserIE()&&!!window.StyleMedia),this.isEdge},e.isBrowserSafari=function(){if(void 0===this.isSafari){var e=window;this.isSafari=Object.prototype.toString.call(e.HTMLElement).indexOf(\"Constructor\")>0||!!(t=!e.safari||e.safari.pushNotification)&&\"[object SafariRemoteNotification]\"===t.toString()}var t;return this.isSafari},e.isBrowserChrome=function(){if(void 0===this.isChrome){var e=window;this.isChrome=!!e.chrome&&(!!e.chrome.webstore||!!e.chrome.runtime)||/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor)}return this.isChrome},e.isBrowserFirefox=function(){if(void 0===this.isFirefox){var e=window;this.isFirefox=void 0!==e.InstallTrigger}return this.isFirefox},e.isUserAgentIPad=function(){return void 0===this.isIPad&&(this.isIPad=null!=navigator.userAgent.match(/iPad|iPhone/i)),this.isIPad},e.getTarget=function(e){var t=e;return t.target||t.srcElement},e.isElementChildOfClass=function(e,t,o){for(var i=0;e;){if(this.containsClass(e,t))return!0;if(e=e.parentElement,o&&++i>o)break}return!1},e.isElementInEventPath=function(e,o){return!(!o||!e)&&t._.getEventPath(o).indexOf(e)>=0},e.isFunction=function(e){return!!(e&&e.constructor&&e.call&&e.apply)},e.createEventPath=function(e){for(var o=[],i=t._.getTarget(e);i;)o.push(i),i=i.parentElement;return o},e.addAgGridEventPath=function(e){e.__agGridEventPath=this.getEventPath(e)},e.getEventPath=function(e){var t=e;return t.deepPath?t.deepPath():t.path?t.path:t.composedPath?t.composedPath():t.__agGridEventPath?t.__agGridEventPath:this.createEventPath(e)},e.forEachSnapshotFirst=function(e,t){e&&e.slice(0).forEach(t)},e.getBodyWidth=function(){return document.body?document.body.clientWidth:window.innerHeight?window.innerWidth:document.documentElement&&document.documentElement.clientWidth?document.documentElement.clientWidth:-1},e.getBodyHeight=function(){return document.body?document.body.clientHeight:window.innerHeight?window.innerHeight:document.documentElement&&document.documentElement.clientHeight?document.documentElement.clientHeight:-1},e.setCheckboxState=function(e,t){\"boolean\"==typeof t?(e.checked=t,e.indeterminate=!1):e.indeterminate=!0},e.traverseNodesWithKey=function(e,t){var o=[];!function e(i){i.forEach(function(i){if(i.group||i.hasChildren()){o.push(i.key);var n=o.join(\"|\");t(i,n),e(i.childrenAfterGroup),o.pop()}})}(e)},e.camelCaseToHyphen=function(e){return null==e?null:e.replace(/([A-Z])/g,function(e){return\"-\"+e[0].toLowerCase()})},e.hyphenToCamelCase=function(e){return null==e?null:e.replace(/-([a-z])/g,function(e){return e[1].toUpperCase()})},e.capitalise=function(e){return e[0].toUpperCase()+e.substr(1).toLowerCase()},e.cssStyleObjectToMarkup=function(e){var t=this;if(!e)return\"\";var o=[];return this.iterateObject(e,function(e,i){var n=t.camelCaseToHyphen(e);o.push(n+\": \"+i+\";\")}),o.join(\" \")},e.isNumeric=function(e){return\"\"!==e&&(!isNaN(parseFloat(e))&&isFinite(e))},e.escape=function(e){return null!=e&&e.replace?e.replace(a,function(e){return s[e]}):e},e.normalizeWheel=function(e){var t=0,o=0,i=0,n=0;return\"detail\"in e&&(o=e.detail),\"wheelDelta\"in e&&(o=-e.wheelDelta/120),\"wheelDeltaY\"in e&&(o=-e.wheelDeltaY/120),\"wheelDeltaX\"in e&&(t=-e.wheelDeltaX/120),\"axis\"in e&&e.axis===e.HORIZONTAL_AXIS&&(t=o,o=0),i=10*t,n=10*o,\"deltaY\"in e&&(n=e.deltaY),\"deltaX\"in e&&(i=e.deltaX),(i||n)&&e.deltaMode&&(1==e.deltaMode?(i*=40,n*=40):(i*=800,n*=800)),i&&!t&&(t=i<1?-1:1),n&&!o&&(o=n<1?-1:1),{spinX:t,spinY:o,pixelX:i,pixelY:n}},e.debounce=function(e,t,o){var i;return void 0===o&&(o=!1),function(){for(var n=[],r=0;r<arguments.length;r++)n[r]=arguments[r];var s=this,a=o&&!i;window.clearTimeout(i),i=window.setTimeout(function(){i=null,o||e.apply(s,n)},t),a&&e.apply(s,n)}},e.stopPropagationForAgGrid=function(e){e.__ag_Grid_Stop_Propagation=!0},e.isStopPropagationForAgGrid=function(e){return!0===e.__ag_Grid_Stop_Propagation},e.executeInAWhile=function(e){this.executeAfter(e,400)},e.executeNextVMTurn=function(e){this.executeAfter(e,0)},e.executeAfter=function(e,t){e.length>0&&window.setTimeout(function(){e.forEach(function(e){return e()})},t)},e.referenceCompare=function(e,t){return null==e&&null==t||(null!=e||!t)&&((!e||null!=t)&&e===t)},e.get=function(t,o,i){if(null==t)return i;if(o.indexOf(\".\")>-1){var n=o.split(\".\"),r=t[n[0]];return null!=r?e.get(r,n.slice(1,n.length).join(\".\"),i):i}var s=t[o];return null!=s?s:i},e.addSafePassiveEventListener=function(t,o,i,n){var r=e.PASSIVE_EVENTS.indexOf(i)>=0?{passive:!0}:void 0;e.OUTSIDE_ANGULAR_EVENTS.indexOf(i)>=0?t.addEventListenerOutsideAngular(o,i,n,r):o.addEventListener(i,n,r)},e.camelCaseToHumanText=function(e){if(!e||null==e)return null;return e.replace(/([A-Z])([A-Z])([a-z])|([a-z])([A-Z])/g,\"$1$4 $2$3$5\").replace(\".\",\" \").split(\" \").map(function(e){return e.substring(0,1).toUpperCase()+(e.length>1?e.substring(1,e.length):\"\")}).join(\" \")},e.message=function(e){var t=document.createElement(\"div\");t.innerHTML=e;var o=document.querySelector(\"#__ag__message\");if(!o){o=this.loadTemplate('<div id=\"__ag__message\" style=\"display: inline-block; position: absolute; top: 0px; left: 0px; color: white; background-color: black; z-index: 20; padding: 2px; border: 1px solid darkred; height: 200px; overflow-y: auto;\"></div>'),document.body&&document.body.appendChild(o)}o.insertBefore(t,o.children[0])},e.sortRowNodesByOrder=function(e,t){if(e){for(var o=function(e,o){var i=t[e.id],n=t[o.id],r=void 0!==i,s=void 0!==n;return r&&s?i-n:!r&&!s?e.__objectId-o.__objectId:r?1:-1},i=!1,n=0;n<e.length-1;n++)if(o(e[n],e[n+1])>0){i=!0;break}i&&e.sort(o)}},e.fuzzyCheckStrings=function(e,t,o){var i=this,n={},r=e.filter(function(e){return!t.some(function(t){return t===e})});return r.length>0&&r.forEach(function(e){return n[e]=i.fuzzySuggestions(e,o)}),n},e.fuzzySuggestions=function(e,o,i,n){var r=n?t._.string_weighted_distances:t._.string_distances,s=o.map(function(t){return{value:t,relevance:r(e.toLowerCase(),t.toLocaleLowerCase())}});return s.sort(function(e,t){return t.relevance-e.relevance}),i&&(s=s.filter(function(e){return 0!==e.relevance})),s.map(function(e){return e.value})},e.get_bigrams=function(e){var t,o,i,n=e.toLowerCase(),r=new Array(n.length-1);for(t=o=0,i=r.length;o<=i;t=o+=1)r[t]=n.slice(t,t+2);return r},e.string_distances=function(e,o){if(0===e.length&&0===o.length)return 0;var i,n,r=t._.get_bigrams(e),s=t._.get_bigrams(o),a=r.length+s.length,l=0;for(i=0,n=r.length;i<n;i++){var p,u=r[i],d=void 0;for(d=0,p=s.length;d<p;d++){u===s[d]&&l++}}return l>0?2*l/a:0},e.string_weighted_distances=function(e,t){for(var o=e.replace(/\\s/g,\"\"),i=t.replace(/\\s/g,\"\"),n=0,r=0,s=0;s<o.length;s++){var a=i.indexOf(o[s]);-1!==a&&(r=a,n+=100*(i.length-r)/i.length,n*=n)}return n},e.isNumpadDelWithNumlockOnForEdgeOrIe=function(t){return!(!e.isBrowserEdge()&&!e.isBrowserIE())&&(t.key===e.NUMPAD_DEL_NUMLOCK_ON_KEY&&t.charCode===e.NUMPAD_DEL_NUMLOCK_ON_CHARCODE)},e.bindCellRendererToHtmlElement=function(e,t){e.then(function(e){var o=e.getGui();null!=o&&(\"object\"==typeof o?t.appendChild(o):t.innerHTML=o)})},e.PASSIVE_EVENTS=[\"touchstart\",\"touchend\",\"touchmove\",\"touchcancel\"],e.OUTSIDE_ANGULAR_EVENTS=[\"mouseover\",\"mouseout\",\"mouseenter\",\"mouseleave\"],e.PRINTABLE_CHARACTERS=\"qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890!\\\"£$%^&*()_+-=[];'#,./\\\\|<>?:@~{}\",e.NUMPAD_DEL_NUMLOCK_ON_KEY=\"Del\",e.NUMPAD_DEL_NUMLOCK_ON_CHARCODE=46,e.doOnceFlags={},e.compose=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return function(t){return e.reduce(function(e,t){return t(e)},t)}},e.decToHex=function(e,t){for(var o=\"\",i=0;i<t;i++)o+=String.fromCharCode(255&e),e>>>=8;return o},e.utf8_encode=function(e){var t=String.fromCharCode;function o(e,o){return t(e>>o&63|128)}function i(e){if(0==(4294967168&e))return t(e);var i=\"\";return 0==(4294965248&e)?i=t(e>>6&31|192):0==(4294901760&e)?(!function(e){if(e>=55296&&e<=57343)throw Error(\"Lone surrogate U+\"+e.toString(16).toUpperCase()+\" is not a scalar value\")}(e),i=t(e>>12&15|224),i+=o(e,6)):0==(4292870144&e)&&(i=t(e>>18&7|240),i+=o(e,12),i+=o(e,6)),i+=t(63&e|128)}for(var n=function(e){for(var t,o,i=[],n=0,r=e.length;n<r;)(t=e.charCodeAt(n++))>=55296&&t<=56319&&n<r?56320==(64512&(o=e.charCodeAt(n++)))?i.push(((1023&t)<<10)+(1023&o)+65536):(i.push(t),n--):i.push(t);return i}(e),r=n.length,s=-1,a=\"\";++s<r;)a+=i(n[s]);return a},e.iconNameClassMap={columnGroupOpened:\"expanded\",columnGroupClosed:\"contracted\",columnSelectClosed:\"tree-closed\",columnSelectOpen:\"tree-open\",columnSelectIndeterminate:\"tree-indeterminate\",columnMovePin:\"pin\",columnMoveAdd:\"plus\",columnMoveHide:\"eye-slash\",columnMoveMove:\"arrows\",columnMoveLeft:\"left\",columnMoveRight:\"right\",columnMoveGroup:\"group\",columnMoveValue:\"aggregation\",columnMovePivot:\"pivot\",dropNotAllowed:\"not-allowed\",groupContracted:\"expanded\",groupExpanded:\"contracted\",chart:\"chart\",close:\"cross\",cancel:\"cancel\",check:\"tick\",checkboxChecked:\"checkbox-checked\",checkboxUnchecked:\"checkbox-unchecked\",checkboxIndeterminate:\"checkbox-indeterminate\",checkboxCheckedReadOnly:\"checkbox-checked-readonly\",checkboxUncheckedReadOnly:\"checkbox-unchecked-readonly\",checkboxIndeterminateReadOnly:\"checkbox-indeterminate-readonly\",first:\"first\",previous:\"previous\",next:\"next\",last:\"last\",linked:\"linked\",unlinked:\"unlinked\",colorPicker:\"color-picker\",radioButtonOn:\"radio-button-on\",radioButtonOff:\"radio-button-off\",groupLoading:\"loading\",data:\"data\",menu:\"menu\",filter:\"filter\",columns:\"columns\",maximize:\"maximize\",minimize:\"minimize\",menuPin:\"pin\",menuValue:\"aggregation\",menuAddRowGroup:\"group\",menuRemoveRowGroup:\"group\",clipboardCopy:\"copy\",clipboardCut:\"cut\",clipboardPaste:\"paste\",pivotPanel:\"pivot\",rowGroupPanel:\"group\",valuePanel:\"aggregation\",columnDrag:\"grip\",rowDrag:\"grip\",save:\"save\",smallLeft:\"small-left\",smallRight:\"small-right\",smallUp:\"small-up\",smallDown:\"small-down\",sortAscending:\"asc\",sortDescending:\"desc\",sortUnSort:\"none\"},e}();t.Utils=l;var p=function(){function e(e,t){void 0===e&&(e=0),void 0===t&&(t=1),this.nextValue=e,this.step=t}return e.prototype.next=function(){var e=this.nextValue;return this.nextValue+=this.step,e},e.prototype.peek=function(){return this.nextValue},e.prototype.skip=function(e){this.nextValue+=e},e}();t.NumberSequence=p,t._=l},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i;Object.defineProperty(t,\"__esModule\",{value:!0}),function(e){e[e.IN_PROGRESS=0]=\"IN_PROGRESS\",e[e.RESOLVED=1]=\"RESOLVED\"}(i=t.PromiseStatus||(t.PromiseStatus={}));var n=function(){function e(e){this.status=i.IN_PROGRESS,this.resolution=null,this.listOfWaiters=[],e(this.onDone.bind(this),this.onReject.bind(this))}return e.all=function(t){return new e(function(e){var o=[],i=t.length;t.forEach(function(t,n){t.then(function(t){i--,o[n]=t,0==i&&e(o)}),o.push(null)})})},e.resolve=function(t){return new e(function(e){return e(t)})},e.external=function(){var t;return{promise:new e(function(e){t=e}),resolve:function(e){t(e)}}},e.prototype.then=function(e){this.status===i.IN_PROGRESS?this.listOfWaiters.push(e):e(this.resolution)},e.prototype.firstOneOnly=function(e){this.status===i.IN_PROGRESS?0===this.listOfWaiters.length&&this.listOfWaiters.push(e):e(this.resolution)},e.prototype.map=function(t){var o=this;return new e(function(e){o.then(function(o){e(t(o))})})},e.prototype.resolveNow=function(e,t){return this.status==i.IN_PROGRESS?e:t(this.resolution)},e.prototype.onDone=function(e){this.status=i.RESOLVED,this.resolution=e,this.listOfWaiters.forEach(function(t){return t(e)})},e.prototype.onReject=function(e){console.warn(\"TBI\")},e}();t.Promise=n},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */Object.defineProperty(t,\"__esModule\",{value:!0});var i=function(){function e(){this.timestamp=(new Date).getTime()}return e.prototype.print=function(e){var t=(new Date).getTime()-this.timestamp;console.info(e+\" = \"+t),this.timestamp=(new Date).getTime()},e}();t.Timer=i},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}),r=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},s=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(7),l=o(0),p=o(18),u=o(15),d=o(28),c=o(13),h=o(1),f=function(e){function t(t,o,i,n){var r=e.call(this,'<div class=\"ag-row-drag\"></div>')||this;return r.rowNode=t,r.column=o,r.cellValue=i,r.beans=n,r}return n(t,e),t.prototype.postConstruct=function(){this.getGui().appendChild(h._.createIconNoSpan(\"rowDrag\",this.beans.gridOptionsWrapper,null)),this.addDragSource(),this.checkCompatibility(),this.beans.gridOptionsWrapper.isRowDragManaged()?this.addFeature(this.beans.context,new v(this,this.beans,this.rowNode,this.column)):this.addFeature(this.beans.context,new y(this,this.beans,this.rowNode,this.column))},t.prototype.checkCompatibility=function(){var e=this.beans.gridOptionsWrapper.isRowDragManaged();this.beans.gridOptionsWrapper.isTreeData()&&e&&h._.doOnce(function(){return console.warn(\"ag-Grid: If using row drag with tree data, you cannot have rowDragManaged=true\")},\"RowDragComp.managedAndTreeData\")},t.prototype.addDragSource=function(){var e=this,t={rowNode:this.rowNode},o={type:u.DragSourceType.RowDrag,eElement:this.getGui(),dragItemName:this.cellValue,dragItemCallback:function(){return t},dragStartPixels:0};this.beans.dragAndDropService.addDragSource(o,!0),this.addDestroyFunc(function(){return e.beans.dragAndDropService.removeDragSource(o)})},r([l.PostConstruct,s(\"design:type\",Function),s(\"design:paramtypes\",[]),s(\"design:returntype\",void 0)],t.prototype,\"postConstruct\",null),t}(a.Component);t.RowDragComp=f;var g=function(e){function t(t,o,i){var n=e.call(this)||this;return n.parent=t,n.column=i,n.rowNode=o,n}return n(t,e),t.prototype.setDisplayedOrVisible=function(e){if(e)this.parent.setDisplayed(!1);else{var t=this.column.isRowDrag(this.rowNode);h._.isFunction(this.column.getColDef().rowDrag)?this.parent.setVisible(t):this.parent.setDisplayed(t)}},t}(c.BeanStub),y=function(e){function t(t,o,i,n){var r=e.call(this,t,i,n)||this;return r.beans=o,r}return n(t,e),t.prototype.postConstruct=function(){this.addDestroyableEventListener(this.beans.gridOptionsWrapper,\"suppressRowDrag\",this.onSuppressRowDrag.bind(this)),this.addDestroyableEventListener(this.rowNode,p.RowNode.EVENT_DATA_CHANGED,this.workOutVisibility.bind(this)),this.addDestroyableEventListener(this.rowNode,p.RowNode.EVENT_CELL_CHANGED,this.workOutVisibility.bind(this)),this.workOutVisibility()},t.prototype.onSuppressRowDrag=function(){this.workOutVisibility()},t.prototype.workOutVisibility=function(){var e=this.beans.gridOptionsWrapper.isSuppressRowDrag();this.setDisplayedOrVisible(e)},r([l.PostConstruct,s(\"design:type\",Function),s(\"design:paramtypes\",[]),s(\"design:returntype\",void 0)],t.prototype,\"postConstruct\",null),t}(g),v=function(e){function t(t,o,i,n){var r=e.call(this,t,i,n)||this;return r.beans=o,r}return n(t,e),t.prototype.postConstruct=function(){this.addDestroyableEventListener(this.beans.eventService,d.Events.EVENT_SORT_CHANGED,this.onSortChanged.bind(this)),this.addDestroyableEventListener(this.beans.eventService,d.Events.EVENT_FILTER_CHANGED,this.onFilterChanged.bind(this)),this.addDestroyableEventListener(this.beans.eventService,d.Events.EVENT_COLUMN_ROW_GROUP_CHANGED,this.onRowGroupChanged.bind(this)),this.addDestroyableEventListener(this.rowNode,p.RowNode.EVENT_DATA_CHANGED,this.workOutVisibility.bind(this)),this.addDestroyableEventListener(this.rowNode,p.RowNode.EVENT_CELL_CHANGED,this.workOutVisibility.bind(this)),this.addDestroyableEventListener(this.beans.gridOptionsWrapper,\"suppressRowDrag\",this.onSuppressRowDrag.bind(this)),this.updateSortActive(),this.updateFilterActive(),this.updateRowGroupActive(),this.workOutVisibility()},t.prototype.updateRowGroupActive=function(){var e=this.beans.columnController.getRowGroupColumns();this.rowGroupActive=!h._.missingOrEmpty(e)},t.prototype.onRowGroupChanged=function(){this.updateRowGroupActive(),this.workOutVisibility()},t.prototype.updateSortActive=function(){var e=this.beans.sortController.getSortModel();this.sortActive=!h._.missingOrEmpty(e)},t.prototype.onSortChanged=function(){this.updateSortActive(),this.workOutVisibility()},t.prototype.updateFilterActive=function(){this.filterActive=this.beans.filterManager.isAnyFilterPresent()},t.prototype.onFilterChanged=function(){this.updateFilterActive(),this.workOutVisibility()},t.prototype.onSuppressRowDrag=function(){this.workOutVisibility()},t.prototype.workOutVisibility=function(){var e=this.sortActive||this.filterActive||this.rowGroupActive,t=this.beans.gridOptionsWrapper.isSuppressRowDrag(),o=e||t;this.setDisplayedOrVisible(o)},r([l.PostConstruct,s(\"design:type\",Function),s(\"design:paramtypes\",[]),s(\"design:returntype\",void 0)],t.prototype,\"postConstruct\",null),t}(g)},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}),r=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},s=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(7),l=o(0),p=o(1),u=function(e){function t(t,o,i,n,r){var s=e.call(this,'<div class=\"ag-row-drag\" draggable=\"true\"></div>')||this;return s.rowNode=t,s.column=o,s.cellValue=i,s.beans=n,s.eCell=r,s}return n(t,e),t.prototype.postConstruct=function(){this.getGui().appendChild(p._.createIconNoSpan(\"rowDrag\",this.beans.gridOptionsWrapper,null)),this.addDragSource(),this.checkVisibility()},t.prototype.addDragSource=function(){this.addGuiEventListener(\"dragstart\",this.onDragStart.bind(this))},t.prototype.onDragStart=function(e){var t=this,o=this.column.getColDef().dndSourceOnRowDrag,i=p._.isBrowserIE();i||e.dataTransfer.setDragImage(this.eCell,0,0);o?o({rowNode:this.rowNode,dragEvent:e}):function(){try{var o=JSON.stringify(t.rowNode.data);i?e.dataTransfer.setData(\"text\",o):(e.dataTransfer.setData(\"application/json\",o),e.dataTransfer.setData(\"text/plain\",o))}catch(e){}}()},t.prototype.checkVisibility=function(){var e=this.column.isDndSource(this.rowNode);this.setDisplayed(e)},r([l.PostConstruct,s(\"design:type\",Function),s(\"design:paramtypes\",[]),s(\"design:returntype\",void 0)],t.prototype,\"postConstruct\",null),t}(a.Component);t.DndSourceComp=u},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}),r=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},s=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(7),l=o(11),p=o(0),u=o(2),d=o(23),c=o(43),h=o(3),f=o(10),g=o(5),y=o(1),v=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.lastMovingChanged=0,t}return n(t,e),t.prototype.init=function(e){var o=y._.firstExistingValue(e.template,t.TEMPLATE);o=o&&o.trim?o.trim():o,this.setTemplate(o),this.params=e,this.setupTap(),this.setupIcons(e.column),this.setupMenu(),this.setupSort(),this.setupFilterIcon(),this.setupText(e.displayName)},t.prototype.setupText=function(e){var t=y._.escape(e);this.eText&&(this.eText.innerHTML=t)},t.prototype.setupIcons=function(e){this.addInIcon(\"sortAscending\",this.eSortAsc,e),this.addInIcon(\"sortDescending\",this.eSortDesc,e),this.addInIcon(\"sortUnSort\",this.eSortNone,e),this.addInIcon(\"menu\",this.eMenu,e),this.addInIcon(\"filter\",this.eFilter,e)},t.prototype.addInIcon=function(e,t,o){if(null!=t){var i=y._.createIconNoSpan(e,this.gridOptionsWrapper,o);t.appendChild(i)}},t.prototype.setupTap=function(){var e=this,t=this.gridOptionsWrapper;if(!t.isSuppressTouch()){var o=new c.TouchListener(this.getGui(),!0),i=t.isSuppressMenuHide(),n=i&&y._.exists(this.eMenu),r=n?new c.TouchListener(this.eMenu,!0):o;if(this.params.enableMenu){var s=n?\"EVENT_TAP\":\"EVENT_LONG_TAP\";this.addDestroyableEventListener(r,c.TouchListener[s],function(o){t.getApi().showColumnMenuAfterMouseClick(e.params.column,o.touchStart)})}if(this.params.enableSorting){this.addDestroyableEventListener(o,c.TouchListener.EVENT_TAP,function(t){var o=t.touchStart.target;i&&e.eMenu.contains(o)||e.sortController.progressSort(e.params.column,!1,\"uiColumnSorted\")})}this.addDestroyFunc(function(){return o.destroy()}),n&&this.addDestroyFunc(function(){return r.destroy()})}},t.prototype.setupMenu=function(){var e=this;if(this.eMenu){var t=this.gridOptionsWrapper.isSuppressMenuHide();if(!this.params.enableMenu||y._.isUserAgentIPad()&&!t)y._.removeFromParent(this.eMenu);else{this.addDestroyableEventListener(this.eMenu,\"click\",function(){return e.showMenu(e.eMenu)}),t||(this.eMenu.style.opacity=\"0\",this.addGuiEventListener(\"mouseover\",function(){e.eMenu.style.opacity=\"1\"}),this.addGuiEventListener(\"mouseout\",function(){e.eMenu.style.opacity=\"0\"}));var o=this.eMenu.style;o.transition=\"opacity 0.2s, border 0.2s\",o[\"-webkit-transition\"]=\"opacity 0.2s, border 0.2s\"}}},t.prototype.showMenu=function(e){this.menuFactory.showMenuAfterButtonClick(this.params.column,e)},t.prototype.removeSortIcons=function(){y._.removeFromParent(this.eSortAsc),y._.removeFromParent(this.eSortDesc),y._.removeFromParent(this.eSortNone),y._.removeFromParent(this.eSortOrder)},t.prototype.setupSort=function(){var e=this;if(this.params.enableSorting){var t=this.gridOptionsWrapper.isMultiSortKeyCtrl();this.addDestroyableEventListener(this.params.column,l.Column.EVENT_MOVING_CHANGED,function(){e.lastMovingChanged=(new Date).getTime()}),this.eLabel&&this.addDestroyableEventListener(this.eLabel,\"click\",function(o){var i=e.params.column.isMoving(),n=(new Date).getTime()-e.lastMovingChanged<50;if(!(i||n)){var r=t?o.ctrlKey||o.metaKey:o.shiftKey;e.params.progressSort(r)}}),this.addDestroyableEventListener(this.params.column,l.Column.EVENT_SORT_CHANGED,this.onSortChanged.bind(this)),this.onSortChanged(),this.addDestroyableEventListener(this.eventService,g.Events.EVENT_SORT_CHANGED,this.setMultiSortOrder.bind(this)),this.setMultiSortOrder()}else this.removeSortIcons()},t.prototype.onSortChanged=function(){if(y._.addOrRemoveCssClass(this.getGui(),\"ag-header-cell-sorted-asc\",this.params.column.isSortAscending()),y._.addOrRemoveCssClass(this.getGui(),\"ag-header-cell-sorted-desc\",this.params.column.isSortDescending()),y._.addOrRemoveCssClass(this.getGui(),\"ag-header-cell-sorted-none\",this.params.column.isSortNone()),this.eSortAsc&&y._.addOrRemoveCssClass(this.eSortAsc,\"ag-hidden\",!this.params.column.isSortAscending()),this.eSortDesc&&y._.addOrRemoveCssClass(this.eSortDesc,\"ag-hidden\",!this.params.column.isSortDescending()),this.eSortNone){var e=!this.params.column.getColDef().unSortIcon&&!this.gridOptionsWrapper.isUnSortIcon();y._.addOrRemoveCssClass(this.eSortNone,\"ag-hidden\",e||!this.params.column.isSortNone())}},t.prototype.setMultiSortOrder=function(){if(this.eSortOrder){var e=this.params.column,t=this.sortController.getColumnsWithSortingOrdered(),o=t.indexOf(e),i=t.length>1,n=e.isSorting()&&i;y._.setDisplayed(this.eSortOrder,n),o>=0?this.eSortOrder.innerHTML=(o+1).toString():y._.clearElement(this.eSortOrder)}},t.prototype.setupFilterIcon=function(){this.eFilter&&(this.addDestroyableEventListener(this.params.column,l.Column.EVENT_FILTER_CHANGED,this.onFilterChanged.bind(this)),this.onFilterChanged())},t.prototype.onFilterChanged=function(){var e=this.params.column.isFilterActive();y._.addOrRemoveCssClass(this.eFilter,\"ag-hidden\",!e)},t.TEMPLATE='<div class=\"ag-cell-label-container\" role=\"presentation\">  <span ref=\"eMenu\" class=\"ag-header-icon ag-header-cell-menu-button\" aria-hidden=\"true\"></span>  <div ref=\"eLabel\" class=\"ag-header-cell-label\" role=\"presentation\" unselectable=\"on\">    <span ref=\"eText\" class=\"ag-header-cell-text\" role=\"columnheader\" unselectable=\"on\"></span>    <span ref=\"eFilter\" class=\"ag-header-icon ag-filter-icon\" aria-hidden=\"true\"></span>    <span ref=\"eSortOrder\" class=\"ag-header-icon ag-sort-order\" aria-hidden=\"true\"></span>    <span ref=\"eSortAsc\" class=\"ag-header-icon ag-sort-ascending-icon\" aria-hidden=\"true\"></span>    <span ref=\"eSortDesc\" class=\"ag-header-icon ag-sort-descending-icon\" aria-hidden=\"true\"></span>    <span ref=\"eSortNone\" class=\"ag-header-icon ag-sort-none-icon\" aria-hidden=\"true\"></span>  </div></div>',r([p.Autowired(\"gridOptionsWrapper\"),s(\"design:type\",u.GridOptionsWrapper)],t.prototype,\"gridOptionsWrapper\",void 0),r([p.Autowired(\"sortController\"),s(\"design:type\",d.SortController)],t.prototype,\"sortController\",void 0),r([p.Autowired(\"menuFactory\"),s(\"design:type\",Object)],t.prototype,\"menuFactory\",void 0),r([p.Autowired(\"eventService\"),s(\"design:type\",h.EventService)],t.prototype,\"eventService\",void 0),r([f.RefSelector(\"eFilter\"),s(\"design:type\",HTMLElement)],t.prototype,\"eFilter\",void 0),r([f.RefSelector(\"eSortAsc\"),s(\"design:type\",HTMLElement)],t.prototype,\"eSortAsc\",void 0),r([f.RefSelector(\"eSortDesc\"),s(\"design:type\",HTMLElement)],t.prototype,\"eSortDesc\",void 0),r([f.RefSelector(\"eSortNone\"),s(\"design:type\",HTMLElement)],t.prototype,\"eSortNone\",void 0),r([f.RefSelector(\"eSortOrder\"),s(\"design:type\",HTMLElement)],t.prototype,\"eSortOrder\",void 0),r([f.RefSelector(\"eMenu\"),s(\"design:type\",HTMLElement)],t.prototype,\"eMenu\",void 0),r([f.RefSelector(\"eLabel\"),s(\"design:type\",HTMLElement)],t.prototype,\"eLabel\",void 0),r([f.RefSelector(\"eText\"),s(\"design:type\",HTMLElement)],t.prototype,\"eText\",void 0),t}(a.Component);t.HeaderComp=v},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}),r=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},s=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(7),l=o(4),p=o(2),u=o(0),d=o(43),c=o(10),h=o(34),f=o(1),g=function(e){function t(){return e.call(this,t.TEMPLATE)||this}return n(t,e),t.prototype.init=function(e){this.params=e,this.setupLabel(),this.addGroupExpandIcon(),this.setupExpandIcons()},t.prototype.setupExpandIcons=function(){var e=this;this.addInIcon(\"columnGroupOpened\",\"agOpened\"),this.addInIcon(\"columnGroupClosed\",\"agClosed\");var t=function(t){if(!f._.isStopPropagationForAgGrid(t)){var o=!e.params.columnGroup.isExpanded();e.columnController.setColumnGroupOpened(e.params.columnGroup.getOriginalColumnGroup(),o,\"uiColumnExpanded\")}};this.addTouchAndClickListeners(this.eCloseIcon,t),this.addTouchAndClickListeners(this.eOpenIcon,t);var o=function(e){f._.stopPropagationForAgGrid(e)};this.addDestroyableEventListener(this.eCloseIcon,\"dblclick\",o),this.addDestroyableEventListener(this.eOpenIcon,\"dblclick\",o),this.addDestroyableEventListener(this.getGui(),\"dblclick\",t),this.updateIconVisibility();var i=this.params.columnGroup.getOriginalColumnGroup();this.addDestroyableEventListener(i,h.OriginalColumnGroup.EVENT_EXPANDED_CHANGED,this.updateIconVisibility.bind(this)),this.addDestroyableEventListener(i,h.OriginalColumnGroup.EVENT_EXPANDABLE_CHANGED,this.updateIconVisibility.bind(this))},t.prototype.addTouchAndClickListeners=function(e,t){var o=new d.TouchListener(e);this.addDestroyableEventListener(o,d.TouchListener.EVENT_TAP,t),this.addDestroyFunc(function(){return o.destroy()}),this.addDestroyableEventListener(e,\"click\",t)},t.prototype.updateIconVisibility=function(){if(this.params.columnGroup.isExpandable()){var e=this.params.columnGroup.isExpanded();f._.setDisplayed(this.eOpenIcon,!e),f._.setDisplayed(this.eCloseIcon,e)}else f._.setDisplayed(this.eOpenIcon,!1),f._.setDisplayed(this.eCloseIcon,!1)},t.prototype.addInIcon=function(e,t){var o=f._.createIconNoSpan(e,this.gridOptionsWrapper,null);this.getRefElement(t).appendChild(o)},t.prototype.addGroupExpandIcon=function(){if(!this.params.columnGroup.isExpandable())return f._.setDisplayed(this.eOpenIcon,!1),void f._.setDisplayed(this.eCloseIcon,!1)},t.prototype.setupLabel=function(){this.params.displayName&&\"\"!==this.params.displayName&&(this.getRefElement(\"agLabel\").innerHTML=this.params.displayName)},t.TEMPLATE='<div class=\"ag-header-group-cell-label\" ref=\"agContainer\" role=\"presentation\"><span ref=\"agLabel\" class=\"ag-header-group-text\" role=\"columnheader\"></span><span ref=\"agOpened\" class=\"ag-header-icon ag-header-expand-icon ag-header-expand-icon-expanded\"></span><span ref=\"agClosed\" class=\"ag-header-icon ag-header-expand-icon ag-header-expand-icon-collapsed\"></span></div>',r([u.Autowired(\"columnController\"),s(\"design:type\",l.ColumnController)],t.prototype,\"columnController\",void 0),r([u.Autowired(\"gridOptionsWrapper\"),s(\"design:type\",p.GridOptionsWrapper)],t.prototype,\"gridOptionsWrapper\",void 0),r([c.RefSelector(\"agOpened\"),s(\"design:type\",HTMLElement)],t.prototype,\"eOpenIcon\",void 0),r([c.RefSelector(\"agClosed\"),s(\"design:type\",HTMLElement)],t.prototype,\"eCloseIcon\",void 0),t}(a.Component);t.HeaderGroupComp=g},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}),r=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},s=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(0),l=o(7),p=o(2),u=o(10),d=o(1),c=function(e){function t(){return e.call(this,t.TEMPLATE)||this}return n(t,e),t.prototype.init=function(e){var t=d._.createIconNoSpan(\"groupLoading\",this.gridOptionsWrapper,null);this.eLoadingIcon.appendChild(t);var o=this.gridOptionsWrapper.getLocaleTextFunc();this.eLoadingText.innerText=o(\"loadingOoo\",\"Loading\")},t.prototype.refresh=function(e){return!1},t.TEMPLATE='<div class=\"ag-stub-cell\">\\n            <span class=\"ag-loading-icon\" ref=\"eLoadingIcon\"></span>\\n            <span class=\"ag-loading-text\" ref=\"eLoadingText\"></span>\\n        </div>',r([a.Autowired(\"gridOptionsWrapper\"),s(\"design:type\",p.GridOptionsWrapper)],t.prototype,\"gridOptionsWrapper\",void 0),r([u.RefSelector(\"eLoadingIcon\"),s(\"design:type\",HTMLElement)],t.prototype,\"eLoadingIcon\",void 0),r([u.RefSelector(\"eLoadingText\"),s(\"design:type\",HTMLElement)],t.prototype,\"eLoadingText\",void 0),t}(l.Component);t.LoadingCellRenderer=c},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}),r=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},s=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(2),l=o(0),p=function(e){function t(){return e.call(this)||this}return n(t,e),t.prototype.init=function(e){var o=this.gridOptionsWrapper.getOverlayLoadingTemplate()?this.gridOptionsWrapper.getOverlayLoadingTemplate():t.DEFAULT_LOADING_OVERLAY_TEMPLATE,i=this.gridOptionsWrapper.getLocaleTextFunc(),n=o.replace(\"[LOADING...]\",i(\"loadingOoo\",\"Loading...\"));this.setTemplate(n)},t.DEFAULT_LOADING_OVERLAY_TEMPLATE='<span class=\"ag-overlay-loading-center\">[LOADING...]</span>',r([l.Autowired(\"gridOptionsWrapper\"),s(\"design:type\",a.GridOptionsWrapper)],t.prototype,\"gridOptionsWrapper\",void 0),t}(o(7).Component);t.LoadingOverlayComponent=p},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}),r=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},s=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(2),l=o(0),p=function(e){function t(){return e.call(this)||this}return n(t,e),t.prototype.init=function(e){var o=this.gridOptionsWrapper.getOverlayNoRowsTemplate()?this.gridOptionsWrapper.getOverlayNoRowsTemplate():t.DEFAULT_NO_ROWS_TEMPLATE,i=this.gridOptionsWrapper.getLocaleTextFunc(),n=o.replace(\"[NO_ROWS_TO_SHOW]\",i(\"noRowsToShow\",\"No Rows To Show\"));this.setTemplate(n)},t.DEFAULT_NO_ROWS_TEMPLATE='<span class=\"ag-overlay-no-rows-center\">[NO_ROWS_TO_SHOW]</span>',r([l.Autowired(\"gridOptionsWrapper\"),s(\"design:type\",a.GridOptionsWrapper)],t.prototype,\"gridOptionsWrapper\",void 0),t}(o(7).Component);t.NoRowsOverlayComponent=p},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)});Object.defineProperty(t,\"__esModule\",{value:!0});var r=function(e){function t(){return e.call(this,'<div class=\"ag-tooltip\"></div>')||this}return n(t,e),t.prototype.init=function(e){var t=e.value;this.getGui().innerHTML=t},t}(o(36).PopupComponent);t.TooltipComponent=r},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)});Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(7),s=o(1),a=function(e){function t(){return e.call(this,'<div class=\"ag-input-wrapper\" role=\"presentation\"><input class=\"ag-filter-filter\" type=\"text\" placeholder=\"yyyy-mm-dd\"></div>')||this}return n(t,e),t.prototype.init=function(e){this.eDateInput=this.getGui().querySelector(\"input\"),(s._.isBrowserChrome()||e.filterParams.browserDatePicker)&&(s._.isBrowserIE()?console.warn(\"ag-grid: browserDatePicker is specified to true, but it is not supported in IE 11, reverting to plain text date picker\"):this.eDateInput.type=\"date\"),this.listener=e.onDateChanged,this.addGuiEventListener(\"input\",this.listener)},t.prototype.getDate=function(){return s._.parseYyyyMmDdToDate(this.eDateInput.value,\"-\")},t.prototype.setDate=function(e){this.eDateInput.value=s._.serializeDateToYyyyMmDd(e,\"-\")},t}(r.Component);t.DefaultDateComponent=a},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}),r=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},s=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(74),l=o(0),p=o(16),u=o(1),d=o(103),c=o(10),h=o(27),f=o(108),g=o(54),y=function(e){function t(){return e.call(this,'<div class=\"ag-input-wrapper\" role=\"presentation\">\\n                <input ref=\"eReadOnlyText\" disabled=\"true\" class=\"ag-floating-filter-input\">\\n                <div ref=\"eDateWrapper\" style=\"display: flex; flex: 1 1 auto; overflow: hidden;\"></div>\\n            </div>')||this}return n(t,e),t.prototype.getDefaultFilterOptions=function(){return a.DateFilter.DEFAULT_FILTER_OPTIONS},t.prototype.conditionToString=function(e){return e.type==h.SimpleFilter.IN_RANGE?e.dateFrom+\"-\"+e.dateTo:null!=e.dateFrom?\"\"+e.dateFrom:\"\"+e.type},t.prototype.init=function(t){e.prototype.init.call(this,t),this.params=t,this.createDateComponent()},t.prototype.setEditable=function(e){u._.setDisplayed(this.eDateWrapper,e),u._.setDisplayed(this.eReadOnlyText,!e)},t.prototype.onParentModelChanged=function(t,o){if(!this.isEventFromFloatingFilter(o)){e.prototype.setLastTypeFromModel.call(this,t);var i=this.canWeEditAfterModelFromParentFilter(t);if(this.setEditable(i),i){if(t){var n=t;this.dateComp.setDate(u._.parseYyyyMmDdToDate(n.dateFrom,\"-\"))}else this.dateComp.setDate(null);this.eReadOnlyText.value=\"\"}else this.eReadOnlyText.value=this.getTextFromModel(t),this.dateComp.setDate(null)}},t.prototype.onDateChanged=function(){var e=this,t=this.dateComp.getDate(),o=u._.serializeDateToYyyyMmDd(t,\"-\");this.params.parentFilterInstance(function(t){t&&t.onFloatingFilterChanged(e.getLastType(),o)})},t.prototype.createDateComponent=function(){var e=this,t=g.ProvidedFilter.getDebounceMs(this.params.filterParams,this.getDefaultDebounceMs()),o={onDateChanged:u._.debounce(this.onDateChanged.bind(this),t),filterParams:this.params.column.getColDef().filterParams};this.dateComp=new d.DateCompWrapper(this.userComponentFactory,o,this.eDateWrapper),this.addDestroyFunc(function(){e.dateComp.destroy()})},r([l.Autowired(\"userComponentFactory\"),s(\"design:type\",p.UserComponentFactory)],t.prototype,\"userComponentFactory\",void 0),r([c.RefSelector(\"eReadOnlyText\"),s(\"design:type\",HTMLInputElement)],t.prototype,\"eReadOnlyText\",void 0),r([c.RefSelector(\"eDateWrapper\"),s(\"design:type\",HTMLInputElement)],t.prototype,\"eDateWrapper\",void 0),t}(f.SimpleFloatingFilter);t.DateFloatingFilter=y},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)});Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(79),s=o(27),a=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t.prototype.getDefaultFilterOptions=function(){return r.NumberFilter.DEFAULT_FILTER_OPTIONS},t.prototype.conditionToString=function(e){return e.type==s.SimpleFilter.IN_RANGE?e.filter+\"-\"+e.filterTo:null!=e.filter?\"\"+e.filter:\"\"+e.type},t}(o(109).TextInputFloatingFilter);t.NumberFloatingFilter=a},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)});Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(80),s=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t.prototype.conditionToString=function(e){return null!=e.filter?\"\"+e.filter:\"\"+e.type},t.prototype.getDefaultFilterOptions=function(){return r.TextFilter.DEFAULT_FILTER_OPTIONS},t}(o(109).TextInputFloatingFilter);t.TextFloatingFilter=s},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}),r=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},s=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(38),l=o(13),p=o(0),u=o(9),d=o(8),c=o(5),h=o(3),f=o(6),g=o(19),y=o(2),v=function(e){function t(t,o){var i=e.call(this)||this;i.cbSelectAllVisible=!1,i.processingEventFromCheckbox=!1,i.cbSelectAll=t,i.column=o;var n=o.getColDef();return i.filteredOnly=!!n&&!!n.headerCheckboxSelectionFilteredOnly,i}return n(t,e),t.prototype.postConstruct=function(){this.showOrHideSelectAll(),this.addDestroyableEventListener(this.eventService,c.Events.EVENT_DISPLAYED_COLUMNS_CHANGED,this.showOrHideSelectAll.bind(this)),this.addDestroyableEventListener(this.eventService,c.Events.EVENT_SELECTION_CHANGED,this.onSelectionChanged.bind(this)),this.addDestroyableEventListener(this.eventService,c.Events.EVENT_MODEL_UPDATED,this.onModelChanged.bind(this)),this.addDestroyableEventListener(this.cbSelectAll,a.AgCheckbox.EVENT_CHANGED,this.onCbSelectAll.bind(this))},t.prototype.showOrHideSelectAll=function(){this.cbSelectAllVisible=this.isCheckboxSelection(),this.cbSelectAll.setDisplayed(this.cbSelectAllVisible),this.cbSelectAllVisible&&(this.checkRightRowModelType(),this.updateStateOfCheckbox())},t.prototype.onModelChanged=function(){this.cbSelectAllVisible&&this.updateStateOfCheckbox()},t.prototype.onSelectionChanged=function(){this.cbSelectAllVisible&&this.updateStateOfCheckbox()},t.prototype.getNextCheckboxState=function(e){return(0!==e.selected||0!==e.notSelected)&&(e.selected>0&&e.notSelected>0?null:e.selected>0)},t.prototype.updateStateOfCheckbox=function(){if(!this.processingEventFromCheckbox){this.processingEventFromCheckbox=!0;var e=this.getSelectionCount(),t=this.getNextCheckboxState(e);this.cbSelectAll.setValue(t),this.processingEventFromCheckbox=!1}},t.prototype.getSelectionCount=function(){var e=this,t=0,o=0,i=function(i){e.gridOptionsWrapper.isGroupSelectsChildren()&&i.group||(i.isSelected()?t++:i.selectable&&o++)};return this.filteredOnly?this.gridApi.forEachNodeAfterFilter(i):this.gridApi.forEachNode(i),{notSelected:o,selected:t}},t.prototype.checkRightRowModelType=function(){var e=this.rowModel.getType();e===f.Constants.ROW_MODEL_TYPE_CLIENT_SIDE||console.warn(\"ag-Grid: selectAllCheckbox is only available if using normal row model, you are using \"+e)},t.prototype.onCbSelectAll=function(){this.processingEventFromCheckbox||this.cbSelectAllVisible&&(this.cbSelectAll.getValue()?this.selectionController.selectAllRowNodes(this.filteredOnly):this.selectionController.deselectAllRowNodes(this.filteredOnly))},t.prototype.isCheckboxSelection=function(){var e=this.column.getColDef().headerCheckboxSelection;\"function\"==typeof e&&(e=e({column:this.column,colDef:this.column.getColDef(),columnApi:this.columnApi,api:this.gridApi}));return!!e&&(this.gridOptionsWrapper.isRowModelServerSide()?(console.warn(\"headerCheckboxSelection is not supported for Server Side Row Model\"),!1):this.gridOptionsWrapper.isRowModelInfinite()?(console.warn(\"headerCheckboxSelection is not supported for Infinite Row Model\"),!1):!this.gridOptionsWrapper.isRowModelViewport()||(console.warn(\"headerCheckboxSelection is not supported for Viewport Row Model\"),!1))},r([p.Autowired(\"gridApi\"),s(\"design:type\",d.GridApi)],t.prototype,\"gridApi\",void 0),r([p.Autowired(\"columnApi\"),s(\"design:type\",u.ColumnApi)],t.prototype,\"columnApi\",void 0),r([p.Autowired(\"eventService\"),s(\"design:type\",h.EventService)],t.prototype,\"eventService\",void 0),r([p.Autowired(\"rowModel\"),s(\"design:type\",Object)],t.prototype,\"rowModel\",void 0),r([p.Autowired(\"selectionController\"),s(\"design:type\",g.SelectionController)],t.prototype,\"selectionController\",void 0),r([p.Autowired(\"gridOptionsWrapper\"),s(\"design:type\",y.GridOptionsWrapper)],t.prototype,\"gridOptionsWrapper\",void 0),r([p.PostConstruct,s(\"design:type\",Function),s(\"design:paramtypes\",[]),s(\"design:returntype\",void 0)],t.prototype,\"postConstruct\",null),t}(l.BeanStub);t.SelectAllFeature=v},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */Object.defineProperty(t,\"__esModule\",{value:!0}),t.DefaultColumnTypes={numericColumn:{headerClass:\"ag-numeric-header\",cellClass:\"ag-numeric-cell\"}}},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */Object.defineProperty(t,\"__esModule\",{value:!0});var i=o(92);function n(e,t,o,n){var r,s,a=n.agGrid;if(s=a+\".quickFilterText\",r=t.$eval(a)){var l=e[0],p={$scope:t,$compile:o,quickFilterOnScope:s},u=new i.Grid(l,r,p);t.$on(\"$destroy\",function(){u.destroy(),u=null})}else console.warn(\"WARNING - grid options for ag-Grid not found. Please ensure the attribute ag-grid points to a valid object on the scope\")}t.initialiseAgGridWithAngular1=function(e){e.module(\"agGrid\",[]).directive(\"agGrid\",function(){return{restrict:\"A\",controller:[\"$element\",\"$scope\",\"$compile\",\"$attrs\",n],scope:!0}})}},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}),r=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},s=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(7),l=o(11),p=o(29),u=o(9),d=o(4),c=o(2),h=o(57),f=o(0),g=o(86),y=o(15),v=o(58),m=o(8),C=o(16),E=o(31),w=o(88),R=o(1),_=function(e){function t(o,i,n){var r=e.call(this,t.TEMPLATE)||this;return r.childColumnsDestroyFuncs=[],r.columnGroup=o,r.dragSourceDropTarget=i,r.pinned=n,r}return n(t,e),t.prototype.postConstruct=function(){g.CssClassApplier.addHeaderClassesFromColDef(this.getComponentHolder(),this.getGui(),this.gridOptionsWrapper,null,this.columnGroup);var e=this.columnController.getDisplayNameForColumnGroup(this.columnGroup,\"header\");this.appendHeaderGroupComp(e),this.setupResize(),this.addClasses(),this.setupWidth(),this.addAttributes(),this.setupMovingCss(),this.setupTooltip(),this.addFeature(this.getContext(),new w.HoverFeature(this.columnGroup.getOriginalColumnGroup().getLeafColumns(),this.getGui()));var t=new v.SetLeftFeature(this.columnGroup,this.getGui(),this.beans);t.init(),this.addDestroyFunc(t.destroy.bind(t))},t.prototype.setupMovingCss=function(){var e=this;this.columnGroup.getOriginalColumnGroup().getLeafColumns().forEach(function(t){e.addDestroyableEventListener(t,l.Column.EVENT_MOVING_CHANGED,e.onColumnMovingChanged.bind(e))}),this.onColumnMovingChanged()},t.prototype.getColumn=function(){return this.columnGroup},t.prototype.getComponentHolder=function(){return this.columnGroup.getColGroupDef()},t.prototype.getTooltipText=function(){var e=this.getComponentHolder();return e&&e.headerTooltip},t.prototype.setupTooltip=function(){var e=this.getTooltipText();null!=e&&(this.gridOptionsWrapper.isEnableBrowserTooltips()?this.getGui().setAttribute(\"title\",e):this.beans.tooltipManager.registerTooltip(this))},t.prototype.onColumnMovingChanged=function(){R._.addOrRemoveCssClass(this.getGui(),\"ag-header-cell-moving\",this.columnGroup.isMoving())},t.prototype.addAttributes=function(){this.getGui().setAttribute(\"col-id\",this.columnGroup.getUniqueId())},t.prototype.appendHeaderGroupComp=function(e){var t=this,o={displayName:e,columnGroup:this.columnGroup,setExpanded:function(e){t.columnController.setColumnGroupOpened(t.columnGroup.getOriginalColumnGroup(),e,\"gridInitializing\")},api:this.gridApi,columnApi:this.columnApi,context:this.gridOptionsWrapper.getContext()};if(!e){for(var i=this.columnGroup,n=i.getLeafColumns();i.getParent()&&i.getParent().getLeafColumns().length===n.length;)i=i.getParent();var r=i.getColGroupDef();r&&(e=r.headerName),e||(e=n?this.columnController.getDisplayNameForColumn(n[0],\"header\",!0):\"\")}var s=this.afterHeaderCompCreated.bind(this,e);this.userComponentFactory.newHeaderGroupComponent(o).then(s)},t.prototype.afterHeaderCompCreated=function(e,t){this.appendChild(t),this.setupMove(t.getGui(),e)},t.prototype.addClasses=function(){this.columnGroup.isPadding()?this.addCssClass(\"ag-header-group-cell-no-group\"):this.addCssClass(\"ag-header-group-cell-with-group\")},t.prototype.setupMove=function(e,t){var o=this;if(e&&!this.isSuppressMoving()){var i=this.columnGroup.getOriginalColumnGroup().getLeafColumns();if(e){var n={type:y.DragSourceType.HeaderCell,eElement:e,dragItemName:t,dragItemCallback:this.getDragItemForGroup.bind(this),dragSourceDropTarget:this.dragSourceDropTarget,dragStarted:function(){return i.forEach(function(e){return e.setMoving(!0,\"uiColumnDragged\")})},dragStopped:function(){return i.forEach(function(e){return e.setMoving(!1,\"uiColumnDragged\")})}};this.dragAndDropService.addDragSource(n,!0),this.addDestroyFunc(function(){return o.dragAndDropService.removeDragSource(n)})}}},t.prototype.getDragItemForGroup=function(){var e=this.columnGroup.getOriginalColumnGroup().getLeafColumns(),t={};e.forEach(function(e){return t[e.getId()]=e.isVisible()});var o=[];return this.columnController.getAllDisplayedColumns().forEach(function(t){e.indexOf(t)>=0&&(o.push(t),R._.removeFromArray(e,t))}),e.forEach(function(e){return o.push(e)}),{columns:o,visibleState:t}},t.prototype.isSuppressMoving=function(){var e=!1;return this.columnGroup.getLeafColumns().forEach(function(t){(t.getColDef().suppressMovable||t.getColDef().lockPosition)&&(e=!0)}),e||this.gridOptionsWrapper.isSuppressMovableColumns()},t.prototype.setupWidth=function(){this.addListenersToChildrenColumns(),this.addDestroyableEventListener(this.columnGroup,p.ColumnGroup.EVENT_DISPLAYED_CHILDREN_CHANGED,this.onDisplayedChildrenChanged.bind(this)),this.onWidthChanged(),this.addDestroyFunc(this.destroyListenersOnChildrenColumns.bind(this))},t.prototype.onDisplayedChildrenChanged=function(){this.addListenersToChildrenColumns(),this.onWidthChanged()},t.prototype.addListenersToChildrenColumns=function(){var e=this;this.destroyListenersOnChildrenColumns();var t=this.onWidthChanged.bind(this);this.columnGroup.getLeafColumns().forEach(function(o){o.addEventListener(l.Column.EVENT_WIDTH_CHANGED,t),o.addEventListener(l.Column.EVENT_VISIBLE_CHANGED,t),e.childColumnsDestroyFuncs.push(function(){o.removeEventListener(l.Column.EVENT_WIDTH_CHANGED,t),o.removeEventListener(l.Column.EVENT_VISIBLE_CHANGED,t)})})},t.prototype.destroyListenersOnChildrenColumns=function(){this.childColumnsDestroyFuncs.forEach(function(e){return e()}),this.childColumnsDestroyFuncs=[]},t.prototype.onWidthChanged=function(){this.getGui().style.width=this.columnGroup.getActualWidth()+\"px\"},t.prototype.setupResize=function(){var e=this;if(this.eHeaderCellResize=this.getRefElement(\"agResize\"),this.columnGroup.isResizable()){var t=this.horizontalResizeService.addResizeBar({eResizeBar:this.eHeaderCellResize,onResizeStart:this.onResizeStart.bind(this),onResizing:this.onResizing.bind(this,!1),onResizeEnd:this.onResizing.bind(this,!0)});this.addDestroyFunc(t),this.gridOptionsWrapper.isSuppressAutoSize()||this.eHeaderCellResize.addEventListener(\"dblclick\",function(t){var o=[];e.columnGroup.getDisplayedLeafColumns().forEach(function(e){e.getColDef().suppressAutoSize||o.push(e.getColId())}),o.length>0&&e.columnController.autoSizeColumns(o,\"uiColumnResized\")})}else R._.removeFromParent(this.eHeaderCellResize)},t.prototype.onResizeStart=function(e){var t=this,o=this.columnGroup.getDisplayedLeafColumns();this.resizeCols=R._.filter(o,function(e){return e.isResizable()}),this.resizeStartWidth=0,this.resizeCols.forEach(function(e){return t.resizeStartWidth+=e.getActualWidth()}),this.resizeRatios=[],this.resizeCols.forEach(function(e){return t.resizeRatios.push(e.getActualWidth()/t.resizeStartWidth)});var i=null;if(e&&(i=this.columnController.getDisplayedGroupAfter(this.columnGroup)),i){var n=i.getDisplayedLeafColumns();this.resizeTakeFromCols=R._.filter(n,function(e){return e.isResizable()}),this.resizeTakeFromStartWidth=0,this.resizeTakeFromCols.forEach(function(e){return t.resizeTakeFromStartWidth+=e.getActualWidth()}),this.resizeTakeFromRatios=[],this.resizeTakeFromCols.forEach(function(e){return t.resizeTakeFromRatios.push(e.getActualWidth()/t.resizeTakeFromStartWidth)})}else this.resizeTakeFromCols=null,this.resizeTakeFromStartWidth=null,this.resizeTakeFromRatios=null;R._.addCssClass(this.getGui(),\"ag-column-resizing\")},t.prototype.onResizing=function(e,t){var o=[],i=this.normaliseDragChange(t);o.push({columns:this.resizeCols,ratios:this.resizeRatios,width:this.resizeStartWidth+i}),this.resizeTakeFromCols&&o.push({columns:this.resizeTakeFromCols,ratios:this.resizeTakeFromRatios,width:this.resizeTakeFromStartWidth-i}),this.columnController.resizeColumnSets(o,e,\"uiColumnDragged\"),e&&R._.removeCssClass(this.getGui(),\"ag-column-resizing\")},t.prototype.normaliseDragChange=function(e){var t=e;return this.gridOptionsWrapper.isEnableRtl()?this.pinned!==l.Column.PINNED_LEFT&&(t*=-1):this.pinned===l.Column.PINNED_RIGHT&&(t*=-1),t},t.TEMPLATE='<div class=\"ag-header-group-cell\" role=\"presentation\"><div ref=\"agResize\" class=\"ag-header-cell-resize\" role=\"presentation\"></div></div>',r([f.Autowired(\"gridOptionsWrapper\"),s(\"design:type\",c.GridOptionsWrapper)],t.prototype,\"gridOptionsWrapper\",void 0),r([f.Autowired(\"columnController\"),s(\"design:type\",d.ColumnController)],t.prototype,\"columnController\",void 0),r([f.Autowired(\"horizontalResizeService\"),s(\"design:type\",h.HorizontalResizeService)],t.prototype,\"horizontalResizeService\",void 0),r([f.Autowired(\"dragAndDropService\"),s(\"design:type\",y.DragAndDropService)],t.prototype,\"dragAndDropService\",void 0),r([f.Autowired(\"userComponentFactory\"),s(\"design:type\",C.UserComponentFactory)],t.prototype,\"userComponentFactory\",void 0),r([f.Autowired(\"gridApi\"),s(\"design:type\",m.GridApi)],t.prototype,\"gridApi\",void 0),r([f.Autowired(\"columnApi\"),s(\"design:type\",u.ColumnApi)],t.prototype,\"columnApi\",void 0),r([f.Autowired(\"beans\"),s(\"design:type\",E.Beans)],t.prototype,\"beans\",void 0),r([f.PostConstruct,s(\"design:type\",Function),s(\"design:paramtypes\",[]),s(\"design:returntype\",void 0)],t.prototype,\"postConstruct\",null),t}(a.Component);t.HeaderGroupWrapperComp=_},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}),r=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},s=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(0),l=o(11),p=o(58),u=o(7),d=o(10),c=o(2),h=o(31),f=o(88),g=o(5),y=o(3),v=o(46),m=o(1),C=o(16),E=o(8),w=o(9),R=o(14),_=o(169),O=function(e){function t(o){var i=e.call(this,t.TEMPLATE)||this;return i.column=o,i}return n(t,e),t.prototype.postConstruct=function(){this.setupFloatingFilter(),this.setupWidth(),this.setupLeftPositioning(),this.setupColumnHover(),this.addFeature(this.getContext(),new f.HoverFeature([this.column],this.getGui())),this.addDestroyableEventListener(this.eButtonShowMainFilter,\"click\",this.showParentFilter.bind(this))},t.prototype.setupFloatingFilter=function(){var e=this;this.column.getColDef().filter?(this.floatingFilterCompPromise=this.getFloatingFilterInstance(),this.floatingFilterCompPromise?this.floatingFilterCompPromise.then(function(t){t?(e.setupWithFloatingFilter(t),e.setupSyncWithFilter()):e.setupEmpty()}):this.setupEmpty()):this.setupEmpty()},t.prototype.setupLeftPositioning=function(){var e=new p.SetLeftFeature(this.column,this.getGui(),this.beans);e.init(),this.addDestroyFunc(e.destroy.bind(e))},t.prototype.setupSyncWithFilter=function(){var e=this,t=function(t){var o=e.filterManager.getFilterComponent(e.column,\"NO_UI\").resolveNow(null,function(e){return e.getModel()});e.onParentModelChanged(o,t)};this.addDestroyableEventListener(this.column,l.Column.EVENT_FILTER_CHANGED,t),this.filterManager.isFilterActive(this.column)&&t(null)},t.prototype.showParentFilter=function(){this.menuFactory.showMenuAfterButtonClick(this.column,this.eButtonShowMainFilter,\"filterMenuTab\",[\"filterMenuTab\"])},t.prototype.setupColumnHover=function(){this.addDestroyableEventListener(this.eventService,g.Events.EVENT_COLUMN_HOVER_CHANGED,this.onColumnHover.bind(this)),this.onColumnHover()},t.prototype.onColumnHover=function(){var e=this.columnHoverService.isHovered(this.column);m._.addOrRemoveCssClass(this.getGui(),\"ag-column-hover\",e)},t.prototype.setupWidth=function(){this.addDestroyableEventListener(this.column,l.Column.EVENT_WIDTH_CHANGED,this.onColumnWidthChanged.bind(this)),this.onColumnWidthChanged()},t.prototype.onColumnWidthChanged=function(){this.getGui().style.width=this.column.getActualWidth()+\"px\"},t.prototype.setupWithFloatingFilter=function(e){var t=function(){e.destroy&&e.destroy()};if(this.isAlive()){this.addDestroyFunc(t);var o=e.getGui();m._.addOrRemoveCssClass(this.eFloatingFilterBody,\"ag-floating-filter-body\",!this.suppressFilterButton),m._.addOrRemoveCssClass(this.eFloatingFilterBody,\"ag-floating-filter-full-body\",this.suppressFilterButton),m._.setDisplayed(this.eButtonWrapper,!this.suppressFilterButton);var i=m._.createIconNoSpan(\"filter\",this.gridOptionsWrapper,this.column);this.eButtonShowMainFilter.appendChild(i),this.eFloatingFilterBody.appendChild(o),e.afterGuiAttached&&e.afterGuiAttached()}else t()},t.prototype.parentFilterInstance=function(e){this.filterManager.getFilterComponent(this.column,\"NO_UI\").then(e)},t.prototype.getFloatingFilterInstance=function(){var e,o=this.column.getColDef();\"string\"==typeof o.filter?e=t.filterToFloatingFilterNames[o.filter]:!0===o.filter&&(e=this.gridOptionsWrapper.isEnterprise()?\"agSetColumnFloatingFilter\":\"agTextColumnFloatingFilter\");var i=this.filterManager.createFilterParams(this.column,this.column.getColDef()),n=this.userComponentFactory.createFinalParams(o,\"filter\",i),r={api:this.gridApi,column:this.column,filterParams:n,currentParentModel:this.currentParentModel.bind(this),parentFilterInstance:this.parentFilterInstance.bind(this),onFloatingFilterChanged:this.onFloatingFilterChanged.bind(this),suppressFilterButton:!1};this.suppressFilterButton=!!o.floatingFilterComponentParams&&!!o.floatingFilterComponentParams.suppressFilterButton;var s=this.userComponentFactory.newFloatingFilterComponent(o,r,e);if(!s){var a=this.getFilterComponentPrototype(o);if(a&&a.prototype&&a.prototype.getModelAsString){var l=this.userComponentFactory.createUserComponentFromConcreteClass(_.ReadOnlyFloatingFilter,r);s=m.Promise.resolve(l)}}return s},t.prototype.createDynamicParams=function(){return{column:this.column,colDef:this.column.getColDef(),api:this.gridApi,columnApi:this.columnApi}},t.prototype.getFilterComponentPrototype=function(e){var t=this.userComponentFactory.lookupComponentClassDef(e,\"filter\",this.createDynamicParams());return t?t.component:null},t.prototype.setupEmpty=function(){m._.setDisplayed(this.eButtonWrapper,!1)},t.prototype.currentParentModel=function(){return this.filterManager.getFilterComponent(this.column,\"NO_UI\").resolveNow(null,function(e){return e.getModel()})},t.prototype.onParentModelChanged=function(e,t){this.floatingFilterCompPromise&&this.floatingFilterCompPromise.then(function(o){o.onParentModelChanged(e,t)})},t.prototype.onFloatingFilterChanged=function(){console.warn(\"ag-Grid: since version 21.x, how floating filters are implemented has changed. Instead of calling params.onFloatingFilterChanged(), get a reference to the main filter via params.parentFilterInstance() and then set a value on the parent filter directly.\")},t.filterToFloatingFilterNames={set:\"agSetColumnFloatingFilter\",agSetColumnFilter:\"agSetColumnFloatingFilter\",number:\"agNumberColumnFloatingFilter\",agNumberColumnFilter:\"agNumberColumnFloatingFilter\",date:\"agDateColumnFloatingFilter\",agDateColumnFilter:\"agDateColumnFloatingFilter\",text:\"agTextColumnFloatingFilter\",agTextColumnFilter:\"agTextColumnFloatingFilter\"},t.TEMPLATE='<div class=\"ag-header-cell\" role=\"presentation\">\\n            <div ref=\"eFloatingFilterBody\" role=\"columnheader\"></div>\\n            <div class=\"ag-floating-filter-button\" ref=\"eButtonWrapper\" role=\"presentation\">\\n                <button type=\"button\" ref=\"eButtonShowMainFilter\"></button>\\n            </div>\\n        </div>',r([a.Autowired(\"columnHoverService\"),s(\"design:type\",v.ColumnHoverService)],t.prototype,\"columnHoverService\",void 0),r([a.Autowired(\"eventService\"),s(\"design:type\",y.EventService)],t.prototype,\"eventService\",void 0),r([a.Autowired(\"beans\"),s(\"design:type\",h.Beans)],t.prototype,\"beans\",void 0),r([a.Autowired(\"gridOptionsWrapper\"),s(\"design:type\",c.GridOptionsWrapper)],t.prototype,\"gridOptionsWrapper\",void 0),r([a.Autowired(\"userComponentFactory\"),s(\"design:type\",C.UserComponentFactory)],t.prototype,\"userComponentFactory\",void 0),r([a.Autowired(\"gridApi\"),s(\"design:type\",E.GridApi)],t.prototype,\"gridApi\",void 0),r([a.Autowired(\"columnApi\"),s(\"design:type\",w.ColumnApi)],t.prototype,\"columnApi\",void 0),r([a.Autowired(\"filterManager\"),s(\"design:type\",R.FilterManager)],t.prototype,\"filterManager\",void 0),r([a.Autowired(\"menuFactory\"),s(\"design:type\",Object)],t.prototype,\"menuFactory\",void 0),r([d.RefSelector(\"eFloatingFilterBody\"),s(\"design:type\",HTMLElement)],t.prototype,\"eFloatingFilterBody\",void 0),r([d.RefSelector(\"eButtonWrapper\"),s(\"design:type\",HTMLElement)],t.prototype,\"eButtonWrapper\",void 0),r([d.RefSelector(\"eButtonShowMainFilter\"),s(\"design:type\",HTMLElement)],t.prototype,\"eButtonShowMainFilter\",void 0),r([a.PostConstruct,s(\"design:type\",Function),s(\"design:paramtypes\",[]),s(\"design:returntype\",void 0)],t.prototype,\"postConstruct\",null),t}(u.Component);t.FloatingFilterWrapper=O},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}),r=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},s=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(7),l=o(10),p=function(e){function t(){return e.call(this,'<div class=\"ag-input-wrapper\" role=\"presentation\"><input ref=\"eFloatingFilterText\" class=\"ag-floating-filter-input\"></div>')||this}return n(t,e),t.prototype.init=function(e){this.params=e,this.eFloatingFilterText.disabled=!0},t.prototype.onParentModelChanged=function(e){var t=this;e?this.params.parentFilterInstance(function(o){if(o.getModelAsString){var i=o.getModelAsString(e);t.eFloatingFilterText.value=i}}):this.eFloatingFilterText.value=\"\"},r([l.RefSelector(\"eFloatingFilterText\"),s(\"design:type\",HTMLInputElement)],t.prototype,\"eFloatingFilterText\",void 0),t}(a.Component);t.ReadOnlyFloatingFilter=p},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(0),s=o(2),a=o(1),l=function(){function e(e){this.childCount=0,this.rowTemplatesToAdd=[],this.afterGuiAttachedCallbacks=[],this.lastMadeVisibleTime=0,this.eContainer=e.eContainer,this.eViewport=e.eViewport,e.eWrapper&&(this.eWrapper=e.eWrapper),this.hideWhenNoChildren=e.hideWhenNoChildren}return e.prototype.setVerticalScrollPosition=function(e){this.scrollTop=e},e.prototype.postConstruct=function(){this.checkDomOrder(),this.checkVisibility(),this.gridOptionsWrapper.addEventListener(s.GridOptionsWrapper.PROP_DOM_LAYOUT,this.checkDomOrder.bind(this))},e.prototype.checkDomOrder=function(){this.domOrder=this.gridOptionsWrapper.isEnsureDomOrder()},e.prototype.getRowElement=function(e){return this.eContainer.querySelector('[comp-id=\"'+e+'\"]')},e.prototype.setHeight=function(e){null!=e?(this.eContainer.style.height=e+\"px\",this.eWrapper&&(this.eWrapper.style.height=e+\"px\")):this.eContainer.style.height=\"\"},e.prototype.flushRowTemplates=function(){if(0!==this.rowTemplatesToAdd.length){var e=this.rowTemplatesToAdd.join(\"\");a._.appendHtml(this.eContainer,e),this.rowTemplatesToAdd.length=0}this.afterGuiAttachedCallbacks.forEach(function(e){return e()}),this.afterGuiAttachedCallbacks.length=0,this.lastPlacedElement=null},e.prototype.appendRowTemplate=function(e,t){this.domOrder?this.lastPlacedElement=a._.insertTemplateWithDomOrder(this.eContainer,e,this.lastPlacedElement):this.rowTemplatesToAdd.push(e),this.afterGuiAttachedCallbacks.push(t),this.childCount++,this.checkVisibility()},e.prototype.ensureDomOrder=function(e){this.domOrder&&(a._.ensureDomOrder(this.eContainer,e,this.lastPlacedElement),this.lastPlacedElement=e)},e.prototype.removeRowElement=function(e){this.eContainer.removeChild(e),this.childCount--,this.checkVisibility()},e.prototype.checkVisibility=function(){if(this.hideWhenNoChildren){var e=this.eViewport?this.eViewport:this.eContainer,t=this.childCount>0;this.visible!==t&&(this.visible=t,this.lastMadeVisibleTime=(new Date).getTime(),a._.setDisplayed(e,t),t&&this.eViewport&&(this.eViewport.scrollTop=this.scrollTop))}},e.prototype.isMadeVisibleRecently=function(){return(new Date).getTime()-this.lastMadeVisibleTime<500},i([r.Autowired(\"gridOptionsWrapper\"),n(\"design:type\",s.GridOptionsWrapper)],e.prototype,\"gridOptionsWrapper\",void 0),i([r.PostConstruct,n(\"design:type\",Function),n(\"design:paramtypes\",[]),n(\"design:returntype\",void 0)],e.prototype,\"postConstruct\",null),e}();t.RowContainerComponent=l},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},n=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var r=o(15),s=o(0),a=o(22),l=o(2),p=o(3),u=o(28),d=o(6),c=function(){function e(e,t){this.eContainer=e,this.gridPanel=t}return e.prototype.postConstruct=function(){this.gridOptionsWrapper.isRowModelDefault()&&(this.clientSideRowModel=this.rowModel)},e.prototype.getContainer=function(){return this.eContainer},e.prototype.isInterestedIn=function(e){return e===r.DragSourceType.RowDrag},e.prototype.getIconName=function(){return r.DragAndDropService.ICON_MOVE},e.prototype.onDragEnter=function(e){this.dispatchEvent(u.Events.EVENT_ROW_DRAG_ENTER,e),this.dragAndDropService.setGhostIcon(r.DragAndDropService.ICON_MOVE),e.dragItem.rowNode.setDragging(!0),this.onEnterOrDragging(e)},e.prototype.onDragging=function(e){this.onEnterOrDragging(e)},e.prototype.onEnterOrDragging=function(e){this.dispatchEvent(u.Events.EVENT_ROW_DRAG_MOVE,e),this.lastDraggingEvent=e;var t=this.normaliseForScroll(e.y);this.gridOptionsWrapper.isRowDragManaged()&&this.doManagedDrag(e,t),this.checkCenterForScrolling(t)},e.prototype.doManagedDrag=function(e,t){var o=e.dragItem.rowNode;this.clientSideRowModel.ensureRowAtPixel(o,t)&&(this.focusedCellController.clearFocusedCell(),this.rangeController&&this.rangeController.removeAllCellRanges())},e.prototype.normaliseForScroll=function(e){return this.gridOptionsWrapper.getDomLayout()===d.Constants.DOM_LAYOUT_NORMAL?e+this.gridPanel.getVScrollPosition().top:e},e.prototype.checkCenterForScrolling=function(e){var t=this.gridPanel.getVScrollPosition();this.needToMoveUp=e<t.top+50,this.needToMoveDown=e>t.bottom-50,this.needToMoveUp||this.needToMoveDown?this.ensureIntervalStarted():this.ensureIntervalCleared()},e.prototype.ensureIntervalStarted=function(){this.movingIntervalId||(this.intervalCount=0,this.movingIntervalId=window.setInterval(this.moveInterval.bind(this),100))},e.prototype.ensureIntervalCleared=function(){this.moveInterval&&(window.clearInterval(this.movingIntervalId),this.movingIntervalId=null)},e.prototype.moveInterval=function(){var e,t;this.intervalCount++,(e=10+5*this.intervalCount)>100&&(e=100),this.needToMoveDown?t=this.gridPanel.scrollVertically(e):this.needToMoveUp&&(t=this.gridPanel.scrollVertically(-e)),0!==t&&this.onDragging(this.lastDraggingEvent)},e.prototype.dispatchEvent=function(e,t){var o,i=this.normaliseForScroll(t.y),n=-1,s=null;switch(i>this.rowModel.getCurrentPageHeight()||(n=this.rowModel.getRowIndexAtPixel(i),s=this.rowModel.getRow(n)),t.vDirection){case r.VDirection.Down:o=\"down\";break;case r.VDirection.Up:o=\"up\";break;default:o=null}var a={type:e,api:this.gridOptionsWrapper.getApi(),columnApi:this.gridOptionsWrapper.getColumnApi(),event:t.event,node:t.dragItem.rowNode,overIndex:n,overNode:s,y:i,vDirection:o};this.eventService.dispatchEvent(a)},e.prototype.onDragLeave=function(e){this.dispatchEvent(u.Events.EVENT_ROW_DRAG_LEAVE,e),this.stopDragging(e)},e.prototype.onDragStop=function(e){this.dispatchEvent(u.Events.EVENT_ROW_DRAG_END,e),this.stopDragging(e)},e.prototype.stopDragging=function(e){this.ensureIntervalCleared(),e.dragItem.rowNode.setDragging(!1)},i([s.Autowired(\"dragAndDropService\"),n(\"design:type\",r.DragAndDropService)],e.prototype,\"dragAndDropService\",void 0),i([s.Autowired(\"rowModel\"),n(\"design:type\",Object)],e.prototype,\"rowModel\",void 0),i([s.Autowired(\"focusedCellController\"),n(\"design:type\",a.FocusedCellController)],e.prototype,\"focusedCellController\",void 0),i([s.Autowired(\"gridOptionsWrapper\"),n(\"design:type\",l.GridOptionsWrapper)],e.prototype,\"gridOptionsWrapper\",void 0),i([s.Optional(\"rangeController\"),n(\"design:type\",Object)],e.prototype,\"rangeController\",void 0),i([s.Autowired(\"eventService\"),n(\"design:type\",p.EventService)],e.prototype,\"eventService\",void 0),i([s.PostConstruct,n(\"design:type\",Function),n(\"design:paramtypes\",[]),n(\"design:returntype\",void 0)],e.prototype,\"postConstruct\",null),e}();t.RowDragFeature=c},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}),r=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},s=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)},a=this&&this.__param||function(e,t){return function(o,i){t(o,i,e)}};Object.defineProperty(t,\"__esModule\",{value:!0});var l=o(0),p=o(3),u=o(5),d=o(12),c=o(173),h=o(96),f=o(8),g=o(9),y=function(e){function t(t){return e.call(this,t)||this}return n(t,e),t.prototype.setBeans=function(e){this.logger=e.create(\"InfiniteCache\")},t.prototype.init=function(){e.prototype.init.call(this),this.getRow(0)},t.prototype.moveItemsDown=function(e,t,o){for(var i=e.getStartRow(),n=t+o,r=e.getEndRow()-1;r>=i;r--)if(!(r<n)){var s=r-o,a=this.getRow(s,!0);a?e.setRowNode(r,a):(e.setBlankRowNode(r),e.setDirty())}},t.prototype.insertItems=function(e,t,o){for(var i=e.getStartRow(),n=e.getEndRow(),r=[],s=0;s<o.length;s++){var a=t+s;if(a>=i&&a<n){var l=o[s],p=e.setNewData(a,l);r.push(p)}}return r},t.prototype.insertItemsAtIndex=function(e,t){var o=this,i=[];this.forEachBlockInReverseOrder(function(n){n.getEndRow()<=e||(o.moveItemsDown(n,e,t.length),o.insertItems(n,e,t).forEach(function(e){return i.push(e)}))}),this.isMaxRowFound()&&this.hack_setVirtualRowCount(this.getVirtualRowCount()+t.length),this.onCacheUpdated();var n={type:u.Events.EVENT_ROW_DATA_UPDATED,api:this.gridApi,columnApi:this.columnApi};this.eventService.dispatchEvent(n)},t.prototype.getRow=function(e,t){void 0===t&&(t=!1);var o=Math.floor(e/this.cacheParams.blockSize),i=this.getBlock(o);if(!i){if(t)return null;i=this.createBlock(o)}return i.getRow(e)},t.prototype.createBlock=function(e){var t=new c.InfiniteBlock(e,this.cacheParams);return this.getContext().wireBean(t),this.postCreateBlock(t),t},t.prototype.refreshCache=function(){this.forEachBlockInOrder(function(e){return e.setDirty()}),this.checkBlockToLoad()},r([l.Autowired(\"eventService\"),s(\"design:type\",p.EventService)],t.prototype,\"eventService\",void 0),r([l.Autowired(\"columnApi\"),s(\"design:type\",g.ColumnApi)],t.prototype,\"columnApi\",void 0),r([l.Autowired(\"gridApi\"),s(\"design:type\",f.GridApi)],t.prototype,\"gridApi\",void 0),r([a(0,l.Qualifier(\"loggerFactory\")),s(\"design:type\",Function),s(\"design:paramtypes\",[d.LoggerFactory]),s(\"design:returntype\",void 0)],t.prototype,\"setBeans\",null),r([l.PostConstruct,s(\"design:type\",Function),s(\"design:paramtypes\",[]),s(\"design:returntype\",void 0)],t.prototype,\"init\",null),t}(h.RowNodeCache);t.InfiniteCache=y},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}),r=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},s=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(2),l=o(0),p=o(61),u=o(17),d=o(1),c=function(e){function t(t,o){var i=e.call(this,t,o)||this;return i.cacheParams=o,i}return n(t,e),t.prototype.createBlankRowNode=function(t){var o=e.prototype.createBlankRowNode.call(this,t);return o.uiLevel=0,this.setIndexAndTopOnRowNode(o,t),o},t.prototype.setDataAndId=function(e,t,o){d._.exists(t)?e.setDataAndId(t,o.toString()):e.setDataAndId(void 0,void 0)},t.prototype.setRowNode=function(t,o){e.prototype.setRowNode.call(this,t,o),this.setIndexAndTopOnRowNode(o,t)},t.prototype.init=function(){e.prototype.init.call(this,{context:this.getContext(),rowRenderer:this.rowRenderer})},t.prototype.getNodeIdPrefix=function(){return null},t.prototype.getRow=function(e){return this.getRowUsingLocalIndex(e)},t.prototype.setIndexAndTopOnRowNode=function(e,t){e.setRowIndex(t),e.rowTop=this.cacheParams.rowHeight*t},t.prototype.loadFromDatasource=function(){var e=this,t={startRow:this.getStartRow(),endRow:this.getEndRow(),successCallback:this.pageLoaded.bind(this,this.getVersion()),failCallback:this.pageLoadFailed.bind(this),sortModel:this.cacheParams.sortModel,filterModel:this.cacheParams.filterModel,context:this.gridOptionsWrapper.getContext()};d._.missing(this.cacheParams.datasource.getRows)?console.warn(\"ag-Grid: datasource is missing getRows method\"):(d._.getFunctionParameters(this.cacheParams.datasource.getRows).length>1&&(console.warn(\"ag-grid: It looks like your paging datasource is of the old type, taking more than one parameter.\"),console.warn(\"ag-grid: From ag-grid 1.9.0, now the getRows takes one parameter. See the documentation for details.\")),window.setTimeout(function(){e.cacheParams.datasource.getRows(t)},0))},r([l.Autowired(\"gridOptionsWrapper\"),s(\"design:type\",a.GridOptionsWrapper)],t.prototype,\"gridOptionsWrapper\",void 0),r([l.Autowired(\"rowRenderer\"),s(\"design:type\",u.RowRenderer)],t.prototype,\"rowRenderer\",void 0),r([l.PostConstruct,s(\"design:type\",Function),s(\"design:paramtypes\",[]),s(\"design:returntype\",void 0)],t.prototype,\"init\",null),t}(p.RowNodeBlock);t.InfiniteBlock=c},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}),r=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},s=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(0),l=o(2),p=o(51),u=o(17),d=o(3),c=o(6),h=o(13),f=o(5),g=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t.prototype.init=function(){this.rowModel.getType()===c.Constants.ROW_MODEL_TYPE_CLIENT_SIDE&&(this.clientSideRowModel=this.rowModel),this.addDestroyableEventListener(this.eventService,f.Events.EVENT_CELL_VALUE_CHANGED,this.onCellValueChanged.bind(this))},t.prototype.onCellValueChanged=function(e){this.doChangeDetection(e.node,e.column)},t.prototype.doChangeDetection=function(e,t){if(!this.gridOptionsWrapper.isSuppressChangeDetection()){if(this.clientSideRowModel&&!e.isRowPinned()){var o=this.gridOptionsWrapper.isAggregateOnlyChangedColumns(),i=new p.ChangedPath(o,this.clientSideRowModel.getRootNode());i.addParentNode(e.parent,[t]),this.clientSideRowModel.doAggregate(i)}this.rowRenderer.refreshCells()}},r([a.Autowired(\"gridOptionsWrapper\"),s(\"design:type\",l.GridOptionsWrapper)],t.prototype,\"gridOptionsWrapper\",void 0),r([a.Autowired(\"rowModel\"),s(\"design:type\",Object)],t.prototype,\"rowModel\",void 0),r([a.Autowired(\"rowRenderer\"),s(\"design:type\",u.RowRenderer)],t.prototype,\"rowRenderer\",void 0),r([a.Autowired(\"eventService\"),s(\"design:type\",d.EventService)],t.prototype,\"eventService\",void 0),r([a.PostConstruct,s(\"design:type\",Function),s(\"design:paramtypes\",[]),s(\"design:returntype\",void 0)],t.prototype,\"init\",null),t=r([a.Bean(\"changeDetectionService\")],t)}(h.BeanStub);t.ChangeDetectionService=g},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}),r=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},s=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(7),l=o(0),p=o(2),u=o(10),d=o(3),c=o(5),h=o(17),f=o(25),g=o(1),y=o(6),v=function(e){function t(){return e.call(this)||this}return n(t,e),t.prototype.postConstruct=function(){var e=this.gridOptionsWrapper.isEnableRtl();this.setTemplate(this.getTemplate()),this.btFirst.insertAdjacentElement(\"afterbegin\",g._.createIconNoSpan(e?\"last\":\"first\",this.gridOptionsWrapper)),this.btPrevious.insertAdjacentElement(\"afterbegin\",g._.createIconNoSpan(e?\"next\":\"previous\",this.gridOptionsWrapper)),this.btNext.insertAdjacentElement(\"afterbegin\",g._.createIconNoSpan(e?\"previous\":\"next\",this.gridOptionsWrapper)),this.btLast.insertAdjacentElement(\"afterbegin\",g._.createIconNoSpan(e?\"first\":\"last\",this.gridOptionsWrapper)),this.rowModel.getType()===y.Constants.ROW_MODEL_TYPE_SERVER_SIDE&&(this.serverSideRowModel=this.rowModel),this.gridOptionsWrapper.isPagination()&&!this.gridOptionsWrapper.isSuppressPaginationPanel()?(this.addDestroyableEventListener(this.eventService,c.Events.EVENT_PAGINATION_CHANGED,this.onPaginationChanged.bind(this)),this.addDestroyableEventListener(this.btFirst,\"click\",this.onBtFirst.bind(this)),this.addDestroyableEventListener(this.btLast,\"click\",this.onBtLast.bind(this)),this.addDestroyableEventListener(this.btNext,\"click\",this.onBtNext.bind(this)),this.addDestroyableEventListener(this.btPrevious,\"click\",this.onBtPrevious.bind(this)),this.onPaginationChanged()):this.setDisplayed(!1)},t.prototype.onPaginationChanged=function(){this.enableOrDisableButtons(),this.updateRowLabels(),this.setCurrentPageLabel(),this.setTotalLabels()},t.prototype.setCurrentPageLabel=function(){var e=this.paginationProxy.getTotalPages()>0,t=this.paginationProxy.getCurrentPage(),o=e?t+1:0;this.lbCurrent.innerHTML=this.formatNumber(o)},t.prototype.formatNumber=function(e){var t=this.gridOptionsWrapper.getPaginationNumberFormatterFunc();return t?t({value:e}):g._.formatNumberCommas(e)},t.prototype.getTemplate=function(){var e=this.gridOptionsWrapper.getLocaleTextFunc(),t=e(\"page\",\"Page\"),o=e(\"to\",\"to\"),i=e(\"of\",\"of\");return'<div class=\"ag-paging-panel ag-unselectable\">\\n                <span ref=\"eSummaryPanel\" class=\"ag-paging-row-summary-panel\">\\n                    <span ref=\"lbFirstRowOnPage\"></span> '+o+' <span ref=\"lbLastRowOnPage\"></span> '+i+' <span ref=\"lbRecordCount\"></span>\\n                </span>\\n                <span class=\"ag-paging-page-summary-panel\">\\n                    <div ref=\"btFirst\" class=\"ag-paging-button\">\\n                        <button type=\"button\">'+e(\"first\",\"First\")+'</button>\\n                    </div>\\n                    <div ref=\"btPrevious\" class=\"ag-paging-button\">\\n                        <button type=\"button\">'+e(\"previous\",\"Previous\")+\"</button>\\n                    </div>\\n                    \"+t+' <span ref=\"lbCurrent\"></span> '+i+' <span ref=\"lbTotal\"></span>\\n                    <div ref=\"btNext\" class=\"ag-paging-button\">\\n                        <button type=\"button\">'+e(\"next\",\"Next\")+'</button>\\n                    </div>\\n                    <div ref=\"btLast\" class=\"ag-paging-button\">\\n                        <button type=\"button\">'+e(\"last\",\"Last\")+\"</button>\\n                    </div>\\n                </span>\\n            </div>\"},t.prototype.onBtNext=function(){this.paginationProxy.goToNextPage()},t.prototype.onBtPrevious=function(){this.paginationProxy.goToPreviousPage()},t.prototype.onBtFirst=function(){this.paginationProxy.goToFirstPage()},t.prototype.onBtLast=function(){this.paginationProxy.goToLastPage()},t.prototype.enableOrDisableButtons=function(){var e=this.paginationProxy.getCurrentPage(),t=this.paginationProxy.isLastPageFound(),o=this.paginationProxy.getTotalPages(),i=0===e;g._.addOrRemoveCssClass(this.btPrevious,\"ag-disabled\",i),g._.addOrRemoveCssClass(this.btFirst,\"ag-disabled\",i);var n=this.isZeroPagesToDisplay(),r=t&&e===o-1||n;g._.addOrRemoveCssClass(this.btNext,\"ag-disabled\",r);var s=!t||n||e===o-1;g._.addOrRemoveCssClass(this.btLast,\"ag-disabled\",s)},t.prototype.updateRowLabels=function(){var e,t,o=this.paginationProxy.getCurrentPage(),i=this.paginationProxy.getPageSize(),n=this.paginationProxy.isLastPageFound(),r=this.paginationProxy.isLastPageFound()?this.paginationProxy.getMasterRowCount():null;this.isZeroPagesToDisplay()?(e=0,t=0):(t=(e=i*o+1)+i-1,n&&t>r&&(t=r)),this.lbFirstRowOnPage.innerHTML=this.formatNumber(e),this.serverSideRowModel&&this.serverSideRowModel.isLoading()?this.lbLastRowOnPage.innerHTML=\"?\":this.lbLastRowOnPage.innerHTML=this.formatNumber(t)},t.prototype.isZeroPagesToDisplay=function(){var e=this.paginationProxy.isLastPageFound(),t=this.paginationProxy.getTotalPages();return e&&0===t},t.prototype.setTotalLabels=function(){var e=this.paginationProxy.isLastPageFound(),t=this.paginationProxy.getTotalPages(),o=this.paginationProxy.isLastPageFound()?this.paginationProxy.getMasterRowCount():null;if(e)this.lbTotal.innerHTML=this.formatNumber(t),this.lbRecordCount.innerHTML=this.formatNumber(o);else{var i=this.gridOptionsWrapper.getLocaleTextFunc()(\"more\",\"more\");this.lbTotal.innerHTML=i,this.lbRecordCount.innerHTML=i}},r([l.Autowired(\"gridOptionsWrapper\"),s(\"design:type\",p.GridOptionsWrapper)],t.prototype,\"gridOptionsWrapper\",void 0),r([l.Autowired(\"eventService\"),s(\"design:type\",d.EventService)],t.prototype,\"eventService\",void 0),r([l.Autowired(\"paginationProxy\"),s(\"design:type\",f.PaginationProxy)],t.prototype,\"paginationProxy\",void 0),r([l.Autowired(\"rowRenderer\"),s(\"design:type\",h.RowRenderer)],t.prototype,\"rowRenderer\",void 0),r([l.Autowired(\"rowModel\"),s(\"design:type\",Object)],t.prototype,\"rowModel\",void 0),r([u.RefSelector(\"btFirst\"),s(\"design:type\",HTMLElement)],t.prototype,\"btFirst\",void 0),r([u.RefSelector(\"btPrevious\"),s(\"design:type\",HTMLElement)],t.prototype,\"btPrevious\",void 0),r([u.RefSelector(\"btNext\"),s(\"design:type\",HTMLElement)],t.prototype,\"btNext\",void 0),r([u.RefSelector(\"btLast\"),s(\"design:type\",HTMLElement)],t.prototype,\"btLast\",void 0),r([u.RefSelector(\"lbRecordCount\"),s(\"design:type\",Object)],t.prototype,\"lbRecordCount\",void 0),r([u.RefSelector(\"lbFirstRowOnPage\"),s(\"design:type\",Object)],t.prototype,\"lbFirstRowOnPage\",void 0),r([u.RefSelector(\"lbLastRowOnPage\"),s(\"design:type\",Object)],t.prototype,\"lbLastRowOnPage\",void 0),r([u.RefSelector(\"eSummaryPanel\"),s(\"design:type\",Object)],t.prototype,\"eSummaryPanel\",void 0),r([u.RefSelector(\"lbCurrent\"),s(\"design:type\",Object)],t.prototype,\"lbCurrent\",void 0),r([u.RefSelector(\"lbTotal\"),s(\"design:type\",Object)],t.prototype,\"lbTotal\",void 0),r([l.PostConstruct,s(\"design:type\",Function),s(\"design:paramtypes\",[]),s(\"design:returntype\",void 0)],t.prototype,\"postConstruct\",null),t}(a.Component);t.PaginationComp=v},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}),r=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},s=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(7),l=o(1),p=o(10),u=o(0),d=function(e){function t(o){var i=e.call(this,t.TEMPLATE)||this;return i.H=1,i.S=1,i.B=1,i.A=1,i.isSpectrumDragging=!1,i.isSpectrumHueDragging=!1,i.isSpectrumAlphaDragging=!1,i.colorChanged=!1,i.picker=o.picker,i}return n(t,e),t.prototype.postConstruct=function(){var e=this.getGui();this.initRecentColors(),this.addDestroyableEventListener(this.spectrumVal,\"mousedown\",this.onSpectrumDraggerDown.bind(this)),this.addDestroyableEventListener(e,\"mousemove\",this.onSpectrumDraggerMove.bind(this)),this.addDestroyableEventListener(this.spectrumHue,\"mousedown\",this.onSpectrumHueDown.bind(this)),this.addDestroyableEventListener(e,\"mousemove\",this.onSpectrumHueMove.bind(this)),this.addDestroyableEventListener(this.spectrumAlpha,\"mousedown\",this.onSpectrumAlphaDown.bind(this)),this.addDestroyableEventListener(e,\"mousemove\",this.onSpectrumAlphaMove.bind(this)),this.addDestroyableEventListener(document,\"mouseup\",this.onMouseUp.bind(this)),this.addDestroyableEventListener(this.recentColors,\"click\",this.onRecentColorClick.bind(this))},t.prototype.refreshSpectrumRect=function(){return this.spectrumValRect=this.spectrumVal.getBoundingClientRect()},t.prototype.refreshHueRect=function(){return this.spectrumHueRect=this.spectrumHue.getBoundingClientRect()},t.prototype.refreshAlphaRect=function(){return this.spectrumAlphaRect=this.spectrumAlpha.getBoundingClientRect()},t.prototype.onSpectrumDraggerDown=function(e){this.refreshSpectrumRect(),this.isSpectrumDragging=!0,this.moveDragger(e)},t.prototype.onSpectrumDraggerMove=function(e){this.isSpectrumDragging&&this.moveDragger(e)},t.prototype.onSpectrumHueDown=function(e){this.refreshHueRect(),this.isSpectrumHueDragging=!0,this.moveHueSlider(e)},t.prototype.onSpectrumHueMove=function(e){this.isSpectrumHueDragging&&this.moveHueSlider(e)},t.prototype.onSpectrumAlphaDown=function(e){this.refreshAlphaRect(),this.isSpectrumAlphaDragging=!0,this.moveAlphaSlider(e)},t.prototype.onSpectrumAlphaMove=function(e){this.isSpectrumAlphaDragging&&this.moveAlphaSlider(e)},t.prototype.onMouseUp=function(){this.isSpectrumDragging=!1,this.isSpectrumHueDragging=!1,this.isSpectrumAlphaDragging=!1},t.prototype.moveDragger=function(e){var t=this.spectrumValRect;if(t){var o=e.clientX-t.left,i=e.clientY-t.top;o=Math.max(o,0),o=Math.min(o,t.width),i=Math.max(i,0),i=Math.min(i,t.height),this.setSpectrumValue(o/t.width,1-i/t.height)}},t.prototype.moveHueSlider=function(e){var t=this.spectrumHueRect;if(t){var o=this.spectrumHueSlider,i=o.getBoundingClientRect(),n=e.clientX-t.left;n=Math.max(n,0),n=Math.min(n,t.width),this.H=1-n/t.width,o.style.left=n+i.width/2+\"px\",this.update()}},t.prototype.moveAlphaSlider=function(e){var t=this.spectrumAlphaRect;if(t){var o=this.spectrumAlphaSlider,i=o.getBoundingClientRect(),n=e.clientX-t.left;n=Math.max(n,0),n=Math.min(n,t.width),this.A=n/t.width,o.style.left=n+i.width/2+\"px\",this.update()}},t.prototype.update=function(){var e=l.Color.fromHSB(360*this.H,this.S,this.B,this.A),t=l.Color.fromHSB(360*this.H,1,1),o=e.toRgbaString(),i=this.picker;l.Color.fromString(i.getValue()).toRgbaString()!==o&&(this.colorChanged=!0),i.setValue(o),this.spectrumColor.style.backgroundColor=t.toRgbaString(),this.spectrumDragger.style.backgroundColor=o},t.prototype.setSpectrumValue=function(e,t){var o=this.spectrumValRect||this.refreshSpectrumRect();if(o){var i=this.spectrumDragger,n=i.getBoundingClientRect();e=Math.max(0,e),e=Math.min(1,e),t=Math.max(0,t),t=Math.min(1,t),this.S=e,this.B=t,i.style.left=e*o.width-n.width/2+\"px\",i.style.top=(1-t)*o.height-n.height/2+\"px\",this.update()}},t.prototype.initRecentColors=function(){var e=t.recentColors.map(function(e,t){return'<div class=\"ag-recent-color\" id='+t+' style=\"background-color: '+e+'; width: 15px; height: 15px;\" recent-color=\"'+e+'\"></div>'});this.recentColors.innerHTML=e.join(\"\")},t.prototype.setValue=function(e){var t=l.Color.fromString(e),o=t.toHSB(),i=o[0],n=o[1],r=o[2];this.H=(isNaN(i)?0:i)/360,this.A=t.a;var s=this.spectrumHueRect||this.refreshHueRect(),a=this.spectrumAlphaRect||this.refreshAlphaRect();this.spectrumHueSlider.style.left=(this.H-1)*-s.width+\"px\",this.spectrumAlphaSlider.style.left=this.A*a.width+\"px\",this.setSpectrumValue(n,r)},t.prototype.onRecentColorClick=function(e){var o=e.target;if(l._.exists(o.id)){var i=parseInt(o.id,10);this.setValue(t.recentColors[i]),this.destroy()}},t.prototype.addRecentColor=function(){var e=l.Color.fromHSB(360*this.H,this.S,this.B,this.A).toRgbaString(),o=t.recentColors;this.colorChanged&&o[0]!==e&&(o=o.filter(function(t){return t!=e}),(o=[e].concat(o)).length>t.maxRecentColors&&(o=o.slice(0,t.maxRecentColors)),t.recentColors=o)},t.prototype.destroy=function(){e.prototype.destroy.call(this),this.addRecentColor()},t.maxRecentColors=8,t.recentColors=[],t.TEMPLATE='<div class=\"ag-color-panel\">\\n            <div ref=\"spectrumColor\" class=\"ag-spectrum-color\">\\n                <div class=\"ag-spectrum-sat ag-fill\">\\n                    <div ref=\"spectrumVal\" class=\"ag-spectrum-val ag-fill\">\\n                        <div ref=\"spectrumDragger\" class=\"ag-spectrum-dragger\"></div>\\n                    </div>\\n                </div>\\n            </div>\\n            <div class=\"ag-spectrum-tools\">\\n                <div ref=\"spectrumHue\" class=\"ag-spectrum-hue ag-hue-alpha\">\\n                    <div class=\"ag-spectrum-hue-background\"></div>\\n                    <div ref=\"spectrumHueSlider\" class=\"ag-spectrum-slider\"></div>\\n                </div>\\n                <div ref=\"spectrumAlpha\" class=\"ag-spectrum-alpha ag-hue-alpha\">\\n                    <div class=\"ag-spectrum-alpha-background\"></div>\\n                    <div ref=\"spectrumAlphaSlider\" class=\"ag-spectrum-slider\"></div>\\n                </div>\\n                <div ref=\"recentColors\" class=\"ag-recent-colors\"></div>\\n            </div>\\n        </div>',r([p.RefSelector(\"spectrumColor\"),s(\"design:type\",HTMLElement)],t.prototype,\"spectrumColor\",void 0),r([p.RefSelector(\"spectrumVal\"),s(\"design:type\",HTMLElement)],t.prototype,\"spectrumVal\",void 0),r([p.RefSelector(\"spectrumDragger\"),s(\"design:type\",HTMLElement)],t.prototype,\"spectrumDragger\",void 0),r([p.RefSelector(\"spectrumHue\"),s(\"design:type\",HTMLElement)],t.prototype,\"spectrumHue\",void 0),r([p.RefSelector(\"spectrumHueSlider\"),s(\"design:type\",HTMLElement)],t.prototype,\"spectrumHueSlider\",void 0),r([p.RefSelector(\"spectrumAlpha\"),s(\"design:type\",HTMLElement)],t.prototype,\"spectrumAlpha\",void 0),r([p.RefSelector(\"spectrumAlphaSlider\"),s(\"design:type\",HTMLElement)],t.prototype,\"spectrumAlphaSlider\",void 0),r([p.RefSelector(\"recentColors\"),s(\"design:type\",HTMLElement)],t.prototype,\"recentColors\",void 0),r([u.PostConstruct,s(\"design:type\",Function),s(\"design:paramtypes\",[]),s(\"design:returntype\",void 0)],t.prototype,\"postConstruct\",null),t}(a.Component);t.AgColorPanel=d},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}),r=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},s=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(10),l=o(0),p=o(2),u=o(32),d=o(1),c=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.TEMPLATE='<div class=\"ag-picker-field\">\\n            <label ref=\"eLabel\"></label>\\n            <div ref=\"eWrapper\" class=\"ag-wrapper\">\\n                <%displayField% ref=\"eDisplayField\"></%displayField%>\\n                <button ref=\"eButton\" class=\"ag-picker-button\"> </button>\\n            </div>\\n        </div>',t.displayedPicker=!1,t.isDestroyingPicker=!1,t}return n(t,e),t.prototype.postConstruct=function(){var t=this;e.prototype.postConstruct.call(this),this.addDestroyableEventListener(this.eButton,\"click\",function(){t.showPicker()}),this.pickerIcon&&this.eButton.appendChild(d._.createIconNoSpan(this.pickerIcon,this.gridOptionsWrapper,null))},t.prototype.setInputWidth=function(e){return d._.setElementWidth(this.eWrapper,e),this},r([l.Autowired(\"gridOptionsWrapper\"),s(\"design:type\",p.GridOptionsWrapper)],t.prototype,\"gridOptionsWrapper\",void 0),r([a.RefSelector(\"eLabel\"),s(\"design:type\",HTMLElement)],t.prototype,\"eLabel\",void 0),r([a.RefSelector(\"eWrapper\"),s(\"design:type\",HTMLElement)],t.prototype,\"eWrapper\",void 0),r([a.RefSelector(\"eDisplayField\"),s(\"design:type\",Object)],t.prototype,\"eDisplayField\",void 0),r([a.RefSelector(\"eButton\"),s(\"design:type\",HTMLButtonElement)],t.prototype,\"eButton\",void 0),t}(u.AgAbstractField);t.AgPickerField=c},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */Object.defineProperty(t,\"__esModule\",{value:!0});var i=o(64),n=o(92),r=!1;t.initialiseAgGridWithWebComponents=function(){if(console.warn(\"ag-grid: initialiseAgGridWithWebComponents is deprecated. Please use the ag-grid-webcomponent dependency instead. \"),!r){r=!0,\"undefined\"!=typeof document&&document.registerElement||console.error(\"ag-Grid: unable to find document.registerElement() function, unable to initialise ag-Grid as a Web Component\");var e=Object.create(HTMLElement.prototype);i.ComponentUtil.ALL_PROPERTIES.forEach(function(t){Object.defineProperty(e,t,{set:function(e){this.__agGridSetProperty(t,e)},get:function(){return this.__agGridGetProperty(t)},enumerable:!0,configurable:!0})});var t=e;t.__agGridSetProperty=function(e,t){this.__attributes||(this.__attributes={}),this.__attributes[e]=t;var o={};o[e]={currentValue:t},this.onChange(o)},t.onChange=function(e){this._initialised&&i.ComponentUtil.processOnChange(e,this._gridOptions,this.api,this.columnApi)},t.__agGridGetProperty=function(e){return this.__attributes||(this.__attributes={}),this.__attributes[e]},t.setGridOptions=function(e){var t=this.globalEventListener.bind(this);this._gridOptions=i.ComponentUtil.copyAttributesToGridOptions(e,this);var o={globalEventListener:t};this._agGrid=new n.Grid(this,this._gridOptions,o),this.api=e.api,this.columnApi=e.columnApi,this._initialised=!0},t.createdCallback=function(){for(var e=0;e<this.attributes.length;e++){var t=this.attributes[e];this.setPropertyFromAttribute(t)}},t.setPropertyFromAttribute=function(e){var t,o=\"string\"==typeof(t=e.nodeName)?t.replace(/-([a-z])/g,function(e){return e[1].toUpperCase()}):t,n=e.nodeValue;i.ComponentUtil.ALL_PROPERTIES.indexOf(o)>=0&&(this[o]=n)},t.attachedCallback=function(e){},t.detachedCallback=function(e){},t.attributeChangedCallback=function(e){var t=this.attributes[e];this.setPropertyFromAttribute(t)},t.globalEventListener=function(e,t){var o=e.toLowerCase(),i=new Event(o);i.agGridDetails=t,this.dispatchEvent(i);var n=\"on\"+o;\"function\"==typeof this[n]&&this[n](i)},document.registerElement(\"ag-grid\",{prototype:e})}}},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */Object.defineProperty(t,\"__esModule\",{value:!0});var i=o(1),n=function(){function e(t){var o=this;this.items=[],this.params=t,this.eGui=document.createElement(\"div\"),this.eGui.innerHTML=e.TEMPLATE,this.eHeader=this.eGui.querySelector('[ref=\"tabHeader\"]'),this.eBody=this.eGui.querySelector('[ref=\"tabBody\"]'),i._.addCssClass(this.eGui,t.cssClass),t.items&&t.items.forEach(function(e){return o.addItem(e)})}return e.prototype.setAfterAttachedParams=function(e){this.afterAttachedParams=e},e.prototype.getMinDimensions=function(){var e=this.eGui.cloneNode(!0),t=e.querySelector('[ref=\"tabBody\"]');e.style.position=\"fixed\",this.eGui.appendChild(e);var o=0,n=0;return this.items.forEach(function(r){i._.clearElement(t);var s=r.tabbedItem.bodyPromise.resolveNow(null,function(e){return e.cloneNode(!0)});null!=s&&(t.appendChild(s),o<e.offsetWidth&&(o=e.offsetWidth),n<e.offsetHeight&&(n=e.offsetHeight))}),this.eGui.removeChild(e),{height:n,width:o}},e.prototype.showFirstItem=function(){this.items.length>0&&this.showItemWrapper(this.items[0])},e.prototype.addItem=function(e){var t=document.createElement(\"span\");t.appendChild(e.title),i._.addCssClass(t,\"ag-tab\"),this.eHeader.appendChild(t);var o={tabbedItem:e,eHeaderButton:t};this.items.push(o),t.addEventListener(\"click\",this.showItemWrapper.bind(this,o))},e.prototype.showItem=function(e){var t=i._.find(this.items,function(t){return t.tabbedItem===e});t&&this.showItemWrapper(t)},e.prototype.showItemWrapper=function(e){var t=this;this.params.onItemClicked&&this.params.onItemClicked({item:e.tabbedItem}),this.activeItem!==e?(i._.clearElement(this.eBody),e.tabbedItem.bodyPromise.then(function(e){t.eBody.appendChild(e)}),this.activeItem&&i._.removeCssClass(this.activeItem.eHeaderButton,\"ag-tab-selected\"),i._.addCssClass(e.eHeaderButton,\"ag-tab-selected\"),this.activeItem=e,e.tabbedItem.afterAttachedCallback&&e.tabbedItem.afterAttachedCallback(this.afterAttachedParams)):i._.callIfPresent(this.params.onActiveItemClicked)},e.prototype.getGui=function(){return this.eGui},e.TEMPLATE='<div><div ref=\"tabHeader\" class=\"ag-tab-header\"></div><div ref=\"tabBody\" class=\"ag-tab-body\"></div></div>',e}();t.TabbedLayout=n},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */Object.defineProperty(t,\"__esModule\",{value:!0});var i=function(){function e(){this.isLayoutPanel=!0,this.childPanels=[],this.eGui=document.createElement(\"div\"),this.eGui.style.height=\"100%\"}return e.prototype.addPanel=function(e,t){var o;e.isLayoutPanel?(this.childPanels.push(e),o=e.getGui()):o=e,t&&(o.style.height=t),this.eGui.appendChild(o)},e.prototype.getGui=function(){return this.eGui},e.prototype.doLayout=function(){for(var e=0;e<this.childPanels.length;e++)this.childPanels[e].doLayout()},e}();t.VerticalStack=i},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */Object.defineProperty(t,\"__esModule\",{value:!0});var i=o(1);t.simpleHttpRequest=function(e){return new i.Promise(function(t){var o=new XMLHttpRequest;o.open(\"GET\",e.url),o.send(),o.onreadystatechange=function(){if(4==o.readyState&&200==o.status){var e=JSON.parse(o.responseText);t(e)}}})}},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */var i,n=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)},function(e,t){function o(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}),r=this&&this.__decorate||function(e,t,o,i){var n,r=arguments.length,s=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(e,t,o,i);else for(var a=e.length-1;a>=0;a--)(n=e[a])&&(s=(r<3?n(s):r>3?n(t,o,s):n(t,o))||s);return r>3&&s&&Object.defineProperty(t,o,s),s},s=this&&this.__metadata||function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,\"__esModule\",{value:!0});var a=o(62),l=o(0),p=o(7),u=o(10),d=function(e){function t(t){var o=e.call(this,t)||this;return o.message=t.message,o}return n(t,e),t.prototype.postConstruct=function(){var t=this,o=new c;this.addFeature(this.getContext(),o),o.setMessage(this.message),this.setBodyComponent(o),e.prototype.postConstruct.call(this),this.addDestroyableEventListener(o,\"onBtOk\",function(){return t.close()})},t}(a.AgDialog);t.MessageBox=d;var c=function(e){function t(){return e.call(this,t.TEMPLATE)||this}return n(t,e),t.prototype.setMessage=function(e){this.eCenter.innerText=e},t.prototype.postConstruct=function(){this.addDestroyableEventListener(this.eOk,\"click\",this.onBtOk.bind(this))},t.prototype.onBtOk=function(){this.dispatchEvent({type:\"onBtOk\"})},t.TEMPLATE='<div class=\"ag-message-box\">\\n            <div ref=\"eCenter\" class=\"ag-message-box-content\"></div>\\n            <div ref=\"eButtons\" class=\"ag-message-box-button-bar\">\\n                <button ref=\"eOk\">OK</button>\\n            </div>\\n        </div>',r([u.RefSelector(\"eCenter\"),s(\"design:type\",HTMLElement)],t.prototype,\"eCenter\",void 0),r([u.RefSelector(\"eOk\"),s(\"design:type\",HTMLElement)],t.prototype,\"eOk\",void 0),r([l.PostConstruct,s(\"design:type\",Function),s(\"design:paramtypes\",[]),s(\"design:returntype\",void 0)],t.prototype,\"postConstruct\",null),t}(p.Component)},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */Object.defineProperty(t,\"__esModule\",{value:!0});var i=o(1);t.defaultGroupComparator=function(e,t,o,n,r){void 0===r&&(r=!1),console.warn(\"ag-Grid: Since ag-grid 11.0.0 defaultGroupComparator is not necessary. You can remove this from your colDef\");var s=i._.exists(o)&&o.group,a=i._.exists(n)&&n.group,l=!s&&!a;return s&&a?i._.defaultComparator(o.key,n.key,r):l?i._.defaultComparator(e,t,r):s?1:-1}},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */Object.defineProperty(t,\"__esModule\",{value:!0});var i=function(){function e(){}return e.prototype.wrap=function(e,t,o,i){var n=this;void 0===o&&(o=[]);var r=this.createWrapper(e,i);return t.forEach(function(e){n.createMethod(r,e,!0)}),o.forEach(function(e){n.createMethod(r,e,!1)}),r},e.prototype.createMethod=function(e,t,o){e.addMethod(t,this.createMethodProxy(e,t,o))},e.prototype.createMethodProxy=function(e,t,o){return function(){return e.hasMethod(t)?e.callMethod(t,arguments):(o&&console.warn(\"ag-Grid: Framework component is missing the method \"+t+\"()\"),null)}},e}();t.BaseComponentWrapper=i},function(e,t,o){\"use strict\";\n/**\n * ag-grid-community - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components\n * @version v21.2.1\n * @link http://www.ag-grid.com/\n * @license MIT\n */Object.defineProperty(t,\"__esModule\",{value:!0}),function(e){e.GroupedColumn=\"groupedColumn\",e.StackedColumn=\"stackedColumn\",e.NormalizedColumn=\"normalizedColumn\",e.GroupedBar=\"groupedBar\",e.StackedBar=\"stackedBar\",e.NormalizedBar=\"normalizedBar\",e.Line=\"line\",e.Scatter=\"scatter\",e.Bubble=\"bubble\",e.Pie=\"pie\",e.Doughnut=\"doughnut\",e.Area=\"area\",e.StackedArea=\"stackedArea\",e.NormalizedArea=\"normalizedArea\"}(t.ChartType||(t.ChartType={}))}])});"
  },
  {
    "path": "public/backend/vendors/js/tables/datatable/vfs_fonts.js",
    "content": "this.pdfMake = this.pdfMake || {}; this.pdfMake.vfs = {\n  \"Roboto-Italic.ttf\": \"AAEAAAASAQAABAAgR0RFRtRX1FkAAgp8AAACREdQT1NKcuCzAAIMwAAAUiRHU1VCw4aZEQACXuQAABfoT1MvMqCnsO0AAAGoAAAAYGNtYXBAbb9DAAAafAAABoBjdnQgJEEG5QAAI5QAAABMZnBnbWf0XKsAACD8AAABvGdhc3AACAATAAIKcAAAAAxnbHlmoLsktAAALagAAdn2aGRteCEe/AUAABWQAAAE7GhlYWT4gasAAAABLAAAADZoaGVhDKYSegAAAWQAAAAkaG10eHJO1ygAAAIIAAATiGxvY2EXM5zBAAAj4AAACcZtYXhwBxICWwAAAYgAAAAgbmFtZTlLZFAAAgegAAACrnBvc3T/YQBkAAIKUAAAACBwcmVwdKCP7AAAIrgAAADbAAEAAAACAAAcadIiXw889QAbCAAAAAAAxPARLgAAAADQ206M+jj91QlMCHMAAgAJAAIAAAAAAAAAAQAAB2z+DAAACRb6OP52CUwIAAGzAAAAAAAAAAAAAAAABOIAAQAABOIAkAAWAFYABQABAAAAAAAOAAACAAFzAAYAAQADBAsBkAAFAAAFmgUzAAABHwWaBTMAAAPRAGYCAAAAAgAAAAAAAAAAAOAACv9QACF/AAAAIQAAAABHT09HAAEAAP/9BgD+AABmB5oCACAAAZ8AAAAABDoFsAAgACAAAgOWAGQACgAAAAoAAAH2AAAB9gAAAgkAQwKFAMgE0QBSBGYASgW5ALsE3QA6AWQAqgKxAG0Cvf+PA2IAawRwAEwBkP+PAi4AGQIVADUDPf+PBGYAaARmAPkEZgAXBGYANARmAAUEZgByBGYAcARmAJ0EZgBBBGYAlAHrACsBrv+bA/wAQQRMAHAEGAA6A7QApQcCAEQFGv+vBN8AOwUXAHQFIQA7BHMAOwRUADsFUwB5BZIAOwImAEkEUgAKBOcAOwQ3ADsG0AA7BZIAOwVgAHcE7wA7BWAAbwTRADoEpQAnBKsAqAUSAGcE+gCkBuwAwwTn/9QEswCoBK//6wIZ//8DOQC/Ahn/egNIAE8Div+BAnAAzwRDADMEZQAfBBoARgRqAEsEJgBFArwAdARlAAQEUAAfAewALwHk/xQD+QAgAewALwbXAB4EUgAfBHcARQRl/9cEcwBJAqoAHwQKAC4CkwBDBFEAWwPMAG4F3wCAA+P/xAO2/6UD4//tAqoAOAHuACECqv+MBVEAaQHu//EESABSBIz/8wWSABIEvQBTAeb/9wTM/90DSADbBiMAYgOCAMMDrgBZBFYAgQYkAGEDmADjAvAA6AQvACUC4gBcAuIAbgJ5ANUEb//lA9UAewIQAKUB9v/IAuIA3wORAMADrQAPBbkAuQYPALQGEwCeA7b/0wdL/4QELQAoBWAAIASgADgEpwAeBpcAEwSWAFwEeABEBG8AOQSD/+AFeQA1AfUALgRbAC0EOAAiAiIAIwVqADUEbwAkB3AAVAcWAEcB9wAzBWcAUQKu/0kFXgBnBHkAQgVvAGcE1wBaAf7/CQQhAD4DsQEXA3wBJgOZAOMDWgEHAewBDgKiAQECI/+vA7MA3QLvAMICUv/pAAr9agAK/esACv0LAAr99QAK/NsB6vy7AgcBIQP2APMCEQClBFsAQwWD/7EFUQBpBSD/xAR4AAwFkwBEBHj/2gWZAFQFaACGBTMACgRsAEgEo//wA+0AhARvAEMEOQApBA8AggRvACQEdQBzAo0AhQRW/7cD2AA/BKkAYARv/9wENgBOBG8ASgQWAIcERQBnBYIAQQV5AE8GbgBmBIcAUQQrAGcGIgBmBdsAoQVFAHgIWf/MCGwAQwZaALQFkgBCBO4ANAXg/4sHFf+sBKUAJQWSAEMFiP/KBOoAkwYHAFsFtgBBBVoAzgdXAEIHjgBCBe0AiQbAAEUE6AA2BUUAdAb6AEkE+//oBFQARgR5ADADSwAtBLn/jQX7/6UD+wAhBIUALwQ7AC8Ehv/IBcsAMASEAC8EhQAvA8QAYAWqAEwEowAvBEIAewZQAC8GdQAkBNsAVgYQADAEQQAwBDYANAZfADAETP+/BFAAHwQ2AE4Gn//DBrkALwRwAB8EhQAvBtwAbwYGAE8EPwAuBv4ASQXUACwEt/+6BC//ogbfAFoF5wBOBqcAJgW+ACkIyQBIB58ALgQN/84Dx//KBVEAaQRyAEIE7QCtA+4AhAVRAGoEbwBEBtUAdAX/AFIG3ABvBgYATwUUAGYEMABNBOEAQAAK/OgACv0LAAr+FwAK/jsACvo4AAr6TwQ/AC4E/gA6BHD/1wRLADUDfwAkBMAAQwPwACQE7AA2BGYALQZkALsFYwB0B50AOgWSACQH/ABCBskAJAXKAHEEuABfBv8ArAU9AFcFTwDEBFIAmAVQAOwGCgCKBKMABwTsADUEQwAtBZAAQwRvACQFZwBRBI4APASO//wEnf/4Azr/6QTaADEGawAyBrkATAYvAK0FDQBoBDIArwPyAKAHj//fBk3/2gfIADsGeAAjBNoAagQHAEwFiwCaBQMAfQVFAGoDEgDyA/8AAAf0AAAD/wAAB/QAAAKuAAACBAAAAVwAAARmAAACKQAAAZ8AAADVAAAACgAAAi0AGQItABkFIgCnBhkAmQOU/18BlwCuAZcAiQGV/5gBlwDUAsgAtgLPAJUCtv+UBFEAdwR2//YCpwCgA7EAOQU7ADkA+QAaB3kAlwJeAF8CXgACA5H/7wLiAGEDUAB+BIz/8wYuAAoGaAA5CD8AOgc0ACIGBgAfBGYAUQW3AEMEDABJBFwACgUp//IFMP/lBcQAzAO7AEsIBQA1BOUA6gT6AIIGAQC1BqwAkgalAI8GQwC+BHYATQVtACQElf+sBHkAqwSqAEEIBQBNAgb/GgRpADEETABwA/z/1AQZABkD8wBBAkQAeAKFAHAB/v/jBNcAdARWAFgEcgB0BqoAdAaqAHQE0gB0BnIAKQAKAAAH/v+rCDUAXAQKAGIEhQBBAff/DwGP/70DkgETA4wBEgONARED4ADNA/kAzgPfACID2wDSA5IBEQH4APwEbP+lBDkAHQRkAEcEZwAdA9IAHQO4AB0EkgBMBMcAHQHjACoDvP/2BD0AHQOiAB0F3gAdBMcAHQShAEoERQAdBKEARQQzAB0ECgARBBAAbQRkAEUETwB6BfAAlQQ9/7YEFQB0BA3/3ALiAB0C4gBrAuL/6QLi//sC4v/wAuIAFgLiAB4C4gAvAuIACwLiADYDhACTAqoBCwQk/5oEqABLBS0AQwUHAEQD/gAlBR8ARAP6ACUECgASBB0ABgQlADQDnQAdBE//sAShAEoET/+wA3j/0wSzAB0D2//VBUgAUQT6AH4E1gAMBVIAbARkAEcHE//EByEAHQVUAG0EsgAdBEIAHwUH/4kF5/+vBCgAEQTQAB8ENwAeBKb/xAQJAFgFCgAdBFIAWgYqAB0GgwAdBQAAUAXNAB8ENwAfBGMAIAZOAB0Ebv/fA/z/+gYh/68EYQAeBOwAHgUZAGkFoABQBEcAdASO/7YGOgBsBFIAWgRSAB0FoQAvBK8AQQQoABEEoQBKBB3//wPPAB4H7gAdBJH/3QRlAB8EHABDBHoARwRzACQDaACpBHT/1wSDAEYEJgBFBGUANQVhAIEFjACEBXIARAW9AIUFwACFA8IAuwRpADkDnQAdBEH/gQS0/9MC4gCQAuIAYQLiAIkC4gCRAuIAogLiAH4C4gCpBFP/1QQYACsGewBJBJ8APwTkAGQCAP8JAf//CQH2AC4B9v96AfYALgH2//EEOQAdAfYAAAIuABkFPwAvBT8ALwRuAD0EqwCoApP/9AUa/68FGv+vBRr/rwUa/68FGv+vBRr/rwUa/68FFwB0BHMAOwRzADsEcwA7BHMAOwImAEkCJgBJAiYASQImAEkFkgA7BWAAdwVgAHcFYAB3BWAAdwVgAHcFEgBnBRIAZwUSAGcFEgBnBLMAqARDADMEQwAzBEMAMwRDADMEQwAzBEMAMwRDADMEGgBGBCYARQQmAEUEJgBFBCYARQH1AC4B9QAuAfUALgH1AC4EUgAfBHcARQR3AEUEdwBFBHcARQR3AEUEUQBbBFEAWwRRAFsEUQBbA7b/pQO2/6UFGv+vBEMAMwUa/68EQwAzBRr/rwRDADMFFwB0BBoARgUXAHQEGgBGBRcAdAQaAEYFFwB0BBoARgUhADsFAABLBHMAOwQmAEUEcwA7BCYARQRzADsEJgBFBHMAOwQmAEUEcwA7BCYARQVTAHkEZQAEBVMAeQRlAAQFUwB5BGUABAVTAHkEZQAEBZIAOwRQAB8CJgBJAfUAEQImAEkB9QAaAiYASQH1AC4CJv+OAez/cAImAEkGeABJA9AALwRSAAoB/v8JBOcAOwP5ACAENwA7AewALwQ3ADsB7P+jBDcAOwKCAC8ENwA7AsgALwWSADsEUgAfBZIAOwRSAB8FkgA7BFIAHwRSAB8FYAB3BHcARQVgAHcEdwBFBWAAdwR3AEUE0QA6AqoAHwTRADoCqv+fBNEAOgKqAB8EpQAnBAoALgSlACcECgAuBKUAJwQKAC4EpQAnBAoALgSlACcECgAuBKsAqAKTAEMEqwCoApMAQwSrAKgCuwBDBRIAZwRRAFsFEgBnBFEAWwUSAGcEUQBbBRIAZwRRAFsFEgBnBFEAWwUSAGcEUQBbBuwAwwXfAIAEswCoA7b/pQSzAKgEr//rA+P/7QSv/+sD4//tBK//6wPj/+0HS/+EBpcAEwVgACAEbwA5BGf/sARn/7AEEABtBGz/pQRs/6UEbP+lBGz/pQRs/6UEbP+lBGz/pQRkAEcD0gAdA9IAHQPSAB0D0gAdAeMAKgHjACoB4wAqAeMAKgTHAB0EoQBKBKEASgShAEoEoQBKBKEASgRkAEUEZABFBGQARQRkAEUEFQB0BGz/pQRs/6UEbP+lBGQARwRkAEcEZABHBGQARwRnAB0D0gAdA9IAHQPSAB0D0gAdA9IAHQSSAEwEkgBMBJIATASSAEwExwAdAeMADwHjABgB4wAqAeP/egHjACoDvP/2BD0AHQOiAB0DogAdA6IAHQOiAB0ExwAdBMcAHQTHAB0EoQBKBKEASgShAEoEMwAdBDMAHQQzAB0ECgARBAoAEQQKABEECgARBBAAbQQQAG0EEABtBGQARQRkAEUEZABFBGQARQRkAEUEZABFBfAAlQQVAHQEFQB0BA3/3AQN/9wEDf/cBRr/rwTXAGMF9gBxAooAdwV0AGoFF//uBUcAHgKNACAFGv+vBN8AOwRzADsEr//rBZIAOwImAEkE5wA7BtAAOwWSADsFYAB3BO8AOwSrAKgEswCoBOf/1AImAEkEswCoBGwASAQ5ACkEbwAkAo0AhQRFAGcEWwAtBHcARQRv/+UDzABuA+P/xAKNAGcERQBnBHcARQRFAGcGbgBmBHMAOwRbAEMEpQAnAiYASQImAEkEUgAKBQcARATnADsE6gCTBRr/rwTfADsEWwBDBHMAOwWSAEMG0AA7BZIAOwVgAHcFkwBEBO8AOwUXAHQEqwCoBOf/1ARDADMEJgBFBIUALwR3AEUEZf/XBBoARgO2/6UD4//EBCYARQNLAC0ECgAuAewALwH1AC4B5P8UBDsALwO2/6UG7ADDBd8AgAbsAMMF3wCABuwAwwXfAIAEswCoA7b/pQFkAKoChQDIBBIAQwH+/wkBlwCJBtAAOwbXAB4FGv+vBEMAMwRzADsFkgBDBCYARQSFAC8FaACGBXkATwTtAK0D7gCECC0ARQkWAHcEpQAlA/sAIQUXAHQEGgBGBLMAqAPtAIQCJgBJBxX/rAX7/6UCJgBJBRr/rwRDADMFGv+vBEMAMwdL/4QGlwATBHMAOwQmAEUFZwBRBCEAPgQhAD4HFf+sBfv/pQSlACUD+wAhBZIAQwSFAC8FkgBDBIUALwVgAHcEdwBFBVEAaQRyAEIFUQBpBHIAQgVFAHQENgA0BOoAkwO2/6UE6gCTA7b/pQTqAJMDtv+lBVoAzgRCAHsGwABFBhAAMATn/9QD4//EBGoASwWI/8oEhv/IBRr/rwRDADMFGv+vBEMAMwUa/68EQwAzBRr/rwRDADMFGv+vBEMAMwUa/68EQwAzBRr/rwRDADMFGv+vBEMAMwUa/68EQwAzBRr/rwRDADMFGv+vBEMAMwUa/68EQwAzBHMAOwQmAEUEcwA7BCYARQRzADsEJgBFBHMAOwQmAEUEcwA7BCYARQRzADsEJgBFBHMAOwQmAEUEcwA7BCYARQImAEkB9QAuAiYADgHs//EFYAB3BHcARQVgAHcEdwBFBWAAdwR3AEUFYAB3BHcARQVgAHcEdwBFBWAAdwR3AEUFYAB3BHcARQVeAGcEeQBCBV4AZwR5AEIFXgBnBHkAQgVeAGcEeQBCBV4AZwR5AEIFEgBnBFEAWwUSAGcEUQBbBW8AZwTXAFoFbwBnBNcAWgVvAGcE1wBaBW8AZwTXAFoFbwBnBNcAWgSzAKgDtv+lBLMAqAO2/6UEswCoA7b/pQSIAEsEiAAABQcARAQ7AC8FkgA7BIQALwSrAKgDxABgBOf/1APj/8QFWgDOBEIAewVaAM4EQgB7BFsAQwNLAC0HFf+sBfv/pQYKAIoEowAHBFAAHwToACsE6AArBFsAEANL/+YFGwBYBBIAOQWSAEMEhQAvBZIAOwSEAC8G0AA7BcsAMAWI/8oEhv/IBLMAqAPtAF0E5//UA+P/xAQ5ACkEVP/XBhkAmQRmABcEZgA0BGYABQRmAHIEegCUBI4AfAVTAHkEZQAEBZIAOwRSAB8FGv+vBEMAMwRzADsEJgBFAib/3wH1/40FYAB3BHcARQTRADoCqgAfBRIAZwRRAFsEj/+yBN8AOwRlAB8FIQA7BGoASwUhADsEagBLBZIAOwRQAB8E5wA7A/kAIATnADsD+QAgBDcAOwHs//IG0AA7BtcAHgWSADsEUgAfBO8AOwRl/9cE0QA6Aqr/7gSlACcECgAuBKsAqAKTAEME+gCkA8wAbgT6AKQDzABuBuwAwwXfAIAEr//rA+P/7QWm/wwEbP+lBA7/4QUD//0CHwABBKsAHQRR/5sE4AAWBGz/pQQ5AB0D0gAdBA3/3ATHAB0B4wAqBD0AHQXeAB0EoQBKBEUAHQQQAG0EFQB0BD3/tgHjACoEFQB0A9IAHQOdAB0ECgARAeMAKgHjACoDvP/2BD0AHQQJAFgEbP+lBDkAHQOdAB0D0gAdBNAAHwXeAB0ExwAdBKEASgSzAB0ERQAdBGQARwQQAG0EPf+2BCgAEQTHAB0EZABIBBUAdAWhAC8E0AAfBAkAWAVIAFEFGv+vBEMAMwRzADsEJgBFAAAAAQAABOQJCgQAAAICAgMFBQYFAgMDBAUCAgIEBQUFBQUFBQUFBQICBAUFBAgGBQYGBQUGBgIFBgUIBgYGBgUFBQYGCAYFBQIEAgQEAwUFBQUFAwUFAgIEAggFBQUFAwUDBQQHBAQEAwIDBgIFBQYFAgUEBwQEBQcEAwUDAwMFBAICAwQEBgcHBAgFBgUFBwUFBQUGAgUFAgYFCAgCBgMGBQYFAgUEBAQEAgMCBAMDAAAAAAACAgQCBQYGBgUGBQYGBgUFBAUFBQUFAwUEBQUFBQUFBgYHBQUHBwYJCQcGBgcIBQYGBgcGBggJBwgGBggGBQUEBQcEBQUFBwUFBAYFBQcHBQcFBQcFBQUHCAUFCAcFCAcFBQgHBwYKCQUEBgUGBAYFCAcIBwYFBQAAAAAAAAUGBQUEBQQGBQcGCQYJCAcFCAYGBQYHBQYFBgUGBQUFBAUHCAcGBQQJBwkHBQUGBgYDBQkFCQMCAgUCAgEAAgIGBwQCAgICAwMDBQUDBAYBCAMDBAMEBQcHCQgHBQYFBQYGBgQJBgYHCAcHBQYFBQUJAgUFBAUEAwMCBQUFCAgFBwAJCQUFAgIEBAQEBAQEBAIFBQUFBAQFBQIEBQQHBQUFBQUFBQUFBwUFBQMDAwMDAwMDAwMEAwUFBgYEBgQFBQUEBQUFBAUEBgYFBgUICAYFBQYHBQUFBQUGBQcHBgcFBQcFBAcFBgYGBQUHBQUGBQUFBQQJBQUFBQUEBQUFBQYGBgYGBAUEBQUDAwMDAwMDBQUHBQYCAgICAgIFAgIGBgUFAwYGBgYGBgYGBQUFBQICAgIGBgYGBgYGBgYGBQUFBQUFBQUFBQUFBQICAgIFBQUFBQUFBQUFBAQGBQYFBgUGBQYFBgUGBQYGBQUFBQUFBQUFBQYFBgUGBQYFBgUCAgICAgICAgIHBAUCBgQFAgUCBQMFAwYFBgUGBQUGBQYFBgUFAwUDBQMFBQUFBQUFBQUFBQMFAwUDBgUGBQYFBgUGBQYFCAcFBAUFBAUEBQQIBwYFBQUFBQUF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c3dzd3N/c4dzkXObc7Jz0XPvdA50LnQ6dEZ0d3S4dR11QnVOdV51cnZGdmJ2f3aSdqZ273d6eBx4qXi1eXh503pZewR7ZnvpfEd8uH1dfcl+W368fyR/Pn9Yf3J/jH//gCeAYYB9gLKBO4GBgfiCOYJHglWCjoKbgsKC24Lng0qDo4Q3hMKFQ4YXhheHlIfxiCKIgIiviMWJKIl6ibqKLIqFisWLCItIi2KLqIwejHqMx40TjU+Nto4EjiKOWI6cjsSPFo9Uj7OQA5BhkLWRI5FPkYuRvpISkleSi5LIkxuTRpOVlAaUSJSolQiVNZW+liCWN5aBlz6XuZgtmHyYwpkEmUyZzJo4mq+a2psQm4ibuZwHnDqcepzunVCdu54enoyfA597n9KgDaBpoMGhN6G8ofqiS6KUotijE6Nbo5uj5aRApEyknaURpZyl+aZIptCnM6eYp/iooqiuqQGpTamiqeuqZarSqzerq6xHrM6tb63irk+uqK8Tr5yvpLAQsH6w6bFysdWyQLKSsvSzWrOFs9q0BLRdtKG0tbTJtNu077UBtRi1LLWOtba2RLa0tw23FbcdtyW3MLc4t0S3sLewt7i4KLiYuPq5QLmoub+51rntugS6HLovuju6R7peunC6h7qaurG6w7rauu27BLsbuy27RLtbu267hbuXu667wbvTu+q7/LwSvCO8NrxJvFW8Ybx4vIq8oLyzvMm82rzxvQm9Gr0xvUO9Wb1qvX29lL2mvby9z73hvfO+Cr4gvje+Sb62v2S/dr+Iv5q/q7+9v8+/4b/ywATAEMAiwDPARcBXwGnAe8DvwX3Bj8GgwbLBw8HVwefB+cILwhfCKcI7wk/CYcJzwoXCl8KpwrvCxsLRwuPC78L7ww3DH8MrwzfDScNbw2fDc8OIw5TDoMOsw77D0MPcw+jD+sQLxBfEKcQ6xEzEXsRxxITElsSoxLTEwMTSxOPE9cUHxRnFKsU2xULFTsVaxWzFfcWJxZXFocWtxb/Fy8Xdxe7GAMYRxiPGNcZIxlvGbsaBxuLHUcdjx3XHh8eYx6vHvcfPx+HH88gFyBbILchEyFvIcsiVyLjIyMjfyPHJB8kYySvJPslKyVbJbcl/yZDJosm4ycnJ28nuygDKF8opyjvKTcpgynfKicqayq3Kv8rQyuLLSctby2zLfsuQy6HLssvDy9XMT8xg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AdMAAAEHAKEBFwAeAAkAsAcvsBPcMDEA////3AAABA4GIAImAdMAAAEGAJ5VHwAJALAHL7AO3DAxAP///68AAASLBj8CJgAlAAAABgCtBAD//wBjAAAFFQY/ACYAKWQAAAcArf9CAAD//wBxAAAF2wZBACYALGQAAAcArf9QAAL//wB3AAACZQZAACYALWQAAAcArf9WAAH//wBq/+cFIQY/ACYAMxQAAAcArf9JAAD////uAAAFlgY/ACYAPWQAAAcArf7NAAD//wAeAAAE7gY/ACYAuRQAAAcArf9MAAD//wAg//QDGwZ0AiYAwgAAAQcArv8t/+wAHACwAEVYsA4vG7EOGD5ZsBvcsBHQsBsQsCTQMDH///+vAAAEiwWwAgYAJQAA//8AOwAABKAFsAIGACYAAP//ADsAAASxBbACBgApAAD////rAAAEzgWwAgYAPgAA//8AOwAABXcFsAIGACwAAP//AEkAAAIBBbACBgAtAAD//wA7AAAFUAWwAgYALwAA//8AOwAABrcFsAIGADEAAP//ADsAAAV3BbACBgAyAAD//wB3/+cFDQXIAgYAMwAA//8AOwAABPMFsAIGADQAAP//AKgAAAUJBbACBgA4AAD//wCoAAAFMgWwAgYAPQAA////1AAABSsFsAIGADwAAP//AEkAAAMKBwkCJgAtAAABBwBq/7gBQgAMALACL7AZ3LAE0DAx//8AqAAABTIG/QImAD0AAAEHAGoA/QE2AAwAsAEvsB7csAnQMDH//wBI/+cEMgY6AiYAugAAAQcArQFo//sACQCwFS+wKNwwMQD//wAp/+cD5QY5AiYAvgAAAQcArQEh//oACQCwGi+wK9wwMQD//wAk/mED8wY6AiYAwAAAAQcArQE7//sACQCwAy+wFdwwMQD//wCF//QCZQYlAiYAwgAAAQYArSTmAAkAsAAvsBHcMDEA//8AZ//lBAoGdAImAMoAAAEGAK4c7AASALALL7Ar3LAW0LArELAa0DAx//8ALQAABFcEOgIGAI0AAP//AEX/6AQfBFICBgBTAAD////l/mAEJQQ6AgYAdgAA//8AbgAAA+0EOgIGAFoAAP///8QAAAP0BDoCBgBcAAD//wBn//QC3gWzAiYAwgAAAQYAaozsAAwAsAAvsCTcsA/QMDH//wBn/+UD+gWzAiYAygAAAQYAanvs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3LAi0DAx//8Ak//mBUAG+gImAN0AAAEHAHAA7AFKAAkAsAEvsBHcMDEA////pf5FA+wFuAImAF0AAAEGAHAvCAAJALABL7AQ3DAxAP//AJP/5gVABwkCJgDdAAABBwBqARsBQgAMALABL7Am3LAR0DAx////pf5FA+wFxwImAF0AAAEGAGpeAAAMALABL7Al3LAQ0DAx//8Ak//mBUAHQQImAN0AAAEHAKUBXQFCABYAsABFWLABLxuxARw+WbAT3LAX0DAx////pf5FBF4F/wImAF0AAAEHAKUAoAAAABYAsABFWLABLxuxARg+WbAS3LAW0DAx//8AzgAABUQHCQImAOAAAAEHAGoBRAFCABYAsABFWLASLxuxEhw+WbAo3LAc0DAx//8AewAABAAFswImAPgAAAEGAGpp7AAMALAIL7Ao3LAT0DAx//8ARQAABpYHCQAmAOUPAAAnAC0ElQAAAQcAagIIAUIAFgCwAEVYsAovG7EKHD5ZsCHcsC3QMDH//wAwAAAFqQWzACYA/QAAACcAjAQKAAABBwBqAWr/7AAWALAARViwCi8bsQoYPlmwIdywLdAwMf///9T+RQUrBbACJgA8AAAABwGvA5UAAP///8T+RQP0BDoCJgBcAAAABwGvAqoAAP//AEv/6AR1BgACBgBIAAD////K/kUFZQWwAiYA3AAAAAcBrwQkAAD////I/kUESgQ6AiYA8QAAAAcBrwM7AAD///+v/p8EiwWwAiYAJQAAAAcArATcAAD//wAz/p8DzwRRAiYARQAAAAcArAQpAAD///+vAAAEiwe5AiYAJQAAAQcAqgUBAUYACQCwBC+wGNwwMQD//wAz/+gDzwaDAiYARQAAAQcAqgRzABAACQCwGC+wOdwwMQD///+vAAAF7QfDAiYAJQAAAQcBtwDyAS4AFgCwAEVYsAUvG7EFHD5ZsA7csBTQMDH//wAz/+gFXwaOAiYARQAAAQYBt2T5ABYAsABFWLAYLxuxGBg+WbAv3LA10DAx////rwAABIsHvwImACUAAAEHAbYA+AE9ABYAsABFWLAFLxuxBRw+WbAM3LAT0DAx//8AM//oA/0GiQImAEUAAAEGAbZqBwAWALAARViwGC8bsRgYPlmwL9ywNNAwMf///68AAAVsB+oCJgAlAAABBwG1APMBGwAWALAARViwBS8bsQUc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ALAARViwBC8bsQQcPlmwDNywENAwMf//ADP/6APPBesCJgBFAAABBwCrA/L//QAWALAARViwGC8bsRgYPlmwLdywMdAwMf//ADsAAASxBywCJgApAAABBwCrBE4BPgAWALAARViwBi8bsQYcPlmwDdywEdAwMf//AEX/6gPgBesCJgBJAAABBwCrA9f//QAWALAARViwCC8bsQgYPlmwIdywJdAwMf///98AAAKKBywCJgAtAAABBwCrAwQBPgAWALAARViwAi8bsQIcPlmwBdywCdAwMf///40AAAI4BekCJgCMAAABBwCrArL/+wAWALAARViwAi8bsQIYPlmwBdywCdAwMf//AHf/5wUNByICJgAzAAABBwCrBKEBNAAWALAARViwCi8bsQocPlmwJNywKNAwMf//AEX/6AQfBesCJgBTAAABBwCrA+D//QAWALAARViwAC8bsQAYPlmwJNywKNAwMf//ADoAAATCByACJgA2AAABBwCrBEMBMgAWALAARViwBC8bsQQcPlmwGdywHdAwMf//AB8AAALUBesCJgBWAAABBwCrA0n//QAWALAARViwCi8bsQoYPlmwEtywDdAwMf//AGf/5wUgByACJgA5AAABBwCrBHsBMgAWALAARViwCi8bsQocPlmwFNywGNAwMf//AFv/6AQeBesCJgBZAAABBwCrA+T//QAWALAARViwBy8bsQcYPlmwFdywGdAwMf///7IAAAU8Bj8AJgDPZAAABwCt/pEAAP//ADv+qQSgBbACJgAmAAAABwCsBJgACv//AB/+lgP+BgACJgBGAAAABwCsBIb/9///ADv+qQTVBbACJgAoAAAABwCsBJcACv//AEv+nwR1BgACJgBIAAAABwCsBJkAAP//ADv+CQTVBbACJgAoAAAABwGiAR/+qv//AEv9/wR1BgACJgBIAAAABwGiASH+oP//ADv+qQV3BbACJgAsAAAABwCsBPoACv//AB/+qQPjBgACJgBMAAAABwCsBH8ACv//ADsAAAVQBy4CJgAvAAABBwB1AbABMAATALAARViwBS8bsQUcPlmwDtwwMQD//wAgAAAEIgc/AiYATwAAAQcAdQF9AUEACQCwBS+wD9wwMQD//wA7/vgFUAWwAiYALwAAAAcArATSAFn//wAg/uUEGgYAAiYATwAAAAcArARQAEb//wA7/qkDsQWwAiYAMAAAAAcArASdAAr////y/qkB7gYAAiYAUAAAAAcArAM3AAr//wA7/qkGtwWwAiYAMQAAAAcArAWnAAr//wAe/qkGagRSAiYAUQAAAAcArAWrAAr//wA7/qkFdwWwAiYAMgAAAAcArAT+AAr//wAf/qkD4wRSAiYAUgAAAAcArARmAAr//wA7AAAE8wdAAiYANAAAAQcAdQG0AUIAEwCwAEVYsAMvG7EDHD5ZsBbcMDEA////1/5gBDYF9QImAFQAAAEHAHUBkf/3ABMAsABFWLANLxuxDRg+WbAh3DAxAP//ADr+qQTCBbACJgA2AAAABwCsBJUACv///+7+qQLUBFQCJgBWAAAABwCsAzMACv//ACf+nwSjBccCJgA3AAAABwCsBKQAAP//AC7+lwO2BFACJgBXAAAABwCsBG3/+P//AKj+nwUJBbACJgA4AAAABwCsBJYAAP//AEP+nwKUBUACJgBYAAAABwCsA/oAAP//AKQAAAVhBy0CJgA6AAABBwCkAOEBRgATALAARViwAS8bsQEcPlmwCtwwMQD//wBuAAAD7QXiAiYAWgAAAQYApBv7ABMAsABFWLABLxuxARg+WbAK3DAxAP//AKT+qQVhBbACJgA6AAAABwCsBMoACv//AG7+qQPtBDoCJgBaAAAABwCsBDgACv//AMP+qQdBBbACJgA7AAAABwCsBc0ACv//AID+qQX+BDoCJgBbAAAABwCsBSwACv///+v+qQTOBbACJgA+AAAABwCsBJgACv///+3+qQPOBDoCJgBeAAAABwCsBEIACv///wz/5wVTBdYAJgAzRgAABwFa/hoAAP///6UAAAPjBRwCJgG6AAAABwCt/6v+3f///+EAAAQrBR8AJgG+PAAABwCt/sD+4P////0AAATWBRwAJgHBPAAABwCt/tz+3f//AAEAAAHmBR4AJgHCPAAABwCt/uD+3///AB3/6gRYBRwAJgHICgAABwCt/vz+3f///5sAAAShBRwAJgHSPAAABwCt/nr+3f//ABYAAAR0BRsAJgHzCgAABwCt/xT+3P///6UAAAPjBI0CBgG6AAD//wAdAAAD5wSNAgYBuwAA//8AHQAAA+8EjQIGAb4AAP///9wAAAQOBI0CBgHTAAD//wAdAAAEmgSNAgYBwQAA//8AKgAAAaoEjQIGAcIAAP//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DAAGiA7uDu4MRg6gCiIO7g7uD5oKigaSDGYMRgrYCqwNUg8QCl4L4gsQDBYGmA22DbYNtgwgCxAKUAxMDbAMTAsQBqYN5gtwD5oLcAasBrIGvAbCBsgMTAbOBtgNtgb+BxQHKgcwB0YHTAdSB4QHigeQDcANwAe+Du4H4AgCDVIIMA7uDu4LJg7uDu4IRg3ADcAIeAiCCIwIpg1ICLgNsAjSCOgLEAkyCUwJaAloCxAJYgloCWgJaAtwDCAK2AxMCxAN5g1IDqAOoA1ICtIK0grSCtIK0gmKCbAJugnECeIJ9AoGChgK/g+aD5oPmg+aDGYLcAtwC3ALcAtwC3ALcAr+DAAMAAwADAAO7g7uDu4O7g7uD5oPmg+aD5oPmgxGDEYMRgxGDxAL4gviC+IL4gviC+IL4gwWDBYMFgwWDbYMIAwgDCAMIAwgDEwMTAtwC+ILcAviC3AL4gr+Cv4K/gr+D5oMAAwWDAAMFgwADBYMAAwWDAAMFg7uDbYO7g7uDu4O7g7uDEYOoAoiCiIKIgoiDu4Ntg7uDbYO7g22DbYPmgwgD5oMIA+aDCAKUApQClAMZgxmDGYMRgxGDEYMRgxGDEYKrA8QDEwPEApeCl4KXgtwDAAO7g7uD5oPEAtwCoAMAApeDu4O7g6gDu4O7g+aCooMZg8QDVIO7g8QDbYMIAxMDCAMAA3mDu4O7gxGDqAOoAsmC3AKgA3mDAAO7g7uD5oKigr+DGYNUgviDBYMIAsQDEwNsAwWDUgMTAqsCqwKrA8QDEwK0grSCtIO7g22C3AL4gwADBYK2AxMCv4PEAxMDu4NUg2wDu4LcAviC3AL4gwADBYMFgwWDVINsA+aDCAMIAsQCyYMTAsmDEwLJgxMDVINsAtwC+ILcAviC3AL4gtwC+ILcAviC3AL4gtwC+ILcAviC3AL4gtwC+ILcAviC3AL4gwADBYMAAwWDAAMFgwADBYMAAwWDAAMFgwADBYMAAwWDu4O7g+aDCAPmgwgD5oMIA+aDCAPmgwgD5oMIA+aDCAMIAxGDEYPEAxMDxAMTA8QDEwOoA7uDGYNUg2wDeYNSA1SDbANtg3ADeYOoA7uDu4PEA+aAAIAhwAGAAYAAAALAAsAAQATABMAAgAlACoAAwAsADUACQA4AD4AEwBFAEYAGgBJAEoAHABMAEwAHgBRAFQAHwBWAFYAIwBaAFoAJABcAF0AJQCKAIoAJwCcAJwAKACwALQAKQC2ALgALgC6ALoAMQC8AL0AMgC/AMAANADCAMQANgDGAMsAOQDRANEAPwDTAN0AQADfAN8ASwDhAOMATADlAOcATwDpAO0AUgDwAPAAVwD1APcAWAD6APsAWwD9AP8AXQEDAQQAYAEJAQkAYgEMAQwAYwEXARkAZAErAS0AZwEwATAAagEyATIAawFJAUkAbAFsAW0AbQFvAXEAbwG6AboAcgG9Ab0AcwHEAcUAdAHIAcgAdgHKAcsAdwHNAc0AeQIoAigAegIqAisAewJHAkgAfQJKAkoAfwJMAm0AgAJvAnIAogJ3AnwApgKBAokArAKLAosAtQKNAo0AtgKPAo8AtwKRApEAuAKTApwAuQKlAqcAwwKpAqkAxgKrAqsAxwKtAq0AyAKvAq8AyQKyArIAygK0ArQAywK2ArYAzAK4ArgAzQK6AroAzgK8ArwAzwK+AsoA0ALMAswA3QLOAs4A3gLQAtAA3wLbAtsA4ALdAt0A4QLfAt8A4gLhAuEA4wLjAuMA5ALlAuUA5QLnAucA5gLpAukA5wLrAusA6ALtAu0A6QLvAvIA6gL0AvQA7gL2AvYA7wNTA1gA8ANbA2oA9gNtA20BBgNxA3EBBwNzA3MBCAN3A3cBCQN6A3sBCgN9A4YBDAOIA4oBFgOMA5EBGQOTA5QBHwOWA5kBIQOfA6ABJQOiA6IBJwOkA6QBKAOmA6kBKQOsA7EBLQOzA7MBMwO3A7gBNAO9A70BNgO/A8gBNwPLA8wBQQPOA9EBQwPYA9kBRwPdA90BSQPfA+UBSgPqA+sBUQPvBBcBUwQZBBkBfAQbBCgBfQQwBDABiwQzBDMBjAQ1BDUBjQRBBEYBjgRJBEkBlARLBEsBlQRNBE0BlgRPBFABlwRVBFgBmQRbBFsBnQRdBF4BngRgBGABoARkBGQBoQRmBGYBogRqBGoBowSqBKoBpAABABP/IAACAFb/5gG6/8AAAQG6AA4AAwANABQAQQASAGEAEwABAPX/9QABAMMADQACALf/wgDDABAAAQDD/+IAAQDG//IAAQDDAA4AAgDJ/+0A9f/AAAkAvv/mAMH/6wDC/+kAxP/wAMX/5wDJ/+MAy//OAMz/1ADN/9sABQDB/+wAwwAPAMX/6gDJ/8QAy//nAAUASv/pAMH/7gDD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Aor/6wKM/+sCjv/rApD/6wKS/+sClP/rApb/6wKY/+sCmv/rApz/6wKe/+sCoP/rAqL/6wKk/+sCsv74Asb/6wLI/+sCyv/rAtsAFALdABQC3wAUAuL/6gLk/+oC5v/qAuj/6gLq/+oC7P/qAvD/6ANT/1YDW/9WA2v/6wNv/+oDcf/rA3P/6AN2/+oDd//rA3j/6gN//vgDg/9WA44AFAOQ/94Dkf/rA5P/6wOV/+sDlv/oA5j/6wOf/+gDp//oA6//VgOw/94Ds//rA7j/6AO5/+sDvv/rA8D/6APF/1YDxv/eA8f/VgPI/94DzP/rA87/6wPP/+sD2f/rA9v/6wPd/+sD4f/oA+P/6APl/+gD7P/rA+//VgPw/94D8f9WA/L/3gPz/1YD9P/eA/X/VgP2/94D9/9WA/j/3gP5/1YD+v/eA/v/VgP8/94D/f9WA/7/3gP//1YEAP/eBAH/VgQC/94EA/9WBAT/3gQF/1YEBv/eBAj/6wQK/+sEDP/rBA7/6wQQ/+sEEv/rBBT/6wQW/+sEHP/rBB7/6wQg/+sEIv/rBCT/6wQm/+sEKP/rBCr/6wQs/+sELv/rBDD/6wQy/+sENP/qBDb/6gQ4/+oEOv/qBDz/6gQ+/+oEQP/qBEL/6ARE/+gERv/oBE0AFAAfADj/1QA6/+QAO//sAD3/3QDR/9UA1f/VARj/5AEy/9UBOv/VAmb/3QLb/9UC3f/VAt//1QLt/+wC7//dAvH/3QNY/90DZ//dA2r/3QOO/9UDoP/sA6L/7AOk/+wDpv/dA7f/5AO//90EQf/dBEP/3QRF/90ETf/VBGr/3QAaADj/sAA6/+0APf/QANH/sADV/7ABGP/tATL/sAE6/7ACZv/QAtv/sALd/7AC3/+wAu//0ALx/9ADWP/QA2f/0ANq/9ADjv+wA6b/0AO3/+0Dv//QBEH/0ARD/9AERf/QBE3/sARq/9AAEAAu/+4AOf/uAmL/7gJj/+4CZP/uAmX/7gKy/+4C4f/uAuP/7gLl/+4C5//uAun/7gLr/+4Df//uBDP/7gQ1/+4ARwAGABAACwAQAEf/6ABI/+gASf/oAEv/6ABV/+gAk//oAJj/6AC6/+gAx//oAMj/6AD2/+gBAv/oAR3/6AEh/+gBOf/oAUv/6AFM/+gBVv/oAWwAEAFtABABbwAQAXAAEAFxABACbv/o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/90AWv/hAF3/4QCT/9wAmP/cAJr/3QC6/9wAvP/hAMD/8wDH/9wAyP/cAMr/3QDr//MA7//zAPD/8wDy//MA8//zAPT/8wD2/9wA9//zAPn/8wD6//MA/f/zAP//8wEC/9wBBP/zARf/1gEZ/+EBHf/cASH/3AE1//MBOf/cAUT/8wFJ//MBS//cAUz/3AFW/9wCbv/cAm//3AJw/9wCcf/cAnL/3AJ3//MCeP/WAnn/1gJ6/9YCe//WAnz/1gJ9/90Cfv/dAn//3QKA/90Cgf/hAoL/4QKK/9wCjP/cAo7/3AKQ/9wCkv/cApT/3AKW/9wCmP/cApr/3AKc/9wCnv/cAqD/3AKi/9wCpP/cAr//8wLB//MCw//zAsT/8wLG/9YCyP/WAsr/1gLi/90C5P/dAub/3QLo/90C6v/dAuz/3QLw/+EDa//cA23/8wNv/90Dcf/WA3P/4QN2/90Dd//WA3j/3QOR/9wDkv/zA5P/1gOU//MDlf/cA5b/4QOY/9wDmf/zA57/8wOf/+EDp//hA67/8wOz/9wDtP/zA7j/4QO5/9wDvv/cA8D/4QPM/9wDzv/cA8//3APV//MD1//zA9n/1gPb/9wD3f/WA+H/4QPj/+ED5f/hA+n/8wPs/9wECP/cBAr/3AQM/9wEDv/cBBD/3AQS/9wEFP/cBBb/3AQc/9YEHv/WBCD/1gQi/9YEJP/WBCb/1gQo/9YEKv/cBCz/3AQu/9wEMP/WBDL/3AQ0/90ENv/dBDj/3QQ6/90EPP/dBD7/3QRA/90EQv/hBET/4QRG/+EESv/zBEz/8wRW//MEY//zBGX/8wRn//MAcQAG/9oAC//aAEf/8ABI//AASf/wAEv/8ABV//AAWf/vAFr/3ABd/9wAk//wAJj/8ACa/+8Auv/wALz/3ADH//AAyP/wAMr/7wD2//ABAv/wARn/3AEd//ABIf/wATn/8AFL//ABTP/wAVb/8AFs/9oBbf/aAW//2gFw/9oBcf/aAm7/8AJv//ACcP/wAnH/8AJy//ACff/vAn7/7wJ//+8CgP/vAoH/3AKC/9wCiv/wAoz/8AKO//ACkP/wApL/8AKU//AClv/wApj/8AKa//ACnP/wAp7/8AKg//ACov/wAqT/8ALi/+8C5P/vAub/7wLo/+8C6v/vAuz/7wLw/9wDa//wA2//7wNz/9wDdv/v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//UA1f/xANn/9ADc//UA3f/zARj/9AEy//EBOv/xAVH/9QJm//AC2//xAt3/8QLf//EC7//wAvH/8ANY//ADZ//wA2j/9ANq//ADgv/zA47/8QOP//QDpv/wA7f/9AO///ADwv/0A9D/9APg//MD4v/zA+T/8wPq//QD7f/1BEH/8ARD//AERf/wBE3/8QRP//QEV//0BGj/9QRq//AAWQAlAA8AOP/mADr/5gA8AA4APf/mALEADwCzAA8A0f/mANMADgDV/+YA2QAOANwADgDdAAsA4P/lAPEADwD4/+gBAwAPAQwADwEY/+YBMv/mATr/5gFRAA4CTAAPAk0ADwJOAA8CTwAPAlAADwJRAA8CUgAPAmb/5gKDAA8ChQAPAocADwLb/+YC3f/mAt//5gLv/+YC8f/mA1MADwNY/+YDWwAPA2f/5gNoAA4Dav/mA4IACwODAA8Djv/mA48ADgOm/+YDrwAPA7f/5gO//+YDwgAOA8UADwPHAA8D0AAOA+AACwPiAAsD5AALA+b/5QPn/+gD6gAOA+0ADgPuAA8D7wAPA/EADwPzAA8D9QAPA/cADwP5AA8D+wAPA/0ADwP/AA8EAQAPBAMADwQFAA8EQf/mBEP/5gRF/+YETf/mBE8ADgRR/+UEUv/oBFP/5QRU/+gEVwAOBGgADgRpAA8Eav/mAC4AOP/jADz/5QA9/+QA0f/jANP/5QDV/+MA2f/lANz/5QDd/+kA8f/qAQP/6gEy/+MBOv/jAVH/5QJm/+QC2//jAt3/4wLf/+MC7//kAvH/5ANY/+QDZ//kA2j/5QNq/+QDgv/pA47/4wOP/+UDpv/kA7//5APC/+UD0P/lA+D/6QPi/+kD5P/pA+r/5QPt/+UD7v/qBEH/5ARD/+QERf/kBE3/4wRP/+UEV//lBGj/5QRp/+oEav/kACEAOP/iADz/5ADR/+IA0//kANX/4gDZ/+QA3P/kAN3/6QDx/+sBA//rATL/4gE6/+IBUf/kAtv/4gLd/+IC3//iA2j/5AOC/+kDjv/iA4//5APC/+QD0P/kA+D/6QPi/+kD5P/pA+r/5APt/+QD7v/rBE3/4gRP/+QEV//kBGj/5ARp/+sAFwA4/+sAPf/zANH/6wDV/+sBMv/rATr/6wJm//MC2//rAt3/6wLf/+sC7//zAvH/8wNY//MDZ//zA2r/8wOO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ABgEJwQnAAMEKAQoABgEMAQwABgEMwQzAAwENQQ1AAwEQQRBAA8EQgRCABkEQwRDAA8ERAREABkERQRFAA8ERgRGABkESQRJAAkESwRLAAIETQRNAAYETwRPAA4EUARQABsEVQRVAAcEVgRWAAgEVwRXAA4EWARYABsEWwRbABcEXQRdAB8EXgReAAcEYARgAAkEZARkAAIEZgRmAAIEagRqAA8EqgSqAAMAAgFtAAYABgAHAAsACwAHABAAEAATABEAEQAXABIAEgATACUAJQARACcAJwAFACsAKwAFAC4ALgAcADMAMwAFADUANQAFADcANwAZADgAOAAKADkAOQAGADoAOgANADsAOwAJADwAPAASAD0APQAOAD4APgAUAEUARQAaAEcASQAVAEsASwAVAFEAUgAYAFMAUwAIAFQAVAAYAFUAVQAVAFcAVwAbAFkAWQALAFoAWgACAFwAXAAWAF0AXQACAF4AXgAMAIMAgwAFAJIAkgAFAJMAkwAVAJcAlwAFAJgAmAAVAJoAmgALALEAsQARALIAsgAFALMAswARALoAugAVALwAvAACAMAAwAAYAMcAyAAVAMoAygALANEA0QAKANIA0gAFANMA0wABANUA1QAKANkA2QASANwA3AABAN0A3QAQAOAA4AAPAOsA6wAYAO0A7QAWAO8A8AAYAPEA8QAEAPIA9AAYAPYA9gAVAPcA9wAYAPgA+AADAPkA+gAYAP0A/QAYAP8A/wAYAQIBAgAVAQMBAwAEAQQBBAAYAQcBBwAFAQwBDAARARYBFgAFARcBFwAIARgBGAANARkBGQACARoBGgAFARwBHAAFAR0BHQAVAR4BHgAFASABIAAFASEBIQAVATIBMgAKATUBNQAYATgBOAAFATkBOQAVAToBOgAKAUQBRAAYAUkBSQAYAUsBTAAVAVEBUQABAVUBVQAFAVYBVgAVAWkBagAXAWwBbQAHAW4BbgATAW8BcQAHAXIBcgATAXYBdwATAigCKQAFAisCLAAFAkYCRgAXAkwCUgARAlMCUwAFAl0CYQAFAmICZQAGAmYCZgAOAmcCbQAaAm4CcgAVAncCdwAYAngCfAAIAn0CgAALAoECggACAoMCgwARAoQChAAaAoUChQARAoYChgAaAocChwARAogCiAAaAokCiQAFAooCigAVAosCiwAFAowCjAAVAo0CjQAFAo4CjgAVAo8CjwAFApACkAAVApICkgAVApQClAAVApYClgAVApgCmAAVApoCmgAVApwCnAAVAp0CnQAFAp4CngAVAp8CnwAFAqACoAAVAqECoQAFAqICogAVAqMCowAFAqQCpAAVArICsgAcAr8CvwAYAsECwQAYAsMCxAAYAsUCxQAFAsYCxgAIAscCxwAFAsgCyAAIAskCyQAFAsoCygAIAtEC0QAZAtIC0gAbAtMC0wAZAtQC1AAbAtUC1QAZAtYC1gAbAtcC1wAZAtgC2AAbAtkC2QAZAtoC2gAbAtsC2wAKAt0C3QAKAt8C3wAKAuEC4QAGAuIC4gALAuMC4wAGAuQC5AALAuUC5QAGAuYC5gALAucC5wAGAugC6AALAukC6QAGAuoC6gALAusC6wAGAuwC7AALAu0C7QAJAu8C7wAOAvAC8AACAvEC8QAOAvIC8gAUAvMC8wAMAvQC9AAUAvUC9QAMAvYC9gAUAvcC9wAMAvoC+gAFA1MDUwARA1cDVwAFA1gDWAAOA1sDWwARA14DXgAUA2QDZAAFA2cDZwAOA2gDaAASA2oDagAOA2sDawAVA20DbQAYA28DbwALA3EDcQAIA3MDcwACA3YDdgALA3cDdwAIA3gDeAALA38DfwAcA4IDggAQA4MDgwARA4oDigAFA40DjQAFA44DjgAKA48DjwASA5ADkAAaA5EDkQAVA5IDkgAYA5MDkwAIA5QDlAAYA5UDlQAVA5YDlgACA5cDlwAWA5gDmAAVA5kDmQAYA5oDmgAbA54DngAYA58DnwACA6ADoAAJA6IDogAJA6QDpAAJA6YDpgAOA6cDpwACA6gDqQAHA6wDrAAHA64DrgAYA68DrwARA7ADsAAaA7MDswAVA7QDtAAYA7cDtwANA7gDuAACA7kDuQAVA7oDugAFA70DvQAFA74DvgAVA78DvwAOA8ADwAACA8IDwgASA8MDwwAWA8UDxQARA8YDxgAaA8cDxwARA8gDyAAaA8wDzAAVA84DzwAVA9AD0AASA9ED0QAWA9UD1QAYA9cD1wAYA9gD2AAFA9kD2QAIA9oD2gAFA9sD2wAVA9wD3AAFA90D3QAIA+AD4AAQA+ED4QACA+ID4gAQA+MD4wACA+QD5AAQA+UD5QACA+YD5gAPA+cD5wADA+kD6QAYA+oD6gASA+sD6wAWA+wD7AAVA+0D7QABA+4D7gAEA+8D7wARA/AD8AAaA/ED8QARA/ID8gAaA/MD8wARA/QD9AAaA/UD9QARA/YD9gAaA/cD9wARA/gD+AAaA/kD+QARA/oD+gAaA/sD+wARA/wD/AAaA/0D/QARA/4D/gAaA/8D/wARBAAEAAAaBAEEAQARBAIEAgAaBAMEAwARBAQEBAAaBAUEBQARBAYEBgAaBAgECAAVBAoECgAVBAwEDAAVBA4EDgAVBBAEEAAVBBIEEgAVBBQEFAAVBBYEFgAVBBsEGwAFBBwEHAAIBB0EHQAFBB4EHgAIBB8EHwAFBCAEIAAIBCEEIQAFBCIEIgAIBCMEIwAFBCQEJAAIBCUEJQAFBCYEJgAIBCcEJwAFBCgEKAAIBCkEKQAFBCoEKgAVBCsEKwAFBCwELAAVBC0ELQAFBC4ELgAVBC8ELwAFBDAEMAAIBDEEMQAFBDIEMgAVBDMEMwAGBDQENAALBDUENQAGBDYENgALBDgEOAALBDoEOgALBDwEPAALBD4EPgALBEAEQAALBEEEQQAOBEIEQgACBEMEQwAOBEQERAACBEUERQAOBEYERgACBEoESgAYBEwETAAYBE0ETQAKBE8ETwASBFAEUAAWBFEEUQAPBFIEUgADBFMEUwAPBFQEVAADBFYEVgAYBFcEVwASBFgEWAAWBGMEYwAYBGUEZQAYBGcEZwAYBGgEaAABBGkEaQAEBGoEagAOBHAEcAAXBKoEqgAFAAEAAAAKAgYG8AAEREZMVAAaY3lybABIZ3JlawB2bGF0bgCkAAQAAAAA//8AEgAAAAoAFAAeACgANABBAEsAVQBfAGkAcwB9AIcAkQCbAKUArwAEAAAAAP//ABIAAQALABUAHwApADUAQgBMAFYAYABqAHQAfgCIAJIAnACmALAABAAAAAD//wASAAIADAAWACAAKgA2AEMATQBXAGEAawB1AH8AiQCTAJ0ApwCxACgABkFaRSAAVENSVCAAfk1PTCAAqE5BViAA1FJPTSABAFRVUiABLAAA//8AEwADAA0AFwAhACsAMgA3AEQATgBYAGIAbAB2AIAAigCUAJ4AqACyAAD//wASAAQADgAYACIALAA4AEUATwBZAGMAbQB3AIEAiwCVAJ8AqQCzAAD//wASAAUADwAZACMALQA5AEYAUABaAGQAbgB4AIIAjACWAKAAqgC0AAD//wATAAYAEAAaACQALgA6AD4ARwBRAFsAZQBvAHkAgwCNAJcAoQCrALUAAP//ABMABwARABsAJQAvADsAPwBIAFIAXABmAHAAegCEAI4AmACiAKwAtgAA//8AEwAIABIAHAAmADAAPABAAEkAUwBdAGcAcQB7AIUAjwCZAKMArQC3AAD//wATAAkAEwAdACcAMQAzAD0ASgBUAF4AaAByAHwAhgCQAJoApACuALgAuWMyc2MEWGMyc2MEWGMyc2MEWGMyc2MEWGMyc2MEWGMyc2MEWGMyc2MEWGMyc2MEWGMyc2MEWGMyc2MEWGNjbXAEXmNjbXAEXmNjbXAEXmNjbXAEXmNjbXAEXmNjbXAEXmNjbXAEXmNjbXAEXmNjbXAEXmNjbXAEXmRsaWcEZmRsaWcEZmRsaWcEZmRsaWcEZmRsaWcEZmRsaWcEZmRsaWcEZmRsaWcEZmRsaWcEZmRsaWcEZmRub20EbGRub20EbGRub20EbGRub20EbGRub20EbGRub20EbGRub20EbGRub20EbGRub20EbGRub20EbGZyYWMEcmZyYWMEcmZyYWMEcmZyYWMEcmZyYWMEcmZyYWMEcmZyYWMEcmZyYWMEcmZyYWMEcmZyYWMEcmxpZ2EEfGxpZ2EEhGxudW0EimxudW0EimxudW0EimxudW0EimxudW0EimxudW0EimxudW0EimxudW0EimxudW0EimxudW0EimxvY2wEkGxvY2wElmxvY2wEnG51bXIEom51bXIEom51bXIEom51bXIEom51bXIEom51bXIEom51bXIEom51bXIEom51bXIEom51bXIEom9udW0EqG9udW0EqG9udW0EqG9udW0EqG9udW0EqG9udW0EqG9udW0EqG9udW0EqG9udW0EqG9udW0EqHBudW0ErnBudW0ErnBudW0ErnBudW0ErnBudW0ErnBudW0ErnBudW0ErnBudW0ErnBudW0ErnBudW0ErnNtY3AEtHNtY3AEtHNtY3AEtHNtY3AEtHNtY3AEtHNtY3AEtHNtY3AEtHNtY3AEtHNtY3AEtHNtY3AEtHNzMDEEunNzMDEEunNzMDEEunNzMDEEunNzMDEEunNzMDEEunNzMDEEunNzMDEEunNzMDEEunNzMDEEunNzMDIEwHNzMDIEwHNzMDIEwHNzMDIEwHNzMDIEwHNzMDIEwHNzMDIEwHNzMDIEwHNzMDIEwHNzMDIEwHNzMDMExnNzMDMExnNzMDMExnNzMDMExnNzMDMExnNzMDMExnNzMDMExnNzMDMExnNzMDMExnNzMDMExnNzMDQEzHNzMDQEzHNzMDQEzHNzMDQEzHNzMDQEzHNzMDQEzHNzMDQEzHNzMDQEzHNzMDQEzHNzMDQEzHNzMDUE0nNzMDUE0nNzMDUE0nNzMDUE0nNzMDUE0nNzMDUE0nNzMDUE0nNzMDUE0nNzMDUE0nNzMDUE0nNzMDYE2HNzMDYE2HNzMDYE2HNzMDYE2HNzMDYE2HNzMDYE2HNzMDYE2HNzMDYE2HNzMDYE2HNzMDYE2HNzMDcE3nNzMDcE3nNzMDcE3nNzMDcE3nNzMDcE3nNzMDcE3nNzMDcE3nNzMDcE3nNzMDcE3nNzMDcE3nRudW0E5HRudW0E5HRudW0E5HRudW0E5HRudW0E5HRudW0E5HRudW0E5HRudW0E5HRudW0E5HRudW0E5AAAAAEAAAAAAAIAAgADAAAAAQAHAAAAAQAYAAAAAwAVABYAFwAAAAIACAAJAAAAAQAJAAAAAQAUAAAAAQAEAAAAAQAGAAAAAQAFAAAAAQAZAAAAAQARAAAAAQATAAAAAQABAAAAAQAKAAAAAQALAAAAAQAMAAAAAQANAAAAAQAOAAAAAQAPAAAAAQAQAAAAAQASABsAOAPGBrQHYA3wDfAOBg4oDl4OhA6yDsYO2g7uDwAPGg9cD3oPmA/KD/wQLhBCEHoQbBB6EKYAAQAAAAEACAACAcQA3wHnAboBuwG8Ab0BvgG/AcABwQHCAcMBxAHFAcYBxwHIAckBygHLAcwBzQHOAc8B0AHRAdIB0wHoAekCRAI7AeoB6wHsAe0B7gHvAfAB8QHyAfMB9AH1AfYB9wH4AfkB+gH7AfwB/QH+AgACAQTdAgICAwIEAgUCBgIHAggCCQIKAgsCLwIPAhACEQIUAhUCFgIXAhgCGQIbAhwCHgIdAvwC/QL+Av8DAAMBAwIDAwMEAwUDBgMHAwgDCQMKAwsDDAMNAw4DDwMQAxEDEgMTAxQDFQMWAxcDGAMZAxoDGwMcAx0DHgMfAyADIQMiAyMDJAMlAyYDJwMoAykDKgMrAywDLQMuAy8DMAMxAzIDMwM0AzUDNgM3AzgDOQM6AzsDPAM9Az4DPwNAA0EDQgNDA0QDRgNFA0cDSANJA0oDSwNMA00DTgNPA1ADUQNSBKsErAStBK4ErwSwBLEEsgSzBLQEtQS2BLcEuAS5BLoEuwS8BL0EvgS/BMAEwQTCBMMExATFBMYB/wTHBMgEyQTKBMsEzATNBM4EzwTQBNEE0gTTBNQE1QTWBNgE2QTbAhoE3AIOBNcCEwINBNoCDAISAAEA3wAIACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AD0APgBlAGcAhQCSALAAsQCyALMAtAC1ALYAtwC4ALkA0QDSANMA1ADVANYA1wDYANkA2gDbANwA3QDeAN8A4ADhAOIA4wDkAOUA5gDnAOgBLAEwATIBOAE6ATwBPgE/AUUBRgF/AYUBigGNAkcCSAJKAkwCTQJOAk8CUAJRAlICUwJUAlUCVgJXAlgCWQJaAlsCXAJdAl4CXwJgAmECYgJjAmQCZQJmAoMChQKHAokCiwKNAo8CkQKTApUClwKZApsCnQKfAqECowKlAqcCqQKrAq0CrwKyArQCtgK4AroCvAK+AsACwgLFAscCyQLLAs0CzwLRAtMC1QLZAtsC3QLfAuEC4wLlAucC6QLrAu0C7wLxAvIC9AL2A1MDVANVA1YDVwNYA1kDWwNcA10DXgNfA2ADYQNiA2QDZQNmA2cDaANpA2oDegN7A3wDfQN+A38DgAOBA4IDgwOEA4UDhgOHA4gDiQOKA4sDjAONA44DjwO7A70DvwPUA9oD4ARJBEsETwRXBFkEXgRqAAEAAAABAAgAAgF0ALcBugG7AbwBvQG+Ab8BwAHBAcIBwwHEAcUBxgHHAcgByQHKAcsBzAHNAc4BzwHQAdEB0gHTAv0DMAI7AfoEygTLAfsB/AH9Af4B/wIABM4EzwTRBNQE3QICAgMCBAIFAgYCBwIIAgkCCgILAfQB9QH2AfcB+AH5Ai8CDwIQAhECFAIVAhcCGQL+Av8DAAMBAwIDAwMEAwUDBgMHAwgDCQMKAwsDDAMNAw4DDwMQAxEDEgMTAxQDFQMWAxcDGAMZA08DGgMbAxwDHQMeAx8DIAMhAyIDIwMkAyUDJgMnAygDKQMqAysDLAMtAy4DLwMxAzIDMwM0AzUDNgM3AzgDOQM6AzsDPAM9Az4DPwNAA0EDQgNDA0QDRgNFA0cDSANJA0oDSwNMA00DTgNQA1EDUgTJBMwEzQTQBNIE0wIBBNUEwQTCBMMExATFBMYExwTIBNYE2ATZAhgE2wIaBNwC/AIOBNcCEwINBNoCFgIMAhIAAQC3AEUARgBHAEgASQBKAEsATABNAE4ATwBQAFEAUgBTAFQAVQBWAFcAWABZAFoAWwBcAF0AXgCHAIwAkwDpAOoA6wDsAO0A7gDvAPAA8QDyAPMA9AD1APYA9wD4APkA+gD7APwA/QD+AP8BAAEBAQIBAwEEAQUBBgEtATEBMwE5ATsBPQFAAUcCSwJnAmgCaQJqAmsCbAJtAm4CbwJwAnECcgJzAnQCdQJ2AncCeAJ5AnoCewJ8An0CfgJ/AoACgQKCAoQChgKIAooCjAKOApACkgKUApYCmAKaApwCngKgAqICpAKmAqgCqgKsAq4CswK1ArcCuQK7Ar0CvwLBAsMCxgLIAsoCzALOAtAC0gLUAtYC2gLcAt4C4ALiAuQC5gLoAuoC7ALuAvAC8wL1AvcDkAORA5IDkwOUA5UDlgOXA5gDmQOaA5sDnAOdA54DnwO8A74DwAPOA9UD2wPhBEcESgRMBFAEWARaBFsEXwRrAAYAAAAGABIAKgBCAFoAcgCKAAMAAAABABIAAQCQAAEAAAAaAAEAAQBNAAMAAAABABIAAQB4AAEAAAAaAAEAAQBOAAMAAAABABIAAQBgAAEAAAAaAAEAAQKuAAMAAAABABIAAQBIAAEAAAAaAAEAAQObAAMAAAABABIAAQAwAAEAAAAaAAEAAQOdAAMAAAABABIAAQAYAAEAAAAaAAEAAQQaAAIAAQCnAKsAAAAEAAAAAQAIAAEGHgA2AHIApACuALgAygD8AQ4BGAFKAWQBfgGQAboB7AH2AhgCMgJEAnYCiAKiAswC3gMQAxoDJAM2A2gDcgN8A4YDoAO6A8wD9gQoBDIEVARuBIAEsgTEBN4FCAUaBSQFLgU4BUIFbAWWBcAF6gYUAAYADgAUABoAIAAmACwCTAACAKcCTQACAKgCTwACAKkD8QACAKoEewACAKsD7wACAKwAAQAEBIgAAgCsAAEABAKJAAIAqAACAAYADASKAAIArASMAAIBogAGAA4AFAAaACAAJgAsAlQAAgCnAlUAAgCoBAsAAgCpBAkAAgCqBH0AAgCrBAcAAgCsAAIABgAMBHcAAgCoAqMAAgGiAAEABASOAAIArAAGAA4AFAAaACAAJgAsAlgAAgCnAlkAAgCoAqcAAgCpBBcAAgCqBH8AAgCrBBkAAgCsAAMACAAOABQEkAACAKgEkgACAKwCtAACAaIAAwAIAA4AFAK2AAIAqASUAAIArAK4AAIBogACAAYADAOtAAIAqASWAAIArAAFAAwAEgAYAB4AJAR5AAIApwK+AAIAqAJcAAIAqQSYAAIArALAAAIBogAGAA4AFAAaACAAJgAsAl0AAgCnAl4AAgCoAmAAAgCpBB0AAgCqBIEAAgCrBBsAAgCsAAEABASaAAIAqAAEAAoAEAAWABwCywACAKgEgwACAKsEnAACAKwCzQACAaIAAwAIAA4AFALRAAIAqASeAAIArALXAAIBogACAAYADASgAAIArALbAAIBogAGAA4AFAAaACAAJgAsAmIAAgCnAmMAAgCoAuEAAgCpBDUAAgCqBIUAAgCrBDMAAgCsAAIABgAMBKIAAgCpBKQAAgCsAAMACAAOABQDoAACAKcDogACAKgEpgACAKwABQAMABIAGAAeACQDpgACAKcCZgACAKgERQACAKkEQwACAKoEQQACAKwAAgAGAAwC8gACAKgEqAACAKwABgAOABQAGgAgACYALAJnAAIApwJoAAIAqAJqAAIAqQPyAAIAqgR8AAIAqwPwAAIArAABAAQEiQACAKwAAQAEAooAAgCoAAIABgAMBIsAAgCsBI0AAgGiAAYADgAUABoAIAAmACwCbwACAKcCcAACAKgEDAACAKkECgACAKoEfgACAKsECAACAKwAAQAEBHgAAgCoAAEABASPAAIArAABAAQEGgACAKwAAwAIAA4AFASRAAIAqASTAAIArAK1AAIBogADAAgADgAUArcAAgCoBJUAAgCsArkAAgGiAAIABgAMA64AAgCoBJcAAgCsAAUADAASABgAHgAkBHoAAgCnAr8AAgCoAncAAgCpBJkAAgCsAsEAAgGiAAYADgAUABoAIAAmACwCeAACAKcCeQACAKgCewACAKkEHgACAKoEggACAKsEHAACAKwAAQAEBJsAAgCoAAQACgAQABYAHALMAAIAqASEAAIAqwSdAAIArALOAAIBogADAAgADgAUAtIAAgCoBJ8AAgCsAtgAAgGiAAIABgAMBKEAAgCsAtwAAgGiAAYADgAUABoAIAAmACwCfQACAKcCfgACAKgC4gACAKkENgACAKoEhgACAKsENAACAKwAAgAGAAwEowACAKkEpQACAKwAAwAIAA4AFAOhAAIApwOjAAIAqASnAAIArAAFAAwAEgAYAB4AJAOnAAIApwKBAAIAqARGAAIAqQREAAIAqgRCAAIArAACAAYADALzAAIAqASpAAIArAABAAQC+AACAKgAAQAEAvoAAgCoAAEABAL5AAIAqAABAAQC+wACAKgABQAMABIAGAAeACQCcwACAKcCdAACAKgCqAACAKkEGAACAKoEgAACAKsABQAMABIAGAAeACQEKwACAKcEKQACAKgELwACAKkELQACAKoEMQACAKwABQAMABIAGAAeACQELAACAKcEKgACAKgEMAACAKkELgACAKoEMgACAKwABQAMABIAGAAeACQEOQACAKcENwACAKgEPQACAKkEOwACAKoEPwACAKwABQAMABIAGAAeACQEOgACAKcEOAACAKgEPgACAKkEPAACAKoEQAACAKwAAQAEBIcAAgCoAAIAEQAlACkAAAArAC0ABQAvADQACAA2ADsADgA9AD4AFABFAEkAFgBLAE0AGwBPAFQAHgBWAFsAJABdAF4AKgCBAIEALACDAIMALQCGAIYALgCJAIkALwCMAIwAMACXAJoAMQDPAM8ANQABAAAAAQAIAAEABgACAAEAAgLVAtYAAQAAAAEACAACAA4ABATeBN8E4AThAAEABAKHAogCmQKaAAQAAAABAAgAAQAmAAIACgAcAAIABgAMAaMAAgBKAagAAgBYAAEABAGpAAIAWAABAAIASgBXAAQAAAABAAgAAQBEAAIACgAUAAEABAGkAAIATQABAAQBpgACAE0ABAAAAAEACAABAB4AAgAKABQAAQAEAaUAAgBQAAEABAGnAAIAUAABAAIASgGjAAEAAAABAAgAAQAGAZUAAQABAEsAAQAAAAEACAABAAYBJwABAAEAugABAAAAAQAIAAEABgGsAAEAAQA2AAEAAAABAAgAAgAcAAIB4wHkAAEAAAABAAgAAgAKAAIB5QHmAAEAAgAvAE8AAQAAAAEACAACAB4ADAIoAioCKQIrAiwCHwIgAiECIgGuAiQCJQABAAwAJwAoACsAMwA1AEYARwBIAEsAUwBUAFUAAQAAAAEACAACAAwAAwImAicCJwABAAMASQBLAiIAAQAAAAEACAACAGYACAI9Ai0CLgIwAjECOQI6AjwAAQAAAAEACAACABYACAAbABUAFgAXABgAGQAdABQAAQAIAa0CIwRxBHIEcwR0BHUEdgABAAAAAQAIAAIAFgAIBHYCIwRxBHIEcwR0Aa0EdQABAAgAFAAVABYAFwAYABkAGwAdAAEAAAABAAgAAgAWAAgAFQAWABcAGAAZABsAHQAUAAEACAItAi4CMAIxAjkCOgI8Aj0AAQAAAAEACAABAAYBaQABAAEAEwAGAAAAAQAIAAMAAQASAAEAUgAAAAEAAAAaAAIAAgF8AXwAAAHUAd0AAQABAAAAAQAIAAEAKAHAAAEAAAABAAgAAgAaAAoCMgB6AHMAdAIzAjQCNQI2AjcCOAACAAEAFAAdAAAAAQAAAAEACAACACYAEAHUAdUB1gHXAdgB2QHaAdsB3AHdAkACPgJBAkICPwJDAAEAEAAUABUAFgAXABgAGQAaABsAHAAdAE0ATgKuA5sDnQQa\",\n  \"Roboto-Medium.ttf\": \"AAEAAAARAQAABAAQR1BPU32qcYwAAgioAABZDEdTVUJMnCjgAAJhtAAAGWhPUy8yoQuxtgAAAZgAAABgY21hcEAmSHIAABpsAAASyGN2dCAElytKAAAvvAAAAFZmcGdte/lhqwAALTQAAAG8Z2FzcAAIABMAAgicAAAADGdseWaunmLpAAA53AABy8xoZG14PT88IAAAFYAAAATsaGVhZPh7qwgAAAEcAAAANmhoZWEK7wqbAAABVAAAACRobXR4JPNE9QAAAfgAABOIbG9jYd3eZq0AADAUAAAJxm1heHAHEgL1AAABeAAAACBuYW1lPWNvTAACBagAAALUcG9zdP9tAGQAAgh8AAAAIHByZXAbsfg2AAAu8AAAAMwAAQAAAAIAABFApG1fDzz1ABsIAAAAAADE8BEuAAAAANDbTpT6JP3VCVwIcwAAAAkAAgAAAAAAAAABAAAHbP4MAAAJa/ok/kEJXAABAAAAAAAAAAAAAAAAAAAE4gABAAAE4gCPABYATgAFAAEAAAAAAA4AAAIAAhYABgABAAMElQH0AAUAAAWaBTMAAAEfBZoFMwAAA9EAZgIAAAACAAAAAAAAAAAA4AAK/1AAIX8AAAAhAAAAAEdPT0cAQAAA//0GAP4AAGYHmgIAIAABnwAAAAAEOgWwACAAIAACA4wAZAAAAAAAAAAAAf4AAAH+AAACJQCPApgAZQTiAGAEjABkBeAAYwUdAFYBWgBSAsoAgALSACgDiQAbBHUARAHCABwCoABHAjwAhwMqAAIEjABpBIwAqASMAFEEjABPBIwANASMAIEEjAB1BIwARQSMAGgEjABdAh8AggHnAC4EEQA/BHoAkQQqAIAD5AA8BygAWwVTABIFDACUBTkAZgU6AJQEhgCUBGUAlAVyAGoFrwCUAkIAowRxAC0FCwCUBFQAlAcBAJQFrgCUBYYAZgUdAJQFhgBgBP4AlATUAEoE2wAtBTcAfQUtABIHCgAwBRAAKQTgAAcE0QBQAjEAhANYABQCMQAMA2sANQOcAAMClAAxBFQAWgSBAHwEMABPBIQATwRLAFMC1gAtBIkAUgRxAHkCCwB9AgH/tQQtAH0CCwCMBvYAfARzAHkEjgBPBIEAfASLAE8C0AB8BCEASwKpAAgEcgB3A/UAFgXyACEEBgAfA+UADAQGAFICrwA4AgIArgKvABsFUQB1Ah4AhgR9AGQEtQBeBZ0AXQTgABkB/ACIBPgAWgOFAF0GRABXA5EAjQPiAFcEbQB/BkQAVwPbAIcDCgB/BEoAXwL2ADwC9gA3ApsAcAS7AJID7QBFAkIAjgIQAG0C9gCAA6cAdwPiAF0F0ABZBisAUAZXAGcD5ABCB4X/9gREAE0FhABpBMoAlATnAIgGwQBIBKcAZwSRAEMEiABPBJcAggWwAB8CGgCPBJgAjgRkACICTwAhBZMAkASIAH4HtABkBzoAWwIMAIsFiABRAtD/5AWKAFgEngBPBaQAfQTyAHcCJv+1BDwAWQPmAJQDsAByA9wAhwN8AHUCCwCBArIAeAJNACkD2AB6Ax8ASQJsAIIAAPyOAAD9XgAA/HMAAP0+AAD8DAAA/RwCXQDGBDwAZwJCAI4EdQCbBb8AGQV6AFsFOAAgBJAAbAWxAJsEkABHBe8ASgWqAEQFWwBrBIQAVgTGAJYEDgAgBIgAVARgAGAEGgBhBIgAfgShAHMCqgCpBGoAFgQTAGQE8wAtBIgAgAQ3AFIEkABSBC0APwRgAIAF0ABEBckATwaUAGYEswB2BHv/4QZxADMF/gAiBVkAaAiIAC0IjwCbBlsAMQWqAJIFCACQBgYAJAeiABYE1gBJBagAlAWpAC0FCgA5Bl8ATwX5AJIFiQCOB5sAmAf5AJgGGgAYBvkAmwUHAJAFUABrB1QAoAT3ACAEfQBbBI8AjwNaAIUE9gAnBnYAHgQWAE0EmACGBG4AjwSaACEGAwCPBJcAhgSYAIYD9QAjBdMAVATTAIYEZgBfBo4AhgbsAH4FFwAfBm8AjwRoAI8EPABRBoQAkQRwACcEcf/bBDwAVAbRAB4G5ACGBIn/7gSYAIYHSQCIBk8AcARn/+AHKACYBgEAhgUMABwEYAAKB0IArAY2AJ0G7QCABeYAggkyAKMH+QCPBCAAKAPwADMFegBfBIgATwUaABAEDgAgBXoAXwSIAE8HRQCIBkQAdAdJAIgGTwBwBRoAZgRKAFwE/wBtAAD8ZgAA/HMAAP17AAD9pQAA+iQAAPpNBGf/4AUTAJQEhgB8BGoAjwOhAH4EtwCbBCAAfgUsAJAEqwCOBpUANAWkAD0H0ACUBaoAfghHAJsG9QB+BioAZwT/AGEHMQAtBXAAJgV0AIAEcwB0BYcAhQYkABYEw//LBSEAkAR4AI4FrwCbBIgAfgWIAFEEpgBbBKYAXQTHADQDUwAtBQcAUgbxAGgG3QBeBlMAPAUoAC8EewBIBD4AdAe+AEIGnQBAB/0AlAaeAHcFBABdBCwAVQWqACEFHQBEBVUAgQMsAGcEFAAACCkAAAQUAAAIKQAAArkAAAIKAAABXAAABH8AAAIwAAABogAAANEAAAAAAAACoQBHAqEARwUpAJ0GMACBA50ABAHAAGMBvAAzAc4AMgGoAEoDFABsAxsAQAMIADIEXQBABJkAXALLAIgD+gCKBaYAigFsAEcHpwBKAnIAbAJpAFQDnAAtAvYANQNcAGkEtQBfBnAAIQa4AJgIkwCUB4gANQaMAHwEjABeBfUAIQQ0ACgEogAhBV4ATwV9ACgF5ABwA+IATAguAJAFCQBtBRQAlgY1AFkG3QBUBtEAWwaiAFgEkQBiBZYApgTZAEAEgwCeBLIAOwhFAF4CLf+vBI4AZQR6AJEEEQA8BCoAgAQMACQCWwChApgAYwHxAEUFGwAtBKgAGAS8AC0HIwAtByMALQURAC0GtwBLAAAAAAgwAFkINQBcBDMAOgSTAE8CEP+wAbMAXAOhAHUDoQB1A6EAdQQLAHUECwB1BAv/TAQLAHoDoQB1AgUAlASeAAkEYAB2BIAATwR6AHYD4AB2A8UAdgSmAFQE3gB2AfwAhQPVACQEWwB2A7kAdgYGAHYE3QB2BMAATwRtAHYEwABMBFwAdgQ0AD4EOwAkBIQAZwR7AAkGBwAoBF4AFQQ8AAUEKgBBAvYASwL2AIAC9gA8AvYANwL2ADUC9gBPAvYATQL2ADYC9gBLAvYARgO5AJACsgCWBDsACgS7AFYFRACbBSgAmwQwAIEFOQCbBC0AgQQ0AD4EZgA4BE0ADgO5AHYEewAJBMAATwR7AAkDmABCBNgAdgQZAEQFnQBQBVQAUATkAF8FkQAkBIAATwdUACQHVwB2BZcAJATXAHYEcQB2BVkAJwY6ABoERgBCBOQAdgRcAHYEywAkBEYAHwVdAHYEjABBBoQAdgcKAHYFWgAKBiAAdgRnAHYEgAA8BpIAdgSIAEMEIgAKBpIAGgSdAHYFGgB2BW4AJAXwAE8EWgAFBMQAFQaVACQEjABBBIwAdgX+AAoE0gBPBEYAQgTAAE8EZgA4A/cARgg2AHYE6wAoBIgAfAQ9AFAEmABPA6QAWwShAEwElAB8BJ8ATwRLAFMEiQBRBXoAawWiAGsFhgCbBeAAawXiAGsEGwCXBIIAbgO5AHYEVwAPBL4ANQL2AEsC9gA1AvYATwL2AE0C9gA2AvYASwL2AEYEawBmBC4AQwaYAE8EtABzBOsAYgIm/7UCJv+1AhsAjwIb//sCGwCPBGAAdgH+AAACoABHBVj/9wVY//cEj//UBNsALQKp/+gFUwASBVMAEgVTABIFUwASBVMAEgVTABIFUwASBTkAZgSGAJQEhgCUBIYAlASGAJQCQv/IAkIAowJC/8sCQv+/Ba4AlAWGAGYFhgBmBYYAZgWGAGYFhgBmBTcAfQU3AH0FNwB9BTcAfQTgAAcEVABaBFQAWgRUAFoEVABaBFQAWgRUAFoEVABaBDAATwRLAFMESwBTBEsAUwRLAFMCGv+0AhoAjwIa/7cCGv+rBHMAeQSOAE8EjgBPBI4ATwSOAE8EjgBPBHIAdwRyAHcEcgB3BHIAdwPlAAwD5QAMBVMAEgRUAFoFUwASBFQAWgVTABIEVABaBTkAZgQwAE8FOQBmBDAATwU5AGYEMABPBTkAZgQwAE8FOgCUBRoATwSGAJQESwBTBIYAlARLAFMEhgCUBEsAUwSGAJQESwBTBIYAlARLAFMFcgBqBIkAUgVyAGoEiQBSBXIAagSJAFIFcgBqBIkAUgWvAJQEcQB5AkL/swIa/58CQv+5Ahr/pQJC/98CGv/LAkIAFwILAAACQgCdBrMAowQMAH0EcQAtAib/tQULAJQELQB9BFQAlAILAIoEVACUAgsAVQRUAJQCoQCMBFQAlALnAIwFrgCUBHMAeQWuAJQEcwB5Ba4AlARzAHkEc/+lBYYAZgSOAE8FhgBmBI4ATwWGAGYEjgBPBP4AlALQAHwE/gCUAtAATwT+AJQC0AA4BNQASgQhAEsE1ABKBCEASwTUAEoEIQBLBNQASgQhAEsE1ABKBCEASwTbAC0CqQAIBNsALQKpAAgE2wAtAtEACAU3AH0EcgB3BTcAfQRyAHcFNwB9BHIAdwU3AH0EcgB3BTcAfQRyAHcFNwB9BHIAdwcKADAF8gAhBOAABwPlAAwE4AAHBNEAUAQGAFIE0QBQBAYAUgTRAFAEBgBSB4X/9gbBAEgFhABpBIgATwR6/6YEev+mBDsAJASeAAkEngAJBJ4ACQSeAAkEngAJBJ4ACQSeAAkEgABPA+AAdgPgAHYD4AB2A+AAdgH8/6YB/ACDAfz/qQH8/50E3QB2BMAATwTAAE8EwABPBMAATwTAAE8EhABnBIQAZwSEAGcEhABnBDwABQSeAAkEngAJBJ4ACQSAAE8EgABPBIAATwSAAE8EegBqA+AAdgPgAHYD4AB2A+AAdgPgAHYEpgBUBKYAVASmAFQEpgBUBN4AdgH8/5EB/P+XAfz/vQH8ABUB/AB8A9UAJARbAHYDuQB2A7kAdgO5AHYDuQB2BN0AdgTdAHYE3QB2BMAATwTAAE8EwABPBFwAdgRcAHYEXAB2BDQAPgQ0AD4ENAA+BDQAPgQ7ACQEOwAkBDsAJASEAGcEhABnBIQAZwSEAGcEhABnBIQAZwYHACgEPAAFBDwABQQqAEEEKgBBBCoAQQVTABIE6v9KBhP/UwKm/1YFmv+nBUT+4QVv/7ICqv+HBVMAEgUMAJQEhgCUBNEAUAWvAJQCQgCjBQsAlAcBAJQFrgCUBYYAZgUdAJQE2wAtBOAABwUQACkCQv+/BOAABwSEAFYEYABgBIgAfgKqAKkEYACABJgAjgSOAE8EuwCSA/UAFgQGAB8Cqv/MBGAAgASOAE8EYACABpQAZgSGAJQEdQCbBNQASgJCAKMCQv+/BHEALQUoAJsFCwCUBQoAOQVTABIFDACUBHUAmwSGAJQFqACUBwEAlAWvAJQFhgBmBbEAmwUdAJQFOQBmBNsALQUQACkEVABaBEsAUwSYAIYEjgBPBIEAfAQwAE8D5QAMBAYAHwRLAFMDWgCFBCEASwILAH0CGv+rAgH/tQRuAI8D5QAMBwoAMAXyACEHCgAwBfIAIQcKADAF8gAhBOAABwPlAAwBWgBSApgAZQRKAI8CJv+xAbwAMwcBAJQG9gB8BVMAEgRUAFoEhgCUBagAlARLAFMEmACGBaoARAXJAE8FGgAQBA7/8QhzAE8JawBmBNYASQQWAE0FOQBmBDAATwTgAAcEDgAgAkIAoweiABYGdgAeAkIAowVTABIEVABaBVMAEgRUAFoHhf/2BsEASASGAJQESwBTBYgAUQQ8AFkEPABZB6IAFgZ2AB4E1gBJBBYATQWoAJQEmACGBagAlASYAIYFhgBmBI4ATwV6AF8EiABPBXoAXwSIAE8FUABrBDwAUQUKADkD5QAMBQoAOQPlAAwFCgA5A+UADAWJAI4EZgBfBvkAmwZvAI8FEAApBAYAHwSEAE8FqQAtBJoAIQVTABIEVABaBVMAEgRUAFoFUwASBFQAWgVTABAEVP+aBVMAEgRUAFoFUwASBFQAWgVTABIEVABaBVMAEgRUAFoFUwASBFQAWgVTABIEVABaBVMAEgRUAFoFUwASBFQAWgSGAJQESwBTBIYAlARLAFMEhgCUBEsAUwSGAJQESwBTBIb/1QRL/44EhgCUBEsAUwSGAJQESwBTBIYAlARLAFMCQgCjAhoAjwJCAJQCCwB4BYYAZgSOAE8FhgBmBI4ATwWGAGYEjgBPBYYAJwSO/6MFhgBmBI4ATwWGAGYEjgBPBYYAZgSOAE8FigBYBJ4ATwWKAFgEngBPBYoAWASeAE8FigBYBJ4ATwWKAFgEngBPBTcAfQRyAHcFNwB9BHIAdwWkAH0E8gB3BaQAfQTyAHcFpAB9BPIAdwWkAH0E8gB3BaQAfQTyAHcE4AAHA+UADATgAAcD5QAMBOAABwPlAAwEogBPBKIATwUoAJsEbgCPBa8AlASXAIYE2wAtA/UAIwUQACkEBgAfBYkAjgRmAF8FiQCOBGYAXwR1AJsDWgCFB6IAFgZ2AB4GJAAWBMP/ywRxAHkFB//QBQf/0AR1//ADWv/iBTz/4wRE/64FqACUBJgAhgWvAJQElwCGBwEAlAYDAI8FqQAtBJoAIQTgAAcEDgAgBRAAKQQGAB8EYABgBGUAAgYwAIEEjABRBIwATwSMADQEjACBBKAAXQS0AH0FcgBqBIkAUgWuAJQEcwB5BVMAEgRUAA0EhgBIBEsAAQJC/vYCGv7iBYYAZgSOABYE/gAyAtD/bgU3AHEEcgAPBN/+rAUMAJQEgQB8BToAlASEAE8FOgCUBIQATwWvAJQEcQB5BQsAlAQtAH0FCwCUBC0AfQRUAJQCCwB4BwEAlAb2AHwFrgCUBHMAeQUdAJQEgQB8BP4AlALQAHIE1ABKBCEASwTbAC0CqQAIBS0AEgP1ABYFLQASA/UAFgcKADAF8gAhBNEAUAQGAFIFzP4cBJ4ACQQc/yoFGv83Ajj/OQTK/5MEeP7oBO7/pASeAAkEYAB2A+AAdgQqAEEE3gB2AfwAhQRbAHYGBgB2BMAATwRtAHYEOwAkBDwABQReABUB/P+dBDwABQPgAHYDuQB2BDQAPgH8AIUB/P+dA9UAJARbAHYERgAfBJ4ACQRgAHYDuQB2A+AAdgTkAHYGBgB2BN4AdgTAAE8E2AB2BG0AdgSAAE8EOwAkBF4AFQRGAEIE3gB2BIAATwQ8AAUF/gAKBOQAdgRGAB8FnQBQBVMAEgRUAFoEhgCUBEsAUwIaAHgAAAABAAAE5AkLBAAAAgICAwYFBwYCAwMEBQIDAwQFBQUFBQUFBQUFAgIFBQUECAYGBgYFBQYGAwUGBQgGBgYGBgUFBgYIBgUFAgQCBAQDBQUFBQUDBQUCAgUCCAUFBQUDBQMFBAcFBAUDAgMGAgUFBgUCBgQHBAQFBwQDBQMDAwUEAwIDBAQHBwcECAUGBQYIBQUFBQYCBQUDBgUJCAIGAwYFBgYCBQQEBAQCAwMEBAMAAAAAAAADBQMFBgYGBQYFBwYGBQUFBQUFBQUDBQUGBQUFBQUHBwcFBQcHBgoKBwYGBwkFBgYGBwcGCQkHCAYGCAYFBQQGBwUFBQUHBQUEBwUFBwgGBwUFBwUFBQgIBQUIBwUIBwYFCAcIBwoJBQQGBQYFBgUIBwgHBgUGAAAAAAAABQYFBQQFBQYFBwYJBgkIBwYIBgYFBgcFBgUGBQYFBQUEBggIBwYFBQkHCQcGBQYGBgQFCQUJAwICBQICAQADAwYHBAICAgIDBAMFBQMEBgIJAwMEAwQFBwgKCAcFBwUFBgYHBAkGBgcICAcFBgUFBQkCBQUFBQUDAwIGBQUICAYIAAkJBQUCAgQEBAUFBQUEAgUFBQUEBAUFAgQFBAcFBQUFBQUFBQUHBQUFAwMDAwMDAwMDAwQDBQUGBgUGBQUFBQQFBQUEBQUGBgYGBQgIBgUFBgcFBgUFBQYFBwgGBwUFBwUFBwUGBgcFBQcFBQcFBQUFBAkGBQUFBAUFBQUFBgYGBwcFBQQFBQMDAwMDAwMFBQcFBgICAgICBQIDBgYFBQMGBgYGBgYGBgUFBQUDAwMDBgYGBgYGBgYGBgUFBQUFBQUFBQUFBQUCAgICBQUFBQUFBQUFBQQEBgUGBQYFBgUGBQYFBgUGBgUFBQUFBQUFBQUGBQYFBgUGBQYFAwIDAgMCAwIDCAUFAgYFBQIFAgUDBQMGBQYFBgUFBgUGBQYFBgMGAwYDBQUFBQUFBQUFBQUDBQMFAwYFBgUGBQYFBgUGBQgHBQQFBQUFBQUFCAgGBQUFBQUFBQUFBQUFBAQEBAICAgIFBQUF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AAADfwAABBsAAAQbAAAA3AAABBwAAAQiAAADhwAABCMAAAQkAAAA3QAABCUAAAQlAAADjgAABCYAAAQvAAAA3wAABDAAAAQwAAADjwAABDEAAAQ0AAAA6QAABDUAAAQ1AAADkAAABDYAAAQ4AAAA7QAABDkAAAQ5AAADkQAABDoAAAQ9AAAA8AAABD4AAAQ+AAADkgAABD8AAAQ/AAAA9AAABEAAAARBAAADkwAABEIAAARCAAAA9QAABEMAAARDAAADlQAABEQAAAREAAAA9gAABEUAAARFAAADlgAABEYAAARPAAAA9wAABFAAAARQAAADsgAABFEAAARRAAADlwAABFIAAARSAAABAQAABFMAAARTAAADmAAABFQAAARUAAABAgAABFUAAARYAAADmQAABFkAAARbAAABAwAABFwAAARcAAADnQAABF0AAARdAAADswAABF4AAAReAAADngAABF8AAARhAAABBgAABGIAAARiAAAEXAAABGMAAARvAAABCQAABHAAAARxAAADtAAABHIAAAR1AAABFgAABHYAAAR3AAADtgAABHgAAAR4AAADuQAABHkAAAR5AAADuAAABHoAAASGAAABGgAABIgAAASJAAABJwAABIoAAASLAAAEYQAABIwAAASMAAAEWwAABI0AAASRAAABKQAABJIAAASTAAAEXQAABJQAAASVAAABLgAABJYAAASXAAAEVgAABJgAAASZAAADugAABJoAAASbAAAESAAABJwAAASdAAABMAAABJ4AAASfAAAEXwAABKAAAAShAAABMgAABKIAAASjAAAESgAABKQAAASpAAABNAAABKoAAASrAAADvAAABKwAAAStAAAETAAABK4AAASvAAADvgAABLAAAASxAAAEaQAABLIAAASzAAAETgAABLQAAAS1AAABOgAABLYAAAS3AAAEUAAABLgAAAS6AAABPAAABLsAAAS7AAAEWgAABLwAAAS9AAABPwAABL4AAAS/AAAEWAAABMAAAATCAAADwAAABMMAAATEAAABQQAABMUAAATGAAAEZwAABMcAAATIAAABQwAABMkAAATKAAAEYwAABMsAAATMAAAEUgAABM0AAATOAAAEZQAABM8AAATXAAADwwAABNgAAATYAAABRQAABNkAAATZAAADzQAABNoAAATaAAADzAAABNsAAATfAAADzgAABOAAAAThAAABRgAABOIAAAT1AAAD0wAABPYAAAT3AAAEVAAABPgAAAT5AAAD5wAABPoAAAT7AAABSAAABPwAAAT9AAAD6QAABP4AAAT/AAAEawAABQAAAAUAAAABSgAABQEAAAUBAAAD6wAABQIAAAUQAAABSwAABREAAAURAAAEbQAABRIAAAUTAAAD7AAAHgAAAB4BAAADrgAAHj4AAB4/AAADrAAAHoAAAB6FAAADnwAAHqAAAB7xAAAD7gAAHvIAAB7zAAADpQAAHvQAAB75AAAEQAAAH00AAB9NAAAEqQAAIAAAACALAAABWwAAIBAAACARAAABZwAAIBMAACAUAAABaQAAIBUAACAVAAAEbwAAIBcAACAeAAABawAAICAAACAiAAABcwAAICUAACAnAAABdgAAIDAAACAwAAABeQAAIDIAACAzAAADpwAAIDkAACA6AAABegAAIDwAACA8AAADqQAAIEQAACBEAAABfAAAIHQAACB0AAABfQAAIH8AACB/AAABfgAAIKMAACCjAAAEbgAAIKQAACCkAAABfwAAIKYAACCqAAABgAAAIKsAACCrAAAERwAAIKwAACCsAAABhQAAILEAACCxAAABhgAAILkAACC6AAABhwAAILwAACC9AAABiQAAIQUAACEFAAABiwAAIRMAACETAAABjAAAIRYAACEWAAABjQAAISIAACEiAAABjgAAISYAACEmAAAAuQAAIS4AACEuAAABjwAAIVsAACFeAAABkAAAIgIAACICAAABlAAAIgYAACIGAAAAsQAAIg8AACIPAAABlQAAIhEAACISAAABlgAAIhoAACIaAAABmAAAIh4AACIeAAABmQAAIisAACIrAAABmgAAIkgAACJIAAABmwAAImAAACJgAAABnAAAImQAACJlAAABnQAAJcoAACXKAAABnwAA7gEAAO4CAAABoAAA9sMAAPbDAAABogAA+wEAAPsEAAABpAAA/v8AAP7/AAABqgAA//wAAP/9AAABq7AALEuwCVBYsQEBjlm4Af+FsIQdsQkDX14tsAEsICBFaUSwAWAtsAIssAEqIS2wAywgRrADJUZSWCNZIIogiklkiiBGIGhhZLAEJUYgaGFkUlgjZYpZLyCwAFNYaSCwAFRYIbBAWRtpILAAVFghsEBlWVk6LbAELCBGsAQlRlJY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seix/7IWsi6yRbJcsnOyi7KdsrSyy7LisvmzEbMoszqzUbNps4Czl7Ops7+z1bPstAS0ELQctDO0RbRbtHK0iLSetLW0zbTetPW1B7UdtS61RrVdtW+1hbWcta61xbXcte22BLYbtoW3J7c5t0u3Yrd4t4+3pre4t8m327fruAK4E7gquEC4V7huuNu5crmJuZq5sbnHud659LoLuiK6LrpAule6abqAupK6qbrAute67rr5uwS7G7snuzO7Srthu227ebuQu6e7s7u/u9S76bv1vAG8GLwqvDa8QrxZvGq8f7yWvKe8vrzVvO29Bb0XvSm9Nb1BvVO9ZL12vYi9n721vcG9zb3ZveW9974IvhS+IL4svji+T75bvnK+iL6avrC+x77evvG/BL8cvy+/jb/vwAbAHcA0wErAYsB5wJDAp8C+wNDA4cD4wQrBIcE4wWjBmMGowb/B1sHswf3CFcItwjnCRcJcwnPCicKgwrfCzcLkwvzDDsMlwzfDTcNew3bDjcOkw7rD0sPpw//EFsR9xI/EpcS8xM3E3sT0xQrFIcWOxaTFusXRxejF9MYKxhzGM8ZKxlXGa8aCxo7GpMawxsXG0cboxvTHC8ccxzPHRsdYx2THdceHx53Hqce6x8bH3Mfox/7ID8gmyDnITMityMTI2sjxyQjJH8k1yUDJTMlYyWTJcMl8yYjJo8mrybPJu8nDycvJ08nbyePJ68nzyfvKA8oLyhPKK8pDylXKZ8p5yorKpMqsyrTKvMrEyszK5Mr7yw3LH8sxy0nLYMvOy9bL7sv2y/7MFcwszDTMPMxEzEzMY8xrzHPMe8yDzIvMk8ybzKPMq8yzzMrM0szazS7NNs0+zVXNbM10zXzNlM2czbPNyc3gzffODs4lzjjOS85iznPOh86mzrLOxM7MzuPO9c8Bzw3PJM87z1LPac9xz3nPkc+pz7XPwc/Nz9nP5c/xz/nQAdAJ0CDQN9A/0FbQbdCF0JzQpNCs0MPQ2dDx0PnRENEo0UDRWNFv0YbRnNG00czR5NH80gTSDNIk0jvSU9Jq0nzSjdKl0rzS1NLs0wTTG9M301PTX9Nr03PTf9OL05fTo9O108fT4NPy1AvUHdQw1ELUVdRn1HfUhtSZ1KvUvtTQ1OPU9dUI1RrVKtU61UbVUtVk1XbViNWZ1bLVxNXd1e/WAtYU1ifWOdZJ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CRCwBtCwBi+wAdCwAS8wMf//AI//8gPIBbAAJgAFAAAABwAFAiUAAP///7H+SwJzBd8CJgCbAAABBwCe/z//3gAJALAAL7AR3DAxAP//ADMEAAFlBgACBgFtAAD//wCUAAAGagc2AiYAMQAAAQcAdQKQATYAEwCwAEVYsAIvG7ECHz5ZsBHcMDEA//8AfAAABnkGAAImAFEAAAEHAHUCoAAAAAkAsAMvsCDcMDEA//8AEv5tBUIFsAImACUAAAAHAKYBegAD//8AWv5xA/sETgImAEUAAAAHAKYArQAH//8AlAAABEwHPQImACkAAAEHAEQA6AE9ABMAsABFWLAGLxuxBh8+WbAN3DAxAP//AJQAAAUNBz0CJgDbAAABBwBEAUoBPQATALAARViwCC8bsQgfPlmwC9wwMQD//wBT/+wECwYAAiYASQAAAQcARAChAAAAEwCwAEVYsAgvG7EIGz5ZsB/cMDEA//8AhgAABBIF8wImAO8AAAEHAEQAxP/zABMAsABFWLAILxuxCBs+WbAL3DAxAP//AEQAAAVcBbACBgC4AAD//wBP/iIFfgQ6AgYAzAAA//8AEAAABPMG/AImARgAAAEHAKsESQEOABYAsABFWLAPLxuxDx8+WbAR3LAV0DAx////8QAABBgF0AImARkAAAEHAKsD5f/iABYAsABFWLARLxuxERs+WbAT3LAX0DAx//8AT/5LCGQETgAmAFMAAAAHAF0EjgAA//8AZv5LCVwFxAAmADMAAAAHAF0FhgAA//8ASf46BH8FwwImANoAAAAHAbABkv+g//8ATf47A8QETQImAO4AAAAHAbABOf+h//8AZv4+BOsFxAImACcAAAAHAbAB1v+k//8AT/4+A/UETgImAEcAAAAHAbABSv+k//8ABwAABNYFsAIGAD0AAP//ACD+XwP1BDoCBgC8AAD//wCjAAABnwWwAgYALQAA//8AFgAAB5sHIwImANkAAAEHAKACHQE9ABMAsABFWLANLxuxDR8+WbAZ3DAxAP//AB4AAAZcBdkCJgDtAAABBwCgAYf/8wATALAARViwDS8bsQ0bPlmwGdwwMQD//wCjAAABnwWwAgYALQAA//8AEgAABUIHHAImACUAAAEHAKAA9gE2ABMAsABFWLAELxuxBB8+WbAO3DAxAP//AFr/7AP7BeYCJgBFAAABBwCgAIAAAAATALAARViwFy8bsRcbPlmwLdwwMQD//wASAAAFQgcCAiYAJQAAAQcAagDuATYAFgCwAEVYsAQvG7EEHz5ZsBLcsBvQMDH//wBa/+wD+wXMAiYARQAAAQYAangAABYAsABFWLAXLxuxFxs+WbAx3LA60DAx////9gAAB1cFsAIGAIEAAP//AEj/7AaEBFACBgCGAAD//wCUAAAETAcjAiYAKQAAAQcAoAC7AT0AEwCwAEVYsAYvG7EGHz5ZsA/cMDEA//8AU//sBAsF5gImAEkAAAEGAKB0AAATALAARViwCC8bsQgbPlmwIdwwMQD//wBR/+sFHgbbAiYBRQAAAQcAagDCAQ8AFgCwAEVYsAAvG7EAHz5ZsCbcsC/QMDH//wBZ/+wD+ARPAgYAnAAA//8AWf/sA/gFzQImAJwAAAEGAGppAQAWALAARViwAC8bsQAbPlmwJtywL9AwMf//ABYAAAebBwkCJgDZAAABBwBqAhUBPQAWALAARViwDS8bsQ0fPlmwHdywJtAwMf//AB4AAAZcBb8CJgDtAAABBwBqAX//8wAWALAARViwDS8bsQ0bPlmwHdywJtAwMf//AEn/7QR/BxcCJgDaAAABBwBqAKMBSwAWALAARViwCy8bsQsfPlmwMdywOtAwMf//AE3/7APEBcwCJgDuAAABBgBqTgAAFgCwAEVYsCUvG7ElGz5ZsC/csDjQMDH//wCUAAAFDQbxAiYA2wAAAQcAcADlAUEAEwCwAEVYsAgvG7EIHz5ZsAvcMDEA//8AhgAABBIFpwImAO8AAAEGAHBf9wATALAARViwBy8bsQcbPlmwC9wwMQD//wCUAAAFDQcJAiYA2wAAAQcAagEVAT0AFgCwAEVYsAgvG7EIHz5ZsBHcsBrQMDH//wCGAAAEEgW/AiYA7wAAAQcAagCP//MAFgCwAEVYsAgvG7EIGz5ZsBHcsBrQMDH//wBm/+wFHgcCAiYAMwAAAQcAagEFATYAFgCwAEVYsAwvG7EMHz5ZsCbcsC/QMDH//wBP/+wEPQXMAiYAUwAAAQcAagCBAAAAFgCwAEVYsAQvG7EEGz5ZsCLcsCvQMDH//wBf/+wFFwXEAgYBFgAA//8AT//sBD0ETgIGARcAAP//AF//7AUXBwYCJgEWAAABBwBqARMBOgAWALAARViwDC8bsQwfPlmwJtywL9AwMf//AE//7AQ9BcwCJgEXAAABBgBqcwAAFgCwAEVYsAQvG7EEGz5ZsCXcsC7QMDH//wBr/+wE8QcYAiYA5gAAAQcAagDjAUwAFgCwAEVYsBMvG7ETHz5ZsCfcsDDQMDH//wBR/+wD6AXMAiYA/gAAAQYAalkAABYAsABFWLAILxuxCBs+WbAo3LAx0DAx//8AOf/rBN0G8QImAN0AAAEHAHAAoQFBAAkAsAEvsBDcMDEA//8ADP5LA9YFtAImAF0AAAEGAHASBAAJALABL7AQ3DAxAP//ADn/6wTdBwkCJgDdAAABBwBqANEBPQAWALAARViwDy8bsQ8fPlmwF9ywINAwMf//AAz+SwPWBcwCJgBdAAABBgBqQgAAFgCwAEVYsA8vG7EPGz5ZsBfcsCDQMDH//wA5/+sE3Qc8AiYA3QAAAQcApQEvAT0AFgCwAEVYsA8vG7EPHz5ZsBbcsBLQMDH//wAM/ksD9gX/AiYAXQAAAQcApQCgAAAAFgCwAEVYsA8vG7EPGz5ZsBbcsBLQMDH//wCOAAAE7gcJAiYA4AAAAQcAagEPAT0AFgCwAEVYsAovG7EKHz5ZsBncsCLQMDH//wBfAAAD4AW/AiYA+AAAAQYAamfzABYAsABFWLAJLxuxCRs+WbAZ3LAi0DAx//8AmwAABlgHCgAmAOULAAAnAC0EuQAAAQcAagHCAT4AFgCwAEVYsAsvG7ELHz5ZsCDcsCnQMDH//wCPAAAFyQW/ACYA/QAAACcAjARHAAABBwBqAXT/8wAWALAARViwCy8bsQsbPlmwH9ywKNAwMf//ACn+SwVRBbACJgA8AAAABwGvA8MAAP//AB/+SwRWBDoCJgBcAAAABwGvAsgAAP//AE//7AQDBgACBgBIAAD//wAt/ksF/QWwAiYA3AAAAAcBrwRvAAD//wAh/ksFBwQ6AiYA8QAAAAcBrwN5AAD//wAS/pcFQgWwAiYAJQAAAAcArAUNAAP//wBa/psD+wROAiYARQAAAAcArARAAAf//wASAAAFQge7AiYAJQAAAQcAqgUFATwACQCwBC+wC9wwMQD//wBa/+wD+waFAiYARQAAAQcAqgSPAAYACQCwFy+wKtwwMQD//wASAAAFSgexAiYAJQAAAQcBtwC/ASEAFwCwAEVYsAUvG7EFHz5ZsQ4J9LAU0DAxAP//AFr/7ATUBnwCJgBFAAABBgG3SewADACwFy+wLNywMdAwMf//ABAAAAVCB64CJgAlAAABBwG2AMQBKwAXALAARViwBC8bsQQfPlmxDgn0sBPQMDEA////mv/sA/sGeQImAEUAAAEGAbZO9gAMALAXL7Aq3LAx0DAx//8AEgAABUIH3gImACUAAAEHAbUAwwETAAwAsAQvsAvcsBLQMDH//wBa/+wEVwapAiYARQAAAQYBtU3eAAwAsBcvsCrcsDHQMDH//wASAAAFQgfWAiYAJQAAAQcBtADEAQUADACwBC+wC9ywEtAwMf//AFr/7AP7BqECJgBFAAABBgG0TtAADACwFy+wKtywMdAwMf//ABL+lwVCBzcCJgAlAAAAJwCdAMMBNgAHAKwFDQAD//8AWv6bA/sGAQImAEUAAAAmAJ1NAAAHAKwEQAAH//8AEgAABUIHrgImACUAAAEHAbMA7wEwAAwAsAQvsA7csBnQMDH//wBa/+wD+wZ5AiYARQAAAQYBs3n7AAwAsBcvsC3csDjQMDH//wASAAAFQgeuAiYAJQAAAQcBuADvATAADACwBC+wDtywGdAwMf//AFr/7AP7BnkCJgBFAAABBgG4efsADACwFy+wLdywONAwMf//ABIAAAVCCD4CJgAlAAABBwGyAO4BNgAMALAEL7AO3LAZ0DAx//8AWv/sA/sHCAImAEUAAAEGAbJ4AAAMALAXL7At3LA40DAx//8AEgAABUIIGAImACUAAAEHAbEA8QE8AAwAsAQvsBTcsBjQMDH//wBa/+wD+wbiAiYARQAAAQYBsXsGAAwAsBcvsDPcsDfQMDH//wAS/pcFQgccAiYAJQAAACcAoAD2ATYABwCsBQ0AA///AFr+mwP7BeYCJgBFAAAAJwCgAIAAAAAHAKwEQAAH//8AlP6eBEwFsAImACkAAAAHAKwEywAK//8AU/6UBAsETgImAEkAAAAHAKwEjwAA//8AlAAABEwHwgImACkAAAEHAKoEygFDAAkAsAYvsAzcMDEA//8AU//sBAsGhQImAEkAAAEHAKoEgwAGAAkAsAgvsB7cMDEA//8AlAAABEwHMwImACkAAAEHAKQAigE+AAkAsAYvsBfcMDEA//8AU//sBAsF9gImAEkAAAEGAKRDAQAJALAIL7Ap3DAxAP//AJQAAAUPB7gCJgApAAABBwG3AIQBKAAXALAARViwBy8bsQcfPlmxDwn0sBXQMDEA//8AU//sBMgGfAImAEkAAAEGAbc97AAMALAIL7Ag3LAl0DAx////1QAABEwHtQImACkAAAEHAbYAiQEyABcAsABFWLAGLxuxBh8+WbEPCfSwFNAwMQD///+O/+wECwZ5AiYASQAAAQYBtkL2AAwAsAgvsB7csCXQMDH//wCUAAAEkgflAiYAKQAAAQcBtQCIARoADACwBi+wDNywE9AwMf//AFP/7ARLBqkCJgBJAAABBgG1Qd4ADACwCC+wHtywJdAwMf//AJQAAARMB90CJgApAAABBwG0AIkBDAAMALAGL7AM3LAT0DAx//8AU//sBAsGoQImAEkAAAEGAbRC0AAMALAIL7Ae3LAl0DAx//8AlP6eBEwHPgImACkAAAAnAJ0AiAE9AAcArATLAAr//wBT/pQECwYBAiYASQAAACYAnUEAAAcArASPAAD//wCjAAACEQfCAiYALQAAAQcAqgN4AUMACQCwAi+wBNwwMQD//wCPAAAB/QZ+AiYAjAAAAQcAqgNk//8ACQCwAi+wBNwwMQD//wCU/poBpwWwAiYALQAAAAcArAN4AAb//wB4/p4BkAXVAiYATQAAAAcArANcAAr//wBm/pQFHgXEAiYAMwAAAAcArAUdAAD//wBP/pIEPQROAiYAUwAAAAcArASd//7//wBm/+wFHge7AiYAMwAAAQcAqgUcATwACQCwFC+wH9wwMQD//wBP/+wEPQaFAiYAUwAAAQcAqgSYAAYACQCwBC+wG9wwMQD//wBm/+wFYQexAiYAMwAAAQcBtwDWASEADACwFC+wIdywJtAwMf//AE//7ATdBnwCJgBTAAABBgG3UuwADACwBC+wHdywItAwMf//ACf/7AUeB64CJgAzAAABBwG2ANsBKwAMALAUL7Af3LAm0DAx////o//sBD0GeQImAFMAAAEGAbZX9gAMALAEL7Ab3LAi0DAx//8AZv/sBR4H3gImADMAAAEHAbUA2gETAAwAsBQvsB/csCbQMDH//wBP/+wEYAapAiYAUwAAAQYBtVbeAAwAsAQvsBvcsCLQMDH//wBm/+wFHgfWAiYAMwAAAQcBtADbAQUADACwFC+wH9ywJtAwMf//AE//7AQ9BqECJgBTAAABBgG0V9AADACwBC+wG9ywItAwMf//AGb+lAUe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GzIcqB5aIBg63iFOIuA5MiUuOt463jb2Ot463iX4J5I5oChwKTIpwCoeKvg5KCuCOZAsTCx2Ldw23DBiMKAx0jOQNtwyVDLaMwQzWjOQN0A3+DakOCQztjbcOco5KDqMOow5KDaeM+A2njaeNp41UjV4NYI1jDWqNbw1zjXgNso7ijuKO4o7ijg+N0A3QDdAN0A3QDdAN0A2yjfYN9g32DfYOt463jreOt463juKO4o7ijuKO4o4HjgeOB44HjsAN7Y3tje2N7Y3tje2N7Y37jfuN+437jmWN/g3+Df4N/g3+DgkOCQ3QDe2N0A3tjdAN7Y2yjbKNso2yjuKN9g37jfYN+432DfuN9g37jfYN+463jmWOt463jreOt463jgeOow16jXqNeo16jreOZY63jmWOt45ljmWO4o3+DuKN/g7ijf4Nhg2GDYYOD44Pjg+OB44HjgeOB44HjgeNng7ADgkOwA2KjYqNio3QDfYOt463juKOwA3QDZMN9g2KjreOt46jDreOt47ijZWOD47ADkyOt47ADmWN/g4JDf4N9g5yjreOt44HjqMOow29jdANkw5yjfYOt463juKNlY2yjg+OTI3tjfuN/g23DgkOZA37jkoOCQ2eDZ4Nng7ADgkNp42njaeOt45ljdAN7Y32DfuNqQ4JDbKOwA4JDreOTI5kDreN0A3tjdAN7Y32DfuN+437jkyOZA7ijf4N/g23Db2OCQ29jgkNvY4JDkyOZA3QDe2N0A3tjdAN7Y3QDe2N0A3tjdAN7Y3QDe2N0A3tjdAN7Y3QDe2N0A3tjdAN7Y32DfuN9g37jfYN+432DfuN9g37jfYN+432DfuN9g37jreOt47ijf4O4o3+DuKN/g7ijf4O4o3+DuKN/g7ijf4N/g4HjgeOwA4JDsAOCQ7ADgkOow63jg+OTI5kDnKOSg5MjmQOZY5oDnKOow63jreOwA7igACAIsABAAEAAAABgAGAAEACwAMAAIAEwATAAQAJQAqAAUALAA2AAsAOAA/ABYARQBGAB4ASQBKACAATABMACIATwBPACMAUQBUACQAVgBWACgAWABYACkAWgBdACoAXwBfAC4AigCKAC8AnACcADAAsAC0ADEAtgC4ADYAugC6ADkAvAC8ADoAvwDAADsAwgDCAD0AxADEAD4AxgDNAD8A0QDRAEcA0wDdAEgA3wDfAFMA4QDjAFQA5QDuAFcA8ADwAGEA9QD3AGIA+gD7AGUA/QD/AGcBAgEEAGoBCQEJAG0BDAEMAG4BFwEZAG8BIQEhAHIBKwEtAHMBMAEwAHYBMgEyAHcBSQFJAHgBbAFtAHkBbwFxAHsBugG6AH4BvQG9AH8BxAHFAIAByAHIAIIBygHLAIMBzQHNAIUCKAIoAIYCKgIrAIcCRgJHAIkCSQJJAIsCSwJsAIwCbgJxAK4CdgJ7ALICgAKIALgCigKKAMECjAKMAMICjgKOAMMCkAKQAMQCkgKbAMUCpAKmAM8CqAKoANICqgKqANMCrAKsANQCrgKuANUCsQKxANYCswKzANcCtQK1ANgCtwK3ANkCuQK5ANoCuwK7ANsCvQLJANwCywLLAOkCzQLNAOoCzwLPAOsC2gLaAOwC3ALcAO0C3gLeAO4C4ALgAO8C4gLiAPAC5ALkAPEC5gLmAPIC6ALoAPMC6gLqAPQC7ALsAPUC7gLxAPYC8wLzAPoC9QL1APsDUgNXAPwDWgNpAQIDbANsARIDcANwARMDcgNyARQDdgN2ARUDeQN6ARYDfAOFARgDhwOJASIDiwOQASUDkgOTASsDlQOYAS0DngOfATEDoQOhATMDowOjATQDpQOoATUDqwOwATkDsgOyAT8DtgO3AUADvAO8AUIDvgPHAUMDygPLAU0DzQPQAU8D1wPYAVMD3APcAVUD3gPkAVYD6QPqAV0D7gQWAV8EGAQYAYgEGgQnAYkELwQvAZcEMgQyAZgENAQ0AZkEQARFAZoESARIAaAESgRKAaEETARMAaIETgRPAaMEVARXAaUEWgRaAakEXARdAaoEXwRfAawEYwRjAa0EZQRlAa4EaQRpAa8EqQSpAbAACgA4/8QA0f/EANX/xAEy/8QBOv/EAtr/xALc/8QC3v/EA43/xARM/8QAFQA6ABQAOwAmAD0AFgEYABQCZQAWAuwAJgLuABYC8AAWA1cAFgNmABYDaQAWA58AJgOhACYDowAmA6UAFgO2ABQDvgAWBEAAFgRCABYERAAWBGkAFgABABP/CADOABD+7gAS/u4AJf9AAC7/MAA4ABQARf/eAEf/6wBI/+sASf/rAEv/6wBT/+sAVf/rAFb/5gBZ/+oAWv/oAF3/6ACT/+sAmP/rAJr/6gCx/0AAs/9AALr/6wC8/+gAx//rAMj/6wDK/+oA0QAUANUAFAD2/+sBAv/rAQz/QAEX/+sBGf/oAR3/6wEh/+sBMgAUATn/6wE6ABQBS//rAUz/6wFW/+sBbv7uAXL+7gF2/u4Bd/7uAbr/wAJL/0ACTP9AAk3/QAJO/0ACT/9AAlD/QAJR/0ACZv/eAmf/3gJo/94Caf/eAmr/3gJr/94CbP/eAm3/6wJu/+sCb//rAnD/6wJx/+sCd//rAnj/6wJ5/+sCev/rAnv/6wJ8/+oCff/qAn7/6gJ//+oCgP/oAoH/6AKC/0ACg//eAoT/QAKF/94Chv9AAof/3gKJ/+sCi//rAo3/6wKP/+sCkf/rApP/6wKV/+sCl//rApn/6wKb/+sCnf/rAp//6wKh/+sCo//rArH/MALF/+sCx//rAsn/6wLaABQC3AAUAt4AFALh/+oC4//qAuX/6gLn/+oC6f/qAuv/6gLv/+gDUv9AA1r/QANq/+sDbv/qA3D/6wNy/+gDdf/qA3b/6wN3/+oDfv8wA4L/QAONABQDj//eA5D/6wOS/+sDlP/rA5X/6AOX/+sDnv/oA6b/6AOu/0ADr//eA7L/6wO3/+gDuP/rA73/6wO//+gDxP9AA8X/3gPG/0ADx//eA8v/6wPN/+sDzv/rA9j/6wPa/+sD3P/rA+D/6APi/+gD5P/oA+v/6wPu/0AD7//eA/D/QAPx/94D8v9AA/P/3gP0/0AD9f/eA/b/QAP3/94D+P9AA/n/3gP6/0AD+//eA/z/QAP9/94D/v9AA///3gQA/0AEAf/eBAL/QAQD/94EBP9ABAX/3gQH/+sECf/rBAv/6wQN/+sED//rBBH/6wQT/+sEFf/rBBv/6wQd/+sEH//rBCH/6wQj/+sEJf/rBCf/6wQp/+sEK//rBC3/6wQv/+sEMf/rBDP/6gQ1/+oEN//qBDn/6gQ7/+oEPf/qBD//6gRB/+gEQ//oBEX/6ARMABQAIAA4/98AOv/kADv/7AA9/90A0f/fANX/3wEY/+QBMv/fATr/3wG6AA4CZf/dAtr/3wLc/98C3v/fAuz/7ALu/90C8P/dA1f/3QNm/90Daf/dA43/3wOf/+wDof/sA6P/7AOl/90Dtv/kA77/3QRA/90EQv/dBET/3QRM/98Eaf/dABoAOP/OADr/7QA9/9AA0f/OANX/zgEY/+0BMv/OATr/zgJl/9AC2v/OAtz/zgLe/84C7v/QAvD/0ANX/9ADZv/QA2n/0AON/84Dpf/QA7b/7QO+/9AEQP/QBEL/0ARE/9AETP/OBGn/0AAQAC7/7gA5/+4CYf/uAmL/7gJj/+4CZP/uArH/7gLg/+4C4v/uAuT/7gLm/+4C6P/uAur/7gN+/+4EMv/uBDT/7gBKAAYAEAALABAADQAUAEEAEgBH/+gASP/oAEn/6ABL/+gAVf/oAGEAEwCT/+gAmP/oALr/6ADH/+gAyP/oAPb/6AEC/+gBHf/oASH/6AE5/+gBS//oAUz/6AFW/+gBbAAQAW0AEAFvABABcAAQAXEAEAJt/+gCbv/oAm//6AJw/+gCcf/oAon/6AKL/+gCjf/oAo//6AKR/+gCk//oApX/6AKX/+gCmf/oApv/6AKd/+gCn//oAqH/6AKj/+gDav/oA5D/6AOU/+gDl//oA6cAEAOoABADqwAQA7L/6AO4/+gDvf/oA8v/6APN/+gDzv/oA9r/6APr/+gEB//oBAn/6AQL/+gEDf/oBA//6AQR/+gEE//oBBX/6AQp/+gEK//oBC3/6AQx/+gAAgD1/9YBbf+YAD0AR//sAEj/7ABJ/+wAS//sAFX/7ACT/+wAmP/sALr/7ADH/+wAyP/sAPb/7AEC/+wBHf/sASH/7AE5/+wBS//sAUz/7AFW/+wCbf/sAm7/7AJv/+wCcP/sAnH/7AKJ/+wCi//sAo3/7AKP/+wCkf/sApP/7AKV/+wCl//sApn/7AKb/+wCnf/sAp//7AKh/+wCo//sA2r/7AOQ/+wDlP/sA5f/7AOy/+wDuP/sA73/7APL/+wDzf/sA87/7APa/+wD6//sBAf/7AQJ/+wEC//sBA3/7AQP/+wEEf/sBBP/7AQV/+wEKf/sBCv/7AQt/+wEMf/sABgAU//iARf/4gFtABgCd//iAnj/4gJ5/+ICev/iAnv/4gLF/+ICx//iAsn/4gNw/+IDdv/iA5L/4gPY/+ID3P/iBBv/4gQd/+IEH//iBCH/4gQj/+IEJf/iBCf/4gQv/+IABgAQ/4QAEv+EAW7/hAFy/4QBdv+EAXf/hAAQAC7/7AA5/+wCYf/sAmL/7AJj/+wCZP/sArH/7ALg/+wC4v/sAuT/7ALm/+wC6P/sAur/7AN+/+wEMv/sBDT/7AAeAAb/8gAL//IAWv/zAF3/8wC8//MA9f/1ARn/8wFs//IBbf/yAW//8gFw//IBcf/yAoD/8wKB//MC7//zA3L/8wOV//MDnv/zA6b/8wOn//IDqP/yA6v/8gO3//MDv//zA+D/8wPi//MD5P/zBEH/8wRD//MERf/zAD4AJ//zACv/8wAz//MANf/zAIP/8wCS//MAl//zALL/8wDDAA0A0v/zAQf/8wEW//MBGv/zARz/8wEe//MBIP/zATj/8wFV//MCKP/zAin/8wIr//MCLP/zAlL/8wJc//MCXf/zAl7/8wJf//MCYP/zAoj/8wKK//MCjP/zAo7/8wKc//MCnv/zAqD/8wKi//MCxP/zAsb/8wLI//MC+f/zA1b/8wNj//MDif/zA4z/8wO5//MDvP/zA9f/8wPZ//MD2//zBBr/8wQc//MEHv/zBCD/8wQi//MEJP/zBCb/8wQo//MEKv/zBCz/8wQu//MEMP/zBKn/8wA/ACf/5gAr/+YAM//mADX/5gCD/+YAkv/mAJf/5gCy/+YAt//CAMMAEADS/+YBB//mARb/5gEa/+YBHP/mAR7/5gEg/+YBOP/mAVX/5gIo/+YCKf/mAiv/5gIs/+YCUv/mAlz/5gJd/+YCXv/mAl//5gJg/+YCiP/mAor/5gKM/+YCjv/mApz/5gKe/+YCoP/mAqL/5gLE/+YCxv/mAsj/5gL5/+YDVv/mA2P/5gOJ/+YDjP/mA7n/5gO8/+YD1//mA9n/5gPb/+YEGv/mBBz/5gQe/+YEIP/mBCL/5gQk/+YEJv/mBCj/5gQq/+YELP/mBC7/5gQw/+YEqf/mADcAJf/kADz/0gA9/9MAsf/kALP/5ADD/+IA2f/SAQz/5AJL/+QCTP/kAk3/5AJO/+QCT//kAlD/5AJR/+QCZf/TAoL/5AKE/+QChv/kAu7/0wLw/9MDUv/kA1f/0wNa/+QDZv/TA2f/0gNp/9MDgv/kA47/0gOl/9MDrv/kA77/0wPB/9IDxP/kA8b/5APP/9ID6f/SA+7/5APw/+QD8v/kA/T/5AP2/+QD+P/kA/r/5AP8/+QD/v/kBAD/5AQC/+QEBP/kBED/0wRC/9MERP/TBE7/0gRW/9IEaf/TACcAEP9GABL/RgAl/80Asf/NALP/zQDG//IBDP/NAW7/RgFy/0YBdv9GAXf/RgJL/80CTP/NAk3/zQJO/80CT//NAlD/zQJR/80Cgv/NAoT/zQKG/80DUv/NA1r/zQOC/80Drv/NA8T/zQPG/80D7v/NA/D/zQPy/80D9P/NA/b/zQP4/80D+v/NA/z/zQP+/80EAP/NBAL/zQQE/80AAQDDAA4ArwBH/9wASP/cAEn/3ABL/9wAUf/BAFL/wQBT/9YAVP/BAFX/3ABZ/90AWv/hAF3/4QCT/9wAmP/cAJr/3QC6/9wAvP/hAL7/5gDA/8EAwf/rAML/6QDE//AAxf/nAMf/3ADI/9wAyf/jAMr/3QDL/84AzP/UAM3/2wDr/8EA7//BAPD/wQDy/8EA8//BAPT/wQD2/9wA9//BAPn/wQD6/8EA/f/BAP//wQEC/9wBBP/BARf/1gEZ/+EBHf/cASH/3AE1/8EBOf/cAUT/wQFJ/8EBS//cAUz/3AFW/9wCbf/cAm7/3AJv/9wCcP/cAnH/3AJ2/8ECd//WAnj/1gJ5/9YCev/WAnv/1gJ8/90Cff/dAn7/3QJ//90CgP/hAoH/4QKJ/9wCi//cAo3/3AKP/9wCkf/cApP/3AKV/9wCl//cApn/3AKb/9wCnf/cAp//3AKh/9wCo//cAr7/wQLA/8ECwv/BAsP/wQLF/9YCx//WAsn/1gLh/90C4//dAuX/3QLn/90C6f/dAuv/3QLv/+EDav/cA2z/wQNu/90DcP/WA3L/4QN1/90Ddv/WA3f/3QOQ/9wDkf/BA5L/1gOT/8EDlP/cA5X/4QOX/9wDmP/BA53/wQOe/+EDpv/hA63/wQOy/9wDs//BA7f/4QO4/9wDvf/cA7//4QPL/9wDzf/cA87/3APU/8ED1v/BA9j/1gPa/9wD3P/WA+D/4QPi/+ED5P/hA+j/wQPr/9wEB//cBAn/3AQL/9wEDf/cBA//3AQR/9wEE//cBBX/3AQb/9YEHf/WBB//1gQh/9YEI//WBCX/1gQn/9YEKf/cBCv/3AQt/9wEL//WBDH/3AQz/90ENf/dBDf/3QQ5/90EO//dBD3/3QQ//90EQf/hBEP/4QRF/+EESf/BBEv/wQRV/8EEYv/BBGT/wQRm/8EAdgAG/9oAC//aAEf/8ABI//AASf/wAEv/8ABV//AAWf/vAFr/3ABd/9wAk//wAJj/8ACa/+8Auv/wALz/3ADB/+wAwwAPAMX/6gDH//AAyP/wAMn/zgDK/+8Ay//nAPb/8AEC//ABGf/cAR3/8AEh//ABOf/wAUv/8AFM//ABVv/wAWz/2gFt/9oBb//aAXD/2gFx/9oCbf/wAm7/8AJv//ACcP/wAnH/8AJ8/+8Cff/vAn7/7wJ//+8CgP/cAoH/3AKJ//ACi//wAo3/8AKP//ACkf/wApP/8AKV//ACl//wApn/8AKb//ACnf/wAp//8AKh//ACo//wAuH/7wLj/+8C5f/vAuf/7wLp/+8C6//vAu//3ANq//ADbv/vA3L/3AN1/+8Dd//vA5D/8AOU//ADlf/cA5f/8AOe/9wDpv/cA6f/2gOo/9oDq//aA7L/8AO3/9wDuP/wA73/8AO//9wDy//wA83/8APO//AD2v/wA+D/3APi/9wD5P/cA+v/8AQH//AECf/wBAv/8AQN//AED//wBBH/8AQT//AEFf/wBCn/8AQr//AELf/wBDH/8AQz/+8ENf/vBDf/7wQ5/+8EO//vBD3/7wQ//+8EQf/cBEP/3ARF/9wARAAQAAwAEgAMAEf/5wBI/+cASf/nAEv/5wBV/+cAk//nAJj/5wC6/+cAwwAPAMf/5wDI/+cA9v/nAQL/5wEd/+cBIf/nATn/5wFL/+cBTP/nAVb/5wFuAAwBcgAMAXYADAF3AAwCbf/nAm7/5wJv/+cCcP/nAnH/5wKJ/+cCi//nAo3/5wKP/+cCkf/nApP/5wKV/+cCl//nApn/5wKb/+cCnf/nAp//5wKh/+cCo//nA2r/5wOQ/+cDlP/nA5f/5wOy/+cDuP/nA73/5wPL/+cDzf/nA87/5wPa/+cD6//nBAf/5wQJ/+cEC//nBA3/5wQP/+cEEf/nBBP/5wQV/+cEKf/nBCv/5wQt/+cEMf/nAAYAyf/qAOz/7gD1/9UA/f/tATP/7AFY/+wAAQD1/8AAAQDJACAAfgAGAAwACwAMAEf/6ABI/+gASf/oAEoADABL/+gAU//qAFX/6ABaAAsAXQALAJP/6ACY/+gAuv/oALwACwDD/5AAxQALAMf/6ADI/+gAyQAMAPb/6AEC/+gBF//qARkACwEd/+gBIf/oATn/6AFL/+gBTP/oAVb/6AFsAAwBbQAMAW8ADAFwAAwBcQAMAbr/vwG8/+4BwP/sAcj/7QHK/+wBzP/1Ac0ADgHPAA0B0gANAm3/6AJu/+gCb//oAnD/6AJx/+gCd//qAnj/6gJ5/+oCev/qAnv/6gKAAAsCgQALAon/6AKL/+gCjf/oAo//6AKR/+gCk//oApX/6AKX/+gCmf/oApv/6AKd/+gCn//oAqH/6AKj/+gCxf/qAsf/6gLJ/+oC7wALA2r/6ANw/+oDcgALA3b/6gOQ/+gDkv/qA5T/6AOVAAsDl//oA54ACwOmAAsDpwAMA6gADAOrAAwDsv/oA7cACwO4/+gDvf/oA78ACwPL/+gDzf/oA87/6APY/+oD2v/oA9z/6gPgAAsD4gALA+QACwPr/+gEB//oBAn/6AQL/+gEDf/oBA//6AQR/+gEE//oBBX/6AQb/+oEHf/qBB//6gQh/+oEI//qBCX/6gQn/+oEKf/oBCv/6AQt/+gEL//qBDH/6ARBAAsEQwALBEUACwABAPX/4gANAFz/7QBe/+0A7f/tAPX/wALy/+0C9P/tAvb/7QOW/+0Dwv/tA9D/7QPq/+0ET//tBFf/7QAMAFz/8gBe//IA7f/yAvL/8gL0//IC9v/yA5b/8gPC//ID0P/yA+r/8gRP//IEV//yAB8AWv/0AFz/8gBd//QAXv/zALz/9ADt//IBGf/0AoD/9AKB//QC7//0AvL/8wL0//MC9v/zA3L/9AOV//QDlv/yA57/9AOm//QDt//0A7//9APC//ID0P/yA+D/9APi//QD5P/0A+r/8gRB//QEQ//0BEX/9ARP//IEV//yAF0ABv/KAAv/ygA4/9IAOv/UADz/9AA9/9MAWv/mAFz/7wBd/+YAvP/mANH/0gDV/9IA2f/0AN3/7QDg/+EA5f/UAO3/7wD1/8kA/f/RAQj/5QEY/9QBGf/mAR//4wEy/9IBM//EATr/0gE8/+EBTf/UAU7/9QFP/+cBV/9kAVj/yQFs/8oBbf/KAW//ygFw/8oBcf/KAmX/0wKA/+YCgf/mAtr/0gLc/9IC3v/SAu7/0wLv/+YC8P/TA1f/0wNm/9MDZ//0A2n/0wNy/+YDgf/tA43/0gOO//QDlf/mA5b/7wOe/+YDpf/TA6b/5gOn/8oDqP/KA6v/ygO2/9QDt//mA77/0wO//+YDwf/0A8L/7wPP//QD0P/vA9//7QPg/+YD4f/tA+L/5gPj/+0D5P/mA+X/4QPp//QD6v/vBED/0wRB/+YEQv/TBEP/5gRE/9MERf/mBEz/0gRO//QET//vBFD/4QRS/+EEVv/0BFf/7wRp/9MAbAAG/8AAC//AADj/nQA6/8cAPP/wAD3/qwBR/9IAUv/SAFT/0gDA/9IA0f+dANP/9QDV/50A2f/wANz/9QDd/+oA4P/lAOX/wQDr/9IA7//SAPD/0gDy/9IA8//SAPT/0gD1/80A9//SAPn/0gD6/9IA/f/SAP//0gEE/9IBGP/HATL/nQEz/8wBNf/SATr/nQE8/+UBP//fAUT/0gFJ/9IBTf/OAU//6gFR//UBV/+eAVj/zgFs/8ABbf/AAW//wAFw/8ABcf/AAmX/qwJ2/9ICvv/SAsD/0gLC/9ICw//SAtr/nQLc/50C3v+dAu7/qwLw/6sDV/+rA2b/qwNn//ADaf+rA2z/0gOB/+oDjf+dA47/8AOR/9IDk//SA5j/0gOd/9IDpf+rA6f/wAOo/8ADq//AA63/0gOz/9IDtv/HA77/qwPB//ADz//wA9T/0gPW/9ID3//qA+H/6gPj/+oD5f/lA+j/0gPp//AD7P/1BED/qwRC/6sERP+rBEn/0gRL/9IETP+dBE7/8ARQ/+UEUv/lBFX/0gRW//AEYv/SBGT/0gRm/9IEZ//1BGn/qwBvAAb/sQAL/7EAOP+eADr/xQA8//IAPf+oAFH/zwBS/88AVP/PAFz/7wDA/88A0f+eANX/ngDZ//IA3f/sAOD/4QDl/8IA6//PAO3/7wDv/88A8P/PAPL/zwDz/88A9P/PAPX/xgD3/88A+f/PAPr/zwD9/88A///PAQT/zwEY/8UBMv+eATP/wAE1/88BOv+eATz/4QE//98BRP/PAUn/zwFN/80BT//oAVf/nwFY/8YBbP+xAW3/sQFv/7EBcP+xAXH/sQJl/6gCdv/PAr7/zwLA/88Cwv/PAsP/zwLa/54C3P+eAt7/ngLu/6gC8P+oA1f/qANm/6gDZ//yA2n/qANs/88Dgf/sA43/ngOO//IDkf/PA5P/zwOW/+8DmP/PA53/zwOl/6gDp/+xA6j/sQOr/7EDrf/PA7P/zwO2/8UDvv+oA8H/8gPC/+8Dz//yA9D/7wPU/88D1v/PA9//7APh/+wD4//sA+X/4QPo/88D6f/yA+r/7wRA/6gEQv+oBET/qARJ/88ES//PBEz/ngRO//IET//vBFD/4QRS/+EEVf/PBFb/8gRX/+8EYv/PBGT/zwRm/88Eaf+oAE0AOP++AFH/4QBS/+EAVP/hAFr/7wBd/+8AvP/vAMD/4QDR/74A1f++AOX/yQDr/+EA7//hAPD/4QDy/+EA8//hAPT/4QD1/98A9//hAPn/4QD6/+EA/f/hAP//4QEE/+EBCP/tARn/7wEf/+sBMv++ATP/3wE1/+EBOv++AT//6QFE/+EBSf/hAU7/9QFY/+ACdv/hAoD/7wKB/+8Cvv/hAsD/4QLC/+ECw//hAtr/vgLc/74C3v++Au//7wNs/+EDcv/vA43/vgOR/+EDk//hA5X/7wOY/+EDnf/hA57/7wOm/+8Drf/hA7P/4QO3/+8Dv//vA9T/4QPW/+ED4P/vA+L/7wPk/+8D6P/hBEH/7wRD/+8ERf/vBEn/4QRL/+EETP++BFX/4QRi/+EEZP/hBGb/4QBkADj/5gA6/+cAPP/yAD3/5wBR/9YAUv/WAFT/1gBc//EAwP/WANH/5gDV/+YA2f/yAN3/7gDg/+gA5f/mAOv/1gDt//EA7//WAPD/1gDy/9YA8//WAPT/1gD1/9AA9//WAPn/1gD6/9YA/f/WAP//1gEE/9YBGP/nATL/5gEz/84BNf/WATr/5gE8/+gBRP/WAUn/1gFN/+cBT//tAVf/5gFY/9ACZf/nAnb/1gK+/9YCwP/WAsL/1gLD/9YC2v/mAtz/5gLe/+YC7v/nAvD/5wNX/+cDZv/nA2f/8gNp/+cDbP/WA4H/7gON/+YDjv/yA5H/1gOT/9YDlv/xA5j/1gOd/9YDpf/nA63/1gOz/9YDtv/nA77/5wPB//IDwv/xA8//8gPQ//ED1P/WA9b/1gPf/+4D4f/uA+P/7gPl/+gD6P/WA+n/8gPq//EEQP/nBEL/5wRE/+cESf/WBEv/1gRM/+YETv/yBE//8QRQ/+gEUv/oBFX/1gRW//IEV//xBGL/1gRk/9YEZv/WBGn/5wCTACUAEAAn/+gAK//oADP/6AA1/+gAOP/gADr/4AA9/98Ag//oAJL/6ACX/+gAsQAQALL/6ACzABAA0f/gANL/6ADTABAA1f/gANgAFADcABAA4P/hAOX/4ADsABMA8QAQAPj/4AEDABABB//oAQwAEAEW/+gBGP/gARr/6AEc/+gBHv/oASD/6AEy/+ABOP/oATr/4AE8/+EBPf/gAUD/4QFF/+kBTf/fAU//3gFRABABVf/oAVf/3wFZ//ICKP/oAin/6AIr/+gCLP/oAksAEAJMABACTQAQAk4AEAJPABACUAAQAlEAEAJS/+gCXP/oAl3/6AJe/+gCX//oAmD/6AJl/98CggAQAoQAEAKGABACiP/oAor/6AKM/+gCjv/oApz/6AKe/+gCoP/oAqL/6ALE/+gCxv/oAsj/6ALa/+AC3P/gAt7/4ALu/98C8P/fAvn/6ANSABADVv/oA1f/3wNaABADY//oA2b/3wNp/98DggAQA4n/6AOM/+gDjf/gA6X/3wOuABADtv/gA7n/6AO8/+gDvv/fA8QAEAPGABAD1//oA9n/6APb/+gD5f/hA+b/4APsABAD7QAQA+4AEAPwABAD8gAQA/QAEAP2ABAD+AAQA/oAEAP8ABAD/gAQBAAAEAQCABAEBAAQBBr/6AQc/+gEHv/oBCD/6AQi/+gEJP/oBCb/6AQo/+gEKv/oBCz/6AQu/+gEMP/oBED/3wRC/98ERP/fBEz/4ARQ/+EEUf/gBFL/4QRT/+AEZwAQBGgAEARp/98Eqf/oADIAG//yADj/8QA6//QAPP/0AD3/8ADR//EA0//1ANX/8QDZ//QA3P/1AN3/8wDl//EBGP/0ATL/8QE6//EBTf/yAU//8gFR//UBV//yAmX/8ALa//EC3P/xAt7/8QLu//AC8P/wA1f/8ANm//ADZ//0A2n/8AOB//MDjf/xA47/9AOl//ADtv/0A77/8APB//QDz//0A9//8wPh//MD4//zA+n/9APs//UEQP/wBEL/8ARE//AETP/xBE7/9ARW//QEZ//1BGn/8ABmACUADwA4/+YAOv/mADwADgA9/+YAsQAPALMADwDR/+YA0wAOANX/5gDYABMA2QAOANwADgDdAAsA4P/lAOX/5gDm//QA7AASAPEADwD1/+cA+P/oAP3/5wEDAA8BDAAPARj/5gEy/+YBM//nATr/5gE8/+UBPf/oAU3/5gFP/+YBUQAOAVf/5gFY/+cCSwAPAkwADwJNAA8CTgAPAk8ADwJQAA8CUQAPAmX/5gKCAA8ChAAPAoYADwLa/+YC3P/mAt7/5gLu/+YC8P/mA1IADwNX/+YDWgAPA2b/5gNnAA4Daf/mA4EACwOCAA8Djf/mA44ADgOl/+YDrgAPA7b/5gO+/+YDwQAOA8QADwPGAA8DzwAOA98ACwPhAAsD4wALA+X/5QPm/+gD6QAOA+wADgPtAA8D7gAPA/AADwPyAA8D9AAPA/YADwP4AA8D+gAPA/wADwP+AA8EAAAPBAIADwQEAA8EQP/mBEL/5gRE/+YETP/mBE4ADgRQ/+UEUf/oBFL/5QRT/+gEVgAOBGcADgRoAA8Eaf/mADcABv+/AAv/vwA4/58AOv/JAD3/rQDR/58A1f+fAN3/7ADg/+YA5f/EAPX/zQD9/9UBGP/JATL/nwEz/8wBOv+fATz/5gE//98BTf/RAU//7AFX/6EBWP/PAWz/vwFt/78Bb/+/AXD/vwFx/78CZf+tAtr/nwLc/58C3v+fAu7/rQLw/60DV/+tA2b/rQNp/60Dgf/sA43/nwOl/60Dp/+/A6j/vwOr/78Dtv/JA77/rQPf/+wD4f/sA+P/7APl/+YEQP+tBEL/rQRE/60ETP+fBFD/5gRS/+YEaf+tADAAOP/jADz/5QA9/+QA0f/jANP/5QDV/+MA2P/iANn/5QDc/+UA3f/pAPH/6gED/+oBMv/jATr/4wFR/+UBV//kAmX/5ALa/+MC3P/jAt7/4wLu/+QC8P/kA1f/5ANm/+QDZ//lA2n/5AOB/+kDjf/jA47/5QOl/+QDvv/kA8H/5QPP/+UD3//pA+H/6QPj/+kD6f/lA+z/5QPt/+oEQP/kBEL/5ARE/+QETP/jBE7/5QRW/+UEZ//lBGj/6gRp/+QAIwA4/+IAPP/kANH/4gDT/+QA1f/iANj/4QDZ/+QA3P/kAN3/6QDs/+QA8f/rAQP/6wEy/+IBOv/iAVH/5ALa/+IC3P/iAt7/4gNn/+QDgf/pA43/4gOO/+QDwf/kA8//5APf/+kD4f/pA+P/6QPp/+QD7P/kA+3/6wRM/+IETv/kBFb/5ARn/+QEaP/rABcAOP/rAD3/8wDR/+sA1f/rATL/6wE6/+sCZf/zAtr/6wLc/+sC3v/rAu7/8wLw//MDV//zA2b/8wNp//MDjf/rA6X/8wO+//MEQP/zBEL/8wRE//METP/rBGn/8wA2AFH/7wBS/+8AVP/vAFz/8ADA/+8A6//vAOz/7gDt//AA7//vAPD/7wDy/+8A8//vAPT/7wD1/+4A9//vAPn/7wD6/+8A/f/vAP//7wEE/+8BCP/0AR//8QEz/+8BNf/vAUT/7wFJ/+8BWP/vAnb/7wK+/+8CwP/vAsL/7wLD/+8DbP/vA5H/7wOT/+8Dlv/wA5j/7wOd/+8Drf/vA7P/7wPC//AD0P/wA9T/7wPW/+8D6P/vA+r/8ARJ/+8ES//vBE//8ARV/+8EV//wBGL/7wRk/+8EZv/vACIABv/yAAv/8gBa//UAXf/1ALz/9QD1//QA/f/0AQj/9QEZ//UBM//1AVj/9QFs//IBbf/yAW//8gFw//IBcf/yAoD/9QKB//UC7//1A3L/9QOV//UDnv/1A6b/9QOn//IDqP/yA6v/8gO3//UDv//1A+D/9QPi//UD5P/1BEH/9QRD//UERf/1ADIAUf/uAFL/7gBU/+4AwP/uAOv/7gDsABQA7//uAPD/7gDy/+4A8//uAPT/7gD1/+0A9//uAPj/7QD5/+4A+v/uAPv/0AD9/+4A///uAQT/7gEz/+0BNf/uAT3/7QFE/+4BSf/uAVj/7QJ2/+4Cvv/uAsD/7gLC/+4Cw//uA2z/7gOR/+4Dk//uA5j/7gOd/+4Drf/uA7P/7gPU/+4D1v/uA+b/7QPo/+4ESf/uBEv/7gRR/+0EU//tBFX/7gRi/+4EZP/uBGb/7gAKAAb/9QAL//UBbP/1AW3/9QFv//UBcP/1AXH/9QOn//UDqP/1A6v/9QBZAEf/8ABI//AASf/wAEv/8ABT/8cAVf/wAJP/8ACY//AAuv/wAMf/8ADI//AA9v/wAQL/8AEX/8cBG//rAR3/8AEh//ABOf/wAUv/8AFM//ABVv/wAbz/6wHA/+kByP/rAcr/6wJt//ACbv/wAm//8AJw//ACcf/wAnf/xwJ4/8cCef/HAnr/xwJ7/8cCif/wAov/8AKN//ACj//wApH/8AKT//AClf/wApf/8AKZ//ACm//wAp3/8AKf//ACof/wAqP/8ALF/8cCx//HAsn/xwNq//ADcP/HA3b/xwOQ//ADkv/HA5T/8AOX//ADsv/wA7j/8AO9//ADy//wA83/8APO//AD2P/HA9r/8APc/8cD6//wBAf/8AQJ//AEC//wBA3/8AQP//AEEf/wBBP/8AQV//AEG//HBB3/xwQf/8cEIf/HBCP/xwQl/8cEJ//HBCn/8AQr//AELf/wBC//xwQx//AAoQAGAA0ACwANAEX/8ABH/8AASP/AAEn/wABKAA0AS//AAFP/4gBV/8AAWgALAF0ACwCT/8AAmP/AALr/wAC8AAsAxv/WAMf/wADI/8AAy//VAOz/yADx/9cA9v/AAQL/wAED/9cBF//iARkACwEb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AD4AEgBFAEcAGQBJAEkAHABMAEwAHQBRAFQAHgBWAFYAIgBaAFoAIwBcAF4AJACKAIoAJwCwALMAKAC8ALwALADAAMAALQDGAMYALgDTANQALwDWANYAMQDZANkAMgDbAN0AMwDfAN8ANgDhAOEANwDjAOMAOADlAOUAOQDrAOsAOgDtAO0AOwD2APYAPAD7APsAPQD9AP4APgEDAQQAQAEJAQkAQgEMAQwAQwEXARkARAErAS0ARwEwATAASgEyATIASwFJAUkATAFsAXIATQF2AXcAVAIoAigAVgIqAisAVwJGAkcAWQJJAkkAWwJLAnEAXAJ2AnsAgwKAApAAiQKSApsAmgKkAqYApAKoAqgApwKqAqoAqAKsAqwAqQKuAq4AqgKxArEAqwKzArMArAK1ArUArQK3ArcArgK5ArkArwK7ArsAsAK9AskAsQLLAssAvgLNAs0AvwLPAs8AwALaAtoAwQLcAtwAwgLeAt4AwwLgAuAAxALiAuIAxQLkAuQAxgLmAuYAxwLoAugAyALqAuoAyQLsAuwAygLuAvYAywNSA1cA1ANaA2kA2gNsA2wA6gNwA3AA6wNyA3IA7AN2A3YA7QN5A3oA7gN8A4UA8AOHA4kA+gOLA5AA/QOSA5gBAwOeA58BCgOhA6EBDAOjA6MBDQOlA6gBDgOrA7ABEgOyA7IBGAO2A7cBGQO8A8cBGwPKA8sBJwPNA9ABKQPXA9gBLQPcA9wBLwPeA+QBMAPpA+oBNwPuBBYBOQQYBBgBYgQaBCcBYwQvBC8BcQQyBDIBcgQ0BDQBcwRABEUBdARIBEgBegRKBEoBewRMBEwBfAROBE8BfQRUBFcBfwRaBFoBgwRcBF0BhARfBF8BhgRjBGMBhwRlBGUBiARpBGkBiQSpBKkBigACAU4AEAAQAAEAEgASAAEAJQAlAAIAJgAmAAMAJwAnAAQAKAAoAAUAKQApAAYALAAtAAcALgAuAAgALwAvAAkAMAAwAAoAMQAyAAcAMwAzAAUANAA0AAsAOAA4AAwAOQA5AAgAOgA6AA0AOwA7AA4APAA8AA8APQA9ABAAPgA+ABEARQBFABIARgBGABMARwBHABQASQBJABUATABMABYAUQBSABYAUwBTABcAVABUABMAVgBWABgAWgBaABkAXABcABoAXQBdABkAXgBeABsAigCKABMAsACwABwAsQCxAAIAsgCyAAUAswCzAAIAvAC8ABkAwADAABYAxgDGABMA0wDUAB0A1gDWAAcA2QDZAA8A2wDcAAcA3QDdAB4A3wDfAAcA4QDhAAcA4wDjAB0A5QDlAB0A6wDrAB8A7QDtABoA9gD2ABMA+wD7ACAA/QD9ACAA/gD+ABMBAwEEACABCQEJACABDAEMAAIBFwEXABcBGAEYAA0BGQEZABkBKwErABMBLAEsABwBLQEtAB8BMAEwAAkBMgEyAAkBSQFJAB8BbgFuAAEBcgFyAAEBdgF3AAECKAIoAAQCKgIrAAUCRgJHAAUCSQJJAAwCSwJRAAICUgJSAAQCUwJWAAYCVwJbAAcCXAJgAAUCYQJkAAgCZQJlABACZgJsABICbQJtABQCbgJxABUCdgJ2ABYCdwJ7ABcCgAKBABkCggKCAAICgwKDABIChAKEAAIChQKFABIChgKGAAIChwKHABICiAKIAAQCiQKJABQCigKKAAQCiwKLABQCjAKMAAQCjQKNABQCjgKOAAQCjwKPABQCkAKQAAUCkgKSAAYCkwKTABUClAKUAAYClQKVABUClgKWAAYClwKXABUCmAKYAAYCmQKZABUCmgKaAAYCmwKbABUCpAKkAAcCpQKlABYCpgKmAAcCqAKoAAcCqgKqAAcCrAKsAAcCrgKuAAcCsQKxAAgCswKzAAkCtQK1AAoCtwK3AAoCuQK5AAoCuwK7AAoCvQK9AAcCvgK+ABYCvwK/AAcCwALAABYCwQLBAAcCwgLDABYCxALEAAUCxQLFABcCxgLGAAUCxwLHABcCyALIAAUCyQLJABcCywLLABgCzQLNABgCzwLPABgC2gLaAAwC3ALcAAwC3gLeAAwC4ALgAAgC4gLiAAgC5ALkAAgC5gLmAAgC6ALoAAgC6gLqAAgC7ALsAA4C7gLuABAC7wLvABkC8ALwABAC8QLxABEC8gLyABsC8wLzABEC9AL0ABsC9QL1ABEC9gL2ABsDUgNSAAIDUwNTAAYDVANVAAcDVgNWAAUDVwNXABADWgNaAAIDWwNbAAMDXANcAAYDXQNdABEDXgNfAAcDYANgAAkDYQNiAAcDYwNjAAUDZANkAAsDZQNlAAwDZgNmABADZwNnAA8DaANoAAcDaQNpABADbANsABYDcANwABcDcgNyABkDdgN2ABcDeQN5AAYDegN6ABwDfAN9AAcDfgN+AAgDfwOAAAkDgQOBAB4DggOCAAIDgwODAAMDhAOEABwDhQOFAAYDhwOIAAcDiQOJAAUDiwOLAAsDjAOMAAQDjQONAAwDjgOOAA8DjwOPABIDkAOQABUDkgOSABcDkwOTABMDlAOUABQDlQOVABkDlgOWABoDlwOXABUDmAOYAB8DngOeABkDnwOfAA4DoQOhAA4DowOjAA4DpQOlABADpgOmABkDrAOsAAcDrQOtABYDrgOuAAIDrwOvABIDsAOwAAYDsgOyABUDtgO2AA0DtwO3ABkDvAO8AAQDvQO9ABQDvgO+ABADvwO/ABkDwAPAAAcDwQPBAA8DwgPCABoDwwPDAAcDxAPEAAIDxQPFABIDxgPGAAIDxwPHABIDygPKAAYDywPLABUDzQPOABUDzwPPAA8D0APQABoD1wPXAAUD2APYABcD3APcABcD3gPeABMD3wPfAB4D4APgABkD4QPhAB4D4gPiABkD4wPjAB4D5APkABkD6QPpAA8D6gPqABoD7gPuAAID7wPvABID8APwAAID8QPxABID8gPyAAID8wPzABID9AP0AAID9QP1ABID9gP2AAID9wP3ABID+AP4AAID+QP5ABID+gP6AAID+wP7ABID/AP8AAID/QP9ABID/gP+AAID/wP/ABIEAAQAAAIEAQQBABIEAgQCAAIEAwQDABIEBAQEAAIEBQQFABIEBgQGAAYEBwQHABUECAQIAAYECQQJABUECgQKAAYECwQLABUEDAQMAAYEDQQNABUEDgQOAAYEDwQPABUEEAQQAAYEEQQRABUEEgQSAAYEEwQTABUEFAQUAAYEFQQVABUEFgQWAAcEGAQYAAcEGgQaAAUEGwQbABcEHAQcAAUEHQQdABcEHgQeAAUEHwQfABcEIAQgAAUEIQQhABcEIgQiAAUEIwQjABcEJAQkAAUEJQQlABcEJgQmAAUEJwQnABcELwQvABcEMgQyAAgENAQ0AAgEQARAABAEQQRBABkEQgRCABAEQwRDABkERAREABAERQRFABkESARIAAkESgRKAAcETARMAAwETgROAA8ETwRPABoEVARUABwEVQRVAB8EVgRWAA8EVwRXABoEWgRaABYEXARcAB0EXQRdABwEXwRfAAkEYwRjAAcEZQRlAAcEaQRpABAEqQSpAAUAAgFtAAYABgABAAsACwABABAAEAAWABEAEQAZABIAEgAWACUAJQACACcAJwAIACsAKwAIAC4ALgAaADMAMwAIADUANQAIADcANwAbADgAOAAJADkAOQAKADoAOgALADsAOwAMADwAPAAXAD0APQANAD4APgAYAEUARQADAEcASQAEAEsASwAEAFEAUgAFAFMAUwAGAFQAVAAFAFUAVQAEAFcAVwAHAFkAWQAOAFoAWgAPAFwAXAAcAF0AXQAPAF4AXgAQAIMAgwAIAJIAkgAIAJMAkwAEAJcAlwAIAJgAmAAEAJoAmgAOALEAsQACALIAsgAIALMAswACALoAugAEALwAvAAPAMAAwAAFAMcAyAAEAMoAygAOANEA0QAJANIA0gAIANMA0wARANUA1QAJANkA2QAXANwA3AARAN0A3QAVAOAA4AASAOsA6wAFAO0A7QAcAO8A8AAFAPEA8QATAPIA9AAFAPYA9gAEAPcA9wAFAPgA+AAUAPkA+gAFAP0A/QAFAP8A/wAFAQIBAgAEAQMBAwATAQQBBAAFAQcBBwAIAQwBDAACARYBFgAIARcBFwAGARgBGAALARkBGQAPARoBGgAIARwBHAAIAR0BHQAEAR4BHgAIASABIAAIASEBIQAEATIBMgAJATUBNQAFATgBOAAIATkBOQAEAToBOgAJAUQBRAAFAUkBSQAFAUsBTAAEAVEBUQARAVUBVQAIAVYBVgAEAWkBagAZAWwBbQABAW4BbgAWAW8BcQABAXIBcgAWAXYBdwAWAigCKQAIAisCLAAIAkUCRQAZAksCUQACAlICUgAIAlwCYAAIAmECZAAKAmUCZQANAmYCbAADAm0CcQAEAnYCdgAFAncCewAGAnwCfwAOAoACgQAPAoICggACAoMCgwADAoQChAACAoUChQADAoYChgACAocChwADAogCiAAIAokCiQAEAooCigAIAosCiwAEAowCjAAIAo0CjQAEAo4CjgAIAo8CjwAEApECkQAEApMCkwAEApUClQAEApcClwAEApkCmQAEApsCmwAEApwCnAAIAp0CnQAEAp4CngAIAp8CnwAEAqACoAAIAqECoQAEAqICogAIAqMCowAEArECsQAaAr4CvgAFAsACwAAFAsICwwAFAsQCxAAIAsUCxQAGAsYCxgAIAscCxwAGAsgCyAAIAskCyQAGAtAC0AAbAtEC0QAH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ALgAuWMyc2MEWGMyc2MEXmMyc2MEZGMyc2MEamMyc2MEamMyc2MEamMyc2MEamMyc2MEamMyc2MEamMyc2MEamNjbXAEcGNjbXAEcGNjbXAEcGNjbXAEcGNjbXAEcGNjbXAEcGNjbXAEcGNjbXAEcGNjbXAEcGNjbXAEcGRsaWcEeGRsaWcEfmRsaWcEhGRsaWcEimRsaWcEimRsaWcEimRsaWcEimRsaWcEimRsaWcEimRsaWcEimRub20EkGRub20ElmRub20EnGRub20EomRub20EomRub20EomRub20EomRub20EomRub20EomRub20EomZyYWMEqGZyYWMEqGZyYWMEqGZyYWMEqGZyYWMEqGZyYWMEqGZyYWMEqGZyYWMEqGZyYWMEqGZyYWMEqGxpZ2EEsmxpZ2EEumxudW0EwGxudW0ExmxudW0EzGxudW0E0mxudW0E0mxudW0E0mxudW0E0mxudW0E0mxudW0E0mxudW0E0mxvY2wE2GxvY2wE3mxvY2wE5G51bXIE6m51bXIE8G51bXIE9m51bXIE/G51bXIE/G51bXIE/G51bXIE/G51bXIE/G51bXIE/G51bXIE/G9udW0FAm9udW0FCG9udW0FDm9udW0FFG9udW0FFG9udW0FFG9udW0FFG9udW0FFG9udW0FFG9udW0FFHBudW0FGnBudW0FIHBudW0FJnBudW0FLHBudW0FLHBudW0FLHBudW0FLHBudW0FLHBudW0FLHBudW0FLHNtY3AFMnNtY3AFOHNtY3AFPnNtY3AFRHNtY3AFRHNtY3AFRHNtY3AFRHNtY3AFRHNtY3AFRHNtY3AFRHNzMDEFSnNzMDEFUHNzMDEFVnNzMDEFXHNzMDEFXHNzMDEFXHNzMDEFXHNzMDEFXHNzMDEFXHNzMDEFXHNzMDIFYnNzMDIFaHNzMDIFbnNzMDIFdHNzMDIFdHNzMDIFdHNzMDIFdHNzMDIFdHNzMDIFdHNzMDIFdHNzMDMFenNzMDMFgHNzMDMFhnNzMDMFjHNzMDMFjHNzMDMFjHNzMDMFjHNzMDMFjHNzMDMFjHNzMDMFjHNzMDQFknNzMDQFmHNzMDQFnnNzMDQFpHNzMDQFpHNzMDQFpHNzMDQFpHNzMDQFpHNzMDQFpHNzMDQFpHNzMDUFqnNzMDUFsHNzMDUFtnNzMDUFvHNzMDUFvHNzMDUFvHNzMDUFvHNzMDUFvHNzMDUFvHNzMDUFvHNzMDYFwnNzMDYFyHNzMDYFznNzMDYF1HNzMDYF1HNzMDYF1HNzMDYF1HNzMDYF1HNzMDYF1HNzMDYF1HNzMDcF2nNzMDcF4HNzMDcF5nNzMDcF7HNzMDcF7HNzMDcF7HNzMDcF7HNzMDcF7HNzMDcF7HNzMDcF7HRudW0F8nRudW0F+HRudW0F/nRudW0GBHRudW0GBHRudW0GBHRudW0GBHRudW0GBHRudW0GBHRudW0GBAAAAAEAAQAAAAEAAwAAAAEAAgAAAAEAAAAAAAIACAAJAAAAAQAOAAAAAQAQAAAAAQAPAAAAAQANAAAAAQBDAAAAAQBFAAAAAQBEAAAAAQBCAAAAAwA/AEAAQQAAAAIAEQASAAAAAQASAAAAAQA8AAAAAQA+AAAAAQA9AAAAAQA7AAAAAQAKAAAAAQAMAAAAAQALAAAAAQBHAAAAAQBJAAAAAQBIAAAAAQBGAAAAAQAwAAAAAQAyAAAAAQAxAAAAAQAvAAAAAQA4AAAAAQA6AAAAAQA5AAAAAQA3AAAAAQAFAAAAAQAHAAAAAQAGAAAAAQAEAAAAAQAUAAAAAQAWAAAAAQAVAAAAAQATAAAAAQAYAAAAAQAaAAAAAQAZAAAAAQAXAAAAAQAcAAAAAQAeAAAAAQAdAAAAAQAbAAAAAQAgAAAAAQAiAAAAAQAhAAAAAQAfAAAAAQAkAAAAAQAmAAAAAQAlAAAAAQAjAAAAAQAoAAAAAQAqAAAAAQApAAAAAQAnAAAAAQAsAAAAAQAuAAAAAQAtAAAAAQArAAAAAQA0AAAAAQA2AAAAAQA1AAAAAQAzAEsAmACYAJgAmAQmBCYEJgQmBxQHwA5QDlAOZg6IDogOiA6IDr4O5A8SDxIPEg8SDyYPJg8mDyYPOg86DzoPOg9OD04PTg9OD2APYA9gD2APeg96D3oPeg+8D7wPvA+8D9oP2g/aD9oP+A/4D/gP+BAqECoQKhAqEFwQXBBcEFwQjhCiENoQzBDMEMwQzBDaENoQ2hDaEQYAAQAAAAEACAACAcQA3wHnAboBuwG8Ab0BvgG/AcABwQHCAcMBxAHFAcYBxwHIAckBygHLAcwBzQHOAc8B0AHRAdIB0wHoAekCQwI7AeoB6wHsAe0B7gHvAfAB8QHyAfMB9AH1AfYB9wH4AfkB+gH7AfwB/QH+AgACAQTcAgICAwIEAgUCBgIHAggCCQIKAgsCLwIPAhACEQIUAhUCFgIXAhgCGQIbAhwCHgIdAvsC/AL9Av4C/wMAAwEDAgMDAwQDBQMGAwcDCAMJAwoDCwMMAw0DDgMPAxADEQMSAxMDFAMVAxYDFwMYAxkDGgMbAxwDHQMeAx8DIAMhAyIDIwMkAyUDJgMnAygDKQMqAysDLAMtAy4DLwMwAzEDMgMzAzQDNQM2AzcDOAM5AzoDOwM8Az0DPgM/A0ADQQNCA0MDRQNEA0YDRwNIA0kDSgNLA0wDTQNOA08DUANRBKoEqwSsBK0ErgSvBLAEsQSyBLMEtAS1BLYEtwS4BLkEugS7BLwEvQS+BL8EwATBBMIEwwTEBMUB/wTGBMcEyATJBMoEywTMBM0EzgTPBNAE0QTSBNME1ATVBNcE2ATaAhoE2wIOBNYCEwINBNkCDAISAAEA3wAIACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AD0APgBlAGcAhQCSALAAsQCyALMAtAC1ALYAtwC4ALkA0QDSANMA1ADVANYA1wDYANkA2gDbANwA3QDeAN8A4ADhAOIA4wDkAOUA5gDnAOgBLAEwATIBOAE6ATwBPgE/AUUBRgF/AYUBigGNAkYCRwJJAksCTAJNAk4CTwJQAlECUgJTAlQCVQJWAlcCWAJZAloCWwJcAl0CXgJfAmACYQJiAmMCZAJlAoIChAKGAogCigKMAo4CkAKSApQClgKYApoCnAKeAqACogKkAqYCqAKqAqwCrgKxArMCtQK3ArkCuwK9Ar8CwQLEAsYCyALKAswCzgLQAtIC1ALYAtoC3ALeAuAC4gLkAuYC6ALqAuwC7gLwAvEC8wL1A1IDUwNUA1UDVgNXA1gDWgNbA1wDXQNeA18DYANhA2MDZANlA2YDZwNoA2kDeQN6A3sDfAN9A34DfwOAA4EDggODA4QDhQOGA4cDiAOJA4oDiwOMA40DjgO6A7wDvgPTA9kD3wRIBEoETgRWBFgEXQRpAAEAAAABAAgAAgF0ALcBugG7AbwBvQG+Ab8BwAHBAcIBwwHEAcUBxgHHAcgByQHKAcsBzAHNAc4BzwHQAdEB0gHTAvwDLwI7AfoEyQTKAfsB/AH9Af4B/wIABM0EzgTQBNME3AICAgMCBAIFAgYCBwIIAgkCCgILAfQB9QH2AfcB+AH5Ai8CDwIQAhECFAIVAhcCGQL9Av4C/wMAAwEDAgMDAwQDBQMGAwcDCAMJAwoDCwMMAw0DDgMPAxADEQMSAxMDFAMVAxYDFwMYA04DGQMaAxsDHAMdAx4DHwMgAyEDIgMjAyQDJQMmAycDKAMpAyoDKwMsAy0DLgMwAzEDMgMzAzQDNQM2AzcDOAM5AzoDOwM8Az0DPgM/A0ADQQNCA0MDRQNEA0YDRwNIA0kDSgNLA0wDTQNPA1ADUQTIBMsEzATPBNEE0gIBBNQEwATBBMIEwwTEBMUExgTHBNUE1wTYAhgE2gIaBNsC+wIOBNYCEwINBNkCFgIMAhIAAQC3AEUARgBHAEgASQBKAEsATABNAE4ATwBQAFEAUgBTAFQAVQBWAFcAWABZAFoAWwBcAF0AXgCHAIwAkwDpAOoA6wDsAO0A7gDvAPAA8QDyAPMA9AD1APYA9wD4APkA+gD7APwA/QD+AP8BAAEBAQIBAwEEAQUBBgEtATEBMwE5ATsBPQFAAUcCSgJmAmcCaAJpAmoCawJsAm0CbgJvAnACcQJyAnMCdAJ1AnYCdwJ4AnkCegJ7AnwCfQJ+An8CgAKBAoMChQKHAokCiwKNAo8CkQKTApUClwKZApsCnQKfAqECowKlAqcCqQKrAq0CsgK0ArYCuAK6ArwCvgLAAsICxQLHAskCywLNAs8C0QLTAtUC2QLbAt0C3wLhAuMC5QLnAukC6wLtAu8C8gL0AvYDjwOQA5EDkgOTA5QDlQOWA5cDmAOZA5oDmwOcA50DngO7A70DvwPNA9QD2gPgBEYESQRLBE8EVwRZBFoEXgRqAAYAAAAGABIAKgBCAFoAcgCKAAMAAAABABIAAQCQAAEAAABKAAEAAQBNAAMAAAABABIAAQB4AAEAAABKAAEAAQBOAAMAAAABABIAAQBgAAEAAABKAAEAAQKtAAMAAAABABIAAQBIAAEAAABKAAEAAQOaAAMAAAABABIAAQAwAAEAAABKAAEAAQOcAAMAAAABABIAAQAYAAEAAABKAAEAAQQZAAIAAQCnAKsAAAAEAAAAAQAIAAEGHgA2AHIApACuALgAygD8AQ4BGAFKAWQBfgGQAboB7AH2AhgCMgJEAnYCiAKiAswC3gMQAxoDJAM2A2gDcgN8A4YDoAO6A8wD9gQoBDIEVARuBIAEsgTEBN4FCAUaBSQFLgU4BUIFbAWWBcAF6gYUAAYADgAUABoAIAAmACwCSwACAKcCTAACAKgCTgACAKkD8AACAKoEegACAKsD7gACAKwAAQAEBIcAAgCsAAEABAKIAAIAqAACAAYADASJAAIArASLAAIBogAGAA4AFAAaACAAJgAsAlMAAgCnAlQAAgCoBAoAAgCpBAgAAgCqBHwAAgCrBAYAAgCsAAIABgAMBHYAAgCoAqIAAgGiAAEABASNAAIArAAGAA4AFAAaACAAJgAsAlcAAgCnAlgAAgCoAqYAAgCpBBYAAgCqBH4AAgCrBBgAAgCsAAMACAAOABQEjwACAKgEkQACAKwCswACAaIAAwAIAA4AFAK1AAIAqASTAAIArAK3AAIBogACAAYADAOsAAIAqASVAAIArAAFAAwAEgAYAB4AJAR4AAIApwK9AAIAqAJbAAIAqQSXAAIArAK/AAIBogAGAA4AFAAaACAAJgAsAlwAAgCnAl0AAgCoAl8AAgCpBBwAAgCqBIAAAgCrBBoAAgCsAAEABASZAAIAqAAEAAoAEAAWABwCygACAKgEggACAKsEmwACAKwCzAACAaIAAwAIAA4AFALQAAIAqASdAAIArALWAAIBogACAAYADASfAAIArALaAAIBogAGAA4AFAAaACAAJgAsAmEAAgCnAmIAAgCoAuAAAgCpBDQAAgCqBIQAAgCrBDIAAgCsAAIABgAMBKEAAgCpBKMAAgCsAAMACAAOABQDnwACAKcDoQACAKgEpQACAKwABQAMABIAGAAeACQDpQACAKcCZQACAKgERAACAKkEQgACAKoEQAACAKwAAgAGAAwC8QACAKgEpwACAKwABgAOABQAGgAgACYALAJmAAIApwJnAAIAqAJpAAIAqQPxAAIAqgR7AAIAqwPvAAIArAABAAQEiAACAKwAAQAEAokAAgCoAAIABgAMBIoAAgCsBIwAAgGiAAYADgAUABoAIAAmACwCbgACAKcCbwACAKgECwACAKkECQACAKoEfQACAKsEBwACAKwAAQAEBHcAAgCoAAEABASOAAIArAABAAQEGQACAKwAAwAIAA4AFASQAAIAqASSAAIArAK0AAIBogADAAgADgAUArYAAgCoBJQAAgCsArgAAgGiAAIABgAMA60AAgCoBJYAAgCsAAUADAASABgAHgAkBHkAAgCnAr4AAgCoAnYAAgCpBJgAAgCsAsAAAgGiAAYADgAUABoAIAAmACwCdwACAKcCeAACAKgCegACAKkEHQACAKoEgQACAKsEGwACAKwAAQAEBJoAAgCoAAQACgAQABYAHALLAAIAqASDAAIAqwScAAIArALNAAIBogADAAgADgAUAtEAAgCoBJ4AAgCsAtcAAgGiAAIABgAMBKAAAgCsAtsAAgGiAAYADgAUABoAIAAmACwCfAACAKcCfQACAKgC4QACAKkENQACAKoEhQACAKsEMwACAKwAAgAGAAwEogACAKkEpAACAKwAAwAIAA4AFAOgAAIApwOiAAIAqASmAAIArAAFAAwAEgAYAB4AJAOmAAIApwKAAAIAqARFAAIAqQRDAAIAqgRBAAIArAACAAYADALyAAIAqASoAAIArAABAAQC9wACAKgAAQAEAvkAAgCoAAEABAL4AAIAqAABAAQC+gACAKgABQAMABIAGAAeACQCcgACAKcCcwACAKgCpwACAKkEFwACAKoEfwACAKsABQAMABIAGAAeACQEKgACAKcEKAACAKgELgACAKkELAACAKoEMAACAKwABQAMABIAGAAeACQEKwACAKcEKQACAKgELwACAKkELQACAKoEMQACAKwABQAMABIAGAAeACQEOAACAKcENgACAKgEPAACAKkEOgACAKoEPgACAKwABQAMABIAGAAeACQEOQACAKcENwACAKgEPQACAKkEOwACAKoEPwACAKwAAQAEBIYAAgCoAAIAEQAlACkAAAArAC0ABQAvADQACAA2ADsADgA9AD4AFABFAEkAFgBLAE0AGwBPAFQAHgBWAFsAJABdAF4AKgCBAIEALACDAIMALQCGAIYALgCJAIkALwCMAIwAMACXAJoAMQDPAM8ANQABAAAAAQAIAAEABgACAAEAAgLUAtUAAQAAAAEACAACAA4ABATdBN4E3wTgAAEABAKGAocCmAKZAAQAAAABAAgAAQAmAAIACgAcAAIABgAMAaMAAgBKAagAAgBYAAEABAGpAAIAWAABAAIASgBXAAQAAAABAAgAAQBEAAIACgAUAAEABAGkAAIATQABAAQBpgACAE0ABAAAAAEACAABAB4AAgAKABQAAQAEAaUAAgBQAAEABAGnAAIAUAABAAIASgGjAAEAAAABAAgAAQAGAZUAAQABAEsAAQAAAAEACAABAAYBJwABAAEAugABAAAAAQAIAAEABgGsAAEAAQA2AAEAAAABAAgAAgAcAAIB4wHkAAEAAAABAAgAAgAKAAIB5QHmAAEAAgAvAE8AAQAAAAEACAACAB4ADAIoAioCKQIrAiwCHwIgAiEBrgIjAiQCJQABAAwAJwAoACsAMwA1AEYARwBIAEsAUwBUAFUAAQAAAAEACAACAAwAAwImAicCJwABAAMASQBLAa4AAQAAAAEACAACAGYACAI9Ai0CLgIwAjECOQI6AjwAAQAAAAEACAACABYACAAbABUAFgAXABgAGQAdABQAAQAIAa0CIgRwBHEEcgRzBHQEdQABAAAAAQAIAAIAFgAIBHUCIgRwBHEEcgRzAa0EdAABAAgAFAAVABYAFwAYABkAGwAdAAEAAAABAAgAAgAWAAgAFQAWABcAGAAZABsAHQAUAAEACAItAi4CMAIxAjkCOgI8Aj0AAQAAAAEACAABAAYBaQABAAEAEwAGAAAAAQAIAAMAAQASAAEAUgAAAAEAAABKAAIAAgF8AXwAAAHUAd0AAQABAAAAAQAIAAEAKAHAAAEAAAABAAgAAgAaAAoCMgB6AHMAdAIzAjQCNQI2AjcCOAACAAEAFAAdAAAAAQAAAAEACAACACYAEAHUAdUB1gHXAdgB2QHaAdsB3AHdAkACPgJBAkICPwThAAEAEAAUABUAFgAXABgAGQAaABsAHAAdAE0ATgKtA5oDnAQZ\",\n  \"Roboto-MediumItalic.ttf\": \"AAEAAAARAQAABAAQR1BPUyEcbY8AAhQcAABZakdTVULEnLdcAAJtiAAAGXxPUy8yoQuw+wAAAZgAAABgY21hcNhuDxIAABpsAAAGXGN2dCAElytKAAAjUAAAAFZmcGdte/lhqwAAIMgAAAG8Z2FzcAAIABMAAhQQAAAADGdseWZgubUGAAAtcAAB42poZG14LxpP7wAAFYAAAATsaGVhZPi2qwsAAAEcAAAANmhoZWEM2xKRAAABVAAAACRobXR4rRqYNAAAAfgAABOIbG9jYSKZqcwAACOoAAAJxm1heHAHEgLZAAABeAAAACBuYW1lRuRz4wACENwAAAMUcG9zdP9hAGQAAhPwAAAAIHByZXAbsfg2AAAihAAAAMwAAQAAAAIAALDh6v1fDzz1ABsIAAAAAADE8BEuAAAAANDbTpf6Qf3VCXgIcwACAAkAAgAAAAAAAAABAAAHbP4MAAAJN/pB/mwJeAgAAbMAAAAAAAAAAAAAAAAE4gABAAAE4gCPABYAVgAFAAEAAAAAAA4AAAIAAfIABgABAAMEGQH0AAUAAAWaBTMAAAEfBZoFMwAAA9EAZgIAAAACAAAAAAAAAAAA4AAK/1AAIX8AAAAhAAAAAEdPT0cAAQAA//0GAP4AAGYHmgIAIAABnwAAAAAEOgWwACAAIAACA5YAZAAKAAAACgAAAfkAAAH5AAACHwA3Ao4AoQTHADsEcwBCBb0AtQUAAC0BWgCQAr8AaALG/5QDeABnBF0APQG//4kClgA2AjUAMAMc/38EcwBgBHMA7wRzAAsEcwAmBHMACQRzAFoEcwBjBHMAhgRzADsEcwCOAhkAKwHi/5oD/AAyBGIAYgQUAC8D0ACVBvsAMgU0/6QE7wAnBRsAZQUcACcEbQAnBE0AJwVSAGsFjQAnAjsANQRZAAME7gAnBD0AJwbVACcFjAAnBWYAawUAACcFZgBkBOIAJwS5ACQEwACcBRkAWwUPAJsG3gC3BPP/wwTFAKEEtv/lAir/7wNIAKwCKv96A1sARAOK/3kCigDKBD0AIgRoABAEGgA4BGsAOwQ0ADsCygBfBHD/9wRZAA0CBQAfAfz/DAQXABECBQAfBssAEARbAA0EdQA5BGj/xwRyADsCxAAQBAsAHAKfADsEWgBKA+EAZAXOAHcD8f+5A9H/tQPx/+cCpAAwAf0AIAKk/5kFMgBbAfkAAAIY/+YEZQBMBJv/9gV8AAgExQBQAff/7ATc/9wDdADRBh4AXgOAAL4DzgBJBFUAgAKWADYGHgBeA8cA7wL9AOQEMwAbAukAVgLpAGcCkQDIBKH/3QPZAH0COwCeAgr/0wLpAOEDlQC+A84AAgWtALkGBgCxBjAAlgPQ/9IFNP+kBTT/pAU0/6QFNP+kBTT/pAU0/6QHVf+HBRsAZQRtACcEbQAnBG0AJwRtACcCOwA1AjsANQI7ADUCOwA1BTr//wWMACcFZgBrBWYAawVmAGsFZgBrBWYAawQtACMFZAAVBRkAWwUZAFsFGQBbBRkAWwTFAKEErwAnBMsAGwQ9ACIEPQAiBD0AIgQ9ACIEPQAiBD0AIgaXAA8EGgA4BDQAOwQ0ADsENAA7BDQAOwIUACICFAAiAhQAIgIUACIEjQBGBFsADQR1ADkEdQA5BHUAOQR1ADkEdQA5BHgAPQRvACoEWgBKBFoASgRaAEoEWgBKA9H/tQR+/80D0f+1BTT/pAQ9ACIFNP+kBD0AIgU0/6QEPQAiBRsAZQQaADgFGwBlBBoAOAUbAGUEGgA4BRsAZQQaADgFHAAnBQEAOwU6//8EiQA7BG0AJwQ0ADsEbQAnBDQAOwRtACcENAA7BG0AJwQ0ADwEbQAnBDQAOwVSAGsEcP/3BVIAawRw//cFUgBrBHD/9wVSAGsEcP/3BY0AJwRZAA0FjgAuBHcAKwI7ADUCFAAUAjsANQIUAB8COwA1AhQAIgI7/44CBf92AjsANQIUACIGlAA1BAEAHwRZAAMCIP8PBO4AJwQXABEEfwAhBD0AJwIFAB8EPQAnAgX/ogQ9ACcCmwAfBD0AJwLhAB8ETAAhAkcAHwWMACcEWwANBYwAJwRbAA0FjAAnBFsADQRbAA0FcgAjBG8AEQVmAGsEdQA5BWYAawR1ADkFZgBrBHUAOQeDAFAHDQBCBOIAJwLEABAE4gAnAsT/nATiACcCxAAQBLkAJAQLABwEuQAkBAsAHAS5ACQECwAcBLkAJAQLABwEwACcAp8AOwTAAJwCxwA7BMAAnAKf/+IFGQBbBFoASgUZAFsEWgBKBRkAWwRaAEoFGQBbBFoASgUZAFsEWgBKBRkAWwRaAEoG3gC3Bc4AdwTFAKED0f+1BMUAoQS2/+UD8f/nBLb/5QPx/+cEtv/lA/H/5wIGAB4FaABOAsT/SgVpAFsEhQA2BYMAWwTWAEoCIP8PBVIAawRw//cFjAAnBFsADQU0/6QEPQAiB1X/hwaXAA8FZAAVBG8AKgU0/6QEPQAiBG0AJwQ0ADsCO//JAhT/fgVmAGsEdQA5BOIAJwLEAAcFGQBbBFoASgS5ACQECwAcBMAAnAKfADsCIP8PBCUANgG5AIoD0gECA54BDQPIAO8DawD+AgUBAgKnAPoCRf+oA8QA3gMRAKwCY//uAAr9VAAK/dcACvz2AAr91gAK/L8ACvygAlUBLgQlAOgFNP+kAjsAngTR/74F8f/GAp//ygV6ABgFKf9YBVAAHQKgAAsFNP+kBO8AJwRdAC4Fnf+qBG0AJwS2/+UFjQAnBVoAXgI7ADUE7gAnBRr/sgbVACcFjAAnBHcAAAVmAGsFjwAuBQAAJwR3/9wEwACcBMUAoQXLAFIE8//DBYkAdQU8AAkCOwA1BMUAoQRrAD4ESAAoBG8AEQKgAG4ESABXBGsAPgSr/+UD+QB3BG8AOARIACgEBQBmBG8AEQSHAGwCoABuBH8AIQRS/6gEof/dA+EAZAP+AD4EdQA5BNcAXQRv/8sEIQA7BHcAOAQXAG4ESABXBa0AMgPx/7kFpwA/BmsAVAKgAEwESABXBHUAOQRIAFcGawBUBJkAUARjAG0Ex/8kBkoAVwRtACcEbQAnBdoAkQRdAC4FOgBnBLkAJAI7ADUCOwA1BFkAAwhQ/8oIVwAuBjQAoATuACcFhwAnBO0AmwWJACUFNP+kBOsAIwTvACcEXQAuBeL/hARtACcHcf+lBLsAHgWHACcFhwAnBQoALgWI/8oG1QAnBY0AJwVmAGsFjwAuBQAAJwUbAGUEwACcBO0AmwY4AFYE8//DBdUAJQVoAMUHawArB8YAKwX1AIkGzQAuBOoAIwUxAE8HJgAyBNv/sAQ9ACIEZQBDBHYAIgNKABgE2v+FBDQAOwZO/60EAQAWBH8AGQR/ABkEVgAiBIH/vwXfACIEfgAZBHUAOQR/ABkEaP/HBBoAOAPhAFMD0f+1BbAAPQPx/7kEuAAZBE4AcAZmABkGwQASBPoATwZIACIEUAAiBCUAIwZcACQEWP+2BDQAOwQ0ADsEWQANA0oAGAQlADsECwAcAgUAHwIUACIB/P8MBqf/vQa5ABkEcAANBFYAIgR/ABkD0f+1BH8AGQcbAGAGKQBEBOoAIwRPACEG+wArBd0AGQTv/64ESP+cBxQAPgYQADAGwgAUBcMAFgj1ADUHxgAiBAr/qgPc/7UFiQB1BacAPwVaAGIEbwA2BP0AqAP5AHcE/QCoA/kAdwk3AGsIRgA5BVoAZgRvADgHFwBiBh4ASwcbAGAGKQBEBP0AVgQzAEUE4wA4AAr85gAK/Q4ACv4rAAr+PAAK+kEACvpvBYcAJwR/ABkE6gAjBE8AIQT2ACcEbf/HBFIAIgOPABEEXf/8A0r/ywSdAC4ECgARB3H/pQZO/60EuwAeBAEAFgUKAC4EVgAiBQ4AIwSRACEFHgA3BC4AGQZsAKQFgwBsBY0AJwR+ABkHngAnBYkAEQgRAC4GygARBgUAZQTjAEsFGwBlBBoAOATAAJwD4QBTBMUAoQP5AHcExQChA/kAVATz/8MD8f+5BwQAnQVQAFYFaADFBE4AcAVUALkEWwCFBWcA5wRZAA0F/wBiBKj/9AX/AGIEqP/0AjsANQdx/6UGTv+tBQQAIwRgACEFiP/KBIH/vwWNAC4EbwARBY0AJwR+ABkFaADFBE4AcAbVACcF3wAiAjsANQU0/6QEPQAiBTT/pAQ9ACIHVf+HBpcADwRtACcENAA7BWgASAQlADYFaABIBCUANgdx/6UGTv+tBLsAHgQBABYEjAAvBIz/8AWHACcEfwAZBYcAJwR/ABkFZgBrBHUAOQVaAGIEbwA2BVoAYgRvADYFMQBPBCUAIwTtAJsD0f+1BO0AmwPR/7UE7QCbA9H/tQVoAMUETgBwBF0ALgNKABgGzQAuBkgAIgSsADMDQwAJBPP/wwPx/7kE8//DA/H/uQTqADAEawA7BsYARQayAEcGLACqBQoAYQRjAJIEJwCMB43/3gZ0/94HygAnBnUACwTnAEwEFgA9BYkAkAUAAHMFNgBWBEgAKAWI/8oEgf+/BTT/pAQ9ACIE7wAnBGgAEAUcACcEawA7BRwAJwRrADsFjQAnBFkADQTuACcEFwARBO4AJwQXABEEPQAnAgX/5AbVACcGywAQBtUAJwbLABAFjAAnBFsADQUAACcEaP/HBOIAJwLE/94EuQAkBAsAHATAAJwCnwA7BQ8AmwPhAGQFDwCbA+EAZAbeALcFzgB3Bt4AtwXOAHcG3gC3Bc4AdwbeALcFzgB3BLb/5QPx/+cFNP+kBD0AIgU0/6QEPQAiBTT/pAQ9ACIFNP+kBD0AIgU0/6QEPQAiBTT/pAQ9ACIFNP+kBD0AIgU0/6QEPQAiBTT/pAQ9ACIFNP+kBD0AIgU0/6QEPQAiBTT/pAQ9ACIEbQAnBDQAOwRtACcENAA7BG0AJwQ0ADsEbQAnBDQAOwRtACcENAA7BG0AJwQ0ADsEbQAnBDQAOwRtACcENAA7AjsANQIUACICO///AgX/5AVmAGsEdQA5BWYAawR1ADkFZgBrBHUAOQVmAGsEdQA5BWYAawR1ADkFZgBrBHUAOQVmAGsEdQA5BWkAWwSFADYFaQBbBIUANgVpAFsEhQA2BWkAWwSFADYFaQBbBIUANgUZAFsEWgBKBRkAWwRaAEoFgwBbBNYASgWDAFsE1gBKBYMAWwTWAEoFgwBbBNYASgWDAFsE1gBKBMUAoQPR/7UExQChA9H/tQTFAKED0f+1BMUAoQPR/7UFrP6zAx4A7AP/AAAH9AAAA/8AAAf0AAACrgAAAgQAAAFcAAAEZgAAAikAAAGfAAAA1QAAAAoAAAKXADYClwA2BQsAnAYKAIIGCgCCA4v/TgG9AK4BuQCKAcr/pAGlAM0DBgC3Aw0AlwL7/6EERQBpBID/+wLAAJ4D5QAzBYUAMwFrADYHdgCdAVoAkAKOAKECaQBdAmD/+QQ+ADcDiv/hAukAYwNMAG4ETf/DBJv/9gZJAA0GjgArCFsAJwdYACoGZAAQBIn/9ARzAE4F0QBCBB4AOwSIABAFP//kBV3/5gXBAMIDzgAxB/kAIwTsAO0E9wB9Bg8AtgayAIIGpwCIBnkAtQR4AEUFdQAfBL7/pwRqAJwEmAA0CA8ASQIm/xcEdQAwBGIAYgP8/9UEFAAXA/cAOgJTAGkCjgBmAez/zwT+AF8EjgBLBKIAXwb2AF8G9gBfBPQAXwaNABcACgAAB/v/qQg1AFwDhv/XBGP/pwSmADoEY/+nA6YACgQ2AC0ETgARBB4ADgQXABQFGwAuBBoAFAUKAC4FJgAuBKEAOwQl/4cCpwEGBL0ACgLpADMC6QAIAukAIwLpABYC6QAKAun/8QLp//QC6f/jAukAbQLpABcEBP/ZBXwAQwU1AHAEyAAAA6YAkwXjAIwEYwBwBGsAOQQlAGIEHgAOBEUACgSmADcEVQAKBKYAOgTCAAoF4gAKA6YACgREAAoDwv/yAfcAGATDAAoEjAA/A7IACgPMAAoEYgAKBGcAOQRIAAoEhf+bAf8A6wOPAQQD9gDcA/YAEwP2ANgD9gDXA48BBAOPAQUDjwEEBEb/pAQlAG0EZwA5BXAAYgQdAFUEegAqAgr/BwGw/7IEFP/WByb/wQcpAAoFdgBiBLwACgRZAAsFOv+DBhT/qQQvAAwEyAALBEUACgSw/8EELwByBT4ACgRzAF0GXAAKBt4ACgU7AEoF+wALBE8ACwRnABMGagAKBG//0gQM//UGav+pBIQACgT9AAoFTgBiBcwAQARDAG0Eqf+kBmwAYgRzAF0EcwAKBdoANwS3ADQELwAMBKYAOgROAAQD4wAeCAEACgTP/9kEbwAQBCYANwR/ADsDkgCkBIcANAR7/8cEhgA7BDQAOwRwADAFWgBvBYEAcQVmAC4FvQByBb8AcgQFAKsEaQAfA6YACgRA/38EpP/RAukAigLpAGQC6QB9AukAiQLpAJYC6QB7AukApgRT/9QEGAAnBm8AOgSaAEcEzwBOAiD/DwIg/w8CFQAiAhX/fQIVACIESAAKBGL/lwRi/5cEJQBiBIX/mwSF/5sEhf+bBIX/mwSF/5sEhf+bBIX/mwRnADkDzAAKA8wACgPMAAoDzAAKAfcAGAH3ABgB9wAYAfcAGATCAAoEpgA6BKYAOgSmADoEpgA6BKYAOgRrADkEmwB0BIcAjgRzAFoEcwAJBHMAJgRzAAsEawA5BGsAOQRrADkEJQBtBIX/mwSF/5sEhf+bBGcAOQRnADkEZwA5BGcAOQRiAAoDzAAKA8wACgPMAAoDzAAKA8wACgSMAD8EjAA/BIwAPwSMAD8EwwAKAfcADQH3ABgB9wAYAff/igH3ABgDwv/yBEQACgOmAAoDpgAKA6YACgOmAAoEwgAKBMIACgTCAAoEpgA6BKYAOgSmADoERQAKBEUACgRFAAoEHgAOBB4ADgQeAA4EHgAOBCUAYgQlAGIEJQBiBGsAOQRrADkEawA5BGsAOQRrADkEawA6BeMAjAQlAG0EJQBtBBT/1gQU/9YEFP/WBIX/mwQI/20E//94AjP/ewSw/9IEYf8sBNL/4gSF/5sESAAKA8wACgQU/9YEwwAKAfcAGAREAAoF4gAKBKYAOgRVAAoEJQBiBCUAbQRG/6QB9wAYBCUAbQPMAAoDpgAKBB4ADgH3ABgB9wAYA8L/8gREAAoELwByBIX/mwRIAAoDpgAKA8wACgTIAAsF4gAKBMMACgSmADoEvQAKBFUACgRnADkEJQBiBEb/pAQvAA0EwwAKBGcAOgQlAG0F2gA3BMgACwQvAHIFfABDBTT/pAQ9ACIEbQAnBDQAOwIU/+QAAAABAAAE5AkKBAAAAgICAwUFBgYCAwMEBQIDAgQFBQUFBQUFBQUFAgIEBQUECAYGBgYFBQYGAwUGBQgGBgYGBgUFBgYIBgUFAgQCBAQDBQUFBQUDBQUCAgUCCAUFBQUDBQMFBAcEBAQDAgMGAgIFBQYFAgUEBwQEBQMHBAMFAwMDBQQDAgMEBAYHBwQGBgYGBgYIBgUFBQUDAwMDBgYGBgYGBgUGBgYGBgUFBQUFBQUFBQcFBQUFBQICAgIFBQUFBQUFBQUFBQUFBAUEBgUGBQYFBgUGBQYFBgUGBgYFBQUFBQUFBQUFBQYFBgUGBQYFBgUGBQMCAwIDAgMCAwIHBQUCBgUFBQIFAgUDBQMFAwYFBgUGBQUGBQYFBgUGBQgIBgMGAwYDBQUFBQUFBQUFAwUDBQMGBQYFBgUGBQYFBgUIBwUEBQUEBQQFBAIGAwYFBgUCBgUGBQYFCAcGBQYFBQUDAgYFBgMGBQUFBQMCBQIEBAQEAgMDBAMDAAAAAAAAAwUGAwUHAwYGBgMGBgUGBQUGBgMGBggGBQYGBgUFBQcGBgYDBQUFBQMFBQUEBQUFBQUDBQUFBAQFBQUFBQUFBgQGBwMFBQUHBQUFBwUFBwUGBQMDBQkJBwYGBgYGBgYFBwUIBQYGBgYIBgYGBgYFBgcGBwYICQcIBgYIBQUFBQQFBQcFBQUFBQcFBQUFBQQEBgQFBQcIBgcFBQcFBQUFBAUFAgICBwgFBQUEBQgHBgUIBwYFCAcIBgoJBQQGBgYFBgQGBAoJBgUIBwgHBgUGAAAAAAAABgUGBQYFBQQFBAUFCAcFBQYFBgUGBQcGBgUJBgkIBwYGBQUEBQQFBAYECAYGBQYFBgUHBQcFAwgHBgUGBQYFBgUGBQgHAwYFBgUIBwUFBgUGBQgHBQUFBQYFBgUGBQYFBgUGBQYEBgQGBAYFBQQIBwUEBgQGBAYFCAgHBgUFCQcJBwYFBgYGBQYFBgUGBQYFBgUGBQYFBgUFAggICAgGBQYFBgMFBQUDBgQGBAgHCAcIBwgHBQQGBQYFBgUGBQYFBgUGBQYF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RvpHAkcKRzFHXkdmR25HdkgASAhIEEg9SEVITUiPSJdIx0jPSQ1JFUkdSZtJo0oDSnJKhUqYSqpKvErOSt9K9Et+S/lMLUytTT5Nm03qTnFOok6qTwVPDU8VT4xPlE/sUE9Qt1EnUW9RulIqUjJSlFMPUyJTNFNGU1hTalPqVERUUFTPVOZU+VVhVXhV91ZtVnVWiFaQVw5XhVfgV/dYDlggWF9YZ1jDWMtY01ksWTRZoVopWmRadlp+Wspa0lraWuJa6lryWvpbAltHW8JbylwCXElciVzVXTBdmF3pXmle9V9VX11f22BcYINg3GDkYVNh6WIkYjZiiGLRYxxjdWN9Y61jtWQLZDhkQGTgZOhlIGVoZahl8GZLZrFnAGdzZ/5oXWh0aIZpBWkcaYVpjWmVaahpsGopaqBrCmshazhrSWuIa/lsZWzSbUBty25YbqVu9G9hb9BwSHC6cUxx3HJ5cyhzMHM4c7V0JXRpdK50xnTedOp09nVqddh2s3eIeBh4qHkFeV95k3mweel6AHoXevJ7YXt8e5d8BHxzfM99S317faV95n4ofoR+037ffut+938Dfw9/G391f8yALICKgNyBM4E/gUuBmIHpgk+CqYNUg++D+4QHhBOEH4QnhC+Ee4TLhNeE44UshXKFfoWKheGGMYZ2hn6HAIeNh5mHpYeth7+H0YgziI6ImoimiQmJZ4lziX+Ji4mXiaOJr4m3icmJ24nuigGKCYoRiiOKNIqniq+KworUiueK+osNix+Lhovni/6MFIwnjDqMTYxfjGeMb4yCjJSMp4y5jMuM3IzvjQGNFI0sjT+NUY1djWmNhY2hjbCNwI3MjdiOMo6JjtyO5I9Oj+eQY5DakU2Ru5Iukp2TEJOCk+OUOpSTlOqVb5V3lYOVj5WblaeVs5W/lcuV15Xjle+V+5YHlhmWK5Y3lkOWT5ZblnKWhJaQlpyWqJa0lsaW2JbklvCW/JcIlxSXIJcyl0OXT5dbl3KXiZegl7eXypfdl+mX9ZgBmA2YGZglmDeYSZhhmHiYkJinmL+Y1pjumQWZIJk6mVKZaZl8mY6ZoZmzmcaZ2Jnzmg6aGpommjiaSppcmm2ahZqcmrSay5rjmvqbEpspm0SbXptwm4Kbjpuam6abspvEm9ab7pwFnB2cNJxMnGOce5ySnK2cx5zenPWdDJ0jnTqdUZ1o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A/wDXgAA////pP5sBK4FsAImACUAAAAHAXABbwAD//8AIv5wA9wEUAImAEUAAAAHAXAAqQAH//8AJ/6bBLwFsAImACYAAAAHAXYElwAK//8AEP6IBA8GAAImAEYAAAAHAXYEpf/3//8AJ/6bBOAFsAImACgAAAAHAXYEcwAK//8AO/6RBIgGAAImAEgAAAAHAXYEkAAA//8AJ/35BOAFsAImACgAAAAHA6sBAf6S//8AO/35BIgGAAImAEgAAAAHA6sBHv6S//8AJ/6bBYcFsAImACwAAAAHAXYFAAAK//8ADf6bA/kGAAImAEwAAAAHAXYEfwAK//8AJwAABXEHNgImAC8AAAEHAHcBpQE2AAkAsAQvsA/cMDEA//8AEQAABHUHPQImAE8AAAEHAHcBowE9AAkAsAQvsA/cMDEA//8AJ/7cBXEFsAImAC8AAAAHAXYE0QBL//8AEf7HBEoGAAImAE8AAAAHAXYEYAA2//8AJ/6bA8MFsAImADAAAAAHAXYElwAK////5P6bAhcGAAImAFAAAAAHAXYDRAAK//8AJwAABs4HNgImADEAAAEHAHcCvgE2ABMAsABFWLACLxuxAh8+WbAR3DAxAP//ABAAAAZoBgACJgBRAAABBwB3ApgAAAAJALADL7Ak3DAxAP//ACf+mwbOBbACJgAxAAAABwF2BasACv//ABD+mwZoBFICJgBRAAAABwF2Ba4ACv//ACf+lwWGBbACJgAyAAAABwF2BQIABv//AA3+mwP6BFICJgBSAAAABwF2BGwACv//ACcAAAUEB0ICJgA0AAABBwB3AasBQgAJALADL7AW3DAxAP///8f+YARtBfcCJgBUAAABBwB3AZv/9wAJALANL7Ah3DAxAP//ACf+mwTYBbACJgA2AAAABwF2BJgACv///97+mwLvBFMCJgBWAAAABwF2Az4ACv//ACT+kQS7BccCJgA3AAAABwF2BLAAAP//ABz+iAPEBFACJgBXAAAABwF2BGL/9///AJz+lAUiBbACJgA4AAAABwF2BJ8AA///ADv+kQKuBUECJgBYAAAABwF2A/UAAP//AJsAAAWBBzcCJgA6AAABBwFuAN0BQwAJALABL7AR3DAxAP//AGQAAAQNBewCJgBaAAABBgFuFvgACQCwAS+wEdwwMQD//wCb/psFgQWwAiYAOgAAAAcBdgTV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AesB7AHtAe4B7wHwAfEB8gJSAlQCWAJaAlwCXgJiAmQCagJsAnACcgJ0AnYCegJ8An4CgAKaAqICpAKqArADhwOOA5MDlgACAAAAAgAKO9oAAQNsAAQAAAGxBtI6+jr6BvwHUjfeI2I7mDuqOHYHWDiWOJY43jTeDqg4ljiWO6omhAqSCxQ1MDjeNI43uDdKOOQPYgt+OFQ2GjiMC8AM6gz0N643rji4NhoO1g3qOW4OTDeoOW4OZjfeN9433jfeN9433juYOHY4djh2OHY4ljiWOJY4ljuqOJY7qjuqO6o7qjuqON443jjeON445DhUOFQ4VDhUOFQ4VDiMOIw4jDiMN644uDi4OLg4uDi4OW42GjluN944VDfeOFQ33jhUO5g7mDuYO5g7qjuqOHY4jDh2OIw4djiMOHY4jDh2OIw4ljeuOJY4ljiWOJY4ljjeNN4OqA6oDqgOqDiWN644ljeuOJY3rjeuO6o4uDuqOLg7qji4DtYO1g7WNTA1MDUwON443jjeON443jjeN7g45DluOOQPYg9iD2I33jhUNTAO6Dr6N944djiWOJY7qjjkN94jYjZ+N944dg9iOJY7qjiWNN433jiWOJYPhDuqJoQQfjUwOOQRfDdKElo4ljjkN64S+DluEv43rhW8OW4Xlji4GKgYwhjIGM4ayBrOGwQbNji4OHY4dhu0Nn44ljiWON4dKh7cIJo03jY0OJY33iHQI2I2fiNsOHY3SiW6OJY03jiWOJY4ljuqJoQ7mDUwNjQ3SjiWOJYmpihAND4pHingKm44VCrMK6Y3QCwwOIw3qCz6LSQ4uDYaLoo5bjYaN6gxEDFOMoA0aDYaMwI4jDiMN0AziDOyNAg5bjQ+NGg33ji4NI45bjSOOW40tDYaNn43QDZ+N0o3qDTeNN403jTeOJY7mDUwOOQ5bjjkN0o3qDeuOJY3SjeoOJY4ljiWN944VDfeOFQ4djiMOIw4jDdKN6g7qji4OLg2GjY0OW42NDluNjQ5bjZ+N0A3QDdKN6g33jhUOJY3rje4N7g3uDfeOFQ33jhUN944VDfeOFQ33jhUN944VDfeOFQ33jhUN944VDfeOFQ33jhUN944VDh2OIw4djiMOHY4jDh2OIw4djiMOHY4jDh2OIw4djiMOJY4ljuqOLg7qji4O6o4uDuqOLg7qji4O6o4uDuqOLg4uDjeON445DluOOQ5bjjkOW445DluO6o6+jmIOvo6+jr6Ovo6+jsAOwo7HDsuO0A7XjtoO3I7mDuqO6oAAQGxAAQABgALAAwAEwAlACYAJwAoACkAKgAsAC0ALgAvADAAMQAyADMANAA1ADYAOAA5ADoAOwA8AD0APgA/AEUARgBJAEoATABPAFEAUgBTAFQAVgBYAFoAWwBcAF0AXwCDAIQAhQCGAIcAiACKAIsAjACNAI4AjwCQAJEAkgCTAJQAlQCWAJcAmACZAJwAnQCeAJ8AoACjAKQApQCmAKcAqACrAKwArQCuALQAtQC2ALcAuAC5AMAAwQDCAMMAxADFAMYAxwDIAMkAywDNAM8A0QDTANUA1gDXANgA2QDaANsA3ADdAN4A5wDoAOsA7QDvAPEA8wD3APkA/AD+AQABAgEGAQcBCAEJAQoBCwEMAQ8BEAERARIBEwEUARgBGgEcASUBJwEpASsBLQEvATEBMwE1ATcBOQE6ATsBPAE+AUABTgFPAWIBZQFmAXkBewF8AX0BfgF/AYIBgwGEAYUBhgGHAYgBiQGKAYsBjAGNAY4BjwGQAZIBkwGUAZUBlgGXAZgBmgGbAZ4BoQGjAaYBpwGpAa0BrgGvAbEBsgGzAbQBtQG2AbgBuQG8AcMBxAHFAcYByQHKAcsBzAHNAc4BzwHRAdIB0wHUAdUB1gHXAdgB2QHaAdsB3QHeAd8B4AHhAeMB5AHlAeYB6AHpAesB7AHtAe8B8AHxAfIB8wH0AfUB9gH3AfgB+QH6Af0CAQIDAgUCBgIHAggCCQIMAg0CDwIQAhECEwIUAhYCFwIcAh0CIQIlAiYCKQI2AjcCOAI5AjoCRAJRAlICUwJUAlgCWQJcAl4CYAJiAmQCbAJuAnACcQJyAnQCdQJ9AoICgwKEAosCjwKRApICkwKUApUCmAKZApsCnQKeAp8CqAKpAq0CrwKwArECsgKzArQCtQK4ArkCvQK+Ar8C1gLXAuYC5wL4AvoC/AMCAwMDBAMFAwYDBwMIAwkDCgMLAwwDDQMOAw8DEAMRAxIDEwMUAxUDFgMXAxgDGQMaAxsDHAMdAx4DHwMgAyEDIgMjAyQDJQMmAycDKAMpAyoDLAMuAy8DMAMxAzIDMwM0AzUDNgM3AzgDOQM6AzsDQwNGA0gDVANVA1YDVwNYA1kDWgNbA1wDcANxA3MDdAN1A34DfwPZA9sD3APeA+ED4gPpA+wEMQQzBDQACgA4/8QBJf/EASf/xAFi/8QBxf/EAc7/xAHl/8QCYv/EAm7/xAJ2/8QAFQA6ABQAOwAmAD0AFgCgABYBNwAmATkAFgE7ABYBfwAWAZUAFgGbABYCNwAUAjkAFAJwABYCcgAWAvgAJgL6ACYC/AAmA1QAFgNWABYDWAAWA1oAFgABABP/CADOABD+7gAS/u4AJf9AAC7/MAA4ABQARf/eAEf/6wBI/+sASf/rAEv/6wBT/+sAVf/rAFb/5gBZ/+oAWv/oAF3/6ACD/0AAhP9AAIX/QACG/0AAh/9AAIj/QACj/94ApP/eAKX/3gCm/94Ap//eAKj/3gCq/+sAq//rAKz/6wCt/+sArv/rALX/6wC2/+sAt//rALj/6wC5/+sAvP/qAL3/6gC+/+oAv//qAMD/6ADC/+gAw/9AAMT/3gDF/0AAxv/eAMf/QADI/94Ayv/rAMz/6wDO/+sA0P/rANL/6wDW/+sA2P/rANr/6wDc/+sA3v/rAOD/6wDi/+sA5P/rAOb/6wD3/zABEP/rARL/6wEU/+sBFv/rASUAFAEnABQBLP/qAS7/6gEw/+oBMv/qATT/6gE2/+oBOv/oAUb/6wFI/+oBTv9AAU//3gFiABQBef9AAYL/QAGF/0ABjP9AAZz/6wGg/+oBof/rAaP/6AGt/+gBr//rAbL/6wGz/+sBtf/qAbv/6gG8/+sBvf/qAcUAFAHL/zABzgAUAdP/QAHlABQB8//eAfj/6wIB/+sCBP/rAgb/6AIH/+sCE//rAhT/6wIX/+sCIf/oAin/QAI2/+sCOP/oAjr/6AI8/+sCQP/rAkT/6wJiABQCa//rAm3/6wJuABQCcf/oAnYAFAKS/0ACk//eApT/QAKV/94Cmf/rApv/6wKd/+sCqf/rAqv/6wKt/+sCsf/oArP/6AK1/+gCw//rAsT/6wLF/+sCz//rAtb/QALX/94DAv9AAwP/3gME/0ADBf/eAwb/QAMH/94DCP9AAwn/3gMK/0ADC//eAwz/QAMN/94DDv9AAw//3gMQ/0ADEf/eAxL/QAMT/94DFP9AAxX/3gMW/0ADF//eAxj/QAMZ/94DG//rAx3/6wMf/+sDIf/rAyP/6wMl/+sDJ//rAyn/6wMv/+sDMf/rAzP/6wM1/+sDN//rAzn/6wM7/+sDPf/rAz//6wNB/+sDQ//rA0X/6wNH/+oDSf/qA0v/6gNN/+oDT//qA1H/6gNT/+oDVf/oA1f/6ANZ/+gDW//oA3L+7gN2/u4Dev7uA3v+7gPs/8AAIAA4/98AOv/kADv/7AA9/90AoP/dASX/3wEn/98BN//sATn/3QE7/90BYv/fAX//3QGV/90Bm//dAcX/3wHO/98B5f/fAjf/5AI5/+QCYv/fAm7/3wJw/90Ccv/dAnb/3wL4/+wC+v/sAvz/7ANU/90DVv/dA1j/3QNa/90D7AAOABoAOP/OADr/7QA9/9AAoP/QASX/zgEn/84BOf/QATv/0AFi/84Bf//QAZX/0AGb/9ABxf/OAc7/zgHl/84CN//tAjn/7QJi/84Cbv/OAnD/0AJy/9ACdv/OA1T/0ANW/9ADWP/QA1r/0AAQAC7/7gA5/+4AnP/uAJ3/7gCe/+4An//uAPf/7gEr/+4BLf/uAS//7gEx/+4BM//uATX/7gHL/+4DRv/uA0j/7gBKAAYAEAALABAADQAUAEEAEgBH/+gASP/oAEn/6ABL/+gAVf/oAGEAEwCq/+gAq//oAKz/6ACt/+gArv/oAMr/6ADM/+gAzv/oAND/6ADS/+gA1v/oANj/6ADa/+gA3P/oAN7/6ADg/+gA4v/oAOT/6ADm/+gBFv/oAUb/6AFmABABnP/oAaH/6AGy/+gBs//oAfj/6AIE/+gCB//oAhP/6AIU/+gCF//oAjz/6AJA/+gCRP/oAmv/6AJt/+gCmf/oApv/6AKd/+gCq//oAsP/6ALE/+gCxf/oAs//6AMb/+gDHf/oAx//6AMh/+gDI//oAyX/6AMn/+gDKf/oAz3/6AM//+gDQf/oA0X/6ANwABADcQAQA3MAEAN0ABADdQAQA34AEAN/ABAAAgIF/9YDcf+YAD0AR//sAEj/7ABJ/+wAS//sAFX/7ACq/+wAq//sAKz/7ACt/+wArv/sAMr/7ADM/+wAzv/sAND/7ADS/+wA1v/sANj/7ADa/+wA3P/sAN7/7ADg/+wA4v/sAOT/7ADm/+wBFv/sAUb/7AGc/+wBof/sAbL/7AGz/+wB+P/sAgT/7AIH/+wCE//sAhT/7AIX/+wCPP/sAkD/7AJE/+wCa//sAm3/7AKZ/+wCm//sAp3/7AKr/+wCw//sAsT/7ALF/+wCz//sAxv/7AMd/+wDH//sAyH/7AMj/+wDJf/sAyf/7AMp/+wDPf/sAz//7ANB/+wDRf/sABgAU//iALX/4gC2/+IAt//iALj/4gC5/+IBEP/iARL/4gEU/+IBr//iAbz/4gIB/+ICNv/iAqn/4gKt/+IDL//iAzH/4gMz/+IDNf/iAzf/4gM5/+IDO//iA0P/4gNxABgABgAQ/4QAEv+EA3L/hAN2/4QDev+EA3v/hAAQAC7/7AA5/+wAnP/sAJ3/7ACe/+wAn//sAPf/7AEr/+wBLf/sAS//7AEx/+wBM//sATX/7AHL/+wDRv/sA0j/7AALAFv/zAPW/9cD1/+4A9j/7gPZ/70D3P/yA97/8gPm//ED6v/zA+wAEwP3/7cABABKABQAWAAyAFsAEQNxABAAHgAG//IAC//yAFr/8wBd//MAwP/zAML/8wE6//MBZv/yAaP/8wGt//MCBf/1Agb/8wIh//MCOP/zAjr/8wJx//MCsf/zArP/8wK1//MDVf/zA1f/8wNZ//MDW//zA3D/8gNx//IDc//yA3T/8gN1//IDfv/yA3//8gAIAFv/5QGW/8sBuP/kA9z/7APe/+wD5v/rA+r/7QPsAA0APgAn//MAK//zADP/8wA1//MAiv/zAJX/8wCW//MAl//zAJj/8wCZ//MAm//zAMn/8wDL//MAzf/zAM//8wDf//MA4f/zAOP/8wDl//MBD//zARH/8wET//MBFf/zAUX/8wFS//MBfv/zAYn/8wGQ//MBqwANAcf/8wHh//MB5P/zAiP/8wI1//MCO//zAj3/8wI///MCQf/zAkP/8wJq//MCbP/zAqj/8wKq//MCrP/zAs7/8wMu//MDMP/zAzL/8wM0//MDNv/zAzj/8wM6//MDPP/zAz7/8wNA//MDQv/zA0T/8wNc//MEMf/zBDL/8wQ0//MENf/zAD8AJ//mACv/5gAz/+YANf/mAIr/5gCV/+YAlv/mAJf/5gCY/+YAmf/mAJv/5gDJ/+YAy//mAM3/5gDP/+YA3//mAOH/5gDj/+YA5f/mAQ//5gER/+YBE//mARX/5gFF/+YBUv/mAX7/5gGJ/+YBkP/mAZb/wgGrABABx//mAeH/5gHk/+YCI//mAjX/5gI7/+YCPf/mAj//5gJB/+YCQ//mAmr/5gJs/+YCqP/mAqr/5gKs/+YCzv/mAy7/5gMw/+YDMv/mAzT/5gM2/+YDOP/mAzr/5gM8/+YDPv/mA0D/5gNC/+YDRP/mA1z/5gQx/+YEMv/mBDT/5gQ1/+YANwAl/+QAPP/SAD3/0wCD/+QAhP/kAIX/5ACG/+QAh//kAIj/5ACg/9MAw//kAMX/5ADH/+QBOf/TATv/0wFO/+QBef/kAX//0wGC/+QBhf/kAYz/5AGV/9MBl//SAZv/0wGr/+IB0//kAdn/0gHo/9ICKf/kAlj/0gJw/9MCcv/TAnT/0gKD/9ICkv/kApT/5AKe/9ICvv/SAtb/5AMC/+QDBP/kAwb/5AMI/+QDCv/kAwz/5AMO/+QDEP/kAxL/5AMU/+QDFv/kAxj/5ANU/9MDVv/TA1j/0wNa/9MAJwAQ/0YAEv9GACX/zQCD/80AhP/NAIX/zQCG/80Ah//NAIj/zQDD/80Axf/NAMf/zQFO/80Bef/NAYL/zQGF/80BjP/NAbH/8gHT/80CKf/NApL/zQKU/80C1v/NAwL/zQME/80DBv/NAwj/zQMK/80DDP/NAw7/zQMQ/80DEv/NAxT/zQMW/80DGP/NA3L/RgN2/0YDev9GA3v/RgABAasADgCvAEf/3ABI/9wASf/cAEv/3ABR/8EAUv/BAFP/1gBU/8EAVf/cAFn/3QBa/+EAXf/hAKr/3ACr/9wArP/cAK3/3ACu/9wAtP/BALX/1gC2/9YAt//WALj/1gC5/9YAvP/dAL3/3QC+/90Av//dAMD/4QDC/+EAyv/cAMz/3ADO/9wA0P/cANL/3ADW/9wA2P/cANr/3ADc/9wA3v/cAOD/3ADi/9wA5P/cAOb/3AEH/8EBCf/BAQv/wQEM/8EBEP/WARL/1gEU/9YBFv/cASz/3QEu/90BMP/dATL/3QE0/90BNv/dATr/4QFG/9wBSP/dAZz/3AGe/8EBoP/dAaH/3AGj/+EBpf/mAaf/wQGo/+sBqf/pAa3/4QGu//ABr//WAbD/5wGy/9wBs//cAbT/4wG1/90Btv/OAbj/1AG5/9sBu//dAbz/1gG9/90B9v/BAfj/3AH7/8EB/P/BAf3/wQH//8ECAP/BAgH/1gIC/8ECA//BAgT/3AIG/+ECB//cAgn/wQIL/8ECDP/BAg//wQIR/8ECE//cAhT/3AIW/8ECF//cAh3/wQIf/8ECIP/BAiH/4QI2/9YCOP/hAjr/4QI8/9wCQP/cAkT/3AJN/8ECXf/BAmX/wQJn/8ECa//cAm3/3AJx/+ECiv/BAoz/wQKQ/8ECmf/cApv/3AKd/9wCpf/BAqf/wQKp/9YCq//cAq3/1gKx/+ECs//hArX/4QK5/8ECu//BAr3/wQLD/9wCxP/cAsX/3ALP/9wC5//BAxv/3AMd/9wDH//cAyH/3AMj/9wDJf/cAyf/3AMp/9wDL//WAzH/1gMz/9YDNf/WAzf/1gM5/9YDO//WAz3/3AM//9wDQf/cA0P/1gNF/9wDR//dA0n/3QNL/90DTf/dA0//3QNR/90DU//dA1X/4QNX/+EDWf/hA1v/4QB2AAb/2gAL/9oAR//wAEj/8ABJ//AAS//wAFX/8ABZ/+8AWv/cAF3/3ACq//AAq//wAKz/8ACt//AArv/wALz/7wC9/+8Avv/vAL//7wDA/9wAwv/cAMr/8ADM//AAzv/wAND/8ADS//AA1v/wANj/8ADa//AA3P/wAN7/8ADg//AA4v/wAOT/8ADm//ABFv/wASz/7wEu/+8BMP/vATL/7wE0/+8BNv/vATr/3AFG//ABSP/vAWb/2gGc//ABoP/vAaH/8AGj/9wBqP/sAasADwGt/9wBsP/qAbL/8AGz//ABtP/OAbX/7wG2/+cBu//vAb3/7wH4//ACBP/wAgb/3AIH//ACE//wAhT/8AIX//ACIf/cAjj/3AI6/9wCPP/wAkD/8AJE//ACa//wAm3/8AJx/9wCmf/wApv/8AKd//ACq//wArH/3AKz/9wCtf/cAsP/8ALE//ACxf/wAs//8AMb//ADHf/wAx//8AMh//ADI//wAyX/8AMn//ADKf/wAz3/8AM///ADQf/wA0X/8ANH/+8DSf/vA0v/7wNN/+8DT//vA1H/7wNT/+8DVf/cA1f/3ANZ/9wDW//cA3D/2gNx/9oDc//aA3T/2gN1/9oDfv/aA3//2gBEABAADAASAAwAR//nAEj/5wBJ/+cAS//nAFX/5wCq/+cAq//nAKz/5wCt/+cArv/nAMr/5wDM/+cAzv/nAND/5wDS/+cA1v/nANj/5wDa/+cA3P/nAN7/5wDg/+cA4v/nAOT/5wDm/+cBFv/nAUb/5wGc/+cBof/nAasADwGy/+cBs//nAfj/5wIE/+cCB//nAhP/5wIU/+cCF//nAjz/5wJA/+cCRP/nAmv/5wJt/+cCmf/nApv/5wKd/+cCq//nAsP/5wLE/+cCxf/nAs//5wMb/+cDHf/nAx//5wMh/+cDI//nAyX/5wMn/+cDKf/nAz3/5wM//+cDQf/nA0X/5wNyAAwDdgAMA3oADAN7AAwABgG0/+oB9//uAgX/1QIP/+0CY//sAtH/7AABAgX/wAABAbQAIAB+AAYADAALAAwAR//oAEj/6ABJ/+gASgAMAEv/6ABT/+oAVf/oAFoACwBdAAsAqv/oAKv/6ACs/+gArf/oAK7/6AC1/+oAtv/qALf/6gC4/+oAuf/qAMAACwDCAAsAyv/oAMz/6ADO/+gA0P/oANL/6ADW/+gA2P/oANr/6ADc/+gA3v/oAOD/6ADi/+gA5P/oAOb/6AEQ/+oBEv/qART/6gEW/+gBOgALAUb/6AFmAAwBnP/oAaH/6AGjAAsBq/+QAa0ACwGv/+oBsAALAbL/6AGz/+gBtAAMAbz/6gH4/+gCAf/qAgT/6AIGAAsCB//oAhP/6AIU/+gCF//oAiEACwI2/+oCOAALAjoACwI8/+gCQP/oAkT/6AJr/+gCbf/oAnEACwKZ/+gCm//oAp3/6AKp/+oCq//oAq3/6gKxAAsCswALArUACwLD/+gCxP/oAsX/6ALP/+gDG//oAx3/6AMf/+gDIf/oAyP/6AMl/+gDJ//oAyn/6AMv/+oDMf/qAzP/6gM1/+oDN//qAzn/6gM7/+oDPf/oAz//6ANB/+gDQ//qA0X/6ANVAAsDVwALA1kACwNbAAsDcAAMA3EADANzAAwDdAAMA3UADAN+AAwDfwAMA9cADQPZAA4D2v/1A9z/7APe/+0D5v/sA+r/7gPs/78D9wANAAECBf/iAA0AXP/tAF7/7QE9/+0BP//tAUH/7QH5/+0CBf/AAgj/7QJZ/+0Cdf/tAoT/7QKf/+0Cv//tAAwAXP/yAF7/8gE9//IBP//yAUH/8gH5//ICCP/yAln/8gJ1//IChP/yAp//8gK///IAHwBa//QAXP/yAF3/9ABe//MAwP/0AML/9AE6//QBPf/zAT//8wFB//MBo//0Aa3/9AH5//ICBv/0Agj/8gIh//QCOP/0Ajr/9AJZ//ICcf/0AnX/8gKE//ICn//yArH/9AKz//QCtf/0Ar//8gNV//QDV//0A1n/9ANb//QAXQAG/8oAC//KADj/0gA6/9QAPP/0AD3/0wBa/+YAXP/vAF3/5gCg/9MAwP/mAML/5gEl/9IBJ//SATn/0wE6/+YBO//TAWL/0gFm/8oBf//TAZX/0wGX//QBm//TAaP/5gGt/+YBxf/SAc7/0gHR/+0B2f/0AeX/0gHm/+0B6P/0Aer/4QHv/9QB+f/vAgX/yQIG/+YCCP/vAg//0QIh/+YCJP/lAjf/1AI4/+YCOf/UAjr/5gJC/+MCWP/0Aln/7wJi/9ICY//EAm7/0gJw/9MCcf/mAnL/0wJ0//QCdf/vAnb/0gJ4/+ECev/hAoP/9AKE/+8Cjf/hAp7/9AKf/+8CsP/tArH/5gKy/+0Cs//mArT/7QK1/+YCtv/hAr7/9AK//+8Cxv/UAsf/9QLI/+cC0P9kAtH/yQNU/9MDVf/mA1b/0wNX/+YDWP/TA1n/5gNa/9MDW//mA3D/ygNx/8oDc//KA3T/ygN1/8oDfv/KA3//ygBsAAb/wAAL/8AAOP+dADr/xwA8//AAPf+rAFH/0gBS/9IAVP/SAKD/qwC0/9IBB//SAQn/0gEL/9IBDP/SASX/nQEn/50BOf+rATv/qwFi/50BZv/AAX//qwGV/6sBl//wAZv/qwGe/9IBp//SAcX/nQHM//UBzv+dAdH/6gHZ//AB3v/1AeX/nQHm/+oB6P/wAer/5QHv/8EB9v/SAfv/0gH8/9IB/f/SAf//0gIA/9ICAv/SAgP/0gIF/80CCf/SAgv/0gIM/9ICD//SAhH/0gIW/9ICHf/SAh//0gIg/9ICN//HAjn/xwJN/9ICWP/wAl3/0gJi/50CY//MAmX/0gJn/9ICbv+dAnD/qwJy/6sCdP/wAnb/nQJ4/+UCev/lAn7/3wKD//ACh//1Aor/0gKM/9ICjf/lApD/0gKe//ACpf/SAqf/0gKw/+oCsv/qArT/6gK2/+UCuf/SArv/0gK9/9ICvv/wAsb/zgLI/+oCyv/1AtD/ngLR/84C1P/1Auf/0gNU/6sDVv+rA1j/qwNa/6sDcP/AA3H/wANz/8ADdP/AA3X/wAN+/8ADf//AAG8ABv+xAAv/sQA4/54AOv/FADz/8gA9/6gAUf/PAFL/zwBU/88AXP/vAKD/qAC0/88BB//PAQn/zwEL/88BDP/PASX/ngEn/54BOf+oATv/qAFi/54BZv+xAX//qAGV/6gBl//yAZv/qAGe/88Bp//PAcX/ngHO/54B0f/sAdn/8gHl/54B5v/sAej/8gHq/+EB7//CAfb/zwH5/+8B+//PAfz/zwH9/88B///PAgD/zwIC/88CA//PAgX/xgII/+8CCf/PAgv/zwIM/88CD//PAhH/zwIW/88CHf/PAh//zwIg/88CN//FAjn/xQJN/88CWP/yAln/7wJd/88CYv+eAmP/wAJl/88CZ//PAm7/ngJw/6gCcv+oAnT/8gJ1/+8Cdv+eAnj/4QJ6/+ECfv/fAoP/8gKE/+8Civ/PAoz/zwKN/+ECkP/PAp7/8gKf/+8Cpf/PAqf/zwKw/+wCsv/sArT/7AK2/+ECuf/PArv/zwK9/88Cvv/yAr//7wLG/80CyP/oAtD/nwLR/8YC5//PA1T/qANW/6gDWP+oA1r/qANw/7EDcf+xA3P/sQN0/7EDdf+xA37/sQN//7EATQA4/74AUf/hAFL/4QBU/+EAWv/vAF3/7wC0/+EAwP/vAML/7wEH/+EBCf/hAQv/4QEM/+EBJf++ASf/vgE6/+8BYv++AZ7/4QGj/+8Bp//hAa3/7wHF/74Bzv++AeX/vgHv/8kB9v/hAfv/4QH8/+EB/f/hAf//4QIA/+ECAv/hAgP/4QIF/98CBv/vAgn/4QIL/+ECDP/hAg//4QIR/+ECFv/hAh3/4QIf/+ECIP/hAiH/7wIk/+0COP/vAjr/7wJC/+sCTf/hAl3/4QJi/74CY//fAmX/4QJn/+ECbv++AnH/7wJ2/74Cfv/pAor/4QKM/+ECkP/hAqX/4QKn/+ECsf/vArP/7wK1/+8Cuf/hArv/4QK9/+ECx//1AtH/4ALn/+EDVf/vA1f/7wNZ/+8DW//vAGQAOP/mADr/5wA8//IAPf/nAFH/1gBS/9YAVP/WAFz/8QCg/+cAtP/WAQf/1gEJ/9YBC//WAQz/1gEl/+YBJ//mATn/5wE7/+cBYv/mAX//5wGV/+cBl//yAZv/5wGe/9YBp//WAcX/5gHO/+YB0f/uAdn/8gHl/+YB5v/uAej/8gHq/+gB7//mAfb/1gH5//EB+//WAfz/1gH9/9YB///WAgD/1gIC/9YCA//WAgX/0AII//ECCf/WAgv/1gIM/9YCD//WAhH/1gIW/9YCHf/WAh//1gIg/9YCN//nAjn/5wJN/9YCWP/yAln/8QJd/9YCYv/mAmP/zgJl/9YCZ//WAm7/5gJw/+cCcv/nAnT/8gJ1//ECdv/mAnj/6AJ6/+gCg//yAoT/8QKK/9YCjP/WAo3/6AKQ/9YCnv/yAp//8QKl/9YCp//WArD/7gKy/+4CtP/uArb/6AK5/9YCu//WAr3/1gK+//ICv//xAsb/5wLI/+0C0P/mAtH/0ALn/9YDVP/nA1b/5wNY/+cDWv/nAAICLQALAtD/5gCTACUAEAAn/+gAK//oADP/6AA1/+gAOP/gADr/4AA9/98AgwAQAIQAEACFABAAhgAQAIcAEACIABAAiv/oAJX/6ACW/+gAl//oAJj/6ACZ/+gAm//oAKD/3wDDABAAxQAQAMcAEADJ/+gAy//oAM3/6ADP/+gA3//oAOH/6ADj/+gA5f/oAQ//6AER/+gBE//oARX/6AEl/+ABJ//gATn/3wE7/98BRf/oAU4AEAFS/+gBYv/gAXkAEAF+/+gBf//fAYIAEAGFABABif/oAYwAEAGQ/+gBlf/fAZv/3wHF/+ABx//oAcwAEAHO/+AB0wAQAdcAFAHeABAB4f/oAeT/6AHl/+AB6v/hAe//4AH3ABMB/gAQAgr/4AIcABACI//oAikAEAI1/+gCN//gAjn/4AI7/+gCPf/oAj//6AJB/+gCQ//oAmL/4AJq/+gCbP/oAm7/4AJw/98Ccv/fAnb/4AJ4/+ECef/gAnr/4QJ7/+ACf//hAocAEAKIABACjf/hAo7/4AKSABAClAAQApr/6QKo/+gCqv/oAqz/6AK2/+ECt//gAsb/3wLI/94CygAQAs7/6ALQ/98C0v/yAtQAEALVABAC1gAQAwIAEAMEABADBgAQAwgAEAMKABADDAAQAw4AEAMQABADEgAQAxQAEAMWABADGAAQAy7/6AMw/+gDMv/oAzT/6AM2/+gDOP/oAzr/6AM8/+gDPv/oA0D/6ANC/+gDRP/oA1T/3wNW/98DWP/fA1r/3wNc/+gEMf/oBDL/6AQ0/+gENf/oADIAG//yADj/8QA6//QAPP/0AD3/8ACg//ABJf/xASf/8QE5//ABO//wAWL/8QF///ABlf/wAZf/9AGb//ABxf/xAcz/9QHO//EB0f/zAdn/9AHe//UB5f/xAeb/8wHo//QB7//xAjf/9AI5//QCWP/0AmL/8QJu//ECcP/wAnL/8AJ0//QCdv/xAoP/9AKH//UCnv/0ArD/8wKy//MCtP/zAr7/9ALG//ICyP/yAsr/9QLQ//IC1P/1A1T/8ANW//ADWP/wA1r/8AAIAFgADgCJ/tcBq/+YAbH/xwHX/xIB9/9SAsL/zwPs/4AAZgAlAA8AOP/mADr/5gA8AA4APf/mAIMADwCEAA8AhQAPAIYADwCHAA8AiAAPAKD/5gDDAA8AxQAPAMcADwEl/+YBJ//mATn/5gE7/+YBTgAPAWL/5gF5AA8Bf//mAYIADwGFAA8BjAAPAZX/5gGXAA4Bm//mAcX/5gHMAA4Bzv/mAdEACwHTAA8B1wATAdkADgHeAA4B5f/mAeYACwHoAA4B6v/lAe//5gHw//QB9wASAf4ADwIF/+cCCv/oAg//5wIcAA8CKQAPAjf/5gI5/+YCWAAOAmL/5gJj/+cCbv/mAnD/5gJy/+YCdAAOAnb/5gJ4/+UCef/oAnr/5QJ7/+gCgwAOAocADgKIAA8Cjf/lAo7/6AKSAA8ClAAPAp4ADgKwAAsCsgALArQACwK2/+UCt//oAr4ADgLG/+YCyP/mAsoADgLQ/+YC0f/nAtQADgLVAA8C1gAPAwIADwMEAA8DBgAPAwgADwMKAA8DDAAPAw4ADwMQAA8DEgAPAxQADwMWAA8DGAAPA1T/5gNW/+YDWP/mA1r/5gA3AAb/vwAL/78AOP+fADr/yQA9/60AoP+tASX/nwEn/58BOf+tATv/rQFi/58BZv+/AX//rQGV/60Bm/+tAcX/nwHO/58B0f/sAeX/nwHm/+wB6v/mAe//xAIF/80CD//VAjf/yQI5/8kCYv+fAmP/zAJu/58CcP+tAnL/rQJ2/58CeP/mAnr/5gJ+/98Cjf/mArD/7AKy/+wCtP/sArb/5gLG/9ECyP/sAtD/oQLR/88DVP+tA1b/rQNY/60DWv+tA3D/vwNx/78Dc/+/A3T/vwN1/78Dfv+/A3//vwAwADj/4wA8/+UAPf/kAKD/5AEl/+MBJ//jATn/5AE7/+QBYv/jAX//5AGV/+QBl//lAZv/5AHF/+MBzP/lAc7/4wHR/+kB1//iAdn/5QHe/+UB5f/jAeb/6QHo/+UB/v/qAhz/6gJY/+UCYv/jAm7/4wJw/+QCcv/kAnT/5QJ2/+MCg//lAof/5QKI/+oCnv/lArD/6QKy/+kCtP/pAr7/5QLK/+UC0P/kAtT/5QLV/+oDVP/kA1b/5ANY/+QDWv/kACMAOP/iADz/5AEl/+IBJ//iAWL/4gGX/+QBxf/iAcz/5AHO/+IB0f/pAdf/4QHZ/+QB3v/kAeX/4gHm/+kB6P/kAff/5AH+/+sCHP/rAlj/5AJi/+ICbv/iAnT/5AJ2/+ICg//kAof/5AKI/+sCnv/kArD/6QKy/+kCtP/pAr7/5ALK/+QC1P/kAtX/6wAXADj/6wA9//MAoP/zASX/6wEn/+sBOf/zATv/8wFi/+sBf//zAZX/8wGb//MBxf/rAc7/6wHl/+sCYv/rAm7/6wJw//MCcv/zAnb/6wNU//MDVv/zA1j/8wNa//MANgBR/+8AUv/vAFT/7wBc//AAtP/vAQf/7wEJ/+8BC//vAQz/7wGe/+8Bp//vAfb/7wH3/+4B+f/wAfv/7wH8/+8B/f/vAf//7wIA/+8CAv/vAgP/7wIF/+4CCP/wAgn/7wIL/+8CDP/vAg//7wIR/+8CFv/vAh3/7wIf/+8CIP/vAiT/9AJC//ECTf/vAln/8AJd/+8CY//vAmX/7wJn/+8Cdf/wAoT/8AKK/+8CjP/vApD/7wKf//ACpf/vAqf/7wK5/+8Cu//vAr3/7wK///AC0f/vAuf/7wAiAAb/8gAL//IAWv/1AF3/9QDA//UAwv/1ATr/9QFm//IBo//1Aa3/9QIF//QCBv/1Ag//9AIh//UCJP/1Ajj/9QI6//UCY//1AnH/9QKx//UCs//1ArX/9QLR//UDVf/1A1f/9QNZ//UDW//1A3D/8gNx//IDc//yA3T/8gN1//IDfv/yA3//8gAyAFH/7gBS/+4AVP/uALT/7gEH/+4BCf/uAQv/7gEM/+4Bnv/uAaf/7gH2/+4B9wAUAfv/7gH8/+4B/f/uAf//7gIA/+4CAv/uAgP/7gIF/+0CCf/uAgr/7QIL/+4CDP/uAg3/0AIP/+4CEf/uAhb/7gId/+4CH//uAiD/7gJN/+4CXf/uAmP/7QJl/+4CZ//uAnn/7QJ7/+0Civ/uAoz/7gKO/+0CkP/uAqX/7gKn/+4Ct//tArn/7gK7/+4Cvf/uAtH/7QLn/+4ACgAG//UAC//1AWb/9QNw//UDcf/1A3P/9QN0//UDdf/1A37/9QN///UAWQBH//AASP/wAEn/8ABL//AAU//HAFX/8ACq//AAq//wAKz/8ACt//AArv/wALX/xwC2/8cAt//HALj/xwC5/8cAyv/wAMz/8ADO//AA0P/wANL/8ADW//AA2P/wANr/8ADc//AA3v/wAOD/8ADi//AA5P/wAOb/8AEQ/8cBEv/HART/xwEW//ABRv/wAZz/8AGh//ABr//HAbL/8AGz//ABvP/HAfj/8AIB/8cCBP/wAgf/8AIT//ACFP/wAhf/8AI2/8cCPP/wAj7/6wJA//ACRP/wAmv/8AJt//ACmf/wApv/8AKd//ACqf/HAqv/8AKt/8cCw//wAsT/8ALF//ACz//wAxv/8AMd//ADH//wAyH/8AMj//ADJf/wAyf/8AMp//ADL//HAzH/xwMz/8cDNf/HAzf/xwM5/8cDO//HAz3/8AM///ADQf/wA0P/xwNF//AD3P/rA97/6wPm/+kD6v/rAKEABgANAAsADQBF//AAR//AAEj/wABJ/8AASgANAEv/wABT/+IAVf/AAFoACwBdAAsAo//wAKT/8ACl//AApv/wAKf/8ACo//AAqv/AAKv/wACs/8AArf/AAK7/wAC1/+IAtv/iALf/4gC4/+IAuf/iAMAACwDCAAsAxP/wAMb/8ADI//AAyv/AAMz/wADO/8AA0P/AANL/wADW/8AA2P/AANr/wADc/8AA3v/AAOD/wADi/8AA5P/AAOb/wAEQ/+IBEv/iART/4gEW/8ABOgALAUb/wAFP//ABZgANAZz/wAGh/8ABowALAa0ACwGv/+IBsf/WAbL/wAGz/8ABtv/VAbz/4gHz//AB9//IAfj/wAH+/9cCAf/iAgT/wAIGAAsCB//AAhP/wAIU/8ACF//AAhz/1wIhAAsCNv/iAjgACwI6AAsCPP/AAj7/7AJA/8ACQgAMAkT/wAJr/8ACbf/AAnEACwKI/9cCk//wApX/8AKZ/8ACm//AAp3/wAKp/+ICq//AAq3/4gKxAAsCswALArUACwLD/8ACxP/AAsX/wALHAAsCyQALAs//wALV/9cC1//wAwP/8AMF//ADB//wAwn/8AML//ADDf/wAw//8AMR//ADE//wAxX/8AMX//ADGf/wAxv/wAMd/8ADH//AAyH/wAMj/8ADJf/AAyf/wAMp/8ADL//iAzH/4gMz/+IDNf/iAzf/4gM5/+IDO//iAz3/wAM//8ADQf/AA0P/4gNF/8ADVQALA1cACwNZAAsDWwALA3AADQNxAA0DcwANA3QADQN1AA0DfgANA38ADQPXAA0D2QAOA9r/9QPc/+wD3v/tA+b/7APq/+4D7P+/A/cADQAPAfcAFAH+ABACBf/wAgr/8AIP//ACEgAWAhwAEAJj/+YCef/wAnv/3AKIABACjv/wArf/8ALR//AC1QAQAEwAR//uAEj/7gBJ/+4AS//uAFX/7gCq/+4Aq//uAKz/7gCt/+4Arv/uAMr/7gDM/+4Azv/uAND/7gDS/+4A1v/uANj/7gDa/+4A3P/uAN7/7gDg/+4A4v/uAOT/7gDm/+4BFv/uAUb/7gGc/+4Bof/uAbL/7gGz/+4B9wASAfj/7gH+AA4CBP/uAgX/4wIH/+4CCv/jAg3/uAIP/+MCE//uAhT/7gIX/+4CHAAOAjz/7gJA/+4CRP/uAmP/ugJr/+4Cbf/uAnn/4wJ7/9kCiAAOAo7/4wKZ/+4Cm//uAp3/7gKr/+4Ct//jAsP/7gLE/+4Cxf/uAs//7gLR/+MC1QAOAxv/7gMd/+4DH//uAyH/7gMj/+4DJf/uAyf/7gMp/+4DPf/uAz//7gNB/+4DRf/uACAAWv/AAF3/wADA/8AAwv/AATr/wAGj/8ABrf/AAgX/gAIG/8ACCv/uAg//8AIh/8ACJP/bAjj/wAI6/8ACQv/cAmP/RwJx/8ACef/uAnv/7gKO/+4Csf/AArP/wAK1/8ACt//uAscABwLJ//QC0f9/A1X/wANX/8ADWf/AA1v/wAAhAFr/9ABc//AAXf/0AMD/9ADC//QBOv/0AaP/9AGt//QB9//vAfn/8AH+//MCBv/0Agj/8AIP/+4CHP/zAiH/9AI4//QCOv/0Aln/8AJx//QCdf/wAoT/8AKI//MCn//wArH/9AKz//QCtf/0Ar//8ALV//MDVf/0A1f/9ANZ//QDW//0AAoABv/WAAv/1gFm/9YDcP/WA3H/1gNz/9YDdP/WA3X/1gN+/9YDf//WABUAXP/gAfn/4AIF/3YCCP/gAgr/wgIP/9MCJP/ZAkL/2wJZ/+ACY/8eAnX/4AJ5/8ICe//tAoT/4AKO/8ICn//gArf/wgK//+ACx//wAsn/8gLR/1YADQIF/2QCCv/SAg//2QIk/9kCQv/bAmP/HgJ5/9ICe//tAo7/0gK3/9ICx//wAsn/8gLR/1YACgHv/8MCBf/PAg//1AJj/84Cev/nAn7/3wLG/9ECyP/sAtD/oALR/9EACQIF/2oCD//GAiT/2QJC/9sCY/8eAnv/7QLH//ACyf/yAtH/VgAJAA0AFABBABEAVv/iAGEAEwPc/9kD3v/ZA+b/2QPq/9kD7P+0AAoABv/XAAv/1wFm/9cDcP/XA3H/1wNz/9cDdP/XA3X/1wN+/9cDf//XABQAW//BAZb/xQG0/7QB9P/XAgX/uQIP/+kCJP+yAj7/0gJC/8gCY/+gAnv/xQKa/+QCx//MAsn/zALR/8sC0v/vA9z/5wPe/+cD5v/mA+r/6AA6AAT/xABW/78AW//RAG7/bAB+/24Aif9DAKn/rAC7/6EBlv+4AaX/fgGp/3sBsP+bAbH/eQG0/7IBtv9+Abj/fQG5/3wB1/+vAe8ADwH0/+QB9f+gAff/dAH6/4ACBf+yAg7/fQIP/7ICEP+AAhL/eQIVACgCIv99AiT/fwI+/2YCQv/aAlH/gQJT/5gCX/99AmP/swJp/6ACe/98An7/mgJ//2wCmv/mAsL/awLH/5ICyf+tAs3/ewLQAA8C0f+RAtL/8gPW//ED2f/xA9r/vAPc/7kD3v+5A+b/uQPq/7kD7P+vA/b/7QAGAbT/6gH3/+4CBf/WAg//7QJj/+wC0f/sABIB1/+uAe8AEgH1/+AB9/+tAfr/1gIO/98CEv/SAiL/4AI+/84CUf/dAlP/4gJf/+ACaf/gAnv/6QJ//9oCwv+9As3/3wLQABEAMABW/34AW/+dAG7+8QB+/vQAif6rAKn/XgC7/0sBlv9yAaX/DwGp/woBsP9BAbH/BwG0/2gBtv8PAbj/DgG5/wwB1/9jAe8ABQH0/70B9f9JAff+/gH6/xMCBf9oAg7/DgIP/2gCEP8TAhL/BwIVADACIv8OAiT/EQI+/ucCQv+sAlH/FQJT/zwCX/8OAmP/agJp/0kCe/8MAn7/PwJ//vECmv/AAsL+7wLH/zECyf9fAs3/CgLQAAUC0f8wAtL/1QACAff/aAI+/+4AFwGW/9QBqP/tAasAEQG0/+ABtv/nAbj/5QG5/+4B1wASAfT/6QIF/9cCY//XAnv/0wJ+/9YCf//FApr/5wLGAA0CyAAMAtH/1gLS//ID3P/pA97/5wPm/+cD6v/pAAECPv/xAAICBf/WA3H/iAAJAA0ADwBBAAwAVv/rAGEADgPc/+cD3v/nA+b/5wPq/+kD7P/LAB0AI/+vAFj/7wBb/98BR//u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AX4BfgAFAX8BfwAQAYIBggACAYMBgwADAYQBhAAcAYUBhQACAYYBhgAGAYcBhwARAYgBiAAHAYkBiQAFAYoBigAHAYsBiwAJAYwBjAACAY0BjgAHAZABkAAFAZIBkgALAZQBlAAMAZUBlQAQAZcBlwAPAZoBmgAHAZsBmwAQAZ4BngAWAaMBowAZAacBpwAWAa0BrQAZAa8BrwAXAbEBsQATAbwBvAAXAcMBxAAGAcYBxgAcAckBygAHAcsBywAIAcwBzQAdAc8BzwAJAdEB0QAeAdIB0gAHAdMB0wACAdUB1QADAdYB1gAcAdgB2AAGAdkB2QAPAdsB2wAHAd0B3QAJAd4B4AAHAeEB4QAFAeMB4wALAeQB5AAEAeUB5QAMAeYB5gAeAegB6AAPAekB6QAHAesB6wAHAe0B7QAdAe8B7wAdAfMB8wASAfYB9gAfAfgB+AAVAfkB+QAaAgECAQAXAgMCAwATAgQCBAAUAgYCBgAZAgcCBwATAggCCAAaAg0CDQAgAg8CDwAgAhACEAATAhMCFAAVAhYCFgAfAhwCHQAgAiECIQAZAiUCJQAdAiYCJgAgAikCKQACAjYCNgAXAjcCNwANAjgCOAAZAjkCOQANAjoCOgAZAlECUQATAlICUgAcAlMCUwAfAlQCVAAcAlgCWAAPAlkCWQAaAlwCXAAJAl4CXgAJAmACYAAJAmICYgAJAmQCZAAHAmwCbAAEAm0CbQAUAm4CbgAMAnACcAAQAnECcQAZAnICcgAQAnQCdAAPAnUCdQAaAn0CfQAWAoICggAHAoMCgwAPAoQChAAaAosCiwAHAo8CjwAHApECkQAHApICkgACApMCkwASApQClAACApUClQASApgCmAAGApkCmQAVApsCmwAVAp0CnQAVAp4CngAPAp8CnwAaAqgCqAAFAqkCqQAXAq0CrQAXAq8CrwATArACsAAeArECsQAZArICsgAeArMCswAZArQCtAAeArUCtQAZArgCuAAcArkCuQAfAr0CvQAfAr4CvgAPAr8CvwAaAtYC1gACAtcC1wASAuYC5gAHAucC5wAWAvgC+AAOAvoC+gAOAvwC/AAOAwIDAgACAwMDAwASAwQDBAACAwUDBQASAwYDBgACAwcDBwASAwgDCAACAwkDCQASAwoDCgACAwsDCwASAwwDDAACAw0DDQASAw4DDgACAw8DDwASAxADEAACAxEDEQASAxIDEgACAxMDEwASAxQDFAACAxUDFQASAxYDFgACAxcDFwASAxgDGAACAxkDGQASAxoDGgAGAxsDGwAVAxwDHAAGAx0DHQAVAx4DHgAGAx8DHwAVAyADIAAGAyEDIQAVAyIDIgAGAyMDIwAVAyQDJAAGAyUDJQAVAyYDJgAGAycDJwAVAygDKAAGAykDKQAVAyoDKgAHAywDLAAHAy4DLgAFAy8DLwAXAzADMAAFAzEDMQAXAzIDMgAFAzMDMwAXAzQDNAAFAzUDNQAXAzYDNgAFAzcDNwAXAzgDOAAFAzkDOQAXAzoDOgAFAzsDOwAXA0MDQwAXA0YDRgAIA0gDSAAIA1QDVAAQA1UDVQAZA1YDVgAQA1cDVwAZA1gDWAAQA1kDWQAZA1oDWgAQA1sDWwAZA1wDXAAFA3IDcgABA3YDdgABA3oDewABBDEEMQAEBDMENAAFAAEABgQwAAEAAAAAAAAAAAABAAAAAAAAAAAAFgAZABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAgAAAAAAAAACAAAAAAAGgAAAAAAAAAAAAgAAAAIAAAAGwAJAAoACwAMABcADQAYAAAAAAAAAAAAAAAAAAMAAAAEAAQABAAAAAQAAAAAAAAAAAAAAAUABQAGAAUABAAAAAcAAAAOAA8AAAAcAA8AEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAIAAgACAAIAAgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAgACAAIAAgAAAAIAAoACgAKAAoADQAAAAAAAwADAAMAAwADAAMAAAAEAAQABAAEAAQAAAAAAAAAAAAAAAUABgAGAAYABgAGAAAAAAAOAA4ADgAOAA8AAAAPAAIAAwACAAMAAgADAAgABAAIAAQACAAEAAgABAAAAAQAAAAAAAAABAAAAAQAAAAEAAAABAAAAAQACAAEAAgABAAIAAQACAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABQAAAAUABQAAAAAACAAGAAgABgAIAAYACAAEAAAAAAAAAAAAAAAAABsABwAbAAcAGwAHABsABwAJAAAACQAAAAAAAAAKAA4ACgAOAAoADgAKAA4ACgAOAAoADgAMAAAADQAPAA0AGAAQABgAEAAYABAAAAAAAAAACAAEAAAADgAAAAAAAAAAAAAAAgADAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGwAHAAkAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAACAANAAAAAAACAAAAAAACAAAAGAAAAAgAAAAAAAIAAAAAAAAACAAAAAAAAAAAAA0AAAAXAAAAAAAAAA0ABAAAAAUAAAAOAAQAAAAPAAAAAAAAAAUAAAAAAAAAAAAAAA8AAAAGAAAAAAAEAAQAAAAOAAAAAAAAAAAAAAAOAAYADgAAAAAAAAAAAAAAAAAAAAkAAAAIAAAAAAAAABoAEQAAAAkAAAAAABUAAAACAAAAAAAAAAAAAAAXAAAAAAAAAAAAEQAAAAAACAAAAAAACAAJABUAAAAXAAAAEgAAAAAAAAAAAAAAAAAAAAAAAwAAAAAABQAAAAQAHAAAAAUABQAFABMABQAFAAYABQAFAAQAAAAPAAQAHAAFABQABQAFAAAAAAAFAAAABQAAAAQABAAAAAUABAAHAAAAAAAAABMABQAAAAUABQAPAAAACAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAGAAsADwALAA8ACAAEAAgAAAAIAAQACAAAAAgABAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAABcAHAAAAAAAAAAFAAAAAAAAAAAACQAAAAAABQAAAAUAAAAAAAgABAAIAAQACQAAAA0ADwANAAAAFwAcAAkAAAASABQAAAAAAAAAAAAAAAAAAAAAAAAAFwAcAAAAAAARABMAAAAFAAAABQASABQAAAAFAAAAAgADAAIAAwAAAAAAAAAEAAAABAAAAAQAFwAcAAAAAAAAAAAAAAAFAAAABQAIAAYACAAEAAgABgAAAAAAFQAPABUADwAVAA8AEgAUAAAABQAAAAUAAAAFABcAHAAAAAAAAAAEAAQABAAAAAAAAAAAABEAAAAAAAAACAAEAAAAAAAAAAAAEQATAAIAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAwAAAAMAAAAAAAAAAAAAAACAAMAAgADAAIAAwACAAMAAgADAAIAAwACAAMAAgADAAIAAwACAAMAAgADAAIAAwAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAAAAAAAACAAGAAgABgAIAAYACAAGAAgABgAIAAYACAAGAAgABAAIAAQACAAEAAgABgAIAAQACgAOAAoADgAAAA4AAAAOAAAADgAAAA4AAAAOAA0ADwANAA8ADQAPAA0ADwAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAGQAZAAAAAQABABYAAQABAAEAFgAAAAAAAAAWABYAAAAAAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAgAAAAIAAgAAAABAAAACgIGCBAABERGTFQAGmN5cmwASGdyZWsAdmxhdG4ApAAEAAAAAP//ABIAAAAKABQAHgAoADQAQQBLAFUAXwBpAHMAfQCHAJEAmwClAK8ABAAAAAD//wASAAEACwAVAB8AKQA1AEIATABWAGAAagB0AH4AiACSAJwApgCwAAQAAAAA//8AEgACAAwAFgAgACoANgBDAE0AVwBhAGsAdQB/AIkAkwCdAKcAsQAoAAZBWkUgAFRDUlQgAH5NT0wgAKhOQVYgANRST00gAQBUVVIgASwAAP//ABMAAwANABcAIQArADIANwBEAE4AWABiAGwAdgCAAIoAlACeAKgAsgAA//8AEgAEAA4AGAAiACwAOABFAE8AWQBjAG0AdwCBAIsAlQCfAKkAswAA//8AEgAFAA8AGQAjAC0AOQBGAFAAWgBkAG4AeACCAIwAlgCgAKoAtAAA//8AEwAGABAAGgAkAC4AOgA+AEcAUQBbAGUAbwB5AIMAjQCXAKEAqwC1AAD//wATAAcAEQAbACUALwA7AD8ASABSAFwAZgBwAHoAhACOAJgAogCsALYAAP//ABMACAASABwAJgAwADwAQABJAFMAXQBnAHEAewCFAI8AmQCjAK0AtwAA//8AEwAJABMAHQAnADEAMwA9AEoAVABeAGgAcgB8AIYAkACaAKQArgC4ALljMnNjBFhjMnNjBF5jMnNjBGRjMnNjBGpjMnNjBGpjMnNjBGpjMnNjBGpjMnNjBGpjMnNjBGpjMnNjBGpjY21wBHBjY21wBHBjY21wBHBjY21wBHBjY21wBHBjY21wBHBjY21wBHBjY21wBHBjY21wBHBjY21wBHBkbGlnBHhkbGlnBH5kbGlnBIRkbGlnBIpkbGlnBIpkbGlnBIpkbGlnBIpkbGlnBIpkbGlnBIpkbGlnBIpkbm9tBJBkbm9tBJZkbm9tBJxkbm9tBKJkbm9tBKJkbm9tBKJkbm9tBKJkbm9tBKJkbm9tBKJkbm9tBKJmcmFjBKhmcmFjBKhmcmFjBKhmcmFjBKhmcmFjBKhmcmFjBKhmcmFjBKhmcmFjBKhmcmFjBKhmcmFjBKhsaWdhBLJsaWdhBLpsbnVtBMBsbnVtBMZsbnVtBMxsbnVtBNJsbnVtBNJsbnVtBNJsbnVtBNJsbnVtBNJsbnVtBNJsbnVtBNJsb2NsBNhsb2NsBN5sb2NsBORudW1yBOpudW1yBPBudW1yBPZudW1yBPxudW1yBPxudW1yBPxudW1yBPxudW1yBPxudW1yBPxudW1yBPxvbnVtBQJvbnVtBQhvbnVtBQ5vbnVtBRRvbnVtBRRvbnVtBRRvbnVtBRRvbnVtBRRvbnVtBRRvbnVtBRRwbnVtBRpwbnVtBSBwbnVtBSZwbnVtBSxwbnVtBSxwbnVtBSxwbnVtBSxwbnVtBSxwbnVtBSxwbnVtBSxzbWNwBTJzbWNwBThzbWNwBT5zbWNwBURzbWNwBURzbWNwBURzbWNwBURzbWNwBURzbWNwBURzbWNwBURzczAxBUpzczAxBVBzczAxBVZzczAxBVxzczAxBVxzczAxBVxzczAxBVxzczAxBVxzczAxBVxzczAxBVxzczAyBWJzczAyBWhzczAyBW5zczAyBXRzczAyBXRzczAyBXRzczAyBXRzczAyBXRzczAyBXRzczAyBXRzczAzBXpzczAzBYBzczAzBYZzczAzBYxzczAzBYxzczAzBYxzczAzBYxzczAzBYxzczAzBYxzczAzBYxzczA0BZJzczA0BZhzczA0BZ5zczA0BaRzczA0BaRzczA0BaRzczA0BaRzczA0BaRzczA0BaRzczA0BaRzczA1BapzczA1BbBzczA1BbZzczA1BbxzczA1BbxzczA1BbxzczA1BbxzczA1BbxzczA1BbxzczA1BbxzczA2BcJzczA2BchzczA2Bc5zczA2BdRzczA2BdRzczA2BdRzczA2BdRzczA2BdRzczA2BdRzczA2BdRzczA3BdpzczA3BeBzczA3BeZzczA3BexzczA3BexzczA3BexzczA3BexzczA3BexzczA3BexzczA3Bex0bnVtBfJ0bnVtBfh0bnVtBf50bnVtBgR0bnVtBgR0bnVtBgR0bnVtBgR0bnVtBgR0bnVtBgR0bnVtBgQAAAABAAEAAAABAAMAAAABAAIAAAABAAAAAAACAAgACQAAAAEADgAAAAEAEAAAAAEADwAAAAEADQAAAAEAQwAAAAEARQAAAAEARAAAAAEAQgAAAAMAPwBAAEEAAAACABEAEgAAAAEAEgAAAAEAPAAAAAEAPgAAAAEAPQAAAAEAOwAAAAEACgAAAAEADAAAAAEACwAAAAEARwAAAAEASQAAAAEASAAAAAEARgAAAAEAMAAAAAEAMgAAAAEAMQAAAAEALwAAAAEAOAAAAAEAOgAAAAEAOQAAAAEANwAAAAEABQAAAAEABwAAAAEABgAAAAEABAAAAAEAFAAAAAEAFgAAAAEAFQAAAAEAEwAAAAEAGAAAAAEAGgAAAAEAGQAAAAEAFwAAAAEAHAAAAAEAHgAAAAEAHQAAAAEAGwAAAAEAIAAAAAEAIgAAAAEAIQAAAAEAHwAAAAEAJAAAAAEAJgAAAAEAJQAAAAEAIwAAAAEAKAAAAAEAKgAAAAEAKQAAAAEAJwAAAAEALAAAAAEALgAAAAEALQAAAAEAKwAAAAEANAAAAAEANgAAAAEANQAAAAEAMwBLAJgAmACYAJgEJgQmBCYEJgcUB8AOUA5QDmYOiA6IDogOiA6+DuQPEg8SDxIPEg8mDyYPJg8mDzoPOg86DzoPTg9OD04PTg9gD2APYA9gD3oPeg96D3oPvA+8D7wPvA/aD9oP2g/aD/gP+A/4D/gQKhAqECoQKhBcEFwQXBBcEI4QohDuEMwQzBDMEMwQ7hDuEO4Q7hEaAAEAAAABAAgAAgHEAN8DvQPsA+sD6gPpA+gD5wPmA+UD5APjA+ID4QPgA98D3gPdA9wD2wPaA9kD2APXA9YD9gP3BKkDvAO7BFAEUQRSBFMEVARVBFcEWARZBFoEWwRcBF0EXgRfBE4EYARhBGIEYwRkBGUEZgRtBG4EbwRwBEwEcQRyBHMEdAR1BHYEdwR4BE0EeQR6BHsEfAR9BH4EfwSABIEEggSDBIQEhQSGBIcEiASJBIoEiwSMBI0EjgSPBJAEkQSSBJMERASUBJUElgSXBJgEmQSaBJ0EnARPBJ4EnwSgBKEEogSjBKQEpQSmBKcEqAP+BFYEmwSqBKsErAStBK4ErwSwBLEEsgO6A7kEswS0BLUDuAS2BLcDtwS4A7YEuQPGBLoD0QS7BLwD0gS9A9MD1AS+BL8EwAP5BMED+ATCBMMExATFA/8EAAQBBMYExwQCBMgEAwTJBMoEBATLBAUEBgQHBMwECAQJBM0EzgTPBNAE0QTSBNMECgTcBNQECwQMBA0EDgQPBBAEEQQSBBMEFAQ4BBUEFgTVBBcEGAQZBNYEGgTXBNgEGwQcBB0EHgQfBCAE2QQhBCIE2gQjBNsEJAQlBCcEJgABAN8ACAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQA6ADsAPAA9AD4AZgBoAIMAhACFAIYAhwCIAIoAiwCMAI0AjgCPAJAAkQCSAJMAlACVAJYAlwCYAJkAnACdAJ4AnwCgAKIAwwDFAMcAyQDLAM0AzwDRANMA1QDXANkA2wDdAN8A4QDjAOUA5wDrAO0A7wDxAPMA9wD5APwA/gEAAQIBBgEIAQoBDwERARMBFQEXARkBGwEdAR8BIQEjASUBJwEpASsBLQEvATEBMwE1ATcBOQE7ATwBPgFAAU4BYgF5AXsBfAF9AX4BfwGAAYIBgwGEAYUBhgGHAYgBiQGKAYsBjAGNAY8BkAGRAZIBkwGUAZUBlgGXAZgBmQGaAZsBxAHFAcYBxwHIAckBygHLAcwBzQHOAc8B0QHSAdMB1AHVAdYB1wHYAdkB2gHbAdwB3QHeAd8B4AHhAeIB4wHkAeUB5gHnAegB6QHqAesB7AHtAe4B7wHwAfEB8gJSAlQCWAJaAlwCXgJiAmQCagJsAnACcgJ0AnYCegJ8An4CgAKaAqICpAKqArADhwOOA5MDlgABAAAAAQAIAAIBdAC3A+wD6wPqA+kD6APnA+YD5QPkA+MD4gPhA+AD3wPeA90D3APbA9oD2QPYA9cD1gP2A/cEqQRQBFEEUgRTBFQEVQRXBFgEWQRaBFsEXARdBF4EXwROBGAEYQRiBGMEZARlBGYEbQRuBG8EcASmBHEEcgRzBHQEdQR2BHcEeARNBHkEegR7BHwEfQR+BH8EgASBBIIEgwSEBIUEhgSHBIgEiQSKBIsEjASNBI4EjwSQBJEEkgSTBEQElASVBJYElwSYBJkEmgSdBJwETwSeBJ8EoAShBKIEowSkBKUEpwSoA/4EVgSbBMgEAwTJBMoEBATLBAUEBgQHBMwECAQJBM0EzgTPBNAE0QTSBNMECgTcBNQECwQMBA0EDgQPBBAEEQQSBBMEFATAA/kEwQP4BMIEwwTEBMUD/wQABAEExgTHBAIEOAQVBBYE1QQXBBgEGQTWBBoE1wTYBBsEHAQdBB4EHwQgBNkEIQQiBNoEIwTbAAEAtwBFAEYARwBIAEkASgBLAEwATQBOAE8AUABRAFIAUwBUAFUAVgBXAFgAWQBaAFsAXABdAF4AowCkAKUApgCnAKgAqgCrAKwArQCuAK8AsACxALIAswC0ALUAtgC3ALgAuQC8AL0AvgC/AMAAwgDEAMYAyADKAMwAzgDQANIA1ADWANgA2gDcAN4A4ADiAOQA5gDoAOwA7gDwAPIA9AD4APoA/QD/AQEBAwEHAQkBCwEQARIBFAEWARgBGgEcAR4BIAEiASQBJgEoASoBLAEuATABMgE0ATYBOAE6AT0BPwFBAU8BYwHzAfQB9QH2AfcB+AH5AfoB+wH8Af0B/gH/AgACAQICAgMCBAIFAgYCBwIIAgkCCgILAgwCDQIOAg8CEAIRAhICFAIVAhYCFwIYAhkCGgIbAhwCHQIeAh8CIQIiAlMCVQJZAlsCXQJfAmMCZQJrAm0CcQJzAnUCdwJ7An0CfwKBApsCowKlAqsCsQAGAAAABgASACoAQgBaAHIAigADAAAAAQASAAEAkAABAAAASgABAAEATQADAAAAAQASAAEAeAABAAAASgABAAEATgADAAAAAQASAAEAYAABAAAASgABAAEA8gADAAAAAQASAAEASAABAAAASgABAAECGQADAAAAAQASAAEAMAABAAAASgABAAECGwADAAAAAQASAAEAGAABAAAASgABAAEDLQACAAEBcQF1AAAABAAAAAEACAABBh4ANgByAKQArgC4AMoA/AEOARgBSgFkAX4BkAG6AewB9gIYAjICRAJ2AogCogLMAt4DEAMaAyQDNgNoA3IDfAOGA6ADugPMA/YEKAQyBFQEbgSABLIExATeBQgFGgUkBS4FOAVCBWwFlgXABeoGFAAGAA4AFAAaACAAJgAsAIMAAgFxAIQAAgFyAIYAAgFzAwQAAgF0AVQAAgF1AwIAAgF2AAEABALYAAIBdgABAAQAyQACAXIAAgAGAAwC2gACAXYC3AACA6sABgAOABQAGgAgACYALACLAAIBcQCMAAIBcgMeAAIBcwMcAAIBdAFWAAIBdQMaAAIBdgACAAYADAFKAAIBcgDlAAIDqwABAAQC3gACAXYABgAOABQAGgAgACYALACPAAIBcQCQAAIBcgDrAAIBcwMqAAIBdAFYAAIBdQMsAAIBdgADAAgADgAUAuAAAgFyAuIAAgF2APkAAgOrAAMACAAOABQA/AACAXIC5AACAXYA/gACA6sAAgAGAAwC5gACAXIC6AACAXYABQAMABIAGAAeACQBTAACAXEBBgACAXIAlAACAXMC6gACAXYBCAACA6sABgAOABQAGgAgACYALACVAAIBcQCWAAIBcgCYAAIBcwMwAAIBdAFaAAIBdQMuAAIBdgABAAQC7AACAXIABAAKABAAFgAcARcAAgFyAVwAAgF1Au4AAgF2ARkAAgOrAAMACAAOABQBHQACAXIC8AACAXYBYAACA6sAAgAGAAwC8gACAXYBYgACA6sABgAOABQAGgAgACYALACcAAIBcQCdAAIBcgErAAIBcwNIAAIBdAFeAAIBdQNGAAIBdgACAAYADAL0AAIBcwL2AAIBdgADAAgADgAUAvgAAgFxAvoAAgFyAv4AAgF2AAUADAASABgAHgAkA1QAAgFxAKAAAgFyA1oAAgFzA1gAAgF0A1YAAgF2AAIABgAMATwAAgFyAwAAAgF2AAYADgAUABoAIAAmACwAowACAXEApAACAXIApgACAXMDBQACAXQBVQACAXUDAwACAXYAAQAEAtkAAgF2AAEABADKAAIBcgACAAYADALbAAIBdgLdAAIDqwAGAA4AFAAaACAAJgAsAKsAAgFxAKwAAgFyAx8AAgFzAx0AAgF0AVcAAgF1AxsAAgF2AAEABAFLAAIBcgABAAQC3wACAXYAAQAEAy0AAgF2AAMACAAOABQC4QACAXIC4wACAXYA+gACA6sAAwAIAA4AFAD9AAIBcgLlAAIBdgD/AAIDqwACAAYADALnAAIBcgLpAAIBdgAFAAwAEgAYAB4AJAFNAAIBcQEHAAIBcgC0AAIBcwLrAAIBdgEJAAIDqwAGAA4AFAAaACAAJgAsALUAAgFxALYAAgFyALgAAgFzAzEAAgF0AVsAAgF1Ay8AAgF2AAEABALtAAIBcgAEAAoAEAAWABwBGAACAXIBXQACAXUC7wACAXYBGgACA6sAAwAIAA4AFAEeAAIBcgLxAAIBdgFhAAIDqwACAAYADALzAAIBdgFjAAIDqwAGAA4AFAAaACAAJgAsALwAAgFxAL0AAgFyASwAAgFzA0kAAgF0AV8AAgF1A0cAAgF2AAIABgAMAvUAAgFzAvcAAgF2AAMACAAOABQC+QACAXEC+wACAXIC/wACAXYABQAMABIAGAAeACQDVQACAXEAwAACAXIDWwACAXMDWQACAXQDVwACAXYAAgAGAAwBPQACAXIDAQACAXYAAQAEAVAAAgFyAAEABAFSAAIBcgABAAQBUQACAXIAAQAEAVMAAgFyAAUADAASABgAHgAkAK8AAgFxALAAAgFyAOwAAgFzAysAAgF0AVkAAgF1AAUADAASABgAHgAkAz4AAgFxAzwAAgFyA0IAAgFzA0AAAgF0A0QAAgF2AAUADAASABgAHgAkAz8AAgFxAz0AAgFyA0MAAgFzA0EAAgF0A0UAAgF2AAUADAASABgAHgAkA0wAAgFxA0oAAgFyA1AAAgFzA04AAgF0A1IAAgF2AAUADAASABgAHgAkA00AAgFxA0sAAgFyA1EAAgFzA08AAgF0A1MAAgF2AAEABAHBAAIBcgACABEAJQApAAAAKwAtAAUALwA0AAgANgA7AA4APQA+ABQARQBJABYASwBNABsATwBUAB4AVgBbACQAXQBeACoAiQCJACwAmwCbAC0AqQCpAC4AuwC7AC8A9AD0ADABRQFIADEBwAHAADUAAQAAAAEACAABAAYAPwABAAIBIQEiAAEAAAABAAgAAgAOAAQE3QTeBN8E4AABAAQAxwDIANsA3AAEAAAAAQAIAAEAJgACAAoAHAACAAYADAOsAAIASgOxAAIAWAABAAQDsgACAFgAAQACAEoAVwAEAAAAAQAIAAEARAACAAoAFAABAAQDrQACAE0AAQAEA68AAgBNAAQAAAABAAgAAQAeAAIACgAUAAEABAOuAAIAUAABAAQDsAACAFAAAQACAEoDrAABAAAAAQAIAAEABgN5AAEAAQBLAAEAAAABAAgAAQAGAiIAAQABAaEAAQAAAAEACAABAAYDjAABAAEANgABAAAAAQAIAAIAHAACA8EDwAABAAAAAQAIAAIACgACA78DvgABAAIALwBPAAEAAAABAAgAAgAeAAwEMQQzBDIENAQ1BCgEKQQqA/sELAQtBC4AAQAMACcAKAArADMANQBGAEcASABLAFMAVABVAAEAAAABAAgAAgAMAAMELwQwBDAAAQADAEkASwP7AAEAAAABAAgAAgBmAAgERgQ2BDcEOQQ6BEIEQwRFAAEAAAABAAgAAgAWAAgAGwAVABQAHQAZABgAFwAWAAEACAP6BCsEZwRoBGkEagRrBGwAAQAAAAEACAACABYACARnBCsEbARrBGoEaQP6BGgAAQAIABQAFQAWABcAGAAZABsAHQABAAAAAQAIAAIAFgAIABUAFgAXABgAGQAbAB0AFAABAAgENgQ3BDkEOgRCBEMERQRGAAEAAAABAAgAAQAGA3AAAQABABMABgAAAAEACAADAAEAEgABAGYAAAABAAAASgACAAIDgwODAAADxwPQAAEAAQAAAAEACAACADwACgPQA88DzgPNA8wDywPKA8kDyAPHAAEAAAABAAgAAgAaAAoEOwB8AHUAdgQ8BD0EPgQ/BEAEQQACAAEAFAAdAAAAAQAAAAEACAACACYAEAPQA88DzgPNA8wDywPKA8kDyAPHBEkERwRKBEsESAThAAEAEAAUABUAFgAXABgAGQAaABsAHAAdAE0ATgDyAhkCGwMt\",\n  \"Roboto-Regular.ttf\": \"AAEAAAASAQAABAAgR0RFRtRX1FkAAg/sAAACREdQT1NKcuCzAAISMAAAUiRHU1VCw4aZEQACZFQAABfoT1MvMqCnsaYAAAGoAAAAYGNtYXBAmkl2AAAafAAAEshjdnQgJEEG5QAAL9wAAABMZnBnbWf0XKsAAC1EAAABvGdhc3AACAATAAIP4AAAAAxnbHlmHN2bBQAAOfAAAdM2aGRteDc4ERcAABWQAAAE7GhlYWT4RqsOAAABLAAAADZoaGVhCroKggAAAWQAAAAkaG10eOiEiIgAAAIIAAATiGxvY2HgyGepAAAwKAAACcZtYXhwBxIC+QAAAYgAAAAgbmFtZTVTY1kAAg0oAAACmHBvc3T/bQBkAAIPwAAAACBwcmVwdKCP7AAALwAAAADbAAEAAAACAACEKlnoXw889QAbCAAAAAAAxPARLgAAAADQ206a+hv91QkwCHMAAAAJAAIAAAAAAAAAAQAAB2z+DAAACUn6G/5KCTAAAQAAAAAAAAAAAAAAAAAABOIAAQAABOIAjwAWAFQABQABAAAAAAAOAAACAAIUAAYAAQADBIUBkAAFAAAFmgUzAAABHwWaBTMAAAPRAGYCAAAAAgAAAAAAAAAAAOAACv9QACF/AAAAIQAAAABHT09HAEAAAP/9BgD+AABmB5oCACAAAZ8AAAAABDoFsAAgACAAAgOMAGQAAAAAAAAAAAH7AAAB+wAAAg8AoAKPAIgE7QB3BH4AbgXcAGkE+QBlAWUAZwK8AIUCyAAmA3IAHASJAE4BkgAdAjUAJQIbAJADTAASBH4AcwR+AKoEfgBdBH4AXgR+ADUEfgCaBH4AhAR+AE0EfgBwBH4AZAHwAIYBsQApBBEASARkAJgELgCGA8cASwcvAGoFOAAcBPsAqQU1AHcFPwCpBIwAqQRsAKkFcwB6BbQAqQItALcEagA1BQQAqQROAKkG/ACpBbQAqQWAAHYFDACpBYAAbQTtAKgEvwBQBMYAMQUwAIwFFwAcBxkAPQUEADkEzgAPBMoAVgIfAJIDSAAoAh8ACQNYAEADnAAEAnkAOQRaAG0EfQCMBDAAXASDAF8EPQBdAscAPAR9AGAEaACMAfEAjQHp/78EDgCNAfEAnAcDAIsEagCMBJAAWwR9AIwEjABfArUAjAQgAF8CnQAJBGkAiAPgACEGAwArA/cAKQPJABYD9wBYArUAQAHzAK8CtQATBXEAgwHzAIsEYABpBKYAWwW0AGkE2AAfAesAkwToAFoDWABmBkkAWwOTAJMDwQBmBG4AfwZKAFoDqgB4Av0AggRGAGEC7wBCAu8APgKCAHsEiACaA+kAQwIWAJMB+wB0Au8AegOjAHoDwABmBdwAVQY1AFAGOQBvA8kARAd6//IERABZBYAAdgS6AKYEwgCLBsEATgSwAH4EkQBHBIgAWwScAJUFmgAdAfoAmwRzAJoETwAiAikAIgWLAKIEiACRB6EAaAdEAGEB/ACgBYcAXQK5/+QFfgBlBJIAWwWQAIwE8wCIAgP/tAQ3AGIDxACpA40AjAOrAHgDagCBAfEAjQKtAHkCKgAyA8YAewL8AF4CWgB+AAD8pwAA/W8AAPyLAAD9XgAA/CcB7/04Ag0AtwQLAHECFwCTBHMAsQWkAB8FcQBnBT4AMgSRAHgFtQCyBJEARQW7AE0FiQBaBVIAcQSFAGQEvQCgBAIALgSIAGAEUABjBCUAbQSIAJEEjgB6ApcAwwRuACUD7ABlBMQAKQSIAJEETQBlBIgAYAQsAFEEXQCPBaMAVwWaAF8GlwB6BKEAeQRC/9oGSABKBf8AKgVkAHsIkQAxCKQAsQaCAD4FtACwBQsAogYEADIHQwAbBL8AUAW0ALEFqQAvBQcATQYsAFMF2QCvBXoAlgeHALAHwACwBhIAEAbrALIFBQCjBWQAkwcnALcFGABZBGwAYQSSAJ0DWwCaBNQALgYgABUEEABYBJ4AnARSAJwEoAAsBe8AnQSdAJwEngCcA9gAKAXNAGQEvQCcBFkAZwZ4AJwGngCRBPcAHgY2AJ0EWACdBE0AZAaHAJ0EZAAvBGj/6ARNAGcGyQAnBuQAnASJ//0EngCcBwgAnAYrAIEEVv/cBysAtwX4AJkE0gAoBEYADwcLAMkGCwC8BtEAkwXhAJYJBAC2B9EAmwQjAFAD2wBMBXEAZwSLAFsFCgAWBAMALgVxAGcEiABbBwEAnAYkAH4HCACcBisAgQUyAHUERwBkBP0AdAAA/GcAAPxxAAD9ZgAA/aQAAPobAAD6LARW/9wFGwCoBIkAjARjAKIDkACRBNsAsQQFAJEFCQCjBH4AmgaMAEQFgwA+B88AqAW0AJEIMQCwBvQAkQXuAHEE0wBtBywANAVcAB8FbwCWBGoAgwVwAIoGLwA/BL3/3gUJAKMEWgCaBbIAsQSIAJEFhwBdBKgAaASoAGkEtwA6A0kAOwT2AFcGlABZBuQAZAZWADYFKwAxBEkAUgQHAHkHwQBEBnUAPwf7AKkGoQCQBPYAdgQdAGUFrQAjBSAARgVkAJYDIABvBBQAAAgpAAAEFAAACCkAAAK5AAACCgAAAVwAAAR/AAACMAAAAaIAAADRAAAAAAAAAjQAJQI0ACUFQACiBj8AkAOmAA0BmQBgAZkAMAGXACQBmQBPAtQAaALbADwCwQAkBGkARgSPAFcCsgCKA8QAlAVaAJQA9gAmB6oARAJmAGwCZgBZA6MAOwLvADYDYAB6BKYAWwZVAB8GkACnCHYAqAdjADkGKwCMBH4AXwXaAB8EIgAqBHQAIAVIAF0FTwAfBecAegPOAGgIOgCiBQEAZwUXAJgGJgBUBtcAZAbPAGMGagBZBI8AagWOAKkErwBFBJIAqATFAD8IOgBiAgz/sASCAGUEZACYBBEAPgQvAIUECAArAkwAtQKPAG4CAwBcBPMAPARuAB8EiwA8BtQAPAbUADwE7gA8BpsAXwAAAAAIMwBbCDUAXAQgADsEngBaAfz/tgGRAGcDpACDA54AgQOfAIED9ABpBA4AaQPz/14D7wBuA6QAgQH9AJ8EhQATBFAAigR8AGAEgACKA+YAigPLAIoErABjBOMAigHoAJcDzwArBFQAigO0AIoGAgCKBOMAigS7AGAEXACKBLsAWQRKAIoEIABDBCYAKAR8AHQEZwAUBhUAMQRUACYEKwANBCMARwLvAFAC7wB6Au8AQgLvAD4C7wA2Au8AWwLvAFYC7wA6Au8ATwLvAEkDlgCPArUAngQ6AB4EwwBkBUwAsQUkALIEEwCSBT0AsgQPAJIEIABDBDMAMAQ8ABYDrwCKBGcAFAS7AGAEZwAUA4kAPgTOAIoD7wA/BWcAYAUXAGAE8gB1BXIAJgR8AGAHQQAnB08AigV0ACgEzQCKBFkAigUkAC4GCwAfBD8ARwTsAIoETgCLBMEAJwQfACIFKACKBGoAPQZRAIoGrACKBR0ACAXxAIoETgCKBHsASwZ2AIoEhwBQBBEACwZHAB8EeQCLBQkAiwU3ACMFwgBgBF8ADQSoACYGYQAmBGoAPQRqAIoFwwACBMoAXgQ/AEcEuwBgBDMAMAPjAEIIIgCKBKsAKAR9AIwEMgBcBJMAWwSMAFsDeQBXBI0AjAScAFsEPQBdBH0AYAWBAH4FrgB+BZMAsgXgAH4F4wB+A9UAoASCAIMDrwCKBFgADwTPAD4C7wBQAu8ANgLvAFsC7wBWAu8AOgLvAE8C7wBJBGsAZQQuAEoGpABgBLkAggUAAHgCBv+0AgT/tAH7AJsB+//6AfsAmwH7AIYEUACKAfsAAAI1ACUFXQAlBV0AJQSGAAAExgAxAp3/9AU4ABwFOAAcBTgAHAU4ABwFOAAcBTgAHAU4ABwFNQB3BIwAqQSMAKkEjACpBIwAqQIt/+ACLQCwAi3/6QIt/9YFtACpBYAAdgWAAHYFgAB2BYAAdgWAAHYFMACMBTAAjAUwAIwFMACMBM4ADwRaAG0EWgBtBFoAbQRaAG0EWgBtBFoAbQRaAG0EMABcBD0AXQQ9AF0EPQBdBD0AXQH6/8YB+gCWAfr/zwH6/7wEagCMBJAAWwSQAFsEkABbBJAAWwSQAFsEaQCIBGkAiARpAIgEaQCIA8kAFgPJABYFOAAcBFoAbQU4ABwEWgBtBTgAHARaAG0FNQB3BDAAXAU1AHcEMABcBTUAdwQwAFwFNQB3BDAAXAU/AKkFGQBfBIwAqQQ9AF0EjACpBD0AXQSMAKkEPQBdBIwAqQQ9AF0EjACpBD0AXQVzAHoEfQBgBXMAegR9AGAFcwB6BH0AYAVzAHoEfQBgBbQAqQRoAIwCLf+3Afr/nQIt/7YB+v+cAi3/7AH6/9ICLQAYAfH/+wItAKoGlwC3A9oAjQRqADUCA/+0BQQAqQQOAI0ETgChAfEAkwROAKkB8QBXBE4AqQKHAJwETgCpAs0AnAW0AKkEagCMBbQAqQRqAIwFtACpBGoAjARq/7wFgAB2BJAAWwWAAHYEkABbBYAAdgSQAFsE7QCoArUAjATtAKgCtQBTBO0AqAK1AGMEvwBQBCAAXwS/AFAEIABfBL8AUAQgAF8EvwBQBCAAXwS/AFAEIABfBMYAMQKdAAkExgAxAp0ACQTGADECxQAJBTAAjARpAIgFMACMBGkAiAUwAIwEaQCIBTAAjARpAIgFMACMBGkAiAUwAIwEaQCIBxkAPQYDACsEzgAPA8kAFgTOAA8EygBWA/cAWATKAFYD9wBYBMoAVgP3AFgHev/yBsEATgWAAHYEiABbBID/vgSA/74EJgAoBIUAEwSFABMEhQATBIUAEwSFABMEhQATBIUAEwR8AGAD5gCKA+YAigPmAIoD5gCKAej/vgHoAI4B6P/HAej/tATjAIoEuwBgBLsAYAS7AGAEuwBgBLsAYAR8AHQEfAB0BHwAdAR8AHQEKwANBIUAEwSFABMEhQATBHwAYAR8AGAEfABgBHwAYASAAIoD5gCKA+YAigPmAIoD5gCKA+YAigSsAGMErABjBKwAYwSsAGME4wCKAej/lQHo/5QB6P/KAegABgHoAIkDzwArBFQAigO0AIIDtACKA7QAigO0AIoE4wCKBOMAigTjAIoEuwBgBLsAYAS7AGAESgCKBEoAigRKAIoEIABDBCAAQwQgAEMEIABDBCYAKAQmACgEJgAoBHwAdAR8AHQEfAB0BHwAdAR8AHQEfAB0BhUAMQQrAA0EKwANBCMARwQjAEcEIwBHBTgAHATw//AGGP/+ApEABAWU//oFMv94BWb//QKX/5sFOAAcBPsAqQSMAKkEygBWBbQAqQItALcFBACpBvwAqQW0AKkFgAB2BQwAqQTGADEEzgAPBQQAOQIt/9YEzgAPBIUAZARQAGMEiACRApcAwwRdAI8EcwCaBJAAWwSIAJoD4AAhA/cAKQKX/+YEXQCPBJAAWwRdAI8GlwB6BIwAqQRzALEEvwBQAi0AtwIt/9YEagA1BSQAsgUEAKkFBwBNBTgAHAT7AKkEcwCxBIwAqQW0ALEG/ACpBbQAqQWAAHYFtQCyBQwAqQU1AHcExgAxBQQAOQRaAG0EPQBdBJ4AnASQAFsEfQCMBDAAXAPJABYD9wApBD0AXQNbAJoEIABfAfEAjQH6/7wB6f+/BFIAnAPJABYHGQA9BgMAKwcZAD0GAwArBxkAPQYDACsEzgAPA8kAFgFlAGcCjwCIBB4AoAID/7QBmQAwBvwAqQcDAIsFOAAcBFoAbQSMAKkFtACxBD0AXQSeAJwFiQBaBZoAXwUKABYEA//7CFkAWwlJAHYEvwBQBBAAWAU1AHcEMABcBM4ADwQCAC4CLQC3B0MAGwYgABUCLQC3BTgAHARaAG0FOAAcBFoAbQd6//IGwQBOBIwAqQQ9AF0FhwBdBDcAYgQ3AGIHQwAbBiAAFQS/AFAEEABYBbQAsQSeAJwFtACxBJ4AnAWAAHYEkABbBXEAZwSLAFsFcQBnBIsAWwVkAJMETQBkBQcATQPJABYFBwBNA8kAFgUHAE0DyQAWBXoAlgRZAGcG6wCyBjYAnQUEADkD9wApBIMAXwWpAC8EoAAsBTgAHARaAG0FOAAcBFoAbQU4ABwEWgBtBTgAHARa/8oFOAAcBFoAbQU4ABwEWgBtBTgAHARaAG0FOAAcBFoAbQU4ABwEWgBtBTgAHARaAG0FOAAcBFoAbQU4ABwEWgBtBIwAqQQ9AF0EjACpBD0AXQSMAKkEPQBdBIwAqQQ9AF0EjP/wBD3/ugSMAKkEPQBdBIwAqQQ9AF0EjACpBD0AXQItALcB+gCbAi0AowHxAIUFgAB2BJAAWwWAAHYEkABbBYAAdgSQAFsFgABHBJD/xAWAAHYEkABbBYAAdgSQAFsFgAB2BJAAWwV+AGUEkgBbBX4AZQSSAFsFfgBlBJIAWwV+AGUEkgBbBX4AZQSSAFsFMACMBGkAiAUwAIwEaQCIBZAAjATzAIgFkACMBPMAiAWQAIwE8wCIBZAAjATzAIgFkACMBPMAiATOAA8DyQAWBM4ADwPJABYEzgAPA8kAFgShAF8EoQBfBSQAsgRSAJwFtACpBJ0AnATGADED2AAoBQQAOQP3ACkFegCWBFkAZwV6AJYEWQBnBHMAsQNbAJoHQwAbBiAAFQYvAD8Evf/eBGgAjAUF/9QFBf/UBHMAAwNb//wFOAALBCf/0wW0ALEEngCcBbQAqQSdAJwG/ACpBe8AnQWpAC8EoAAsBM4ADwQCAC4FBAA5A/cAKQRQAGMEbAASBj8AkAR+AF0EfgBeBH4ANQR+AJoEkgBkBKYAhwVzAHoEfQBgBbQAqQRqAIwFOAAcBFoAOQSMAF8EPQApAi3/CgH6/vAFgAB2BJAAMwTtAFUCtf+LBTAAjARpACsEpv86BPsAqQR9AIwFPwCpBIMAXwU/AKkEgwBfBbQAqQRoAIwFBACpBA4AjQUEAKkEDgCNBE4AqQHxAIYG/ACpBwMAiwW0AKkEagCMBQwAqQR9AIwE7QCoArUAggS/AFAEIABfBMYAMQKdAAkFFwAcA+AAIQUXABwD4AAhBxkAPQYDACsEygBWA/cAWAXG/ngEhQATBCL/nwUf/7wCJP/ABMX/3wRn/1cE/P/4BIUAEwRQAIoD5gCKBCMARwTjAIoB6ACXBFQAigYCAIoEuwBgBFwAigQmACgEKwANBFQAJgHo/7QEKwANA+YAigOvAIoEIABDAegAlwHo/7QDzwArBFQAigQfACIEhQATBFAAigOvAIoD5gCKBOwAigYCAIoE4wCKBLsAYATOAIoEXACKBHwAYAQmACgEVAAmBD8ARwTjAIoEfABgBCsADQXDAAIE7ACKBB8AIgVnAGAFOAAcBFoAbQSMAKkEPQBdAAAAAQAABOQJCgQAAAICAgMGBQcGAgMDBAUCAgIEBQUFBQUFBQUFBQICBQUFBAgGBgYGBQUGBgIFBgUIBgYGBgYFBQYGCAYFBQIEAgQEAwUFBQUFAwUFAgIFAggFBQUFAwUDBQQHBAQEAwIDBgIFBQYFAgYEBwQEBQcEAwUDAwMFBAICAwQEBwcHBAgFBgUFCAUFBQUGAgUFAgYFCQgCBgMGBQYGAgUEBAQEAgMCBAMDAAAAAAACAgUCBQYGBgUGBQYGBgUFBQUFBQUFAwUEBQUFBQUFBgYHBQUHBwYKCgcGBgcIBQYGBgcHBggJBwgGBggGBQUEBQcFBQUFBwUFBAcFBQcHBgcFBQcFBQUICAUFCAcFCAcFBQgHCAcKCQUEBgUGBQYFCAcIBwYFBgAAAAAAAAUGBQUEBQUGBQcGCQYJCAcFCAYGBQYHBQYFBgUGBQUFBAYHCAcGBQUJBwkHBgUGBgYEBQkFCQMCAgUCAgEAAgIGBwQCAgICAwMDBQUDBAYBCQMDBAMEBQcHCggHBQcFBQYGBwQJBgYHCAgHBQYFBQUJAgUFBQUFAwMCBgUFCAgGBwAJCQUFAgIEBAQEBQQEBAIFBQUFBAQFBgIEBQQHBgUFBQUFBQUFBwUFBQMDAwMDAwMDAwMEAwUFBgYFBgUFBQUEBQUFBAUEBgYGBgUICAYFBQYHBQYFBQUGBQcIBgcFBQcFBQcFBgYGBQUHBQUGBQUFBQQJBQUFBQUEBQUFBQYGBgcHBAUEBQUDAwMDAwMDBQUHBQYCAgICAgIFAgIGBgUFAwYGBgYGBgYGBQUFBQICAgIGBgYGBgYGBgYGBQUFBQUFBQUFBQUFBQICAgIFBQUFBQUFBQUFBAQGBQYFBgUGBQYFBgUGBQYGBQUFBQUFBQUFBQYFBgUGBQYFBgUCAgICAgICAgIHBAUCBgUFAgUCBQMFAwYFBgUGBQUGBQYFBgUGAwYDBgMFBQUFBQUFBQUFBQMFAwUDBgUGBQYFBgUGBQYFCAcFBAUFBAUEBQQICAYFBQUFBQUF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sRCxUrG2sc2x5LH7shKyK7JEslCyXLJzsoqyobK6stGy6LL/sxizL7NGs12zdLOLs6Szu7PSs+m0ArQZtDC0R7RdtHO0jLSltLG0vbTUtOu1AbUatTC1RrVdtXa1jLWjtbq10LXmtf+2FrYttkO2XLZztou2ora4ts+25rdJt9+39rgNuCS4OrhRuGi4f7iVuKy43bj0uQq5Ibk4uU+5ZrnOulK6abp/upa6rLrDutq68bsIuxS7K7tCu1S7a7uCu5m7sLvHu9676bv0vAu8F7wjvDq8UbxdvGm8gLyXvKO8r7zEvPm9Bb0RvSi9P71LvVe9br2EvZS9q73Bvdi9774IviG+OL5Pvlu+Z75+vpS+q77Cvtm+7777vwe/E78fvza/TL9Yv2S/cL98v5O/n7+2v8y/47/5wBDAJ8BAwFnAcsCLwOjBTsFlwXzBk8GpwcLB2cHwwgfCHsI1wkvCYsJ5wpDCp8LKwvLDBcMcwzPDScNfw3jDkcOdw6nDwMPXw+3EBcQbxDHESMRhxHjEj8SmxL3E1MTtxQTFG8UxxUrFYcV3xY7F8cYIxh7GNcZMxmLGeMaOxqXHDsckxzrHUcdox3THi8eix7nH0Mfbx/HICMgUyCrINshLyFfIbsh6yJHIqMi/yNjI78j7yRHJKMk+yUrJYMlsyYLJjsmkybrJ0cnqygPKX8p2yozKpMq7ytLK6Mrzyv/LC8sXyyPLL8s7y1fLX8tny2/Ld8t/y4fLj8uXy5/Lp8uvy7fLv8vHy+DL+cwQzCfMPsxUzG/Md8x/zIfMj8yXzK/Mx8zezPXNDM0lzTzNp82vzcjN0M3Yze/OBs4OzhbOHs4mzj3ORc5NzlXOXc5lzm3Odc59zoXOjc6kzqzOtM8Hzw/PF88wz0fPT89Xz3DPeM+Pz6XPvM/Tz+rQAdAa0DPQStBh0GnQcdB90JTQnNCz0MrQ1tDi0PnRENEn0T7RRtFO0WfRgNGM0ZjRpNGw0bzRyNHQ0djR4NH30g7SFtIt0kTSW9J00nzShNKb0rLSy9LT0uzTBdMe0zfTT9Nm03zTldOu08fT4NPo0/DUCdQi1DvUU9Rq1IDUmdSx1MrU49T81RTVMdVO1VrVZtVu1XrVhtWS1Z7VtdXM1eXV/dYW1i7WR9Zf1njWkNar1sXW3tb31xDXKddC11vXdNeN16jXw9fP19vX8tgJ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AAUAJABIAAEA3gAIACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AD0APgBlAGcAkgCwALEAsgCzALQAtQC2ALcAuAC5ANEA0gDTANQA1QDWANcA2ADZANoA2wDcAN0A3gDfAOAA4QDiAOMA5ADlAOYA5wDoASwBMAEyATgBOgE8AT4BPwFFAUYBfwGFAYoBjQJHAkgCSgJMAk0CTgJPAlACUQJSAlMCVAJVAlYCVwJYAlkCWgJbAlwCXQJeAl8CYAJhAmICYwJkAmUCZgKDAoUChwKJAosCjQKPApECkwKVApcCmQKbAp0CnwKhAqMCpQKnAqkCqwKtAq8CsgK0ArYCuAK6ArwCvgLAAsICxQLHAskCywLNAs8C0QLTAtUC2QLbAt0C3wLhAuMC5QLnAukC6wLtAu8C8QLyAvQC9gNTA1QDVQNWA1cDWANZA1sDXANdA14DXwNgA2EDYgNkA2UDZgNnA2gDaQNqA3oDewN8A30DfgN/A4ADgQOCA4MDhAOFA4YDhwOIA4kDigOLA4wDjQOOA48DuwO9A78D1APaA+AESQRLBE8EVwRZBF4EagACAAAABAAOD84V8jViAAEDVAAEAAABpQrSCtIGggtwCoAK/g+aDAAGiA7uDu4MRg6gCiIO7g7uD5oKigaSDGYMRgrYCqwNUg8QCl4L4gsQDBYGmA22DbYNtgwgCxAKUAxMDbAMTAsQBqYN5gtwD5oLcAasBrIGvAbCBsgMTAbOBtgNtgb+BxQHKgcwB0YHTAdSB4QHigeQDcANwAe+Du4H4AgCDVIIMA7uDu4LJg7uDu4IRg3ADcAIeAiCCIwIpg1ICLgNsAjSCOgLEAkyCUwJaAloCxAJYgloCWgJaAtwDCAK2AxMCxAN5g1IDqAOoA1ICtIK0grSCtIK0gmKCbAJugnECeIJ9AoGChgK/g+aD5oPmg+aDGYLcAtwC3ALcAtwC3ALcAr+DAAMAAwADAAO7g7uDu4O7g7uD5oPmg+aD5oPmgxGDEYMRgxGDxAL4gviC+IL4gviC+IL4gwWDBYMFgwWDbYMIAwgDCAMIAwgDEwMTAtwC+ILcAviC3AL4gr+Cv4K/gr+D5oMAAwWDAAMFgwADBYMAAwWDAAMFg7uDbYO7g7uDu4O7g7uDEYOoAoiCiIKIgoiDu4Ntg7uDbYO7g22DbYPmgwgD5oMIA+aDCAKUApQClAMZgxmDGYMRgxGDEYMRgxGDEYKrA8QDEwPEApeCl4KXgtwDAAO7g7uD5oPEAtwCoAMAApeDu4O7g6gDu4O7g+aCooMZg8QDVIO7g8QDbYMIAxMDCAMAA3mDu4O7gxGDqAOoAsmC3AKgA3mDAAO7g7uD5oKigr+DGYNUgviDBYMIAsQDEwNsAwWDUgMTAqsCqwKrA8QDEwK0grSCtIO7g22C3AL4gwADBYK2AxMCv4PEAxMDu4NUg2wDu4LcAviC3AL4gwADBYMFgwWDVINsA+aDCAMIAsQCyYMTAsmDEwLJgxMDVINsAtwC+ILcAviC3AL4gtwC+ILcAviC3AL4gtwC+ILcAviC3AL4gtwC+ILcAviC3AL4gwADBYMAAwWDAAMFgwADBYMAAwWDAAMFgwADBYMAAwWDu4O7g+aDCAPmgwgD5oMIA+aDCAPmgwgD5oMIA+aDCAMIAxGDEYPEAxMDxAMTA8QDEwOoA7uDGYNUg2wDeYNSA1SDbANtg3ADeYOoA7uDu4PEA+aAAIAhwAGAAYAAAALAAsAAQATABMAAgAlACoAAwAsADUACQA4AD4AEwBFAEYAGgBJAEoAHABMAEwAHgBRAFQAHwBWAFYAIwBaAFoAJABcAF0AJQCKAIoAJwCcAJwAKACwALQAKQC2ALgALgC6ALoAMQC8AL0AMgC/AMAANADCAMQANgDGAMsAOQDRANEAPwDTAN0AQADfAN8ASwDhAOMATADlAOcATwDpAO0AUgDwAPAAVwD1APcAWAD6APsAWwD9AP8AXQEDAQQAYAEJAQkAYgEMAQwAYwEXARkAZAErAS0AZwEwATAAagEyATIAawFJAUkAbAFsAW0AbQFvAXEAbwG6AboAcgG9Ab0AcwHEAcUAdAHIAcgAdgHKAcsAdwHNAc0AeQIoAigAegIqAisAewJHAkgAfQJKAkoAfwJMAm0AgAJvAnIAogJ3AnwApgKBAokArAKLAosAtQKNAo0AtgKPAo8AtwKRApEAuAKTApwAuQKlAqcAwwKpAqkAxgKrAqsAxwKtAq0AyAKvAq8AyQKyArIAygK0ArQAywK2ArYAzAK4ArgAzQK6AroAzgK8ArwAzwK+AsoA0ALMAswA3QLOAs4A3gLQAtAA3wLbAtsA4ALdAt0A4QLfAt8A4gLh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BB7/6wQg/+sEIv/rBCT/6wQm/+sEKP/rBCr/6wQs/+sELv/rBDD/6wQy/+sENP/qBDb/6gQ4/+oEOv/qBDz/6gQ+/+oEQP/qBEL/6ARE/+gERv/oBE0AFAAfADj/1QA6/+QAO//sAD3/3QDR/9UA1f/VARj/5AEy/9UBOv/VAmb/3QLb/9UC3f/VAt//1QLt/+wC7//dAvH/3QNY/90DZ//dA2r/3QOO/9UDoP/sA6L/7AOk/+wDpv/dA7f/5AO//90EQf/dBEP/3QRF/90ETf/VBGr/3QAaADj/sAA6/+0APf/QANH/sADV/7ABGP/tATL/sAE6/7ACZv/QAtv/sALd/7AC3/+wAu//0ALx/9ADWP/QA2f/0ANq/9ADjv+wA6b/0AO3/+0Dv//QBEH/0ARD/9AERf/QBE3/sARq/9AAEAAu/+4AOf/uAmL/7gJj/+4CZP/uAmX/7gKy/+4C4f/uAuP/7gLl/+4C5//uAun/7gLr/+4Df//uBDP/7gQ1/+4ARwAGABAACwAQAEf/6ABI/+gASf/oAEv/6ABV/+gAk//oAJj/6AC6/+gAx//oAMj/6AD2/+gBAv/oAR3/6AEh/+gBOf/oAUv/6AFM/+gBVv/oAWwAEAFtABABbwAQAXAAEAFxABACbv/oAm//6AJw/+gCcf/oAnL/6AKK/+gCjP/oAo7/6AKQ/+gCkv/oApT/6AKW/+gCmP/oApr/6AKc/+gCnv/oAqD/6AKi/+gCpP/oA2v/6AOR/+gDlf/oA5j/6AOoABADqQAQA6wAEAOz/+gDuf/oA77/6APM/+gDzv/oA8//6APb/+gD7P/oBAj/6AQK/+gEDP/oBA7/6AQQ/+gEEv/oBBT/6AQW/+gEKv/oBCz/6AQu/+gEMv/oAAEAVgAEAAAAJgCmAZwB+gIUAlYCzAPCBLgFkgYsCMYKjAteDFQOGg5MDn4O/BDiEVgSKhRMFQIWaBciF6gYBhjIGT4ewBlQGqIc4B0CHhgelh7AHuoAAQAmAE8AWABbAF8AnAC0ALYAtwC4AL8AwgDDAMQAyQDLAMwAzQDRANUA1wDYANoA4gDmAOcA6ADpAOoA7ADuAPAA9QD3APoA/wECASEBbQA9AEf/7ABI/+wASf/sAEv/7ABV/+wAk//sAJj/7AC6/+wAx//sAMj/7AD2/+wBAv/sAR3/7AEh/+wBOf/sAUv/7AFM/+wBVv/sAm7/7AJv/+wCcP/sAnH/7AJy/+wCiv/sAoz/7AKO/+wCkP/sApL/7AKU/+wClv/sApj/7AKa/+wCnP/sAp7/7AKg/+wCov/sAqT/7ANr/+wDkf/sA5X/7AOY/+wDs//sA7n/7AO+/+wDzP/sA87/7APP/+wD2//sA+z/7AQI/+wECv/sBAz/7AQO/+wEEP/sBBL/7AQU/+wEFv/sBCr/7AQs/+wELv/sBDL/7AAXAFP/7AEX/+wCeP/sAnn/7AJ6/+wCe//sAnz/7ALG/+wCyP/sAsr/7ANx/+wDd//sA5P/7APZ/+wD3f/sBBz/7AQe/+wEIP/sBCL/7AQk/+wEJv/sBCj/7AQw/+wABgAQ/4QAEv+EAW7/hAFy/4QBdv+EAXf/hAAQAC7/7AA5/+wCYv/sAmP/7AJk/+wCZf/sArL/7ALh/+wC4//sAuX/7ALn/+wC6f/sAuv/7AN//+wEM//sBDX/7AAdAAb/8gAL//IAWv/zAF3/8wC8//MBGf/zAWz/8gFt//IBb//yAXD/8gFx//ICgf/zAoL/8wLw//MDc//zA5b/8wOf//MDp//zA6j/8gOp//IDrP/yA7j/8wPA//MD4f/zA+P/8wPl//MEQv/zBET/8wRG//MAPQAn//MAK//zADP/8wA1//MAg//zAJL/8wCX//MAsv/zANL/8wEH//MBFv/zARr/8wEc//MBHv/zASD/8wE4//MBVf/zAij/8wIp//MCK//zAiz/8wJT//MCXf/zAl7/8wJf//MCYP/zAmH/8wKJ//MCi//zAo3/8wKP//MCnf/zAp//8wKh//MCo//zAsX/8wLH//MCyf/zAvr/8wNX//MDZP/zA4r/8wON//MDuv/zA73/8wPY//MD2v/zA9z/8wQb//MEHf/zBB//8wQh//MEI//zBCX/8wQn//MEKf/zBCv/8wQt//MEL//zBDH/8wSq//MAPQAn/+YAK//mADP/5gA1/+YAg//mAJL/5gCX/+YAsv/mANL/5gEH/+YBFv/mARr/5gEc/+YBHv/mASD/5gE4/+YBVf/mAij/5gIp/+YCK//mAiz/5gJT/+YCXf/mAl7/5gJf/+YCYP/mAmH/5gKJ/+YCi//mAo3/5gKP/+YCnf/mAp//5gKh/+YCo//mAsX/5gLH/+YCyf/mAvr/5gNX/+YDZP/mA4r/5gON/+YDuv/mA73/5gPY/+YD2v/mA9z/5gQb/+YEHf/mBB//5gQh/+YEI//mBCX/5gQn/+YEKf/mBCv/5gQt/+YEL//mBDH/5gSq/+YANgAl/+QAPP/SAD3/0wCx/+QAs//kANn/0gEM/+QCTP/kAk3/5AJO/+QCT//kAlD/5AJR/+QCUv/kAmb/0wKD/+QChf/kAof/5ALv/9MC8f/TA1P/5ANY/9MDW//kA2f/0wNo/9IDav/TA4P/5AOP/9IDpv/TA6//5AO//9MDwv/SA8X/5APH/+QD0P/SA+r/0gPv/+QD8f/kA/P/5AP1/+QD9//kA/n/5AP7/+QD/f/kA///5AQB/+QEA//kBAX/5ARB/9MEQ//TBEX/0wRP/9IEV//SBGr/0wAmABD/HgAS/x4AJf/NALH/zQCz/80BDP/NAW7/HgFy/x4Bdv8eAXf/HgJM/80CTf/NAk7/zQJP/80CUP/NAlH/zQJS/80Cg//NAoX/zQKH/80DU//NA1v/zQOD/80Dr//NA8X/zQPH/80D7//NA/H/zQPz/80D9f/NA/f/zQP5/80D+//NA/3/zQP//80EAf/NBAP/zQQF/80ApgBH/9wASP/cAEn/3ABL/9wAUf/zAFL/8wBT/9YAVP/zAFX/3ABZ/90AWv/hAF3/4QCT/9wAmP/cAJr/3QC6/9wAvP/hAMD/8wDH/9wAyP/cAMr/3QDr//MA7//zAPD/8wDy//MA8//zAPT/8wD2/9wA9//zAPn/8wD6//MA/f/zAP//8wEC/9wBBP/zARf/1gEZ/+EBHf/cASH/3AE1//MBOf/cAUT/8wFJ//MBS//cAUz/3AFW/9wCbv/cAm//3AJw/9wCcf/cAnL/3AJ3//MCeP/WAnn/1gJ6/9YCe//WAnz/1gJ9/90Cfv/dAn//3QKA/90Cgf/hAoL/4QKK/9wCjP/cAo7/3AKQ/9wCkv/cApT/3AKW/9wCmP/cApr/3AKc/9wCnv/cAqD/3AKi/9wCpP/cAr//8wLB//MCw//zAsT/8wLG/9YCyP/WAsr/1gLi/90C5P/dAub/3QLo/90C6v/dAuz/3QLw/+EDa//cA23/8wNv/90Dcf/WA3P/4QN2/90Dd//WA3j/3QOR/9wDkv/zA5P/1gOU//MDlf/cA5b/4QOY/9wDmf/zA57/8wOf/+EDp//hA67/8wOz/9wDtP/zA7j/4QO5/9wDvv/cA8D/4QPM/9wDzv/cA8//3APV//MD1//zA9n/1gPb/9wD3f/WA+H/4QPj/+ED5f/hA+n/8wPs/9wECP/cBAr/3AQM/9wEDv/cBBD/3AQS/9wEFP/cBBb/3AQc/9YEHv/WBCD/1gQi/9YEJP/WBCb/1gQo/9YEKv/cBCz/3AQu/9wEMP/WBDL/3AQ0/90ENv/dBDj/3QQ6/90EPP/dBD7/3QRA/90EQv/hBET/4QRG/+EESv/zBEz/8wRW//MEY//zBGX/8wRn//MAcQAG/9oAC//aAEf/8ABI//AASf/wAEv/8ABV//AAWf/vAFr/3ABd/9wAk//wAJj/8ACa/+8Auv/wALz/3ADH//AAyP/wAMr/7wD2//ABAv/wARn/3AEd//ABIf/wATn/8AFL//ABTP/wAVb/8AFs/9oBbf/aAW//2gFw/9oBcf/aAm7/8AJv//ACcP/wAnH/8AJy//ACff/vAn7/7wJ//+8CgP/vAoH/3AKC/9wCiv/wAoz/8AKO//ACkP/wApL/8AKU//AClv/wApj/8AKa//ACnP/wAp7/8AKg//ACov/wAqT/8ALi/+8C5P/vAub/7wLo/+8C6v/vAuz/7wLw/9wDa//wA2//7wNz/9wDdv/vA3j/7wOR//ADlf/wA5b/3AOY//ADn//cA6f/3AOo/9oDqf/aA6z/2gOz//ADuP/cA7n/8AO+//ADwP/cA8z/8APO//ADz//wA9v/8APh/9wD4//cA+X/3APs//AECP/wBAr/8AQM//AEDv/wBBD/8AQS//AEFP/wBBb/8AQq//AELP/wBC7/8AQy//AENP/vBDb/7wQ4/+8EOv/vBDz/7wQ+/+8EQP/vBEL/3ARE/9wERv/cADQABv+gAAv/oABZ//EAWv/FAF3/xQCa//EAvP/FAMr/8QEZ/8UBbP+gAW3/oAFv/6ABcP+gAXH/oAJ9//ECfv/xAn//8QKA//ECgf/FAoL/xQLi//EC5P/xAub/8QLo//EC6v/xAuz/8QLw/8UDb//xA3P/xQN2//EDeP/xA5b/xQOf/8UDp//FA6j/oAOp/6ADrP+gA7j/xQPA/8UD4f/FA+P/xQPl/8UENP/xBDb/8QQ4//EEOv/xBDz/8QQ+//EEQP/xBEL/xQRE/8UERv/FAD0AR//nAEj/5wBJ/+cAS//nAFX/5wCT/+cAmP/nALr/5wDH/+cAyP/nAPb/5wEC/+cBHf/nASH/5wE5/+cBS//nAUz/5wFW/+cCbv/nAm//5wJw/+cCcf/nAnL/5wKK/+cCjP/nAo7/5wKQ/+cCkv/nApT/5wKW/+cCmP/nApr/5wKc/+cCnv/nAqD/5wKi/+cCpP/nA2v/5wOR/+cDlf/nA5j/5wOz/+cDuf/nA77/5wPM/+cDzv/nA8//5wPb/+cD7P/nBAj/5wQK/+cEDP/nBA7/5wQQ/+cEEv/nBBT/5wQW/+cEKv/nBCz/5wQu/+cEMv/nAHEABgAMAAsADABH/+gASP/oAEn/6ABL/+gAU//qAFX/6ABaAAsAXQALAJP/6ACY/+gAuv/oALwACwDH/+gAyP/oAPb/6AEC/+gBF//qARkACwEd/+gBIf/oATn/6AFL/+gBTP/oAVb/6AFsAAwBbQAMAW8ADAFwAAwBcQAMAm7/6AJv/+gCcP/oAnH/6AJy/+gCeP/qAnn/6gJ6/+oCe//qAnz/6gKBAAsCggALAor/6AKM/+gCjv/oApD/6AKS/+gClP/oApb/6AKY/+gCmv/oApz/6AKe/+gCoP/oAqL/6AKk/+gCxv/qAsj/6gLK/+oC8AALA2v/6ANx/+oDcwALA3f/6gOR/+gDk//qA5X/6AOWAAsDmP/oA58ACwOnAAsDqAAMA6kADAOsAAwDs//oA7gACwO5/+gDvv/oA8AACwPM/+gDzv/oA8//6APZ/+oD2//oA93/6gPhAAsD4wALA+UACwPs/+gECP/oBAr/6AQM/+gEDv/oBBD/6AQS/+gEFP/oBBb/6AQc/+oEHv/qBCD/6gQi/+oEJP/qBCb/6gQo/+oEKv/oBCz/6AQu/+gEMP/qBDL/6ARCAAsERAALBEYACwAMAFz/7QBe/+0A7f/tAvP/7QL1/+0C9//tA5f/7QPD/+0D0f/tA+v/7QRQ/+0EWP/tAAwAXP/yAF7/8gDt//IC8//yAvX/8gL3//IDl//yA8P/8gPR//ID6//yBFD/8gRY//IAHwBa//QAXP/yAF3/9ABe//MAvP/0AO3/8gEZ//QCgf/0AoL/9ALw//QC8//zAvX/8wL3//MDc//0A5b/9AOX//IDn//0A6f/9AO4//QDwP/0A8P/8gPR//ID4f/0A+P/9APl//QD6//yBEL/9ARE//QERv/0BFD/8gRY//IAeQAG/8oAC//KADj/0gA6/9QAPP/0AD3/0wBR/9EAUv/RAFT/0QBa/+YAXP/vAF3/5gC8/+YAwP/RANH/0gDV/9IA2f/0AN3/7QDg/+EA6//RAO3/7wDv/9EA8P/RAPL/0QDz/9EA9P/RAPf/0QD5/9EA+v/RAP3/0QD//9EBBP/RARj/1AEZ/+YBMv/SATX/0QE6/9IBRP/RAUn/0QFs/8oBbf/KAW//ygFw/8oBcf/KAmb/0wJ3/9ECgf/mAoL/5gK//9ECwf/RAsP/0QLE/9EC2//SAt3/0gLf/9IC7//TAvD/5gLx/9MDWP/TA2f/0wNo//QDav/TA23/0QNz/+YDgv/tA47/0gOP//QDkv/RA5T/0QOW/+YDl//vA5n/0QOe/9EDn//mA6b/0wOn/+YDqP/KA6n/ygOs/8oDrv/RA7T/0QO3/9QDuP/mA7//0wPA/+YDwv/0A8P/7wPQ//QD0f/vA9X/0QPX/9ED4P/tA+H/5gPi/+0D4//mA+T/7QPl/+YD5v/hA+n/0QPq//QD6//vBEH/0wRC/+YEQ//TBET/5gRF/9MERv/mBEr/0QRM/9EETf/SBE//9ARQ/+8EUf/hBFP/4QRW/9EEV//0BFj/7wRj/9EEZf/RBGf/0QRq/9MAHQA4/74AWv/vAF3/7wC8/+8A0f++ANX/vgEZ/+8BMv++ATr/vgKB/+8Cgv/vAtv/vgLd/74C3/++AvD/7wNz/+8Djv++A5b/7wOf/+8Dp//vA7j/7wPA/+8D4f/vA+P/7wPl/+8EQv/vBET/7wRG/+8ETf++ADQAOP/mADr/5wA8//IAPf/nAFz/8QDR/+YA1f/mANn/8gDd/+4A4P/oAO3/8QEY/+cBMv/mATr/5gJm/+cC2//mAt3/5gLf/+YC7//nAvH/5wNY/+cDZ//nA2j/8gNq/+cDgv/uA47/5gOP//IDl//xA6b/5wO3/+cDv//nA8L/8gPD//ED0P/yA9H/8QPg/+4D4v/uA+T/7gPm/+gD6v/yA+v/8QRB/+cEQ//nBEX/5wRN/+YET//yBFD/8QRR/+gEU//oBFf/8gRY//EEav/nAIgAJQAQACf/6AAr/+gAM//oADX/6AA4/+AAOv/gAD3/3wCD/+gAkv/oAJf/6ACxABAAsv/oALMAEADR/+AA0v/oANMAEADV/+AA3AAQAOD/4QDxABAA+P/gAQMAEAEH/+gBDAAQARb/6AEY/+ABGv/oARz/6AEe/+gBIP/oATL/4AE4/+gBOv/gAVEAEAFV/+gCKP/oAin/6AIr/+gCLP/oAkwAEAJNABACTgAQAk8AEAJQABACUQAQAlIAEAJT/+gCXf/oAl7/6AJf/+gCYP/oAmH/6AJm/98CgwAQAoUAEAKHABACif/oAov/6AKN/+gCj//oAp3/6AKf/+gCof/oAqP/6ALF/+gCx//oAsn/6ALb/+AC3f/gAt//4ALv/98C8f/fAvr/6ANTABADV//oA1j/3wNbABADZP/oA2f/3wNq/98DgwAQA4r/6AON/+gDjv/gA6b/3wOvABADt//gA7r/6AO9/+gDv//fA8UAEAPHABAD2P/oA9r/6APc/+gD5v/hA+f/4APtABAD7gAQA+8AEAPxABAD8wAQA/UAEAP3ABAD+QAQA/sAEAP9ABAD/wAQBAEAEAQDABAEBQAQBBv/6AQd/+gEH//oBCH/6AQj/+gEJf/oBCf/6AQp/+gEK//oBC3/6AQv/+gEMf/oBEH/3wRD/98ERf/fBE3/4ARR/+EEUv/gBFP/4QRU/+AEaAAQBGkAEARq/98Eqv/oAC0AOP/xADr/9AA8//QAPf/wANH/8QDT//UA1f/xANn/9ADc//UA3f/zARj/9AEy//EBOv/xAVH/9QJm//AC2//xAt3/8QLf//EC7//wAvH/8ANY//ADZ//wA2j/9ANq//ADgv/zA47/8QOP//QDpv/wA7f/9AO///ADwv/0A9D/9APg//MD4v/zA+T/8wPq//QD7f/1BEH/8ARD//AERf/wBE3/8QRP//QEV//0BGj/9QRq//AAWQAlAA8AOP/mADr/5gA8AA4APf/mALEADwCzAA8A0f/mANMADgDV/+YA2QAOANwADgDdAAsA4P/lAPEADwD4/+gBAwAPAQwADwEY/+YBMv/mATr/5gFRAA4CTAAPAk0ADwJOAA8CTwAPAlAADwJRAA8CUgAPAmb/5gKDAA8ChQAPAocADwLb/+YC3f/mAt//5gLv/+YC8f/mA1MADwNY/+YDWwAPA2f/5gNoAA4Dav/mA4IACwODAA8Djv/mA48ADgOm/+YDrwAPA7f/5gO//+YDwgAOA8UADwPHAA8D0AAOA+AACwPiAAsD5AALA+b/5QPn/+gD6gAO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ABADogOiABADpAOkABADpgOmAA8DpwOnABkDqAOpAB0DrAOsAB0DrQOtAAIDrgOuABcDsAOwABMDsQOxAAUDswOzABYDtwO3AA0DuAO4ABkDvQO9AAQDvgO+ABQDvwO/AA8DwAPAABkDwQPBAAIDwgPCAA4DwwPDABsDxAPEAAIDxgPGABMDyAPIABMDywPLAAUDzAPMABYDzgPPABYD0APQAA4D0QPRABsD2APYAAMD2QPZABgD3QPdABgD3wPfABUD4APgABID4QPhABkD4gPiABID4wPjABkD5APkABID5QPlABkD6gPqAA4D6wPrABsD8APwABMD8gPyABMD9AP0ABMD9gP2ABMD+AP4ABMD+gP6ABMD/AP8ABMD/gP+ABMEAAQAABMEAgQCABMEBAQEABMEBgQGABMEBwQHAAUECAQIABYECQQJAAUECgQKABYECwQLAAUEDAQMABYEDQQNAAUEDgQOABYEDwQPAAUEEAQQABYEEQQRAAUEEgQSABYEEwQTAAUEFAQUABYEFQQVAAUEFgQWABYEFwQXAAIEGQQZAAIEGwQbAAMEHAQcABgEHQQdAAMEHgQeABgEHwQfAAMEIAQgABgEIQQhAAMEIgQiABgEIwQjAAMEJAQkABgEJQQlAAMEJgQmABgEJwQnAAMEKAQoABgEMAQwABgEMwQzAAwENQQ1AAwEQQRBAA8EQgRCABkEQwRDAA8ERAREABkERQRFAA8ERgRGABkESQRJAAkESwRLAAIETQRNAAYETwRPAA4EUARQABsEVQRVAAcEVgRWAAgEVwRXAA4EWARYABsEWwRbABcEXQRdAB8EXgReAAcEYARgAAkEZARkAAIEZgRmAAIEagRqAA8EqgSqAAMAAgFtAAYABgAHAAsACwAHABAAEAATABEAEQAXABIAEgATACUAJQARACcAJwAFACsAKwAFAC4ALgAcADMAMwAFADUANQAFADcANwAZADgAOAAKADkAOQAGADoAOgANADsAOwAJADwAPAASAD0APQAOAD4APgAUAEUARQAaAEcASQAVAEsASwAVAFEAUgAYAFMAUwAIAFQAVAAYAFUAVQAVAFcAVwAbAFkAWQALAFoAWgACAFwAXAAWAF0AXQACAF4AXgAMAIMAgwAFAJIAkgAFAJMAkwAVAJcAlwAFAJgAmAAVAJoAmgALALEAsQAR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b20EbGRub20EbGRub20EbGZyYWMEcmZyYWMEcmZyYWMEcmZyYWMEcmZyYWMEcmZyYWMEcmZyYWMEcmZyYWMEcmZyYWMEcmZyYWMEcmxpZ2EEfGxpZ2EEhGxudW0EimxudW0EimxudW0EimxudW0EimxudW0EimxudW0EimxudW0EimxudW0EimxudW0EimxudW0EimxvY2wEkGxvY2wElmxvY2wEnG51bXIEom51bXIEom51bXIEom51bXIEom51bXIEom51bXIEom51bXIEom51bXIEom51bXIEom51bXIEom9udW0EqG9udW0EqG9udW0EqG9udW0EqG9udW0EqG9udW0EqG9udW0EqG9udW0EqG9udW0EqG9udW0EqHBudW0ErnBudW0ErnBudW0ErnBudW0ErnBudW0ErnBudW0ErnBudW0ErnBudW0ErnBudW0ErnBudW0ErnNtY3AEtHNtY3AEtHNtY3AEtHNtY3AEtHNtY3AEtHNtY3AEtHNtY3AEtHNtY3AEtHNtY3AEtHNtY3AEtHNzMDEEunNzMDEEunNzMDEEunNzMDEEunNzMDEEunNzMDEEunNzMDEEunNzMDEEunNzMDEEunNzMDEEunNzMDIEwHNzMDIEwHNzMDIEwHNzMDIEwHNzMDIEwHNzMDIEwHNzMDIEwHNzMDIEwHNzMDIEwHNzMDIEwHNzMDMExnNzMDMExnNzMDMExnNzMDMExnNzMDMExnNzMDMExnNzMDMExnNzMDMExnNzMDMExnNzMDMExnNzMDQEzHNzMDQEzHNzMDQEzHNzMDQEzHNzMDQEzHNzMDQEzHNzMDQEzHNzMDQEzHNzMDQEzHNzMDQEzHNzMDUE0nNzMDUE0nNzMDUE0nNzMDUE0nNzMDUE0nNzMDUE0nNzMDUE0nNzMDUE0nNzMDUE0nNzMDUE0nNzMDYE2HNzMDYE2HNzMDYE2HNzMDYE2HNzMDYE2HNzMDYE2HNzMDYE2HNzMDYE2HNzMDYE2HNzMDYE2HNzMDcE3nNzMDcE3nNzMDcE3nNzMDcE3nNzMDcE3nNzMDcE3nNzMDcE3nNzMDcE3nNzMDcE3nNzMDcE3nRudW0E5HRudW0E5HRudW0E5HRudW0E5HRudW0E5HRudW0E5HRudW0E5HRudW0E5HRudW0E5HRudW0E5AAAAAEAAAAAAAIAAgADAAAAAQAHAAAAAQAYAAAAAwAVABYAFwAAAAIACAAJAAAAAQAJAAAAAQAUAAAAAQAEAAAAAQAGAAAAAQAFAAAAAQAZAAAAAQARAAAAAQATAAAAAQABAAAAAQAKAAAAAQALAAAAAQAMAAAAAQANAAAAAQAOAAAAAQAPAAAAAQAQAAAAAQASABsAOAPGBrQHYA3wDfAOBg4oDl4OhA6yDsYO2g7uDwAPGg9cD3oPmA/KD/wQLhBCEHoQbBB6EKYAAQAAAAEACAACAcQA3wHnAboBuwG8Ab0BvgG/AcABwQHCAcMBxAHFAcYBxwHIAckBygHLAcwBzQHOAc8B0AHRAdIB0wHoAekCRAI7AeoB6wHsAe0B7gHvAfAB8QHyAfMB9AH1AfYB9wH4AfkB+gH7AfwB/QH+AgACAQTdAgICAwIEAgUCBgIHAggCCQIKAgsCLwIPAhACEQIUAhUCFgIXAhgCGQIbAhwCHgIdAvwC/QL+Av8DAAMBAwIDAwMEAwUDBgMHAwgDCQMKAwsDDAMNAw4DDwMQAxEDEgMTAxQDFQMWAxcDGAMZAxoDGwMcAx0DHgMfAyADIQMiAyMDJAMlAyYDJwMoAykDKgMrAywDLQMuAy8DMAMxAzIDMwM0AzUDNgM3AzgDOQM6AzsDPAM9Az4DPwNAA0EDQgNDA0QDRgNFA0cDSANJA0oDSwNMA00DTgNPA1ADUQNSBKsErAStBK4ErwSwBLEEsgSzBLQEtQS2BLcEuAS5BLoEuwS8BL0EvgS/BMAEwQTCBMMExATFBMYB/wTHBMgEyQTKBMsEzATNBM4EzwTQBNEE0gTTBNQE1QTWBNgE2QTbAhoE3AIOBNcCEwINBNoCDAISAAEA3wAIACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AD0APgBlAGcAhQCSALAAsQCyALMAtAC1ALYAtwC4ALkA0QDSANMA1ADVANYA1wDYANkA2gDbANwA3QDeAN8A4ADhAOIA4wDkAOUA5gDnAOgBLAEwATIBOAE6ATwBPgE/AUUBRgF/AYUBigGNAkcCSAJKAkwCTQJOAk8CUAJRAlICUwJUAlUCVgJXAlgCWQJaAlsCXAJdAl4CXwJgAmECYgJjAmQCZQJmAoMChQKHAokCiwKNAo8CkQKTApUClwKZApsCnQKfAqECowKlAqcCqQKrAq0CrwKyArQCtgK4AroCvAK+AsACwgLFAscCyQLLAs0CzwLRAtMC1QLZAtsC3QLfAuEC4wLlAucC6QLrAu0C7wLxAvIC9AL2A1MDVANVA1YDVwNYA1kDWwNcA10DXgNfA2ADYQNiA2QDZQNmA2cDaANpA2oDegN7A3wDfQN+A38DgAOBA4IDgwOEA4UDhgOHA4gDiQOKA4sDjAONA44DjwO7A70DvwPUA9oD4ARJBEsETwRXBFkEXgRqAAEAAAABAAgAAgF0ALcBugG7AbwBvQG+Ab8BwAHBAcIBwwHEAcUBxgHHAcgByQHKAcsBzAHNAc4BzwHQAdEB0gHTAv0DMAI7AfoEygTLAfsB/AH9Af4B/wIABM4EzwTRBNQE3QICAgMCBAIFAgYCBwIIAgkCCgILAfQB9QH2AfcB+AH5Ai8CDwIQAhECFAIVAhcCGQL+Av8DAAMBAwIDAwMEAwUDBgMHAwgDCQMKAwsDDAMNAw4DDwMQAxEDEgMTAxQDFQMWAxcDGAMZA08DGgMbAxwDHQMeAx8DIAMhAyIDIwMkAyUDJgMnAygDKQMqAysDLAMtAy4DLwMxAzIDMwM0AzUDNgM3AzgDOQM6AzsDPAM9Az4DPwNAA0EDQgNDA0QDRgNFA0cDSANJA0oDSwNMA00DTgNQA1EDUgTJBMwEzQTQBNIE0wIBBNUEwQTCBMMExATFBMYExwTIBNYE2ATZAhgE2wIaBNwC/AIOBNcCEwINBNoCFgIMAhIAAQC3AEUARgBHAEgASQBKAEsATABNAE4ATwBQAFEAUgBTAFQAVQBWAFcAWABZAFoAWwBcAF0AXgCHAIwAkwDpAOoA6wDsAO0A7gDvAPAA8QDyAPMA9AD1APYA9wD4APkA+gD7APwA/QD+AP8BAAEBAQIBAwEEAQUBBgEtATEBMwE5ATsBPQFAAUcCSwJnAmgCaQJqAmsCbAJtAm4CbwJwAnECcgJzAnQCdQJ2AncCeAJ5AnoCewJ8An0CfgJ/AoACgQKCAoQChgKIAooCjAKOApACkgKUApYCmAKaApwCngKgAqICpAKmAqgCqgKsAq4CswK1ArcCuQK7Ar0CvwLBAsMCxgLIAsoCzALOAtAC0gLUAtYC2gLcAt4C4ALiAuQC5gLoAuoC7ALuAvAC8wL1AvcDkAORA5IDkwOUA5UDlgOXA5gDmQOaA5sDnAOdA54DnwO8A74DwAPOA9UD2wPhBEcESgRMBFAEWARaBFsEXwRrAAYAAAAGABIAKgBCAFoAcgCKAAMAAAABABIAAQCQAAEAAAAaAAEAAQBNAAMAAAABABIAAQB4AAEAAAAaAAEAAQBOAAMAAAABABIAAQBgAAEAAAAaAAEAAQKuAAMAAAABABIAAQBIAAEAAAAaAAEAAQObAAMAAAABABIAAQAwAAEAAAAaAAEAAQOdAAMAAAABABIAAQAYAAEAAAAaAAEAAQQaAAIAAQCnAKsAAAAEAAAAAQAIAAEGHgA2AHIApACuALgAygD8AQ4BGAFKAWQBfgGQAboB7AH2AhgCMgJEAnYCiAKiAswC3gMQAxoDJAM2A2gDcgN8A4YDoAO6A8wD9gQoBDIEVARuBIAEsgTEBN4FCAUaBSQFLgU4BUIFbAWWBcAF6gYUAAYADgAUABoAIAAmACwCTAACAKcCTQACAKgCTwACAKkD8QACAKoEewACAKsD7wACAKwAAQAEBIgAAgCsAAEABAKJAAIAqAACAAYADASKAAIArASMAAIBogAGAA4AFAAaACAAJgAsAlQAAgCnAlUAAgCoBAsAAgCpBAkAAgCqBH0AAgCrBAcAAgCsAAIABgAMBHcAAgCoAqMAAgGiAAEABASOAAIArAAGAA4AFAAaACAAJgAsAlgAAgCnAlkAAgCoAqcAAgCpBBcAAgCqBH8AAgCrBBkAAgCsAAMACAAOABQEkAACAKgEkgACAKwCtAACAaIAAwAIAA4AFAK2AAIAqASUAAIArAK4AAIBogACAAYADAOtAAIAqASWAAIArAAFAAwAEgAYAB4AJAR5AAIApwK+AAIAqAJcAAIAqQSYAAIArALAAAIBogAGAA4AFAAaACAAJgAsAl0AAgCnAl4AAgCoAmAAAgCpBB0AAgCqBIEAAgCrBBsAAgCsAAEABASaAAIAqAAEAAoAEAAWABwCywACAKgEgwACAKsEnAACAKwCzQACAaIAAwAIAA4AFALRAAIAqASeAAIArALXAAIBogACAAYADASgAAIArALbAAIBogAGAA4AFAAaACAAJgAsAmIAAgCnAmMAAgCoAuEAAgCpBDUAAgCqBIUAAgCrBDMAAgCsAAIABgAMBKIAAgCpBKQAAgCsAAMACAAOABQDoAACAKcDogACAKgEpgACAKwABQAMABIAGAAeACQDpgACAKcCZgACAKgERQACAKkEQwACAKoEQQACAKwAAgAGAAwC8gACAKgEqAACAKwABgAOABQAGgAgACYALAJnAAIApwJoAAIAqAJqAAIAqQPyAAIAqgR8AAIAqwPwAAIArAABAAQEiQACAKwAAQAEAooAAgCoAAIABgAMBIsAAgCsBI0AAgGiAAYADgAUABoAIAAmACwCbwACAKcCcAACAKgEDAACAKkECgACAKoEfgACAKsECAACAKwAAQAEBHgAAgCoAAEABASPAAIArAABAAQEGgACAKwAAwAIAA4AFASRAAIAqASTAAIArAK1AAIBogADAAgADgAUArcAAgCoBJUAAgCsArkAAgGiAAIABgAMA64AAgCoBJcAAgCsAAUADAASABgAHgAkBHoAAgCnAr8AAgCoAncAAgCpBJkAAgCsAsEAAgGiAAYADgAUABoAIAAmACwCeAACAKcCeQACAKgCewACAKkEHgACAKoEggACAKsEHAACAKwAAQAEBJsAAgCoAAQACgAQABYAHALMAAIAqASEAAIAqwSdAAIArALOAAIBogADAAgADgAUAtIAAgCoBJ8AAgCsAtgAAgGiAAIABgAMBKEAAgCsAtwAAgGiAAYADgAUABoAIAAmACwCfQACAKcCfgACAKgC4gACAKkENgACAKoEhgACAKsENAACAKwAAgAGAAwEowACAKkEpQACAKwAAwAIAA4AFAOhAAIApwOjAAIAqASnAAIArAAFAAwAEgAYAB4AJAOnAAIApwKBAAIAqARGAAIAqQREAAIAqgRCAAIArAACAAYADALzAAIAqASpAAIArAABAAQC+AACAKgAAQAEAvoAAgCoAAEABAL5AAIAqAABAAQC+wACAKgABQAMABIAGAAeACQCcwACAKcCdAACAKgCqAACAKkEGAACAKoEgAACAKsABQAMABIAGAAeACQEKwACAKcEKQACAKgELwACAKkELQACAKoEMQACAKwABQAMABIAGAAeACQELAACAKcEKgACAKgEMAACAKkELgACAKoEMgACAKwABQAMABIAGAAeACQEOQACAKcENwACAKgEPQACAKkEOwACAKoEPwACAKwABQAMABIAGAAeACQEOgACAKcEOAACAKgEPgACAKkEPAACAKoEQAACAKwAAQAEBIcAAgCoAAIAEQAlACkAAAArAC0ABQAvADQACAA2ADsADgA9AD4AFABFAEkAFgBLAE0AGwBPAFQAHgBWAFsAJABdAF4AKgCBAIEALACDAIMALQCGAIYALgCJAIkALwCMAIwAMACXAJoAMQDPAM8ANQABAAAAAQAIAAEABgACAAEAAgLVAtYAAQAAAAEACAACAA4ABATeBN8E4AThAAEABAKHAogCmQKaAAQAAAABAAgAAQAmAAIACgAcAAIABgAMAaMAAgBKAagAAgBYAAEABAGpAAIAWAABAAIASgBXAAQAAAABAAgAAQBEAAIACgAUAAEABAGkAAIATQABAAQBpgACAE0ABAAAAAEACAABAB4AAgAKABQAAQAEAaUAAgBQAAEABAGnAAIAUAABAAIASgGjAAEAAAABAAgAAQAGAZUAAQABAEsAAQAAAAEACAABAAYBJwABAAEAugABAAAAAQAIAAEABgGsAAEAAQA2AAEAAAABAAgAAgAcAAIB4wHkAAEAAAABAAgAAgAKAAIB5QHmAAEAAgAvAE8AAQAAAAEACAACAB4ADAIoAioCKQIrAiwCHwIgAiECIgGuAiQCJQABAAwAJwAoACsAMwA1AEYARwBIAEsAUwBUAFUAAQAAAAEACAACAAwAAwImAicCJwABAAMASQBLAiIAAQAAAAEACAACAGYACAI9Ai0CLgIwAjECOQI6AjwAAQAAAAEACAACABYACAAbABUAFgAXABgAGQAdABQAAQAIAa0CIwRxBHIEcwR0BHUEdgABAAAAAQAIAAIAFgAIBHYCIwRxBHIEcwR0Aa0EdQABAAgAFAAVABYAFwAYABkAGwAdAAEAAAABAAgAAgAWAAgAFQAWABcAGAAZABsAHQAUAAEACAItAi4CMAIxAjkCOgI8Aj0AAQAAAAEACAABAAYBaQABAAEAEwAGAAAAAQAIAAMAAQASAAEAUgAAAAEAAAAaAAIAAgF8AXwAAAHUAd0AAQABAAAAAQAIAAEAKAHAAAEAAAABAAgAAgAaAAoCMgB6AHMAdAIzAjQCNQI2AjcCOAACAAEAFAAdAAAAAQAAAAEACAACACYAEAHUAdUB1gHXAdgB2QHaAdsB3AHdAkACPgJBAkICPwJDAAEAEAAUABUAFgAXABgAGQAaABsAHAAdAE0ATgKuA5sDnQQa\"\n};"
  },
  {
    "path": "public/backend/vendors/js/ui/affix.js",
    "content": "/* ========================================================================\n * Bootstrap: affix.js v3.3.7\n * http://getbootstrap.com/javascript/#affix\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // AFFIX CLASS DEFINITION\n  // ======================\n\n  var Affix = function (element, options) {\n    this.options = $.extend({}, Affix.DEFAULTS, options)\n\n    this.$target = $(this.options.target)\n      .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))\n      .on('click.bs.affix.data-api',  $.proxy(this.checkPositionWithEventLoop, this))\n\n    this.$element     = $(element)\n    this.affixed      = null\n    this.unpin        = null\n    this.pinnedOffset = null\n\n    this.checkPosition()\n  }\n\n  Affix.VERSION  = '3.3.7'\n\n  Affix.RESET    = 'affix affix-top affix-bottom'\n\n  Affix.DEFAULTS = {\n    offset: 0,\n    target: window\n  }\n\n  Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {\n    var scrollTop    = this.$target.scrollTop()\n    var position     = this.$element.offset()\n    var targetHeight = this.$target.height()\n\n    if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false\n\n    if (this.affixed == 'bottom') {\n      if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'\n      return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'\n    }\n\n    var initializing   = this.affixed == null\n    var colliderTop    = initializing ? scrollTop : position.top\n    var colliderHeight = initializing ? targetHeight : height\n\n    if (offsetTop != null && scrollTop <= offsetTop) return 'top'\n    if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'\n\n    return false\n  }\n\n  Affix.prototype.getPinnedOffset = function () {\n    if (this.pinnedOffset) return this.pinnedOffset\n    this.$element.removeClass(Affix.RESET).addClass('affix')\n    var scrollTop = this.$target.scrollTop()\n    var position  = this.$element.offset()\n    return (this.pinnedOffset = position.top - scrollTop)\n  }\n\n  Affix.prototype.checkPositionWithEventLoop = function () {\n    setTimeout($.proxy(this.checkPosition, this), 1)\n  }\n\n  Affix.prototype.checkPosition = function () {\n    if (!this.$element.is(':visible')) return\n\n    var height       = this.$element.height()\n    var offset       = this.options.offset\n    var offsetTop    = offset.top\n    var offsetBottom = offset.bottom\n    var scrollHeight = Math.max($(document).height(), $(document.body).height())\n\n    if (typeof offset != 'object')         offsetBottom = offsetTop = offset\n    if (typeof offsetTop == 'function')    offsetTop    = offset.top(this.$element)\n    if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)\n\n    var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)\n\n    if (this.affixed != affix) {\n      if (this.unpin != null) this.$element.css('top', '')\n\n      var affixType = 'affix' + (affix ? '-' + affix : '')\n      var e         = $.Event(affixType + '.bs.affix')\n\n      this.$element.trigger(e)\n\n      if (e.isDefaultPrevented()) return\n\n      this.affixed = affix\n      this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null\n\n      this.$element\n        .removeClass(Affix.RESET)\n        .addClass(affixType)\n        .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')\n    }\n\n    if (affix == 'bottom') {\n      this.$element.offset({\n        top: scrollHeight - height - offsetBottom\n      })\n    }\n  }\n\n\n  // AFFIX PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.affix')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.affix', (data = new Affix(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.affix\n\n  $.fn.affix             = Plugin\n  $.fn.affix.Constructor = Affix\n\n\n  // AFFIX NO CONFLICT\n  // =================\n\n  $.fn.affix.noConflict = function () {\n    $.fn.affix = old\n    return this\n  }\n\n\n  // AFFIX DATA-API\n  // ==============\n\n  $(window).on('load', function () {\n    $('[data-spy=\"affix\"]').each(function () {\n      var $spy = $(this)\n      var data = $spy.data()\n\n      data.offset = data.offset || {}\n\n      if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom\n      if (data.offsetTop    != null) data.offset.top    = data.offsetTop\n\n      Plugin.call($spy, data)\n    })\n  })\n\n}(jQuery);\n"
  },
  {
    "path": "public/backend/vendors/js/ui/jquery-sliding-menu.js",
    "content": "/*\n *\n *\tjQuery Sliding Menu Plugin\n *\tMobile app list-style navigation in the browser\n *\n *\tWritten by Ali Zahid\n *\thttp://designplox.com/jquery-sliding-menu\n *\n */\n\n(function($)\n{\n\tvar usedIds = [];\n\n\t$.fn.slidingMenu = function(options)\n\t{\n\t\tvar selector = this.selector;\n\t\tvar rtl = false;\n\t\tif($('html').data('textdirection') == \"rtl\"){\n\t\t\trtl = true;\n\t\t}\n\n\t\tvar settings = $.extend(\n\t\t{\n\t\t\tdataJSON: false,\n\t\t\tbackLabel: 'Back'\n\n\t\t}, options);\n\n\t\treturn this.each(function()\n\t\t{\n\t\t\tvar self = this,\n\t\t\t\tmenu = $(self),\n\t\t\t\tdata;\n\n\t\t\tif (menu.hasClass('sliding-menu'))\n\t\t\t{\n\t\t\t\tupdateWidth();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar menuWidth = menu.outerWidth();\n\n\n\t\t\t// Updated menu widh\n\t\t\t//var menuWidth = menu[0].offsetWidth;\n\n\t\t\tif (settings.dataJSON)\n\t\t\t{\n\t\t\t\tdata = processJSON(settings.dataJSON);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tdata = process(menu);\n\t\t\t}\n\n\t\t\tmenu.empty().addClass('sliding-menu');\n\n\t\t\tvar rootPanel;\n\n\t\t\tif (settings.dataJSON)\n\t\t\t{\n\t\t\t\t$(data).each(function(index, item)\n\t\t\t\t{\n\t\t\t\t\tvar panel = $('<ul></ul>');\n\n\t\t\t\t\tif (item.root)\n\t\t\t\t\t{\n\t\t\t\t\t\trootPanel = '#' + item.id;\n\t\t\t\t\t}\n\n\t\t\t\t\tpanel.attr('id', item.id);\n\t\t\t\t\tpanel.addClass('menu-panel');\n\t\t\t\t\tpanel.width(menuWidth);\n\n\t\t\t\t\t$(item.children).each(function(index, item)\n\t\t\t\t\t{\n\t\t\t\t\t\tvar link = $('<a></a>');\n\t\t\t\t\t\tlink.attr('class', item.styleClass);\n\t\t\t\t\t\tlink.attr('href', item.href);\n\t\t\t\t\t\tlink.text(item.label);\n\n\t\t\t\t\t\tvar li = $('<li></li>');\n\n\t\t\t\t\t\tli.append(link);\n\n\t\t\t\t\t\tpanel.append(li);\n\n\t\t\t\t\t});\n\n\t\t\t\t\tmenu.append(panel);\n\n\t\t\t\t});\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t$(data).each(function(index, item)\n\t\t\t\t{\n\t\t\t\t\tvar panel = $(item);\n\n\t\t\t\t\tif (panel.hasClass('menu-panel-root'))\n\t\t\t\t\t{\n\t\t\t\t\t\trootPanel = '#' + panel.attr('id');\n\t\t\t\t\t}\n\n\t\t\t\t\tpanel.width(menuWidth);\n\n\t\t\t\t\tmenu.append(item);\n\n\t\t\t\t});\n\t\t\t}\n\n\t\t\trootPanel = $(rootPanel);\n\t\t\trootPanel.addClass('menu-panel-root');\n\n\t\t\tvar currentPanel = rootPanel;\n\n\t\t\tmenu.height(rootPanel.height());\n\n\t\t\tvar wrapper = $('<div></div>').addClass('sliding-menu-wrapper').width(data.length * menuWidth);\n\n\t\t\tmenu.wrapInner(wrapper);\n\n\t\t\twrapper = $('.sliding-menu-wrapper', menu);\n\n\t\t\t$('a', self).on('click', function(e)\n\t\t\t{\n\t\t\t\tvar href = $(this).attr('href'),\n\t\t\t\t\tlabel = $(this).text();\n\n\t\t\t\tif (wrapper.is(':animated'))\n\t\t\t\t{\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (href == '#')\n\t\t\t\t{\n\t\t\t\t\te.preventDefault();\n\t\t\t\t}\n\t\t\t\telse if (href.indexOf('#menu-panel') == 0)\n\t\t\t\t{\n\t\t\t\t\tvar target = $(href),\n\t\t\t\t\t\tisBack = $(this).hasClass('back'),\n\t\t\t\t\t\tmarginLeft,\n\t\t\t\t\t\tmarginRight;\n\t\t\t\t\tif (rtl === true){\n\t\t\t\t\t\tmarginRight = parseInt(wrapper.css('margin-right'));\n\t\t\t\t\t}\n\t\t\t\t\telse{\n\t\t\t\t\t\tmarginLeft = parseInt(wrapper.css('margin-left'));\n\t\t\t\t\t}\n\n\t\t\t\t\t// Update menu width on menu toggle\n\t\t\t\t\tvar menuWidth = menu.width();\n\n\t\t\t\t\t// Update current panel when menu is reset\n\t\t\t\t\tif($(this).closest('ul').hasClass('menu-panel-root')){\n\n\t\t\t\t\t\tcurrentPanel = rootPanel;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (isBack)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (href == '#menu-panel-back')\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttarget = currentPanel.prev();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif(rtl === true)\n\t\t\t\t\t\t\tproperties = {marginRight: marginRight + menuWidth};\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tproperties = {marginLeft: marginLeft + menuWidth};\n\t\t\t\t\t\twrapper.stop(true, true).animate(properties, 'fast');\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\ttarget.insertAfter(currentPanel);\n\n\t\t\t\t\t\tif (settings.backLabel === true)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t$('.back', target).html('<i class=\"fa fa-arrow-circle-o-left back-in\"></i>'+label);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t$('.back', target).text(settings.backLabel);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif(rtl === true)\n\t\t\t\t\t\t\tproperties = {marginRight: marginRight - menuWidth};\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tproperties = {marginLeft: marginLeft - menuWidth};\n\t\t\t\t\t\twrapper.stop(true, true).animate(properties,'fast');\n\t\t\t\t\t}\n\n\t\t\t\t\tcurrentPanel = target;\n\n\t\t\t\t\tmenu.stop(true, true).animate(\n\t\t\t\t\t{\n\t\t\t\t\t\theight: target.height()\n\n\t\t\t\t\t}, 'fast');\n\n\t\t\t\t\te.preventDefault();\n\t\t\t\t}\n\n\t\t\t});\n\n\t\t\treturn this;\n\n\t\t});\n\n\t\tfunction process(data)\n\t\t{\n\t\t\tvar ul = $('ul', data),\n\t\t\t\tpanels = [];\n\n\t\t\t$(ul).each(function(index, item)\n\t\t\t{\n\t\t\t\tvar panel = $(item),\n\t\t\t\t\thandler = panel.prev(),\n\t\t\t\t\tid = getNewId();\n\n\t\t\t\tif (handler.length == 1)\n\t\t\t\t{\n\t\t\t\t\thandler.addClass('nav-has-children dropdown-item').attr('href', '#menu-panel-' + id);\n\t\t\t\t\thandler.append('<i class=\"ft-arrow-right children-in\"></i>')\n\t\t\t\t}\n\n\t\t\t\tpanel.attr('id', 'menu-panel-' + id);\n\n\t\t\t\tif (index == 0)\n\t\t\t\t{\n\t\t\t\t\tpanel.addClass('menu-panel-root');\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tpanel.addClass('menu-panel');\n\n\t\t\t\t\tvar li = $('<li></li>'),\n\t\t\t\t\t\tback = $('<a></a>').addClass('nav-has-parent back primary dropdown-item').attr('href', '#menu-panel-back');\n\n\t\t\t\t\tpanel.prepend(back);\n\t\t\t\t}\n\n\t\t\t\tpanels.push(item);\n\n\t\t\t});\n\n\t\t\treturn panels;\n\t\t}\n\n\t\tfunction processJSON(data, parent)\n\t\t{\n\t\t\tvar root = { id: 'menu-panel-' + getNewId(), children: [], root: (parent ? false : true) },\n\t\t\t\tpanels = [];\n\n\t\t\tif (parent)\n\t\t\t{\n\t\t\t\troot.children.push(\n\t\t\t\t{\n\t\t\t\t\tstyleClass: 'back',\n\t\t\t\t\thref: '#' + parent.id\n\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t$(data).each(function(index, item)\n\t\t\t{\n\t\t\t\troot.children.push(item);\n\n\t\t\t\tif (item.children)\n\t\t\t\t{\n\t\t\t\t\tvar panel = processJSON(item.children, root);\n\n\t\t\t\t\titem.href = '#' + panel[0].id;\n\t\t\t\t\titem.styleClass = 'nav';\n\n\t\t\t\t\tpanels = panels.concat(panel);\n\t\t\t\t}\n\n\t\t\t});\n\n\t\t\treturn [root].concat(panels);\n\t\t}\n\n\t\tfunction getNewId()\n\t\t{\n\t\t\tvar id;\n\n\t\t\tdo\n\t\t\t{\n\t\t\t\tid = Math.random().toString(36).substring(3, 8);\n\t\t\t}\n\t\t\twhile (usedIds.indexOf(id) >= 0);\n\n\t\t\tusedIds.push(id);\n\n\t\t\treturn id;\n\t\t}\n\n\t\tfunction updateWidth(){\n\n\t\t\tvar wrapper = $('.sliding-menu-wrapper'),\n\t\t\tmenuPanels = $('.sliding-menu-wrapper ul');\n\n\t\t\tif(menuPanels.length){\n\t\t\t\tsetTimeout(function(){\n\t\t\t\t\tvar menuWidth = $(selector).width();\n\n\t\t\t\t\t// Update wrapper width\n\t\t\t\t\twrapper.width(menuPanels.length * menuWidth);\n\n\t\t\t\t\tmenuPanels.each(function(index, item)\n\t\t\t\t\t{\n\t\t\t\t\t\tvar panel = $(item);\n\n\t\t\t\t\t\tpanel.width(menuWidth);\n\n\t\t\t\t\t});\n\n\n\t\t\t\t\twrapper.css('margin-left','');\n\t\t\t\t}, 300);\n\t\t\t}\n\t\t}\n\n\t};\n\n} (jQuery));\n"
  },
  {
    "path": "public/backend/vendors/js/ui/jquery.matchHeight-min.js",
    "content": "/*\n* jquery-match-height 0.7.0 by @liabru\n* http://brm.io/jquery-match-height/\n* License MIT\n*/\n!function(t){\"use strict\";\"function\"==typeof define&&define.amd?define([\"jquery\"],t):\"undefined\"!=typeof module&&module.exports?module.exports=t(require(\"jquery\")):t(jQuery)}(function(t){var e=-1,o=-1,i=function(t){return parseFloat(t)||0},a=function(e){var o=1,a=t(e),n=null,r=[];return a.each(function(){var e=t(this),a=e.offset().top-i(e.css(\"margin-top\")),s=r.length>0?r[r.length-1]:null;null===s?r.push(e):Math.floor(Math.abs(n-a))<=o?r[r.length-1]=s.add(e):r.push(e),n=a}),r},n=function(e){var o={\nbyRow:!0,property:\"height\",target:null,remove:!1};return\"object\"==typeof e?t.extend(o,e):(\"boolean\"==typeof e?o.byRow=e:\"remove\"===e&&(o.remove=!0),o)},r=t.fn.matchHeight=function(e){var o=n(e);if(o.remove){var i=this;return this.css(o.property,\"\"),t.each(r._groups,function(t,e){e.elements=e.elements.not(i)}),this}return this.length<=1&&!o.target?this:(r._groups.push({elements:this,options:o}),r._apply(this,o),this)};r.version=\"0.7.0\",r._groups=[],r._throttle=80,r._maintainScroll=!1,r._beforeUpdate=null,\nr._afterUpdate=null,r._rows=a,r._parse=i,r._parseOptions=n,r._apply=function(e,o){var s=n(o),h=t(e),l=[h],c=t(window).scrollTop(),p=t(\"html\").outerHeight(!0),d=h.parents().filter(\":hidden\");return d.each(function(){var e=t(this);e.data(\"style-cache\",e.attr(\"style\"))}),d.css(\"display\",\"block\"),s.byRow&&!s.target&&(h.each(function(){var e=t(this),o=e.css(\"display\");\"inline-block\"!==o&&\"flex\"!==o&&\"inline-flex\"!==o&&(o=\"block\"),e.data(\"style-cache\",e.attr(\"style\")),e.css({display:o,\"padding-top\":\"0\",\n\"padding-bottom\":\"0\",\"margin-top\":\"0\",\"margin-bottom\":\"0\",\"border-top-width\":\"0\",\"border-bottom-width\":\"0\",height:\"100px\",overflow:\"hidden\"})}),l=a(h),h.each(function(){var e=t(this);e.attr(\"style\",e.data(\"style-cache\")||\"\")})),t.each(l,function(e,o){var a=t(o),n=0;if(s.target)n=s.target.outerHeight(!1);else{if(s.byRow&&a.length<=1)return void a.css(s.property,\"\");a.each(function(){var e=t(this),o=e.attr(\"style\"),i=e.css(\"display\");\"inline-block\"!==i&&\"flex\"!==i&&\"inline-flex\"!==i&&(i=\"block\");var a={\ndisplay:i};a[s.property]=\"\",e.css(a),e.outerHeight(!1)>n&&(n=e.outerHeight(!1)),o?e.attr(\"style\",o):e.css(\"display\",\"\")})}a.each(function(){var e=t(this),o=0;s.target&&e.is(s.target)||(\"border-box\"!==e.css(\"box-sizing\")&&(o+=i(e.css(\"border-top-width\"))+i(e.css(\"border-bottom-width\")),o+=i(e.css(\"padding-top\"))+i(e.css(\"padding-bottom\"))),e.css(s.property,n-o+\"px\"))})}),d.each(function(){var e=t(this);e.attr(\"style\",e.data(\"style-cache\")||null)}),r._maintainScroll&&t(window).scrollTop(c/p*t(\"html\").outerHeight(!0)),\nthis},r._applyDataApi=function(){var e={};t(\"[data-match-height], [data-mh]\").each(function(){var o=t(this),i=o.attr(\"data-mh\")||o.attr(\"data-match-height\");i in e?e[i]=e[i].add(o):e[i]=o}),t.each(e,function(){this.matchHeight(!0)})};var s=function(e){r._beforeUpdate&&r._beforeUpdate(e,r._groups),t.each(r._groups,function(){r._apply(this.elements,this.options)}),r._afterUpdate&&r._afterUpdate(e,r._groups)};r._update=function(i,a){if(a&&\"resize\"===a.type){var n=t(window).width();if(n===e)return;e=n;\n}i?-1===o&&(o=setTimeout(function(){s(a),o=-1},r._throttle)):s(a)},t(r._applyDataApi),t(window).bind(\"load\",function(t){r._update(!1,t)}),t(window).bind(\"resize orientationchange\",function(t){r._update(!0,t)})});"
  },
  {
    "path": "public/backend/vendors/js/ui/jquery.sticky.js",
    "content": "// Sticky Plugin v1.0.4 for jQuery\n// =============\n// Author: Anthony Garand\n// Improvements by German M. Bravo (Kronuz) and Ruud Kamphuis (ruudk)\n// Improvements by Leonardo C. Daronco (daronco)\n// Created: 02/14/2011\n// Date: 07/20/2015\n// Website: http://stickyjs.com/\n// Description: Makes an element on the page stick on the screen as you scroll\n//              It will only set the 'top' and 'position' of your element, you\n//              might need to adjust the width in some cases.\n\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        // AMD. Register as an anonymous module.\n        define(['jquery'], factory);\n    } else if (typeof module === 'object' && module.exports) {\n        // Node/CommonJS\n        module.exports = factory(require('jquery'));\n    } else {\n        // Browser globals\n        factory(jQuery);\n    }\n}(function ($) {\n    var slice = Array.prototype.slice; // save ref to original slice()\n    var splice = Array.prototype.splice; // save ref to original slice()\n\n  var defaults = {\n      topSpacing: 0,\n      bottomSpacing: 0,\n      className: 'is-sticky',\n      wrapperClassName: 'sticky-wrapper',\n      center: false,\n      getWidthFrom: '',\n      widthFromWrapper: true, // works only when .getWidthFrom is empty\n      responsiveWidth: false,\n      zIndex: 'auto'\n    },\n    $window = $(window),\n    $document = $(document),\n    sticked = [],\n    windowHeight = $window.height(),\n    scroller = function() {\n      var scrollTop = $window.scrollTop(),\n        documentHeight = $document.height(),\n        dwh = documentHeight - windowHeight,\n        extra = (scrollTop > dwh) ? dwh - scrollTop : 0;\n\n      for (var i = 0, l = sticked.length; i < l; i++) {\n        var s = sticked[i],\n          elementTop = s.stickyWrapper.offset().top,\n          etse = elementTop - s.topSpacing - extra;\n\n        //update height in case of dynamic content\n        s.stickyWrapper.css('height', s.stickyElement.outerHeight());\n\n        if (scrollTop <= etse) {\n          if (s.currentTop !== null) {\n            s.stickyElement\n              .css({\n                'width': '',\n                'position': '',\n                'top': '',\n                'z-index': ''\n              });\n            s.stickyElement.parent().removeClass(s.className);\n            s.stickyElement.trigger('sticky-end', [s]);\n            s.currentTop = null;\n          }\n        }\n        else {\n          var newTop = documentHeight - s.stickyElement.outerHeight()\n            - s.topSpacing - s.bottomSpacing - scrollTop - extra;\n          if (newTop < 0) {\n            newTop = newTop + s.topSpacing;\n          } else {\n            newTop = s.topSpacing;\n          }\n          if (s.currentTop !== newTop) {\n            var newWidth;\n            if (s.getWidthFrom) {\n                newWidth = $(s.getWidthFrom).width() || null;\n            } else if (s.widthFromWrapper) {\n                newWidth = s.stickyWrapper.width();\n            }\n            if (newWidth == null) {\n                newWidth = s.stickyElement.width();\n            }\n            s.stickyElement\n              .css('width', newWidth)\n              .css('position', 'fixed')\n              .css('top', newTop)\n              .css('z-index', s.zIndex);\n\n            s.stickyElement.parent().addClass(s.className);\n\n            if (s.currentTop === null) {\n              s.stickyElement.trigger('sticky-start', [s]);\n            } else {\n              // sticky is started but it have to be repositioned\n              s.stickyElement.trigger('sticky-update', [s]);\n            }\n\n            if (s.currentTop === s.topSpacing && s.currentTop > newTop || s.currentTop === null && newTop < s.topSpacing) {\n              // just reached bottom || just started to stick but bottom is already reached\n              s.stickyElement.trigger('sticky-bottom-reached', [s]);\n            } else if(s.currentTop !== null && newTop === s.topSpacing && s.currentTop < newTop) {\n              // sticky is started && sticked at topSpacing && overflowing from top just finished\n              s.stickyElement.trigger('sticky-bottom-unreached', [s]);\n            }\n\n            s.currentTop = newTop;\n          }\n\n          // Check if sticky has reached end of container and stop sticking\n          var stickyWrapperContainer = s.stickyWrapper.parent();\n          var unstick = (s.stickyElement.offset().top + s.stickyElement.outerHeight() >= stickyWrapperContainer.offset().top + stickyWrapperContainer.outerHeight()) && (s.stickyElement.offset().top <= s.topSpacing);\n\n          if( unstick ) {\n            s.stickyElement\n              .css('position', 'absolute')\n              .css('top', '')\n              .css('bottom', 0)\n              .css('z-index', '');\n          } else {\n            s.stickyElement\n              .css('position', 'fixed')\n              .css('top', newTop)\n              .css('bottom', '')\n              .css('z-index', s.zIndex);\n          }\n        }\n      }\n    },\n    resizer = function() {\n      windowHeight = $window.height();\n\n      for (var i = 0, l = sticked.length; i < l; i++) {\n        var s = sticked[i];\n        var newWidth = null;\n        if (s.getWidthFrom) {\n            if (s.responsiveWidth) {\n                newWidth = $(s.getWidthFrom).width();\n            }\n        } else if(s.widthFromWrapper) {\n            newWidth = s.stickyWrapper.width();\n        }\n        if (newWidth != null) {\n            s.stickyElement.css('width', newWidth);\n        }\n      }\n    },\n    methods = {\n      init: function(options) {\n        return this.each(function() {\n          var o = $.extend({}, defaults, options);\n          var stickyElement = $(this);\n\n          var stickyId = stickyElement.attr('id');\n          var wrapperId = stickyId ? stickyId + '-' + defaults.wrapperClassName : defaults.wrapperClassName;\n          var wrapper = $('<div></div>')\n            .attr('id', wrapperId)\n            .addClass(o.wrapperClassName);\n\n          stickyElement.wrapAll(function() {\n            if ($(this).parent(\"#\" + wrapperId).length == 0) {\n                    return wrapper;\n            }\n});\n\n          var stickyWrapper = stickyElement.parent();\n\n          if (o.center) {\n            stickyWrapper.css({width:stickyElement.outerWidth(),marginLeft:\"auto\",marginRight:\"auto\"});\n          }\n\n          if (stickyElement.css(\"float\") === \"right\") {\n            stickyElement.css({\"float\":\"none\"}).parent().css({\"float\":\"right\"});\n          }\n\n          o.stickyElement = stickyElement;\n          o.stickyWrapper = stickyWrapper;\n          o.currentTop    = null;\n\n          sticked.push(o);\n\n          methods.setWrapperHeight(this);\n          methods.setupChangeListeners(this);\n        });\n      },\n\n      setWrapperHeight: function(stickyElement) {\n        var element = $(stickyElement);\n        var stickyWrapper = element.parent();\n        if (stickyWrapper) {\n          stickyWrapper.css('height', element.outerHeight());\n        }\n      },\n\n      setupChangeListeners: function(stickyElement) {\n        if (window.MutationObserver) {\n          var mutationObserver = new window.MutationObserver(function(mutations) {\n            if (mutations[0].addedNodes.length || mutations[0].removedNodes.length) {\n              methods.setWrapperHeight(stickyElement);\n            }\n          });\n          mutationObserver.observe(stickyElement, {subtree: true, childList: true});\n        } else {\n          if (window.addEventListener) {\n            stickyElement.addEventListener('DOMNodeInserted', function() {\n              methods.setWrapperHeight(stickyElement);\n            }, false);\n            stickyElement.addEventListener('DOMNodeRemoved', function() {\n              methods.setWrapperHeight(stickyElement);\n            }, false);\n          } else if (window.attachEvent) {\n            stickyElement.attachEvent('onDOMNodeInserted', function() {\n              methods.setWrapperHeight(stickyElement);\n            });\n            stickyElement.attachEvent('onDOMNodeRemoved', function() {\n              methods.setWrapperHeight(stickyElement);\n            });\n          }\n        }\n      },\n      update: scroller,\n      unstick: function(options) {\n        return this.each(function() {\n          var that = this;\n          var unstickyElement = $(that);\n\n          var removeIdx = -1;\n          var i = sticked.length;\n          while (i-- > 0) {\n            if (sticked[i].stickyElement.get(0) === that) {\n                splice.call(sticked,i,1);\n                removeIdx = i;\n            }\n          }\n          if(removeIdx !== -1) {\n            unstickyElement.unwrap();\n            unstickyElement\n              .css({\n                'width': '',\n                'position': '',\n                'top': '',\n                'float': '',\n                'z-index': ''\n              })\n            ;\n          }\n        });\n      }\n    };\n\n  // should be more efficient than using $window.scroll(scroller) and $window.resize(resizer):\n  if (window.addEventListener) {\n    window.addEventListener('scroll', scroller, false);\n    window.addEventListener('resize', resizer, false);\n  } else if (window.attachEvent) {\n    window.attachEvent('onscroll', scroller);\n    window.attachEvent('onresize', resizer);\n  }\n\n  $.fn.sticky = function(method) {\n    if (methods[method]) {\n      return methods[method].apply(this, slice.call(arguments, 1));\n    } else if (typeof method === 'object' || !method ) {\n      return methods.init.apply( this, arguments );\n    } else {\n      $.error('Method ' + method + ' does not exist on jQuery.sticky');\n    }\n  };\n\n  $.fn.unstick = function(method) {\n    if (methods[method]) {\n      return methods[method].apply(this, slice.call(arguments, 1));\n    } else if (typeof method === 'object' || !method ) {\n      return methods.unstick.apply( this, arguments );\n    } else {\n      $.error('Method ' + method + ' does not exist on jQuery.sticky');\n    }\n  };\n  $(function() {\n    setTimeout(scroller, 0);\n  });\n}));\n"
  },
  {
    "path": "public/backend/vendors/js/ui/prism-treeview.js",
    "content": "Prism.languages.treeview = {\n\t\"treeview-part\": {\n\t\tpattern: /(^|\\n).+/,\n\t\tinside: {\n\t\t\t\"entry-line\": [\n\t\t\t\t{\n\t\t\t\t\tpattern: /\\|-- |├── /,\n\t\t\t\t\talias: \"line-h\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tpattern: /\\|   |│   /,\n\t\t\t\t\talias: \"line-v\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tpattern: /`-- |└── /,\n\t\t\t\t\talias: \"line-v-last\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tpattern: / {4}/,\n\t\t\t\t\talias: \"line-v-gap\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"entry-name\": {\n\t\t\t\tpattern: /.*\\S.*/,\n\t\t\t\tinside: {\n\t\t\t\t\t// symlink\n\t\t\t\t\t\"operator\": / -> /,\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\nPrism.hooks.add('wrap', function(env) {\n\tif (env.language === 'treeview') {\n\t\t// Remove line breaks\n\t\tif(env.type === 'treeview-part') {\n\t\t\tenv.content = env.content.replace(/\\n/g,'')+'<br />';\n\t\t}\n\t\tif(env.type === 'entry-name') {\n\t\t\tif(/(^|[^\\\\])\\/\\s*$/.test(env.content)) {\n\t\t\t\tenv.content = env.content.slice(0,-1);\n\t\t\t\t// This is a folder\n\t\t\t\tenv.classes.push('dir');\n\t\t\t} else {\n\n\t\t\t\tif(/(^|[^\\\\])[=*|]\\s*$/.test(env.content)) {\n\t\t\t\t\tenv.content = env.content.slice(0,-1);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tvar parts = env.content.toLowerCase().split('.');\n\t\t\t\twhile (parts.length > 1) {\n\t\t\t\t\tparts.shift();\n\t\t\t\t\t// Ex. 'foo.min.js' would become '<span class=\"token keyword ext-min-js ext-js\">foo.min.js</span>'\n\t\t\t\t\tenv.classes.push('ext-' + parts.join('-'));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif(env.content.charAt(0)==='.') {\n\t\t\t\tenv.classes.push('dotfile');\n\t\t\t}\n\t\t}\n\t}\n});"
  },
  {
    "path": "public/backend/vendors/js/vendors.js",
    "content": "/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */\n!(function (e, t) {\n    \"use strict\";\n    \"object\" == typeof module && \"object\" == typeof module.exports\n        ? (module.exports = e.document\n              ? t(e, !0)\n              : function (e) {\n                    if (!e.document) throw new Error(\"jQuery requires a window with a document\");\n                    return t(e);\n                })\n        : t(e);\n})(\"undefined\" != typeof window ? window : this, function (C, e) {\n    \"use strict\";\n    var t = [],\n        E = C.document,\n        r = Object.getPrototypeOf,\n        s = t.slice,\n        g = t.concat,\n        u = t.push,\n        i = t.indexOf,\n        n = {},\n        o = n.toString,\n        v = n.hasOwnProperty,\n        a = v.toString,\n        l = a.call(Object),\n        y = {},\n        m = function (e) {\n            return \"function\" == typeof e && \"number\" != typeof e.nodeType;\n        },\n        x = function (e) {\n            return null != e && e === e.window;\n        },\n        c = { type: !0, src: !0, nonce: !0, noModule: !0 };\n    function b(e, t, n) {\n        var r,\n            i,\n            o = (n = n || E).createElement(\"script\");\n        if (((o.text = e), t)) for (r in c) (i = t[r] || (t.getAttribute && t.getAttribute(r))) && o.setAttribute(r, i);\n        n.head.appendChild(o).parentNode.removeChild(o);\n    }\n    function w(e) {\n        return null == e ? e + \"\" : \"object\" == typeof e || \"function\" == typeof e ? n[o.call(e)] || \"object\" : typeof e;\n    }\n    var f = \"3.4.1\",\n        k = function (e, t) {\n            return new k.fn.init(e, t);\n        },\n        p = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;\n    function d(e) {\n        var t = !!e && \"length\" in e && e.length,\n            n = w(e);\n        return !m(e) && !x(e) && (\"array\" === n || 0 === t || (\"number\" == typeof t && 0 < t && t - 1 in e));\n    }\n    (k.fn = k.prototype = {\n        jquery: f,\n        constructor: k,\n        length: 0,\n        toArray: function () {\n            return s.call(this);\n        },\n        get: function (e) {\n            return null == e ? s.call(this) : e < 0 ? this[e + this.length] : this[e];\n        },\n        pushStack: function (e) {\n            var t = k.merge(this.constructor(), e);\n            return (t.prevObject = this), t;\n        },\n        each: function (e) {\n            return k.each(this, e);\n        },\n        map: function (n) {\n            return this.pushStack(\n                k.map(this, function (e, t) {\n                    return n.call(e, t, e);\n                })\n            );\n        },\n        slice: function () {\n            return this.pushStack(s.apply(this, arguments));\n        },\n        first: function () {\n            return this.eq(0);\n        },\n        last: function () {\n            return this.eq(-1);\n        },\n        eq: function (e) {\n            var t = this.length,\n                n = +e + (e < 0 ? t : 0);\n            return this.pushStack(0 <= n && n < t ? [this[n]] : []);\n        },\n        end: function () {\n            return this.prevObject || this.constructor();\n        },\n        push: u,\n        sort: t.sort,\n        splice: t.splice,\n    }),\n        (k.extend = k.fn.extend = function () {\n            var e,\n                t,\n                n,\n                r,\n                i,\n                o,\n                a = arguments[0] || {},\n                s = 1,\n                u = arguments.length,\n                l = !1;\n            for (\"boolean\" == typeof a && ((l = a), (a = arguments[s] || {}), s++), \"object\" == typeof a || m(a) || (a = {}), s === u && ((a = this), s--); s < u; s++)\n                if (null != (e = arguments[s]))\n                    for (t in e)\n                        (r = e[t]),\n                            \"__proto__\" !== t &&\n                                a !== r &&\n                                (l && r && (k.isPlainObject(r) || (i = Array.isArray(r)))\n                                    ? ((n = a[t]), (o = i && !Array.isArray(n) ? [] : i || k.isPlainObject(n) ? n : {}), (i = !1), (a[t] = k.extend(l, o, r)))\n                                    : void 0 !== r && (a[t] = r));\n            return a;\n        }),\n        k.extend({\n            expando: \"jQuery\" + (f + Math.random()).replace(/\\D/g, \"\"),\n            isReady: !0,\n            error: function (e) {\n                throw new Error(e);\n            },\n            noop: function () {},\n            isPlainObject: function (e) {\n                var t, n;\n                return !(!e || \"[object Object]\" !== o.call(e)) && (!(t = r(e)) || (\"function\" == typeof (n = v.call(t, \"constructor\") && t.constructor) && a.call(n) === l));\n            },\n            isEmptyObject: function (e) {\n                var t;\n                for (t in e) return !1;\n                return !0;\n            },\n            globalEval: function (e, t) {\n                b(e, { nonce: t && t.nonce });\n            },\n            each: function (e, t) {\n                var n,\n                    r = 0;\n                if (d(e)) {\n                    for (n = e.length; r < n; r++) if (!1 === t.call(e[r], r, e[r])) break;\n                } else for (r in e) if (!1 === t.call(e[r], r, e[r])) break;\n                return e;\n            },\n            trim: function (e) {\n                return null == e ? \"\" : (e + \"\").replace(p, \"\");\n            },\n            makeArray: function (e, t) {\n                var n = t || [];\n                return null != e && (d(Object(e)) ? k.merge(n, \"string\" == typeof e ? [e] : e) : u.call(n, e)), n;\n            },\n            inArray: function (e, t, n) {\n                return null == t ? -1 : i.call(t, e, n);\n            },\n            merge: function (e, t) {\n                for (var n = +t.length, r = 0, i = e.length; r < n; r++) e[i++] = t[r];\n                return (e.length = i), e;\n            },\n            grep: function (e, t, n) {\n                for (var r = [], i = 0, o = e.length, a = !n; i < o; i++) !t(e[i], i) !== a && r.push(e[i]);\n                return r;\n            },\n            map: function (e, t, n) {\n                var r,\n                    i,\n                    o = 0,\n                    a = [];\n                if (d(e)) for (r = e.length; o < r; o++) null != (i = t(e[o], o, n)) && a.push(i);\n                else for (o in e) null != (i = t(e[o], o, n)) && a.push(i);\n                return g.apply([], a);\n            },\n            guid: 1,\n            support: y,\n        }),\n        \"function\" == typeof Symbol && (k.fn[Symbol.iterator] = t[Symbol.iterator]),\n        k.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"), function (e, t) {\n            n[\"[object \" + t + \"]\"] = t.toLowerCase();\n        });\n    var h = (function (n) {\n        var e,\n            d,\n            b,\n            o,\n            i,\n            h,\n            f,\n            g,\n            w,\n            u,\n            l,\n            T,\n            C,\n            a,\n            E,\n            v,\n            s,\n            c,\n            y,\n            k = \"sizzle\" + 1 * new Date(),\n            m = n.document,\n            S = 0,\n            r = 0,\n            p = ue(),\n            x = ue(),\n            N = ue(),\n            A = ue(),\n            D = function (e, t) {\n                return e === t && (l = !0), 0;\n            },\n            j = {}.hasOwnProperty,\n            t = [],\n            q = t.pop,\n            L = t.push,\n            H = t.push,\n            O = t.slice,\n            P = function (e, t) {\n                for (var n = 0, r = e.length; n < r; n++) if (e[n] === t) return n;\n                return -1;\n            },\n            R = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n            M = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n            I = \"(?:\\\\\\\\.|[\\\\w-]|[^\\0-\\\\xa0])+\",\n            W = \"\\\\[\" + M + \"*(\" + I + \")(?:\" + M + \"*([*^$|!~]?=)\" + M + \"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + I + \"))|)\" + M + \"*\\\\]\",\n            $ = \":(\" + I + \")(?:\\\\((('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + W + \")*)|.*)\\\\)|)\",\n            F = new RegExp(M + \"+\", \"g\"),\n            B = new RegExp(\"^\" + M + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + M + \"+$\", \"g\"),\n            _ = new RegExp(\"^\" + M + \"*,\" + M + \"*\"),\n            z = new RegExp(\"^\" + M + \"*([>+~]|\" + M + \")\" + M + \"*\"),\n            U = new RegExp(M + \"|>\"),\n            X = new RegExp($),\n            V = new RegExp(\"^\" + I + \"$\"),\n            G = {\n                ID: new RegExp(\"^#(\" + I + \")\"),\n                CLASS: new RegExp(\"^\\\\.(\" + I + \")\"),\n                TAG: new RegExp(\"^(\" + I + \"|[*])\"),\n                ATTR: new RegExp(\"^\" + W),\n                PSEUDO: new RegExp(\"^\" + $),\n                CHILD: new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + M + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + M + \"*(?:([+-]|)\" + M + \"*(\\\\d+)|))\" + M + \"*\\\\)|)\", \"i\"),\n                bool: new RegExp(\"^(?:\" + R + \")$\", \"i\"),\n                needsContext: new RegExp(\"^\" + M + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + M + \"*((?:-\\\\d)?\\\\d*)\" + M + \"*\\\\)|)(?=[^-]|$)\", \"i\"),\n            },\n            Y = /HTML$/i,\n            Q = /^(?:input|select|textarea|button)$/i,\n            J = /^h\\d$/i,\n            K = /^[^{]+\\{\\s*\\[native \\w/,\n            Z = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n            ee = /[+~]/,\n            te = new RegExp(\"\\\\\\\\([\\\\da-f]{1,6}\" + M + \"?|(\" + M + \")|.)\", \"ig\"),\n            ne = function (e, t, n) {\n                var r = \"0x\" + t - 65536;\n                return r != r || n ? t : r < 0 ? String.fromCharCode(r + 65536) : String.fromCharCode((r >> 10) | 55296, (1023 & r) | 56320);\n            },\n            re = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n            ie = function (e, t) {\n                return t ? (\"\\0\" === e ? \"\\ufffd\" : e.slice(0, -1) + \"\\\\\" + e.charCodeAt(e.length - 1).toString(16) + \" \") : \"\\\\\" + e;\n            },\n            oe = function () {\n                T();\n            },\n            ae = be(\n                function (e) {\n                    return !0 === e.disabled && \"fieldset\" === e.nodeName.toLowerCase();\n                },\n                { dir: \"parentNode\", next: \"legend\" }\n            );\n        try {\n            H.apply((t = O.call(m.childNodes)), m.childNodes), t[m.childNodes.length].nodeType;\n        } catch (e) {\n            H = {\n                apply: t.length\n                    ? function (e, t) {\n                          L.apply(e, O.call(t));\n                      }\n                    : function (e, t) {\n                          var n = e.length,\n                              r = 0;\n                          while ((e[n++] = t[r++]));\n                          e.length = n - 1;\n                      },\n            };\n        }\n        function se(t, e, n, r) {\n            var i,\n                o,\n                a,\n                s,\n                u,\n                l,\n                c,\n                f = e && e.ownerDocument,\n                p = e ? e.nodeType : 9;\n            if (((n = n || []), \"string\" != typeof t || !t || (1 !== p && 9 !== p && 11 !== p))) return n;\n            if (!r && ((e ? e.ownerDocument || e : m) !== C && T(e), (e = e || C), E)) {\n                if (11 !== p && (u = Z.exec(t)))\n                    if ((i = u[1])) {\n                        if (9 === p) {\n                            if (!(a = e.getElementById(i))) return n;\n                            if (a.id === i) return n.push(a), n;\n                        } else if (f && (a = f.getElementById(i)) && y(e, a) && a.id === i) return n.push(a), n;\n                    } else {\n                        if (u[2]) return H.apply(n, e.getElementsByTagName(t)), n;\n                        if ((i = u[3]) && d.getElementsByClassName && e.getElementsByClassName) return H.apply(n, e.getElementsByClassName(i)), n;\n                    }\n                if (d.qsa && !A[t + \" \"] && (!v || !v.test(t)) && (1 !== p || \"object\" !== e.nodeName.toLowerCase())) {\n                    if (((c = t), (f = e), 1 === p && U.test(t))) {\n                        (s = e.getAttribute(\"id\")) ? (s = s.replace(re, ie)) : e.setAttribute(\"id\", (s = k)), (o = (l = h(t)).length);\n                        while (o--) l[o] = \"#\" + s + \" \" + xe(l[o]);\n                        (c = l.join(\",\")), (f = (ee.test(t) && ye(e.parentNode)) || e);\n                    }\n                    try {\n                        return H.apply(n, f.querySelectorAll(c)), n;\n                    } catch (e) {\n                        A(t, !0);\n                    } finally {\n                        s === k && e.removeAttribute(\"id\");\n                    }\n                }\n            }\n            return g(t.replace(B, \"$1\"), e, n, r);\n        }\n        function ue() {\n            var r = [];\n            return function e(t, n) {\n                return r.push(t + \" \") > b.cacheLength && delete e[r.shift()], (e[t + \" \"] = n);\n            };\n        }\n        function le(e) {\n            return (e[k] = !0), e;\n        }\n        function ce(e) {\n            var t = C.createElement(\"fieldset\");\n            try {\n                return !!e(t);\n            } catch (e) {\n                return !1;\n            } finally {\n                t.parentNode && t.parentNode.removeChild(t), (t = null);\n            }\n        }\n        function fe(e, t) {\n            var n = e.split(\"|\"),\n                r = n.length;\n            while (r--) b.attrHandle[n[r]] = t;\n        }\n        function pe(e, t) {\n            var n = t && e,\n                r = n && 1 === e.nodeType && 1 === t.nodeType && e.sourceIndex - t.sourceIndex;\n            if (r) return r;\n            if (n) while ((n = n.nextSibling)) if (n === t) return -1;\n            return e ? 1 : -1;\n        }\n        function de(t) {\n            return function (e) {\n                return \"input\" === e.nodeName.toLowerCase() && e.type === t;\n            };\n        }\n        function he(n) {\n            return function (e) {\n                var t = e.nodeName.toLowerCase();\n                return (\"input\" === t || \"button\" === t) && e.type === n;\n            };\n        }\n        function ge(t) {\n            return function (e) {\n                return \"form\" in e\n                    ? e.parentNode && !1 === e.disabled\n                        ? \"label\" in e\n                            ? \"label\" in e.parentNode\n                                ? e.parentNode.disabled === t\n                                : e.disabled === t\n                            : e.isDisabled === t || (e.isDisabled !== !t && ae(e) === t)\n                        : e.disabled === t\n                    : \"label\" in e && e.disabled === t;\n            };\n        }\n        function ve(a) {\n            return le(function (o) {\n                return (\n                    (o = +o),\n                    le(function (e, t) {\n                        var n,\n                            r = a([], e.length, o),\n                            i = r.length;\n                        while (i--) e[(n = r[i])] && (e[n] = !(t[n] = e[n]));\n                    })\n                );\n            });\n        }\n        function ye(e) {\n            return e && \"undefined\" != typeof e.getElementsByTagName && e;\n        }\n        for (e in ((d = se.support = {}),\n        (i = se.isXML = function (e) {\n            var t = e.namespaceURI,\n                n = (e.ownerDocument || e).documentElement;\n            return !Y.test(t || (n && n.nodeName) || \"HTML\");\n        }),\n        (T = se.setDocument = function (e) {\n            var t,\n                n,\n                r = e ? e.ownerDocument || e : m;\n            return (\n                r !== C &&\n                    9 === r.nodeType &&\n                    r.documentElement &&\n                    ((a = (C = r).documentElement),\n                    (E = !i(C)),\n                    m !== C && (n = C.defaultView) && n.top !== n && (n.addEventListener ? n.addEventListener(\"unload\", oe, !1) : n.attachEvent && n.attachEvent(\"onunload\", oe)),\n                    (d.attributes = ce(function (e) {\n                        return (e.className = \"i\"), !e.getAttribute(\"className\");\n                    })),\n                    (d.getElementsByTagName = ce(function (e) {\n                        return e.appendChild(C.createComment(\"\")), !e.getElementsByTagName(\"*\").length;\n                    })),\n                    (d.getElementsByClassName = K.test(C.getElementsByClassName)),\n                    (d.getById = ce(function (e) {\n                        return (a.appendChild(e).id = k), !C.getElementsByName || !C.getElementsByName(k).length;\n                    })),\n                    d.getById\n                        ? ((b.filter.ID = function (e) {\n                              var t = e.replace(te, ne);\n                              return function (e) {\n                                  return e.getAttribute(\"id\") === t;\n                              };\n                          }),\n                          (b.find.ID = function (e, t) {\n                              if (\"undefined\" != typeof t.getElementById && E) {\n                                  var n = t.getElementById(e);\n                                  return n ? [n] : [];\n                              }\n                          }))\n                        : ((b.filter.ID = function (e) {\n                              var n = e.replace(te, ne);\n                              return function (e) {\n                                  var t = \"undefined\" != typeof e.getAttributeNode && e.getAttributeNode(\"id\");\n                                  return t && t.value === n;\n                              };\n                          }),\n                          (b.find.ID = function (e, t) {\n                              if (\"undefined\" != typeof t.getElementById && E) {\n                                  var n,\n                                      r,\n                                      i,\n                                      o = t.getElementById(e);\n                                  if (o) {\n                                      if ((n = o.getAttributeNode(\"id\")) && n.value === e) return [o];\n                                      (i = t.getElementsByName(e)), (r = 0);\n                                      while ((o = i[r++])) if ((n = o.getAttributeNode(\"id\")) && n.value === e) return [o];\n                                  }\n                                  return [];\n                              }\n                          })),\n                    (b.find.TAG = d.getElementsByTagName\n                        ? function (e, t) {\n                              return \"undefined\" != typeof t.getElementsByTagName ? t.getElementsByTagName(e) : d.qsa ? t.querySelectorAll(e) : void 0;\n                          }\n                        : function (e, t) {\n                              var n,\n                                  r = [],\n                                  i = 0,\n                                  o = t.getElementsByTagName(e);\n                              if (\"*\" === e) {\n                                  while ((n = o[i++])) 1 === n.nodeType && r.push(n);\n                                  return r;\n                              }\n                              return o;\n                          }),\n                    (b.find.CLASS =\n                        d.getElementsByClassName &&\n                        function (e, t) {\n                            if (\"undefined\" != typeof t.getElementsByClassName && E) return t.getElementsByClassName(e);\n                        }),\n                    (s = []),\n                    (v = []),\n                    (d.qsa = K.test(C.querySelectorAll)) &&\n                        (ce(function (e) {\n                            (a.appendChild(e).innerHTML = \"<a id='\" + k + \"'></a><select id='\" + k + \"-\\r\\\\' msallowcapture=''><option selected=''></option></select>\"),\n                                e.querySelectorAll(\"[msallowcapture^='']\").length && v.push(\"[*^$]=\" + M + \"*(?:''|\\\"\\\")\"),\n                                e.querySelectorAll(\"[selected]\").length || v.push(\"\\\\[\" + M + \"*(?:value|\" + R + \")\"),\n                                e.querySelectorAll(\"[id~=\" + k + \"-]\").length || v.push(\"~=\"),\n                                e.querySelectorAll(\":checked\").length || v.push(\":checked\"),\n                                e.querySelectorAll(\"a#\" + k + \"+*\").length || v.push(\".#.+[+~]\");\n                        }),\n                        ce(function (e) {\n                            e.innerHTML = \"<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>\";\n                            var t = C.createElement(\"input\");\n                            t.setAttribute(\"type\", \"hidden\"),\n                                e.appendChild(t).setAttribute(\"name\", \"D\"),\n                                e.querySelectorAll(\"[name=d]\").length && v.push(\"name\" + M + \"*[*^$|!~]?=\"),\n                                2 !== e.querySelectorAll(\":enabled\").length && v.push(\":enabled\", \":disabled\"),\n                                (a.appendChild(e).disabled = !0),\n                                2 !== e.querySelectorAll(\":disabled\").length && v.push(\":enabled\", \":disabled\"),\n                                e.querySelectorAll(\"*,:x\"),\n                                v.push(\",.*:\");\n                        })),\n                    (d.matchesSelector = K.test((c = a.matches || a.webkitMatchesSelector || a.mozMatchesSelector || a.oMatchesSelector || a.msMatchesSelector))) &&\n                        ce(function (e) {\n                            (d.disconnectedMatch = c.call(e, \"*\")), c.call(e, \"[s!='']:x\"), s.push(\"!=\", $);\n                        }),\n                    (v = v.length && new RegExp(v.join(\"|\"))),\n                    (s = s.length && new RegExp(s.join(\"|\"))),\n                    (t = K.test(a.compareDocumentPosition)),\n                    (y =\n                        t || K.test(a.contains)\n                            ? function (e, t) {\n                                  var n = 9 === e.nodeType ? e.documentElement : e,\n                                      r = t && t.parentNode;\n                                  return e === r || !(!r || 1 !== r.nodeType || !(n.contains ? n.contains(r) : e.compareDocumentPosition && 16 & e.compareDocumentPosition(r)));\n                              }\n                            : function (e, t) {\n                                  if (t) while ((t = t.parentNode)) if (t === e) return !0;\n                                  return !1;\n                              }),\n                    (D = t\n                        ? function (e, t) {\n                              if (e === t) return (l = !0), 0;\n                              var n = !e.compareDocumentPosition - !t.compareDocumentPosition;\n                              return (\n                                  n ||\n                                  (1 & (n = (e.ownerDocument || e) === (t.ownerDocument || t) ? e.compareDocumentPosition(t) : 1) || (!d.sortDetached && t.compareDocumentPosition(e) === n)\n                                      ? e === C || (e.ownerDocument === m && y(m, e))\n                                          ? -1\n                                          : t === C || (t.ownerDocument === m && y(m, t))\n                                          ? 1\n                                          : u\n                                          ? P(u, e) - P(u, t)\n                                          : 0\n                                      : 4 & n\n                                      ? -1\n                                      : 1)\n                              );\n                          }\n                        : function (e, t) {\n                              if (e === t) return (l = !0), 0;\n                              var n,\n                                  r = 0,\n                                  i = e.parentNode,\n                                  o = t.parentNode,\n                                  a = [e],\n                                  s = [t];\n                              if (!i || !o) return e === C ? -1 : t === C ? 1 : i ? -1 : o ? 1 : u ? P(u, e) - P(u, t) : 0;\n                              if (i === o) return pe(e, t);\n                              n = e;\n                              while ((n = n.parentNode)) a.unshift(n);\n                              n = t;\n                              while ((n = n.parentNode)) s.unshift(n);\n                              while (a[r] === s[r]) r++;\n                              return r ? pe(a[r], s[r]) : a[r] === m ? -1 : s[r] === m ? 1 : 0;\n                          })),\n                C\n            );\n        }),\n        (se.matches = function (e, t) {\n            return se(e, null, null, t);\n        }),\n        (se.matchesSelector = function (e, t) {\n            if (((e.ownerDocument || e) !== C && T(e), d.matchesSelector && E && !A[t + \" \"] && (!s || !s.test(t)) && (!v || !v.test(t))))\n                try {\n                    var n = c.call(e, t);\n                    if (n || d.disconnectedMatch || (e.document && 11 !== e.document.nodeType)) return n;\n                } catch (e) {\n                    A(t, !0);\n                }\n            return 0 < se(t, C, null, [e]).length;\n        }),\n        (se.contains = function (e, t) {\n            return (e.ownerDocument || e) !== C && T(e), y(e, t);\n        }),\n        (se.attr = function (e, t) {\n            (e.ownerDocument || e) !== C && T(e);\n            var n = b.attrHandle[t.toLowerCase()],\n                r = n && j.call(b.attrHandle, t.toLowerCase()) ? n(e, t, !E) : void 0;\n            return void 0 !== r ? r : d.attributes || !E ? e.getAttribute(t) : (r = e.getAttributeNode(t)) && r.specified ? r.value : null;\n        }),\n        (se.escape = function (e) {\n            return (e + \"\").replace(re, ie);\n        }),\n        (se.error = function (e) {\n            throw new Error(\"Syntax error, unrecognized expression: \" + e);\n        }),\n        (se.uniqueSort = function (e) {\n            var t,\n                n = [],\n                r = 0,\n                i = 0;\n            if (((l = !d.detectDuplicates), (u = !d.sortStable && e.slice(0)), e.sort(D), l)) {\n                while ((t = e[i++])) t === e[i] && (r = n.push(i));\n                while (r--) e.splice(n[r], 1);\n            }\n            return (u = null), e;\n        }),\n        (o = se.getText = function (e) {\n            var t,\n                n = \"\",\n                r = 0,\n                i = e.nodeType;\n            if (i) {\n                if (1 === i || 9 === i || 11 === i) {\n                    if (\"string\" == typeof e.textContent) return e.textContent;\n                    for (e = e.firstChild; e; e = e.nextSibling) n += o(e);\n                } else if (3 === i || 4 === i) return e.nodeValue;\n            } else while ((t = e[r++])) n += o(t);\n            return n;\n        }),\n        ((b = se.selectors = {\n            cacheLength: 50,\n            createPseudo: le,\n            match: G,\n            attrHandle: {},\n            find: {},\n            relative: { \">\": { dir: \"parentNode\", first: !0 }, \" \": { dir: \"parentNode\" }, \"+\": { dir: \"previousSibling\", first: !0 }, \"~\": { dir: \"previousSibling\" } },\n            preFilter: {\n                ATTR: function (e) {\n                    return (e[1] = e[1].replace(te, ne)), (e[3] = (e[3] || e[4] || e[5] || \"\").replace(te, ne)), \"~=\" === e[2] && (e[3] = \" \" + e[3] + \" \"), e.slice(0, 4);\n                },\n                CHILD: function (e) {\n                    return (\n                        (e[1] = e[1].toLowerCase()),\n                        \"nth\" === e[1].slice(0, 3) ? (e[3] || se.error(e[0]), (e[4] = +(e[4] ? e[5] + (e[6] || 1) : 2 * (\"even\" === e[3] || \"odd\" === e[3]))), (e[5] = +(e[7] + e[8] || \"odd\" === e[3]))) : e[3] && se.error(e[0]),\n                        e\n                    );\n                },\n                PSEUDO: function (e) {\n                    var t,\n                        n = !e[6] && e[2];\n                    return G.CHILD.test(e[0])\n                        ? null\n                        : (e[3] ? (e[2] = e[4] || e[5] || \"\") : n && X.test(n) && (t = h(n, !0)) && (t = n.indexOf(\")\", n.length - t) - n.length) && ((e[0] = e[0].slice(0, t)), (e[2] = n.slice(0, t))), e.slice(0, 3));\n                },\n            },\n            filter: {\n                TAG: function (e) {\n                    var t = e.replace(te, ne).toLowerCase();\n                    return \"*\" === e\n                        ? function () {\n                              return !0;\n                          }\n                        : function (e) {\n                              return e.nodeName && e.nodeName.toLowerCase() === t;\n                          };\n                },\n                CLASS: function (e) {\n                    var t = p[e + \" \"];\n                    return (\n                        t ||\n                        ((t = new RegExp(\"(^|\" + M + \")\" + e + \"(\" + M + \"|$)\")) &&\n                            p(e, function (e) {\n                                return t.test((\"string\" == typeof e.className && e.className) || (\"undefined\" != typeof e.getAttribute && e.getAttribute(\"class\")) || \"\");\n                            }))\n                    );\n                },\n                ATTR: function (n, r, i) {\n                    return function (e) {\n                        var t = se.attr(e, n);\n                        return null == t\n                            ? \"!=\" === r\n                            : !r ||\n                                  ((t += \"\"),\n                                  \"=\" === r\n                                      ? t === i\n                                      : \"!=\" === r\n                                      ? t !== i\n                                      : \"^=\" === r\n                                      ? i && 0 === t.indexOf(i)\n                                      : \"*=\" === r\n                                      ? i && -1 < t.indexOf(i)\n                                      : \"$=\" === r\n                                      ? i && t.slice(-i.length) === i\n                                      : \"~=\" === r\n                                      ? -1 < (\" \" + t.replace(F, \" \") + \" \").indexOf(i)\n                                      : \"|=\" === r && (t === i || t.slice(0, i.length + 1) === i + \"-\"));\n                    };\n                },\n                CHILD: function (h, e, t, g, v) {\n                    var y = \"nth\" !== h.slice(0, 3),\n                        m = \"last\" !== h.slice(-4),\n                        x = \"of-type\" === e;\n                    return 1 === g && 0 === v\n                        ? function (e) {\n                              return !!e.parentNode;\n                          }\n                        : function (e, t, n) {\n                              var r,\n                                  i,\n                                  o,\n                                  a,\n                                  s,\n                                  u,\n                                  l = y !== m ? \"nextSibling\" : \"previousSibling\",\n                                  c = e.parentNode,\n                                  f = x && e.nodeName.toLowerCase(),\n                                  p = !n && !x,\n                                  d = !1;\n                              if (c) {\n                                  if (y) {\n                                      while (l) {\n                                          a = e;\n                                          while ((a = a[l])) if (x ? a.nodeName.toLowerCase() === f : 1 === a.nodeType) return !1;\n                                          u = l = \"only\" === h && !u && \"nextSibling\";\n                                      }\n                                      return !0;\n                                  }\n                                  if (((u = [m ? c.firstChild : c.lastChild]), m && p)) {\n                                      (d = (s = (r = (i = (o = (a = c)[k] || (a[k] = {}))[a.uniqueID] || (o[a.uniqueID] = {}))[h] || [])[0] === S && r[1]) && r[2]), (a = s && c.childNodes[s]);\n                                      while ((a = (++s && a && a[l]) || (d = s = 0) || u.pop()))\n                                          if (1 === a.nodeType && ++d && a === e) {\n                                              i[h] = [S, s, d];\n                                              break;\n                                          }\n                                  } else if ((p && (d = s = (r = (i = (o = (a = e)[k] || (a[k] = {}))[a.uniqueID] || (o[a.uniqueID] = {}))[h] || [])[0] === S && r[1]), !1 === d))\n                                      while ((a = (++s && a && a[l]) || (d = s = 0) || u.pop()))\n                                          if ((x ? a.nodeName.toLowerCase() === f : 1 === a.nodeType) && ++d && (p && ((i = (o = a[k] || (a[k] = {}))[a.uniqueID] || (o[a.uniqueID] = {}))[h] = [S, d]), a === e)) break;\n                                  return (d -= v) === g || (d % g == 0 && 0 <= d / g);\n                              }\n                          };\n                },\n                PSEUDO: function (e, o) {\n                    var t,\n                        a = b.pseudos[e] || b.setFilters[e.toLowerCase()] || se.error(\"unsupported pseudo: \" + e);\n                    return a[k]\n                        ? a(o)\n                        : 1 < a.length\n                        ? ((t = [e, e, \"\", o]),\n                          b.setFilters.hasOwnProperty(e.toLowerCase())\n                              ? le(function (e, t) {\n                                    var n,\n                                        r = a(e, o),\n                                        i = r.length;\n                                    while (i--) e[(n = P(e, r[i]))] = !(t[n] = r[i]);\n                                })\n                              : function (e) {\n                                    return a(e, 0, t);\n                                })\n                        : a;\n                },\n            },\n            pseudos: {\n                not: le(function (e) {\n                    var r = [],\n                        i = [],\n                        s = f(e.replace(B, \"$1\"));\n                    return s[k]\n                        ? le(function (e, t, n, r) {\n                              var i,\n                                  o = s(e, null, r, []),\n                                  a = e.length;\n                              while (a--) (i = o[a]) && (e[a] = !(t[a] = i));\n                          })\n                        : function (e, t, n) {\n                              return (r[0] = e), s(r, null, n, i), (r[0] = null), !i.pop();\n                          };\n                }),\n                has: le(function (t) {\n                    return function (e) {\n                        return 0 < se(t, e).length;\n                    };\n                }),\n                contains: le(function (t) {\n                    return (\n                        (t = t.replace(te, ne)),\n                        function (e) {\n                            return -1 < (e.textContent || o(e)).indexOf(t);\n                        }\n                    );\n                }),\n                lang: le(function (n) {\n                    return (\n                        V.test(n || \"\") || se.error(\"unsupported lang: \" + n),\n                        (n = n.replace(te, ne).toLowerCase()),\n                        function (e) {\n                            var t;\n                            do {\n                                if ((t = E ? e.lang : e.getAttribute(\"xml:lang\") || e.getAttribute(\"lang\"))) return (t = t.toLowerCase()) === n || 0 === t.indexOf(n + \"-\");\n                            } while ((e = e.parentNode) && 1 === e.nodeType);\n                            return !1;\n                        }\n                    );\n                }),\n                target: function (e) {\n                    var t = n.location && n.location.hash;\n                    return t && t.slice(1) === e.id;\n                },\n                root: function (e) {\n                    return e === a;\n                },\n                focus: function (e) {\n                    return e === C.activeElement && (!C.hasFocus || C.hasFocus()) && !!(e.type || e.href || ~e.tabIndex);\n                },\n                enabled: ge(!1),\n                disabled: ge(!0),\n                checked: function (e) {\n                    var t = e.nodeName.toLowerCase();\n                    return (\"input\" === t && !!e.checked) || (\"option\" === t && !!e.selected);\n                },\n                selected: function (e) {\n                    return e.parentNode && e.parentNode.selectedIndex, !0 === e.selected;\n                },\n                empty: function (e) {\n                    for (e = e.firstChild; e; e = e.nextSibling) if (e.nodeType < 6) return !1;\n                    return !0;\n                },\n                parent: function (e) {\n                    return !b.pseudos.empty(e);\n                },\n                header: function (e) {\n                    return J.test(e.nodeName);\n                },\n                input: function (e) {\n                    return Q.test(e.nodeName);\n                },\n                button: function (e) {\n                    var t = e.nodeName.toLowerCase();\n                    return (\"input\" === t && \"button\" === e.type) || \"button\" === t;\n                },\n                text: function (e) {\n                    var t;\n                    return \"input\" === e.nodeName.toLowerCase() && \"text\" === e.type && (null == (t = e.getAttribute(\"type\")) || \"text\" === t.toLowerCase());\n                },\n                first: ve(function () {\n                    return [0];\n                }),\n                last: ve(function (e, t) {\n                    return [t - 1];\n                }),\n                eq: ve(function (e, t, n) {\n                    return [n < 0 ? n + t : n];\n                }),\n                even: ve(function (e, t) {\n                    for (var n = 0; n < t; n += 2) e.push(n);\n                    return e;\n                }),\n                odd: ve(function (e, t) {\n                    for (var n = 1; n < t; n += 2) e.push(n);\n                    return e;\n                }),\n                lt: ve(function (e, t, n) {\n                    for (var r = n < 0 ? n + t : t < n ? t : n; 0 <= --r; ) e.push(r);\n                    return e;\n                }),\n                gt: ve(function (e, t, n) {\n                    for (var r = n < 0 ? n + t : n; ++r < t; ) e.push(r);\n                    return e;\n                }),\n            },\n        }).pseudos.nth = b.pseudos.eq),\n        { radio: !0, checkbox: !0, file: !0, password: !0, image: !0 }))\n            b.pseudos[e] = de(e);\n        for (e in { submit: !0, reset: !0 }) b.pseudos[e] = he(e);\n        function me() {}\n        function xe(e) {\n            for (var t = 0, n = e.length, r = \"\"; t < n; t++) r += e[t].value;\n            return r;\n        }\n        function be(s, e, t) {\n            var u = e.dir,\n                l = e.next,\n                c = l || u,\n                f = t && \"parentNode\" === c,\n                p = r++;\n            return e.first\n                ? function (e, t, n) {\n                      while ((e = e[u])) if (1 === e.nodeType || f) return s(e, t, n);\n                      return !1;\n                  }\n                : function (e, t, n) {\n                      var r,\n                          i,\n                          o,\n                          a = [S, p];\n                      if (n) {\n                          while ((e = e[u])) if ((1 === e.nodeType || f) && s(e, t, n)) return !0;\n                      } else\n                          while ((e = e[u]))\n                              if (1 === e.nodeType || f)\n                                  if (((i = (o = e[k] || (e[k] = {}))[e.uniqueID] || (o[e.uniqueID] = {})), l && l === e.nodeName.toLowerCase())) e = e[u] || e;\n                                  else {\n                                      if ((r = i[c]) && r[0] === S && r[1] === p) return (a[2] = r[2]);\n                                      if (((i[c] = a)[2] = s(e, t, n))) return !0;\n                                  }\n                      return !1;\n                  };\n        }\n        function we(i) {\n            return 1 < i.length\n                ? function (e, t, n) {\n                      var r = i.length;\n                      while (r--) if (!i[r](e, t, n)) return !1;\n                      return !0;\n                  }\n                : i[0];\n        }\n        function Te(e, t, n, r, i) {\n            for (var o, a = [], s = 0, u = e.length, l = null != t; s < u; s++) (o = e[s]) && ((n && !n(o, r, i)) || (a.push(o), l && t.push(s)));\n            return a;\n        }\n        function Ce(d, h, g, v, y, e) {\n            return (\n                v && !v[k] && (v = Ce(v)),\n                y && !y[k] && (y = Ce(y, e)),\n                le(function (e, t, n, r) {\n                    var i,\n                        o,\n                        a,\n                        s = [],\n                        u = [],\n                        l = t.length,\n                        c =\n                            e ||\n                            (function (e, t, n) {\n                                for (var r = 0, i = t.length; r < i; r++) se(e, t[r], n);\n                                return n;\n                            })(h || \"*\", n.nodeType ? [n] : n, []),\n                        f = !d || (!e && h) ? c : Te(c, s, d, n, r),\n                        p = g ? (y || (e ? d : l || v) ? [] : t) : f;\n                    if ((g && g(f, p, n, r), v)) {\n                        (i = Te(p, u)), v(i, [], n, r), (o = i.length);\n                        while (o--) (a = i[o]) && (p[u[o]] = !(f[u[o]] = a));\n                    }\n                    if (e) {\n                        if (y || d) {\n                            if (y) {\n                                (i = []), (o = p.length);\n                                while (o--) (a = p[o]) && i.push((f[o] = a));\n                                y(null, (p = []), i, r);\n                            }\n                            o = p.length;\n                            while (o--) (a = p[o]) && -1 < (i = y ? P(e, a) : s[o]) && (e[i] = !(t[i] = a));\n                        }\n                    } else (p = Te(p === t ? p.splice(l, p.length) : p)), y ? y(null, t, p, r) : H.apply(t, p);\n                })\n            );\n        }\n        function Ee(e) {\n            for (\n                var i,\n                    t,\n                    n,\n                    r = e.length,\n                    o = b.relative[e[0].type],\n                    a = o || b.relative[\" \"],\n                    s = o ? 1 : 0,\n                    u = be(\n                        function (e) {\n                            return e === i;\n                        },\n                        a,\n                        !0\n                    ),\n                    l = be(\n                        function (e) {\n                            return -1 < P(i, e);\n                        },\n                        a,\n                        !0\n                    ),\n                    c = [\n                        function (e, t, n) {\n                            var r = (!o && (n || t !== w)) || ((i = t).nodeType ? u(e, t, n) : l(e, t, n));\n                            return (i = null), r;\n                        },\n                    ];\n                s < r;\n                s++\n            )\n                if ((t = b.relative[e[s].type])) c = [be(we(c), t)];\n                else {\n                    if ((t = b.filter[e[s].type].apply(null, e[s].matches))[k]) {\n                        for (n = ++s; n < r; n++) if (b.relative[e[n].type]) break;\n                        return Ce(1 < s && we(c), 1 < s && xe(e.slice(0, s - 1).concat({ value: \" \" === e[s - 2].type ? \"*\" : \"\" })).replace(B, \"$1\"), t, s < n && Ee(e.slice(s, n)), n < r && Ee((e = e.slice(n))), n < r && xe(e));\n                    }\n                    c.push(t);\n                }\n            return we(c);\n        }\n        return (\n            (me.prototype = b.filters = b.pseudos),\n            (b.setFilters = new me()),\n            (h = se.tokenize = function (e, t) {\n                var n,\n                    r,\n                    i,\n                    o,\n                    a,\n                    s,\n                    u,\n                    l = x[e + \" \"];\n                if (l) return t ? 0 : l.slice(0);\n                (a = e), (s = []), (u = b.preFilter);\n                while (a) {\n                    for (o in ((n && !(r = _.exec(a))) || (r && (a = a.slice(r[0].length) || a), s.push((i = []))),\n                    (n = !1),\n                    (r = z.exec(a)) && ((n = r.shift()), i.push({ value: n, type: r[0].replace(B, \" \") }), (a = a.slice(n.length))),\n                    b.filter))\n                        !(r = G[o].exec(a)) || (u[o] && !(r = u[o](r))) || ((n = r.shift()), i.push({ value: n, type: o, matches: r }), (a = a.slice(n.length)));\n                    if (!n) break;\n                }\n                return t ? a.length : a ? se.error(e) : x(e, s).slice(0);\n            }),\n            (f = se.compile = function (e, t) {\n                var n,\n                    v,\n                    y,\n                    m,\n                    x,\n                    r,\n                    i = [],\n                    o = [],\n                    a = N[e + \" \"];\n                if (!a) {\n                    t || (t = h(e)), (n = t.length);\n                    while (n--) (a = Ee(t[n]))[k] ? i.push(a) : o.push(a);\n                    (a = N(\n                        e,\n                        ((v = o),\n                        (m = 0 < (y = i).length),\n                        (x = 0 < v.length),\n                        (r = function (e, t, n, r, i) {\n                            var o,\n                                a,\n                                s,\n                                u = 0,\n                                l = \"0\",\n                                c = e && [],\n                                f = [],\n                                p = w,\n                                d = e || (x && b.find.TAG(\"*\", i)),\n                                h = (S += null == p ? 1 : Math.random() || 0.1),\n                                g = d.length;\n                            for (i && (w = t === C || t || i); l !== g && null != (o = d[l]); l++) {\n                                if (x && o) {\n                                    (a = 0), t || o.ownerDocument === C || (T(o), (n = !E));\n                                    while ((s = v[a++]))\n                                        if (s(o, t || C, n)) {\n                                            r.push(o);\n                                            break;\n                                        }\n                                    i && (S = h);\n                                }\n                                m && ((o = !s && o) && u--, e && c.push(o));\n                            }\n                            if (((u += l), m && l !== u)) {\n                                a = 0;\n                                while ((s = y[a++])) s(c, f, t, n);\n                                if (e) {\n                                    if (0 < u) while (l--) c[l] || f[l] || (f[l] = q.call(r));\n                                    f = Te(f);\n                                }\n                                H.apply(r, f), i && !e && 0 < f.length && 1 < u + y.length && se.uniqueSort(r);\n                            }\n                            return i && ((S = h), (w = p)), c;\n                        }),\n                        m ? le(r) : r)\n                    )).selector = e;\n                }\n                return a;\n            }),\n            (g = se.select = function (e, t, n, r) {\n                var i,\n                    o,\n                    a,\n                    s,\n                    u,\n                    l = \"function\" == typeof e && e,\n                    c = !r && h((e = l.selector || e));\n                if (((n = n || []), 1 === c.length)) {\n                    if (2 < (o = c[0] = c[0].slice(0)).length && \"ID\" === (a = o[0]).type && 9 === t.nodeType && E && b.relative[o[1].type]) {\n                        if (!(t = (b.find.ID(a.matches[0].replace(te, ne), t) || [])[0])) return n;\n                        l && (t = t.parentNode), (e = e.slice(o.shift().value.length));\n                    }\n                    i = G.needsContext.test(e) ? 0 : o.length;\n                    while (i--) {\n                        if (((a = o[i]), b.relative[(s = a.type)])) break;\n                        if ((u = b.find[s]) && (r = u(a.matches[0].replace(te, ne), (ee.test(o[0].type) && ye(t.parentNode)) || t))) {\n                            if ((o.splice(i, 1), !(e = r.length && xe(o)))) return H.apply(n, r), n;\n                            break;\n                        }\n                    }\n                }\n                return (l || f(e, c))(r, t, !E, n, !t || (ee.test(e) && ye(t.parentNode)) || t), n;\n            }),\n            (d.sortStable = k.split(\"\").sort(D).join(\"\") === k),\n            (d.detectDuplicates = !!l),\n            T(),\n            (d.sortDetached = ce(function (e) {\n                return 1 & e.compareDocumentPosition(C.createElement(\"fieldset\"));\n            })),\n            ce(function (e) {\n                return (e.innerHTML = \"<a href='#'></a>\"), \"#\" === e.firstChild.getAttribute(\"href\");\n            }) ||\n                fe(\"type|href|height|width\", function (e, t, n) {\n                    if (!n) return e.getAttribute(t, \"type\" === t.toLowerCase() ? 1 : 2);\n                }),\n            (d.attributes &&\n                ce(function (e) {\n                    return (e.innerHTML = \"<input/>\"), e.firstChild.setAttribute(\"value\", \"\"), \"\" === e.firstChild.getAttribute(\"value\");\n                })) ||\n                fe(\"value\", function (e, t, n) {\n                    if (!n && \"input\" === e.nodeName.toLowerCase()) return e.defaultValue;\n                }),\n            ce(function (e) {\n                return null == e.getAttribute(\"disabled\");\n            }) ||\n                fe(R, function (e, t, n) {\n                    var r;\n                    if (!n) return !0 === e[t] ? t.toLowerCase() : (r = e.getAttributeNode(t)) && r.specified ? r.value : null;\n                }),\n            se\n        );\n    })(C);\n    (k.find = h), (k.expr = h.selectors), (k.expr[\":\"] = k.expr.pseudos), (k.uniqueSort = k.unique = h.uniqueSort), (k.text = h.getText), (k.isXMLDoc = h.isXML), (k.contains = h.contains), (k.escapeSelector = h.escape);\n    var T = function (e, t, n) {\n            var r = [],\n                i = void 0 !== n;\n            while ((e = e[t]) && 9 !== e.nodeType)\n                if (1 === e.nodeType) {\n                    if (i && k(e).is(n)) break;\n                    r.push(e);\n                }\n            return r;\n        },\n        S = function (e, t) {\n            for (var n = []; e; e = e.nextSibling) 1 === e.nodeType && e !== t && n.push(e);\n            return n;\n        },\n        N = k.expr.match.needsContext;\n    function A(e, t) {\n        return e.nodeName && e.nodeName.toLowerCase() === t.toLowerCase();\n    }\n    var D = /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;\n    function j(e, n, r) {\n        return m(n)\n            ? k.grep(e, function (e, t) {\n                  return !!n.call(e, t, e) !== r;\n              })\n            : n.nodeType\n            ? k.grep(e, function (e) {\n                  return (e === n) !== r;\n              })\n            : \"string\" != typeof n\n            ? k.grep(e, function (e) {\n                  return -1 < i.call(n, e) !== r;\n              })\n            : k.filter(n, e, r);\n    }\n    (k.filter = function (e, t, n) {\n        var r = t[0];\n        return (\n            n && (e = \":not(\" + e + \")\"),\n            1 === t.length && 1 === r.nodeType\n                ? k.find.matchesSelector(r, e)\n                    ? [r]\n                    : []\n                : k.find.matches(\n                      e,\n                      k.grep(t, function (e) {\n                          return 1 === e.nodeType;\n                      })\n                  )\n        );\n    }),\n        k.fn.extend({\n            find: function (e) {\n                var t,\n                    n,\n                    r = this.length,\n                    i = this;\n                if (\"string\" != typeof e)\n                    return this.pushStack(\n                        k(e).filter(function () {\n                            for (t = 0; t < r; t++) if (k.contains(i[t], this)) return !0;\n                        })\n                    );\n                for (n = this.pushStack([]), t = 0; t < r; t++) k.find(e, i[t], n);\n                return 1 < r ? k.uniqueSort(n) : n;\n            },\n            filter: function (e) {\n                return this.pushStack(j(this, e || [], !1));\n            },\n            not: function (e) {\n                return this.pushStack(j(this, e || [], !0));\n            },\n            is: function (e) {\n                return !!j(this, \"string\" == typeof e && N.test(e) ? k(e) : e || [], !1).length;\n            },\n        });\n    var q,\n        L = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/;\n    ((k.fn.init = function (e, t, n) {\n        var r, i;\n        if (!e) return this;\n        if (((n = n || q), \"string\" == typeof e)) {\n            if (!(r = \"<\" === e[0] && \">\" === e[e.length - 1] && 3 <= e.length ? [null, e, null] : L.exec(e)) || (!r[1] && t)) return !t || t.jquery ? (t || n).find(e) : this.constructor(t).find(e);\n            if (r[1]) {\n                if (((t = t instanceof k ? t[0] : t), k.merge(this, k.parseHTML(r[1], t && t.nodeType ? t.ownerDocument || t : E, !0)), D.test(r[1]) && k.isPlainObject(t))) for (r in t) m(this[r]) ? this[r](t[r]) : this.attr(r, t[r]);\n                return this;\n            }\n            return (i = E.getElementById(r[2])) && ((this[0] = i), (this.length = 1)), this;\n        }\n        return e.nodeType ? ((this[0] = e), (this.length = 1), this) : m(e) ? (void 0 !== n.ready ? n.ready(e) : e(k)) : k.makeArray(e, this);\n    }).prototype = k.fn),\n        (q = k(E));\n    var H = /^(?:parents|prev(?:Until|All))/,\n        O = { children: !0, contents: !0, next: !0, prev: !0 };\n    function P(e, t) {\n        while ((e = e[t]) && 1 !== e.nodeType);\n        return e;\n    }\n    k.fn.extend({\n        has: function (e) {\n            var t = k(e, this),\n                n = t.length;\n            return this.filter(function () {\n                for (var e = 0; e < n; e++) if (k.contains(this, t[e])) return !0;\n            });\n        },\n        closest: function (e, t) {\n            var n,\n                r = 0,\n                i = this.length,\n                o = [],\n                a = \"string\" != typeof e && k(e);\n            if (!N.test(e))\n                for (; r < i; r++)\n                    for (n = this[r]; n && n !== t; n = n.parentNode)\n                        if (n.nodeType < 11 && (a ? -1 < a.index(n) : 1 === n.nodeType && k.find.matchesSelector(n, e))) {\n                            o.push(n);\n                            break;\n                        }\n            return this.pushStack(1 < o.length ? k.uniqueSort(o) : o);\n        },\n        index: function (e) {\n            return e ? (\"string\" == typeof e ? i.call(k(e), this[0]) : i.call(this, e.jquery ? e[0] : e)) : this[0] && this[0].parentNode ? this.first().prevAll().length : -1;\n        },\n        add: function (e, t) {\n            return this.pushStack(k.uniqueSort(k.merge(this.get(), k(e, t))));\n        },\n        addBack: function (e) {\n            return this.add(null == e ? this.prevObject : this.prevObject.filter(e));\n        },\n    }),\n        k.each(\n            {\n                parent: function (e) {\n                    var t = e.parentNode;\n                    return t && 11 !== t.nodeType ? t : null;\n                },\n                parents: function (e) {\n                    return T(e, \"parentNode\");\n                },\n                parentsUntil: function (e, t, n) {\n                    return T(e, \"parentNode\", n);\n                },\n                next: function (e) {\n                    return P(e, \"nextSibling\");\n                },\n                prev: function (e) {\n                    return P(e, \"previousSibling\");\n                },\n                nextAll: function (e) {\n                    return T(e, \"nextSibling\");\n                },\n                prevAll: function (e) {\n                    return T(e, \"previousSibling\");\n                },\n                nextUntil: function (e, t, n) {\n                    return T(e, \"nextSibling\", n);\n                },\n                prevUntil: function (e, t, n) {\n                    return T(e, \"previousSibling\", n);\n                },\n                siblings: function (e) {\n                    return S((e.parentNode || {}).firstChild, e);\n                },\n                children: function (e) {\n                    return S(e.firstChild);\n                },\n                contents: function (e) {\n                    return \"undefined\" != typeof e.contentDocument ? e.contentDocument : (A(e, \"template\") && (e = e.content || e), k.merge([], e.childNodes));\n                },\n            },\n            function (r, i) {\n                k.fn[r] = function (e, t) {\n                    var n = k.map(this, i, e);\n                    return \"Until\" !== r.slice(-5) && (t = e), t && \"string\" == typeof t && (n = k.filter(t, n)), 1 < this.length && (O[r] || k.uniqueSort(n), H.test(r) && n.reverse()), this.pushStack(n);\n                };\n            }\n        );\n    var R = /[^\\x20\\t\\r\\n\\f]+/g;\n    function M(e) {\n        return e;\n    }\n    function I(e) {\n        throw e;\n    }\n    function W(e, t, n, r) {\n        var i;\n        try {\n            e && m((i = e.promise)) ? i.call(e).done(t).fail(n) : e && m((i = e.then)) ? i.call(e, t, n) : t.apply(void 0, [e].slice(r));\n        } catch (e) {\n            n.apply(void 0, [e]);\n        }\n    }\n    (k.Callbacks = function (r) {\n        var e, n;\n        r =\n            \"string\" == typeof r\n                ? ((e = r),\n                  (n = {}),\n                  k.each(e.match(R) || [], function (e, t) {\n                      n[t] = !0;\n                  }),\n                  n)\n                : k.extend({}, r);\n        var i,\n            t,\n            o,\n            a,\n            s = [],\n            u = [],\n            l = -1,\n            c = function () {\n                for (a = a || r.once, o = i = !0; u.length; l = -1) {\n                    t = u.shift();\n                    while (++l < s.length) !1 === s[l].apply(t[0], t[1]) && r.stopOnFalse && ((l = s.length), (t = !1));\n                }\n                r.memory || (t = !1), (i = !1), a && (s = t ? [] : \"\");\n            },\n            f = {\n                add: function () {\n                    return (\n                        s &&\n                            (t && !i && ((l = s.length - 1), u.push(t)),\n                            (function n(e) {\n                                k.each(e, function (e, t) {\n                                    m(t) ? (r.unique && f.has(t)) || s.push(t) : t && t.length && \"string\" !== w(t) && n(t);\n                                });\n                            })(arguments),\n                            t && !i && c()),\n                        this\n                    );\n                },\n                remove: function () {\n                    return (\n                        k.each(arguments, function (e, t) {\n                            var n;\n                            while (-1 < (n = k.inArray(t, s, n))) s.splice(n, 1), n <= l && l--;\n                        }),\n                        this\n                    );\n                },\n                has: function (e) {\n                    return e ? -1 < k.inArray(e, s) : 0 < s.length;\n                },\n                empty: function () {\n                    return s && (s = []), this;\n                },\n                disable: function () {\n                    return (a = u = []), (s = t = \"\"), this;\n                },\n                disabled: function () {\n                    return !s;\n                },\n                lock: function () {\n                    return (a = u = []), t || i || (s = t = \"\"), this;\n                },\n                locked: function () {\n                    return !!a;\n                },\n                fireWith: function (e, t) {\n                    return a || ((t = [e, (t = t || []).slice ? t.slice() : t]), u.push(t), i || c()), this;\n                },\n                fire: function () {\n                    return f.fireWith(this, arguments), this;\n                },\n                fired: function () {\n                    return !!o;\n                },\n            };\n        return f;\n    }),\n        k.extend({\n            Deferred: function (e) {\n                var o = [\n                        [\"notify\", \"progress\", k.Callbacks(\"memory\"), k.Callbacks(\"memory\"), 2],\n                        [\"resolve\", \"done\", k.Callbacks(\"once memory\"), k.Callbacks(\"once memory\"), 0, \"resolved\"],\n                        [\"reject\", \"fail\", k.Callbacks(\"once memory\"), k.Callbacks(\"once memory\"), 1, \"rejected\"],\n                    ],\n                    i = \"pending\",\n                    a = {\n                        state: function () {\n                            return i;\n                        },\n                        always: function () {\n                            return s.done(arguments).fail(arguments), this;\n                        },\n                        catch: function (e) {\n                            return a.then(null, e);\n                        },\n                        pipe: function () {\n                            var i = arguments;\n                            return k\n                                .Deferred(function (r) {\n                                    k.each(o, function (e, t) {\n                                        var n = m(i[t[4]]) && i[t[4]];\n                                        s[t[1]](function () {\n                                            var e = n && n.apply(this, arguments);\n                                            e && m(e.promise) ? e.promise().progress(r.notify).done(r.resolve).fail(r.reject) : r[t[0] + \"With\"](this, n ? [e] : arguments);\n                                        });\n                                    }),\n                                        (i = null);\n                                })\n                                .promise();\n                        },\n                        then: function (t, n, r) {\n                            var u = 0;\n                            function l(i, o, a, s) {\n                                return function () {\n                                    var n = this,\n                                        r = arguments,\n                                        e = function () {\n                                            var e, t;\n                                            if (!(i < u)) {\n                                                if ((e = a.apply(n, r)) === o.promise()) throw new TypeError(\"Thenable self-resolution\");\n                                                (t = e && (\"object\" == typeof e || \"function\" == typeof e) && e.then),\n                                                    m(t)\n                                                        ? s\n                                                            ? t.call(e, l(u, o, M, s), l(u, o, I, s))\n                                                            : (u++, t.call(e, l(u, o, M, s), l(u, o, I, s), l(u, o, M, o.notifyWith)))\n                                                        : (a !== M && ((n = void 0), (r = [e])), (s || o.resolveWith)(n, r));\n                                            }\n                                        },\n                                        t = s\n                                            ? e\n                                            : function () {\n                                                  try {\n                                                      e();\n                                                  } catch (e) {\n                                                      k.Deferred.exceptionHook && k.Deferred.exceptionHook(e, t.stackTrace), u <= i + 1 && (a !== I && ((n = void 0), (r = [e])), o.rejectWith(n, r));\n                                                  }\n                                              };\n                                    i ? t() : (k.Deferred.getStackHook && (t.stackTrace = k.Deferred.getStackHook()), C.setTimeout(t));\n                                };\n                            }\n                            return k\n                                .Deferred(function (e) {\n                                    o[0][3].add(l(0, e, m(r) ? r : M, e.notifyWith)), o[1][3].add(l(0, e, m(t) ? t : M)), o[2][3].add(l(0, e, m(n) ? n : I));\n                                })\n                                .promise();\n                        },\n                        promise: function (e) {\n                            return null != e ? k.extend(e, a) : a;\n                        },\n                    },\n                    s = {};\n                return (\n                    k.each(o, function (e, t) {\n                        var n = t[2],\n                            r = t[5];\n                        (a[t[1]] = n.add),\n                            r &&\n                                n.add(\n                                    function () {\n                                        i = r;\n                                    },\n                                    o[3 - e][2].disable,\n                                    o[3 - e][3].disable,\n                                    o[0][2].lock,\n                                    o[0][3].lock\n                                ),\n                            n.add(t[3].fire),\n                            (s[t[0]] = function () {\n                                return s[t[0] + \"With\"](this === s ? void 0 : this, arguments), this;\n                            }),\n                            (s[t[0] + \"With\"] = n.fireWith);\n                    }),\n                    a.promise(s),\n                    e && e.call(s, s),\n                    s\n                );\n            },\n            when: function (e) {\n                var n = arguments.length,\n                    t = n,\n                    r = Array(t),\n                    i = s.call(arguments),\n                    o = k.Deferred(),\n                    a = function (t) {\n                        return function (e) {\n                            (r[t] = this), (i[t] = 1 < arguments.length ? s.call(arguments) : e), --n || o.resolveWith(r, i);\n                        };\n                    };\n                if (n <= 1 && (W(e, o.done(a(t)).resolve, o.reject, !n), \"pending\" === o.state() || m(i[t] && i[t].then))) return o.then();\n                while (t--) W(i[t], a(t), o.reject);\n                return o.promise();\n            },\n        });\n    var $ = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n    (k.Deferred.exceptionHook = function (e, t) {\n        C.console && C.console.warn && e && $.test(e.name) && C.console.warn(\"jQuery.Deferred exception: \" + e.message, e.stack, t);\n    }),\n        (k.readyException = function (e) {\n            C.setTimeout(function () {\n                throw e;\n            });\n        });\n    var F = k.Deferred();\n    function B() {\n        E.removeEventListener(\"DOMContentLoaded\", B), C.removeEventListener(\"load\", B), k.ready();\n    }\n    (k.fn.ready = function (e) {\n        return (\n            F.then(e)[\"catch\"](function (e) {\n                k.readyException(e);\n            }),\n            this\n        );\n    }),\n        k.extend({\n            isReady: !1,\n            readyWait: 1,\n            ready: function (e) {\n                (!0 === e ? --k.readyWait : k.isReady) || ((k.isReady = !0) !== e && 0 < --k.readyWait) || F.resolveWith(E, [k]);\n            },\n        }),\n        (k.ready.then = F.then),\n        \"complete\" === E.readyState || (\"loading\" !== E.readyState && !E.documentElement.doScroll) ? C.setTimeout(k.ready) : (E.addEventListener(\"DOMContentLoaded\", B), C.addEventListener(\"load\", B));\n    var _ = function (e, t, n, r, i, o, a) {\n            var s = 0,\n                u = e.length,\n                l = null == n;\n            if (\"object\" === w(n)) for (s in ((i = !0), n)) _(e, t, s, n[s], !0, o, a);\n            else if (\n                void 0 !== r &&\n                ((i = !0),\n                m(r) || (a = !0),\n                l &&\n                    (a\n                        ? (t.call(e, r), (t = null))\n                        : ((l = t),\n                          (t = function (e, t, n) {\n                              return l.call(k(e), n);\n                          }))),\n                t)\n            )\n                for (; s < u; s++) t(e[s], n, a ? r : r.call(e[s], s, t(e[s], n)));\n            return i ? e : l ? t.call(e) : u ? t(e[0], n) : o;\n        },\n        z = /^-ms-/,\n        U = /-([a-z])/g;\n    function X(e, t) {\n        return t.toUpperCase();\n    }\n    function V(e) {\n        return e.replace(z, \"ms-\").replace(U, X);\n    }\n    var G = function (e) {\n        return 1 === e.nodeType || 9 === e.nodeType || !+e.nodeType;\n    };\n    function Y() {\n        this.expando = k.expando + Y.uid++;\n    }\n    (Y.uid = 1),\n        (Y.prototype = {\n            cache: function (e) {\n                var t = e[this.expando];\n                return t || ((t = {}), G(e) && (e.nodeType ? (e[this.expando] = t) : Object.defineProperty(e, this.expando, { value: t, configurable: !0 }))), t;\n            },\n            set: function (e, t, n) {\n                var r,\n                    i = this.cache(e);\n                if (\"string\" == typeof t) i[V(t)] = n;\n                else for (r in t) i[V(r)] = t[r];\n                return i;\n            },\n            get: function (e, t) {\n                return void 0 === t ? this.cache(e) : e[this.expando] && e[this.expando][V(t)];\n            },\n            access: function (e, t, n) {\n                return void 0 === t || (t && \"string\" == typeof t && void 0 === n) ? this.get(e, t) : (this.set(e, t, n), void 0 !== n ? n : t);\n            },\n            remove: function (e, t) {\n                var n,\n                    r = e[this.expando];\n                if (void 0 !== r) {\n                    if (void 0 !== t) {\n                        n = (t = Array.isArray(t) ? t.map(V) : (t = V(t)) in r ? [t] : t.match(R) || []).length;\n                        while (n--) delete r[t[n]];\n                    }\n                    (void 0 === t || k.isEmptyObject(r)) && (e.nodeType ? (e[this.expando] = void 0) : delete e[this.expando]);\n                }\n            },\n            hasData: function (e) {\n                var t = e[this.expando];\n                return void 0 !== t && !k.isEmptyObject(t);\n            },\n        });\n    var Q = new Y(),\n        J = new Y(),\n        K = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n        Z = /[A-Z]/g;\n    function ee(e, t, n) {\n        var r, i;\n        if (void 0 === n && 1 === e.nodeType)\n            if (((r = \"data-\" + t.replace(Z, \"-$&\").toLowerCase()), \"string\" == typeof (n = e.getAttribute(r)))) {\n                try {\n                    n = \"true\" === (i = n) || (\"false\" !== i && (\"null\" === i ? null : i === +i + \"\" ? +i : K.test(i) ? JSON.parse(i) : i));\n                } catch (e) {}\n                J.set(e, t, n);\n            } else n = void 0;\n        return n;\n    }\n    k.extend({\n        hasData: function (e) {\n            return J.hasData(e) || Q.hasData(e);\n        },\n        data: function (e, t, n) {\n            return J.access(e, t, n);\n        },\n        removeData: function (e, t) {\n            J.remove(e, t);\n        },\n        _data: function (e, t, n) {\n            return Q.access(e, t, n);\n        },\n        _removeData: function (e, t) {\n            Q.remove(e, t);\n        },\n    }),\n        k.fn.extend({\n            data: function (n, e) {\n                var t,\n                    r,\n                    i,\n                    o = this[0],\n                    a = o && o.attributes;\n                if (void 0 === n) {\n                    if (this.length && ((i = J.get(o)), 1 === o.nodeType && !Q.get(o, \"hasDataAttrs\"))) {\n                        t = a.length;\n                        while (t--) a[t] && 0 === (r = a[t].name).indexOf(\"data-\") && ((r = V(r.slice(5))), ee(o, r, i[r]));\n                        Q.set(o, \"hasDataAttrs\", !0);\n                    }\n                    return i;\n                }\n                return \"object\" == typeof n\n                    ? this.each(function () {\n                          J.set(this, n);\n                      })\n                    : _(\n                          this,\n                          function (e) {\n                              var t;\n                              if (o && void 0 === e) return void 0 !== (t = J.get(o, n)) ? t : void 0 !== (t = ee(o, n)) ? t : void 0;\n                              this.each(function () {\n                                  J.set(this, n, e);\n                              });\n                          },\n                          null,\n                          e,\n                          1 < arguments.length,\n                          null,\n                          !0\n                      );\n            },\n            removeData: function (e) {\n                return this.each(function () {\n                    J.remove(this, e);\n                });\n            },\n        }),\n        k.extend({\n            queue: function (e, t, n) {\n                var r;\n                if (e) return (t = (t || \"fx\") + \"queue\"), (r = Q.get(e, t)), n && (!r || Array.isArray(n) ? (r = Q.access(e, t, k.makeArray(n))) : r.push(n)), r || [];\n            },\n            dequeue: function (e, t) {\n                t = t || \"fx\";\n                var n = k.queue(e, t),\n                    r = n.length,\n                    i = n.shift(),\n                    o = k._queueHooks(e, t);\n                \"inprogress\" === i && ((i = n.shift()), r--),\n                    i &&\n                        (\"fx\" === t && n.unshift(\"inprogress\"),\n                        delete o.stop,\n                        i.call(\n                            e,\n                            function () {\n                                k.dequeue(e, t);\n                            },\n                            o\n                        )),\n                    !r && o && o.empty.fire();\n            },\n            _queueHooks: function (e, t) {\n                var n = t + \"queueHooks\";\n                return (\n                    Q.get(e, n) ||\n                    Q.access(e, n, {\n                        empty: k.Callbacks(\"once memory\").add(function () {\n                            Q.remove(e, [t + \"queue\", n]);\n                        }),\n                    })\n                );\n            },\n        }),\n        k.fn.extend({\n            queue: function (t, n) {\n                var e = 2;\n                return (\n                    \"string\" != typeof t && ((n = t), (t = \"fx\"), e--),\n                    arguments.length < e\n                        ? k.queue(this[0], t)\n                        : void 0 === n\n                        ? this\n                        : this.each(function () {\n                              var e = k.queue(this, t, n);\n                              k._queueHooks(this, t), \"fx\" === t && \"inprogress\" !== e[0] && k.dequeue(this, t);\n                          })\n                );\n            },\n            dequeue: function (e) {\n                return this.each(function () {\n                    k.dequeue(this, e);\n                });\n            },\n            clearQueue: function (e) {\n                return this.queue(e || \"fx\", []);\n            },\n            promise: function (e, t) {\n                var n,\n                    r = 1,\n                    i = k.Deferred(),\n                    o = this,\n                    a = this.length,\n                    s = function () {\n                        --r || i.resolveWith(o, [o]);\n                    };\n                \"string\" != typeof e && ((t = e), (e = void 0)), (e = e || \"fx\");\n                while (a--) (n = Q.get(o[a], e + \"queueHooks\")) && n.empty && (r++, n.empty.add(s));\n                return s(), i.promise(t);\n            },\n        });\n    var te = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,\n        ne = new RegExp(\"^(?:([+-])=|)(\" + te + \")([a-z%]*)$\", \"i\"),\n        re = [\"Top\", \"Right\", \"Bottom\", \"Left\"],\n        ie = E.documentElement,\n        oe = function (e) {\n            return k.contains(e.ownerDocument, e);\n        },\n        ae = { composed: !0 };\n    ie.getRootNode &&\n        (oe = function (e) {\n            return k.contains(e.ownerDocument, e) || e.getRootNode(ae) === e.ownerDocument;\n        });\n    var se = function (e, t) {\n            return \"none\" === (e = t || e).style.display || (\"\" === e.style.display && oe(e) && \"none\" === k.css(e, \"display\"));\n        },\n        ue = function (e, t, n, r) {\n            var i,\n                o,\n                a = {};\n            for (o in t) (a[o] = e.style[o]), (e.style[o] = t[o]);\n            for (o in ((i = n.apply(e, r || [])), t)) e.style[o] = a[o];\n            return i;\n        };\n    function le(e, t, n, r) {\n        var i,\n            o,\n            a = 20,\n            s = r\n                ? function () {\n                      return r.cur();\n                  }\n                : function () {\n                      return k.css(e, t, \"\");\n                  },\n            u = s(),\n            l = (n && n[3]) || (k.cssNumber[t] ? \"\" : \"px\"),\n            c = e.nodeType && (k.cssNumber[t] || (\"px\" !== l && +u)) && ne.exec(k.css(e, t));\n        if (c && c[3] !== l) {\n            (u /= 2), (l = l || c[3]), (c = +u || 1);\n            while (a--) k.style(e, t, c + l), (1 - o) * (1 - (o = s() / u || 0.5)) <= 0 && (a = 0), (c /= o);\n            (c *= 2), k.style(e, t, c + l), (n = n || []);\n        }\n        return n && ((c = +c || +u || 0), (i = n[1] ? c + (n[1] + 1) * n[2] : +n[2]), r && ((r.unit = l), (r.start = c), (r.end = i))), i;\n    }\n    var ce = {};\n    function fe(e, t) {\n        for (var n, r, i, o, a, s, u, l = [], c = 0, f = e.length; c < f; c++)\n            (r = e[c]).style &&\n                ((n = r.style.display),\n                t\n                    ? (\"none\" === n && ((l[c] = Q.get(r, \"display\") || null), l[c] || (r.style.display = \"\")),\n                      \"\" === r.style.display &&\n                          se(r) &&\n                          (l[c] =\n                              ((u = a = o = void 0),\n                              (a = (i = r).ownerDocument),\n                              (s = i.nodeName),\n                              (u = ce[s]) || ((o = a.body.appendChild(a.createElement(s))), (u = k.css(o, \"display\")), o.parentNode.removeChild(o), \"none\" === u && (u = \"block\"), (ce[s] = u)))))\n                    : \"none\" !== n && ((l[c] = \"none\"), Q.set(r, \"display\", n)));\n        for (c = 0; c < f; c++) null != l[c] && (e[c].style.display = l[c]);\n        return e;\n    }\n    k.fn.extend({\n        show: function () {\n            return fe(this, !0);\n        },\n        hide: function () {\n            return fe(this);\n        },\n        toggle: function (e) {\n            return \"boolean\" == typeof e\n                ? e\n                    ? this.show()\n                    : this.hide()\n                : this.each(function () {\n                      se(this) ? k(this).show() : k(this).hide();\n                  });\n        },\n    });\n    var pe = /^(?:checkbox|radio)$/i,\n        de = /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i,\n        he = /^$|^module$|\\/(?:java|ecma)script/i,\n        ge = {\n            option: [1, \"<select multiple='multiple'>\", \"</select>\"],\n            thead: [1, \"<table>\", \"</table>\"],\n            col: [2, \"<table><colgroup>\", \"</colgroup></table>\"],\n            tr: [2, \"<table><tbody>\", \"</tbody></table>\"],\n            td: [3, \"<table><tbody><tr>\", \"</tr></tbody></table>\"],\n            _default: [0, \"\", \"\"],\n        };\n    function ve(e, t) {\n        var n;\n        return (n = \"undefined\" != typeof e.getElementsByTagName ? e.getElementsByTagName(t || \"*\") : \"undefined\" != typeof e.querySelectorAll ? e.querySelectorAll(t || \"*\") : []), void 0 === t || (t && A(e, t)) ? k.merge([e], n) : n;\n    }\n    function ye(e, t) {\n        for (var n = 0, r = e.length; n < r; n++) Q.set(e[n], \"globalEval\", !t || Q.get(t[n], \"globalEval\"));\n    }\n    (ge.optgroup = ge.option), (ge.tbody = ge.tfoot = ge.colgroup = ge.caption = ge.thead), (ge.th = ge.td);\n    var me,\n        xe,\n        be = /<|&#?\\w+;/;\n    function we(e, t, n, r, i) {\n        for (var o, a, s, u, l, c, f = t.createDocumentFragment(), p = [], d = 0, h = e.length; d < h; d++)\n            if ((o = e[d]) || 0 === o)\n                if (\"object\" === w(o)) k.merge(p, o.nodeType ? [o] : o);\n                else if (be.test(o)) {\n                    (a = a || f.appendChild(t.createElement(\"div\"))), (s = (de.exec(o) || [\"\", \"\"])[1].toLowerCase()), (u = ge[s] || ge._default), (a.innerHTML = u[1] + k.htmlPrefilter(o) + u[2]), (c = u[0]);\n                    while (c--) a = a.lastChild;\n                    k.merge(p, a.childNodes), ((a = f.firstChild).textContent = \"\");\n                } else p.push(t.createTextNode(o));\n        (f.textContent = \"\"), (d = 0);\n        while ((o = p[d++]))\n            if (r && -1 < k.inArray(o, r)) i && i.push(o);\n            else if (((l = oe(o)), (a = ve(f.appendChild(o), \"script\")), l && ye(a), n)) {\n                c = 0;\n                while ((o = a[c++])) he.test(o.type || \"\") && n.push(o);\n            }\n        return f;\n    }\n    (me = E.createDocumentFragment().appendChild(E.createElement(\"div\"))),\n        (xe = E.createElement(\"input\")).setAttribute(\"type\", \"radio\"),\n        xe.setAttribute(\"checked\", \"checked\"),\n        xe.setAttribute(\"name\", \"t\"),\n        me.appendChild(xe),\n        (y.checkClone = me.cloneNode(!0).cloneNode(!0).lastChild.checked),\n        (me.innerHTML = \"<textarea>x</textarea>\"),\n        (y.noCloneChecked = !!me.cloneNode(!0).lastChild.defaultValue);\n    var Te = /^key/,\n        Ce = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n        Ee = /^([^.]*)(?:\\.(.+)|)/;\n    function ke() {\n        return !0;\n    }\n    function Se() {\n        return !1;\n    }\n    function Ne(e, t) {\n        return (\n            (e ===\n                (function () {\n                    try {\n                        return E.activeElement;\n                    } catch (e) {}\n                })()) ==\n            (\"focus\" === t)\n        );\n    }\n    function Ae(e, t, n, r, i, o) {\n        var a, s;\n        if (\"object\" == typeof t) {\n            for (s in (\"string\" != typeof n && ((r = r || n), (n = void 0)), t)) Ae(e, s, n, r, t[s], o);\n            return e;\n        }\n        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 = Se;\n        else if (!i) return e;\n        return (\n            1 === o &&\n                ((a = i),\n                ((i = function (e) {\n                    return k().off(e), a.apply(this, arguments);\n                }).guid = a.guid || (a.guid = k.guid++))),\n            e.each(function () {\n                k.event.add(this, t, i, r, n);\n            })\n        );\n    }\n    function De(e, i, o) {\n        o\n            ? (Q.set(e, i, !1),\n              k.event.add(e, i, {\n                  namespace: !1,\n                  handler: function (e) {\n                      var t,\n                          n,\n                          r = Q.get(this, i);\n                      if (1 & e.isTrigger && this[i]) {\n                          if (r.length) (k.event.special[i] || {}).delegateType && e.stopPropagation();\n                          else if (((r = s.call(arguments)), Q.set(this, i, r), (t = o(this, i)), this[i](), r !== (n = Q.get(this, i)) || t ? Q.set(this, i, !1) : (n = {}), r !== n))\n                              return e.stopImmediatePropagation(), e.preventDefault(), n.value;\n                      } else r.length && (Q.set(this, i, { value: k.event.trigger(k.extend(r[0], k.Event.prototype), r.slice(1), this) }), e.stopImmediatePropagation());\n                  },\n              }))\n            : void 0 === Q.get(e, i) && k.event.add(e, i, ke);\n    }\n    (k.event = {\n        global: {},\n        add: function (t, e, n, r, i) {\n            var o,\n                a,\n                s,\n                u,\n                l,\n                c,\n                f,\n                p,\n                d,\n                h,\n                g,\n                v = Q.get(t);\n            if (v) {\n                n.handler && ((n = (o = n).handler), (i = o.selector)),\n                    i && k.find.matchesSelector(ie, i),\n                    n.guid || (n.guid = k.guid++),\n                    (u = v.events) || (u = v.events = {}),\n                    (a = v.handle) ||\n                        (a = v.handle = function (e) {\n                            return \"undefined\" != typeof k && k.event.triggered !== e.type ? k.event.dispatch.apply(t, arguments) : void 0;\n                        }),\n                    (l = (e = (e || \"\").match(R) || [\"\"]).length);\n                while (l--)\n                    (d = g = (s = Ee.exec(e[l]) || [])[1]),\n                        (h = (s[2] || \"\").split(\".\").sort()),\n                        d &&\n                            ((f = k.event.special[d] || {}),\n                            (d = (i ? f.delegateType : f.bindType) || d),\n                            (f = k.event.special[d] || {}),\n                            (c = k.extend({ type: d, origType: g, data: r, handler: n, guid: n.guid, selector: i, needsContext: i && k.expr.match.needsContext.test(i), namespace: h.join(\".\") }, o)),\n                            (p = u[d]) || (((p = u[d] = []).delegateCount = 0), (f.setup && !1 !== f.setup.call(t, r, h, a)) || (t.addEventListener && t.addEventListener(d, a))),\n                            f.add && (f.add.call(t, c), c.handler.guid || (c.handler.guid = n.guid)),\n                            i ? p.splice(p.delegateCount++, 0, c) : p.push(c),\n                            (k.event.global[d] = !0));\n            }\n        },\n        remove: function (e, t, n, r, i) {\n            var o,\n                a,\n                s,\n                u,\n                l,\n                c,\n                f,\n                p,\n                d,\n                h,\n                g,\n                v = Q.hasData(e) && Q.get(e);\n            if (v && (u = v.events)) {\n                l = (t = (t || \"\").match(R) || [\"\"]).length;\n                while (l--)\n                    if (((d = g = (s = Ee.exec(t[l]) || [])[1]), (h = (s[2] || \"\").split(\".\").sort()), d)) {\n                        (f = k.event.special[d] || {}), (p = u[(d = (r ? f.delegateType : f.bindType) || d)] || []), (s = s[2] && new RegExp(\"(^|\\\\.)\" + h.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\")), (a = o = p.length);\n                        while (o--)\n                            (c = p[o]),\n                                (!i && g !== c.origType) ||\n                                    (n && n.guid !== c.guid) ||\n                                    (s && !s.test(c.namespace)) ||\n                                    (r && r !== c.selector && (\"**\" !== r || !c.selector)) ||\n                                    (p.splice(o, 1), c.selector && p.delegateCount--, f.remove && f.remove.call(e, c));\n                        a && !p.length && ((f.teardown && !1 !== f.teardown.call(e, h, v.handle)) || k.removeEvent(e, d, v.handle), delete u[d]);\n                    } else for (d in u) k.event.remove(e, d + t[l], n, r, !0);\n                k.isEmptyObject(u) && Q.remove(e, \"handle events\");\n            }\n        },\n        dispatch: function (e) {\n            var t,\n                n,\n                r,\n                i,\n                o,\n                a,\n                s = k.event.fix(e),\n                u = new Array(arguments.length),\n                l = (Q.get(this, \"events\") || {})[s.type] || [],\n                c = k.event.special[s.type] || {};\n            for (u[0] = s, t = 1; t < arguments.length; t++) u[t] = arguments[t];\n            if (((s.delegateTarget = this), !c.preDispatch || !1 !== c.preDispatch.call(this, s))) {\n                (a = k.event.handlers.call(this, s, l)), (t = 0);\n                while ((i = a[t++]) && !s.isPropagationStopped()) {\n                    (s.currentTarget = i.elem), (n = 0);\n                    while ((o = i.handlers[n++]) && !s.isImmediatePropagationStopped())\n                        (s.rnamespace && !1 !== o.namespace && !s.rnamespace.test(o.namespace)) ||\n                            ((s.handleObj = o), (s.data = o.data), void 0 !== (r = ((k.event.special[o.origType] || {}).handle || o.handler).apply(i.elem, u)) && !1 === (s.result = r) && (s.preventDefault(), s.stopPropagation()));\n                }\n                return c.postDispatch && c.postDispatch.call(this, s), s.result;\n            }\n        },\n        handlers: function (e, t) {\n            var n,\n                r,\n                i,\n                o,\n                a,\n                s = [],\n                u = t.delegateCount,\n                l = e.target;\n            if (u && l.nodeType && !(\"click\" === e.type && 1 <= e.button))\n                for (; l !== this; l = l.parentNode || this)\n                    if (1 === l.nodeType && (\"click\" !== e.type || !0 !== l.disabled)) {\n                        for (o = [], a = {}, n = 0; n < u; n++) void 0 === a[(i = (r = t[n]).selector + \" \")] && (a[i] = r.needsContext ? -1 < k(i, this).index(l) : k.find(i, this, null, [l]).length), a[i] && o.push(r);\n                        o.length && s.push({ elem: l, handlers: o });\n                    }\n            return (l = this), u < t.length && s.push({ elem: l, handlers: t.slice(u) }), s;\n        },\n        addProp: function (t, e) {\n            Object.defineProperty(k.Event.prototype, t, {\n                enumerable: !0,\n                configurable: !0,\n                get: m(e)\n                    ? function () {\n                          if (this.originalEvent) return e(this.originalEvent);\n                      }\n                    : function () {\n                          if (this.originalEvent) return this.originalEvent[t];\n                      },\n                set: function (e) {\n                    Object.defineProperty(this, t, { enumerable: !0, configurable: !0, writable: !0, value: e });\n                },\n            });\n        },\n        fix: function (e) {\n            return e[k.expando] ? e : new k.Event(e);\n        },\n        special: {\n            load: { noBubble: !0 },\n            click: {\n                setup: function (e) {\n                    var t = this || e;\n                    return pe.test(t.type) && t.click && A(t, \"input\") && De(t, \"click\", ke), !1;\n                },\n                trigger: function (e) {\n                    var t = this || e;\n                    return pe.test(t.type) && t.click && A(t, \"input\") && De(t, \"click\"), !0;\n                },\n                _default: function (e) {\n                    var t = e.target;\n                    return (pe.test(t.type) && t.click && A(t, \"input\") && Q.get(t, \"click\")) || A(t, \"a\");\n                },\n            },\n            beforeunload: {\n                postDispatch: function (e) {\n                    void 0 !== e.result && e.originalEvent && (e.originalEvent.returnValue = e.result);\n                },\n            },\n        },\n    }),\n        (k.removeEvent = function (e, t, n) {\n            e.removeEventListener && e.removeEventListener(t, n);\n        }),\n        (k.Event = function (e, t) {\n            if (!(this instanceof k.Event)) return new k.Event(e, t);\n            e && e.type\n                ? ((this.originalEvent = e),\n                  (this.type = e.type),\n                  (this.isDefaultPrevented = e.defaultPrevented || (void 0 === e.defaultPrevented && !1 === e.returnValue) ? ke : Se),\n                  (this.target = e.target && 3 === e.target.nodeType ? e.target.parentNode : e.target),\n                  (this.currentTarget = e.currentTarget),\n                  (this.relatedTarget = e.relatedTarget))\n                : (this.type = e),\n                t && k.extend(this, t),\n                (this.timeStamp = (e && e.timeStamp) || Date.now()),\n                (this[k.expando] = !0);\n        }),\n        (k.Event.prototype = {\n            constructor: k.Event,\n            isDefaultPrevented: Se,\n            isPropagationStopped: Se,\n            isImmediatePropagationStopped: Se,\n            isSimulated: !1,\n            preventDefault: function () {\n                var e = this.originalEvent;\n                (this.isDefaultPrevented = ke), e && !this.isSimulated && e.preventDefault();\n            },\n            stopPropagation: function () {\n                var e = this.originalEvent;\n                (this.isPropagationStopped = ke), e && !this.isSimulated && e.stopPropagation();\n            },\n            stopImmediatePropagation: function () {\n                var e = this.originalEvent;\n                (this.isImmediatePropagationStopped = ke), e && !this.isSimulated && e.stopImmediatePropagation(), this.stopPropagation();\n            },\n        }),\n        k.each(\n            {\n                altKey: !0,\n                bubbles: !0,\n                cancelable: !0,\n                changedTouches: !0,\n                ctrlKey: !0,\n                detail: !0,\n                eventPhase: !0,\n                metaKey: !0,\n                pageX: !0,\n                pageY: !0,\n                shiftKey: !0,\n                view: !0,\n                char: !0,\n                code: !0,\n                charCode: !0,\n                key: !0,\n                keyCode: !0,\n                button: !0,\n                buttons: !0,\n                clientX: !0,\n                clientY: !0,\n                offsetX: !0,\n                offsetY: !0,\n                pointerId: !0,\n                pointerType: !0,\n                screenX: !0,\n                screenY: !0,\n                targetTouches: !0,\n                toElement: !0,\n                touches: !0,\n                which: function (e) {\n                    var t = e.button;\n                    return null == e.which && Te.test(e.type) ? (null != e.charCode ? e.charCode : e.keyCode) : !e.which && void 0 !== t && Ce.test(e.type) ? (1 & t ? 1 : 2 & t ? 3 : 4 & t ? 2 : 0) : e.which;\n                },\n            },\n            k.event.addProp\n        ),\n        k.each({ focus: \"focusin\", blur: \"focusout\" }, function (e, t) {\n            k.event.special[e] = {\n                setup: function () {\n                    return De(this, e, Ne), !1;\n                },\n                trigger: function () {\n                    return De(this, e), !0;\n                },\n                delegateType: t,\n            };\n        }),\n        k.each({ mouseenter: \"mouseover\", mouseleave: \"mouseout\", pointerenter: \"pointerover\", pointerleave: \"pointerout\" }, function (e, i) {\n            k.event.special[e] = {\n                delegateType: i,\n                bindType: i,\n                handle: function (e) {\n                    var t,\n                        n = e.relatedTarget,\n                        r = e.handleObj;\n                    return (n && (n === this || k.contains(this, n))) || ((e.type = r.origType), (t = r.handler.apply(this, arguments)), (e.type = i)), t;\n                },\n            };\n        }),\n        k.fn.extend({\n            on: function (e, t, n, r) {\n                return Ae(this, e, t, n, r);\n            },\n            one: function (e, t, n, r) {\n                return Ae(this, e, t, n, r, 1);\n            },\n            off: function (e, t, n) {\n                var r, i;\n                if (e && e.preventDefault && e.handleObj) return (r = e.handleObj), k(e.delegateTarget).off(r.namespace ? r.origType + \".\" + r.namespace : r.origType, r.selector, r.handler), this;\n                if (\"object\" == typeof e) {\n                    for (i in e) this.off(i, t, e[i]);\n                    return this;\n                }\n                return (\n                    (!1 !== t && \"function\" != typeof t) || ((n = t), (t = void 0)),\n                    !1 === n && (n = Se),\n                    this.each(function () {\n                        k.event.remove(this, e, n, t);\n                    })\n                );\n            },\n        });\n    var je = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,\n        qe = /<script|<style|<link/i,\n        Le = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n        He = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;\n    function Oe(e, t) {\n        return (A(e, \"table\") && A(11 !== t.nodeType ? t : t.firstChild, \"tr\") && k(e).children(\"tbody\")[0]) || e;\n    }\n    function Pe(e) {\n        return (e.type = (null !== e.getAttribute(\"type\")) + \"/\" + e.type), e;\n    }\n    function Re(e) {\n        return \"true/\" === (e.type || \"\").slice(0, 5) ? (e.type = e.type.slice(5)) : e.removeAttribute(\"type\"), e;\n    }\n    function Me(e, t) {\n        var n, r, i, o, a, s, u, l;\n        if (1 === t.nodeType) {\n            if (Q.hasData(e) && ((o = Q.access(e)), (a = Q.set(t, o)), (l = o.events))) for (i in (delete a.handle, (a.events = {}), l)) for (n = 0, r = l[i].length; n < r; n++) k.event.add(t, i, l[i][n]);\n            J.hasData(e) && ((s = J.access(e)), (u = k.extend({}, s)), J.set(t, u));\n        }\n    }\n    function Ie(n, r, i, o) {\n        r = g.apply([], r);\n        var e,\n            t,\n            a,\n            s,\n            u,\n            l,\n            c = 0,\n            f = n.length,\n            p = f - 1,\n            d = r[0],\n            h = m(d);\n        if (h || (1 < f && \"string\" == typeof d && !y.checkClone && Le.test(d)))\n            return n.each(function (e) {\n                var t = n.eq(e);\n                h && (r[0] = d.call(this, e, t.html())), Ie(t, r, i, o);\n            });\n        if (f && ((t = (e = we(r, n[0].ownerDocument, !1, n, o)).firstChild), 1 === e.childNodes.length && (e = t), t || o)) {\n            for (s = (a = k.map(ve(e, \"script\"), Pe)).length; c < f; c++) (u = e), c !== p && ((u = k.clone(u, !0, !0)), s && k.merge(a, ve(u, \"script\"))), i.call(n[c], u, c);\n            if (s)\n                for (l = a[a.length - 1].ownerDocument, k.map(a, Re), c = 0; c < s; c++)\n                    (u = a[c]),\n                        he.test(u.type || \"\") &&\n                            !Q.access(u, \"globalEval\") &&\n                            k.contains(l, u) &&\n                            (u.src && \"module\" !== (u.type || \"\").toLowerCase() ? k._evalUrl && !u.noModule && k._evalUrl(u.src, { nonce: u.nonce || u.getAttribute(\"nonce\") }) : b(u.textContent.replace(He, \"\"), u, l));\n        }\n        return n;\n    }\n    function We(e, t, n) {\n        for (var r, i = t ? k.filter(t, e) : e, o = 0; null != (r = i[o]); o++) n || 1 !== r.nodeType || k.cleanData(ve(r)), r.parentNode && (n && oe(r) && ye(ve(r, \"script\")), r.parentNode.removeChild(r));\n        return e;\n    }\n    k.extend({\n        htmlPrefilter: function (e) {\n            return e.replace(je, \"<$1></$2>\");\n        },\n        clone: function (e, t, n) {\n            var r,\n                i,\n                o,\n                a,\n                s,\n                u,\n                l,\n                c = e.cloneNode(!0),\n                f = oe(e);\n            if (!(y.noCloneChecked || (1 !== e.nodeType && 11 !== e.nodeType) || k.isXMLDoc(e)))\n                for (a = ve(c), r = 0, i = (o = ve(e)).length; r < i; r++)\n                    (s = o[r]), (u = a[r]), void 0, \"input\" === (l = u.nodeName.toLowerCase()) && pe.test(s.type) ? (u.checked = s.checked) : (\"input\" !== l && \"textarea\" !== l) || (u.defaultValue = s.defaultValue);\n            if (t)\n                if (n) for (o = o || ve(e), a = a || ve(c), r = 0, i = o.length; r < i; r++) Me(o[r], a[r]);\n                else Me(e, c);\n            return 0 < (a = ve(c, \"script\")).length && ye(a, !f && ve(e, \"script\")), c;\n        },\n        cleanData: function (e) {\n            for (var t, n, r, i = k.event.special, o = 0; void 0 !== (n = e[o]); o++)\n                if (G(n)) {\n                    if ((t = n[Q.expando])) {\n                        if (t.events) for (r in t.events) i[r] ? k.event.remove(n, r) : k.removeEvent(n, r, t.handle);\n                        n[Q.expando] = void 0;\n                    }\n                    n[J.expando] && (n[J.expando] = void 0);\n                }\n        },\n    }),\n        k.fn.extend({\n            detach: function (e) {\n                return We(this, e, !0);\n            },\n            remove: function (e) {\n                return We(this, e);\n            },\n            text: function (e) {\n                return _(\n                    this,\n                    function (e) {\n                        return void 0 === e\n                            ? k.text(this)\n                            : this.empty().each(function () {\n                                  (1 !== this.nodeType && 11 !== this.nodeType && 9 !== this.nodeType) || (this.textContent = e);\n                              });\n                    },\n                    null,\n                    e,\n                    arguments.length\n                );\n            },\n            append: function () {\n                return Ie(this, arguments, function (e) {\n                    (1 !== this.nodeType && 11 !== this.nodeType && 9 !== this.nodeType) || Oe(this, e).appendChild(e);\n                });\n            },\n            prepend: function () {\n                return Ie(this, arguments, function (e) {\n                    if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) {\n                        var t = Oe(this, e);\n                        t.insertBefore(e, t.firstChild);\n                    }\n                });\n            },\n            before: function () {\n                return Ie(this, arguments, function (e) {\n                    this.parentNode && this.parentNode.insertBefore(e, this);\n                });\n            },\n            after: function () {\n                return Ie(this, arguments, function (e) {\n                    this.parentNode && this.parentNode.insertBefore(e, this.nextSibling);\n                });\n            },\n            empty: function () {\n                for (var e, t = 0; null != (e = this[t]); t++) 1 === e.nodeType && (k.cleanData(ve(e, !1)), (e.textContent = \"\"));\n                return this;\n            },\n            clone: function (e, t) {\n                return (\n                    (e = null != e && e),\n                    (t = null == t ? e : t),\n                    this.map(function () {\n                        return k.clone(this, e, t);\n                    })\n                );\n            },\n            html: function (e) {\n                return _(\n                    this,\n                    function (e) {\n                        var t = this[0] || {},\n                            n = 0,\n                            r = this.length;\n                        if (void 0 === e && 1 === t.nodeType) return t.innerHTML;\n                        if (\"string\" == typeof e && !qe.test(e) && !ge[(de.exec(e) || [\"\", \"\"])[1].toLowerCase()]) {\n                            e = k.htmlPrefilter(e);\n                            try {\n                                for (; n < r; n++) 1 === (t = this[n] || {}).nodeType && (k.cleanData(ve(t, !1)), (t.innerHTML = e));\n                                t = 0;\n                            } catch (e) {}\n                        }\n                        t && this.empty().append(e);\n                    },\n                    null,\n                    e,\n                    arguments.length\n                );\n            },\n            replaceWith: function () {\n                var n = [];\n                return Ie(\n                    this,\n                    arguments,\n                    function (e) {\n                        var t = this.parentNode;\n                        k.inArray(this, n) < 0 && (k.cleanData(ve(this)), t && t.replaceChild(e, this));\n                    },\n                    n\n                );\n            },\n        }),\n        k.each({ appendTo: \"append\", prependTo: \"prepend\", insertBefore: \"before\", insertAfter: \"after\", replaceAll: \"replaceWith\" }, function (e, a) {\n            k.fn[e] = function (e) {\n                for (var t, n = [], r = k(e), i = r.length - 1, o = 0; o <= i; o++) (t = o === i ? this : this.clone(!0)), k(r[o])[a](t), u.apply(n, t.get());\n                return this.pushStack(n);\n            };\n        });\n    var $e = new RegExp(\"^(\" + te + \")(?!px)[a-z%]+$\", \"i\"),\n        Fe = function (e) {\n            var t = e.ownerDocument.defaultView;\n            return (t && t.opener) || (t = C), t.getComputedStyle(e);\n        },\n        Be = new RegExp(re.join(\"|\"), \"i\");\n    function _e(e, t, n) {\n        var r,\n            i,\n            o,\n            a,\n            s = e.style;\n        return (\n            (n = n || Fe(e)) &&\n                (\"\" !== (a = n.getPropertyValue(t) || n[t]) || oe(e) || (a = k.style(e, t)),\n                !y.pixelBoxStyles() && $e.test(a) && Be.test(t) && ((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))),\n            void 0 !== a ? a + \"\" : a\n        );\n    }\n    function ze(e, t) {\n        return {\n            get: function () {\n                if (!e()) return (this.get = t).apply(this, arguments);\n                delete this.get;\n            },\n        };\n    }\n    !(function () {\n        function e() {\n            if (u) {\n                (s.style.cssText = \"position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0\"),\n                    (u.style.cssText = \"position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%\"),\n                    ie.appendChild(s).appendChild(u);\n                var e = C.getComputedStyle(u);\n                (n = \"1%\" !== e.top),\n                    (a = 12 === t(e.marginLeft)),\n                    (u.style.right = \"60%\"),\n                    (o = 36 === t(e.right)),\n                    (r = 36 === t(e.width)),\n                    (u.style.position = \"absolute\"),\n                    (i = 12 === t(u.offsetWidth / 3)),\n                    ie.removeChild(s),\n                    (u = null);\n            }\n        }\n        function t(e) {\n            return Math.round(parseFloat(e));\n        }\n        var n,\n            r,\n            i,\n            o,\n            a,\n            s = E.createElement(\"div\"),\n            u = E.createElement(\"div\");\n        u.style &&\n            ((u.style.backgroundClip = \"content-box\"),\n            (u.cloneNode(!0).style.backgroundClip = \"\"),\n            (y.clearCloneStyle = \"content-box\" === u.style.backgroundClip),\n            k.extend(y, {\n                boxSizingReliable: function () {\n                    return e(), r;\n                },\n                pixelBoxStyles: function () {\n                    return e(), o;\n                },\n                pixelPosition: function () {\n                    return e(), n;\n                },\n                reliableMarginLeft: function () {\n                    return e(), a;\n                },\n                scrollboxSize: function () {\n                    return e(), i;\n                },\n            }));\n    })();\n    var Ue = [\"Webkit\", \"Moz\", \"ms\"],\n        Xe = E.createElement(\"div\").style,\n        Ve = {};\n    function Ge(e) {\n        var t = k.cssProps[e] || Ve[e];\n        return (\n            t ||\n            (e in Xe\n                ? e\n                : (Ve[e] =\n                      (function (e) {\n                          var t = e[0].toUpperCase() + e.slice(1),\n                              n = Ue.length;\n                          while (n--) if ((e = Ue[n] + t) in Xe) return e;\n                      })(e) || e))\n        );\n    }\n    var Ye = /^(none|table(?!-c[ea]).+)/,\n        Qe = /^--/,\n        Je = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n        Ke = { letterSpacing: \"0\", fontWeight: \"400\" };\n    function Ze(e, t, n) {\n        var r = ne.exec(t);\n        return r ? Math.max(0, r[2] - (n || 0)) + (r[3] || \"px\") : t;\n    }\n    function et(e, t, n, r, i, o) {\n        var a = \"width\" === t ? 1 : 0,\n            s = 0,\n            u = 0;\n        if (n === (r ? \"border\" : \"content\")) return 0;\n        for (; a < 4; a += 2)\n            \"margin\" === n && (u += k.css(e, n + re[a], !0, i)),\n                r\n                    ? (\"content\" === n && (u -= k.css(e, \"padding\" + re[a], !0, i)), \"margin\" !== n && (u -= k.css(e, \"border\" + re[a] + \"Width\", !0, i)))\n                    : ((u += k.css(e, \"padding\" + re[a], !0, i)), \"padding\" !== n ? (u += k.css(e, \"border\" + re[a] + \"Width\", !0, i)) : (s += k.css(e, \"border\" + re[a] + \"Width\", !0, i)));\n        return !r && 0 <= o && (u += Math.max(0, Math.ceil(e[\"offset\" + t[0].toUpperCase() + t.slice(1)] - o - u - s - 0.5)) || 0), u;\n    }\n    function tt(e, t, n) {\n        var r = Fe(e),\n            i = (!y.boxSizingReliable() || n) && \"border-box\" === k.css(e, \"boxSizing\", !1, r),\n            o = i,\n            a = _e(e, t, r),\n            s = \"offset\" + t[0].toUpperCase() + t.slice(1);\n        if ($e.test(a)) {\n            if (!n) return a;\n            a = \"auto\";\n        }\n        return (\n            ((!y.boxSizingReliable() && i) || \"auto\" === a || (!parseFloat(a) && \"inline\" === k.css(e, \"display\", !1, r))) && e.getClientRects().length && ((i = \"border-box\" === k.css(e, \"boxSizing\", !1, r)), (o = s in e) && (a = e[s])),\n            (a = parseFloat(a) || 0) + et(e, t, n || (i ? \"border\" : \"content\"), o, r, a) + \"px\"\n        );\n    }\n    function nt(e, t, n, r, i) {\n        return new nt.prototype.init(e, t, n, r, i);\n    }\n    k.extend({\n        cssHooks: {\n            opacity: {\n                get: function (e, t) {\n                    if (t) {\n                        var n = _e(e, \"opacity\");\n                        return \"\" === n ? \"1\" : n;\n                    }\n                },\n            },\n        },\n        cssNumber: {\n            animationIterationCount: !0,\n            columnCount: !0,\n            fillOpacity: !0,\n            flexGrow: !0,\n            flexShrink: !0,\n            fontWeight: !0,\n            gridArea: !0,\n            gridColumn: !0,\n            gridColumnEnd: !0,\n            gridColumnStart: !0,\n            gridRow: !0,\n            gridRowEnd: !0,\n            gridRowStart: !0,\n            lineHeight: !0,\n            opacity: !0,\n            order: !0,\n            orphans: !0,\n            widows: !0,\n            zIndex: !0,\n            zoom: !0,\n        },\n        cssProps: {},\n        style: function (e, t, n, r) {\n            if (e && 3 !== e.nodeType && 8 !== e.nodeType && e.style) {\n                var i,\n                    o,\n                    a,\n                    s = V(t),\n                    u = Qe.test(t),\n                    l = e.style;\n                if ((u || (t = Ge(s)), (a = k.cssHooks[t] || k.cssHooks[s]), void 0 === n)) return a && \"get\" in a && void 0 !== (i = a.get(e, !1, r)) ? i : l[t];\n                \"string\" === (o = typeof n) && (i = ne.exec(n)) && i[1] && ((n = le(e, t, i)), (o = \"number\")),\n                    null != n &&\n                        n == n &&\n                        (\"number\" !== o || u || (n += (i && i[3]) || (k.cssNumber[s] ? \"\" : \"px\")),\n                        y.clearCloneStyle || \"\" !== n || 0 !== t.indexOf(\"background\") || (l[t] = \"inherit\"),\n                        (a && \"set\" in a && void 0 === (n = a.set(e, n, r))) || (u ? l.setProperty(t, n) : (l[t] = n)));\n            }\n        },\n        css: function (e, t, n, r) {\n            var i,\n                o,\n                a,\n                s = V(t);\n            return (\n                Qe.test(t) || (t = Ge(s)),\n                (a = k.cssHooks[t] || k.cssHooks[s]) && \"get\" in a && (i = a.get(e, !0, n)),\n                void 0 === i && (i = _e(e, t, r)),\n                \"normal\" === i && t in Ke && (i = Ke[t]),\n                \"\" === n || n ? ((o = parseFloat(i)), !0 === n || isFinite(o) ? o || 0 : i) : i\n            );\n        },\n    }),\n        k.each([\"height\", \"width\"], function (e, u) {\n            k.cssHooks[u] = {\n                get: function (e, t, n) {\n                    if (t)\n                        return !Ye.test(k.css(e, \"display\")) || (e.getClientRects().length && e.getBoundingClientRect().width)\n                            ? tt(e, u, n)\n                            : ue(e, Je, function () {\n                                  return tt(e, u, n);\n                              });\n                },\n                set: function (e, t, n) {\n                    var r,\n                        i = Fe(e),\n                        o = !y.scrollboxSize() && \"absolute\" === i.position,\n                        a = (o || n) && \"border-box\" === k.css(e, \"boxSizing\", !1, i),\n                        s = n ? et(e, u, n, a, i) : 0;\n                    return (\n                        a && o && (s -= Math.ceil(e[\"offset\" + u[0].toUpperCase() + u.slice(1)] - parseFloat(i[u]) - et(e, u, \"border\", !1, i) - 0.5)),\n                        s && (r = ne.exec(t)) && \"px\" !== (r[3] || \"px\") && ((e.style[u] = t), (t = k.css(e, u))),\n                        Ze(0, t, s)\n                    );\n                },\n            };\n        }),\n        (k.cssHooks.marginLeft = ze(y.reliableMarginLeft, function (e, t) {\n            if (t)\n                return (\n                    (parseFloat(_e(e, \"marginLeft\")) ||\n                        e.getBoundingClientRect().left -\n                            ue(e, { marginLeft: 0 }, function () {\n                                return e.getBoundingClientRect().left;\n                            })) + \"px\"\n                );\n        })),\n        k.each({ margin: \"\", padding: \"\", border: \"Width\" }, function (i, o) {\n            (k.cssHooks[i + o] = {\n                expand: function (e) {\n                    for (var t = 0, n = {}, r = \"string\" == typeof e ? e.split(\" \") : [e]; t < 4; t++) n[i + re[t] + o] = r[t] || r[t - 2] || r[0];\n                    return n;\n                },\n            }),\n                \"margin\" !== i && (k.cssHooks[i + o].set = Ze);\n        }),\n        k.fn.extend({\n            css: function (e, t) {\n                return _(\n                    this,\n                    function (e, t, n) {\n                        var r,\n                            i,\n                            o = {},\n                            a = 0;\n                        if (Array.isArray(t)) {\n                            for (r = Fe(e), i = t.length; a < i; a++) o[t[a]] = k.css(e, t[a], !1, r);\n                            return o;\n                        }\n                        return void 0 !== n ? k.style(e, t, n) : k.css(e, t);\n                    },\n                    e,\n                    t,\n                    1 < arguments.length\n                );\n            },\n        }),\n        (((k.Tween = nt).prototype = {\n            constructor: nt,\n            init: function (e, t, n, r, i, o) {\n                (this.elem = e), (this.prop = n), (this.easing = i || k.easing._default), (this.options = t), (this.start = this.now = this.cur()), (this.end = r), (this.unit = o || (k.cssNumber[n] ? \"\" : \"px\"));\n            },\n            cur: function () {\n                var e = nt.propHooks[this.prop];\n                return e && e.get ? e.get(this) : nt.propHooks._default.get(this);\n            },\n            run: function (e) {\n                var t,\n                    n = nt.propHooks[this.prop];\n                return (\n                    this.options.duration ? (this.pos = t = k.easing[this.easing](e, this.options.duration * e, 0, 1, this.options.duration)) : (this.pos = t = e),\n                    (this.now = (this.end - this.start) * t + this.start),\n                    this.options.step && this.options.step.call(this.elem, this.now, this),\n                    n && n.set ? n.set(this) : nt.propHooks._default.set(this),\n                    this\n                );\n            },\n        }).init.prototype = nt.prototype),\n        ((nt.propHooks = {\n            _default: {\n                get: function (e) {\n                    var t;\n                    return 1 !== e.elem.nodeType || (null != e.elem[e.prop] && null == e.elem.style[e.prop]) ? e.elem[e.prop] : (t = k.css(e.elem, e.prop, \"\")) && \"auto\" !== t ? t : 0;\n                },\n                set: function (e) {\n                    k.fx.step[e.prop] ? k.fx.step[e.prop](e) : 1 !== e.elem.nodeType || (!k.cssHooks[e.prop] && null == e.elem.style[Ge(e.prop)]) ? (e.elem[e.prop] = e.now) : k.style(e.elem, e.prop, e.now + e.unit);\n                },\n            },\n        }).scrollTop = nt.propHooks.scrollLeft = {\n            set: function (e) {\n                e.elem.nodeType && e.elem.parentNode && (e.elem[e.prop] = e.now);\n            },\n        }),\n        (k.easing = {\n            linear: function (e) {\n                return e;\n            },\n            swing: function (e) {\n                return 0.5 - Math.cos(e * Math.PI) / 2;\n            },\n            _default: \"swing\",\n        }),\n        (k.fx = nt.prototype.init),\n        (k.fx.step = {});\n    var rt,\n        it,\n        ot,\n        at,\n        st = /^(?:toggle|show|hide)$/,\n        ut = /queueHooks$/;\n    function lt() {\n        it && (!1 === E.hidden && C.requestAnimationFrame ? C.requestAnimationFrame(lt) : C.setTimeout(lt, k.fx.interval), k.fx.tick());\n    }\n    function ct() {\n        return (\n            C.setTimeout(function () {\n                rt = void 0;\n            }),\n            (rt = Date.now())\n        );\n    }\n    function ft(e, t) {\n        var n,\n            r = 0,\n            i = { height: e };\n        for (t = t ? 1 : 0; r < 4; r += 2 - t) i[\"margin\" + (n = re[r])] = i[\"padding\" + n] = e;\n        return t && (i.opacity = i.width = e), i;\n    }\n    function pt(e, t, n) {\n        for (var r, i = (dt.tweeners[t] || []).concat(dt.tweeners[\"*\"]), o = 0, a = i.length; o < a; o++) if ((r = i[o].call(n, t, e))) return r;\n    }\n    function dt(o, e, t) {\n        var n,\n            a,\n            r = 0,\n            i = dt.prefilters.length,\n            s = k.Deferred().always(function () {\n                delete u.elem;\n            }),\n            u = function () {\n                if (a) return !1;\n                for (var e = rt || ct(), t = Math.max(0, l.startTime + l.duration - e), n = 1 - (t / l.duration || 0), r = 0, i = l.tweens.length; r < i; r++) l.tweens[r].run(n);\n                return s.notifyWith(o, [l, n, t]), n < 1 && i ? t : (i || s.notifyWith(o, [l, 1, 0]), s.resolveWith(o, [l]), !1);\n            },\n            l = s.promise({\n                elem: o,\n                props: k.extend({}, e),\n                opts: k.extend(!0, { specialEasing: {}, easing: k.easing._default }, t),\n                originalProperties: e,\n                originalOptions: t,\n                startTime: rt || ct(),\n                duration: t.duration,\n                tweens: [],\n                createTween: function (e, t) {\n                    var n = k.Tween(o, l.opts, e, t, l.opts.specialEasing[e] || l.opts.easing);\n                    return l.tweens.push(n), n;\n                },\n                stop: function (e) {\n                    var t = 0,\n                        n = e ? l.tweens.length : 0;\n                    if (a) return this;\n                    for (a = !0; t < n; t++) l.tweens[t].run(1);\n                    return e ? (s.notifyWith(o, [l, 1, 0]), s.resolveWith(o, [l, e])) : s.rejectWith(o, [l, e]), this;\n                },\n            }),\n            c = l.props;\n        for (\n            !(function (e, t) {\n                var n, r, i, o, a;\n                for (n in e)\n                    if (((i = t[(r = V(n))]), (o = e[n]), Array.isArray(o) && ((i = o[1]), (o = e[n] = o[0])), n !== r && ((e[r] = o), delete e[n]), (a = k.cssHooks[r]) && (\"expand\" in a)))\n                        for (n in ((o = a.expand(o)), delete e[r], o)) (n in e) || ((e[n] = o[n]), (t[n] = i));\n                    else t[r] = i;\n            })(c, l.opts.specialEasing);\n            r < i;\n            r++\n        )\n            if ((n = dt.prefilters[r].call(l, o, c, l.opts))) return m(n.stop) && (k._queueHooks(l.elem, l.opts.queue).stop = n.stop.bind(n)), n;\n        return (\n            k.map(c, pt, l),\n            m(l.opts.start) && l.opts.start.call(o, l),\n            l.progress(l.opts.progress).done(l.opts.done, l.opts.complete).fail(l.opts.fail).always(l.opts.always),\n            k.fx.timer(k.extend(u, { elem: o, anim: l, queue: l.opts.queue })),\n            l\n        );\n    }\n    (k.Animation = k.extend(dt, {\n        tweeners: {\n            \"*\": [\n                function (e, t) {\n                    var n = this.createTween(e, t);\n                    return le(n.elem, e, ne.exec(t), n), n;\n                },\n            ],\n        },\n        tweener: function (e, t) {\n            m(e) ? ((t = e), (e = [\"*\"])) : (e = e.match(R));\n            for (var n, r = 0, i = e.length; r < i; r++) (n = e[r]), (dt.tweeners[n] = dt.tweeners[n] || []), dt.tweeners[n].unshift(t);\n        },\n        prefilters: [\n            function (e, t, n) {\n                var r,\n                    i,\n                    o,\n                    a,\n                    s,\n                    u,\n                    l,\n                    c,\n                    f = \"width\" in t || \"height\" in t,\n                    p = this,\n                    d = {},\n                    h = e.style,\n                    g = e.nodeType && se(e),\n                    v = Q.get(e, \"fxshow\");\n                for (r in (n.queue ||\n                    (null == (a = k._queueHooks(e, \"fx\")).unqueued &&\n                        ((a.unqueued = 0),\n                        (s = a.empty.fire),\n                        (a.empty.fire = function () {\n                            a.unqueued || s();\n                        })),\n                    a.unqueued++,\n                    p.always(function () {\n                        p.always(function () {\n                            a.unqueued--, k.queue(e, \"fx\").length || a.empty.fire();\n                        });\n                    })),\n                t))\n                    if (((i = t[r]), st.test(i))) {\n                        if ((delete t[r], (o = o || \"toggle\" === i), i === (g ? \"hide\" : \"show\"))) {\n                            if (\"show\" !== i || !v || void 0 === v[r]) continue;\n                            g = !0;\n                        }\n                        d[r] = (v && v[r]) || k.style(e, r);\n                    }\n                if ((u = !k.isEmptyObject(t)) || !k.isEmptyObject(d))\n                    for (r in (f &&\n                        1 === e.nodeType &&\n                        ((n.overflow = [h.overflow, h.overflowX, h.overflowY]),\n                        null == (l = v && v.display) && (l = Q.get(e, \"display\")),\n                        \"none\" === (c = k.css(e, \"display\")) && (l ? (c = l) : (fe([e], !0), (l = e.style.display || l), (c = k.css(e, \"display\")), fe([e]))),\n                        (\"inline\" === c || (\"inline-block\" === c && null != l)) &&\n                            \"none\" === k.css(e, \"float\") &&\n                            (u ||\n                                (p.done(function () {\n                                    h.display = l;\n                                }),\n                                null == l && ((c = h.display), (l = \"none\" === c ? \"\" : c))),\n                            (h.display = \"inline-block\"))),\n                    n.overflow &&\n                        ((h.overflow = \"hidden\"),\n                        p.always(function () {\n                            (h.overflow = n.overflow[0]), (h.overflowX = n.overflow[1]), (h.overflowY = n.overflow[2]);\n                        })),\n                    (u = !1),\n                    d))\n                        u ||\n                            (v ? \"hidden\" in v && (g = v.hidden) : (v = Q.access(e, \"fxshow\", { display: l })),\n                            o && (v.hidden = !g),\n                            g && fe([e], !0),\n                            p.done(function () {\n                                for (r in (g || fe([e]), Q.remove(e, \"fxshow\"), d)) k.style(e, r, d[r]);\n                            })),\n                            (u = pt(g ? v[r] : 0, r, p)),\n                            r in v || ((v[r] = u.start), g && ((u.end = u.start), (u.start = 0)));\n            },\n        ],\n        prefilter: function (e, t) {\n            t ? dt.prefilters.unshift(e) : dt.prefilters.push(e);\n        },\n    })),\n        (k.speed = function (e, t, n) {\n            var r = e && \"object\" == typeof e ? k.extend({}, e) : { complete: n || (!n && t) || (m(e) && e), duration: e, easing: (n && t) || (t && !m(t) && t) };\n            return (\n                k.fx.off ? (r.duration = 0) : \"number\" != typeof r.duration && (r.duration in k.fx.speeds ? (r.duration = k.fx.speeds[r.duration]) : (r.duration = k.fx.speeds._default)),\n                (null != r.queue && !0 !== r.queue) || (r.queue = \"fx\"),\n                (r.old = r.complete),\n                (r.complete = function () {\n                    m(r.old) && r.old.call(this), r.queue && k.dequeue(this, r.queue);\n                }),\n                r\n            );\n        }),\n        k.fn.extend({\n            fadeTo: function (e, t, n, r) {\n                return this.filter(se).css(\"opacity\", 0).show().end().animate({ opacity: t }, e, n, r);\n            },\n            animate: function (t, e, n, r) {\n                var i = k.isEmptyObject(t),\n                    o = k.speed(e, n, r),\n                    a = function () {\n                        var e = dt(this, k.extend({}, t), o);\n                        (i || Q.get(this, \"finish\")) && e.stop(!0);\n                    };\n                return (a.finish = a), i || !1 === o.queue ? this.each(a) : this.queue(o.queue, a);\n            },\n            stop: function (i, e, o) {\n                var a = function (e) {\n                    var t = e.stop;\n                    delete e.stop, t(o);\n                };\n                return (\n                    \"string\" != typeof i && ((o = e), (e = i), (i = void 0)),\n                    e && !1 !== i && this.queue(i || \"fx\", []),\n                    this.each(function () {\n                        var e = !0,\n                            t = null != i && i + \"queueHooks\",\n                            n = k.timers,\n                            r = Q.get(this);\n                        if (t) r[t] && r[t].stop && a(r[t]);\n                        else for (t in r) r[t] && r[t].stop && ut.test(t) && a(r[t]);\n                        for (t = n.length; t--; ) n[t].elem !== this || (null != i && n[t].queue !== i) || (n[t].anim.stop(o), (e = !1), n.splice(t, 1));\n                        (!e && o) || k.dequeue(this, i);\n                    })\n                );\n            },\n            finish: function (a) {\n                return (\n                    !1 !== a && (a = a || \"fx\"),\n                    this.each(function () {\n                        var e,\n                            t = Q.get(this),\n                            n = t[a + \"queue\"],\n                            r = t[a + \"queueHooks\"],\n                            i = k.timers,\n                            o = n ? n.length : 0;\n                        for (t.finish = !0, k.queue(this, a, []), r && r.stop && r.stop.call(this, !0), e = i.length; e--; ) i[e].elem === this && i[e].queue === a && (i[e].anim.stop(!0), i.splice(e, 1));\n                        for (e = 0; e < o; e++) n[e] && n[e].finish && n[e].finish.call(this);\n                        delete t.finish;\n                    })\n                );\n            },\n        }),\n        k.each([\"toggle\", \"show\", \"hide\"], function (e, r) {\n            var i = k.fn[r];\n            k.fn[r] = function (e, t, n) {\n                return null == e || \"boolean\" == typeof e ? i.apply(this, arguments) : this.animate(ft(r, !0), e, t, n);\n            };\n        }),\n        k.each({ slideDown: ft(\"show\"), slideUp: ft(\"hide\"), slideToggle: ft(\"toggle\"), fadeIn: { opacity: \"show\" }, fadeOut: { opacity: \"hide\" }, fadeToggle: { opacity: \"toggle\" } }, function (e, r) {\n            k.fn[e] = function (e, t, n) {\n                return this.animate(r, e, t, n);\n            };\n        }),\n        (k.timers = []),\n        (k.fx.tick = function () {\n            var e,\n                t = 0,\n                n = k.timers;\n            for (rt = Date.now(); t < n.length; t++) (e = n[t])() || n[t] !== e || n.splice(t--, 1);\n            n.length || k.fx.stop(), (rt = void 0);\n        }),\n        (k.fx.timer = function (e) {\n            k.timers.push(e), k.fx.start();\n        }),\n        (k.fx.interval = 13),\n        (k.fx.start = function () {\n            it || ((it = !0), lt());\n        }),\n        (k.fx.stop = function () {\n            it = null;\n        }),\n        (k.fx.speeds = { slow: 600, fast: 200, _default: 400 }),\n        (k.fn.delay = function (r, e) {\n            return (\n                (r = (k.fx && k.fx.speeds[r]) || r),\n                (e = e || \"fx\"),\n                this.queue(e, function (e, t) {\n                    var n = C.setTimeout(e, r);\n                    t.stop = function () {\n                        C.clearTimeout(n);\n                    };\n                })\n            );\n        }),\n        (ot = E.createElement(\"input\")),\n        (at = E.createElement(\"select\").appendChild(E.createElement(\"option\"))),\n        (ot.type = \"checkbox\"),\n        (y.checkOn = \"\" !== ot.value),\n        (y.optSelected = at.selected),\n        ((ot = E.createElement(\"input\")).value = \"t\"),\n        (ot.type = \"radio\"),\n        (y.radioValue = \"t\" === ot.value);\n    var ht,\n        gt = k.expr.attrHandle;\n    k.fn.extend({\n        attr: function (e, t) {\n            return _(this, k.attr, e, t, 1 < arguments.length);\n        },\n        removeAttr: function (e) {\n            return this.each(function () {\n                k.removeAttr(this, e);\n            });\n        },\n    }),\n        k.extend({\n            attr: function (e, t, n) {\n                var r,\n                    i,\n                    o = e.nodeType;\n                if (3 !== o && 8 !== o && 2 !== o)\n                    return \"undefined\" == typeof e.getAttribute\n                        ? k.prop(e, t, n)\n                        : ((1 === o && k.isXMLDoc(e)) || (i = k.attrHooks[t.toLowerCase()] || (k.expr.match.bool.test(t) ? ht : void 0)),\n                          void 0 !== n\n                              ? null === n\n                                  ? void k.removeAttr(e, t)\n                                  : i && \"set\" in i && void 0 !== (r = i.set(e, n, t))\n                                  ? r\n                                  : (e.setAttribute(t, n + \"\"), n)\n                              : i && \"get\" in i && null !== (r = i.get(e, t))\n                              ? r\n                              : null == (r = k.find.attr(e, t))\n                              ? void 0\n                              : r);\n            },\n            attrHooks: {\n                type: {\n                    set: function (e, t) {\n                        if (!y.radioValue && \"radio\" === t && A(e, \"input\")) {\n                            var n = e.value;\n                            return e.setAttribute(\"type\", t), n && (e.value = n), t;\n                        }\n                    },\n                },\n            },\n            removeAttr: function (e, t) {\n                var n,\n                    r = 0,\n                    i = t && t.match(R);\n                if (i && 1 === e.nodeType) while ((n = i[r++])) e.removeAttribute(n);\n            },\n        }),\n        (ht = {\n            set: function (e, t, n) {\n                return !1 === t ? k.removeAttr(e, n) : e.setAttribute(n, n), n;\n            },\n        }),\n        k.each(k.expr.match.bool.source.match(/\\w+/g), function (e, t) {\n            var a = gt[t] || k.find.attr;\n            gt[t] = function (e, t, n) {\n                var r,\n                    i,\n                    o = t.toLowerCase();\n                return n || ((i = gt[o]), (gt[o] = r), (r = null != a(e, t, n) ? o : null), (gt[o] = i)), r;\n            };\n        });\n    var vt = /^(?:input|select|textarea|button)$/i,\n        yt = /^(?:a|area)$/i;\n    function mt(e) {\n        return (e.match(R) || []).join(\" \");\n    }\n    function xt(e) {\n        return (e.getAttribute && e.getAttribute(\"class\")) || \"\";\n    }\n    function bt(e) {\n        return Array.isArray(e) ? e : (\"string\" == typeof e && e.match(R)) || [];\n    }\n    k.fn.extend({\n        prop: function (e, t) {\n            return _(this, k.prop, e, t, 1 < arguments.length);\n        },\n        removeProp: function (e) {\n            return this.each(function () {\n                delete this[k.propFix[e] || e];\n            });\n        },\n    }),\n        k.extend({\n            prop: function (e, t, n) {\n                var r,\n                    i,\n                    o = e.nodeType;\n                if (3 !== o && 8 !== o && 2 !== o)\n                    return (\n                        (1 === o && k.isXMLDoc(e)) || ((t = k.propFix[t] || t), (i = k.propHooks[t])),\n                        void 0 !== n ? (i && \"set\" in i && void 0 !== (r = i.set(e, n, t)) ? r : (e[t] = n)) : i && \"get\" in i && null !== (r = i.get(e, t)) ? r : e[t]\n                    );\n            },\n            propHooks: {\n                tabIndex: {\n                    get: function (e) {\n                        var t = k.find.attr(e, \"tabindex\");\n                        return t ? parseInt(t, 10) : vt.test(e.nodeName) || (yt.test(e.nodeName) && e.href) ? 0 : -1;\n                    },\n                },\n            },\n            propFix: { for: \"htmlFor\", class: \"className\" },\n        }),\n        y.optSelected ||\n            (k.propHooks.selected = {\n                get: function (e) {\n                    var t = e.parentNode;\n                    return t && t.parentNode && t.parentNode.selectedIndex, null;\n                },\n                set: function (e) {\n                    var t = e.parentNode;\n                    t && (t.selectedIndex, t.parentNode && t.parentNode.selectedIndex);\n                },\n            }),\n        k.each([\"tabIndex\", \"readOnly\", \"maxLength\", \"cellSpacing\", \"cellPadding\", \"rowSpan\", \"colSpan\", \"useMap\", \"frameBorder\", \"contentEditable\"], function () {\n            k.propFix[this.toLowerCase()] = this;\n        }),\n        k.fn.extend({\n            addClass: function (t) {\n                var e,\n                    n,\n                    r,\n                    i,\n                    o,\n                    a,\n                    s,\n                    u = 0;\n                if (m(t))\n                    return this.each(function (e) {\n                        k(this).addClass(t.call(this, e, xt(this)));\n                    });\n                if ((e = bt(t)).length)\n                    while ((n = this[u++]))\n                        if (((i = xt(n)), (r = 1 === n.nodeType && \" \" + mt(i) + \" \"))) {\n                            a = 0;\n                            while ((o = e[a++])) r.indexOf(\" \" + o + \" \") < 0 && (r += o + \" \");\n                            i !== (s = mt(r)) && n.setAttribute(\"class\", s);\n                        }\n                return this;\n            },\n            removeClass: function (t) {\n                var e,\n                    n,\n                    r,\n                    i,\n                    o,\n                    a,\n                    s,\n                    u = 0;\n                if (m(t))\n                    return this.each(function (e) {\n                        k(this).removeClass(t.call(this, e, xt(this)));\n                    });\n                if (!arguments.length) return this.attr(\"class\", \"\");\n                if ((e = bt(t)).length)\n                    while ((n = this[u++]))\n                        if (((i = xt(n)), (r = 1 === n.nodeType && \" \" + mt(i) + \" \"))) {\n                            a = 0;\n                            while ((o = e[a++])) while (-1 < r.indexOf(\" \" + o + \" \")) r = r.replace(\" \" + o + \" \", \" \");\n                            i !== (s = mt(r)) && n.setAttribute(\"class\", s);\n                        }\n                return this;\n            },\n            toggleClass: function (i, t) {\n                var o = typeof i,\n                    a = \"string\" === o || Array.isArray(i);\n                return \"boolean\" == typeof t && a\n                    ? t\n                        ? this.addClass(i)\n                        : this.removeClass(i)\n                    : m(i)\n                    ? this.each(function (e) {\n                          k(this).toggleClass(i.call(this, e, xt(this), t), t);\n                      })\n                    : this.each(function () {\n                          var e, t, n, r;\n                          if (a) {\n                              (t = 0), (n = k(this)), (r = bt(i));\n                              while ((e = r[t++])) n.hasClass(e) ? n.removeClass(e) : n.addClass(e);\n                          } else (void 0 !== i && \"boolean\" !== o) || ((e = xt(this)) && Q.set(this, \"__className__\", e), this.setAttribute && this.setAttribute(\"class\", e || !1 === i ? \"\" : Q.get(this, \"__className__\") || \"\"));\n                      });\n            },\n            hasClass: function (e) {\n                var t,\n                    n,\n                    r = 0;\n                t = \" \" + e + \" \";\n                while ((n = this[r++])) if (1 === n.nodeType && -1 < (\" \" + mt(xt(n)) + \" \").indexOf(t)) return !0;\n                return !1;\n            },\n        });\n    var wt = /\\r/g;\n    k.fn.extend({\n        val: function (n) {\n            var r,\n                e,\n                i,\n                t = this[0];\n            return arguments.length\n                ? ((i = m(n)),\n                  this.each(function (e) {\n                      var t;\n                      1 === this.nodeType &&\n                          (null == (t = i ? n.call(this, e, k(this).val()) : n)\n                              ? (t = \"\")\n                              : \"number\" == typeof t\n                              ? (t += \"\")\n                              : Array.isArray(t) &&\n                                (t = k.map(t, function (e) {\n                                    return null == e ? \"\" : e + \"\";\n                                })),\n                          ((r = k.valHooks[this.type] || k.valHooks[this.nodeName.toLowerCase()]) && \"set\" in r && void 0 !== r.set(this, t, \"value\")) || (this.value = t));\n                  }))\n                : t\n                ? (r = k.valHooks[t.type] || k.valHooks[t.nodeName.toLowerCase()]) && \"get\" in r && void 0 !== (e = r.get(t, \"value\"))\n                    ? e\n                    : \"string\" == typeof (e = t.value)\n                    ? e.replace(wt, \"\")\n                    : null == e\n                    ? \"\"\n                    : e\n                : void 0;\n        },\n    }),\n        k.extend({\n            valHooks: {\n                option: {\n                    get: function (e) {\n                        var t = k.find.attr(e, \"value\");\n                        return null != t ? t : mt(k.text(e));\n                    },\n                },\n                select: {\n                    get: function (e) {\n                        var t,\n                            n,\n                            r,\n                            i = e.options,\n                            o = e.selectedIndex,\n                            a = \"select-one\" === e.type,\n                            s = a ? null : [],\n                            u = a ? o + 1 : i.length;\n                        for (r = o < 0 ? u : a ? o : 0; r < u; r++)\n                            if (((n = i[r]).selected || r === o) && !n.disabled && (!n.parentNode.disabled || !A(n.parentNode, \"optgroup\"))) {\n                                if (((t = k(n).val()), a)) return t;\n                                s.push(t);\n                            }\n                        return s;\n                    },\n                    set: function (e, t) {\n                        var n,\n                            r,\n                            i = e.options,\n                            o = k.makeArray(t),\n                            a = i.length;\n                        while (a--) ((r = i[a]).selected = -1 < k.inArray(k.valHooks.option.get(r), o)) && (n = !0);\n                        return n || (e.selectedIndex = -1), o;\n                    },\n                },\n            },\n        }),\n        k.each([\"radio\", \"checkbox\"], function () {\n            (k.valHooks[this] = {\n                set: function (e, t) {\n                    if (Array.isArray(t)) return (e.checked = -1 < k.inArray(k(e).val(), t));\n                },\n            }),\n                y.checkOn ||\n                    (k.valHooks[this].get = function (e) {\n                        return null === e.getAttribute(\"value\") ? \"on\" : e.value;\n                    });\n        }),\n        (y.focusin = \"onfocusin\" in C);\n    var Tt = /^(?:focusinfocus|focusoutblur)$/,\n        Ct = function (e) {\n            e.stopPropagation();\n        };\n    k.extend(k.event, {\n        trigger: function (e, t, n, r) {\n            var i,\n                o,\n                a,\n                s,\n                u,\n                l,\n                c,\n                f,\n                p = [n || E],\n                d = v.call(e, \"type\") ? e.type : e,\n                h = v.call(e, \"namespace\") ? e.namespace.split(\".\") : [];\n            if (\n                ((o = f = a = n = n || E),\n                3 !== n.nodeType &&\n                    8 !== n.nodeType &&\n                    !Tt.test(d + k.event.triggered) &&\n                    (-1 < d.indexOf(\".\") && ((d = (h = d.split(\".\")).shift()), h.sort()),\n                    (u = d.indexOf(\":\") < 0 && \"on\" + d),\n                    ((e = e[k.expando] ? e : new k.Event(d, \"object\" == typeof e && e)).isTrigger = r ? 2 : 3),\n                    (e.namespace = h.join(\".\")),\n                    (e.rnamespace = e.namespace ? new RegExp(\"(^|\\\\.)\" + h.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\") : null),\n                    (e.result = void 0),\n                    e.target || (e.target = n),\n                    (t = null == t ? [e] : k.makeArray(t, [e])),\n                    (c = k.event.special[d] || {}),\n                    r || !c.trigger || !1 !== c.trigger.apply(n, t)))\n            ) {\n                if (!r && !c.noBubble && !x(n)) {\n                    for (s = c.delegateType || d, Tt.test(s + d) || (o = o.parentNode); o; o = o.parentNode) p.push(o), (a = o);\n                    a === (n.ownerDocument || E) && p.push(a.defaultView || a.parentWindow || C);\n                }\n                i = 0;\n                while ((o = p[i++]) && !e.isPropagationStopped())\n                    (f = o),\n                        (e.type = 1 < i ? s : c.bindType || d),\n                        (l = (Q.get(o, \"events\") || {})[e.type] && Q.get(o, \"handle\")) && l.apply(o, t),\n                        (l = u && o[u]) && l.apply && G(o) && ((e.result = l.apply(o, t)), !1 === e.result && e.preventDefault());\n                return (\n                    (e.type = d),\n                    r ||\n                        e.isDefaultPrevented() ||\n                        (c._default && !1 !== c._default.apply(p.pop(), t)) ||\n                        !G(n) ||\n                        (u &&\n                            m(n[d]) &&\n                            !x(n) &&\n                            ((a = n[u]) && (n[u] = null),\n                            (k.event.triggered = d),\n                            e.isPropagationStopped() && f.addEventListener(d, Ct),\n                            n[d](),\n                            e.isPropagationStopped() && f.removeEventListener(d, Ct),\n                            (k.event.triggered = void 0),\n                            a && (n[u] = a))),\n                    e.result\n                );\n            }\n        },\n        simulate: function (e, t, n) {\n            var r = k.extend(new k.Event(), n, { type: e, isSimulated: !0 });\n            k.event.trigger(r, null, t);\n        },\n    }),\n        k.fn.extend({\n            trigger: function (e, t) {\n                return this.each(function () {\n                    k.event.trigger(e, t, this);\n                });\n            },\n            triggerHandler: function (e, t) {\n                var n = this[0];\n                if (n) return k.event.trigger(e, t, n, !0);\n            },\n        }),\n        y.focusin ||\n            k.each({ focus: \"focusin\", blur: \"focusout\" }, function (n, r) {\n                var i = function (e) {\n                    k.event.simulate(r, e.target, k.event.fix(e));\n                };\n                k.event.special[r] = {\n                    setup: function () {\n                        var e = this.ownerDocument || this,\n                            t = Q.access(e, r);\n                        t || e.addEventListener(n, i, !0), Q.access(e, r, (t || 0) + 1);\n                    },\n                    teardown: function () {\n                        var e = this.ownerDocument || this,\n                            t = Q.access(e, r) - 1;\n                        t ? Q.access(e, r, t) : (e.removeEventListener(n, i, !0), Q.remove(e, r));\n                    },\n                };\n            });\n    var Et = C.location,\n        kt = Date.now(),\n        St = /\\?/;\n    k.parseXML = function (e) {\n        var t;\n        if (!e || \"string\" != typeof e) return null;\n        try {\n            t = new C.DOMParser().parseFromString(e, \"text/xml\");\n        } catch (e) {\n            t = void 0;\n        }\n        return (t && !t.getElementsByTagName(\"parsererror\").length) || k.error(\"Invalid XML: \" + e), t;\n    };\n    var Nt = /\\[\\]$/,\n        At = /\\r?\\n/g,\n        Dt = /^(?:submit|button|image|reset|file)$/i,\n        jt = /^(?:input|select|textarea|keygen)/i;\n    function qt(n, e, r, i) {\n        var t;\n        if (Array.isArray(e))\n            k.each(e, function (e, t) {\n                r || Nt.test(n) ? i(n, t) : qt(n + \"[\" + (\"object\" == typeof t && null != t ? e : \"\") + \"]\", t, r, i);\n            });\n        else if (r || \"object\" !== w(e)) i(n, e);\n        else for (t in e) qt(n + \"[\" + t + \"]\", e[t], r, i);\n    }\n    (k.param = function (e, t) {\n        var n,\n            r = [],\n            i = function (e, t) {\n                var n = m(t) ? t() : t;\n                r[r.length] = encodeURIComponent(e) + \"=\" + encodeURIComponent(null == n ? \"\" : n);\n            };\n        if (null == e) return \"\";\n        if (Array.isArray(e) || (e.jquery && !k.isPlainObject(e)))\n            k.each(e, function () {\n                i(this.name, this.value);\n            });\n        else for (n in e) qt(n, e[n], t, i);\n        return r.join(\"&\");\n    }),\n        k.fn.extend({\n            serialize: function () {\n                return k.param(this.serializeArray());\n            },\n            serializeArray: function () {\n                return this.map(function () {\n                    var e = k.prop(this, \"elements\");\n                    return e ? k.makeArray(e) : this;\n                })\n                    .filter(function () {\n                        var e = this.type;\n                        return this.name && !k(this).is(\":disabled\") && jt.test(this.nodeName) && !Dt.test(e) && (this.checked || !pe.test(e));\n                    })\n                    .map(function (e, t) {\n                        var n = k(this).val();\n                        return null == n\n                            ? null\n                            : Array.isArray(n)\n                            ? k.map(n, function (e) {\n                                  return { name: t.name, value: e.replace(At, \"\\r\\n\") };\n                              })\n                            : { name: t.name, value: n.replace(At, \"\\r\\n\") };\n                    })\n                    .get();\n            },\n        });\n    var Lt = /%20/g,\n        Ht = /#.*$/,\n        Ot = /([?&])_=[^&]*/,\n        Pt = /^(.*?):[ \\t]*([^\\r\\n]*)$/gm,\n        Rt = /^(?:GET|HEAD)$/,\n        Mt = /^\\/\\//,\n        It = {},\n        Wt = {},\n        $t = \"*/\".concat(\"*\"),\n        Ft = E.createElement(\"a\");\n    function Bt(o) {\n        return function (e, t) {\n            \"string\" != typeof e && ((t = e), (e = \"*\"));\n            var n,\n                r = 0,\n                i = e.toLowerCase().match(R) || [];\n            if (m(t)) while ((n = i[r++])) \"+\" === n[0] ? ((n = n.slice(1) || \"*\"), (o[n] = o[n] || []).unshift(t)) : (o[n] = o[n] || []).push(t);\n        };\n    }\n    function _t(t, i, o, a) {\n        var s = {},\n            u = t === Wt;\n        function l(e) {\n            var r;\n            return (\n                (s[e] = !0),\n                k.each(t[e] || [], function (e, t) {\n                    var n = t(i, o, a);\n                    return \"string\" != typeof n || u || s[n] ? (u ? !(r = n) : void 0) : (i.dataTypes.unshift(n), l(n), !1);\n                }),\n                r\n            );\n        }\n        return l(i.dataTypes[0]) || (!s[\"*\"] && l(\"*\"));\n    }\n    function zt(e, t) {\n        var n,\n            r,\n            i = k.ajaxSettings.flatOptions || {};\n        for (n in t) void 0 !== t[n] && ((i[n] ? e : r || (r = {}))[n] = t[n]);\n        return r && k.extend(!0, e, r), e;\n    }\n    (Ft.href = Et.href),\n        k.extend({\n            active: 0,\n            lastModified: {},\n            etag: {},\n            ajaxSettings: {\n                url: Et.href,\n                type: \"GET\",\n                isLocal: /^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Et.protocol),\n                global: !0,\n                processData: !0,\n                async: !0,\n                contentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n                accepts: { \"*\": $t, text: \"text/plain\", html: \"text/html\", xml: \"application/xml, text/xml\", json: \"application/json, text/javascript\" },\n                contents: { xml: /\\bxml\\b/, html: /\\bhtml/, json: /\\bjson\\b/ },\n                responseFields: { xml: \"responseXML\", text: \"responseText\", json: \"responseJSON\" },\n                converters: { \"* text\": String, \"text html\": !0, \"text json\": JSON.parse, \"text xml\": k.parseXML },\n                flatOptions: { url: !0, context: !0 },\n            },\n            ajaxSetup: function (e, t) {\n                return t ? zt(zt(e, k.ajaxSettings), t) : zt(k.ajaxSettings, e);\n            },\n            ajaxPrefilter: Bt(It),\n            ajaxTransport: Bt(Wt),\n            ajax: function (e, t) {\n                \"object\" == typeof e && ((t = e), (e = void 0)), (t = t || {});\n                var c,\n                    f,\n                    p,\n                    n,\n                    d,\n                    r,\n                    h,\n                    g,\n                    i,\n                    o,\n                    v = k.ajaxSetup({}, t),\n                    y = v.context || v,\n                    m = v.context && (y.nodeType || y.jquery) ? k(y) : k.event,\n                    x = k.Deferred(),\n                    b = k.Callbacks(\"once memory\"),\n                    w = v.statusCode || {},\n                    a = {},\n                    s = {},\n                    u = \"canceled\",\n                    T = {\n                        readyState: 0,\n                        getResponseHeader: function (e) {\n                            var t;\n                            if (h) {\n                                if (!n) {\n                                    n = {};\n                                    while ((t = Pt.exec(p))) n[t[1].toLowerCase() + \" \"] = (n[t[1].toLowerCase() + \" \"] || []).concat(t[2]);\n                                }\n                                t = n[e.toLowerCase() + \" \"];\n                            }\n                            return null == t ? null : t.join(\", \");\n                        },\n                        getAllResponseHeaders: function () {\n                            return h ? p : null;\n                        },\n                        setRequestHeader: function (e, t) {\n                            return null == h && ((e = s[e.toLowerCase()] = s[e.toLowerCase()] || e), (a[e] = t)), this;\n                        },\n                        overrideMimeType: function (e) {\n                            return null == h && (v.mimeType = e), this;\n                        },\n                        statusCode: function (e) {\n                            var t;\n                            if (e)\n                                if (h) T.always(e[T.status]);\n                                else for (t in e) w[t] = [w[t], e[t]];\n                            return this;\n                        },\n                        abort: function (e) {\n                            var t = e || u;\n                            return c && c.abort(t), l(0, t), this;\n                        },\n                    };\n                if (\n                    (x.promise(T),\n                    (v.url = ((e || v.url || Et.href) + \"\").replace(Mt, Et.protocol + \"//\")),\n                    (v.type = t.method || t.type || v.method || v.type),\n                    (v.dataTypes = (v.dataType || \"*\").toLowerCase().match(R) || [\"\"]),\n                    null == v.crossDomain)\n                ) {\n                    r = E.createElement(\"a\");\n                    try {\n                        (r.href = v.url), (r.href = r.href), (v.crossDomain = Ft.protocol + \"//\" + Ft.host != r.protocol + \"//\" + r.host);\n                    } catch (e) {\n                        v.crossDomain = !0;\n                    }\n                }\n                if ((v.data && v.processData && \"string\" != typeof v.data && (v.data = k.param(v.data, v.traditional)), _t(It, v, t, T), h)) return T;\n                for (i in ((g = k.event && v.global) && 0 == k.active++ && k.event.trigger(\"ajaxStart\"),\n                (v.type = v.type.toUpperCase()),\n                (v.hasContent = !Rt.test(v.type)),\n                (f = v.url.replace(Ht, \"\")),\n                v.hasContent\n                    ? v.data && v.processData && 0 === (v.contentType || \"\").indexOf(\"application/x-www-form-urlencoded\") && (v.data = v.data.replace(Lt, \"+\"))\n                    : ((o = v.url.slice(f.length)),\n                      v.data && (v.processData || \"string\" == typeof v.data) && ((f += (St.test(f) ? \"&\" : \"?\") + v.data), delete v.data),\n                      !1 === v.cache && ((f = f.replace(Ot, \"$1\")), (o = (St.test(f) ? \"&\" : \"?\") + \"_=\" + kt++ + o)),\n                      (v.url = f + o)),\n                v.ifModified && (k.lastModified[f] && T.setRequestHeader(\"If-Modified-Since\", k.lastModified[f]), k.etag[f] && T.setRequestHeader(\"If-None-Match\", k.etag[f])),\n                ((v.data && v.hasContent && !1 !== v.contentType) || t.contentType) && T.setRequestHeader(\"Content-Type\", v.contentType),\n                T.setRequestHeader(\"Accept\", v.dataTypes[0] && v.accepts[v.dataTypes[0]] ? v.accepts[v.dataTypes[0]] + (\"*\" !== v.dataTypes[0] ? \", \" + $t + \"; q=0.01\" : \"\") : v.accepts[\"*\"]),\n                v.headers))\n                    T.setRequestHeader(i, v.headers[i]);\n                if (v.beforeSend && (!1 === v.beforeSend.call(y, T, v) || h)) return T.abort();\n                if (((u = \"abort\"), b.add(v.complete), T.done(v.success), T.fail(v.error), (c = _t(Wt, v, t, T)))) {\n                    if (((T.readyState = 1), g && m.trigger(\"ajaxSend\", [T, v]), h)) return T;\n                    v.async &&\n                        0 < v.timeout &&\n                        (d = C.setTimeout(function () {\n                            T.abort(\"timeout\");\n                        }, v.timeout));\n                    try {\n                        (h = !1), c.send(a, l);\n                    } catch (e) {\n                        if (h) throw e;\n                        l(-1, e);\n                    }\n                } else l(-1, \"No Transport\");\n                function l(e, t, n, r) {\n                    var i,\n                        o,\n                        a,\n                        s,\n                        u,\n                        l = t;\n                    h ||\n                        ((h = !0),\n                        d && C.clearTimeout(d),\n                        (c = void 0),\n                        (p = r || \"\"),\n                        (T.readyState = 0 < e ? 4 : 0),\n                        (i = (200 <= e && e < 300) || 304 === e),\n                        n &&\n                            (s = (function (e, t, n) {\n                                var r,\n                                    i,\n                                    o,\n                                    a,\n                                    s = e.contents,\n                                    u = e.dataTypes;\n                                while (\"*\" === u[0]) u.shift(), void 0 === r && (r = e.mimeType || t.getResponseHeader(\"Content-Type\"));\n                                if (r)\n                                    for (i in s)\n                                        if (s[i] && s[i].test(r)) {\n                                            u.unshift(i);\n                                            break;\n                                        }\n                                if (u[0] in n) o = u[0];\n                                else {\n                                    for (i in n) {\n                                        if (!u[0] || e.converters[i + \" \" + u[0]]) {\n                                            o = i;\n                                            break;\n                                        }\n                                        a || (a = i);\n                                    }\n                                    o = o || a;\n                                }\n                                if (o) return o !== u[0] && u.unshift(o), n[o];\n                            })(v, T, n)),\n                        (s = (function (e, t, n, r) {\n                            var i,\n                                o,\n                                a,\n                                s,\n                                u,\n                                l = {},\n                                c = e.dataTypes.slice();\n                            if (c[1]) for (a in e.converters) l[a.toLowerCase()] = e.converters[a];\n                            o = c.shift();\n                            while (o)\n                                if ((e.responseFields[o] && (n[e.responseFields[o]] = t), !u && r && e.dataFilter && (t = e.dataFilter(t, e.dataType)), (u = o), (o = c.shift())))\n                                    if (\"*\" === o) o = u;\n                                    else if (\"*\" !== u && u !== o) {\n                                        if (!(a = l[u + \" \" + o] || l[\"* \" + o]))\n                                            for (i in l)\n                                                if ((s = i.split(\" \"))[1] === o && (a = l[u + \" \" + s[0]] || l[\"* \" + s[0]])) {\n                                                    !0 === a ? (a = l[i]) : !0 !== l[i] && ((o = s[0]), c.unshift(s[1]));\n                                                    break;\n                                                }\n                                        if (!0 !== a)\n                                            if (a && e[\"throws\"]) t = a(t);\n                                            else\n                                                try {\n                                                    t = a(t);\n                                                } catch (e) {\n                                                    return { state: \"parsererror\", error: a ? e : \"No conversion from \" + u + \" to \" + o };\n                                                }\n                                    }\n                            return { state: \"success\", data: t };\n                        })(v, s, T, i)),\n                        i\n                            ? (v.ifModified && ((u = T.getResponseHeader(\"Last-Modified\")) && (k.lastModified[f] = u), (u = T.getResponseHeader(\"etag\")) && (k.etag[f] = u)),\n                              204 === e || \"HEAD\" === v.type ? (l = \"nocontent\") : 304 === e ? (l = \"notmodified\") : ((l = s.state), (o = s.data), (i = !(a = s.error))))\n                            : ((a = l), (!e && l) || ((l = \"error\"), e < 0 && (e = 0))),\n                        (T.status = e),\n                        (T.statusText = (t || l) + \"\"),\n                        i ? x.resolveWith(y, [o, l, T]) : x.rejectWith(y, [T, l, a]),\n                        T.statusCode(w),\n                        (w = void 0),\n                        g && m.trigger(i ? \"ajaxSuccess\" : \"ajaxError\", [T, v, i ? o : a]),\n                        b.fireWith(y, [T, l]),\n                        g && (m.trigger(\"ajaxComplete\", [T, v]), --k.active || k.event.trigger(\"ajaxStop\")));\n                }\n                return T;\n            },\n            getJSON: function (e, t, n) {\n                return k.get(e, t, n, \"json\");\n            },\n            getScript: function (e, t) {\n                return k.get(e, void 0, t, \"script\");\n            },\n        }),\n        k.each([\"get\", \"post\"], function (e, i) {\n            k[i] = function (e, t, n, r) {\n                return m(t) && ((r = r || n), (n = t), (t = void 0)), k.ajax(k.extend({ url: e, type: i, dataType: r, data: t, success: n }, k.isPlainObject(e) && e));\n            };\n        }),\n        (k._evalUrl = function (e, t) {\n            return k.ajax({\n                url: e,\n                type: \"GET\",\n                dataType: \"script\",\n                cache: !0,\n                async: !1,\n                global: !1,\n                converters: { \"text script\": function () {} },\n                dataFilter: function (e) {\n                    k.globalEval(e, t);\n                },\n            });\n        }),\n        k.fn.extend({\n            wrapAll: function (e) {\n                var t;\n                return (\n                    this[0] &&\n                        (m(e) && (e = e.call(this[0])),\n                        (t = k(e, this[0].ownerDocument).eq(0).clone(!0)),\n                        this[0].parentNode && t.insertBefore(this[0]),\n                        t\n                            .map(function () {\n                                var e = this;\n                                while (e.firstElementChild) e = e.firstElementChild;\n                                return e;\n                            })\n                            .append(this)),\n                    this\n                );\n            },\n            wrapInner: function (n) {\n                return m(n)\n                    ? this.each(function (e) {\n                          k(this).wrapInner(n.call(this, e));\n                      })\n                    : this.each(function () {\n                          var e = k(this),\n                              t = e.contents();\n                          t.length ? t.wrapAll(n) : e.append(n);\n                      });\n            },\n            wrap: function (t) {\n                var n = m(t);\n                return this.each(function (e) {\n                    k(this).wrapAll(n ? t.call(this, e) : t);\n                });\n            },\n            unwrap: function (e) {\n                return (\n                    this.parent(e)\n                        .not(\"body\")\n                        .each(function () {\n                            k(this).replaceWith(this.childNodes);\n                        }),\n                    this\n                );\n            },\n        }),\n        (k.expr.pseudos.hidden = function (e) {\n            return !k.expr.pseudos.visible(e);\n        }),\n        (k.expr.pseudos.visible = function (e) {\n            return !!(e.offsetWidth || e.offsetHeight || e.getClientRects().length);\n        }),\n        (k.ajaxSettings.xhr = function () {\n            try {\n                return new C.XMLHttpRequest();\n            } catch (e) {}\n        });\n    var Ut = { 0: 200, 1223: 204 },\n        Xt = k.ajaxSettings.xhr();\n    (y.cors = !!Xt && \"withCredentials\" in Xt),\n        (y.ajax = Xt = !!Xt),\n        k.ajaxTransport(function (i) {\n            var o, a;\n            if (y.cors || (Xt && !i.crossDomain))\n                return {\n                    send: function (e, t) {\n                        var n,\n                            r = i.xhr();\n                        if ((r.open(i.type, i.url, i.async, i.username, i.password), i.xhrFields)) for (n in i.xhrFields) r[n] = i.xhrFields[n];\n                        for (n in (i.mimeType && r.overrideMimeType && r.overrideMimeType(i.mimeType), i.crossDomain || e[\"X-Requested-With\"] || (e[\"X-Requested-With\"] = \"XMLHttpRequest\"), e)) r.setRequestHeader(n, e[n]);\n                        (o = function (e) {\n                            return function () {\n                                o &&\n                                    ((o = a = r.onload = r.onerror = r.onabort = r.ontimeout = r.onreadystatechange = null),\n                                    \"abort\" === e\n                                        ? r.abort()\n                                        : \"error\" === e\n                                        ? \"number\" != typeof r.status\n                                            ? t(0, \"error\")\n                                            : t(r.status, r.statusText)\n                                        : t(Ut[r.status] || r.status, r.statusText, \"text\" !== (r.responseType || \"text\") || \"string\" != typeof r.responseText ? { binary: r.response } : { text: r.responseText }, r.getAllResponseHeaders()));\n                            };\n                        }),\n                            (r.onload = o()),\n                            (a = r.onerror = r.ontimeout = o(\"error\")),\n                            void 0 !== r.onabort\n                                ? (r.onabort = a)\n                                : (r.onreadystatechange = function () {\n                                      4 === r.readyState &&\n                                          C.setTimeout(function () {\n                                              o && a();\n                                          });\n                                  }),\n                            (o = o(\"abort\"));\n                        try {\n                            r.send((i.hasContent && i.data) || null);\n                        } catch (e) {\n                            if (o) throw e;\n                        }\n                    },\n                    abort: function () {\n                        o && o();\n                    },\n                };\n        }),\n        k.ajaxPrefilter(function (e) {\n            e.crossDomain && (e.contents.script = !1);\n        }),\n        k.ajaxSetup({\n            accepts: { script: \"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\" },\n            contents: { script: /\\b(?:java|ecma)script\\b/ },\n            converters: {\n                \"text script\": function (e) {\n                    return k.globalEval(e), e;\n                },\n            },\n        }),\n        k.ajaxPrefilter(\"script\", function (e) {\n            void 0 === e.cache && (e.cache = !1), e.crossDomain && (e.type = \"GET\");\n        }),\n        k.ajaxTransport(\"script\", function (n) {\n            var r, i;\n            if (n.crossDomain || n.scriptAttrs)\n                return {\n                    send: function (e, t) {\n                        (r = k(\"<script>\")\n                            .attr(n.scriptAttrs || {})\n                            .prop({ charset: n.scriptCharset, src: n.url })\n                            .on(\n                                \"load error\",\n                                (i = function (e) {\n                                    r.remove(), (i = null), e && t(\"error\" === e.type ? 404 : 200, e.type);\n                                })\n                            )),\n                            E.head.appendChild(r[0]);\n                    },\n                    abort: function () {\n                        i && i();\n                    },\n                };\n        });\n    var Vt,\n        Gt = [],\n        Yt = /(=)\\?(?=&|$)|\\?\\?/;\n    k.ajaxSetup({\n        jsonp: \"callback\",\n        jsonpCallback: function () {\n            var e = Gt.pop() || k.expando + \"_\" + kt++;\n            return (this[e] = !0), e;\n        },\n    }),\n        k.ajaxPrefilter(\"json jsonp\", function (e, t, n) {\n            var r,\n                i,\n                o,\n                a = !1 !== e.jsonp && (Yt.test(e.url) ? \"url\" : \"string\" == typeof e.data && 0 === (e.contentType || \"\").indexOf(\"application/x-www-form-urlencoded\") && Yt.test(e.data) && \"data\");\n            if (a || \"jsonp\" === e.dataTypes[0])\n                return (\n                    (r = e.jsonpCallback = m(e.jsonpCallback) ? e.jsonpCallback() : e.jsonpCallback),\n                    a ? (e[a] = e[a].replace(Yt, \"$1\" + r)) : !1 !== e.jsonp && (e.url += (St.test(e.url) ? \"&\" : \"?\") + e.jsonp + \"=\" + r),\n                    (e.converters[\"script json\"] = function () {\n                        return o || k.error(r + \" was not called\"), o[0];\n                    }),\n                    (e.dataTypes[0] = \"json\"),\n                    (i = C[r]),\n                    (C[r] = function () {\n                        o = arguments;\n                    }),\n                    n.always(function () {\n                        void 0 === i ? k(C).removeProp(r) : (C[r] = i), e[r] && ((e.jsonpCallback = t.jsonpCallback), Gt.push(r)), o && m(i) && i(o[0]), (o = i = void 0);\n                    }),\n                    \"script\"\n                );\n        }),\n        (y.createHTMLDocument = (((Vt = E.implementation.createHTMLDocument(\"\").body).innerHTML = \"<form></form><form></form>\"), 2 === Vt.childNodes.length)),\n        (k.parseHTML = function (e, t, n) {\n            return \"string\" != typeof e\n                ? []\n                : (\"boolean\" == typeof t && ((n = t), (t = !1)),\n                  t || (y.createHTMLDocument ? (((r = (t = E.implementation.createHTMLDocument(\"\")).createElement(\"base\")).href = E.location.href), t.head.appendChild(r)) : (t = E)),\n                  (o = !n && []),\n                  (i = D.exec(e)) ? [t.createElement(i[1])] : ((i = we([e], t, o)), o && o.length && k(o).remove(), k.merge([], i.childNodes)));\n            var r, i, o;\n        }),\n        (k.fn.load = function (e, t, n) {\n            var r,\n                i,\n                o,\n                a = this,\n                s = e.indexOf(\" \");\n            return (\n                -1 < s && ((r = mt(e.slice(s))), (e = e.slice(0, s))),\n                m(t) ? ((n = t), (t = void 0)) : t && \"object\" == typeof t && (i = \"POST\"),\n                0 < a.length &&\n                    k\n                        .ajax({ url: e, type: i || \"GET\", dataType: \"html\", data: t })\n                        .done(function (e) {\n                            (o = arguments), a.html(r ? k(\"<div>\").append(k.parseHTML(e)).find(r) : e);\n                        })\n                        .always(\n                            n &&\n                                function (e, t) {\n                                    a.each(function () {\n                                        n.apply(this, o || [e.responseText, t, e]);\n                                    });\n                                }\n                        ),\n                this\n            );\n        }),\n        k.each([\"ajaxStart\", \"ajaxStop\", \"ajaxComplete\", \"ajaxError\", \"ajaxSuccess\", \"ajaxSend\"], function (e, t) {\n            k.fn[t] = function (e) {\n                return this.on(t, e);\n            };\n        }),\n        (k.expr.pseudos.animated = function (t) {\n            return k.grep(k.timers, function (e) {\n                return t === e.elem;\n            }).length;\n        }),\n        (k.offset = {\n            setOffset: function (e, t, n) {\n                var r,\n                    i,\n                    o,\n                    a,\n                    s,\n                    u,\n                    l = k.css(e, \"position\"),\n                    c = k(e),\n                    f = {};\n                \"static\" === l && (e.style.position = \"relative\"),\n                    (s = c.offset()),\n                    (o = k.css(e, \"top\")),\n                    (u = k.css(e, \"left\")),\n                    (\"absolute\" === l || \"fixed\" === l) && -1 < (o + u).indexOf(\"auto\") ? ((a = (r = c.position()).top), (i = r.left)) : ((a = parseFloat(o) || 0), (i = parseFloat(u) || 0)),\n                    m(t) && (t = t.call(e, n, k.extend({}, s))),\n                    null != t.top && (f.top = t.top - s.top + a),\n                    null != t.left && (f.left = t.left - s.left + i),\n                    \"using\" in t ? t.using.call(e, f) : c.css(f);\n            },\n        }),\n        k.fn.extend({\n            offset: function (t) {\n                if (arguments.length)\n                    return void 0 === t\n                        ? this\n                        : this.each(function (e) {\n                              k.offset.setOffset(this, t, e);\n                          });\n                var e,\n                    n,\n                    r = this[0];\n                return r ? (r.getClientRects().length ? ((e = r.getBoundingClientRect()), (n = r.ownerDocument.defaultView), { top: e.top + n.pageYOffset, left: e.left + n.pageXOffset }) : { top: 0, left: 0 }) : void 0;\n            },\n            position: function () {\n                if (this[0]) {\n                    var e,\n                        t,\n                        n,\n                        r = this[0],\n                        i = { top: 0, left: 0 };\n                    if (\"fixed\" === k.css(r, \"position\")) t = r.getBoundingClientRect();\n                    else {\n                        (t = this.offset()), (n = r.ownerDocument), (e = r.offsetParent || n.documentElement);\n                        while (e && (e === n.body || e === n.documentElement) && \"static\" === k.css(e, \"position\")) e = e.parentNode;\n                        e && e !== r && 1 === e.nodeType && (((i = k(e).offset()).top += k.css(e, \"borderTopWidth\", !0)), (i.left += k.css(e, \"borderLeftWidth\", !0)));\n                    }\n                    return { top: t.top - i.top - k.css(r, \"marginTop\", !0), left: t.left - i.left - k.css(r, \"marginLeft\", !0) };\n                }\n            },\n            offsetParent: function () {\n                return this.map(function () {\n                    var e = this.offsetParent;\n                    while (e && \"static\" === k.css(e, \"position\")) e = e.offsetParent;\n                    return e || ie;\n                });\n            },\n        }),\n        k.each({ scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function (t, i) {\n            var o = \"pageYOffset\" === i;\n            k.fn[t] = function (e) {\n                return _(\n                    this,\n                    function (e, t, n) {\n                        var r;\n                        if ((x(e) ? (r = e) : 9 === e.nodeType && (r = e.defaultView), void 0 === n)) return r ? r[i] : e[t];\n                        r ? r.scrollTo(o ? r.pageXOffset : n, o ? n : r.pageYOffset) : (e[t] = n);\n                    },\n                    t,\n                    e,\n                    arguments.length\n                );\n            };\n        }),\n        k.each([\"top\", \"left\"], function (e, n) {\n            k.cssHooks[n] = ze(y.pixelPosition, function (e, t) {\n                if (t) return (t = _e(e, n)), $e.test(t) ? k(e).position()[n] + \"px\" : t;\n            });\n        }),\n        k.each({ Height: \"height\", Width: \"width\" }, function (a, s) {\n            k.each({ padding: \"inner\" + a, content: s, \"\": \"outer\" + a }, function (r, o) {\n                k.fn[o] = function (e, t) {\n                    var n = arguments.length && (r || \"boolean\" != typeof e),\n                        i = r || (!0 === e || !0 === t ? \"margin\" : \"border\");\n                    return _(\n                        this,\n                        function (e, t, n) {\n                            var r;\n                            return x(e)\n                                ? 0 === o.indexOf(\"outer\")\n                                    ? e[\"inner\" + a]\n                                    : e.document.documentElement[\"client\" + a]\n                                : 9 === e.nodeType\n                                ? ((r = e.documentElement), Math.max(e.body[\"scroll\" + a], r[\"scroll\" + a], e.body[\"offset\" + a], r[\"offset\" + a], r[\"client\" + a]))\n                                : void 0 === n\n                                ? k.css(e, t, i)\n                                : k.style(e, t, n, i);\n                        },\n                        s,\n                        n ? e : void 0,\n                        n\n                    );\n                };\n            });\n        }),\n        k.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 (e, n) {\n            k.fn[n] = function (e, t) {\n                return 0 < arguments.length ? this.on(n, null, e, t) : this.trigger(n);\n            };\n        }),\n        k.fn.extend({\n            hover: function (e, t) {\n                return this.mouseenter(e).mouseleave(t || e);\n            },\n        }),\n        k.fn.extend({\n            bind: function (e, t, n) {\n                return this.on(e, null, t, n);\n            },\n            unbind: function (e, t) {\n                return this.off(e, null, t);\n            },\n            delegate: function (e, t, n, r) {\n                return this.on(t, e, n, r);\n            },\n            undelegate: function (e, t, n) {\n                return 1 === arguments.length ? this.off(e, \"**\") : this.off(t, e || \"**\", n);\n            },\n        }),\n        (k.proxy = function (e, t) {\n            var n, r, i;\n            if ((\"string\" == typeof t && ((n = e[t]), (t = e), (e = n)), m(e)))\n                return (\n                    (r = s.call(arguments, 2)),\n                    ((i = function () {\n                        return e.apply(t || this, r.concat(s.call(arguments)));\n                    }).guid = e.guid = e.guid || k.guid++),\n                    i\n                );\n        }),\n        (k.holdReady = function (e) {\n            e ? k.readyWait++ : k.ready(!0);\n        }),\n        (k.isArray = Array.isArray),\n        (k.parseJSON = JSON.parse),\n        (k.nodeName = A),\n        (k.isFunction = m),\n        (k.isWindow = x),\n        (k.camelCase = V),\n        (k.type = w),\n        (k.now = Date.now),\n        (k.isNumeric = function (e) {\n            var t = k.type(e);\n            return (\"number\" === t || \"string\" === t) && !isNaN(e - parseFloat(e));\n        }),\n        \"function\" == typeof define &&\n            define.amd &&\n            define(\"jquery\", [], function () {\n                return k;\n            });\n    var Qt = C.jQuery,\n        Jt = C.$;\n    return (\n        (k.noConflict = function (e) {\n            return C.$ === k && (C.$ = Jt), e && C.jQuery === k && (C.jQuery = Qt), k;\n        }),\n        e || (C.jQuery = C.$ = k),\n        k\n    );\n});\n\n/* popper JS */\n/*\n Copyright (C) Federico Zivolo 2019\n Distributed under the MIT License (license terms are at http://opensource.org/licenses/MIT).\n */ (function (e, t) {\n    \"object\" == typeof exports && \"undefined\" != typeof module ? (module.exports = t()) : \"function\" == typeof define && define.amd ? define(t) : (e.Popper = t());\n})(this, function () {\n    \"use strict\";\n    function e(e) {\n        return e && \"[object Function]\" === {}.toString.call(e);\n    }\n    function t(e, t) {\n        if (1 !== e.nodeType) return [];\n        var o = e.ownerDocument.defaultView,\n            n = o.getComputedStyle(e, null);\n        return t ? n[t] : n;\n    }\n    function o(e) {\n        return \"HTML\" === e.nodeName ? e : e.parentNode || e.host;\n    }\n    function n(e) {\n        if (!e) return document.body;\n        switch (e.nodeName) {\n            case \"HTML\":\n            case \"BODY\":\n                return e.ownerDocument.body;\n            case \"#document\":\n                return e.body;\n        }\n        var i = t(e),\n            r = i.overflow,\n            p = i.overflowX,\n            s = i.overflowY;\n        return /(auto|scroll|overlay)/.test(r + s + p) ? e : n(o(e));\n    }\n    function r(e) {\n        return 11 === e ? pe : 10 === e ? se : pe || se;\n    }\n    function p(e) {\n        if (!e) return document.documentElement;\n        for (var o = r(10) ? document.body : null, n = e.offsetParent || null; n === o && e.nextElementSibling; ) n = (e = e.nextElementSibling).offsetParent;\n        var i = n && n.nodeName;\n        return i && \"BODY\" !== i && \"HTML\" !== i ? (-1 !== [\"TH\", \"TD\", \"TABLE\"].indexOf(n.nodeName) && \"static\" === t(n, \"position\") ? p(n) : n) : e ? e.ownerDocument.documentElement : document.documentElement;\n    }\n    function s(e) {\n        var t = e.nodeName;\n        return \"BODY\" !== t && (\"HTML\" === t || p(e.firstElementChild) === e);\n    }\n    function d(e) {\n        return null === e.parentNode ? e : d(e.parentNode);\n    }\n    function a(e, t) {\n        if (!e || !e.nodeType || !t || !t.nodeType) return document.documentElement;\n        var o = e.compareDocumentPosition(t) & Node.DOCUMENT_POSITION_FOLLOWING,\n            n = o ? e : t,\n            i = o ? t : e,\n            r = document.createRange();\n        r.setStart(n, 0), r.setEnd(i, 0);\n        var l = r.commonAncestorContainer;\n        if ((e !== l && t !== l) || n.contains(i)) return s(l) ? l : p(l);\n        var f = d(e);\n        return f.host ? a(f.host, t) : a(e, d(t).host);\n    }\n    function l(e) {\n        var t = 1 < arguments.length && void 0 !== arguments[1] ? arguments[1] : \"top\",\n            o = \"top\" === t ? \"scrollTop\" : \"scrollLeft\",\n            n = e.nodeName;\n        if (\"BODY\" === n || \"HTML\" === n) {\n            var i = e.ownerDocument.documentElement,\n                r = e.ownerDocument.scrollingElement || i;\n            return r[o];\n        }\n        return e[o];\n    }\n    function f(e, t) {\n        var o = 2 < arguments.length && void 0 !== arguments[2] && arguments[2],\n            n = l(t, \"top\"),\n            i = l(t, \"left\"),\n            r = o ? -1 : 1;\n        return (e.top += n * r), (e.bottom += n * r), (e.left += i * r), (e.right += i * r), e;\n    }\n    function m(e, t) {\n        var o = \"x\" === t ? \"Left\" : \"Top\",\n            n = \"Left\" == o ? \"Right\" : \"Bottom\";\n        return parseFloat(e[\"border\" + o + \"Width\"], 10) + parseFloat(e[\"border\" + n + \"Width\"], 10);\n    }\n    function h(e, t, o, n) {\n        return ee(\n            t[\"offset\" + e],\n            t[\"scroll\" + e],\n            o[\"client\" + e],\n            o[\"offset\" + e],\n            o[\"scroll\" + e],\n            r(10) ? parseInt(o[\"offset\" + e]) + parseInt(n[\"margin\" + (\"Height\" === e ? \"Top\" : \"Left\")]) + parseInt(n[\"margin\" + (\"Height\" === e ? \"Bottom\" : \"Right\")]) : 0\n        );\n    }\n    function c(e) {\n        var t = e.body,\n            o = e.documentElement,\n            n = r(10) && getComputedStyle(o);\n        return { height: h(\"Height\", t, o, n), width: h(\"Width\", t, o, n) };\n    }\n    function g(e) {\n        return fe({}, e, { right: e.left + e.width, bottom: e.top + e.height });\n    }\n    function u(e) {\n        var o = {};\n        try {\n            if (r(10)) {\n                o = e.getBoundingClientRect();\n                var n = l(e, \"top\"),\n                    i = l(e, \"left\");\n                (o.top += n), (o.left += i), (o.bottom += n), (o.right += i);\n            } else o = e.getBoundingClientRect();\n        } catch (t) {}\n        var p = { left: o.left, top: o.top, width: o.right - o.left, height: o.bottom - o.top },\n            s = \"HTML\" === e.nodeName ? c(e.ownerDocument) : {},\n            d = s.width || e.clientWidth || p.right - p.left,\n            a = s.height || e.clientHeight || p.bottom - p.top,\n            f = e.offsetWidth - d,\n            h = e.offsetHeight - a;\n        if (f || h) {\n            var u = t(e);\n            (f -= m(u, \"x\")), (h -= m(u, \"y\")), (p.width -= f), (p.height -= h);\n        }\n        return g(p);\n    }\n    function b(e, o) {\n        var i = 2 < arguments.length && void 0 !== arguments[2] && arguments[2],\n            p = r(10),\n            s = \"HTML\" === o.nodeName,\n            d = u(e),\n            a = u(o),\n            l = n(e),\n            m = t(o),\n            h = parseFloat(m.borderTopWidth, 10),\n            c = parseFloat(m.borderLeftWidth, 10);\n        i && s && ((a.top = ee(a.top, 0)), (a.left = ee(a.left, 0)));\n        var b = g({ top: d.top - a.top - h, left: d.left - a.left - c, width: d.width, height: d.height });\n        if (((b.marginTop = 0), (b.marginLeft = 0), !p && s)) {\n            var w = parseFloat(m.marginTop, 10),\n                y = parseFloat(m.marginLeft, 10);\n            (b.top -= h - w), (b.bottom -= h - w), (b.left -= c - y), (b.right -= c - y), (b.marginTop = w), (b.marginLeft = y);\n        }\n        return (p && !i ? o.contains(l) : o === l && \"BODY\" !== l.nodeName) && (b = f(b, o)), b;\n    }\n    function w(e) {\n        var t = 1 < arguments.length && void 0 !== arguments[1] && arguments[1],\n            o = e.ownerDocument.documentElement,\n            n = b(e, o),\n            i = ee(o.clientWidth, window.innerWidth || 0),\n            r = ee(o.clientHeight, window.innerHeight || 0),\n            p = t ? 0 : l(o),\n            s = t ? 0 : l(o, \"left\"),\n            d = { top: p - n.top + n.marginTop, left: s - n.left + n.marginLeft, width: i, height: r };\n        return g(d);\n    }\n    function y(e) {\n        var n = e.nodeName;\n        if (\"BODY\" === n || \"HTML\" === n) return !1;\n        if (\"fixed\" === t(e, \"position\")) return !0;\n        var i = o(e);\n        return !!i && y(i);\n    }\n    function E(e) {\n        if (!e || !e.parentElement || r()) return document.documentElement;\n        for (var o = e.parentElement; o && \"none\" === t(o, \"transform\"); ) o = o.parentElement;\n        return o || document.documentElement;\n    }\n    function v(e, t, i, r) {\n        var p = 4 < arguments.length && void 0 !== arguments[4] && arguments[4],\n            s = { top: 0, left: 0 },\n            d = p ? E(e) : a(e, t);\n        if (\"viewport\" === r) s = w(d, p);\n        else {\n            var l;\n            \"scrollParent\" === r ? ((l = n(o(t))), \"BODY\" === l.nodeName && (l = e.ownerDocument.documentElement)) : \"window\" === r ? (l = e.ownerDocument.documentElement) : (l = r);\n            var f = b(l, d, p);\n            if (\"HTML\" === l.nodeName && !y(d)) {\n                var m = c(e.ownerDocument),\n                    h = m.height,\n                    g = m.width;\n                (s.top += f.top - f.marginTop), (s.bottom = h + f.top), (s.left += f.left - f.marginLeft), (s.right = g + f.left);\n            } else s = f;\n        }\n        i = i || 0;\n        var u = \"number\" == typeof i;\n        return (s.left += u ? i : i.left || 0), (s.top += u ? i : i.top || 0), (s.right -= u ? i : i.right || 0), (s.bottom -= u ? i : i.bottom || 0), s;\n    }\n    function x(e) {\n        var t = e.width,\n            o = e.height;\n        return t * o;\n    }\n    function O(e, t, o, n, i) {\n        var r = 5 < arguments.length && void 0 !== arguments[5] ? arguments[5] : 0;\n        if (-1 === e.indexOf(\"auto\")) return e;\n        var p = v(o, n, r, i),\n            s = { top: { width: p.width, height: t.top - p.top }, right: { width: p.right - t.right, height: p.height }, bottom: { width: p.width, height: p.bottom - t.bottom }, left: { width: t.left - p.left, height: p.height } },\n            d = Object.keys(s)\n                .map(function (e) {\n                    return fe({ key: e }, s[e], { area: x(s[e]) });\n                })\n                .sort(function (e, t) {\n                    return t.area - e.area;\n                }),\n            a = d.filter(function (e) {\n                var t = e.width,\n                    n = e.height;\n                return t >= o.clientWidth && n >= o.clientHeight;\n            }),\n            l = 0 < a.length ? a[0].key : d[0].key,\n            f = e.split(\"-\")[1];\n        return l + (f ? \"-\" + f : \"\");\n    }\n    function L(e, t, o) {\n        var n = 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : null,\n            i = n ? E(t) : a(t, o);\n        return b(o, i, n);\n    }\n    function S(e) {\n        var t = e.ownerDocument.defaultView,\n            o = t.getComputedStyle(e),\n            n = parseFloat(o.marginTop || 0) + parseFloat(o.marginBottom || 0),\n            i = parseFloat(o.marginLeft || 0) + parseFloat(o.marginRight || 0),\n            r = { width: e.offsetWidth + i, height: e.offsetHeight + n };\n        return r;\n    }\n    function T(e) {\n        var t = { left: \"right\", right: \"left\", bottom: \"top\", top: \"bottom\" };\n        return e.replace(/left|right|bottom|top/g, function (e) {\n            return t[e];\n        });\n    }\n    function D(e, t, o) {\n        o = o.split(\"-\")[0];\n        var n = S(e),\n            i = { width: n.width, height: n.height },\n            r = -1 !== [\"right\", \"left\"].indexOf(o),\n            p = r ? \"top\" : \"left\",\n            s = r ? \"left\" : \"top\",\n            d = r ? \"height\" : \"width\",\n            a = r ? \"width\" : \"height\";\n        return (i[p] = t[p] + t[d] / 2 - n[d] / 2), (i[s] = o === s ? t[s] - n[a] : t[T(s)]), i;\n    }\n    function C(e, t) {\n        return Array.prototype.find ? e.find(t) : e.filter(t)[0];\n    }\n    function N(e, t, o) {\n        if (Array.prototype.findIndex)\n            return e.findIndex(function (e) {\n                return e[t] === o;\n            });\n        var n = C(e, function (e) {\n            return e[t] === o;\n        });\n        return e.indexOf(n);\n    }\n    function P(t, o, n) {\n        var i = void 0 === n ? t : t.slice(0, N(t, \"name\", n));\n        return (\n            i.forEach(function (t) {\n                t[\"function\"] && console.warn(\"`modifier.function` is deprecated, use `modifier.fn`!\");\n                var n = t[\"function\"] || t.fn;\n                t.enabled && e(n) && ((o.offsets.popper = g(o.offsets.popper)), (o.offsets.reference = g(o.offsets.reference)), (o = n(o, t)));\n            }),\n            o\n        );\n    }\n    function k() {\n        if (!this.state.isDestroyed) {\n            var e = { instance: this, styles: {}, arrowStyles: {}, attributes: {}, flipped: !1, offsets: {} };\n            (e.offsets.reference = L(this.state, this.popper, this.reference, this.options.positionFixed)),\n                (e.placement = O(this.options.placement, e.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding)),\n                (e.originalPlacement = e.placement),\n                (e.positionFixed = this.options.positionFixed),\n                (e.offsets.popper = D(this.popper, e.offsets.reference, e.placement)),\n                (e.offsets.popper.position = this.options.positionFixed ? \"fixed\" : \"absolute\"),\n                (e = P(this.modifiers, e)),\n                this.state.isCreated ? this.options.onUpdate(e) : ((this.state.isCreated = !0), this.options.onCreate(e));\n        }\n    }\n    function W(e, t) {\n        return e.some(function (e) {\n            var o = e.name,\n                n = e.enabled;\n            return n && o === t;\n        });\n    }\n    function H(e) {\n        for (var t = [!1, \"ms\", \"Webkit\", \"Moz\", \"O\"], o = e.charAt(0).toUpperCase() + e.slice(1), n = 0; n < t.length; n++) {\n            var i = t[n],\n                r = i ? \"\" + i + o : e;\n            if (\"undefined\" != typeof document.body.style[r]) return r;\n        }\n        return null;\n    }\n    function B() {\n        return (\n            (this.state.isDestroyed = !0),\n            W(this.modifiers, \"applyStyle\") &&\n                (this.popper.removeAttribute(\"x-placement\"),\n                (this.popper.style.position = \"\"),\n                (this.popper.style.top = \"\"),\n                (this.popper.style.left = \"\"),\n                (this.popper.style.right = \"\"),\n                (this.popper.style.bottom = \"\"),\n                (this.popper.style.willChange = \"\"),\n                (this.popper.style[H(\"transform\")] = \"\")),\n            this.disableEventListeners(),\n            this.options.removeOnDestroy && this.popper.parentNode.removeChild(this.popper),\n            this\n        );\n    }\n    function A(e) {\n        var t = e.ownerDocument;\n        return t ? t.defaultView : window;\n    }\n    function M(e, t, o, i) {\n        var r = \"BODY\" === e.nodeName,\n            p = r ? e.ownerDocument.defaultView : e;\n        p.addEventListener(t, o, { passive: !0 }), r || M(n(p.parentNode), t, o, i), i.push(p);\n    }\n    function F(e, t, o, i) {\n        (o.updateBound = i), A(e).addEventListener(\"resize\", o.updateBound, { passive: !0 });\n        var r = n(e);\n        return M(r, \"scroll\", o.updateBound, o.scrollParents), (o.scrollElement = r), (o.eventsEnabled = !0), o;\n    }\n    function I() {\n        this.state.eventsEnabled || (this.state = F(this.reference, this.options, this.state, this.scheduleUpdate));\n    }\n    function R(e, t) {\n        return (\n            A(e).removeEventListener(\"resize\", t.updateBound),\n            t.scrollParents.forEach(function (e) {\n                e.removeEventListener(\"scroll\", t.updateBound);\n            }),\n            (t.updateBound = null),\n            (t.scrollParents = []),\n            (t.scrollElement = null),\n            (t.eventsEnabled = !1),\n            t\n        );\n    }\n    function U() {\n        this.state.eventsEnabled && (cancelAnimationFrame(this.scheduleUpdate), (this.state = R(this.reference, this.state)));\n    }\n    function Y(e) {\n        return \"\" !== e && !isNaN(parseFloat(e)) && isFinite(e);\n    }\n    function j(e, t) {\n        Object.keys(t).forEach(function (o) {\n            var n = \"\";\n            -1 !== [\"width\", \"height\", \"top\", \"right\", \"bottom\", \"left\"].indexOf(o) && Y(t[o]) && (n = \"px\"), (e.style[o] = t[o] + n);\n        });\n    }\n    function V(e, t) {\n        Object.keys(t).forEach(function (o) {\n            var n = t[o];\n            !1 === n ? e.removeAttribute(o) : e.setAttribute(o, t[o]);\n        });\n    }\n    function q(e, t) {\n        var o = e.offsets,\n            n = o.popper,\n            i = o.reference,\n            r = $,\n            p = function (e) {\n                return e;\n            },\n            s = r(i.width),\n            d = r(n.width),\n            a = -1 !== [\"left\", \"right\"].indexOf(e.placement),\n            l = -1 !== e.placement.indexOf(\"-\"),\n            f = t ? (a || l || s % 2 == d % 2 ? r : Z) : p,\n            m = t ? r : p;\n        return { left: f(1 == s % 2 && 1 == d % 2 && !l && t ? n.left - 1 : n.left), top: m(n.top), bottom: m(n.bottom), right: f(n.right) };\n    }\n    function K(e, t, o) {\n        var n = C(e, function (e) {\n                var o = e.name;\n                return o === t;\n            }),\n            i =\n                !!n &&\n                e.some(function (e) {\n                    return e.name === o && e.enabled && e.order < n.order;\n                });\n        if (!i) {\n            var r = \"`\" + t + \"`\";\n            console.warn(\"`\" + o + \"`\" + \" modifier is required by \" + r + \" modifier in order to work, be sure to include it before \" + r + \"!\");\n        }\n        return i;\n    }\n    function z(e) {\n        return \"end\" === e ? \"start\" : \"start\" === e ? \"end\" : e;\n    }\n    function G(e) {\n        var t = 1 < arguments.length && void 0 !== arguments[1] && arguments[1],\n            o = ce.indexOf(e),\n            n = ce.slice(o + 1).concat(ce.slice(0, o));\n        return t ? n.reverse() : n;\n    }\n    function _(e, t, o, n) {\n        var i = e.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/),\n            r = +i[1],\n            p = i[2];\n        if (!r) return e;\n        if (0 === p.indexOf(\"%\")) {\n            var s;\n            switch (p) {\n                case \"%p\":\n                    s = o;\n                    break;\n                case \"%\":\n                case \"%r\":\n                default:\n                    s = n;\n            }\n            var d = g(s);\n            return (d[t] / 100) * r;\n        }\n        if (\"vh\" === p || \"vw\" === p) {\n            var a;\n            return (a = \"vh\" === p ? ee(document.documentElement.clientHeight, window.innerHeight || 0) : ee(document.documentElement.clientWidth, window.innerWidth || 0)), (a / 100) * r;\n        }\n        return r;\n    }\n    function X(e, t, o, n) {\n        var i = [0, 0],\n            r = -1 !== [\"right\", \"left\"].indexOf(n),\n            p = e.split(/(\\+|\\-)/).map(function (e) {\n                return e.trim();\n            }),\n            s = p.indexOf(\n                C(p, function (e) {\n                    return -1 !== e.search(/,|\\s/);\n                })\n            );\n        p[s] && -1 === p[s].indexOf(\",\") && console.warn(\"Offsets separated by white space(s) are deprecated, use a comma (,) instead.\");\n        var d = /\\s*,\\s*|\\s+/,\n            a = -1 === s ? [p] : [p.slice(0, s).concat([p[s].split(d)[0]]), [p[s].split(d)[1]].concat(p.slice(s + 1))];\n        return (\n            (a = a.map(function (e, n) {\n                var i = (1 === n ? !r : r) ? \"height\" : \"width\",\n                    p = !1;\n                return e\n                    .reduce(function (e, t) {\n                        return \"\" === e[e.length - 1] && -1 !== [\"+\", \"-\"].indexOf(t) ? ((e[e.length - 1] = t), (p = !0), e) : p ? ((e[e.length - 1] += t), (p = !1), e) : e.concat(t);\n                    }, [])\n                    .map(function (e) {\n                        return _(e, i, t, o);\n                    });\n            })),\n            a.forEach(function (e, t) {\n                e.forEach(function (o, n) {\n                    Y(o) && (i[t] += o * (\"-\" === e[n - 1] ? -1 : 1));\n                });\n            }),\n            i\n        );\n    }\n    function J(e, t) {\n        var o,\n            n = t.offset,\n            i = e.placement,\n            r = e.offsets,\n            p = r.popper,\n            s = r.reference,\n            d = i.split(\"-\")[0];\n        return (\n            (o = Y(+n) ? [+n, 0] : X(n, p, s, d)),\n            \"left\" === d ? ((p.top += o[0]), (p.left -= o[1])) : \"right\" === d ? ((p.top += o[0]), (p.left += o[1])) : \"top\" === d ? ((p.left += o[0]), (p.top -= o[1])) : \"bottom\" === d && ((p.left += o[0]), (p.top += o[1])),\n            (e.popper = p),\n            e\n        );\n    }\n    for (var Q = Math.min, Z = Math.floor, $ = Math.round, ee = Math.max, te = \"undefined\" != typeof window && \"undefined\" != typeof document, oe = [\"Edge\", \"Trident\", \"Firefox\"], ne = 0, ie = 0; ie < oe.length; ie += 1)\n        if (te && 0 <= navigator.userAgent.indexOf(oe[ie])) {\n            ne = 1;\n            break;\n        }\n    var i = te && window.Promise,\n        re = i\n            ? function (e) {\n                  var t = !1;\n                  return function () {\n                      t ||\n                          ((t = !0),\n                          window.Promise.resolve().then(function () {\n                              (t = !1), e();\n                          }));\n                  };\n              }\n            : function (e) {\n                  var t = !1;\n                  return function () {\n                      t ||\n                          ((t = !0),\n                          setTimeout(function () {\n                              (t = !1), e();\n                          }, ne));\n                  };\n              },\n        pe = te && !!(window.MSInputMethodContext && document.documentMode),\n        se = te && /MSIE 10/.test(navigator.userAgent),\n        de = function (e, t) {\n            if (!(e instanceof t)) throw new TypeError(\"Cannot call a class as a function\");\n        },\n        ae = (function () {\n            function e(e, t) {\n                for (var o, n = 0; n < t.length; n++) (o = t[n]), (o.enumerable = o.enumerable || !1), (o.configurable = !0), \"value\" in o && (o.writable = !0), Object.defineProperty(e, o.key, o);\n            }\n            return function (t, o, n) {\n                return o && e(t.prototype, o), n && e(t, n), t;\n            };\n        })(),\n        le = function (e, t, o) {\n            return t in e ? Object.defineProperty(e, t, { value: o, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = o), e;\n        },\n        fe =\n            Object.assign ||\n            function (e) {\n                for (var t, o = 1; o < arguments.length; o++) for (var n in ((t = arguments[o]), t)) Object.prototype.hasOwnProperty.call(t, n) && (e[n] = t[n]);\n                return e;\n            },\n        me = te && /Firefox/i.test(navigator.userAgent),\n        he = [\"auto-start\", \"auto\", \"auto-end\", \"top-start\", \"top\", \"top-end\", \"right-start\", \"right\", \"right-end\", \"bottom-end\", \"bottom\", \"bottom-start\", \"left-end\", \"left\", \"left-start\"],\n        ce = he.slice(3),\n        ge = { FLIP: \"flip\", CLOCKWISE: \"clockwise\", COUNTERCLOCKWISE: \"counterclockwise\" },\n        ue = (function () {\n            function t(o, n) {\n                var i = this,\n                    r = 2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : {};\n                de(this, t),\n                    (this.scheduleUpdate = function () {\n                        return requestAnimationFrame(i.update);\n                    }),\n                    (this.update = re(this.update.bind(this))),\n                    (this.options = fe({}, t.Defaults, r)),\n                    (this.state = { isDestroyed: !1, isCreated: !1, scrollParents: [] }),\n                    (this.reference = o && o.jquery ? o[0] : o),\n                    (this.popper = n && n.jquery ? n[0] : n),\n                    (this.options.modifiers = {}),\n                    Object.keys(fe({}, t.Defaults.modifiers, r.modifiers)).forEach(function (e) {\n                        i.options.modifiers[e] = fe({}, t.Defaults.modifiers[e] || {}, r.modifiers ? r.modifiers[e] : {});\n                    }),\n                    (this.modifiers = Object.keys(this.options.modifiers)\n                        .map(function (e) {\n                            return fe({ name: e }, i.options.modifiers[e]);\n                        })\n                        .sort(function (e, t) {\n                            return e.order - t.order;\n                        })),\n                    this.modifiers.forEach(function (t) {\n                        t.enabled && e(t.onLoad) && t.onLoad(i.reference, i.popper, i.options, t, i.state);\n                    }),\n                    this.update();\n                var p = this.options.eventsEnabled;\n                p && this.enableEventListeners(), (this.state.eventsEnabled = p);\n            }\n            return (\n                ae(t, [\n                    {\n                        key: \"update\",\n                        value: function () {\n                            return k.call(this);\n                        },\n                    },\n                    {\n                        key: \"destroy\",\n                        value: function () {\n                            return B.call(this);\n                        },\n                    },\n                    {\n                        key: \"enableEventListeners\",\n                        value: function () {\n                            return I.call(this);\n                        },\n                    },\n                    {\n                        key: \"disableEventListeners\",\n                        value: function () {\n                            return U.call(this);\n                        },\n                    },\n                ]),\n                t\n            );\n        })();\n    return (\n        (ue.Utils = (\"undefined\" == typeof window ? global : window).PopperUtils),\n        (ue.placements = he),\n        (ue.Defaults = {\n            placement: \"bottom\",\n            positionFixed: !1,\n            eventsEnabled: !0,\n            removeOnDestroy: !1,\n            onCreate: function () {},\n            onUpdate: function () {},\n            modifiers: {\n                shift: {\n                    order: 100,\n                    enabled: !0,\n                    fn: function (e) {\n                        var t = e.placement,\n                            o = t.split(\"-\")[0],\n                            n = t.split(\"-\")[1];\n                        if (n) {\n                            var i = e.offsets,\n                                r = i.reference,\n                                p = i.popper,\n                                s = -1 !== [\"bottom\", \"top\"].indexOf(o),\n                                d = s ? \"left\" : \"top\",\n                                a = s ? \"width\" : \"height\",\n                                l = { start: le({}, d, r[d]), end: le({}, d, r[d] + r[a] - p[a]) };\n                            e.offsets.popper = fe({}, p, l[n]);\n                        }\n                        return e;\n                    },\n                },\n                offset: { order: 200, enabled: !0, fn: J, offset: 0 },\n                preventOverflow: {\n                    order: 300,\n                    enabled: !0,\n                    fn: function (e, t) {\n                        var o = t.boundariesElement || p(e.instance.popper);\n                        e.instance.reference === o && (o = p(o));\n                        var n = H(\"transform\"),\n                            i = e.instance.popper.style,\n                            r = i.top,\n                            s = i.left,\n                            d = i[n];\n                        (i.top = \"\"), (i.left = \"\"), (i[n] = \"\");\n                        var a = v(e.instance.popper, e.instance.reference, t.padding, o, e.positionFixed);\n                        (i.top = r), (i.left = s), (i[n] = d), (t.boundaries = a);\n                        var l = t.priority,\n                            f = e.offsets.popper,\n                            m = {\n                                primary: function (e) {\n                                    var o = f[e];\n                                    return f[e] < a[e] && !t.escapeWithReference && (o = ee(f[e], a[e])), le({}, e, o);\n                                },\n                                secondary: function (e) {\n                                    var o = \"right\" === e ? \"left\" : \"top\",\n                                        n = f[o];\n                                    return f[e] > a[e] && !t.escapeWithReference && (n = Q(f[o], a[e] - (\"right\" === e ? f.width : f.height))), le({}, o, n);\n                                },\n                            };\n                        return (\n                            l.forEach(function (e) {\n                                var t = -1 === [\"left\", \"top\"].indexOf(e) ? \"secondary\" : \"primary\";\n                                f = fe({}, f, m[t](e));\n                            }),\n                            (e.offsets.popper = f),\n                            e\n                        );\n                    },\n                    priority: [\"left\", \"right\", \"top\", \"bottom\"],\n                    padding: 5,\n                    boundariesElement: \"scrollParent\",\n                },\n                keepTogether: {\n                    order: 400,\n                    enabled: !0,\n                    fn: function (e) {\n                        var t = e.offsets,\n                            o = t.popper,\n                            n = t.reference,\n                            i = e.placement.split(\"-\")[0],\n                            r = Z,\n                            p = -1 !== [\"top\", \"bottom\"].indexOf(i),\n                            s = p ? \"right\" : \"bottom\",\n                            d = p ? \"left\" : \"top\",\n                            a = p ? \"width\" : \"height\";\n                        return o[s] < r(n[d]) && (e.offsets.popper[d] = r(n[d]) - o[a]), o[d] > r(n[s]) && (e.offsets.popper[d] = r(n[s])), e;\n                    },\n                },\n                arrow: {\n                    order: 500,\n                    enabled: !0,\n                    fn: function (e, o) {\n                        var n;\n                        if (!K(e.instance.modifiers, \"arrow\", \"keepTogether\")) return e;\n                        var i = o.element;\n                        if (\"string\" == typeof i) {\n                            if (((i = e.instance.popper.querySelector(i)), !i)) return e;\n                        } else if (!e.instance.popper.contains(i)) return console.warn(\"WARNING: `arrow.element` must be child of its popper element!\"), e;\n                        var r = e.placement.split(\"-\")[0],\n                            p = e.offsets,\n                            s = p.popper,\n                            d = p.reference,\n                            a = -1 !== [\"left\", \"right\"].indexOf(r),\n                            l = a ? \"height\" : \"width\",\n                            f = a ? \"Top\" : \"Left\",\n                            m = f.toLowerCase(),\n                            h = a ? \"left\" : \"top\",\n                            c = a ? \"bottom\" : \"right\",\n                            u = S(i)[l];\n                        d[c] - u < s[m] && (e.offsets.popper[m] -= s[m] - (d[c] - u)), d[m] + u > s[c] && (e.offsets.popper[m] += d[m] + u - s[c]), (e.offsets.popper = g(e.offsets.popper));\n                        var b = d[m] + d[l] / 2 - u / 2,\n                            w = t(e.instance.popper),\n                            y = parseFloat(w[\"margin\" + f], 10),\n                            E = parseFloat(w[\"border\" + f + \"Width\"], 10),\n                            v = b - e.offsets.popper[m] - y - E;\n                        return (v = ee(Q(s[l] - u, v), 0)), (e.arrowElement = i), (e.offsets.arrow = ((n = {}), le(n, m, $(v)), le(n, h, \"\"), n)), e;\n                    },\n                    element: \"[x-arrow]\",\n                },\n                flip: {\n                    order: 600,\n                    enabled: !0,\n                    fn: function (e, t) {\n                        if (W(e.instance.modifiers, \"inner\")) return e;\n                        if (e.flipped && e.placement === e.originalPlacement) return e;\n                        var o = v(e.instance.popper, e.instance.reference, t.padding, t.boundariesElement, e.positionFixed),\n                            n = e.placement.split(\"-\")[0],\n                            i = T(n),\n                            r = e.placement.split(\"-\")[1] || \"\",\n                            p = [];\n                        switch (t.behavior) {\n                            case ge.FLIP:\n                                p = [n, i];\n                                break;\n                            case ge.CLOCKWISE:\n                                p = G(n);\n                                break;\n                            case ge.COUNTERCLOCKWISE:\n                                p = G(n, !0);\n                                break;\n                            default:\n                                p = t.behavior;\n                        }\n                        return (\n                            p.forEach(function (s, d) {\n                                if (n !== s || p.length === d + 1) return e;\n                                (n = e.placement.split(\"-\")[0]), (i = T(n));\n                                var a = e.offsets.popper,\n                                    l = e.offsets.reference,\n                                    f = Z,\n                                    m = (\"left\" === n && f(a.right) > f(l.left)) || (\"right\" === n && f(a.left) < f(l.right)) || (\"top\" === n && f(a.bottom) > f(l.top)) || (\"bottom\" === n && f(a.top) < f(l.bottom)),\n                                    h = f(a.left) < f(o.left),\n                                    c = f(a.right) > f(o.right),\n                                    g = f(a.top) < f(o.top),\n                                    u = f(a.bottom) > f(o.bottom),\n                                    b = (\"left\" === n && h) || (\"right\" === n && c) || (\"top\" === n && g) || (\"bottom\" === n && u),\n                                    w = -1 !== [\"top\", \"bottom\"].indexOf(n),\n                                    y = !!t.flipVariations && ((w && \"start\" === r && h) || (w && \"end\" === r && c) || (!w && \"start\" === r && g) || (!w && \"end\" === r && u));\n                                (m || b || y) &&\n                                    ((e.flipped = !0),\n                                    (m || b) && (n = p[d + 1]),\n                                    y && (r = z(r)),\n                                    (e.placement = n + (r ? \"-\" + r : \"\")),\n                                    (e.offsets.popper = fe({}, e.offsets.popper, D(e.instance.popper, e.offsets.reference, e.placement))),\n                                    (e = P(e.instance.modifiers, e, \"flip\")));\n                            }),\n                            e\n                        );\n                    },\n                    behavior: \"flip\",\n                    padding: 5,\n                    boundariesElement: \"viewport\",\n                },\n                inner: {\n                    order: 700,\n                    enabled: !1,\n                    fn: function (e) {\n                        var t = e.placement,\n                            o = t.split(\"-\")[0],\n                            n = e.offsets,\n                            i = n.popper,\n                            r = n.reference,\n                            p = -1 !== [\"left\", \"right\"].indexOf(o),\n                            s = -1 === [\"top\", \"left\"].indexOf(o);\n                        return (i[p ? \"left\" : \"top\"] = r[o] - (s ? i[p ? \"width\" : \"height\"] : 0)), (e.placement = T(t)), (e.offsets.popper = g(i)), e;\n                    },\n                },\n                hide: {\n                    order: 800,\n                    enabled: !0,\n                    fn: function (e) {\n                        if (!K(e.instance.modifiers, \"hide\", \"preventOverflow\")) return e;\n                        var t = e.offsets.reference,\n                            o = C(e.instance.modifiers, function (e) {\n                                return \"preventOverflow\" === e.name;\n                            }).boundaries;\n                        if (t.bottom < o.top || t.left > o.right || t.top > o.bottom || t.right < o.left) {\n                            if (!0 === e.hide) return e;\n                            (e.hide = !0), (e.attributes[\"x-out-of-boundaries\"] = \"\");\n                        } else {\n                            if (!1 === e.hide) return e;\n                            (e.hide = !1), (e.attributes[\"x-out-of-boundaries\"] = !1);\n                        }\n                        return e;\n                    },\n                },\n                computeStyle: {\n                    order: 850,\n                    enabled: !0,\n                    fn: function (e, t) {\n                        var o = t.x,\n                            n = t.y,\n                            i = e.offsets.popper,\n                            r = C(e.instance.modifiers, function (e) {\n                                return \"applyStyle\" === e.name;\n                            }).gpuAcceleration;\n                        void 0 !== r && console.warn(\"WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!\");\n                        var s,\n                            d,\n                            a = void 0 === r ? t.gpuAcceleration : r,\n                            l = p(e.instance.popper),\n                            f = u(l),\n                            m = { position: i.position },\n                            h = q(e, 2 > window.devicePixelRatio || !me),\n                            c = \"bottom\" === o ? \"top\" : \"bottom\",\n                            g = \"right\" === n ? \"left\" : \"right\",\n                            b = H(\"transform\");\n                        if (\n                            ((d = \"bottom\" == c ? (\"HTML\" === l.nodeName ? -l.clientHeight + h.bottom : -f.height + h.bottom) : h.top),\n                            (s = \"right\" == g ? (\"HTML\" === l.nodeName ? -l.clientWidth + h.right : -f.width + h.right) : h.left),\n                            a && b)\n                        )\n                            (m[b] = \"translate3d(\" + s + \"px, \" + d + \"px, 0)\"), (m[c] = 0), (m[g] = 0), (m.willChange = \"transform\");\n                        else {\n                            var w = \"bottom\" == c ? -1 : 1,\n                                y = \"right\" == g ? -1 : 1;\n                            (m[c] = d * w), (m[g] = s * y), (m.willChange = c + \", \" + g);\n                        }\n                        var E = { \"x-placement\": e.placement };\n                        return (e.attributes = fe({}, E, e.attributes)), (e.styles = fe({}, m, e.styles)), (e.arrowStyles = fe({}, e.offsets.arrow, e.arrowStyles)), e;\n                    },\n                    gpuAcceleration: !0,\n                    x: \"bottom\",\n                    y: \"right\",\n                },\n                applyStyle: {\n                    order: 900,\n                    enabled: !0,\n                    fn: function (e) {\n                        return j(e.instance.popper, e.styles), V(e.instance.popper, e.attributes), e.arrowElement && Object.keys(e.arrowStyles).length && j(e.arrowElement, e.arrowStyles), e;\n                    },\n                    onLoad: function (e, t, o, n, i) {\n                        var r = L(i, t, e, o.positionFixed),\n                            p = O(o.placement, r, t, e, o.modifiers.flip.boundariesElement, o.modifiers.flip.padding);\n                        return t.setAttribute(\"x-placement\", p), j(t, { position: o.positionFixed ? \"fixed\" : \"absolute\" }), o;\n                    },\n                    gpuAcceleration: void 0,\n                },\n            },\n        }),\n        ue\n    );\n});\n//# sourceMappingURL=popper.min.js.map\n\n/*!\n * Bootstrap v4.3.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n!(function (t, e) {\n    \"object\" == typeof exports && \"undefined\" != typeof module\n        ? e(exports, require(\"jquery\"), require(\"popper.js\"))\n        : \"function\" == typeof define && define.amd\n        ? define([\"exports\", \"jquery\", \"popper.js\"], e)\n        : e(((t = t || self).bootstrap = {}), t.jQuery, t.Popper);\n})(this, function (t, g, u) {\n    \"use strict\";\n    function i(t, e) {\n        for (var n = 0; n < e.length; n++) {\n            var i = e[n];\n            (i.enumerable = i.enumerable || !1), (i.configurable = !0), \"value\" in i && (i.writable = !0), Object.defineProperty(t, i.key, i);\n        }\n    }\n    function s(t, e, n) {\n        return e && i(t.prototype, e), n && i(t, n), t;\n    }\n    function l(o) {\n        for (var t = 1; t < arguments.length; t++) {\n            var r = null != arguments[t] ? arguments[t] : {},\n                e = Object.keys(r);\n            \"function\" == typeof Object.getOwnPropertySymbols &&\n                (e = e.concat(\n                    Object.getOwnPropertySymbols(r).filter(function (t) {\n                        return Object.getOwnPropertyDescriptor(r, t).enumerable;\n                    })\n                )),\n                e.forEach(function (t) {\n                    var e, n, i;\n                    (e = o), (i = r[(n = t)]), n in e ? Object.defineProperty(e, n, { value: i, enumerable: !0, configurable: !0, writable: !0 }) : (e[n] = i);\n                });\n        }\n        return o;\n    }\n    (g = g && g.hasOwnProperty(\"default\") ? g.default : g), (u = u && u.hasOwnProperty(\"default\") ? u.default : u);\n    var e = \"transitionend\";\n    function n(t) {\n        var e = this,\n            n = !1;\n        return (\n            g(this).one(_.TRANSITION_END, function () {\n                n = !0;\n            }),\n            setTimeout(function () {\n                n || _.triggerTransitionEnd(e);\n            }, t),\n            this\n        );\n    }\n    var _ = {\n        TRANSITION_END: \"bsTransitionEnd\",\n        getUID: function (t) {\n            for (; (t += ~~(1e6 * Math.random())), document.getElementById(t); );\n            return t;\n        },\n        getSelectorFromElement: function (t) {\n            var e = t.getAttribute(\"data-target\");\n            if (!e || \"#\" === e) {\n                var n = t.getAttribute(\"href\");\n                e = n && \"#\" !== n ? n.trim() : \"\";\n            }\n            try {\n                return document.querySelector(e) ? e : null;\n            } catch (t) {\n                return null;\n            }\n        },\n        getTransitionDurationFromElement: function (t) {\n            if (!t) return 0;\n            var e = g(t).css(\"transition-duration\"),\n                n = g(t).css(\"transition-delay\"),\n                i = parseFloat(e),\n                o = parseFloat(n);\n            return i || o ? ((e = e.split(\",\")[0]), (n = n.split(\",\")[0]), 1e3 * (parseFloat(e) + parseFloat(n))) : 0;\n        },\n        reflow: function (t) {\n            return t.offsetHeight;\n        },\n        triggerTransitionEnd: function (t) {\n            g(t).trigger(e);\n        },\n        supportsTransitionEnd: function () {\n            return Boolean(e);\n        },\n        isElement: function (t) {\n            return (t[0] || t).nodeType;\n        },\n        typeCheckConfig: function (t, e, n) {\n            for (var i in n)\n                if (Object.prototype.hasOwnProperty.call(n, i)) {\n                    var o = n[i],\n                        r = e[i],\n                        s =\n                            r && _.isElement(r)\n                                ? \"element\"\n                                : ((a = r),\n                                  {}.toString\n                                      .call(a)\n                                      .match(/\\s([a-z]+)/i)[1]\n                                      .toLowerCase());\n                    if (!new RegExp(o).test(s)) throw new Error(t.toUpperCase() + ': Option \"' + i + '\" provided type \"' + s + '\" but expected type \"' + o + '\".');\n                }\n            var a;\n        },\n        findShadowRoot: function (t) {\n            if (!document.documentElement.attachShadow) return null;\n            if (\"function\" != typeof t.getRootNode) return t instanceof ShadowRoot ? t : t.parentNode ? _.findShadowRoot(t.parentNode) : null;\n            var e = t.getRootNode();\n            return e instanceof ShadowRoot ? e : null;\n        },\n    };\n    (g.fn.emulateTransitionEnd = n),\n        (g.event.special[_.TRANSITION_END] = {\n            bindType: e,\n            delegateType: e,\n            handle: function (t) {\n                if (g(t.target).is(this)) return t.handleObj.handler.apply(this, arguments);\n            },\n        });\n    var o = \"alert\",\n        r = \"bs.alert\",\n        a = \".\" + r,\n        c = g.fn[o],\n        h = { CLOSE: \"close\" + a, CLOSED: \"closed\" + a, CLICK_DATA_API: \"click\" + a + \".data-api\" },\n        f = \"alert\",\n        d = \"fade\",\n        m = \"show\",\n        p = (function () {\n            function i(t) {\n                this._element = t;\n            }\n            var t = i.prototype;\n            return (\n                (t.close = function (t) {\n                    var e = this._element;\n                    t && (e = this._getRootElement(t)), this._triggerCloseEvent(e).isDefaultPrevented() || this._removeElement(e);\n                }),\n                (t.dispose = function () {\n                    g.removeData(this._element, r), (this._element = null);\n                }),\n                (t._getRootElement = function (t) {\n                    var e = _.getSelectorFromElement(t),\n                        n = !1;\n                    return e && (n = document.querySelector(e)), n || (n = g(t).closest(\".\" + f)[0]), n;\n                }),\n                (t._triggerCloseEvent = function (t) {\n                    var e = g.Event(h.CLOSE);\n                    return g(t).trigger(e), e;\n                }),\n                (t._removeElement = function (e) {\n                    var n = this;\n                    if ((g(e).removeClass(m), g(e).hasClass(d))) {\n                        var t = _.getTransitionDurationFromElement(e);\n                        g(e)\n                            .one(_.TRANSITION_END, function (t) {\n                                return n._destroyElement(e, t);\n                            })\n                            .emulateTransitionEnd(t);\n                    } else this._destroyElement(e);\n                }),\n                (t._destroyElement = function (t) {\n                    g(t).detach().trigger(h.CLOSED).remove();\n                }),\n                (i._jQueryInterface = function (n) {\n                    return this.each(function () {\n                        var t = g(this),\n                            e = t.data(r);\n                        e || ((e = new i(this)), t.data(r, e)), \"close\" === n && e[n](this);\n                    });\n                }),\n                (i._handleDismiss = function (e) {\n                    return function (t) {\n                        t && t.preventDefault(), e.close(this);\n                    };\n                }),\n                s(i, null, [\n                    {\n                        key: \"VERSION\",\n                        get: function () {\n                            return \"4.3.1\";\n                        },\n                    },\n                ]),\n                i\n            );\n        })();\n    g(document).on(h.CLICK_DATA_API, '[data-dismiss=\"alert\"]', p._handleDismiss(new p())),\n        (g.fn[o] = p._jQueryInterface),\n        (g.fn[o].Constructor = p),\n        (g.fn[o].noConflict = function () {\n            return (g.fn[o] = c), p._jQueryInterface;\n        });\n    var v = \"button\",\n        y = \"bs.button\",\n        E = \".\" + y,\n        C = \".data-api\",\n        T = g.fn[v],\n        S = \"active\",\n        b = \"btn\",\n        I = \"focus\",\n        D = '[data-toggle^=\"button\"]',\n        w = '[data-toggle=\"buttons\"]',\n        A = 'input:not([type=\"hidden\"])',\n        N = \".active\",\n        O = \".btn\",\n        k = { CLICK_DATA_API: \"click\" + E + C, FOCUS_BLUR_DATA_API: \"focus\" + E + C + \" blur\" + E + C },\n        P = (function () {\n            function n(t) {\n                this._element = t;\n            }\n            var t = n.prototype;\n            return (\n                (t.toggle = function () {\n                    var t = !0,\n                        e = !0,\n                        n = g(this._element).closest(w)[0];\n                    if (n) {\n                        var i = this._element.querySelector(A);\n                        if (i) {\n                            if (\"radio\" === i.type)\n                                if (i.checked && this._element.classList.contains(S)) t = !1;\n                                else {\n                                    var o = n.querySelector(N);\n                                    o && g(o).removeClass(S);\n                                }\n                            if (t) {\n                                if (i.hasAttribute(\"disabled\") || n.hasAttribute(\"disabled\") || i.classList.contains(\"disabled\") || n.classList.contains(\"disabled\")) return;\n                                (i.checked = !this._element.classList.contains(S)), g(i).trigger(\"change\");\n                            }\n                            i.focus(), (e = !1);\n                        }\n                    }\n                    e && this._element.setAttribute(\"aria-pressed\", !this._element.classList.contains(S)), t && g(this._element).toggleClass(S);\n                }),\n                (t.dispose = function () {\n                    g.removeData(this._element, y), (this._element = null);\n                }),\n                (n._jQueryInterface = function (e) {\n                    return this.each(function () {\n                        var t = g(this).data(y);\n                        t || ((t = new n(this)), g(this).data(y, t)), \"toggle\" === e && t[e]();\n                    });\n                }),\n                s(n, null, [\n                    {\n                        key: \"VERSION\",\n                        get: function () {\n                            return \"4.3.1\";\n                        },\n                    },\n                ]),\n                n\n            );\n        })();\n    g(document)\n        .on(k.CLICK_DATA_API, D, function (t) {\n            t.preventDefault();\n            var e = t.target;\n            g(e).hasClass(b) || (e = g(e).closest(O)), P._jQueryInterface.call(g(e), \"toggle\");\n        })\n        .on(k.FOCUS_BLUR_DATA_API, D, function (t) {\n            var e = g(t.target).closest(O)[0];\n            g(e).toggleClass(I, /^focus(in)?$/.test(t.type));\n        }),\n        (g.fn[v] = P._jQueryInterface),\n        (g.fn[v].Constructor = P),\n        (g.fn[v].noConflict = function () {\n            return (g.fn[v] = T), P._jQueryInterface;\n        });\n    var L = \"carousel\",\n        j = \"bs.carousel\",\n        H = \".\" + j,\n        R = \".data-api\",\n        x = g.fn[L],\n        F = { interval: 5e3, keyboard: !0, slide: !1, pause: \"hover\", wrap: !0, touch: !0 },\n        U = { interval: \"(number|boolean)\", keyboard: \"boolean\", slide: \"(boolean|string)\", pause: \"(string|boolean)\", wrap: \"boolean\", touch: \"boolean\" },\n        W = \"next\",\n        q = \"prev\",\n        M = \"left\",\n        K = \"right\",\n        Q = {\n            SLIDE: \"slide\" + H,\n            SLID: \"slid\" + H,\n            KEYDOWN: \"keydown\" + H,\n            MOUSEENTER: \"mouseenter\" + H,\n            MOUSELEAVE: \"mouseleave\" + H,\n            TOUCHSTART: \"touchstart\" + H,\n            TOUCHMOVE: \"touchmove\" + H,\n            TOUCHEND: \"touchend\" + H,\n            POINTERDOWN: \"pointerdown\" + H,\n            POINTERUP: \"pointerup\" + H,\n            DRAG_START: \"dragstart\" + H,\n            LOAD_DATA_API: \"load\" + H + R,\n            CLICK_DATA_API: \"click\" + H + R,\n        },\n        B = \"carousel\",\n        V = \"active\",\n        Y = \"slide\",\n        z = \"carousel-item-right\",\n        X = \"carousel-item-left\",\n        $ = \"carousel-item-next\",\n        G = \"carousel-item-prev\",\n        J = \"pointer-event\",\n        Z = \".active\",\n        tt = \".active.carousel-item\",\n        et = \".carousel-item\",\n        nt = \".carousel-item img\",\n        it = \".carousel-item-next, .carousel-item-prev\",\n        ot = \".carousel-indicators\",\n        rt = \"[data-slide], [data-slide-to]\",\n        st = '[data-ride=\"carousel\"]',\n        at = { TOUCH: \"touch\", PEN: \"pen\" },\n        lt = (function () {\n            function r(t, e) {\n                (this._items = null),\n                    (this._interval = null),\n                    (this._activeElement = null),\n                    (this._isPaused = !1),\n                    (this._isSliding = !1),\n                    (this.touchTimeout = null),\n                    (this.touchStartX = 0),\n                    (this.touchDeltaX = 0),\n                    (this._config = this._getConfig(e)),\n                    (this._element = t),\n                    (this._indicatorsElement = this._element.querySelector(ot)),\n                    (this._touchSupported = \"ontouchstart\" in document.documentElement || 0 < navigator.maxTouchPoints),\n                    (this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent)),\n                    this._addEventListeners();\n            }\n            var t = r.prototype;\n            return (\n                (t.next = function () {\n                    this._isSliding || this._slide(W);\n                }),\n                (t.nextWhenVisible = function () {\n                    !document.hidden && g(this._element).is(\":visible\") && \"hidden\" !== g(this._element).css(\"visibility\") && this.next();\n                }),\n                (t.prev = function () {\n                    this._isSliding || this._slide(q);\n                }),\n                (t.pause = function (t) {\n                    t || (this._isPaused = !0), this._element.querySelector(it) && (_.triggerTransitionEnd(this._element), this.cycle(!0)), clearInterval(this._interval), (this._interval = null);\n                }),\n                (t.cycle = function (t) {\n                    t || (this._isPaused = !1),\n                        this._interval && (clearInterval(this._interval), (this._interval = null)),\n                        this._config.interval && !this._isPaused && (this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval));\n                }),\n                (t.to = function (t) {\n                    var e = this;\n                    this._activeElement = this._element.querySelector(tt);\n                    var n = this._getItemIndex(this._activeElement);\n                    if (!(t > this._items.length - 1 || t < 0))\n                        if (this._isSliding)\n                            g(this._element).one(Q.SLID, function () {\n                                return e.to(t);\n                            });\n                        else {\n                            if (n === t) return this.pause(), void this.cycle();\n                            var i = n < t ? W : q;\n                            this._slide(i, this._items[t]);\n                        }\n                }),\n                (t.dispose = function () {\n                    g(this._element).off(H),\n                        g.removeData(this._element, j),\n                        (this._items = null),\n                        (this._config = null),\n                        (this._element = null),\n                        (this._interval = null),\n                        (this._isPaused = null),\n                        (this._isSliding = null),\n                        (this._activeElement = null),\n                        (this._indicatorsElement = null);\n                }),\n                (t._getConfig = function (t) {\n                    return (t = l({}, F, t)), _.typeCheckConfig(L, t, U), t;\n                }),\n                (t._handleSwipe = function () {\n                    var t = Math.abs(this.touchDeltaX);\n                    if (!(t <= 40)) {\n                        var e = t / this.touchDeltaX;\n                        0 < e && this.prev(), e < 0 && this.next();\n                    }\n                }),\n                (t._addEventListeners = function () {\n                    var e = this;\n                    this._config.keyboard &&\n                        g(this._element).on(Q.KEYDOWN, function (t) {\n                            return e._keydown(t);\n                        }),\n                        \"hover\" === this._config.pause &&\n                            g(this._element)\n                                .on(Q.MOUSEENTER, function (t) {\n                                    return e.pause(t);\n                                })\n                                .on(Q.MOUSELEAVE, function (t) {\n                                    return e.cycle(t);\n                                }),\n                        this._config.touch && this._addTouchEventListeners();\n                }),\n                (t._addTouchEventListeners = function () {\n                    var n = this;\n                    if (this._touchSupported) {\n                        var e = function (t) {\n                                n._pointerEvent && at[t.originalEvent.pointerType.toUpperCase()] ? (n.touchStartX = t.originalEvent.clientX) : n._pointerEvent || (n.touchStartX = t.originalEvent.touches[0].clientX);\n                            },\n                            i = function (t) {\n                                n._pointerEvent && at[t.originalEvent.pointerType.toUpperCase()] && (n.touchDeltaX = t.originalEvent.clientX - n.touchStartX),\n                                    n._handleSwipe(),\n                                    \"hover\" === n._config.pause &&\n                                        (n.pause(),\n                                        n.touchTimeout && clearTimeout(n.touchTimeout),\n                                        (n.touchTimeout = setTimeout(function (t) {\n                                            return n.cycle(t);\n                                        }, 500 + n._config.interval)));\n                            };\n                        g(this._element.querySelectorAll(nt)).on(Q.DRAG_START, function (t) {\n                            return t.preventDefault();\n                        }),\n                            this._pointerEvent\n                                ? (g(this._element).on(Q.POINTERDOWN, function (t) {\n                                      return e(t);\n                                  }),\n                                  g(this._element).on(Q.POINTERUP, function (t) {\n                                      return i(t);\n                                  }),\n                                  this._element.classList.add(J))\n                                : (g(this._element).on(Q.TOUCHSTART, function (t) {\n                                      return e(t);\n                                  }),\n                                  g(this._element).on(Q.TOUCHMOVE, function (t) {\n                                      var e;\n                                      (e = t).originalEvent.touches && 1 < e.originalEvent.touches.length ? (n.touchDeltaX = 0) : (n.touchDeltaX = e.originalEvent.touches[0].clientX - n.touchStartX);\n                                  }),\n                                  g(this._element).on(Q.TOUCHEND, function (t) {\n                                      return i(t);\n                                  }));\n                    }\n                }),\n                (t._keydown = function (t) {\n                    if (!/input|textarea/i.test(t.target.tagName))\n                        switch (t.which) {\n                            case 37:\n                                t.preventDefault(), this.prev();\n                                break;\n                            case 39:\n                                t.preventDefault(), this.next();\n                        }\n                }),\n                (t._getItemIndex = function (t) {\n                    return (this._items = t && t.parentNode ? [].slice.call(t.parentNode.querySelectorAll(et)) : []), this._items.indexOf(t);\n                }),\n                (t._getItemByDirection = function (t, e) {\n                    var n = t === W,\n                        i = t === q,\n                        o = this._getItemIndex(e),\n                        r = this._items.length - 1;\n                    if (((i && 0 === o) || (n && o === r)) && !this._config.wrap) return e;\n                    var s = (o + (t === q ? -1 : 1)) % this._items.length;\n                    return -1 === s ? this._items[this._items.length - 1] : this._items[s];\n                }),\n                (t._triggerSlideEvent = function (t, e) {\n                    var n = this._getItemIndex(t),\n                        i = this._getItemIndex(this._element.querySelector(tt)),\n                        o = g.Event(Q.SLIDE, { relatedTarget: t, direction: e, from: i, to: n });\n                    return g(this._element).trigger(o), o;\n                }),\n                (t._setActiveIndicatorElement = function (t) {\n                    if (this._indicatorsElement) {\n                        var e = [].slice.call(this._indicatorsElement.querySelectorAll(Z));\n                        g(e).removeClass(V);\n                        var n = this._indicatorsElement.children[this._getItemIndex(t)];\n                        n && g(n).addClass(V);\n                    }\n                }),\n                (t._slide = function (t, e) {\n                    var n,\n                        i,\n                        o,\n                        r = this,\n                        s = this._element.querySelector(tt),\n                        a = this._getItemIndex(s),\n                        l = e || (s && this._getItemByDirection(t, s)),\n                        c = this._getItemIndex(l),\n                        h = Boolean(this._interval);\n                    if (((o = t === W ? ((n = X), (i = $), M) : ((n = z), (i = G), K)), l && g(l).hasClass(V))) this._isSliding = !1;\n                    else if (!this._triggerSlideEvent(l, o).isDefaultPrevented() && s && l) {\n                        (this._isSliding = !0), h && this.pause(), this._setActiveIndicatorElement(l);\n                        var u = g.Event(Q.SLID, { relatedTarget: l, direction: o, from: a, to: c });\n                        if (g(this._element).hasClass(Y)) {\n                            g(l).addClass(i), _.reflow(l), g(s).addClass(n), g(l).addClass(n);\n                            var f = parseInt(l.getAttribute(\"data-interval\"), 10);\n                            this._config.interval = f ? ((this._config.defaultInterval = this._config.defaultInterval || this._config.interval), f) : this._config.defaultInterval || this._config.interval;\n                            var d = _.getTransitionDurationFromElement(s);\n                            g(s)\n                                .one(_.TRANSITION_END, function () {\n                                    g(l)\n                                        .removeClass(n + \" \" + i)\n                                        .addClass(V),\n                                        g(s).removeClass(V + \" \" + i + \" \" + n),\n                                        (r._isSliding = !1),\n                                        setTimeout(function () {\n                                            return g(r._element).trigger(u);\n                                        }, 0);\n                                })\n                                .emulateTransitionEnd(d);\n                        } else g(s).removeClass(V), g(l).addClass(V), (this._isSliding = !1), g(this._element).trigger(u);\n                        h && this.cycle();\n                    }\n                }),\n                (r._jQueryInterface = function (i) {\n                    return this.each(function () {\n                        var t = g(this).data(j),\n                            e = l({}, F, g(this).data());\n                        \"object\" == typeof i && (e = l({}, e, i));\n                        var n = \"string\" == typeof i ? i : e.slide;\n                        if ((t || ((t = new r(this, e)), g(this).data(j, t)), \"number\" == typeof i)) t.to(i);\n                        else if (\"string\" == typeof n) {\n                            if (\"undefined\" == typeof t[n]) throw new TypeError('No method named \"' + n + '\"');\n                            t[n]();\n                        } else e.interval && e.ride && (t.pause(), t.cycle());\n                    });\n                }),\n                (r._dataApiClickHandler = function (t) {\n                    var e = _.getSelectorFromElement(this);\n                    if (e) {\n                        var n = g(e)[0];\n                        if (n && g(n).hasClass(B)) {\n                            var i = l({}, g(n).data(), g(this).data()),\n                                o = this.getAttribute(\"data-slide-to\");\n                            o && (i.interval = !1), r._jQueryInterface.call(g(n), i), o && g(n).data(j).to(o), t.preventDefault();\n                        }\n                    }\n                }),\n                s(r, null, [\n                    {\n                        key: \"VERSION\",\n                        get: function () {\n                            return \"4.3.1\";\n                        },\n                    },\n                    {\n                        key: \"Default\",\n                        get: function () {\n                            return F;\n                        },\n                    },\n                ]),\n                r\n            );\n        })();\n    g(document).on(Q.CLICK_DATA_API, rt, lt._dataApiClickHandler),\n        g(window).on(Q.LOAD_DATA_API, function () {\n            for (var t = [].slice.call(document.querySelectorAll(st)), e = 0, n = t.length; e < n; e++) {\n                var i = g(t[e]);\n                lt._jQueryInterface.call(i, i.data());\n            }\n        }),\n        (g.fn[L] = lt._jQueryInterface),\n        (g.fn[L].Constructor = lt),\n        (g.fn[L].noConflict = function () {\n            return (g.fn[L] = x), lt._jQueryInterface;\n        });\n    var ct = \"collapse\",\n        ht = \"bs.collapse\",\n        ut = \".\" + ht,\n        ft = g.fn[ct],\n        dt = { toggle: !0, parent: \"\" },\n        gt = { toggle: \"boolean\", parent: \"(string|element)\" },\n        _t = { SHOW: \"show\" + ut, SHOWN: \"shown\" + ut, HIDE: \"hide\" + ut, HIDDEN: \"hidden\" + ut, CLICK_DATA_API: \"click\" + ut + \".data-api\" },\n        mt = \"show\",\n        pt = \"collapse\",\n        vt = \"collapsing\",\n        yt = \"collapsed\",\n        Et = \"width\",\n        Ct = \"height\",\n        Tt = \".show, .collapsing\",\n        St = '[data-toggle=\"collapse\"]',\n        bt = (function () {\n            function a(e, t) {\n                (this._isTransitioning = !1),\n                    (this._element = e),\n                    (this._config = this._getConfig(t)),\n                    (this._triggerArray = [].slice.call(document.querySelectorAll('[data-toggle=\"collapse\"][href=\"#' + e.id + '\"],[data-toggle=\"collapse\"][data-target=\"#' + e.id + '\"]')));\n                for (var n = [].slice.call(document.querySelectorAll(St)), i = 0, o = n.length; i < o; i++) {\n                    var r = n[i],\n                        s = _.getSelectorFromElement(r),\n                        a = [].slice.call(document.querySelectorAll(s)).filter(function (t) {\n                            return t === e;\n                        });\n                    null !== s && 0 < a.length && ((this._selector = s), this._triggerArray.push(r));\n                }\n                (this._parent = this._config.parent ? this._getParent() : null), this._config.parent || this._addAriaAndCollapsedClass(this._element, this._triggerArray), this._config.toggle && this.toggle();\n            }\n            var t = a.prototype;\n            return (\n                (t.toggle = function () {\n                    g(this._element).hasClass(mt) ? this.hide() : this.show();\n                }),\n                (t.show = function () {\n                    var t,\n                        e,\n                        n = this;\n                    if (\n                        !this._isTransitioning &&\n                        !g(this._element).hasClass(mt) &&\n                        (this._parent &&\n                            0 ===\n                                (t = [].slice.call(this._parent.querySelectorAll(Tt)).filter(function (t) {\n                                    return \"string\" == typeof n._config.parent ? t.getAttribute(\"data-parent\") === n._config.parent : t.classList.contains(pt);\n                                })).length &&\n                            (t = null),\n                        !(t && (e = g(t).not(this._selector).data(ht)) && e._isTransitioning))\n                    ) {\n                        var i = g.Event(_t.SHOW);\n                        if ((g(this._element).trigger(i), !i.isDefaultPrevented())) {\n                            t && (a._jQueryInterface.call(g(t).not(this._selector), \"hide\"), e || g(t).data(ht, null));\n                            var o = this._getDimension();\n                            g(this._element).removeClass(pt).addClass(vt), (this._element.style[o] = 0), this._triggerArray.length && g(this._triggerArray).removeClass(yt).attr(\"aria-expanded\", !0), this.setTransitioning(!0);\n                            var r = \"scroll\" + (o[0].toUpperCase() + o.slice(1)),\n                                s = _.getTransitionDurationFromElement(this._element);\n                            g(this._element)\n                                .one(_.TRANSITION_END, function () {\n                                    g(n._element).removeClass(vt).addClass(pt).addClass(mt), (n._element.style[o] = \"\"), n.setTransitioning(!1), g(n._element).trigger(_t.SHOWN);\n                                })\n                                .emulateTransitionEnd(s),\n                                (this._element.style[o] = this._element[r] + \"px\");\n                        }\n                    }\n                }),\n                (t.hide = function () {\n                    var t = this;\n                    if (!this._isTransitioning && g(this._element).hasClass(mt)) {\n                        var e = g.Event(_t.HIDE);\n                        if ((g(this._element).trigger(e), !e.isDefaultPrevented())) {\n                            var n = this._getDimension();\n                            (this._element.style[n] = this._element.getBoundingClientRect()[n] + \"px\"), _.reflow(this._element), g(this._element).addClass(vt).removeClass(pt).removeClass(mt);\n                            var i = this._triggerArray.length;\n                            if (0 < i)\n                                for (var o = 0; o < i; o++) {\n                                    var r = this._triggerArray[o],\n                                        s = _.getSelectorFromElement(r);\n                                    if (null !== s) g([].slice.call(document.querySelectorAll(s))).hasClass(mt) || g(r).addClass(yt).attr(\"aria-expanded\", !1);\n                                }\n                            this.setTransitioning(!0);\n                            this._element.style[n] = \"\";\n                            var a = _.getTransitionDurationFromElement(this._element);\n                            g(this._element)\n                                .one(_.TRANSITION_END, function () {\n                                    t.setTransitioning(!1), g(t._element).removeClass(vt).addClass(pt).trigger(_t.HIDDEN);\n                                })\n                                .emulateTransitionEnd(a);\n                        }\n                    }\n                }),\n                (t.setTransitioning = function (t) {\n                    this._isTransitioning = t;\n                }),\n                (t.dispose = function () {\n                    g.removeData(this._element, ht), (this._config = null), (this._parent = null), (this._element = null), (this._triggerArray = null), (this._isTransitioning = null);\n                }),\n                (t._getConfig = function (t) {\n                    return ((t = l({}, dt, t)).toggle = Boolean(t.toggle)), _.typeCheckConfig(ct, t, gt), t;\n                }),\n                (t._getDimension = function () {\n                    return g(this._element).hasClass(Et) ? Et : Ct;\n                }),\n                (t._getParent = function () {\n                    var t,\n                        n = this;\n                    _.isElement(this._config.parent) ? ((t = this._config.parent), \"undefined\" != typeof this._config.parent.jquery && (t = this._config.parent[0])) : (t = document.querySelector(this._config.parent));\n                    var e = '[data-toggle=\"collapse\"][data-parent=\"' + this._config.parent + '\"]',\n                        i = [].slice.call(t.querySelectorAll(e));\n                    return (\n                        g(i).each(function (t, e) {\n                            n._addAriaAndCollapsedClass(a._getTargetFromElement(e), [e]);\n                        }),\n                        t\n                    );\n                }),\n                (t._addAriaAndCollapsedClass = function (t, e) {\n                    var n = g(t).hasClass(mt);\n                    e.length && g(e).toggleClass(yt, !n).attr(\"aria-expanded\", n);\n                }),\n                (a._getTargetFromElement = function (t) {\n                    var e = _.getSelectorFromElement(t);\n                    return e ? document.querySelector(e) : null;\n                }),\n                (a._jQueryInterface = function (i) {\n                    return this.each(function () {\n                        var t = g(this),\n                            e = t.data(ht),\n                            n = l({}, dt, t.data(), \"object\" == typeof i && i ? i : {});\n                        if ((!e && n.toggle && /show|hide/.test(i) && (n.toggle = !1), e || ((e = new a(this, n)), t.data(ht, e)), \"string\" == typeof i)) {\n                            if (\"undefined\" == typeof e[i]) throw new TypeError('No method named \"' + i + '\"');\n                            e[i]();\n                        }\n                    });\n                }),\n                s(a, null, [\n                    {\n                        key: \"VERSION\",\n                        get: function () {\n                            return \"4.3.1\";\n                        },\n                    },\n                    {\n                        key: \"Default\",\n                        get: function () {\n                            return dt;\n                        },\n                    },\n                ]),\n                a\n            );\n        })();\n    g(document).on(_t.CLICK_DATA_API, St, function (t) {\n        \"A\" === t.currentTarget.tagName && t.preventDefault();\n        var n = g(this),\n            e = _.getSelectorFromElement(this),\n            i = [].slice.call(document.querySelectorAll(e));\n        g(i).each(function () {\n            var t = g(this),\n                e = t.data(ht) ? \"toggle\" : n.data();\n            bt._jQueryInterface.call(t, e);\n        });\n    }),\n        (g.fn[ct] = bt._jQueryInterface),\n        (g.fn[ct].Constructor = bt),\n        (g.fn[ct].noConflict = function () {\n            return (g.fn[ct] = ft), bt._jQueryInterface;\n        });\n    var It = \"dropdown\",\n        Dt = \"bs.dropdown\",\n        wt = \".\" + Dt,\n        At = \".data-api\",\n        Nt = g.fn[It],\n        Ot = new RegExp(\"38|40|27\"),\n        kt = { HIDE: \"hide\" + wt, HIDDEN: \"hidden\" + wt, SHOW: \"show\" + wt, SHOWN: \"shown\" + wt, CLICK: \"click\" + wt, CLICK_DATA_API: \"click\" + wt + At, KEYDOWN_DATA_API: \"keydown\" + wt + At, KEYUP_DATA_API: \"keyup\" + wt + At },\n        Pt = \"disabled\",\n        Lt = \"show\",\n        jt = \"dropup\",\n        Ht = \"dropright\",\n        Rt = \"dropleft\",\n        xt = \"dropdown-menu-right\",\n        Ft = \"position-static\",\n        Ut = '[data-toggle=\"dropdown\"]',\n        Wt = \".dropdown form\",\n        qt = \".dropdown-menu\",\n        Mt = \".navbar-nav\",\n        Kt = \".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)\",\n        Qt = \"top-start\",\n        Bt = \"top-end\",\n        Vt = \"bottom-start\",\n        Yt = \"bottom-end\",\n        zt = \"right-start\",\n        Xt = \"left-start\",\n        $t = { offset: 0, flip: !0, boundary: \"scrollParent\", reference: \"toggle\", display: \"dynamic\" },\n        Gt = { offset: \"(number|string|function)\", flip: \"boolean\", boundary: \"(string|element)\", reference: \"(string|element)\", display: \"string\" },\n        Jt = (function () {\n            function c(t, e) {\n                (this._element = t), (this._popper = null), (this._config = this._getConfig(e)), (this._menu = this._getMenuElement()), (this._inNavbar = this._detectNavbar()), this._addEventListeners();\n            }\n            var t = c.prototype;\n            return (\n                (t.toggle = function () {\n                    if (!this._element.disabled && !g(this._element).hasClass(Pt)) {\n                        var t = c._getParentFromElement(this._element),\n                            e = g(this._menu).hasClass(Lt);\n                        if ((c._clearMenus(), !e)) {\n                            var n = { relatedTarget: this._element },\n                                i = g.Event(kt.SHOW, n);\n                            if ((g(t).trigger(i), !i.isDefaultPrevented())) {\n                                if (!this._inNavbar) {\n                                    if (\"undefined\" == typeof u) throw new TypeError(\"Bootstrap's dropdowns require Popper.js (https://popper.js.org/)\");\n                                    var o = this._element;\n                                    \"parent\" === this._config.reference\n                                        ? (o = t)\n                                        : _.isElement(this._config.reference) && ((o = this._config.reference), \"undefined\" != typeof this._config.reference.jquery && (o = this._config.reference[0])),\n                                        \"scrollParent\" !== this._config.boundary && g(t).addClass(Ft),\n                                        (this._popper = new u(o, this._menu, this._getPopperConfig()));\n                                }\n                                \"ontouchstart\" in document.documentElement && 0 === g(t).closest(Mt).length && g(document.body).children().on(\"mouseover\", null, g.noop),\n                                    this._element.focus(),\n                                    this._element.setAttribute(\"aria-expanded\", !0),\n                                    g(this._menu).toggleClass(Lt),\n                                    g(t).toggleClass(Lt).trigger(g.Event(kt.SHOWN, n));\n                            }\n                        }\n                    }\n                }),\n                (t.show = function () {\n                    if (!(this._element.disabled || g(this._element).hasClass(Pt) || g(this._menu).hasClass(Lt))) {\n                        var t = { relatedTarget: this._element },\n                            e = g.Event(kt.SHOW, t),\n                            n = c._getParentFromElement(this._element);\n                        g(n).trigger(e), e.isDefaultPrevented() || (g(this._menu).toggleClass(Lt), g(n).toggleClass(Lt).trigger(g.Event(kt.SHOWN, t)));\n                    }\n                }),\n                (t.hide = function () {\n                    if (!this._element.disabled && !g(this._element).hasClass(Pt) && g(this._menu).hasClass(Lt)) {\n                        var t = { relatedTarget: this._element },\n                            e = g.Event(kt.HIDE, t),\n                            n = c._getParentFromElement(this._element);\n                        g(n).trigger(e), e.isDefaultPrevented() || (g(this._menu).toggleClass(Lt), g(n).toggleClass(Lt).trigger(g.Event(kt.HIDDEN, t)));\n                    }\n                }),\n                (t.dispose = function () {\n                    g.removeData(this._element, Dt), g(this._element).off(wt), (this._element = null), (this._menu = null) !== this._popper && (this._popper.destroy(), (this._popper = null));\n                }),\n                (t.update = function () {\n                    (this._inNavbar = this._detectNavbar()), null !== this._popper && this._popper.scheduleUpdate();\n                }),\n                (t._addEventListeners = function () {\n                    var e = this;\n                    g(this._element).on(kt.CLICK, function (t) {\n                        t.preventDefault(), t.stopPropagation(), e.toggle();\n                    });\n                }),\n                (t._getConfig = function (t) {\n                    return (t = l({}, this.constructor.Default, g(this._element).data(), t)), _.typeCheckConfig(It, t, this.constructor.DefaultType), t;\n                }),\n                (t._getMenuElement = function () {\n                    if (!this._menu) {\n                        var t = c._getParentFromElement(this._element);\n                        t && (this._menu = t.querySelector(qt));\n                    }\n                    return this._menu;\n                }),\n                (t._getPlacement = function () {\n                    var t = g(this._element.parentNode),\n                        e = Vt;\n                    return t.hasClass(jt) ? ((e = Qt), g(this._menu).hasClass(xt) && (e = Bt)) : t.hasClass(Ht) ? (e = zt) : t.hasClass(Rt) ? (e = Xt) : g(this._menu).hasClass(xt) && (e = Yt), e;\n                }),\n                (t._detectNavbar = function () {\n                    return 0 < g(this._element).closest(\".navbar\").length;\n                }),\n                (t._getOffset = function () {\n                    var e = this,\n                        t = {};\n                    return (\n                        \"function\" == typeof this._config.offset\n                            ? (t.fn = function (t) {\n                                  return (t.offsets = l({}, t.offsets, e._config.offset(t.offsets, e._element) || {})), t;\n                              })\n                            : (t.offset = this._config.offset),\n                        t\n                    );\n                }),\n                (t._getPopperConfig = function () {\n                    var t = { placement: this._getPlacement(), modifiers: { offset: this._getOffset(), flip: { enabled: this._config.flip }, preventOverflow: { boundariesElement: this._config.boundary } } };\n                    return \"static\" === this._config.display && (t.modifiers.applyStyle = { enabled: !1 }), t;\n                }),\n                (c._jQueryInterface = function (e) {\n                    return this.each(function () {\n                        var t = g(this).data(Dt);\n                        if ((t || ((t = new c(this, \"object\" == typeof e ? e : null)), g(this).data(Dt, t)), \"string\" == typeof e)) {\n                            if (\"undefined\" == typeof t[e]) throw new TypeError('No method named \"' + e + '\"');\n                            t[e]();\n                        }\n                    });\n                }),\n                (c._clearMenus = function (t) {\n                    if (!t || (3 !== t.which && (\"keyup\" !== t.type || 9 === t.which)))\n                        for (var e = [].slice.call(document.querySelectorAll(Ut)), n = 0, i = e.length; n < i; n++) {\n                            var o = c._getParentFromElement(e[n]),\n                                r = g(e[n]).data(Dt),\n                                s = { relatedTarget: e[n] };\n                            if ((t && \"click\" === t.type && (s.clickEvent = t), r)) {\n                                var a = r._menu;\n                                if (g(o).hasClass(Lt) && !(t && ((\"click\" === t.type && /input|textarea/i.test(t.target.tagName)) || (\"keyup\" === t.type && 9 === t.which)) && g.contains(o, t.target))) {\n                                    var l = g.Event(kt.HIDE, s);\n                                    g(o).trigger(l),\n                                        l.isDefaultPrevented() ||\n                                            (\"ontouchstart\" in document.documentElement && g(document.body).children().off(\"mouseover\", null, g.noop),\n                                            e[n].setAttribute(\"aria-expanded\", \"false\"),\n                                            g(a).removeClass(Lt),\n                                            g(o).removeClass(Lt).trigger(g.Event(kt.HIDDEN, s)));\n                                }\n                            }\n                        }\n                }),\n                (c._getParentFromElement = function (t) {\n                    var e,\n                        n = _.getSelectorFromElement(t);\n                    return n && (e = document.querySelector(n)), e || t.parentNode;\n                }),\n                (c._dataApiKeydownHandler = function (t) {\n                    if (\n                        (/input|textarea/i.test(t.target.tagName) ? !(32 === t.which || (27 !== t.which && ((40 !== t.which && 38 !== t.which) || g(t.target).closest(qt).length))) : Ot.test(t.which)) &&\n                        (t.preventDefault(), t.stopPropagation(), !this.disabled && !g(this).hasClass(Pt))\n                    ) {\n                        var e = c._getParentFromElement(this),\n                            n = g(e).hasClass(Lt);\n                        if (n && (!n || (27 !== t.which && 32 !== t.which))) {\n                            var i = [].slice.call(e.querySelectorAll(Kt));\n                            if (0 !== i.length) {\n                                var o = i.indexOf(t.target);\n                                38 === t.which && 0 < o && o--, 40 === t.which && o < i.length - 1 && o++, o < 0 && (o = 0), i[o].focus();\n                            }\n                        } else {\n                            if (27 === t.which) {\n                                var r = e.querySelector(Ut);\n                                g(r).trigger(\"focus\");\n                            }\n                            g(this).trigger(\"click\");\n                        }\n                    }\n                }),\n                s(c, null, [\n                    {\n                        key: \"VERSION\",\n                        get: function () {\n                            return \"4.3.1\";\n                        },\n                    },\n                    {\n                        key: \"Default\",\n                        get: function () {\n                            return $t;\n                        },\n                    },\n                    {\n                        key: \"DefaultType\",\n                        get: function () {\n                            return Gt;\n                        },\n                    },\n                ]),\n                c\n            );\n        })();\n    g(document)\n        .on(kt.KEYDOWN_DATA_API, Ut, Jt._dataApiKeydownHandler)\n        .on(kt.KEYDOWN_DATA_API, qt, Jt._dataApiKeydownHandler)\n        .on(kt.CLICK_DATA_API + \" \" + kt.KEYUP_DATA_API, Jt._clearMenus)\n        .on(kt.CLICK_DATA_API, Ut, function (t) {\n            t.preventDefault(), t.stopPropagation(), Jt._jQueryInterface.call(g(this), \"toggle\");\n        })\n        .on(kt.CLICK_DATA_API, Wt, function (t) {\n            t.stopPropagation();\n        }),\n        (g.fn[It] = Jt._jQueryInterface),\n        (g.fn[It].Constructor = Jt),\n        (g.fn[It].noConflict = function () {\n            return (g.fn[It] = Nt), Jt._jQueryInterface;\n        });\n    var Zt = \"modal\",\n        te = \"bs.modal\",\n        ee = \".\" + te,\n        ne = g.fn[Zt],\n        ie = { backdrop: !0, keyboard: !0, focus: !0, show: !0 },\n        oe = { backdrop: \"(boolean|string)\", keyboard: \"boolean\", focus: \"boolean\", show: \"boolean\" },\n        re = {\n            HIDE: \"hide\" + ee,\n            HIDDEN: \"hidden\" + ee,\n            SHOW: \"show\" + ee,\n            SHOWN: \"shown\" + ee,\n            FOCUSIN: \"focusin\" + ee,\n            RESIZE: \"resize\" + ee,\n            CLICK_DISMISS: \"click.dismiss\" + ee,\n            KEYDOWN_DISMISS: \"keydown.dismiss\" + ee,\n            MOUSEUP_DISMISS: \"mouseup.dismiss\" + ee,\n            MOUSEDOWN_DISMISS: \"mousedown.dismiss\" + ee,\n            CLICK_DATA_API: \"click\" + ee + \".data-api\",\n        },\n        se = \"modal-dialog-scrollable\",\n        ae = \"modal-scrollbar-measure\",\n        le = \"modal-backdrop\",\n        ce = \"modal-open\",\n        he = \"fade\",\n        ue = \"show\",\n        fe = \".modal-dialog\",\n        de = \".modal-body\",\n        ge = '[data-toggle=\"modal\"]',\n        _e = '[data-dismiss=\"modal\"]',\n        me = \".fixed-top, .fixed-bottom, .is-fixed, .sticky-top\",\n        pe = \".sticky-top\",\n        ve = (function () {\n            function o(t, e) {\n                (this._config = this._getConfig(e)),\n                    (this._element = t),\n                    (this._dialog = t.querySelector(fe)),\n                    (this._backdrop = null),\n                    (this._isShown = !1),\n                    (this._isBodyOverflowing = !1),\n                    (this._ignoreBackdropClick = !1),\n                    (this._isTransitioning = !1),\n                    (this._scrollbarWidth = 0);\n            }\n            var t = o.prototype;\n            return (\n                (t.toggle = function (t) {\n                    return this._isShown ? this.hide() : this.show(t);\n                }),\n                (t.show = function (t) {\n                    var e = this;\n                    if (!this._isShown && !this._isTransitioning) {\n                        g(this._element).hasClass(he) && (this._isTransitioning = !0);\n                        var n = g.Event(re.SHOW, { relatedTarget: t });\n                        g(this._element).trigger(n),\n                            this._isShown ||\n                                n.isDefaultPrevented() ||\n                                ((this._isShown = !0),\n                                this._checkScrollbar(),\n                                this._setScrollbar(),\n                                this._adjustDialog(),\n                                this._setEscapeEvent(),\n                                this._setResizeEvent(),\n                                g(this._element).on(re.CLICK_DISMISS, _e, function (t) {\n                                    return e.hide(t);\n                                }),\n                                g(this._dialog).on(re.MOUSEDOWN_DISMISS, function () {\n                                    g(e._element).one(re.MOUSEUP_DISMISS, function (t) {\n                                        g(t.target).is(e._element) && (e._ignoreBackdropClick = !0);\n                                    });\n                                }),\n                                this._showBackdrop(function () {\n                                    return e._showElement(t);\n                                }));\n                    }\n                }),\n                (t.hide = function (t) {\n                    var e = this;\n                    if ((t && t.preventDefault(), this._isShown && !this._isTransitioning)) {\n                        var n = g.Event(re.HIDE);\n                        if ((g(this._element).trigger(n), this._isShown && !n.isDefaultPrevented())) {\n                            this._isShown = !1;\n                            var i = g(this._element).hasClass(he);\n                            if (\n                                (i && (this._isTransitioning = !0),\n                                this._setEscapeEvent(),\n                                this._setResizeEvent(),\n                                g(document).off(re.FOCUSIN),\n                                g(this._element).removeClass(ue),\n                                g(this._element).off(re.CLICK_DISMISS),\n                                g(this._dialog).off(re.MOUSEDOWN_DISMISS),\n                                i)\n                            ) {\n                                var o = _.getTransitionDurationFromElement(this._element);\n                                g(this._element)\n                                    .one(_.TRANSITION_END, function (t) {\n                                        return e._hideModal(t);\n                                    })\n                                    .emulateTransitionEnd(o);\n                            } else this._hideModal();\n                        }\n                    }\n                }),\n                (t.dispose = function () {\n                    [window, this._element, this._dialog].forEach(function (t) {\n                        return g(t).off(ee);\n                    }),\n                        g(document).off(re.FOCUSIN),\n                        g.removeData(this._element, te),\n                        (this._config = null),\n                        (this._element = null),\n                        (this._dialog = null),\n                        (this._backdrop = null),\n                        (this._isShown = null),\n                        (this._isBodyOverflowing = null),\n                        (this._ignoreBackdropClick = null),\n                        (this._isTransitioning = null),\n                        (this._scrollbarWidth = null);\n                }),\n                (t.handleUpdate = function () {\n                    this._adjustDialog();\n                }),\n                (t._getConfig = function (t) {\n                    return (t = l({}, ie, t)), _.typeCheckConfig(Zt, t, oe), t;\n                }),\n                (t._showElement = function (t) {\n                    var e = this,\n                        n = g(this._element).hasClass(he);\n                    (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE) || document.body.appendChild(this._element),\n                        (this._element.style.display = \"block\"),\n                        this._element.removeAttribute(\"aria-hidden\"),\n                        this._element.setAttribute(\"aria-modal\", !0),\n                        g(this._dialog).hasClass(se) ? (this._dialog.querySelector(de).scrollTop = 0) : (this._element.scrollTop = 0),\n                        n && _.reflow(this._element),\n                        g(this._element).addClass(ue),\n                        this._config.focus && this._enforceFocus();\n                    var i = g.Event(re.SHOWN, { relatedTarget: t }),\n                        o = function () {\n                            e._config.focus && e._element.focus(), (e._isTransitioning = !1), g(e._element).trigger(i);\n                        };\n                    if (n) {\n                        var r = _.getTransitionDurationFromElement(this._dialog);\n                        g(this._dialog).one(_.TRANSITION_END, o).emulateTransitionEnd(r);\n                    } else o();\n                }),\n                (t._enforceFocus = function () {\n                    var e = this;\n                    g(document)\n                        .off(re.FOCUSIN)\n                        .on(re.FOCUSIN, function (t) {\n                            document !== t.target && e._element !== t.target && 0 === g(e._element).has(t.target).length && e._element.focus();\n                        });\n                }),\n                (t._setEscapeEvent = function () {\n                    var e = this;\n                    this._isShown && this._config.keyboard\n                        ? g(this._element).on(re.KEYDOWN_DISMISS, function (t) {\n                              27 === t.which && (t.preventDefault(), e.hide());\n                          })\n                        : this._isShown || g(this._element).off(re.KEYDOWN_DISMISS);\n                }),\n                (t._setResizeEvent = function () {\n                    var e = this;\n                    this._isShown\n                        ? g(window).on(re.RESIZE, function (t) {\n                              return e.handleUpdate(t);\n                          })\n                        : g(window).off(re.RESIZE);\n                }),\n                (t._hideModal = function () {\n                    var t = this;\n                    (this._element.style.display = \"none\"),\n                        this._element.setAttribute(\"aria-hidden\", !0),\n                        this._element.removeAttribute(\"aria-modal\"),\n                        (this._isTransitioning = !1),\n                        this._showBackdrop(function () {\n                            g(document.body).removeClass(ce), t._resetAdjustments(), t._resetScrollbar(), g(t._element).trigger(re.HIDDEN);\n                        });\n                }),\n                (t._removeBackdrop = function () {\n                    this._backdrop && (g(this._backdrop).remove(), (this._backdrop = null));\n                }),\n                (t._showBackdrop = function (t) {\n                    var e = this,\n                        n = g(this._element).hasClass(he) ? he : \"\";\n                    if (this._isShown && this._config.backdrop) {\n                        if (\n                            ((this._backdrop = document.createElement(\"div\")),\n                            (this._backdrop.className = le),\n                            n && this._backdrop.classList.add(n),\n                            g(this._backdrop).appendTo(document.body),\n                            g(this._element).on(re.CLICK_DISMISS, function (t) {\n                                e._ignoreBackdropClick ? (e._ignoreBackdropClick = !1) : t.target === t.currentTarget && (\"static\" === e._config.backdrop ? e._element.focus() : e.hide());\n                            }),\n                            n && _.reflow(this._backdrop),\n                            g(this._backdrop).addClass(ue),\n                            !t)\n                        )\n                            return;\n                        if (!n) return void t();\n                        var i = _.getTransitionDurationFromElement(this._backdrop);\n                        g(this._backdrop).one(_.TRANSITION_END, t).emulateTransitionEnd(i);\n                    } else if (!this._isShown && this._backdrop) {\n                        g(this._backdrop).removeClass(ue);\n                        var o = function () {\n                            e._removeBackdrop(), t && t();\n                        };\n                        if (g(this._element).hasClass(he)) {\n                            var r = _.getTransitionDurationFromElement(this._backdrop);\n                            g(this._backdrop).one(_.TRANSITION_END, o).emulateTransitionEnd(r);\n                        } else o();\n                    } else t && t();\n                }),\n                (t._adjustDialog = function () {\n                    var t = this._element.scrollHeight > document.documentElement.clientHeight;\n                    !this._isBodyOverflowing && t && (this._element.style.paddingLeft = this._scrollbarWidth + \"px\"), this._isBodyOverflowing && !t && (this._element.style.paddingRight = this._scrollbarWidth + \"px\");\n                }),\n                (t._resetAdjustments = function () {\n                    (this._element.style.paddingLeft = \"\"), (this._element.style.paddingRight = \"\");\n                }),\n                (t._checkScrollbar = function () {\n                    var t = document.body.getBoundingClientRect();\n                    (this._isBodyOverflowing = t.left + t.right < window.innerWidth), (this._scrollbarWidth = this._getScrollbarWidth());\n                }),\n                (t._setScrollbar = function () {\n                    var o = this;\n                    if (this._isBodyOverflowing) {\n                        var t = [].slice.call(document.querySelectorAll(me)),\n                            e = [].slice.call(document.querySelectorAll(pe));\n                        g(t).each(function (t, e) {\n                            var n = e.style.paddingRight,\n                                i = g(e).css(\"padding-right\");\n                            g(e)\n                                .data(\"padding-right\", n)\n                                .css(\"padding-right\", parseFloat(i) + o._scrollbarWidth + \"px\");\n                        }),\n                            g(e).each(function (t, e) {\n                                var n = e.style.marginRight,\n                                    i = g(e).css(\"margin-right\");\n                                g(e)\n                                    .data(\"margin-right\", n)\n                                    .css(\"margin-right\", parseFloat(i) - o._scrollbarWidth + \"px\");\n                            });\n                        var n = document.body.style.paddingRight,\n                            i = g(document.body).css(\"padding-right\");\n                        g(document.body)\n                            .data(\"padding-right\", n)\n                            .css(\"padding-right\", parseFloat(i) + this._scrollbarWidth + \"px\");\n                    }\n                    g(document.body).addClass(ce);\n                }),\n                (t._resetScrollbar = function () {\n                    var t = [].slice.call(document.querySelectorAll(me));\n                    g(t).each(function (t, e) {\n                        var n = g(e).data(\"padding-right\");\n                        g(e).removeData(\"padding-right\"), (e.style.paddingRight = n || \"\");\n                    });\n                    var e = [].slice.call(document.querySelectorAll(\"\" + pe));\n                    g(e).each(function (t, e) {\n                        var n = g(e).data(\"margin-right\");\n                        \"undefined\" != typeof n && g(e).css(\"margin-right\", n).removeData(\"margin-right\");\n                    });\n                    var n = g(document.body).data(\"padding-right\");\n                    g(document.body).removeData(\"padding-right\"), (document.body.style.paddingRight = n || \"\");\n                }),\n                (t._getScrollbarWidth = function () {\n                    var t = document.createElement(\"div\");\n                    (t.className = ae), document.body.appendChild(t);\n                    var e = t.getBoundingClientRect().width - t.clientWidth;\n                    return document.body.removeChild(t), e;\n                }),\n                (o._jQueryInterface = function (n, i) {\n                    return this.each(function () {\n                        var t = g(this).data(te),\n                            e = l({}, ie, g(this).data(), \"object\" == typeof n && n ? n : {});\n                        if ((t || ((t = new o(this, e)), g(this).data(te, t)), \"string\" == typeof n)) {\n                            if (\"undefined\" == typeof t[n]) throw new TypeError('No method named \"' + n + '\"');\n                            t[n](i);\n                        } else e.show && t.show(i);\n                    });\n                }),\n                s(o, null, [\n                    {\n                        key: \"VERSION\",\n                        get: function () {\n                            return \"4.3.1\";\n                        },\n                    },\n                    {\n                        key: \"Default\",\n                        get: function () {\n                            return ie;\n                        },\n                    },\n                ]),\n                o\n            );\n        })();\n    g(document).on(re.CLICK_DATA_API, ge, function (t) {\n        var e,\n            n = this,\n            i = _.getSelectorFromElement(this);\n        i && (e = document.querySelector(i));\n        var o = g(e).data(te) ? \"toggle\" : l({}, g(e).data(), g(this).data());\n        (\"A\" !== this.tagName && \"AREA\" !== this.tagName) || t.preventDefault();\n        var r = g(e).one(re.SHOW, function (t) {\n            t.isDefaultPrevented() ||\n                r.one(re.HIDDEN, function () {\n                    g(n).is(\":visible\") && n.focus();\n                });\n        });\n        ve._jQueryInterface.call(g(e), o, this);\n    }),\n        (g.fn[Zt] = ve._jQueryInterface),\n        (g.fn[Zt].Constructor = ve),\n        (g.fn[Zt].noConflict = function () {\n            return (g.fn[Zt] = ne), ve._jQueryInterface;\n        });\n    var ye = [\"background\", \"cite\", \"href\", \"itemtype\", \"longdesc\", \"poster\", \"src\", \"xlink:href\"],\n        Ee = {\n            \"*\": [\"class\", \"dir\", \"id\", \"lang\", \"role\", /^aria-[\\w-]*$/i],\n            a: [\"target\", \"href\", \"title\", \"rel\"],\n            area: [],\n            b: [],\n            br: [],\n            col: [],\n            code: [],\n            div: [],\n            em: [],\n            hr: [],\n            h1: [],\n            h2: [],\n            h3: [],\n            h4: [],\n            h5: [],\n            h6: [],\n            i: [],\n            img: [\"src\", \"alt\", \"title\", \"width\", \"height\"],\n            li: [],\n            ol: [],\n            p: [],\n            pre: [],\n            s: [],\n            small: [],\n            span: [],\n            sub: [],\n            sup: [],\n            strong: [],\n            u: [],\n            ul: [],\n        },\n        Ce = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi,\n        Te = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;\n    function Se(t, s, e) {\n        if (0 === t.length) return t;\n        if (e && \"function\" == typeof e) return e(t);\n        for (\n            var n = new window.DOMParser().parseFromString(t, \"text/html\"),\n                a = Object.keys(s),\n                l = [].slice.call(n.body.querySelectorAll(\"*\")),\n                i = function (t, e) {\n                    var n = l[t],\n                        i = n.nodeName.toLowerCase();\n                    if (-1 === a.indexOf(n.nodeName.toLowerCase())) return n.parentNode.removeChild(n), \"continue\";\n                    var o = [].slice.call(n.attributes),\n                        r = [].concat(s[\"*\"] || [], s[i] || []);\n                    o.forEach(function (t) {\n                        (function (t, e) {\n                            var n = t.nodeName.toLowerCase();\n                            if (-1 !== e.indexOf(n)) return -1 === ye.indexOf(n) || Boolean(t.nodeValue.match(Ce) || t.nodeValue.match(Te));\n                            for (\n                                var i = e.filter(function (t) {\n                                        return t instanceof RegExp;\n                                    }),\n                                    o = 0,\n                                    r = i.length;\n                                o < r;\n                                o++\n                            )\n                                if (n.match(i[o])) return !0;\n                            return !1;\n                        })(t, r) || n.removeAttribute(t.nodeName);\n                    });\n                },\n                o = 0,\n                r = l.length;\n            o < r;\n            o++\n        )\n            i(o);\n        return n.body.innerHTML;\n    }\n    var be = \"tooltip\",\n        Ie = \"bs.tooltip\",\n        De = \".\" + Ie,\n        we = g.fn[be],\n        Ae = \"bs-tooltip\",\n        Ne = new RegExp(\"(^|\\\\s)\" + Ae + \"\\\\S+\", \"g\"),\n        Oe = [\"sanitize\", \"whiteList\", \"sanitizeFn\"],\n        ke = {\n            animation: \"boolean\",\n            template: \"string\",\n            title: \"(string|element|function)\",\n            trigger: \"string\",\n            delay: \"(number|object)\",\n            html: \"boolean\",\n            selector: \"(string|boolean)\",\n            placement: \"(string|function)\",\n            offset: \"(number|string|function)\",\n            container: \"(string|element|boolean)\",\n            fallbackPlacement: \"(string|array)\",\n            boundary: \"(string|element)\",\n            sanitize: \"boolean\",\n            sanitizeFn: \"(null|function)\",\n            whiteList: \"object\",\n        },\n        Pe = { AUTO: \"auto\", TOP: \"top\", RIGHT: \"right\", BOTTOM: \"bottom\", LEFT: \"left\" },\n        Le = {\n            animation: !0,\n            template: '<div class=\"tooltip\" role=\"tooltip\"><div class=\"arrow\"></div><div class=\"tooltip-inner\"></div></div>',\n            trigger: \"hover focus\",\n            title: \"\",\n            delay: 0,\n            html: !1,\n            selector: !1,\n            placement: \"top\",\n            offset: 0,\n            container: !1,\n            fallbackPlacement: \"flip\",\n            boundary: \"scrollParent\",\n            sanitize: !0,\n            sanitizeFn: null,\n            whiteList: Ee,\n        },\n        je = \"show\",\n        He = \"out\",\n        Re = {\n            HIDE: \"hide\" + De,\n            HIDDEN: \"hidden\" + De,\n            SHOW: \"show\" + De,\n            SHOWN: \"shown\" + De,\n            INSERTED: \"inserted\" + De,\n            CLICK: \"click\" + De,\n            FOCUSIN: \"focusin\" + De,\n            FOCUSOUT: \"focusout\" + De,\n            MOUSEENTER: \"mouseenter\" + De,\n            MOUSELEAVE: \"mouseleave\" + De,\n        },\n        xe = \"fade\",\n        Fe = \"show\",\n        Ue = \".tooltip-inner\",\n        We = \".arrow\",\n        qe = \"hover\",\n        Me = \"focus\",\n        Ke = \"click\",\n        Qe = \"manual\",\n        Be = (function () {\n            function i(t, e) {\n                if (\"undefined\" == typeof u) throw new TypeError(\"Bootstrap's tooltips require Popper.js (https://popper.js.org/)\");\n                (this._isEnabled = !0), (this._timeout = 0), (this._hoverState = \"\"), (this._activeTrigger = {}), (this._popper = null), (this.element = t), (this.config = this._getConfig(e)), (this.tip = null), this._setListeners();\n            }\n            var t = i.prototype;\n            return (\n                (t.enable = function () {\n                    this._isEnabled = !0;\n                }),\n                (t.disable = function () {\n                    this._isEnabled = !1;\n                }),\n                (t.toggleEnabled = function () {\n                    this._isEnabled = !this._isEnabled;\n                }),\n                (t.toggle = function (t) {\n                    if (this._isEnabled)\n                        if (t) {\n                            var e = this.constructor.DATA_KEY,\n                                n = g(t.currentTarget).data(e);\n                            n || ((n = new this.constructor(t.currentTarget, this._getDelegateConfig())), g(t.currentTarget).data(e, n)),\n                                (n._activeTrigger.click = !n._activeTrigger.click),\n                                n._isWithActiveTrigger() ? n._enter(null, n) : n._leave(null, n);\n                        } else {\n                            if (g(this.getTipElement()).hasClass(Fe)) return void this._leave(null, this);\n                            this._enter(null, this);\n                        }\n                }),\n                (t.dispose = function () {\n                    clearTimeout(this._timeout),\n                        g.removeData(this.element, this.constructor.DATA_KEY),\n                        g(this.element).off(this.constructor.EVENT_KEY),\n                        g(this.element).closest(\".modal\").off(\"hide.bs.modal\"),\n                        this.tip && g(this.tip).remove(),\n                        (this._isEnabled = null),\n                        (this._timeout = null),\n                        (this._hoverState = null),\n                        (this._activeTrigger = null) !== this._popper && this._popper.destroy(),\n                        (this._popper = null),\n                        (this.element = null),\n                        (this.config = null),\n                        (this.tip = null);\n                }),\n                (t.show = function () {\n                    var e = this;\n                    if (\"none\" === g(this.element).css(\"display\")) throw new Error(\"Please use show on visible elements\");\n                    var t = g.Event(this.constructor.Event.SHOW);\n                    if (this.isWithContent() && this._isEnabled) {\n                        g(this.element).trigger(t);\n                        var n = _.findShadowRoot(this.element),\n                            i = g.contains(null !== n ? n : this.element.ownerDocument.documentElement, this.element);\n                        if (t.isDefaultPrevented() || !i) return;\n                        var o = this.getTipElement(),\n                            r = _.getUID(this.constructor.NAME);\n                        o.setAttribute(\"id\", r), this.element.setAttribute(\"aria-describedby\", r), this.setContent(), this.config.animation && g(o).addClass(xe);\n                        var s = \"function\" == typeof this.config.placement ? this.config.placement.call(this, o, this.element) : this.config.placement,\n                            a = this._getAttachment(s);\n                        this.addAttachmentClass(a);\n                        var l = this._getContainer();\n                        g(o).data(this.constructor.DATA_KEY, this),\n                            g.contains(this.element.ownerDocument.documentElement, this.tip) || g(o).appendTo(l),\n                            g(this.element).trigger(this.constructor.Event.INSERTED),\n                            (this._popper = new u(this.element, o, {\n                                placement: a,\n                                modifiers: { offset: this._getOffset(), flip: { behavior: this.config.fallbackPlacement }, arrow: { element: We }, preventOverflow: { boundariesElement: this.config.boundary } },\n                                onCreate: function (t) {\n                                    t.originalPlacement !== t.placement && e._handlePopperPlacementChange(t);\n                                },\n                                onUpdate: function (t) {\n                                    return e._handlePopperPlacementChange(t);\n                                },\n                            })),\n                            g(o).addClass(Fe),\n                            \"ontouchstart\" in document.documentElement && g(document.body).children().on(\"mouseover\", null, g.noop);\n                        var c = function () {\n                            e.config.animation && e._fixTransition();\n                            var t = e._hoverState;\n                            (e._hoverState = null), g(e.element).trigger(e.constructor.Event.SHOWN), t === He && e._leave(null, e);\n                        };\n                        if (g(this.tip).hasClass(xe)) {\n                            var h = _.getTransitionDurationFromElement(this.tip);\n                            g(this.tip).one(_.TRANSITION_END, c).emulateTransitionEnd(h);\n                        } else c();\n                    }\n                }),\n                (t.hide = function (t) {\n                    var e = this,\n                        n = this.getTipElement(),\n                        i = g.Event(this.constructor.Event.HIDE),\n                        o = function () {\n                            e._hoverState !== je && n.parentNode && n.parentNode.removeChild(n),\n                                e._cleanTipClass(),\n                                e.element.removeAttribute(\"aria-describedby\"),\n                                g(e.element).trigger(e.constructor.Event.HIDDEN),\n                                null !== e._popper && e._popper.destroy(),\n                                t && t();\n                        };\n                    if ((g(this.element).trigger(i), !i.isDefaultPrevented())) {\n                        if (\n                            (g(n).removeClass(Fe),\n                            \"ontouchstart\" in document.documentElement && g(document.body).children().off(\"mouseover\", null, g.noop),\n                            (this._activeTrigger[Ke] = !1),\n                            (this._activeTrigger[Me] = !1),\n                            (this._activeTrigger[qe] = !1),\n                            g(this.tip).hasClass(xe))\n                        ) {\n                            var r = _.getTransitionDurationFromElement(n);\n                            g(n).one(_.TRANSITION_END, o).emulateTransitionEnd(r);\n                        } else o();\n                        this._hoverState = \"\";\n                    }\n                }),\n                (t.update = function () {\n                    null !== this._popper && this._popper.scheduleUpdate();\n                }),\n                (t.isWithContent = function () {\n                    return Boolean(this.getTitle());\n                }),\n                (t.addAttachmentClass = function (t) {\n                    g(this.getTipElement()).addClass(Ae + \"-\" + t);\n                }),\n                (t.getTipElement = function () {\n                    return (this.tip = this.tip || g(this.config.template)[0]), this.tip;\n                }),\n                (t.setContent = function () {\n                    var t = this.getTipElement();\n                    this.setElementContent(g(t.querySelectorAll(Ue)), this.getTitle()), g(t).removeClass(xe + \" \" + Fe);\n                }),\n                (t.setElementContent = function (t, e) {\n                    \"object\" != typeof e || (!e.nodeType && !e.jquery)\n                        ? this.config.html\n                            ? (this.config.sanitize && (e = Se(e, this.config.whiteList, this.config.sanitizeFn)), t.html(e))\n                            : t.text(e)\n                        : this.config.html\n                        ? g(e).parent().is(t) || t.empty().append(e)\n                        : t.text(g(e).text());\n                }),\n                (t.getTitle = function () {\n                    var t = this.element.getAttribute(\"data-original-title\");\n                    return t || (t = \"function\" == typeof this.config.title ? this.config.title.call(this.element) : this.config.title), t;\n                }),\n                (t._getOffset = function () {\n                    var e = this,\n                        t = {};\n                    return (\n                        \"function\" == typeof this.config.offset\n                            ? (t.fn = function (t) {\n                                  return (t.offsets = l({}, t.offsets, e.config.offset(t.offsets, e.element) || {})), t;\n                              })\n                            : (t.offset = this.config.offset),\n                        t\n                    );\n                }),\n                (t._getContainer = function () {\n                    return !1 === this.config.container ? document.body : _.isElement(this.config.container) ? g(this.config.container) : g(document).find(this.config.container);\n                }),\n                (t._getAttachment = function (t) {\n                    return Pe[t.toUpperCase()];\n                }),\n                (t._setListeners = function () {\n                    var i = this;\n                    this.config.trigger.split(\" \").forEach(function (t) {\n                        if (\"click\" === t)\n                            g(i.element).on(i.constructor.Event.CLICK, i.config.selector, function (t) {\n                                return i.toggle(t);\n                            });\n                        else if (t !== Qe) {\n                            var e = t === qe ? i.constructor.Event.MOUSEENTER : i.constructor.Event.FOCUSIN,\n                                n = t === qe ? i.constructor.Event.MOUSELEAVE : i.constructor.Event.FOCUSOUT;\n                            g(i.element)\n                                .on(e, i.config.selector, function (t) {\n                                    return i._enter(t);\n                                })\n                                .on(n, i.config.selector, function (t) {\n                                    return i._leave(t);\n                                });\n                        }\n                    }),\n                        g(this.element)\n                            .closest(\".modal\")\n                            .on(\"hide.bs.modal\", function () {\n                                i.element && i.hide();\n                            }),\n                        this.config.selector ? (this.config = l({}, this.config, { trigger: \"manual\", selector: \"\" })) : this._fixTitle();\n                }),\n                (t._fixTitle = function () {\n                    var t = typeof this.element.getAttribute(\"data-original-title\");\n                    (this.element.getAttribute(\"title\") || \"string\" !== t) && (this.element.setAttribute(\"data-original-title\", this.element.getAttribute(\"title\") || \"\"), this.element.setAttribute(\"title\", \"\"));\n                }),\n                (t._enter = function (t, e) {\n                    var n = this.constructor.DATA_KEY;\n                    (e = e || g(t.currentTarget).data(n)) || ((e = new this.constructor(t.currentTarget, this._getDelegateConfig())), g(t.currentTarget).data(n, e)),\n                        t && (e._activeTrigger[\"focusin\" === t.type ? Me : qe] = !0),\n                        g(e.getTipElement()).hasClass(Fe) || e._hoverState === je\n                            ? (e._hoverState = je)\n                            : (clearTimeout(e._timeout),\n                              (e._hoverState = je),\n                              e.config.delay && e.config.delay.show\n                                  ? (e._timeout = setTimeout(function () {\n                                        e._hoverState === je && e.show();\n                                    }, e.config.delay.show))\n                                  : e.show());\n                }),\n                (t._leave = function (t, e) {\n                    var n = this.constructor.DATA_KEY;\n                    (e = e || g(t.currentTarget).data(n)) || ((e = new this.constructor(t.currentTarget, this._getDelegateConfig())), g(t.currentTarget).data(n, e)),\n                        t && (e._activeTrigger[\"focusout\" === t.type ? Me : qe] = !1),\n                        e._isWithActiveTrigger() ||\n                            (clearTimeout(e._timeout),\n                            (e._hoverState = He),\n                            e.config.delay && e.config.delay.hide\n                                ? (e._timeout = setTimeout(function () {\n                                      e._hoverState === He && e.hide();\n                                  }, e.config.delay.hide))\n                                : e.hide());\n                }),\n                (t._isWithActiveTrigger = function () {\n                    for (var t in this._activeTrigger) if (this._activeTrigger[t]) return !0;\n                    return !1;\n                }),\n                (t._getConfig = function (t) {\n                    var e = g(this.element).data();\n                    return (\n                        Object.keys(e).forEach(function (t) {\n                            -1 !== Oe.indexOf(t) && delete e[t];\n                        }),\n                        \"number\" == typeof (t = l({}, this.constructor.Default, e, \"object\" == typeof t && t ? t : {})).delay && (t.delay = { show: t.delay, hide: t.delay }),\n                        \"number\" == typeof t.title && (t.title = t.title.toString()),\n                        \"number\" == typeof t.content && (t.content = t.content.toString()),\n                        _.typeCheckConfig(be, t, this.constructor.DefaultType),\n                        t.sanitize && (t.template = Se(t.template, t.whiteList, t.sanitizeFn)),\n                        t\n                    );\n                }),\n                (t._getDelegateConfig = function () {\n                    var t = {};\n                    if (this.config) for (var e in this.config) this.constructor.Default[e] !== this.config[e] && (t[e] = this.config[e]);\n                    return t;\n                }),\n                (t._cleanTipClass = function () {\n                    var t = g(this.getTipElement()),\n                        e = t.attr(\"class\").match(Ne);\n                    null !== e && e.length && t.removeClass(e.join(\"\"));\n                }),\n                (t._handlePopperPlacementChange = function (t) {\n                    var e = t.instance;\n                    (this.tip = e.popper), this._cleanTipClass(), this.addAttachmentClass(this._getAttachment(t.placement));\n                }),\n                (t._fixTransition = function () {\n                    var t = this.getTipElement(),\n                        e = this.config.animation;\n                    null === t.getAttribute(\"x-placement\") && (g(t).removeClass(xe), (this.config.animation = !1), this.hide(), this.show(), (this.config.animation = e));\n                }),\n                (i._jQueryInterface = function (n) {\n                    return this.each(function () {\n                        var t = g(this).data(Ie),\n                            e = \"object\" == typeof n && n;\n                        if ((t || !/dispose|hide/.test(n)) && (t || ((t = new i(this, e)), g(this).data(Ie, t)), \"string\" == typeof n)) {\n                            if (\"undefined\" == typeof t[n]) throw new TypeError('No method named \"' + n + '\"');\n                            t[n]();\n                        }\n                    });\n                }),\n                s(i, null, [\n                    {\n                        key: \"VERSION\",\n                        get: function () {\n                            return \"4.3.1\";\n                        },\n                    },\n                    {\n                        key: \"Default\",\n                        get: function () {\n                            return Le;\n                        },\n                    },\n                    {\n                        key: \"NAME\",\n                        get: function () {\n                            return be;\n                        },\n                    },\n                    {\n                        key: \"DATA_KEY\",\n                        get: function () {\n                            return Ie;\n                        },\n                    },\n                    {\n                        key: \"Event\",\n                        get: function () {\n                            return Re;\n                        },\n                    },\n                    {\n                        key: \"EVENT_KEY\",\n                        get: function () {\n                            return De;\n                        },\n                    },\n                    {\n                        key: \"DefaultType\",\n                        get: function () {\n                            return ke;\n                        },\n                    },\n                ]),\n                i\n            );\n        })();\n    (g.fn[be] = Be._jQueryInterface),\n        (g.fn[be].Constructor = Be),\n        (g.fn[be].noConflict = function () {\n            return (g.fn[be] = we), Be._jQueryInterface;\n        });\n    var Ve = \"popover\",\n        Ye = \"bs.popover\",\n        ze = \".\" + Ye,\n        Xe = g.fn[Ve],\n        $e = \"bs-popover\",\n        Ge = new RegExp(\"(^|\\\\s)\" + $e + \"\\\\S+\", \"g\"),\n        Je = l({}, Be.Default, { placement: \"right\", trigger: \"click\", content: \"\", template: '<div class=\"popover\" role=\"tooltip\"><div class=\"arrow\"></div><h3 class=\"popover-header\"></h3><div class=\"popover-body\"></div></div>' }),\n        Ze = l({}, Be.DefaultType, { content: \"(string|element|function)\" }),\n        tn = \"fade\",\n        en = \"show\",\n        nn = \".popover-header\",\n        on = \".popover-body\",\n        rn = {\n            HIDE: \"hide\" + ze,\n            HIDDEN: \"hidden\" + ze,\n            SHOW: \"show\" + ze,\n            SHOWN: \"shown\" + ze,\n            INSERTED: \"inserted\" + ze,\n            CLICK: \"click\" + ze,\n            FOCUSIN: \"focusin\" + ze,\n            FOCUSOUT: \"focusout\" + ze,\n            MOUSEENTER: \"mouseenter\" + ze,\n            MOUSELEAVE: \"mouseleave\" + ze,\n        },\n        sn = (function (t) {\n            var e, n;\n            function i() {\n                return t.apply(this, arguments) || this;\n            }\n            (n = t), ((e = i).prototype = Object.create(n.prototype)), ((e.prototype.constructor = e).__proto__ = n);\n            var o = i.prototype;\n            return (\n                (o.isWithContent = function () {\n                    return this.getTitle() || this._getContent();\n                }),\n                (o.addAttachmentClass = function (t) {\n                    g(this.getTipElement()).addClass($e + \"-\" + t);\n                }),\n                (o.getTipElement = function () {\n                    return (this.tip = this.tip || g(this.config.template)[0]), this.tip;\n                }),\n                (o.setContent = function () {\n                    var t = g(this.getTipElement());\n                    this.setElementContent(t.find(nn), this.getTitle());\n                    var e = this._getContent();\n                    \"function\" == typeof e && (e = e.call(this.element)), this.setElementContent(t.find(on), e), t.removeClass(tn + \" \" + en);\n                }),\n                (o._getContent = function () {\n                    return this.element.getAttribute(\"data-content\") || this.config.content;\n                }),\n                (o._cleanTipClass = function () {\n                    var t = g(this.getTipElement()),\n                        e = t.attr(\"class\").match(Ge);\n                    null !== e && 0 < e.length && t.removeClass(e.join(\"\"));\n                }),\n                (i._jQueryInterface = function (n) {\n                    return this.each(function () {\n                        var t = g(this).data(Ye),\n                            e = \"object\" == typeof n ? n : null;\n                        if ((t || !/dispose|hide/.test(n)) && (t || ((t = new i(this, e)), g(this).data(Ye, t)), \"string\" == typeof n)) {\n                            if (\"undefined\" == typeof t[n]) throw new TypeError('No method named \"' + n + '\"');\n                            t[n]();\n                        }\n                    });\n                }),\n                s(i, null, [\n                    {\n                        key: \"VERSION\",\n                        get: function () {\n                            return \"4.3.1\";\n                        },\n                    },\n                    {\n                        key: \"Default\",\n                        get: function () {\n                            return Je;\n                        },\n                    },\n                    {\n                        key: \"NAME\",\n                        get: function () {\n                            return Ve;\n                        },\n                    },\n                    {\n                        key: \"DATA_KEY\",\n                        get: function () {\n                            return Ye;\n                        },\n                    },\n                    {\n                        key: \"Event\",\n                        get: function () {\n                            return rn;\n                        },\n                    },\n                    {\n                        key: \"EVENT_KEY\",\n                        get: function () {\n                            return ze;\n                        },\n                    },\n                    {\n                        key: \"DefaultType\",\n                        get: function () {\n                            return Ze;\n                        },\n                    },\n                ]),\n                i\n            );\n        })(Be);\n    (g.fn[Ve] = sn._jQueryInterface),\n        (g.fn[Ve].Constructor = sn),\n        (g.fn[Ve].noConflict = function () {\n            return (g.fn[Ve] = Xe), sn._jQueryInterface;\n        });\n    var an = \"scrollspy\",\n        ln = \"bs.scrollspy\",\n        cn = \".\" + ln,\n        hn = g.fn[an],\n        un = { offset: 10, method: \"auto\", target: \"\" },\n        fn = { offset: \"number\", method: \"string\", target: \"(string|element)\" },\n        dn = { ACTIVATE: \"activate\" + cn, SCROLL: \"scroll\" + cn, LOAD_DATA_API: \"load\" + cn + \".data-api\" },\n        gn = \"dropdown-item\",\n        _n = \"active\",\n        mn = '[data-spy=\"scroll\"]',\n        pn = \".nav, .list-group\",\n        vn = \".nav-link\",\n        yn = \".nav-item\",\n        En = \".list-group-item\",\n        Cn = \".dropdown\",\n        Tn = \".dropdown-item\",\n        Sn = \".dropdown-toggle\",\n        bn = \"offset\",\n        In = \"position\",\n        Dn = (function () {\n            function n(t, e) {\n                var n = this;\n                (this._element = t),\n                    (this._scrollElement = \"BODY\" === t.tagName ? window : t),\n                    (this._config = this._getConfig(e)),\n                    (this._selector = this._config.target + \" \" + vn + \",\" + this._config.target + \" \" + En + \",\" + this._config.target + \" \" + Tn),\n                    (this._offsets = []),\n                    (this._targets = []),\n                    (this._activeTarget = null),\n                    (this._scrollHeight = 0),\n                    g(this._scrollElement).on(dn.SCROLL, function (t) {\n                        return n._process(t);\n                    }),\n                    this.refresh(),\n                    this._process();\n            }\n            var t = n.prototype;\n            return (\n                (t.refresh = function () {\n                    var e = this,\n                        t = this._scrollElement === this._scrollElement.window ? bn : In,\n                        o = \"auto\" === this._config.method ? t : this._config.method,\n                        r = o === In ? this._getScrollTop() : 0;\n                    (this._offsets = []),\n                        (this._targets = []),\n                        (this._scrollHeight = this._getScrollHeight()),\n                        [].slice\n                            .call(document.querySelectorAll(this._selector))\n                            .map(function (t) {\n                                var e,\n                                    n = _.getSelectorFromElement(t);\n                                if ((n && (e = document.querySelector(n)), e)) {\n                                    var i = e.getBoundingClientRect();\n                                    if (i.width || i.height) return [g(e)[o]().top + r, n];\n                                }\n                                return null;\n                            })\n                            .filter(function (t) {\n                                return t;\n                            })\n                            .sort(function (t, e) {\n                                return t[0] - e[0];\n                            })\n                            .forEach(function (t) {\n                                e._offsets.push(t[0]), e._targets.push(t[1]);\n                            });\n                }),\n                (t.dispose = function () {\n                    g.removeData(this._element, ln),\n                        g(this._scrollElement).off(cn),\n                        (this._element = null),\n                        (this._scrollElement = null),\n                        (this._config = null),\n                        (this._selector = null),\n                        (this._offsets = null),\n                        (this._targets = null),\n                        (this._activeTarget = null),\n                        (this._scrollHeight = null);\n                }),\n                (t._getConfig = function (t) {\n                    if (\"string\" != typeof (t = l({}, un, \"object\" == typeof t && t ? t : {})).target) {\n                        var e = g(t.target).attr(\"id\");\n                        e || ((e = _.getUID(an)), g(t.target).attr(\"id\", e)), (t.target = \"#\" + e);\n                    }\n                    return _.typeCheckConfig(an, t, fn), t;\n                }),\n                (t._getScrollTop = function () {\n                    return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n                }),\n                (t._getScrollHeight = function () {\n                    return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n                }),\n                (t._getOffsetHeight = function () {\n                    return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n                }),\n                (t._process = function () {\n                    var t = this._getScrollTop() + this._config.offset,\n                        e = this._getScrollHeight(),\n                        n = this._config.offset + e - this._getOffsetHeight();\n                    if ((this._scrollHeight !== e && this.refresh(), n <= t)) {\n                        var i = this._targets[this._targets.length - 1];\n                        this._activeTarget !== i && this._activate(i);\n                    } else {\n                        if (this._activeTarget && t < this._offsets[0] && 0 < this._offsets[0]) return (this._activeTarget = null), void this._clear();\n                        for (var o = this._offsets.length; o--; ) {\n                            this._activeTarget !== this._targets[o] && t >= this._offsets[o] && (\"undefined\" == typeof this._offsets[o + 1] || t < this._offsets[o + 1]) && this._activate(this._targets[o]);\n                        }\n                    }\n                }),\n                (t._activate = function (e) {\n                    (this._activeTarget = e), this._clear();\n                    var t = this._selector.split(\",\").map(function (t) {\n                            return t + '[data-target=\"' + e + '\"],' + t + '[href=\"' + e + '\"]';\n                        }),\n                        n = g([].slice.call(document.querySelectorAll(t.join(\",\"))));\n                    n.hasClass(gn)\n                        ? (n.closest(Cn).find(Sn).addClass(_n), n.addClass(_n))\n                        : (n.addClass(_n),\n                          n\n                              .parents(pn)\n                              .prev(vn + \", \" + En)\n                              .addClass(_n),\n                          n.parents(pn).prev(yn).children(vn).addClass(_n)),\n                        g(this._scrollElement).trigger(dn.ACTIVATE, { relatedTarget: e });\n                }),\n                (t._clear = function () {\n                    [].slice\n                        .call(document.querySelectorAll(this._selector))\n                        .filter(function (t) {\n                            return t.classList.contains(_n);\n                        })\n                        .forEach(function (t) {\n                            return t.classList.remove(_n);\n                        });\n                }),\n                (n._jQueryInterface = function (e) {\n                    return this.each(function () {\n                        var t = g(this).data(ln);\n                        if ((t || ((t = new n(this, \"object\" == typeof e && e)), g(this).data(ln, t)), \"string\" == typeof e)) {\n                            if (\"undefined\" == typeof t[e]) throw new TypeError('No method named \"' + e + '\"');\n                            t[e]();\n                        }\n                    });\n                }),\n                s(n, null, [\n                    {\n                        key: \"VERSION\",\n                        get: function () {\n                            return \"4.3.1\";\n                        },\n                    },\n                    {\n                        key: \"Default\",\n                        get: function () {\n                            return un;\n                        },\n                    },\n                ]),\n                n\n            );\n        })();\n    g(window).on(dn.LOAD_DATA_API, function () {\n        for (var t = [].slice.call(document.querySelectorAll(mn)), e = t.length; e--; ) {\n            var n = g(t[e]);\n            Dn._jQueryInterface.call(n, n.data());\n        }\n    }),\n        (g.fn[an] = Dn._jQueryInterface),\n        (g.fn[an].Constructor = Dn),\n        (g.fn[an].noConflict = function () {\n            return (g.fn[an] = hn), Dn._jQueryInterface;\n        });\n    var wn = \"bs.tab\",\n        An = \".\" + wn,\n        Nn = g.fn.tab,\n        On = { HIDE: \"hide\" + An, HIDDEN: \"hidden\" + An, SHOW: \"show\" + An, SHOWN: \"shown\" + An, CLICK_DATA_API: \"click\" + An + \".data-api\" },\n        kn = \"dropdown-menu\",\n        Pn = \"active\",\n        Ln = \"disabled\",\n        jn = \"fade\",\n        Hn = \"show\",\n        Rn = \".dropdown\",\n        xn = \".nav, .list-group\",\n        Fn = \".active\",\n        Un = \"> li > .active\",\n        Wn = '[data-toggle=\"tab\"], [data-toggle=\"pill\"], [data-toggle=\"list\"]',\n        qn = \".dropdown-toggle\",\n        Mn = \"> .dropdown-menu .active\",\n        Kn = (function () {\n            function i(t) {\n                this._element = t;\n            }\n            var t = i.prototype;\n            return (\n                (t.show = function () {\n                    var n = this;\n                    if (!((this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && g(this._element).hasClass(Pn)) || g(this._element).hasClass(Ln))) {\n                        var t,\n                            i,\n                            e = g(this._element).closest(xn)[0],\n                            o = _.getSelectorFromElement(this._element);\n                        if (e) {\n                            var r = \"UL\" === e.nodeName || \"OL\" === e.nodeName ? Un : Fn;\n                            i = (i = g.makeArray(g(e).find(r)))[i.length - 1];\n                        }\n                        var s = g.Event(On.HIDE, { relatedTarget: this._element }),\n                            a = g.Event(On.SHOW, { relatedTarget: i });\n                        if ((i && g(i).trigger(s), g(this._element).trigger(a), !a.isDefaultPrevented() && !s.isDefaultPrevented())) {\n                            o && (t = document.querySelector(o)), this._activate(this._element, e);\n                            var l = function () {\n                                var t = g.Event(On.HIDDEN, { relatedTarget: n._element }),\n                                    e = g.Event(On.SHOWN, { relatedTarget: i });\n                                g(i).trigger(t), g(n._element).trigger(e);\n                            };\n                            t ? this._activate(t, t.parentNode, l) : l();\n                        }\n                    }\n                }),\n                (t.dispose = function () {\n                    g.removeData(this._element, wn), (this._element = null);\n                }),\n                (t._activate = function (t, e, n) {\n                    var i = this,\n                        o = (!e || (\"UL\" !== e.nodeName && \"OL\" !== e.nodeName) ? g(e).children(Fn) : g(e).find(Un))[0],\n                        r = n && o && g(o).hasClass(jn),\n                        s = function () {\n                            return i._transitionComplete(t, o, n);\n                        };\n                    if (o && r) {\n                        var a = _.getTransitionDurationFromElement(o);\n                        g(o).removeClass(Hn).one(_.TRANSITION_END, s).emulateTransitionEnd(a);\n                    } else s();\n                }),\n                (t._transitionComplete = function (t, e, n) {\n                    if (e) {\n                        g(e).removeClass(Pn);\n                        var i = g(e.parentNode).find(Mn)[0];\n                        i && g(i).removeClass(Pn), \"tab\" === e.getAttribute(\"role\") && e.setAttribute(\"aria-selected\", !1);\n                    }\n                    if ((g(t).addClass(Pn), \"tab\" === t.getAttribute(\"role\") && t.setAttribute(\"aria-selected\", !0), _.reflow(t), t.classList.contains(jn) && t.classList.add(Hn), t.parentNode && g(t.parentNode).hasClass(kn))) {\n                        var o = g(t).closest(Rn)[0];\n                        if (o) {\n                            var r = [].slice.call(o.querySelectorAll(qn));\n                            g(r).addClass(Pn);\n                        }\n                        t.setAttribute(\"aria-expanded\", !0);\n                    }\n                    n && n();\n                }),\n                (i._jQueryInterface = function (n) {\n                    return this.each(function () {\n                        var t = g(this),\n                            e = t.data(wn);\n                        if ((e || ((e = new i(this)), t.data(wn, e)), \"string\" == typeof n)) {\n                            if (\"undefined\" == typeof e[n]) throw new TypeError('No method named \"' + n + '\"');\n                            e[n]();\n                        }\n                    });\n                }),\n                s(i, null, [\n                    {\n                        key: \"VERSION\",\n                        get: function () {\n                            return \"4.3.1\";\n                        },\n                    },\n                ]),\n                i\n            );\n        })();\n    g(document).on(On.CLICK_DATA_API, Wn, function (t) {\n        t.preventDefault(), Kn._jQueryInterface.call(g(this), \"show\");\n    }),\n        (g.fn.tab = Kn._jQueryInterface),\n        (g.fn.tab.Constructor = Kn),\n        (g.fn.tab.noConflict = function () {\n            return (g.fn.tab = Nn), Kn._jQueryInterface;\n        });\n    var Qn = \"toast\",\n        Bn = \"bs.toast\",\n        Vn = \".\" + Bn,\n        Yn = g.fn[Qn],\n        zn = { CLICK_DISMISS: \"click.dismiss\" + Vn, HIDE: \"hide\" + Vn, HIDDEN: \"hidden\" + Vn, SHOW: \"show\" + Vn, SHOWN: \"shown\" + Vn },\n        Xn = \"fade\",\n        $n = \"hide\",\n        Gn = \"show\",\n        Jn = \"showing\",\n        Zn = { animation: \"boolean\", autohide: \"boolean\", delay: \"number\" },\n        ti = { animation: !0, autohide: !0, delay: 500 },\n        ei = '[data-dismiss=\"toast\"]',\n        ni = (function () {\n            function i(t, e) {\n                (this._element = t), (this._config = this._getConfig(e)), (this._timeout = null), this._setListeners();\n            }\n            var t = i.prototype;\n            return (\n                (t.show = function () {\n                    var t = this;\n                    g(this._element).trigger(zn.SHOW), this._config.animation && this._element.classList.add(Xn);\n                    var e = function () {\n                        t._element.classList.remove(Jn), t._element.classList.add(Gn), g(t._element).trigger(zn.SHOWN), t._config.autohide && t.hide();\n                    };\n                    if ((this._element.classList.remove($n), this._element.classList.add(Jn), this._config.animation)) {\n                        var n = _.getTransitionDurationFromElement(this._element);\n                        g(this._element).one(_.TRANSITION_END, e).emulateTransitionEnd(n);\n                    } else e();\n                }),\n                (t.hide = function (t) {\n                    var e = this;\n                    this._element.classList.contains(Gn) &&\n                        (g(this._element).trigger(zn.HIDE),\n                        t\n                            ? this._close()\n                            : (this._timeout = setTimeout(function () {\n                                  e._close();\n                              }, this._config.delay)));\n                }),\n                (t.dispose = function () {\n                    clearTimeout(this._timeout),\n                        (this._timeout = null),\n                        this._element.classList.contains(Gn) && this._element.classList.remove(Gn),\n                        g(this._element).off(zn.CLICK_DISMISS),\n                        g.removeData(this._element, Bn),\n                        (this._element = null),\n                        (this._config = null);\n                }),\n                (t._getConfig = function (t) {\n                    return (t = l({}, ti, g(this._element).data(), \"object\" == typeof t && t ? t : {})), _.typeCheckConfig(Qn, t, this.constructor.DefaultType), t;\n                }),\n                (t._setListeners = function () {\n                    var t = this;\n                    g(this._element).on(zn.CLICK_DISMISS, ei, function () {\n                        return t.hide(!0);\n                    });\n                }),\n                (t._close = function () {\n                    var t = this,\n                        e = function () {\n                            t._element.classList.add($n), g(t._element).trigger(zn.HIDDEN);\n                        };\n                    if ((this._element.classList.remove(Gn), this._config.animation)) {\n                        var n = _.getTransitionDurationFromElement(this._element);\n                        g(this._element).one(_.TRANSITION_END, e).emulateTransitionEnd(n);\n                    } else e();\n                }),\n                (i._jQueryInterface = function (n) {\n                    return this.each(function () {\n                        var t = g(this),\n                            e = t.data(Bn);\n                        if ((e || ((e = new i(this, \"object\" == typeof n && n)), t.data(Bn, e)), \"string\" == typeof n)) {\n                            if (\"undefined\" == typeof e[n]) throw new TypeError('No method named \"' + n + '\"');\n                            e[n](this);\n                        }\n                    });\n                }),\n                s(i, null, [\n                    {\n                        key: \"VERSION\",\n                        get: function () {\n                            return \"4.3.1\";\n                        },\n                    },\n                    {\n                        key: \"DefaultType\",\n                        get: function () {\n                            return Zn;\n                        },\n                    },\n                    {\n                        key: \"Default\",\n                        get: function () {\n                            return ti;\n                        },\n                    },\n                ]),\n                i\n            );\n        })();\n    (g.fn[Qn] = ni._jQueryInterface),\n        (g.fn[Qn].Constructor = ni),\n        (g.fn[Qn].noConflict = function () {\n            return (g.fn[Qn] = Yn), ni._jQueryInterface;\n        }),\n        (function () {\n            if (\"undefined\" == typeof g) throw new TypeError(\"Bootstrap's JavaScript requires jQuery. jQuery must be included before Bootstrap's JavaScript.\");\n            var t = g.fn.jquery.split(\" \")[0].split(\".\");\n            if ((t[0] < 2 && t[1] < 9) || (1 === t[0] && 9 === t[1] && t[2] < 1) || 4 <= t[0]) throw new Error(\"Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0\");\n        })(),\n        (t.Util = _),\n        (t.Alert = p),\n        (t.Button = P),\n        (t.Carousel = lt),\n        (t.Collapse = bt),\n        (t.Dropdown = Jt),\n        (t.Modal = ve),\n        (t.Popover = sn),\n        (t.Scrollspy = Dn),\n        (t.Tab = Kn),\n        (t.Toast = ni),\n        (t.Tooltip = Be),\n        Object.defineProperty(t, \"__esModule\", { value: !0 });\n});\n//# sourceMappingURL=bootstrap.min.js.map\n\n/*!\n * perfect-scrollbar v1.4.0\n * (c) 2018 Hyunje Jun\n * @license MIT\n */\n!(function (t, e) {\n    \"object\" == typeof exports && \"undefined\" != typeof module ? (module.exports = e()) : \"function\" == typeof define && define.amd ? define(e) : (t.PerfectScrollbar = e());\n})(this, function () {\n    \"use strict\";\n    function t(t) {\n        return getComputedStyle(t);\n    }\n    function e(t, e) {\n        for (var i in e) {\n            var r = e[i];\n            \"number\" == typeof r && (r += \"px\"), (t.style[i] = r);\n        }\n        return t;\n    }\n    function i(t) {\n        var e = document.createElement(\"div\");\n        return (e.className = t), e;\n    }\n    function r(t, e) {\n        if (!v) throw new Error(\"No element matching method supported\");\n        return v.call(t, e);\n    }\n    function l(t) {\n        t.remove ? t.remove() : t.parentNode && t.parentNode.removeChild(t);\n    }\n    function n(t, e) {\n        return Array.prototype.filter.call(t.children, function (t) {\n            return r(t, e);\n        });\n    }\n    function o(t, e) {\n        var i = t.element.classList,\n            r = m.state.scrolling(e);\n        i.contains(r) ? clearTimeout(Y[e]) : i.add(r);\n    }\n    function s(t, e) {\n        Y[e] = setTimeout(function () {\n            return t.isAlive && t.element.classList.remove(m.state.scrolling(e));\n        }, t.settings.scrollingThreshold);\n    }\n    function a(t, e) {\n        o(t, e), s(t, e);\n    }\n    function c(t) {\n        if (\"function\" == typeof window.CustomEvent) return new CustomEvent(t);\n        var e = document.createEvent(\"CustomEvent\");\n        return e.initCustomEvent(t, !1, !1, void 0), e;\n    }\n    function h(t, e, i, r, l) {\n        var n = i[0],\n            o = i[1],\n            s = i[2],\n            h = i[3],\n            u = i[4],\n            d = i[5];\n        void 0 === r && (r = !0), void 0 === l && (l = !1);\n        var f = t.element;\n        (t.reach[h] = null),\n            f[s] < 1 && (t.reach[h] = \"start\"),\n            f[s] > t[n] - t[o] - 1 && (t.reach[h] = \"end\"),\n            e && (f.dispatchEvent(c(\"ps-scroll-\" + h)), e < 0 ? f.dispatchEvent(c(\"ps-scroll-\" + u)) : e > 0 && f.dispatchEvent(c(\"ps-scroll-\" + d)), r && a(t, h)),\n            t.reach[h] && (e || l) && f.dispatchEvent(c(\"ps-\" + h + \"-reach-\" + t.reach[h]));\n    }\n    function u(t) {\n        return parseInt(t, 10) || 0;\n    }\n    function d(t) {\n        return r(t, \"input,[contenteditable]\") || r(t, \"select,[contenteditable]\") || r(t, \"textarea,[contenteditable]\") || r(t, \"button,[contenteditable]\");\n    }\n    function f(e) {\n        var i = t(e);\n        return u(i.width) + u(i.paddingLeft) + u(i.paddingRight) + u(i.borderLeftWidth) + u(i.borderRightWidth);\n    }\n    function p(t, e) {\n        return t.settings.minScrollbarLength && (e = Math.max(e, t.settings.minScrollbarLength)), t.settings.maxScrollbarLength && (e = Math.min(e, t.settings.maxScrollbarLength)), e;\n    }\n    function b(t, i) {\n        var r = { width: i.railXWidth },\n            l = Math.floor(t.scrollTop);\n        i.isRtl ? (r.left = i.negativeScrollAdjustment + t.scrollLeft + i.containerWidth - i.contentWidth) : (r.left = t.scrollLeft),\n            i.isScrollbarXUsingBottom ? (r.bottom = i.scrollbarXBottom - l) : (r.top = i.scrollbarXTop + l),\n            e(i.scrollbarXRail, r);\n        var n = { top: l, height: i.railYHeight };\n        i.isScrollbarYUsingRight\n            ? i.isRtl\n                ? (n.right = i.contentWidth - (i.negativeScrollAdjustment + t.scrollLeft) - i.scrollbarYRight - i.scrollbarYOuterWidth)\n                : (n.right = i.scrollbarYRight - t.scrollLeft)\n            : i.isRtl\n            ? (n.left = i.negativeScrollAdjustment + t.scrollLeft + 2 * i.containerWidth - i.contentWidth - i.scrollbarYLeft - i.scrollbarYOuterWidth)\n            : (n.left = i.scrollbarYLeft + t.scrollLeft),\n            e(i.scrollbarYRail, n),\n            e(i.scrollbarX, { left: i.scrollbarXLeft, width: i.scrollbarXWidth - i.railBorderXWidth }),\n            e(i.scrollbarY, { top: i.scrollbarYTop, height: i.scrollbarYHeight - i.railBorderYWidth });\n    }\n    function g(t, e) {\n        function i(e) {\n            (b[d] = g + Y * (e[a] - v)), o(t, f), R(t), e.stopPropagation(), e.preventDefault();\n        }\n        function r() {\n            s(t, f), t[p].classList.remove(m.state.clicking), t.event.unbind(t.ownerDocument, \"mousemove\", i);\n        }\n        var l = e[0],\n            n = e[1],\n            a = e[2],\n            c = e[3],\n            h = e[4],\n            u = e[5],\n            d = e[6],\n            f = e[7],\n            p = e[8],\n            b = t.element,\n            g = null,\n            v = null,\n            Y = null;\n        t.event.bind(t[h], \"mousedown\", function (e) {\n            (g = b[d]),\n                (v = e[a]),\n                (Y = (t[n] - t[l]) / (t[c] - t[u])),\n                t.event.bind(t.ownerDocument, \"mousemove\", i),\n                t.event.once(t.ownerDocument, \"mouseup\", r),\n                t[p].classList.add(m.state.clicking),\n                e.stopPropagation(),\n                e.preventDefault();\n        });\n    }\n    var v = \"undefined\" != typeof Element && (Element.prototype.matches || Element.prototype.webkitMatchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector),\n        m = {\n            main: \"ps\",\n            element: {\n                thumb: function (t) {\n                    return \"ps__thumb-\" + t;\n                },\n                rail: function (t) {\n                    return \"ps__rail-\" + t;\n                },\n                consuming: \"ps__child--consume\",\n            },\n            state: {\n                focus: \"ps--focus\",\n                clicking: \"ps--clicking\",\n                active: function (t) {\n                    return \"ps--active-\" + t;\n                },\n                scrolling: function (t) {\n                    return \"ps--scrolling-\" + t;\n                },\n            },\n        },\n        Y = { x: null, y: null },\n        X = function (t) {\n            (this.element = t), (this.handlers = {});\n        },\n        w = { isEmpty: { configurable: !0 } };\n    (X.prototype.bind = function (t, e) {\n        void 0 === this.handlers[t] && (this.handlers[t] = []), this.handlers[t].push(e), this.element.addEventListener(t, e, !1);\n    }),\n        (X.prototype.unbind = function (t, e) {\n            var i = this;\n            this.handlers[t] = this.handlers[t].filter(function (r) {\n                return !(!e || r === e) || (i.element.removeEventListener(t, r, !1), !1);\n            });\n        }),\n        (X.prototype.unbindAll = function () {\n            var t = this;\n            for (var e in t.handlers) t.unbind(e);\n        }),\n        (w.isEmpty.get = function () {\n            var t = this;\n            return Object.keys(this.handlers).every(function (e) {\n                return 0 === t.handlers[e].length;\n            });\n        }),\n        Object.defineProperties(X.prototype, w);\n    var y = function () {\n        this.eventElements = [];\n    };\n    (y.prototype.eventElement = function (t) {\n        var e = this.eventElements.filter(function (e) {\n            return e.element === t;\n        })[0];\n        return e || ((e = new X(t)), this.eventElements.push(e)), e;\n    }),\n        (y.prototype.bind = function (t, e, i) {\n            this.eventElement(t).bind(e, i);\n        }),\n        (y.prototype.unbind = function (t, e, i) {\n            var r = this.eventElement(t);\n            r.unbind(e, i), r.isEmpty && this.eventElements.splice(this.eventElements.indexOf(r), 1);\n        }),\n        (y.prototype.unbindAll = function () {\n            this.eventElements.forEach(function (t) {\n                return t.unbindAll();\n            }),\n                (this.eventElements = []);\n        }),\n        (y.prototype.once = function (t, e, i) {\n            var r = this.eventElement(t),\n                l = function (t) {\n                    r.unbind(e, l), i(t);\n                };\n            r.bind(e, l);\n        });\n    var W = function (t, e, i, r, l) {\n            void 0 === r && (r = !0), void 0 === l && (l = !1);\n            var n;\n            if (\"top\" === e) n = [\"contentHeight\", \"containerHeight\", \"scrollTop\", \"y\", \"up\", \"down\"];\n            else {\n                if (\"left\" !== e) throw new Error(\"A proper axis should be provided\");\n                n = [\"contentWidth\", \"containerWidth\", \"scrollLeft\", \"x\", \"left\", \"right\"];\n            }\n            h(t, i, n, r, l);\n        },\n        L = {\n            isWebKit: \"undefined\" != typeof document && \"WebkitAppearance\" in document.documentElement.style,\n            supportsTouch: \"undefined\" != typeof window && (\"ontouchstart\" in window || (window.DocumentTouch && document instanceof window.DocumentTouch)),\n            supportsIePointer: \"undefined\" != typeof navigator && navigator.msMaxTouchPoints,\n            isChrome: \"undefined\" != typeof navigator && /Chrome/i.test(navigator && navigator.userAgent),\n        },\n        R = function (t) {\n            var e = t.element,\n                i = Math.floor(e.scrollTop);\n            (t.containerWidth = e.clientWidth),\n                (t.containerHeight = e.clientHeight),\n                (t.contentWidth = e.scrollWidth),\n                (t.contentHeight = e.scrollHeight),\n                e.contains(t.scrollbarXRail) ||\n                    (n(e, m.element.rail(\"x\")).forEach(function (t) {\n                        return l(t);\n                    }),\n                    e.appendChild(t.scrollbarXRail)),\n                e.contains(t.scrollbarYRail) ||\n                    (n(e, m.element.rail(\"y\")).forEach(function (t) {\n                        return l(t);\n                    }),\n                    e.appendChild(t.scrollbarYRail)),\n                !t.settings.suppressScrollX && t.containerWidth + t.settings.scrollXMarginOffset < t.contentWidth\n                    ? ((t.scrollbarXActive = !0),\n                      (t.railXWidth = t.containerWidth - t.railXMarginWidth),\n                      (t.railXRatio = t.containerWidth / t.railXWidth),\n                      (t.scrollbarXWidth = p(t, u((t.railXWidth * t.containerWidth) / t.contentWidth))),\n                      (t.scrollbarXLeft = u(((t.negativeScrollAdjustment + e.scrollLeft) * (t.railXWidth - t.scrollbarXWidth)) / (t.contentWidth - t.containerWidth))))\n                    : (t.scrollbarXActive = !1),\n                !t.settings.suppressScrollY && t.containerHeight + t.settings.scrollYMarginOffset < t.contentHeight\n                    ? ((t.scrollbarYActive = !0),\n                      (t.railYHeight = t.containerHeight - t.railYMarginHeight),\n                      (t.railYRatio = t.containerHeight / t.railYHeight),\n                      (t.scrollbarYHeight = p(t, u((t.railYHeight * t.containerHeight) / t.contentHeight))),\n                      (t.scrollbarYTop = u((i * (t.railYHeight - t.scrollbarYHeight)) / (t.contentHeight - t.containerHeight))))\n                    : (t.scrollbarYActive = !1),\n                t.scrollbarXLeft >= t.railXWidth - t.scrollbarXWidth && (t.scrollbarXLeft = t.railXWidth - t.scrollbarXWidth),\n                t.scrollbarYTop >= t.railYHeight - t.scrollbarYHeight && (t.scrollbarYTop = t.railYHeight - t.scrollbarYHeight),\n                b(e, t),\n                t.scrollbarXActive ? e.classList.add(m.state.active(\"x\")) : (e.classList.remove(m.state.active(\"x\")), (t.scrollbarXWidth = 0), (t.scrollbarXLeft = 0), (e.scrollLeft = 0)),\n                t.scrollbarYActive ? e.classList.add(m.state.active(\"y\")) : (e.classList.remove(m.state.active(\"y\")), (t.scrollbarYHeight = 0), (t.scrollbarYTop = 0), (e.scrollTop = 0));\n        },\n        T = {\n            \"click-rail\": function (t) {\n                t.event.bind(t.scrollbarY, \"mousedown\", function (t) {\n                    return t.stopPropagation();\n                }),\n                    t.event.bind(t.scrollbarYRail, \"mousedown\", function (e) {\n                        var i = e.pageY - window.pageYOffset - t.scrollbarYRail.getBoundingClientRect().top > t.scrollbarYTop ? 1 : -1;\n                        (t.element.scrollTop += i * t.containerHeight), R(t), e.stopPropagation();\n                    }),\n                    t.event.bind(t.scrollbarX, \"mousedown\", function (t) {\n                        return t.stopPropagation();\n                    }),\n                    t.event.bind(t.scrollbarXRail, \"mousedown\", function (e) {\n                        var i = e.pageX - window.pageXOffset - t.scrollbarXRail.getBoundingClientRect().left > t.scrollbarXLeft ? 1 : -1;\n                        (t.element.scrollLeft += i * t.containerWidth), R(t), e.stopPropagation();\n                    });\n            },\n            \"drag-thumb\": function (t) {\n                g(t, [\"containerWidth\", \"contentWidth\", \"pageX\", \"railXWidth\", \"scrollbarX\", \"scrollbarXWidth\", \"scrollLeft\", \"x\", \"scrollbarXRail\"]),\n                    g(t, [\"containerHeight\", \"contentHeight\", \"pageY\", \"railYHeight\", \"scrollbarY\", \"scrollbarYHeight\", \"scrollTop\", \"y\", \"scrollbarYRail\"]);\n            },\n            keyboard: function (t) {\n                function e(e, r) {\n                    var l = Math.floor(i.scrollTop);\n                    if (0 === e) {\n                        if (!t.scrollbarYActive) return !1;\n                        if ((0 === l && r > 0) || (l >= t.contentHeight - t.containerHeight && r < 0)) return !t.settings.wheelPropagation;\n                    }\n                    var n = i.scrollLeft;\n                    if (0 === r) {\n                        if (!t.scrollbarXActive) return !1;\n                        if ((0 === n && e < 0) || (n >= t.contentWidth - t.containerWidth && e > 0)) return !t.settings.wheelPropagation;\n                    }\n                    return !0;\n                }\n                var i = t.element,\n                    l = function () {\n                        return r(i, \":hover\");\n                    },\n                    n = function () {\n                        return r(t.scrollbarX, \":focus\") || r(t.scrollbarY, \":focus\");\n                    };\n                t.event.bind(t.ownerDocument, \"keydown\", function (r) {\n                    if (!((r.isDefaultPrevented && r.isDefaultPrevented()) || r.defaultPrevented) && (l() || n())) {\n                        var o = document.activeElement ? document.activeElement : t.ownerDocument.activeElement;\n                        if (o) {\n                            if (\"IFRAME\" === o.tagName) o = o.contentDocument.activeElement;\n                            else for (; o.shadowRoot; ) o = o.shadowRoot.activeElement;\n                            if (d(o)) return;\n                        }\n                        var s = 0,\n                            a = 0;\n                        switch (r.which) {\n                            case 37:\n                                s = r.metaKey ? -t.contentWidth : r.altKey ? -t.containerWidth : -30;\n                                break;\n                            case 38:\n                                a = r.metaKey ? t.contentHeight : r.altKey ? t.containerHeight : 30;\n                                break;\n                            case 39:\n                                s = r.metaKey ? t.contentWidth : r.altKey ? t.containerWidth : 30;\n                                break;\n                            case 40:\n                                a = r.metaKey ? -t.contentHeight : r.altKey ? -t.containerHeight : -30;\n                                break;\n                            case 32:\n                                a = r.shiftKey ? t.containerHeight : -t.containerHeight;\n                                break;\n                            case 33:\n                                a = t.containerHeight;\n                                break;\n                            case 34:\n                                a = -t.containerHeight;\n                                break;\n                            case 36:\n                                a = t.contentHeight;\n                                break;\n                            case 35:\n                                a = -t.contentHeight;\n                                break;\n                            default:\n                                return;\n                        }\n                        (t.settings.suppressScrollX && 0 !== s) || (t.settings.suppressScrollY && 0 !== a) || ((i.scrollTop -= a), (i.scrollLeft += s), R(t), e(s, a) && r.preventDefault());\n                    }\n                });\n            },\n            wheel: function (e) {\n                function i(t, i) {\n                    var r = Math.floor(o.scrollTop),\n                        l = 0 === o.scrollTop,\n                        n = r + o.offsetHeight === o.scrollHeight,\n                        s = 0 === o.scrollLeft,\n                        a = o.scrollLeft + o.offsetWidth === o.scrollWidth;\n                    return !(Math.abs(i) > Math.abs(t) ? l || n : s || a) || !e.settings.wheelPropagation;\n                }\n                function r(t) {\n                    var e = t.deltaX,\n                        i = -1 * t.deltaY;\n                    return (\n                        (void 0 !== e && void 0 !== i) || ((e = (-1 * t.wheelDeltaX) / 6), (i = t.wheelDeltaY / 6)),\n                        t.deltaMode && 1 === t.deltaMode && ((e *= 10), (i *= 10)),\n                        e !== e && i !== i && ((e = 0), (i = t.wheelDelta)),\n                        t.shiftKey ? [-i, -e] : [e, i]\n                    );\n                }\n                function l(e, i, r) {\n                    if (!L.isWebKit && o.querySelector(\"select:focus\")) return !0;\n                    if (!o.contains(e)) return !1;\n                    for (var l = e; l && l !== o; ) {\n                        if (l.classList.contains(m.element.consuming)) return !0;\n                        var n = t(l);\n                        if ([n.overflow, n.overflowX, n.overflowY].join(\"\").match(/(scroll|auto)/)) {\n                            var s = l.scrollHeight - l.clientHeight;\n                            if (s > 0 && !((0 === l.scrollTop && r > 0) || (l.scrollTop === s && r < 0))) return !0;\n                            var a = l.scrollWidth - l.clientWidth;\n                            if (a > 0 && !((0 === l.scrollLeft && i < 0) || (l.scrollLeft === a && i > 0))) return !0;\n                        }\n                        l = l.parentNode;\n                    }\n                    return !1;\n                }\n                function n(t) {\n                    var n = r(t),\n                        s = n[0],\n                        a = n[1];\n                    if (!l(t.target, s, a)) {\n                        var c = !1;\n                        e.settings.useBothWheelAxes\n                            ? e.scrollbarYActive && !e.scrollbarXActive\n                                ? (a ? (o.scrollTop -= a * e.settings.wheelSpeed) : (o.scrollTop += s * e.settings.wheelSpeed), (c = !0))\n                                : e.scrollbarXActive && !e.scrollbarYActive && (s ? (o.scrollLeft += s * e.settings.wheelSpeed) : (o.scrollLeft -= a * e.settings.wheelSpeed), (c = !0))\n                            : ((o.scrollTop -= a * e.settings.wheelSpeed), (o.scrollLeft += s * e.settings.wheelSpeed)),\n                            R(e),\n                            (c = c || i(s, a)) && !t.ctrlKey && (t.stopPropagation(), t.preventDefault());\n                    }\n                }\n                var o = e.element;\n                void 0 !== window.onwheel ? e.event.bind(o, \"wheel\", n) : void 0 !== window.onmousewheel && e.event.bind(o, \"mousewheel\", n);\n            },\n            touch: function (e) {\n                function i(t, i) {\n                    var r = Math.floor(h.scrollTop),\n                        l = h.scrollLeft,\n                        n = Math.abs(t),\n                        o = Math.abs(i);\n                    if (o > n) {\n                        if ((i < 0 && r === e.contentHeight - e.containerHeight) || (i > 0 && 0 === r)) return 0 === window.scrollY && i > 0 && L.isChrome;\n                    } else if (n > o && ((t < 0 && l === e.contentWidth - e.containerWidth) || (t > 0 && 0 === l))) return !0;\n                    return !0;\n                }\n                function r(t, i) {\n                    (h.scrollTop -= i), (h.scrollLeft -= t), R(e);\n                }\n                function l(t) {\n                    return t.targetTouches ? t.targetTouches[0] : t;\n                }\n                function n(t) {\n                    return !(\n                        (t.pointerType && \"pen\" === t.pointerType && 0 === t.buttons) ||\n                        ((!t.targetTouches || 1 !== t.targetTouches.length) && (!t.pointerType || \"mouse\" === t.pointerType || t.pointerType === t.MSPOINTER_TYPE_MOUSE))\n                    );\n                }\n                function o(t) {\n                    if (n(t)) {\n                        var e = l(t);\n                        (u.pageX = e.pageX), (u.pageY = e.pageY), (d = new Date().getTime()), null !== p && clearInterval(p);\n                    }\n                }\n                function s(e, i, r) {\n                    if (!h.contains(e)) return !1;\n                    for (var l = e; l && l !== h; ) {\n                        if (l.classList.contains(m.element.consuming)) return !0;\n                        var n = t(l);\n                        if ([n.overflow, n.overflowX, n.overflowY].join(\"\").match(/(scroll|auto)/)) {\n                            var o = l.scrollHeight - l.clientHeight;\n                            if (o > 0 && !((0 === l.scrollTop && r > 0) || (l.scrollTop === o && r < 0))) return !0;\n                            var s = l.scrollLeft - l.clientWidth;\n                            if (s > 0 && !((0 === l.scrollLeft && i < 0) || (l.scrollLeft === s && i > 0))) return !0;\n                        }\n                        l = l.parentNode;\n                    }\n                    return !1;\n                }\n                function a(t) {\n                    if (n(t)) {\n                        var e = l(t),\n                            o = { pageX: e.pageX, pageY: e.pageY },\n                            a = o.pageX - u.pageX,\n                            c = o.pageY - u.pageY;\n                        if (s(t.target, a, c)) return;\n                        r(a, c), (u = o);\n                        var h = new Date().getTime(),\n                            p = h - d;\n                        p > 0 && ((f.x = a / p), (f.y = c / p), (d = h)), i(a, c) && t.preventDefault();\n                    }\n                }\n                function c() {\n                    e.settings.swipeEasing &&\n                        (clearInterval(p),\n                        (p = setInterval(function () {\n                            e.isInitialized ? clearInterval(p) : f.x || f.y ? (Math.abs(f.x) < 0.01 && Math.abs(f.y) < 0.01 ? clearInterval(p) : (r(30 * f.x, 30 * f.y), (f.x *= 0.8), (f.y *= 0.8))) : clearInterval(p);\n                        }, 10)));\n                }\n                if (L.supportsTouch || L.supportsIePointer) {\n                    var h = e.element,\n                        u = {},\n                        d = 0,\n                        f = {},\n                        p = null;\n                    L.supportsTouch\n                        ? (e.event.bind(h, \"touchstart\", o), e.event.bind(h, \"touchmove\", a), e.event.bind(h, \"touchend\", c))\n                        : L.supportsIePointer &&\n                          (window.PointerEvent\n                              ? (e.event.bind(h, \"pointerdown\", o), e.event.bind(h, \"pointermove\", a), e.event.bind(h, \"pointerup\", c))\n                              : window.MSPointerEvent && (e.event.bind(h, \"MSPointerDown\", o), e.event.bind(h, \"MSPointerMove\", a), e.event.bind(h, \"MSPointerUp\", c)));\n                }\n            },\n        },\n        H = function (r, l) {\n            var n = this;\n            if ((void 0 === l && (l = {}), \"string\" == typeof r && (r = document.querySelector(r)), !r || !r.nodeName)) throw new Error(\"no element is specified to initialize PerfectScrollbar\");\n            (this.element = r),\n                r.classList.add(m.main),\n                (this.settings = {\n                    handlers: [\"click-rail\", \"drag-thumb\", \"keyboard\", \"wheel\", \"touch\"],\n                    maxScrollbarLength: null,\n                    minScrollbarLength: null,\n                    scrollingThreshold: 1e3,\n                    scrollXMarginOffset: 0,\n                    scrollYMarginOffset: 0,\n                    suppressScrollX: !1,\n                    suppressScrollY: !1,\n                    swipeEasing: !0,\n                    useBothWheelAxes: !1,\n                    wheelPropagation: !0,\n                    wheelSpeed: 1,\n                });\n            for (var o in l) n.settings[o] = l[o];\n            (this.containerWidth = null), (this.containerHeight = null), (this.contentWidth = null), (this.contentHeight = null);\n            var s = function () {\n                    return r.classList.add(m.state.focus);\n                },\n                a = function () {\n                    return r.classList.remove(m.state.focus);\n                };\n            (this.isRtl = \"rtl\" === t(r).direction),\n                (this.isNegativeScroll = (function () {\n                    var t = r.scrollLeft,\n                        e = null;\n                    return (r.scrollLeft = -1), (e = r.scrollLeft < 0), (r.scrollLeft = t), e;\n                })()),\n                (this.negativeScrollAdjustment = this.isNegativeScroll ? r.scrollWidth - r.clientWidth : 0),\n                (this.event = new y()),\n                (this.ownerDocument = r.ownerDocument || document),\n                (this.scrollbarXRail = i(m.element.rail(\"x\"))),\n                r.appendChild(this.scrollbarXRail),\n                (this.scrollbarX = i(m.element.thumb(\"x\"))),\n                this.scrollbarXRail.appendChild(this.scrollbarX),\n                this.scrollbarX.setAttribute(\"tabindex\", 0),\n                this.event.bind(this.scrollbarX, \"focus\", s),\n                this.event.bind(this.scrollbarX, \"blur\", a),\n                (this.scrollbarXActive = null),\n                (this.scrollbarXWidth = null),\n                (this.scrollbarXLeft = null);\n            var c = t(this.scrollbarXRail);\n            (this.scrollbarXBottom = parseInt(c.bottom, 10)),\n                isNaN(this.scrollbarXBottom) ? ((this.isScrollbarXUsingBottom = !1), (this.scrollbarXTop = u(c.top))) : (this.isScrollbarXUsingBottom = !0),\n                (this.railBorderXWidth = u(c.borderLeftWidth) + u(c.borderRightWidth)),\n                e(this.scrollbarXRail, { display: \"block\" }),\n                (this.railXMarginWidth = u(c.marginLeft) + u(c.marginRight)),\n                e(this.scrollbarXRail, { display: \"\" }),\n                (this.railXWidth = null),\n                (this.railXRatio = null),\n                (this.scrollbarYRail = i(m.element.rail(\"y\"))),\n                r.appendChild(this.scrollbarYRail),\n                (this.scrollbarY = i(m.element.thumb(\"y\"))),\n                this.scrollbarYRail.appendChild(this.scrollbarY),\n                this.scrollbarY.setAttribute(\"tabindex\", 0),\n                this.event.bind(this.scrollbarY, \"focus\", s),\n                this.event.bind(this.scrollbarY, \"blur\", a),\n                (this.scrollbarYActive = null),\n                (this.scrollbarYHeight = null),\n                (this.scrollbarYTop = null);\n            var h = t(this.scrollbarYRail);\n            (this.scrollbarYRight = parseInt(h.right, 10)),\n                isNaN(this.scrollbarYRight) ? ((this.isScrollbarYUsingRight = !1), (this.scrollbarYLeft = u(h.left))) : (this.isScrollbarYUsingRight = !0),\n                (this.scrollbarYOuterWidth = this.isRtl ? f(this.scrollbarY) : null),\n                (this.railBorderYWidth = u(h.borderTopWidth) + u(h.borderBottomWidth)),\n                e(this.scrollbarYRail, { display: \"block\" }),\n                (this.railYMarginHeight = u(h.marginTop) + u(h.marginBottom)),\n                e(this.scrollbarYRail, { display: \"\" }),\n                (this.railYHeight = null),\n                (this.railYRatio = null),\n                (this.reach = {\n                    x: r.scrollLeft <= 0 ? \"start\" : r.scrollLeft >= this.contentWidth - this.containerWidth ? \"end\" : null,\n                    y: r.scrollTop <= 0 ? \"start\" : r.scrollTop >= this.contentHeight - this.containerHeight ? \"end\" : null,\n                }),\n                (this.isAlive = !0),\n                this.settings.handlers.forEach(function (t) {\n                    return T[t](n);\n                }),\n                (this.lastScrollTop = Math.floor(r.scrollTop)),\n                (this.lastScrollLeft = r.scrollLeft),\n                this.event.bind(this.element, \"scroll\", function (t) {\n                    return n.onScroll(t);\n                }),\n                R(this);\n        };\n    return (\n        (H.prototype.update = function () {\n            this.isAlive &&\n                ((this.negativeScrollAdjustment = this.isNegativeScroll ? this.element.scrollWidth - this.element.clientWidth : 0),\n                e(this.scrollbarXRail, { display: \"block\" }),\n                e(this.scrollbarYRail, { display: \"block\" }),\n                (this.railXMarginWidth = u(t(this.scrollbarXRail).marginLeft) + u(t(this.scrollbarXRail).marginRight)),\n                (this.railYMarginHeight = u(t(this.scrollbarYRail).marginTop) + u(t(this.scrollbarYRail).marginBottom)),\n                e(this.scrollbarXRail, { display: \"none\" }),\n                e(this.scrollbarYRail, { display: \"none\" }),\n                R(this),\n                W(this, \"top\", 0, !1, !0),\n                W(this, \"left\", 0, !1, !0),\n                e(this.scrollbarXRail, { display: \"\" }),\n                e(this.scrollbarYRail, { display: \"\" }));\n        }),\n        (H.prototype.onScroll = function (t) {\n            this.isAlive &&\n                (R(this),\n                W(this, \"top\", this.element.scrollTop - this.lastScrollTop),\n                W(this, \"left\", this.element.scrollLeft - this.lastScrollLeft),\n                (this.lastScrollTop = Math.floor(this.element.scrollTop)),\n                (this.lastScrollLeft = this.element.scrollLeft));\n        }),\n        (H.prototype.destroy = function () {\n            this.isAlive &&\n                (this.event.unbindAll(),\n                l(this.scrollbarX),\n                l(this.scrollbarY),\n                l(this.scrollbarXRail),\n                l(this.scrollbarYRail),\n                this.removePsClasses(),\n                (this.element = null),\n                (this.scrollbarX = null),\n                (this.scrollbarY = null),\n                (this.scrollbarXRail = null),\n                (this.scrollbarYRail = null),\n                (this.isAlive = !1));\n        }),\n        (H.prototype.removePsClasses = function () {\n            this.element.className = this.element.className\n                .split(\" \")\n                .filter(function (t) {\n                    return !t.match(/^ps([-_].+|)$/);\n                })\n                .join(\" \");\n        }),\n        H\n    );\n});\n\n/*! Hammer.JS - v2.0.8 - 2016-04-23\n * http://hammerjs.github.io/\n *\n * Copyright (c) 2016 Jorik Tangelder;\n * Licensed under the MIT license */\n!(function (a, b, c, d) {\n    \"use strict\";\n    function e(a, b, c) {\n        return setTimeout(j(a, c), b);\n    }\n    function f(a, b, c) {\n        return Array.isArray(a) ? (g(a, c[b], c), !0) : !1;\n    }\n    function g(a, b, c) {\n        var e;\n        if (a)\n            if (a.forEach) a.forEach(b, c);\n            else if (a.length !== d) for (e = 0; e < a.length; ) b.call(c, a[e], e, a), e++;\n            else for (e in a) a.hasOwnProperty(e) && b.call(c, a[e], e, a);\n    }\n    function h(b, c, d) {\n        var e = \"DEPRECATED METHOD: \" + c + \"\\n\" + d + \" AT \\n\";\n        return function () {\n            var c = new Error(\"get-stack-trace\"),\n                d =\n                    c && c.stack\n                        ? c.stack\n                              .replace(/^[^\\(]+?[\\n$]/gm, \"\")\n                              .replace(/^\\s+at\\s+/gm, \"\")\n                              .replace(/^Object.<anonymous>\\s*\\(/gm, \"{anonymous}()@\")\n                        : \"Unknown Stack Trace\",\n                f = a.console && (a.console.warn || a.console.log);\n            return f && f.call(a.console, e, d), b.apply(this, arguments);\n        };\n    }\n    function i(a, b, c) {\n        var d,\n            e = b.prototype;\n        (d = a.prototype = Object.create(e)), (d.constructor = a), (d._super = e), c && la(d, c);\n    }\n    function j(a, b) {\n        return function () {\n            return a.apply(b, arguments);\n        };\n    }\n    function k(a, b) {\n        return typeof a == oa ? a.apply(b ? b[0] || d : d, b) : a;\n    }\n    function l(a, b) {\n        return a === d ? b : a;\n    }\n    function m(a, b, c) {\n        g(q(b), function (b) {\n            a.addEventListener(b, c, !1);\n        });\n    }\n    function n(a, b, c) {\n        g(q(b), function (b) {\n            a.removeEventListener(b, c, !1);\n        });\n    }\n    function o(a, b) {\n        for (; a; ) {\n            if (a == b) return !0;\n            a = a.parentNode;\n        }\n        return !1;\n    }\n    function p(a, b) {\n        return a.indexOf(b) > -1;\n    }\n    function q(a) {\n        return a.trim().split(/\\s+/g);\n    }\n    function r(a, b, c) {\n        if (a.indexOf && !c) return a.indexOf(b);\n        for (var d = 0; d < a.length; ) {\n            if ((c && a[d][c] == b) || (!c && a[d] === b)) return d;\n            d++;\n        }\n        return -1;\n    }\n    function s(a) {\n        return Array.prototype.slice.call(a, 0);\n    }\n    function t(a, b, c) {\n        for (var d = [], e = [], f = 0; f < a.length; ) {\n            var g = b ? a[f][b] : a[f];\n            r(e, g) < 0 && d.push(a[f]), (e[f] = g), f++;\n        }\n        return (\n            c &&\n                (d = b\n                    ? d.sort(function (a, c) {\n                          return a[b] > c[b];\n                      })\n                    : d.sort()),\n            d\n        );\n    }\n    function u(a, b) {\n        for (var c, e, f = b[0].toUpperCase() + b.slice(1), g = 0; g < ma.length; ) {\n            if (((c = ma[g]), (e = c ? c + f : b), e in a)) return e;\n            g++;\n        }\n        return d;\n    }\n    function v() {\n        return ua++;\n    }\n    function w(b) {\n        var c = b.ownerDocument || b;\n        return c.defaultView || c.parentWindow || a;\n    }\n    function x(a, b) {\n        var c = this;\n        (this.manager = a),\n            (this.callback = b),\n            (this.element = a.element),\n            (this.target = a.options.inputTarget),\n            (this.domHandler = function (b) {\n                k(a.options.enable, [a]) && c.handler(b);\n            }),\n            this.init();\n    }\n    function y(a) {\n        var b,\n            c = a.options.inputClass;\n        return new (b = c ? c : xa ? M : ya ? P : wa ? R : L)(a, z);\n    }\n    function z(a, b, c) {\n        var d = c.pointers.length,\n            e = c.changedPointers.length,\n            f = b & Ea && d - e === 0,\n            g = b & (Ga | Ha) && d - e === 0;\n        (c.isFirst = !!f), (c.isFinal = !!g), f && (a.session = {}), (c.eventType = b), A(a, c), a.emit(\"hammer.input\", c), a.recognize(c), (a.session.prevInput = c);\n    }\n    function A(a, b) {\n        var c = a.session,\n            d = b.pointers,\n            e = d.length;\n        c.firstInput || (c.firstInput = D(b)), e > 1 && !c.firstMultiple ? (c.firstMultiple = D(b)) : 1 === e && (c.firstMultiple = !1);\n        var f = c.firstInput,\n            g = c.firstMultiple,\n            h = g ? g.center : f.center,\n            i = (b.center = E(d));\n        (b.timeStamp = ra()), (b.deltaTime = b.timeStamp - f.timeStamp), (b.angle = I(h, i)), (b.distance = H(h, i)), B(c, b), (b.offsetDirection = G(b.deltaX, b.deltaY));\n        var j = F(b.deltaTime, b.deltaX, b.deltaY);\n        (b.overallVelocityX = j.x),\n            (b.overallVelocityY = j.y),\n            (b.overallVelocity = qa(j.x) > qa(j.y) ? j.x : j.y),\n            (b.scale = g ? K(g.pointers, d) : 1),\n            (b.rotation = g ? J(g.pointers, d) : 0),\n            (b.maxPointers = c.prevInput ? (b.pointers.length > c.prevInput.maxPointers ? b.pointers.length : c.prevInput.maxPointers) : b.pointers.length),\n            C(c, b);\n        var k = a.element;\n        o(b.srcEvent.target, k) && (k = b.srcEvent.target), (b.target = k);\n    }\n    function B(a, b) {\n        var c = b.center,\n            d = a.offsetDelta || {},\n            e = a.prevDelta || {},\n            f = a.prevInput || {};\n        (b.eventType !== Ea && f.eventType !== Ga) || ((e = a.prevDelta = { x: f.deltaX || 0, y: f.deltaY || 0 }), (d = a.offsetDelta = { x: c.x, y: c.y })), (b.deltaX = e.x + (c.x - d.x)), (b.deltaY = e.y + (c.y - d.y));\n    }\n    function C(a, b) {\n        var c,\n            e,\n            f,\n            g,\n            h = a.lastInterval || b,\n            i = b.timeStamp - h.timeStamp;\n        if (b.eventType != Ha && (i > Da || h.velocity === d)) {\n            var j = b.deltaX - h.deltaX,\n                k = b.deltaY - h.deltaY,\n                l = F(i, j, k);\n            (e = l.x), (f = l.y), (c = qa(l.x) > qa(l.y) ? l.x : l.y), (g = G(j, k)), (a.lastInterval = b);\n        } else (c = h.velocity), (e = h.velocityX), (f = h.velocityY), (g = h.direction);\n        (b.velocity = c), (b.velocityX = e), (b.velocityY = f), (b.direction = g);\n    }\n    function D(a) {\n        for (var b = [], c = 0; c < a.pointers.length; ) (b[c] = { clientX: pa(a.pointers[c].clientX), clientY: pa(a.pointers[c].clientY) }), c++;\n        return { timeStamp: ra(), pointers: b, center: E(b), deltaX: a.deltaX, deltaY: a.deltaY };\n    }\n    function E(a) {\n        var b = a.length;\n        if (1 === b) return { x: pa(a[0].clientX), y: pa(a[0].clientY) };\n        for (var c = 0, d = 0, e = 0; b > e; ) (c += a[e].clientX), (d += a[e].clientY), e++;\n        return { x: pa(c / b), y: pa(d / b) };\n    }\n    function F(a, b, c) {\n        return { x: b / a || 0, y: c / a || 0 };\n    }\n    function G(a, b) {\n        return a === b ? Ia : qa(a) >= qa(b) ? (0 > a ? Ja : Ka) : 0 > b ? La : Ma;\n    }\n    function H(a, b, c) {\n        c || (c = Qa);\n        var d = b[c[0]] - a[c[0]],\n            e = b[c[1]] - a[c[1]];\n        return Math.sqrt(d * d + e * e);\n    }\n    function I(a, b, c) {\n        c || (c = Qa);\n        var d = b[c[0]] - a[c[0]],\n            e = b[c[1]] - a[c[1]];\n        return (180 * Math.atan2(e, d)) / Math.PI;\n    }\n    function J(a, b) {\n        return I(b[1], b[0], Ra) + I(a[1], a[0], Ra);\n    }\n    function K(a, b) {\n        return H(b[0], b[1], Ra) / H(a[0], a[1], Ra);\n    }\n    function L() {\n        (this.evEl = Ta), (this.evWin = Ua), (this.pressed = !1), x.apply(this, arguments);\n    }\n    function M() {\n        (this.evEl = Xa), (this.evWin = Ya), x.apply(this, arguments), (this.store = this.manager.session.pointerEvents = []);\n    }\n    function N() {\n        (this.evTarget = $a), (this.evWin = _a), (this.started = !1), x.apply(this, arguments);\n    }\n    function O(a, b) {\n        var c = s(a.touches),\n            d = s(a.changedTouches);\n        return b & (Ga | Ha) && (c = t(c.concat(d), \"identifier\", !0)), [c, d];\n    }\n    function P() {\n        (this.evTarget = bb), (this.targetIds = {}), x.apply(this, arguments);\n    }\n    function Q(a, b) {\n        var c = s(a.touches),\n            d = this.targetIds;\n        if (b & (Ea | Fa) && 1 === c.length) return (d[c[0].identifier] = !0), [c, c];\n        var e,\n            f,\n            g = s(a.changedTouches),\n            h = [],\n            i = this.target;\n        if (\n            ((f = c.filter(function (a) {\n                return o(a.target, i);\n            })),\n            b === Ea)\n        )\n            for (e = 0; e < f.length; ) (d[f[e].identifier] = !0), e++;\n        for (e = 0; e < g.length; ) d[g[e].identifier] && h.push(g[e]), b & (Ga | Ha) && delete d[g[e].identifier], e++;\n        return h.length ? [t(f.concat(h), \"identifier\", !0), h] : void 0;\n    }\n    function R() {\n        x.apply(this, arguments);\n        var a = j(this.handler, this);\n        (this.touch = new P(this.manager, a)), (this.mouse = new L(this.manager, a)), (this.primaryTouch = null), (this.lastTouches = []);\n    }\n    function S(a, b) {\n        a & Ea ? ((this.primaryTouch = b.changedPointers[0].identifier), T.call(this, b)) : a & (Ga | Ha) && T.call(this, b);\n    }\n    function T(a) {\n        var b = a.changedPointers[0];\n        if (b.identifier === this.primaryTouch) {\n            var c = { x: b.clientX, y: b.clientY };\n            this.lastTouches.push(c);\n            var d = this.lastTouches,\n                e = function () {\n                    var a = d.indexOf(c);\n                    a > -1 && d.splice(a, 1);\n                };\n            setTimeout(e, cb);\n        }\n    }\n    function U(a) {\n        for (var b = a.srcEvent.clientX, c = a.srcEvent.clientY, d = 0; d < this.lastTouches.length; d++) {\n            var e = this.lastTouches[d],\n                f = Math.abs(b - e.x),\n                g = Math.abs(c - e.y);\n            if (db >= f && db >= g) return !0;\n        }\n        return !1;\n    }\n    function V(a, b) {\n        (this.manager = a), this.set(b);\n    }\n    function W(a) {\n        if (p(a, jb)) return jb;\n        var b = p(a, kb),\n            c = p(a, lb);\n        return b && c ? jb : b || c ? (b ? kb : lb) : p(a, ib) ? ib : hb;\n    }\n    function X() {\n        if (!fb) return !1;\n        var b = {},\n            c = a.CSS && a.CSS.supports;\n        return (\n            [\"auto\", \"manipulation\", \"pan-y\", \"pan-x\", \"pan-x pan-y\", \"none\"].forEach(function (d) {\n                b[d] = c ? a.CSS.supports(\"touch-action\", d) : !0;\n            }),\n            b\n        );\n    }\n    function Y(a) {\n        (this.options = la({}, this.defaults, a || {})), (this.id = v()), (this.manager = null), (this.options.enable = l(this.options.enable, !0)), (this.state = nb), (this.simultaneous = {}), (this.requireFail = []);\n    }\n    function Z(a) {\n        return a & sb ? \"cancel\" : a & qb ? \"end\" : a & pb ? \"move\" : a & ob ? \"start\" : \"\";\n    }\n    function $(a) {\n        return a == Ma ? \"down\" : a == La ? \"up\" : a == Ja ? \"left\" : a == Ka ? \"right\" : \"\";\n    }\n    function _(a, b) {\n        var c = b.manager;\n        return c ? c.get(a) : a;\n    }\n    function aa() {\n        Y.apply(this, arguments);\n    }\n    function ba() {\n        aa.apply(this, arguments), (this.pX = null), (this.pY = null);\n    }\n    function ca() {\n        aa.apply(this, arguments);\n    }\n    function da() {\n        Y.apply(this, arguments), (this._timer = null), (this._input = null);\n    }\n    function ea() {\n        aa.apply(this, arguments);\n    }\n    function fa() {\n        aa.apply(this, arguments);\n    }\n    function ga() {\n        Y.apply(this, arguments), (this.pTime = !1), (this.pCenter = !1), (this._timer = null), (this._input = null), (this.count = 0);\n    }\n    function ha(a, b) {\n        return (b = b || {}), (b.recognizers = l(b.recognizers, ha.defaults.preset)), new ia(a, b);\n    }\n    function ia(a, b) {\n        (this.options = la({}, ha.defaults, b || {})),\n            (this.options.inputTarget = this.options.inputTarget || a),\n            (this.handlers = {}),\n            (this.session = {}),\n            (this.recognizers = []),\n            (this.oldCssProps = {}),\n            (this.element = a),\n            (this.input = y(this)),\n            (this.touchAction = new V(this, this.options.touchAction)),\n            ja(this, !0),\n            g(\n                this.options.recognizers,\n                function (a) {\n                    var b = this.add(new a[0](a[1]));\n                    a[2] && b.recognizeWith(a[2]), a[3] && b.requireFailure(a[3]);\n                },\n                this\n            );\n    }\n    function ja(a, b) {\n        var c = a.element;\n        if (c.style) {\n            var d;\n            g(a.options.cssProps, function (e, f) {\n                (d = u(c.style, f)), b ? ((a.oldCssProps[d] = c.style[d]), (c.style[d] = e)) : (c.style[d] = a.oldCssProps[d] || \"\");\n            }),\n                b || (a.oldCssProps = {});\n        }\n    }\n    function ka(a, c) {\n        var d = b.createEvent(\"Event\");\n        d.initEvent(a, !0, !0), (d.gesture = c), c.target.dispatchEvent(d);\n    }\n    var la,\n        ma = [\"\", \"webkit\", \"Moz\", \"MS\", \"ms\", \"o\"],\n        na = b.createElement(\"div\"),\n        oa = \"function\",\n        pa = Math.round,\n        qa = Math.abs,\n        ra = Date.now;\n    la =\n        \"function\" != typeof Object.assign\n            ? function (a) {\n                  if (a === d || null === a) throw new TypeError(\"Cannot convert undefined or null to object\");\n                  for (var b = Object(a), c = 1; c < arguments.length; c++) {\n                      var e = arguments[c];\n                      if (e !== d && null !== e) for (var f in e) e.hasOwnProperty(f) && (b[f] = e[f]);\n                  }\n                  return b;\n              }\n            : Object.assign;\n    var sa = h(\n            function (a, b, c) {\n                for (var e = Object.keys(b), f = 0; f < e.length; ) (!c || (c && a[e[f]] === d)) && (a[e[f]] = b[e[f]]), f++;\n                return a;\n            },\n            \"extend\",\n            \"Use `assign`.\"\n        ),\n        ta = h(\n            function (a, b) {\n                return sa(a, b, !0);\n            },\n            \"merge\",\n            \"Use `assign`.\"\n        ),\n        ua = 1,\n        va = /mobile|tablet|ip(ad|hone|od)|android/i,\n        wa = \"ontouchstart\" in a,\n        xa = u(a, \"PointerEvent\") !== d,\n        ya = wa && va.test(navigator.userAgent),\n        za = \"touch\",\n        Aa = \"pen\",\n        Ba = \"mouse\",\n        Ca = \"kinect\",\n        Da = 25,\n        Ea = 1,\n        Fa = 2,\n        Ga = 4,\n        Ha = 8,\n        Ia = 1,\n        Ja = 2,\n        Ka = 4,\n        La = 8,\n        Ma = 16,\n        Na = Ja | Ka,\n        Oa = La | Ma,\n        Pa = Na | Oa,\n        Qa = [\"x\", \"y\"],\n        Ra = [\"clientX\", \"clientY\"];\n    x.prototype = {\n        handler: function () {},\n        init: function () {\n            this.evEl && m(this.element, this.evEl, this.domHandler), this.evTarget && m(this.target, this.evTarget, this.domHandler), this.evWin && m(w(this.element), this.evWin, this.domHandler);\n        },\n        destroy: function () {\n            this.evEl && n(this.element, this.evEl, this.domHandler), this.evTarget && n(this.target, this.evTarget, this.domHandler), this.evWin && n(w(this.element), this.evWin, this.domHandler);\n        },\n    };\n    var Sa = { mousedown: Ea, mousemove: Fa, mouseup: Ga },\n        Ta = \"mousedown\",\n        Ua = \"mousemove mouseup\";\n    i(L, x, {\n        handler: function (a) {\n            var b = Sa[a.type];\n            b & Ea && 0 === a.button && (this.pressed = !0),\n                b & Fa && 1 !== a.which && (b = Ga),\n                this.pressed && (b & Ga && (this.pressed = !1), this.callback(this.manager, b, { pointers: [a], changedPointers: [a], pointerType: Ba, srcEvent: a }));\n        },\n    });\n    var Va = { pointerdown: Ea, pointermove: Fa, pointerup: Ga, pointercancel: Ha, pointerout: Ha },\n        Wa = { 2: za, 3: Aa, 4: Ba, 5: Ca },\n        Xa = \"pointerdown\",\n        Ya = \"pointermove pointerup pointercancel\";\n    a.MSPointerEvent && !a.PointerEvent && ((Xa = \"MSPointerDown\"), (Ya = \"MSPointerMove MSPointerUp MSPointerCancel\")),\n        i(M, x, {\n            handler: function (a) {\n                var b = this.store,\n                    c = !1,\n                    d = a.type.toLowerCase().replace(\"ms\", \"\"),\n                    e = Va[d],\n                    f = Wa[a.pointerType] || a.pointerType,\n                    g = f == za,\n                    h = r(b, a.pointerId, \"pointerId\");\n                e & Ea && (0 === a.button || g) ? 0 > h && (b.push(a), (h = b.length - 1)) : e & (Ga | Ha) && (c = !0),\n                    0 > h || ((b[h] = a), this.callback(this.manager, e, { pointers: b, changedPointers: [a], pointerType: f, srcEvent: a }), c && b.splice(h, 1));\n            },\n        });\n    var Za = { touchstart: Ea, touchmove: Fa, touchend: Ga, touchcancel: Ha },\n        $a = \"touchstart\",\n        _a = \"touchstart touchmove touchend touchcancel\";\n    i(N, x, {\n        handler: function (a) {\n            var b = Za[a.type];\n            if ((b === Ea && (this.started = !0), this.started)) {\n                var c = O.call(this, a, b);\n                b & (Ga | Ha) && c[0].length - c[1].length === 0 && (this.started = !1), this.callback(this.manager, b, { pointers: c[0], changedPointers: c[1], pointerType: za, srcEvent: a });\n            }\n        },\n    });\n    var ab = { touchstart: Ea, touchmove: Fa, touchend: Ga, touchcancel: Ha },\n        bb = \"touchstart touchmove touchend touchcancel\";\n    i(P, x, {\n        handler: function (a) {\n            var b = ab[a.type],\n                c = Q.call(this, a, b);\n            c && this.callback(this.manager, b, { pointers: c[0], changedPointers: c[1], pointerType: za, srcEvent: a });\n        },\n    });\n    var cb = 2500,\n        db = 25;\n    i(R, x, {\n        handler: function (a, b, c) {\n            var d = c.pointerType == za,\n                e = c.pointerType == Ba;\n            if (!(e && c.sourceCapabilities && c.sourceCapabilities.firesTouchEvents)) {\n                if (d) S.call(this, b, c);\n                else if (e && U.call(this, c)) return;\n                this.callback(a, b, c);\n            }\n        },\n        destroy: function () {\n            this.touch.destroy(), this.mouse.destroy();\n        },\n    });\n    var eb = u(na.style, \"touchAction\"),\n        fb = eb !== d,\n        gb = \"compute\",\n        hb = \"auto\",\n        ib = \"manipulation\",\n        jb = \"none\",\n        kb = \"pan-x\",\n        lb = \"pan-y\",\n        mb = X();\n    V.prototype = {\n        set: function (a) {\n            a == gb && (a = this.compute()), fb && this.manager.element.style && mb[a] && (this.manager.element.style[eb] = a), (this.actions = a.toLowerCase().trim());\n        },\n        update: function () {\n            this.set(this.manager.options.touchAction);\n        },\n        compute: function () {\n            var a = [];\n            return (\n                g(this.manager.recognizers, function (b) {\n                    k(b.options.enable, [b]) && (a = a.concat(b.getTouchAction()));\n                }),\n                W(a.join(\" \"))\n            );\n        },\n        preventDefaults: function (a) {\n            var b = a.srcEvent,\n                c = a.offsetDirection;\n            if (this.manager.session.prevented) return void b.preventDefault();\n            var d = this.actions,\n                e = p(d, jb) && !mb[jb],\n                f = p(d, lb) && !mb[lb],\n                g = p(d, kb) && !mb[kb];\n            if (e) {\n                var h = 1 === a.pointers.length,\n                    i = a.distance < 2,\n                    j = a.deltaTime < 250;\n                if (h && i && j) return;\n            }\n            return g && f ? void 0 : e || (f && c & Na) || (g && c & Oa) ? this.preventSrc(b) : void 0;\n        },\n        preventSrc: function (a) {\n            (this.manager.session.prevented = !0), a.preventDefault();\n        },\n    };\n    var nb = 1,\n        ob = 2,\n        pb = 4,\n        qb = 8,\n        rb = qb,\n        sb = 16,\n        tb = 32;\n    (Y.prototype = {\n        defaults: {},\n        set: function (a) {\n            return la(this.options, a), this.manager && this.manager.touchAction.update(), this;\n        },\n        recognizeWith: function (a) {\n            if (f(a, \"recognizeWith\", this)) return this;\n            var b = this.simultaneous;\n            return (a = _(a, this)), b[a.id] || ((b[a.id] = a), a.recognizeWith(this)), this;\n        },\n        dropRecognizeWith: function (a) {\n            return f(a, \"dropRecognizeWith\", this) ? this : ((a = _(a, this)), delete this.simultaneous[a.id], this);\n        },\n        requireFailure: function (a) {\n            if (f(a, \"requireFailure\", this)) return this;\n            var b = this.requireFail;\n            return (a = _(a, this)), -1 === r(b, a) && (b.push(a), a.requireFailure(this)), this;\n        },\n        dropRequireFailure: function (a) {\n            if (f(a, \"dropRequireFailure\", this)) return this;\n            a = _(a, this);\n            var b = r(this.requireFail, a);\n            return b > -1 && this.requireFail.splice(b, 1), this;\n        },\n        hasRequireFailures: function () {\n            return this.requireFail.length > 0;\n        },\n        canRecognizeWith: function (a) {\n            return !!this.simultaneous[a.id];\n        },\n        emit: function (a) {\n            function b(b) {\n                c.manager.emit(b, a);\n            }\n            var c = this,\n                d = this.state;\n            qb > d && b(c.options.event + Z(d)), b(c.options.event), a.additionalEvent && b(a.additionalEvent), d >= qb && b(c.options.event + Z(d));\n        },\n        tryEmit: function (a) {\n            return this.canEmit() ? this.emit(a) : void (this.state = tb);\n        },\n        canEmit: function () {\n            for (var a = 0; a < this.requireFail.length; ) {\n                if (!(this.requireFail[a].state & (tb | nb))) return !1;\n                a++;\n            }\n            return !0;\n        },\n        recognize: function (a) {\n            var b = la({}, a);\n            return k(this.options.enable, [this, b]) ? (this.state & (rb | sb | tb) && (this.state = nb), (this.state = this.process(b)), void (this.state & (ob | pb | qb | sb) && this.tryEmit(b))) : (this.reset(), void (this.state = tb));\n        },\n        process: function (a) {},\n        getTouchAction: function () {},\n        reset: function () {},\n    }),\n        i(aa, Y, {\n            defaults: { pointers: 1 },\n            attrTest: function (a) {\n                var b = this.options.pointers;\n                return 0 === b || a.pointers.length === b;\n            },\n            process: function (a) {\n                var b = this.state,\n                    c = a.eventType,\n                    d = b & (ob | pb),\n                    e = this.attrTest(a);\n                return d && (c & Ha || !e) ? b | sb : d || e ? (c & Ga ? b | qb : b & ob ? b | pb : ob) : tb;\n            },\n        }),\n        i(ba, aa, {\n            defaults: { event: \"pan\", threshold: 10, pointers: 1, direction: Pa },\n            getTouchAction: function () {\n                var a = this.options.direction,\n                    b = [];\n                return a & Na && b.push(lb), a & Oa && b.push(kb), b;\n            },\n            directionTest: function (a) {\n                var b = this.options,\n                    c = !0,\n                    d = a.distance,\n                    e = a.direction,\n                    f = a.deltaX,\n                    g = a.deltaY;\n                return (\n                    e & b.direction || (b.direction & Na ? ((e = 0 === f ? Ia : 0 > f ? Ja : Ka), (c = f != this.pX), (d = Math.abs(a.deltaX))) : ((e = 0 === g ? Ia : 0 > g ? La : Ma), (c = g != this.pY), (d = Math.abs(a.deltaY)))),\n                    (a.direction = e),\n                    c && d > b.threshold && e & b.direction\n                );\n            },\n            attrTest: function (a) {\n                return aa.prototype.attrTest.call(this, a) && (this.state & ob || (!(this.state & ob) && this.directionTest(a)));\n            },\n            emit: function (a) {\n                (this.pX = a.deltaX), (this.pY = a.deltaY);\n                var b = $(a.direction);\n                b && (a.additionalEvent = this.options.event + b), this._super.emit.call(this, a);\n            },\n        }),\n        i(ca, aa, {\n            defaults: { event: \"pinch\", threshold: 0, pointers: 2 },\n            getTouchAction: function () {\n                return [jb];\n            },\n            attrTest: function (a) {\n                return this._super.attrTest.call(this, a) && (Math.abs(a.scale - 1) > this.options.threshold || this.state & ob);\n            },\n            emit: function (a) {\n                if (1 !== a.scale) {\n                    var b = a.scale < 1 ? \"in\" : \"out\";\n                    a.additionalEvent = this.options.event + b;\n                }\n                this._super.emit.call(this, a);\n            },\n        }),\n        i(da, Y, {\n            defaults: { event: \"press\", pointers: 1, time: 251, threshold: 9 },\n            getTouchAction: function () {\n                return [hb];\n            },\n            process: function (a) {\n                var b = this.options,\n                    c = a.pointers.length === b.pointers,\n                    d = a.distance < b.threshold,\n                    f = a.deltaTime > b.time;\n                if (((this._input = a), !d || !c || (a.eventType & (Ga | Ha) && !f))) this.reset();\n                else if (a.eventType & Ea)\n                    this.reset(),\n                        (this._timer = e(\n                            function () {\n                                (this.state = rb), this.tryEmit();\n                            },\n                            b.time,\n                            this\n                        ));\n                else if (a.eventType & Ga) return rb;\n                return tb;\n            },\n            reset: function () {\n                clearTimeout(this._timer);\n            },\n            emit: function (a) {\n                this.state === rb && (a && a.eventType & Ga ? this.manager.emit(this.options.event + \"up\", a) : ((this._input.timeStamp = ra()), this.manager.emit(this.options.event, this._input)));\n            },\n        }),\n        i(ea, aa, {\n            defaults: { event: \"rotate\", threshold: 0, pointers: 2 },\n            getTouchAction: function () {\n                return [jb];\n            },\n            attrTest: function (a) {\n                return this._super.attrTest.call(this, a) && (Math.abs(a.rotation) > this.options.threshold || this.state & ob);\n            },\n        }),\n        i(fa, aa, {\n            defaults: { event: \"swipe\", threshold: 10, velocity: 0.3, direction: Na | Oa, pointers: 1 },\n            getTouchAction: function () {\n                return ba.prototype.getTouchAction.call(this);\n            },\n            attrTest: function (a) {\n                var b,\n                    c = this.options.direction;\n                return (\n                    c & (Na | Oa) ? (b = a.overallVelocity) : c & Na ? (b = a.overallVelocityX) : c & Oa && (b = a.overallVelocityY),\n                    this._super.attrTest.call(this, a) && c & a.offsetDirection && a.distance > this.options.threshold && a.maxPointers == this.options.pointers && qa(b) > this.options.velocity && a.eventType & Ga\n                );\n            },\n            emit: function (a) {\n                var b = $(a.offsetDirection);\n                b && this.manager.emit(this.options.event + b, a), this.manager.emit(this.options.event, a);\n            },\n        }),\n        i(ga, Y, {\n            defaults: { event: \"tap\", pointers: 1, taps: 1, interval: 300, time: 250, threshold: 9, posThreshold: 10 },\n            getTouchAction: function () {\n                return [ib];\n            },\n            process: function (a) {\n                var b = this.options,\n                    c = a.pointers.length === b.pointers,\n                    d = a.distance < b.threshold,\n                    f = a.deltaTime < b.time;\n                if ((this.reset(), a.eventType & Ea && 0 === this.count)) return this.failTimeout();\n                if (d && f && c) {\n                    if (a.eventType != Ga) return this.failTimeout();\n                    var g = this.pTime ? a.timeStamp - this.pTime < b.interval : !0,\n                        h = !this.pCenter || H(this.pCenter, a.center) < b.posThreshold;\n                    (this.pTime = a.timeStamp), (this.pCenter = a.center), h && g ? (this.count += 1) : (this.count = 1), (this._input = a);\n                    var i = this.count % b.taps;\n                    if (0 === i)\n                        return this.hasRequireFailures()\n                            ? ((this._timer = e(\n                                  function () {\n                                      (this.state = rb), this.tryEmit();\n                                  },\n                                  b.interval,\n                                  this\n                              )),\n                              ob)\n                            : rb;\n                }\n                return tb;\n            },\n            failTimeout: function () {\n                return (\n                    (this._timer = e(\n                        function () {\n                            this.state = tb;\n                        },\n                        this.options.interval,\n                        this\n                    )),\n                    tb\n                );\n            },\n            reset: function () {\n                clearTimeout(this._timer);\n            },\n            emit: function () {\n                this.state == rb && ((this._input.tapCount = this.count), this.manager.emit(this.options.event, this._input));\n            },\n        }),\n        (ha.VERSION = \"2.0.8\"),\n        (ha.defaults = {\n            domEvents: !1,\n            touchAction: gb,\n            enable: !0,\n            inputTarget: null,\n            inputClass: null,\n            preset: [[ea, { enable: !1 }], [ca, { enable: !1 }, [\"rotate\"]], [fa, { direction: Na }], [ba, { direction: Na }, [\"swipe\"]], [ga], [ga, { event: \"doubletap\", taps: 2 }, [\"tap\"]], [da]],\n            cssProps: { userSelect: \"none\", touchSelect: \"none\", touchCallout: \"none\", contentZooming: \"none\", userDrag: \"none\", tapHighlightColor: \"rgba(0,0,0,0)\" },\n        });\n    var ub = 1,\n        vb = 2;\n    (ia.prototype = {\n        set: function (a) {\n            return la(this.options, a), a.touchAction && this.touchAction.update(), a.inputTarget && (this.input.destroy(), (this.input.target = a.inputTarget), this.input.init()), this;\n        },\n        stop: function (a) {\n            this.session.stopped = a ? vb : ub;\n        },\n        recognize: function (a) {\n            var b = this.session;\n            if (!b.stopped) {\n                this.touchAction.preventDefaults(a);\n                var c,\n                    d = this.recognizers,\n                    e = b.curRecognizer;\n                (!e || (e && e.state & rb)) && (e = b.curRecognizer = null);\n                for (var f = 0; f < d.length; ) (c = d[f]), b.stopped === vb || (e && c != e && !c.canRecognizeWith(e)) ? c.reset() : c.recognize(a), !e && c.state & (ob | pb | qb) && (e = b.curRecognizer = c), f++;\n            }\n        },\n        get: function (a) {\n            if (a instanceof Y) return a;\n            for (var b = this.recognizers, c = 0; c < b.length; c++) if (b[c].options.event == a) return b[c];\n            return null;\n        },\n        add: function (a) {\n            if (f(a, \"add\", this)) return this;\n            var b = this.get(a.options.event);\n            return b && this.remove(b), this.recognizers.push(a), (a.manager = this), this.touchAction.update(), a;\n        },\n        remove: function (a) {\n            if (f(a, \"remove\", this)) return this;\n            if ((a = this.get(a))) {\n                var b = this.recognizers,\n                    c = r(b, a);\n                -1 !== c && (b.splice(c, 1), this.touchAction.update());\n            }\n            return this;\n        },\n        on: function (a, b) {\n            if (a !== d && b !== d) {\n                var c = this.handlers;\n                return (\n                    g(q(a), function (a) {\n                        (c[a] = c[a] || []), c[a].push(b);\n                    }),\n                    this\n                );\n            }\n        },\n        off: function (a, b) {\n            if (a !== d) {\n                var c = this.handlers;\n                return (\n                    g(q(a), function (a) {\n                        b ? c[a] && c[a].splice(r(c[a], b), 1) : delete c[a];\n                    }),\n                    this\n                );\n            }\n        },\n        emit: function (a, b) {\n            this.options.domEvents && ka(a, b);\n            var c = this.handlers[a] && this.handlers[a].slice();\n            if (c && c.length) {\n                (b.type = a),\n                    (b.preventDefault = function () {\n                        b.srcEvent.preventDefault();\n                    });\n                for (var d = 0; d < c.length; ) c[d](b), d++;\n            }\n        },\n        destroy: function () {\n            this.element && ja(this, !1), (this.handlers = {}), (this.session = {}), this.input.destroy(), (this.element = null);\n        },\n    }),\n        la(ha, {\n            INPUT_START: Ea,\n            INPUT_MOVE: Fa,\n            INPUT_END: Ga,\n            INPUT_CANCEL: Ha,\n            STATE_POSSIBLE: nb,\n            STATE_BEGAN: ob,\n            STATE_CHANGED: pb,\n            STATE_ENDED: qb,\n            STATE_RECOGNIZED: rb,\n            STATE_CANCELLED: sb,\n            STATE_FAILED: tb,\n            DIRECTION_NONE: Ia,\n            DIRECTION_LEFT: Ja,\n            DIRECTION_RIGHT: Ka,\n            DIRECTION_UP: La,\n            DIRECTION_DOWN: Ma,\n            DIRECTION_HORIZONTAL: Na,\n            DIRECTION_VERTICAL: Oa,\n            DIRECTION_ALL: Pa,\n            Manager: ia,\n            Input: x,\n            TouchAction: V,\n            TouchInput: P,\n            MouseInput: L,\n            PointerEventInput: M,\n            TouchMouseInput: R,\n            SingleTouchInput: N,\n            Recognizer: Y,\n            AttrRecognizer: aa,\n            Tap: ga,\n            Pan: ba,\n            Swipe: fa,\n            Pinch: ca,\n            Rotate: ea,\n            Press: da,\n            on: m,\n            off: n,\n            each: g,\n            merge: ta,\n            extend: sa,\n            assign: la,\n            inherit: i,\n            bindFn: j,\n            prefixed: u,\n        });\n    var wb = \"undefined\" != typeof a ? a : \"undefined\" != typeof self ? self : {};\n    (wb.Hammer = ha),\n        \"function\" == typeof define && define.amd\n            ? define(function () {\n                  return ha;\n              })\n            : \"undefined\" != typeof module && module.exports\n            ? (module.exports = ha)\n            : (a[c] = ha);\n})(window, document, \"Hammer\");\n\n/* Unison JS */\nUnison = (function () {\n    \"use strict\";\n    var a,\n        b = window,\n        c = document,\n        d = c.head,\n        e = {},\n        f = !1,\n        g = {\n            parseMQ: function (a) {\n                var c = b.getComputedStyle(a, null).getPropertyValue(\"font-family\");\n                return c.replace(/\"/g, \"\").replace(/'/g, \"\");\n            },\n            debounce: function (a, b, c) {\n                var d;\n                return function () {\n                    var e = this,\n                        f = arguments;\n                    clearTimeout(d),\n                        (d = setTimeout(function () {\n                            (d = null), c || a.apply(e, f);\n                        }, b)),\n                        c && !d && a.apply(e, f);\n                };\n            },\n            isObject: function (a) {\n                return \"object\" == typeof a;\n            },\n            isUndefined: function (a) {\n                return \"undefined\" == typeof a;\n            },\n        },\n        h = {\n            on: function (a, b) {\n                g.isObject(e[a]) || (e[a] = []), e[a].push(b);\n            },\n            emit: function (a, b) {\n                if (g.isObject(e[a])) for (var c = e[a].slice(), d = 0; d < c.length; d++) c[d].call(this, b);\n            },\n        },\n        i = {\n            all: function () {\n                for (var a = {}, b = g.parseMQ(c.querySelector(\"title\")).split(\",\"), d = 0; d < b.length; d++) {\n                    var e = b[d].trim().split(\" \");\n                    a[e[0]] = e[1];\n                }\n                return f ? a : null;\n            },\n            now: function (a) {\n                var b = g.parseMQ(d).split(\" \"),\n                    c = { name: b[0], width: b[1] };\n                return f ? (g.isUndefined(a) ? c : a(c)) : null;\n            },\n            update: function () {\n                i.now(function (b) {\n                    b.name !== a && (h.emit(b.name), h.emit(\"change\", b), (a = b.name));\n                });\n            },\n        };\n    return (\n        (b.onresize = g.debounce(i.update, 100)),\n        c.addEventListener(\"DOMContentLoaded\", function () {\n            (f = \"none\" !== b.getComputedStyle(d, null).getPropertyValue(\"clear\")), i.update();\n        }),\n        { fetch: { all: i.all, now: i.now }, on: h.on, emit: h.emit, util: { debounce: g.debounce, isObject: g.isObject } }\n    );\n})();\n\n/*!\n * jQuery blockUI plugin\n * Version 2.70.0-2014.11.23\n * Requires jQuery v1.7 or later\n *\n * Examples at: http://malsup.com/jquery/block/\n * Copyright (c) 2007-2013 M. Alsup\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 * Thanks to Amir-Hossein Sobhi for some excellent contributions!\n */\n\n!(function () {\n    \"use strict\";\n    function e(e) {\n        function t(t, n) {\n            var s,\n                h,\n                k = t == window,\n                y = n && void 0 !== n.message ? n.message : void 0;\n            if (((n = e.extend({}, e.blockUI.defaults, n || {})), !n.ignoreIfBlocked || !e(t).data(\"blockUI.isBlocked\"))) {\n                if (\n                    ((n.overlayCSS = e.extend({}, e.blockUI.defaults.overlayCSS, n.overlayCSS || {})),\n                    (s = e.extend({}, e.blockUI.defaults.css, n.css || {})),\n                    n.onOverlayClick && (n.overlayCSS.cursor = \"pointer\"),\n                    (h = e.extend({}, e.blockUI.defaults.themedCSS, n.themedCSS || {})),\n                    (y = void 0 === y ? n.message : y),\n                    k && p && o(window, { fadeOut: 0 }),\n                    y && \"string\" != typeof y && (y.parentNode || y.jquery))\n                ) {\n                    var m = y.jquery ? y[0] : y,\n                        v = {};\n                    e(t).data(\"blockUI.history\", v), (v.el = m), (v.parent = m.parentNode), (v.display = m.style.display), (v.position = m.style.position), v.parent && v.parent.removeChild(m);\n                }\n                e(t).data(\"blockUI.onUnblock\", n.onUnblock);\n                var g,\n                    I,\n                    w,\n                    U,\n                    x = n.baseZ;\n                (g = e(\n                    r || n.forceIframe\n                        ? '<iframe class=\"blockUI\" style=\"z-index:' + x++ + ';display:none;border:none;margin:0;padding:0;position:absolute;width:100%;height:100%;top:0;left:0\" src=\"' + n.iframeSrc + '\"></iframe>'\n                        : '<div class=\"blockUI\" style=\"display:none\"></div>'\n                )),\n                    (I = e(\n                        n.theme\n                            ? '<div class=\"blockUI blockOverlay ui-widget-overlay\" style=\"z-index:' + x++ + ';display:none\"></div>'\n                            : '<div class=\"blockUI blockOverlay\" style=\"z-index:' + x++ + ';display:none;border:none;margin:0;padding:0;width:100%;height:100%;top:0;left:0\"></div>'\n                    )),\n                    n.theme && k\n                        ? ((U = '<div class=\"blockUI ' + n.blockMsgClass + ' blockPage ui-dialog ui-widget ui-corner-all\" style=\"z-index:' + (x + 10) + ';display:none;position:fixed\">'),\n                          n.title && (U += '<div class=\"ui-widget-header ui-dialog-titlebar ui-corner-all blockTitle\">' + (n.title || \"&nbsp;\") + \"</div>\"),\n                          (U += '<div class=\"ui-widget-content ui-dialog-content\"></div>'),\n                          (U += \"</div>\"))\n                        : n.theme\n                        ? ((U = '<div class=\"blockUI ' + n.blockMsgClass + ' blockElement ui-dialog ui-widget ui-corner-all\" style=\"z-index:' + (x + 10) + ';display:none;position:absolute\">'),\n                          n.title && (U += '<div class=\"ui-widget-header ui-dialog-titlebar ui-corner-all blockTitle\">' + (n.title || \"&nbsp;\") + \"</div>\"),\n                          (U += '<div class=\"ui-widget-content ui-dialog-content\"></div>'),\n                          (U += \"</div>\"))\n                        : (U = k\n                              ? '<div class=\"blockUI ' + n.blockMsgClass + ' blockPage\" style=\"z-index:' + (x + 10) + ';display:none;position:fixed\"></div>'\n                              : '<div class=\"blockUI ' + n.blockMsgClass + ' blockElement\" style=\"z-index:' + (x + 10) + ';display:none;position:absolute\"></div>'),\n                    (w = e(U)),\n                    y && (n.theme ? (w.css(h), w.addClass(\"ui-widget-content\")) : w.css(s)),\n                    n.theme || I.css(n.overlayCSS),\n                    I.css(\"position\", k ? \"fixed\" : \"absolute\"),\n                    (r || n.forceIframe) && g.css(\"opacity\", 0);\n                var C = [g, I, w],\n                    S = e(k ? \"body\" : t);\n                e.each(C, function () {\n                    this.appendTo(S);\n                }),\n                    n.theme && n.draggable && e.fn.draggable && w.draggable({ handle: \".ui-dialog-titlebar\", cancel: \"li\" });\n                var O = f && (!e.support.boxModel || e(\"object,embed\", k ? null : t).length > 0);\n                if (u || O) {\n                    if ((k && n.allowBodyStretch && e.support.boxModel && e(\"html,body\").css(\"height\", \"100%\"), (u || !e.support.boxModel) && !k))\n                        var E = d(t, \"borderTopWidth\"),\n                            T = d(t, \"borderLeftWidth\"),\n                            M = E ? \"(0 - \" + E + \")\" : 0,\n                            B = T ? \"(0 - \" + T + \")\" : 0;\n                    e.each(C, function (e, t) {\n                        var o = t[0].style;\n                        if (((o.position = \"absolute\"), 2 > e))\n                            k\n                                ? o.setExpression(\"height\", \"Math.max(document.body.scrollHeight, document.body.offsetHeight) - (jQuery.support.boxModel?0:\" + n.quirksmodeOffsetHack + ') + \"px\"')\n                                : o.setExpression(\"height\", 'this.parentNode.offsetHeight + \"px\"'),\n                                k ? o.setExpression(\"width\", 'jQuery.support.boxModel && document.documentElement.clientWidth || document.body.clientWidth + \"px\"') : o.setExpression(\"width\", 'this.parentNode.offsetWidth + \"px\"'),\n                                B && o.setExpression(\"left\", B),\n                                M && o.setExpression(\"top\", M);\n                        else if (n.centerY)\n                            k &&\n                                o.setExpression(\n                                    \"top\",\n                                    '(document.documentElement.clientHeight || document.body.clientHeight) / 2 - (this.offsetHeight / 2) + (blah = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + \"px\"'\n                                ),\n                                (o.marginTop = 0);\n                        else if (!n.centerY && k) {\n                            var i = n.css && n.css.top ? parseInt(n.css.top, 10) : 0,\n                                s = \"((document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + \" + i + ') + \"px\"';\n                            o.setExpression(\"top\", s);\n                        }\n                    });\n                }\n                if ((y && (n.theme ? w.find(\".ui-widget-content\").append(y) : w.append(y), (y.jquery || y.nodeType) && e(y).show()), (r || n.forceIframe) && n.showOverlay && g.show(), n.fadeIn)) {\n                    var j = n.onBlock ? n.onBlock : c,\n                        H = n.showOverlay && !y ? j : c,\n                        z = y ? j : c;\n                    n.showOverlay && I._fadeIn(n.fadeIn, H), y && w._fadeIn(n.fadeIn, z);\n                } else n.showOverlay && I.show(), y && w.show(), n.onBlock && n.onBlock.bind(w)();\n                if ((i(1, t, n), k ? ((p = w[0]), (b = e(n.focusableElements, p)), n.focusInput && setTimeout(l, 20)) : a(w[0], n.centerX, n.centerY), n.timeout)) {\n                    var W = setTimeout(function () {\n                        k ? e.unblockUI(n) : e(t).unblock(n);\n                    }, n.timeout);\n                    e(t).data(\"blockUI.timeout\", W);\n                }\n            }\n        }\n        function o(t, o) {\n            var s,\n                l = t == window,\n                a = e(t),\n                d = a.data(\"blockUI.history\"),\n                c = a.data(\"blockUI.timeout\");\n            c && (clearTimeout(c), a.removeData(\"blockUI.timeout\")), (o = e.extend({}, e.blockUI.defaults, o || {})), i(0, t, o), null === o.onUnblock && ((o.onUnblock = a.data(\"blockUI.onUnblock\")), a.removeData(\"blockUI.onUnblock\"));\n            var r;\n            (r = l ? e(\"body\").children().filter(\".blockUI\").add(\"body > .blockUI\") : a.find(\">.blockUI\")),\n                o.cursorReset && (r.length > 1 && (r[1].style.cursor = o.cursorReset), r.length > 2 && (r[2].style.cursor = o.cursorReset)),\n                l && (p = b = null),\n                o.fadeOut\n                    ? ((s = r.length),\n                      r.stop().fadeOut(o.fadeOut, function () {\n                          0 === --s && n(r, d, o, t);\n                      }))\n                    : n(r, d, o, t);\n        }\n        function n(t, o, n, i) {\n            var s = e(i);\n            if (!s.data(\"blockUI.isBlocked\")) {\n                t.each(function (e, t) {\n                    this.parentNode && this.parentNode.removeChild(this);\n                }),\n                    o && o.el && ((o.el.style.display = o.display), (o.el.style.position = o.position), (o.el.style.cursor = \"default\"), o.parent && o.parent.appendChild(o.el), s.removeData(\"blockUI.history\")),\n                    s.data(\"blockUI.static\") && s.css(\"position\", \"static\"),\n                    \"function\" == typeof n.onUnblock && n.onUnblock(i, n);\n                var l = e(document.body),\n                    a = l.width(),\n                    d = l[0].style.width;\n                l.width(a - 1).width(a), (l[0].style.width = d);\n            }\n        }\n        function i(t, o, n) {\n            var i = o == window,\n                l = e(o);\n            if ((t || ((!i || p) && (i || l.data(\"blockUI.isBlocked\")))) && (l.data(\"blockUI.isBlocked\", t), i && n.bindEvents && (!t || n.showOverlay))) {\n                var a = \"mousedown mouseup keydown keypress keyup touchstart touchend touchmove\";\n                t ? e(document).bind(a, n, s) : e(document).unbind(a, s);\n            }\n        }\n        function s(t) {\n            if (\"keydown\" === t.type && t.keyCode && 9 == t.keyCode && p && t.data.constrainTabKey) {\n                var o = b,\n                    n = !t.shiftKey && t.target === o[o.length - 1],\n                    i = t.shiftKey && t.target === o[0];\n                if (n || i)\n                    return (\n                        setTimeout(function () {\n                            l(i);\n                        }, 10),\n                        !1\n                    );\n            }\n            var s = t.data,\n                a = e(t.target);\n            return a.hasClass(\"blockOverlay\") && s.onOverlayClick && s.onOverlayClick(t), a.parents(\"div.\" + s.blockMsgClass).length > 0 ? !0 : 0 === a.parents().children().filter(\"div.blockUI\").length;\n        }\n        function l(e) {\n            if (b) {\n                var t = b[e === !0 ? b.length - 1 : 0];\n                t && t.focus();\n            }\n        }\n        function a(e, t, o) {\n            var n = e.parentNode,\n                i = e.style,\n                s = (n.offsetWidth - e.offsetWidth) / 2 - d(n, \"borderLeftWidth\"),\n                l = (n.offsetHeight - e.offsetHeight) / 2 - d(n, \"borderTopWidth\");\n            t && (i.left = s > 0 ? s + \"px\" : \"0\"), o && (i.top = l > 0 ? l + \"px\" : \"0\");\n        }\n        function d(t, o) {\n            return parseInt(e.css(t, o), 10) || 0;\n        }\n        e.fn._fadeIn = e.fn.fadeIn;\n        var c = e.noop || function () {},\n            r = /MSIE/.test(navigator.userAgent),\n            u = /MSIE 6.0/.test(navigator.userAgent) && !/MSIE 8.0/.test(navigator.userAgent),\n            f = (document.documentMode || 0, e.isFunction(document.createElement(\"div\").style.setExpression));\n        (e.blockUI = function (e) {\n            t(window, e);\n        }),\n            (e.unblockUI = function (e) {\n                o(window, e);\n            }),\n            (e.growlUI = function (t, o, n, i) {\n                var s = e('<div class=\"growlUI\"></div>');\n                t && s.append(\"<h1>\" + t + \"</h1>\"), o && s.append(\"<h2>\" + o + \"</h2>\"), void 0 === n && (n = 3e3);\n                var l = function (t) {\n                    (t = t || {}),\n                        e.blockUI({\n                            message: s,\n                            fadeIn: \"undefined\" != typeof t.fadeIn ? t.fadeIn : 700,\n                            fadeOut: \"undefined\" != typeof t.fadeOut ? t.fadeOut : 1e3,\n                            timeout: \"undefined\" != typeof t.timeout ? t.timeout : n,\n                            centerY: !1,\n                            showOverlay: !1,\n                            onUnblock: i,\n                            css: e.blockUI.defaults.growlCSS,\n                        });\n                };\n                l();\n                s.css(\"opacity\");\n                s.mouseover(function () {\n                    l({ fadeIn: 0, timeout: 3e4 });\n                    var t = e(\".blockMsg\");\n                    t.stop(), t.fadeTo(300, 1);\n                }).mouseout(function () {\n                    e(\".blockMsg\").fadeOut(1e3);\n                });\n            }),\n            (e.fn.block = function (o) {\n                if (this[0] === window) return e.blockUI(o), this;\n                var n = e.extend({}, e.blockUI.defaults, o || {});\n                return (\n                    this.each(function () {\n                        var t = e(this);\n                        (n.ignoreIfBlocked && t.data(\"blockUI.isBlocked\")) || t.unblock({ fadeOut: 0 });\n                    }),\n                    this.each(function () {\n                        \"static\" == e.css(this, \"position\") && ((this.style.position = \"relative\"), e(this).data(\"blockUI.static\", !0)), (this.style.zoom = 1), t(this, o);\n                    })\n                );\n            }),\n            (e.fn.unblock = function (t) {\n                return this[0] === window\n                    ? (e.unblockUI(t), this)\n                    : this.each(function () {\n                          o(this, t);\n                      });\n            }),\n            (e.blockUI.version = 2.7),\n            (e.blockUI.defaults = {\n                message: \"<h1>Please wait...</h1>\",\n                title: null,\n                draggable: !0,\n                theme: !1,\n                css: { padding: 0, margin: 0, width: \"30%\", top: \"40%\", left: \"35%\", textAlign: \"center\", color: \"#000\", border: \"3px solid #aaa\", backgroundColor: \"#fff\", cursor: \"wait\" },\n                themedCSS: { width: \"30%\", top: \"40%\", left: \"35%\" },\n                overlayCSS: { backgroundColor: \"#000\", opacity: 0.6, cursor: \"wait\" },\n                cursorReset: \"default\",\n                growlCSS: {\n                    width: \"350px\",\n                    top: \"10px\",\n                    left: \"\",\n                    right: \"10px\",\n                    border: \"none\",\n                    padding: \"5px\",\n                    opacity: 0.6,\n                    cursor: \"default\",\n                    color: \"#fff\",\n                    backgroundColor: \"#000\",\n                    \"-webkit-border-radius\": \"10px\",\n                    \"-moz-border-radius\": \"10px\",\n                    \"border-radius\": \"10px\",\n                },\n                iframeSrc: /^https/i.test(window.location.href || \"\") ? \"javascript:false\" : \"about:blank\",\n                forceIframe: !1,\n                baseZ: 1e3,\n                centerX: !0,\n                centerY: !0,\n                allowBodyStretch: !0,\n                bindEvents: !0,\n                constrainTabKey: !0,\n                fadeIn: 200,\n                fadeOut: 400,\n                timeout: 0,\n                showOverlay: !0,\n                focusInput: !0,\n                focusableElements: \":input:enabled:visible\",\n                onBlock: null,\n                onUnblock: null,\n                onOverlayClick: null,\n                quirksmodeOffsetHack: 4,\n                blockMsgClass: \"blockMsg\",\n                ignoreIfBlocked: !1,\n            });\n        var p = null,\n            b = [];\n    }\n    \"function\" == typeof define && define.amd && define.amd.jQuery ? define([\"jquery\"], e) : e(jQuery);\n})();\n\n/*\n * jquery-match-height 0.7.2 by @liabru\n * http://brm.io/jquery-match-height/\n * License MIT\n */\n!(function (t) {\n    \"use strict\";\n    \"function\" == typeof define && define.amd ? define([\"jquery\"], t) : \"undefined\" != typeof module && module.exports ? (module.exports = t(require(\"jquery\"))) : t(jQuery);\n})(function (t) {\n    var e = -1,\n        o = -1,\n        n = function (t) {\n            return parseFloat(t) || 0;\n        },\n        a = function (e) {\n            var o = 1,\n                a = t(e),\n                i = null,\n                r = [];\n            return (\n                a.each(function () {\n                    var e = t(this),\n                        a = e.offset().top - n(e.css(\"margin-top\")),\n                        s = r.length > 0 ? r[r.length - 1] : null;\n                    null === s ? r.push(e) : Math.floor(Math.abs(i - a)) <= o ? (r[r.length - 1] = s.add(e)) : r.push(e), (i = a);\n                }),\n                r\n            );\n        },\n        i = function (e) {\n            var o = {\n                byRow: !0,\n                property: \"height\",\n                target: null,\n                remove: !1,\n            };\n            return \"object\" == typeof e ? t.extend(o, e) : (\"boolean\" == typeof e ? (o.byRow = e) : \"remove\" === e && (o.remove = !0), o);\n        },\n        r = (t.fn.matchHeight = function (e) {\n            var o = i(e);\n            if (o.remove) {\n                var n = this;\n                return (\n                    this.css(o.property, \"\"),\n                    t.each(r._groups, function (t, e) {\n                        e.elements = e.elements.not(n);\n                    }),\n                    this\n                );\n            }\n            return this.length <= 1 && !o.target ? this : (r._groups.push({ elements: this, options: o }), r._apply(this, o), this);\n        });\n    (r.version = \"0.7.2\"),\n        (r._groups = []),\n        (r._throttle = 80),\n        (r._maintainScroll = !1),\n        (r._beforeUpdate = null),\n        (r._afterUpdate = null),\n        (r._rows = a),\n        (r._parse = n),\n        (r._parseOptions = i),\n        (r._apply = function (e, o) {\n            var s = i(o),\n                h = t(e),\n                l = [h],\n                c = t(window).scrollTop(),\n                p = t(\"html\").outerHeight(!0),\n                u = h.parents().filter(\":hidden\");\n            return (\n                u.each(function () {\n                    var e = t(this);\n                    e.data(\"style-cache\", e.attr(\"style\"));\n                }),\n                u.css(\"display\", \"block\"),\n                s.byRow &&\n                    !s.target &&\n                    (h.each(function () {\n                        var e = t(this),\n                            o = e.css(\"display\");\n                        \"inline-block\" !== o && \"flex\" !== o && \"inline-flex\" !== o && (o = \"block\"),\n                            e.data(\"style-cache\", e.attr(\"style\")),\n                            e.css({ display: o, \"padding-top\": \"0\", \"padding-bottom\": \"0\", \"margin-top\": \"0\", \"margin-bottom\": \"0\", \"border-top-width\": \"0\", \"border-bottom-width\": \"0\", height: \"100px\", overflow: \"hidden\" });\n                    }),\n                    (l = a(h)),\n                    h.each(function () {\n                        var e = t(this);\n                        e.attr(\"style\", e.data(\"style-cache\") || \"\");\n                    })),\n                t.each(l, function (e, o) {\n                    var a = t(o),\n                        i = 0;\n                    if (s.target) i = s.target.outerHeight(!1);\n                    else {\n                        if (s.byRow && a.length <= 1) return void a.css(s.property, \"\");\n                        a.each(function () {\n                            var e = t(this),\n                                o = e.attr(\"style\"),\n                                n = e.css(\"display\");\n                            \"inline-block\" !== n && \"flex\" !== n && \"inline-flex\" !== n && (n = \"block\");\n                            var a = {\n                                display: n,\n                            };\n                            (a[s.property] = \"\"), e.css(a), e.outerHeight(!1) > i && (i = e.outerHeight(!1)), o ? e.attr(\"style\", o) : e.css(\"display\", \"\");\n                        });\n                    }\n                    a.each(function () {\n                        var e = t(this),\n                            o = 0;\n                        (s.target && e.is(s.target)) ||\n                            (\"border-box\" !== e.css(\"box-sizing\") && ((o += n(e.css(\"border-top-width\")) + n(e.css(\"border-bottom-width\"))), (o += n(e.css(\"padding-top\")) + n(e.css(\"padding-bottom\")))), e.css(s.property, i - o + \"px\"));\n                    });\n                }),\n                u.each(function () {\n                    var e = t(this);\n                    e.attr(\"style\", e.data(\"style-cache\") || null);\n                }),\n                r._maintainScroll && t(window).scrollTop((c / p) * t(\"html\").outerHeight(!0)),\n                this\n            );\n        }),\n        (r._applyDataApi = function () {\n            var e = {};\n            t(\"[data-match-height], [data-mh]\").each(function () {\n                var o = t(this),\n                    n = o.attr(\"data-mh\") || o.attr(\"data-match-height\");\n                n in e ? (e[n] = e[n].add(o)) : (e[n] = o);\n            }),\n                t.each(e, function () {\n                    this.matchHeight(!0);\n                });\n        });\n    var s = function (e) {\n        r._beforeUpdate && r._beforeUpdate(e, r._groups),\n            t.each(r._groups, function () {\n                r._apply(this.elements, this.options);\n            }),\n            r._afterUpdate && r._afterUpdate(e, r._groups);\n    };\n    (r._update = function (n, a) {\n        if (a && \"resize\" === a.type) {\n            var i = t(window).width();\n            if (i === e) return;\n            e = i;\n        }\n        n\n            ? o === -1 &&\n              (o = setTimeout(function () {\n                  s(a), (o = -1);\n              }, r._throttle))\n            : s(a);\n    }),\n        t(r._applyDataApi);\n    var h = t.fn.on ? \"on\" : \"bind\";\n    t(window)[h](\"load\", function (t) {\n        r._update(!1, t);\n    }),\n        t(window)[h](\"resize orientationchange\", function (t) {\n            r._update(!0, t);\n        });\n});\n/*\n *\tjQuery Sliding Menu Plugin\n *\tMobile app list-style navigation in the browser\n *\n *\tWritten by Ali Zahid\n *\thttp://designplox.com/jquery-sliding-menu\n */\n!(function (a) {\n    var e = [];\n    a.fn.slidingMenu = function (t) {\n        function n(e) {\n            var t = a(\"ul\", e),\n                n = [];\n            return (\n                a(t).each(function (e, t) {\n                    var r = a(t),\n                        s = r.prev(),\n                        l = i();\n                    if ((1 == s.length && (s.addClass(\"nav-has-children dropdown-item\").attr(\"href\", \"#menu-panel-\" + l), s.append('<i class=\"ft-arrow-right children-in\"></i>')), r.attr(\"id\", \"menu-panel-\" + l), 0 == e))\n                        r.addClass(\"menu-panel-root\");\n                    else {\n                        r.addClass(\"menu-panel\");\n                        var d = (a(\"<li></li>\"), a(\"<a></a>\").addClass(\"nav-has-parent back primary dropdown-item\").attr(\"href\", \"#menu-panel-back\"));\n                        r.prepend(d);\n                    }\n                    n.push(t);\n                }),\n                n\n            );\n        }\n        function r(e, t) {\n            var n = { id: \"menu-panel-\" + i(), children: [], root: t ? !1 : !0 },\n                s = [];\n            return (\n                t && n.children.push({ styleClass: \"back\", href: \"#\" + t.id }),\n                a(e).each(function (a, e) {\n                    if ((n.children.push(e), e.children)) {\n                        var t = r(e.children, n);\n                        (e.href = \"#\" + t[0].id), (e.styleClass = \"nav\"), (s = s.concat(t));\n                    }\n                }),\n                [n].concat(s)\n            );\n        }\n        function i() {\n            var a;\n            do a = Math.random().toString(36).substring(3, 8);\n            while (e.indexOf(a) >= 0);\n            return e.push(a), a;\n        }\n        function s() {\n            var e = a(\".sliding-menu-wrapper\"),\n                t = a(\".sliding-menu-wrapper ul\");\n            t.length &&\n                setTimeout(function () {\n                    var n = a(l).width();\n                    e.width(t.length * n),\n                        t.each(function (e, t) {\n                            var r = a(t);\n                            r.width(n);\n                        }),\n                        e.css(\"margin-left\", \"\");\n                }, 300);\n        }\n        var l = this.selector,\n            d = !1;\n        \"rtl\" == a(\"html\").data(\"textdirection\") && (d = !0);\n        var h = a.extend({ dataJSON: !1, backLabel: \"Back\" }, t);\n        return this.each(function () {\n            var e,\n                t = this,\n                i = a(t);\n            if (i.hasClass(\"sliding-menu\")) return void s();\n            var l = i.outerWidth();\n            (e = h.dataJSON ? r(h.dataJSON) : n(i)), i.empty().addClass(\"sliding-menu\");\n            var p;\n            h.dataJSON\n                ? a(e).each(function (e, t) {\n                      var n = a(\"<ul></ul>\");\n                      t.root && (p = \"#\" + t.id),\n                          n.attr(\"id\", t.id),\n                          n.addClass(\"menu-panel\"),\n                          n.width(l),\n                          a(t.children).each(function (e, t) {\n                              var r = a(\"<a></a>\");\n                              r.attr(\"class\", t.styleClass), r.attr(\"href\", t.href), r.text(t.label);\n                              var i = a(\"<li></li>\");\n                              i.append(r), n.append(i);\n                          }),\n                          i.append(n);\n                  })\n                : a(e).each(function (e, t) {\n                      var n = a(t);\n                      n.hasClass(\"menu-panel-root\") && (p = \"#\" + n.attr(\"id\")), n.width(l), i.append(t);\n                  }),\n                (p = a(p)),\n                p.addClass(\"menu-panel-root\");\n            var c = p;\n            i.height(p.height());\n            var u = a(\"<div></div>\")\n                .addClass(\"sliding-menu-wrapper\")\n                .width(e.length * l);\n            return (\n                i.wrapInner(u),\n                (u = a(\".sliding-menu-wrapper\", i)),\n                a(\"a\", t).on(\"click\", function (e) {\n                    var t = a(this).attr(\"href\"),\n                        n = a(this).text();\n                    if (u.is(\":animated\")) return void e.preventDefault();\n                    if (\"#\" == t) e.preventDefault();\n                    else if (0 == t.indexOf(\"#menu-panel\")) {\n                        var r,\n                            s,\n                            l = a(t),\n                            o = a(this).hasClass(\"back\");\n                        d === !0 ? (s = parseInt(u.css(\"margin-right\"))) : (r = parseInt(u.css(\"margin-left\")));\n                        var f = i.width();\n                        a(this).closest(\"ul\").hasClass(\"menu-panel-root\") && (c = p),\n                            o\n                                ? (\"#menu-panel-back\" == t && (l = c.prev()), d === !0 ? (properties = { marginRight: s + f }) : (properties = { marginLeft: r + f }), u.stop(!0, !0).animate(properties, \"fast\"))\n                                : (l.insertAfter(c),\n                                  h.backLabel === !0 ? a(\".back\", l).html('<i class=\"fa fa-arrow-circle-o-left back-in\"></i>' + n) : a(\".back\", l).text(h.backLabel),\n                                  d === !0 ? (properties = { marginRight: s - f }) : (properties = { marginLeft: r - f }),\n                                  u.stop(!0, !0).animate(properties, \"fast\")),\n                            (c = l),\n                            i.stop(!0, !0).animate({ height: l.height() }, \"fast\"),\n                            e.preventDefault();\n                    }\n                }),\n                this\n            );\n        });\n    };\n})(jQuery);\n\n/*!\n * screenfull\n * v5.0.0 - 2019-09-09\n * (c) Sindre Sorhus; MIT License\n */\n\n!(function () {\n    \"use strict\";\n    var u = \"undefined\" != typeof window && void 0 !== window.document ? window.document : {},\n        e = \"undefined\" != typeof module && module.exports,\n        t = (function () {\n            for (\n                var e,\n                    n = [\n                        [\"requestFullscreen\", \"exitFullscreen\", \"fullscreenElement\", \"fullscreenEnabled\", \"fullscreenchange\", \"fullscreenerror\"],\n                        [\"webkitRequestFullscreen\", \"webkitExitFullscreen\", \"webkitFullscreenElement\", \"webkitFullscreenEnabled\", \"webkitfullscreenchange\", \"webkitfullscreenerror\"],\n                        [\"webkitRequestFullScreen\", \"webkitCancelFullScreen\", \"webkitCurrentFullScreenElement\", \"webkitCancelFullScreen\", \"webkitfullscreenchange\", \"webkitfullscreenerror\"],\n                        [\"mozRequestFullScreen\", \"mozCancelFullScreen\", \"mozFullScreenElement\", \"mozFullScreenEnabled\", \"mozfullscreenchange\", \"mozfullscreenerror\"],\n                        [\"msRequestFullscreen\", \"msExitFullscreen\", \"msFullscreenElement\", \"msFullscreenEnabled\", \"MSFullscreenChange\", \"MSFullscreenError\"],\n                    ],\n                    l = 0,\n                    r = n.length,\n                    t = {};\n                l < r;\n                l++\n            )\n                if ((e = n[l]) && e[1] in u) {\n                    for (l = 0; l < e.length; l++) t[n[0][l]] = e[l];\n                    return t;\n                }\n            return !1;\n        })(),\n        r = { change: t.fullscreenchange, error: t.fullscreenerror },\n        n = {\n            request: function (r) {\n                return new Promise(\n                    function (e, n) {\n                        var l = function () {\n                            this.off(\"change\", l), e();\n                        }.bind(this);\n                        this.on(\"change\", l), (r = r || u.documentElement), Promise.resolve(r[t.requestFullscreen]()).catch(n);\n                    }.bind(this)\n                );\n            },\n            exit: function () {\n                return new Promise(\n                    function (e, n) {\n                        if (this.isFullscreen) {\n                            var l = function () {\n                                this.off(\"change\", l), e();\n                            }.bind(this);\n                            this.on(\"change\", l), Promise.resolve(u[t.exitFullscreen]()).catch(n);\n                        } else e();\n                    }.bind(this)\n                );\n            },\n            toggle: function (e) {\n                return this.isFullscreen ? this.exit() : this.request(e);\n            },\n            onchange: function (e) {\n                this.on(\"change\", e);\n            },\n            onerror: function (e) {\n                this.on(\"error\", e);\n            },\n            on: function (e, n) {\n                var l = r[e];\n                l && u.addEventListener(l, n, !1);\n            },\n            off: function (e, n) {\n                var l = r[e];\n                l && u.removeEventListener(l, n, !1);\n            },\n            raw: t,\n        };\n    t\n        ? (Object.defineProperties(n, {\n              isFullscreen: {\n                  get: function () {\n                      return Boolean(u[t.fullscreenElement]);\n                  },\n              },\n              element: {\n                  enumerable: !0,\n                  get: function () {\n                      return u[t.fullscreenElement];\n                  },\n              },\n              isEnabled: {\n                  enumerable: !0,\n                  get: function () {\n                      return Boolean(u[t.fullscreenEnabled]);\n                  },\n              },\n          }),\n          e ? (module.exports = n) : (window.screenfull = n))\n        : e\n        ? (module.exports = { isEnabled: !1 })\n        : (window.screenfull = { isEnabled: !1 });\n})();\n\n/*! pace 1.0.2 */\n(function () {\n    var a,\n        b,\n        c,\n        d,\n        e,\n        f,\n        g,\n        h,\n        i,\n        j,\n        k,\n        l,\n        m,\n        n,\n        o,\n        p,\n        q,\n        r,\n        s,\n        t,\n        u,\n        v,\n        w,\n        x,\n        y,\n        z,\n        A,\n        B,\n        C,\n        D,\n        E,\n        F,\n        G,\n        H,\n        I,\n        J,\n        K,\n        L,\n        M,\n        N,\n        O,\n        P,\n        Q,\n        R,\n        S,\n        T,\n        U,\n        V,\n        W,\n        X = [].slice,\n        Y = {}.hasOwnProperty,\n        Z = function (a, b) {\n            function c() {\n                this.constructor = a;\n            }\n            for (var d in b) Y.call(b, d) && (a[d] = b[d]);\n            return (c.prototype = b.prototype), (a.prototype = new c()), (a.__super__ = b.prototype), a;\n        },\n        $ =\n            [].indexOf ||\n            function (a) {\n                for (var b = 0, c = this.length; c > b; b++) if (b in this && this[b] === a) return b;\n                return -1;\n            };\n    for (\n        u = {\n            catchupTime: 100,\n            initialRate: 0.03,\n            minTime: 250,\n            ghostTime: 100,\n            maxProgressPerFrame: 20,\n            easeFactor: 1.25,\n            startOnPageLoad: !0,\n            restartOnPushState: !0,\n            restartOnRequestAfter: 500,\n            target: \"body\",\n            elements: { checkInterval: 100, selectors: [\"body\"] },\n            eventLag: { minSamples: 10, sampleCount: 3, lagThreshold: 3 },\n            ajax: { trackMethods: [\"GET\"], trackWebSockets: !0, ignoreURLs: [] },\n        },\n            C = function () {\n                var a;\n                return null != (a = \"undefined\" != typeof performance && null !== performance && \"function\" == typeof performance.now ? performance.now() : void 0) ? a : +new Date();\n            },\n            E = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame,\n            t = window.cancelAnimationFrame || window.mozCancelAnimationFrame,\n            null == E &&\n                ((E = function (a) {\n                    return setTimeout(a, 50);\n                }),\n                (t = function (a) {\n                    return clearTimeout(a);\n                })),\n            G = function (a) {\n                var b, c;\n                return (\n                    (b = C()),\n                    (c = function () {\n                        var d;\n                        return (\n                            (d = C() - b),\n                            d >= 33\n                                ? ((b = C()),\n                                  a(d, function () {\n                                      return E(c);\n                                  }))\n                                : setTimeout(c, 33 - d)\n                        );\n                    })()\n                );\n            },\n            F = function () {\n                var a, b, c;\n                return (c = arguments[0]), (b = arguments[1]), (a = 3 <= arguments.length ? X.call(arguments, 2) : []), \"function\" == typeof c[b] ? c[b].apply(c, a) : c[b];\n            },\n            v = function () {\n                var a, b, c, d, e, f, g;\n                for (b = arguments[0], d = 2 <= arguments.length ? X.call(arguments, 1) : [], f = 0, g = d.length; g > f; f++)\n                    if ((c = d[f])) for (a in c) Y.call(c, a) && ((e = c[a]), null != b[a] && \"object\" == typeof b[a] && null != e && \"object\" == typeof e ? v(b[a], e) : (b[a] = e));\n                return b;\n            },\n            q = function (a) {\n                var b, c, d, e, f;\n                for (c = b = 0, e = 0, f = a.length; f > e; e++) (d = a[e]), (c += Math.abs(d)), b++;\n                return c / b;\n            },\n            x = function (a, b) {\n                var c, d, e;\n                if ((null == a && (a = \"options\"), null == b && (b = !0), (e = document.querySelector(\"[data-pace-\" + a + \"]\")))) {\n                    if (((c = e.getAttribute(\"data-pace-\" + a)), !b)) return c;\n                    try {\n                        return JSON.parse(c);\n                    } catch (f) {\n                        return (d = f), \"undefined\" != typeof console && null !== console ? console.error(\"Error parsing inline pace options\", d) : void 0;\n                    }\n                }\n            },\n            g = (function () {\n                function a() {}\n                return (\n                    (a.prototype.on = function (a, b, c, d) {\n                        var e;\n                        return null == d && (d = !1), null == this.bindings && (this.bindings = {}), null == (e = this.bindings)[a] && (e[a] = []), this.bindings[a].push({ handler: b, ctx: c, once: d });\n                    }),\n                    (a.prototype.once = function (a, b, c) {\n                        return this.on(a, b, c, !0);\n                    }),\n                    (a.prototype.off = function (a, b) {\n                        var c, d, e;\n                        if (null != (null != (d = this.bindings) ? d[a] : void 0)) {\n                            if (null == b) return delete this.bindings[a];\n                            for (c = 0, e = []; c < this.bindings[a].length; ) e.push(this.bindings[a][c].handler === b ? this.bindings[a].splice(c, 1) : c++);\n                            return e;\n                        }\n                    }),\n                    (a.prototype.trigger = function () {\n                        var a, b, c, d, e, f, g, h, i;\n                        if (((c = arguments[0]), (a = 2 <= arguments.length ? X.call(arguments, 1) : []), null != (g = this.bindings) ? g[c] : void 0)) {\n                            for (e = 0, i = []; e < this.bindings[c].length; ) (h = this.bindings[c][e]), (d = h.handler), (b = h.ctx), (f = h.once), d.apply(null != b ? b : this, a), i.push(f ? this.bindings[c].splice(e, 1) : e++);\n                            return i;\n                        }\n                    }),\n                    a\n                );\n            })(),\n            j = window.Pace || {},\n            window.Pace = j,\n            v(j, g.prototype),\n            D = j.options = v({}, u, window.paceOptions, x()),\n            U = [\"ajax\", \"document\", \"eventLag\", \"elements\"],\n            Q = 0,\n            S = U.length;\n        S > Q;\n        Q++\n    )\n        (K = U[Q]), D[K] === !0 && (D[K] = u[K]);\n    (i = (function (a) {\n        function b() {\n            return (V = b.__super__.constructor.apply(this, arguments));\n        }\n        return Z(b, a), b;\n    })(Error)),\n        (b = (function () {\n            function a() {\n                this.progress = 0;\n            }\n            return (\n                (a.prototype.getElement = function () {\n                    var a;\n                    if (null == this.el) {\n                        if (((a = document.querySelector(D.target)), !a)) throw new i();\n                        (this.el = document.createElement(\"div\")),\n                            (this.el.className = \"pace pace-active\"),\n                            (document.body.className = document.body.className.replace(/pace-done/g, \"\")),\n                            (document.body.className += \" pace-running\"),\n                            (this.el.innerHTML = '<div class=\"pace-progress\">\\n  <div class=\"pace-progress-inner\"></div>\\n</div>\\n<div class=\"pace-activity\"></div>'),\n                            null != a.firstChild ? a.insertBefore(this.el, a.firstChild) : a.appendChild(this.el);\n                    }\n                    return this.el;\n                }),\n                (a.prototype.finish = function () {\n                    var a;\n                    return (\n                        (a = this.getElement()),\n                        (a.className = a.className.replace(\"pace-active\", \"\")),\n                        (a.className += \" pace-inactive\"),\n                        (document.body.className = document.body.className.replace(\"pace-running\", \"\")),\n                        (document.body.className += \" pace-done\")\n                    );\n                }),\n                (a.prototype.update = function (a) {\n                    return (this.progress = a), this.render();\n                }),\n                (a.prototype.destroy = function () {\n                    try {\n                        this.getElement().parentNode.removeChild(this.getElement());\n                    } catch (a) {\n                        i = a;\n                    }\n                    return (this.el = void 0);\n                }),\n                (a.prototype.render = function () {\n                    var a, b, c, d, e, f, g;\n                    if (null == document.querySelector(D.target)) return !1;\n                    for (a = this.getElement(), d = \"translate3d(\" + this.progress + \"%, 0, 0)\", g = [\"webkitTransform\", \"msTransform\", \"transform\"], e = 0, f = g.length; f > e; e++) (b = g[e]), (a.children[0].style[b] = d);\n                    return (\n                        (!this.lastRenderedProgress || this.lastRenderedProgress | (0 !== this.progress) | 0) &&\n                            (a.children[0].setAttribute(\"data-progress-text\", \"\" + (0 | this.progress) + \"%\"),\n                            this.progress >= 100 ? (c = \"99\") : ((c = this.progress < 10 ? \"0\" : \"\"), (c += 0 | this.progress)),\n                            a.children[0].setAttribute(\"data-progress\", \"\" + c)),\n                        (this.lastRenderedProgress = this.progress)\n                    );\n                }),\n                (a.prototype.done = function () {\n                    return this.progress >= 100;\n                }),\n                a\n            );\n        })()),\n        (h = (function () {\n            function a() {\n                this.bindings = {};\n            }\n            return (\n                (a.prototype.trigger = function (a, b) {\n                    var c, d, e, f, g;\n                    if (null != this.bindings[a]) {\n                        for (f = this.bindings[a], g = [], d = 0, e = f.length; e > d; d++) (c = f[d]), g.push(c.call(this, b));\n                        return g;\n                    }\n                }),\n                (a.prototype.on = function (a, b) {\n                    var c;\n                    return null == (c = this.bindings)[a] && (c[a] = []), this.bindings[a].push(b);\n                }),\n                a\n            );\n        })()),\n        (P = window.XMLHttpRequest),\n        (O = window.XDomainRequest),\n        (N = window.WebSocket),\n        (w = function (a, b) {\n            var c, d, e;\n            e = [];\n            for (d in b.prototype)\n                try {\n                    e.push(\n                        null == a[d] && \"function\" != typeof b[d]\n                            ? \"function\" == typeof Object.defineProperty\n                                ? Object.defineProperty(a, d, {\n                                      get: function () {\n                                          return b.prototype[d];\n                                      },\n                                      configurable: !0,\n                                      enumerable: !0,\n                                  })\n                                : (a[d] = b.prototype[d])\n                            : void 0\n                    );\n                } catch (f) {\n                    c = f;\n                }\n            return e;\n        }),\n        (A = []),\n        (j.ignore = function () {\n            var a, b, c;\n            return (b = arguments[0]), (a = 2 <= arguments.length ? X.call(arguments, 1) : []), A.unshift(\"ignore\"), (c = b.apply(null, a)), A.shift(), c;\n        }),\n        (j.track = function () {\n            var a, b, c;\n            return (b = arguments[0]), (a = 2 <= arguments.length ? X.call(arguments, 1) : []), A.unshift(\"track\"), (c = b.apply(null, a)), A.shift(), c;\n        }),\n        (J = function (a) {\n            var b;\n            if ((null == a && (a = \"GET\"), \"track\" === A[0])) return \"force\";\n            if (!A.length && D.ajax) {\n                if (\"socket\" === a && D.ajax.trackWebSockets) return !0;\n                if (((b = a.toUpperCase()), $.call(D.ajax.trackMethods, b) >= 0)) return !0;\n            }\n            return !1;\n        }),\n        (k = (function (a) {\n            function b() {\n                var a,\n                    c = this;\n                b.__super__.constructor.apply(this, arguments),\n                    (a = function (a) {\n                        var b;\n                        return (\n                            (b = a.open),\n                            (a.open = function (d, e) {\n                                return J(d) && c.trigger(\"request\", { type: d, url: e, request: a }), b.apply(a, arguments);\n                            })\n                        );\n                    }),\n                    (window.XMLHttpRequest = function (b) {\n                        var c;\n                        return (c = new P(b)), a(c), c;\n                    });\n                try {\n                    w(window.XMLHttpRequest, P);\n                } catch (d) {}\n                if (null != O) {\n                    window.XDomainRequest = function () {\n                        var b;\n                        return (b = new O()), a(b), b;\n                    };\n                    try {\n                        w(window.XDomainRequest, O);\n                    } catch (d) {}\n                }\n                if (null != N && D.ajax.trackWebSockets) {\n                    window.WebSocket = function (a, b) {\n                        var d;\n                        return (d = null != b ? new N(a, b) : new N(a)), J(\"socket\") && c.trigger(\"request\", { type: \"socket\", url: a, protocols: b, request: d }), d;\n                    };\n                    try {\n                        w(window.WebSocket, N);\n                    } catch (d) {}\n                }\n            }\n            return Z(b, a), b;\n        })(h)),\n        (R = null),\n        (y = function () {\n            return null == R && (R = new k()), R;\n        }),\n        (I = function (a) {\n            var b, c, d, e;\n            for (e = D.ajax.ignoreURLs, c = 0, d = e.length; d > c; c++)\n                if (((b = e[c]), \"string\" == typeof b)) {\n                    if (-1 !== a.indexOf(b)) return !0;\n                } else if (b.test(a)) return !0;\n            return !1;\n        }),\n        y().on(\"request\", function (b) {\n            var c, d, e, f, g;\n            return (\n                (f = b.type),\n                (e = b.request),\n                (g = b.url),\n                I(g)\n                    ? void 0\n                    : j.running || (D.restartOnRequestAfter === !1 && \"force\" !== J(f))\n                    ? void 0\n                    : ((d = arguments),\n                      (c = D.restartOnRequestAfter || 0),\n                      \"boolean\" == typeof c && (c = 0),\n                      setTimeout(function () {\n                          var b, c, g, h, i, k;\n                          if ((b = \"socket\" === f ? e.readyState < 2 : 0 < (h = e.readyState) && 4 > h)) {\n                              for (j.restart(), i = j.sources, k = [], c = 0, g = i.length; g > c; c++) {\n                                  if (((K = i[c]), K instanceof a)) {\n                                      K.watch.apply(K, d);\n                                      break;\n                                  }\n                                  k.push(void 0);\n                              }\n                              return k;\n                          }\n                      }, c))\n            );\n        }),\n        (a = (function () {\n            function a() {\n                var a = this;\n                (this.elements = []),\n                    y().on(\"request\", function () {\n                        return a.watch.apply(a, arguments);\n                    });\n            }\n            return (\n                (a.prototype.watch = function (a) {\n                    var b, c, d, e;\n                    return (d = a.type), (b = a.request), (e = a.url), I(e) ? void 0 : ((c = \"socket\" === d ? new n(b) : new o(b)), this.elements.push(c));\n                }),\n                a\n            );\n        })()),\n        (o = (function () {\n            function a(a) {\n                var b,\n                    c,\n                    d,\n                    e,\n                    f,\n                    g,\n                    h = this;\n                if (((this.progress = 0), null != window.ProgressEvent))\n                    for (\n                        c = null,\n                            a.addEventListener(\n                                \"progress\",\n                                function (a) {\n                                    return (h.progress = a.lengthComputable ? (100 * a.loaded) / a.total : h.progress + (100 - h.progress) / 2);\n                                },\n                                !1\n                            ),\n                            g = [\"load\", \"abort\", \"timeout\", \"error\"],\n                            d = 0,\n                            e = g.length;\n                        e > d;\n                        d++\n                    )\n                        (b = g[d]),\n                            a.addEventListener(\n                                b,\n                                function () {\n                                    return (h.progress = 100);\n                                },\n                                !1\n                            );\n                else\n                    (f = a.onreadystatechange),\n                        (a.onreadystatechange = function () {\n                            var b;\n                            return 0 === (b = a.readyState) || 4 === b ? (h.progress = 100) : 3 === a.readyState && (h.progress = 50), \"function\" == typeof f ? f.apply(null, arguments) : void 0;\n                        });\n            }\n            return a;\n        })()),\n        (n = (function () {\n            function a(a) {\n                var b,\n                    c,\n                    d,\n                    e,\n                    f = this;\n                for (this.progress = 0, e = [\"error\", \"open\"], c = 0, d = e.length; d > c; c++)\n                    (b = e[c]),\n                        a.addEventListener(\n                            b,\n                            function () {\n                                return (f.progress = 100);\n                            },\n                            !1\n                        );\n            }\n            return a;\n        })()),\n        (d = (function () {\n            function a(a) {\n                var b, c, d, f;\n                for (null == a && (a = {}), this.elements = [], null == a.selectors && (a.selectors = []), f = a.selectors, c = 0, d = f.length; d > c; c++) (b = f[c]), this.elements.push(new e(b));\n            }\n            return a;\n        })()),\n        (e = (function () {\n            function a(a) {\n                (this.selector = a), (this.progress = 0), this.check();\n            }\n            return (\n                (a.prototype.check = function () {\n                    var a = this;\n                    return document.querySelector(this.selector)\n                        ? this.done()\n                        : setTimeout(function () {\n                              return a.check();\n                          }, D.elements.checkInterval);\n                }),\n                (a.prototype.done = function () {\n                    return (this.progress = 100);\n                }),\n                a\n            );\n        })()),\n        (c = (function () {\n            function a() {\n                var a,\n                    b,\n                    c = this;\n                (this.progress = null != (b = this.states[document.readyState]) ? b : 100),\n                    (a = document.onreadystatechange),\n                    (document.onreadystatechange = function () {\n                        return null != c.states[document.readyState] && (c.progress = c.states[document.readyState]), \"function\" == typeof a ? a.apply(null, arguments) : void 0;\n                    });\n            }\n            return (a.prototype.states = { loading: 0, interactive: 50, complete: 100 }), a;\n        })()),\n        (f = (function () {\n            function a() {\n                var a,\n                    b,\n                    c,\n                    d,\n                    e,\n                    f = this;\n                (this.progress = 0),\n                    (a = 0),\n                    (e = []),\n                    (d = 0),\n                    (c = C()),\n                    (b = setInterval(function () {\n                        var g;\n                        return (\n                            (g = C() - c - 50),\n                            (c = C()),\n                            e.push(g),\n                            e.length > D.eventLag.sampleCount && e.shift(),\n                            (a = q(e)),\n                            ++d >= D.eventLag.minSamples && a < D.eventLag.lagThreshold ? ((f.progress = 100), clearInterval(b)) : (f.progress = 100 * (3 / (a + 3)))\n                        );\n                    }, 50));\n            }\n            return a;\n        })()),\n        (m = (function () {\n            function a(a) {\n                (this.source = a), (this.last = this.sinceLastUpdate = 0), (this.rate = D.initialRate), (this.catchup = 0), (this.progress = this.lastProgress = 0), null != this.source && (this.progress = F(this.source, \"progress\"));\n            }\n            return (\n                (a.prototype.tick = function (a, b) {\n                    var c;\n                    return (\n                        null == b && (b = F(this.source, \"progress\")),\n                        b >= 100 && (this.done = !0),\n                        b === this.last\n                            ? (this.sinceLastUpdate += a)\n                            : (this.sinceLastUpdate && (this.rate = (b - this.last) / this.sinceLastUpdate), (this.catchup = (b - this.progress) / D.catchupTime), (this.sinceLastUpdate = 0), (this.last = b)),\n                        b > this.progress && (this.progress += this.catchup * a),\n                        (c = 1 - Math.pow(this.progress / 100, D.easeFactor)),\n                        (this.progress += c * this.rate * a),\n                        (this.progress = Math.min(this.lastProgress + D.maxProgressPerFrame, this.progress)),\n                        (this.progress = Math.max(0, this.progress)),\n                        (this.progress = Math.min(100, this.progress)),\n                        (this.lastProgress = this.progress),\n                        this.progress\n                    );\n                }),\n                a\n            );\n        })()),\n        (L = null),\n        (H = null),\n        (r = null),\n        (M = null),\n        (p = null),\n        (s = null),\n        (j.running = !1),\n        (z = function () {\n            return D.restartOnPushState ? j.restart() : void 0;\n        }),\n        null != window.history.pushState &&\n            ((T = window.history.pushState),\n            (window.history.pushState = function () {\n                return z(), T.apply(window.history, arguments);\n            })),\n        null != window.history.replaceState &&\n            ((W = window.history.replaceState),\n            (window.history.replaceState = function () {\n                return z(), W.apply(window.history, arguments);\n            })),\n        (l = { ajax: a, elements: d, document: c, eventLag: f }),\n        (B = function () {\n            var a, c, d, e, f, g, h, i;\n            for (j.sources = L = [], g = [\"ajax\", \"elements\", \"document\", \"eventLag\"], c = 0, e = g.length; e > c; c++) (a = g[c]), D[a] !== !1 && L.push(new l[a](D[a]));\n            for (i = null != (h = D.extraSources) ? h : [], d = 0, f = i.length; f > d; d++) (K = i[d]), L.push(new K(D));\n            return (j.bar = r = new b()), (H = []), (M = new m());\n        })(),\n        (j.stop = function () {\n            return j.trigger(\"stop\"), (j.running = !1), r.destroy(), (s = !0), null != p && (\"function\" == typeof t && t(p), (p = null)), B();\n        }),\n        (j.restart = function () {\n            return j.trigger(\"restart\"), j.stop(), j.start();\n        }),\n        (j.go = function () {\n            var a;\n            return (\n                (j.running = !0),\n                r.render(),\n                (a = C()),\n                (s = !1),\n                (p = G(function (b, c) {\n                    var d, e, f, g, h, i, k, l, n, o, p, q, t, u, v, w;\n                    for (l = 100 - r.progress, e = p = 0, f = !0, i = q = 0, u = L.length; u > q; i = ++q)\n                        for (K = L[i], o = null != H[i] ? H[i] : (H[i] = []), h = null != (w = K.elements) ? w : [K], k = t = 0, v = h.length; v > t; k = ++t)\n                            (g = h[k]), (n = null != o[k] ? o[k] : (o[k] = new m(g))), (f &= n.done), n.done || (e++, (p += n.tick(b)));\n                    return (\n                        (d = p / e),\n                        r.update(M.tick(b, d)),\n                        r.done() || f || s\n                            ? (r.update(100),\n                              j.trigger(\"done\"),\n                              setTimeout(function () {\n                                  return r.finish(), (j.running = !1), j.trigger(\"hide\");\n                              }, Math.max(D.ghostTime, Math.max(D.minTime - (C() - a), 0))))\n                            : c()\n                    );\n                }))\n            );\n        }),\n        (j.start = function (a) {\n            v(D, a), (j.running = !0);\n            try {\n                r.render();\n            } catch (b) {\n                i = b;\n            }\n            return document.querySelector(\".pace\") ? (j.trigger(\"start\"), j.go()) : setTimeout(j.start, 50);\n        }),\n        \"function\" == typeof define && define.amd\n            ? define([\"pace\"], function () {\n                  return j;\n              })\n            : \"object\" == typeof exports\n            ? (module.exports = j)\n            : D.startOnPageLoad && j.start();\n}.call(this));\n\n// Waves\n\n!(function (t, e) {\n    \"use strict\";\n    \"function\" == typeof define && define.amd\n        ? define([], function () {\n              return (t.Waves = e.call(t)), t.Waves;\n          })\n        : \"object\" == typeof exports\n        ? (module.exports = e.call(t))\n        : (t.Waves = e.call(t));\n})(\"object\" == typeof global ? global : this, function () {\n    \"use strict\";\n    function t(t) {\n        return null !== t && t === t.window;\n    }\n    function e(e) {\n        return t(e) ? e : 9 === e.nodeType && e.defaultView;\n    }\n    function n(t) {\n        var e = typeof t;\n        return \"function\" === e || (\"object\" === e && !!t);\n    }\n    function o(t) {\n        return n(t) && t.nodeType > 0;\n    }\n    function a(t) {\n        var e = f.call(t);\n        return \"[object String]\" === e ? d(t) : n(t) && /^\\[object (Array|HTMLCollection|NodeList|Object)\\]$/.test(e) && t.hasOwnProperty(\"length\") ? t : o(t) ? [t] : [];\n    }\n    function i(t) {\n        var n,\n            o,\n            a = { top: 0, left: 0 },\n            i = t && t.ownerDocument;\n        return (n = i.documentElement), void 0 !== t.getBoundingClientRect && (a = t.getBoundingClientRect()), (o = e(i)), { top: a.top + o.pageYOffset - n.clientTop, left: a.left + o.pageXOffset - n.clientLeft };\n    }\n    function r(t) {\n        var e = \"\";\n        for (var n in t) t.hasOwnProperty(n) && (e += n + \":\" + t[n] + \";\");\n        return e;\n    }\n    function s(t, e, n) {\n        if (n) {\n            n.classList.remove(\"waves-rippling\");\n            var o = n.getAttribute(\"data-x\"),\n                a = n.getAttribute(\"data-y\"),\n                i = n.getAttribute(\"data-scale\"),\n                s = n.getAttribute(\"data-translate\"),\n                u = 350 - (Date.now() - Number(n.getAttribute(\"data-hold\")));\n            u < 0 && (u = 0), \"mousemove\" === t.type && (u = 150);\n            var c = \"mousemove\" === t.type ? 2500 : v.duration;\n            setTimeout(function () {\n                var t = {\n                    top: a + \"px\",\n                    left: o + \"px\",\n                    opacity: \"0\",\n                    \"-webkit-transition-duration\": c + \"ms\",\n                    \"-moz-transition-duration\": c + \"ms\",\n                    \"-o-transition-duration\": c + \"ms\",\n                    \"transition-duration\": c + \"ms\",\n                    \"-webkit-transform\": i + \" \" + s,\n                    \"-moz-transform\": i + \" \" + s,\n                    \"-ms-transform\": i + \" \" + s,\n                    \"-o-transform\": i + \" \" + s,\n                    transform: i + \" \" + s,\n                };\n                n.setAttribute(\"style\", r(t)),\n                    setTimeout(function () {\n                        try {\n                            e.removeChild(n);\n                        } catch (t) {\n                            return !1;\n                        }\n                    }, c);\n            }, u);\n        }\n    }\n    function u(t) {\n        if (!1 === h.allowEvent(t)) return null;\n        for (var e = null, n = t.target || t.srcElement; n.parentElement; ) {\n            if (!(n instanceof SVGElement) && n.classList.contains(\"waves-effect\")) {\n                e = n;\n                break;\n            }\n            n = n.parentElement;\n        }\n        return e;\n    }\n    function c(t) {\n        var e = u(t);\n        if (null !== e) {\n            if (e.disabled || e.getAttribute(\"disabled\") || e.classList.contains(\"disabled\")) return;\n            if ((h.registerEvent(t), \"touchstart\" === t.type && v.delay)) {\n                var n = !1,\n                    o = setTimeout(function () {\n                        (o = null), v.show(t, e);\n                    }, v.delay),\n                    a = function (a) {\n                        o && (clearTimeout(o), (o = null), v.show(t, e)), n || ((n = !0), v.hide(a, e)), r();\n                    },\n                    i = function (t) {\n                        o && (clearTimeout(o), (o = null)), a(t), r();\n                    };\n                e.addEventListener(\"touchmove\", i, !1), e.addEventListener(\"touchend\", a, !1), e.addEventListener(\"touchcancel\", a, !1);\n                var r = function () {\n                    e.removeEventListener(\"touchmove\", i), e.removeEventListener(\"touchend\", a), e.removeEventListener(\"touchcancel\", a);\n                };\n            } else v.show(t, e), m && (e.addEventListener(\"touchend\", v.hide, !1), e.addEventListener(\"touchcancel\", v.hide, !1)), e.addEventListener(\"mouseup\", v.hide, !1), e.addEventListener(\"mouseleave\", v.hide, !1);\n        }\n    }\n    var l = l || {},\n        d = document.querySelectorAll.bind(document),\n        f = Object.prototype.toString,\n        m = \"ontouchstart\" in window,\n        v = {\n            duration: 750,\n            delay: 200,\n            show: function (t, e, n) {\n                if (2 === t.button) return !1;\n                e = e || this;\n                var o = document.createElement(\"div\");\n                (o.className = \"waves-ripple waves-rippling\"), e.appendChild(o);\n                var a = i(e),\n                    s = 0,\n                    u = 0;\n                \"touches\" in t && t.touches.length ? ((s = t.touches[0].pageY - a.top), (u = t.touches[0].pageX - a.left)) : ((s = t.pageY - a.top), (u = t.pageX - a.left)), (u = u >= 0 ? u : 0), (s = s >= 0 ? s : 0);\n                var c = \"scale(\" + (e.clientWidth / 100) * 3 + \")\",\n                    l = \"translate(0,0)\";\n                n && (l = \"translate(\" + n.x + \"px, \" + n.y + \"px)\"), o.setAttribute(\"data-hold\", Date.now()), o.setAttribute(\"data-x\", u), o.setAttribute(\"data-y\", s), o.setAttribute(\"data-scale\", c), o.setAttribute(\"data-translate\", l);\n                var d = { top: s + \"px\", left: u + \"px\" };\n                o.classList.add(\"waves-notransition\"),\n                    o.setAttribute(\"style\", r(d)),\n                    o.classList.remove(\"waves-notransition\"),\n                    (d[\"-webkit-transform\"] = c + \" \" + l),\n                    (d[\"-moz-transform\"] = c + \" \" + l),\n                    (d[\"-ms-transform\"] = c + \" \" + l),\n                    (d[\"-o-transform\"] = c + \" \" + l),\n                    (d.transform = c + \" \" + l),\n                    (d.opacity = \"1\");\n                var f = \"mousemove\" === t.type ? 2500 : v.duration;\n                (d[\"-webkit-transition-duration\"] = f + \"ms\"), (d[\"-moz-transition-duration\"] = f + \"ms\"), (d[\"-o-transition-duration\"] = f + \"ms\"), (d[\"transition-duration\"] = f + \"ms\"), o.setAttribute(\"style\", r(d));\n            },\n            hide: function (t, e) {\n                for (var n = (e = e || this).getElementsByClassName(\"waves-rippling\"), o = 0, a = n.length; o < a; o++) s(t, e, n[o]);\n                m && (e.removeEventListener(\"touchend\", v.hide), e.removeEventListener(\"touchcancel\", v.hide)), e.removeEventListener(\"mouseup\", v.hide), e.removeEventListener(\"mouseleave\", v.hide);\n            },\n        },\n        p = {\n            input: function (t) {\n                var e = t.parentNode;\n                if (\"i\" !== e.tagName.toLowerCase() || !e.classList.contains(\"waves-effect\")) {\n                    var n = document.createElement(\"i\");\n                    (n.className = t.className + \" waves-input-wrapper\"), (t.className = \"waves-button-input\"), e.replaceChild(n, t), n.appendChild(t);\n                    var o = window.getComputedStyle(t, null),\n                        a = o.color,\n                        i = o.backgroundColor;\n                    n.setAttribute(\"style\", \"color:\" + a + \";background:\" + i), t.setAttribute(\"style\", \"background-color:rgba(0,0,0,0);\");\n                }\n            },\n            img: function (t) {\n                var e = t.parentNode;\n                if (\"i\" !== e.tagName.toLowerCase() || !e.classList.contains(\"waves-effect\")) {\n                    var n = document.createElement(\"i\");\n                    e.replaceChild(n, t), n.appendChild(t);\n                }\n            },\n        },\n        h = {\n            touches: 0,\n            allowEvent: function (t) {\n                var e = !0;\n                return /^(mousedown|mousemove)$/.test(t.type) && h.touches && (e = !1), e;\n            },\n            registerEvent: function (t) {\n                var e = t.type;\n                \"touchstart\" === e\n                    ? (h.touches += 1)\n                    : /^(touchend|touchcancel)$/.test(e) &&\n                      setTimeout(function () {\n                          h.touches && (h.touches -= 1);\n                      }, 500);\n            },\n        };\n    return (\n        (l.init = function (t) {\n            var e = document.body;\n            \"duration\" in (t = t || {}) && (v.duration = t.duration),\n                \"delay\" in t && (v.delay = t.delay),\n                m && (e.addEventListener(\"touchstart\", c, !1), e.addEventListener(\"touchcancel\", h.registerEvent, !1), e.addEventListener(\"touchend\", h.registerEvent, !1)),\n                e.addEventListener(\"mousedown\", c, !1);\n        }),\n        (l.attach = function (t, e) {\n            (t = a(t)), \"[object Array]\" === f.call(e) && (e = e.join(\" \")), (e = e ? \" \" + e : \"\");\n            for (var n, o, i = 0, r = t.length; i < r; i++)\n                (o = (n = t[i]).tagName.toLowerCase()), -1 !== [\"input\", \"img\"].indexOf(o) && (p[o](n), (n = n.parentElement)), -1 === n.className.indexOf(\"waves-effect\") && (n.className += \" waves-effect\" + e);\n        }),\n        (l.ripple = function (t, e) {\n            var n = (t = a(t)).length;\n            if (((e = e || {}), (e.wait = e.wait || 0), (e.position = e.position || null), n))\n                for (var o, r, s, u = {}, c = 0, l = { type: \"mousedown\", button: 1 }; c < n; c++)\n                    if (\n                        ((o = t[c]), (r = e.position || { x: o.clientWidth / 2, y: o.clientHeight / 2 }), (s = i(o)), (u.x = s.left + r.x), (u.y = s.top + r.y), (l.pageX = u.x), (l.pageY = u.y), v.show(l, o), e.wait >= 0 && null !== e.wait)\n                    ) {\n                        var d = { type: \"mouseup\", button: 1 };\n                        setTimeout(\n                            (function (t, e) {\n                                return function () {\n                                    v.hide(t, e);\n                                };\n                            })(d, o),\n                            e.wait\n                        );\n                    }\n        }),\n        (l.calm = function (t) {\n            for (var e = { type: \"mouseup\", button: 1 }, n = 0, o = (t = a(t)).length; n < o; n++) v.hide(e, t[n]);\n        }),\n        (l.displayEffect = function (t) {\n            l.init(t);\n        }),\n        l\n    );\n});\n//# sourceMappingURL=waves.min.js.map\n\n// Internationalization\n!(function (e, t) {\n    \"object\" == typeof exports && \"undefined\" != typeof module ? (module.exports = t()) : \"function\" == typeof define && define.amd ? define(t) : ((e = e || self).i18next = t());\n})(this, function () {\n    \"use strict\";\n    function e(t) {\n        return (e =\n            \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n                ? function (e) {\n                      return typeof e;\n                  }\n                : function (e) {\n                      return e && \"function\" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? \"symbol\" : typeof e;\n                  })(t);\n    }\n    function t(n) {\n        return (t =\n            \"function\" == typeof Symbol && \"symbol\" === e(Symbol.iterator)\n                ? function (t) {\n                      return e(t);\n                  }\n                : function (t) {\n                      return t && \"function\" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? \"symbol\" : e(t);\n                  })(n);\n    }\n    function n(e, t, n) {\n        return t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : (e[t] = n), e;\n    }\n    function r(e) {\n        for (var t = 1; t < arguments.length; t++) {\n            var r = null != arguments[t] ? arguments[t] : {},\n                o = Object.keys(r);\n            \"function\" == typeof Object.getOwnPropertySymbols &&\n                (o = o.concat(\n                    Object.getOwnPropertySymbols(r).filter(function (e) {\n                        return Object.getOwnPropertyDescriptor(r, e).enumerable;\n                    })\n                )),\n                o.forEach(function (t) {\n                    n(e, t, r[t]);\n                });\n        }\n        return e;\n    }\n    function o(e, t) {\n        if (!(e instanceof t)) throw new TypeError(\"Cannot call a class as a function\");\n    }\n    function i(e, t) {\n        for (var n = 0; n < t.length; n++) {\n            var r = t[n];\n            (r.enumerable = r.enumerable || !1), (r.configurable = !0), \"value\" in r && (r.writable = !0), Object.defineProperty(e, r.key, r);\n        }\n    }\n    function a(e, t, n) {\n        return t && i(e.prototype, t), n && i(e, n), e;\n    }\n    function s(e) {\n        if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n        return e;\n    }\n    function u(e, n) {\n        return !n || (\"object\" !== t(n) && \"function\" != typeof n) ? s(e) : n;\n    }\n    function l(e) {\n        return (l = Object.setPrototypeOf\n            ? Object.getPrototypeOf\n            : function (e) {\n                  return e.__proto__ || Object.getPrototypeOf(e);\n              })(e);\n    }\n    function c(e, t) {\n        return (c =\n            Object.setPrototypeOf ||\n            function (e, t) {\n                return (e.__proto__ = t), e;\n            })(e, t);\n    }\n    function f(e, t) {\n        if (\"function\" != typeof t && null !== t) throw new TypeError(\"Super expression must either be null or a function\");\n        (e.prototype = Object.create(t && t.prototype, { constructor: { value: e, writable: !0, configurable: !0 } })), t && c(e, t);\n    }\n    function p(e) {\n        return (\n            (function (e) {\n                if (Array.isArray(e)) {\n                    for (var t = 0, n = new Array(e.length); t < e.length; t++) n[t] = e[t];\n                    return n;\n                }\n            })(e) ||\n            (function (e) {\n                if (Symbol.iterator in Object(e) || \"[object Arguments]\" === Object.prototype.toString.call(e)) return Array.from(e);\n            })(e) ||\n            (function () {\n                throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n            })()\n        );\n    }\n    var g = {\n            type: \"logger\",\n            log: function (e) {\n                this.output(\"log\", e);\n            },\n            warn: function (e) {\n                this.output(\"warn\", e);\n            },\n            error: function (e) {\n                this.output(\"error\", e);\n            },\n            output: function (e, t) {\n                var n;\n                console && console[e] && (n = console)[e].apply(n, p(t));\n            },\n        },\n        h = new ((function () {\n            function e(t) {\n                var n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n                o(this, e), this.init(t, n);\n            }\n            return (\n                a(e, [\n                    {\n                        key: \"init\",\n                        value: function (e) {\n                            var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n                            (this.prefix = t.prefix || \"i18next:\"), (this.logger = e || g), (this.options = t), (this.debug = t.debug);\n                        },\n                    },\n                    {\n                        key: \"setDebug\",\n                        value: function (e) {\n                            this.debug = e;\n                        },\n                    },\n                    {\n                        key: \"log\",\n                        value: function () {\n                            for (var e = arguments.length, t = new Array(e), n = 0; n < e; n++) t[n] = arguments[n];\n                            return this.forward(t, \"log\", \"\", !0);\n                        },\n                    },\n                    {\n                        key: \"warn\",\n                        value: function () {\n                            for (var e = arguments.length, t = new Array(e), n = 0; n < e; n++) t[n] = arguments[n];\n                            return this.forward(t, \"warn\", \"\", !0);\n                        },\n                    },\n                    {\n                        key: \"error\",\n                        value: function () {\n                            for (var e = arguments.length, t = new Array(e), n = 0; n < e; n++) t[n] = arguments[n];\n                            return this.forward(t, \"error\", \"\");\n                        },\n                    },\n                    {\n                        key: \"deprecate\",\n                        value: function () {\n                            for (var e = arguments.length, t = new Array(e), n = 0; n < e; n++) t[n] = arguments[n];\n                            return this.forward(t, \"warn\", \"WARNING DEPRECATED: \", !0);\n                        },\n                    },\n                    {\n                        key: \"forward\",\n                        value: function (e, t, n, r) {\n                            return r && !this.debug ? null : (\"string\" == typeof e[0] && (e[0] = \"\".concat(n).concat(this.prefix, \" \").concat(e[0])), this.logger[t](e));\n                        },\n                    },\n                    {\n                        key: \"create\",\n                        value: function (t) {\n                            return new e(this.logger, r({}, { prefix: \"\".concat(this.prefix, \":\").concat(t, \":\") }, this.options));\n                        },\n                    },\n                ]),\n                e\n            );\n        })())(),\n        d = (function () {\n            function e() {\n                o(this, e), (this.observers = {});\n            }\n            return (\n                a(e, [\n                    {\n                        key: \"on\",\n                        value: function (e, t) {\n                            var n = this;\n                            return (\n                                e.split(\" \").forEach(function (e) {\n                                    (n.observers[e] = n.observers[e] || []), n.observers[e].push(t);\n                                }),\n                                this\n                            );\n                        },\n                    },\n                    {\n                        key: \"off\",\n                        value: function (e, t) {\n                            var n = this;\n                            this.observers[e] &&\n                                this.observers[e].forEach(function () {\n                                    if (t) {\n                                        var r = n.observers[e].indexOf(t);\n                                        r > -1 && n.observers[e].splice(r, 1);\n                                    } else delete n.observers[e];\n                                });\n                        },\n                    },\n                    {\n                        key: \"emit\",\n                        value: function (e) {\n                            for (var t = arguments.length, n = new Array(t > 1 ? t - 1 : 0), r = 1; r < t; r++) n[r - 1] = arguments[r];\n                            this.observers[e] &&\n                                [].concat(this.observers[e]).forEach(function (e) {\n                                    e.apply(void 0, n);\n                                });\n                            this.observers[\"*\"] &&\n                                [].concat(this.observers[\"*\"]).forEach(function (t) {\n                                    t.apply(t, [e].concat(n));\n                                });\n                        },\n                    },\n                ]),\n                e\n            );\n        })();\n    function v() {\n        var e,\n            t,\n            n = new Promise(function (n, r) {\n                (e = n), (t = r);\n            });\n        return (n.resolve = e), (n.reject = t), n;\n    }\n    function y(e) {\n        return null == e ? \"\" : \"\" + e;\n    }\n    function m(e, t, n) {\n        function r(e) {\n            return e && e.indexOf(\"###\") > -1 ? e.replace(/###/g, \".\") : e;\n        }\n        function o() {\n            return !e || \"string\" == typeof e;\n        }\n        for (var i = \"string\" != typeof t ? [].concat(t) : t.split(\".\"); i.length > 1; ) {\n            if (o()) return {};\n            var a = r(i.shift());\n            !e[a] && n && (e[a] = new n()), (e = e[a]);\n        }\n        return o() ? {} : { obj: e, k: r(i.shift()) };\n    }\n    function b(e, t, n) {\n        var r = m(e, t, Object);\n        r.obj[r.k] = n;\n    }\n    function k(e, t) {\n        var n = m(e, t),\n            r = n.obj,\n            o = n.k;\n        if (r) return r[o];\n    }\n    function x(e) {\n        return e.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, \"\\\\$&\");\n    }\n    var S = { \"&\": \"&amp;\", \"<\": \"&lt;\", \">\": \"&gt;\", '\"': \"&quot;\", \"'\": \"&#39;\", \"/\": \"&#x2F;\" };\n    function w(e) {\n        return \"string\" == typeof e\n            ? e.replace(/[&<>\"'\\/]/g, function (e) {\n                  return S[e];\n              })\n            : e;\n    }\n    var O = (function (e) {\n            function t(e) {\n                var n,\n                    r = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : { ns: [\"translation\"], defaultNS: \"translation\" };\n                return o(this, t), (n = u(this, l(t).call(this))), d.call(s(n)), (n.data = e || {}), (n.options = r), void 0 === n.options.keySeparator && (n.options.keySeparator = \".\"), n;\n            }\n            return (\n                f(t, d),\n                a(t, [\n                    {\n                        key: \"addNamespaces\",\n                        value: function (e) {\n                            this.options.ns.indexOf(e) < 0 && this.options.ns.push(e);\n                        },\n                    },\n                    {\n                        key: \"removeNamespaces\",\n                        value: function (e) {\n                            var t = this.options.ns.indexOf(e);\n                            t > -1 && this.options.ns.splice(t, 1);\n                        },\n                    },\n                    {\n                        key: \"getResource\",\n                        value: function (e, t, n) {\n                            var r = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : {},\n                                o = void 0 !== r.keySeparator ? r.keySeparator : this.options.keySeparator,\n                                i = [e, t];\n                            return n && \"string\" != typeof n && (i = i.concat(n)), n && \"string\" == typeof n && (i = i.concat(o ? n.split(o) : n)), e.indexOf(\".\") > -1 && (i = e.split(\".\")), k(this.data, i);\n                        },\n                    },\n                    {\n                        key: \"addResource\",\n                        value: function (e, t, n, r) {\n                            var o = arguments.length > 4 && void 0 !== arguments[4] ? arguments[4] : { silent: !1 },\n                                i = this.options.keySeparator;\n                            void 0 === i && (i = \".\");\n                            var a = [e, t];\n                            n && (a = a.concat(i ? n.split(i) : n)), e.indexOf(\".\") > -1 && ((r = t), (t = (a = e.split(\".\"))[1])), this.addNamespaces(t), b(this.data, a, r), o.silent || this.emit(\"added\", e, t, n, r);\n                        },\n                    },\n                    {\n                        key: \"addResources\",\n                        value: function (e, t, n) {\n                            var r = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : { silent: !1 };\n                            for (var o in n) (\"string\" != typeof n[o] && \"[object Array]\" !== Object.prototype.toString.apply(n[o])) || this.addResource(e, t, o, n[o], { silent: !0 });\n                            r.silent || this.emit(\"added\", e, t, n);\n                        },\n                    },\n                    {\n                        key: \"addResourceBundle\",\n                        value: function (e, t, n, o, i) {\n                            var a = arguments.length > 5 && void 0 !== arguments[5] ? arguments[5] : { silent: !1 },\n                                s = [e, t];\n                            e.indexOf(\".\") > -1 && ((o = n), (n = t), (t = (s = e.split(\".\"))[1])), this.addNamespaces(t);\n                            var u = k(this.data, s) || {};\n                            o\n                                ? (function e(t, n, r) {\n                                      for (var o in n) o in t ? (\"string\" == typeof t[o] || t[o] instanceof String || \"string\" == typeof n[o] || n[o] instanceof String ? r && (t[o] = n[o]) : e(t[o], n[o], r)) : (t[o] = n[o]);\n                                      return t;\n                                  })(u, n, i)\n                                : (u = r({}, u, n)),\n                                b(this.data, s, u),\n                                a.silent || this.emit(\"added\", e, t, n);\n                        },\n                    },\n                    {\n                        key: \"removeResourceBundle\",\n                        value: function (e, t) {\n                            this.hasResourceBundle(e, t) && delete this.data[e][t], this.removeNamespaces(t), this.emit(\"removed\", e, t);\n                        },\n                    },\n                    {\n                        key: \"hasResourceBundle\",\n                        value: function (e, t) {\n                            return void 0 !== this.getResource(e, t);\n                        },\n                    },\n                    {\n                        key: \"getResourceBundle\",\n                        value: function (e, t) {\n                            return t || (t = this.options.defaultNS), \"v1\" === this.options.compatibilityAPI ? r({}, {}, this.getResource(e, t)) : this.getResource(e, t);\n                        },\n                    },\n                    {\n                        key: \"getDataByLanguage\",\n                        value: function (e) {\n                            return this.data[e];\n                        },\n                    },\n                    {\n                        key: \"toJSON\",\n                        value: function () {\n                            return this.data;\n                        },\n                    },\n                ]),\n                t\n            );\n        })(),\n        R = {\n            processors: {},\n            addPostProcessor: function (e) {\n                this.processors[e.name] = e;\n            },\n            handle: function (e, t, n, r, o) {\n                var i = this;\n                return (\n                    e.forEach(function (e) {\n                        i.processors[e] && (t = i.processors[e].process(t, n, r, o));\n                    }),\n                    t\n                );\n            },\n        },\n        j = (function (e) {\n            function n(e) {\n                var t,\n                    r,\n                    i,\n                    a,\n                    c = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n                return (\n                    o(this, n),\n                    (t = u(this, l(n).call(this))),\n                    d.call(s(t)),\n                    (r = [\"resourceStore\", \"languageUtils\", \"pluralResolver\", \"interpolator\", \"backendConnector\", \"i18nFormat\"]),\n                    (i = e),\n                    (a = s(t)),\n                    r.forEach(function (e) {\n                        i[e] && (a[e] = i[e]);\n                    }),\n                    (t.options = c),\n                    void 0 === t.options.keySeparator && (t.options.keySeparator = \".\"),\n                    (t.logger = h.create(\"translator\")),\n                    t\n                );\n            }\n            return (\n                f(n, d),\n                a(n, [\n                    {\n                        key: \"changeLanguage\",\n                        value: function (e) {\n                            e && (this.language = e);\n                        },\n                    },\n                    {\n                        key: \"exists\",\n                        value: function (e) {\n                            var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : { interpolation: {} },\n                                n = this.resolve(e, t);\n                            return n && void 0 !== n.res;\n                        },\n                    },\n                    {\n                        key: \"extractFromKey\",\n                        value: function (e, t) {\n                            var n = t.nsSeparator || this.options.nsSeparator;\n                            void 0 === n && (n = \":\");\n                            var r = void 0 !== t.keySeparator ? t.keySeparator : this.options.keySeparator,\n                                o = t.ns || this.options.defaultNS;\n                            if (n && e.indexOf(n) > -1) {\n                                var i = e.split(n);\n                                (n !== r || (n === r && this.options.ns.indexOf(i[0]) > -1)) && (o = i.shift()), (e = i.join(r));\n                            }\n                            return \"string\" == typeof o && (o = [o]), { key: e, namespaces: o };\n                        },\n                    },\n                    {\n                        key: \"translate\",\n                        value: function (e, n) {\n                            var o = this;\n                            if ((\"object\" !== t(n) && this.options.overloadTranslationOptionHandler && (n = this.options.overloadTranslationOptionHandler(arguments)), n || (n = {}), null == e)) return \"\";\n                            Array.isArray(e) || (e = [String(e)]);\n                            var i = void 0 !== n.keySeparator ? n.keySeparator : this.options.keySeparator,\n                                a = this.extractFromKey(e[e.length - 1], n),\n                                s = a.key,\n                                u = a.namespaces,\n                                l = u[u.length - 1],\n                                c = n.lng || this.language,\n                                f = n.appendNamespaceToCIMode || this.options.appendNamespaceToCIMode;\n                            if (c && \"cimode\" === c.toLowerCase()) {\n                                if (f) {\n                                    var p = n.nsSeparator || this.options.nsSeparator;\n                                    return l + p + s;\n                                }\n                                return s;\n                            }\n                            var g = this.resolve(e, n),\n                                h = g && g.res,\n                                d = (g && g.usedKey) || s,\n                                v = (g && g.exactUsedKey) || s,\n                                y = Object.prototype.toString.apply(h),\n                                m = void 0 !== n.joinArrays ? n.joinArrays : this.options.joinArrays,\n                                b = !this.i18nFormat || this.i18nFormat.handleAsObject;\n                            if (\n                                b &&\n                                h &&\n                                \"string\" != typeof h &&\n                                \"boolean\" != typeof h &&\n                                \"number\" != typeof h &&\n                                [\"[object Number]\", \"[object Function]\", \"[object RegExp]\"].indexOf(y) < 0 &&\n                                (\"string\" != typeof m || \"[object Array]\" !== y)\n                            ) {\n                                if (!n.returnObjects && !this.options.returnObjects)\n                                    return (\n                                        this.logger.warn(\"accessing an object - but returnObjects options is not enabled!\"),\n                                        this.options.returnedObjectHandler ? this.options.returnedObjectHandler(d, h, n) : \"key '\".concat(s, \" (\").concat(this.language, \")' returned an object instead of string.\")\n                                    );\n                                if (i) {\n                                    var k = \"[object Array]\" === y,\n                                        x = k ? [] : {},\n                                        S = k ? v : d;\n                                    for (var w in h)\n                                        if (Object.prototype.hasOwnProperty.call(h, w)) {\n                                            var O = \"\".concat(S).concat(i).concat(w);\n                                            (x[w] = this.translate(O, r({}, n, { joinArrays: !1, ns: u }))), x[w] === O && (x[w] = h[w]);\n                                        }\n                                    h = x;\n                                }\n                            } else if (b && \"string\" == typeof m && \"[object Array]\" === y) (h = h.join(m)) && (h = this.extendTranslation(h, e, n));\n                            else {\n                                var R = !1,\n                                    j = !1;\n                                if (!this.isValidLookup(h) && void 0 !== n.defaultValue) {\n                                    if (((R = !0), void 0 !== n.count)) {\n                                        var L = this.pluralResolver.getSuffix(c, n.count);\n                                        h = n[\"defaultValue\".concat(L)];\n                                    }\n                                    h || (h = n.defaultValue);\n                                }\n                                this.isValidLookup(h) || ((j = !0), (h = s));\n                                var N = n.defaultValue && n.defaultValue !== h && this.options.updateMissing;\n                                if (j || R || N) {\n                                    this.logger.log(N ? \"updateKey\" : \"missingKey\", c, l, s, N ? n.defaultValue : h);\n                                    var C = [],\n                                        E = this.languageUtils.getFallbackCodes(this.options.fallbackLng, n.lng || this.language);\n                                    if (\"fallback\" === this.options.saveMissingTo && E && E[0]) for (var P = 0; P < E.length; P++) C.push(E[P]);\n                                    else \"all\" === this.options.saveMissingTo ? (C = this.languageUtils.toResolveHierarchy(n.lng || this.language)) : C.push(n.lng || this.language);\n                                    var F = function (e, t) {\n                                        o.options.missingKeyHandler\n                                            ? o.options.missingKeyHandler(e, l, t, N ? n.defaultValue : h, N, n)\n                                            : o.backendConnector && o.backendConnector.saveMissing && o.backendConnector.saveMissing(e, l, t, N ? n.defaultValue : h, N, n),\n                                            o.emit(\"missingKey\", e, l, t, h);\n                                    };\n                                    if (this.options.saveMissing) {\n                                        var A = void 0 !== n.count && \"string\" != typeof n.count;\n                                        this.options.saveMissingPlurals && A\n                                            ? C.forEach(function (e) {\n                                                  o.pluralResolver.getPluralFormsOfKey(e, s).forEach(function (t) {\n                                                      return F([e], t);\n                                                  });\n                                              })\n                                            : F(C, s);\n                                    }\n                                }\n                                (h = this.extendTranslation(h, e, n, g)),\n                                    j && h === s && this.options.appendNamespaceToMissingKey && (h = \"\".concat(l, \":\").concat(s)),\n                                    j && this.options.parseMissingKeyHandler && (h = this.options.parseMissingKeyHandler(h));\n                            }\n                            return h;\n                        },\n                    },\n                    {\n                        key: \"extendTranslation\",\n                        value: function (e, t, n, o) {\n                            var i = this;\n                            if (this.i18nFormat && this.i18nFormat.parse) e = this.i18nFormat.parse(e, n, o.usedLng, o.usedNS, o.usedKey, { resolved: o });\n                            else if (!n.skipInterpolation) {\n                                n.interpolation && this.interpolator.init(r({}, n, { interpolation: r({}, this.options.interpolation, n.interpolation) }));\n                                var a = n.replace && \"string\" != typeof n.replace ? n.replace : n;\n                                this.options.interpolation.defaultVariables && (a = r({}, this.options.interpolation.defaultVariables, a)),\n                                    (e = this.interpolator.interpolate(e, a, n.lng || this.language, n)),\n                                    !1 !== n.nest &&\n                                        (e = this.interpolator.nest(\n                                            e,\n                                            function () {\n                                                return i.translate.apply(i, arguments);\n                                            },\n                                            n\n                                        )),\n                                    n.interpolation && this.interpolator.reset();\n                            }\n                            var s = n.postProcess || this.options.postProcess,\n                                u = \"string\" == typeof s ? [s] : s;\n                            return null != e && u && u.length && !1 !== n.applyPostProcessor && (e = R.handle(u, e, t, n, this)), e;\n                        },\n                    },\n                    {\n                        key: \"resolve\",\n                        value: function (e) {\n                            var t,\n                                n,\n                                r,\n                                o,\n                                i,\n                                a = this,\n                                s = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n                            return (\n                                \"string\" == typeof e && (e = [e]),\n                                e.forEach(function (e) {\n                                    if (!a.isValidLookup(t)) {\n                                        var u = a.extractFromKey(e, s),\n                                            l = u.key;\n                                        n = l;\n                                        var c = u.namespaces;\n                                        a.options.fallbackNS && (c = c.concat(a.options.fallbackNS));\n                                        var f = void 0 !== s.count && \"string\" != typeof s.count,\n                                            p = void 0 !== s.context && \"string\" == typeof s.context && \"\" !== s.context,\n                                            g = s.lngs ? s.lngs : a.languageUtils.toResolveHierarchy(s.lng || a.language, s.fallbackLng);\n                                        c.forEach(function (e) {\n                                            a.isValidLookup(t) ||\n                                                ((i = e),\n                                                g.forEach(function (n) {\n                                                    if (!a.isValidLookup(t)) {\n                                                        o = n;\n                                                        var i,\n                                                            u,\n                                                            c = l,\n                                                            g = [c];\n                                                        if (a.i18nFormat && a.i18nFormat.addLookupKeys) a.i18nFormat.addLookupKeys(g, l, n, e, s);\n                                                        else f && (i = a.pluralResolver.getSuffix(n, s.count)), f && p && g.push(c + i), p && g.push((c += \"\".concat(a.options.contextSeparator).concat(s.context))), f && g.push((c += i));\n                                                        for (; (u = g.pop()); ) a.isValidLookup(t) || ((r = u), (t = a.getResource(n, e, u, s)));\n                                                    }\n                                                }));\n                                        });\n                                    }\n                                }),\n                                { res: t, usedKey: n, exactUsedKey: r, usedLng: o, usedNS: i }\n                            );\n                        },\n                    },\n                    {\n                        key: \"isValidLookup\",\n                        value: function (e) {\n                            return !(void 0 === e || (!this.options.returnNull && null === e) || (!this.options.returnEmptyString && \"\" === e));\n                        },\n                    },\n                    {\n                        key: \"getResource\",\n                        value: function (e, t, n) {\n                            var r = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : {};\n                            return this.i18nFormat && this.i18nFormat.getResource ? this.i18nFormat.getResource(e, t, n, r) : this.resourceStore.getResource(e, t, n, r);\n                        },\n                    },\n                ]),\n                n\n            );\n        })();\n    function L(e) {\n        return e.charAt(0).toUpperCase() + e.slice(1);\n    }\n    var N = (function () {\n            function e(t) {\n                o(this, e), (this.options = t), (this.whitelist = this.options.whitelist || !1), (this.logger = h.create(\"languageUtils\"));\n            }\n            return (\n                a(e, [\n                    {\n                        key: \"getScriptPartFromCode\",\n                        value: function (e) {\n                            if (!e || e.indexOf(\"-\") < 0) return null;\n                            var t = e.split(\"-\");\n                            return 2 === t.length ? null : (t.pop(), this.formatLanguageCode(t.join(\"-\")));\n                        },\n                    },\n                    {\n                        key: \"getLanguagePartFromCode\",\n                        value: function (e) {\n                            if (!e || e.indexOf(\"-\") < 0) return e;\n                            var t = e.split(\"-\");\n                            return this.formatLanguageCode(t[0]);\n                        },\n                    },\n                    {\n                        key: \"formatLanguageCode\",\n                        value: function (e) {\n                            if (\"string\" == typeof e && e.indexOf(\"-\") > -1) {\n                                var t = [\"hans\", \"hant\", \"latn\", \"cyrl\", \"cans\", \"mong\", \"arab\"],\n                                    n = e.split(\"-\");\n                                return (\n                                    this.options.lowerCaseLng\n                                        ? (n = n.map(function (e) {\n                                              return e.toLowerCase();\n                                          }))\n                                        : 2 === n.length\n                                        ? ((n[0] = n[0].toLowerCase()), (n[1] = n[1].toUpperCase()), t.indexOf(n[1].toLowerCase()) > -1 && (n[1] = L(n[1].toLowerCase())))\n                                        : 3 === n.length &&\n                                          ((n[0] = n[0].toLowerCase()),\n                                          2 === n[1].length && (n[1] = n[1].toUpperCase()),\n                                          \"sgn\" !== n[0] && 2 === n[2].length && (n[2] = n[2].toUpperCase()),\n                                          t.indexOf(n[1].toLowerCase()) > -1 && (n[1] = L(n[1].toLowerCase())),\n                                          t.indexOf(n[2].toLowerCase()) > -1 && (n[2] = L(n[2].toLowerCase()))),\n                                    n.join(\"-\")\n                                );\n                            }\n                            return this.options.cleanCode || this.options.lowerCaseLng ? e.toLowerCase() : e;\n                        },\n                    },\n                    {\n                        key: \"isWhitelisted\",\n                        value: function (e) {\n                            return (\"languageOnly\" === this.options.load || this.options.nonExplicitWhitelist) && (e = this.getLanguagePartFromCode(e)), !this.whitelist || !this.whitelist.length || this.whitelist.indexOf(e) > -1;\n                        },\n                    },\n                    {\n                        key: \"getFallbackCodes\",\n                        value: function (e, t) {\n                            if (!e) return [];\n                            if ((\"string\" == typeof e && (e = [e]), \"[object Array]\" === Object.prototype.toString.apply(e))) return e;\n                            if (!t) return e.default || [];\n                            var n = e[t];\n                            return n || (n = e[this.getScriptPartFromCode(t)]), n || (n = e[this.formatLanguageCode(t)]), n || (n = e.default), n || [];\n                        },\n                    },\n                    {\n                        key: \"toResolveHierarchy\",\n                        value: function (e, t) {\n                            var n = this,\n                                r = this.getFallbackCodes(t || this.options.fallbackLng || [], e),\n                                o = [],\n                                i = function (e) {\n                                    e && (n.isWhitelisted(e) ? o.push(e) : n.logger.warn(\"rejecting non-whitelisted language code: \".concat(e)));\n                                };\n                            return (\n                                \"string\" == typeof e && e.indexOf(\"-\") > -1\n                                    ? (\"languageOnly\" !== this.options.load && i(this.formatLanguageCode(e)),\n                                      \"languageOnly\" !== this.options.load && \"currentOnly\" !== this.options.load && i(this.getScriptPartFromCode(e)),\n                                      \"currentOnly\" !== this.options.load && i(this.getLanguagePartFromCode(e)))\n                                    : \"string\" == typeof e && i(this.formatLanguageCode(e)),\n                                r.forEach(function (e) {\n                                    o.indexOf(e) < 0 && i(n.formatLanguageCode(e));\n                                }),\n                                o\n                            );\n                        },\n                    },\n                ]),\n                e\n            );\n        })(),\n        C = [\n            { lngs: [\"ach\", \"ak\", \"am\", \"arn\", \"br\", \"fil\", \"gun\", \"ln\", \"mfe\", \"mg\", \"mi\", \"oc\", \"pt\", \"pt-BR\", \"tg\", \"ti\", \"tr\", \"uz\", \"wa\"], nr: [1, 2], fc: 1 },\n            {\n                lngs: [\n                    \"af\",\n                    \"an\",\n                    \"ast\",\n                    \"az\",\n                    \"bg\",\n                    \"bn\",\n                    \"ca\",\n                    \"da\",\n                    \"de\",\n                    \"dev\",\n                    \"el\",\n                    \"en\",\n                    \"eo\",\n                    \"es\",\n                    \"et\",\n                    \"eu\",\n                    \"fi\",\n                    \"fo\",\n                    \"fur\",\n                    \"fy\",\n                    \"gl\",\n                    \"gu\",\n                    \"ha\",\n                    \"hi\",\n                    \"hu\",\n                    \"hy\",\n                    \"ia\",\n                    \"it\",\n                    \"kn\",\n                    \"ku\",\n                    \"lb\",\n                    \"mai\",\n                    \"ml\",\n                    \"mn\",\n                    \"mr\",\n                    \"nah\",\n                    \"nap\",\n                    \"nb\",\n                    \"ne\",\n                    \"nl\",\n                    \"nn\",\n                    \"no\",\n                    \"nso\",\n                    \"pa\",\n                    \"pap\",\n                    \"pms\",\n                    \"ps\",\n                    \"pt-PT\",\n                    \"rm\",\n                    \"sco\",\n                    \"se\",\n                    \"si\",\n                    \"so\",\n                    \"son\",\n                    \"sq\",\n                    \"sv\",\n                    \"sw\",\n                    \"ta\",\n                    \"te\",\n                    \"tk\",\n                    \"ur\",\n                    \"yo\",\n                ],\n                nr: [1, 2],\n                fc: 2,\n            },\n            { lngs: [\"ay\", \"bo\", \"cgg\", \"fa\", \"id\", \"ja\", \"jbo\", \"ka\", \"kk\", \"km\", \"ko\", \"ky\", \"lo\", \"ms\", \"sah\", \"su\", \"th\", \"tt\", \"ug\", \"vi\", \"wo\", \"zh\"], nr: [1], fc: 3 },\n            { lngs: [\"be\", \"bs\", \"cnr\", \"dz\", \"hr\", \"ru\", \"sr\", \"uk\"], nr: [1, 2, 5], fc: 4 },\n            { lngs: [\"ar\"], nr: [0, 1, 2, 3, 11, 100], fc: 5 },\n            { lngs: [\"cs\", \"sk\"], nr: [1, 2, 5], fc: 6 },\n            { lngs: [\"csb\", \"pl\"], nr: [1, 2, 5], fc: 7 },\n            { lngs: [\"cy\"], nr: [1, 2, 3, 8], fc: 8 },\n            { lngs: [\"fr\"], nr: [1, 2], fc: 9 },\n            { lngs: [\"ga\"], nr: [1, 2, 3, 7, 11], fc: 10 },\n            { lngs: [\"gd\"], nr: [1, 2, 3, 20], fc: 11 },\n            { lngs: [\"is\"], nr: [1, 2], fc: 12 },\n            { lngs: [\"jv\"], nr: [0, 1], fc: 13 },\n            { lngs: [\"kw\"], nr: [1, 2, 3, 4], fc: 14 },\n            { lngs: [\"lt\"], nr: [1, 2, 10], fc: 15 },\n            { lngs: [\"lv\"], nr: [1, 2, 0], fc: 16 },\n            { lngs: [\"mk\"], nr: [1, 2], fc: 17 },\n            { lngs: [\"mnk\"], nr: [0, 1, 2], fc: 18 },\n            { lngs: [\"mt\"], nr: [1, 2, 11, 20], fc: 19 },\n            { lngs: [\"or\"], nr: [2, 1], fc: 2 },\n            { lngs: [\"ro\"], nr: [1, 2, 20], fc: 20 },\n            { lngs: [\"sl\"], nr: [5, 1, 2, 3], fc: 21 },\n            { lngs: [\"he\"], nr: [1, 2, 20, 21], fc: 22 },\n        ],\n        E = {\n            1: function (e) {\n                return Number(e > 1);\n            },\n            2: function (e) {\n                return Number(1 != e);\n            },\n            3: function (e) {\n                return 0;\n            },\n            4: function (e) {\n                return Number(e % 10 == 1 && e % 100 != 11 ? 0 : e % 10 >= 2 && e % 10 <= 4 && (e % 100 < 10 || e % 100 >= 20) ? 1 : 2);\n            },\n            5: function (e) {\n                return Number(0 === e ? 0 : 1 == e ? 1 : 2 == e ? 2 : e % 100 >= 3 && e % 100 <= 10 ? 3 : e % 100 >= 11 ? 4 : 5);\n            },\n            6: function (e) {\n                return Number(1 == e ? 0 : e >= 2 && e <= 4 ? 1 : 2);\n            },\n            7: function (e) {\n                return Number(1 == e ? 0 : e % 10 >= 2 && e % 10 <= 4 && (e % 100 < 10 || e % 100 >= 20) ? 1 : 2);\n            },\n            8: function (e) {\n                return Number(1 == e ? 0 : 2 == e ? 1 : 8 != e && 11 != e ? 2 : 3);\n            },\n            9: function (e) {\n                return Number(e >= 2);\n            },\n            10: function (e) {\n                return Number(1 == e ? 0 : 2 == e ? 1 : e < 7 ? 2 : e < 11 ? 3 : 4);\n            },\n            11: function (e) {\n                return Number(1 == e || 11 == e ? 0 : 2 == e || 12 == e ? 1 : e > 2 && e < 20 ? 2 : 3);\n            },\n            12: function (e) {\n                return Number(e % 10 != 1 || e % 100 == 11);\n            },\n            13: function (e) {\n                return Number(0 !== e);\n            },\n            14: function (e) {\n                return Number(1 == e ? 0 : 2 == e ? 1 : 3 == e ? 2 : 3);\n            },\n            15: function (e) {\n                return Number(e % 10 == 1 && e % 100 != 11 ? 0 : e % 10 >= 2 && (e % 100 < 10 || e % 100 >= 20) ? 1 : 2);\n            },\n            16: function (e) {\n                return Number(e % 10 == 1 && e % 100 != 11 ? 0 : 0 !== e ? 1 : 2);\n            },\n            17: function (e) {\n                return Number(1 == e || e % 10 == 1 ? 0 : 1);\n            },\n            18: function (e) {\n                return Number(0 == e ? 0 : 1 == e ? 1 : 2);\n            },\n            19: function (e) {\n                return Number(1 == e ? 0 : 0 === e || (e % 100 > 1 && e % 100 < 11) ? 1 : e % 100 > 10 && e % 100 < 20 ? 2 : 3);\n            },\n            20: function (e) {\n                return Number(1 == e ? 0 : 0 === e || (e % 100 > 0 && e % 100 < 20) ? 1 : 2);\n            },\n            21: function (e) {\n                return Number(e % 100 == 1 ? 1 : e % 100 == 2 ? 2 : e % 100 == 3 || e % 100 == 4 ? 3 : 0);\n            },\n            22: function (e) {\n                return Number(1 === e ? 0 : 2 === e ? 1 : (e < 0 || e > 10) && e % 10 == 0 ? 2 : 3);\n            },\n        };\n    var P = (function () {\n            function e(t) {\n                var n,\n                    r = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n                o(this, e),\n                    (this.languageUtils = t),\n                    (this.options = r),\n                    (this.logger = h.create(\"pluralResolver\")),\n                    (this.rules =\n                        ((n = {}),\n                        C.forEach(function (e) {\n                            e.lngs.forEach(function (t) {\n                                n[t] = { numbers: e.nr, plurals: E[e.fc] };\n                            });\n                        }),\n                        n));\n            }\n            return (\n                a(e, [\n                    {\n                        key: \"addRule\",\n                        value: function (e, t) {\n                            this.rules[e] = t;\n                        },\n                    },\n                    {\n                        key: \"getRule\",\n                        value: function (e) {\n                            return this.rules[e] || this.rules[this.languageUtils.getLanguagePartFromCode(e)];\n                        },\n                    },\n                    {\n                        key: \"needsPlural\",\n                        value: function (e) {\n                            var t = this.getRule(e);\n                            return t && t.numbers.length > 1;\n                        },\n                    },\n                    {\n                        key: \"getPluralFormsOfKey\",\n                        value: function (e, t) {\n                            var n = this,\n                                r = [],\n                                o = this.getRule(e);\n                            return o\n                                ? (o.numbers.forEach(function (o) {\n                                      var i = n.getSuffix(e, o);\n                                      r.push(\"\".concat(t).concat(i));\n                                  }),\n                                  r)\n                                : r;\n                        },\n                    },\n                    {\n                        key: \"getSuffix\",\n                        value: function (e, t) {\n                            var n = this,\n                                r = this.getRule(e);\n                            if (r) {\n                                var o = r.noAbs ? r.plurals(t) : r.plurals(Math.abs(t)),\n                                    i = r.numbers[o];\n                                this.options.simplifyPluralSuffix && 2 === r.numbers.length && 1 === r.numbers[0] && (2 === i ? (i = \"plural\") : 1 === i && (i = \"\"));\n                                var a = function () {\n                                    return n.options.prepend && i.toString() ? n.options.prepend + i.toString() : i.toString();\n                                };\n                                return \"v1\" === this.options.compatibilityJSON\n                                    ? 1 === i\n                                        ? \"\"\n                                        : \"number\" == typeof i\n                                        ? \"_plural_\".concat(i.toString())\n                                        : a()\n                                    : \"v2\" === this.options.compatibilityJSON\n                                    ? a()\n                                    : this.options.simplifyPluralSuffix && 2 === r.numbers.length && 1 === r.numbers[0]\n                                    ? a()\n                                    : this.options.prepend && o.toString()\n                                    ? this.options.prepend + o.toString()\n                                    : o.toString();\n                            }\n                            return this.logger.warn(\"no plural rule found for: \".concat(e)), \"\";\n                        },\n                    },\n                ]),\n                e\n            );\n        })(),\n        F = (function () {\n            function e() {\n                var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};\n                o(this, e),\n                    (this.logger = h.create(\"interpolator\")),\n                    (this.options = t),\n                    (this.format =\n                        (t.interpolation && t.interpolation.format) ||\n                        function (e) {\n                            return e;\n                        }),\n                    this.init(t);\n            }\n            return (\n                a(e, [\n                    {\n                        key: \"init\",\n                        value: function () {\n                            var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};\n                            e.interpolation || (e.interpolation = { escapeValue: !0 });\n                            var t = e.interpolation;\n                            (this.escape = void 0 !== t.escape ? t.escape : w),\n                                (this.escapeValue = void 0 === t.escapeValue || t.escapeValue),\n                                (this.useRawValueToEscape = void 0 !== t.useRawValueToEscape && t.useRawValueToEscape),\n                                (this.prefix = t.prefix ? x(t.prefix) : t.prefixEscaped || \"{{\"),\n                                (this.suffix = t.suffix ? x(t.suffix) : t.suffixEscaped || \"}}\"),\n                                (this.formatSeparator = t.formatSeparator ? t.formatSeparator : t.formatSeparator || \",\"),\n                                (this.unescapePrefix = t.unescapeSuffix ? \"\" : t.unescapePrefix || \"-\"),\n                                (this.unescapeSuffix = this.unescapePrefix ? \"\" : t.unescapeSuffix || \"\"),\n                                (this.nestingPrefix = t.nestingPrefix ? x(t.nestingPrefix) : t.nestingPrefixEscaped || x(\"$t(\")),\n                                (this.nestingSuffix = t.nestingSuffix ? x(t.nestingSuffix) : t.nestingSuffixEscaped || x(\")\")),\n                                (this.maxReplaces = t.maxReplaces ? t.maxReplaces : 1e3),\n                                this.resetRegExp();\n                        },\n                    },\n                    {\n                        key: \"reset\",\n                        value: function () {\n                            this.options && this.init(this.options);\n                        },\n                    },\n                    {\n                        key: \"resetRegExp\",\n                        value: function () {\n                            var e = \"\".concat(this.prefix, \"(.+?)\").concat(this.suffix);\n                            this.regexp = new RegExp(e, \"g\");\n                            var t = \"\".concat(this.prefix).concat(this.unescapePrefix, \"(.+?)\").concat(this.unescapeSuffix).concat(this.suffix);\n                            this.regexpUnescape = new RegExp(t, \"g\");\n                            var n = \"\".concat(this.nestingPrefix, \"(.+?)\").concat(this.nestingSuffix);\n                            this.nestingRegexp = new RegExp(n, \"g\");\n                        },\n                    },\n                    {\n                        key: \"interpolate\",\n                        value: function (e, t, n, o) {\n                            var i,\n                                a,\n                                s,\n                                u = this,\n                                l = r({}, (this.options && this.options.interpolation && this.options.interpolation.defaultVariables) || {}, t);\n                            function c(e) {\n                                return e.replace(/\\$/g, \"$$$$\");\n                            }\n                            var f = function (e) {\n                                if (e.indexOf(u.formatSeparator) < 0) return k(l, e);\n                                var t = e.split(u.formatSeparator),\n                                    r = t.shift().trim(),\n                                    o = t.join(u.formatSeparator).trim();\n                                return u.format(k(l, r), o, n);\n                            };\n                            this.resetRegExp();\n                            var p = (o && o.missingInterpolationHandler) || this.options.missingInterpolationHandler;\n                            for (s = 0; (i = this.regexpUnescape.exec(e)); ) {\n                                if (void 0 === (a = f(i[1].trim())))\n                                    if (\"function\" == typeof p) {\n                                        var g = p(e, i, o);\n                                        a = \"string\" == typeof g ? g : \"\";\n                                    } else this.logger.warn(\"missed to pass in variable \".concat(i[1], \" for interpolating \").concat(e)), (a = \"\");\n                                else \"string\" == typeof a || this.useRawValueToEscape || (a = y(a));\n                                if (((e = e.replace(i[0], c(a))), (this.regexpUnescape.lastIndex = 0), ++s >= this.maxReplaces)) break;\n                            }\n                            for (s = 0; (i = this.regexp.exec(e)); ) {\n                                if (void 0 === (a = f(i[1].trim())))\n                                    if (\"function\" == typeof p) {\n                                        var h = p(e, i, o);\n                                        a = \"string\" == typeof h ? h : \"\";\n                                    } else this.logger.warn(\"missed to pass in variable \".concat(i[1], \" for interpolating \").concat(e)), (a = \"\");\n                                else \"string\" == typeof a || this.useRawValueToEscape || (a = y(a));\n                                if (((a = this.escapeValue ? c(this.escape(a)) : c(a)), (e = e.replace(i[0], a)), (this.regexp.lastIndex = 0), ++s >= this.maxReplaces)) break;\n                            }\n                            return e;\n                        },\n                    },\n                    {\n                        key: \"nest\",\n                        value: function (e, t) {\n                            var n,\n                                o,\n                                i = r({}, arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {});\n                            function a(e, t) {\n                                if (e.indexOf(\",\") < 0) return e;\n                                var n = e.split(\",\");\n                                e = n.shift();\n                                var o = n.join(\",\");\n                                o = (o = this.interpolate(o, i)).replace(/'/g, '\"');\n                                try {\n                                    (i = JSON.parse(o)), t && (i = r({}, t, i));\n                                } catch (t) {\n                                    this.logger.error(\"failed parsing options string in nesting for key \".concat(e), t);\n                                }\n                                return e;\n                            }\n                            for (i.applyPostProcessor = !1; (n = this.nestingRegexp.exec(e)); ) {\n                                if ((o = t(a.call(this, n[1].trim(), i), i)) && n[0] === e && \"string\" != typeof o) return o;\n                                \"string\" != typeof o && (o = y(o)), o || (this.logger.warn(\"missed to resolve \".concat(n[1], \" for nesting \").concat(e)), (o = \"\")), (e = e.replace(n[0], o)), (this.regexp.lastIndex = 0);\n                            }\n                            return e;\n                        },\n                    },\n                ]),\n                e\n            );\n        })();\n    function A(e, t) {\n        return (\n            (function (e) {\n                if (Array.isArray(e)) return e;\n            })(e) ||\n            (function (e, t) {\n                var n = [],\n                    r = !0,\n                    o = !1,\n                    i = void 0;\n                try {\n                    for (var a, s = e[Symbol.iterator](); !(r = (a = s.next()).done) && (n.push(a.value), !t || n.length !== t); r = !0);\n                } catch (e) {\n                    (o = !0), (i = e);\n                } finally {\n                    try {\n                        r || null == s.return || s.return();\n                    } finally {\n                        if (o) throw i;\n                    }\n                }\n                return n;\n            })(e, t) ||\n            (function () {\n                throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n            })()\n        );\n    }\n    var T = (function (e) {\n        function t(e, n, r) {\n            var i,\n                a = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : {};\n            return (\n                o(this, t),\n                (i = u(this, l(t).call(this))),\n                d.call(s(i)),\n                (i.backend = e),\n                (i.store = n),\n                (i.languageUtils = r.languageUtils),\n                (i.options = a),\n                (i.logger = h.create(\"backendConnector\")),\n                (i.state = {}),\n                (i.queue = []),\n                i.backend && i.backend.init && i.backend.init(r, a.backend, a),\n                i\n            );\n        }\n        return (\n            f(t, d),\n            a(t, [\n                {\n                    key: \"queueLoad\",\n                    value: function (e, t, n, r) {\n                        var o = this,\n                            i = [],\n                            a = [],\n                            s = [],\n                            u = [];\n                        return (\n                            e.forEach(function (e) {\n                                var r = !0;\n                                t.forEach(function (t) {\n                                    var s = \"\".concat(e, \"|\").concat(t);\n                                    !n.reload && o.store.hasResourceBundle(e, t)\n                                        ? (o.state[s] = 2)\n                                        : o.state[s] < 0 || (1 === o.state[s] ? a.indexOf(s) < 0 && a.push(s) : ((o.state[s] = 1), (r = !1), a.indexOf(s) < 0 && a.push(s), i.indexOf(s) < 0 && i.push(s), u.indexOf(t) < 0 && u.push(t)));\n                                }),\n                                    r || s.push(e);\n                            }),\n                            (i.length || a.length) && this.queue.push({ pending: a, loaded: {}, errors: [], callback: r }),\n                            { toLoad: i, pending: a, toLoadLanguages: s, toLoadNamespaces: u }\n                        );\n                    },\n                },\n                {\n                    key: \"loaded\",\n                    value: function (e, t, n) {\n                        var r = A(e.split(\"|\"), 2),\n                            o = r[0],\n                            i = r[1];\n                        t && this.emit(\"failedLoading\", o, i, t), n && this.store.addResourceBundle(o, i, n), (this.state[e] = t ? -1 : 2);\n                        var a = {};\n                        this.queue.forEach(function (n) {\n                            var r, s, u, l, c, f;\n                            (r = n.loaded),\n                                (s = i),\n                                (l = m(r, [o], Object)),\n                                (c = l.obj),\n                                (f = l.k),\n                                (c[f] = c[f] || []),\n                                u && (c[f] = c[f].concat(s)),\n                                u || c[f].push(s),\n                                (function (e, t) {\n                                    for (var n = e.indexOf(t); -1 !== n; ) e.splice(n, 1), (n = e.indexOf(t));\n                                })(n.pending, e),\n                                t && n.errors.push(t),\n                                0 !== n.pending.length ||\n                                    n.done ||\n                                    (Object.keys(n.loaded).forEach(function (e) {\n                                        a[e] || (a[e] = []),\n                                            n.loaded[e].length &&\n                                                n.loaded[e].forEach(function (t) {\n                                                    a[e].indexOf(t) < 0 && a[e].push(t);\n                                                });\n                                    }),\n                                    (n.done = !0),\n                                    n.errors.length ? n.callback(n.errors) : n.callback());\n                        }),\n                            this.emit(\"loaded\", a),\n                            (this.queue = this.queue.filter(function (e) {\n                                return !e.done;\n                            }));\n                    },\n                },\n                {\n                    key: \"read\",\n                    value: function (e, t, n) {\n                        var r = this,\n                            o = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : 0,\n                            i = arguments.length > 4 && void 0 !== arguments[4] ? arguments[4] : 250,\n                            a = arguments.length > 5 ? arguments[5] : void 0;\n                        return e.length\n                            ? this.backend[n](e, t, function (s, u) {\n                                  s && u && o < 5\n                                      ? setTimeout(function () {\n                                            r.read.call(r, e, t, n, o + 1, 2 * i, a);\n                                        }, i)\n                                      : a(s, u);\n                              })\n                            : a(null, {});\n                    },\n                },\n                {\n                    key: \"prepareLoading\",\n                    value: function (e, t) {\n                        var n = this,\n                            r = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {},\n                            o = arguments.length > 3 ? arguments[3] : void 0;\n                        if (!this.backend) return this.logger.warn(\"No backend was added via i18next.use. Will not load resources.\"), o && o();\n                        \"string\" == typeof e && (e = this.languageUtils.toResolveHierarchy(e)), \"string\" == typeof t && (t = [t]);\n                        var i = this.queueLoad(e, t, r, o);\n                        if (!i.toLoad.length) return i.pending.length || o(), null;\n                        i.toLoad.forEach(function (e) {\n                            n.loadOne(e);\n                        });\n                    },\n                },\n                {\n                    key: \"load\",\n                    value: function (e, t, n) {\n                        this.prepareLoading(e, t, {}, n);\n                    },\n                },\n                {\n                    key: \"reload\",\n                    value: function (e, t, n) {\n                        this.prepareLoading(e, t, { reload: !0 }, n);\n                    },\n                },\n                {\n                    key: \"loadOne\",\n                    value: function (e) {\n                        var t = this,\n                            n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : \"\",\n                            r = A(e.split(\"|\"), 2),\n                            o = r[0],\n                            i = r[1];\n                        this.read(o, i, \"read\", null, null, function (r, a) {\n                            r && t.logger.warn(\"\".concat(n, \"loading namespace \").concat(i, \" for language \").concat(o, \" failed\"), r),\n                                !r && a && t.logger.log(\"\".concat(n, \"loaded namespace \").concat(i, \" for language \").concat(o), a),\n                                t.loaded(e, r, a);\n                        });\n                    },\n                },\n                {\n                    key: \"saveMissing\",\n                    value: function (e, t, n, o, i) {\n                        var a = arguments.length > 5 && void 0 !== arguments[5] ? arguments[5] : {};\n                        this.backend && this.backend.create && this.backend.create(e, t, n, o, null, r({}, a, { isUpdate: i })), e && e[0] && this.store.addResource(e[0], t, n, o);\n                    },\n                },\n            ]),\n            t\n        );\n    })();\n    function V(e) {\n        return (\n            \"string\" == typeof e.ns && (e.ns = [e.ns]),\n            \"string\" == typeof e.fallbackLng && (e.fallbackLng = [e.fallbackLng]),\n            \"string\" == typeof e.fallbackNS && (e.fallbackNS = [e.fallbackNS]),\n            e.whitelist && e.whitelist.indexOf(\"cimode\") < 0 && (e.whitelist = e.whitelist.concat([\"cimode\"])),\n            e\n        );\n    }\n    function U() {}\n    return new ((function (e) {\n        function n() {\n            var e,\n                t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},\n                r = arguments.length > 1 ? arguments[1] : void 0;\n            if ((o(this, n), (e = u(this, l(n).call(this))), d.call(s(e)), (e.options = V(t)), (e.services = {}), (e.logger = h), (e.modules = { external: [] }), r && !e.isInitialized && !t.isClone)) {\n                if (!e.options.initImmediate) return e.init(t, r), u(e, s(e));\n                setTimeout(function () {\n                    e.init(t, r);\n                }, 0);\n            }\n            return e;\n        }\n        return (\n            f(n, d),\n            a(n, [\n                {\n                    key: \"init\",\n                    value: function () {\n                        var e = this,\n                            n = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},\n                            o = arguments.length > 1 ? arguments[1] : void 0;\n                        function i(e) {\n                            return e ? (\"function\" == typeof e ? new e() : e) : null;\n                        }\n                        if (\n                            (\"function\" == typeof n && ((o = n), (n = {})),\n                            (this.options = r(\n                                {},\n                                {\n                                    debug: !1,\n                                    initImmediate: !0,\n                                    ns: [\"translation\"],\n                                    defaultNS: [\"translation\"],\n                                    fallbackLng: [\"dev\"],\n                                    fallbackNS: !1,\n                                    whitelist: !1,\n                                    nonExplicitWhitelist: !1,\n                                    load: \"all\",\n                                    preload: !1,\n                                    simplifyPluralSuffix: !0,\n                                    keySeparator: \".\",\n                                    nsSeparator: \":\",\n                                    pluralSeparator: \"_\",\n                                    contextSeparator: \"_\",\n                                    partialBundledLanguages: !1,\n                                    saveMissing: !1,\n                                    updateMissing: !1,\n                                    saveMissingTo: \"fallback\",\n                                    saveMissingPlurals: !0,\n                                    missingKeyHandler: !1,\n                                    missingInterpolationHandler: !1,\n                                    postProcess: !1,\n                                    returnNull: !0,\n                                    returnEmptyString: !0,\n                                    returnObjects: !1,\n                                    joinArrays: !1,\n                                    returnedObjectHandler: !1,\n                                    parseMissingKeyHandler: !1,\n                                    appendNamespaceToMissingKey: !1,\n                                    appendNamespaceToCIMode: !1,\n                                    overloadTranslationOptionHandler: function (e) {\n                                        var n = {};\n                                        if ((\"object\" === t(e[1]) && (n = e[1]), \"string\" == typeof e[1] && (n.defaultValue = e[1]), \"string\" == typeof e[2] && (n.tDescription = e[2]), \"object\" === t(e[2]) || \"object\" === t(e[3]))) {\n                                            var r = e[3] || e[2];\n                                            Object.keys(r).forEach(function (e) {\n                                                n[e] = r[e];\n                                            });\n                                        }\n                                        return n;\n                                    },\n                                    interpolation: {\n                                        escapeValue: !0,\n                                        format: function (e, t, n) {\n                                            return e;\n                                        },\n                                        prefix: \"{{\",\n                                        suffix: \"}}\",\n                                        formatSeparator: \",\",\n                                        unescapePrefix: \"-\",\n                                        nestingPrefix: \"$t(\",\n                                        nestingSuffix: \")\",\n                                        maxReplaces: 1e3,\n                                    },\n                                },\n                                this.options,\n                                V(n)\n                            )),\n                            (this.format = this.options.interpolation.format),\n                            o || (o = U),\n                            !this.options.isClone)\n                        ) {\n                            this.modules.logger ? h.init(i(this.modules.logger), this.options) : h.init(null, this.options);\n                            var a = new N(this.options);\n                            this.store = new O(this.options.resources, this.options);\n                            var s = this.services;\n                            (s.logger = h),\n                                (s.resourceStore = this.store),\n                                (s.languageUtils = a),\n                                (s.pluralResolver = new P(a, { prepend: this.options.pluralSeparator, compatibilityJSON: this.options.compatibilityJSON, simplifyPluralSuffix: this.options.simplifyPluralSuffix })),\n                                (s.interpolator = new F(this.options)),\n                                (s.backendConnector = new T(i(this.modules.backend), s.resourceStore, s, this.options)),\n                                s.backendConnector.on(\"*\", function (t) {\n                                    for (var n = arguments.length, r = new Array(n > 1 ? n - 1 : 0), o = 1; o < n; o++) r[o - 1] = arguments[o];\n                                    e.emit.apply(e, [t].concat(r));\n                                }),\n                                this.modules.languageDetector && ((s.languageDetector = i(this.modules.languageDetector)), s.languageDetector.init(s, this.options.detection, this.options)),\n                                this.modules.i18nFormat && ((s.i18nFormat = i(this.modules.i18nFormat)), s.i18nFormat.init && s.i18nFormat.init(this)),\n                                (this.translator = new j(this.services, this.options)),\n                                this.translator.on(\"*\", function (t) {\n                                    for (var n = arguments.length, r = new Array(n > 1 ? n - 1 : 0), o = 1; o < n; o++) r[o - 1] = arguments[o];\n                                    e.emit.apply(e, [t].concat(r));\n                                }),\n                                this.modules.external.forEach(function (t) {\n                                    t.init && t.init(e);\n                                });\n                        }\n                        [\"getResource\", \"addResource\", \"addResources\", \"addResourceBundle\", \"removeResourceBundle\", \"hasResourceBundle\", \"getResourceBundle\", \"getDataByLanguage\"].forEach(function (t) {\n                            e[t] = function () {\n                                var n;\n                                return (n = e.store)[t].apply(n, arguments);\n                            };\n                        });\n                        var u = v(),\n                            l = function () {\n                                e.changeLanguage(e.options.lng, function (t, n) {\n                                    (e.isInitialized = !0), e.logger.log(\"initialized\", e.options), e.emit(\"initialized\", e.options), u.resolve(n), o(t, n);\n                                });\n                            };\n                        return this.options.resources || !this.options.initImmediate ? l() : setTimeout(l, 0), u;\n                    },\n                },\n                {\n                    key: \"loadResources\",\n                    value: function () {\n                        var e = this,\n                            t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : U;\n                        if (!this.options.resources || this.options.partialBundledLanguages) {\n                            if (this.language && \"cimode\" === this.language.toLowerCase()) return t();\n                            var n = [],\n                                r = function (t) {\n                                    t &&\n                                        e.services.languageUtils.toResolveHierarchy(t).forEach(function (e) {\n                                            n.indexOf(e) < 0 && n.push(e);\n                                        });\n                                };\n                            if (this.language) r(this.language);\n                            else\n                                this.services.languageUtils.getFallbackCodes(this.options.fallbackLng).forEach(function (e) {\n                                    return r(e);\n                                });\n                            this.options.preload &&\n                                this.options.preload.forEach(function (e) {\n                                    return r(e);\n                                }),\n                                this.services.backendConnector.load(n, this.options.ns, t);\n                        } else t(null);\n                    },\n                },\n                {\n                    key: \"reloadResources\",\n                    value: function (e, t, n) {\n                        var r = v();\n                        return (\n                            e || (e = this.languages),\n                            t || (t = this.options.ns),\n                            n || (n = U),\n                            this.services.backendConnector.reload(e, t, function (e) {\n                                r.resolve(), n(e);\n                            }),\n                            r\n                        );\n                    },\n                },\n                {\n                    key: \"use\",\n                    value: function (e) {\n                        return (\n                            \"backend\" === e.type && (this.modules.backend = e),\n                            (\"logger\" === e.type || (e.log && e.warn && e.error)) && (this.modules.logger = e),\n                            \"languageDetector\" === e.type && (this.modules.languageDetector = e),\n                            \"i18nFormat\" === e.type && (this.modules.i18nFormat = e),\n                            \"postProcessor\" === e.type && R.addPostProcessor(e),\n                            \"3rdParty\" === e.type && this.modules.external.push(e),\n                            this\n                        );\n                    },\n                },\n                {\n                    key: \"changeLanguage\",\n                    value: function (e, t) {\n                        var n = this,\n                            r = v();\n                        this.emit(\"languageChanging\", e);\n                        var o = function (e) {\n                            e &&\n                                ((n.language = e),\n                                (n.languages = n.services.languageUtils.toResolveHierarchy(e)),\n                                n.translator.language || n.translator.changeLanguage(e),\n                                n.services.languageDetector && n.services.languageDetector.cacheUserLanguage(e)),\n                                n.loadResources(function (o) {\n                                    !(function (e, o) {\n                                        n.translator.changeLanguage(o),\n                                            o && (n.emit(\"languageChanged\", o), n.logger.log(\"languageChanged\", o)),\n                                            r.resolve(function () {\n                                                return n.t.apply(n, arguments);\n                                            }),\n                                            t &&\n                                                t(e, function () {\n                                                    return n.t.apply(n, arguments);\n                                                });\n                                    })(o, e);\n                                });\n                        };\n                        return (\n                            e || !this.services.languageDetector || this.services.languageDetector.async\n                                ? !e && this.services.languageDetector && this.services.languageDetector.async\n                                    ? this.services.languageDetector.detect(o)\n                                    : o(e)\n                                : o(this.services.languageDetector.detect()),\n                            r\n                        );\n                    },\n                },\n                {\n                    key: \"getFixedT\",\n                    value: function (e, n) {\n                        var o = this,\n                            i = function e(n, i) {\n                                var a;\n                                if (\"object\" !== t(i)) {\n                                    for (var s = arguments.length, u = new Array(s > 2 ? s - 2 : 0), l = 2; l < s; l++) u[l - 2] = arguments[l];\n                                    a = o.options.overloadTranslationOptionHandler([n, i].concat(u));\n                                } else a = r({}, i);\n                                return (a.lng = a.lng || e.lng), (a.lngs = a.lngs || e.lngs), (a.ns = a.ns || e.ns), o.t(n, a);\n                            };\n                        return \"string\" == typeof e ? (i.lng = e) : (i.lngs = e), (i.ns = n), i;\n                    },\n                },\n                {\n                    key: \"t\",\n                    value: function () {\n                        var e;\n                        return this.translator && (e = this.translator).translate.apply(e, arguments);\n                    },\n                },\n                {\n                    key: \"exists\",\n                    value: function () {\n                        var e;\n                        return this.translator && (e = this.translator).exists.apply(e, arguments);\n                    },\n                },\n                {\n                    key: \"setDefaultNamespace\",\n                    value: function (e) {\n                        this.options.defaultNS = e;\n                    },\n                },\n                {\n                    key: \"loadNamespaces\",\n                    value: function (e, t) {\n                        var n = this,\n                            r = v();\n                        return this.options.ns\n                            ? (\"string\" == typeof e && (e = [e]),\n                              e.forEach(function (e) {\n                                  n.options.ns.indexOf(e) < 0 && n.options.ns.push(e);\n                              }),\n                              this.loadResources(function (e) {\n                                  r.resolve(), t && t(e);\n                              }),\n                              r)\n                            : (t && t(), Promise.resolve());\n                    },\n                },\n                {\n                    key: \"loadLanguages\",\n                    value: function (e, t) {\n                        var n = v();\n                        \"string\" == typeof e && (e = [e]);\n                        var r = this.options.preload || [],\n                            o = e.filter(function (e) {\n                                return r.indexOf(e) < 0;\n                            });\n                        return o.length\n                            ? ((this.options.preload = r.concat(o)),\n                              this.loadResources(function (e) {\n                                  n.resolve(), t && t(e);\n                              }),\n                              n)\n                            : (t && t(), Promise.resolve());\n                    },\n                },\n                {\n                    key: \"dir\",\n                    value: function (e) {\n                        if ((e || (e = this.languages && this.languages.length > 0 ? this.languages[0] : this.language), !e)) return \"rtl\";\n                        return [\n                            \"ar\",\n                            \"shu\",\n                            \"sqr\",\n                            \"ssh\",\n                            \"xaa\",\n                            \"yhd\",\n                            \"yud\",\n                            \"aao\",\n                            \"abh\",\n                            \"abv\",\n                            \"acm\",\n                            \"acq\",\n                            \"acw\",\n                            \"acx\",\n                            \"acy\",\n                            \"adf\",\n                            \"ads\",\n                            \"aeb\",\n                            \"aec\",\n                            \"afb\",\n                            \"ajp\",\n                            \"apc\",\n                            \"apd\",\n                            \"arb\",\n                            \"arq\",\n                            \"ars\",\n                            \"ary\",\n                            \"arz\",\n                            \"auz\",\n                            \"avl\",\n                            \"ayh\",\n                            \"ayl\",\n                            \"ayn\",\n                            \"ayp\",\n                            \"bbz\",\n                            \"pga\",\n                            \"he\",\n                            \"iw\",\n                            \"ps\",\n                            \"pbt\",\n                            \"pbu\",\n                            \"pst\",\n                            \"prp\",\n                            \"prd\",\n                            \"ur\",\n                            \"ydd\",\n                            \"yds\",\n                            \"yih\",\n                            \"ji\",\n                            \"yi\",\n                            \"hbo\",\n                            \"men\",\n                            \"xmn\",\n                            \"fa\",\n                            \"jpr\",\n                            \"peo\",\n                            \"pes\",\n                            \"prs\",\n                            \"dv\",\n                            \"sam\",\n                        ].indexOf(this.services.languageUtils.getLanguagePartFromCode(e)) >= 0\n                            ? \"rtl\"\n                            : \"ltr\";\n                    },\n                },\n                {\n                    key: \"createInstance\",\n                    value: function () {\n                        return new n(arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}, arguments.length > 1 ? arguments[1] : void 0);\n                    },\n                },\n                {\n                    key: \"cloneInstance\",\n                    value: function () {\n                        var e = this,\n                            t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},\n                            o = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : U,\n                            i = r({}, this.options, t, { isClone: !0 }),\n                            a = new n(i);\n                        return (\n                            [\"store\", \"services\", \"language\"].forEach(function (t) {\n                                a[t] = e[t];\n                            }),\n                            (a.translator = new j(a.services, a.options)),\n                            a.translator.on(\"*\", function (e) {\n                                for (var t = arguments.length, n = new Array(t > 1 ? t - 1 : 0), r = 1; r < t; r++) n[r - 1] = arguments[r];\n                                a.emit.apply(a, [e].concat(n));\n                            }),\n                            a.init(i, o),\n                            (a.translator.options = a.options),\n                            a\n                        );\n                    },\n                },\n            ]),\n            n\n        );\n    })())();\n});\n\n// I18n XHR Backend\n!(function (t, e) {\n    \"object\" == typeof exports && \"undefined\" != typeof module ? (module.exports = e()) : \"function\" == typeof define && define.amd ? define(e) : ((t = t || self).i18nextXHRBackend = e());\n})(this, function () {\n    \"use strict\";\n    function t(t, e) {\n        for (var n = 0; n < e.length; n++) {\n            var o = e[n];\n            (o.enumerable = o.enumerable || !1), (o.configurable = !0), \"value\" in o && (o.writable = !0), Object.defineProperty(t, o.key, o);\n        }\n    }\n    var e = [],\n        n = e.forEach,\n        o = e.slice;\n    function i(t) {\n        return (\n            n.call(o.call(arguments, 1), function (e) {\n                if (e) for (var n in e) void 0 === t[n] && (t[n] = e[n]);\n            }),\n            t\n        );\n    }\n    function r(t) {\n        return (r =\n            \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator\n                ? function (t) {\n                      return typeof t;\n                  }\n                : function (t) {\n                      return t && \"function\" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? \"symbol\" : typeof t;\n                  })(t);\n    }\n    function a(t) {\n        return (a =\n            \"function\" == typeof Symbol && \"symbol\" === r(Symbol.iterator)\n                ? function (t) {\n                      return r(t);\n                  }\n                : function (t) {\n                      return t && \"function\" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? \"symbol\" : r(t);\n                  })(t);\n    }\n    function s(t, e) {\n        if (e && \"object\" === a(e)) {\n            var n = \"\",\n                o = encodeURIComponent;\n            for (var i in e) n += \"&\" + o(i) + \"=\" + o(e[i]);\n            if (!n) return t;\n            t = t + (-1 !== t.indexOf(\"?\") ? \"&\" : \"?\") + n.slice(1);\n        }\n        return t;\n    }\n    function l(t, e, n, o, i) {\n        o && \"object\" === a(o) && (i || (o._t = new Date()), (o = s(\"\", o).slice(1))), e.queryStringParams && (t = s(t, e.queryStringParams));\n        try {\n            var r;\n            (r = XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject(\"MSXML2.XMLHTTP.3.0\")).open(o ? \"POST\" : \"GET\", t, 1),\n                e.crossDomain || r.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\"),\n                (r.withCredentials = !!e.withCredentials),\n                o && r.setRequestHeader(\"Content-type\", \"application/x-www-form-urlencoded\"),\n                r.overrideMimeType && r.overrideMimeType(\"application/json\");\n            var l = e.customHeaders;\n            if ((l = \"function\" == typeof l ? l() : l)) for (var u in l) r.setRequestHeader(u, l[u]);\n            (r.onreadystatechange = function () {\n                r.readyState > 3 && n && n(r.responseText, r);\n            }),\n                r.send(o);\n        } catch (t) {\n            console && console.log(t);\n        }\n    }\n    function u() {\n        return {\n            loadPath: \"/locales/{{lng}}/{{ns}}.json\",\n            addPath: \"/locales/add/{{lng}}/{{ns}}\",\n            allowMultiLoading: !1,\n            parse: JSON.parse,\n            parsePayload: function (t, e, n) {\n                return (function (t, e, n) {\n                    return e in t ? Object.defineProperty(t, e, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : (t[e] = n), t;\n                })({}, e, n || \"\");\n            },\n            crossDomain: !1,\n            ajax: l,\n        };\n    }\n    var c = (function () {\n        function e(t) {\n            var n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n            !(function (t, e) {\n                if (!(t instanceof e)) throw new TypeError(\"Cannot call a class as a function\");\n            })(this, e),\n                this.init(t, n),\n                (this.type = \"backend\");\n        }\n        var n, o, r;\n        return (\n            (n = e),\n            (o = [\n                {\n                    key: \"init\",\n                    value: function (t) {\n                        var e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n                        (this.services = t), (this.options = i(e, this.options || {}, u()));\n                    },\n                },\n                {\n                    key: \"readMulti\",\n                    value: function (t, e, n) {\n                        var o = this.options.loadPath;\n                        \"function\" == typeof this.options.loadPath && (o = this.options.loadPath(t, e));\n                        var i = this.services.interpolator.interpolate(o, { lng: t.join(\"+\"), ns: e.join(\"+\") });\n                        this.loadUrl(i, n);\n                    },\n                },\n                {\n                    key: \"read\",\n                    value: function (t, e, n) {\n                        var o = this.options.loadPath;\n                        \"function\" == typeof this.options.loadPath && (o = this.options.loadPath([t], [e]));\n                        var i = this.services.interpolator.interpolate(o, { lng: t, ns: e });\n                        this.loadUrl(i, n);\n                    },\n                },\n                {\n                    key: \"loadUrl\",\n                    value: function (t, e) {\n                        var n = this;\n                        this.options.ajax(t, this.options, function (o, i) {\n                            if (i.status >= 500 && i.status < 600) return e(\"failed loading \" + t, !0);\n                            if (i.status >= 400 && i.status < 500) return e(\"failed loading \" + t, !1);\n                            var r, a;\n                            try {\n                                r = n.options.parse(o, t);\n                            } catch (e) {\n                                a = \"failed parsing \" + t + \" to json\";\n                            }\n                            if (a) return e(a, !1);\n                            e(null, r);\n                        });\n                    },\n                },\n                {\n                    key: \"create\",\n                    value: function (t, e, n, o) {\n                        var i = this;\n                        \"string\" == typeof t && (t = [t]);\n                        var r = this.options.parsePayload(e, n, o);\n                        t.forEach(function (t) {\n                            var n = i.services.interpolator.interpolate(i.options.addPath, { lng: t, ns: e });\n                            i.options.ajax(n, i.options, function (t, e) {}, r);\n                        });\n                    },\n                },\n            ]) && t(n.prototype, o),\n            r && t(n, r),\n            e\n        );\n    })();\n    return (c.type = \"backend\"), c;\n});\n\n// Language detector i18n\n!(function (e, o) {\n    \"object\" == typeof exports && \"undefined\" != typeof module ? (module.exports = o()) : \"function\" == typeof define && define.amd ? define(o) : (e.i18nextBrowserLanguageDetector = o());\n})(this, function () {\n    \"use strict\";\n    function e(e) {\n        return (\n            a.call(i.call(arguments, 1), function (o) {\n                if (o) for (var t in o) void 0 === e[t] && (e[t] = o[t]);\n            }),\n            e\n        );\n    }\n    function o(e, o) {\n        if (!(e instanceof o)) throw new TypeError(\"Cannot call a class as a function\");\n    }\n    function t() {\n        return { order: [\"querystring\", \"cookie\", \"localStorage\", \"navigator\", \"htmlTag\"], lookupQuerystring: \"lng\", lookupCookie: \"i18next\", lookupLocalStorage: \"i18nextLng\", caches: [\"localStorage\"], excludeCacheFor: [\"cimode\"] };\n    }\n    var n = [],\n        a = n.forEach,\n        i = n.slice,\n        r = {\n            create: function (e, o, t, n) {\n                var a = void 0;\n                if (t) {\n                    var i = new Date();\n                    i.setTime(i.getTime() + 60 * t * 1e3), (a = \"; expires=\" + i.toGMTString());\n                } else a = \"\";\n                (n = n ? \"domain=\" + n + \";\" : \"\"), (document.cookie = e + \"=\" + o + a + \";\" + n + \"path=/\");\n            },\n            read: function (e) {\n                for (var o = e + \"=\", t = document.cookie.split(\";\"), n = 0; n < t.length; n++) {\n                    for (var a = t[n]; \" \" === a.charAt(0); ) a = a.substring(1, a.length);\n                    if (0 === a.indexOf(o)) return a.substring(o.length, a.length);\n                }\n                return null;\n            },\n            remove: function (e) {\n                this.create(e, \"\", -1);\n            },\n        },\n        u = {\n            name: \"cookie\",\n            lookup: function (e) {\n                var o = void 0;\n                if (e.lookupCookie && \"undefined\" != typeof document) {\n                    var t = r.read(e.lookupCookie);\n                    t && (o = t);\n                }\n                return o;\n            },\n            cacheUserLanguage: function (e, o) {\n                o.lookupCookie && \"undefined\" != typeof document && r.create(o.lookupCookie, e, o.cookieMinutes, o.cookieDomain);\n            },\n        },\n        c = {\n            name: \"querystring\",\n            lookup: function (e) {\n                var o = void 0;\n                if (\"undefined\" != typeof window)\n                    for (var t = window.location.search.substring(1), n = t.split(\"&\"), a = 0; a < n.length; a++) {\n                        var i = n[a].indexOf(\"=\");\n                        if (i > 0) {\n                            var r = n[a].substring(0, i);\n                            r === e.lookupQuerystring && (o = n[a].substring(i + 1));\n                        }\n                    }\n                return o;\n            },\n        },\n        l = void 0;\n    try {\n        l = \"undefined\" !== window && null !== window.localStorage;\n        window.localStorage.setItem(\"i18next.translate.boo\", \"foo\"), window.localStorage.removeItem(\"i18next.translate.boo\");\n    } catch (e) {\n        l = !1;\n    }\n    var s = {\n            name: \"localStorage\",\n            lookup: function (e) {\n                var o = void 0;\n                if (e.lookupLocalStorage && l) {\n                    var t = window.localStorage.getItem(e.lookupLocalStorage);\n                    t && (o = t);\n                }\n                return o;\n            },\n            cacheUserLanguage: function (e, o) {\n                o.lookupLocalStorage && l && window.localStorage.setItem(o.lookupLocalStorage, e);\n            },\n        },\n        d = {\n            name: \"navigator\",\n            lookup: function (e) {\n                var o = [];\n                if (\"undefined\" != typeof navigator) {\n                    if (navigator.languages) for (var t = 0; t < navigator.languages.length; t++) o.push(navigator.languages[t]);\n                    navigator.userLanguage && o.push(navigator.userLanguage), navigator.language && o.push(navigator.language);\n                }\n                return o.length > 0 ? o : void 0;\n            },\n        },\n        f = {\n            name: \"htmlTag\",\n            lookup: function (e) {\n                var o = void 0,\n                    t = e.htmlTag || (\"undefined\" != typeof document ? document.documentElement : null);\n                return t && \"function\" == typeof t.getAttribute && (o = t.getAttribute(\"lang\")), o;\n            },\n        },\n        g = {\n            name: \"path\",\n            lookup: function (e) {\n                var o = void 0;\n                if (\"undefined\" != typeof window) {\n                    var t = window.location.pathname.match(/\\/([a-zA-Z-]*)/g);\n                    if (t instanceof Array)\n                        if (\"number\" == typeof e.lookupFromPathIndex) {\n                            if (\"string\" != typeof t[e.lookupFromPathIndex]) return;\n                            o = t[e.lookupFromPathIndex].replace(\"/\", \"\");\n                        } else o = t[0].replace(\"/\", \"\");\n                }\n                return o;\n            },\n        },\n        p = {\n            name: \"subdomain\",\n            lookup: function (e) {\n                var o = void 0;\n                if (\"undefined\" != typeof window) {\n                    var t = window.location.href.match(/(?:http[s]*\\:\\/\\/)*(.*?)\\.(?=[^\\/]*\\..{2,5})/gi);\n                    t instanceof Array &&\n                        (o =\n                            \"number\" == typeof e.lookupFromSubdomainIndex\n                                ? t[e.lookupFromSubdomainIndex].replace(\"http://\", \"\").replace(\"https://\", \"\").replace(\".\", \"\")\n                                : t[0].replace(\"http://\", \"\").replace(\"https://\", \"\").replace(\".\", \"\"));\n                }\n                return o;\n            },\n        },\n        h = (function () {\n            function e(e, o) {\n                for (var t = 0; t < o.length; t++) {\n                    var n = o[t];\n                    (n.enumerable = n.enumerable || !1), (n.configurable = !0), \"value\" in n && (n.writable = !0), Object.defineProperty(e, n.key, n);\n                }\n            }\n            return function (o, t, n) {\n                return t && e(o.prototype, t), n && e(o, n), o;\n            };\n        })(),\n        v = (function () {\n            function n(e) {\n                var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\n                o(this, n), (this.type = \"languageDetector\"), (this.detectors = {}), this.init(e, t);\n            }\n            return (\n                h(n, [\n                    {\n                        key: \"init\",\n                        value: function (o) {\n                            var n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {},\n                                a = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {};\n                            (this.services = o),\n                                (this.options = e(n, this.options || {}, t())),\n                                this.options.lookupFromUrlIndex && (this.options.lookupFromPathIndex = this.options.lookupFromUrlIndex),\n                                (this.i18nOptions = a),\n                                this.addDetector(u),\n                                this.addDetector(c),\n                                this.addDetector(s),\n                                this.addDetector(d),\n                                this.addDetector(f),\n                                this.addDetector(g),\n                                this.addDetector(p);\n                        },\n                    },\n                    {\n                        key: \"addDetector\",\n                        value: function (e) {\n                            this.detectors[e.name] = e;\n                        },\n                    },\n                    {\n                        key: \"detect\",\n                        value: function (e) {\n                            var o = this;\n                            e || (e = this.options.order);\n                            var t = [];\n                            e.forEach(function (e) {\n                                if (o.detectors[e]) {\n                                    var n = o.detectors[e].lookup(o.options);\n                                    n && \"string\" == typeof n && (n = [n]), n && (t = t.concat(n));\n                                }\n                            });\n                            var n = void 0;\n                            if (\n                                (t.forEach(function (e) {\n                                    if (!n) {\n                                        var t = o.services.languageUtils.formatLanguageCode(e);\n                                        o.services.languageUtils.isWhitelisted(t) && (n = t);\n                                    }\n                                }),\n                                !n)\n                            ) {\n                                var a = this.i18nOptions.fallbackLng;\n                                \"string\" == typeof a && (a = [a]), a || (a = []), (n = \"[object Array]\" === Object.prototype.toString.apply(a) ? a[0] : a[0] || (a.default && a.default[0]));\n                            }\n                            return n;\n                        },\n                    },\n                    {\n                        key: \"cacheUserLanguage\",\n                        value: function (e, o) {\n                            var t = this;\n                            o || (o = this.options.caches),\n                                o &&\n                                    ((this.options.excludeCacheFor && this.options.excludeCacheFor.indexOf(e) > -1) ||\n                                        o.forEach(function (o) {\n                                            t.detectors[o] && t.detectors[o].cacheUserLanguage(e, t.options);\n                                        }));\n                        },\n                    },\n                ]),\n                n\n            );\n        })();\n    return (v.type = \"languageDetector\"), v;\n});\n\n// I18n Jquery\n!(function (t, e) {\n    \"object\" == typeof exports && \"undefined\" != typeof module ? (module.exports = e()) : \"function\" == typeof define && define.amd ? define(e) : (t.jqueryI18next = e());\n})(this, function () {\n    \"use strict\";\n    function t(t, a) {\n        function i(n, a, i) {\n            function r(t, n) {\n                return f.parseDefaultValueFromContent ? e({}, t, { defaultValue: n }) : t;\n            }\n            if (0 !== a.length) {\n                var o = \"text\";\n                if (0 === a.indexOf(\"[\")) {\n                    var l = a.split(\"]\");\n                    (a = l[1]), (o = l[0].substr(1, l[0].length - 1));\n                }\n                if ((a.indexOf(\";\") === a.length - 1 && (a = a.substr(0, a.length - 2)), \"html\" === o)) n.html(t.t(a, r(i, n.html())));\n                else if (\"text\" === o) n.text(t.t(a, r(i, n.text())));\n                else if (\"prepend\" === o) n.prepend(t.t(a, r(i, n.html())));\n                else if (\"append\" === o) n.append(t.t(a, r(i, n.html())));\n                else if (0 === o.indexOf(\"data-\")) {\n                    var s = o.substr(\"data-\".length),\n                        d = t.t(a, r(i, n.data(s)));\n                    n.data(s, d), n.attr(o, d);\n                } else n.attr(o, t.t(a, r(i, n.attr(o))));\n            }\n        }\n        function r(t, n) {\n            var r = t.attr(f.selectorAttr);\n            if ((r || void 0 === r || !1 === r || (r = t.text() || t.val()), r)) {\n                var o = t,\n                    l = t.data(f.targetAttr);\n                if ((l && (o = t.find(l) || t), n || !0 !== f.useOptionsAttr || (n = t.data(f.optionsAttr)), (n = n || {}), r.indexOf(\";\") >= 0)) {\n                    var s = r.split(\";\");\n                    a.each(s, function (t, e) {\n                        \"\" !== e && i(o, e.trim(), n);\n                    });\n                } else i(o, r, n);\n                if (!0 === f.useOptionsAttr) {\n                    var d = {};\n                    (d = e({ clone: d }, n)), delete d.lng, t.data(f.optionsAttr, d);\n                }\n            }\n        }\n        function o(t) {\n            return this.each(function () {\n                r(a(this), t),\n                    a(this)\n                        .find(\"[\" + f.selectorAttr + \"]\")\n                        .each(function () {\n                            r(a(this), t);\n                        });\n            });\n        }\n        var f = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {};\n        (f = e({}, n, f)), (a[f.tName] = t.t.bind(t)), (a[f.i18nName] = t), (a.fn[f.handleName] = o);\n    }\n    var e =\n            Object.assign ||\n            function (t) {\n                for (var e = 1; e < arguments.length; e++) {\n                    var n = arguments[e];\n                    for (var a in n) Object.prototype.hasOwnProperty.call(n, a) && (t[a] = n[a]);\n                }\n                return t;\n            },\n        n = { tName: \"t\", i18nName: \"i18n\", handleName: \"localize\", selectorAttr: \"data-i18n\", targetAttr: \"i18n-target\", optionsAttr: \"i18n-options\", useOptionsAttr: !1, parseDefaultValueFromContent: !0 };\n    return { init: t };\n});\n\n// Promises - for IE11\n/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license   Licensed under MIT license\n *            See https://raw.githubusercontent.com/jakearchibald/es6-promise/master/LICENSE\n * @version   3.2.1\n */\n\n(function () {\n    \"use strict\";\n    function t(t) {\n        return \"function\" == typeof t || (\"object\" == typeof t && null !== t);\n    }\n    function e(t) {\n        return \"function\" == typeof t;\n    }\n    function n(t) {\n        G = t;\n    }\n    function r(t) {\n        Q = t;\n    }\n    function o() {\n        return function () {\n            process.nextTick(a);\n        };\n    }\n    function i() {\n        return function () {\n            B(a);\n        };\n    }\n    function s() {\n        var t = 0,\n            e = new X(a),\n            n = document.createTextNode(\"\");\n        return (\n            e.observe(n, { characterData: !0 }),\n            function () {\n                n.data = t = ++t % 2;\n            }\n        );\n    }\n    function u() {\n        var t = new MessageChannel();\n        return (\n            (t.port1.onmessage = a),\n            function () {\n                t.port2.postMessage(0);\n            }\n        );\n    }\n    function c() {\n        return function () {\n            setTimeout(a, 1);\n        };\n    }\n    function a() {\n        for (var t = 0; J > t; t += 2) {\n            var e = tt[t],\n                n = tt[t + 1];\n            e(n), (tt[t] = void 0), (tt[t + 1] = void 0);\n        }\n        J = 0;\n    }\n    function f() {\n        try {\n            var t = require,\n                e = t(\"vertx\");\n            return (B = e.runOnLoop || e.runOnContext), i();\n        } catch (n) {\n            return c();\n        }\n    }\n    function l(t, e) {\n        var n = this,\n            r = new this.constructor(p);\n        void 0 === r[rt] && k(r);\n        var o = n._state;\n        if (o) {\n            var i = arguments[o - 1];\n            Q(function () {\n                x(o, r, i, n._result);\n            });\n        } else E(n, r, t, e);\n        return r;\n    }\n    function h(t) {\n        var e = this;\n        if (t && \"object\" == typeof t && t.constructor === e) return t;\n        var n = new e(p);\n        return g(n, t), n;\n    }\n    function p() {}\n    function _() {\n        return new TypeError(\"You cannot resolve a promise with itself\");\n    }\n    function d() {\n        return new TypeError(\"A promises callback cannot return that same promise.\");\n    }\n    function v(t) {\n        try {\n            return t.then;\n        } catch (e) {\n            return (ut.error = e), ut;\n        }\n    }\n    function y(t, e, n, r) {\n        try {\n            t.call(e, n, r);\n        } catch (o) {\n            return o;\n        }\n    }\n    function m(t, e, n) {\n        Q(function (t) {\n            var r = !1,\n                o = y(\n                    n,\n                    e,\n                    function (n) {\n                        r || ((r = !0), e !== n ? g(t, n) : S(t, n));\n                    },\n                    function (e) {\n                        r || ((r = !0), j(t, e));\n                    },\n                    \"Settle: \" + (t._label || \" unknown promise\")\n                );\n            !r && o && ((r = !0), j(t, o));\n        }, t);\n    }\n    function b(t, e) {\n        e._state === it\n            ? S(t, e._result)\n            : e._state === st\n            ? j(t, e._result)\n            : E(\n                  e,\n                  void 0,\n                  function (e) {\n                      g(t, e);\n                  },\n                  function (e) {\n                      j(t, e);\n                  }\n              );\n    }\n    function w(t, n, r) {\n        n.constructor === t.constructor && r === et && constructor.resolve === nt ? b(t, n) : r === ut ? j(t, ut.error) : void 0 === r ? S(t, n) : e(r) ? m(t, n, r) : S(t, n);\n    }\n    function g(e, n) {\n        e === n ? j(e, _()) : t(n) ? w(e, n, v(n)) : S(e, n);\n    }\n    function A(t) {\n        t._onerror && t._onerror(t._result), T(t);\n    }\n    function S(t, e) {\n        t._state === ot && ((t._result = e), (t._state = it), 0 !== t._subscribers.length && Q(T, t));\n    }\n    function j(t, e) {\n        t._state === ot && ((t._state = st), (t._result = e), Q(A, t));\n    }\n    function E(t, e, n, r) {\n        var o = t._subscribers,\n            i = o.length;\n        (t._onerror = null), (o[i] = e), (o[i + it] = n), (o[i + st] = r), 0 === i && t._state && Q(T, t);\n    }\n    function T(t) {\n        var e = t._subscribers,\n            n = t._state;\n        if (0 !== e.length) {\n            for (var r, o, i = t._result, s = 0; s < e.length; s += 3) (r = e[s]), (o = e[s + n]), r ? x(n, r, o, i) : o(i);\n            t._subscribers.length = 0;\n        }\n    }\n    function M() {\n        this.error = null;\n    }\n    function P(t, e) {\n        try {\n            return t(e);\n        } catch (n) {\n            return (ct.error = n), ct;\n        }\n    }\n    function x(t, n, r, o) {\n        var i,\n            s,\n            u,\n            c,\n            a = e(r);\n        if (a) {\n            if (((i = P(r, o)), i === ct ? ((c = !0), (s = i.error), (i = null)) : (u = !0), n === i)) return void j(n, d());\n        } else (i = o), (u = !0);\n        n._state !== ot || (a && u ? g(n, i) : c ? j(n, s) : t === it ? S(n, i) : t === st && j(n, i));\n    }\n    function C(t, e) {\n        try {\n            e(\n                function (e) {\n                    g(t, e);\n                },\n                function (e) {\n                    j(t, e);\n                }\n            );\n        } catch (n) {\n            j(t, n);\n        }\n    }\n    function O() {\n        return at++;\n    }\n    function k(t) {\n        (t[rt] = at++), (t._state = void 0), (t._result = void 0), (t._subscribers = []);\n    }\n    function Y(t) {\n        return new _t(this, t).promise;\n    }\n    function q(t) {\n        var e = this;\n        return new e(\n            I(t)\n                ? function (n, r) {\n                      for (var o = t.length, i = 0; o > i; i++) e.resolve(t[i]).then(n, r);\n                  }\n                : function (t, e) {\n                      e(new TypeError(\"You must pass an array to race.\"));\n                  }\n        );\n    }\n    function F(t) {\n        var e = this,\n            n = new e(p);\n        return j(n, t), n;\n    }\n    function D() {\n        throw new TypeError(\"You must pass a resolver function as the first argument to the promise constructor\");\n    }\n    function K() {\n        throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n    }\n    function L(t) {\n        (this[rt] = O()), (this._result = this._state = void 0), (this._subscribers = []), p !== t && (\"function\" != typeof t && D(), this instanceof L ? C(this, t) : K());\n    }\n    function N(t, e) {\n        (this._instanceConstructor = t),\n            (this.promise = new t(p)),\n            this.promise[rt] || k(this.promise),\n            I(e)\n                ? ((this._input = e),\n                  (this.length = e.length),\n                  (this._remaining = e.length),\n                  (this._result = new Array(this.length)),\n                  0 === this.length ? S(this.promise, this._result) : ((this.length = this.length || 0), this._enumerate(), 0 === this._remaining && S(this.promise, this._result)))\n                : j(this.promise, U());\n    }\n    function U() {\n        return new Error(\"Array Methods must be provided an Array\");\n    }\n    function W() {\n        var t;\n        if (\"undefined\" != typeof global) t = global;\n        else if (\"undefined\" != typeof self) t = self;\n        else\n            try {\n                t = Function(\"return this\")();\n            } catch (e) {\n                throw new Error(\"polyfill failed because global object is unavailable in this environment\");\n            }\n        var n = t.Promise;\n        (!n || \"[object Promise]\" !== Object.prototype.toString.call(n.resolve()) || n.cast) && (t.Promise = pt);\n    }\n    var z;\n    z = Array.isArray\n        ? Array.isArray\n        : function (t) {\n              return \"[object Array]\" === Object.prototype.toString.call(t);\n          };\n    var B,\n        G,\n        H,\n        I = z,\n        J = 0,\n        Q = function (t, e) {\n            (tt[J] = t), (tt[J + 1] = e), (J += 2), 2 === J && (G ? G(a) : H());\n        },\n        R = \"undefined\" != typeof window ? window : void 0,\n        V = R || {},\n        X = V.MutationObserver || V.WebKitMutationObserver,\n        Z = \"undefined\" == typeof self && \"undefined\" != typeof process && \"[object process]\" === {}.toString.call(process),\n        $ = \"undefined\" != typeof Uint8ClampedArray && \"undefined\" != typeof importScripts && \"undefined\" != typeof MessageChannel,\n        tt = new Array(1e3);\n    H = Z ? o() : X ? s() : $ ? u() : void 0 === R && \"function\" == typeof require ? f() : c();\n    var et = l,\n        nt = h,\n        rt = Math.random().toString(36).substring(16),\n        ot = void 0,\n        it = 1,\n        st = 2,\n        ut = new M(),\n        ct = new M(),\n        at = 0,\n        ft = Y,\n        lt = q,\n        ht = F,\n        pt = L;\n    (L.all = ft),\n        (L.race = lt),\n        (L.resolve = nt),\n        (L.reject = ht),\n        (L._setScheduler = n),\n        (L._setAsap = r),\n        (L._asap = Q),\n        (L.prototype = {\n            constructor: L,\n            then: et,\n            catch: function (t) {\n                return this.then(null, t);\n            },\n        });\n    var _t = N;\n    (N.prototype._enumerate = function () {\n        for (var t = this.length, e = this._input, n = 0; this._state === ot && t > n; n++) this._eachEntry(e[n], n);\n    }),\n        (N.prototype._eachEntry = function (t, e) {\n            var n = this._instanceConstructor,\n                r = n.resolve;\n            if (r === nt) {\n                var o = v(t);\n                if (o === et && t._state !== ot) this._settledAt(t._state, e, t._result);\n                else if (\"function\" != typeof o) this._remaining--, (this._result[e] = t);\n                else if (n === pt) {\n                    var i = new n(p);\n                    w(i, t, o), this._willSettleAt(i, e);\n                } else\n                    this._willSettleAt(\n                        new n(function (e) {\n                            e(t);\n                        }),\n                        e\n                    );\n            } else this._willSettleAt(r(t), e);\n        }),\n        (N.prototype._settledAt = function (t, e, n) {\n            var r = this.promise;\n            r._state === ot && (this._remaining--, t === st ? j(r, n) : (this._result[e] = n)), 0 === this._remaining && S(r, this._result);\n        }),\n        (N.prototype._willSettleAt = function (t, e) {\n            var n = this;\n            E(\n                t,\n                void 0,\n                function (t) {\n                    n._settledAt(it, e, t);\n                },\n                function (t) {\n                    n._settledAt(st, e, t);\n                }\n            );\n        });\n    var dt = W,\n        vt = { Promise: pt, polyfill: dt };\n    \"function\" == typeof define && define.amd\n        ? define(function () {\n              return vt;\n          })\n        : \"undefined\" != typeof module && module.exports\n        ? (module.exports = vt)\n        : \"undefined\" != typeof this && (this.ES6Promise = vt),\n        dt();\n}.call(this));\n"
  },
  {
    "path": "public/frontend/crossbrowserjs/html5shiv.js",
    "content": "/*\n HTML5 Shiv v3.6.2pre | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed\n*/\n(function(l,f){function m(){var a=e.elements;return\"string\"==typeof a?a.split(\" \"):a}function i(a){var b=n[a[o]];b||(b={},h++,a[o]=h,n[h]=b);return b}function p(a,b,c){b||(b=f);if(g)return b.createElement(a);c||(c=i(b));b=c.cache[a]?c.cache[a].cloneNode():r.test(a)?(c.cache[a]=c.createElem(a)).cloneNode():c.createElem(a);return b.canHaveChildren&&!s.test(a)?c.frag.appendChild(b):b}function t(a,b){if(!b.cache)b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag();\na.createElement=function(c){return!e.shivMethods?b.createElem(c):p(c,a,b)};a.createDocumentFragment=Function(\"h,f\",\"return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&(\"+m().join().replace(/\\w+/g,function(a){b.createElem(a);b.frag.createElement(a);return'c(\"'+a+'\")'})+\");return n}\")(e,b.frag)}function q(a){a||(a=f);var b=i(a);if(e.shivCSS&&!j&&!b.hasCSS){var c,d=a;c=d.createElement(\"p\");d=d.getElementsByTagName(\"head\")[0]||d.documentElement;c.innerHTML=\"x<style>article,aside,figcaption,figure,footer,header,hgroup,nav,section{display:block}mark{background:#FF0;color:#000}</style>\";\nc=d.insertBefore(c.lastChild,d.firstChild);b.hasCSS=!!c}g||t(a,b);return a}var k=l.html5||{},s=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,r=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,j,o=\"_html5shiv\",h=0,n={},g;(function(){try{var a=f.createElement(\"a\");a.innerHTML=\"<xyz></xyz>\";j=\"hidden\"in a;var b;if(!(b=1==a.childNodes.length)){f.createElement(\"a\");var c=f.createDocumentFragment();b=\"undefined\"==typeof c.cloneNode||\n\"undefined\"==typeof c.createDocumentFragment||\"undefined\"==typeof c.createElement}g=b}catch(d){g=j=!0}})();var e={elements:k.elements||\"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video\",version:\"3.6.2pre\",shivCSS:!1!==k.shivCSS,supportsUnknownElements:g,shivMethods:!1!==k.shivMethods,type:\"default\",shivDocument:q,createElement:p,createDocumentFragment:function(a,b){a||(a=f);if(g)return a.createDocumentFragment();\nfor(var b=b||i(a),c=b.frag.cloneNode(),d=0,e=m(),h=e.length;d<h;d++)c.createElement(e[d]);return c}};l.html5=e;q(f)})(this,document);\n"
  },
  {
    "path": "public/frontend/css/forum/style-responsive.css",
    "content": "/*\nTemplate Name: Color Admin - Responsive Admin Dashboard Template build with Twitter Bootstrap 3 & 4\nVersion: 4.0.0\nAuthor: Sean Ngu\nWebsite: http://www.seantheme.com/color-admin-v4.0/frontend/forum/\n*/\n\n@media (min-width: 1200px) {\n\n    /* Container Setting */\n    \n    .container {\n        width: 1010px;\n    }\n}\n\n@media (min-width: 1920px) {\n\n    /* Body Setting */\n    \n\tbody {\n\t\tfont-size: 16px;\n\t\tpadding-top: 70px;\n\t}\n\t\n\n    /* Navbar Setting */\n    \n\t.navbar-logo {\n\t\tborder-width: 20px;\n\t\tmargin-right: 15px;\n\t}\n\t.navbar-brand {\n\t\theight: 70px;\n\t\tline-height: 40px;\n\t\tfont-size: 20px;\n\t}\n\t.navbar-brand, \n\t.navbar-nav > li > a {\n\t\tline-height: 40px;\n\t}\n\t.navbar.navbar-sm .navbar-nav > li > a {\n\t\tline-height: 30px;\n\t}\n\t.navbar-form .form-control {\n\t\tborder-radius: 40px;\n\t\theight: 45px;\n\t\tmin-width: 300px;\n\t\tfont-size: 16px;\n\t\tpadding: 0 65px 0 20px;\n\t}\n\t.navbar-form .btn {\n\t\tfont-size: 24px;\n\t}\n\n\n    /* Container Setting */\n    \n\t.container {\n\t\twidth: 1360px;\n\t}\n\n\n    /* Content Setting */\n    \n\t.content {\n\t\tpadding: 45px 0 75px;\n\t}\n\n\n    /* Search Banner Setting */\n    \n\t.search-banner {\n\t\tpadding: 70px 0;\n\t}\n\t.search-banner h1 {\n\t\tfont-size: 48px;\n\t}\n\t.search-banner .form-control {\n\t\tfont-size: 18px;\n\t}\n\t.search-banner .btn .fa {\n\t\tdisplay: block;\n\t\tfont-size: 24px;\n\t\tline-height: 24px;\n\t\theight: 24px;\n\t}\n\t.search-banner h5 {\n\t\tfont-size: 16px;\n\t}\n\t.search-banner .container {\n\t\twidth: 860px;\n\t}\n\n\n    /* Popular Tags Setting */\n    \n\t.popular-tags > li > a {\n\t\tpadding: 4px 12px;\n\t}\n\n\n    /* Panel Setting */\n    \n\t.panel.panel-forum {\n\t\tborder-width: 3px;\n\t}\n\t.panel-title {\n\t\tfont-size: 16px;\n\t\tline-height: 24px;\n\t}\n\n\n    /* Forum List Setting */\n    \n\t.forum-list > li + li, \n\t.threads-list > li + li {\n\t\tborder-top-width: 3px;\n\t}\n\t.forum-list .info-container .info .title {\n\t\tfont-size: 18px;\n\t}\n\t.forum-list .info-container .desc {\n\t\tfont-size: 16px;\n\t\tline-height: 24px;\n\t}\n\t.forum-list .info-container .total-count {\n\t\tfont-size: 18px;\n\t}\n\t.forum-list .info-container .latest-post .title,\n\t.forum-list .info-container .latest-post .time {\n\t\tfont-size: 16px;\n\t}\n\t.forum-list .media {\n\t\twidth: 72px;\n\t\tline-height: 72px;\n\t}\n\t.forum-list .info-container {\n\t\tmargin-left: 89px;\n\t}\n\t.forum-list.forum-topic-list .info-start-end {\n\t\tline-height: 24px;\n\t}\n\t.forum-list.forum-topic-list .info-container .date-replies .replies {\n\t\tpadding: 5px 15px;\n\t}\n\t.forum-list.forum-topic-list .info-container .date-replies .time {\n\t\tline-height: 13px;\n\t\tfont-size: 13px;\n\t}\n\t.forum-list.forum-topic-list .info-container .date-replies .replies .total {\n\t\tfont-size: 18px;\n\t\tline-height: 24px;\n\t}\n\t.forum-list.forum-topic-list .info-container .date-replies .replies .text {\n\t\tfont-size: 13px;\n\t\tline-height: 17px;\n\t}\n\t.threads-list {\n\t\tfont-size: 14px;\n\t}\n\t.threads-list > li .title {\n\t\tfont-size: 16px;\n\t\tline-height: 24px;\n\t}\n\t.forum-list.forum-detail-list .info-container {\n\t\tmargin-left: 92px;\n\t\t-webkit-border-radius: 8px;\n\t\t-moz-border-radius: 8px;\n\t\tborder-radius: 8px;\n\t}\n\t.forum-list.forum-detail-list .post-user{\n\t\tfont-size: 16px;\n\t}\n\t.forum-list.forum-detail-list .post-content {\n\t\tfont-size: 16px;\n\t\tline-height: 28px;\n\t}\n\t.forum-list.forum-detail-list .post-content pre {\n\t\tpadding: 15px;\n\t\tfont-size: 16px;\n\t}\n\t\n\n    /* Footer Setting */\n    \n\t.footer h4 {\n\t\tfont-size: 18px;\n\t}\n\t.footer p {\n\t\tfont-size: 16px;\n\t\tline-height: 24px;\n\t}\n\t.footer .latest-post > li .title, \n\t.footer .latest-post > li .title a {\n\t\tfont-size: 16px;\n\t\tline-height: 24px;\n\t}\n\t.footer .latest-post > li .time {\n\t\tfont-size: 14px;\n\t}\n\t.footer-copyright {\n\t\tpadding: 30px 0;\n\t}\n\n\n    /* Page Title Setting */\n    \n\t.page-title {\n\t\tpadding: 45px 0;\n\t}\n\t.page-title h1 {\n\t\tfont-size: 36px;\n\t}\n\t\n\n    /* Pagination Setting */\n    \n\t.pager li > a, \n\t.pager li > span, \n\t.pagination > li > a, \n\t.pagination > li > span {\n\t\tfont-size: 16px;\n\t\tpadding: 10px 15px;\n\t}\n\t\n\n    /* Button Setting */\n    \n\t.btn {\n\t\tfont-size: 16px;\n\t\tpadding: 10px 15px;\n\t}\n\t\n\n    /* Backgroun Cover Setting */\n    \n    .has-bg .bg-cover img {\n        width: 100%;\n    }\n    \n    \n    /* Theme Panel Setting */\n    \n\t.theme-panel {\n\t\twidth: 248px;\n\t\tright: -248px;\n\t}\n\t.theme-panel .theme-list > li + li {\n\t\tmargin-left: 7px;\n\t}\n\t.theme-panel .theme-list > li > a {\n\t\twidth: 40px;\n\t\theight: 40px;\n\t}\n\t.theme-panel .theme-panel-content {\n\t\tpadding: 10px;\n\t}\n    .theme-panel .theme-collapse-btn {\n    \twidth: 60px;\n    \theight: 60px;\n    \tleft: -60px;\n    \tmargin-top: -30px;\n    \tfont-size: 24px;\n    \tline-height: 60px;\n    }\n    .theme-panel .theme-list > li.active > a:before {\n    \tfont-size: 20px;\n    \tline-height: 40px;\n    }\n\t\n\t\n    /* Tooltip Setting */\n    \n    .tooltip {\n    \tfont-size: 16px;\n    }\n}\n\n@media (max-width: 767px) {\n    \n    /* Navbar Element Setting */\n    \n    .navbar-form,\n    .navbar.navbar-sm .navbar-form {\n        border: none;\n        margin: 0;\n    }\n    .navbar .navbar-nav > li > a {\n        line-height: 20px;\n    }\n    \n    \n    /* Search Banner Element Setting */\n    \n    .search-banner {\n        padding: 30px 0;\n    }\n    .search-banner .container {\n        width: 100%;\n    }\n    .search-banner h1 {\n        font-size: 24px;\n    }\n    \n    \n    /* Content Element Setting */\n    \n    .content {\n        padding: 20px 0 30px;\n    }\n    .has-bg .bg-cover img {\n        max-width: inherit;\n        min-width: 100%;\n        max-height: 100%;\n    }\n    \n    \n    /* Forum List Element Setting */\n    \n    .forum-list .info-container .info,\n    .forum-list .info-container .total-count,\n    .forum-list .info-container .latest-post {\n        float: none;\n        width: auto;\n        text-align: left;\n    }\n    .forum-list .info-container > div + div {\n        margin-top: 10px;\n    }\n    \n    \n    /* Forum Topic List Setting */\n    \n    .forum-list.forum-topic-list .info-container .info {\n        padding-right: 0;\n    }\n    .forum-list.forum-topic-list .info-container .date-replies {\n        position: relative;\n        top: 0;\n        margin-top: 5px;\n        width: auto;\n        text-align: left;\n    }\n    .forum-list.forum-topic-list .info-container .date-replies .time,\n    .forum-list.forum-topic-list .info-container .date-replies .replies,\n    .forum-list.forum-topic-list .info-container .date-replies .replies .total,\n    .forum-list.forum-topic-list .info-container .date-replies .replies .text {\n        display: inline-block;\n        padding: 0;\n        margin: 0;\n        font-size: 11px;\n        line-height: 11px;\n        -webkit-border-radius: 0;\n        -moz-border-radius: 0;\n        border-radius: 0;\n    }\n    .forum-list.forum-topic-list .info-container .date-replies .replies {\n        margin-left: 10px;\n        border-left: 1px solid #ddd;\n        padding-left: 10px;\n        background: none;\n    }\n    \n    \n    /* Forum Details Page Setting */\n    \n    .forum-list.forum-detail-list .media {\n        width: 40px;\n        line-height: 40px;\n    }\n    .forum-list.forum-detail-list .media .label {\n        font-size: 9px;\n        padding-left: 0;\n        padding-right: 0;\n    }\n    .forum-list.forum-detail-list .info-container {\n        margin-left: 50px;\n    }\n}"
  },
  {
    "path": "public/frontend/css/forum/style.css",
    "content": "/*\nTemplate Name: Color Admin - Responsive Admin Dashboard Template build with Twitter Bootstrap 3 & 4\nVersion: 4.0.0\nAuthor: Sean Ngu\nWebsite: http://www.seantheme.com/color-admin-v4.0/frontend/forum/\n\n::  1.0 General Reset & Setup\n-------------------------------------------\n    1.1 Reset and overrides\n\n::  2.0 Header Navbar Setting\n-------------------------------------------\n    2.1 Navbar Element Setting\n    2.2 Small Navbar Setting\n\n::  3.0 Search Banner Setting\n-------------------------------------------\n    3.1 Search Banner Element Setting\n    3.2 Search Banner Popular Tags Setting\n\n::  4.0 Content Setting\n-------------------------------------------\n    4.1 Content Element Setting\n    4.2 Content Has Background Setting\n    4.3 Section Container Setting\n    4.4 Breadcrumb Setting\n    4.5 Page Title Setting\n\n::  5.0 Forum Setting\n-------------------------------------------\n    5.1 Panel Forum Setting\n    5.2 Forum List Setting\n    5.3 Forum Topic List Setting\n    5.4 Forum Threads List Setting\n    5.5 Forum Detail List Setting\n\n::  6.0 Footer Setting\n-------------------------------------------\n    6.1 Footer Element Setting\n    6.2 Footer Copyright Setting\n\n::  7.0 Pace Loader Setting\n-------------------------------------------\n    7.1 Pace Loader Element Setting\n\n::  8.0 Predefined CSS Setting\n-------------------------------------------\n    8.1 Predefined Classes\n\n::  9.0 Basic Element Setting\n-------------------------------------------\n    9.1 Component - Button\n    9.1.1 Component - Button - Default\n    9.1.2 Component - Button - White\n    9.1.3 Component - Button - Inverse\n    9.1.4 Component - Button - Primary\n    9.1.5 Component - Button - Success\n    9.1.6 Component - Button - Warning\n    9.1.7 Component - Button - Danger\n    9.1.8 Component - Button - Info\n    9.2 Component - Progress Bar\n    9.3 Component - From Control\n    9.4 Component - Dropdown Menu\n    9.5 Component - Tooltip\n    9.6 Component - Alert\n    9.7 Component - Note Setting\n    9.8 Component - Badge & Label Setting\n    9.9 Component - Pagination & pager\n    9.10 Component - Nav Setting\n    9.11 Component - Nav Tabs\n    9.12 Component - Nav Pills\n    9.13 Component - Tab Content\n    9.14 Component - Accordion Panel\n    9.15 Component - Panel\n    9.16 Component - Panel - Panel Expand\n    9.17 Component - Panel - Panel loading\n    9.18 Component - Modal Setting\n    9.19 Component - Media Object\n    9.20 Component - Tabl\n    9.21 Component - Well\n    9.22 Component - Jumbotron\n    9.23 Component - List Group\n    9.24 Component - Carousel\n    9.25 Component - Theme Panel\n*/\n\n\n/* -------------------------------\n   1.0 General reset & setup\n------------------------------- */\n\n/* 1.1 Reset and overrides */\n\nbody {\n    padding-top: 60px;\n    background: #fff;\n    font-size: 12px;\n    font-family: 'Open Sans', \"Helvetica Neue\",Helvetica,Arial,sans-serif;\n    color: #707478;\n}\na {\n    color: #00acac;\n}\na:hover,\na:focus {\n    color: #008a8a;\n}\n\n\n\n/* -------------------------------\n   2.0 Header Navbar Setting\n------------------------------- */\n\n/* 2.1 Navbar Element Setting */\n\n.navbar {\n    border: none;\n    border-radius: 0;\n}\n.navbar.navbar-default {\n    background: #fff;\n    -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.125);\n    box-shadow: 0 1px 3px rgba(0,0,0,0.125);\n}\n.navbar-brand {\n    height: 60px;\n    line-height: 30px;\n    font-size: 16px;\n}\n.navbar-brand img {\n\tmax-height: 40px;\n\tdisplay: block;\n\tmargin: -5px 0;\n}\n.navbar-logo {\n    border: 15px solid transparent;\n    border-color: #4DCACA #31A3A3 #1D8888;\n    float: left;\n    border-radius: 6px;\n    margin-right: 10px;\n}\n.navbar.navbar-default .navbar-brand {\n    color: #000;\n}\n.navbar-nav > li > a {\n    line-height: 30px;\n}\n.navbar-default .navbar-nav > li > a {\n    color: #242a30;\n}\n.navbar-form,\n.navbar-toggle {\n    margin-top: 13px;\n    margin-bottom: 13px;\n}\n.navbar-form .form-group {\n    position: relative;\n}\n.navbar-form .form-control {\n    border-radius: 40px;\n    padding-right: 45px;\n}\n.navbar-form .btn {\n    position: absolute;\n    right: 0;\n    top: 0;\n    background: none;\n    border: none;\n    font-size: 16px;\n    -webkit-border-radius: 0 15px 15px 0;\n    -moz-border-radius: 0 15px 15px 0;\n    border-radius: 0 15px 15px 0;\n}\n\n\n/* 2.2 Small Navbar Setting */\n\n.header.navbar .navbar-brand,\n.header.navbar .navbar-form,\n.header.navbar .navbar-nav > li > a,\n.header.navbar .navbar-toggle {\n    -webkit-transition: all .2s linear;\n    -moz-transition: all .2s linear;\n    transition: all .2s linear;\n}\n.navbar.navbar-sm .navbar-brand {\n    padding-top: 10px;\n    padding-bottom: 10px;\n    height: 50px;\n}\n.navbar.navbar-sm .navbar-form,\n.navbar.navbar-sm .navbar-toggle {\n    margin-top: 8px;\n    margin-bottom: 8px;\n}\n.navbar.navbar-sm .navbar-nav > li > a {\n    line-height: 20px;\n}\n\n\n\n/* -------------------------------\n   3.0 Search Banner Setting\n------------------------------- */\n\n/* 3.1 Search Banner Element Setting */\n\n.search-banner {\n    padding: 60px 0;\n}\n.search-banner h1 {\n    color: #fff;\n    font-size: 36px;\n    text-align: center;\n    margin: 0 0 15px;\n    font-weight: 600;\n}\n.search-banner p {\n    margin-bottom: 0;\n    color: rgba(255,255,255,0.8);\n}\n.search-banner .container {\n    width: 640px;\n}\n.search-banner .form-control {\n    padding-left: 20px;\n    padding-right: 20px;\n    font-size: 16px;\n    border: none;\n    -webkit-border-radius: 6px;\n    -moz-border-radius: 6px;\n    border-radius: 6px;\n}\n.search-banner .form-group {\n    position: relative;\n}\n.search-banner .btn {\n    background: #fff;\n    color: #242a30;\n    -webkit-border-radius: 6px;\n    -moz-border-radius: 6px;\n    border-radius: 6px;\n}\n.search-banner p {\n    font-size: 16px;\n    color: #fff;\n    text-align: center;\n    font-weight: 300;\n}\n\n\n/* 3.2 Search Banner Popular Tags Setting */\n\n.popular-tags {\n    list-style-type: none;\n    margin: 0;\n    padding: 0;\n}\n.popular-tags > li {\n    display: inline-block;\n    margin-right: 3px;\n    margin-bottom: 5px;\n}\n.popular-tags > li > a {\n    padding: 3px 10px;\n    border-radius: 40px;\n    border: 2px solid #ccc;\n    color: #fff;\n    display: inline-block;\n}\n.popular-tags > li > a:hover,\n.popular-tags > li > a:focus {\n    text-decoration: none;\n    color: #fff;\n    border-color: #fff;\n}\n.popular-tags > li > a .fa {\n    font-size: 6px;\n    margin-right: 3px;\n    position: relative;\n    top: -2px;\n    color: #fff !important;\n}\n\n\n\n/* -------------------------------\n   4.0 Content Setting\n------------------------------- */\n\n/* 4.1 Content Element Setting */\n\n.content {\n    padding: 30px 0 60px;\n}\n\n\n/* 4.2 Content Has Background Setting */\n\n.has-bg,\n.has-bg .container {\n    position: relative;\n    color: #fff;\n}\n.has-bg .bg-cover,\n.has-bg .bg-cover:before {\n    position: absolute;\n    top: 0;\n    left: 0;\n    right: 0;\n    bottom: 0;\n    overflow: hidden;\n    height: 300px !important;\n}\n.has-bg .bg-cover:before {\n    content: '';\n    background: url('images/transparent/black-0.4.png');\n}\n.has-bg .bg-cover img {\n    max-width: 100%;\n    min-height: 100%;\n}\n\n\n/* 4.3 Section Container Setting */\n\n.section-container {\n    margin-bottom: 30px;\n}\n\n\n/* 4.4 Breadcrumb Setting */\n\n.breadcrumb {\n    background: #e2e7eb;\n    color: #242a30;\n    font-weight: bold;\n}\n.breadcrumb > li a {\n    color: #242a30;\n}\n.breadcrumb > li + li:before {\n    font-weight: normal;\n}\n\n\n/* 4.5 Page Title Setting */\n\n.page-title {\n    padding: 30px 0;\n}\n.page-title .breadcrumb {\n    background: none;\n    padding: 0;\n    font-weight: normal;\n    margin-bottom: 10px;\n}\n.page-title.has-bg .breadcrumb {\n    color: #fff;\n}\n.page-title.has-bg .breadcrumb > li a {\n    color: #ccc;\n}\n.page-title h1 {\n    font-size: 28px;\n    margin: 0;\n}\n.page-title h5 {\n    font-size: 12px;\n    font-weight: bold;\n    color: #fff;\n}\n\n\n\n/* -------------------------------\n   5.0 Forum Setting\n------------------------------- */\n\n/* 5.1 Panel Forum Setting */\n\n.panel.panel-forum {\n    border: 1px solid #e2e7eb;\n    box-shadow: 10px ghostwhite !important;\n}\n.panel.panel-forum .panel-heading {\n    background: #e2e7eb;\n}\n\n\n/* 5.2 Forum List Setting */\n\n.forum-list {\n    list-style-type: none;\n    margin: 0;\n    padding: 0;\n}\n.forum-list > li {\n    padding: 15px;\n}\n.forum-list > li:before,\n.forum-list > li:after {\n    content: '';\n    display: table;\n    clear: both;\n}\n.forum-list > li + li {\n    border-top: 2px solid #e2e7eb;\n}\n.forum-list .media {\n    font-size: 28px;\n    float: left;\n    width: 64px;\n    text-align: center;\n    color: rgba(0,0,0,0.4);\n    line-height: 64px;\n}\n.forum-list .media img {\n    max-width: 100%;\n    display: block;\n}\n.forum-list .media .fa {\n    display: block;\n    line-height: 64px;\n    background: #00acac;\n}\n.forum-list .info-container {\n    margin-left: 79px;\n    padding-top: 5px;\n}\n.forum-list .info-container > div {\n    float: left;\n}\n.forum-list .info-container .info {\n    width: 50%;\n}\n.forum-list .info-container .total-count {\n    width: 20%;\n    text-align: center;\n}\n.forum-list .info-container .total-count .divider {\n    margin: 0 8px;\n}\n.forum-list .info-container .latest-post {\n    width: 30%;\n}\n.forum-list .info-container .info .title {\n    font-size: 16px;\n    margin: 0 0 5px;\n    font-weight: 600;\n}\n.forum-list .info-container .info .title a {\n    color: #242a30;\n}\n.forum-list .info-container .latest-post .title {\n    margin: 0 0 4px;\n    font-size: 12px;\n}\n.forum-list .info-container .latest-post .title a {\n    color: #242a30;\n}\n.forum-list .info-container .latest-post .time {\n    font-size: 12px;\n}\n.forum-list .info-container .desc {\n    margin-bottom: 0;\n    font-size: 12px;\n    color: #666;\n    line-height: 16px;\n}\n.total-post {\n    color: #242a30;\n    font-weight: bold;\n}\n\n\n/* 5.3 Forum Topic List Setting */\n\n.forum-list.forum-topic-list .info-container {\n    position: relative;\n}\n.forum-list.forum-topic-list .info-start-end {\n    list-style-type: none;\n    margin: 0;\n    padding: 0;\n    line-height: 20px;\n}\n.forum-list.forum-topic-list .info-container .info {\n    width: auto;\n    float: none;\n    padding-right: 100px;\n}\n.forum-list.forum-topic-list .info-container .date-replies {\n    position: absolute;\n    right: 0;\n    top: 5px;\n    text-align: center;\n    width: 80px;\n}\n.forum-list.forum-topic-list .info-container .date-replies .time {\n    font-size: 11px;\n    line-height: 11px;\n    margin-bottom: 7px;\n}\n.forum-list.forum-topic-list .info-container .date-replies .replies {\n    background: #e2e7eb;\n    padding: 5px 10px;\n    border-radius: 4px;\n}\n.forum-list.forum-topic-list .info-container .date-replies .replies .total {\n    font-size: 16px;\n    color: #242a30;\n    line-height: 18px;\n    margin-bottom: 2px;\n}\n.forum-list.forum-topic-list .info-container .date-replies .replies .text {\n    font-size: 10px;\n    line-height: 12px;\n    font-weight: normal;\n    color: #999;\n    margin-bottom: 2px;\n}\n\n\n/* -------------------------------\n   6.0 Footer Setting\n------------------------------- */\n\n/* 6.1 Footer Element Setting */\n\n.footer {\n    margin: 0;\n    border: none;\n    padding: 60px 0 30px;\n    background: #242a30;\n    box-shadow: inset 0 100px 80px -80px rgba(0,0,0,.7);\n    -webkit-box-shadow: inset 0 100px 80px -80px rgba(0,0,0,.7);\n}\n.footer h4 {\n    font-weight: 600;\n    color: #CFD0D1;\n    font-size: 14px;\n    letter-spacing: 0.5px;\n    margin: 0 0 20px;\n}\n.footer p {\n    color: #A6A9AB;\n    font-size: 12px;\n    line-height: 20px;\n    margin-bottom: 0;\n}\n.footer .latest-post {\n    list-style-type: none;\n    margin: 0;\n    padding: 0;\n}\n.footer .latest-post > li + li {\n    margin-top: 10px;\n}\n.footer .latest-post > li .title,\n.footer .latest-post > li .title a {\n    margin: 0;\n    font-weight: normal;\n    font-size: 13px;\n    line-height: 20px;\n    color: #CFD0D1;\n}\n.footer .latest-post > li .time {\n    font-size: 11px;\n}\n.footer .new-user {\n    list-style-type: none;\n    margin: -5px;\n    padding: 0;\n}\n.footer .new-user > li {\n    float: left;\n    width: 10%;\n    padding: 5px;\n}\n.footer .new-user > li img {\n    max-width: 100%;\n}\n\n\n/* 6.2 Footer Copyright Setting */\n\n.footer-copyright {\n    padding: 20px 0;\n    color: #A6A9AB;\n    background: #1d2226;\n}\n\n/* WA BUTTON */\n .wabutton{\n  width:50px;\n  height:50px;\n  position:fixed;\n  bottom:20px;\n  right:20px;\n  z-index:100;\n}\n\n\n/* -------------------------------\n   7.0 Pace Loader Setting\n------------------------------- */\n\n/* 7.1 Pace Loader Element Setting */\n\n.pace-inactive {\n    opacity: 0;\n    filter: alpha(opacity=0);\n}\n.pace {\n    background: #2d353c;\n    position: fixed;\n    top: 0;\n    left: 0;\n    right: 0;\n    -webkit-transition: opacity 1s;\n    -moz-transition: opacity 1s;\n    -o-transition: opacity 1s;\n    transition: opacity 1s;\n    z-index: 1050;\n}\n.pace-progress {\n    position: fixed;\n    top: 0;\n    left: 0;\n    right: 0;\n    text-align: center;\n    height: 3px;\n    background: #00acac;\n    -webkit-transition: width 1s;\n    -moz-transition: width 1s;\n    -o-transition: width 1s;\n    transition: width 1s;\n    z-index: 2000;\n}\n.pace:before {\n    content: '';\n    position: fixed;\n    top: 0;\n    right: 0;\n    left: 0;\n    height: 3px;\n}\n.pace .pace-activity {\n    display: block;\n    position: fixed;\n    z-index: 2000;\n    top: 20px;\n    right: 20px;\n    width: 20px;\n    height: 20px;\n    border: solid 2px transparent;\n    border-top-color: #00acac;\n    border-left-color: #00acac;\n    border-radius: 10px;\n    -webkit-animation: pace-spinner 400ms linear infinite;\n    -moz-animation: pace-spinner 400ms linear infinite;\n    -ms-animation: pace-spinner 400ms linear infinite;\n    -o-animation: pace-spinner 400ms linear infinite;\n    animation: pace-spinner 400ms linear infinite;\n}\n@media (max-width: 767px) {\n    .pace .pace-activity {\n        top: 80px;\n    }\n}\n@-webkit-keyframes pace-spinner {\n  0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@-moz-keyframes pace-spinner {\n  0% { -moz-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -moz-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@-o-keyframes pace-spinner {\n  0% { -o-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -o-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@-ms-keyframes pace-spinner {\n  0% { -ms-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -ms-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@keyframes pace-spinner {\n  0% { transform: rotate(0deg); transform: rotate(0deg); }\n  100% { transform: rotate(360deg); transform: rotate(360deg); }\n}\n\n\n\n/* -------------------------------\n   8.0 Predefined CSS Setting\n------------------------------- */\n\n/* 8.1 Predefined Classes */\n\n.row { margin: 0 -10px; }\n.row > [class*=\"col-\"] {  padding: 0 10px; }\n\n.row.row-space-0 { margin: 0; }\n.row.row-space-2 { margin: 0 -1px; }\n.row.row-space-4 { margin: 0 -2px; }\n.row.row-space-6 { margin: 0 -3px; }\n.row.row-space-8 { margin: 0 -4px; }\n.row.row-space-10 { margin: 0 -5px; }\n.row.row-space-12 { margin: 0 -6px; }\n.row.row-space-14 { margin: 0 -7px; }\n.row.row-space-16 { margin: 0 -8px; }\n.row.row-space-18 { margin: 0 -9px; }\n.row.row-space-18 { margin: 0 -10px; }\n.row.row-space-22 { margin: 0 -11px; }\n.row.row-space-24 { margin: 0 -12px; }\n.row.row-space-26 { margin: 0 -13px; }\n.row.row-space-28 { margin: 0 -14px; }\n.row.row-space-30 { margin: 0 -15px; }\n.row.row-space-0 > [class*=\"col-\"] {  padding: 0; }\n.row.row-space-2 > [class*=\"col-\"] {  padding: 0 1px; }\n.row.row-space-4 > [class*=\"col-\"] {  padding: 0 2px; }\n.row.row-space-6 > [class*=\"col-\"] {  padding: 0 3px; }\n.row.row-space-8 > [class*=\"col-\"] {  padding: 0 4px; }\n.row.row-space-10 > [class*=\"col-\"] {  padding: 0 5px; }\n.row.row-space-12 > [class*=\"col-\"] {  padding: 0 6px; }\n.row.row-space-14 > [class*=\"col-\"] {  padding: 0 7px; }\n.row.row-space-16 > [class*=\"col-\"] {  padding: 0 8px; }\n.row.row-space-18 > [class*=\"col-\"] {  padding: 0 9px; }\n.row.row-space-20 > [class*=\"col-\"] {  padding: 0 10px; }\n.row.row-space-22 > [class*=\"col-\"] {  padding: 0 11px; }\n.row.row-space-24 > [class*=\"col-\"] {  padding: 0 12px; }\n.row.row-space-26 > [class*=\"col-\"] {  padding: 0 13px; }\n.row.row-space-28 > [class*=\"col-\"] {  padding: 0 14px; }\n.row.row-space-30 > [class*=\"col-\"] {  padding: 0 15px; }\n\n.semi-bold { font-weight: 600; }\n\n.overflow-auto { overflow: auto !important; }\n.overflow-hidden { overflow: hidden !important; }\n.overflow-visible { overflow: visible !important; }\n.overflow-scroll { overflow: scroll !important; }\n.overflow-x-hidden { overflow-x: hidden !important; }\n.overflow-x-visible { overflow-x: visible !important; }\n.overflow-x-scroll { overflow-x: scroll !important; }\n.overflow-y-hidden { overflow-y: hidden !important; }\n.overflow-y-visible { overflow-y: visible !important; }\n.overflow-y-scroll { overflow-y: scroll !important; }\n\n.m-auto { margin: 0 auto !important; }\n.m-0 { margin: 0px !important; }\n.m-1 { margin: 1px !important; }\n.m-2 { margin: 2px !important; }\n.m-3 { margin: 3px !important; }\n.m-4 { margin: 4px !important; }\n.m-5 { margin: 5px !important; }\n.m-10 { margin: 10px !important; }\n.m-15 { margin: 15px !important; }\n.m-20 { margin: 20px !important; }\n.m-25 { margin: 25px !important; }\n.m-30 { margin: 30px !important; }\n.m-35 { margin: 35px !important; }\n.m-40 { margin: 40px !important; }\n\n.m-t-0 { margin-top: 0px !important; }\n.m-t-1 { margin-top: 1px !important; }\n.m-t-2 { margin-top: 2px !important; }\n.m-t-3 { margin-top: 3px !important; }\n.m-t-4 { margin-top: 4px !important; }\n.m-t-5 { margin-top: 5px !important; }\n.m-t-10 { margin-top: 10px !important; }\n.m-t-15 { margin-top: 15px !important; }\n.m-t-20 { margin-top: 20px !important; }\n.m-t-25 { margin-top: 25px !important; }\n.m-t-30 { margin-top: 30px !important; }\n.m-t-35 { margin-top: 35px !important; }\n.m-t-40 { margin-top: 40px !important; }\n\n.m-r-0 { margin-right: 0px !important; }\n.m-r-1 { margin-right: 1px !important; }\n.m-r-2 { margin-right: 2px !important; }\n.m-r-3 { margin-right: 3px !important; }\n.m-r-4 { margin-right: 4px !important; }\n.m-r-5 { margin-right: 5px !important; }\n.m-r-10 { margin-right: 10px !important; }\n.m-r-15 { margin-right: 15px !important; }\n.m-r-20 { margin-right: 20px !important; }\n.m-r-25 { margin-right: 25px !important; }\n.m-r-30 { margin-right: 30px !important; }\n.m-r-35 { margin-right: 35px !important; }\n.m-r-40 { margin-right: 40px !important; }\n\n.m-b-0 { margin-bottom: 0px !important; }\n.m-b-1 { margin-bottom: 1px !important; }\n.m-b-2 { margin-bottom: 2px !important; }\n.m-b-3 { margin-bottom: 3px !important; }\n.m-b-4 { margin-bottom: 4px !important; }\n.m-b-5 { margin-bottom: 5px !important; }\n.m-b-10 { margin-bottom: 10px !important; }\n.m-b-15 { margin-bottom: 15px !important; }\n.m-b-20 { margin-bottom: 20px !important; }\n.m-b-25 { margin-bottom: 25px !important; }\n.m-b-30 { margin-bottom: 30px !important; }\n.m-b-35 { margin-bottom: 35px !important; }\n.m-b-40 { margin-bottom: 40px !important; }\n\n.m-l-0 { margin-left: 0px !important; }\n.m-l-1 { margin-left: 1px !important; }\n.m-l-2 { margin-left: 2px !important; }\n.m-l-3 { margin-left: 3px !important; }\n.m-l-4 { margin-left: 4px !important; }\n.m-l-5 { margin-left: 5px !important; }\n.m-l-10 { margin-left: 10px !important; }\n.m-l-15 { margin-left: 15px !important; }\n.m-l-20 { margin-left: 20px !important; }\n.m-l-25 { margin-left: 25px !important; }\n.m-l-30 { margin-left: 30px !important; }\n.m-l-35 { margin-left: 35px !important; }\n.m-l-40 { margin-left: 40px !important; }\n\n.p-0 { padding: 0px !important; }\n.p-1 { padding: 1px !important; }\n.p-2 { padding: 2px !important; }\n.p-3 { padding: 3px !important; }\n.p-4 { padding: 4px !important; }\n.p-5 { padding: 5px !important; }\n.p-10 { padding: 10px !important; }\n.p-15, .wrapper { padding: 15px !important; }\n.p-20 { padding: 20px !important; }\n.p-25 { padding: 25px !important; }\n.p-30 { padding: 30px !important; }\n.p-35 { padding: 35px !important; }\n.p-40 { padding: 40px !important; }\n\n.p-t-0 { padding-top: 0px !important; }\n.p-t-1 { padding-top: 1px !important; }\n.p-t-2 { padding-top: 2px !important; }\n.p-t-3 { padding-top: 3px !important; }\n.p-t-4 { padding-top: 4px !important; }\n.p-t-5 { padding-top: 5px !important; }\n.p-t-10 { padding-top: 10px !important; }\n.p-t-15 { padding-top: 15px !important; }\n.p-t-20 { padding-top: 20px !important; }\n.p-t-25 { padding-top: 25px !important; }\n.p-t-30 { padding-top: 30px !important; }\n.p-t-35 { padding-top: 35px !important; }\n.p-t-40 { padding-top: 40px !important; }\n\n.p-r-0 { padding-right: 0px !important; }\n.p-r-1 { padding-right: 1px !important; }\n.p-r-2 { padding-right: 2px !important; }\n.p-r-3 { padding-right: 3px !important; }\n.p-r-4 { padding-right: 4px !important; }\n.p-r-5 { padding-right: 5px !important; }\n.p-r-10 { padding-right: 10px !important; }\n.p-r-15 { padding-right: 15px !important; }\n.p-r-20 { padding-right: 20px !important; }\n.p-r-25 { padding-right: 25px !important; }\n.p-r-30 { padding-right: 30px !important; }\n.p-r-35 { padding-right: 35px !important; }\n.p-r-40 { padding-right: 40px !important; }\n\n.p-b-0 { padding-bottom: 0px !important; }\n.p-b-1 { padding-bottom: 1px !important; }\n.p-b-2 { padding-bottom: 2px !important; }\n.p-b-3 { padding-bottom: 3px !important; }\n.p-b-4 { padding-bottom: 4px !important; }\n.p-b-5 { padding-bottom: 5px !important; }\n.p-b-10 { padding-bottom: 10px !important; }\n.p-b-15 { padding-bottom: 15px !important; }\n.p-b-20 { padding-bottom: 20px !important; }\n.p-b-25 { padding-bottom: 25px !important; }\n.p-b-30 { padding-bottom: 30px !important; }\n.p-b-35 { padding-bottom: 35px !important; }\n.p-b-40 { padding-bottom: 40px !important; }\n\n.p-l-0 { padding-left: 0px !important; }\n.p-l-1 { padding-left: 1px !important; }\n.p-l-2 { padding-left: 2px !important; }\n.p-l-3 { padding-left: 3px !important; }\n.p-l-4 { padding-left: 4px !important; }\n.p-l-5 { padding-left: 5px !important; }\n.p-l-10 { padding-left: 10px !important; }\n.p-l-15 { padding-left: 15px !important; }\n.p-l-20 { padding-left: 20px !important; }\n.p-l-25 { padding-left: 25px !important; }\n.p-l-30 { padding-left: 30px !important; }\n.p-l-35 { padding-left: 35px !important; }\n.p-l-40 { padding-left: 40px !important; }\n\n.f-s-8 { font-size: 8px !important; }\n.f-s-9 { font-size: 9px !important; }\n.f-s-10 { font-size: 10px !important; }\n.f-s-11 { font-size: 11px !important; }\n.f-s-12 { font-size: 12px !important; }\n.f-s-13 { font-size: 13px !important; }\n.f-s-14 { font-size: 14px !important; }\n.f-s-15 { font-size: 15px !important; }\n.f-s-16 { font-size: 16px !important; }\n.f-s-17 { font-size: 17px !important; }\n.f-s-18 { font-size: 18px !important; }\n.f-s-19 { font-size: 19px !important; }\n.f-s-20 { font-size: 20px !important; }\n\n.text-center { text-align: center !important; }\n.text-left { text-align: left !important; }\n.text-right { text-align: right !important; }\n\n.pull-left { float: left !important; }\n.pull-right { float: right !important; }\n.pull-none { float: none !important; }\n\n.f-w-100 { font-weight: 100 !important; }\n.f-w-200 { font-weight: 200 !important; }\n.f-w-300 { font-weight: 300 !important; }\n.f-w-400 { font-weight: 400 !important; }\n.f-w-500 { font-weight: 500 !important; }\n.f-w-600 { font-weight: 600 !important; }\n.f-w-700 { font-weight: 700 !important; }\n\n.table-valign-middle th,\n.table-valign-middle td {\n    vertical-align: middle !important;\n}\n.table-th-valign-middle th,\n.table-td-valign-middle td {\n    vertical-align: middle !important;\n}\n.table-valign-top th,\n.table-valign-top td {\n    vertical-align: top !important;\n}\n.table-th-valign-top th,\n.table-td-valign-top td {\n    vertical-align: top !important;\n}\n.table-valign-bottom th,\n.table-valign-bottom td {\n    vertical-align: bottom !important;\n}\n.table-th-valign-bottom th,\n.table-td-valign-bottom td {\n    vertical-align: bottom !important;\n}\n.vertical-box {\n    display: table;\n    table-layout: fixed;\n    border-spacing: 0;\n    height: 100%;\n    width: 100%;\n}\n.vertical-box-column {\n    display: table-cell;\n    vertical-align: top;\n    height: 100%;\n}\n.vertical-box-row {\n    display: table-row;\n    height: 100%;\n}\n.vertical-box-row > .vertical-box-cell {\n    position: relative;\n    height: 100%;\n    width: 100%;\n    float: none;\n}\n.vertical-box-row > .vertical-box-cell > .vertical-box-inner-cell {\n    position: absolute;\n    top: 0;\n    bottom: 0;\n    left: 0;\n    right: 0;\n    overflow: hidden;\n}\n.panel-expand .vertical-box .vertical-box-column {\n    display: table-cell;\n}\n.page-content-full-height .content {\n    position: absolute;\n    left: 0;\n    top: 54px;\n    right: 0;\n    bottom: -1px;\n    -webkit-transform: translateZ(0);\n}\n.no-rounded-corner {\n    -webkit-border-radius: 0 !important;\n    -moz-border-radius: 0 !important;\n    border-radius: 0 !important;\n}\n.rounded-corner {\n    -webkit-border-radius: 50% !important;\n    -moz-border-radius: 50% !important;\n    border-radius: 50% !important;\n}\n.no-border { border: 0 !important; }\n.border-top-1 { border-top: 1px solid #eee !important; }\n.border-right-1 { border-right: 1px solid #eee !important; }\n.border-bottom-1 { border-bottom: 1px solid #eee !important; }\n.border-left-1 { border-left: 1px solid #eee !important; }\n.no-box-shadow {\n    -webkit-box-shadow: none !important;\n    box-shadow: none !important;\n}\n.text-inverse { color: #2d353c !important; }\na.text-inverse:hover,\na.text-inverse:focus {\n    color: #575d63 !important;\n}\n.text-success { color: #00acac !important; }\na.text-success:hover,\na.text-success:focus {\n    color: #33bdbd !important;\n}\n.text-info { color: #49b6d6 !important; }\na.text-info:hover,\na.text-info:focus {\n    color: #6dc5de !important;\n}\n.text-primary { color: #348fe2 !important; }\na.text-primary:hover,\na.text-primary:focus {\n    color: #5da5e8 !important;\n}\n.text-warning { color: #f59c1a !important; }\na.text-warning:hover,\na.text-warning:focus {\n    color: #f7b048 !important;\n}\n.text-danger { color: #ff5b57 !important; }\na.text-danger:hover,\na.text-danger:focus {\n    color: #ff7c79 !important;\n}\n.text-white { color: #fff !important; }\na.text-white:hover,\na.text-white:focus {\n    color: #f0f3f4 !important;\n}\n\n.bg-white { background: #ffffff !important; }\n.bg-silver-lighter { background: #f4f6f7 !important; }\n.bg-silver { background: #f0f3f4 !important; }\n.bg-silver-darker { background: #b4b6b7 !important; }\n\n.bg-black { background: #2d353c !important; }\n.bg-black-darker { background: #242a30 !important; }\n.bg-black-lighter { background: #575d63 !important; }\n\n.bg-grey { background: #b6c2c9 !important; }\n.bg-grey-darker { background: #929ba1 !important; }\n.bg-grey-lighter { background: #c5ced4 !important; }\n\n.bg-red { background: #ff5b57 !important; }\n.bg-red-darker { background: #cc4946 !important; }\n.bg-red-lighter { background: #ff7c79 !important; }\n\n.bg-orange { background: #f59c1a !important; }\n.bg-orange-darker { background: #c47d15 !important; }\n.bg-orange-lighter { background: #f7b048 !important; }\n\n.bg-yellow { background: #e3fa3e !important; }\n.bg-yellow-darker { background: #b6c832 !important; }\n.bg-yellow-lighter { background: #e9fb65 !important; }\n\n.bg-green { background: #00acac !important; }\n.bg-green-darker { background: #008a8a !important; }\n.bg-green-lighter { background: #33bdbd !important; }\n\n.bg-blue { background: #348fe2 !important; }\n.bg-blue-darker { background: #2a72b5 !important; }\n.bg-blue-lighter { background: #5da5e8 !important; }\n\n.bg-aqua { background: #49b6d6 !important; }\n.bg-aqua-darker { background: #3a92ab !important; }\n.bg-aqua-lighter { background: #6dc5de !important; }\n\n.bg-purple { background: #727cb6 !important; }\n.bg-purple-darker { background: #5b6392 !important; }\n.bg-purple-lighter { background: #8e96c5 !important; }\n\n.no-bg { background: none !important; }\n\n.height-xs { height: 150px !important; }\n.height-sm { height: 300px !important; }\n.height-md { height: 450px !important; }\n.height-lg { height: 600px !important; }\n.height-full { height: 100% !important; }\n.height-50 { height: 50px !important; }\n.height-100 { height: 100px !important; }\n.height-150 { height: 150px !important; }\n.height-200 { height: 200px !important; }\n.height-250 { height: 250px !important; }\n.height-300 { height: 300px !important; }\n.height-350 { height: 350px !important; }\n.height-400 { height: 400px !important; }\n.height-450 { height: 450px !important; }\n.height-500 { height: 500px !important; }\n.height-550 { height: 550px !important; }\n.height-600 { height: 600px !important; }\n\n.width-xs { width: 150px !important; }\n.width-sm { width: 300px !important; }\n.width-md { width: 450px !important; }\n.width-lg { width: 600px !important; }\n.width-full { width: 100% !important; }\n.width-50 { width: 50px !important; }\n.width-100 { width: 100px !important; }\n.width-150 { width: 150px !important; }\n.width-200 { width: 200px !important; }\n.width-250 { width: 250px !important; }\n.width-300 { width: 300px !important; }\n.width-350 { width: 350px !important; }\n.width-400 { width: 400px !important; }\n.width-450 { width: 450px !important; }\n.width-500 { width: 500px !important; }\n.width-550 { width: 550px !important; }\n.width-600 { width: 600px !important; }\n\n.animated {\n    -webkit-animation-duration: .6s;\n    animation-duration: .6s;\n    -webkit-animation-fill-mode: both;\n    animation-fill-mode: both;\n}\n.fade {\n    opacity: 0;\n    -webkit-transition: opacity .3s linear;\n    transition: opacity .3s linear;\n}\n.text-ellipsis {\n    white-space: nowrap !important;\n    overflow: hidden !important;\n    text-overflow: ellipsis !important;\n}\n.underline {\n    border-bottom: 1px solid #e2e7eb !important;\n}\n\n\n\n/* -------------------------------\n   9.0 Component Setting\n------------------------------- */\n\n/* 9.1 Component - Form Elements */\n\n.form-control {\n    border: 2px solid #ccd0d4;\n    -webkit-box-shadow: none;\n    box-shadow: none;\n    font-size: 12px;\n    border-radius: 3px;\n    -webkit-border-radius: 3px;\n    -moz-border-radius: 3px;\n}\n.form-control.input-white {\n    background: #fff;\n    border-color: #fff;\n}\n.form-control.input-white:focus {\n    box-shadow: none;\n    -webkit-box-shadow: none;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n    background: #e5e9ed;\n    opacity: 0.6;\n    filter: alpha(opacity=60);\n}\n.form-control[disabled]:focus,\n.form-control[readonly]:focus,\nfieldset[disabled] .form-control:focus {\n    box-shadow: none;\n    -webkit-box-shadow: none;\n    border: 1px solid #ccd0d4;\n}\n.form-control:focus {\n    border-color: #9fa2a5;\n    -webkit-box-shadow: none;\n    box-shadow: none;\n}\n.form-control.input-inline {\n    display: inline;\n    width: auto;\n    padding: 0 7px;\n}\n.form-control.input-xs {\n    height: 20px;\n}\n.form-horizontal.form-bordered .form-group {\n    border-bottom: 1px solid #e2e7eb;\n    margin: 0;\n}\n.form-horizontal.form-bordered .form-group:last-child {\n    border-bottom: 0;\n}\n.form-horizontal.form-bordered .form-group > .control-label {\n    padding: 22px 15px 15px;\n}\n.form-horizontal.form-bordered .form-group > div {\n    padding: 15px;\n}\n.form-horizontal.form-bordered .form-group > div {\n    border-left: 1px solid #e2e7eb;\n}\n.form-horizontal.form-bordered .form-group > .control-label {\n    border-right: 1px solid #e2e7eb;\n    margin-right: -1px;\n}\n.form-horizontal.form-bordered .has-feedback .form-control-feedback {\n    top: 15px;\n}\nlabel {\n    font-weight: 500;\n}\n.has-success .form-control,\n.has-success .form-control:focus,\n.has-warning .form-control,\n.has-warning .form-control:focus,\n.has-error .form-control,\n.has-error .form-control:focus {\n    -webkit-box-shadow: none;\n    box-shadow: none;\n}\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success .form-control-feedback {\n    color: #00acac;\n}\n.has-success .form-control {\n    border-color: #00acac;\n}\n.has-success .form-control:focus {\n    border-color: #008a8a;\n}\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning .form-control-feedback {\n    color: #f59c1a;\n}\n.has-warning .form-control {\n    border-color: #f59c1a;\n}\n.has-warning .form-control:focus {\n    border-color: #c47d15;\n}\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error .form-control-feedback {\n    color: #ff5b57;\n}\n.has-error .form-control {\n    border-color: #ff5b57;\n}\n.has-error .form-control:focus {\n    border-color: #cc4946;\n}\n.form-control-feedback {\n    line-height: 34px;\n}\n\nselect.form-control {\n    border-color: #ccd0d4;\n}\nselect[multiple].form-control {\n    border-color: #ccd0d4;\n}\n.input-group-addon {\n    background: #e2e7eb;\n    border: none;\n}\nlegend {\n    padding-bottom: 3px;\n    border-bottom: 1px solid #e2e7eb;\n}\n\n\n/* 9.2 Component - Dropdown Menu */\n\n.dropdown-menu {\n    border: none;\n    -webkit-box-shadow: 0 2px 5px -1px rgba(0, 0, 0, 0.2);\n    box-shadow: 0 2px 5px -1px rgba(0, 0, 0, 0.2);\n    font-size: 12px;\n}\n.dropdown-menu > li > a {\n    padding: 5px 15px;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n    background: #edf0f5;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n    background: #348fe2;\n}\n.dropdown-menu .divider {\n    border-color: #e2e7eb;\n}\n.dropdown-menu.media-list {\n    max-width: 280px;\n    padding: 0;\n}\n.dropdown-menu.media-list p {\n    text-overflow: ellipsis;\n    overflow: hidden;\n    margin-bottom: 4px;\n    max-width: 200px;\n}\n.dropdown-menu.media-list .dropdown-header {\n    padding: 10px 20px !important;\n    background: #fafafa;\n}\n.dropdown-menu.media-list > .media {\n    margin-top: 0;\n    border-top: 1px solid #e2e7eb;\n    border-bottom: 1px solid #e2e7eb;\n    margin-bottom: -1px;\n}\n.dropdown-menu.media-list > .media > a {\n    display: block;\n    padding: 10px 20px !important;\n}\n.dropdown-menu.media-list > .media .media-left {\n    padding-right: 10px;\n}\n.dropdown-menu.media-list > .media .media-right {\n    padding-left: 10px;\n}\n.dropdown-menu.media-list > .media .media-object {\n    height: 36px;\n    width: 36px;\n    line-height: 36px;\n    font-size: 14px;\n    color: #fff;\n    text-align: center;\n    -webkit-border-radius: 50%;\n    -moz-border-radius: 50%;\n    border-radius: 50%;\n}\n.dropdown-footer {\n    padding: 10px 20px;\n}\n.dropdown-menu > li.dropdown-footer > a {\n    padding: 0 !important;\n    display: inline !important;\n}\n.dropdown-menu > li.dropdown-footer > a:hover,\n.dropdown-menu > li.dropdown-footer > a:focus {\n    background: none !important;\n    text-decoration: underline !important;\n}\n\n\n/* 9.3 Component - Tooltip */\n\n.tooltip-inner {\n    padding: 4px 10px;\n    -webkit-border-radius: 3px;\n    -moz-border-radius: 3px;\n    border-radius: 3px;\n}\n\n\n/* 9.4 Component - Alert */\n\n.alert {\n    border: none;\n}\n.alert.alert-success {\n    background: #7cdda7;\n}\n.alert.alert-info {\n    background: #93cfe5;\n}\n.alert.alert-danger {\n    background: #f8b2b2;\n}\n.alert.alert-warning {\n    background: #ffead0;\n}\n\n\n/* 9.5 Component - Note Setting */\n\n.note {\n    margin-bottom: 20px;\n    padding: 15px;\n    border-left: 3px solid;\n}\n.note.note-success {\n    border-color: #4a8564;\n    background: #b0ebca;\n    color: #3c763d;\n}\n.note.note-success h1,\n.note.note-success h2,\n.note.note-success h3,\n.note.note-success h4,\n.note.note-success h5,\n.note.note-success h6 {\n    color: #3c763d;\n}\n.note.note-danger {\n    border-color: #986e6e;\n    background: #fbd1d1;\n    color: #a94442;\n}\n.note.note-danger h1,\n.note.note-danger h2,\n.note.note-danger h3,\n.note.note-danger h4,\n.note.note-danger h5,\n.note.note-danger h6 {\n    color: #a94442;\n}\n.note.note-info {\n    border-color: #587c89;\n    background: #bee2ef;\n    color: #31708f;\n}\n.note.note-info h1,\n.note.note-info h2,\n.note.note-info h3,\n.note.note-info h4,\n.note.note-info h5,\n.note.note-info h6 {\n    color: #31708f;\n}\n.note.note-warning {\n    border-color: #9d9080;\n    background: #fff2e3;\n    color: #8a6d3b;\n}\n.note.note-warning h1,\n.note.note-warning h2,\n.note.note-warning h3,\n.note.note-warning h4,\n.note.note-warning h5,\n.note.note-warning h6 {\n    color: #8a6d3b;\n}\n\n\n/* 9.6 Component - Badge & Label Setting */\n\n.badge {\n    font-size: 75%;\n    line-height: 1.25;\n    font-weight: 600;\n}\n.label {\n    font-size: 75%;\n    font-weight: 600;\n}\n.badge.badge-square {\n    -webkit-border-radius: 0;\n    -moz-border-radius: 0;\n    border-radius: 0;\n}\n.badge.badge-default,\n.label.label-default {\n    background: #b6c2c9 ;\n}\n.badge.badge-danger,\n.label.label-danger {\n    background: #ff5b57 ;\n}\n.badge.badge-warning,\n.label.label-warning {\n    background: #f59c1a ;\n}\n.badge.badge-success,\n.label.label-success {\n    background: #00acac ;\n}\n.badge.badge-info,\n.label.label-info {\n    background: #49b6d6 ;\n}\n.badge.badge-primary,\n.label.label-primary {\n    background: #348fe2 ;\n}\n.badge.badge-inverse,\n.label.label-inverse {\n    background: #2d353c ;\n}\n\n\n/* 9.7 Component - Pagination & pager */\n\n.pager li > a,\n.pager li > span,\n.pagination > li > a,\n.pagination > li > span {\n    border-color: #e2e7eb;\n    color: #242a30;\n    border: none;\n    padding: 7px 9px;\n    font-weight: 600;\n    font-size: 12px;\n    color: #999;\n    -webkit-border-radius: 5px !important;\n    -moz-border-radius: 5px !important;\n    border-radius: 5px !important;\n}\n.pager.pager-without-border li > a,\n.pager.pager-without-border li > span,\n.pagination.pagination-without-border > li > a {\n    border-color: #fff;\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.pager > .disabled > span,\n.pager > .disabled > a {\n    opacity: 0.6;\n    filter: alpha(opacity=60);\n    border-color: #ddd;\n}\n.pagination > li > a,\n.pagination > li > span {\n    color: #242a30;\n    margin-left: 6px;\n}\n.pagination > li:first-child > a {\n    margin-left: 0;\n}\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n    font-size: 10px;\n    margin-left: 4px;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n    font-size: 14px;\n    margin-left: 6px;\n}\n.pager li > a:hover,\n.pager li > a:focus,\n.pager li > span:hover,\n.pager li > span:focus,\n.pagination > li > a:hover,\n.pagination > li > a:focus {\n    color: #242a30;\n    background: #e2e7eb;\n    border-color: #d8dde1;\n}\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus {\n    background: #e2e7eb !important;\n    color: #242a30;\n}\n.pagination > li.text > span,\n.pagination > li.text > span:hover,\n.pagination > li.text > span:focus {\n    background: none;\n    color: #999;\n    padding-left: 0;\n    padding-right: 0;\n}\n.pagination > li.active > a,\n.pagination > li.active > a:hover,\n.pagination > li.active > a:focus {\n    background: #e2e7eb !important;\n    color: #242a30;\n}\n.pagination > li.left > a,\n.pagination > li.right > a {\n    background: #242a30;\n    color: #fff;\n}\n.pagination > li.left > a:hover,\n.pagination > li.right > a:hover,\n.pagination > li.left > a:focus,\n.pagination > li.right > a:focus {\n    background: #00acac;\n}\n\n\n/* 9.8 Component - Progress bar */\n\n.progress {\n    -webkit-box-shadow: none;\n    box-shadow: none;\n    background: #e2e7eb;\n}\n.progress-xs {\n    height: 5px;\n}\n.progress-xs .progress-bar {\n    line-height: 5px;\n}\n.progress-sm {\n    height: 10px;\n}\n.progress-sm .progress-bar {\n    line-height: 10px;\n}\n.progress-lg {\n    height: 30px;\n}\n.progress-lg .progress-bar {\n    line-height: 30px;\n}\n.progress-bar {\n    background: #348fe2;\n    -webkit-box-shadow: none;\n    box-shadow: none;\n}\n.progress-bar.progress-bar-success {\n    background-color: #00acac;\n}\n.progress-bar.progress-bar-info {\n    background-color: #49b6d6;\n}\n.progress-bar.progress-bar-warning {\n    background-color: #f59c1a;\n}\n.progress-bar.progress-bar-danger {\n    background-color: #ff5b57;\n}\n.progress-bar.progress-bar-inverse {\n    background-color: #2d353c;\n}\n\n\n/* 9.9 Component - Nav Setting */\n\n.nav > li > a {\n    color: #6e7179;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n    color: #242a30;\n    background: #fafafa;\n}\n\n\n/* 9.10 Component - Nav Tabs */\n\n.nav-tabs,\n.nav-tabs > li > a,\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus,\n.nav-tabs.nav-justified > li > a,\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:focus {\n    border: none !important;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus,\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:focus {\n    color: #242a30;\n}\n.nav-tabs {\n    background: #c1ccd1;\n    -webkit-border-radius: 5px 5px 0 0;\n    -moz-border-radius: 5px 5px 0 0;\n    border-radius: 5px 5px 0 0;\n}\n.nav-tabs.nav-tabs-inverse {\n    background: #242a30;\n}\n.nav-tabs.nav-justified > li > a {\n    -webkit-border-radius: 3px 3px 0 0;\n    -moz-border-radius: 3px 3px 0 0;\n    border-radius: 3px 3px 0 0;\n}\n.nav-tabs.nav-tabs-inverse > li.active > a,\n.nav-tabs.nav-tabs-inverse > li.active > a:hover,\n.nav-tabs.nav-tabs-inverse > li.active > a:focus {\n    color: #242a30;\n    background: #fff;\n}\n.nav-tabs.nav-tabs-inverse > li > a:hover,\n.nav-tabs.nav-tabs-inverse > li > a:focus {\n    color: #fff;\n    background: none;\n}\n.nav-tabs > li,\n.nav-tabs.nav-justified > li {\n    margin-bottom: 0;\n}\n.nav-tabs > li > a {\n    margin-right: 5px;\n    line-height: 20px;\n}\n\n\n/* 9.11 Component - Nav Pills */\n\n.nav-pills {\n    margin-bottom: 10px;\n}\n.nav-pills > li + li {\n    margin-left: 5px;\n}\n.nav-pills > li > a {\n    -webkit-border-radius: 3px;\n    -moz-border-radius: 3px;\n    border-radius: 3px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n    background: #242a30;\n}\n\n.nav-stacked > li + li {\n    margin-left: 0;\n    margin-top: 5px;\n}\n\n\n/* 9.12 Component - Tab Content */\n\n.tab-content {\n    padding: 15px;\n    margin-bottom: 20px;\n    background: #fff;\n    -webkit-border-radius: 3px;\n    -moz-border-radius: 3px;\n    border-radius: 3px;\n}\n.nav-tabs + .tab-content {\n    -webkit-border-radius: 0 0 3px 3px;\n    -moz-border-radius: 0 0 3px 3px;\n    border-radius: 0 0 3px 3px;\n}\n\n\n/* 9.13 Component - Accordion Panel */\n\n.panel-title a {\n    display: block;\n}\n.panel-title > a:hover,\n.panel-title > a:focus {\n    text-decoration: none;\n}\n\n\n/* 9.14 Component - Button */\n\n.btn {\n    font-weight: 300;\n    -webkit-border-radius: 3px;\n    -moz-border-radius: 3px;\n    border-radius: 3px;\n}\n.btn:focus,\n.btn:active:focus,\n.btn.active:focus {\n    outline: none;\n}\n.btn-icon,\n.btn.btn-icon {\n    display: inline-block;\n    width: 28px;\n    height: 28px;\n    padding: 0;\n    border: none;\n    line-height: 28px;\n    text-align: center;\n    font-size: 14px;\n}\n.btn-circle,\n.btn.btn-circle {\n    -webkit-border-radius: 50%;\n    -moz-border-radius: 50%;\n    border-radius: 50%;\n}\n.btn-icon.btn-xs {\n    width: 16px;\n    height: 16px;\n    font-size: 8px;\n    line-height: 16px;\n}\n.btn-icon.btn-sm {\n    width: 22px;\n    height: 22px;\n    font-size: 11px;\n    line-height: 22px;\n}\n.btn-icon.btn-lg {\n    width: 34px;\n    height: 34px;\n    font-size: 17px;\n    line-height: 34px;\n}\n.btn-scroll-to-top {\n    position: fixed;\n    bottom: 20px;\n    right: 25px;\n    z-index: 1020;\n}\n.page-with-right-sidebar .btn-scroll-to-top {\n    left: 25px;\n    right: auto;\n}\n.btn > .pull-left,\n.btn > .pull-right {\n    line-height: 1.428571429;\n}\n.btn-block {\n    padding-left: 12px;\n    padding-right: 12px;\n}\n.btn:active,\n.btn.active {\n    -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.1);\n    box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.1);\n}\n\n\n/* 9.14.1 Component - Button - Default */\n\n.btn.btn-default {\n    color: #fff;\n    background: #b6c2c9;\n    border-color: #b6c2c9;\n}\n.btn-default:hover,\n.btn-default:focus,\n.btn-default:active,\n.btn-default.active,\n.open .dropdown-toggle.btn-default {\n    background: #929ba1;\n    border-color: #929ba1;\n}\n.btn-group .btn.btn-default:not(.active) + .btn.btn-default,\n.input-group-btn .btn.btn-default:not(.active) + .btn.btn-default {\n    border-left-color: #929ba1;\n}\n\n\n/* 9.14.2 Component - Button - White */\n\n.btn.btn-white {\n    font-weight: normal;\n    color: #242a30;\n    background: #fff;\n    border-color: #e2e7eb;\n}\n.btn.btn-white.btn-white-without-border {\n    border-color: #fff;\n}\n.btn.btn-white.btn-white-without-border.active,\n.btn.btn-white.btn-white-without-border.active:hover,\n.btn.btn-white.btn-white-without-border.active:focus {\n    border-color: #ddd;\n}\n.btn.btn-white.btn-white-without-border:hover,\n.btn.btn-white.btn-white-without-border:focus {\n    border-color: #e2e7eb;\n}\n.btn-white:hover,\n.btn-white:focus,\n.btn-white:active,\n.btn-white.active,\n.open .dropdown-toggle.btn-white {\n    background: #e2e7eb;\n    border-color: #d8dde1;\n}\n.btn-group .btn.btn-white:not(.active) + .btn.btn-white,\n.input-group-btn .btn.btn-white:not(.active) + .btn.btn-white {\n    border-left-color: #e2e7eb;\n}\n\n\n/* 9.14.3 Component - Button - Inverse */\n\n.btn.btn-inverse {\n    color: #fff;\n    background: #2d353c;\n    border-color: #2d353c;\n}\n.btn-inverse:hover,\n.btn-inverse:focus,\n.btn-inverse:active,\n.btn-inverse.active,\n.open .dropdown-toggle.btn-inverse {\n    background: #242a30;\n    border-color: #242a30;\n}\n.btn-group .btn.btn-inverse:not(.active) + .btn.btn-inverse,\n.input-group-btn .btn.btn-inverse:not(.active) + .btn.btn-inverse {\n    border-left-color: #242a30;\n}\n\n\n/* 9.14.4 Component - Button - Primary */\n\n.btn.btn-primary {\n    color: #fff;\n    background: #348fe2;\n    border-color: #348fe2;\n}\n.btn-primary:hover,\n.btn-primary:focus,\n.btn-primary:active,\n.btn-primary.active,\n.open .dropdown-toggle.btn-primary {\n    background: #2a72b5;\n    border-color: #2a72b5;\n}\n.btn-group .btn.btn-primary:not(.active) + .btn.btn-primary,\n.input-group-btn .btn.btn-primary:not(.active) + .btn.btn-primary {\n    border-left-color: #2a72b5;\n}\n\n\n/* 9.14.5 Component - Button - Success */\n\n.btn.btn-success {\n    color: #fff;\n    background: #00acac;\n    border-color: #00acac;\n}\n.btn.btn-success:hover,\n.btn.btn-success:focus,\n.btn.btn-success:active,\n.btn.btn-success.active,\n.open .dropdown-toggle.btn-success {\n    background: #008a8a;\n    border-color: #008a8a;\n}\n.btn-group .btn.btn-success:not(.active) + .btn.btn-success,\n.input-group-btn .btn.btn-success:not(.active) + .btn.btn-success {\n    border-left-color: #008a8a;\n}\n\n\n/* 9.14.6 Component - Button - Warning */\n\n.btn.btn-warning {\n    color: #fff;\n    background: #f59c1a;\n    border-color: #f59c1a;\n}\n.btn-warning:hover,\n.btn-warning:focus,\n.btn-warning:active,\n.btn-warning.active,\n.open .dropdown-toggle.btn-warning {\n    background: #c47d15;\n    border-color: #c47d15;\n}\n.btn-group .btn.btn-warning:not(.active) + .btn.btn-warning,\n.input-group-btn .btn.btn-warning:not(.active) + .btn.btn-warning {\n    border-left-color: #c47d15;\n}\n\n\n/* 9.14.7 Component - Button - Danger */\n\n.btn.btn-danger {\n    color: #fff;\n    background: #ff5b57;\n    border-color: #ff5b57;\n}\n.btn-danger:hover,\n.btn-danger:focus,\n.btn-danger:active,\n.btn-danger.active,\n.open .dropdown-toggle.btn-danger {\n    background: #cc4946;\n    border-color: #cc4946;\n}\n.btn-group .btn.btn-danger:not(.active) + .btn.btn-danger,\n.input-group-btn .btn.btn-danger:not(.active) + .btn.btn-danger {\n    border-left-color: #cc4946;\n}\n\n\n/* 9.14.8 Component - Button - Info */\n\n.btn.btn-info {\n    color: #fff;\n    background: #49b6d6;\n    border-color: #49b6d6;\n}\n.btn-info:hover,\n.btn-info:focus,\n.btn-info:active,\n.btn-info.active,\n.open .dropdown-toggle.btn-info {\n    background: #3a92ab;\n    border-color: #3a92ab;\n}\n.btn-group .btn.btn-info:not(.active) + .btn.btn-info,\n.input-group-btn .btn.btn-info:not(.active) + .btn.btn-info {\n    border-left-color: #3a92ab;\n}\n\n\n/* 9.15 Component - Panel */\n\n.panel {\n    border: 2px solid;\n    -webkit-box-shadow: none;\n    box-shadow: none;\n    -webkit-border-radius: 5px;\n    -moz-border-radius: 5px;\n    border-radius: 5px;\n}\n.panel.panel-no-rounded-corner .panel-heading,\n.panel.panel-no-rounded-corner .panel-body,\n.panel.panel-no-rounded-corner .panel-footer {\n    -webkit-border-radius: 0 !important;\n    -moz-border-radius: 0 !important;\n    border-radius: 0 !important;\n}\n.panel-heading {\n    padding: 12px 15px;\n    border: none;\n}\n.panel-heading + .table,\n.panel-heading + .slimScrollDiv {\n    border-top: 1px solid #e2e7eb;\n}\n.panel-heading-btn {\n    float: right;\n}\n.panel-heading-btn > a {\n    margin-left: 8px;\n}\n.panel-heading .btn-group .btn {\n    margin-top: -7px;\n}\n.panel-heading .btn-group .btn.btn-sm {\n    margin-top: -5px;\n}\n.panel-heading .btn-group .btn.btn-xs {\n    margin-top: -1px;\n}\n.panel-heading .label.pull-left,\n.panel-heading .label.pull-right {\n    line-height: 15px;\n}\n.panel-heading .progress.pull-right,\n.panel-heading .progress.pull-left {\n    width: 40%;\n    min-width: 120px;\n}\n.panel-heading + .alert {\n    margin-bottom: 0;\n    -webkit-border-radius: 0;\n    -moz-border-radius: 0;\n    border-radius: 0;\n}\n.panel-with-tabs.panel-default .panel-heading {\n    background: #c1ccd1;\n    color: #242a30;\n}\n.panel-heading .nav-tabs {\n    margin-top: -10px;\n    margin-right: -15px;\n}\n.panel-heading .nav-tabs > li > a {\n    padding: 10px 15px;\n    line-height: 20px;\n}\n.panel-title {\n    line-height: 20px;\n    font-size: 12px;\n    font-weight: bold;\n}\n.panel-title .accordion-toggle {\n    margin: -10px -15px;\n    padding: 10px 15px;\n}\n.panel-title .accordion-toggle.accordion-toggle-styled .fa:before {\n    content: '\\f056';\n}\n.panel-title .accordion-toggle.accordion-toggle-styled.collapsed .fa:before {\n    content: '\\f055';\n}\n.panel-title .pull-right {\n    line-height: 20px;\n}\n.panel-toolbar {\n    border-top: 1px solid #e2e7eb;\n    border-bottom: 1px solid #e2e7eb;\n    padding: 10px 15px;\n    background: #fff;\n}\n.panel-toolbar + .form-control {\n    margin: -1px 0 0;\n    border-right: none;\n    border-left: none;\n}\n.panel-group .panel {\n    -webkit-border-radius: 3px;\n    -moz-border-radius: 3px;\n    border-radius: 3px;\n}\n.form-control + .panel-footer {\n    border-top: none;\n}\n.panel-body {\n    padding: 15px;\n}\n.panel-body.no-border {\n    border: none !important;\n}\n.panel-body.panel-table,\n.panel-body.panel-form,\n.panel-body.no-padding,\n.panel-body.panel-full-width {\n    padding: 0 !important;\n}\n.panel-body.with-table > .table {\n    border: 0;\n    margin: 0;\n}\n.panel-body.with-table > .table tr:last-child th,\n.panel-body.with-table > .table tr:last-child td{\n    border-bottom: 0;\n}\n.panel-default > .panel-heading + .panel-collapse .panel-body {\n    border-top: 1px solid #e2e7eb;\n}\n.panel-footer {\n    background: #f3f5f7;\n    border-top: 2px solid #e2e7eb;\n}\n.panel .tab-content {\n    -webkit-border-radius: 0 0 3px 3px;\n    -moz-border-radius: 0 0 3px 3px;\n    border-radius: 0 0 3px 3px;\n}\n.panel-default > .panel-heading {\n    background: #fafafa;\n}\n.panel-inverse > .panel-heading,\n.panel-success > .panel-heading,\n.panel-warning > .panel-heading,\n.panel-danger > .panel-heading,\n.panel-primary > .panel-heading,\n.panel-info > .panel-heading {\n    color: #fff;\n}\n.panel-inverse > .panel-heading { background: #242a30; }\n.panel-success > .panel-heading { background: #008a8a; }\n.panel-warning > .panel-heading { background: #c47d15; }\n.panel-danger > .panel-heading { background: #cc4946; }\n.panel-primary > .panel-heading { background: #2a72b5; }\n.panel-info > .panel-heading { background: #3a92ab; }\n\n\n/* 9.16.Component - Panel - Panel Expand */\n\n.panel.panel-expand {\n    position: fixed;\n    top: 0;\n    left: 0;\n    right: 0;\n    bottom: 0;\n    margin: 0;\n    overflow: hidden;\n    z-index: 1080;\n}\n.panel-expand .height-xs,\n.panel-expand .height-sm,\n.panel-expand .height-md,\n.panel-expand .height-lg,\n.panel-expand .height-full {\n    height: 100% !important;\n}\n@keyframes panelExpand {\n    from { top: 50%; left: 50%; right: 50%; bottom: 50%; }\n    to { top: 0; left: 0; right: 0; bottom: 0; }\n}\n@-webkit-keyframes panelExpand {\n    from { top: 50%; left: 50%; right: 50%; bottom: 50%; }\n    to { top: 0; left: 0; right: 0; bottom: 0; }\n}\n.panel.panel-expand > .panel-heading .fa.fa-expand:before {\n    content: '\\f066';\n}\n.panel.panel-expand,\n.panel.panel-expand > .panel-heading,\n.panel.panel-expand > .panel-body {\n    -webkit-border-radius: 0;\n    -moz-border-radius: 0;\n    border-radius: 0;\n}\n.panel.panel-expand > .panel-body {\n    position: absolute;\n    right: 0;\n    left: 0;\n    bottom: 0;\n    top: 40px;\n    overflow-y: scroll;\n    z-index: 1020;\n}\n.panel.panel-expand > .panel-footer {\n    position: absolute;\n    left: 0;\n    right: 0;\n    bottom: 0;\n}\n\n\n/* 9.17 Component - Panel - Panel loading */\n\n.panel.panel-loading .panel-body {\n    position: relative;\n    z-index: 0;\n}\n.panel.panel-loading.panel-expand .panel-body {\n    position: absolute;\n}\n.panel.panel-loading .panel-body .panel-loader {\n    position: absolute;\n    left: 0;\n    right: 0;\n    top: 0;\n    bottom: 0;\n    background: #fff;\n    opacity: 0.9;\n    filter: alpha(opacity=90);\n    animation: fadeIn .2s;\n    -webkit-animation: fadeIn .2s;\n    z-index: 1020;\n    -webkit-border-radius: 0 0 4px 4px;\n    -moz-border-radius: 0 0 4px 4px;\n    border-radius: 0 0 4px 4px;\n}\n@keyframes fadeIn {\n    from { opacity: 0; }\n    to { opacity: 1; }\n}\n@-webkit-keyframes fadeIn {\n    from { opacity: 0; }\n    to { opacity: 1; }\n}\n\n\n/* 9.18 Component - Modal Setting */\n\n.modal-content {\n    border: none;\n    -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3);\n    box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3);\n    -webkit-border-radius: 3px;\n    -moz-border-radius: 3px;\n    border-radius: 3px;\n}\n.modal-header {\n    padding: 12px 15px;\n    border-bottom-color: #e2e7eb;\n}\n.modal-header .close {\n    margin-top: 2px;\n}\n.modal-body {\n    padding: 15px;\n}\n.modal-footer {\n    border-top-color: #e2e7eb;\n    padding: 14px 15px 15px;\n}\n\n.modal-message .modal-dialog {\n    width: 100%;\n}\n.modal-message .modal-content {\n    -webkit-border-radius: 0;\n    -moz-border-radius: 0;\n    border-radius: 0;\n}\n.modal-message .modal-header,\n.modal-message .modal-body,\n.modal-message .modal-footer {\n    width: 60%;\n    border: none;\n    margin: 0 auto;\n}\n.modal-backdrop.fade.in {\n    opacity: 0.5;\n    filter: alpha(opacity=50);\n}\n\n\n/* 9.19 Component - Media Object */\n\n.media,\n.media-body {\n    overflow: hidden;\n    zoom: 1;\n}\n.media .media-object {\n    width: 128px;\n}\n.media.media-lg .media-object {\n    width: 256px;\n}\n.media.media-sm .media-object {\n    width: 64px;\n}\n.media.media-xs .media-object {\n    width: 32px;\n}\n.media > .pull-left,\n.media > .media-left {\n    padding-right: 15px;\n}\n.media > .pull-right,\n.media > .media-right {\n    padding-left: 15px;\n}\n.media a:not(.btn):hover,\n.media a:not(.btn):focus,\n.media a:not(.btn):hover .media-heading,\n.media a:not(.btn):focus .media-heading,\n.media a:not(.btn).media-heading:hover,\n.media a:not(.btn).media-heading:focus {\n    color: #242a30;\n    text-decoration: none;\n}\n.media-list.media-list-with-divider > li + li {\n    border-top: 1px solid #e2e7eb;\n    padding-top: 20px;\n}\n\n\n/* 9.20 Component - Table */\n\n.table {\n    border-color: #e2e7eb;\n    -webkit-border-radius: 3px;\n    -moz-border-radius: 3px;\n    border-radius: 3px;\n}\n.table > thead > tr > th {\n    color: #242a30;\n    font-weight: 600;\n    border-bottom: 2px solid #e2e7eb !important;\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-color: #e2e7eb;\n    padding: 10px 15px;\n}\n.table-condensed > thead > tr > th,\n.table-condensed > tbody > tr > th,\n.table-condensed > tfoot > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > td {\n    padding: 7px 15px;\n}\n.table-hover > tbody > tr:hover > td,\n.table-hover > tbody > tr:hover > th {\n    background: #e8ecf1 !important;\n}\n.table-striped > tbody > tr:nth-child(odd) > td,\n.table-striped > tbody > tr:nth-child(odd) > th {\n    background: #f0f3f5;\n}\n.table.table-inverse > thead > tr > th,\n.table.table-inverse > tbody > tr > th,\n.table.table-inverse > tfoot > tr > th,\n.table.table-inverse > thead > tr > td,\n.table.table-inverse > tbody > tr > td,\n.table.table-inverse > tfoot > tr > td {\n    border-color: #999 !important;\n    border-color: rgba(0,0,0,0.2) !important;\n}\n.table.table-inverse,\n.table.table-inverse > thead > tr > th,\n.table.table-inverse > tbody > tr > th,\n.table.table-inverse > tfoot > tr > th {\n    color: #fff;\n}\n.table > thead > tr > td.info,\n.table > tbody > tr > td.info,\n.table > tfoot > tr > td.info,\n.table > thead > tr > th.info,\n.table > tbody > tr > th.info,\n.table > tfoot > tr > th.info,\n.table > thead > tr.info > td,\n.table > tbody > tr.info > td,\n.table > tfoot > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr.info > th,\n.table > tfoot > tr.info > th {\n    background: #dbf0f7;\n    border-color: #b6e2ef;\n}\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n    background: #cceeee;\n    border-color: #99dede;\n}\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n    background: #ffdedd;\n    border-color: #ffbdbc;\n}\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n    background: #fdebd1;\n    border-color: #fbd7a3;\n}\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n    background: #f0f3f5;\n    border-color: #e2e7e9;\n}\n\n\n/* 9.21 Component - Well */\n\n.well {\n    padding: 15px;\n    background: #fff;\n    box-shadow: none;\n    -webkit-box-shadow: none;\n}\n.well-sm {\n    padding: 10px;\n}\n.well-lg {\n    padding: 30px;\n}\n\n\n/* 9.22 Component - Jumbotron */\n\n.jumbotron {\n    background: #f0f3f4;\n}\n.jumbotron h1,\n.jumbotron .h1 {\n    font-size: 56px;\n}\n.jumbotron p {\n    font-size: 18px;\n}\n\n\n/* 9.23 Component - List Group */\n\na.list-group-item.active,\na.list-group-item.active:hover,\na.list-group-item.active:focus {\n    background: #348fe2;\n}\na.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n    color: #242a30;\n}\n.nav.nav-pills.nav-sm > li {\n    margin: 0 0 3px;\n}\n.nav.nav-pills.nav-sm > li a {\n    padding: 8px 10px;\n    line-height: 1.5;\n}\n\n\n/* 9.24 Component - Carousel */\n\n.carousel .carousel-control .fa {\n    position: absolute;\n    top: 50%;\n    z-index: 5;\n    display: block;\n    width: 30px;\n    height: 30px;\n    margin-top: -15px;\n    text-align: center;\n    line-height: 30px;\n    margin-left: -15px;\n}\n.carousel .carousel-control.left .fa {\n    margin-left: 15px;\n}\n\n\n/* 9.25 Component - Theme Panel */\n\n.theme-panel .theme-collapse-btn {\n    position: absolute;\n    left: -40px;\n    top: 50%;\n    margin-top: -20px;\n    width: 40px;\n    height: 40px;\n    line-height: 40px;\n    font-size: 18px;\n    color: #000;\n    background: #fff;\n    background: rgba(255,255,255,0.9);\n    border-radius: 4px 0 0 4px;\n    text-align: center;\n    box-shadow: 0 0 2px rgba(0,0,0,.4);\n    -webkit-box-shadow: 0 0 2px rgba(0,0,0,.4);\n    -moz-box-shadow: 0 0 2px rgba(0,0,0,.4);\n    text-decoration: none;\n}\n.theme-panel {\n    position: fixed;\n    right: -180px;\n    top: 200px;\n    z-index: 1020;\n    box-shadow: 0 0 2px rgba(0,0,0,.4);\n    -webkit-box-shadow: 0 0 2px rgba(0,0,0,.4);\n    -moz-box-shadow: 0 0 2px rgba(0,0,0,.4);\n    width: 180px;\n    -webkit-transition: right .2s linear;\n    -moz-transition: right .2s linear;\n    transition: right .2s linear;\n}\n.theme-panel .theme-panel-content {\n    padding: 5px;\n    background: #fff;\n    position: relative;\n    z-index: 1020;\n}\n.theme-panel .theme-list {\n    list-style-type: none;\n    margin: 0;\n    padding: 0;\n}\n.theme-panel .theme-list > li {\n    float: left;\n}\n.theme-panel .theme-list > li + li {\n    margin-left: 5px;\n}\n.theme-panel .theme-list > li > a {\n    width: 30px;\n    height: 30px;\n    border-radius: 3px;\n    display: block;\n    -webkit-transition: all .2s linear;\n    -moz-transition: all .2s linear;\n    transition: all .2s linear;\n    position: relative;\n    text-decoration: none;\n}\n.theme-panel .theme-list > li.active > a:before {\n    content: '\\f00c';\n    font-family: FontAwesome;\n    position: absolute;\n    left: 0;\n    right: 0;\n    top: 0;\n    bottom: 0;\n    font-size: 14px;\n    color: #fff;\n    opacity: .4;\n    filter: alpha(opacity=40);\n    text-align: center;\n    line-height: 30px;\n    text-align: center;\n}\n.theme-panel.active {\n    right: 0;\n}"
  },
  {
    "path": "public/frontend/css/forum/theme/blue.css",
    "content": "/*\nTemplate Name: Color Admin - Responsive Admin Dashboard Template build with Twitter Bootstrap 3 & 4\nVersion: 4.0.0\nAuthor: Sean Ngu\nWebsite: http://www.seantheme.com/color-admin-v4.0/frontend/forum/\n*/\n.btn.btn-theme {\n    background: #348fe2;\n    border-color: #348fe2;\n    color: #fff;\n}\n.btn.btn-theme:hover,\n.btn.btn-theme:focus {\n    background: #2a72b5;\n    border-color: #2a72b5;\n}\n.text-theme, a {\n    color: #348fe2;\n}\na:hover,\na:focus {\n    color: #2a72b5;\n}\n.pace-progress,\n.pagination > li.left > a:focus, \n.pagination > li.left > a:hover, \n.pagination > li.right > a:focus, \n.pagination > li.right > a:hover {\n    background: #348fe2;\n}\n.forum-list .media .fa {\n    background: #348fe2;\n}\n.pace .pace-activity {\n    border-top-color: #348fe2;\n    border-left-color: #348fe2;\n}\n.navbar-logo {\n    border-color: #2F83CF #2a72b5 #1f5688;\n}"
  },
  {
    "path": "public/frontend/css/forum/theme/default.css",
    "content": "/*\nTemplate Name: Color Admin - Responsive Admin Dashboard Template build with Twitter Bootstrap 3 & 4\nVersion: 4.0.0\nAuthor: Sean Ngu\nWebsite: http://www.seantheme.com/color-admin-v4.0/frontend/forum/\n*/\n.btn.btn-theme {\n    background: #00acac;\n    border-color: #00acac;\n    color: #fff;\n}\n.btn.btn-theme:hover,\n.btn.btn-theme:focus {\n    background: #008a8a;\n    border-color: #008a8a;\n}\n.text-theme, a {\n    color: #00acac;\n}\na:hover,\na:focus {\n    color: #008a8a;\n}\n.pace-progress,\n.pagination > li.left > a:focus, \n.pagination > li.left > a:hover, \n.pagination > li.right > a:focus, \n.pagination > li.right > a:hover {\n    background: #00acac;\n}\n.forum-list .media .fa {\n    background: #00acac;\n}\n.pace .pace-activity {\n    border-top-color: #00acac;\n    border-left-color: #00acac;\n}\n.navbar-logo {\n    border-color: #4DCACA #31A3A3 #1D8888;\n}"
  },
  {
    "path": "public/frontend/css/forum/theme/orange.css",
    "content": "/*\nTemplate Name: Color Admin - Responsive Admin Dashboard Template build with Twitter Bootstrap 3 & 4\nVersion: 4.0.0\nAuthor: Sean Ngu\nWebsite: http://www.seantheme.com/color-admin-v4.0/frontend/forum/\n*/\n.btn.btn-theme {\n    background: #f59c1a;\n    border-color: #f59c1a;\n    color: #fff;\n}\n.btn.btn-theme:hover,\n.btn.btn-theme:focus {\n    background: #c47d15;\n    border-color: #c47d15;\n}\n.text-theme, a {\n    color: #f59c1a;\n}\na:hover,\na:focus {\n    color: #c47d15;\n}\n.pace-progress,\n.pagination > li.left > a:focus, \n.pagination > li.left > a:hover, \n.pagination > li.right > a:focus, \n.pagination > li.right > a:hover {\n    background: #f59c1a;\n}\n.forum-list .media .fa {\n    background: #f59c1a;\n}\n.pace .pace-activity {\n    border-top-color: #f59c1a;\n    border-left-color: #f59c1a;\n}\n.navbar-logo {\n    border-color: #DF8F19 #c47d15 #935e10;\n}"
  },
  {
    "path": "public/frontend/css/forum/theme/purple.css",
    "content": "/*\nTemplate Name: Color Admin - Responsive Admin Dashboard Template build with Twitter Bootstrap 3 & 4\nVersion: 4.0.0\nAuthor: Sean Ngu\nWebsite: http://www.seantheme.com/color-admin-v4.0/frontend/forum/\n*/\n.btn.btn-theme {\n    background: #727cb6;\n    border-color: #727cb6;\n    color: #fff;\n}\n.btn.btn-theme:hover,\n.btn.btn-theme:focus {\n    background: #5b6392;\n    border-color: #5b6392;\n}\n.text-theme, a {\n    color: #727cb6;\n}\na:hover,\na:focus {\n    color: #5b6392;\n}\n.pace-progress,\n.pagination > li.left > a:focus, \n.pagination > li.left > a:hover, \n.pagination > li.right > a:focus, \n.pagination > li.right > a:hover {\n    background: #727cb6;\n}\n.forum-list .media .fa {\n    background: #727cb6;\n}\n.pace .pace-activity {\n    border-top-color: #727cb6;\n    border-left-color: #727cb6;\n}\n.navbar-logo {\n    border-color: #6670AC #5b6392 #444a6d;\n}"
  },
  {
    "path": "public/frontend/css/forum/theme/red.css",
    "content": "/*\nTemplate Name: Color Admin - Responsive Admin Dashboard Template build with Twitter Bootstrap 3 & 4\nVersion: 4.0.0\nAuthor: Sean Ngu\nWebsite: http://www.seantheme.com/color-admin-v4.0/frontend/forum/\n*/\n.btn.btn-theme {\n    background: #ff5b57;\n    border-color: #ff5b57;\n    color: #fff;\n}\n.btn.btn-theme:hover,\n.btn.btn-theme:focus {\n    background: #cc4946;\n    border-color: #cc4946;\n}\n.text-theme, a {\n    color: #ff5b57;\n}\na:hover,\na:focus {\n    color: #cc4946;\n}\n.pace-progress,\n.pagination > li.left > a:focus, \n.pagination > li.left > a:hover, \n.pagination > li.right > a:focus, \n.pagination > li.right > a:hover {\n    background: #ff5b57;\n}\n.forum-list .media .fa {\n    background: #ff5b57;\n}\n.pace .pace-activity {\n    border-top-color: #ff5b57;\n    border-left-color: #ff5b57;\n}\n.navbar-logo {\n    border-color: #F8504B #cc4946 #993734;\n}"
  },
  {
    "path": "public/frontend/js/forum/apps.js",
    "content": "/*\nTemplate Name: Color Admin - Responsive Admin Dashboard Template build with Twitter Bootstrap 3 & 4\nVersion: 4.0.0\nAuthor: Sean Ngu\nWebsite: http://www.seantheme.com/color-admin-v4.0/frontend/forum/\n    ----------------------------\n        APPS CONTENT TABLE\n    ----------------------------\n    \n    <!-- ======== GLOBAL SCRIPT SETTING ======== -->\n    01. Handle Header Navigation State\n    02. Handle Pace Page Loading Plugins\n    03. Handle Tooltip Activation\n    04. Handle Theme Panel Expand\n\t\n    <!-- ======== APPLICATION SETTING ======== -->\n    Application Controller\n*/\n\n\n/* 01. Handle Header Navigation State\n------------------------------------------------ */\nvar handleHeaderNavigationState = function() {\n    $(window).on('scroll load', function() {\n        if ($(window).scrollTop() > 20) {\n            $('#header').addClass('navbar-sm');\n        } else {\n            $('#header').removeClass('navbar-sm');\n        }\n    });\n};\n\n\n/* 02. Handle Pace Page Loading Plugins\n------------------------------------------------ */\nvar handlePaceLoadingPlugins = function() {\n    Pace.on('hide', function(){\n        setTimeout(function() {\n            $('.pace').addClass('hide');\n        }, 1000);\n    });\n};\n\n\n/* 03. Handle Tooltip Activation\n------------------------------------------------ */\nvar handleTooltipActivation = function() {\n    if ($('[data-toggle=tooltip]').length !== 0) {\n        $('[data-toggle=tooltip]').tooltip();\n    }\n};\n\n\n/* 04. Handle Theme Panel Expand\n------------------------------------------------ */\nvar handleThemePanelExpand = function() {\n\t$(document).on('click', '[data-click=\"theme-panel-expand\"]', function() {\n        var targetContainer = '.theme-panel';\n        var targetClass = 'active';\n        if ($(targetContainer).hasClass(targetClass)) {\n            $(targetContainer).removeClass(targetClass);\n        } else {\n            $(targetContainer).addClass(targetClass);\n        }\n    });\n};\n\n\n/* 05. Handle Theme Page Control\n------------------------------------------------ */\nvar handleThemePageControl = function() {\n    if (Cookies && Cookies.get('theme')) {\n        if ($('.theme-list').length !== 0) {\n            $('.theme-list [data-theme]').closest('li').removeClass('active');\n            $('.theme-list [data-theme=\"'+ Cookies.get('theme') +'\"]').closest('li').addClass('active');\n        }\n        var cssFileSrc = $('[data-theme=\"'+ Cookies.get('theme') +'\"]').attr('data-theme-file');\n        $('#theme').attr('href', cssFileSrc, { expires: 365 });\n    }\n    \n    $(document).on('click', '.theme-list [data-theme]', function() {\n        var cssFileSrc = $(this).attr('data-theme-file');\n        $('#theme').attr('href', cssFileSrc);\n        $('.theme-list [data-theme]').not(this).closest('li').removeClass('active');\n        $(this).closest('li').addClass('active');\n        Cookies.set('theme', $(this).attr('data-theme'));\n    });\n};\n\n\n/* Application Controller\n------------------------------------------------ */\nvar App = function () {\n\t\"use strict\";\n\t\n\treturn {\n\t\t//main function\n\t\tinit: function () {\n\t\t    handleHeaderNavigationState();\n\t\t    handlePaceLoadingPlugins();\n\t\t    handleTooltipActivation();\n\t\t    handleThemePanelExpand();\n\t\t    handleThemePageControl();\n\t\t}\n  };\n}();"
  },
  {
    "path": "public/frontend/js/forum/forum-details-page.js",
    "content": "/*\nTemplate Name: Color Admin - Responsive Admin Dashboard Template build with Twitter Bootstrap 3 & 4\nVersion: 4.0.0\nAuthor: Sean Ngu\nWebsite: http://www.seantheme.com/color-admin-v4.0/frontend/forum/\n*/\n\nvar handleFormWysihtml5 = function () {\n\t\"use strict\";\n\t$('#wysihtml5').wysihtml5();\n};\n\nvar ForumDetailsPage = function () {\n\t\"use strict\";\n    return {\n        //main function\n        init: function () {\n            handleFormWysihtml5();\n        }\n    };\n}();"
  },
  {
    "path": "public/frontend/js/swal/sweetalert2.js",
    "content": "(function(global,factory){typeof exports==='object'&&typeof module!=='undefined'?module.exports=factory():typeof define==='function'&&define.amd?define(factory):(global.Sweetalert2=factory());}(this,function(){'use strict';var swalPrefix='swal2-'\nvar prefix=function(items){var result={}\nfor(var i in items){result[items[i]]=swalPrefix+items[i]}return result}\nvar swalClasses=prefix(['container','in','iosfix','modal','overlay','fade','show','hide','noanimation','close','content','spacer','confirm','cancel','icon','image','input','file','range','select','radio','checkbox','textarea','inputerror','validationerror','progresssteps','activeprogressstep','progresscircle','progressline','loading','styled'])\nvar iconTypes=prefix(['success','warning','info','question','error'])\nvar defaultParams={title:'',text:'',html:'',type:null,customClass:'',animation:true,allowOutsideClick:true,allowEscapeKey:true,showConfirmButton:true,showCancelButton:false,preConfirm:null,confirmButtonText:'OK',confirmButtonColor:'#3085d6',confirmButtonClass:null,cancelButtonText:'Cancel',cancelButtonColor:'#aaa',cancelButtonClass:null,buttonsStyling:true,reverseButtons:false,focusCancel:false,showCloseButton:false,showLoaderOnConfirm:false,imageUrl:null,imageWidth:null,imageHeight:null,imageClass:null,timer:null,width:500,padding:20,background:'#fff',input:null,inputPlaceholder:'',inputValue:'',inputOptions:{},inputAutoTrim:true,inputClass:null,inputAttributes:{},inputValidator:null,progressSteps:[],currentProgressStep:null,progressStepsDistance:'40px',onOpen:null,onClose:null}\nvar sweetHTML='<div class=\"'+swalClasses.modal+'\" style=\"display: none\" tabIndex=\"-1\">'+'<ul class=\"'+swalClasses.progresssteps+'\"></ul>'+'<div class=\"'+swalClasses.icon+' '+iconTypes.error+'\">'+'<span class=\"x-mark\"><span class=\"line left\"></span><span class=\"line right\"></span></span>'+'</div>'+'<div class=\"'+swalClasses.icon+' '+iconTypes.question+'\">?</div>'+'<div class=\"'+swalClasses.icon+' '+iconTypes.warning+'\">!</div>'+'<div class=\"'+swalClasses.icon+' '+iconTypes.info+'\">i</div>'+'<div class=\"'+swalClasses.icon+' '+iconTypes.success+'\">'+'<span class=\"line tip\"></span> <span class=\"line long\"></span>'+'<div class=\"placeholder\"></div> <div class=\"fix\"></div>'+'</div>'+'<img class=\"'+swalClasses.image+'\">'+'<h2></h2>'+'<div class=\"'+swalClasses.content+'\"></div>'+'<input class=\"'+swalClasses.input+'\">'+'<input type=\"file\" class=\"'+swalClasses.file+'\">'+'<div class=\"'+swalClasses.range+'\">'+'<output></output>'+'<input type=\"range\">'+'</div>'+'<select class=\"'+swalClasses.select+'\"></select>'+'<div class=\"'+swalClasses.radio+'\"></div>'+'<label for=\"'+swalClasses.checkbox+'\" class=\"'+swalClasses.checkbox+'\">'+'<input type=\"checkbox\">'+'</label>'+'<textarea class=\"'+swalClasses.textarea+'\"></textarea>'+'<div class=\"'+swalClasses.validationerror+'\"></div>'+'<hr class=\"'+swalClasses.spacer+'\">'+'<button type=\"button\" class=\"'+swalClasses.confirm+'\">OK</button>'+'<button type=\"button\" class=\"'+swalClasses.cancel+'\">Cancel</button>'+'<span class=\"'+swalClasses.close+'\">&times;</span>'+'</div>'\nvar sweetContainer\nvar existingSweetContainers=document.getElementsByClassName(swalClasses.container)\nif(existingSweetContainers.length){sweetContainer=existingSweetContainers[0]}else{sweetContainer=document.createElement('div')\nsweetContainer.className=swalClasses.container\nsweetContainer.innerHTML=sweetHTML}var extend=function(a,b){for(var key in b){if(b.hasOwnProperty(key)){a[key]=b[key]}}return a}\nvar colorLuminance=function(hex,lum){hex=String(hex).replace(/[^0-9a-f]/gi,'')\nif(hex.length<6){hex=hex[0]+hex[0]+hex[1]+hex[1]+hex[2]+hex[2]}lum=lum||0\nvar rgb='#'\nfor(var i=0;i<3;i++){var c=parseInt(hex.substr(i*2,2),16)\nc=Math.round(Math.min(Math.max(0,c+(c*lum)),255)).toString(16)\nrgb+=('00'+c).substr(c.length)}return rgb}\nvar states={previousWindowKeyDown:null,previousActiveElement:null,previousBodyPadding:null}\nvar init=function(){if(typeof document==='undefined'){console.error('SweetAlert2 requires document to initialize')\nreturn}else if(document.getElementsByClassName(swalClasses.container).length){return}document.body.appendChild(sweetContainer)\nvar modal=getModal()\nvar input=getChildByClass(modal,swalClasses.input)\nvar file=getChildByClass(modal,swalClasses.file)\nvar range=modal.querySelector('.'+swalClasses.range+' input')\nvar select=getChildByClass(modal,swalClasses.select)\nvar checkbox=modal.querySelector('.'+swalClasses.checkbox+' input')\nvar textarea=getChildByClass(modal,swalClasses.textarea)\ninput.oninput=function(){sweetAlert.resetValidationError()}\ninput.onkeyup=function(event){event.stopPropagation()\nif(event.keyCode===13){sweetAlert.clickConfirm()}}\nfile.onchange=function(){sweetAlert.resetValidationError()}\nrange.oninput=function(){sweetAlert.resetValidationError()\nrange.previousSibling.value=range.value}\nrange.onchange=function(){sweetAlert.resetValidationError()\nrange.previousSibling.value=range.value}\nselect.onchange=function(){sweetAlert.resetValidationError()}\ncheckbox.onchange=function(){sweetAlert.resetValidationError()}\ntextarea.oninput=function(){sweetAlert.resetValidationError()}\nreturn modal}\nvar elementByClass=function(className){return sweetContainer.querySelector('.'+className)}\nvar getModal=function(){return document.body.querySelector('.'+swalClasses.modal)||init()}\nvar getIcons=function(){var modal=getModal()\nreturn modal.querySelectorAll('.'+swalClasses.icon)}\nvar getSpacer=function(){return elementByClass(swalClasses.spacer)}\nvar getProgressSteps=function(){return elementByClass(swalClasses.progresssteps)}\nvar getValidationError=function(){return elementByClass(swalClasses.validationerror)}\nvar getConfirmButton=function(){return elementByClass(swalClasses.confirm)}\nvar getCancelButton=function(){return elementByClass(swalClasses.cancel)}\nvar getCloseButton=function(){return elementByClass(swalClasses.close)}\nvar getFocusableElements=function(focusCancel){var buttons=[getConfirmButton(),getCancelButton()]\nif(focusCancel){buttons.reverse()}return buttons.concat(Array.prototype.slice.call(getModal().querySelectorAll('button:not([class^='+swalPrefix+']), input:not([type=hidden]), textarea, select')))}\nvar hasClass=function(elem,className){return elem.classList.contains(className)}\nvar focusInput=function(input){input.focus()\nif(input.type!=='file'){var val=input.value\ninput.value=''\ninput.value=val}}\nvar addClass=function(elem,className){if(!elem||!className){return}var classes=className.split(/\\s+/)\nclasses.forEach(function(className){elem.classList.add(className)})}\nvar removeClass=function(elem,className){if(!elem||!className){return}var classes=className.split(/\\s+/)\nclasses.forEach(function(className){elem.classList.remove(className)})}\nvar getChildByClass=function(elem,className){for(var i=0;i<elem.childNodes.length;i++){if(hasClass(elem.childNodes[i],className)){return elem.childNodes[i]}}}\nvar show=function(elem,display){if(!display){display='block'}elem.style.opacity=''\nelem.style.display=display}\nvar hide=function(elem){elem.style.opacity=''\nelem.style.display='none'}\nvar empty=function(elem){while(elem.firstChild){elem.removeChild(elem.firstChild)}}\nvar isVisible=function(elem){return elem.offsetWidth||elem.offsetHeight||elem.getClientRects().length}\nvar removeStyleProperty=function(elem,property){if(elem.style.removeProperty){elem.style.removeProperty(property)}else{elem.style.removeAttribute(property)}}\nvar fireClick=function(node){if(typeof MouseEvent==='function'){var mevt=new MouseEvent('click',{view:window,bubbles:false,cancelable:true})\nnode.dispatchEvent(mevt)}else if(document.createEvent){var evt=document.createEvent('MouseEvents')\nevt.initEvent('click',false,false)\nnode.dispatchEvent(evt)}else if(document.createEventObject){node.fireEvent('onclick')}else if(typeof node.onclick==='function'){node.onclick()}}\nvar stopEventPropagation=function(e){if(typeof e.stopPropagation==='function'){e.stopPropagation()\ne.preventDefault()}else if(window.event&&window.event.hasOwnProperty('cancelBubble')){window.event.cancelBubble=true}}\nvar animationEndEvent=(function(){var testEl=document.createElement('div')\nvar transEndEventNames={'WebkitAnimation':'webkitAnimationEnd','OAnimation':'oAnimationEnd oanimationend','msAnimation':'MSAnimationEnd','animation':'animationend'}\nfor(var i in transEndEventNames){if(transEndEventNames.hasOwnProperty(i)&&testEl.style[i]!==undefined){return transEndEventNames[i]}}return false})()\nvar resetPrevState=function(){var modal=getModal()\nwindow.onkeydown=states.previousWindowKeyDown\nif(states.previousActiveElement&&states.previousActiveElement.focus){states.previousActiveElement.focus()}clearTimeout(modal.timeout)}\nvar measureScrollbar=function(){var scrollDiv=document.createElement('div')\nscrollDiv.style.width='50px'\nscrollDiv.style.height='50px'\nscrollDiv.style.overflow='scroll'\ndocument.body.appendChild(scrollDiv)\nvar scrollbarWidth=scrollDiv.offsetWidth-scrollDiv.clientWidth\ndocument.body.removeChild(scrollDiv)\nreturn scrollbarWidth}\nvar debounce=function(func,wait,immediate){var timeout\nreturn function(){var context=this\nvar args=arguments\nvar later=function(){timeout=null\nif(!immediate)func.apply(context,args)}\nvar callNow=immediate&&!timeout\nclearTimeout(timeout)\ntimeout=setTimeout(later,wait)\nif(callNow)func.apply(context,args)}}\nvar modalParams=extend({},defaultParams)\nvar queue=[]\nvar swal2Observer\nvar setParameters=function(params){var modal=getModal()\nfor(var param in params){if(!defaultParams.hasOwnProperty(param)&&param!=='extraParams'){console.warn('SweetAlert2: Unknown parameter \"'+param+'\"')}}modal.style.width=(typeof params.width==='number')?params.width+'px':params.width\nmodal.style.padding=params.padding+'px'\nmodal.style.background=params.background\nvar $title=modal.querySelector('h2')\nvar $content=modal.querySelector('.'+swalClasses.content)\nvar $confirmBtn=getConfirmButton()\nvar $cancelBtn=getCancelButton()\nvar $closeButton=modal.querySelector('.'+swalClasses.close)\n$title.innerHTML=params.title.split('\\n').join('<br>')\nvar i\nif(params.text||params.html){if(typeof params.html==='object'){$content.innerHTML=''\nif(0 in params.html){for(i=0;i in params.html;i++){$content.appendChild(params.html[i].cloneNode(true))}}else{$content.appendChild(params.html.cloneNode(true))}}else{$content.innerHTML=params.html||(params.text.split('\\n').join('<br>'))}show($content)}else{hide($content)}if(params.showCloseButton){show($closeButton)}else{hide($closeButton)}modal.className=swalClasses.modal\nif(params.customClass){addClass(modal,params.customClass)}var progressStepsContainer=getProgressSteps()\nvar currentProgressStep=parseInt(params.currentProgressStep===null?sweetAlert.getQueueStep():params.currentProgressStep,10)\nif(params.progressSteps.length){show(progressStepsContainer)\nempty(progressStepsContainer)\nif(currentProgressStep>=params.progressSteps.length){console.warn('SweetAlert2: Invalid currentProgressStep parameter, it should be less than progressSteps.length '+'(currentProgressStep like JS arrays starts from 0)')}params.progressSteps.forEach(function(step,index){var circle=document.createElement('li')\naddClass(circle,swalClasses.progresscircle)\ncircle.innerHTML=step\nif(index===currentProgressStep){addClass(circle,swalClasses.activeprogressstep)}progressStepsContainer.appendChild(circle)\nif(index!==params.progressSteps.length-1){var line=document.createElement('li')\naddClass(line,swalClasses.progressline)\nline.style.width=params.progressStepsDistance\nprogressStepsContainer.appendChild(line)}})}else{hide(progressStepsContainer)}var icons=getIcons()\nfor(i=0;i<icons.length;i++){hide(icons[i])}if(params.type){var validType=false\nfor(var iconType in iconTypes){if(params.type===iconType){validType=true\nbreak}}if(!validType){console.error('SweetAlert2: Unknown alert type: '+params.type)\nreturn false}var $icon=modal.querySelector('.'+swalClasses.icon+'.'+iconTypes[params.type])\nshow($icon)\nswitch(params.type){case'success':addClass($icon,'animate')\naddClass($icon.querySelector('.tip'),'animate-success-tip')\naddClass($icon.querySelector('.long'),'animate-success-long')\nbreak\ncase'error':addClass($icon,'animate-error-icon')\naddClass($icon.querySelector('.x-mark'),'animate-x-mark')\nbreak\ncase'warning':addClass($icon,'pulse-warning')\nbreak\ndefault:break}}var $customImage=modal.querySelector('.'+swalClasses.image)\nif(params.imageUrl){$customImage.setAttribute('src',params.imageUrl)\nshow($customImage)\nif(params.imageWidth){$customImage.setAttribute('width',params.imageWidth)}else{$customImage.removeAttribute('width')}if(params.imageHeight){$customImage.setAttribute('height',params.imageHeight)}else{$customImage.removeAttribute('height')}$customImage.className=swalClasses.image\nif(params.imageClass){addClass($customImage,params.imageClass)}}else{hide($customImage)}if(params.showCancelButton){$cancelBtn.style.display='inline-block'}else{hide($cancelBtn)}if(params.showConfirmButton){removeStyleProperty($confirmBtn,'display')}else{hide($confirmBtn)}var spacer=getSpacer()\nif(!params.showConfirmButton&&!params.showCancelButton){hide(spacer)}else{show(spacer)}$confirmBtn.innerHTML=params.confirmButtonText\n$cancelBtn.innerHTML=params.cancelButtonText\nif(params.buttonsStyling){$confirmBtn.style.backgroundColor=params.confirmButtonColor\n$cancelBtn.style.backgroundColor=params.cancelButtonColor}$confirmBtn.className=swalClasses.confirm\naddClass($confirmBtn,params.confirmButtonClass)\n$cancelBtn.className=swalClasses.cancel\naddClass($cancelBtn,params.cancelButtonClass)\nif(params.buttonsStyling){addClass($confirmBtn,swalClasses.styled)\naddClass($cancelBtn,swalClasses.styled)}else{removeClass($confirmBtn,swalClasses.styled)\nremoveClass($cancelBtn,swalClasses.styled)\n$confirmBtn.style.backgroundColor=$confirmBtn.style.borderLeftColor=$confirmBtn.style.borderRightColor=''\n$cancelBtn.style.backgroundColor=$cancelBtn.style.borderLeftColor=$cancelBtn.style.borderRightColor=''}if(params.animation===true){removeClass(modal,swalClasses.noanimation)}else{addClass(modal,swalClasses.noanimation)}}\nvar openModal=function(animation,onComplete){var modal=getModal()\nif(animation){addClass(modal,swalClasses.show)\naddClass(sweetContainer,swalClasses.fade)\nremoveClass(modal,swalClasses.hide)}else{removeClass(modal,swalClasses.fade)}show(modal)\nsweetContainer.style.overflowY='hidden'\nif(animationEndEvent&&!hasClass(modal,swalClasses.noanimation)){modal.addEventListener(animationEndEvent,function swalCloseEventFinished(){modal.removeEventListener(animationEndEvent,swalCloseEventFinished)\nsweetContainer.style.overflowY='auto'})}else{sweetContainer.style.overflowY='auto'}addClass(sweetContainer,swalClasses.in)\naddClass(document.body,swalClasses.in)\nfixScrollbar()\niOSfix()\nstates.previousActiveElement=document.activeElement\nif(onComplete!==null&&typeof onComplete==='function'){onComplete.call(this,modal)}}\nfunction fixScrollbar(){if(states.previousBodyPadding!==null){return}if(document.body.scrollHeight>window.innerHeight){states.previousBodyPadding=document.body.style.paddingRight\ndocument.body.style.paddingRight=measureScrollbar()+'px'}}function undoScrollbar(){if(states.previousBodyPadding!==null){document.body.style.paddingRight=states.previousBodyPadding\nstates.previousBodyPadding=null}}function iOSfix(){var iOS=/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream\nif(iOS&&!hasClass(document.body,swalClasses.iosfix)){var offset=document.body.scrollTop\ndocument.body.style.top=(offset*-1)+'px'\naddClass(document.body,swalClasses.iosfix)}}function undoIOSfix(){if(hasClass(document.body,swalClasses.iosfix)){var offset=parseInt(document.body.style.top,10)\nremoveClass(document.body,swalClasses.iosfix)\ndocument.body.scrollTop=(offset*-1)}}function modalDependant(){if(arguments[0]===undefined){console.error('SweetAlert2 expects at least 1 attribute!')\nreturn false}var params=extend({},modalParams)\nswitch(typeof arguments[0]){case'string':params.title=arguments[0]\nparams.text=arguments[1]||''\nparams.type=arguments[2]||''\nbreak\ncase'object':extend(params,arguments[0])\nparams.extraParams=arguments[0].extraParams\nif(params.input==='email'&&params.inputValidator===null){params.inputValidator=function(email){return new Promise(function(resolve,reject){var emailRegex=/^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,6}$/\nif(emailRegex.test(email)){resolve()}else{reject('Invalid email address')}})}}break\ndefault:console.error('SweetAlert2: Unexpected type of argument! Expected \"string\" or \"object\", got '+typeof arguments[0])\nreturn false}setParameters(params)\nvar modal=getModal()\nreturn new Promise(function(resolve,reject){if(params.timer){modal.timeout=setTimeout(function(){sweetAlert.closeModal(params.onClose)\nreject('timer')},params.timer)}var getInput=function(inputType){inputType=inputType||params.input\nswitch(inputType){case'select':case'textarea':case'file':return getChildByClass(modal,swalClasses[inputType])\ncase'checkbox':return modal.querySelector('.'+swalClasses.checkbox+' input')\ncase'radio':return modal.querySelector('.'+swalClasses.radio+' input:checked')||modal.querySelector('.'+swalClasses.radio+' input:first-child')\ncase'range':return modal.querySelector('.'+swalClasses.range+' input')\ndefault:return getChildByClass(modal,swalClasses.input)}}\nvar getInputValue=function(){var input=getInput()\nif(!input){return null}switch(params.input){case'checkbox':return input.checked?1:0\ncase'radio':return input.checked?input.value:null\ncase'file':return input.files.length?input.files[0]:null\ndefault:return params.inputAutoTrim?input.value.trim():input.value}}\nif(params.input){setTimeout(function(){var input=getInput()\nif(input){focusInput(input)}},0)}var confirm=function(value){if(params.showLoaderOnConfirm){sweetAlert.showLoading()}if(params.preConfirm){params.preConfirm(value,params.extraParams).then(function(preConfirmValue){sweetAlert.closeModal(params.onClose)\nresolve(preConfirmValue||value)},function(error){sweetAlert.hideLoading()\nif(error){sweetAlert.showValidationError(error)}})}else{sweetAlert.closeModal(params.onClose)\nresolve(value)}}\nvar onButtonEvent=function(event){var e=event||window.event\nvar target=e.target||e.srcElement\nvar confirmBtn=getConfirmButton()\nvar cancelBtn=getCancelButton()\nvar targetedConfirm=confirmBtn===target||confirmBtn.contains(target)\nvar targetedCancel=cancelBtn===target||cancelBtn.contains(target)\nswitch(e.type){case'mouseover':case'mouseup':if(params.buttonsStyling){if(targetedConfirm){confirmBtn.style.backgroundColor=colorLuminance(params.confirmButtonColor,-0.1)}else if(targetedCancel){cancelBtn.style.backgroundColor=colorLuminance(params.cancelButtonColor,-0.1)}}break\ncase'mouseout':if(params.buttonsStyling){if(targetedConfirm){confirmBtn.style.backgroundColor=params.confirmButtonColor}else if(targetedCancel){cancelBtn.style.backgroundColor=params.cancelButtonColor}}break\ncase'mousedown':if(params.buttonsStyling){if(targetedConfirm){confirmBtn.style.backgroundColor=colorLuminance(params.confirmButtonColor,-0.2)}else if(targetedCancel){cancelBtn.style.backgroundColor=colorLuminance(params.cancelButtonColor,-0.2)}}break\ncase'click':if(targetedConfirm&&sweetAlert.isVisible()){if(params.input){var inputValue=getInputValue()\nif(params.inputValidator){sweetAlert.disableInput()\nparams.inputValidator(inputValue,params.extraParams).then(function(){sweetAlert.enableInput()\nconfirm(inputValue)},function(error){sweetAlert.enableInput()\nif(error){sweetAlert.showValidationError(error)}})}else{confirm(inputValue)}}else{confirm(true)}}else if(targetedCancel&&sweetAlert.isVisible()){sweetAlert.closeModal(params.onClose)\nreject('cancel')}break\ndefault:}}\nvar $buttons=modal.querySelectorAll('button')\nvar i\nfor(i=0;i<$buttons.length;i++){$buttons[i].onclick=onButtonEvent\n$buttons[i].onmouseover=onButtonEvent\n$buttons[i].onmouseout=onButtonEvent\n$buttons[i].onmousedown=onButtonEvent}getCloseButton().onclick=function(){sweetAlert.closeModal(params.onClose)\nreject('close')}\nsweetContainer.onclick=function(e){if(e.target!==sweetContainer){return}if(params.allowOutsideClick){sweetAlert.closeModal(params.onClose)\nreject('overlay')}}\nvar $confirmButton=getConfirmButton()\nvar $cancelButton=getCancelButton()\nif(params.reverseButtons){$confirmButton.parentNode.insertBefore($cancelButton,$confirmButton)}else{$confirmButton.parentNode.insertBefore($confirmButton,$cancelButton)}function setFocus(index,increment){var focusableElements=getFocusableElements(params.focusCancel)\nfor(var i=0;i<focusableElements.length;i++){index=index+increment\nif(index===focusableElements.length){index=0}else if(index===-1){index=focusableElements.length-1}var el=focusableElements[index]\nif(isVisible(el)){return el.focus()}}}function handleKeyDown(event){var e=event||window.event\nvar keyCode=e.keyCode||e.which\nif([9,13,32,27].indexOf(keyCode)===-1){return}var $targetElement=e.target||e.srcElement\nvar focusableElements=getFocusableElements(params.focusCancel)\nvar btnIndex=-1\nfor(var i=0;i<focusableElements.length;i++){if($targetElement===focusableElements[i]){btnIndex=i\nbreak}}if(keyCode===9){if(!e.shiftKey){setFocus(btnIndex,1)}else{setFocus(btnIndex,-1)}stopEventPropagation(e)}else{if(keyCode===13||keyCode===32){if(btnIndex===-1){if(params.focusCancel){fireClick($cancelButton,e)}else{fireClick($confirmButton,e)}}}else if(keyCode===27&&params.allowEscapeKey===true){sweetAlert.closeModal(params.onClose)\nreject('esc')}}}states.previousWindowKeyDown=window.onkeydown\nwindow.onkeydown=handleKeyDown\nif(params.buttonsStyling){$confirmButton.style.borderLeftColor=params.confirmButtonColor\n$confirmButton.style.borderRightColor=params.confirmButtonColor}sweetAlert.showLoading=sweetAlert.enableLoading=function(){show(getSpacer())\nshow($confirmButton,'inline-block')\naddClass($confirmButton,swalClasses.loading)\naddClass(modal,swalClasses.loading)\n$confirmButton.disabled=true\n$cancelButton.disabled=true}\nsweetAlert.hideLoading=sweetAlert.disableLoading=function(){if(!params.showConfirmButton){hide($confirmButton)\nif(!params.showCancelButton){hide(getSpacer())}}removeClass($confirmButton,swalClasses.loading)\nremoveClass(modal,swalClasses.loading)\n$confirmButton.disabled=false\n$cancelButton.disabled=false}\nsweetAlert.enableButtons=function(){$confirmButton.disabled=false\n$cancelButton.disabled=false}\nsweetAlert.disableButtons=function(){$confirmButton.disabled=true\n$cancelButton.disabled=true}\nsweetAlert.enableConfirmButton=function(){$confirmButton.disabled=false}\nsweetAlert.disableConfirmButton=function(){$confirmButton.disabled=true}\nsweetAlert.enableInput=function(){var input=getInput()\nif(!input){return false}if(input.type==='radio'){var radiosContainer=input.parentNode.parentNode\nvar radios=radiosContainer.querySelectorAll('input')\nfor(var i=0;i<radios.length;i++){radios[i].disabled=false}}else{input.disabled=false}}\nsweetAlert.disableInput=function(){var input=getInput()\nif(!input){return false}if(input&&input.type==='radio'){var radiosContainer=input.parentNode.parentNode\nvar radios=radiosContainer.querySelectorAll('input')\nfor(var i=0;i<radios.length;i++){radios[i].disabled=true}}else{input.disabled=true}}\nsweetAlert.recalculateHeight=debounce(function(){var modal=getModal()\nvar prevState=modal.style.display\nmodal.style.minHeight=''\nshow(modal)\nmodal.style.minHeight=(modal.scrollHeight+1)+'px'\nmodal.style.display=prevState},50)\nsweetAlert.showValidationError=function(error){var validationError=getValidationError()\nvalidationError.innerHTML=error\nshow(validationError)\nvar input=getInput()\nfocusInput(input)\naddClass(input,swalClasses.inputerror)}\nsweetAlert.resetValidationError=function(){var validationError=getValidationError()\nhide(validationError)\nsweetAlert.recalculateHeight()\nvar input=getInput()\nif(input){removeClass(input,swalClasses.inputerror)}}\nsweetAlert.getProgressSteps=function(){return params.progressSteps}\nsweetAlert.setProgressSteps=function(progressSteps){params.progressSteps=progressSteps\nsetParameters(params)}\nsweetAlert.showProgressSteps=function(){show(getProgressSteps())}\nsweetAlert.hideProgressSteps=function(){hide(getProgressSteps())}\nsweetAlert.enableButtons()\nsweetAlert.hideLoading()\nsweetAlert.resetValidationError()\nvar inputTypes=['input','file','range','select','radio','checkbox','textarea']\nvar input\nfor(i=0;i<inputTypes.length;i++){var inputClass=swalClasses[inputTypes[i]]\nvar inputContainer=getChildByClass(modal,inputClass)\ninput=getInput(inputTypes[i])\nif(input){for(var j in input.attributes){if(input.attributes.hasOwnProperty(j)){var attrName=input.attributes[j].name\nif(attrName!=='type'&&attrName!=='value'){input.removeAttribute(attrName)}}}for(var attr in params.inputAttributes){input.setAttribute(attr,params.inputAttributes[attr])}}inputContainer.className=inputClass\nif(params.inputClass){addClass(inputContainer,params.inputClass)}hide(inputContainer)}var populateInputOptions\nswitch(params.input){case'text':case'email':case'password':case'number':case'tel':input=getChildByClass(modal,swalClasses.input)\ninput.value=params.inputValue\ninput.placeholder=params.inputPlaceholder\ninput.type=params.input\nshow(input)\nbreak\ncase'file':input=getChildByClass(modal,swalClasses.file)\ninput.placeholder=params.inputPlaceholder\ninput.type=params.input\nshow(input)\nbreak\ncase'range':var range=getChildByClass(modal,swalClasses.range)\nvar rangeInput=range.querySelector('input')\nvar rangeOutput=range.querySelector('output')\nrangeInput.value=params.inputValue\nrangeInput.type=params.input\nrangeOutput.value=params.inputValue\nshow(range)\nbreak\ncase'select':var select=getChildByClass(modal,swalClasses.select)\nselect.innerHTML=''\nif(params.inputPlaceholder){var placeholder=document.createElement('option')\nplaceholder.innerHTML=params.inputPlaceholder\nplaceholder.value=''\nplaceholder.disabled=true\nplaceholder.selected=true\nselect.appendChild(placeholder)}populateInputOptions=function(inputOptions){for(var optionValue in inputOptions){var option=document.createElement('option')\noption.value=optionValue\noption.innerHTML=inputOptions[optionValue]\nif(params.inputValue===optionValue){option.selected=true}select.appendChild(option)}show(select)\nselect.focus()}\nbreak\ncase'radio':var radio=getChildByClass(modal,swalClasses.radio)\nradio.innerHTML=''\npopulateInputOptions=function(inputOptions){for(var radioValue in inputOptions){var id=1\nvar radioInput=document.createElement('input')\nvar radioLabel=document.createElement('label')\nvar radioLabelSpan=document.createElement('span')\nradioInput.type='radio'\nradioInput.name=swalClasses.radio\nradioInput.value=radioValue\nradioInput.id=swalClasses.radio+'-'+(id++)\nif(params.inputValue===radioValue){radioInput.checked=true}radioLabelSpan.innerHTML=inputOptions[radioValue]\nradioLabel.appendChild(radioInput)\nradioLabel.appendChild(radioLabelSpan)\nradioLabel.for=radioInput.id\nradio.appendChild(radioLabel)}show(radio)\nvar radios=radio.querySelectorAll('input')\nif(radios.length){radios[0].focus()}}\nbreak\ncase'checkbox':var checkbox=getChildByClass(modal,swalClasses.checkbox)\nvar checkboxInput=getInput('checkbox')\ncheckboxInput.type='checkbox'\ncheckboxInput.value=1\ncheckboxInput.id=swalClasses.checkbox\ncheckboxInput.checked=Boolean(params.inputValue)\nvar label=checkbox.getElementsByTagName('span')\nif(label.length){checkbox.removeChild(label[0])}label=document.createElement('span')\nlabel.innerHTML=params.inputPlaceholder\ncheckbox.appendChild(label)\nshow(checkbox)\nbreak\ncase'textarea':var textarea=getChildByClass(modal,swalClasses.textarea)\ntextarea.value=params.inputValue\ntextarea.placeholder=params.inputPlaceholder\nshow(textarea)\nbreak\ncase null:break\ndefault:console.error('SweetAlert2: Unexpected type of input! Expected \"text\" or \"email\" or \"password\", \"select\", \"checkbox\", \"textarea\" or \"file\", got \"'+params.input+'\"')\nbreak}if(params.input==='select'||params.input==='radio'){if(params.inputOptions instanceof Promise){sweetAlert.showLoading()\nparams.inputOptions.then(function(inputOptions){sweetAlert.hideLoading()\npopulateInputOptions(inputOptions)})}else if(typeof params.inputOptions==='object'){populateInputOptions(params.inputOptions)}else{console.error('SweetAlert2: Unexpected type of inputOptions! Expected object or Promise, got '+typeof params.inputOptions)}}openModal(params.animation,params.onOpen)\nsetFocus(-1,1)\nsweetContainer.scrollTop=0\nif(typeof MutationObserver!=='undefined'&&!swal2Observer){swal2Observer=new MutationObserver(sweetAlert.recalculateHeight)\nswal2Observer.observe(modal,{childList:true,characterData:true,subtree:true})}})}function sweetAlert(){var args=arguments\nif(sweetAlert.isVisible()){sweetAlert.close()}return modalDependant.apply(this,args)}sweetAlert.isVisible=function(){var modal=getModal()\nreturn isVisible(modal)}\nsweetAlert.queue=function(steps){queue=steps\nvar modal=getModal()\nvar resetQueue=function(){queue=[]\nmodal.removeAttribute('data-queue-step')}\nreturn new Promise(function(resolve,reject){(function step(i,callback){if(i<queue.length){modal.setAttribute('data-queue-step',i)\nsweetAlert(queue[i]).then(function(){step(i+1,callback)},function(dismiss){resetQueue()\nreject(dismiss)})}else{resetQueue()\nresolve()}})(0)})}\nsweetAlert.getQueueStep=function(){return getModal().getAttribute('data-queue-step')}\nsweetAlert.insertQueueStep=function(step,index){if(index&&index<queue.length){return queue.splice(index,0,step)}return queue.push(step)}\nsweetAlert.deleteQueueStep=function(index){if(typeof queue[index]!=='undefined'){queue.splice(index,1)}}\nsweetAlert.close=sweetAlert.closeModal=function(onComplete){var modal=getModal()\nremoveClass(modal,swalClasses.show)\naddClass(modal,swalClasses.hide)\nvar $successIcon=modal.querySelector('.'+swalClasses.icon+'.'+iconTypes.success)\nremoveClass($successIcon,'animate')\nremoveClass($successIcon.querySelector('.tip'),'animate-success-tip')\nremoveClass($successIcon.querySelector('.long'),'animate-success-long')\nvar $errorIcon=modal.querySelector('.'+swalClasses.icon+'.'+iconTypes.error)\nremoveClass($errorIcon,'animate-error-icon')\nremoveClass($errorIcon.querySelector('.x-mark'),'animate-x-mark')\nvar $warningIcon=modal.querySelector('.'+swalClasses.icon+'.'+iconTypes.warning)\nremoveClass($warningIcon,'pulse-warning')\nresetPrevState()\nvar hideModalAndResetState=function(){hide(modal)\nmodal.style.minHeight=''\nremoveClass(sweetContainer,swalClasses.in)\nremoveClass(document.body,swalClasses.in)\nundoScrollbar()\nundoIOSfix()}\nif(animationEndEvent&&!hasClass(modal,swalClasses.noanimation)){modal.addEventListener(animationEndEvent,function swalCloseEventFinished(){modal.removeEventListener(animationEndEvent,swalCloseEventFinished)\nif(hasClass(modal,swalClasses.hide)){hideModalAndResetState()}})}else{hideModalAndResetState()}if(onComplete!==null&&typeof onComplete==='function'){onComplete.call(this,modal)}}\nsweetAlert.clickConfirm=function(){getConfirmButton().click()}\nsweetAlert.clickCancel=function(){getCancelButton().click()}\nsweetAlert.setDefaults=function(userParams){if(!userParams){throw new Error('userParams is required')}if(typeof userParams!=='object'){throw new Error('userParams has to be a object')}extend(modalParams,userParams)}\nsweetAlert.resetDefaults=function(){modalParams=extend({},defaultParams)}\nsweetAlert.noop=function(){}\nsweetAlert.version='5.3.5'\nif(typeof Promise==='function'){Promise.prototype.done=Promise.prototype.done||function(){return this.catch(function(){})}}else{console.warn('SweetAlert2: Please inlude Promise polyfill BEFORE including sweetalert2.js if IE10+ support needed.')}return sweetAlert;}));if(window.Sweetalert2)window.sweetAlert=window.swal=window.Sweetalert2;"
  },
  {
    "path": "public/frontend/plugins/animate/animate.css",
    "content": "@charset \"UTF-8\";.animated{animation-duration:1s;animation-fill-mode:both}.animated.infinite{animation-iteration-count:infinite}.animated.hinge{animation-duration:2s}.animated.flipOutX,.animated.flipOutY,.animated.bounceIn,.animated.bounceOut{animation-duration:.75s}@keyframes bounce{from,20%,53%,80%,to{animation-timing-function:cubic-bezier(0.215,0.610,0.355,1.000);transform:translate3d(0,0,0)}40%,43%{animation-timing-function:cubic-bezier(0.755,0.050,0.855,0.060);transform:translate3d(0,-30px,0)}70%{animation-timing-function:cubic-bezier(0.755,0.050,0.855,0.060);transform:translate3d(0,-15px,0)}90%{transform:translate3d(0,-4px,0)}}.bounce{animation-name:bounce;transform-origin:center bottom}@keyframes flash{from,50%,to{opacity:1}25%,75%{opacity:0}}.flash{animation-name:flash}@keyframes pulse{from{transform:scale3d(1,1,1)}50%{transform:scale3d(1.05,1.05,1.05)}to{transform:scale3d(1,1,1)}}.pulse{animation-name:pulse}@keyframes rubberBand{from{transform:scale3d(1,1,1)}30%{transform:scale3d(1.25,0.75,1)}40%{transform:scale3d(0.75,1.25,1)}50%{transform:scale3d(1.15,0.85,1)}65%{transform:scale3d(.95,1.05,1)}75%{transform:scale3d(1.05,.95,1)}to{transform:scale3d(1,1,1)}}.rubberBand{animation-name:rubberBand}@keyframes shake{from,to{transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{transform:translate3d(-10px,0,0)}20%,40%,60%,80%{transform:translate3d(10px,0,0)}}.shake{animation-name:shake}@keyframes headShake{0%{transform:translateX(0)}6.5%{transform:translateX(-6px) rotateY(-9deg)}18.5%{transform:translateX(5px) rotateY(7deg)}31.5%{transform:translateX(-3px) rotateY(-5deg)}43.5%{transform:translateX(2px) rotateY(3deg)}50%{transform:translateX(0)}}.headShake{animation-timing-function:ease-in-out;animation-name:headShake}@keyframes swing{20%{transform:rotate3d(0,0,1,15deg)}40%{transform:rotate3d(0,0,1,-10deg)}60%{transform:rotate3d(0,0,1,5deg)}80%{transform:rotate3d(0,0,1,-5deg)}to{transform:rotate3d(0,0,1,0deg)}}.swing{transform-origin:top center;animation-name:swing}@keyframes tada{from{transform:scale3d(1,1,1)}10%,20%{transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg)}30%,50%,70%,90%{transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg)}40%,60%,80%{transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg)}to{transform:scale3d(1,1,1)}}.tada{animation-name:tada}@keyframes wobble{from{transform:none}15%{transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg)}30%{transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg)}45%{transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg)}60%{transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg)}75%{transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg)}to{transform:none}}.wobble{animation-name:wobble}@keyframes jello{from,11.1%,to{transform:none}22.2%{transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{transform:skewX(6.25deg) skewY(6.25deg)}44.4%{transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{transform:skewX(-0.78125deg) skewY(-0.78125deg)}77.7%{transform:skewX(0.390625deg) skewY(0.390625deg)}88.8%{transform:skewX(-0.1953125deg) skewY(-0.1953125deg)}}.jello{animation-name:jello;transform-origin:center}@keyframes bounceIn{from,20%,40%,60%,80%,to{animation-timing-function:cubic-bezier(0.215,0.610,0.355,1.000)}0%{opacity:0;transform:scale3d(.3,.3,.3)}20%{transform:scale3d(1.1,1.1,1.1)}40%{transform:scale3d(.9,.9,.9)}60%{opacity:1;transform:scale3d(1.03,1.03,1.03)}80%{transform:scale3d(.97,.97,.97)}to{opacity:1;transform:scale3d(1,1,1)}}.bounceIn{animation-name:bounceIn}@keyframes bounceInDown{from,60%,75%,90%,to{animation-timing-function:cubic-bezier(0.215,0.610,0.355,1.000)}0%{opacity:0;transform:translate3d(0,-3000px,0)}60%{opacity:1;transform:translate3d(0,25px,0)}75%{transform:translate3d(0,-10px,0)}90%{transform:translate3d(0,5px,0)}to{transform:none}}.bounceInDown{animation-name:bounceInDown}@keyframes bounceInLeft{from,60%,75%,90%,to{animation-timing-function:cubic-bezier(0.215,0.610,0.355,1.000)}0%{opacity:0;transform:translate3d(-3000px,0,0)}60%{opacity:1;transform:translate3d(25px,0,0)}75%{transform:translate3d(-10px,0,0)}90%{transform:translate3d(5px,0,0)}to{transform:none}}.bounceInLeft{animation-name:bounceInLeft}@keyframes bounceInRight{from,60%,75%,90%,to{animation-timing-function:cubic-bezier(0.215,0.610,0.355,1.000)}from{opacity:0;transform:translate3d(3000px,0,0)}60%{opacity:1;transform:translate3d(-25px,0,0)}75%{transform:translate3d(10px,0,0)}90%{transform:translate3d(-5px,0,0)}to{transform:none}}.bounceInRight{animation-name:bounceInRight}@keyframes bounceInUp{from,60%,75%,90%,to{animation-timing-function:cubic-bezier(0.215,0.610,0.355,1.000)}from{opacity:0;transform:translate3d(0,3000px,0)}60%{opacity:1;transform:translate3d(0,-20px,0)}75%{transform:translate3d(0,10px,0)}90%{transform:translate3d(0,-5px,0)}to{transform:translate3d(0,0,0)}}.bounceInUp{animation-name:bounceInUp}@keyframes bounceOut{20%{transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;transform:scale3d(1.1,1.1,1.1)}to{opacity:0;transform:scale3d(.3,.3,.3)}}.bounceOut{animation-name:bounceOut}@keyframes bounceOutDown{20%{transform:translate3d(0,10px,0)}40%,45%{opacity:1;transform:translate3d(0,-20px,0)}to{opacity:0;transform:translate3d(0,2000px,0)}}.bounceOutDown{animation-name:bounceOutDown}@keyframes bounceOutLeft{20%{opacity:1;transform:translate3d(20px,0,0)}to{opacity:0;transform:translate3d(-2000px,0,0)}}.bounceOutLeft{animation-name:bounceOutLeft}@keyframes bounceOutRight{20%{opacity:1;transform:translate3d(-20px,0,0)}to{opacity:0;transform:translate3d(2000px,0,0)}}.bounceOutRight{animation-name:bounceOutRight}@keyframes bounceOutUp{20%{transform:translate3d(0,-10px,0)}40%,45%{opacity:1;transform:translate3d(0,20px,0)}to{opacity:0;transform:translate3d(0,-2000px,0)}}.bounceOutUp{animation-name:bounceOutUp}@keyframes fadeIn{from{opacity:0}to{opacity:1}}.fadeIn{animation-name:fadeIn}@keyframes fadeInDown{from{opacity:0;transform:translate3d(0,-100%,0)}to{opacity:1;transform:none}}.fadeInDown{animation-name:fadeInDown}@keyframes fadeInDownBig{from{opacity:0;transform:translate3d(0,-2000px,0)}to{opacity:1;transform:none}}.fadeInDownBig{animation-name:fadeInDownBig}@keyframes fadeInLeft{from{opacity:0;transform:translate3d(-100%,0,0)}to{opacity:1;transform:none}}.fadeInLeft{animation-name:fadeInLeft}@keyframes fadeInLeftBig{from{opacity:0;transform:translate3d(-2000px,0,0)}to{opacity:1;transform:none}}.fadeInLeftBig{animation-name:fadeInLeftBig}@keyframes fadeInRight{from{opacity:0;transform:translate3d(100%,0,0)}to{opacity:1;transform:none}}.fadeInRight{animation-name:fadeInRight}@keyframes fadeInRightBig{from{opacity:0;transform:translate3d(2000px,0,0)}to{opacity:1;transform:none}}.fadeInRightBig{animation-name:fadeInRightBig}@keyframes fadeInUp{from{opacity:0;transform:translate3d(0,100%,0)}to{opacity:1;transform:none}}.fadeInUp{animation-name:fadeInUp}@keyframes fadeInUpBig{from{opacity:0;transform:translate3d(0,2000px,0)}to{opacity:1;transform:none}}.fadeInUpBig{animation-name:fadeInUpBig}@keyframes fadeOut{from{opacity:1}to{opacity:0}}.fadeOut{animation-name:fadeOut}@keyframes fadeOutDown{from{opacity:1}to{opacity:0;transform:translate3d(0,100%,0)}}.fadeOutDown{animation-name:fadeOutDown}@keyframes fadeOutDownBig{from{opacity:1}to{opacity:0;transform:translate3d(0,2000px,0)}}.fadeOutDownBig{animation-name:fadeOutDownBig}@keyframes fadeOutLeft{from{opacity:1}to{opacity:0;transform:translate3d(-100%,0,0)}}.fadeOutLeft{animation-name:fadeOutLeft}@keyframes fadeOutLeftBig{from{opacity:1}to{opacity:0;transform:translate3d(-2000px,0,0)}}.fadeOutLeftBig{animation-name:fadeOutLeftBig}@keyframes fadeOutRight{from{opacity:1}to{opacity:0;transform:translate3d(100%,0,0)}}.fadeOutRight{animation-name:fadeOutRight}@keyframes fadeOutRightBig{from{opacity:1}to{opacity:0;transform:translate3d(2000px,0,0)}}.fadeOutRightBig{animation-name:fadeOutRightBig}@keyframes fadeOutUp{from{opacity:1}to{opacity:0;transform:translate3d(0,-100%,0)}}.fadeOutUp{animation-name:fadeOutUp}@keyframes fadeOutUpBig{from{opacity:1}to{opacity:0;transform:translate3d(0,-2000px,0)}}.fadeOutUpBig{animation-name:fadeOutUpBig}@keyframes flip{from{transform:perspective(400px) rotate3d(0,1,0,-360deg);animation-timing-function:ease-out}40%{transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);animation-timing-function:ease-out}50%{transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);animation-timing-function:ease-in}80%{transform:perspective(400px) scale3d(.95,.95,.95);animation-timing-function:ease-in}to{transform:perspective(400px);animation-timing-function:ease-in}}.animated.flip{-webkit-backface-visibility:visible;backface-visibility:visible;animation-name:flip}@keyframes flipInX{from{transform:perspective(400px) rotate3d(1,0,0,90deg);animation-timing-function:ease-in;opacity:0}40%{transform:perspective(400px) rotate3d(1,0,0,-20deg);animation-timing-function:ease-in}60%{transform:perspective(400px) rotate3d(1,0,0,10deg);opacity:1}80%{transform:perspective(400px) rotate3d(1,0,0,-5deg)}to{transform:perspective(400px)}}.flipInX{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;animation-name:flipInX}@keyframes flipInY{from{transform:perspective(400px) rotate3d(0,1,0,90deg);animation-timing-function:ease-in;opacity:0}40%{transform:perspective(400px) rotate3d(0,1,0,-20deg);animation-timing-function:ease-in}60%{transform:perspective(400px) rotate3d(0,1,0,10deg);opacity:1}80%{transform:perspective(400px) rotate3d(0,1,0,-5deg)}to{transform:perspective(400px)}}.flipInY{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;animation-name:flipInY}@keyframes flipOutX{from{transform:perspective(400px)}30%{transform:perspective(400px) rotate3d(1,0,0,-20deg);opacity:1}to{transform:perspective(400px) rotate3d(1,0,0,90deg);opacity:0}}.flipOutX{animation-name:flipOutX;-webkit-backface-visibility:visible!important;backface-visibility:visible!important}@keyframes flipOutY{from{transform:perspective(400px)}30%{transform:perspective(400px) rotate3d(0,1,0,-15deg);opacity:1}to{transform:perspective(400px) rotate3d(0,1,0,90deg);opacity:0}}.flipOutY{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;animation-name:flipOutY}@keyframes lightSpeedIn{from{transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{transform:skewX(20deg);opacity:1}80%{transform:skewX(-5deg);opacity:1}to{transform:none;opacity:1}}.lightSpeedIn{animation-name:lightSpeedIn;animation-timing-function:ease-out}@keyframes lightSpeedOut{from{opacity:1}to{transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}.lightSpeedOut{animation-name:lightSpeedOut;animation-timing-function:ease-in}@keyframes rotateIn{from{transform-origin:center;transform:rotate3d(0,0,1,-200deg);opacity:0}to{transform-origin:center;transform:none;opacity:1}}.rotateIn{animation-name:rotateIn}@keyframes rotateInDownLeft{from{transform-origin:left bottom;transform:rotate3d(0,0,1,-45deg);opacity:0}to{transform-origin:left bottom;transform:none;opacity:1}}.rotateInDownLeft{animation-name:rotateInDownLeft}@keyframes rotateInDownRight{from{transform-origin:right bottom;transform:rotate3d(0,0,1,45deg);opacity:0}to{transform-origin:right bottom;transform:none;opacity:1}}.rotateInDownRight{animation-name:rotateInDownRight}@keyframes rotateInUpLeft{from{transform-origin:left bottom;transform:rotate3d(0,0,1,45deg);opacity:0}to{transform-origin:left bottom;transform:none;opacity:1}}.rotateInUpLeft{animation-name:rotateInUpLeft}@keyframes rotateInUpRight{from{transform-origin:right bottom;transform:rotate3d(0,0,1,-90deg);opacity:0}to{transform-origin:right bottom;transform:none;opacity:1}}.rotateInUpRight{animation-name:rotateInUpRight}@keyframes rotateOut{from{transform-origin:center;opacity:1}to{transform-origin:center;transform:rotate3d(0,0,1,200deg);opacity:0}}.rotateOut{animation-name:rotateOut}@keyframes rotateOutDownLeft{from{transform-origin:left bottom;opacity:1}to{transform-origin:left bottom;transform:rotate3d(0,0,1,45deg);opacity:0}}.rotateOutDownLeft{animation-name:rotateOutDownLeft}@keyframes rotateOutDownRight{from{transform-origin:right bottom;opacity:1}to{transform-origin:right bottom;transform:rotate3d(0,0,1,-45deg);opacity:0}}.rotateOutDownRight{animation-name:rotateOutDownRight}@keyframes rotateOutUpLeft{from{transform-origin:left bottom;opacity:1}to{transform-origin:left bottom;transform:rotate3d(0,0,1,-45deg);opacity:0}}.rotateOutUpLeft{animation-name:rotateOutUpLeft}@keyframes rotateOutUpRight{from{transform-origin:right bottom;opacity:1}to{transform-origin:right bottom;transform:rotate3d(0,0,1,90deg);opacity:0}}.rotateOutUpRight{animation-name:rotateOutUpRight}@keyframes hinge{0%{transform-origin:top left;animation-timing-function:ease-in-out}20%,60%{transform:rotate3d(0,0,1,80deg);transform-origin:top left;animation-timing-function:ease-in-out}40%,80%{transform:rotate3d(0,0,1,60deg);transform-origin:top left;animation-timing-function:ease-in-out;opacity:1}to{transform:translate3d(0,700px,0);opacity:0}}.hinge{animation-name:hinge}@keyframes jackInTheBox{from{opacity:0;transform:scale(0.1) rotate(30deg);transform-origin:center bottom}50%{transform:rotate(-10deg)}70%{transform:rotate(3deg)}to{opacity:1;transform:scale(1)}}.jackInTheBox{animation-name:jackInTheBox}@keyframes rollIn{from{opacity:0;transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg)}to{opacity:1;transform:none}}.rollIn{animation-name:rollIn}@keyframes rollOut{from{opacity:1}to{opacity:0;transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg)}}.rollOut{animation-name:rollOut}@keyframes zoomIn{from{opacity:0;transform:scale3d(.3,.3,.3)}50%{opacity:1}}.zoomIn{animation-name:zoomIn}@keyframes zoomInDown{from{opacity:0;transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);animation-timing-function:cubic-bezier(0.550,0.055,0.675,0.190)}60%{opacity:1;transform:scale3d(.475,.475,.475) translate3d(0,60px,0);animation-timing-function:cubic-bezier(0.175,0.885,0.320,1)}}.zoomInDown{animation-name:zoomInDown}@keyframes zoomInLeft{from{opacity:0;transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);animation-timing-function:cubic-bezier(0.550,0.055,0.675,0.190)}60%{opacity:1;transform:scale3d(.475,.475,.475) translate3d(10px,0,0);animation-timing-function:cubic-bezier(0.175,0.885,0.320,1)}}.zoomInLeft{animation-name:zoomInLeft}@keyframes zoomInRight{from{opacity:0;transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);animation-timing-function:cubic-bezier(0.550,0.055,0.675,0.190)}60%{opacity:1;transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);animation-timing-function:cubic-bezier(0.175,0.885,0.320,1)}}.zoomInRight{animation-name:zoomInRight}@keyframes zoomInUp{from{opacity:0;transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);animation-timing-function:cubic-bezier(0.550,0.055,0.675,0.190)}60%{opacity:1;transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);animation-timing-function:cubic-bezier(0.175,0.885,0.320,1)}}.zoomInUp{animation-name:zoomInUp}@keyframes zoomOut{from{opacity:1}50%{opacity:0;transform:scale3d(.3,.3,.3)}to{opacity:0}}.zoomOut{animation-name:zoomOut}@keyframes zoomOutDown{40%{opacity:1;transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);animation-timing-function:cubic-bezier(0.550,0.055,0.675,0.190)}to{opacity:0;transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform-origin:center bottom;animation-timing-function:cubic-bezier(0.175,0.885,0.320,1)}}.zoomOutDown{animation-name:zoomOutDown}@keyframes zoomOutLeft{40%{opacity:1;transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;transform:scale(.1) translate3d(-2000px,0,0);transform-origin:left center}}.zoomOutLeft{animation-name:zoomOutLeft}@keyframes zoomOutRight{40%{opacity:1;transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;transform:scale(.1) translate3d(2000px,0,0);transform-origin:right center}}.zoomOutRight{animation-name:zoomOutRight}@keyframes zoomOutUp{40%{opacity:1;transform:scale3d(.475,.475,.475) translate3d(0,60px,0);animation-timing-function:cubic-bezier(0.550,0.055,0.675,0.190)}to{opacity:0;transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform-origin:center bottom;animation-timing-function:cubic-bezier(0.175,0.885,0.320,1)}}.zoomOutUp{animation-name:zoomOutUp}@keyframes slideInDown{from{transform:translate3d(0,-100%,0);visibility:visible}to{transform:translate3d(0,0,0)}}.slideInDown{animation-name:slideInDown}@keyframes slideInLeft{from{transform:translate3d(-100%,0,0);visibility:visible}to{transform:translate3d(0,0,0)}}.slideInLeft{animation-name:slideInLeft}@keyframes slideInRight{from{transform:translate3d(100%,0,0);visibility:visible}to{transform:translate3d(0,0,0)}}.slideInRight{animation-name:slideInRight}@keyframes slideInUp{from{transform:translate3d(0,100%,0);visibility:visible}to{transform:translate3d(0,0,0)}}.slideInUp{animation-name:slideInUp}@keyframes slideOutDown{from{transform:translate3d(0,0,0)}to{visibility:hidden;transform:translate3d(0,100%,0)}}.slideOutDown{animation-name:slideOutDown}@keyframes slideOutLeft{from{transform:translate3d(0,0,0)}to{visibility:hidden;transform:translate3d(-100%,0,0)}}.slideOutLeft{animation-name:slideOutLeft}@keyframes slideOutRight{from{transform:translate3d(0,0,0)}to{visibility:hidden;transform:translate3d(100%,0,0)}}.slideOutRight{animation-name:slideOutRight}@keyframes slideOutUp{from{transform:translate3d(0,0,0)}to{visibility:hidden;transform:translate3d(0,-100%,0)}}.slideOutUp{animation-name:slideOutUp}"
  },
  {
    "path": "public/frontend/plugins/bootstrap3/css/bootstrap-theme.css",
    "content": "/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);\n}\n.btn-default:active,\n.btn-primary:active,\n.btn-success:active,\n.btn-info:active,\n.btn-warning:active,\n.btn-danger:active,\n.btn-default.active,\n.btn-primary.active,\n.btn-success.active,\n.btn-info.active,\n.btn-warning.active,\n.btn-danger.active {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n}\n.btn-default.disabled,\n.btn-primary.disabled,\n.btn-success.disabled,\n.btn-info.disabled,\n.btn-warning.disabled,\n.btn-danger.disabled,\n.btn-default[disabled],\n.btn-primary[disabled],\n.btn-success[disabled],\n.btn-info[disabled],\n.btn-warning[disabled],\n.btn-danger[disabled],\nfieldset[disabled] .btn-default,\nfieldset[disabled] .btn-primary,\nfieldset[disabled] .btn-success,\nfieldset[disabled] .btn-info,\nfieldset[disabled] .btn-warning,\nfieldset[disabled] .btn-danger {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.btn-default .badge,\n.btn-primary .badge,\n.btn-success .badge,\n.btn-info .badge,\n.btn-warning .badge,\n.btn-danger .badge {\n  text-shadow: none;\n}\n.btn:active,\n.btn.active {\n  background-image: none;\n}\n.btn-default {\n  text-shadow: 0 1px 0 #fff;\n  background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n  background-image:      -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));\n  background-image:         linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #dbdbdb;\n  border-color: #ccc;\n}\n.btn-default:hover,\n.btn-default:focus {\n  background-color: #e0e0e0;\n  background-position: 0 -15px;\n}\n.btn-default:active,\n.btn-default.active {\n  background-color: #e0e0e0;\n  border-color: #dbdbdb;\n}\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n  background-color: #e0e0e0;\n  background-image: none;\n}\n.btn-primary {\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #265a88 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #265a88 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #245580;\n}\n.btn-primary:hover,\n.btn-primary:focus {\n  background-color: #265a88;\n  background-position: 0 -15px;\n}\n.btn-primary:active,\n.btn-primary.active {\n  background-color: #265a88;\n  border-color: #245580;\n}\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n  background-color: #265a88;\n  background-image: none;\n}\n.btn-success {\n  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);\n  background-image:      -o-linear-gradient(top, #5cb85c 0%, #419641 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));\n  background-image:         linear-gradient(to bottom, #5cb85c 0%, #419641 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #3e8f3e;\n}\n.btn-success:hover,\n.btn-success:focus {\n  background-color: #419641;\n  background-position: 0 -15px;\n}\n.btn-success:active,\n.btn-success.active {\n  background-color: #419641;\n  border-color: #3e8f3e;\n}\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n  background-color: #419641;\n  background-image: none;\n}\n.btn-info {\n  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n  background-image:      -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));\n  background-image:         linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #28a4c9;\n}\n.btn-info:hover,\n.btn-info:focus {\n  background-color: #2aabd2;\n  background-position: 0 -15px;\n}\n.btn-info:active,\n.btn-info.active {\n  background-color: #2aabd2;\n  border-color: #28a4c9;\n}\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n  background-color: #2aabd2;\n  background-image: none;\n}\n.btn-warning {\n  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n  background-image:      -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));\n  background-image:         linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #e38d13;\n}\n.btn-warning:hover,\n.btn-warning:focus {\n  background-color: #eb9316;\n  background-position: 0 -15px;\n}\n.btn-warning:active,\n.btn-warning.active {\n  background-color: #eb9316;\n  border-color: #e38d13;\n}\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n  background-color: #eb9316;\n  background-image: none;\n}\n.btn-danger {\n  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n  background-image:      -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));\n  background-image:         linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #b92c28;\n}\n.btn-danger:hover,\n.btn-danger:focus {\n  background-color: #c12e2a;\n  background-position: 0 -15px;\n}\n.btn-danger:active,\n.btn-danger.active {\n  background-color: #c12e2a;\n  border-color: #b92c28;\n}\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n  background-color: #c12e2a;\n  background-image: none;\n}\n.thumbnail,\n.img-thumbnail {\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);\n          box-shadow: 0 1px 2px rgba(0, 0, 0, .075);\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  background-color: #e8e8e8;\n  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image:      -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));\n  background-image:         linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n  background-repeat: repeat-x;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  background-color: #2e6da4;\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n  background-repeat: repeat-x;\n}\n.navbar-default {\n  background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);\n  background-image:      -o-linear-gradient(top, #fff 0%, #f8f8f8 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));\n  background-image:         linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .active > a {\n  background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n  background-image:      -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2));\n  background-image:         linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);\n  background-repeat: repeat-x;\n  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);\n}\n.navbar-brand,\n.navbar-nav > li > a {\n  text-shadow: 0 1px 0 rgba(255, 255, 255, .25);\n}\n.navbar-inverse {\n  background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);\n  background-image:      -o-linear-gradient(top, #3c3c3c 0%, #222 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));\n  background-image:         linear-gradient(to bottom, #3c3c3c 0%, #222 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-radius: 4px;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .active > a {\n  background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n  background-image:      -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f));\n  background-image:         linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);\n  background-repeat: repeat-x;\n  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);\n          box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);\n}\n.navbar-inverse .navbar-brand,\n.navbar-inverse .navbar-nav > li > a {\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);\n}\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  border-radius: 0;\n}\n@media (max-width: 767px) {\n  .navbar .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #fff;\n    background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n    background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n    background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));\n    background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n    background-repeat: repeat-x;\n  }\n}\n.alert {\n  text-shadow: 0 1px 0 rgba(255, 255, 255, .2);\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);\n}\n.alert-success {\n  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n  background-image:      -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));\n  background-image:         linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #b2dba1;\n}\n.alert-info {\n  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n  background-image:      -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));\n  background-image:         linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #9acfea;\n}\n.alert-warning {\n  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n  background-image:      -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));\n  background-image:         linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #f5e79e;\n}\n.alert-danger {\n  background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n  background-image:      -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));\n  background-image:         linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #dca7a7;\n}\n.progress {\n  background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n  background-image:      -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));\n  background-image:         linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar {\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #286090 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #286090 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-success {\n  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n  background-image:      -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));\n  background-image:         linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-info {\n  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n  background-image:      -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));\n  background-image:         linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-warning {\n  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n  background-image:      -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));\n  background-image:         linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-danger {\n  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n  background-image:      -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));\n  background-image:         linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-striped {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.list-group {\n  border-radius: 4px;\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);\n          box-shadow: 0 1px 2px rgba(0, 0, 0, .075);\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n  text-shadow: 0 -1px 0 #286090;\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #2b669a;\n}\n.list-group-item.active .badge,\n.list-group-item.active:hover .badge,\n.list-group-item.active:focus .badge {\n  text-shadow: none;\n}\n.panel {\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);\n          box-shadow: 0 1px 2px rgba(0, 0, 0, .05);\n}\n.panel-default > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image:      -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));\n  background-image:         linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-primary > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-success > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n  background-image:      -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));\n  background-image:         linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-info > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n  background-image:      -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));\n  background-image:         linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-warning > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n  background-image:      -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));\n  background-image:         linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-danger > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n  background-image:      -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));\n  background-image:         linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);\n  background-repeat: repeat-x;\n}\n.well {\n  background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n  background-image:      -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));\n  background-image:         linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #dcdcdc;\n  -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);\n          box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);\n}\n/*# sourceMappingURL=bootstrap-theme.css.map */\n"
  },
  {
    "path": "public/frontend/plugins/bootstrap3/css/bootstrap.css",
    "content": "/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\nhtml {\n  font-family: sans-serif;\n  -webkit-text-size-adjust: 100%;\n      -ms-text-size-adjust: 100%;\n}\nbody {\n  margin: 0;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n  display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n  display: inline-block;\n  vertical-align: baseline;\n}\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n[hidden],\ntemplate {\n  display: none;\n}\na {\n  background-color: transparent;\n}\na:active,\na:hover {\n  outline: 0;\n}\nabbr[title] {\n  border-bottom: 1px dotted;\n}\nb,\nstrong {\n  font-weight: bold;\n}\ndfn {\n  font-style: italic;\n}\nh1 {\n  margin: .67em 0;\n  font-size: 2em;\n}\nmark {\n  color: #000;\n  background: #ff0;\n}\nsmall {\n  font-size: 80%;\n}\nsub,\nsup {\n  position: relative;\n  font-size: 75%;\n  line-height: 0;\n  vertical-align: baseline;\n}\nsup {\n  top: -.5em;\n}\nsub {\n  bottom: -.25em;\n}\nimg {\n  border: 0;\n}\nsvg:not(:root) {\n  overflow: hidden;\n}\nfigure {\n  margin: 1em 40px;\n}\nhr {\n  height: 0;\n  -webkit-box-sizing: content-box;\n     -moz-box-sizing: content-box;\n          box-sizing: content-box;\n}\npre {\n  overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  margin: 0;\n  font: inherit;\n  color: inherit;\n}\nbutton {\n  overflow: visible;\n}\nbutton,\nselect {\n  text-transform: none;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  -webkit-appearance: button;\n  cursor: pointer;\n}\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  padding: 0;\n  border: 0;\n}\ninput {\n  line-height: normal;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n  padding: 0;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\ninput[type=\"search\"] {\n  -webkit-box-sizing: content-box;\n     -moz-box-sizing: content-box;\n          box-sizing: content-box;\n  -webkit-appearance: textfield;\n}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\nfieldset {\n  padding: .35em .625em .75em;\n  margin: 0 2px;\n  border: 1px solid #c0c0c0;\n}\nlegend {\n  padding: 0;\n  border: 0;\n}\ntextarea {\n  overflow: auto;\n}\noptgroup {\n  font-weight: bold;\n}\ntable {\n  border-spacing: 0;\n  border-collapse: collapse;\n}\ntd,\nth {\n  padding: 0;\n}\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n@media print {\n  *,\n  *:before,\n  *:after {\n    color: #000 !important;\n    text-shadow: none !important;\n    background: transparent !important;\n    -webkit-box-shadow: none !important;\n            box-shadow: none !important;\n  }\n  a,\n  a:visited {\n    text-decoration: underline;\n  }\n  a[href]:after {\n    content: \" (\" attr(href) \")\";\n  }\n  abbr[title]:after {\n    content: \" (\" attr(title) \")\";\n  }\n  a[href^=\"#\"]:after,\n  a[href^=\"javascript:\"]:after {\n    content: \"\";\n  }\n  pre,\n  blockquote {\n    border: 1px solid #999;\n\n    page-break-inside: avoid;\n  }\n  thead {\n    display: table-header-group;\n  }\n  tr,\n  img {\n    page-break-inside: avoid;\n  }\n  img {\n    max-width: 100% !important;\n  }\n  p,\n  h2,\n  h3 {\n    orphans: 3;\n    widows: 3;\n  }\n  h2,\n  h3 {\n    page-break-after: avoid;\n  }\n  .navbar {\n    display: none;\n  }\n  .btn > .caret,\n  .dropup > .btn > .caret {\n    border-top-color: #000 !important;\n  }\n  .label {\n    border: 1px solid #000;\n  }\n  .table {\n    border-collapse: collapse !important;\n  }\n  .table td,\n  .table th {\n    background-color: #fff !important;\n  }\n  .table-bordered th,\n  .table-bordered td {\n    border: 1px solid #ddd !important;\n  }\n}\n@font-face {\n  font-family: 'Glyphicons Halflings';\n\n  src: url('../fonts/glyphicons-halflings-regular.eot');\n  src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');\n}\n.glyphicon {\n  position: relative;\n  top: 1px;\n  display: inline-block;\n  font-family: 'Glyphicons Halflings';\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1;\n\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n.glyphicon-asterisk:before {\n  content: \"\\002a\";\n}\n.glyphicon-plus:before {\n  content: \"\\002b\";\n}\n.glyphicon-euro:before,\n.glyphicon-eur:before {\n  content: \"\\20ac\";\n}\n.glyphicon-minus:before {\n  content: \"\\2212\";\n}\n.glyphicon-cloud:before {\n  content: \"\\2601\";\n}\n.glyphicon-envelope:before {\n  content: \"\\2709\";\n}\n.glyphicon-pencil:before {\n  content: \"\\270f\";\n}\n.glyphicon-glass:before {\n  content: \"\\e001\";\n}\n.glyphicon-music:before {\n  content: \"\\e002\";\n}\n.glyphicon-search:before {\n  content: \"\\e003\";\n}\n.glyphicon-heart:before {\n  content: \"\\e005\";\n}\n.glyphicon-star:before {\n  content: \"\\e006\";\n}\n.glyphicon-star-empty:before {\n  content: \"\\e007\";\n}\n.glyphicon-user:before {\n  content: \"\\e008\";\n}\n.glyphicon-film:before {\n  content: \"\\e009\";\n}\n.glyphicon-th-large:before {\n  content: \"\\e010\";\n}\n.glyphicon-th:before {\n  content: \"\\e011\";\n}\n.glyphicon-th-list:before {\n  content: \"\\e012\";\n}\n.glyphicon-ok:before {\n  content: \"\\e013\";\n}\n.glyphicon-remove:before {\n  content: \"\\e014\";\n}\n.glyphicon-zoom-in:before {\n  content: \"\\e015\";\n}\n.glyphicon-zoom-out:before {\n  content: \"\\e016\";\n}\n.glyphicon-off:before {\n  content: \"\\e017\";\n}\n.glyphicon-signal:before {\n  content: \"\\e018\";\n}\n.glyphicon-cog:before {\n  content: \"\\e019\";\n}\n.glyphicon-trash:before {\n  content: \"\\e020\";\n}\n.glyphicon-home:before {\n  content: \"\\e021\";\n}\n.glyphicon-file:before {\n  content: \"\\e022\";\n}\n.glyphicon-time:before {\n  content: \"\\e023\";\n}\n.glyphicon-road:before {\n  content: \"\\e024\";\n}\n.glyphicon-download-alt:before {\n  content: \"\\e025\";\n}\n.glyphicon-download:before {\n  content: \"\\e026\";\n}\n.glyphicon-upload:before {\n  content: \"\\e027\";\n}\n.glyphicon-inbox:before {\n  content: \"\\e028\";\n}\n.glyphicon-play-circle:before {\n  content: \"\\e029\";\n}\n.glyphicon-repeat:before {\n  content: \"\\e030\";\n}\n.glyphicon-refresh:before {\n  content: \"\\e031\";\n}\n.glyphicon-list-alt:before {\n  content: \"\\e032\";\n}\n.glyphicon-lock:before {\n  content: \"\\e033\";\n}\n.glyphicon-flag:before {\n  content: \"\\e034\";\n}\n.glyphicon-headphones:before {\n  content: \"\\e035\";\n}\n.glyphicon-volume-off:before {\n  content: \"\\e036\";\n}\n.glyphicon-volume-down:before {\n  content: \"\\e037\";\n}\n.glyphicon-volume-up:before {\n  content: \"\\e038\";\n}\n.glyphicon-qrcode:before {\n  content: \"\\e039\";\n}\n.glyphicon-barcode:before {\n  content: \"\\e040\";\n}\n.glyphicon-tag:before {\n  content: \"\\e041\";\n}\n.glyphicon-tags:before {\n  content: \"\\e042\";\n}\n.glyphicon-book:before {\n  content: \"\\e043\";\n}\n.glyphicon-bookmark:before {\n  content: \"\\e044\";\n}\n.glyphicon-print:before {\n  content: \"\\e045\";\n}\n.glyphicon-camera:before {\n  content: \"\\e046\";\n}\n.glyphicon-font:before {\n  content: \"\\e047\";\n}\n.glyphicon-bold:before {\n  content: \"\\e048\";\n}\n.glyphicon-italic:before {\n  content: \"\\e049\";\n}\n.glyphicon-text-height:before {\n  content: \"\\e050\";\n}\n.glyphicon-text-width:before {\n  content: \"\\e051\";\n}\n.glyphicon-align-left:before {\n  content: \"\\e052\";\n}\n.glyphicon-align-center:before {\n  content: \"\\e053\";\n}\n.glyphicon-align-right:before {\n  content: \"\\e054\";\n}\n.glyphicon-align-justify:before {\n  content: \"\\e055\";\n}\n.glyphicon-list:before {\n  content: \"\\e056\";\n}\n.glyphicon-indent-left:before {\n  content: \"\\e057\";\n}\n.glyphicon-indent-right:before {\n  content: \"\\e058\";\n}\n.glyphicon-facetime-video:before {\n  content: \"\\e059\";\n}\n.glyphicon-picture:before {\n  content: \"\\e060\";\n}\n.glyphicon-map-marker:before {\n  content: \"\\e062\";\n}\n.glyphicon-adjust:before {\n  content: \"\\e063\";\n}\n.glyphicon-tint:before {\n  content: \"\\e064\";\n}\n.glyphicon-edit:before {\n  content: \"\\e065\";\n}\n.glyphicon-share:before {\n  content: \"\\e066\";\n}\n.glyphicon-check:before {\n  content: \"\\e067\";\n}\n.glyphicon-move:before {\n  content: \"\\e068\";\n}\n.glyphicon-step-backward:before {\n  content: \"\\e069\";\n}\n.glyphicon-fast-backward:before {\n  content: \"\\e070\";\n}\n.glyphicon-backward:before {\n  content: \"\\e071\";\n}\n.glyphicon-play:before {\n  content: \"\\e072\";\n}\n.glyphicon-pause:before {\n  content: \"\\e073\";\n}\n.glyphicon-stop:before {\n  content: \"\\e074\";\n}\n.glyphicon-forward:before {\n  content: \"\\e075\";\n}\n.glyphicon-fast-forward:before {\n  content: \"\\e076\";\n}\n.glyphicon-step-forward:before {\n  content: \"\\e077\";\n}\n.glyphicon-eject:before {\n  content: \"\\e078\";\n}\n.glyphicon-chevron-left:before {\n  content: \"\\e079\";\n}\n.glyphicon-chevron-right:before {\n  content: \"\\e080\";\n}\n.glyphicon-plus-sign:before {\n  content: \"\\e081\";\n}\n.glyphicon-minus-sign:before {\n  content: \"\\e082\";\n}\n.glyphicon-remove-sign:before {\n  content: \"\\e083\";\n}\n.glyphicon-ok-sign:before {\n  content: \"\\e084\";\n}\n.glyphicon-question-sign:before {\n  content: \"\\e085\";\n}\n.glyphicon-info-sign:before {\n  content: \"\\e086\";\n}\n.glyphicon-screenshot:before {\n  content: \"\\e087\";\n}\n.glyphicon-remove-circle:before {\n  content: \"\\e088\";\n}\n.glyphicon-ok-circle:before {\n  content: \"\\e089\";\n}\n.glyphicon-ban-circle:before {\n  content: \"\\e090\";\n}\n.glyphicon-arrow-left:before {\n  content: \"\\e091\";\n}\n.glyphicon-arrow-right:before {\n  content: \"\\e092\";\n}\n.glyphicon-arrow-up:before {\n  content: \"\\e093\";\n}\n.glyphicon-arrow-down:before {\n  content: \"\\e094\";\n}\n.glyphicon-share-alt:before {\n  content: \"\\e095\";\n}\n.glyphicon-resize-full:before {\n  content: \"\\e096\";\n}\n.glyphicon-resize-small:before {\n  content: \"\\e097\";\n}\n.glyphicon-exclamation-sign:before {\n  content: \"\\e101\";\n}\n.glyphicon-gift:before {\n  content: \"\\e102\";\n}\n.glyphicon-leaf:before {\n  content: \"\\e103\";\n}\n.glyphicon-fire:before {\n  content: \"\\e104\";\n}\n.glyphicon-eye-open:before {\n  content: \"\\e105\";\n}\n.glyphicon-eye-close:before {\n  content: \"\\e106\";\n}\n.glyphicon-warning-sign:before {\n  content: \"\\e107\";\n}\n.glyphicon-plane:before {\n  content: \"\\e108\";\n}\n.glyphicon-calendar:before {\n  content: \"\\e109\";\n}\n.glyphicon-random:before {\n  content: \"\\e110\";\n}\n.glyphicon-comment:before {\n  content: \"\\e111\";\n}\n.glyphicon-magnet:before {\n  content: \"\\e112\";\n}\n.glyphicon-chevron-up:before {\n  content: \"\\e113\";\n}\n.glyphicon-chevron-down:before {\n  content: \"\\e114\";\n}\n.glyphicon-retweet:before {\n  content: \"\\e115\";\n}\n.glyphicon-shopping-cart:before {\n  content: \"\\e116\";\n}\n.glyphicon-folder-close:before {\n  content: \"\\e117\";\n}\n.glyphicon-folder-open:before {\n  content: \"\\e118\";\n}\n.glyphicon-resize-vertical:before {\n  content: \"\\e119\";\n}\n.glyphicon-resize-horizontal:before {\n  content: \"\\e120\";\n}\n.glyphicon-hdd:before {\n  content: \"\\e121\";\n}\n.glyphicon-bullhorn:before {\n  content: \"\\e122\";\n}\n.glyphicon-bell:before {\n  content: \"\\e123\";\n}\n.glyphicon-certificate:before {\n  content: \"\\e124\";\n}\n.glyphicon-thumbs-up:before {\n  content: \"\\e125\";\n}\n.glyphicon-thumbs-down:before {\n  content: \"\\e126\";\n}\n.glyphicon-hand-right:before {\n  content: \"\\e127\";\n}\n.glyphicon-hand-left:before {\n  content: \"\\e128\";\n}\n.glyphicon-hand-up:before {\n  content: \"\\e129\";\n}\n.glyphicon-hand-down:before {\n  content: \"\\e130\";\n}\n.glyphicon-circle-arrow-right:before {\n  content: \"\\e131\";\n}\n.glyphicon-circle-arrow-left:before {\n  content: \"\\e132\";\n}\n.glyphicon-circle-arrow-up:before {\n  content: \"\\e133\";\n}\n.glyphicon-circle-arrow-down:before {\n  content: \"\\e134\";\n}\n.glyphicon-globe:before {\n  content: \"\\e135\";\n}\n.glyphicon-wrench:before {\n  content: \"\\e136\";\n}\n.glyphicon-tasks:before {\n  content: \"\\e137\";\n}\n.glyphicon-filter:before {\n  content: \"\\e138\";\n}\n.glyphicon-briefcase:before {\n  content: \"\\e139\";\n}\n.glyphicon-fullscreen:before {\n  content: \"\\e140\";\n}\n.glyphicon-dashboard:before {\n  content: \"\\e141\";\n}\n.glyphicon-paperclip:before {\n  content: \"\\e142\";\n}\n.glyphicon-heart-empty:before {\n  content: \"\\e143\";\n}\n.glyphicon-link:before {\n  content: \"\\e144\";\n}\n.glyphicon-phone:before {\n  content: \"\\e145\";\n}\n.glyphicon-pushpin:before {\n  content: \"\\e146\";\n}\n.glyphicon-usd:before {\n  content: \"\\e148\";\n}\n.glyphicon-gbp:before {\n  content: \"\\e149\";\n}\n.glyphicon-sort:before {\n  content: \"\\e150\";\n}\n.glyphicon-sort-by-alphabet:before {\n  content: \"\\e151\";\n}\n.glyphicon-sort-by-alphabet-alt:before {\n  content: \"\\e152\";\n}\n.glyphicon-sort-by-order:before {\n  content: \"\\e153\";\n}\n.glyphicon-sort-by-order-alt:before {\n  content: \"\\e154\";\n}\n.glyphicon-sort-by-attributes:before {\n  content: \"\\e155\";\n}\n.glyphicon-sort-by-attributes-alt:before {\n  content: \"\\e156\";\n}\n.glyphicon-unchecked:before {\n  content: \"\\e157\";\n}\n.glyphicon-expand:before {\n  content: \"\\e158\";\n}\n.glyphicon-collapse-down:before {\n  content: \"\\e159\";\n}\n.glyphicon-collapse-up:before {\n  content: \"\\e160\";\n}\n.glyphicon-log-in:before {\n  content: \"\\e161\";\n}\n.glyphicon-flash:before {\n  content: \"\\e162\";\n}\n.glyphicon-log-out:before {\n  content: \"\\e163\";\n}\n.glyphicon-new-window:before {\n  content: \"\\e164\";\n}\n.glyphicon-record:before {\n  content: \"\\e165\";\n}\n.glyphicon-save:before {\n  content: \"\\e166\";\n}\n.glyphicon-open:before {\n  content: \"\\e167\";\n}\n.glyphicon-saved:before {\n  content: \"\\e168\";\n}\n.glyphicon-import:before {\n  content: \"\\e169\";\n}\n.glyphicon-export:before {\n  content: \"\\e170\";\n}\n.glyphicon-send:before {\n  content: \"\\e171\";\n}\n.glyphicon-floppy-disk:before {\n  content: \"\\e172\";\n}\n.glyphicon-floppy-saved:before {\n  content: \"\\e173\";\n}\n.glyphicon-floppy-remove:before {\n  content: \"\\e174\";\n}\n.glyphicon-floppy-save:before {\n  content: \"\\e175\";\n}\n.glyphicon-floppy-open:before {\n  content: \"\\e176\";\n}\n.glyphicon-credit-card:before {\n  content: \"\\e177\";\n}\n.glyphicon-transfer:before {\n  content: \"\\e178\";\n}\n.glyphicon-cutlery:before {\n  content: \"\\e179\";\n}\n.glyphicon-header:before {\n  content: \"\\e180\";\n}\n.glyphicon-compressed:before {\n  content: \"\\e181\";\n}\n.glyphicon-earphone:before {\n  content: \"\\e182\";\n}\n.glyphicon-phone-alt:before {\n  content: \"\\e183\";\n}\n.glyphicon-tower:before {\n  content: \"\\e184\";\n}\n.glyphicon-stats:before {\n  content: \"\\e185\";\n}\n.glyphicon-sd-video:before {\n  content: \"\\e186\";\n}\n.glyphicon-hd-video:before {\n  content: \"\\e187\";\n}\n.glyphicon-subtitles:before {\n  content: \"\\e188\";\n}\n.glyphicon-sound-stereo:before {\n  content: \"\\e189\";\n}\n.glyphicon-sound-dolby:before {\n  content: \"\\e190\";\n}\n.glyphicon-sound-5-1:before {\n  content: \"\\e191\";\n}\n.glyphicon-sound-6-1:before {\n  content: \"\\e192\";\n}\n.glyphicon-sound-7-1:before {\n  content: \"\\e193\";\n}\n.glyphicon-copyright-mark:before {\n  content: \"\\e194\";\n}\n.glyphicon-registration-mark:before {\n  content: \"\\e195\";\n}\n.glyphicon-cloud-download:before {\n  content: \"\\e197\";\n}\n.glyphicon-cloud-upload:before {\n  content: \"\\e198\";\n}\n.glyphicon-tree-conifer:before {\n  content: \"\\e199\";\n}\n.glyphicon-tree-deciduous:before {\n  content: \"\\e200\";\n}\n.glyphicon-cd:before {\n  content: \"\\e201\";\n}\n.glyphicon-save-file:before {\n  content: \"\\e202\";\n}\n.glyphicon-open-file:before {\n  content: \"\\e203\";\n}\n.glyphicon-level-up:before {\n  content: \"\\e204\";\n}\n.glyphicon-copy:before {\n  content: \"\\e205\";\n}\n.glyphicon-paste:before {\n  content: \"\\e206\";\n}\n.glyphicon-alert:before {\n  content: \"\\e209\";\n}\n.glyphicon-equalizer:before {\n  content: \"\\e210\";\n}\n.glyphicon-king:before {\n  content: \"\\e211\";\n}\n.glyphicon-queen:before {\n  content: \"\\e212\";\n}\n.glyphicon-pawn:before {\n  content: \"\\e213\";\n}\n.glyphicon-bishop:before {\n  content: \"\\e214\";\n}\n.glyphicon-knight:before {\n  content: \"\\e215\";\n}\n.glyphicon-baby-formula:before {\n  content: \"\\e216\";\n}\n.glyphicon-tent:before {\n  content: \"\\26fa\";\n}\n.glyphicon-blackboard:before {\n  content: \"\\e218\";\n}\n.glyphicon-bed:before {\n  content: \"\\e219\";\n}\n.glyphicon-apple:before {\n  content: \"\\f8ff\";\n}\n.glyphicon-erase:before {\n  content: \"\\e221\";\n}\n.glyphicon-hourglass:before {\n  content: \"\\231b\";\n}\n.glyphicon-lamp:before {\n  content: \"\\e223\";\n}\n.glyphicon-duplicate:before {\n  content: \"\\e224\";\n}\n.glyphicon-piggy-bank:before {\n  content: \"\\e225\";\n}\n.glyphicon-scissors:before {\n  content: \"\\e226\";\n}\n.glyphicon-bitcoin:before {\n  content: \"\\e227\";\n}\n.glyphicon-btc:before {\n  content: \"\\e227\";\n}\n.glyphicon-xbt:before {\n  content: \"\\e227\";\n}\n.glyphicon-yen:before {\n  content: \"\\00a5\";\n}\n.glyphicon-jpy:before {\n  content: \"\\00a5\";\n}\n.glyphicon-ruble:before {\n  content: \"\\20bd\";\n}\n.glyphicon-rub:before {\n  content: \"\\20bd\";\n}\n.glyphicon-scale:before {\n  content: \"\\e230\";\n}\n.glyphicon-ice-lolly:before {\n  content: \"\\e231\";\n}\n.glyphicon-ice-lolly-tasted:before {\n  content: \"\\e232\";\n}\n.glyphicon-education:before {\n  content: \"\\e233\";\n}\n.glyphicon-option-horizontal:before {\n  content: \"\\e234\";\n}\n.glyphicon-option-vertical:before {\n  content: \"\\e235\";\n}\n.glyphicon-menu-hamburger:before {\n  content: \"\\e236\";\n}\n.glyphicon-modal-window:before {\n  content: \"\\e237\";\n}\n.glyphicon-oil:before {\n  content: \"\\e238\";\n}\n.glyphicon-grain:before {\n  content: \"\\e239\";\n}\n.glyphicon-sunglasses:before {\n  content: \"\\e240\";\n}\n.glyphicon-text-size:before {\n  content: \"\\e241\";\n}\n.glyphicon-text-color:before {\n  content: \"\\e242\";\n}\n.glyphicon-text-background:before {\n  content: \"\\e243\";\n}\n.glyphicon-object-align-top:before {\n  content: \"\\e244\";\n}\n.glyphicon-object-align-bottom:before {\n  content: \"\\e245\";\n}\n.glyphicon-object-align-horizontal:before {\n  content: \"\\e246\";\n}\n.glyphicon-object-align-left:before {\n  content: \"\\e247\";\n}\n.glyphicon-object-align-vertical:before {\n  content: \"\\e248\";\n}\n.glyphicon-object-align-right:before {\n  content: \"\\e249\";\n}\n.glyphicon-triangle-right:before {\n  content: \"\\e250\";\n}\n.glyphicon-triangle-left:before {\n  content: \"\\e251\";\n}\n.glyphicon-triangle-bottom:before {\n  content: \"\\e252\";\n}\n.glyphicon-triangle-top:before {\n  content: \"\\e253\";\n}\n.glyphicon-console:before {\n  content: \"\\e254\";\n}\n.glyphicon-superscript:before {\n  content: \"\\e255\";\n}\n.glyphicon-subscript:before {\n  content: \"\\e256\";\n}\n.glyphicon-menu-left:before {\n  content: \"\\e257\";\n}\n.glyphicon-menu-right:before {\n  content: \"\\e258\";\n}\n.glyphicon-menu-down:before {\n  content: \"\\e259\";\n}\n.glyphicon-menu-up:before {\n  content: \"\\e260\";\n}\n* {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\n*:before,\n*:after {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\nhtml {\n  font-size: 10px;\n\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #333;\n  background-color: #fff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\na {\n  color: #337ab7;\n  text-decoration: none;\n}\na:hover,\na:focus {\n  color: #23527c;\n  text-decoration: underline;\n}\na:focus {\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\nfigure {\n  margin: 0;\n}\nimg {\n  vertical-align: middle;\n}\n.img-responsive,\n.thumbnail > img,\n.thumbnail a > img,\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n  display: block;\n  max-width: 100%;\n  height: auto;\n}\n.img-rounded {\n  border-radius: 6px;\n}\n.img-thumbnail {\n  display: inline-block;\n  max-width: 100%;\n  height: auto;\n  padding: 4px;\n  line-height: 1.42857143;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n  -webkit-transition: all .2s ease-in-out;\n       -o-transition: all .2s ease-in-out;\n          transition: all .2s ease-in-out;\n}\n.img-circle {\n  border-radius: 50%;\n}\nhr {\n  margin-top: 20px;\n  margin-bottom: 20px;\n  border: 0;\n  border-top: 1px solid #eee;\n}\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n  position: static;\n  width: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  clip: auto;\n}\n[role=\"button\"] {\n  cursor: pointer;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n  font-family: inherit;\n  font-weight: 500;\n  line-height: 1.1;\n  color: inherit;\n}\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small,\n.h1 small,\n.h2 small,\n.h3 small,\n.h4 small,\n.h5 small,\n.h6 small,\nh1 .small,\nh2 .small,\nh3 .small,\nh4 .small,\nh5 .small,\nh6 .small,\n.h1 .small,\n.h2 .small,\n.h3 .small,\n.h4 .small,\n.h5 .small,\n.h6 .small {\n  font-weight: normal;\n  line-height: 1;\n  color: #777;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n  margin-top: 20px;\n  margin-bottom: 10px;\n}\nh1 small,\n.h1 small,\nh2 small,\n.h2 small,\nh3 small,\n.h3 small,\nh1 .small,\n.h1 .small,\nh2 .small,\n.h2 .small,\nh3 .small,\n.h3 .small {\n  font-size: 65%;\n}\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\nh4 small,\n.h4 small,\nh5 small,\n.h5 small,\nh6 small,\n.h6 small,\nh4 .small,\n.h4 .small,\nh5 .small,\n.h5 .small,\nh6 .small,\n.h6 .small {\n  font-size: 75%;\n}\nh1,\n.h1 {\n  font-size: 36px;\n}\nh2,\n.h2 {\n  font-size: 30px;\n}\nh3,\n.h3 {\n  font-size: 24px;\n}\nh4,\n.h4 {\n  font-size: 18px;\n}\nh5,\n.h5 {\n  font-size: 14px;\n}\nh6,\n.h6 {\n  font-size: 12px;\n}\np {\n  margin: 0 0 10px;\n}\n.lead {\n  margin-bottom: 20px;\n  font-size: 16px;\n  font-weight: 300;\n  line-height: 1.4;\n}\n@media (min-width: 768px) {\n  .lead {\n    font-size: 21px;\n  }\n}\nsmall,\n.small {\n  font-size: 85%;\n}\nmark,\n.mark {\n  padding: .2em;\n  background-color: #fcf8e3;\n}\n.text-left {\n  text-align: left;\n}\n.text-right {\n  text-align: right;\n}\n.text-center {\n  text-align: center;\n}\n.text-justify {\n  text-align: justify;\n}\n.text-nowrap {\n  white-space: nowrap;\n}\n.text-lowercase {\n  text-transform: lowercase;\n}\n.text-uppercase {\n  text-transform: uppercase;\n}\n.text-capitalize {\n  text-transform: capitalize;\n}\n.text-muted {\n  color: #777;\n}\n.text-primary {\n  color: #337ab7;\n}\na.text-primary:hover,\na.text-primary:focus {\n  color: #286090;\n}\n.text-success {\n  color: #3c763d;\n}\na.text-success:hover,\na.text-success:focus {\n  color: #2b542c;\n}\n.text-info {\n  color: #31708f;\n}\na.text-info:hover,\na.text-info:focus {\n  color: #245269;\n}\n.text-warning {\n  color: #8a6d3b;\n}\na.text-warning:hover,\na.text-warning:focus {\n  color: #66512c;\n}\n.text-danger {\n  color: #a94442;\n}\na.text-danger:hover,\na.text-danger:focus {\n  color: #843534;\n}\n.bg-primary {\n  color: #fff;\n  background-color: #337ab7;\n}\na.bg-primary:hover,\na.bg-primary:focus {\n  background-color: #286090;\n}\n.bg-success {\n  background-color: #dff0d8;\n}\na.bg-success:hover,\na.bg-success:focus {\n  background-color: #c1e2b3;\n}\n.bg-info {\n  background-color: #d9edf7;\n}\na.bg-info:hover,\na.bg-info:focus {\n  background-color: #afd9ee;\n}\n.bg-warning {\n  background-color: #fcf8e3;\n}\na.bg-warning:hover,\na.bg-warning:focus {\n  background-color: #f7ecb5;\n}\n.bg-danger {\n  background-color: #f2dede;\n}\na.bg-danger:hover,\na.bg-danger:focus {\n  background-color: #e4b9b9;\n}\n.page-header {\n  padding-bottom: 9px;\n  margin: 40px 0 20px;\n  border-bottom: 1px solid #eee;\n}\nul,\nol {\n  margin-top: 0;\n  margin-bottom: 10px;\n}\nul ul,\nol ul,\nul ol,\nol ol {\n  margin-bottom: 0;\n}\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n.list-inline {\n  padding-left: 0;\n  margin-left: -5px;\n  list-style: none;\n}\n.list-inline > li {\n  display: inline-block;\n  padding-right: 5px;\n  padding-left: 5px;\n}\ndl {\n  margin-top: 0;\n  margin-bottom: 20px;\n}\ndt,\ndd {\n  line-height: 1.42857143;\n}\ndt {\n  font-weight: bold;\n}\ndd {\n  margin-left: 0;\n}\n@media (min-width: 768px) {\n  .dl-horizontal dt {\n    float: left;\n    width: 160px;\n    overflow: hidden;\n    clear: left;\n    text-align: right;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n  }\n  .dl-horizontal dd {\n    margin-left: 180px;\n  }\n}\nabbr[title],\nabbr[data-original-title] {\n  cursor: help;\n  border-bottom: 1px dotted #777;\n}\n.initialism {\n  font-size: 90%;\n  text-transform: uppercase;\n}\nblockquote {\n  padding: 10px 20px;\n  margin: 0 0 20px;\n  font-size: 17.5px;\n  border-left: 5px solid #eee;\n}\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n  margin-bottom: 0;\n}\nblockquote footer,\nblockquote small,\nblockquote .small {\n  display: block;\n  font-size: 80%;\n  line-height: 1.42857143;\n  color: #777;\n}\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n  content: '\\2014 \\00A0';\n}\n.blockquote-reverse,\nblockquote.pull-right {\n  padding-right: 15px;\n  padding-left: 0;\n  text-align: right;\n  border-right: 5px solid #eee;\n  border-left: 0;\n}\n.blockquote-reverse footer:before,\nblockquote.pull-right footer:before,\n.blockquote-reverse small:before,\nblockquote.pull-right small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right .small:before {\n  content: '';\n}\n.blockquote-reverse footer:after,\nblockquote.pull-right footer:after,\n.blockquote-reverse small:after,\nblockquote.pull-right small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right .small:after {\n  content: '\\00A0 \\2014';\n}\naddress {\n  margin-bottom: 20px;\n  font-style: normal;\n  line-height: 1.42857143;\n}\ncode,\nkbd,\npre,\nsamp {\n  font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\ncode {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #c7254e;\n  background-color: #f9f2f4;\n  border-radius: 4px;\n}\nkbd {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #fff;\n  background-color: #333;\n  border-radius: 3px;\n  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);\n          box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);\n}\nkbd kbd {\n  padding: 0;\n  font-size: 100%;\n  font-weight: bold;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\npre {\n  display: block;\n  padding: 9.5px;\n  margin: 0 0 10px;\n  font-size: 13px;\n  line-height: 1.42857143;\n  color: #333;\n  word-break: break-all;\n  word-wrap: break-word;\n  background-color: #f5f5f5;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n}\npre code {\n  padding: 0;\n  font-size: inherit;\n  color: inherit;\n  white-space: pre-wrap;\n  background-color: transparent;\n  border-radius: 0;\n}\n.pre-scrollable {\n  max-height: 340px;\n  overflow-y: scroll;\n}\n.container {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n@media (min-width: 768px) {\n  .container {\n    width: 750px;\n  }\n}\n@media (min-width: 992px) {\n  .container {\n    width: 970px;\n  }\n}\n@media (min-width: 1200px) {\n  .container {\n    width: 1170px;\n  }\n}\n.container-fluid {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n.row {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {\n  position: relative;\n  min-height: 1px;\n  padding-right: 15px;\n  padding-left: 15px;\n}\n.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {\n  float: left;\n}\n.col-xs-12 {\n  width: 100%;\n}\n.col-xs-11 {\n  width: 91.66666667%;\n}\n.col-xs-10 {\n  width: 83.33333333%;\n}\n.col-xs-9 {\n  width: 75%;\n}\n.col-xs-8 {\n  width: 66.66666667%;\n}\n.col-xs-7 {\n  width: 58.33333333%;\n}\n.col-xs-6 {\n  width: 50%;\n}\n.col-xs-5 {\n  width: 41.66666667%;\n}\n.col-xs-4 {\n  width: 33.33333333%;\n}\n.col-xs-3 {\n  width: 25%;\n}\n.col-xs-2 {\n  width: 16.66666667%;\n}\n.col-xs-1 {\n  width: 8.33333333%;\n}\n.col-xs-pull-12 {\n  right: 100%;\n}\n.col-xs-pull-11 {\n  right: 91.66666667%;\n}\n.col-xs-pull-10 {\n  right: 83.33333333%;\n}\n.col-xs-pull-9 {\n  right: 75%;\n}\n.col-xs-pull-8 {\n  right: 66.66666667%;\n}\n.col-xs-pull-7 {\n  right: 58.33333333%;\n}\n.col-xs-pull-6 {\n  right: 50%;\n}\n.col-xs-pull-5 {\n  right: 41.66666667%;\n}\n.col-xs-pull-4 {\n  right: 33.33333333%;\n}\n.col-xs-pull-3 {\n  right: 25%;\n}\n.col-xs-pull-2 {\n  right: 16.66666667%;\n}\n.col-xs-pull-1 {\n  right: 8.33333333%;\n}\n.col-xs-pull-0 {\n  right: auto;\n}\n.col-xs-push-12 {\n  left: 100%;\n}\n.col-xs-push-11 {\n  left: 91.66666667%;\n}\n.col-xs-push-10 {\n  left: 83.33333333%;\n}\n.col-xs-push-9 {\n  left: 75%;\n}\n.col-xs-push-8 {\n  left: 66.66666667%;\n}\n.col-xs-push-7 {\n  left: 58.33333333%;\n}\n.col-xs-push-6 {\n  left: 50%;\n}\n.col-xs-push-5 {\n  left: 41.66666667%;\n}\n.col-xs-push-4 {\n  left: 33.33333333%;\n}\n.col-xs-push-3 {\n  left: 25%;\n}\n.col-xs-push-2 {\n  left: 16.66666667%;\n}\n.col-xs-push-1 {\n  left: 8.33333333%;\n}\n.col-xs-push-0 {\n  left: auto;\n}\n.col-xs-offset-12 {\n  margin-left: 100%;\n}\n.col-xs-offset-11 {\n  margin-left: 91.66666667%;\n}\n.col-xs-offset-10 {\n  margin-left: 83.33333333%;\n}\n.col-xs-offset-9 {\n  margin-left: 75%;\n}\n.col-xs-offset-8 {\n  margin-left: 66.66666667%;\n}\n.col-xs-offset-7 {\n  margin-left: 58.33333333%;\n}\n.col-xs-offset-6 {\n  margin-left: 50%;\n}\n.col-xs-offset-5 {\n  margin-left: 41.66666667%;\n}\n.col-xs-offset-4 {\n  margin-left: 33.33333333%;\n}\n.col-xs-offset-3 {\n  margin-left: 25%;\n}\n.col-xs-offset-2 {\n  margin-left: 16.66666667%;\n}\n.col-xs-offset-1 {\n  margin-left: 8.33333333%;\n}\n.col-xs-offset-0 {\n  margin-left: 0;\n}\n@media (min-width: 768px) {\n  .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {\n    float: left;\n  }\n  .col-sm-12 {\n    width: 100%;\n  }\n  .col-sm-11 {\n    width: 91.66666667%;\n  }\n  .col-sm-10 {\n    width: 83.33333333%;\n  }\n  .col-sm-9 {\n    width: 75%;\n  }\n  .col-sm-8 {\n    width: 66.66666667%;\n  }\n  .col-sm-7 {\n    width: 58.33333333%;\n  }\n  .col-sm-6 {\n    width: 50%;\n  }\n  .col-sm-5 {\n    width: 41.66666667%;\n  }\n  .col-sm-4 {\n    width: 33.33333333%;\n  }\n  .col-sm-3 {\n    width: 25%;\n  }\n  .col-sm-2 {\n    width: 16.66666667%;\n  }\n  .col-sm-1 {\n    width: 8.33333333%;\n  }\n  .col-sm-pull-12 {\n    right: 100%;\n  }\n  .col-sm-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-sm-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-sm-pull-9 {\n    right: 75%;\n  }\n  .col-sm-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-sm-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-sm-pull-6 {\n    right: 50%;\n  }\n  .col-sm-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-sm-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-sm-pull-3 {\n    right: 25%;\n  }\n  .col-sm-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-sm-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-sm-pull-0 {\n    right: auto;\n  }\n  .col-sm-push-12 {\n    left: 100%;\n  }\n  .col-sm-push-11 {\n    left: 91.66666667%;\n  }\n  .col-sm-push-10 {\n    left: 83.33333333%;\n  }\n  .col-sm-push-9 {\n    left: 75%;\n  }\n  .col-sm-push-8 {\n    left: 66.66666667%;\n  }\n  .col-sm-push-7 {\n    left: 58.33333333%;\n  }\n  .col-sm-push-6 {\n    left: 50%;\n  }\n  .col-sm-push-5 {\n    left: 41.66666667%;\n  }\n  .col-sm-push-4 {\n    left: 33.33333333%;\n  }\n  .col-sm-push-3 {\n    left: 25%;\n  }\n  .col-sm-push-2 {\n    left: 16.66666667%;\n  }\n  .col-sm-push-1 {\n    left: 8.33333333%;\n  }\n  .col-sm-push-0 {\n    left: auto;\n  }\n  .col-sm-offset-12 {\n    margin-left: 100%;\n  }\n  .col-sm-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-sm-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-sm-offset-9 {\n    margin-left: 75%;\n  }\n  .col-sm-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-sm-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-sm-offset-6 {\n    margin-left: 50%;\n  }\n  .col-sm-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-sm-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-sm-offset-3 {\n    margin-left: 25%;\n  }\n  .col-sm-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-sm-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-sm-offset-0 {\n    margin-left: 0;\n  }\n}\n@media (min-width: 992px) {\n  .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {\n    float: left;\n  }\n  .col-md-12 {\n    width: 100%;\n  }\n  .col-md-11 {\n    width: 91.66666667%;\n  }\n  .col-md-10 {\n    width: 83.33333333%;\n  }\n  .col-md-9 {\n    width: 75%;\n  }\n  .col-md-8 {\n    width: 66.66666667%;\n  }\n  .col-md-7 {\n    width: 58.33333333%;\n  }\n  .col-md-6 {\n    width: 50%;\n  }\n  .col-md-5 {\n    width: 41.66666667%;\n  }\n  .col-md-4 {\n    width: 33.33333333%;\n  }\n  .col-md-3 {\n    width: 25%;\n  }\n  .col-md-2 {\n    width: 16.66666667%;\n  }\n  .col-md-1 {\n    width: 8.33333333%;\n  }\n  .col-md-pull-12 {\n    right: 100%;\n  }\n  .col-md-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-md-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-md-pull-9 {\n    right: 75%;\n  }\n  .col-md-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-md-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-md-pull-6 {\n    right: 50%;\n  }\n  .col-md-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-md-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-md-pull-3 {\n    right: 25%;\n  }\n  .col-md-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-md-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-md-pull-0 {\n    right: auto;\n  }\n  .col-md-push-12 {\n    left: 100%;\n  }\n  .col-md-push-11 {\n    left: 91.66666667%;\n  }\n  .col-md-push-10 {\n    left: 83.33333333%;\n  }\n  .col-md-push-9 {\n    left: 75%;\n  }\n  .col-md-push-8 {\n    left: 66.66666667%;\n  }\n  .col-md-push-7 {\n    left: 58.33333333%;\n  }\n  .col-md-push-6 {\n    left: 50%;\n  }\n  .col-md-push-5 {\n    left: 41.66666667%;\n  }\n  .col-md-push-4 {\n    left: 33.33333333%;\n  }\n  .col-md-push-3 {\n    left: 25%;\n  }\n  .col-md-push-2 {\n    left: 16.66666667%;\n  }\n  .col-md-push-1 {\n    left: 8.33333333%;\n  }\n  .col-md-push-0 {\n    left: auto;\n  }\n  .col-md-offset-12 {\n    margin-left: 100%;\n  }\n  .col-md-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-md-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-md-offset-9 {\n    margin-left: 75%;\n  }\n  .col-md-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-md-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-md-offset-6 {\n    margin-left: 50%;\n  }\n  .col-md-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-md-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-md-offset-3 {\n    margin-left: 25%;\n  }\n  .col-md-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-md-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-md-offset-0 {\n    margin-left: 0;\n  }\n}\n@media (min-width: 1200px) {\n  .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {\n    float: left;\n  }\n  .col-lg-12 {\n    width: 100%;\n  }\n  .col-lg-11 {\n    width: 91.66666667%;\n  }\n  .col-lg-10 {\n    width: 83.33333333%;\n  }\n  .col-lg-9 {\n    width: 75%;\n  }\n  .col-lg-8 {\n    width: 66.66666667%;\n  }\n  .col-lg-7 {\n    width: 58.33333333%;\n  }\n  .col-lg-6 {\n    width: 50%;\n  }\n  .col-lg-5 {\n    width: 41.66666667%;\n  }\n  .col-lg-4 {\n    width: 33.33333333%;\n  }\n  .col-lg-3 {\n    width: 25%;\n  }\n  .col-lg-2 {\n    width: 16.66666667%;\n  }\n  .col-lg-1 {\n    width: 8.33333333%;\n  }\n  .col-lg-pull-12 {\n    right: 100%;\n  }\n  .col-lg-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-lg-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-lg-pull-9 {\n    right: 75%;\n  }\n  .col-lg-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-lg-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-lg-pull-6 {\n    right: 50%;\n  }\n  .col-lg-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-lg-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-lg-pull-3 {\n    right: 25%;\n  }\n  .col-lg-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-lg-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-lg-pull-0 {\n    right: auto;\n  }\n  .col-lg-push-12 {\n    left: 100%;\n  }\n  .col-lg-push-11 {\n    left: 91.66666667%;\n  }\n  .col-lg-push-10 {\n    left: 83.33333333%;\n  }\n  .col-lg-push-9 {\n    left: 75%;\n  }\n  .col-lg-push-8 {\n    left: 66.66666667%;\n  }\n  .col-lg-push-7 {\n    left: 58.33333333%;\n  }\n  .col-lg-push-6 {\n    left: 50%;\n  }\n  .col-lg-push-5 {\n    left: 41.66666667%;\n  }\n  .col-lg-push-4 {\n    left: 33.33333333%;\n  }\n  .col-lg-push-3 {\n    left: 25%;\n  }\n  .col-lg-push-2 {\n    left: 16.66666667%;\n  }\n  .col-lg-push-1 {\n    left: 8.33333333%;\n  }\n  .col-lg-push-0 {\n    left: auto;\n  }\n  .col-lg-offset-12 {\n    margin-left: 100%;\n  }\n  .col-lg-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-lg-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-lg-offset-9 {\n    margin-left: 75%;\n  }\n  .col-lg-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-lg-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-lg-offset-6 {\n    margin-left: 50%;\n  }\n  .col-lg-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-lg-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-lg-offset-3 {\n    margin-left: 25%;\n  }\n  .col-lg-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-lg-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-lg-offset-0 {\n    margin-left: 0;\n  }\n}\ntable {\n  background-color: transparent;\n}\ncaption {\n  padding-top: 8px;\n  padding-bottom: 8px;\n  color: #777;\n  text-align: left;\n}\nth {\n  text-align: left;\n}\n.table {\n  width: 100%;\n  max-width: 100%;\n  margin-bottom: 20px;\n}\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n  padding: 8px;\n  line-height: 1.42857143;\n  vertical-align: top;\n  border-top: 1px solid #ddd;\n}\n.table > thead > tr > th {\n  vertical-align: bottom;\n  border-bottom: 2px solid #ddd;\n}\n.table > caption + thead > tr:first-child > th,\n.table > colgroup + thead > tr:first-child > th,\n.table > thead:first-child > tr:first-child > th,\n.table > caption + thead > tr:first-child > td,\n.table > colgroup + thead > tr:first-child > td,\n.table > thead:first-child > tr:first-child > td {\n  border-top: 0;\n}\n.table > tbody + tbody {\n  border-top: 2px solid #ddd;\n}\n.table .table {\n  background-color: #fff;\n}\n.table-condensed > thead > tr > th,\n.table-condensed > tbody > tr > th,\n.table-condensed > tfoot > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > td {\n  padding: 5px;\n}\n.table-bordered {\n  border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n  border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n  border-bottom-width: 2px;\n}\n.table-striped > tbody > tr:nth-of-type(odd) {\n  background-color: #f9f9f9;\n}\n.table-hover > tbody > tr:hover {\n  background-color: #f5f5f5;\n}\ntable col[class*=\"col-\"] {\n  position: static;\n  display: table-column;\n  float: none;\n}\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n  position: static;\n  display: table-cell;\n  float: none;\n}\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n  background-color: #f5f5f5;\n}\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n  background-color: #e8e8e8;\n}\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n  background-color: #dff0d8;\n}\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n  background-color: #d0e9c6;\n}\n.table > thead > tr > td.info,\n.table > tbody > tr > td.info,\n.table > tfoot > tr > td.info,\n.table > thead > tr > th.info,\n.table > tbody > tr > th.info,\n.table > tfoot > tr > th.info,\n.table > thead > tr.info > td,\n.table > tbody > tr.info > td,\n.table > tfoot > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr.info > th,\n.table > tfoot > tr.info > th {\n  background-color: #d9edf7;\n}\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n  background-color: #c4e3f3;\n}\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n  background-color: #fcf8e3;\n}\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n  background-color: #faf2cc;\n}\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n  background-color: #f2dede;\n}\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n  background-color: #ebcccc;\n}\n.table-responsive {\n  min-height: .01%;\n  overflow-x: auto;\n}\n@media screen and (max-width: 767px) {\n  .table-responsive {\n    width: 100%;\n    margin-bottom: 15px;\n    overflow-y: hidden;\n    -ms-overflow-style: -ms-autohiding-scrollbar;\n    border: 1px solid #ddd;\n  }\n  .table-responsive > .table {\n    margin-bottom: 0;\n  }\n  .table-responsive > .table > thead > tr > th,\n  .table-responsive > .table > tbody > tr > th,\n  .table-responsive > .table > tfoot > tr > th,\n  .table-responsive > .table > thead > tr > td,\n  .table-responsive > .table > tbody > tr > td,\n  .table-responsive > .table > tfoot > tr > td {\n    white-space: nowrap;\n  }\n  .table-responsive > .table-bordered {\n    border: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr > th:first-child,\n  .table-responsive > .table-bordered > tbody > tr > th:first-child,\n  .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n  .table-responsive > .table-bordered > thead > tr > td:first-child,\n  .table-responsive > .table-bordered > tbody > tr > td:first-child,\n  .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n    border-left: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr > th:last-child,\n  .table-responsive > .table-bordered > tbody > tr > th:last-child,\n  .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n  .table-responsive > .table-bordered > thead > tr > td:last-child,\n  .table-responsive > .table-bordered > tbody > tr > td:last-child,\n  .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n    border-right: 0;\n  }\n  .table-responsive > .table-bordered > tbody > tr:last-child > th,\n  .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n  .table-responsive > .table-bordered > tbody > tr:last-child > td,\n  .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n    border-bottom: 0;\n  }\n}\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\nlegend {\n  display: block;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 20px;\n  font-size: 21px;\n  line-height: inherit;\n  color: #333;\n  border: 0;\n  border-bottom: 1px solid #e5e5e5;\n}\nlabel {\n  display: inline-block;\n  max-width: 100%;\n  margin-bottom: 5px;\n  font-weight: bold;\n}\ninput[type=\"search\"] {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  margin: 4px 0 0;\n  margin-top: 1px \\9;\n  line-height: normal;\n}\ninput[type=\"file\"] {\n  display: block;\n}\ninput[type=\"range\"] {\n  display: block;\n  width: 100%;\n}\nselect[multiple],\nselect[size] {\n  height: auto;\n}\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\noutput {\n  display: block;\n  padding-top: 7px;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #555;\n}\n.form-control {\n  display: block;\n  width: 100%;\n  height: 34px;\n  padding: 6px 12px;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #555;\n  background-color: #fff;\n  background-image: none;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n  -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;\n       -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n          transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.form-control:focus {\n  border-color: #66afe9;\n  outline: 0;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);\n          box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);\n}\n.form-control::-moz-placeholder {\n  color: #999;\n  opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n  color: #999;\n}\n.form-control::-webkit-input-placeholder {\n  color: #999;\n}\n.form-control::-ms-expand {\n  background-color: transparent;\n  border: 0;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n  background-color: #eee;\n  opacity: 1;\n}\n.form-control[disabled],\nfieldset[disabled] .form-control {\n  cursor: not-allowed;\n}\ntextarea.form-control {\n  height: auto;\n}\ninput[type=\"search\"] {\n  -webkit-appearance: none;\n}\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n  input[type=\"date\"].form-control,\n  input[type=\"time\"].form-control,\n  input[type=\"datetime-local\"].form-control,\n  input[type=\"month\"].form-control {\n    line-height: 34px;\n  }\n  input[type=\"date\"].input-sm,\n  input[type=\"time\"].input-sm,\n  input[type=\"datetime-local\"].input-sm,\n  input[type=\"month\"].input-sm,\n  .input-group-sm input[type=\"date\"],\n  .input-group-sm input[type=\"time\"],\n  .input-group-sm input[type=\"datetime-local\"],\n  .input-group-sm input[type=\"month\"] {\n    line-height: 30px;\n  }\n  input[type=\"date\"].input-lg,\n  input[type=\"time\"].input-lg,\n  input[type=\"datetime-local\"].input-lg,\n  input[type=\"month\"].input-lg,\n  .input-group-lg input[type=\"date\"],\n  .input-group-lg input[type=\"time\"],\n  .input-group-lg input[type=\"datetime-local\"],\n  .input-group-lg input[type=\"month\"] {\n    line-height: 46px;\n  }\n}\n.form-group {\n  margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n  position: relative;\n  display: block;\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n.radio label,\n.checkbox label {\n  min-height: 20px;\n  padding-left: 20px;\n  margin-bottom: 0;\n  font-weight: normal;\n  cursor: pointer;\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n  position: absolute;\n  margin-top: 4px \\9;\n  margin-left: -20px;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n  margin-top: -5px;\n}\n.radio-inline,\n.checkbox-inline {\n  position: relative;\n  display: inline-block;\n  padding-left: 20px;\n  margin-bottom: 0;\n  font-weight: normal;\n  vertical-align: middle;\n  cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n  margin-top: 0;\n  margin-left: 10px;\n}\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"radio\"].disabled,\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"] {\n  cursor: not-allowed;\n}\n.radio-inline.disabled,\n.checkbox-inline.disabled,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox-inline {\n  cursor: not-allowed;\n}\n.radio.disabled label,\n.checkbox.disabled label,\nfieldset[disabled] .radio label,\nfieldset[disabled] .checkbox label {\n  cursor: not-allowed;\n}\n.form-control-static {\n  min-height: 34px;\n  padding-top: 7px;\n  padding-bottom: 7px;\n  margin-bottom: 0;\n}\n.form-control-static.input-lg,\n.form-control-static.input-sm {\n  padding-right: 0;\n  padding-left: 0;\n}\n.input-sm {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\nselect.input-sm {\n  height: 30px;\n  line-height: 30px;\n}\ntextarea.input-sm,\nselect[multiple].input-sm {\n  height: auto;\n}\n.form-group-sm .form-control {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.form-group-sm select.form-control {\n  height: 30px;\n  line-height: 30px;\n}\n.form-group-sm textarea.form-control,\n.form-group-sm select[multiple].form-control {\n  height: auto;\n}\n.form-group-sm .form-control-static {\n  height: 30px;\n  min-height: 32px;\n  padding: 6px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n}\n.input-lg {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\nselect.input-lg {\n  height: 46px;\n  line-height: 46px;\n}\ntextarea.input-lg,\nselect[multiple].input-lg {\n  height: auto;\n}\n.form-group-lg .form-control {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\n.form-group-lg select.form-control {\n  height: 46px;\n  line-height: 46px;\n}\n.form-group-lg textarea.form-control,\n.form-group-lg select[multiple].form-control {\n  height: auto;\n}\n.form-group-lg .form-control-static {\n  height: 46px;\n  min-height: 38px;\n  padding: 11px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n}\n.has-feedback {\n  position: relative;\n}\n.has-feedback .form-control {\n  padding-right: 42.5px;\n}\n.form-control-feedback {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 2;\n  display: block;\n  width: 34px;\n  height: 34px;\n  line-height: 34px;\n  text-align: center;\n  pointer-events: none;\n}\n.input-lg + .form-control-feedback,\n.input-group-lg + .form-control-feedback,\n.form-group-lg .form-control + .form-control-feedback {\n  width: 46px;\n  height: 46px;\n  line-height: 46px;\n}\n.input-sm + .form-control-feedback,\n.input-group-sm + .form-control-feedback,\n.form-group-sm .form-control + .form-control-feedback {\n  width: 30px;\n  height: 30px;\n  line-height: 30px;\n}\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n  color: #3c763d;\n}\n.has-success .form-control {\n  border-color: #3c763d;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-success .form-control:focus {\n  border-color: #2b542c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;\n}\n.has-success .input-group-addon {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #3c763d;\n}\n.has-success .form-control-feedback {\n  color: #3c763d;\n}\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n  color: #8a6d3b;\n}\n.has-warning .form-control {\n  border-color: #8a6d3b;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-warning .form-control:focus {\n  border-color: #66512c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;\n}\n.has-warning .input-group-addon {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #8a6d3b;\n}\n.has-warning .form-control-feedback {\n  color: #8a6d3b;\n}\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n  color: #a94442;\n}\n.has-error .form-control {\n  border-color: #a94442;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-error .form-control:focus {\n  border-color: #843534;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;\n}\n.has-error .input-group-addon {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #a94442;\n}\n.has-error .form-control-feedback {\n  color: #a94442;\n}\n.has-feedback label ~ .form-control-feedback {\n  top: 25px;\n}\n.has-feedback label.sr-only ~ .form-control-feedback {\n  top: 0;\n}\n.help-block {\n  display: block;\n  margin-top: 5px;\n  margin-bottom: 10px;\n  color: #737373;\n}\n@media (min-width: 768px) {\n  .form-inline .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle;\n  }\n  .form-inline .form-control-static {\n    display: inline-block;\n  }\n  .form-inline .input-group {\n    display: inline-table;\n    vertical-align: middle;\n  }\n  .form-inline .input-group .input-group-addon,\n  .form-inline .input-group .input-group-btn,\n  .form-inline .input-group .form-control {\n    width: auto;\n  }\n  .form-inline .input-group > .form-control {\n    width: 100%;\n  }\n  .form-inline .control-label {\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .radio,\n  .form-inline .checkbox {\n    display: inline-block;\n    margin-top: 0;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .radio label,\n  .form-inline .checkbox label {\n    padding-left: 0;\n  }\n  .form-inline .radio input[type=\"radio\"],\n  .form-inline .checkbox input[type=\"checkbox\"] {\n    position: relative;\n    margin-left: 0;\n  }\n  .form-inline .has-feedback .form-control-feedback {\n    top: 0;\n  }\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n  padding-top: 7px;\n  margin-top: 0;\n  margin-bottom: 0;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n  min-height: 27px;\n}\n.form-horizontal .form-group {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n@media (min-width: 768px) {\n  .form-horizontal .control-label {\n    padding-top: 7px;\n    margin-bottom: 0;\n    text-align: right;\n  }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n  right: 15px;\n}\n@media (min-width: 768px) {\n  .form-horizontal .form-group-lg .control-label {\n    padding-top: 11px;\n    font-size: 18px;\n  }\n}\n@media (min-width: 768px) {\n  .form-horizontal .form-group-sm .control-label {\n    padding-top: 6px;\n    font-size: 12px;\n  }\n}\n.btn {\n  display: inline-block;\n  padding: 6px 12px;\n  margin-bottom: 0;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1.42857143;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  -ms-touch-action: manipulation;\n      touch-action: manipulation;\n  cursor: pointer;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n  background-image: none;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.btn:focus,\n.btn:active:focus,\n.btn.active:focus,\n.btn.focus,\n.btn:active.focus,\n.btn.active.focus {\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus,\n.btn.focus {\n  color: #333;\n  text-decoration: none;\n}\n.btn:active,\n.btn.active {\n  background-image: none;\n  outline: 0;\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n}\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n  cursor: not-allowed;\n  filter: alpha(opacity=65);\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  opacity: .65;\n}\na.btn.disabled,\nfieldset[disabled] a.btn {\n  pointer-events: none;\n}\n.btn-default {\n  color: #333;\n  background-color: #fff;\n  border-color: #ccc;\n}\n.btn-default:focus,\n.btn-default.focus {\n  color: #333;\n  background-color: #e6e6e6;\n  border-color: #8c8c8c;\n}\n.btn-default:hover {\n  color: #333;\n  background-color: #e6e6e6;\n  border-color: #adadad;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n  color: #333;\n  background-color: #e6e6e6;\n  border-color: #adadad;\n}\n.btn-default:active:hover,\n.btn-default.active:hover,\n.open > .dropdown-toggle.btn-default:hover,\n.btn-default:active:focus,\n.btn-default.active:focus,\n.open > .dropdown-toggle.btn-default:focus,\n.btn-default:active.focus,\n.btn-default.active.focus,\n.open > .dropdown-toggle.btn-default.focus {\n  color: #333;\n  background-color: #d4d4d4;\n  border-color: #8c8c8c;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n  background-image: none;\n}\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus {\n  background-color: #fff;\n  border-color: #ccc;\n}\n.btn-default .badge {\n  color: #fff;\n  background-color: #333;\n}\n.btn-primary {\n  color: #fff;\n  background-color: #337ab7;\n  border-color: #2e6da4;\n}\n.btn-primary:focus,\n.btn-primary.focus {\n  color: #fff;\n  background-color: #286090;\n  border-color: #122b40;\n}\n.btn-primary:hover {\n  color: #fff;\n  background-color: #286090;\n  border-color: #204d74;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n  color: #fff;\n  background-color: #286090;\n  border-color: #204d74;\n}\n.btn-primary:active:hover,\n.btn-primary.active:hover,\n.open > .dropdown-toggle.btn-primary:hover,\n.btn-primary:active:focus,\n.btn-primary.active:focus,\n.open > .dropdown-toggle.btn-primary:focus,\n.btn-primary:active.focus,\n.btn-primary.active.focus,\n.open > .dropdown-toggle.btn-primary.focus {\n  color: #fff;\n  background-color: #204d74;\n  border-color: #122b40;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n  background-image: none;\n}\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus {\n  background-color: #337ab7;\n  border-color: #2e6da4;\n}\n.btn-primary .badge {\n  color: #337ab7;\n  background-color: #fff;\n}\n.btn-success {\n  color: #fff;\n  background-color: #5cb85c;\n  border-color: #4cae4c;\n}\n.btn-success:focus,\n.btn-success.focus {\n  color: #fff;\n  background-color: #449d44;\n  border-color: #255625;\n}\n.btn-success:hover {\n  color: #fff;\n  background-color: #449d44;\n  border-color: #398439;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n  color: #fff;\n  background-color: #449d44;\n  border-color: #398439;\n}\n.btn-success:active:hover,\n.btn-success.active:hover,\n.open > .dropdown-toggle.btn-success:hover,\n.btn-success:active:focus,\n.btn-success.active:focus,\n.open > .dropdown-toggle.btn-success:focus,\n.btn-success:active.focus,\n.btn-success.active.focus,\n.open > .dropdown-toggle.btn-success.focus {\n  color: #fff;\n  background-color: #398439;\n  border-color: #255625;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n  background-image: none;\n}\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus {\n  background-color: #5cb85c;\n  border-color: #4cae4c;\n}\n.btn-success .badge {\n  color: #5cb85c;\n  background-color: #fff;\n}\n.btn-info {\n  color: #fff;\n  background-color: #5bc0de;\n  border-color: #46b8da;\n}\n.btn-info:focus,\n.btn-info.focus {\n  color: #fff;\n  background-color: #31b0d5;\n  border-color: #1b6d85;\n}\n.btn-info:hover {\n  color: #fff;\n  background-color: #31b0d5;\n  border-color: #269abc;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n  color: #fff;\n  background-color: #31b0d5;\n  border-color: #269abc;\n}\n.btn-info:active:hover,\n.btn-info.active:hover,\n.open > .dropdown-toggle.btn-info:hover,\n.btn-info:active:focus,\n.btn-info.active:focus,\n.open > .dropdown-toggle.btn-info:focus,\n.btn-info:active.focus,\n.btn-info.active.focus,\n.open > .dropdown-toggle.btn-info.focus {\n  color: #fff;\n  background-color: #269abc;\n  border-color: #1b6d85;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n  background-image: none;\n}\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus {\n  background-color: #5bc0de;\n  border-color: #46b8da;\n}\n.btn-info .badge {\n  color: #5bc0de;\n  background-color: #fff;\n}\n.btn-warning {\n  color: #fff;\n  background-color: #f0ad4e;\n  border-color: #eea236;\n}\n.btn-warning:focus,\n.btn-warning.focus {\n  color: #fff;\n  background-color: #ec971f;\n  border-color: #985f0d;\n}\n.btn-warning:hover {\n  color: #fff;\n  background-color: #ec971f;\n  border-color: #d58512;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n  color: #fff;\n  background-color: #ec971f;\n  border-color: #d58512;\n}\n.btn-warning:active:hover,\n.btn-warning.active:hover,\n.open > .dropdown-toggle.btn-warning:hover,\n.btn-warning:active:focus,\n.btn-warning.active:focus,\n.open > .dropdown-toggle.btn-warning:focus,\n.btn-warning:active.focus,\n.btn-warning.active.focus,\n.open > .dropdown-toggle.btn-warning.focus {\n  color: #fff;\n  background-color: #d58512;\n  border-color: #985f0d;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n  background-image: none;\n}\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus {\n  background-color: #f0ad4e;\n  border-color: #eea236;\n}\n.btn-warning .badge {\n  color: #f0ad4e;\n  background-color: #fff;\n}\n.btn-danger {\n  color: #fff;\n  background-color: #d9534f;\n  border-color: #d43f3a;\n}\n.btn-danger:focus,\n.btn-danger.focus {\n  color: #fff;\n  background-color: #c9302c;\n  border-color: #761c19;\n}\n.btn-danger:hover {\n  color: #fff;\n  background-color: #c9302c;\n  border-color: #ac2925;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n  color: #fff;\n  background-color: #c9302c;\n  border-color: #ac2925;\n}\n.btn-danger:active:hover,\n.btn-danger.active:hover,\n.open > .dropdown-toggle.btn-danger:hover,\n.btn-danger:active:focus,\n.btn-danger.active:focus,\n.open > .dropdown-toggle.btn-danger:focus,\n.btn-danger:active.focus,\n.btn-danger.active.focus,\n.open > .dropdown-toggle.btn-danger.focus {\n  color: #fff;\n  background-color: #ac2925;\n  border-color: #761c19;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n  background-image: none;\n}\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus {\n  background-color: #d9534f;\n  border-color: #d43f3a;\n}\n.btn-danger .badge {\n  color: #d9534f;\n  background-color: #fff;\n}\n.btn-link {\n  font-weight: normal;\n  color: #337ab7;\n  border-radius: 0;\n}\n.btn-link,\n.btn-link:active,\n.btn-link.active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n  background-color: transparent;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n  border-color: transparent;\n}\n.btn-link:hover,\n.btn-link:focus {\n  color: #23527c;\n  text-decoration: underline;\n  background-color: transparent;\n}\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n  color: #777;\n  text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n  padding: 1px 5px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.btn-block {\n  display: block;\n  width: 100%;\n}\n.btn-block + .btn-block {\n  margin-top: 5px;\n}\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n  width: 100%;\n}\n.fade {\n  opacity: 0;\n  -webkit-transition: opacity .15s linear;\n       -o-transition: opacity .15s linear;\n          transition: opacity .15s linear;\n}\n.fade.in {\n  opacity: 1;\n}\n.collapse {\n  display: none;\n}\n.collapse.in {\n  display: block;\n}\ntr.collapse.in {\n  display: table-row;\n}\ntbody.collapse.in {\n  display: table-row-group;\n}\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  -webkit-transition-timing-function: ease;\n       -o-transition-timing-function: ease;\n          transition-timing-function: ease;\n  -webkit-transition-duration: .35s;\n       -o-transition-duration: .35s;\n          transition-duration: .35s;\n  -webkit-transition-property: height, visibility;\n       -o-transition-property: height, visibility;\n          transition-property: height, visibility;\n}\n.caret {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 2px;\n  vertical-align: middle;\n  border-top: 4px dashed;\n  border-top: 4px solid \\9;\n  border-right: 4px solid transparent;\n  border-left: 4px solid transparent;\n}\n.dropup,\n.dropdown {\n  position: relative;\n}\n.dropdown-toggle:focus {\n  outline: 0;\n}\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: 1000;\n  display: none;\n  float: left;\n  min-width: 160px;\n  padding: 5px 0;\n  margin: 2px 0 0;\n  font-size: 14px;\n  text-align: left;\n  list-style: none;\n  background-color: #fff;\n  -webkit-background-clip: padding-box;\n          background-clip: padding-box;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, .15);\n  border-radius: 4px;\n  -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);\n          box-shadow: 0 6px 12px rgba(0, 0, 0, .175);\n}\n.dropdown-menu.pull-right {\n  right: 0;\n  left: auto;\n}\n.dropdown-menu .divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n.dropdown-menu > li > a {\n  display: block;\n  padding: 3px 20px;\n  clear: both;\n  font-weight: normal;\n  line-height: 1.42857143;\n  color: #333;\n  white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  color: #262626;\n  text-decoration: none;\n  background-color: #f5f5f5;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  color: #fff;\n  text-decoration: none;\n  background-color: #337ab7;\n  outline: 0;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  color: #777;\n}\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  text-decoration: none;\n  cursor: not-allowed;\n  background-color: transparent;\n  background-image: none;\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n.open > .dropdown-menu {\n  display: block;\n}\n.open > a {\n  outline: 0;\n}\n.dropdown-menu-right {\n  right: 0;\n  left: auto;\n}\n.dropdown-menu-left {\n  right: auto;\n  left: 0;\n}\n.dropdown-header {\n  display: block;\n  padding: 3px 20px;\n  font-size: 12px;\n  line-height: 1.42857143;\n  color: #777;\n  white-space: nowrap;\n}\n.dropdown-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 990;\n}\n.pull-right > .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n  content: \"\";\n  border-top: 0;\n  border-bottom: 4px dashed;\n  border-bottom: 4px solid \\9;\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n  top: auto;\n  bottom: 100%;\n  margin-bottom: 2px;\n}\n@media (min-width: 768px) {\n  .navbar-right .dropdown-menu {\n    right: 0;\n    left: auto;\n  }\n  .navbar-right .dropdown-menu-left {\n    right: auto;\n    left: 0;\n  }\n}\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  float: left;\n}\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus,\n.btn-group > .btn:active,\n.btn-group-vertical > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn.active {\n  z-index: 2;\n}\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n  margin-left: -1px;\n}\n.btn-toolbar {\n  margin-left: -5px;\n}\n.btn-toolbar .btn,\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n  float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n  margin-left: 5px;\n}\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0;\n}\n.btn-group > .btn:first-child {\n  margin-left: 0;\n}\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group > .btn-group {\n  float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n  outline: 0;\n}\n.btn-group > .btn + .dropdown-toggle {\n  padding-right: 8px;\n  padding-left: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n  padding-right: 12px;\n  padding-left: 12px;\n}\n.btn-group.open .dropdown-toggle {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n}\n.btn-group.open .dropdown-toggle.btn-link {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.btn .caret {\n  margin-left: 0;\n}\n.btn-lg .caret {\n  border-width: 5px 5px 0;\n  border-bottom-width: 0;\n}\n.dropup .btn-lg .caret {\n  border-width: 0 5px 5px;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n  display: block;\n  float: none;\n  width: 100%;\n  max-width: 100%;\n}\n.btn-group-vertical > .btn-group > .btn {\n  float: none;\n}\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n  margin-top: -1px;\n  margin-left: 0;\n}\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.btn-group-justified {\n  display: table;\n  width: 100%;\n  table-layout: fixed;\n  border-collapse: separate;\n}\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n  display: table-cell;\n  float: none;\n  width: 1%;\n}\n.btn-group-justified > .btn-group .btn {\n  width: 100%;\n}\n.btn-group-justified > .btn-group .dropdown-menu {\n  left: auto;\n}\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none;\n}\n.input-group {\n  position: relative;\n  display: table;\n  border-collapse: separate;\n}\n.input-group[class*=\"col-\"] {\n  float: none;\n  padding-right: 0;\n  padding-left: 0;\n}\n.input-group .form-control {\n  position: relative;\n  z-index: 2;\n  float: left;\n  width: 100%;\n  margin-bottom: 0;\n}\n.input-group .form-control:focus {\n  z-index: 3;\n}\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n  height: 46px;\n  line-height: 46px;\n}\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn,\nselect[multiple].input-group-lg > .form-control,\nselect[multiple].input-group-lg > .input-group-addon,\nselect[multiple].input-group-lg > .input-group-btn > .btn {\n  height: auto;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n  height: 30px;\n  line-height: 30px;\n}\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn,\nselect[multiple].input-group-sm > .form-control,\nselect[multiple].input-group-sm > .input-group-addon,\nselect[multiple].input-group-sm > .input-group-btn > .btn {\n  height: auto;\n}\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  display: table-cell;\n}\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n.input-group-addon,\n.input-group-btn {\n  width: 1%;\n  white-space: nowrap;\n  vertical-align: middle;\n}\n.input-group-addon {\n  padding: 6px 12px;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1;\n  color: #555;\n  text-align: center;\n  background-color: #eee;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n}\n.input-group-addon.input-sm {\n  padding: 5px 10px;\n  font-size: 12px;\n  border-radius: 3px;\n}\n.input-group-addon.input-lg {\n  padding: 10px 16px;\n  font-size: 18px;\n  border-radius: 6px;\n}\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n  margin-top: 0;\n}\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.input-group-addon:first-child {\n  border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.input-group-addon:last-child {\n  border-left: 0;\n}\n.input-group-btn {\n  position: relative;\n  font-size: 0;\n  white-space: nowrap;\n}\n.input-group-btn > .btn {\n  position: relative;\n}\n.input-group-btn > .btn + .btn {\n  margin-left: -1px;\n}\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:focus,\n.input-group-btn > .btn:active {\n  z-index: 2;\n}\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group {\n  margin-right: -1px;\n}\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group {\n  z-index: 2;\n  margin-left: -1px;\n}\n.nav {\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n.nav > li {\n  position: relative;\n  display: block;\n}\n.nav > li > a {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n  text-decoration: none;\n  background-color: #eee;\n}\n.nav > li.disabled > a {\n  color: #777;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n  color: #777;\n  text-decoration: none;\n  cursor: not-allowed;\n  background-color: transparent;\n}\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n  background-color: #eee;\n  border-color: #337ab7;\n}\n.nav .nav-divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n.nav > li > a > img {\n  max-width: none;\n}\n.nav-tabs {\n  border-bottom: 1px solid #ddd;\n}\n.nav-tabs > li {\n  float: left;\n  margin-bottom: -1px;\n}\n.nav-tabs > li > a {\n  margin-right: 2px;\n  line-height: 1.42857143;\n  border: 1px solid transparent;\n  border-radius: 4px 4px 0 0;\n}\n.nav-tabs > li > a:hover {\n  border-color: #eee #eee #ddd;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n  color: #555;\n  cursor: default;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-bottom-color: transparent;\n}\n.nav-tabs.nav-justified {\n  width: 100%;\n  border-bottom: 0;\n}\n.nav-tabs.nav-justified > li {\n  float: none;\n}\n.nav-tabs.nav-justified > li > a {\n  margin-bottom: 5px;\n  text-align: center;\n}\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n  top: auto;\n  left: auto;\n}\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n  .nav-tabs.nav-justified > li > a {\n    margin-bottom: 0;\n  }\n}\n.nav-tabs.nav-justified > li > a {\n  margin-right: 0;\n  border-radius: 4px;\n}\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:focus {\n  border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li > a {\n    border-bottom: 1px solid #ddd;\n    border-radius: 4px 4px 0 0;\n  }\n  .nav-tabs.nav-justified > .active > a,\n  .nav-tabs.nav-justified > .active > a:hover,\n  .nav-tabs.nav-justified > .active > a:focus {\n    border-bottom-color: #fff;\n  }\n}\n.nav-pills > li {\n  float: left;\n}\n.nav-pills > li > a {\n  border-radius: 4px;\n}\n.nav-pills > li + li {\n  margin-left: 2px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n  color: #fff;\n  background-color: #337ab7;\n}\n.nav-stacked > li {\n  float: none;\n}\n.nav-stacked > li + li {\n  margin-top: 2px;\n  margin-left: 0;\n}\n.nav-justified {\n  width: 100%;\n}\n.nav-justified > li {\n  float: none;\n}\n.nav-justified > li > a {\n  margin-bottom: 5px;\n  text-align: center;\n}\n.nav-justified > .dropdown .dropdown-menu {\n  top: auto;\n  left: auto;\n}\n@media (min-width: 768px) {\n  .nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n  .nav-justified > li > a {\n    margin-bottom: 0;\n  }\n}\n.nav-tabs-justified {\n  border-bottom: 0;\n}\n.nav-tabs-justified > li > a {\n  margin-right: 0;\n  border-radius: 4px;\n}\n.nav-tabs-justified > .active > a,\n.nav-tabs-justified > .active > a:hover,\n.nav-tabs-justified > .active > a:focus {\n  border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n  .nav-tabs-justified > li > a {\n    border-bottom: 1px solid #ddd;\n    border-radius: 4px 4px 0 0;\n  }\n  .nav-tabs-justified > .active > a,\n  .nav-tabs-justified > .active > a:hover,\n  .nav-tabs-justified > .active > a:focus {\n    border-bottom-color: #fff;\n  }\n}\n.tab-content > .tab-pane {\n  display: none;\n}\n.tab-content > .active {\n  display: block;\n}\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.navbar {\n  position: relative;\n  min-height: 50px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n}\n@media (min-width: 768px) {\n  .navbar {\n    border-radius: 4px;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-header {\n    float: left;\n  }\n}\n.navbar-collapse {\n  padding-right: 15px;\n  padding-left: 15px;\n  overflow-x: visible;\n  -webkit-overflow-scrolling: touch;\n  border-top: 1px solid transparent;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);\n}\n.navbar-collapse.in {\n  overflow-y: auto;\n}\n@media (min-width: 768px) {\n  .navbar-collapse {\n    width: auto;\n    border-top: 0;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n  .navbar-collapse.collapse {\n    display: block !important;\n    height: auto !important;\n    padding-bottom: 0;\n    overflow: visible !important;\n  }\n  .navbar-collapse.in {\n    overflow-y: visible;\n  }\n  .navbar-fixed-top .navbar-collapse,\n  .navbar-static-top .navbar-collapse,\n  .navbar-fixed-bottom .navbar-collapse {\n    padding-right: 0;\n    padding-left: 0;\n  }\n}\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n  max-height: 340px;\n}\n@media (max-device-width: 480px) and (orientation: landscape) {\n  .navbar-fixed-top .navbar-collapse,\n  .navbar-fixed-bottom .navbar-collapse {\n    max-height: 200px;\n  }\n}\n.container > .navbar-header,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-collapse {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n@media (min-width: 768px) {\n  .container > .navbar-header,\n  .container-fluid > .navbar-header,\n  .container > .navbar-collapse,\n  .container-fluid > .navbar-collapse {\n    margin-right: 0;\n    margin-left: 0;\n  }\n}\n.navbar-static-top {\n  z-index: 1000;\n  border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n  .navbar-static-top {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  position: fixed;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n@media (min-width: 768px) {\n  .navbar-fixed-top,\n  .navbar-fixed-bottom {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top {\n  top: 0;\n  border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n  bottom: 0;\n  margin-bottom: 0;\n  border-width: 1px 0 0;\n}\n.navbar-brand {\n  float: left;\n  height: 50px;\n  padding: 15px 15px;\n  font-size: 18px;\n  line-height: 20px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n  text-decoration: none;\n}\n.navbar-brand > img {\n  display: block;\n}\n@media (min-width: 768px) {\n  .navbar > .container .navbar-brand,\n  .navbar > .container-fluid .navbar-brand {\n    margin-left: -15px;\n  }\n}\n.navbar-toggle {\n  position: relative;\n  float: right;\n  padding: 9px 10px;\n  margin-top: 8px;\n  margin-right: 15px;\n  margin-bottom: 8px;\n  background-color: transparent;\n  background-image: none;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.navbar-toggle:focus {\n  outline: 0;\n}\n.navbar-toggle .icon-bar {\n  display: block;\n  width: 22px;\n  height: 2px;\n  border-radius: 1px;\n}\n.navbar-toggle .icon-bar + .icon-bar {\n  margin-top: 4px;\n}\n@media (min-width: 768px) {\n  .navbar-toggle {\n    display: none;\n  }\n}\n.navbar-nav {\n  margin: 7.5px -15px;\n}\n.navbar-nav > li > a {\n  padding-top: 10px;\n  padding-bottom: 10px;\n  line-height: 20px;\n}\n@media (max-width: 767px) {\n  .navbar-nav .open .dropdown-menu {\n    position: static;\n    float: none;\n    width: auto;\n    margin-top: 0;\n    background-color: transparent;\n    border: 0;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n  .navbar-nav .open .dropdown-menu > li > a,\n  .navbar-nav .open .dropdown-menu .dropdown-header {\n    padding: 5px 15px 5px 25px;\n  }\n  .navbar-nav .open .dropdown-menu > li > a {\n    line-height: 20px;\n  }\n  .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-nav .open .dropdown-menu > li > a:focus {\n    background-image: none;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-nav {\n    float: left;\n    margin: 0;\n  }\n  .navbar-nav > li {\n    float: left;\n  }\n  .navbar-nav > li > a {\n    padding-top: 15px;\n    padding-bottom: 15px;\n  }\n}\n.navbar-form {\n  padding: 10px 15px;\n  margin-top: 8px;\n  margin-right: -15px;\n  margin-bottom: 8px;\n  margin-left: -15px;\n  border-top: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);\n}\n@media (min-width: 768px) {\n  .navbar-form .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle;\n  }\n  .navbar-form .form-control-static {\n    display: inline-block;\n  }\n  .navbar-form .input-group {\n    display: inline-table;\n    vertical-align: middle;\n  }\n  .navbar-form .input-group .input-group-addon,\n  .navbar-form .input-group .input-group-btn,\n  .navbar-form .input-group .form-control {\n    width: auto;\n  }\n  .navbar-form .input-group > .form-control {\n    width: 100%;\n  }\n  .navbar-form .control-label {\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .radio,\n  .navbar-form .checkbox {\n    display: inline-block;\n    margin-top: 0;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .radio label,\n  .navbar-form .checkbox label {\n    padding-left: 0;\n  }\n  .navbar-form .radio input[type=\"radio\"],\n  .navbar-form .checkbox input[type=\"checkbox\"] {\n    position: relative;\n    margin-left: 0;\n  }\n  .navbar-form .has-feedback .form-control-feedback {\n    top: 0;\n  }\n}\n@media (max-width: 767px) {\n  .navbar-form .form-group {\n    margin-bottom: 5px;\n  }\n  .navbar-form .form-group:last-child {\n    margin-bottom: 0;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-form {\n    width: auto;\n    padding-top: 0;\n    padding-bottom: 0;\n    margin-right: 0;\n    margin-left: 0;\n    border: 0;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n}\n.navbar-nav > li > .dropdown-menu {\n  margin-top: 0;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n  margin-bottom: 0;\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.navbar-btn {\n  margin-top: 8px;\n  margin-bottom: 8px;\n}\n.navbar-btn.btn-sm {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n.navbar-btn.btn-xs {\n  margin-top: 14px;\n  margin-bottom: 14px;\n}\n.navbar-text {\n  margin-top: 15px;\n  margin-bottom: 15px;\n}\n@media (min-width: 768px) {\n  .navbar-text {\n    float: left;\n    margin-right: 15px;\n    margin-left: 15px;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-left {\n    float: left !important;\n  }\n  .navbar-right {\n    float: right !important;\n    margin-right: -15px;\n  }\n  .navbar-right ~ .navbar-right {\n    margin-right: 0;\n  }\n}\n.navbar-default {\n  background-color: #f8f8f8;\n  border-color: #e7e7e7;\n}\n.navbar-default .navbar-brand {\n  color: #777;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n  color: #5e5e5e;\n  background-color: transparent;\n}\n.navbar-default .navbar-text {\n  color: #777;\n}\n.navbar-default .navbar-nav > li > a {\n  color: #777;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n  color: #333;\n  background-color: transparent;\n}\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n  color: #555;\n  background-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n  color: #ccc;\n  background-color: transparent;\n}\n.navbar-default .navbar-toggle {\n  border-color: #ddd;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n  background-color: #ddd;\n}\n.navbar-default .navbar-toggle .icon-bar {\n  background-color: #888;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n  border-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n  color: #555;\n  background-color: #e7e7e7;\n}\n@media (max-width: 767px) {\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n    color: #777;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #333;\n    background-color: transparent;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #555;\n    background-color: #e7e7e7;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #ccc;\n    background-color: transparent;\n  }\n}\n.navbar-default .navbar-link {\n  color: #777;\n}\n.navbar-default .navbar-link:hover {\n  color: #333;\n}\n.navbar-default .btn-link {\n  color: #777;\n}\n.navbar-default .btn-link:hover,\n.navbar-default .btn-link:focus {\n  color: #333;\n}\n.navbar-default .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-default .btn-link:hover,\n.navbar-default .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-default .btn-link:focus {\n  color: #ccc;\n}\n.navbar-inverse {\n  background-color: #222;\n  border-color: #080808;\n}\n.navbar-inverse .navbar-brand {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n  color: #fff;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-text {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n  color: #fff;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n  color: #fff;\n  background-color: #080808;\n}\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n  color: #444;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-toggle {\n  border-color: #333;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n  background-color: #333;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n  background-color: #fff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n  border-color: #101010;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n  color: #fff;\n  background-color: #080808;\n}\n@media (max-width: 767px) {\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n    border-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n    background-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n    color: #9d9d9d;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #fff;\n    background-color: transparent;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #fff;\n    background-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #444;\n    background-color: transparent;\n  }\n}\n.navbar-inverse .navbar-link {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-link:hover {\n  color: #fff;\n}\n.navbar-inverse .btn-link {\n  color: #9d9d9d;\n}\n.navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link:focus {\n  color: #fff;\n}\n.navbar-inverse .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-inverse .btn-link:focus {\n  color: #444;\n}\n.breadcrumb {\n  padding: 8px 15px;\n  margin-bottom: 20px;\n  list-style: none;\n  background-color: #f5f5f5;\n  border-radius: 4px;\n}\n.breadcrumb > li {\n  display: inline-block;\n}\n.breadcrumb > li + li:before {\n  padding: 0 5px;\n  color: #ccc;\n  content: \"/\\00a0\";\n}\n.breadcrumb > .active {\n  color: #777;\n}\n.pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin: 20px 0;\n  border-radius: 4px;\n}\n.pagination > li {\n  display: inline;\n}\n.pagination > li > a,\n.pagination > li > span {\n  position: relative;\n  float: left;\n  padding: 6px 12px;\n  margin-left: -1px;\n  line-height: 1.42857143;\n  color: #337ab7;\n  text-decoration: none;\n  background-color: #fff;\n  border: 1px solid #ddd;\n}\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n  margin-left: 0;\n  border-top-left-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 4px;\n}\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n  z-index: 2;\n  color: #23527c;\n  background-color: #eee;\n  border-color: #ddd;\n}\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus {\n  z-index: 3;\n  color: #fff;\n  cursor: default;\n  background-color: #337ab7;\n  border-color: #337ab7;\n}\n.pagination > .disabled > span,\n.pagination > .disabled > span:hover,\n.pagination > .disabled > span:focus,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n  color: #777;\n  cursor: not-allowed;\n  background-color: #fff;\n  border-color: #ddd;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n}\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n  border-top-left-radius: 6px;\n  border-bottom-left-radius: 6px;\n}\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n  border-top-right-radius: 6px;\n  border-bottom-right-radius: 6px;\n}\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n}\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n  border-top-left-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n  border-top-right-radius: 3px;\n  border-bottom-right-radius: 3px;\n}\n.pager {\n  padding-left: 0;\n  margin: 20px 0;\n  text-align: center;\n  list-style: none;\n}\n.pager li {\n  display: inline;\n}\n.pager li > a,\n.pager li > span {\n  display: inline-block;\n  padding: 5px 14px;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 15px;\n}\n.pager li > a:hover,\n.pager li > a:focus {\n  text-decoration: none;\n  background-color: #eee;\n}\n.pager .next > a,\n.pager .next > span {\n  float: right;\n}\n.pager .previous > a,\n.pager .previous > span {\n  float: left;\n}\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n  color: #777;\n  cursor: not-allowed;\n  background-color: #fff;\n}\n.label {\n  display: inline;\n  padding: .2em .6em .3em;\n  font-size: 75%;\n  font-weight: bold;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: .25em;\n}\na.label:hover,\na.label:focus {\n  color: #fff;\n  text-decoration: none;\n  cursor: pointer;\n}\n.label:empty {\n  display: none;\n}\n.btn .label {\n  position: relative;\n  top: -1px;\n}\n.label-default {\n  background-color: #777;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n  background-color: #5e5e5e;\n}\n.label-primary {\n  background-color: #337ab7;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n  background-color: #286090;\n}\n.label-success {\n  background-color: #5cb85c;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n  background-color: #449d44;\n}\n.label-info {\n  background-color: #5bc0de;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n  background-color: #31b0d5;\n}\n.label-warning {\n  background-color: #f0ad4e;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n  background-color: #ec971f;\n}\n.label-danger {\n  background-color: #d9534f;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n  background-color: #c9302c;\n}\n.badge {\n  display: inline-block;\n  min-width: 10px;\n  padding: 3px 7px;\n  font-size: 12px;\n  font-weight: bold;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  background-color: #777;\n  border-radius: 10px;\n}\n.badge:empty {\n  display: none;\n}\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n.btn-xs .badge,\n.btn-group-xs > .btn .badge {\n  top: 0;\n  padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n  color: #fff;\n  text-decoration: none;\n  cursor: pointer;\n}\n.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n  color: #337ab7;\n  background-color: #fff;\n}\n.list-group-item > .badge {\n  float: right;\n}\n.list-group-item > .badge + .badge {\n  margin-right: 5px;\n}\n.nav-pills > li > a > .badge {\n  margin-left: 3px;\n}\n.jumbotron {\n  padding-top: 30px;\n  padding-bottom: 30px;\n  margin-bottom: 30px;\n  color: inherit;\n  background-color: #eee;\n}\n.jumbotron h1,\n.jumbotron .h1 {\n  color: inherit;\n}\n.jumbotron p {\n  margin-bottom: 15px;\n  font-size: 21px;\n  font-weight: 200;\n}\n.jumbotron > hr {\n  border-top-color: #d5d5d5;\n}\n.container .jumbotron,\n.container-fluid .jumbotron {\n  padding-right: 15px;\n  padding-left: 15px;\n  border-radius: 6px;\n}\n.jumbotron .container {\n  max-width: 100%;\n}\n@media screen and (min-width: 768px) {\n  .jumbotron {\n    padding-top: 48px;\n    padding-bottom: 48px;\n  }\n  .container .jumbotron,\n  .container-fluid .jumbotron {\n    padding-right: 60px;\n    padding-left: 60px;\n  }\n  .jumbotron h1,\n  .jumbotron .h1 {\n    font-size: 63px;\n  }\n}\n.thumbnail {\n  display: block;\n  padding: 4px;\n  margin-bottom: 20px;\n  line-height: 1.42857143;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n  -webkit-transition: border .2s ease-in-out;\n       -o-transition: border .2s ease-in-out;\n          transition: border .2s ease-in-out;\n}\n.thumbnail > img,\n.thumbnail a > img {\n  margin-right: auto;\n  margin-left: auto;\n}\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n  border-color: #337ab7;\n}\n.thumbnail .caption {\n  padding: 9px;\n  color: #333;\n}\n.alert {\n  padding: 15px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.alert h4 {\n  margin-top: 0;\n  color: inherit;\n}\n.alert .alert-link {\n  font-weight: bold;\n}\n.alert > p,\n.alert > ul {\n  margin-bottom: 0;\n}\n.alert > p + p {\n  margin-top: 5px;\n}\n.alert-dismissable,\n.alert-dismissible {\n  padding-right: 35px;\n}\n.alert-dismissable .close,\n.alert-dismissible .close {\n  position: relative;\n  top: -2px;\n  right: -21px;\n  color: inherit;\n}\n.alert-success {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n}\n.alert-success hr {\n  border-top-color: #c9e2b3;\n}\n.alert-success .alert-link {\n  color: #2b542c;\n}\n.alert-info {\n  color: #31708f;\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n}\n.alert-info hr {\n  border-top-color: #a6e1ec;\n}\n.alert-info .alert-link {\n  color: #245269;\n}\n.alert-warning {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #faebcc;\n}\n.alert-warning hr {\n  border-top-color: #f7e1b5;\n}\n.alert-warning .alert-link {\n  color: #66512c;\n}\n.alert-danger {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #ebccd1;\n}\n.alert-danger hr {\n  border-top-color: #e4b9c0;\n}\n.alert-danger .alert-link {\n  color: #843534;\n}\n@-webkit-keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n@-o-keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n@keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n.progress {\n  height: 20px;\n  margin-bottom: 20px;\n  overflow: hidden;\n  background-color: #f5f5f5;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);\n          box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);\n}\n.progress-bar {\n  float: left;\n  width: 0;\n  height: 100%;\n  font-size: 12px;\n  line-height: 20px;\n  color: #fff;\n  text-align: center;\n  background-color: #337ab7;\n  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);\n          box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);\n  -webkit-transition: width .6s ease;\n       -o-transition: width .6s ease;\n          transition: width .6s ease;\n}\n.progress-striped .progress-bar,\n.progress-bar-striped {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  -webkit-background-size: 40px 40px;\n          background-size: 40px 40px;\n}\n.progress.active .progress-bar,\n.progress-bar.active {\n  -webkit-animation: progress-bar-stripes 2s linear infinite;\n       -o-animation: progress-bar-stripes 2s linear infinite;\n          animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar-success {\n  background-color: #5cb85c;\n}\n.progress-striped .progress-bar-success {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-info {\n  background-color: #5bc0de;\n}\n.progress-striped .progress-bar-info {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-warning {\n  background-color: #f0ad4e;\n}\n.progress-striped .progress-bar-warning {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-danger {\n  background-color: #d9534f;\n}\n.progress-striped .progress-bar-danger {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.media {\n  margin-top: 15px;\n}\n.media:first-child {\n  margin-top: 0;\n}\n.media,\n.media-body {\n  overflow: hidden;\n  zoom: 1;\n}\n.media-body {\n  width: 10000px;\n}\n.media-object {\n  display: block;\n}\n.media-object.img-thumbnail {\n  max-width: none;\n}\n.media-right,\n.media > .pull-right {\n  padding-left: 10px;\n}\n.media-left,\n.media > .pull-left {\n  padding-right: 10px;\n}\n.media-left,\n.media-right,\n.media-body {\n  display: table-cell;\n  vertical-align: top;\n}\n.media-middle {\n  vertical-align: middle;\n}\n.media-bottom {\n  vertical-align: bottom;\n}\n.media-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n.media-list {\n  padding-left: 0;\n  list-style: none;\n}\n.list-group {\n  padding-left: 0;\n  margin-bottom: 20px;\n}\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n  margin-bottom: -1px;\n  background-color: #fff;\n  border: 1px solid #ddd;\n}\n.list-group-item:first-child {\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n}\n.list-group-item:last-child {\n  margin-bottom: 0;\n  border-bottom-right-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\na.list-group-item,\nbutton.list-group-item {\n  color: #555;\n}\na.list-group-item .list-group-item-heading,\nbutton.list-group-item .list-group-item-heading {\n  color: #333;\n}\na.list-group-item:hover,\nbutton.list-group-item:hover,\na.list-group-item:focus,\nbutton.list-group-item:focus {\n  color: #555;\n  text-decoration: none;\n  background-color: #f5f5f5;\n}\nbutton.list-group-item {\n  width: 100%;\n  text-align: left;\n}\n.list-group-item.disabled,\n.list-group-item.disabled:hover,\n.list-group-item.disabled:focus {\n  color: #777;\n  cursor: not-allowed;\n  background-color: #eee;\n}\n.list-group-item.disabled .list-group-item-heading,\n.list-group-item.disabled:hover .list-group-item-heading,\n.list-group-item.disabled:focus .list-group-item-heading {\n  color: inherit;\n}\n.list-group-item.disabled .list-group-item-text,\n.list-group-item.disabled:hover .list-group-item-text,\n.list-group-item.disabled:focus .list-group-item-text {\n  color: #777;\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n  z-index: 2;\n  color: #fff;\n  background-color: #337ab7;\n  border-color: #337ab7;\n}\n.list-group-item.active .list-group-item-heading,\n.list-group-item.active:hover .list-group-item-heading,\n.list-group-item.active:focus .list-group-item-heading,\n.list-group-item.active .list-group-item-heading > small,\n.list-group-item.active:hover .list-group-item-heading > small,\n.list-group-item.active:focus .list-group-item-heading > small,\n.list-group-item.active .list-group-item-heading > .small,\n.list-group-item.active:hover .list-group-item-heading > .small,\n.list-group-item.active:focus .list-group-item-heading > .small {\n  color: inherit;\n}\n.list-group-item.active .list-group-item-text,\n.list-group-item.active:hover .list-group-item-text,\n.list-group-item.active:focus .list-group-item-text {\n  color: #c7ddef;\n}\n.list-group-item-success {\n  color: #3c763d;\n  background-color: #dff0d8;\n}\na.list-group-item-success,\nbutton.list-group-item-success {\n  color: #3c763d;\n}\na.list-group-item-success .list-group-item-heading,\nbutton.list-group-item-success .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-success:hover,\nbutton.list-group-item-success:hover,\na.list-group-item-success:focus,\nbutton.list-group-item-success:focus {\n  color: #3c763d;\n  background-color: #d0e9c6;\n}\na.list-group-item-success.active,\nbutton.list-group-item-success.active,\na.list-group-item-success.active:hover,\nbutton.list-group-item-success.active:hover,\na.list-group-item-success.active:focus,\nbutton.list-group-item-success.active:focus {\n  color: #fff;\n  background-color: #3c763d;\n  border-color: #3c763d;\n}\n.list-group-item-info {\n  color: #31708f;\n  background-color: #d9edf7;\n}\na.list-group-item-info,\nbutton.list-group-item-info {\n  color: #31708f;\n}\na.list-group-item-info .list-group-item-heading,\nbutton.list-group-item-info .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-info:hover,\nbutton.list-group-item-info:hover,\na.list-group-item-info:focus,\nbutton.list-group-item-info:focus {\n  color: #31708f;\n  background-color: #c4e3f3;\n}\na.list-group-item-info.active,\nbutton.list-group-item-info.active,\na.list-group-item-info.active:hover,\nbutton.list-group-item-info.active:hover,\na.list-group-item-info.active:focus,\nbutton.list-group-item-info.active:focus {\n  color: #fff;\n  background-color: #31708f;\n  border-color: #31708f;\n}\n.list-group-item-warning {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n}\na.list-group-item-warning,\nbutton.list-group-item-warning {\n  color: #8a6d3b;\n}\na.list-group-item-warning .list-group-item-heading,\nbutton.list-group-item-warning .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-warning:hover,\nbutton.list-group-item-warning:hover,\na.list-group-item-warning:focus,\nbutton.list-group-item-warning:focus {\n  color: #8a6d3b;\n  background-color: #faf2cc;\n}\na.list-group-item-warning.active,\nbutton.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\nbutton.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus,\nbutton.list-group-item-warning.active:focus {\n  color: #fff;\n  background-color: #8a6d3b;\n  border-color: #8a6d3b;\n}\n.list-group-item-danger {\n  color: #a94442;\n  background-color: #f2dede;\n}\na.list-group-item-danger,\nbutton.list-group-item-danger {\n  color: #a94442;\n}\na.list-group-item-danger .list-group-item-heading,\nbutton.list-group-item-danger .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-danger:hover,\nbutton.list-group-item-danger:hover,\na.list-group-item-danger:focus,\nbutton.list-group-item-danger:focus {\n  color: #a94442;\n  background-color: #ebcccc;\n}\na.list-group-item-danger.active,\nbutton.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\nbutton.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus,\nbutton.list-group-item-danger.active:focus {\n  color: #fff;\n  background-color: #a94442;\n  border-color: #a94442;\n}\n.list-group-item-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n.list-group-item-text {\n  margin-bottom: 0;\n  line-height: 1.3;\n}\n.panel {\n  margin-bottom: 20px;\n  background-color: #fff;\n  border: 1px solid transparent;\n  border-radius: 4px;\n  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);\n          box-shadow: 0 1px 1px rgba(0, 0, 0, .05);\n}\n.panel-body {\n  padding: 15px;\n}\n.panel-heading {\n  padding: 10px 15px;\n  border-bottom: 1px solid transparent;\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel-heading > .dropdown .dropdown-toggle {\n  color: inherit;\n}\n.panel-title {\n  margin-top: 0;\n  margin-bottom: 0;\n  font-size: 16px;\n  color: inherit;\n}\n.panel-title > a,\n.panel-title > small,\n.panel-title > .small,\n.panel-title > small > a,\n.panel-title > .small > a {\n  color: inherit;\n}\n.panel-footer {\n  padding: 10px 15px;\n  background-color: #f5f5f5;\n  border-top: 1px solid #ddd;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .list-group,\n.panel > .panel-collapse > .list-group {\n  margin-bottom: 0;\n}\n.panel > .list-group .list-group-item,\n.panel > .panel-collapse > .list-group .list-group-item {\n  border-width: 1px 0;\n  border-radius: 0;\n}\n.panel > .list-group:first-child .list-group-item:first-child,\n.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {\n  border-top: 0;\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .list-group:last-child .list-group-item:last-child,\n.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {\n  border-bottom: 0;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n  border-top-width: 0;\n}\n.list-group + .panel-footer {\n  border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table,\n.panel > .panel-collapse > .table {\n  margin-bottom: 0;\n}\n.panel > .table caption,\n.panel > .table-responsive > .table caption,\n.panel > .panel-collapse > .table caption {\n  padding-right: 15px;\n  padding-left: 15px;\n}\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n  border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n  border-top-right-radius: 3px;\n}\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n  border-bottom-right-radius: 3px;\n}\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive,\n.panel > .table + .panel-body,\n.panel > .table-responsive + .panel-body {\n  border-top: 1px solid #ddd;\n}\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n  border-top: 0;\n}\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n  border: 0;\n}\n.panel > .table-bordered > thead > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n.panel > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-bordered > thead > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n.panel > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-bordered > tfoot > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n  border-left: 0;\n}\n.panel > .table-bordered > thead > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n.panel > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-bordered > thead > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n.panel > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-bordered > tfoot > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n  border-right: 0;\n}\n.panel > .table-bordered > thead > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n.panel > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-bordered > thead > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n.panel > .table-bordered > tbody > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n  border-bottom: 0;\n}\n.panel > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-bordered > tfoot > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n  border-bottom: 0;\n}\n.panel > .table-responsive {\n  margin-bottom: 0;\n  border: 0;\n}\n.panel-group {\n  margin-bottom: 20px;\n}\n.panel-group .panel {\n  margin-bottom: 0;\n  border-radius: 4px;\n}\n.panel-group .panel + .panel {\n  margin-top: 5px;\n}\n.panel-group .panel-heading {\n  border-bottom: 0;\n}\n.panel-group .panel-heading + .panel-collapse > .panel-body,\n.panel-group .panel-heading + .panel-collapse > .list-group {\n  border-top: 1px solid #ddd;\n}\n.panel-group .panel-footer {\n  border-top: 0;\n}\n.panel-group .panel-footer + .panel-collapse .panel-body {\n  border-bottom: 1px solid #ddd;\n}\n.panel-default {\n  border-color: #ddd;\n}\n.panel-default > .panel-heading {\n  color: #333;\n  background-color: #f5f5f5;\n  border-color: #ddd;\n}\n.panel-default > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #ddd;\n}\n.panel-default > .panel-heading .badge {\n  color: #f5f5f5;\n  background-color: #333;\n}\n.panel-default > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #ddd;\n}\n.panel-primary {\n  border-color: #337ab7;\n}\n.panel-primary > .panel-heading {\n  color: #fff;\n  background-color: #337ab7;\n  border-color: #337ab7;\n}\n.panel-primary > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #337ab7;\n}\n.panel-primary > .panel-heading .badge {\n  color: #337ab7;\n  background-color: #fff;\n}\n.panel-primary > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #337ab7;\n}\n.panel-success {\n  border-color: #d6e9c6;\n}\n.panel-success > .panel-heading {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n}\n.panel-success > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #d6e9c6;\n}\n.panel-success > .panel-heading .badge {\n  color: #dff0d8;\n  background-color: #3c763d;\n}\n.panel-success > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #d6e9c6;\n}\n.panel-info {\n  border-color: #bce8f1;\n}\n.panel-info > .panel-heading {\n  color: #31708f;\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n}\n.panel-info > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #bce8f1;\n}\n.panel-info > .panel-heading .badge {\n  color: #d9edf7;\n  background-color: #31708f;\n}\n.panel-info > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #bce8f1;\n}\n.panel-warning {\n  border-color: #faebcc;\n}\n.panel-warning > .panel-heading {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #faebcc;\n}\n.panel-warning > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #faebcc;\n}\n.panel-warning > .panel-heading .badge {\n  color: #fcf8e3;\n  background-color: #8a6d3b;\n}\n.panel-warning > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #faebcc;\n}\n.panel-danger {\n  border-color: #ebccd1;\n}\n.panel-danger > .panel-heading {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #ebccd1;\n}\n.panel-danger > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #ebccd1;\n}\n.panel-danger > .panel-heading .badge {\n  color: #f2dede;\n  background-color: #a94442;\n}\n.panel-danger > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #ebccd1;\n}\n.embed-responsive {\n  position: relative;\n  display: block;\n  height: 0;\n  padding: 0;\n  overflow: hidden;\n}\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  border: 0;\n}\n.embed-responsive-16by9 {\n  padding-bottom: 56.25%;\n}\n.embed-responsive-4by3 {\n  padding-bottom: 75%;\n}\n.well {\n  min-height: 20px;\n  padding: 19px;\n  margin-bottom: 20px;\n  background-color: #f5f5f5;\n  border: 1px solid #e3e3e3;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);\n}\n.well blockquote {\n  border-color: #ddd;\n  border-color: rgba(0, 0, 0, .15);\n}\n.well-lg {\n  padding: 24px;\n  border-radius: 6px;\n}\n.well-sm {\n  padding: 9px;\n  border-radius: 3px;\n}\n.close {\n  float: right;\n  font-size: 21px;\n  font-weight: bold;\n  line-height: 1;\n  color: #000;\n  text-shadow: 0 1px 0 #fff;\n  filter: alpha(opacity=20);\n  opacity: .2;\n}\n.close:hover,\n.close:focus {\n  color: #000;\n  text-decoration: none;\n  cursor: pointer;\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\nbutton.close {\n  -webkit-appearance: none;\n  padding: 0;\n  cursor: pointer;\n  background: transparent;\n  border: 0;\n}\n.modal-open {\n  overflow: hidden;\n}\n.modal {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1050;\n  display: none;\n  overflow: hidden;\n  -webkit-overflow-scrolling: touch;\n  outline: 0;\n}\n.modal.fade .modal-dialog {\n  -webkit-transition: -webkit-transform .3s ease-out;\n       -o-transition:      -o-transform .3s ease-out;\n          transition:         transform .3s ease-out;\n  -webkit-transform: translate(0, -25%);\n      -ms-transform: translate(0, -25%);\n       -o-transform: translate(0, -25%);\n          transform: translate(0, -25%);\n}\n.modal.in .modal-dialog {\n  -webkit-transform: translate(0, 0);\n      -ms-transform: translate(0, 0);\n       -o-transform: translate(0, 0);\n          transform: translate(0, 0);\n}\n.modal-open .modal {\n  overflow-x: hidden;\n  overflow-y: auto;\n}\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 10px;\n}\n.modal-content {\n  position: relative;\n  background-color: #fff;\n  -webkit-background-clip: padding-box;\n          background-clip: padding-box;\n  border: 1px solid #999;\n  border: 1px solid rgba(0, 0, 0, .2);\n  border-radius: 6px;\n  outline: 0;\n  -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5);\n          box-shadow: 0 3px 9px rgba(0, 0, 0, .5);\n}\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1040;\n  background-color: #000;\n}\n.modal-backdrop.fade {\n  filter: alpha(opacity=0);\n  opacity: 0;\n}\n.modal-backdrop.in {\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\n.modal-header {\n  padding: 15px;\n  border-bottom: 1px solid #e5e5e5;\n}\n.modal-header .close {\n  margin-top: -2px;\n}\n.modal-title {\n  margin: 0;\n  line-height: 1.42857143;\n}\n.modal-body {\n  position: relative;\n  padding: 15px;\n}\n.modal-footer {\n  padding: 15px;\n  text-align: right;\n  border-top: 1px solid #e5e5e5;\n}\n.modal-footer .btn + .btn {\n  margin-bottom: 0;\n  margin-left: 5px;\n}\n.modal-footer .btn-group .btn + .btn {\n  margin-left: -1px;\n}\n.modal-footer .btn-block + .btn-block {\n  margin-left: 0;\n}\n.modal-scrollbar-measure {\n  position: absolute;\n  top: -9999px;\n  width: 50px;\n  height: 50px;\n  overflow: scroll;\n}\n@media (min-width: 768px) {\n  .modal-dialog {\n    width: 600px;\n    margin: 30px auto;\n  }\n  .modal-content {\n    -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);\n            box-shadow: 0 5px 15px rgba(0, 0, 0, .5);\n  }\n  .modal-sm {\n    width: 300px;\n  }\n}\n@media (min-width: 992px) {\n  .modal-lg {\n    width: 900px;\n  }\n}\n.tooltip {\n  position: absolute;\n  z-index: 1070;\n  display: block;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 12px;\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1.42857143;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  word-wrap: normal;\n  white-space: normal;\n  filter: alpha(opacity=0);\n  opacity: 0;\n\n  line-break: auto;\n}\n.tooltip.in {\n  filter: alpha(opacity=90);\n  opacity: .9;\n}\n.tooltip.top {\n  padding: 5px 0;\n  margin-top: -3px;\n}\n.tooltip.right {\n  padding: 0 5px;\n  margin-left: 3px;\n}\n.tooltip.bottom {\n  padding: 5px 0;\n  margin-top: 3px;\n}\n.tooltip.left {\n  padding: 0 5px;\n  margin-left: -3px;\n}\n.tooltip-inner {\n  max-width: 200px;\n  padding: 3px 8px;\n  color: #fff;\n  text-align: center;\n  background-color: #000;\n  border-radius: 4px;\n}\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n.tooltip.top .tooltip-arrow {\n  bottom: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.top-left .tooltip-arrow {\n  right: 5px;\n  bottom: 0;\n  margin-bottom: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.top-right .tooltip-arrow {\n  bottom: 0;\n  left: 5px;\n  margin-bottom: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.right .tooltip-arrow {\n  top: 50%;\n  left: 0;\n  margin-top: -5px;\n  border-width: 5px 5px 5px 0;\n  border-right-color: #000;\n}\n.tooltip.left .tooltip-arrow {\n  top: 50%;\n  right: 0;\n  margin-top: -5px;\n  border-width: 5px 0 5px 5px;\n  border-left-color: #000;\n}\n.tooltip.bottom .tooltip-arrow {\n  top: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.tooltip.bottom-left .tooltip-arrow {\n  top: 0;\n  right: 5px;\n  margin-top: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.tooltip.bottom-right .tooltip-arrow {\n  top: 0;\n  left: 5px;\n  margin-top: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 1060;\n  display: none;\n  max-width: 276px;\n  padding: 1px;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 14px;\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1.42857143;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  word-wrap: normal;\n  white-space: normal;\n  background-color: #fff;\n  -webkit-background-clip: padding-box;\n          background-clip: padding-box;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, .2);\n  border-radius: 6px;\n  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2);\n          box-shadow: 0 5px 10px rgba(0, 0, 0, .2);\n\n  line-break: auto;\n}\n.popover.top {\n  margin-top: -10px;\n}\n.popover.right {\n  margin-left: 10px;\n}\n.popover.bottom {\n  margin-top: 10px;\n}\n.popover.left {\n  margin-left: -10px;\n}\n.popover-title {\n  padding: 8px 14px;\n  margin: 0;\n  font-size: 14px;\n  background-color: #f7f7f7;\n  border-bottom: 1px solid #ebebeb;\n  border-radius: 5px 5px 0 0;\n}\n.popover-content {\n  padding: 9px 14px;\n}\n.popover > .arrow,\n.popover > .arrow:after {\n  position: absolute;\n  display: block;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n.popover > .arrow {\n  border-width: 11px;\n}\n.popover > .arrow:after {\n  content: \"\";\n  border-width: 10px;\n}\n.popover.top > .arrow {\n  bottom: -11px;\n  left: 50%;\n  margin-left: -11px;\n  border-top-color: #999;\n  border-top-color: rgba(0, 0, 0, .25);\n  border-bottom-width: 0;\n}\n.popover.top > .arrow:after {\n  bottom: 1px;\n  margin-left: -10px;\n  content: \" \";\n  border-top-color: #fff;\n  border-bottom-width: 0;\n}\n.popover.right > .arrow {\n  top: 50%;\n  left: -11px;\n  margin-top: -11px;\n  border-right-color: #999;\n  border-right-color: rgba(0, 0, 0, .25);\n  border-left-width: 0;\n}\n.popover.right > .arrow:after {\n  bottom: -10px;\n  left: 1px;\n  content: \" \";\n  border-right-color: #fff;\n  border-left-width: 0;\n}\n.popover.bottom > .arrow {\n  top: -11px;\n  left: 50%;\n  margin-left: -11px;\n  border-top-width: 0;\n  border-bottom-color: #999;\n  border-bottom-color: rgba(0, 0, 0, .25);\n}\n.popover.bottom > .arrow:after {\n  top: 1px;\n  margin-left: -10px;\n  content: \" \";\n  border-top-width: 0;\n  border-bottom-color: #fff;\n}\n.popover.left > .arrow {\n  top: 50%;\n  right: -11px;\n  margin-top: -11px;\n  border-right-width: 0;\n  border-left-color: #999;\n  border-left-color: rgba(0, 0, 0, .25);\n}\n.popover.left > .arrow:after {\n  right: 1px;\n  bottom: -10px;\n  content: \" \";\n  border-right-width: 0;\n  border-left-color: #fff;\n}\n.carousel {\n  position: relative;\n}\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n.carousel-inner > .item {\n  position: relative;\n  display: none;\n  -webkit-transition: .6s ease-in-out left;\n       -o-transition: .6s ease-in-out left;\n          transition: .6s ease-in-out left;\n}\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n  line-height: 1;\n}\n@media all and (transform-3d), (-webkit-transform-3d) {\n  .carousel-inner > .item {\n    -webkit-transition: -webkit-transform .6s ease-in-out;\n         -o-transition:      -o-transform .6s ease-in-out;\n            transition:         transform .6s ease-in-out;\n\n    -webkit-backface-visibility: hidden;\n            backface-visibility: hidden;\n    -webkit-perspective: 1000px;\n            perspective: 1000px;\n  }\n  .carousel-inner > .item.next,\n  .carousel-inner > .item.active.right {\n    left: 0;\n    -webkit-transform: translate3d(100%, 0, 0);\n            transform: translate3d(100%, 0, 0);\n  }\n  .carousel-inner > .item.prev,\n  .carousel-inner > .item.active.left {\n    left: 0;\n    -webkit-transform: translate3d(-100%, 0, 0);\n            transform: translate3d(-100%, 0, 0);\n  }\n  .carousel-inner > .item.next.left,\n  .carousel-inner > .item.prev.right,\n  .carousel-inner > .item.active {\n    left: 0;\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0);\n  }\n}\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  display: block;\n}\n.carousel-inner > .active {\n  left: 0;\n}\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n.carousel-inner > .next {\n  left: 100%;\n}\n.carousel-inner > .prev {\n  left: -100%;\n}\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n  left: 0;\n}\n.carousel-inner > .active.left {\n  left: -100%;\n}\n.carousel-inner > .active.right {\n  left: 100%;\n}\n.carousel-control {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: 15%;\n  font-size: 20px;\n  color: #fff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, .6);\n  background-color: rgba(0, 0, 0, 0);\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\n.carousel-control.left {\n  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);\n  background-image:      -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);\n  background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001)));\n  background-image:         linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);\n  background-repeat: repeat-x;\n}\n.carousel-control.right {\n  right: 0;\n  left: auto;\n  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);\n  background-image:      -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);\n  background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5)));\n  background-image:         linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);\n  background-repeat: repeat-x;\n}\n.carousel-control:hover,\n.carousel-control:focus {\n  color: #fff;\n  text-decoration: none;\n  filter: alpha(opacity=90);\n  outline: 0;\n  opacity: .9;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-left,\n.carousel-control .glyphicon-chevron-right {\n  position: absolute;\n  top: 50%;\n  z-index: 5;\n  display: inline-block;\n  margin-top: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .glyphicon-chevron-left {\n  left: 50%;\n  margin-left: -10px;\n}\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-right {\n  right: 50%;\n  margin-right: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n  width: 20px;\n  height: 20px;\n  font-family: serif;\n  line-height: 1;\n}\n.carousel-control .icon-prev:before {\n  content: '\\2039';\n}\n.carousel-control .icon-next:before {\n  content: '\\203a';\n}\n.carousel-indicators {\n  position: absolute;\n  bottom: 10px;\n  left: 50%;\n  z-index: 15;\n  width: 60%;\n  padding-left: 0;\n  margin-left: -30%;\n  text-align: center;\n  list-style: none;\n}\n.carousel-indicators li {\n  display: inline-block;\n  width: 10px;\n  height: 10px;\n  margin: 1px;\n  text-indent: -999px;\n  cursor: pointer;\n  background-color: #000 \\9;\n  background-color: rgba(0, 0, 0, 0);\n  border: 1px solid #fff;\n  border-radius: 10px;\n}\n.carousel-indicators .active {\n  width: 12px;\n  height: 12px;\n  margin: 0;\n  background-color: #fff;\n}\n.carousel-caption {\n  position: absolute;\n  right: 15%;\n  bottom: 20px;\n  left: 15%;\n  z-index: 10;\n  padding-top: 20px;\n  padding-bottom: 20px;\n  color: #fff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, .6);\n}\n.carousel-caption .btn {\n  text-shadow: none;\n}\n@media screen and (min-width: 768px) {\n  .carousel-control .glyphicon-chevron-left,\n  .carousel-control .glyphicon-chevron-right,\n  .carousel-control .icon-prev,\n  .carousel-control .icon-next {\n    width: 30px;\n    height: 30px;\n    margin-top: -10px;\n    font-size: 30px;\n  }\n  .carousel-control .glyphicon-chevron-left,\n  .carousel-control .icon-prev {\n    margin-left: -10px;\n  }\n  .carousel-control .glyphicon-chevron-right,\n  .carousel-control .icon-next {\n    margin-right: -10px;\n  }\n  .carousel-caption {\n    right: 20%;\n    left: 20%;\n    padding-bottom: 30px;\n  }\n  .carousel-indicators {\n    bottom: 20px;\n  }\n}\n.clearfix:before,\n.clearfix:after,\n.dl-horizontal dd:before,\n.dl-horizontal dd:after,\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after,\n.row:before,\n.row:after,\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after,\n.btn-toolbar:before,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after,\n.nav:before,\n.nav:after,\n.navbar:before,\n.navbar:after,\n.navbar-header:before,\n.navbar-header:after,\n.navbar-collapse:before,\n.navbar-collapse:after,\n.pager:before,\n.pager:after,\n.panel-body:before,\n.panel-body:after,\n.modal-header:before,\n.modal-header:after,\n.modal-footer:before,\n.modal-footer:after {\n  display: table;\n  content: \" \";\n}\n.clearfix:after,\n.dl-horizontal dd:after,\n.container:after,\n.container-fluid:after,\n.row:after,\n.form-horizontal .form-group:after,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:after,\n.nav:after,\n.navbar:after,\n.navbar-header:after,\n.navbar-collapse:after,\n.pager:after,\n.panel-body:after,\n.modal-header:after,\n.modal-footer:after {\n  clear: both;\n}\n.center-block {\n  display: block;\n  margin-right: auto;\n  margin-left: auto;\n}\n.pull-right {\n  float: right !important;\n}\n.pull-left {\n  float: left !important;\n}\n.hide {\n  display: none !important;\n}\n.show {\n  display: block !important;\n}\n.invisible {\n  visibility: hidden;\n}\n.text-hide {\n  font: 0/0 a;\n  color: transparent;\n  text-shadow: none;\n  background-color: transparent;\n  border: 0;\n}\n.hidden {\n  display: none !important;\n}\n.affix {\n  position: fixed;\n}\n@-ms-viewport {\n  width: device-width;\n}\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n  display: none !important;\n}\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n  display: none !important;\n}\n@media (max-width: 767px) {\n  .visible-xs {\n    display: block !important;\n  }\n  table.visible-xs {\n    display: table !important;\n  }\n  tr.visible-xs {\n    display: table-row !important;\n  }\n  th.visible-xs,\n  td.visible-xs {\n    display: table-cell !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-block {\n    display: block !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-inline {\n    display: inline !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm {\n    display: block !important;\n  }\n  table.visible-sm {\n    display: table !important;\n  }\n  tr.visible-sm {\n    display: table-row !important;\n  }\n  th.visible-sm,\n  td.visible-sm {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-block {\n    display: block !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md {\n    display: block !important;\n  }\n  table.visible-md {\n    display: table !important;\n  }\n  tr.visible-md {\n    display: table-row !important;\n  }\n  th.visible-md,\n  td.visible-md {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-block {\n    display: block !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg {\n    display: block !important;\n  }\n  table.visible-lg {\n    display: table !important;\n  }\n  tr.visible-lg {\n    display: table-row !important;\n  }\n  th.visible-lg,\n  td.visible-lg {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-block {\n    display: block !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (max-width: 767px) {\n  .hidden-xs {\n    display: none !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-sm {\n    display: none !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-md {\n    display: none !important;\n  }\n}\n@media (min-width: 1200px) {\n  .hidden-lg {\n    display: none !important;\n  }\n}\n.visible-print {\n  display: none !important;\n}\n@media print {\n  .visible-print {\n    display: block !important;\n  }\n  table.visible-print {\n    display: table !important;\n  }\n  tr.visible-print {\n    display: table-row !important;\n  }\n  th.visible-print,\n  td.visible-print {\n    display: table-cell !important;\n  }\n}\n.visible-print-block {\n  display: none !important;\n}\n@media print {\n  .visible-print-block {\n    display: block !important;\n  }\n}\n.visible-print-inline {\n  display: none !important;\n}\n@media print {\n  .visible-print-inline {\n    display: inline !important;\n  }\n}\n.visible-print-inline-block {\n  display: none !important;\n}\n@media print {\n  .visible-print-inline-block {\n    display: inline-block !important;\n  }\n}\n@media print {\n  .hidden-print {\n    display: none !important;\n  }\n}\n/*# sourceMappingURL=bootstrap.css.map */\n"
  },
  {
    "path": "public/frontend/plugins/bootstrap3/js/bootstrap.js",
    "content": "/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under the MIT license\n */\n\nif (typeof jQuery === 'undefined') {\n  throw new Error('Bootstrap\\'s JavaScript requires jQuery')\n}\n\n+function ($) {\n  'use strict';\n  var version = $.fn.jquery.split(' ')[0].split('.')\n  if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 3)) {\n    throw new Error('Bootstrap\\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4')\n  }\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: transition.js v3.3.7\n * http://getbootstrap.com/javascript/#transitions\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)\n  // ============================================================\n\n  function transitionEnd() {\n    var el = document.createElement('bootstrap')\n\n    var transEndEventNames = {\n      WebkitTransition : 'webkitTransitionEnd',\n      MozTransition    : 'transitionend',\n      OTransition      : 'oTransitionEnd otransitionend',\n      transition       : 'transitionend'\n    }\n\n    for (var name in transEndEventNames) {\n      if (el.style[name] !== undefined) {\n        return { end: transEndEventNames[name] }\n      }\n    }\n\n    return false // explicit for ie8 (  ._.)\n  }\n\n  // http://blog.alexmaccaw.com/css-transitions\n  $.fn.emulateTransitionEnd = function (duration) {\n    var called = false\n    var $el = this\n    $(this).one('bsTransitionEnd', function () { called = true })\n    var callback = function () { if (!called) $($el).trigger($.support.transition.end) }\n    setTimeout(callback, duration)\n    return this\n  }\n\n  $(function () {\n    $.support.transition = transitionEnd()\n\n    if (!$.support.transition) return\n\n    $.event.special.bsTransitionEnd = {\n      bindType: $.support.transition.end,\n      delegateType: $.support.transition.end,\n      handle: function (e) {\n        if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)\n      }\n    }\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: alert.js v3.3.7\n * http://getbootstrap.com/javascript/#alerts\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // ALERT CLASS DEFINITION\n  // ======================\n\n  var dismiss = '[data-dismiss=\"alert\"]'\n  var Alert   = function (el) {\n    $(el).on('click', dismiss, this.close)\n  }\n\n  Alert.VERSION = '3.3.7'\n\n  Alert.TRANSITION_DURATION = 150\n\n  Alert.prototype.close = function (e) {\n    var $this    = $(this)\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    var $parent = $(selector === '#' ? [] : selector)\n\n    if (e) e.preventDefault()\n\n    if (!$parent.length) {\n      $parent = $this.closest('.alert')\n    }\n\n    $parent.trigger(e = $.Event('close.bs.alert'))\n\n    if (e.isDefaultPrevented()) return\n\n    $parent.removeClass('in')\n\n    function removeElement() {\n      // detach from parent, fire event then clean up data\n      $parent.detach().trigger('closed.bs.alert').remove()\n    }\n\n    $.support.transition && $parent.hasClass('fade') ?\n      $parent\n        .one('bsTransitionEnd', removeElement)\n        .emulateTransitionEnd(Alert.TRANSITION_DURATION) :\n      removeElement()\n  }\n\n\n  // ALERT PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.alert')\n\n      if (!data) $this.data('bs.alert', (data = new Alert(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  var old = $.fn.alert\n\n  $.fn.alert             = Plugin\n  $.fn.alert.Constructor = Alert\n\n\n  // ALERT NO CONFLICT\n  // =================\n\n  $.fn.alert.noConflict = function () {\n    $.fn.alert = old\n    return this\n  }\n\n\n  // ALERT DATA-API\n  // ==============\n\n  $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: button.js v3.3.7\n * http://getbootstrap.com/javascript/#buttons\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // BUTTON PUBLIC CLASS DEFINITION\n  // ==============================\n\n  var Button = function (element, options) {\n    this.$element  = $(element)\n    this.options   = $.extend({}, Button.DEFAULTS, options)\n    this.isLoading = false\n  }\n\n  Button.VERSION  = '3.3.7'\n\n  Button.DEFAULTS = {\n    loadingText: 'loading...'\n  }\n\n  Button.prototype.setState = function (state) {\n    var d    = 'disabled'\n    var $el  = this.$element\n    var val  = $el.is('input') ? 'val' : 'html'\n    var data = $el.data()\n\n    state += 'Text'\n\n    if (data.resetText == null) $el.data('resetText', $el[val]())\n\n    // push to event loop to allow forms to submit\n    setTimeout($.proxy(function () {\n      $el[val](data[state] == null ? this.options[state] : data[state])\n\n      if (state == 'loadingText') {\n        this.isLoading = true\n        $el.addClass(d).attr(d, d).prop(d, true)\n      } else if (this.isLoading) {\n        this.isLoading = false\n        $el.removeClass(d).removeAttr(d).prop(d, false)\n      }\n    }, this), 0)\n  }\n\n  Button.prototype.toggle = function () {\n    var changed = true\n    var $parent = this.$element.closest('[data-toggle=\"buttons\"]')\n\n    if ($parent.length) {\n      var $input = this.$element.find('input')\n      if ($input.prop('type') == 'radio') {\n        if ($input.prop('checked')) changed = false\n        $parent.find('.active').removeClass('active')\n        this.$element.addClass('active')\n      } else if ($input.prop('type') == 'checkbox') {\n        if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false\n        this.$element.toggleClass('active')\n      }\n      $input.prop('checked', this.$element.hasClass('active'))\n      if (changed) $input.trigger('change')\n    } else {\n      this.$element.attr('aria-pressed', !this.$element.hasClass('active'))\n      this.$element.toggleClass('active')\n    }\n  }\n\n\n  // BUTTON PLUGIN DEFINITION\n  // ========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.button')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.button', (data = new Button(this, options)))\n\n      if (option == 'toggle') data.toggle()\n      else if (option) data.setState(option)\n    })\n  }\n\n  var old = $.fn.button\n\n  $.fn.button             = Plugin\n  $.fn.button.Constructor = Button\n\n\n  // BUTTON NO CONFLICT\n  // ==================\n\n  $.fn.button.noConflict = function () {\n    $.fn.button = old\n    return this\n  }\n\n\n  // BUTTON DATA-API\n  // ===============\n\n  $(document)\n    .on('click.bs.button.data-api', '[data-toggle^=\"button\"]', function (e) {\n      var $btn = $(e.target).closest('.btn')\n      Plugin.call($btn, 'toggle')\n      if (!($(e.target).is('input[type=\"radio\"], input[type=\"checkbox\"]'))) {\n        // Prevent double click on radios, and the double selections (so cancellation) on checkboxes\n        e.preventDefault()\n        // The target component still receive the focus\n        if ($btn.is('input,button')) $btn.trigger('focus')\n        else $btn.find('input:visible,button:visible').first().trigger('focus')\n      }\n    })\n    .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^=\"button\"]', function (e) {\n      $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))\n    })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: carousel.js v3.3.7\n * http://getbootstrap.com/javascript/#carousel\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // CAROUSEL CLASS DEFINITION\n  // =========================\n\n  var Carousel = function (element, options) {\n    this.$element    = $(element)\n    this.$indicators = this.$element.find('.carousel-indicators')\n    this.options     = options\n    this.paused      = null\n    this.sliding     = null\n    this.interval    = null\n    this.$active     = null\n    this.$items      = null\n\n    this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))\n\n    this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element\n      .on('mouseenter.bs.carousel', $.proxy(this.pause, this))\n      .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))\n  }\n\n  Carousel.VERSION  = '3.3.7'\n\n  Carousel.TRANSITION_DURATION = 600\n\n  Carousel.DEFAULTS = {\n    interval: 5000,\n    pause: 'hover',\n    wrap: true,\n    keyboard: true\n  }\n\n  Carousel.prototype.keydown = function (e) {\n    if (/input|textarea/i.test(e.target.tagName)) return\n    switch (e.which) {\n      case 37: this.prev(); break\n      case 39: this.next(); break\n      default: return\n    }\n\n    e.preventDefault()\n  }\n\n  Carousel.prototype.cycle = function (e) {\n    e || (this.paused = false)\n\n    this.interval && clearInterval(this.interval)\n\n    this.options.interval\n      && !this.paused\n      && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))\n\n    return this\n  }\n\n  Carousel.prototype.getItemIndex = function (item) {\n    this.$items = item.parent().children('.item')\n    return this.$items.index(item || this.$active)\n  }\n\n  Carousel.prototype.getItemForDirection = function (direction, active) {\n    var activeIndex = this.getItemIndex(active)\n    var willWrap = (direction == 'prev' && activeIndex === 0)\n                || (direction == 'next' && activeIndex == (this.$items.length - 1))\n    if (willWrap && !this.options.wrap) return active\n    var delta = direction == 'prev' ? -1 : 1\n    var itemIndex = (activeIndex + delta) % this.$items.length\n    return this.$items.eq(itemIndex)\n  }\n\n  Carousel.prototype.to = function (pos) {\n    var that        = this\n    var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))\n\n    if (pos > (this.$items.length - 1) || pos < 0) return\n\n    if (this.sliding)       return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, \"slid\"\n    if (activeIndex == pos) return this.pause().cycle()\n\n    return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))\n  }\n\n  Carousel.prototype.pause = function (e) {\n    e || (this.paused = true)\n\n    if (this.$element.find('.next, .prev').length && $.support.transition) {\n      this.$element.trigger($.support.transition.end)\n      this.cycle(true)\n    }\n\n    this.interval = clearInterval(this.interval)\n\n    return this\n  }\n\n  Carousel.prototype.next = function () {\n    if (this.sliding) return\n    return this.slide('next')\n  }\n\n  Carousel.prototype.prev = function () {\n    if (this.sliding) return\n    return this.slide('prev')\n  }\n\n  Carousel.prototype.slide = function (type, next) {\n    var $active   = this.$element.find('.item.active')\n    var $next     = next || this.getItemForDirection(type, $active)\n    var isCycling = this.interval\n    var direction = type == 'next' ? 'left' : 'right'\n    var that      = this\n\n    if ($next.hasClass('active')) return (this.sliding = false)\n\n    var relatedTarget = $next[0]\n    var slideEvent = $.Event('slide.bs.carousel', {\n      relatedTarget: relatedTarget,\n      direction: direction\n    })\n    this.$element.trigger(slideEvent)\n    if (slideEvent.isDefaultPrevented()) return\n\n    this.sliding = true\n\n    isCycling && this.pause()\n\n    if (this.$indicators.length) {\n      this.$indicators.find('.active').removeClass('active')\n      var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])\n      $nextIndicator && $nextIndicator.addClass('active')\n    }\n\n    var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, \"slid\"\n    if ($.support.transition && this.$element.hasClass('slide')) {\n      $next.addClass(type)\n      $next[0].offsetWidth // force reflow\n      $active.addClass(direction)\n      $next.addClass(direction)\n      $active\n        .one('bsTransitionEnd', function () {\n          $next.removeClass([type, direction].join(' ')).addClass('active')\n          $active.removeClass(['active', direction].join(' '))\n          that.sliding = false\n          setTimeout(function () {\n            that.$element.trigger(slidEvent)\n          }, 0)\n        })\n        .emulateTransitionEnd(Carousel.TRANSITION_DURATION)\n    } else {\n      $active.removeClass('active')\n      $next.addClass('active')\n      this.sliding = false\n      this.$element.trigger(slidEvent)\n    }\n\n    isCycling && this.cycle()\n\n    return this\n  }\n\n\n  // CAROUSEL PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.carousel')\n      var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)\n      var action  = typeof option == 'string' ? option : options.slide\n\n      if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))\n      if (typeof option == 'number') data.to(option)\n      else if (action) data[action]()\n      else if (options.interval) data.pause().cycle()\n    })\n  }\n\n  var old = $.fn.carousel\n\n  $.fn.carousel             = Plugin\n  $.fn.carousel.Constructor = Carousel\n\n\n  // CAROUSEL NO CONFLICT\n  // ====================\n\n  $.fn.carousel.noConflict = function () {\n    $.fn.carousel = old\n    return this\n  }\n\n\n  // CAROUSEL DATA-API\n  // =================\n\n  var clickHandler = function (e) {\n    var href\n    var $this   = $(this)\n    var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '')) // strip for ie7\n    if (!$target.hasClass('carousel')) return\n    var options = $.extend({}, $target.data(), $this.data())\n    var slideIndex = $this.attr('data-slide-to')\n    if (slideIndex) options.interval = false\n\n    Plugin.call($target, options)\n\n    if (slideIndex) {\n      $target.data('bs.carousel').to(slideIndex)\n    }\n\n    e.preventDefault()\n  }\n\n  $(document)\n    .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)\n    .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)\n\n  $(window).on('load', function () {\n    $('[data-ride=\"carousel\"]').each(function () {\n      var $carousel = $(this)\n      Plugin.call($carousel, $carousel.data())\n    })\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: collapse.js v3.3.7\n * http://getbootstrap.com/javascript/#collapse\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n/* jshint latedef: false */\n\n+function ($) {\n  'use strict';\n\n  // COLLAPSE PUBLIC CLASS DEFINITION\n  // ================================\n\n  var Collapse = function (element, options) {\n    this.$element      = $(element)\n    this.options       = $.extend({}, Collapse.DEFAULTS, options)\n    this.$trigger      = $('[data-toggle=\"collapse\"][href=\"#' + element.id + '\"],' +\n                           '[data-toggle=\"collapse\"][data-target=\"#' + element.id + '\"]')\n    this.transitioning = null\n\n    if (this.options.parent) {\n      this.$parent = this.getParent()\n    } else {\n      this.addAriaAndCollapsedClass(this.$element, this.$trigger)\n    }\n\n    if (this.options.toggle) this.toggle()\n  }\n\n  Collapse.VERSION  = '3.3.7'\n\n  Collapse.TRANSITION_DURATION = 350\n\n  Collapse.DEFAULTS = {\n    toggle: true\n  }\n\n  Collapse.prototype.dimension = function () {\n    var hasWidth = this.$element.hasClass('width')\n    return hasWidth ? 'width' : 'height'\n  }\n\n  Collapse.prototype.show = function () {\n    if (this.transitioning || this.$element.hasClass('in')) return\n\n    var activesData\n    var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')\n\n    if (actives && actives.length) {\n      activesData = actives.data('bs.collapse')\n      if (activesData && activesData.transitioning) return\n    }\n\n    var startEvent = $.Event('show.bs.collapse')\n    this.$element.trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) return\n\n    if (actives && actives.length) {\n      Plugin.call(actives, 'hide')\n      activesData || actives.data('bs.collapse', null)\n    }\n\n    var dimension = this.dimension()\n\n    this.$element\n      .removeClass('collapse')\n      .addClass('collapsing')[dimension](0)\n      .attr('aria-expanded', true)\n\n    this.$trigger\n      .removeClass('collapsed')\n      .attr('aria-expanded', true)\n\n    this.transitioning = 1\n\n    var complete = function () {\n      this.$element\n        .removeClass('collapsing')\n        .addClass('collapse in')[dimension]('')\n      this.transitioning = 0\n      this.$element\n        .trigger('shown.bs.collapse')\n    }\n\n    if (!$.support.transition) return complete.call(this)\n\n    var scrollSize = $.camelCase(['scroll', dimension].join('-'))\n\n    this.$element\n      .one('bsTransitionEnd', $.proxy(complete, this))\n      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])\n  }\n\n  Collapse.prototype.hide = function () {\n    if (this.transitioning || !this.$element.hasClass('in')) return\n\n    var startEvent = $.Event('hide.bs.collapse')\n    this.$element.trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) return\n\n    var dimension = this.dimension()\n\n    this.$element[dimension](this.$element[dimension]())[0].offsetHeight\n\n    this.$element\n      .addClass('collapsing')\n      .removeClass('collapse in')\n      .attr('aria-expanded', false)\n\n    this.$trigger\n      .addClass('collapsed')\n      .attr('aria-expanded', false)\n\n    this.transitioning = 1\n\n    var complete = function () {\n      this.transitioning = 0\n      this.$element\n        .removeClass('collapsing')\n        .addClass('collapse')\n        .trigger('hidden.bs.collapse')\n    }\n\n    if (!$.support.transition) return complete.call(this)\n\n    this.$element\n      [dimension](0)\n      .one('bsTransitionEnd', $.proxy(complete, this))\n      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)\n  }\n\n  Collapse.prototype.toggle = function () {\n    this[this.$element.hasClass('in') ? 'hide' : 'show']()\n  }\n\n  Collapse.prototype.getParent = function () {\n    return $(this.options.parent)\n      .find('[data-toggle=\"collapse\"][data-parent=\"' + this.options.parent + '\"]')\n      .each($.proxy(function (i, element) {\n        var $element = $(element)\n        this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)\n      }, this))\n      .end()\n  }\n\n  Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {\n    var isOpen = $element.hasClass('in')\n\n    $element.attr('aria-expanded', isOpen)\n    $trigger\n      .toggleClass('collapsed', !isOpen)\n      .attr('aria-expanded', isOpen)\n  }\n\n  function getTargetFromTrigger($trigger) {\n    var href\n    var target = $trigger.attr('data-target')\n      || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '') // strip for ie7\n\n    return $(target)\n  }\n\n\n  // COLLAPSE PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.collapse')\n      var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false\n      if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.collapse\n\n  $.fn.collapse             = Plugin\n  $.fn.collapse.Constructor = Collapse\n\n\n  // COLLAPSE NO CONFLICT\n  // ====================\n\n  $.fn.collapse.noConflict = function () {\n    $.fn.collapse = old\n    return this\n  }\n\n\n  // COLLAPSE DATA-API\n  // =================\n\n  $(document).on('click.bs.collapse.data-api', '[data-toggle=\"collapse\"]', function (e) {\n    var $this   = $(this)\n\n    if (!$this.attr('data-target')) e.preventDefault()\n\n    var $target = getTargetFromTrigger($this)\n    var data    = $target.data('bs.collapse')\n    var option  = data ? 'toggle' : $this.data()\n\n    Plugin.call($target, option)\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: dropdown.js v3.3.7\n * http://getbootstrap.com/javascript/#dropdowns\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // DROPDOWN CLASS DEFINITION\n  // =========================\n\n  var backdrop = '.dropdown-backdrop'\n  var toggle   = '[data-toggle=\"dropdown\"]'\n  var Dropdown = function (element) {\n    $(element).on('click.bs.dropdown', this.toggle)\n  }\n\n  Dropdown.VERSION = '3.3.7'\n\n  function getParent($this) {\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    var $parent = selector && $(selector)\n\n    return $parent && $parent.length ? $parent : $this.parent()\n  }\n\n  function clearMenus(e) {\n    if (e && e.which === 3) return\n    $(backdrop).remove()\n    $(toggle).each(function () {\n      var $this         = $(this)\n      var $parent       = getParent($this)\n      var relatedTarget = { relatedTarget: this }\n\n      if (!$parent.hasClass('open')) return\n\n      if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return\n\n      $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))\n\n      if (e.isDefaultPrevented()) return\n\n      $this.attr('aria-expanded', 'false')\n      $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget))\n    })\n  }\n\n  Dropdown.prototype.toggle = function (e) {\n    var $this = $(this)\n\n    if ($this.is('.disabled, :disabled')) return\n\n    var $parent  = getParent($this)\n    var isActive = $parent.hasClass('open')\n\n    clearMenus()\n\n    if (!isActive) {\n      if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {\n        // if mobile we use a backdrop because click events don't delegate\n        $(document.createElement('div'))\n          .addClass('dropdown-backdrop')\n          .insertAfter($(this))\n          .on('click', clearMenus)\n      }\n\n      var relatedTarget = { relatedTarget: this }\n      $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))\n\n      if (e.isDefaultPrevented()) return\n\n      $this\n        .trigger('focus')\n        .attr('aria-expanded', 'true')\n\n      $parent\n        .toggleClass('open')\n        .trigger($.Event('shown.bs.dropdown', relatedTarget))\n    }\n\n    return false\n  }\n\n  Dropdown.prototype.keydown = function (e) {\n    if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return\n\n    var $this = $(this)\n\n    e.preventDefault()\n    e.stopPropagation()\n\n    if ($this.is('.disabled, :disabled')) return\n\n    var $parent  = getParent($this)\n    var isActive = $parent.hasClass('open')\n\n    if (!isActive && e.which != 27 || isActive && e.which == 27) {\n      if (e.which == 27) $parent.find(toggle).trigger('focus')\n      return $this.trigger('click')\n    }\n\n    var desc = ' li:not(.disabled):visible a'\n    var $items = $parent.find('.dropdown-menu' + desc)\n\n    if (!$items.length) return\n\n    var index = $items.index(e.target)\n\n    if (e.which == 38 && index > 0)                 index--         // up\n    if (e.which == 40 && index < $items.length - 1) index++         // down\n    if (!~index)                                    index = 0\n\n    $items.eq(index).trigger('focus')\n  }\n\n\n  // DROPDOWN PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.dropdown')\n\n      if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  var old = $.fn.dropdown\n\n  $.fn.dropdown             = Plugin\n  $.fn.dropdown.Constructor = Dropdown\n\n\n  // DROPDOWN NO CONFLICT\n  // ====================\n\n  $.fn.dropdown.noConflict = function () {\n    $.fn.dropdown = old\n    return this\n  }\n\n\n  // APPLY TO STANDARD DROPDOWN ELEMENTS\n  // ===================================\n\n  $(document)\n    .on('click.bs.dropdown.data-api', clearMenus)\n    .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })\n    .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)\n    .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)\n    .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: modal.js v3.3.7\n * http://getbootstrap.com/javascript/#modals\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // MODAL CLASS DEFINITION\n  // ======================\n\n  var Modal = function (element, options) {\n    this.options             = options\n    this.$body               = $(document.body)\n    this.$element            = $(element)\n    this.$dialog             = this.$element.find('.modal-dialog')\n    this.$backdrop           = null\n    this.isShown             = null\n    this.originalBodyPad     = null\n    this.scrollbarWidth      = 0\n    this.ignoreBackdropClick = false\n\n    if (this.options.remote) {\n      this.$element\n        .find('.modal-content')\n        .load(this.options.remote, $.proxy(function () {\n          this.$element.trigger('loaded.bs.modal')\n        }, this))\n    }\n  }\n\n  Modal.VERSION  = '3.3.7'\n\n  Modal.TRANSITION_DURATION = 300\n  Modal.BACKDROP_TRANSITION_DURATION = 150\n\n  Modal.DEFAULTS = {\n    backdrop: true,\n    keyboard: true,\n    show: true\n  }\n\n  Modal.prototype.toggle = function (_relatedTarget) {\n    return this.isShown ? this.hide() : this.show(_relatedTarget)\n  }\n\n  Modal.prototype.show = function (_relatedTarget) {\n    var that = this\n    var e    = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })\n\n    this.$element.trigger(e)\n\n    if (this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = true\n\n    this.checkScrollbar()\n    this.setScrollbar()\n    this.$body.addClass('modal-open')\n\n    this.escape()\n    this.resize()\n\n    this.$element.on('click.dismiss.bs.modal', '[data-dismiss=\"modal\"]', $.proxy(this.hide, this))\n\n    this.$dialog.on('mousedown.dismiss.bs.modal', function () {\n      that.$element.one('mouseup.dismiss.bs.modal', function (e) {\n        if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true\n      })\n    })\n\n    this.backdrop(function () {\n      var transition = $.support.transition && that.$element.hasClass('fade')\n\n      if (!that.$element.parent().length) {\n        that.$element.appendTo(that.$body) // don't move modals dom position\n      }\n\n      that.$element\n        .show()\n        .scrollTop(0)\n\n      that.adjustDialog()\n\n      if (transition) {\n        that.$element[0].offsetWidth // force reflow\n      }\n\n      that.$element.addClass('in')\n\n      that.enforceFocus()\n\n      var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })\n\n      transition ?\n        that.$dialog // wait for modal to slide in\n          .one('bsTransitionEnd', function () {\n            that.$element.trigger('focus').trigger(e)\n          })\n          .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n        that.$element.trigger('focus').trigger(e)\n    })\n  }\n\n  Modal.prototype.hide = function (e) {\n    if (e) e.preventDefault()\n\n    e = $.Event('hide.bs.modal')\n\n    this.$element.trigger(e)\n\n    if (!this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = false\n\n    this.escape()\n    this.resize()\n\n    $(document).off('focusin.bs.modal')\n\n    this.$element\n      .removeClass('in')\n      .off('click.dismiss.bs.modal')\n      .off('mouseup.dismiss.bs.modal')\n\n    this.$dialog.off('mousedown.dismiss.bs.modal')\n\n    $.support.transition && this.$element.hasClass('fade') ?\n      this.$element\n        .one('bsTransitionEnd', $.proxy(this.hideModal, this))\n        .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n      this.hideModal()\n  }\n\n  Modal.prototype.enforceFocus = function () {\n    $(document)\n      .off('focusin.bs.modal') // guard against infinite focus loop\n      .on('focusin.bs.modal', $.proxy(function (e) {\n        if (document !== e.target &&\n            this.$element[0] !== e.target &&\n            !this.$element.has(e.target).length) {\n          this.$element.trigger('focus')\n        }\n      }, this))\n  }\n\n  Modal.prototype.escape = function () {\n    if (this.isShown && this.options.keyboard) {\n      this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {\n        e.which == 27 && this.hide()\n      }, this))\n    } else if (!this.isShown) {\n      this.$element.off('keydown.dismiss.bs.modal')\n    }\n  }\n\n  Modal.prototype.resize = function () {\n    if (this.isShown) {\n      $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))\n    } else {\n      $(window).off('resize.bs.modal')\n    }\n  }\n\n  Modal.prototype.hideModal = function () {\n    var that = this\n    this.$element.hide()\n    this.backdrop(function () {\n      that.$body.removeClass('modal-open')\n      that.resetAdjustments()\n      that.resetScrollbar()\n      that.$element.trigger('hidden.bs.modal')\n    })\n  }\n\n  Modal.prototype.removeBackdrop = function () {\n    this.$backdrop && this.$backdrop.remove()\n    this.$backdrop = null\n  }\n\n  Modal.prototype.backdrop = function (callback) {\n    var that = this\n    var animate = this.$element.hasClass('fade') ? 'fade' : ''\n\n    if (this.isShown && this.options.backdrop) {\n      var doAnimate = $.support.transition && animate\n\n      this.$backdrop = $(document.createElement('div'))\n        .addClass('modal-backdrop ' + animate)\n        .appendTo(this.$body)\n\n      this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {\n        if (this.ignoreBackdropClick) {\n          this.ignoreBackdropClick = false\n          return\n        }\n        if (e.target !== e.currentTarget) return\n        this.options.backdrop == 'static'\n          ? this.$element[0].focus()\n          : this.hide()\n      }, this))\n\n      if (doAnimate) this.$backdrop[0].offsetWidth // force reflow\n\n      this.$backdrop.addClass('in')\n\n      if (!callback) return\n\n      doAnimate ?\n        this.$backdrop\n          .one('bsTransitionEnd', callback)\n          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n        callback()\n\n    } else if (!this.isShown && this.$backdrop) {\n      this.$backdrop.removeClass('in')\n\n      var callbackRemove = function () {\n        that.removeBackdrop()\n        callback && callback()\n      }\n      $.support.transition && this.$element.hasClass('fade') ?\n        this.$backdrop\n          .one('bsTransitionEnd', callbackRemove)\n          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n        callbackRemove()\n\n    } else if (callback) {\n      callback()\n    }\n  }\n\n  // these following methods are used to handle overflowing modals\n\n  Modal.prototype.handleUpdate = function () {\n    this.adjustDialog()\n  }\n\n  Modal.prototype.adjustDialog = function () {\n    var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight\n\n    this.$element.css({\n      paddingLeft:  !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',\n      paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''\n    })\n  }\n\n  Modal.prototype.resetAdjustments = function () {\n    this.$element.css({\n      paddingLeft: '',\n      paddingRight: ''\n    })\n  }\n\n  Modal.prototype.checkScrollbar = function () {\n    var fullWindowWidth = window.innerWidth\n    if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8\n      var documentElementRect = document.documentElement.getBoundingClientRect()\n      fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)\n    }\n    this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth\n    this.scrollbarWidth = this.measureScrollbar()\n  }\n\n  Modal.prototype.setScrollbar = function () {\n    var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)\n    this.originalBodyPad = document.body.style.paddingRight || ''\n    if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)\n  }\n\n  Modal.prototype.resetScrollbar = function () {\n    this.$body.css('padding-right', this.originalBodyPad)\n  }\n\n  Modal.prototype.measureScrollbar = function () { // thx walsh\n    var scrollDiv = document.createElement('div')\n    scrollDiv.className = 'modal-scrollbar-measure'\n    this.$body.append(scrollDiv)\n    var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth\n    this.$body[0].removeChild(scrollDiv)\n    return scrollbarWidth\n  }\n\n\n  // MODAL PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option, _relatedTarget) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.modal')\n      var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data) $this.data('bs.modal', (data = new Modal(this, options)))\n      if (typeof option == 'string') data[option](_relatedTarget)\n      else if (options.show) data.show(_relatedTarget)\n    })\n  }\n\n  var old = $.fn.modal\n\n  $.fn.modal             = Plugin\n  $.fn.modal.Constructor = Modal\n\n\n  // MODAL NO CONFLICT\n  // =================\n\n  $.fn.modal.noConflict = function () {\n    $.fn.modal = old\n    return this\n  }\n\n\n  // MODAL DATA-API\n  // ==============\n\n  $(document).on('click.bs.modal.data-api', '[data-toggle=\"modal\"]', function (e) {\n    var $this   = $(this)\n    var href    = $this.attr('href')\n    var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\\s]+$)/, ''))) // strip for ie7\n    var option  = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())\n\n    if ($this.is('a')) e.preventDefault()\n\n    $target.one('show.bs.modal', function (showEvent) {\n      if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown\n      $target.one('hidden.bs.modal', function () {\n        $this.is(':visible') && $this.trigger('focus')\n      })\n    })\n    Plugin.call($target, option, this)\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: tooltip.js v3.3.7\n * http://getbootstrap.com/javascript/#tooltip\n * Inspired by the original jQuery.tipsy by Jason Frame\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // TOOLTIP PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Tooltip = function (element, options) {\n    this.type       = null\n    this.options    = null\n    this.enabled    = null\n    this.timeout    = null\n    this.hoverState = null\n    this.$element   = null\n    this.inState    = null\n\n    this.init('tooltip', element, options)\n  }\n\n  Tooltip.VERSION  = '3.3.7'\n\n  Tooltip.TRANSITION_DURATION = 150\n\n  Tooltip.DEFAULTS = {\n    animation: true,\n    placement: 'top',\n    selector: false,\n    template: '<div class=\"tooltip\" role=\"tooltip\"><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\"></div></div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    container: false,\n    viewport: {\n      selector: 'body',\n      padding: 0\n    }\n  }\n\n  Tooltip.prototype.init = function (type, element, options) {\n    this.enabled   = true\n    this.type      = type\n    this.$element  = $(element)\n    this.options   = this.getOptions(options)\n    this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))\n    this.inState   = { click: false, hover: false, focus: false }\n\n    if (this.$element[0] instanceof document.constructor && !this.options.selector) {\n      throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')\n    }\n\n    var triggers = this.options.trigger.split(' ')\n\n    for (var i = triggers.length; i--;) {\n      var trigger = triggers[i]\n\n      if (trigger == 'click') {\n        this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))\n      } else if (trigger != 'manual') {\n        var eventIn  = trigger == 'hover' ? 'mouseenter' : 'focusin'\n        var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'\n\n        this.$element.on(eventIn  + '.' + this.type, this.options.selector, $.proxy(this.enter, this))\n        this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))\n      }\n    }\n\n    this.options.selector ?\n      (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :\n      this.fixTitle()\n  }\n\n  Tooltip.prototype.getDefaults = function () {\n    return Tooltip.DEFAULTS\n  }\n\n  Tooltip.prototype.getOptions = function (options) {\n    options = $.extend({}, this.getDefaults(), this.$element.data(), options)\n\n    if (options.delay && typeof options.delay == 'number') {\n      options.delay = {\n        show: options.delay,\n        hide: options.delay\n      }\n    }\n\n    return options\n  }\n\n  Tooltip.prototype.getDelegateOptions = function () {\n    var options  = {}\n    var defaults = this.getDefaults()\n\n    this._options && $.each(this._options, function (key, value) {\n      if (defaults[key] != value) options[key] = value\n    })\n\n    return options\n  }\n\n  Tooltip.prototype.enter = function (obj) {\n    var self = obj instanceof this.constructor ?\n      obj : $(obj.currentTarget).data('bs.' + this.type)\n\n    if (!self) {\n      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n      $(obj.currentTarget).data('bs.' + this.type, self)\n    }\n\n    if (obj instanceof $.Event) {\n      self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true\n    }\n\n    if (self.tip().hasClass('in') || self.hoverState == 'in') {\n      self.hoverState = 'in'\n      return\n    }\n\n    clearTimeout(self.timeout)\n\n    self.hoverState = 'in'\n\n    if (!self.options.delay || !self.options.delay.show) return self.show()\n\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'in') self.show()\n    }, self.options.delay.show)\n  }\n\n  Tooltip.prototype.isInStateTrue = function () {\n    for (var key in this.inState) {\n      if (this.inState[key]) return true\n    }\n\n    return false\n  }\n\n  Tooltip.prototype.leave = function (obj) {\n    var self = obj instanceof this.constructor ?\n      obj : $(obj.currentTarget).data('bs.' + this.type)\n\n    if (!self) {\n      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n      $(obj.currentTarget).data('bs.' + this.type, self)\n    }\n\n    if (obj instanceof $.Event) {\n      self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false\n    }\n\n    if (self.isInStateTrue()) return\n\n    clearTimeout(self.timeout)\n\n    self.hoverState = 'out'\n\n    if (!self.options.delay || !self.options.delay.hide) return self.hide()\n\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'out') self.hide()\n    }, self.options.delay.hide)\n  }\n\n  Tooltip.prototype.show = function () {\n    var e = $.Event('show.bs.' + this.type)\n\n    if (this.hasContent() && this.enabled) {\n      this.$element.trigger(e)\n\n      var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])\n      if (e.isDefaultPrevented() || !inDom) return\n      var that = this\n\n      var $tip = this.tip()\n\n      var tipId = this.getUID(this.type)\n\n      this.setContent()\n      $tip.attr('id', tipId)\n      this.$element.attr('aria-describedby', tipId)\n\n      if (this.options.animation) $tip.addClass('fade')\n\n      var placement = typeof this.options.placement == 'function' ?\n        this.options.placement.call(this, $tip[0], this.$element[0]) :\n        this.options.placement\n\n      var autoToken = /\\s?auto?\\s?/i\n      var autoPlace = autoToken.test(placement)\n      if (autoPlace) placement = placement.replace(autoToken, '') || 'top'\n\n      $tip\n        .detach()\n        .css({ top: 0, left: 0, display: 'block' })\n        .addClass(placement)\n        .data('bs.' + this.type, this)\n\n      this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)\n      this.$element.trigger('inserted.bs.' + this.type)\n\n      var pos          = this.getPosition()\n      var actualWidth  = $tip[0].offsetWidth\n      var actualHeight = $tip[0].offsetHeight\n\n      if (autoPlace) {\n        var orgPlacement = placement\n        var viewportDim = this.getPosition(this.$viewport)\n\n        placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top'    :\n                    placement == 'top'    && pos.top    - actualHeight < viewportDim.top    ? 'bottom' :\n                    placement == 'right'  && pos.right  + actualWidth  > viewportDim.width  ? 'left'   :\n                    placement == 'left'   && pos.left   - actualWidth  < viewportDim.left   ? 'right'  :\n                    placement\n\n        $tip\n          .removeClass(orgPlacement)\n          .addClass(placement)\n      }\n\n      var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)\n\n      this.applyPlacement(calculatedOffset, placement)\n\n      var complete = function () {\n        var prevHoverState = that.hoverState\n        that.$element.trigger('shown.bs.' + that.type)\n        that.hoverState = null\n\n        if (prevHoverState == 'out') that.leave(that)\n      }\n\n      $.support.transition && this.$tip.hasClass('fade') ?\n        $tip\n          .one('bsTransitionEnd', complete)\n          .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n        complete()\n    }\n  }\n\n  Tooltip.prototype.applyPlacement = function (offset, placement) {\n    var $tip   = this.tip()\n    var width  = $tip[0].offsetWidth\n    var height = $tip[0].offsetHeight\n\n    // manually read margins because getBoundingClientRect includes difference\n    var marginTop = parseInt($tip.css('margin-top'), 10)\n    var marginLeft = parseInt($tip.css('margin-left'), 10)\n\n    // we must check for NaN for ie 8/9\n    if (isNaN(marginTop))  marginTop  = 0\n    if (isNaN(marginLeft)) marginLeft = 0\n\n    offset.top  += marginTop\n    offset.left += marginLeft\n\n    // $.fn.offset doesn't round pixel values\n    // so we use setOffset directly with our own function B-0\n    $.offset.setOffset($tip[0], $.extend({\n      using: function (props) {\n        $tip.css({\n          top: Math.round(props.top),\n          left: Math.round(props.left)\n        })\n      }\n    }, offset), 0)\n\n    $tip.addClass('in')\n\n    // check to see if placing tip in new offset caused the tip to resize itself\n    var actualWidth  = $tip[0].offsetWidth\n    var actualHeight = $tip[0].offsetHeight\n\n    if (placement == 'top' && actualHeight != height) {\n      offset.top = offset.top + height - actualHeight\n    }\n\n    var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)\n\n    if (delta.left) offset.left += delta.left\n    else offset.top += delta.top\n\n    var isVertical          = /top|bottom/.test(placement)\n    var arrowDelta          = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight\n    var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'\n\n    $tip.offset(offset)\n    this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)\n  }\n\n  Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {\n    this.arrow()\n      .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')\n      .css(isVertical ? 'top' : 'left', '')\n  }\n\n  Tooltip.prototype.setContent = function () {\n    var $tip  = this.tip()\n    var title = this.getTitle()\n\n    $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)\n    $tip.removeClass('fade in top bottom left right')\n  }\n\n  Tooltip.prototype.hide = function (callback) {\n    var that = this\n    var $tip = $(this.$tip)\n    var e    = $.Event('hide.bs.' + this.type)\n\n    function complete() {\n      if (that.hoverState != 'in') $tip.detach()\n      if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary.\n        that.$element\n          .removeAttr('aria-describedby')\n          .trigger('hidden.bs.' + that.type)\n      }\n      callback && callback()\n    }\n\n    this.$element.trigger(e)\n\n    if (e.isDefaultPrevented()) return\n\n    $tip.removeClass('in')\n\n    $.support.transition && $tip.hasClass('fade') ?\n      $tip\n        .one('bsTransitionEnd', complete)\n        .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n      complete()\n\n    this.hoverState = null\n\n    return this\n  }\n\n  Tooltip.prototype.fixTitle = function () {\n    var $e = this.$element\n    if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {\n      $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')\n    }\n  }\n\n  Tooltip.prototype.hasContent = function () {\n    return this.getTitle()\n  }\n\n  Tooltip.prototype.getPosition = function ($element) {\n    $element   = $element || this.$element\n\n    var el     = $element[0]\n    var isBody = el.tagName == 'BODY'\n\n    var elRect    = el.getBoundingClientRect()\n    if (elRect.width == null) {\n      // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093\n      elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })\n    }\n    var isSvg = window.SVGElement && el instanceof window.SVGElement\n    // Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3.\n    // See https://github.com/twbs/bootstrap/issues/20280\n    var elOffset  = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset())\n    var scroll    = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }\n    var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null\n\n    return $.extend({}, elRect, scroll, outerDims, elOffset)\n  }\n\n  Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {\n    return placement == 'bottom' ? { top: pos.top + pos.height,   left: pos.left + pos.width / 2 - actualWidth / 2 } :\n           placement == 'top'    ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :\n           placement == 'left'   ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :\n        /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }\n\n  }\n\n  Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {\n    var delta = { top: 0, left: 0 }\n    if (!this.$viewport) return delta\n\n    var viewportPadding = this.options.viewport && this.options.viewport.padding || 0\n    var viewportDimensions = this.getPosition(this.$viewport)\n\n    if (/right|left/.test(placement)) {\n      var topEdgeOffset    = pos.top - viewportPadding - viewportDimensions.scroll\n      var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight\n      if (topEdgeOffset < viewportDimensions.top) { // top overflow\n        delta.top = viewportDimensions.top - topEdgeOffset\n      } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow\n        delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset\n      }\n    } else {\n      var leftEdgeOffset  = pos.left - viewportPadding\n      var rightEdgeOffset = pos.left + viewportPadding + actualWidth\n      if (leftEdgeOffset < viewportDimensions.left) { // left overflow\n        delta.left = viewportDimensions.left - leftEdgeOffset\n      } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow\n        delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset\n      }\n    }\n\n    return delta\n  }\n\n  Tooltip.prototype.getTitle = function () {\n    var title\n    var $e = this.$element\n    var o  = this.options\n\n    title = $e.attr('data-original-title')\n      || (typeof o.title == 'function' ? o.title.call($e[0]) :  o.title)\n\n    return title\n  }\n\n  Tooltip.prototype.getUID = function (prefix) {\n    do prefix += ~~(Math.random() * 1000000)\n    while (document.getElementById(prefix))\n    return prefix\n  }\n\n  Tooltip.prototype.tip = function () {\n    if (!this.$tip) {\n      this.$tip = $(this.options.template)\n      if (this.$tip.length != 1) {\n        throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')\n      }\n    }\n    return this.$tip\n  }\n\n  Tooltip.prototype.arrow = function () {\n    return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))\n  }\n\n  Tooltip.prototype.enable = function () {\n    this.enabled = true\n  }\n\n  Tooltip.prototype.disable = function () {\n    this.enabled = false\n  }\n\n  Tooltip.prototype.toggleEnabled = function () {\n    this.enabled = !this.enabled\n  }\n\n  Tooltip.prototype.toggle = function (e) {\n    var self = this\n    if (e) {\n      self = $(e.currentTarget).data('bs.' + this.type)\n      if (!self) {\n        self = new this.constructor(e.currentTarget, this.getDelegateOptions())\n        $(e.currentTarget).data('bs.' + this.type, self)\n      }\n    }\n\n    if (e) {\n      self.inState.click = !self.inState.click\n      if (self.isInStateTrue()) self.enter(self)\n      else self.leave(self)\n    } else {\n      self.tip().hasClass('in') ? self.leave(self) : self.enter(self)\n    }\n  }\n\n  Tooltip.prototype.destroy = function () {\n    var that = this\n    clearTimeout(this.timeout)\n    this.hide(function () {\n      that.$element.off('.' + that.type).removeData('bs.' + that.type)\n      if (that.$tip) {\n        that.$tip.detach()\n      }\n      that.$tip = null\n      that.$arrow = null\n      that.$viewport = null\n      that.$element = null\n    })\n  }\n\n\n  // TOOLTIP PLUGIN DEFINITION\n  // =========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.tooltip')\n      var options = typeof option == 'object' && option\n\n      if (!data && /destroy|hide/.test(option)) return\n      if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.tooltip\n\n  $.fn.tooltip             = Plugin\n  $.fn.tooltip.Constructor = Tooltip\n\n\n  // TOOLTIP NO CONFLICT\n  // ===================\n\n  $.fn.tooltip.noConflict = function () {\n    $.fn.tooltip = old\n    return this\n  }\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: popover.js v3.3.7\n * http://getbootstrap.com/javascript/#popovers\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // POPOVER PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Popover = function (element, options) {\n    this.init('popover', element, options)\n  }\n\n  if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')\n\n  Popover.VERSION  = '3.3.7'\n\n  Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {\n    placement: 'right',\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\"><div class=\"arrow\"></div><h3 class=\"popover-title\"></h3><div class=\"popover-content\"></div></div>'\n  })\n\n\n  // NOTE: POPOVER EXTENDS tooltip.js\n  // ================================\n\n  Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)\n\n  Popover.prototype.constructor = Popover\n\n  Popover.prototype.getDefaults = function () {\n    return Popover.DEFAULTS\n  }\n\n  Popover.prototype.setContent = function () {\n    var $tip    = this.tip()\n    var title   = this.getTitle()\n    var content = this.getContent()\n\n    $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)\n    $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events\n      this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'\n    ](content)\n\n    $tip.removeClass('fade top bottom left right in')\n\n    // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do\n    // this manually by checking the contents.\n    if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()\n  }\n\n  Popover.prototype.hasContent = function () {\n    return this.getTitle() || this.getContent()\n  }\n\n  Popover.prototype.getContent = function () {\n    var $e = this.$element\n    var o  = this.options\n\n    return $e.attr('data-content')\n      || (typeof o.content == 'function' ?\n            o.content.call($e[0]) :\n            o.content)\n  }\n\n  Popover.prototype.arrow = function () {\n    return (this.$arrow = this.$arrow || this.tip().find('.arrow'))\n  }\n\n\n  // POPOVER PLUGIN DEFINITION\n  // =========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.popover')\n      var options = typeof option == 'object' && option\n\n      if (!data && /destroy|hide/.test(option)) return\n      if (!data) $this.data('bs.popover', (data = new Popover(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.popover\n\n  $.fn.popover             = Plugin\n  $.fn.popover.Constructor = Popover\n\n\n  // POPOVER NO CONFLICT\n  // ===================\n\n  $.fn.popover.noConflict = function () {\n    $.fn.popover = old\n    return this\n  }\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: scrollspy.js v3.3.7\n * http://getbootstrap.com/javascript/#scrollspy\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // SCROLLSPY CLASS DEFINITION\n  // ==========================\n\n  function ScrollSpy(element, options) {\n    this.$body          = $(document.body)\n    this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)\n    this.options        = $.extend({}, ScrollSpy.DEFAULTS, options)\n    this.selector       = (this.options.target || '') + ' .nav li > a'\n    this.offsets        = []\n    this.targets        = []\n    this.activeTarget   = null\n    this.scrollHeight   = 0\n\n    this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))\n    this.refresh()\n    this.process()\n  }\n\n  ScrollSpy.VERSION  = '3.3.7'\n\n  ScrollSpy.DEFAULTS = {\n    offset: 10\n  }\n\n  ScrollSpy.prototype.getScrollHeight = function () {\n    return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)\n  }\n\n  ScrollSpy.prototype.refresh = function () {\n    var that          = this\n    var offsetMethod  = 'offset'\n    var offsetBase    = 0\n\n    this.offsets      = []\n    this.targets      = []\n    this.scrollHeight = this.getScrollHeight()\n\n    if (!$.isWindow(this.$scrollElement[0])) {\n      offsetMethod = 'position'\n      offsetBase   = this.$scrollElement.scrollTop()\n    }\n\n    this.$body\n      .find(this.selector)\n      .map(function () {\n        var $el   = $(this)\n        var href  = $el.data('target') || $el.attr('href')\n        var $href = /^#./.test(href) && $(href)\n\n        return ($href\n          && $href.length\n          && $href.is(':visible')\n          && [[$href[offsetMethod]().top + offsetBase, href]]) || null\n      })\n      .sort(function (a, b) { return a[0] - b[0] })\n      .each(function () {\n        that.offsets.push(this[0])\n        that.targets.push(this[1])\n      })\n  }\n\n  ScrollSpy.prototype.process = function () {\n    var scrollTop    = this.$scrollElement.scrollTop() + this.options.offset\n    var scrollHeight = this.getScrollHeight()\n    var maxScroll    = this.options.offset + scrollHeight - this.$scrollElement.height()\n    var offsets      = this.offsets\n    var targets      = this.targets\n    var activeTarget = this.activeTarget\n    var i\n\n    if (this.scrollHeight != scrollHeight) {\n      this.refresh()\n    }\n\n    if (scrollTop >= maxScroll) {\n      return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)\n    }\n\n    if (activeTarget && scrollTop < offsets[0]) {\n      this.activeTarget = null\n      return this.clear()\n    }\n\n    for (i = offsets.length; i--;) {\n      activeTarget != targets[i]\n        && scrollTop >= offsets[i]\n        && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1])\n        && this.activate(targets[i])\n    }\n  }\n\n  ScrollSpy.prototype.activate = function (target) {\n    this.activeTarget = target\n\n    this.clear()\n\n    var selector = this.selector +\n      '[data-target=\"' + target + '\"],' +\n      this.selector + '[href=\"' + target + '\"]'\n\n    var active = $(selector)\n      .parents('li')\n      .addClass('active')\n\n    if (active.parent('.dropdown-menu').length) {\n      active = active\n        .closest('li.dropdown')\n        .addClass('active')\n    }\n\n    active.trigger('activate.bs.scrollspy')\n  }\n\n  ScrollSpy.prototype.clear = function () {\n    $(this.selector)\n      .parentsUntil(this.options.target, '.active')\n      .removeClass('active')\n  }\n\n\n  // SCROLLSPY PLUGIN DEFINITION\n  // ===========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.scrollspy')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.scrollspy\n\n  $.fn.scrollspy             = Plugin\n  $.fn.scrollspy.Constructor = ScrollSpy\n\n\n  // SCROLLSPY NO CONFLICT\n  // =====================\n\n  $.fn.scrollspy.noConflict = function () {\n    $.fn.scrollspy = old\n    return this\n  }\n\n\n  // SCROLLSPY DATA-API\n  // ==================\n\n  $(window).on('load.bs.scrollspy.data-api', function () {\n    $('[data-spy=\"scroll\"]').each(function () {\n      var $spy = $(this)\n      Plugin.call($spy, $spy.data())\n    })\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: tab.js v3.3.7\n * http://getbootstrap.com/javascript/#tabs\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // TAB CLASS DEFINITION\n  // ====================\n\n  var Tab = function (element) {\n    // jscs:disable requireDollarBeforejQueryAssignment\n    this.element = $(element)\n    // jscs:enable requireDollarBeforejQueryAssignment\n  }\n\n  Tab.VERSION = '3.3.7'\n\n  Tab.TRANSITION_DURATION = 150\n\n  Tab.prototype.show = function () {\n    var $this    = this.element\n    var $ul      = $this.closest('ul:not(.dropdown-menu)')\n    var selector = $this.data('target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    if ($this.parent('li').hasClass('active')) return\n\n    var $previous = $ul.find('.active:last a')\n    var hideEvent = $.Event('hide.bs.tab', {\n      relatedTarget: $this[0]\n    })\n    var showEvent = $.Event('show.bs.tab', {\n      relatedTarget: $previous[0]\n    })\n\n    $previous.trigger(hideEvent)\n    $this.trigger(showEvent)\n\n    if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return\n\n    var $target = $(selector)\n\n    this.activate($this.closest('li'), $ul)\n    this.activate($target, $target.parent(), function () {\n      $previous.trigger({\n        type: 'hidden.bs.tab',\n        relatedTarget: $this[0]\n      })\n      $this.trigger({\n        type: 'shown.bs.tab',\n        relatedTarget: $previous[0]\n      })\n    })\n  }\n\n  Tab.prototype.activate = function (element, container, callback) {\n    var $active    = container.find('> .active')\n    var transition = callback\n      && $.support.transition\n      && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length)\n\n    function next() {\n      $active\n        .removeClass('active')\n        .find('> .dropdown-menu > .active')\n          .removeClass('active')\n        .end()\n        .find('[data-toggle=\"tab\"]')\n          .attr('aria-expanded', false)\n\n      element\n        .addClass('active')\n        .find('[data-toggle=\"tab\"]')\n          .attr('aria-expanded', true)\n\n      if (transition) {\n        element[0].offsetWidth // reflow for transition\n        element.addClass('in')\n      } else {\n        element.removeClass('fade')\n      }\n\n      if (element.parent('.dropdown-menu').length) {\n        element\n          .closest('li.dropdown')\n            .addClass('active')\n          .end()\n          .find('[data-toggle=\"tab\"]')\n            .attr('aria-expanded', true)\n      }\n\n      callback && callback()\n    }\n\n    $active.length && transition ?\n      $active\n        .one('bsTransitionEnd', next)\n        .emulateTransitionEnd(Tab.TRANSITION_DURATION) :\n      next()\n\n    $active.removeClass('in')\n  }\n\n\n  // TAB PLUGIN DEFINITION\n  // =====================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.tab')\n\n      if (!data) $this.data('bs.tab', (data = new Tab(this)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.tab\n\n  $.fn.tab             = Plugin\n  $.fn.tab.Constructor = Tab\n\n\n  // TAB NO CONFLICT\n  // ===============\n\n  $.fn.tab.noConflict = function () {\n    $.fn.tab = old\n    return this\n  }\n\n\n  // TAB DATA-API\n  // ============\n\n  var clickHandler = function (e) {\n    e.preventDefault()\n    Plugin.call($(this), 'show')\n  }\n\n  $(document)\n    .on('click.bs.tab.data-api', '[data-toggle=\"tab\"]', clickHandler)\n    .on('click.bs.tab.data-api', '[data-toggle=\"pill\"]', clickHandler)\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: affix.js v3.3.7\n * http://getbootstrap.com/javascript/#affix\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // AFFIX CLASS DEFINITION\n  // ======================\n\n  var Affix = function (element, options) {\n    this.options = $.extend({}, Affix.DEFAULTS, options)\n\n    this.$target = $(this.options.target)\n      .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))\n      .on('click.bs.affix.data-api',  $.proxy(this.checkPositionWithEventLoop, this))\n\n    this.$element     = $(element)\n    this.affixed      = null\n    this.unpin        = null\n    this.pinnedOffset = null\n\n    this.checkPosition()\n  }\n\n  Affix.VERSION  = '3.3.7'\n\n  Affix.RESET    = 'affix affix-top affix-bottom'\n\n  Affix.DEFAULTS = {\n    offset: 0,\n    target: window\n  }\n\n  Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {\n    var scrollTop    = this.$target.scrollTop()\n    var position     = this.$element.offset()\n    var targetHeight = this.$target.height()\n\n    if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false\n\n    if (this.affixed == 'bottom') {\n      if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'\n      return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'\n    }\n\n    var initializing   = this.affixed == null\n    var colliderTop    = initializing ? scrollTop : position.top\n    var colliderHeight = initializing ? targetHeight : height\n\n    if (offsetTop != null && scrollTop <= offsetTop) return 'top'\n    if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'\n\n    return false\n  }\n\n  Affix.prototype.getPinnedOffset = function () {\n    if (this.pinnedOffset) return this.pinnedOffset\n    this.$element.removeClass(Affix.RESET).addClass('affix')\n    var scrollTop = this.$target.scrollTop()\n    var position  = this.$element.offset()\n    return (this.pinnedOffset = position.top - scrollTop)\n  }\n\n  Affix.prototype.checkPositionWithEventLoop = function () {\n    setTimeout($.proxy(this.checkPosition, this), 1)\n  }\n\n  Affix.prototype.checkPosition = function () {\n    if (!this.$element.is(':visible')) return\n\n    var height       = this.$element.height()\n    var offset       = this.options.offset\n    var offsetTop    = offset.top\n    var offsetBottom = offset.bottom\n    var scrollHeight = Math.max($(document).height(), $(document.body).height())\n\n    if (typeof offset != 'object')         offsetBottom = offsetTop = offset\n    if (typeof offsetTop == 'function')    offsetTop    = offset.top(this.$element)\n    if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)\n\n    var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)\n\n    if (this.affixed != affix) {\n      if (this.unpin != null) this.$element.css('top', '')\n\n      var affixType = 'affix' + (affix ? '-' + affix : '')\n      var e         = $.Event(affixType + '.bs.affix')\n\n      this.$element.trigger(e)\n\n      if (e.isDefaultPrevented()) return\n\n      this.affixed = affix\n      this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null\n\n      this.$element\n        .removeClass(Affix.RESET)\n        .addClass(affixType)\n        .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')\n    }\n\n    if (affix == 'bottom') {\n      this.$element.offset({\n        top: scrollHeight - height - offsetBottom\n      })\n    }\n  }\n\n\n  // AFFIX PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.affix')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.affix', (data = new Affix(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.affix\n\n  $.fn.affix             = Plugin\n  $.fn.affix.Constructor = Affix\n\n\n  // AFFIX NO CONFLICT\n  // =================\n\n  $.fn.affix.noConflict = function () {\n    $.fn.affix = old\n    return this\n  }\n\n\n  // AFFIX DATA-API\n  // ==============\n\n  $(window).on('load', function () {\n    $('[data-spy=\"affix\"]').each(function () {\n      var $spy = $(this)\n      var data = $spy.data()\n\n      data.offset = data.offset || {}\n\n      if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom\n      if (data.offsetTop    != null) data.offset.top    = data.offsetTop\n\n      Plugin.call($spy, data)\n    })\n  })\n\n}(jQuery);\n"
  },
  {
    "path": "public/frontend/plugins/bootstrap3/js/npm.js",
    "content": "// This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment.\nrequire('../../js/transition.js')\nrequire('../../js/alert.js')\nrequire('../../js/button.js')\nrequire('../../js/carousel.js')\nrequire('../../js/collapse.js')\nrequire('../../js/dropdown.js')\nrequire('../../js/modal.js')\nrequire('../../js/tooltip.js')\nrequire('../../js/popover.js')\nrequire('../../js/scrollspy.js')\nrequire('../../js/tab.js')\nrequire('../../js/affix.js')"
  },
  {
    "path": "public/frontend/plugins/bootstrap4/css/bootstrap-grid.css",
    "content": "/*!\n * Bootstrap Grid v4.0.0-beta.2 (https://getbootstrap.com)\n * Copyright 2011-2017 The Bootstrap Authors\n * Copyright 2011-2017 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n@-ms-viewport {\n  width: device-width;\n}\n\nhtml {\n  box-sizing: border-box;\n  -ms-overflow-style: scrollbar;\n}\n\n*,\n*::before,\n*::after {\n  box-sizing: inherit;\n}\n\n.container {\n  width: 100%;\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n\n@media (min-width: 576px) {\n  .container {\n    max-width: 540px;\n  }\n}\n\n@media (min-width: 768px) {\n  .container {\n    max-width: 720px;\n  }\n}\n\n@media (min-width: 992px) {\n  .container {\n    max-width: 960px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .container {\n    max-width: 1140px;\n  }\n}\n\n.container-fluid {\n  width: 100%;\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n\n.row {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap;\n  margin-right: -15px;\n  margin-left: -15px;\n}\n\n.no-gutters {\n  margin-right: 0;\n  margin-left: 0;\n}\n\n.no-gutters > .col,\n.no-gutters > [class*=\"col-\"] {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col,\n.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm,\n.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md,\n.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg,\n.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl,\n.col-xl-auto {\n  position: relative;\n  width: 100%;\n  min-height: 1px;\n  padding-right: 15px;\n  padding-left: 15px;\n}\n\n.col {\n  -ms-flex-preferred-size: 0;\n      flex-basis: 0;\n  -ms-flex-positive: 1;\n      flex-grow: 1;\n  max-width: 100%;\n}\n\n.col-auto {\n  -ms-flex: 0 0 auto;\n      flex: 0 0 auto;\n  width: auto;\n  max-width: none;\n}\n\n.col-1 {\n  -ms-flex: 0 0 8.333333%;\n      flex: 0 0 8.333333%;\n  max-width: 8.333333%;\n}\n\n.col-2 {\n  -ms-flex: 0 0 16.666667%;\n      flex: 0 0 16.666667%;\n  max-width: 16.666667%;\n}\n\n.col-3 {\n  -ms-flex: 0 0 25%;\n      flex: 0 0 25%;\n  max-width: 25%;\n}\n\n.col-4 {\n  -ms-flex: 0 0 33.333333%;\n      flex: 0 0 33.333333%;\n  max-width: 33.333333%;\n}\n\n.col-5 {\n  -ms-flex: 0 0 41.666667%;\n      flex: 0 0 41.666667%;\n  max-width: 41.666667%;\n}\n\n.col-6 {\n  -ms-flex: 0 0 50%;\n      flex: 0 0 50%;\n  max-width: 50%;\n}\n\n.col-7 {\n  -ms-flex: 0 0 58.333333%;\n      flex: 0 0 58.333333%;\n  max-width: 58.333333%;\n}\n\n.col-8 {\n  -ms-flex: 0 0 66.666667%;\n      flex: 0 0 66.666667%;\n  max-width: 66.666667%;\n}\n\n.col-9 {\n  -ms-flex: 0 0 75%;\n      flex: 0 0 75%;\n  max-width: 75%;\n}\n\n.col-10 {\n  -ms-flex: 0 0 83.333333%;\n      flex: 0 0 83.333333%;\n  max-width: 83.333333%;\n}\n\n.col-11 {\n  -ms-flex: 0 0 91.666667%;\n      flex: 0 0 91.666667%;\n  max-width: 91.666667%;\n}\n\n.col-12 {\n  -ms-flex: 0 0 100%;\n      flex: 0 0 100%;\n  max-width: 100%;\n}\n\n.order-first {\n  -ms-flex-order: -1;\n      order: -1;\n}\n\n.order-1 {\n  -ms-flex-order: 1;\n      order: 1;\n}\n\n.order-2 {\n  -ms-flex-order: 2;\n      order: 2;\n}\n\n.order-3 {\n  -ms-flex-order: 3;\n      order: 3;\n}\n\n.order-4 {\n  -ms-flex-order: 4;\n      order: 4;\n}\n\n.order-5 {\n  -ms-flex-order: 5;\n      order: 5;\n}\n\n.order-6 {\n  -ms-flex-order: 6;\n      order: 6;\n}\n\n.order-7 {\n  -ms-flex-order: 7;\n      order: 7;\n}\n\n.order-8 {\n  -ms-flex-order: 8;\n      order: 8;\n}\n\n.order-9 {\n  -ms-flex-order: 9;\n      order: 9;\n}\n\n.order-10 {\n  -ms-flex-order: 10;\n      order: 10;\n}\n\n.order-11 {\n  -ms-flex-order: 11;\n      order: 11;\n}\n\n.order-12 {\n  -ms-flex-order: 12;\n      order: 12;\n}\n\n.offset-1 {\n  margin-left: 8.333333%;\n}\n\n.offset-2 {\n  margin-left: 16.666667%;\n}\n\n.offset-3 {\n  margin-left: 25%;\n}\n\n.offset-4 {\n  margin-left: 33.333333%;\n}\n\n.offset-5 {\n  margin-left: 41.666667%;\n}\n\n.offset-6 {\n  margin-left: 50%;\n}\n\n.offset-7 {\n  margin-left: 58.333333%;\n}\n\n.offset-8 {\n  margin-left: 66.666667%;\n}\n\n.offset-9 {\n  margin-left: 75%;\n}\n\n.offset-10 {\n  margin-left: 83.333333%;\n}\n\n.offset-11 {\n  margin-left: 91.666667%;\n}\n\n@media (min-width: 576px) {\n  .col-sm {\n    -ms-flex-preferred-size: 0;\n        flex-basis: 0;\n    -ms-flex-positive: 1;\n        flex-grow: 1;\n    max-width: 100%;\n  }\n  .col-sm-auto {\n    -ms-flex: 0 0 auto;\n        flex: 0 0 auto;\n    width: auto;\n    max-width: none;\n  }\n  .col-sm-1 {\n    -ms-flex: 0 0 8.333333%;\n        flex: 0 0 8.333333%;\n    max-width: 8.333333%;\n  }\n  .col-sm-2 {\n    -ms-flex: 0 0 16.666667%;\n        flex: 0 0 16.666667%;\n    max-width: 16.666667%;\n  }\n  .col-sm-3 {\n    -ms-flex: 0 0 25%;\n        flex: 0 0 25%;\n    max-width: 25%;\n  }\n  .col-sm-4 {\n    -ms-flex: 0 0 33.333333%;\n        flex: 0 0 33.333333%;\n    max-width: 33.333333%;\n  }\n  .col-sm-5 {\n    -ms-flex: 0 0 41.666667%;\n        flex: 0 0 41.666667%;\n    max-width: 41.666667%;\n  }\n  .col-sm-6 {\n    -ms-flex: 0 0 50%;\n        flex: 0 0 50%;\n    max-width: 50%;\n  }\n  .col-sm-7 {\n    -ms-flex: 0 0 58.333333%;\n        flex: 0 0 58.333333%;\n    max-width: 58.333333%;\n  }\n  .col-sm-8 {\n    -ms-flex: 0 0 66.666667%;\n        flex: 0 0 66.666667%;\n    max-width: 66.666667%;\n  }\n  .col-sm-9 {\n    -ms-flex: 0 0 75%;\n        flex: 0 0 75%;\n    max-width: 75%;\n  }\n  .col-sm-10 {\n    -ms-flex: 0 0 83.333333%;\n        flex: 0 0 83.333333%;\n    max-width: 83.333333%;\n  }\n  .col-sm-11 {\n    -ms-flex: 0 0 91.666667%;\n        flex: 0 0 91.666667%;\n    max-width: 91.666667%;\n  }\n  .col-sm-12 {\n    -ms-flex: 0 0 100%;\n        flex: 0 0 100%;\n    max-width: 100%;\n  }\n  .order-sm-first {\n    -ms-flex-order: -1;\n        order: -1;\n  }\n  .order-sm-1 {\n    -ms-flex-order: 1;\n        order: 1;\n  }\n  .order-sm-2 {\n    -ms-flex-order: 2;\n        order: 2;\n  }\n  .order-sm-3 {\n    -ms-flex-order: 3;\n        order: 3;\n  }\n  .order-sm-4 {\n    -ms-flex-order: 4;\n        order: 4;\n  }\n  .order-sm-5 {\n    -ms-flex-order: 5;\n        order: 5;\n  }\n  .order-sm-6 {\n    -ms-flex-order: 6;\n        order: 6;\n  }\n  .order-sm-7 {\n    -ms-flex-order: 7;\n        order: 7;\n  }\n  .order-sm-8 {\n    -ms-flex-order: 8;\n        order: 8;\n  }\n  .order-sm-9 {\n    -ms-flex-order: 9;\n        order: 9;\n  }\n  .order-sm-10 {\n    -ms-flex-order: 10;\n        order: 10;\n  }\n  .order-sm-11 {\n    -ms-flex-order: 11;\n        order: 11;\n  }\n  .order-sm-12 {\n    -ms-flex-order: 12;\n        order: 12;\n  }\n  .offset-sm-0 {\n    margin-left: 0;\n  }\n  .offset-sm-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-sm-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-sm-3 {\n    margin-left: 25%;\n  }\n  .offset-sm-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-sm-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-sm-6 {\n    margin-left: 50%;\n  }\n  .offset-sm-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-sm-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-sm-9 {\n    margin-left: 75%;\n  }\n  .offset-sm-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-sm-11 {\n    margin-left: 91.666667%;\n  }\n}\n\n@media (min-width: 768px) {\n  .col-md {\n    -ms-flex-preferred-size: 0;\n        flex-basis: 0;\n    -ms-flex-positive: 1;\n        flex-grow: 1;\n    max-width: 100%;\n  }\n  .col-md-auto {\n    -ms-flex: 0 0 auto;\n        flex: 0 0 auto;\n    width: auto;\n    max-width: none;\n  }\n  .col-md-1 {\n    -ms-flex: 0 0 8.333333%;\n        flex: 0 0 8.333333%;\n    max-width: 8.333333%;\n  }\n  .col-md-2 {\n    -ms-flex: 0 0 16.666667%;\n        flex: 0 0 16.666667%;\n    max-width: 16.666667%;\n  }\n  .col-md-3 {\n    -ms-flex: 0 0 25%;\n        flex: 0 0 25%;\n    max-width: 25%;\n  }\n  .col-md-4 {\n    -ms-flex: 0 0 33.333333%;\n        flex: 0 0 33.333333%;\n    max-width: 33.333333%;\n  }\n  .col-md-5 {\n    -ms-flex: 0 0 41.666667%;\n        flex: 0 0 41.666667%;\n    max-width: 41.666667%;\n  }\n  .col-md-6 {\n    -ms-flex: 0 0 50%;\n        flex: 0 0 50%;\n    max-width: 50%;\n  }\n  .col-md-7 {\n    -ms-flex: 0 0 58.333333%;\n        flex: 0 0 58.333333%;\n    max-width: 58.333333%;\n  }\n  .col-md-8 {\n    -ms-flex: 0 0 66.666667%;\n        flex: 0 0 66.666667%;\n    max-width: 66.666667%;\n  }\n  .col-md-9 {\n    -ms-flex: 0 0 75%;\n        flex: 0 0 75%;\n    max-width: 75%;\n  }\n  .col-md-10 {\n    -ms-flex: 0 0 83.333333%;\n        flex: 0 0 83.333333%;\n    max-width: 83.333333%;\n  }\n  .col-md-11 {\n    -ms-flex: 0 0 91.666667%;\n        flex: 0 0 91.666667%;\n    max-width: 91.666667%;\n  }\n  .col-md-12 {\n    -ms-flex: 0 0 100%;\n        flex: 0 0 100%;\n    max-width: 100%;\n  }\n  .order-md-first {\n    -ms-flex-order: -1;\n        order: -1;\n  }\n  .order-md-1 {\n    -ms-flex-order: 1;\n        order: 1;\n  }\n  .order-md-2 {\n    -ms-flex-order: 2;\n        order: 2;\n  }\n  .order-md-3 {\n    -ms-flex-order: 3;\n        order: 3;\n  }\n  .order-md-4 {\n    -ms-flex-order: 4;\n        order: 4;\n  }\n  .order-md-5 {\n    -ms-flex-order: 5;\n        order: 5;\n  }\n  .order-md-6 {\n    -ms-flex-order: 6;\n        order: 6;\n  }\n  .order-md-7 {\n    -ms-flex-order: 7;\n        order: 7;\n  }\n  .order-md-8 {\n    -ms-flex-order: 8;\n        order: 8;\n  }\n  .order-md-9 {\n    -ms-flex-order: 9;\n        order: 9;\n  }\n  .order-md-10 {\n    -ms-flex-order: 10;\n        order: 10;\n  }\n  .order-md-11 {\n    -ms-flex-order: 11;\n        order: 11;\n  }\n  .order-md-12 {\n    -ms-flex-order: 12;\n        order: 12;\n  }\n  .offset-md-0 {\n    margin-left: 0;\n  }\n  .offset-md-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-md-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-md-3 {\n    margin-left: 25%;\n  }\n  .offset-md-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-md-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-md-6 {\n    margin-left: 50%;\n  }\n  .offset-md-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-md-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-md-9 {\n    margin-left: 75%;\n  }\n  .offset-md-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-md-11 {\n    margin-left: 91.666667%;\n  }\n}\n\n@media (min-width: 992px) {\n  .col-lg {\n    -ms-flex-preferred-size: 0;\n        flex-basis: 0;\n    -ms-flex-positive: 1;\n        flex-grow: 1;\n    max-width: 100%;\n  }\n  .col-lg-auto {\n    -ms-flex: 0 0 auto;\n        flex: 0 0 auto;\n    width: auto;\n    max-width: none;\n  }\n  .col-lg-1 {\n    -ms-flex: 0 0 8.333333%;\n        flex: 0 0 8.333333%;\n    max-width: 8.333333%;\n  }\n  .col-lg-2 {\n    -ms-flex: 0 0 16.666667%;\n        flex: 0 0 16.666667%;\n    max-width: 16.666667%;\n  }\n  .col-lg-3 {\n    -ms-flex: 0 0 25%;\n        flex: 0 0 25%;\n    max-width: 25%;\n  }\n  .col-lg-4 {\n    -ms-flex: 0 0 33.333333%;\n        flex: 0 0 33.333333%;\n    max-width: 33.333333%;\n  }\n  .col-lg-5 {\n    -ms-flex: 0 0 41.666667%;\n        flex: 0 0 41.666667%;\n    max-width: 41.666667%;\n  }\n  .col-lg-6 {\n    -ms-flex: 0 0 50%;\n        flex: 0 0 50%;\n    max-width: 50%;\n  }\n  .col-lg-7 {\n    -ms-flex: 0 0 58.333333%;\n        flex: 0 0 58.333333%;\n    max-width: 58.333333%;\n  }\n  .col-lg-8 {\n    -ms-flex: 0 0 66.666667%;\n        flex: 0 0 66.666667%;\n    max-width: 66.666667%;\n  }\n  .col-lg-9 {\n    -ms-flex: 0 0 75%;\n        flex: 0 0 75%;\n    max-width: 75%;\n  }\n  .col-lg-10 {\n    -ms-flex: 0 0 83.333333%;\n        flex: 0 0 83.333333%;\n    max-width: 83.333333%;\n  }\n  .col-lg-11 {\n    -ms-flex: 0 0 91.666667%;\n        flex: 0 0 91.666667%;\n    max-width: 91.666667%;\n  }\n  .col-lg-12 {\n    -ms-flex: 0 0 100%;\n        flex: 0 0 100%;\n    max-width: 100%;\n  }\n  .order-lg-first {\n    -ms-flex-order: -1;\n        order: -1;\n  }\n  .order-lg-1 {\n    -ms-flex-order: 1;\n        order: 1;\n  }\n  .order-lg-2 {\n    -ms-flex-order: 2;\n        order: 2;\n  }\n  .order-lg-3 {\n    -ms-flex-order: 3;\n        order: 3;\n  }\n  .order-lg-4 {\n    -ms-flex-order: 4;\n        order: 4;\n  }\n  .order-lg-5 {\n    -ms-flex-order: 5;\n        order: 5;\n  }\n  .order-lg-6 {\n    -ms-flex-order: 6;\n        order: 6;\n  }\n  .order-lg-7 {\n    -ms-flex-order: 7;\n        order: 7;\n  }\n  .order-lg-8 {\n    -ms-flex-order: 8;\n        order: 8;\n  }\n  .order-lg-9 {\n    -ms-flex-order: 9;\n        order: 9;\n  }\n  .order-lg-10 {\n    -ms-flex-order: 10;\n        order: 10;\n  }\n  .order-lg-11 {\n    -ms-flex-order: 11;\n        order: 11;\n  }\n  .order-lg-12 {\n    -ms-flex-order: 12;\n        order: 12;\n  }\n  .offset-lg-0 {\n    margin-left: 0;\n  }\n  .offset-lg-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-lg-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-lg-3 {\n    margin-left: 25%;\n  }\n  .offset-lg-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-lg-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-lg-6 {\n    margin-left: 50%;\n  }\n  .offset-lg-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-lg-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-lg-9 {\n    margin-left: 75%;\n  }\n  .offset-lg-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-lg-11 {\n    margin-left: 91.666667%;\n  }\n}\n\n@media (min-width: 1200px) {\n  .col-xl {\n    -ms-flex-preferred-size: 0;\n        flex-basis: 0;\n    -ms-flex-positive: 1;\n        flex-grow: 1;\n    max-width: 100%;\n  }\n  .col-xl-auto {\n    -ms-flex: 0 0 auto;\n        flex: 0 0 auto;\n    width: auto;\n    max-width: none;\n  }\n  .col-xl-1 {\n    -ms-flex: 0 0 8.333333%;\n        flex: 0 0 8.333333%;\n    max-width: 8.333333%;\n  }\n  .col-xl-2 {\n    -ms-flex: 0 0 16.666667%;\n        flex: 0 0 16.666667%;\n    max-width: 16.666667%;\n  }\n  .col-xl-3 {\n    -ms-flex: 0 0 25%;\n        flex: 0 0 25%;\n    max-width: 25%;\n  }\n  .col-xl-4 {\n    -ms-flex: 0 0 33.333333%;\n        flex: 0 0 33.333333%;\n    max-width: 33.333333%;\n  }\n  .col-xl-5 {\n    -ms-flex: 0 0 41.666667%;\n        flex: 0 0 41.666667%;\n    max-width: 41.666667%;\n  }\n  .col-xl-6 {\n    -ms-flex: 0 0 50%;\n        flex: 0 0 50%;\n    max-width: 50%;\n  }\n  .col-xl-7 {\n    -ms-flex: 0 0 58.333333%;\n        flex: 0 0 58.333333%;\n    max-width: 58.333333%;\n  }\n  .col-xl-8 {\n    -ms-flex: 0 0 66.666667%;\n        flex: 0 0 66.666667%;\n    max-width: 66.666667%;\n  }\n  .col-xl-9 {\n    -ms-flex: 0 0 75%;\n        flex: 0 0 75%;\n    max-width: 75%;\n  }\n  .col-xl-10 {\n    -ms-flex: 0 0 83.333333%;\n        flex: 0 0 83.333333%;\n    max-width: 83.333333%;\n  }\n  .col-xl-11 {\n    -ms-flex: 0 0 91.666667%;\n        flex: 0 0 91.666667%;\n    max-width: 91.666667%;\n  }\n  .col-xl-12 {\n    -ms-flex: 0 0 100%;\n        flex: 0 0 100%;\n    max-width: 100%;\n  }\n  .order-xl-first {\n    -ms-flex-order: -1;\n        order: -1;\n  }\n  .order-xl-1 {\n    -ms-flex-order: 1;\n        order: 1;\n  }\n  .order-xl-2 {\n    -ms-flex-order: 2;\n        order: 2;\n  }\n  .order-xl-3 {\n    -ms-flex-order: 3;\n        order: 3;\n  }\n  .order-xl-4 {\n    -ms-flex-order: 4;\n        order: 4;\n  }\n  .order-xl-5 {\n    -ms-flex-order: 5;\n        order: 5;\n  }\n  .order-xl-6 {\n    -ms-flex-order: 6;\n        order: 6;\n  }\n  .order-xl-7 {\n    -ms-flex-order: 7;\n        order: 7;\n  }\n  .order-xl-8 {\n    -ms-flex-order: 8;\n        order: 8;\n  }\n  .order-xl-9 {\n    -ms-flex-order: 9;\n        order: 9;\n  }\n  .order-xl-10 {\n    -ms-flex-order: 10;\n        order: 10;\n  }\n  .order-xl-11 {\n    -ms-flex-order: 11;\n        order: 11;\n  }\n  .order-xl-12 {\n    -ms-flex-order: 12;\n        order: 12;\n  }\n  .offset-xl-0 {\n    margin-left: 0;\n  }\n  .offset-xl-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-xl-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-xl-3 {\n    margin-left: 25%;\n  }\n  .offset-xl-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-xl-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-xl-6 {\n    margin-left: 50%;\n  }\n  .offset-xl-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-xl-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-xl-9 {\n    margin-left: 75%;\n  }\n  .offset-xl-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-xl-11 {\n    margin-left: 91.666667%;\n  }\n}\n\n.flex-row {\n  -ms-flex-direction: row !important;\n      flex-direction: row !important;\n}\n\n.flex-column {\n  -ms-flex-direction: column !important;\n      flex-direction: column !important;\n}\n\n.flex-row-reverse {\n  -ms-flex-direction: row-reverse !important;\n      flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n  -ms-flex-direction: column-reverse !important;\n      flex-direction: column-reverse !important;\n}\n\n.flex-wrap {\n  -ms-flex-wrap: wrap !important;\n      flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n  -ms-flex-wrap: nowrap !important;\n      flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n  -ms-flex-wrap: wrap-reverse !important;\n      flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n  -ms-flex-pack: start !important;\n      justify-content: flex-start !important;\n}\n\n.justify-content-end {\n  -ms-flex-pack: end !important;\n      justify-content: flex-end !important;\n}\n\n.justify-content-center {\n  -ms-flex-pack: center !important;\n      justify-content: center !important;\n}\n\n.justify-content-between {\n  -ms-flex-pack: justify !important;\n      justify-content: space-between !important;\n}\n\n.justify-content-around {\n  -ms-flex-pack: distribute !important;\n      justify-content: space-around !important;\n}\n\n.align-items-start {\n  -ms-flex-align: start !important;\n      align-items: flex-start !important;\n}\n\n.align-items-end {\n  -ms-flex-align: end !important;\n      align-items: flex-end !important;\n}\n\n.align-items-center {\n  -ms-flex-align: center !important;\n      align-items: center !important;\n}\n\n.align-items-baseline {\n  -ms-flex-align: baseline !important;\n      align-items: baseline !important;\n}\n\n.align-items-stretch {\n  -ms-flex-align: stretch !important;\n      align-items: stretch !important;\n}\n\n.align-content-start {\n  -ms-flex-line-pack: start !important;\n      align-content: flex-start !important;\n}\n\n.align-content-end {\n  -ms-flex-line-pack: end !important;\n      align-content: flex-end !important;\n}\n\n.align-content-center {\n  -ms-flex-line-pack: center !important;\n      align-content: center !important;\n}\n\n.align-content-between {\n  -ms-flex-line-pack: justify !important;\n      align-content: space-between !important;\n}\n\n.align-content-around {\n  -ms-flex-line-pack: distribute !important;\n      align-content: space-around !important;\n}\n\n.align-content-stretch {\n  -ms-flex-line-pack: stretch !important;\n      align-content: stretch !important;\n}\n\n.align-self-auto {\n  -ms-flex-item-align: auto !important;\n      align-self: auto !important;\n}\n\n.align-self-start {\n  -ms-flex-item-align: start !important;\n      align-self: flex-start !important;\n}\n\n.align-self-end {\n  -ms-flex-item-align: end !important;\n      align-self: flex-end !important;\n}\n\n.align-self-center {\n  -ms-flex-item-align: center !important;\n      align-self: center !important;\n}\n\n.align-self-baseline {\n  -ms-flex-item-align: baseline !important;\n      align-self: baseline !important;\n}\n\n.align-self-stretch {\n  -ms-flex-item-align: stretch !important;\n      align-self: stretch !important;\n}\n\n@media (min-width: 576px) {\n  .flex-sm-row {\n    -ms-flex-direction: row !important;\n        flex-direction: row !important;\n  }\n  .flex-sm-column {\n    -ms-flex-direction: column !important;\n        flex-direction: column !important;\n  }\n  .flex-sm-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n        flex-direction: row-reverse !important;\n  }\n  .flex-sm-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n        flex-direction: column-reverse !important;\n  }\n  .flex-sm-wrap {\n    -ms-flex-wrap: wrap !important;\n        flex-wrap: wrap !important;\n  }\n  .flex-sm-nowrap {\n    -ms-flex-wrap: nowrap !important;\n        flex-wrap: nowrap !important;\n  }\n  .flex-sm-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n        flex-wrap: wrap-reverse !important;\n  }\n  .justify-content-sm-start {\n    -ms-flex-pack: start !important;\n        justify-content: flex-start !important;\n  }\n  .justify-content-sm-end {\n    -ms-flex-pack: end !important;\n        justify-content: flex-end !important;\n  }\n  .justify-content-sm-center {\n    -ms-flex-pack: center !important;\n        justify-content: center !important;\n  }\n  .justify-content-sm-between {\n    -ms-flex-pack: justify !important;\n        justify-content: space-between !important;\n  }\n  .justify-content-sm-around {\n    -ms-flex-pack: distribute !important;\n        justify-content: space-around !important;\n  }\n  .align-items-sm-start {\n    -ms-flex-align: start !important;\n        align-items: flex-start !important;\n  }\n  .align-items-sm-end {\n    -ms-flex-align: end !important;\n        align-items: flex-end !important;\n  }\n  .align-items-sm-center {\n    -ms-flex-align: center !important;\n        align-items: center !important;\n  }\n  .align-items-sm-baseline {\n    -ms-flex-align: baseline !important;\n        align-items: baseline !important;\n  }\n  .align-items-sm-stretch {\n    -ms-flex-align: stretch !important;\n        align-items: stretch !important;\n  }\n  .align-content-sm-start {\n    -ms-flex-line-pack: start !important;\n        align-content: flex-start !important;\n  }\n  .align-content-sm-end {\n    -ms-flex-line-pack: end !important;\n        align-content: flex-end !important;\n  }\n  .align-content-sm-center {\n    -ms-flex-line-pack: center !important;\n        align-content: center !important;\n  }\n  .align-content-sm-between {\n    -ms-flex-line-pack: justify !important;\n        align-content: space-between !important;\n  }\n  .align-content-sm-around {\n    -ms-flex-line-pack: distribute !important;\n        align-content: space-around !important;\n  }\n  .align-content-sm-stretch {\n    -ms-flex-line-pack: stretch !important;\n        align-content: stretch !important;\n  }\n  .align-self-sm-auto {\n    -ms-flex-item-align: auto !important;\n        align-self: auto !important;\n  }\n  .align-self-sm-start {\n    -ms-flex-item-align: start !important;\n        align-self: flex-start !important;\n  }\n  .align-self-sm-end {\n    -ms-flex-item-align: end !important;\n        align-self: flex-end !important;\n  }\n  .align-self-sm-center {\n    -ms-flex-item-align: center !important;\n        align-self: center !important;\n  }\n  .align-self-sm-baseline {\n    -ms-flex-item-align: baseline !important;\n        align-self: baseline !important;\n  }\n  .align-self-sm-stretch {\n    -ms-flex-item-align: stretch !important;\n        align-self: stretch !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .flex-md-row {\n    -ms-flex-direction: row !important;\n        flex-direction: row !important;\n  }\n  .flex-md-column {\n    -ms-flex-direction: column !important;\n        flex-direction: column !important;\n  }\n  .flex-md-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n        flex-direction: row-reverse !important;\n  }\n  .flex-md-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n        flex-direction: column-reverse !important;\n  }\n  .flex-md-wrap {\n    -ms-flex-wrap: wrap !important;\n        flex-wrap: wrap !important;\n  }\n  .flex-md-nowrap {\n    -ms-flex-wrap: nowrap !important;\n        flex-wrap: nowrap !important;\n  }\n  .flex-md-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n        flex-wrap: wrap-reverse !important;\n  }\n  .justify-content-md-start {\n    -ms-flex-pack: start !important;\n        justify-content: flex-start !important;\n  }\n  .justify-content-md-end {\n    -ms-flex-pack: end !important;\n        justify-content: flex-end !important;\n  }\n  .justify-content-md-center {\n    -ms-flex-pack: center !important;\n        justify-content: center !important;\n  }\n  .justify-content-md-between {\n    -ms-flex-pack: justify !important;\n        justify-content: space-between !important;\n  }\n  .justify-content-md-around {\n    -ms-flex-pack: distribute !important;\n        justify-content: space-around !important;\n  }\n  .align-items-md-start {\n    -ms-flex-align: start !important;\n        align-items: flex-start !important;\n  }\n  .align-items-md-end {\n    -ms-flex-align: end !important;\n        align-items: flex-end !important;\n  }\n  .align-items-md-center {\n    -ms-flex-align: center !important;\n        align-items: center !important;\n  }\n  .align-items-md-baseline {\n    -ms-flex-align: baseline !important;\n        align-items: baseline !important;\n  }\n  .align-items-md-stretch {\n    -ms-flex-align: stretch !important;\n        align-items: stretch !important;\n  }\n  .align-content-md-start {\n    -ms-flex-line-pack: start !important;\n        align-content: flex-start !important;\n  }\n  .align-content-md-end {\n    -ms-flex-line-pack: end !important;\n        align-content: flex-end !important;\n  }\n  .align-content-md-center {\n    -ms-flex-line-pack: center !important;\n        align-content: center !important;\n  }\n  .align-content-md-between {\n    -ms-flex-line-pack: justify !important;\n        align-content: space-between !important;\n  }\n  .align-content-md-around {\n    -ms-flex-line-pack: distribute !important;\n        align-content: space-around !important;\n  }\n  .align-content-md-stretch {\n    -ms-flex-line-pack: stretch !important;\n        align-content: stretch !important;\n  }\n  .align-self-md-auto {\n    -ms-flex-item-align: auto !important;\n        align-self: auto !important;\n  }\n  .align-self-md-start {\n    -ms-flex-item-align: start !important;\n        align-self: flex-start !important;\n  }\n  .align-self-md-end {\n    -ms-flex-item-align: end !important;\n        align-self: flex-end !important;\n  }\n  .align-self-md-center {\n    -ms-flex-item-align: center !important;\n        align-self: center !important;\n  }\n  .align-self-md-baseline {\n    -ms-flex-item-align: baseline !important;\n        align-self: baseline !important;\n  }\n  .align-self-md-stretch {\n    -ms-flex-item-align: stretch !important;\n        align-self: stretch !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .flex-lg-row {\n    -ms-flex-direction: row !important;\n        flex-direction: row !important;\n  }\n  .flex-lg-column {\n    -ms-flex-direction: column !important;\n        flex-direction: column !important;\n  }\n  .flex-lg-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n        flex-direction: row-reverse !important;\n  }\n  .flex-lg-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n        flex-direction: column-reverse !important;\n  }\n  .flex-lg-wrap {\n    -ms-flex-wrap: wrap !important;\n        flex-wrap: wrap !important;\n  }\n  .flex-lg-nowrap {\n    -ms-flex-wrap: nowrap !important;\n        flex-wrap: nowrap !important;\n  }\n  .flex-lg-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n        flex-wrap: wrap-reverse !important;\n  }\n  .justify-content-lg-start {\n    -ms-flex-pack: start !important;\n        justify-content: flex-start !important;\n  }\n  .justify-content-lg-end {\n    -ms-flex-pack: end !important;\n        justify-content: flex-end !important;\n  }\n  .justify-content-lg-center {\n    -ms-flex-pack: center !important;\n        justify-content: center !important;\n  }\n  .justify-content-lg-between {\n    -ms-flex-pack: justify !important;\n        justify-content: space-between !important;\n  }\n  .justify-content-lg-around {\n    -ms-flex-pack: distribute !important;\n        justify-content: space-around !important;\n  }\n  .align-items-lg-start {\n    -ms-flex-align: start !important;\n        align-items: flex-start !important;\n  }\n  .align-items-lg-end {\n    -ms-flex-align: end !important;\n        align-items: flex-end !important;\n  }\n  .align-items-lg-center {\n    -ms-flex-align: center !important;\n        align-items: center !important;\n  }\n  .align-items-lg-baseline {\n    -ms-flex-align: baseline !important;\n        align-items: baseline !important;\n  }\n  .align-items-lg-stretch {\n    -ms-flex-align: stretch !important;\n        align-items: stretch !important;\n  }\n  .align-content-lg-start {\n    -ms-flex-line-pack: start !important;\n        align-content: flex-start !important;\n  }\n  .align-content-lg-end {\n    -ms-flex-line-pack: end !important;\n        align-content: flex-end !important;\n  }\n  .align-content-lg-center {\n    -ms-flex-line-pack: center !important;\n        align-content: center !important;\n  }\n  .align-content-lg-between {\n    -ms-flex-line-pack: justify !important;\n        align-content: space-between !important;\n  }\n  .align-content-lg-around {\n    -ms-flex-line-pack: distribute !important;\n        align-content: space-around !important;\n  }\n  .align-content-lg-stretch {\n    -ms-flex-line-pack: stretch !important;\n        align-content: stretch !important;\n  }\n  .align-self-lg-auto {\n    -ms-flex-item-align: auto !important;\n        align-self: auto !important;\n  }\n  .align-self-lg-start {\n    -ms-flex-item-align: start !important;\n        align-self: flex-start !important;\n  }\n  .align-self-lg-end {\n    -ms-flex-item-align: end !important;\n        align-self: flex-end !important;\n  }\n  .align-self-lg-center {\n    -ms-flex-item-align: center !important;\n        align-self: center !important;\n  }\n  .align-self-lg-baseline {\n    -ms-flex-item-align: baseline !important;\n        align-self: baseline !important;\n  }\n  .align-self-lg-stretch {\n    -ms-flex-item-align: stretch !important;\n        align-self: stretch !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .flex-xl-row {\n    -ms-flex-direction: row !important;\n        flex-direction: row !important;\n  }\n  .flex-xl-column {\n    -ms-flex-direction: column !important;\n        flex-direction: column !important;\n  }\n  .flex-xl-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n        flex-direction: row-reverse !important;\n  }\n  .flex-xl-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n        flex-direction: column-reverse !important;\n  }\n  .flex-xl-wrap {\n    -ms-flex-wrap: wrap !important;\n        flex-wrap: wrap !important;\n  }\n  .flex-xl-nowrap {\n    -ms-flex-wrap: nowrap !important;\n        flex-wrap: nowrap !important;\n  }\n  .flex-xl-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n        flex-wrap: wrap-reverse !important;\n  }\n  .justify-content-xl-start {\n    -ms-flex-pack: start !important;\n        justify-content: flex-start !important;\n  }\n  .justify-content-xl-end {\n    -ms-flex-pack: end !important;\n        justify-content: flex-end !important;\n  }\n  .justify-content-xl-center {\n    -ms-flex-pack: center !important;\n        justify-content: center !important;\n  }\n  .justify-content-xl-between {\n    -ms-flex-pack: justify !important;\n        justify-content: space-between !important;\n  }\n  .justify-content-xl-around {\n    -ms-flex-pack: distribute !important;\n        justify-content: space-around !important;\n  }\n  .align-items-xl-start {\n    -ms-flex-align: start !important;\n        align-items: flex-start !important;\n  }\n  .align-items-xl-end {\n    -ms-flex-align: end !important;\n        align-items: flex-end !important;\n  }\n  .align-items-xl-center {\n    -ms-flex-align: center !important;\n        align-items: center !important;\n  }\n  .align-items-xl-baseline {\n    -ms-flex-align: baseline !important;\n        align-items: baseline !important;\n  }\n  .align-items-xl-stretch {\n    -ms-flex-align: stretch !important;\n        align-items: stretch !important;\n  }\n  .align-content-xl-start {\n    -ms-flex-line-pack: start !important;\n        align-content: flex-start !important;\n  }\n  .align-content-xl-end {\n    -ms-flex-line-pack: end !important;\n        align-content: flex-end !important;\n  }\n  .align-content-xl-center {\n    -ms-flex-line-pack: center !important;\n        align-content: center !important;\n  }\n  .align-content-xl-between {\n    -ms-flex-line-pack: justify !important;\n        align-content: space-between !important;\n  }\n  .align-content-xl-around {\n    -ms-flex-line-pack: distribute !important;\n        align-content: space-around !important;\n  }\n  .align-content-xl-stretch {\n    -ms-flex-line-pack: stretch !important;\n        align-content: stretch !important;\n  }\n  .align-self-xl-auto {\n    -ms-flex-item-align: auto !important;\n        align-self: auto !important;\n  }\n  .align-self-xl-start {\n    -ms-flex-item-align: start !important;\n        align-self: flex-start !important;\n  }\n  .align-self-xl-end {\n    -ms-flex-item-align: end !important;\n        align-self: flex-end !important;\n  }\n  .align-self-xl-center {\n    -ms-flex-item-align: center !important;\n        align-self: center !important;\n  }\n  .align-self-xl-baseline {\n    -ms-flex-item-align: baseline !important;\n        align-self: baseline !important;\n  }\n  .align-self-xl-stretch {\n    -ms-flex-item-align: stretch !important;\n        align-self: stretch !important;\n  }\n}\n/*# sourceMappingURL=bootstrap-grid.css.map */"
  },
  {
    "path": "public/frontend/plugins/bootstrap4/css/bootstrap-reboot.css",
    "content": "/*!\n * Bootstrap Reboot v4.0.0-beta.2 (https://getbootstrap.com)\n * Copyright 2011-2017 The Bootstrap Authors\n * Copyright 2011-2017 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)\n */\n*,\n*::before,\n*::after {\n  box-sizing: border-box;\n}\n\nhtml {\n  font-family: sans-serif;\n  line-height: 1.15;\n  -webkit-text-size-adjust: 100%;\n  -ms-text-size-adjust: 100%;\n  -ms-overflow-style: scrollbar;\n  -webkit-tap-highlight-color: transparent;\n}\n\n@-ms-viewport {\n  width: device-width;\n}\n\narticle, aside, dialog, figcaption, figure, footer, header, hgroup, main, nav, section {\n  display: block;\n}\n\nbody {\n  margin: 0;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #212529;\n  text-align: left;\n  background-color: #fff;\n}\n\n[tabindex=\"-1\"]:focus {\n  outline: none !important;\n}\n\nhr {\n  box-sizing: content-box;\n  height: 0;\n  overflow: visible;\n}\n\nh1, h2, h3, h4, h5, h6 {\n  margin-top: 0;\n  margin-bottom: 0.5rem;\n}\n\np {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-original-title] {\n  text-decoration: underline;\n  -webkit-text-decoration: underline dotted;\n          text-decoration: underline dotted;\n  cursor: help;\n  border-bottom: 0;\n}\n\naddress {\n  margin-bottom: 1rem;\n  font-style: normal;\n  line-height: inherit;\n}\n\nol,\nul,\ndl {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n  margin-bottom: 0;\n}\n\ndt {\n  font-weight: 700;\n}\n\ndd {\n  margin-bottom: .5rem;\n  margin-left: 0;\n}\n\nblockquote {\n  margin: 0 0 1rem;\n}\n\ndfn {\n  font-style: italic;\n}\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\nsmall {\n  font-size: 80%;\n}\n\nsub,\nsup {\n  position: relative;\n  font-size: 75%;\n  line-height: 0;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -.25em;\n}\n\nsup {\n  top: -.5em;\n}\n\na {\n  color: #007bff;\n  text-decoration: none;\n  background-color: transparent;\n  -webkit-text-decoration-skip: objects;\n}\n\na:hover {\n  color: #0056b3;\n  text-decoration: underline;\n}\n\na:not([href]):not([tabindex]) {\n  color: inherit;\n  text-decoration: none;\n}\n\na:not([href]):not([tabindex]):focus, a:not([href]):not([tabindex]):hover {\n  color: inherit;\n  text-decoration: none;\n}\n\na:not([href]):not([tabindex]):focus {\n  outline: 0;\n}\n\npre,\ncode,\nkbd,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em;\n}\n\npre {\n  margin-top: 0;\n  margin-bottom: 1rem;\n  overflow: auto;\n  -ms-overflow-style: scrollbar;\n}\n\nfigure {\n  margin: 0 0 1rem;\n}\n\nimg {\n  vertical-align: middle;\n  border-style: none;\n}\n\nsvg:not(:root) {\n  overflow: hidden;\n}\n\na,\narea,\nbutton,\n[role=\"button\"],\ninput:not([type=\"range\"]),\nlabel,\nselect,\nsummary,\ntextarea {\n  -ms-touch-action: manipulation;\n      touch-action: manipulation;\n}\n\ntable {\n  border-collapse: collapse;\n}\n\ncaption {\n  padding-top: 0.75rem;\n  padding-bottom: 0.75rem;\n  color: #868e96;\n  text-align: left;\n  caption-side: bottom;\n}\n\nth {\n  text-align: inherit;\n}\n\nlabel {\n  display: inline-block;\n  margin-bottom: .5rem;\n}\n\nbutton {\n  border-radius: 0;\n}\n\nbutton:focus {\n  outline: 1px dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n  margin: 0;\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n\nbutton,\ninput {\n  overflow: visible;\n}\n\nbutton,\nselect {\n  text-transform: none;\n}\n\nbutton,\nhtml [type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n  -webkit-appearance: button;\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  padding: 0;\n  border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  box-sizing: border-box;\n  padding: 0;\n}\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n  -webkit-appearance: listbox;\n}\n\ntextarea {\n  overflow: auto;\n  resize: vertical;\n}\n\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\n\nlegend {\n  display: block;\n  width: 100%;\n  max-width: 100%;\n  padding: 0;\n  margin-bottom: .5rem;\n  font-size: 1.5rem;\n  line-height: inherit;\n  color: inherit;\n  white-space: normal;\n}\n\nprogress {\n  vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\n\n[type=\"search\"] {\n  outline-offset: -2px;\n  -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-cancel-button,\n[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n  font: inherit;\n  -webkit-appearance: button;\n}\n\noutput {\n  display: inline-block;\n}\n\nsummary {\n  display: list-item;\n}\n\ntemplate {\n  display: none;\n}\n\n[hidden] {\n  display: none !important;\n}\n/*# sourceMappingURL=bootstrap-reboot.css.map */"
  },
  {
    "path": "public/frontend/plugins/bootstrap4/css/bootstrap.css",
    "content": "/*!\n * Bootstrap v4.0.0-beta.2 (https://getbootstrap.com)\n * Copyright 2011-2017 The Bootstrap Authors\n * Copyright 2011-2017 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n:root {\n  --blue: #007bff;\n  --indigo: #6610f2;\n  --purple: #6f42c1;\n  --pink: #e83e8c;\n  --red: #dc3545;\n  --orange: #fd7e14;\n  --yellow: #ffc107;\n  --green: #28a745;\n  --teal: #20c997;\n  --cyan: #17a2b8;\n  --white: #fff;\n  --gray: #868e96;\n  --gray-dark: #343a40;\n  --primary: #007bff;\n  --secondary: #868e96;\n  --success: #28a745;\n  --info: #17a2b8;\n  --warning: #ffc107;\n  --danger: #dc3545;\n  --light: #f8f9fa;\n  --dark: #343a40;\n  --breakpoint-xs: 0;\n  --breakpoint-sm: 576px;\n  --breakpoint-md: 768px;\n  --breakpoint-lg: 992px;\n  --breakpoint-xl: 1200px;\n  --font-family-sans-serif: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n  --font-family-monospace: \"SFMono-Regular\", Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n}\n\n@media print {\n  *,\n  *::before,\n  *::after {\n    text-shadow: none !important;\n    box-shadow: none !important;\n  }\n  a,\n  a:visited {\n    text-decoration: underline;\n  }\n  abbr[title]::after {\n    content: \" (\" attr(title) \")\";\n  }\n  pre {\n    white-space: pre-wrap !important;\n  }\n  pre,\n  blockquote {\n    border: 1px solid #999;\n    page-break-inside: avoid;\n  }\n  thead {\n    display: table-header-group;\n  }\n  tr,\n  img {\n    page-break-inside: avoid;\n  }\n  p,\n  h2,\n  h3 {\n    orphans: 3;\n    widows: 3;\n  }\n  h2,\n  h3 {\n    page-break-after: avoid;\n  }\n  .navbar {\n    display: none;\n  }\n  .badge {\n    border: 1px solid #000;\n  }\n  .table {\n    border-collapse: collapse !important;\n  }\n  .table td,\n  .table th {\n    background-color: #fff !important;\n  }\n  .table-bordered th,\n  .table-bordered td {\n    border: 1px solid #ddd !important;\n  }\n}\n\n*,\n*::before,\n*::after {\n  box-sizing: border-box;\n}\n\nhtml {\n  font-family: sans-serif;\n  line-height: 1.15;\n  -webkit-text-size-adjust: 100%;\n  -ms-text-size-adjust: 100%;\n  -ms-overflow-style: scrollbar;\n  -webkit-tap-highlight-color: transparent;\n}\n\n@-ms-viewport {\n  width: device-width;\n}\n\narticle, aside, dialog, figcaption, figure, footer, header, hgroup, main, nav, section {\n  display: block;\n}\n\nbody {\n  margin: 0;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #212529;\n  text-align: left;\n  background-color: #fff;\n}\n\n[tabindex=\"-1\"]:focus {\n  outline: none !important;\n}\n\nhr {\n  box-sizing: content-box;\n  height: 0;\n  overflow: visible;\n}\n\nh1, h2, h3, h4, h5, h6 {\n  margin-top: 0;\n  margin-bottom: 0.5rem;\n}\n\np {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nabbr[title],\nabbr[data-original-title] {\n  text-decoration: underline;\n  -webkit-text-decoration: underline dotted;\n          text-decoration: underline dotted;\n  cursor: help;\n  border-bottom: 0;\n}\n\naddress {\n  margin-bottom: 1rem;\n  font-style: normal;\n  line-height: inherit;\n}\n\nol,\nul,\ndl {\n  margin-top: 0;\n  margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n  margin-bottom: 0;\n}\n\ndt {\n  font-weight: 700;\n}\n\ndd {\n  margin-bottom: .5rem;\n  margin-left: 0;\n}\n\nblockquote {\n  margin: 0 0 1rem;\n}\n\ndfn {\n  font-style: italic;\n}\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\nsmall {\n  font-size: 80%;\n}\n\nsub,\nsup {\n  position: relative;\n  font-size: 75%;\n  line-height: 0;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -.25em;\n}\n\nsup {\n  top: -.5em;\n}\n\na {\n  color: #007bff;\n  text-decoration: none;\n  background-color: transparent;\n  -webkit-text-decoration-skip: objects;\n}\n\na:hover {\n  color: #0056b3;\n  text-decoration: underline;\n}\n\na:not([href]):not([tabindex]) {\n  color: inherit;\n  text-decoration: none;\n}\n\na:not([href]):not([tabindex]):focus, a:not([href]):not([tabindex]):hover {\n  color: inherit;\n  text-decoration: none;\n}\n\na:not([href]):not([tabindex]):focus {\n  outline: 0;\n}\n\npre,\ncode,\nkbd,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em;\n}\n\npre {\n  margin-top: 0;\n  margin-bottom: 1rem;\n  overflow: auto;\n  -ms-overflow-style: scrollbar;\n}\n\nfigure {\n  margin: 0 0 1rem;\n}\n\nimg {\n  vertical-align: middle;\n  border-style: none;\n}\n\nsvg:not(:root) {\n  overflow: hidden;\n}\n\na,\narea,\nbutton,\n[role=\"button\"],\ninput:not([type=\"range\"]),\nlabel,\nselect,\nsummary,\ntextarea {\n  -ms-touch-action: manipulation;\n      touch-action: manipulation;\n}\n\ntable {\n  border-collapse: collapse;\n}\n\ncaption {\n  padding-top: 0.75rem;\n  padding-bottom: 0.75rem;\n  color: #868e96;\n  text-align: left;\n  caption-side: bottom;\n}\n\nth {\n  text-align: inherit;\n}\n\nlabel {\n  display: inline-block;\n  margin-bottom: .5rem;\n}\n\nbutton {\n  border-radius: 0;\n}\n\nbutton:focus {\n  outline: 1px dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n  margin: 0;\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n\nbutton,\ninput {\n  overflow: visible;\n}\n\nbutton,\nselect {\n  text-transform: none;\n}\n\nbutton,\nhtml [type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n  -webkit-appearance: button;\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  padding: 0;\n  border-style: none;\n}\n\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  box-sizing: border-box;\n  padding: 0;\n}\n\ninput[type=\"date\"],\ninput[type=\"time\"],\ninput[type=\"datetime-local\"],\ninput[type=\"month\"] {\n  -webkit-appearance: listbox;\n}\n\ntextarea {\n  overflow: auto;\n  resize: vertical;\n}\n\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\n\nlegend {\n  display: block;\n  width: 100%;\n  max-width: 100%;\n  padding: 0;\n  margin-bottom: .5rem;\n  font-size: 1.5rem;\n  line-height: inherit;\n  color: inherit;\n  white-space: normal;\n}\n\nprogress {\n  vertical-align: baseline;\n}\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\n\n[type=\"search\"] {\n  outline-offset: -2px;\n  -webkit-appearance: none;\n}\n\n[type=\"search\"]::-webkit-search-cancel-button,\n[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n::-webkit-file-upload-button {\n  font: inherit;\n  -webkit-appearance: button;\n}\n\noutput {\n  display: inline-block;\n}\n\nsummary {\n  display: list-item;\n}\n\ntemplate {\n  display: none;\n}\n\n[hidden] {\n  display: none !important;\n}\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n  margin-bottom: 0.5rem;\n  font-family: inherit;\n  font-weight: 500;\n  line-height: 1.2;\n  color: inherit;\n}\n\nh1, .h1 {\n  font-size: 2.5rem;\n}\n\nh2, .h2 {\n  font-size: 2rem;\n}\n\nh3, .h3 {\n  font-size: 1.75rem;\n}\n\nh4, .h4 {\n  font-size: 1.5rem;\n}\n\nh5, .h5 {\n  font-size: 1.25rem;\n}\n\nh6, .h6 {\n  font-size: 1rem;\n}\n\n.lead {\n  font-size: 1.25rem;\n  font-weight: 300;\n}\n\n.display-1 {\n  font-size: 6rem;\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n.display-2 {\n  font-size: 5.5rem;\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n.display-3 {\n  font-size: 4.5rem;\n  font-weight: 300;\n  line-height: 1.2;\n}\n\n.display-4 {\n  font-size: 3.5rem;\n  font-weight: 300;\n  line-height: 1.2;\n}\n\nhr {\n  margin-top: 1rem;\n  margin-bottom: 1rem;\n  border: 0;\n  border-top: 1px solid rgba(0, 0, 0, 0.1);\n}\n\nsmall,\n.small {\n  font-size: 80%;\n  font-weight: 400;\n}\n\nmark,\n.mark {\n  padding: 0.2em;\n  background-color: #fcf8e3;\n}\n\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline {\n  padding-left: 0;\n  list-style: none;\n}\n\n.list-inline-item {\n  display: inline-block;\n}\n\n.list-inline-item:not(:last-child) {\n  margin-right: 5px;\n}\n\n.initialism {\n  font-size: 90%;\n  text-transform: uppercase;\n}\n\n.blockquote {\n  margin-bottom: 1rem;\n  font-size: 1.25rem;\n}\n\n.blockquote-footer {\n  display: block;\n  font-size: 80%;\n  color: #868e96;\n}\n\n.blockquote-footer::before {\n  content: \"\\2014 \\00A0\";\n}\n\n.img-fluid {\n  max-width: 100%;\n  height: auto;\n}\n\n.img-thumbnail {\n  padding: 0.25rem;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 0.25rem;\n  transition: all 0.2s ease-in-out;\n  max-width: 100%;\n  height: auto;\n}\n\n.figure {\n  display: inline-block;\n}\n\n.figure-img {\n  margin-bottom: 0.5rem;\n  line-height: 1;\n}\n\n.figure-caption {\n  font-size: 90%;\n  color: #868e96;\n}\n\ncode,\nkbd,\npre,\nsamp {\n  font-family: \"SFMono-Regular\", Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n}\n\ncode {\n  padding: 0.2rem 0.4rem;\n  font-size: 90%;\n  color: #bd4147;\n  background-color: #f8f9fa;\n  border-radius: 0.25rem;\n}\n\na > code {\n  padding: 0;\n  color: inherit;\n  background-color: inherit;\n}\n\nkbd {\n  padding: 0.2rem 0.4rem;\n  font-size: 90%;\n  color: #fff;\n  background-color: #212529;\n  border-radius: 0.2rem;\n}\n\nkbd kbd {\n  padding: 0;\n  font-size: 100%;\n  font-weight: 700;\n}\n\npre {\n  display: block;\n  margin-top: 0;\n  margin-bottom: 1rem;\n  font-size: 90%;\n  color: #212529;\n}\n\npre code {\n  padding: 0;\n  font-size: inherit;\n  color: inherit;\n  background-color: transparent;\n  border-radius: 0;\n}\n\n.pre-scrollable {\n  max-height: 340px;\n  overflow-y: scroll;\n}\n\n.container {\n  width: 100%;\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n\n@media (min-width: 576px) {\n  .container {\n    max-width: 540px;\n  }\n}\n\n@media (min-width: 768px) {\n  .container {\n    max-width: 720px;\n  }\n}\n\n@media (min-width: 992px) {\n  .container {\n    max-width: 960px;\n  }\n}\n\n@media (min-width: 1200px) {\n  .container {\n    max-width: 1140px;\n  }\n}\n\n.container-fluid {\n  width: 100%;\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n\n.row {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap;\n  margin-right: -15px;\n  margin-left: -15px;\n}\n\n.no-gutters {\n  margin-right: 0;\n  margin-left: 0;\n}\n\n.no-gutters > .col,\n.no-gutters > [class*=\"col-\"] {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col,\n.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm,\n.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md,\n.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg,\n.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl,\n.col-xl-auto {\n  position: relative;\n  width: 100%;\n  min-height: 1px;\n  padding-right: 15px;\n  padding-left: 15px;\n}\n\n.col {\n  -ms-flex-preferred-size: 0;\n      flex-basis: 0;\n  -ms-flex-positive: 1;\n      flex-grow: 1;\n  max-width: 100%;\n}\n\n.col-auto {\n  -ms-flex: 0 0 auto;\n      flex: 0 0 auto;\n  width: auto;\n  max-width: none;\n}\n\n.col-1 {\n  -ms-flex: 0 0 8.333333%;\n      flex: 0 0 8.333333%;\n  max-width: 8.333333%;\n}\n\n.col-2 {\n  -ms-flex: 0 0 16.666667%;\n      flex: 0 0 16.666667%;\n  max-width: 16.666667%;\n}\n\n.col-3 {\n  -ms-flex: 0 0 25%;\n      flex: 0 0 25%;\n  max-width: 25%;\n}\n\n.col-4 {\n  -ms-flex: 0 0 33.333333%;\n      flex: 0 0 33.333333%;\n  max-width: 33.333333%;\n}\n\n.col-5 {\n  -ms-flex: 0 0 41.666667%;\n      flex: 0 0 41.666667%;\n  max-width: 41.666667%;\n}\n\n.col-6 {\n  -ms-flex: 0 0 50%;\n      flex: 0 0 50%;\n  max-width: 50%;\n}\n\n.col-7 {\n  -ms-flex: 0 0 58.333333%;\n      flex: 0 0 58.333333%;\n  max-width: 58.333333%;\n}\n\n.col-8 {\n  -ms-flex: 0 0 66.666667%;\n      flex: 0 0 66.666667%;\n  max-width: 66.666667%;\n}\n\n.col-9 {\n  -ms-flex: 0 0 75%;\n      flex: 0 0 75%;\n  max-width: 75%;\n}\n\n.col-10 {\n  -ms-flex: 0 0 83.333333%;\n      flex: 0 0 83.333333%;\n  max-width: 83.333333%;\n}\n\n.col-11 {\n  -ms-flex: 0 0 91.666667%;\n      flex: 0 0 91.666667%;\n  max-width: 91.666667%;\n}\n\n.col-12 {\n  -ms-flex: 0 0 100%;\n      flex: 0 0 100%;\n  max-width: 100%;\n}\n\n.order-first {\n  -ms-flex-order: -1;\n      order: -1;\n}\n\n.order-1 {\n  -ms-flex-order: 1;\n      order: 1;\n}\n\n.order-2 {\n  -ms-flex-order: 2;\n      order: 2;\n}\n\n.order-3 {\n  -ms-flex-order: 3;\n      order: 3;\n}\n\n.order-4 {\n  -ms-flex-order: 4;\n      order: 4;\n}\n\n.order-5 {\n  -ms-flex-order: 5;\n      order: 5;\n}\n\n.order-6 {\n  -ms-flex-order: 6;\n      order: 6;\n}\n\n.order-7 {\n  -ms-flex-order: 7;\n      order: 7;\n}\n\n.order-8 {\n  -ms-flex-order: 8;\n      order: 8;\n}\n\n.order-9 {\n  -ms-flex-order: 9;\n      order: 9;\n}\n\n.order-10 {\n  -ms-flex-order: 10;\n      order: 10;\n}\n\n.order-11 {\n  -ms-flex-order: 11;\n      order: 11;\n}\n\n.order-12 {\n  -ms-flex-order: 12;\n      order: 12;\n}\n\n.offset-1 {\n  margin-left: 8.333333%;\n}\n\n.offset-2 {\n  margin-left: 16.666667%;\n}\n\n.offset-3 {\n  margin-left: 25%;\n}\n\n.offset-4 {\n  margin-left: 33.333333%;\n}\n\n.offset-5 {\n  margin-left: 41.666667%;\n}\n\n.offset-6 {\n  margin-left: 50%;\n}\n\n.offset-7 {\n  margin-left: 58.333333%;\n}\n\n.offset-8 {\n  margin-left: 66.666667%;\n}\n\n.offset-9 {\n  margin-left: 75%;\n}\n\n.offset-10 {\n  margin-left: 83.333333%;\n}\n\n.offset-11 {\n  margin-left: 91.666667%;\n}\n\n@media (min-width: 576px) {\n  .col-sm {\n    -ms-flex-preferred-size: 0;\n        flex-basis: 0;\n    -ms-flex-positive: 1;\n        flex-grow: 1;\n    max-width: 100%;\n  }\n  .col-sm-auto {\n    -ms-flex: 0 0 auto;\n        flex: 0 0 auto;\n    width: auto;\n    max-width: none;\n  }\n  .col-sm-1 {\n    -ms-flex: 0 0 8.333333%;\n        flex: 0 0 8.333333%;\n    max-width: 8.333333%;\n  }\n  .col-sm-2 {\n    -ms-flex: 0 0 16.666667%;\n        flex: 0 0 16.666667%;\n    max-width: 16.666667%;\n  }\n  .col-sm-3 {\n    -ms-flex: 0 0 25%;\n        flex: 0 0 25%;\n    max-width: 25%;\n  }\n  .col-sm-4 {\n    -ms-flex: 0 0 33.333333%;\n        flex: 0 0 33.333333%;\n    max-width: 33.333333%;\n  }\n  .col-sm-5 {\n    -ms-flex: 0 0 41.666667%;\n        flex: 0 0 41.666667%;\n    max-width: 41.666667%;\n  }\n  .col-sm-6 {\n    -ms-flex: 0 0 50%;\n        flex: 0 0 50%;\n    max-width: 50%;\n  }\n  .col-sm-7 {\n    -ms-flex: 0 0 58.333333%;\n        flex: 0 0 58.333333%;\n    max-width: 58.333333%;\n  }\n  .col-sm-8 {\n    -ms-flex: 0 0 66.666667%;\n        flex: 0 0 66.666667%;\n    max-width: 66.666667%;\n  }\n  .col-sm-9 {\n    -ms-flex: 0 0 75%;\n        flex: 0 0 75%;\n    max-width: 75%;\n  }\n  .col-sm-10 {\n    -ms-flex: 0 0 83.333333%;\n        flex: 0 0 83.333333%;\n    max-width: 83.333333%;\n  }\n  .col-sm-11 {\n    -ms-flex: 0 0 91.666667%;\n        flex: 0 0 91.666667%;\n    max-width: 91.666667%;\n  }\n  .col-sm-12 {\n    -ms-flex: 0 0 100%;\n        flex: 0 0 100%;\n    max-width: 100%;\n  }\n  .order-sm-first {\n    -ms-flex-order: -1;\n        order: -1;\n  }\n  .order-sm-1 {\n    -ms-flex-order: 1;\n        order: 1;\n  }\n  .order-sm-2 {\n    -ms-flex-order: 2;\n        order: 2;\n  }\n  .order-sm-3 {\n    -ms-flex-order: 3;\n        order: 3;\n  }\n  .order-sm-4 {\n    -ms-flex-order: 4;\n        order: 4;\n  }\n  .order-sm-5 {\n    -ms-flex-order: 5;\n        order: 5;\n  }\n  .order-sm-6 {\n    -ms-flex-order: 6;\n        order: 6;\n  }\n  .order-sm-7 {\n    -ms-flex-order: 7;\n        order: 7;\n  }\n  .order-sm-8 {\n    -ms-flex-order: 8;\n        order: 8;\n  }\n  .order-sm-9 {\n    -ms-flex-order: 9;\n        order: 9;\n  }\n  .order-sm-10 {\n    -ms-flex-order: 10;\n        order: 10;\n  }\n  .order-sm-11 {\n    -ms-flex-order: 11;\n        order: 11;\n  }\n  .order-sm-12 {\n    -ms-flex-order: 12;\n        order: 12;\n  }\n  .offset-sm-0 {\n    margin-left: 0;\n  }\n  .offset-sm-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-sm-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-sm-3 {\n    margin-left: 25%;\n  }\n  .offset-sm-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-sm-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-sm-6 {\n    margin-left: 50%;\n  }\n  .offset-sm-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-sm-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-sm-9 {\n    margin-left: 75%;\n  }\n  .offset-sm-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-sm-11 {\n    margin-left: 91.666667%;\n  }\n}\n\n@media (min-width: 768px) {\n  .col-md {\n    -ms-flex-preferred-size: 0;\n        flex-basis: 0;\n    -ms-flex-positive: 1;\n        flex-grow: 1;\n    max-width: 100%;\n  }\n  .col-md-auto {\n    -ms-flex: 0 0 auto;\n        flex: 0 0 auto;\n    width: auto;\n    max-width: none;\n  }\n  .col-md-1 {\n    -ms-flex: 0 0 8.333333%;\n        flex: 0 0 8.333333%;\n    max-width: 8.333333%;\n  }\n  .col-md-2 {\n    -ms-flex: 0 0 16.666667%;\n        flex: 0 0 16.666667%;\n    max-width: 16.666667%;\n  }\n  .col-md-3 {\n    -ms-flex: 0 0 25%;\n        flex: 0 0 25%;\n    max-width: 25%;\n  }\n  .col-md-4 {\n    -ms-flex: 0 0 33.333333%;\n        flex: 0 0 33.333333%;\n    max-width: 33.333333%;\n  }\n  .col-md-5 {\n    -ms-flex: 0 0 41.666667%;\n        flex: 0 0 41.666667%;\n    max-width: 41.666667%;\n  }\n  .col-md-6 {\n    -ms-flex: 0 0 50%;\n        flex: 0 0 50%;\n    max-width: 50%;\n  }\n  .col-md-7 {\n    -ms-flex: 0 0 58.333333%;\n        flex: 0 0 58.333333%;\n    max-width: 58.333333%;\n  }\n  .col-md-8 {\n    -ms-flex: 0 0 66.666667%;\n        flex: 0 0 66.666667%;\n    max-width: 66.666667%;\n  }\n  .col-md-9 {\n    -ms-flex: 0 0 75%;\n        flex: 0 0 75%;\n    max-width: 75%;\n  }\n  .col-md-10 {\n    -ms-flex: 0 0 83.333333%;\n        flex: 0 0 83.333333%;\n    max-width: 83.333333%;\n  }\n  .col-md-11 {\n    -ms-flex: 0 0 91.666667%;\n        flex: 0 0 91.666667%;\n    max-width: 91.666667%;\n  }\n  .col-md-12 {\n    -ms-flex: 0 0 100%;\n        flex: 0 0 100%;\n    max-width: 100%;\n  }\n  .order-md-first {\n    -ms-flex-order: -1;\n        order: -1;\n  }\n  .order-md-1 {\n    -ms-flex-order: 1;\n        order: 1;\n  }\n  .order-md-2 {\n    -ms-flex-order: 2;\n        order: 2;\n  }\n  .order-md-3 {\n    -ms-flex-order: 3;\n        order: 3;\n  }\n  .order-md-4 {\n    -ms-flex-order: 4;\n        order: 4;\n  }\n  .order-md-5 {\n    -ms-flex-order: 5;\n        order: 5;\n  }\n  .order-md-6 {\n    -ms-flex-order: 6;\n        order: 6;\n  }\n  .order-md-7 {\n    -ms-flex-order: 7;\n        order: 7;\n  }\n  .order-md-8 {\n    -ms-flex-order: 8;\n        order: 8;\n  }\n  .order-md-9 {\n    -ms-flex-order: 9;\n        order: 9;\n  }\n  .order-md-10 {\n    -ms-flex-order: 10;\n        order: 10;\n  }\n  .order-md-11 {\n    -ms-flex-order: 11;\n        order: 11;\n  }\n  .order-md-12 {\n    -ms-flex-order: 12;\n        order: 12;\n  }\n  .offset-md-0 {\n    margin-left: 0;\n  }\n  .offset-md-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-md-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-md-3 {\n    margin-left: 25%;\n  }\n  .offset-md-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-md-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-md-6 {\n    margin-left: 50%;\n  }\n  .offset-md-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-md-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-md-9 {\n    margin-left: 75%;\n  }\n  .offset-md-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-md-11 {\n    margin-left: 91.666667%;\n  }\n}\n\n@media (min-width: 992px) {\n  .col-lg {\n    -ms-flex-preferred-size: 0;\n        flex-basis: 0;\n    -ms-flex-positive: 1;\n        flex-grow: 1;\n    max-width: 100%;\n  }\n  .col-lg-auto {\n    -ms-flex: 0 0 auto;\n        flex: 0 0 auto;\n    width: auto;\n    max-width: none;\n  }\n  .col-lg-1 {\n    -ms-flex: 0 0 8.333333%;\n        flex: 0 0 8.333333%;\n    max-width: 8.333333%;\n  }\n  .col-lg-2 {\n    -ms-flex: 0 0 16.666667%;\n        flex: 0 0 16.666667%;\n    max-width: 16.666667%;\n  }\n  .col-lg-3 {\n    -ms-flex: 0 0 25%;\n        flex: 0 0 25%;\n    max-width: 25%;\n  }\n  .col-lg-4 {\n    -ms-flex: 0 0 33.333333%;\n        flex: 0 0 33.333333%;\n    max-width: 33.333333%;\n  }\n  .col-lg-5 {\n    -ms-flex: 0 0 41.666667%;\n        flex: 0 0 41.666667%;\n    max-width: 41.666667%;\n  }\n  .col-lg-6 {\n    -ms-flex: 0 0 50%;\n        flex: 0 0 50%;\n    max-width: 50%;\n  }\n  .col-lg-7 {\n    -ms-flex: 0 0 58.333333%;\n        flex: 0 0 58.333333%;\n    max-width: 58.333333%;\n  }\n  .col-lg-8 {\n    -ms-flex: 0 0 66.666667%;\n        flex: 0 0 66.666667%;\n    max-width: 66.666667%;\n  }\n  .col-lg-9 {\n    -ms-flex: 0 0 75%;\n        flex: 0 0 75%;\n    max-width: 75%;\n  }\n  .col-lg-10 {\n    -ms-flex: 0 0 83.333333%;\n        flex: 0 0 83.333333%;\n    max-width: 83.333333%;\n  }\n  .col-lg-11 {\n    -ms-flex: 0 0 91.666667%;\n        flex: 0 0 91.666667%;\n    max-width: 91.666667%;\n  }\n  .col-lg-12 {\n    -ms-flex: 0 0 100%;\n        flex: 0 0 100%;\n    max-width: 100%;\n  }\n  .order-lg-first {\n    -ms-flex-order: -1;\n        order: -1;\n  }\n  .order-lg-1 {\n    -ms-flex-order: 1;\n        order: 1;\n  }\n  .order-lg-2 {\n    -ms-flex-order: 2;\n        order: 2;\n  }\n  .order-lg-3 {\n    -ms-flex-order: 3;\n        order: 3;\n  }\n  .order-lg-4 {\n    -ms-flex-order: 4;\n        order: 4;\n  }\n  .order-lg-5 {\n    -ms-flex-order: 5;\n        order: 5;\n  }\n  .order-lg-6 {\n    -ms-flex-order: 6;\n        order: 6;\n  }\n  .order-lg-7 {\n    -ms-flex-order: 7;\n        order: 7;\n  }\n  .order-lg-8 {\n    -ms-flex-order: 8;\n        order: 8;\n  }\n  .order-lg-9 {\n    -ms-flex-order: 9;\n        order: 9;\n  }\n  .order-lg-10 {\n    -ms-flex-order: 10;\n        order: 10;\n  }\n  .order-lg-11 {\n    -ms-flex-order: 11;\n        order: 11;\n  }\n  .order-lg-12 {\n    -ms-flex-order: 12;\n        order: 12;\n  }\n  .offset-lg-0 {\n    margin-left: 0;\n  }\n  .offset-lg-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-lg-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-lg-3 {\n    margin-left: 25%;\n  }\n  .offset-lg-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-lg-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-lg-6 {\n    margin-left: 50%;\n  }\n  .offset-lg-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-lg-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-lg-9 {\n    margin-left: 75%;\n  }\n  .offset-lg-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-lg-11 {\n    margin-left: 91.666667%;\n  }\n}\n\n@media (min-width: 1200px) {\n  .col-xl {\n    -ms-flex-preferred-size: 0;\n        flex-basis: 0;\n    -ms-flex-positive: 1;\n        flex-grow: 1;\n    max-width: 100%;\n  }\n  .col-xl-auto {\n    -ms-flex: 0 0 auto;\n        flex: 0 0 auto;\n    width: auto;\n    max-width: none;\n  }\n  .col-xl-1 {\n    -ms-flex: 0 0 8.333333%;\n        flex: 0 0 8.333333%;\n    max-width: 8.333333%;\n  }\n  .col-xl-2 {\n    -ms-flex: 0 0 16.666667%;\n        flex: 0 0 16.666667%;\n    max-width: 16.666667%;\n  }\n  .col-xl-3 {\n    -ms-flex: 0 0 25%;\n        flex: 0 0 25%;\n    max-width: 25%;\n  }\n  .col-xl-4 {\n    -ms-flex: 0 0 33.333333%;\n        flex: 0 0 33.333333%;\n    max-width: 33.333333%;\n  }\n  .col-xl-5 {\n    -ms-flex: 0 0 41.666667%;\n        flex: 0 0 41.666667%;\n    max-width: 41.666667%;\n  }\n  .col-xl-6 {\n    -ms-flex: 0 0 50%;\n        flex: 0 0 50%;\n    max-width: 50%;\n  }\n  .col-xl-7 {\n    -ms-flex: 0 0 58.333333%;\n        flex: 0 0 58.333333%;\n    max-width: 58.333333%;\n  }\n  .col-xl-8 {\n    -ms-flex: 0 0 66.666667%;\n        flex: 0 0 66.666667%;\n    max-width: 66.666667%;\n  }\n  .col-xl-9 {\n    -ms-flex: 0 0 75%;\n        flex: 0 0 75%;\n    max-width: 75%;\n  }\n  .col-xl-10 {\n    -ms-flex: 0 0 83.333333%;\n        flex: 0 0 83.333333%;\n    max-width: 83.333333%;\n  }\n  .col-xl-11 {\n    -ms-flex: 0 0 91.666667%;\n        flex: 0 0 91.666667%;\n    max-width: 91.666667%;\n  }\n  .col-xl-12 {\n    -ms-flex: 0 0 100%;\n        flex: 0 0 100%;\n    max-width: 100%;\n  }\n  .order-xl-first {\n    -ms-flex-order: -1;\n        order: -1;\n  }\n  .order-xl-1 {\n    -ms-flex-order: 1;\n        order: 1;\n  }\n  .order-xl-2 {\n    -ms-flex-order: 2;\n        order: 2;\n  }\n  .order-xl-3 {\n    -ms-flex-order: 3;\n        order: 3;\n  }\n  .order-xl-4 {\n    -ms-flex-order: 4;\n        order: 4;\n  }\n  .order-xl-5 {\n    -ms-flex-order: 5;\n        order: 5;\n  }\n  .order-xl-6 {\n    -ms-flex-order: 6;\n        order: 6;\n  }\n  .order-xl-7 {\n    -ms-flex-order: 7;\n        order: 7;\n  }\n  .order-xl-8 {\n    -ms-flex-order: 8;\n        order: 8;\n  }\n  .order-xl-9 {\n    -ms-flex-order: 9;\n        order: 9;\n  }\n  .order-xl-10 {\n    -ms-flex-order: 10;\n        order: 10;\n  }\n  .order-xl-11 {\n    -ms-flex-order: 11;\n        order: 11;\n  }\n  .order-xl-12 {\n    -ms-flex-order: 12;\n        order: 12;\n  }\n  .offset-xl-0 {\n    margin-left: 0;\n  }\n  .offset-xl-1 {\n    margin-left: 8.333333%;\n  }\n  .offset-xl-2 {\n    margin-left: 16.666667%;\n  }\n  .offset-xl-3 {\n    margin-left: 25%;\n  }\n  .offset-xl-4 {\n    margin-left: 33.333333%;\n  }\n  .offset-xl-5 {\n    margin-left: 41.666667%;\n  }\n  .offset-xl-6 {\n    margin-left: 50%;\n  }\n  .offset-xl-7 {\n    margin-left: 58.333333%;\n  }\n  .offset-xl-8 {\n    margin-left: 66.666667%;\n  }\n  .offset-xl-9 {\n    margin-left: 75%;\n  }\n  .offset-xl-10 {\n    margin-left: 83.333333%;\n  }\n  .offset-xl-11 {\n    margin-left: 91.666667%;\n  }\n}\n\n.table {\n  width: 100%;\n  max-width: 100%;\n  margin-bottom: 1rem;\n  background-color: transparent;\n}\n\n.table th,\n.table td {\n  padding: 0.75rem;\n  vertical-align: top;\n  border-top: 1px solid #e9ecef;\n}\n\n.table thead th {\n  vertical-align: bottom;\n  border-bottom: 2px solid #e9ecef;\n}\n\n.table tbody + tbody {\n  border-top: 2px solid #e9ecef;\n}\n\n.table .table {\n  background-color: #fff;\n}\n\n.table-sm th,\n.table-sm td {\n  padding: 0.3rem;\n}\n\n.table-bordered {\n  border: 1px solid #e9ecef;\n}\n\n.table-bordered th,\n.table-bordered td {\n  border: 1px solid #e9ecef;\n}\n\n.table-bordered thead th,\n.table-bordered thead td {\n  border-bottom-width: 2px;\n}\n\n.table-striped tbody tr:nth-of-type(odd) {\n  background-color: rgba(0, 0, 0, 0.05);\n}\n\n.table-hover tbody tr:hover {\n  background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-primary,\n.table-primary > th,\n.table-primary > td {\n  background-color: #b8daff;\n}\n\n.table-hover .table-primary:hover {\n  background-color: #9fcdff;\n}\n\n.table-hover .table-primary:hover > td,\n.table-hover .table-primary:hover > th {\n  background-color: #9fcdff;\n}\n\n.table-secondary,\n.table-secondary > th,\n.table-secondary > td {\n  background-color: #dddfe2;\n}\n\n.table-hover .table-secondary:hover {\n  background-color: #cfd2d6;\n}\n\n.table-hover .table-secondary:hover > td,\n.table-hover .table-secondary:hover > th {\n  background-color: #cfd2d6;\n}\n\n.table-success,\n.table-success > th,\n.table-success > td {\n  background-color: #c3e6cb;\n}\n\n.table-hover .table-success:hover {\n  background-color: #b1dfbb;\n}\n\n.table-hover .table-success:hover > td,\n.table-hover .table-success:hover > th {\n  background-color: #b1dfbb;\n}\n\n.table-info,\n.table-info > th,\n.table-info > td {\n  background-color: #bee5eb;\n}\n\n.table-hover .table-info:hover {\n  background-color: #abdde5;\n}\n\n.table-hover .table-info:hover > td,\n.table-hover .table-info:hover > th {\n  background-color: #abdde5;\n}\n\n.table-warning,\n.table-warning > th,\n.table-warning > td {\n  background-color: #ffeeba;\n}\n\n.table-hover .table-warning:hover {\n  background-color: #ffe8a1;\n}\n\n.table-hover .table-warning:hover > td,\n.table-hover .table-warning:hover > th {\n  background-color: #ffe8a1;\n}\n\n.table-danger,\n.table-danger > th,\n.table-danger > td {\n  background-color: #f5c6cb;\n}\n\n.table-hover .table-danger:hover {\n  background-color: #f1b0b7;\n}\n\n.table-hover .table-danger:hover > td,\n.table-hover .table-danger:hover > th {\n  background-color: #f1b0b7;\n}\n\n.table-light,\n.table-light > th,\n.table-light > td {\n  background-color: #fdfdfe;\n}\n\n.table-hover .table-light:hover {\n  background-color: #ececf6;\n}\n\n.table-hover .table-light:hover > td,\n.table-hover .table-light:hover > th {\n  background-color: #ececf6;\n}\n\n.table-dark,\n.table-dark > th,\n.table-dark > td {\n  background-color: #c6c8ca;\n}\n\n.table-hover .table-dark:hover {\n  background-color: #b9bbbe;\n}\n\n.table-hover .table-dark:hover > td,\n.table-hover .table-dark:hover > th {\n  background-color: #b9bbbe;\n}\n\n.table-active,\n.table-active > th,\n.table-active > td {\n  background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-hover .table-active:hover {\n  background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table-hover .table-active:hover > td,\n.table-hover .table-active:hover > th {\n  background-color: rgba(0, 0, 0, 0.075);\n}\n\n.table .thead-dark th {\n  color: #fff;\n  background-color: #212529;\n  border-color: #32383e;\n}\n\n.table .thead-light th {\n  color: #495057;\n  background-color: #e9ecef;\n  border-color: #e9ecef;\n}\n\n.table-dark {\n  color: #fff;\n  background-color: #212529;\n}\n\n.table-dark th,\n.table-dark td,\n.table-dark thead th {\n  border-color: #32383e;\n}\n\n.table-dark.table-bordered {\n  border: 0;\n}\n\n.table-dark.table-striped tbody tr:nth-of-type(odd) {\n  background-color: rgba(255, 255, 255, 0.05);\n}\n\n.table-dark.table-hover tbody tr:hover {\n  background-color: rgba(255, 255, 255, 0.075);\n}\n\n@media (max-width: 575px) {\n  .table-responsive-sm {\n    display: block;\n    width: 100%;\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n    -ms-overflow-style: -ms-autohiding-scrollbar;\n  }\n  .table-responsive-sm.table-bordered {\n    border: 0;\n  }\n}\n\n@media (max-width: 767px) {\n  .table-responsive-md {\n    display: block;\n    width: 100%;\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n    -ms-overflow-style: -ms-autohiding-scrollbar;\n  }\n  .table-responsive-md.table-bordered {\n    border: 0;\n  }\n}\n\n@media (max-width: 991px) {\n  .table-responsive-lg {\n    display: block;\n    width: 100%;\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n    -ms-overflow-style: -ms-autohiding-scrollbar;\n  }\n  .table-responsive-lg.table-bordered {\n    border: 0;\n  }\n}\n\n@media (max-width: 1199px) {\n  .table-responsive-xl {\n    display: block;\n    width: 100%;\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n    -ms-overflow-style: -ms-autohiding-scrollbar;\n  }\n  .table-responsive-xl.table-bordered {\n    border: 0;\n  }\n}\n\n.table-responsive {\n  display: block;\n  width: 100%;\n  overflow-x: auto;\n  -webkit-overflow-scrolling: touch;\n  -ms-overflow-style: -ms-autohiding-scrollbar;\n}\n\n.table-responsive.table-bordered {\n  border: 0;\n}\n\n.form-control {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  line-height: 1.5;\n  color: #495057;\n  background-color: #fff;\n  background-image: none;\n  background-clip: padding-box;\n  border: 1px solid #ced4da;\n  border-radius: 0.25rem;\n  transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s;\n}\n\n.form-control::-ms-expand {\n  background-color: transparent;\n  border: 0;\n}\n\n.form-control:focus {\n  color: #495057;\n  background-color: #fff;\n  border-color: #80bdff;\n  outline: none;\n  box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.form-control::-webkit-input-placeholder {\n  color: #868e96;\n  opacity: 1;\n}\n\n.form-control:-ms-input-placeholder {\n  color: #868e96;\n  opacity: 1;\n}\n\n.form-control::-ms-input-placeholder {\n  color: #868e96;\n  opacity: 1;\n}\n\n.form-control::placeholder {\n  color: #868e96;\n  opacity: 1;\n}\n\n.form-control:disabled, .form-control[readonly] {\n  background-color: #e9ecef;\n  opacity: 1;\n}\n\nselect.form-control:not([size]):not([multiple]) {\n  height: calc(2.25rem + 2px);\n}\n\nselect.form-control:focus::-ms-value {\n  color: #495057;\n  background-color: #fff;\n}\n\n.form-control-file,\n.form-control-range {\n  display: block;\n}\n\n.col-form-label {\n  padding-top: calc(0.375rem + 1px);\n  padding-bottom: calc(0.375rem + 1px);\n  margin-bottom: 0;\n  line-height: 1.5;\n}\n\n.col-form-label-lg {\n  padding-top: calc(0.5rem + 1px);\n  padding-bottom: calc(0.5rem + 1px);\n  font-size: 1.25rem;\n  line-height: 1.5;\n}\n\n.col-form-label-sm {\n  padding-top: calc(0.25rem + 1px);\n  padding-bottom: calc(0.25rem + 1px);\n  font-size: 0.875rem;\n  line-height: 1.5;\n}\n\n.col-form-legend {\n  padding-top: 0.375rem;\n  padding-bottom: 0.375rem;\n  margin-bottom: 0;\n  font-size: 1rem;\n}\n\n.form-control-plaintext {\n  padding-top: 0.375rem;\n  padding-bottom: 0.375rem;\n  margin-bottom: 0;\n  line-height: 1.5;\n  background-color: transparent;\n  border: solid transparent;\n  border-width: 1px 0;\n}\n\n.form-control-plaintext.form-control-sm, .input-group-sm > .form-control-plaintext.form-control,\n.input-group-sm > .form-control-plaintext.input-group-addon,\n.input-group-sm > .input-group-btn > .form-control-plaintext.btn, .form-control-plaintext.form-control-lg, .input-group-lg > .form-control-plaintext.form-control,\n.input-group-lg > .form-control-plaintext.input-group-addon,\n.input-group-lg > .input-group-btn > .form-control-plaintext.btn {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.form-control-sm, .input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  line-height: 1.5;\n  border-radius: 0.2rem;\n}\n\nselect.form-control-sm:not([size]):not([multiple]), .input-group-sm > select.form-control:not([size]):not([multiple]),\n.input-group-sm > select.input-group-addon:not([size]):not([multiple]),\n.input-group-sm > .input-group-btn > select.btn:not([size]):not([multiple]) {\n  height: calc(1.8125rem + 2px);\n}\n\n.form-control-lg, .input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  line-height: 1.5;\n  border-radius: 0.3rem;\n}\n\nselect.form-control-lg:not([size]):not([multiple]), .input-group-lg > select.form-control:not([size]):not([multiple]),\n.input-group-lg > select.input-group-addon:not([size]):not([multiple]),\n.input-group-lg > .input-group-btn > select.btn:not([size]):not([multiple]) {\n  height: calc(2.875rem + 2px);\n}\n\n.form-group {\n  margin-bottom: 1rem;\n}\n\n.form-text {\n  display: block;\n  margin-top: 0.25rem;\n}\n\n.form-row {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap;\n  margin-right: -5px;\n  margin-left: -5px;\n}\n\n.form-row > .col,\n.form-row > [class*=\"col-\"] {\n  padding-right: 5px;\n  padding-left: 5px;\n}\n\n.form-check {\n  position: relative;\n  display: block;\n  margin-bottom: 0.5rem;\n}\n\n.form-check.disabled .form-check-label {\n  color: #868e96;\n}\n\n.form-check-label {\n  padding-left: 1.25rem;\n  margin-bottom: 0;\n}\n\n.form-check-input {\n  position: absolute;\n  margin-top: 0.25rem;\n  margin-left: -1.25rem;\n}\n\n.form-check-inline {\n  display: inline-block;\n  margin-right: 0.75rem;\n}\n\n.form-check-inline .form-check-label {\n  vertical-align: middle;\n}\n\n.valid-feedback {\n  display: none;\n  margin-top: .25rem;\n  font-size: .875rem;\n  color: #28a745;\n}\n\n.valid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  width: 250px;\n  padding: .5rem;\n  margin-top: .1rem;\n  font-size: .875rem;\n  line-height: 1;\n  color: #fff;\n  background-color: rgba(40, 167, 69, 0.8);\n  border-radius: .2rem;\n}\n\n.was-validated .form-control:valid, .form-control.is-valid, .was-validated\n.custom-select:valid,\n.custom-select.is-valid {\n  border-color: #28a745;\n}\n\n.was-validated .form-control:valid:focus, .form-control.is-valid:focus, .was-validated\n.custom-select:valid:focus,\n.custom-select.is-valid:focus {\n  box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .form-control:valid ~ .valid-feedback,\n.was-validated .form-control:valid ~ .valid-tooltip, .form-control.is-valid ~ .valid-feedback,\n.form-control.is-valid ~ .valid-tooltip, .was-validated\n.custom-select:valid ~ .valid-feedback,\n.was-validated\n.custom-select:valid ~ .valid-tooltip,\n.custom-select.is-valid ~ .valid-feedback,\n.custom-select.is-valid ~ .valid-tooltip {\n  display: block;\n}\n\n.was-validated .form-check-input:valid + .form-check-label, .form-check-input.is-valid + .form-check-label {\n  color: #28a745;\n}\n\n.was-validated .custom-control-input:valid ~ .custom-control-indicator, .custom-control-input.is-valid ~ .custom-control-indicator {\n  background-color: rgba(40, 167, 69, 0.25);\n}\n\n.was-validated .custom-control-input:valid ~ .custom-control-description, .custom-control-input.is-valid ~ .custom-control-description {\n  color: #28a745;\n}\n\n.was-validated .custom-file-input:valid ~ .custom-file-control, .custom-file-input.is-valid ~ .custom-file-control {\n  border-color: #28a745;\n}\n\n.was-validated .custom-file-input:valid ~ .custom-file-control::before, .custom-file-input.is-valid ~ .custom-file-control::before {\n  border-color: inherit;\n}\n\n.was-validated .custom-file-input:valid:focus, .custom-file-input.is-valid:focus {\n  box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);\n}\n\n.invalid-feedback {\n  display: none;\n  margin-top: .25rem;\n  font-size: .875rem;\n  color: #dc3545;\n}\n\n.invalid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  width: 250px;\n  padding: .5rem;\n  margin-top: .1rem;\n  font-size: .875rem;\n  line-height: 1;\n  color: #fff;\n  background-color: rgba(220, 53, 69, 0.8);\n  border-radius: .2rem;\n}\n\n.was-validated .form-control:invalid, .form-control.is-invalid, .was-validated\n.custom-select:invalid,\n.custom-select.is-invalid {\n  border-color: #dc3545;\n}\n\n.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus, .was-validated\n.custom-select:invalid:focus,\n.custom-select.is-invalid:focus {\n  box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .form-control:invalid ~ .invalid-feedback,\n.was-validated .form-control:invalid ~ .invalid-tooltip, .form-control.is-invalid ~ .invalid-feedback,\n.form-control.is-invalid ~ .invalid-tooltip, .was-validated\n.custom-select:invalid ~ .invalid-feedback,\n.was-validated\n.custom-select:invalid ~ .invalid-tooltip,\n.custom-select.is-invalid ~ .invalid-feedback,\n.custom-select.is-invalid ~ .invalid-tooltip {\n  display: block;\n}\n\n.was-validated .form-check-input:invalid + .form-check-label, .form-check-input.is-invalid + .form-check-label {\n  color: #dc3545;\n}\n\n.was-validated .custom-control-input:invalid ~ .custom-control-indicator, .custom-control-input.is-invalid ~ .custom-control-indicator {\n  background-color: rgba(220, 53, 69, 0.25);\n}\n\n.was-validated .custom-control-input:invalid ~ .custom-control-description, .custom-control-input.is-invalid ~ .custom-control-description {\n  color: #dc3545;\n}\n\n.was-validated .custom-file-input:invalid ~ .custom-file-control, .custom-file-input.is-invalid ~ .custom-file-control {\n  border-color: #dc3545;\n}\n\n.was-validated .custom-file-input:invalid ~ .custom-file-control::before, .custom-file-input.is-invalid ~ .custom-file-control::before {\n  border-color: inherit;\n}\n\n.was-validated .custom-file-input:invalid:focus, .custom-file-input.is-invalid:focus {\n  box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);\n}\n\n.form-inline {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-flow: row wrap;\n      flex-flow: row wrap;\n  -ms-flex-align: center;\n      align-items: center;\n}\n\n.form-inline .form-check {\n  width: 100%;\n}\n\n@media (min-width: 576px) {\n  .form-inline label {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-align: center;\n        align-items: center;\n    -ms-flex-pack: center;\n        justify-content: center;\n    margin-bottom: 0;\n  }\n  .form-inline .form-group {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex: 0 0 auto;\n        flex: 0 0 auto;\n    -ms-flex-flow: row wrap;\n        flex-flow: row wrap;\n    -ms-flex-align: center;\n        align-items: center;\n    margin-bottom: 0;\n  }\n  .form-inline .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle;\n  }\n  .form-inline .form-control-plaintext {\n    display: inline-block;\n  }\n  .form-inline .input-group {\n    width: auto;\n  }\n  .form-inline .form-check {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-align: center;\n        align-items: center;\n    -ms-flex-pack: center;\n        justify-content: center;\n    width: auto;\n    margin-top: 0;\n    margin-bottom: 0;\n  }\n  .form-inline .form-check-label {\n    padding-left: 0;\n  }\n  .form-inline .form-check-input {\n    position: relative;\n    margin-top: 0;\n    margin-right: 0.25rem;\n    margin-left: 0;\n  }\n  .form-inline .custom-control {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-align: center;\n        align-items: center;\n    -ms-flex-pack: center;\n        justify-content: center;\n    padding-left: 0;\n  }\n  .form-inline .custom-control-indicator {\n    position: static;\n    display: inline-block;\n    margin-right: 0.25rem;\n    vertical-align: text-bottom;\n  }\n  .form-inline .has-feedback .form-control-feedback {\n    top: 0;\n  }\n}\n\n.btn {\n  display: inline-block;\n  font-weight: 400;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n  border: 1px solid transparent;\n  padding: 0.375rem 0.75rem;\n  font-size: 1rem;\n  line-height: 1.5;\n  border-radius: 0.25rem;\n  transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n.btn:focus, .btn:hover {\n  text-decoration: none;\n}\n\n.btn:focus, .btn.focus {\n  outline: 0;\n  box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.btn.disabled, .btn:disabled {\n  opacity: .65;\n}\n\n.btn:not([disabled]):not(.disabled):active, .btn:not([disabled]):not(.disabled).active {\n  background-image: none;\n}\n\na.btn.disabled,\nfieldset[disabled] a.btn {\n  pointer-events: none;\n}\n\n.btn-primary {\n  color: #fff;\n  background-color: #007bff;\n  border-color: #007bff;\n}\n\n.btn-primary:hover {\n  color: #fff;\n  background-color: #0069d9;\n  border-color: #0062cc;\n}\n\n.btn-primary:focus, .btn-primary.focus {\n  box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-primary.disabled, .btn-primary:disabled {\n  background-color: #007bff;\n  border-color: #007bff;\n}\n\n.btn-primary:not([disabled]):not(.disabled):active, .btn-primary:not([disabled]):not(.disabled).active,\n.show > .btn-primary.dropdown-toggle {\n  color: #fff;\n  background-color: #0062cc;\n  border-color: #005cbf;\n  box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-secondary {\n  color: #fff;\n  background-color: #868e96;\n  border-color: #868e96;\n}\n\n.btn-secondary:hover {\n  color: #fff;\n  background-color: #727b84;\n  border-color: #6c757d;\n}\n\n.btn-secondary:focus, .btn-secondary.focus {\n  box-shadow: 0 0 0 0.2rem rgba(134, 142, 150, 0.5);\n}\n\n.btn-secondary.disabled, .btn-secondary:disabled {\n  background-color: #868e96;\n  border-color: #868e96;\n}\n\n.btn-secondary:not([disabled]):not(.disabled):active, .btn-secondary:not([disabled]):not(.disabled).active,\n.show > .btn-secondary.dropdown-toggle {\n  color: #fff;\n  background-color: #6c757d;\n  border-color: #666e76;\n  box-shadow: 0 0 0 0.2rem rgba(134, 142, 150, 0.5);\n}\n\n.btn-success {\n  color: #fff;\n  background-color: #28a745;\n  border-color: #28a745;\n}\n\n.btn-success:hover {\n  color: #fff;\n  background-color: #218838;\n  border-color: #1e7e34;\n}\n\n.btn-success:focus, .btn-success.focus {\n  box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-success.disabled, .btn-success:disabled {\n  background-color: #28a745;\n  border-color: #28a745;\n}\n\n.btn-success:not([disabled]):not(.disabled):active, .btn-success:not([disabled]):not(.disabled).active,\n.show > .btn-success.dropdown-toggle {\n  color: #fff;\n  background-color: #1e7e34;\n  border-color: #1c7430;\n  box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-info {\n  color: #fff;\n  background-color: #17a2b8;\n  border-color: #17a2b8;\n}\n\n.btn-info:hover {\n  color: #fff;\n  background-color: #138496;\n  border-color: #117a8b;\n}\n\n.btn-info:focus, .btn-info.focus {\n  box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-info.disabled, .btn-info:disabled {\n  background-color: #17a2b8;\n  border-color: #17a2b8;\n}\n\n.btn-info:not([disabled]):not(.disabled):active, .btn-info:not([disabled]):not(.disabled).active,\n.show > .btn-info.dropdown-toggle {\n  color: #fff;\n  background-color: #117a8b;\n  border-color: #10707f;\n  box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-warning {\n  color: #111;\n  background-color: #ffc107;\n  border-color: #ffc107;\n}\n\n.btn-warning:hover {\n  color: #111;\n  background-color: #e0a800;\n  border-color: #d39e00;\n}\n\n.btn-warning:focus, .btn-warning.focus {\n  box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-warning.disabled, .btn-warning:disabled {\n  background-color: #ffc107;\n  border-color: #ffc107;\n}\n\n.btn-warning:not([disabled]):not(.disabled):active, .btn-warning:not([disabled]):not(.disabled).active,\n.show > .btn-warning.dropdown-toggle {\n  color: #111;\n  background-color: #d39e00;\n  border-color: #c69500;\n  box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-danger {\n  color: #fff;\n  background-color: #dc3545;\n  border-color: #dc3545;\n}\n\n.btn-danger:hover {\n  color: #fff;\n  background-color: #c82333;\n  border-color: #bd2130;\n}\n\n.btn-danger:focus, .btn-danger.focus {\n  box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-danger.disabled, .btn-danger:disabled {\n  background-color: #dc3545;\n  border-color: #dc3545;\n}\n\n.btn-danger:not([disabled]):not(.disabled):active, .btn-danger:not([disabled]):not(.disabled).active,\n.show > .btn-danger.dropdown-toggle {\n  color: #fff;\n  background-color: #bd2130;\n  border-color: #b21f2d;\n  box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-light {\n  color: #111;\n  background-color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n\n.btn-light:hover {\n  color: #111;\n  background-color: #e2e6ea;\n  border-color: #dae0e5;\n}\n\n.btn-light:focus, .btn-light.focus {\n  box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-light.disabled, .btn-light:disabled {\n  background-color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n\n.btn-light:not([disabled]):not(.disabled):active, .btn-light:not([disabled]):not(.disabled).active,\n.show > .btn-light.dropdown-toggle {\n  color: #111;\n  background-color: #dae0e5;\n  border-color: #d3d9df;\n  box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-dark {\n  color: #fff;\n  background-color: #343a40;\n  border-color: #343a40;\n}\n\n.btn-dark:hover {\n  color: #fff;\n  background-color: #23272b;\n  border-color: #1d2124;\n}\n\n.btn-dark:focus, .btn-dark.focus {\n  box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-dark.disabled, .btn-dark:disabled {\n  background-color: #343a40;\n  border-color: #343a40;\n}\n\n.btn-dark:not([disabled]):not(.disabled):active, .btn-dark:not([disabled]):not(.disabled).active,\n.show > .btn-dark.dropdown-toggle {\n  color: #fff;\n  background-color: #1d2124;\n  border-color: #171a1d;\n  box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-outline-primary {\n  color: #007bff;\n  background-color: transparent;\n  background-image: none;\n  border-color: #007bff;\n}\n\n.btn-outline-primary:hover {\n  color: #fff;\n  background-color: #007bff;\n  border-color: #007bff;\n}\n\n.btn-outline-primary:focus, .btn-outline-primary.focus {\n  box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-outline-primary.disabled, .btn-outline-primary:disabled {\n  color: #007bff;\n  background-color: transparent;\n}\n\n.btn-outline-primary:not([disabled]):not(.disabled):active, .btn-outline-primary:not([disabled]):not(.disabled).active,\n.show > .btn-outline-primary.dropdown-toggle {\n  color: #fff;\n  background-color: #007bff;\n  border-color: #007bff;\n  box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);\n}\n\n.btn-outline-secondary {\n  color: #868e96;\n  background-color: transparent;\n  background-image: none;\n  border-color: #868e96;\n}\n\n.btn-outline-secondary:hover {\n  color: #fff;\n  background-color: #868e96;\n  border-color: #868e96;\n}\n\n.btn-outline-secondary:focus, .btn-outline-secondary.focus {\n  box-shadow: 0 0 0 0.2rem rgba(134, 142, 150, 0.5);\n}\n\n.btn-outline-secondary.disabled, .btn-outline-secondary:disabled {\n  color: #868e96;\n  background-color: transparent;\n}\n\n.btn-outline-secondary:not([disabled]):not(.disabled):active, .btn-outline-secondary:not([disabled]):not(.disabled).active,\n.show > .btn-outline-secondary.dropdown-toggle {\n  color: #fff;\n  background-color: #868e96;\n  border-color: #868e96;\n  box-shadow: 0 0 0 0.2rem rgba(134, 142, 150, 0.5);\n}\n\n.btn-outline-success {\n  color: #28a745;\n  background-color: transparent;\n  background-image: none;\n  border-color: #28a745;\n}\n\n.btn-outline-success:hover {\n  color: #fff;\n  background-color: #28a745;\n  border-color: #28a745;\n}\n\n.btn-outline-success:focus, .btn-outline-success.focus {\n  box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-outline-success.disabled, .btn-outline-success:disabled {\n  color: #28a745;\n  background-color: transparent;\n}\n\n.btn-outline-success:not([disabled]):not(.disabled):active, .btn-outline-success:not([disabled]):not(.disabled).active,\n.show > .btn-outline-success.dropdown-toggle {\n  color: #fff;\n  background-color: #28a745;\n  border-color: #28a745;\n  box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);\n}\n\n.btn-outline-info {\n  color: #17a2b8;\n  background-color: transparent;\n  background-image: none;\n  border-color: #17a2b8;\n}\n\n.btn-outline-info:hover {\n  color: #fff;\n  background-color: #17a2b8;\n  border-color: #17a2b8;\n}\n\n.btn-outline-info:focus, .btn-outline-info.focus {\n  box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-outline-info.disabled, .btn-outline-info:disabled {\n  color: #17a2b8;\n  background-color: transparent;\n}\n\n.btn-outline-info:not([disabled]):not(.disabled):active, .btn-outline-info:not([disabled]):not(.disabled).active,\n.show > .btn-outline-info.dropdown-toggle {\n  color: #fff;\n  background-color: #17a2b8;\n  border-color: #17a2b8;\n  box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);\n}\n\n.btn-outline-warning {\n  color: #ffc107;\n  background-color: transparent;\n  background-image: none;\n  border-color: #ffc107;\n}\n\n.btn-outline-warning:hover {\n  color: #fff;\n  background-color: #ffc107;\n  border-color: #ffc107;\n}\n\n.btn-outline-warning:focus, .btn-outline-warning.focus {\n  box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-outline-warning.disabled, .btn-outline-warning:disabled {\n  color: #ffc107;\n  background-color: transparent;\n}\n\n.btn-outline-warning:not([disabled]):not(.disabled):active, .btn-outline-warning:not([disabled]):not(.disabled).active,\n.show > .btn-outline-warning.dropdown-toggle {\n  color: #fff;\n  background-color: #ffc107;\n  border-color: #ffc107;\n  box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);\n}\n\n.btn-outline-danger {\n  color: #dc3545;\n  background-color: transparent;\n  background-image: none;\n  border-color: #dc3545;\n}\n\n.btn-outline-danger:hover {\n  color: #fff;\n  background-color: #dc3545;\n  border-color: #dc3545;\n}\n\n.btn-outline-danger:focus, .btn-outline-danger.focus {\n  box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-outline-danger.disabled, .btn-outline-danger:disabled {\n  color: #dc3545;\n  background-color: transparent;\n}\n\n.btn-outline-danger:not([disabled]):not(.disabled):active, .btn-outline-danger:not([disabled]):not(.disabled).active,\n.show > .btn-outline-danger.dropdown-toggle {\n  color: #fff;\n  background-color: #dc3545;\n  border-color: #dc3545;\n  box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);\n}\n\n.btn-outline-light {\n  color: #f8f9fa;\n  background-color: transparent;\n  background-image: none;\n  border-color: #f8f9fa;\n}\n\n.btn-outline-light:hover {\n  color: #212529;\n  background-color: #f8f9fa;\n  border-color: #f8f9fa;\n}\n\n.btn-outline-light:focus, .btn-outline-light.focus {\n  box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-light.disabled, .btn-outline-light:disabled {\n  color: #f8f9fa;\n  background-color: transparent;\n}\n\n.btn-outline-light:not([disabled]):not(.disabled):active, .btn-outline-light:not([disabled]):not(.disabled).active,\n.show > .btn-outline-light.dropdown-toggle {\n  color: #212529;\n  background-color: #f8f9fa;\n  border-color: #f8f9fa;\n  box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);\n}\n\n.btn-outline-dark {\n  color: #343a40;\n  background-color: transparent;\n  background-image: none;\n  border-color: #343a40;\n}\n\n.btn-outline-dark:hover {\n  color: #fff;\n  background-color: #343a40;\n  border-color: #343a40;\n}\n\n.btn-outline-dark:focus, .btn-outline-dark.focus {\n  box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-outline-dark.disabled, .btn-outline-dark:disabled {\n  color: #343a40;\n  background-color: transparent;\n}\n\n.btn-outline-dark:not([disabled]):not(.disabled):active, .btn-outline-dark:not([disabled]):not(.disabled).active,\n.show > .btn-outline-dark.dropdown-toggle {\n  color: #fff;\n  background-color: #343a40;\n  border-color: #343a40;\n  box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);\n}\n\n.btn-link {\n  font-weight: 400;\n  color: #007bff;\n  background-color: transparent;\n}\n\n.btn-link:hover {\n  color: #0056b3;\n  text-decoration: underline;\n  background-color: transparent;\n  border-color: transparent;\n}\n\n.btn-link:focus, .btn-link.focus {\n  border-color: transparent;\n  box-shadow: none;\n}\n\n.btn-link:disabled, .btn-link.disabled {\n  color: #868e96;\n}\n\n.btn-lg, .btn-group-lg > .btn {\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  line-height: 1.5;\n  border-radius: 0.3rem;\n}\n\n.btn-sm, .btn-group-sm > .btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  line-height: 1.5;\n  border-radius: 0.2rem;\n}\n\n.btn-block {\n  display: block;\n  width: 100%;\n}\n\n.btn-block + .btn-block {\n  margin-top: 0.5rem;\n}\n\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n  width: 100%;\n}\n\n.fade {\n  opacity: 0;\n  transition: opacity 0.15s linear;\n}\n\n.fade.show {\n  opacity: 1;\n}\n\n.collapse {\n  display: none;\n}\n\n.collapse.show {\n  display: block;\n}\n\ntr.collapse.show {\n  display: table-row;\n}\n\ntbody.collapse.show {\n  display: table-row-group;\n}\n\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  transition: height 0.35s ease;\n}\n\n.dropup,\n.dropdown {\n  position: relative;\n}\n\n.dropdown-toggle::after {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0;\n  border-left: 0.3em solid transparent;\n}\n\n.dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: 1000;\n  display: none;\n  float: left;\n  min-width: 10rem;\n  padding: 0.5rem 0;\n  margin: 0.125rem 0 0;\n  font-size: 1rem;\n  color: #212529;\n  text-align: left;\n  list-style: none;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.15);\n  border-radius: 0.25rem;\n}\n\n.dropup .dropdown-menu {\n  margin-top: 0;\n  margin-bottom: 0.125rem;\n}\n\n.dropup .dropdown-toggle::after {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0.3em solid;\n  border-left: 0.3em solid transparent;\n}\n\n.dropup .dropdown-toggle:empty::after {\n  margin-left: 0;\n}\n\n.dropdown-divider {\n  height: 0;\n  margin: 0.5rem 0;\n  overflow: hidden;\n  border-top: 1px solid #e9ecef;\n}\n\n.dropdown-item {\n  display: block;\n  width: 100%;\n  padding: 0.25rem 1.5rem;\n  clear: both;\n  font-weight: 400;\n  color: #212529;\n  text-align: inherit;\n  white-space: nowrap;\n  background: none;\n  border: 0;\n}\n\n.dropdown-item:focus, .dropdown-item:hover {\n  color: #16181b;\n  text-decoration: none;\n  background-color: #f8f9fa;\n}\n\n.dropdown-item.active, .dropdown-item:active {\n  color: #fff;\n  text-decoration: none;\n  background-color: #007bff;\n}\n\n.dropdown-item.disabled, .dropdown-item:disabled {\n  color: #868e96;\n  background-color: transparent;\n}\n\n.dropdown-menu.show {\n  display: block;\n}\n\n.dropdown-header {\n  display: block;\n  padding: 0.5rem 1.5rem;\n  margin-bottom: 0;\n  font-size: 0.875rem;\n  color: #868e96;\n  white-space: nowrap;\n}\n\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  vertical-align: middle;\n}\n\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  -ms-flex: 0 1 auto;\n      flex: 0 1 auto;\n}\n\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover {\n  z-index: 2;\n}\n\n.btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active,\n.btn-group-vertical > .btn:focus,\n.btn-group-vertical > .btn:active,\n.btn-group-vertical > .btn.active {\n  z-index: 2;\n}\n\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group,\n.btn-group-vertical .btn + .btn,\n.btn-group-vertical .btn + .btn-group,\n.btn-group-vertical .btn-group + .btn,\n.btn-group-vertical .btn-group + .btn-group {\n  margin-left: -1px;\n}\n\n.btn-toolbar {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap;\n  -ms-flex-pack: start;\n      justify-content: flex-start;\n}\n\n.btn-toolbar .input-group {\n  width: auto;\n}\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0;\n}\n\n.btn-group > .btn:first-child {\n  margin-left: 0;\n}\n\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.btn-group > .btn-group {\n  float: left;\n}\n\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n\n.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.btn + .dropdown-toggle-split {\n  padding-right: 0.5625rem;\n  padding-left: 0.5625rem;\n}\n\n.btn + .dropdown-toggle-split::after {\n  margin-left: 0;\n}\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {\n  padding-right: 0.375rem;\n  padding-left: 0.375rem;\n}\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {\n  padding-right: 0.75rem;\n  padding-left: 0.75rem;\n}\n\n.btn-group-vertical {\n  -ms-flex-direction: column;\n      flex-direction: column;\n  -ms-flex-align: start;\n      align-items: flex-start;\n  -ms-flex-pack: center;\n      justify-content: center;\n}\n\n.btn-group-vertical .btn,\n.btn-group-vertical .btn-group {\n  width: 100%;\n}\n\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n  margin-top: -1px;\n  margin-left: 0;\n}\n\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none;\n}\n\n.input-group {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: stretch;\n      align-items: stretch;\n  width: 100%;\n}\n\n.input-group .form-control {\n  position: relative;\n  z-index: 2;\n  -ms-flex: 1 1 auto;\n      flex: 1 1 auto;\n  width: 1%;\n  margin-bottom: 0;\n}\n\n.input-group .form-control:focus, .input-group .form-control:active, .input-group .form-control:hover {\n  z-index: 3;\n}\n\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n      align-items: center;\n}\n\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n\n.input-group-addon,\n.input-group-btn {\n  white-space: nowrap;\n}\n\n.input-group-addon {\n  padding: 0.375rem 0.75rem;\n  margin-bottom: 0;\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #495057;\n  text-align: center;\n  background-color: #e9ecef;\n  border: 1px solid #ced4da;\n  border-radius: 0.25rem;\n}\n\n.input-group-addon.form-control-sm,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .input-group-addon.btn {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem;\n}\n\n.input-group-addon.form-control-lg,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .input-group-addon.btn {\n  padding: 0.5rem 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem;\n}\n\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n  margin-top: 0;\n}\n\n.input-group .form-control:not(:last-child),\n.input-group-addon:not(:last-child),\n.input-group-btn:not(:last-child) > .btn,\n.input-group-btn:not(:last-child) > .btn-group > .btn,\n.input-group-btn:not(:last-child) > .dropdown-toggle,\n.input-group-btn:not(:first-child) > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:not(:first-child) > .btn-group:not(:last-child) > .btn {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n\n.input-group-addon:not(:last-child) {\n  border-right: 0;\n}\n\n.input-group .form-control:not(:first-child),\n.input-group-addon:not(:first-child),\n.input-group-btn:not(:first-child) > .btn,\n.input-group-btn:not(:first-child) > .btn-group > .btn,\n.input-group-btn:not(:first-child) > .dropdown-toggle,\n.input-group-btn:not(:last-child) > .btn:not(:first-child),\n.input-group-btn:not(:last-child) > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n\n.form-control + .input-group-addon:not(:first-child) {\n  border-left: 0;\n}\n\n.input-group-btn {\n  position: relative;\n  -ms-flex-align: stretch;\n      align-items: stretch;\n  font-size: 0;\n  white-space: nowrap;\n}\n\n.input-group-btn > .btn {\n  position: relative;\n}\n\n.input-group-btn > .btn + .btn {\n  margin-left: -1px;\n}\n\n.input-group-btn > .btn:focus, .input-group-btn > .btn:active, .input-group-btn > .btn:hover {\n  z-index: 3;\n}\n\n.input-group-btn:first-child > .btn + .btn {\n  margin-left: 0;\n}\n\n.input-group-btn:not(:last-child) > .btn,\n.input-group-btn:not(:last-child) > .btn-group {\n  margin-right: -1px;\n}\n\n.input-group-btn:not(:first-child) > .btn,\n.input-group-btn:not(:first-child) > .btn-group {\n  z-index: 2;\n  margin-left: 0;\n}\n\n.input-group-btn:not(:first-child) > .btn:first-child,\n.input-group-btn:not(:first-child) > .btn-group:first-child {\n  margin-left: -1px;\n}\n\n.input-group-btn:not(:first-child) > .btn:focus, .input-group-btn:not(:first-child) > .btn:active, .input-group-btn:not(:first-child) > .btn:hover,\n.input-group-btn:not(:first-child) > .btn-group:focus,\n.input-group-btn:not(:first-child) > .btn-group:active,\n.input-group-btn:not(:first-child) > .btn-group:hover {\n  z-index: 3;\n}\n\n.custom-control {\n  position: relative;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  min-height: 1.5rem;\n  padding-left: 1.5rem;\n  margin-right: 1rem;\n}\n\n.custom-control-input {\n  position: absolute;\n  z-index: -1;\n  opacity: 0;\n}\n\n.custom-control-input:checked ~ .custom-control-indicator {\n  color: #fff;\n  background-color: #007bff;\n}\n\n.custom-control-input:focus ~ .custom-control-indicator {\n  box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);\n}\n\n.custom-control-input:active ~ .custom-control-indicator {\n  color: #fff;\n  background-color: #b3d7ff;\n}\n\n.custom-control-input:disabled ~ .custom-control-indicator {\n  background-color: #e9ecef;\n}\n\n.custom-control-input:disabled ~ .custom-control-description {\n  color: #868e96;\n}\n\n.custom-control-indicator {\n  position: absolute;\n  top: 0.25rem;\n  left: 0;\n  display: block;\n  width: 1rem;\n  height: 1rem;\n  pointer-events: none;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n  background-color: #ddd;\n  background-repeat: no-repeat;\n  background-position: center center;\n  background-size: 50% 50%;\n}\n\n.custom-checkbox .custom-control-indicator {\n  border-radius: 0.25rem;\n}\n\n.custom-checkbox .custom-control-input:checked ~ .custom-control-indicator {\n  background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E\");\n}\n\n.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-indicator {\n  background-color: #007bff;\n  background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E\");\n}\n\n.custom-radio .custom-control-indicator {\n  border-radius: 50%;\n}\n\n.custom-radio .custom-control-input:checked ~ .custom-control-indicator {\n  background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E\");\n}\n\n.custom-controls-stacked {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n      flex-direction: column;\n}\n\n.custom-controls-stacked .custom-control {\n  margin-bottom: 0.25rem;\n}\n\n.custom-controls-stacked .custom-control + .custom-control {\n  margin-left: 0;\n}\n\n.custom-select {\n  display: inline-block;\n  max-width: 100%;\n  height: calc(2.25rem + 2px);\n  padding: 0.375rem 1.75rem 0.375rem 0.75rem;\n  line-height: 1.5;\n  color: #495057;\n  vertical-align: middle;\n  background: #fff url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23333' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E\") no-repeat right 0.75rem center;\n  background-size: 8px 10px;\n  border: 1px solid #ced4da;\n  border-radius: 0.25rem;\n  -webkit-appearance: none;\n     -moz-appearance: none;\n          appearance: none;\n}\n\n.custom-select:focus {\n  border-color: #80bdff;\n  outline: none;\n}\n\n.custom-select:focus::-ms-value {\n  color: #495057;\n  background-color: #fff;\n}\n\n.custom-select[multiple] {\n  height: auto;\n  background-image: none;\n}\n\n.custom-select:disabled {\n  color: #868e96;\n  background-color: #e9ecef;\n}\n\n.custom-select::-ms-expand {\n  opacity: 0;\n}\n\n.custom-select-sm {\n  height: calc(1.8125rem + 2px);\n  padding-top: 0.375rem;\n  padding-bottom: 0.375rem;\n  font-size: 75%;\n}\n\n.custom-file {\n  position: relative;\n  display: inline-block;\n  max-width: 100%;\n  height: calc(2.25rem + 2px);\n  margin-bottom: 0;\n}\n\n.custom-file-input {\n  min-width: 14rem;\n  max-width: 100%;\n  height: calc(2.25rem + 2px);\n  margin: 0;\n  opacity: 0;\n}\n\n.custom-file-input:focus ~ .custom-file-control {\n  box-shadow: 0 0 0 0.075rem #fff, 0 0 0 0.2rem #007bff;\n}\n\n.custom-file-control {\n  position: absolute;\n  top: 0;\n  right: 0;\n  left: 0;\n  z-index: 5;\n  height: calc(2.25rem + 2px);\n  padding: 0.375rem 0.75rem;\n  line-height: 1.5;\n  color: #495057;\n  pointer-events: none;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n  background-color: #fff;\n  border: 1px solid #ced4da;\n  border-radius: 0.25rem;\n}\n\n.custom-file-control:lang(en):empty::after {\n  content: \"Choose file...\";\n}\n\n.custom-file-control::before {\n  position: absolute;\n  top: -1px;\n  right: -1px;\n  bottom: -1px;\n  z-index: 6;\n  display: block;\n  height: calc(2.25rem + 2px);\n  padding: 0.375rem 0.75rem;\n  line-height: 1.5;\n  color: #495057;\n  background-color: #e9ecef;\n  border: 1px solid #ced4da;\n  border-radius: 0 0.25rem 0.25rem 0;\n}\n\n.custom-file-control:lang(en)::before {\n  content: \"Browse\";\n}\n\n.nav {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.nav-link {\n  display: block;\n  padding: 0.5rem 1rem;\n}\n\n.nav-link:focus, .nav-link:hover {\n  text-decoration: none;\n}\n\n.nav-link.disabled {\n  color: #868e96;\n}\n\n.nav-tabs {\n  border-bottom: 1px solid #ddd;\n}\n\n.nav-tabs .nav-item {\n  margin-bottom: -1px;\n}\n\n.nav-tabs .nav-link {\n  border: 1px solid transparent;\n  border-top-left-radius: 0.25rem;\n  border-top-right-radius: 0.25rem;\n}\n\n.nav-tabs .nav-link:focus, .nav-tabs .nav-link:hover {\n  border-color: #e9ecef #e9ecef #ddd;\n}\n\n.nav-tabs .nav-link.disabled {\n  color: #868e96;\n  background-color: transparent;\n  border-color: transparent;\n}\n\n.nav-tabs .nav-link.active,\n.nav-tabs .nav-item.show .nav-link {\n  color: #495057;\n  background-color: #fff;\n  border-color: #ddd #ddd #fff;\n}\n\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n\n.nav-pills .nav-link {\n  border-radius: 0.25rem;\n}\n\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n  color: #fff;\n  background-color: #007bff;\n}\n\n.nav-fill .nav-item {\n  -ms-flex: 1 1 auto;\n      flex: 1 1 auto;\n  text-align: center;\n}\n\n.nav-justified .nav-item {\n  -ms-flex-preferred-size: 0;\n      flex-basis: 0;\n  -ms-flex-positive: 1;\n      flex-grow: 1;\n  text-align: center;\n}\n\n.tab-content > .tab-pane {\n  display: none;\n}\n\n.tab-content > .active {\n  display: block;\n}\n\n.navbar {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap;\n  -ms-flex-align: center;\n      align-items: center;\n  -ms-flex-pack: justify;\n      justify-content: space-between;\n  padding: 0.5rem 1rem;\n}\n\n.navbar > .container,\n.navbar > .container-fluid {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap;\n  -ms-flex-align: center;\n      align-items: center;\n  -ms-flex-pack: justify;\n      justify-content: space-between;\n}\n\n.navbar-brand {\n  display: inline-block;\n  padding-top: 0.3125rem;\n  padding-bottom: 0.3125rem;\n  margin-right: 1rem;\n  font-size: 1.25rem;\n  line-height: inherit;\n  white-space: nowrap;\n}\n\n.navbar-brand:focus, .navbar-brand:hover {\n  text-decoration: none;\n}\n\n.navbar-nav {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n      flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n\n.navbar-nav .nav-link {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.navbar-nav .dropdown-menu {\n  position: static;\n  float: none;\n}\n\n.navbar-text {\n  display: inline-block;\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n}\n\n.navbar-collapse {\n  -ms-flex-preferred-size: 100%;\n      flex-basis: 100%;\n  -ms-flex-positive: 1;\n      flex-grow: 1;\n  -ms-flex-align: center;\n      align-items: center;\n}\n\n.navbar-toggler {\n  padding: 0.25rem 0.75rem;\n  font-size: 1.25rem;\n  line-height: 1;\n  background: transparent;\n  border: 1px solid transparent;\n  border-radius: 0.25rem;\n}\n\n.navbar-toggler:focus, .navbar-toggler:hover {\n  text-decoration: none;\n}\n\n.navbar-toggler-icon {\n  display: inline-block;\n  width: 1.5em;\n  height: 1.5em;\n  vertical-align: middle;\n  content: \"\";\n  background: no-repeat center center;\n  background-size: 100% 100%;\n}\n\n@media (max-width: 575px) {\n  .navbar-expand-sm > .container,\n  .navbar-expand-sm > .container-fluid {\n    padding-right: 0;\n    padding-left: 0;\n  }\n}\n\n@media (min-width: 576px) {\n  .navbar-expand-sm {\n    -ms-flex-flow: row nowrap;\n        flex-flow: row nowrap;\n    -ms-flex-pack: start;\n        justify-content: flex-start;\n  }\n  .navbar-expand-sm .navbar-nav {\n    -ms-flex-direction: row;\n        flex-direction: row;\n  }\n  .navbar-expand-sm .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-sm .navbar-nav .dropdown-menu-right {\n    right: 0;\n    left: auto;\n  }\n  .navbar-expand-sm .navbar-nav .nav-link {\n    padding-right: .5rem;\n    padding-left: .5rem;\n  }\n  .navbar-expand-sm > .container,\n  .navbar-expand-sm > .container-fluid {\n    -ms-flex-wrap: nowrap;\n        flex-wrap: nowrap;\n  }\n  .navbar-expand-sm .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n        flex-basis: auto;\n  }\n  .navbar-expand-sm .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-sm .dropup .dropdown-menu {\n    top: auto;\n    bottom: 100%;\n  }\n}\n\n@media (max-width: 767px) {\n  .navbar-expand-md > .container,\n  .navbar-expand-md > .container-fluid {\n    padding-right: 0;\n    padding-left: 0;\n  }\n}\n\n@media (min-width: 768px) {\n  .navbar-expand-md {\n    -ms-flex-flow: row nowrap;\n        flex-flow: row nowrap;\n    -ms-flex-pack: start;\n        justify-content: flex-start;\n  }\n  .navbar-expand-md .navbar-nav {\n    -ms-flex-direction: row;\n        flex-direction: row;\n  }\n  .navbar-expand-md .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-md .navbar-nav .dropdown-menu-right {\n    right: 0;\n    left: auto;\n  }\n  .navbar-expand-md .navbar-nav .nav-link {\n    padding-right: .5rem;\n    padding-left: .5rem;\n  }\n  .navbar-expand-md > .container,\n  .navbar-expand-md > .container-fluid {\n    -ms-flex-wrap: nowrap;\n        flex-wrap: nowrap;\n  }\n  .navbar-expand-md .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n        flex-basis: auto;\n  }\n  .navbar-expand-md .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-md .dropup .dropdown-menu {\n    top: auto;\n    bottom: 100%;\n  }\n}\n\n@media (max-width: 991px) {\n  .navbar-expand-lg > .container,\n  .navbar-expand-lg > .container-fluid {\n    padding-right: 0;\n    padding-left: 0;\n  }\n}\n\n@media (min-width: 992px) {\n  .navbar-expand-lg {\n    -ms-flex-flow: row nowrap;\n        flex-flow: row nowrap;\n    -ms-flex-pack: start;\n        justify-content: flex-start;\n  }\n  .navbar-expand-lg .navbar-nav {\n    -ms-flex-direction: row;\n        flex-direction: row;\n  }\n  .navbar-expand-lg .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-lg .navbar-nav .dropdown-menu-right {\n    right: 0;\n    left: auto;\n  }\n  .navbar-expand-lg .navbar-nav .nav-link {\n    padding-right: .5rem;\n    padding-left: .5rem;\n  }\n  .navbar-expand-lg > .container,\n  .navbar-expand-lg > .container-fluid {\n    -ms-flex-wrap: nowrap;\n        flex-wrap: nowrap;\n  }\n  .navbar-expand-lg .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n        flex-basis: auto;\n  }\n  .navbar-expand-lg .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-lg .dropup .dropdown-menu {\n    top: auto;\n    bottom: 100%;\n  }\n}\n\n@media (max-width: 1199px) {\n  .navbar-expand-xl > .container,\n  .navbar-expand-xl > .container-fluid {\n    padding-right: 0;\n    padding-left: 0;\n  }\n}\n\n@media (min-width: 1200px) {\n  .navbar-expand-xl {\n    -ms-flex-flow: row nowrap;\n        flex-flow: row nowrap;\n    -ms-flex-pack: start;\n        justify-content: flex-start;\n  }\n  .navbar-expand-xl .navbar-nav {\n    -ms-flex-direction: row;\n        flex-direction: row;\n  }\n  .navbar-expand-xl .navbar-nav .dropdown-menu {\n    position: absolute;\n  }\n  .navbar-expand-xl .navbar-nav .dropdown-menu-right {\n    right: 0;\n    left: auto;\n  }\n  .navbar-expand-xl .navbar-nav .nav-link {\n    padding-right: .5rem;\n    padding-left: .5rem;\n  }\n  .navbar-expand-xl > .container,\n  .navbar-expand-xl > .container-fluid {\n    -ms-flex-wrap: nowrap;\n        flex-wrap: nowrap;\n  }\n  .navbar-expand-xl .navbar-collapse {\n    display: -ms-flexbox !important;\n    display: flex !important;\n    -ms-flex-preferred-size: auto;\n        flex-basis: auto;\n  }\n  .navbar-expand-xl .navbar-toggler {\n    display: none;\n  }\n  .navbar-expand-xl .dropup .dropdown-menu {\n    top: auto;\n    bottom: 100%;\n  }\n}\n\n.navbar-expand {\n  -ms-flex-flow: row nowrap;\n      flex-flow: row nowrap;\n  -ms-flex-pack: start;\n      justify-content: flex-start;\n}\n\n.navbar-expand > .container,\n.navbar-expand > .container-fluid {\n  padding-right: 0;\n  padding-left: 0;\n}\n\n.navbar-expand .navbar-nav {\n  -ms-flex-direction: row;\n      flex-direction: row;\n}\n\n.navbar-expand .navbar-nav .dropdown-menu {\n  position: absolute;\n}\n\n.navbar-expand .navbar-nav .dropdown-menu-right {\n  right: 0;\n  left: auto;\n}\n\n.navbar-expand .navbar-nav .nav-link {\n  padding-right: .5rem;\n  padding-left: .5rem;\n}\n\n.navbar-expand > .container,\n.navbar-expand > .container-fluid {\n  -ms-flex-wrap: nowrap;\n      flex-wrap: nowrap;\n}\n\n.navbar-expand .navbar-collapse {\n  display: -ms-flexbox !important;\n  display: flex !important;\n  -ms-flex-preferred-size: auto;\n      flex-basis: auto;\n}\n\n.navbar-expand .navbar-toggler {\n  display: none;\n}\n\n.navbar-expand .dropup .dropdown-menu {\n  top: auto;\n  bottom: 100%;\n}\n\n.navbar-light .navbar-brand {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-brand:focus, .navbar-light .navbar-brand:hover {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-nav .nav-link {\n  color: rgba(0, 0, 0, 0.5);\n}\n\n.navbar-light .navbar-nav .nav-link:focus, .navbar-light .navbar-nav .nav-link:hover {\n  color: rgba(0, 0, 0, 0.7);\n}\n\n.navbar-light .navbar-nav .nav-link.disabled {\n  color: rgba(0, 0, 0, 0.3);\n}\n\n.navbar-light .navbar-nav .show > .nav-link,\n.navbar-light .navbar-nav .active > .nav-link,\n.navbar-light .navbar-nav .nav-link.show,\n.navbar-light .navbar-nav .nav-link.active {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-toggler {\n  color: rgba(0, 0, 0, 0.5);\n  border-color: rgba(0, 0, 0, 0.1);\n}\n\n.navbar-light .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\");\n}\n\n.navbar-light .navbar-text {\n  color: rgba(0, 0, 0, 0.5);\n}\n\n.navbar-light .navbar-text a {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-light .navbar-text a:focus, .navbar-light .navbar-text a:hover {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.navbar-dark .navbar-brand {\n  color: #fff;\n}\n\n.navbar-dark .navbar-brand:focus, .navbar-dark .navbar-brand:hover {\n  color: #fff;\n}\n\n.navbar-dark .navbar-nav .nav-link {\n  color: rgba(255, 255, 255, 0.5);\n}\n\n.navbar-dark .navbar-nav .nav-link:focus, .navbar-dark .navbar-nav .nav-link:hover {\n  color: rgba(255, 255, 255, 0.75);\n}\n\n.navbar-dark .navbar-nav .nav-link.disabled {\n  color: rgba(255, 255, 255, 0.25);\n}\n\n.navbar-dark .navbar-nav .show > .nav-link,\n.navbar-dark .navbar-nav .active > .nav-link,\n.navbar-dark .navbar-nav .nav-link.show,\n.navbar-dark .navbar-nav .nav-link.active {\n  color: #fff;\n}\n\n.navbar-dark .navbar-toggler {\n  color: rgba(255, 255, 255, 0.5);\n  border-color: rgba(255, 255, 255, 0.1);\n}\n\n.navbar-dark .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E\");\n}\n\n.navbar-dark .navbar-text {\n  color: rgba(255, 255, 255, 0.5);\n}\n\n.navbar-dark .navbar-text a {\n  color: #fff;\n}\n\n.navbar-dark .navbar-text a:focus, .navbar-dark .navbar-text a:hover {\n  color: #fff;\n}\n\n.card {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n      flex-direction: column;\n  min-width: 0;\n  word-wrap: break-word;\n  background-color: #fff;\n  background-clip: border-box;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n  border-radius: 0.25rem;\n}\n\n.card > hr {\n  margin-right: 0;\n  margin-left: 0;\n}\n\n.card > .list-group:first-child .list-group-item:first-child {\n  border-top-left-radius: 0.25rem;\n  border-top-right-radius: 0.25rem;\n}\n\n.card > .list-group:last-child .list-group-item:last-child {\n  border-bottom-right-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.card-body {\n  -ms-flex: 1 1 auto;\n      flex: 1 1 auto;\n  padding: 1.25rem;\n}\n\n.card-title {\n  margin-bottom: 0.75rem;\n}\n\n.card-subtitle {\n  margin-top: -0.375rem;\n  margin-bottom: 0;\n}\n\n.card-text:last-child {\n  margin-bottom: 0;\n}\n\n.card-link:hover {\n  text-decoration: none;\n}\n\n.card-link + .card-link {\n  margin-left: 1.25rem;\n}\n\n.card-header {\n  padding: 0.75rem 1.25rem;\n  margin-bottom: 0;\n  background-color: rgba(0, 0, 0, 0.03);\n  border-bottom: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-header:first-child {\n  border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0;\n}\n\n.card-header + .list-group .list-group-item:first-child {\n  border-top: 0;\n}\n\n.card-footer {\n  padding: 0.75rem 1.25rem;\n  background-color: rgba(0, 0, 0, 0.03);\n  border-top: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.card-footer:last-child {\n  border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px);\n}\n\n.card-header-tabs {\n  margin-right: -0.625rem;\n  margin-bottom: -0.75rem;\n  margin-left: -0.625rem;\n  border-bottom: 0;\n}\n\n.card-header-pills {\n  margin-right: -0.625rem;\n  margin-left: -0.625rem;\n}\n\n.card-img-overlay {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  padding: 1.25rem;\n}\n\n.card-img {\n  width: 100%;\n  border-radius: calc(0.25rem - 1px);\n}\n\n.card-img-top {\n  width: 100%;\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px);\n}\n\n.card-img-bottom {\n  width: 100%;\n  border-bottom-right-radius: calc(0.25rem - 1px);\n  border-bottom-left-radius: calc(0.25rem - 1px);\n}\n\n.card-deck {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n      flex-direction: column;\n}\n\n.card-deck .card {\n  margin-bottom: 15px;\n}\n\n@media (min-width: 576px) {\n  .card-deck {\n    -ms-flex-flow: row wrap;\n        flex-flow: row wrap;\n    margin-right: -15px;\n    margin-left: -15px;\n  }\n  .card-deck .card {\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex: 1 0 0%;\n        flex: 1 0 0%;\n    -ms-flex-direction: column;\n        flex-direction: column;\n    margin-right: 15px;\n    margin-bottom: 0;\n    margin-left: 15px;\n  }\n}\n\n.card-group {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n      flex-direction: column;\n}\n\n.card-group .card {\n  margin-bottom: 15px;\n}\n\n@media (min-width: 576px) {\n  .card-group {\n    -ms-flex-flow: row wrap;\n        flex-flow: row wrap;\n  }\n  .card-group .card {\n    -ms-flex: 1 0 0%;\n        flex: 1 0 0%;\n    margin-bottom: 0;\n  }\n  .card-group .card + .card {\n    margin-left: 0;\n    border-left: 0;\n  }\n  .card-group .card:first-child {\n    border-top-right-radius: 0;\n    border-bottom-right-radius: 0;\n  }\n  .card-group .card:first-child .card-img-top {\n    border-top-right-radius: 0;\n  }\n  .card-group .card:first-child .card-img-bottom {\n    border-bottom-right-radius: 0;\n  }\n  .card-group .card:last-child {\n    border-top-left-radius: 0;\n    border-bottom-left-radius: 0;\n  }\n  .card-group .card:last-child .card-img-top {\n    border-top-left-radius: 0;\n  }\n  .card-group .card:last-child .card-img-bottom {\n    border-bottom-left-radius: 0;\n  }\n  .card-group .card:only-child {\n    border-radius: 0.25rem;\n  }\n  .card-group .card:only-child .card-img-top {\n    border-top-left-radius: 0.25rem;\n    border-top-right-radius: 0.25rem;\n  }\n  .card-group .card:only-child .card-img-bottom {\n    border-bottom-right-radius: 0.25rem;\n    border-bottom-left-radius: 0.25rem;\n  }\n  .card-group .card:not(:first-child):not(:last-child):not(:only-child) {\n    border-radius: 0;\n  }\n  .card-group .card:not(:first-child):not(:last-child):not(:only-child) .card-img-top,\n  .card-group .card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom {\n    border-radius: 0;\n  }\n}\n\n.card-columns .card {\n  margin-bottom: 0.75rem;\n}\n\n@media (min-width: 576px) {\n  .card-columns {\n    -webkit-column-count: 3;\n            column-count: 3;\n    -webkit-column-gap: 1.25rem;\n            column-gap: 1.25rem;\n  }\n  .card-columns .card {\n    display: inline-block;\n    width: 100%;\n  }\n}\n\n.breadcrumb {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap;\n  padding: 0.75rem 1rem;\n  margin-bottom: 1rem;\n  list-style: none;\n  background-color: #e9ecef;\n  border-radius: 0.25rem;\n}\n\n.breadcrumb-item + .breadcrumb-item::before {\n  display: inline-block;\n  padding-right: 0.5rem;\n  padding-left: 0.5rem;\n  color: #868e96;\n  content: \"/\";\n}\n\n.breadcrumb-item + .breadcrumb-item:hover::before {\n  text-decoration: underline;\n}\n\n.breadcrumb-item + .breadcrumb-item:hover::before {\n  text-decoration: none;\n}\n\n.breadcrumb-item.active {\n  color: #868e96;\n}\n\n.pagination {\n  display: -ms-flexbox;\n  display: flex;\n  padding-left: 0;\n  list-style: none;\n  border-radius: 0.25rem;\n}\n\n.page-item:first-child .page-link {\n  margin-left: 0;\n  border-top-left-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.page-item:last-child .page-link {\n  border-top-right-radius: 0.25rem;\n  border-bottom-right-radius: 0.25rem;\n}\n\n.page-item.active .page-link {\n  z-index: 2;\n  color: #fff;\n  background-color: #007bff;\n  border-color: #007bff;\n}\n\n.page-item.disabled .page-link {\n  color: #868e96;\n  pointer-events: none;\n  background-color: #fff;\n  border-color: #ddd;\n}\n\n.page-link {\n  position: relative;\n  display: block;\n  padding: 0.5rem 0.75rem;\n  margin-left: -1px;\n  line-height: 1.25;\n  color: #007bff;\n  background-color: #fff;\n  border: 1px solid #ddd;\n}\n\n.page-link:focus, .page-link:hover {\n  color: #0056b3;\n  text-decoration: none;\n  background-color: #e9ecef;\n  border-color: #ddd;\n}\n\n.pagination-lg .page-link {\n  padding: 0.75rem 1.5rem;\n  font-size: 1.25rem;\n  line-height: 1.5;\n}\n\n.pagination-lg .page-item:first-child .page-link {\n  border-top-left-radius: 0.3rem;\n  border-bottom-left-radius: 0.3rem;\n}\n\n.pagination-lg .page-item:last-child .page-link {\n  border-top-right-radius: 0.3rem;\n  border-bottom-right-radius: 0.3rem;\n}\n\n.pagination-sm .page-link {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  line-height: 1.5;\n}\n\n.pagination-sm .page-item:first-child .page-link {\n  border-top-left-radius: 0.2rem;\n  border-bottom-left-radius: 0.2rem;\n}\n\n.pagination-sm .page-item:last-child .page-link {\n  border-top-right-radius: 0.2rem;\n  border-bottom-right-radius: 0.2rem;\n}\n\n.badge {\n  display: inline-block;\n  padding: 0.25em 0.4em;\n  font-size: 75%;\n  font-weight: 700;\n  line-height: 1;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: 0.25rem;\n}\n\n.badge:empty {\n  display: none;\n}\n\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n\n.badge-pill {\n  padding-right: 0.6em;\n  padding-left: 0.6em;\n  border-radius: 10rem;\n}\n\n.badge-primary {\n  color: #fff;\n  background-color: #007bff;\n}\n\n.badge-primary[href]:focus, .badge-primary[href]:hover {\n  color: #fff;\n  text-decoration: none;\n  background-color: #0062cc;\n}\n\n.badge-secondary {\n  color: #fff;\n  background-color: #868e96;\n}\n\n.badge-secondary[href]:focus, .badge-secondary[href]:hover {\n  color: #fff;\n  text-decoration: none;\n  background-color: #6c757d;\n}\n\n.badge-success {\n  color: #fff;\n  background-color: #28a745;\n}\n\n.badge-success[href]:focus, .badge-success[href]:hover {\n  color: #fff;\n  text-decoration: none;\n  background-color: #1e7e34;\n}\n\n.badge-info {\n  color: #fff;\n  background-color: #17a2b8;\n}\n\n.badge-info[href]:focus, .badge-info[href]:hover {\n  color: #fff;\n  text-decoration: none;\n  background-color: #117a8b;\n}\n\n.badge-warning {\n  color: #111;\n  background-color: #ffc107;\n}\n\n.badge-warning[href]:focus, .badge-warning[href]:hover {\n  color: #111;\n  text-decoration: none;\n  background-color: #d39e00;\n}\n\n.badge-danger {\n  color: #fff;\n  background-color: #dc3545;\n}\n\n.badge-danger[href]:focus, .badge-danger[href]:hover {\n  color: #fff;\n  text-decoration: none;\n  background-color: #bd2130;\n}\n\n.badge-light {\n  color: #111;\n  background-color: #f8f9fa;\n}\n\n.badge-light[href]:focus, .badge-light[href]:hover {\n  color: #111;\n  text-decoration: none;\n  background-color: #dae0e5;\n}\n\n.badge-dark {\n  color: #fff;\n  background-color: #343a40;\n}\n\n.badge-dark[href]:focus, .badge-dark[href]:hover {\n  color: #fff;\n  text-decoration: none;\n  background-color: #1d2124;\n}\n\n.jumbotron {\n  padding: 2rem 1rem;\n  margin-bottom: 2rem;\n  background-color: #e9ecef;\n  border-radius: 0.3rem;\n}\n\n@media (min-width: 576px) {\n  .jumbotron {\n    padding: 4rem 2rem;\n  }\n}\n\n.jumbotron-fluid {\n  padding-right: 0;\n  padding-left: 0;\n  border-radius: 0;\n}\n\n.alert {\n  position: relative;\n  padding: 0.75rem 1.25rem;\n  margin-bottom: 1rem;\n  border: 1px solid transparent;\n  border-radius: 0.25rem;\n}\n\n.alert-heading {\n  color: inherit;\n}\n\n.alert-link {\n  font-weight: 700;\n}\n\n.alert-dismissible .close {\n  position: absolute;\n  top: 0;\n  right: 0;\n  padding: 0.75rem 1.25rem;\n  color: inherit;\n}\n\n.alert-primary {\n  color: #004085;\n  background-color: #cce5ff;\n  border-color: #b8daff;\n}\n\n.alert-primary hr {\n  border-top-color: #9fcdff;\n}\n\n.alert-primary .alert-link {\n  color: #002752;\n}\n\n.alert-secondary {\n  color: #464a4e;\n  background-color: #e7e8ea;\n  border-color: #dddfe2;\n}\n\n.alert-secondary hr {\n  border-top-color: #cfd2d6;\n}\n\n.alert-secondary .alert-link {\n  color: #2e3133;\n}\n\n.alert-success {\n  color: #155724;\n  background-color: #d4edda;\n  border-color: #c3e6cb;\n}\n\n.alert-success hr {\n  border-top-color: #b1dfbb;\n}\n\n.alert-success .alert-link {\n  color: #0b2e13;\n}\n\n.alert-info {\n  color: #0c5460;\n  background-color: #d1ecf1;\n  border-color: #bee5eb;\n}\n\n.alert-info hr {\n  border-top-color: #abdde5;\n}\n\n.alert-info .alert-link {\n  color: #062c33;\n}\n\n.alert-warning {\n  color: #856404;\n  background-color: #fff3cd;\n  border-color: #ffeeba;\n}\n\n.alert-warning hr {\n  border-top-color: #ffe8a1;\n}\n\n.alert-warning .alert-link {\n  color: #533f03;\n}\n\n.alert-danger {\n  color: #721c24;\n  background-color: #f8d7da;\n  border-color: #f5c6cb;\n}\n\n.alert-danger hr {\n  border-top-color: #f1b0b7;\n}\n\n.alert-danger .alert-link {\n  color: #491217;\n}\n\n.alert-light {\n  color: #818182;\n  background-color: #fefefe;\n  border-color: #fdfdfe;\n}\n\n.alert-light hr {\n  border-top-color: #ececf6;\n}\n\n.alert-light .alert-link {\n  color: #686868;\n}\n\n.alert-dark {\n  color: #1b1e21;\n  background-color: #d6d8d9;\n  border-color: #c6c8ca;\n}\n\n.alert-dark hr {\n  border-top-color: #b9bbbe;\n}\n\n.alert-dark .alert-link {\n  color: #040505;\n}\n\n@-webkit-keyframes progress-bar-stripes {\n  from {\n    background-position: 1rem 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n\n@keyframes progress-bar-stripes {\n  from {\n    background-position: 1rem 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n\n.progress {\n  display: -ms-flexbox;\n  display: flex;\n  height: 1rem;\n  overflow: hidden;\n  font-size: 0.75rem;\n  background-color: #e9ecef;\n  border-radius: 0.25rem;\n}\n\n.progress-bar {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n      align-items: center;\n  -ms-flex-pack: center;\n      justify-content: center;\n  color: #fff;\n  background-color: #007bff;\n}\n\n.progress-bar-striped {\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: 1rem 1rem;\n}\n\n.progress-bar-animated {\n  -webkit-animation: progress-bar-stripes 1s linear infinite;\n          animation: progress-bar-stripes 1s linear infinite;\n}\n\n.media {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: start;\n      align-items: flex-start;\n}\n\n.media-body {\n  -ms-flex: 1;\n      flex: 1;\n}\n\n.list-group {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n      flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n}\n\n.list-group-item-action {\n  width: 100%;\n  color: #495057;\n  text-align: inherit;\n}\n\n.list-group-item-action:focus, .list-group-item-action:hover {\n  color: #495057;\n  text-decoration: none;\n  background-color: #f8f9fa;\n}\n\n.list-group-item-action:active {\n  color: #212529;\n  background-color: #e9ecef;\n}\n\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 0.75rem 1.25rem;\n  margin-bottom: -1px;\n  background-color: #fff;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n}\n\n.list-group-item:first-child {\n  border-top-left-radius: 0.25rem;\n  border-top-right-radius: 0.25rem;\n}\n\n.list-group-item:last-child {\n  margin-bottom: 0;\n  border-bottom-right-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem;\n}\n\n.list-group-item:focus, .list-group-item:hover {\n  text-decoration: none;\n}\n\n.list-group-item.disabled, .list-group-item:disabled {\n  color: #868e96;\n  background-color: #fff;\n}\n\n.list-group-item.active {\n  z-index: 2;\n  color: #fff;\n  background-color: #007bff;\n  border-color: #007bff;\n}\n\n.list-group-flush .list-group-item {\n  border-right: 0;\n  border-left: 0;\n  border-radius: 0;\n}\n\n.list-group-flush:first-child .list-group-item:first-child {\n  border-top: 0;\n}\n\n.list-group-flush:last-child .list-group-item:last-child {\n  border-bottom: 0;\n}\n\n.list-group-item-primary {\n  color: #004085;\n  background-color: #b8daff;\n}\n\na.list-group-item-primary,\nbutton.list-group-item-primary {\n  color: #004085;\n}\n\na.list-group-item-primary:focus, a.list-group-item-primary:hover,\nbutton.list-group-item-primary:focus,\nbutton.list-group-item-primary:hover {\n  color: #004085;\n  background-color: #9fcdff;\n}\n\na.list-group-item-primary.active,\nbutton.list-group-item-primary.active {\n  color: #fff;\n  background-color: #004085;\n  border-color: #004085;\n}\n\n.list-group-item-secondary {\n  color: #464a4e;\n  background-color: #dddfe2;\n}\n\na.list-group-item-secondary,\nbutton.list-group-item-secondary {\n  color: #464a4e;\n}\n\na.list-group-item-secondary:focus, a.list-group-item-secondary:hover,\nbutton.list-group-item-secondary:focus,\nbutton.list-group-item-secondary:hover {\n  color: #464a4e;\n  background-color: #cfd2d6;\n}\n\na.list-group-item-secondary.active,\nbutton.list-group-item-secondary.active {\n  color: #fff;\n  background-color: #464a4e;\n  border-color: #464a4e;\n}\n\n.list-group-item-success {\n  color: #155724;\n  background-color: #c3e6cb;\n}\n\na.list-group-item-success,\nbutton.list-group-item-success {\n  color: #155724;\n}\n\na.list-group-item-success:focus, a.list-group-item-success:hover,\nbutton.list-group-item-success:focus,\nbutton.list-group-item-success:hover {\n  color: #155724;\n  background-color: #b1dfbb;\n}\n\na.list-group-item-success.active,\nbutton.list-group-item-success.active {\n  color: #fff;\n  background-color: #155724;\n  border-color: #155724;\n}\n\n.list-group-item-info {\n  color: #0c5460;\n  background-color: #bee5eb;\n}\n\na.list-group-item-info,\nbutton.list-group-item-info {\n  color: #0c5460;\n}\n\na.list-group-item-info:focus, a.list-group-item-info:hover,\nbutton.list-group-item-info:focus,\nbutton.list-group-item-info:hover {\n  color: #0c5460;\n  background-color: #abdde5;\n}\n\na.list-group-item-info.active,\nbutton.list-group-item-info.active {\n  color: #fff;\n  background-color: #0c5460;\n  border-color: #0c5460;\n}\n\n.list-group-item-warning {\n  color: #856404;\n  background-color: #ffeeba;\n}\n\na.list-group-item-warning,\nbutton.list-group-item-warning {\n  color: #856404;\n}\n\na.list-group-item-warning:focus, a.list-group-item-warning:hover,\nbutton.list-group-item-warning:focus,\nbutton.list-group-item-warning:hover {\n  color: #856404;\n  background-color: #ffe8a1;\n}\n\na.list-group-item-warning.active,\nbutton.list-group-item-warning.active {\n  color: #fff;\n  background-color: #856404;\n  border-color: #856404;\n}\n\n.list-group-item-danger {\n  color: #721c24;\n  background-color: #f5c6cb;\n}\n\na.list-group-item-danger,\nbutton.list-group-item-danger {\n  color: #721c24;\n}\n\na.list-group-item-danger:focus, a.list-group-item-danger:hover,\nbutton.list-group-item-danger:focus,\nbutton.list-group-item-danger:hover {\n  color: #721c24;\n  background-color: #f1b0b7;\n}\n\na.list-group-item-danger.active,\nbutton.list-group-item-danger.active {\n  color: #fff;\n  background-color: #721c24;\n  border-color: #721c24;\n}\n\n.list-group-item-light {\n  color: #818182;\n  background-color: #fdfdfe;\n}\n\na.list-group-item-light,\nbutton.list-group-item-light {\n  color: #818182;\n}\n\na.list-group-item-light:focus, a.list-group-item-light:hover,\nbutton.list-group-item-light:focus,\nbutton.list-group-item-light:hover {\n  color: #818182;\n  background-color: #ececf6;\n}\n\na.list-group-item-light.active,\nbutton.list-group-item-light.active {\n  color: #fff;\n  background-color: #818182;\n  border-color: #818182;\n}\n\n.list-group-item-dark {\n  color: #1b1e21;\n  background-color: #c6c8ca;\n}\n\na.list-group-item-dark,\nbutton.list-group-item-dark {\n  color: #1b1e21;\n}\n\na.list-group-item-dark:focus, a.list-group-item-dark:hover,\nbutton.list-group-item-dark:focus,\nbutton.list-group-item-dark:hover {\n  color: #1b1e21;\n  background-color: #b9bbbe;\n}\n\na.list-group-item-dark.active,\nbutton.list-group-item-dark.active {\n  color: #fff;\n  background-color: #1b1e21;\n  border-color: #1b1e21;\n}\n\n.close {\n  float: right;\n  font-size: 1.5rem;\n  font-weight: 700;\n  line-height: 1;\n  color: #000;\n  text-shadow: 0 1px 0 #fff;\n  opacity: .5;\n}\n\n.close:focus, .close:hover {\n  color: #000;\n  text-decoration: none;\n  opacity: .75;\n}\n\nbutton.close {\n  padding: 0;\n  background: transparent;\n  border: 0;\n  -webkit-appearance: none;\n}\n\n.modal-open {\n  overflow: hidden;\n}\n\n.modal {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1050;\n  display: none;\n  overflow: hidden;\n  outline: 0;\n}\n\n.modal.fade .modal-dialog {\n  transition: -webkit-transform 0.3s ease-out;\n  transition: transform 0.3s ease-out;\n  transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out;\n  -webkit-transform: translate(0, -25%);\n          transform: translate(0, -25%);\n}\n\n.modal.show .modal-dialog {\n  -webkit-transform: translate(0, 0);\n          transform: translate(0, 0);\n}\n\n.modal-open .modal {\n  overflow-x: hidden;\n  overflow-y: auto;\n}\n\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 10px;\n  pointer-events: none;\n}\n\n.modal-content {\n  position: relative;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-direction: column;\n      flex-direction: column;\n  pointer-events: auto;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 0.3rem;\n  outline: 0;\n}\n\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1040;\n  background-color: #000;\n}\n\n.modal-backdrop.fade {\n  opacity: 0;\n}\n\n.modal-backdrop.show {\n  opacity: 0.5;\n}\n\n.modal-header {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: start;\n      align-items: flex-start;\n  -ms-flex-pack: justify;\n      justify-content: space-between;\n  padding: 15px;\n  border-bottom: 1px solid #e9ecef;\n  border-top-left-radius: 0.3rem;\n  border-top-right-radius: 0.3rem;\n}\n\n.modal-header .close {\n  padding: 15px;\n  margin: -15px -15px -15px auto;\n}\n\n.modal-title {\n  margin-bottom: 0;\n  line-height: 1.5;\n}\n\n.modal-body {\n  position: relative;\n  -ms-flex: 1 1 auto;\n      flex: 1 1 auto;\n  padding: 15px;\n}\n\n.modal-footer {\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n      align-items: center;\n  -ms-flex-pack: end;\n      justify-content: flex-end;\n  padding: 15px;\n  border-top: 1px solid #e9ecef;\n}\n\n.modal-footer > :not(:first-child) {\n  margin-left: .25rem;\n}\n\n.modal-footer > :not(:last-child) {\n  margin-right: .25rem;\n}\n\n.modal-scrollbar-measure {\n  position: absolute;\n  top: -9999px;\n  width: 50px;\n  height: 50px;\n  overflow: scroll;\n}\n\n@media (min-width: 576px) {\n  .modal-dialog {\n    max-width: 500px;\n    margin: 30px auto;\n  }\n  .modal-sm {\n    max-width: 300px;\n  }\n}\n\n@media (min-width: 992px) {\n  .modal-lg {\n    max-width: 800px;\n  }\n}\n\n.tooltip {\n  position: absolute;\n  z-index: 1070;\n  display: block;\n  margin: 0;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.875rem;\n  word-wrap: break-word;\n  opacity: 0;\n}\n\n.tooltip.show {\n  opacity: 0.9;\n}\n\n.tooltip .arrow {\n  position: absolute;\n  display: block;\n  width: 5px;\n  height: 5px;\n}\n\n.tooltip .arrow::before {\n  position: absolute;\n  border-color: transparent;\n  border-style: solid;\n}\n\n.tooltip.bs-tooltip-top, .tooltip.bs-tooltip-auto[x-placement^=\"top\"] {\n  padding: 5px 0;\n}\n\n.tooltip.bs-tooltip-top .arrow, .tooltip.bs-tooltip-auto[x-placement^=\"top\"] .arrow {\n  bottom: 0;\n}\n\n.tooltip.bs-tooltip-top .arrow::before, .tooltip.bs-tooltip-auto[x-placement^=\"top\"] .arrow::before {\n  margin-left: -3px;\n  content: \"\";\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n\n.tooltip.bs-tooltip-right, .tooltip.bs-tooltip-auto[x-placement^=\"right\"] {\n  padding: 0 5px;\n}\n\n.tooltip.bs-tooltip-right .arrow, .tooltip.bs-tooltip-auto[x-placement^=\"right\"] .arrow {\n  left: 0;\n}\n\n.tooltip.bs-tooltip-right .arrow::before, .tooltip.bs-tooltip-auto[x-placement^=\"right\"] .arrow::before {\n  margin-top: -3px;\n  content: \"\";\n  border-width: 5px 5px 5px 0;\n  border-right-color: #000;\n}\n\n.tooltip.bs-tooltip-bottom, .tooltip.bs-tooltip-auto[x-placement^=\"bottom\"] {\n  padding: 5px 0;\n}\n\n.tooltip.bs-tooltip-bottom .arrow, .tooltip.bs-tooltip-auto[x-placement^=\"bottom\"] .arrow {\n  top: 0;\n}\n\n.tooltip.bs-tooltip-bottom .arrow::before, .tooltip.bs-tooltip-auto[x-placement^=\"bottom\"] .arrow::before {\n  margin-left: -3px;\n  content: \"\";\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n\n.tooltip.bs-tooltip-left, .tooltip.bs-tooltip-auto[x-placement^=\"left\"] {\n  padding: 0 5px;\n}\n\n.tooltip.bs-tooltip-left .arrow, .tooltip.bs-tooltip-auto[x-placement^=\"left\"] .arrow {\n  right: 0;\n}\n\n.tooltip.bs-tooltip-left .arrow::before, .tooltip.bs-tooltip-auto[x-placement^=\"left\"] .arrow::before {\n  right: 0;\n  margin-top: -3px;\n  content: \"\";\n  border-width: 5px 0 5px 5px;\n  border-left-color: #000;\n}\n\n.tooltip-inner {\n  max-width: 200px;\n  padding: 3px 8px;\n  color: #fff;\n  text-align: center;\n  background-color: #000;\n  border-radius: 0.25rem;\n}\n\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 1060;\n  display: block;\n  max-width: 276px;\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.875rem;\n  word-wrap: break-word;\n  background-color: #fff;\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 0.3rem;\n}\n\n.popover .arrow {\n  position: absolute;\n  display: block;\n  width: 0.8rem;\n  height: 0.4rem;\n}\n\n.popover .arrow::before,\n.popover .arrow::after {\n  position: absolute;\n  display: block;\n  border-color: transparent;\n  border-style: solid;\n}\n\n.popover .arrow::before {\n  content: \"\";\n  border-width: 0.8rem;\n}\n\n.popover .arrow::after {\n  content: \"\";\n  border-width: 0.8rem;\n}\n\n.popover.bs-popover-top, .popover.bs-popover-auto[x-placement^=\"top\"] {\n  margin-bottom: 0.8rem;\n}\n\n.popover.bs-popover-top .arrow, .popover.bs-popover-auto[x-placement^=\"top\"] .arrow {\n  bottom: 0;\n}\n\n.popover.bs-popover-top .arrow::before, .popover.bs-popover-auto[x-placement^=\"top\"] .arrow::before,\n.popover.bs-popover-top .arrow::after, .popover.bs-popover-auto[x-placement^=\"top\"] .arrow::after {\n  border-bottom-width: 0;\n}\n\n.popover.bs-popover-top .arrow::before, .popover.bs-popover-auto[x-placement^=\"top\"] .arrow::before {\n  bottom: -0.8rem;\n  margin-left: -0.8rem;\n  border-top-color: rgba(0, 0, 0, 0.25);\n}\n\n.popover.bs-popover-top .arrow::after, .popover.bs-popover-auto[x-placement^=\"top\"] .arrow::after {\n  bottom: calc((0.8rem - 1px) * -1);\n  margin-left: -0.8rem;\n  border-top-color: #fff;\n}\n\n.popover.bs-popover-right, .popover.bs-popover-auto[x-placement^=\"right\"] {\n  margin-left: 0.8rem;\n}\n\n.popover.bs-popover-right .arrow, .popover.bs-popover-auto[x-placement^=\"right\"] .arrow {\n  left: 0;\n}\n\n.popover.bs-popover-right .arrow::before, .popover.bs-popover-auto[x-placement^=\"right\"] .arrow::before,\n.popover.bs-popover-right .arrow::after, .popover.bs-popover-auto[x-placement^=\"right\"] .arrow::after {\n  margin-top: -0.8rem;\n  border-left-width: 0;\n}\n\n.popover.bs-popover-right .arrow::before, .popover.bs-popover-auto[x-placement^=\"right\"] .arrow::before {\n  left: -0.8rem;\n  border-right-color: rgba(0, 0, 0, 0.25);\n}\n\n.popover.bs-popover-right .arrow::after, .popover.bs-popover-auto[x-placement^=\"right\"] .arrow::after {\n  left: calc((0.8rem - 1px) * -1);\n  border-right-color: #fff;\n}\n\n.popover.bs-popover-bottom, .popover.bs-popover-auto[x-placement^=\"bottom\"] {\n  margin-top: 0.8rem;\n}\n\n.popover.bs-popover-bottom .arrow, .popover.bs-popover-auto[x-placement^=\"bottom\"] .arrow {\n  top: 0;\n}\n\n.popover.bs-popover-bottom .arrow::before, .popover.bs-popover-auto[x-placement^=\"bottom\"] .arrow::before,\n.popover.bs-popover-bottom .arrow::after, .popover.bs-popover-auto[x-placement^=\"bottom\"] .arrow::after {\n  margin-left: -0.8rem;\n  border-top-width: 0;\n}\n\n.popover.bs-popover-bottom .arrow::before, .popover.bs-popover-auto[x-placement^=\"bottom\"] .arrow::before {\n  top: -0.8rem;\n  border-bottom-color: rgba(0, 0, 0, 0.25);\n}\n\n.popover.bs-popover-bottom .arrow::after, .popover.bs-popover-auto[x-placement^=\"bottom\"] .arrow::after {\n  top: calc((0.8rem - 1px) * -1);\n  border-bottom-color: #fff;\n}\n\n.popover.bs-popover-bottom .popover-header::before, .popover.bs-popover-auto[x-placement^=\"bottom\"] .popover-header::before {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  display: block;\n  width: 20px;\n  margin-left: -10px;\n  content: \"\";\n  border-bottom: 1px solid #f7f7f7;\n}\n\n.popover.bs-popover-left, .popover.bs-popover-auto[x-placement^=\"left\"] {\n  margin-right: 0.8rem;\n}\n\n.popover.bs-popover-left .arrow, .popover.bs-popover-auto[x-placement^=\"left\"] .arrow {\n  right: 0;\n}\n\n.popover.bs-popover-left .arrow::before, .popover.bs-popover-auto[x-placement^=\"left\"] .arrow::before,\n.popover.bs-popover-left .arrow::after, .popover.bs-popover-auto[x-placement^=\"left\"] .arrow::after {\n  margin-top: -0.8rem;\n  border-right-width: 0;\n}\n\n.popover.bs-popover-left .arrow::before, .popover.bs-popover-auto[x-placement^=\"left\"] .arrow::before {\n  right: -0.8rem;\n  border-left-color: rgba(0, 0, 0, 0.25);\n}\n\n.popover.bs-popover-left .arrow::after, .popover.bs-popover-auto[x-placement^=\"left\"] .arrow::after {\n  right: calc((0.8rem - 1px) * -1);\n  border-left-color: #fff;\n}\n\n.popover-header {\n  padding: 0.5rem 0.75rem;\n  margin-bottom: 0;\n  font-size: 1rem;\n  color: inherit;\n  background-color: #f7f7f7;\n  border-bottom: 1px solid #ebebeb;\n  border-top-left-radius: calc(0.3rem - 1px);\n  border-top-right-radius: calc(0.3rem - 1px);\n}\n\n.popover-header:empty {\n  display: none;\n}\n\n.popover-body {\n  padding: 0.5rem 0.75rem;\n  color: #212529;\n}\n\n.carousel {\n  position: relative;\n}\n\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n\n.carousel-item {\n  position: relative;\n  display: none;\n  -ms-flex-align: center;\n      align-items: center;\n  width: 100%;\n  transition: -webkit-transform 0.6s ease;\n  transition: transform 0.6s ease;\n  transition: transform 0.6s ease, -webkit-transform 0.6s ease;\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n  -webkit-perspective: 1000px;\n          perspective: 1000px;\n}\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n  display: block;\n}\n\n.carousel-item-next,\n.carousel-item-prev {\n  position: absolute;\n  top: 0;\n}\n\n.carousel-item-next.carousel-item-left,\n.carousel-item-prev.carousel-item-right {\n  -webkit-transform: translateX(0);\n          transform: translateX(0);\n}\n\n@supports ((-webkit-transform-style: preserve-3d) or (transform-style: preserve-3d)) {\n  .carousel-item-next.carousel-item-left,\n  .carousel-item-prev.carousel-item-right {\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0);\n  }\n}\n\n.carousel-item-next,\n.active.carousel-item-right {\n  -webkit-transform: translateX(100%);\n          transform: translateX(100%);\n}\n\n@supports ((-webkit-transform-style: preserve-3d) or (transform-style: preserve-3d)) {\n  .carousel-item-next,\n  .active.carousel-item-right {\n    -webkit-transform: translate3d(100%, 0, 0);\n            transform: translate3d(100%, 0, 0);\n  }\n}\n\n.carousel-item-prev,\n.active.carousel-item-left {\n  -webkit-transform: translateX(-100%);\n          transform: translateX(-100%);\n}\n\n@supports ((-webkit-transform-style: preserve-3d) or (transform-style: preserve-3d)) {\n  .carousel-item-prev,\n  .active.carousel-item-left {\n    -webkit-transform: translate3d(-100%, 0, 0);\n            transform: translate3d(-100%, 0, 0);\n  }\n}\n\n.carousel-control-prev,\n.carousel-control-next {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-align: center;\n      align-items: center;\n  -ms-flex-pack: center;\n      justify-content: center;\n  width: 15%;\n  color: #fff;\n  text-align: center;\n  opacity: 0.5;\n}\n\n.carousel-control-prev:focus, .carousel-control-prev:hover,\n.carousel-control-next:focus,\n.carousel-control-next:hover {\n  color: #fff;\n  text-decoration: none;\n  outline: 0;\n  opacity: .9;\n}\n\n.carousel-control-prev {\n  left: 0;\n}\n\n.carousel-control-next {\n  right: 0;\n}\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n  display: inline-block;\n  width: 20px;\n  height: 20px;\n  background: transparent no-repeat center center;\n  background-size: 100% 100%;\n}\n\n.carousel-control-prev-icon {\n  background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E\");\n}\n\n.carousel-control-next-icon {\n  background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E\");\n}\n\n.carousel-indicators {\n  position: absolute;\n  right: 0;\n  bottom: 10px;\n  left: 0;\n  z-index: 15;\n  display: -ms-flexbox;\n  display: flex;\n  -ms-flex-pack: center;\n      justify-content: center;\n  padding-left: 0;\n  margin-right: 15%;\n  margin-left: 15%;\n  list-style: none;\n}\n\n.carousel-indicators li {\n  position: relative;\n  -ms-flex: 0 1 auto;\n      flex: 0 1 auto;\n  width: 30px;\n  height: 3px;\n  margin-right: 3px;\n  margin-left: 3px;\n  text-indent: -999px;\n  background-color: rgba(255, 255, 255, 0.5);\n}\n\n.carousel-indicators li::before {\n  position: absolute;\n  top: -10px;\n  left: 0;\n  display: inline-block;\n  width: 100%;\n  height: 10px;\n  content: \"\";\n}\n\n.carousel-indicators li::after {\n  position: absolute;\n  bottom: -10px;\n  left: 0;\n  display: inline-block;\n  width: 100%;\n  height: 10px;\n  content: \"\";\n}\n\n.carousel-indicators .active {\n  background-color: #fff;\n}\n\n.carousel-caption {\n  position: absolute;\n  right: 15%;\n  bottom: 20px;\n  left: 15%;\n  z-index: 10;\n  padding-top: 20px;\n  padding-bottom: 20px;\n  color: #fff;\n  text-align: center;\n}\n\n.align-baseline {\n  vertical-align: baseline !important;\n}\n\n.align-top {\n  vertical-align: top !important;\n}\n\n.align-middle {\n  vertical-align: middle !important;\n}\n\n.align-bottom {\n  vertical-align: bottom !important;\n}\n\n.align-text-bottom {\n  vertical-align: text-bottom !important;\n}\n\n.align-text-top {\n  vertical-align: text-top !important;\n}\n\n.bg-primary {\n  background-color: #007bff !important;\n}\n\na.bg-primary:focus, a.bg-primary:hover {\n  background-color: #0062cc !important;\n}\n\n.bg-secondary {\n  background-color: #868e96 !important;\n}\n\na.bg-secondary:focus, a.bg-secondary:hover {\n  background-color: #6c757d !important;\n}\n\n.bg-success {\n  background-color: #28a745 !important;\n}\n\na.bg-success:focus, a.bg-success:hover {\n  background-color: #1e7e34 !important;\n}\n\n.bg-info {\n  background-color: #17a2b8 !important;\n}\n\na.bg-info:focus, a.bg-info:hover {\n  background-color: #117a8b !important;\n}\n\n.bg-warning {\n  background-color: #ffc107 !important;\n}\n\na.bg-warning:focus, a.bg-warning:hover {\n  background-color: #d39e00 !important;\n}\n\n.bg-danger {\n  background-color: #dc3545 !important;\n}\n\na.bg-danger:focus, a.bg-danger:hover {\n  background-color: #bd2130 !important;\n}\n\n.bg-light {\n  background-color: #f8f9fa !important;\n}\n\na.bg-light:focus, a.bg-light:hover {\n  background-color: #dae0e5 !important;\n}\n\n.bg-dark {\n  background-color: #343a40 !important;\n}\n\na.bg-dark:focus, a.bg-dark:hover {\n  background-color: #1d2124 !important;\n}\n\n.bg-white {\n  background-color: #fff !important;\n}\n\n.bg-transparent {\n  background-color: transparent !important;\n}\n\n.border {\n  border: 1px solid #e9ecef !important;\n}\n\n.border-0 {\n  border: 0 !important;\n}\n\n.border-top-0 {\n  border-top: 0 !important;\n}\n\n.border-right-0 {\n  border-right: 0 !important;\n}\n\n.border-bottom-0 {\n  border-bottom: 0 !important;\n}\n\n.border-left-0 {\n  border-left: 0 !important;\n}\n\n.border-primary {\n  border-color: #007bff !important;\n}\n\n.border-secondary {\n  border-color: #868e96 !important;\n}\n\n.border-success {\n  border-color: #28a745 !important;\n}\n\n.border-info {\n  border-color: #17a2b8 !important;\n}\n\n.border-warning {\n  border-color: #ffc107 !important;\n}\n\n.border-danger {\n  border-color: #dc3545 !important;\n}\n\n.border-light {\n  border-color: #f8f9fa !important;\n}\n\n.border-dark {\n  border-color: #343a40 !important;\n}\n\n.border-white {\n  border-color: #fff !important;\n}\n\n.rounded {\n  border-radius: 0.25rem !important;\n}\n\n.rounded-top {\n  border-top-left-radius: 0.25rem !important;\n  border-top-right-radius: 0.25rem !important;\n}\n\n.rounded-right {\n  border-top-right-radius: 0.25rem !important;\n  border-bottom-right-radius: 0.25rem !important;\n}\n\n.rounded-bottom {\n  border-bottom-right-radius: 0.25rem !important;\n  border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-left {\n  border-top-left-radius: 0.25rem !important;\n  border-bottom-left-radius: 0.25rem !important;\n}\n\n.rounded-circle {\n  border-radius: 50% !important;\n}\n\n.rounded-0 {\n  border-radius: 0 !important;\n}\n\n.clearfix::after {\n  display: block;\n  clear: both;\n  content: \"\";\n}\n\n.d-none {\n  display: none !important;\n}\n\n.d-inline {\n  display: inline !important;\n}\n\n.d-inline-block {\n  display: inline-block !important;\n}\n\n.d-block {\n  display: block !important;\n}\n\n.d-table {\n  display: table !important;\n}\n\n.d-table-row {\n  display: table-row !important;\n}\n\n.d-table-cell {\n  display: table-cell !important;\n}\n\n.d-flex {\n  display: -ms-flexbox !important;\n  display: flex !important;\n}\n\n.d-inline-flex {\n  display: -ms-inline-flexbox !important;\n  display: inline-flex !important;\n}\n\n@media (min-width: 576px) {\n  .d-sm-none {\n    display: none !important;\n  }\n  .d-sm-inline {\n    display: inline !important;\n  }\n  .d-sm-inline-block {\n    display: inline-block !important;\n  }\n  .d-sm-block {\n    display: block !important;\n  }\n  .d-sm-table {\n    display: table !important;\n  }\n  .d-sm-table-row {\n    display: table-row !important;\n  }\n  .d-sm-table-cell {\n    display: table-cell !important;\n  }\n  .d-sm-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-sm-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .d-md-none {\n    display: none !important;\n  }\n  .d-md-inline {\n    display: inline !important;\n  }\n  .d-md-inline-block {\n    display: inline-block !important;\n  }\n  .d-md-block {\n    display: block !important;\n  }\n  .d-md-table {\n    display: table !important;\n  }\n  .d-md-table-row {\n    display: table-row !important;\n  }\n  .d-md-table-cell {\n    display: table-cell !important;\n  }\n  .d-md-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-md-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .d-lg-none {\n    display: none !important;\n  }\n  .d-lg-inline {\n    display: inline !important;\n  }\n  .d-lg-inline-block {\n    display: inline-block !important;\n  }\n  .d-lg-block {\n    display: block !important;\n  }\n  .d-lg-table {\n    display: table !important;\n  }\n  .d-lg-table-row {\n    display: table-row !important;\n  }\n  .d-lg-table-cell {\n    display: table-cell !important;\n  }\n  .d-lg-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-lg-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .d-xl-none {\n    display: none !important;\n  }\n  .d-xl-inline {\n    display: inline !important;\n  }\n  .d-xl-inline-block {\n    display: inline-block !important;\n  }\n  .d-xl-block {\n    display: block !important;\n  }\n  .d-xl-table {\n    display: table !important;\n  }\n  .d-xl-table-row {\n    display: table-row !important;\n  }\n  .d-xl-table-cell {\n    display: table-cell !important;\n  }\n  .d-xl-flex {\n    display: -ms-flexbox !important;\n    display: flex !important;\n  }\n  .d-xl-inline-flex {\n    display: -ms-inline-flexbox !important;\n    display: inline-flex !important;\n  }\n}\n\n.d-print-block {\n  display: none !important;\n}\n\n@media print {\n  .d-print-block {\n    display: block !important;\n  }\n}\n\n.d-print-inline {\n  display: none !important;\n}\n\n@media print {\n  .d-print-inline {\n    display: inline !important;\n  }\n}\n\n.d-print-inline-block {\n  display: none !important;\n}\n\n@media print {\n  .d-print-inline-block {\n    display: inline-block !important;\n  }\n}\n\n@media print {\n  .d-print-none {\n    display: none !important;\n  }\n}\n\n.embed-responsive {\n  position: relative;\n  display: block;\n  width: 100%;\n  padding: 0;\n  overflow: hidden;\n}\n\n.embed-responsive::before {\n  display: block;\n  content: \"\";\n}\n\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  border: 0;\n}\n\n.embed-responsive-21by9::before {\n  padding-top: 42.857143%;\n}\n\n.embed-responsive-16by9::before {\n  padding-top: 56.25%;\n}\n\n.embed-responsive-4by3::before {\n  padding-top: 75%;\n}\n\n.embed-responsive-1by1::before {\n  padding-top: 100%;\n}\n\n.flex-row {\n  -ms-flex-direction: row !important;\n      flex-direction: row !important;\n}\n\n.flex-column {\n  -ms-flex-direction: column !important;\n      flex-direction: column !important;\n}\n\n.flex-row-reverse {\n  -ms-flex-direction: row-reverse !important;\n      flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n  -ms-flex-direction: column-reverse !important;\n      flex-direction: column-reverse !important;\n}\n\n.flex-wrap {\n  -ms-flex-wrap: wrap !important;\n      flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n  -ms-flex-wrap: nowrap !important;\n      flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n  -ms-flex-wrap: wrap-reverse !important;\n      flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n  -ms-flex-pack: start !important;\n      justify-content: flex-start !important;\n}\n\n.justify-content-end {\n  -ms-flex-pack: end !important;\n      justify-content: flex-end !important;\n}\n\n.justify-content-center {\n  -ms-flex-pack: center !important;\n      justify-content: center !important;\n}\n\n.justify-content-between {\n  -ms-flex-pack: justify !important;\n      justify-content: space-between !important;\n}\n\n.justify-content-around {\n  -ms-flex-pack: distribute !important;\n      justify-content: space-around !important;\n}\n\n.align-items-start {\n  -ms-flex-align: start !important;\n      align-items: flex-start !important;\n}\n\n.align-items-end {\n  -ms-flex-align: end !important;\n      align-items: flex-end !important;\n}\n\n.align-items-center {\n  -ms-flex-align: center !important;\n      align-items: center !important;\n}\n\n.align-items-baseline {\n  -ms-flex-align: baseline !important;\n      align-items: baseline !important;\n}\n\n.align-items-stretch {\n  -ms-flex-align: stretch !important;\n      align-items: stretch !important;\n}\n\n.align-content-start {\n  -ms-flex-line-pack: start !important;\n      align-content: flex-start !important;\n}\n\n.align-content-end {\n  -ms-flex-line-pack: end !important;\n      align-content: flex-end !important;\n}\n\n.align-content-center {\n  -ms-flex-line-pack: center !important;\n      align-content: center !important;\n}\n\n.align-content-between {\n  -ms-flex-line-pack: justify !important;\n      align-content: space-between !important;\n}\n\n.align-content-around {\n  -ms-flex-line-pack: distribute !important;\n      align-content: space-around !important;\n}\n\n.align-content-stretch {\n  -ms-flex-line-pack: stretch !important;\n      align-content: stretch !important;\n}\n\n.align-self-auto {\n  -ms-flex-item-align: auto !important;\n      align-self: auto !important;\n}\n\n.align-self-start {\n  -ms-flex-item-align: start !important;\n      align-self: flex-start !important;\n}\n\n.align-self-end {\n  -ms-flex-item-align: end !important;\n      align-self: flex-end !important;\n}\n\n.align-self-center {\n  -ms-flex-item-align: center !important;\n      align-self: center !important;\n}\n\n.align-self-baseline {\n  -ms-flex-item-align: baseline !important;\n      align-self: baseline !important;\n}\n\n.align-self-stretch {\n  -ms-flex-item-align: stretch !important;\n      align-self: stretch !important;\n}\n\n@media (min-width: 576px) {\n  .flex-sm-row {\n    -ms-flex-direction: row !important;\n        flex-direction: row !important;\n  }\n  .flex-sm-column {\n    -ms-flex-direction: column !important;\n        flex-direction: column !important;\n  }\n  .flex-sm-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n        flex-direction: row-reverse !important;\n  }\n  .flex-sm-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n        flex-direction: column-reverse !important;\n  }\n  .flex-sm-wrap {\n    -ms-flex-wrap: wrap !important;\n        flex-wrap: wrap !important;\n  }\n  .flex-sm-nowrap {\n    -ms-flex-wrap: nowrap !important;\n        flex-wrap: nowrap !important;\n  }\n  .flex-sm-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n        flex-wrap: wrap-reverse !important;\n  }\n  .justify-content-sm-start {\n    -ms-flex-pack: start !important;\n        justify-content: flex-start !important;\n  }\n  .justify-content-sm-end {\n    -ms-flex-pack: end !important;\n        justify-content: flex-end !important;\n  }\n  .justify-content-sm-center {\n    -ms-flex-pack: center !important;\n        justify-content: center !important;\n  }\n  .justify-content-sm-between {\n    -ms-flex-pack: justify !important;\n        justify-content: space-between !important;\n  }\n  .justify-content-sm-around {\n    -ms-flex-pack: distribute !important;\n        justify-content: space-around !important;\n  }\n  .align-items-sm-start {\n    -ms-flex-align: start !important;\n        align-items: flex-start !important;\n  }\n  .align-items-sm-end {\n    -ms-flex-align: end !important;\n        align-items: flex-end !important;\n  }\n  .align-items-sm-center {\n    -ms-flex-align: center !important;\n        align-items: center !important;\n  }\n  .align-items-sm-baseline {\n    -ms-flex-align: baseline !important;\n        align-items: baseline !important;\n  }\n  .align-items-sm-stretch {\n    -ms-flex-align: stretch !important;\n        align-items: stretch !important;\n  }\n  .align-content-sm-start {\n    -ms-flex-line-pack: start !important;\n        align-content: flex-start !important;\n  }\n  .align-content-sm-end {\n    -ms-flex-line-pack: end !important;\n        align-content: flex-end !important;\n  }\n  .align-content-sm-center {\n    -ms-flex-line-pack: center !important;\n        align-content: center !important;\n  }\n  .align-content-sm-between {\n    -ms-flex-line-pack: justify !important;\n        align-content: space-between !important;\n  }\n  .align-content-sm-around {\n    -ms-flex-line-pack: distribute !important;\n        align-content: space-around !important;\n  }\n  .align-content-sm-stretch {\n    -ms-flex-line-pack: stretch !important;\n        align-content: stretch !important;\n  }\n  .align-self-sm-auto {\n    -ms-flex-item-align: auto !important;\n        align-self: auto !important;\n  }\n  .align-self-sm-start {\n    -ms-flex-item-align: start !important;\n        align-self: flex-start !important;\n  }\n  .align-self-sm-end {\n    -ms-flex-item-align: end !important;\n        align-self: flex-end !important;\n  }\n  .align-self-sm-center {\n    -ms-flex-item-align: center !important;\n        align-self: center !important;\n  }\n  .align-self-sm-baseline {\n    -ms-flex-item-align: baseline !important;\n        align-self: baseline !important;\n  }\n  .align-self-sm-stretch {\n    -ms-flex-item-align: stretch !important;\n        align-self: stretch !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .flex-md-row {\n    -ms-flex-direction: row !important;\n        flex-direction: row !important;\n  }\n  .flex-md-column {\n    -ms-flex-direction: column !important;\n        flex-direction: column !important;\n  }\n  .flex-md-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n        flex-direction: row-reverse !important;\n  }\n  .flex-md-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n        flex-direction: column-reverse !important;\n  }\n  .flex-md-wrap {\n    -ms-flex-wrap: wrap !important;\n        flex-wrap: wrap !important;\n  }\n  .flex-md-nowrap {\n    -ms-flex-wrap: nowrap !important;\n        flex-wrap: nowrap !important;\n  }\n  .flex-md-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n        flex-wrap: wrap-reverse !important;\n  }\n  .justify-content-md-start {\n    -ms-flex-pack: start !important;\n        justify-content: flex-start !important;\n  }\n  .justify-content-md-end {\n    -ms-flex-pack: end !important;\n        justify-content: flex-end !important;\n  }\n  .justify-content-md-center {\n    -ms-flex-pack: center !important;\n        justify-content: center !important;\n  }\n  .justify-content-md-between {\n    -ms-flex-pack: justify !important;\n        justify-content: space-between !important;\n  }\n  .justify-content-md-around {\n    -ms-flex-pack: distribute !important;\n        justify-content: space-around !important;\n  }\n  .align-items-md-start {\n    -ms-flex-align: start !important;\n        align-items: flex-start !important;\n  }\n  .align-items-md-end {\n    -ms-flex-align: end !important;\n        align-items: flex-end !important;\n  }\n  .align-items-md-center {\n    -ms-flex-align: center !important;\n        align-items: center !important;\n  }\n  .align-items-md-baseline {\n    -ms-flex-align: baseline !important;\n        align-items: baseline !important;\n  }\n  .align-items-md-stretch {\n    -ms-flex-align: stretch !important;\n        align-items: stretch !important;\n  }\n  .align-content-md-start {\n    -ms-flex-line-pack: start !important;\n        align-content: flex-start !important;\n  }\n  .align-content-md-end {\n    -ms-flex-line-pack: end !important;\n        align-content: flex-end !important;\n  }\n  .align-content-md-center {\n    -ms-flex-line-pack: center !important;\n        align-content: center !important;\n  }\n  .align-content-md-between {\n    -ms-flex-line-pack: justify !important;\n        align-content: space-between !important;\n  }\n  .align-content-md-around {\n    -ms-flex-line-pack: distribute !important;\n        align-content: space-around !important;\n  }\n  .align-content-md-stretch {\n    -ms-flex-line-pack: stretch !important;\n        align-content: stretch !important;\n  }\n  .align-self-md-auto {\n    -ms-flex-item-align: auto !important;\n        align-self: auto !important;\n  }\n  .align-self-md-start {\n    -ms-flex-item-align: start !important;\n        align-self: flex-start !important;\n  }\n  .align-self-md-end {\n    -ms-flex-item-align: end !important;\n        align-self: flex-end !important;\n  }\n  .align-self-md-center {\n    -ms-flex-item-align: center !important;\n        align-self: center !important;\n  }\n  .align-self-md-baseline {\n    -ms-flex-item-align: baseline !important;\n        align-self: baseline !important;\n  }\n  .align-self-md-stretch {\n    -ms-flex-item-align: stretch !important;\n        align-self: stretch !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .flex-lg-row {\n    -ms-flex-direction: row !important;\n        flex-direction: row !important;\n  }\n  .flex-lg-column {\n    -ms-flex-direction: column !important;\n        flex-direction: column !important;\n  }\n  .flex-lg-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n        flex-direction: row-reverse !important;\n  }\n  .flex-lg-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n        flex-direction: column-reverse !important;\n  }\n  .flex-lg-wrap {\n    -ms-flex-wrap: wrap !important;\n        flex-wrap: wrap !important;\n  }\n  .flex-lg-nowrap {\n    -ms-flex-wrap: nowrap !important;\n        flex-wrap: nowrap !important;\n  }\n  .flex-lg-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n        flex-wrap: wrap-reverse !important;\n  }\n  .justify-content-lg-start {\n    -ms-flex-pack: start !important;\n        justify-content: flex-start !important;\n  }\n  .justify-content-lg-end {\n    -ms-flex-pack: end !important;\n        justify-content: flex-end !important;\n  }\n  .justify-content-lg-center {\n    -ms-flex-pack: center !important;\n        justify-content: center !important;\n  }\n  .justify-content-lg-between {\n    -ms-flex-pack: justify !important;\n        justify-content: space-between !important;\n  }\n  .justify-content-lg-around {\n    -ms-flex-pack: distribute !important;\n        justify-content: space-around !important;\n  }\n  .align-items-lg-start {\n    -ms-flex-align: start !important;\n        align-items: flex-start !important;\n  }\n  .align-items-lg-end {\n    -ms-flex-align: end !important;\n        align-items: flex-end !important;\n  }\n  .align-items-lg-center {\n    -ms-flex-align: center !important;\n        align-items: center !important;\n  }\n  .align-items-lg-baseline {\n    -ms-flex-align: baseline !important;\n        align-items: baseline !important;\n  }\n  .align-items-lg-stretch {\n    -ms-flex-align: stretch !important;\n        align-items: stretch !important;\n  }\n  .align-content-lg-start {\n    -ms-flex-line-pack: start !important;\n        align-content: flex-start !important;\n  }\n  .align-content-lg-end {\n    -ms-flex-line-pack: end !important;\n        align-content: flex-end !important;\n  }\n  .align-content-lg-center {\n    -ms-flex-line-pack: center !important;\n        align-content: center !important;\n  }\n  .align-content-lg-between {\n    -ms-flex-line-pack: justify !important;\n        align-content: space-between !important;\n  }\n  .align-content-lg-around {\n    -ms-flex-line-pack: distribute !important;\n        align-content: space-around !important;\n  }\n  .align-content-lg-stretch {\n    -ms-flex-line-pack: stretch !important;\n        align-content: stretch !important;\n  }\n  .align-self-lg-auto {\n    -ms-flex-item-align: auto !important;\n        align-self: auto !important;\n  }\n  .align-self-lg-start {\n    -ms-flex-item-align: start !important;\n        align-self: flex-start !important;\n  }\n  .align-self-lg-end {\n    -ms-flex-item-align: end !important;\n        align-self: flex-end !important;\n  }\n  .align-self-lg-center {\n    -ms-flex-item-align: center !important;\n        align-self: center !important;\n  }\n  .align-self-lg-baseline {\n    -ms-flex-item-align: baseline !important;\n        align-self: baseline !important;\n  }\n  .align-self-lg-stretch {\n    -ms-flex-item-align: stretch !important;\n        align-self: stretch !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .flex-xl-row {\n    -ms-flex-direction: row !important;\n        flex-direction: row !important;\n  }\n  .flex-xl-column {\n    -ms-flex-direction: column !important;\n        flex-direction: column !important;\n  }\n  .flex-xl-row-reverse {\n    -ms-flex-direction: row-reverse !important;\n        flex-direction: row-reverse !important;\n  }\n  .flex-xl-column-reverse {\n    -ms-flex-direction: column-reverse !important;\n        flex-direction: column-reverse !important;\n  }\n  .flex-xl-wrap {\n    -ms-flex-wrap: wrap !important;\n        flex-wrap: wrap !important;\n  }\n  .flex-xl-nowrap {\n    -ms-flex-wrap: nowrap !important;\n        flex-wrap: nowrap !important;\n  }\n  .flex-xl-wrap-reverse {\n    -ms-flex-wrap: wrap-reverse !important;\n        flex-wrap: wrap-reverse !important;\n  }\n  .justify-content-xl-start {\n    -ms-flex-pack: start !important;\n        justify-content: flex-start !important;\n  }\n  .justify-content-xl-end {\n    -ms-flex-pack: end !important;\n        justify-content: flex-end !important;\n  }\n  .justify-content-xl-center {\n    -ms-flex-pack: center !important;\n        justify-content: center !important;\n  }\n  .justify-content-xl-between {\n    -ms-flex-pack: justify !important;\n        justify-content: space-between !important;\n  }\n  .justify-content-xl-around {\n    -ms-flex-pack: distribute !important;\n        justify-content: space-around !important;\n  }\n  .align-items-xl-start {\n    -ms-flex-align: start !important;\n        align-items: flex-start !important;\n  }\n  .align-items-xl-end {\n    -ms-flex-align: end !important;\n        align-items: flex-end !important;\n  }\n  .align-items-xl-center {\n    -ms-flex-align: center !important;\n        align-items: center !important;\n  }\n  .align-items-xl-baseline {\n    -ms-flex-align: baseline !important;\n        align-items: baseline !important;\n  }\n  .align-items-xl-stretch {\n    -ms-flex-align: stretch !important;\n        align-items: stretch !important;\n  }\n  .align-content-xl-start {\n    -ms-flex-line-pack: start !important;\n        align-content: flex-start !important;\n  }\n  .align-content-xl-end {\n    -ms-flex-line-pack: end !important;\n        align-content: flex-end !important;\n  }\n  .align-content-xl-center {\n    -ms-flex-line-pack: center !important;\n        align-content: center !important;\n  }\n  .align-content-xl-between {\n    -ms-flex-line-pack: justify !important;\n        align-content: space-between !important;\n  }\n  .align-content-xl-around {\n    -ms-flex-line-pack: distribute !important;\n        align-content: space-around !important;\n  }\n  .align-content-xl-stretch {\n    -ms-flex-line-pack: stretch !important;\n        align-content: stretch !important;\n  }\n  .align-self-xl-auto {\n    -ms-flex-item-align: auto !important;\n        align-self: auto !important;\n  }\n  .align-self-xl-start {\n    -ms-flex-item-align: start !important;\n        align-self: flex-start !important;\n  }\n  .align-self-xl-end {\n    -ms-flex-item-align: end !important;\n        align-self: flex-end !important;\n  }\n  .align-self-xl-center {\n    -ms-flex-item-align: center !important;\n        align-self: center !important;\n  }\n  .align-self-xl-baseline {\n    -ms-flex-item-align: baseline !important;\n        align-self: baseline !important;\n  }\n  .align-self-xl-stretch {\n    -ms-flex-item-align: stretch !important;\n        align-self: stretch !important;\n  }\n}\n\n.float-left {\n  float: left !important;\n}\n\n.float-right {\n  float: right !important;\n}\n\n.float-none {\n  float: none !important;\n}\n\n@media (min-width: 576px) {\n  .float-sm-left {\n    float: left !important;\n  }\n  .float-sm-right {\n    float: right !important;\n  }\n  .float-sm-none {\n    float: none !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .float-md-left {\n    float: left !important;\n  }\n  .float-md-right {\n    float: right !important;\n  }\n  .float-md-none {\n    float: none !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .float-lg-left {\n    float: left !important;\n  }\n  .float-lg-right {\n    float: right !important;\n  }\n  .float-lg-none {\n    float: none !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .float-xl-left {\n    float: left !important;\n  }\n  .float-xl-right {\n    float: right !important;\n  }\n  .float-xl-none {\n    float: none !important;\n  }\n}\n\n.position-static {\n  position: static !important;\n}\n\n.position-relative {\n  position: relative !important;\n}\n\n.position-absolute {\n  position: absolute !important;\n}\n\n.position-fixed {\n  position: fixed !important;\n}\n\n.position-sticky {\n  position: -webkit-sticky !important;\n  position: sticky !important;\n}\n\n.fixed-top {\n  position: fixed;\n  top: 0;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n.fixed-bottom {\n  position: fixed;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1030;\n}\n\n@supports ((position: -webkit-sticky) or (position: sticky)) {\n  .sticky-top {\n    position: -webkit-sticky;\n    position: sticky;\n    top: 0;\n    z-index: 1020;\n  }\n}\n\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  white-space: nowrap;\n  -webkit-clip-path: inset(50%);\n          clip-path: inset(50%);\n  border: 0;\n}\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n  position: static;\n  width: auto;\n  height: auto;\n  overflow: visible;\n  clip: auto;\n  white-space: normal;\n  -webkit-clip-path: none;\n          clip-path: none;\n}\n\n.w-25 {\n  width: 25% !important;\n}\n\n.w-50 {\n  width: 50% !important;\n}\n\n.w-75 {\n  width: 75% !important;\n}\n\n.w-100 {\n  width: 100% !important;\n}\n\n.h-25 {\n  height: 25% !important;\n}\n\n.h-50 {\n  height: 50% !important;\n}\n\n.h-75 {\n  height: 75% !important;\n}\n\n.h-100 {\n  height: 100% !important;\n}\n\n.mw-100 {\n  max-width: 100% !important;\n}\n\n.mh-100 {\n  max-height: 100% !important;\n}\n\n.m-0 {\n  margin: 0 !important;\n}\n\n.mt-0,\n.my-0 {\n  margin-top: 0 !important;\n}\n\n.mr-0,\n.mx-0 {\n  margin-right: 0 !important;\n}\n\n.mb-0,\n.my-0 {\n  margin-bottom: 0 !important;\n}\n\n.ml-0,\n.mx-0 {\n  margin-left: 0 !important;\n}\n\n.m-1 {\n  margin: 0.25rem !important;\n}\n\n.mt-1,\n.my-1 {\n  margin-top: 0.25rem !important;\n}\n\n.mr-1,\n.mx-1 {\n  margin-right: 0.25rem !important;\n}\n\n.mb-1,\n.my-1 {\n  margin-bottom: 0.25rem !important;\n}\n\n.ml-1,\n.mx-1 {\n  margin-left: 0.25rem !important;\n}\n\n.m-2 {\n  margin: 0.5rem !important;\n}\n\n.mt-2,\n.my-2 {\n  margin-top: 0.5rem !important;\n}\n\n.mr-2,\n.mx-2 {\n  margin-right: 0.5rem !important;\n}\n\n.mb-2,\n.my-2 {\n  margin-bottom: 0.5rem !important;\n}\n\n.ml-2,\n.mx-2 {\n  margin-left: 0.5rem !important;\n}\n\n.m-3 {\n  margin: 1rem !important;\n}\n\n.mt-3,\n.my-3 {\n  margin-top: 1rem !important;\n}\n\n.mr-3,\n.mx-3 {\n  margin-right: 1rem !important;\n}\n\n.mb-3,\n.my-3 {\n  margin-bottom: 1rem !important;\n}\n\n.ml-3,\n.mx-3 {\n  margin-left: 1rem !important;\n}\n\n.m-4 {\n  margin: 1.5rem !important;\n}\n\n.mt-4,\n.my-4 {\n  margin-top: 1.5rem !important;\n}\n\n.mr-4,\n.mx-4 {\n  margin-right: 1.5rem !important;\n}\n\n.mb-4,\n.my-4 {\n  margin-bottom: 1.5rem !important;\n}\n\n.ml-4,\n.mx-4 {\n  margin-left: 1.5rem !important;\n}\n\n.m-5 {\n  margin: 3rem !important;\n}\n\n.mt-5,\n.my-5 {\n  margin-top: 3rem !important;\n}\n\n.mr-5,\n.mx-5 {\n  margin-right: 3rem !important;\n}\n\n.mb-5,\n.my-5 {\n  margin-bottom: 3rem !important;\n}\n\n.ml-5,\n.mx-5 {\n  margin-left: 3rem !important;\n}\n\n.p-0 {\n  padding: 0 !important;\n}\n\n.pt-0,\n.py-0 {\n  padding-top: 0 !important;\n}\n\n.pr-0,\n.px-0 {\n  padding-right: 0 !important;\n}\n\n.pb-0,\n.py-0 {\n  padding-bottom: 0 !important;\n}\n\n.pl-0,\n.px-0 {\n  padding-left: 0 !important;\n}\n\n.p-1 {\n  padding: 0.25rem !important;\n}\n\n.pt-1,\n.py-1 {\n  padding-top: 0.25rem !important;\n}\n\n.pr-1,\n.px-1 {\n  padding-right: 0.25rem !important;\n}\n\n.pb-1,\n.py-1 {\n  padding-bottom: 0.25rem !important;\n}\n\n.pl-1,\n.px-1 {\n  padding-left: 0.25rem !important;\n}\n\n.p-2 {\n  padding: 0.5rem !important;\n}\n\n.pt-2,\n.py-2 {\n  padding-top: 0.5rem !important;\n}\n\n.pr-2,\n.px-2 {\n  padding-right: 0.5rem !important;\n}\n\n.pb-2,\n.py-2 {\n  padding-bottom: 0.5rem !important;\n}\n\n.pl-2,\n.px-2 {\n  padding-left: 0.5rem !important;\n}\n\n.p-3 {\n  padding: 1rem !important;\n}\n\n.pt-3,\n.py-3 {\n  padding-top: 1rem !important;\n}\n\n.pr-3,\n.px-3 {\n  padding-right: 1rem !important;\n}\n\n.pb-3,\n.py-3 {\n  padding-bottom: 1rem !important;\n}\n\n.pl-3,\n.px-3 {\n  padding-left: 1rem !important;\n}\n\n.p-4 {\n  padding: 1.5rem !important;\n}\n\n.pt-4,\n.py-4 {\n  padding-top: 1.5rem !important;\n}\n\n.pr-4,\n.px-4 {\n  padding-right: 1.5rem !important;\n}\n\n.pb-4,\n.py-4 {\n  padding-bottom: 1.5rem !important;\n}\n\n.pl-4,\n.px-4 {\n  padding-left: 1.5rem !important;\n}\n\n.p-5 {\n  padding: 3rem !important;\n}\n\n.pt-5,\n.py-5 {\n  padding-top: 3rem !important;\n}\n\n.pr-5,\n.px-5 {\n  padding-right: 3rem !important;\n}\n\n.pb-5,\n.py-5 {\n  padding-bottom: 3rem !important;\n}\n\n.pl-5,\n.px-5 {\n  padding-left: 3rem !important;\n}\n\n.m-auto {\n  margin: auto !important;\n}\n\n.mt-auto,\n.my-auto {\n  margin-top: auto !important;\n}\n\n.mr-auto,\n.mx-auto {\n  margin-right: auto !important;\n}\n\n.mb-auto,\n.my-auto {\n  margin-bottom: auto !important;\n}\n\n.ml-auto,\n.mx-auto {\n  margin-left: auto !important;\n}\n\n@media (min-width: 576px) {\n  .m-sm-0 {\n    margin: 0 !important;\n  }\n  .mt-sm-0,\n  .my-sm-0 {\n    margin-top: 0 !important;\n  }\n  .mr-sm-0,\n  .mx-sm-0 {\n    margin-right: 0 !important;\n  }\n  .mb-sm-0,\n  .my-sm-0 {\n    margin-bottom: 0 !important;\n  }\n  .ml-sm-0,\n  .mx-sm-0 {\n    margin-left: 0 !important;\n  }\n  .m-sm-1 {\n    margin: 0.25rem !important;\n  }\n  .mt-sm-1,\n  .my-sm-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mr-sm-1,\n  .mx-sm-1 {\n    margin-right: 0.25rem !important;\n  }\n  .mb-sm-1,\n  .my-sm-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .ml-sm-1,\n  .mx-sm-1 {\n    margin-left: 0.25rem !important;\n  }\n  .m-sm-2 {\n    margin: 0.5rem !important;\n  }\n  .mt-sm-2,\n  .my-sm-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mr-sm-2,\n  .mx-sm-2 {\n    margin-right: 0.5rem !important;\n  }\n  .mb-sm-2,\n  .my-sm-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .ml-sm-2,\n  .mx-sm-2 {\n    margin-left: 0.5rem !important;\n  }\n  .m-sm-3 {\n    margin: 1rem !important;\n  }\n  .mt-sm-3,\n  .my-sm-3 {\n    margin-top: 1rem !important;\n  }\n  .mr-sm-3,\n  .mx-sm-3 {\n    margin-right: 1rem !important;\n  }\n  .mb-sm-3,\n  .my-sm-3 {\n    margin-bottom: 1rem !important;\n  }\n  .ml-sm-3,\n  .mx-sm-3 {\n    margin-left: 1rem !important;\n  }\n  .m-sm-4 {\n    margin: 1.5rem !important;\n  }\n  .mt-sm-4,\n  .my-sm-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mr-sm-4,\n  .mx-sm-4 {\n    margin-right: 1.5rem !important;\n  }\n  .mb-sm-4,\n  .my-sm-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .ml-sm-4,\n  .mx-sm-4 {\n    margin-left: 1.5rem !important;\n  }\n  .m-sm-5 {\n    margin: 3rem !important;\n  }\n  .mt-sm-5,\n  .my-sm-5 {\n    margin-top: 3rem !important;\n  }\n  .mr-sm-5,\n  .mx-sm-5 {\n    margin-right: 3rem !important;\n  }\n  .mb-sm-5,\n  .my-sm-5 {\n    margin-bottom: 3rem !important;\n  }\n  .ml-sm-5,\n  .mx-sm-5 {\n    margin-left: 3rem !important;\n  }\n  .p-sm-0 {\n    padding: 0 !important;\n  }\n  .pt-sm-0,\n  .py-sm-0 {\n    padding-top: 0 !important;\n  }\n  .pr-sm-0,\n  .px-sm-0 {\n    padding-right: 0 !important;\n  }\n  .pb-sm-0,\n  .py-sm-0 {\n    padding-bottom: 0 !important;\n  }\n  .pl-sm-0,\n  .px-sm-0 {\n    padding-left: 0 !important;\n  }\n  .p-sm-1 {\n    padding: 0.25rem !important;\n  }\n  .pt-sm-1,\n  .py-sm-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pr-sm-1,\n  .px-sm-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pb-sm-1,\n  .py-sm-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pl-sm-1,\n  .px-sm-1 {\n    padding-left: 0.25rem !important;\n  }\n  .p-sm-2 {\n    padding: 0.5rem !important;\n  }\n  .pt-sm-2,\n  .py-sm-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pr-sm-2,\n  .px-sm-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pb-sm-2,\n  .py-sm-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pl-sm-2,\n  .px-sm-2 {\n    padding-left: 0.5rem !important;\n  }\n  .p-sm-3 {\n    padding: 1rem !important;\n  }\n  .pt-sm-3,\n  .py-sm-3 {\n    padding-top: 1rem !important;\n  }\n  .pr-sm-3,\n  .px-sm-3 {\n    padding-right: 1rem !important;\n  }\n  .pb-sm-3,\n  .py-sm-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pl-sm-3,\n  .px-sm-3 {\n    padding-left: 1rem !important;\n  }\n  .p-sm-4 {\n    padding: 1.5rem !important;\n  }\n  .pt-sm-4,\n  .py-sm-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pr-sm-4,\n  .px-sm-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pb-sm-4,\n  .py-sm-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pl-sm-4,\n  .px-sm-4 {\n    padding-left: 1.5rem !important;\n  }\n  .p-sm-5 {\n    padding: 3rem !important;\n  }\n  .pt-sm-5,\n  .py-sm-5 {\n    padding-top: 3rem !important;\n  }\n  .pr-sm-5,\n  .px-sm-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-sm-5,\n  .py-sm-5 {\n    padding-bottom: 3rem !important;\n  }\n  .pl-sm-5,\n  .px-sm-5 {\n    padding-left: 3rem !important;\n  }\n  .m-sm-auto {\n    margin: auto !important;\n  }\n  .mt-sm-auto,\n  .my-sm-auto {\n    margin-top: auto !important;\n  }\n  .mr-sm-auto,\n  .mx-sm-auto {\n    margin-right: auto !important;\n  }\n  .mb-sm-auto,\n  .my-sm-auto {\n    margin-bottom: auto !important;\n  }\n  .ml-sm-auto,\n  .mx-sm-auto {\n    margin-left: auto !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .m-md-0 {\n    margin: 0 !important;\n  }\n  .mt-md-0,\n  .my-md-0 {\n    margin-top: 0 !important;\n  }\n  .mr-md-0,\n  .mx-md-0 {\n    margin-right: 0 !important;\n  }\n  .mb-md-0,\n  .my-md-0 {\n    margin-bottom: 0 !important;\n  }\n  .ml-md-0,\n  .mx-md-0 {\n    margin-left: 0 !important;\n  }\n  .m-md-1 {\n    margin: 0.25rem !important;\n  }\n  .mt-md-1,\n  .my-md-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mr-md-1,\n  .mx-md-1 {\n    margin-right: 0.25rem !important;\n  }\n  .mb-md-1,\n  .my-md-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .ml-md-1,\n  .mx-md-1 {\n    margin-left: 0.25rem !important;\n  }\n  .m-md-2 {\n    margin: 0.5rem !important;\n  }\n  .mt-md-2,\n  .my-md-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mr-md-2,\n  .mx-md-2 {\n    margin-right: 0.5rem !important;\n  }\n  .mb-md-2,\n  .my-md-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .ml-md-2,\n  .mx-md-2 {\n    margin-left: 0.5rem !important;\n  }\n  .m-md-3 {\n    margin: 1rem !important;\n  }\n  .mt-md-3,\n  .my-md-3 {\n    margin-top: 1rem !important;\n  }\n  .mr-md-3,\n  .mx-md-3 {\n    margin-right: 1rem !important;\n  }\n  .mb-md-3,\n  .my-md-3 {\n    margin-bottom: 1rem !important;\n  }\n  .ml-md-3,\n  .mx-md-3 {\n    margin-left: 1rem !important;\n  }\n  .m-md-4 {\n    margin: 1.5rem !important;\n  }\n  .mt-md-4,\n  .my-md-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mr-md-4,\n  .mx-md-4 {\n    margin-right: 1.5rem !important;\n  }\n  .mb-md-4,\n  .my-md-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .ml-md-4,\n  .mx-md-4 {\n    margin-left: 1.5rem !important;\n  }\n  .m-md-5 {\n    margin: 3rem !important;\n  }\n  .mt-md-5,\n  .my-md-5 {\n    margin-top: 3rem !important;\n  }\n  .mr-md-5,\n  .mx-md-5 {\n    margin-right: 3rem !important;\n  }\n  .mb-md-5,\n  .my-md-5 {\n    margin-bottom: 3rem !important;\n  }\n  .ml-md-5,\n  .mx-md-5 {\n    margin-left: 3rem !important;\n  }\n  .p-md-0 {\n    padding: 0 !important;\n  }\n  .pt-md-0,\n  .py-md-0 {\n    padding-top: 0 !important;\n  }\n  .pr-md-0,\n  .px-md-0 {\n    padding-right: 0 !important;\n  }\n  .pb-md-0,\n  .py-md-0 {\n    padding-bottom: 0 !important;\n  }\n  .pl-md-0,\n  .px-md-0 {\n    padding-left: 0 !important;\n  }\n  .p-md-1 {\n    padding: 0.25rem !important;\n  }\n  .pt-md-1,\n  .py-md-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pr-md-1,\n  .px-md-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pb-md-1,\n  .py-md-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pl-md-1,\n  .px-md-1 {\n    padding-left: 0.25rem !important;\n  }\n  .p-md-2 {\n    padding: 0.5rem !important;\n  }\n  .pt-md-2,\n  .py-md-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pr-md-2,\n  .px-md-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pb-md-2,\n  .py-md-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pl-md-2,\n  .px-md-2 {\n    padding-left: 0.5rem !important;\n  }\n  .p-md-3 {\n    padding: 1rem !important;\n  }\n  .pt-md-3,\n  .py-md-3 {\n    padding-top: 1rem !important;\n  }\n  .pr-md-3,\n  .px-md-3 {\n    padding-right: 1rem !important;\n  }\n  .pb-md-3,\n  .py-md-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pl-md-3,\n  .px-md-3 {\n    padding-left: 1rem !important;\n  }\n  .p-md-4 {\n    padding: 1.5rem !important;\n  }\n  .pt-md-4,\n  .py-md-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pr-md-4,\n  .px-md-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pb-md-4,\n  .py-md-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pl-md-4,\n  .px-md-4 {\n    padding-left: 1.5rem !important;\n  }\n  .p-md-5 {\n    padding: 3rem !important;\n  }\n  .pt-md-5,\n  .py-md-5 {\n    padding-top: 3rem !important;\n  }\n  .pr-md-5,\n  .px-md-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-md-5,\n  .py-md-5 {\n    padding-bottom: 3rem !important;\n  }\n  .pl-md-5,\n  .px-md-5 {\n    padding-left: 3rem !important;\n  }\n  .m-md-auto {\n    margin: auto !important;\n  }\n  .mt-md-auto,\n  .my-md-auto {\n    margin-top: auto !important;\n  }\n  .mr-md-auto,\n  .mx-md-auto {\n    margin-right: auto !important;\n  }\n  .mb-md-auto,\n  .my-md-auto {\n    margin-bottom: auto !important;\n  }\n  .ml-md-auto,\n  .mx-md-auto {\n    margin-left: auto !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .m-lg-0 {\n    margin: 0 !important;\n  }\n  .mt-lg-0,\n  .my-lg-0 {\n    margin-top: 0 !important;\n  }\n  .mr-lg-0,\n  .mx-lg-0 {\n    margin-right: 0 !important;\n  }\n  .mb-lg-0,\n  .my-lg-0 {\n    margin-bottom: 0 !important;\n  }\n  .ml-lg-0,\n  .mx-lg-0 {\n    margin-left: 0 !important;\n  }\n  .m-lg-1 {\n    margin: 0.25rem !important;\n  }\n  .mt-lg-1,\n  .my-lg-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mr-lg-1,\n  .mx-lg-1 {\n    margin-right: 0.25rem !important;\n  }\n  .mb-lg-1,\n  .my-lg-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .ml-lg-1,\n  .mx-lg-1 {\n    margin-left: 0.25rem !important;\n  }\n  .m-lg-2 {\n    margin: 0.5rem !important;\n  }\n  .mt-lg-2,\n  .my-lg-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mr-lg-2,\n  .mx-lg-2 {\n    margin-right: 0.5rem !important;\n  }\n  .mb-lg-2,\n  .my-lg-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .ml-lg-2,\n  .mx-lg-2 {\n    margin-left: 0.5rem !important;\n  }\n  .m-lg-3 {\n    margin: 1rem !important;\n  }\n  .mt-lg-3,\n  .my-lg-3 {\n    margin-top: 1rem !important;\n  }\n  .mr-lg-3,\n  .mx-lg-3 {\n    margin-right: 1rem !important;\n  }\n  .mb-lg-3,\n  .my-lg-3 {\n    margin-bottom: 1rem !important;\n  }\n  .ml-lg-3,\n  .mx-lg-3 {\n    margin-left: 1rem !important;\n  }\n  .m-lg-4 {\n    margin: 1.5rem !important;\n  }\n  .mt-lg-4,\n  .my-lg-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mr-lg-4,\n  .mx-lg-4 {\n    margin-right: 1.5rem !important;\n  }\n  .mb-lg-4,\n  .my-lg-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .ml-lg-4,\n  .mx-lg-4 {\n    margin-left: 1.5rem !important;\n  }\n  .m-lg-5 {\n    margin: 3rem !important;\n  }\n  .mt-lg-5,\n  .my-lg-5 {\n    margin-top: 3rem !important;\n  }\n  .mr-lg-5,\n  .mx-lg-5 {\n    margin-right: 3rem !important;\n  }\n  .mb-lg-5,\n  .my-lg-5 {\n    margin-bottom: 3rem !important;\n  }\n  .ml-lg-5,\n  .mx-lg-5 {\n    margin-left: 3rem !important;\n  }\n  .p-lg-0 {\n    padding: 0 !important;\n  }\n  .pt-lg-0,\n  .py-lg-0 {\n    padding-top: 0 !important;\n  }\n  .pr-lg-0,\n  .px-lg-0 {\n    padding-right: 0 !important;\n  }\n  .pb-lg-0,\n  .py-lg-0 {\n    padding-bottom: 0 !important;\n  }\n  .pl-lg-0,\n  .px-lg-0 {\n    padding-left: 0 !important;\n  }\n  .p-lg-1 {\n    padding: 0.25rem !important;\n  }\n  .pt-lg-1,\n  .py-lg-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pr-lg-1,\n  .px-lg-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pb-lg-1,\n  .py-lg-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pl-lg-1,\n  .px-lg-1 {\n    padding-left: 0.25rem !important;\n  }\n  .p-lg-2 {\n    padding: 0.5rem !important;\n  }\n  .pt-lg-2,\n  .py-lg-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pr-lg-2,\n  .px-lg-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pb-lg-2,\n  .py-lg-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pl-lg-2,\n  .px-lg-2 {\n    padding-left: 0.5rem !important;\n  }\n  .p-lg-3 {\n    padding: 1rem !important;\n  }\n  .pt-lg-3,\n  .py-lg-3 {\n    padding-top: 1rem !important;\n  }\n  .pr-lg-3,\n  .px-lg-3 {\n    padding-right: 1rem !important;\n  }\n  .pb-lg-3,\n  .py-lg-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pl-lg-3,\n  .px-lg-3 {\n    padding-left: 1rem !important;\n  }\n  .p-lg-4 {\n    padding: 1.5rem !important;\n  }\n  .pt-lg-4,\n  .py-lg-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pr-lg-4,\n  .px-lg-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pb-lg-4,\n  .py-lg-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pl-lg-4,\n  .px-lg-4 {\n    padding-left: 1.5rem !important;\n  }\n  .p-lg-5 {\n    padding: 3rem !important;\n  }\n  .pt-lg-5,\n  .py-lg-5 {\n    padding-top: 3rem !important;\n  }\n  .pr-lg-5,\n  .px-lg-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-lg-5,\n  .py-lg-5 {\n    padding-bottom: 3rem !important;\n  }\n  .pl-lg-5,\n  .px-lg-5 {\n    padding-left: 3rem !important;\n  }\n  .m-lg-auto {\n    margin: auto !important;\n  }\n  .mt-lg-auto,\n  .my-lg-auto {\n    margin-top: auto !important;\n  }\n  .mr-lg-auto,\n  .mx-lg-auto {\n    margin-right: auto !important;\n  }\n  .mb-lg-auto,\n  .my-lg-auto {\n    margin-bottom: auto !important;\n  }\n  .ml-lg-auto,\n  .mx-lg-auto {\n    margin-left: auto !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .m-xl-0 {\n    margin: 0 !important;\n  }\n  .mt-xl-0,\n  .my-xl-0 {\n    margin-top: 0 !important;\n  }\n  .mr-xl-0,\n  .mx-xl-0 {\n    margin-right: 0 !important;\n  }\n  .mb-xl-0,\n  .my-xl-0 {\n    margin-bottom: 0 !important;\n  }\n  .ml-xl-0,\n  .mx-xl-0 {\n    margin-left: 0 !important;\n  }\n  .m-xl-1 {\n    margin: 0.25rem !important;\n  }\n  .mt-xl-1,\n  .my-xl-1 {\n    margin-top: 0.25rem !important;\n  }\n  .mr-xl-1,\n  .mx-xl-1 {\n    margin-right: 0.25rem !important;\n  }\n  .mb-xl-1,\n  .my-xl-1 {\n    margin-bottom: 0.25rem !important;\n  }\n  .ml-xl-1,\n  .mx-xl-1 {\n    margin-left: 0.25rem !important;\n  }\n  .m-xl-2 {\n    margin: 0.5rem !important;\n  }\n  .mt-xl-2,\n  .my-xl-2 {\n    margin-top: 0.5rem !important;\n  }\n  .mr-xl-2,\n  .mx-xl-2 {\n    margin-right: 0.5rem !important;\n  }\n  .mb-xl-2,\n  .my-xl-2 {\n    margin-bottom: 0.5rem !important;\n  }\n  .ml-xl-2,\n  .mx-xl-2 {\n    margin-left: 0.5rem !important;\n  }\n  .m-xl-3 {\n    margin: 1rem !important;\n  }\n  .mt-xl-3,\n  .my-xl-3 {\n    margin-top: 1rem !important;\n  }\n  .mr-xl-3,\n  .mx-xl-3 {\n    margin-right: 1rem !important;\n  }\n  .mb-xl-3,\n  .my-xl-3 {\n    margin-bottom: 1rem !important;\n  }\n  .ml-xl-3,\n  .mx-xl-3 {\n    margin-left: 1rem !important;\n  }\n  .m-xl-4 {\n    margin: 1.5rem !important;\n  }\n  .mt-xl-4,\n  .my-xl-4 {\n    margin-top: 1.5rem !important;\n  }\n  .mr-xl-4,\n  .mx-xl-4 {\n    margin-right: 1.5rem !important;\n  }\n  .mb-xl-4,\n  .my-xl-4 {\n    margin-bottom: 1.5rem !important;\n  }\n  .ml-xl-4,\n  .mx-xl-4 {\n    margin-left: 1.5rem !important;\n  }\n  .m-xl-5 {\n    margin: 3rem !important;\n  }\n  .mt-xl-5,\n  .my-xl-5 {\n    margin-top: 3rem !important;\n  }\n  .mr-xl-5,\n  .mx-xl-5 {\n    margin-right: 3rem !important;\n  }\n  .mb-xl-5,\n  .my-xl-5 {\n    margin-bottom: 3rem !important;\n  }\n  .ml-xl-5,\n  .mx-xl-5 {\n    margin-left: 3rem !important;\n  }\n  .p-xl-0 {\n    padding: 0 !important;\n  }\n  .pt-xl-0,\n  .py-xl-0 {\n    padding-top: 0 !important;\n  }\n  .pr-xl-0,\n  .px-xl-0 {\n    padding-right: 0 !important;\n  }\n  .pb-xl-0,\n  .py-xl-0 {\n    padding-bottom: 0 !important;\n  }\n  .pl-xl-0,\n  .px-xl-0 {\n    padding-left: 0 !important;\n  }\n  .p-xl-1 {\n    padding: 0.25rem !important;\n  }\n  .pt-xl-1,\n  .py-xl-1 {\n    padding-top: 0.25rem !important;\n  }\n  .pr-xl-1,\n  .px-xl-1 {\n    padding-right: 0.25rem !important;\n  }\n  .pb-xl-1,\n  .py-xl-1 {\n    padding-bottom: 0.25rem !important;\n  }\n  .pl-xl-1,\n  .px-xl-1 {\n    padding-left: 0.25rem !important;\n  }\n  .p-xl-2 {\n    padding: 0.5rem !important;\n  }\n  .pt-xl-2,\n  .py-xl-2 {\n    padding-top: 0.5rem !important;\n  }\n  .pr-xl-2,\n  .px-xl-2 {\n    padding-right: 0.5rem !important;\n  }\n  .pb-xl-2,\n  .py-xl-2 {\n    padding-bottom: 0.5rem !important;\n  }\n  .pl-xl-2,\n  .px-xl-2 {\n    padding-left: 0.5rem !important;\n  }\n  .p-xl-3 {\n    padding: 1rem !important;\n  }\n  .pt-xl-3,\n  .py-xl-3 {\n    padding-top: 1rem !important;\n  }\n  .pr-xl-3,\n  .px-xl-3 {\n    padding-right: 1rem !important;\n  }\n  .pb-xl-3,\n  .py-xl-3 {\n    padding-bottom: 1rem !important;\n  }\n  .pl-xl-3,\n  .px-xl-3 {\n    padding-left: 1rem !important;\n  }\n  .p-xl-4 {\n    padding: 1.5rem !important;\n  }\n  .pt-xl-4,\n  .py-xl-4 {\n    padding-top: 1.5rem !important;\n  }\n  .pr-xl-4,\n  .px-xl-4 {\n    padding-right: 1.5rem !important;\n  }\n  .pb-xl-4,\n  .py-xl-4 {\n    padding-bottom: 1.5rem !important;\n  }\n  .pl-xl-4,\n  .px-xl-4 {\n    padding-left: 1.5rem !important;\n  }\n  .p-xl-5 {\n    padding: 3rem !important;\n  }\n  .pt-xl-5,\n  .py-xl-5 {\n    padding-top: 3rem !important;\n  }\n  .pr-xl-5,\n  .px-xl-5 {\n    padding-right: 3rem !important;\n  }\n  .pb-xl-5,\n  .py-xl-5 {\n    padding-bottom: 3rem !important;\n  }\n  .pl-xl-5,\n  .px-xl-5 {\n    padding-left: 3rem !important;\n  }\n  .m-xl-auto {\n    margin: auto !important;\n  }\n  .mt-xl-auto,\n  .my-xl-auto {\n    margin-top: auto !important;\n  }\n  .mr-xl-auto,\n  .mx-xl-auto {\n    margin-right: auto !important;\n  }\n  .mb-xl-auto,\n  .my-xl-auto {\n    margin-bottom: auto !important;\n  }\n  .ml-xl-auto,\n  .mx-xl-auto {\n    margin-left: auto !important;\n  }\n}\n\n.text-justify {\n  text-align: justify !important;\n}\n\n.text-nowrap {\n  white-space: nowrap !important;\n}\n\n.text-truncate {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n\n.text-left {\n  text-align: left !important;\n}\n\n.text-right {\n  text-align: right !important;\n}\n\n.text-center {\n  text-align: center !important;\n}\n\n@media (min-width: 576px) {\n  .text-sm-left {\n    text-align: left !important;\n  }\n  .text-sm-right {\n    text-align: right !important;\n  }\n  .text-sm-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 768px) {\n  .text-md-left {\n    text-align: left !important;\n  }\n  .text-md-right {\n    text-align: right !important;\n  }\n  .text-md-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 992px) {\n  .text-lg-left {\n    text-align: left !important;\n  }\n  .text-lg-right {\n    text-align: right !important;\n  }\n  .text-lg-center {\n    text-align: center !important;\n  }\n}\n\n@media (min-width: 1200px) {\n  .text-xl-left {\n    text-align: left !important;\n  }\n  .text-xl-right {\n    text-align: right !important;\n  }\n  .text-xl-center {\n    text-align: center !important;\n  }\n}\n\n.text-lowercase {\n  text-transform: lowercase !important;\n}\n\n.text-uppercase {\n  text-transform: uppercase !important;\n}\n\n.text-capitalize {\n  text-transform: capitalize !important;\n}\n\n.font-weight-light {\n  font-weight: 300 !important;\n}\n\n.font-weight-normal {\n  font-weight: 400 !important;\n}\n\n.font-weight-bold {\n  font-weight: 700 !important;\n}\n\n.font-italic {\n  font-style: italic !important;\n}\n\n.text-white {\n  color: #fff !important;\n}\n\n.text-primary {\n  color: #007bff !important;\n}\n\na.text-primary:focus, a.text-primary:hover {\n  color: #0062cc !important;\n}\n\n.text-secondary {\n  color: #868e96 !important;\n}\n\na.text-secondary:focus, a.text-secondary:hover {\n  color: #6c757d !important;\n}\n\n.text-success {\n  color: #28a745 !important;\n}\n\na.text-success:focus, a.text-success:hover {\n  color: #1e7e34 !important;\n}\n\n.text-info {\n  color: #17a2b8 !important;\n}\n\na.text-info:focus, a.text-info:hover {\n  color: #117a8b !important;\n}\n\n.text-warning {\n  color: #ffc107 !important;\n}\n\na.text-warning:focus, a.text-warning:hover {\n  color: #d39e00 !important;\n}\n\n.text-danger {\n  color: #dc3545 !important;\n}\n\na.text-danger:focus, a.text-danger:hover {\n  color: #bd2130 !important;\n}\n\n.text-light {\n  color: #f8f9fa !important;\n}\n\na.text-light:focus, a.text-light:hover {\n  color: #dae0e5 !important;\n}\n\n.text-dark {\n  color: #343a40 !important;\n}\n\na.text-dark:focus, a.text-dark:hover {\n  color: #1d2124 !important;\n}\n\n.text-muted {\n  color: #868e96 !important;\n}\n\n.text-hide {\n  font: 0/0 a;\n  color: transparent;\n  text-shadow: none;\n  background-color: transparent;\n  border: 0;\n}\n\n.visible {\n  visibility: visible !important;\n}\n\n.invisible {\n  visibility: hidden !important;\n}\n/*# sourceMappingURL=bootstrap.css.map */"
  },
  {
    "path": "public/frontend/plugins/bootstrap4/js/bootstrap.bundle.js",
    "content": "/*!\n  * Bootstrap v4.0.0-beta.2 (https://getbootstrap.com)\n  * Copyright 2011-2017 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n  */\nvar bootstrap = (function (exports,$) {\n'use strict';\n\n$ = $ && $.hasOwnProperty('default') ? $['default'] : $;\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.0.0-beta.2): util.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nvar Util = function () {\n  /**\n   * ------------------------------------------------------------------------\n   * Private TransitionEnd Helpers\n   * ------------------------------------------------------------------------\n   */\n  var transition = false;\n  var MAX_UID = 1000000;\n  var TransitionEndEvent = {\n    WebkitTransition: 'webkitTransitionEnd',\n    MozTransition: 'transitionend',\n    OTransition: 'oTransitionEnd otransitionend',\n    transition: 'transitionend' // shoutout AngusCroll (https://goo.gl/pxwQGp)\n\n  };\n\n  function toType(obj) {\n    return {}.toString.call(obj).match(/\\s([a-zA-Z]+)/)[1].toLowerCase();\n  }\n\n  function getSpecialTransitionEndEvent() {\n    return {\n      bindType: transition.end,\n      delegateType: transition.end,\n      handle: function handle(event) {\n        if ($(event.target).is(this)) {\n          return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params\n        }\n\n        return undefined; // eslint-disable-line no-undefined\n      }\n    };\n  }\n\n  function transitionEndTest() {\n    if (window.QUnit) {\n      return false;\n    }\n\n    var el = document.createElement('bootstrap');\n\n    for (var name in TransitionEndEvent) {\n      if (typeof el.style[name] !== 'undefined') {\n        return {\n          end: TransitionEndEvent[name]\n        };\n      }\n    }\n\n    return false;\n  }\n\n  function transitionEndEmulator(duration) {\n    var _this = this;\n\n    var called = false;\n    $(this).one(Util.TRANSITION_END, function () {\n      called = true;\n    });\n    setTimeout(function () {\n      if (!called) {\n        Util.triggerTransitionEnd(_this);\n      }\n    }, duration);\n    return this;\n  }\n\n  function setTransitionEndSupport() {\n    transition = transitionEndTest();\n    $.fn.emulateTransitionEnd = transitionEndEmulator;\n\n    if (Util.supportsTransitionEnd()) {\n      $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();\n    }\n  }\n  /**\n   * --------------------------------------------------------------------------\n   * Public Util Api\n   * --------------------------------------------------------------------------\n   */\n\n\n  var Util = {\n    TRANSITION_END: 'bsTransitionEnd',\n    getUID: function getUID(prefix) {\n      do {\n        // eslint-disable-next-line no-bitwise\n        prefix += ~~(Math.random() * MAX_UID); // \"~~\" acts like a faster Math.floor() here\n      } while (document.getElementById(prefix));\n\n      return prefix;\n    },\n    getSelectorFromElement: function getSelectorFromElement(element) {\n      var selector = element.getAttribute('data-target');\n\n      if (!selector || selector === '#') {\n        selector = element.getAttribute('href') || '';\n      }\n\n      try {\n        var $selector = $(document).find(selector);\n        return $selector.length > 0 ? selector : null;\n      } catch (error) {\n        return null;\n      }\n    },\n    reflow: function reflow(element) {\n      return element.offsetHeight;\n    },\n    triggerTransitionEnd: function triggerTransitionEnd(element) {\n      $(element).trigger(transition.end);\n    },\n    supportsTransitionEnd: function supportsTransitionEnd() {\n      return Boolean(transition);\n    },\n    isElement: function isElement(obj) {\n      return (obj[0] || obj).nodeType;\n    },\n    typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) {\n      for (var property in configTypes) {\n        if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n          var expectedTypes = configTypes[property];\n          var value = config[property];\n          var valueType = value && Util.isElement(value) ? 'element' : toType(value);\n\n          if (!new RegExp(expectedTypes).test(valueType)) {\n            throw new Error(componentName.toUpperCase() + \": \" + (\"Option \\\"\" + property + \"\\\" provided type \\\"\" + valueType + \"\\\" \") + (\"but expected type \\\"\" + expectedTypes + \"\\\".\"));\n          }\n        }\n      }\n    }\n  };\n  setTransitionEndSupport();\n  return Util;\n}($);\n\nfunction _defineProperties(target, props) {\n  for (var i = 0; i < props.length; i++) {\n    var descriptor = props[i];\n    descriptor.enumerable = descriptor.enumerable || false;\n    descriptor.configurable = true;\n    if (\"value\" in descriptor) descriptor.writable = true;\n    Object.defineProperty(target, descriptor.key, descriptor);\n  }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n  if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n  if (staticProps) _defineProperties(Constructor, staticProps);\n  return Constructor;\n}\n\nvar createClass = _createClass;\n\nfunction _inheritsLoose(subClass, superClass) {\n  subClass.prototype = Object.create(superClass.prototype);\n  subClass.prototype.constructor = subClass;\n  subClass.__proto__ = superClass;\n}\n\nvar inheritsLoose = _inheritsLoose;\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.0.0-beta.2): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nvar Alert = function () {\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  var NAME = 'alert';\n  var VERSION = '4.0.0-beta.2';\n  var DATA_KEY = 'bs.alert';\n  var EVENT_KEY = \".\" + DATA_KEY;\n  var DATA_API_KEY = '.data-api';\n  var JQUERY_NO_CONFLICT = $.fn[NAME];\n  var TRANSITION_DURATION = 150;\n  var Selector = {\n    DISMISS: '[data-dismiss=\"alert\"]'\n  };\n  var Event = {\n    CLOSE: \"close\" + EVENT_KEY,\n    CLOSED: \"closed\" + EVENT_KEY,\n    CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n  };\n  var ClassName = {\n    ALERT: 'alert',\n    FADE: 'fade',\n    SHOW: 'show'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Alert =\n  /*#__PURE__*/\n  function () {\n    function Alert(element) {\n      this._element = element;\n    } // getters\n\n\n    var _proto = Alert.prototype;\n\n    // public\n    _proto.close = function close(element) {\n      element = element || this._element;\n\n      var rootElement = this._getRootElement(element);\n\n      var customEvent = this._triggerCloseEvent(rootElement);\n\n      if (customEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._removeElement(rootElement);\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY);\n      this._element = null;\n    }; // private\n\n\n    _proto._getRootElement = function _getRootElement(element) {\n      var selector = Util.getSelectorFromElement(element);\n      var parent = false;\n\n      if (selector) {\n        parent = $(selector)[0];\n      }\n\n      if (!parent) {\n        parent = $(element).closest(\".\" + ClassName.ALERT)[0];\n      }\n\n      return parent;\n    };\n\n    _proto._triggerCloseEvent = function _triggerCloseEvent(element) {\n      var closeEvent = $.Event(Event.CLOSE);\n      $(element).trigger(closeEvent);\n      return closeEvent;\n    };\n\n    _proto._removeElement = function _removeElement(element) {\n      var _this = this;\n\n      $(element).removeClass(ClassName.SHOW);\n\n      if (!Util.supportsTransitionEnd() || !$(element).hasClass(ClassName.FADE)) {\n        this._destroyElement(element);\n\n        return;\n      }\n\n      $(element).one(Util.TRANSITION_END, function (event) {\n        return _this._destroyElement(element, event);\n      }).emulateTransitionEnd(TRANSITION_DURATION);\n    };\n\n    _proto._destroyElement = function _destroyElement(element) {\n      $(element).detach().trigger(Event.CLOSED).remove();\n    }; // static\n\n\n    Alert._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $element = $(this);\n        var data = $element.data(DATA_KEY);\n\n        if (!data) {\n          data = new Alert(this);\n          $element.data(DATA_KEY, data);\n        }\n\n        if (config === 'close') {\n          data[config](this);\n        }\n      });\n    };\n\n    Alert._handleDismiss = function _handleDismiss(alertInstance) {\n      return function (event) {\n        if (event) {\n          event.preventDefault();\n        }\n\n        alertInstance.close(this);\n      };\n    };\n\n    createClass(Alert, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION;\n      }\n    }]);\n    return Alert;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert()));\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME] = Alert._jQueryInterface;\n  $.fn[NAME].Constructor = Alert;\n\n  $.fn[NAME].noConflict = function () {\n    $.fn[NAME] = JQUERY_NO_CONFLICT;\n    return Alert._jQueryInterface;\n  };\n\n  return Alert;\n}($);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.0.0-beta.2): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nvar Button = function () {\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  var NAME = 'button';\n  var VERSION = '4.0.0-beta.2';\n  var DATA_KEY = 'bs.button';\n  var EVENT_KEY = \".\" + DATA_KEY;\n  var DATA_API_KEY = '.data-api';\n  var JQUERY_NO_CONFLICT = $.fn[NAME];\n  var ClassName = {\n    ACTIVE: 'active',\n    BUTTON: 'btn',\n    FOCUS: 'focus'\n  };\n  var Selector = {\n    DATA_TOGGLE_CARROT: '[data-toggle^=\"button\"]',\n    DATA_TOGGLE: '[data-toggle=\"buttons\"]',\n    INPUT: 'input',\n    ACTIVE: '.active',\n    BUTTON: '.btn'\n  };\n  var Event = {\n    CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY,\n    FOCUS_BLUR_DATA_API: \"focus\" + EVENT_KEY + DATA_API_KEY + \" \" + (\"blur\" + EVENT_KEY + DATA_API_KEY)\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Button =\n  /*#__PURE__*/\n  function () {\n    function Button(element) {\n      this._element = element;\n    } // getters\n\n\n    var _proto = Button.prototype;\n\n    // public\n    _proto.toggle = function toggle() {\n      var triggerChangeEvent = true;\n      var addAriaPressed = true;\n      var rootElement = $(this._element).closest(Selector.DATA_TOGGLE)[0];\n\n      if (rootElement) {\n        var input = $(this._element).find(Selector.INPUT)[0];\n\n        if (input) {\n          if (input.type === 'radio') {\n            if (input.checked && $(this._element).hasClass(ClassName.ACTIVE)) {\n              triggerChangeEvent = false;\n            } else {\n              var activeElement = $(rootElement).find(Selector.ACTIVE)[0];\n\n              if (activeElement) {\n                $(activeElement).removeClass(ClassName.ACTIVE);\n              }\n            }\n          }\n\n          if (triggerChangeEvent) {\n            if (input.hasAttribute('disabled') || rootElement.hasAttribute('disabled') || input.classList.contains('disabled') || rootElement.classList.contains('disabled')) {\n              return;\n            }\n\n            input.checked = !$(this._element).hasClass(ClassName.ACTIVE);\n            $(input).trigger('change');\n          }\n\n          input.focus();\n          addAriaPressed = false;\n        }\n      }\n\n      if (addAriaPressed) {\n        this._element.setAttribute('aria-pressed', !$(this._element).hasClass(ClassName.ACTIVE));\n      }\n\n      if (triggerChangeEvent) {\n        $(this._element).toggleClass(ClassName.ACTIVE);\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY);\n      this._element = null;\n    }; // static\n\n\n    Button._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY);\n\n        if (!data) {\n          data = new Button(this);\n          $(this).data(DATA_KEY, data);\n        }\n\n        if (config === 'toggle') {\n          data[config]();\n        }\n      });\n    };\n\n    createClass(Button, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION;\n      }\n    }]);\n    return Button;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) {\n    event.preventDefault();\n    var button = event.target;\n\n    if (!$(button).hasClass(ClassName.BUTTON)) {\n      button = $(button).closest(Selector.BUTTON);\n    }\n\n    Button._jQueryInterface.call($(button), 'toggle');\n  }).on(Event.FOCUS_BLUR_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) {\n    var button = $(event.target).closest(Selector.BUTTON)[0];\n    $(button).toggleClass(ClassName.FOCUS, /^focus(in)?$/.test(event.type));\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME] = Button._jQueryInterface;\n  $.fn[NAME].Constructor = Button;\n\n  $.fn[NAME].noConflict = function () {\n    $.fn[NAME] = JQUERY_NO_CONFLICT;\n    return Button._jQueryInterface;\n  };\n\n  return Button;\n}($);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.0.0-beta.2): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nvar Carousel = function () {\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  var NAME = 'carousel';\n  var VERSION = '4.0.0-beta.2';\n  var DATA_KEY = 'bs.carousel';\n  var EVENT_KEY = \".\" + DATA_KEY;\n  var DATA_API_KEY = '.data-api';\n  var JQUERY_NO_CONFLICT = $.fn[NAME];\n  var TRANSITION_DURATION = 600;\n  var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key\n\n  var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key\n\n  var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\n  var Default = {\n    interval: 5000,\n    keyboard: true,\n    slide: false,\n    pause: 'hover',\n    wrap: true\n  };\n  var DefaultType = {\n    interval: '(number|boolean)',\n    keyboard: 'boolean',\n    slide: '(boolean|string)',\n    pause: '(string|boolean)',\n    wrap: 'boolean'\n  };\n  var Direction = {\n    NEXT: 'next',\n    PREV: 'prev',\n    LEFT: 'left',\n    RIGHT: 'right'\n  };\n  var Event = {\n    SLIDE: \"slide\" + EVENT_KEY,\n    SLID: \"slid\" + EVENT_KEY,\n    KEYDOWN: \"keydown\" + EVENT_KEY,\n    MOUSEENTER: \"mouseenter\" + EVENT_KEY,\n    MOUSELEAVE: \"mouseleave\" + EVENT_KEY,\n    TOUCHEND: \"touchend\" + EVENT_KEY,\n    LOAD_DATA_API: \"load\" + EVENT_KEY + DATA_API_KEY,\n    CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n  };\n  var ClassName = {\n    CAROUSEL: 'carousel',\n    ACTIVE: 'active',\n    SLIDE: 'slide',\n    RIGHT: 'carousel-item-right',\n    LEFT: 'carousel-item-left',\n    NEXT: 'carousel-item-next',\n    PREV: 'carousel-item-prev',\n    ITEM: 'carousel-item'\n  };\n  var Selector = {\n    ACTIVE: '.active',\n    ACTIVE_ITEM: '.active.carousel-item',\n    ITEM: '.carousel-item',\n    NEXT_PREV: '.carousel-item-next, .carousel-item-prev',\n    INDICATORS: '.carousel-indicators',\n    DATA_SLIDE: '[data-slide], [data-slide-to]',\n    DATA_RIDE: '[data-ride=\"carousel\"]'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Carousel =\n  /*#__PURE__*/\n  function () {\n    function Carousel(element, config) {\n      this._items = null;\n      this._interval = null;\n      this._activeElement = null;\n      this._isPaused = false;\n      this._isSliding = false;\n      this.touchTimeout = null;\n      this._config = this._getConfig(config);\n      this._element = $(element)[0];\n      this._indicatorsElement = $(this._element).find(Selector.INDICATORS)[0];\n\n      this._addEventListeners();\n    } // getters\n\n\n    var _proto = Carousel.prototype;\n\n    // public\n    _proto.next = function next() {\n      if (!this._isSliding) {\n        this._slide(Direction.NEXT);\n      }\n    };\n\n    _proto.nextWhenVisible = function nextWhenVisible() {\n      // Don't call next when the page isn't visible\n      // or the carousel or its parent isn't visible\n      if (!document.hidden && $(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden') {\n        this.next();\n      }\n    };\n\n    _proto.prev = function prev() {\n      if (!this._isSliding) {\n        this._slide(Direction.PREV);\n      }\n    };\n\n    _proto.pause = function pause(event) {\n      if (!event) {\n        this._isPaused = true;\n      }\n\n      if ($(this._element).find(Selector.NEXT_PREV)[0] && Util.supportsTransitionEnd()) {\n        Util.triggerTransitionEnd(this._element);\n        this.cycle(true);\n      }\n\n      clearInterval(this._interval);\n      this._interval = null;\n    };\n\n    _proto.cycle = function cycle(event) {\n      if (!event) {\n        this._isPaused = false;\n      }\n\n      if (this._interval) {\n        clearInterval(this._interval);\n        this._interval = null;\n      }\n\n      if (this._config.interval && !this._isPaused) {\n        this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n      }\n    };\n\n    _proto.to = function to(index) {\n      var _this = this;\n\n      this._activeElement = $(this._element).find(Selector.ACTIVE_ITEM)[0];\n\n      var activeIndex = this._getItemIndex(this._activeElement);\n\n      if (index > this._items.length - 1 || index < 0) {\n        return;\n      }\n\n      if (this._isSliding) {\n        $(this._element).one(Event.SLID, function () {\n          return _this.to(index);\n        });\n        return;\n      }\n\n      if (activeIndex === index) {\n        this.pause();\n        this.cycle();\n        return;\n      }\n\n      var direction = index > activeIndex ? Direction.NEXT : Direction.PREV;\n\n      this._slide(direction, this._items[index]);\n    };\n\n    _proto.dispose = function dispose() {\n      $(this._element).off(EVENT_KEY);\n      $.removeData(this._element, DATA_KEY);\n      this._items = null;\n      this._config = null;\n      this._element = null;\n      this._interval = null;\n      this._isPaused = null;\n      this._isSliding = null;\n      this._activeElement = null;\n      this._indicatorsElement = null;\n    }; // private\n\n\n    _proto._getConfig = function _getConfig(config) {\n      config = $.extend({}, Default, config);\n      Util.typeCheckConfig(NAME, config, DefaultType);\n      return config;\n    };\n\n    _proto._addEventListeners = function _addEventListeners() {\n      var _this2 = this;\n\n      if (this._config.keyboard) {\n        $(this._element).on(Event.KEYDOWN, function (event) {\n          return _this2._keydown(event);\n        });\n      }\n\n      if (this._config.pause === 'hover') {\n        $(this._element).on(Event.MOUSEENTER, function (event) {\n          return _this2.pause(event);\n        }).on(Event.MOUSELEAVE, function (event) {\n          return _this2.cycle(event);\n        });\n\n        if ('ontouchstart' in document.documentElement) {\n          // if it's a touch-enabled device, mouseenter/leave are fired as\n          // part of the mouse compatibility events on first tap - the carousel\n          // would stop cycling until user tapped out of it;\n          // here, we listen for touchend, explicitly pause the carousel\n          // (as if it's the second time we tap on it, mouseenter compat event\n          // is NOT fired) and after a timeout (to allow for mouse compatibility\n          // events to fire) we explicitly restart cycling\n          $(this._element).on(Event.TOUCHEND, function () {\n            _this2.pause();\n\n            if (_this2.touchTimeout) {\n              clearTimeout(_this2.touchTimeout);\n            }\n\n            _this2.touchTimeout = setTimeout(function (event) {\n              return _this2.cycle(event);\n            }, TOUCHEVENT_COMPAT_WAIT + _this2._config.interval);\n          });\n        }\n      }\n    };\n\n    _proto._keydown = function _keydown(event) {\n      if (/input|textarea/i.test(event.target.tagName)) {\n        return;\n      }\n\n      switch (event.which) {\n        case ARROW_LEFT_KEYCODE:\n          event.preventDefault();\n          this.prev();\n          break;\n\n        case ARROW_RIGHT_KEYCODE:\n          event.preventDefault();\n          this.next();\n          break;\n\n        default:\n          return;\n      }\n    };\n\n    _proto._getItemIndex = function _getItemIndex(element) {\n      this._items = $.makeArray($(element).parent().find(Selector.ITEM));\n      return this._items.indexOf(element);\n    };\n\n    _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) {\n      var isNextDirection = direction === Direction.NEXT;\n      var isPrevDirection = direction === Direction.PREV;\n\n      var activeIndex = this._getItemIndex(activeElement);\n\n      var lastItemIndex = this._items.length - 1;\n      var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex;\n\n      if (isGoingToWrap && !this._config.wrap) {\n        return activeElement;\n      }\n\n      var delta = direction === Direction.PREV ? -1 : 1;\n      var itemIndex = (activeIndex + delta) % this._items.length;\n      return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];\n    };\n\n    _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) {\n      var targetIndex = this._getItemIndex(relatedTarget);\n\n      var fromIndex = this._getItemIndex($(this._element).find(Selector.ACTIVE_ITEM)[0]);\n\n      var slideEvent = $.Event(Event.SLIDE, {\n        relatedTarget: relatedTarget,\n        direction: eventDirectionName,\n        from: fromIndex,\n        to: targetIndex\n      });\n      $(this._element).trigger(slideEvent);\n      return slideEvent;\n    };\n\n    _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) {\n      if (this._indicatorsElement) {\n        $(this._indicatorsElement).find(Selector.ACTIVE).removeClass(ClassName.ACTIVE);\n\n        var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];\n\n        if (nextIndicator) {\n          $(nextIndicator).addClass(ClassName.ACTIVE);\n        }\n      }\n    };\n\n    _proto._slide = function _slide(direction, element) {\n      var _this3 = this;\n\n      var activeElement = $(this._element).find(Selector.ACTIVE_ITEM)[0];\n\n      var activeElementIndex = this._getItemIndex(activeElement);\n\n      var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement);\n\n      var nextElementIndex = this._getItemIndex(nextElement);\n\n      var isCycling = Boolean(this._interval);\n      var directionalClassName;\n      var orderClassName;\n      var eventDirectionName;\n\n      if (direction === Direction.NEXT) {\n        directionalClassName = ClassName.LEFT;\n        orderClassName = ClassName.NEXT;\n        eventDirectionName = Direction.LEFT;\n      } else {\n        directionalClassName = ClassName.RIGHT;\n        orderClassName = ClassName.PREV;\n        eventDirectionName = Direction.RIGHT;\n      }\n\n      if (nextElement && $(nextElement).hasClass(ClassName.ACTIVE)) {\n        this._isSliding = false;\n        return;\n      }\n\n      var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n      if (slideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (!activeElement || !nextElement) {\n        // some weirdness is happening, so we bail\n        return;\n      }\n\n      this._isSliding = true;\n\n      if (isCycling) {\n        this.pause();\n      }\n\n      this._setActiveIndicatorElement(nextElement);\n\n      var slidEvent = $.Event(Event.SLID, {\n        relatedTarget: nextElement,\n        direction: eventDirectionName,\n        from: activeElementIndex,\n        to: nextElementIndex\n      });\n\n      if (Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.SLIDE)) {\n        $(nextElement).addClass(orderClassName);\n        Util.reflow(nextElement);\n        $(activeElement).addClass(directionalClassName);\n        $(nextElement).addClass(directionalClassName);\n        $(activeElement).one(Util.TRANSITION_END, function () {\n          $(nextElement).removeClass(directionalClassName + \" \" + orderClassName).addClass(ClassName.ACTIVE);\n          $(activeElement).removeClass(ClassName.ACTIVE + \" \" + orderClassName + \" \" + directionalClassName);\n          _this3._isSliding = false;\n          setTimeout(function () {\n            return $(_this3._element).trigger(slidEvent);\n          }, 0);\n        }).emulateTransitionEnd(TRANSITION_DURATION);\n      } else {\n        $(activeElement).removeClass(ClassName.ACTIVE);\n        $(nextElement).addClass(ClassName.ACTIVE);\n        this._isSliding = false;\n        $(this._element).trigger(slidEvent);\n      }\n\n      if (isCycling) {\n        this.cycle();\n      }\n    }; // static\n\n\n    Carousel._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY);\n\n        var _config = $.extend({}, Default, $(this).data());\n\n        if (typeof config === 'object') {\n          $.extend(_config, config);\n        }\n\n        var action = typeof config === 'string' ? config : _config.slide;\n\n        if (!data) {\n          data = new Carousel(this, _config);\n          $(this).data(DATA_KEY, data);\n        }\n\n        if (typeof config === 'number') {\n          data.to(config);\n        } else if (typeof action === 'string') {\n          if (typeof data[action] === 'undefined') {\n            throw new Error(\"No method named \\\"\" + action + \"\\\"\");\n          }\n\n          data[action]();\n        } else if (_config.interval) {\n          data.pause();\n          data.cycle();\n        }\n      });\n    };\n\n    Carousel._dataApiClickHandler = function _dataApiClickHandler(event) {\n      var selector = Util.getSelectorFromElement(this);\n\n      if (!selector) {\n        return;\n      }\n\n      var target = $(selector)[0];\n\n      if (!target || !$(target).hasClass(ClassName.CAROUSEL)) {\n        return;\n      }\n\n      var config = $.extend({}, $(target).data(), $(this).data());\n      var slideIndex = this.getAttribute('data-slide-to');\n\n      if (slideIndex) {\n        config.interval = false;\n      }\n\n      Carousel._jQueryInterface.call($(target), config);\n\n      if (slideIndex) {\n        $(target).data(DATA_KEY).to(slideIndex);\n      }\n\n      event.preventDefault();\n    };\n\n    createClass(Carousel, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default;\n      }\n    }]);\n    return Carousel;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event.CLICK_DATA_API, Selector.DATA_SLIDE, Carousel._dataApiClickHandler);\n  $(window).on(Event.LOAD_DATA_API, function () {\n    $(Selector.DATA_RIDE).each(function () {\n      var $carousel = $(this);\n\n      Carousel._jQueryInterface.call($carousel, $carousel.data());\n    });\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME] = Carousel._jQueryInterface;\n  $.fn[NAME].Constructor = Carousel;\n\n  $.fn[NAME].noConflict = function () {\n    $.fn[NAME] = JQUERY_NO_CONFLICT;\n    return Carousel._jQueryInterface;\n  };\n\n  return Carousel;\n}($);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.0.0-beta.2): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nvar Collapse = function () {\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  var NAME = 'collapse';\n  var VERSION = '4.0.0-beta.2';\n  var DATA_KEY = 'bs.collapse';\n  var EVENT_KEY = \".\" + DATA_KEY;\n  var DATA_API_KEY = '.data-api';\n  var JQUERY_NO_CONFLICT = $.fn[NAME];\n  var TRANSITION_DURATION = 600;\n  var Default = {\n    toggle: true,\n    parent: ''\n  };\n  var DefaultType = {\n    toggle: 'boolean',\n    parent: '(string|element)'\n  };\n  var Event = {\n    SHOW: \"show\" + EVENT_KEY,\n    SHOWN: \"shown\" + EVENT_KEY,\n    HIDE: \"hide\" + EVENT_KEY,\n    HIDDEN: \"hidden\" + EVENT_KEY,\n    CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n  };\n  var ClassName = {\n    SHOW: 'show',\n    COLLAPSE: 'collapse',\n    COLLAPSING: 'collapsing',\n    COLLAPSED: 'collapsed'\n  };\n  var Dimension = {\n    WIDTH: 'width',\n    HEIGHT: 'height'\n  };\n  var Selector = {\n    ACTIVES: '.show, .collapsing',\n    DATA_TOGGLE: '[data-toggle=\"collapse\"]'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Collapse =\n  /*#__PURE__*/\n  function () {\n    function Collapse(element, config) {\n      this._isTransitioning = false;\n      this._element = element;\n      this._config = this._getConfig(config);\n      this._triggerArray = $.makeArray($(\"[data-toggle=\\\"collapse\\\"][href=\\\"#\" + element.id + \"\\\"],\" + (\"[data-toggle=\\\"collapse\\\"][data-target=\\\"#\" + element.id + \"\\\"]\")));\n      var tabToggles = $(Selector.DATA_TOGGLE);\n\n      for (var i = 0; i < tabToggles.length; i++) {\n        var elem = tabToggles[i];\n        var selector = Util.getSelectorFromElement(elem);\n\n        if (selector !== null && $(selector).filter(element).length > 0) {\n          this._triggerArray.push(elem);\n        }\n      }\n\n      this._parent = this._config.parent ? this._getParent() : null;\n\n      if (!this._config.parent) {\n        this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n      }\n\n      if (this._config.toggle) {\n        this.toggle();\n      }\n    } // getters\n\n\n    var _proto = Collapse.prototype;\n\n    // public\n    _proto.toggle = function toggle() {\n      if ($(this._element).hasClass(ClassName.SHOW)) {\n        this.hide();\n      } else {\n        this.show();\n      }\n    };\n\n    _proto.show = function show() {\n      var _this = this;\n\n      if (this._isTransitioning || $(this._element).hasClass(ClassName.SHOW)) {\n        return;\n      }\n\n      var actives;\n      var activesData;\n\n      if (this._parent) {\n        actives = $.makeArray($(this._parent).children().children(Selector.ACTIVES));\n\n        if (!actives.length) {\n          actives = null;\n        }\n      }\n\n      if (actives) {\n        activesData = $(actives).data(DATA_KEY);\n\n        if (activesData && activesData._isTransitioning) {\n          return;\n        }\n      }\n\n      var startEvent = $.Event(Event.SHOW);\n      $(this._element).trigger(startEvent);\n\n      if (startEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (actives) {\n        Collapse._jQueryInterface.call($(actives), 'hide');\n\n        if (!activesData) {\n          $(actives).data(DATA_KEY, null);\n        }\n      }\n\n      var dimension = this._getDimension();\n\n      $(this._element).removeClass(ClassName.COLLAPSE).addClass(ClassName.COLLAPSING);\n      this._element.style[dimension] = 0;\n\n      if (this._triggerArray.length) {\n        $(this._triggerArray).removeClass(ClassName.COLLAPSED).attr('aria-expanded', true);\n      }\n\n      this.setTransitioning(true);\n\n      var complete = function complete() {\n        $(_this._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).addClass(ClassName.SHOW);\n        _this._element.style[dimension] = '';\n\n        _this.setTransitioning(false);\n\n        $(_this._element).trigger(Event.SHOWN);\n      };\n\n      if (!Util.supportsTransitionEnd()) {\n        complete();\n        return;\n      }\n\n      var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n      var scrollSize = \"scroll\" + capitalizedDimension;\n      $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION);\n      this._element.style[dimension] = this._element[scrollSize] + \"px\";\n    };\n\n    _proto.hide = function hide() {\n      var _this2 = this;\n\n      if (this._isTransitioning || !$(this._element).hasClass(ClassName.SHOW)) {\n        return;\n      }\n\n      var startEvent = $.Event(Event.HIDE);\n      $(this._element).trigger(startEvent);\n\n      if (startEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      var dimension = this._getDimension();\n\n      this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + \"px\";\n      Util.reflow(this._element);\n      $(this._element).addClass(ClassName.COLLAPSING).removeClass(ClassName.COLLAPSE).removeClass(ClassName.SHOW);\n\n      if (this._triggerArray.length) {\n        for (var i = 0; i < this._triggerArray.length; i++) {\n          var trigger = this._triggerArray[i];\n          var selector = Util.getSelectorFromElement(trigger);\n\n          if (selector !== null) {\n            var $elem = $(selector);\n\n            if (!$elem.hasClass(ClassName.SHOW)) {\n              $(trigger).addClass(ClassName.COLLAPSED).attr('aria-expanded', false);\n            }\n          }\n        }\n      }\n\n      this.setTransitioning(true);\n\n      var complete = function complete() {\n        _this2.setTransitioning(false);\n\n        $(_this2._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).trigger(Event.HIDDEN);\n      };\n\n      this._element.style[dimension] = '';\n\n      if (!Util.supportsTransitionEnd()) {\n        complete();\n        return;\n      }\n\n      $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION);\n    };\n\n    _proto.setTransitioning = function setTransitioning(isTransitioning) {\n      this._isTransitioning = isTransitioning;\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY);\n      this._config = null;\n      this._parent = null;\n      this._element = null;\n      this._triggerArray = null;\n      this._isTransitioning = null;\n    }; // private\n\n\n    _proto._getConfig = function _getConfig(config) {\n      config = $.extend({}, Default, config);\n      config.toggle = Boolean(config.toggle); // coerce string values\n\n      Util.typeCheckConfig(NAME, config, DefaultType);\n      return config;\n    };\n\n    _proto._getDimension = function _getDimension() {\n      var hasWidth = $(this._element).hasClass(Dimension.WIDTH);\n      return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT;\n    };\n\n    _proto._getParent = function _getParent() {\n      var _this3 = this;\n\n      var parent = null;\n\n      if (Util.isElement(this._config.parent)) {\n        parent = this._config.parent; // it's a jQuery object\n\n        if (typeof this._config.parent.jquery !== 'undefined') {\n          parent = this._config.parent[0];\n        }\n      } else {\n        parent = $(this._config.parent)[0];\n      }\n\n      var selector = \"[data-toggle=\\\"collapse\\\"][data-parent=\\\"\" + this._config.parent + \"\\\"]\";\n      $(parent).find(selector).each(function (i, element) {\n        _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);\n      });\n      return parent;\n    };\n\n    _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {\n      if (element) {\n        var isOpen = $(element).hasClass(ClassName.SHOW);\n\n        if (triggerArray.length) {\n          $(triggerArray).toggleClass(ClassName.COLLAPSED, !isOpen).attr('aria-expanded', isOpen);\n        }\n      }\n    }; // static\n\n\n    Collapse._getTargetFromElement = function _getTargetFromElement(element) {\n      var selector = Util.getSelectorFromElement(element);\n      return selector ? $(selector)[0] : null;\n    };\n\n    Collapse._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $this = $(this);\n        var data = $this.data(DATA_KEY);\n\n        var _config = $.extend({}, Default, $this.data(), typeof config === 'object' && config);\n\n        if (!data && _config.toggle && /show|hide/.test(config)) {\n          _config.toggle = false;\n        }\n\n        if (!data) {\n          data = new Collapse(this, _config);\n          $this.data(DATA_KEY, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new Error(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    createClass(Collapse, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default;\n      }\n    }]);\n    return Collapse;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n    if (event.currentTarget.tagName === 'A') {\n      event.preventDefault();\n    }\n\n    var $trigger = $(this);\n    var selector = Util.getSelectorFromElement(this);\n    $(selector).each(function () {\n      var $target = $(this);\n      var data = $target.data(DATA_KEY);\n      var config = data ? 'toggle' : $trigger.data();\n\n      Collapse._jQueryInterface.call($target, config);\n    });\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME] = Collapse._jQueryInterface;\n  $.fn[NAME].Constructor = Collapse;\n\n  $.fn[NAME].noConflict = function () {\n    $.fn[NAME] = JQUERY_NO_CONFLICT;\n    return Collapse._jQueryInterface;\n  };\n\n  return Collapse;\n}($);\n\n/**!\n * @fileOverview Kickass library to create and place poppers near their reference elements.\n * @version 1.12.5\n * @license\n * Copyright (c) 2016 Federico Zivolo and contributors\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 all\n * 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 THE\n * SOFTWARE.\n */\nvar nativeHints = ['native code', '[object MutationObserverConstructor]'];\n\n/**\n * Determine if a function is implemented natively (as opposed to a polyfill).\n * @method\n * @memberof Popper.Utils\n * @argument {Function | undefined} fn the function to check\n * @returns {Boolean}\n */\nvar isNative = (function (fn) {\n  return nativeHints.some(function (hint) {\n    return (fn || '').toString().indexOf(hint) > -1;\n  });\n});\n\nvar isBrowser = typeof window !== 'undefined';\nvar longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\nvar timeoutDuration = 0;\nfor (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n  if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n    timeoutDuration = 1;\n    break;\n  }\n}\n\nfunction microtaskDebounce(fn) {\n  var scheduled = false;\n  var i = 0;\n  var elem = document.createElement('span');\n\n  // MutationObserver provides a mechanism for scheduling microtasks, which\n  // are scheduled *before* the next task. This gives us a way to debounce\n  // a function but ensure it's called *before* the next paint.\n  var observer = new MutationObserver(function () {\n    fn();\n    scheduled = false;\n  });\n\n  observer.observe(elem, { attributes: true });\n\n  return function () {\n    if (!scheduled) {\n      scheduled = true;\n      elem.setAttribute('x-index', i);\n      i = i + 1; // don't use compund (+=) because it doesn't get optimized in V8\n    }\n  };\n}\n\nfunction taskDebounce(fn) {\n  var scheduled = false;\n  return function () {\n    if (!scheduled) {\n      scheduled = true;\n      setTimeout(function () {\n        scheduled = false;\n        fn();\n      }, timeoutDuration);\n    }\n  };\n}\n\n// It's common for MutationObserver polyfills to be seen in the wild, however\n// these rely on Mutation Events which only occur when an element is connected\n// to the DOM. The algorithm used in this module does not use a connected element,\n// and so we must ensure that a *native* MutationObserver is available.\nvar supportsNativeMutationObserver = isBrowser && isNative(window.MutationObserver);\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nvar debounce = supportsNativeMutationObserver ? microtaskDebounce : taskDebounce;\n\n/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nfunction isFunction(functionToCheck) {\n  var getType = {};\n  return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n}\n\n/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nfunction getStyleComputedProperty(element, property) {\n  if (element.nodeType !== 1) {\n    return [];\n  }\n  // NOTE: 1 DOM access here\n  var css = window.getComputedStyle(element, null);\n  return property ? css[property] : css;\n}\n\n/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nfunction getParentNode(element) {\n  if (element.nodeName === 'HTML') {\n    return element;\n  }\n  return element.parentNode || element.host;\n}\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nfunction getScrollParent(element) {\n  // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n  if (!element || ['HTML', 'BODY', '#document'].indexOf(element.nodeName) !== -1) {\n    return window.document.body;\n  }\n\n  // Firefox want us to check `-x` and `-y` variations as well\n\n  var _getStyleComputedProp = getStyleComputedProperty(element),\n      overflow = _getStyleComputedProp.overflow,\n      overflowX = _getStyleComputedProp.overflowX,\n      overflowY = _getStyleComputedProp.overflowY;\n\n  if (/(auto|scroll)/.test(overflow + overflowY + overflowX)) {\n    return element;\n  }\n\n  return getScrollParent(getParentNode(element));\n}\n\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nfunction getOffsetParent(element) {\n  // NOTE: 1 DOM access here\n  var offsetParent = element && element.offsetParent;\n  var nodeName = offsetParent && offsetParent.nodeName;\n\n  if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n    return window.document.documentElement;\n  }\n\n  // .offsetParent will return the closest TD or TABLE in case\n  // no offsetParent is present, I hate this job...\n  if (['TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {\n    return getOffsetParent(offsetParent);\n  }\n\n  return offsetParent;\n}\n\nfunction isOffsetContainer(element) {\n  var nodeName = element.nodeName;\n\n  if (nodeName === 'BODY') {\n    return false;\n  }\n  return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;\n}\n\n/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nfunction getRoot(node) {\n  if (node.parentNode !== null) {\n    return getRoot(node.parentNode);\n  }\n\n  return node;\n}\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nfunction findCommonOffsetParent(element1, element2) {\n  // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n  if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n    return window.document.documentElement;\n  }\n\n  // Here we make sure to give as \"start\" the element that comes first in the DOM\n  var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n  var start = order ? element1 : element2;\n  var end = order ? element2 : element1;\n\n  // Get common ancestor container\n  var range = document.createRange();\n  range.setStart(start, 0);\n  range.setEnd(end, 0);\n  var commonAncestorContainer = range.commonAncestorContainer;\n\n  // Both nodes are inside #document\n\n  if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {\n    if (isOffsetContainer(commonAncestorContainer)) {\n      return commonAncestorContainer;\n    }\n\n    return getOffsetParent(commonAncestorContainer);\n  }\n\n  // one of the nodes is inside shadowDOM, find which one\n  var element1root = getRoot(element1);\n  if (element1root.host) {\n    return findCommonOffsetParent(element1root.host, element2);\n  } else {\n    return findCommonOffsetParent(element1, getRoot(element2).host);\n  }\n}\n\n/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nfunction getScroll(element) {\n  var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\n\n  var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n  var nodeName = element.nodeName;\n\n  if (nodeName === 'BODY' || nodeName === 'HTML') {\n    var html = window.document.documentElement;\n    var scrollingElement = window.document.scrollingElement || html;\n    return scrollingElement[upperSide];\n  }\n\n  return element[upperSide];\n}\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nfunction includeScroll(rect, element) {\n  var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n  var scrollTop = getScroll(element, 'top');\n  var scrollLeft = getScroll(element, 'left');\n  var modifier = subtract ? -1 : 1;\n  rect.top += scrollTop * modifier;\n  rect.bottom += scrollTop * modifier;\n  rect.left += scrollLeft * modifier;\n  rect.right += scrollLeft * modifier;\n  return rect;\n}\n\n/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nfunction getBordersSize(styles, axis) {\n  var sideA = axis === 'x' ? 'Left' : 'Top';\n  var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n  return +styles['border' + sideA + 'Width'].split('px')[0] + +styles['border' + sideB + 'Width'].split('px')[0];\n}\n\n/**\n * Tells if you are running Internet Explorer 10\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean} isIE10\n */\nvar isIE10 = undefined;\n\nvar isIE10$1 = function () {\n  if (isIE10 === undefined) {\n    isIE10 = navigator.appVersion.indexOf('MSIE 10') !== -1;\n  }\n  return isIE10;\n};\n\nfunction getSize(axis, body, html, computedStyle) {\n  return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE10$1() ? html['offset' + axis] + computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')] + computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')] : 0);\n}\n\nfunction getWindowSizes() {\n  var body = window.document.body;\n  var html = window.document.documentElement;\n  var computedStyle = isIE10$1() && window.getComputedStyle(html);\n\n  return {\n    height: getSize('Height', body, html, computedStyle),\n    width: getSize('Width', body, html, computedStyle)\n  };\n}\n\nvar classCallCheck = function (instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n};\n\nvar createClass$1 = function () {\n  function defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  return function (Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  };\n}();\n\n\n\n\n\nvar defineProperty = function (obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n};\n\nvar _extends$1 = 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\n/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nfunction getClientRect(offsets) {\n  return _extends$1({}, offsets, {\n    right: offsets.left + offsets.width,\n    bottom: offsets.top + offsets.height\n  });\n}\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nfunction getBoundingClientRect(element) {\n  var rect = {};\n\n  // IE10 10 FIX: Please, don't ask, the element isn't\n  // considered in DOM in some circumstances...\n  // This isn't reproducible in IE10 compatibility mode of IE11\n  if (isIE10$1()) {\n    try {\n      rect = element.getBoundingClientRect();\n      var scrollTop = getScroll(element, 'top');\n      var scrollLeft = getScroll(element, 'left');\n      rect.top += scrollTop;\n      rect.left += scrollLeft;\n      rect.bottom += scrollTop;\n      rect.right += scrollLeft;\n    } catch (err) {}\n  } else {\n    rect = element.getBoundingClientRect();\n  }\n\n  var result = {\n    left: rect.left,\n    top: rect.top,\n    width: rect.right - rect.left,\n    height: rect.bottom - rect.top\n  };\n\n  // subtract scrollbar size from sizes\n  var sizes = element.nodeName === 'HTML' ? getWindowSizes() : {};\n  var width = sizes.width || element.clientWidth || result.right - result.left;\n  var height = sizes.height || element.clientHeight || result.bottom - result.top;\n\n  var horizScrollbar = element.offsetWidth - width;\n  var vertScrollbar = element.offsetHeight - height;\n\n  // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n  // we make this check conditional for performance reasons\n  if (horizScrollbar || vertScrollbar) {\n    var styles = getStyleComputedProperty(element);\n    horizScrollbar -= getBordersSize(styles, 'x');\n    vertScrollbar -= getBordersSize(styles, 'y');\n\n    result.width -= horizScrollbar;\n    result.height -= vertScrollbar;\n  }\n\n  return getClientRect(result);\n}\n\nfunction getOffsetRectRelativeToArbitraryNode(children, parent) {\n  var isIE10 = isIE10$1();\n  var isHTML = parent.nodeName === 'HTML';\n  var childrenRect = getBoundingClientRect(children);\n  var parentRect = getBoundingClientRect(parent);\n  var scrollParent = getScrollParent(children);\n\n  var styles = getStyleComputedProperty(parent);\n  var borderTopWidth = +styles.borderTopWidth.split('px')[0];\n  var borderLeftWidth = +styles.borderLeftWidth.split('px')[0];\n\n  var offsets = getClientRect({\n    top: childrenRect.top - parentRect.top - borderTopWidth,\n    left: childrenRect.left - parentRect.left - borderLeftWidth,\n    width: childrenRect.width,\n    height: childrenRect.height\n  });\n  offsets.marginTop = 0;\n  offsets.marginLeft = 0;\n\n  // Subtract margins of documentElement in case it's being used as parent\n  // we do this only on HTML because it's the only element that behaves\n  // differently when margins are applied to it. The margins are included in\n  // the box of the documentElement, in the other cases not.\n  if (!isIE10 && isHTML) {\n    var marginTop = +styles.marginTop.split('px')[0];\n    var marginLeft = +styles.marginLeft.split('px')[0];\n\n    offsets.top -= borderTopWidth - marginTop;\n    offsets.bottom -= borderTopWidth - marginTop;\n    offsets.left -= borderLeftWidth - marginLeft;\n    offsets.right -= borderLeftWidth - marginLeft;\n\n    // Attach marginTop and marginLeft because in some circumstances we may need them\n    offsets.marginTop = marginTop;\n    offsets.marginLeft = marginLeft;\n  }\n\n  if (isIE10 ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {\n    offsets = includeScroll(offsets, parent);\n  }\n\n  return offsets;\n}\n\nfunction getViewportOffsetRectRelativeToArtbitraryNode(element) {\n  var html = window.document.documentElement;\n  var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n  var width = Math.max(html.clientWidth, window.innerWidth || 0);\n  var height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n  var scrollTop = getScroll(html);\n  var scrollLeft = getScroll(html, 'left');\n\n  var offset = {\n    top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n    left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n    width: width,\n    height: height\n  };\n\n  return getClientRect(offset);\n}\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nfunction isFixed(element) {\n  var nodeName = element.nodeName;\n  if (nodeName === 'BODY' || nodeName === 'HTML') {\n    return false;\n  }\n  if (getStyleComputedProperty(element, 'position') === 'fixed') {\n    return true;\n  }\n  return isFixed(getParentNode(element));\n}\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @returns {Object} Coordinates of the boundaries\n */\nfunction getBoundaries(popper, reference, padding, boundariesElement) {\n  // NOTE: 1 DOM access here\n  var boundaries = { top: 0, left: 0 };\n  var offsetParent = findCommonOffsetParent(popper, reference);\n\n  // Handle viewport case\n  if (boundariesElement === 'viewport') {\n    boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent);\n  } else {\n    // Handle other cases based on DOM element used as boundaries\n    var boundariesNode = void 0;\n    if (boundariesElement === 'scrollParent') {\n      boundariesNode = getScrollParent(getParentNode(popper));\n      if (boundariesNode.nodeName === 'BODY') {\n        boundariesNode = window.document.documentElement;\n      }\n    } else if (boundariesElement === 'window') {\n      boundariesNode = window.document.documentElement;\n    } else {\n      boundariesNode = boundariesElement;\n    }\n\n    var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent);\n\n    // In case of HTML, we need a different computation\n    if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n      var _getWindowSizes = getWindowSizes(),\n          height = _getWindowSizes.height,\n          width = _getWindowSizes.width;\n\n      boundaries.top += offsets.top - offsets.marginTop;\n      boundaries.bottom = height + offsets.top;\n      boundaries.left += offsets.left - offsets.marginLeft;\n      boundaries.right = width + offsets.left;\n    } else {\n      // for all the other DOM elements, this one is good\n      boundaries = offsets;\n    }\n  }\n\n  // Add paddings\n  boundaries.left += padding;\n  boundaries.top += padding;\n  boundaries.right -= padding;\n  boundaries.bottom -= padding;\n\n  return boundaries;\n}\n\nfunction getArea(_ref) {\n  var width = _ref.width,\n      height = _ref.height;\n\n  return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {\n  var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n\n  if (placement.indexOf('auto') === -1) {\n    return placement;\n  }\n\n  var boundaries = getBoundaries(popper, reference, padding, boundariesElement);\n\n  var rects = {\n    top: {\n      width: boundaries.width,\n      height: refRect.top - boundaries.top\n    },\n    right: {\n      width: boundaries.right - refRect.right,\n      height: boundaries.height\n    },\n    bottom: {\n      width: boundaries.width,\n      height: boundaries.bottom - refRect.bottom\n    },\n    left: {\n      width: refRect.left - boundaries.left,\n      height: boundaries.height\n    }\n  };\n\n  var sortedAreas = Object.keys(rects).map(function (key) {\n    return _extends$1({\n      key: key\n    }, rects[key], {\n      area: getArea(rects[key])\n    });\n  }).sort(function (a, b) {\n    return b.area - a.area;\n  });\n\n  var filteredAreas = sortedAreas.filter(function (_ref2) {\n    var width = _ref2.width,\n        height = _ref2.height;\n    return width >= popper.clientWidth && height >= popper.clientHeight;\n  });\n\n  var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;\n\n  var variation = placement.split('-')[1];\n\n  return computedPlacement + (variation ? '-' + variation : '');\n}\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nfunction getReferenceOffsets(state, popper, reference) {\n  var commonOffsetParent = findCommonOffsetParent(popper, reference);\n  return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent);\n}\n\n/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nfunction getOuterSizes(element) {\n  var styles = window.getComputedStyle(element);\n  var x = parseFloat(styles.marginTop) + parseFloat(styles.marginBottom);\n  var y = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight);\n  var result = {\n    width: element.offsetWidth + y,\n    height: element.offsetHeight + x\n  };\n  return result;\n}\n\n/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nfunction getOppositePlacement(placement) {\n  var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n  return placement.replace(/left|right|bottom|top/g, function (matched) {\n    return hash[matched];\n  });\n}\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nfunction getPopperOffsets(popper, referenceOffsets, placement) {\n  placement = placement.split('-')[0];\n\n  // Get popper node sizes\n  var popperRect = getOuterSizes(popper);\n\n  // Add position, width and height to our offsets object\n  var popperOffsets = {\n    width: popperRect.width,\n    height: popperRect.height\n  };\n\n  // depending by the popper placement we have to compute its offsets slightly differently\n  var isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n  var mainSide = isHoriz ? 'top' : 'left';\n  var secondarySide = isHoriz ? 'left' : 'top';\n  var measurement = isHoriz ? 'height' : 'width';\n  var secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n  popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;\n  if (placement === secondarySide) {\n    popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n  } else {\n    popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];\n  }\n\n  return popperOffsets;\n}\n\n/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction find(arr, check) {\n  // use native find if supported\n  if (Array.prototype.find) {\n    return arr.find(check);\n  }\n\n  // use `filter` to obtain the same behavior of `find`\n  return arr.filter(check)[0];\n}\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction findIndex(arr, prop, value) {\n  // use native findIndex if supported\n  if (Array.prototype.findIndex) {\n    return arr.findIndex(function (cur) {\n      return cur[prop] === value;\n    });\n  }\n\n  // use `find` + `indexOf` if `findIndex` isn't supported\n  var match = find(arr, function (obj) {\n    return obj[prop] === value;\n  });\n  return arr.indexOf(match);\n}\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nfunction runModifiers(modifiers, data, ends) {\n  var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n  modifiersToRun.forEach(function (modifier) {\n    if (modifier.function) {\n      console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n    }\n    var fn = modifier.function || modifier.fn;\n    if (modifier.enabled && isFunction(fn)) {\n      // Add properties to offsets to make them a complete clientRect object\n      // we do this before each modifier to make sure the previous one doesn't\n      // mess with these values\n      data.offsets.popper = getClientRect(data.offsets.popper);\n      data.offsets.reference = getClientRect(data.offsets.reference);\n\n      data = fn(data, modifier);\n    }\n  });\n\n  return data;\n}\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.<br />\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nfunction update() {\n  // if popper is destroyed, don't perform any further update\n  if (this.state.isDestroyed) {\n    return;\n  }\n\n  var data = {\n    instance: this,\n    styles: {},\n    arrowStyles: {},\n    attributes: {},\n    flipped: false,\n    offsets: {}\n  };\n\n  // compute reference element offsets\n  data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference);\n\n  // compute auto placement, store placement inside the data object,\n  // modifiers will be able to edit `placement` if needed\n  // and refer to originalPlacement to know the original value\n  data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);\n\n  // store the computed placement inside `originalPlacement`\n  data.originalPlacement = data.placement;\n\n  // compute the popper offsets\n  data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n  data.offsets.popper.position = 'absolute';\n\n  // run the modifiers\n  data = runModifiers(this.modifiers, data);\n\n  // the first `update` will call `onCreate` callback\n  // the other ones will call `onUpdate` callback\n  if (!this.state.isCreated) {\n    this.state.isCreated = true;\n    this.options.onCreate(data);\n  } else {\n    this.options.onUpdate(data);\n  }\n}\n\n/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nfunction isModifierEnabled(modifiers, modifierName) {\n  return modifiers.some(function (_ref) {\n    var name = _ref.name,\n        enabled = _ref.enabled;\n    return enabled && name === modifierName;\n  });\n}\n\n/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nfunction getSupportedPropertyName(property) {\n  var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n  var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n  for (var i = 0; i < prefixes.length - 1; i++) {\n    var prefix = prefixes[i];\n    var toCheck = prefix ? '' + prefix + upperProp : property;\n    if (typeof window.document.body.style[toCheck] !== 'undefined') {\n      return toCheck;\n    }\n  }\n  return null;\n}\n\n/**\n * Destroy the popper\n * @method\n * @memberof Popper\n */\nfunction destroy() {\n  this.state.isDestroyed = true;\n\n  // touch DOM only if `applyStyle` modifier is enabled\n  if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n    this.popper.removeAttribute('x-placement');\n    this.popper.style.left = '';\n    this.popper.style.position = '';\n    this.popper.style.top = '';\n    this.popper.style[getSupportedPropertyName('transform')] = '';\n  }\n\n  this.disableEventListeners();\n\n  // remove the popper if user explicity asked for the deletion on destroy\n  // do not use `remove` because IE11 doesn't support it\n  if (this.options.removeOnDestroy) {\n    this.popper.parentNode.removeChild(this.popper);\n  }\n  return this;\n}\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n  var isBody = scrollParent.nodeName === 'BODY';\n  var target = isBody ? window : scrollParent;\n  target.addEventListener(event, callback, { passive: true });\n\n  if (!isBody) {\n    attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\n  }\n  scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction setupEventListeners(reference, options, state, updateBound) {\n  // Resize event listener on window\n  state.updateBound = updateBound;\n  window.addEventListener('resize', state.updateBound, { passive: true });\n\n  // Scroll event listener on scroll parents\n  var scrollElement = getScrollParent(reference);\n  attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n  state.scrollElement = scrollElement;\n  state.eventsEnabled = true;\n\n  return state;\n}\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nfunction enableEventListeners() {\n  if (!this.state.eventsEnabled) {\n    this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n  }\n}\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction removeEventListeners(reference, state) {\n  // Remove resize event listener on window\n  window.removeEventListener('resize', state.updateBound);\n\n  // Remove scroll event listener on scroll parents\n  state.scrollParents.forEach(function (target) {\n    target.removeEventListener('scroll', state.updateBound);\n  });\n\n  // Reset state\n  state.updateBound = null;\n  state.scrollParents = [];\n  state.scrollElement = null;\n  state.eventsEnabled = false;\n  return state;\n}\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger onUpdate callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nfunction disableEventListeners() {\n  if (this.state.eventsEnabled) {\n    window.cancelAnimationFrame(this.scheduleUpdate);\n    this.state = removeEventListeners(this.reference, this.state);\n  }\n}\n\n/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nfunction isNumeric(n) {\n  return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setStyles(element, styles) {\n  Object.keys(styles).forEach(function (prop) {\n    var unit = '';\n    // add unit if the value is numeric and is one of the following\n    if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {\n      unit = 'px';\n    }\n    element.style[prop] = styles[prop] + unit;\n  });\n}\n\n/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setAttributes(element, attributes) {\n  Object.keys(attributes).forEach(function (prop) {\n    var value = attributes[prop];\n    if (value !== false) {\n      element.setAttribute(prop, attributes[prop]);\n    } else {\n      element.removeAttribute(prop);\n    }\n  });\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nfunction applyStyle(data) {\n  // any property present in `data.styles` will be applied to the popper,\n  // in this way we can make the 3rd party modifiers add custom styles to it\n  // Be aware, modifiers could override the properties defined in the previous\n  // lines of this modifier!\n  setStyles(data.instance.popper, data.styles);\n\n  // any property present in `data.attributes` will be applied to the popper,\n  // they will be set as HTML attributes of the element\n  setAttributes(data.instance.popper, data.attributes);\n\n  // if arrowElement is defined and arrowStyles has some properties\n  if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n    setStyles(data.arrowElement, data.arrowStyles);\n  }\n\n  return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper.\n * @param {Object} options - Popper.js options\n */\nfunction applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n  // compute reference element offsets\n  var referenceOffsets = getReferenceOffsets(state, popper, reference);\n\n  // compute auto placement, store placement inside the data object,\n  // modifiers will be able to edit `placement` if needed\n  // and refer to originalPlacement to know the original value\n  var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);\n\n  popper.setAttribute('x-placement', placement);\n\n  // Apply `position` to popper before anything else because\n  // without the position applied we can't guarantee correct computations\n  setStyles(popper, { position: 'absolute' });\n\n  return options;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeStyle(data, options) {\n  var x = options.x,\n      y = options.y;\n  var popper = data.offsets.popper;\n\n  // Remove this legacy support in Popper.js v2\n\n  var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {\n    return modifier.name === 'applyStyle';\n  }).gpuAcceleration;\n  if (legacyGpuAccelerationOption !== undefined) {\n    console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');\n  }\n  var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;\n\n  var offsetParent = getOffsetParent(data.instance.popper);\n  var offsetParentRect = getBoundingClientRect(offsetParent);\n\n  // Styles\n  var styles = {\n    position: popper.position\n  };\n\n  // floor sides to avoid blurry text\n  var offsets = {\n    left: Math.floor(popper.left),\n    top: Math.floor(popper.top),\n    bottom: Math.floor(popper.bottom),\n    right: Math.floor(popper.right)\n  };\n\n  var sideA = x === 'bottom' ? 'top' : 'bottom';\n  var sideB = y === 'right' ? 'left' : 'right';\n\n  // if gpuAcceleration is set to `true` and transform is supported,\n  //  we use `translate3d` to apply the position to the popper we\n  // automatically use the supported prefixed version if needed\n  var prefixedProperty = getSupportedPropertyName('transform');\n\n  // now, let's make a step back and look at this code closely (wtf?)\n  // If the content of the popper grows once it's been positioned, it\n  // may happen that the popper gets misplaced because of the new content\n  // overflowing its reference element\n  // To avoid this problem, we provide two options (x and y), which allow\n  // the consumer to define the offset origin.\n  // If we position a popper on top of a reference element, we can set\n  // `x` to `top` to make the popper grow towards its top instead of\n  // its bottom.\n  var left = void 0,\n      top = void 0;\n  if (sideA === 'bottom') {\n    top = -offsetParentRect.height + offsets.bottom;\n  } else {\n    top = offsets.top;\n  }\n  if (sideB === 'right') {\n    left = -offsetParentRect.width + offsets.right;\n  } else {\n    left = offsets.left;\n  }\n  if (gpuAcceleration && prefixedProperty) {\n    styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n    styles[sideA] = 0;\n    styles[sideB] = 0;\n    styles.willChange = 'transform';\n  } else {\n    // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n    var invertTop = sideA === 'bottom' ? -1 : 1;\n    var invertLeft = sideB === 'right' ? -1 : 1;\n    styles[sideA] = top * invertTop;\n    styles[sideB] = left * invertLeft;\n    styles.willChange = sideA + ', ' + sideB;\n  }\n\n  // Attributes\n  var attributes = {\n    'x-placement': data.placement\n  };\n\n  // Update `data` attributes, styles and arrowStyles\n  data.attributes = _extends$1({}, attributes, data.attributes);\n  data.styles = _extends$1({}, styles, data.styles);\n  data.arrowStyles = _extends$1({}, data.offsets.arrow, data.arrowStyles);\n\n  return data;\n}\n\n/**\n * Helper used to know if the given modifier depends from another one.<br />\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nfunction isModifierRequired(modifiers, requestingName, requestedName) {\n  var requesting = find(modifiers, function (_ref) {\n    var name = _ref.name;\n    return name === requestingName;\n  });\n\n  var isRequired = !!requesting && modifiers.some(function (modifier) {\n    return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n  });\n\n  if (!isRequired) {\n    var _requesting = '`' + requestingName + '`';\n    var requested = '`' + requestedName + '`';\n    console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');\n  }\n  return isRequired;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction arrow(data, options) {\n  // arrow depends on keepTogether in order to work\n  if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n    return data;\n  }\n\n  var arrowElement = options.element;\n\n  // if arrowElement is a string, suppose it's a CSS selector\n  if (typeof arrowElement === 'string') {\n    arrowElement = data.instance.popper.querySelector(arrowElement);\n\n    // if arrowElement is not found, don't run the modifier\n    if (!arrowElement) {\n      return data;\n    }\n  } else {\n    // if the arrowElement isn't a query selector we must check that the\n    // provided DOM node is child of its popper node\n    if (!data.instance.popper.contains(arrowElement)) {\n      console.warn('WARNING: `arrow.element` must be child of its popper element!');\n      return data;\n    }\n  }\n\n  var placement = data.placement.split('-')[0];\n  var _data$offsets = data.offsets,\n      popper = _data$offsets.popper,\n      reference = _data$offsets.reference;\n\n  var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n  var len = isVertical ? 'height' : 'width';\n  var sideCapitalized = isVertical ? 'Top' : 'Left';\n  var side = sideCapitalized.toLowerCase();\n  var altSide = isVertical ? 'left' : 'top';\n  var opSide = isVertical ? 'bottom' : 'right';\n  var arrowElementSize = getOuterSizes(arrowElement)[len];\n\n  //\n  // extends keepTogether behavior making sure the popper and its\n  // reference have enough pixels in conjuction\n  //\n\n  // top/left side\n  if (reference[opSide] - arrowElementSize < popper[side]) {\n    data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n  }\n  // bottom/right side\n  if (reference[side] + arrowElementSize > popper[opSide]) {\n    data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n  }\n\n  // compute center of the popper\n  var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n  // Compute the sideValue using the updated popper offsets\n  // take popper margin in account because we don't have this info available\n  var popperMarginSide = getStyleComputedProperty(data.instance.popper, 'margin' + sideCapitalized).replace('px', '');\n  var sideValue = center - getClientRect(data.offsets.popper)[side] - popperMarginSide;\n\n  // prevent arrowElement from being placed not contiguously to its popper\n  sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n  data.arrowElement = arrowElement;\n  data.offsets.arrow = {};\n  data.offsets.arrow[side] = Math.round(sideValue);\n  data.offsets.arrow[altSide] = ''; // make sure to unset any eventual altSide value from the DOM node\n\n  return data;\n}\n\n/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nfunction getOppositeVariation(variation) {\n  if (variation === 'end') {\n    return 'start';\n  } else if (variation === 'start') {\n    return 'end';\n  }\n  return variation;\n}\n\n/**\n * List of accepted placements to use as values of the `placement` option.<br />\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.<br />\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-right` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nvar placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];\n\n// Get rid of `auto` `auto-start` and `auto-end`\nvar validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nfunction clockwise(placement) {\n  var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n  var index = validPlacements.indexOf(placement);\n  var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));\n  return counter ? arr.reverse() : arr;\n}\n\nvar BEHAVIORS = {\n  FLIP: 'flip',\n  CLOCKWISE: 'clockwise',\n  COUNTERCLOCKWISE: 'counterclockwise'\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction flip(data, options) {\n  // if `inner` modifier is enabled, we can't use the `flip` modifier\n  if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n    return data;\n  }\n\n  if (data.flipped && data.placement === data.originalPlacement) {\n    // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n    return data;\n  }\n\n  var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement);\n\n  var placement = data.placement.split('-')[0];\n  var placementOpposite = getOppositePlacement(placement);\n  var variation = data.placement.split('-')[1] || '';\n\n  var flipOrder = [];\n\n  switch (options.behavior) {\n    case BEHAVIORS.FLIP:\n      flipOrder = [placement, placementOpposite];\n      break;\n    case BEHAVIORS.CLOCKWISE:\n      flipOrder = clockwise(placement);\n      break;\n    case BEHAVIORS.COUNTERCLOCKWISE:\n      flipOrder = clockwise(placement, true);\n      break;\n    default:\n      flipOrder = options.behavior;\n  }\n\n  flipOrder.forEach(function (step, index) {\n    if (placement !== step || flipOrder.length === index + 1) {\n      return data;\n    }\n\n    placement = data.placement.split('-')[0];\n    placementOpposite = getOppositePlacement(placement);\n\n    var popperOffsets = data.offsets.popper;\n    var refOffsets = data.offsets.reference;\n\n    // using floor because the reference offsets may contain decimals we are not going to consider here\n    var floor = Math.floor;\n    var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);\n\n    var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n    var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n    var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n    var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n    var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;\n\n    // flip the variation if required\n    var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n    var flippedVariation = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);\n\n    if (overlapsRef || overflowsBoundaries || flippedVariation) {\n      // this boolean to detect any flip loop\n      data.flipped = true;\n\n      if (overlapsRef || overflowsBoundaries) {\n        placement = flipOrder[index + 1];\n      }\n\n      if (flippedVariation) {\n        variation = getOppositeVariation(variation);\n      }\n\n      data.placement = placement + (variation ? '-' + variation : '');\n\n      // this object contains `position`, we want to preserve it along with\n      // any additional property we may add in the future\n      data.offsets.popper = _extends$1({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));\n\n      data = runModifiers(data.instance.modifiers, data, 'flip');\n    }\n  });\n  return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction keepTogether(data) {\n  var _data$offsets = data.offsets,\n      popper = _data$offsets.popper,\n      reference = _data$offsets.reference;\n\n  var placement = data.placement.split('-')[0];\n  var floor = Math.floor;\n  var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n  var side = isVertical ? 'right' : 'bottom';\n  var opSide = isVertical ? 'left' : 'top';\n  var measurement = isVertical ? 'width' : 'height';\n\n  if (popper[side] < floor(reference[opSide])) {\n    data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];\n  }\n  if (popper[opSide] > floor(reference[side])) {\n    data.offsets.popper[opSide] = floor(reference[side]);\n  }\n\n  return data;\n}\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nfunction toValue(str, measurement, popperOffsets, referenceOffsets) {\n  // separate value from unit\n  var split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n  var value = +split[1];\n  var unit = split[2];\n\n  // If it's not a number it's an operator, I guess\n  if (!value) {\n    return str;\n  }\n\n  if (unit.indexOf('%') === 0) {\n    var element = void 0;\n    switch (unit) {\n      case '%p':\n        element = popperOffsets;\n        break;\n      case '%':\n      case '%r':\n      default:\n        element = referenceOffsets;\n    }\n\n    var rect = getClientRect(element);\n    return rect[measurement] / 100 * value;\n  } else if (unit === 'vh' || unit === 'vw') {\n    // if is a vh or vw, we calculate the size based on the viewport\n    var size = void 0;\n    if (unit === 'vh') {\n      size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n    } else {\n      size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n    }\n    return size / 100 * value;\n  } else {\n    // if is an explicit pixel unit, we get rid of the unit and keep the value\n    // if is an implicit unit, it's px, and we return just the value\n    return value;\n  }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nfunction parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n  var offsets = [0, 0];\n\n  // Use height if placement is left or right and index is 0 otherwise use width\n  // in this way the first offset will use an axis and the second one\n  // will use the other one\n  var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n  // Split the offset string to obtain a list of values and operands\n  // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n  var fragments = offset.split(/(\\+|\\-)/).map(function (frag) {\n    return frag.trim();\n  });\n\n  // Detect if the offset string contains a pair of values or a single one\n  // they could be separated by comma or space\n  var divider = fragments.indexOf(find(fragments, function (frag) {\n    return frag.search(/,|\\s/) !== -1;\n  }));\n\n  if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n    console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');\n  }\n\n  // If divider is found, we divide the list of values and operands to divide\n  // them by ofset X and Y.\n  var splitRegex = /\\s*,\\s*|\\s+/;\n  var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];\n\n  // Convert the values with units to absolute pixels to allow our computations\n  ops = ops.map(function (op, index) {\n    // Most of the units rely on the orientation of the popper\n    var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';\n    var mergeWithPrevious = false;\n    return op\n    // This aggregates any `+` or `-` sign that aren't considered operators\n    // e.g.: 10 + +5 => [10, +, +5]\n    .reduce(function (a, b) {\n      if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n        a[a.length - 1] = b;\n        mergeWithPrevious = true;\n        return a;\n      } else if (mergeWithPrevious) {\n        a[a.length - 1] += b;\n        mergeWithPrevious = false;\n        return a;\n      } else {\n        return a.concat(b);\n      }\n    }, [])\n    // Here we convert the string values into number values (in px)\n    .map(function (str) {\n      return toValue(str, measurement, popperOffsets, referenceOffsets);\n    });\n  });\n\n  // Loop trough the offsets arrays and execute the operations\n  ops.forEach(function (op, index) {\n    op.forEach(function (frag, index2) {\n      if (isNumeric(frag)) {\n        offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n      }\n    });\n  });\n  return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nfunction offset(data, _ref) {\n  var offset = _ref.offset;\n  var placement = data.placement,\n      _data$offsets = data.offsets,\n      popper = _data$offsets.popper,\n      reference = _data$offsets.reference;\n\n  var basePlacement = placement.split('-')[0];\n\n  var offsets = void 0;\n  if (isNumeric(+offset)) {\n    offsets = [+offset, 0];\n  } else {\n    offsets = parseOffset(offset, popper, reference, basePlacement);\n  }\n\n  if (basePlacement === 'left') {\n    popper.top += offsets[0];\n    popper.left -= offsets[1];\n  } else if (basePlacement === 'right') {\n    popper.top += offsets[0];\n    popper.left += offsets[1];\n  } else if (basePlacement === 'top') {\n    popper.left += offsets[0];\n    popper.top -= offsets[1];\n  } else if (basePlacement === 'bottom') {\n    popper.left += offsets[0];\n    popper.top += offsets[1];\n  }\n\n  data.popper = popper;\n  return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction preventOverflow(data, options) {\n  var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);\n\n  // If offsetParent is the reference element, we really want to\n  // go one step up and use the next offsetParent as reference to\n  // avoid to make this modifier completely useless and look like broken\n  if (data.instance.reference === boundariesElement) {\n    boundariesElement = getOffsetParent(boundariesElement);\n  }\n\n  var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement);\n  options.boundaries = boundaries;\n\n  var order = options.priority;\n  var popper = data.offsets.popper;\n\n  var check = {\n    primary: function primary(placement) {\n      var value = popper[placement];\n      if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {\n        value = Math.max(popper[placement], boundaries[placement]);\n      }\n      return defineProperty({}, placement, value);\n    },\n    secondary: function secondary(placement) {\n      var mainSide = placement === 'right' ? 'left' : 'top';\n      var value = popper[mainSide];\n      if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {\n        value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n      }\n      return defineProperty({}, mainSide, value);\n    }\n  };\n\n  order.forEach(function (placement) {\n    var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n    popper = _extends$1({}, popper, check[side](placement));\n  });\n\n  data.offsets.popper = popper;\n\n  return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction shift(data) {\n  var placement = data.placement;\n  var basePlacement = placement.split('-')[0];\n  var shiftvariation = placement.split('-')[1];\n\n  // if shift shiftvariation is specified, run the modifier\n  if (shiftvariation) {\n    var _data$offsets = data.offsets,\n        reference = _data$offsets.reference,\n        popper = _data$offsets.popper;\n\n    var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n    var side = isVertical ? 'left' : 'top';\n    var measurement = isVertical ? 'width' : 'height';\n\n    var shiftOffsets = {\n      start: defineProperty({}, side, reference[side]),\n      end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n    };\n\n    data.offsets.popper = _extends$1({}, popper, shiftOffsets[shiftvariation]);\n  }\n\n  return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction hide(data) {\n  if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n    return data;\n  }\n\n  var refRect = data.offsets.reference;\n  var bound = find(data.instance.modifiers, function (modifier) {\n    return modifier.name === 'preventOverflow';\n  }).boundaries;\n\n  if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {\n    // Avoid unnecessary DOM access if visibility hasn't changed\n    if (data.hide === true) {\n      return data;\n    }\n\n    data.hide = true;\n    data.attributes['x-out-of-boundaries'] = '';\n  } else {\n    // Avoid unnecessary DOM access if visibility hasn't changed\n    if (data.hide === false) {\n      return data;\n    }\n\n    data.hide = false;\n    data.attributes['x-out-of-boundaries'] = false;\n  }\n\n  return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction inner(data) {\n  var placement = data.placement;\n  var basePlacement = placement.split('-')[0];\n  var _data$offsets = data.offsets,\n      popper = _data$offsets.popper,\n      reference = _data$offsets.reference;\n\n  var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n  var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n  popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n  data.placement = getOppositePlacement(placement);\n  data.offsets.popper = getClientRect(popper);\n\n  return data;\n}\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.<br />\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.<br />\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nvar modifiers = {\n  /**\n   * Modifier used to shift the popper on the start or end of its reference\n   * element.<br />\n   * It will read the variation of the `placement` property.<br />\n   * It can be one either `-end` or `-start`.\n   * @memberof modifiers\n   * @inner\n   */\n  shift: {\n    /** @prop {number} order=100 - Index used to define the order of execution */\n    order: 100,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: shift\n  },\n\n  /**\n   * The `offset` modifier can shift your popper on both its axis.\n   *\n   * It accepts the following units:\n   * - `px` or unitless, interpreted as pixels\n   * - `%` or `%r`, percentage relative to the length of the reference element\n   * - `%p`, percentage relative to the length of the popper element\n   * - `vw`, CSS viewport width unit\n   * - `vh`, CSS viewport height unit\n   *\n   * For length is intended the main axis relative to the placement of the popper.<br />\n   * This means that if the placement is `top` or `bottom`, the length will be the\n   * `width`. In case of `left` or `right`, it will be the height.\n   *\n   * You can provide a single value (as `Number` or `String`), or a pair of values\n   * as `String` divided by a comma or one (or more) white spaces.<br />\n   * The latter is a deprecated method because it leads to confusion and will be\n   * removed in v2.<br />\n   * Additionally, it accepts additions and subtractions between different units.\n   * Note that multiplications and divisions aren't supported.\n   *\n   * Valid examples are:\n   * ```\n   * 10\n   * '10%'\n   * '10, 10'\n   * '10%, 10'\n   * '10 + 10%'\n   * '10 - 5vh + 3%'\n   * '-10px + 5vh, 5px - 6%'\n   * ```\n   * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n   * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n   * > More on this [reading this issue](https://github.com/FezVrasta/popper.js/issues/373)\n   *\n   * @memberof modifiers\n   * @inner\n   */\n  offset: {\n    /** @prop {number} order=200 - Index used to define the order of execution */\n    order: 200,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: offset,\n    /** @prop {Number|String} offset=0\n     * The offset value as described in the modifier description\n     */\n    offset: 0\n  },\n\n  /**\n   * Modifier used to prevent the popper from being positioned outside the boundary.\n   *\n   * An scenario exists where the reference itself is not within the boundaries.<br />\n   * We can say it has \"escaped the boundaries\" — or just \"escaped\".<br />\n   * In this case we need to decide whether the popper should either:\n   *\n   * - detach from the reference and remain \"trapped\" in the boundaries, or\n   * - if it should ignore the boundary and \"escape with its reference\"\n   *\n   * When `escapeWithReference` is set to`true` and reference is completely\n   * outside its boundaries, the popper will overflow (or completely leave)\n   * the boundaries in order to remain attached to the edge of the reference.\n   *\n   * @memberof modifiers\n   * @inner\n   */\n  preventOverflow: {\n    /** @prop {number} order=300 - Index used to define the order of execution */\n    order: 300,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: preventOverflow,\n    /**\n     * @prop {Array} [priority=['left','right','top','bottom']]\n     * Popper will try to prevent overflow following these priorities by default,\n     * then, it could overflow on the left and on top of the `boundariesElement`\n     */\n    priority: ['left', 'right', 'top', 'bottom'],\n    /**\n     * @prop {number} padding=5\n     * Amount of pixel used to define a minimum distance between the boundaries\n     * and the popper this makes sure the popper has always a little padding\n     * between the edges of its container\n     */\n    padding: 5,\n    /**\n     * @prop {String|HTMLElement} boundariesElement='scrollParent'\n     * Boundaries used by the modifier, can be `scrollParent`, `window`,\n     * `viewport` or any DOM element.\n     */\n    boundariesElement: 'scrollParent'\n  },\n\n  /**\n   * Modifier used to make sure the reference and its popper stay near eachothers\n   * without leaving any gap between the two. Expecially useful when the arrow is\n   * enabled and you want to assure it to point to its reference element.\n   * It cares only about the first axis, you can still have poppers with margin\n   * between the popper and its reference element.\n   * @memberof modifiers\n   * @inner\n   */\n  keepTogether: {\n    /** @prop {number} order=400 - Index used to define the order of execution */\n    order: 400,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: keepTogether\n  },\n\n  /**\n   * This modifier is used to move the `arrowElement` of the popper to make\n   * sure it is positioned between the reference element and its popper element.\n   * It will read the outer size of the `arrowElement` node to detect how many\n   * pixels of conjuction are needed.\n   *\n   * It has no effect if no `arrowElement` is provided.\n   * @memberof modifiers\n   * @inner\n   */\n  arrow: {\n    /** @prop {number} order=500 - Index used to define the order of execution */\n    order: 500,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: arrow,\n    /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n    element: '[x-arrow]'\n  },\n\n  /**\n   * Modifier used to flip the popper's placement when it starts to overlap its\n   * reference element.\n   *\n   * Requires the `preventOverflow` modifier before it in order to work.\n   *\n   * **NOTE:** this modifier will interrupt the current update cycle and will\n   * restart it if it detects the need to flip the placement.\n   * @memberof modifiers\n   * @inner\n   */\n  flip: {\n    /** @prop {number} order=600 - Index used to define the order of execution */\n    order: 600,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: flip,\n    /**\n     * @prop {String|Array} behavior='flip'\n     * The behavior used to change the popper's placement. It can be one of\n     * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n     * placements (with optional variations).\n     */\n    behavior: 'flip',\n    /**\n     * @prop {number} padding=5\n     * The popper will flip if it hits the edges of the `boundariesElement`\n     */\n    padding: 5,\n    /**\n     * @prop {String|HTMLElement} boundariesElement='viewport'\n     * The element which will define the boundaries of the popper position,\n     * the popper will never be placed outside of the defined boundaries\n     * (except if keepTogether is enabled)\n     */\n    boundariesElement: 'viewport'\n  },\n\n  /**\n   * Modifier used to make the popper flow toward the inner of the reference element.\n   * By default, when this modifier is disabled, the popper will be placed outside\n   * the reference element.\n   * @memberof modifiers\n   * @inner\n   */\n  inner: {\n    /** @prop {number} order=700 - Index used to define the order of execution */\n    order: 700,\n    /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n    enabled: false,\n    /** @prop {ModifierFn} */\n    fn: inner\n  },\n\n  /**\n   * Modifier used to hide the popper when its reference element is outside of the\n   * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n   * be used to hide with a CSS selector the popper when its reference is\n   * out of boundaries.\n   *\n   * Requires the `preventOverflow` modifier before it in order to work.\n   * @memberof modifiers\n   * @inner\n   */\n  hide: {\n    /** @prop {number} order=800 - Index used to define the order of execution */\n    order: 800,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: hide\n  },\n\n  /**\n   * Computes the style that will be applied to the popper element to gets\n   * properly positioned.\n   *\n   * Note that this modifier will not touch the DOM, it just prepares the styles\n   * so that `applyStyle` modifier can apply it. This separation is useful\n   * in case you need to replace `applyStyle` with a custom implementation.\n   *\n   * This modifier has `850` as `order` value to maintain backward compatibility\n   * with previous versions of Popper.js. Expect the modifiers ordering method\n   * to change in future major versions of the library.\n   *\n   * @memberof modifiers\n   * @inner\n   */\n  computeStyle: {\n    /** @prop {number} order=850 - Index used to define the order of execution */\n    order: 850,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: computeStyle,\n    /**\n     * @prop {Boolean} gpuAcceleration=true\n     * If true, it uses the CSS 3d transformation to position the popper.\n     * Otherwise, it will use the `top` and `left` properties.\n     */\n    gpuAcceleration: true,\n    /**\n     * @prop {string} [x='bottom']\n     * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n     * Change this if your popper should grow in a direction different from `bottom`\n     */\n    x: 'bottom',\n    /**\n     * @prop {string} [x='left']\n     * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n     * Change this if your popper should grow in a direction different from `right`\n     */\n    y: 'right'\n  },\n\n  /**\n   * Applies the computed styles to the popper element.\n   *\n   * All the DOM manipulations are limited to this modifier. This is useful in case\n   * you want to integrate Popper.js inside a framework or view library and you\n   * want to delegate all the DOM manipulations to it.\n   *\n   * Note that if you disable this modifier, you must make sure the popper element\n   * has its position set to `absolute` before Popper.js can do its work!\n   *\n   * Just disable this modifier and define you own to achieve the desired effect.\n   *\n   * @memberof modifiers\n   * @inner\n   */\n  applyStyle: {\n    /** @prop {number} order=900 - Index used to define the order of execution */\n    order: 900,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: applyStyle,\n    /** @prop {Function} */\n    onLoad: applyStyleOnLoad,\n    /**\n     * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n     * @prop {Boolean} gpuAcceleration=true\n     * If true, it uses the CSS 3d transformation to position the popper.\n     * Otherwise, it will use the `top` and `left` properties.\n     */\n    gpuAcceleration: undefined\n  }\n};\n\n/**\n * The `dataObject` is an object containing all the informations used by Popper.js\n * this object get passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper.\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper, it expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow, it expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements.\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n\n/**\n * Default options provided to Popper.js constructor.<br />\n * These can be overriden using the `options` argument of Popper.js.<br />\n * To override an option, simply pass as 3rd argument an object with the same\n * structure of this object, example:\n * ```\n * new Popper(ref, pop, {\n *   modifiers: {\n *     preventOverflow: { enabled: false }\n *   }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nvar Defaults = {\n  /**\n   * Popper's placement\n   * @prop {Popper.placements} placement='bottom'\n   */\n  placement: 'bottom',\n\n  /**\n   * Whether events (resize, scroll) are initially enabled\n   * @prop {Boolean} eventsEnabled=true\n   */\n  eventsEnabled: true,\n\n  /**\n   * Set to true if you want to automatically remove the popper when\n   * you call the `destroy` method.\n   * @prop {Boolean} removeOnDestroy=false\n   */\n  removeOnDestroy: false,\n\n  /**\n   * Callback called when the popper is created.<br />\n   * By default, is set to no-op.<br />\n   * Access Popper.js instance with `data.instance`.\n   * @prop {onCreate}\n   */\n  onCreate: function onCreate() {},\n\n  /**\n   * Callback called when the popper is updated, this callback is not called\n   * on the initialization/creation of the popper, but only on subsequent\n   * updates.<br />\n   * By default, is set to no-op.<br />\n   * Access Popper.js instance with `data.instance`.\n   * @prop {onUpdate}\n   */\n  onUpdate: function onUpdate() {},\n\n  /**\n   * List of modifiers used to modify the offsets before they are applied to the popper.\n   * They provide most of the functionalities of Popper.js\n   * @prop {modifiers}\n   */\n  modifiers: modifiers\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n\n// Utils\n// Methods\nvar Popper = function () {\n  /**\n   * Create a new Popper.js instance\n   * @class Popper\n   * @param {HTMLElement|referenceObject} reference - The reference element used to position the popper\n   * @param {HTMLElement} popper - The HTML element used as popper.\n   * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n   * @return {Object} instance - The generated Popper.js instance\n   */\n  function Popper(reference, popper) {\n    var _this = this;\n\n    var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    classCallCheck(this, Popper);\n\n    this.scheduleUpdate = function () {\n      return requestAnimationFrame(_this.update);\n    };\n\n    // make update() debounced, so that it only runs at most once-per-tick\n    this.update = debounce(this.update.bind(this));\n\n    // with {} we create a new object with the options inside it\n    this.options = _extends$1({}, Popper.Defaults, options);\n\n    // init state\n    this.state = {\n      isDestroyed: false,\n      isCreated: false,\n      scrollParents: []\n    };\n\n    // get reference and popper elements (allow jQuery wrappers)\n    this.reference = reference.jquery ? reference[0] : reference;\n    this.popper = popper.jquery ? popper[0] : popper;\n\n    // Deep merge modifiers options\n    this.options.modifiers = {};\n    Object.keys(_extends$1({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {\n      _this.options.modifiers[name] = _extends$1({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});\n    });\n\n    // Refactoring modifiers' list (Object => Array)\n    this.modifiers = Object.keys(this.options.modifiers).map(function (name) {\n      return _extends$1({\n        name: name\n      }, _this.options.modifiers[name]);\n    })\n    // sort the modifiers by order\n    .sort(function (a, b) {\n      return a.order - b.order;\n    });\n\n    // modifiers have the ability to execute arbitrary code when Popper.js get inited\n    // such code is executed in the same order of its modifier\n    // they could add new properties to their options configuration\n    // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n    this.modifiers.forEach(function (modifierOptions) {\n      if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n        modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);\n      }\n    });\n\n    // fire the first update to position the popper in the right place\n    this.update();\n\n    var eventsEnabled = this.options.eventsEnabled;\n    if (eventsEnabled) {\n      // setup event listeners, they will take care of update the position in specific situations\n      this.enableEventListeners();\n    }\n\n    this.state.eventsEnabled = eventsEnabled;\n  }\n\n  // We can't use class properties because they don't get listed in the\n  // class prototype and break stuff like Sinon stubs\n\n\n  createClass$1(Popper, [{\n    key: 'update',\n    value: function update$$1() {\n      return update.call(this);\n    }\n  }, {\n    key: 'destroy',\n    value: function destroy$$1() {\n      return destroy.call(this);\n    }\n  }, {\n    key: 'enableEventListeners',\n    value: function enableEventListeners$$1() {\n      return enableEventListeners.call(this);\n    }\n  }, {\n    key: 'disableEventListeners',\n    value: function disableEventListeners$$1() {\n      return disableEventListeners.call(this);\n    }\n\n    /**\n     * Schedule an update, it will run on the next UI update available\n     * @method scheduleUpdate\n     * @memberof Popper\n     */\n\n\n    /**\n     * Collection of utilities useful when writing custom modifiers.\n     * Starting from version 1.7, this method is available only if you\n     * include `popper-utils.js` before `popper.js`.\n     *\n     * **DEPRECATION**: This way to access PopperUtils is deprecated\n     * and will be removed in v2! Use the PopperUtils module directly instead.\n     * Due to the high instability of the methods contained in Utils, we can't\n     * guarantee them to follow semver. Use them at your own risk!\n     * @static\n     * @private\n     * @type {Object}\n     * @deprecated since version 1.8\n     * @member Utils\n     * @memberof Popper\n     */\n\n  }]);\n  return Popper;\n}();\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.<br />\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n\n\nPopper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\nPopper.placements = placements;\nPopper.Defaults = Defaults;\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.0.0-beta.2): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nvar Dropdown = function () {\n  /**\n   * Check for Popper dependency\n   * Popper - https://popper.js.org\n   */\n  if (typeof Popper === 'undefined') {\n    throw new Error('Bootstrap dropdown require Popper.js (https://popper.js.org)');\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n\n  var NAME = 'dropdown';\n  var VERSION = '4.0.0-beta.2';\n  var DATA_KEY = 'bs.dropdown';\n  var EVENT_KEY = \".\" + DATA_KEY;\n  var DATA_API_KEY = '.data-api';\n  var JQUERY_NO_CONFLICT = $.fn[NAME];\n  var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key\n\n  var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key\n\n  var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key\n\n  var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key\n\n  var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key\n\n  var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)\n\n  var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + \"|\" + ARROW_DOWN_KEYCODE + \"|\" + ESCAPE_KEYCODE);\n  var Event = {\n    HIDE: \"hide\" + EVENT_KEY,\n    HIDDEN: \"hidden\" + EVENT_KEY,\n    SHOW: \"show\" + EVENT_KEY,\n    SHOWN: \"shown\" + EVENT_KEY,\n    CLICK: \"click\" + EVENT_KEY,\n    CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY,\n    KEYDOWN_DATA_API: \"keydown\" + EVENT_KEY + DATA_API_KEY,\n    KEYUP_DATA_API: \"keyup\" + EVENT_KEY + DATA_API_KEY\n  };\n  var ClassName = {\n    DISABLED: 'disabled',\n    SHOW: 'show',\n    DROPUP: 'dropup',\n    MENURIGHT: 'dropdown-menu-right',\n    MENULEFT: 'dropdown-menu-left'\n  };\n  var Selector = {\n    DATA_TOGGLE: '[data-toggle=\"dropdown\"]',\n    FORM_CHILD: '.dropdown form',\n    MENU: '.dropdown-menu',\n    NAVBAR_NAV: '.navbar-nav',\n    VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled)'\n  };\n  var AttachmentMap = {\n    TOP: 'top-start',\n    TOPEND: 'top-end',\n    BOTTOM: 'bottom-start',\n    BOTTOMEND: 'bottom-end'\n  };\n  var Default = {\n    offset: 0,\n    flip: true\n  };\n  var DefaultType = {\n    offset: '(number|string|function)',\n    flip: 'boolean'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Dropdown =\n  /*#__PURE__*/\n  function () {\n    function Dropdown(element, config) {\n      this._element = element;\n      this._popper = null;\n      this._config = this._getConfig(config);\n      this._menu = this._getMenuElement();\n      this._inNavbar = this._detectNavbar();\n\n      this._addEventListeners();\n    } // getters\n\n\n    var _proto = Dropdown.prototype;\n\n    // public\n    _proto.toggle = function toggle() {\n      if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED)) {\n        return;\n      }\n\n      var parent = Dropdown._getParentFromElement(this._element);\n\n      var isActive = $(this._menu).hasClass(ClassName.SHOW);\n\n      Dropdown._clearMenus();\n\n      if (isActive) {\n        return;\n      }\n\n      var relatedTarget = {\n        relatedTarget: this._element\n      };\n      var showEvent = $.Event(Event.SHOW, relatedTarget);\n      $(parent).trigger(showEvent);\n\n      if (showEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      var element = this._element; // for dropup with alignment we use the parent as popper container\n\n      if ($(parent).hasClass(ClassName.DROPUP)) {\n        if ($(this._menu).hasClass(ClassName.MENULEFT) || $(this._menu).hasClass(ClassName.MENURIGHT)) {\n          element = parent;\n        }\n      }\n\n      this._popper = new Popper(element, this._menu, this._getPopperConfig()); // if this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n      if ('ontouchstart' in document.documentElement && !$(parent).closest(Selector.NAVBAR_NAV).length) {\n        $('body').children().on('mouseover', null, $.noop);\n      }\n\n      this._element.focus();\n\n      this._element.setAttribute('aria-expanded', true);\n\n      $(this._menu).toggleClass(ClassName.SHOW);\n      $(parent).toggleClass(ClassName.SHOW).trigger($.Event(Event.SHOWN, relatedTarget));\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY);\n      $(this._element).off(EVENT_KEY);\n      this._element = null;\n      this._menu = null;\n\n      if (this._popper !== null) {\n        this._popper.destroy();\n      }\n\n      this._popper = null;\n    };\n\n    _proto.update = function update() {\n      this._inNavbar = this._detectNavbar();\n\n      if (this._popper !== null) {\n        this._popper.scheduleUpdate();\n      }\n    }; // private\n\n\n    _proto._addEventListeners = function _addEventListeners() {\n      var _this = this;\n\n      $(this._element).on(Event.CLICK, function (event) {\n        event.preventDefault();\n        event.stopPropagation();\n\n        _this.toggle();\n      });\n    };\n\n    _proto._getConfig = function _getConfig(config) {\n      config = $.extend({}, this.constructor.Default, $(this._element).data(), config);\n      Util.typeCheckConfig(NAME, config, this.constructor.DefaultType);\n      return config;\n    };\n\n    _proto._getMenuElement = function _getMenuElement() {\n      if (!this._menu) {\n        var parent = Dropdown._getParentFromElement(this._element);\n\n        this._menu = $(parent).find(Selector.MENU)[0];\n      }\n\n      return this._menu;\n    };\n\n    _proto._getPlacement = function _getPlacement() {\n      var $parentDropdown = $(this._element).parent();\n      var placement = AttachmentMap.BOTTOM; // Handle dropup\n\n      if ($parentDropdown.hasClass(ClassName.DROPUP)) {\n        placement = AttachmentMap.TOP;\n\n        if ($(this._menu).hasClass(ClassName.MENURIGHT)) {\n          placement = AttachmentMap.TOPEND;\n        }\n      } else if ($(this._menu).hasClass(ClassName.MENURIGHT)) {\n        placement = AttachmentMap.BOTTOMEND;\n      }\n\n      return placement;\n    };\n\n    _proto._detectNavbar = function _detectNavbar() {\n      return $(this._element).closest('.navbar').length > 0;\n    };\n\n    _proto._getPopperConfig = function _getPopperConfig() {\n      var _this2 = this;\n\n      var offsetConf = {};\n\n      if (typeof this._config.offset === 'function') {\n        offsetConf.fn = function (data) {\n          data.offsets = $.extend({}, data.offsets, _this2._config.offset(data.offsets) || {});\n          return data;\n        };\n      } else {\n        offsetConf.offset = this._config.offset;\n      }\n\n      var popperConfig = {\n        placement: this._getPlacement(),\n        modifiers: {\n          offset: offsetConf,\n          flip: {\n            enabled: this._config.flip\n          }\n        } // Disable Popper.js for Dropdown in Navbar\n\n      };\n\n      if (this._inNavbar) {\n        popperConfig.modifiers.applyStyle = {\n          enabled: !this._inNavbar\n        };\n      }\n\n      return popperConfig;\n    }; // static\n\n\n    Dropdown._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY);\n\n        var _config = typeof config === 'object' ? config : null;\n\n        if (!data) {\n          data = new Dropdown(this, _config);\n          $(this).data(DATA_KEY, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new Error(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    Dropdown._clearMenus = function _clearMenus(event) {\n      if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) {\n        return;\n      }\n\n      var toggles = $.makeArray($(Selector.DATA_TOGGLE));\n\n      for (var i = 0; i < toggles.length; i++) {\n        var parent = Dropdown._getParentFromElement(toggles[i]);\n\n        var context = $(toggles[i]).data(DATA_KEY);\n        var relatedTarget = {\n          relatedTarget: toggles[i]\n        };\n\n        if (!context) {\n          continue;\n        }\n\n        var dropdownMenu = context._menu;\n\n        if (!$(parent).hasClass(ClassName.SHOW)) {\n          continue;\n        }\n\n        if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $.contains(parent, event.target)) {\n          continue;\n        }\n\n        var hideEvent = $.Event(Event.HIDE, relatedTarget);\n        $(parent).trigger(hideEvent);\n\n        if (hideEvent.isDefaultPrevented()) {\n          continue;\n        } // if this is a touch-enabled device we remove the extra\n        // empty mouseover listeners we added for iOS support\n\n\n        if ('ontouchstart' in document.documentElement) {\n          $('body').children().off('mouseover', null, $.noop);\n        }\n\n        toggles[i].setAttribute('aria-expanded', 'false');\n        $(dropdownMenu).removeClass(ClassName.SHOW);\n        $(parent).removeClass(ClassName.SHOW).trigger($.Event(Event.HIDDEN, relatedTarget));\n      }\n    };\n\n    Dropdown._getParentFromElement = function _getParentFromElement(element) {\n      var parent;\n      var selector = Util.getSelectorFromElement(element);\n\n      if (selector) {\n        parent = $(selector)[0];\n      }\n\n      return parent || element.parentNode;\n    };\n\n    Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {\n      if (!REGEXP_KEYDOWN.test(event.which) || /button/i.test(event.target.tagName) && event.which === SPACE_KEYCODE || /input|textarea/i.test(event.target.tagName)) {\n        return;\n      }\n\n      event.preventDefault();\n      event.stopPropagation();\n\n      if (this.disabled || $(this).hasClass(ClassName.DISABLED)) {\n        return;\n      }\n\n      var parent = Dropdown._getParentFromElement(this);\n\n      var isActive = $(parent).hasClass(ClassName.SHOW);\n\n      if (!isActive && (event.which !== ESCAPE_KEYCODE || event.which !== SPACE_KEYCODE) || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {\n        if (event.which === ESCAPE_KEYCODE) {\n          var toggle = $(parent).find(Selector.DATA_TOGGLE)[0];\n          $(toggle).trigger('focus');\n        }\n\n        $(this).trigger('click');\n        return;\n      }\n\n      var items = $(parent).find(Selector.VISIBLE_ITEMS).get();\n\n      if (!items.length) {\n        return;\n      }\n\n      var index = items.indexOf(event.target);\n\n      if (event.which === ARROW_UP_KEYCODE && index > 0) {\n        // up\n        index--;\n      }\n\n      if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) {\n        // down\n        index++;\n      }\n\n      if (index < 0) {\n        index = 0;\n      }\n\n      items[index].focus();\n    };\n\n    createClass(Dropdown, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType;\n      }\n    }]);\n    return Dropdown;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event.KEYDOWN_DATA_API, Selector.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event.KEYDOWN_DATA_API, Selector.MENU, Dropdown._dataApiKeydownHandler).on(Event.CLICK_DATA_API + \" \" + Event.KEYUP_DATA_API, Dropdown._clearMenus).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n    event.preventDefault();\n    event.stopPropagation();\n\n    Dropdown._jQueryInterface.call($(this), 'toggle');\n  }).on(Event.CLICK_DATA_API, Selector.FORM_CHILD, function (e) {\n    e.stopPropagation();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME] = Dropdown._jQueryInterface;\n  $.fn[NAME].Constructor = Dropdown;\n\n  $.fn[NAME].noConflict = function () {\n    $.fn[NAME] = JQUERY_NO_CONFLICT;\n    return Dropdown._jQueryInterface;\n  };\n\n  return Dropdown;\n}($, Popper);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.0.0-beta.2): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nvar Modal = function () {\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  var NAME = 'modal';\n  var VERSION = '4.0.0-beta.2';\n  var DATA_KEY = 'bs.modal';\n  var EVENT_KEY = \".\" + DATA_KEY;\n  var DATA_API_KEY = '.data-api';\n  var JQUERY_NO_CONFLICT = $.fn[NAME];\n  var TRANSITION_DURATION = 300;\n  var BACKDROP_TRANSITION_DURATION = 150;\n  var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key\n\n  var Default = {\n    backdrop: true,\n    keyboard: true,\n    focus: true,\n    show: true\n  };\n  var DefaultType = {\n    backdrop: '(boolean|string)',\n    keyboard: 'boolean',\n    focus: 'boolean',\n    show: 'boolean'\n  };\n  var Event = {\n    HIDE: \"hide\" + EVENT_KEY,\n    HIDDEN: \"hidden\" + EVENT_KEY,\n    SHOW: \"show\" + EVENT_KEY,\n    SHOWN: \"shown\" + EVENT_KEY,\n    FOCUSIN: \"focusin\" + EVENT_KEY,\n    RESIZE: \"resize\" + EVENT_KEY,\n    CLICK_DISMISS: \"click.dismiss\" + EVENT_KEY,\n    KEYDOWN_DISMISS: \"keydown.dismiss\" + EVENT_KEY,\n    MOUSEUP_DISMISS: \"mouseup.dismiss\" + EVENT_KEY,\n    MOUSEDOWN_DISMISS: \"mousedown.dismiss\" + EVENT_KEY,\n    CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n  };\n  var ClassName = {\n    SCROLLBAR_MEASURER: 'modal-scrollbar-measure',\n    BACKDROP: 'modal-backdrop',\n    OPEN: 'modal-open',\n    FADE: 'fade',\n    SHOW: 'show'\n  };\n  var Selector = {\n    DIALOG: '.modal-dialog',\n    DATA_TOGGLE: '[data-toggle=\"modal\"]',\n    DATA_DISMISS: '[data-dismiss=\"modal\"]',\n    FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',\n    STICKY_CONTENT: '.sticky-top',\n    NAVBAR_TOGGLER: '.navbar-toggler'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Modal =\n  /*#__PURE__*/\n  function () {\n    function Modal(element, config) {\n      this._config = this._getConfig(config);\n      this._element = element;\n      this._dialog = $(element).find(Selector.DIALOG)[0];\n      this._backdrop = null;\n      this._isShown = false;\n      this._isBodyOverflowing = false;\n      this._ignoreBackdropClick = false;\n      this._originalBodyPadding = 0;\n      this._scrollbarWidth = 0;\n    } // getters\n\n\n    var _proto = Modal.prototype;\n\n    // public\n    _proto.toggle = function toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    };\n\n    _proto.show = function show(relatedTarget) {\n      var _this = this;\n\n      if (this._isTransitioning || this._isShown) {\n        return;\n      }\n\n      if (Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.FADE)) {\n        this._isTransitioning = true;\n      }\n\n      var showEvent = $.Event(Event.SHOW, {\n        relatedTarget: relatedTarget\n      });\n      $(this._element).trigger(showEvent);\n\n      if (this._isShown || showEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._isShown = true;\n\n      this._checkScrollbar();\n\n      this._setScrollbar();\n\n      this._adjustDialog();\n\n      $(document.body).addClass(ClassName.OPEN);\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      $(this._element).on(Event.CLICK_DISMISS, Selector.DATA_DISMISS, function (event) {\n        return _this.hide(event);\n      });\n      $(this._dialog).on(Event.MOUSEDOWN_DISMISS, function () {\n        $(_this._element).one(Event.MOUSEUP_DISMISS, function (event) {\n          if ($(event.target).is(_this._element)) {\n            _this._ignoreBackdropClick = true;\n          }\n        });\n      });\n\n      this._showBackdrop(function () {\n        return _this._showElement(relatedTarget);\n      });\n    };\n\n    _proto.hide = function hide(event) {\n      var _this2 = this;\n\n      if (event) {\n        event.preventDefault();\n      }\n\n      if (this._isTransitioning || !this._isShown) {\n        return;\n      }\n\n      var hideEvent = $.Event(Event.HIDE);\n      $(this._element).trigger(hideEvent);\n\n      if (!this._isShown || hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._isShown = false;\n      var transition = Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.FADE);\n\n      if (transition) {\n        this._isTransitioning = true;\n      }\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      $(document).off(Event.FOCUSIN);\n      $(this._element).removeClass(ClassName.SHOW);\n      $(this._element).off(Event.CLICK_DISMISS);\n      $(this._dialog).off(Event.MOUSEDOWN_DISMISS);\n\n      if (transition) {\n        $(this._element).one(Util.TRANSITION_END, function (event) {\n          return _this2._hideModal(event);\n        }).emulateTransitionEnd(TRANSITION_DURATION);\n      } else {\n        this._hideModal();\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY);\n      $(window, document, this._element, this._backdrop).off(EVENT_KEY);\n      this._config = null;\n      this._element = null;\n      this._dialog = null;\n      this._backdrop = null;\n      this._isShown = null;\n      this._isBodyOverflowing = null;\n      this._ignoreBackdropClick = null;\n      this._scrollbarWidth = null;\n    };\n\n    _proto.handleUpdate = function handleUpdate() {\n      this._adjustDialog();\n    }; // private\n\n\n    _proto._getConfig = function _getConfig(config) {\n      config = $.extend({}, Default, config);\n      Util.typeCheckConfig(NAME, config, DefaultType);\n      return config;\n    };\n\n    _proto._showElement = function _showElement(relatedTarget) {\n      var _this3 = this;\n\n      var transition = Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.FADE);\n\n      if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n        // don't move modals dom position\n        document.body.appendChild(this._element);\n      }\n\n      this._element.style.display = 'block';\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.scrollTop = 0;\n\n      if (transition) {\n        Util.reflow(this._element);\n      }\n\n      $(this._element).addClass(ClassName.SHOW);\n\n      if (this._config.focus) {\n        this._enforceFocus();\n      }\n\n      var shownEvent = $.Event(Event.SHOWN, {\n        relatedTarget: relatedTarget\n      });\n\n      var transitionComplete = function transitionComplete() {\n        if (_this3._config.focus) {\n          _this3._element.focus();\n        }\n\n        _this3._isTransitioning = false;\n        $(_this3._element).trigger(shownEvent);\n      };\n\n      if (transition) {\n        $(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(TRANSITION_DURATION);\n      } else {\n        transitionComplete();\n      }\n    };\n\n    _proto._enforceFocus = function _enforceFocus() {\n      var _this4 = this;\n\n      $(document).off(Event.FOCUSIN) // guard against infinite focus loop\n      .on(Event.FOCUSIN, function (event) {\n        if (document !== event.target && _this4._element !== event.target && !$(_this4._element).has(event.target).length) {\n          _this4._element.focus();\n        }\n      });\n    };\n\n    _proto._setEscapeEvent = function _setEscapeEvent() {\n      var _this5 = this;\n\n      if (this._isShown && this._config.keyboard) {\n        $(this._element).on(Event.KEYDOWN_DISMISS, function (event) {\n          if (event.which === ESCAPE_KEYCODE) {\n            event.preventDefault();\n\n            _this5.hide();\n          }\n        });\n      } else if (!this._isShown) {\n        $(this._element).off(Event.KEYDOWN_DISMISS);\n      }\n    };\n\n    _proto._setResizeEvent = function _setResizeEvent() {\n      var _this6 = this;\n\n      if (this._isShown) {\n        $(window).on(Event.RESIZE, function (event) {\n          return _this6.handleUpdate(event);\n        });\n      } else {\n        $(window).off(Event.RESIZE);\n      }\n    };\n\n    _proto._hideModal = function _hideModal() {\n      var _this7 = this;\n\n      this._element.style.display = 'none';\n\n      this._element.setAttribute('aria-hidden', true);\n\n      this._isTransitioning = false;\n\n      this._showBackdrop(function () {\n        $(document.body).removeClass(ClassName.OPEN);\n\n        _this7._resetAdjustments();\n\n        _this7._resetScrollbar();\n\n        $(_this7._element).trigger(Event.HIDDEN);\n      });\n    };\n\n    _proto._removeBackdrop = function _removeBackdrop() {\n      if (this._backdrop) {\n        $(this._backdrop).remove();\n        this._backdrop = null;\n      }\n    };\n\n    _proto._showBackdrop = function _showBackdrop(callback) {\n      var _this8 = this;\n\n      var animate = $(this._element).hasClass(ClassName.FADE) ? ClassName.FADE : '';\n\n      if (this._isShown && this._config.backdrop) {\n        var doAnimate = Util.supportsTransitionEnd() && animate;\n        this._backdrop = document.createElement('div');\n        this._backdrop.className = ClassName.BACKDROP;\n\n        if (animate) {\n          $(this._backdrop).addClass(animate);\n        }\n\n        $(this._backdrop).appendTo(document.body);\n        $(this._element).on(Event.CLICK_DISMISS, function (event) {\n          if (_this8._ignoreBackdropClick) {\n            _this8._ignoreBackdropClick = false;\n            return;\n          }\n\n          if (event.target !== event.currentTarget) {\n            return;\n          }\n\n          if (_this8._config.backdrop === 'static') {\n            _this8._element.focus();\n          } else {\n            _this8.hide();\n          }\n        });\n\n        if (doAnimate) {\n          Util.reflow(this._backdrop);\n        }\n\n        $(this._backdrop).addClass(ClassName.SHOW);\n\n        if (!callback) {\n          return;\n        }\n\n        if (!doAnimate) {\n          callback();\n          return;\n        }\n\n        $(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(BACKDROP_TRANSITION_DURATION);\n      } else if (!this._isShown && this._backdrop) {\n        $(this._backdrop).removeClass(ClassName.SHOW);\n\n        var callbackRemove = function callbackRemove() {\n          _this8._removeBackdrop();\n\n          if (callback) {\n            callback();\n          }\n        };\n\n        if (Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.FADE)) {\n          $(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(BACKDROP_TRANSITION_DURATION);\n        } else {\n          callbackRemove();\n        }\n      } else if (callback) {\n        callback();\n      }\n    }; // ----------------------------------------------------------------------\n    // the following methods are used to handle overflowing modals\n    // todo (fat): these should probably be refactored out of modal.js\n    // ----------------------------------------------------------------------\n\n\n    _proto._adjustDialog = function _adjustDialog() {\n      var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n      if (!this._isBodyOverflowing && isModalOverflowing) {\n        this._element.style.paddingLeft = this._scrollbarWidth + \"px\";\n      }\n\n      if (this._isBodyOverflowing && !isModalOverflowing) {\n        this._element.style.paddingRight = this._scrollbarWidth + \"px\";\n      }\n    };\n\n    _proto._resetAdjustments = function _resetAdjustments() {\n      this._element.style.paddingLeft = '';\n      this._element.style.paddingRight = '';\n    };\n\n    _proto._checkScrollbar = function _checkScrollbar() {\n      var rect = document.body.getBoundingClientRect();\n      this._isBodyOverflowing = rect.left + rect.right < window.innerWidth;\n      this._scrollbarWidth = this._getScrollbarWidth();\n    };\n\n    _proto._setScrollbar = function _setScrollbar() {\n      var _this9 = this;\n\n      if (this._isBodyOverflowing) {\n        // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n        //   while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n        // Adjust fixed content padding\n        $(Selector.FIXED_CONTENT).each(function (index, element) {\n          var actualPadding = $(element)[0].style.paddingRight;\n          var calculatedPadding = $(element).css('padding-right');\n          $(element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this9._scrollbarWidth + \"px\");\n        }); // Adjust sticky content margin\n\n        $(Selector.STICKY_CONTENT).each(function (index, element) {\n          var actualMargin = $(element)[0].style.marginRight;\n          var calculatedMargin = $(element).css('margin-right');\n          $(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this9._scrollbarWidth + \"px\");\n        }); // Adjust navbar-toggler margin\n\n        $(Selector.NAVBAR_TOGGLER).each(function (index, element) {\n          var actualMargin = $(element)[0].style.marginRight;\n          var calculatedMargin = $(element).css('margin-right');\n          $(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) + _this9._scrollbarWidth + \"px\");\n        }); // Adjust body padding\n\n        var actualPadding = document.body.style.paddingRight;\n        var calculatedPadding = $('body').css('padding-right');\n        $('body').data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + \"px\");\n      }\n    };\n\n    _proto._resetScrollbar = function _resetScrollbar() {\n      // Restore fixed content padding\n      $(Selector.FIXED_CONTENT).each(function (index, element) {\n        var padding = $(element).data('padding-right');\n\n        if (typeof padding !== 'undefined') {\n          $(element).css('padding-right', padding).removeData('padding-right');\n        }\n      }); // Restore sticky content and navbar-toggler margin\n\n      $(Selector.STICKY_CONTENT + \", \" + Selector.NAVBAR_TOGGLER).each(function (index, element) {\n        var margin = $(element).data('margin-right');\n\n        if (typeof margin !== 'undefined') {\n          $(element).css('margin-right', margin).removeData('margin-right');\n        }\n      }); // Restore body padding\n\n      var padding = $('body').data('padding-right');\n\n      if (typeof padding !== 'undefined') {\n        $('body').css('padding-right', padding).removeData('padding-right');\n      }\n    };\n\n    _proto._getScrollbarWidth = function _getScrollbarWidth() {\n      // thx d.walsh\n      var scrollDiv = document.createElement('div');\n      scrollDiv.className = ClassName.SCROLLBAR_MEASURER;\n      document.body.appendChild(scrollDiv);\n      var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;\n      document.body.removeChild(scrollDiv);\n      return scrollbarWidth;\n    }; // static\n\n\n    Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY);\n\n        var _config = $.extend({}, Modal.Default, $(this).data(), typeof config === 'object' && config);\n\n        if (!data) {\n          data = new Modal(this, _config);\n          $(this).data(DATA_KEY, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new Error(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config](relatedTarget);\n        } else if (_config.show) {\n          data.show(relatedTarget);\n        }\n      });\n    };\n\n    createClass(Modal, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default;\n      }\n    }]);\n    return Modal;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n    var _this10 = this;\n\n    var target;\n    var selector = Util.getSelectorFromElement(this);\n\n    if (selector) {\n      target = $(selector)[0];\n    }\n\n    var config = $(target).data(DATA_KEY) ? 'toggle' : $.extend({}, $(target).data(), $(this).data());\n\n    if (this.tagName === 'A' || this.tagName === 'AREA') {\n      event.preventDefault();\n    }\n\n    var $target = $(target).one(Event.SHOW, function (showEvent) {\n      if (showEvent.isDefaultPrevented()) {\n        // only register focus restorer if modal will actually get shown\n        return;\n      }\n\n      $target.one(Event.HIDDEN, function () {\n        if ($(_this10).is(':visible')) {\n          _this10.focus();\n        }\n      });\n    });\n\n    Modal._jQueryInterface.call($(target), config, this);\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME] = Modal._jQueryInterface;\n  $.fn[NAME].Constructor = Modal;\n\n  $.fn[NAME].noConflict = function () {\n    $.fn[NAME] = JQUERY_NO_CONFLICT;\n    return Modal._jQueryInterface;\n  };\n\n  return Modal;\n}($);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.0.0-beta.2): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nvar Tooltip = function () {\n  /**\n   * Check for Popper dependency\n   * Popper - https://popper.js.org\n   */\n  if (typeof Popper === 'undefined') {\n    throw new Error('Bootstrap tooltips require Popper.js (https://popper.js.org)');\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n\n  var NAME = 'tooltip';\n  var VERSION = '4.0.0-beta.2';\n  var DATA_KEY = 'bs.tooltip';\n  var EVENT_KEY = \".\" + DATA_KEY;\n  var JQUERY_NO_CONFLICT = $.fn[NAME];\n  var TRANSITION_DURATION = 150;\n  var CLASS_PREFIX = 'bs-tooltip';\n  var BSCLS_PREFIX_REGEX = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX + \"\\\\S+\", 'g');\n  var DefaultType = {\n    animation: 'boolean',\n    template: 'string',\n    title: '(string|element|function)',\n    trigger: 'string',\n    delay: '(number|object)',\n    html: 'boolean',\n    selector: '(string|boolean)',\n    placement: '(string|function)',\n    offset: '(number|string)',\n    container: '(string|element|boolean)',\n    fallbackPlacement: '(string|array)'\n  };\n  var AttachmentMap = {\n    AUTO: 'auto',\n    TOP: 'top',\n    RIGHT: 'right',\n    BOTTOM: 'bottom',\n    LEFT: 'left'\n  };\n  var Default = {\n    animation: true,\n    template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"arrow\"></div>' + '<div class=\"tooltip-inner\"></div></div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    selector: false,\n    placement: 'top',\n    offset: 0,\n    container: false,\n    fallbackPlacement: 'flip'\n  };\n  var HoverState = {\n    SHOW: 'show',\n    OUT: 'out'\n  };\n  var Event = {\n    HIDE: \"hide\" + EVENT_KEY,\n    HIDDEN: \"hidden\" + EVENT_KEY,\n    SHOW: \"show\" + EVENT_KEY,\n    SHOWN: \"shown\" + EVENT_KEY,\n    INSERTED: \"inserted\" + EVENT_KEY,\n    CLICK: \"click\" + EVENT_KEY,\n    FOCUSIN: \"focusin\" + EVENT_KEY,\n    FOCUSOUT: \"focusout\" + EVENT_KEY,\n    MOUSEENTER: \"mouseenter\" + EVENT_KEY,\n    MOUSELEAVE: \"mouseleave\" + EVENT_KEY\n  };\n  var ClassName = {\n    FADE: 'fade',\n    SHOW: 'show'\n  };\n  var Selector = {\n    TOOLTIP: '.tooltip',\n    TOOLTIP_INNER: '.tooltip-inner',\n    ARROW: '.arrow'\n  };\n  var Trigger = {\n    HOVER: 'hover',\n    FOCUS: 'focus',\n    CLICK: 'click',\n    MANUAL: 'manual'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Tooltip =\n  /*#__PURE__*/\n  function () {\n    function Tooltip(element, config) {\n      // private\n      this._isEnabled = true;\n      this._timeout = 0;\n      this._hoverState = '';\n      this._activeTrigger = {};\n      this._popper = null; // protected\n\n      this.element = element;\n      this.config = this._getConfig(config);\n      this.tip = null;\n\n      this._setListeners();\n    } // getters\n\n\n    var _proto = Tooltip.prototype;\n\n    // public\n    _proto.enable = function enable() {\n      this._isEnabled = true;\n    };\n\n    _proto.disable = function disable() {\n      this._isEnabled = false;\n    };\n\n    _proto.toggleEnabled = function toggleEnabled() {\n      this._isEnabled = !this._isEnabled;\n    };\n\n    _proto.toggle = function toggle(event) {\n      if (!this._isEnabled) {\n        return;\n      }\n\n      if (event) {\n        var dataKey = this.constructor.DATA_KEY;\n        var context = $(event.currentTarget).data(dataKey);\n\n        if (!context) {\n          context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n          $(event.currentTarget).data(dataKey, context);\n        }\n\n        context._activeTrigger.click = !context._activeTrigger.click;\n\n        if (context._isWithActiveTrigger()) {\n          context._enter(null, context);\n        } else {\n          context._leave(null, context);\n        }\n      } else {\n        if ($(this.getTipElement()).hasClass(ClassName.SHOW)) {\n          this._leave(null, this);\n\n          return;\n        }\n\n        this._enter(null, this);\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      clearTimeout(this._timeout);\n      $.removeData(this.element, this.constructor.DATA_KEY);\n      $(this.element).off(this.constructor.EVENT_KEY);\n      $(this.element).closest('.modal').off('hide.bs.modal');\n\n      if (this.tip) {\n        $(this.tip).remove();\n      }\n\n      this._isEnabled = null;\n      this._timeout = null;\n      this._hoverState = null;\n      this._activeTrigger = null;\n\n      if (this._popper !== null) {\n        this._popper.destroy();\n      }\n\n      this._popper = null;\n      this.element = null;\n      this.config = null;\n      this.tip = null;\n    };\n\n    _proto.show = function show() {\n      var _this = this;\n\n      if ($(this.element).css('display') === 'none') {\n        throw new Error('Please use show on visible elements');\n      }\n\n      var showEvent = $.Event(this.constructor.Event.SHOW);\n\n      if (this.isWithContent() && this._isEnabled) {\n        $(this.element).trigger(showEvent);\n        var isInTheDom = $.contains(this.element.ownerDocument.documentElement, this.element);\n\n        if (showEvent.isDefaultPrevented() || !isInTheDom) {\n          return;\n        }\n\n        var tip = this.getTipElement();\n        var tipId = Util.getUID(this.constructor.NAME);\n        tip.setAttribute('id', tipId);\n        this.element.setAttribute('aria-describedby', tipId);\n        this.setContent();\n\n        if (this.config.animation) {\n          $(tip).addClass(ClassName.FADE);\n        }\n\n        var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;\n\n        var attachment = this._getAttachment(placement);\n\n        this.addAttachmentClass(attachment);\n        var container = this.config.container === false ? document.body : $(this.config.container);\n        $(tip).data(this.constructor.DATA_KEY, this);\n\n        if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) {\n          $(tip).appendTo(container);\n        }\n\n        $(this.element).trigger(this.constructor.Event.INSERTED);\n        this._popper = new Popper(this.element, tip, {\n          placement: attachment,\n          modifiers: {\n            offset: {\n              offset: this.config.offset\n            },\n            flip: {\n              behavior: this.config.fallbackPlacement\n            },\n            arrow: {\n              element: Selector.ARROW\n            }\n          },\n          onCreate: function onCreate(data) {\n            if (data.originalPlacement !== data.placement) {\n              _this._handlePopperPlacementChange(data);\n            }\n          },\n          onUpdate: function onUpdate(data) {\n            _this._handlePopperPlacementChange(data);\n          }\n        });\n        $(tip).addClass(ClassName.SHOW); // if this is a touch-enabled device we add extra\n        // empty mouseover listeners to the body's immediate children;\n        // only needed because of broken event delegation on iOS\n        // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n        if ('ontouchstart' in document.documentElement) {\n          $('body').children().on('mouseover', null, $.noop);\n        }\n\n        var complete = function complete() {\n          if (_this.config.animation) {\n            _this._fixTransition();\n          }\n\n          var prevHoverState = _this._hoverState;\n          _this._hoverState = null;\n          $(_this.element).trigger(_this.constructor.Event.SHOWN);\n\n          if (prevHoverState === HoverState.OUT) {\n            _this._leave(null, _this);\n          }\n        };\n\n        if (Util.supportsTransitionEnd() && $(this.tip).hasClass(ClassName.FADE)) {\n          $(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(Tooltip._TRANSITION_DURATION);\n        } else {\n          complete();\n        }\n      }\n    };\n\n    _proto.hide = function hide(callback) {\n      var _this2 = this;\n\n      var tip = this.getTipElement();\n      var hideEvent = $.Event(this.constructor.Event.HIDE);\n\n      var complete = function complete() {\n        if (_this2._hoverState !== HoverState.SHOW && tip.parentNode) {\n          tip.parentNode.removeChild(tip);\n        }\n\n        _this2._cleanTipClass();\n\n        _this2.element.removeAttribute('aria-describedby');\n\n        $(_this2.element).trigger(_this2.constructor.Event.HIDDEN);\n\n        if (_this2._popper !== null) {\n          _this2._popper.destroy();\n        }\n\n        if (callback) {\n          callback();\n        }\n      };\n\n      $(this.element).trigger(hideEvent);\n\n      if (hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      $(tip).removeClass(ClassName.SHOW); // if this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n      if ('ontouchstart' in document.documentElement) {\n        $('body').children().off('mouseover', null, $.noop);\n      }\n\n      this._activeTrigger[Trigger.CLICK] = false;\n      this._activeTrigger[Trigger.FOCUS] = false;\n      this._activeTrigger[Trigger.HOVER] = false;\n\n      if (Util.supportsTransitionEnd() && $(this.tip).hasClass(ClassName.FADE)) {\n        $(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION);\n      } else {\n        complete();\n      }\n\n      this._hoverState = '';\n    };\n\n    _proto.update = function update() {\n      if (this._popper !== null) {\n        this._popper.scheduleUpdate();\n      }\n    }; // protected\n\n\n    _proto.isWithContent = function isWithContent() {\n      return Boolean(this.getTitle());\n    };\n\n    _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n      $(this.getTipElement()).addClass(CLASS_PREFIX + \"-\" + attachment);\n    };\n\n    _proto.getTipElement = function getTipElement() {\n      this.tip = this.tip || $(this.config.template)[0];\n      return this.tip;\n    };\n\n    _proto.setContent = function setContent() {\n      var $tip = $(this.getTipElement());\n      this.setElementContent($tip.find(Selector.TOOLTIP_INNER), this.getTitle());\n      $tip.removeClass(ClassName.FADE + \" \" + ClassName.SHOW);\n    };\n\n    _proto.setElementContent = function setElementContent($element, content) {\n      var html = this.config.html;\n\n      if (typeof content === 'object' && (content.nodeType || content.jquery)) {\n        // content is a DOM node or a jQuery\n        if (html) {\n          if (!$(content).parent().is($element)) {\n            $element.empty().append(content);\n          }\n        } else {\n          $element.text($(content).text());\n        }\n      } else {\n        $element[html ? 'html' : 'text'](content);\n      }\n    };\n\n    _proto.getTitle = function getTitle() {\n      var title = this.element.getAttribute('data-original-title');\n\n      if (!title) {\n        title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title;\n      }\n\n      return title;\n    }; // private\n\n\n    _proto._getAttachment = function _getAttachment(placement) {\n      return AttachmentMap[placement.toUpperCase()];\n    };\n\n    _proto._setListeners = function _setListeners() {\n      var _this3 = this;\n\n      var triggers = this.config.trigger.split(' ');\n      triggers.forEach(function (trigger) {\n        if (trigger === 'click') {\n          $(_this3.element).on(_this3.constructor.Event.CLICK, _this3.config.selector, function (event) {\n            return _this3.toggle(event);\n          });\n        } else if (trigger !== Trigger.MANUAL) {\n          var eventIn = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSEENTER : _this3.constructor.Event.FOCUSIN;\n          var eventOut = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSELEAVE : _this3.constructor.Event.FOCUSOUT;\n          $(_this3.element).on(eventIn, _this3.config.selector, function (event) {\n            return _this3._enter(event);\n          }).on(eventOut, _this3.config.selector, function (event) {\n            return _this3._leave(event);\n          });\n        }\n\n        $(_this3.element).closest('.modal').on('hide.bs.modal', function () {\n          return _this3.hide();\n        });\n      });\n\n      if (this.config.selector) {\n        this.config = $.extend({}, this.config, {\n          trigger: 'manual',\n          selector: ''\n        });\n      } else {\n        this._fixTitle();\n      }\n    };\n\n    _proto._fixTitle = function _fixTitle() {\n      var titleType = typeof this.element.getAttribute('data-original-title');\n\n      if (this.element.getAttribute('title') || titleType !== 'string') {\n        this.element.setAttribute('data-original-title', this.element.getAttribute('title') || '');\n        this.element.setAttribute('title', '');\n      }\n    };\n\n    _proto._enter = function _enter(event, context) {\n      var dataKey = this.constructor.DATA_KEY;\n      context = context || $(event.currentTarget).data(dataKey);\n\n      if (!context) {\n        context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n        $(event.currentTarget).data(dataKey, context);\n      }\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true;\n      }\n\n      if ($(context.getTipElement()).hasClass(ClassName.SHOW) || context._hoverState === HoverState.SHOW) {\n        context._hoverState = HoverState.SHOW;\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HoverState.SHOW;\n\n      if (!context.config.delay || !context.config.delay.show) {\n        context.show();\n        return;\n      }\n\n      context._timeout = setTimeout(function () {\n        if (context._hoverState === HoverState.SHOW) {\n          context.show();\n        }\n      }, context.config.delay.show);\n    };\n\n    _proto._leave = function _leave(event, context) {\n      var dataKey = this.constructor.DATA_KEY;\n      context = context || $(event.currentTarget).data(dataKey);\n\n      if (!context) {\n        context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n        $(event.currentTarget).data(dataKey, context);\n      }\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false;\n      }\n\n      if (context._isWithActiveTrigger()) {\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HoverState.OUT;\n\n      if (!context.config.delay || !context.config.delay.hide) {\n        context.hide();\n        return;\n      }\n\n      context._timeout = setTimeout(function () {\n        if (context._hoverState === HoverState.OUT) {\n          context.hide();\n        }\n      }, context.config.delay.hide);\n    };\n\n    _proto._isWithActiveTrigger = function _isWithActiveTrigger() {\n      for (var trigger in this._activeTrigger) {\n        if (this._activeTrigger[trigger]) {\n          return true;\n        }\n      }\n\n      return false;\n    };\n\n    _proto._getConfig = function _getConfig(config) {\n      config = $.extend({}, this.constructor.Default, $(this.element).data(), config);\n\n      if (typeof config.delay === 'number') {\n        config.delay = {\n          show: config.delay,\n          hide: config.delay\n        };\n      }\n\n      if (typeof config.title === 'number') {\n        config.title = config.title.toString();\n      }\n\n      if (typeof config.content === 'number') {\n        config.content = config.content.toString();\n      }\n\n      Util.typeCheckConfig(NAME, config, this.constructor.DefaultType);\n      return config;\n    };\n\n    _proto._getDelegateConfig = function _getDelegateConfig() {\n      var config = {};\n\n      if (this.config) {\n        for (var key in this.config) {\n          if (this.constructor.Default[key] !== this.config[key]) {\n            config[key] = this.config[key];\n          }\n        }\n      }\n\n      return config;\n    };\n\n    _proto._cleanTipClass = function _cleanTipClass() {\n      var $tip = $(this.getTipElement());\n      var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        $tip.removeClass(tabClass.join(''));\n      }\n    };\n\n    _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(data) {\n      this._cleanTipClass();\n\n      this.addAttachmentClass(this._getAttachment(data.placement));\n    };\n\n    _proto._fixTransition = function _fixTransition() {\n      var tip = this.getTipElement();\n      var initConfigAnimation = this.config.animation;\n\n      if (tip.getAttribute('x-placement') !== null) {\n        return;\n      }\n\n      $(tip).removeClass(ClassName.FADE);\n      this.config.animation = false;\n      this.hide();\n      this.show();\n      this.config.animation = initConfigAnimation;\n    }; // static\n\n\n    Tooltip._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY);\n\n        var _config = typeof config === 'object' && config;\n\n        if (!data && /dispose|hide/.test(config)) {\n          return;\n        }\n\n        if (!data) {\n          data = new Tooltip(this, _config);\n          $(this).data(DATA_KEY, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new Error(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    createClass(Tooltip, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default;\n      }\n    }, {\n      key: \"NAME\",\n      get: function get() {\n        return NAME;\n      }\n    }, {\n      key: \"DATA_KEY\",\n      get: function get() {\n        return DATA_KEY;\n      }\n    }, {\n      key: \"Event\",\n      get: function get() {\n        return Event;\n      }\n    }, {\n      key: \"EVENT_KEY\",\n      get: function get() {\n        return EVENT_KEY;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType;\n      }\n    }]);\n    return Tooltip;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n\n  $.fn[NAME] = Tooltip._jQueryInterface;\n  $.fn[NAME].Constructor = Tooltip;\n\n  $.fn[NAME].noConflict = function () {\n    $.fn[NAME] = JQUERY_NO_CONFLICT;\n    return Tooltip._jQueryInterface;\n  };\n\n  return Tooltip;\n}($, Popper);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.0.0-beta.2): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nvar Popover = function () {\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  var NAME = 'popover';\n  var VERSION = '4.0.0-beta.2';\n  var DATA_KEY = 'bs.popover';\n  var EVENT_KEY = \".\" + DATA_KEY;\n  var JQUERY_NO_CONFLICT = $.fn[NAME];\n  var CLASS_PREFIX = 'bs-popover';\n  var BSCLS_PREFIX_REGEX = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX + \"\\\\S+\", 'g');\n  var Default = $.extend({}, Tooltip.Default, {\n    placement: 'right',\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div></div>'\n  });\n  var DefaultType = $.extend({}, Tooltip.DefaultType, {\n    content: '(string|element|function)'\n  });\n  var ClassName = {\n    FADE: 'fade',\n    SHOW: 'show'\n  };\n  var Selector = {\n    TITLE: '.popover-header',\n    CONTENT: '.popover-body'\n  };\n  var Event = {\n    HIDE: \"hide\" + EVENT_KEY,\n    HIDDEN: \"hidden\" + EVENT_KEY,\n    SHOW: \"show\" + EVENT_KEY,\n    SHOWN: \"shown\" + EVENT_KEY,\n    INSERTED: \"inserted\" + EVENT_KEY,\n    CLICK: \"click\" + EVENT_KEY,\n    FOCUSIN: \"focusin\" + EVENT_KEY,\n    FOCUSOUT: \"focusout\" + EVENT_KEY,\n    MOUSEENTER: \"mouseenter\" + EVENT_KEY,\n    MOUSELEAVE: \"mouseleave\" + EVENT_KEY\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Popover =\n  /*#__PURE__*/\n  function (_Tooltip) {\n    inheritsLoose(Popover, _Tooltip);\n\n    function Popover() {\n      return _Tooltip.apply(this, arguments) || this;\n    }\n\n    var _proto = Popover.prototype;\n\n    // overrides\n    _proto.isWithContent = function isWithContent() {\n      return this.getTitle() || this._getContent();\n    };\n\n    _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n      $(this.getTipElement()).addClass(CLASS_PREFIX + \"-\" + attachment);\n    };\n\n    _proto.getTipElement = function getTipElement() {\n      this.tip = this.tip || $(this.config.template)[0];\n      return this.tip;\n    };\n\n    _proto.setContent = function setContent() {\n      var $tip = $(this.getTipElement()); // we use append for html objects to maintain js events\n\n      this.setElementContent($tip.find(Selector.TITLE), this.getTitle());\n      this.setElementContent($tip.find(Selector.CONTENT), this._getContent());\n      $tip.removeClass(ClassName.FADE + \" \" + ClassName.SHOW);\n    }; // private\n\n\n    _proto._getContent = function _getContent() {\n      return this.element.getAttribute('data-content') || (typeof this.config.content === 'function' ? this.config.content.call(this.element) : this.config.content);\n    };\n\n    _proto._cleanTipClass = function _cleanTipClass() {\n      var $tip = $(this.getTipElement());\n      var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        $tip.removeClass(tabClass.join(''));\n      }\n    }; // static\n\n\n    Popover._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY);\n\n        var _config = typeof config === 'object' ? config : null;\n\n        if (!data && /destroy|hide/.test(config)) {\n          return;\n        }\n\n        if (!data) {\n          data = new Popover(this, _config);\n          $(this).data(DATA_KEY, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new Error(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    createClass(Popover, null, [{\n      key: \"VERSION\",\n      // getters\n      get: function get() {\n        return VERSION;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default;\n      }\n    }, {\n      key: \"NAME\",\n      get: function get() {\n        return NAME;\n      }\n    }, {\n      key: \"DATA_KEY\",\n      get: function get() {\n        return DATA_KEY;\n      }\n    }, {\n      key: \"Event\",\n      get: function get() {\n        return Event;\n      }\n    }, {\n      key: \"EVENT_KEY\",\n      get: function get() {\n        return EVENT_KEY;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType;\n      }\n    }]);\n    return Popover;\n  }(Tooltip);\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n\n  $.fn[NAME] = Popover._jQueryInterface;\n  $.fn[NAME].Constructor = Popover;\n\n  $.fn[NAME].noConflict = function () {\n    $.fn[NAME] = JQUERY_NO_CONFLICT;\n    return Popover._jQueryInterface;\n  };\n\n  return Popover;\n}($);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.0.0-beta.2): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nvar ScrollSpy = function () {\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  var NAME = 'scrollspy';\n  var VERSION = '4.0.0-beta.2';\n  var DATA_KEY = 'bs.scrollspy';\n  var EVENT_KEY = \".\" + DATA_KEY;\n  var DATA_API_KEY = '.data-api';\n  var JQUERY_NO_CONFLICT = $.fn[NAME];\n  var Default = {\n    offset: 10,\n    method: 'auto',\n    target: ''\n  };\n  var DefaultType = {\n    offset: 'number',\n    method: 'string',\n    target: '(string|element)'\n  };\n  var Event = {\n    ACTIVATE: \"activate\" + EVENT_KEY,\n    SCROLL: \"scroll\" + EVENT_KEY,\n    LOAD_DATA_API: \"load\" + EVENT_KEY + DATA_API_KEY\n  };\n  var ClassName = {\n    DROPDOWN_ITEM: 'dropdown-item',\n    DROPDOWN_MENU: 'dropdown-menu',\n    ACTIVE: 'active'\n  };\n  var Selector = {\n    DATA_SPY: '[data-spy=\"scroll\"]',\n    ACTIVE: '.active',\n    NAV_LIST_GROUP: '.nav, .list-group',\n    NAV_LINKS: '.nav-link',\n    NAV_ITEMS: '.nav-item',\n    LIST_ITEMS: '.list-group-item',\n    DROPDOWN: '.dropdown',\n    DROPDOWN_ITEMS: '.dropdown-item',\n    DROPDOWN_TOGGLE: '.dropdown-toggle'\n  };\n  var OffsetMethod = {\n    OFFSET: 'offset',\n    POSITION: 'position'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var ScrollSpy =\n  /*#__PURE__*/\n  function () {\n    function ScrollSpy(element, config) {\n      var _this = this;\n\n      this._element = element;\n      this._scrollElement = element.tagName === 'BODY' ? window : element;\n      this._config = this._getConfig(config);\n      this._selector = this._config.target + \" \" + Selector.NAV_LINKS + \",\" + (this._config.target + \" \" + Selector.LIST_ITEMS + \",\") + (this._config.target + \" \" + Selector.DROPDOWN_ITEMS);\n      this._offsets = [];\n      this._targets = [];\n      this._activeTarget = null;\n      this._scrollHeight = 0;\n      $(this._scrollElement).on(Event.SCROLL, function (event) {\n        return _this._process(event);\n      });\n      this.refresh();\n\n      this._process();\n    } // getters\n\n\n    var _proto = ScrollSpy.prototype;\n\n    // public\n    _proto.refresh = function refresh() {\n      var _this2 = this;\n\n      var autoMethod = this._scrollElement !== this._scrollElement.window ? OffsetMethod.POSITION : OffsetMethod.OFFSET;\n      var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n      var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0;\n      this._offsets = [];\n      this._targets = [];\n      this._scrollHeight = this._getScrollHeight();\n      var targets = $.makeArray($(this._selector));\n      targets.map(function (element) {\n        var target;\n        var targetSelector = Util.getSelectorFromElement(element);\n\n        if (targetSelector) {\n          target = $(targetSelector)[0];\n        }\n\n        if (target) {\n          var targetBCR = target.getBoundingClientRect();\n\n          if (targetBCR.width || targetBCR.height) {\n            // todo (fat): remove sketch reliance on jQuery position/offset\n            return [$(target)[offsetMethod]().top + offsetBase, targetSelector];\n          }\n        }\n\n        return null;\n      }).filter(function (item) {\n        return item;\n      }).sort(function (a, b) {\n        return a[0] - b[0];\n      }).forEach(function (item) {\n        _this2._offsets.push(item[0]);\n\n        _this2._targets.push(item[1]);\n      });\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY);\n      $(this._scrollElement).off(EVENT_KEY);\n      this._element = null;\n      this._scrollElement = null;\n      this._config = null;\n      this._selector = null;\n      this._offsets = null;\n      this._targets = null;\n      this._activeTarget = null;\n      this._scrollHeight = null;\n    }; // private\n\n\n    _proto._getConfig = function _getConfig(config) {\n      config = $.extend({}, Default, config);\n\n      if (typeof config.target !== 'string') {\n        var id = $(config.target).attr('id');\n\n        if (!id) {\n          id = Util.getUID(NAME);\n          $(config.target).attr('id', id);\n        }\n\n        config.target = \"#\" + id;\n      }\n\n      Util.typeCheckConfig(NAME, config, DefaultType);\n      return config;\n    };\n\n    _proto._getScrollTop = function _getScrollTop() {\n      return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n    };\n\n    _proto._getScrollHeight = function _getScrollHeight() {\n      return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n    };\n\n    _proto._getOffsetHeight = function _getOffsetHeight() {\n      return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n    };\n\n    _proto._process = function _process() {\n      var scrollTop = this._getScrollTop() + this._config.offset;\n\n      var scrollHeight = this._getScrollHeight();\n\n      var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n      if (this._scrollHeight !== scrollHeight) {\n        this.refresh();\n      }\n\n      if (scrollTop >= maxScroll) {\n        var target = this._targets[this._targets.length - 1];\n\n        if (this._activeTarget !== target) {\n          this._activate(target);\n        }\n\n        return;\n      }\n\n      if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n        this._activeTarget = null;\n\n        this._clear();\n\n        return;\n      }\n\n      for (var i = this._offsets.length; i--;) {\n        var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n        if (isActiveTarget) {\n          this._activate(this._targets[i]);\n        }\n      }\n    };\n\n    _proto._activate = function _activate(target) {\n      this._activeTarget = target;\n\n      this._clear();\n\n      var queries = this._selector.split(','); // eslint-disable-next-line arrow-body-style\n\n\n      queries = queries.map(function (selector) {\n        return selector + \"[data-target=\\\"\" + target + \"\\\"],\" + (selector + \"[href=\\\"\" + target + \"\\\"]\");\n      });\n      var $link = $(queries.join(','));\n\n      if ($link.hasClass(ClassName.DROPDOWN_ITEM)) {\n        $link.closest(Selector.DROPDOWN).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE);\n        $link.addClass(ClassName.ACTIVE);\n      } else {\n        // Set triggered link as active\n        $link.addClass(ClassName.ACTIVE); // Set triggered links parents as active\n        // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n\n        $link.parents(Selector.NAV_LIST_GROUP).prev(Selector.NAV_LINKS + \", \" + Selector.LIST_ITEMS).addClass(ClassName.ACTIVE); // Handle special case when .nav-link is inside .nav-item\n\n        $link.parents(Selector.NAV_LIST_GROUP).prev(Selector.NAV_ITEMS).children(Selector.NAV_LINKS).addClass(ClassName.ACTIVE);\n      }\n\n      $(this._scrollElement).trigger(Event.ACTIVATE, {\n        relatedTarget: target\n      });\n    };\n\n    _proto._clear = function _clear() {\n      $(this._selector).filter(Selector.ACTIVE).removeClass(ClassName.ACTIVE);\n    }; // static\n\n\n    ScrollSpy._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY);\n\n        var _config = typeof config === 'object' && config;\n\n        if (!data) {\n          data = new ScrollSpy(this, _config);\n          $(this).data(DATA_KEY, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new Error(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    createClass(ScrollSpy, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default;\n      }\n    }]);\n    return ScrollSpy;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(window).on(Event.LOAD_DATA_API, function () {\n    var scrollSpys = $.makeArray($(Selector.DATA_SPY));\n\n    for (var i = scrollSpys.length; i--;) {\n      var $spy = $(scrollSpys[i]);\n\n      ScrollSpy._jQueryInterface.call($spy, $spy.data());\n    }\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME] = ScrollSpy._jQueryInterface;\n  $.fn[NAME].Constructor = ScrollSpy;\n\n  $.fn[NAME].noConflict = function () {\n    $.fn[NAME] = JQUERY_NO_CONFLICT;\n    return ScrollSpy._jQueryInterface;\n  };\n\n  return ScrollSpy;\n}($);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.0.0-beta.2): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nvar Tab = function () {\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  var NAME = 'tab';\n  var VERSION = '4.0.0-beta.2';\n  var DATA_KEY = 'bs.tab';\n  var EVENT_KEY = \".\" + DATA_KEY;\n  var DATA_API_KEY = '.data-api';\n  var JQUERY_NO_CONFLICT = $.fn[NAME];\n  var TRANSITION_DURATION = 150;\n  var Event = {\n    HIDE: \"hide\" + EVENT_KEY,\n    HIDDEN: \"hidden\" + EVENT_KEY,\n    SHOW: \"show\" + EVENT_KEY,\n    SHOWN: \"shown\" + EVENT_KEY,\n    CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n  };\n  var ClassName = {\n    DROPDOWN_MENU: 'dropdown-menu',\n    ACTIVE: 'active',\n    DISABLED: 'disabled',\n    FADE: 'fade',\n    SHOW: 'show'\n  };\n  var Selector = {\n    DROPDOWN: '.dropdown',\n    NAV_LIST_GROUP: '.nav, .list-group',\n    ACTIVE: '.active',\n    ACTIVE_UL: '> li > .active',\n    DATA_TOGGLE: '[data-toggle=\"tab\"], [data-toggle=\"pill\"], [data-toggle=\"list\"]',\n    DROPDOWN_TOGGLE: '.dropdown-toggle',\n    DROPDOWN_ACTIVE_CHILD: '> .dropdown-menu .active'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Tab =\n  /*#__PURE__*/\n  function () {\n    function Tab(element) {\n      this._element = element;\n    } // getters\n\n\n    var _proto = Tab.prototype;\n\n    // public\n    _proto.show = function show() {\n      var _this = this;\n\n      if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).hasClass(ClassName.ACTIVE) || $(this._element).hasClass(ClassName.DISABLED)) {\n        return;\n      }\n\n      var target;\n      var previous;\n      var listElement = $(this._element).closest(Selector.NAV_LIST_GROUP)[0];\n      var selector = Util.getSelectorFromElement(this._element);\n\n      if (listElement) {\n        var itemSelector = listElement.nodeName === 'UL' ? Selector.ACTIVE_UL : Selector.ACTIVE;\n        previous = $.makeArray($(listElement).find(itemSelector));\n        previous = previous[previous.length - 1];\n      }\n\n      var hideEvent = $.Event(Event.HIDE, {\n        relatedTarget: this._element\n      });\n      var showEvent = $.Event(Event.SHOW, {\n        relatedTarget: previous\n      });\n\n      if (previous) {\n        $(previous).trigger(hideEvent);\n      }\n\n      $(this._element).trigger(showEvent);\n\n      if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (selector) {\n        target = $(selector)[0];\n      }\n\n      this._activate(this._element, listElement);\n\n      var complete = function complete() {\n        var hiddenEvent = $.Event(Event.HIDDEN, {\n          relatedTarget: _this._element\n        });\n        var shownEvent = $.Event(Event.SHOWN, {\n          relatedTarget: previous\n        });\n        $(previous).trigger(hiddenEvent);\n        $(_this._element).trigger(shownEvent);\n      };\n\n      if (target) {\n        this._activate(target, target.parentNode, complete);\n      } else {\n        complete();\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY);\n      this._element = null;\n    }; // private\n\n\n    _proto._activate = function _activate(element, container, callback) {\n      var _this2 = this;\n\n      var activeElements;\n\n      if (container.nodeName === 'UL') {\n        activeElements = $(container).find(Selector.ACTIVE_UL);\n      } else {\n        activeElements = $(container).children(Selector.ACTIVE);\n      }\n\n      var active = activeElements[0];\n      var isTransitioning = callback && Util.supportsTransitionEnd() && active && $(active).hasClass(ClassName.FADE);\n\n      var complete = function complete() {\n        return _this2._transitionComplete(element, active, isTransitioning, callback);\n      };\n\n      if (active && isTransitioning) {\n        $(active).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION);\n      } else {\n        complete();\n      }\n\n      if (active) {\n        $(active).removeClass(ClassName.SHOW);\n      }\n    };\n\n    _proto._transitionComplete = function _transitionComplete(element, active, isTransitioning, callback) {\n      if (active) {\n        $(active).removeClass(ClassName.ACTIVE);\n        var dropdownChild = $(active.parentNode).find(Selector.DROPDOWN_ACTIVE_CHILD)[0];\n\n        if (dropdownChild) {\n          $(dropdownChild).removeClass(ClassName.ACTIVE);\n        }\n\n        if (active.getAttribute('role') === 'tab') {\n          active.setAttribute('aria-selected', false);\n        }\n      }\n\n      $(element).addClass(ClassName.ACTIVE);\n\n      if (element.getAttribute('role') === 'tab') {\n        element.setAttribute('aria-selected', true);\n      }\n\n      if (isTransitioning) {\n        Util.reflow(element);\n        $(element).addClass(ClassName.SHOW);\n      } else {\n        $(element).removeClass(ClassName.FADE);\n      }\n\n      if (element.parentNode && $(element.parentNode).hasClass(ClassName.DROPDOWN_MENU)) {\n        var dropdownElement = $(element).closest(Selector.DROPDOWN)[0];\n\n        if (dropdownElement) {\n          $(dropdownElement).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE);\n        }\n\n        element.setAttribute('aria-expanded', true);\n      }\n\n      if (callback) {\n        callback();\n      }\n    }; // static\n\n\n    Tab._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $this = $(this);\n        var data = $this.data(DATA_KEY);\n\n        if (!data) {\n          data = new Tab(this);\n          $this.data(DATA_KEY, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new Error(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    createClass(Tab, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION;\n      }\n    }]);\n    return Tab;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n    event.preventDefault();\n\n    Tab._jQueryInterface.call($(this), 'show');\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME] = Tab._jQueryInterface;\n  $.fn[NAME].Constructor = Tab;\n\n  $.fn[NAME].noConflict = function () {\n    $.fn[NAME] = JQUERY_NO_CONFLICT;\n    return Tab._jQueryInterface;\n  };\n\n  return Tab;\n}($);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.0.0-alpha.6): index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n(function () {\n  if (typeof $ === 'undefined') {\n    throw new Error('Bootstrap\\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\\'s JavaScript.');\n  }\n\n  var version = $.fn.jquery.split(' ')[0].split('.');\n  var minMajor = 1;\n  var ltMajor = 2;\n  var minMinor = 9;\n  var minPatch = 1;\n  var maxMajor = 4;\n\n  if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) {\n    throw new Error('Bootstrap\\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0');\n  }\n})($);\n\nexports.Util = Util;\nexports.Alert = Alert;\nexports.Button = Button;\nexports.Carousel = Carousel;\nexports.Collapse = Collapse;\nexports.Dropdown = Dropdown;\nexports.Modal = Modal;\nexports.Popover = Popover;\nexports.Scrollspy = ScrollSpy;\nexports.Tab = Tab;\nexports.Tooltip = Tooltip;\n\nreturn exports;\n\n}({},$));\n//# sourceMappingURL=bootstrap.bundle.js.map\n"
  },
  {
    "path": "public/frontend/plugins/bootstrap4/js/bootstrap.js",
    "content": "/*!\n  * Bootstrap v4.0.0-beta.2 (https://getbootstrap.com)\n  * Copyright 2011-2017 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n  */\nvar bootstrap = (function (exports,$,Popper) {\n'use strict';\n\n$ = $ && $.hasOwnProperty('default') ? $['default'] : $;\nPopper = Popper && Popper.hasOwnProperty('default') ? Popper['default'] : Popper;\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.0.0-beta.2): util.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nvar Util = function () {\n  /**\n   * ------------------------------------------------------------------------\n   * Private TransitionEnd Helpers\n   * ------------------------------------------------------------------------\n   */\n  var transition = false;\n  var MAX_UID = 1000000;\n  var TransitionEndEvent = {\n    WebkitTransition: 'webkitTransitionEnd',\n    MozTransition: 'transitionend',\n    OTransition: 'oTransitionEnd otransitionend',\n    transition: 'transitionend' // shoutout AngusCroll (https://goo.gl/pxwQGp)\n\n  };\n\n  function toType(obj) {\n    return {}.toString.call(obj).match(/\\s([a-zA-Z]+)/)[1].toLowerCase();\n  }\n\n  function getSpecialTransitionEndEvent() {\n    return {\n      bindType: transition.end,\n      delegateType: transition.end,\n      handle: function handle(event) {\n        if ($(event.target).is(this)) {\n          return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params\n        }\n\n        return undefined; // eslint-disable-line no-undefined\n      }\n    };\n  }\n\n  function transitionEndTest() {\n    if (window.QUnit) {\n      return false;\n    }\n\n    var el = document.createElement('bootstrap');\n\n    for (var name in TransitionEndEvent) {\n      if (typeof el.style[name] !== 'undefined') {\n        return {\n          end: TransitionEndEvent[name]\n        };\n      }\n    }\n\n    return false;\n  }\n\n  function transitionEndEmulator(duration) {\n    var _this = this;\n\n    var called = false;\n    $(this).one(Util.TRANSITION_END, function () {\n      called = true;\n    });\n    setTimeout(function () {\n      if (!called) {\n        Util.triggerTransitionEnd(_this);\n      }\n    }, duration);\n    return this;\n  }\n\n  function setTransitionEndSupport() {\n    transition = transitionEndTest();\n    $.fn.emulateTransitionEnd = transitionEndEmulator;\n\n    if (Util.supportsTransitionEnd()) {\n      $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();\n    }\n  }\n  /**\n   * --------------------------------------------------------------------------\n   * Public Util Api\n   * --------------------------------------------------------------------------\n   */\n\n\n  var Util = {\n    TRANSITION_END: 'bsTransitionEnd',\n    getUID: function getUID(prefix) {\n      do {\n        // eslint-disable-next-line no-bitwise\n        prefix += ~~(Math.random() * MAX_UID); // \"~~\" acts like a faster Math.floor() here\n      } while (document.getElementById(prefix));\n\n      return prefix;\n    },\n    getSelectorFromElement: function getSelectorFromElement(element) {\n      var selector = element.getAttribute('data-target');\n\n      if (!selector || selector === '#') {\n        selector = element.getAttribute('href') || '';\n      }\n\n      try {\n        var $selector = $(document).find(selector);\n        return $selector.length > 0 ? selector : null;\n      } catch (error) {\n        return null;\n      }\n    },\n    reflow: function reflow(element) {\n      return element.offsetHeight;\n    },\n    triggerTransitionEnd: function triggerTransitionEnd(element) {\n      $(element).trigger(transition.end);\n    },\n    supportsTransitionEnd: function supportsTransitionEnd() {\n      return Boolean(transition);\n    },\n    isElement: function isElement(obj) {\n      return (obj[0] || obj).nodeType;\n    },\n    typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) {\n      for (var property in configTypes) {\n        if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n          var expectedTypes = configTypes[property];\n          var value = config[property];\n          var valueType = value && Util.isElement(value) ? 'element' : toType(value);\n\n          if (!new RegExp(expectedTypes).test(valueType)) {\n            throw new Error(componentName.toUpperCase() + \": \" + (\"Option \\\"\" + property + \"\\\" provided type \\\"\" + valueType + \"\\\" \") + (\"but expected type \\\"\" + expectedTypes + \"\\\".\"));\n          }\n        }\n      }\n    }\n  };\n  setTransitionEndSupport();\n  return Util;\n}($);\n\nfunction _defineProperties(target, props) {\n  for (var i = 0; i < props.length; i++) {\n    var descriptor = props[i];\n    descriptor.enumerable = descriptor.enumerable || false;\n    descriptor.configurable = true;\n    if (\"value\" in descriptor) descriptor.writable = true;\n    Object.defineProperty(target, descriptor.key, descriptor);\n  }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n  if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n  if (staticProps) _defineProperties(Constructor, staticProps);\n  return Constructor;\n}\n\nvar createClass = _createClass;\n\nfunction _inheritsLoose(subClass, superClass) {\n  subClass.prototype = Object.create(superClass.prototype);\n  subClass.prototype.constructor = subClass;\n  subClass.__proto__ = superClass;\n}\n\nvar inheritsLoose = _inheritsLoose;\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.0.0-beta.2): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nvar Alert = function () {\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  var NAME = 'alert';\n  var VERSION = '4.0.0-beta.2';\n  var DATA_KEY = 'bs.alert';\n  var EVENT_KEY = \".\" + DATA_KEY;\n  var DATA_API_KEY = '.data-api';\n  var JQUERY_NO_CONFLICT = $.fn[NAME];\n  var TRANSITION_DURATION = 150;\n  var Selector = {\n    DISMISS: '[data-dismiss=\"alert\"]'\n  };\n  var Event = {\n    CLOSE: \"close\" + EVENT_KEY,\n    CLOSED: \"closed\" + EVENT_KEY,\n    CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n  };\n  var ClassName = {\n    ALERT: 'alert',\n    FADE: 'fade',\n    SHOW: 'show'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Alert =\n  /*#__PURE__*/\n  function () {\n    function Alert(element) {\n      this._element = element;\n    } // getters\n\n\n    var _proto = Alert.prototype;\n\n    // public\n    _proto.close = function close(element) {\n      element = element || this._element;\n\n      var rootElement = this._getRootElement(element);\n\n      var customEvent = this._triggerCloseEvent(rootElement);\n\n      if (customEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._removeElement(rootElement);\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY);\n      this._element = null;\n    }; // private\n\n\n    _proto._getRootElement = function _getRootElement(element) {\n      var selector = Util.getSelectorFromElement(element);\n      var parent = false;\n\n      if (selector) {\n        parent = $(selector)[0];\n      }\n\n      if (!parent) {\n        parent = $(element).closest(\".\" + ClassName.ALERT)[0];\n      }\n\n      return parent;\n    };\n\n    _proto._triggerCloseEvent = function _triggerCloseEvent(element) {\n      var closeEvent = $.Event(Event.CLOSE);\n      $(element).trigger(closeEvent);\n      return closeEvent;\n    };\n\n    _proto._removeElement = function _removeElement(element) {\n      var _this = this;\n\n      $(element).removeClass(ClassName.SHOW);\n\n      if (!Util.supportsTransitionEnd() || !$(element).hasClass(ClassName.FADE)) {\n        this._destroyElement(element);\n\n        return;\n      }\n\n      $(element).one(Util.TRANSITION_END, function (event) {\n        return _this._destroyElement(element, event);\n      }).emulateTransitionEnd(TRANSITION_DURATION);\n    };\n\n    _proto._destroyElement = function _destroyElement(element) {\n      $(element).detach().trigger(Event.CLOSED).remove();\n    }; // static\n\n\n    Alert._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $element = $(this);\n        var data = $element.data(DATA_KEY);\n\n        if (!data) {\n          data = new Alert(this);\n          $element.data(DATA_KEY, data);\n        }\n\n        if (config === 'close') {\n          data[config](this);\n        }\n      });\n    };\n\n    Alert._handleDismiss = function _handleDismiss(alertInstance) {\n      return function (event) {\n        if (event) {\n          event.preventDefault();\n        }\n\n        alertInstance.close(this);\n      };\n    };\n\n    createClass(Alert, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION;\n      }\n    }]);\n    return Alert;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert()));\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME] = Alert._jQueryInterface;\n  $.fn[NAME].Constructor = Alert;\n\n  $.fn[NAME].noConflict = function () {\n    $.fn[NAME] = JQUERY_NO_CONFLICT;\n    return Alert._jQueryInterface;\n  };\n\n  return Alert;\n}($);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.0.0-beta.2): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nvar Button = function () {\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  var NAME = 'button';\n  var VERSION = '4.0.0-beta.2';\n  var DATA_KEY = 'bs.button';\n  var EVENT_KEY = \".\" + DATA_KEY;\n  var DATA_API_KEY = '.data-api';\n  var JQUERY_NO_CONFLICT = $.fn[NAME];\n  var ClassName = {\n    ACTIVE: 'active',\n    BUTTON: 'btn',\n    FOCUS: 'focus'\n  };\n  var Selector = {\n    DATA_TOGGLE_CARROT: '[data-toggle^=\"button\"]',\n    DATA_TOGGLE: '[data-toggle=\"buttons\"]',\n    INPUT: 'input',\n    ACTIVE: '.active',\n    BUTTON: '.btn'\n  };\n  var Event = {\n    CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY,\n    FOCUS_BLUR_DATA_API: \"focus\" + EVENT_KEY + DATA_API_KEY + \" \" + (\"blur\" + EVENT_KEY + DATA_API_KEY)\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Button =\n  /*#__PURE__*/\n  function () {\n    function Button(element) {\n      this._element = element;\n    } // getters\n\n\n    var _proto = Button.prototype;\n\n    // public\n    _proto.toggle = function toggle() {\n      var triggerChangeEvent = true;\n      var addAriaPressed = true;\n      var rootElement = $(this._element).closest(Selector.DATA_TOGGLE)[0];\n\n      if (rootElement) {\n        var input = $(this._element).find(Selector.INPUT)[0];\n\n        if (input) {\n          if (input.type === 'radio') {\n            if (input.checked && $(this._element).hasClass(ClassName.ACTIVE)) {\n              triggerChangeEvent = false;\n            } else {\n              var activeElement = $(rootElement).find(Selector.ACTIVE)[0];\n\n              if (activeElement) {\n                $(activeElement).removeClass(ClassName.ACTIVE);\n              }\n            }\n          }\n\n          if (triggerChangeEvent) {\n            if (input.hasAttribute('disabled') || rootElement.hasAttribute('disabled') || input.classList.contains('disabled') || rootElement.classList.contains('disabled')) {\n              return;\n            }\n\n            input.checked = !$(this._element).hasClass(ClassName.ACTIVE);\n            $(input).trigger('change');\n          }\n\n          input.focus();\n          addAriaPressed = false;\n        }\n      }\n\n      if (addAriaPressed) {\n        this._element.setAttribute('aria-pressed', !$(this._element).hasClass(ClassName.ACTIVE));\n      }\n\n      if (triggerChangeEvent) {\n        $(this._element).toggleClass(ClassName.ACTIVE);\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY);\n      this._element = null;\n    }; // static\n\n\n    Button._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY);\n\n        if (!data) {\n          data = new Button(this);\n          $(this).data(DATA_KEY, data);\n        }\n\n        if (config === 'toggle') {\n          data[config]();\n        }\n      });\n    };\n\n    createClass(Button, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION;\n      }\n    }]);\n    return Button;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) {\n    event.preventDefault();\n    var button = event.target;\n\n    if (!$(button).hasClass(ClassName.BUTTON)) {\n      button = $(button).closest(Selector.BUTTON);\n    }\n\n    Button._jQueryInterface.call($(button), 'toggle');\n  }).on(Event.FOCUS_BLUR_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) {\n    var button = $(event.target).closest(Selector.BUTTON)[0];\n    $(button).toggleClass(ClassName.FOCUS, /^focus(in)?$/.test(event.type));\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME] = Button._jQueryInterface;\n  $.fn[NAME].Constructor = Button;\n\n  $.fn[NAME].noConflict = function () {\n    $.fn[NAME] = JQUERY_NO_CONFLICT;\n    return Button._jQueryInterface;\n  };\n\n  return Button;\n}($);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.0.0-beta.2): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nvar Carousel = function () {\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  var NAME = 'carousel';\n  var VERSION = '4.0.0-beta.2';\n  var DATA_KEY = 'bs.carousel';\n  var EVENT_KEY = \".\" + DATA_KEY;\n  var DATA_API_KEY = '.data-api';\n  var JQUERY_NO_CONFLICT = $.fn[NAME];\n  var TRANSITION_DURATION = 600;\n  var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key\n\n  var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key\n\n  var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\n  var Default = {\n    interval: 5000,\n    keyboard: true,\n    slide: false,\n    pause: 'hover',\n    wrap: true\n  };\n  var DefaultType = {\n    interval: '(number|boolean)',\n    keyboard: 'boolean',\n    slide: '(boolean|string)',\n    pause: '(string|boolean)',\n    wrap: 'boolean'\n  };\n  var Direction = {\n    NEXT: 'next',\n    PREV: 'prev',\n    LEFT: 'left',\n    RIGHT: 'right'\n  };\n  var Event = {\n    SLIDE: \"slide\" + EVENT_KEY,\n    SLID: \"slid\" + EVENT_KEY,\n    KEYDOWN: \"keydown\" + EVENT_KEY,\n    MOUSEENTER: \"mouseenter\" + EVENT_KEY,\n    MOUSELEAVE: \"mouseleave\" + EVENT_KEY,\n    TOUCHEND: \"touchend\" + EVENT_KEY,\n    LOAD_DATA_API: \"load\" + EVENT_KEY + DATA_API_KEY,\n    CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n  };\n  var ClassName = {\n    CAROUSEL: 'carousel',\n    ACTIVE: 'active',\n    SLIDE: 'slide',\n    RIGHT: 'carousel-item-right',\n    LEFT: 'carousel-item-left',\n    NEXT: 'carousel-item-next',\n    PREV: 'carousel-item-prev',\n    ITEM: 'carousel-item'\n  };\n  var Selector = {\n    ACTIVE: '.active',\n    ACTIVE_ITEM: '.active.carousel-item',\n    ITEM: '.carousel-item',\n    NEXT_PREV: '.carousel-item-next, .carousel-item-prev',\n    INDICATORS: '.carousel-indicators',\n    DATA_SLIDE: '[data-slide], [data-slide-to]',\n    DATA_RIDE: '[data-ride=\"carousel\"]'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Carousel =\n  /*#__PURE__*/\n  function () {\n    function Carousel(element, config) {\n      this._items = null;\n      this._interval = null;\n      this._activeElement = null;\n      this._isPaused = false;\n      this._isSliding = false;\n      this.touchTimeout = null;\n      this._config = this._getConfig(config);\n      this._element = $(element)[0];\n      this._indicatorsElement = $(this._element).find(Selector.INDICATORS)[0];\n\n      this._addEventListeners();\n    } // getters\n\n\n    var _proto = Carousel.prototype;\n\n    // public\n    _proto.next = function next() {\n      if (!this._isSliding) {\n        this._slide(Direction.NEXT);\n      }\n    };\n\n    _proto.nextWhenVisible = function nextWhenVisible() {\n      // Don't call next when the page isn't visible\n      // or the carousel or its parent isn't visible\n      if (!document.hidden && $(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden') {\n        this.next();\n      }\n    };\n\n    _proto.prev = function prev() {\n      if (!this._isSliding) {\n        this._slide(Direction.PREV);\n      }\n    };\n\n    _proto.pause = function pause(event) {\n      if (!event) {\n        this._isPaused = true;\n      }\n\n      if ($(this._element).find(Selector.NEXT_PREV)[0] && Util.supportsTransitionEnd()) {\n        Util.triggerTransitionEnd(this._element);\n        this.cycle(true);\n      }\n\n      clearInterval(this._interval);\n      this._interval = null;\n    };\n\n    _proto.cycle = function cycle(event) {\n      if (!event) {\n        this._isPaused = false;\n      }\n\n      if (this._interval) {\n        clearInterval(this._interval);\n        this._interval = null;\n      }\n\n      if (this._config.interval && !this._isPaused) {\n        this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n      }\n    };\n\n    _proto.to = function to(index) {\n      var _this = this;\n\n      this._activeElement = $(this._element).find(Selector.ACTIVE_ITEM)[0];\n\n      var activeIndex = this._getItemIndex(this._activeElement);\n\n      if (index > this._items.length - 1 || index < 0) {\n        return;\n      }\n\n      if (this._isSliding) {\n        $(this._element).one(Event.SLID, function () {\n          return _this.to(index);\n        });\n        return;\n      }\n\n      if (activeIndex === index) {\n        this.pause();\n        this.cycle();\n        return;\n      }\n\n      var direction = index > activeIndex ? Direction.NEXT : Direction.PREV;\n\n      this._slide(direction, this._items[index]);\n    };\n\n    _proto.dispose = function dispose() {\n      $(this._element).off(EVENT_KEY);\n      $.removeData(this._element, DATA_KEY);\n      this._items = null;\n      this._config = null;\n      this._element = null;\n      this._interval = null;\n      this._isPaused = null;\n      this._isSliding = null;\n      this._activeElement = null;\n      this._indicatorsElement = null;\n    }; // private\n\n\n    _proto._getConfig = function _getConfig(config) {\n      config = $.extend({}, Default, config);\n      Util.typeCheckConfig(NAME, config, DefaultType);\n      return config;\n    };\n\n    _proto._addEventListeners = function _addEventListeners() {\n      var _this2 = this;\n\n      if (this._config.keyboard) {\n        $(this._element).on(Event.KEYDOWN, function (event) {\n          return _this2._keydown(event);\n        });\n      }\n\n      if (this._config.pause === 'hover') {\n        $(this._element).on(Event.MOUSEENTER, function (event) {\n          return _this2.pause(event);\n        }).on(Event.MOUSELEAVE, function (event) {\n          return _this2.cycle(event);\n        });\n\n        if ('ontouchstart' in document.documentElement) {\n          // if it's a touch-enabled device, mouseenter/leave are fired as\n          // part of the mouse compatibility events on first tap - the carousel\n          // would stop cycling until user tapped out of it;\n          // here, we listen for touchend, explicitly pause the carousel\n          // (as if it's the second time we tap on it, mouseenter compat event\n          // is NOT fired) and after a timeout (to allow for mouse compatibility\n          // events to fire) we explicitly restart cycling\n          $(this._element).on(Event.TOUCHEND, function () {\n            _this2.pause();\n\n            if (_this2.touchTimeout) {\n              clearTimeout(_this2.touchTimeout);\n            }\n\n            _this2.touchTimeout = setTimeout(function (event) {\n              return _this2.cycle(event);\n            }, TOUCHEVENT_COMPAT_WAIT + _this2._config.interval);\n          });\n        }\n      }\n    };\n\n    _proto._keydown = function _keydown(event) {\n      if (/input|textarea/i.test(event.target.tagName)) {\n        return;\n      }\n\n      switch (event.which) {\n        case ARROW_LEFT_KEYCODE:\n          event.preventDefault();\n          this.prev();\n          break;\n\n        case ARROW_RIGHT_KEYCODE:\n          event.preventDefault();\n          this.next();\n          break;\n\n        default:\n          return;\n      }\n    };\n\n    _proto._getItemIndex = function _getItemIndex(element) {\n      this._items = $.makeArray($(element).parent().find(Selector.ITEM));\n      return this._items.indexOf(element);\n    };\n\n    _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) {\n      var isNextDirection = direction === Direction.NEXT;\n      var isPrevDirection = direction === Direction.PREV;\n\n      var activeIndex = this._getItemIndex(activeElement);\n\n      var lastItemIndex = this._items.length - 1;\n      var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex;\n\n      if (isGoingToWrap && !this._config.wrap) {\n        return activeElement;\n      }\n\n      var delta = direction === Direction.PREV ? -1 : 1;\n      var itemIndex = (activeIndex + delta) % this._items.length;\n      return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];\n    };\n\n    _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) {\n      var targetIndex = this._getItemIndex(relatedTarget);\n\n      var fromIndex = this._getItemIndex($(this._element).find(Selector.ACTIVE_ITEM)[0]);\n\n      var slideEvent = $.Event(Event.SLIDE, {\n        relatedTarget: relatedTarget,\n        direction: eventDirectionName,\n        from: fromIndex,\n        to: targetIndex\n      });\n      $(this._element).trigger(slideEvent);\n      return slideEvent;\n    };\n\n    _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) {\n      if (this._indicatorsElement) {\n        $(this._indicatorsElement).find(Selector.ACTIVE).removeClass(ClassName.ACTIVE);\n\n        var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];\n\n        if (nextIndicator) {\n          $(nextIndicator).addClass(ClassName.ACTIVE);\n        }\n      }\n    };\n\n    _proto._slide = function _slide(direction, element) {\n      var _this3 = this;\n\n      var activeElement = $(this._element).find(Selector.ACTIVE_ITEM)[0];\n\n      var activeElementIndex = this._getItemIndex(activeElement);\n\n      var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement);\n\n      var nextElementIndex = this._getItemIndex(nextElement);\n\n      var isCycling = Boolean(this._interval);\n      var directionalClassName;\n      var orderClassName;\n      var eventDirectionName;\n\n      if (direction === Direction.NEXT) {\n        directionalClassName = ClassName.LEFT;\n        orderClassName = ClassName.NEXT;\n        eventDirectionName = Direction.LEFT;\n      } else {\n        directionalClassName = ClassName.RIGHT;\n        orderClassName = ClassName.PREV;\n        eventDirectionName = Direction.RIGHT;\n      }\n\n      if (nextElement && $(nextElement).hasClass(ClassName.ACTIVE)) {\n        this._isSliding = false;\n        return;\n      }\n\n      var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n      if (slideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (!activeElement || !nextElement) {\n        // some weirdness is happening, so we bail\n        return;\n      }\n\n      this._isSliding = true;\n\n      if (isCycling) {\n        this.pause();\n      }\n\n      this._setActiveIndicatorElement(nextElement);\n\n      var slidEvent = $.Event(Event.SLID, {\n        relatedTarget: nextElement,\n        direction: eventDirectionName,\n        from: activeElementIndex,\n        to: nextElementIndex\n      });\n\n      if (Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.SLIDE)) {\n        $(nextElement).addClass(orderClassName);\n        Util.reflow(nextElement);\n        $(activeElement).addClass(directionalClassName);\n        $(nextElement).addClass(directionalClassName);\n        $(activeElement).one(Util.TRANSITION_END, function () {\n          $(nextElement).removeClass(directionalClassName + \" \" + orderClassName).addClass(ClassName.ACTIVE);\n          $(activeElement).removeClass(ClassName.ACTIVE + \" \" + orderClassName + \" \" + directionalClassName);\n          _this3._isSliding = false;\n          setTimeout(function () {\n            return $(_this3._element).trigger(slidEvent);\n          }, 0);\n        }).emulateTransitionEnd(TRANSITION_DURATION);\n      } else {\n        $(activeElement).removeClass(ClassName.ACTIVE);\n        $(nextElement).addClass(ClassName.ACTIVE);\n        this._isSliding = false;\n        $(this._element).trigger(slidEvent);\n      }\n\n      if (isCycling) {\n        this.cycle();\n      }\n    }; // static\n\n\n    Carousel._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY);\n\n        var _config = $.extend({}, Default, $(this).data());\n\n        if (typeof config === 'object') {\n          $.extend(_config, config);\n        }\n\n        var action = typeof config === 'string' ? config : _config.slide;\n\n        if (!data) {\n          data = new Carousel(this, _config);\n          $(this).data(DATA_KEY, data);\n        }\n\n        if (typeof config === 'number') {\n          data.to(config);\n        } else if (typeof action === 'string') {\n          if (typeof data[action] === 'undefined') {\n            throw new Error(\"No method named \\\"\" + action + \"\\\"\");\n          }\n\n          data[action]();\n        } else if (_config.interval) {\n          data.pause();\n          data.cycle();\n        }\n      });\n    };\n\n    Carousel._dataApiClickHandler = function _dataApiClickHandler(event) {\n      var selector = Util.getSelectorFromElement(this);\n\n      if (!selector) {\n        return;\n      }\n\n      var target = $(selector)[0];\n\n      if (!target || !$(target).hasClass(ClassName.CAROUSEL)) {\n        return;\n      }\n\n      var config = $.extend({}, $(target).data(), $(this).data());\n      var slideIndex = this.getAttribute('data-slide-to');\n\n      if (slideIndex) {\n        config.interval = false;\n      }\n\n      Carousel._jQueryInterface.call($(target), config);\n\n      if (slideIndex) {\n        $(target).data(DATA_KEY).to(slideIndex);\n      }\n\n      event.preventDefault();\n    };\n\n    createClass(Carousel, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default;\n      }\n    }]);\n    return Carousel;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event.CLICK_DATA_API, Selector.DATA_SLIDE, Carousel._dataApiClickHandler);\n  $(window).on(Event.LOAD_DATA_API, function () {\n    $(Selector.DATA_RIDE).each(function () {\n      var $carousel = $(this);\n\n      Carousel._jQueryInterface.call($carousel, $carousel.data());\n    });\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME] = Carousel._jQueryInterface;\n  $.fn[NAME].Constructor = Carousel;\n\n  $.fn[NAME].noConflict = function () {\n    $.fn[NAME] = JQUERY_NO_CONFLICT;\n    return Carousel._jQueryInterface;\n  };\n\n  return Carousel;\n}($);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.0.0-beta.2): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nvar Collapse = function () {\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  var NAME = 'collapse';\n  var VERSION = '4.0.0-beta.2';\n  var DATA_KEY = 'bs.collapse';\n  var EVENT_KEY = \".\" + DATA_KEY;\n  var DATA_API_KEY = '.data-api';\n  var JQUERY_NO_CONFLICT = $.fn[NAME];\n  var TRANSITION_DURATION = 600;\n  var Default = {\n    toggle: true,\n    parent: ''\n  };\n  var DefaultType = {\n    toggle: 'boolean',\n    parent: '(string|element)'\n  };\n  var Event = {\n    SHOW: \"show\" + EVENT_KEY,\n    SHOWN: \"shown\" + EVENT_KEY,\n    HIDE: \"hide\" + EVENT_KEY,\n    HIDDEN: \"hidden\" + EVENT_KEY,\n    CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n  };\n  var ClassName = {\n    SHOW: 'show',\n    COLLAPSE: 'collapse',\n    COLLAPSING: 'collapsing',\n    COLLAPSED: 'collapsed'\n  };\n  var Dimension = {\n    WIDTH: 'width',\n    HEIGHT: 'height'\n  };\n  var Selector = {\n    ACTIVES: '.show, .collapsing',\n    DATA_TOGGLE: '[data-toggle=\"collapse\"]'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Collapse =\n  /*#__PURE__*/\n  function () {\n    function Collapse(element, config) {\n      this._isTransitioning = false;\n      this._element = element;\n      this._config = this._getConfig(config);\n      this._triggerArray = $.makeArray($(\"[data-toggle=\\\"collapse\\\"][href=\\\"#\" + element.id + \"\\\"],\" + (\"[data-toggle=\\\"collapse\\\"][data-target=\\\"#\" + element.id + \"\\\"]\")));\n      var tabToggles = $(Selector.DATA_TOGGLE);\n\n      for (var i = 0; i < tabToggles.length; i++) {\n        var elem = tabToggles[i];\n        var selector = Util.getSelectorFromElement(elem);\n\n        if (selector !== null && $(selector).filter(element).length > 0) {\n          this._triggerArray.push(elem);\n        }\n      }\n\n      this._parent = this._config.parent ? this._getParent() : null;\n\n      if (!this._config.parent) {\n        this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n      }\n\n      if (this._config.toggle) {\n        this.toggle();\n      }\n    } // getters\n\n\n    var _proto = Collapse.prototype;\n\n    // public\n    _proto.toggle = function toggle() {\n      if ($(this._element).hasClass(ClassName.SHOW)) {\n        this.hide();\n      } else {\n        this.show();\n      }\n    };\n\n    _proto.show = function show() {\n      var _this = this;\n\n      if (this._isTransitioning || $(this._element).hasClass(ClassName.SHOW)) {\n        return;\n      }\n\n      var actives;\n      var activesData;\n\n      if (this._parent) {\n        actives = $.makeArray($(this._parent).children().children(Selector.ACTIVES));\n\n        if (!actives.length) {\n          actives = null;\n        }\n      }\n\n      if (actives) {\n        activesData = $(actives).data(DATA_KEY);\n\n        if (activesData && activesData._isTransitioning) {\n          return;\n        }\n      }\n\n      var startEvent = $.Event(Event.SHOW);\n      $(this._element).trigger(startEvent);\n\n      if (startEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (actives) {\n        Collapse._jQueryInterface.call($(actives), 'hide');\n\n        if (!activesData) {\n          $(actives).data(DATA_KEY, null);\n        }\n      }\n\n      var dimension = this._getDimension();\n\n      $(this._element).removeClass(ClassName.COLLAPSE).addClass(ClassName.COLLAPSING);\n      this._element.style[dimension] = 0;\n\n      if (this._triggerArray.length) {\n        $(this._triggerArray).removeClass(ClassName.COLLAPSED).attr('aria-expanded', true);\n      }\n\n      this.setTransitioning(true);\n\n      var complete = function complete() {\n        $(_this._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).addClass(ClassName.SHOW);\n        _this._element.style[dimension] = '';\n\n        _this.setTransitioning(false);\n\n        $(_this._element).trigger(Event.SHOWN);\n      };\n\n      if (!Util.supportsTransitionEnd()) {\n        complete();\n        return;\n      }\n\n      var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n      var scrollSize = \"scroll\" + capitalizedDimension;\n      $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION);\n      this._element.style[dimension] = this._element[scrollSize] + \"px\";\n    };\n\n    _proto.hide = function hide() {\n      var _this2 = this;\n\n      if (this._isTransitioning || !$(this._element).hasClass(ClassName.SHOW)) {\n        return;\n      }\n\n      var startEvent = $.Event(Event.HIDE);\n      $(this._element).trigger(startEvent);\n\n      if (startEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      var dimension = this._getDimension();\n\n      this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + \"px\";\n      Util.reflow(this._element);\n      $(this._element).addClass(ClassName.COLLAPSING).removeClass(ClassName.COLLAPSE).removeClass(ClassName.SHOW);\n\n      if (this._triggerArray.length) {\n        for (var i = 0; i < this._triggerArray.length; i++) {\n          var trigger = this._triggerArray[i];\n          var selector = Util.getSelectorFromElement(trigger);\n\n          if (selector !== null) {\n            var $elem = $(selector);\n\n            if (!$elem.hasClass(ClassName.SHOW)) {\n              $(trigger).addClass(ClassName.COLLAPSED).attr('aria-expanded', false);\n            }\n          }\n        }\n      }\n\n      this.setTransitioning(true);\n\n      var complete = function complete() {\n        _this2.setTransitioning(false);\n\n        $(_this2._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).trigger(Event.HIDDEN);\n      };\n\n      this._element.style[dimension] = '';\n\n      if (!Util.supportsTransitionEnd()) {\n        complete();\n        return;\n      }\n\n      $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION);\n    };\n\n    _proto.setTransitioning = function setTransitioning(isTransitioning) {\n      this._isTransitioning = isTransitioning;\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY);\n      this._config = null;\n      this._parent = null;\n      this._element = null;\n      this._triggerArray = null;\n      this._isTransitioning = null;\n    }; // private\n\n\n    _proto._getConfig = function _getConfig(config) {\n      config = $.extend({}, Default, config);\n      config.toggle = Boolean(config.toggle); // coerce string values\n\n      Util.typeCheckConfig(NAME, config, DefaultType);\n      return config;\n    };\n\n    _proto._getDimension = function _getDimension() {\n      var hasWidth = $(this._element).hasClass(Dimension.WIDTH);\n      return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT;\n    };\n\n    _proto._getParent = function _getParent() {\n      var _this3 = this;\n\n      var parent = null;\n\n      if (Util.isElement(this._config.parent)) {\n        parent = this._config.parent; // it's a jQuery object\n\n        if (typeof this._config.parent.jquery !== 'undefined') {\n          parent = this._config.parent[0];\n        }\n      } else {\n        parent = $(this._config.parent)[0];\n      }\n\n      var selector = \"[data-toggle=\\\"collapse\\\"][data-parent=\\\"\" + this._config.parent + \"\\\"]\";\n      $(parent).find(selector).each(function (i, element) {\n        _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);\n      });\n      return parent;\n    };\n\n    _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {\n      if (element) {\n        var isOpen = $(element).hasClass(ClassName.SHOW);\n\n        if (triggerArray.length) {\n          $(triggerArray).toggleClass(ClassName.COLLAPSED, !isOpen).attr('aria-expanded', isOpen);\n        }\n      }\n    }; // static\n\n\n    Collapse._getTargetFromElement = function _getTargetFromElement(element) {\n      var selector = Util.getSelectorFromElement(element);\n      return selector ? $(selector)[0] : null;\n    };\n\n    Collapse._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $this = $(this);\n        var data = $this.data(DATA_KEY);\n\n        var _config = $.extend({}, Default, $this.data(), typeof config === 'object' && config);\n\n        if (!data && _config.toggle && /show|hide/.test(config)) {\n          _config.toggle = false;\n        }\n\n        if (!data) {\n          data = new Collapse(this, _config);\n          $this.data(DATA_KEY, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new Error(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    createClass(Collapse, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default;\n      }\n    }]);\n    return Collapse;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n    if (event.currentTarget.tagName === 'A') {\n      event.preventDefault();\n    }\n\n    var $trigger = $(this);\n    var selector = Util.getSelectorFromElement(this);\n    $(selector).each(function () {\n      var $target = $(this);\n      var data = $target.data(DATA_KEY);\n      var config = data ? 'toggle' : $trigger.data();\n\n      Collapse._jQueryInterface.call($target, config);\n    });\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME] = Collapse._jQueryInterface;\n  $.fn[NAME].Constructor = Collapse;\n\n  $.fn[NAME].noConflict = function () {\n    $.fn[NAME] = JQUERY_NO_CONFLICT;\n    return Collapse._jQueryInterface;\n  };\n\n  return Collapse;\n}($);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.0.0-beta.2): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nvar Dropdown = function () {\n  /**\n   * Check for Popper dependency\n   * Popper - https://popper.js.org\n   */\n  if (typeof Popper === 'undefined') {\n    throw new Error('Bootstrap dropdown require Popper.js (https://popper.js.org)');\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n\n  var NAME = 'dropdown';\n  var VERSION = '4.0.0-beta.2';\n  var DATA_KEY = 'bs.dropdown';\n  var EVENT_KEY = \".\" + DATA_KEY;\n  var DATA_API_KEY = '.data-api';\n  var JQUERY_NO_CONFLICT = $.fn[NAME];\n  var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key\n\n  var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key\n\n  var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key\n\n  var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key\n\n  var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key\n\n  var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)\n\n  var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + \"|\" + ARROW_DOWN_KEYCODE + \"|\" + ESCAPE_KEYCODE);\n  var Event = {\n    HIDE: \"hide\" + EVENT_KEY,\n    HIDDEN: \"hidden\" + EVENT_KEY,\n    SHOW: \"show\" + EVENT_KEY,\n    SHOWN: \"shown\" + EVENT_KEY,\n    CLICK: \"click\" + EVENT_KEY,\n    CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY,\n    KEYDOWN_DATA_API: \"keydown\" + EVENT_KEY + DATA_API_KEY,\n    KEYUP_DATA_API: \"keyup\" + EVENT_KEY + DATA_API_KEY\n  };\n  var ClassName = {\n    DISABLED: 'disabled',\n    SHOW: 'show',\n    DROPUP: 'dropup',\n    MENURIGHT: 'dropdown-menu-right',\n    MENULEFT: 'dropdown-menu-left'\n  };\n  var Selector = {\n    DATA_TOGGLE: '[data-toggle=\"dropdown\"]',\n    FORM_CHILD: '.dropdown form',\n    MENU: '.dropdown-menu',\n    NAVBAR_NAV: '.navbar-nav',\n    VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled)'\n  };\n  var AttachmentMap = {\n    TOP: 'top-start',\n    TOPEND: 'top-end',\n    BOTTOM: 'bottom-start',\n    BOTTOMEND: 'bottom-end'\n  };\n  var Default = {\n    offset: 0,\n    flip: true\n  };\n  var DefaultType = {\n    offset: '(number|string|function)',\n    flip: 'boolean'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Dropdown =\n  /*#__PURE__*/\n  function () {\n    function Dropdown(element, config) {\n      this._element = element;\n      this._popper = null;\n      this._config = this._getConfig(config);\n      this._menu = this._getMenuElement();\n      this._inNavbar = this._detectNavbar();\n\n      this._addEventListeners();\n    } // getters\n\n\n    var _proto = Dropdown.prototype;\n\n    // public\n    _proto.toggle = function toggle() {\n      if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED)) {\n        return;\n      }\n\n      var parent = Dropdown._getParentFromElement(this._element);\n\n      var isActive = $(this._menu).hasClass(ClassName.SHOW);\n\n      Dropdown._clearMenus();\n\n      if (isActive) {\n        return;\n      }\n\n      var relatedTarget = {\n        relatedTarget: this._element\n      };\n      var showEvent = $.Event(Event.SHOW, relatedTarget);\n      $(parent).trigger(showEvent);\n\n      if (showEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      var element = this._element; // for dropup with alignment we use the parent as popper container\n\n      if ($(parent).hasClass(ClassName.DROPUP)) {\n        if ($(this._menu).hasClass(ClassName.MENULEFT) || $(this._menu).hasClass(ClassName.MENURIGHT)) {\n          element = parent;\n        }\n      }\n\n      this._popper = new Popper(element, this._menu, this._getPopperConfig()); // if this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n      if ('ontouchstart' in document.documentElement && !$(parent).closest(Selector.NAVBAR_NAV).length) {\n        $('body').children().on('mouseover', null, $.noop);\n      }\n\n      this._element.focus();\n\n      this._element.setAttribute('aria-expanded', true);\n\n      $(this._menu).toggleClass(ClassName.SHOW);\n      $(parent).toggleClass(ClassName.SHOW).trigger($.Event(Event.SHOWN, relatedTarget));\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY);\n      $(this._element).off(EVENT_KEY);\n      this._element = null;\n      this._menu = null;\n\n      if (this._popper !== null) {\n        this._popper.destroy();\n      }\n\n      this._popper = null;\n    };\n\n    _proto.update = function update() {\n      this._inNavbar = this._detectNavbar();\n\n      if (this._popper !== null) {\n        this._popper.scheduleUpdate();\n      }\n    }; // private\n\n\n    _proto._addEventListeners = function _addEventListeners() {\n      var _this = this;\n\n      $(this._element).on(Event.CLICK, function (event) {\n        event.preventDefault();\n        event.stopPropagation();\n\n        _this.toggle();\n      });\n    };\n\n    _proto._getConfig = function _getConfig(config) {\n      config = $.extend({}, this.constructor.Default, $(this._element).data(), config);\n      Util.typeCheckConfig(NAME, config, this.constructor.DefaultType);\n      return config;\n    };\n\n    _proto._getMenuElement = function _getMenuElement() {\n      if (!this._menu) {\n        var parent = Dropdown._getParentFromElement(this._element);\n\n        this._menu = $(parent).find(Selector.MENU)[0];\n      }\n\n      return this._menu;\n    };\n\n    _proto._getPlacement = function _getPlacement() {\n      var $parentDropdown = $(this._element).parent();\n      var placement = AttachmentMap.BOTTOM; // Handle dropup\n\n      if ($parentDropdown.hasClass(ClassName.DROPUP)) {\n        placement = AttachmentMap.TOP;\n\n        if ($(this._menu).hasClass(ClassName.MENURIGHT)) {\n          placement = AttachmentMap.TOPEND;\n        }\n      } else if ($(this._menu).hasClass(ClassName.MENURIGHT)) {\n        placement = AttachmentMap.BOTTOMEND;\n      }\n\n      return placement;\n    };\n\n    _proto._detectNavbar = function _detectNavbar() {\n      return $(this._element).closest('.navbar').length > 0;\n    };\n\n    _proto._getPopperConfig = function _getPopperConfig() {\n      var _this2 = this;\n\n      var offsetConf = {};\n\n      if (typeof this._config.offset === 'function') {\n        offsetConf.fn = function (data) {\n          data.offsets = $.extend({}, data.offsets, _this2._config.offset(data.offsets) || {});\n          return data;\n        };\n      } else {\n        offsetConf.offset = this._config.offset;\n      }\n\n      var popperConfig = {\n        placement: this._getPlacement(),\n        modifiers: {\n          offset: offsetConf,\n          flip: {\n            enabled: this._config.flip\n          }\n        } // Disable Popper.js for Dropdown in Navbar\n\n      };\n\n      if (this._inNavbar) {\n        popperConfig.modifiers.applyStyle = {\n          enabled: !this._inNavbar\n        };\n      }\n\n      return popperConfig;\n    }; // static\n\n\n    Dropdown._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY);\n\n        var _config = typeof config === 'object' ? config : null;\n\n        if (!data) {\n          data = new Dropdown(this, _config);\n          $(this).data(DATA_KEY, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new Error(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    Dropdown._clearMenus = function _clearMenus(event) {\n      if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) {\n        return;\n      }\n\n      var toggles = $.makeArray($(Selector.DATA_TOGGLE));\n\n      for (var i = 0; i < toggles.length; i++) {\n        var parent = Dropdown._getParentFromElement(toggles[i]);\n\n        var context = $(toggles[i]).data(DATA_KEY);\n        var relatedTarget = {\n          relatedTarget: toggles[i]\n        };\n\n        if (!context) {\n          continue;\n        }\n\n        var dropdownMenu = context._menu;\n\n        if (!$(parent).hasClass(ClassName.SHOW)) {\n          continue;\n        }\n\n        if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $.contains(parent, event.target)) {\n          continue;\n        }\n\n        var hideEvent = $.Event(Event.HIDE, relatedTarget);\n        $(parent).trigger(hideEvent);\n\n        if (hideEvent.isDefaultPrevented()) {\n          continue;\n        } // if this is a touch-enabled device we remove the extra\n        // empty mouseover listeners we added for iOS support\n\n\n        if ('ontouchstart' in document.documentElement) {\n          $('body').children().off('mouseover', null, $.noop);\n        }\n\n        toggles[i].setAttribute('aria-expanded', 'false');\n        $(dropdownMenu).removeClass(ClassName.SHOW);\n        $(parent).removeClass(ClassName.SHOW).trigger($.Event(Event.HIDDEN, relatedTarget));\n      }\n    };\n\n    Dropdown._getParentFromElement = function _getParentFromElement(element) {\n      var parent;\n      var selector = Util.getSelectorFromElement(element);\n\n      if (selector) {\n        parent = $(selector)[0];\n      }\n\n      return parent || element.parentNode;\n    };\n\n    Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {\n      if (!REGEXP_KEYDOWN.test(event.which) || /button/i.test(event.target.tagName) && event.which === SPACE_KEYCODE || /input|textarea/i.test(event.target.tagName)) {\n        return;\n      }\n\n      event.preventDefault();\n      event.stopPropagation();\n\n      if (this.disabled || $(this).hasClass(ClassName.DISABLED)) {\n        return;\n      }\n\n      var parent = Dropdown._getParentFromElement(this);\n\n      var isActive = $(parent).hasClass(ClassName.SHOW);\n\n      if (!isActive && (event.which !== ESCAPE_KEYCODE || event.which !== SPACE_KEYCODE) || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {\n        if (event.which === ESCAPE_KEYCODE) {\n          var toggle = $(parent).find(Selector.DATA_TOGGLE)[0];\n          $(toggle).trigger('focus');\n        }\n\n        $(this).trigger('click');\n        return;\n      }\n\n      var items = $(parent).find(Selector.VISIBLE_ITEMS).get();\n\n      if (!items.length) {\n        return;\n      }\n\n      var index = items.indexOf(event.target);\n\n      if (event.which === ARROW_UP_KEYCODE && index > 0) {\n        // up\n        index--;\n      }\n\n      if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) {\n        // down\n        index++;\n      }\n\n      if (index < 0) {\n        index = 0;\n      }\n\n      items[index].focus();\n    };\n\n    createClass(Dropdown, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType;\n      }\n    }]);\n    return Dropdown;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event.KEYDOWN_DATA_API, Selector.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event.KEYDOWN_DATA_API, Selector.MENU, Dropdown._dataApiKeydownHandler).on(Event.CLICK_DATA_API + \" \" + Event.KEYUP_DATA_API, Dropdown._clearMenus).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n    event.preventDefault();\n    event.stopPropagation();\n\n    Dropdown._jQueryInterface.call($(this), 'toggle');\n  }).on(Event.CLICK_DATA_API, Selector.FORM_CHILD, function (e) {\n    e.stopPropagation();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME] = Dropdown._jQueryInterface;\n  $.fn[NAME].Constructor = Dropdown;\n\n  $.fn[NAME].noConflict = function () {\n    $.fn[NAME] = JQUERY_NO_CONFLICT;\n    return Dropdown._jQueryInterface;\n  };\n\n  return Dropdown;\n}($, Popper);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.0.0-beta.2): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nvar Modal = function () {\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  var NAME = 'modal';\n  var VERSION = '4.0.0-beta.2';\n  var DATA_KEY = 'bs.modal';\n  var EVENT_KEY = \".\" + DATA_KEY;\n  var DATA_API_KEY = '.data-api';\n  var JQUERY_NO_CONFLICT = $.fn[NAME];\n  var TRANSITION_DURATION = 300;\n  var BACKDROP_TRANSITION_DURATION = 150;\n  var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key\n\n  var Default = {\n    backdrop: true,\n    keyboard: true,\n    focus: true,\n    show: true\n  };\n  var DefaultType = {\n    backdrop: '(boolean|string)',\n    keyboard: 'boolean',\n    focus: 'boolean',\n    show: 'boolean'\n  };\n  var Event = {\n    HIDE: \"hide\" + EVENT_KEY,\n    HIDDEN: \"hidden\" + EVENT_KEY,\n    SHOW: \"show\" + EVENT_KEY,\n    SHOWN: \"shown\" + EVENT_KEY,\n    FOCUSIN: \"focusin\" + EVENT_KEY,\n    RESIZE: \"resize\" + EVENT_KEY,\n    CLICK_DISMISS: \"click.dismiss\" + EVENT_KEY,\n    KEYDOWN_DISMISS: \"keydown.dismiss\" + EVENT_KEY,\n    MOUSEUP_DISMISS: \"mouseup.dismiss\" + EVENT_KEY,\n    MOUSEDOWN_DISMISS: \"mousedown.dismiss\" + EVENT_KEY,\n    CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n  };\n  var ClassName = {\n    SCROLLBAR_MEASURER: 'modal-scrollbar-measure',\n    BACKDROP: 'modal-backdrop',\n    OPEN: 'modal-open',\n    FADE: 'fade',\n    SHOW: 'show'\n  };\n  var Selector = {\n    DIALOG: '.modal-dialog',\n    DATA_TOGGLE: '[data-toggle=\"modal\"]',\n    DATA_DISMISS: '[data-dismiss=\"modal\"]',\n    FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',\n    STICKY_CONTENT: '.sticky-top',\n    NAVBAR_TOGGLER: '.navbar-toggler'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Modal =\n  /*#__PURE__*/\n  function () {\n    function Modal(element, config) {\n      this._config = this._getConfig(config);\n      this._element = element;\n      this._dialog = $(element).find(Selector.DIALOG)[0];\n      this._backdrop = null;\n      this._isShown = false;\n      this._isBodyOverflowing = false;\n      this._ignoreBackdropClick = false;\n      this._originalBodyPadding = 0;\n      this._scrollbarWidth = 0;\n    } // getters\n\n\n    var _proto = Modal.prototype;\n\n    // public\n    _proto.toggle = function toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    };\n\n    _proto.show = function show(relatedTarget) {\n      var _this = this;\n\n      if (this._isTransitioning || this._isShown) {\n        return;\n      }\n\n      if (Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.FADE)) {\n        this._isTransitioning = true;\n      }\n\n      var showEvent = $.Event(Event.SHOW, {\n        relatedTarget: relatedTarget\n      });\n      $(this._element).trigger(showEvent);\n\n      if (this._isShown || showEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._isShown = true;\n\n      this._checkScrollbar();\n\n      this._setScrollbar();\n\n      this._adjustDialog();\n\n      $(document.body).addClass(ClassName.OPEN);\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      $(this._element).on(Event.CLICK_DISMISS, Selector.DATA_DISMISS, function (event) {\n        return _this.hide(event);\n      });\n      $(this._dialog).on(Event.MOUSEDOWN_DISMISS, function () {\n        $(_this._element).one(Event.MOUSEUP_DISMISS, function (event) {\n          if ($(event.target).is(_this._element)) {\n            _this._ignoreBackdropClick = true;\n          }\n        });\n      });\n\n      this._showBackdrop(function () {\n        return _this._showElement(relatedTarget);\n      });\n    };\n\n    _proto.hide = function hide(event) {\n      var _this2 = this;\n\n      if (event) {\n        event.preventDefault();\n      }\n\n      if (this._isTransitioning || !this._isShown) {\n        return;\n      }\n\n      var hideEvent = $.Event(Event.HIDE);\n      $(this._element).trigger(hideEvent);\n\n      if (!this._isShown || hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._isShown = false;\n      var transition = Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.FADE);\n\n      if (transition) {\n        this._isTransitioning = true;\n      }\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      $(document).off(Event.FOCUSIN);\n      $(this._element).removeClass(ClassName.SHOW);\n      $(this._element).off(Event.CLICK_DISMISS);\n      $(this._dialog).off(Event.MOUSEDOWN_DISMISS);\n\n      if (transition) {\n        $(this._element).one(Util.TRANSITION_END, function (event) {\n          return _this2._hideModal(event);\n        }).emulateTransitionEnd(TRANSITION_DURATION);\n      } else {\n        this._hideModal();\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY);\n      $(window, document, this._element, this._backdrop).off(EVENT_KEY);\n      this._config = null;\n      this._element = null;\n      this._dialog = null;\n      this._backdrop = null;\n      this._isShown = null;\n      this._isBodyOverflowing = null;\n      this._ignoreBackdropClick = null;\n      this._scrollbarWidth = null;\n    };\n\n    _proto.handleUpdate = function handleUpdate() {\n      this._adjustDialog();\n    }; // private\n\n\n    _proto._getConfig = function _getConfig(config) {\n      config = $.extend({}, Default, config);\n      Util.typeCheckConfig(NAME, config, DefaultType);\n      return config;\n    };\n\n    _proto._showElement = function _showElement(relatedTarget) {\n      var _this3 = this;\n\n      var transition = Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.FADE);\n\n      if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n        // don't move modals dom position\n        document.body.appendChild(this._element);\n      }\n\n      this._element.style.display = 'block';\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.scrollTop = 0;\n\n      if (transition) {\n        Util.reflow(this._element);\n      }\n\n      $(this._element).addClass(ClassName.SHOW);\n\n      if (this._config.focus) {\n        this._enforceFocus();\n      }\n\n      var shownEvent = $.Event(Event.SHOWN, {\n        relatedTarget: relatedTarget\n      });\n\n      var transitionComplete = function transitionComplete() {\n        if (_this3._config.focus) {\n          _this3._element.focus();\n        }\n\n        _this3._isTransitioning = false;\n        $(_this3._element).trigger(shownEvent);\n      };\n\n      if (transition) {\n        $(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(TRANSITION_DURATION);\n      } else {\n        transitionComplete();\n      }\n    };\n\n    _proto._enforceFocus = function _enforceFocus() {\n      var _this4 = this;\n\n      $(document).off(Event.FOCUSIN) // guard against infinite focus loop\n      .on(Event.FOCUSIN, function (event) {\n        if (document !== event.target && _this4._element !== event.target && !$(_this4._element).has(event.target).length) {\n          _this4._element.focus();\n        }\n      });\n    };\n\n    _proto._setEscapeEvent = function _setEscapeEvent() {\n      var _this5 = this;\n\n      if (this._isShown && this._config.keyboard) {\n        $(this._element).on(Event.KEYDOWN_DISMISS, function (event) {\n          if (event.which === ESCAPE_KEYCODE) {\n            event.preventDefault();\n\n            _this5.hide();\n          }\n        });\n      } else if (!this._isShown) {\n        $(this._element).off(Event.KEYDOWN_DISMISS);\n      }\n    };\n\n    _proto._setResizeEvent = function _setResizeEvent() {\n      var _this6 = this;\n\n      if (this._isShown) {\n        $(window).on(Event.RESIZE, function (event) {\n          return _this6.handleUpdate(event);\n        });\n      } else {\n        $(window).off(Event.RESIZE);\n      }\n    };\n\n    _proto._hideModal = function _hideModal() {\n      var _this7 = this;\n\n      this._element.style.display = 'none';\n\n      this._element.setAttribute('aria-hidden', true);\n\n      this._isTransitioning = false;\n\n      this._showBackdrop(function () {\n        $(document.body).removeClass(ClassName.OPEN);\n\n        _this7._resetAdjustments();\n\n        _this7._resetScrollbar();\n\n        $(_this7._element).trigger(Event.HIDDEN);\n      });\n    };\n\n    _proto._removeBackdrop = function _removeBackdrop() {\n      if (this._backdrop) {\n        $(this._backdrop).remove();\n        this._backdrop = null;\n      }\n    };\n\n    _proto._showBackdrop = function _showBackdrop(callback) {\n      var _this8 = this;\n\n      var animate = $(this._element).hasClass(ClassName.FADE) ? ClassName.FADE : '';\n\n      if (this._isShown && this._config.backdrop) {\n        var doAnimate = Util.supportsTransitionEnd() && animate;\n        this._backdrop = document.createElement('div');\n        this._backdrop.className = ClassName.BACKDROP;\n\n        if (animate) {\n          $(this._backdrop).addClass(animate);\n        }\n\n        $(this._backdrop).appendTo(document.body);\n        $(this._element).on(Event.CLICK_DISMISS, function (event) {\n          if (_this8._ignoreBackdropClick) {\n            _this8._ignoreBackdropClick = false;\n            return;\n          }\n\n          if (event.target !== event.currentTarget) {\n            return;\n          }\n\n          if (_this8._config.backdrop === 'static') {\n            _this8._element.focus();\n          } else {\n            _this8.hide();\n          }\n        });\n\n        if (doAnimate) {\n          Util.reflow(this._backdrop);\n        }\n\n        $(this._backdrop).addClass(ClassName.SHOW);\n\n        if (!callback) {\n          return;\n        }\n\n        if (!doAnimate) {\n          callback();\n          return;\n        }\n\n        $(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(BACKDROP_TRANSITION_DURATION);\n      } else if (!this._isShown && this._backdrop) {\n        $(this._backdrop).removeClass(ClassName.SHOW);\n\n        var callbackRemove = function callbackRemove() {\n          _this8._removeBackdrop();\n\n          if (callback) {\n            callback();\n          }\n        };\n\n        if (Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.FADE)) {\n          $(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(BACKDROP_TRANSITION_DURATION);\n        } else {\n          callbackRemove();\n        }\n      } else if (callback) {\n        callback();\n      }\n    }; // ----------------------------------------------------------------------\n    // the following methods are used to handle overflowing modals\n    // todo (fat): these should probably be refactored out of modal.js\n    // ----------------------------------------------------------------------\n\n\n    _proto._adjustDialog = function _adjustDialog() {\n      var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n      if (!this._isBodyOverflowing && isModalOverflowing) {\n        this._element.style.paddingLeft = this._scrollbarWidth + \"px\";\n      }\n\n      if (this._isBodyOverflowing && !isModalOverflowing) {\n        this._element.style.paddingRight = this._scrollbarWidth + \"px\";\n      }\n    };\n\n    _proto._resetAdjustments = function _resetAdjustments() {\n      this._element.style.paddingLeft = '';\n      this._element.style.paddingRight = '';\n    };\n\n    _proto._checkScrollbar = function _checkScrollbar() {\n      var rect = document.body.getBoundingClientRect();\n      this._isBodyOverflowing = rect.left + rect.right < window.innerWidth;\n      this._scrollbarWidth = this._getScrollbarWidth();\n    };\n\n    _proto._setScrollbar = function _setScrollbar() {\n      var _this9 = this;\n\n      if (this._isBodyOverflowing) {\n        // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n        //   while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n        // Adjust fixed content padding\n        $(Selector.FIXED_CONTENT).each(function (index, element) {\n          var actualPadding = $(element)[0].style.paddingRight;\n          var calculatedPadding = $(element).css('padding-right');\n          $(element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this9._scrollbarWidth + \"px\");\n        }); // Adjust sticky content margin\n\n        $(Selector.STICKY_CONTENT).each(function (index, element) {\n          var actualMargin = $(element)[0].style.marginRight;\n          var calculatedMargin = $(element).css('margin-right');\n          $(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this9._scrollbarWidth + \"px\");\n        }); // Adjust navbar-toggler margin\n\n        $(Selector.NAVBAR_TOGGLER).each(function (index, element) {\n          var actualMargin = $(element)[0].style.marginRight;\n          var calculatedMargin = $(element).css('margin-right');\n          $(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) + _this9._scrollbarWidth + \"px\");\n        }); // Adjust body padding\n\n        var actualPadding = document.body.style.paddingRight;\n        var calculatedPadding = $('body').css('padding-right');\n        $('body').data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + \"px\");\n      }\n    };\n\n    _proto._resetScrollbar = function _resetScrollbar() {\n      // Restore fixed content padding\n      $(Selector.FIXED_CONTENT).each(function (index, element) {\n        var padding = $(element).data('padding-right');\n\n        if (typeof padding !== 'undefined') {\n          $(element).css('padding-right', padding).removeData('padding-right');\n        }\n      }); // Restore sticky content and navbar-toggler margin\n\n      $(Selector.STICKY_CONTENT + \", \" + Selector.NAVBAR_TOGGLER).each(function (index, element) {\n        var margin = $(element).data('margin-right');\n\n        if (typeof margin !== 'undefined') {\n          $(element).css('margin-right', margin).removeData('margin-right');\n        }\n      }); // Restore body padding\n\n      var padding = $('body').data('padding-right');\n\n      if (typeof padding !== 'undefined') {\n        $('body').css('padding-right', padding).removeData('padding-right');\n      }\n    };\n\n    _proto._getScrollbarWidth = function _getScrollbarWidth() {\n      // thx d.walsh\n      var scrollDiv = document.createElement('div');\n      scrollDiv.className = ClassName.SCROLLBAR_MEASURER;\n      document.body.appendChild(scrollDiv);\n      var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;\n      document.body.removeChild(scrollDiv);\n      return scrollbarWidth;\n    }; // static\n\n\n    Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY);\n\n        var _config = $.extend({}, Modal.Default, $(this).data(), typeof config === 'object' && config);\n\n        if (!data) {\n          data = new Modal(this, _config);\n          $(this).data(DATA_KEY, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new Error(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config](relatedTarget);\n        } else if (_config.show) {\n          data.show(relatedTarget);\n        }\n      });\n    };\n\n    createClass(Modal, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default;\n      }\n    }]);\n    return Modal;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n    var _this10 = this;\n\n    var target;\n    var selector = Util.getSelectorFromElement(this);\n\n    if (selector) {\n      target = $(selector)[0];\n    }\n\n    var config = $(target).data(DATA_KEY) ? 'toggle' : $.extend({}, $(target).data(), $(this).data());\n\n    if (this.tagName === 'A' || this.tagName === 'AREA') {\n      event.preventDefault();\n    }\n\n    var $target = $(target).one(Event.SHOW, function (showEvent) {\n      if (showEvent.isDefaultPrevented()) {\n        // only register focus restorer if modal will actually get shown\n        return;\n      }\n\n      $target.one(Event.HIDDEN, function () {\n        if ($(_this10).is(':visible')) {\n          _this10.focus();\n        }\n      });\n    });\n\n    Modal._jQueryInterface.call($(target), config, this);\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME] = Modal._jQueryInterface;\n  $.fn[NAME].Constructor = Modal;\n\n  $.fn[NAME].noConflict = function () {\n    $.fn[NAME] = JQUERY_NO_CONFLICT;\n    return Modal._jQueryInterface;\n  };\n\n  return Modal;\n}($);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.0.0-beta.2): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nvar Tooltip = function () {\n  /**\n   * Check for Popper dependency\n   * Popper - https://popper.js.org\n   */\n  if (typeof Popper === 'undefined') {\n    throw new Error('Bootstrap tooltips require Popper.js (https://popper.js.org)');\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n\n  var NAME = 'tooltip';\n  var VERSION = '4.0.0-beta.2';\n  var DATA_KEY = 'bs.tooltip';\n  var EVENT_KEY = \".\" + DATA_KEY;\n  var JQUERY_NO_CONFLICT = $.fn[NAME];\n  var TRANSITION_DURATION = 150;\n  var CLASS_PREFIX = 'bs-tooltip';\n  var BSCLS_PREFIX_REGEX = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX + \"\\\\S+\", 'g');\n  var DefaultType = {\n    animation: 'boolean',\n    template: 'string',\n    title: '(string|element|function)',\n    trigger: 'string',\n    delay: '(number|object)',\n    html: 'boolean',\n    selector: '(string|boolean)',\n    placement: '(string|function)',\n    offset: '(number|string)',\n    container: '(string|element|boolean)',\n    fallbackPlacement: '(string|array)'\n  };\n  var AttachmentMap = {\n    AUTO: 'auto',\n    TOP: 'top',\n    RIGHT: 'right',\n    BOTTOM: 'bottom',\n    LEFT: 'left'\n  };\n  var Default = {\n    animation: true,\n    template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"arrow\"></div>' + '<div class=\"tooltip-inner\"></div></div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    selector: false,\n    placement: 'top',\n    offset: 0,\n    container: false,\n    fallbackPlacement: 'flip'\n  };\n  var HoverState = {\n    SHOW: 'show',\n    OUT: 'out'\n  };\n  var Event = {\n    HIDE: \"hide\" + EVENT_KEY,\n    HIDDEN: \"hidden\" + EVENT_KEY,\n    SHOW: \"show\" + EVENT_KEY,\n    SHOWN: \"shown\" + EVENT_KEY,\n    INSERTED: \"inserted\" + EVENT_KEY,\n    CLICK: \"click\" + EVENT_KEY,\n    FOCUSIN: \"focusin\" + EVENT_KEY,\n    FOCUSOUT: \"focusout\" + EVENT_KEY,\n    MOUSEENTER: \"mouseenter\" + EVENT_KEY,\n    MOUSELEAVE: \"mouseleave\" + EVENT_KEY\n  };\n  var ClassName = {\n    FADE: 'fade',\n    SHOW: 'show'\n  };\n  var Selector = {\n    TOOLTIP: '.tooltip',\n    TOOLTIP_INNER: '.tooltip-inner',\n    ARROW: '.arrow'\n  };\n  var Trigger = {\n    HOVER: 'hover',\n    FOCUS: 'focus',\n    CLICK: 'click',\n    MANUAL: 'manual'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Tooltip =\n  /*#__PURE__*/\n  function () {\n    function Tooltip(element, config) {\n      // private\n      this._isEnabled = true;\n      this._timeout = 0;\n      this._hoverState = '';\n      this._activeTrigger = {};\n      this._popper = null; // protected\n\n      this.element = element;\n      this.config = this._getConfig(config);\n      this.tip = null;\n\n      this._setListeners();\n    } // getters\n\n\n    var _proto = Tooltip.prototype;\n\n    // public\n    _proto.enable = function enable() {\n      this._isEnabled = true;\n    };\n\n    _proto.disable = function disable() {\n      this._isEnabled = false;\n    };\n\n    _proto.toggleEnabled = function toggleEnabled() {\n      this._isEnabled = !this._isEnabled;\n    };\n\n    _proto.toggle = function toggle(event) {\n      if (!this._isEnabled) {\n        return;\n      }\n\n      if (event) {\n        var dataKey = this.constructor.DATA_KEY;\n        var context = $(event.currentTarget).data(dataKey);\n\n        if (!context) {\n          context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n          $(event.currentTarget).data(dataKey, context);\n        }\n\n        context._activeTrigger.click = !context._activeTrigger.click;\n\n        if (context._isWithActiveTrigger()) {\n          context._enter(null, context);\n        } else {\n          context._leave(null, context);\n        }\n      } else {\n        if ($(this.getTipElement()).hasClass(ClassName.SHOW)) {\n          this._leave(null, this);\n\n          return;\n        }\n\n        this._enter(null, this);\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      clearTimeout(this._timeout);\n      $.removeData(this.element, this.constructor.DATA_KEY);\n      $(this.element).off(this.constructor.EVENT_KEY);\n      $(this.element).closest('.modal').off('hide.bs.modal');\n\n      if (this.tip) {\n        $(this.tip).remove();\n      }\n\n      this._isEnabled = null;\n      this._timeout = null;\n      this._hoverState = null;\n      this._activeTrigger = null;\n\n      if (this._popper !== null) {\n        this._popper.destroy();\n      }\n\n      this._popper = null;\n      this.element = null;\n      this.config = null;\n      this.tip = null;\n    };\n\n    _proto.show = function show() {\n      var _this = this;\n\n      if ($(this.element).css('display') === 'none') {\n        throw new Error('Please use show on visible elements');\n      }\n\n      var showEvent = $.Event(this.constructor.Event.SHOW);\n\n      if (this.isWithContent() && this._isEnabled) {\n        $(this.element).trigger(showEvent);\n        var isInTheDom = $.contains(this.element.ownerDocument.documentElement, this.element);\n\n        if (showEvent.isDefaultPrevented() || !isInTheDom) {\n          return;\n        }\n\n        var tip = this.getTipElement();\n        var tipId = Util.getUID(this.constructor.NAME);\n        tip.setAttribute('id', tipId);\n        this.element.setAttribute('aria-describedby', tipId);\n        this.setContent();\n\n        if (this.config.animation) {\n          $(tip).addClass(ClassName.FADE);\n        }\n\n        var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;\n\n        var attachment = this._getAttachment(placement);\n\n        this.addAttachmentClass(attachment);\n        var container = this.config.container === false ? document.body : $(this.config.container);\n        $(tip).data(this.constructor.DATA_KEY, this);\n\n        if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) {\n          $(tip).appendTo(container);\n        }\n\n        $(this.element).trigger(this.constructor.Event.INSERTED);\n        this._popper = new Popper(this.element, tip, {\n          placement: attachment,\n          modifiers: {\n            offset: {\n              offset: this.config.offset\n            },\n            flip: {\n              behavior: this.config.fallbackPlacement\n            },\n            arrow: {\n              element: Selector.ARROW\n            }\n          },\n          onCreate: function onCreate(data) {\n            if (data.originalPlacement !== data.placement) {\n              _this._handlePopperPlacementChange(data);\n            }\n          },\n          onUpdate: function onUpdate(data) {\n            _this._handlePopperPlacementChange(data);\n          }\n        });\n        $(tip).addClass(ClassName.SHOW); // if this is a touch-enabled device we add extra\n        // empty mouseover listeners to the body's immediate children;\n        // only needed because of broken event delegation on iOS\n        // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n        if ('ontouchstart' in document.documentElement) {\n          $('body').children().on('mouseover', null, $.noop);\n        }\n\n        var complete = function complete() {\n          if (_this.config.animation) {\n            _this._fixTransition();\n          }\n\n          var prevHoverState = _this._hoverState;\n          _this._hoverState = null;\n          $(_this.element).trigger(_this.constructor.Event.SHOWN);\n\n          if (prevHoverState === HoverState.OUT) {\n            _this._leave(null, _this);\n          }\n        };\n\n        if (Util.supportsTransitionEnd() && $(this.tip).hasClass(ClassName.FADE)) {\n          $(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(Tooltip._TRANSITION_DURATION);\n        } else {\n          complete();\n        }\n      }\n    };\n\n    _proto.hide = function hide(callback) {\n      var _this2 = this;\n\n      var tip = this.getTipElement();\n      var hideEvent = $.Event(this.constructor.Event.HIDE);\n\n      var complete = function complete() {\n        if (_this2._hoverState !== HoverState.SHOW && tip.parentNode) {\n          tip.parentNode.removeChild(tip);\n        }\n\n        _this2._cleanTipClass();\n\n        _this2.element.removeAttribute('aria-describedby');\n\n        $(_this2.element).trigger(_this2.constructor.Event.HIDDEN);\n\n        if (_this2._popper !== null) {\n          _this2._popper.destroy();\n        }\n\n        if (callback) {\n          callback();\n        }\n      };\n\n      $(this.element).trigger(hideEvent);\n\n      if (hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      $(tip).removeClass(ClassName.SHOW); // if this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n      if ('ontouchstart' in document.documentElement) {\n        $('body').children().off('mouseover', null, $.noop);\n      }\n\n      this._activeTrigger[Trigger.CLICK] = false;\n      this._activeTrigger[Trigger.FOCUS] = false;\n      this._activeTrigger[Trigger.HOVER] = false;\n\n      if (Util.supportsTransitionEnd() && $(this.tip).hasClass(ClassName.FADE)) {\n        $(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION);\n      } else {\n        complete();\n      }\n\n      this._hoverState = '';\n    };\n\n    _proto.update = function update() {\n      if (this._popper !== null) {\n        this._popper.scheduleUpdate();\n      }\n    }; // protected\n\n\n    _proto.isWithContent = function isWithContent() {\n      return Boolean(this.getTitle());\n    };\n\n    _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n      $(this.getTipElement()).addClass(CLASS_PREFIX + \"-\" + attachment);\n    };\n\n    _proto.getTipElement = function getTipElement() {\n      this.tip = this.tip || $(this.config.template)[0];\n      return this.tip;\n    };\n\n    _proto.setContent = function setContent() {\n      var $tip = $(this.getTipElement());\n      this.setElementContent($tip.find(Selector.TOOLTIP_INNER), this.getTitle());\n      $tip.removeClass(ClassName.FADE + \" \" + ClassName.SHOW);\n    };\n\n    _proto.setElementContent = function setElementContent($element, content) {\n      var html = this.config.html;\n\n      if (typeof content === 'object' && (content.nodeType || content.jquery)) {\n        // content is a DOM node or a jQuery\n        if (html) {\n          if (!$(content).parent().is($element)) {\n            $element.empty().append(content);\n          }\n        } else {\n          $element.text($(content).text());\n        }\n      } else {\n        $element[html ? 'html' : 'text'](content);\n      }\n    };\n\n    _proto.getTitle = function getTitle() {\n      var title = this.element.getAttribute('data-original-title');\n\n      if (!title) {\n        title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title;\n      }\n\n      return title;\n    }; // private\n\n\n    _proto._getAttachment = function _getAttachment(placement) {\n      return AttachmentMap[placement.toUpperCase()];\n    };\n\n    _proto._setListeners = function _setListeners() {\n      var _this3 = this;\n\n      var triggers = this.config.trigger.split(' ');\n      triggers.forEach(function (trigger) {\n        if (trigger === 'click') {\n          $(_this3.element).on(_this3.constructor.Event.CLICK, _this3.config.selector, function (event) {\n            return _this3.toggle(event);\n          });\n        } else if (trigger !== Trigger.MANUAL) {\n          var eventIn = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSEENTER : _this3.constructor.Event.FOCUSIN;\n          var eventOut = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSELEAVE : _this3.constructor.Event.FOCUSOUT;\n          $(_this3.element).on(eventIn, _this3.config.selector, function (event) {\n            return _this3._enter(event);\n          }).on(eventOut, _this3.config.selector, function (event) {\n            return _this3._leave(event);\n          });\n        }\n\n        $(_this3.element).closest('.modal').on('hide.bs.modal', function () {\n          return _this3.hide();\n        });\n      });\n\n      if (this.config.selector) {\n        this.config = $.extend({}, this.config, {\n          trigger: 'manual',\n          selector: ''\n        });\n      } else {\n        this._fixTitle();\n      }\n    };\n\n    _proto._fixTitle = function _fixTitle() {\n      var titleType = typeof this.element.getAttribute('data-original-title');\n\n      if (this.element.getAttribute('title') || titleType !== 'string') {\n        this.element.setAttribute('data-original-title', this.element.getAttribute('title') || '');\n        this.element.setAttribute('title', '');\n      }\n    };\n\n    _proto._enter = function _enter(event, context) {\n      var dataKey = this.constructor.DATA_KEY;\n      context = context || $(event.currentTarget).data(dataKey);\n\n      if (!context) {\n        context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n        $(event.currentTarget).data(dataKey, context);\n      }\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true;\n      }\n\n      if ($(context.getTipElement()).hasClass(ClassName.SHOW) || context._hoverState === HoverState.SHOW) {\n        context._hoverState = HoverState.SHOW;\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HoverState.SHOW;\n\n      if (!context.config.delay || !context.config.delay.show) {\n        context.show();\n        return;\n      }\n\n      context._timeout = setTimeout(function () {\n        if (context._hoverState === HoverState.SHOW) {\n          context.show();\n        }\n      }, context.config.delay.show);\n    };\n\n    _proto._leave = function _leave(event, context) {\n      var dataKey = this.constructor.DATA_KEY;\n      context = context || $(event.currentTarget).data(dataKey);\n\n      if (!context) {\n        context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n        $(event.currentTarget).data(dataKey, context);\n      }\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false;\n      }\n\n      if (context._isWithActiveTrigger()) {\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HoverState.OUT;\n\n      if (!context.config.delay || !context.config.delay.hide) {\n        context.hide();\n        return;\n      }\n\n      context._timeout = setTimeout(function () {\n        if (context._hoverState === HoverState.OUT) {\n          context.hide();\n        }\n      }, context.config.delay.hide);\n    };\n\n    _proto._isWithActiveTrigger = function _isWithActiveTrigger() {\n      for (var trigger in this._activeTrigger) {\n        if (this._activeTrigger[trigger]) {\n          return true;\n        }\n      }\n\n      return false;\n    };\n\n    _proto._getConfig = function _getConfig(config) {\n      config = $.extend({}, this.constructor.Default, $(this.element).data(), config);\n\n      if (typeof config.delay === 'number') {\n        config.delay = {\n          show: config.delay,\n          hide: config.delay\n        };\n      }\n\n      if (typeof config.title === 'number') {\n        config.title = config.title.toString();\n      }\n\n      if (typeof config.content === 'number') {\n        config.content = config.content.toString();\n      }\n\n      Util.typeCheckConfig(NAME, config, this.constructor.DefaultType);\n      return config;\n    };\n\n    _proto._getDelegateConfig = function _getDelegateConfig() {\n      var config = {};\n\n      if (this.config) {\n        for (var key in this.config) {\n          if (this.constructor.Default[key] !== this.config[key]) {\n            config[key] = this.config[key];\n          }\n        }\n      }\n\n      return config;\n    };\n\n    _proto._cleanTipClass = function _cleanTipClass() {\n      var $tip = $(this.getTipElement());\n      var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        $tip.removeClass(tabClass.join(''));\n      }\n    };\n\n    _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(data) {\n      this._cleanTipClass();\n\n      this.addAttachmentClass(this._getAttachment(data.placement));\n    };\n\n    _proto._fixTransition = function _fixTransition() {\n      var tip = this.getTipElement();\n      var initConfigAnimation = this.config.animation;\n\n      if (tip.getAttribute('x-placement') !== null) {\n        return;\n      }\n\n      $(tip).removeClass(ClassName.FADE);\n      this.config.animation = false;\n      this.hide();\n      this.show();\n      this.config.animation = initConfigAnimation;\n    }; // static\n\n\n    Tooltip._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY);\n\n        var _config = typeof config === 'object' && config;\n\n        if (!data && /dispose|hide/.test(config)) {\n          return;\n        }\n\n        if (!data) {\n          data = new Tooltip(this, _config);\n          $(this).data(DATA_KEY, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new Error(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    createClass(Tooltip, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default;\n      }\n    }, {\n      key: \"NAME\",\n      get: function get() {\n        return NAME;\n      }\n    }, {\n      key: \"DATA_KEY\",\n      get: function get() {\n        return DATA_KEY;\n      }\n    }, {\n      key: \"Event\",\n      get: function get() {\n        return Event;\n      }\n    }, {\n      key: \"EVENT_KEY\",\n      get: function get() {\n        return EVENT_KEY;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType;\n      }\n    }]);\n    return Tooltip;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n\n  $.fn[NAME] = Tooltip._jQueryInterface;\n  $.fn[NAME].Constructor = Tooltip;\n\n  $.fn[NAME].noConflict = function () {\n    $.fn[NAME] = JQUERY_NO_CONFLICT;\n    return Tooltip._jQueryInterface;\n  };\n\n  return Tooltip;\n}($, Popper);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.0.0-beta.2): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nvar Popover = function () {\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  var NAME = 'popover';\n  var VERSION = '4.0.0-beta.2';\n  var DATA_KEY = 'bs.popover';\n  var EVENT_KEY = \".\" + DATA_KEY;\n  var JQUERY_NO_CONFLICT = $.fn[NAME];\n  var CLASS_PREFIX = 'bs-popover';\n  var BSCLS_PREFIX_REGEX = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX + \"\\\\S+\", 'g');\n  var Default = $.extend({}, Tooltip.Default, {\n    placement: 'right',\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div></div>'\n  });\n  var DefaultType = $.extend({}, Tooltip.DefaultType, {\n    content: '(string|element|function)'\n  });\n  var ClassName = {\n    FADE: 'fade',\n    SHOW: 'show'\n  };\n  var Selector = {\n    TITLE: '.popover-header',\n    CONTENT: '.popover-body'\n  };\n  var Event = {\n    HIDE: \"hide\" + EVENT_KEY,\n    HIDDEN: \"hidden\" + EVENT_KEY,\n    SHOW: \"show\" + EVENT_KEY,\n    SHOWN: \"shown\" + EVENT_KEY,\n    INSERTED: \"inserted\" + EVENT_KEY,\n    CLICK: \"click\" + EVENT_KEY,\n    FOCUSIN: \"focusin\" + EVENT_KEY,\n    FOCUSOUT: \"focusout\" + EVENT_KEY,\n    MOUSEENTER: \"mouseenter\" + EVENT_KEY,\n    MOUSELEAVE: \"mouseleave\" + EVENT_KEY\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Popover =\n  /*#__PURE__*/\n  function (_Tooltip) {\n    inheritsLoose(Popover, _Tooltip);\n\n    function Popover() {\n      return _Tooltip.apply(this, arguments) || this;\n    }\n\n    var _proto = Popover.prototype;\n\n    // overrides\n    _proto.isWithContent = function isWithContent() {\n      return this.getTitle() || this._getContent();\n    };\n\n    _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n      $(this.getTipElement()).addClass(CLASS_PREFIX + \"-\" + attachment);\n    };\n\n    _proto.getTipElement = function getTipElement() {\n      this.tip = this.tip || $(this.config.template)[0];\n      return this.tip;\n    };\n\n    _proto.setContent = function setContent() {\n      var $tip = $(this.getTipElement()); // we use append for html objects to maintain js events\n\n      this.setElementContent($tip.find(Selector.TITLE), this.getTitle());\n      this.setElementContent($tip.find(Selector.CONTENT), this._getContent());\n      $tip.removeClass(ClassName.FADE + \" \" + ClassName.SHOW);\n    }; // private\n\n\n    _proto._getContent = function _getContent() {\n      return this.element.getAttribute('data-content') || (typeof this.config.content === 'function' ? this.config.content.call(this.element) : this.config.content);\n    };\n\n    _proto._cleanTipClass = function _cleanTipClass() {\n      var $tip = $(this.getTipElement());\n      var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        $tip.removeClass(tabClass.join(''));\n      }\n    }; // static\n\n\n    Popover._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY);\n\n        var _config = typeof config === 'object' ? config : null;\n\n        if (!data && /destroy|hide/.test(config)) {\n          return;\n        }\n\n        if (!data) {\n          data = new Popover(this, _config);\n          $(this).data(DATA_KEY, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new Error(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    createClass(Popover, null, [{\n      key: \"VERSION\",\n      // getters\n      get: function get() {\n        return VERSION;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default;\n      }\n    }, {\n      key: \"NAME\",\n      get: function get() {\n        return NAME;\n      }\n    }, {\n      key: \"DATA_KEY\",\n      get: function get() {\n        return DATA_KEY;\n      }\n    }, {\n      key: \"Event\",\n      get: function get() {\n        return Event;\n      }\n    }, {\n      key: \"EVENT_KEY\",\n      get: function get() {\n        return EVENT_KEY;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType;\n      }\n    }]);\n    return Popover;\n  }(Tooltip);\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n\n  $.fn[NAME] = Popover._jQueryInterface;\n  $.fn[NAME].Constructor = Popover;\n\n  $.fn[NAME].noConflict = function () {\n    $.fn[NAME] = JQUERY_NO_CONFLICT;\n    return Popover._jQueryInterface;\n  };\n\n  return Popover;\n}($);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.0.0-beta.2): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nvar ScrollSpy = function () {\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  var NAME = 'scrollspy';\n  var VERSION = '4.0.0-beta.2';\n  var DATA_KEY = 'bs.scrollspy';\n  var EVENT_KEY = \".\" + DATA_KEY;\n  var DATA_API_KEY = '.data-api';\n  var JQUERY_NO_CONFLICT = $.fn[NAME];\n  var Default = {\n    offset: 10,\n    method: 'auto',\n    target: ''\n  };\n  var DefaultType = {\n    offset: 'number',\n    method: 'string',\n    target: '(string|element)'\n  };\n  var Event = {\n    ACTIVATE: \"activate\" + EVENT_KEY,\n    SCROLL: \"scroll\" + EVENT_KEY,\n    LOAD_DATA_API: \"load\" + EVENT_KEY + DATA_API_KEY\n  };\n  var ClassName = {\n    DROPDOWN_ITEM: 'dropdown-item',\n    DROPDOWN_MENU: 'dropdown-menu',\n    ACTIVE: 'active'\n  };\n  var Selector = {\n    DATA_SPY: '[data-spy=\"scroll\"]',\n    ACTIVE: '.active',\n    NAV_LIST_GROUP: '.nav, .list-group',\n    NAV_LINKS: '.nav-link',\n    NAV_ITEMS: '.nav-item',\n    LIST_ITEMS: '.list-group-item',\n    DROPDOWN: '.dropdown',\n    DROPDOWN_ITEMS: '.dropdown-item',\n    DROPDOWN_TOGGLE: '.dropdown-toggle'\n  };\n  var OffsetMethod = {\n    OFFSET: 'offset',\n    POSITION: 'position'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var ScrollSpy =\n  /*#__PURE__*/\n  function () {\n    function ScrollSpy(element, config) {\n      var _this = this;\n\n      this._element = element;\n      this._scrollElement = element.tagName === 'BODY' ? window : element;\n      this._config = this._getConfig(config);\n      this._selector = this._config.target + \" \" + Selector.NAV_LINKS + \",\" + (this._config.target + \" \" + Selector.LIST_ITEMS + \",\") + (this._config.target + \" \" + Selector.DROPDOWN_ITEMS);\n      this._offsets = [];\n      this._targets = [];\n      this._activeTarget = null;\n      this._scrollHeight = 0;\n      $(this._scrollElement).on(Event.SCROLL, function (event) {\n        return _this._process(event);\n      });\n      this.refresh();\n\n      this._process();\n    } // getters\n\n\n    var _proto = ScrollSpy.prototype;\n\n    // public\n    _proto.refresh = function refresh() {\n      var _this2 = this;\n\n      var autoMethod = this._scrollElement !== this._scrollElement.window ? OffsetMethod.POSITION : OffsetMethod.OFFSET;\n      var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n      var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0;\n      this._offsets = [];\n      this._targets = [];\n      this._scrollHeight = this._getScrollHeight();\n      var targets = $.makeArray($(this._selector));\n      targets.map(function (element) {\n        var target;\n        var targetSelector = Util.getSelectorFromElement(element);\n\n        if (targetSelector) {\n          target = $(targetSelector)[0];\n        }\n\n        if (target) {\n          var targetBCR = target.getBoundingClientRect();\n\n          if (targetBCR.width || targetBCR.height) {\n            // todo (fat): remove sketch reliance on jQuery position/offset\n            return [$(target)[offsetMethod]().top + offsetBase, targetSelector];\n          }\n        }\n\n        return null;\n      }).filter(function (item) {\n        return item;\n      }).sort(function (a, b) {\n        return a[0] - b[0];\n      }).forEach(function (item) {\n        _this2._offsets.push(item[0]);\n\n        _this2._targets.push(item[1]);\n      });\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY);\n      $(this._scrollElement).off(EVENT_KEY);\n      this._element = null;\n      this._scrollElement = null;\n      this._config = null;\n      this._selector = null;\n      this._offsets = null;\n      this._targets = null;\n      this._activeTarget = null;\n      this._scrollHeight = null;\n    }; // private\n\n\n    _proto._getConfig = function _getConfig(config) {\n      config = $.extend({}, Default, config);\n\n      if (typeof config.target !== 'string') {\n        var id = $(config.target).attr('id');\n\n        if (!id) {\n          id = Util.getUID(NAME);\n          $(config.target).attr('id', id);\n        }\n\n        config.target = \"#\" + id;\n      }\n\n      Util.typeCheckConfig(NAME, config, DefaultType);\n      return config;\n    };\n\n    _proto._getScrollTop = function _getScrollTop() {\n      return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n    };\n\n    _proto._getScrollHeight = function _getScrollHeight() {\n      return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n    };\n\n    _proto._getOffsetHeight = function _getOffsetHeight() {\n      return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n    };\n\n    _proto._process = function _process() {\n      var scrollTop = this._getScrollTop() + this._config.offset;\n\n      var scrollHeight = this._getScrollHeight();\n\n      var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n      if (this._scrollHeight !== scrollHeight) {\n        this.refresh();\n      }\n\n      if (scrollTop >= maxScroll) {\n        var target = this._targets[this._targets.length - 1];\n\n        if (this._activeTarget !== target) {\n          this._activate(target);\n        }\n\n        return;\n      }\n\n      if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n        this._activeTarget = null;\n\n        this._clear();\n\n        return;\n      }\n\n      for (var i = this._offsets.length; i--;) {\n        var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n        if (isActiveTarget) {\n          this._activate(this._targets[i]);\n        }\n      }\n    };\n\n    _proto._activate = function _activate(target) {\n      this._activeTarget = target;\n\n      this._clear();\n\n      var queries = this._selector.split(','); // eslint-disable-next-line arrow-body-style\n\n\n      queries = queries.map(function (selector) {\n        return selector + \"[data-target=\\\"\" + target + \"\\\"],\" + (selector + \"[href=\\\"\" + target + \"\\\"]\");\n      });\n      var $link = $(queries.join(','));\n\n      if ($link.hasClass(ClassName.DROPDOWN_ITEM)) {\n        $link.closest(Selector.DROPDOWN).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE);\n        $link.addClass(ClassName.ACTIVE);\n      } else {\n        // Set triggered link as active\n        $link.addClass(ClassName.ACTIVE); // Set triggered links parents as active\n        // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n\n        $link.parents(Selector.NAV_LIST_GROUP).prev(Selector.NAV_LINKS + \", \" + Selector.LIST_ITEMS).addClass(ClassName.ACTIVE); // Handle special case when .nav-link is inside .nav-item\n\n        $link.parents(Selector.NAV_LIST_GROUP).prev(Selector.NAV_ITEMS).children(Selector.NAV_LINKS).addClass(ClassName.ACTIVE);\n      }\n\n      $(this._scrollElement).trigger(Event.ACTIVATE, {\n        relatedTarget: target\n      });\n    };\n\n    _proto._clear = function _clear() {\n      $(this._selector).filter(Selector.ACTIVE).removeClass(ClassName.ACTIVE);\n    }; // static\n\n\n    ScrollSpy._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY);\n\n        var _config = typeof config === 'object' && config;\n\n        if (!data) {\n          data = new ScrollSpy(this, _config);\n          $(this).data(DATA_KEY, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new Error(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    createClass(ScrollSpy, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default;\n      }\n    }]);\n    return ScrollSpy;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(window).on(Event.LOAD_DATA_API, function () {\n    var scrollSpys = $.makeArray($(Selector.DATA_SPY));\n\n    for (var i = scrollSpys.length; i--;) {\n      var $spy = $(scrollSpys[i]);\n\n      ScrollSpy._jQueryInterface.call($spy, $spy.data());\n    }\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME] = ScrollSpy._jQueryInterface;\n  $.fn[NAME].Constructor = ScrollSpy;\n\n  $.fn[NAME].noConflict = function () {\n    $.fn[NAME] = JQUERY_NO_CONFLICT;\n    return ScrollSpy._jQueryInterface;\n  };\n\n  return ScrollSpy;\n}($);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.0.0-beta.2): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nvar Tab = function () {\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n  var NAME = 'tab';\n  var VERSION = '4.0.0-beta.2';\n  var DATA_KEY = 'bs.tab';\n  var EVENT_KEY = \".\" + DATA_KEY;\n  var DATA_API_KEY = '.data-api';\n  var JQUERY_NO_CONFLICT = $.fn[NAME];\n  var TRANSITION_DURATION = 150;\n  var Event = {\n    HIDE: \"hide\" + EVENT_KEY,\n    HIDDEN: \"hidden\" + EVENT_KEY,\n    SHOW: \"show\" + EVENT_KEY,\n    SHOWN: \"shown\" + EVENT_KEY,\n    CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n  };\n  var ClassName = {\n    DROPDOWN_MENU: 'dropdown-menu',\n    ACTIVE: 'active',\n    DISABLED: 'disabled',\n    FADE: 'fade',\n    SHOW: 'show'\n  };\n  var Selector = {\n    DROPDOWN: '.dropdown',\n    NAV_LIST_GROUP: '.nav, .list-group',\n    ACTIVE: '.active',\n    ACTIVE_UL: '> li > .active',\n    DATA_TOGGLE: '[data-toggle=\"tab\"], [data-toggle=\"pill\"], [data-toggle=\"list\"]',\n    DROPDOWN_TOGGLE: '.dropdown-toggle',\n    DROPDOWN_ACTIVE_CHILD: '> .dropdown-menu .active'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Tab =\n  /*#__PURE__*/\n  function () {\n    function Tab(element) {\n      this._element = element;\n    } // getters\n\n\n    var _proto = Tab.prototype;\n\n    // public\n    _proto.show = function show() {\n      var _this = this;\n\n      if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).hasClass(ClassName.ACTIVE) || $(this._element).hasClass(ClassName.DISABLED)) {\n        return;\n      }\n\n      var target;\n      var previous;\n      var listElement = $(this._element).closest(Selector.NAV_LIST_GROUP)[0];\n      var selector = Util.getSelectorFromElement(this._element);\n\n      if (listElement) {\n        var itemSelector = listElement.nodeName === 'UL' ? Selector.ACTIVE_UL : Selector.ACTIVE;\n        previous = $.makeArray($(listElement).find(itemSelector));\n        previous = previous[previous.length - 1];\n      }\n\n      var hideEvent = $.Event(Event.HIDE, {\n        relatedTarget: this._element\n      });\n      var showEvent = $.Event(Event.SHOW, {\n        relatedTarget: previous\n      });\n\n      if (previous) {\n        $(previous).trigger(hideEvent);\n      }\n\n      $(this._element).trigger(showEvent);\n\n      if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (selector) {\n        target = $(selector)[0];\n      }\n\n      this._activate(this._element, listElement);\n\n      var complete = function complete() {\n        var hiddenEvent = $.Event(Event.HIDDEN, {\n          relatedTarget: _this._element\n        });\n        var shownEvent = $.Event(Event.SHOWN, {\n          relatedTarget: previous\n        });\n        $(previous).trigger(hiddenEvent);\n        $(_this._element).trigger(shownEvent);\n      };\n\n      if (target) {\n        this._activate(target, target.parentNode, complete);\n      } else {\n        complete();\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY);\n      this._element = null;\n    }; // private\n\n\n    _proto._activate = function _activate(element, container, callback) {\n      var _this2 = this;\n\n      var activeElements;\n\n      if (container.nodeName === 'UL') {\n        activeElements = $(container).find(Selector.ACTIVE_UL);\n      } else {\n        activeElements = $(container).children(Selector.ACTIVE);\n      }\n\n      var active = activeElements[0];\n      var isTransitioning = callback && Util.supportsTransitionEnd() && active && $(active).hasClass(ClassName.FADE);\n\n      var complete = function complete() {\n        return _this2._transitionComplete(element, active, isTransitioning, callback);\n      };\n\n      if (active && isTransitioning) {\n        $(active).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION);\n      } else {\n        complete();\n      }\n\n      if (active) {\n        $(active).removeClass(ClassName.SHOW);\n      }\n    };\n\n    _proto._transitionComplete = function _transitionComplete(element, active, isTransitioning, callback) {\n      if (active) {\n        $(active).removeClass(ClassName.ACTIVE);\n        var dropdownChild = $(active.parentNode).find(Selector.DROPDOWN_ACTIVE_CHILD)[0];\n\n        if (dropdownChild) {\n          $(dropdownChild).removeClass(ClassName.ACTIVE);\n        }\n\n        if (active.getAttribute('role') === 'tab') {\n          active.setAttribute('aria-selected', false);\n        }\n      }\n\n      $(element).addClass(ClassName.ACTIVE);\n\n      if (element.getAttribute('role') === 'tab') {\n        element.setAttribute('aria-selected', true);\n      }\n\n      if (isTransitioning) {\n        Util.reflow(element);\n        $(element).addClass(ClassName.SHOW);\n      } else {\n        $(element).removeClass(ClassName.FADE);\n      }\n\n      if (element.parentNode && $(element.parentNode).hasClass(ClassName.DROPDOWN_MENU)) {\n        var dropdownElement = $(element).closest(Selector.DROPDOWN)[0];\n\n        if (dropdownElement) {\n          $(dropdownElement).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE);\n        }\n\n        element.setAttribute('aria-expanded', true);\n      }\n\n      if (callback) {\n        callback();\n      }\n    }; // static\n\n\n    Tab._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $this = $(this);\n        var data = $this.data(DATA_KEY);\n\n        if (!data) {\n          data = new Tab(this);\n          $this.data(DATA_KEY, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new Error(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    createClass(Tab, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION;\n      }\n    }]);\n    return Tab;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n    event.preventDefault();\n\n    Tab._jQueryInterface.call($(this), 'show');\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME] = Tab._jQueryInterface;\n  $.fn[NAME].Constructor = Tab;\n\n  $.fn[NAME].noConflict = function () {\n    $.fn[NAME] = JQUERY_NO_CONFLICT;\n    return Tab._jQueryInterface;\n  };\n\n  return Tab;\n}($);\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.0.0-alpha.6): index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\n(function () {\n  if (typeof $ === 'undefined') {\n    throw new Error('Bootstrap\\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\\'s JavaScript.');\n  }\n\n  var version = $.fn.jquery.split(' ')[0].split('.');\n  var minMajor = 1;\n  var ltMajor = 2;\n  var minMinor = 9;\n  var minPatch = 1;\n  var maxMajor = 4;\n\n  if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) {\n    throw new Error('Bootstrap\\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0');\n  }\n})($);\n\nexports.Util = Util;\nexports.Alert = Alert;\nexports.Button = Button;\nexports.Carousel = Carousel;\nexports.Collapse = Collapse;\nexports.Dropdown = Dropdown;\nexports.Modal = Modal;\nexports.Popover = Popover;\nexports.Scrollspy = ScrollSpy;\nexports.Tab = Tab;\nexports.Tooltip = Tooltip;\n\nreturn exports;\n\n}({},$,Popper));\n//# sourceMappingURL=bootstrap.js.map\n"
  },
  {
    "path": "public/frontend/plugins/font-awesome/css/font-awesome.css",
    "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/* FONT PATH\n * -------------------------- */\n@font-face {\n  font-family: 'FontAwesome';\n  src: url('../fonts/fontawesome-webfont.eot?v=4.7.0');\n  src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'), url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular') format('svg');\n  font-weight: normal;\n  font-style: normal;\n}\n.fa {\n  display: inline-block;\n  font: normal normal normal 14px/1 FontAwesome;\n  font-size: inherit;\n  text-rendering: auto;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n/* makes the font 33% larger relative to the icon container */\n.fa-lg {\n  font-size: 1.33333333em;\n  line-height: 0.75em;\n  vertical-align: -15%;\n}\n.fa-2x {\n  font-size: 2em;\n}\n.fa-3x {\n  font-size: 3em;\n}\n.fa-4x {\n  font-size: 4em;\n}\n.fa-5x {\n  font-size: 5em;\n}\n.fa-fw {\n  width: 1.28571429em;\n  text-align: center;\n}\n.fa-ul {\n  padding-left: 0;\n  margin-left: 2.14285714em;\n  list-style-type: none;\n}\n.fa-ul > li {\n  position: relative;\n}\n.fa-li {\n  position: absolute;\n  left: -2.14285714em;\n  width: 2.14285714em;\n  top: 0.14285714em;\n  text-align: center;\n}\n.fa-li.fa-lg {\n  left: -1.85714286em;\n}\n.fa-border {\n  padding: .2em .25em .15em;\n  border: solid 0.08em #eeeeee;\n  border-radius: .1em;\n}\n.fa-pull-left {\n  float: left;\n}\n.fa-pull-right {\n  float: right;\n}\n.fa.fa-pull-left {\n  margin-right: .3em;\n}\n.fa.fa-pull-right {\n  margin-left: .3em;\n}\n/* Deprecated as of 4.4.0 */\n.pull-right {\n  float: right;\n}\n.pull-left {\n  float: left;\n}\n.fa.pull-left {\n  margin-right: .3em;\n}\n.fa.pull-right {\n  margin-left: .3em;\n}\n.fa-spin {\n  -webkit-animation: fa-spin 2s infinite linear;\n  animation: fa-spin 2s infinite linear;\n}\n.fa-pulse {\n  -webkit-animation: fa-spin 1s infinite steps(8);\n  animation: fa-spin 1s infinite steps(8);\n}\n@-webkit-keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(359deg);\n    transform: rotate(359deg);\n  }\n}\n@keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(359deg);\n    transform: rotate(359deg);\n  }\n}\n.fa-rotate-90 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\";\n  -webkit-transform: rotate(90deg);\n  -ms-transform: rotate(90deg);\n  transform: rotate(90deg);\n}\n.fa-rotate-180 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\";\n  -webkit-transform: rotate(180deg);\n  -ms-transform: rotate(180deg);\n  transform: rotate(180deg);\n}\n.fa-rotate-270 {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\";\n  -webkit-transform: rotate(270deg);\n  -ms-transform: rotate(270deg);\n  transform: rotate(270deg);\n}\n.fa-flip-horizontal {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\";\n  -webkit-transform: scale(-1, 1);\n  -ms-transform: scale(-1, 1);\n  transform: scale(-1, 1);\n}\n.fa-flip-vertical {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\";\n  -webkit-transform: scale(1, -1);\n  -ms-transform: scale(1, -1);\n  transform: scale(1, -1);\n}\n:root .fa-rotate-90,\n:root .fa-rotate-180,\n:root .fa-rotate-270,\n:root .fa-flip-horizontal,\n:root .fa-flip-vertical {\n  filter: none;\n}\n.fa-stack {\n  position: relative;\n  display: inline-block;\n  width: 2em;\n  height: 2em;\n  line-height: 2em;\n  vertical-align: middle;\n}\n.fa-stack-1x,\n.fa-stack-2x {\n  position: absolute;\n  left: 0;\n  width: 100%;\n  text-align: center;\n}\n.fa-stack-1x {\n  line-height: inherit;\n}\n.fa-stack-2x {\n  font-size: 2em;\n}\n.fa-inverse {\n  color: #ffffff;\n}\n/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\n   readers do not read off random characters that represent icons */\n.fa-glass:before {\n  content: \"\\f000\";\n}\n.fa-music:before {\n  content: \"\\f001\";\n}\n.fa-search:before {\n  content: \"\\f002\";\n}\n.fa-envelope-o:before {\n  content: \"\\f003\";\n}\n.fa-heart:before {\n  content: \"\\f004\";\n}\n.fa-star:before {\n  content: \"\\f005\";\n}\n.fa-star-o:before {\n  content: \"\\f006\";\n}\n.fa-user:before {\n  content: \"\\f007\";\n}\n.fa-film:before {\n  content: \"\\f008\";\n}\n.fa-th-large:before {\n  content: \"\\f009\";\n}\n.fa-th:before {\n  content: \"\\f00a\";\n}\n.fa-th-list:before {\n  content: \"\\f00b\";\n}\n.fa-check:before {\n  content: \"\\f00c\";\n}\n.fa-remove:before,\n.fa-close:before,\n.fa-times:before {\n  content: \"\\f00d\";\n}\n.fa-search-plus:before {\n  content: \"\\f00e\";\n}\n.fa-search-minus:before {\n  content: \"\\f010\";\n}\n.fa-power-off:before {\n  content: \"\\f011\";\n}\n.fa-signal:before {\n  content: \"\\f012\";\n}\n.fa-gear:before,\n.fa-cog:before {\n  content: \"\\f013\";\n}\n.fa-trash-o:before {\n  content: \"\\f014\";\n}\n.fa-home:before {\n  content: \"\\f015\";\n}\n.fa-file-o:before {\n  content: \"\\f016\";\n}\n.fa-clock-o:before {\n  content: \"\\f017\";\n}\n.fa-road:before {\n  content: \"\\f018\";\n}\n.fa-download:before {\n  content: \"\\f019\";\n}\n.fa-arrow-circle-o-down:before {\n  content: \"\\f01a\";\n}\n.fa-arrow-circle-o-up:before {\n  content: \"\\f01b\";\n}\n.fa-inbox:before {\n  content: \"\\f01c\";\n}\n.fa-play-circle-o:before {\n  content: \"\\f01d\";\n}\n.fa-rotate-right:before,\n.fa-repeat:before {\n  content: \"\\f01e\";\n}\n.fa-refresh:before {\n  content: \"\\f021\";\n}\n.fa-list-alt:before {\n  content: \"\\f022\";\n}\n.fa-lock:before {\n  content: \"\\f023\";\n}\n.fa-flag:before {\n  content: \"\\f024\";\n}\n.fa-headphones:before {\n  content: \"\\f025\";\n}\n.fa-volume-off:before {\n  content: \"\\f026\";\n}\n.fa-volume-down:before {\n  content: \"\\f027\";\n}\n.fa-volume-up:before {\n  content: \"\\f028\";\n}\n.fa-qrcode:before {\n  content: \"\\f029\";\n}\n.fa-barcode:before {\n  content: \"\\f02a\";\n}\n.fa-tag:before {\n  content: \"\\f02b\";\n}\n.fa-tags:before {\n  content: \"\\f02c\";\n}\n.fa-book:before {\n  content: \"\\f02d\";\n}\n.fa-bookmark:before {\n  content: \"\\f02e\";\n}\n.fa-print:before {\n  content: \"\\f02f\";\n}\n.fa-camera:before {\n  content: \"\\f030\";\n}\n.fa-font:before {\n  content: \"\\f031\";\n}\n.fa-bold:before {\n  content: \"\\f032\";\n}\n.fa-italic:before {\n  content: \"\\f033\";\n}\n.fa-text-height:before {\n  content: \"\\f034\";\n}\n.fa-text-width:before {\n  content: \"\\f035\";\n}\n.fa-align-left:before {\n  content: \"\\f036\";\n}\n.fa-align-center:before {\n  content: \"\\f037\";\n}\n.fa-align-right:before {\n  content: \"\\f038\";\n}\n.fa-align-justify:before {\n  content: \"\\f039\";\n}\n.fa-list:before {\n  content: \"\\f03a\";\n}\n.fa-dedent:before,\n.fa-outdent:before {\n  content: \"\\f03b\";\n}\n.fa-indent:before {\n  content: \"\\f03c\";\n}\n.fa-video-camera:before {\n  content: \"\\f03d\";\n}\n.fa-photo:before,\n.fa-image:before,\n.fa-picture-o:before {\n  content: \"\\f03e\";\n}\n.fa-pencil:before {\n  content: \"\\f040\";\n}\n.fa-map-marker:before {\n  content: \"\\f041\";\n}\n.fa-adjust:before {\n  content: \"\\f042\";\n}\n.fa-tint:before {\n  content: \"\\f043\";\n}\n.fa-edit:before,\n.fa-pencil-square-o:before {\n  content: \"\\f044\";\n}\n.fa-share-square-o:before {\n  content: \"\\f045\";\n}\n.fa-check-square-o:before {\n  content: \"\\f046\";\n}\n.fa-arrows:before {\n  content: \"\\f047\";\n}\n.fa-step-backward:before {\n  content: \"\\f048\";\n}\n.fa-fast-backward:before {\n  content: \"\\f049\";\n}\n.fa-backward:before {\n  content: \"\\f04a\";\n}\n.fa-play:before {\n  content: \"\\f04b\";\n}\n.fa-pause:before {\n  content: \"\\f04c\";\n}\n.fa-stop:before {\n  content: \"\\f04d\";\n}\n.fa-forward:before {\n  content: \"\\f04e\";\n}\n.fa-fast-forward:before {\n  content: \"\\f050\";\n}\n.fa-step-forward:before {\n  content: \"\\f051\";\n}\n.fa-eject:before {\n  content: \"\\f052\";\n}\n.fa-chevron-left:before {\n  content: \"\\f053\";\n}\n.fa-chevron-right:before {\n  content: \"\\f054\";\n}\n.fa-plus-circle:before {\n  content: \"\\f055\";\n}\n.fa-minus-circle:before {\n  content: \"\\f056\";\n}\n.fa-times-circle:before {\n  content: \"\\f057\";\n}\n.fa-check-circle:before {\n  content: \"\\f058\";\n}\n.fa-question-circle:before {\n  content: \"\\f059\";\n}\n.fa-info-circle:before {\n  content: \"\\f05a\";\n}\n.fa-crosshairs:before {\n  content: \"\\f05b\";\n}\n.fa-times-circle-o:before {\n  content: \"\\f05c\";\n}\n.fa-check-circle-o:before {\n  content: \"\\f05d\";\n}\n.fa-ban:before {\n  content: \"\\f05e\";\n}\n.fa-arrow-left:before {\n  content: \"\\f060\";\n}\n.fa-arrow-right:before {\n  content: \"\\f061\";\n}\n.fa-arrow-up:before {\n  content: \"\\f062\";\n}\n.fa-arrow-down:before {\n  content: \"\\f063\";\n}\n.fa-mail-forward:before,\n.fa-share:before {\n  content: \"\\f064\";\n}\n.fa-expand:before {\n  content: \"\\f065\";\n}\n.fa-compress:before {\n  content: \"\\f066\";\n}\n.fa-plus:before {\n  content: \"\\f067\";\n}\n.fa-minus:before {\n  content: \"\\f068\";\n}\n.fa-asterisk:before {\n  content: \"\\f069\";\n}\n.fa-exclamation-circle:before {\n  content: \"\\f06a\";\n}\n.fa-gift:before {\n  content: \"\\f06b\";\n}\n.fa-leaf:before {\n  content: \"\\f06c\";\n}\n.fa-fire:before {\n  content: \"\\f06d\";\n}\n.fa-eye:before {\n  content: \"\\f06e\";\n}\n.fa-eye-slash:before {\n  content: \"\\f070\";\n}\n.fa-warning:before,\n.fa-exclamation-triangle:before {\n  content: \"\\f071\";\n}\n.fa-plane:before {\n  content: \"\\f072\";\n}\n.fa-calendar:before {\n  content: \"\\f073\";\n}\n.fa-random:before {\n  content: \"\\f074\";\n}\n.fa-comment:before {\n  content: \"\\f075\";\n}\n.fa-magnet:before {\n  content: \"\\f076\";\n}\n.fa-chevron-up:before {\n  content: \"\\f077\";\n}\n.fa-chevron-down:before {\n  content: \"\\f078\";\n}\n.fa-retweet:before {\n  content: \"\\f079\";\n}\n.fa-shopping-cart:before {\n  content: \"\\f07a\";\n}\n.fa-folder:before {\n  content: \"\\f07b\";\n}\n.fa-folder-open:before {\n  content: \"\\f07c\";\n}\n.fa-arrows-v:before {\n  content: \"\\f07d\";\n}\n.fa-arrows-h:before {\n  content: \"\\f07e\";\n}\n.fa-bar-chart-o:before,\n.fa-bar-chart:before {\n  content: \"\\f080\";\n}\n.fa-twitter-square:before {\n  content: \"\\f081\";\n}\n.fa-facebook-square:before {\n  content: \"\\f082\";\n}\n.fa-camera-retro:before {\n  content: \"\\f083\";\n}\n.fa-key:before {\n  content: \"\\f084\";\n}\n.fa-gears:before,\n.fa-cogs:before {\n  content: \"\\f085\";\n}\n.fa-comments:before {\n  content: \"\\f086\";\n}\n.fa-thumbs-o-up:before {\n  content: \"\\f087\";\n}\n.fa-thumbs-o-down:before {\n  content: \"\\f088\";\n}\n.fa-star-half:before {\n  content: \"\\f089\";\n}\n.fa-heart-o:before {\n  content: \"\\f08a\";\n}\n.fa-sign-out:before {\n  content: \"\\f08b\";\n}\n.fa-linkedin-square:before {\n  content: \"\\f08c\";\n}\n.fa-thumb-tack:before {\n  content: \"\\f08d\";\n}\n.fa-external-link:before {\n  content: \"\\f08e\";\n}\n.fa-sign-in:before {\n  content: \"\\f090\";\n}\n.fa-trophy:before {\n  content: \"\\f091\";\n}\n.fa-github-square:before {\n  content: \"\\f092\";\n}\n.fa-upload:before {\n  content: \"\\f093\";\n}\n.fa-lemon-o:before {\n  content: \"\\f094\";\n}\n.fa-phone:before {\n  content: \"\\f095\";\n}\n.fa-square-o:before {\n  content: \"\\f096\";\n}\n.fa-bookmark-o:before {\n  content: \"\\f097\";\n}\n.fa-phone-square:before {\n  content: \"\\f098\";\n}\n.fa-twitter:before {\n  content: \"\\f099\";\n}\n.fa-facebook-f:before,\n.fa-facebook:before {\n  content: \"\\f09a\";\n}\n.fa-github:before {\n  content: \"\\f09b\";\n}\n.fa-unlock:before {\n  content: \"\\f09c\";\n}\n.fa-credit-card:before {\n  content: \"\\f09d\";\n}\n.fa-feed:before,\n.fa-rss:before {\n  content: \"\\f09e\";\n}\n.fa-hdd-o:before {\n  content: \"\\f0a0\";\n}\n.fa-bullhorn:before {\n  content: \"\\f0a1\";\n}\n.fa-bell:before {\n  content: \"\\f0f3\";\n}\n.fa-certificate:before {\n  content: \"\\f0a3\";\n}\n.fa-hand-o-right:before {\n  content: \"\\f0a4\";\n}\n.fa-hand-o-left:before {\n  content: \"\\f0a5\";\n}\n.fa-hand-o-up:before {\n  content: \"\\f0a6\";\n}\n.fa-hand-o-down:before {\n  content: \"\\f0a7\";\n}\n.fa-arrow-circle-left:before {\n  content: \"\\f0a8\";\n}\n.fa-arrow-circle-right:before {\n  content: \"\\f0a9\";\n}\n.fa-arrow-circle-up:before {\n  content: \"\\f0aa\";\n}\n.fa-arrow-circle-down:before {\n  content: \"\\f0ab\";\n}\n.fa-globe:before {\n  content: \"\\f0ac\";\n}\n.fa-wrench:before {\n  content: \"\\f0ad\";\n}\n.fa-tasks:before {\n  content: \"\\f0ae\";\n}\n.fa-filter:before {\n  content: \"\\f0b0\";\n}\n.fa-briefcase:before {\n  content: \"\\f0b1\";\n}\n.fa-arrows-alt:before {\n  content: \"\\f0b2\";\n}\n.fa-group:before,\n.fa-users:before {\n  content: \"\\f0c0\";\n}\n.fa-chain:before,\n.fa-link:before {\n  content: \"\\f0c1\";\n}\n.fa-cloud:before {\n  content: \"\\f0c2\";\n}\n.fa-flask:before {\n  content: \"\\f0c3\";\n}\n.fa-cut:before,\n.fa-scissors:before {\n  content: \"\\f0c4\";\n}\n.fa-copy:before,\n.fa-files-o:before {\n  content: \"\\f0c5\";\n}\n.fa-paperclip:before {\n  content: \"\\f0c6\";\n}\n.fa-save:before,\n.fa-floppy-o:before {\n  content: \"\\f0c7\";\n}\n.fa-square:before {\n  content: \"\\f0c8\";\n}\n.fa-navicon:before,\n.fa-reorder:before,\n.fa-bars:before {\n  content: \"\\f0c9\";\n}\n.fa-list-ul:before {\n  content: \"\\f0ca\";\n}\n.fa-list-ol:before {\n  content: \"\\f0cb\";\n}\n.fa-strikethrough:before {\n  content: \"\\f0cc\";\n}\n.fa-underline:before {\n  content: \"\\f0cd\";\n}\n.fa-table:before {\n  content: \"\\f0ce\";\n}\n.fa-magic:before {\n  content: \"\\f0d0\";\n}\n.fa-truck:before {\n  content: \"\\f0d1\";\n}\n.fa-pinterest:before {\n  content: \"\\f0d2\";\n}\n.fa-pinterest-square:before {\n  content: \"\\f0d3\";\n}\n.fa-google-plus-square:before {\n  content: \"\\f0d4\";\n}\n.fa-google-plus:before {\n  content: \"\\f0d5\";\n}\n.fa-money:before {\n  content: \"\\f0d6\";\n}\n.fa-caret-down:before {\n  content: \"\\f0d7\";\n}\n.fa-caret-up:before {\n  content: \"\\f0d8\";\n}\n.fa-caret-left:before {\n  content: \"\\f0d9\";\n}\n.fa-caret-right:before {\n  content: \"\\f0da\";\n}\n.fa-columns:before {\n  content: \"\\f0db\";\n}\n.fa-unsorted:before,\n.fa-sort:before {\n  content: \"\\f0dc\";\n}\n.fa-sort-down:before,\n.fa-sort-desc:before {\n  content: \"\\f0dd\";\n}\n.fa-sort-up:before,\n.fa-sort-asc:before {\n  content: \"\\f0de\";\n}\n.fa-envelope:before {\n  content: \"\\f0e0\";\n}\n.fa-linkedin:before {\n  content: \"\\f0e1\";\n}\n.fa-rotate-left:before,\n.fa-undo:before {\n  content: \"\\f0e2\";\n}\n.fa-legal:before,\n.fa-gavel:before {\n  content: \"\\f0e3\";\n}\n.fa-dashboard:before,\n.fa-tachometer:before {\n  content: \"\\f0e4\";\n}\n.fa-comment-o:before {\n  content: \"\\f0e5\";\n}\n.fa-comments-o:before {\n  content: \"\\f0e6\";\n}\n.fa-flash:before,\n.fa-bolt:before {\n  content: \"\\f0e7\";\n}\n.fa-sitemap:before {\n  content: \"\\f0e8\";\n}\n.fa-umbrella:before {\n  content: \"\\f0e9\";\n}\n.fa-paste:before,\n.fa-clipboard:before {\n  content: \"\\f0ea\";\n}\n.fa-lightbulb-o:before {\n  content: \"\\f0eb\";\n}\n.fa-exchange:before {\n  content: \"\\f0ec\";\n}\n.fa-cloud-download:before {\n  content: \"\\f0ed\";\n}\n.fa-cloud-upload:before {\n  content: \"\\f0ee\";\n}\n.fa-user-md:before {\n  content: \"\\f0f0\";\n}\n.fa-stethoscope:before {\n  content: \"\\f0f1\";\n}\n.fa-suitcase:before {\n  content: \"\\f0f2\";\n}\n.fa-bell-o:before {\n  content: \"\\f0a2\";\n}\n.fa-coffee:before {\n  content: \"\\f0f4\";\n}\n.fa-cutlery:before {\n  content: \"\\f0f5\";\n}\n.fa-file-text-o:before {\n  content: \"\\f0f6\";\n}\n.fa-building-o:before {\n  content: \"\\f0f7\";\n}\n.fa-hospital-o:before {\n  content: \"\\f0f8\";\n}\n.fa-ambulance:before {\n  content: \"\\f0f9\";\n}\n.fa-medkit:before {\n  content: \"\\f0fa\";\n}\n.fa-fighter-jet:before {\n  content: \"\\f0fb\";\n}\n.fa-beer:before {\n  content: \"\\f0fc\";\n}\n.fa-h-square:before {\n  content: \"\\f0fd\";\n}\n.fa-plus-square:before {\n  content: \"\\f0fe\";\n}\n.fa-angle-double-left:before {\n  content: \"\\f100\";\n}\n.fa-angle-double-right:before {\n  content: \"\\f101\";\n}\n.fa-angle-double-up:before {\n  content: \"\\f102\";\n}\n.fa-angle-double-down:before {\n  content: \"\\f103\";\n}\n.fa-angle-left:before {\n  content: \"\\f104\";\n}\n.fa-angle-right:before {\n  content: \"\\f105\";\n}\n.fa-angle-up:before {\n  content: \"\\f106\";\n}\n.fa-angle-down:before {\n  content: \"\\f107\";\n}\n.fa-desktop:before {\n  content: \"\\f108\";\n}\n.fa-laptop:before {\n  content: \"\\f109\";\n}\n.fa-tablet:before {\n  content: \"\\f10a\";\n}\n.fa-mobile-phone:before,\n.fa-mobile:before {\n  content: \"\\f10b\";\n}\n.fa-circle-o:before {\n  content: \"\\f10c\";\n}\n.fa-quote-left:before {\n  content: \"\\f10d\";\n}\n.fa-quote-right:before {\n  content: \"\\f10e\";\n}\n.fa-spinner:before {\n  content: \"\\f110\";\n}\n.fa-circle:before {\n  content: \"\\f111\";\n}\n.fa-mail-reply:before,\n.fa-reply:before {\n  content: \"\\f112\";\n}\n.fa-github-alt:before {\n  content: \"\\f113\";\n}\n.fa-folder-o:before {\n  content: \"\\f114\";\n}\n.fa-folder-open-o:before {\n  content: \"\\f115\";\n}\n.fa-smile-o:before {\n  content: \"\\f118\";\n}\n.fa-frown-o:before {\n  content: \"\\f119\";\n}\n.fa-meh-o:before {\n  content: \"\\f11a\";\n}\n.fa-gamepad:before {\n  content: \"\\f11b\";\n}\n.fa-keyboard-o:before {\n  content: \"\\f11c\";\n}\n.fa-flag-o:before {\n  content: \"\\f11d\";\n}\n.fa-flag-checkered:before {\n  content: \"\\f11e\";\n}\n.fa-terminal:before {\n  content: \"\\f120\";\n}\n.fa-code:before {\n  content: \"\\f121\";\n}\n.fa-mail-reply-all:before,\n.fa-reply-all:before {\n  content: \"\\f122\";\n}\n.fa-star-half-empty:before,\n.fa-star-half-full:before,\n.fa-star-half-o:before {\n  content: \"\\f123\";\n}\n.fa-location-arrow:before {\n  content: \"\\f124\";\n}\n.fa-crop:before {\n  content: \"\\f125\";\n}\n.fa-code-fork:before {\n  content: \"\\f126\";\n}\n.fa-unlink:before,\n.fa-chain-broken:before {\n  content: \"\\f127\";\n}\n.fa-question:before {\n  content: \"\\f128\";\n}\n.fa-info:before {\n  content: \"\\f129\";\n}\n.fa-exclamation:before {\n  content: \"\\f12a\";\n}\n.fa-superscript:before {\n  content: \"\\f12b\";\n}\n.fa-subscript:before {\n  content: \"\\f12c\";\n}\n.fa-eraser:before {\n  content: \"\\f12d\";\n}\n.fa-puzzle-piece:before {\n  content: \"\\f12e\";\n}\n.fa-microphone:before {\n  content: \"\\f130\";\n}\n.fa-microphone-slash:before {\n  content: \"\\f131\";\n}\n.fa-shield:before {\n  content: \"\\f132\";\n}\n.fa-calendar-o:before {\n  content: \"\\f133\";\n}\n.fa-fire-extinguisher:before {\n  content: \"\\f134\";\n}\n.fa-rocket:before {\n  content: \"\\f135\";\n}\n.fa-maxcdn:before {\n  content: \"\\f136\";\n}\n.fa-chevron-circle-left:before {\n  content: \"\\f137\";\n}\n.fa-chevron-circle-right:before {\n  content: \"\\f138\";\n}\n.fa-chevron-circle-up:before {\n  content: \"\\f139\";\n}\n.fa-chevron-circle-down:before {\n  content: \"\\f13a\";\n}\n.fa-html5:before {\n  content: \"\\f13b\";\n}\n.fa-css3:before {\n  content: \"\\f13c\";\n}\n.fa-anchor:before {\n  content: \"\\f13d\";\n}\n.fa-unlock-alt:before {\n  content: \"\\f13e\";\n}\n.fa-bullseye:before {\n  content: \"\\f140\";\n}\n.fa-ellipsis-h:before {\n  content: \"\\f141\";\n}\n.fa-ellipsis-v:before {\n  content: \"\\f142\";\n}\n.fa-rss-square:before {\n  content: \"\\f143\";\n}\n.fa-play-circle:before {\n  content: \"\\f144\";\n}\n.fa-ticket:before {\n  content: \"\\f145\";\n}\n.fa-minus-square:before {\n  content: \"\\f146\";\n}\n.fa-minus-square-o:before {\n  content: \"\\f147\";\n}\n.fa-level-up:before {\n  content: \"\\f148\";\n}\n.fa-level-down:before {\n  content: \"\\f149\";\n}\n.fa-check-square:before {\n  content: \"\\f14a\";\n}\n.fa-pencil-square:before {\n  content: \"\\f14b\";\n}\n.fa-external-link-square:before {\n  content: \"\\f14c\";\n}\n.fa-share-square:before {\n  content: \"\\f14d\";\n}\n.fa-compass:before {\n  content: \"\\f14e\";\n}\n.fa-toggle-down:before,\n.fa-caret-square-o-down:before {\n  content: \"\\f150\";\n}\n.fa-toggle-up:before,\n.fa-caret-square-o-up:before {\n  content: \"\\f151\";\n}\n.fa-toggle-right:before,\n.fa-caret-square-o-right:before {\n  content: \"\\f152\";\n}\n.fa-euro:before,\n.fa-eur:before {\n  content: \"\\f153\";\n}\n.fa-gbp:before {\n  content: \"\\f154\";\n}\n.fa-dollar:before,\n.fa-usd:before {\n  content: \"\\f155\";\n}\n.fa-rupee:before,\n.fa-inr:before {\n  content: \"\\f156\";\n}\n.fa-cny:before,\n.fa-rmb:before,\n.fa-yen:before,\n.fa-jpy:before {\n  content: \"\\f157\";\n}\n.fa-ruble:before,\n.fa-rouble:before,\n.fa-rub:before {\n  content: \"\\f158\";\n}\n.fa-won:before,\n.fa-krw:before {\n  content: \"\\f159\";\n}\n.fa-bitcoin:before,\n.fa-btc:before {\n  content: \"\\f15a\";\n}\n.fa-file:before {\n  content: \"\\f15b\";\n}\n.fa-file-text:before {\n  content: \"\\f15c\";\n}\n.fa-sort-alpha-asc:before {\n  content: \"\\f15d\";\n}\n.fa-sort-alpha-desc:before {\n  content: \"\\f15e\";\n}\n.fa-sort-amount-asc:before {\n  content: \"\\f160\";\n}\n.fa-sort-amount-desc:before {\n  content: \"\\f161\";\n}\n.fa-sort-numeric-asc:before {\n  content: \"\\f162\";\n}\n.fa-sort-numeric-desc:before {\n  content: \"\\f163\";\n}\n.fa-thumbs-up:before {\n  content: \"\\f164\";\n}\n.fa-thumbs-down:before {\n  content: \"\\f165\";\n}\n.fa-youtube-square:before {\n  content: \"\\f166\";\n}\n.fa-youtube:before {\n  content: \"\\f167\";\n}\n.fa-xing:before {\n  content: \"\\f168\";\n}\n.fa-xing-square:before {\n  content: \"\\f169\";\n}\n.fa-youtube-play:before {\n  content: \"\\f16a\";\n}\n.fa-dropbox:before {\n  content: \"\\f16b\";\n}\n.fa-stack-overflow:before {\n  content: \"\\f16c\";\n}\n.fa-instagram:before {\n  content: \"\\f16d\";\n}\n.fa-flickr:before {\n  content: \"\\f16e\";\n}\n.fa-adn:before {\n  content: \"\\f170\";\n}\n.fa-bitbucket:before {\n  content: \"\\f171\";\n}\n.fa-bitbucket-square:before {\n  content: \"\\f172\";\n}\n.fa-tumblr:before {\n  content: \"\\f173\";\n}\n.fa-tumblr-square:before {\n  content: \"\\f174\";\n}\n.fa-long-arrow-down:before {\n  content: \"\\f175\";\n}\n.fa-long-arrow-up:before {\n  content: \"\\f176\";\n}\n.fa-long-arrow-left:before {\n  content: \"\\f177\";\n}\n.fa-long-arrow-right:before {\n  content: \"\\f178\";\n}\n.fa-apple:before {\n  content: \"\\f179\";\n}\n.fa-windows:before {\n  content: \"\\f17a\";\n}\n.fa-android:before {\n  content: \"\\f17b\";\n}\n.fa-linux:before {\n  content: \"\\f17c\";\n}\n.fa-dribbble:before {\n  content: \"\\f17d\";\n}\n.fa-skype:before {\n  content: \"\\f17e\";\n}\n.fa-foursquare:before {\n  content: \"\\f180\";\n}\n.fa-trello:before {\n  content: \"\\f181\";\n}\n.fa-female:before {\n  content: \"\\f182\";\n}\n.fa-male:before {\n  content: \"\\f183\";\n}\n.fa-gittip:before,\n.fa-gratipay:before {\n  content: \"\\f184\";\n}\n.fa-sun-o:before {\n  content: \"\\f185\";\n}\n.fa-moon-o:before {\n  content: \"\\f186\";\n}\n.fa-archive:before {\n  content: \"\\f187\";\n}\n.fa-bug:before {\n  content: \"\\f188\";\n}\n.fa-vk:before {\n  content: \"\\f189\";\n}\n.fa-weibo:before {\n  content: \"\\f18a\";\n}\n.fa-renren:before {\n  content: \"\\f18b\";\n}\n.fa-pagelines:before {\n  content: \"\\f18c\";\n}\n.fa-stack-exchange:before {\n  content: \"\\f18d\";\n}\n.fa-arrow-circle-o-right:before {\n  content: \"\\f18e\";\n}\n.fa-arrow-circle-o-left:before {\n  content: \"\\f190\";\n}\n.fa-toggle-left:before,\n.fa-caret-square-o-left:before {\n  content: \"\\f191\";\n}\n.fa-dot-circle-o:before {\n  content: \"\\f192\";\n}\n.fa-wheelchair:before {\n  content: \"\\f193\";\n}\n.fa-vimeo-square:before {\n  content: \"\\f194\";\n}\n.fa-turkish-lira:before,\n.fa-try:before {\n  content: \"\\f195\";\n}\n.fa-plus-square-o:before {\n  content: \"\\f196\";\n}\n.fa-space-shuttle:before {\n  content: \"\\f197\";\n}\n.fa-slack:before {\n  content: \"\\f198\";\n}\n.fa-envelope-square:before {\n  content: \"\\f199\";\n}\n.fa-wordpress:before {\n  content: \"\\f19a\";\n}\n.fa-openid:before {\n  content: \"\\f19b\";\n}\n.fa-institution:before,\n.fa-bank:before,\n.fa-university:before {\n  content: \"\\f19c\";\n}\n.fa-mortar-board:before,\n.fa-graduation-cap:before {\n  content: \"\\f19d\";\n}\n.fa-yahoo:before {\n  content: \"\\f19e\";\n}\n.fa-google:before {\n  content: \"\\f1a0\";\n}\n.fa-reddit:before {\n  content: \"\\f1a1\";\n}\n.fa-reddit-square:before {\n  content: \"\\f1a2\";\n}\n.fa-stumbleupon-circle:before {\n  content: \"\\f1a3\";\n}\n.fa-stumbleupon:before {\n  content: \"\\f1a4\";\n}\n.fa-delicious:before {\n  content: \"\\f1a5\";\n}\n.fa-digg:before {\n  content: \"\\f1a6\";\n}\n.fa-pied-piper-pp:before {\n  content: \"\\f1a7\";\n}\n.fa-pied-piper-alt:before {\n  content: \"\\f1a8\";\n}\n.fa-drupal:before {\n  content: \"\\f1a9\";\n}\n.fa-joomla:before {\n  content: \"\\f1aa\";\n}\n.fa-language:before {\n  content: \"\\f1ab\";\n}\n.fa-fax:before {\n  content: \"\\f1ac\";\n}\n.fa-building:before {\n  content: \"\\f1ad\";\n}\n.fa-child:before {\n  content: \"\\f1ae\";\n}\n.fa-paw:before {\n  content: \"\\f1b0\";\n}\n.fa-spoon:before {\n  content: \"\\f1b1\";\n}\n.fa-cube:before {\n  content: \"\\f1b2\";\n}\n.fa-cubes:before {\n  content: \"\\f1b3\";\n}\n.fa-behance:before {\n  content: \"\\f1b4\";\n}\n.fa-behance-square:before {\n  content: \"\\f1b5\";\n}\n.fa-steam:before {\n  content: \"\\f1b6\";\n}\n.fa-steam-square:before {\n  content: \"\\f1b7\";\n}\n.fa-recycle:before {\n  content: \"\\f1b8\";\n}\n.fa-automobile:before,\n.fa-car:before {\n  content: \"\\f1b9\";\n}\n.fa-cab:before,\n.fa-taxi:before {\n  content: \"\\f1ba\";\n}\n.fa-tree:before {\n  content: \"\\f1bb\";\n}\n.fa-spotify:before {\n  content: \"\\f1bc\";\n}\n.fa-deviantart:before {\n  content: \"\\f1bd\";\n}\n.fa-soundcloud:before {\n  content: \"\\f1be\";\n}\n.fa-database:before {\n  content: \"\\f1c0\";\n}\n.fa-file-pdf-o:before {\n  content: \"\\f1c1\";\n}\n.fa-file-word-o:before {\n  content: \"\\f1c2\";\n}\n.fa-file-excel-o:before {\n  content: \"\\f1c3\";\n}\n.fa-file-powerpoint-o:before {\n  content: \"\\f1c4\";\n}\n.fa-file-photo-o:before,\n.fa-file-picture-o:before,\n.fa-file-image-o:before {\n  content: \"\\f1c5\";\n}\n.fa-file-zip-o:before,\n.fa-file-archive-o:before {\n  content: \"\\f1c6\";\n}\n.fa-file-sound-o:before,\n.fa-file-audio-o:before {\n  content: \"\\f1c7\";\n}\n.fa-file-movie-o:before,\n.fa-file-video-o:before {\n  content: \"\\f1c8\";\n}\n.fa-file-code-o:before {\n  content: \"\\f1c9\";\n}\n.fa-vine:before {\n  content: \"\\f1ca\";\n}\n.fa-codepen:before {\n  content: \"\\f1cb\";\n}\n.fa-jsfiddle:before {\n  content: \"\\f1cc\";\n}\n.fa-life-bouy:before,\n.fa-life-buoy:before,\n.fa-life-saver:before,\n.fa-support:before,\n.fa-life-ring:before {\n  content: \"\\f1cd\";\n}\n.fa-circle-o-notch:before {\n  content: \"\\f1ce\";\n}\n.fa-ra:before,\n.fa-resistance:before,\n.fa-rebel:before {\n  content: \"\\f1d0\";\n}\n.fa-ge:before,\n.fa-empire:before {\n  content: \"\\f1d1\";\n}\n.fa-git-square:before {\n  content: \"\\f1d2\";\n}\n.fa-git:before {\n  content: \"\\f1d3\";\n}\n.fa-y-combinator-square:before,\n.fa-yc-square:before,\n.fa-hacker-news:before {\n  content: \"\\f1d4\";\n}\n.fa-tencent-weibo:before {\n  content: \"\\f1d5\";\n}\n.fa-qq:before {\n  content: \"\\f1d6\";\n}\n.fa-wechat:before,\n.fa-weixin:before {\n  content: \"\\f1d7\";\n}\n.fa-send:before,\n.fa-paper-plane:before {\n  content: \"\\f1d8\";\n}\n.fa-send-o:before,\n.fa-paper-plane-o:before {\n  content: \"\\f1d9\";\n}\n.fa-history:before {\n  content: \"\\f1da\";\n}\n.fa-circle-thin:before {\n  content: \"\\f1db\";\n}\n.fa-header:before {\n  content: \"\\f1dc\";\n}\n.fa-paragraph:before {\n  content: \"\\f1dd\";\n}\n.fa-sliders:before {\n  content: \"\\f1de\";\n}\n.fa-share-alt:before {\n  content: \"\\f1e0\";\n}\n.fa-share-alt-square:before {\n  content: \"\\f1e1\";\n}\n.fa-bomb:before {\n  content: \"\\f1e2\";\n}\n.fa-soccer-ball-o:before,\n.fa-futbol-o:before {\n  content: \"\\f1e3\";\n}\n.fa-tty:before {\n  content: \"\\f1e4\";\n}\n.fa-binoculars:before {\n  content: \"\\f1e5\";\n}\n.fa-plug:before {\n  content: \"\\f1e6\";\n}\n.fa-slideshare:before {\n  content: \"\\f1e7\";\n}\n.fa-twitch:before {\n  content: \"\\f1e8\";\n}\n.fa-yelp:before {\n  content: \"\\f1e9\";\n}\n.fa-newspaper-o:before {\n  content: \"\\f1ea\";\n}\n.fa-wifi:before {\n  content: \"\\f1eb\";\n}\n.fa-calculator:before {\n  content: \"\\f1ec\";\n}\n.fa-paypal:before {\n  content: \"\\f1ed\";\n}\n.fa-google-wallet:before {\n  content: \"\\f1ee\";\n}\n.fa-cc-visa:before {\n  content: \"\\f1f0\";\n}\n.fa-cc-mastercard:before {\n  content: \"\\f1f1\";\n}\n.fa-cc-discover:before {\n  content: \"\\f1f2\";\n}\n.fa-cc-amex:before {\n  content: \"\\f1f3\";\n}\n.fa-cc-paypal:before {\n  content: \"\\f1f4\";\n}\n.fa-cc-stripe:before {\n  content: \"\\f1f5\";\n}\n.fa-bell-slash:before {\n  content: \"\\f1f6\";\n}\n.fa-bell-slash-o:before {\n  content: \"\\f1f7\";\n}\n.fa-trash:before {\n  content: \"\\f1f8\";\n}\n.fa-copyright:before {\n  content: \"\\f1f9\";\n}\n.fa-at:before {\n  content: \"\\f1fa\";\n}\n.fa-eyedropper:before {\n  content: \"\\f1fb\";\n}\n.fa-paint-brush:before {\n  content: \"\\f1fc\";\n}\n.fa-birthday-cake:before {\n  content: \"\\f1fd\";\n}\n.fa-area-chart:before {\n  content: \"\\f1fe\";\n}\n.fa-pie-chart:before {\n  content: \"\\f200\";\n}\n.fa-line-chart:before {\n  content: \"\\f201\";\n}\n.fa-lastfm:before {\n  content: \"\\f202\";\n}\n.fa-lastfm-square:before {\n  content: \"\\f203\";\n}\n.fa-toggle-off:before {\n  content: \"\\f204\";\n}\n.fa-toggle-on:before {\n  content: \"\\f205\";\n}\n.fa-bicycle:before {\n  content: \"\\f206\";\n}\n.fa-bus:before {\n  content: \"\\f207\";\n}\n.fa-ioxhost:before {\n  content: \"\\f208\";\n}\n.fa-angellist:before {\n  content: \"\\f209\";\n}\n.fa-cc:before {\n  content: \"\\f20a\";\n}\n.fa-shekel:before,\n.fa-sheqel:before,\n.fa-ils:before {\n  content: \"\\f20b\";\n}\n.fa-meanpath:before {\n  content: \"\\f20c\";\n}\n.fa-buysellads:before {\n  content: \"\\f20d\";\n}\n.fa-connectdevelop:before {\n  content: \"\\f20e\";\n}\n.fa-dashcube:before {\n  content: \"\\f210\";\n}\n.fa-forumbee:before {\n  content: \"\\f211\";\n}\n.fa-leanpub:before {\n  content: \"\\f212\";\n}\n.fa-sellsy:before {\n  content: \"\\f213\";\n}\n.fa-shirtsinbulk:before {\n  content: \"\\f214\";\n}\n.fa-simplybuilt:before {\n  content: \"\\f215\";\n}\n.fa-skyatlas:before {\n  content: \"\\f216\";\n}\n.fa-cart-plus:before {\n  content: \"\\f217\";\n}\n.fa-cart-arrow-down:before {\n  content: \"\\f218\";\n}\n.fa-diamond:before {\n  content: \"\\f219\";\n}\n.fa-ship:before {\n  content: \"\\f21a\";\n}\n.fa-user-secret:before {\n  content: \"\\f21b\";\n}\n.fa-motorcycle:before {\n  content: \"\\f21c\";\n}\n.fa-street-view:before {\n  content: \"\\f21d\";\n}\n.fa-heartbeat:before {\n  content: \"\\f21e\";\n}\n.fa-venus:before {\n  content: \"\\f221\";\n}\n.fa-mars:before {\n  content: \"\\f222\";\n}\n.fa-mercury:before {\n  content: \"\\f223\";\n}\n.fa-intersex:before,\n.fa-transgender:before {\n  content: \"\\f224\";\n}\n.fa-transgender-alt:before {\n  content: \"\\f225\";\n}\n.fa-venus-double:before {\n  content: \"\\f226\";\n}\n.fa-mars-double:before {\n  content: \"\\f227\";\n}\n.fa-venus-mars:before {\n  content: \"\\f228\";\n}\n.fa-mars-stroke:before {\n  content: \"\\f229\";\n}\n.fa-mars-stroke-v:before {\n  content: \"\\f22a\";\n}\n.fa-mars-stroke-h:before {\n  content: \"\\f22b\";\n}\n.fa-neuter:before {\n  content: \"\\f22c\";\n}\n.fa-genderless:before {\n  content: \"\\f22d\";\n}\n.fa-facebook-official:before {\n  content: \"\\f230\";\n}\n.fa-pinterest-p:before {\n  content: \"\\f231\";\n}\n.fa-whatsapp:before {\n  content: \"\\f232\";\n}\n.fa-server:before {\n  content: \"\\f233\";\n}\n.fa-user-plus:before {\n  content: \"\\f234\";\n}\n.fa-user-times:before {\n  content: \"\\f235\";\n}\n.fa-hotel:before,\n.fa-bed:before {\n  content: \"\\f236\";\n}\n.fa-viacoin:before {\n  content: \"\\f237\";\n}\n.fa-train:before {\n  content: \"\\f238\";\n}\n.fa-subway:before {\n  content: \"\\f239\";\n}\n.fa-medium:before {\n  content: \"\\f23a\";\n}\n.fa-yc:before,\n.fa-y-combinator:before {\n  content: \"\\f23b\";\n}\n.fa-optin-monster:before {\n  content: \"\\f23c\";\n}\n.fa-opencart:before {\n  content: \"\\f23d\";\n}\n.fa-expeditedssl:before {\n  content: \"\\f23e\";\n}\n.fa-battery-4:before,\n.fa-battery:before,\n.fa-battery-full:before {\n  content: \"\\f240\";\n}\n.fa-battery-3:before,\n.fa-battery-three-quarters:before {\n  content: \"\\f241\";\n}\n.fa-battery-2:before,\n.fa-battery-half:before {\n  content: \"\\f242\";\n}\n.fa-battery-1:before,\n.fa-battery-quarter:before {\n  content: \"\\f243\";\n}\n.fa-battery-0:before,\n.fa-battery-empty:before {\n  content: \"\\f244\";\n}\n.fa-mouse-pointer:before {\n  content: \"\\f245\";\n}\n.fa-i-cursor:before {\n  content: \"\\f246\";\n}\n.fa-object-group:before {\n  content: \"\\f247\";\n}\n.fa-object-ungroup:before {\n  content: \"\\f248\";\n}\n.fa-sticky-note:before {\n  content: \"\\f249\";\n}\n.fa-sticky-note-o:before {\n  content: \"\\f24a\";\n}\n.fa-cc-jcb:before {\n  content: \"\\f24b\";\n}\n.fa-cc-diners-club:before {\n  content: \"\\f24c\";\n}\n.fa-clone:before {\n  content: \"\\f24d\";\n}\n.fa-balance-scale:before {\n  content: \"\\f24e\";\n}\n.fa-hourglass-o:before {\n  content: \"\\f250\";\n}\n.fa-hourglass-1:before,\n.fa-hourglass-start:before {\n  content: \"\\f251\";\n}\n.fa-hourglass-2:before,\n.fa-hourglass-half:before {\n  content: \"\\f252\";\n}\n.fa-hourglass-3:before,\n.fa-hourglass-end:before {\n  content: \"\\f253\";\n}\n.fa-hourglass:before {\n  content: \"\\f254\";\n}\n.fa-hand-grab-o:before,\n.fa-hand-rock-o:before {\n  content: \"\\f255\";\n}\n.fa-hand-stop-o:before,\n.fa-hand-paper-o:before {\n  content: \"\\f256\";\n}\n.fa-hand-scissors-o:before {\n  content: \"\\f257\";\n}\n.fa-hand-lizard-o:before {\n  content: \"\\f258\";\n}\n.fa-hand-spock-o:before {\n  content: \"\\f259\";\n}\n.fa-hand-pointer-o:before {\n  content: \"\\f25a\";\n}\n.fa-hand-peace-o:before {\n  content: \"\\f25b\";\n}\n.fa-trademark:before {\n  content: \"\\f25c\";\n}\n.fa-registered:before {\n  content: \"\\f25d\";\n}\n.fa-creative-commons:before {\n  content: \"\\f25e\";\n}\n.fa-gg:before {\n  content: \"\\f260\";\n}\n.fa-gg-circle:before {\n  content: \"\\f261\";\n}\n.fa-tripadvisor:before {\n  content: \"\\f262\";\n}\n.fa-odnoklassniki:before {\n  content: \"\\f263\";\n}\n.fa-odnoklassniki-square:before {\n  content: \"\\f264\";\n}\n.fa-get-pocket:before {\n  content: \"\\f265\";\n}\n.fa-wikipedia-w:before {\n  content: \"\\f266\";\n}\n.fa-safari:before {\n  content: \"\\f267\";\n}\n.fa-chrome:before {\n  content: \"\\f268\";\n}\n.fa-firefox:before {\n  content: \"\\f269\";\n}\n.fa-opera:before {\n  content: \"\\f26a\";\n}\n.fa-internet-explorer:before {\n  content: \"\\f26b\";\n}\n.fa-tv:before,\n.fa-television:before {\n  content: \"\\f26c\";\n}\n.fa-contao:before {\n  content: \"\\f26d\";\n}\n.fa-500px:before {\n  content: \"\\f26e\";\n}\n.fa-amazon:before {\n  content: \"\\f270\";\n}\n.fa-calendar-plus-o:before {\n  content: \"\\f271\";\n}\n.fa-calendar-minus-o:before {\n  content: \"\\f272\";\n}\n.fa-calendar-times-o:before {\n  content: \"\\f273\";\n}\n.fa-calendar-check-o:before {\n  content: \"\\f274\";\n}\n.fa-industry:before {\n  content: \"\\f275\";\n}\n.fa-map-pin:before {\n  content: \"\\f276\";\n}\n.fa-map-signs:before {\n  content: \"\\f277\";\n}\n.fa-map-o:before {\n  content: \"\\f278\";\n}\n.fa-map:before {\n  content: \"\\f279\";\n}\n.fa-commenting:before {\n  content: \"\\f27a\";\n}\n.fa-commenting-o:before {\n  content: \"\\f27b\";\n}\n.fa-houzz:before {\n  content: \"\\f27c\";\n}\n.fa-vimeo:before {\n  content: \"\\f27d\";\n}\n.fa-black-tie:before {\n  content: \"\\f27e\";\n}\n.fa-fonticons:before {\n  content: \"\\f280\";\n}\n.fa-reddit-alien:before {\n  content: \"\\f281\";\n}\n.fa-edge:before {\n  content: \"\\f282\";\n}\n.fa-credit-card-alt:before {\n  content: \"\\f283\";\n}\n.fa-codiepie:before {\n  content: \"\\f284\";\n}\n.fa-modx:before {\n  content: \"\\f285\";\n}\n.fa-fort-awesome:before {\n  content: \"\\f286\";\n}\n.fa-usb:before {\n  content: \"\\f287\";\n}\n.fa-product-hunt:before {\n  content: \"\\f288\";\n}\n.fa-mixcloud:before {\n  content: \"\\f289\";\n}\n.fa-scribd:before {\n  content: \"\\f28a\";\n}\n.fa-pause-circle:before {\n  content: \"\\f28b\";\n}\n.fa-pause-circle-o:before {\n  content: \"\\f28c\";\n}\n.fa-stop-circle:before {\n  content: \"\\f28d\";\n}\n.fa-stop-circle-o:before {\n  content: \"\\f28e\";\n}\n.fa-shopping-bag:before {\n  content: \"\\f290\";\n}\n.fa-shopping-basket:before {\n  content: \"\\f291\";\n}\n.fa-hashtag:before {\n  content: \"\\f292\";\n}\n.fa-bluetooth:before {\n  content: \"\\f293\";\n}\n.fa-bluetooth-b:before {\n  content: \"\\f294\";\n}\n.fa-percent:before {\n  content: \"\\f295\";\n}\n.fa-gitlab:before {\n  content: \"\\f296\";\n}\n.fa-wpbeginner:before {\n  content: \"\\f297\";\n}\n.fa-wpforms:before {\n  content: \"\\f298\";\n}\n.fa-envira:before {\n  content: \"\\f299\";\n}\n.fa-universal-access:before {\n  content: \"\\f29a\";\n}\n.fa-wheelchair-alt:before {\n  content: \"\\f29b\";\n}\n.fa-question-circle-o:before {\n  content: \"\\f29c\";\n}\n.fa-blind:before {\n  content: \"\\f29d\";\n}\n.fa-audio-description:before {\n  content: \"\\f29e\";\n}\n.fa-volume-control-phone:before {\n  content: \"\\f2a0\";\n}\n.fa-braille:before {\n  content: \"\\f2a1\";\n}\n.fa-assistive-listening-systems:before {\n  content: \"\\f2a2\";\n}\n.fa-asl-interpreting:before,\n.fa-american-sign-language-interpreting:before {\n  content: \"\\f2a3\";\n}\n.fa-deafness:before,\n.fa-hard-of-hearing:before,\n.fa-deaf:before {\n  content: \"\\f2a4\";\n}\n.fa-glide:before {\n  content: \"\\f2a5\";\n}\n.fa-glide-g:before {\n  content: \"\\f2a6\";\n}\n.fa-signing:before,\n.fa-sign-language:before {\n  content: \"\\f2a7\";\n}\n.fa-low-vision:before {\n  content: \"\\f2a8\";\n}\n.fa-viadeo:before {\n  content: \"\\f2a9\";\n}\n.fa-viadeo-square:before {\n  content: \"\\f2aa\";\n}\n.fa-snapchat:before {\n  content: \"\\f2ab\";\n}\n.fa-snapchat-ghost:before {\n  content: \"\\f2ac\";\n}\n.fa-snapchat-square:before {\n  content: \"\\f2ad\";\n}\n.fa-pied-piper:before {\n  content: \"\\f2ae\";\n}\n.fa-first-order:before {\n  content: \"\\f2b0\";\n}\n.fa-yoast:before {\n  content: \"\\f2b1\";\n}\n.fa-themeisle:before {\n  content: \"\\f2b2\";\n}\n.fa-google-plus-circle:before,\n.fa-google-plus-official:before {\n  content: \"\\f2b3\";\n}\n.fa-fa:before,\n.fa-font-awesome:before {\n  content: \"\\f2b4\";\n}\n.fa-handshake-o:before {\n  content: \"\\f2b5\";\n}\n.fa-envelope-open:before {\n  content: \"\\f2b6\";\n}\n.fa-envelope-open-o:before {\n  content: \"\\f2b7\";\n}\n.fa-linode:before {\n  content: \"\\f2b8\";\n}\n.fa-address-book:before {\n  content: \"\\f2b9\";\n}\n.fa-address-book-o:before {\n  content: \"\\f2ba\";\n}\n.fa-vcard:before,\n.fa-address-card:before {\n  content: \"\\f2bb\";\n}\n.fa-vcard-o:before,\n.fa-address-card-o:before {\n  content: \"\\f2bc\";\n}\n.fa-user-circle:before {\n  content: \"\\f2bd\";\n}\n.fa-user-circle-o:before {\n  content: \"\\f2be\";\n}\n.fa-user-o:before {\n  content: \"\\f2c0\";\n}\n.fa-id-badge:before {\n  content: \"\\f2c1\";\n}\n.fa-drivers-license:before,\n.fa-id-card:before {\n  content: \"\\f2c2\";\n}\n.fa-drivers-license-o:before,\n.fa-id-card-o:before {\n  content: \"\\f2c3\";\n}\n.fa-quora:before {\n  content: \"\\f2c4\";\n}\n.fa-free-code-camp:before {\n  content: \"\\f2c5\";\n}\n.fa-telegram:before {\n  content: \"\\f2c6\";\n}\n.fa-thermometer-4:before,\n.fa-thermometer:before,\n.fa-thermometer-full:before {\n  content: \"\\f2c7\";\n}\n.fa-thermometer-3:before,\n.fa-thermometer-three-quarters:before {\n  content: \"\\f2c8\";\n}\n.fa-thermometer-2:before,\n.fa-thermometer-half:before {\n  content: \"\\f2c9\";\n}\n.fa-thermometer-1:before,\n.fa-thermometer-quarter:before {\n  content: \"\\f2ca\";\n}\n.fa-thermometer-0:before,\n.fa-thermometer-empty:before {\n  content: \"\\f2cb\";\n}\n.fa-shower:before {\n  content: \"\\f2cc\";\n}\n.fa-bathtub:before,\n.fa-s15:before,\n.fa-bath:before {\n  content: \"\\f2cd\";\n}\n.fa-podcast:before {\n  content: \"\\f2ce\";\n}\n.fa-window-maximize:before {\n  content: \"\\f2d0\";\n}\n.fa-window-minimize:before {\n  content: \"\\f2d1\";\n}\n.fa-window-restore:before {\n  content: \"\\f2d2\";\n}\n.fa-times-rectangle:before,\n.fa-window-close:before {\n  content: \"\\f2d3\";\n}\n.fa-times-rectangle-o:before,\n.fa-window-close-o:before {\n  content: \"\\f2d4\";\n}\n.fa-bandcamp:before {\n  content: \"\\f2d5\";\n}\n.fa-grav:before {\n  content: \"\\f2d6\";\n}\n.fa-etsy:before {\n  content: \"\\f2d7\";\n}\n.fa-imdb:before {\n  content: \"\\f2d8\";\n}\n.fa-ravelry:before {\n  content: \"\\f2d9\";\n}\n.fa-eercast:before {\n  content: \"\\f2da\";\n}\n.fa-microchip:before {\n  content: \"\\f2db\";\n}\n.fa-snowflake-o:before {\n  content: \"\\f2dc\";\n}\n.fa-superpowers:before {\n  content: \"\\f2dd\";\n}\n.fa-wpexplorer:before {\n  content: \"\\f2de\";\n}\n.fa-meetup:before {\n  content: \"\\f2e0\";\n}\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n  position: static;\n  width: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  clip: auto;\n}\n"
  },
  {
    "path": "public/frontend/plugins/font-awesome/less/animated.less",
    "content": "// Animated Icons\n// --------------------------\n\n.@{fa-css-prefix}-spin {\n  -webkit-animation: fa-spin 2s infinite linear;\n          animation: fa-spin 2s infinite linear;\n}\n\n.@{fa-css-prefix}-pulse {\n  -webkit-animation: fa-spin 1s infinite steps(8);\n          animation: fa-spin 1s infinite steps(8);\n}\n\n@-webkit-keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(359deg);\n            transform: rotate(359deg);\n  }\n}\n\n@keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(359deg);\n            transform: rotate(359deg);\n  }\n}\n"
  },
  {
    "path": "public/frontend/plugins/font-awesome/less/bordered-pulled.less",
    "content": "// Bordered & Pulled\n// -------------------------\n\n.@{fa-css-prefix}-border {\n  padding: .2em .25em .15em;\n  border: solid .08em @fa-border-color;\n  border-radius: .1em;\n}\n\n.@{fa-css-prefix}-pull-left { float: left; }\n.@{fa-css-prefix}-pull-right { float: right; }\n\n.@{fa-css-prefix} {\n  &.@{fa-css-prefix}-pull-left { margin-right: .3em; }\n  &.@{fa-css-prefix}-pull-right { margin-left: .3em; }\n}\n\n/* Deprecated as of 4.4.0 */\n.pull-right { float: right; }\n.pull-left { float: left; }\n\n.@{fa-css-prefix} {\n  &.pull-left { margin-right: .3em; }\n  &.pull-right { margin-left: .3em; }\n}\n"
  },
  {
    "path": "public/frontend/plugins/font-awesome/less/core.less",
    "content": "// Base Class Definition\n// -------------------------\n\n.@{fa-css-prefix} {\n  display: inline-block;\n  font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration\n  font-size: inherit; // can't have font-size inherit on line above, so need to override\n  text-rendering: auto; // optimizelegibility throws things off #1094\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n\n}\n"
  },
  {
    "path": "public/frontend/plugins/font-awesome/less/fixed-width.less",
    "content": "// Fixed Width Icons\n// -------------------------\n.@{fa-css-prefix}-fw {\n  width: (18em / 14);\n  text-align: center;\n}\n"
  },
  {
    "path": "public/frontend/plugins/font-awesome/less/font-awesome.less",
    "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@import \"variables.less\";\n@import \"mixins.less\";\n@import \"path.less\";\n@import \"core.less\";\n@import \"larger.less\";\n@import \"fixed-width.less\";\n@import \"list.less\";\n@import \"bordered-pulled.less\";\n@import \"animated.less\";\n@import \"rotated-flipped.less\";\n@import \"stacked.less\";\n@import \"icons.less\";\n@import \"screen-reader.less\";\n"
  },
  {
    "path": "public/frontend/plugins/font-awesome/less/icons.less",
    "content": "/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\n   readers do not read off random characters that represent icons */\n\n.@{fa-css-prefix}-glass:before { content: @fa-var-glass; }\n.@{fa-css-prefix}-music:before { content: @fa-var-music; }\n.@{fa-css-prefix}-search:before { content: @fa-var-search; }\n.@{fa-css-prefix}-envelope-o:before { content: @fa-var-envelope-o; }\n.@{fa-css-prefix}-heart:before { content: @fa-var-heart; }\n.@{fa-css-prefix}-star:before { content: @fa-var-star; }\n.@{fa-css-prefix}-star-o:before { content: @fa-var-star-o; }\n.@{fa-css-prefix}-user:before { content: @fa-var-user; }\n.@{fa-css-prefix}-film:before { content: @fa-var-film; }\n.@{fa-css-prefix}-th-large:before { content: @fa-var-th-large; }\n.@{fa-css-prefix}-th:before { content: @fa-var-th; }\n.@{fa-css-prefix}-th-list:before { content: @fa-var-th-list; }\n.@{fa-css-prefix}-check:before { content: @fa-var-check; }\n.@{fa-css-prefix}-remove:before,\n.@{fa-css-prefix}-close:before,\n.@{fa-css-prefix}-times:before { content: @fa-var-times; }\n.@{fa-css-prefix}-search-plus:before { content: @fa-var-search-plus; }\n.@{fa-css-prefix}-search-minus:before { content: @fa-var-search-minus; }\n.@{fa-css-prefix}-power-off:before { content: @fa-var-power-off; }\n.@{fa-css-prefix}-signal:before { content: @fa-var-signal; }\n.@{fa-css-prefix}-gear:before,\n.@{fa-css-prefix}-cog:before { content: @fa-var-cog; }\n.@{fa-css-prefix}-trash-o:before { content: @fa-var-trash-o; }\n.@{fa-css-prefix}-home:before { content: @fa-var-home; }\n.@{fa-css-prefix}-file-o:before { content: @fa-var-file-o; }\n.@{fa-css-prefix}-clock-o:before { content: @fa-var-clock-o; }\n.@{fa-css-prefix}-road:before { content: @fa-var-road; }\n.@{fa-css-prefix}-download:before { content: @fa-var-download; }\n.@{fa-css-prefix}-arrow-circle-o-down:before { content: @fa-var-arrow-circle-o-down; }\n.@{fa-css-prefix}-arrow-circle-o-up:before { content: @fa-var-arrow-circle-o-up; }\n.@{fa-css-prefix}-inbox:before { content: @fa-var-inbox; }\n.@{fa-css-prefix}-play-circle-o:before { content: @fa-var-play-circle-o; }\n.@{fa-css-prefix}-rotate-right:before,\n.@{fa-css-prefix}-repeat:before { content: @fa-var-repeat; }\n.@{fa-css-prefix}-refresh:before { content: @fa-var-refresh; }\n.@{fa-css-prefix}-list-alt:before { content: @fa-var-list-alt; }\n.@{fa-css-prefix}-lock:before { content: @fa-var-lock; }\n.@{fa-css-prefix}-flag:before { content: @fa-var-flag; }\n.@{fa-css-prefix}-headphones:before { content: @fa-var-headphones; }\n.@{fa-css-prefix}-volume-off:before { content: @fa-var-volume-off; }\n.@{fa-css-prefix}-volume-down:before { content: @fa-var-volume-down; }\n.@{fa-css-prefix}-volume-up:before { content: @fa-var-volume-up; }\n.@{fa-css-prefix}-qrcode:before { content: @fa-var-qrcode; }\n.@{fa-css-prefix}-barcode:before { content: @fa-var-barcode; }\n.@{fa-css-prefix}-tag:before { content: @fa-var-tag; }\n.@{fa-css-prefix}-tags:before { content: @fa-var-tags; }\n.@{fa-css-prefix}-book:before { content: @fa-var-book; }\n.@{fa-css-prefix}-bookmark:before { content: @fa-var-bookmark; }\n.@{fa-css-prefix}-print:before { content: @fa-var-print; }\n.@{fa-css-prefix}-camera:before { content: @fa-var-camera; }\n.@{fa-css-prefix}-font:before { content: @fa-var-font; }\n.@{fa-css-prefix}-bold:before { content: @fa-var-bold; }\n.@{fa-css-prefix}-italic:before { content: @fa-var-italic; }\n.@{fa-css-prefix}-text-height:before { content: @fa-var-text-height; }\n.@{fa-css-prefix}-text-width:before { content: @fa-var-text-width; }\n.@{fa-css-prefix}-align-left:before { content: @fa-var-align-left; }\n.@{fa-css-prefix}-align-center:before { content: @fa-var-align-center; }\n.@{fa-css-prefix}-align-right:before { content: @fa-var-align-right; }\n.@{fa-css-prefix}-align-justify:before { content: @fa-var-align-justify; }\n.@{fa-css-prefix}-list:before { content: @fa-var-list; }\n.@{fa-css-prefix}-dedent:before,\n.@{fa-css-prefix}-outdent:before { content: @fa-var-outdent; }\n.@{fa-css-prefix}-indent:before { content: @fa-var-indent; }\n.@{fa-css-prefix}-video-camera:before { content: @fa-var-video-camera; }\n.@{fa-css-prefix}-photo:before,\n.@{fa-css-prefix}-image:before,\n.@{fa-css-prefix}-picture-o:before { content: @fa-var-picture-o; }\n.@{fa-css-prefix}-pencil:before { content: @fa-var-pencil; }\n.@{fa-css-prefix}-map-marker:before { content: @fa-var-map-marker; }\n.@{fa-css-prefix}-adjust:before { content: @fa-var-adjust; }\n.@{fa-css-prefix}-tint:before { content: @fa-var-tint; }\n.@{fa-css-prefix}-edit:before,\n.@{fa-css-prefix}-pencil-square-o:before { content: @fa-var-pencil-square-o; }\n.@{fa-css-prefix}-share-square-o:before { content: @fa-var-share-square-o; }\n.@{fa-css-prefix}-check-square-o:before { content: @fa-var-check-square-o; }\n.@{fa-css-prefix}-arrows:before { content: @fa-var-arrows; }\n.@{fa-css-prefix}-step-backward:before { content: @fa-var-step-backward; }\n.@{fa-css-prefix}-fast-backward:before { content: @fa-var-fast-backward; }\n.@{fa-css-prefix}-backward:before { content: @fa-var-backward; }\n.@{fa-css-prefix}-play:before { content: @fa-var-play; }\n.@{fa-css-prefix}-pause:before { content: @fa-var-pause; }\n.@{fa-css-prefix}-stop:before { content: @fa-var-stop; }\n.@{fa-css-prefix}-forward:before { content: @fa-var-forward; }\n.@{fa-css-prefix}-fast-forward:before { content: @fa-var-fast-forward; }\n.@{fa-css-prefix}-step-forward:before { content: @fa-var-step-forward; }\n.@{fa-css-prefix}-eject:before { content: @fa-var-eject; }\n.@{fa-css-prefix}-chevron-left:before { content: @fa-var-chevron-left; }\n.@{fa-css-prefix}-chevron-right:before { content: @fa-var-chevron-right; }\n.@{fa-css-prefix}-plus-circle:before { content: @fa-var-plus-circle; }\n.@{fa-css-prefix}-minus-circle:before { content: @fa-var-minus-circle; }\n.@{fa-css-prefix}-times-circle:before { content: @fa-var-times-circle; }\n.@{fa-css-prefix}-check-circle:before { content: @fa-var-check-circle; }\n.@{fa-css-prefix}-question-circle:before { content: @fa-var-question-circle; }\n.@{fa-css-prefix}-info-circle:before { content: @fa-var-info-circle; }\n.@{fa-css-prefix}-crosshairs:before { content: @fa-var-crosshairs; }\n.@{fa-css-prefix}-times-circle-o:before { content: @fa-var-times-circle-o; }\n.@{fa-css-prefix}-check-circle-o:before { content: @fa-var-check-circle-o; }\n.@{fa-css-prefix}-ban:before { content: @fa-var-ban; }\n.@{fa-css-prefix}-arrow-left:before { content: @fa-var-arrow-left; }\n.@{fa-css-prefix}-arrow-right:before { content: @fa-var-arrow-right; }\n.@{fa-css-prefix}-arrow-up:before { content: @fa-var-arrow-up; }\n.@{fa-css-prefix}-arrow-down:before { content: @fa-var-arrow-down; }\n.@{fa-css-prefix}-mail-forward:before,\n.@{fa-css-prefix}-share:before { content: @fa-var-share; }\n.@{fa-css-prefix}-expand:before { content: @fa-var-expand; }\n.@{fa-css-prefix}-compress:before { content: @fa-var-compress; }\n.@{fa-css-prefix}-plus:before { content: @fa-var-plus; }\n.@{fa-css-prefix}-minus:before { content: @fa-var-minus; }\n.@{fa-css-prefix}-asterisk:before { content: @fa-var-asterisk; }\n.@{fa-css-prefix}-exclamation-circle:before { content: @fa-var-exclamation-circle; }\n.@{fa-css-prefix}-gift:before { content: @fa-var-gift; }\n.@{fa-css-prefix}-leaf:before { content: @fa-var-leaf; }\n.@{fa-css-prefix}-fire:before { content: @fa-var-fire; }\n.@{fa-css-prefix}-eye:before { content: @fa-var-eye; }\n.@{fa-css-prefix}-eye-slash:before { content: @fa-var-eye-slash; }\n.@{fa-css-prefix}-warning:before,\n.@{fa-css-prefix}-exclamation-triangle:before { content: @fa-var-exclamation-triangle; }\n.@{fa-css-prefix}-plane:before { content: @fa-var-plane; }\n.@{fa-css-prefix}-calendar:before { content: @fa-var-calendar; }\n.@{fa-css-prefix}-random:before { content: @fa-var-random; }\n.@{fa-css-prefix}-comment:before { content: @fa-var-comment; }\n.@{fa-css-prefix}-magnet:before { content: @fa-var-magnet; }\n.@{fa-css-prefix}-chevron-up:before { content: @fa-var-chevron-up; }\n.@{fa-css-prefix}-chevron-down:before { content: @fa-var-chevron-down; }\n.@{fa-css-prefix}-retweet:before { content: @fa-var-retweet; }\n.@{fa-css-prefix}-shopping-cart:before { content: @fa-var-shopping-cart; }\n.@{fa-css-prefix}-folder:before { content: @fa-var-folder; }\n.@{fa-css-prefix}-folder-open:before { content: @fa-var-folder-open; }\n.@{fa-css-prefix}-arrows-v:before { content: @fa-var-arrows-v; }\n.@{fa-css-prefix}-arrows-h:before { content: @fa-var-arrows-h; }\n.@{fa-css-prefix}-bar-chart-o:before,\n.@{fa-css-prefix}-bar-chart:before { content: @fa-var-bar-chart; }\n.@{fa-css-prefix}-twitter-square:before { content: @fa-var-twitter-square; }\n.@{fa-css-prefix}-facebook-square:before { content: @fa-var-facebook-square; }\n.@{fa-css-prefix}-camera-retro:before { content: @fa-var-camera-retro; }\n.@{fa-css-prefix}-key:before { content: @fa-var-key; }\n.@{fa-css-prefix}-gears:before,\n.@{fa-css-prefix}-cogs:before { content: @fa-var-cogs; }\n.@{fa-css-prefix}-comments:before { content: @fa-var-comments; }\n.@{fa-css-prefix}-thumbs-o-up:before { content: @fa-var-thumbs-o-up; }\n.@{fa-css-prefix}-thumbs-o-down:before { content: @fa-var-thumbs-o-down; }\n.@{fa-css-prefix}-star-half:before { content: @fa-var-star-half; }\n.@{fa-css-prefix}-heart-o:before { content: @fa-var-heart-o; }\n.@{fa-css-prefix}-sign-out:before { content: @fa-var-sign-out; }\n.@{fa-css-prefix}-linkedin-square:before { content: @fa-var-linkedin-square; }\n.@{fa-css-prefix}-thumb-tack:before { content: @fa-var-thumb-tack; }\n.@{fa-css-prefix}-external-link:before { content: @fa-var-external-link; }\n.@{fa-css-prefix}-sign-in:before { content: @fa-var-sign-in; }\n.@{fa-css-prefix}-trophy:before { content: @fa-var-trophy; }\n.@{fa-css-prefix}-github-square:before { content: @fa-var-github-square; }\n.@{fa-css-prefix}-upload:before { content: @fa-var-upload; }\n.@{fa-css-prefix}-lemon-o:before { content: @fa-var-lemon-o; }\n.@{fa-css-prefix}-phone:before { content: @fa-var-phone; }\n.@{fa-css-prefix}-square-o:before { content: @fa-var-square-o; }\n.@{fa-css-prefix}-bookmark-o:before { content: @fa-var-bookmark-o; }\n.@{fa-css-prefix}-phone-square:before { content: @fa-var-phone-square; }\n.@{fa-css-prefix}-twitter:before { content: @fa-var-twitter; }\n.@{fa-css-prefix}-facebook-f:before,\n.@{fa-css-prefix}-facebook:before { content: @fa-var-facebook; }\n.@{fa-css-prefix}-github:before { content: @fa-var-github; }\n.@{fa-css-prefix}-unlock:before { content: @fa-var-unlock; }\n.@{fa-css-prefix}-credit-card:before { content: @fa-var-credit-card; }\n.@{fa-css-prefix}-feed:before,\n.@{fa-css-prefix}-rss:before { content: @fa-var-rss; }\n.@{fa-css-prefix}-hdd-o:before { content: @fa-var-hdd-o; }\n.@{fa-css-prefix}-bullhorn:before { content: @fa-var-bullhorn; }\n.@{fa-css-prefix}-bell:before { content: @fa-var-bell; }\n.@{fa-css-prefix}-certificate:before { content: @fa-var-certificate; }\n.@{fa-css-prefix}-hand-o-right:before { content: @fa-var-hand-o-right; }\n.@{fa-css-prefix}-hand-o-left:before { content: @fa-var-hand-o-left; }\n.@{fa-css-prefix}-hand-o-up:before { content: @fa-var-hand-o-up; }\n.@{fa-css-prefix}-hand-o-down:before { content: @fa-var-hand-o-down; }\n.@{fa-css-prefix}-arrow-circle-left:before { content: @fa-var-arrow-circle-left; }\n.@{fa-css-prefix}-arrow-circle-right:before { content: @fa-var-arrow-circle-right; }\n.@{fa-css-prefix}-arrow-circle-up:before { content: @fa-var-arrow-circle-up; }\n.@{fa-css-prefix}-arrow-circle-down:before { content: @fa-var-arrow-circle-down; }\n.@{fa-css-prefix}-globe:before { content: @fa-var-globe; }\n.@{fa-css-prefix}-wrench:before { content: @fa-var-wrench; }\n.@{fa-css-prefix}-tasks:before { content: @fa-var-tasks; }\n.@{fa-css-prefix}-filter:before { content: @fa-var-filter; }\n.@{fa-css-prefix}-briefcase:before { content: @fa-var-briefcase; }\n.@{fa-css-prefix}-arrows-alt:before { content: @fa-var-arrows-alt; }\n.@{fa-css-prefix}-group:before,\n.@{fa-css-prefix}-users:before { content: @fa-var-users; }\n.@{fa-css-prefix}-chain:before,\n.@{fa-css-prefix}-link:before { content: @fa-var-link; }\n.@{fa-css-prefix}-cloud:before { content: @fa-var-cloud; }\n.@{fa-css-prefix}-flask:before { content: @fa-var-flask; }\n.@{fa-css-prefix}-cut:before,\n.@{fa-css-prefix}-scissors:before { content: @fa-var-scissors; }\n.@{fa-css-prefix}-copy:before,\n.@{fa-css-prefix}-files-o:before { content: @fa-var-files-o; }\n.@{fa-css-prefix}-paperclip:before { content: @fa-var-paperclip; }\n.@{fa-css-prefix}-save:before,\n.@{fa-css-prefix}-floppy-o:before { content: @fa-var-floppy-o; }\n.@{fa-css-prefix}-square:before { content: @fa-var-square; }\n.@{fa-css-prefix}-navicon:before,\n.@{fa-css-prefix}-reorder:before,\n.@{fa-css-prefix}-bars:before { content: @fa-var-bars; }\n.@{fa-css-prefix}-list-ul:before { content: @fa-var-list-ul; }\n.@{fa-css-prefix}-list-ol:before { content: @fa-var-list-ol; }\n.@{fa-css-prefix}-strikethrough:before { content: @fa-var-strikethrough; }\n.@{fa-css-prefix}-underline:before { content: @fa-var-underline; }\n.@{fa-css-prefix}-table:before { content: @fa-var-table; }\n.@{fa-css-prefix}-magic:before { content: @fa-var-magic; }\n.@{fa-css-prefix}-truck:before { content: @fa-var-truck; }\n.@{fa-css-prefix}-pinterest:before { content: @fa-var-pinterest; }\n.@{fa-css-prefix}-pinterest-square:before { content: @fa-var-pinterest-square; }\n.@{fa-css-prefix}-google-plus-square:before { content: @fa-var-google-plus-square; }\n.@{fa-css-prefix}-google-plus:before { content: @fa-var-google-plus; }\n.@{fa-css-prefix}-money:before { content: @fa-var-money; }\n.@{fa-css-prefix}-caret-down:before { content: @fa-var-caret-down; }\n.@{fa-css-prefix}-caret-up:before { content: @fa-var-caret-up; }\n.@{fa-css-prefix}-caret-left:before { content: @fa-var-caret-left; }\n.@{fa-css-prefix}-caret-right:before { content: @fa-var-caret-right; }\n.@{fa-css-prefix}-columns:before { content: @fa-var-columns; }\n.@{fa-css-prefix}-unsorted:before,\n.@{fa-css-prefix}-sort:before { content: @fa-var-sort; }\n.@{fa-css-prefix}-sort-down:before,\n.@{fa-css-prefix}-sort-desc:before { content: @fa-var-sort-desc; }\n.@{fa-css-prefix}-sort-up:before,\n.@{fa-css-prefix}-sort-asc:before { content: @fa-var-sort-asc; }\n.@{fa-css-prefix}-envelope:before { content: @fa-var-envelope; }\n.@{fa-css-prefix}-linkedin:before { content: @fa-var-linkedin; }\n.@{fa-css-prefix}-rotate-left:before,\n.@{fa-css-prefix}-undo:before { content: @fa-var-undo; }\n.@{fa-css-prefix}-legal:before,\n.@{fa-css-prefix}-gavel:before { content: @fa-var-gavel; }\n.@{fa-css-prefix}-dashboard:before,\n.@{fa-css-prefix}-tachometer:before { content: @fa-var-tachometer; }\n.@{fa-css-prefix}-comment-o:before { content: @fa-var-comment-o; }\n.@{fa-css-prefix}-comments-o:before { content: @fa-var-comments-o; }\n.@{fa-css-prefix}-flash:before,\n.@{fa-css-prefix}-bolt:before { content: @fa-var-bolt; }\n.@{fa-css-prefix}-sitemap:before { content: @fa-var-sitemap; }\n.@{fa-css-prefix}-umbrella:before { content: @fa-var-umbrella; }\n.@{fa-css-prefix}-paste:before,\n.@{fa-css-prefix}-clipboard:before { content: @fa-var-clipboard; }\n.@{fa-css-prefix}-lightbulb-o:before { content: @fa-var-lightbulb-o; }\n.@{fa-css-prefix}-exchange:before { content: @fa-var-exchange; }\n.@{fa-css-prefix}-cloud-download:before { content: @fa-var-cloud-download; }\n.@{fa-css-prefix}-cloud-upload:before { content: @fa-var-cloud-upload; }\n.@{fa-css-prefix}-user-md:before { content: @fa-var-user-md; }\n.@{fa-css-prefix}-stethoscope:before { content: @fa-var-stethoscope; }\n.@{fa-css-prefix}-suitcase:before { content: @fa-var-suitcase; }\n.@{fa-css-prefix}-bell-o:before { content: @fa-var-bell-o; }\n.@{fa-css-prefix}-coffee:before { content: @fa-var-coffee; }\n.@{fa-css-prefix}-cutlery:before { content: @fa-var-cutlery; }\n.@{fa-css-prefix}-file-text-o:before { content: @fa-var-file-text-o; }\n.@{fa-css-prefix}-building-o:before { content: @fa-var-building-o; }\n.@{fa-css-prefix}-hospital-o:before { content: @fa-var-hospital-o; }\n.@{fa-css-prefix}-ambulance:before { content: @fa-var-ambulance; }\n.@{fa-css-prefix}-medkit:before { content: @fa-var-medkit; }\n.@{fa-css-prefix}-fighter-jet:before { content: @fa-var-fighter-jet; }\n.@{fa-css-prefix}-beer:before { content: @fa-var-beer; }\n.@{fa-css-prefix}-h-square:before { content: @fa-var-h-square; }\n.@{fa-css-prefix}-plus-square:before { content: @fa-var-plus-square; }\n.@{fa-css-prefix}-angle-double-left:before { content: @fa-var-angle-double-left; }\n.@{fa-css-prefix}-angle-double-right:before { content: @fa-var-angle-double-right; }\n.@{fa-css-prefix}-angle-double-up:before { content: @fa-var-angle-double-up; }\n.@{fa-css-prefix}-angle-double-down:before { content: @fa-var-angle-double-down; }\n.@{fa-css-prefix}-angle-left:before { content: @fa-var-angle-left; }\n.@{fa-css-prefix}-angle-right:before { content: @fa-var-angle-right; }\n.@{fa-css-prefix}-angle-up:before { content: @fa-var-angle-up; }\n.@{fa-css-prefix}-angle-down:before { content: @fa-var-angle-down; }\n.@{fa-css-prefix}-desktop:before { content: @fa-var-desktop; }\n.@{fa-css-prefix}-laptop:before { content: @fa-var-laptop; }\n.@{fa-css-prefix}-tablet:before { content: @fa-var-tablet; }\n.@{fa-css-prefix}-mobile-phone:before,\n.@{fa-css-prefix}-mobile:before { content: @fa-var-mobile; }\n.@{fa-css-prefix}-circle-o:before { content: @fa-var-circle-o; }\n.@{fa-css-prefix}-quote-left:before { content: @fa-var-quote-left; }\n.@{fa-css-prefix}-quote-right:before { content: @fa-var-quote-right; }\n.@{fa-css-prefix}-spinner:before { content: @fa-var-spinner; }\n.@{fa-css-prefix}-circle:before { content: @fa-var-circle; }\n.@{fa-css-prefix}-mail-reply:before,\n.@{fa-css-prefix}-reply:before { content: @fa-var-reply; }\n.@{fa-css-prefix}-github-alt:before { content: @fa-var-github-alt; }\n.@{fa-css-prefix}-folder-o:before { content: @fa-var-folder-o; }\n.@{fa-css-prefix}-folder-open-o:before { content: @fa-var-folder-open-o; }\n.@{fa-css-prefix}-smile-o:before { content: @fa-var-smile-o; }\n.@{fa-css-prefix}-frown-o:before { content: @fa-var-frown-o; }\n.@{fa-css-prefix}-meh-o:before { content: @fa-var-meh-o; }\n.@{fa-css-prefix}-gamepad:before { content: @fa-var-gamepad; }\n.@{fa-css-prefix}-keyboard-o:before { content: @fa-var-keyboard-o; }\n.@{fa-css-prefix}-flag-o:before { content: @fa-var-flag-o; }\n.@{fa-css-prefix}-flag-checkered:before { content: @fa-var-flag-checkered; }\n.@{fa-css-prefix}-terminal:before { content: @fa-var-terminal; }\n.@{fa-css-prefix}-code:before { content: @fa-var-code; }\n.@{fa-css-prefix}-mail-reply-all:before,\n.@{fa-css-prefix}-reply-all:before { content: @fa-var-reply-all; }\n.@{fa-css-prefix}-star-half-empty:before,\n.@{fa-css-prefix}-star-half-full:before,\n.@{fa-css-prefix}-star-half-o:before { content: @fa-var-star-half-o; }\n.@{fa-css-prefix}-location-arrow:before { content: @fa-var-location-arrow; }\n.@{fa-css-prefix}-crop:before { content: @fa-var-crop; }\n.@{fa-css-prefix}-code-fork:before { content: @fa-var-code-fork; }\n.@{fa-css-prefix}-unlink:before,\n.@{fa-css-prefix}-chain-broken:before { content: @fa-var-chain-broken; }\n.@{fa-css-prefix}-question:before { content: @fa-var-question; }\n.@{fa-css-prefix}-info:before { content: @fa-var-info; }\n.@{fa-css-prefix}-exclamation:before { content: @fa-var-exclamation; }\n.@{fa-css-prefix}-superscript:before { content: @fa-var-superscript; }\n.@{fa-css-prefix}-subscript:before { content: @fa-var-subscript; }\n.@{fa-css-prefix}-eraser:before { content: @fa-var-eraser; }\n.@{fa-css-prefix}-puzzle-piece:before { content: @fa-var-puzzle-piece; }\n.@{fa-css-prefix}-microphone:before { content: @fa-var-microphone; }\n.@{fa-css-prefix}-microphone-slash:before { content: @fa-var-microphone-slash; }\n.@{fa-css-prefix}-shield:before { content: @fa-var-shield; }\n.@{fa-css-prefix}-calendar-o:before { content: @fa-var-calendar-o; }\n.@{fa-css-prefix}-fire-extinguisher:before { content: @fa-var-fire-extinguisher; }\n.@{fa-css-prefix}-rocket:before { content: @fa-var-rocket; }\n.@{fa-css-prefix}-maxcdn:before { content: @fa-var-maxcdn; }\n.@{fa-css-prefix}-chevron-circle-left:before { content: @fa-var-chevron-circle-left; }\n.@{fa-css-prefix}-chevron-circle-right:before { content: @fa-var-chevron-circle-right; }\n.@{fa-css-prefix}-chevron-circle-up:before { content: @fa-var-chevron-circle-up; }\n.@{fa-css-prefix}-chevron-circle-down:before { content: @fa-var-chevron-circle-down; }\n.@{fa-css-prefix}-html5:before { content: @fa-var-html5; }\n.@{fa-css-prefix}-css3:before { content: @fa-var-css3; }\n.@{fa-css-prefix}-anchor:before { content: @fa-var-anchor; }\n.@{fa-css-prefix}-unlock-alt:before { content: @fa-var-unlock-alt; }\n.@{fa-css-prefix}-bullseye:before { content: @fa-var-bullseye; }\n.@{fa-css-prefix}-ellipsis-h:before { content: @fa-var-ellipsis-h; }\n.@{fa-css-prefix}-ellipsis-v:before { content: @fa-var-ellipsis-v; }\n.@{fa-css-prefix}-rss-square:before { content: @fa-var-rss-square; }\n.@{fa-css-prefix}-play-circle:before { content: @fa-var-play-circle; }\n.@{fa-css-prefix}-ticket:before { content: @fa-var-ticket; }\n.@{fa-css-prefix}-minus-square:before { content: @fa-var-minus-square; }\n.@{fa-css-prefix}-minus-square-o:before { content: @fa-var-minus-square-o; }\n.@{fa-css-prefix}-level-up:before { content: @fa-var-level-up; }\n.@{fa-css-prefix}-level-down:before { content: @fa-var-level-down; }\n.@{fa-css-prefix}-check-square:before { content: @fa-var-check-square; }\n.@{fa-css-prefix}-pencil-square:before { content: @fa-var-pencil-square; }\n.@{fa-css-prefix}-external-link-square:before { content: @fa-var-external-link-square; }\n.@{fa-css-prefix}-share-square:before { content: @fa-var-share-square; }\n.@{fa-css-prefix}-compass:before { content: @fa-var-compass; }\n.@{fa-css-prefix}-toggle-down:before,\n.@{fa-css-prefix}-caret-square-o-down:before { content: @fa-var-caret-square-o-down; }\n.@{fa-css-prefix}-toggle-up:before,\n.@{fa-css-prefix}-caret-square-o-up:before { content: @fa-var-caret-square-o-up; }\n.@{fa-css-prefix}-toggle-right:before,\n.@{fa-css-prefix}-caret-square-o-right:before { content: @fa-var-caret-square-o-right; }\n.@{fa-css-prefix}-euro:before,\n.@{fa-css-prefix}-eur:before { content: @fa-var-eur; }\n.@{fa-css-prefix}-gbp:before { content: @fa-var-gbp; }\n.@{fa-css-prefix}-dollar:before,\n.@{fa-css-prefix}-usd:before { content: @fa-var-usd; }\n.@{fa-css-prefix}-rupee:before,\n.@{fa-css-prefix}-inr:before { content: @fa-var-inr; }\n.@{fa-css-prefix}-cny:before,\n.@{fa-css-prefix}-rmb:before,\n.@{fa-css-prefix}-yen:before,\n.@{fa-css-prefix}-jpy:before { content: @fa-var-jpy; }\n.@{fa-css-prefix}-ruble:before,\n.@{fa-css-prefix}-rouble:before,\n.@{fa-css-prefix}-rub:before { content: @fa-var-rub; }\n.@{fa-css-prefix}-won:before,\n.@{fa-css-prefix}-krw:before { content: @fa-var-krw; }\n.@{fa-css-prefix}-bitcoin:before,\n.@{fa-css-prefix}-btc:before { content: @fa-var-btc; }\n.@{fa-css-prefix}-file:before { content: @fa-var-file; }\n.@{fa-css-prefix}-file-text:before { content: @fa-var-file-text; }\n.@{fa-css-prefix}-sort-alpha-asc:before { content: @fa-var-sort-alpha-asc; }\n.@{fa-css-prefix}-sort-alpha-desc:before { content: @fa-var-sort-alpha-desc; }\n.@{fa-css-prefix}-sort-amount-asc:before { content: @fa-var-sort-amount-asc; }\n.@{fa-css-prefix}-sort-amount-desc:before { content: @fa-var-sort-amount-desc; }\n.@{fa-css-prefix}-sort-numeric-asc:before { content: @fa-var-sort-numeric-asc; }\n.@{fa-css-prefix}-sort-numeric-desc:before { content: @fa-var-sort-numeric-desc; }\n.@{fa-css-prefix}-thumbs-up:before { content: @fa-var-thumbs-up; }\n.@{fa-css-prefix}-thumbs-down:before { content: @fa-var-thumbs-down; }\n.@{fa-css-prefix}-youtube-square:before { content: @fa-var-youtube-square; }\n.@{fa-css-prefix}-youtube:before { content: @fa-var-youtube; }\n.@{fa-css-prefix}-xing:before { content: @fa-var-xing; }\n.@{fa-css-prefix}-xing-square:before { content: @fa-var-xing-square; }\n.@{fa-css-prefix}-youtube-play:before { content: @fa-var-youtube-play; }\n.@{fa-css-prefix}-dropbox:before { content: @fa-var-dropbox; }\n.@{fa-css-prefix}-stack-overflow:before { content: @fa-var-stack-overflow; }\n.@{fa-css-prefix}-instagram:before { content: @fa-var-instagram; }\n.@{fa-css-prefix}-flickr:before { content: @fa-var-flickr; }\n.@{fa-css-prefix}-adn:before { content: @fa-var-adn; }\n.@{fa-css-prefix}-bitbucket:before { content: @fa-var-bitbucket; }\n.@{fa-css-prefix}-bitbucket-square:before { content: @fa-var-bitbucket-square; }\n.@{fa-css-prefix}-tumblr:before { content: @fa-var-tumblr; }\n.@{fa-css-prefix}-tumblr-square:before { content: @fa-var-tumblr-square; }\n.@{fa-css-prefix}-long-arrow-down:before { content: @fa-var-long-arrow-down; }\n.@{fa-css-prefix}-long-arrow-up:before { content: @fa-var-long-arrow-up; }\n.@{fa-css-prefix}-long-arrow-left:before { content: @fa-var-long-arrow-left; }\n.@{fa-css-prefix}-long-arrow-right:before { content: @fa-var-long-arrow-right; }\n.@{fa-css-prefix}-apple:before { content: @fa-var-apple; }\n.@{fa-css-prefix}-windows:before { content: @fa-var-windows; }\n.@{fa-css-prefix}-android:before { content: @fa-var-android; }\n.@{fa-css-prefix}-linux:before { content: @fa-var-linux; }\n.@{fa-css-prefix}-dribbble:before { content: @fa-var-dribbble; }\n.@{fa-css-prefix}-skype:before { content: @fa-var-skype; }\n.@{fa-css-prefix}-foursquare:before { content: @fa-var-foursquare; }\n.@{fa-css-prefix}-trello:before { content: @fa-var-trello; }\n.@{fa-css-prefix}-female:before { content: @fa-var-female; }\n.@{fa-css-prefix}-male:before { content: @fa-var-male; }\n.@{fa-css-prefix}-gittip:before,\n.@{fa-css-prefix}-gratipay:before { content: @fa-var-gratipay; }\n.@{fa-css-prefix}-sun-o:before { content: @fa-var-sun-o; }\n.@{fa-css-prefix}-moon-o:before { content: @fa-var-moon-o; }\n.@{fa-css-prefix}-archive:before { content: @fa-var-archive; }\n.@{fa-css-prefix}-bug:before { content: @fa-var-bug; }\n.@{fa-css-prefix}-vk:before { content: @fa-var-vk; }\n.@{fa-css-prefix}-weibo:before { content: @fa-var-weibo; }\n.@{fa-css-prefix}-renren:before { content: @fa-var-renren; }\n.@{fa-css-prefix}-pagelines:before { content: @fa-var-pagelines; }\n.@{fa-css-prefix}-stack-exchange:before { content: @fa-var-stack-exchange; }\n.@{fa-css-prefix}-arrow-circle-o-right:before { content: @fa-var-arrow-circle-o-right; }\n.@{fa-css-prefix}-arrow-circle-o-left:before { content: @fa-var-arrow-circle-o-left; }\n.@{fa-css-prefix}-toggle-left:before,\n.@{fa-css-prefix}-caret-square-o-left:before { content: @fa-var-caret-square-o-left; }\n.@{fa-css-prefix}-dot-circle-o:before { content: @fa-var-dot-circle-o; }\n.@{fa-css-prefix}-wheelchair:before { content: @fa-var-wheelchair; }\n.@{fa-css-prefix}-vimeo-square:before { content: @fa-var-vimeo-square; }\n.@{fa-css-prefix}-turkish-lira:before,\n.@{fa-css-prefix}-try:before { content: @fa-var-try; }\n.@{fa-css-prefix}-plus-square-o:before { content: @fa-var-plus-square-o; }\n.@{fa-css-prefix}-space-shuttle:before { content: @fa-var-space-shuttle; }\n.@{fa-css-prefix}-slack:before { content: @fa-var-slack; }\n.@{fa-css-prefix}-envelope-square:before { content: @fa-var-envelope-square; }\n.@{fa-css-prefix}-wordpress:before { content: @fa-var-wordpress; }\n.@{fa-css-prefix}-openid:before { content: @fa-var-openid; }\n.@{fa-css-prefix}-institution:before,\n.@{fa-css-prefix}-bank:before,\n.@{fa-css-prefix}-university:before { content: @fa-var-university; }\n.@{fa-css-prefix}-mortar-board:before,\n.@{fa-css-prefix}-graduation-cap:before { content: @fa-var-graduation-cap; }\n.@{fa-css-prefix}-yahoo:before { content: @fa-var-yahoo; }\n.@{fa-css-prefix}-google:before { content: @fa-var-google; }\n.@{fa-css-prefix}-reddit:before { content: @fa-var-reddit; }\n.@{fa-css-prefix}-reddit-square:before { content: @fa-var-reddit-square; }\n.@{fa-css-prefix}-stumbleupon-circle:before { content: @fa-var-stumbleupon-circle; }\n.@{fa-css-prefix}-stumbleupon:before { content: @fa-var-stumbleupon; }\n.@{fa-css-prefix}-delicious:before { content: @fa-var-delicious; }\n.@{fa-css-prefix}-digg:before { content: @fa-var-digg; }\n.@{fa-css-prefix}-pied-piper-pp:before { content: @fa-var-pied-piper-pp; }\n.@{fa-css-prefix}-pied-piper-alt:before { content: @fa-var-pied-piper-alt; }\n.@{fa-css-prefix}-drupal:before { content: @fa-var-drupal; }\n.@{fa-css-prefix}-joomla:before { content: @fa-var-joomla; }\n.@{fa-css-prefix}-language:before { content: @fa-var-language; }\n.@{fa-css-prefix}-fax:before { content: @fa-var-fax; }\n.@{fa-css-prefix}-building:before { content: @fa-var-building; }\n.@{fa-css-prefix}-child:before { content: @fa-var-child; }\n.@{fa-css-prefix}-paw:before { content: @fa-var-paw; }\n.@{fa-css-prefix}-spoon:before { content: @fa-var-spoon; }\n.@{fa-css-prefix}-cube:before { content: @fa-var-cube; }\n.@{fa-css-prefix}-cubes:before { content: @fa-var-cubes; }\n.@{fa-css-prefix}-behance:before { content: @fa-var-behance; }\n.@{fa-css-prefix}-behance-square:before { content: @fa-var-behance-square; }\n.@{fa-css-prefix}-steam:before { content: @fa-var-steam; }\n.@{fa-css-prefix}-steam-square:before { content: @fa-var-steam-square; }\n.@{fa-css-prefix}-recycle:before { content: @fa-var-recycle; }\n.@{fa-css-prefix}-automobile:before,\n.@{fa-css-prefix}-car:before { content: @fa-var-car; }\n.@{fa-css-prefix}-cab:before,\n.@{fa-css-prefix}-taxi:before { content: @fa-var-taxi; }\n.@{fa-css-prefix}-tree:before { content: @fa-var-tree; }\n.@{fa-css-prefix}-spotify:before { content: @fa-var-spotify; }\n.@{fa-css-prefix}-deviantart:before { content: @fa-var-deviantart; }\n.@{fa-css-prefix}-soundcloud:before { content: @fa-var-soundcloud; }\n.@{fa-css-prefix}-database:before { content: @fa-var-database; }\n.@{fa-css-prefix}-file-pdf-o:before { content: @fa-var-file-pdf-o; }\n.@{fa-css-prefix}-file-word-o:before { content: @fa-var-file-word-o; }\n.@{fa-css-prefix}-file-excel-o:before { content: @fa-var-file-excel-o; }\n.@{fa-css-prefix}-file-powerpoint-o:before { content: @fa-var-file-powerpoint-o; }\n.@{fa-css-prefix}-file-photo-o:before,\n.@{fa-css-prefix}-file-picture-o:before,\n.@{fa-css-prefix}-file-image-o:before { content: @fa-var-file-image-o; }\n.@{fa-css-prefix}-file-zip-o:before,\n.@{fa-css-prefix}-file-archive-o:before { content: @fa-var-file-archive-o; }\n.@{fa-css-prefix}-file-sound-o:before,\n.@{fa-css-prefix}-file-audio-o:before { content: @fa-var-file-audio-o; }\n.@{fa-css-prefix}-file-movie-o:before,\n.@{fa-css-prefix}-file-video-o:before { content: @fa-var-file-video-o; }\n.@{fa-css-prefix}-file-code-o:before { content: @fa-var-file-code-o; }\n.@{fa-css-prefix}-vine:before { content: @fa-var-vine; }\n.@{fa-css-prefix}-codepen:before { content: @fa-var-codepen; }\n.@{fa-css-prefix}-jsfiddle:before { content: @fa-var-jsfiddle; }\n.@{fa-css-prefix}-life-bouy:before,\n.@{fa-css-prefix}-life-buoy:before,\n.@{fa-css-prefix}-life-saver:before,\n.@{fa-css-prefix}-support:before,\n.@{fa-css-prefix}-life-ring:before { content: @fa-var-life-ring; }\n.@{fa-css-prefix}-circle-o-notch:before { content: @fa-var-circle-o-notch; }\n.@{fa-css-prefix}-ra:before,\n.@{fa-css-prefix}-resistance:before,\n.@{fa-css-prefix}-rebel:before { content: @fa-var-rebel; }\n.@{fa-css-prefix}-ge:before,\n.@{fa-css-prefix}-empire:before { content: @fa-var-empire; }\n.@{fa-css-prefix}-git-square:before { content: @fa-var-git-square; }\n.@{fa-css-prefix}-git:before { content: @fa-var-git; }\n.@{fa-css-prefix}-y-combinator-square:before,\n.@{fa-css-prefix}-yc-square:before,\n.@{fa-css-prefix}-hacker-news:before { content: @fa-var-hacker-news; }\n.@{fa-css-prefix}-tencent-weibo:before { content: @fa-var-tencent-weibo; }\n.@{fa-css-prefix}-qq:before { content: @fa-var-qq; }\n.@{fa-css-prefix}-wechat:before,\n.@{fa-css-prefix}-weixin:before { content: @fa-var-weixin; }\n.@{fa-css-prefix}-send:before,\n.@{fa-css-prefix}-paper-plane:before { content: @fa-var-paper-plane; }\n.@{fa-css-prefix}-send-o:before,\n.@{fa-css-prefix}-paper-plane-o:before { content: @fa-var-paper-plane-o; }\n.@{fa-css-prefix}-history:before { content: @fa-var-history; }\n.@{fa-css-prefix}-circle-thin:before { content: @fa-var-circle-thin; }\n.@{fa-css-prefix}-header:before { content: @fa-var-header; }\n.@{fa-css-prefix}-paragraph:before { content: @fa-var-paragraph; }\n.@{fa-css-prefix}-sliders:before { content: @fa-var-sliders; }\n.@{fa-css-prefix}-share-alt:before { content: @fa-var-share-alt; }\n.@{fa-css-prefix}-share-alt-square:before { content: @fa-var-share-alt-square; }\n.@{fa-css-prefix}-bomb:before { content: @fa-var-bomb; }\n.@{fa-css-prefix}-soccer-ball-o:before,\n.@{fa-css-prefix}-futbol-o:before { content: @fa-var-futbol-o; }\n.@{fa-css-prefix}-tty:before { content: @fa-var-tty; }\n.@{fa-css-prefix}-binoculars:before { content: @fa-var-binoculars; }\n.@{fa-css-prefix}-plug:before { content: @fa-var-plug; }\n.@{fa-css-prefix}-slideshare:before { content: @fa-var-slideshare; }\n.@{fa-css-prefix}-twitch:before { content: @fa-var-twitch; }\n.@{fa-css-prefix}-yelp:before { content: @fa-var-yelp; }\n.@{fa-css-prefix}-newspaper-o:before { content: @fa-var-newspaper-o; }\n.@{fa-css-prefix}-wifi:before { content: @fa-var-wifi; }\n.@{fa-css-prefix}-calculator:before { content: @fa-var-calculator; }\n.@{fa-css-prefix}-paypal:before { content: @fa-var-paypal; }\n.@{fa-css-prefix}-google-wallet:before { content: @fa-var-google-wallet; }\n.@{fa-css-prefix}-cc-visa:before { content: @fa-var-cc-visa; }\n.@{fa-css-prefix}-cc-mastercard:before { content: @fa-var-cc-mastercard; }\n.@{fa-css-prefix}-cc-discover:before { content: @fa-var-cc-discover; }\n.@{fa-css-prefix}-cc-amex:before { content: @fa-var-cc-amex; }\n.@{fa-css-prefix}-cc-paypal:before { content: @fa-var-cc-paypal; }\n.@{fa-css-prefix}-cc-stripe:before { content: @fa-var-cc-stripe; }\n.@{fa-css-prefix}-bell-slash:before { content: @fa-var-bell-slash; }\n.@{fa-css-prefix}-bell-slash-o:before { content: @fa-var-bell-slash-o; }\n.@{fa-css-prefix}-trash:before { content: @fa-var-trash; }\n.@{fa-css-prefix}-copyright:before { content: @fa-var-copyright; }\n.@{fa-css-prefix}-at:before { content: @fa-var-at; }\n.@{fa-css-prefix}-eyedropper:before { content: @fa-var-eyedropper; }\n.@{fa-css-prefix}-paint-brush:before { content: @fa-var-paint-brush; }\n.@{fa-css-prefix}-birthday-cake:before { content: @fa-var-birthday-cake; }\n.@{fa-css-prefix}-area-chart:before { content: @fa-var-area-chart; }\n.@{fa-css-prefix}-pie-chart:before { content: @fa-var-pie-chart; }\n.@{fa-css-prefix}-line-chart:before { content: @fa-var-line-chart; }\n.@{fa-css-prefix}-lastfm:before { content: @fa-var-lastfm; }\n.@{fa-css-prefix}-lastfm-square:before { content: @fa-var-lastfm-square; }\n.@{fa-css-prefix}-toggle-off:before { content: @fa-var-toggle-off; }\n.@{fa-css-prefix}-toggle-on:before { content: @fa-var-toggle-on; }\n.@{fa-css-prefix}-bicycle:before { content: @fa-var-bicycle; }\n.@{fa-css-prefix}-bus:before { content: @fa-var-bus; }\n.@{fa-css-prefix}-ioxhost:before { content: @fa-var-ioxhost; }\n.@{fa-css-prefix}-angellist:before { content: @fa-var-angellist; }\n.@{fa-css-prefix}-cc:before { content: @fa-var-cc; }\n.@{fa-css-prefix}-shekel:before,\n.@{fa-css-prefix}-sheqel:before,\n.@{fa-css-prefix}-ils:before { content: @fa-var-ils; }\n.@{fa-css-prefix}-meanpath:before { content: @fa-var-meanpath; }\n.@{fa-css-prefix}-buysellads:before { content: @fa-var-buysellads; }\n.@{fa-css-prefix}-connectdevelop:before { content: @fa-var-connectdevelop; }\n.@{fa-css-prefix}-dashcube:before { content: @fa-var-dashcube; }\n.@{fa-css-prefix}-forumbee:before { content: @fa-var-forumbee; }\n.@{fa-css-prefix}-leanpub:before { content: @fa-var-leanpub; }\n.@{fa-css-prefix}-sellsy:before { content: @fa-var-sellsy; }\n.@{fa-css-prefix}-shirtsinbulk:before { content: @fa-var-shirtsinbulk; }\n.@{fa-css-prefix}-simplybuilt:before { content: @fa-var-simplybuilt; }\n.@{fa-css-prefix}-skyatlas:before { content: @fa-var-skyatlas; }\n.@{fa-css-prefix}-cart-plus:before { content: @fa-var-cart-plus; }\n.@{fa-css-prefix}-cart-arrow-down:before { content: @fa-var-cart-arrow-down; }\n.@{fa-css-prefix}-diamond:before { content: @fa-var-diamond; }\n.@{fa-css-prefix}-ship:before { content: @fa-var-ship; }\n.@{fa-css-prefix}-user-secret:before { content: @fa-var-user-secret; }\n.@{fa-css-prefix}-motorcycle:before { content: @fa-var-motorcycle; }\n.@{fa-css-prefix}-street-view:before { content: @fa-var-street-view; }\n.@{fa-css-prefix}-heartbeat:before { content: @fa-var-heartbeat; }\n.@{fa-css-prefix}-venus:before { content: @fa-var-venus; }\n.@{fa-css-prefix}-mars:before { content: @fa-var-mars; }\n.@{fa-css-prefix}-mercury:before { content: @fa-var-mercury; }\n.@{fa-css-prefix}-intersex:before,\n.@{fa-css-prefix}-transgender:before { content: @fa-var-transgender; }\n.@{fa-css-prefix}-transgender-alt:before { content: @fa-var-transgender-alt; }\n.@{fa-css-prefix}-venus-double:before { content: @fa-var-venus-double; }\n.@{fa-css-prefix}-mars-double:before { content: @fa-var-mars-double; }\n.@{fa-css-prefix}-venus-mars:before { content: @fa-var-venus-mars; }\n.@{fa-css-prefix}-mars-stroke:before { content: @fa-var-mars-stroke; }\n.@{fa-css-prefix}-mars-stroke-v:before { content: @fa-var-mars-stroke-v; }\n.@{fa-css-prefix}-mars-stroke-h:before { content: @fa-var-mars-stroke-h; }\n.@{fa-css-prefix}-neuter:before { content: @fa-var-neuter; }\n.@{fa-css-prefix}-genderless:before { content: @fa-var-genderless; }\n.@{fa-css-prefix}-facebook-official:before { content: @fa-var-facebook-official; }\n.@{fa-css-prefix}-pinterest-p:before { content: @fa-var-pinterest-p; }\n.@{fa-css-prefix}-whatsapp:before { content: @fa-var-whatsapp; }\n.@{fa-css-prefix}-server:before { content: @fa-var-server; }\n.@{fa-css-prefix}-user-plus:before { content: @fa-var-user-plus; }\n.@{fa-css-prefix}-user-times:before { content: @fa-var-user-times; }\n.@{fa-css-prefix}-hotel:before,\n.@{fa-css-prefix}-bed:before { content: @fa-var-bed; }\n.@{fa-css-prefix}-viacoin:before { content: @fa-var-viacoin; }\n.@{fa-css-prefix}-train:before { content: @fa-var-train; }\n.@{fa-css-prefix}-subway:before { content: @fa-var-subway; }\n.@{fa-css-prefix}-medium:before { content: @fa-var-medium; }\n.@{fa-css-prefix}-yc:before,\n.@{fa-css-prefix}-y-combinator:before { content: @fa-var-y-combinator; }\n.@{fa-css-prefix}-optin-monster:before { content: @fa-var-optin-monster; }\n.@{fa-css-prefix}-opencart:before { content: @fa-var-opencart; }\n.@{fa-css-prefix}-expeditedssl:before { content: @fa-var-expeditedssl; }\n.@{fa-css-prefix}-battery-4:before,\n.@{fa-css-prefix}-battery:before,\n.@{fa-css-prefix}-battery-full:before { content: @fa-var-battery-full; }\n.@{fa-css-prefix}-battery-3:before,\n.@{fa-css-prefix}-battery-three-quarters:before { content: @fa-var-battery-three-quarters; }\n.@{fa-css-prefix}-battery-2:before,\n.@{fa-css-prefix}-battery-half:before { content: @fa-var-battery-half; }\n.@{fa-css-prefix}-battery-1:before,\n.@{fa-css-prefix}-battery-quarter:before { content: @fa-var-battery-quarter; }\n.@{fa-css-prefix}-battery-0:before,\n.@{fa-css-prefix}-battery-empty:before { content: @fa-var-battery-empty; }\n.@{fa-css-prefix}-mouse-pointer:before { content: @fa-var-mouse-pointer; }\n.@{fa-css-prefix}-i-cursor:before { content: @fa-var-i-cursor; }\n.@{fa-css-prefix}-object-group:before { content: @fa-var-object-group; }\n.@{fa-css-prefix}-object-ungroup:before { content: @fa-var-object-ungroup; }\n.@{fa-css-prefix}-sticky-note:before { content: @fa-var-sticky-note; }\n.@{fa-css-prefix}-sticky-note-o:before { content: @fa-var-sticky-note-o; }\n.@{fa-css-prefix}-cc-jcb:before { content: @fa-var-cc-jcb; }\n.@{fa-css-prefix}-cc-diners-club:before { content: @fa-var-cc-diners-club; }\n.@{fa-css-prefix}-clone:before { content: @fa-var-clone; }\n.@{fa-css-prefix}-balance-scale:before { content: @fa-var-balance-scale; }\n.@{fa-css-prefix}-hourglass-o:before { content: @fa-var-hourglass-o; }\n.@{fa-css-prefix}-hourglass-1:before,\n.@{fa-css-prefix}-hourglass-start:before { content: @fa-var-hourglass-start; }\n.@{fa-css-prefix}-hourglass-2:before,\n.@{fa-css-prefix}-hourglass-half:before { content: @fa-var-hourglass-half; }\n.@{fa-css-prefix}-hourglass-3:before,\n.@{fa-css-prefix}-hourglass-end:before { content: @fa-var-hourglass-end; }\n.@{fa-css-prefix}-hourglass:before { content: @fa-var-hourglass; }\n.@{fa-css-prefix}-hand-grab-o:before,\n.@{fa-css-prefix}-hand-rock-o:before { content: @fa-var-hand-rock-o; }\n.@{fa-css-prefix}-hand-stop-o:before,\n.@{fa-css-prefix}-hand-paper-o:before { content: @fa-var-hand-paper-o; }\n.@{fa-css-prefix}-hand-scissors-o:before { content: @fa-var-hand-scissors-o; }\n.@{fa-css-prefix}-hand-lizard-o:before { content: @fa-var-hand-lizard-o; }\n.@{fa-css-prefix}-hand-spock-o:before { content: @fa-var-hand-spock-o; }\n.@{fa-css-prefix}-hand-pointer-o:before { content: @fa-var-hand-pointer-o; }\n.@{fa-css-prefix}-hand-peace-o:before { content: @fa-var-hand-peace-o; }\n.@{fa-css-prefix}-trademark:before { content: @fa-var-trademark; }\n.@{fa-css-prefix}-registered:before { content: @fa-var-registered; }\n.@{fa-css-prefix}-creative-commons:before { content: @fa-var-creative-commons; }\n.@{fa-css-prefix}-gg:before { content: @fa-var-gg; }\n.@{fa-css-prefix}-gg-circle:before { content: @fa-var-gg-circle; }\n.@{fa-css-prefix}-tripadvisor:before { content: @fa-var-tripadvisor; }\n.@{fa-css-prefix}-odnoklassniki:before { content: @fa-var-odnoklassniki; }\n.@{fa-css-prefix}-odnoklassniki-square:before { content: @fa-var-odnoklassniki-square; }\n.@{fa-css-prefix}-get-pocket:before { content: @fa-var-get-pocket; }\n.@{fa-css-prefix}-wikipedia-w:before { content: @fa-var-wikipedia-w; }\n.@{fa-css-prefix}-safari:before { content: @fa-var-safari; }\n.@{fa-css-prefix}-chrome:before { content: @fa-var-chrome; }\n.@{fa-css-prefix}-firefox:before { content: @fa-var-firefox; }\n.@{fa-css-prefix}-opera:before { content: @fa-var-opera; }\n.@{fa-css-prefix}-internet-explorer:before { content: @fa-var-internet-explorer; }\n.@{fa-css-prefix}-tv:before,\n.@{fa-css-prefix}-television:before { content: @fa-var-television; }\n.@{fa-css-prefix}-contao:before { content: @fa-var-contao; }\n.@{fa-css-prefix}-500px:before { content: @fa-var-500px; }\n.@{fa-css-prefix}-amazon:before { content: @fa-var-amazon; }\n.@{fa-css-prefix}-calendar-plus-o:before { content: @fa-var-calendar-plus-o; }\n.@{fa-css-prefix}-calendar-minus-o:before { content: @fa-var-calendar-minus-o; }\n.@{fa-css-prefix}-calendar-times-o:before { content: @fa-var-calendar-times-o; }\n.@{fa-css-prefix}-calendar-check-o:before { content: @fa-var-calendar-check-o; }\n.@{fa-css-prefix}-industry:before { content: @fa-var-industry; }\n.@{fa-css-prefix}-map-pin:before { content: @fa-var-map-pin; }\n.@{fa-css-prefix}-map-signs:before { content: @fa-var-map-signs; }\n.@{fa-css-prefix}-map-o:before { content: @fa-var-map-o; }\n.@{fa-css-prefix}-map:before { content: @fa-var-map; }\n.@{fa-css-prefix}-commenting:before { content: @fa-var-commenting; }\n.@{fa-css-prefix}-commenting-o:before { content: @fa-var-commenting-o; }\n.@{fa-css-prefix}-houzz:before { content: @fa-var-houzz; }\n.@{fa-css-prefix}-vimeo:before { content: @fa-var-vimeo; }\n.@{fa-css-prefix}-black-tie:before { content: @fa-var-black-tie; }\n.@{fa-css-prefix}-fonticons:before { content: @fa-var-fonticons; }\n.@{fa-css-prefix}-reddit-alien:before { content: @fa-var-reddit-alien; }\n.@{fa-css-prefix}-edge:before { content: @fa-var-edge; }\n.@{fa-css-prefix}-credit-card-alt:before { content: @fa-var-credit-card-alt; }\n.@{fa-css-prefix}-codiepie:before { content: @fa-var-codiepie; }\n.@{fa-css-prefix}-modx:before { content: @fa-var-modx; }\n.@{fa-css-prefix}-fort-awesome:before { content: @fa-var-fort-awesome; }\n.@{fa-css-prefix}-usb:before { content: @fa-var-usb; }\n.@{fa-css-prefix}-product-hunt:before { content: @fa-var-product-hunt; }\n.@{fa-css-prefix}-mixcloud:before { content: @fa-var-mixcloud; }\n.@{fa-css-prefix}-scribd:before { content: @fa-var-scribd; }\n.@{fa-css-prefix}-pause-circle:before { content: @fa-var-pause-circle; }\n.@{fa-css-prefix}-pause-circle-o:before { content: @fa-var-pause-circle-o; }\n.@{fa-css-prefix}-stop-circle:before { content: @fa-var-stop-circle; }\n.@{fa-css-prefix}-stop-circle-o:before { content: @fa-var-stop-circle-o; }\n.@{fa-css-prefix}-shopping-bag:before { content: @fa-var-shopping-bag; }\n.@{fa-css-prefix}-shopping-basket:before { content: @fa-var-shopping-basket; }\n.@{fa-css-prefix}-hashtag:before { content: @fa-var-hashtag; }\n.@{fa-css-prefix}-bluetooth:before { content: @fa-var-bluetooth; }\n.@{fa-css-prefix}-bluetooth-b:before { content: @fa-var-bluetooth-b; }\n.@{fa-css-prefix}-percent:before { content: @fa-var-percent; }\n.@{fa-css-prefix}-gitlab:before { content: @fa-var-gitlab; }\n.@{fa-css-prefix}-wpbeginner:before { content: @fa-var-wpbeginner; }\n.@{fa-css-prefix}-wpforms:before { content: @fa-var-wpforms; }\n.@{fa-css-prefix}-envira:before { content: @fa-var-envira; }\n.@{fa-css-prefix}-universal-access:before { content: @fa-var-universal-access; }\n.@{fa-css-prefix}-wheelchair-alt:before { content: @fa-var-wheelchair-alt; }\n.@{fa-css-prefix}-question-circle-o:before { content: @fa-var-question-circle-o; }\n.@{fa-css-prefix}-blind:before { content: @fa-var-blind; }\n.@{fa-css-prefix}-audio-description:before { content: @fa-var-audio-description; }\n.@{fa-css-prefix}-volume-control-phone:before { content: @fa-var-volume-control-phone; }\n.@{fa-css-prefix}-braille:before { content: @fa-var-braille; }\n.@{fa-css-prefix}-assistive-listening-systems:before { content: @fa-var-assistive-listening-systems; }\n.@{fa-css-prefix}-asl-interpreting:before,\n.@{fa-css-prefix}-american-sign-language-interpreting:before { content: @fa-var-american-sign-language-interpreting; }\n.@{fa-css-prefix}-deafness:before,\n.@{fa-css-prefix}-hard-of-hearing:before,\n.@{fa-css-prefix}-deaf:before { content: @fa-var-deaf; }\n.@{fa-css-prefix}-glide:before { content: @fa-var-glide; }\n.@{fa-css-prefix}-glide-g:before { content: @fa-var-glide-g; }\n.@{fa-css-prefix}-signing:before,\n.@{fa-css-prefix}-sign-language:before { content: @fa-var-sign-language; }\n.@{fa-css-prefix}-low-vision:before { content: @fa-var-low-vision; }\n.@{fa-css-prefix}-viadeo:before { content: @fa-var-viadeo; }\n.@{fa-css-prefix}-viadeo-square:before { content: @fa-var-viadeo-square; }\n.@{fa-css-prefix}-snapchat:before { content: @fa-var-snapchat; }\n.@{fa-css-prefix}-snapchat-ghost:before { content: @fa-var-snapchat-ghost; }\n.@{fa-css-prefix}-snapchat-square:before { content: @fa-var-snapchat-square; }\n.@{fa-css-prefix}-pied-piper:before { content: @fa-var-pied-piper; }\n.@{fa-css-prefix}-first-order:before { content: @fa-var-first-order; }\n.@{fa-css-prefix}-yoast:before { content: @fa-var-yoast; }\n.@{fa-css-prefix}-themeisle:before { content: @fa-var-themeisle; }\n.@{fa-css-prefix}-google-plus-circle:before,\n.@{fa-css-prefix}-google-plus-official:before { content: @fa-var-google-plus-official; }\n.@{fa-css-prefix}-fa:before,\n.@{fa-css-prefix}-font-awesome:before { content: @fa-var-font-awesome; }\n.@{fa-css-prefix}-handshake-o:before { content: @fa-var-handshake-o; }\n.@{fa-css-prefix}-envelope-open:before { content: @fa-var-envelope-open; }\n.@{fa-css-prefix}-envelope-open-o:before { content: @fa-var-envelope-open-o; }\n.@{fa-css-prefix}-linode:before { content: @fa-var-linode; }\n.@{fa-css-prefix}-address-book:before { content: @fa-var-address-book; }\n.@{fa-css-prefix}-address-book-o:before { content: @fa-var-address-book-o; }\n.@{fa-css-prefix}-vcard:before,\n.@{fa-css-prefix}-address-card:before { content: @fa-var-address-card; }\n.@{fa-css-prefix}-vcard-o:before,\n.@{fa-css-prefix}-address-card-o:before { content: @fa-var-address-card-o; }\n.@{fa-css-prefix}-user-circle:before { content: @fa-var-user-circle; }\n.@{fa-css-prefix}-user-circle-o:before { content: @fa-var-user-circle-o; }\n.@{fa-css-prefix}-user-o:before { content: @fa-var-user-o; }\n.@{fa-css-prefix}-id-badge:before { content: @fa-var-id-badge; }\n.@{fa-css-prefix}-drivers-license:before,\n.@{fa-css-prefix}-id-card:before { content: @fa-var-id-card; }\n.@{fa-css-prefix}-drivers-license-o:before,\n.@{fa-css-prefix}-id-card-o:before { content: @fa-var-id-card-o; }\n.@{fa-css-prefix}-quora:before { content: @fa-var-quora; }\n.@{fa-css-prefix}-free-code-camp:before { content: @fa-var-free-code-camp; }\n.@{fa-css-prefix}-telegram:before { content: @fa-var-telegram; }\n.@{fa-css-prefix}-thermometer-4:before,\n.@{fa-css-prefix}-thermometer:before,\n.@{fa-css-prefix}-thermometer-full:before { content: @fa-var-thermometer-full; }\n.@{fa-css-prefix}-thermometer-3:before,\n.@{fa-css-prefix}-thermometer-three-quarters:before { content: @fa-var-thermometer-three-quarters; }\n.@{fa-css-prefix}-thermometer-2:before,\n.@{fa-css-prefix}-thermometer-half:before { content: @fa-var-thermometer-half; }\n.@{fa-css-prefix}-thermometer-1:before,\n.@{fa-css-prefix}-thermometer-quarter:before { content: @fa-var-thermometer-quarter; }\n.@{fa-css-prefix}-thermometer-0:before,\n.@{fa-css-prefix}-thermometer-empty:before { content: @fa-var-thermometer-empty; }\n.@{fa-css-prefix}-shower:before { content: @fa-var-shower; }\n.@{fa-css-prefix}-bathtub:before,\n.@{fa-css-prefix}-s15:before,\n.@{fa-css-prefix}-bath:before { content: @fa-var-bath; }\n.@{fa-css-prefix}-podcast:before { content: @fa-var-podcast; }\n.@{fa-css-prefix}-window-maximize:before { content: @fa-var-window-maximize; }\n.@{fa-css-prefix}-window-minimize:before { content: @fa-var-window-minimize; }\n.@{fa-css-prefix}-window-restore:before { content: @fa-var-window-restore; }\n.@{fa-css-prefix}-times-rectangle:before,\n.@{fa-css-prefix}-window-close:before { content: @fa-var-window-close; }\n.@{fa-css-prefix}-times-rectangle-o:before,\n.@{fa-css-prefix}-window-close-o:before { content: @fa-var-window-close-o; }\n.@{fa-css-prefix}-bandcamp:before { content: @fa-var-bandcamp; }\n.@{fa-css-prefix}-grav:before { content: @fa-var-grav; }\n.@{fa-css-prefix}-etsy:before { content: @fa-var-etsy; }\n.@{fa-css-prefix}-imdb:before { content: @fa-var-imdb; }\n.@{fa-css-prefix}-ravelry:before { content: @fa-var-ravelry; }\n.@{fa-css-prefix}-eercast:before { content: @fa-var-eercast; }\n.@{fa-css-prefix}-microchip:before { content: @fa-var-microchip; }\n.@{fa-css-prefix}-snowflake-o:before { content: @fa-var-snowflake-o; }\n.@{fa-css-prefix}-superpowers:before { content: @fa-var-superpowers; }\n.@{fa-css-prefix}-wpexplorer:before { content: @fa-var-wpexplorer; }\n.@{fa-css-prefix}-meetup:before { content: @fa-var-meetup; }\n"
  },
  {
    "path": "public/frontend/plugins/font-awesome/less/larger.less",
    "content": "// Icon Sizes\n// -------------------------\n\n/* makes the font 33% larger relative to the icon container */\n.@{fa-css-prefix}-lg {\n  font-size: (4em / 3);\n  line-height: (3em / 4);\n  vertical-align: -15%;\n}\n.@{fa-css-prefix}-2x { font-size: 2em; }\n.@{fa-css-prefix}-3x { font-size: 3em; }\n.@{fa-css-prefix}-4x { font-size: 4em; }\n.@{fa-css-prefix}-5x { font-size: 5em; }\n"
  },
  {
    "path": "public/frontend/plugins/font-awesome/less/list.less",
    "content": "// List Icons\n// -------------------------\n\n.@{fa-css-prefix}-ul {\n  padding-left: 0;\n  margin-left: @fa-li-width;\n  list-style-type: none;\n  > li { position: relative; }\n}\n.@{fa-css-prefix}-li {\n  position: absolute;\n  left: -@fa-li-width;\n  width: @fa-li-width;\n  top: (2em / 14);\n  text-align: center;\n  &.@{fa-css-prefix}-lg {\n    left: (-@fa-li-width + (4em / 14));\n  }\n}\n"
  },
  {
    "path": "public/frontend/plugins/font-awesome/less/mixins.less",
    "content": "// Mixins\n// --------------------------\n\n.fa-icon() {\n  display: inline-block;\n  font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration\n  font-size: inherit; // can't have font-size inherit on line above, so need to override\n  text-rendering: auto; // optimizelegibility throws things off #1094\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n\n}\n\n.fa-icon-rotate(@degrees, @rotation) {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation})\";\n  -webkit-transform: rotate(@degrees);\n      -ms-transform: rotate(@degrees);\n          transform: rotate(@degrees);\n}\n\n.fa-icon-flip(@horiz, @vert, @rotation) {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation}, mirror=1)\";\n  -webkit-transform: scale(@horiz, @vert);\n      -ms-transform: scale(@horiz, @vert);\n          transform: scale(@horiz, @vert);\n}\n\n\n// Only display content to screen readers. A la Bootstrap 4.\n//\n// See: http://a11yproject.com/posts/how-to-hide-content/\n\n.sr-only() {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0,0,0,0);\n  border: 0;\n}\n\n// Use in conjunction with .sr-only to only display content when it's focused.\n//\n// Useful for \"Skip to main content\" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n//\n// Credit: HTML5 Boilerplate\n\n.sr-only-focusable() {\n  &:active,\n  &:focus {\n    position: static;\n    width: auto;\n    height: auto;\n    margin: 0;\n    overflow: visible;\n    clip: auto;\n  }\n}\n"
  },
  {
    "path": "public/frontend/plugins/font-awesome/less/path.less",
    "content": "/* FONT PATH\n * -------------------------- */\n\n@font-face {\n  font-family: 'FontAwesome';\n  src: url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}');\n  src: url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype'),\n    url('@{fa-font-path}/fontawesome-webfont.woff2?v=@{fa-version}') format('woff2'),\n    url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff'),\n    url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype'),\n    url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg');\n  // src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts\n  font-weight: normal;\n  font-style: normal;\n}\n"
  },
  {
    "path": "public/frontend/plugins/font-awesome/less/rotated-flipped.less",
    "content": "// Rotated & Flipped Icons\n// -------------------------\n\n.@{fa-css-prefix}-rotate-90  { .fa-icon-rotate(90deg, 1);  }\n.@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); }\n.@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); }\n\n.@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); }\n.@{fa-css-prefix}-flip-vertical   { .fa-icon-flip(1, -1, 2); }\n\n// Hook for IE8-9\n// -------------------------\n\n:root .@{fa-css-prefix}-rotate-90,\n:root .@{fa-css-prefix}-rotate-180,\n:root .@{fa-css-prefix}-rotate-270,\n:root .@{fa-css-prefix}-flip-horizontal,\n:root .@{fa-css-prefix}-flip-vertical {\n  filter: none;\n}\n"
  },
  {
    "path": "public/frontend/plugins/font-awesome/less/screen-reader.less",
    "content": "// Screen Readers\n// -------------------------\n\n.sr-only { .sr-only(); }\n.sr-only-focusable { .sr-only-focusable(); }\n"
  },
  {
    "path": "public/frontend/plugins/font-awesome/less/stacked.less",
    "content": "// Stacked Icons\n// -------------------------\n\n.@{fa-css-prefix}-stack {\n  position: relative;\n  display: inline-block;\n  width: 2em;\n  height: 2em;\n  line-height: 2em;\n  vertical-align: middle;\n}\n.@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x {\n  position: absolute;\n  left: 0;\n  width: 100%;\n  text-align: center;\n}\n.@{fa-css-prefix}-stack-1x { line-height: inherit; }\n.@{fa-css-prefix}-stack-2x { font-size: 2em; }\n.@{fa-css-prefix}-inverse { color: @fa-inverse; }\n"
  },
  {
    "path": "public/frontend/plugins/font-awesome/less/variables.less",
    "content": "// Variables\n// --------------------------\n\n@fa-font-path:        \"../fonts\";\n@fa-font-size-base:   14px;\n@fa-line-height-base: 1;\n//@fa-font-path:        \"//netdna.bootstrapcdn.com/font-awesome/4.7.0/fonts\"; // for referencing Bootstrap CDN font files directly\n@fa-css-prefix:       fa;\n@fa-version:          \"4.7.0\";\n@fa-border-color:     #eee;\n@fa-inverse:          #fff;\n@fa-li-width:         (30em / 14);\n\n@fa-var-500px: \"\\f26e\";\n@fa-var-address-book: \"\\f2b9\";\n@fa-var-address-book-o: \"\\f2ba\";\n@fa-var-address-card: \"\\f2bb\";\n@fa-var-address-card-o: \"\\f2bc\";\n@fa-var-adjust: \"\\f042\";\n@fa-var-adn: \"\\f170\";\n@fa-var-align-center: \"\\f037\";\n@fa-var-align-justify: \"\\f039\";\n@fa-var-align-left: \"\\f036\";\n@fa-var-align-right: \"\\f038\";\n@fa-var-amazon: \"\\f270\";\n@fa-var-ambulance: \"\\f0f9\";\n@fa-var-american-sign-language-interpreting: \"\\f2a3\";\n@fa-var-anchor: \"\\f13d\";\n@fa-var-android: \"\\f17b\";\n@fa-var-angellist: \"\\f209\";\n@fa-var-angle-double-down: \"\\f103\";\n@fa-var-angle-double-left: \"\\f100\";\n@fa-var-angle-double-right: \"\\f101\";\n@fa-var-angle-double-up: \"\\f102\";\n@fa-var-angle-down: \"\\f107\";\n@fa-var-angle-left: \"\\f104\";\n@fa-var-angle-right: \"\\f105\";\n@fa-var-angle-up: \"\\f106\";\n@fa-var-apple: \"\\f179\";\n@fa-var-archive: \"\\f187\";\n@fa-var-area-chart: \"\\f1fe\";\n@fa-var-arrow-circle-down: \"\\f0ab\";\n@fa-var-arrow-circle-left: \"\\f0a8\";\n@fa-var-arrow-circle-o-down: \"\\f01a\";\n@fa-var-arrow-circle-o-left: \"\\f190\";\n@fa-var-arrow-circle-o-right: \"\\f18e\";\n@fa-var-arrow-circle-o-up: \"\\f01b\";\n@fa-var-arrow-circle-right: \"\\f0a9\";\n@fa-var-arrow-circle-up: \"\\f0aa\";\n@fa-var-arrow-down: \"\\f063\";\n@fa-var-arrow-left: \"\\f060\";\n@fa-var-arrow-right: \"\\f061\";\n@fa-var-arrow-up: \"\\f062\";\n@fa-var-arrows: \"\\f047\";\n@fa-var-arrows-alt: \"\\f0b2\";\n@fa-var-arrows-h: \"\\f07e\";\n@fa-var-arrows-v: \"\\f07d\";\n@fa-var-asl-interpreting: \"\\f2a3\";\n@fa-var-assistive-listening-systems: \"\\f2a2\";\n@fa-var-asterisk: \"\\f069\";\n@fa-var-at: \"\\f1fa\";\n@fa-var-audio-description: \"\\f29e\";\n@fa-var-automobile: \"\\f1b9\";\n@fa-var-backward: \"\\f04a\";\n@fa-var-balance-scale: \"\\f24e\";\n@fa-var-ban: \"\\f05e\";\n@fa-var-bandcamp: \"\\f2d5\";\n@fa-var-bank: \"\\f19c\";\n@fa-var-bar-chart: \"\\f080\";\n@fa-var-bar-chart-o: \"\\f080\";\n@fa-var-barcode: \"\\f02a\";\n@fa-var-bars: \"\\f0c9\";\n@fa-var-bath: \"\\f2cd\";\n@fa-var-bathtub: \"\\f2cd\";\n@fa-var-battery: \"\\f240\";\n@fa-var-battery-0: \"\\f244\";\n@fa-var-battery-1: \"\\f243\";\n@fa-var-battery-2: \"\\f242\";\n@fa-var-battery-3: \"\\f241\";\n@fa-var-battery-4: \"\\f240\";\n@fa-var-battery-empty: \"\\f244\";\n@fa-var-battery-full: \"\\f240\";\n@fa-var-battery-half: \"\\f242\";\n@fa-var-battery-quarter: \"\\f243\";\n@fa-var-battery-three-quarters: \"\\f241\";\n@fa-var-bed: \"\\f236\";\n@fa-var-beer: \"\\f0fc\";\n@fa-var-behance: \"\\f1b4\";\n@fa-var-behance-square: \"\\f1b5\";\n@fa-var-bell: \"\\f0f3\";\n@fa-var-bell-o: \"\\f0a2\";\n@fa-var-bell-slash: \"\\f1f6\";\n@fa-var-bell-slash-o: \"\\f1f7\";\n@fa-var-bicycle: \"\\f206\";\n@fa-var-binoculars: \"\\f1e5\";\n@fa-var-birthday-cake: \"\\f1fd\";\n@fa-var-bitbucket: \"\\f171\";\n@fa-var-bitbucket-square: \"\\f172\";\n@fa-var-bitcoin: \"\\f15a\";\n@fa-var-black-tie: \"\\f27e\";\n@fa-var-blind: \"\\f29d\";\n@fa-var-bluetooth: \"\\f293\";\n@fa-var-bluetooth-b: \"\\f294\";\n@fa-var-bold: \"\\f032\";\n@fa-var-bolt: \"\\f0e7\";\n@fa-var-bomb: \"\\f1e2\";\n@fa-var-book: \"\\f02d\";\n@fa-var-bookmark: \"\\f02e\";\n@fa-var-bookmark-o: \"\\f097\";\n@fa-var-braille: \"\\f2a1\";\n@fa-var-briefcase: \"\\f0b1\";\n@fa-var-btc: \"\\f15a\";\n@fa-var-bug: \"\\f188\";\n@fa-var-building: \"\\f1ad\";\n@fa-var-building-o: \"\\f0f7\";\n@fa-var-bullhorn: \"\\f0a1\";\n@fa-var-bullseye: \"\\f140\";\n@fa-var-bus: \"\\f207\";\n@fa-var-buysellads: \"\\f20d\";\n@fa-var-cab: \"\\f1ba\";\n@fa-var-calculator: \"\\f1ec\";\n@fa-var-calendar: \"\\f073\";\n@fa-var-calendar-check-o: \"\\f274\";\n@fa-var-calendar-minus-o: \"\\f272\";\n@fa-var-calendar-o: \"\\f133\";\n@fa-var-calendar-plus-o: \"\\f271\";\n@fa-var-calendar-times-o: \"\\f273\";\n@fa-var-camera: \"\\f030\";\n@fa-var-camera-retro: \"\\f083\";\n@fa-var-car: \"\\f1b9\";\n@fa-var-caret-down: \"\\f0d7\";\n@fa-var-caret-left: \"\\f0d9\";\n@fa-var-caret-right: \"\\f0da\";\n@fa-var-caret-square-o-down: \"\\f150\";\n@fa-var-caret-square-o-left: \"\\f191\";\n@fa-var-caret-square-o-right: \"\\f152\";\n@fa-var-caret-square-o-up: \"\\f151\";\n@fa-var-caret-up: \"\\f0d8\";\n@fa-var-cart-arrow-down: \"\\f218\";\n@fa-var-cart-plus: \"\\f217\";\n@fa-var-cc: \"\\f20a\";\n@fa-var-cc-amex: \"\\f1f3\";\n@fa-var-cc-diners-club: \"\\f24c\";\n@fa-var-cc-discover: \"\\f1f2\";\n@fa-var-cc-jcb: \"\\f24b\";\n@fa-var-cc-mastercard: \"\\f1f1\";\n@fa-var-cc-paypal: \"\\f1f4\";\n@fa-var-cc-stripe: \"\\f1f5\";\n@fa-var-cc-visa: \"\\f1f0\";\n@fa-var-certificate: \"\\f0a3\";\n@fa-var-chain: \"\\f0c1\";\n@fa-var-chain-broken: \"\\f127\";\n@fa-var-check: \"\\f00c\";\n@fa-var-check-circle: \"\\f058\";\n@fa-var-check-circle-o: \"\\f05d\";\n@fa-var-check-square: \"\\f14a\";\n@fa-var-check-square-o: \"\\f046\";\n@fa-var-chevron-circle-down: \"\\f13a\";\n@fa-var-chevron-circle-left: \"\\f137\";\n@fa-var-chevron-circle-right: \"\\f138\";\n@fa-var-chevron-circle-up: \"\\f139\";\n@fa-var-chevron-down: \"\\f078\";\n@fa-var-chevron-left: \"\\f053\";\n@fa-var-chevron-right: \"\\f054\";\n@fa-var-chevron-up: \"\\f077\";\n@fa-var-child: \"\\f1ae\";\n@fa-var-chrome: \"\\f268\";\n@fa-var-circle: \"\\f111\";\n@fa-var-circle-o: \"\\f10c\";\n@fa-var-circle-o-notch: \"\\f1ce\";\n@fa-var-circle-thin: \"\\f1db\";\n@fa-var-clipboard: \"\\f0ea\";\n@fa-var-clock-o: \"\\f017\";\n@fa-var-clone: \"\\f24d\";\n@fa-var-close: \"\\f00d\";\n@fa-var-cloud: \"\\f0c2\";\n@fa-var-cloud-download: \"\\f0ed\";\n@fa-var-cloud-upload: \"\\f0ee\";\n@fa-var-cny: \"\\f157\";\n@fa-var-code: \"\\f121\";\n@fa-var-code-fork: \"\\f126\";\n@fa-var-codepen: \"\\f1cb\";\n@fa-var-codiepie: \"\\f284\";\n@fa-var-coffee: \"\\f0f4\";\n@fa-var-cog: \"\\f013\";\n@fa-var-cogs: \"\\f085\";\n@fa-var-columns: \"\\f0db\";\n@fa-var-comment: \"\\f075\";\n@fa-var-comment-o: \"\\f0e5\";\n@fa-var-commenting: \"\\f27a\";\n@fa-var-commenting-o: \"\\f27b\";\n@fa-var-comments: \"\\f086\";\n@fa-var-comments-o: \"\\f0e6\";\n@fa-var-compass: \"\\f14e\";\n@fa-var-compress: \"\\f066\";\n@fa-var-connectdevelop: \"\\f20e\";\n@fa-var-contao: \"\\f26d\";\n@fa-var-copy: \"\\f0c5\";\n@fa-var-copyright: \"\\f1f9\";\n@fa-var-creative-commons: \"\\f25e\";\n@fa-var-credit-card: \"\\f09d\";\n@fa-var-credit-card-alt: \"\\f283\";\n@fa-var-crop: \"\\f125\";\n@fa-var-crosshairs: \"\\f05b\";\n@fa-var-css3: \"\\f13c\";\n@fa-var-cube: \"\\f1b2\";\n@fa-var-cubes: \"\\f1b3\";\n@fa-var-cut: \"\\f0c4\";\n@fa-var-cutlery: \"\\f0f5\";\n@fa-var-dashboard: \"\\f0e4\";\n@fa-var-dashcube: \"\\f210\";\n@fa-var-database: \"\\f1c0\";\n@fa-var-deaf: \"\\f2a4\";\n@fa-var-deafness: \"\\f2a4\";\n@fa-var-dedent: \"\\f03b\";\n@fa-var-delicious: \"\\f1a5\";\n@fa-var-desktop: \"\\f108\";\n@fa-var-deviantart: \"\\f1bd\";\n@fa-var-diamond: \"\\f219\";\n@fa-var-digg: \"\\f1a6\";\n@fa-var-dollar: \"\\f155\";\n@fa-var-dot-circle-o: \"\\f192\";\n@fa-var-download: \"\\f019\";\n@fa-var-dribbble: \"\\f17d\";\n@fa-var-drivers-license: \"\\f2c2\";\n@fa-var-drivers-license-o: \"\\f2c3\";\n@fa-var-dropbox: \"\\f16b\";\n@fa-var-drupal: \"\\f1a9\";\n@fa-var-edge: \"\\f282\";\n@fa-var-edit: \"\\f044\";\n@fa-var-eercast: \"\\f2da\";\n@fa-var-eject: \"\\f052\";\n@fa-var-ellipsis-h: \"\\f141\";\n@fa-var-ellipsis-v: \"\\f142\";\n@fa-var-empire: \"\\f1d1\";\n@fa-var-envelope: \"\\f0e0\";\n@fa-var-envelope-o: \"\\f003\";\n@fa-var-envelope-open: \"\\f2b6\";\n@fa-var-envelope-open-o: \"\\f2b7\";\n@fa-var-envelope-square: \"\\f199\";\n@fa-var-envira: \"\\f299\";\n@fa-var-eraser: \"\\f12d\";\n@fa-var-etsy: \"\\f2d7\";\n@fa-var-eur: \"\\f153\";\n@fa-var-euro: \"\\f153\";\n@fa-var-exchange: \"\\f0ec\";\n@fa-var-exclamation: \"\\f12a\";\n@fa-var-exclamation-circle: \"\\f06a\";\n@fa-var-exclamation-triangle: \"\\f071\";\n@fa-var-expand: \"\\f065\";\n@fa-var-expeditedssl: \"\\f23e\";\n@fa-var-external-link: \"\\f08e\";\n@fa-var-external-link-square: \"\\f14c\";\n@fa-var-eye: \"\\f06e\";\n@fa-var-eye-slash: \"\\f070\";\n@fa-var-eyedropper: \"\\f1fb\";\n@fa-var-fa: \"\\f2b4\";\n@fa-var-facebook: \"\\f09a\";\n@fa-var-facebook-f: \"\\f09a\";\n@fa-var-facebook-official: \"\\f230\";\n@fa-var-facebook-square: \"\\f082\";\n@fa-var-fast-backward: \"\\f049\";\n@fa-var-fast-forward: \"\\f050\";\n@fa-var-fax: \"\\f1ac\";\n@fa-var-feed: \"\\f09e\";\n@fa-var-female: \"\\f182\";\n@fa-var-fighter-jet: \"\\f0fb\";\n@fa-var-file: \"\\f15b\";\n@fa-var-file-archive-o: \"\\f1c6\";\n@fa-var-file-audio-o: \"\\f1c7\";\n@fa-var-file-code-o: \"\\f1c9\";\n@fa-var-file-excel-o: \"\\f1c3\";\n@fa-var-file-image-o: \"\\f1c5\";\n@fa-var-file-movie-o: \"\\f1c8\";\n@fa-var-file-o: \"\\f016\";\n@fa-var-file-pdf-o: \"\\f1c1\";\n@fa-var-file-photo-o: \"\\f1c5\";\n@fa-var-file-picture-o: \"\\f1c5\";\n@fa-var-file-powerpoint-o: \"\\f1c4\";\n@fa-var-file-sound-o: \"\\f1c7\";\n@fa-var-file-text: \"\\f15c\";\n@fa-var-file-text-o: \"\\f0f6\";\n@fa-var-file-video-o: \"\\f1c8\";\n@fa-var-file-word-o: \"\\f1c2\";\n@fa-var-file-zip-o: \"\\f1c6\";\n@fa-var-files-o: \"\\f0c5\";\n@fa-var-film: \"\\f008\";\n@fa-var-filter: \"\\f0b0\";\n@fa-var-fire: \"\\f06d\";\n@fa-var-fire-extinguisher: \"\\f134\";\n@fa-var-firefox: \"\\f269\";\n@fa-var-first-order: \"\\f2b0\";\n@fa-var-flag: \"\\f024\";\n@fa-var-flag-checkered: \"\\f11e\";\n@fa-var-flag-o: \"\\f11d\";\n@fa-var-flash: \"\\f0e7\";\n@fa-var-flask: \"\\f0c3\";\n@fa-var-flickr: \"\\f16e\";\n@fa-var-floppy-o: \"\\f0c7\";\n@fa-var-folder: \"\\f07b\";\n@fa-var-folder-o: \"\\f114\";\n@fa-var-folder-open: \"\\f07c\";\n@fa-var-folder-open-o: \"\\f115\";\n@fa-var-font: \"\\f031\";\n@fa-var-font-awesome: \"\\f2b4\";\n@fa-var-fonticons: \"\\f280\";\n@fa-var-fort-awesome: \"\\f286\";\n@fa-var-forumbee: \"\\f211\";\n@fa-var-forward: \"\\f04e\";\n@fa-var-foursquare: \"\\f180\";\n@fa-var-free-code-camp: \"\\f2c5\";\n@fa-var-frown-o: \"\\f119\";\n@fa-var-futbol-o: \"\\f1e3\";\n@fa-var-gamepad: \"\\f11b\";\n@fa-var-gavel: \"\\f0e3\";\n@fa-var-gbp: \"\\f154\";\n@fa-var-ge: \"\\f1d1\";\n@fa-var-gear: \"\\f013\";\n@fa-var-gears: \"\\f085\";\n@fa-var-genderless: \"\\f22d\";\n@fa-var-get-pocket: \"\\f265\";\n@fa-var-gg: \"\\f260\";\n@fa-var-gg-circle: \"\\f261\";\n@fa-var-gift: \"\\f06b\";\n@fa-var-git: \"\\f1d3\";\n@fa-var-git-square: \"\\f1d2\";\n@fa-var-github: \"\\f09b\";\n@fa-var-github-alt: \"\\f113\";\n@fa-var-github-square: \"\\f092\";\n@fa-var-gitlab: \"\\f296\";\n@fa-var-gittip: \"\\f184\";\n@fa-var-glass: \"\\f000\";\n@fa-var-glide: \"\\f2a5\";\n@fa-var-glide-g: \"\\f2a6\";\n@fa-var-globe: \"\\f0ac\";\n@fa-var-google: \"\\f1a0\";\n@fa-var-google-plus: \"\\f0d5\";\n@fa-var-google-plus-circle: \"\\f2b3\";\n@fa-var-google-plus-official: \"\\f2b3\";\n@fa-var-google-plus-square: \"\\f0d4\";\n@fa-var-google-wallet: \"\\f1ee\";\n@fa-var-graduation-cap: \"\\f19d\";\n@fa-var-gratipay: \"\\f184\";\n@fa-var-grav: \"\\f2d6\";\n@fa-var-group: \"\\f0c0\";\n@fa-var-h-square: \"\\f0fd\";\n@fa-var-hacker-news: \"\\f1d4\";\n@fa-var-hand-grab-o: \"\\f255\";\n@fa-var-hand-lizard-o: \"\\f258\";\n@fa-var-hand-o-down: \"\\f0a7\";\n@fa-var-hand-o-left: \"\\f0a5\";\n@fa-var-hand-o-right: \"\\f0a4\";\n@fa-var-hand-o-up: \"\\f0a6\";\n@fa-var-hand-paper-o: \"\\f256\";\n@fa-var-hand-peace-o: \"\\f25b\";\n@fa-var-hand-pointer-o: \"\\f25a\";\n@fa-var-hand-rock-o: \"\\f255\";\n@fa-var-hand-scissors-o: \"\\f257\";\n@fa-var-hand-spock-o: \"\\f259\";\n@fa-var-hand-stop-o: \"\\f256\";\n@fa-var-handshake-o: \"\\f2b5\";\n@fa-var-hard-of-hearing: \"\\f2a4\";\n@fa-var-hashtag: \"\\f292\";\n@fa-var-hdd-o: \"\\f0a0\";\n@fa-var-header: \"\\f1dc\";\n@fa-var-headphones: \"\\f025\";\n@fa-var-heart: \"\\f004\";\n@fa-var-heart-o: \"\\f08a\";\n@fa-var-heartbeat: \"\\f21e\";\n@fa-var-history: \"\\f1da\";\n@fa-var-home: \"\\f015\";\n@fa-var-hospital-o: \"\\f0f8\";\n@fa-var-hotel: \"\\f236\";\n@fa-var-hourglass: \"\\f254\";\n@fa-var-hourglass-1: \"\\f251\";\n@fa-var-hourglass-2: \"\\f252\";\n@fa-var-hourglass-3: \"\\f253\";\n@fa-var-hourglass-end: \"\\f253\";\n@fa-var-hourglass-half: \"\\f252\";\n@fa-var-hourglass-o: \"\\f250\";\n@fa-var-hourglass-start: \"\\f251\";\n@fa-var-houzz: \"\\f27c\";\n@fa-var-html5: \"\\f13b\";\n@fa-var-i-cursor: \"\\f246\";\n@fa-var-id-badge: \"\\f2c1\";\n@fa-var-id-card: \"\\f2c2\";\n@fa-var-id-card-o: \"\\f2c3\";\n@fa-var-ils: \"\\f20b\";\n@fa-var-image: \"\\f03e\";\n@fa-var-imdb: \"\\f2d8\";\n@fa-var-inbox: \"\\f01c\";\n@fa-var-indent: \"\\f03c\";\n@fa-var-industry: \"\\f275\";\n@fa-var-info: \"\\f129\";\n@fa-var-info-circle: \"\\f05a\";\n@fa-var-inr: \"\\f156\";\n@fa-var-instagram: \"\\f16d\";\n@fa-var-institution: \"\\f19c\";\n@fa-var-internet-explorer: \"\\f26b\";\n@fa-var-intersex: \"\\f224\";\n@fa-var-ioxhost: \"\\f208\";\n@fa-var-italic: \"\\f033\";\n@fa-var-joomla: \"\\f1aa\";\n@fa-var-jpy: \"\\f157\";\n@fa-var-jsfiddle: \"\\f1cc\";\n@fa-var-key: \"\\f084\";\n@fa-var-keyboard-o: \"\\f11c\";\n@fa-var-krw: \"\\f159\";\n@fa-var-language: \"\\f1ab\";\n@fa-var-laptop: \"\\f109\";\n@fa-var-lastfm: \"\\f202\";\n@fa-var-lastfm-square: \"\\f203\";\n@fa-var-leaf: \"\\f06c\";\n@fa-var-leanpub: \"\\f212\";\n@fa-var-legal: \"\\f0e3\";\n@fa-var-lemon-o: \"\\f094\";\n@fa-var-level-down: \"\\f149\";\n@fa-var-level-up: \"\\f148\";\n@fa-var-life-bouy: \"\\f1cd\";\n@fa-var-life-buoy: \"\\f1cd\";\n@fa-var-life-ring: \"\\f1cd\";\n@fa-var-life-saver: \"\\f1cd\";\n@fa-var-lightbulb-o: \"\\f0eb\";\n@fa-var-line-chart: \"\\f201\";\n@fa-var-link: \"\\f0c1\";\n@fa-var-linkedin: \"\\f0e1\";\n@fa-var-linkedin-square: \"\\f08c\";\n@fa-var-linode: \"\\f2b8\";\n@fa-var-linux: \"\\f17c\";\n@fa-var-list: \"\\f03a\";\n@fa-var-list-alt: \"\\f022\";\n@fa-var-list-ol: \"\\f0cb\";\n@fa-var-list-ul: \"\\f0ca\";\n@fa-var-location-arrow: \"\\f124\";\n@fa-var-lock: \"\\f023\";\n@fa-var-long-arrow-down: \"\\f175\";\n@fa-var-long-arrow-left: \"\\f177\";\n@fa-var-long-arrow-right: \"\\f178\";\n@fa-var-long-arrow-up: \"\\f176\";\n@fa-var-low-vision: \"\\f2a8\";\n@fa-var-magic: \"\\f0d0\";\n@fa-var-magnet: \"\\f076\";\n@fa-var-mail-forward: \"\\f064\";\n@fa-var-mail-reply: \"\\f112\";\n@fa-var-mail-reply-all: \"\\f122\";\n@fa-var-male: \"\\f183\";\n@fa-var-map: \"\\f279\";\n@fa-var-map-marker: \"\\f041\";\n@fa-var-map-o: \"\\f278\";\n@fa-var-map-pin: \"\\f276\";\n@fa-var-map-signs: \"\\f277\";\n@fa-var-mars: \"\\f222\";\n@fa-var-mars-double: \"\\f227\";\n@fa-var-mars-stroke: \"\\f229\";\n@fa-var-mars-stroke-h: \"\\f22b\";\n@fa-var-mars-stroke-v: \"\\f22a\";\n@fa-var-maxcdn: \"\\f136\";\n@fa-var-meanpath: \"\\f20c\";\n@fa-var-medium: \"\\f23a\";\n@fa-var-medkit: \"\\f0fa\";\n@fa-var-meetup: \"\\f2e0\";\n@fa-var-meh-o: \"\\f11a\";\n@fa-var-mercury: \"\\f223\";\n@fa-var-microchip: \"\\f2db\";\n@fa-var-microphone: \"\\f130\";\n@fa-var-microphone-slash: \"\\f131\";\n@fa-var-minus: \"\\f068\";\n@fa-var-minus-circle: \"\\f056\";\n@fa-var-minus-square: \"\\f146\";\n@fa-var-minus-square-o: \"\\f147\";\n@fa-var-mixcloud: \"\\f289\";\n@fa-var-mobile: \"\\f10b\";\n@fa-var-mobile-phone: \"\\f10b\";\n@fa-var-modx: \"\\f285\";\n@fa-var-money: \"\\f0d6\";\n@fa-var-moon-o: \"\\f186\";\n@fa-var-mortar-board: \"\\f19d\";\n@fa-var-motorcycle: \"\\f21c\";\n@fa-var-mouse-pointer: \"\\f245\";\n@fa-var-music: \"\\f001\";\n@fa-var-navicon: \"\\f0c9\";\n@fa-var-neuter: \"\\f22c\";\n@fa-var-newspaper-o: \"\\f1ea\";\n@fa-var-object-group: \"\\f247\";\n@fa-var-object-ungroup: \"\\f248\";\n@fa-var-odnoklassniki: \"\\f263\";\n@fa-var-odnoklassniki-square: \"\\f264\";\n@fa-var-opencart: \"\\f23d\";\n@fa-var-openid: \"\\f19b\";\n@fa-var-opera: \"\\f26a\";\n@fa-var-optin-monster: \"\\f23c\";\n@fa-var-outdent: \"\\f03b\";\n@fa-var-pagelines: \"\\f18c\";\n@fa-var-paint-brush: \"\\f1fc\";\n@fa-var-paper-plane: \"\\f1d8\";\n@fa-var-paper-plane-o: \"\\f1d9\";\n@fa-var-paperclip: \"\\f0c6\";\n@fa-var-paragraph: \"\\f1dd\";\n@fa-var-paste: \"\\f0ea\";\n@fa-var-pause: \"\\f04c\";\n@fa-var-pause-circle: \"\\f28b\";\n@fa-var-pause-circle-o: \"\\f28c\";\n@fa-var-paw: \"\\f1b0\";\n@fa-var-paypal: \"\\f1ed\";\n@fa-var-pencil: \"\\f040\";\n@fa-var-pencil-square: \"\\f14b\";\n@fa-var-pencil-square-o: \"\\f044\";\n@fa-var-percent: \"\\f295\";\n@fa-var-phone: \"\\f095\";\n@fa-var-phone-square: \"\\f098\";\n@fa-var-photo: \"\\f03e\";\n@fa-var-picture-o: \"\\f03e\";\n@fa-var-pie-chart: \"\\f200\";\n@fa-var-pied-piper: \"\\f2ae\";\n@fa-var-pied-piper-alt: \"\\f1a8\";\n@fa-var-pied-piper-pp: \"\\f1a7\";\n@fa-var-pinterest: \"\\f0d2\";\n@fa-var-pinterest-p: \"\\f231\";\n@fa-var-pinterest-square: \"\\f0d3\";\n@fa-var-plane: \"\\f072\";\n@fa-var-play: \"\\f04b\";\n@fa-var-play-circle: \"\\f144\";\n@fa-var-play-circle-o: \"\\f01d\";\n@fa-var-plug: \"\\f1e6\";\n@fa-var-plus: \"\\f067\";\n@fa-var-plus-circle: \"\\f055\";\n@fa-var-plus-square: \"\\f0fe\";\n@fa-var-plus-square-o: \"\\f196\";\n@fa-var-podcast: \"\\f2ce\";\n@fa-var-power-off: \"\\f011\";\n@fa-var-print: \"\\f02f\";\n@fa-var-product-hunt: \"\\f288\";\n@fa-var-puzzle-piece: \"\\f12e\";\n@fa-var-qq: \"\\f1d6\";\n@fa-var-qrcode: \"\\f029\";\n@fa-var-question: \"\\f128\";\n@fa-var-question-circle: \"\\f059\";\n@fa-var-question-circle-o: \"\\f29c\";\n@fa-var-quora: \"\\f2c4\";\n@fa-var-quote-left: \"\\f10d\";\n@fa-var-quote-right: \"\\f10e\";\n@fa-var-ra: \"\\f1d0\";\n@fa-var-random: \"\\f074\";\n@fa-var-ravelry: \"\\f2d9\";\n@fa-var-rebel: \"\\f1d0\";\n@fa-var-recycle: \"\\f1b8\";\n@fa-var-reddit: \"\\f1a1\";\n@fa-var-reddit-alien: \"\\f281\";\n@fa-var-reddit-square: \"\\f1a2\";\n@fa-var-refresh: \"\\f021\";\n@fa-var-registered: \"\\f25d\";\n@fa-var-remove: \"\\f00d\";\n@fa-var-renren: \"\\f18b\";\n@fa-var-reorder: \"\\f0c9\";\n@fa-var-repeat: \"\\f01e\";\n@fa-var-reply: \"\\f112\";\n@fa-var-reply-all: \"\\f122\";\n@fa-var-resistance: \"\\f1d0\";\n@fa-var-retweet: \"\\f079\";\n@fa-var-rmb: \"\\f157\";\n@fa-var-road: \"\\f018\";\n@fa-var-rocket: \"\\f135\";\n@fa-var-rotate-left: \"\\f0e2\";\n@fa-var-rotate-right: \"\\f01e\";\n@fa-var-rouble: \"\\f158\";\n@fa-var-rss: \"\\f09e\";\n@fa-var-rss-square: \"\\f143\";\n@fa-var-rub: \"\\f158\";\n@fa-var-ruble: \"\\f158\";\n@fa-var-rupee: \"\\f156\";\n@fa-var-s15: \"\\f2cd\";\n@fa-var-safari: \"\\f267\";\n@fa-var-save: \"\\f0c7\";\n@fa-var-scissors: \"\\f0c4\";\n@fa-var-scribd: \"\\f28a\";\n@fa-var-search: \"\\f002\";\n@fa-var-search-minus: \"\\f010\";\n@fa-var-search-plus: \"\\f00e\";\n@fa-var-sellsy: \"\\f213\";\n@fa-var-send: \"\\f1d8\";\n@fa-var-send-o: \"\\f1d9\";\n@fa-var-server: \"\\f233\";\n@fa-var-share: \"\\f064\";\n@fa-var-share-alt: \"\\f1e0\";\n@fa-var-share-alt-square: \"\\f1e1\";\n@fa-var-share-square: \"\\f14d\";\n@fa-var-share-square-o: \"\\f045\";\n@fa-var-shekel: \"\\f20b\";\n@fa-var-sheqel: \"\\f20b\";\n@fa-var-shield: \"\\f132\";\n@fa-var-ship: \"\\f21a\";\n@fa-var-shirtsinbulk: \"\\f214\";\n@fa-var-shopping-bag: \"\\f290\";\n@fa-var-shopping-basket: \"\\f291\";\n@fa-var-shopping-cart: \"\\f07a\";\n@fa-var-shower: \"\\f2cc\";\n@fa-var-sign-in: \"\\f090\";\n@fa-var-sign-language: \"\\f2a7\";\n@fa-var-sign-out: \"\\f08b\";\n@fa-var-signal: \"\\f012\";\n@fa-var-signing: \"\\f2a7\";\n@fa-var-simplybuilt: \"\\f215\";\n@fa-var-sitemap: \"\\f0e8\";\n@fa-var-skyatlas: \"\\f216\";\n@fa-var-skype: \"\\f17e\";\n@fa-var-slack: \"\\f198\";\n@fa-var-sliders: \"\\f1de\";\n@fa-var-slideshare: \"\\f1e7\";\n@fa-var-smile-o: \"\\f118\";\n@fa-var-snapchat: \"\\f2ab\";\n@fa-var-snapchat-ghost: \"\\f2ac\";\n@fa-var-snapchat-square: \"\\f2ad\";\n@fa-var-snowflake-o: \"\\f2dc\";\n@fa-var-soccer-ball-o: \"\\f1e3\";\n@fa-var-sort: \"\\f0dc\";\n@fa-var-sort-alpha-asc: \"\\f15d\";\n@fa-var-sort-alpha-desc: \"\\f15e\";\n@fa-var-sort-amount-asc: \"\\f160\";\n@fa-var-sort-amount-desc: \"\\f161\";\n@fa-var-sort-asc: \"\\f0de\";\n@fa-var-sort-desc: \"\\f0dd\";\n@fa-var-sort-down: \"\\f0dd\";\n@fa-var-sort-numeric-asc: \"\\f162\";\n@fa-var-sort-numeric-desc: \"\\f163\";\n@fa-var-sort-up: \"\\f0de\";\n@fa-var-soundcloud: \"\\f1be\";\n@fa-var-space-shuttle: \"\\f197\";\n@fa-var-spinner: \"\\f110\";\n@fa-var-spoon: \"\\f1b1\";\n@fa-var-spotify: \"\\f1bc\";\n@fa-var-square: \"\\f0c8\";\n@fa-var-square-o: \"\\f096\";\n@fa-var-stack-exchange: \"\\f18d\";\n@fa-var-stack-overflow: \"\\f16c\";\n@fa-var-star: \"\\f005\";\n@fa-var-star-half: \"\\f089\";\n@fa-var-star-half-empty: \"\\f123\";\n@fa-var-star-half-full: \"\\f123\";\n@fa-var-star-half-o: \"\\f123\";\n@fa-var-star-o: \"\\f006\";\n@fa-var-steam: \"\\f1b6\";\n@fa-var-steam-square: \"\\f1b7\";\n@fa-var-step-backward: \"\\f048\";\n@fa-var-step-forward: \"\\f051\";\n@fa-var-stethoscope: \"\\f0f1\";\n@fa-var-sticky-note: \"\\f249\";\n@fa-var-sticky-note-o: \"\\f24a\";\n@fa-var-stop: \"\\f04d\";\n@fa-var-stop-circle: \"\\f28d\";\n@fa-var-stop-circle-o: \"\\f28e\";\n@fa-var-street-view: \"\\f21d\";\n@fa-var-strikethrough: \"\\f0cc\";\n@fa-var-stumbleupon: \"\\f1a4\";\n@fa-var-stumbleupon-circle: \"\\f1a3\";\n@fa-var-subscript: \"\\f12c\";\n@fa-var-subway: \"\\f239\";\n@fa-var-suitcase: \"\\f0f2\";\n@fa-var-sun-o: \"\\f185\";\n@fa-var-superpowers: \"\\f2dd\";\n@fa-var-superscript: \"\\f12b\";\n@fa-var-support: \"\\f1cd\";\n@fa-var-table: \"\\f0ce\";\n@fa-var-tablet: \"\\f10a\";\n@fa-var-tachometer: \"\\f0e4\";\n@fa-var-tag: \"\\f02b\";\n@fa-var-tags: \"\\f02c\";\n@fa-var-tasks: \"\\f0ae\";\n@fa-var-taxi: \"\\f1ba\";\n@fa-var-telegram: \"\\f2c6\";\n@fa-var-television: \"\\f26c\";\n@fa-var-tencent-weibo: \"\\f1d5\";\n@fa-var-terminal: \"\\f120\";\n@fa-var-text-height: \"\\f034\";\n@fa-var-text-width: \"\\f035\";\n@fa-var-th: \"\\f00a\";\n@fa-var-th-large: \"\\f009\";\n@fa-var-th-list: \"\\f00b\";\n@fa-var-themeisle: \"\\f2b2\";\n@fa-var-thermometer: \"\\f2c7\";\n@fa-var-thermometer-0: \"\\f2cb\";\n@fa-var-thermometer-1: \"\\f2ca\";\n@fa-var-thermometer-2: \"\\f2c9\";\n@fa-var-thermometer-3: \"\\f2c8\";\n@fa-var-thermometer-4: \"\\f2c7\";\n@fa-var-thermometer-empty: \"\\f2cb\";\n@fa-var-thermometer-full: \"\\f2c7\";\n@fa-var-thermometer-half: \"\\f2c9\";\n@fa-var-thermometer-quarter: \"\\f2ca\";\n@fa-var-thermometer-three-quarters: \"\\f2c8\";\n@fa-var-thumb-tack: \"\\f08d\";\n@fa-var-thumbs-down: \"\\f165\";\n@fa-var-thumbs-o-down: \"\\f088\";\n@fa-var-thumbs-o-up: \"\\f087\";\n@fa-var-thumbs-up: \"\\f164\";\n@fa-var-ticket: \"\\f145\";\n@fa-var-times: \"\\f00d\";\n@fa-var-times-circle: \"\\f057\";\n@fa-var-times-circle-o: \"\\f05c\";\n@fa-var-times-rectangle: \"\\f2d3\";\n@fa-var-times-rectangle-o: \"\\f2d4\";\n@fa-var-tint: \"\\f043\";\n@fa-var-toggle-down: \"\\f150\";\n@fa-var-toggle-left: \"\\f191\";\n@fa-var-toggle-off: \"\\f204\";\n@fa-var-toggle-on: \"\\f205\";\n@fa-var-toggle-right: \"\\f152\";\n@fa-var-toggle-up: \"\\f151\";\n@fa-var-trademark: \"\\f25c\";\n@fa-var-train: \"\\f238\";\n@fa-var-transgender: \"\\f224\";\n@fa-var-transgender-alt: \"\\f225\";\n@fa-var-trash: \"\\f1f8\";\n@fa-var-trash-o: \"\\f014\";\n@fa-var-tree: \"\\f1bb\";\n@fa-var-trello: \"\\f181\";\n@fa-var-tripadvisor: \"\\f262\";\n@fa-var-trophy: \"\\f091\";\n@fa-var-truck: \"\\f0d1\";\n@fa-var-try: \"\\f195\";\n@fa-var-tty: \"\\f1e4\";\n@fa-var-tumblr: \"\\f173\";\n@fa-var-tumblr-square: \"\\f174\";\n@fa-var-turkish-lira: \"\\f195\";\n@fa-var-tv: \"\\f26c\";\n@fa-var-twitch: \"\\f1e8\";\n@fa-var-twitter: \"\\f099\";\n@fa-var-twitter-square: \"\\f081\";\n@fa-var-umbrella: \"\\f0e9\";\n@fa-var-underline: \"\\f0cd\";\n@fa-var-undo: \"\\f0e2\";\n@fa-var-universal-access: \"\\f29a\";\n@fa-var-university: \"\\f19c\";\n@fa-var-unlink: \"\\f127\";\n@fa-var-unlock: \"\\f09c\";\n@fa-var-unlock-alt: \"\\f13e\";\n@fa-var-unsorted: \"\\f0dc\";\n@fa-var-upload: \"\\f093\";\n@fa-var-usb: \"\\f287\";\n@fa-var-usd: \"\\f155\";\n@fa-var-user: \"\\f007\";\n@fa-var-user-circle: \"\\f2bd\";\n@fa-var-user-circle-o: \"\\f2be\";\n@fa-var-user-md: \"\\f0f0\";\n@fa-var-user-o: \"\\f2c0\";\n@fa-var-user-plus: \"\\f234\";\n@fa-var-user-secret: \"\\f21b\";\n@fa-var-user-times: \"\\f235\";\n@fa-var-users: \"\\f0c0\";\n@fa-var-vcard: \"\\f2bb\";\n@fa-var-vcard-o: \"\\f2bc\";\n@fa-var-venus: \"\\f221\";\n@fa-var-venus-double: \"\\f226\";\n@fa-var-venus-mars: \"\\f228\";\n@fa-var-viacoin: \"\\f237\";\n@fa-var-viadeo: \"\\f2a9\";\n@fa-var-viadeo-square: \"\\f2aa\";\n@fa-var-video-camera: \"\\f03d\";\n@fa-var-vimeo: \"\\f27d\";\n@fa-var-vimeo-square: \"\\f194\";\n@fa-var-vine: \"\\f1ca\";\n@fa-var-vk: \"\\f189\";\n@fa-var-volume-control-phone: \"\\f2a0\";\n@fa-var-volume-down: \"\\f027\";\n@fa-var-volume-off: \"\\f026\";\n@fa-var-volume-up: \"\\f028\";\n@fa-var-warning: \"\\f071\";\n@fa-var-wechat: \"\\f1d7\";\n@fa-var-weibo: \"\\f18a\";\n@fa-var-weixin: \"\\f1d7\";\n@fa-var-whatsapp: \"\\f232\";\n@fa-var-wheelchair: \"\\f193\";\n@fa-var-wheelchair-alt: \"\\f29b\";\n@fa-var-wifi: \"\\f1eb\";\n@fa-var-wikipedia-w: \"\\f266\";\n@fa-var-window-close: \"\\f2d3\";\n@fa-var-window-close-o: \"\\f2d4\";\n@fa-var-window-maximize: \"\\f2d0\";\n@fa-var-window-minimize: \"\\f2d1\";\n@fa-var-window-restore: \"\\f2d2\";\n@fa-var-windows: \"\\f17a\";\n@fa-var-won: \"\\f159\";\n@fa-var-wordpress: \"\\f19a\";\n@fa-var-wpbeginner: \"\\f297\";\n@fa-var-wpexplorer: \"\\f2de\";\n@fa-var-wpforms: \"\\f298\";\n@fa-var-wrench: \"\\f0ad\";\n@fa-var-xing: \"\\f168\";\n@fa-var-xing-square: \"\\f169\";\n@fa-var-y-combinator: \"\\f23b\";\n@fa-var-y-combinator-square: \"\\f1d4\";\n@fa-var-yahoo: \"\\f19e\";\n@fa-var-yc: \"\\f23b\";\n@fa-var-yc-square: \"\\f1d4\";\n@fa-var-yelp: \"\\f1e9\";\n@fa-var-yen: \"\\f157\";\n@fa-var-yoast: \"\\f2b1\";\n@fa-var-youtube: \"\\f167\";\n@fa-var-youtube-play: \"\\f16a\";\n@fa-var-youtube-square: \"\\f166\";\n\n"
  },
  {
    "path": "public/frontend/plugins/font-awesome/scss/_animated.scss",
    "content": "// Spinning Icons\n// --------------------------\n\n.#{$fa-css-prefix}-spin {\n  -webkit-animation: fa-spin 2s infinite linear;\n          animation: fa-spin 2s infinite linear;\n}\n\n.#{$fa-css-prefix}-pulse {\n  -webkit-animation: fa-spin 1s infinite steps(8);\n          animation: fa-spin 1s infinite steps(8);\n}\n\n@-webkit-keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(359deg);\n            transform: rotate(359deg);\n  }\n}\n\n@keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(359deg);\n            transform: rotate(359deg);\n  }\n}\n"
  },
  {
    "path": "public/frontend/plugins/font-awesome/scss/_bordered-pulled.scss",
    "content": "// Bordered & Pulled\n// -------------------------\n\n.#{$fa-css-prefix}-border {\n  padding: .2em .25em .15em;\n  border: solid .08em $fa-border-color;\n  border-radius: .1em;\n}\n\n.#{$fa-css-prefix}-pull-left { float: left; }\n.#{$fa-css-prefix}-pull-right { float: right; }\n\n.#{$fa-css-prefix} {\n  &.#{$fa-css-prefix}-pull-left { margin-right: .3em; }\n  &.#{$fa-css-prefix}-pull-right { margin-left: .3em; }\n}\n\n/* Deprecated as of 4.4.0 */\n.pull-right { float: right; }\n.pull-left { float: left; }\n\n.#{$fa-css-prefix} {\n  &.pull-left { margin-right: .3em; }\n  &.pull-right { margin-left: .3em; }\n}\n"
  },
  {
    "path": "public/frontend/plugins/font-awesome/scss/_core.scss",
    "content": "// Base Class Definition\n// -------------------------\n\n.#{$fa-css-prefix} {\n  display: inline-block;\n  font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration\n  font-size: inherit; // can't have font-size inherit on line above, so need to override\n  text-rendering: auto; // optimizelegibility throws things off #1094\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n\n}\n"
  },
  {
    "path": "public/frontend/plugins/font-awesome/scss/_fixed-width.scss",
    "content": "// Fixed Width Icons\n// -------------------------\n.#{$fa-css-prefix}-fw {\n  width: (18em / 14);\n  text-align: center;\n}\n"
  },
  {
    "path": "public/frontend/plugins/font-awesome/scss/_icons.scss",
    "content": "/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen\n   readers do not read off random characters that represent icons */\n\n.#{$fa-css-prefix}-glass:before { content: $fa-var-glass; }\n.#{$fa-css-prefix}-music:before { content: $fa-var-music; }\n.#{$fa-css-prefix}-search:before { content: $fa-var-search; }\n.#{$fa-css-prefix}-envelope-o:before { content: $fa-var-envelope-o; }\n.#{$fa-css-prefix}-heart:before { content: $fa-var-heart; }\n.#{$fa-css-prefix}-star:before { content: $fa-var-star; }\n.#{$fa-css-prefix}-star-o:before { content: $fa-var-star-o; }\n.#{$fa-css-prefix}-user:before { content: $fa-var-user; }\n.#{$fa-css-prefix}-film:before { content: $fa-var-film; }\n.#{$fa-css-prefix}-th-large:before { content: $fa-var-th-large; }\n.#{$fa-css-prefix}-th:before { content: $fa-var-th; }\n.#{$fa-css-prefix}-th-list:before { content: $fa-var-th-list; }\n.#{$fa-css-prefix}-check:before { content: $fa-var-check; }\n.#{$fa-css-prefix}-remove:before,\n.#{$fa-css-prefix}-close:before,\n.#{$fa-css-prefix}-times:before { content: $fa-var-times; }\n.#{$fa-css-prefix}-search-plus:before { content: $fa-var-search-plus; }\n.#{$fa-css-prefix}-search-minus:before { content: $fa-var-search-minus; }\n.#{$fa-css-prefix}-power-off:before { content: $fa-var-power-off; }\n.#{$fa-css-prefix}-signal:before { content: $fa-var-signal; }\n.#{$fa-css-prefix}-gear:before,\n.#{$fa-css-prefix}-cog:before { content: $fa-var-cog; }\n.#{$fa-css-prefix}-trash-o:before { content: $fa-var-trash-o; }\n.#{$fa-css-prefix}-home:before { content: $fa-var-home; }\n.#{$fa-css-prefix}-file-o:before { content: $fa-var-file-o; }\n.#{$fa-css-prefix}-clock-o:before { content: $fa-var-clock-o; }\n.#{$fa-css-prefix}-road:before { content: $fa-var-road; }\n.#{$fa-css-prefix}-download:before { content: $fa-var-download; }\n.#{$fa-css-prefix}-arrow-circle-o-down:before { content: $fa-var-arrow-circle-o-down; }\n.#{$fa-css-prefix}-arrow-circle-o-up:before { content: $fa-var-arrow-circle-o-up; }\n.#{$fa-css-prefix}-inbox:before { content: $fa-var-inbox; }\n.#{$fa-css-prefix}-play-circle-o:before { content: $fa-var-play-circle-o; }\n.#{$fa-css-prefix}-rotate-right:before,\n.#{$fa-css-prefix}-repeat:before { content: $fa-var-repeat; }\n.#{$fa-css-prefix}-refresh:before { content: $fa-var-refresh; }\n.#{$fa-css-prefix}-list-alt:before { content: $fa-var-list-alt; }\n.#{$fa-css-prefix}-lock:before { content: $fa-var-lock; }\n.#{$fa-css-prefix}-flag:before { content: $fa-var-flag; }\n.#{$fa-css-prefix}-headphones:before { content: $fa-var-headphones; }\n.#{$fa-css-prefix}-volume-off:before { content: $fa-var-volume-off; }\n.#{$fa-css-prefix}-volume-down:before { content: $fa-var-volume-down; }\n.#{$fa-css-prefix}-volume-up:before { content: $fa-var-volume-up; }\n.#{$fa-css-prefix}-qrcode:before { content: $fa-var-qrcode; }\n.#{$fa-css-prefix}-barcode:before { content: $fa-var-barcode; }\n.#{$fa-css-prefix}-tag:before { content: $fa-var-tag; }\n.#{$fa-css-prefix}-tags:before { content: $fa-var-tags; }\n.#{$fa-css-prefix}-book:before { content: $fa-var-book; }\n.#{$fa-css-prefix}-bookmark:before { content: $fa-var-bookmark; }\n.#{$fa-css-prefix}-print:before { content: $fa-var-print; }\n.#{$fa-css-prefix}-camera:before { content: $fa-var-camera; }\n.#{$fa-css-prefix}-font:before { content: $fa-var-font; }\n.#{$fa-css-prefix}-bold:before { content: $fa-var-bold; }\n.#{$fa-css-prefix}-italic:before { content: $fa-var-italic; }\n.#{$fa-css-prefix}-text-height:before { content: $fa-var-text-height; }\n.#{$fa-css-prefix}-text-width:before { content: $fa-var-text-width; }\n.#{$fa-css-prefix}-align-left:before { content: $fa-var-align-left; }\n.#{$fa-css-prefix}-align-center:before { content: $fa-var-align-center; }\n.#{$fa-css-prefix}-align-right:before { content: $fa-var-align-right; }\n.#{$fa-css-prefix}-align-justify:before { content: $fa-var-align-justify; }\n.#{$fa-css-prefix}-list:before { content: $fa-var-list; }\n.#{$fa-css-prefix}-dedent:before,\n.#{$fa-css-prefix}-outdent:before { content: $fa-var-outdent; }\n.#{$fa-css-prefix}-indent:before { content: $fa-var-indent; }\n.#{$fa-css-prefix}-video-camera:before { content: $fa-var-video-camera; }\n.#{$fa-css-prefix}-photo:before,\n.#{$fa-css-prefix}-image:before,\n.#{$fa-css-prefix}-picture-o:before { content: $fa-var-picture-o; }\n.#{$fa-css-prefix}-pencil:before { content: $fa-var-pencil; }\n.#{$fa-css-prefix}-map-marker:before { content: $fa-var-map-marker; }\n.#{$fa-css-prefix}-adjust:before { content: $fa-var-adjust; }\n.#{$fa-css-prefix}-tint:before { content: $fa-var-tint; }\n.#{$fa-css-prefix}-edit:before,\n.#{$fa-css-prefix}-pencil-square-o:before { content: $fa-var-pencil-square-o; }\n.#{$fa-css-prefix}-share-square-o:before { content: $fa-var-share-square-o; }\n.#{$fa-css-prefix}-check-square-o:before { content: $fa-var-check-square-o; }\n.#{$fa-css-prefix}-arrows:before { content: $fa-var-arrows; }\n.#{$fa-css-prefix}-step-backward:before { content: $fa-var-step-backward; }\n.#{$fa-css-prefix}-fast-backward:before { content: $fa-var-fast-backward; }\n.#{$fa-css-prefix}-backward:before { content: $fa-var-backward; }\n.#{$fa-css-prefix}-play:before { content: $fa-var-play; }\n.#{$fa-css-prefix}-pause:before { content: $fa-var-pause; }\n.#{$fa-css-prefix}-stop:before { content: $fa-var-stop; }\n.#{$fa-css-prefix}-forward:before { content: $fa-var-forward; }\n.#{$fa-css-prefix}-fast-forward:before { content: $fa-var-fast-forward; }\n.#{$fa-css-prefix}-step-forward:before { content: $fa-var-step-forward; }\n.#{$fa-css-prefix}-eject:before { content: $fa-var-eject; }\n.#{$fa-css-prefix}-chevron-left:before { content: $fa-var-chevron-left; }\n.#{$fa-css-prefix}-chevron-right:before { content: $fa-var-chevron-right; }\n.#{$fa-css-prefix}-plus-circle:before { content: $fa-var-plus-circle; }\n.#{$fa-css-prefix}-minus-circle:before { content: $fa-var-minus-circle; }\n.#{$fa-css-prefix}-times-circle:before { content: $fa-var-times-circle; }\n.#{$fa-css-prefix}-check-circle:before { content: $fa-var-check-circle; }\n.#{$fa-css-prefix}-question-circle:before { content: $fa-var-question-circle; }\n.#{$fa-css-prefix}-info-circle:before { content: $fa-var-info-circle; }\n.#{$fa-css-prefix}-crosshairs:before { content: $fa-var-crosshairs; }\n.#{$fa-css-prefix}-times-circle-o:before { content: $fa-var-times-circle-o; }\n.#{$fa-css-prefix}-check-circle-o:before { content: $fa-var-check-circle-o; }\n.#{$fa-css-prefix}-ban:before { content: $fa-var-ban; }\n.#{$fa-css-prefix}-arrow-left:before { content: $fa-var-arrow-left; }\n.#{$fa-css-prefix}-arrow-right:before { content: $fa-var-arrow-right; }\n.#{$fa-css-prefix}-arrow-up:before { content: $fa-var-arrow-up; }\n.#{$fa-css-prefix}-arrow-down:before { content: $fa-var-arrow-down; }\n.#{$fa-css-prefix}-mail-forward:before,\n.#{$fa-css-prefix}-share:before { content: $fa-var-share; }\n.#{$fa-css-prefix}-expand:before { content: $fa-var-expand; }\n.#{$fa-css-prefix}-compress:before { content: $fa-var-compress; }\n.#{$fa-css-prefix}-plus:before { content: $fa-var-plus; }\n.#{$fa-css-prefix}-minus:before { content: $fa-var-minus; }\n.#{$fa-css-prefix}-asterisk:before { content: $fa-var-asterisk; }\n.#{$fa-css-prefix}-exclamation-circle:before { content: $fa-var-exclamation-circle; }\n.#{$fa-css-prefix}-gift:before { content: $fa-var-gift; }\n.#{$fa-css-prefix}-leaf:before { content: $fa-var-leaf; }\n.#{$fa-css-prefix}-fire:before { content: $fa-var-fire; }\n.#{$fa-css-prefix}-eye:before { content: $fa-var-eye; }\n.#{$fa-css-prefix}-eye-slash:before { content: $fa-var-eye-slash; }\n.#{$fa-css-prefix}-warning:before,\n.#{$fa-css-prefix}-exclamation-triangle:before { content: $fa-var-exclamation-triangle; }\n.#{$fa-css-prefix}-plane:before { content: $fa-var-plane; }\n.#{$fa-css-prefix}-calendar:before { content: $fa-var-calendar; }\n.#{$fa-css-prefix}-random:before { content: $fa-var-random; }\n.#{$fa-css-prefix}-comment:before { content: $fa-var-comment; }\n.#{$fa-css-prefix}-magnet:before { content: $fa-var-magnet; }\n.#{$fa-css-prefix}-chevron-up:before { content: $fa-var-chevron-up; }\n.#{$fa-css-prefix}-chevron-down:before { content: $fa-var-chevron-down; }\n.#{$fa-css-prefix}-retweet:before { content: $fa-var-retweet; }\n.#{$fa-css-prefix}-shopping-cart:before { content: $fa-var-shopping-cart; }\n.#{$fa-css-prefix}-folder:before { content: $fa-var-folder; }\n.#{$fa-css-prefix}-folder-open:before { content: $fa-var-folder-open; }\n.#{$fa-css-prefix}-arrows-v:before { content: $fa-var-arrows-v; }\n.#{$fa-css-prefix}-arrows-h:before { content: $fa-var-arrows-h; }\n.#{$fa-css-prefix}-bar-chart-o:before,\n.#{$fa-css-prefix}-bar-chart:before { content: $fa-var-bar-chart; }\n.#{$fa-css-prefix}-twitter-square:before { content: $fa-var-twitter-square; }\n.#{$fa-css-prefix}-facebook-square:before { content: $fa-var-facebook-square; }\n.#{$fa-css-prefix}-camera-retro:before { content: $fa-var-camera-retro; }\n.#{$fa-css-prefix}-key:before { content: $fa-var-key; }\n.#{$fa-css-prefix}-gears:before,\n.#{$fa-css-prefix}-cogs:before { content: $fa-var-cogs; }\n.#{$fa-css-prefix}-comments:before { content: $fa-var-comments; }\n.#{$fa-css-prefix}-thumbs-o-up:before { content: $fa-var-thumbs-o-up; }\n.#{$fa-css-prefix}-thumbs-o-down:before { content: $fa-var-thumbs-o-down; }\n.#{$fa-css-prefix}-star-half:before { content: $fa-var-star-half; }\n.#{$fa-css-prefix}-heart-o:before { content: $fa-var-heart-o; }\n.#{$fa-css-prefix}-sign-out:before { content: $fa-var-sign-out; }\n.#{$fa-css-prefix}-linkedin-square:before { content: $fa-var-linkedin-square; }\n.#{$fa-css-prefix}-thumb-tack:before { content: $fa-var-thumb-tack; }\n.#{$fa-css-prefix}-external-link:before { content: $fa-var-external-link; }\n.#{$fa-css-prefix}-sign-in:before { content: $fa-var-sign-in; }\n.#{$fa-css-prefix}-trophy:before { content: $fa-var-trophy; }\n.#{$fa-css-prefix}-github-square:before { content: $fa-var-github-square; }\n.#{$fa-css-prefix}-upload:before { content: $fa-var-upload; }\n.#{$fa-css-prefix}-lemon-o:before { content: $fa-var-lemon-o; }\n.#{$fa-css-prefix}-phone:before { content: $fa-var-phone; }\n.#{$fa-css-prefix}-square-o:before { content: $fa-var-square-o; }\n.#{$fa-css-prefix}-bookmark-o:before { content: $fa-var-bookmark-o; }\n.#{$fa-css-prefix}-phone-square:before { content: $fa-var-phone-square; }\n.#{$fa-css-prefix}-twitter:before { content: $fa-var-twitter; }\n.#{$fa-css-prefix}-facebook-f:before,\n.#{$fa-css-prefix}-facebook:before { content: $fa-var-facebook; }\n.#{$fa-css-prefix}-github:before { content: $fa-var-github; }\n.#{$fa-css-prefix}-unlock:before { content: $fa-var-unlock; }\n.#{$fa-css-prefix}-credit-card:before { content: $fa-var-credit-card; }\n.#{$fa-css-prefix}-feed:before,\n.#{$fa-css-prefix}-rss:before { content: $fa-var-rss; }\n.#{$fa-css-prefix}-hdd-o:before { content: $fa-var-hdd-o; }\n.#{$fa-css-prefix}-bullhorn:before { content: $fa-var-bullhorn; }\n.#{$fa-css-prefix}-bell:before { content: $fa-var-bell; }\n.#{$fa-css-prefix}-certificate:before { content: $fa-var-certificate; }\n.#{$fa-css-prefix}-hand-o-right:before { content: $fa-var-hand-o-right; }\n.#{$fa-css-prefix}-hand-o-left:before { content: $fa-var-hand-o-left; }\n.#{$fa-css-prefix}-hand-o-up:before { content: $fa-var-hand-o-up; }\n.#{$fa-css-prefix}-hand-o-down:before { content: $fa-var-hand-o-down; }\n.#{$fa-css-prefix}-arrow-circle-left:before { content: $fa-var-arrow-circle-left; }\n.#{$fa-css-prefix}-arrow-circle-right:before { content: $fa-var-arrow-circle-right; }\n.#{$fa-css-prefix}-arrow-circle-up:before { content: $fa-var-arrow-circle-up; }\n.#{$fa-css-prefix}-arrow-circle-down:before { content: $fa-var-arrow-circle-down; }\n.#{$fa-css-prefix}-globe:before { content: $fa-var-globe; }\n.#{$fa-css-prefix}-wrench:before { content: $fa-var-wrench; }\n.#{$fa-css-prefix}-tasks:before { content: $fa-var-tasks; }\n.#{$fa-css-prefix}-filter:before { content: $fa-var-filter; }\n.#{$fa-css-prefix}-briefcase:before { content: $fa-var-briefcase; }\n.#{$fa-css-prefix}-arrows-alt:before { content: $fa-var-arrows-alt; }\n.#{$fa-css-prefix}-group:before,\n.#{$fa-css-prefix}-users:before { content: $fa-var-users; }\n.#{$fa-css-prefix}-chain:before,\n.#{$fa-css-prefix}-link:before { content: $fa-var-link; }\n.#{$fa-css-prefix}-cloud:before { content: $fa-var-cloud; }\n.#{$fa-css-prefix}-flask:before { content: $fa-var-flask; }\n.#{$fa-css-prefix}-cut:before,\n.#{$fa-css-prefix}-scissors:before { content: $fa-var-scissors; }\n.#{$fa-css-prefix}-copy:before,\n.#{$fa-css-prefix}-files-o:before { content: $fa-var-files-o; }\n.#{$fa-css-prefix}-paperclip:before { content: $fa-var-paperclip; }\n.#{$fa-css-prefix}-save:before,\n.#{$fa-css-prefix}-floppy-o:before { content: $fa-var-floppy-o; }\n.#{$fa-css-prefix}-square:before { content: $fa-var-square; }\n.#{$fa-css-prefix}-navicon:before,\n.#{$fa-css-prefix}-reorder:before,\n.#{$fa-css-prefix}-bars:before { content: $fa-var-bars; }\n.#{$fa-css-prefix}-list-ul:before { content: $fa-var-list-ul; }\n.#{$fa-css-prefix}-list-ol:before { content: $fa-var-list-ol; }\n.#{$fa-css-prefix}-strikethrough:before { content: $fa-var-strikethrough; }\n.#{$fa-css-prefix}-underline:before { content: $fa-var-underline; }\n.#{$fa-css-prefix}-table:before { content: $fa-var-table; }\n.#{$fa-css-prefix}-magic:before { content: $fa-var-magic; }\n.#{$fa-css-prefix}-truck:before { content: $fa-var-truck; }\n.#{$fa-css-prefix}-pinterest:before { content: $fa-var-pinterest; }\n.#{$fa-css-prefix}-pinterest-square:before { content: $fa-var-pinterest-square; }\n.#{$fa-css-prefix}-google-plus-square:before { content: $fa-var-google-plus-square; }\n.#{$fa-css-prefix}-google-plus:before { content: $fa-var-google-plus; }\n.#{$fa-css-prefix}-money:before { content: $fa-var-money; }\n.#{$fa-css-prefix}-caret-down:before { content: $fa-var-caret-down; }\n.#{$fa-css-prefix}-caret-up:before { content: $fa-var-caret-up; }\n.#{$fa-css-prefix}-caret-left:before { content: $fa-var-caret-left; }\n.#{$fa-css-prefix}-caret-right:before { content: $fa-var-caret-right; }\n.#{$fa-css-prefix}-columns:before { content: $fa-var-columns; }\n.#{$fa-css-prefix}-unsorted:before,\n.#{$fa-css-prefix}-sort:before { content: $fa-var-sort; }\n.#{$fa-css-prefix}-sort-down:before,\n.#{$fa-css-prefix}-sort-desc:before { content: $fa-var-sort-desc; }\n.#{$fa-css-prefix}-sort-up:before,\n.#{$fa-css-prefix}-sort-asc:before { content: $fa-var-sort-asc; }\n.#{$fa-css-prefix}-envelope:before { content: $fa-var-envelope; }\n.#{$fa-css-prefix}-linkedin:before { content: $fa-var-linkedin; }\n.#{$fa-css-prefix}-rotate-left:before,\n.#{$fa-css-prefix}-undo:before { content: $fa-var-undo; }\n.#{$fa-css-prefix}-legal:before,\n.#{$fa-css-prefix}-gavel:before { content: $fa-var-gavel; }\n.#{$fa-css-prefix}-dashboard:before,\n.#{$fa-css-prefix}-tachometer:before { content: $fa-var-tachometer; }\n.#{$fa-css-prefix}-comment-o:before { content: $fa-var-comment-o; }\n.#{$fa-css-prefix}-comments-o:before { content: $fa-var-comments-o; }\n.#{$fa-css-prefix}-flash:before,\n.#{$fa-css-prefix}-bolt:before { content: $fa-var-bolt; }\n.#{$fa-css-prefix}-sitemap:before { content: $fa-var-sitemap; }\n.#{$fa-css-prefix}-umbrella:before { content: $fa-var-umbrella; }\n.#{$fa-css-prefix}-paste:before,\n.#{$fa-css-prefix}-clipboard:before { content: $fa-var-clipboard; }\n.#{$fa-css-prefix}-lightbulb-o:before { content: $fa-var-lightbulb-o; }\n.#{$fa-css-prefix}-exchange:before { content: $fa-var-exchange; }\n.#{$fa-css-prefix}-cloud-download:before { content: $fa-var-cloud-download; }\n.#{$fa-css-prefix}-cloud-upload:before { content: $fa-var-cloud-upload; }\n.#{$fa-css-prefix}-user-md:before { content: $fa-var-user-md; }\n.#{$fa-css-prefix}-stethoscope:before { content: $fa-var-stethoscope; }\n.#{$fa-css-prefix}-suitcase:before { content: $fa-var-suitcase; }\n.#{$fa-css-prefix}-bell-o:before { content: $fa-var-bell-o; }\n.#{$fa-css-prefix}-coffee:before { content: $fa-var-coffee; }\n.#{$fa-css-prefix}-cutlery:before { content: $fa-var-cutlery; }\n.#{$fa-css-prefix}-file-text-o:before { content: $fa-var-file-text-o; }\n.#{$fa-css-prefix}-building-o:before { content: $fa-var-building-o; }\n.#{$fa-css-prefix}-hospital-o:before { content: $fa-var-hospital-o; }\n.#{$fa-css-prefix}-ambulance:before { content: $fa-var-ambulance; }\n.#{$fa-css-prefix}-medkit:before { content: $fa-var-medkit; }\n.#{$fa-css-prefix}-fighter-jet:before { content: $fa-var-fighter-jet; }\n.#{$fa-css-prefix}-beer:before { content: $fa-var-beer; }\n.#{$fa-css-prefix}-h-square:before { content: $fa-var-h-square; }\n.#{$fa-css-prefix}-plus-square:before { content: $fa-var-plus-square; }\n.#{$fa-css-prefix}-angle-double-left:before { content: $fa-var-angle-double-left; }\n.#{$fa-css-prefix}-angle-double-right:before { content: $fa-var-angle-double-right; }\n.#{$fa-css-prefix}-angle-double-up:before { content: $fa-var-angle-double-up; }\n.#{$fa-css-prefix}-angle-double-down:before { content: $fa-var-angle-double-down; }\n.#{$fa-css-prefix}-angle-left:before { content: $fa-var-angle-left; }\n.#{$fa-css-prefix}-angle-right:before { content: $fa-var-angle-right; }\n.#{$fa-css-prefix}-angle-up:before { content: $fa-var-angle-up; }\n.#{$fa-css-prefix}-angle-down:before { content: $fa-var-angle-down; }\n.#{$fa-css-prefix}-desktop:before { content: $fa-var-desktop; }\n.#{$fa-css-prefix}-laptop:before { content: $fa-var-laptop; }\n.#{$fa-css-prefix}-tablet:before { content: $fa-var-tablet; }\n.#{$fa-css-prefix}-mobile-phone:before,\n.#{$fa-css-prefix}-mobile:before { content: $fa-var-mobile; }\n.#{$fa-css-prefix}-circle-o:before { content: $fa-var-circle-o; }\n.#{$fa-css-prefix}-quote-left:before { content: $fa-var-quote-left; }\n.#{$fa-css-prefix}-quote-right:before { content: $fa-var-quote-right; }\n.#{$fa-css-prefix}-spinner:before { content: $fa-var-spinner; }\n.#{$fa-css-prefix}-circle:before { content: $fa-var-circle; }\n.#{$fa-css-prefix}-mail-reply:before,\n.#{$fa-css-prefix}-reply:before { content: $fa-var-reply; }\n.#{$fa-css-prefix}-github-alt:before { content: $fa-var-github-alt; }\n.#{$fa-css-prefix}-folder-o:before { content: $fa-var-folder-o; }\n.#{$fa-css-prefix}-folder-open-o:before { content: $fa-var-folder-open-o; }\n.#{$fa-css-prefix}-smile-o:before { content: $fa-var-smile-o; }\n.#{$fa-css-prefix}-frown-o:before { content: $fa-var-frown-o; }\n.#{$fa-css-prefix}-meh-o:before { content: $fa-var-meh-o; }\n.#{$fa-css-prefix}-gamepad:before { content: $fa-var-gamepad; }\n.#{$fa-css-prefix}-keyboard-o:before { content: $fa-var-keyboard-o; }\n.#{$fa-css-prefix}-flag-o:before { content: $fa-var-flag-o; }\n.#{$fa-css-prefix}-flag-checkered:before { content: $fa-var-flag-checkered; }\n.#{$fa-css-prefix}-terminal:before { content: $fa-var-terminal; }\n.#{$fa-css-prefix}-code:before { content: $fa-var-code; }\n.#{$fa-css-prefix}-mail-reply-all:before,\n.#{$fa-css-prefix}-reply-all:before { content: $fa-var-reply-all; }\n.#{$fa-css-prefix}-star-half-empty:before,\n.#{$fa-css-prefix}-star-half-full:before,\n.#{$fa-css-prefix}-star-half-o:before { content: $fa-var-star-half-o; }\n.#{$fa-css-prefix}-location-arrow:before { content: $fa-var-location-arrow; }\n.#{$fa-css-prefix}-crop:before { content: $fa-var-crop; }\n.#{$fa-css-prefix}-code-fork:before { content: $fa-var-code-fork; }\n.#{$fa-css-prefix}-unlink:before,\n.#{$fa-css-prefix}-chain-broken:before { content: $fa-var-chain-broken; }\n.#{$fa-css-prefix}-question:before { content: $fa-var-question; }\n.#{$fa-css-prefix}-info:before { content: $fa-var-info; }\n.#{$fa-css-prefix}-exclamation:before { content: $fa-var-exclamation; }\n.#{$fa-css-prefix}-superscript:before { content: $fa-var-superscript; }\n.#{$fa-css-prefix}-subscript:before { content: $fa-var-subscript; }\n.#{$fa-css-prefix}-eraser:before { content: $fa-var-eraser; }\n.#{$fa-css-prefix}-puzzle-piece:before { content: $fa-var-puzzle-piece; }\n.#{$fa-css-prefix}-microphone:before { content: $fa-var-microphone; }\n.#{$fa-css-prefix}-microphone-slash:before { content: $fa-var-microphone-slash; }\n.#{$fa-css-prefix}-shield:before { content: $fa-var-shield; }\n.#{$fa-css-prefix}-calendar-o:before { content: $fa-var-calendar-o; }\n.#{$fa-css-prefix}-fire-extinguisher:before { content: $fa-var-fire-extinguisher; }\n.#{$fa-css-prefix}-rocket:before { content: $fa-var-rocket; }\n.#{$fa-css-prefix}-maxcdn:before { content: $fa-var-maxcdn; }\n.#{$fa-css-prefix}-chevron-circle-left:before { content: $fa-var-chevron-circle-left; }\n.#{$fa-css-prefix}-chevron-circle-right:before { content: $fa-var-chevron-circle-right; }\n.#{$fa-css-prefix}-chevron-circle-up:before { content: $fa-var-chevron-circle-up; }\n.#{$fa-css-prefix}-chevron-circle-down:before { content: $fa-var-chevron-circle-down; }\n.#{$fa-css-prefix}-html5:before { content: $fa-var-html5; }\n.#{$fa-css-prefix}-css3:before { content: $fa-var-css3; }\n.#{$fa-css-prefix}-anchor:before { content: $fa-var-anchor; }\n.#{$fa-css-prefix}-unlock-alt:before { content: $fa-var-unlock-alt; }\n.#{$fa-css-prefix}-bullseye:before { content: $fa-var-bullseye; }\n.#{$fa-css-prefix}-ellipsis-h:before { content: $fa-var-ellipsis-h; }\n.#{$fa-css-prefix}-ellipsis-v:before { content: $fa-var-ellipsis-v; }\n.#{$fa-css-prefix}-rss-square:before { content: $fa-var-rss-square; }\n.#{$fa-css-prefix}-play-circle:before { content: $fa-var-play-circle; }\n.#{$fa-css-prefix}-ticket:before { content: $fa-var-ticket; }\n.#{$fa-css-prefix}-minus-square:before { content: $fa-var-minus-square; }\n.#{$fa-css-prefix}-minus-square-o:before { content: $fa-var-minus-square-o; }\n.#{$fa-css-prefix}-level-up:before { content: $fa-var-level-up; }\n.#{$fa-css-prefix}-level-down:before { content: $fa-var-level-down; }\n.#{$fa-css-prefix}-check-square:before { content: $fa-var-check-square; }\n.#{$fa-css-prefix}-pencil-square:before { content: $fa-var-pencil-square; }\n.#{$fa-css-prefix}-external-link-square:before { content: $fa-var-external-link-square; }\n.#{$fa-css-prefix}-share-square:before { content: $fa-var-share-square; }\n.#{$fa-css-prefix}-compass:before { content: $fa-var-compass; }\n.#{$fa-css-prefix}-toggle-down:before,\n.#{$fa-css-prefix}-caret-square-o-down:before { content: $fa-var-caret-square-o-down; }\n.#{$fa-css-prefix}-toggle-up:before,\n.#{$fa-css-prefix}-caret-square-o-up:before { content: $fa-var-caret-square-o-up; }\n.#{$fa-css-prefix}-toggle-right:before,\n.#{$fa-css-prefix}-caret-square-o-right:before { content: $fa-var-caret-square-o-right; }\n.#{$fa-css-prefix}-euro:before,\n.#{$fa-css-prefix}-eur:before { content: $fa-var-eur; }\n.#{$fa-css-prefix}-gbp:before { content: $fa-var-gbp; }\n.#{$fa-css-prefix}-dollar:before,\n.#{$fa-css-prefix}-usd:before { content: $fa-var-usd; }\n.#{$fa-css-prefix}-rupee:before,\n.#{$fa-css-prefix}-inr:before { content: $fa-var-inr; }\n.#{$fa-css-prefix}-cny:before,\n.#{$fa-css-prefix}-rmb:before,\n.#{$fa-css-prefix}-yen:before,\n.#{$fa-css-prefix}-jpy:before { content: $fa-var-jpy; }\n.#{$fa-css-prefix}-ruble:before,\n.#{$fa-css-prefix}-rouble:before,\n.#{$fa-css-prefix}-rub:before { content: $fa-var-rub; }\n.#{$fa-css-prefix}-won:before,\n.#{$fa-css-prefix}-krw:before { content: $fa-var-krw; }\n.#{$fa-css-prefix}-bitcoin:before,\n.#{$fa-css-prefix}-btc:before { content: $fa-var-btc; }\n.#{$fa-css-prefix}-file:before { content: $fa-var-file; }\n.#{$fa-css-prefix}-file-text:before { content: $fa-var-file-text; }\n.#{$fa-css-prefix}-sort-alpha-asc:before { content: $fa-var-sort-alpha-asc; }\n.#{$fa-css-prefix}-sort-alpha-desc:before { content: $fa-var-sort-alpha-desc; }\n.#{$fa-css-prefix}-sort-amount-asc:before { content: $fa-var-sort-amount-asc; }\n.#{$fa-css-prefix}-sort-amount-desc:before { content: $fa-var-sort-amount-desc; }\n.#{$fa-css-prefix}-sort-numeric-asc:before { content: $fa-var-sort-numeric-asc; }\n.#{$fa-css-prefix}-sort-numeric-desc:before { content: $fa-var-sort-numeric-desc; }\n.#{$fa-css-prefix}-thumbs-up:before { content: $fa-var-thumbs-up; }\n.#{$fa-css-prefix}-thumbs-down:before { content: $fa-var-thumbs-down; }\n.#{$fa-css-prefix}-youtube-square:before { content: $fa-var-youtube-square; }\n.#{$fa-css-prefix}-youtube:before { content: $fa-var-youtube; }\n.#{$fa-css-prefix}-xing:before { content: $fa-var-xing; }\n.#{$fa-css-prefix}-xing-square:before { content: $fa-var-xing-square; }\n.#{$fa-css-prefix}-youtube-play:before { content: $fa-var-youtube-play; }\n.#{$fa-css-prefix}-dropbox:before { content: $fa-var-dropbox; }\n.#{$fa-css-prefix}-stack-overflow:before { content: $fa-var-stack-overflow; }\n.#{$fa-css-prefix}-instagram:before { content: $fa-var-instagram; }\n.#{$fa-css-prefix}-flickr:before { content: $fa-var-flickr; }\n.#{$fa-css-prefix}-adn:before { content: $fa-var-adn; }\n.#{$fa-css-prefix}-bitbucket:before { content: $fa-var-bitbucket; }\n.#{$fa-css-prefix}-bitbucket-square:before { content: $fa-var-bitbucket-square; }\n.#{$fa-css-prefix}-tumblr:before { content: $fa-var-tumblr; }\n.#{$fa-css-prefix}-tumblr-square:before { content: $fa-var-tumblr-square; }\n.#{$fa-css-prefix}-long-arrow-down:before { content: $fa-var-long-arrow-down; }\n.#{$fa-css-prefix}-long-arrow-up:before { content: $fa-var-long-arrow-up; }\n.#{$fa-css-prefix}-long-arrow-left:before { content: $fa-var-long-arrow-left; }\n.#{$fa-css-prefix}-long-arrow-right:before { content: $fa-var-long-arrow-right; }\n.#{$fa-css-prefix}-apple:before { content: $fa-var-apple; }\n.#{$fa-css-prefix}-windows:before { content: $fa-var-windows; }\n.#{$fa-css-prefix}-android:before { content: $fa-var-android; }\n.#{$fa-css-prefix}-linux:before { content: $fa-var-linux; }\n.#{$fa-css-prefix}-dribbble:before { content: $fa-var-dribbble; }\n.#{$fa-css-prefix}-skype:before { content: $fa-var-skype; }\n.#{$fa-css-prefix}-foursquare:before { content: $fa-var-foursquare; }\n.#{$fa-css-prefix}-trello:before { content: $fa-var-trello; }\n.#{$fa-css-prefix}-female:before { content: $fa-var-female; }\n.#{$fa-css-prefix}-male:before { content: $fa-var-male; }\n.#{$fa-css-prefix}-gittip:before,\n.#{$fa-css-prefix}-gratipay:before { content: $fa-var-gratipay; }\n.#{$fa-css-prefix}-sun-o:before { content: $fa-var-sun-o; }\n.#{$fa-css-prefix}-moon-o:before { content: $fa-var-moon-o; }\n.#{$fa-css-prefix}-archive:before { content: $fa-var-archive; }\n.#{$fa-css-prefix}-bug:before { content: $fa-var-bug; }\n.#{$fa-css-prefix}-vk:before { content: $fa-var-vk; }\n.#{$fa-css-prefix}-weibo:before { content: $fa-var-weibo; }\n.#{$fa-css-prefix}-renren:before { content: $fa-var-renren; }\n.#{$fa-css-prefix}-pagelines:before { content: $fa-var-pagelines; }\n.#{$fa-css-prefix}-stack-exchange:before { content: $fa-var-stack-exchange; }\n.#{$fa-css-prefix}-arrow-circle-o-right:before { content: $fa-var-arrow-circle-o-right; }\n.#{$fa-css-prefix}-arrow-circle-o-left:before { content: $fa-var-arrow-circle-o-left; }\n.#{$fa-css-prefix}-toggle-left:before,\n.#{$fa-css-prefix}-caret-square-o-left:before { content: $fa-var-caret-square-o-left; }\n.#{$fa-css-prefix}-dot-circle-o:before { content: $fa-var-dot-circle-o; }\n.#{$fa-css-prefix}-wheelchair:before { content: $fa-var-wheelchair; }\n.#{$fa-css-prefix}-vimeo-square:before { content: $fa-var-vimeo-square; }\n.#{$fa-css-prefix}-turkish-lira:before,\n.#{$fa-css-prefix}-try:before { content: $fa-var-try; }\n.#{$fa-css-prefix}-plus-square-o:before { content: $fa-var-plus-square-o; }\n.#{$fa-css-prefix}-space-shuttle:before { content: $fa-var-space-shuttle; }\n.#{$fa-css-prefix}-slack:before { content: $fa-var-slack; }\n.#{$fa-css-prefix}-envelope-square:before { content: $fa-var-envelope-square; }\n.#{$fa-css-prefix}-wordpress:before { content: $fa-var-wordpress; }\n.#{$fa-css-prefix}-openid:before { content: $fa-var-openid; }\n.#{$fa-css-prefix}-institution:before,\n.#{$fa-css-prefix}-bank:before,\n.#{$fa-css-prefix}-university:before { content: $fa-var-university; }\n.#{$fa-css-prefix}-mortar-board:before,\n.#{$fa-css-prefix}-graduation-cap:before { content: $fa-var-graduation-cap; }\n.#{$fa-css-prefix}-yahoo:before { content: $fa-var-yahoo; }\n.#{$fa-css-prefix}-google:before { content: $fa-var-google; }\n.#{$fa-css-prefix}-reddit:before { content: $fa-var-reddit; }\n.#{$fa-css-prefix}-reddit-square:before { content: $fa-var-reddit-square; }\n.#{$fa-css-prefix}-stumbleupon-circle:before { content: $fa-var-stumbleupon-circle; }\n.#{$fa-css-prefix}-stumbleupon:before { content: $fa-var-stumbleupon; }\n.#{$fa-css-prefix}-delicious:before { content: $fa-var-delicious; }\n.#{$fa-css-prefix}-digg:before { content: $fa-var-digg; }\n.#{$fa-css-prefix}-pied-piper-pp:before { content: $fa-var-pied-piper-pp; }\n.#{$fa-css-prefix}-pied-piper-alt:before { content: $fa-var-pied-piper-alt; }\n.#{$fa-css-prefix}-drupal:before { content: $fa-var-drupal; }\n.#{$fa-css-prefix}-joomla:before { content: $fa-var-joomla; }\n.#{$fa-css-prefix}-language:before { content: $fa-var-language; }\n.#{$fa-css-prefix}-fax:before { content: $fa-var-fax; }\n.#{$fa-css-prefix}-building:before { content: $fa-var-building; }\n.#{$fa-css-prefix}-child:before { content: $fa-var-child; }\n.#{$fa-css-prefix}-paw:before { content: $fa-var-paw; }\n.#{$fa-css-prefix}-spoon:before { content: $fa-var-spoon; }\n.#{$fa-css-prefix}-cube:before { content: $fa-var-cube; }\n.#{$fa-css-prefix}-cubes:before { content: $fa-var-cubes; }\n.#{$fa-css-prefix}-behance:before { content: $fa-var-behance; }\n.#{$fa-css-prefix}-behance-square:before { content: $fa-var-behance-square; }\n.#{$fa-css-prefix}-steam:before { content: $fa-var-steam; }\n.#{$fa-css-prefix}-steam-square:before { content: $fa-var-steam-square; }\n.#{$fa-css-prefix}-recycle:before { content: $fa-var-recycle; }\n.#{$fa-css-prefix}-automobile:before,\n.#{$fa-css-prefix}-car:before { content: $fa-var-car; }\n.#{$fa-css-prefix}-cab:before,\n.#{$fa-css-prefix}-taxi:before { content: $fa-var-taxi; }\n.#{$fa-css-prefix}-tree:before { content: $fa-var-tree; }\n.#{$fa-css-prefix}-spotify:before { content: $fa-var-spotify; }\n.#{$fa-css-prefix}-deviantart:before { content: $fa-var-deviantart; }\n.#{$fa-css-prefix}-soundcloud:before { content: $fa-var-soundcloud; }\n.#{$fa-css-prefix}-database:before { content: $fa-var-database; }\n.#{$fa-css-prefix}-file-pdf-o:before { content: $fa-var-file-pdf-o; }\n.#{$fa-css-prefix}-file-word-o:before { content: $fa-var-file-word-o; }\n.#{$fa-css-prefix}-file-excel-o:before { content: $fa-var-file-excel-o; }\n.#{$fa-css-prefix}-file-powerpoint-o:before { content: $fa-var-file-powerpoint-o; }\n.#{$fa-css-prefix}-file-photo-o:before,\n.#{$fa-css-prefix}-file-picture-o:before,\n.#{$fa-css-prefix}-file-image-o:before { content: $fa-var-file-image-o; }\n.#{$fa-css-prefix}-file-zip-o:before,\n.#{$fa-css-prefix}-file-archive-o:before { content: $fa-var-file-archive-o; }\n.#{$fa-css-prefix}-file-sound-o:before,\n.#{$fa-css-prefix}-file-audio-o:before { content: $fa-var-file-audio-o; }\n.#{$fa-css-prefix}-file-movie-o:before,\n.#{$fa-css-prefix}-file-video-o:before { content: $fa-var-file-video-o; }\n.#{$fa-css-prefix}-file-code-o:before { content: $fa-var-file-code-o; }\n.#{$fa-css-prefix}-vine:before { content: $fa-var-vine; }\n.#{$fa-css-prefix}-codepen:before { content: $fa-var-codepen; }\n.#{$fa-css-prefix}-jsfiddle:before { content: $fa-var-jsfiddle; }\n.#{$fa-css-prefix}-life-bouy:before,\n.#{$fa-css-prefix}-life-buoy:before,\n.#{$fa-css-prefix}-life-saver:before,\n.#{$fa-css-prefix}-support:before,\n.#{$fa-css-prefix}-life-ring:before { content: $fa-var-life-ring; }\n.#{$fa-css-prefix}-circle-o-notch:before { content: $fa-var-circle-o-notch; }\n.#{$fa-css-prefix}-ra:before,\n.#{$fa-css-prefix}-resistance:before,\n.#{$fa-css-prefix}-rebel:before { content: $fa-var-rebel; }\n.#{$fa-css-prefix}-ge:before,\n.#{$fa-css-prefix}-empire:before { content: $fa-var-empire; }\n.#{$fa-css-prefix}-git-square:before { content: $fa-var-git-square; }\n.#{$fa-css-prefix}-git:before { content: $fa-var-git; }\n.#{$fa-css-prefix}-y-combinator-square:before,\n.#{$fa-css-prefix}-yc-square:before,\n.#{$fa-css-prefix}-hacker-news:before { content: $fa-var-hacker-news; }\n.#{$fa-css-prefix}-tencent-weibo:before { content: $fa-var-tencent-weibo; }\n.#{$fa-css-prefix}-qq:before { content: $fa-var-qq; }\n.#{$fa-css-prefix}-wechat:before,\n.#{$fa-css-prefix}-weixin:before { content: $fa-var-weixin; }\n.#{$fa-css-prefix}-send:before,\n.#{$fa-css-prefix}-paper-plane:before { content: $fa-var-paper-plane; }\n.#{$fa-css-prefix}-send-o:before,\n.#{$fa-css-prefix}-paper-plane-o:before { content: $fa-var-paper-plane-o; }\n.#{$fa-css-prefix}-history:before { content: $fa-var-history; }\n.#{$fa-css-prefix}-circle-thin:before { content: $fa-var-circle-thin; }\n.#{$fa-css-prefix}-header:before { content: $fa-var-header; }\n.#{$fa-css-prefix}-paragraph:before { content: $fa-var-paragraph; }\n.#{$fa-css-prefix}-sliders:before { content: $fa-var-sliders; }\n.#{$fa-css-prefix}-share-alt:before { content: $fa-var-share-alt; }\n.#{$fa-css-prefix}-share-alt-square:before { content: $fa-var-share-alt-square; }\n.#{$fa-css-prefix}-bomb:before { content: $fa-var-bomb; }\n.#{$fa-css-prefix}-soccer-ball-o:before,\n.#{$fa-css-prefix}-futbol-o:before { content: $fa-var-futbol-o; }\n.#{$fa-css-prefix}-tty:before { content: $fa-var-tty; }\n.#{$fa-css-prefix}-binoculars:before { content: $fa-var-binoculars; }\n.#{$fa-css-prefix}-plug:before { content: $fa-var-plug; }\n.#{$fa-css-prefix}-slideshare:before { content: $fa-var-slideshare; }\n.#{$fa-css-prefix}-twitch:before { content: $fa-var-twitch; }\n.#{$fa-css-prefix}-yelp:before { content: $fa-var-yelp; }\n.#{$fa-css-prefix}-newspaper-o:before { content: $fa-var-newspaper-o; }\n.#{$fa-css-prefix}-wifi:before { content: $fa-var-wifi; }\n.#{$fa-css-prefix}-calculator:before { content: $fa-var-calculator; }\n.#{$fa-css-prefix}-paypal:before { content: $fa-var-paypal; }\n.#{$fa-css-prefix}-google-wallet:before { content: $fa-var-google-wallet; }\n.#{$fa-css-prefix}-cc-visa:before { content: $fa-var-cc-visa; }\n.#{$fa-css-prefix}-cc-mastercard:before { content: $fa-var-cc-mastercard; }\n.#{$fa-css-prefix}-cc-discover:before { content: $fa-var-cc-discover; }\n.#{$fa-css-prefix}-cc-amex:before { content: $fa-var-cc-amex; }\n.#{$fa-css-prefix}-cc-paypal:before { content: $fa-var-cc-paypal; }\n.#{$fa-css-prefix}-cc-stripe:before { content: $fa-var-cc-stripe; }\n.#{$fa-css-prefix}-bell-slash:before { content: $fa-var-bell-slash; }\n.#{$fa-css-prefix}-bell-slash-o:before { content: $fa-var-bell-slash-o; }\n.#{$fa-css-prefix}-trash:before { content: $fa-var-trash; }\n.#{$fa-css-prefix}-copyright:before { content: $fa-var-copyright; }\n.#{$fa-css-prefix}-at:before { content: $fa-var-at; }\n.#{$fa-css-prefix}-eyedropper:before { content: $fa-var-eyedropper; }\n.#{$fa-css-prefix}-paint-brush:before { content: $fa-var-paint-brush; }\n.#{$fa-css-prefix}-birthday-cake:before { content: $fa-var-birthday-cake; }\n.#{$fa-css-prefix}-area-chart:before { content: $fa-var-area-chart; }\n.#{$fa-css-prefix}-pie-chart:before { content: $fa-var-pie-chart; }\n.#{$fa-css-prefix}-line-chart:before { content: $fa-var-line-chart; }\n.#{$fa-css-prefix}-lastfm:before { content: $fa-var-lastfm; }\n.#{$fa-css-prefix}-lastfm-square:before { content: $fa-var-lastfm-square; }\n.#{$fa-css-prefix}-toggle-off:before { content: $fa-var-toggle-off; }\n.#{$fa-css-prefix}-toggle-on:before { content: $fa-var-toggle-on; }\n.#{$fa-css-prefix}-bicycle:before { content: $fa-var-bicycle; }\n.#{$fa-css-prefix}-bus:before { content: $fa-var-bus; }\n.#{$fa-css-prefix}-ioxhost:before { content: $fa-var-ioxhost; }\n.#{$fa-css-prefix}-angellist:before { content: $fa-var-angellist; }\n.#{$fa-css-prefix}-cc:before { content: $fa-var-cc; }\n.#{$fa-css-prefix}-shekel:before,\n.#{$fa-css-prefix}-sheqel:before,\n.#{$fa-css-prefix}-ils:before { content: $fa-var-ils; }\n.#{$fa-css-prefix}-meanpath:before { content: $fa-var-meanpath; }\n.#{$fa-css-prefix}-buysellads:before { content: $fa-var-buysellads; }\n.#{$fa-css-prefix}-connectdevelop:before { content: $fa-var-connectdevelop; }\n.#{$fa-css-prefix}-dashcube:before { content: $fa-var-dashcube; }\n.#{$fa-css-prefix}-forumbee:before { content: $fa-var-forumbee; }\n.#{$fa-css-prefix}-leanpub:before { content: $fa-var-leanpub; }\n.#{$fa-css-prefix}-sellsy:before { content: $fa-var-sellsy; }\n.#{$fa-css-prefix}-shirtsinbulk:before { content: $fa-var-shirtsinbulk; }\n.#{$fa-css-prefix}-simplybuilt:before { content: $fa-var-simplybuilt; }\n.#{$fa-css-prefix}-skyatlas:before { content: $fa-var-skyatlas; }\n.#{$fa-css-prefix}-cart-plus:before { content: $fa-var-cart-plus; }\n.#{$fa-css-prefix}-cart-arrow-down:before { content: $fa-var-cart-arrow-down; }\n.#{$fa-css-prefix}-diamond:before { content: $fa-var-diamond; }\n.#{$fa-css-prefix}-ship:before { content: $fa-var-ship; }\n.#{$fa-css-prefix}-user-secret:before { content: $fa-var-user-secret; }\n.#{$fa-css-prefix}-motorcycle:before { content: $fa-var-motorcycle; }\n.#{$fa-css-prefix}-street-view:before { content: $fa-var-street-view; }\n.#{$fa-css-prefix}-heartbeat:before { content: $fa-var-heartbeat; }\n.#{$fa-css-prefix}-venus:before { content: $fa-var-venus; }\n.#{$fa-css-prefix}-mars:before { content: $fa-var-mars; }\n.#{$fa-css-prefix}-mercury:before { content: $fa-var-mercury; }\n.#{$fa-css-prefix}-intersex:before,\n.#{$fa-css-prefix}-transgender:before { content: $fa-var-transgender; }\n.#{$fa-css-prefix}-transgender-alt:before { content: $fa-var-transgender-alt; }\n.#{$fa-css-prefix}-venus-double:before { content: $fa-var-venus-double; }\n.#{$fa-css-prefix}-mars-double:before { content: $fa-var-mars-double; }\n.#{$fa-css-prefix}-venus-mars:before { content: $fa-var-venus-mars; }\n.#{$fa-css-prefix}-mars-stroke:before { content: $fa-var-mars-stroke; }\n.#{$fa-css-prefix}-mars-stroke-v:before { content: $fa-var-mars-stroke-v; }\n.#{$fa-css-prefix}-mars-stroke-h:before { content: $fa-var-mars-stroke-h; }\n.#{$fa-css-prefix}-neuter:before { content: $fa-var-neuter; }\n.#{$fa-css-prefix}-genderless:before { content: $fa-var-genderless; }\n.#{$fa-css-prefix}-facebook-official:before { content: $fa-var-facebook-official; }\n.#{$fa-css-prefix}-pinterest-p:before { content: $fa-var-pinterest-p; }\n.#{$fa-css-prefix}-whatsapp:before { content: $fa-var-whatsapp; }\n.#{$fa-css-prefix}-server:before { content: $fa-var-server; }\n.#{$fa-css-prefix}-user-plus:before { content: $fa-var-user-plus; }\n.#{$fa-css-prefix}-user-times:before { content: $fa-var-user-times; }\n.#{$fa-css-prefix}-hotel:before,\n.#{$fa-css-prefix}-bed:before { content: $fa-var-bed; }\n.#{$fa-css-prefix}-viacoin:before { content: $fa-var-viacoin; }\n.#{$fa-css-prefix}-train:before { content: $fa-var-train; }\n.#{$fa-css-prefix}-subway:before { content: $fa-var-subway; }\n.#{$fa-css-prefix}-medium:before { content: $fa-var-medium; }\n.#{$fa-css-prefix}-yc:before,\n.#{$fa-css-prefix}-y-combinator:before { content: $fa-var-y-combinator; }\n.#{$fa-css-prefix}-optin-monster:before { content: $fa-var-optin-monster; }\n.#{$fa-css-prefix}-opencart:before { content: $fa-var-opencart; }\n.#{$fa-css-prefix}-expeditedssl:before { content: $fa-var-expeditedssl; }\n.#{$fa-css-prefix}-battery-4:before,\n.#{$fa-css-prefix}-battery:before,\n.#{$fa-css-prefix}-battery-full:before { content: $fa-var-battery-full; }\n.#{$fa-css-prefix}-battery-3:before,\n.#{$fa-css-prefix}-battery-three-quarters:before { content: $fa-var-battery-three-quarters; }\n.#{$fa-css-prefix}-battery-2:before,\n.#{$fa-css-prefix}-battery-half:before { content: $fa-var-battery-half; }\n.#{$fa-css-prefix}-battery-1:before,\n.#{$fa-css-prefix}-battery-quarter:before { content: $fa-var-battery-quarter; }\n.#{$fa-css-prefix}-battery-0:before,\n.#{$fa-css-prefix}-battery-empty:before { content: $fa-var-battery-empty; }\n.#{$fa-css-prefix}-mouse-pointer:before { content: $fa-var-mouse-pointer; }\n.#{$fa-css-prefix}-i-cursor:before { content: $fa-var-i-cursor; }\n.#{$fa-css-prefix}-object-group:before { content: $fa-var-object-group; }\n.#{$fa-css-prefix}-object-ungroup:before { content: $fa-var-object-ungroup; }\n.#{$fa-css-prefix}-sticky-note:before { content: $fa-var-sticky-note; }\n.#{$fa-css-prefix}-sticky-note-o:before { content: $fa-var-sticky-note-o; }\n.#{$fa-css-prefix}-cc-jcb:before { content: $fa-var-cc-jcb; }\n.#{$fa-css-prefix}-cc-diners-club:before { content: $fa-var-cc-diners-club; }\n.#{$fa-css-prefix}-clone:before { content: $fa-var-clone; }\n.#{$fa-css-prefix}-balance-scale:before { content: $fa-var-balance-scale; }\n.#{$fa-css-prefix}-hourglass-o:before { content: $fa-var-hourglass-o; }\n.#{$fa-css-prefix}-hourglass-1:before,\n.#{$fa-css-prefix}-hourglass-start:before { content: $fa-var-hourglass-start; }\n.#{$fa-css-prefix}-hourglass-2:before,\n.#{$fa-css-prefix}-hourglass-half:before { content: $fa-var-hourglass-half; }\n.#{$fa-css-prefix}-hourglass-3:before,\n.#{$fa-css-prefix}-hourglass-end:before { content: $fa-var-hourglass-end; }\n.#{$fa-css-prefix}-hourglass:before { content: $fa-var-hourglass; }\n.#{$fa-css-prefix}-hand-grab-o:before,\n.#{$fa-css-prefix}-hand-rock-o:before { content: $fa-var-hand-rock-o; }\n.#{$fa-css-prefix}-hand-stop-o:before,\n.#{$fa-css-prefix}-hand-paper-o:before { content: $fa-var-hand-paper-o; }\n.#{$fa-css-prefix}-hand-scissors-o:before { content: $fa-var-hand-scissors-o; }\n.#{$fa-css-prefix}-hand-lizard-o:before { content: $fa-var-hand-lizard-o; }\n.#{$fa-css-prefix}-hand-spock-o:before { content: $fa-var-hand-spock-o; }\n.#{$fa-css-prefix}-hand-pointer-o:before { content: $fa-var-hand-pointer-o; }\n.#{$fa-css-prefix}-hand-peace-o:before { content: $fa-var-hand-peace-o; }\n.#{$fa-css-prefix}-trademark:before { content: $fa-var-trademark; }\n.#{$fa-css-prefix}-registered:before { content: $fa-var-registered; }\n.#{$fa-css-prefix}-creative-commons:before { content: $fa-var-creative-commons; }\n.#{$fa-css-prefix}-gg:before { content: $fa-var-gg; }\n.#{$fa-css-prefix}-gg-circle:before { content: $fa-var-gg-circle; }\n.#{$fa-css-prefix}-tripadvisor:before { content: $fa-var-tripadvisor; }\n.#{$fa-css-prefix}-odnoklassniki:before { content: $fa-var-odnoklassniki; }\n.#{$fa-css-prefix}-odnoklassniki-square:before { content: $fa-var-odnoklassniki-square; }\n.#{$fa-css-prefix}-get-pocket:before { content: $fa-var-get-pocket; }\n.#{$fa-css-prefix}-wikipedia-w:before { content: $fa-var-wikipedia-w; }\n.#{$fa-css-prefix}-safari:before { content: $fa-var-safari; }\n.#{$fa-css-prefix}-chrome:before { content: $fa-var-chrome; }\n.#{$fa-css-prefix}-firefox:before { content: $fa-var-firefox; }\n.#{$fa-css-prefix}-opera:before { content: $fa-var-opera; }\n.#{$fa-css-prefix}-internet-explorer:before { content: $fa-var-internet-explorer; }\n.#{$fa-css-prefix}-tv:before,\n.#{$fa-css-prefix}-television:before { content: $fa-var-television; }\n.#{$fa-css-prefix}-contao:before { content: $fa-var-contao; }\n.#{$fa-css-prefix}-500px:before { content: $fa-var-500px; }\n.#{$fa-css-prefix}-amazon:before { content: $fa-var-amazon; }\n.#{$fa-css-prefix}-calendar-plus-o:before { content: $fa-var-calendar-plus-o; }\n.#{$fa-css-prefix}-calendar-minus-o:before { content: $fa-var-calendar-minus-o; }\n.#{$fa-css-prefix}-calendar-times-o:before { content: $fa-var-calendar-times-o; }\n.#{$fa-css-prefix}-calendar-check-o:before { content: $fa-var-calendar-check-o; }\n.#{$fa-css-prefix}-industry:before { content: $fa-var-industry; }\n.#{$fa-css-prefix}-map-pin:before { content: $fa-var-map-pin; }\n.#{$fa-css-prefix}-map-signs:before { content: $fa-var-map-signs; }\n.#{$fa-css-prefix}-map-o:before { content: $fa-var-map-o; }\n.#{$fa-css-prefix}-map:before { content: $fa-var-map; }\n.#{$fa-css-prefix}-commenting:before { content: $fa-var-commenting; }\n.#{$fa-css-prefix}-commenting-o:before { content: $fa-var-commenting-o; }\n.#{$fa-css-prefix}-houzz:before { content: $fa-var-houzz; }\n.#{$fa-css-prefix}-vimeo:before { content: $fa-var-vimeo; }\n.#{$fa-css-prefix}-black-tie:before { content: $fa-var-black-tie; }\n.#{$fa-css-prefix}-fonticons:before { content: $fa-var-fonticons; }\n.#{$fa-css-prefix}-reddit-alien:before { content: $fa-var-reddit-alien; }\n.#{$fa-css-prefix}-edge:before { content: $fa-var-edge; }\n.#{$fa-css-prefix}-credit-card-alt:before { content: $fa-var-credit-card-alt; }\n.#{$fa-css-prefix}-codiepie:before { content: $fa-var-codiepie; }\n.#{$fa-css-prefix}-modx:before { content: $fa-var-modx; }\n.#{$fa-css-prefix}-fort-awesome:before { content: $fa-var-fort-awesome; }\n.#{$fa-css-prefix}-usb:before { content: $fa-var-usb; }\n.#{$fa-css-prefix}-product-hunt:before { content: $fa-var-product-hunt; }\n.#{$fa-css-prefix}-mixcloud:before { content: $fa-var-mixcloud; }\n.#{$fa-css-prefix}-scribd:before { content: $fa-var-scribd; }\n.#{$fa-css-prefix}-pause-circle:before { content: $fa-var-pause-circle; }\n.#{$fa-css-prefix}-pause-circle-o:before { content: $fa-var-pause-circle-o; }\n.#{$fa-css-prefix}-stop-circle:before { content: $fa-var-stop-circle; }\n.#{$fa-css-prefix}-stop-circle-o:before { content: $fa-var-stop-circle-o; }\n.#{$fa-css-prefix}-shopping-bag:before { content: $fa-var-shopping-bag; }\n.#{$fa-css-prefix}-shopping-basket:before { content: $fa-var-shopping-basket; }\n.#{$fa-css-prefix}-hashtag:before { content: $fa-var-hashtag; }\n.#{$fa-css-prefix}-bluetooth:before { content: $fa-var-bluetooth; }\n.#{$fa-css-prefix}-bluetooth-b:before { content: $fa-var-bluetooth-b; }\n.#{$fa-css-prefix}-percent:before { content: $fa-var-percent; }\n.#{$fa-css-prefix}-gitlab:before { content: $fa-var-gitlab; }\n.#{$fa-css-prefix}-wpbeginner:before { content: $fa-var-wpbeginner; }\n.#{$fa-css-prefix}-wpforms:before { content: $fa-var-wpforms; }\n.#{$fa-css-prefix}-envira:before { content: $fa-var-envira; }\n.#{$fa-css-prefix}-universal-access:before { content: $fa-var-universal-access; }\n.#{$fa-css-prefix}-wheelchair-alt:before { content: $fa-var-wheelchair-alt; }\n.#{$fa-css-prefix}-question-circle-o:before { content: $fa-var-question-circle-o; }\n.#{$fa-css-prefix}-blind:before { content: $fa-var-blind; }\n.#{$fa-css-prefix}-audio-description:before { content: $fa-var-audio-description; }\n.#{$fa-css-prefix}-volume-control-phone:before { content: $fa-var-volume-control-phone; }\n.#{$fa-css-prefix}-braille:before { content: $fa-var-braille; }\n.#{$fa-css-prefix}-assistive-listening-systems:before { content: $fa-var-assistive-listening-systems; }\n.#{$fa-css-prefix}-asl-interpreting:before,\n.#{$fa-css-prefix}-american-sign-language-interpreting:before { content: $fa-var-american-sign-language-interpreting; }\n.#{$fa-css-prefix}-deafness:before,\n.#{$fa-css-prefix}-hard-of-hearing:before,\n.#{$fa-css-prefix}-deaf:before { content: $fa-var-deaf; }\n.#{$fa-css-prefix}-glide:before { content: $fa-var-glide; }\n.#{$fa-css-prefix}-glide-g:before { content: $fa-var-glide-g; }\n.#{$fa-css-prefix}-signing:before,\n.#{$fa-css-prefix}-sign-language:before { content: $fa-var-sign-language; }\n.#{$fa-css-prefix}-low-vision:before { content: $fa-var-low-vision; }\n.#{$fa-css-prefix}-viadeo:before { content: $fa-var-viadeo; }\n.#{$fa-css-prefix}-viadeo-square:before { content: $fa-var-viadeo-square; }\n.#{$fa-css-prefix}-snapchat:before { content: $fa-var-snapchat; }\n.#{$fa-css-prefix}-snapchat-ghost:before { content: $fa-var-snapchat-ghost; }\n.#{$fa-css-prefix}-snapchat-square:before { content: $fa-var-snapchat-square; }\n.#{$fa-css-prefix}-pied-piper:before { content: $fa-var-pied-piper; }\n.#{$fa-css-prefix}-first-order:before { content: $fa-var-first-order; }\n.#{$fa-css-prefix}-yoast:before { content: $fa-var-yoast; }\n.#{$fa-css-prefix}-themeisle:before { content: $fa-var-themeisle; }\n.#{$fa-css-prefix}-google-plus-circle:before,\n.#{$fa-css-prefix}-google-plus-official:before { content: $fa-var-google-plus-official; }\n.#{$fa-css-prefix}-fa:before,\n.#{$fa-css-prefix}-font-awesome:before { content: $fa-var-font-awesome; }\n.#{$fa-css-prefix}-handshake-o:before { content: $fa-var-handshake-o; }\n.#{$fa-css-prefix}-envelope-open:before { content: $fa-var-envelope-open; }\n.#{$fa-css-prefix}-envelope-open-o:before { content: $fa-var-envelope-open-o; }\n.#{$fa-css-prefix}-linode:before { content: $fa-var-linode; }\n.#{$fa-css-prefix}-address-book:before { content: $fa-var-address-book; }\n.#{$fa-css-prefix}-address-book-o:before { content: $fa-var-address-book-o; }\n.#{$fa-css-prefix}-vcard:before,\n.#{$fa-css-prefix}-address-card:before { content: $fa-var-address-card; }\n.#{$fa-css-prefix}-vcard-o:before,\n.#{$fa-css-prefix}-address-card-o:before { content: $fa-var-address-card-o; }\n.#{$fa-css-prefix}-user-circle:before { content: $fa-var-user-circle; }\n.#{$fa-css-prefix}-user-circle-o:before { content: $fa-var-user-circle-o; }\n.#{$fa-css-prefix}-user-o:before { content: $fa-var-user-o; }\n.#{$fa-css-prefix}-id-badge:before { content: $fa-var-id-badge; }\n.#{$fa-css-prefix}-drivers-license:before,\n.#{$fa-css-prefix}-id-card:before { content: $fa-var-id-card; }\n.#{$fa-css-prefix}-drivers-license-o:before,\n.#{$fa-css-prefix}-id-card-o:before { content: $fa-var-id-card-o; }\n.#{$fa-css-prefix}-quora:before { content: $fa-var-quora; }\n.#{$fa-css-prefix}-free-code-camp:before { content: $fa-var-free-code-camp; }\n.#{$fa-css-prefix}-telegram:before { content: $fa-var-telegram; }\n.#{$fa-css-prefix}-thermometer-4:before,\n.#{$fa-css-prefix}-thermometer:before,\n.#{$fa-css-prefix}-thermometer-full:before { content: $fa-var-thermometer-full; }\n.#{$fa-css-prefix}-thermometer-3:before,\n.#{$fa-css-prefix}-thermometer-three-quarters:before { content: $fa-var-thermometer-three-quarters; }\n.#{$fa-css-prefix}-thermometer-2:before,\n.#{$fa-css-prefix}-thermometer-half:before { content: $fa-var-thermometer-half; }\n.#{$fa-css-prefix}-thermometer-1:before,\n.#{$fa-css-prefix}-thermometer-quarter:before { content: $fa-var-thermometer-quarter; }\n.#{$fa-css-prefix}-thermometer-0:before,\n.#{$fa-css-prefix}-thermometer-empty:before { content: $fa-var-thermometer-empty; }\n.#{$fa-css-prefix}-shower:before { content: $fa-var-shower; }\n.#{$fa-css-prefix}-bathtub:before,\n.#{$fa-css-prefix}-s15:before,\n.#{$fa-css-prefix}-bath:before { content: $fa-var-bath; }\n.#{$fa-css-prefix}-podcast:before { content: $fa-var-podcast; }\n.#{$fa-css-prefix}-window-maximize:before { content: $fa-var-window-maximize; }\n.#{$fa-css-prefix}-window-minimize:before { content: $fa-var-window-minimize; }\n.#{$fa-css-prefix}-window-restore:before { content: $fa-var-window-restore; }\n.#{$fa-css-prefix}-times-rectangle:before,\n.#{$fa-css-prefix}-window-close:before { content: $fa-var-window-close; }\n.#{$fa-css-prefix}-times-rectangle-o:before,\n.#{$fa-css-prefix}-window-close-o:before { content: $fa-var-window-close-o; }\n.#{$fa-css-prefix}-bandcamp:before { content: $fa-var-bandcamp; }\n.#{$fa-css-prefix}-grav:before { content: $fa-var-grav; }\n.#{$fa-css-prefix}-etsy:before { content: $fa-var-etsy; }\n.#{$fa-css-prefix}-imdb:before { content: $fa-var-imdb; }\n.#{$fa-css-prefix}-ravelry:before { content: $fa-var-ravelry; }\n.#{$fa-css-prefix}-eercast:before { content: $fa-var-eercast; }\n.#{$fa-css-prefix}-microchip:before { content: $fa-var-microchip; }\n.#{$fa-css-prefix}-snowflake-o:before { content: $fa-var-snowflake-o; }\n.#{$fa-css-prefix}-superpowers:before { content: $fa-var-superpowers; }\n.#{$fa-css-prefix}-wpexplorer:before { content: $fa-var-wpexplorer; }\n.#{$fa-css-prefix}-meetup:before { content: $fa-var-meetup; }\n"
  },
  {
    "path": "public/frontend/plugins/font-awesome/scss/_larger.scss",
    "content": "// Icon Sizes\n// -------------------------\n\n/* makes the font 33% larger relative to the icon container */\n.#{$fa-css-prefix}-lg {\n  font-size: (4em / 3);\n  line-height: (3em / 4);\n  vertical-align: -15%;\n}\n.#{$fa-css-prefix}-2x { font-size: 2em; }\n.#{$fa-css-prefix}-3x { font-size: 3em; }\n.#{$fa-css-prefix}-4x { font-size: 4em; }\n.#{$fa-css-prefix}-5x { font-size: 5em; }\n"
  },
  {
    "path": "public/frontend/plugins/font-awesome/scss/_list.scss",
    "content": "// List Icons\n// -------------------------\n\n.#{$fa-css-prefix}-ul {\n  padding-left: 0;\n  margin-left: $fa-li-width;\n  list-style-type: none;\n  > li { position: relative; }\n}\n.#{$fa-css-prefix}-li {\n  position: absolute;\n  left: -$fa-li-width;\n  width: $fa-li-width;\n  top: (2em / 14);\n  text-align: center;\n  &.#{$fa-css-prefix}-lg {\n    left: -$fa-li-width + (4em / 14);\n  }\n}\n"
  },
  {
    "path": "public/frontend/plugins/font-awesome/scss/_mixins.scss",
    "content": "// Mixins\n// --------------------------\n\n@mixin fa-icon() {\n  display: inline-block;\n  font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration\n  font-size: inherit; // can't have font-size inherit on line above, so need to override\n  text-rendering: auto; // optimizelegibility throws things off #1094\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n\n}\n\n@mixin fa-icon-rotate($degrees, $rotation) {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation})\";\n  -webkit-transform: rotate($degrees);\n      -ms-transform: rotate($degrees);\n          transform: rotate($degrees);\n}\n\n@mixin fa-icon-flip($horiz, $vert, $rotation) {\n  -ms-filter: \"progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}, mirror=1)\";\n  -webkit-transform: scale($horiz, $vert);\n      -ms-transform: scale($horiz, $vert);\n          transform: scale($horiz, $vert);\n}\n\n\n// Only display content to screen readers. A la Bootstrap 4.\n//\n// See: http://a11yproject.com/posts/how-to-hide-content/\n\n@mixin sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0,0,0,0);\n  border: 0;\n}\n\n// Use in conjunction with .sr-only to only display content when it's focused.\n//\n// Useful for \"Skip to main content\" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n//\n// Credit: HTML5 Boilerplate\n\n@mixin sr-only-focusable {\n  &:active,\n  &:focus {\n    position: static;\n    width: auto;\n    height: auto;\n    margin: 0;\n    overflow: visible;\n    clip: auto;\n  }\n}\n"
  },
  {
    "path": "public/frontend/plugins/font-awesome/scss/_path.scss",
    "content": "/* FONT PATH\n * -------------------------- */\n\n@font-face {\n  font-family: 'FontAwesome';\n  src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}');\n  src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'),\n    url('#{$fa-font-path}/fontawesome-webfont.woff2?v=#{$fa-version}') format('woff2'),\n    url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'),\n    url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'),\n    url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg');\n//  src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts\n  font-weight: normal;\n  font-style: normal;\n}\n"
  },
  {
    "path": "public/frontend/plugins/font-awesome/scss/_rotated-flipped.scss",
    "content": "// Rotated & Flipped Icons\n// -------------------------\n\n.#{$fa-css-prefix}-rotate-90  { @include fa-icon-rotate(90deg, 1);  }\n.#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); }\n.#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); }\n\n.#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); }\n.#{$fa-css-prefix}-flip-vertical   { @include fa-icon-flip(1, -1, 2); }\n\n// Hook for IE8-9\n// -------------------------\n\n:root .#{$fa-css-prefix}-rotate-90,\n:root .#{$fa-css-prefix}-rotate-180,\n:root .#{$fa-css-prefix}-rotate-270,\n:root .#{$fa-css-prefix}-flip-horizontal,\n:root .#{$fa-css-prefix}-flip-vertical {\n  filter: none;\n}\n"
  },
  {
    "path": "public/frontend/plugins/font-awesome/scss/_screen-reader.scss",
    "content": "// Screen Readers\n// -------------------------\n\n.sr-only { @include sr-only(); }\n.sr-only-focusable { @include sr-only-focusable(); }\n"
  },
  {
    "path": "public/frontend/plugins/font-awesome/scss/_stacked.scss",
    "content": "// Stacked Icons\n// -------------------------\n\n.#{$fa-css-prefix}-stack {\n  position: relative;\n  display: inline-block;\n  width: 2em;\n  height: 2em;\n  line-height: 2em;\n  vertical-align: middle;\n}\n.#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x {\n  position: absolute;\n  left: 0;\n  width: 100%;\n  text-align: center;\n}\n.#{$fa-css-prefix}-stack-1x { line-height: inherit; }\n.#{$fa-css-prefix}-stack-2x { font-size: 2em; }\n.#{$fa-css-prefix}-inverse { color: $fa-inverse; }\n"
  },
  {
    "path": "public/frontend/plugins/font-awesome/scss/_variables.scss",
    "content": "// Variables\n// --------------------------\n\n$fa-font-path:        \"../fonts\" !default;\n$fa-font-size-base:   14px !default;\n$fa-line-height-base: 1 !default;\n//$fa-font-path:        \"//netdna.bootstrapcdn.com/font-awesome/4.7.0/fonts\" !default; // for referencing Bootstrap CDN font files directly\n$fa-css-prefix:       fa !default;\n$fa-version:          \"4.7.0\" !default;\n$fa-border-color:     #eee !default;\n$fa-inverse:          #fff !default;\n$fa-li-width:         (30em / 14) !default;\n\n$fa-var-500px: \"\\f26e\";\n$fa-var-address-book: \"\\f2b9\";\n$fa-var-address-book-o: \"\\f2ba\";\n$fa-var-address-card: \"\\f2bb\";\n$fa-var-address-card-o: \"\\f2bc\";\n$fa-var-adjust: \"\\f042\";\n$fa-var-adn: \"\\f170\";\n$fa-var-align-center: \"\\f037\";\n$fa-var-align-justify: \"\\f039\";\n$fa-var-align-left: \"\\f036\";\n$fa-var-align-right: \"\\f038\";\n$fa-var-amazon: \"\\f270\";\n$fa-var-ambulance: \"\\f0f9\";\n$fa-var-american-sign-language-interpreting: \"\\f2a3\";\n$fa-var-anchor: \"\\f13d\";\n$fa-var-android: \"\\f17b\";\n$fa-var-angellist: \"\\f209\";\n$fa-var-angle-double-down: \"\\f103\";\n$fa-var-angle-double-left: \"\\f100\";\n$fa-var-angle-double-right: \"\\f101\";\n$fa-var-angle-double-up: \"\\f102\";\n$fa-var-angle-down: \"\\f107\";\n$fa-var-angle-left: \"\\f104\";\n$fa-var-angle-right: \"\\f105\";\n$fa-var-angle-up: \"\\f106\";\n$fa-var-apple: \"\\f179\";\n$fa-var-archive: \"\\f187\";\n$fa-var-area-chart: \"\\f1fe\";\n$fa-var-arrow-circle-down: \"\\f0ab\";\n$fa-var-arrow-circle-left: \"\\f0a8\";\n$fa-var-arrow-circle-o-down: \"\\f01a\";\n$fa-var-arrow-circle-o-left: \"\\f190\";\n$fa-var-arrow-circle-o-right: \"\\f18e\";\n$fa-var-arrow-circle-o-up: \"\\f01b\";\n$fa-var-arrow-circle-right: \"\\f0a9\";\n$fa-var-arrow-circle-up: \"\\f0aa\";\n$fa-var-arrow-down: \"\\f063\";\n$fa-var-arrow-left: \"\\f060\";\n$fa-var-arrow-right: \"\\f061\";\n$fa-var-arrow-up: \"\\f062\";\n$fa-var-arrows: \"\\f047\";\n$fa-var-arrows-alt: \"\\f0b2\";\n$fa-var-arrows-h: \"\\f07e\";\n$fa-var-arrows-v: \"\\f07d\";\n$fa-var-asl-interpreting: \"\\f2a3\";\n$fa-var-assistive-listening-systems: \"\\f2a2\";\n$fa-var-asterisk: \"\\f069\";\n$fa-var-at: \"\\f1fa\";\n$fa-var-audio-description: \"\\f29e\";\n$fa-var-automobile: \"\\f1b9\";\n$fa-var-backward: \"\\f04a\";\n$fa-var-balance-scale: \"\\f24e\";\n$fa-var-ban: \"\\f05e\";\n$fa-var-bandcamp: \"\\f2d5\";\n$fa-var-bank: \"\\f19c\";\n$fa-var-bar-chart: \"\\f080\";\n$fa-var-bar-chart-o: \"\\f080\";\n$fa-var-barcode: \"\\f02a\";\n$fa-var-bars: \"\\f0c9\";\n$fa-var-bath: \"\\f2cd\";\n$fa-var-bathtub: \"\\f2cd\";\n$fa-var-battery: \"\\f240\";\n$fa-var-battery-0: \"\\f244\";\n$fa-var-battery-1: \"\\f243\";\n$fa-var-battery-2: \"\\f242\";\n$fa-var-battery-3: \"\\f241\";\n$fa-var-battery-4: \"\\f240\";\n$fa-var-battery-empty: \"\\f244\";\n$fa-var-battery-full: \"\\f240\";\n$fa-var-battery-half: \"\\f242\";\n$fa-var-battery-quarter: \"\\f243\";\n$fa-var-battery-three-quarters: \"\\f241\";\n$fa-var-bed: \"\\f236\";\n$fa-var-beer: \"\\f0fc\";\n$fa-var-behance: \"\\f1b4\";\n$fa-var-behance-square: \"\\f1b5\";\n$fa-var-bell: \"\\f0f3\";\n$fa-var-bell-o: \"\\f0a2\";\n$fa-var-bell-slash: \"\\f1f6\";\n$fa-var-bell-slash-o: \"\\f1f7\";\n$fa-var-bicycle: \"\\f206\";\n$fa-var-binoculars: \"\\f1e5\";\n$fa-var-birthday-cake: \"\\f1fd\";\n$fa-var-bitbucket: \"\\f171\";\n$fa-var-bitbucket-square: \"\\f172\";\n$fa-var-bitcoin: \"\\f15a\";\n$fa-var-black-tie: \"\\f27e\";\n$fa-var-blind: \"\\f29d\";\n$fa-var-bluetooth: \"\\f293\";\n$fa-var-bluetooth-b: \"\\f294\";\n$fa-var-bold: \"\\f032\";\n$fa-var-bolt: \"\\f0e7\";\n$fa-var-bomb: \"\\f1e2\";\n$fa-var-book: \"\\f02d\";\n$fa-var-bookmark: \"\\f02e\";\n$fa-var-bookmark-o: \"\\f097\";\n$fa-var-braille: \"\\f2a1\";\n$fa-var-briefcase: \"\\f0b1\";\n$fa-var-btc: \"\\f15a\";\n$fa-var-bug: \"\\f188\";\n$fa-var-building: \"\\f1ad\";\n$fa-var-building-o: \"\\f0f7\";\n$fa-var-bullhorn: \"\\f0a1\";\n$fa-var-bullseye: \"\\f140\";\n$fa-var-bus: \"\\f207\";\n$fa-var-buysellads: \"\\f20d\";\n$fa-var-cab: \"\\f1ba\";\n$fa-var-calculator: \"\\f1ec\";\n$fa-var-calendar: \"\\f073\";\n$fa-var-calendar-check-o: \"\\f274\";\n$fa-var-calendar-minus-o: \"\\f272\";\n$fa-var-calendar-o: \"\\f133\";\n$fa-var-calendar-plus-o: \"\\f271\";\n$fa-var-calendar-times-o: \"\\f273\";\n$fa-var-camera: \"\\f030\";\n$fa-var-camera-retro: \"\\f083\";\n$fa-var-car: \"\\f1b9\";\n$fa-var-caret-down: \"\\f0d7\";\n$fa-var-caret-left: \"\\f0d9\";\n$fa-var-caret-right: \"\\f0da\";\n$fa-var-caret-square-o-down: \"\\f150\";\n$fa-var-caret-square-o-left: \"\\f191\";\n$fa-var-caret-square-o-right: \"\\f152\";\n$fa-var-caret-square-o-up: \"\\f151\";\n$fa-var-caret-up: \"\\f0d8\";\n$fa-var-cart-arrow-down: \"\\f218\";\n$fa-var-cart-plus: \"\\f217\";\n$fa-var-cc: \"\\f20a\";\n$fa-var-cc-amex: \"\\f1f3\";\n$fa-var-cc-diners-club: \"\\f24c\";\n$fa-var-cc-discover: \"\\f1f2\";\n$fa-var-cc-jcb: \"\\f24b\";\n$fa-var-cc-mastercard: \"\\f1f1\";\n$fa-var-cc-paypal: \"\\f1f4\";\n$fa-var-cc-stripe: \"\\f1f5\";\n$fa-var-cc-visa: \"\\f1f0\";\n$fa-var-certificate: \"\\f0a3\";\n$fa-var-chain: \"\\f0c1\";\n$fa-var-chain-broken: \"\\f127\";\n$fa-var-check: \"\\f00c\";\n$fa-var-check-circle: \"\\f058\";\n$fa-var-check-circle-o: \"\\f05d\";\n$fa-var-check-square: \"\\f14a\";\n$fa-var-check-square-o: \"\\f046\";\n$fa-var-chevron-circle-down: \"\\f13a\";\n$fa-var-chevron-circle-left: \"\\f137\";\n$fa-var-chevron-circle-right: \"\\f138\";\n$fa-var-chevron-circle-up: \"\\f139\";\n$fa-var-chevron-down: \"\\f078\";\n$fa-var-chevron-left: \"\\f053\";\n$fa-var-chevron-right: \"\\f054\";\n$fa-var-chevron-up: \"\\f077\";\n$fa-var-child: \"\\f1ae\";\n$fa-var-chrome: \"\\f268\";\n$fa-var-circle: \"\\f111\";\n$fa-var-circle-o: \"\\f10c\";\n$fa-var-circle-o-notch: \"\\f1ce\";\n$fa-var-circle-thin: \"\\f1db\";\n$fa-var-clipboard: \"\\f0ea\";\n$fa-var-clock-o: \"\\f017\";\n$fa-var-clone: \"\\f24d\";\n$fa-var-close: \"\\f00d\";\n$fa-var-cloud: \"\\f0c2\";\n$fa-var-cloud-download: \"\\f0ed\";\n$fa-var-cloud-upload: \"\\f0ee\";\n$fa-var-cny: \"\\f157\";\n$fa-var-code: \"\\f121\";\n$fa-var-code-fork: \"\\f126\";\n$fa-var-codepen: \"\\f1cb\";\n$fa-var-codiepie: \"\\f284\";\n$fa-var-coffee: \"\\f0f4\";\n$fa-var-cog: \"\\f013\";\n$fa-var-cogs: \"\\f085\";\n$fa-var-columns: \"\\f0db\";\n$fa-var-comment: \"\\f075\";\n$fa-var-comment-o: \"\\f0e5\";\n$fa-var-commenting: \"\\f27a\";\n$fa-var-commenting-o: \"\\f27b\";\n$fa-var-comments: \"\\f086\";\n$fa-var-comments-o: \"\\f0e6\";\n$fa-var-compass: \"\\f14e\";\n$fa-var-compress: \"\\f066\";\n$fa-var-connectdevelop: \"\\f20e\";\n$fa-var-contao: \"\\f26d\";\n$fa-var-copy: \"\\f0c5\";\n$fa-var-copyright: \"\\f1f9\";\n$fa-var-creative-commons: \"\\f25e\";\n$fa-var-credit-card: \"\\f09d\";\n$fa-var-credit-card-alt: \"\\f283\";\n$fa-var-crop: \"\\f125\";\n$fa-var-crosshairs: \"\\f05b\";\n$fa-var-css3: \"\\f13c\";\n$fa-var-cube: \"\\f1b2\";\n$fa-var-cubes: \"\\f1b3\";\n$fa-var-cut: \"\\f0c4\";\n$fa-var-cutlery: \"\\f0f5\";\n$fa-var-dashboard: \"\\f0e4\";\n$fa-var-dashcube: \"\\f210\";\n$fa-var-database: \"\\f1c0\";\n$fa-var-deaf: \"\\f2a4\";\n$fa-var-deafness: \"\\f2a4\";\n$fa-var-dedent: \"\\f03b\";\n$fa-var-delicious: \"\\f1a5\";\n$fa-var-desktop: \"\\f108\";\n$fa-var-deviantart: \"\\f1bd\";\n$fa-var-diamond: \"\\f219\";\n$fa-var-digg: \"\\f1a6\";\n$fa-var-dollar: \"\\f155\";\n$fa-var-dot-circle-o: \"\\f192\";\n$fa-var-download: \"\\f019\";\n$fa-var-dribbble: \"\\f17d\";\n$fa-var-drivers-license: \"\\f2c2\";\n$fa-var-drivers-license-o: \"\\f2c3\";\n$fa-var-dropbox: \"\\f16b\";\n$fa-var-drupal: \"\\f1a9\";\n$fa-var-edge: \"\\f282\";\n$fa-var-edit: \"\\f044\";\n$fa-var-eercast: \"\\f2da\";\n$fa-var-eject: \"\\f052\";\n$fa-var-ellipsis-h: \"\\f141\";\n$fa-var-ellipsis-v: \"\\f142\";\n$fa-var-empire: \"\\f1d1\";\n$fa-var-envelope: \"\\f0e0\";\n$fa-var-envelope-o: \"\\f003\";\n$fa-var-envelope-open: \"\\f2b6\";\n$fa-var-envelope-open-o: \"\\f2b7\";\n$fa-var-envelope-square: \"\\f199\";\n$fa-var-envira: \"\\f299\";\n$fa-var-eraser: \"\\f12d\";\n$fa-var-etsy: \"\\f2d7\";\n$fa-var-eur: \"\\f153\";\n$fa-var-euro: \"\\f153\";\n$fa-var-exchange: \"\\f0ec\";\n$fa-var-exclamation: \"\\f12a\";\n$fa-var-exclamation-circle: \"\\f06a\";\n$fa-var-exclamation-triangle: \"\\f071\";\n$fa-var-expand: \"\\f065\";\n$fa-var-expeditedssl: \"\\f23e\";\n$fa-var-external-link: \"\\f08e\";\n$fa-var-external-link-square: \"\\f14c\";\n$fa-var-eye: \"\\f06e\";\n$fa-var-eye-slash: \"\\f070\";\n$fa-var-eyedropper: \"\\f1fb\";\n$fa-var-fa: \"\\f2b4\";\n$fa-var-facebook: \"\\f09a\";\n$fa-var-facebook-f: \"\\f09a\";\n$fa-var-facebook-official: \"\\f230\";\n$fa-var-facebook-square: \"\\f082\";\n$fa-var-fast-backward: \"\\f049\";\n$fa-var-fast-forward: \"\\f050\";\n$fa-var-fax: \"\\f1ac\";\n$fa-var-feed: \"\\f09e\";\n$fa-var-female: \"\\f182\";\n$fa-var-fighter-jet: \"\\f0fb\";\n$fa-var-file: \"\\f15b\";\n$fa-var-file-archive-o: \"\\f1c6\";\n$fa-var-file-audio-o: \"\\f1c7\";\n$fa-var-file-code-o: \"\\f1c9\";\n$fa-var-file-excel-o: \"\\f1c3\";\n$fa-var-file-image-o: \"\\f1c5\";\n$fa-var-file-movie-o: \"\\f1c8\";\n$fa-var-file-o: \"\\f016\";\n$fa-var-file-pdf-o: \"\\f1c1\";\n$fa-var-file-photo-o: \"\\f1c5\";\n$fa-var-file-picture-o: \"\\f1c5\";\n$fa-var-file-powerpoint-o: \"\\f1c4\";\n$fa-var-file-sound-o: \"\\f1c7\";\n$fa-var-file-text: \"\\f15c\";\n$fa-var-file-text-o: \"\\f0f6\";\n$fa-var-file-video-o: \"\\f1c8\";\n$fa-var-file-word-o: \"\\f1c2\";\n$fa-var-file-zip-o: \"\\f1c6\";\n$fa-var-files-o: \"\\f0c5\";\n$fa-var-film: \"\\f008\";\n$fa-var-filter: \"\\f0b0\";\n$fa-var-fire: \"\\f06d\";\n$fa-var-fire-extinguisher: \"\\f134\";\n$fa-var-firefox: \"\\f269\";\n$fa-var-first-order: \"\\f2b0\";\n$fa-var-flag: \"\\f024\";\n$fa-var-flag-checkered: \"\\f11e\";\n$fa-var-flag-o: \"\\f11d\";\n$fa-var-flash: \"\\f0e7\";\n$fa-var-flask: \"\\f0c3\";\n$fa-var-flickr: \"\\f16e\";\n$fa-var-floppy-o: \"\\f0c7\";\n$fa-var-folder: \"\\f07b\";\n$fa-var-folder-o: \"\\f114\";\n$fa-var-folder-open: \"\\f07c\";\n$fa-var-folder-open-o: \"\\f115\";\n$fa-var-font: \"\\f031\";\n$fa-var-font-awesome: \"\\f2b4\";\n$fa-var-fonticons: \"\\f280\";\n$fa-var-fort-awesome: \"\\f286\";\n$fa-var-forumbee: \"\\f211\";\n$fa-var-forward: \"\\f04e\";\n$fa-var-foursquare: \"\\f180\";\n$fa-var-free-code-camp: \"\\f2c5\";\n$fa-var-frown-o: \"\\f119\";\n$fa-var-futbol-o: \"\\f1e3\";\n$fa-var-gamepad: \"\\f11b\";\n$fa-var-gavel: \"\\f0e3\";\n$fa-var-gbp: \"\\f154\";\n$fa-var-ge: \"\\f1d1\";\n$fa-var-gear: \"\\f013\";\n$fa-var-gears: \"\\f085\";\n$fa-var-genderless: \"\\f22d\";\n$fa-var-get-pocket: \"\\f265\";\n$fa-var-gg: \"\\f260\";\n$fa-var-gg-circle: \"\\f261\";\n$fa-var-gift: \"\\f06b\";\n$fa-var-git: \"\\f1d3\";\n$fa-var-git-square: \"\\f1d2\";\n$fa-var-github: \"\\f09b\";\n$fa-var-github-alt: \"\\f113\";\n$fa-var-github-square: \"\\f092\";\n$fa-var-gitlab: \"\\f296\";\n$fa-var-gittip: \"\\f184\";\n$fa-var-glass: \"\\f000\";\n$fa-var-glide: \"\\f2a5\";\n$fa-var-glide-g: \"\\f2a6\";\n$fa-var-globe: \"\\f0ac\";\n$fa-var-google: \"\\f1a0\";\n$fa-var-google-plus: \"\\f0d5\";\n$fa-var-google-plus-circle: \"\\f2b3\";\n$fa-var-google-plus-official: \"\\f2b3\";\n$fa-var-google-plus-square: \"\\f0d4\";\n$fa-var-google-wallet: \"\\f1ee\";\n$fa-var-graduation-cap: \"\\f19d\";\n$fa-var-gratipay: \"\\f184\";\n$fa-var-grav: \"\\f2d6\";\n$fa-var-group: \"\\f0c0\";\n$fa-var-h-square: \"\\f0fd\";\n$fa-var-hacker-news: \"\\f1d4\";\n$fa-var-hand-grab-o: \"\\f255\";\n$fa-var-hand-lizard-o: \"\\f258\";\n$fa-var-hand-o-down: \"\\f0a7\";\n$fa-var-hand-o-left: \"\\f0a5\";\n$fa-var-hand-o-right: \"\\f0a4\";\n$fa-var-hand-o-up: \"\\f0a6\";\n$fa-var-hand-paper-o: \"\\f256\";\n$fa-var-hand-peace-o: \"\\f25b\";\n$fa-var-hand-pointer-o: \"\\f25a\";\n$fa-var-hand-rock-o: \"\\f255\";\n$fa-var-hand-scissors-o: \"\\f257\";\n$fa-var-hand-spock-o: \"\\f259\";\n$fa-var-hand-stop-o: \"\\f256\";\n$fa-var-handshake-o: \"\\f2b5\";\n$fa-var-hard-of-hearing: \"\\f2a4\";\n$fa-var-hashtag: \"\\f292\";\n$fa-var-hdd-o: \"\\f0a0\";\n$fa-var-header: \"\\f1dc\";\n$fa-var-headphones: \"\\f025\";\n$fa-var-heart: \"\\f004\";\n$fa-var-heart-o: \"\\f08a\";\n$fa-var-heartbeat: \"\\f21e\";\n$fa-var-history: \"\\f1da\";\n$fa-var-home: \"\\f015\";\n$fa-var-hospital-o: \"\\f0f8\";\n$fa-var-hotel: \"\\f236\";\n$fa-var-hourglass: \"\\f254\";\n$fa-var-hourglass-1: \"\\f251\";\n$fa-var-hourglass-2: \"\\f252\";\n$fa-var-hourglass-3: \"\\f253\";\n$fa-var-hourglass-end: \"\\f253\";\n$fa-var-hourglass-half: \"\\f252\";\n$fa-var-hourglass-o: \"\\f250\";\n$fa-var-hourglass-start: \"\\f251\";\n$fa-var-houzz: \"\\f27c\";\n$fa-var-html5: \"\\f13b\";\n$fa-var-i-cursor: \"\\f246\";\n$fa-var-id-badge: \"\\f2c1\";\n$fa-var-id-card: \"\\f2c2\";\n$fa-var-id-card-o: \"\\f2c3\";\n$fa-var-ils: \"\\f20b\";\n$fa-var-image: \"\\f03e\";\n$fa-var-imdb: \"\\f2d8\";\n$fa-var-inbox: \"\\f01c\";\n$fa-var-indent: \"\\f03c\";\n$fa-var-industry: \"\\f275\";\n$fa-var-info: \"\\f129\";\n$fa-var-info-circle: \"\\f05a\";\n$fa-var-inr: \"\\f156\";\n$fa-var-instagram: \"\\f16d\";\n$fa-var-institution: \"\\f19c\";\n$fa-var-internet-explorer: \"\\f26b\";\n$fa-var-intersex: \"\\f224\";\n$fa-var-ioxhost: \"\\f208\";\n$fa-var-italic: \"\\f033\";\n$fa-var-joomla: \"\\f1aa\";\n$fa-var-jpy: \"\\f157\";\n$fa-var-jsfiddle: \"\\f1cc\";\n$fa-var-key: \"\\f084\";\n$fa-var-keyboard-o: \"\\f11c\";\n$fa-var-krw: \"\\f159\";\n$fa-var-language: \"\\f1ab\";\n$fa-var-laptop: \"\\f109\";\n$fa-var-lastfm: \"\\f202\";\n$fa-var-lastfm-square: \"\\f203\";\n$fa-var-leaf: \"\\f06c\";\n$fa-var-leanpub: \"\\f212\";\n$fa-var-legal: \"\\f0e3\";\n$fa-var-lemon-o: \"\\f094\";\n$fa-var-level-down: \"\\f149\";\n$fa-var-level-up: \"\\f148\";\n$fa-var-life-bouy: \"\\f1cd\";\n$fa-var-life-buoy: \"\\f1cd\";\n$fa-var-life-ring: \"\\f1cd\";\n$fa-var-life-saver: \"\\f1cd\";\n$fa-var-lightbulb-o: \"\\f0eb\";\n$fa-var-line-chart: \"\\f201\";\n$fa-var-link: \"\\f0c1\";\n$fa-var-linkedin: \"\\f0e1\";\n$fa-var-linkedin-square: \"\\f08c\";\n$fa-var-linode: \"\\f2b8\";\n$fa-var-linux: \"\\f17c\";\n$fa-var-list: \"\\f03a\";\n$fa-var-list-alt: \"\\f022\";\n$fa-var-list-ol: \"\\f0cb\";\n$fa-var-list-ul: \"\\f0ca\";\n$fa-var-location-arrow: \"\\f124\";\n$fa-var-lock: \"\\f023\";\n$fa-var-long-arrow-down: \"\\f175\";\n$fa-var-long-arrow-left: \"\\f177\";\n$fa-var-long-arrow-right: \"\\f178\";\n$fa-var-long-arrow-up: \"\\f176\";\n$fa-var-low-vision: \"\\f2a8\";\n$fa-var-magic: \"\\f0d0\";\n$fa-var-magnet: \"\\f076\";\n$fa-var-mail-forward: \"\\f064\";\n$fa-var-mail-reply: \"\\f112\";\n$fa-var-mail-reply-all: \"\\f122\";\n$fa-var-male: \"\\f183\";\n$fa-var-map: \"\\f279\";\n$fa-var-map-marker: \"\\f041\";\n$fa-var-map-o: \"\\f278\";\n$fa-var-map-pin: \"\\f276\";\n$fa-var-map-signs: \"\\f277\";\n$fa-var-mars: \"\\f222\";\n$fa-var-mars-double: \"\\f227\";\n$fa-var-mars-stroke: \"\\f229\";\n$fa-var-mars-stroke-h: \"\\f22b\";\n$fa-var-mars-stroke-v: \"\\f22a\";\n$fa-var-maxcdn: \"\\f136\";\n$fa-var-meanpath: \"\\f20c\";\n$fa-var-medium: \"\\f23a\";\n$fa-var-medkit: \"\\f0fa\";\n$fa-var-meetup: \"\\f2e0\";\n$fa-var-meh-o: \"\\f11a\";\n$fa-var-mercury: \"\\f223\";\n$fa-var-microchip: \"\\f2db\";\n$fa-var-microphone: \"\\f130\";\n$fa-var-microphone-slash: \"\\f131\";\n$fa-var-minus: \"\\f068\";\n$fa-var-minus-circle: \"\\f056\";\n$fa-var-minus-square: \"\\f146\";\n$fa-var-minus-square-o: \"\\f147\";\n$fa-var-mixcloud: \"\\f289\";\n$fa-var-mobile: \"\\f10b\";\n$fa-var-mobile-phone: \"\\f10b\";\n$fa-var-modx: \"\\f285\";\n$fa-var-money: \"\\f0d6\";\n$fa-var-moon-o: \"\\f186\";\n$fa-var-mortar-board: \"\\f19d\";\n$fa-var-motorcycle: \"\\f21c\";\n$fa-var-mouse-pointer: \"\\f245\";\n$fa-var-music: \"\\f001\";\n$fa-var-navicon: \"\\f0c9\";\n$fa-var-neuter: \"\\f22c\";\n$fa-var-newspaper-o: \"\\f1ea\";\n$fa-var-object-group: \"\\f247\";\n$fa-var-object-ungroup: \"\\f248\";\n$fa-var-odnoklassniki: \"\\f263\";\n$fa-var-odnoklassniki-square: \"\\f264\";\n$fa-var-opencart: \"\\f23d\";\n$fa-var-openid: \"\\f19b\";\n$fa-var-opera: \"\\f26a\";\n$fa-var-optin-monster: \"\\f23c\";\n$fa-var-outdent: \"\\f03b\";\n$fa-var-pagelines: \"\\f18c\";\n$fa-var-paint-brush: \"\\f1fc\";\n$fa-var-paper-plane: \"\\f1d8\";\n$fa-var-paper-plane-o: \"\\f1d9\";\n$fa-var-paperclip: \"\\f0c6\";\n$fa-var-paragraph: \"\\f1dd\";\n$fa-var-paste: \"\\f0ea\";\n$fa-var-pause: \"\\f04c\";\n$fa-var-pause-circle: \"\\f28b\";\n$fa-var-pause-circle-o: \"\\f28c\";\n$fa-var-paw: \"\\f1b0\";\n$fa-var-paypal: \"\\f1ed\";\n$fa-var-pencil: \"\\f040\";\n$fa-var-pencil-square: \"\\f14b\";\n$fa-var-pencil-square-o: \"\\f044\";\n$fa-var-percent: \"\\f295\";\n$fa-var-phone: \"\\f095\";\n$fa-var-phone-square: \"\\f098\";\n$fa-var-photo: \"\\f03e\";\n$fa-var-picture-o: \"\\f03e\";\n$fa-var-pie-chart: \"\\f200\";\n$fa-var-pied-piper: \"\\f2ae\";\n$fa-var-pied-piper-alt: \"\\f1a8\";\n$fa-var-pied-piper-pp: \"\\f1a7\";\n$fa-var-pinterest: \"\\f0d2\";\n$fa-var-pinterest-p: \"\\f231\";\n$fa-var-pinterest-square: \"\\f0d3\";\n$fa-var-plane: \"\\f072\";\n$fa-var-play: \"\\f04b\";\n$fa-var-play-circle: \"\\f144\";\n$fa-var-play-circle-o: \"\\f01d\";\n$fa-var-plug: \"\\f1e6\";\n$fa-var-plus: \"\\f067\";\n$fa-var-plus-circle: \"\\f055\";\n$fa-var-plus-square: \"\\f0fe\";\n$fa-var-plus-square-o: \"\\f196\";\n$fa-var-podcast: \"\\f2ce\";\n$fa-var-power-off: \"\\f011\";\n$fa-var-print: \"\\f02f\";\n$fa-var-product-hunt: \"\\f288\";\n$fa-var-puzzle-piece: \"\\f12e\";\n$fa-var-qq: \"\\f1d6\";\n$fa-var-qrcode: \"\\f029\";\n$fa-var-question: \"\\f128\";\n$fa-var-question-circle: \"\\f059\";\n$fa-var-question-circle-o: \"\\f29c\";\n$fa-var-quora: \"\\f2c4\";\n$fa-var-quote-left: \"\\f10d\";\n$fa-var-quote-right: \"\\f10e\";\n$fa-var-ra: \"\\f1d0\";\n$fa-var-random: \"\\f074\";\n$fa-var-ravelry: \"\\f2d9\";\n$fa-var-rebel: \"\\f1d0\";\n$fa-var-recycle: \"\\f1b8\";\n$fa-var-reddit: \"\\f1a1\";\n$fa-var-reddit-alien: \"\\f281\";\n$fa-var-reddit-square: \"\\f1a2\";\n$fa-var-refresh: \"\\f021\";\n$fa-var-registered: \"\\f25d\";\n$fa-var-remove: \"\\f00d\";\n$fa-var-renren: \"\\f18b\";\n$fa-var-reorder: \"\\f0c9\";\n$fa-var-repeat: \"\\f01e\";\n$fa-var-reply: \"\\f112\";\n$fa-var-reply-all: \"\\f122\";\n$fa-var-resistance: \"\\f1d0\";\n$fa-var-retweet: \"\\f079\";\n$fa-var-rmb: \"\\f157\";\n$fa-var-road: \"\\f018\";\n$fa-var-rocket: \"\\f135\";\n$fa-var-rotate-left: \"\\f0e2\";\n$fa-var-rotate-right: \"\\f01e\";\n$fa-var-rouble: \"\\f158\";\n$fa-var-rss: \"\\f09e\";\n$fa-var-rss-square: \"\\f143\";\n$fa-var-rub: \"\\f158\";\n$fa-var-ruble: \"\\f158\";\n$fa-var-rupee: \"\\f156\";\n$fa-var-s15: \"\\f2cd\";\n$fa-var-safari: \"\\f267\";\n$fa-var-save: \"\\f0c7\";\n$fa-var-scissors: \"\\f0c4\";\n$fa-var-scribd: \"\\f28a\";\n$fa-var-search: \"\\f002\";\n$fa-var-search-minus: \"\\f010\";\n$fa-var-search-plus: \"\\f00e\";\n$fa-var-sellsy: \"\\f213\";\n$fa-var-send: \"\\f1d8\";\n$fa-var-send-o: \"\\f1d9\";\n$fa-var-server: \"\\f233\";\n$fa-var-share: \"\\f064\";\n$fa-var-share-alt: \"\\f1e0\";\n$fa-var-share-alt-square: \"\\f1e1\";\n$fa-var-share-square: \"\\f14d\";\n$fa-var-share-square-o: \"\\f045\";\n$fa-var-shekel: \"\\f20b\";\n$fa-var-sheqel: \"\\f20b\";\n$fa-var-shield: \"\\f132\";\n$fa-var-ship: \"\\f21a\";\n$fa-var-shirtsinbulk: \"\\f214\";\n$fa-var-shopping-bag: \"\\f290\";\n$fa-var-shopping-basket: \"\\f291\";\n$fa-var-shopping-cart: \"\\f07a\";\n$fa-var-shower: \"\\f2cc\";\n$fa-var-sign-in: \"\\f090\";\n$fa-var-sign-language: \"\\f2a7\";\n$fa-var-sign-out: \"\\f08b\";\n$fa-var-signal: \"\\f012\";\n$fa-var-signing: \"\\f2a7\";\n$fa-var-simplybuilt: \"\\f215\";\n$fa-var-sitemap: \"\\f0e8\";\n$fa-var-skyatlas: \"\\f216\";\n$fa-var-skype: \"\\f17e\";\n$fa-var-slack: \"\\f198\";\n$fa-var-sliders: \"\\f1de\";\n$fa-var-slideshare: \"\\f1e7\";\n$fa-var-smile-o: \"\\f118\";\n$fa-var-snapchat: \"\\f2ab\";\n$fa-var-snapchat-ghost: \"\\f2ac\";\n$fa-var-snapchat-square: \"\\f2ad\";\n$fa-var-snowflake-o: \"\\f2dc\";\n$fa-var-soccer-ball-o: \"\\f1e3\";\n$fa-var-sort: \"\\f0dc\";\n$fa-var-sort-alpha-asc: \"\\f15d\";\n$fa-var-sort-alpha-desc: \"\\f15e\";\n$fa-var-sort-amount-asc: \"\\f160\";\n$fa-var-sort-amount-desc: \"\\f161\";\n$fa-var-sort-asc: \"\\f0de\";\n$fa-var-sort-desc: \"\\f0dd\";\n$fa-var-sort-down: \"\\f0dd\";\n$fa-var-sort-numeric-asc: \"\\f162\";\n$fa-var-sort-numeric-desc: \"\\f163\";\n$fa-var-sort-up: \"\\f0de\";\n$fa-var-soundcloud: \"\\f1be\";\n$fa-var-space-shuttle: \"\\f197\";\n$fa-var-spinner: \"\\f110\";\n$fa-var-spoon: \"\\f1b1\";\n$fa-var-spotify: \"\\f1bc\";\n$fa-var-square: \"\\f0c8\";\n$fa-var-square-o: \"\\f096\";\n$fa-var-stack-exchange: \"\\f18d\";\n$fa-var-stack-overflow: \"\\f16c\";\n$fa-var-star: \"\\f005\";\n$fa-var-star-half: \"\\f089\";\n$fa-var-star-half-empty: \"\\f123\";\n$fa-var-star-half-full: \"\\f123\";\n$fa-var-star-half-o: \"\\f123\";\n$fa-var-star-o: \"\\f006\";\n$fa-var-steam: \"\\f1b6\";\n$fa-var-steam-square: \"\\f1b7\";\n$fa-var-step-backward: \"\\f048\";\n$fa-var-step-forward: \"\\f051\";\n$fa-var-stethoscope: \"\\f0f1\";\n$fa-var-sticky-note: \"\\f249\";\n$fa-var-sticky-note-o: \"\\f24a\";\n$fa-var-stop: \"\\f04d\";\n$fa-var-stop-circle: \"\\f28d\";\n$fa-var-stop-circle-o: \"\\f28e\";\n$fa-var-street-view: \"\\f21d\";\n$fa-var-strikethrough: \"\\f0cc\";\n$fa-var-stumbleupon: \"\\f1a4\";\n$fa-var-stumbleupon-circle: \"\\f1a3\";\n$fa-var-subscript: \"\\f12c\";\n$fa-var-subway: \"\\f239\";\n$fa-var-suitcase: \"\\f0f2\";\n$fa-var-sun-o: \"\\f185\";\n$fa-var-superpowers: \"\\f2dd\";\n$fa-var-superscript: \"\\f12b\";\n$fa-var-support: \"\\f1cd\";\n$fa-var-table: \"\\f0ce\";\n$fa-var-tablet: \"\\f10a\";\n$fa-var-tachometer: \"\\f0e4\";\n$fa-var-tag: \"\\f02b\";\n$fa-var-tags: \"\\f02c\";\n$fa-var-tasks: \"\\f0ae\";\n$fa-var-taxi: \"\\f1ba\";\n$fa-var-telegram: \"\\f2c6\";\n$fa-var-television: \"\\f26c\";\n$fa-var-tencent-weibo: \"\\f1d5\";\n$fa-var-terminal: \"\\f120\";\n$fa-var-text-height: \"\\f034\";\n$fa-var-text-width: \"\\f035\";\n$fa-var-th: \"\\f00a\";\n$fa-var-th-large: \"\\f009\";\n$fa-var-th-list: \"\\f00b\";\n$fa-var-themeisle: \"\\f2b2\";\n$fa-var-thermometer: \"\\f2c7\";\n$fa-var-thermometer-0: \"\\f2cb\";\n$fa-var-thermometer-1: \"\\f2ca\";\n$fa-var-thermometer-2: \"\\f2c9\";\n$fa-var-thermometer-3: \"\\f2c8\";\n$fa-var-thermometer-4: \"\\f2c7\";\n$fa-var-thermometer-empty: \"\\f2cb\";\n$fa-var-thermometer-full: \"\\f2c7\";\n$fa-var-thermometer-half: \"\\f2c9\";\n$fa-var-thermometer-quarter: \"\\f2ca\";\n$fa-var-thermometer-three-quarters: \"\\f2c8\";\n$fa-var-thumb-tack: \"\\f08d\";\n$fa-var-thumbs-down: \"\\f165\";\n$fa-var-thumbs-o-down: \"\\f088\";\n$fa-var-thumbs-o-up: \"\\f087\";\n$fa-var-thumbs-up: \"\\f164\";\n$fa-var-ticket: \"\\f145\";\n$fa-var-times: \"\\f00d\";\n$fa-var-times-circle: \"\\f057\";\n$fa-var-times-circle-o: \"\\f05c\";\n$fa-var-times-rectangle: \"\\f2d3\";\n$fa-var-times-rectangle-o: \"\\f2d4\";\n$fa-var-tint: \"\\f043\";\n$fa-var-toggle-down: \"\\f150\";\n$fa-var-toggle-left: \"\\f191\";\n$fa-var-toggle-off: \"\\f204\";\n$fa-var-toggle-on: \"\\f205\";\n$fa-var-toggle-right: \"\\f152\";\n$fa-var-toggle-up: \"\\f151\";\n$fa-var-trademark: \"\\f25c\";\n$fa-var-train: \"\\f238\";\n$fa-var-transgender: \"\\f224\";\n$fa-var-transgender-alt: \"\\f225\";\n$fa-var-trash: \"\\f1f8\";\n$fa-var-trash-o: \"\\f014\";\n$fa-var-tree: \"\\f1bb\";\n$fa-var-trello: \"\\f181\";\n$fa-var-tripadvisor: \"\\f262\";\n$fa-var-trophy: \"\\f091\";\n$fa-var-truck: \"\\f0d1\";\n$fa-var-try: \"\\f195\";\n$fa-var-tty: \"\\f1e4\";\n$fa-var-tumblr: \"\\f173\";\n$fa-var-tumblr-square: \"\\f174\";\n$fa-var-turkish-lira: \"\\f195\";\n$fa-var-tv: \"\\f26c\";\n$fa-var-twitch: \"\\f1e8\";\n$fa-var-twitter: \"\\f099\";\n$fa-var-twitter-square: \"\\f081\";\n$fa-var-umbrella: \"\\f0e9\";\n$fa-var-underline: \"\\f0cd\";\n$fa-var-undo: \"\\f0e2\";\n$fa-var-universal-access: \"\\f29a\";\n$fa-var-university: \"\\f19c\";\n$fa-var-unlink: \"\\f127\";\n$fa-var-unlock: \"\\f09c\";\n$fa-var-unlock-alt: \"\\f13e\";\n$fa-var-unsorted: \"\\f0dc\";\n$fa-var-upload: \"\\f093\";\n$fa-var-usb: \"\\f287\";\n$fa-var-usd: \"\\f155\";\n$fa-var-user: \"\\f007\";\n$fa-var-user-circle: \"\\f2bd\";\n$fa-var-user-circle-o: \"\\f2be\";\n$fa-var-user-md: \"\\f0f0\";\n$fa-var-user-o: \"\\f2c0\";\n$fa-var-user-plus: \"\\f234\";\n$fa-var-user-secret: \"\\f21b\";\n$fa-var-user-times: \"\\f235\";\n$fa-var-users: \"\\f0c0\";\n$fa-var-vcard: \"\\f2bb\";\n$fa-var-vcard-o: \"\\f2bc\";\n$fa-var-venus: \"\\f221\";\n$fa-var-venus-double: \"\\f226\";\n$fa-var-venus-mars: \"\\f228\";\n$fa-var-viacoin: \"\\f237\";\n$fa-var-viadeo: \"\\f2a9\";\n$fa-var-viadeo-square: \"\\f2aa\";\n$fa-var-video-camera: \"\\f03d\";\n$fa-var-vimeo: \"\\f27d\";\n$fa-var-vimeo-square: \"\\f194\";\n$fa-var-vine: \"\\f1ca\";\n$fa-var-vk: \"\\f189\";\n$fa-var-volume-control-phone: \"\\f2a0\";\n$fa-var-volume-down: \"\\f027\";\n$fa-var-volume-off: \"\\f026\";\n$fa-var-volume-up: \"\\f028\";\n$fa-var-warning: \"\\f071\";\n$fa-var-wechat: \"\\f1d7\";\n$fa-var-weibo: \"\\f18a\";\n$fa-var-weixin: \"\\f1d7\";\n$fa-var-whatsapp: \"\\f232\";\n$fa-var-wheelchair: \"\\f193\";\n$fa-var-wheelchair-alt: \"\\f29b\";\n$fa-var-wifi: \"\\f1eb\";\n$fa-var-wikipedia-w: \"\\f266\";\n$fa-var-window-close: \"\\f2d3\";\n$fa-var-window-close-o: \"\\f2d4\";\n$fa-var-window-maximize: \"\\f2d0\";\n$fa-var-window-minimize: \"\\f2d1\";\n$fa-var-window-restore: \"\\f2d2\";\n$fa-var-windows: \"\\f17a\";\n$fa-var-won: \"\\f159\";\n$fa-var-wordpress: \"\\f19a\";\n$fa-var-wpbeginner: \"\\f297\";\n$fa-var-wpexplorer: \"\\f2de\";\n$fa-var-wpforms: \"\\f298\";\n$fa-var-wrench: \"\\f0ad\";\n$fa-var-xing: \"\\f168\";\n$fa-var-xing-square: \"\\f169\";\n$fa-var-y-combinator: \"\\f23b\";\n$fa-var-y-combinator-square: \"\\f1d4\";\n$fa-var-yahoo: \"\\f19e\";\n$fa-var-yc: \"\\f23b\";\n$fa-var-yc-square: \"\\f1d4\";\n$fa-var-yelp: \"\\f1e9\";\n$fa-var-yen: \"\\f157\";\n$fa-var-yoast: \"\\f2b1\";\n$fa-var-youtube: \"\\f167\";\n$fa-var-youtube-play: \"\\f16a\";\n$fa-var-youtube-square: \"\\f166\";\n\n"
  },
  {
    "path": "public/frontend/plugins/font-awesome/scss/font-awesome.scss",
    "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@import \"variables\";\n@import \"mixins\";\n@import \"path\";\n@import \"core\";\n@import \"larger\";\n@import \"fixed-width\";\n@import \"list\";\n@import \"bordered-pulled\";\n@import \"animated\";\n@import \"rotated-flipped\";\n@import \"stacked\";\n@import \"icons\";\n@import \"screen-reader\";\n"
  },
  {
    "path": "public/frontend/plugins/jquery/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 );"
  },
  {
    "path": "public/frontend/plugins/jquery/jquery-migrate-1.1.0.js",
    "content": "/*!\n * jQuery Migrate - v1.1.0 - 2013-01-31\n * https://github.com/jquery/jquery-migrate\n * Copyright 2005, 2013 jQuery Foundation, Inc. and other contributors; Licensed MIT\n */\n(function( jQuery, window, undefined ) {\n\"use strict\";\n\n\nvar warnedAbout = {};\n\n// List of warnings already given; public read only\njQuery.migrateWarnings = [];\n\n// Set to true to prevent console output; migrateWarnings still maintained\n// jQuery.migrateMute = false;\n\n// Show a message on the console so devs know we're active\nif ( !jQuery.migrateMute && window.console && console.log ) {\n\tconsole.log(\"JQMIGRATE: Logging is active\");\n}\n\n// Set to false to disable traces that appear with warnings\nif ( jQuery.migrateTrace === undefined ) {\n\tjQuery.migrateTrace = true;\n}\n\n// Forget any warnings we've already given; public\njQuery.migrateReset = function() {\n\twarnedAbout = {};\n\tjQuery.migrateWarnings.length = 0;\n};\n\nfunction migrateWarn( msg) {\n\tif ( !warnedAbout[ msg ] ) {\n\t\twarnedAbout[ msg ] = true;\n\t\tjQuery.migrateWarnings.push( msg );\n\t\tif ( window.console && console.warn && !jQuery.migrateMute ) {\n\t\t\tconsole.warn( \"JQMIGRATE: \" + msg );\n\t\t\tif ( jQuery.migrateTrace && console.trace ) {\n\t\t\t\tconsole.trace();\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction migrateWarnProp( obj, prop, value, msg ) {\n\tif ( Object.defineProperty ) {\n\t\t// On ES5 browsers (non-oldIE), warn if the code tries to get prop;\n\t\t// allow property to be overwritten in case some other plugin wants it\n\t\ttry {\n\t\t\tObject.defineProperty( obj, prop, {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\tget: function() {\n\t\t\t\t\tmigrateWarn( msg );\n\t\t\t\t\treturn value;\n\t\t\t\t},\n\t\t\t\tset: function( newValue ) {\n\t\t\t\t\tmigrateWarn( msg );\n\t\t\t\t\tvalue = newValue;\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn;\n\t\t} catch( err ) {\n\t\t\t// IE8 is a dope about Object.defineProperty, can't warn there\n\t\t}\n\t}\n\n\t// Non-ES5 (or broken) browser; just set the property\n\tjQuery._definePropertyBroken = true;\n\tobj[ prop ] = value;\n}\n\nif ( document.compatMode === \"BackCompat\" ) {\n\t// jQuery has never supported or tested Quirks Mode\n\tmigrateWarn( \"jQuery is not compatible with Quirks Mode\" );\n}\n\n\nvar attrFn = {},\n\toldAttr = jQuery.attr,\n\tvalueAttrGet = jQuery.attrHooks.value && jQuery.attrHooks.value.get ||\n\t\tfunction() { return null; },\n\tvalueAttrSet = jQuery.attrHooks.value && jQuery.attrHooks.value.set ||\n\t\tfunction() { return undefined; },\n\trnoType = /^(?:input|button)$/i,\n\trnoAttrNodeType = /^[238]$/,\n\trboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,\n\truseDefault = /^(?:checked|selected)$/i;\n\n// jQuery.attrFn\nmigrateWarnProp( jQuery, \"attrFn\", attrFn, \"jQuery.attrFn is deprecated\" );\n\njQuery.attr = function( elem, name, value, pass ) {\n\tvar lowerName = name.toLowerCase(),\n\t\tnType = elem && elem.nodeType;\n\n\t// Since pass is used internally, we only warn and shim for new jQuery\n\t// versions where there isn't a pass arg in the formal params\n\tif ( pass && oldAttr.length < 4 ) {\n\t\tmigrateWarn(\"jQuery.fn.attr( props, pass ) is deprecated\");\n\t\tif ( elem && !rnoAttrNodeType.test( nType ) && jQuery.isFunction( jQuery.fn[ name ] ) ) {\n\t\t\treturn jQuery( elem )[ name ]( value );\n\t\t}\n\t}\n\n\t// Warn if user tries to set `type`, since it breaks on IE 6/7/8; by checking\n\t// for disconnected elements we don't warn on $( \"<button>\", { type: \"button\" } ).\n\tif ( name === \"type\" && value !== undefined && rnoType.test( elem.nodeName ) && elem.parentNode ) {\n\t\tmigrateWarn(\"Can't change the 'type' of an input or button in IE 6/7/8\");\n\t}\n\n\t// Restore boolHook for boolean property/attribute synchronization\n\tif ( !jQuery.attrHooks[ lowerName ] && rboolean.test( lowerName ) ) {\n\t\tjQuery.attrHooks[ lowerName ] = {\n\t\t\tget: function( elem, name ) {\n\t\t\t\t// Align boolean attributes with corresponding properties\n\t\t\t\t// Fall back to attribute presence where some booleans are not supported\n\t\t\t\tvar attrNode,\n\t\t\t\t\tproperty = jQuery.prop( elem, name );\n\t\t\t\treturn property === true || typeof property !== \"boolean\" &&\n\t\t\t\t\t( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ?\n\n\t\t\t\t\tname.toLowerCase() :\n\t\t\t\t\tundefined;\n\t\t\t},\n\t\t\tset: function( elem, value, name ) {\n\t\t\t\tvar propName;\n\t\t\t\tif ( value === false ) {\n\t\t\t\t\t// Remove boolean attributes when set to false\n\t\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\t} else {\n\t\t\t\t\t// value is true since we know at this point it's type boolean and not false\n\t\t\t\t\t// Set boolean attributes to the same name and set the DOM property\n\t\t\t\t\tpropName = jQuery.propFix[ name ] || name;\n\t\t\t\t\tif ( propName in elem ) {\n\t\t\t\t\t\t// Only set the IDL specifically if it already exists on the element\n\t\t\t\t\t\telem[ propName ] = true;\n\t\t\t\t\t}\n\n\t\t\t\t\telem.setAttribute( name, name.toLowerCase() );\n\t\t\t\t}\n\t\t\t\treturn name;\n\t\t\t}\n\t\t};\n\n\t\t// Warn only for attributes that can remain distinct from their properties post-1.9\n\t\tif ( ruseDefault.test( lowerName ) ) {\n\t\t\tmigrateWarn( \"jQuery.fn.attr('\" + lowerName + \"') may use property instead of attribute\" );\n\t\t}\n\t}\n\n\treturn oldAttr.call( jQuery, elem, name, value );\n};\n\n// attrHooks: value\njQuery.attrHooks.value = {\n\tget: function( elem, name ) {\n\t\tvar nodeName = ( elem.nodeName || \"\" ).toLowerCase();\n\t\tif ( nodeName === \"button\" ) {\n\t\t\treturn valueAttrGet.apply( this, arguments );\n\t\t}\n\t\tif ( nodeName !== \"input\" && nodeName !== \"option\" ) {\n\t\t\tmigrateWarn(\"jQuery.fn.attr('value') no longer gets properties\");\n\t\t}\n\t\treturn name in elem ?\n\t\t\telem.value :\n\t\t\tnull;\n\t},\n\tset: function( elem, value ) {\n\t\tvar nodeName = ( elem.nodeName || \"\" ).toLowerCase();\n\t\tif ( nodeName === \"button\" ) {\n\t\t\treturn valueAttrSet.apply( this, arguments );\n\t\t}\n\t\tif ( nodeName !== \"input\" && nodeName !== \"option\" ) {\n\t\t\tmigrateWarn(\"jQuery.fn.attr('value', val) no longer sets properties\");\n\t\t}\n\t\t// Does not return so that setAttribute is also used\n\t\telem.value = value;\n\t}\n};\n\n\nvar matched, browser,\n\toldInit = jQuery.fn.init,\n\toldParseJSON = jQuery.parseJSON,\n\t// Note this does NOT include the #9521 XSS fix from 1.7!\n\trquickExpr = /^(?:[^<]*(<[\\w\\W]+>)[^>]*|#([\\w\\-]*))$/;\n\n// $(html) \"looks like html\" rule change\njQuery.fn.init = function( selector, context, rootjQuery ) {\n\tvar match;\n\n\tif ( selector && typeof selector === \"string\" && !jQuery.isPlainObject( context ) &&\n\t\t\t(match = rquickExpr.exec( selector )) && match[1] ) {\n\t\t// This is an HTML string according to the \"old\" rules; is it still?\n\t\tif ( selector.charAt( 0 ) !== \"<\" ) {\n\t\t\tmigrateWarn(\"$(html) HTML strings must start with '<' character\");\n\t\t}\n\t\t// Now process using loose rules; let pre-1.8 play too\n\t\tif ( context && context.context ) {\n\t\t\t// jQuery object as context; parseHTML expects a DOM object\n\t\t\tcontext = context.context;\n\t\t}\n\t\tif ( jQuery.parseHTML ) {\n\t\t\treturn oldInit.call( this, jQuery.parseHTML( jQuery.trim(selector), context, true ),\n\t\t\t\t\tcontext, rootjQuery );\n\t\t}\n\t}\n\treturn oldInit.apply( this, arguments );\n};\njQuery.fn.init.prototype = jQuery.fn;\n\n// Let $.parseJSON(falsy_value) return null\njQuery.parseJSON = function( json ) {\n\tif ( !json && json !== null ) {\n\t\tmigrateWarn(\"jQuery.parseJSON requires a valid JSON string\");\n\t\treturn null;\n\t}\n\treturn oldParseJSON.apply( this, arguments );\n};\n\njQuery.uaMatch = function( ua ) {\n\tua = ua.toLowerCase();\n\n\tvar match = /(chrome)[ \\/]([\\w.]+)/.exec( ua ) ||\n\t\t/(webkit)[ \\/]([\\w.]+)/.exec( ua ) ||\n\t\t/(opera)(?:.*version|)[ \\/]([\\w.]+)/.exec( ua ) ||\n\t\t/(msie) ([\\w.]+)/.exec( ua ) ||\n\t\tua.indexOf(\"compatible\") < 0 && /(mozilla)(?:.*? rv:([\\w.]+)|)/.exec( ua ) ||\n\t\t[];\n\n\treturn {\n\t\tbrowser: match[ 1 ] || \"\",\n\t\tversion: match[ 2 ] || \"0\"\n\t};\n};\n\nmatched = jQuery.uaMatch( navigator.userAgent );\nbrowser = {};\n\nif ( matched.browser ) {\n\tbrowser[ matched.browser ] = true;\n\tbrowser.version = matched.version;\n}\n\n// Chrome is Webkit, but Webkit is also Safari.\nif ( browser.chrome ) {\n\tbrowser.webkit = true;\n} else if ( browser.webkit ) {\n\tbrowser.safari = true;\n}\n\njQuery.browser = browser;\n\n// Warn if the code tries to get jQuery.browser\nmigrateWarnProp( jQuery, \"browser\", browser, \"jQuery.browser is deprecated\" );\n\njQuery.sub = function() {\n\tfunction jQuerySub( selector, context ) {\n\t\treturn new jQuerySub.fn.init( selector, context );\n\t}\n\tjQuery.extend( true, jQuerySub, this );\n\tjQuerySub.superclass = this;\n\tjQuerySub.fn = jQuerySub.prototype = this();\n\tjQuerySub.fn.constructor = jQuerySub;\n\tjQuerySub.sub = this.sub;\n\tjQuerySub.fn.init = function init( selector, context ) {\n\t\tif ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {\n\t\t\tcontext = jQuerySub( context );\n\t\t}\n\n\t\treturn jQuery.fn.init.call( this, selector, context, rootjQuerySub );\n\t};\n\tjQuerySub.fn.init.prototype = jQuerySub.fn;\n\tvar rootjQuerySub = jQuerySub(document);\n\tmigrateWarn( \"jQuery.sub() is deprecated\" );\n\treturn jQuerySub;\n};\n\n\nvar oldFnData = jQuery.fn.data;\n\njQuery.fn.data = function( name ) {\n\tvar ret, evt,\n\t\telem = this[0];\n\n\t// Handles 1.7 which has this behavior and 1.8 which doesn't\n\tif ( elem && name === \"events\" && arguments.length === 1 ) {\n\t\tret = jQuery.data( elem, name );\n\t\tevt = jQuery._data( elem, name );\n\t\tif ( ( ret === undefined || ret === evt ) && evt !== undefined ) {\n\t\t\tmigrateWarn(\"Use of jQuery.fn.data('events') is deprecated\");\n\t\t\treturn evt;\n\t\t}\n\t}\n\treturn oldFnData.apply( this, arguments );\n};\n\n\nvar rscriptType = /\\/(java|ecma)script/i,\n\toldSelf = jQuery.fn.andSelf || jQuery.fn.addBack;\n\njQuery.fn.andSelf = function() {\n\tmigrateWarn(\"jQuery.fn.andSelf() replaced by jQuery.fn.addBack()\");\n\treturn oldSelf.apply( this, arguments );\n};\n\n// Since jQuery.clean is used internally on older versions, we only shim if it's missing\nif ( !jQuery.clean ) {\n\tjQuery.clean = function( elems, context, fragment, scripts ) {\n\t\t// Set context per 1.8 logic\n\t\tcontext = context || document;\n\t\tcontext = !context.nodeType && context[0] || context;\n\t\tcontext = context.ownerDocument || context;\n\n\t\tmigrateWarn(\"jQuery.clean() is deprecated\");\n\n\t\tvar i, elem, handleScript, jsTags,\n\t\t\tret = [];\n\n\t\tjQuery.merge( ret, jQuery.buildFragment( elems, context ).childNodes );\n\n\t\t// Complex logic lifted directly from jQuery 1.8\n\t\tif ( fragment ) {\n\t\t\t// Special handling of each script element\n\t\t\thandleScript = function( elem ) {\n\t\t\t\t// Check if we consider it executable\n\t\t\t\tif ( !elem.type || rscriptType.test( elem.type ) ) {\n\t\t\t\t\t// Detach the script and store it in the scripts array (if provided) or the fragment\n\t\t\t\t\t// Return truthy to indicate that it has been handled\n\t\t\t\t\treturn scripts ?\n\t\t\t\t\t\tscripts.push( elem.parentNode ? elem.parentNode.removeChild( elem ) : elem ) :\n\t\t\t\t\t\tfragment.appendChild( elem );\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tfor ( i = 0; (elem = ret[i]) != null; i++ ) {\n\t\t\t\t// Check if we're done after handling an executable script\n\t\t\t\tif ( !( jQuery.nodeName( elem, \"script\" ) && handleScript( elem ) ) ) {\n\t\t\t\t\t// Append to fragment and handle embedded scripts\n\t\t\t\t\tfragment.appendChild( elem );\n\t\t\t\t\tif ( typeof elem.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\t\t\t// handleScript alters the DOM, so use jQuery.merge to ensure snapshot iteration\n\t\t\t\t\t\tjsTags = jQuery.grep( jQuery.merge( [], elem.getElementsByTagName(\"script\") ), handleScript );\n\n\t\t\t\t\t\t// Splice the scripts into ret after their former ancestor and advance our index beyond them\n\t\t\t\t\t\tret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );\n\t\t\t\t\t\ti += jsTags.length;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t};\n}\n\nvar eventAdd = jQuery.event.add,\n\teventRemove = jQuery.event.remove,\n\teventTrigger = jQuery.event.trigger,\n\toldToggle = jQuery.fn.toggle,\n\toldLive = jQuery.fn.live,\n\toldDie = jQuery.fn.die,\n\tajaxEvents = \"ajaxStart|ajaxStop|ajaxSend|ajaxComplete|ajaxError|ajaxSuccess\",\n\trajaxEvent = new RegExp( \"\\\\b(?:\" + ajaxEvents + \")\\\\b\" ),\n\trhoverHack = /(?:^|\\s)hover(\\.\\S+|)\\b/,\n\thoverHack = function( events ) {\n\t\tif ( typeof( events ) != \"string\" || jQuery.event.special.hover ) {\n\t\t\treturn events;\n\t\t}\n\t\tif ( rhoverHack.test( events ) ) {\n\t\t\tmigrateWarn(\"'hover' pseudo-event is deprecated, use 'mouseenter mouseleave'\");\n\t\t}\n\t\treturn events && events.replace( rhoverHack, \"mouseenter$1 mouseleave$1\" );\n\t};\n\n// Event props removed in 1.9, put them back if needed; no practical way to warn them\nif ( jQuery.event.props && jQuery.event.props[ 0 ] !== \"attrChange\" ) {\n\tjQuery.event.props.unshift( \"attrChange\", \"attrName\", \"relatedNode\", \"srcElement\" );\n}\n\n// Undocumented jQuery.event.handle was \"deprecated\" in jQuery 1.7\nif ( jQuery.event.dispatch ) {\n\tmigrateWarnProp( jQuery.event, \"handle\", jQuery.event.dispatch, \"jQuery.event.handle is undocumented and deprecated\" );\n}\n\n// Support for 'hover' pseudo-event and ajax event warnings\njQuery.event.add = function( elem, types, handler, data, selector ){\n\tif ( elem !== document && rajaxEvent.test( types ) ) {\n\t\tmigrateWarn( \"AJAX events should be attached to document: \" + types );\n\t}\n\teventAdd.call( this, elem, hoverHack( types || \"\" ), handler, data, selector );\n};\njQuery.event.remove = function( elem, types, handler, selector, mappedTypes ){\n\teventRemove.call( this, elem, hoverHack( types ) || \"\", handler, selector, mappedTypes );\n};\n\njQuery.fn.error = function() {\n\tvar args = Array.prototype.slice.call( arguments, 0);\n\tmigrateWarn(\"jQuery.fn.error() is deprecated\");\n\targs.splice( 0, 0, \"error\" );\n\tif ( arguments.length ) {\n\t\treturn this.bind.apply( this, args );\n\t}\n\t// error event should not bubble to window, although it does pre-1.7\n\tthis.triggerHandler.apply( this, args );\n\treturn this;\n};\n\njQuery.fn.toggle = function( fn, fn2 ) {\n\n\t// Don't mess with animation or css toggles\n\tif ( !jQuery.isFunction( fn ) || !jQuery.isFunction( fn2 ) ) {\n\t\treturn oldToggle.apply( this, arguments );\n\t}\n\tmigrateWarn(\"jQuery.fn.toggle(handler, handler...) is deprecated\");\n\n\t// Save reference to arguments for access in closure\n\tvar args = arguments,\n\t\tguid = fn.guid || jQuery.guid++,\n\t\ti = 0,\n\t\ttoggler = function( event ) {\n\t\t\t// Figure out which function to execute\n\t\t\tvar lastToggle = ( jQuery._data( this, \"lastToggle\" + fn.guid ) || 0 ) % i;\n\t\t\tjQuery._data( this, \"lastToggle\" + fn.guid, lastToggle + 1 );\n\n\t\t\t// Make sure that clicks stop\n\t\t\tevent.preventDefault();\n\n\t\t\t// and execute the function\n\t\t\treturn args[ lastToggle ].apply( this, arguments ) || false;\n\t\t};\n\n\t// link all the functions, so any of them can unbind this click handler\n\ttoggler.guid = guid;\n\twhile ( i < args.length ) {\n\t\targs[ i++ ].guid = guid;\n\t}\n\n\treturn this.click( toggler );\n};\n\njQuery.fn.live = function( types, data, fn ) {\n\tmigrateWarn(\"jQuery.fn.live() is deprecated\");\n\tif ( oldLive ) {\n\t\treturn oldLive.apply( this, arguments );\n\t}\n\tjQuery( this.context ).on( types, this.selector, data, fn );\n\treturn this;\n};\n\njQuery.fn.die = function( types, fn ) {\n\tmigrateWarn(\"jQuery.fn.die() is deprecated\");\n\tif ( oldDie ) {\n\t\treturn oldDie.apply( this, arguments );\n\t}\n\tjQuery( this.context ).off( types, this.selector || \"**\", fn );\n\treturn this;\n};\n\n// Turn global events into document-triggered events\njQuery.event.trigger = function( event, data, elem, onlyHandlers  ){\n\tif ( !elem & !rajaxEvent.test( event ) ) {\n\t\tmigrateWarn( \"Global events are undocumented and deprecated\" );\n\t}\n\treturn eventTrigger.call( this,  event, data, elem || document, onlyHandlers  );\n};\njQuery.each( ajaxEvents.split(\"|\"),\n\tfunction( _, name ) {\n\t\tjQuery.event.special[ name ] = {\n\t\t\tsetup: function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\t// The document needs no shimming; must be !== for oldIE\n\t\t\t\tif ( elem !== document ) {\n\t\t\t\t\tjQuery.event.add( document, name + \".\" + jQuery.guid, function() {\n\t\t\t\t\t\tjQuery.event.trigger( name, null, elem, true );\n\t\t\t\t\t});\n\t\t\t\t\tjQuery._data( this, name, jQuery.guid++ );\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tif ( this !== document ) {\n\t\t\t\t\tjQuery.event.remove( document, name + \".\" + jQuery._data( this, name ) );\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t};\n\t}\n);\n\n\n})( jQuery, window );"
  },
  {
    "path": "public/frontend/plugins/jquery-cookie/jquery.cookie.js",
    "content": "/*!\n * jQuery Cookie Plugin v1.3.1\n * https://github.com/carhartl/jquery-cookie\n *\n * Copyright 2013 Klaus Hartl\n * Released under the MIT license\n */\n(function (factory) {\n\tif (typeof define === 'function' && define.amd) {\n\t\t// AMD. Register as anonymous module.\n\t\tdefine(['jquery'], factory);\n\t} else {\n\t\t// Browser globals.\n\t\tfactory(jQuery);\n\t}\n}(function ($) {\n\n\tvar pluses = /\\+/g;\n\n\tfunction raw(s) {\n\t\treturn s;\n\t}\n\n\tfunction decoded(s) {\n\t\treturn decodeURIComponent(s.replace(pluses, ' '));\n\t}\n\n\tfunction converted(s) {\n\t\tif (s.indexOf('\"') === 0) {\n\t\t\t// This is a quoted cookie as according to RFC2068, unescape\n\t\t\ts = s.slice(1, -1).replace(/\\\\\"/g, '\"').replace(/\\\\\\\\/g, '\\\\');\n\t\t}\n\t\ttry {\n\t\t\treturn config.json ? JSON.parse(s) : s;\n\t\t} catch(er) {}\n\t}\n\n\tvar config = $.cookie = function (key, value, options) {\n\n\t\t// write\n\t\tif (value !== undefined) {\n\t\t\toptions = $.extend({}, config.defaults, options);\n\n\t\t\tif (typeof options.expires === 'number') {\n\t\t\t\tvar days = options.expires, t = options.expires = new Date();\n\t\t\t\tt.setDate(t.getDate() + days);\n\t\t\t}\n\n\t\t\tvalue = config.json ? JSON.stringify(value) : String(value);\n\n\t\t\treturn (document.cookie = [\n\t\t\t\tconfig.raw ? key : encodeURIComponent(key),\n\t\t\t\t'=',\n\t\t\t\tconfig.raw ? value : encodeURIComponent(value),\n\t\t\t\toptions.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE\n\t\t\t\toptions.path    ? '; path=' + options.path : '',\n\t\t\t\toptions.domain  ? '; domain=' + options.domain : '',\n\t\t\t\toptions.secure  ? '; secure' : ''\n\t\t\t].join(''));\n\t\t}\n\n\t\t// read\n\t\tvar decode = config.raw ? raw : decoded;\n\t\tvar cookies = document.cookie.split('; ');\n\t\tvar result = key ? undefined : {};\n\t\tfor (var i = 0, l = cookies.length; i < l; i++) {\n\t\t\tvar parts = cookies[i].split('=');\n\t\t\tvar name = decode(parts.shift());\n\t\t\tvar cookie = decode(parts.join('='));\n\n\t\t\tif (key && key === name) {\n\t\t\t\tresult = converted(cookie);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (!key) {\n\t\t\t\tresult[name] = converted(cookie);\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t};\n\n\tconfig.defaults = {};\n\n\t$.removeCookie = function (key, options) {\n\t\tif ($.cookie(key) !== undefined) {\n\t\t\t// Must not alter options, thus extending a fresh object...\n\t\t\t$.cookie(key, '', $.extend({}, options, { expires: -1 }));\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t};\n\n}));"
  },
  {
    "path": "public/frontend/plugins/js-cookie/js.cookie.js",
    "content": "/*!\n * JavaScript Cookie v2.2.0\n * https://github.com/js-cookie/js-cookie\n *\n * Copyright 2006, 2015 Klaus Hartl & Fagner Brack\n * Released under the MIT license\n */\n;(function (factory) {\n\tvar registeredInModuleLoader = false;\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(factory);\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (typeof exports === 'object') {\n\t\tmodule.exports = factory();\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (!registeredInModuleLoader) {\n\t\tvar OldCookies = window.Cookies;\n\t\tvar api = window.Cookies = factory();\n\t\tapi.noConflict = function () {\n\t\t\twindow.Cookies = OldCookies;\n\t\t\treturn api;\n\t\t};\n\t}\n}(function () {\n\tfunction extend () {\n\t\tvar i = 0;\n\t\tvar result = {};\n\t\tfor (; i < arguments.length; i++) {\n\t\t\tvar attributes = arguments[ i ];\n\t\t\tfor (var key in attributes) {\n\t\t\t\tresult[key] = attributes[key];\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tfunction init (converter) {\n\t\tfunction api (key, value, attributes) {\n\t\t\tvar result;\n\t\t\tif (typeof document === 'undefined') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Write\n\n\t\t\tif (arguments.length > 1) {\n\t\t\t\tattributes = extend({\n\t\t\t\t\tpath: '/'\n\t\t\t\t}, api.defaults, attributes);\n\n\t\t\t\tif (typeof attributes.expires === 'number') {\n\t\t\t\t\tvar expires = new Date();\n\t\t\t\t\texpires.setMilliseconds(expires.getMilliseconds() + attributes.expires * 864e+5);\n\t\t\t\t\tattributes.expires = expires;\n\t\t\t\t}\n\n\t\t\t\t// We're using \"expires\" because \"max-age\" is not supported by IE\n\t\t\t\tattributes.expires = attributes.expires ? attributes.expires.toUTCString() : '';\n\n\t\t\t\ttry {\n\t\t\t\t\tresult = JSON.stringify(value);\n\t\t\t\t\tif (/^[\\{\\[]/.test(result)) {\n\t\t\t\t\t\tvalue = result;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {}\n\n\t\t\t\tif (!converter.write) {\n\t\t\t\t\tvalue = encodeURIComponent(String(value))\n\t\t\t\t\t\t.replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);\n\t\t\t\t} else {\n\t\t\t\t\tvalue = converter.write(value, key);\n\t\t\t\t}\n\n\t\t\t\tkey = encodeURIComponent(String(key));\n\t\t\t\tkey = key.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent);\n\t\t\t\tkey = key.replace(/[\\(\\)]/g, escape);\n\n\t\t\t\tvar stringifiedAttributes = '';\n\n\t\t\t\tfor (var attributeName in attributes) {\n\t\t\t\t\tif (!attributes[attributeName]) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tstringifiedAttributes += '; ' + attributeName;\n\t\t\t\t\tif (attributes[attributeName] === true) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tstringifiedAttributes += '=' + attributes[attributeName];\n\t\t\t\t}\n\t\t\t\treturn (document.cookie = key + '=' + value + stringifiedAttributes);\n\t\t\t}\n\n\t\t\t// Read\n\n\t\t\tif (!key) {\n\t\t\t\tresult = {};\n\t\t\t}\n\n\t\t\t// To prevent the for loop in the first place assign an empty array\n\t\t\t// in case there are no cookies at all. Also prevents odd result when\n\t\t\t// calling \"get()\"\n\t\t\tvar cookies = document.cookie ? document.cookie.split('; ') : [];\n\t\t\tvar rdecode = /(%[0-9A-Z]{2})+/g;\n\t\t\tvar i = 0;\n\n\t\t\tfor (; i < cookies.length; i++) {\n\t\t\t\tvar parts = cookies[i].split('=');\n\t\t\t\tvar cookie = parts.slice(1).join('=');\n\n\t\t\t\tif (!this.json && cookie.charAt(0) === '\"') {\n\t\t\t\t\tcookie = cookie.slice(1, -1);\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tvar name = parts[0].replace(rdecode, decodeURIComponent);\n\t\t\t\t\tcookie = converter.read ?\n\t\t\t\t\t\tconverter.read(cookie, name) : converter(cookie, name) ||\n\t\t\t\t\t\tcookie.replace(rdecode, decodeURIComponent);\n\n\t\t\t\t\tif (this.json) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tcookie = JSON.parse(cookie);\n\t\t\t\t\t\t} catch (e) {}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (key === name) {\n\t\t\t\t\t\tresult = cookie;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!key) {\n\t\t\t\t\t\tresult[name] = cookie;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {}\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\n\t\tapi.set = api;\n\t\tapi.get = function (key) {\n\t\t\treturn api.call(api, key);\n\t\t};\n\t\tapi.getJSON = function () {\n\t\t\treturn api.apply({\n\t\t\t\tjson: true\n\t\t\t}, [].slice.call(arguments));\n\t\t};\n\t\tapi.defaults = {};\n\n\t\tapi.remove = function (key, attributes) {\n\t\t\tapi(key, '', extend(attributes, {\n\t\t\t\texpires: -1\n\t\t\t}));\n\t\t};\n\n\t\tapi.withConverter = init;\n\n\t\treturn api;\n\t}\n\n\treturn init(function () {});\n}));\n"
  },
  {
    "path": "public/frontend/plugins/pace/.hsdoc",
    "content": "title: \"Pace\"\nsource: \"pace.coffee\"\nassets: \"{templates/*,themes/*,docs/welcome/*,docs/lib/*,docs/resources/*.css,*.js}\"\n"
  },
  {
    "path": "public/frontend/plugins/pace/Gruntfile.coffee",
    "content": "Path = require('path')\nfs = require('fs')\n\nThemeUtils = require('./docs/lib/themes.coffee')\n\nthemeColors =\n  black:  '#000000'\n  white:  '#ffffff'\n  silver: '#d6d6d6'\n  red:    '#ee3148'\n  orange: '#eb7a55'\n  yellow: '#fcd25a'\n  green:  '#22df80'\n  blue:   '#2299dd'\n  pink:   '#e90f92'\n  purple: '#7c60e0'\n\nmodule.exports = (grunt) ->\n  grunt.registerTask 'themes', 'Compile the pace theme files', ->\n    done = @async()\n\n    options = grunt.config('themes')\n\n    grunt.file.glob options.src, (err, files) ->\n      for colorName, color of themeColors\n        for file in files\n          body = ThemeUtils.compileTheme fs.readFileSync(file).toString(), {color}\n\n          body = \"/* This is a compiled file, you should be editing the file in the templates directory */\\n\" + body\n\n          name = Path.basename file\n          name = name.replace '.tmpl', ''\n          path = Path.join options.dest, colorName, name\n\n          fs.writeFileSync path, body\n\n      done()\n\n  grunt.initConfig\n    pkg: grunt.file.readJSON(\"package.json\")\n    coffee:\n      compile:\n        files:\n          'pace.js': 'pace.coffee'\n          'docs/lib/themes.js': 'docs/lib/themes.coffee'\n\n    watch:\n      coffee:\n        files: ['pace.coffee', 'docs/lib/themes.coffee', 'templates/*']\n        tasks: [\"coffee\", \"uglify\", \"themes\"]\n\n    uglify:\n      options:\n        banner: \"/*! <%= pkg.name %> <%= pkg.version %> */\\n\"\n\n      dist:\n        src: 'pace.js'\n        dest: 'pace.min.js'\n\n    themes:\n      src: 'templates/*.tmpl.css'\n      dest: 'themes'\n\n  grunt.loadNpmTasks 'grunt-contrib-watch'\n  grunt.loadNpmTasks 'grunt-contrib-uglify'\n  grunt.loadNpmTasks 'grunt-contrib-coffee'\n\n  grunt.registerTask 'default', ['coffee', 'uglify', 'themes']\n"
  },
  {
    "path": "public/frontend/plugins/pace/LICENSE",
    "content": "Copyright (c) 2013 HubSpot, Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n"
  },
  {
    "path": "public/frontend/plugins/pace/README.md",
    "content": "pace\n====\n\nAn automatic web page progress bar.\n\nInclude [pace.js](https://raw.github.com/HubSpot/pace/v0.5.3/pace.min.js) and a [theme](http://github.hubspot.com/pace/docs/welcome/) of your choice to your page and you are done!\n\nPace will automatically monitor your Ajax requests, event loop lag, document ready state and elements on your page to decide on the progress.\n\nIf you use AMD or Browserify, require pace.js and call `pace.start()` as early in the loading process as is possible.\n\n### [Demo](http://github.hubspot.com/pace/docs/welcome/)\n\n### [Documentation](http://github.hubspot.com/pace/)\n\n### Example\n\n```html\n<head>\n  <script src=\"/pace/pace.js\"></script>\n  <link href=\"/pace/themes/pace-theme-barber-shop.css\" rel=\"stylesheet\" />\n</head>\n```\n"
  },
  {
    "path": "public/frontend/plugins/pace/bower.json",
    "content": "{\n  \"name\": \"PACE\",\n  \"main\": \"pace.js\",\n  \"version\": \"0.5.6\",\n  \"homepage\": \"http://github.hubspot.com/pace/docs/welcome\",\n  \"authors\": [\n    \"Zack Bloom <zackbloom@gmail.com>\",\n    \"Adam Schwartz <adam.flynn.schwartz@gmail.com>\"\n  ],\n  \"description\": \"Automatic page load progress bar\",\n  \"keywords\": [\n    \"loading\",\n    \"load\",\n    \"pageload\",\n    \"progress\",\n    \"activity\",\n    \"ajax\",\n    \"spinner\",\n    \"progress\",\n    \"bar\",\n    \"automatic\",\n    \"client-side\"\n  ],\n  \"license\": \"MIT\",\n  \"ignore\": [\n    \".*\",\n    \"Gruntfile.coffee\",\n    \"bower_components\",\n    \"docs\",\n    \"node_modules\",\n    \"package.json\",\n    \"templates\",\n    \"tests\"\n  ]\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/docs/intro.md",
    "content": "pace\n====\n\nInclude [pace.js](https://raw.github.com/HubSpot/pace/v0.5.3/pace.min.js) and the\n[theme](http://github.hubspot.com/pace/docs/welcome/) css of your choice on your page\n(as early as is possible), and you're done!\n\nPace will automatically monitor your ajax requests, event loop lag, document\nready state, and elements on your page to decide the progress.  On ajax navigation\nit will begin again!\n\nIf you use AMD or Browserify, require in pace.js and call `pace.start()` as early in\nthe loading process as is possible.\n\nExample\n-------\n\n```html\n<head>\n  <script src=\"/pace/pace.js\"></script>\n  <link href=\"/pace/themes/pace-theme-barber-shop.css\" rel=\"stylesheet\" />\n</head>\n```\n\nConfiguration\n-------------\n\nPace is fully automatic, no configuration is necessary to get started.\n\nIf you would like to make some tweaks, here's how:\n\nYou can set `window.paceOptions` before bringing in the file:\n\n```javascript\npaceOptions = {\n  // Disable the 'elements' source\n  elements: false,\n\n  // Only show the progress on regular and ajax-y page navigation,\n  // not every request\n  restartOnRequestAfter: false\n}\n```\n\nYou can also put options on the script tag:\n\n```html\n<script data-pace-options='{ \"ajax\": false }' src='pace.js'></script>\n```\n\nIf you're using AMD or Browserify, you can pass your options to `start`:\n\n```javascript\ndefine(['pace'], function(pace){\n  pace.start({\n    document: false\n  });\n});\n```\n\nThemes\n------\n\nPace includes a bunch of [themes](http://github.hubspot.com/pace/docs/welcome/)\nto get you started.  Just include the appropriate css file.  Send us a PR with\nany interesting themes you create.\n\nCollectors\n----------\n\nCollectors are the bits of code which gather progress information.  Pace includes four default collectors:\n\n- Ajax\n\n  Monitors all ajax requests on the page\n\n- Elements\n\n  Checks for the existance of specific elements on the page\n\n- Document\n\n  Checks the document readyState\n\n- Event Lag\n\n  Checks for event loop lag signaling that javascript is being executed\n\nThey can each be configured or disabled through configuration options of the same name.\n\n```javascript\npaceOptions = {\n  ajax: false, // disabled\n  document: false, // disabled\n  eventLag: false, // disabled\n  elements: {\n    selectors: ['.my-page']\n  }\n};\n```\n\nAdd your own classes to `paceOptions.extraSources` to add more sources.  Each source should either\nhave a `.progress` property, or a `.elements` property which is a list of objects with\n`.progress` properties.  Pace will automatically handle all scaling to make the progress\nchanges look smooth to the user.\n\nElements\n--------\n\nElements being rendered to the screen is one way for us to decide that the page has been\nrendered.  If you would like to use that source of information (not required at all),\nspecify one or more selectors.  You can comma seperate the selectors to propertly handle\nerror states, where the progress bar should disappear, but the element we are looking for\nmay never appear:\n\n```javascript\npaceOptions = {\n  elements: {\n    selectors: ['.timeline,.timeline-error', '.user-profile,.profile-error']\n  }\n}\n```\n\nPace will consider the elements test successful when each selector matches something.  For\nthis example, when either `.timeline` or `.timeline-error` exist, and either `.user-profile`\nor `.profile-error` exist.\n\nRestart Rules\n-------------\n\nMost users want the progress bar to automatically restart when a pushState event occurs\n(generally means ajax navigation is occuring).  You can disable this:\n\n```javascript\npaceOptions = {\n  restartOnPushState: false\n}\n```\n\nYou can also have pace restart on every ajax request which lasts longer than x ms.  You'll want to\ndisable this if you make ajax requests the user doesn't need to know about, like precaching:\n\n```javascript\npaceOptions = {\n  restartOnRequestAfter: false\n}\n```\n\nYou can always trigger a restart manually by calling `Pace.restart()`\n\nSee [the source](https://github.com/HubSpot/pace/blob/master/pace.coffee) for a full list of all options.\n\nAPI\n---\n\nPace exposes the following methods:\n\n- `Pace.start`: Show the progress bar and start updating.  Called automatically if you don't use AMD or CommonJS.\n\n- `Pace.restart`: Show the progress bar if it's hidden and start reporting the progress from scratch.  Called automatically\nwhenever `pushState` or `replaceState` is called by default.\n\n- `Pace.stop`: Hide the progress bar and stop updating it.\n\n- `Pace.track`: Explicitly track one or more requests, see Tracking below\n\n- `Pace.ignore`: Expliticly ignore one or more requests, see Tracking below\n\nEvents\n------\n\nPace fires the following events:\n\n- `start`: When pace is initially started, or as a part of a restart\n- `stop`: When pace is manually stopped, or as a part of a restart\n- `restart`: When pace is restarted (manually, or by a new AJAX request)\n- `done`: When pace is finished\n- `hide`: When the pace is hidden (can be later than `done`, based on `ghostTime` and `minTime`)\n\nYou can bind onto events using the `on`, `off` and `once` methods:\n\n- `Pace.on(event, handler, [context])`: Call `handler` (optionally with context) when `event` is triggered\n- `Pace.off(event, [handler])`: Unbind the provided `event` and `handler` combination.\n- `Pace.once(event, handler, [context])`: Bind `handler` to the next (and only the next) incidence of `event`\n\nTracking\n--------\n\nBy default, Pace will show any ajax requests which begin as a part of a normal or ajax-y page load, or which last longer than\n500ms.\n\nYou can disable all ajax tracking by setting `ajax` to false:\n\n```javascript\nPace.options = {\n  ajax: false\n}\n```\n\nYou can disable ajax tracking except on page navigation by setting `restartOnRequestAfter` to false:\n\n```javascript\nPace.options = {\n  restartOnRequestAfter: false\n}\n```\n\nYou can manually disable tracking for a specific request or requests by triggering them within a `Pace.ignore` callback:\n\n```javascript\nPace.ignore(function(){\n  $.ajax(...)\n});\n```\n\nYou can force the progress bar to be shown for a specific request by triggering them within a `Pace.track` callback:\n\n```javascript\nPace.track(function(){\n  $.ajax(...)\n});\n```\n\nYou can also ignore URLs based on a pattern:\n\n```javascript\nPace.options = {\n  ajax: {\n    ignoreURLs: ['some-substring', /some-regexp/]\n  }\n}\n```\n\nDependencies\n------------\n\nNone!\n\nSupport\n-------\n\nPace is designed to support IE8+ (standards mode), FF 3.5+, Chrome, Safari 4+, Opera 10.5+, and all modern\nmobile browsers.  If you run into a compatibility issue, or can make a case for supporting something else,\nplease create an issue.\n\nSize\n----\n\npace.js is 4kb minified and gzipped.  The themes vary between 0.5 and 4kb.\n\nIssues\n------\n\nWe have obviously not tested this on every website.  If you run into an issue, or find a way the automatic\ndetection could be better, please [create an Issue](https://github.com/HubSpot/pace/issues/new).  If you can include a test case, that's even better.\n\nContributing\n------------\n\nPRs Welcome!\n\nBuilding requires node.js.\n\n```bash\nnpm install\ngrunt\n```\n\nYou can also run `grunt watch` to have it automatically build as you make changes.\n\nThere is no need to include compiled files in PRs.\n\nCredits\n-------\n\n[HubSpot](http://dev.hubspot.com)\n\nJavascript by [Zack Bloom](http://twitter.com/zackbloom)\nCSS by [Adam Schwartz](http://twitter.com/adamfschwartz)\n\nThemes inspired by [Mary Lou](http://tympanus.net/codrops/2013/09/18/creative-loading-effects/)\n\nProject inspired by [nprogress](http://ricostacruz.com/nprogress/)\n"
  },
  {
    "path": "public/frontend/plugins/pace/docs/lib/color.js",
    "content": "/*\nCopyright (c) 2012 Heather Arthur\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\n*/!function(a,b,c){function d(c,f){if(!b[c]){if(!a[c]){var g=\"function\"==typeof require&&require;if(!f&&g)return g(c,!0);if(e)return e(c,!0);throw new Error(\"Cannot find module '\"+c+\"'\")}var h=b[c]={exports:{}};a[c][0].call(h.exports,function(b){var e=a[c][1][b];return d(e?e:b)},h,h.exports)}return b[c].exports}for(var e=\"function\"==typeof require&&require,f=0;f<c.length;f++)d(c[f]);return d}({1:[function(a){Color=a(\"./color\")},{\"./color\":2}],2:[function(a,b){var c=a(\"color-convert\"),d=a(\"color-string\");b.exports=function(a){return new e(a)};var e=function(a){if(this.values={rgb:[0,0,0],hsl:[0,0,0],hsv:[0,0,0],cmyk:[0,0,0,0],alpha:1},\"string\"==typeof a){var b=d.getRgba(a);b?this.setValues(\"rgb\",b):(b=d.getHsla(a))&&this.setValues(\"hsl\",b)}else if(\"object\"==typeof a){var b=a;void 0!==b.r||void 0!==b.red?this.setValues(\"rgb\",b):void 0!==b.l||void 0!==b.lightness?this.setValues(\"hsl\",b):void 0!==b.v||void 0!==b.value?this.setValues(\"hsv\",b):(void 0!==b.c||void 0!==b.cyan)&&this.setValues(\"cmyk\",b)}};e.prototype={rgb:function(){return this.setSpace(\"rgb\",arguments)},hsl:function(){return this.setSpace(\"hsl\",arguments)},hsv:function(){return this.setSpace(\"hsv\",arguments)},cmyk:function(){return this.setSpace(\"cmyk\",arguments)},rgbArray:function(){return this.values.rgb},hslArray:function(){return this.values.hsl},hsvArray:function(){return this.values.hsv},cmykArray:function(){return this.values.cmyk},rgbaArray:function(){var a=this.values.rgb;return a.concat([this.values.alpha])},hslaArray:function(){var a=this.values.hsl;return a.concat([this.values.alpha])},alpha:function(a){return void 0===a?this.values.alpha:(this.setValues(\"alpha\",a),this)},red:function(a){return this.setChannel(\"rgb\",0,a)},green:function(a){return this.setChannel(\"rgb\",1,a)},blue:function(a){return this.setChannel(\"rgb\",2,a)},hue:function(a){return this.setChannel(\"hsl\",0,a)},saturation:function(a){return this.setChannel(\"hsl\",1,a)},lightness:function(a){return this.setChannel(\"hsl\",2,a)},saturationv:function(a){return this.setChannel(\"hsv\",1,a)},value:function(a){return this.setChannel(\"hsv\",2,a)},cyan:function(a){return this.setChannel(\"cmyk\",0,a)},magenta:function(a){return this.setChannel(\"cmyk\",1,a)},yellow:function(a){return this.setChannel(\"cmyk\",2,a)},black:function(a){return this.setChannel(\"cmyk\",3,a)},hexString:function(){return d.hexString(this.values.rgb)},rgbString:function(){return d.rgbString(this.values.rgb,this.values.alpha)},rgbaString:function(){return d.rgbaString(this.values.rgb,this.values.alpha)},percentString:function(){return d.percentString(this.values.rgb,this.values.alpha)},hslString:function(){return d.hslString(this.values.hsl,this.values.alpha)},hslaString:function(){return d.hslaString(this.values.hsl,this.values.alpha)},keyword:function(){return d.keyword(this.values.rgb,this.values.alpha)},luminosity:function(){for(var a=this.values.rgb,b=[],c=0;c<a.length;c++){var d=a[c]/255;b[c]=.03928>=d?d/12.92:Math.pow((d+.055)/1.055,2.4)}return.2126*b[0]+.7152*b[1]+.0722*b[2]},contrast:function(a){var b=this.luminosity(),c=a.luminosity();return b>c?(b+.05)/(c+.05):(c+.05)/(b+.05)},dark:function(){var a=this.values.rgb,b=(299*a[0]+587*a[1]+114*a[2])/1e3;return 128>b},light:function(){return!this.dark()},negate:function(){for(var a=[],b=0;3>b;b++)a[b]=255-this.values.rgb[b];return this.setValues(\"rgb\",a),this},lighten:function(a){return this.values.hsl[2]+=this.values.hsl[2]*a,this.setValues(\"hsl\",this.values.hsl),this},darken:function(a){return this.values.hsl[2]-=this.values.hsl[2]*a,this.setValues(\"hsl\",this.values.hsl),this},saturate:function(a){return this.values.hsl[1]+=this.values.hsl[1]*a,this.setValues(\"hsl\",this.values.hsl),this},desaturate:function(a){return this.values.hsl[1]-=this.values.hsl[1]*a,this.setValues(\"hsl\",this.values.hsl),this},greyscale:function(){var a=this.values.rgb,b=.3*a[0]+.59*a[1]+.11*a[2];return this.setValues(\"rgb\",[b,b,b]),this},clearer:function(a){return this.setValues(\"alpha\",this.values.alpha-this.values.alpha*a),this},opaquer:function(a){return this.setValues(\"alpha\",this.values.alpha+this.values.alpha*a),this},rotate:function(a){var b=this.values.hsl[0];return b=(b+a)%360,b=0>b?360+b:b,this.values.hsl[0]=b,this.setValues(\"hsl\",this.values.hsl),this},mix:function(a,b){b=1-(null==b?.5:b);for(var c=2*b-1,d=this.alpha()-a.alpha(),e=((-1==c*d?c:(c+d)/(1+c*d))+1)/2,f=1-e,g=this.rgbArray(),h=a.rgbArray(),i=0;i<g.length;i++)g[i]=g[i]*e+h[i]*f;this.setValues(\"rgb\",g);var j=this.alpha()*b+a.alpha()*(1-b);return this.setValues(\"alpha\",j),this},toJSON:function(){return this.rgb()}},e.prototype.getValues=function(a){for(var b={},c=0;c<a.length;c++)b[a[c]]=this.values[a][c];return 1!=this.values.alpha&&(b.a=this.values.alpha),b},e.prototype.setValues=function(a,b){var d={rgb:[\"red\",\"green\",\"blue\"],hsl:[\"hue\",\"saturation\",\"lightness\"],hsv:[\"hue\",\"saturation\",\"value\"],cmyk:[\"cyan\",\"magenta\",\"yellow\",\"black\"]},e={rgb:[255,255,255],hsl:[360,100,100],hsv:[360,100,100],cmyk:[100,100,100,100]},f=1;if(\"alpha\"==a)f=b;else if(b.length)this.values[a]=b.slice(0,a.length),f=b[a.length];else if(void 0!==b[a[0]]){for(var g=0;g<a.length;g++)this.values[a][g]=b[a[g]];f=b.a}else if(void 0!==b[d[a][0]]){for(var h=d[a],g=0;g<a.length;g++)this.values[a][g]=b[h[g]];f=b.alpha}if(this.values.alpha=Math.max(0,Math.min(1,void 0!==f?f:this.values.alpha)),\"alpha\"!=a){for(var i in d){i!=a&&(this.values[i]=c[a][i](this.values[a]));for(var g=0;g<i.length;g++){var j=Math.max(0,Math.min(e[i][g],this.values[i][g]));this.values[i][g]=Math.round(j)}}return!0}},e.prototype.setSpace=function(a,b){var c=b[0];return void 0===c?this.getValues(a):(\"number\"==typeof c&&(c=Array.prototype.slice.call(b)),this.setValues(a,c),this)},e.prototype.setChannel=function(a,b,c){return void 0===c?this.values[a][b]:(this.values[a][b]=c,this.setValues(a,this.values[a]),this)}},{\"color-convert\":3,\"color-string\":4}],3:[function(a,b,c){var d=a(\"./conversions\"),c={};b.exports=c;for(var e in d){c[e+\"Raw\"]=function(a){return function(b){return\"number\"==typeof b&&(b=Array.prototype.slice.call(arguments)),d[a](b)}}(e);var f=/(\\w+)2(\\w+)/.exec(e),g=f[1],h=f[2];c[g]=c[g]||{},c[g][h]=c[e]=function(a){return function(b){\"number\"==typeof b&&(b=Array.prototype.slice.call(arguments));var c=d[a](b);if(\"string\"==typeof c||void 0===c)return c;for(var e=0;e<c.length;e++)c[e]=Math.round(c[e]);return c}}(e)}},{\"./conversions\":5}],5:[function(a,b){function c(a){var b,c,d,e=a[0]/255,f=a[1]/255,g=a[2]/255,h=Math.min(e,f,g),i=Math.max(e,f,g),j=i-h;return i==h?b=0:e==i?b=(f-g)/j:f==i?b=2+(g-e)/j:g==i&&(b=4+(e-f)/j),b=Math.min(60*b,360),0>b&&(b+=360),d=(h+i)/2,c=i==h?0:.5>=d?j/(i+h):j/(2-i-h),[b,100*c,100*d]}function d(a){var b,c,d,e=a[0],f=a[1],g=a[2],h=Math.min(e,f,g),i=Math.max(e,f,g),j=i-h;return c=0==i?0:1e3*(j/i)/10,i==h?b=0:e==i?b=(f-g)/j:f==i?b=2+(g-e)/j:g==i&&(b=4+(e-f)/j),b=Math.min(60*b,360),0>b&&(b+=360),d=1e3*(i/255)/10,[b,c,d]}function e(a){var b,c,d,e,f=a[0]/255,g=a[1]/255,h=a[2]/255;return e=Math.min(1-f,1-g,1-h),b=(1-f-e)/(1-e),c=(1-g-e)/(1-e),d=(1-h-e)/(1-e),[100*b,100*c,100*d,100*e]}function f(a){return A[JSON.stringify(a)]}function g(a){var b=a[0]/255,c=a[1]/255,d=a[2]/255;b=b>.04045?Math.pow((b+.055)/1.055,2.4):b/12.92,c=c>.04045?Math.pow((c+.055)/1.055,2.4):c/12.92,d=d>.04045?Math.pow((d+.055)/1.055,2.4):d/12.92;var e=.4124*b+.3576*c+.1805*d,f=.2126*b+.7152*c+.0722*d,g=.0193*b+.1192*c+.9505*d;return[100*e,100*f,100*g]}function h(a){var b,c,d,e=g(a),f=e[0],h=e[1],i=e[2];return f/=95.047,h/=100,i/=108.883,f=f>.008856?Math.pow(f,1/3):7.787*f+16/116,h=h>.008856?Math.pow(h,1/3):7.787*h+16/116,i=i>.008856?Math.pow(i,1/3):7.787*i+16/116,b=116*h-16,c=500*(f-h),d=200*(h-i),[b,c,d]}function i(a){var b,c,d,e,f,g=a[0]/360,h=a[1]/100,i=a[2]/100;if(0==h)return f=255*i,[f,f,f];c=.5>i?i*(1+h):i+h-i*h,b=2*i-c,e=[0,0,0];for(var j=0;3>j;j++)d=g+1/3*-(j-1),0>d&&d++,d>1&&d--,f=1>6*d?b+6*(c-b)*d:1>2*d?c:2>3*d?b+6*(c-b)*(2/3-d):b,e[j]=255*f;return e}function j(a){var b,c,d=a[0],e=a[1]/100,f=a[2]/100;return f*=2,e*=1>=f?f:2-f,c=(f+e)/2,b=2*e/(f+e),[d,100*e,100*c]}function k(a){return e(i(a))}function l(a){return f(i(a))}function m(a){var b=a[0]/60,c=a[1]/100,d=a[2]/100,e=Math.floor(b)%6,f=b-Math.floor(b),g=255*d*(1-c),h=255*d*(1-c*f),i=255*d*(1-c*(1-f)),d=255*d;switch(e){case 0:return[d,i,g];case 1:return[h,d,g];case 2:return[g,d,i];case 3:return[g,h,d];case 4:return[i,g,d];case 5:return[d,g,h]}}function n(a){var b,c,d=a[0],e=a[1]/100,f=a[2]/100;return c=(2-e)*f,b=e*f,b/=1>=c?c:2-c,c/=2,[d,100*b,100*c]}function o(a){return e(m(a))}function p(a){return f(m(a))}function q(a){var b,c,d,e=a[0]/100,f=a[1]/100,g=a[2]/100,h=a[3]/100;return b=1-Math.min(1,e*(1-h)+h),c=1-Math.min(1,f*(1-h)+h),d=1-Math.min(1,g*(1-h)+h),[255*b,255*c,255*d]}function r(a){return c(q(a))}function s(a){return d(q(a))}function t(a){return f(q(a))}function u(a){var b,c,d,e=a[0]/100,f=a[1]/100,g=a[2]/100;return b=3.2406*e+-1.5372*f+g*-.4986,c=e*-.9689+1.8758*f+.0415*g,d=.0557*e+f*-.204+1.057*g,b=b>.0031308?1.055*Math.pow(b,1/2.4)-.055:b=12.92*b,c=c>.0031308?1.055*Math.pow(c,1/2.4)-.055:c=12.92*c,d=d>.0031308?1.055*Math.pow(d,1/2.4)-.055:d=12.92*d,b=0>b?0:b,c=0>c?0:c,d=0>d?0:d,[255*b,255*c,255*d]}function v(a){return z[a]}function w(a){return c(v(a))}function x(a){return d(v(a))}function y(a){return e(v(a))}b.exports={rgb2hsl:c,rgb2hsv:d,rgb2cmyk:e,rgb2keyword:f,rgb2xyz:g,rgb2lab:h,hsl2rgb:i,hsl2hsv:j,hsl2cmyk:k,hsl2keyword:l,hsv2rgb:m,hsv2hsl:n,hsv2cmyk:o,hsv2keyword:p,cmyk2rgb:q,cmyk2hsl:r,cmyk2hsv:s,cmyk2keyword:t,keyword2rgb:v,keyword2hsl:w,keyword2hsv:x,keyword2cmyk:y,xyz2rgb:u};var z={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],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],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},A={};for(var B in z)A[JSON.stringify(z[B])]=B},{}],4:[function(a,b){function c(a){if(a){var b=/^#([a-fA-F0-9]{3})$/,c=/^#([a-fA-F0-9]{6})$/,d=/^rgba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*([\\d\\.]+)\\s*)?\\)$/,e=/^rgba?\\(\\s*([\\d\\.]+)\\%\\s*,\\s*([\\d\\.]+)\\%\\s*,\\s*([\\d\\.]+)\\%\\s*(?:,\\s*([\\d\\.]+)\\s*)?\\)$/,f=/(\\D+)/,g=[0,0,0],h=1,i=a.match(b);if(i){i=i[1];for(var j=0;j<g.length;j++)g[j]=parseInt(i[j]+i[j],16)}else if(i=a.match(c)){i=i[1];for(var j=0;j<g.length;j++)g[j]=parseInt(i.slice(2*j,2*j+2),16)}else if(i=a.match(d)){for(var j=0;j<g.length;j++)g[j]=parseInt(i[j+1]);h=parseFloat(i[4])}else if(i=a.match(e)){for(var j=0;j<g.length;j++)g[j]=Math.round(2.55*parseFloat(i[j+1]));h=parseFloat(i[4])}else if(i=a.match(f)){if(\"transparent\"==i[1])return[0,0,0,0];if(g=r.keyword2rgb(i[1]),!g)return}for(var j=0;j<g.length;j++)g[j]=p(g[j],0,255);return h=h||0==h?p(h,0,1):1,g.push(h),g}}function d(a){if(a){var b=/^hsla?\\(\\s*(\\d+)\\s*,\\s*([\\d\\.]+)%\\s*,\\s*([\\d\\.]+)%\\s*(?:,\\s*([\\d\\.]+)\\s*)?\\)/,c=a.match(b);if(c){var d=p(parseInt(c[1]),0,360),e=p(parseFloat(c[2]),0,100),f=p(parseFloat(c[3]),0,100),g=p(parseFloat(c[4])||1,0,1);return[d,e,f,g]}}}function e(a){return c(a).slice(0,3)}function f(a){return d(a).slice(0,3)}function g(a){var b=c(a);return b?b[3]:(b=d(a))?b[3]:void 0}function h(a){return\"#\"+q(a[0])+q(a[1])+q(a[2])}function i(a,b){return 1>b||a[3]&&a[3]<1?j(a,b):\"rgb(\"+a[0]+\", \"+a[1]+\", \"+a[2]+\")\"}function j(a,b){return void 0===b&&(b=void 0!==a[3]?a[3]:1),\"rgba(\"+a[0]+\", \"+a[1]+\", \"+a[2]+\", \"+b+\")\"}function k(a,b){if(1>b||a[3]&&a[3]<1)return l(a,b);var c=Math.round(100*(a[0]/255)),d=Math.round(100*(a[1]/255)),e=Math.round(100*(a[2]/255));return\"rgb(\"+c+\"%, \"+d+\"%, \"+e+\"%)\"}function l(a,b){var c=Math.round(100*(a[0]/255)),d=Math.round(100*(a[1]/255)),e=Math.round(100*(a[2]/255));return\"rgba(\"+c+\"%, \"+d+\"%, \"+e+\"%, \"+(b||a[3]||1)+\")\"}function m(a,b){return 1>b||a[3]&&a[3]<1?n(a,b):\"hsl(\"+a[0]+\", \"+a[1]+\"%, \"+a[2]+\"%)\"}function n(a,b){return\"hsla(\"+a[0]+\", \"+a[1]+\"%, \"+a[2]+\"%, \"+(b||a[3]||1)+\")\"}function o(a){return r.rgb2keyword(a.slice(0,3))}function p(a,b,c){return Math.min(Math.max(b,a),c)}function q(a){var b=a.toString(16).toUpperCase();return b.length<2?\"0\"+b:b}var r=a(\"color-convert\");b.exports={getRgba:c,getHsla:d,getRgb:e,getHsl:f,getAlpha:g,hexString:h,rgbString:i,rgbaString:j,percentString:k,percentaString:l,hslString:m,hslaString:n,keyword:o}},{\"color-convert\":3}]},{},[1]);\n"
  },
  {
    "path": "public/frontend/plugins/pace/docs/lib/themes.coffee",
    "content": "if module?\n  vm = require('vm')\n\n  # Used by the eval'd code\n  Color = require('color')\n\nloadTheme = (name, cb) ->\n  $.ajax\n    url: \"/pace/templates/pace-theme-#{ name }.tmpl.css\"\n    success: cb\n\ncompileTheme = (body, args={}) ->\n  body.replace /`([\\s\\S]*?)`/gm, (match, code) ->\n    if module?\n      val = vm.runInNewContext code, {args, Color}\n    else\n      # It matters that args is in the context\n      Color = window.Color\n      val = eval(code)\n\n    val\n\nif module?\n  module.exports = {compileTheme}\nelse\n  window.loadTheme = loadTheme\n  window.compileTheme = compileTheme\n"
  },
  {
    "path": "public/frontend/plugins/pace/docs/lib/themes.js",
    "content": "(function() {\n  var Color, compileTheme, loadTheme, vm;\n\n  if (typeof module !== \"undefined\" && module !== null) {\n    vm = require('vm');\n    Color = require('color');\n  }\n\n  loadTheme = function(name, cb) {\n    return $.ajax({\n      url: \"/pace/templates/pace-theme-\" + name + \".tmpl.css\",\n      success: cb\n    });\n  };\n\n  compileTheme = function(body, args) {\n    if (args == null) {\n      args = {};\n    }\n    return body.replace(/`([\\s\\S]*?)`/gm, function(match, code) {\n      var val;\n      if (typeof module !== \"undefined\" && module !== null) {\n        val = vm.runInNewContext(code, {\n          args: args,\n          Color: Color\n        });\n      } else {\n        Color = window.Color;\n        val = eval(code);\n      }\n      return val;\n    });\n  };\n\n  if (typeof module !== \"undefined\" && module !== null) {\n    module.exports = {\n      compileTheme: compileTheme\n    };\n  } else {\n    window.loadTheme = loadTheme;\n    window.compileTheme = compileTheme;\n  }\n\n}).call(this);\n"
  },
  {
    "path": "public/frontend/plugins/pace/docs/resources/barber-pole-orange.css",
    "content": ".pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace-inactive {\n  display: none;\n}\n\n.pace .pace-progress {\n  background-color: #EE5C00;\n  position: absolute;\n  z-index: 100;\n  top: 0;\n  left: 0;\n  height: 42px;\n  overflow: hidden;\n  pointer-events: none;\n  opacity: 0.5;\n}\n\n.pace .pace-progress-inner {\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: -32px;\n  bottom: 0;\n\n  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.2)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.2)), color-stop(0.75, rgba(255, 255, 255, 0.2)), color-stop(0.75, transparent), to(transparent));\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);\n  background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);\n  -webkit-background-size: 32px 32px;\n  -moz-background-size: 32px 32px;\n  -o-background-size: 32px 32px;\n  background-size: 32px 32px;\n\n  -webkit-animation: pace-stripe-animation 500ms linear infinite;\n  -moz-animation: pace-stripe-animation 500ms linear infinite;\n  -ms-animation: pace-stripe-animation 500ms linear infinite;\n  -o-animation: pace-stripe-animation 500ms linear infinite;\n  animation: pace-stripe-animation 500ms linear infinite;\n}\n\n@-webkit-keyframes pace-stripe-animation {\n  0% { -webkit-transform: none; transform: none; }\n  100% { -webkit-transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n@-moz-keyframes pace-stripe-animation {\n  0% { -moz-transform: none; transform: none; }\n  100% { -moz-transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n@-o-keyframes pace-stripe-animation {\n  0% { -o-transform: none; transform: none; }\n  100% { -o-transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n@-ms-keyframes pace-stripe-animation {\n  0% { -ms-transform: none; transform: none; }\n  100% { -ms-transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n@keyframes pace-stripe-animation {\n  0% { transform: none; transform: none; }\n  100% { transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/docs/resources/flash-white.css",
    "content": ".pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace-inactive {\n  display: none;\n}\n\n.pace .pace-progress {\n  background: #fcfffc;\n  position: fixed;\n  z-index: 100;\n  top: 0;\n  left: 0;\n  height: 2px;\n}\n\n.pace .pace-progress-inner {\n  display: block;\n  position: absolute;\n  right: 0px;\n  width: 100px;\n  height: 100%;\n  box-shadow: 0 0 10px #fcfffc, 0 0 5px #fcfffc;\n  opacity: 1.0;\n  -webkit-transform: rotate(3deg) translate(0px, -4px);\n  -moz-transform: rotate(3deg) translate(0px, -4px);\n  -ms-transform: rotate(3deg) translate(0px, -4px);\n  -o-transform: rotate(3deg) translate(0px, -4px);\n  transform: rotate(3deg) translate(0px, -4px);\n}\n\n.pace .pace-activity {\n  display: block;\n  position: fixed;\n  z-index: 100;\n  top: 15px;\n  right: 15px;\n  width: 14px;\n  height: 14px;\n  border: solid 2px transparent;\n  border-top-color: #fcfffc;\n  border-left-color: #fcfffc;\n  border-radius: 10px;\n  -webkit-animation: pace-spinner 400ms linear infinite;\n  -moz-animation: pace-spinner 400ms linear infinite;\n  -ms-animation: pace-spinner 400ms linear infinite;\n  -o-animation: pace-spinner 400ms linear infinite;\n  animation: pace-spinner 400ms linear infinite;\n}\n\n@-webkit-keyframes pace-spinner {\n  0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@-moz-keyframes pace-spinner {\n  0% { -moz-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -moz-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@-o-keyframes pace-spinner {\n  0% { -o-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -o-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@-ms-keyframes pace-spinner {\n  0% { -ms-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -ms-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@keyframes pace-spinner {\n  0% { transform: rotate(0deg); transform: rotate(0deg); }\n  100% { transform: rotate(360deg); transform: rotate(360deg); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/docs/resources/templates/index.jade",
    "content": "extends index\n\nappend early-head\n  <script src=\"/pace/pace.js\"></script>\n  <link rel=\"stylesheet\" href=\"/pace/docs/resources/barber-pole-orange.css\"></link>\n"
  },
  {
    "path": "public/frontend/plugins/pace/docs/resources/templates/page.jade",
    "content": "extends index\n\nappend early-head\n  <script src=\"/pace/pace.js\"></script>\n  <link rel=\"stylesheet\" href=\"/pace/docs/resources/barber-pole-orange.css\"></link>\n"
  },
  {
    "path": "public/frontend/plugins/pace/docs/welcome/index.html",
    "content": "<!DOCTYPE html>\n<!--[if lt IE 7]> <html class=\"no-js ie6 ie9-and-less ie8-and-less ie7-and-less\" lang=\"en\"> <![endif]-->\n<!--[if IE 7]>    <html class=\"no-js ie7 ie9-and-less ie8-and-less ie7-and-less\" lang=\"en\"> <![endif]-->\n<!--[if IE 8]>    <html class=\"no-js ie8 ie9-and-less ie8-and-less\" lang=\"en\"> <![endif]-->\n<!--[if IE 9]>    <html class=\"no-js ie9 ie9-and-less\" lang=\"en\"> <![endif]-->\n<!--[if gt IE 9]><!--> <html class=\"no-js\" lang=\"en\"> <!--<![endif]-->\n    <head>\n        <meta charset=\"utf-8\">\n        <meta http-equiv=\"X-UA-Compatible\" content=\"chrome=1\">\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, user-scalable=no\">\n        <title>PACE — Automatic page load progress bars</title>\n        <meta name=\"description\" content=\"Pace is a Javascript and CSS library to automatically add beautiful progress and activity indicators for page loads and ajax navigation. It is free and open source and was developed by HubSpot developers Adam Schwartz (@adamfschwartz) and Zack Bloom (@zackbloom).\">\n        <link rel=\"icon\" href=\"http://static.hubspot.com/favicon.ico\">\n        <script type=\"text/javascript\" src=\"//use.typekit.net/jbn8qxr.js\"></script>\n        <script type=\"text/javascript\" src=\"//cdnjs.cloudflare.com/ajax/libs/modernizr/2.6.2/modernizr.min.js\"></script>\n        <script type=\"text/javascript\">try{Typekit.load();}catch(e){}</script>\n        <script src=\"//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js\"></script>\n        <script src=\"/pace/docs/lib/color.js\"></script>\n        <script src=\"/pace/docs/lib/themes.js\"></script>\n        <script src=\"/pace/pace.js\"></script>\n        <link href=\"/pace/docs/resources/flash-white.css\" rel=\"stylesheet\" />\n    </head>\n    <body>\n        <style id=\"app-colors\">\n            .section.colored, a.download-src-link, .button {\n                background: #29d;\n            }\n\n            a, a:hover, a:active, .header .title .title2:before {\n                color: #29d;\n            }\n        </style>\n        <style>\n            html, body {\n                margin: 0;\n                height: 100%;\n                color: #000;\n            }\n\n            a, a:hover, a:active {\n                text-decoration: none\n            }\n\n            body {\n                font-family: \"proxima-nova\", \"Helvetica Neue\", sans-serif;\n            }\n\n            @media (min-width: 1700px) { html { font-size: 188%; } }\n            @media (max-width: 1700px) { html { font-size: 188%; } }\n            @media (max-width: 1680px) { html { font-size: 186%; } }\n            @media (max-width: 1660px) { html { font-size: 184%; } }\n            @media (max-width: 1640px) { html { font-size: 182%; } }\n            @media (max-width: 1620px) { html { font-size: 180%; } }\n            @media (max-width: 1600px) { html { font-size: 178%; } }\n            @media (max-width: 1580px) { html { font-size: 176%; } }\n            @media (max-width: 1560px) { html { font-size: 174%; } }\n            @media (max-width: 1540px) { html { font-size: 172%; } }\n            @media (max-width: 1520px) { html { font-size: 170%; } }\n            @media (max-width: 1500px) { html { font-size: 168%; } }\n            @media (max-width: 1480px) { html { font-size: 166%; } }\n            @media (max-width: 1460px) { html { font-size: 164%; } }\n            @media (max-width: 1440px) { html { font-size: 162%; } }\n            @media (max-width: 1420px) { html { font-size: 160%; } }\n            @media (max-width: 1400px) { html { font-size: 158%; } }\n            @media (max-width: 1380px) { html { font-size: 156%; } }\n            @media (max-width: 1360px) { html { font-size: 154%; } }\n            @media (max-width: 1340px) { html { font-size: 152%; } }\n            @media (max-width: 1320px) { html { font-size: 150%; } }\n            @media (max-width: 1300px) { html { font-size: 148%; } }\n            @media (max-width: 1280px) { html { font-size: 146%; } }\n            @media (max-width: 1260px) { html { font-size: 144%; } }\n            @media (max-width: 1240px) { html { font-size: 142%; } }\n            @media (max-width: 1220px) { html { font-size: 140%; } }\n            @media (max-width: 1200px) { html { font-size: 138%; } }\n            @media (max-width: 1180px) { html { font-size: 136%; } }\n            @media (max-width: 1160px) { html { font-size: 134%; } }\n            @media (max-width: 1140px) { html { font-size: 132%; } }\n            @media (max-width: 1120px) { html { font-size: 130%; } }\n            @media (max-width: 1100px) { html { font-size: 128%; } }\n            @media (max-width: 1080px) { html { font-size: 126%; } }\n            @media (max-width: 1060px) { html { font-size: 124%; } }\n            @media (max-width: 1040px) { html { font-size: 122%; } }\n            @media (max-width: 1020px) { html { font-size: 120%; } }\n            @media (max-width: 1000px) { html { font-size: 118%; } }\n            @media (max-width: 980px) { html { font-size: 116%; } }\n            @media (max-width: 960px) { html { font-size: 114%; } }\n            @media (max-width: 940px) { html { font-size: 112%; } }\n            @media (max-width: 920px) { html { font-size: 110%; } }\n            @media (max-width: 900px) { html { font-size: 108%; } }\n            @media (max-width: 880px) { html { font-size: 106%; } }\n            @media (max-width: 860px) { html { font-size: 104%; } }\n            @media (max-width: 840px) { html { font-size: 102%; } }\n            @media (max-width: 820px) { html { font-size: 100%; } }\n            @media (max-width: 800px) { html { font-size: 98%; } }\n            @media (max-width: 780px) { html { font-size: 96%; } }\n            @media (max-width: 760px) { html { font-size: 94%; } }\n            @media (max-width: 740px) { html { font-size: 92%; } }\n            @media (max-width: 720px) { html { font-size: 90%; } }\n            @media (max-width: 700px) { html { font-size: 88%; } }\n            @media (max-width: 680px) { html { font-size: 86%; } }\n            @media (max-width: 660px) { html { font-size: 84%; } }\n            @media (max-width: 640px) { html { font-size: 82%; } }\n            @media (max-width: 620px) { html { font-size: 80%; } }\n            @media (max-width: 600px) { html { font-size: 78%; } }\n            @media (max-width: 580px) { html { font-size: 76%; } }\n            @media (max-width: 560px) { html { font-size: 74%; } }\n            @media (max-width: 540px) { html { font-size: 72%; } }\n            @media (max-width: 520px) { html { font-size: 70%; } }\n            @media (max-width: 500px) { html { font-size: 68%; } }\n            @media (max-width: 480px) { html { font-size: 66%; } }\n            @media (max-width: 460px) { html { font-size: 64%; } }\n            @media (max-width: 440px) { html { font-size: 62%; } }\n            @media (max-width: 420px) { html { font-size: 60%; } }\n            @media (max-width: 400px) { html { font-size: 58%; } }\n            @media (max-width: 380px) { html { font-size: 56%; } }\n            @media (max-width: 360px) { html { font-size: 54%; } }\n            @media (max-width: 340px) { html { font-size: 52%; } }\n            @media (max-width: 320px) { html { font-size: 50%; } }\n\n            .header {\n                color: #000;\n                -webkit-transition: opacity 1s;\n                -moz-transition: opacity 1s;\n                -o-transition: opacity 1s;\n                transition: opacity 1s;\n                text-align: center;\n                margin: auto;\n                top: 0;\n                left: 0;\n                bottom: 0;\n                right: 0;\n                position: absolute;\n                width: 29rem;\n                max-width: 100%;\n                height: 100%;\n                z-index: 1;\n            }\n            .header h1 {\n                font-size: 10rem;\n                font-weight: 800;\n                text-transform: uppercase;\n                letter-spacing: .05em;\n            }\n            .header h2 {\n                font-size: 5rem;\n                font-weight: 800;\n                text-transform: uppercase;\n                letter-spacing: .1em;\n            }\n            .header .subtitle {\n                position: absolute;\n                margin: auto;\n                top: 0rem;\n                left: 0;\n                right: 0;\n                bottom: 1rem;\n                padding-top: 9rem;\n                height: 4rem;\n                text-align: center;\n            }\n            .header .subtitle h3 {\n                margin: 0;\n                font-size: 1.8rem;\n            }\n            .header .title h1 {\n                position: absolute;\n                margin: auto;\n                top: 0;\n                left: 0;\n                right: 0;\n                bottom: 3rem;\n                height: 1.4em;\n                text-align: center;\n            }\n            .header .title .title1 {\n                color: #eee;\n                color: rgba(0, 0, 0, .1);\n            }\n            .header .title span {\n                display: block;\n                position: absolute;\n                top: 0;\n            }\n            .header .title .title2:before {\n                position: absolute;\n                top: 16.5%;\n                bottom: 34%;\n                left: 2%;\n                right: 2%;\n                content: \"Progress Automatically. Certain to Entertain.\";\n                font-size: 1rem;\n                line-height: 1.3em;\n                padding: 1rem 15rem 1rem 1rem;\n                background: #fff;\n                opacity: 0;\n                text-align: left;\n                -webkit-box-sizing: border-box;\n                -moz-box-sizing: border-box;\n                box-sizing: border-box;\n                -webkit-transform: translateY(-15px);\n                -webkit-transition: all .3s;\n                -moz-transition: all .3s;\n                transition: all .3s;\n                z-index: 10;\n            }\n            .header .title .title2:hover:before {\n                opacity: 1;\n                -webkit-transform: translateY(0px);\n            }\n            .header .title .char1 { left: .5%; width: 22%; }\n            .header .title .char2 { left: 25%; width: 22%; }\n            .header .title .char3 { left: 51%; width: 22%; }\n            .header .title .char4 { left: 79.5%; width: 22%; }\n\n            .section {\n                position: relative;\n                height: 100%;\n                padding-top: 1rem;\n                padding-bottom: 1rem;\n                -webkit-box-sizing: border-box;\n                -moz-box-sizing: border-box;\n                box-sizing: border-box;\n            }\n\n            .section.colored {\n                color: #fff;\n            }\n\n            .section.colored .header .title .title2 {\n                color: #fff;\n            }\n\n            .section.colored .header .subtitle {\n                color: #fff;\n            }\n\n            .header .title .title2 span {\n                width: 0px;\n                -webkit-transition: width 2s linear;\n                -moz-transition: width 2s linear;\n                -ms-transition: width 2s linear;\n                -o-transition: width 2s linear;\n                transition: width 2s linear;\n                overflow: hidden;\n            }\n\n            .page-loaded .header .title .title2 .char1 { width: 21%; }\n            .page-loaded .header .title .title2 .char2 { width: 24%; }\n            .page-loaded .header .title .title2 .char3 { width: 24%; }\n            .page-loaded .header .title .title2 .char4 { width: 21%; }\n\n\n            .up-arrow, .down-arrow {\n                width: 100%;\n                text-align: center;\n                font-size: 2rem;\n            }\n\n            .down-arrow {\n                position: absolute;\n                left: 0;\n                -webkit-transform: rotate(180deg);\n                -moz-transform: rotate(180deg);\n                -ms-transform: rotate(180deg);\n                -o-transform: rotate(180deg);\n                transform: rotate(180deg);\n                bottom: 30px;\n            }\n\n            .section.colored .down-arrow {\n                color: rgba(255, 255, 255, .5);\n            }\n\n\n            h2 {\n                text-align: center;\n            }\n            .themes {\n                overflow: hidden;\n                text-align: center;\n            }\n            .theme {\n                width: 46%;\n            }\n            .theme.even {\n                text-align: center;\n                float: left;\n                clear: both;\n            }\n            .theme.odd {\n                text-align: center;\n                float: right;\n            }\n            .browser {\n                background: #e0e0e0;\n                border: 4px solid #e0e0e0;\n                width: 100%;\n                height: 7rem;\n                padding-top: 20px;\n                margin: 0 0 10px;\n                -webkit-box-sizing: border-box;\n                -moz-box-sizing: border-box;\n                box-sizing: border-box;\n            }\n            .browser iframe {\n                border: 0;\n                background: #fff;\n                height: 100%;\n                width: 100%;\n            }\n            input[type=\"color\"] {\n                width: 15rem;\n                height: 2.3rem;\n                font-size: 1rem;\n                position: relative;\n                font-family: inherit;\n                cursor: pointer;\n            }\n            input[type=\"color\"]::before {\n                content: \" \";\n                display: block;\n                position: absolute;\n                top: 0;\n                left: 3px;\n                right: 3px;\n                height: 100%;\n                border: 6px solid #fff;\n                -webkit-box-sizing: border-box;\n                -moz-box-sizing: border-box;\n                box-sizing: border-box;\n            }\n            input[type=\"color\"]::after {\n                content: \"Choose a color\";\n                display: block;\n                text-align: center;\n                position: absolute;\n                top: 0;\n                left: -2px;\n                right: -2px;\n                height: 100%;\n                font-size: .7rem;\n                line-height: 2rem;\n                color: #fcfcfc;\n                color: rgba(255, 255, 255, 1);\n                font-weight: 800;\n                text-transform: uppercase;\n                letter-spacing: 2px;\n                border: 6px solid #fff;\n                -webkit-box-sizing: border-box;\n                -moz-box-sizing: border-box;\n                box-sizing: border-box;\n            }\n            input[type=\"color\"]:active::after {\n                color: rgba(255, 255, 255, 0.4);\n            }\n\n            .themes h3 {\n                margin-top: 1.5em;\n                margin-bottom: 0;\n            }\n\n            .themes h3 + p {\n                margin-top: 0;\n            }\n\n            .page {\n                text-align: center;\n                max-width: 28rem;\n                padding: 0 10px;\n                margin: 0 auto;\n            }\n\n            .themes a, .themes a:hover, .themes a:active {\n                text-decoration: none;\n                font-size: .7rem;\n                text-transform: uppercase;\n                letter-spacing: 2px;\n            }\n\n            .themes a.author, .themes a:hover.author {\n                margin: -1em 0;\n                display: block;\n                font-size: .5rem;\n                color: #888;\n            }\n\n            .themes a:hover.author {\n                color: #444;\n            }\n\n            .themes a.author:before {\n                content: \"by: \";\n                color: #ccc;\n            }\n\n            a.button {\n                padding: 0.5rem 1rem;\n                color: #fff;\n                cursor: pointer;\n                font-size: 1rem;\n                text-transform: uppercase;\n                letter-spacing: .1em;\n                text-decoration: none;\n            }\n            .themes-pitch {\n                padding: 15px;\n            }\n            .block {\n                padding: 10px 0;\n            }\n            .color-label {\n                display: none;\n            }\n        </style>\n\n        <div class=\"section colored\">\n            <div class=\"header\">\n                <div class=\"title\">\n                    <h1 class=\"title1\"><span class=\"char1\">p</span><span class=\"char2\">a</span><span class=\"char3\">c</span><span class=\"char4\">e</span></h1>\n                    <h1 class=\"title2\"><span class=\"char1\">p</span><span class=\"char2\">a</span><span class=\"char3\">c</span><span class=\"char4\">e</span></h1>\n                </div>\n                <div class=\"subtitle\">\n                    <h3>Automatic page load progress bar</h3>\n                </div>\n            </div>\n            <div class=\"down-arrow\">⇪</div>\n        </div>\n\n        <div class=\"section\">\n            <div class=\"page\">\n                <h2>What is Pace?</h2>\n                <p style=\"text-align: left\">Include pace.js and a CSS theme of your choice, and you get a beautiful progress indicator for your page load and ajax navigation.</p>\n                <p style=\"text-align: left\">No need to hook into any of your code, progress is detected automatically.</p>\n                <br/>\n                <h2>Download</h2>\n                <p><a class=\"button\" href=\"https://raw.github.com/HubSpot/pace/v0.5.3/pace.min.js\">Pace.js</a></p>\n                <br/>\n                <h2>Themes</h2>\n                <label class=\"color-label\" for=\"color-select\">Enter a color:</label>\n                <input type=\"color\" value=\"#2299dd\" id=\"color-select\"></input>\n                <div class=\"themes\"></div>\n                <p class=\"block\">Submit a theme! <a href=\"https://github.com/HubSpot/pace\">Fork us on GitHub</a></p>\n                <p class=\"block\"><a class=\"button\" href=\"http://github.hubspot.com/pace/\">Documentation</a></p>\n                <br/>\n                <p style=\"font-size: 0.6rem\"><a href=\"http://dev.hubspot.com\">HubSpot</a></p>\n                <br/>\n                <br/>\n                <script>\n                    $(function(){\n                        if (!Modernizr.inputtypes.color)\n                            $('.color-label').show();\n\n                        var themes = [{\n                            name: 'minimal',\n                            title: 'Minimal',\n                            author: 'adamschwartz'\n                        }, {\n                            name: 'flash',\n                            title: 'Flash',\n                            author: 'adamschwartz'\n                        }, {\n                            name: 'barber-shop',\n                            title: 'Barber Shop',\n                            author: 'adamschwartz'\n                        }, {\n                            name: 'mac-osx',\n                            title: 'Mac OSX',\n                            author: 'adamschwartz'\n                        }, {\n                            name: 'fill-left',\n                            title: 'Fill Left',\n                            author: 'adamschwartz'\n                        }, {\n                            name: 'flat-top',\n                            title: 'Flat Top',\n                            author: 'adamschwartz'\n                        }, {\n                            name: 'big-counter',\n                            title: 'Big Counter',\n                            author: 'adamschwartz'\n                        }, {\n                            name: 'corner-indicator',\n                            title: 'Corner Indicator',\n                            author: 'adamschwartz'\n                        }, {\n                            name: 'bounce',\n                            title: 'Bounce',\n                            author: 'adamschwartz'\n                        }, {\n                            name: 'loading-bar',\n                            title: 'Loading Bar',\n                            author: 'gavJackson'\n                        }, {\n                            name: 'center-circle',\n                            title: 'Center Circle',\n                            author: 'adamschwartz'\n                        }, {\n                            name: 'center-atom',\n                            title: 'Center Atom',\n                            author: 'kennyglenn'\n                        }, {\n                            name: 'center-radar',\n                            title: 'Center Radar',\n                            author: 'kennyglenn'\n                        }, {\n                            name: 'center-simple',\n                            title: 'Center Simple',\n                            author: 'dineshgithub'\n                        }];\n\n                        var init = function() {\n                            $.each(themes, function(i, theme){\n                                $('.themes').append('<div class=\"theme ' + (i % 2 === 0 ? 'even' : 'odd') + '\">'+\n                                    '<h3>' + theme.title + '</h3>' +\n                                    (theme.author ? '<br/><a class=\"author\" href=\"https://github.com/' + theme.author + '\" target=\"_blank\" rel=\"nofollow\">@' + theme.author + '</a></h4>' : '') +\n                                    '<p><a href=\"#\" class=\"download-link\" data-theme=\"' + theme.name + '\">download</a></p>'+\n                                    '<div class=\"browser\"><iframe data-theme=\"' + theme.name + '\"></iframe></div>' +\n                                '</div>');\n                            });\n\n                            var $color = $('input[type=\"color\"]');\n\n                            var cssCache = {};\n                            var initFrame = function(frame, color){\n                                if ($color.val() != '#2299dd')\n                                    color = $color.val();\n\n                                var $styleEl = $('<style>')\n                                $(frame).contents().find('body').append($styleEl);\n\n                                var context = {};\n                                if (color)\n                                    context.color = color;\n\n                                var themeName = $(frame).data('theme')\n                                loadTheme(themeName, function(theme){\n                                    body = compileTheme(theme, context);\n\n                                    cssCache[themeName] = body;\n\n                                    $styleEl.html(body);\n                                });\n\n                                $(frame).contents().find('.pace').addClass('pace-active');\n                            };\n\n                            var updateColor = function(color){\n                                $('.browser iframe').each(function(){\n                                    initFrame(this, color);\n                                });\n                            };\n\n                            var downloadTheme = function(theme){\n                                location.href = 'data:text/css,' + encodeURIComponent(cssCache[theme]);\n                            };\n\n                            $('.browser iframe').each(function(){\n                                var _this = this;\n\n                                doc = (this.contentWindow || this.documentWindow).document;\n                                doc.open();\n                                doc.write('' +\n                                    '<div class=\"pace\">' +\n                                        '<div class=\"pace-progress\" data-progress=\"50\" data-progress-text=\"50%\" style=\"width: 50%;\">' +\n                                            '<div class=\"pace-progress-inner\"></div>' +\n                                        '</div>' +\n                                        '<div class=\"pace-activity\"></div>' +\n                                    '</div>' +\n                                '');\n                                doc.close();\n\n                                // For some strange reason, the Color library we depend on defines itself\n                                // asyncronously\n                                setTimeout(function(){\n                                    initFrame(_this);\n                                }, 0);\n                            });\n\n                            $color.on('change keyup', function(){\n                                var color = $(this).val();\n                                updateColor(color);\n\n                                var css = '.section.colored, a.button { background: ' + color + '; } a, a:hover, a:active, .header .title .title2:before { color: ' + color + '; }';\n                                if ($('html').hasClass('ie8-and-less')) {\n                                    $('#app-colors').get(0).styleSheet.cssText = css\n                                } else {\n                                    $('#app-colors').html(css);\n                                }\n                            });\n\n                            $('a.download-link').click(function(e){\n                                e.preventDefault();\n\n                                var theme = $(this).data('theme');\n\n                                downloadTheme(theme);\n                            });\n                        };\n\n                        var initTimeout = setTimeout(function(){\n                            $(window).unbind('scroll', scrollOnce);\n                            init();\n                        }, 3000);\n\n                        var scrollOnce = function() {\n                            $(window).unbind('scroll', scrollOnce);\n                            clearTimeout(initTimeout);\n                            init();\n                        };\n\n                        $(window).bind('scroll', scrollOnce);\n                    });\n                </script>\n            </div>\n        </div>\n\n        <script>setTimeout(function(){ document.body.className = 'page-loaded' }, 0);</script>\n\n        <!-- Share -->\n\n        <style>\n            #retweet_button {\n                position: fixed;\n                bottom: 30px;\n                left: 30px;\n                width: 100px;\n                -webkit-filter: grayscale(1) contrast(1.3);\n                z-index: 3;\n            }\n            #retweet_button:hover {\n                -webkit-filter: none;\n            }\n            #github_stars {\n                position: fixed;\n                bottom: 30px;\n                left: 130px;\n                width: 100px;\n                -webkit-filter: grayscale(1) contrast(1.3);\n                z-index: 3;\n            }\n            #github_stars:hover {\n                -webkit-filter: none;\n            }\n            .hn-share-button-wrapper {\n                position: fixed;\n                bottom: 29px;\n                left: 227px;\n                -webkit-filter: grayscale(1) contrast(1.3);\n                z-index: 3;\n            }\n            .hn-share-button-wrapper:hover {\n                -webkit-filter: none;\n            }\n        </style>\n        <div id=\"retweet_button\">\n            <a href=\"http://twitter.com/share\" class=\"twitter-share-button\" data-url=\"http://github.hubspot.com/pace/docs/welcome\" data-text=\"pace.js - Add an automatic page load progress bar to your site\" data-count=\"horizontal\" data-via=\"HubSpotDev\">Tweet</a>\n            <script>\n              if (Math.random() >= 0.5)\n                var recommends = ['hubspotdev', 'zackbloom', 'adamfschwartz'];\n              else\n                var recommends = ['hubspotdev', 'adamfschwartz', 'zackbloom'];\n\n              var $button = $('.twitter-share-button');\n              if ($button.length)\n                $button.data('related', recommends.join(','));\n            </script>\n            <script type=\"text/javascript\" src=\"http://platform.twitter.com/widgets.js\"></script>\n        </div>\n        <div id=\"github_stars\">\n            <iframe src=\"http://ghbtns.com/github-btn.html?user=HubSpot&amp;repo=pace&amp;type=watch&amp;count=true&amp;size=small\" allowtransparency=\"true\" frameborder=\"0\" scrolling=\"0\" width=\"200\" height=\"20\"></iframe>\n        </div>\n\n        <!-- Start of Async HubSpot Analytics Code -->\n        <script type=\"text/javascript\">\n            (function(d,s,i,r) {\n                if (d.getElementById(i)){return;}\n                var n=d.createElement(s),e=d.getElementsByTagName(s)[0];\n                n.id=i;n.src='//js.hubspot.com/analytics/'+(Math.ceil(new Date()/r)*r)+'/51294.js';\n                e.parentNode.insertBefore(n, e);\n            })(document,\"script\",\"hs-analytics\",300000);\n        </script>\n        <!-- End of Async HubSpot Analytics Code -->\n\n        <script>\n          (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\n          (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),\n          m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)\n          })(window,document,'script','//www.google-analytics.com/analytics.js','ga');\n\n          ga('create', 'UA-45159009-1', 'hubspot.com');\n          ga('send', 'pageview');\n        </script>\n\n        <!-- Force 3d acceleration always and forever :) -->\n        <div style=\"-webkit-transform: translateZ(0)\"></div>\n    </body>\n</html>\n"
  },
  {
    "path": "public/frontend/plugins/pace/install.json",
    "content": "{\n  \"resources\": {\n    \"head\": [\n      {\n        \"type\": \"script\",\n        \"src\": \"./pace.js\"\n      },\n      {\n        \"type\": \"style\",\n        \"src\": \"./themes/{{ options.color }}/pace-theme-{{ options.theme }}.css\"\n      }\n    ]\n  },\n  \"options\": {\n    \"properties\": {\n      \"color\": {\n        \"title\": \"Color\",\n        \"type\": \"string\",\n        \"enum\": [\n          \"black\",\n          \"white\",\n          \"silver\",\n          \"red\",\n          \"orange\",\n          \"yellow\",\n          \"green\",\n          \"blue\",\n          \"pink\",\n          \"purple\"\n        ],\n        \"enumNames\": {\n          \"black\": \"Black\",\n          \"white\": \"White\",\n          \"silver\": \"Silver\",\n          \"red\": \"Red\",\n          \"orange\": \"Orange\",\n          \"yellow\": \"Yellow\",\n          \"green\": \"Green\",\n          \"blue\": \"Blue\",\n          \"pink\": \"Pink\",\n          \"purple\": \"Purple\"\n        },\n        \"default\": \"blue\"\n      },\n      \"theme\": {\n        \"title\": \"Theme\",\n        \"type\": \"string\",\n        \"enum\": [\n          \"barber-shop\",\n          \"big-counter\",\n          \"bounce\",\n          \"center-atom\",\n          \"center-circle\",\n          \"center-radar\",\n          \"center-simple\",\n          \"corner-indicator\",\n          \"fill-left\",\n          \"flash\",\n          \"flat-top\",\n          \"loading-bar\",\n          \"mac-osx\",\n          \"minimal\"\n        ],\n        \"enumNames\": {\n          \"barber-shop\": \"Barber Shop\",\n          \"big-counter\": \"Big Counter\",\n          \"bounce\": \"Bounce\",\n          \"center-atom\": \"Center Atom\",\n          \"center-circle\": \"Center Circle\",\n          \"center-radar\": \"Center Radar\",\n          \"center-simple\": \"Center Simple\",\n          \"corner-indicator\": \"Corner Indicator\",\n          \"fill-left\": \"Fill Left\",\n          \"flash\": \"Flash\",\n          \"flat-top\": \"Flat Top\",\n          \"loading-bar\": \"Loading Bar\",\n          \"mac-osx\": \"Mac OS X\",\n          \"minimal\": \"Minimal\"\n        },\n        \"default\": \"barber-shop\"\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/pace.coffee",
    "content": "defaultOptions =\n  # How long should it take for the bar to animate to a new\n  # point after receiving it\n  catchupTime: 500\n\n  # How quickly should the bar be moving before it has any progress\n  # info from a new source in %/ms\n  initialRate: .03\n\n  # What is the minimum amount of time the bar should be on the\n  # screen\n  minTime: 500\n\n  # What is the minimum amount of time the bar should sit after the last\n  # update before disappearing\n  ghostTime: 500\n\n  # Its easy for a bunch of the bar to be eaten in the first few frames\n  # before we know how much there is to load.  This limits how much of\n  # the bar can be used per frame\n  maxProgressPerFrame: 10\n\n  # This tweaks the animation easing\n  easeFactor: 1.25\n\n  # Should pace automatically start when the page is loaded, or should it wait for `start` to\n  # be called?  Always false if pace is loaded with AMD or CommonJS.\n  startOnPageLoad: true\n\n  # Should we restart the browser when pushState or replaceState is called?  (Generally\n  # means ajax navigation has occured)\n  restartOnPushState: true\n\n  # Should we show the progress bar for every ajax request (not just regular or ajax-y page\n  # navigation)? Set to false to disable.\n  #\n  # If so, how many ms does the request have to be running for before we show the progress?\n  restartOnRequestAfter: 500\n\n  # What element should the pace element be appended to on the page?\n  target: 'body'\n\n  elements:\n    # How frequently in ms should we check for the elements being tested for\n    # using the element monitor?\n    checkInterval: 100\n\n    # What elements should we wait for before deciding the page is fully loaded (not required)\n    selectors: ['body']\n\n  eventLag:\n    # When we first start measuring event lag, not much is going on in the browser yet, so it's\n    # not uncommon for the numbers to be abnormally low for the first few samples.  This configures\n    # how many samples we need before we consider a low number to mean completion.\n    minSamples: 10\n\n    # How many samples should we average to decide what the current lag is?\n    sampleCount: 3\n\n    # Above how many ms of lag is the CPU considered busy?\n    lagThreshold: 3\n\n  ajax:\n    # Which HTTP methods should we track?\n    trackMethods: ['GET']\n\n    # Should we track web socket connections?\n    trackWebSockets: true\n\n    # A list of regular expressions or substrings of URLS we should ignore (for both tracking and restarting)\n    ignoreURLs: []\n\nnow = ->\n  performance?.now?() ? +new Date\n\nrequestAnimationFrame = window.requestAnimationFrame or window.mozRequestAnimationFrame or\n                        window.webkitRequestAnimationFrame or window.msRequestAnimationFrame\n\ncancelAnimationFrame = window.cancelAnimationFrame or window.mozCancelAnimationFrame\n\nif not requestAnimationFrame?\n  requestAnimationFrame = (fn) ->\n    setTimeout fn, 50\n\n  cancelAnimationFrame = (id) ->\n    clearTimeout id\n\nrunAnimation = (fn) ->\n  last = now()\n  tick = ->\n    diff = now() - last\n\n    if diff >= 33\n      # Don't run faster than 30 fps\n\n      last = now()\n      fn diff, ->\n        requestAnimationFrame tick\n    else\n      setTimeout tick, (33 - diff)\n\n  tick()\n\nresult = (obj, key, args...) ->\n  if typeof obj[key] is 'function'\n    obj[key](args...)\n  else\n    obj[key]\n\nextend = (out, sources...) ->\n  for source in sources when source\n    for own key, val of source\n      if out[key]? and typeof out[key] is 'object' and val? and typeof val is 'object'\n        extend(out[key], val)\n      else\n        out[key] = val\n  out\n\navgAmplitude = (arr) ->\n  sum = count = 0\n  for v in arr\n    sum += Math.abs(v)\n    count++\n\n  sum / count\n\ngetFromDOM = (key='options', json=true) ->\n  el = document.querySelector \"[data-pace-#{ key }]\"\n\n  return unless el\n\n  data = el.getAttribute \"data-pace-#{ key }\"\n\n  return data if not json\n\n  try\n    return JSON.parse data\n  catch e\n    console?.error \"Error parsing inline pace options\", e\n\nclass Evented\n  on: (event, handler, ctx, once=false) ->\n    @bindings ?= {}\n    @bindings[event] ?= []\n    @bindings[event].push {handler, ctx, once}\n\n  once: (event, handler, ctx) ->\n    @on(event, handler, ctx, true)\n\n  off: (event, handler) ->\n    return unless @bindings?[event]?\n\n    if not handler?\n      delete @bindings[event]\n    else\n      i = 0\n      while i < @bindings[event].length\n        if @bindings[event][i].handler is handler\n          @bindings[event].splice i, 1\n        else\n          i++\n\n  trigger: (event, args...) ->\n    if @bindings?[event]\n      i = 0\n      while i < @bindings[event].length\n        {handler, ctx, once} = @bindings[event][i]\n\n        handler.apply(ctx ? @, args)\n\n        if once\n          @bindings[event].splice i, 1\n        else\n          i++\n\nwindow.Pace ?= {}\n\nextend Pace, Evented::\n\noptions = Pace.options = extend {}, defaultOptions, window.paceOptions, getFromDOM()\n\nfor source in ['ajax', 'document', 'eventLag', 'elements']\n  # true enables them without configuration, so we grab the config from the defaults\n  if options[source] is true\n    options[source] = defaultOptions[source]\n\nclass NoTargetError extends Error\n\nclass Bar\n  constructor: ->\n    @progress = 0\n\n  getElement: ->\n    if not @el?\n      targetElement = document.querySelector options.target\n\n      if not targetElement\n        throw new NoTargetError\n\n      @el = document.createElement 'div'\n      @el.className = \"pace pace-active\"\n\n      document.body.className = document.body.className.replace /pace-done/g, ''\n      document.body.className += ' pace-running'\n\n      @el.innerHTML = '''\n      <div class=\"pace-progress\">\n        <div class=\"pace-progress-inner\"></div>\n      </div>\n      <div class=\"pace-activity\"></div>\n      '''\n      if targetElement.firstChild?\n        targetElement.insertBefore @el, targetElement.firstChild\n      else\n        targetElement.appendChild @el\n\n    @el\n\n  finish: ->\n    el = @getElement()\n\n    el.className = el.className.replace 'pace-active', ''\n    el.className += ' pace-inactive'\n\n    document.body.className = document.body.className.replace 'pace-running', ''\n    document.body.className += ' pace-done'\n\n  update: (prog) ->\n    @progress = prog\n\n    do @render\n\n  destroy: ->\n    try\n      @getElement().parentNode.removeChild(@getElement())\n    catch NoTargetError\n\n    @el = undefined\n\n  render: ->\n    if not document.querySelector(options.target)?\n      return false\n\n    el = @getElement()\n\n    el.children[0].style.width = \"#{ @progress }%\"\n\n    if not @lastRenderedProgress or @lastRenderedProgress|0 != @progress|0\n      # The whole-part of the number has changed\n\n      el.children[0].setAttribute 'data-progress-text', \"#{ @progress|0 }%\"\n\n      if @progress >= 100\n        # We cap it at 99 so we can use prefix-based attribute selectors\n        progressStr = '99'\n      else\n        progressStr = if @progress < 10 then \"0\" else \"\"\n        progressStr += @progress|0\n\n      el.children[0].setAttribute 'data-progress', \"#{ progressStr }\"\n\n    @lastRenderedProgress = @progress\n\n  done: ->\n    @progress >= 100\n\nclass Events\n  constructor: ->\n    @bindings = {}\n\n  trigger: (name, val) ->\n    if @bindings[name]?\n      for binding in @bindings[name]\n        binding.call @, val\n\n  on: (name, fn) ->\n    @bindings[name] ?= []\n    @bindings[name].push fn\n\n_XMLHttpRequest = window.XMLHttpRequest\n_XDomainRequest = window.XDomainRequest\n_WebSocket = window.WebSocket\n\nextendNative = (to, from) ->\n  for key of from::\n    try\n      val = from::[key]\n\n      if not to[key]? and typeof val isnt 'function'\n        to[key] = val\n    catch e\n\nignoreStack = []\n\nPace.ignore = (fn, args...) ->\n  ignoreStack.unshift 'ignore'\n  ret = fn(args...)\n  ignoreStack.shift()\n  ret\n\nPace.track = (fn, args...) ->\n  ignoreStack.unshift 'track'\n  ret = fn(args...)\n  ignoreStack.shift()\n  ret\n\nshouldTrack = (method='GET') ->\n  if ignoreStack[0] is 'track'\n    return 'force'\n  \n  if not ignoreStack.length and options.ajax\n    if method is 'socket' and options.ajax.trackWebSockets\n      return true\n    else if method.toUpperCase() in options.ajax.trackMethods\n      return true\n\n  return false\n\n# We should only ever instantiate one of these\nclass RequestIntercept extends Events\n  constructor: ->\n    super\n\n    monitorXHR = (req) =>\n      _open = req.open\n      req.open = (type, url, async) =>\n        if shouldTrack(type)\n          @trigger 'request', {type, url, request: req}\n\n        _open.apply req, arguments\n\n    window.XMLHttpRequest = (flags) ->\n      req = new _XMLHttpRequest(flags)\n\n      monitorXHR req\n\n      req\n\n    try\n      extendNative window.XMLHttpRequest, _XMLHttpRequest\n\n    if _XDomainRequest?\n      window.XDomainRequest = ->\n        req = new _XDomainRequest\n\n        monitorXHR req\n\n        req\n\n      try\n        extendNative window.XDomainRequest, _XDomainRequest\n\n    if _WebSocket? and options.ajax.trackWebSockets\n      window.WebSocket = (url, protocols) =>\n        if protocols?\n          req = new _WebSocket(url, protocols)\n        else\n          req = new _WebSocket(url)\n\n        if shouldTrack('socket')\n          @trigger 'request', {type: 'socket', url, protocols, request: req}\n\n        req\n\n      try\n        extendNative window.WebSocket, _WebSocket\n\n_intercept = null\ngetIntercept = ->\n  if not _intercept?\n    _intercept = new RequestIntercept\n  _intercept\n\nshouldIgnoreURL = (url) ->\n  for pattern in options.ajax.ignoreURLs\n    if typeof pattern is 'string'\n      if url.indexOf(pattern) isnt -1\n        return true\n\n    else\n      if pattern.test(url)\n        return true\n\n  return false\n\n# If we want to start the progress bar\n# on every request, we need to hear the request\n# and then inject it into the new ajax monitor\n# start will have created.\n\ngetIntercept().on 'request', ({type, request, url}) ->\n  return if shouldIgnoreURL(url)\n\n  if not Pace.running and (options.restartOnRequestAfter isnt false or shouldTrack(type) is 'force')\n    args = arguments\n\n    after = options.restartOnRequestAfter or 0\n    if typeof after is 'boolean'\n      after = 0\n\n    setTimeout ->\n      if type is 'socket'\n        stillActive = request.readyState < 2\n      else\n        stillActive = 0 < request.readyState < 4\n\n      if stillActive\n        Pace.restart()\n\n        for source in Pace.sources\n          if source instanceof AjaxMonitor\n            source.watch args...\n            break\n    , after\n\nclass AjaxMonitor\n  constructor: ->\n    @elements = []\n\n    getIntercept().on 'request', => @watch arguments...\n\n  watch: ({type, request, url}) ->\n    return if shouldIgnoreURL(url)\n\n    if type is 'socket'\n      tracker = new SocketRequestTracker(request)\n    else\n      tracker = new XHRRequestTracker(request)\n\n    @elements.push tracker\n\nclass XHRRequestTracker\n  constructor: (request) ->\n    @progress = 0\n\n    if window.ProgressEvent?\n      # We're dealing with a modern browser with progress event support\n\n      size = null\n      request.addEventListener 'progress', (evt) =>\n        if evt.lengthComputable\n          @progress = 100 * evt.loaded / evt.total\n        else\n          # If it's chunked encoding, we have no way of knowing the total length of the\n          # response, all we can do is increment the progress with backoff such that we\n          # never hit 100% until it's done.\n          @progress = @progress + (100 - @progress) / 2\n\n      for event in ['load', 'abort', 'timeout', 'error']\n        request.addEventListener event, =>\n          @progress = 100\n\n    else\n      _onreadystatechange = request.onreadystatechange\n      request.onreadystatechange = =>\n        if request.readyState in [0, 4]\n          @progress = 100\n        else if request.readyState is 3\n          @progress = 50\n\n        _onreadystatechange?(arguments...)\n\nclass SocketRequestTracker\n  constructor: (request) ->\n    @progress = 0\n\n    for event in ['error', 'open']\n      request.addEventListener event, =>\n        @progress = 100\n\nclass ElementMonitor\n  constructor: (options={}) ->\n    @elements = []\n\n    options.selectors ?= []\n    for selector in options.selectors\n      @elements.push new ElementTracker selector\n\nclass ElementTracker\n  constructor: (@selector) ->\n    @progress = 0\n\n    @check()\n\n  check: ->\n    if document.querySelector(@selector)\n      @done()\n    else\n      setTimeout (=> @check()),\n        options.elements.checkInterval\n\n  done: ->\n    @progress = 100\n\nclass DocumentMonitor\n  states:\n    loading: 0\n    interactive: 50\n    complete: 100\n\n  constructor: ->\n    @progress = @states[document.readyState] ? 100\n\n    _onreadystatechange = document.onreadystatechange\n    document.onreadystatechange = =>\n      if @states[document.readyState]?\n        @progress = @states[document.readyState]\n\n      _onreadystatechange?(arguments...)\n\nclass EventLagMonitor\n  constructor: ->\n    @progress = 0\n\n    avg = 0\n\n    samples = []\n\n    points = 0\n    last = now()\n    interval = setInterval =>\n      diff = now() - last - 50\n      last = now()\n\n      samples.push diff\n\n      if samples.length > options.eventLag.sampleCount\n        samples.shift()\n\n      avg = avgAmplitude samples\n\n      if ++points >= options.eventLag.minSamples and avg < options.eventLag.lagThreshold\n        @progress = 100\n\n        clearInterval interval\n      else\n        @progress = 100 * (3 / (avg + 3))\n\n    , 50\n\nclass Scaler\n  constructor: (@source) ->\n    @last = @sinceLastUpdate = 0\n    @rate = options.initialRate\n    @catchup = 0\n    @progress = @lastProgress = 0\n\n    if @source?\n      @progress = result(@source, 'progress')\n\n  tick: (frameTime, val) ->\n    val ?= result(@source, 'progress')\n\n    if val >= 100\n      @done = true\n\n    if val == @last\n      @sinceLastUpdate += frameTime\n    else\n      if @sinceLastUpdate\n        @rate = (val - @last) / @sinceLastUpdate\n\n      @catchup = (val - @progress) / options.catchupTime\n\n      @sinceLastUpdate = 0\n      @last = val\n\n    if val > @progress\n      # After we've got a datapoint, we have catchupTime to\n      # get the progress bar to reflect that new data\n      @progress += @catchup * frameTime\n\n    scaling = (1 - Math.pow(@progress / 100, options.easeFactor))\n\n    # Based on the rate of the last update, we preemptively update\n    # the progress bar, scaling it so it can never hit 100% until we\n    # know it's done.\n    @progress += scaling * @rate * frameTime\n\n    @progress = Math.min(@lastProgress + options.maxProgressPerFrame, @progress)\n\n    @progress = Math.max(0, @progress)\n    @progress = Math.min(100, @progress)\n\n    @lastProgress = @progress\n\n    @progress\n\nsources = null\nscalers = null\nbar = null\nuniScaler = null\nanimation = null\ncancelAnimation = null\nPace.running = false\n\nhandlePushState = ->\n  if options.restartOnPushState\n    Pace.restart()\n\n# We reset the bar whenever it looks like an ajax navigation has occured.\nif window.history.pushState?\n  _pushState = window.history.pushState\n  window.history.pushState = ->\n    handlePushState()\n\n    _pushState.apply window.history, arguments\n\nif window.history.replaceState?\n  _replaceState = window.history.replaceState\n  window.history.replaceState = ->\n    handlePushState()\n\n    _replaceState.apply window.history, arguments\n\nSOURCE_KEYS =\n  ajax: AjaxMonitor\n  elements: ElementMonitor\n  document: DocumentMonitor\n  eventLag: EventLagMonitor\n\ndo init = ->\n  Pace.sources = sources = []\n\n  for type in ['ajax', 'elements', 'document', 'eventLag']\n    if options[type] isnt false\n      sources.push new SOURCE_KEYS[type](options[type])\n\n  for source in options.extraSources ? []\n    sources.push new source(options)\n\n  Pace.bar = bar = new Bar\n\n  # Each source of progress data has it's own scaler to smooth its output\n  scalers = []\n\n  # We have an extra scaler for the final output to keep things looking nice as we add and\n  # remove sources\n  uniScaler = new Scaler\n\nPace.stop = ->\n  Pace.trigger 'stop'\n  Pace.running = false\n\n  bar.destroy()\n\n  # Not all browsers support cancelAnimationFrame\n  cancelAnimation = true\n\n  if animation?\n    cancelAnimationFrame? animation\n    animation = null\n\n  init()\n\nPace.restart = ->\n  Pace.trigger 'restart'\n  Pace.stop()\n  Pace.start()\n\nPace.go = ->\n  Pace.running = true\n\n  bar.render()\n\n  start = now()\n\n  cancelAnimation = false\n  animation = runAnimation (frameTime, enqueueNextFrame) ->\n    # Every source gives us a progress number from 0 - 100\n    # It's up to us to figure out how to turn that into a smoothly moving bar\n    #\n    # Their progress numbers can only increment.  We try to interpolate\n    # between the numbers.\n\n    remaining = 100 - bar.progress\n\n    count = sum = 0\n    done = true\n    # A source is composed of a bunch of elements, each with a raw, unscaled progress\n    for source, i in sources\n      scalerList = scalers[i] ?= []\n\n      elements = source.elements ? [source]\n\n      # Each element is given it's own scaler, which turns its value into something\n      # smoothed for display\n      for element, j in elements\n        scaler = scalerList[j] ?= new Scaler element\n\n        done &= scaler.done\n\n        continue if scaler.done\n\n        count++\n        sum += scaler.tick(frameTime)\n\n    avg = sum / count\n\n    bar.update uniScaler.tick(frameTime, avg)\n\n    if bar.done() or done or cancelAnimation\n      bar.update 100\n\n      Pace.trigger 'done'\n\n      setTimeout ->\n        bar.finish()\n\n        Pace.running = false\n\n        Pace.trigger 'hide'\n      , Math.max(options.ghostTime, Math.max(options.minTime - (now() - start), 0))\n    else\n      enqueueNextFrame()\n\nPace.start = (_options) ->\n  extend options, _options\n\n  Pace.running = true\n\n  try\n    bar.render()\n  catch NoTargetError\n\n  # It's usually possible to render a bit before the document declares itself ready\n  if not document.querySelector('.pace')\n    setTimeout Pace.start, 50\n  else\n    Pace.trigger 'start'\n    Pace.go()\n\nif typeof define is 'function' and define.amd\n  # AMD\n  define -> Pace\nelse if typeof exports is 'object'\n  # CommonJS\n  module.exports = Pace\nelse\n  # Global\n  if options.startOnPageLoad\n    Pace.start()\n"
  },
  {
    "path": "public/frontend/plugins/pace/pace.js",
    "content": "(function() {\n  var AjaxMonitor, Bar, DocumentMonitor, ElementMonitor, ElementTracker, EventLagMonitor, Evented, Events, NoTargetError, RequestIntercept, SOURCE_KEYS, Scaler, SocketRequestTracker, XHRRequestTracker, animation, avgAmplitude, bar, cancelAnimation, cancelAnimationFrame, defaultOptions, extend, extendNative, getFromDOM, getIntercept, handlePushState, ignoreStack, init, now, options, requestAnimationFrame, result, runAnimation, scalers, shouldIgnoreURL, shouldTrack, source, sources, uniScaler, _WebSocket, _XDomainRequest, _XMLHttpRequest, _i, _intercept, _len, _pushState, _ref, _ref1, _replaceState,\n    __slice = [].slice,\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  defaultOptions = {\n    catchupTime: 500,\n    initialRate: .03,\n    minTime: 500,\n    ghostTime: 500,\n    maxProgressPerFrame: 10,\n    easeFactor: 1.25,\n    startOnPageLoad: true,\n    restartOnPushState: true,\n    restartOnRequestAfter: 500,\n    target: 'body',\n    elements: {\n      checkInterval: 100,\n      selectors: ['body']\n    },\n    eventLag: {\n      minSamples: 10,\n      sampleCount: 3,\n      lagThreshold: 3\n    },\n    ajax: {\n      trackMethods: ['GET'],\n      trackWebSockets: true,\n      ignoreURLs: []\n    }\n  };\n\n  now = function() {\n    var _ref;\n    return (_ref = typeof performance !== \"undefined\" && performance !== null ? typeof performance.now === \"function\" ? performance.now() : void 0 : void 0) != null ? _ref : +(new Date);\n  };\n\n  requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame;\n\n  cancelAnimationFrame = window.cancelAnimationFrame || window.mozCancelAnimationFrame;\n\n  if (requestAnimationFrame == null) {\n    requestAnimationFrame = function(fn) {\n      return setTimeout(fn, 50);\n    };\n    cancelAnimationFrame = function(id) {\n      return clearTimeout(id);\n    };\n  }\n\n  runAnimation = function(fn) {\n    var last, tick;\n    last = now();\n    tick = function() {\n      var diff;\n      diff = now() - last;\n      if (diff >= 33) {\n        last = now();\n        return fn(diff, function() {\n          return requestAnimationFrame(tick);\n        });\n      } else {\n        return setTimeout(tick, 33 - diff);\n      }\n    };\n    return tick();\n  };\n\n  result = function() {\n    var args, key, obj;\n    obj = arguments[0], key = arguments[1], args = 3 <= arguments.length ? __slice.call(arguments, 2) : [];\n    if (typeof obj[key] === 'function') {\n      return obj[key].apply(obj, args);\n    } else {\n      return obj[key];\n    }\n  };\n\n  extend = function() {\n    var key, out, source, sources, val, _i, _len;\n    out = arguments[0], sources = 2 <= arguments.length ? __slice.call(arguments, 1) : [];\n    for (_i = 0, _len = sources.length; _i < _len; _i++) {\n      source = sources[_i];\n      if (source) {\n        for (key in source) {\n          if (!__hasProp.call(source, key)) continue;\n          val = source[key];\n          if ((out[key] != null) && typeof out[key] === 'object' && (val != null) && typeof val === 'object') {\n            extend(out[key], val);\n          } else {\n            out[key] = val;\n          }\n        }\n      }\n    }\n    return out;\n  };\n\n  avgAmplitude = function(arr) {\n    var count, sum, v, _i, _len;\n    sum = count = 0;\n    for (_i = 0, _len = arr.length; _i < _len; _i++) {\n      v = arr[_i];\n      sum += Math.abs(v);\n      count++;\n    }\n    return sum / count;\n  };\n\n  getFromDOM = function(key, json) {\n    var data, e, el;\n    if (key == null) {\n      key = 'options';\n    }\n    if (json == null) {\n      json = true;\n    }\n    el = document.querySelector(\"[data-pace-\" + key + \"]\");\n    if (!el) {\n      return;\n    }\n    data = el.getAttribute(\"data-pace-\" + key);\n    if (!json) {\n      return data;\n    }\n    try {\n      return JSON.parse(data);\n    } catch (_error) {\n      e = _error;\n      return typeof console !== \"undefined\" && console !== null ? console.error(\"Error parsing inline pace options\", e) : void 0;\n    }\n  };\n\n  Evented = (function() {\n    function Evented() {}\n\n    Evented.prototype.on = function(event, handler, ctx, once) {\n      var _base;\n      if (once == null) {\n        once = false;\n      }\n      if (this.bindings == null) {\n        this.bindings = {};\n      }\n      if ((_base = this.bindings)[event] == null) {\n        _base[event] = [];\n      }\n      return this.bindings[event].push({\n        handler: handler,\n        ctx: ctx,\n        once: once\n      });\n    };\n\n    Evented.prototype.once = function(event, handler, ctx) {\n      return this.on(event, handler, ctx, true);\n    };\n\n    Evented.prototype.off = function(event, handler) {\n      var i, _ref, _results;\n      if (((_ref = this.bindings) != null ? _ref[event] : void 0) == null) {\n        return;\n      }\n      if (handler == null) {\n        return delete this.bindings[event];\n      } else {\n        i = 0;\n        _results = [];\n        while (i < this.bindings[event].length) {\n          if (this.bindings[event][i].handler === handler) {\n            _results.push(this.bindings[event].splice(i, 1));\n          } else {\n            _results.push(i++);\n          }\n        }\n        return _results;\n      }\n    };\n\n    Evented.prototype.trigger = function() {\n      var args, ctx, event, handler, i, once, _ref, _ref1, _results;\n      event = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];\n      if ((_ref = this.bindings) != null ? _ref[event] : void 0) {\n        i = 0;\n        _results = [];\n        while (i < this.bindings[event].length) {\n          _ref1 = this.bindings[event][i], handler = _ref1.handler, ctx = _ref1.ctx, once = _ref1.once;\n          handler.apply(ctx != null ? ctx : this, args);\n          if (once) {\n            _results.push(this.bindings[event].splice(i, 1));\n          } else {\n            _results.push(i++);\n          }\n        }\n        return _results;\n      }\n    };\n\n    return Evented;\n\n  })();\n\n  if (window.Pace == null) {\n    window.Pace = {};\n  }\n\n  extend(Pace, Evented.prototype);\n\n  options = Pace.options = extend({}, defaultOptions, window.paceOptions, getFromDOM());\n\n  _ref = ['ajax', 'document', 'eventLag', 'elements'];\n  for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n    source = _ref[_i];\n    if (options[source] === true) {\n      options[source] = defaultOptions[source];\n    }\n  }\n\n  NoTargetError = (function(_super) {\n    __extends(NoTargetError, _super);\n\n    function NoTargetError() {\n      _ref1 = NoTargetError.__super__.constructor.apply(this, arguments);\n      return _ref1;\n    }\n\n    return NoTargetError;\n\n  })(Error);\n\n  Bar = (function() {\n    function Bar() {\n      this.progress = 0;\n    }\n\n    Bar.prototype.getElement = function() {\n      var targetElement;\n      if (this.el == null) {\n        targetElement = document.querySelector(options.target);\n        if (!targetElement) {\n          throw new NoTargetError;\n        }\n        this.el = document.createElement('div');\n        this.el.className = \"pace pace-active\";\n        document.body.className = document.body.className.replace(/pace-done/g, '');\n        document.body.className += ' pace-running';\n        this.el.innerHTML = '<div class=\"pace-progress\">\\n  <div class=\"pace-progress-inner\"></div>\\n</div>\\n<div class=\"pace-activity\"></div>';\n        if (targetElement.firstChild != null) {\n          targetElement.insertBefore(this.el, targetElement.firstChild);\n        } else {\n          targetElement.appendChild(this.el);\n        }\n      }\n      return this.el;\n    };\n\n    Bar.prototype.finish = function() {\n      var el;\n      el = this.getElement();\n      el.className = el.className.replace('pace-active', '');\n      el.className += ' pace-inactive';\n      document.body.className = document.body.className.replace('pace-running', '');\n      return document.body.className += ' pace-done';\n    };\n\n    Bar.prototype.update = function(prog) {\n      this.progress = prog;\n      return this.render();\n    };\n\n    Bar.prototype.destroy = function() {\n      try {\n        this.getElement().parentNode.removeChild(this.getElement());\n      } catch (_error) {\n        NoTargetError = _error;\n      }\n      return this.el = void 0;\n    };\n\n    Bar.prototype.render = function() {\n      var el, progressStr;\n      if (document.querySelector(options.target) == null) {\n        return false;\n      }\n      el = this.getElement();\n      el.children[0].style.width = \"\" + this.progress + \"%\";\n      if (!this.lastRenderedProgress || this.lastRenderedProgress | 0 !== this.progress | 0) {\n        el.children[0].setAttribute('data-progress-text', \"\" + (this.progress | 0) + \"%\");\n        if (this.progress >= 100) {\n          progressStr = '99';\n        } else {\n          progressStr = this.progress < 10 ? \"0\" : \"\";\n          progressStr += this.progress | 0;\n        }\n        el.children[0].setAttribute('data-progress', \"\" + progressStr);\n      }\n      return this.lastRenderedProgress = this.progress;\n    };\n\n    Bar.prototype.done = function() {\n      return this.progress >= 100;\n    };\n\n    return Bar;\n\n  })();\n\n  Events = (function() {\n    function Events() {\n      this.bindings = {};\n    }\n\n    Events.prototype.trigger = function(name, val) {\n      var binding, _j, _len1, _ref2, _results;\n      if (this.bindings[name] != null) {\n        _ref2 = this.bindings[name];\n        _results = [];\n        for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {\n          binding = _ref2[_j];\n          _results.push(binding.call(this, val));\n        }\n        return _results;\n      }\n    };\n\n    Events.prototype.on = function(name, fn) {\n      var _base;\n      if ((_base = this.bindings)[name] == null) {\n        _base[name] = [];\n      }\n      return this.bindings[name].push(fn);\n    };\n\n    return Events;\n\n  })();\n\n  _XMLHttpRequest = window.XMLHttpRequest;\n\n  _XDomainRequest = window.XDomainRequest;\n\n  _WebSocket = window.WebSocket;\n\n  extendNative = function(to, from) {\n    var e, key, val, _results;\n    _results = [];\n    for (key in from.prototype) {\n      try {\n        val = from.prototype[key];\n        if ((to[key] == null) && typeof val !== 'function') {\n          _results.push(to[key] = val);\n        } else {\n          _results.push(void 0);\n        }\n      } catch (_error) {\n        e = _error;\n      }\n    }\n    return _results;\n  };\n\n  ignoreStack = [];\n\n  Pace.ignore = function() {\n    var args, fn, ret;\n    fn = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];\n    ignoreStack.unshift('ignore');\n    ret = fn.apply(null, args);\n    ignoreStack.shift();\n    return ret;\n  };\n\n  Pace.track = function() {\n    var args, fn, ret;\n    fn = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];\n    ignoreStack.unshift('track');\n    ret = fn.apply(null, args);\n    ignoreStack.shift();\n    return ret;\n  };\n\n  shouldTrack = function(method) {\n    var _ref2;\n    if (method == null) {\n      method = 'GET';\n    }\n    if (ignoreStack[0] === 'track') {\n      return 'force';\n    }\n    if (!ignoreStack.length && options.ajax) {\n      if (method === 'socket' && options.ajax.trackWebSockets) {\n        return true;\n      } else if (_ref2 = method.toUpperCase(), __indexOf.call(options.ajax.trackMethods, _ref2) >= 0) {\n        return true;\n      }\n    }\n    return false;\n  };\n\n  RequestIntercept = (function(_super) {\n    __extends(RequestIntercept, _super);\n\n    function RequestIntercept() {\n      var monitorXHR,\n        _this = this;\n      RequestIntercept.__super__.constructor.apply(this, arguments);\n      monitorXHR = function(req) {\n        var _open;\n        _open = req.open;\n        return req.open = function(type, url, async) {\n          if (shouldTrack(type)) {\n            _this.trigger('request', {\n              type: type,\n              url: url,\n              request: req\n            });\n          }\n          return _open.apply(req, arguments);\n        };\n      };\n      window.XMLHttpRequest = function(flags) {\n        var req;\n        req = new _XMLHttpRequest(flags);\n        monitorXHR(req);\n        return req;\n      };\n      try {\n        extendNative(window.XMLHttpRequest, _XMLHttpRequest);\n      } catch (_error) {}\n      if (_XDomainRequest != null) {\n        window.XDomainRequest = function() {\n          var req;\n          req = new _XDomainRequest;\n          monitorXHR(req);\n          return req;\n        };\n        try {\n          extendNative(window.XDomainRequest, _XDomainRequest);\n        } catch (_error) {}\n      }\n      if ((_WebSocket != null) && options.ajax.trackWebSockets) {\n        window.WebSocket = function(url, protocols) {\n          var req;\n          if (protocols != null) {\n            req = new _WebSocket(url, protocols);\n          } else {\n            req = new _WebSocket(url);\n          }\n          if (shouldTrack('socket')) {\n            _this.trigger('request', {\n              type: 'socket',\n              url: url,\n              protocols: protocols,\n              request: req\n            });\n          }\n          return req;\n        };\n        try {\n          extendNative(window.WebSocket, _WebSocket);\n        } catch (_error) {}\n      }\n    }\n\n    return RequestIntercept;\n\n  })(Events);\n\n  _intercept = null;\n\n  getIntercept = function() {\n    if (_intercept == null) {\n      _intercept = new RequestIntercept;\n    }\n    return _intercept;\n  };\n\n  shouldIgnoreURL = function(url) {\n    var pattern, _j, _len1, _ref2;\n    _ref2 = options.ajax.ignoreURLs;\n    for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {\n      pattern = _ref2[_j];\n      if (typeof pattern === 'string') {\n        if (url.indexOf(pattern) !== -1) {\n          return true;\n        }\n      } else {\n        if (pattern.test(url)) {\n          return true;\n        }\n      }\n    }\n    return false;\n  };\n\n  getIntercept().on('request', function(_arg) {\n    var after, args, request, type, url;\n    type = _arg.type, request = _arg.request, url = _arg.url;\n    if (shouldIgnoreURL(url)) {\n      return;\n    }\n    if (!Pace.running && (options.restartOnRequestAfter !== false || shouldTrack(type) === 'force')) {\n      args = arguments;\n      after = options.restartOnRequestAfter || 0;\n      if (typeof after === 'boolean') {\n        after = 0;\n      }\n      return setTimeout(function() {\n        var stillActive, _j, _len1, _ref2, _ref3, _results;\n        if (type === 'socket') {\n          stillActive = request.readyState < 2;\n        } else {\n          stillActive = (0 < (_ref2 = request.readyState) && _ref2 < 4);\n        }\n        if (stillActive) {\n          Pace.restart();\n          _ref3 = Pace.sources;\n          _results = [];\n          for (_j = 0, _len1 = _ref3.length; _j < _len1; _j++) {\n            source = _ref3[_j];\n            if (source instanceof AjaxMonitor) {\n              source.watch.apply(source, args);\n              break;\n            } else {\n              _results.push(void 0);\n            }\n          }\n          return _results;\n        }\n      }, after);\n    }\n  });\n\n  AjaxMonitor = (function() {\n    function AjaxMonitor() {\n      var _this = this;\n      this.elements = [];\n      getIntercept().on('request', function() {\n        return _this.watch.apply(_this, arguments);\n      });\n    }\n\n    AjaxMonitor.prototype.watch = function(_arg) {\n      var request, tracker, type, url;\n      type = _arg.type, request = _arg.request, url = _arg.url;\n      if (shouldIgnoreURL(url)) {\n        return;\n      }\n      if (type === 'socket') {\n        tracker = new SocketRequestTracker(request);\n      } else {\n        tracker = new XHRRequestTracker(request);\n      }\n      return this.elements.push(tracker);\n    };\n\n    return AjaxMonitor;\n\n  })();\n\n  XHRRequestTracker = (function() {\n    function XHRRequestTracker(request) {\n      var event, size, _j, _len1, _onreadystatechange, _ref2,\n        _this = this;\n      this.progress = 0;\n      if (window.ProgressEvent != null) {\n        size = null;\n        request.addEventListener('progress', function(evt) {\n          if (evt.lengthComputable) {\n            return _this.progress = 100 * evt.loaded / evt.total;\n          } else {\n            return _this.progress = _this.progress + (100 - _this.progress) / 2;\n          }\n        });\n        _ref2 = ['load', 'abort', 'timeout', 'error'];\n        for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {\n          event = _ref2[_j];\n          request.addEventListener(event, function() {\n            return _this.progress = 100;\n          });\n        }\n      } else {\n        _onreadystatechange = request.onreadystatechange;\n        request.onreadystatechange = function() {\n          var _ref3;\n          if ((_ref3 = request.readyState) === 0 || _ref3 === 4) {\n            _this.progress = 100;\n          } else if (request.readyState === 3) {\n            _this.progress = 50;\n          }\n          return typeof _onreadystatechange === \"function\" ? _onreadystatechange.apply(null, arguments) : void 0;\n        };\n      }\n    }\n\n    return XHRRequestTracker;\n\n  })();\n\n  SocketRequestTracker = (function() {\n    function SocketRequestTracker(request) {\n      var event, _j, _len1, _ref2,\n        _this = this;\n      this.progress = 0;\n      _ref2 = ['error', 'open'];\n      for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {\n        event = _ref2[_j];\n        request.addEventListener(event, function() {\n          return _this.progress = 100;\n        });\n      }\n    }\n\n    return SocketRequestTracker;\n\n  })();\n\n  ElementMonitor = (function() {\n    function ElementMonitor(options) {\n      var selector, _j, _len1, _ref2;\n      if (options == null) {\n        options = {};\n      }\n      this.elements = [];\n      if (options.selectors == null) {\n        options.selectors = [];\n      }\n      _ref2 = options.selectors;\n      for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {\n        selector = _ref2[_j];\n        this.elements.push(new ElementTracker(selector));\n      }\n    }\n\n    return ElementMonitor;\n\n  })();\n\n  ElementTracker = (function() {\n    function ElementTracker(selector) {\n      this.selector = selector;\n      this.progress = 0;\n      this.check();\n    }\n\n    ElementTracker.prototype.check = function() {\n      var _this = this;\n      if (document.querySelector(this.selector)) {\n        return this.done();\n      } else {\n        return setTimeout((function() {\n          return _this.check();\n        }), options.elements.checkInterval);\n      }\n    };\n\n    ElementTracker.prototype.done = function() {\n      return this.progress = 100;\n    };\n\n    return ElementTracker;\n\n  })();\n\n  DocumentMonitor = (function() {\n    DocumentMonitor.prototype.states = {\n      loading: 0,\n      interactive: 50,\n      complete: 100\n    };\n\n    function DocumentMonitor() {\n      var _onreadystatechange, _ref2,\n        _this = this;\n      this.progress = (_ref2 = this.states[document.readyState]) != null ? _ref2 : 100;\n      _onreadystatechange = document.onreadystatechange;\n      document.onreadystatechange = function() {\n        if (_this.states[document.readyState] != null) {\n          _this.progress = _this.states[document.readyState];\n        }\n        return typeof _onreadystatechange === \"function\" ? _onreadystatechange.apply(null, arguments) : void 0;\n      };\n    }\n\n    return DocumentMonitor;\n\n  })();\n\n  EventLagMonitor = (function() {\n    function EventLagMonitor() {\n      var avg, interval, last, points, samples,\n        _this = this;\n      this.progress = 0;\n      avg = 0;\n      samples = [];\n      points = 0;\n      last = now();\n      interval = setInterval(function() {\n        var diff;\n        diff = now() - last - 50;\n        last = now();\n        samples.push(diff);\n        if (samples.length > options.eventLag.sampleCount) {\n          samples.shift();\n        }\n        avg = avgAmplitude(samples);\n        if (++points >= options.eventLag.minSamples && avg < options.eventLag.lagThreshold) {\n          _this.progress = 100;\n          return clearInterval(interval);\n        } else {\n          return _this.progress = 100 * (3 / (avg + 3));\n        }\n      }, 50);\n    }\n\n    return EventLagMonitor;\n\n  })();\n\n  Scaler = (function() {\n    function Scaler(source) {\n      this.source = source;\n      this.last = this.sinceLastUpdate = 0;\n      this.rate = options.initialRate;\n      this.catchup = 0;\n      this.progress = this.lastProgress = 0;\n      if (this.source != null) {\n        this.progress = result(this.source, 'progress');\n      }\n    }\n\n    Scaler.prototype.tick = function(frameTime, val) {\n      var scaling;\n      if (val == null) {\n        val = result(this.source, 'progress');\n      }\n      if (val >= 100) {\n        this.done = true;\n      }\n      if (val === this.last) {\n        this.sinceLastUpdate += frameTime;\n      } else {\n        if (this.sinceLastUpdate) {\n          this.rate = (val - this.last) / this.sinceLastUpdate;\n        }\n        this.catchup = (val - this.progress) / options.catchupTime;\n        this.sinceLastUpdate = 0;\n        this.last = val;\n      }\n      if (val > this.progress) {\n        this.progress += this.catchup * frameTime;\n      }\n      scaling = 1 - Math.pow(this.progress / 100, options.easeFactor);\n      this.progress += scaling * this.rate * frameTime;\n      this.progress = Math.min(this.lastProgress + options.maxProgressPerFrame, this.progress);\n      this.progress = Math.max(0, this.progress);\n      this.progress = Math.min(100, this.progress);\n      this.lastProgress = this.progress;\n      return this.progress;\n    };\n\n    return Scaler;\n\n  })();\n\n  sources = null;\n\n  scalers = null;\n\n  bar = null;\n\n  uniScaler = null;\n\n  animation = null;\n\n  cancelAnimation = null;\n\n  Pace.running = false;\n\n  handlePushState = function() {\n    if (options.restartOnPushState) {\n      return Pace.restart();\n    }\n  };\n\n  if (window.history.pushState != null) {\n    _pushState = window.history.pushState;\n    window.history.pushState = function() {\n      handlePushState();\n      return _pushState.apply(window.history, arguments);\n    };\n  }\n\n  if (window.history.replaceState != null) {\n    _replaceState = window.history.replaceState;\n    window.history.replaceState = function() {\n      handlePushState();\n      return _replaceState.apply(window.history, arguments);\n    };\n  }\n\n  SOURCE_KEYS = {\n    ajax: AjaxMonitor,\n    elements: ElementMonitor,\n    document: DocumentMonitor,\n    eventLag: EventLagMonitor\n  };\n\n  (init = function() {\n    var type, _j, _k, _len1, _len2, _ref2, _ref3, _ref4;\n    Pace.sources = sources = [];\n    _ref2 = ['ajax', 'elements', 'document', 'eventLag'];\n    for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {\n      type = _ref2[_j];\n      if (options[type] !== false) {\n        sources.push(new SOURCE_KEYS[type](options[type]));\n      }\n    }\n    _ref4 = (_ref3 = options.extraSources) != null ? _ref3 : [];\n    for (_k = 0, _len2 = _ref4.length; _k < _len2; _k++) {\n      source = _ref4[_k];\n      sources.push(new source(options));\n    }\n    Pace.bar = bar = new Bar;\n    scalers = [];\n    return uniScaler = new Scaler;\n  })();\n\n  Pace.stop = function() {\n    Pace.trigger('stop');\n    Pace.running = false;\n    bar.destroy();\n    cancelAnimation = true;\n    if (animation != null) {\n      if (typeof cancelAnimationFrame === \"function\") {\n        cancelAnimationFrame(animation);\n      }\n      animation = null;\n    }\n    return init();\n  };\n\n  Pace.restart = function() {\n    Pace.trigger('restart');\n    Pace.stop();\n    return Pace.start();\n  };\n\n  Pace.go = function() {\n    var start;\n    Pace.running = true;\n    bar.render();\n    start = now();\n    cancelAnimation = false;\n    return animation = runAnimation(function(frameTime, enqueueNextFrame) {\n      var avg, count, done, element, elements, i, j, remaining, scaler, scalerList, sum, _j, _k, _len1, _len2, _ref2;\n      remaining = 100 - bar.progress;\n      count = sum = 0;\n      done = true;\n      for (i = _j = 0, _len1 = sources.length; _j < _len1; i = ++_j) {\n        source = sources[i];\n        scalerList = scalers[i] != null ? scalers[i] : scalers[i] = [];\n        elements = (_ref2 = source.elements) != null ? _ref2 : [source];\n        for (j = _k = 0, _len2 = elements.length; _k < _len2; j = ++_k) {\n          element = elements[j];\n          scaler = scalerList[j] != null ? scalerList[j] : scalerList[j] = new Scaler(element);\n          done &= scaler.done;\n          if (scaler.done) {\n            continue;\n          }\n          count++;\n          sum += scaler.tick(frameTime);\n        }\n      }\n      avg = sum / count;\n      bar.update(uniScaler.tick(frameTime, avg));\n      if (bar.done() || done || cancelAnimation) {\n        bar.update(100);\n        Pace.trigger('done');\n        return setTimeout(function() {\n          bar.finish();\n          Pace.running = false;\n          return Pace.trigger('hide');\n        }, Math.max(options.ghostTime, Math.max(options.minTime - (now() - start), 0)));\n      } else {\n        return enqueueNextFrame();\n      }\n    });\n  };\n\n  Pace.start = function(_options) {\n    extend(options, _options);\n    Pace.running = true;\n    try {\n      bar.render();\n    } catch (_error) {\n      NoTargetError = _error;\n    }\n    if (!document.querySelector('.pace')) {\n      return setTimeout(Pace.start, 50);\n    } else {\n      Pace.trigger('start');\n      return Pace.go();\n    }\n  };\n\n  if (typeof define === 'function' && define.amd) {\n    define(function() {\n      return Pace;\n    });\n  } else if (typeof exports === 'object') {\n    module.exports = Pace;\n  } else {\n    if (options.startOnPageLoad) {\n      Pace.start();\n    }\n  }\n\n}).call(this);\n"
  },
  {
    "path": "public/frontend/plugins/pace/package.json",
    "content": "{\n  \"name\": \"pace\",\n  \"version\": \"0.5.6\",\n  \"description\": \"Automatic page load progress bar\",\n  \"authors\": [\n    \"Zack Bloom <zackbloom@gmail.com>\",\n    \"Adam Schwartz <adam.flynn.schwartz@gmail.com>\"\n  ],\n  \"license\": \"MIT\",\n  \"devDependencies\": {\n    \"grunt-contrib-coffee\": \"~0.7.0\",\n    \"coffee-script\": \"~1.6.3\",\n    \"grunt-contrib-uglify\": \"~0.2.4\",\n    \"grunt-cli\": \"~0.1.9\",\n    \"grunt\": \"~0.4.1\",\n    \"grunt-contrib-watch\": \"~0.5.3\",\n    \"color\": \"~0.4.4\"\n  }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/templates/pace-theme-barber-shop.tmpl.css",
    "content": ".pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace-inactive {\n  display: none;\n}\n\n.pace .pace-progress {\n  background-color: `args.color || \"#29d\"`;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 12px;\n  overflow: hidden;\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n\n.pace .pace-progress-inner {\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: -32px;\n  bottom: 0;\n\n  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.2)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.2)), color-stop(0.75, rgba(255, 255, 255, 0.2)), color-stop(0.75, transparent), to(transparent));\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);\n  background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);\n  -webkit-background-size: 32px 32px;\n  -moz-background-size: 32px 32px;\n  -o-background-size: 32px 32px;\n  background-size: 32px 32px;\n\n  -webkit-animation: pace-stripe-animation 500ms linear infinite;\n  -moz-animation: pace-stripe-animation 500ms linear infinite;\n  -ms-animation: pace-stripe-animation 500ms linear infinite;\n  -o-animation: pace-stripe-animation 500ms linear infinite;\n  animation: pace-stripe-animation 500ms linear infinite;\n}\n\n@-webkit-keyframes pace-stripe-animation {\n  0% { -webkit-transform: none; transform: none; }\n  100% { -webkit-transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n@-moz-keyframes pace-stripe-animation {\n  0% { -moz-transform: none; transform: none; }\n  100% { -moz-transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n@-o-keyframes pace-stripe-animation {\n  0% { -o-transform: none; transform: none; }\n  100% { -o-transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n@-ms-keyframes pace-stripe-animation {\n  0% { -ms-transform: none; transform: none; }\n  100% { -ms-transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n@keyframes pace-stripe-animation {\n  0% { transform: none; transform: none; }\n  100% { transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/templates/pace-theme-big-counter.tmpl.css",
    "content": ".pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace.pace-inactive .pace-progress {\n  display: none;\n}\n\n.pace .pace-progress {\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  right: 0;\n  height: 5rem;\n  width: 5rem;\n}\n\n.pace .pace-progress:after {\n  display: block;\n  position: absolute;\n  top: 0;\n  right: .5rem;\n  content: attr(data-progress-text);\n  font-family: \"Helvetica Neue\", sans-serif;\n  font-weight: 100;\n  font-size: 5rem;\n  line-height: 1;\n  text-align: right;\n  color: `Color(args.color || '#000').clearer(0.8).rgbString()`;\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/templates/pace-theme-bounce.tmpl.css",
    "content": ".pace {\n  width: 140px;\n  height: 300px;\n  position: fixed;\n  top: -90px;\n  right: -20px;\n  z-index: 2000;\n  -webkit-transform: scale(0);\n  -moz-transform: scale(0);\n  -ms-transform: scale(0);\n  -o-transform: scale(0);\n  transform: scale(0);\n  opacity: 0;\n  -webkit-transition: all 2s linear 0s;\n  -moz-transition: all 2s linear 0s;\n  transition: all 2s linear 0s;\n}\n\n.pace.pace-active {\n  -webkit-transform: scale(.25);\n  -moz-transform: scale(.25);\n  -ms-transform: scale(.25);\n  -o-transform: scale(.25);\n  transform: scale(.25);\n  opacity: 1;\n}\n\n.pace .pace-activity {\n  width: 140px;\n  height: 140px;\n  border-radius: 70px;\n  background: `args.color || \"#29d\"`;\n  position: absolute;\n  top: 0;\n  z-index: 1911;\n  -webkit-animation: pace-bounce 1s infinite;\n  -moz-animation: pace-bounce 1s infinite;\n  -o-animation: pace-bounce 1s infinite;\n  -ms-animation: pace-bounce 1s infinite;\n  animation: pace-bounce 1s infinite;\n}\n\n.pace .pace-progress {\n  position: absolute;\n  display: block;\n  left: 50%;\n  bottom: 0;\n  z-index: 1910;\n  margin-left: -30px;\n  width: 60px;\n  height: 75px;\n  background: rgba(20, 20, 20, .1);\n  box-shadow: 0 0 20px 35px rgba(20, 20, 20, .1);\n  border-radius: 30px / 40px;\n  -webkit-transform: scaleY(.3);\n  -moz-transform: scaleY(.3);\n  -ms-transform: scaleY(.3);\n  -o-transform: scaleY(.3);\n  transform: scaleY(.3);\n  -webkit-animation: pace-compress .5s infinite alternate;\n  -moz-animation: pace-compress .5s infinite alternate;\n  -o-animation: pace-compress .5s infinite alternate;\n  -ms-animation: pace-compress .5s infinite alternate;\n  animation: pace-compress .5s infinite alternate;\n}\n\n@-webkit-keyframes pace-bounce {\n  0% {\n    top: 0;\n    -webkit-animation-timing-function: ease-in;\n  }\n  40% {}\n  50% {\n    top: 140px;\n    height: 140px;\n    -webkit-animation-timing-function: ease-out;\n  }\n  55% {\n    top: 160px;\n    height: 120px;\n    border-radius: 70px / 60px;\n    -webkit-animation-timing-function: ease-in;\n  }\n  65% {\n    top: 120px;\n    height: 140px;\n    border-radius: 70px;\n    -webkit-animation-timing-function: ease-out;\n  }\n  95% {\n    top: 0;\n    -webkit-animation-timing-function: ease-in;\n  }\n  100% {\n    top: 0;\n    -webkit-animation-timing-function: ease-in;\n  }\n}\n\n@-moz-keyframes pace-bounce {\n  0% {\n    top: 0;\n    -moz-animation-timing-function: ease-in;\n  }\n  40% {}\n  50% {\n    top: 140px;\n    height: 140px;\n    -moz-animation-timing-function: ease-out;\n  }\n  55% {\n    top: 160px;\n    height: 120px;\n    border-radius: 70px / 60px;\n    -moz-animation-timing-function: ease-in;\n  }\n  65% {\n    top: 120px;\n    height: 140px;\n    border-radius: 70px;\n    -moz-animation-timing-function: ease-out;}\n  95% {\n    top: 0;\n    -moz-animation-timing-function: ease-in;\n  }\n  100% {top: 0;\n    -moz-animation-timing-function: ease-in;\n  }\n}\n\n@keyframes pace-bounce {\n  0% {\n    top: 0;\n    animation-timing-function: ease-in;\n  }\n  50% {\n    top: 140px;\n    height: 140px;\n    animation-timing-function: ease-out;\n  }\n  55% {\n    top: 160px;\n    height: 120px;\n    border-radius: 70px / 60px;\n    animation-timing-function: ease-in;\n  }\n  65% {\n    top: 120px;\n    height: 140px;\n    border-radius: 70px;\n    animation-timing-function: ease-out;\n  }\n  95% {\n    top: 0;\n    animation-timing-function: ease-in;\n  }\n  100% {\n    top: 0;\n    animation-timing-function: ease-in;\n  }\n}\n\n@-webkit-keyframes pace-compress {\n  0% {\n    bottom: 0;\n    margin-left: -30px;\n    width: 60px;\n    height: 75px;\n    background: rgba(20, 20, 20, .1);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .1);\n    border-radius: 30px / 40px;\n    -webkit-animation-timing-function: ease-in;\n  }\n  100% {\n    bottom: 30px;\n    margin-left: -10px;\n    width: 20px;\n    height: 5px;\n    background: rgba(20, 20, 20, .3);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .3);\n    border-radius: 20px / 20px;\n    -webkit-animation-timing-function: ease-out;\n  }\n}\n\n@-moz-keyframes pace-compress {\n  0% {\n    bottom: 0;\n    margin-left: -30px;\n    width: 60px;\n    height: 75px;\n    background: rgba(20, 20, 20, .1);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .1);\n    border-radius: 30px / 40px;\n    -moz-animation-timing-function: ease-in;\n  }\n  100% {\n    bottom: 30px;\n    margin-left: -10px;\n    width: 20px;\n    height: 5px;\n    background: rgba(20, 20, 20, .3);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .3);\n    border-radius: 20px / 20px;\n    -moz-animation-timing-function: ease-out;\n  }\n}\n\n@keyframes pace-compress {\n  0% {\n    bottom: 0;\n    margin-left: -30px;\n    width: 60px;\n    height: 75px;\n    background: rgba(20, 20, 20, .1);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .1);\n    border-radius: 30px / 40px;\n    animation-timing-function: ease-in;\n  }\n  100% {\n    bottom: 30px;\n    margin-left: -10px;\n    width: 20px;\n    height: 5px;\n    background: rgba(20, 20, 20, .3);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .3);\n    border-radius: 20px / 20px;\n    animation-timing-function: ease-out;\n  }\n}"
  },
  {
    "path": "public/frontend/plugins/pace/templates/pace-theme-center-atom.tmpl.css",
    "content": ".pace.pace-inactive {\n  display: none;\n}\n\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n\n  z-index: 2000;\n  position: fixed;\n  height: 60px;\n  width: 100px;\n  margin: auto;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n}\n\n.pace .pace-progress {\n  z-index: 2000;\n  position: absolute;\n  height: 60px;\n  width: 100px !important;\n}\n\n.pace .pace-progress:before {\n  content: attr(data-progress-text);\n  text-align: center;\n  color: #fff;\n  background: `args.color || \"#29d\"`;\n  border-radius: 50%;\n  font-family: \"Helvetica Neue\", sans-serif;\n  font-size: 14px;\n  font-weight: 100;\n  line-height: 1;\n  padding: 20% 0 7px;\n  width: 50%;\n  height: 40%;\n  margin: 10px 0 0 30px;\n  display: block;\n  z-index: 999;\n  position: absolute;\n}\n\n.pace .pace-progress:after {\n  border-radius: 50%;\n  border: 5px solid `args.color || \"#29d\"`;\n  content: ' ';\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 60px;\n  width: 100px;\n\n  -webkit-transform: rotate(90deg);\n     -moz-transform: rotate(90deg);\n       -o-transform: rotate(90deg);\n          transform: rotate(90deg);\n  -webkit-animation: spin-3 2s linear infinite;\n     -moz-animation: spin-3 2s linear infinite;\n       -o-animation: spin-3 2s linear infinite;\n          animation: spin-3 2s linear infinite;\n}\n\n.pace .pace-activity {\n  font-size: 15px;\n  line-height: 1;\n  z-index: 2000;\n  position: absolute;\n  height: 60px;\n  width: 100px;\n\n  display: block;\n}\n\n.pace .pace-activity:before {\n  border-radius: 50%;\n  border: 5px solid `args.color || \"#29d\"`;\n  content: ' ';\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 60px;\n  width: 100px;\n\n  -webkit-animation: spin-1 2s linear infinite;\n     -moz-animation: spin-1 2s linear infinite;\n       -o-animation: spin-1 2s linear infinite;\n          animation: spin-1 2s linear infinite;\n}\n\n.pace .pace-activity:after{\n  border-radius: 50%;\n  border: 5px solid `args.color || \"#29d\"`;\n  content: ' ';\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 60px;\n  width: 100px;\n\n  -webkit-transform: rotate(45deg);\n     -moz-transform: rotate(45deg);\n       -o-transform: rotate(45deg);\n          transform: rotate(45deg);\n  -webkit-animation: spin-2 2s linear infinite;\n     -moz-animation: spin-2 2s linear infinite;\n       -o-animation: spin-2 2s linear infinite;\n          animation: spin-2 2s linear infinite;\n}\n\n@-webkit-keyframes spin-1 {\n  0%  { -webkit-transform: rotate(0deg); }\n  100%{ -webkit-transform: rotate(359deg);}\n}\n@-moz-keyframes spin-1 {\n  0%  { -moz-transform: rotate(0deg); }\n  100%{ -moz-transform: rotate(359deg);}\n}\n@-o-keyframes spin-1 {\n  0%  { -o-transform: rotate(0deg); }\n  100%{ -o-transform: rotate(359deg);}\n}\n@keyframes spin-1 {\n  0%  { transform: rotate(0deg); }\n  100%{ transform: rotate(359deg);}\n}\n\n@-webkit-keyframes spin-2 {\n  0%  { -webkit-transform: rotate(59.8deg); }\n  100%{ -webkit-transform: rotate(418.8deg);}\n}\n@-moz-keyframes spin-2 {\n  0%  { -moz-transform: rotate(59.8deg); }\n  100%{ -moz-transform: rotate(418.8deg);}\n}\n@-o-keyframes spin-2 {\n  0%  { -o-transform: rotate(59.8deg); }\n  100%{ -o-transform: rotate(418.8deg);}\n}\n@keyframes spin-2 {\n  0%  { transform: rotate(59.8deg); }\n  100%{ transform: rotate(418.8deg);}\n}\n\n@-webkit-keyframes spin-3 {\n  0%  { -webkit-transform: rotate(119.6deg); }\n  100%{ -webkit-transform: rotate(478.6deg);}\n}\n@-moz-keyframes spin-3 {\n  0%  { -moz-transform: rotate(119.6deg); }\n  100%{ -moz-transform: rotate(478.6deg);}\n}\n@-o-keyframes spin-3 {\n  0%  { -o-transform: rotate(119.6deg); }\n  100%{ -o-transform: rotate(478.6deg);}\n}\n@keyframes spin-3 {\n  0%  { transform: rotate(119.6deg); }\n  100%{ transform: rotate(478.6deg);}\n}"
  },
  {
    "path": "public/frontend/plugins/pace/templates/pace-theme-center-circle.tmpl.css",
    "content": ".pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n\n  -webkit-perspective: 12rem;\n  -moz-perspective: 12rem;\n  -ms-perspective: 12rem;\n  -o-perspective: 12rem;\n  perspective: 12rem;\n\n  z-index: 2000;\n  position: fixed;\n  height: 6rem;\n  width: 6rem;\n  margin: auto;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n}\n\n.pace.pace-inactive .pace-progress {\n  display: none;\n}\n\n.pace .pace-progress {\n  position: fixed;\n  z-index: 2000;\n  display: block;\n  position: absolute;\n  left: 0;\n  top: 0;\n  height: 6rem;\n  width: 6rem !important;\n  line-height: 6rem;\n  font-size: 2rem;\n  border-radius: 50%;\n  background: `Color(args.color || '#29d').clearer(0.2).rgbString()`;\n  color: #fff;\n  font-family: \"Helvetica Neue\", sans-serif;\n  font-weight: 100;\n  text-align: center;\n\n  -webkit-animation: pace-3d-spinner linear infinite 2s;\n  -moz-animation: pace-3d-spinner linear infinite 2s;\n  -ms-animation: pace-3d-spinner linear infinite 2s;\n  -o-animation: pace-3d-spinner linear infinite 2s;\n  animation: pace-3d-spinner linear infinite 2s;\n\n  -webkit-transform-style: preserve-3d;\n  -moz-transform-style: preserve-3d;\n  -ms-transform-style: preserve-3d;\n  -o-transform-style: preserve-3d;\n  transform-style: preserve-3d;\n}\n\n.pace .pace-progress:after {\n  content: attr(data-progress-text);\n  display: block;\n}\n\n@-webkit-keyframes pace-3d-spinner {\n  from {\n    -webkit-transform: rotateY(0deg);\n  }\n  to {\n    -webkit-transform: rotateY(360deg);\n  }\n}\n\n@-moz-keyframes pace-3d-spinner {\n  from {\n    -moz-transform: rotateY(0deg);\n  }\n  to {\n    -moz-transform: rotateY(360deg);\n  }\n}\n\n@-ms-keyframes pace-3d-spinner {\n  from {\n    -ms-transform: rotateY(0deg);\n  }\n  to {\n    -ms-transform: rotateY(360deg);\n  }\n}\n\n@-o-keyframes pace-3d-spinner {\n  from {\n    -o-transform: rotateY(0deg);\n  }\n  to {\n    -o-transform: rotateY(360deg);\n  }\n}\n\n@keyframes pace-3d-spinner {\n  from {\n    transform: rotateY(0deg);\n  }\n  to {\n    transform: rotateY(360deg);\n  }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/templates/pace-theme-center-radar.tmpl.css",
    "content": ".pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n\n  z-index: 2000;\n  position: fixed;\n  height: 90px;\n  width: 90px;\n  margin: auto;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n}\n\n.pace.pace-inactive .pace-activity {\n  display: none;\n}\n\n.pace .pace-activity {\n  position: fixed;\n  z-index: 2000;\n  display: block;\n  position: absolute;\n  left: -30px;\n  top: -30px;\n  height: 90px;\n  width: 90px;\n  display: block;\n  border-width: 30px;\n  border-style: double;\n  border-color: `args.color || \"#29d\"` transparent transparent;\n  border-radius: 50%;\n\n  -webkit-animation: spin 1s linear infinite;\n     -moz-animation: spin 1s linear infinite;\n       -o-animation: spin 1s linear infinite;\n          animation: spin 1s linear infinite;\n}\n\n.pace .pace-activity:before {\n  content: ' ';\n  position: absolute;\n  top: 10px;\n  left: 10px;\n  height: 50px;\n  width: 50px;\n  display: block;\n  border-width: 10px;\n  border-style: solid;\n  border-color: `args.color || \"#29d\"` transparent transparent;\n  border-radius: 50%;\n}\n\n\n@-webkit-keyframes spin {\n  100% { -webkit-transform: rotate(359deg); }\n}\n\n@-moz-keyframes spin {\n  100% { -moz-transform: rotate(359deg); }\n}\n\n@-o-keyframes spin {\n  100% { -moz-transform: rotate(359deg); }\n}\n\n@keyframes spin {\n  100% {  transform: rotate(359deg); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/templates/pace-theme-center-simple.tmpl.css",
    "content": ".pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n\n  z-index: 2000;\n  position: fixed;\n  margin: auto;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  height: 5px;\n  width: 200px;\n  background: #fff;\n  border: 1px solid `args.color || \"#29d\"`;\n}\n\n.pace .pace-progress {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  -ms-box-sizing: border-box;\n  -o-box-sizing: border-box;\n  box-sizing: border-box;\n\n  -webkit-transition: width 1s ease-in-out 1s linear;\n  -moz-transition: width 1s ease-in-out 1s linear;\n  -ms-transition: width 1s ease-in-out 1s linear;\n  -o-transition: width 1s ease-in-out 1s linear;\n  transition: width 1s ease-in-out 1s linear;\n\n  -webkit-transform: translate3d(0, 0, 0);\n  -moz-transform: translate3d(0, 0, 0);\n  -ms-transform: translate3d(0, 0, 0);\n  -o-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n\n  max-width: 200px;\n  position: fixed;\n  z-index: 2000;\n  display: block;\n  position: absolute;\n  left: 0px;\n  top: 0px;\n  height: 100%;\n  background: `args.color || \"#29d\"`;\n}\n\n.pace.pace-inactive {\n  display: none;\n}"
  },
  {
    "path": "public/frontend/plugins/pace/templates/pace-theme-corner-indicator.tmpl.css",
    "content": ".pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace .pace-activity {\n  display: block;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  right: 0;\n  width: 300px;\n  height: 300px;\n  background: `args.color || \"#29d\"`;\n  -webkit-transition: -webkit-transform 0.3s;\n  transition: transform 0.3s;\n  -webkit-transform: translateX(100%) translateY(-100%) rotate(45deg);\n  transform: translateX(100%) translateY(-100%) rotate(45deg);\n  pointer-events: none;\n}\n\n.pace.pace-active .pace-activity {\n  -webkit-transform: translateX(50%) translateY(-50%) rotate(45deg);\n  transform: translateX(50%) translateY(-50%) rotate(45deg);\n}\n\n.pace .pace-activity::before,\n.pace .pace-activity::after {\n    position: absolute;\n    bottom: 30px;\n    left: 50%;\n    display: block;\n    border: 5px solid #fff;\n    border-radius: 50%;\n    content: '';\n}\n\n.pace .pace-activity::before {\n    margin-left: -40px;\n    width: 80px;\n    height: 80px;\n    border-right-color: rgba(0, 0, 0, .2);\n    border-left-color: rgba(0, 0, 0, .2);\n    -webkit-animation: pace-rotation 3s linear infinite;\n    animation: pace-rotation 3s linear infinite;\n}\n\n.pace .pace-activity::after {\n    bottom: 50px;\n    margin-left: -20px;\n    width: 40px;\n    height: 40px;\n    border-top-color: rgba(0, 0, 0, .2);\n    border-bottom-color: rgba(0, 0, 0, .2);\n    -webkit-animation: pace-rotation 1s linear infinite;\n    animation: pace-rotation 1s linear infinite;\n}\n\n@-webkit-keyframes pace-rotation {\n  0% { -webkit-transform: rotate(0deg); }\n  100% { -webkit-transform: rotate(359deg); }\n}\n@keyframes pace-rotation {\n  0% { transform: rotate(0deg); }\n  100% { transform: rotate(359deg); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/templates/pace-theme-fill-left.tmpl.css",
    "content": ".pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace .pace-progress {\n  background-color: `Color(args.color).clearer(0.8).rgbString() || \"rgba(0, 0, 0, 0.2)\"`;\n  position: fixed;\n  z-index: -1;\n  top: 0;\n  left: 0;\n  bottom: 0;\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/templates/pace-theme-flash.tmpl.css",
    "content": ".pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace-inactive {\n  display: none;\n}\n\n.pace .pace-progress {\n  background: `args.color || \"#29d\"`;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 2px;\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n\n.pace .pace-progress-inner {\n  display: block;\n  position: absolute;\n  right: 0px;\n  width: 100px;\n  height: 100%;\n  box-shadow: 0 0 10px `args.color || '#29d'`, 0 0 5px `args.color || '#29d'`;\n  opacity: 1.0;\n  -webkit-transform: rotate(3deg) translate(0px, -4px);\n  -moz-transform: rotate(3deg) translate(0px, -4px);\n  -ms-transform: rotate(3deg) translate(0px, -4px);\n  -o-transform: rotate(3deg) translate(0px, -4px);\n  transform: rotate(3deg) translate(0px, -4px);\n}\n\n.pace .pace-activity {\n  display: block;\n  position: fixed;\n  z-index: 2000;\n  top: 15px;\n  right: 15px;\n  width: 14px;\n  height: 14px;\n  border: solid 2px transparent;\n  border-top-color: `args.color || '#29d'`;\n  border-left-color: `args.color || '#29d'`;\n  border-radius: 10px;\n  -webkit-animation: pace-spinner 400ms linear infinite;\n  -moz-animation: pace-spinner 400ms linear infinite;\n  -ms-animation: pace-spinner 400ms linear infinite;\n  -o-animation: pace-spinner 400ms linear infinite;\n  animation: pace-spinner 400ms linear infinite;\n}\n\n@-webkit-keyframes pace-spinner {\n  0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@-moz-keyframes pace-spinner {\n  0% { -moz-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -moz-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@-o-keyframes pace-spinner {\n  0% { -o-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -o-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@-ms-keyframes pace-spinner {\n  0% { -ms-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -ms-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@keyframes pace-spinner {\n  0% { transform: rotate(0deg); transform: rotate(0deg); }\n  100% { transform: rotate(360deg); transform: rotate(360deg); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/templates/pace-theme-flat-top.tmpl.css",
    "content": ".pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace .pace-progress {\n  display: block;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 12px;\n  background: `args.color || \"#29d\"`;\n\n  -webkit-transition: -webkit-transform .3s, width 1s;\n  -moz-transition: width 1s;\n  -o-transform: width 1s;\n  transition: transform .3s, width 1s;\n\n  -webkit-transform: translateY(-50px);\n  transform: translateY(-50px);\n\n  pointer-events: none;\n}\n\n.pace.pace-active .pace-progress {\n  -webkit-transform: translateY(0);\n  transform: translateY(0);\n}"
  },
  {
    "path": "public/frontend/plugins/pace/templates/pace-theme-loading-bar.tmpl.css",
    "content": ".pace {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  -ms-box-sizing: border-box;\n  -o-box-sizing: border-box;\n  box-sizing: border-box;\n\n  -webkit-border-radius: 10px;\n  -moz-border-radius: 10px;\n  border-radius: 10px;\n\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n\n  z-index: 2000;\n  position: fixed;\n  margin: auto;\n  top: 12px;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  width: 200px;\n  height: 25px;\n  border: 2px solid `args.color || \"#29d\"`;\n  background-color: #fff;\n}\n\n.pace .pace-progress {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  -ms-box-sizing: border-box;\n  -o-box-sizing: border-box;\n  box-sizing: border-box;\n\n  -webkit-border-radius: 5px;\n  -moz-border-radius: 5px;\n  border-radius: 5px;\n\n  -webkit-background-clip: padding-box;\n  -moz-background-clip: padding;\n  background-clip: padding-box;\n\n  -webkit-transition: width 1s ease-in-out 1s linear;\n  -moz-transition: width 1s ease-in-out 1s linear;\n  -ms-transition: width 1s ease-in-out 1s linear;\n  -o-transition: width 1s ease-in-out 1s linear;\n  transition: width 1s ease-in-out 1s linear;\n\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n\n  max-width: 190px;\n  position: fixed;\n  z-index: 2000;\n  display: block;\n  position: absolute;\n  left: 3px;\n  top: 3px;\n  height: 15px;\n  font-size: 12px;\n  background: `args.color || \"#29d\"`;\n  color: `args.color || \"#29d\"`;\n  line-height: 60px;\n  font-weight: bold;\n  font-family:  Helvetica, Arial, \"Lucida Grande\", sans-serif;\n}\n\n.pace .pace-progress:after {\n  content: attr(data-progress-text);\n  display: inline-block;\n}\n\n.pace.pace-inactive {\n  display: none;\n}"
  },
  {
    "path": "public/frontend/plugins/pace/templates/pace-theme-mac-osx.tmpl.css",
    "content": ".pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace-inactive {\n  display: none;\n}\n\n.pace .pace-progress {\n  background-color: `args.color || \"#78c0f0\"`;\n\n  color: `Color(args.color || \"#78c0f0\").lighten(0.25).hexString();`;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 12px;\n  overflow: hidden;\n\n  -webkit-border-radius: 0 0 4px 0;\n  -moz-border-radius: 0 0 4px 0;\n  -o-border-radius: 0 0 4px 0;\n  border-radius: 0 0 4px 0;\n\n  -webkit-box-shadow: inset -1px 0 rgba(0, 0, 0, 0.3), inset 0 -1px rgba(0, 0, 0, 0.3), inset 0 2px rgba(255, 255, 255, 0.5), inset 0 6px rgba(255, 255, 255, 0.3);\n  -moz-box-shadow: inset -1px 0 rgba(0, 0, 0, 0.3), inset 0 -1px rgba(0, 0, 0, 0.3), inset 0 2px rgba(255, 255, 255, 0.5), inset 0 6px rgba(255, 255, 255, 0.3);\n  -o-box-shadow: inset -1px 0 rgba(0, 0, 0, 0.3), inset 0 -1px rgba(0, 0, 0, 0.3), inset 0 2px rgba(255, 255, 255, 0.5), inset 0 6px rgba(255, 255, 255, 0.3);\n  box-shadow: inset -1px 0 rgba(0, 0, 0, 0.3), inset 0 -1px rgba(0, 0, 0, 0.3), inset 0 2px rgba(255, 255, 255, 0.5), inset 0 6px rgba(255, 255, 255, 0.3);\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n\n.pace .pace-progress-inner {\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: -28px;\n  bottom: 0;\n\n  `\n  var out = '';\n  var prefixes = ['-o-', '-moz-', '-webkit-', ''];\n\n  var baseColor = args.color || '#78c0f0';\n  var startColor = Color(baseColor).darken(0.3).clearer(0.4);\n  var endColor = Color(baseColor).clearer(1);\n\n  for(var i in prefixes){\n    var prefix = prefixes[i];\n\n    out += \"  background-image: \" + prefix + \"radial-gradient(\" + startColor.rgbString() + \" 0%, \" + endColor.rgbString() + \" 100%);\\n\";\n  }\n\n  out.substring(2)\n  `\n\n  -webkit-background-size: 28px 100%;\n  -moz-background-size: 28px 100%;\n  -o-background-size: 28px 100%;\n  background-size: 28px 100%;\n\n  -webkit-animation: pace-stripe-animation 500ms linear infinite;\n  -moz-animation: pace-stripe-animation 500ms linear infinite;\n  -ms-animation: pace-stripe-animation 500ms linear infinite;\n  -o-animation: pace-stripe-animation 500ms linear infinite;\n  animation: pace-stripe-animation 500ms linear infinite;\n}\n\n@-webkit-keyframes pace-stripe-animation {\n  0% { -webkit-transform: none; transform: none; }\n  100% { -webkit-transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n@-moz-keyframes pace-stripe-animation {\n  0% { -moz-transform: none; transform: none; }\n  100% { -moz-transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n@-o-keyframes pace-stripe-animation {\n  0% { -o-transform: none; transform: none; }\n  100% { -o-transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n@-ms-keyframes pace-stripe-animation {\n  0% { -ms-transform: none; transform: none; }\n  100% { -ms-transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n@keyframes pace-stripe-animation {\n  0% { transform: none; transform: none; }\n  100% { transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/templates/pace-theme-minimal.tmpl.css",
    "content": ".pace .pace-progress {\n  background: `args.color || \"#29d\"`;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 2px;\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n\n.pace-inactive {\n  display: none;\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/tests/demo.html",
    "content": "<head>\n  <link rel=\"stylesheet\" href=\"../themes/pace-theme-barber-shop.css\" />\n\n  <script>\n    paceOptions = {\n      elements: true\n    };\n  </script>\n  <script src=\"../pace.js\"></script>\n  <script>\n    function load(time){\n      var x = new XMLHttpRequest()\n      x.open('GET', \"http://localhost:5646/walter/\" + time, true);\n      x.send();\n    };\n\n    load(20);\n    load(100);\n    load(500);\n    load(2000);\n    load(3000);\n\n    setTimeout(function(){\n      Pace.ignore(function(){\n        load(3100);\n      });\n    }, 4000);\n\n    Pace.on('hide', function(){\n      console.log('done');\n    });\n\n  </script>\n</head>\n<body></body>\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/black/pace-theme-barber-shop.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace-inactive {\n  display: none;\n}\n\n.pace .pace-progress {\n  background-color: #000000;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 12px;\n  overflow: hidden;\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n\n.pace .pace-progress-inner {\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: -32px;\n  bottom: 0;\n\n  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.2)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.2)), color-stop(0.75, rgba(255, 255, 255, 0.2)), color-stop(0.75, transparent), to(transparent));\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);\n  background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);\n  -webkit-background-size: 32px 32px;\n  -moz-background-size: 32px 32px;\n  -o-background-size: 32px 32px;\n  background-size: 32px 32px;\n\n  -webkit-animation: pace-stripe-animation 500ms linear infinite;\n  -moz-animation: pace-stripe-animation 500ms linear infinite;\n  -ms-animation: pace-stripe-animation 500ms linear infinite;\n  -o-animation: pace-stripe-animation 500ms linear infinite;\n  animation: pace-stripe-animation 500ms linear infinite;\n}\n\n@-webkit-keyframes pace-stripe-animation {\n  0% { -webkit-transform: none; transform: none; }\n  100% { -webkit-transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n@-moz-keyframes pace-stripe-animation {\n  0% { -moz-transform: none; transform: none; }\n  100% { -moz-transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n@-o-keyframes pace-stripe-animation {\n  0% { -o-transform: none; transform: none; }\n  100% { -o-transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n@-ms-keyframes pace-stripe-animation {\n  0% { -ms-transform: none; transform: none; }\n  100% { -ms-transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n@keyframes pace-stripe-animation {\n  0% { transform: none; transform: none; }\n  100% { transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/black/pace-theme-big-counter.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace.pace-inactive .pace-progress {\n  display: none;\n}\n\n.pace .pace-progress {\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  right: 0;\n  height: 5rem;\n  width: 5rem;\n}\n\n.pace .pace-progress:after {\n  display: block;\n  position: absolute;\n  top: 0;\n  right: .5rem;\n  content: attr(data-progress-text);\n  font-family: \"Helvetica Neue\", sans-serif;\n  font-weight: 100;\n  font-size: 5rem;\n  line-height: 1;\n  text-align: right;\n  color: rgba(0, 0, 0, 0.19999999999999996);\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/black/pace-theme-bounce.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  width: 140px;\n  height: 300px;\n  position: fixed;\n  top: -90px;\n  right: -20px;\n  z-index: 2000;\n  -webkit-transform: scale(0);\n  -moz-transform: scale(0);\n  -ms-transform: scale(0);\n  -o-transform: scale(0);\n  transform: scale(0);\n  opacity: 0;\n  -webkit-transition: all 2s linear 0s;\n  -moz-transition: all 2s linear 0s;\n  transition: all 2s linear 0s;\n}\n\n.pace.pace-active {\n  -webkit-transform: scale(.25);\n  -moz-transform: scale(.25);\n  -ms-transform: scale(.25);\n  -o-transform: scale(.25);\n  transform: scale(.25);\n  opacity: 1;\n}\n\n.pace .pace-activity {\n  width: 140px;\n  height: 140px;\n  border-radius: 70px;\n  background: #000000;\n  position: absolute;\n  top: 0;\n  z-index: 1911;\n  -webkit-animation: pace-bounce 1s infinite;\n  -moz-animation: pace-bounce 1s infinite;\n  -o-animation: pace-bounce 1s infinite;\n  -ms-animation: pace-bounce 1s infinite;\n  animation: pace-bounce 1s infinite;\n}\n\n.pace .pace-progress {\n  position: absolute;\n  display: block;\n  left: 50%;\n  bottom: 0;\n  z-index: 1910;\n  margin-left: -30px;\n  width: 60px;\n  height: 75px;\n  background: rgba(20, 20, 20, .1);\n  box-shadow: 0 0 20px 35px rgba(20, 20, 20, .1);\n  border-radius: 30px / 40px;\n  -webkit-transform: scaleY(.3);\n  -moz-transform: scaleY(.3);\n  -ms-transform: scaleY(.3);\n  -o-transform: scaleY(.3);\n  transform: scaleY(.3);\n  -webkit-animation: pace-compress .5s infinite alternate;\n  -moz-animation: pace-compress .5s infinite alternate;\n  -o-animation: pace-compress .5s infinite alternate;\n  -ms-animation: pace-compress .5s infinite alternate;\n  animation: pace-compress .5s infinite alternate;\n}\n\n@-webkit-keyframes pace-bounce {\n  0% {\n    top: 0;\n    -webkit-animation-timing-function: ease-in;\n  }\n  40% {}\n  50% {\n    top: 140px;\n    height: 140px;\n    -webkit-animation-timing-function: ease-out;\n  }\n  55% {\n    top: 160px;\n    height: 120px;\n    border-radius: 70px / 60px;\n    -webkit-animation-timing-function: ease-in;\n  }\n  65% {\n    top: 120px;\n    height: 140px;\n    border-radius: 70px;\n    -webkit-animation-timing-function: ease-out;\n  }\n  95% {\n    top: 0;\n    -webkit-animation-timing-function: ease-in;\n  }\n  100% {\n    top: 0;\n    -webkit-animation-timing-function: ease-in;\n  }\n}\n\n@-moz-keyframes pace-bounce {\n  0% {\n    top: 0;\n    -moz-animation-timing-function: ease-in;\n  }\n  40% {}\n  50% {\n    top: 140px;\n    height: 140px;\n    -moz-animation-timing-function: ease-out;\n  }\n  55% {\n    top: 160px;\n    height: 120px;\n    border-radius: 70px / 60px;\n    -moz-animation-timing-function: ease-in;\n  }\n  65% {\n    top: 120px;\n    height: 140px;\n    border-radius: 70px;\n    -moz-animation-timing-function: ease-out;}\n  95% {\n    top: 0;\n    -moz-animation-timing-function: ease-in;\n  }\n  100% {top: 0;\n    -moz-animation-timing-function: ease-in;\n  }\n}\n\n@keyframes pace-bounce {\n  0% {\n    top: 0;\n    animation-timing-function: ease-in;\n  }\n  50% {\n    top: 140px;\n    height: 140px;\n    animation-timing-function: ease-out;\n  }\n  55% {\n    top: 160px;\n    height: 120px;\n    border-radius: 70px / 60px;\n    animation-timing-function: ease-in;\n  }\n  65% {\n    top: 120px;\n    height: 140px;\n    border-radius: 70px;\n    animation-timing-function: ease-out;\n  }\n  95% {\n    top: 0;\n    animation-timing-function: ease-in;\n  }\n  100% {\n    top: 0;\n    animation-timing-function: ease-in;\n  }\n}\n\n@-webkit-keyframes pace-compress {\n  0% {\n    bottom: 0;\n    margin-left: -30px;\n    width: 60px;\n    height: 75px;\n    background: rgba(20, 20, 20, .1);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .1);\n    border-radius: 30px / 40px;\n    -webkit-animation-timing-function: ease-in;\n  }\n  100% {\n    bottom: 30px;\n    margin-left: -10px;\n    width: 20px;\n    height: 5px;\n    background: rgba(20, 20, 20, .3);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .3);\n    border-radius: 20px / 20px;\n    -webkit-animation-timing-function: ease-out;\n  }\n}\n\n@-moz-keyframes pace-compress {\n  0% {\n    bottom: 0;\n    margin-left: -30px;\n    width: 60px;\n    height: 75px;\n    background: rgba(20, 20, 20, .1);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .1);\n    border-radius: 30px / 40px;\n    -moz-animation-timing-function: ease-in;\n  }\n  100% {\n    bottom: 30px;\n    margin-left: -10px;\n    width: 20px;\n    height: 5px;\n    background: rgba(20, 20, 20, .3);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .3);\n    border-radius: 20px / 20px;\n    -moz-animation-timing-function: ease-out;\n  }\n}\n\n@keyframes pace-compress {\n  0% {\n    bottom: 0;\n    margin-left: -30px;\n    width: 60px;\n    height: 75px;\n    background: rgba(20, 20, 20, .1);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .1);\n    border-radius: 30px / 40px;\n    animation-timing-function: ease-in;\n  }\n  100% {\n    bottom: 30px;\n    margin-left: -10px;\n    width: 20px;\n    height: 5px;\n    background: rgba(20, 20, 20, .3);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .3);\n    border-radius: 20px / 20px;\n    animation-timing-function: ease-out;\n  }\n}"
  },
  {
    "path": "public/frontend/plugins/pace/themes/black/pace-theme-center-atom.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace.pace-inactive {\n  display: none;\n}\n\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n\n  z-index: 2000;\n  position: fixed;\n  height: 60px;\n  width: 100px;\n  margin: auto;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n}\n\n.pace .pace-progress {\n  z-index: 2000;\n  position: absolute;\n  height: 60px;\n  width: 100px !important;\n}\n\n.pace .pace-progress:before {\n  content: attr(data-progress-text);\n  text-align: center;\n  color: #fff;\n  background: #000000;\n  border-radius: 50%;\n  font-family: \"Helvetica Neue\", sans-serif;\n  font-size: 14px;\n  font-weight: 100;\n  line-height: 1;\n  padding: 20% 0 7px;\n  width: 50%;\n  height: 40%;\n  margin: 10px 0 0 30px;\n  display: block;\n  z-index: 999;\n  position: absolute;\n}\n\n.pace .pace-progress:after {\n  border-radius: 50%;\n  border: 5px solid #000000;\n  content: ' ';\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 60px;\n  width: 100px;\n\n  -webkit-transform: rotate(90deg);\n     -moz-transform: rotate(90deg);\n       -o-transform: rotate(90deg);\n          transform: rotate(90deg);\n  -webkit-animation: spin-3 2s linear infinite;\n     -moz-animation: spin-3 2s linear infinite;\n       -o-animation: spin-3 2s linear infinite;\n          animation: spin-3 2s linear infinite;\n}\n\n.pace .pace-activity {\n  font-size: 15px;\n  line-height: 1;\n  z-index: 2000;\n  position: absolute;\n  height: 60px;\n  width: 100px;\n\n  display: block;\n}\n\n.pace .pace-activity:before {\n  border-radius: 50%;\n  border: 5px solid #000000;\n  content: ' ';\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 60px;\n  width: 100px;\n\n  -webkit-animation: spin-1 2s linear infinite;\n     -moz-animation: spin-1 2s linear infinite;\n       -o-animation: spin-1 2s linear infinite;\n          animation: spin-1 2s linear infinite;\n}\n\n.pace .pace-activity:after{\n  border-radius: 50%;\n  border: 5px solid #000000;\n  content: ' ';\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 60px;\n  width: 100px;\n\n  -webkit-transform: rotate(45deg);\n     -moz-transform: rotate(45deg);\n       -o-transform: rotate(45deg);\n          transform: rotate(45deg);\n  -webkit-animation: spin-2 2s linear infinite;\n     -moz-animation: spin-2 2s linear infinite;\n       -o-animation: spin-2 2s linear infinite;\n          animation: spin-2 2s linear infinite;\n}\n\n@-webkit-keyframes spin-1 {\n  0%  { -webkit-transform: rotate(0deg); }\n  100%{ -webkit-transform: rotate(359deg);}\n}\n@-moz-keyframes spin-1 {\n  0%  { -moz-transform: rotate(0deg); }\n  100%{ -moz-transform: rotate(359deg);}\n}\n@-o-keyframes spin-1 {\n  0%  { -o-transform: rotate(0deg); }\n  100%{ -o-transform: rotate(359deg);}\n}\n@keyframes spin-1 {\n  0%  { transform: rotate(0deg); }\n  100%{ transform: rotate(359deg);}\n}\n\n@-webkit-keyframes spin-2 {\n  0%  { -webkit-transform: rotate(59.8deg); }\n  100%{ -webkit-transform: rotate(418.8deg);}\n}\n@-moz-keyframes spin-2 {\n  0%  { -moz-transform: rotate(59.8deg); }\n  100%{ -moz-transform: rotate(418.8deg);}\n}\n@-o-keyframes spin-2 {\n  0%  { -o-transform: rotate(59.8deg); }\n  100%{ -o-transform: rotate(418.8deg);}\n}\n@keyframes spin-2 {\n  0%  { transform: rotate(59.8deg); }\n  100%{ transform: rotate(418.8deg);}\n}\n\n@-webkit-keyframes spin-3 {\n  0%  { -webkit-transform: rotate(119.6deg); }\n  100%{ -webkit-transform: rotate(478.6deg);}\n}\n@-moz-keyframes spin-3 {\n  0%  { -moz-transform: rotate(119.6deg); }\n  100%{ -moz-transform: rotate(478.6deg);}\n}\n@-o-keyframes spin-3 {\n  0%  { -o-transform: rotate(119.6deg); }\n  100%{ -o-transform: rotate(478.6deg);}\n}\n@keyframes spin-3 {\n  0%  { transform: rotate(119.6deg); }\n  100%{ transform: rotate(478.6deg);}\n}"
  },
  {
    "path": "public/frontend/plugins/pace/themes/black/pace-theme-center-circle.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n\n  -webkit-perspective: 12rem;\n  -moz-perspective: 12rem;\n  -ms-perspective: 12rem;\n  -o-perspective: 12rem;\n  perspective: 12rem;\n\n  z-index: 2000;\n  position: fixed;\n  height: 6rem;\n  width: 6rem;\n  margin: auto;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n}\n\n.pace.pace-inactive .pace-progress {\n  display: none;\n}\n\n.pace .pace-progress {\n  position: fixed;\n  z-index: 2000;\n  display: block;\n  position: absolute;\n  left: 0;\n  top: 0;\n  height: 6rem;\n  width: 6rem !important;\n  line-height: 6rem;\n  font-size: 2rem;\n  border-radius: 50%;\n  background: rgba(0, 0, 0, 0.8);\n  color: #fff;\n  font-family: \"Helvetica Neue\", sans-serif;\n  font-weight: 100;\n  text-align: center;\n\n  -webkit-animation: pace-3d-spinner linear infinite 2s;\n  -moz-animation: pace-3d-spinner linear infinite 2s;\n  -ms-animation: pace-3d-spinner linear infinite 2s;\n  -o-animation: pace-3d-spinner linear infinite 2s;\n  animation: pace-3d-spinner linear infinite 2s;\n\n  -webkit-transform-style: preserve-3d;\n  -moz-transform-style: preserve-3d;\n  -ms-transform-style: preserve-3d;\n  -o-transform-style: preserve-3d;\n  transform-style: preserve-3d;\n}\n\n.pace .pace-progress:after {\n  content: attr(data-progress-text);\n  display: block;\n}\n\n@-webkit-keyframes pace-3d-spinner {\n  from {\n    -webkit-transform: rotateY(0deg);\n  }\n  to {\n    -webkit-transform: rotateY(360deg);\n  }\n}\n\n@-moz-keyframes pace-3d-spinner {\n  from {\n    -moz-transform: rotateY(0deg);\n  }\n  to {\n    -moz-transform: rotateY(360deg);\n  }\n}\n\n@-ms-keyframes pace-3d-spinner {\n  from {\n    -ms-transform: rotateY(0deg);\n  }\n  to {\n    -ms-transform: rotateY(360deg);\n  }\n}\n\n@-o-keyframes pace-3d-spinner {\n  from {\n    -o-transform: rotateY(0deg);\n  }\n  to {\n    -o-transform: rotateY(360deg);\n  }\n}\n\n@keyframes pace-3d-spinner {\n  from {\n    transform: rotateY(0deg);\n  }\n  to {\n    transform: rotateY(360deg);\n  }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/black/pace-theme-center-radar.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n\n  z-index: 2000;\n  position: fixed;\n  height: 90px;\n  width: 90px;\n  margin: auto;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n}\n\n.pace.pace-inactive .pace-activity {\n  display: none;\n}\n\n.pace .pace-activity {\n  position: fixed;\n  z-index: 2000;\n  display: block;\n  position: absolute;\n  left: -30px;\n  top: -30px;\n  height: 90px;\n  width: 90px;\n  display: block;\n  border-width: 30px;\n  border-style: double;\n  border-color: #000000 transparent transparent;\n  border-radius: 50%;\n\n  -webkit-animation: spin 1s linear infinite;\n     -moz-animation: spin 1s linear infinite;\n       -o-animation: spin 1s linear infinite;\n          animation: spin 1s linear infinite;\n}\n\n.pace .pace-activity:before {\n  content: ' ';\n  position: absolute;\n  top: 10px;\n  left: 10px;\n  height: 50px;\n  width: 50px;\n  display: block;\n  border-width: 10px;\n  border-style: solid;\n  border-color: #000000 transparent transparent;\n  border-radius: 50%;\n}\n\n\n@-webkit-keyframes spin {\n  100% { -webkit-transform: rotate(359deg); }\n}\n\n@-moz-keyframes spin {\n  100% { -moz-transform: rotate(359deg); }\n}\n\n@-o-keyframes spin {\n  100% { -moz-transform: rotate(359deg); }\n}\n\n@keyframes spin {\n  100% {  transform: rotate(359deg); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/black/pace-theme-center-simple.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n\n  z-index: 2000;\n  position: fixed;\n  margin: auto;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  height: 5px;\n  width: 200px;\n  background: #fff;\n  border: 1px solid #000000;\n}\n\n.pace .pace-progress {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  -ms-box-sizing: border-box;\n  -o-box-sizing: border-box;\n  box-sizing: border-box;\n\n  -webkit-transition: width 1s ease-in-out 1s linear;\n  -moz-transition: width 1s ease-in-out 1s linear;\n  -ms-transition: width 1s ease-in-out 1s linear;\n  -o-transition: width 1s ease-in-out 1s linear;\n  transition: width 1s ease-in-out 1s linear;\n\n  -webkit-transform: translate3d(0, 0, 0);\n  -moz-transform: translate3d(0, 0, 0);\n  -ms-transform: translate3d(0, 0, 0);\n  -o-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n\n  max-width: 200px;\n  position: fixed;\n  z-index: 2000;\n  display: block;\n  position: absolute;\n  left: 0px;\n  top: 0px;\n  height: 100%;\n  background: #000000;\n}\n\n.pace.pace-inactive {\n  display: none;\n}"
  },
  {
    "path": "public/frontend/plugins/pace/themes/black/pace-theme-corner-indicator.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace .pace-activity {\n  display: block;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  right: 0;\n  width: 300px;\n  height: 300px;\n  background: #000000;\n  -webkit-transition: -webkit-transform 0.3s;\n  transition: transform 0.3s;\n  -webkit-transform: translateX(100%) translateY(-100%) rotate(45deg);\n  transform: translateX(100%) translateY(-100%) rotate(45deg);\n  pointer-events: none;\n}\n\n.pace.pace-active .pace-activity {\n  -webkit-transform: translateX(50%) translateY(-50%) rotate(45deg);\n  transform: translateX(50%) translateY(-50%) rotate(45deg);\n}\n\n.pace .pace-activity::before,\n.pace .pace-activity::after {\n    position: absolute;\n    bottom: 30px;\n    left: 50%;\n    display: block;\n    border: 5px solid #fff;\n    border-radius: 50%;\n    content: '';\n}\n\n.pace .pace-activity::before {\n    margin-left: -40px;\n    width: 80px;\n    height: 80px;\n    border-right-color: rgba(0, 0, 0, .2);\n    border-left-color: rgba(0, 0, 0, .2);\n    -webkit-animation: pace-rotation 3s linear infinite;\n    animation: pace-rotation 3s linear infinite;\n}\n\n.pace .pace-activity::after {\n    bottom: 50px;\n    margin-left: -20px;\n    width: 40px;\n    height: 40px;\n    border-top-color: rgba(0, 0, 0, .2);\n    border-bottom-color: rgba(0, 0, 0, .2);\n    -webkit-animation: pace-rotation 1s linear infinite;\n    animation: pace-rotation 1s linear infinite;\n}\n\n@-webkit-keyframes pace-rotation {\n  0% { -webkit-transform: rotate(0deg); }\n  100% { -webkit-transform: rotate(359deg); }\n}\n@keyframes pace-rotation {\n  0% { transform: rotate(0deg); }\n  100% { transform: rotate(359deg); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/black/pace-theme-fill-left.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace .pace-progress {\n  background-color: rgba(0, 0, 0, 0.19999999999999996);\n  position: fixed;\n  z-index: -1;\n  top: 0;\n  left: 0;\n  bottom: 0;\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/black/pace-theme-flash.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace-inactive {\n  display: none;\n}\n\n.pace .pace-progress {\n  background: #000000;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 2px;\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n\n.pace .pace-progress-inner {\n  display: block;\n  position: absolute;\n  right: 0px;\n  width: 100px;\n  height: 100%;\n  box-shadow: 0 0 10px #000000, 0 0 5px #000000;\n  opacity: 1.0;\n  -webkit-transform: rotate(3deg) translate(0px, -4px);\n  -moz-transform: rotate(3deg) translate(0px, -4px);\n  -ms-transform: rotate(3deg) translate(0px, -4px);\n  -o-transform: rotate(3deg) translate(0px, -4px);\n  transform: rotate(3deg) translate(0px, -4px);\n}\n\n.pace .pace-activity {\n  display: block;\n  position: fixed;\n  z-index: 2000;\n  top: 15px;\n  right: 15px;\n  width: 14px;\n  height: 14px;\n  border: solid 2px transparent;\n  border-top-color: #000000;\n  border-left-color: #000000;\n  border-radius: 10px;\n  -webkit-animation: pace-spinner 400ms linear infinite;\n  -moz-animation: pace-spinner 400ms linear infinite;\n  -ms-animation: pace-spinner 400ms linear infinite;\n  -o-animation: pace-spinner 400ms linear infinite;\n  animation: pace-spinner 400ms linear infinite;\n}\n\n@-webkit-keyframes pace-spinner {\n  0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@-moz-keyframes pace-spinner {\n  0% { -moz-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -moz-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@-o-keyframes pace-spinner {\n  0% { -o-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -o-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@-ms-keyframes pace-spinner {\n  0% { -ms-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -ms-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@keyframes pace-spinner {\n  0% { transform: rotate(0deg); transform: rotate(0deg); }\n  100% { transform: rotate(360deg); transform: rotate(360deg); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/black/pace-theme-flat-top.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace .pace-progress {\n  display: block;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 12px;\n  background: #000000;\n\n  -webkit-transition: -webkit-transform .3s, width 1s;\n  -moz-transition: width 1s;\n  -o-transform: width 1s;\n  transition: transform .3s, width 1s;\n\n  -webkit-transform: translateY(-50px);\n  transform: translateY(-50px);\n\n  pointer-events: none;\n}\n\n.pace.pace-active .pace-progress {\n  -webkit-transform: translateY(0);\n  transform: translateY(0);\n}"
  },
  {
    "path": "public/frontend/plugins/pace/themes/black/pace-theme-loading-bar.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  -ms-box-sizing: border-box;\n  -o-box-sizing: border-box;\n  box-sizing: border-box;\n\n  -webkit-border-radius: 10px;\n  -moz-border-radius: 10px;\n  border-radius: 10px;\n\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n\n  z-index: 2000;\n  position: fixed;\n  margin: auto;\n  top: 12px;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  width: 200px;\n  height: 25px;\n  border: 2px solid #000000;\n  background-color: #fff;\n}\n\n.pace .pace-progress {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  -ms-box-sizing: border-box;\n  -o-box-sizing: border-box;\n  box-sizing: border-box;\n\n  -webkit-border-radius: 5px;\n  -moz-border-radius: 5px;\n  border-radius: 5px;\n\n  -webkit-background-clip: padding-box;\n  -moz-background-clip: padding;\n  background-clip: padding-box;\n\n  -webkit-transition: width 1s ease-in-out 1s linear;\n  -moz-transition: width 1s ease-in-out 1s linear;\n  -ms-transition: width 1s ease-in-out 1s linear;\n  -o-transition: width 1s ease-in-out 1s linear;\n  transition: width 1s ease-in-out 1s linear;\n\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n\n  max-width: 190px;\n  position: fixed;\n  z-index: 2000;\n  display: block;\n  position: absolute;\n  left: 3px;\n  top: 3px;\n  height: 15px;\n  font-size: 12px;\n  background: #000000;\n  color: #000000;\n  line-height: 60px;\n  font-weight: bold;\n  font-family:  Helvetica, Arial, \"Lucida Grande\", sans-serif;\n}\n\n.pace .pace-progress:after {\n  content: attr(data-progress-text);\n  display: inline-block;\n}\n\n.pace.pace-inactive {\n  display: none;\n}"
  },
  {
    "path": "public/frontend/plugins/pace/themes/black/pace-theme-mac-osx.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace-inactive {\n  display: none;\n}\n\n.pace .pace-progress {\n  background-color: #000000;\n\n  color: #000000;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 12px;\n  overflow: hidden;\n\n  -webkit-border-radius: 0 0 4px 0;\n  -moz-border-radius: 0 0 4px 0;\n  -o-border-radius: 0 0 4px 0;\n  border-radius: 0 0 4px 0;\n\n  -webkit-box-shadow: inset -1px 0 rgba(0, 0, 0, 0.3), inset 0 -1px rgba(0, 0, 0, 0.3), inset 0 2px rgba(255, 255, 255, 0.5), inset 0 6px rgba(255, 255, 255, 0.3);\n  -moz-box-shadow: inset -1px 0 rgba(0, 0, 0, 0.3), inset 0 -1px rgba(0, 0, 0, 0.3), inset 0 2px rgba(255, 255, 255, 0.5), inset 0 6px rgba(255, 255, 255, 0.3);\n  -o-box-shadow: inset -1px 0 rgba(0, 0, 0, 0.3), inset 0 -1px rgba(0, 0, 0, 0.3), inset 0 2px rgba(255, 255, 255, 0.5), inset 0 6px rgba(255, 255, 255, 0.3);\n  box-shadow: inset -1px 0 rgba(0, 0, 0, 0.3), inset 0 -1px rgba(0, 0, 0, 0.3), inset 0 2px rgba(255, 255, 255, 0.5), inset 0 6px rgba(255, 255, 255, 0.3);\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n\n.pace .pace-progress-inner {\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: -28px;\n  bottom: 0;\n\n  background-image: -o-radial-gradient(rgba(0, 0, 0, 0.6) 0%, rgba(0, 0, 0, 0) 100%);\n  background-image: -moz-radial-gradient(rgba(0, 0, 0, 0.6) 0%, rgba(0, 0, 0, 0) 100%);\n  background-image: -webkit-radial-gradient(rgba(0, 0, 0, 0.6) 0%, rgba(0, 0, 0, 0) 100%);\n  background-image: radial-gradient(rgba(0, 0, 0, 0.6) 0%, rgba(0, 0, 0, 0) 100%);\n\n\n  -webkit-background-size: 28px 100%;\n  -moz-background-size: 28px 100%;\n  -o-background-size: 28px 100%;\n  background-size: 28px 100%;\n\n  -webkit-animation: pace-stripe-animation 500ms linear infinite;\n  -moz-animation: pace-stripe-animation 500ms linear infinite;\n  -ms-animation: pace-stripe-animation 500ms linear infinite;\n  -o-animation: pace-stripe-animation 500ms linear infinite;\n  animation: pace-stripe-animation 500ms linear infinite;\n}\n\n@-webkit-keyframes pace-stripe-animation {\n  0% { -webkit-transform: none; transform: none; }\n  100% { -webkit-transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n@-moz-keyframes pace-stripe-animation {\n  0% { -moz-transform: none; transform: none; }\n  100% { -moz-transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n@-o-keyframes pace-stripe-animation {\n  0% { -o-transform: none; transform: none; }\n  100% { -o-transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n@-ms-keyframes pace-stripe-animation {\n  0% { -ms-transform: none; transform: none; }\n  100% { -ms-transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n@keyframes pace-stripe-animation {\n  0% { transform: none; transform: none; }\n  100% { transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/black/pace-theme-minimal.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace .pace-progress {\n  background: #000000;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 2px;\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n\n.pace-inactive {\n  display: none;\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/blue/pace-theme-barber-shop.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace-inactive {\n  display: none;\n}\n\n.pace .pace-progress {\n  background-color: #2299dd;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 12px;\n  overflow: hidden;\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n\n.pace .pace-progress-inner {\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: -32px;\n  bottom: 0;\n\n  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.2)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.2)), color-stop(0.75, rgba(255, 255, 255, 0.2)), color-stop(0.75, transparent), to(transparent));\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);\n  background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);\n  -webkit-background-size: 32px 32px;\n  -moz-background-size: 32px 32px;\n  -o-background-size: 32px 32px;\n  background-size: 32px 32px;\n\n  -webkit-animation: pace-stripe-animation 500ms linear infinite;\n  -moz-animation: pace-stripe-animation 500ms linear infinite;\n  -ms-animation: pace-stripe-animation 500ms linear infinite;\n  -o-animation: pace-stripe-animation 500ms linear infinite;\n  animation: pace-stripe-animation 500ms linear infinite;\n}\n\n@-webkit-keyframes pace-stripe-animation {\n  0% { -webkit-transform: none; transform: none; }\n  100% { -webkit-transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n@-moz-keyframes pace-stripe-animation {\n  0% { -moz-transform: none; transform: none; }\n  100% { -moz-transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n@-o-keyframes pace-stripe-animation {\n  0% { -o-transform: none; transform: none; }\n  100% { -o-transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n@-ms-keyframes pace-stripe-animation {\n  0% { -ms-transform: none; transform: none; }\n  100% { -ms-transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n@keyframes pace-stripe-animation {\n  0% { transform: none; transform: none; }\n  100% { transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/blue/pace-theme-big-counter.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace.pace-inactive .pace-progress {\n  display: none;\n}\n\n.pace .pace-progress {\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  right: 0;\n  height: 5rem;\n  width: 5rem;\n}\n\n.pace .pace-progress:after {\n  display: block;\n  position: absolute;\n  top: 0;\n  right: .5rem;\n  content: attr(data-progress-text);\n  font-family: \"Helvetica Neue\", sans-serif;\n  font-weight: 100;\n  font-size: 5rem;\n  line-height: 1;\n  text-align: right;\n  color: rgba(34, 153, 221, 0.19999999999999996);\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/blue/pace-theme-bounce.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  width: 140px;\n  height: 300px;\n  position: fixed;\n  top: -90px;\n  right: -20px;\n  z-index: 2000;\n  -webkit-transform: scale(0);\n  -moz-transform: scale(0);\n  -ms-transform: scale(0);\n  -o-transform: scale(0);\n  transform: scale(0);\n  opacity: 0;\n  -webkit-transition: all 2s linear 0s;\n  -moz-transition: all 2s linear 0s;\n  transition: all 2s linear 0s;\n}\n\n.pace.pace-active {\n  -webkit-transform: scale(.25);\n  -moz-transform: scale(.25);\n  -ms-transform: scale(.25);\n  -o-transform: scale(.25);\n  transform: scale(.25);\n  opacity: 1;\n}\n\n.pace .pace-activity {\n  width: 140px;\n  height: 140px;\n  border-radius: 70px;\n  background: #2299dd;\n  position: absolute;\n  top: 0;\n  z-index: 1911;\n  -webkit-animation: pace-bounce 1s infinite;\n  -moz-animation: pace-bounce 1s infinite;\n  -o-animation: pace-bounce 1s infinite;\n  -ms-animation: pace-bounce 1s infinite;\n  animation: pace-bounce 1s infinite;\n}\n\n.pace .pace-progress {\n  position: absolute;\n  display: block;\n  left: 50%;\n  bottom: 0;\n  z-index: 1910;\n  margin-left: -30px;\n  width: 60px;\n  height: 75px;\n  background: rgba(20, 20, 20, .1);\n  box-shadow: 0 0 20px 35px rgba(20, 20, 20, .1);\n  border-radius: 30px / 40px;\n  -webkit-transform: scaleY(.3);\n  -moz-transform: scaleY(.3);\n  -ms-transform: scaleY(.3);\n  -o-transform: scaleY(.3);\n  transform: scaleY(.3);\n  -webkit-animation: pace-compress .5s infinite alternate;\n  -moz-animation: pace-compress .5s infinite alternate;\n  -o-animation: pace-compress .5s infinite alternate;\n  -ms-animation: pace-compress .5s infinite alternate;\n  animation: pace-compress .5s infinite alternate;\n}\n\n@-webkit-keyframes pace-bounce {\n  0% {\n    top: 0;\n    -webkit-animation-timing-function: ease-in;\n  }\n  40% {}\n  50% {\n    top: 140px;\n    height: 140px;\n    -webkit-animation-timing-function: ease-out;\n  }\n  55% {\n    top: 160px;\n    height: 120px;\n    border-radius: 70px / 60px;\n    -webkit-animation-timing-function: ease-in;\n  }\n  65% {\n    top: 120px;\n    height: 140px;\n    border-radius: 70px;\n    -webkit-animation-timing-function: ease-out;\n  }\n  95% {\n    top: 0;\n    -webkit-animation-timing-function: ease-in;\n  }\n  100% {\n    top: 0;\n    -webkit-animation-timing-function: ease-in;\n  }\n}\n\n@-moz-keyframes pace-bounce {\n  0% {\n    top: 0;\n    -moz-animation-timing-function: ease-in;\n  }\n  40% {}\n  50% {\n    top: 140px;\n    height: 140px;\n    -moz-animation-timing-function: ease-out;\n  }\n  55% {\n    top: 160px;\n    height: 120px;\n    border-radius: 70px / 60px;\n    -moz-animation-timing-function: ease-in;\n  }\n  65% {\n    top: 120px;\n    height: 140px;\n    border-radius: 70px;\n    -moz-animation-timing-function: ease-out;}\n  95% {\n    top: 0;\n    -moz-animation-timing-function: ease-in;\n  }\n  100% {top: 0;\n    -moz-animation-timing-function: ease-in;\n  }\n}\n\n@keyframes pace-bounce {\n  0% {\n    top: 0;\n    animation-timing-function: ease-in;\n  }\n  50% {\n    top: 140px;\n    height: 140px;\n    animation-timing-function: ease-out;\n  }\n  55% {\n    top: 160px;\n    height: 120px;\n    border-radius: 70px / 60px;\n    animation-timing-function: ease-in;\n  }\n  65% {\n    top: 120px;\n    height: 140px;\n    border-radius: 70px;\n    animation-timing-function: ease-out;\n  }\n  95% {\n    top: 0;\n    animation-timing-function: ease-in;\n  }\n  100% {\n    top: 0;\n    animation-timing-function: ease-in;\n  }\n}\n\n@-webkit-keyframes pace-compress {\n  0% {\n    bottom: 0;\n    margin-left: -30px;\n    width: 60px;\n    height: 75px;\n    background: rgba(20, 20, 20, .1);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .1);\n    border-radius: 30px / 40px;\n    -webkit-animation-timing-function: ease-in;\n  }\n  100% {\n    bottom: 30px;\n    margin-left: -10px;\n    width: 20px;\n    height: 5px;\n    background: rgba(20, 20, 20, .3);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .3);\n    border-radius: 20px / 20px;\n    -webkit-animation-timing-function: ease-out;\n  }\n}\n\n@-moz-keyframes pace-compress {\n  0% {\n    bottom: 0;\n    margin-left: -30px;\n    width: 60px;\n    height: 75px;\n    background: rgba(20, 20, 20, .1);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .1);\n    border-radius: 30px / 40px;\n    -moz-animation-timing-function: ease-in;\n  }\n  100% {\n    bottom: 30px;\n    margin-left: -10px;\n    width: 20px;\n    height: 5px;\n    background: rgba(20, 20, 20, .3);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .3);\n    border-radius: 20px / 20px;\n    -moz-animation-timing-function: ease-out;\n  }\n}\n\n@keyframes pace-compress {\n  0% {\n    bottom: 0;\n    margin-left: -30px;\n    width: 60px;\n    height: 75px;\n    background: rgba(20, 20, 20, .1);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .1);\n    border-radius: 30px / 40px;\n    animation-timing-function: ease-in;\n  }\n  100% {\n    bottom: 30px;\n    margin-left: -10px;\n    width: 20px;\n    height: 5px;\n    background: rgba(20, 20, 20, .3);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .3);\n    border-radius: 20px / 20px;\n    animation-timing-function: ease-out;\n  }\n}"
  },
  {
    "path": "public/frontend/plugins/pace/themes/blue/pace-theme-center-atom.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace.pace-inactive {\n  display: none;\n}\n\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n\n  z-index: 2000;\n  position: fixed;\n  height: 60px;\n  width: 100px;\n  margin: auto;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n}\n\n.pace .pace-progress {\n  z-index: 2000;\n  position: absolute;\n  height: 60px;\n  width: 100px !important;\n}\n\n.pace .pace-progress:before {\n  content: attr(data-progress-text);\n  text-align: center;\n  color: #fff;\n  background: #2299dd;\n  border-radius: 50%;\n  font-family: \"Helvetica Neue\", sans-serif;\n  font-size: 14px;\n  font-weight: 100;\n  line-height: 1;\n  padding: 20% 0 7px;\n  width: 50%;\n  height: 40%;\n  margin: 10px 0 0 30px;\n  display: block;\n  z-index: 999;\n  position: absolute;\n}\n\n.pace .pace-progress:after {\n  border-radius: 50%;\n  border: 5px solid #2299dd;\n  content: ' ';\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 60px;\n  width: 100px;\n\n  -webkit-transform: rotate(90deg);\n     -moz-transform: rotate(90deg);\n       -o-transform: rotate(90deg);\n          transform: rotate(90deg);\n  -webkit-animation: spin-3 2s linear infinite;\n     -moz-animation: spin-3 2s linear infinite;\n       -o-animation: spin-3 2s linear infinite;\n          animation: spin-3 2s linear infinite;\n}\n\n.pace .pace-activity {\n  font-size: 15px;\n  line-height: 1;\n  z-index: 2000;\n  position: absolute;\n  height: 60px;\n  width: 100px;\n\n  display: block;\n}\n\n.pace .pace-activity:before {\n  border-radius: 50%;\n  border: 5px solid #2299dd;\n  content: ' ';\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 60px;\n  width: 100px;\n\n  -webkit-animation: spin-1 2s linear infinite;\n     -moz-animation: spin-1 2s linear infinite;\n       -o-animation: spin-1 2s linear infinite;\n          animation: spin-1 2s linear infinite;\n}\n\n.pace .pace-activity:after{\n  border-radius: 50%;\n  border: 5px solid #2299dd;\n  content: ' ';\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 60px;\n  width: 100px;\n\n  -webkit-transform: rotate(45deg);\n     -moz-transform: rotate(45deg);\n       -o-transform: rotate(45deg);\n          transform: rotate(45deg);\n  -webkit-animation: spin-2 2s linear infinite;\n     -moz-animation: spin-2 2s linear infinite;\n       -o-animation: spin-2 2s linear infinite;\n          animation: spin-2 2s linear infinite;\n}\n\n@-webkit-keyframes spin-1 {\n  0%  { -webkit-transform: rotate(0deg); }\n  100%{ -webkit-transform: rotate(359deg);}\n}\n@-moz-keyframes spin-1 {\n  0%  { -moz-transform: rotate(0deg); }\n  100%{ -moz-transform: rotate(359deg);}\n}\n@-o-keyframes spin-1 {\n  0%  { -o-transform: rotate(0deg); }\n  100%{ -o-transform: rotate(359deg);}\n}\n@keyframes spin-1 {\n  0%  { transform: rotate(0deg); }\n  100%{ transform: rotate(359deg);}\n}\n\n@-webkit-keyframes spin-2 {\n  0%  { -webkit-transform: rotate(59.8deg); }\n  100%{ -webkit-transform: rotate(418.8deg);}\n}\n@-moz-keyframes spin-2 {\n  0%  { -moz-transform: rotate(59.8deg); }\n  100%{ -moz-transform: rotate(418.8deg);}\n}\n@-o-keyframes spin-2 {\n  0%  { -o-transform: rotate(59.8deg); }\n  100%{ -o-transform: rotate(418.8deg);}\n}\n@keyframes spin-2 {\n  0%  { transform: rotate(59.8deg); }\n  100%{ transform: rotate(418.8deg);}\n}\n\n@-webkit-keyframes spin-3 {\n  0%  { -webkit-transform: rotate(119.6deg); }\n  100%{ -webkit-transform: rotate(478.6deg);}\n}\n@-moz-keyframes spin-3 {\n  0%  { -moz-transform: rotate(119.6deg); }\n  100%{ -moz-transform: rotate(478.6deg);}\n}\n@-o-keyframes spin-3 {\n  0%  { -o-transform: rotate(119.6deg); }\n  100%{ -o-transform: rotate(478.6deg);}\n}\n@keyframes spin-3 {\n  0%  { transform: rotate(119.6deg); }\n  100%{ transform: rotate(478.6deg);}\n}"
  },
  {
    "path": "public/frontend/plugins/pace/themes/blue/pace-theme-center-circle.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n\n  -webkit-perspective: 12rem;\n  -moz-perspective: 12rem;\n  -ms-perspective: 12rem;\n  -o-perspective: 12rem;\n  perspective: 12rem;\n\n  z-index: 2000;\n  position: fixed;\n  height: 6rem;\n  width: 6rem;\n  margin: auto;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n}\n\n.pace.pace-inactive .pace-progress {\n  display: none;\n}\n\n.pace .pace-progress {\n  position: fixed;\n  z-index: 2000;\n  display: block;\n  position: absolute;\n  left: 0;\n  top: 0;\n  height: 6rem;\n  width: 6rem !important;\n  line-height: 6rem;\n  font-size: 2rem;\n  border-radius: 50%;\n  background: rgba(34, 153, 221, 0.8);\n  color: #fff;\n  font-family: \"Helvetica Neue\", sans-serif;\n  font-weight: 100;\n  text-align: center;\n\n  -webkit-animation: pace-3d-spinner linear infinite 2s;\n  -moz-animation: pace-3d-spinner linear infinite 2s;\n  -ms-animation: pace-3d-spinner linear infinite 2s;\n  -o-animation: pace-3d-spinner linear infinite 2s;\n  animation: pace-3d-spinner linear infinite 2s;\n\n  -webkit-transform-style: preserve-3d;\n  -moz-transform-style: preserve-3d;\n  -ms-transform-style: preserve-3d;\n  -o-transform-style: preserve-3d;\n  transform-style: preserve-3d;\n}\n\n.pace .pace-progress:after {\n  content: attr(data-progress-text);\n  display: block;\n}\n\n@-webkit-keyframes pace-3d-spinner {\n  from {\n    -webkit-transform: rotateY(0deg);\n  }\n  to {\n    -webkit-transform: rotateY(360deg);\n  }\n}\n\n@-moz-keyframes pace-3d-spinner {\n  from {\n    -moz-transform: rotateY(0deg);\n  }\n  to {\n    -moz-transform: rotateY(360deg);\n  }\n}\n\n@-ms-keyframes pace-3d-spinner {\n  from {\n    -ms-transform: rotateY(0deg);\n  }\n  to {\n    -ms-transform: rotateY(360deg);\n  }\n}\n\n@-o-keyframes pace-3d-spinner {\n  from {\n    -o-transform: rotateY(0deg);\n  }\n  to {\n    -o-transform: rotateY(360deg);\n  }\n}\n\n@keyframes pace-3d-spinner {\n  from {\n    transform: rotateY(0deg);\n  }\n  to {\n    transform: rotateY(360deg);\n  }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/blue/pace-theme-center-radar.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n\n  z-index: 2000;\n  position: fixed;\n  height: 90px;\n  width: 90px;\n  margin: auto;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n}\n\n.pace.pace-inactive .pace-activity {\n  display: none;\n}\n\n.pace .pace-activity {\n  position: fixed;\n  z-index: 2000;\n  display: block;\n  position: absolute;\n  left: -30px;\n  top: -30px;\n  height: 90px;\n  width: 90px;\n  display: block;\n  border-width: 30px;\n  border-style: double;\n  border-color: #2299dd transparent transparent;\n  border-radius: 50%;\n\n  -webkit-animation: spin 1s linear infinite;\n     -moz-animation: spin 1s linear infinite;\n       -o-animation: spin 1s linear infinite;\n          animation: spin 1s linear infinite;\n}\n\n.pace .pace-activity:before {\n  content: ' ';\n  position: absolute;\n  top: 10px;\n  left: 10px;\n  height: 50px;\n  width: 50px;\n  display: block;\n  border-width: 10px;\n  border-style: solid;\n  border-color: #2299dd transparent transparent;\n  border-radius: 50%;\n}\n\n\n@-webkit-keyframes spin {\n  100% { -webkit-transform: rotate(359deg); }\n}\n\n@-moz-keyframes spin {\n  100% { -moz-transform: rotate(359deg); }\n}\n\n@-o-keyframes spin {\n  100% { -moz-transform: rotate(359deg); }\n}\n\n@keyframes spin {\n  100% {  transform: rotate(359deg); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/blue/pace-theme-center-simple.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n\n  z-index: 2000;\n  position: fixed;\n  margin: auto;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  height: 5px;\n  width: 200px;\n  background: #fff;\n  border: 1px solid #2299dd;\n}\n\n.pace .pace-progress {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  -ms-box-sizing: border-box;\n  -o-box-sizing: border-box;\n  box-sizing: border-box;\n\n  -webkit-transition: width 1s ease-in-out 1s linear;\n  -moz-transition: width 1s ease-in-out 1s linear;\n  -ms-transition: width 1s ease-in-out 1s linear;\n  -o-transition: width 1s ease-in-out 1s linear;\n  transition: width 1s ease-in-out 1s linear;\n\n  -webkit-transform: translate3d(0, 0, 0);\n  -moz-transform: translate3d(0, 0, 0);\n  -ms-transform: translate3d(0, 0, 0);\n  -o-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n\n  max-width: 200px;\n  position: fixed;\n  z-index: 2000;\n  display: block;\n  position: absolute;\n  left: 0px;\n  top: 0px;\n  height: 100%;\n  background: #2299dd;\n}\n\n.pace.pace-inactive {\n  display: none;\n}"
  },
  {
    "path": "public/frontend/plugins/pace/themes/blue/pace-theme-corner-indicator.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace .pace-activity {\n  display: block;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  right: 0;\n  width: 300px;\n  height: 300px;\n  background: #2299dd;\n  -webkit-transition: -webkit-transform 0.3s;\n  transition: transform 0.3s;\n  -webkit-transform: translateX(100%) translateY(-100%) rotate(45deg);\n  transform: translateX(100%) translateY(-100%) rotate(45deg);\n  pointer-events: none;\n}\n\n.pace.pace-active .pace-activity {\n  -webkit-transform: translateX(50%) translateY(-50%) rotate(45deg);\n  transform: translateX(50%) translateY(-50%) rotate(45deg);\n}\n\n.pace .pace-activity::before,\n.pace .pace-activity::after {\n    position: absolute;\n    bottom: 30px;\n    left: 50%;\n    display: block;\n    border: 5px solid #fff;\n    border-radius: 50%;\n    content: '';\n}\n\n.pace .pace-activity::before {\n    margin-left: -40px;\n    width: 80px;\n    height: 80px;\n    border-right-color: rgba(0, 0, 0, .2);\n    border-left-color: rgba(0, 0, 0, .2);\n    -webkit-animation: pace-rotation 3s linear infinite;\n    animation: pace-rotation 3s linear infinite;\n}\n\n.pace .pace-activity::after {\n    bottom: 50px;\n    margin-left: -20px;\n    width: 40px;\n    height: 40px;\n    border-top-color: rgba(0, 0, 0, .2);\n    border-bottom-color: rgba(0, 0, 0, .2);\n    -webkit-animation: pace-rotation 1s linear infinite;\n    animation: pace-rotation 1s linear infinite;\n}\n\n@-webkit-keyframes pace-rotation {\n  0% { -webkit-transform: rotate(0deg); }\n  100% { -webkit-transform: rotate(359deg); }\n}\n@keyframes pace-rotation {\n  0% { transform: rotate(0deg); }\n  100% { transform: rotate(359deg); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/blue/pace-theme-fill-left.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace .pace-progress {\n  background-color: rgba(34, 153, 221, 0.19999999999999996);\n  position: fixed;\n  z-index: -1;\n  top: 0;\n  left: 0;\n  bottom: 0;\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/blue/pace-theme-flash.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace-inactive {\n  display: none;\n}\n\n.pace .pace-progress {\n  background: #2299dd;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 2px;\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n\n.pace .pace-progress-inner {\n  display: block;\n  position: absolute;\n  right: 0px;\n  width: 100px;\n  height: 100%;\n  box-shadow: 0 0 10px #2299dd, 0 0 5px #2299dd;\n  opacity: 1.0;\n  -webkit-transform: rotate(3deg) translate(0px, -4px);\n  -moz-transform: rotate(3deg) translate(0px, -4px);\n  -ms-transform: rotate(3deg) translate(0px, -4px);\n  -o-transform: rotate(3deg) translate(0px, -4px);\n  transform: rotate(3deg) translate(0px, -4px);\n}\n\n.pace .pace-activity {\n  display: block;\n  position: fixed;\n  z-index: 2000;\n  top: 15px;\n  right: 15px;\n  width: 14px;\n  height: 14px;\n  border: solid 2px transparent;\n  border-top-color: #2299dd;\n  border-left-color: #2299dd;\n  border-radius: 10px;\n  -webkit-animation: pace-spinner 400ms linear infinite;\n  -moz-animation: pace-spinner 400ms linear infinite;\n  -ms-animation: pace-spinner 400ms linear infinite;\n  -o-animation: pace-spinner 400ms linear infinite;\n  animation: pace-spinner 400ms linear infinite;\n}\n\n@-webkit-keyframes pace-spinner {\n  0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@-moz-keyframes pace-spinner {\n  0% { -moz-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -moz-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@-o-keyframes pace-spinner {\n  0% { -o-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -o-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@-ms-keyframes pace-spinner {\n  0% { -ms-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -ms-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@keyframes pace-spinner {\n  0% { transform: rotate(0deg); transform: rotate(0deg); }\n  100% { transform: rotate(360deg); transform: rotate(360deg); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/blue/pace-theme-flat-top.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace .pace-progress {\n  display: block;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 12px;\n  background: #2299dd;\n\n  -webkit-transition: -webkit-transform .3s, width 1s;\n  -moz-transition: width 1s;\n  -o-transform: width 1s;\n  transition: transform .3s, width 1s;\n\n  -webkit-transform: translateY(-50px);\n  transform: translateY(-50px);\n\n  pointer-events: none;\n}\n\n.pace.pace-active .pace-progress {\n  -webkit-transform: translateY(0);\n  transform: translateY(0);\n}"
  },
  {
    "path": "public/frontend/plugins/pace/themes/blue/pace-theme-loading-bar.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  -ms-box-sizing: border-box;\n  -o-box-sizing: border-box;\n  box-sizing: border-box;\n\n  -webkit-border-radius: 10px;\n  -moz-border-radius: 10px;\n  border-radius: 10px;\n\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n\n  z-index: 2000;\n  position: fixed;\n  margin: auto;\n  top: 12px;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  width: 200px;\n  height: 25px;\n  border: 2px solid #2299dd;\n  background-color: #fff;\n}\n\n.pace .pace-progress {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  -ms-box-sizing: border-box;\n  -o-box-sizing: border-box;\n  box-sizing: border-box;\n\n  -webkit-border-radius: 5px;\n  -moz-border-radius: 5px;\n  border-radius: 5px;\n\n  -webkit-background-clip: padding-box;\n  -moz-background-clip: padding;\n  background-clip: padding-box;\n\n  -webkit-transition: width 1s ease-in-out 1s linear;\n  -moz-transition: width 1s ease-in-out 1s linear;\n  -ms-transition: width 1s ease-in-out 1s linear;\n  -o-transition: width 1s ease-in-out 1s linear;\n  transition: width 1s ease-in-out 1s linear;\n\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n\n  max-width: 190px;\n  position: fixed;\n  z-index: 2000;\n  display: block;\n  position: absolute;\n  left: 3px;\n  top: 3px;\n  height: 15px;\n  font-size: 12px;\n  background: #2299dd;\n  color: #2299dd;\n  line-height: 60px;\n  font-weight: bold;\n  font-family:  Helvetica, Arial, \"Lucida Grande\", sans-serif;\n}\n\n.pace .pace-progress:after {\n  content: attr(data-progress-text);\n  display: inline-block;\n}\n\n.pace.pace-inactive {\n  display: none;\n}"
  },
  {
    "path": "public/frontend/plugins/pace/themes/blue/pace-theme-mac-osx.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace-inactive {\n  display: none;\n}\n\n.pace .pace-progress {\n  background-color: #2299dd;\n\n  color: #5AB2E5;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 12px;\n  overflow: hidden;\n\n  -webkit-border-radius: 0 0 4px 0;\n  -moz-border-radius: 0 0 4px 0;\n  -o-border-radius: 0 0 4px 0;\n  border-radius: 0 0 4px 0;\n\n  -webkit-box-shadow: inset -1px 0 rgba(0, 0, 0, 0.3), inset 0 -1px rgba(0, 0, 0, 0.3), inset 0 2px rgba(255, 255, 255, 0.5), inset 0 6px rgba(255, 255, 255, 0.3);\n  -moz-box-shadow: inset -1px 0 rgba(0, 0, 0, 0.3), inset 0 -1px rgba(0, 0, 0, 0.3), inset 0 2px rgba(255, 255, 255, 0.5), inset 0 6px rgba(255, 255, 255, 0.3);\n  -o-box-shadow: inset -1px 0 rgba(0, 0, 0, 0.3), inset 0 -1px rgba(0, 0, 0, 0.3), inset 0 2px rgba(255, 255, 255, 0.5), inset 0 6px rgba(255, 255, 255, 0.3);\n  box-shadow: inset -1px 0 rgba(0, 0, 0, 0.3), inset 0 -1px rgba(0, 0, 0, 0.3), inset 0 2px rgba(255, 255, 255, 0.5), inset 0 6px rgba(255, 255, 255, 0.3);\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n\n.pace .pace-progress-inner {\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: -28px;\n  bottom: 0;\n\n  background-image: -o-radial-gradient(rgba(24, 107, 154, 0.6) 0%, rgba(34, 153, 221, 0) 100%);\n  background-image: -moz-radial-gradient(rgba(24, 107, 154, 0.6) 0%, rgba(34, 153, 221, 0) 100%);\n  background-image: -webkit-radial-gradient(rgba(24, 107, 154, 0.6) 0%, rgba(34, 153, 221, 0) 100%);\n  background-image: radial-gradient(rgba(24, 107, 154, 0.6) 0%, rgba(34, 153, 221, 0) 100%);\n\n\n  -webkit-background-size: 28px 100%;\n  -moz-background-size: 28px 100%;\n  -o-background-size: 28px 100%;\n  background-size: 28px 100%;\n\n  -webkit-animation: pace-stripe-animation 500ms linear infinite;\n  -moz-animation: pace-stripe-animation 500ms linear infinite;\n  -ms-animation: pace-stripe-animation 500ms linear infinite;\n  -o-animation: pace-stripe-animation 500ms linear infinite;\n  animation: pace-stripe-animation 500ms linear infinite;\n}\n\n@-webkit-keyframes pace-stripe-animation {\n  0% { -webkit-transform: none; transform: none; }\n  100% { -webkit-transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n@-moz-keyframes pace-stripe-animation {\n  0% { -moz-transform: none; transform: none; }\n  100% { -moz-transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n@-o-keyframes pace-stripe-animation {\n  0% { -o-transform: none; transform: none; }\n  100% { -o-transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n@-ms-keyframes pace-stripe-animation {\n  0% { -ms-transform: none; transform: none; }\n  100% { -ms-transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n@keyframes pace-stripe-animation {\n  0% { transform: none; transform: none; }\n  100% { transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/blue/pace-theme-minimal.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace .pace-progress {\n  background: #2299dd;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 2px;\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n\n.pace-inactive {\n  display: none;\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/green/pace-theme-barber-shop.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace-inactive {\n  display: none;\n}\n\n.pace .pace-progress {\n  background-color: #22df80;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 12px;\n  overflow: hidden;\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n\n.pace .pace-progress-inner {\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: -32px;\n  bottom: 0;\n\n  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.2)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.2)), color-stop(0.75, rgba(255, 255, 255, 0.2)), color-stop(0.75, transparent), to(transparent));\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);\n  background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);\n  -webkit-background-size: 32px 32px;\n  -moz-background-size: 32px 32px;\n  -o-background-size: 32px 32px;\n  background-size: 32px 32px;\n\n  -webkit-animation: pace-stripe-animation 500ms linear infinite;\n  -moz-animation: pace-stripe-animation 500ms linear infinite;\n  -ms-animation: pace-stripe-animation 500ms linear infinite;\n  -o-animation: pace-stripe-animation 500ms linear infinite;\n  animation: pace-stripe-animation 500ms linear infinite;\n}\n\n@-webkit-keyframes pace-stripe-animation {\n  0% { -webkit-transform: none; transform: none; }\n  100% { -webkit-transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n@-moz-keyframes pace-stripe-animation {\n  0% { -moz-transform: none; transform: none; }\n  100% { -moz-transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n@-o-keyframes pace-stripe-animation {\n  0% { -o-transform: none; transform: none; }\n  100% { -o-transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n@-ms-keyframes pace-stripe-animation {\n  0% { -ms-transform: none; transform: none; }\n  100% { -ms-transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n@keyframes pace-stripe-animation {\n  0% { transform: none; transform: none; }\n  100% { transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/green/pace-theme-big-counter.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace.pace-inactive .pace-progress {\n  display: none;\n}\n\n.pace .pace-progress {\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  right: 0;\n  height: 5rem;\n  width: 5rem;\n}\n\n.pace .pace-progress:after {\n  display: block;\n  position: absolute;\n  top: 0;\n  right: .5rem;\n  content: attr(data-progress-text);\n  font-family: \"Helvetica Neue\", sans-serif;\n  font-weight: 100;\n  font-size: 5rem;\n  line-height: 1;\n  text-align: right;\n  color: rgba(34, 223, 128, 0.19999999999999996);\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/green/pace-theme-bounce.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  width: 140px;\n  height: 300px;\n  position: fixed;\n  top: -90px;\n  right: -20px;\n  z-index: 2000;\n  -webkit-transform: scale(0);\n  -moz-transform: scale(0);\n  -ms-transform: scale(0);\n  -o-transform: scale(0);\n  transform: scale(0);\n  opacity: 0;\n  -webkit-transition: all 2s linear 0s;\n  -moz-transition: all 2s linear 0s;\n  transition: all 2s linear 0s;\n}\n\n.pace.pace-active {\n  -webkit-transform: scale(.25);\n  -moz-transform: scale(.25);\n  -ms-transform: scale(.25);\n  -o-transform: scale(.25);\n  transform: scale(.25);\n  opacity: 1;\n}\n\n.pace .pace-activity {\n  width: 140px;\n  height: 140px;\n  border-radius: 70px;\n  background: #22df80;\n  position: absolute;\n  top: 0;\n  z-index: 1911;\n  -webkit-animation: pace-bounce 1s infinite;\n  -moz-animation: pace-bounce 1s infinite;\n  -o-animation: pace-bounce 1s infinite;\n  -ms-animation: pace-bounce 1s infinite;\n  animation: pace-bounce 1s infinite;\n}\n\n.pace .pace-progress {\n  position: absolute;\n  display: block;\n  left: 50%;\n  bottom: 0;\n  z-index: 1910;\n  margin-left: -30px;\n  width: 60px;\n  height: 75px;\n  background: rgba(20, 20, 20, .1);\n  box-shadow: 0 0 20px 35px rgba(20, 20, 20, .1);\n  border-radius: 30px / 40px;\n  -webkit-transform: scaleY(.3);\n  -moz-transform: scaleY(.3);\n  -ms-transform: scaleY(.3);\n  -o-transform: scaleY(.3);\n  transform: scaleY(.3);\n  -webkit-animation: pace-compress .5s infinite alternate;\n  -moz-animation: pace-compress .5s infinite alternate;\n  -o-animation: pace-compress .5s infinite alternate;\n  -ms-animation: pace-compress .5s infinite alternate;\n  animation: pace-compress .5s infinite alternate;\n}\n\n@-webkit-keyframes pace-bounce {\n  0% {\n    top: 0;\n    -webkit-animation-timing-function: ease-in;\n  }\n  40% {}\n  50% {\n    top: 140px;\n    height: 140px;\n    -webkit-animation-timing-function: ease-out;\n  }\n  55% {\n    top: 160px;\n    height: 120px;\n    border-radius: 70px / 60px;\n    -webkit-animation-timing-function: ease-in;\n  }\n  65% {\n    top: 120px;\n    height: 140px;\n    border-radius: 70px;\n    -webkit-animation-timing-function: ease-out;\n  }\n  95% {\n    top: 0;\n    -webkit-animation-timing-function: ease-in;\n  }\n  100% {\n    top: 0;\n    -webkit-animation-timing-function: ease-in;\n  }\n}\n\n@-moz-keyframes pace-bounce {\n  0% {\n    top: 0;\n    -moz-animation-timing-function: ease-in;\n  }\n  40% {}\n  50% {\n    top: 140px;\n    height: 140px;\n    -moz-animation-timing-function: ease-out;\n  }\n  55% {\n    top: 160px;\n    height: 120px;\n    border-radius: 70px / 60px;\n    -moz-animation-timing-function: ease-in;\n  }\n  65% {\n    top: 120px;\n    height: 140px;\n    border-radius: 70px;\n    -moz-animation-timing-function: ease-out;}\n  95% {\n    top: 0;\n    -moz-animation-timing-function: ease-in;\n  }\n  100% {top: 0;\n    -moz-animation-timing-function: ease-in;\n  }\n}\n\n@keyframes pace-bounce {\n  0% {\n    top: 0;\n    animation-timing-function: ease-in;\n  }\n  50% {\n    top: 140px;\n    height: 140px;\n    animation-timing-function: ease-out;\n  }\n  55% {\n    top: 160px;\n    height: 120px;\n    border-radius: 70px / 60px;\n    animation-timing-function: ease-in;\n  }\n  65% {\n    top: 120px;\n    height: 140px;\n    border-radius: 70px;\n    animation-timing-function: ease-out;\n  }\n  95% {\n    top: 0;\n    animation-timing-function: ease-in;\n  }\n  100% {\n    top: 0;\n    animation-timing-function: ease-in;\n  }\n}\n\n@-webkit-keyframes pace-compress {\n  0% {\n    bottom: 0;\n    margin-left: -30px;\n    width: 60px;\n    height: 75px;\n    background: rgba(20, 20, 20, .1);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .1);\n    border-radius: 30px / 40px;\n    -webkit-animation-timing-function: ease-in;\n  }\n  100% {\n    bottom: 30px;\n    margin-left: -10px;\n    width: 20px;\n    height: 5px;\n    background: rgba(20, 20, 20, .3);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .3);\n    border-radius: 20px / 20px;\n    -webkit-animation-timing-function: ease-out;\n  }\n}\n\n@-moz-keyframes pace-compress {\n  0% {\n    bottom: 0;\n    margin-left: -30px;\n    width: 60px;\n    height: 75px;\n    background: rgba(20, 20, 20, .1);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .1);\n    border-radius: 30px / 40px;\n    -moz-animation-timing-function: ease-in;\n  }\n  100% {\n    bottom: 30px;\n    margin-left: -10px;\n    width: 20px;\n    height: 5px;\n    background: rgba(20, 20, 20, .3);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .3);\n    border-radius: 20px / 20px;\n    -moz-animation-timing-function: ease-out;\n  }\n}\n\n@keyframes pace-compress {\n  0% {\n    bottom: 0;\n    margin-left: -30px;\n    width: 60px;\n    height: 75px;\n    background: rgba(20, 20, 20, .1);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .1);\n    border-radius: 30px / 40px;\n    animation-timing-function: ease-in;\n  }\n  100% {\n    bottom: 30px;\n    margin-left: -10px;\n    width: 20px;\n    height: 5px;\n    background: rgba(20, 20, 20, .3);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .3);\n    border-radius: 20px / 20px;\n    animation-timing-function: ease-out;\n  }\n}"
  },
  {
    "path": "public/frontend/plugins/pace/themes/green/pace-theme-center-atom.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace.pace-inactive {\n  display: none;\n}\n\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n\n  z-index: 2000;\n  position: fixed;\n  height: 60px;\n  width: 100px;\n  margin: auto;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n}\n\n.pace .pace-progress {\n  z-index: 2000;\n  position: absolute;\n  height: 60px;\n  width: 100px !important;\n}\n\n.pace .pace-progress:before {\n  content: attr(data-progress-text);\n  text-align: center;\n  color: #fff;\n  background: #22df80;\n  border-radius: 50%;\n  font-family: \"Helvetica Neue\", sans-serif;\n  font-size: 14px;\n  font-weight: 100;\n  line-height: 1;\n  padding: 20% 0 7px;\n  width: 50%;\n  height: 40%;\n  margin: 10px 0 0 30px;\n  display: block;\n  z-index: 999;\n  position: absolute;\n}\n\n.pace .pace-progress:after {\n  border-radius: 50%;\n  border: 5px solid #22df80;\n  content: ' ';\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 60px;\n  width: 100px;\n\n  -webkit-transform: rotate(90deg);\n     -moz-transform: rotate(90deg);\n       -o-transform: rotate(90deg);\n          transform: rotate(90deg);\n  -webkit-animation: spin-3 2s linear infinite;\n     -moz-animation: spin-3 2s linear infinite;\n       -o-animation: spin-3 2s linear infinite;\n          animation: spin-3 2s linear infinite;\n}\n\n.pace .pace-activity {\n  font-size: 15px;\n  line-height: 1;\n  z-index: 2000;\n  position: absolute;\n  height: 60px;\n  width: 100px;\n\n  display: block;\n}\n\n.pace .pace-activity:before {\n  border-radius: 50%;\n  border: 5px solid #22df80;\n  content: ' ';\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 60px;\n  width: 100px;\n\n  -webkit-animation: spin-1 2s linear infinite;\n     -moz-animation: spin-1 2s linear infinite;\n       -o-animation: spin-1 2s linear infinite;\n          animation: spin-1 2s linear infinite;\n}\n\n.pace .pace-activity:after{\n  border-radius: 50%;\n  border: 5px solid #22df80;\n  content: ' ';\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 60px;\n  width: 100px;\n\n  -webkit-transform: rotate(45deg);\n     -moz-transform: rotate(45deg);\n       -o-transform: rotate(45deg);\n          transform: rotate(45deg);\n  -webkit-animation: spin-2 2s linear infinite;\n     -moz-animation: spin-2 2s linear infinite;\n       -o-animation: spin-2 2s linear infinite;\n          animation: spin-2 2s linear infinite;\n}\n\n@-webkit-keyframes spin-1 {\n  0%  { -webkit-transform: rotate(0deg); }\n  100%{ -webkit-transform: rotate(359deg);}\n}\n@-moz-keyframes spin-1 {\n  0%  { -moz-transform: rotate(0deg); }\n  100%{ -moz-transform: rotate(359deg);}\n}\n@-o-keyframes spin-1 {\n  0%  { -o-transform: rotate(0deg); }\n  100%{ -o-transform: rotate(359deg);}\n}\n@keyframes spin-1 {\n  0%  { transform: rotate(0deg); }\n  100%{ transform: rotate(359deg);}\n}\n\n@-webkit-keyframes spin-2 {\n  0%  { -webkit-transform: rotate(59.8deg); }\n  100%{ -webkit-transform: rotate(418.8deg);}\n}\n@-moz-keyframes spin-2 {\n  0%  { -moz-transform: rotate(59.8deg); }\n  100%{ -moz-transform: rotate(418.8deg);}\n}\n@-o-keyframes spin-2 {\n  0%  { -o-transform: rotate(59.8deg); }\n  100%{ -o-transform: rotate(418.8deg);}\n}\n@keyframes spin-2 {\n  0%  { transform: rotate(59.8deg); }\n  100%{ transform: rotate(418.8deg);}\n}\n\n@-webkit-keyframes spin-3 {\n  0%  { -webkit-transform: rotate(119.6deg); }\n  100%{ -webkit-transform: rotate(478.6deg);}\n}\n@-moz-keyframes spin-3 {\n  0%  { -moz-transform: rotate(119.6deg); }\n  100%{ -moz-transform: rotate(478.6deg);}\n}\n@-o-keyframes spin-3 {\n  0%  { -o-transform: rotate(119.6deg); }\n  100%{ -o-transform: rotate(478.6deg);}\n}\n@keyframes spin-3 {\n  0%  { transform: rotate(119.6deg); }\n  100%{ transform: rotate(478.6deg);}\n}"
  },
  {
    "path": "public/frontend/plugins/pace/themes/green/pace-theme-center-circle.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n\n  -webkit-perspective: 12rem;\n  -moz-perspective: 12rem;\n  -ms-perspective: 12rem;\n  -o-perspective: 12rem;\n  perspective: 12rem;\n\n  z-index: 2000;\n  position: fixed;\n  height: 6rem;\n  width: 6rem;\n  margin: auto;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n}\n\n.pace.pace-inactive .pace-progress {\n  display: none;\n}\n\n.pace .pace-progress {\n  position: fixed;\n  z-index: 2000;\n  display: block;\n  position: absolute;\n  left: 0;\n  top: 0;\n  height: 6rem;\n  width: 6rem !important;\n  line-height: 6rem;\n  font-size: 2rem;\n  border-radius: 50%;\n  background: rgba(34, 223, 128, 0.8);\n  color: #fff;\n  font-family: \"Helvetica Neue\", sans-serif;\n  font-weight: 100;\n  text-align: center;\n\n  -webkit-animation: pace-3d-spinner linear infinite 2s;\n  -moz-animation: pace-3d-spinner linear infinite 2s;\n  -ms-animation: pace-3d-spinner linear infinite 2s;\n  -o-animation: pace-3d-spinner linear infinite 2s;\n  animation: pace-3d-spinner linear infinite 2s;\n\n  -webkit-transform-style: preserve-3d;\n  -moz-transform-style: preserve-3d;\n  -ms-transform-style: preserve-3d;\n  -o-transform-style: preserve-3d;\n  transform-style: preserve-3d;\n}\n\n.pace .pace-progress:after {\n  content: attr(data-progress-text);\n  display: block;\n}\n\n@-webkit-keyframes pace-3d-spinner {\n  from {\n    -webkit-transform: rotateY(0deg);\n  }\n  to {\n    -webkit-transform: rotateY(360deg);\n  }\n}\n\n@-moz-keyframes pace-3d-spinner {\n  from {\n    -moz-transform: rotateY(0deg);\n  }\n  to {\n    -moz-transform: rotateY(360deg);\n  }\n}\n\n@-ms-keyframes pace-3d-spinner {\n  from {\n    -ms-transform: rotateY(0deg);\n  }\n  to {\n    -ms-transform: rotateY(360deg);\n  }\n}\n\n@-o-keyframes pace-3d-spinner {\n  from {\n    -o-transform: rotateY(0deg);\n  }\n  to {\n    -o-transform: rotateY(360deg);\n  }\n}\n\n@keyframes pace-3d-spinner {\n  from {\n    transform: rotateY(0deg);\n  }\n  to {\n    transform: rotateY(360deg);\n  }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/green/pace-theme-center-radar.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n\n  z-index: 2000;\n  position: fixed;\n  height: 90px;\n  width: 90px;\n  margin: auto;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n}\n\n.pace.pace-inactive .pace-activity {\n  display: none;\n}\n\n.pace .pace-activity {\n  position: fixed;\n  z-index: 2000;\n  display: block;\n  position: absolute;\n  left: -30px;\n  top: -30px;\n  height: 90px;\n  width: 90px;\n  display: block;\n  border-width: 30px;\n  border-style: double;\n  border-color: #22df80 transparent transparent;\n  border-radius: 50%;\n\n  -webkit-animation: spin 1s linear infinite;\n     -moz-animation: spin 1s linear infinite;\n       -o-animation: spin 1s linear infinite;\n          animation: spin 1s linear infinite;\n}\n\n.pace .pace-activity:before {\n  content: ' ';\n  position: absolute;\n  top: 10px;\n  left: 10px;\n  height: 50px;\n  width: 50px;\n  display: block;\n  border-width: 10px;\n  border-style: solid;\n  border-color: #22df80 transparent transparent;\n  border-radius: 50%;\n}\n\n\n@-webkit-keyframes spin {\n  100% { -webkit-transform: rotate(359deg); }\n}\n\n@-moz-keyframes spin {\n  100% { -moz-transform: rotate(359deg); }\n}\n\n@-o-keyframes spin {\n  100% { -moz-transform: rotate(359deg); }\n}\n\n@keyframes spin {\n  100% {  transform: rotate(359deg); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/green/pace-theme-center-simple.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n\n  z-index: 2000;\n  position: fixed;\n  margin: auto;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  height: 5px;\n  width: 200px;\n  background: #fff;\n  border: 1px solid #22df80;\n}\n\n.pace .pace-progress {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  -ms-box-sizing: border-box;\n  -o-box-sizing: border-box;\n  box-sizing: border-box;\n\n  -webkit-transition: width 1s ease-in-out 1s linear;\n  -moz-transition: width 1s ease-in-out 1s linear;\n  -ms-transition: width 1s ease-in-out 1s linear;\n  -o-transition: width 1s ease-in-out 1s linear;\n  transition: width 1s ease-in-out 1s linear;\n\n  -webkit-transform: translate3d(0, 0, 0);\n  -moz-transform: translate3d(0, 0, 0);\n  -ms-transform: translate3d(0, 0, 0);\n  -o-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n\n  max-width: 200px;\n  position: fixed;\n  z-index: 2000;\n  display: block;\n  position: absolute;\n  left: 0px;\n  top: 0px;\n  height: 100%;\n  background: #22df80;\n}\n\n.pace.pace-inactive {\n  display: none;\n}"
  },
  {
    "path": "public/frontend/plugins/pace/themes/green/pace-theme-corner-indicator.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace .pace-activity {\n  display: block;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  right: 0;\n  width: 300px;\n  height: 300px;\n  background: #22df80;\n  -webkit-transition: -webkit-transform 0.3s;\n  transition: transform 0.3s;\n  -webkit-transform: translateX(100%) translateY(-100%) rotate(45deg);\n  transform: translateX(100%) translateY(-100%) rotate(45deg);\n  pointer-events: none;\n}\n\n.pace.pace-active .pace-activity {\n  -webkit-transform: translateX(50%) translateY(-50%) rotate(45deg);\n  transform: translateX(50%) translateY(-50%) rotate(45deg);\n}\n\n.pace .pace-activity::before,\n.pace .pace-activity::after {\n    position: absolute;\n    bottom: 30px;\n    left: 50%;\n    display: block;\n    border: 5px solid #fff;\n    border-radius: 50%;\n    content: '';\n}\n\n.pace .pace-activity::before {\n    margin-left: -40px;\n    width: 80px;\n    height: 80px;\n    border-right-color: rgba(0, 0, 0, .2);\n    border-left-color: rgba(0, 0, 0, .2);\n    -webkit-animation: pace-rotation 3s linear infinite;\n    animation: pace-rotation 3s linear infinite;\n}\n\n.pace .pace-activity::after {\n    bottom: 50px;\n    margin-left: -20px;\n    width: 40px;\n    height: 40px;\n    border-top-color: rgba(0, 0, 0, .2);\n    border-bottom-color: rgba(0, 0, 0, .2);\n    -webkit-animation: pace-rotation 1s linear infinite;\n    animation: pace-rotation 1s linear infinite;\n}\n\n@-webkit-keyframes pace-rotation {\n  0% { -webkit-transform: rotate(0deg); }\n  100% { -webkit-transform: rotate(359deg); }\n}\n@keyframes pace-rotation {\n  0% { transform: rotate(0deg); }\n  100% { transform: rotate(359deg); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/green/pace-theme-fill-left.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace .pace-progress {\n  background-color: rgba(34, 223, 128, 0.19999999999999996);\n  position: fixed;\n  z-index: -1;\n  top: 0;\n  left: 0;\n  bottom: 0;\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/green/pace-theme-flash.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace-inactive {\n  display: none;\n}\n\n.pace .pace-progress {\n  background: #22df80;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 2px;\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n\n.pace .pace-progress-inner {\n  display: block;\n  position: absolute;\n  right: 0px;\n  width: 100px;\n  height: 100%;\n  box-shadow: 0 0 10px #22df80, 0 0 5px #22df80;\n  opacity: 1.0;\n  -webkit-transform: rotate(3deg) translate(0px, -4px);\n  -moz-transform: rotate(3deg) translate(0px, -4px);\n  -ms-transform: rotate(3deg) translate(0px, -4px);\n  -o-transform: rotate(3deg) translate(0px, -4px);\n  transform: rotate(3deg) translate(0px, -4px);\n}\n\n.pace .pace-activity {\n  display: block;\n  position: fixed;\n  z-index: 2000;\n  top: 15px;\n  right: 15px;\n  width: 14px;\n  height: 14px;\n  border: solid 2px transparent;\n  border-top-color: #22df80;\n  border-left-color: #22df80;\n  border-radius: 10px;\n  -webkit-animation: pace-spinner 400ms linear infinite;\n  -moz-animation: pace-spinner 400ms linear infinite;\n  -ms-animation: pace-spinner 400ms linear infinite;\n  -o-animation: pace-spinner 400ms linear infinite;\n  animation: pace-spinner 400ms linear infinite;\n}\n\n@-webkit-keyframes pace-spinner {\n  0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@-moz-keyframes pace-spinner {\n  0% { -moz-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -moz-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@-o-keyframes pace-spinner {\n  0% { -o-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -o-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@-ms-keyframes pace-spinner {\n  0% { -ms-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -ms-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@keyframes pace-spinner {\n  0% { transform: rotate(0deg); transform: rotate(0deg); }\n  100% { transform: rotate(360deg); transform: rotate(360deg); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/green/pace-theme-flat-top.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace .pace-progress {\n  display: block;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 12px;\n  background: #22df80;\n\n  -webkit-transition: -webkit-transform .3s, width 1s;\n  -moz-transition: width 1s;\n  -o-transform: width 1s;\n  transition: transform .3s, width 1s;\n\n  -webkit-transform: translateY(-50px);\n  transform: translateY(-50px);\n\n  pointer-events: none;\n}\n\n.pace.pace-active .pace-progress {\n  -webkit-transform: translateY(0);\n  transform: translateY(0);\n}"
  },
  {
    "path": "public/frontend/plugins/pace/themes/green/pace-theme-loading-bar.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  -ms-box-sizing: border-box;\n  -o-box-sizing: border-box;\n  box-sizing: border-box;\n\n  -webkit-border-radius: 10px;\n  -moz-border-radius: 10px;\n  border-radius: 10px;\n\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n\n  z-index: 2000;\n  position: fixed;\n  margin: auto;\n  top: 12px;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  width: 200px;\n  height: 25px;\n  border: 2px solid #22df80;\n  background-color: #fff;\n}\n\n.pace .pace-progress {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  -ms-box-sizing: border-box;\n  -o-box-sizing: border-box;\n  box-sizing: border-box;\n\n  -webkit-border-radius: 5px;\n  -moz-border-radius: 5px;\n  border-radius: 5px;\n\n  -webkit-background-clip: padding-box;\n  -moz-background-clip: padding;\n  background-clip: padding-box;\n\n  -webkit-transition: width 1s ease-in-out 1s linear;\n  -moz-transition: width 1s ease-in-out 1s linear;\n  -ms-transition: width 1s ease-in-out 1s linear;\n  -o-transition: width 1s ease-in-out 1s linear;\n  transition: width 1s ease-in-out 1s linear;\n\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n\n  max-width: 190px;\n  position: fixed;\n  z-index: 2000;\n  display: block;\n  position: absolute;\n  left: 3px;\n  top: 3px;\n  height: 15px;\n  font-size: 12px;\n  background: #22df80;\n  color: #22df80;\n  line-height: 60px;\n  font-weight: bold;\n  font-family:  Helvetica, Arial, \"Lucida Grande\", sans-serif;\n}\n\n.pace .pace-progress:after {\n  content: attr(data-progress-text);\n  display: inline-block;\n}\n\n.pace.pace-inactive {\n  display: none;\n}"
  },
  {
    "path": "public/frontend/plugins/pace/themes/green/pace-theme-mac-osx.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace-inactive {\n  display: none;\n}\n\n.pace .pace-progress {\n  background-color: #22df80;\n\n  color: #58E79F;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 12px;\n  overflow: hidden;\n\n  -webkit-border-radius: 0 0 4px 0;\n  -moz-border-radius: 0 0 4px 0;\n  -o-border-radius: 0 0 4px 0;\n  border-radius: 0 0 4px 0;\n\n  -webkit-box-shadow: inset -1px 0 rgba(0, 0, 0, 0.3), inset 0 -1px rgba(0, 0, 0, 0.3), inset 0 2px rgba(255, 255, 255, 0.5), inset 0 6px rgba(255, 255, 255, 0.3);\n  -moz-box-shadow: inset -1px 0 rgba(0, 0, 0, 0.3), inset 0 -1px rgba(0, 0, 0, 0.3), inset 0 2px rgba(255, 255, 255, 0.5), inset 0 6px rgba(255, 255, 255, 0.3);\n  -o-box-shadow: inset -1px 0 rgba(0, 0, 0, 0.3), inset 0 -1px rgba(0, 0, 0, 0.3), inset 0 2px rgba(255, 255, 255, 0.5), inset 0 6px rgba(255, 255, 255, 0.3);\n  box-shadow: inset -1px 0 rgba(0, 0, 0, 0.3), inset 0 -1px rgba(0, 0, 0, 0.3), inset 0 2px rgba(255, 255, 255, 0.5), inset 0 6px rgba(255, 255, 255, 0.3);\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n\n.pace .pace-progress-inner {\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: -28px;\n  bottom: 0;\n\n  background-image: -o-radial-gradient(rgba(22, 156, 89, 0.6) 0%, rgba(34, 223, 128, 0) 100%);\n  background-image: -moz-radial-gradient(rgba(22, 156, 89, 0.6) 0%, rgba(34, 223, 128, 0) 100%);\n  background-image: -webkit-radial-gradient(rgba(22, 156, 89, 0.6) 0%, rgba(34, 223, 128, 0) 100%);\n  background-image: radial-gradient(rgba(22, 156, 89, 0.6) 0%, rgba(34, 223, 128, 0) 100%);\n\n\n  -webkit-background-size: 28px 100%;\n  -moz-background-size: 28px 100%;\n  -o-background-size: 28px 100%;\n  background-size: 28px 100%;\n\n  -webkit-animation: pace-stripe-animation 500ms linear infinite;\n  -moz-animation: pace-stripe-animation 500ms linear infinite;\n  -ms-animation: pace-stripe-animation 500ms linear infinite;\n  -o-animation: pace-stripe-animation 500ms linear infinite;\n  animation: pace-stripe-animation 500ms linear infinite;\n}\n\n@-webkit-keyframes pace-stripe-animation {\n  0% { -webkit-transform: none; transform: none; }\n  100% { -webkit-transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n@-moz-keyframes pace-stripe-animation {\n  0% { -moz-transform: none; transform: none; }\n  100% { -moz-transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n@-o-keyframes pace-stripe-animation {\n  0% { -o-transform: none; transform: none; }\n  100% { -o-transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n@-ms-keyframes pace-stripe-animation {\n  0% { -ms-transform: none; transform: none; }\n  100% { -ms-transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n@keyframes pace-stripe-animation {\n  0% { transform: none; transform: none; }\n  100% { transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/green/pace-theme-minimal.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace .pace-progress {\n  background: #22df80;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 2px;\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n\n.pace-inactive {\n  display: none;\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/orange/pace-theme-barber-shop.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace-inactive {\n  display: none;\n}\n\n.pace .pace-progress {\n  background-color: #eb7a55;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 12px;\n  overflow: hidden;\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n\n.pace .pace-progress-inner {\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: -32px;\n  bottom: 0;\n\n  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.2)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.2)), color-stop(0.75, rgba(255, 255, 255, 0.2)), color-stop(0.75, transparent), to(transparent));\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);\n  background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);\n  -webkit-background-size: 32px 32px;\n  -moz-background-size: 32px 32px;\n  -o-background-size: 32px 32px;\n  background-size: 32px 32px;\n\n  -webkit-animation: pace-stripe-animation 500ms linear infinite;\n  -moz-animation: pace-stripe-animation 500ms linear infinite;\n  -ms-animation: pace-stripe-animation 500ms linear infinite;\n  -o-animation: pace-stripe-animation 500ms linear infinite;\n  animation: pace-stripe-animation 500ms linear infinite;\n}\n\n@-webkit-keyframes pace-stripe-animation {\n  0% { -webkit-transform: none; transform: none; }\n  100% { -webkit-transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n@-moz-keyframes pace-stripe-animation {\n  0% { -moz-transform: none; transform: none; }\n  100% { -moz-transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n@-o-keyframes pace-stripe-animation {\n  0% { -o-transform: none; transform: none; }\n  100% { -o-transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n@-ms-keyframes pace-stripe-animation {\n  0% { -ms-transform: none; transform: none; }\n  100% { -ms-transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n@keyframes pace-stripe-animation {\n  0% { transform: none; transform: none; }\n  100% { transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/orange/pace-theme-big-counter.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace.pace-inactive .pace-progress {\n  display: none;\n}\n\n.pace .pace-progress {\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  right: 0;\n  height: 5rem;\n  width: 5rem;\n}\n\n.pace .pace-progress:after {\n  display: block;\n  position: absolute;\n  top: 0;\n  right: .5rem;\n  content: attr(data-progress-text);\n  font-family: \"Helvetica Neue\", sans-serif;\n  font-weight: 100;\n  font-size: 5rem;\n  line-height: 1;\n  text-align: right;\n  color: rgba(235, 122, 85, 0.19999999999999996);\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/orange/pace-theme-bounce.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  width: 140px;\n  height: 300px;\n  position: fixed;\n  top: -90px;\n  right: -20px;\n  z-index: 2000;\n  -webkit-transform: scale(0);\n  -moz-transform: scale(0);\n  -ms-transform: scale(0);\n  -o-transform: scale(0);\n  transform: scale(0);\n  opacity: 0;\n  -webkit-transition: all 2s linear 0s;\n  -moz-transition: all 2s linear 0s;\n  transition: all 2s linear 0s;\n}\n\n.pace.pace-active {\n  -webkit-transform: scale(.25);\n  -moz-transform: scale(.25);\n  -ms-transform: scale(.25);\n  -o-transform: scale(.25);\n  transform: scale(.25);\n  opacity: 1;\n}\n\n.pace .pace-activity {\n  width: 140px;\n  height: 140px;\n  border-radius: 70px;\n  background: #eb7a55;\n  position: absolute;\n  top: 0;\n  z-index: 1911;\n  -webkit-animation: pace-bounce 1s infinite;\n  -moz-animation: pace-bounce 1s infinite;\n  -o-animation: pace-bounce 1s infinite;\n  -ms-animation: pace-bounce 1s infinite;\n  animation: pace-bounce 1s infinite;\n}\n\n.pace .pace-progress {\n  position: absolute;\n  display: block;\n  left: 50%;\n  bottom: 0;\n  z-index: 1910;\n  margin-left: -30px;\n  width: 60px;\n  height: 75px;\n  background: rgba(20, 20, 20, .1);\n  box-shadow: 0 0 20px 35px rgba(20, 20, 20, .1);\n  border-radius: 30px / 40px;\n  -webkit-transform: scaleY(.3);\n  -moz-transform: scaleY(.3);\n  -ms-transform: scaleY(.3);\n  -o-transform: scaleY(.3);\n  transform: scaleY(.3);\n  -webkit-animation: pace-compress .5s infinite alternate;\n  -moz-animation: pace-compress .5s infinite alternate;\n  -o-animation: pace-compress .5s infinite alternate;\n  -ms-animation: pace-compress .5s infinite alternate;\n  animation: pace-compress .5s infinite alternate;\n}\n\n@-webkit-keyframes pace-bounce {\n  0% {\n    top: 0;\n    -webkit-animation-timing-function: ease-in;\n  }\n  40% {}\n  50% {\n    top: 140px;\n    height: 140px;\n    -webkit-animation-timing-function: ease-out;\n  }\n  55% {\n    top: 160px;\n    height: 120px;\n    border-radius: 70px / 60px;\n    -webkit-animation-timing-function: ease-in;\n  }\n  65% {\n    top: 120px;\n    height: 140px;\n    border-radius: 70px;\n    -webkit-animation-timing-function: ease-out;\n  }\n  95% {\n    top: 0;\n    -webkit-animation-timing-function: ease-in;\n  }\n  100% {\n    top: 0;\n    -webkit-animation-timing-function: ease-in;\n  }\n}\n\n@-moz-keyframes pace-bounce {\n  0% {\n    top: 0;\n    -moz-animation-timing-function: ease-in;\n  }\n  40% {}\n  50% {\n    top: 140px;\n    height: 140px;\n    -moz-animation-timing-function: ease-out;\n  }\n  55% {\n    top: 160px;\n    height: 120px;\n    border-radius: 70px / 60px;\n    -moz-animation-timing-function: ease-in;\n  }\n  65% {\n    top: 120px;\n    height: 140px;\n    border-radius: 70px;\n    -moz-animation-timing-function: ease-out;}\n  95% {\n    top: 0;\n    -moz-animation-timing-function: ease-in;\n  }\n  100% {top: 0;\n    -moz-animation-timing-function: ease-in;\n  }\n}\n\n@keyframes pace-bounce {\n  0% {\n    top: 0;\n    animation-timing-function: ease-in;\n  }\n  50% {\n    top: 140px;\n    height: 140px;\n    animation-timing-function: ease-out;\n  }\n  55% {\n    top: 160px;\n    height: 120px;\n    border-radius: 70px / 60px;\n    animation-timing-function: ease-in;\n  }\n  65% {\n    top: 120px;\n    height: 140px;\n    border-radius: 70px;\n    animation-timing-function: ease-out;\n  }\n  95% {\n    top: 0;\n    animation-timing-function: ease-in;\n  }\n  100% {\n    top: 0;\n    animation-timing-function: ease-in;\n  }\n}\n\n@-webkit-keyframes pace-compress {\n  0% {\n    bottom: 0;\n    margin-left: -30px;\n    width: 60px;\n    height: 75px;\n    background: rgba(20, 20, 20, .1);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .1);\n    border-radius: 30px / 40px;\n    -webkit-animation-timing-function: ease-in;\n  }\n  100% {\n    bottom: 30px;\n    margin-left: -10px;\n    width: 20px;\n    height: 5px;\n    background: rgba(20, 20, 20, .3);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .3);\n    border-radius: 20px / 20px;\n    -webkit-animation-timing-function: ease-out;\n  }\n}\n\n@-moz-keyframes pace-compress {\n  0% {\n    bottom: 0;\n    margin-left: -30px;\n    width: 60px;\n    height: 75px;\n    background: rgba(20, 20, 20, .1);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .1);\n    border-radius: 30px / 40px;\n    -moz-animation-timing-function: ease-in;\n  }\n  100% {\n    bottom: 30px;\n    margin-left: -10px;\n    width: 20px;\n    height: 5px;\n    background: rgba(20, 20, 20, .3);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .3);\n    border-radius: 20px / 20px;\n    -moz-animation-timing-function: ease-out;\n  }\n}\n\n@keyframes pace-compress {\n  0% {\n    bottom: 0;\n    margin-left: -30px;\n    width: 60px;\n    height: 75px;\n    background: rgba(20, 20, 20, .1);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .1);\n    border-radius: 30px / 40px;\n    animation-timing-function: ease-in;\n  }\n  100% {\n    bottom: 30px;\n    margin-left: -10px;\n    width: 20px;\n    height: 5px;\n    background: rgba(20, 20, 20, .3);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .3);\n    border-radius: 20px / 20px;\n    animation-timing-function: ease-out;\n  }\n}"
  },
  {
    "path": "public/frontend/plugins/pace/themes/orange/pace-theme-center-atom.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace.pace-inactive {\n  display: none;\n}\n\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n\n  z-index: 2000;\n  position: fixed;\n  height: 60px;\n  width: 100px;\n  margin: auto;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n}\n\n.pace .pace-progress {\n  z-index: 2000;\n  position: absolute;\n  height: 60px;\n  width: 100px !important;\n}\n\n.pace .pace-progress:before {\n  content: attr(data-progress-text);\n  text-align: center;\n  color: #fff;\n  background: #eb7a55;\n  border-radius: 50%;\n  font-family: \"Helvetica Neue\", sans-serif;\n  font-size: 14px;\n  font-weight: 100;\n  line-height: 1;\n  padding: 20% 0 7px;\n  width: 50%;\n  height: 40%;\n  margin: 10px 0 0 30px;\n  display: block;\n  z-index: 999;\n  position: absolute;\n}\n\n.pace .pace-progress:after {\n  border-radius: 50%;\n  border: 5px solid #eb7a55;\n  content: ' ';\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 60px;\n  width: 100px;\n\n  -webkit-transform: rotate(90deg);\n     -moz-transform: rotate(90deg);\n       -o-transform: rotate(90deg);\n          transform: rotate(90deg);\n  -webkit-animation: spin-3 2s linear infinite;\n     -moz-animation: spin-3 2s linear infinite;\n       -o-animation: spin-3 2s linear infinite;\n          animation: spin-3 2s linear infinite;\n}\n\n.pace .pace-activity {\n  font-size: 15px;\n  line-height: 1;\n  z-index: 2000;\n  position: absolute;\n  height: 60px;\n  width: 100px;\n\n  display: block;\n}\n\n.pace .pace-activity:before {\n  border-radius: 50%;\n  border: 5px solid #eb7a55;\n  content: ' ';\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 60px;\n  width: 100px;\n\n  -webkit-animation: spin-1 2s linear infinite;\n     -moz-animation: spin-1 2s linear infinite;\n       -o-animation: spin-1 2s linear infinite;\n          animation: spin-1 2s linear infinite;\n}\n\n.pace .pace-activity:after{\n  border-radius: 50%;\n  border: 5px solid #eb7a55;\n  content: ' ';\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 60px;\n  width: 100px;\n\n  -webkit-transform: rotate(45deg);\n     -moz-transform: rotate(45deg);\n       -o-transform: rotate(45deg);\n          transform: rotate(45deg);\n  -webkit-animation: spin-2 2s linear infinite;\n     -moz-animation: spin-2 2s linear infinite;\n       -o-animation: spin-2 2s linear infinite;\n          animation: spin-2 2s linear infinite;\n}\n\n@-webkit-keyframes spin-1 {\n  0%  { -webkit-transform: rotate(0deg); }\n  100%{ -webkit-transform: rotate(359deg);}\n}\n@-moz-keyframes spin-1 {\n  0%  { -moz-transform: rotate(0deg); }\n  100%{ -moz-transform: rotate(359deg);}\n}\n@-o-keyframes spin-1 {\n  0%  { -o-transform: rotate(0deg); }\n  100%{ -o-transform: rotate(359deg);}\n}\n@keyframes spin-1 {\n  0%  { transform: rotate(0deg); }\n  100%{ transform: rotate(359deg);}\n}\n\n@-webkit-keyframes spin-2 {\n  0%  { -webkit-transform: rotate(59.8deg); }\n  100%{ -webkit-transform: rotate(418.8deg);}\n}\n@-moz-keyframes spin-2 {\n  0%  { -moz-transform: rotate(59.8deg); }\n  100%{ -moz-transform: rotate(418.8deg);}\n}\n@-o-keyframes spin-2 {\n  0%  { -o-transform: rotate(59.8deg); }\n  100%{ -o-transform: rotate(418.8deg);}\n}\n@keyframes spin-2 {\n  0%  { transform: rotate(59.8deg); }\n  100%{ transform: rotate(418.8deg);}\n}\n\n@-webkit-keyframes spin-3 {\n  0%  { -webkit-transform: rotate(119.6deg); }\n  100%{ -webkit-transform: rotate(478.6deg);}\n}\n@-moz-keyframes spin-3 {\n  0%  { -moz-transform: rotate(119.6deg); }\n  100%{ -moz-transform: rotate(478.6deg);}\n}\n@-o-keyframes spin-3 {\n  0%  { -o-transform: rotate(119.6deg); }\n  100%{ -o-transform: rotate(478.6deg);}\n}\n@keyframes spin-3 {\n  0%  { transform: rotate(119.6deg); }\n  100%{ transform: rotate(478.6deg);}\n}"
  },
  {
    "path": "public/frontend/plugins/pace/themes/orange/pace-theme-center-circle.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n\n  -webkit-perspective: 12rem;\n  -moz-perspective: 12rem;\n  -ms-perspective: 12rem;\n  -o-perspective: 12rem;\n  perspective: 12rem;\n\n  z-index: 2000;\n  position: fixed;\n  height: 6rem;\n  width: 6rem;\n  margin: auto;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n}\n\n.pace.pace-inactive .pace-progress {\n  display: none;\n}\n\n.pace .pace-progress {\n  position: fixed;\n  z-index: 2000;\n  display: block;\n  position: absolute;\n  left: 0;\n  top: 0;\n  height: 6rem;\n  width: 6rem !important;\n  line-height: 6rem;\n  font-size: 2rem;\n  border-radius: 50%;\n  background: rgba(235, 122, 85, 0.8);\n  color: #fff;\n  font-family: \"Helvetica Neue\", sans-serif;\n  font-weight: 100;\n  text-align: center;\n\n  -webkit-animation: pace-3d-spinner linear infinite 2s;\n  -moz-animation: pace-3d-spinner linear infinite 2s;\n  -ms-animation: pace-3d-spinner linear infinite 2s;\n  -o-animation: pace-3d-spinner linear infinite 2s;\n  animation: pace-3d-spinner linear infinite 2s;\n\n  -webkit-transform-style: preserve-3d;\n  -moz-transform-style: preserve-3d;\n  -ms-transform-style: preserve-3d;\n  -o-transform-style: preserve-3d;\n  transform-style: preserve-3d;\n}\n\n.pace .pace-progress:after {\n  content: attr(data-progress-text);\n  display: block;\n}\n\n@-webkit-keyframes pace-3d-spinner {\n  from {\n    -webkit-transform: rotateY(0deg);\n  }\n  to {\n    -webkit-transform: rotateY(360deg);\n  }\n}\n\n@-moz-keyframes pace-3d-spinner {\n  from {\n    -moz-transform: rotateY(0deg);\n  }\n  to {\n    -moz-transform: rotateY(360deg);\n  }\n}\n\n@-ms-keyframes pace-3d-spinner {\n  from {\n    -ms-transform: rotateY(0deg);\n  }\n  to {\n    -ms-transform: rotateY(360deg);\n  }\n}\n\n@-o-keyframes pace-3d-spinner {\n  from {\n    -o-transform: rotateY(0deg);\n  }\n  to {\n    -o-transform: rotateY(360deg);\n  }\n}\n\n@keyframes pace-3d-spinner {\n  from {\n    transform: rotateY(0deg);\n  }\n  to {\n    transform: rotateY(360deg);\n  }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/orange/pace-theme-center-radar.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n\n  z-index: 2000;\n  position: fixed;\n  height: 90px;\n  width: 90px;\n  margin: auto;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n}\n\n.pace.pace-inactive .pace-activity {\n  display: none;\n}\n\n.pace .pace-activity {\n  position: fixed;\n  z-index: 2000;\n  display: block;\n  position: absolute;\n  left: -30px;\n  top: -30px;\n  height: 90px;\n  width: 90px;\n  display: block;\n  border-width: 30px;\n  border-style: double;\n  border-color: #eb7a55 transparent transparent;\n  border-radius: 50%;\n\n  -webkit-animation: spin 1s linear infinite;\n     -moz-animation: spin 1s linear infinite;\n       -o-animation: spin 1s linear infinite;\n          animation: spin 1s linear infinite;\n}\n\n.pace .pace-activity:before {\n  content: ' ';\n  position: absolute;\n  top: 10px;\n  left: 10px;\n  height: 50px;\n  width: 50px;\n  display: block;\n  border-width: 10px;\n  border-style: solid;\n  border-color: #eb7a55 transparent transparent;\n  border-radius: 50%;\n}\n\n\n@-webkit-keyframes spin {\n  100% { -webkit-transform: rotate(359deg); }\n}\n\n@-moz-keyframes spin {\n  100% { -moz-transform: rotate(359deg); }\n}\n\n@-o-keyframes spin {\n  100% { -moz-transform: rotate(359deg); }\n}\n\n@keyframes spin {\n  100% {  transform: rotate(359deg); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/orange/pace-theme-center-simple.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n\n  z-index: 2000;\n  position: fixed;\n  margin: auto;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  height: 5px;\n  width: 200px;\n  background: #fff;\n  border: 1px solid #eb7a55;\n}\n\n.pace .pace-progress {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  -ms-box-sizing: border-box;\n  -o-box-sizing: border-box;\n  box-sizing: border-box;\n\n  -webkit-transition: width 1s ease-in-out 1s linear;\n  -moz-transition: width 1s ease-in-out 1s linear;\n  -ms-transition: width 1s ease-in-out 1s linear;\n  -o-transition: width 1s ease-in-out 1s linear;\n  transition: width 1s ease-in-out 1s linear;\n\n  -webkit-transform: translate3d(0, 0, 0);\n  -moz-transform: translate3d(0, 0, 0);\n  -ms-transform: translate3d(0, 0, 0);\n  -o-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n\n  max-width: 200px;\n  position: fixed;\n  z-index: 2000;\n  display: block;\n  position: absolute;\n  left: 0px;\n  top: 0px;\n  height: 100%;\n  background: #eb7a55;\n}\n\n.pace.pace-inactive {\n  display: none;\n}"
  },
  {
    "path": "public/frontend/plugins/pace/themes/orange/pace-theme-corner-indicator.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace .pace-activity {\n  display: block;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  right: 0;\n  width: 300px;\n  height: 300px;\n  background: #eb7a55;\n  -webkit-transition: -webkit-transform 0.3s;\n  transition: transform 0.3s;\n  -webkit-transform: translateX(100%) translateY(-100%) rotate(45deg);\n  transform: translateX(100%) translateY(-100%) rotate(45deg);\n  pointer-events: none;\n}\n\n.pace.pace-active .pace-activity {\n  -webkit-transform: translateX(50%) translateY(-50%) rotate(45deg);\n  transform: translateX(50%) translateY(-50%) rotate(45deg);\n}\n\n.pace .pace-activity::before,\n.pace .pace-activity::after {\n    position: absolute;\n    bottom: 30px;\n    left: 50%;\n    display: block;\n    border: 5px solid #fff;\n    border-radius: 50%;\n    content: '';\n}\n\n.pace .pace-activity::before {\n    margin-left: -40px;\n    width: 80px;\n    height: 80px;\n    border-right-color: rgba(0, 0, 0, .2);\n    border-left-color: rgba(0, 0, 0, .2);\n    -webkit-animation: pace-rotation 3s linear infinite;\n    animation: pace-rotation 3s linear infinite;\n}\n\n.pace .pace-activity::after {\n    bottom: 50px;\n    margin-left: -20px;\n    width: 40px;\n    height: 40px;\n    border-top-color: rgba(0, 0, 0, .2);\n    border-bottom-color: rgba(0, 0, 0, .2);\n    -webkit-animation: pace-rotation 1s linear infinite;\n    animation: pace-rotation 1s linear infinite;\n}\n\n@-webkit-keyframes pace-rotation {\n  0% { -webkit-transform: rotate(0deg); }\n  100% { -webkit-transform: rotate(359deg); }\n}\n@keyframes pace-rotation {\n  0% { transform: rotate(0deg); }\n  100% { transform: rotate(359deg); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/orange/pace-theme-fill-left.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace .pace-progress {\n  background-color: rgba(235, 122, 85, 0.19999999999999996);\n  position: fixed;\n  z-index: -1;\n  top: 0;\n  left: 0;\n  bottom: 0;\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/orange/pace-theme-flash.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace-inactive {\n  display: none;\n}\n\n.pace .pace-progress {\n  background: #eb7a55;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 2px;\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n\n.pace .pace-progress-inner {\n  display: block;\n  position: absolute;\n  right: 0px;\n  width: 100px;\n  height: 100%;\n  box-shadow: 0 0 10px #eb7a55, 0 0 5px #eb7a55;\n  opacity: 1.0;\n  -webkit-transform: rotate(3deg) translate(0px, -4px);\n  -moz-transform: rotate(3deg) translate(0px, -4px);\n  -ms-transform: rotate(3deg) translate(0px, -4px);\n  -o-transform: rotate(3deg) translate(0px, -4px);\n  transform: rotate(3deg) translate(0px, -4px);\n}\n\n.pace .pace-activity {\n  display: block;\n  position: fixed;\n  z-index: 2000;\n  top: 15px;\n  right: 15px;\n  width: 14px;\n  height: 14px;\n  border: solid 2px transparent;\n  border-top-color: #eb7a55;\n  border-left-color: #eb7a55;\n  border-radius: 10px;\n  -webkit-animation: pace-spinner 400ms linear infinite;\n  -moz-animation: pace-spinner 400ms linear infinite;\n  -ms-animation: pace-spinner 400ms linear infinite;\n  -o-animation: pace-spinner 400ms linear infinite;\n  animation: pace-spinner 400ms linear infinite;\n}\n\n@-webkit-keyframes pace-spinner {\n  0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@-moz-keyframes pace-spinner {\n  0% { -moz-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -moz-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@-o-keyframes pace-spinner {\n  0% { -o-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -o-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@-ms-keyframes pace-spinner {\n  0% { -ms-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -ms-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@keyframes pace-spinner {\n  0% { transform: rotate(0deg); transform: rotate(0deg); }\n  100% { transform: rotate(360deg); transform: rotate(360deg); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/orange/pace-theme-flat-top.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace .pace-progress {\n  display: block;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 12px;\n  background: #eb7a55;\n\n  -webkit-transition: -webkit-transform .3s, width 1s;\n  -moz-transition: width 1s;\n  -o-transform: width 1s;\n  transition: transform .3s, width 1s;\n\n  -webkit-transform: translateY(-50px);\n  transform: translateY(-50px);\n\n  pointer-events: none;\n}\n\n.pace.pace-active .pace-progress {\n  -webkit-transform: translateY(0);\n  transform: translateY(0);\n}"
  },
  {
    "path": "public/frontend/plugins/pace/themes/orange/pace-theme-loading-bar.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  -ms-box-sizing: border-box;\n  -o-box-sizing: border-box;\n  box-sizing: border-box;\n\n  -webkit-border-radius: 10px;\n  -moz-border-radius: 10px;\n  border-radius: 10px;\n\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n\n  z-index: 2000;\n  position: fixed;\n  margin: auto;\n  top: 12px;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  width: 200px;\n  height: 25px;\n  border: 2px solid #eb7a55;\n  background-color: #fff;\n}\n\n.pace .pace-progress {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  -ms-box-sizing: border-box;\n  -o-box-sizing: border-box;\n  box-sizing: border-box;\n\n  -webkit-border-radius: 5px;\n  -moz-border-radius: 5px;\n  border-radius: 5px;\n\n  -webkit-background-clip: padding-box;\n  -moz-background-clip: padding;\n  background-clip: padding-box;\n\n  -webkit-transition: width 1s ease-in-out 1s linear;\n  -moz-transition: width 1s ease-in-out 1s linear;\n  -ms-transition: width 1s ease-in-out 1s linear;\n  -o-transition: width 1s ease-in-out 1s linear;\n  transition: width 1s ease-in-out 1s linear;\n\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n\n  max-width: 190px;\n  position: fixed;\n  z-index: 2000;\n  display: block;\n  position: absolute;\n  left: 3px;\n  top: 3px;\n  height: 15px;\n  font-size: 12px;\n  background: #eb7a55;\n  color: #eb7a55;\n  line-height: 60px;\n  font-weight: bold;\n  font-family:  Helvetica, Arial, \"Lucida Grande\", sans-serif;\n}\n\n.pace .pace-progress:after {\n  content: attr(data-progress-text);\n  display: inline-block;\n}\n\n.pace.pace-inactive {\n  display: none;\n}"
  },
  {
    "path": "public/frontend/plugins/pace/themes/orange/pace-theme-mac-osx.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace-inactive {\n  display: none;\n}\n\n.pace .pace-progress {\n  background-color: #eb7a55;\n\n  color: #F4B39E;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 12px;\n  overflow: hidden;\n\n  -webkit-border-radius: 0 0 4px 0;\n  -moz-border-radius: 0 0 4px 0;\n  -o-border-radius: 0 0 4px 0;\n  border-radius: 0 0 4px 0;\n\n  -webkit-box-shadow: inset -1px 0 rgba(0, 0, 0, 0.3), inset 0 -1px rgba(0, 0, 0, 0.3), inset 0 2px rgba(255, 255, 255, 0.5), inset 0 6px rgba(255, 255, 255, 0.3);\n  -moz-box-shadow: inset -1px 0 rgba(0, 0, 0, 0.3), inset 0 -1px rgba(0, 0, 0, 0.3), inset 0 2px rgba(255, 255, 255, 0.5), inset 0 6px rgba(255, 255, 255, 0.3);\n  -o-box-shadow: inset -1px 0 rgba(0, 0, 0, 0.3), inset 0 -1px rgba(0, 0, 0, 0.3), inset 0 2px rgba(255, 255, 255, 0.5), inset 0 6px rgba(255, 255, 255, 0.3);\n  box-shadow: inset -1px 0 rgba(0, 0, 0, 0.3), inset 0 -1px rgba(0, 0, 0, 0.3), inset 0 2px rgba(255, 255, 255, 0.5), inset 0 6px rgba(255, 255, 255, 0.3);\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n\n.pace .pace-progress-inner {\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: -28px;\n  bottom: 0;\n\n  background-image: -o-radial-gradient(rgba(201, 68, 24, 0.6) 0%, rgba(235, 122, 85, 0) 100%);\n  background-image: -moz-radial-gradient(rgba(201, 68, 24, 0.6) 0%, rgba(235, 122, 85, 0) 100%);\n  background-image: -webkit-radial-gradient(rgba(201, 68, 24, 0.6) 0%, rgba(235, 122, 85, 0) 100%);\n  background-image: radial-gradient(rgba(201, 68, 24, 0.6) 0%, rgba(235, 122, 85, 0) 100%);\n\n\n  -webkit-background-size: 28px 100%;\n  -moz-background-size: 28px 100%;\n  -o-background-size: 28px 100%;\n  background-size: 28px 100%;\n\n  -webkit-animation: pace-stripe-animation 500ms linear infinite;\n  -moz-animation: pace-stripe-animation 500ms linear infinite;\n  -ms-animation: pace-stripe-animation 500ms linear infinite;\n  -o-animation: pace-stripe-animation 500ms linear infinite;\n  animation: pace-stripe-animation 500ms linear infinite;\n}\n\n@-webkit-keyframes pace-stripe-animation {\n  0% { -webkit-transform: none; transform: none; }\n  100% { -webkit-transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n@-moz-keyframes pace-stripe-animation {\n  0% { -moz-transform: none; transform: none; }\n  100% { -moz-transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n@-o-keyframes pace-stripe-animation {\n  0% { -o-transform: none; transform: none; }\n  100% { -o-transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n@-ms-keyframes pace-stripe-animation {\n  0% { -ms-transform: none; transform: none; }\n  100% { -ms-transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n@keyframes pace-stripe-animation {\n  0% { transform: none; transform: none; }\n  100% { transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/orange/pace-theme-minimal.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace .pace-progress {\n  background: #eb7a55;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 2px;\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n\n.pace-inactive {\n  display: none;\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/pace-theme-barber-shop.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace-inactive {\n  display: none;\n}\n\n.pace .pace-progress {\n  background-color: #29d;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 12px;\n  overflow: hidden;\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n\n.pace .pace-progress-inner {\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: -32px;\n  bottom: 0;\n\n  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.2)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.2)), color-stop(0.75, rgba(255, 255, 255, 0.2)), color-stop(0.75, transparent), to(transparent));\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);\n  background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);\n  -webkit-background-size: 32px 32px;\n  -moz-background-size: 32px 32px;\n  -o-background-size: 32px 32px;\n  background-size: 32px 32px;\n\n  -webkit-animation: pace-stripe-animation 500ms linear infinite;\n  -moz-animation: pace-stripe-animation 500ms linear infinite;\n  -ms-animation: pace-stripe-animation 500ms linear infinite;\n  -o-animation: pace-stripe-animation 500ms linear infinite;\n  animation: pace-stripe-animation 500ms linear infinite;\n}\n\n@-webkit-keyframes pace-stripe-animation {\n  0% { -webkit-transform: none; transform: none; }\n  100% { -webkit-transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n@-moz-keyframes pace-stripe-animation {\n  0% { -moz-transform: none; transform: none; }\n  100% { -moz-transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n@-o-keyframes pace-stripe-animation {\n  0% { -o-transform: none; transform: none; }\n  100% { -o-transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n@-ms-keyframes pace-stripe-animation {\n  0% { -ms-transform: none; transform: none; }\n  100% { -ms-transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n@keyframes pace-stripe-animation {\n  0% { transform: none; transform: none; }\n  100% { transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/pace-theme-big-counter.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace.pace-inactive .pace-progress {\n  display: none;\n}\n\n.pace .pace-progress {\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  right: 0;\n  height: 5rem;\n  width: 5rem;\n}\n\n.pace .pace-progress:after {\n  display: block;\n  position: absolute;\n  top: 0;\n  right: .5rem;\n  content: attr(data-progress-text);\n  font-family: \"Helvetica Neue\", sans-serif;\n  font-weight: 100;\n  font-size: 5rem;\n  line-height: 1;\n  text-align: right;\n  color: rgba(0, 0, 0, 0.19999999999999996);\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/pace-theme-bounce.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  width: 140px;\n  height: 300px;\n  position: fixed;\n  top: -90px;\n  right: -20px;\n  z-index: 2000;\n  -webkit-transform: scale(0);\n  -moz-transform: scale(0);\n  -ms-transform: scale(0);\n  -o-transform: scale(0);\n  transform: scale(0);\n  opacity: 0;\n  -webkit-transition: all 2s linear 0s;\n  -moz-transition: all 2s linear 0s;\n  transition: all 2s linear 0s;\n}\n\n.pace.pace-active {\n  -webkit-transform: scale(.25);\n  -moz-transform: scale(.25);\n  -ms-transform: scale(.25);\n  -o-transform: scale(.25);\n  transform: scale(.25);\n  opacity: 1;\n}\n\n.pace .pace-activity {\n  width: 140px;\n  height: 140px;\n  border-radius: 70px;\n  background: #29d;\n  position: absolute;\n  top: 0;\n  z-index: 1911;\n  -webkit-animation: pace-bounce 1s infinite;\n  -moz-animation: pace-bounce 1s infinite;\n  -o-animation: pace-bounce 1s infinite;\n  -ms-animation: pace-bounce 1s infinite;\n  animation: pace-bounce 1s infinite;\n}\n\n.pace .pace-progress {\n  position: absolute;\n  display: block;\n  left: 50%;\n  bottom: 0;\n  z-index: 1910;\n  margin-left: -30px;\n  width: 60px;\n  height: 75px;\n  background: rgba(20, 20, 20, .1);\n  box-shadow: 0 0 20px 35px rgba(20, 20, 20, .1);\n  border-radius: 30px / 40px;\n  -webkit-transform: scaleY(.3);\n  -moz-transform: scaleY(.3);\n  -ms-transform: scaleY(.3);\n  -o-transform: scaleY(.3);\n  transform: scaleY(.3);\n  -webkit-animation: pace-compress .5s infinite alternate;\n  -moz-animation: pace-compress .5s infinite alternate;\n  -o-animation: pace-compress .5s infinite alternate;\n  -ms-animation: pace-compress .5s infinite alternate;\n  animation: pace-compress .5s infinite alternate;\n}\n\n@-webkit-keyframes pace-bounce {\n  0% {\n    top: 0;\n    -webkit-animation-timing-function: ease-in;\n  }\n  40% {}\n  50% {\n    top: 140px;\n    height: 140px;\n    -webkit-animation-timing-function: ease-out;\n  }\n  55% {\n    top: 160px;\n    height: 120px;\n    border-radius: 70px / 60px;\n    -webkit-animation-timing-function: ease-in;\n  }\n  65% {\n    top: 120px;\n    height: 140px;\n    border-radius: 70px;\n    -webkit-animation-timing-function: ease-out;\n  }\n  95% {\n    top: 0;\n    -webkit-animation-timing-function: ease-in;\n  }\n  100% {\n    top: 0;\n    -webkit-animation-timing-function: ease-in;\n  }\n}\n\n@-moz-keyframes pace-bounce {\n  0% {\n    top: 0;\n    -moz-animation-timing-function: ease-in;\n  }\n  40% {}\n  50% {\n    top: 140px;\n    height: 140px;\n    -moz-animation-timing-function: ease-out;\n  }\n  55% {\n    top: 160px;\n    height: 120px;\n    border-radius: 70px / 60px;\n    -moz-animation-timing-function: ease-in;\n  }\n  65% {\n    top: 120px;\n    height: 140px;\n    border-radius: 70px;\n    -moz-animation-timing-function: ease-out;}\n  95% {\n    top: 0;\n    -moz-animation-timing-function: ease-in;\n  }\n  100% {top: 0;\n    -moz-animation-timing-function: ease-in;\n  }\n}\n\n@keyframes pace-bounce {\n  0% {\n    top: 0;\n    animation-timing-function: ease-in;\n  }\n  50% {\n    top: 140px;\n    height: 140px;\n    animation-timing-function: ease-out;\n  }\n  55% {\n    top: 160px;\n    height: 120px;\n    border-radius: 70px / 60px;\n    animation-timing-function: ease-in;\n  }\n  65% {\n    top: 120px;\n    height: 140px;\n    border-radius: 70px;\n    animation-timing-function: ease-out;\n  }\n  95% {\n    top: 0;\n    animation-timing-function: ease-in;\n  }\n  100% {\n    top: 0;\n    animation-timing-function: ease-in;\n  }\n}\n\n@-webkit-keyframes pace-compress {\n  0% {\n    bottom: 0;\n    margin-left: -30px;\n    width: 60px;\n    height: 75px;\n    background: rgba(20, 20, 20, .1);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .1);\n    border-radius: 30px / 40px;\n    -webkit-animation-timing-function: ease-in;\n  }\n  100% {\n    bottom: 30px;\n    margin-left: -10px;\n    width: 20px;\n    height: 5px;\n    background: rgba(20, 20, 20, .3);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .3);\n    border-radius: 20px / 20px;\n    -webkit-animation-timing-function: ease-out;\n  }\n}\n\n@-moz-keyframes pace-compress {\n  0% {\n    bottom: 0;\n    margin-left: -30px;\n    width: 60px;\n    height: 75px;\n    background: rgba(20, 20, 20, .1);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .1);\n    border-radius: 30px / 40px;\n    -moz-animation-timing-function: ease-in;\n  }\n  100% {\n    bottom: 30px;\n    margin-left: -10px;\n    width: 20px;\n    height: 5px;\n    background: rgba(20, 20, 20, .3);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .3);\n    border-radius: 20px / 20px;\n    -moz-animation-timing-function: ease-out;\n  }\n}\n\n@keyframes pace-compress {\n  0% {\n    bottom: 0;\n    margin-left: -30px;\n    width: 60px;\n    height: 75px;\n    background: rgba(20, 20, 20, .1);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .1);\n    border-radius: 30px / 40px;\n    animation-timing-function: ease-in;\n  }\n  100% {\n    bottom: 30px;\n    margin-left: -10px;\n    width: 20px;\n    height: 5px;\n    background: rgba(20, 20, 20, .3);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .3);\n    border-radius: 20px / 20px;\n    animation-timing-function: ease-out;\n  }\n}"
  },
  {
    "path": "public/frontend/plugins/pace/themes/pace-theme-center-atom.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace.pace-inactive {\n  display: none;\n}\n\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n\n  z-index: 2000;\n  position: fixed;\n  height: 60px;\n  width: 100px;\n  margin: auto;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n}\n\n.pace .pace-progress {\n  z-index: 2000;\n  position: absolute;\n  height: 60px;\n  width: 100px !important;\n}\n\n.pace .pace-progress:before {\n  content: attr(data-progress-text);\n  text-align: center;\n  color: #fff;\n  background: #29d;\n  border-radius: 50%;\n  font-family: \"Helvetica Neue\", sans-serif;\n  font-size: 14px;\n  font-weight: 100;\n  line-height: 1;\n  padding: 20% 0 7px;\n  width: 50%;\n  height: 40%;\n  margin: 10px 0 0 30px;\n  display: block;\n  z-index: 999;\n  position: absolute;\n}\n\n.pace .pace-progress:after {\n  border-radius: 50%;\n  border: 5px solid #29d;\n  content: ' ';\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 60px;\n  width: 100px;\n\n  -webkit-transform: rotate(90deg);\n     -moz-transform: rotate(90deg);\n       -o-transform: rotate(90deg);\n          transform: rotate(90deg);\n  -webkit-animation: spin-3 2s linear infinite;\n     -moz-animation: spin-3 2s linear infinite;\n       -o-animation: spin-3 2s linear infinite;\n          animation: spin-3 2s linear infinite;\n}\n\n.pace .pace-activity {\n  font-size: 15px;\n  line-height: 1;\n  z-index: 2000;\n  position: absolute;\n  height: 60px;\n  width: 100px;\n\n  display: block;\n}\n\n.pace .pace-activity:before {\n  border-radius: 50%;\n  border: 5px solid #29d;\n  content: ' ';\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 60px;\n  width: 100px;\n\n  -webkit-animation: spin-1 2s linear infinite;\n     -moz-animation: spin-1 2s linear infinite;\n       -o-animation: spin-1 2s linear infinite;\n          animation: spin-1 2s linear infinite;\n}\n\n.pace .pace-activity:after{\n  border-radius: 50%;\n  border: 5px solid #29d;\n  content: ' ';\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 60px;\n  width: 100px;\n\n  -webkit-transform: rotate(45deg);\n     -moz-transform: rotate(45deg);\n       -o-transform: rotate(45deg);\n          transform: rotate(45deg);\n  -webkit-animation: spin-2 2s linear infinite;\n     -moz-animation: spin-2 2s linear infinite;\n       -o-animation: spin-2 2s linear infinite;\n          animation: spin-2 2s linear infinite;\n}\n\n@-webkit-keyframes spin-1 {\n  0%  { -webkit-transform: rotate(0deg); }\n  100%{ -webkit-transform: rotate(359deg);}\n}\n@-moz-keyframes spin-1 {\n  0%  { -moz-transform: rotate(0deg); }\n  100%{ -moz-transform: rotate(359deg);}\n}\n@-o-keyframes spin-1 {\n  0%  { -o-transform: rotate(0deg); }\n  100%{ -o-transform: rotate(359deg);}\n}\n@keyframes spin-1 {\n  0%  { transform: rotate(0deg); }\n  100%{ transform: rotate(359deg);}\n}\n\n@-webkit-keyframes spin-2 {\n  0%  { -webkit-transform: rotate(59.8deg); }\n  100%{ -webkit-transform: rotate(418.8deg);}\n}\n@-moz-keyframes spin-2 {\n  0%  { -moz-transform: rotate(59.8deg); }\n  100%{ -moz-transform: rotate(418.8deg);}\n}\n@-o-keyframes spin-2 {\n  0%  { -o-transform: rotate(59.8deg); }\n  100%{ -o-transform: rotate(418.8deg);}\n}\n@keyframes spin-2 {\n  0%  { transform: rotate(59.8deg); }\n  100%{ transform: rotate(418.8deg);}\n}\n\n@-webkit-keyframes spin-3 {\n  0%  { -webkit-transform: rotate(119.6deg); }\n  100%{ -webkit-transform: rotate(478.6deg);}\n}\n@-moz-keyframes spin-3 {\n  0%  { -moz-transform: rotate(119.6deg); }\n  100%{ -moz-transform: rotate(478.6deg);}\n}\n@-o-keyframes spin-3 {\n  0%  { -o-transform: rotate(119.6deg); }\n  100%{ -o-transform: rotate(478.6deg);}\n}\n@keyframes spin-3 {\n  0%  { transform: rotate(119.6deg); }\n  100%{ transform: rotate(478.6deg);}\n}"
  },
  {
    "path": "public/frontend/plugins/pace/themes/pace-theme-center-circle.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n\n  -webkit-perspective: 12rem;\n  -moz-perspective: 12rem;\n  -ms-perspective: 12rem;\n  -o-perspective: 12rem;\n  perspective: 12rem;\n\n  z-index: 2000;\n  position: fixed;\n  height: 6rem;\n  width: 6rem;\n  margin: auto;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n}\n\n.pace.pace-inactive .pace-progress {\n  display: none;\n}\n\n.pace .pace-progress {\n  position: fixed;\n  z-index: 2000;\n  display: block;\n  position: absolute;\n  left: 0;\n  top: 0;\n  height: 6rem;\n  width: 6rem !important;\n  line-height: 6rem;\n  font-size: 2rem;\n  border-radius: 50%;\n  background: rgba(34, 153, 221, 0.8);\n  color: #fff;\n  font-family: \"Helvetica Neue\", sans-serif;\n  font-weight: 100;\n  text-align: center;\n\n  -webkit-animation: pace-3d-spinner linear infinite 2s;\n  -moz-animation: pace-3d-spinner linear infinite 2s;\n  -ms-animation: pace-3d-spinner linear infinite 2s;\n  -o-animation: pace-3d-spinner linear infinite 2s;\n  animation: pace-3d-spinner linear infinite 2s;\n\n  -webkit-transform-style: preserve-3d;\n  -moz-transform-style: preserve-3d;\n  -ms-transform-style: preserve-3d;\n  -o-transform-style: preserve-3d;\n  transform-style: preserve-3d;\n}\n\n.pace .pace-progress:after {\n  content: attr(data-progress-text);\n  display: block;\n}\n\n@-webkit-keyframes pace-3d-spinner {\n  from {\n    -webkit-transform: rotateY(0deg);\n  }\n  to {\n    -webkit-transform: rotateY(360deg);\n  }\n}\n\n@-moz-keyframes pace-3d-spinner {\n  from {\n    -moz-transform: rotateY(0deg);\n  }\n  to {\n    -moz-transform: rotateY(360deg);\n  }\n}\n\n@-ms-keyframes pace-3d-spinner {\n  from {\n    -ms-transform: rotateY(0deg);\n  }\n  to {\n    -ms-transform: rotateY(360deg);\n  }\n}\n\n@-o-keyframes pace-3d-spinner {\n  from {\n    -o-transform: rotateY(0deg);\n  }\n  to {\n    -o-transform: rotateY(360deg);\n  }\n}\n\n@keyframes pace-3d-spinner {\n  from {\n    transform: rotateY(0deg);\n  }\n  to {\n    transform: rotateY(360deg);\n  }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/pace-theme-center-radar.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n\n  z-index: 2000;\n  position: fixed;\n  height: 90px;\n  width: 90px;\n  margin: auto;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n}\n\n.pace.pace-inactive .pace-activity {\n  display: none;\n}\n\n.pace .pace-activity {\n  position: fixed;\n  z-index: 2000;\n  display: block;\n  position: absolute;\n  left: -30px;\n  top: -30px;\n  height: 90px;\n  width: 90px;\n  display: block;\n  border-width: 30px;\n  border-style: double;\n  border-color: #29d transparent transparent;\n  border-radius: 50%;\n\n  -webkit-animation: spin 1s linear infinite;\n     -moz-animation: spin 1s linear infinite;\n       -o-animation: spin 1s linear infinite;\n          animation: spin 1s linear infinite;\n}\n\n.pace .pace-activity:before {\n  content: ' ';\n  position: absolute;\n  top: 10px;\n  left: 10px;\n  height: 50px;\n  width: 50px;\n  display: block;\n  border-width: 10px;\n  border-style: solid;\n  border-color: #29d transparent transparent;\n  border-radius: 50%;\n}\n\n\n@-webkit-keyframes spin {\n  100% { -webkit-transform: rotate(359deg); }\n}\n\n@-moz-keyframes spin {\n  100% { -moz-transform: rotate(359deg); }\n}\n\n@-o-keyframes spin {\n  100% { -moz-transform: rotate(359deg); }\n}\n\n@keyframes spin {\n  100% {  transform: rotate(359deg); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/pace-theme-center-simple.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n\n  z-index: 2000;\n  position: fixed;\n  margin: auto;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  height: 5px;\n  width: 200px;\n  background: #fff;\n  border: 1px solid #29d;\n}\n\n.pace .pace-progress {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  -ms-box-sizing: border-box;\n  -o-box-sizing: border-box;\n  box-sizing: border-box;\n\n  -webkit-transition: width 1s ease-in-out 1s linear;\n  -moz-transition: width 1s ease-in-out 1s linear;\n  -ms-transition: width 1s ease-in-out 1s linear;\n  -o-transition: width 1s ease-in-out 1s linear;\n  transition: width 1s ease-in-out 1s linear;\n\n  -webkit-transform: translate3d(0, 0, 0);\n  -moz-transform: translate3d(0, 0, 0);\n  -ms-transform: translate3d(0, 0, 0);\n  -o-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n\n  max-width: 200px;\n  position: fixed;\n  z-index: 2000;\n  display: block;\n  position: absolute;\n  left: 0px;\n  top: 0px;\n  height: 100%;\n  background: #29d;\n}\n\n.pace.pace-inactive {\n  display: none;\n}"
  },
  {
    "path": "public/frontend/plugins/pace/themes/pace-theme-corner-indicator.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace .pace-activity {\n  display: block;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  right: 0;\n  width: 300px;\n  height: 300px;\n  background: #29d;\n  -webkit-transition: -webkit-transform 0.3s;\n  transition: transform 0.3s;\n  -webkit-transform: translateX(100%) translateY(-100%) rotate(45deg);\n  transform: translateX(100%) translateY(-100%) rotate(45deg);\n  pointer-events: none;\n}\n\n.pace.pace-active .pace-activity {\n  -webkit-transform: translateX(50%) translateY(-50%) rotate(45deg);\n  transform: translateX(50%) translateY(-50%) rotate(45deg);\n}\n\n.pace .pace-activity::before,\n.pace .pace-activity::after {\n    position: absolute;\n    bottom: 30px;\n    left: 50%;\n    display: block;\n    border: 5px solid #fff;\n    border-radius: 50%;\n    content: '';\n}\n\n.pace .pace-activity::before {\n    margin-left: -40px;\n    width: 80px;\n    height: 80px;\n    border-right-color: rgba(0, 0, 0, .2);\n    border-left-color: rgba(0, 0, 0, .2);\n    -webkit-animation: pace-rotation 3s linear infinite;\n    animation: pace-rotation 3s linear infinite;\n}\n\n.pace .pace-activity::after {\n    bottom: 50px;\n    margin-left: -20px;\n    width: 40px;\n    height: 40px;\n    border-top-color: rgba(0, 0, 0, .2);\n    border-bottom-color: rgba(0, 0, 0, .2);\n    -webkit-animation: pace-rotation 1s linear infinite;\n    animation: pace-rotation 1s linear infinite;\n}\n\n@-webkit-keyframes pace-rotation {\n  0% { -webkit-transform: rotate(0deg); }\n  100% { -webkit-transform: rotate(359deg); }\n}\n@keyframes pace-rotation {\n  0% { transform: rotate(0deg); }\n  100% { transform: rotate(359deg); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/pace-theme-fill-left.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace .pace-progress {\n  background-color: rgba(0, 0, 0, 0.19999999999999996);\n  position: fixed;\n  z-index: -1;\n  top: 0;\n  left: 0;\n  bottom: 0;\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/pace-theme-flash.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace-inactive {\n  display: none;\n}\n\n.pace .pace-progress {\n  background: #29d;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 2px;\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n\n.pace .pace-progress-inner {\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  -webkit-transform: rotate(3deg) translate(0px, -4px);\n  -moz-transform: rotate(3deg) translate(0px, -4px);\n  -ms-transform: rotate(3deg) translate(0px, -4px);\n  -o-transform: rotate(3deg) translate(0px, -4px);\n  transform: rotate(3deg) translate(0px, -4px);\n}\n\n.pace .pace-activity {\n  display: block;\n  position: fixed;\n  z-index: 2000;\n  top: 15px;\n  right: 15px;\n  width: 14px;\n  height: 14px;\n  border: solid 2px transparent;\n  border-top-color: #29d;\n  border-left-color: #29d;\n  border-radius: 10px;\n  -webkit-animation: pace-spinner 400ms linear infinite;\n  -moz-animation: pace-spinner 400ms linear infinite;\n  -ms-animation: pace-spinner 400ms linear infinite;\n  -o-animation: pace-spinner 400ms linear infinite;\n  animation: pace-spinner 400ms linear infinite;\n}\n\n@-webkit-keyframes pace-spinner {\n  0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@-moz-keyframes pace-spinner {\n  0% { -moz-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -moz-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@-o-keyframes pace-spinner {\n  0% { -o-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -o-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@-ms-keyframes pace-spinner {\n  0% { -ms-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -ms-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@keyframes pace-spinner {\n  0% { transform: rotate(0deg); transform: rotate(0deg); }\n  100% { transform: rotate(360deg); transform: rotate(360deg); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/pace-theme-flat-top.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace .pace-progress {\n  display: block;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 12px;\n  background: #29d;\n\n  -webkit-transition: -webkit-transform .3s, width 1s;\n  -moz-transition: width 1s;\n  -o-transform: width 1s;\n  transition: transform .3s, width 1s;\n\n  -webkit-transform: translateY(-50px);\n  transform: translateY(-50px);\n\n  pointer-events: none;\n}\n\n.pace.pace-active .pace-progress {\n  -webkit-transform: translateY(0);\n  transform: translateY(0);\n}"
  },
  {
    "path": "public/frontend/plugins/pace/themes/pace-theme-loading-bar.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  -ms-box-sizing: border-box;\n  -o-box-sizing: border-box;\n  box-sizing: border-box;\n\n  -webkit-border-radius: 10px;\n  -moz-border-radius: 10px;\n  border-radius: 10px;\n\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n\n  z-index: 2000;\n  position: fixed;\n  margin: auto;\n  top: 12px;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  width: 200px;\n  height: 25px;\n  border: 2px solid #29d;\n  background-color: #fff;\n}\n\n.pace .pace-progress {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  -ms-box-sizing: border-box;\n  -o-box-sizing: border-box;\n  box-sizing: border-box;\n\n  -webkit-border-radius: 5px;\n  -moz-border-radius: 5px;\n  border-radius: 5px;\n\n  -webkit-background-clip: padding-box;\n  -moz-background-clip: padding;\n  background-clip: padding-box;\n\n  -webkit-transition: width 1s ease-in-out 1s linear;\n  -moz-transition: width 1s ease-in-out 1s linear;\n  -ms-transition: width 1s ease-in-out 1s linear;\n  -o-transition: width 1s ease-in-out 1s linear;\n  transition: width 1s ease-in-out 1s linear;\n\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n\n  max-width: 190px;\n  position: fixed;\n  z-index: 2000;\n  display: block;\n  position: absolute;\n  left: 3px;\n  top: 3px;\n  height: 15px;\n  font-size: 12px;\n  background: #29d;\n  color: #29d;\n  line-height: 60px;\n  font-weight: bold;\n  font-family:  Helvetica, Arial, \"Lucida Grande\", sans-serif;\n}\n\n.pace .pace-progress:after {\n  content: attr(data-progress-text);\n  display: inline-block;\n}\n\n.pace.pace-inactive {\n  display: none;\n}"
  },
  {
    "path": "public/frontend/plugins/pace/themes/pace-theme-mac-osx.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace-inactive {\n  display: none;\n}\n\n.pace .pace-progress {\n  background-color: #78c0f0;\n\n  color: #CBE7F9;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 12px;\n  overflow: hidden;\n\n  -webkit-border-radius: 0 0 4px 0;\n  -moz-border-radius: 0 0 4px 0;\n  -o-border-radius: 0 0 4px 0;\n  border-radius: 0 0 4px 0;\n\n  -webkit-box-shadow: inset -1px 0 rgba(0, 0, 0, 0.3), inset 0 -1px rgba(0, 0, 0, 0.3), inset 0 2px rgba(255, 255, 255, 0.5), inset 0 6px rgba(255, 255, 255, 0.3);\n  -moz-box-shadow: inset -1px 0 rgba(0, 0, 0, 0.3), inset 0 -1px rgba(0, 0, 0, 0.3), inset 0 2px rgba(255, 255, 255, 0.5), inset 0 6px rgba(255, 255, 255, 0.3);\n  -o-box-shadow: inset -1px 0 rgba(0, 0, 0, 0.3), inset 0 -1px rgba(0, 0, 0, 0.3), inset 0 2px rgba(255, 255, 255, 0.5), inset 0 6px rgba(255, 255, 255, 0.3);\n  box-shadow: inset -1px 0 rgba(0, 0, 0, 0.3), inset 0 -1px rgba(0, 0, 0, 0.3), inset 0 2px rgba(255, 255, 255, 0.5), inset 0 6px rgba(255, 255, 255, 0.3);\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n\n.pace .pace-progress-inner {\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: -28px;\n  bottom: 0;\n\n  background-image: -o-radial-gradient(rgba(25, 147, 228, 0.6) 0%, rgba(120, 192, 240, 0) 100%);\n  background-image: -moz-radial-gradient(rgba(25, 147, 228, 0.6) 0%, rgba(120, 192, 240, 0) 100%);\n  background-image: -webkit-radial-gradient(rgba(25, 147, 228, 0.6) 0%, rgba(120, 192, 240, 0) 100%);\n  background-image: radial-gradient(rgba(25, 147, 228, 0.6) 0%, rgba(120, 192, 240, 0) 100%);\n\n\n  -webkit-background-size: 28px 100%;\n  -moz-background-size: 28px 100%;\n  -o-background-size: 28px 100%;\n  background-size: 28px 100%;\n\n  -webkit-animation: pace-stripe-animation 500ms linear infinite;\n  -moz-animation: pace-stripe-animation 500ms linear infinite;\n  -ms-animation: pace-stripe-animation 500ms linear infinite;\n  -o-animation: pace-stripe-animation 500ms linear infinite;\n  animation: pace-stripe-animation 500ms linear infinite;\n}\n\n@-webkit-keyframes pace-stripe-animation {\n  0% { -webkit-transform: none; transform: none; }\n  100% { -webkit-transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n@-moz-keyframes pace-stripe-animation {\n  0% { -moz-transform: none; transform: none; }\n  100% { -moz-transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n@-o-keyframes pace-stripe-animation {\n  0% { -o-transform: none; transform: none; }\n  100% { -o-transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n@-ms-keyframes pace-stripe-animation {\n  0% { -ms-transform: none; transform: none; }\n  100% { -ms-transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n@keyframes pace-stripe-animation {\n  0% { transform: none; transform: none; }\n  100% { transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/pace-theme-minimal.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace .pace-progress {\n  background: #29d;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 2px;\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n\n.pace-inactive {\n  display: none;\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/pink/pace-theme-barber-shop.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace-inactive {\n  display: none;\n}\n\n.pace .pace-progress {\n  background-color: #e90f92;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 12px;\n  overflow: hidden;\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n\n.pace .pace-progress-inner {\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: -32px;\n  bottom: 0;\n\n  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.2)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.2)), color-stop(0.75, rgba(255, 255, 255, 0.2)), color-stop(0.75, transparent), to(transparent));\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);\n  background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);\n  -webkit-background-size: 32px 32px;\n  -moz-background-size: 32px 32px;\n  -o-background-size: 32px 32px;\n  background-size: 32px 32px;\n\n  -webkit-animation: pace-stripe-animation 500ms linear infinite;\n  -moz-animation: pace-stripe-animation 500ms linear infinite;\n  -ms-animation: pace-stripe-animation 500ms linear infinite;\n  -o-animation: pace-stripe-animation 500ms linear infinite;\n  animation: pace-stripe-animation 500ms linear infinite;\n}\n\n@-webkit-keyframes pace-stripe-animation {\n  0% { -webkit-transform: none; transform: none; }\n  100% { -webkit-transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n@-moz-keyframes pace-stripe-animation {\n  0% { -moz-transform: none; transform: none; }\n  100% { -moz-transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n@-o-keyframes pace-stripe-animation {\n  0% { -o-transform: none; transform: none; }\n  100% { -o-transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n@-ms-keyframes pace-stripe-animation {\n  0% { -ms-transform: none; transform: none; }\n  100% { -ms-transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n@keyframes pace-stripe-animation {\n  0% { transform: none; transform: none; }\n  100% { transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/pink/pace-theme-big-counter.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace.pace-inactive .pace-progress {\n  display: none;\n}\n\n.pace .pace-progress {\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  right: 0;\n  height: 5rem;\n  width: 5rem;\n}\n\n.pace .pace-progress:after {\n  display: block;\n  position: absolute;\n  top: 0;\n  right: .5rem;\n  content: attr(data-progress-text);\n  font-family: \"Helvetica Neue\", sans-serif;\n  font-weight: 100;\n  font-size: 5rem;\n  line-height: 1;\n  text-align: right;\n  color: rgba(233, 15, 146, 0.19999999999999996);\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/pink/pace-theme-bounce.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  width: 140px;\n  height: 300px;\n  position: fixed;\n  top: -90px;\n  right: -20px;\n  z-index: 2000;\n  -webkit-transform: scale(0);\n  -moz-transform: scale(0);\n  -ms-transform: scale(0);\n  -o-transform: scale(0);\n  transform: scale(0);\n  opacity: 0;\n  -webkit-transition: all 2s linear 0s;\n  -moz-transition: all 2s linear 0s;\n  transition: all 2s linear 0s;\n}\n\n.pace.pace-active {\n  -webkit-transform: scale(.25);\n  -moz-transform: scale(.25);\n  -ms-transform: scale(.25);\n  -o-transform: scale(.25);\n  transform: scale(.25);\n  opacity: 1;\n}\n\n.pace .pace-activity {\n  width: 140px;\n  height: 140px;\n  border-radius: 70px;\n  background: #e90f92;\n  position: absolute;\n  top: 0;\n  z-index: 1911;\n  -webkit-animation: pace-bounce 1s infinite;\n  -moz-animation: pace-bounce 1s infinite;\n  -o-animation: pace-bounce 1s infinite;\n  -ms-animation: pace-bounce 1s infinite;\n  animation: pace-bounce 1s infinite;\n}\n\n.pace .pace-progress {\n  position: absolute;\n  display: block;\n  left: 50%;\n  bottom: 0;\n  z-index: 1910;\n  margin-left: -30px;\n  width: 60px;\n  height: 75px;\n  background: rgba(20, 20, 20, .1);\n  box-shadow: 0 0 20px 35px rgba(20, 20, 20, .1);\n  border-radius: 30px / 40px;\n  -webkit-transform: scaleY(.3);\n  -moz-transform: scaleY(.3);\n  -ms-transform: scaleY(.3);\n  -o-transform: scaleY(.3);\n  transform: scaleY(.3);\n  -webkit-animation: pace-compress .5s infinite alternate;\n  -moz-animation: pace-compress .5s infinite alternate;\n  -o-animation: pace-compress .5s infinite alternate;\n  -ms-animation: pace-compress .5s infinite alternate;\n  animation: pace-compress .5s infinite alternate;\n}\n\n@-webkit-keyframes pace-bounce {\n  0% {\n    top: 0;\n    -webkit-animation-timing-function: ease-in;\n  }\n  40% {}\n  50% {\n    top: 140px;\n    height: 140px;\n    -webkit-animation-timing-function: ease-out;\n  }\n  55% {\n    top: 160px;\n    height: 120px;\n    border-radius: 70px / 60px;\n    -webkit-animation-timing-function: ease-in;\n  }\n  65% {\n    top: 120px;\n    height: 140px;\n    border-radius: 70px;\n    -webkit-animation-timing-function: ease-out;\n  }\n  95% {\n    top: 0;\n    -webkit-animation-timing-function: ease-in;\n  }\n  100% {\n    top: 0;\n    -webkit-animation-timing-function: ease-in;\n  }\n}\n\n@-moz-keyframes pace-bounce {\n  0% {\n    top: 0;\n    -moz-animation-timing-function: ease-in;\n  }\n  40% {}\n  50% {\n    top: 140px;\n    height: 140px;\n    -moz-animation-timing-function: ease-out;\n  }\n  55% {\n    top: 160px;\n    height: 120px;\n    border-radius: 70px / 60px;\n    -moz-animation-timing-function: ease-in;\n  }\n  65% {\n    top: 120px;\n    height: 140px;\n    border-radius: 70px;\n    -moz-animation-timing-function: ease-out;}\n  95% {\n    top: 0;\n    -moz-animation-timing-function: ease-in;\n  }\n  100% {top: 0;\n    -moz-animation-timing-function: ease-in;\n  }\n}\n\n@keyframes pace-bounce {\n  0% {\n    top: 0;\n    animation-timing-function: ease-in;\n  }\n  50% {\n    top: 140px;\n    height: 140px;\n    animation-timing-function: ease-out;\n  }\n  55% {\n    top: 160px;\n    height: 120px;\n    border-radius: 70px / 60px;\n    animation-timing-function: ease-in;\n  }\n  65% {\n    top: 120px;\n    height: 140px;\n    border-radius: 70px;\n    animation-timing-function: ease-out;\n  }\n  95% {\n    top: 0;\n    animation-timing-function: ease-in;\n  }\n  100% {\n    top: 0;\n    animation-timing-function: ease-in;\n  }\n}\n\n@-webkit-keyframes pace-compress {\n  0% {\n    bottom: 0;\n    margin-left: -30px;\n    width: 60px;\n    height: 75px;\n    background: rgba(20, 20, 20, .1);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .1);\n    border-radius: 30px / 40px;\n    -webkit-animation-timing-function: ease-in;\n  }\n  100% {\n    bottom: 30px;\n    margin-left: -10px;\n    width: 20px;\n    height: 5px;\n    background: rgba(20, 20, 20, .3);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .3);\n    border-radius: 20px / 20px;\n    -webkit-animation-timing-function: ease-out;\n  }\n}\n\n@-moz-keyframes pace-compress {\n  0% {\n    bottom: 0;\n    margin-left: -30px;\n    width: 60px;\n    height: 75px;\n    background: rgba(20, 20, 20, .1);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .1);\n    border-radius: 30px / 40px;\n    -moz-animation-timing-function: ease-in;\n  }\n  100% {\n    bottom: 30px;\n    margin-left: -10px;\n    width: 20px;\n    height: 5px;\n    background: rgba(20, 20, 20, .3);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .3);\n    border-radius: 20px / 20px;\n    -moz-animation-timing-function: ease-out;\n  }\n}\n\n@keyframes pace-compress {\n  0% {\n    bottom: 0;\n    margin-left: -30px;\n    width: 60px;\n    height: 75px;\n    background: rgba(20, 20, 20, .1);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .1);\n    border-radius: 30px / 40px;\n    animation-timing-function: ease-in;\n  }\n  100% {\n    bottom: 30px;\n    margin-left: -10px;\n    width: 20px;\n    height: 5px;\n    background: rgba(20, 20, 20, .3);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .3);\n    border-radius: 20px / 20px;\n    animation-timing-function: ease-out;\n  }\n}"
  },
  {
    "path": "public/frontend/plugins/pace/themes/pink/pace-theme-center-atom.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace.pace-inactive {\n  display: none;\n}\n\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n\n  z-index: 2000;\n  position: fixed;\n  height: 60px;\n  width: 100px;\n  margin: auto;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n}\n\n.pace .pace-progress {\n  z-index: 2000;\n  position: absolute;\n  height: 60px;\n  width: 100px !important;\n}\n\n.pace .pace-progress:before {\n  content: attr(data-progress-text);\n  text-align: center;\n  color: #fff;\n  background: #e90f92;\n  border-radius: 50%;\n  font-family: \"Helvetica Neue\", sans-serif;\n  font-size: 14px;\n  font-weight: 100;\n  line-height: 1;\n  padding: 20% 0 7px;\n  width: 50%;\n  height: 40%;\n  margin: 10px 0 0 30px;\n  display: block;\n  z-index: 999;\n  position: absolute;\n}\n\n.pace .pace-progress:after {\n  border-radius: 50%;\n  border: 5px solid #e90f92;\n  content: ' ';\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 60px;\n  width: 100px;\n\n  -webkit-transform: rotate(90deg);\n     -moz-transform: rotate(90deg);\n       -o-transform: rotate(90deg);\n          transform: rotate(90deg);\n  -webkit-animation: spin-3 2s linear infinite;\n     -moz-animation: spin-3 2s linear infinite;\n       -o-animation: spin-3 2s linear infinite;\n          animation: spin-3 2s linear infinite;\n}\n\n.pace .pace-activity {\n  font-size: 15px;\n  line-height: 1;\n  z-index: 2000;\n  position: absolute;\n  height: 60px;\n  width: 100px;\n\n  display: block;\n}\n\n.pace .pace-activity:before {\n  border-radius: 50%;\n  border: 5px solid #e90f92;\n  content: ' ';\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 60px;\n  width: 100px;\n\n  -webkit-animation: spin-1 2s linear infinite;\n     -moz-animation: spin-1 2s linear infinite;\n       -o-animation: spin-1 2s linear infinite;\n          animation: spin-1 2s linear infinite;\n}\n\n.pace .pace-activity:after{\n  border-radius: 50%;\n  border: 5px solid #e90f92;\n  content: ' ';\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 60px;\n  width: 100px;\n\n  -webkit-transform: rotate(45deg);\n     -moz-transform: rotate(45deg);\n       -o-transform: rotate(45deg);\n          transform: rotate(45deg);\n  -webkit-animation: spin-2 2s linear infinite;\n     -moz-animation: spin-2 2s linear infinite;\n       -o-animation: spin-2 2s linear infinite;\n          animation: spin-2 2s linear infinite;\n}\n\n@-webkit-keyframes spin-1 {\n  0%  { -webkit-transform: rotate(0deg); }\n  100%{ -webkit-transform: rotate(359deg);}\n}\n@-moz-keyframes spin-1 {\n  0%  { -moz-transform: rotate(0deg); }\n  100%{ -moz-transform: rotate(359deg);}\n}\n@-o-keyframes spin-1 {\n  0%  { -o-transform: rotate(0deg); }\n  100%{ -o-transform: rotate(359deg);}\n}\n@keyframes spin-1 {\n  0%  { transform: rotate(0deg); }\n  100%{ transform: rotate(359deg);}\n}\n\n@-webkit-keyframes spin-2 {\n  0%  { -webkit-transform: rotate(59.8deg); }\n  100%{ -webkit-transform: rotate(418.8deg);}\n}\n@-moz-keyframes spin-2 {\n  0%  { -moz-transform: rotate(59.8deg); }\n  100%{ -moz-transform: rotate(418.8deg);}\n}\n@-o-keyframes spin-2 {\n  0%  { -o-transform: rotate(59.8deg); }\n  100%{ -o-transform: rotate(418.8deg);}\n}\n@keyframes spin-2 {\n  0%  { transform: rotate(59.8deg); }\n  100%{ transform: rotate(418.8deg);}\n}\n\n@-webkit-keyframes spin-3 {\n  0%  { -webkit-transform: rotate(119.6deg); }\n  100%{ -webkit-transform: rotate(478.6deg);}\n}\n@-moz-keyframes spin-3 {\n  0%  { -moz-transform: rotate(119.6deg); }\n  100%{ -moz-transform: rotate(478.6deg);}\n}\n@-o-keyframes spin-3 {\n  0%  { -o-transform: rotate(119.6deg); }\n  100%{ -o-transform: rotate(478.6deg);}\n}\n@keyframes spin-3 {\n  0%  { transform: rotate(119.6deg); }\n  100%{ transform: rotate(478.6deg);}\n}"
  },
  {
    "path": "public/frontend/plugins/pace/themes/pink/pace-theme-center-circle.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n\n  -webkit-perspective: 12rem;\n  -moz-perspective: 12rem;\n  -ms-perspective: 12rem;\n  -o-perspective: 12rem;\n  perspective: 12rem;\n\n  z-index: 2000;\n  position: fixed;\n  height: 6rem;\n  width: 6rem;\n  margin: auto;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n}\n\n.pace.pace-inactive .pace-progress {\n  display: none;\n}\n\n.pace .pace-progress {\n  position: fixed;\n  z-index: 2000;\n  display: block;\n  position: absolute;\n  left: 0;\n  top: 0;\n  height: 6rem;\n  width: 6rem !important;\n  line-height: 6rem;\n  font-size: 2rem;\n  border-radius: 50%;\n  background: rgba(233, 15, 146, 0.8);\n  color: #fff;\n  font-family: \"Helvetica Neue\", sans-serif;\n  font-weight: 100;\n  text-align: center;\n\n  -webkit-animation: pace-3d-spinner linear infinite 2s;\n  -moz-animation: pace-3d-spinner linear infinite 2s;\n  -ms-animation: pace-3d-spinner linear infinite 2s;\n  -o-animation: pace-3d-spinner linear infinite 2s;\n  animation: pace-3d-spinner linear infinite 2s;\n\n  -webkit-transform-style: preserve-3d;\n  -moz-transform-style: preserve-3d;\n  -ms-transform-style: preserve-3d;\n  -o-transform-style: preserve-3d;\n  transform-style: preserve-3d;\n}\n\n.pace .pace-progress:after {\n  content: attr(data-progress-text);\n  display: block;\n}\n\n@-webkit-keyframes pace-3d-spinner {\n  from {\n    -webkit-transform: rotateY(0deg);\n  }\n  to {\n    -webkit-transform: rotateY(360deg);\n  }\n}\n\n@-moz-keyframes pace-3d-spinner {\n  from {\n    -moz-transform: rotateY(0deg);\n  }\n  to {\n    -moz-transform: rotateY(360deg);\n  }\n}\n\n@-ms-keyframes pace-3d-spinner {\n  from {\n    -ms-transform: rotateY(0deg);\n  }\n  to {\n    -ms-transform: rotateY(360deg);\n  }\n}\n\n@-o-keyframes pace-3d-spinner {\n  from {\n    -o-transform: rotateY(0deg);\n  }\n  to {\n    -o-transform: rotateY(360deg);\n  }\n}\n\n@keyframes pace-3d-spinner {\n  from {\n    transform: rotateY(0deg);\n  }\n  to {\n    transform: rotateY(360deg);\n  }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/pink/pace-theme-center-radar.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n\n  z-index: 2000;\n  position: fixed;\n  height: 90px;\n  width: 90px;\n  margin: auto;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n}\n\n.pace.pace-inactive .pace-activity {\n  display: none;\n}\n\n.pace .pace-activity {\n  position: fixed;\n  z-index: 2000;\n  display: block;\n  position: absolute;\n  left: -30px;\n  top: -30px;\n  height: 90px;\n  width: 90px;\n  display: block;\n  border-width: 30px;\n  border-style: double;\n  border-color: #e90f92 transparent transparent;\n  border-radius: 50%;\n\n  -webkit-animation: spin 1s linear infinite;\n     -moz-animation: spin 1s linear infinite;\n       -o-animation: spin 1s linear infinite;\n          animation: spin 1s linear infinite;\n}\n\n.pace .pace-activity:before {\n  content: ' ';\n  position: absolute;\n  top: 10px;\n  left: 10px;\n  height: 50px;\n  width: 50px;\n  display: block;\n  border-width: 10px;\n  border-style: solid;\n  border-color: #e90f92 transparent transparent;\n  border-radius: 50%;\n}\n\n\n@-webkit-keyframes spin {\n  100% { -webkit-transform: rotate(359deg); }\n}\n\n@-moz-keyframes spin {\n  100% { -moz-transform: rotate(359deg); }\n}\n\n@-o-keyframes spin {\n  100% { -moz-transform: rotate(359deg); }\n}\n\n@keyframes spin {\n  100% {  transform: rotate(359deg); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/pink/pace-theme-center-simple.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n\n  z-index: 2000;\n  position: fixed;\n  margin: auto;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  height: 5px;\n  width: 200px;\n  background: #fff;\n  border: 1px solid #e90f92;\n}\n\n.pace .pace-progress {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  -ms-box-sizing: border-box;\n  -o-box-sizing: border-box;\n  box-sizing: border-box;\n\n  -webkit-transition: width 1s ease-in-out 1s linear;\n  -moz-transition: width 1s ease-in-out 1s linear;\n  -ms-transition: width 1s ease-in-out 1s linear;\n  -o-transition: width 1s ease-in-out 1s linear;\n  transition: width 1s ease-in-out 1s linear;\n\n  -webkit-transform: translate3d(0, 0, 0);\n  -moz-transform: translate3d(0, 0, 0);\n  -ms-transform: translate3d(0, 0, 0);\n  -o-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n\n  max-width: 200px;\n  position: fixed;\n  z-index: 2000;\n  display: block;\n  position: absolute;\n  left: 0px;\n  top: 0px;\n  height: 100%;\n  background: #e90f92;\n}\n\n.pace.pace-inactive {\n  display: none;\n}"
  },
  {
    "path": "public/frontend/plugins/pace/themes/pink/pace-theme-corner-indicator.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace .pace-activity {\n  display: block;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  right: 0;\n  width: 300px;\n  height: 300px;\n  background: #e90f92;\n  -webkit-transition: -webkit-transform 0.3s;\n  transition: transform 0.3s;\n  -webkit-transform: translateX(100%) translateY(-100%) rotate(45deg);\n  transform: translateX(100%) translateY(-100%) rotate(45deg);\n  pointer-events: none;\n}\n\n.pace.pace-active .pace-activity {\n  -webkit-transform: translateX(50%) translateY(-50%) rotate(45deg);\n  transform: translateX(50%) translateY(-50%) rotate(45deg);\n}\n\n.pace .pace-activity::before,\n.pace .pace-activity::after {\n    position: absolute;\n    bottom: 30px;\n    left: 50%;\n    display: block;\n    border: 5px solid #fff;\n    border-radius: 50%;\n    content: '';\n}\n\n.pace .pace-activity::before {\n    margin-left: -40px;\n    width: 80px;\n    height: 80px;\n    border-right-color: rgba(0, 0, 0, .2);\n    border-left-color: rgba(0, 0, 0, .2);\n    -webkit-animation: pace-rotation 3s linear infinite;\n    animation: pace-rotation 3s linear infinite;\n}\n\n.pace .pace-activity::after {\n    bottom: 50px;\n    margin-left: -20px;\n    width: 40px;\n    height: 40px;\n    border-top-color: rgba(0, 0, 0, .2);\n    border-bottom-color: rgba(0, 0, 0, .2);\n    -webkit-animation: pace-rotation 1s linear infinite;\n    animation: pace-rotation 1s linear infinite;\n}\n\n@-webkit-keyframes pace-rotation {\n  0% { -webkit-transform: rotate(0deg); }\n  100% { -webkit-transform: rotate(359deg); }\n}\n@keyframes pace-rotation {\n  0% { transform: rotate(0deg); }\n  100% { transform: rotate(359deg); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/pink/pace-theme-fill-left.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace .pace-progress {\n  background-color: rgba(233, 15, 146, 0.19999999999999996);\n  position: fixed;\n  z-index: -1;\n  top: 0;\n  left: 0;\n  bottom: 0;\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/pink/pace-theme-flash.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace-inactive {\n  display: none;\n}\n\n.pace .pace-progress {\n  background: #e90f92;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 2px;\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n\n.pace .pace-progress-inner {\n  display: block;\n  position: absolute;\n  right: 0px;\n  width: 100px;\n  height: 100%;\n  box-shadow: 0 0 10px #e90f92, 0 0 5px #e90f92;\n  opacity: 1.0;\n  -webkit-transform: rotate(3deg) translate(0px, -4px);\n  -moz-transform: rotate(3deg) translate(0px, -4px);\n  -ms-transform: rotate(3deg) translate(0px, -4px);\n  -o-transform: rotate(3deg) translate(0px, -4px);\n  transform: rotate(3deg) translate(0px, -4px);\n}\n\n.pace .pace-activity {\n  display: block;\n  position: fixed;\n  z-index: 2000;\n  top: 15px;\n  right: 15px;\n  width: 14px;\n  height: 14px;\n  border: solid 2px transparent;\n  border-top-color: #e90f92;\n  border-left-color: #e90f92;\n  border-radius: 10px;\n  -webkit-animation: pace-spinner 400ms linear infinite;\n  -moz-animation: pace-spinner 400ms linear infinite;\n  -ms-animation: pace-spinner 400ms linear infinite;\n  -o-animation: pace-spinner 400ms linear infinite;\n  animation: pace-spinner 400ms linear infinite;\n}\n\n@-webkit-keyframes pace-spinner {\n  0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@-moz-keyframes pace-spinner {\n  0% { -moz-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -moz-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@-o-keyframes pace-spinner {\n  0% { -o-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -o-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@-ms-keyframes pace-spinner {\n  0% { -ms-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -ms-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@keyframes pace-spinner {\n  0% { transform: rotate(0deg); transform: rotate(0deg); }\n  100% { transform: rotate(360deg); transform: rotate(360deg); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/pink/pace-theme-flat-top.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace .pace-progress {\n  display: block;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 12px;\n  background: #e90f92;\n\n  -webkit-transition: -webkit-transform .3s, width 1s;\n  -moz-transition: width 1s;\n  -o-transform: width 1s;\n  transition: transform .3s, width 1s;\n\n  -webkit-transform: translateY(-50px);\n  transform: translateY(-50px);\n\n  pointer-events: none;\n}\n\n.pace.pace-active .pace-progress {\n  -webkit-transform: translateY(0);\n  transform: translateY(0);\n}"
  },
  {
    "path": "public/frontend/plugins/pace/themes/pink/pace-theme-loading-bar.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  -ms-box-sizing: border-box;\n  -o-box-sizing: border-box;\n  box-sizing: border-box;\n\n  -webkit-border-radius: 10px;\n  -moz-border-radius: 10px;\n  border-radius: 10px;\n\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n\n  z-index: 2000;\n  position: fixed;\n  margin: auto;\n  top: 12px;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  width: 200px;\n  height: 25px;\n  border: 2px solid #e90f92;\n  background-color: #fff;\n}\n\n.pace .pace-progress {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  -ms-box-sizing: border-box;\n  -o-box-sizing: border-box;\n  box-sizing: border-box;\n\n  -webkit-border-radius: 5px;\n  -moz-border-radius: 5px;\n  border-radius: 5px;\n\n  -webkit-background-clip: padding-box;\n  -moz-background-clip: padding;\n  background-clip: padding-box;\n\n  -webkit-transition: width 1s ease-in-out 1s linear;\n  -moz-transition: width 1s ease-in-out 1s linear;\n  -ms-transition: width 1s ease-in-out 1s linear;\n  -o-transition: width 1s ease-in-out 1s linear;\n  transition: width 1s ease-in-out 1s linear;\n\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n\n  max-width: 190px;\n  position: fixed;\n  z-index: 2000;\n  display: block;\n  position: absolute;\n  left: 3px;\n  top: 3px;\n  height: 15px;\n  font-size: 12px;\n  background: #e90f92;\n  color: #e90f92;\n  line-height: 60px;\n  font-weight: bold;\n  font-family:  Helvetica, Arial, \"Lucida Grande\", sans-serif;\n}\n\n.pace .pace-progress:after {\n  content: attr(data-progress-text);\n  display: inline-block;\n}\n\n.pace.pace-inactive {\n  display: none;\n}"
  },
  {
    "path": "public/frontend/plugins/pace/themes/pink/pace-theme-mac-osx.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace-inactive {\n  display: none;\n}\n\n.pace .pace-progress {\n  background-color: #e90f92;\n\n  color: #F345AE;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 12px;\n  overflow: hidden;\n\n  -webkit-border-radius: 0 0 4px 0;\n  -moz-border-radius: 0 0 4px 0;\n  -o-border-radius: 0 0 4px 0;\n  border-radius: 0 0 4px 0;\n\n  -webkit-box-shadow: inset -1px 0 rgba(0, 0, 0, 0.3), inset 0 -1px rgba(0, 0, 0, 0.3), inset 0 2px rgba(255, 255, 255, 0.5), inset 0 6px rgba(255, 255, 255, 0.3);\n  -moz-box-shadow: inset -1px 0 rgba(0, 0, 0, 0.3), inset 0 -1px rgba(0, 0, 0, 0.3), inset 0 2px rgba(255, 255, 255, 0.5), inset 0 6px rgba(255, 255, 255, 0.3);\n  -o-box-shadow: inset -1px 0 rgba(0, 0, 0, 0.3), inset 0 -1px rgba(0, 0, 0, 0.3), inset 0 2px rgba(255, 255, 255, 0.5), inset 0 6px rgba(255, 255, 255, 0.3);\n  box-shadow: inset -1px 0 rgba(0, 0, 0, 0.3), inset 0 -1px rgba(0, 0, 0, 0.3), inset 0 2px rgba(255, 255, 255, 0.5), inset 0 6px rgba(255, 255, 255, 0.3);\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n\n.pace .pace-progress-inner {\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: -28px;\n  bottom: 0;\n\n  background-image: -o-radial-gradient(rgba(164, 10, 103, 0.6) 0%, rgba(233, 15, 146, 0) 100%);\n  background-image: -moz-radial-gradient(rgba(164, 10, 103, 0.6) 0%, rgba(233, 15, 146, 0) 100%);\n  background-image: -webkit-radial-gradient(rgba(164, 10, 103, 0.6) 0%, rgba(233, 15, 146, 0) 100%);\n  background-image: radial-gradient(rgba(164, 10, 103, 0.6) 0%, rgba(233, 15, 146, 0) 100%);\n\n\n  -webkit-background-size: 28px 100%;\n  -moz-background-size: 28px 100%;\n  -o-background-size: 28px 100%;\n  background-size: 28px 100%;\n\n  -webkit-animation: pace-stripe-animation 500ms linear infinite;\n  -moz-animation: pace-stripe-animation 500ms linear infinite;\n  -ms-animation: pace-stripe-animation 500ms linear infinite;\n  -o-animation: pace-stripe-animation 500ms linear infinite;\n  animation: pace-stripe-animation 500ms linear infinite;\n}\n\n@-webkit-keyframes pace-stripe-animation {\n  0% { -webkit-transform: none; transform: none; }\n  100% { -webkit-transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n@-moz-keyframes pace-stripe-animation {\n  0% { -moz-transform: none; transform: none; }\n  100% { -moz-transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n@-o-keyframes pace-stripe-animation {\n  0% { -o-transform: none; transform: none; }\n  100% { -o-transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n@-ms-keyframes pace-stripe-animation {\n  0% { -ms-transform: none; transform: none; }\n  100% { -ms-transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n@keyframes pace-stripe-animation {\n  0% { transform: none; transform: none; }\n  100% { transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/pink/pace-theme-minimal.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace .pace-progress {\n  background: #e90f92;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 2px;\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n\n.pace-inactive {\n  display: none;\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/purple/pace-theme-barber-shop.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace-inactive {\n  display: none;\n}\n\n.pace .pace-progress {\n  background-color: #7c60e0;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 12px;\n  overflow: hidden;\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n\n.pace .pace-progress-inner {\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: -32px;\n  bottom: 0;\n\n  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.2)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.2)), color-stop(0.75, rgba(255, 255, 255, 0.2)), color-stop(0.75, transparent), to(transparent));\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);\n  background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);\n  -webkit-background-size: 32px 32px;\n  -moz-background-size: 32px 32px;\n  -o-background-size: 32px 32px;\n  background-size: 32px 32px;\n\n  -webkit-animation: pace-stripe-animation 500ms linear infinite;\n  -moz-animation: pace-stripe-animation 500ms linear infinite;\n  -ms-animation: pace-stripe-animation 500ms linear infinite;\n  -o-animation: pace-stripe-animation 500ms linear infinite;\n  animation: pace-stripe-animation 500ms linear infinite;\n}\n\n@-webkit-keyframes pace-stripe-animation {\n  0% { -webkit-transform: none; transform: none; }\n  100% { -webkit-transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n@-moz-keyframes pace-stripe-animation {\n  0% { -moz-transform: none; transform: none; }\n  100% { -moz-transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n@-o-keyframes pace-stripe-animation {\n  0% { -o-transform: none; transform: none; }\n  100% { -o-transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n@-ms-keyframes pace-stripe-animation {\n  0% { -ms-transform: none; transform: none; }\n  100% { -ms-transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n@keyframes pace-stripe-animation {\n  0% { transform: none; transform: none; }\n  100% { transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/purple/pace-theme-big-counter.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace.pace-inactive .pace-progress {\n  display: none;\n}\n\n.pace .pace-progress {\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  right: 0;\n  height: 5rem;\n  width: 5rem;\n}\n\n.pace .pace-progress:after {\n  display: block;\n  position: absolute;\n  top: 0;\n  right: .5rem;\n  content: attr(data-progress-text);\n  font-family: \"Helvetica Neue\", sans-serif;\n  font-weight: 100;\n  font-size: 5rem;\n  line-height: 1;\n  text-align: right;\n  color: rgba(124, 96, 224, 0.19999999999999996);\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/purple/pace-theme-bounce.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  width: 140px;\n  height: 300px;\n  position: fixed;\n  top: -90px;\n  right: -20px;\n  z-index: 2000;\n  -webkit-transform: scale(0);\n  -moz-transform: scale(0);\n  -ms-transform: scale(0);\n  -o-transform: scale(0);\n  transform: scale(0);\n  opacity: 0;\n  -webkit-transition: all 2s linear 0s;\n  -moz-transition: all 2s linear 0s;\n  transition: all 2s linear 0s;\n}\n\n.pace.pace-active {\n  -webkit-transform: scale(.25);\n  -moz-transform: scale(.25);\n  -ms-transform: scale(.25);\n  -o-transform: scale(.25);\n  transform: scale(.25);\n  opacity: 1;\n}\n\n.pace .pace-activity {\n  width: 140px;\n  height: 140px;\n  border-radius: 70px;\n  background: #7c60e0;\n  position: absolute;\n  top: 0;\n  z-index: 1911;\n  -webkit-animation: pace-bounce 1s infinite;\n  -moz-animation: pace-bounce 1s infinite;\n  -o-animation: pace-bounce 1s infinite;\n  -ms-animation: pace-bounce 1s infinite;\n  animation: pace-bounce 1s infinite;\n}\n\n.pace .pace-progress {\n  position: absolute;\n  display: block;\n  left: 50%;\n  bottom: 0;\n  z-index: 1910;\n  margin-left: -30px;\n  width: 60px;\n  height: 75px;\n  background: rgba(20, 20, 20, .1);\n  box-shadow: 0 0 20px 35px rgba(20, 20, 20, .1);\n  border-radius: 30px / 40px;\n  -webkit-transform: scaleY(.3);\n  -moz-transform: scaleY(.3);\n  -ms-transform: scaleY(.3);\n  -o-transform: scaleY(.3);\n  transform: scaleY(.3);\n  -webkit-animation: pace-compress .5s infinite alternate;\n  -moz-animation: pace-compress .5s infinite alternate;\n  -o-animation: pace-compress .5s infinite alternate;\n  -ms-animation: pace-compress .5s infinite alternate;\n  animation: pace-compress .5s infinite alternate;\n}\n\n@-webkit-keyframes pace-bounce {\n  0% {\n    top: 0;\n    -webkit-animation-timing-function: ease-in;\n  }\n  40% {}\n  50% {\n    top: 140px;\n    height: 140px;\n    -webkit-animation-timing-function: ease-out;\n  }\n  55% {\n    top: 160px;\n    height: 120px;\n    border-radius: 70px / 60px;\n    -webkit-animation-timing-function: ease-in;\n  }\n  65% {\n    top: 120px;\n    height: 140px;\n    border-radius: 70px;\n    -webkit-animation-timing-function: ease-out;\n  }\n  95% {\n    top: 0;\n    -webkit-animation-timing-function: ease-in;\n  }\n  100% {\n    top: 0;\n    -webkit-animation-timing-function: ease-in;\n  }\n}\n\n@-moz-keyframes pace-bounce {\n  0% {\n    top: 0;\n    -moz-animation-timing-function: ease-in;\n  }\n  40% {}\n  50% {\n    top: 140px;\n    height: 140px;\n    -moz-animation-timing-function: ease-out;\n  }\n  55% {\n    top: 160px;\n    height: 120px;\n    border-radius: 70px / 60px;\n    -moz-animation-timing-function: ease-in;\n  }\n  65% {\n    top: 120px;\n    height: 140px;\n    border-radius: 70px;\n    -moz-animation-timing-function: ease-out;}\n  95% {\n    top: 0;\n    -moz-animation-timing-function: ease-in;\n  }\n  100% {top: 0;\n    -moz-animation-timing-function: ease-in;\n  }\n}\n\n@keyframes pace-bounce {\n  0% {\n    top: 0;\n    animation-timing-function: ease-in;\n  }\n  50% {\n    top: 140px;\n    height: 140px;\n    animation-timing-function: ease-out;\n  }\n  55% {\n    top: 160px;\n    height: 120px;\n    border-radius: 70px / 60px;\n    animation-timing-function: ease-in;\n  }\n  65% {\n    top: 120px;\n    height: 140px;\n    border-radius: 70px;\n    animation-timing-function: ease-out;\n  }\n  95% {\n    top: 0;\n    animation-timing-function: ease-in;\n  }\n  100% {\n    top: 0;\n    animation-timing-function: ease-in;\n  }\n}\n\n@-webkit-keyframes pace-compress {\n  0% {\n    bottom: 0;\n    margin-left: -30px;\n    width: 60px;\n    height: 75px;\n    background: rgba(20, 20, 20, .1);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .1);\n    border-radius: 30px / 40px;\n    -webkit-animation-timing-function: ease-in;\n  }\n  100% {\n    bottom: 30px;\n    margin-left: -10px;\n    width: 20px;\n    height: 5px;\n    background: rgba(20, 20, 20, .3);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .3);\n    border-radius: 20px / 20px;\n    -webkit-animation-timing-function: ease-out;\n  }\n}\n\n@-moz-keyframes pace-compress {\n  0% {\n    bottom: 0;\n    margin-left: -30px;\n    width: 60px;\n    height: 75px;\n    background: rgba(20, 20, 20, .1);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .1);\n    border-radius: 30px / 40px;\n    -moz-animation-timing-function: ease-in;\n  }\n  100% {\n    bottom: 30px;\n    margin-left: -10px;\n    width: 20px;\n    height: 5px;\n    background: rgba(20, 20, 20, .3);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .3);\n    border-radius: 20px / 20px;\n    -moz-animation-timing-function: ease-out;\n  }\n}\n\n@keyframes pace-compress {\n  0% {\n    bottom: 0;\n    margin-left: -30px;\n    width: 60px;\n    height: 75px;\n    background: rgba(20, 20, 20, .1);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .1);\n    border-radius: 30px / 40px;\n    animation-timing-function: ease-in;\n  }\n  100% {\n    bottom: 30px;\n    margin-left: -10px;\n    width: 20px;\n    height: 5px;\n    background: rgba(20, 20, 20, .3);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .3);\n    border-radius: 20px / 20px;\n    animation-timing-function: ease-out;\n  }\n}"
  },
  {
    "path": "public/frontend/plugins/pace/themes/purple/pace-theme-center-atom.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace.pace-inactive {\n  display: none;\n}\n\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n\n  z-index: 2000;\n  position: fixed;\n  height: 60px;\n  width: 100px;\n  margin: auto;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n}\n\n.pace .pace-progress {\n  z-index: 2000;\n  position: absolute;\n  height: 60px;\n  width: 100px !important;\n}\n\n.pace .pace-progress:before {\n  content: attr(data-progress-text);\n  text-align: center;\n  color: #fff;\n  background: #7c60e0;\n  border-radius: 50%;\n  font-family: \"Helvetica Neue\", sans-serif;\n  font-size: 14px;\n  font-weight: 100;\n  line-height: 1;\n  padding: 20% 0 7px;\n  width: 50%;\n  height: 40%;\n  margin: 10px 0 0 30px;\n  display: block;\n  z-index: 999;\n  position: absolute;\n}\n\n.pace .pace-progress:after {\n  border-radius: 50%;\n  border: 5px solid #7c60e0;\n  content: ' ';\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 60px;\n  width: 100px;\n\n  -webkit-transform: rotate(90deg);\n     -moz-transform: rotate(90deg);\n       -o-transform: rotate(90deg);\n          transform: rotate(90deg);\n  -webkit-animation: spin-3 2s linear infinite;\n     -moz-animation: spin-3 2s linear infinite;\n       -o-animation: spin-3 2s linear infinite;\n          animation: spin-3 2s linear infinite;\n}\n\n.pace .pace-activity {\n  font-size: 15px;\n  line-height: 1;\n  z-index: 2000;\n  position: absolute;\n  height: 60px;\n  width: 100px;\n\n  display: block;\n}\n\n.pace .pace-activity:before {\n  border-radius: 50%;\n  border: 5px solid #7c60e0;\n  content: ' ';\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 60px;\n  width: 100px;\n\n  -webkit-animation: spin-1 2s linear infinite;\n     -moz-animation: spin-1 2s linear infinite;\n       -o-animation: spin-1 2s linear infinite;\n          animation: spin-1 2s linear infinite;\n}\n\n.pace .pace-activity:after{\n  border-radius: 50%;\n  border: 5px solid #7c60e0;\n  content: ' ';\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 60px;\n  width: 100px;\n\n  -webkit-transform: rotate(45deg);\n     -moz-transform: rotate(45deg);\n       -o-transform: rotate(45deg);\n          transform: rotate(45deg);\n  -webkit-animation: spin-2 2s linear infinite;\n     -moz-animation: spin-2 2s linear infinite;\n       -o-animation: spin-2 2s linear infinite;\n          animation: spin-2 2s linear infinite;\n}\n\n@-webkit-keyframes spin-1 {\n  0%  { -webkit-transform: rotate(0deg); }\n  100%{ -webkit-transform: rotate(359deg);}\n}\n@-moz-keyframes spin-1 {\n  0%  { -moz-transform: rotate(0deg); }\n  100%{ -moz-transform: rotate(359deg);}\n}\n@-o-keyframes spin-1 {\n  0%  { -o-transform: rotate(0deg); }\n  100%{ -o-transform: rotate(359deg);}\n}\n@keyframes spin-1 {\n  0%  { transform: rotate(0deg); }\n  100%{ transform: rotate(359deg);}\n}\n\n@-webkit-keyframes spin-2 {\n  0%  { -webkit-transform: rotate(59.8deg); }\n  100%{ -webkit-transform: rotate(418.8deg);}\n}\n@-moz-keyframes spin-2 {\n  0%  { -moz-transform: rotate(59.8deg); }\n  100%{ -moz-transform: rotate(418.8deg);}\n}\n@-o-keyframes spin-2 {\n  0%  { -o-transform: rotate(59.8deg); }\n  100%{ -o-transform: rotate(418.8deg);}\n}\n@keyframes spin-2 {\n  0%  { transform: rotate(59.8deg); }\n  100%{ transform: rotate(418.8deg);}\n}\n\n@-webkit-keyframes spin-3 {\n  0%  { -webkit-transform: rotate(119.6deg); }\n  100%{ -webkit-transform: rotate(478.6deg);}\n}\n@-moz-keyframes spin-3 {\n  0%  { -moz-transform: rotate(119.6deg); }\n  100%{ -moz-transform: rotate(478.6deg);}\n}\n@-o-keyframes spin-3 {\n  0%  { -o-transform: rotate(119.6deg); }\n  100%{ -o-transform: rotate(478.6deg);}\n}\n@keyframes spin-3 {\n  0%  { transform: rotate(119.6deg); }\n  100%{ transform: rotate(478.6deg);}\n}"
  },
  {
    "path": "public/frontend/plugins/pace/themes/purple/pace-theme-center-circle.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n\n  -webkit-perspective: 12rem;\n  -moz-perspective: 12rem;\n  -ms-perspective: 12rem;\n  -o-perspective: 12rem;\n  perspective: 12rem;\n\n  z-index: 2000;\n  position: fixed;\n  height: 6rem;\n  width: 6rem;\n  margin: auto;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n}\n\n.pace.pace-inactive .pace-progress {\n  display: none;\n}\n\n.pace .pace-progress {\n  position: fixed;\n  z-index: 2000;\n  display: block;\n  position: absolute;\n  left: 0;\n  top: 0;\n  height: 6rem;\n  width: 6rem !important;\n  line-height: 6rem;\n  font-size: 2rem;\n  border-radius: 50%;\n  background: rgba(124, 96, 224, 0.8);\n  color: #fff;\n  font-family: \"Helvetica Neue\", sans-serif;\n  font-weight: 100;\n  text-align: center;\n\n  -webkit-animation: pace-3d-spinner linear infinite 2s;\n  -moz-animation: pace-3d-spinner linear infinite 2s;\n  -ms-animation: pace-3d-spinner linear infinite 2s;\n  -o-animation: pace-3d-spinner linear infinite 2s;\n  animation: pace-3d-spinner linear infinite 2s;\n\n  -webkit-transform-style: preserve-3d;\n  -moz-transform-style: preserve-3d;\n  -ms-transform-style: preserve-3d;\n  -o-transform-style: preserve-3d;\n  transform-style: preserve-3d;\n}\n\n.pace .pace-progress:after {\n  content: attr(data-progress-text);\n  display: block;\n}\n\n@-webkit-keyframes pace-3d-spinner {\n  from {\n    -webkit-transform: rotateY(0deg);\n  }\n  to {\n    -webkit-transform: rotateY(360deg);\n  }\n}\n\n@-moz-keyframes pace-3d-spinner {\n  from {\n    -moz-transform: rotateY(0deg);\n  }\n  to {\n    -moz-transform: rotateY(360deg);\n  }\n}\n\n@-ms-keyframes pace-3d-spinner {\n  from {\n    -ms-transform: rotateY(0deg);\n  }\n  to {\n    -ms-transform: rotateY(360deg);\n  }\n}\n\n@-o-keyframes pace-3d-spinner {\n  from {\n    -o-transform: rotateY(0deg);\n  }\n  to {\n    -o-transform: rotateY(360deg);\n  }\n}\n\n@keyframes pace-3d-spinner {\n  from {\n    transform: rotateY(0deg);\n  }\n  to {\n    transform: rotateY(360deg);\n  }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/purple/pace-theme-center-radar.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n\n  z-index: 2000;\n  position: fixed;\n  height: 90px;\n  width: 90px;\n  margin: auto;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n}\n\n.pace.pace-inactive .pace-activity {\n  display: none;\n}\n\n.pace .pace-activity {\n  position: fixed;\n  z-index: 2000;\n  display: block;\n  position: absolute;\n  left: -30px;\n  top: -30px;\n  height: 90px;\n  width: 90px;\n  display: block;\n  border-width: 30px;\n  border-style: double;\n  border-color: #7c60e0 transparent transparent;\n  border-radius: 50%;\n\n  -webkit-animation: spin 1s linear infinite;\n     -moz-animation: spin 1s linear infinite;\n       -o-animation: spin 1s linear infinite;\n          animation: spin 1s linear infinite;\n}\n\n.pace .pace-activity:before {\n  content: ' ';\n  position: absolute;\n  top: 10px;\n  left: 10px;\n  height: 50px;\n  width: 50px;\n  display: block;\n  border-width: 10px;\n  border-style: solid;\n  border-color: #7c60e0 transparent transparent;\n  border-radius: 50%;\n}\n\n\n@-webkit-keyframes spin {\n  100% { -webkit-transform: rotate(359deg); }\n}\n\n@-moz-keyframes spin {\n  100% { -moz-transform: rotate(359deg); }\n}\n\n@-o-keyframes spin {\n  100% { -moz-transform: rotate(359deg); }\n}\n\n@keyframes spin {\n  100% {  transform: rotate(359deg); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/purple/pace-theme-center-simple.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n\n  z-index: 2000;\n  position: fixed;\n  margin: auto;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  height: 5px;\n  width: 200px;\n  background: #fff;\n  border: 1px solid #7c60e0;\n}\n\n.pace .pace-progress {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  -ms-box-sizing: border-box;\n  -o-box-sizing: border-box;\n  box-sizing: border-box;\n\n  -webkit-transition: width 1s ease-in-out 1s linear;\n  -moz-transition: width 1s ease-in-out 1s linear;\n  -ms-transition: width 1s ease-in-out 1s linear;\n  -o-transition: width 1s ease-in-out 1s linear;\n  transition: width 1s ease-in-out 1s linear;\n\n  -webkit-transform: translate3d(0, 0, 0);\n  -moz-transform: translate3d(0, 0, 0);\n  -ms-transform: translate3d(0, 0, 0);\n  -o-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n\n  max-width: 200px;\n  position: fixed;\n  z-index: 2000;\n  display: block;\n  position: absolute;\n  left: 0px;\n  top: 0px;\n  height: 100%;\n  background: #7c60e0;\n}\n\n.pace.pace-inactive {\n  display: none;\n}"
  },
  {
    "path": "public/frontend/plugins/pace/themes/purple/pace-theme-corner-indicator.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace .pace-activity {\n  display: block;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  right: 0;\n  width: 300px;\n  height: 300px;\n  background: #7c60e0;\n  -webkit-transition: -webkit-transform 0.3s;\n  transition: transform 0.3s;\n  -webkit-transform: translateX(100%) translateY(-100%) rotate(45deg);\n  transform: translateX(100%) translateY(-100%) rotate(45deg);\n  pointer-events: none;\n}\n\n.pace.pace-active .pace-activity {\n  -webkit-transform: translateX(50%) translateY(-50%) rotate(45deg);\n  transform: translateX(50%) translateY(-50%) rotate(45deg);\n}\n\n.pace .pace-activity::before,\n.pace .pace-activity::after {\n    position: absolute;\n    bottom: 30px;\n    left: 50%;\n    display: block;\n    border: 5px solid #fff;\n    border-radius: 50%;\n    content: '';\n}\n\n.pace .pace-activity::before {\n    margin-left: -40px;\n    width: 80px;\n    height: 80px;\n    border-right-color: rgba(0, 0, 0, .2);\n    border-left-color: rgba(0, 0, 0, .2);\n    -webkit-animation: pace-rotation 3s linear infinite;\n    animation: pace-rotation 3s linear infinite;\n}\n\n.pace .pace-activity::after {\n    bottom: 50px;\n    margin-left: -20px;\n    width: 40px;\n    height: 40px;\n    border-top-color: rgba(0, 0, 0, .2);\n    border-bottom-color: rgba(0, 0, 0, .2);\n    -webkit-animation: pace-rotation 1s linear infinite;\n    animation: pace-rotation 1s linear infinite;\n}\n\n@-webkit-keyframes pace-rotation {\n  0% { -webkit-transform: rotate(0deg); }\n  100% { -webkit-transform: rotate(359deg); }\n}\n@keyframes pace-rotation {\n  0% { transform: rotate(0deg); }\n  100% { transform: rotate(359deg); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/purple/pace-theme-fill-left.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace .pace-progress {\n  background-color: rgba(124, 96, 224, 0.19999999999999996);\n  position: fixed;\n  z-index: -1;\n  top: 0;\n  left: 0;\n  bottom: 0;\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/purple/pace-theme-flash.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace-inactive {\n  display: none;\n}\n\n.pace .pace-progress {\n  background: #7c60e0;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 2px;\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n\n.pace .pace-progress-inner {\n  display: block;\n  position: absolute;\n  right: 0px;\n  width: 100px;\n  height: 100%;\n  box-shadow: 0 0 10px #7c60e0, 0 0 5px #7c60e0;\n  opacity: 1.0;\n  -webkit-transform: rotate(3deg) translate(0px, -4px);\n  -moz-transform: rotate(3deg) translate(0px, -4px);\n  -ms-transform: rotate(3deg) translate(0px, -4px);\n  -o-transform: rotate(3deg) translate(0px, -4px);\n  transform: rotate(3deg) translate(0px, -4px);\n}\n\n.pace .pace-activity {\n  display: block;\n  position: fixed;\n  z-index: 2000;\n  top: 15px;\n  right: 15px;\n  width: 14px;\n  height: 14px;\n  border: solid 2px transparent;\n  border-top-color: #7c60e0;\n  border-left-color: #7c60e0;\n  border-radius: 10px;\n  -webkit-animation: pace-spinner 400ms linear infinite;\n  -moz-animation: pace-spinner 400ms linear infinite;\n  -ms-animation: pace-spinner 400ms linear infinite;\n  -o-animation: pace-spinner 400ms linear infinite;\n  animation: pace-spinner 400ms linear infinite;\n}\n\n@-webkit-keyframes pace-spinner {\n  0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@-moz-keyframes pace-spinner {\n  0% { -moz-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -moz-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@-o-keyframes pace-spinner {\n  0% { -o-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -o-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@-ms-keyframes pace-spinner {\n  0% { -ms-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -ms-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@keyframes pace-spinner {\n  0% { transform: rotate(0deg); transform: rotate(0deg); }\n  100% { transform: rotate(360deg); transform: rotate(360deg); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/purple/pace-theme-flat-top.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace .pace-progress {\n  display: block;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 12px;\n  background: #7c60e0;\n\n  -webkit-transition: -webkit-transform .3s, width 1s;\n  -moz-transition: width 1s;\n  -o-transform: width 1s;\n  transition: transform .3s, width 1s;\n\n  -webkit-transform: translateY(-50px);\n  transform: translateY(-50px);\n\n  pointer-events: none;\n}\n\n.pace.pace-active .pace-progress {\n  -webkit-transform: translateY(0);\n  transform: translateY(0);\n}"
  },
  {
    "path": "public/frontend/plugins/pace/themes/purple/pace-theme-loading-bar.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  -ms-box-sizing: border-box;\n  -o-box-sizing: border-box;\n  box-sizing: border-box;\n\n  -webkit-border-radius: 10px;\n  -moz-border-radius: 10px;\n  border-radius: 10px;\n\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n\n  z-index: 2000;\n  position: fixed;\n  margin: auto;\n  top: 12px;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  width: 200px;\n  height: 25px;\n  border: 2px solid #7c60e0;\n  background-color: #fff;\n}\n\n.pace .pace-progress {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  -ms-box-sizing: border-box;\n  -o-box-sizing: border-box;\n  box-sizing: border-box;\n\n  -webkit-border-radius: 5px;\n  -moz-border-radius: 5px;\n  border-radius: 5px;\n\n  -webkit-background-clip: padding-box;\n  -moz-background-clip: padding;\n  background-clip: padding-box;\n\n  -webkit-transition: width 1s ease-in-out 1s linear;\n  -moz-transition: width 1s ease-in-out 1s linear;\n  -ms-transition: width 1s ease-in-out 1s linear;\n  -o-transition: width 1s ease-in-out 1s linear;\n  transition: width 1s ease-in-out 1s linear;\n\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n\n  max-width: 190px;\n  position: fixed;\n  z-index: 2000;\n  display: block;\n  position: absolute;\n  left: 3px;\n  top: 3px;\n  height: 15px;\n  font-size: 12px;\n  background: #7c60e0;\n  color: #7c60e0;\n  line-height: 60px;\n  font-weight: bold;\n  font-family:  Helvetica, Arial, \"Lucida Grande\", sans-serif;\n}\n\n.pace .pace-progress:after {\n  content: attr(data-progress-text);\n  display: inline-block;\n}\n\n.pace.pace-inactive {\n  display: none;\n}"
  },
  {
    "path": "public/frontend/plugins/pace/themes/purple/pace-theme-mac-osx.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace-inactive {\n  display: none;\n}\n\n.pace .pace-progress {\n  background-color: #7c60e0;\n\n  color: #B4A5ED;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 12px;\n  overflow: hidden;\n\n  -webkit-border-radius: 0 0 4px 0;\n  -moz-border-radius: 0 0 4px 0;\n  -o-border-radius: 0 0 4px 0;\n  border-radius: 0 0 4px 0;\n\n  -webkit-box-shadow: inset -1px 0 rgba(0, 0, 0, 0.3), inset 0 -1px rgba(0, 0, 0, 0.3), inset 0 2px rgba(255, 255, 255, 0.5), inset 0 6px rgba(255, 255, 255, 0.3);\n  -moz-box-shadow: inset -1px 0 rgba(0, 0, 0, 0.3), inset 0 -1px rgba(0, 0, 0, 0.3), inset 0 2px rgba(255, 255, 255, 0.5), inset 0 6px rgba(255, 255, 255, 0.3);\n  -o-box-shadow: inset -1px 0 rgba(0, 0, 0, 0.3), inset 0 -1px rgba(0, 0, 0, 0.3), inset 0 2px rgba(255, 255, 255, 0.5), inset 0 6px rgba(255, 255, 255, 0.3);\n  box-shadow: inset -1px 0 rgba(0, 0, 0, 0.3), inset 0 -1px rgba(0, 0, 0, 0.3), inset 0 2px rgba(255, 255, 255, 0.5), inset 0 6px rgba(255, 255, 255, 0.3);\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n\n.pace .pace-progress-inner {\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: -28px;\n  bottom: 0;\n\n  background-image: -o-radial-gradient(rgba(70, 37, 188, 0.6) 0%, rgba(124, 96, 224, 0) 100%);\n  background-image: -moz-radial-gradient(rgba(70, 37, 188, 0.6) 0%, rgba(124, 96, 224, 0) 100%);\n  background-image: -webkit-radial-gradient(rgba(70, 37, 188, 0.6) 0%, rgba(124, 96, 224, 0) 100%);\n  background-image: radial-gradient(rgba(70, 37, 188, 0.6) 0%, rgba(124, 96, 224, 0) 100%);\n\n\n  -webkit-background-size: 28px 100%;\n  -moz-background-size: 28px 100%;\n  -o-background-size: 28px 100%;\n  background-size: 28px 100%;\n\n  -webkit-animation: pace-stripe-animation 500ms linear infinite;\n  -moz-animation: pace-stripe-animation 500ms linear infinite;\n  -ms-animation: pace-stripe-animation 500ms linear infinite;\n  -o-animation: pace-stripe-animation 500ms linear infinite;\n  animation: pace-stripe-animation 500ms linear infinite;\n}\n\n@-webkit-keyframes pace-stripe-animation {\n  0% { -webkit-transform: none; transform: none; }\n  100% { -webkit-transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n@-moz-keyframes pace-stripe-animation {\n  0% { -moz-transform: none; transform: none; }\n  100% { -moz-transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n@-o-keyframes pace-stripe-animation {\n  0% { -o-transform: none; transform: none; }\n  100% { -o-transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n@-ms-keyframes pace-stripe-animation {\n  0% { -ms-transform: none; transform: none; }\n  100% { -ms-transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n@keyframes pace-stripe-animation {\n  0% { transform: none; transform: none; }\n  100% { transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/purple/pace-theme-minimal.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace .pace-progress {\n  background: #7c60e0;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 2px;\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n\n.pace-inactive {\n  display: none;\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/red/pace-theme-barber-shop.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace-inactive {\n  display: none;\n}\n\n.pace .pace-progress {\n  background-color: #ee3148;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 12px;\n  overflow: hidden;\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n\n.pace .pace-progress-inner {\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: -32px;\n  bottom: 0;\n\n  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.2)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.2)), color-stop(0.75, rgba(255, 255, 255, 0.2)), color-stop(0.75, transparent), to(transparent));\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);\n  background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);\n  -webkit-background-size: 32px 32px;\n  -moz-background-size: 32px 32px;\n  -o-background-size: 32px 32px;\n  background-size: 32px 32px;\n\n  -webkit-animation: pace-stripe-animation 500ms linear infinite;\n  -moz-animation: pace-stripe-animation 500ms linear infinite;\n  -ms-animation: pace-stripe-animation 500ms linear infinite;\n  -o-animation: pace-stripe-animation 500ms linear infinite;\n  animation: pace-stripe-animation 500ms linear infinite;\n}\n\n@-webkit-keyframes pace-stripe-animation {\n  0% { -webkit-transform: none; transform: none; }\n  100% { -webkit-transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n@-moz-keyframes pace-stripe-animation {\n  0% { -moz-transform: none; transform: none; }\n  100% { -moz-transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n@-o-keyframes pace-stripe-animation {\n  0% { -o-transform: none; transform: none; }\n  100% { -o-transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n@-ms-keyframes pace-stripe-animation {\n  0% { -ms-transform: none; transform: none; }\n  100% { -ms-transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n@keyframes pace-stripe-animation {\n  0% { transform: none; transform: none; }\n  100% { transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/red/pace-theme-big-counter.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace.pace-inactive .pace-progress {\n  display: none;\n}\n\n.pace .pace-progress {\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  right: 0;\n  height: 5rem;\n  width: 5rem;\n}\n\n.pace .pace-progress:after {\n  display: block;\n  position: absolute;\n  top: 0;\n  right: .5rem;\n  content: attr(data-progress-text);\n  font-family: \"Helvetica Neue\", sans-serif;\n  font-weight: 100;\n  font-size: 5rem;\n  line-height: 1;\n  text-align: right;\n  color: rgba(238, 49, 72, 0.19999999999999996);\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/red/pace-theme-bounce.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  width: 140px;\n  height: 300px;\n  position: fixed;\n  top: -90px;\n  right: -20px;\n  z-index: 2000;\n  -webkit-transform: scale(0);\n  -moz-transform: scale(0);\n  -ms-transform: scale(0);\n  -o-transform: scale(0);\n  transform: scale(0);\n  opacity: 0;\n  -webkit-transition: all 2s linear 0s;\n  -moz-transition: all 2s linear 0s;\n  transition: all 2s linear 0s;\n}\n\n.pace.pace-active {\n  -webkit-transform: scale(.25);\n  -moz-transform: scale(.25);\n  -ms-transform: scale(.25);\n  -o-transform: scale(.25);\n  transform: scale(.25);\n  opacity: 1;\n}\n\n.pace .pace-activity {\n  width: 140px;\n  height: 140px;\n  border-radius: 70px;\n  background: #ee3148;\n  position: absolute;\n  top: 0;\n  z-index: 1911;\n  -webkit-animation: pace-bounce 1s infinite;\n  -moz-animation: pace-bounce 1s infinite;\n  -o-animation: pace-bounce 1s infinite;\n  -ms-animation: pace-bounce 1s infinite;\n  animation: pace-bounce 1s infinite;\n}\n\n.pace .pace-progress {\n  position: absolute;\n  display: block;\n  left: 50%;\n  bottom: 0;\n  z-index: 1910;\n  margin-left: -30px;\n  width: 60px;\n  height: 75px;\n  background: rgba(20, 20, 20, .1);\n  box-shadow: 0 0 20px 35px rgba(20, 20, 20, .1);\n  border-radius: 30px / 40px;\n  -webkit-transform: scaleY(.3);\n  -moz-transform: scaleY(.3);\n  -ms-transform: scaleY(.3);\n  -o-transform: scaleY(.3);\n  transform: scaleY(.3);\n  -webkit-animation: pace-compress .5s infinite alternate;\n  -moz-animation: pace-compress .5s infinite alternate;\n  -o-animation: pace-compress .5s infinite alternate;\n  -ms-animation: pace-compress .5s infinite alternate;\n  animation: pace-compress .5s infinite alternate;\n}\n\n@-webkit-keyframes pace-bounce {\n  0% {\n    top: 0;\n    -webkit-animation-timing-function: ease-in;\n  }\n  40% {}\n  50% {\n    top: 140px;\n    height: 140px;\n    -webkit-animation-timing-function: ease-out;\n  }\n  55% {\n    top: 160px;\n    height: 120px;\n    border-radius: 70px / 60px;\n    -webkit-animation-timing-function: ease-in;\n  }\n  65% {\n    top: 120px;\n    height: 140px;\n    border-radius: 70px;\n    -webkit-animation-timing-function: ease-out;\n  }\n  95% {\n    top: 0;\n    -webkit-animation-timing-function: ease-in;\n  }\n  100% {\n    top: 0;\n    -webkit-animation-timing-function: ease-in;\n  }\n}\n\n@-moz-keyframes pace-bounce {\n  0% {\n    top: 0;\n    -moz-animation-timing-function: ease-in;\n  }\n  40% {}\n  50% {\n    top: 140px;\n    height: 140px;\n    -moz-animation-timing-function: ease-out;\n  }\n  55% {\n    top: 160px;\n    height: 120px;\n    border-radius: 70px / 60px;\n    -moz-animation-timing-function: ease-in;\n  }\n  65% {\n    top: 120px;\n    height: 140px;\n    border-radius: 70px;\n    -moz-animation-timing-function: ease-out;}\n  95% {\n    top: 0;\n    -moz-animation-timing-function: ease-in;\n  }\n  100% {top: 0;\n    -moz-animation-timing-function: ease-in;\n  }\n}\n\n@keyframes pace-bounce {\n  0% {\n    top: 0;\n    animation-timing-function: ease-in;\n  }\n  50% {\n    top: 140px;\n    height: 140px;\n    animation-timing-function: ease-out;\n  }\n  55% {\n    top: 160px;\n    height: 120px;\n    border-radius: 70px / 60px;\n    animation-timing-function: ease-in;\n  }\n  65% {\n    top: 120px;\n    height: 140px;\n    border-radius: 70px;\n    animation-timing-function: ease-out;\n  }\n  95% {\n    top: 0;\n    animation-timing-function: ease-in;\n  }\n  100% {\n    top: 0;\n    animation-timing-function: ease-in;\n  }\n}\n\n@-webkit-keyframes pace-compress {\n  0% {\n    bottom: 0;\n    margin-left: -30px;\n    width: 60px;\n    height: 75px;\n    background: rgba(20, 20, 20, .1);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .1);\n    border-radius: 30px / 40px;\n    -webkit-animation-timing-function: ease-in;\n  }\n  100% {\n    bottom: 30px;\n    margin-left: -10px;\n    width: 20px;\n    height: 5px;\n    background: rgba(20, 20, 20, .3);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .3);\n    border-radius: 20px / 20px;\n    -webkit-animation-timing-function: ease-out;\n  }\n}\n\n@-moz-keyframes pace-compress {\n  0% {\n    bottom: 0;\n    margin-left: -30px;\n    width: 60px;\n    height: 75px;\n    background: rgba(20, 20, 20, .1);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .1);\n    border-radius: 30px / 40px;\n    -moz-animation-timing-function: ease-in;\n  }\n  100% {\n    bottom: 30px;\n    margin-left: -10px;\n    width: 20px;\n    height: 5px;\n    background: rgba(20, 20, 20, .3);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .3);\n    border-radius: 20px / 20px;\n    -moz-animation-timing-function: ease-out;\n  }\n}\n\n@keyframes pace-compress {\n  0% {\n    bottom: 0;\n    margin-left: -30px;\n    width: 60px;\n    height: 75px;\n    background: rgba(20, 20, 20, .1);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .1);\n    border-radius: 30px / 40px;\n    animation-timing-function: ease-in;\n  }\n  100% {\n    bottom: 30px;\n    margin-left: -10px;\n    width: 20px;\n    height: 5px;\n    background: rgba(20, 20, 20, .3);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .3);\n    border-radius: 20px / 20px;\n    animation-timing-function: ease-out;\n  }\n}"
  },
  {
    "path": "public/frontend/plugins/pace/themes/red/pace-theme-center-atom.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace.pace-inactive {\n  display: none;\n}\n\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n\n  z-index: 2000;\n  position: fixed;\n  height: 60px;\n  width: 100px;\n  margin: auto;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n}\n\n.pace .pace-progress {\n  z-index: 2000;\n  position: absolute;\n  height: 60px;\n  width: 100px !important;\n}\n\n.pace .pace-progress:before {\n  content: attr(data-progress-text);\n  text-align: center;\n  color: #fff;\n  background: #ee3148;\n  border-radius: 50%;\n  font-family: \"Helvetica Neue\", sans-serif;\n  font-size: 14px;\n  font-weight: 100;\n  line-height: 1;\n  padding: 20% 0 7px;\n  width: 50%;\n  height: 40%;\n  margin: 10px 0 0 30px;\n  display: block;\n  z-index: 999;\n  position: absolute;\n}\n\n.pace .pace-progress:after {\n  border-radius: 50%;\n  border: 5px solid #ee3148;\n  content: ' ';\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 60px;\n  width: 100px;\n\n  -webkit-transform: rotate(90deg);\n     -moz-transform: rotate(90deg);\n       -o-transform: rotate(90deg);\n          transform: rotate(90deg);\n  -webkit-animation: spin-3 2s linear infinite;\n     -moz-animation: spin-3 2s linear infinite;\n       -o-animation: spin-3 2s linear infinite;\n          animation: spin-3 2s linear infinite;\n}\n\n.pace .pace-activity {\n  font-size: 15px;\n  line-height: 1;\n  z-index: 2000;\n  position: absolute;\n  height: 60px;\n  width: 100px;\n\n  display: block;\n}\n\n.pace .pace-activity:before {\n  border-radius: 50%;\n  border: 5px solid #ee3148;\n  content: ' ';\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 60px;\n  width: 100px;\n\n  -webkit-animation: spin-1 2s linear infinite;\n     -moz-animation: spin-1 2s linear infinite;\n       -o-animation: spin-1 2s linear infinite;\n          animation: spin-1 2s linear infinite;\n}\n\n.pace .pace-activity:after{\n  border-radius: 50%;\n  border: 5px solid #ee3148;\n  content: ' ';\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 60px;\n  width: 100px;\n\n  -webkit-transform: rotate(45deg);\n     -moz-transform: rotate(45deg);\n       -o-transform: rotate(45deg);\n          transform: rotate(45deg);\n  -webkit-animation: spin-2 2s linear infinite;\n     -moz-animation: spin-2 2s linear infinite;\n       -o-animation: spin-2 2s linear infinite;\n          animation: spin-2 2s linear infinite;\n}\n\n@-webkit-keyframes spin-1 {\n  0%  { -webkit-transform: rotate(0deg); }\n  100%{ -webkit-transform: rotate(359deg);}\n}\n@-moz-keyframes spin-1 {\n  0%  { -moz-transform: rotate(0deg); }\n  100%{ -moz-transform: rotate(359deg);}\n}\n@-o-keyframes spin-1 {\n  0%  { -o-transform: rotate(0deg); }\n  100%{ -o-transform: rotate(359deg);}\n}\n@keyframes spin-1 {\n  0%  { transform: rotate(0deg); }\n  100%{ transform: rotate(359deg);}\n}\n\n@-webkit-keyframes spin-2 {\n  0%  { -webkit-transform: rotate(59.8deg); }\n  100%{ -webkit-transform: rotate(418.8deg);}\n}\n@-moz-keyframes spin-2 {\n  0%  { -moz-transform: rotate(59.8deg); }\n  100%{ -moz-transform: rotate(418.8deg);}\n}\n@-o-keyframes spin-2 {\n  0%  { -o-transform: rotate(59.8deg); }\n  100%{ -o-transform: rotate(418.8deg);}\n}\n@keyframes spin-2 {\n  0%  { transform: rotate(59.8deg); }\n  100%{ transform: rotate(418.8deg);}\n}\n\n@-webkit-keyframes spin-3 {\n  0%  { -webkit-transform: rotate(119.6deg); }\n  100%{ -webkit-transform: rotate(478.6deg);}\n}\n@-moz-keyframes spin-3 {\n  0%  { -moz-transform: rotate(119.6deg); }\n  100%{ -moz-transform: rotate(478.6deg);}\n}\n@-o-keyframes spin-3 {\n  0%  { -o-transform: rotate(119.6deg); }\n  100%{ -o-transform: rotate(478.6deg);}\n}\n@keyframes spin-3 {\n  0%  { transform: rotate(119.6deg); }\n  100%{ transform: rotate(478.6deg);}\n}"
  },
  {
    "path": "public/frontend/plugins/pace/themes/red/pace-theme-center-circle.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n\n  -webkit-perspective: 12rem;\n  -moz-perspective: 12rem;\n  -ms-perspective: 12rem;\n  -o-perspective: 12rem;\n  perspective: 12rem;\n\n  z-index: 2000;\n  position: fixed;\n  height: 6rem;\n  width: 6rem;\n  margin: auto;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n}\n\n.pace.pace-inactive .pace-progress {\n  display: none;\n}\n\n.pace .pace-progress {\n  position: fixed;\n  z-index: 2000;\n  display: block;\n  position: absolute;\n  left: 0;\n  top: 0;\n  height: 6rem;\n  width: 6rem !important;\n  line-height: 6rem;\n  font-size: 2rem;\n  border-radius: 50%;\n  background: rgba(238, 49, 72, 0.8);\n  color: #fff;\n  font-family: \"Helvetica Neue\", sans-serif;\n  font-weight: 100;\n  text-align: center;\n\n  -webkit-animation: pace-3d-spinner linear infinite 2s;\n  -moz-animation: pace-3d-spinner linear infinite 2s;\n  -ms-animation: pace-3d-spinner linear infinite 2s;\n  -o-animation: pace-3d-spinner linear infinite 2s;\n  animation: pace-3d-spinner linear infinite 2s;\n\n  -webkit-transform-style: preserve-3d;\n  -moz-transform-style: preserve-3d;\n  -ms-transform-style: preserve-3d;\n  -o-transform-style: preserve-3d;\n  transform-style: preserve-3d;\n}\n\n.pace .pace-progress:after {\n  content: attr(data-progress-text);\n  display: block;\n}\n\n@-webkit-keyframes pace-3d-spinner {\n  from {\n    -webkit-transform: rotateY(0deg);\n  }\n  to {\n    -webkit-transform: rotateY(360deg);\n  }\n}\n\n@-moz-keyframes pace-3d-spinner {\n  from {\n    -moz-transform: rotateY(0deg);\n  }\n  to {\n    -moz-transform: rotateY(360deg);\n  }\n}\n\n@-ms-keyframes pace-3d-spinner {\n  from {\n    -ms-transform: rotateY(0deg);\n  }\n  to {\n    -ms-transform: rotateY(360deg);\n  }\n}\n\n@-o-keyframes pace-3d-spinner {\n  from {\n    -o-transform: rotateY(0deg);\n  }\n  to {\n    -o-transform: rotateY(360deg);\n  }\n}\n\n@keyframes pace-3d-spinner {\n  from {\n    transform: rotateY(0deg);\n  }\n  to {\n    transform: rotateY(360deg);\n  }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/red/pace-theme-center-radar.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n\n  z-index: 2000;\n  position: fixed;\n  height: 90px;\n  width: 90px;\n  margin: auto;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n}\n\n.pace.pace-inactive .pace-activity {\n  display: none;\n}\n\n.pace .pace-activity {\n  position: fixed;\n  z-index: 2000;\n  display: block;\n  position: absolute;\n  left: -30px;\n  top: -30px;\n  height: 90px;\n  width: 90px;\n  display: block;\n  border-width: 30px;\n  border-style: double;\n  border-color: #ee3148 transparent transparent;\n  border-radius: 50%;\n\n  -webkit-animation: spin 1s linear infinite;\n     -moz-animation: spin 1s linear infinite;\n       -o-animation: spin 1s linear infinite;\n          animation: spin 1s linear infinite;\n}\n\n.pace .pace-activity:before {\n  content: ' ';\n  position: absolute;\n  top: 10px;\n  left: 10px;\n  height: 50px;\n  width: 50px;\n  display: block;\n  border-width: 10px;\n  border-style: solid;\n  border-color: #ee3148 transparent transparent;\n  border-radius: 50%;\n}\n\n\n@-webkit-keyframes spin {\n  100% { -webkit-transform: rotate(359deg); }\n}\n\n@-moz-keyframes spin {\n  100% { -moz-transform: rotate(359deg); }\n}\n\n@-o-keyframes spin {\n  100% { -moz-transform: rotate(359deg); }\n}\n\n@keyframes spin {\n  100% {  transform: rotate(359deg); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/red/pace-theme-center-simple.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n\n  z-index: 2000;\n  position: fixed;\n  margin: auto;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  height: 5px;\n  width: 200px;\n  background: #fff;\n  border: 1px solid #ee3148;\n}\n\n.pace .pace-progress {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  -ms-box-sizing: border-box;\n  -o-box-sizing: border-box;\n  box-sizing: border-box;\n\n  -webkit-transition: width 1s ease-in-out 1s linear;\n  -moz-transition: width 1s ease-in-out 1s linear;\n  -ms-transition: width 1s ease-in-out 1s linear;\n  -o-transition: width 1s ease-in-out 1s linear;\n  transition: width 1s ease-in-out 1s linear;\n\n  -webkit-transform: translate3d(0, 0, 0);\n  -moz-transform: translate3d(0, 0, 0);\n  -ms-transform: translate3d(0, 0, 0);\n  -o-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n\n  max-width: 200px;\n  position: fixed;\n  z-index: 2000;\n  display: block;\n  position: absolute;\n  left: 0px;\n  top: 0px;\n  height: 100%;\n  background: #ee3148;\n}\n\n.pace.pace-inactive {\n  display: none;\n}"
  },
  {
    "path": "public/frontend/plugins/pace/themes/red/pace-theme-corner-indicator.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace .pace-activity {\n  display: block;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  right: 0;\n  width: 300px;\n  height: 300px;\n  background: #ee3148;\n  -webkit-transition: -webkit-transform 0.3s;\n  transition: transform 0.3s;\n  -webkit-transform: translateX(100%) translateY(-100%) rotate(45deg);\n  transform: translateX(100%) translateY(-100%) rotate(45deg);\n  pointer-events: none;\n}\n\n.pace.pace-active .pace-activity {\n  -webkit-transform: translateX(50%) translateY(-50%) rotate(45deg);\n  transform: translateX(50%) translateY(-50%) rotate(45deg);\n}\n\n.pace .pace-activity::before,\n.pace .pace-activity::after {\n    position: absolute;\n    bottom: 30px;\n    left: 50%;\n    display: block;\n    border: 5px solid #fff;\n    border-radius: 50%;\n    content: '';\n}\n\n.pace .pace-activity::before {\n    margin-left: -40px;\n    width: 80px;\n    height: 80px;\n    border-right-color: rgba(0, 0, 0, .2);\n    border-left-color: rgba(0, 0, 0, .2);\n    -webkit-animation: pace-rotation 3s linear infinite;\n    animation: pace-rotation 3s linear infinite;\n}\n\n.pace .pace-activity::after {\n    bottom: 50px;\n    margin-left: -20px;\n    width: 40px;\n    height: 40px;\n    border-top-color: rgba(0, 0, 0, .2);\n    border-bottom-color: rgba(0, 0, 0, .2);\n    -webkit-animation: pace-rotation 1s linear infinite;\n    animation: pace-rotation 1s linear infinite;\n}\n\n@-webkit-keyframes pace-rotation {\n  0% { -webkit-transform: rotate(0deg); }\n  100% { -webkit-transform: rotate(359deg); }\n}\n@keyframes pace-rotation {\n  0% { transform: rotate(0deg); }\n  100% { transform: rotate(359deg); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/red/pace-theme-fill-left.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace .pace-progress {\n  background-color: rgba(238, 49, 72, 0.19999999999999996);\n  position: fixed;\n  z-index: -1;\n  top: 0;\n  left: 0;\n  bottom: 0;\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/red/pace-theme-flash.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace-inactive {\n  display: none;\n}\n\n.pace .pace-progress {\n  background: #ee3148;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 2px;\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n\n.pace .pace-progress-inner {\n  display: block;\n  position: absolute;\n  right: 0px;\n  width: 100px;\n  height: 100%;\n  box-shadow: 0 0 10px #ee3148, 0 0 5px #ee3148;\n  opacity: 1.0;\n  -webkit-transform: rotate(3deg) translate(0px, -4px);\n  -moz-transform: rotate(3deg) translate(0px, -4px);\n  -ms-transform: rotate(3deg) translate(0px, -4px);\n  -o-transform: rotate(3deg) translate(0px, -4px);\n  transform: rotate(3deg) translate(0px, -4px);\n}\n\n.pace .pace-activity {\n  display: block;\n  position: fixed;\n  z-index: 2000;\n  top: 15px;\n  right: 15px;\n  width: 14px;\n  height: 14px;\n  border: solid 2px transparent;\n  border-top-color: #ee3148;\n  border-left-color: #ee3148;\n  border-radius: 10px;\n  -webkit-animation: pace-spinner 400ms linear infinite;\n  -moz-animation: pace-spinner 400ms linear infinite;\n  -ms-animation: pace-spinner 400ms linear infinite;\n  -o-animation: pace-spinner 400ms linear infinite;\n  animation: pace-spinner 400ms linear infinite;\n}\n\n@-webkit-keyframes pace-spinner {\n  0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@-moz-keyframes pace-spinner {\n  0% { -moz-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -moz-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@-o-keyframes pace-spinner {\n  0% { -o-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -o-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@-ms-keyframes pace-spinner {\n  0% { -ms-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -ms-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@keyframes pace-spinner {\n  0% { transform: rotate(0deg); transform: rotate(0deg); }\n  100% { transform: rotate(360deg); transform: rotate(360deg); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/red/pace-theme-flat-top.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace .pace-progress {\n  display: block;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 12px;\n  background: #ee3148;\n\n  -webkit-transition: -webkit-transform .3s, width 1s;\n  -moz-transition: width 1s;\n  -o-transform: width 1s;\n  transition: transform .3s, width 1s;\n\n  -webkit-transform: translateY(-50px);\n  transform: translateY(-50px);\n\n  pointer-events: none;\n}\n\n.pace.pace-active .pace-progress {\n  -webkit-transform: translateY(0);\n  transform: translateY(0);\n}"
  },
  {
    "path": "public/frontend/plugins/pace/themes/red/pace-theme-loading-bar.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  -ms-box-sizing: border-box;\n  -o-box-sizing: border-box;\n  box-sizing: border-box;\n\n  -webkit-border-radius: 10px;\n  -moz-border-radius: 10px;\n  border-radius: 10px;\n\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n\n  z-index: 2000;\n  position: fixed;\n  margin: auto;\n  top: 12px;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  width: 200px;\n  height: 25px;\n  border: 2px solid #ee3148;\n  background-color: #fff;\n}\n\n.pace .pace-progress {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  -ms-box-sizing: border-box;\n  -o-box-sizing: border-box;\n  box-sizing: border-box;\n\n  -webkit-border-radius: 5px;\n  -moz-border-radius: 5px;\n  border-radius: 5px;\n\n  -webkit-background-clip: padding-box;\n  -moz-background-clip: padding;\n  background-clip: padding-box;\n\n  -webkit-transition: width 1s ease-in-out 1s linear;\n  -moz-transition: width 1s ease-in-out 1s linear;\n  -ms-transition: width 1s ease-in-out 1s linear;\n  -o-transition: width 1s ease-in-out 1s linear;\n  transition: width 1s ease-in-out 1s linear;\n\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n\n  max-width: 190px;\n  position: fixed;\n  z-index: 2000;\n  display: block;\n  position: absolute;\n  left: 3px;\n  top: 3px;\n  height: 15px;\n  font-size: 12px;\n  background: #ee3148;\n  color: #ee3148;\n  line-height: 60px;\n  font-weight: bold;\n  font-family:  Helvetica, Arial, \"Lucida Grande\", sans-serif;\n}\n\n.pace .pace-progress:after {\n  content: attr(data-progress-text);\n  display: inline-block;\n}\n\n.pace.pace-inactive {\n  display: none;\n}"
  },
  {
    "path": "public/frontend/plugins/pace/themes/red/pace-theme-mac-osx.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace-inactive {\n  display: none;\n}\n\n.pace .pace-progress {\n  background-color: #ee3148;\n\n  color: #F47181;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 12px;\n  overflow: hidden;\n\n  -webkit-border-radius: 0 0 4px 0;\n  -moz-border-radius: 0 0 4px 0;\n  -o-border-radius: 0 0 4px 0;\n  border-radius: 0 0 4px 0;\n\n  -webkit-box-shadow: inset -1px 0 rgba(0, 0, 0, 0.3), inset 0 -1px rgba(0, 0, 0, 0.3), inset 0 2px rgba(255, 255, 255, 0.5), inset 0 6px rgba(255, 255, 255, 0.3);\n  -moz-box-shadow: inset -1px 0 rgba(0, 0, 0, 0.3), inset 0 -1px rgba(0, 0, 0, 0.3), inset 0 2px rgba(255, 255, 255, 0.5), inset 0 6px rgba(255, 255, 255, 0.3);\n  -o-box-shadow: inset -1px 0 rgba(0, 0, 0, 0.3), inset 0 -1px rgba(0, 0, 0, 0.3), inset 0 2px rgba(255, 255, 255, 0.5), inset 0 6px rgba(255, 255, 255, 0.3);\n  box-shadow: inset -1px 0 rgba(0, 0, 0, 0.3), inset 0 -1px rgba(0, 0, 0, 0.3), inset 0 2px rgba(255, 255, 255, 0.5), inset 0 6px rgba(255, 255, 255, 0.3);\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n\n.pace .pace-progress-inner {\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: -28px;\n  bottom: 0;\n\n  background-image: -o-radial-gradient(rgba(185, 15, 35, 0.6) 0%, rgba(238, 49, 72, 0) 100%);\n  background-image: -moz-radial-gradient(rgba(185, 15, 35, 0.6) 0%, rgba(238, 49, 72, 0) 100%);\n  background-image: -webkit-radial-gradient(rgba(185, 15, 35, 0.6) 0%, rgba(238, 49, 72, 0) 100%);\n  background-image: radial-gradient(rgba(185, 15, 35, 0.6) 0%, rgba(238, 49, 72, 0) 100%);\n\n\n  -webkit-background-size: 28px 100%;\n  -moz-background-size: 28px 100%;\n  -o-background-size: 28px 100%;\n  background-size: 28px 100%;\n\n  -webkit-animation: pace-stripe-animation 500ms linear infinite;\n  -moz-animation: pace-stripe-animation 500ms linear infinite;\n  -ms-animation: pace-stripe-animation 500ms linear infinite;\n  -o-animation: pace-stripe-animation 500ms linear infinite;\n  animation: pace-stripe-animation 500ms linear infinite;\n}\n\n@-webkit-keyframes pace-stripe-animation {\n  0% { -webkit-transform: none; transform: none; }\n  100% { -webkit-transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n@-moz-keyframes pace-stripe-animation {\n  0% { -moz-transform: none; transform: none; }\n  100% { -moz-transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n@-o-keyframes pace-stripe-animation {\n  0% { -o-transform: none; transform: none; }\n  100% { -o-transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n@-ms-keyframes pace-stripe-animation {\n  0% { -ms-transform: none; transform: none; }\n  100% { -ms-transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n@keyframes pace-stripe-animation {\n  0% { transform: none; transform: none; }\n  100% { transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/red/pace-theme-minimal.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace .pace-progress {\n  background: #ee3148;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 2px;\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n\n.pace-inactive {\n  display: none;\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/silver/pace-theme-barber-shop.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace-inactive {\n  display: none;\n}\n\n.pace .pace-progress {\n  background-color: #d6d6d6;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 12px;\n  overflow: hidden;\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n\n.pace .pace-progress-inner {\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: -32px;\n  bottom: 0;\n\n  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.2)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.2)), color-stop(0.75, rgba(255, 255, 255, 0.2)), color-stop(0.75, transparent), to(transparent));\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);\n  background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);\n  -webkit-background-size: 32px 32px;\n  -moz-background-size: 32px 32px;\n  -o-background-size: 32px 32px;\n  background-size: 32px 32px;\n\n  -webkit-animation: pace-stripe-animation 500ms linear infinite;\n  -moz-animation: pace-stripe-animation 500ms linear infinite;\n  -ms-animation: pace-stripe-animation 500ms linear infinite;\n  -o-animation: pace-stripe-animation 500ms linear infinite;\n  animation: pace-stripe-animation 500ms linear infinite;\n}\n\n@-webkit-keyframes pace-stripe-animation {\n  0% { -webkit-transform: none; transform: none; }\n  100% { -webkit-transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n@-moz-keyframes pace-stripe-animation {\n  0% { -moz-transform: none; transform: none; }\n  100% { -moz-transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n@-o-keyframes pace-stripe-animation {\n  0% { -o-transform: none; transform: none; }\n  100% { -o-transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n@-ms-keyframes pace-stripe-animation {\n  0% { -ms-transform: none; transform: none; }\n  100% { -ms-transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n@keyframes pace-stripe-animation {\n  0% { transform: none; transform: none; }\n  100% { transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/silver/pace-theme-big-counter.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace.pace-inactive .pace-progress {\n  display: none;\n}\n\n.pace .pace-progress {\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  right: 0;\n  height: 5rem;\n  width: 5rem;\n}\n\n.pace .pace-progress:after {\n  display: block;\n  position: absolute;\n  top: 0;\n  right: .5rem;\n  content: attr(data-progress-text);\n  font-family: \"Helvetica Neue\", sans-serif;\n  font-weight: 100;\n  font-size: 5rem;\n  line-height: 1;\n  text-align: right;\n  color: rgba(214, 214, 214, 0.19999999999999996);\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/silver/pace-theme-bounce.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  width: 140px;\n  height: 300px;\n  position: fixed;\n  top: -90px;\n  right: -20px;\n  z-index: 2000;\n  -webkit-transform: scale(0);\n  -moz-transform: scale(0);\n  -ms-transform: scale(0);\n  -o-transform: scale(0);\n  transform: scale(0);\n  opacity: 0;\n  -webkit-transition: all 2s linear 0s;\n  -moz-transition: all 2s linear 0s;\n  transition: all 2s linear 0s;\n}\n\n.pace.pace-active {\n  -webkit-transform: scale(.25);\n  -moz-transform: scale(.25);\n  -ms-transform: scale(.25);\n  -o-transform: scale(.25);\n  transform: scale(.25);\n  opacity: 1;\n}\n\n.pace .pace-activity {\n  width: 140px;\n  height: 140px;\n  border-radius: 70px;\n  background: #d6d6d6;\n  position: absolute;\n  top: 0;\n  z-index: 1911;\n  -webkit-animation: pace-bounce 1s infinite;\n  -moz-animation: pace-bounce 1s infinite;\n  -o-animation: pace-bounce 1s infinite;\n  -ms-animation: pace-bounce 1s infinite;\n  animation: pace-bounce 1s infinite;\n}\n\n.pace .pace-progress {\n  position: absolute;\n  display: block;\n  left: 50%;\n  bottom: 0;\n  z-index: 1910;\n  margin-left: -30px;\n  width: 60px;\n  height: 75px;\n  background: rgba(20, 20, 20, .1);\n  box-shadow: 0 0 20px 35px rgba(20, 20, 20, .1);\n  border-radius: 30px / 40px;\n  -webkit-transform: scaleY(.3);\n  -moz-transform: scaleY(.3);\n  -ms-transform: scaleY(.3);\n  -o-transform: scaleY(.3);\n  transform: scaleY(.3);\n  -webkit-animation: pace-compress .5s infinite alternate;\n  -moz-animation: pace-compress .5s infinite alternate;\n  -o-animation: pace-compress .5s infinite alternate;\n  -ms-animation: pace-compress .5s infinite alternate;\n  animation: pace-compress .5s infinite alternate;\n}\n\n@-webkit-keyframes pace-bounce {\n  0% {\n    top: 0;\n    -webkit-animation-timing-function: ease-in;\n  }\n  40% {}\n  50% {\n    top: 140px;\n    height: 140px;\n    -webkit-animation-timing-function: ease-out;\n  }\n  55% {\n    top: 160px;\n    height: 120px;\n    border-radius: 70px / 60px;\n    -webkit-animation-timing-function: ease-in;\n  }\n  65% {\n    top: 120px;\n    height: 140px;\n    border-radius: 70px;\n    -webkit-animation-timing-function: ease-out;\n  }\n  95% {\n    top: 0;\n    -webkit-animation-timing-function: ease-in;\n  }\n  100% {\n    top: 0;\n    -webkit-animation-timing-function: ease-in;\n  }\n}\n\n@-moz-keyframes pace-bounce {\n  0% {\n    top: 0;\n    -moz-animation-timing-function: ease-in;\n  }\n  40% {}\n  50% {\n    top: 140px;\n    height: 140px;\n    -moz-animation-timing-function: ease-out;\n  }\n  55% {\n    top: 160px;\n    height: 120px;\n    border-radius: 70px / 60px;\n    -moz-animation-timing-function: ease-in;\n  }\n  65% {\n    top: 120px;\n    height: 140px;\n    border-radius: 70px;\n    -moz-animation-timing-function: ease-out;}\n  95% {\n    top: 0;\n    -moz-animation-timing-function: ease-in;\n  }\n  100% {top: 0;\n    -moz-animation-timing-function: ease-in;\n  }\n}\n\n@keyframes pace-bounce {\n  0% {\n    top: 0;\n    animation-timing-function: ease-in;\n  }\n  50% {\n    top: 140px;\n    height: 140px;\n    animation-timing-function: ease-out;\n  }\n  55% {\n    top: 160px;\n    height: 120px;\n    border-radius: 70px / 60px;\n    animation-timing-function: ease-in;\n  }\n  65% {\n    top: 120px;\n    height: 140px;\n    border-radius: 70px;\n    animation-timing-function: ease-out;\n  }\n  95% {\n    top: 0;\n    animation-timing-function: ease-in;\n  }\n  100% {\n    top: 0;\n    animation-timing-function: ease-in;\n  }\n}\n\n@-webkit-keyframes pace-compress {\n  0% {\n    bottom: 0;\n    margin-left: -30px;\n    width: 60px;\n    height: 75px;\n    background: rgba(20, 20, 20, .1);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .1);\n    border-radius: 30px / 40px;\n    -webkit-animation-timing-function: ease-in;\n  }\n  100% {\n    bottom: 30px;\n    margin-left: -10px;\n    width: 20px;\n    height: 5px;\n    background: rgba(20, 20, 20, .3);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .3);\n    border-radius: 20px / 20px;\n    -webkit-animation-timing-function: ease-out;\n  }\n}\n\n@-moz-keyframes pace-compress {\n  0% {\n    bottom: 0;\n    margin-left: -30px;\n    width: 60px;\n    height: 75px;\n    background: rgba(20, 20, 20, .1);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .1);\n    border-radius: 30px / 40px;\n    -moz-animation-timing-function: ease-in;\n  }\n  100% {\n    bottom: 30px;\n    margin-left: -10px;\n    width: 20px;\n    height: 5px;\n    background: rgba(20, 20, 20, .3);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .3);\n    border-radius: 20px / 20px;\n    -moz-animation-timing-function: ease-out;\n  }\n}\n\n@keyframes pace-compress {\n  0% {\n    bottom: 0;\n    margin-left: -30px;\n    width: 60px;\n    height: 75px;\n    background: rgba(20, 20, 20, .1);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .1);\n    border-radius: 30px / 40px;\n    animation-timing-function: ease-in;\n  }\n  100% {\n    bottom: 30px;\n    margin-left: -10px;\n    width: 20px;\n    height: 5px;\n    background: rgba(20, 20, 20, .3);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .3);\n    border-radius: 20px / 20px;\n    animation-timing-function: ease-out;\n  }\n}"
  },
  {
    "path": "public/frontend/plugins/pace/themes/silver/pace-theme-center-atom.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace.pace-inactive {\n  display: none;\n}\n\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n\n  z-index: 2000;\n  position: fixed;\n  height: 60px;\n  width: 100px;\n  margin: auto;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n}\n\n.pace .pace-progress {\n  z-index: 2000;\n  position: absolute;\n  height: 60px;\n  width: 100px !important;\n}\n\n.pace .pace-progress:before {\n  content: attr(data-progress-text);\n  text-align: center;\n  color: #fff;\n  background: #d6d6d6;\n  border-radius: 50%;\n  font-family: \"Helvetica Neue\", sans-serif;\n  font-size: 14px;\n  font-weight: 100;\n  line-height: 1;\n  padding: 20% 0 7px;\n  width: 50%;\n  height: 40%;\n  margin: 10px 0 0 30px;\n  display: block;\n  z-index: 999;\n  position: absolute;\n}\n\n.pace .pace-progress:after {\n  border-radius: 50%;\n  border: 5px solid #d6d6d6;\n  content: ' ';\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 60px;\n  width: 100px;\n\n  -webkit-transform: rotate(90deg);\n     -moz-transform: rotate(90deg);\n       -o-transform: rotate(90deg);\n          transform: rotate(90deg);\n  -webkit-animation: spin-3 2s linear infinite;\n     -moz-animation: spin-3 2s linear infinite;\n       -o-animation: spin-3 2s linear infinite;\n          animation: spin-3 2s linear infinite;\n}\n\n.pace .pace-activity {\n  font-size: 15px;\n  line-height: 1;\n  z-index: 2000;\n  position: absolute;\n  height: 60px;\n  width: 100px;\n\n  display: block;\n}\n\n.pace .pace-activity:before {\n  border-radius: 50%;\n  border: 5px solid #d6d6d6;\n  content: ' ';\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 60px;\n  width: 100px;\n\n  -webkit-animation: spin-1 2s linear infinite;\n     -moz-animation: spin-1 2s linear infinite;\n       -o-animation: spin-1 2s linear infinite;\n          animation: spin-1 2s linear infinite;\n}\n\n.pace .pace-activity:after{\n  border-radius: 50%;\n  border: 5px solid #d6d6d6;\n  content: ' ';\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 60px;\n  width: 100px;\n\n  -webkit-transform: rotate(45deg);\n     -moz-transform: rotate(45deg);\n       -o-transform: rotate(45deg);\n          transform: rotate(45deg);\n  -webkit-animation: spin-2 2s linear infinite;\n     -moz-animation: spin-2 2s linear infinite;\n       -o-animation: spin-2 2s linear infinite;\n          animation: spin-2 2s linear infinite;\n}\n\n@-webkit-keyframes spin-1 {\n  0%  { -webkit-transform: rotate(0deg); }\n  100%{ -webkit-transform: rotate(359deg);}\n}\n@-moz-keyframes spin-1 {\n  0%  { -moz-transform: rotate(0deg); }\n  100%{ -moz-transform: rotate(359deg);}\n}\n@-o-keyframes spin-1 {\n  0%  { -o-transform: rotate(0deg); }\n  100%{ -o-transform: rotate(359deg);}\n}\n@keyframes spin-1 {\n  0%  { transform: rotate(0deg); }\n  100%{ transform: rotate(359deg);}\n}\n\n@-webkit-keyframes spin-2 {\n  0%  { -webkit-transform: rotate(59.8deg); }\n  100%{ -webkit-transform: rotate(418.8deg);}\n}\n@-moz-keyframes spin-2 {\n  0%  { -moz-transform: rotate(59.8deg); }\n  100%{ -moz-transform: rotate(418.8deg);}\n}\n@-o-keyframes spin-2 {\n  0%  { -o-transform: rotate(59.8deg); }\n  100%{ -o-transform: rotate(418.8deg);}\n}\n@keyframes spin-2 {\n  0%  { transform: rotate(59.8deg); }\n  100%{ transform: rotate(418.8deg);}\n}\n\n@-webkit-keyframes spin-3 {\n  0%  { -webkit-transform: rotate(119.6deg); }\n  100%{ -webkit-transform: rotate(478.6deg);}\n}\n@-moz-keyframes spin-3 {\n  0%  { -moz-transform: rotate(119.6deg); }\n  100%{ -moz-transform: rotate(478.6deg);}\n}\n@-o-keyframes spin-3 {\n  0%  { -o-transform: rotate(119.6deg); }\n  100%{ -o-transform: rotate(478.6deg);}\n}\n@keyframes spin-3 {\n  0%  { transform: rotate(119.6deg); }\n  100%{ transform: rotate(478.6deg);}\n}"
  },
  {
    "path": "public/frontend/plugins/pace/themes/silver/pace-theme-center-circle.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n\n  -webkit-perspective: 12rem;\n  -moz-perspective: 12rem;\n  -ms-perspective: 12rem;\n  -o-perspective: 12rem;\n  perspective: 12rem;\n\n  z-index: 2000;\n  position: fixed;\n  height: 6rem;\n  width: 6rem;\n  margin: auto;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n}\n\n.pace.pace-inactive .pace-progress {\n  display: none;\n}\n\n.pace .pace-progress {\n  position: fixed;\n  z-index: 2000;\n  display: block;\n  position: absolute;\n  left: 0;\n  top: 0;\n  height: 6rem;\n  width: 6rem !important;\n  line-height: 6rem;\n  font-size: 2rem;\n  border-radius: 50%;\n  background: rgba(214, 214, 214, 0.8);\n  color: #fff;\n  font-family: \"Helvetica Neue\", sans-serif;\n  font-weight: 100;\n  text-align: center;\n\n  -webkit-animation: pace-3d-spinner linear infinite 2s;\n  -moz-animation: pace-3d-spinner linear infinite 2s;\n  -ms-animation: pace-3d-spinner linear infinite 2s;\n  -o-animation: pace-3d-spinner linear infinite 2s;\n  animation: pace-3d-spinner linear infinite 2s;\n\n  -webkit-transform-style: preserve-3d;\n  -moz-transform-style: preserve-3d;\n  -ms-transform-style: preserve-3d;\n  -o-transform-style: preserve-3d;\n  transform-style: preserve-3d;\n}\n\n.pace .pace-progress:after {\n  content: attr(data-progress-text);\n  display: block;\n}\n\n@-webkit-keyframes pace-3d-spinner {\n  from {\n    -webkit-transform: rotateY(0deg);\n  }\n  to {\n    -webkit-transform: rotateY(360deg);\n  }\n}\n\n@-moz-keyframes pace-3d-spinner {\n  from {\n    -moz-transform: rotateY(0deg);\n  }\n  to {\n    -moz-transform: rotateY(360deg);\n  }\n}\n\n@-ms-keyframes pace-3d-spinner {\n  from {\n    -ms-transform: rotateY(0deg);\n  }\n  to {\n    -ms-transform: rotateY(360deg);\n  }\n}\n\n@-o-keyframes pace-3d-spinner {\n  from {\n    -o-transform: rotateY(0deg);\n  }\n  to {\n    -o-transform: rotateY(360deg);\n  }\n}\n\n@keyframes pace-3d-spinner {\n  from {\n    transform: rotateY(0deg);\n  }\n  to {\n    transform: rotateY(360deg);\n  }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/silver/pace-theme-center-radar.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n\n  z-index: 2000;\n  position: fixed;\n  height: 90px;\n  width: 90px;\n  margin: auto;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n}\n\n.pace.pace-inactive .pace-activity {\n  display: none;\n}\n\n.pace .pace-activity {\n  position: fixed;\n  z-index: 2000;\n  display: block;\n  position: absolute;\n  left: -30px;\n  top: -30px;\n  height: 90px;\n  width: 90px;\n  display: block;\n  border-width: 30px;\n  border-style: double;\n  border-color: #d6d6d6 transparent transparent;\n  border-radius: 50%;\n\n  -webkit-animation: spin 1s linear infinite;\n     -moz-animation: spin 1s linear infinite;\n       -o-animation: spin 1s linear infinite;\n          animation: spin 1s linear infinite;\n}\n\n.pace .pace-activity:before {\n  content: ' ';\n  position: absolute;\n  top: 10px;\n  left: 10px;\n  height: 50px;\n  width: 50px;\n  display: block;\n  border-width: 10px;\n  border-style: solid;\n  border-color: #d6d6d6 transparent transparent;\n  border-radius: 50%;\n}\n\n\n@-webkit-keyframes spin {\n  100% { -webkit-transform: rotate(359deg); }\n}\n\n@-moz-keyframes spin {\n  100% { -moz-transform: rotate(359deg); }\n}\n\n@-o-keyframes spin {\n  100% { -moz-transform: rotate(359deg); }\n}\n\n@keyframes spin {\n  100% {  transform: rotate(359deg); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/silver/pace-theme-center-simple.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n\n  z-index: 2000;\n  position: fixed;\n  margin: auto;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  height: 5px;\n  width: 200px;\n  background: #fff;\n  border: 1px solid #d6d6d6;\n}\n\n.pace .pace-progress {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  -ms-box-sizing: border-box;\n  -o-box-sizing: border-box;\n  box-sizing: border-box;\n\n  -webkit-transition: width 1s ease-in-out 1s linear;\n  -moz-transition: width 1s ease-in-out 1s linear;\n  -ms-transition: width 1s ease-in-out 1s linear;\n  -o-transition: width 1s ease-in-out 1s linear;\n  transition: width 1s ease-in-out 1s linear;\n\n  -webkit-transform: translate3d(0, 0, 0);\n  -moz-transform: translate3d(0, 0, 0);\n  -ms-transform: translate3d(0, 0, 0);\n  -o-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n\n  max-width: 200px;\n  position: fixed;\n  z-index: 2000;\n  display: block;\n  position: absolute;\n  left: 0px;\n  top: 0px;\n  height: 100%;\n  background: #d6d6d6;\n}\n\n.pace.pace-inactive {\n  display: none;\n}"
  },
  {
    "path": "public/frontend/plugins/pace/themes/silver/pace-theme-corner-indicator.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace .pace-activity {\n  display: block;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  right: 0;\n  width: 300px;\n  height: 300px;\n  background: #d6d6d6;\n  -webkit-transition: -webkit-transform 0.3s;\n  transition: transform 0.3s;\n  -webkit-transform: translateX(100%) translateY(-100%) rotate(45deg);\n  transform: translateX(100%) translateY(-100%) rotate(45deg);\n  pointer-events: none;\n}\n\n.pace.pace-active .pace-activity {\n  -webkit-transform: translateX(50%) translateY(-50%) rotate(45deg);\n  transform: translateX(50%) translateY(-50%) rotate(45deg);\n}\n\n.pace .pace-activity::before,\n.pace .pace-activity::after {\n    position: absolute;\n    bottom: 30px;\n    left: 50%;\n    display: block;\n    border: 5px solid #fff;\n    border-radius: 50%;\n    content: '';\n}\n\n.pace .pace-activity::before {\n    margin-left: -40px;\n    width: 80px;\n    height: 80px;\n    border-right-color: rgba(0, 0, 0, .2);\n    border-left-color: rgba(0, 0, 0, .2);\n    -webkit-animation: pace-rotation 3s linear infinite;\n    animation: pace-rotation 3s linear infinite;\n}\n\n.pace .pace-activity::after {\n    bottom: 50px;\n    margin-left: -20px;\n    width: 40px;\n    height: 40px;\n    border-top-color: rgba(0, 0, 0, .2);\n    border-bottom-color: rgba(0, 0, 0, .2);\n    -webkit-animation: pace-rotation 1s linear infinite;\n    animation: pace-rotation 1s linear infinite;\n}\n\n@-webkit-keyframes pace-rotation {\n  0% { -webkit-transform: rotate(0deg); }\n  100% { -webkit-transform: rotate(359deg); }\n}\n@keyframes pace-rotation {\n  0% { transform: rotate(0deg); }\n  100% { transform: rotate(359deg); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/silver/pace-theme-fill-left.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace .pace-progress {\n  background-color: rgba(214, 214, 214, 0.19999999999999996);\n  position: fixed;\n  z-index: -1;\n  top: 0;\n  left: 0;\n  bottom: 0;\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/silver/pace-theme-flash.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace-inactive {\n  display: none;\n}\n\n.pace .pace-progress {\n  background: #d6d6d6;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 2px;\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n\n.pace .pace-progress-inner {\n  display: block;\n  position: absolute;\n  right: 0px;\n  width: 100px;\n  height: 100%;\n  box-shadow: 0 0 10px #d6d6d6, 0 0 5px #d6d6d6;\n  opacity: 1.0;\n  -webkit-transform: rotate(3deg) translate(0px, -4px);\n  -moz-transform: rotate(3deg) translate(0px, -4px);\n  -ms-transform: rotate(3deg) translate(0px, -4px);\n  -o-transform: rotate(3deg) translate(0px, -4px);\n  transform: rotate(3deg) translate(0px, -4px);\n}\n\n.pace .pace-activity {\n  display: block;\n  position: fixed;\n  z-index: 2000;\n  top: 15px;\n  right: 15px;\n  width: 14px;\n  height: 14px;\n  border: solid 2px transparent;\n  border-top-color: #d6d6d6;\n  border-left-color: #d6d6d6;\n  border-radius: 10px;\n  -webkit-animation: pace-spinner 400ms linear infinite;\n  -moz-animation: pace-spinner 400ms linear infinite;\n  -ms-animation: pace-spinner 400ms linear infinite;\n  -o-animation: pace-spinner 400ms linear infinite;\n  animation: pace-spinner 400ms linear infinite;\n}\n\n@-webkit-keyframes pace-spinner {\n  0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@-moz-keyframes pace-spinner {\n  0% { -moz-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -moz-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@-o-keyframes pace-spinner {\n  0% { -o-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -o-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@-ms-keyframes pace-spinner {\n  0% { -ms-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -ms-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@keyframes pace-spinner {\n  0% { transform: rotate(0deg); transform: rotate(0deg); }\n  100% { transform: rotate(360deg); transform: rotate(360deg); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/silver/pace-theme-flat-top.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace .pace-progress {\n  display: block;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 12px;\n  background: #d6d6d6;\n\n  -webkit-transition: -webkit-transform .3s, width 1s;\n  -moz-transition: width 1s;\n  -o-transform: width 1s;\n  transition: transform .3s, width 1s;\n\n  -webkit-transform: translateY(-50px);\n  transform: translateY(-50px);\n\n  pointer-events: none;\n}\n\n.pace.pace-active .pace-progress {\n  -webkit-transform: translateY(0);\n  transform: translateY(0);\n}"
  },
  {
    "path": "public/frontend/plugins/pace/themes/silver/pace-theme-loading-bar.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  -ms-box-sizing: border-box;\n  -o-box-sizing: border-box;\n  box-sizing: border-box;\n\n  -webkit-border-radius: 10px;\n  -moz-border-radius: 10px;\n  border-radius: 10px;\n\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n\n  z-index: 2000;\n  position: fixed;\n  margin: auto;\n  top: 12px;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  width: 200px;\n  height: 25px;\n  border: 2px solid #d6d6d6;\n  background-color: #fff;\n}\n\n.pace .pace-progress {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  -ms-box-sizing: border-box;\n  -o-box-sizing: border-box;\n  box-sizing: border-box;\n\n  -webkit-border-radius: 5px;\n  -moz-border-radius: 5px;\n  border-radius: 5px;\n\n  -webkit-background-clip: padding-box;\n  -moz-background-clip: padding;\n  background-clip: padding-box;\n\n  -webkit-transition: width 1s ease-in-out 1s linear;\n  -moz-transition: width 1s ease-in-out 1s linear;\n  -ms-transition: width 1s ease-in-out 1s linear;\n  -o-transition: width 1s ease-in-out 1s linear;\n  transition: width 1s ease-in-out 1s linear;\n\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n\n  max-width: 190px;\n  position: fixed;\n  z-index: 2000;\n  display: block;\n  position: absolute;\n  left: 3px;\n  top: 3px;\n  height: 15px;\n  font-size: 12px;\n  background: #d6d6d6;\n  color: #d6d6d6;\n  line-height: 60px;\n  font-weight: bold;\n  font-family:  Helvetica, Arial, \"Lucida Grande\", sans-serif;\n}\n\n.pace .pace-progress:after {\n  content: attr(data-progress-text);\n  display: inline-block;\n}\n\n.pace.pace-inactive {\n  display: none;\n}"
  },
  {
    "path": "public/frontend/plugins/pace/themes/silver/pace-theme-mac-osx.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace-inactive {\n  display: none;\n}\n\n.pace .pace-progress {\n  background-color: #d6d6d6;\n\n  color: #FFFFFF;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 12px;\n  overflow: hidden;\n\n  -webkit-border-radius: 0 0 4px 0;\n  -moz-border-radius: 0 0 4px 0;\n  -o-border-radius: 0 0 4px 0;\n  border-radius: 0 0 4px 0;\n\n  -webkit-box-shadow: inset -1px 0 rgba(0, 0, 0, 0.3), inset 0 -1px rgba(0, 0, 0, 0.3), inset 0 2px rgba(255, 255, 255, 0.5), inset 0 6px rgba(255, 255, 255, 0.3);\n  -moz-box-shadow: inset -1px 0 rgba(0, 0, 0, 0.3), inset 0 -1px rgba(0, 0, 0, 0.3), inset 0 2px rgba(255, 255, 255, 0.5), inset 0 6px rgba(255, 255, 255, 0.3);\n  -o-box-shadow: inset -1px 0 rgba(0, 0, 0, 0.3), inset 0 -1px rgba(0, 0, 0, 0.3), inset 0 2px rgba(255, 255, 255, 0.5), inset 0 6px rgba(255, 255, 255, 0.3);\n  box-shadow: inset -1px 0 rgba(0, 0, 0, 0.3), inset 0 -1px rgba(0, 0, 0, 0.3), inset 0 2px rgba(255, 255, 255, 0.5), inset 0 6px rgba(255, 255, 255, 0.3);\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n\n.pace .pace-progress-inner {\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: -28px;\n  bottom: 0;\n\n  background-image: -o-radial-gradient(rgba(150, 150, 150, 0.6) 0%, rgba(214, 214, 214, 0) 100%);\n  background-image: -moz-radial-gradient(rgba(150, 150, 150, 0.6) 0%, rgba(214, 214, 214, 0) 100%);\n  background-image: -webkit-radial-gradient(rgba(150, 150, 150, 0.6) 0%, rgba(214, 214, 214, 0) 100%);\n  background-image: radial-gradient(rgba(150, 150, 150, 0.6) 0%, rgba(214, 214, 214, 0) 100%);\n\n\n  -webkit-background-size: 28px 100%;\n  -moz-background-size: 28px 100%;\n  -o-background-size: 28px 100%;\n  background-size: 28px 100%;\n\n  -webkit-animation: pace-stripe-animation 500ms linear infinite;\n  -moz-animation: pace-stripe-animation 500ms linear infinite;\n  -ms-animation: pace-stripe-animation 500ms linear infinite;\n  -o-animation: pace-stripe-animation 500ms linear infinite;\n  animation: pace-stripe-animation 500ms linear infinite;\n}\n\n@-webkit-keyframes pace-stripe-animation {\n  0% { -webkit-transform: none; transform: none; }\n  100% { -webkit-transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n@-moz-keyframes pace-stripe-animation {\n  0% { -moz-transform: none; transform: none; }\n  100% { -moz-transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n@-o-keyframes pace-stripe-animation {\n  0% { -o-transform: none; transform: none; }\n  100% { -o-transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n@-ms-keyframes pace-stripe-animation {\n  0% { -ms-transform: none; transform: none; }\n  100% { -ms-transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n@keyframes pace-stripe-animation {\n  0% { transform: none; transform: none; }\n  100% { transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/silver/pace-theme-minimal.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace .pace-progress {\n  background: #d6d6d6;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 2px;\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n\n.pace-inactive {\n  display: none;\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/white/pace-theme-barber-shop.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace-inactive {\n  display: none;\n}\n\n.pace .pace-progress {\n  background-color: #ffffff;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 12px;\n  overflow: hidden;\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n\n.pace .pace-progress-inner {\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: -32px;\n  bottom: 0;\n\n  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.2)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.2)), color-stop(0.75, rgba(255, 255, 255, 0.2)), color-stop(0.75, transparent), to(transparent));\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);\n  background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);\n  -webkit-background-size: 32px 32px;\n  -moz-background-size: 32px 32px;\n  -o-background-size: 32px 32px;\n  background-size: 32px 32px;\n\n  -webkit-animation: pace-stripe-animation 500ms linear infinite;\n  -moz-animation: pace-stripe-animation 500ms linear infinite;\n  -ms-animation: pace-stripe-animation 500ms linear infinite;\n  -o-animation: pace-stripe-animation 500ms linear infinite;\n  animation: pace-stripe-animation 500ms linear infinite;\n}\n\n@-webkit-keyframes pace-stripe-animation {\n  0% { -webkit-transform: none; transform: none; }\n  100% { -webkit-transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n@-moz-keyframes pace-stripe-animation {\n  0% { -moz-transform: none; transform: none; }\n  100% { -moz-transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n@-o-keyframes pace-stripe-animation {\n  0% { -o-transform: none; transform: none; }\n  100% { -o-transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n@-ms-keyframes pace-stripe-animation {\n  0% { -ms-transform: none; transform: none; }\n  100% { -ms-transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n@keyframes pace-stripe-animation {\n  0% { transform: none; transform: none; }\n  100% { transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/white/pace-theme-big-counter.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace.pace-inactive .pace-progress {\n  display: none;\n}\n\n.pace .pace-progress {\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  right: 0;\n  height: 5rem;\n  width: 5rem;\n}\n\n.pace .pace-progress:after {\n  display: block;\n  position: absolute;\n  top: 0;\n  right: .5rem;\n  content: attr(data-progress-text);\n  font-family: \"Helvetica Neue\", sans-serif;\n  font-weight: 100;\n  font-size: 5rem;\n  line-height: 1;\n  text-align: right;\n  color: rgba(255, 255, 255, 0.19999999999999996);\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/white/pace-theme-bounce.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  width: 140px;\n  height: 300px;\n  position: fixed;\n  top: -90px;\n  right: -20px;\n  z-index: 2000;\n  -webkit-transform: scale(0);\n  -moz-transform: scale(0);\n  -ms-transform: scale(0);\n  -o-transform: scale(0);\n  transform: scale(0);\n  opacity: 0;\n  -webkit-transition: all 2s linear 0s;\n  -moz-transition: all 2s linear 0s;\n  transition: all 2s linear 0s;\n}\n\n.pace.pace-active {\n  -webkit-transform: scale(.25);\n  -moz-transform: scale(.25);\n  -ms-transform: scale(.25);\n  -o-transform: scale(.25);\n  transform: scale(.25);\n  opacity: 1;\n}\n\n.pace .pace-activity {\n  width: 140px;\n  height: 140px;\n  border-radius: 70px;\n  background: #ffffff;\n  position: absolute;\n  top: 0;\n  z-index: 1911;\n  -webkit-animation: pace-bounce 1s infinite;\n  -moz-animation: pace-bounce 1s infinite;\n  -o-animation: pace-bounce 1s infinite;\n  -ms-animation: pace-bounce 1s infinite;\n  animation: pace-bounce 1s infinite;\n}\n\n.pace .pace-progress {\n  position: absolute;\n  display: block;\n  left: 50%;\n  bottom: 0;\n  z-index: 1910;\n  margin-left: -30px;\n  width: 60px;\n  height: 75px;\n  background: rgba(20, 20, 20, .1);\n  box-shadow: 0 0 20px 35px rgba(20, 20, 20, .1);\n  border-radius: 30px / 40px;\n  -webkit-transform: scaleY(.3);\n  -moz-transform: scaleY(.3);\n  -ms-transform: scaleY(.3);\n  -o-transform: scaleY(.3);\n  transform: scaleY(.3);\n  -webkit-animation: pace-compress .5s infinite alternate;\n  -moz-animation: pace-compress .5s infinite alternate;\n  -o-animation: pace-compress .5s infinite alternate;\n  -ms-animation: pace-compress .5s infinite alternate;\n  animation: pace-compress .5s infinite alternate;\n}\n\n@-webkit-keyframes pace-bounce {\n  0% {\n    top: 0;\n    -webkit-animation-timing-function: ease-in;\n  }\n  40% {}\n  50% {\n    top: 140px;\n    height: 140px;\n    -webkit-animation-timing-function: ease-out;\n  }\n  55% {\n    top: 160px;\n    height: 120px;\n    border-radius: 70px / 60px;\n    -webkit-animation-timing-function: ease-in;\n  }\n  65% {\n    top: 120px;\n    height: 140px;\n    border-radius: 70px;\n    -webkit-animation-timing-function: ease-out;\n  }\n  95% {\n    top: 0;\n    -webkit-animation-timing-function: ease-in;\n  }\n  100% {\n    top: 0;\n    -webkit-animation-timing-function: ease-in;\n  }\n}\n\n@-moz-keyframes pace-bounce {\n  0% {\n    top: 0;\n    -moz-animation-timing-function: ease-in;\n  }\n  40% {}\n  50% {\n    top: 140px;\n    height: 140px;\n    -moz-animation-timing-function: ease-out;\n  }\n  55% {\n    top: 160px;\n    height: 120px;\n    border-radius: 70px / 60px;\n    -moz-animation-timing-function: ease-in;\n  }\n  65% {\n    top: 120px;\n    height: 140px;\n    border-radius: 70px;\n    -moz-animation-timing-function: ease-out;}\n  95% {\n    top: 0;\n    -moz-animation-timing-function: ease-in;\n  }\n  100% {top: 0;\n    -moz-animation-timing-function: ease-in;\n  }\n}\n\n@keyframes pace-bounce {\n  0% {\n    top: 0;\n    animation-timing-function: ease-in;\n  }\n  50% {\n    top: 140px;\n    height: 140px;\n    animation-timing-function: ease-out;\n  }\n  55% {\n    top: 160px;\n    height: 120px;\n    border-radius: 70px / 60px;\n    animation-timing-function: ease-in;\n  }\n  65% {\n    top: 120px;\n    height: 140px;\n    border-radius: 70px;\n    animation-timing-function: ease-out;\n  }\n  95% {\n    top: 0;\n    animation-timing-function: ease-in;\n  }\n  100% {\n    top: 0;\n    animation-timing-function: ease-in;\n  }\n}\n\n@-webkit-keyframes pace-compress {\n  0% {\n    bottom: 0;\n    margin-left: -30px;\n    width: 60px;\n    height: 75px;\n    background: rgba(20, 20, 20, .1);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .1);\n    border-radius: 30px / 40px;\n    -webkit-animation-timing-function: ease-in;\n  }\n  100% {\n    bottom: 30px;\n    margin-left: -10px;\n    width: 20px;\n    height: 5px;\n    background: rgba(20, 20, 20, .3);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .3);\n    border-radius: 20px / 20px;\n    -webkit-animation-timing-function: ease-out;\n  }\n}\n\n@-moz-keyframes pace-compress {\n  0% {\n    bottom: 0;\n    margin-left: -30px;\n    width: 60px;\n    height: 75px;\n    background: rgba(20, 20, 20, .1);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .1);\n    border-radius: 30px / 40px;\n    -moz-animation-timing-function: ease-in;\n  }\n  100% {\n    bottom: 30px;\n    margin-left: -10px;\n    width: 20px;\n    height: 5px;\n    background: rgba(20, 20, 20, .3);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .3);\n    border-radius: 20px / 20px;\n    -moz-animation-timing-function: ease-out;\n  }\n}\n\n@keyframes pace-compress {\n  0% {\n    bottom: 0;\n    margin-left: -30px;\n    width: 60px;\n    height: 75px;\n    background: rgba(20, 20, 20, .1);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .1);\n    border-radius: 30px / 40px;\n    animation-timing-function: ease-in;\n  }\n  100% {\n    bottom: 30px;\n    margin-left: -10px;\n    width: 20px;\n    height: 5px;\n    background: rgba(20, 20, 20, .3);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .3);\n    border-radius: 20px / 20px;\n    animation-timing-function: ease-out;\n  }\n}"
  },
  {
    "path": "public/frontend/plugins/pace/themes/white/pace-theme-center-atom.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace.pace-inactive {\n  display: none;\n}\n\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n\n  z-index: 2000;\n  position: fixed;\n  height: 60px;\n  width: 100px;\n  margin: auto;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n}\n\n.pace .pace-progress {\n  z-index: 2000;\n  position: absolute;\n  height: 60px;\n  width: 100px !important;\n}\n\n.pace .pace-progress:before {\n  content: attr(data-progress-text);\n  text-align: center;\n  color: #fff;\n  background: #ffffff;\n  border-radius: 50%;\n  font-family: \"Helvetica Neue\", sans-serif;\n  font-size: 14px;\n  font-weight: 100;\n  line-height: 1;\n  padding: 20% 0 7px;\n  width: 50%;\n  height: 40%;\n  margin: 10px 0 0 30px;\n  display: block;\n  z-index: 999;\n  position: absolute;\n}\n\n.pace .pace-progress:after {\n  border-radius: 50%;\n  border: 5px solid #ffffff;\n  content: ' ';\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 60px;\n  width: 100px;\n\n  -webkit-transform: rotate(90deg);\n     -moz-transform: rotate(90deg);\n       -o-transform: rotate(90deg);\n          transform: rotate(90deg);\n  -webkit-animation: spin-3 2s linear infinite;\n     -moz-animation: spin-3 2s linear infinite;\n       -o-animation: spin-3 2s linear infinite;\n          animation: spin-3 2s linear infinite;\n}\n\n.pace .pace-activity {\n  font-size: 15px;\n  line-height: 1;\n  z-index: 2000;\n  position: absolute;\n  height: 60px;\n  width: 100px;\n\n  display: block;\n}\n\n.pace .pace-activity:before {\n  border-radius: 50%;\n  border: 5px solid #ffffff;\n  content: ' ';\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 60px;\n  width: 100px;\n\n  -webkit-animation: spin-1 2s linear infinite;\n     -moz-animation: spin-1 2s linear infinite;\n       -o-animation: spin-1 2s linear infinite;\n          animation: spin-1 2s linear infinite;\n}\n\n.pace .pace-activity:after{\n  border-radius: 50%;\n  border: 5px solid #ffffff;\n  content: ' ';\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 60px;\n  width: 100px;\n\n  -webkit-transform: rotate(45deg);\n     -moz-transform: rotate(45deg);\n       -o-transform: rotate(45deg);\n          transform: rotate(45deg);\n  -webkit-animation: spin-2 2s linear infinite;\n     -moz-animation: spin-2 2s linear infinite;\n       -o-animation: spin-2 2s linear infinite;\n          animation: spin-2 2s linear infinite;\n}\n\n@-webkit-keyframes spin-1 {\n  0%  { -webkit-transform: rotate(0deg); }\n  100%{ -webkit-transform: rotate(359deg);}\n}\n@-moz-keyframes spin-1 {\n  0%  { -moz-transform: rotate(0deg); }\n  100%{ -moz-transform: rotate(359deg);}\n}\n@-o-keyframes spin-1 {\n  0%  { -o-transform: rotate(0deg); }\n  100%{ -o-transform: rotate(359deg);}\n}\n@keyframes spin-1 {\n  0%  { transform: rotate(0deg); }\n  100%{ transform: rotate(359deg);}\n}\n\n@-webkit-keyframes spin-2 {\n  0%  { -webkit-transform: rotate(59.8deg); }\n  100%{ -webkit-transform: rotate(418.8deg);}\n}\n@-moz-keyframes spin-2 {\n  0%  { -moz-transform: rotate(59.8deg); }\n  100%{ -moz-transform: rotate(418.8deg);}\n}\n@-o-keyframes spin-2 {\n  0%  { -o-transform: rotate(59.8deg); }\n  100%{ -o-transform: rotate(418.8deg);}\n}\n@keyframes spin-2 {\n  0%  { transform: rotate(59.8deg); }\n  100%{ transform: rotate(418.8deg);}\n}\n\n@-webkit-keyframes spin-3 {\n  0%  { -webkit-transform: rotate(119.6deg); }\n  100%{ -webkit-transform: rotate(478.6deg);}\n}\n@-moz-keyframes spin-3 {\n  0%  { -moz-transform: rotate(119.6deg); }\n  100%{ -moz-transform: rotate(478.6deg);}\n}\n@-o-keyframes spin-3 {\n  0%  { -o-transform: rotate(119.6deg); }\n  100%{ -o-transform: rotate(478.6deg);}\n}\n@keyframes spin-3 {\n  0%  { transform: rotate(119.6deg); }\n  100%{ transform: rotate(478.6deg);}\n}"
  },
  {
    "path": "public/frontend/plugins/pace/themes/white/pace-theme-center-circle.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n\n  -webkit-perspective: 12rem;\n  -moz-perspective: 12rem;\n  -ms-perspective: 12rem;\n  -o-perspective: 12rem;\n  perspective: 12rem;\n\n  z-index: 2000;\n  position: fixed;\n  height: 6rem;\n  width: 6rem;\n  margin: auto;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n}\n\n.pace.pace-inactive .pace-progress {\n  display: none;\n}\n\n.pace .pace-progress {\n  position: fixed;\n  z-index: 2000;\n  display: block;\n  position: absolute;\n  left: 0;\n  top: 0;\n  height: 6rem;\n  width: 6rem !important;\n  line-height: 6rem;\n  font-size: 2rem;\n  border-radius: 50%;\n  background: rgba(255, 255, 255, 0.8);\n  color: #fff;\n  font-family: \"Helvetica Neue\", sans-serif;\n  font-weight: 100;\n  text-align: center;\n\n  -webkit-animation: pace-3d-spinner linear infinite 2s;\n  -moz-animation: pace-3d-spinner linear infinite 2s;\n  -ms-animation: pace-3d-spinner linear infinite 2s;\n  -o-animation: pace-3d-spinner linear infinite 2s;\n  animation: pace-3d-spinner linear infinite 2s;\n\n  -webkit-transform-style: preserve-3d;\n  -moz-transform-style: preserve-3d;\n  -ms-transform-style: preserve-3d;\n  -o-transform-style: preserve-3d;\n  transform-style: preserve-3d;\n}\n\n.pace .pace-progress:after {\n  content: attr(data-progress-text);\n  display: block;\n}\n\n@-webkit-keyframes pace-3d-spinner {\n  from {\n    -webkit-transform: rotateY(0deg);\n  }\n  to {\n    -webkit-transform: rotateY(360deg);\n  }\n}\n\n@-moz-keyframes pace-3d-spinner {\n  from {\n    -moz-transform: rotateY(0deg);\n  }\n  to {\n    -moz-transform: rotateY(360deg);\n  }\n}\n\n@-ms-keyframes pace-3d-spinner {\n  from {\n    -ms-transform: rotateY(0deg);\n  }\n  to {\n    -ms-transform: rotateY(360deg);\n  }\n}\n\n@-o-keyframes pace-3d-spinner {\n  from {\n    -o-transform: rotateY(0deg);\n  }\n  to {\n    -o-transform: rotateY(360deg);\n  }\n}\n\n@keyframes pace-3d-spinner {\n  from {\n    transform: rotateY(0deg);\n  }\n  to {\n    transform: rotateY(360deg);\n  }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/white/pace-theme-center-radar.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n\n  z-index: 2000;\n  position: fixed;\n  height: 90px;\n  width: 90px;\n  margin: auto;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n}\n\n.pace.pace-inactive .pace-activity {\n  display: none;\n}\n\n.pace .pace-activity {\n  position: fixed;\n  z-index: 2000;\n  display: block;\n  position: absolute;\n  left: -30px;\n  top: -30px;\n  height: 90px;\n  width: 90px;\n  display: block;\n  border-width: 30px;\n  border-style: double;\n  border-color: #ffffff transparent transparent;\n  border-radius: 50%;\n\n  -webkit-animation: spin 1s linear infinite;\n     -moz-animation: spin 1s linear infinite;\n       -o-animation: spin 1s linear infinite;\n          animation: spin 1s linear infinite;\n}\n\n.pace .pace-activity:before {\n  content: ' ';\n  position: absolute;\n  top: 10px;\n  left: 10px;\n  height: 50px;\n  width: 50px;\n  display: block;\n  border-width: 10px;\n  border-style: solid;\n  border-color: #ffffff transparent transparent;\n  border-radius: 50%;\n}\n\n\n@-webkit-keyframes spin {\n  100% { -webkit-transform: rotate(359deg); }\n}\n\n@-moz-keyframes spin {\n  100% { -moz-transform: rotate(359deg); }\n}\n\n@-o-keyframes spin {\n  100% { -moz-transform: rotate(359deg); }\n}\n\n@keyframes spin {\n  100% {  transform: rotate(359deg); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/white/pace-theme-center-simple.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n\n  z-index: 2000;\n  position: fixed;\n  margin: auto;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  height: 5px;\n  width: 200px;\n  background: #fff;\n  border: 1px solid #ffffff;\n}\n\n.pace .pace-progress {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  -ms-box-sizing: border-box;\n  -o-box-sizing: border-box;\n  box-sizing: border-box;\n\n  -webkit-transition: width 1s ease-in-out 1s linear;\n  -moz-transition: width 1s ease-in-out 1s linear;\n  -ms-transition: width 1s ease-in-out 1s linear;\n  -o-transition: width 1s ease-in-out 1s linear;\n  transition: width 1s ease-in-out 1s linear;\n\n  -webkit-transform: translate3d(0, 0, 0);\n  -moz-transform: translate3d(0, 0, 0);\n  -ms-transform: translate3d(0, 0, 0);\n  -o-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n\n  max-width: 200px;\n  position: fixed;\n  z-index: 2000;\n  display: block;\n  position: absolute;\n  left: 0px;\n  top: 0px;\n  height: 100%;\n  background: #ffffff;\n}\n\n.pace.pace-inactive {\n  display: none;\n}"
  },
  {
    "path": "public/frontend/plugins/pace/themes/white/pace-theme-corner-indicator.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace .pace-activity {\n  display: block;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  right: 0;\n  width: 300px;\n  height: 300px;\n  background: #ffffff;\n  -webkit-transition: -webkit-transform 0.3s;\n  transition: transform 0.3s;\n  -webkit-transform: translateX(100%) translateY(-100%) rotate(45deg);\n  transform: translateX(100%) translateY(-100%) rotate(45deg);\n  pointer-events: none;\n}\n\n.pace.pace-active .pace-activity {\n  -webkit-transform: translateX(50%) translateY(-50%) rotate(45deg);\n  transform: translateX(50%) translateY(-50%) rotate(45deg);\n}\n\n.pace .pace-activity::before,\n.pace .pace-activity::after {\n    position: absolute;\n    bottom: 30px;\n    left: 50%;\n    display: block;\n    border: 5px solid #fff;\n    border-radius: 50%;\n    content: '';\n}\n\n.pace .pace-activity::before {\n    margin-left: -40px;\n    width: 80px;\n    height: 80px;\n    border-right-color: rgba(0, 0, 0, .2);\n    border-left-color: rgba(0, 0, 0, .2);\n    -webkit-animation: pace-rotation 3s linear infinite;\n    animation: pace-rotation 3s linear infinite;\n}\n\n.pace .pace-activity::after {\n    bottom: 50px;\n    margin-left: -20px;\n    width: 40px;\n    height: 40px;\n    border-top-color: rgba(0, 0, 0, .2);\n    border-bottom-color: rgba(0, 0, 0, .2);\n    -webkit-animation: pace-rotation 1s linear infinite;\n    animation: pace-rotation 1s linear infinite;\n}\n\n@-webkit-keyframes pace-rotation {\n  0% { -webkit-transform: rotate(0deg); }\n  100% { -webkit-transform: rotate(359deg); }\n}\n@keyframes pace-rotation {\n  0% { transform: rotate(0deg); }\n  100% { transform: rotate(359deg); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/white/pace-theme-fill-left.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace .pace-progress {\n  background-color: rgba(255, 255, 255, 0.19999999999999996);\n  position: fixed;\n  z-index: -1;\n  top: 0;\n  left: 0;\n  bottom: 0;\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/white/pace-theme-flash.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace-inactive {\n  display: none;\n}\n\n.pace .pace-progress {\n  background: #ffffff;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 2px;\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n\n.pace .pace-progress-inner {\n  display: block;\n  position: absolute;\n  right: 0px;\n  width: 100px;\n  height: 100%;\n  box-shadow: 0 0 10px #ffffff, 0 0 5px #ffffff;\n  opacity: 1.0;\n  -webkit-transform: rotate(3deg) translate(0px, -4px);\n  -moz-transform: rotate(3deg) translate(0px, -4px);\n  -ms-transform: rotate(3deg) translate(0px, -4px);\n  -o-transform: rotate(3deg) translate(0px, -4px);\n  transform: rotate(3deg) translate(0px, -4px);\n}\n\n.pace .pace-activity {\n  display: block;\n  position: fixed;\n  z-index: 2000;\n  top: 15px;\n  right: 15px;\n  width: 14px;\n  height: 14px;\n  border: solid 2px transparent;\n  border-top-color: #ffffff;\n  border-left-color: #ffffff;\n  border-radius: 10px;\n  -webkit-animation: pace-spinner 400ms linear infinite;\n  -moz-animation: pace-spinner 400ms linear infinite;\n  -ms-animation: pace-spinner 400ms linear infinite;\n  -o-animation: pace-spinner 400ms linear infinite;\n  animation: pace-spinner 400ms linear infinite;\n}\n\n@-webkit-keyframes pace-spinner {\n  0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@-moz-keyframes pace-spinner {\n  0% { -moz-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -moz-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@-o-keyframes pace-spinner {\n  0% { -o-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -o-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@-ms-keyframes pace-spinner {\n  0% { -ms-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -ms-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@keyframes pace-spinner {\n  0% { transform: rotate(0deg); transform: rotate(0deg); }\n  100% { transform: rotate(360deg); transform: rotate(360deg); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/white/pace-theme-flat-top.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace .pace-progress {\n  display: block;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 12px;\n  background: #ffffff;\n\n  -webkit-transition: -webkit-transform .3s, width 1s;\n  -moz-transition: width 1s;\n  -o-transform: width 1s;\n  transition: transform .3s, width 1s;\n\n  -webkit-transform: translateY(-50px);\n  transform: translateY(-50px);\n\n  pointer-events: none;\n}\n\n.pace.pace-active .pace-progress {\n  -webkit-transform: translateY(0);\n  transform: translateY(0);\n}"
  },
  {
    "path": "public/frontend/plugins/pace/themes/white/pace-theme-loading-bar.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  -ms-box-sizing: border-box;\n  -o-box-sizing: border-box;\n  box-sizing: border-box;\n\n  -webkit-border-radius: 10px;\n  -moz-border-radius: 10px;\n  border-radius: 10px;\n\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n\n  z-index: 2000;\n  position: fixed;\n  margin: auto;\n  top: 12px;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  width: 200px;\n  height: 25px;\n  border: 2px solid #ffffff;\n  background-color: #fff;\n}\n\n.pace .pace-progress {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  -ms-box-sizing: border-box;\n  -o-box-sizing: border-box;\n  box-sizing: border-box;\n\n  -webkit-border-radius: 5px;\n  -moz-border-radius: 5px;\n  border-radius: 5px;\n\n  -webkit-background-clip: padding-box;\n  -moz-background-clip: padding;\n  background-clip: padding-box;\n\n  -webkit-transition: width 1s ease-in-out 1s linear;\n  -moz-transition: width 1s ease-in-out 1s linear;\n  -ms-transition: width 1s ease-in-out 1s linear;\n  -o-transition: width 1s ease-in-out 1s linear;\n  transition: width 1s ease-in-out 1s linear;\n\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n\n  max-width: 190px;\n  position: fixed;\n  z-index: 2000;\n  display: block;\n  position: absolute;\n  left: 3px;\n  top: 3px;\n  height: 15px;\n  font-size: 12px;\n  background: #ffffff;\n  color: #ffffff;\n  line-height: 60px;\n  font-weight: bold;\n  font-family:  Helvetica, Arial, \"Lucida Grande\", sans-serif;\n}\n\n.pace .pace-progress:after {\n  content: attr(data-progress-text);\n  display: inline-block;\n}\n\n.pace.pace-inactive {\n  display: none;\n}"
  },
  {
    "path": "public/frontend/plugins/pace/themes/white/pace-theme-mac-osx.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace-inactive {\n  display: none;\n}\n\n.pace .pace-progress {\n  background-color: #ffffff;\n\n  color: #FFFFFF;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 12px;\n  overflow: hidden;\n\n  -webkit-border-radius: 0 0 4px 0;\n  -moz-border-radius: 0 0 4px 0;\n  -o-border-radius: 0 0 4px 0;\n  border-radius: 0 0 4px 0;\n\n  -webkit-box-shadow: inset -1px 0 rgba(0, 0, 0, 0.3), inset 0 -1px rgba(0, 0, 0, 0.3), inset 0 2px rgba(255, 255, 255, 0.5), inset 0 6px rgba(255, 255, 255, 0.3);\n  -moz-box-shadow: inset -1px 0 rgba(0, 0, 0, 0.3), inset 0 -1px rgba(0, 0, 0, 0.3), inset 0 2px rgba(255, 255, 255, 0.5), inset 0 6px rgba(255, 255, 255, 0.3);\n  -o-box-shadow: inset -1px 0 rgba(0, 0, 0, 0.3), inset 0 -1px rgba(0, 0, 0, 0.3), inset 0 2px rgba(255, 255, 255, 0.5), inset 0 6px rgba(255, 255, 255, 0.3);\n  box-shadow: inset -1px 0 rgba(0, 0, 0, 0.3), inset 0 -1px rgba(0, 0, 0, 0.3), inset 0 2px rgba(255, 255, 255, 0.5), inset 0 6px rgba(255, 255, 255, 0.3);\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n\n.pace .pace-progress-inner {\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: -28px;\n  bottom: 0;\n\n  background-image: -o-radial-gradient(rgba(179, 179, 179, 0.6) 0%, rgba(255, 255, 255, 0) 100%);\n  background-image: -moz-radial-gradient(rgba(179, 179, 179, 0.6) 0%, rgba(255, 255, 255, 0) 100%);\n  background-image: -webkit-radial-gradient(rgba(179, 179, 179, 0.6) 0%, rgba(255, 255, 255, 0) 100%);\n  background-image: radial-gradient(rgba(179, 179, 179, 0.6) 0%, rgba(255, 255, 255, 0) 100%);\n\n\n  -webkit-background-size: 28px 100%;\n  -moz-background-size: 28px 100%;\n  -o-background-size: 28px 100%;\n  background-size: 28px 100%;\n\n  -webkit-animation: pace-stripe-animation 500ms linear infinite;\n  -moz-animation: pace-stripe-animation 500ms linear infinite;\n  -ms-animation: pace-stripe-animation 500ms linear infinite;\n  -o-animation: pace-stripe-animation 500ms linear infinite;\n  animation: pace-stripe-animation 500ms linear infinite;\n}\n\n@-webkit-keyframes pace-stripe-animation {\n  0% { -webkit-transform: none; transform: none; }\n  100% { -webkit-transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n@-moz-keyframes pace-stripe-animation {\n  0% { -moz-transform: none; transform: none; }\n  100% { -moz-transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n@-o-keyframes pace-stripe-animation {\n  0% { -o-transform: none; transform: none; }\n  100% { -o-transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n@-ms-keyframes pace-stripe-animation {\n  0% { -ms-transform: none; transform: none; }\n  100% { -ms-transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n@keyframes pace-stripe-animation {\n  0% { transform: none; transform: none; }\n  100% { transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/white/pace-theme-minimal.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace .pace-progress {\n  background: #ffffff;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 2px;\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n\n.pace-inactive {\n  display: none;\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/yellow/pace-theme-barber-shop.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace-inactive {\n  display: none;\n}\n\n.pace .pace-progress {\n  background-color: #fcd25a;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 12px;\n  overflow: hidden;\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n\n.pace .pace-progress-inner {\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: -32px;\n  bottom: 0;\n\n  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.2)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.2)), color-stop(0.75, rgba(255, 255, 255, 0.2)), color-stop(0.75, transparent), to(transparent));\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);\n  background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent);\n  -webkit-background-size: 32px 32px;\n  -moz-background-size: 32px 32px;\n  -o-background-size: 32px 32px;\n  background-size: 32px 32px;\n\n  -webkit-animation: pace-stripe-animation 500ms linear infinite;\n  -moz-animation: pace-stripe-animation 500ms linear infinite;\n  -ms-animation: pace-stripe-animation 500ms linear infinite;\n  -o-animation: pace-stripe-animation 500ms linear infinite;\n  animation: pace-stripe-animation 500ms linear infinite;\n}\n\n@-webkit-keyframes pace-stripe-animation {\n  0% { -webkit-transform: none; transform: none; }\n  100% { -webkit-transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n@-moz-keyframes pace-stripe-animation {\n  0% { -moz-transform: none; transform: none; }\n  100% { -moz-transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n@-o-keyframes pace-stripe-animation {\n  0% { -o-transform: none; transform: none; }\n  100% { -o-transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n@-ms-keyframes pace-stripe-animation {\n  0% { -ms-transform: none; transform: none; }\n  100% { -ms-transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n@keyframes pace-stripe-animation {\n  0% { transform: none; transform: none; }\n  100% { transform: translate(-32px, 0); transform: translate(-32px, 0); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/yellow/pace-theme-big-counter.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace.pace-inactive .pace-progress {\n  display: none;\n}\n\n.pace .pace-progress {\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  right: 0;\n  height: 5rem;\n  width: 5rem;\n}\n\n.pace .pace-progress:after {\n  display: block;\n  position: absolute;\n  top: 0;\n  right: .5rem;\n  content: attr(data-progress-text);\n  font-family: \"Helvetica Neue\", sans-serif;\n  font-weight: 100;\n  font-size: 5rem;\n  line-height: 1;\n  text-align: right;\n  color: rgba(252, 210, 90, 0.19999999999999996);\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/yellow/pace-theme-bounce.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  width: 140px;\n  height: 300px;\n  position: fixed;\n  top: -90px;\n  right: -20px;\n  z-index: 2000;\n  -webkit-transform: scale(0);\n  -moz-transform: scale(0);\n  -ms-transform: scale(0);\n  -o-transform: scale(0);\n  transform: scale(0);\n  opacity: 0;\n  -webkit-transition: all 2s linear 0s;\n  -moz-transition: all 2s linear 0s;\n  transition: all 2s linear 0s;\n}\n\n.pace.pace-active {\n  -webkit-transform: scale(.25);\n  -moz-transform: scale(.25);\n  -ms-transform: scale(.25);\n  -o-transform: scale(.25);\n  transform: scale(.25);\n  opacity: 1;\n}\n\n.pace .pace-activity {\n  width: 140px;\n  height: 140px;\n  border-radius: 70px;\n  background: #fcd25a;\n  position: absolute;\n  top: 0;\n  z-index: 1911;\n  -webkit-animation: pace-bounce 1s infinite;\n  -moz-animation: pace-bounce 1s infinite;\n  -o-animation: pace-bounce 1s infinite;\n  -ms-animation: pace-bounce 1s infinite;\n  animation: pace-bounce 1s infinite;\n}\n\n.pace .pace-progress {\n  position: absolute;\n  display: block;\n  left: 50%;\n  bottom: 0;\n  z-index: 1910;\n  margin-left: -30px;\n  width: 60px;\n  height: 75px;\n  background: rgba(20, 20, 20, .1);\n  box-shadow: 0 0 20px 35px rgba(20, 20, 20, .1);\n  border-radius: 30px / 40px;\n  -webkit-transform: scaleY(.3);\n  -moz-transform: scaleY(.3);\n  -ms-transform: scaleY(.3);\n  -o-transform: scaleY(.3);\n  transform: scaleY(.3);\n  -webkit-animation: pace-compress .5s infinite alternate;\n  -moz-animation: pace-compress .5s infinite alternate;\n  -o-animation: pace-compress .5s infinite alternate;\n  -ms-animation: pace-compress .5s infinite alternate;\n  animation: pace-compress .5s infinite alternate;\n}\n\n@-webkit-keyframes pace-bounce {\n  0% {\n    top: 0;\n    -webkit-animation-timing-function: ease-in;\n  }\n  40% {}\n  50% {\n    top: 140px;\n    height: 140px;\n    -webkit-animation-timing-function: ease-out;\n  }\n  55% {\n    top: 160px;\n    height: 120px;\n    border-radius: 70px / 60px;\n    -webkit-animation-timing-function: ease-in;\n  }\n  65% {\n    top: 120px;\n    height: 140px;\n    border-radius: 70px;\n    -webkit-animation-timing-function: ease-out;\n  }\n  95% {\n    top: 0;\n    -webkit-animation-timing-function: ease-in;\n  }\n  100% {\n    top: 0;\n    -webkit-animation-timing-function: ease-in;\n  }\n}\n\n@-moz-keyframes pace-bounce {\n  0% {\n    top: 0;\n    -moz-animation-timing-function: ease-in;\n  }\n  40% {}\n  50% {\n    top: 140px;\n    height: 140px;\n    -moz-animation-timing-function: ease-out;\n  }\n  55% {\n    top: 160px;\n    height: 120px;\n    border-radius: 70px / 60px;\n    -moz-animation-timing-function: ease-in;\n  }\n  65% {\n    top: 120px;\n    height: 140px;\n    border-radius: 70px;\n    -moz-animation-timing-function: ease-out;}\n  95% {\n    top: 0;\n    -moz-animation-timing-function: ease-in;\n  }\n  100% {top: 0;\n    -moz-animation-timing-function: ease-in;\n  }\n}\n\n@keyframes pace-bounce {\n  0% {\n    top: 0;\n    animation-timing-function: ease-in;\n  }\n  50% {\n    top: 140px;\n    height: 140px;\n    animation-timing-function: ease-out;\n  }\n  55% {\n    top: 160px;\n    height: 120px;\n    border-radius: 70px / 60px;\n    animation-timing-function: ease-in;\n  }\n  65% {\n    top: 120px;\n    height: 140px;\n    border-radius: 70px;\n    animation-timing-function: ease-out;\n  }\n  95% {\n    top: 0;\n    animation-timing-function: ease-in;\n  }\n  100% {\n    top: 0;\n    animation-timing-function: ease-in;\n  }\n}\n\n@-webkit-keyframes pace-compress {\n  0% {\n    bottom: 0;\n    margin-left: -30px;\n    width: 60px;\n    height: 75px;\n    background: rgba(20, 20, 20, .1);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .1);\n    border-radius: 30px / 40px;\n    -webkit-animation-timing-function: ease-in;\n  }\n  100% {\n    bottom: 30px;\n    margin-left: -10px;\n    width: 20px;\n    height: 5px;\n    background: rgba(20, 20, 20, .3);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .3);\n    border-radius: 20px / 20px;\n    -webkit-animation-timing-function: ease-out;\n  }\n}\n\n@-moz-keyframes pace-compress {\n  0% {\n    bottom: 0;\n    margin-left: -30px;\n    width: 60px;\n    height: 75px;\n    background: rgba(20, 20, 20, .1);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .1);\n    border-radius: 30px / 40px;\n    -moz-animation-timing-function: ease-in;\n  }\n  100% {\n    bottom: 30px;\n    margin-left: -10px;\n    width: 20px;\n    height: 5px;\n    background: rgba(20, 20, 20, .3);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .3);\n    border-radius: 20px / 20px;\n    -moz-animation-timing-function: ease-out;\n  }\n}\n\n@keyframes pace-compress {\n  0% {\n    bottom: 0;\n    margin-left: -30px;\n    width: 60px;\n    height: 75px;\n    background: rgba(20, 20, 20, .1);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .1);\n    border-radius: 30px / 40px;\n    animation-timing-function: ease-in;\n  }\n  100% {\n    bottom: 30px;\n    margin-left: -10px;\n    width: 20px;\n    height: 5px;\n    background: rgba(20, 20, 20, .3);\n    box-shadow: 0 0 20px 35px rgba(20, 20, 20, .3);\n    border-radius: 20px / 20px;\n    animation-timing-function: ease-out;\n  }\n}"
  },
  {
    "path": "public/frontend/plugins/pace/themes/yellow/pace-theme-center-atom.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace.pace-inactive {\n  display: none;\n}\n\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n\n  z-index: 2000;\n  position: fixed;\n  height: 60px;\n  width: 100px;\n  margin: auto;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n}\n\n.pace .pace-progress {\n  z-index: 2000;\n  position: absolute;\n  height: 60px;\n  width: 100px !important;\n}\n\n.pace .pace-progress:before {\n  content: attr(data-progress-text);\n  text-align: center;\n  color: #fff;\n  background: #fcd25a;\n  border-radius: 50%;\n  font-family: \"Helvetica Neue\", sans-serif;\n  font-size: 14px;\n  font-weight: 100;\n  line-height: 1;\n  padding: 20% 0 7px;\n  width: 50%;\n  height: 40%;\n  margin: 10px 0 0 30px;\n  display: block;\n  z-index: 999;\n  position: absolute;\n}\n\n.pace .pace-progress:after {\n  border-radius: 50%;\n  border: 5px solid #fcd25a;\n  content: ' ';\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 60px;\n  width: 100px;\n\n  -webkit-transform: rotate(90deg);\n     -moz-transform: rotate(90deg);\n       -o-transform: rotate(90deg);\n          transform: rotate(90deg);\n  -webkit-animation: spin-3 2s linear infinite;\n     -moz-animation: spin-3 2s linear infinite;\n       -o-animation: spin-3 2s linear infinite;\n          animation: spin-3 2s linear infinite;\n}\n\n.pace .pace-activity {\n  font-size: 15px;\n  line-height: 1;\n  z-index: 2000;\n  position: absolute;\n  height: 60px;\n  width: 100px;\n\n  display: block;\n}\n\n.pace .pace-activity:before {\n  border-radius: 50%;\n  border: 5px solid #fcd25a;\n  content: ' ';\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 60px;\n  width: 100px;\n\n  -webkit-animation: spin-1 2s linear infinite;\n     -moz-animation: spin-1 2s linear infinite;\n       -o-animation: spin-1 2s linear infinite;\n          animation: spin-1 2s linear infinite;\n}\n\n.pace .pace-activity:after{\n  border-radius: 50%;\n  border: 5px solid #fcd25a;\n  content: ' ';\n  display: block;\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 60px;\n  width: 100px;\n\n  -webkit-transform: rotate(45deg);\n     -moz-transform: rotate(45deg);\n       -o-transform: rotate(45deg);\n          transform: rotate(45deg);\n  -webkit-animation: spin-2 2s linear infinite;\n     -moz-animation: spin-2 2s linear infinite;\n       -o-animation: spin-2 2s linear infinite;\n          animation: spin-2 2s linear infinite;\n}\n\n@-webkit-keyframes spin-1 {\n  0%  { -webkit-transform: rotate(0deg); }\n  100%{ -webkit-transform: rotate(359deg);}\n}\n@-moz-keyframes spin-1 {\n  0%  { -moz-transform: rotate(0deg); }\n  100%{ -moz-transform: rotate(359deg);}\n}\n@-o-keyframes spin-1 {\n  0%  { -o-transform: rotate(0deg); }\n  100%{ -o-transform: rotate(359deg);}\n}\n@keyframes spin-1 {\n  0%  { transform: rotate(0deg); }\n  100%{ transform: rotate(359deg);}\n}\n\n@-webkit-keyframes spin-2 {\n  0%  { -webkit-transform: rotate(59.8deg); }\n  100%{ -webkit-transform: rotate(418.8deg);}\n}\n@-moz-keyframes spin-2 {\n  0%  { -moz-transform: rotate(59.8deg); }\n  100%{ -moz-transform: rotate(418.8deg);}\n}\n@-o-keyframes spin-2 {\n  0%  { -o-transform: rotate(59.8deg); }\n  100%{ -o-transform: rotate(418.8deg);}\n}\n@keyframes spin-2 {\n  0%  { transform: rotate(59.8deg); }\n  100%{ transform: rotate(418.8deg);}\n}\n\n@-webkit-keyframes spin-3 {\n  0%  { -webkit-transform: rotate(119.6deg); }\n  100%{ -webkit-transform: rotate(478.6deg);}\n}\n@-moz-keyframes spin-3 {\n  0%  { -moz-transform: rotate(119.6deg); }\n  100%{ -moz-transform: rotate(478.6deg);}\n}\n@-o-keyframes spin-3 {\n  0%  { -o-transform: rotate(119.6deg); }\n  100%{ -o-transform: rotate(478.6deg);}\n}\n@keyframes spin-3 {\n  0%  { transform: rotate(119.6deg); }\n  100%{ transform: rotate(478.6deg);}\n}"
  },
  {
    "path": "public/frontend/plugins/pace/themes/yellow/pace-theme-center-circle.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n\n  -webkit-perspective: 12rem;\n  -moz-perspective: 12rem;\n  -ms-perspective: 12rem;\n  -o-perspective: 12rem;\n  perspective: 12rem;\n\n  z-index: 2000;\n  position: fixed;\n  height: 6rem;\n  width: 6rem;\n  margin: auto;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n}\n\n.pace.pace-inactive .pace-progress {\n  display: none;\n}\n\n.pace .pace-progress {\n  position: fixed;\n  z-index: 2000;\n  display: block;\n  position: absolute;\n  left: 0;\n  top: 0;\n  height: 6rem;\n  width: 6rem !important;\n  line-height: 6rem;\n  font-size: 2rem;\n  border-radius: 50%;\n  background: rgba(252, 210, 90, 0.8);\n  color: #fff;\n  font-family: \"Helvetica Neue\", sans-serif;\n  font-weight: 100;\n  text-align: center;\n\n  -webkit-animation: pace-3d-spinner linear infinite 2s;\n  -moz-animation: pace-3d-spinner linear infinite 2s;\n  -ms-animation: pace-3d-spinner linear infinite 2s;\n  -o-animation: pace-3d-spinner linear infinite 2s;\n  animation: pace-3d-spinner linear infinite 2s;\n\n  -webkit-transform-style: preserve-3d;\n  -moz-transform-style: preserve-3d;\n  -ms-transform-style: preserve-3d;\n  -o-transform-style: preserve-3d;\n  transform-style: preserve-3d;\n}\n\n.pace .pace-progress:after {\n  content: attr(data-progress-text);\n  display: block;\n}\n\n@-webkit-keyframes pace-3d-spinner {\n  from {\n    -webkit-transform: rotateY(0deg);\n  }\n  to {\n    -webkit-transform: rotateY(360deg);\n  }\n}\n\n@-moz-keyframes pace-3d-spinner {\n  from {\n    -moz-transform: rotateY(0deg);\n  }\n  to {\n    -moz-transform: rotateY(360deg);\n  }\n}\n\n@-ms-keyframes pace-3d-spinner {\n  from {\n    -ms-transform: rotateY(0deg);\n  }\n  to {\n    -ms-transform: rotateY(360deg);\n  }\n}\n\n@-o-keyframes pace-3d-spinner {\n  from {\n    -o-transform: rotateY(0deg);\n  }\n  to {\n    -o-transform: rotateY(360deg);\n  }\n}\n\n@keyframes pace-3d-spinner {\n  from {\n    transform: rotateY(0deg);\n  }\n  to {\n    transform: rotateY(360deg);\n  }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/yellow/pace-theme-center-radar.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n\n  z-index: 2000;\n  position: fixed;\n  height: 90px;\n  width: 90px;\n  margin: auto;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n}\n\n.pace.pace-inactive .pace-activity {\n  display: none;\n}\n\n.pace .pace-activity {\n  position: fixed;\n  z-index: 2000;\n  display: block;\n  position: absolute;\n  left: -30px;\n  top: -30px;\n  height: 90px;\n  width: 90px;\n  display: block;\n  border-width: 30px;\n  border-style: double;\n  border-color: #fcd25a transparent transparent;\n  border-radius: 50%;\n\n  -webkit-animation: spin 1s linear infinite;\n     -moz-animation: spin 1s linear infinite;\n       -o-animation: spin 1s linear infinite;\n          animation: spin 1s linear infinite;\n}\n\n.pace .pace-activity:before {\n  content: ' ';\n  position: absolute;\n  top: 10px;\n  left: 10px;\n  height: 50px;\n  width: 50px;\n  display: block;\n  border-width: 10px;\n  border-style: solid;\n  border-color: #fcd25a transparent transparent;\n  border-radius: 50%;\n}\n\n\n@-webkit-keyframes spin {\n  100% { -webkit-transform: rotate(359deg); }\n}\n\n@-moz-keyframes spin {\n  100% { -moz-transform: rotate(359deg); }\n}\n\n@-o-keyframes spin {\n  100% { -moz-transform: rotate(359deg); }\n}\n\n@keyframes spin {\n  100% {  transform: rotate(359deg); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/yellow/pace-theme-center-simple.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n\n  z-index: 2000;\n  position: fixed;\n  margin: auto;\n  top: 0;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  height: 5px;\n  width: 200px;\n  background: #fff;\n  border: 1px solid #fcd25a;\n}\n\n.pace .pace-progress {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  -ms-box-sizing: border-box;\n  -o-box-sizing: border-box;\n  box-sizing: border-box;\n\n  -webkit-transition: width 1s ease-in-out 1s linear;\n  -moz-transition: width 1s ease-in-out 1s linear;\n  -ms-transition: width 1s ease-in-out 1s linear;\n  -o-transition: width 1s ease-in-out 1s linear;\n  transition: width 1s ease-in-out 1s linear;\n\n  -webkit-transform: translate3d(0, 0, 0);\n  -moz-transform: translate3d(0, 0, 0);\n  -ms-transform: translate3d(0, 0, 0);\n  -o-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n\n  max-width: 200px;\n  position: fixed;\n  z-index: 2000;\n  display: block;\n  position: absolute;\n  left: 0px;\n  top: 0px;\n  height: 100%;\n  background: #fcd25a;\n}\n\n.pace.pace-inactive {\n  display: none;\n}"
  },
  {
    "path": "public/frontend/plugins/pace/themes/yellow/pace-theme-corner-indicator.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace .pace-activity {\n  display: block;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  right: 0;\n  width: 300px;\n  height: 300px;\n  background: #fcd25a;\n  -webkit-transition: -webkit-transform 0.3s;\n  transition: transform 0.3s;\n  -webkit-transform: translateX(100%) translateY(-100%) rotate(45deg);\n  transform: translateX(100%) translateY(-100%) rotate(45deg);\n  pointer-events: none;\n}\n\n.pace.pace-active .pace-activity {\n  -webkit-transform: translateX(50%) translateY(-50%) rotate(45deg);\n  transform: translateX(50%) translateY(-50%) rotate(45deg);\n}\n\n.pace .pace-activity::before,\n.pace .pace-activity::after {\n    position: absolute;\n    bottom: 30px;\n    left: 50%;\n    display: block;\n    border: 5px solid #fff;\n    border-radius: 50%;\n    content: '';\n}\n\n.pace .pace-activity::before {\n    margin-left: -40px;\n    width: 80px;\n    height: 80px;\n    border-right-color: rgba(0, 0, 0, .2);\n    border-left-color: rgba(0, 0, 0, .2);\n    -webkit-animation: pace-rotation 3s linear infinite;\n    animation: pace-rotation 3s linear infinite;\n}\n\n.pace .pace-activity::after {\n    bottom: 50px;\n    margin-left: -20px;\n    width: 40px;\n    height: 40px;\n    border-top-color: rgba(0, 0, 0, .2);\n    border-bottom-color: rgba(0, 0, 0, .2);\n    -webkit-animation: pace-rotation 1s linear infinite;\n    animation: pace-rotation 1s linear infinite;\n}\n\n@-webkit-keyframes pace-rotation {\n  0% { -webkit-transform: rotate(0deg); }\n  100% { -webkit-transform: rotate(359deg); }\n}\n@keyframes pace-rotation {\n  0% { transform: rotate(0deg); }\n  100% { transform: rotate(359deg); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/yellow/pace-theme-fill-left.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace .pace-progress {\n  background-color: rgba(252, 210, 90, 0.19999999999999996);\n  position: fixed;\n  z-index: -1;\n  top: 0;\n  left: 0;\n  bottom: 0;\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/yellow/pace-theme-flash.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace-inactive {\n  display: none;\n}\n\n.pace .pace-progress {\n  background: #fcd25a;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 2px;\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n\n.pace .pace-progress-inner {\n  display: block;\n  position: absolute;\n  right: 0px;\n  width: 100px;\n  height: 100%;\n  box-shadow: 0 0 10px #fcd25a, 0 0 5px #fcd25a;\n  opacity: 1.0;\n  -webkit-transform: rotate(3deg) translate(0px, -4px);\n  -moz-transform: rotate(3deg) translate(0px, -4px);\n  -ms-transform: rotate(3deg) translate(0px, -4px);\n  -o-transform: rotate(3deg) translate(0px, -4px);\n  transform: rotate(3deg) translate(0px, -4px);\n}\n\n.pace .pace-activity {\n  display: block;\n  position: fixed;\n  z-index: 2000;\n  top: 15px;\n  right: 15px;\n  width: 14px;\n  height: 14px;\n  border: solid 2px transparent;\n  border-top-color: #fcd25a;\n  border-left-color: #fcd25a;\n  border-radius: 10px;\n  -webkit-animation: pace-spinner 400ms linear infinite;\n  -moz-animation: pace-spinner 400ms linear infinite;\n  -ms-animation: pace-spinner 400ms linear infinite;\n  -o-animation: pace-spinner 400ms linear infinite;\n  animation: pace-spinner 400ms linear infinite;\n}\n\n@-webkit-keyframes pace-spinner {\n  0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@-moz-keyframes pace-spinner {\n  0% { -moz-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -moz-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@-o-keyframes pace-spinner {\n  0% { -o-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -o-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@-ms-keyframes pace-spinner {\n  0% { -ms-transform: rotate(0deg); transform: rotate(0deg); }\n  100% { -ms-transform: rotate(360deg); transform: rotate(360deg); }\n}\n@keyframes pace-spinner {\n  0% { transform: rotate(0deg); transform: rotate(0deg); }\n  100% { transform: rotate(360deg); transform: rotate(360deg); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/yellow/pace-theme-flat-top.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace .pace-progress {\n  display: block;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 12px;\n  background: #fcd25a;\n\n  -webkit-transition: -webkit-transform .3s, width 1s;\n  -moz-transition: width 1s;\n  -o-transform: width 1s;\n  transition: transform .3s, width 1s;\n\n  -webkit-transform: translateY(-50px);\n  transform: translateY(-50px);\n\n  pointer-events: none;\n}\n\n.pace.pace-active .pace-progress {\n  -webkit-transform: translateY(0);\n  transform: translateY(0);\n}"
  },
  {
    "path": "public/frontend/plugins/pace/themes/yellow/pace-theme-loading-bar.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  -ms-box-sizing: border-box;\n  -o-box-sizing: border-box;\n  box-sizing: border-box;\n\n  -webkit-border-radius: 10px;\n  -moz-border-radius: 10px;\n  border-radius: 10px;\n\n  -moz-background-clip: padding;\n  -webkit-background-clip: padding-box;\n  background-clip: padding-box;\n\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n\n  z-index: 2000;\n  position: fixed;\n  margin: auto;\n  top: 12px;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  width: 200px;\n  height: 25px;\n  border: 2px solid #fcd25a;\n  background-color: #fff;\n}\n\n.pace .pace-progress {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  -ms-box-sizing: border-box;\n  -o-box-sizing: border-box;\n  box-sizing: border-box;\n\n  -webkit-border-radius: 5px;\n  -moz-border-radius: 5px;\n  border-radius: 5px;\n\n  -webkit-background-clip: padding-box;\n  -moz-background-clip: padding;\n  background-clip: padding-box;\n\n  -webkit-transition: width 1s ease-in-out 1s linear;\n  -moz-transition: width 1s ease-in-out 1s linear;\n  -ms-transition: width 1s ease-in-out 1s linear;\n  -o-transition: width 1s ease-in-out 1s linear;\n  transition: width 1s ease-in-out 1s linear;\n\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n\n  max-width: 190px;\n  position: fixed;\n  z-index: 2000;\n  display: block;\n  position: absolute;\n  left: 3px;\n  top: 3px;\n  height: 15px;\n  font-size: 12px;\n  background: #fcd25a;\n  color: #fcd25a;\n  line-height: 60px;\n  font-weight: bold;\n  font-family:  Helvetica, Arial, \"Lucida Grande\", sans-serif;\n}\n\n.pace .pace-progress:after {\n  content: attr(data-progress-text);\n  display: inline-block;\n}\n\n.pace.pace-inactive {\n  display: none;\n}"
  },
  {
    "path": "public/frontend/plugins/pace/themes/yellow/pace-theme-mac-osx.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace {\n  -webkit-pointer-events: none;\n  pointer-events: none;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace-inactive {\n  display: none;\n}\n\n.pace .pace-progress {\n  background-color: #fcd25a;\n\n  color: #FDE8AE;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 12px;\n  overflow: hidden;\n\n  -webkit-border-radius: 0 0 4px 0;\n  -moz-border-radius: 0 0 4px 0;\n  -o-border-radius: 0 0 4px 0;\n  border-radius: 0 0 4px 0;\n\n  -webkit-box-shadow: inset -1px 0 rgba(0, 0, 0, 0.3), inset 0 -1px rgba(0, 0, 0, 0.3), inset 0 2px rgba(255, 255, 255, 0.5), inset 0 6px rgba(255, 255, 255, 0.3);\n  -moz-box-shadow: inset -1px 0 rgba(0, 0, 0, 0.3), inset 0 -1px rgba(0, 0, 0, 0.3), inset 0 2px rgba(255, 255, 255, 0.5), inset 0 6px rgba(255, 255, 255, 0.3);\n  -o-box-shadow: inset -1px 0 rgba(0, 0, 0, 0.3), inset 0 -1px rgba(0, 0, 0, 0.3), inset 0 2px rgba(255, 255, 255, 0.5), inset 0 6px rgba(255, 255, 255, 0.3);\n  box-shadow: inset -1px 0 rgba(0, 0, 0, 0.3), inset 0 -1px rgba(0, 0, 0, 0.3), inset 0 2px rgba(255, 255, 255, 0.5), inset 0 6px rgba(255, 255, 255, 0.3);\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n\n.pace .pace-progress-inner {\n  position: absolute;\n  top: 0;\n  left: 0;\n  right: -28px;\n  bottom: 0;\n\n  background-image: -o-radial-gradient(rgba(234, 173, 5, 0.6) 0%, rgba(252, 210, 90, 0) 100%);\n  background-image: -moz-radial-gradient(rgba(234, 173, 5, 0.6) 0%, rgba(252, 210, 90, 0) 100%);\n  background-image: -webkit-radial-gradient(rgba(234, 173, 5, 0.6) 0%, rgba(252, 210, 90, 0) 100%);\n  background-image: radial-gradient(rgba(234, 173, 5, 0.6) 0%, rgba(252, 210, 90, 0) 100%);\n\n\n  -webkit-background-size: 28px 100%;\n  -moz-background-size: 28px 100%;\n  -o-background-size: 28px 100%;\n  background-size: 28px 100%;\n\n  -webkit-animation: pace-stripe-animation 500ms linear infinite;\n  -moz-animation: pace-stripe-animation 500ms linear infinite;\n  -ms-animation: pace-stripe-animation 500ms linear infinite;\n  -o-animation: pace-stripe-animation 500ms linear infinite;\n  animation: pace-stripe-animation 500ms linear infinite;\n}\n\n@-webkit-keyframes pace-stripe-animation {\n  0% { -webkit-transform: none; transform: none; }\n  100% { -webkit-transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n@-moz-keyframes pace-stripe-animation {\n  0% { -moz-transform: none; transform: none; }\n  100% { -moz-transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n@-o-keyframes pace-stripe-animation {\n  0% { -o-transform: none; transform: none; }\n  100% { -o-transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n@-ms-keyframes pace-stripe-animation {\n  0% { -ms-transform: none; transform: none; }\n  100% { -ms-transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n@keyframes pace-stripe-animation {\n  0% { transform: none; transform: none; }\n  100% { transform: translate(-28px, 0); transform: translate(-28px, 0); }\n}\n"
  },
  {
    "path": "public/frontend/plugins/pace/themes/yellow/pace-theme-minimal.css",
    "content": "/* This is a compiled file, you should be editing the file in the templates directory */\n.pace .pace-progress {\n  background: #fcd25a;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  left: 0;\n  height: 2px;\n\n  -webkit-transition: width 1s;\n  -moz-transition: width 1s;\n  -o-transition: width 1s;\n  transition: width 1s;\n}\n\n.pace-inactive {\n  display: none;\n}\n"
  },
  {
    "path": "public/frontend/plugins/scrollMonitor/MIT-LICENSE.txt",
    "content": "Copyright 2013 Stu Kabakoff and contributors\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "public/frontend/plugins/scrollMonitor/README.md",
    "content": "scrollMonitor\n=============\n\nThe scroll monitor allows you to receive events when elements enter or exit the viewport. It does this using watcher objects, which watch an element and trigger events. Watcher objects also contain information about the element they watch, including the element's visibility and location relative to the viewport.\n\nThe scroll monitor was designed to be very fast. On each scroll event the DOM is only touched twice, once to find the document height and again to find the viewport top. No variables are declared, nor are any objects, arrays, or strings created.\n\nWatchers are _very_ cheap. Create them liberally.\n\n## Basic Usage\n\n```javascript\nvar scrollMonitor = require(\"./scrollMonitor\"); // if you're not using require, you can use the scrollMonitor global.\nvar myElement = document.getElementById(\"itemToWatch\");\n\nvar elementWatcher = scrollMonitor.create( myElement );\n\nelementWatcher.enterViewport(function() {\n    console.log( 'I have entered the viewport' );\n});\nelementWatcher.exitViewport(function() {\n    console.log( 'I have left the viewport' );\n});\n```\n## Demos\n\n* [Stress Test](http://sakabako.github.com/scrollMonitor/demos/stress.html) - Test with as many watchers as you'd like\n* [Fixed Positioning and Locking](http://sakabako.github.com/scrollMonitor/demos/fixed.html)\n* [Anchored section headers](http://sakabako.github.com/scrollMonitor/demos/list.html)\n* [Complex sidebar behavior](http://sakabako.github.com/scrollMonitor/demos/scoreboard.html)\n\n## Watcher Objects\n\nCreate watcher objects with `scrollMonitor.create( watchItem )`. An optional second argument lets you receive events before or after this element enters the viewport. _See \"[Offsets](#offsets)\"_.\n\n`watchItem` can be one of the following:\n\n* **DOM Element** - the watcher will watch the area contained by the DOM element.\n* **Object** - `obj.top` and `obj.bottom` will be used for watcher.top and watcher.bottom.\n* **Number** - the watcher will watch a 1px area this many pixels from the top. Negative numbers will watch from the bottom.\n* **jQuery object** - it will use the first DOM element.\n* **string** - it will use the string as a CSS selector and watch the first match.\n\nWatchers are automatically recalculated on the first scroll event after the height of the document changes.\n\n### Events\n\nElement watchers trigger six events:\n\n* `visibilityChange` - when the element enters or exits the viewport.\n* `stateChange` - similar to `visibilityChange` but is also called if the element goes from below the viewport to above it in one scroll event or when the element goes from partially to fully visible or vice versa.\n* `enterViewport` - when the element enters the viewport.\n* `fullyEnterViewport` - when the element is completely in the viewport [1].\n* `exitViewport` - when the element completely leaves the viewport.\n* `partiallyExitViewport` - when the element goes from being fully in the viewport to only partially [2].\n\n1. If the element is larger than the viewport `fullyEnterViewport` will be triggered when the element spans the entire viewport.\n2. If the element is larger than the viewport `partiallyExitViewport` will be triggered when the element no longer spans the entire viewport.\n\n### Properties\n\n* `elementWatcher.isInViewport` - true if any part of the element is visible, false if not.\n* `elementWatcher.isFullyInViewport` - true if the entire element is visible [1].\n* `elementWatcher.isAboveViewport` - true if any part of the element is above the viewport.\n* `elementWatcher.isBelowViewport` - true if any part of the element is below the viewport.\n* `elementWatcher.top` - distance from the top of the document to the top of this watcher.\n* `elementWatcher.bottom` - distance from the top of the document to the bottom of this watcher.\n* `elementWatcher.height` - top - bottom.\n* `elementWatcher.watchItem` - the element, number, or object that this watcher is watching.\n* `elementWatcher.offsets` - an object that determines the offsets of this watcher. _See \"[Offsets](#offsets)\"_.\n\n1. If the element is larger than the viewport `isFullyInViewport` is true when the element spans the entire viewport.\n\n### Methods\n\n* `elementWatcher.on/off/one` - the standard event functions.\n* `elementWatcher.recalculateLocation` - recalculates the location of the element in relation to the document.\n* `elementWatcher.destroy` - removes this watcher and clears out its event listeners.\n* `elementWatcher.lock` - locks this watcher at its current location. _See \"[Locking](#locking)\"_.\n* `elementWatcher.unlock` - unlocks this watcher.\n\nThese methods are automatically called by the scrollMonitor, you should never need them:\n\n* `elementWatcher.update` - updates the boolean properties in relation to the viewport. Does not trigger events.\n* `elementWatcher.triggerCallbacks` - triggers any callbacks that need to be called.\n\n### Locking\n\nSometimes you want to change the element you're watching, but want to continue watching the original area. One common use case is setting `position: fixed` on an element when it exits the viewport, then removing positioning when it when it reenters.\n\n```javascript\nvar watcher = scrollMonitor.create( $element );\nwatcher.lock(); // ensure that we're always watching the place the element originally was\n\nwatcher.exitViewport(function() {\n    $element.addClass('fixed');\n});\nwatcher.enterViewport(function() {\n    $element.removeClass('fixed');\n});\n```\n\nBecause the watcher was locked on the second line, the scroll monitor will never recalculate its location.\n\n### Offsets\n\nIf you want to trigger an event when the edge of an element is near the edge of the viewport, you can use offsets. The offset is the second argument to `scrollMonitor.create`.\n\nThis will trigger events when an element gets within 200px of the viewport: \n```javascript\nscrollMonitor.create( element, 200 )\n```\n\nThis will trigger when the element is 200px inside the viewport:\n```javascript\nscrollMonitor.create( element, -200 )\n```\n\n If you only want it to affect the top and bottom differently you can send an object in. \n ```javascript\n scrollMonitor.create( element, {top: 200, bottom: 50})\n ```\n\n If you only want it to affect the top and not the bottom you can use only one property in.\n ```javascript\n scrollMonitor.create( element, {top: 200})\n ```\n\n## scrollMonitor Module\n\n### Methods\n* `scrollMonitor.create( watchItem, offsets )` - Returns a new watcher. `watchItem` is a DOM element, jQuery object, CSS selector, object with .top and .bottom, or a number.\n* `scrollMonitor.update()` - update and trigger all watchers.\n* `scrollMonitor.recalculateLocations()` - recalculate the location of all unlocked watchers and trigger if needed.\n\n### Properties\n* `scrollMonitor.viewportTop` - distance from the top of the document to the top of the viewport.\n* `scrollMonitor.viewportBottom` - distance from the top of the document to the bottom of the viewport.\n* `scrollMonitor.viewportHeight` - height of the viewport.\n* `scrollMonitor.documentHeight` - height of the document.\n\n"
  },
  {
    "path": "public/frontend/plugins/scrollMonitor/bower.json",
    "content": "{\n  \"name\": \"scrollMonitor\",\n  \"version\": \"1.0.7\",\n  \"main\": \"./scrollMonitor.js\",\n  \"dependencies\": {\n\t\"jquery\": \">= 1.2.6\"\n  }\n}"
  },
  {
    "path": "public/frontend/plugins/scrollMonitor/demos/fixed.html",
    "content": "<!doctype html>\n<head>\n\t<style type=\"text/css\">\n\t\tbody {\n\t\t\theight: 10000px;\n\t\t}\n\t\tspan {\n\t\t\tposition: absolute;\n\t\t\ttop: 100px;\n\t\t\tleft: 100px;\n\t\t\twidth: 300px;\n\t\t\theight: 200px;\n\n\t\t\tbackground-color: gray;\n\t\t}\n\t\tspan.two {\n\t\t\tleft: 400px;\n\t\t\ttop: 1000px;\n\t\t\tbackground-color: red;\n\t\t}\n\t\tspan.three {\n\t\t\tleft: 700px;\n\t\t\ttop: 2000px;\n\t\t\tbackground-color: blue;\n\t\t}\n\t\tspan.fixed {\n\t\t\tposition: fixed;\n\t\t\ttop: 0;\n\t\t}\n\t​</style>\n</head>\n<body>\n<div>\n\t<span class=\"one\">One!</span>\n\t<span class=\"two\">Two!</span>\n\t<span class=\"three\">Three!</span>\n</div>\n<a href=\"https://github.com/sakabako/scrollMonitor\"><img style=\"position: fixed; top: 0; right: 0; border: 0;\" src=\"https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png\" alt=\"Fork me on GitHub\"></a>\n<script src=\"http://cdnjs.cloudflare.com/ajax/libs/jquery/1.8.3/jquery.min.js\"></script>\n<script src=\"../scrollMonitor.js\"></script>\n<script type=\"text/javascript\">\n//requirejs(['../scrollMonitor'], function( scrollMonitor ) {\n\n\t$('span').each(function(i, element) {\n\n\t\tvar watcher = scrollMonitor.create( element );\n\n\t\twatcher.lock();\n\n\t\twatcher.stateChange(function() {\n\t\t\t$(element).toggleClass('fixed', this.isAboveViewport)\n\t\t});\n\n\t})\n//});\n</script>\n</body>"
  },
  {
    "path": "public/frontend/plugins/scrollMonitor/demos/list.html",
    "content": "<!doctype html>\n<head>\n\t<style type=\"text/css\">\n\t\tbody, html {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0;\n\t\t\tfont-family: helvetica, arial, sans-serif;\n\t\t}\n\t\tsection {\n\t\t\tpadding: 60px 0 20px 0;\n\t\t\tmargin: 0;\n\t\t\tposition: relative;\n\t\t}\n\t\th2 {\n\t\t\theight: 29px;\n\t\t\tpadding: 10px;\n\t\t\tmargin: 0;\n\t\t\tbackground-color: white;\n\t\t\tborder-top: 1px solid #aaa;\n\t\t\tposition: absolute;\n\t\t\ttop: 0;\n\t\t\tleft: 0;\n\t\t\tright: 0;\n\t\t}\n\t\t\n\t\tsection.bottom h2 {\n\t\t\ttop: auto;\n\t\t\tbottom: 0;\n\t\t}\n\t\t\n\t\tsection.fixed h2 {\n\t\t\tposition: fixed;\n\t\t}\n\t\t\n\t\tul {\n\t\t\tpadding: 0 0 0 2em;\n\t\t\tmargin: 0;\n\t\t\tline-height: 1.5\n\t\t}\n\t\t\n\t​</style>\n</head>\n<body>\n<div id=\"target\"></div>\n<a href=\"https://github.com/sakabako/scrollMonitor\"><img style=\"position: fixed; top: 0; right: 0; border: 0;\" src=\"https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png\" alt=\"Fork me on GitHub\"></a>\n<script src=\"http://cdnjs.cloudflare.com/ajax/libs/jquery/1.8.3/jquery.min.js\"></script>\n<script src=\"../scrollMonitor.js\"></script>\n<script type=\"text/javascript\">\n//requirejs(['../scrollMonitor'], function( scrollMonitor ) {\n\t$.getJSON('./listdata.json', function( data ) {\n\t\t\n\t\t// fill the document with HTML\n\t\tvar htmlBuffer = [];\n\t\t$.each(data, function( type, beerMap ) {\n\t\t\thtmlBuffer.push('<section><h2>'+type+'</h2><ul>');\n\t\t\t\t\n\t\t\tvar breweries = Object.keys(beerMap);\n\t\t\tbreweries.sort();\n\t\t\tbreweries.forEach(function( brewery ) {\n\t\t\t\tvar beers = beerMap[brewery].sort();\n\t\t\t\thtmlBuffer.push('<li>'+brewery+': <i>'+beers.join(', ')+'</i></li>');\n\t\t\t})\n\t\t\thtmlBuffer.push('</li></section>');\n\t\t});\n\t\t$('#target').html(htmlBuffer.join(''));\n\t\t\t\n\t\t// anchor the section header\n\t\tvar h2Height = $('h2').innerHeight();\n\t\t\n\t\t\n\t\t$('section').each(function(index, section) {\n\t\t\t\n\t\t\tvar sectionWatcher = scrollMonitor.beget(section)\n\t\t\t\n\t\t\tvar sectionMinusBottomHeadline = scrollMonitor.create(section, {bottom: -1*h2Height});\n\t\t\t\n\t\t\tsectionMinusBottomHeadline.stateChange( function() {\n\t\t\t\t\n\t\t\t\tif (!sectionWatcher.isInViewport) {\n\t\t\t\t \tsection.className = '';\n\t\t\t\t} else if (sectionMinusBottomHeadline.isInViewport && sectionMinusBottomHeadline.isAboveViewport) {\n\t\t\t\t\tsection.className = 'fixed';\n\t\t\t\t} else if (sectionMinusBottomHeadline.isAboveViewport) {\n\t\t\t\t\tsection.className = 'bottom';\n\t\t\t\t} else {\n\t\t\t\t \tsection.className = '';\n\t\t\t\t}\n\t\t\t\t\n\t\t\t} )\n\t\t})\n\t\t\n\t});\n//});\n</script>\n</body>\n"
  },
  {
    "path": "public/frontend/plugins/scrollMonitor/demos/listdata.json",
    "content": "{\"American-Style Amber Lager\":{\"Hudepohl-Schoenling\":[\"Amber Lager\"],\"Coors\":[\"AC Golden Colorado Native Lager\",\"George Killian's Irish Red\"],\"Sapporo (Chuo)\":[\"Reserve\"],\"Wyoming Territory\":[\"Buffalo Bill Cody Beer\"],\"Iron City\":[\"Augustiner Premium Amber Lager\"],\"Yuengling\":[\"Traditional Lager\"],\"Lakefront\":[\"Riverwest Stein Beer\"],\"Stevens Point\":[\"Oktoberfest\",\"Amber Lager\"],\"Florida\":[\"Ybor Gold Amber Lager\"],\"Flying Dog\":[\"Old Scratch Amber Lager\",\"Dogtoberfest Octoberfest\"],\"Anheuser-Busch (Fairfield)\":[\"Green Valley Wild Hop Lager\"],\"Cape Ann\":[\"Fisherman's Brew\"],\"Anheuser-Busch (St. Louis)\":[\"Michelob Black & Tan\"],\"Cold Spring\":[\"Aspen Meadow Black and Tan\"],\"Capital\":[\"Wisconsin Amber\"],\"Gray\":[\"Black and Tan\"],\"Genesee\":[\"Michael Shea's Porter and Lager Black and Tan\"],\"Blue Hen\":[\"Black and Tan\"]},\"American-Style Lager\":{\"Miller (Milwaukee)\":[\"Stag Beer\",\"High Life\",\"Genuine Draft\"],\"Schell\":[\"Hauenstein New Ulm Beer\"],\"Narragansett\":[\"Lager\"],\"Whistle Stop\":[\"Platinum Lager\"],\"Rhinelander\":[\"Export\"],\"F.X. Matt\":[\"Brewmaster's Choice Big Flats 1901\"],\"Minhas\":[\"Boxer Lager\",\"Huber Berghoff Original Lager Beer\"],\"SchillingBridge\":[\"Git-R-Done\"],\"Porterhouse\":[\"Chiller\",\"Lager\"],\"Pabst\":[\"Old Milwaukee\",\"Blue Ribbon Beer\",\"Old Style\",\"Falstaff Ballantine IPA\"],\"Anheuser-Busch (Newark)\":[\"Rolling Rock\"],\"Schlitz\":[\"Schlitz Beer\"],\"Stevens Point\":[\"Special Beer\"],\"Dixie\":[\"Beer\"],\"New Glarus (Elmer Road)\":[\"Totally Naked\"],\"Great Divide\":[\"Samurai\"],\"Seabright\":[\"Brew Ribbon\"],\"Central City\":[\"Springboard Lager\"],\"Big Ridge\":[\"Lager\"],\"Russell\":[\"Special Lager\"],\"Taylor's Crossing\":[\"Dominion Lager\"],\"Steamworks (Vancouver)\":[\"Lions Gate Lager\"],\"Marine Pub\":[\"Premium Gold\"],\"Granville Island\":[\"Island Lager\"],\"Sly Fox (Royersford)\":[\"Featherweight Lager\"],\"Crabby Larry's\":[\"Summer Lager\"],\"South Shore\":[\"Honey Pilsner\"],\"Denver ChopHouse\":[\"Pilsner Lager\"],\"Kenya\":[\"Tusker Premium Lager\"],\"Green Mill (Saint Paul)\":[\"Kabeelo Lodge Lager\"],\"Gordon Biersch (San Diego)\":[\"Premium Light Lager\"],\"Appleton\":[\"Adler Bräu Eagle Lager\"],\"Hops Haven\":[\"Port Washington Pier 96 Lager\"],\"New Century\":[\"Edison Light Beer\"],\"Boston Beer Company (Cincinnati)\":[\"Samuel Adams Boston Lager\"],\"Guinness\":[\"Harp Lager\"],\"Labatt\":[\"Blue\",\"Ice\",\"Canadian Ale\"],\"Day\":[\"Louisiana's Golden Lager\"],\"City\":[\"Pale Ale\",\"Lager\"],\"Cold Spring\":[\"Stite Golden Pilsner\"],\"Sprecher\":[\"Pale Lager\"],\"Tommyknocker\":[\"Alpine Glacier Lager\"],\"Carlton and United (Melbourne)\":[\"Foster's Lager\"],\"Cugino\":[\"Beer\",\"Light\"],\"Qingdao\":[\"Green Beer\"],\"Great Dane (Fitchburg)\":[\"Landmark Light\"],\"Saxer\":[\"Pilsner\"],\"First Coast\":[\"Golden Lager\"],\"Brown Street (Rhinelander)\":[\"Aussie Lager\"],\"Moosejaw\":[\"Pilsner\"],\"Courthouse\":[\"Canadian Light\"],\"Upper Mississippi\":[\"Bartles and Lager\"],\"Skol\":[\"Royal Challenge Indian Premium Lager\"],\"Rock Bottom (Minneapolis)\":[\"North Star Premium Lager\"],\"Granite City (Saint Cloud)\":[\"Victory Lager\",\"Northern Light\"],\"Oaken Barrel\":[\"Meridian Street Premium Lager\"],\"Brickhouse\":[\"Laughing Ass\"],\"Molson\":[\"Golden\",\"Canadian Lager\",\"Ice\"],\"Moosehead\":[\"Canadian Lager Beer\"],\"Fratellos (Appleton)\":[\"Fox Light\"],\"Mad Anthony\":[\"Lager\"],\"Thirsty Dog (North Canton)\":[\"Man's Best Friend\",\"Airship Light\"],\"T-Bonz (Mount Pleasant)\":[\"Low Country Light Lager\"],\"Southend (Charleston SC)\":[\"Blonde\",\"Blonde Light\"],\"Route 66\":[\"Lake Shore Light\"],\"Hereford and Hops (Wausau)\":[\"Lichthouse Lager\"],\"Brewmasters (South Kenosha)\":[\"Icemaster\"],\"Coast\":[\"Biloxi Light\"],\"Cross Plains\":[\"Esser's Cross Plains Special\",\"Esser's Best\"],\"Panther\":[\"Ziggy Socky Premium Lager Beer\",\"Three Stooges Beer\"],\"Grumpy Troll\":[\"Lager\"],\"Dirt Cheap\":[\"Beer\"],\"Choc\":[\"American Lager\"],\"Hoppers (Midvale)\":[\"Uno Mas\"],\"Heavenly Daze (Denver)\":[\"El Rey Cerveza\"],\"Hops (Cherry Creek)\":[\"Lightning Bold Gold\",\"Clearwater Light\"],\"New Road\":[\"Peckiomen Pils\"],\"Water Street Lake Country\":[\"Honey Lager Light\"],\"Hereford & Hops (Escanaba)\":[\"Lichthaus Lager\"],\"Brick\":[\"Premium Lager\"],\"La Constancia\":[\"Regia Extra\",\"Suprema\",\"Pilsner of El Salvador\",\"Premier\"],\"Thunderhead\":[\"Honey Lager\"],\"Steel\":[\"High Gravity Lager\"],\"Leinenkugel (Milwaukee)\":[\"Northwoods Lager\"],\"Moctezuma\":[\"Dos Equis Special Lager\"],\"Blitz-Weinhard\":[\"Henry Weinhard's Blue Boar Red Lager\"],\"Stroh (Tampa)\":[\"Hatuey Beer\"],\"Latrobe\":[\"Rolling Rock\"],\"Water Street\":[\"Honey Lager Light\",\"Pils\"],\"Port Washington\":[\"Pier 96 Lager\"],\"Rail House\":[\"Pilsner (discontinued)\"],\"Swan\":[\"Lager\"],\"Tunner's Guild\":[\"Rock River Lager Beer\"],\"Great Dane (Downtown)\":[\"Pro-Tel Memorial Malt Liquor\"],\"Goose Island\":[\"Baderbräu Pilsener\"],\"Leinenkugel\":[\"Original\"],\"Heileman (La Crosse)\":[\"Old Style\",\"Special Export\"],\"Spoetzl\":[\"Shiner Kosmos Reserve\",\"Shiner Blonde\"],\"Nacional (Panamá)\":[\"Balboa Cerveza Pilsner\",\"Atlas Lager\"],\"Stroh (Detroit)\":[\"Schlitz\",\"Primo Beer\"],\"Ostankinskij\":[\"Beer\"],\"Rogue\":[\"Artisan Lager\"],\"Gold Crown\":[\"Premium Lager\"],\"Big Bang\":[\"Space-Aged Lager\"],\"O'Grady's\":[\"Haymarket Pilsner\"],\"Weinkeller (Berwyn)\":[\"Pilsner\"],\"Genesee\":[\"Michael Shea's Irish Amber Brand Pub Style Lager\"],\"Bad Frog\":[\"Amber Lager\"],\"Canadian\":[\"Listwin's Imported Kodiak Canadian Premium Lager\"],\"Old City\":[\"Pecan Street Lager\"],\"Routh Street\":[\"Pilsner\"],\"Carolina\":[\"Lager\"],\"Pyramid (Kalama)\":[\"Sun Fest\"],\"Golden Pacific\":[\"Golden Bear Lager\"],\"Rock Bottom (San Jose)\":[\"Pilsner\"],\"Pyramid (Berkeley)\":[\"Sun Fest\"],\"Stroh (Longview)\":[\"Lone Star\"],\"Cuauhtémoc (Nuevo Leon)\":[\"Carta Blanca\"],\"United\":[\"Flying Horse Royal Lager Beer\"],\"Hapa*s\":[\"Moonset Lager\"],\"Anheuser-Busch (St. Louis)\":[\"Michelob Golden Pilsner\"],\"Sapporo (Chuo)\":[\"Draft\"],\"Lanchester\":[\"Storm Super Premium Malt Liquor\"],\"Wainwright\":[\"Black Jack Black and Tan\"],\"Jinro Coors\":[\"Cass Fresh\"],\"Tahiti\":[\"Hinano\"],\"Minnesota\":[\"McMahon's Irish-Style Potato Ale\"],\"Gottberg\":[\"Old Powerhouse Lager (discontinued)\"],\"Twisted X\":[\"Lager\"],\"Pittsburgh\":[\"Iron City\"],\"Fredimo\":[\"Morechamp International Lager Beer\"],\"Lion\":[\"1857 Lager (discontinued)\"],\"Evansville\":[\"Gerst Amber Lager\"],\"Rock Bottom (Denver)\":[\"Rockies Premium Draft\"],\"Cardinal\":[\"Devil Anse Lager\"],\"Solibra\":[\"Mamba\"],\"Kirin\":[\"Lager\"],\"Rainbow Ridge\":[\"Blue Ridge Lager\"],\"New Zealand\":[\"Steinlager\"],\"Cuauhtémoc (Baja California)\":[\"Cerveza Tecate\"],\"Thomas Kemper\":[\"Pale Lager\"],\"Flying Aces\":[\"Growlin' Gator Lager\"],\"Brewski's (Hermosa Beach)\":[\"Pilsner\"],\"Castlemaine Perkins\":[\"XXXX Export Lager\"],\"Hogshead\":[\"Light Lager\"],\"Zhejiang\":[\"Chung Hua\"],\"Ocean Avenue\":[\"Pilsner\"],\"Newport Beach\":[\"Gold Eagle Premium\"],\"Black Diamond (Walnut Creek)\":[\"Premium\"],\"Santa Cruz\":[\"Lighthouse Lager\"],\"Nevada City\":[\"Golden Lager\"],\"Los Gatos\":[\"Lager\"],\"Champion\":[\"Legendary Lager\"],\"David and Mark\":[\"Black Sheep Light Lager\"],\"Legend\":[\"Lager\"],\"Maritime Pacific\":[\"Cape Lager\"],\"Pete's\":[\"Wicked Lager\"],\"Willett's\":[\"Willy's Lager\"]},\"American Lager/Ale or Cream Ale\":{\"Miller (Milwaukee)\":[\"Hamm's\"],\"Galena\":[\"Farmer's Cream Ale\"],\"Genesee\":[\"Cream Ale\"],\"Copper Creek\":[\"Cream Ale\"],\"Big Ridge\":[\"#17 Cream Ale\"],\"Taylor's Crossing\":[\"Baden Powell Cream Ale\"],\"Steamworks (Vancouver)\":[\"Cascadia Cream Ale\"],\"Mission Springs\":[\"Cream Ale\"],\"Brau Brothers\":[\"Brau Light\"],\"Fitger's\":[\"Lighthouse Ale\"],\"South Shore\":[\"Cream Ale\"],\"Oggi's (Vista)\":[\"California Gold\"],\"Lagunitas\":[\"Sirius\"],\"North Coast\":[\"Scrimshaw Pilsner Style Beer\"],\"Thunderhead\":[\"Cream Ale\"],\"Govnor's\":[\"American Cream Ale\",\"Celtic Cream Ale\"],\"Miller (Tumwater)\":[\"Henry Weinhard's Ale\"],\"Bull & Bush\":[\"Cream\"],\"Stout Brothers\":[\"The Yank Cream Ale\"],\"Agassiz\":[\"Catfish Cream Ale\"],\"Rail House\":[\"Silver Cream\"],\"Gray\":[\"Cream Ale\"],\"C.B. & Potts (Cheyenne)\":[\"Big Horn Light\"],\"Titletown\":[\"Old Broadway Cream Ale\"],\"Golden Gate Park\":[\"Four Sheets Cream Ale\"],\"Hoffbrau (Dallas)\":[\"Yellow Rose Cream Ale\"],\"ThirstyBear\":[\"Polar Ale\"],\"Beach Chalet\":[\"Endless Summer Cream Ale\"],\"Aloha\":[\"Bruddah's Cream Ale\"],\"Hoffbrau (Addison)\":[\"Yellow Rose Cream Ale\"],\"Schell\":[\"Not Guilty 1924 Deer Brand\"],\"Rogue\":[\"Honey Cream Ale\"],\"Hudepohl-Schoenling\":[\"Little Kings Cream Ale\"],\"Riverside\":[\"Raincross Cream Ale\"],\"Coast Range\":[\"Cream Ale\"],\"Belmont\":[\"Marathon Pale Ale\"],\"Coeur D'Alene\":[\"Creme Ale\"],\"Golden City\":[\"Cream Ale\"],\"Oliver's\":[\"Cream Ale\"],\"Willett's\":[\"Ace High Cream Ale\"]},\"American-Style Premium Lager\":{\"Capital\":[\"Supper Club\"],\"Wolverine State\":[\"Wolverine Premium Lager\"],\"Leinenkugel\":[\"Limited (formerly Northwoods Lager)\"],\"Boulevard\":[\"Pilsner\"],\"Anheuser-Busch (St. Louis)\":[\"Budweiser\"],\"Coors\":[\"Original Banquet Beer\"],\"Schell\":[\"Grain Belt Premium\"],\"Nørrebro\":[\"New York Lager\"],\"Maritime Pacific\":[\"Old Seattle Lager\"],\"Manayunk\":[\"Bohemian Blonde\"],\"Indian Wells\":[\"Mojave Gold\"]},\"Australasian, Latin American, or Tropical-Style Light Lager\":{\"Modelo\":[\"Especial\"],\"Hangzhou Qiandaohu\":[\"Lucky Buddha\"],\"Anheuser-Busch (St. Louis)\":[\"Landshark Lager\"],\"Ska\":[\"Mexican Logger\"],\"Kaiser (Jacareí)\":[\"Palma Louca\"],\"Windward & Leeward\":[\"Piton Lager Beer\"],\"Boon Rawd (Pathum Thani)\":[\"Singha\"],\"Florida\":[\"Hurricane Reef Caribbean-Style Pilsner\"],\"Boag's\":[\"Premium Lager\"],\"San Miguel\":[\"Premium Lager\"],\"Desnoes & Geddes\":[\"Red Stripe Lager Beer\"],\"Sleeman\":[\"Sapporo Premium Beer\"],\"Cuauhtémoc (Nuevo Leon)\":[\"Cerveza Sol\",\"Bohemia Clásica\"],\"Tooheys\":[\"New\"],\"Jerome\":[\"Rubia\"],\"Macau\":[\"Lager\"],\"Dix\":[\"Tropical Lager\"],\"Elysian (TangleTown)\":[\"Foster Child Australian Lager\"],\"Skagit River\":[\"Del Rio Lager\"],\"Engine House #9\":[\"Ricardo's XXX Lager\"],\"Bucanero\":[\"Fuerte\"],\"Myanmar\":[\"Lager Beer\"],\"Taiwan\":[\"Beer\"],\"Hondureña\":[\"Port Royal Export\"],\"Pacífico\":[\"Pacifico Clara\"],\"Centro Americana\":[\"Nacional Cabro Extra\"],\"Samoa\":[\"Vailima\"],\"Backus y Johnston\":[\"Premium Cristal\"],\"South Australian\":[\"Broken Hill Lager\"],\"Qingdao\":[\"Tsingtao Premium\"],\"Boon Rawd (Samsen)\":[\"Singha\"],\"Huế\":[\"Beer\"]},\"American-Style Light Lager\":{\"Anheuser-Busch (St. Louis)\":[\"Natural Light\",\"Michelob Ultra\"],\"Upstream (Legacy)\":[\"O! Gold Light\"],\"Upstream (Old Market)\":[\"O! Gold Light\"],\"Granite City (Omaha)\":[\"Northern Light Lager\"],\"Big Ridge\":[\"Light Lager\"],\"McKenzie (Glen Mills)\":[\"Light Lager\"],\"John Harvard's (Wilmington)\":[\"Light Lager\"],\"Iron Hill (Wilmington)\":[\"Light Lager\"],\"Miller (Milwaukee)\":[\"Lite\"]},\"American-Style Dark Lager\":{\"Yuengling\":[\"Bock Beer\"],\"Full Sail\":[\"Session Black Premium Dark Lager\"],\"Spoetzl\":[\"Shiner Bock\"],\"Leinenkugel\":[\"Creamy Dark\"],\"Blitz-Weinhard\":[\"Henry Weinhard's Classic Dark Lager\"],\"Nicolet\":[\"Dark Pilsener\"],\"Stevens Point\":[\"Augsburger Dark\"],\"Anheuser-Busch (St. Louis)\":[\"Michelob AmberBock\"],\"Sleeman\":[\"Original Dark\"],\"Coast\":[\"Beau Rivage Bock\"],\"Minhas\":[\"Huber Berghoff Genuine Dark\"],\"Brasal\":[\"Special Amber Lager\"],\"Salado Creek\":[\"Amber\"],\"Mississippi\":[\"Mississippi Mud Black and Tan\"],\"Cold Spring\":[\"Dark\"],\"Dixie\":[\"Blackened Voodoo Lager\"],\"Dock Street\":[\"Amber Lager\"],\"Stroh (St.Paul)\":[\"Red River Valley Select Red Lager\"],\"Chicago (Chicago)\":[\"Legacy Lager\"]},\"Vienna-Style Lager\":{\"New Glarus\":[\"Two Women Lager\"],\"Baltika\":[\"Arsenal Classic / Арсеналное Классическое\",\"Big Mug Amber Beer / Большая Кружка Янтарное Пиво\"],\"Švyturys\":[\"Baltijos Dark Red / Tamsusis Alus\"],\"Bank\":[\"Walleye Chop\"],\"Chameleon\":[\"Fire Light\"],\"Schell\":[\"Nordeast\",\"Fire Brick (formerly Snowstorm 1998 Vienna Lager)\"],\"Crescent City\":[\"Red Stallion\"],\"Muskie Capital\":[\"Red Lager\"],\"Minhas\":[\"Swiss Amber\"],\"Berg\":[\"Ulrichsbier\"],\"Zirndorfer\":[\"Landbier\"],\"Sprecher\":[\"Special Amber\"],\"Aare\":[\"Amber\"],\"Fauerbach\":[\"Amber Lager\"],\"Menabrea\":[\"Birra Ambrata\"],\"Karbacher\":[\"Köhler\",\"Speuzer\"],\"Unser Bier\":[\"Amber\"],\"Innstadt\":[\"d'Inn'Staade\"],\"Yarpivo\":[\"Amber Lager / Яантарное\"],\"Vesterbro\":[\"Amber Lager\"],\"Upstream (Legacy)\":[\"Jackson St. Lager\"],\"Tommyknocker\":[\"Vienna Amber Lager (formerly Ornery Amber Lager)\"],\"Barfüßer (Ulm)\":[\"Rotgold-Pils\"],\"Haldengut\":[\"Original Ittinger Klosterbräu\"],\"Max & Moritz\":[\"Spezial\"],\"Joh. Albrecht (Konstanz)\":[\"Kupfer\"],\"Big River (Richmond)\":[\"Vienna Lager\"],\"Dockside\":[\"Old Bridge Dark Lager\"],\"Indian Wells\":[\"Mojave Red\"],\"Glenwood Canyon\":[\"Dos Rios Vienna Lager\"],\"Karl Strauss Brewery Gardens\":[\"Amber Lager\"],\"Stevens Point\":[\"Lizard Lager\"],\"South Shore\":[\"Red Lager\"],\"Zea\":[\"Lager\"],\"Logjam\":[\"Lager\"],\"Heineken Ireland\":[\"Murphy's Red Beer\"],\"Titletown\":[\"Red Lager\"],\"Trap Rock\":[\"Hathor Red Lager\"],\"Courthouse\":[\"Courthouse Copper\"],\"Old Hat\":[\"Red Lager\"],\"Southend (Charleston SC)\":[\"Ruby Red Lager\"],\"Randy's Fun Hunters\":[\"Amber Lager\"],\"Route 66\":[\"Mile Marker Amber Lager\"],\"Great Lakes\":[\"Eliot Ness Amber Lager\"],\"Leinenkugel\":[\"Red Lager\"],\"Coast\":[\"Ruby Red Lager\"],\"Dillon Dam\":[\"Dam Straight Lager\"],\"Denmark\":[\"Valhalla Ale\"],\"Live Oak\":[\"Big Bark Amber Lager\"],\"Amerisports\":[\"Hofbrauhaus Brewery & Biergarten Vienna Velvet\"],\"Millstream\":[\"Schild Brau Amber\"],\"Aass\":[\"Classic Special Brew\"],\"James Page\":[\"Iron Range Amber Lager\"],\"Dubuque\":[\"Star Big Muddy Brown\"],\"Oconomowoc\":[\"Amber Rye Lager\"],\"Sturgeon Bay\":[\"Lighthouse Amber Lager\"],\"Great Dane (Downtown)\":[\"Devil's Lake Red Lager\"],\"Tommyknocker (Casper)\":[\"Red Eye Lager\"],\"Moctezuma\":[\"Noche Buena Special Holiday Amber Beer\",\"Dos Equis Amber Lager\"],\"Hoffbrau (Dallas)\":[\"Red Lager\"],\"Pyramid (Berkeley)\":[\"Amber Lager\"],\"Hapa*s\":[\"Red Sky Amber Lager\"],\"Telluride\":[\"Amber Lager\"],\"Jack Daniel's\":[\"1866 Classic Amber Lager\"],\"Flying Dog\":[\"Railyard Ale\"],\"Modelo\":[\"Negra Modelo\"],\"New Zealand\":[\"Lion Red Beer\"],\"Old West (Las Cruces)\":[\"Famous Amber Beer\"],\"Thomas Kemper\":[\"Amber Lager\"],\"Truckee\":[\"Amber\"],\"Louisiana Jack's\":[\"Oktoberfest\"],\"Woodstock\":[\"Amber Lager\"],\"Pete's\":[\"Wicked Red\"],\"Moonlight\":[\"Rising Tides Amber Lager\"]},\"European-Style Low-Alcohol Lager / German-Style Leicht(bier)\":{\"Warsteiner\":[\"Premium HiLight\"],\"Waldhaus\":[\"Light Line\"],\"Heineken\":[\"Premium Light Lager Beer\"]},\"American-Style \\\"Light\\\" Amber Lager\":{\"Tied House (San Jose)\":[\"Amber Light\"]}}"
  },
  {
    "path": "public/frontend/plugins/scrollMonitor/demos/scoreboard.html",
    "content": "<!doctype html>\n<head>\n\t<style type=\"text/css\">\n\tbody {margin: 0; padding: 0;}\n\t#bodyWrap   {}\n\t#metaWrap   {}\n\n\t#header-container          {height:80px;width:100%;}\n\t#top-bar-content-container {height:20px;width:100%;background:purple;}\n\t#top-bar-content           {width:490px;border:1px dashed #333;margin:0 auto;}\n\t#header-content-container  {height:60px;width:100%;background:red;z-index:3;}\n\t#header-content            {width:490px;border:1px dashed #333;margin:0 auto;}\n\n\t#contentWrap               {width:490px;margin:0 auto;text-align:center;}\n\n\n\t#mc         {margin: 0; padding: 1px; background:blue; position: relative;}\n\t#ad-900x20  {border:1px dashed #000;padding:10px;margin:10px;}\n\t#minisb     {height:400px;width:100px;background:yellow;float:left;z-index:2;margin-left: -101px;}\n\t#footer     {height:1000px;width:100%;background:gray;clear:both}\n\n\n\t#minisb.fixed {\n\t\tposition: fixed;\n\t\ttop: 60px;\n\t}\n\t#minisb.hug-footer {\n\t\tposition: absolute;\n\t\tbottom: 0px;\n\t}\n\t#header-content-container.fixed {\n\t\ttop: 0;\n\t\tposition:fixed;\n\t}\n\t​</style>\n</head>\n<body>\n<div id=\"bodyWrap\">\n    <div id=\"metaWrap\">\n        <header>\n            <div id=\"header-container\">\n                <div id=\"top-bar-content-container\">\n                    <div id=\"top-bar-content\">The account</div>\n                </div>\n                <div id=\"header-content-container\">\n                      <div id=\"header-content\">The header</div>\n                </div>\n            </div>\n        </header>\n        <div id=\"contentWrap\">\n            <div id=\"mc\">\n                <div id=\"ad-900x20\">Ad</div>\n                <div id=\"minisb\">miniscoreboard</div>\n                <p>1</p><p>2</p><p>3</p><p>4</p><p>5</p><p>6</p><p>7</p><p>8</p><p>9</p><p>10</p><p>11</p><p>12</p><p>13</p><p>14</p><p>15</p><p>16</p><p>17</p><p>18</p><p>19</p><p>20</p><p>21</p><p>22</p><p>23</p><p>24</p><p>25</p><p>26</p><p>27</p><p>28</p><p>29</p><p>30</p>\n            </div>\n            <div id=\"footer\">The footer</div>\n        </div>\n    </div>\n</div>\n<a href=\"https://github.com/sakabako/scrollMonitor\"><img style=\"position: fixed; top: 0; right: 0; border: 0; z-index:1000000\" src=\"https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png\" alt=\"Fork me on GitHub\"></a>\n<script src=\"http://cdnjs.cloudflare.com/ajax/libs/jquery/1.8.3/jquery.min.js\"></script>\n<script src=\"../scrollMonitor.js\"></script>\n<script type=\"text/javascript\">\n//requirejs(['../scrollMonitor'], function( scrollMonitor ) {\n\n\tvar $account = $('#top-bar-content-container');\n\tvar $header = $('#header-content-container');\n\tvar $minisb = $('#minisb');\n\tvar $footer = $('#footer');\n\n\tvar accountWatcher = scrollMonitor.create( $account );\n\tvar headerWatcher = scrollMonitor.create( $header );\n\n\t// watch an area above the footer as tall as the scoreboard and header\n\tvar footerWatcherTop = $minisb.height() + $header.height();\n\tvar footerWatcher = scrollMonitor.create( $footer, {top: footerWatcherTop} );\n\n\t// the elements these two watch are going to have position: fixed.\n\t// we need to be sure that it always watches their original location.\n\taccountWatcher.lock();\n\theaderWatcher.lock();\n\n\taccountWatcher.visibilityChange(function() {\n\t\t$header.toggleClass('fixed', !accountWatcher.isInViewport);\n\t});\n\theaderWatcher.visibilityChange(function() {\n\t\t$minisb.toggleClass('fixed', !headerWatcher.isInViewport);\n\t});\n\n\tfooterWatcher.fullyEnterViewport(function() {\n\t\tif (footerWatcher.isAboveViewport) {\n\t\t\t$minisb.removeClass('fixed')\n\t\t\t       .addClass('hug-footer')\n\t\t}\n\t});\n\tfooterWatcher.partiallyExitViewport(function() {\n\t\tif (!footerWatcher.isAboveViewport) {\n\t\t\t$minisb.addClass('fixed')\n\t\t\t       .removeClass('hug-footer')\n\t\t}\n\t});\n\n\tif (footerWatcher.isAboveViewport) {\n\t\t$minisb.removeClass('fixed')\n\t\t    .addClass('hug-footer')\n\t}\n\n//});\n</script>\n</body>\n"
  },
  {
    "path": "public/frontend/plugins/scrollMonitor/demos/stress.html",
    "content": "<!doctype html>\n<head>\n\t<style type=\"text/css\">\n\t\tbody {\n\t\t\tfont-family: helvetica, arial;\n\t\t}\n\t\t.center {\n\t\t\ttext-align: center;\n\t\t\tmargin: 20px;\n\t\t}\n\t\t#container span {\n\t\t\tdisplay: inline-block;\n\t\t\tbackground-color: #ccc;\n\t\t\twidth: 75px;\n\t\t\theight: 75px;\n\t\t\tmargin: 5px;\n\t\t\tline-height: 75px;\n\t\t\ttext-align: center;\n\t\t\tcolor: #999;\n\t\t\t/*border: 1px solid black;*/\n\t\t}\n\t\t#container span.in {\n\t\t\tbackground-color: #fcc;\n\t\t}\n\t\t#container span.partial-above {\n\t\t\tbackground-color: #ccf;\n\t\t}\n\t\t#container span.partial-below {\n\t\t\tbackground-color: #ffc;\n\t\t}\n\t\t\n\t\t#counter {\n\t\t\tposition: fixed;\n\t\t\tfont-size: 30px;\n\t\t\ttop: 50%;\n\t\t\tleft: 50%;\n\t\t\tcolor: black;\n\t\t\topacity: 0.8;\n\t\t\ttext-align: center;\n\t\t}\n\t\t#counter > div {\n\t\t\tposition: relative;\n\t\t\tbackground-color: white;\n\t\t\tpadding: 30px;\n\t\t\tborder-radius: 30px;\n\t\t\tleft: -50%;\n\t\t\ttop: -80px;\n\t\t}\n\t​</style>\n</head>\n<body>\n<h1 class=\"center\">scrollMonitor stress test</h1>\n<div class=\"center\">\n\tShowing <span class=\"fill-with-count\"></span> elements.\n</div>\n<div class=\"center\">\n\t<a href=\"?100\">100</a> -\n\t<a href=\"?1000\">1,000</a> -\n\t<a href=\"?10000\">10,000</a> -\n\t<a href=\"?20000\">20,000</a> -\n\t<a href=\"?30000\">30,000</a> -\n\t<a href=\"?50000\">50,000</a> -\n\t<a href=\"?100000\">100,000</a> -\n\t<a href=\"?200000\">200,000</a> -\n\t<a href=\"?300000\">300,000</a> -\n\t<a href=\"?500000\">500,000</a> -\n\t<a href=\"?1000000\">1,000,000</a>\n</div>\n<div id=\"container\">\n</div>\n<div id=\"counter\"><div><div id=\"status\">Rendering elements...</div><div id=\"progress_numbers\"></div><progress></progress></div></div>\n<a href=\"https://github.com/sakabako/scrollMonitor\"><img style=\"position: fixed; top: 0; right: 0; border: 0;\" src=\"https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png\" alt=\"Fork me on GitHub\"></a>\n<script src=\"http://cdnjs.cloudflare.com/ajax/libs/jquery/1.8.3/jquery.min.js\"></script>\n<script src=\"../scrollMonitor.js\"></script>\n<script type=\"text/javascript\">\n\t\n\tvar setImmediate = (function(){\n\t\tvar fnsQueue = [] \n\t\t  , hasSI = !!(window.setImmediate || window.msSetImmediate)\n\t\t  , hasPM = window.addEventListener && window.postMessage \n\t\t\n\t\tif ( !hasSI && hasPM  )\n\t\t  window.addEventListener('message', function(e){\n\t\t\t  if ( e.data === \"sleipnirImmediate\" ) if (fnsQueue.length)\n\t\t\t\tfnsQueue.shift()() // take the first fn from the array and execute it\n\t\t  }, false)\n\t\t\n\t\treturn window.setImmediate || window.msSetImmediate ||\n\t\t\t   (function(){\n\t\t\t\t   if ( hasPM )\n\t\t\t\t\t return function(fn){\n\t\t\t\t\t\t fnsQueue.push(fn)\n\t\t\t\t\t\t window.postMessage('sleipnirImmediate', window.location.href)\n\t\t\t\t\t }\n\t\t\t\t   return function(fn){\n\t\t\t\t\t   setTimeout(fn, 0)\n\t\t\t\t   }\n\t\t\t   }())\n\t}())\n\t\n\t//requirejs(['../scrollMonitor'], function( scrollMonitor ) {\n\t\tvar count = parseInt(window.location.search.substr(1), 10) || 10000;\n\t\t$('.fill-with-count').html(count);\n\t\t\n\t\tvar container = document.getElementById('container');\n\t\tvar counter = $('#progress_numbers')[0]\n\t\tvar progress = $('#counter progress')[0]\n\t\t\n\t\tvar frag = document.createDocumentFragment();\n\t\tvar i = 0;\n\t\t\n\t\tfunction addElements() {\n\t\t\tvar elements = Array.prototype.slice.apply(frag.childNodes);\n\t\t\tcontainer.appendChild( frag );\n\t\t\telements.forEach(makeWatcher);\n\t\t}\n\t\t\n\t\tfunction draw() {\n\t\t\tvar el;\n\t\t\twhile (i < count) {\n\t\t\t\tel = document.createElement('span');\n\t\t\t\tel.innerHTML = i += 1;\n\t\t\t\tfrag.appendChild(el);\n\t\t\t\t\n\t\t\t\tif ((i % 423) === 0) {\n\t\t\t\t\taddElements();\n\t\t\t\t\tcounter.innerHTML = (i)+' of '+count;\n\t\t\t\t\tprogress.value = i;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (i === count) {\n\t\t\t\taddElements();\n\t\t\t\t$(counter).remove();\n\t\t\t\t$('#status').html('recalculating locations...');\n\t\t\t\tprogress.removeAttribute('value');\n\t\t\t\tsetImmediate(function() {\n\t\t\t\t\tscrollMonitor.recalculateLocations();\n\t\t\t\t\t$('#counter').remove();\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tsetImmediate(draw);\n\t\t\t}\n\t\t}\n\t\t\n\t\tprogress.max = count;\n\t\tdraw();\n\t\t\n\t\tfunction makeWatcher( element ) {\n\t\t\tvar watcher = scrollMonitor.create( element );\n\t\n\t\t\tfunction addClass() {\n\t\t\t\tif (!watcher.isInViewport) {\n\t\t\t\t\treturn\n\t\t\t\t} else if (watcher.isFullyInViewport) {\n\t\t\t\t\telement.style.backgroundColor = '#fcc'\n\t\t\t\t} else if (watcher.isAboveViewport) {\n\t\t\t\t\telement.style.backgroundColor = '#ccf'\n\t\t\t\t} else if (watcher.isBelowViewport) {\n\t\t\t\t\telement.style.backgroundColor = '#ffc'\n\t\t\t\t}\n\t\t\t}\n\t\n\t\t\twatcher.stateChange(addClass);\n\t\t\taddClass();\n\t\t}\n\t\n\t//});\n</script>\n\n</body>"
  },
  {
    "path": "public/frontend/plugins/scrollMonitor/package.json",
    "content": "{\n  \"name\": \"scrollmonitor\",\n  \"version\": \"1.0.7\",\n  \"author\": \"Stu Kabakoff <stukabakoff@gmail.com>\",\n  \"description\": \"A simple and fast API to monitor DOM elements as you scroll\",\n  \"contributors\": [ \n\t{\n\t  \"name\": \"Stu Kabakoff\",\n\t  \"email\": \"stukabakoff@gmail.com\"\n\t},\n\t{\n\t  \"name\": \"Terrence Lee\",\n\t  \"email\": \"mr.lee@terrenceishere.com\"\n\t}\n  ],\n  \"repository\": {\n\t\"type\": \"git\",\n\t\"url\": \"https://github.com/sakabako/scrollMonitor.git\"\n  },\n  \"keywords\": [\n\t\"scroll\",\n\t\"dom\"\n  ],\n  \"dependencies\" : {\n\t\"jquery\"   :  \">= 1.2.6\"\n  }\n}"
  },
  {
    "path": "public/frontend/plugins/scrollMonitor/scrollMonitor.js",
    "content": "(function( factory ) {\n\tif (typeof define !== 'undefined' && define.amd) {\n\t\tdefine(['jquery'], factory);\n\t} else if (typeof module !== 'undefined' && module.exports) {\n\t\tvar $ = require('jquery');\n\t\tmodule.exports = factory( $ );\n\t} else {\n\t\twindow.scrollMonitor = factory( jQuery );\n\t}\n})(function( $ ) {\n\t\n\tvar exports = {};\n\t\n\tvar $window = $(window);\n\tvar $document = $(document);\n\n\tvar watchers = [];\n\n\tvar VISIBILITYCHANGE = 'visibilityChange';\n\tvar ENTERVIEWPORT = 'enterViewport';\n\tvar FULLYENTERVIEWPORT = 'fullyEnterViewport';\n\tvar EXITVIEWPORT = 'exitViewport';\n\tvar PARTIALLYEXITVIEWPORT = 'partiallyExitViewport';\n\tvar LOCATIONCHANGE = 'locationChange';\n\tvar STATECHANGE = 'stateChange';\n\n\tvar eventTypes = [\n\t\tVISIBILITYCHANGE,\n\t\tENTERVIEWPORT,\n\t\tFULLYENTERVIEWPORT,\n\t\tEXITVIEWPORT,\n\t\tPARTIALLYEXITVIEWPORT,\n\t\tLOCATIONCHANGE,\n\t\tSTATECHANGE\n\t];\n\n\tvar defaultOffsets = {top: 0, bottom: 0};\n\n\texports.viewportTop;\n\texports.viewportBottom;\n\texports.documentHeight;\n\texports.viewportHeight = windowHeight();\n\n\tvar previousDocumentHeight;\n\tvar latestEvent;\n\n\tfunction windowHeight() {\n\t\treturn window.innerHeight || document.documentElement.clientHeight;\n\t}\n\n\tvar calculateViewportI;\n\tfunction calculateViewport() {\n\t\texports.viewportTop = $window.scrollTop();\n\t\texports.viewportBottom = exports.viewportTop + exports.viewportHeight;\n\t\texports.documentHeight = $document.height();\n\t\tif (exports.documentHeight !== previousDocumentHeight) {\n\t\t\tcalculateViewportI = watchers.length;\n\t\t\twhile( calculateViewportI-- ) {\n\t\t\t\twatchers[calculateViewportI].recalculateLocation();\n\t\t\t}\n\t\t\tpreviousDocumentHeight = exports.documentHeight;\n\t\t}\n\t}\n\n\tfunction recalculateWatchLocationsAndTrigger() {\n\t\texports.viewportHeight = windowHeight();\n\t\tcalculateViewport();\n\t\tupdateAndTriggerWatchers();\n\t}\n\n\tvar recalculateAndTriggerTimer;\n\tfunction debouncedRecalcuateAndTrigger() {\n\t\tclearTimeout(recalculateAndTriggerTimer);\n\t\trecalculateAndTriggerTimer = setTimeout( recalculateWatchLocationsAndTrigger, 100 );\n\t}\n\n\tvar updateAndTriggerWatchersI;\n\tfunction updateAndTriggerWatchers() {\n\t\t// update all watchers then trigger the events so one can rely on another being up to date.\n\t\tupdateAndTriggerWatchersI = watchers.length;\n\t\twhile( updateAndTriggerWatchersI-- ) {\n\t\t\twatchers[updateAndTriggerWatchersI].update();\n\t\t}\n\n\t\tupdateAndTriggerWatchersI = watchers.length;\n\t\twhile( updateAndTriggerWatchersI-- ) {\n\t\t\twatchers[updateAndTriggerWatchersI].triggerCallbacks();\n\t\t}\n\n\t}\n\n\tfunction ElementWatcher( watchItem, offsets ) {\n\t\tvar self = this;\n\n\t\tthis.watchItem = watchItem;\n\t\t\n\t\tif (!offsets) {\n\t\t\tthis.offsets = defaultOffsets;\n\t\t} else if (offsets === +offsets) {\n\t\t\tthis.offsets = {top: offsets, bottom: offsets};\n\t\t} else {\n\t\t\tthis.offsets = $.extend({}, defaultOffsets, offsets);\n\t\t}\n\n\t\tthis.callbacks = {}; // {callback: function, isOne: true }\n\n\t\tfor (var i = 0, j = eventTypes.length; i < j; i++) {\n\t\t\tself.callbacks[eventTypes[i]] = [];\n\t\t}\n\n\t\tthis.locked = false;\n\n\t\tvar wasInViewport;\n\t\tvar wasFullyInViewport;\n\t\tvar wasAboveViewport;\n\t\tvar wasBelowViewport;\n\n\t\tvar listenerToTriggerListI;\n\t\tvar listener;\n\t\tfunction triggerCallbackArray( listeners ) {\n\t\t\tif (listeners.length === 0) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlistenerToTriggerListI = listeners.length;\n\t\t\twhile( listenerToTriggerListI-- ) {\n\t\t\t\tlistener = listeners[listenerToTriggerListI];\n\t\t\t\tlistener.callback.call( self, latestEvent );\n\t\t\t\tif (listener.isOne) {\n\t\t\t\t\tlisteners.splice(listenerToTriggerListI, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.triggerCallbacks = function triggerCallbacks() {\n\t\t\t\n\t\t\tif (this.isInViewport && !wasInViewport) {\n\t\t\t\ttriggerCallbackArray( this.callbacks[ENTERVIEWPORT] );\n\t\t\t}\n\t\t\tif (this.isFullyInViewport && !wasFullyInViewport) {\n\t\t\t\ttriggerCallbackArray( this.callbacks[FULLYENTERVIEWPORT] );\n\t\t\t}\n\n\t\t\t\n\t\t\tif (this.isAboveViewport !== wasAboveViewport && \n\t\t\t\tthis.isBelowViewport !== wasBelowViewport) {\n\n\t\t\t\ttriggerCallbackArray( this.callbacks[VISIBILITYCHANGE] );\n\t\t\t\t\n\t\t\t\t// if you skip completely past this element\n\t\t\t\tif (!wasFullyInViewport && !this.isFullyInViewport) {\n\t\t\t\t\ttriggerCallbackArray( this.callbacks[FULLYENTERVIEWPORT] );\n\t\t\t\t\ttriggerCallbackArray( this.callbacks[PARTIALLYEXITVIEWPORT] );\n\t\t\t\t}\n\t\t\t\tif (!wasInViewport && !this.isInViewport) {\n\t\t\t\t\ttriggerCallbackArray( this.callbacks[ENTERVIEWPORT] );\n\t\t\t\t\ttriggerCallbackArray( this.callbacks[EXITVIEWPORT] );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!this.isFullyInViewport && wasFullyInViewport) {\n\t\t\t\ttriggerCallbackArray( this.callbacks[PARTIALLYEXITVIEWPORT] );\n\t\t\t}\n\t\t\tif (!this.isInViewport && wasInViewport) {\n\t\t\t\ttriggerCallbackArray( this.callbacks[EXITVIEWPORT] );\n\t\t\t}\n\t\t\tif (this.isInViewport !== wasInViewport) {\n\t\t\t\ttriggerCallbackArray( this.callbacks[VISIBILITYCHANGE] );\n\t\t\t}\n\t\t\tswitch( true ) {\n\t\t\t\tcase wasInViewport !== this.isInViewport:\n\t\t\t\tcase wasFullyInViewport !== this.isFullyInViewport:\n\t\t\t\tcase wasAboveViewport !== this.isAboveViewport:\n\t\t\t\tcase wasBelowViewport !== this.isBelowViewport:\n\t\t\t\t\ttriggerCallbackArray( this.callbacks[STATECHANGE] );\n\t\t\t}\n\n\t\t\twasInViewport = this.isInViewport;\n\t\t\twasFullyInViewport = this.isFullyInViewport;\n\t\t\twasAboveViewport = this.isAboveViewport;\n\t\t\twasBelowViewport = this.isBelowViewport;\n\n\t\t};\n\n\t\tthis.recalculateLocation = function() {\n\t\t\tif (this.locked) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar previousTop = this.top;\n\t\t\tvar previousBottom = this.bottom;\n\t\t\tif (this.watchItem.nodeName) { // a dom element\n\t\t\t\tvar cachedDisplay = this.watchItem.style.display;\n\t\t\t\tif (cachedDisplay === 'none') {\n\t\t\t\t\tthis.watchItem.style.display = '';\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tvar elementLocation = $(this.watchItem).offset();\n\t\t\t\tthis.top = elementLocation.top;\n\t\t\t\tthis.bottom = elementLocation.top + this.watchItem.offsetHeight;\n\n\t\t\t\tif (cachedDisplay === 'none') {\n\t\t\t\t\tthis.watchItem.style.display = cachedDisplay;\n\t\t\t\t}\n\n\t\t\t} else if (this.watchItem === +this.watchItem) { // number\n\t\t\t\tif (this.watchItem > 0) {\n\t\t\t\t\tthis.top = this.bottom = this.watchItem;\n\t\t\t\t} else {\n\t\t\t\t\tthis.top = this.bottom = exports.documentHeight - this.watchItem;\n\t\t\t\t}\n\n\t\t\t} else { // an object with a top and bottom property\n\t\t\t\tthis.top = this.watchItem.top;\n\t\t\t\tthis.bottom = this.watchItem.bottom;\n\t\t\t}\n\n\t\t\tthis.top -= this.offsets.top;\n\t\t\tthis.bottom += this.offsets.bottom;\n\t\t\tthis.height = this.bottom - this.top;\n\n\t\t\tif ( (previousTop !== undefined || previousBottom !== undefined) && (this.top !== previousTop || this.bottom !== previousBottom) ) {\n\t\t\t\ttriggerCallbackArray( this.callbacks[LOCATIONCHANGE] );\n\t\t\t}\n\t\t};\n\n\t\tthis.recalculateLocation();\n\t\tthis.update();\n\n\t\twasInViewport = this.isInViewport;\n\t\twasFullyInViewport = this.isFullyInViewport;\n\t\twasAboveViewport = this.isAboveViewport;\n\t\twasBelowViewport = this.isBelowViewport;\n\t}\n\n\tElementWatcher.prototype = {\n\t\ton: function( event, callback, isOne ) {\n\n\t\t\t// trigger the event if it applies to the element right now.\n\t\t\tswitch( true ) {\n\t\t\t\tcase event === VISIBILITYCHANGE && !this.isInViewport && this.isAboveViewport:\n\t\t\t\tcase event === ENTERVIEWPORT && this.isInViewport:\n\t\t\t\tcase event === FULLYENTERVIEWPORT && this.isFullyInViewport:\n\t\t\t\tcase event === EXITVIEWPORT && this.isAboveViewport && !this.isInViewport:\n\t\t\t\tcase event === PARTIALLYEXITVIEWPORT && this.isAboveViewport:\n\t\t\t\t\tcallback();\n\t\t\t\t\tif (isOne) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.callbacks[event]) {\n\t\t\t\tthis.callbacks[event].push({callback: callback, isOne: isOne});\n\t\t\t} else {\n\t\t\t\tthrow new Error('Tried to add a scroll monitor listener of type '+event+'. Your options are: '+eventTypes.join(', '));\n\t\t\t}\n\t\t},\n\t\toff: function( event, callback ) {\n\t\t\tif (this.callbacks[event]) {\n\t\t\t\tfor (var i = 0, item; item = this.callbacks[event][i]; i++) {\n\t\t\t\t\tif (item.callback === callback) {\n\t\t\t\t\t\tthis.callbacks[event].splice(i, 1);\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\tthrow new Error('Tried to remove a scroll monitor listener of type '+event+'. Your options are: '+eventTypes.join(', '));\n\t\t\t}\n\t\t},\n\t\tone: function( event, callback ) {\n\t\t\tthis.on( event, callback, true);\n\t\t},\n\t\trecalculateSize: function() {\n\t\t\tthis.height = this.watchItem.offsetHeight + this.offsets.top + this.offsets.bottom;\n\t\t\tthis.bottom = this.top + this.height;\n\t\t},\n\t\tupdate: function() {\n\t\t\tthis.isAboveViewport = this.top < exports.viewportTop;\n\t\t\tthis.isBelowViewport = this.bottom > exports.viewportBottom;\n\n\t\t\tthis.isInViewport = (this.top <= exports.viewportBottom && this.bottom >= exports.viewportTop);\n\t\t\tthis.isFullyInViewport = (this.top >= exports.viewportTop && this.bottom <= exports.viewportBottom) ||\n\t\t\t\t\t\t\t\t (this.isAboveViewport && this.isBelowViewport);\n\n\t\t},\n\t\tdestroy: function() {\n\t\t\tvar index = watchers.indexOf(this),\n\t\t\t\tself  = this;\n\t\t\twatchers.splice(index, 1);\n\t\t\tfor (var i = 0, j = eventTypes.length; i < j; i++) {\n\t\t\t\tself.callbacks[eventTypes[i]].length = 0;\n\t\t\t}\n\t\t},\n\t\t// prevent recalculating the element location\n\t\tlock: function() {\n\t\t\tthis.locked = true;\n\t\t},\n\t\tunlock: function() {\n\t\t\tthis.locked = false;\n\t\t}\n\t};\n\n\tvar eventHandlerFactory = function (type) {\n\t\treturn function( callback, isOne ) {\n\t\t\tthis.on.call(this, type, callback, isOne);\n\t\t};\n\t};\n\n\tfor (var i = 0, j = eventTypes.length; i < j; i++) {\n\t\tvar type =  eventTypes[i];\n\t\tElementWatcher.prototype[type] = eventHandlerFactory(type);\n\t}\n\n\ttry {\n\t\tcalculateViewport();\n\t} catch (e) {\n\t\t$(calculateViewport);\n\t}\n\n\tfunction scrollMonitorListener(event) {\n\t\tlatestEvent = event;\n\t\tcalculateViewport();\n\t\tupdateAndTriggerWatchers();\n\t}\n\n\t$window.on('scroll', scrollMonitorListener);\n\t$window.on('resize', debouncedRecalcuateAndTrigger);\n\n\texports.beget = exports.create = function( element, offsets ) {\n\t\tif (typeof element === 'string') {\n\t\t\telement = $(element)[0];\n\t\t}\n\t\tif (element instanceof $) {\n\t\t\telement = element[0];\n\t\t}\n\t\tvar watcher = new ElementWatcher( element, offsets );\n\t\twatchers.push(watcher);\n\t\twatcher.update();\n\t\treturn watcher;\n\t};\n\n\texports.update = function() {\n\t\tlatestEvent = null;\n\t\tcalculateViewport();\n\t\tupdateAndTriggerWatchers();\n\t};\n\texports.recalculateLocations = function() {\n\t\texports.documentHeight = 0;\n\t\texports.update();\n\t};\n\t\n\treturn exports;\n});\n"
  },
  {
    "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\ndefine('LARAVEL_START', microtime(true));\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__.'/../vendor/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": "/******/ (() => { // webpackBootstrap\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ \"./node_modules/axios/index.js\":\n/*!*************************************!*\\\n  !*** ./node_modules/axios/index.js ***!\n  \\*************************************/\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\nmodule.exports = __webpack_require__(/*! ./lib/axios */ \"./node_modules/axios/lib/axios.js\");\n\n/***/ }),\n\n/***/ \"./node_modules/axios/lib/adapters/xhr.js\":\n/*!************************************************!*\\\n  !*** ./node_modules/axios/lib/adapters/xhr.js ***!\n  \\************************************************/\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\"use strict\";\n\n\nvar utils = __webpack_require__(/*! ./../utils */ \"./node_modules/axios/lib/utils.js\");\nvar settle = __webpack_require__(/*! ./../core/settle */ \"./node_modules/axios/lib/core/settle.js\");\nvar buildURL = __webpack_require__(/*! ./../helpers/buildURL */ \"./node_modules/axios/lib/helpers/buildURL.js\");\nvar parseHeaders = __webpack_require__(/*! ./../helpers/parseHeaders */ \"./node_modules/axios/lib/helpers/parseHeaders.js\");\nvar isURLSameOrigin = __webpack_require__(/*! ./../helpers/isURLSameOrigin */ \"./node_modules/axios/lib/helpers/isURLSameOrigin.js\");\nvar createError = __webpack_require__(/*! ../core/createError */ \"./node_modules/axios/lib/core/createError.js\");\n\nmodule.exports = function xhrAdapter(config) {\n  return new Promise(function dispatchXhrRequest(resolve, reject) {\n    var requestData = config.data;\n    var requestHeaders = config.headers;\n\n    if (utils.isFormData(requestData)) {\n      delete requestHeaders['Content-Type']; // Let the browser set it\n    }\n\n    var request = new XMLHttpRequest();\n\n    // HTTP basic authentication\n    if (config.auth) {\n      var username = config.auth.username || '';\n      var password = config.auth.password || '';\n      requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n    }\n\n    request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\n\n    // Set the request timeout in MS\n    request.timeout = config.timeout;\n\n    // Listen for ready state\n    request.onreadystatechange = function handleLoad() {\n      if (!request || request.readyState !== 4) {\n        return;\n      }\n\n      // The request errored out and we didn't get a response, this will be\n      // handled by onerror instead\n      // With one exception: request that using file: protocol, most browsers\n      // will return status as 0 even though it's a successful request\n      if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n        return;\n      }\n\n      // Prepare the response\n      var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n      var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n      var response = {\n        data: responseData,\n        status: request.status,\n        statusText: request.statusText,\n        headers: responseHeaders,\n        config: config,\n        request: request\n      };\n\n      settle(resolve, reject, response);\n\n      // Clean up request\n      request = null;\n    };\n\n    // Handle low level network errors\n    request.onerror = function handleError() {\n      // Real errors are hidden from us by the browser\n      // onerror should only fire if it's a network error\n      reject(createError('Network Error', config, null, request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Handle timeout\n    request.ontimeout = function handleTimeout() {\n      reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED',\n        request));\n\n      // Clean up request\n      request = null;\n    };\n\n    // Add xsrf header\n    // This is only done if running in a standard browser environment.\n    // Specifically not if we're in a web worker, or react-native.\n    if (utils.isStandardBrowserEnv()) {\n      var cookies = __webpack_require__(/*! ./../helpers/cookies */ \"./node_modules/axios/lib/helpers/cookies.js\");\n\n      // Add xsrf header\n      var xsrfValue = (config.withCredentials || isURLSameOrigin(config.url)) && config.xsrfCookieName ?\n          cookies.read(config.xsrfCookieName) :\n          undefined;\n\n      if (xsrfValue) {\n        requestHeaders[config.xsrfHeaderName] = xsrfValue;\n      }\n    }\n\n    // Add headers to the request\n    if ('setRequestHeader' in request) {\n      utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n        if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n          // Remove Content-Type if data is undefined\n          delete requestHeaders[key];\n        } else {\n          // Otherwise add header to the request\n          request.setRequestHeader(key, val);\n        }\n      });\n    }\n\n    // Add withCredentials to request if needed\n    if (config.withCredentials) {\n      request.withCredentials = true;\n    }\n\n    // Add responseType to request if needed\n    if (config.responseType) {\n      try {\n        request.responseType = config.responseType;\n      } catch (e) {\n        // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2.\n        // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function.\n        if (config.responseType !== 'json') {\n          throw e;\n        }\n      }\n    }\n\n    // Handle progress if needed\n    if (typeof config.onDownloadProgress === 'function') {\n      request.addEventListener('progress', config.onDownloadProgress);\n    }\n\n    // Not all browsers support upload events\n    if (typeof config.onUploadProgress === 'function' && request.upload) {\n      request.upload.addEventListener('progress', config.onUploadProgress);\n    }\n\n    if (config.cancelToken) {\n      // Handle cancellation\n      config.cancelToken.promise.then(function onCanceled(cancel) {\n        if (!request) {\n          return;\n        }\n\n        request.abort();\n        reject(cancel);\n        // Clean up request\n        request = null;\n      });\n    }\n\n    if (requestData === undefined) {\n      requestData = null;\n    }\n\n    // Send the request\n    request.send(requestData);\n  });\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/axios/lib/axios.js\":\n/*!*****************************************!*\\\n  !*** ./node_modules/axios/lib/axios.js ***!\n  \\*****************************************/\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\"use strict\";\n\n\nvar utils = __webpack_require__(/*! ./utils */ \"./node_modules/axios/lib/utils.js\");\nvar bind = __webpack_require__(/*! ./helpers/bind */ \"./node_modules/axios/lib/helpers/bind.js\");\nvar Axios = __webpack_require__(/*! ./core/Axios */ \"./node_modules/axios/lib/core/Axios.js\");\nvar defaults = __webpack_require__(/*! ./defaults */ \"./node_modules/axios/lib/defaults.js\");\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n  var context = new Axios(defaultConfig);\n  var instance = bind(Axios.prototype.request, context);\n\n  // Copy axios.prototype to instance\n  utils.extend(instance, Axios.prototype, context);\n\n  // Copy context to instance\n  utils.extend(instance, context);\n\n  return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Factory for creating new instances\naxios.create = function create(instanceConfig) {\n  return createInstance(utils.merge(defaults, instanceConfig));\n};\n\n// Expose Cancel & CancelToken\naxios.Cancel = __webpack_require__(/*! ./cancel/Cancel */ \"./node_modules/axios/lib/cancel/Cancel.js\");\naxios.CancelToken = __webpack_require__(/*! ./cancel/CancelToken */ \"./node_modules/axios/lib/cancel/CancelToken.js\");\naxios.isCancel = __webpack_require__(/*! ./cancel/isCancel */ \"./node_modules/axios/lib/cancel/isCancel.js\");\n\n// Expose all/spread\naxios.all = function all(promises) {\n  return Promise.all(promises);\n};\naxios.spread = __webpack_require__(/*! ./helpers/spread */ \"./node_modules/axios/lib/helpers/spread.js\");\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = axios;\n\n\n/***/ }),\n\n/***/ \"./node_modules/axios/lib/cancel/Cancel.js\":\n/*!*************************************************!*\\\n  !*** ./node_modules/axios/lib/cancel/Cancel.js ***!\n  \\*************************************************/\n/***/ ((module) => {\n\n\"use strict\";\n\n\n/**\n * A `Cancel` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction Cancel(message) {\n  this.message = message;\n}\n\nCancel.prototype.toString = function toString() {\n  return 'Cancel' + (this.message ? ': ' + this.message : '');\n};\n\nCancel.prototype.__CANCEL__ = true;\n\nmodule.exports = Cancel;\n\n\n/***/ }),\n\n/***/ \"./node_modules/axios/lib/cancel/CancelToken.js\":\n/*!******************************************************!*\\\n  !*** ./node_modules/axios/lib/cancel/CancelToken.js ***!\n  \\******************************************************/\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\"use strict\";\n\n\nvar Cancel = __webpack_require__(/*! ./Cancel */ \"./node_modules/axios/lib/cancel/Cancel.js\");\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n  if (typeof executor !== 'function') {\n    throw new TypeError('executor must be a function.');\n  }\n\n  var resolvePromise;\n  this.promise = new Promise(function promiseExecutor(resolve) {\n    resolvePromise = resolve;\n  });\n\n  var token = this;\n  executor(function cancel(message) {\n    if (token.reason) {\n      // Cancellation has already been requested\n      return;\n    }\n\n    token.reason = new Cancel(message);\n    resolvePromise(token.reason);\n  });\n}\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n  if (this.reason) {\n    throw this.reason;\n  }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n  var cancel;\n  var token = new CancelToken(function executor(c) {\n    cancel = c;\n  });\n  return {\n    token: token,\n    cancel: cancel\n  };\n};\n\nmodule.exports = CancelToken;\n\n\n/***/ }),\n\n/***/ \"./node_modules/axios/lib/cancel/isCancel.js\":\n/*!***************************************************!*\\\n  !*** ./node_modules/axios/lib/cancel/isCancel.js ***!\n  \\***************************************************/\n/***/ ((module) => {\n\n\"use strict\";\n\n\nmodule.exports = function isCancel(value) {\n  return !!(value && value.__CANCEL__);\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/axios/lib/core/Axios.js\":\n/*!**********************************************!*\\\n  !*** ./node_modules/axios/lib/core/Axios.js ***!\n  \\**********************************************/\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\"use strict\";\n\n\nvar defaults = __webpack_require__(/*! ./../defaults */ \"./node_modules/axios/lib/defaults.js\");\nvar utils = __webpack_require__(/*! ./../utils */ \"./node_modules/axios/lib/utils.js\");\nvar InterceptorManager = __webpack_require__(/*! ./InterceptorManager */ \"./node_modules/axios/lib/core/InterceptorManager.js\");\nvar dispatchRequest = __webpack_require__(/*! ./dispatchRequest */ \"./node_modules/axios/lib/core/dispatchRequest.js\");\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n  this.defaults = instanceConfig;\n  this.interceptors = {\n    request: new InterceptorManager(),\n    response: new InterceptorManager()\n  };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(config) {\n  /*eslint no-param-reassign:0*/\n  // Allow for axios('example/url'[, config]) a la fetch API\n  if (typeof config === 'string') {\n    config = utils.merge({\n      url: arguments[0]\n    }, arguments[1]);\n  }\n\n  config = utils.merge(defaults, {method: 'get'}, this.defaults, config);\n  config.method = config.method.toLowerCase();\n\n  // Hook up interceptors middleware\n  var chain = [dispatchRequest, undefined];\n  var promise = Promise.resolve(config);\n\n  this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n    chain.unshift(interceptor.fulfilled, interceptor.rejected);\n  });\n\n  this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n    chain.push(interceptor.fulfilled, interceptor.rejected);\n  });\n\n  while (chain.length) {\n    promise = promise.then(chain.shift(), chain.shift());\n  }\n\n  return promise;\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n  /*eslint func-names:0*/\n  Axios.prototype[method] = function(url, config) {\n    return this.request(utils.merge(config || {}, {\n      method: method,\n      url: url\n    }));\n  };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n  /*eslint func-names:0*/\n  Axios.prototype[method] = function(url, data, config) {\n    return this.request(utils.merge(config || {}, {\n      method: method,\n      url: url,\n      data: data\n    }));\n  };\n});\n\nmodule.exports = Axios;\n\n\n/***/ }),\n\n/***/ \"./node_modules/axios/lib/core/InterceptorManager.js\":\n/*!***********************************************************!*\\\n  !*** ./node_modules/axios/lib/core/InterceptorManager.js ***!\n  \\***********************************************************/\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\"use strict\";\n\n\nvar utils = __webpack_require__(/*! ./../utils */ \"./node_modules/axios/lib/utils.js\");\n\nfunction InterceptorManager() {\n  this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n  this.handlers.push({\n    fulfilled: fulfilled,\n    rejected: rejected\n  });\n  return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n  if (this.handlers[id]) {\n    this.handlers[id] = null;\n  }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n  utils.forEach(this.handlers, function forEachHandler(h) {\n    if (h !== null) {\n      fn(h);\n    }\n  });\n};\n\nmodule.exports = InterceptorManager;\n\n\n/***/ }),\n\n/***/ \"./node_modules/axios/lib/core/createError.js\":\n/*!****************************************************!*\\\n  !*** ./node_modules/axios/lib/core/createError.js ***!\n  \\****************************************************/\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\"use strict\";\n\n\nvar enhanceError = __webpack_require__(/*! ./enhanceError */ \"./node_modules/axios/lib/core/enhanceError.js\");\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nmodule.exports = function createError(message, config, code, request, response) {\n  var error = new Error(message);\n  return enhanceError(error, config, code, request, response);\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/axios/lib/core/dispatchRequest.js\":\n/*!********************************************************!*\\\n  !*** ./node_modules/axios/lib/core/dispatchRequest.js ***!\n  \\********************************************************/\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\"use strict\";\n\n\nvar utils = __webpack_require__(/*! ./../utils */ \"./node_modules/axios/lib/utils.js\");\nvar transformData = __webpack_require__(/*! ./transformData */ \"./node_modules/axios/lib/core/transformData.js\");\nvar isCancel = __webpack_require__(/*! ../cancel/isCancel */ \"./node_modules/axios/lib/cancel/isCancel.js\");\nvar defaults = __webpack_require__(/*! ../defaults */ \"./node_modules/axios/lib/defaults.js\");\nvar isAbsoluteURL = __webpack_require__(/*! ./../helpers/isAbsoluteURL */ \"./node_modules/axios/lib/helpers/isAbsoluteURL.js\");\nvar combineURLs = __webpack_require__(/*! ./../helpers/combineURLs */ \"./node_modules/axios/lib/helpers/combineURLs.js\");\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n  if (config.cancelToken) {\n    config.cancelToken.throwIfRequested();\n  }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n  throwIfCancellationRequested(config);\n\n  // Support baseURL config\n  if (config.baseURL && !isAbsoluteURL(config.url)) {\n    config.url = combineURLs(config.baseURL, config.url);\n  }\n\n  // Ensure headers exist\n  config.headers = config.headers || {};\n\n  // Transform request data\n  config.data = transformData(\n    config.data,\n    config.headers,\n    config.transformRequest\n  );\n\n  // Flatten headers\n  config.headers = utils.merge(\n    config.headers.common || {},\n    config.headers[config.method] || {},\n    config.headers || {}\n  );\n\n  utils.forEach(\n    ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n    function cleanHeaderConfig(method) {\n      delete config.headers[method];\n    }\n  );\n\n  var adapter = config.adapter || defaults.adapter;\n\n  return adapter(config).then(function onAdapterResolution(response) {\n    throwIfCancellationRequested(config);\n\n    // Transform response data\n    response.data = transformData(\n      response.data,\n      response.headers,\n      config.transformResponse\n    );\n\n    return response;\n  }, function onAdapterRejection(reason) {\n    if (!isCancel(reason)) {\n      throwIfCancellationRequested(config);\n\n      // Transform response data\n      if (reason && reason.response) {\n        reason.response.data = transformData(\n          reason.response.data,\n          reason.response.headers,\n          config.transformResponse\n        );\n      }\n    }\n\n    return Promise.reject(reason);\n  });\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/axios/lib/core/enhanceError.js\":\n/*!*****************************************************!*\\\n  !*** ./node_modules/axios/lib/core/enhanceError.js ***!\n  \\*****************************************************/\n/***/ ((module) => {\n\n\"use strict\";\n\n\n/**\n * Update an Error with the specified config, error code, and response.\n *\n * @param {Error} error The error to update.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The error.\n */\nmodule.exports = function enhanceError(error, config, code, request, response) {\n  error.config = config;\n  if (code) {\n    error.code = code;\n  }\n  error.request = request;\n  error.response = response;\n  return error;\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/axios/lib/core/settle.js\":\n/*!***********************************************!*\\\n  !*** ./node_modules/axios/lib/core/settle.js ***!\n  \\***********************************************/\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\"use strict\";\n\n\nvar createError = __webpack_require__(/*! ./createError */ \"./node_modules/axios/lib/core/createError.js\");\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n  var validateStatus = response.config.validateStatus;\n  // Note: status is not exposed by XDomainRequest\n  if (!response.status || !validateStatus || validateStatus(response.status)) {\n    resolve(response);\n  } else {\n    reject(createError(\n      'Request failed with status code ' + response.status,\n      response.config,\n      null,\n      response.request,\n      response\n    ));\n  }\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/axios/lib/core/transformData.js\":\n/*!******************************************************!*\\\n  !*** ./node_modules/axios/lib/core/transformData.js ***!\n  \\******************************************************/\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\"use strict\";\n\n\nvar utils = __webpack_require__(/*! ./../utils */ \"./node_modules/axios/lib/utils.js\");\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n  /*eslint no-param-reassign:0*/\n  utils.forEach(fns, function transform(fn) {\n    data = fn(data, headers);\n  });\n\n  return data;\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/axios/lib/defaults.js\":\n/*!********************************************!*\\\n  !*** ./node_modules/axios/lib/defaults.js ***!\n  \\********************************************/\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\"use strict\";\n/* provided dependency */ var process = __webpack_require__(/*! process/browser */ \"./node_modules/process/browser.js\");\n\n\nvar utils = __webpack_require__(/*! ./utils */ \"./node_modules/axios/lib/utils.js\");\nvar normalizeHeaderName = __webpack_require__(/*! ./helpers/normalizeHeaderName */ \"./node_modules/axios/lib/helpers/normalizeHeaderName.js\");\n\nvar DEFAULT_CONTENT_TYPE = {\n  'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n  if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n    headers['Content-Type'] = value;\n  }\n}\n\nfunction getDefaultAdapter() {\n  var adapter;\n  if (typeof XMLHttpRequest !== 'undefined') {\n    // For browsers use XHR adapter\n    adapter = __webpack_require__(/*! ./adapters/xhr */ \"./node_modules/axios/lib/adapters/xhr.js\");\n  } else if (typeof process !== 'undefined') {\n    // For node use HTTP adapter\n    adapter = __webpack_require__(/*! ./adapters/http */ \"./node_modules/axios/lib/adapters/xhr.js\");\n  }\n  return adapter;\n}\n\nvar defaults = {\n  adapter: getDefaultAdapter(),\n\n  transformRequest: [function transformRequest(data, headers) {\n    normalizeHeaderName(headers, 'Content-Type');\n    if (utils.isFormData(data) ||\n      utils.isArrayBuffer(data) ||\n      utils.isBuffer(data) ||\n      utils.isStream(data) ||\n      utils.isFile(data) ||\n      utils.isBlob(data)\n    ) {\n      return data;\n    }\n    if (utils.isArrayBufferView(data)) {\n      return data.buffer;\n    }\n    if (utils.isURLSearchParams(data)) {\n      setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n      return data.toString();\n    }\n    if (utils.isObject(data)) {\n      setContentTypeIfUnset(headers, 'application/json;charset=utf-8');\n      return JSON.stringify(data);\n    }\n    return data;\n  }],\n\n  transformResponse: [function transformResponse(data) {\n    /*eslint no-param-reassign:0*/\n    if (typeof data === 'string') {\n      try {\n        data = JSON.parse(data);\n      } catch (e) { /* Ignore */ }\n    }\n    return data;\n  }],\n\n  /**\n   * A timeout in milliseconds to abort a request. If set to 0 (default) a\n   * timeout is not created.\n   */\n  timeout: 0,\n\n  xsrfCookieName: 'XSRF-TOKEN',\n  xsrfHeaderName: 'X-XSRF-TOKEN',\n\n  maxContentLength: -1,\n\n  validateStatus: function validateStatus(status) {\n    return status >= 200 && status < 300;\n  }\n};\n\ndefaults.headers = {\n  common: {\n    'Accept': 'application/json, text/plain, */*'\n  }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n  defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n  defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n\n\n/***/ }),\n\n/***/ \"./node_modules/axios/lib/helpers/bind.js\":\n/*!************************************************!*\\\n  !*** ./node_modules/axios/lib/helpers/bind.js ***!\n  \\************************************************/\n/***/ ((module) => {\n\n\"use strict\";\n\n\nmodule.exports = function bind(fn, thisArg) {\n  return function wrap() {\n    var args = new Array(arguments.length);\n    for (var i = 0; i < args.length; i++) {\n      args[i] = arguments[i];\n    }\n    return fn.apply(thisArg, args);\n  };\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/axios/lib/helpers/buildURL.js\":\n/*!****************************************************!*\\\n  !*** ./node_modules/axios/lib/helpers/buildURL.js ***!\n  \\****************************************************/\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\"use strict\";\n\n\nvar utils = __webpack_require__(/*! ./../utils */ \"./node_modules/axios/lib/utils.js\");\n\nfunction encode(val) {\n  return encodeURIComponent(val).\n    replace(/%40/gi, '@').\n    replace(/%3A/gi, ':').\n    replace(/%24/g, '$').\n    replace(/%2C/gi, ',').\n    replace(/%20/g, '+').\n    replace(/%5B/gi, '[').\n    replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n  /*eslint no-param-reassign:0*/\n  if (!params) {\n    return url;\n  }\n\n  var serializedParams;\n  if (paramsSerializer) {\n    serializedParams = paramsSerializer(params);\n  } else if (utils.isURLSearchParams(params)) {\n    serializedParams = params.toString();\n  } else {\n    var parts = [];\n\n    utils.forEach(params, function serialize(val, key) {\n      if (val === null || typeof val === 'undefined') {\n        return;\n      }\n\n      if (utils.isArray(val)) {\n        key = key + '[]';\n      } else {\n        val = [val];\n      }\n\n      utils.forEach(val, function parseValue(v) {\n        if (utils.isDate(v)) {\n          v = v.toISOString();\n        } else if (utils.isObject(v)) {\n          v = JSON.stringify(v);\n        }\n        parts.push(encode(key) + '=' + encode(v));\n      });\n    });\n\n    serializedParams = parts.join('&');\n  }\n\n  if (serializedParams) {\n    url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n  }\n\n  return url;\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/axios/lib/helpers/combineURLs.js\":\n/*!*******************************************************!*\\\n  !*** ./node_modules/axios/lib/helpers/combineURLs.js ***!\n  \\*******************************************************/\n/***/ ((module) => {\n\n\"use strict\";\n\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n  return relativeURL\n    ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n    : baseURL;\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/axios/lib/helpers/cookies.js\":\n/*!***************************************************!*\\\n  !*** ./node_modules/axios/lib/helpers/cookies.js ***!\n  \\***************************************************/\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\"use strict\";\n\n\nvar utils = __webpack_require__(/*! ./../utils */ \"./node_modules/axios/lib/utils.js\");\n\nmodule.exports = (\n  utils.isStandardBrowserEnv() ?\n\n  // Standard browser envs support document.cookie\n  (function standardBrowserEnv() {\n    return {\n      write: function write(name, value, expires, path, domain, secure) {\n        var cookie = [];\n        cookie.push(name + '=' + encodeURIComponent(value));\n\n        if (utils.isNumber(expires)) {\n          cookie.push('expires=' + new Date(expires).toGMTString());\n        }\n\n        if (utils.isString(path)) {\n          cookie.push('path=' + path);\n        }\n\n        if (utils.isString(domain)) {\n          cookie.push('domain=' + domain);\n        }\n\n        if (secure === true) {\n          cookie.push('secure');\n        }\n\n        document.cookie = cookie.join('; ');\n      },\n\n      read: function read(name) {\n        var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n        return (match ? decodeURIComponent(match[3]) : null);\n      },\n\n      remove: function remove(name) {\n        this.write(name, '', Date.now() - 86400000);\n      }\n    };\n  })() :\n\n  // Non standard browser env (web workers, react-native) lack needed support.\n  (function nonStandardBrowserEnv() {\n    return {\n      write: function write() {},\n      read: function read() { return null; },\n      remove: function remove() {}\n    };\n  })()\n);\n\n\n/***/ }),\n\n/***/ \"./node_modules/axios/lib/helpers/isAbsoluteURL.js\":\n/*!*********************************************************!*\\\n  !*** ./node_modules/axios/lib/helpers/isAbsoluteURL.js ***!\n  \\*********************************************************/\n/***/ ((module) => {\n\n\"use strict\";\n\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n  // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n  // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n  // by any combination of letters, digits, plus, period, or hyphen.\n  return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/axios/lib/helpers/isURLSameOrigin.js\":\n/*!***********************************************************!*\\\n  !*** ./node_modules/axios/lib/helpers/isURLSameOrigin.js ***!\n  \\***********************************************************/\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\"use strict\";\n\n\nvar utils = __webpack_require__(/*! ./../utils */ \"./node_modules/axios/lib/utils.js\");\n\nmodule.exports = (\n  utils.isStandardBrowserEnv() ?\n\n  // Standard browser envs have full support of the APIs needed to test\n  // whether the request URL is of the same origin as current location.\n  (function standardBrowserEnv() {\n    var msie = /(msie|trident)/i.test(navigator.userAgent);\n    var urlParsingNode = document.createElement('a');\n    var originURL;\n\n    /**\n    * Parse a URL to discover it's components\n    *\n    * @param {String} url The URL to be parsed\n    * @returns {Object}\n    */\n    function resolveURL(url) {\n      var href = url;\n\n      if (msie) {\n        // IE needs attribute set twice to normalize properties\n        urlParsingNode.setAttribute('href', href);\n        href = urlParsingNode.href;\n      }\n\n      urlParsingNode.setAttribute('href', href);\n\n      // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n      return {\n        href: urlParsingNode.href,\n        protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n        host: urlParsingNode.host,\n        search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n        hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n        hostname: urlParsingNode.hostname,\n        port: urlParsingNode.port,\n        pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n                  urlParsingNode.pathname :\n                  '/' + urlParsingNode.pathname\n      };\n    }\n\n    originURL = resolveURL(window.location.href);\n\n    /**\n    * Determine if a URL shares the same origin as the current location\n    *\n    * @param {String} requestURL The URL to test\n    * @returns {boolean} True if URL shares the same origin, otherwise false\n    */\n    return function isURLSameOrigin(requestURL) {\n      var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n      return (parsed.protocol === originURL.protocol &&\n            parsed.host === originURL.host);\n    };\n  })() :\n\n  // Non standard browser envs (web workers, react-native) lack needed support.\n  (function nonStandardBrowserEnv() {\n    return function isURLSameOrigin() {\n      return true;\n    };\n  })()\n);\n\n\n/***/ }),\n\n/***/ \"./node_modules/axios/lib/helpers/normalizeHeaderName.js\":\n/*!***************************************************************!*\\\n  !*** ./node_modules/axios/lib/helpers/normalizeHeaderName.js ***!\n  \\***************************************************************/\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\"use strict\";\n\n\nvar utils = __webpack_require__(/*! ../utils */ \"./node_modules/axios/lib/utils.js\");\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n  utils.forEach(headers, function processHeader(value, name) {\n    if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n      headers[normalizedName] = value;\n      delete headers[name];\n    }\n  });\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/axios/lib/helpers/parseHeaders.js\":\n/*!********************************************************!*\\\n  !*** ./node_modules/axios/lib/helpers/parseHeaders.js ***!\n  \\********************************************************/\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\"use strict\";\n\n\nvar utils = __webpack_require__(/*! ./../utils */ \"./node_modules/axios/lib/utils.js\");\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n  'age', 'authorization', 'content-length', 'content-type', 'etag',\n  'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n  'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n  'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n  var parsed = {};\n  var key;\n  var val;\n  var i;\n\n  if (!headers) { return parsed; }\n\n  utils.forEach(headers.split('\\n'), function parser(line) {\n    i = line.indexOf(':');\n    key = utils.trim(line.substr(0, i)).toLowerCase();\n    val = utils.trim(line.substr(i + 1));\n\n    if (key) {\n      if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n        return;\n      }\n      if (key === 'set-cookie') {\n        parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n      } else {\n        parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n      }\n    }\n  });\n\n  return parsed;\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/axios/lib/helpers/spread.js\":\n/*!**************************************************!*\\\n  !*** ./node_modules/axios/lib/helpers/spread.js ***!\n  \\**************************************************/\n/***/ ((module) => {\n\n\"use strict\";\n\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n *  ```js\n *  function f(x, y, z) {}\n *  var args = [1, 2, 3];\n *  f.apply(null, args);\n *  ```\n *\n * With `spread` this example can be re-written.\n *\n *  ```js\n *  spread(function(x, y, z) {})([1, 2, 3]);\n *  ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n  return function wrap(arr) {\n    return callback.apply(null, arr);\n  };\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/axios/lib/utils.js\":\n/*!*****************************************!*\\\n  !*** ./node_modules/axios/lib/utils.js ***!\n  \\*****************************************/\n/***/ ((module, __unused_webpack_exports, __webpack_require__) => {\n\n\"use strict\";\n\n\nvar bind = __webpack_require__(/*! ./helpers/bind */ \"./node_modules/axios/lib/helpers/bind.js\");\nvar isBuffer = __webpack_require__(/*! is-buffer */ \"./node_modules/is-buffer/index.js\");\n\n/*global toString:true*/\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n  return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n  return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n  return (typeof FormData !== 'undefined') && (val instanceof FormData);\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n  var result;\n  if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n    result = ArrayBuffer.isView(val);\n  } else {\n    result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n  }\n  return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n  return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n  return typeof val === 'number';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n  return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n  return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n  return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n  return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n  return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n  return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n  return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nfunction isURLSearchParams(val) {\n  return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n  return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n *  typeof window -> undefined\n *  typeof document -> undefined\n *\n * react-native:\n *  navigator.product -> 'ReactNative'\n */\nfunction isStandardBrowserEnv() {\n  if (typeof navigator !== 'undefined' && navigator.product === 'ReactNative') {\n    return false;\n  }\n  return (\n    typeof window !== 'undefined' &&\n    typeof document !== 'undefined'\n  );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n  // Don't bother if no value provided\n  if (obj === null || typeof obj === 'undefined') {\n    return;\n  }\n\n  // Force an array if not already something iterable\n  if (typeof obj !== 'object') {\n    /*eslint no-param-reassign:0*/\n    obj = [obj];\n  }\n\n  if (isArray(obj)) {\n    // Iterate over array values\n    for (var i = 0, l = obj.length; i < l; i++) {\n      fn.call(null, obj[i], i, obj);\n    }\n  } else {\n    // Iterate over object keys\n    for (var key in obj) {\n      if (Object.prototype.hasOwnProperty.call(obj, key)) {\n        fn.call(null, obj[key], key, obj);\n      }\n    }\n  }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n  var result = {};\n  function assignValue(val, key) {\n    if (typeof result[key] === 'object' && typeof val === 'object') {\n      result[key] = merge(result[key], val);\n    } else {\n      result[key] = val;\n    }\n  }\n\n  for (var i = 0, l = arguments.length; i < l; i++) {\n    forEach(arguments[i], assignValue);\n  }\n  return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n  forEach(b, function assignValue(val, key) {\n    if (thisArg && typeof val === 'function') {\n      a[key] = bind(val, thisArg);\n    } else {\n      a[key] = val;\n    }\n  });\n  return a;\n}\n\nmodule.exports = {\n  isArray: isArray,\n  isArrayBuffer: isArrayBuffer,\n  isBuffer: isBuffer,\n  isFormData: isFormData,\n  isArrayBufferView: isArrayBufferView,\n  isString: isString,\n  isNumber: isNumber,\n  isObject: isObject,\n  isUndefined: isUndefined,\n  isDate: isDate,\n  isFile: isFile,\n  isBlob: isBlob,\n  isFunction: isFunction,\n  isStream: isStream,\n  isURLSearchParams: isURLSearchParams,\n  isStandardBrowserEnv: isStandardBrowserEnv,\n  forEach: forEach,\n  merge: merge,\n  extend: extend,\n  trim: trim\n};\n\n\n/***/ }),\n\n/***/ \"./resources/js/app.js\":\n/*!*****************************!*\\\n  !*** ./resources/js/app.js ***!\n  \\*****************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm.js\");\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__webpack_require__(/*! ./bootstrap */ \"./resources/js/bootstrap.js\");\n\nwindow.Vue = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm.js\");\n\n/**\n * The following block of code may be used to automatically register your\n * Vue components. It will recursively scan this directory for the Vue\n * components and automatically register them with their \"basename\".\n *\n * Eg. ./components/ExampleComponent.vue -> <example-component></example-component>\n */\n// const files = require.context('./', true, /\\.vue$/i);\n// files.keys().map(key => Vue.component(key.split('/').pop().split('.')[0], files(key).default));\n// Vue.component('example-component', require('./components/ExampleComponent.vue').default);\n\nvue__WEBPACK_IMPORTED_MODULE_0__.default.component('contenone', __webpack_require__(/*! ./components/Contentone.vue */ \"./resources/js/components/Contentone.vue\").default);\nvue__WEBPACK_IMPORTED_MODULE_0__.default.component('contentwo', __webpack_require__(/*! ./components/Contentwo.vue */ \"./resources/js/components/Contentwo.vue\").default);\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\nvar app = new vue__WEBPACK_IMPORTED_MODULE_0__.default({\n  el: '#app'\n});\n\n/***/ }),\n\n/***/ \"./resources/js/bootstrap.js\":\n/*!***********************************!*\\\n  !*** ./resources/js/bootstrap.js ***!\n  \\***********************************/\n/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {\n\nwindow._ = __webpack_require__(/*! lodash */ \"./node_modules/lodash/lodash.js\");\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.Popper = __webpack_require__(/*! popper.js */ \"./node_modules/popper.js/dist/esm/popper.js\").default;\n  window.$ = window.jQuery = __webpack_require__(/*! jquery */ \"./node_modules/jquery/dist/jquery.js\");\n\n  __webpack_require__(/*! bootstrap */ \"./node_modules/bootstrap/dist/js/bootstrap.js\");\n} catch (e) {}\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\n\nwindow.axios = __webpack_require__(/*! axios */ \"./node_modules/axios/index.js\");\nwindow.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';\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\nvar 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 * 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// import Echo from 'laravel-echo'\n// window.Pusher = require('pusher-js');\n// window.Echo = new Echo({\n//     broadcaster: 'pusher',\n//     key: process.env.MIX_PUSHER_APP_KEY,\n//     cluster: process.env.MIX_PUSHER_APP_CLUSTER,\n//     encrypted: true\n// });\n\n/***/ }),\n\n/***/ \"./node_modules/bootstrap/dist/js/bootstrap.js\":\n/*!*****************************************************!*\\\n  !*** ./node_modules/bootstrap/dist/js/bootstrap.js ***!\n  \\*****************************************************/\n/***/ (function(__unused_webpack_module, exports, __webpack_require__) {\n\n/*!\n  * Bootstrap v4.6.0 (https://getbootstrap.com/)\n  * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\n(function (global, factory) {\n   true ? factory(exports, __webpack_require__(/*! jquery */ \"./node_modules/jquery/dist/jquery.js\"), __webpack_require__(/*! popper.js */ \"./node_modules/popper.js/dist/esm/popper.js\")) :\n  0;\n}(this, (function (exports, $, Popper) { 'use strict';\n\n  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\n  var $__default = /*#__PURE__*/_interopDefaultLegacy($);\n  var Popper__default = /*#__PURE__*/_interopDefaultLegacy(Popper);\n\n  function _defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  function _createClass(Constructor, protoProps, staticProps) {\n    if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) _defineProperties(Constructor, staticProps);\n    return Constructor;\n  }\n\n  function _extends() {\n    _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\n    return _extends.apply(this, arguments);\n  }\n\n  function _inheritsLoose(subClass, superClass) {\n    subClass.prototype = Object.create(superClass.prototype);\n    subClass.prototype.constructor = subClass;\n    subClass.__proto__ = superClass;\n  }\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v4.6.0): util.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  /**\n   * ------------------------------------------------------------------------\n   * Private TransitionEnd Helpers\n   * ------------------------------------------------------------------------\n   */\n\n  var TRANSITION_END = 'transitionend';\n  var MAX_UID = 1000000;\n  var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\n  function toType(obj) {\n    if (obj === null || typeof obj === 'undefined') {\n      return \"\" + obj;\n    }\n\n    return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n  }\n\n  function getSpecialTransitionEndEvent() {\n    return {\n      bindType: TRANSITION_END,\n      delegateType: TRANSITION_END,\n      handle: function handle(event) {\n        if ($__default['default'](event.target).is(this)) {\n          return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params\n        }\n\n        return undefined;\n      }\n    };\n  }\n\n  function transitionEndEmulator(duration) {\n    var _this = this;\n\n    var called = false;\n    $__default['default'](this).one(Util.TRANSITION_END, function () {\n      called = true;\n    });\n    setTimeout(function () {\n      if (!called) {\n        Util.triggerTransitionEnd(_this);\n      }\n    }, duration);\n    return this;\n  }\n\n  function setTransitionEndSupport() {\n    $__default['default'].fn.emulateTransitionEnd = transitionEndEmulator;\n    $__default['default'].event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();\n  }\n  /**\n   * --------------------------------------------------------------------------\n   * Public Util Api\n   * --------------------------------------------------------------------------\n   */\n\n\n  var Util = {\n    TRANSITION_END: 'bsTransitionEnd',\n    getUID: function getUID(prefix) {\n      do {\n        prefix += ~~(Math.random() * MAX_UID); // \"~~\" acts like a faster Math.floor() here\n      } while (document.getElementById(prefix));\n\n      return prefix;\n    },\n    getSelectorFromElement: function getSelectorFromElement(element) {\n      var selector = element.getAttribute('data-target');\n\n      if (!selector || selector === '#') {\n        var hrefAttr = element.getAttribute('href');\n        selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : '';\n      }\n\n      try {\n        return document.querySelector(selector) ? selector : null;\n      } catch (_) {\n        return null;\n      }\n    },\n    getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {\n      if (!element) {\n        return 0;\n      } // Get transition-duration of the element\n\n\n      var transitionDuration = $__default['default'](element).css('transition-duration');\n      var transitionDelay = $__default['default'](element).css('transition-delay');\n      var floatTransitionDuration = parseFloat(transitionDuration);\n      var floatTransitionDelay = parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n      if (!floatTransitionDuration && !floatTransitionDelay) {\n        return 0;\n      } // If multiple durations are defined, take the first\n\n\n      transitionDuration = transitionDuration.split(',')[0];\n      transitionDelay = transitionDelay.split(',')[0];\n      return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n    },\n    reflow: function reflow(element) {\n      return element.offsetHeight;\n    },\n    triggerTransitionEnd: function triggerTransitionEnd(element) {\n      $__default['default'](element).trigger(TRANSITION_END);\n    },\n    supportsTransitionEnd: function supportsTransitionEnd() {\n      return Boolean(TRANSITION_END);\n    },\n    isElement: function isElement(obj) {\n      return (obj[0] || obj).nodeType;\n    },\n    typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) {\n      for (var property in configTypes) {\n        if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n          var expectedTypes = configTypes[property];\n          var value = config[property];\n          var valueType = value && Util.isElement(value) ? 'element' : toType(value);\n\n          if (!new RegExp(expectedTypes).test(valueType)) {\n            throw new Error(componentName.toUpperCase() + \": \" + (\"Option \\\"\" + property + \"\\\" provided type \\\"\" + valueType + \"\\\" \") + (\"but expected type \\\"\" + expectedTypes + \"\\\".\"));\n          }\n        }\n      }\n    },\n    findShadowRoot: function findShadowRoot(element) {\n      if (!document.documentElement.attachShadow) {\n        return null;\n      } // Can find the shadow root otherwise it'll return the document\n\n\n      if (typeof element.getRootNode === 'function') {\n        var root = element.getRootNode();\n        return root instanceof ShadowRoot ? root : null;\n      }\n\n      if (element instanceof ShadowRoot) {\n        return element;\n      } // when we don't find a shadow root\n\n\n      if (!element.parentNode) {\n        return null;\n      }\n\n      return Util.findShadowRoot(element.parentNode);\n    },\n    jQueryDetection: function jQueryDetection() {\n      if (typeof $__default['default'] === 'undefined') {\n        throw new TypeError('Bootstrap\\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\\'s JavaScript.');\n      }\n\n      var version = $__default['default'].fn.jquery.split(' ')[0].split('.');\n      var minMajor = 1;\n      var ltMajor = 2;\n      var minMinor = 9;\n      var minPatch = 1;\n      var maxMajor = 4;\n\n      if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) {\n        throw new Error('Bootstrap\\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0');\n      }\n    }\n  };\n  Util.jQueryDetection();\n  setTransitionEndSupport();\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME = 'alert';\n  var VERSION = '4.6.0';\n  var DATA_KEY = 'bs.alert';\n  var EVENT_KEY = \".\" + DATA_KEY;\n  var DATA_API_KEY = '.data-api';\n  var JQUERY_NO_CONFLICT = $__default['default'].fn[NAME];\n  var SELECTOR_DISMISS = '[data-dismiss=\"alert\"]';\n  var EVENT_CLOSE = \"close\" + EVENT_KEY;\n  var EVENT_CLOSED = \"closed\" + EVENT_KEY;\n  var EVENT_CLICK_DATA_API = \"click\" + EVENT_KEY + DATA_API_KEY;\n  var CLASS_NAME_ALERT = 'alert';\n  var CLASS_NAME_FADE = 'fade';\n  var CLASS_NAME_SHOW = 'show';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  var Alert = /*#__PURE__*/function () {\n    function Alert(element) {\n      this._element = element;\n    } // Getters\n\n\n    var _proto = Alert.prototype;\n\n    // Public\n    _proto.close = function close(element) {\n      var rootElement = this._element;\n\n      if (element) {\n        rootElement = this._getRootElement(element);\n      }\n\n      var customEvent = this._triggerCloseEvent(rootElement);\n\n      if (customEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._removeElement(rootElement);\n    };\n\n    _proto.dispose = function dispose() {\n      $__default['default'].removeData(this._element, DATA_KEY);\n      this._element = null;\n    } // Private\n    ;\n\n    _proto._getRootElement = function _getRootElement(element) {\n      var selector = Util.getSelectorFromElement(element);\n      var parent = false;\n\n      if (selector) {\n        parent = document.querySelector(selector);\n      }\n\n      if (!parent) {\n        parent = $__default['default'](element).closest(\".\" + CLASS_NAME_ALERT)[0];\n      }\n\n      return parent;\n    };\n\n    _proto._triggerCloseEvent = function _triggerCloseEvent(element) {\n      var closeEvent = $__default['default'].Event(EVENT_CLOSE);\n      $__default['default'](element).trigger(closeEvent);\n      return closeEvent;\n    };\n\n    _proto._removeElement = function _removeElement(element) {\n      var _this = this;\n\n      $__default['default'](element).removeClass(CLASS_NAME_SHOW);\n\n      if (!$__default['default'](element).hasClass(CLASS_NAME_FADE)) {\n        this._destroyElement(element);\n\n        return;\n      }\n\n      var transitionDuration = Util.getTransitionDurationFromElement(element);\n      $__default['default'](element).one(Util.TRANSITION_END, function (event) {\n        return _this._destroyElement(element, event);\n      }).emulateTransitionEnd(transitionDuration);\n    };\n\n    _proto._destroyElement = function _destroyElement(element) {\n      $__default['default'](element).detach().trigger(EVENT_CLOSED).remove();\n    } // Static\n    ;\n\n    Alert._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $element = $__default['default'](this);\n        var data = $element.data(DATA_KEY);\n\n        if (!data) {\n          data = new Alert(this);\n          $element.data(DATA_KEY, data);\n        }\n\n        if (config === 'close') {\n          data[config](this);\n        }\n      });\n    };\n\n    Alert._handleDismiss = function _handleDismiss(alertInstance) {\n      return function (event) {\n        if (event) {\n          event.preventDefault();\n        }\n\n        alertInstance.close(this);\n      };\n    };\n\n    _createClass(Alert, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION;\n      }\n    }]);\n\n    return Alert;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $__default['default'](document).on(EVENT_CLICK_DATA_API, SELECTOR_DISMISS, Alert._handleDismiss(new Alert()));\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $__default['default'].fn[NAME] = Alert._jQueryInterface;\n  $__default['default'].fn[NAME].Constructor = Alert;\n\n  $__default['default'].fn[NAME].noConflict = function () {\n    $__default['default'].fn[NAME] = JQUERY_NO_CONFLICT;\n    return Alert._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$1 = 'button';\n  var VERSION$1 = '4.6.0';\n  var DATA_KEY$1 = 'bs.button';\n  var EVENT_KEY$1 = \".\" + DATA_KEY$1;\n  var DATA_API_KEY$1 = '.data-api';\n  var JQUERY_NO_CONFLICT$1 = $__default['default'].fn[NAME$1];\n  var CLASS_NAME_ACTIVE = 'active';\n  var CLASS_NAME_BUTTON = 'btn';\n  var CLASS_NAME_FOCUS = 'focus';\n  var SELECTOR_DATA_TOGGLE_CARROT = '[data-toggle^=\"button\"]';\n  var SELECTOR_DATA_TOGGLES = '[data-toggle=\"buttons\"]';\n  var SELECTOR_DATA_TOGGLE = '[data-toggle=\"button\"]';\n  var SELECTOR_DATA_TOGGLES_BUTTONS = '[data-toggle=\"buttons\"] .btn';\n  var SELECTOR_INPUT = 'input:not([type=\"hidden\"])';\n  var SELECTOR_ACTIVE = '.active';\n  var SELECTOR_BUTTON = '.btn';\n  var EVENT_CLICK_DATA_API$1 = \"click\" + EVENT_KEY$1 + DATA_API_KEY$1;\n  var EVENT_FOCUS_BLUR_DATA_API = \"focus\" + EVENT_KEY$1 + DATA_API_KEY$1 + \" \" + (\"blur\" + EVENT_KEY$1 + DATA_API_KEY$1);\n  var EVENT_LOAD_DATA_API = \"load\" + EVENT_KEY$1 + DATA_API_KEY$1;\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  var Button = /*#__PURE__*/function () {\n    function Button(element) {\n      this._element = element;\n      this.shouldAvoidTriggerChange = false;\n    } // Getters\n\n\n    var _proto = Button.prototype;\n\n    // Public\n    _proto.toggle = function toggle() {\n      var triggerChangeEvent = true;\n      var addAriaPressed = true;\n      var rootElement = $__default['default'](this._element).closest(SELECTOR_DATA_TOGGLES)[0];\n\n      if (rootElement) {\n        var input = this._element.querySelector(SELECTOR_INPUT);\n\n        if (input) {\n          if (input.type === 'radio') {\n            if (input.checked && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n              triggerChangeEvent = false;\n            } else {\n              var activeElement = rootElement.querySelector(SELECTOR_ACTIVE);\n\n              if (activeElement) {\n                $__default['default'](activeElement).removeClass(CLASS_NAME_ACTIVE);\n              }\n            }\n          }\n\n          if (triggerChangeEvent) {\n            // if it's not a radio button or checkbox don't add a pointless/invalid checked property to the input\n            if (input.type === 'checkbox' || input.type === 'radio') {\n              input.checked = !this._element.classList.contains(CLASS_NAME_ACTIVE);\n            }\n\n            if (!this.shouldAvoidTriggerChange) {\n              $__default['default'](input).trigger('change');\n            }\n          }\n\n          input.focus();\n          addAriaPressed = false;\n        }\n      }\n\n      if (!(this._element.hasAttribute('disabled') || this._element.classList.contains('disabled'))) {\n        if (addAriaPressed) {\n          this._element.setAttribute('aria-pressed', !this._element.classList.contains(CLASS_NAME_ACTIVE));\n        }\n\n        if (triggerChangeEvent) {\n          $__default['default'](this._element).toggleClass(CLASS_NAME_ACTIVE);\n        }\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      $__default['default'].removeData(this._element, DATA_KEY$1);\n      this._element = null;\n    } // Static\n    ;\n\n    Button._jQueryInterface = function _jQueryInterface(config, avoidTriggerChange) {\n      return this.each(function () {\n        var $element = $__default['default'](this);\n        var data = $element.data(DATA_KEY$1);\n\n        if (!data) {\n          data = new Button(this);\n          $element.data(DATA_KEY$1, data);\n        }\n\n        data.shouldAvoidTriggerChange = avoidTriggerChange;\n\n        if (config === 'toggle') {\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Button, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$1;\n      }\n    }]);\n\n    return Button;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $__default['default'](document).on(EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE_CARROT, function (event) {\n    var button = event.target;\n    var initialButton = button;\n\n    if (!$__default['default'](button).hasClass(CLASS_NAME_BUTTON)) {\n      button = $__default['default'](button).closest(SELECTOR_BUTTON)[0];\n    }\n\n    if (!button || button.hasAttribute('disabled') || button.classList.contains('disabled')) {\n      event.preventDefault(); // work around Firefox bug #1540995\n    } else {\n      var inputBtn = button.querySelector(SELECTOR_INPUT);\n\n      if (inputBtn && (inputBtn.hasAttribute('disabled') || inputBtn.classList.contains('disabled'))) {\n        event.preventDefault(); // work around Firefox bug #1540995\n\n        return;\n      }\n\n      if (initialButton.tagName === 'INPUT' || button.tagName !== 'LABEL') {\n        Button._jQueryInterface.call($__default['default'](button), 'toggle', initialButton.tagName === 'INPUT');\n      }\n    }\n  }).on(EVENT_FOCUS_BLUR_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, function (event) {\n    var button = $__default['default'](event.target).closest(SELECTOR_BUTTON)[0];\n    $__default['default'](button).toggleClass(CLASS_NAME_FOCUS, /^focus(in)?$/.test(event.type));\n  });\n  $__default['default'](window).on(EVENT_LOAD_DATA_API, function () {\n    // ensure correct active class is set to match the controls' actual values/states\n    // find all checkboxes/readio buttons inside data-toggle groups\n    var buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLES_BUTTONS));\n\n    for (var i = 0, len = buttons.length; i < len; i++) {\n      var button = buttons[i];\n      var input = button.querySelector(SELECTOR_INPUT);\n\n      if (input.checked || input.hasAttribute('checked')) {\n        button.classList.add(CLASS_NAME_ACTIVE);\n      } else {\n        button.classList.remove(CLASS_NAME_ACTIVE);\n      }\n    } // find all button toggles\n\n\n    buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE));\n\n    for (var _i = 0, _len = buttons.length; _i < _len; _i++) {\n      var _button = buttons[_i];\n\n      if (_button.getAttribute('aria-pressed') === 'true') {\n        _button.classList.add(CLASS_NAME_ACTIVE);\n      } else {\n        _button.classList.remove(CLASS_NAME_ACTIVE);\n      }\n    }\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $__default['default'].fn[NAME$1] = Button._jQueryInterface;\n  $__default['default'].fn[NAME$1].Constructor = Button;\n\n  $__default['default'].fn[NAME$1].noConflict = function () {\n    $__default['default'].fn[NAME$1] = JQUERY_NO_CONFLICT$1;\n    return Button._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$2 = 'carousel';\n  var VERSION$2 = '4.6.0';\n  var DATA_KEY$2 = 'bs.carousel';\n  var EVENT_KEY$2 = \".\" + DATA_KEY$2;\n  var DATA_API_KEY$2 = '.data-api';\n  var JQUERY_NO_CONFLICT$2 = $__default['default'].fn[NAME$2];\n  var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key\n\n  var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key\n\n  var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\n  var SWIPE_THRESHOLD = 40;\n  var Default = {\n    interval: 5000,\n    keyboard: true,\n    slide: false,\n    pause: 'hover',\n    wrap: true,\n    touch: true\n  };\n  var DefaultType = {\n    interval: '(number|boolean)',\n    keyboard: 'boolean',\n    slide: '(boolean|string)',\n    pause: '(string|boolean)',\n    wrap: 'boolean',\n    touch: 'boolean'\n  };\n  var DIRECTION_NEXT = 'next';\n  var DIRECTION_PREV = 'prev';\n  var DIRECTION_LEFT = 'left';\n  var DIRECTION_RIGHT = 'right';\n  var EVENT_SLIDE = \"slide\" + EVENT_KEY$2;\n  var EVENT_SLID = \"slid\" + EVENT_KEY$2;\n  var EVENT_KEYDOWN = \"keydown\" + EVENT_KEY$2;\n  var EVENT_MOUSEENTER = \"mouseenter\" + EVENT_KEY$2;\n  var EVENT_MOUSELEAVE = \"mouseleave\" + EVENT_KEY$2;\n  var EVENT_TOUCHSTART = \"touchstart\" + EVENT_KEY$2;\n  var EVENT_TOUCHMOVE = \"touchmove\" + EVENT_KEY$2;\n  var EVENT_TOUCHEND = \"touchend\" + EVENT_KEY$2;\n  var EVENT_POINTERDOWN = \"pointerdown\" + EVENT_KEY$2;\n  var EVENT_POINTERUP = \"pointerup\" + EVENT_KEY$2;\n  var EVENT_DRAG_START = \"dragstart\" + EVENT_KEY$2;\n  var EVENT_LOAD_DATA_API$1 = \"load\" + EVENT_KEY$2 + DATA_API_KEY$2;\n  var EVENT_CLICK_DATA_API$2 = \"click\" + EVENT_KEY$2 + DATA_API_KEY$2;\n  var CLASS_NAME_CAROUSEL = 'carousel';\n  var CLASS_NAME_ACTIVE$1 = 'active';\n  var CLASS_NAME_SLIDE = 'slide';\n  var CLASS_NAME_RIGHT = 'carousel-item-right';\n  var CLASS_NAME_LEFT = 'carousel-item-left';\n  var CLASS_NAME_NEXT = 'carousel-item-next';\n  var CLASS_NAME_PREV = 'carousel-item-prev';\n  var CLASS_NAME_POINTER_EVENT = 'pointer-event';\n  var SELECTOR_ACTIVE$1 = '.active';\n  var SELECTOR_ACTIVE_ITEM = '.active.carousel-item';\n  var SELECTOR_ITEM = '.carousel-item';\n  var SELECTOR_ITEM_IMG = '.carousel-item img';\n  var SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';\n  var SELECTOR_INDICATORS = '.carousel-indicators';\n  var SELECTOR_DATA_SLIDE = '[data-slide], [data-slide-to]';\n  var SELECTOR_DATA_RIDE = '[data-ride=\"carousel\"]';\n  var PointerType = {\n    TOUCH: 'touch',\n    PEN: 'pen'\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  var Carousel = /*#__PURE__*/function () {\n    function Carousel(element, config) {\n      this._items = null;\n      this._interval = null;\n      this._activeElement = null;\n      this._isPaused = false;\n      this._isSliding = false;\n      this.touchTimeout = null;\n      this.touchStartX = 0;\n      this.touchDeltaX = 0;\n      this._config = this._getConfig(config);\n      this._element = element;\n      this._indicatorsElement = this._element.querySelector(SELECTOR_INDICATORS);\n      this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n      this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent);\n\n      this._addEventListeners();\n    } // Getters\n\n\n    var _proto = Carousel.prototype;\n\n    // Public\n    _proto.next = function next() {\n      if (!this._isSliding) {\n        this._slide(DIRECTION_NEXT);\n      }\n    };\n\n    _proto.nextWhenVisible = function nextWhenVisible() {\n      var $element = $__default['default'](this._element); // Don't call next when the page isn't visible\n      // or the carousel or its parent isn't visible\n\n      if (!document.hidden && $element.is(':visible') && $element.css('visibility') !== 'hidden') {\n        this.next();\n      }\n    };\n\n    _proto.prev = function prev() {\n      if (!this._isSliding) {\n        this._slide(DIRECTION_PREV);\n      }\n    };\n\n    _proto.pause = function pause(event) {\n      if (!event) {\n        this._isPaused = true;\n      }\n\n      if (this._element.querySelector(SELECTOR_NEXT_PREV)) {\n        Util.triggerTransitionEnd(this._element);\n        this.cycle(true);\n      }\n\n      clearInterval(this._interval);\n      this._interval = null;\n    };\n\n    _proto.cycle = function cycle(event) {\n      if (!event) {\n        this._isPaused = false;\n      }\n\n      if (this._interval) {\n        clearInterval(this._interval);\n        this._interval = null;\n      }\n\n      if (this._config.interval && !this._isPaused) {\n        this._updateInterval();\n\n        this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n      }\n    };\n\n    _proto.to = function to(index) {\n      var _this = this;\n\n      this._activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM);\n\n      var activeIndex = this._getItemIndex(this._activeElement);\n\n      if (index > this._items.length - 1 || index < 0) {\n        return;\n      }\n\n      if (this._isSliding) {\n        $__default['default'](this._element).one(EVENT_SLID, function () {\n          return _this.to(index);\n        });\n        return;\n      }\n\n      if (activeIndex === index) {\n        this.pause();\n        this.cycle();\n        return;\n      }\n\n      var direction = index > activeIndex ? DIRECTION_NEXT : DIRECTION_PREV;\n\n      this._slide(direction, this._items[index]);\n    };\n\n    _proto.dispose = function dispose() {\n      $__default['default'](this._element).off(EVENT_KEY$2);\n      $__default['default'].removeData(this._element, DATA_KEY$2);\n      this._items = null;\n      this._config = null;\n      this._element = null;\n      this._interval = null;\n      this._isPaused = null;\n      this._isSliding = null;\n      this._activeElement = null;\n      this._indicatorsElement = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _extends({}, Default, config);\n      Util.typeCheckConfig(NAME$2, config, DefaultType);\n      return config;\n    };\n\n    _proto._handleSwipe = function _handleSwipe() {\n      var absDeltax = Math.abs(this.touchDeltaX);\n\n      if (absDeltax <= SWIPE_THRESHOLD) {\n        return;\n      }\n\n      var direction = absDeltax / this.touchDeltaX;\n      this.touchDeltaX = 0; // swipe left\n\n      if (direction > 0) {\n        this.prev();\n      } // swipe right\n\n\n      if (direction < 0) {\n        this.next();\n      }\n    };\n\n    _proto._addEventListeners = function _addEventListeners() {\n      var _this2 = this;\n\n      if (this._config.keyboard) {\n        $__default['default'](this._element).on(EVENT_KEYDOWN, function (event) {\n          return _this2._keydown(event);\n        });\n      }\n\n      if (this._config.pause === 'hover') {\n        $__default['default'](this._element).on(EVENT_MOUSEENTER, function (event) {\n          return _this2.pause(event);\n        }).on(EVENT_MOUSELEAVE, function (event) {\n          return _this2.cycle(event);\n        });\n      }\n\n      if (this._config.touch) {\n        this._addTouchEventListeners();\n      }\n    };\n\n    _proto._addTouchEventListeners = function _addTouchEventListeners() {\n      var _this3 = this;\n\n      if (!this._touchSupported) {\n        return;\n      }\n\n      var start = function start(event) {\n        if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n          _this3.touchStartX = event.originalEvent.clientX;\n        } else if (!_this3._pointerEvent) {\n          _this3.touchStartX = event.originalEvent.touches[0].clientX;\n        }\n      };\n\n      var move = function move(event) {\n        // ensure swiping with one touch and not pinching\n        if (event.originalEvent.touches && event.originalEvent.touches.length > 1) {\n          _this3.touchDeltaX = 0;\n        } else {\n          _this3.touchDeltaX = event.originalEvent.touches[0].clientX - _this3.touchStartX;\n        }\n      };\n\n      var end = function end(event) {\n        if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n          _this3.touchDeltaX = event.originalEvent.clientX - _this3.touchStartX;\n        }\n\n        _this3._handleSwipe();\n\n        if (_this3._config.pause === 'hover') {\n          // If it's a touch-enabled device, mouseenter/leave are fired as\n          // part of the mouse compatibility events on first tap - the carousel\n          // would stop cycling until user tapped out of it;\n          // here, we listen for touchend, explicitly pause the carousel\n          // (as if it's the second time we tap on it, mouseenter compat event\n          // is NOT fired) and after a timeout (to allow for mouse compatibility\n          // events to fire) we explicitly restart cycling\n          _this3.pause();\n\n          if (_this3.touchTimeout) {\n            clearTimeout(_this3.touchTimeout);\n          }\n\n          _this3.touchTimeout = setTimeout(function (event) {\n            return _this3.cycle(event);\n          }, TOUCHEVENT_COMPAT_WAIT + _this3._config.interval);\n        }\n      };\n\n      $__default['default'](this._element.querySelectorAll(SELECTOR_ITEM_IMG)).on(EVENT_DRAG_START, function (e) {\n        return e.preventDefault();\n      });\n\n      if (this._pointerEvent) {\n        $__default['default'](this._element).on(EVENT_POINTERDOWN, function (event) {\n          return start(event);\n        });\n        $__default['default'](this._element).on(EVENT_POINTERUP, function (event) {\n          return end(event);\n        });\n\n        this._element.classList.add(CLASS_NAME_POINTER_EVENT);\n      } else {\n        $__default['default'](this._element).on(EVENT_TOUCHSTART, function (event) {\n          return start(event);\n        });\n        $__default['default'](this._element).on(EVENT_TOUCHMOVE, function (event) {\n          return move(event);\n        });\n        $__default['default'](this._element).on(EVENT_TOUCHEND, function (event) {\n          return end(event);\n        });\n      }\n    };\n\n    _proto._keydown = function _keydown(event) {\n      if (/input|textarea/i.test(event.target.tagName)) {\n        return;\n      }\n\n      switch (event.which) {\n        case ARROW_LEFT_KEYCODE:\n          event.preventDefault();\n          this.prev();\n          break;\n\n        case ARROW_RIGHT_KEYCODE:\n          event.preventDefault();\n          this.next();\n          break;\n      }\n    };\n\n    _proto._getItemIndex = function _getItemIndex(element) {\n      this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(SELECTOR_ITEM)) : [];\n      return this._items.indexOf(element);\n    };\n\n    _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) {\n      var isNextDirection = direction === DIRECTION_NEXT;\n      var isPrevDirection = direction === DIRECTION_PREV;\n\n      var activeIndex = this._getItemIndex(activeElement);\n\n      var lastItemIndex = this._items.length - 1;\n      var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex;\n\n      if (isGoingToWrap && !this._config.wrap) {\n        return activeElement;\n      }\n\n      var delta = direction === DIRECTION_PREV ? -1 : 1;\n      var itemIndex = (activeIndex + delta) % this._items.length;\n      return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];\n    };\n\n    _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) {\n      var targetIndex = this._getItemIndex(relatedTarget);\n\n      var fromIndex = this._getItemIndex(this._element.querySelector(SELECTOR_ACTIVE_ITEM));\n\n      var slideEvent = $__default['default'].Event(EVENT_SLIDE, {\n        relatedTarget: relatedTarget,\n        direction: eventDirectionName,\n        from: fromIndex,\n        to: targetIndex\n      });\n      $__default['default'](this._element).trigger(slideEvent);\n      return slideEvent;\n    };\n\n    _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) {\n      if (this._indicatorsElement) {\n        var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(SELECTOR_ACTIVE$1));\n        $__default['default'](indicators).removeClass(CLASS_NAME_ACTIVE$1);\n\n        var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];\n\n        if (nextIndicator) {\n          $__default['default'](nextIndicator).addClass(CLASS_NAME_ACTIVE$1);\n        }\n      }\n    };\n\n    _proto._updateInterval = function _updateInterval() {\n      var element = this._activeElement || this._element.querySelector(SELECTOR_ACTIVE_ITEM);\n\n      if (!element) {\n        return;\n      }\n\n      var elementInterval = parseInt(element.getAttribute('data-interval'), 10);\n\n      if (elementInterval) {\n        this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n        this._config.interval = elementInterval;\n      } else {\n        this._config.interval = this._config.defaultInterval || this._config.interval;\n      }\n    };\n\n    _proto._slide = function _slide(direction, element) {\n      var _this4 = this;\n\n      var activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM);\n\n      var activeElementIndex = this._getItemIndex(activeElement);\n\n      var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement);\n\n      var nextElementIndex = this._getItemIndex(nextElement);\n\n      var isCycling = Boolean(this._interval);\n      var directionalClassName;\n      var orderClassName;\n      var eventDirectionName;\n\n      if (direction === DIRECTION_NEXT) {\n        directionalClassName = CLASS_NAME_LEFT;\n        orderClassName = CLASS_NAME_NEXT;\n        eventDirectionName = DIRECTION_LEFT;\n      } else {\n        directionalClassName = CLASS_NAME_RIGHT;\n        orderClassName = CLASS_NAME_PREV;\n        eventDirectionName = DIRECTION_RIGHT;\n      }\n\n      if (nextElement && $__default['default'](nextElement).hasClass(CLASS_NAME_ACTIVE$1)) {\n        this._isSliding = false;\n        return;\n      }\n\n      var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n      if (slideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (!activeElement || !nextElement) {\n        // Some weirdness is happening, so we bail\n        return;\n      }\n\n      this._isSliding = true;\n\n      if (isCycling) {\n        this.pause();\n      }\n\n      this._setActiveIndicatorElement(nextElement);\n\n      this._activeElement = nextElement;\n      var slidEvent = $__default['default'].Event(EVENT_SLID, {\n        relatedTarget: nextElement,\n        direction: eventDirectionName,\n        from: activeElementIndex,\n        to: nextElementIndex\n      });\n\n      if ($__default['default'](this._element).hasClass(CLASS_NAME_SLIDE)) {\n        $__default['default'](nextElement).addClass(orderClassName);\n        Util.reflow(nextElement);\n        $__default['default'](activeElement).addClass(directionalClassName);\n        $__default['default'](nextElement).addClass(directionalClassName);\n        var transitionDuration = Util.getTransitionDurationFromElement(activeElement);\n        $__default['default'](activeElement).one(Util.TRANSITION_END, function () {\n          $__default['default'](nextElement).removeClass(directionalClassName + \" \" + orderClassName).addClass(CLASS_NAME_ACTIVE$1);\n          $__default['default'](activeElement).removeClass(CLASS_NAME_ACTIVE$1 + \" \" + orderClassName + \" \" + directionalClassName);\n          _this4._isSliding = false;\n          setTimeout(function () {\n            return $__default['default'](_this4._element).trigger(slidEvent);\n          }, 0);\n        }).emulateTransitionEnd(transitionDuration);\n      } else {\n        $__default['default'](activeElement).removeClass(CLASS_NAME_ACTIVE$1);\n        $__default['default'](nextElement).addClass(CLASS_NAME_ACTIVE$1);\n        this._isSliding = false;\n        $__default['default'](this._element).trigger(slidEvent);\n      }\n\n      if (isCycling) {\n        this.cycle();\n      }\n    } // Static\n    ;\n\n    Carousel._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $__default['default'](this).data(DATA_KEY$2);\n\n        var _config = _extends({}, Default, $__default['default'](this).data());\n\n        if (typeof config === 'object') {\n          _config = _extends({}, _config, config);\n        }\n\n        var action = typeof config === 'string' ? config : _config.slide;\n\n        if (!data) {\n          data = new Carousel(this, _config);\n          $__default['default'](this).data(DATA_KEY$2, data);\n        }\n\n        if (typeof config === 'number') {\n          data.to(config);\n        } else if (typeof action === 'string') {\n          if (typeof data[action] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + action + \"\\\"\");\n          }\n\n          data[action]();\n        } else if (_config.interval && _config.ride) {\n          data.pause();\n          data.cycle();\n        }\n      });\n    };\n\n    Carousel._dataApiClickHandler = function _dataApiClickHandler(event) {\n      var selector = Util.getSelectorFromElement(this);\n\n      if (!selector) {\n        return;\n      }\n\n      var target = $__default['default'](selector)[0];\n\n      if (!target || !$__default['default'](target).hasClass(CLASS_NAME_CAROUSEL)) {\n        return;\n      }\n\n      var config = _extends({}, $__default['default'](target).data(), $__default['default'](this).data());\n\n      var slideIndex = this.getAttribute('data-slide-to');\n\n      if (slideIndex) {\n        config.interval = false;\n      }\n\n      Carousel._jQueryInterface.call($__default['default'](target), config);\n\n      if (slideIndex) {\n        $__default['default'](target).data(DATA_KEY$2).to(slideIndex);\n      }\n\n      event.preventDefault();\n    };\n\n    _createClass(Carousel, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$2;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default;\n      }\n    }]);\n\n    return Carousel;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $__default['default'](document).on(EVENT_CLICK_DATA_API$2, SELECTOR_DATA_SLIDE, Carousel._dataApiClickHandler);\n  $__default['default'](window).on(EVENT_LOAD_DATA_API$1, function () {\n    var carousels = [].slice.call(document.querySelectorAll(SELECTOR_DATA_RIDE));\n\n    for (var i = 0, len = carousels.length; i < len; i++) {\n      var $carousel = $__default['default'](carousels[i]);\n\n      Carousel._jQueryInterface.call($carousel, $carousel.data());\n    }\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $__default['default'].fn[NAME$2] = Carousel._jQueryInterface;\n  $__default['default'].fn[NAME$2].Constructor = Carousel;\n\n  $__default['default'].fn[NAME$2].noConflict = function () {\n    $__default['default'].fn[NAME$2] = JQUERY_NO_CONFLICT$2;\n    return Carousel._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$3 = 'collapse';\n  var VERSION$3 = '4.6.0';\n  var DATA_KEY$3 = 'bs.collapse';\n  var EVENT_KEY$3 = \".\" + DATA_KEY$3;\n  var DATA_API_KEY$3 = '.data-api';\n  var JQUERY_NO_CONFLICT$3 = $__default['default'].fn[NAME$3];\n  var Default$1 = {\n    toggle: true,\n    parent: ''\n  };\n  var DefaultType$1 = {\n    toggle: 'boolean',\n    parent: '(string|element)'\n  };\n  var EVENT_SHOW = \"show\" + EVENT_KEY$3;\n  var EVENT_SHOWN = \"shown\" + EVENT_KEY$3;\n  var EVENT_HIDE = \"hide\" + EVENT_KEY$3;\n  var EVENT_HIDDEN = \"hidden\" + EVENT_KEY$3;\n  var EVENT_CLICK_DATA_API$3 = \"click\" + EVENT_KEY$3 + DATA_API_KEY$3;\n  var CLASS_NAME_SHOW$1 = 'show';\n  var CLASS_NAME_COLLAPSE = 'collapse';\n  var CLASS_NAME_COLLAPSING = 'collapsing';\n  var CLASS_NAME_COLLAPSED = 'collapsed';\n  var DIMENSION_WIDTH = 'width';\n  var DIMENSION_HEIGHT = 'height';\n  var SELECTOR_ACTIVES = '.show, .collapsing';\n  var SELECTOR_DATA_TOGGLE$1 = '[data-toggle=\"collapse\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  var Collapse = /*#__PURE__*/function () {\n    function Collapse(element, config) {\n      this._isTransitioning = false;\n      this._element = element;\n      this._config = this._getConfig(config);\n      this._triggerArray = [].slice.call(document.querySelectorAll(\"[data-toggle=\\\"collapse\\\"][href=\\\"#\" + element.id + \"\\\"],\" + (\"[data-toggle=\\\"collapse\\\"][data-target=\\\"#\" + element.id + \"\\\"]\")));\n      var toggleList = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$1));\n\n      for (var i = 0, len = toggleList.length; i < len; i++) {\n        var elem = toggleList[i];\n        var selector = Util.getSelectorFromElement(elem);\n        var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) {\n          return foundElem === element;\n        });\n\n        if (selector !== null && filterElement.length > 0) {\n          this._selector = selector;\n\n          this._triggerArray.push(elem);\n        }\n      }\n\n      this._parent = this._config.parent ? this._getParent() : null;\n\n      if (!this._config.parent) {\n        this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n      }\n\n      if (this._config.toggle) {\n        this.toggle();\n      }\n    } // Getters\n\n\n    var _proto = Collapse.prototype;\n\n    // Public\n    _proto.toggle = function toggle() {\n      if ($__default['default'](this._element).hasClass(CLASS_NAME_SHOW$1)) {\n        this.hide();\n      } else {\n        this.show();\n      }\n    };\n\n    _proto.show = function show() {\n      var _this = this;\n\n      if (this._isTransitioning || $__default['default'](this._element).hasClass(CLASS_NAME_SHOW$1)) {\n        return;\n      }\n\n      var actives;\n      var activesData;\n\n      if (this._parent) {\n        actives = [].slice.call(this._parent.querySelectorAll(SELECTOR_ACTIVES)).filter(function (elem) {\n          if (typeof _this._config.parent === 'string') {\n            return elem.getAttribute('data-parent') === _this._config.parent;\n          }\n\n          return elem.classList.contains(CLASS_NAME_COLLAPSE);\n        });\n\n        if (actives.length === 0) {\n          actives = null;\n        }\n      }\n\n      if (actives) {\n        activesData = $__default['default'](actives).not(this._selector).data(DATA_KEY$3);\n\n        if (activesData && activesData._isTransitioning) {\n          return;\n        }\n      }\n\n      var startEvent = $__default['default'].Event(EVENT_SHOW);\n      $__default['default'](this._element).trigger(startEvent);\n\n      if (startEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (actives) {\n        Collapse._jQueryInterface.call($__default['default'](actives).not(this._selector), 'hide');\n\n        if (!activesData) {\n          $__default['default'](actives).data(DATA_KEY$3, null);\n        }\n      }\n\n      var dimension = this._getDimension();\n\n      $__default['default'](this._element).removeClass(CLASS_NAME_COLLAPSE).addClass(CLASS_NAME_COLLAPSING);\n      this._element.style[dimension] = 0;\n\n      if (this._triggerArray.length) {\n        $__default['default'](this._triggerArray).removeClass(CLASS_NAME_COLLAPSED).attr('aria-expanded', true);\n      }\n\n      this.setTransitioning(true);\n\n      var complete = function complete() {\n        $__default['default'](_this._element).removeClass(CLASS_NAME_COLLAPSING).addClass(CLASS_NAME_COLLAPSE + \" \" + CLASS_NAME_SHOW$1);\n        _this._element.style[dimension] = '';\n\n        _this.setTransitioning(false);\n\n        $__default['default'](_this._element).trigger(EVENT_SHOWN);\n      };\n\n      var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n      var scrollSize = \"scroll\" + capitalizedDimension;\n      var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n      $__default['default'](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      this._element.style[dimension] = this._element[scrollSize] + \"px\";\n    };\n\n    _proto.hide = function hide() {\n      var _this2 = this;\n\n      if (this._isTransitioning || !$__default['default'](this._element).hasClass(CLASS_NAME_SHOW$1)) {\n        return;\n      }\n\n      var startEvent = $__default['default'].Event(EVENT_HIDE);\n      $__default['default'](this._element).trigger(startEvent);\n\n      if (startEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      var dimension = this._getDimension();\n\n      this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + \"px\";\n      Util.reflow(this._element);\n      $__default['default'](this._element).addClass(CLASS_NAME_COLLAPSING).removeClass(CLASS_NAME_COLLAPSE + \" \" + CLASS_NAME_SHOW$1);\n      var triggerArrayLength = this._triggerArray.length;\n\n      if (triggerArrayLength > 0) {\n        for (var i = 0; i < triggerArrayLength; i++) {\n          var trigger = this._triggerArray[i];\n          var selector = Util.getSelectorFromElement(trigger);\n\n          if (selector !== null) {\n            var $elem = $__default['default']([].slice.call(document.querySelectorAll(selector)));\n\n            if (!$elem.hasClass(CLASS_NAME_SHOW$1)) {\n              $__default['default'](trigger).addClass(CLASS_NAME_COLLAPSED).attr('aria-expanded', false);\n            }\n          }\n        }\n      }\n\n      this.setTransitioning(true);\n\n      var complete = function complete() {\n        _this2.setTransitioning(false);\n\n        $__default['default'](_this2._element).removeClass(CLASS_NAME_COLLAPSING).addClass(CLASS_NAME_COLLAPSE).trigger(EVENT_HIDDEN);\n      };\n\n      this._element.style[dimension] = '';\n      var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n      $__default['default'](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n    };\n\n    _proto.setTransitioning = function setTransitioning(isTransitioning) {\n      this._isTransitioning = isTransitioning;\n    };\n\n    _proto.dispose = function dispose() {\n      $__default['default'].removeData(this._element, DATA_KEY$3);\n      this._config = null;\n      this._parent = null;\n      this._element = null;\n      this._triggerArray = null;\n      this._isTransitioning = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _extends({}, Default$1, config);\n      config.toggle = Boolean(config.toggle); // Coerce string values\n\n      Util.typeCheckConfig(NAME$3, config, DefaultType$1);\n      return config;\n    };\n\n    _proto._getDimension = function _getDimension() {\n      var hasWidth = $__default['default'](this._element).hasClass(DIMENSION_WIDTH);\n      return hasWidth ? DIMENSION_WIDTH : DIMENSION_HEIGHT;\n    };\n\n    _proto._getParent = function _getParent() {\n      var _this3 = this;\n\n      var parent;\n\n      if (Util.isElement(this._config.parent)) {\n        parent = this._config.parent; // It's a jQuery object\n\n        if (typeof this._config.parent.jquery !== 'undefined') {\n          parent = this._config.parent[0];\n        }\n      } else {\n        parent = document.querySelector(this._config.parent);\n      }\n\n      var selector = \"[data-toggle=\\\"collapse\\\"][data-parent=\\\"\" + this._config.parent + \"\\\"]\";\n      var children = [].slice.call(parent.querySelectorAll(selector));\n      $__default['default'](children).each(function (i, element) {\n        _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);\n      });\n      return parent;\n    };\n\n    _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {\n      var isOpen = $__default['default'](element).hasClass(CLASS_NAME_SHOW$1);\n\n      if (triggerArray.length) {\n        $__default['default'](triggerArray).toggleClass(CLASS_NAME_COLLAPSED, !isOpen).attr('aria-expanded', isOpen);\n      }\n    } // Static\n    ;\n\n    Collapse._getTargetFromElement = function _getTargetFromElement(element) {\n      var selector = Util.getSelectorFromElement(element);\n      return selector ? document.querySelector(selector) : null;\n    };\n\n    Collapse._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $element = $__default['default'](this);\n        var data = $element.data(DATA_KEY$3);\n\n        var _config = _extends({}, Default$1, $element.data(), typeof config === 'object' && config ? config : {});\n\n        if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n          _config.toggle = false;\n        }\n\n        if (!data) {\n          data = new Collapse(this, _config);\n          $element.data(DATA_KEY$3, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Collapse, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$3;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$1;\n      }\n    }]);\n\n    return Collapse;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $__default['default'](document).on(EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$1, function (event) {\n    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n    if (event.currentTarget.tagName === 'A') {\n      event.preventDefault();\n    }\n\n    var $trigger = $__default['default'](this);\n    var selector = Util.getSelectorFromElement(this);\n    var selectors = [].slice.call(document.querySelectorAll(selector));\n    $__default['default'](selectors).each(function () {\n      var $target = $__default['default'](this);\n      var data = $target.data(DATA_KEY$3);\n      var config = data ? 'toggle' : $trigger.data();\n\n      Collapse._jQueryInterface.call($target, config);\n    });\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $__default['default'].fn[NAME$3] = Collapse._jQueryInterface;\n  $__default['default'].fn[NAME$3].Constructor = Collapse;\n\n  $__default['default'].fn[NAME$3].noConflict = function () {\n    $__default['default'].fn[NAME$3] = JQUERY_NO_CONFLICT$3;\n    return Collapse._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$4 = 'dropdown';\n  var VERSION$4 = '4.6.0';\n  var DATA_KEY$4 = 'bs.dropdown';\n  var EVENT_KEY$4 = \".\" + DATA_KEY$4;\n  var DATA_API_KEY$4 = '.data-api';\n  var JQUERY_NO_CONFLICT$4 = $__default['default'].fn[NAME$4];\n  var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key\n\n  var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key\n\n  var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key\n\n  var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key\n\n  var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key\n\n  var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)\n\n  var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + \"|\" + ARROW_DOWN_KEYCODE + \"|\" + ESCAPE_KEYCODE);\n  var EVENT_HIDE$1 = \"hide\" + EVENT_KEY$4;\n  var EVENT_HIDDEN$1 = \"hidden\" + EVENT_KEY$4;\n  var EVENT_SHOW$1 = \"show\" + EVENT_KEY$4;\n  var EVENT_SHOWN$1 = \"shown\" + EVENT_KEY$4;\n  var EVENT_CLICK = \"click\" + EVENT_KEY$4;\n  var EVENT_CLICK_DATA_API$4 = \"click\" + EVENT_KEY$4 + DATA_API_KEY$4;\n  var EVENT_KEYDOWN_DATA_API = \"keydown\" + EVENT_KEY$4 + DATA_API_KEY$4;\n  var EVENT_KEYUP_DATA_API = \"keyup\" + EVENT_KEY$4 + DATA_API_KEY$4;\n  var CLASS_NAME_DISABLED = 'disabled';\n  var CLASS_NAME_SHOW$2 = 'show';\n  var CLASS_NAME_DROPUP = 'dropup';\n  var CLASS_NAME_DROPRIGHT = 'dropright';\n  var CLASS_NAME_DROPLEFT = 'dropleft';\n  var CLASS_NAME_MENURIGHT = 'dropdown-menu-right';\n  var CLASS_NAME_POSITION_STATIC = 'position-static';\n  var SELECTOR_DATA_TOGGLE$2 = '[data-toggle=\"dropdown\"]';\n  var SELECTOR_FORM_CHILD = '.dropdown form';\n  var SELECTOR_MENU = '.dropdown-menu';\n  var SELECTOR_NAVBAR_NAV = '.navbar-nav';\n  var SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';\n  var PLACEMENT_TOP = 'top-start';\n  var PLACEMENT_TOPEND = 'top-end';\n  var PLACEMENT_BOTTOM = 'bottom-start';\n  var PLACEMENT_BOTTOMEND = 'bottom-end';\n  var PLACEMENT_RIGHT = 'right-start';\n  var PLACEMENT_LEFT = 'left-start';\n  var Default$2 = {\n    offset: 0,\n    flip: true,\n    boundary: 'scrollParent',\n    reference: 'toggle',\n    display: 'dynamic',\n    popperConfig: null\n  };\n  var DefaultType$2 = {\n    offset: '(number|string|function)',\n    flip: 'boolean',\n    boundary: '(string|element)',\n    reference: '(string|element)',\n    display: 'string',\n    popperConfig: '(null|object)'\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  var Dropdown = /*#__PURE__*/function () {\n    function Dropdown(element, config) {\n      this._element = element;\n      this._popper = null;\n      this._config = this._getConfig(config);\n      this._menu = this._getMenuElement();\n      this._inNavbar = this._detectNavbar();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    var _proto = Dropdown.prototype;\n\n    // Public\n    _proto.toggle = function toggle() {\n      if (this._element.disabled || $__default['default'](this._element).hasClass(CLASS_NAME_DISABLED)) {\n        return;\n      }\n\n      var isActive = $__default['default'](this._menu).hasClass(CLASS_NAME_SHOW$2);\n\n      Dropdown._clearMenus();\n\n      if (isActive) {\n        return;\n      }\n\n      this.show(true);\n    };\n\n    _proto.show = function show(usePopper) {\n      if (usePopper === void 0) {\n        usePopper = false;\n      }\n\n      if (this._element.disabled || $__default['default'](this._element).hasClass(CLASS_NAME_DISABLED) || $__default['default'](this._menu).hasClass(CLASS_NAME_SHOW$2)) {\n        return;\n      }\n\n      var relatedTarget = {\n        relatedTarget: this._element\n      };\n      var showEvent = $__default['default'].Event(EVENT_SHOW$1, relatedTarget);\n\n      var parent = Dropdown._getParentFromElement(this._element);\n\n      $__default['default'](parent).trigger(showEvent);\n\n      if (showEvent.isDefaultPrevented()) {\n        return;\n      } // Totally disable Popper for Dropdowns in Navbar\n\n\n      if (!this._inNavbar && usePopper) {\n        /**\n         * Check for Popper dependency\n         * Popper - https://popper.js.org\n         */\n        if (typeof Popper__default['default'] === 'undefined') {\n          throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)');\n        }\n\n        var referenceElement = this._element;\n\n        if (this._config.reference === 'parent') {\n          referenceElement = parent;\n        } else if (Util.isElement(this._config.reference)) {\n          referenceElement = this._config.reference; // Check if it's jQuery element\n\n          if (typeof this._config.reference.jquery !== 'undefined') {\n            referenceElement = this._config.reference[0];\n          }\n        } // If boundary is not `scrollParent`, then set position to `static`\n        // to allow the menu to \"escape\" the scroll parent's boundaries\n        // https://github.com/twbs/bootstrap/issues/24251\n\n\n        if (this._config.boundary !== 'scrollParent') {\n          $__default['default'](parent).addClass(CLASS_NAME_POSITION_STATIC);\n        }\n\n        this._popper = new Popper__default['default'](referenceElement, this._menu, this._getPopperConfig());\n      } // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement && $__default['default'](parent).closest(SELECTOR_NAVBAR_NAV).length === 0) {\n        $__default['default'](document.body).children().on('mouseover', null, $__default['default'].noop);\n      }\n\n      this._element.focus();\n\n      this._element.setAttribute('aria-expanded', true);\n\n      $__default['default'](this._menu).toggleClass(CLASS_NAME_SHOW$2);\n      $__default['default'](parent).toggleClass(CLASS_NAME_SHOW$2).trigger($__default['default'].Event(EVENT_SHOWN$1, relatedTarget));\n    };\n\n    _proto.hide = function hide() {\n      if (this._element.disabled || $__default['default'](this._element).hasClass(CLASS_NAME_DISABLED) || !$__default['default'](this._menu).hasClass(CLASS_NAME_SHOW$2)) {\n        return;\n      }\n\n      var relatedTarget = {\n        relatedTarget: this._element\n      };\n      var hideEvent = $__default['default'].Event(EVENT_HIDE$1, relatedTarget);\n\n      var parent = Dropdown._getParentFromElement(this._element);\n\n      $__default['default'](parent).trigger(hideEvent);\n\n      if (hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      $__default['default'](this._menu).toggleClass(CLASS_NAME_SHOW$2);\n      $__default['default'](parent).toggleClass(CLASS_NAME_SHOW$2).trigger($__default['default'].Event(EVENT_HIDDEN$1, relatedTarget));\n    };\n\n    _proto.dispose = function dispose() {\n      $__default['default'].removeData(this._element, DATA_KEY$4);\n      $__default['default'](this._element).off(EVENT_KEY$4);\n      this._element = null;\n      this._menu = null;\n\n      if (this._popper !== null) {\n        this._popper.destroy();\n\n        this._popper = null;\n      }\n    };\n\n    _proto.update = function update() {\n      this._inNavbar = this._detectNavbar();\n\n      if (this._popper !== null) {\n        this._popper.scheduleUpdate();\n      }\n    } // Private\n    ;\n\n    _proto._addEventListeners = function _addEventListeners() {\n      var _this = this;\n\n      $__default['default'](this._element).on(EVENT_CLICK, function (event) {\n        event.preventDefault();\n        event.stopPropagation();\n\n        _this.toggle();\n      });\n    };\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _extends({}, this.constructor.Default, $__default['default'](this._element).data(), config);\n      Util.typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n      return config;\n    };\n\n    _proto._getMenuElement = function _getMenuElement() {\n      if (!this._menu) {\n        var parent = Dropdown._getParentFromElement(this._element);\n\n        if (parent) {\n          this._menu = parent.querySelector(SELECTOR_MENU);\n        }\n      }\n\n      return this._menu;\n    };\n\n    _proto._getPlacement = function _getPlacement() {\n      var $parentDropdown = $__default['default'](this._element.parentNode);\n      var placement = PLACEMENT_BOTTOM; // Handle dropup\n\n      if ($parentDropdown.hasClass(CLASS_NAME_DROPUP)) {\n        placement = $__default['default'](this._menu).hasClass(CLASS_NAME_MENURIGHT) ? PLACEMENT_TOPEND : PLACEMENT_TOP;\n      } else if ($parentDropdown.hasClass(CLASS_NAME_DROPRIGHT)) {\n        placement = PLACEMENT_RIGHT;\n      } else if ($parentDropdown.hasClass(CLASS_NAME_DROPLEFT)) {\n        placement = PLACEMENT_LEFT;\n      } else if ($__default['default'](this._menu).hasClass(CLASS_NAME_MENURIGHT)) {\n        placement = PLACEMENT_BOTTOMEND;\n      }\n\n      return placement;\n    };\n\n    _proto._detectNavbar = function _detectNavbar() {\n      return $__default['default'](this._element).closest('.navbar').length > 0;\n    };\n\n    _proto._getOffset = function _getOffset() {\n      var _this2 = this;\n\n      var offset = {};\n\n      if (typeof this._config.offset === 'function') {\n        offset.fn = function (data) {\n          data.offsets = _extends({}, data.offsets, _this2._config.offset(data.offsets, _this2._element) || {});\n          return data;\n        };\n      } else {\n        offset.offset = this._config.offset;\n      }\n\n      return offset;\n    };\n\n    _proto._getPopperConfig = function _getPopperConfig() {\n      var popperConfig = {\n        placement: this._getPlacement(),\n        modifiers: {\n          offset: this._getOffset(),\n          flip: {\n            enabled: this._config.flip\n          },\n          preventOverflow: {\n            boundariesElement: this._config.boundary\n          }\n        }\n      }; // Disable Popper if we have a static display\n\n      if (this._config.display === 'static') {\n        popperConfig.modifiers.applyStyle = {\n          enabled: false\n        };\n      }\n\n      return _extends({}, popperConfig, this._config.popperConfig);\n    } // Static\n    ;\n\n    Dropdown._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $__default['default'](this).data(DATA_KEY$4);\n\n        var _config = typeof config === 'object' ? config : null;\n\n        if (!data) {\n          data = new Dropdown(this, _config);\n          $__default['default'](this).data(DATA_KEY$4, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    Dropdown._clearMenus = function _clearMenus(event) {\n      if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) {\n        return;\n      }\n\n      var toggles = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$2));\n\n      for (var i = 0, len = toggles.length; i < len; i++) {\n        var parent = Dropdown._getParentFromElement(toggles[i]);\n\n        var context = $__default['default'](toggles[i]).data(DATA_KEY$4);\n        var relatedTarget = {\n          relatedTarget: toggles[i]\n        };\n\n        if (event && event.type === 'click') {\n          relatedTarget.clickEvent = event;\n        }\n\n        if (!context) {\n          continue;\n        }\n\n        var dropdownMenu = context._menu;\n\n        if (!$__default['default'](parent).hasClass(CLASS_NAME_SHOW$2)) {\n          continue;\n        }\n\n        if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $__default['default'].contains(parent, event.target)) {\n          continue;\n        }\n\n        var hideEvent = $__default['default'].Event(EVENT_HIDE$1, relatedTarget);\n        $__default['default'](parent).trigger(hideEvent);\n\n        if (hideEvent.isDefaultPrevented()) {\n          continue;\n        } // If this is a touch-enabled device we remove the extra\n        // empty mouseover listeners we added for iOS support\n\n\n        if ('ontouchstart' in document.documentElement) {\n          $__default['default'](document.body).children().off('mouseover', null, $__default['default'].noop);\n        }\n\n        toggles[i].setAttribute('aria-expanded', 'false');\n\n        if (context._popper) {\n          context._popper.destroy();\n        }\n\n        $__default['default'](dropdownMenu).removeClass(CLASS_NAME_SHOW$2);\n        $__default['default'](parent).removeClass(CLASS_NAME_SHOW$2).trigger($__default['default'].Event(EVENT_HIDDEN$1, relatedTarget));\n      }\n    };\n\n    Dropdown._getParentFromElement = function _getParentFromElement(element) {\n      var parent;\n      var selector = Util.getSelectorFromElement(element);\n\n      if (selector) {\n        parent = document.querySelector(selector);\n      }\n\n      return parent || element.parentNode;\n    } // eslint-disable-next-line complexity\n    ;\n\n    Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {\n      // If not input/textarea:\n      //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n      // If input/textarea:\n      //  - If space key => not a dropdown command\n      //  - If key is other than escape\n      //    - If key is not up or down => not a dropdown command\n      //    - If trigger inside the menu => not a dropdown command\n      if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $__default['default'](event.target).closest(SELECTOR_MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {\n        return;\n      }\n\n      if (this.disabled || $__default['default'](this).hasClass(CLASS_NAME_DISABLED)) {\n        return;\n      }\n\n      var parent = Dropdown._getParentFromElement(this);\n\n      var isActive = $__default['default'](parent).hasClass(CLASS_NAME_SHOW$2);\n\n      if (!isActive && event.which === ESCAPE_KEYCODE) {\n        return;\n      }\n\n      event.preventDefault();\n      event.stopPropagation();\n\n      if (!isActive || event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE) {\n        if (event.which === ESCAPE_KEYCODE) {\n          $__default['default'](parent.querySelector(SELECTOR_DATA_TOGGLE$2)).trigger('focus');\n        }\n\n        $__default['default'](this).trigger('click');\n        return;\n      }\n\n      var items = [].slice.call(parent.querySelectorAll(SELECTOR_VISIBLE_ITEMS)).filter(function (item) {\n        return $__default['default'](item).is(':visible');\n      });\n\n      if (items.length === 0) {\n        return;\n      }\n\n      var index = items.indexOf(event.target);\n\n      if (event.which === ARROW_UP_KEYCODE && index > 0) {\n        // Up\n        index--;\n      }\n\n      if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) {\n        // Down\n        index++;\n      }\n\n      if (index < 0) {\n        index = 0;\n      }\n\n      items[index].focus();\n    };\n\n    _createClass(Dropdown, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$4;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$2;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType$2;\n      }\n    }]);\n\n    return Dropdown;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $__default['default'](document).on(EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$2, Dropdown._dataApiKeydownHandler).on(EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown._dataApiKeydownHandler).on(EVENT_CLICK_DATA_API$4 + \" \" + EVENT_KEYUP_DATA_API, Dropdown._clearMenus).on(EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$2, function (event) {\n    event.preventDefault();\n    event.stopPropagation();\n\n    Dropdown._jQueryInterface.call($__default['default'](this), 'toggle');\n  }).on(EVENT_CLICK_DATA_API$4, SELECTOR_FORM_CHILD, function (e) {\n    e.stopPropagation();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $__default['default'].fn[NAME$4] = Dropdown._jQueryInterface;\n  $__default['default'].fn[NAME$4].Constructor = Dropdown;\n\n  $__default['default'].fn[NAME$4].noConflict = function () {\n    $__default['default'].fn[NAME$4] = JQUERY_NO_CONFLICT$4;\n    return Dropdown._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$5 = 'modal';\n  var VERSION$5 = '4.6.0';\n  var DATA_KEY$5 = 'bs.modal';\n  var EVENT_KEY$5 = \".\" + DATA_KEY$5;\n  var DATA_API_KEY$5 = '.data-api';\n  var JQUERY_NO_CONFLICT$5 = $__default['default'].fn[NAME$5];\n  var ESCAPE_KEYCODE$1 = 27; // KeyboardEvent.which value for Escape (Esc) key\n\n  var Default$3 = {\n    backdrop: true,\n    keyboard: true,\n    focus: true,\n    show: true\n  };\n  var DefaultType$3 = {\n    backdrop: '(boolean|string)',\n    keyboard: 'boolean',\n    focus: 'boolean',\n    show: 'boolean'\n  };\n  var EVENT_HIDE$2 = \"hide\" + EVENT_KEY$5;\n  var EVENT_HIDE_PREVENTED = \"hidePrevented\" + EVENT_KEY$5;\n  var EVENT_HIDDEN$2 = \"hidden\" + EVENT_KEY$5;\n  var EVENT_SHOW$2 = \"show\" + EVENT_KEY$5;\n  var EVENT_SHOWN$2 = \"shown\" + EVENT_KEY$5;\n  var EVENT_FOCUSIN = \"focusin\" + EVENT_KEY$5;\n  var EVENT_RESIZE = \"resize\" + EVENT_KEY$5;\n  var EVENT_CLICK_DISMISS = \"click.dismiss\" + EVENT_KEY$5;\n  var EVENT_KEYDOWN_DISMISS = \"keydown.dismiss\" + EVENT_KEY$5;\n  var EVENT_MOUSEUP_DISMISS = \"mouseup.dismiss\" + EVENT_KEY$5;\n  var EVENT_MOUSEDOWN_DISMISS = \"mousedown.dismiss\" + EVENT_KEY$5;\n  var EVENT_CLICK_DATA_API$5 = \"click\" + EVENT_KEY$5 + DATA_API_KEY$5;\n  var CLASS_NAME_SCROLLABLE = 'modal-dialog-scrollable';\n  var CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure';\n  var CLASS_NAME_BACKDROP = 'modal-backdrop';\n  var CLASS_NAME_OPEN = 'modal-open';\n  var CLASS_NAME_FADE$1 = 'fade';\n  var CLASS_NAME_SHOW$3 = 'show';\n  var CLASS_NAME_STATIC = 'modal-static';\n  var SELECTOR_DIALOG = '.modal-dialog';\n  var SELECTOR_MODAL_BODY = '.modal-body';\n  var SELECTOR_DATA_TOGGLE$3 = '[data-toggle=\"modal\"]';\n  var SELECTOR_DATA_DISMISS = '[data-dismiss=\"modal\"]';\n  var SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';\n  var SELECTOR_STICKY_CONTENT = '.sticky-top';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  var Modal = /*#__PURE__*/function () {\n    function Modal(element, config) {\n      this._config = this._getConfig(config);\n      this._element = element;\n      this._dialog = element.querySelector(SELECTOR_DIALOG);\n      this._backdrop = null;\n      this._isShown = false;\n      this._isBodyOverflowing = false;\n      this._ignoreBackdropClick = false;\n      this._isTransitioning = false;\n      this._scrollbarWidth = 0;\n    } // Getters\n\n\n    var _proto = Modal.prototype;\n\n    // Public\n    _proto.toggle = function toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    };\n\n    _proto.show = function show(relatedTarget) {\n      var _this = this;\n\n      if (this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      if ($__default['default'](this._element).hasClass(CLASS_NAME_FADE$1)) {\n        this._isTransitioning = true;\n      }\n\n      var showEvent = $__default['default'].Event(EVENT_SHOW$2, {\n        relatedTarget: relatedTarget\n      });\n      $__default['default'](this._element).trigger(showEvent);\n\n      if (this._isShown || showEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._isShown = true;\n\n      this._checkScrollbar();\n\n      this._setScrollbar();\n\n      this._adjustDialog();\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      $__default['default'](this._element).on(EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, function (event) {\n        return _this.hide(event);\n      });\n      $__default['default'](this._dialog).on(EVENT_MOUSEDOWN_DISMISS, function () {\n        $__default['default'](_this._element).one(EVENT_MOUSEUP_DISMISS, function (event) {\n          if ($__default['default'](event.target).is(_this._element)) {\n            _this._ignoreBackdropClick = true;\n          }\n        });\n      });\n\n      this._showBackdrop(function () {\n        return _this._showElement(relatedTarget);\n      });\n    };\n\n    _proto.hide = function hide(event) {\n      var _this2 = this;\n\n      if (event) {\n        event.preventDefault();\n      }\n\n      if (!this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      var hideEvent = $__default['default'].Event(EVENT_HIDE$2);\n      $__default['default'](this._element).trigger(hideEvent);\n\n      if (!this._isShown || hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._isShown = false;\n      var transition = $__default['default'](this._element).hasClass(CLASS_NAME_FADE$1);\n\n      if (transition) {\n        this._isTransitioning = true;\n      }\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      $__default['default'](document).off(EVENT_FOCUSIN);\n      $__default['default'](this._element).removeClass(CLASS_NAME_SHOW$3);\n      $__default['default'](this._element).off(EVENT_CLICK_DISMISS);\n      $__default['default'](this._dialog).off(EVENT_MOUSEDOWN_DISMISS);\n\n      if (transition) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n        $__default['default'](this._element).one(Util.TRANSITION_END, function (event) {\n          return _this2._hideModal(event);\n        }).emulateTransitionEnd(transitionDuration);\n      } else {\n        this._hideModal();\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      [window, this._element, this._dialog].forEach(function (htmlElement) {\n        return $__default['default'](htmlElement).off(EVENT_KEY$5);\n      });\n      /**\n       * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n       * Do not move `document` in `htmlElements` array\n       * It will remove `EVENT_CLICK_DATA_API` event that should remain\n       */\n\n      $__default['default'](document).off(EVENT_FOCUSIN);\n      $__default['default'].removeData(this._element, DATA_KEY$5);\n      this._config = null;\n      this._element = null;\n      this._dialog = null;\n      this._backdrop = null;\n      this._isShown = null;\n      this._isBodyOverflowing = null;\n      this._ignoreBackdropClick = null;\n      this._isTransitioning = null;\n      this._scrollbarWidth = null;\n    };\n\n    _proto.handleUpdate = function handleUpdate() {\n      this._adjustDialog();\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _extends({}, Default$3, config);\n      Util.typeCheckConfig(NAME$5, config, DefaultType$3);\n      return config;\n    };\n\n    _proto._triggerBackdropTransition = function _triggerBackdropTransition() {\n      var _this3 = this;\n\n      var hideEventPrevented = $__default['default'].Event(EVENT_HIDE_PREVENTED);\n      $__default['default'](this._element).trigger(hideEventPrevented);\n\n      if (hideEventPrevented.isDefaultPrevented()) {\n        return;\n      }\n\n      var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n      if (!isModalOverflowing) {\n        this._element.style.overflowY = 'hidden';\n      }\n\n      this._element.classList.add(CLASS_NAME_STATIC);\n\n      var modalTransitionDuration = Util.getTransitionDurationFromElement(this._dialog);\n      $__default['default'](this._element).off(Util.TRANSITION_END);\n      $__default['default'](this._element).one(Util.TRANSITION_END, function () {\n        _this3._element.classList.remove(CLASS_NAME_STATIC);\n\n        if (!isModalOverflowing) {\n          $__default['default'](_this3._element).one(Util.TRANSITION_END, function () {\n            _this3._element.style.overflowY = '';\n          }).emulateTransitionEnd(_this3._element, modalTransitionDuration);\n        }\n      }).emulateTransitionEnd(modalTransitionDuration);\n\n      this._element.focus();\n    };\n\n    _proto._showElement = function _showElement(relatedTarget) {\n      var _this4 = this;\n\n      var transition = $__default['default'](this._element).hasClass(CLASS_NAME_FADE$1);\n      var modalBody = this._dialog ? this._dialog.querySelector(SELECTOR_MODAL_BODY) : null;\n\n      if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n        // Don't move modal's DOM position\n        document.body.appendChild(this._element);\n      }\n\n      this._element.style.display = 'block';\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      this._element.setAttribute('role', 'dialog');\n\n      if ($__default['default'](this._dialog).hasClass(CLASS_NAME_SCROLLABLE) && modalBody) {\n        modalBody.scrollTop = 0;\n      } else {\n        this._element.scrollTop = 0;\n      }\n\n      if (transition) {\n        Util.reflow(this._element);\n      }\n\n      $__default['default'](this._element).addClass(CLASS_NAME_SHOW$3);\n\n      if (this._config.focus) {\n        this._enforceFocus();\n      }\n\n      var shownEvent = $__default['default'].Event(EVENT_SHOWN$2, {\n        relatedTarget: relatedTarget\n      });\n\n      var transitionComplete = function transitionComplete() {\n        if (_this4._config.focus) {\n          _this4._element.focus();\n        }\n\n        _this4._isTransitioning = false;\n        $__default['default'](_this4._element).trigger(shownEvent);\n      };\n\n      if (transition) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._dialog);\n        $__default['default'](this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration);\n      } else {\n        transitionComplete();\n      }\n    };\n\n    _proto._enforceFocus = function _enforceFocus() {\n      var _this5 = this;\n\n      $__default['default'](document).off(EVENT_FOCUSIN) // Guard against infinite focus loop\n      .on(EVENT_FOCUSIN, function (event) {\n        if (document !== event.target && _this5._element !== event.target && $__default['default'](_this5._element).has(event.target).length === 0) {\n          _this5._element.focus();\n        }\n      });\n    };\n\n    _proto._setEscapeEvent = function _setEscapeEvent() {\n      var _this6 = this;\n\n      if (this._isShown) {\n        $__default['default'](this._element).on(EVENT_KEYDOWN_DISMISS, function (event) {\n          if (_this6._config.keyboard && event.which === ESCAPE_KEYCODE$1) {\n            event.preventDefault();\n\n            _this6.hide();\n          } else if (!_this6._config.keyboard && event.which === ESCAPE_KEYCODE$1) {\n            _this6._triggerBackdropTransition();\n          }\n        });\n      } else if (!this._isShown) {\n        $__default['default'](this._element).off(EVENT_KEYDOWN_DISMISS);\n      }\n    };\n\n    _proto._setResizeEvent = function _setResizeEvent() {\n      var _this7 = this;\n\n      if (this._isShown) {\n        $__default['default'](window).on(EVENT_RESIZE, function (event) {\n          return _this7.handleUpdate(event);\n        });\n      } else {\n        $__default['default'](window).off(EVENT_RESIZE);\n      }\n    };\n\n    _proto._hideModal = function _hideModal() {\n      var _this8 = this;\n\n      this._element.style.display = 'none';\n\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._element.removeAttribute('role');\n\n      this._isTransitioning = false;\n\n      this._showBackdrop(function () {\n        $__default['default'](document.body).removeClass(CLASS_NAME_OPEN);\n\n        _this8._resetAdjustments();\n\n        _this8._resetScrollbar();\n\n        $__default['default'](_this8._element).trigger(EVENT_HIDDEN$2);\n      });\n    };\n\n    _proto._removeBackdrop = function _removeBackdrop() {\n      if (this._backdrop) {\n        $__default['default'](this._backdrop).remove();\n        this._backdrop = null;\n      }\n    };\n\n    _proto._showBackdrop = function _showBackdrop(callback) {\n      var _this9 = this;\n\n      var animate = $__default['default'](this._element).hasClass(CLASS_NAME_FADE$1) ? CLASS_NAME_FADE$1 : '';\n\n      if (this._isShown && this._config.backdrop) {\n        this._backdrop = document.createElement('div');\n        this._backdrop.className = CLASS_NAME_BACKDROP;\n\n        if (animate) {\n          this._backdrop.classList.add(animate);\n        }\n\n        $__default['default'](this._backdrop).appendTo(document.body);\n        $__default['default'](this._element).on(EVENT_CLICK_DISMISS, function (event) {\n          if (_this9._ignoreBackdropClick) {\n            _this9._ignoreBackdropClick = false;\n            return;\n          }\n\n          if (event.target !== event.currentTarget) {\n            return;\n          }\n\n          if (_this9._config.backdrop === 'static') {\n            _this9._triggerBackdropTransition();\n          } else {\n            _this9.hide();\n          }\n        });\n\n        if (animate) {\n          Util.reflow(this._backdrop);\n        }\n\n        $__default['default'](this._backdrop).addClass(CLASS_NAME_SHOW$3);\n\n        if (!callback) {\n          return;\n        }\n\n        if (!animate) {\n          callback();\n          return;\n        }\n\n        var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);\n        $__default['default'](this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);\n      } else if (!this._isShown && this._backdrop) {\n        $__default['default'](this._backdrop).removeClass(CLASS_NAME_SHOW$3);\n\n        var callbackRemove = function callbackRemove() {\n          _this9._removeBackdrop();\n\n          if (callback) {\n            callback();\n          }\n        };\n\n        if ($__default['default'](this._element).hasClass(CLASS_NAME_FADE$1)) {\n          var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);\n\n          $__default['default'](this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);\n        } else {\n          callbackRemove();\n        }\n      } else if (callback) {\n        callback();\n      }\n    } // ----------------------------------------------------------------------\n    // the following methods are used to handle overflowing modals\n    // todo (fat): these should probably be refactored out of modal.js\n    // ----------------------------------------------------------------------\n    ;\n\n    _proto._adjustDialog = function _adjustDialog() {\n      var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n      if (!this._isBodyOverflowing && isModalOverflowing) {\n        this._element.style.paddingLeft = this._scrollbarWidth + \"px\";\n      }\n\n      if (this._isBodyOverflowing && !isModalOverflowing) {\n        this._element.style.paddingRight = this._scrollbarWidth + \"px\";\n      }\n    };\n\n    _proto._resetAdjustments = function _resetAdjustments() {\n      this._element.style.paddingLeft = '';\n      this._element.style.paddingRight = '';\n    };\n\n    _proto._checkScrollbar = function _checkScrollbar() {\n      var rect = document.body.getBoundingClientRect();\n      this._isBodyOverflowing = Math.round(rect.left + rect.right) < window.innerWidth;\n      this._scrollbarWidth = this._getScrollbarWidth();\n    };\n\n    _proto._setScrollbar = function _setScrollbar() {\n      var _this10 = this;\n\n      if (this._isBodyOverflowing) {\n        // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n        //   while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n        var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT));\n        var stickyContent = [].slice.call(document.querySelectorAll(SELECTOR_STICKY_CONTENT)); // Adjust fixed content padding\n\n        $__default['default'](fixedContent).each(function (index, element) {\n          var actualPadding = element.style.paddingRight;\n          var calculatedPadding = $__default['default'](element).css('padding-right');\n          $__default['default'](element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this10._scrollbarWidth + \"px\");\n        }); // Adjust sticky content margin\n\n        $__default['default'](stickyContent).each(function (index, element) {\n          var actualMargin = element.style.marginRight;\n          var calculatedMargin = $__default['default'](element).css('margin-right');\n          $__default['default'](element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this10._scrollbarWidth + \"px\");\n        }); // Adjust body padding\n\n        var actualPadding = document.body.style.paddingRight;\n        var calculatedPadding = $__default['default'](document.body).css('padding-right');\n        $__default['default'](document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + \"px\");\n      }\n\n      $__default['default'](document.body).addClass(CLASS_NAME_OPEN);\n    };\n\n    _proto._resetScrollbar = function _resetScrollbar() {\n      // Restore fixed content padding\n      var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT));\n      $__default['default'](fixedContent).each(function (index, element) {\n        var padding = $__default['default'](element).data('padding-right');\n        $__default['default'](element).removeData('padding-right');\n        element.style.paddingRight = padding ? padding : '';\n      }); // Restore sticky content\n\n      var elements = [].slice.call(document.querySelectorAll(\"\" + SELECTOR_STICKY_CONTENT));\n      $__default['default'](elements).each(function (index, element) {\n        var margin = $__default['default'](element).data('margin-right');\n\n        if (typeof margin !== 'undefined') {\n          $__default['default'](element).css('margin-right', margin).removeData('margin-right');\n        }\n      }); // Restore body padding\n\n      var padding = $__default['default'](document.body).data('padding-right');\n      $__default['default'](document.body).removeData('padding-right');\n      document.body.style.paddingRight = padding ? padding : '';\n    };\n\n    _proto._getScrollbarWidth = function _getScrollbarWidth() {\n      // thx d.walsh\n      var scrollDiv = document.createElement('div');\n      scrollDiv.className = CLASS_NAME_SCROLLBAR_MEASURER;\n      document.body.appendChild(scrollDiv);\n      var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;\n      document.body.removeChild(scrollDiv);\n      return scrollbarWidth;\n    } // Static\n    ;\n\n    Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {\n      return this.each(function () {\n        var data = $__default['default'](this).data(DATA_KEY$5);\n\n        var _config = _extends({}, Default$3, $__default['default'](this).data(), typeof config === 'object' && config ? config : {});\n\n        if (!data) {\n          data = new Modal(this, _config);\n          $__default['default'](this).data(DATA_KEY$5, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config](relatedTarget);\n        } else if (_config.show) {\n          data.show(relatedTarget);\n        }\n      });\n    };\n\n    _createClass(Modal, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$5;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$3;\n      }\n    }]);\n\n    return Modal;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $__default['default'](document).on(EVENT_CLICK_DATA_API$5, SELECTOR_DATA_TOGGLE$3, function (event) {\n    var _this11 = this;\n\n    var target;\n    var selector = Util.getSelectorFromElement(this);\n\n    if (selector) {\n      target = document.querySelector(selector);\n    }\n\n    var config = $__default['default'](target).data(DATA_KEY$5) ? 'toggle' : _extends({}, $__default['default'](target).data(), $__default['default'](this).data());\n\n    if (this.tagName === 'A' || this.tagName === 'AREA') {\n      event.preventDefault();\n    }\n\n    var $target = $__default['default'](target).one(EVENT_SHOW$2, function (showEvent) {\n      if (showEvent.isDefaultPrevented()) {\n        // Only register focus restorer if modal will actually get shown\n        return;\n      }\n\n      $target.one(EVENT_HIDDEN$2, function () {\n        if ($__default['default'](_this11).is(':visible')) {\n          _this11.focus();\n        }\n      });\n    });\n\n    Modal._jQueryInterface.call($__default['default'](target), config, this);\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $__default['default'].fn[NAME$5] = Modal._jQueryInterface;\n  $__default['default'].fn[NAME$5].Constructor = Modal;\n\n  $__default['default'].fn[NAME$5].noConflict = function () {\n    $__default['default'].fn[NAME$5] = JQUERY_NO_CONFLICT$5;\n    return Modal._jQueryInterface;\n  };\n\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v4.6.0): tools/sanitizer.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n  var uriAttrs = ['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href'];\n  var ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n  var DefaultWhitelist = {\n    // Global attributes allowed on any supplied element below.\n    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n    a: ['target', 'href', 'title', 'rel'],\n    area: [],\n    b: [],\n    br: [],\n    col: [],\n    code: [],\n    div: [],\n    em: [],\n    hr: [],\n    h1: [],\n    h2: [],\n    h3: [],\n    h4: [],\n    h5: [],\n    h6: [],\n    i: [],\n    img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n    li: [],\n    ol: [],\n    p: [],\n    pre: [],\n    s: [],\n    small: [],\n    span: [],\n    sub: [],\n    sup: [],\n    strong: [],\n    u: [],\n    ul: []\n  };\n  /**\n   * A pattern that recognizes a commonly useful subset of URLs that are safe.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/gi;\n  /**\n   * A pattern that matches safe data URLs. Only matches image, video and audio types.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  var DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i;\n\n  function allowedAttribute(attr, allowedAttributeList) {\n    var attrName = attr.nodeName.toLowerCase();\n\n    if (allowedAttributeList.indexOf(attrName) !== -1) {\n      if (uriAttrs.indexOf(attrName) !== -1) {\n        return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN));\n      }\n\n      return true;\n    }\n\n    var regExp = allowedAttributeList.filter(function (attrRegex) {\n      return attrRegex instanceof RegExp;\n    }); // Check if a regular expression validates the attribute.\n\n    for (var i = 0, len = regExp.length; i < len; i++) {\n      if (attrName.match(regExp[i])) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {\n    if (unsafeHtml.length === 0) {\n      return unsafeHtml;\n    }\n\n    if (sanitizeFn && typeof sanitizeFn === 'function') {\n      return sanitizeFn(unsafeHtml);\n    }\n\n    var domParser = new window.DOMParser();\n    var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n    var whitelistKeys = Object.keys(whiteList);\n    var elements = [].slice.call(createdDocument.body.querySelectorAll('*'));\n\n    var _loop = function _loop(i, len) {\n      var el = elements[i];\n      var elName = el.nodeName.toLowerCase();\n\n      if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {\n        el.parentNode.removeChild(el);\n        return \"continue\";\n      }\n\n      var attributeList = [].slice.call(el.attributes);\n      var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []);\n      attributeList.forEach(function (attr) {\n        if (!allowedAttribute(attr, whitelistedAttributes)) {\n          el.removeAttribute(attr.nodeName);\n        }\n      });\n    };\n\n    for (var i = 0, len = elements.length; i < len; i++) {\n      var _ret = _loop(i);\n\n      if (_ret === \"continue\") continue;\n    }\n\n    return createdDocument.body.innerHTML;\n  }\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$6 = 'tooltip';\n  var VERSION$6 = '4.6.0';\n  var DATA_KEY$6 = 'bs.tooltip';\n  var EVENT_KEY$6 = \".\" + DATA_KEY$6;\n  var JQUERY_NO_CONFLICT$6 = $__default['default'].fn[NAME$6];\n  var CLASS_PREFIX = 'bs-tooltip';\n  var BSCLS_PREFIX_REGEX = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX + \"\\\\S+\", 'g');\n  var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn'];\n  var DefaultType$4 = {\n    animation: 'boolean',\n    template: 'string',\n    title: '(string|element|function)',\n    trigger: 'string',\n    delay: '(number|object)',\n    html: 'boolean',\n    selector: '(string|boolean)',\n    placement: '(string|function)',\n    offset: '(number|string|function)',\n    container: '(string|element|boolean)',\n    fallbackPlacement: '(string|array)',\n    boundary: '(string|element)',\n    customClass: '(string|function)',\n    sanitize: 'boolean',\n    sanitizeFn: '(null|function)',\n    whiteList: 'object',\n    popperConfig: '(null|object)'\n  };\n  var AttachmentMap = {\n    AUTO: 'auto',\n    TOP: 'top',\n    RIGHT: 'right',\n    BOTTOM: 'bottom',\n    LEFT: 'left'\n  };\n  var Default$4 = {\n    animation: true,\n    template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"arrow\"></div>' + '<div class=\"tooltip-inner\"></div></div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    selector: false,\n    placement: 'top',\n    offset: 0,\n    container: false,\n    fallbackPlacement: 'flip',\n    boundary: 'scrollParent',\n    customClass: '',\n    sanitize: true,\n    sanitizeFn: null,\n    whiteList: DefaultWhitelist,\n    popperConfig: null\n  };\n  var HOVER_STATE_SHOW = 'show';\n  var HOVER_STATE_OUT = 'out';\n  var Event = {\n    HIDE: \"hide\" + EVENT_KEY$6,\n    HIDDEN: \"hidden\" + EVENT_KEY$6,\n    SHOW: \"show\" + EVENT_KEY$6,\n    SHOWN: \"shown\" + EVENT_KEY$6,\n    INSERTED: \"inserted\" + EVENT_KEY$6,\n    CLICK: \"click\" + EVENT_KEY$6,\n    FOCUSIN: \"focusin\" + EVENT_KEY$6,\n    FOCUSOUT: \"focusout\" + EVENT_KEY$6,\n    MOUSEENTER: \"mouseenter\" + EVENT_KEY$6,\n    MOUSELEAVE: \"mouseleave\" + EVENT_KEY$6\n  };\n  var CLASS_NAME_FADE$2 = 'fade';\n  var CLASS_NAME_SHOW$4 = 'show';\n  var SELECTOR_TOOLTIP_INNER = '.tooltip-inner';\n  var SELECTOR_ARROW = '.arrow';\n  var TRIGGER_HOVER = 'hover';\n  var TRIGGER_FOCUS = 'focus';\n  var TRIGGER_CLICK = 'click';\n  var TRIGGER_MANUAL = 'manual';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  var Tooltip = /*#__PURE__*/function () {\n    function Tooltip(element, config) {\n      if (typeof Popper__default['default'] === 'undefined') {\n        throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)');\n      } // private\n\n\n      this._isEnabled = true;\n      this._timeout = 0;\n      this._hoverState = '';\n      this._activeTrigger = {};\n      this._popper = null; // Protected\n\n      this.element = element;\n      this.config = this._getConfig(config);\n      this.tip = null;\n\n      this._setListeners();\n    } // Getters\n\n\n    var _proto = Tooltip.prototype;\n\n    // Public\n    _proto.enable = function enable() {\n      this._isEnabled = true;\n    };\n\n    _proto.disable = function disable() {\n      this._isEnabled = false;\n    };\n\n    _proto.toggleEnabled = function toggleEnabled() {\n      this._isEnabled = !this._isEnabled;\n    };\n\n    _proto.toggle = function toggle(event) {\n      if (!this._isEnabled) {\n        return;\n      }\n\n      if (event) {\n        var dataKey = this.constructor.DATA_KEY;\n        var context = $__default['default'](event.currentTarget).data(dataKey);\n\n        if (!context) {\n          context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n          $__default['default'](event.currentTarget).data(dataKey, context);\n        }\n\n        context._activeTrigger.click = !context._activeTrigger.click;\n\n        if (context._isWithActiveTrigger()) {\n          context._enter(null, context);\n        } else {\n          context._leave(null, context);\n        }\n      } else {\n        if ($__default['default'](this.getTipElement()).hasClass(CLASS_NAME_SHOW$4)) {\n          this._leave(null, this);\n\n          return;\n        }\n\n        this._enter(null, this);\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      clearTimeout(this._timeout);\n      $__default['default'].removeData(this.element, this.constructor.DATA_KEY);\n      $__default['default'](this.element).off(this.constructor.EVENT_KEY);\n      $__default['default'](this.element).closest('.modal').off('hide.bs.modal', this._hideModalHandler);\n\n      if (this.tip) {\n        $__default['default'](this.tip).remove();\n      }\n\n      this._isEnabled = null;\n      this._timeout = null;\n      this._hoverState = null;\n      this._activeTrigger = null;\n\n      if (this._popper) {\n        this._popper.destroy();\n      }\n\n      this._popper = null;\n      this.element = null;\n      this.config = null;\n      this.tip = null;\n    };\n\n    _proto.show = function show() {\n      var _this = this;\n\n      if ($__default['default'](this.element).css('display') === 'none') {\n        throw new Error('Please use show on visible elements');\n      }\n\n      var showEvent = $__default['default'].Event(this.constructor.Event.SHOW);\n\n      if (this.isWithContent() && this._isEnabled) {\n        $__default['default'](this.element).trigger(showEvent);\n        var shadowRoot = Util.findShadowRoot(this.element);\n        var isInTheDom = $__default['default'].contains(shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement, this.element);\n\n        if (showEvent.isDefaultPrevented() || !isInTheDom) {\n          return;\n        }\n\n        var tip = this.getTipElement();\n        var tipId = Util.getUID(this.constructor.NAME);\n        tip.setAttribute('id', tipId);\n        this.element.setAttribute('aria-describedby', tipId);\n        this.setContent();\n\n        if (this.config.animation) {\n          $__default['default'](tip).addClass(CLASS_NAME_FADE$2);\n        }\n\n        var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;\n\n        var attachment = this._getAttachment(placement);\n\n        this.addAttachmentClass(attachment);\n\n        var container = this._getContainer();\n\n        $__default['default'](tip).data(this.constructor.DATA_KEY, this);\n\n        if (!$__default['default'].contains(this.element.ownerDocument.documentElement, this.tip)) {\n          $__default['default'](tip).appendTo(container);\n        }\n\n        $__default['default'](this.element).trigger(this.constructor.Event.INSERTED);\n        this._popper = new Popper__default['default'](this.element, tip, this._getPopperConfig(attachment));\n        $__default['default'](tip).addClass(CLASS_NAME_SHOW$4);\n        $__default['default'](tip).addClass(this.config.customClass); // If this is a touch-enabled device we add extra\n        // empty mouseover listeners to the body's immediate children;\n        // only needed because of broken event delegation on iOS\n        // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n        if ('ontouchstart' in document.documentElement) {\n          $__default['default'](document.body).children().on('mouseover', null, $__default['default'].noop);\n        }\n\n        var complete = function complete() {\n          if (_this.config.animation) {\n            _this._fixTransition();\n          }\n\n          var prevHoverState = _this._hoverState;\n          _this._hoverState = null;\n          $__default['default'](_this.element).trigger(_this.constructor.Event.SHOWN);\n\n          if (prevHoverState === HOVER_STATE_OUT) {\n            _this._leave(null, _this);\n          }\n        };\n\n        if ($__default['default'](this.tip).hasClass(CLASS_NAME_FADE$2)) {\n          var transitionDuration = Util.getTransitionDurationFromElement(this.tip);\n          $__default['default'](this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n        } else {\n          complete();\n        }\n      }\n    };\n\n    _proto.hide = function hide(callback) {\n      var _this2 = this;\n\n      var tip = this.getTipElement();\n      var hideEvent = $__default['default'].Event(this.constructor.Event.HIDE);\n\n      var complete = function complete() {\n        if (_this2._hoverState !== HOVER_STATE_SHOW && tip.parentNode) {\n          tip.parentNode.removeChild(tip);\n        }\n\n        _this2._cleanTipClass();\n\n        _this2.element.removeAttribute('aria-describedby');\n\n        $__default['default'](_this2.element).trigger(_this2.constructor.Event.HIDDEN);\n\n        if (_this2._popper !== null) {\n          _this2._popper.destroy();\n        }\n\n        if (callback) {\n          callback();\n        }\n      };\n\n      $__default['default'](this.element).trigger(hideEvent);\n\n      if (hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      $__default['default'](tip).removeClass(CLASS_NAME_SHOW$4); // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n      if ('ontouchstart' in document.documentElement) {\n        $__default['default'](document.body).children().off('mouseover', null, $__default['default'].noop);\n      }\n\n      this._activeTrigger[TRIGGER_CLICK] = false;\n      this._activeTrigger[TRIGGER_FOCUS] = false;\n      this._activeTrigger[TRIGGER_HOVER] = false;\n\n      if ($__default['default'](this.tip).hasClass(CLASS_NAME_FADE$2)) {\n        var transitionDuration = Util.getTransitionDurationFromElement(tip);\n        $__default['default'](tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n\n      this._hoverState = '';\n    };\n\n    _proto.update = function update() {\n      if (this._popper !== null) {\n        this._popper.scheduleUpdate();\n      }\n    } // Protected\n    ;\n\n    _proto.isWithContent = function isWithContent() {\n      return Boolean(this.getTitle());\n    };\n\n    _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n      $__default['default'](this.getTipElement()).addClass(CLASS_PREFIX + \"-\" + attachment);\n    };\n\n    _proto.getTipElement = function getTipElement() {\n      this.tip = this.tip || $__default['default'](this.config.template)[0];\n      return this.tip;\n    };\n\n    _proto.setContent = function setContent() {\n      var tip = this.getTipElement();\n      this.setElementContent($__default['default'](tip.querySelectorAll(SELECTOR_TOOLTIP_INNER)), this.getTitle());\n      $__default['default'](tip).removeClass(CLASS_NAME_FADE$2 + \" \" + CLASS_NAME_SHOW$4);\n    };\n\n    _proto.setElementContent = function setElementContent($element, content) {\n      if (typeof content === 'object' && (content.nodeType || content.jquery)) {\n        // Content is a DOM node or a jQuery\n        if (this.config.html) {\n          if (!$__default['default'](content).parent().is($element)) {\n            $element.empty().append(content);\n          }\n        } else {\n          $element.text($__default['default'](content).text());\n        }\n\n        return;\n      }\n\n      if (this.config.html) {\n        if (this.config.sanitize) {\n          content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn);\n        }\n\n        $element.html(content);\n      } else {\n        $element.text(content);\n      }\n    };\n\n    _proto.getTitle = function getTitle() {\n      var title = this.element.getAttribute('data-original-title');\n\n      if (!title) {\n        title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title;\n      }\n\n      return title;\n    } // Private\n    ;\n\n    _proto._getPopperConfig = function _getPopperConfig(attachment) {\n      var _this3 = this;\n\n      var defaultBsConfig = {\n        placement: attachment,\n        modifiers: {\n          offset: this._getOffset(),\n          flip: {\n            behavior: this.config.fallbackPlacement\n          },\n          arrow: {\n            element: SELECTOR_ARROW\n          },\n          preventOverflow: {\n            boundariesElement: this.config.boundary\n          }\n        },\n        onCreate: function onCreate(data) {\n          if (data.originalPlacement !== data.placement) {\n            _this3._handlePopperPlacementChange(data);\n          }\n        },\n        onUpdate: function onUpdate(data) {\n          return _this3._handlePopperPlacementChange(data);\n        }\n      };\n      return _extends({}, defaultBsConfig, this.config.popperConfig);\n    };\n\n    _proto._getOffset = function _getOffset() {\n      var _this4 = this;\n\n      var offset = {};\n\n      if (typeof this.config.offset === 'function') {\n        offset.fn = function (data) {\n          data.offsets = _extends({}, data.offsets, _this4.config.offset(data.offsets, _this4.element) || {});\n          return data;\n        };\n      } else {\n        offset.offset = this.config.offset;\n      }\n\n      return offset;\n    };\n\n    _proto._getContainer = function _getContainer() {\n      if (this.config.container === false) {\n        return document.body;\n      }\n\n      if (Util.isElement(this.config.container)) {\n        return $__default['default'](this.config.container);\n      }\n\n      return $__default['default'](document).find(this.config.container);\n    };\n\n    _proto._getAttachment = function _getAttachment(placement) {\n      return AttachmentMap[placement.toUpperCase()];\n    };\n\n    _proto._setListeners = function _setListeners() {\n      var _this5 = this;\n\n      var triggers = this.config.trigger.split(' ');\n      triggers.forEach(function (trigger) {\n        if (trigger === 'click') {\n          $__default['default'](_this5.element).on(_this5.constructor.Event.CLICK, _this5.config.selector, function (event) {\n            return _this5.toggle(event);\n          });\n        } else if (trigger !== TRIGGER_MANUAL) {\n          var eventIn = trigger === TRIGGER_HOVER ? _this5.constructor.Event.MOUSEENTER : _this5.constructor.Event.FOCUSIN;\n          var eventOut = trigger === TRIGGER_HOVER ? _this5.constructor.Event.MOUSELEAVE : _this5.constructor.Event.FOCUSOUT;\n          $__default['default'](_this5.element).on(eventIn, _this5.config.selector, function (event) {\n            return _this5._enter(event);\n          }).on(eventOut, _this5.config.selector, function (event) {\n            return _this5._leave(event);\n          });\n        }\n      });\n\n      this._hideModalHandler = function () {\n        if (_this5.element) {\n          _this5.hide();\n        }\n      };\n\n      $__default['default'](this.element).closest('.modal').on('hide.bs.modal', this._hideModalHandler);\n\n      if (this.config.selector) {\n        this.config = _extends({}, this.config, {\n          trigger: 'manual',\n          selector: ''\n        });\n      } else {\n        this._fixTitle();\n      }\n    };\n\n    _proto._fixTitle = function _fixTitle() {\n      var titleType = typeof this.element.getAttribute('data-original-title');\n\n      if (this.element.getAttribute('title') || titleType !== 'string') {\n        this.element.setAttribute('data-original-title', this.element.getAttribute('title') || '');\n        this.element.setAttribute('title', '');\n      }\n    };\n\n    _proto._enter = function _enter(event, context) {\n      var dataKey = this.constructor.DATA_KEY;\n      context = context || $__default['default'](event.currentTarget).data(dataKey);\n\n      if (!context) {\n        context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n        $__default['default'](event.currentTarget).data(dataKey, context);\n      }\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;\n      }\n\n      if ($__default['default'](context.getTipElement()).hasClass(CLASS_NAME_SHOW$4) || context._hoverState === HOVER_STATE_SHOW) {\n        context._hoverState = HOVER_STATE_SHOW;\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HOVER_STATE_SHOW;\n\n      if (!context.config.delay || !context.config.delay.show) {\n        context.show();\n        return;\n      }\n\n      context._timeout = setTimeout(function () {\n        if (context._hoverState === HOVER_STATE_SHOW) {\n          context.show();\n        }\n      }, context.config.delay.show);\n    };\n\n    _proto._leave = function _leave(event, context) {\n      var dataKey = this.constructor.DATA_KEY;\n      context = context || $__default['default'](event.currentTarget).data(dataKey);\n\n      if (!context) {\n        context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n        $__default['default'](event.currentTarget).data(dataKey, context);\n      }\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = false;\n      }\n\n      if (context._isWithActiveTrigger()) {\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HOVER_STATE_OUT;\n\n      if (!context.config.delay || !context.config.delay.hide) {\n        context.hide();\n        return;\n      }\n\n      context._timeout = setTimeout(function () {\n        if (context._hoverState === HOVER_STATE_OUT) {\n          context.hide();\n        }\n      }, context.config.delay.hide);\n    };\n\n    _proto._isWithActiveTrigger = function _isWithActiveTrigger() {\n      for (var trigger in this._activeTrigger) {\n        if (this._activeTrigger[trigger]) {\n          return true;\n        }\n      }\n\n      return false;\n    };\n\n    _proto._getConfig = function _getConfig(config) {\n      var dataAttributes = $__default['default'](this.element).data();\n      Object.keys(dataAttributes).forEach(function (dataAttr) {\n        if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {\n          delete dataAttributes[dataAttr];\n        }\n      });\n      config = _extends({}, this.constructor.Default, dataAttributes, typeof config === 'object' && config ? config : {});\n\n      if (typeof config.delay === 'number') {\n        config.delay = {\n          show: config.delay,\n          hide: config.delay\n        };\n      }\n\n      if (typeof config.title === 'number') {\n        config.title = config.title.toString();\n      }\n\n      if (typeof config.content === 'number') {\n        config.content = config.content.toString();\n      }\n\n      Util.typeCheckConfig(NAME$6, config, this.constructor.DefaultType);\n\n      if (config.sanitize) {\n        config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn);\n      }\n\n      return config;\n    };\n\n    _proto._getDelegateConfig = function _getDelegateConfig() {\n      var config = {};\n\n      if (this.config) {\n        for (var key in this.config) {\n          if (this.constructor.Default[key] !== this.config[key]) {\n            config[key] = this.config[key];\n          }\n        }\n      }\n\n      return config;\n    };\n\n    _proto._cleanTipClass = function _cleanTipClass() {\n      var $tip = $__default['default'](this.getTipElement());\n      var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);\n\n      if (tabClass !== null && tabClass.length) {\n        $tip.removeClass(tabClass.join(''));\n      }\n    };\n\n    _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) {\n      this.tip = popperData.instance.popper;\n\n      this._cleanTipClass();\n\n      this.addAttachmentClass(this._getAttachment(popperData.placement));\n    };\n\n    _proto._fixTransition = function _fixTransition() {\n      var tip = this.getTipElement();\n      var initConfigAnimation = this.config.animation;\n\n      if (tip.getAttribute('x-placement') !== null) {\n        return;\n      }\n\n      $__default['default'](tip).removeClass(CLASS_NAME_FADE$2);\n      this.config.animation = false;\n      this.hide();\n      this.show();\n      this.config.animation = initConfigAnimation;\n    } // Static\n    ;\n\n    Tooltip._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $element = $__default['default'](this);\n        var data = $element.data(DATA_KEY$6);\n\n        var _config = typeof config === 'object' && config;\n\n        if (!data && /dispose|hide/.test(config)) {\n          return;\n        }\n\n        if (!data) {\n          data = new Tooltip(this, _config);\n          $element.data(DATA_KEY$6, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Tooltip, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$6;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$4;\n      }\n    }, {\n      key: \"NAME\",\n      get: function get() {\n        return NAME$6;\n      }\n    }, {\n      key: \"DATA_KEY\",\n      get: function get() {\n        return DATA_KEY$6;\n      }\n    }, {\n      key: \"Event\",\n      get: function get() {\n        return Event;\n      }\n    }, {\n      key: \"EVENT_KEY\",\n      get: function get() {\n        return EVENT_KEY$6;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType$4;\n      }\n    }]);\n\n    return Tooltip;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n\n  $__default['default'].fn[NAME$6] = Tooltip._jQueryInterface;\n  $__default['default'].fn[NAME$6].Constructor = Tooltip;\n\n  $__default['default'].fn[NAME$6].noConflict = function () {\n    $__default['default'].fn[NAME$6] = JQUERY_NO_CONFLICT$6;\n    return Tooltip._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$7 = 'popover';\n  var VERSION$7 = '4.6.0';\n  var DATA_KEY$7 = 'bs.popover';\n  var EVENT_KEY$7 = \".\" + DATA_KEY$7;\n  var JQUERY_NO_CONFLICT$7 = $__default['default'].fn[NAME$7];\n  var CLASS_PREFIX$1 = 'bs-popover';\n  var BSCLS_PREFIX_REGEX$1 = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX$1 + \"\\\\S+\", 'g');\n\n  var Default$5 = _extends({}, Tooltip.Default, {\n    placement: 'right',\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div></div>'\n  });\n\n  var DefaultType$5 = _extends({}, Tooltip.DefaultType, {\n    content: '(string|element|function)'\n  });\n\n  var CLASS_NAME_FADE$3 = 'fade';\n  var CLASS_NAME_SHOW$5 = 'show';\n  var SELECTOR_TITLE = '.popover-header';\n  var SELECTOR_CONTENT = '.popover-body';\n  var Event$1 = {\n    HIDE: \"hide\" + EVENT_KEY$7,\n    HIDDEN: \"hidden\" + EVENT_KEY$7,\n    SHOW: \"show\" + EVENT_KEY$7,\n    SHOWN: \"shown\" + EVENT_KEY$7,\n    INSERTED: \"inserted\" + EVENT_KEY$7,\n    CLICK: \"click\" + EVENT_KEY$7,\n    FOCUSIN: \"focusin\" + EVENT_KEY$7,\n    FOCUSOUT: \"focusout\" + EVENT_KEY$7,\n    MOUSEENTER: \"mouseenter\" + EVENT_KEY$7,\n    MOUSELEAVE: \"mouseleave\" + EVENT_KEY$7\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  var Popover = /*#__PURE__*/function (_Tooltip) {\n    _inheritsLoose(Popover, _Tooltip);\n\n    function Popover() {\n      return _Tooltip.apply(this, arguments) || this;\n    }\n\n    var _proto = Popover.prototype;\n\n    // Overrides\n    _proto.isWithContent = function isWithContent() {\n      return this.getTitle() || this._getContent();\n    };\n\n    _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n      $__default['default'](this.getTipElement()).addClass(CLASS_PREFIX$1 + \"-\" + attachment);\n    };\n\n    _proto.getTipElement = function getTipElement() {\n      this.tip = this.tip || $__default['default'](this.config.template)[0];\n      return this.tip;\n    };\n\n    _proto.setContent = function setContent() {\n      var $tip = $__default['default'](this.getTipElement()); // We use append for html objects to maintain js events\n\n      this.setElementContent($tip.find(SELECTOR_TITLE), this.getTitle());\n\n      var content = this._getContent();\n\n      if (typeof content === 'function') {\n        content = content.call(this.element);\n      }\n\n      this.setElementContent($tip.find(SELECTOR_CONTENT), content);\n      $tip.removeClass(CLASS_NAME_FADE$3 + \" \" + CLASS_NAME_SHOW$5);\n    } // Private\n    ;\n\n    _proto._getContent = function _getContent() {\n      return this.element.getAttribute('data-content') || this.config.content;\n    };\n\n    _proto._cleanTipClass = function _cleanTipClass() {\n      var $tip = $__default['default'](this.getTipElement());\n      var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX$1);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        $tip.removeClass(tabClass.join(''));\n      }\n    } // Static\n    ;\n\n    Popover._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $__default['default'](this).data(DATA_KEY$7);\n\n        var _config = typeof config === 'object' ? config : null;\n\n        if (!data && /dispose|hide/.test(config)) {\n          return;\n        }\n\n        if (!data) {\n          data = new Popover(this, _config);\n          $__default['default'](this).data(DATA_KEY$7, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Popover, null, [{\n      key: \"VERSION\",\n      // Getters\n      get: function get() {\n        return VERSION$7;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$5;\n      }\n    }, {\n      key: \"NAME\",\n      get: function get() {\n        return NAME$7;\n      }\n    }, {\n      key: \"DATA_KEY\",\n      get: function get() {\n        return DATA_KEY$7;\n      }\n    }, {\n      key: \"Event\",\n      get: function get() {\n        return Event$1;\n      }\n    }, {\n      key: \"EVENT_KEY\",\n      get: function get() {\n        return EVENT_KEY$7;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType$5;\n      }\n    }]);\n\n    return Popover;\n  }(Tooltip);\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n\n  $__default['default'].fn[NAME$7] = Popover._jQueryInterface;\n  $__default['default'].fn[NAME$7].Constructor = Popover;\n\n  $__default['default'].fn[NAME$7].noConflict = function () {\n    $__default['default'].fn[NAME$7] = JQUERY_NO_CONFLICT$7;\n    return Popover._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$8 = 'scrollspy';\n  var VERSION$8 = '4.6.0';\n  var DATA_KEY$8 = 'bs.scrollspy';\n  var EVENT_KEY$8 = \".\" + DATA_KEY$8;\n  var DATA_API_KEY$6 = '.data-api';\n  var JQUERY_NO_CONFLICT$8 = $__default['default'].fn[NAME$8];\n  var Default$6 = {\n    offset: 10,\n    method: 'auto',\n    target: ''\n  };\n  var DefaultType$6 = {\n    offset: 'number',\n    method: 'string',\n    target: '(string|element)'\n  };\n  var EVENT_ACTIVATE = \"activate\" + EVENT_KEY$8;\n  var EVENT_SCROLL = \"scroll\" + EVENT_KEY$8;\n  var EVENT_LOAD_DATA_API$2 = \"load\" + EVENT_KEY$8 + DATA_API_KEY$6;\n  var CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';\n  var CLASS_NAME_ACTIVE$2 = 'active';\n  var SELECTOR_DATA_SPY = '[data-spy=\"scroll\"]';\n  var SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';\n  var SELECTOR_NAV_LINKS = '.nav-link';\n  var SELECTOR_NAV_ITEMS = '.nav-item';\n  var SELECTOR_LIST_ITEMS = '.list-group-item';\n  var SELECTOR_DROPDOWN = '.dropdown';\n  var SELECTOR_DROPDOWN_ITEMS = '.dropdown-item';\n  var SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';\n  var METHOD_OFFSET = 'offset';\n  var METHOD_POSITION = 'position';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  var ScrollSpy = /*#__PURE__*/function () {\n    function ScrollSpy(element, config) {\n      var _this = this;\n\n      this._element = element;\n      this._scrollElement = element.tagName === 'BODY' ? window : element;\n      this._config = this._getConfig(config);\n      this._selector = this._config.target + \" \" + SELECTOR_NAV_LINKS + \",\" + (this._config.target + \" \" + SELECTOR_LIST_ITEMS + \",\") + (this._config.target + \" \" + SELECTOR_DROPDOWN_ITEMS);\n      this._offsets = [];\n      this._targets = [];\n      this._activeTarget = null;\n      this._scrollHeight = 0;\n      $__default['default'](this._scrollElement).on(EVENT_SCROLL, function (event) {\n        return _this._process(event);\n      });\n      this.refresh();\n\n      this._process();\n    } // Getters\n\n\n    var _proto = ScrollSpy.prototype;\n\n    // Public\n    _proto.refresh = function refresh() {\n      var _this2 = this;\n\n      var autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;\n      var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n      var offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;\n      this._offsets = [];\n      this._targets = [];\n      this._scrollHeight = this._getScrollHeight();\n      var targets = [].slice.call(document.querySelectorAll(this._selector));\n      targets.map(function (element) {\n        var target;\n        var targetSelector = Util.getSelectorFromElement(element);\n\n        if (targetSelector) {\n          target = document.querySelector(targetSelector);\n        }\n\n        if (target) {\n          var targetBCR = target.getBoundingClientRect();\n\n          if (targetBCR.width || targetBCR.height) {\n            // TODO (fat): remove sketch reliance on jQuery position/offset\n            return [$__default['default'](target)[offsetMethod]().top + offsetBase, targetSelector];\n          }\n        }\n\n        return null;\n      }).filter(function (item) {\n        return item;\n      }).sort(function (a, b) {\n        return a[0] - b[0];\n      }).forEach(function (item) {\n        _this2._offsets.push(item[0]);\n\n        _this2._targets.push(item[1]);\n      });\n    };\n\n    _proto.dispose = function dispose() {\n      $__default['default'].removeData(this._element, DATA_KEY$8);\n      $__default['default'](this._scrollElement).off(EVENT_KEY$8);\n      this._element = null;\n      this._scrollElement = null;\n      this._config = null;\n      this._selector = null;\n      this._offsets = null;\n      this._targets = null;\n      this._activeTarget = null;\n      this._scrollHeight = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _extends({}, Default$6, typeof config === 'object' && config ? config : {});\n\n      if (typeof config.target !== 'string' && Util.isElement(config.target)) {\n        var id = $__default['default'](config.target).attr('id');\n\n        if (!id) {\n          id = Util.getUID(NAME$8);\n          $__default['default'](config.target).attr('id', id);\n        }\n\n        config.target = \"#\" + id;\n      }\n\n      Util.typeCheckConfig(NAME$8, config, DefaultType$6);\n      return config;\n    };\n\n    _proto._getScrollTop = function _getScrollTop() {\n      return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n    };\n\n    _proto._getScrollHeight = function _getScrollHeight() {\n      return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n    };\n\n    _proto._getOffsetHeight = function _getOffsetHeight() {\n      return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n    };\n\n    _proto._process = function _process() {\n      var scrollTop = this._getScrollTop() + this._config.offset;\n\n      var scrollHeight = this._getScrollHeight();\n\n      var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n      if (this._scrollHeight !== scrollHeight) {\n        this.refresh();\n      }\n\n      if (scrollTop >= maxScroll) {\n        var target = this._targets[this._targets.length - 1];\n\n        if (this._activeTarget !== target) {\n          this._activate(target);\n        }\n\n        return;\n      }\n\n      if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n        this._activeTarget = null;\n\n        this._clear();\n\n        return;\n      }\n\n      for (var i = this._offsets.length; i--;) {\n        var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n        if (isActiveTarget) {\n          this._activate(this._targets[i]);\n        }\n      }\n    };\n\n    _proto._activate = function _activate(target) {\n      this._activeTarget = target;\n\n      this._clear();\n\n      var queries = this._selector.split(',').map(function (selector) {\n        return selector + \"[data-target=\\\"\" + target + \"\\\"],\" + selector + \"[href=\\\"\" + target + \"\\\"]\";\n      });\n\n      var $link = $__default['default']([].slice.call(document.querySelectorAll(queries.join(','))));\n\n      if ($link.hasClass(CLASS_NAME_DROPDOWN_ITEM)) {\n        $link.closest(SELECTOR_DROPDOWN).find(SELECTOR_DROPDOWN_TOGGLE).addClass(CLASS_NAME_ACTIVE$2);\n        $link.addClass(CLASS_NAME_ACTIVE$2);\n      } else {\n        // Set triggered link as active\n        $link.addClass(CLASS_NAME_ACTIVE$2); // Set triggered links parents as active\n        // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n\n        $link.parents(SELECTOR_NAV_LIST_GROUP).prev(SELECTOR_NAV_LINKS + \", \" + SELECTOR_LIST_ITEMS).addClass(CLASS_NAME_ACTIVE$2); // Handle special case when .nav-link is inside .nav-item\n\n        $link.parents(SELECTOR_NAV_LIST_GROUP).prev(SELECTOR_NAV_ITEMS).children(SELECTOR_NAV_LINKS).addClass(CLASS_NAME_ACTIVE$2);\n      }\n\n      $__default['default'](this._scrollElement).trigger(EVENT_ACTIVATE, {\n        relatedTarget: target\n      });\n    };\n\n    _proto._clear = function _clear() {\n      [].slice.call(document.querySelectorAll(this._selector)).filter(function (node) {\n        return node.classList.contains(CLASS_NAME_ACTIVE$2);\n      }).forEach(function (node) {\n        return node.classList.remove(CLASS_NAME_ACTIVE$2);\n      });\n    } // Static\n    ;\n\n    ScrollSpy._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $__default['default'](this).data(DATA_KEY$8);\n\n        var _config = typeof config === 'object' && config;\n\n        if (!data) {\n          data = new ScrollSpy(this, _config);\n          $__default['default'](this).data(DATA_KEY$8, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(ScrollSpy, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$8;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$6;\n      }\n    }]);\n\n    return ScrollSpy;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $__default['default'](window).on(EVENT_LOAD_DATA_API$2, function () {\n    var scrollSpys = [].slice.call(document.querySelectorAll(SELECTOR_DATA_SPY));\n    var scrollSpysLength = scrollSpys.length;\n\n    for (var i = scrollSpysLength; i--;) {\n      var $spy = $__default['default'](scrollSpys[i]);\n\n      ScrollSpy._jQueryInterface.call($spy, $spy.data());\n    }\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $__default['default'].fn[NAME$8] = ScrollSpy._jQueryInterface;\n  $__default['default'].fn[NAME$8].Constructor = ScrollSpy;\n\n  $__default['default'].fn[NAME$8].noConflict = function () {\n    $__default['default'].fn[NAME$8] = JQUERY_NO_CONFLICT$8;\n    return ScrollSpy._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$9 = 'tab';\n  var VERSION$9 = '4.6.0';\n  var DATA_KEY$9 = 'bs.tab';\n  var EVENT_KEY$9 = \".\" + DATA_KEY$9;\n  var DATA_API_KEY$7 = '.data-api';\n  var JQUERY_NO_CONFLICT$9 = $__default['default'].fn[NAME$9];\n  var EVENT_HIDE$3 = \"hide\" + EVENT_KEY$9;\n  var EVENT_HIDDEN$3 = \"hidden\" + EVENT_KEY$9;\n  var EVENT_SHOW$3 = \"show\" + EVENT_KEY$9;\n  var EVENT_SHOWN$3 = \"shown\" + EVENT_KEY$9;\n  var EVENT_CLICK_DATA_API$6 = \"click\" + EVENT_KEY$9 + DATA_API_KEY$7;\n  var CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';\n  var CLASS_NAME_ACTIVE$3 = 'active';\n  var CLASS_NAME_DISABLED$1 = 'disabled';\n  var CLASS_NAME_FADE$4 = 'fade';\n  var CLASS_NAME_SHOW$6 = 'show';\n  var SELECTOR_DROPDOWN$1 = '.dropdown';\n  var SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';\n  var SELECTOR_ACTIVE$2 = '.active';\n  var SELECTOR_ACTIVE_UL = '> li > .active';\n  var SELECTOR_DATA_TOGGLE$4 = '[data-toggle=\"tab\"], [data-toggle=\"pill\"], [data-toggle=\"list\"]';\n  var SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';\n  var SELECTOR_DROPDOWN_ACTIVE_CHILD = '> .dropdown-menu .active';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  var Tab = /*#__PURE__*/function () {\n    function Tab(element) {\n      this._element = element;\n    } // Getters\n\n\n    var _proto = Tab.prototype;\n\n    // Public\n    _proto.show = function show() {\n      var _this = this;\n\n      if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $__default['default'](this._element).hasClass(CLASS_NAME_ACTIVE$3) || $__default['default'](this._element).hasClass(CLASS_NAME_DISABLED$1)) {\n        return;\n      }\n\n      var target;\n      var previous;\n      var listElement = $__default['default'](this._element).closest(SELECTOR_NAV_LIST_GROUP$1)[0];\n      var selector = Util.getSelectorFromElement(this._element);\n\n      if (listElement) {\n        var itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE$2;\n        previous = $__default['default'].makeArray($__default['default'](listElement).find(itemSelector));\n        previous = previous[previous.length - 1];\n      }\n\n      var hideEvent = $__default['default'].Event(EVENT_HIDE$3, {\n        relatedTarget: this._element\n      });\n      var showEvent = $__default['default'].Event(EVENT_SHOW$3, {\n        relatedTarget: previous\n      });\n\n      if (previous) {\n        $__default['default'](previous).trigger(hideEvent);\n      }\n\n      $__default['default'](this._element).trigger(showEvent);\n\n      if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (selector) {\n        target = document.querySelector(selector);\n      }\n\n      this._activate(this._element, listElement);\n\n      var complete = function complete() {\n        var hiddenEvent = $__default['default'].Event(EVENT_HIDDEN$3, {\n          relatedTarget: _this._element\n        });\n        var shownEvent = $__default['default'].Event(EVENT_SHOWN$3, {\n          relatedTarget: previous\n        });\n        $__default['default'](previous).trigger(hiddenEvent);\n        $__default['default'](_this._element).trigger(shownEvent);\n      };\n\n      if (target) {\n        this._activate(target, target.parentNode, complete);\n      } else {\n        complete();\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      $__default['default'].removeData(this._element, DATA_KEY$9);\n      this._element = null;\n    } // Private\n    ;\n\n    _proto._activate = function _activate(element, container, callback) {\n      var _this2 = this;\n\n      var activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? $__default['default'](container).find(SELECTOR_ACTIVE_UL) : $__default['default'](container).children(SELECTOR_ACTIVE$2);\n      var active = activeElements[0];\n      var isTransitioning = callback && active && $__default['default'](active).hasClass(CLASS_NAME_FADE$4);\n\n      var complete = function complete() {\n        return _this2._transitionComplete(element, active, callback);\n      };\n\n      if (active && isTransitioning) {\n        var transitionDuration = Util.getTransitionDurationFromElement(active);\n        $__default['default'](active).removeClass(CLASS_NAME_SHOW$6).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n    };\n\n    _proto._transitionComplete = function _transitionComplete(element, active, callback) {\n      if (active) {\n        $__default['default'](active).removeClass(CLASS_NAME_ACTIVE$3);\n        var dropdownChild = $__default['default'](active.parentNode).find(SELECTOR_DROPDOWN_ACTIVE_CHILD)[0];\n\n        if (dropdownChild) {\n          $__default['default'](dropdownChild).removeClass(CLASS_NAME_ACTIVE$3);\n        }\n\n        if (active.getAttribute('role') === 'tab') {\n          active.setAttribute('aria-selected', false);\n        }\n      }\n\n      $__default['default'](element).addClass(CLASS_NAME_ACTIVE$3);\n\n      if (element.getAttribute('role') === 'tab') {\n        element.setAttribute('aria-selected', true);\n      }\n\n      Util.reflow(element);\n\n      if (element.classList.contains(CLASS_NAME_FADE$4)) {\n        element.classList.add(CLASS_NAME_SHOW$6);\n      }\n\n      if (element.parentNode && $__default['default'](element.parentNode).hasClass(CLASS_NAME_DROPDOWN_MENU)) {\n        var dropdownElement = $__default['default'](element).closest(SELECTOR_DROPDOWN$1)[0];\n\n        if (dropdownElement) {\n          var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(SELECTOR_DROPDOWN_TOGGLE$1));\n          $__default['default'](dropdownToggleList).addClass(CLASS_NAME_ACTIVE$3);\n        }\n\n        element.setAttribute('aria-expanded', true);\n      }\n\n      if (callback) {\n        callback();\n      }\n    } // Static\n    ;\n\n    Tab._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $this = $__default['default'](this);\n        var data = $this.data(DATA_KEY$9);\n\n        if (!data) {\n          data = new Tab(this);\n          $this.data(DATA_KEY$9, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Tab, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$9;\n      }\n    }]);\n\n    return Tab;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $__default['default'](document).on(EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$4, function (event) {\n    event.preventDefault();\n\n    Tab._jQueryInterface.call($__default['default'](this), 'show');\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $__default['default'].fn[NAME$9] = Tab._jQueryInterface;\n  $__default['default'].fn[NAME$9].Constructor = Tab;\n\n  $__default['default'].fn[NAME$9].noConflict = function () {\n    $__default['default'].fn[NAME$9] = JQUERY_NO_CONFLICT$9;\n    return Tab._jQueryInterface;\n  };\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME$a = 'toast';\n  var VERSION$a = '4.6.0';\n  var DATA_KEY$a = 'bs.toast';\n  var EVENT_KEY$a = \".\" + DATA_KEY$a;\n  var JQUERY_NO_CONFLICT$a = $__default['default'].fn[NAME$a];\n  var EVENT_CLICK_DISMISS$1 = \"click.dismiss\" + EVENT_KEY$a;\n  var EVENT_HIDE$4 = \"hide\" + EVENT_KEY$a;\n  var EVENT_HIDDEN$4 = \"hidden\" + EVENT_KEY$a;\n  var EVENT_SHOW$4 = \"show\" + EVENT_KEY$a;\n  var EVENT_SHOWN$4 = \"shown\" + EVENT_KEY$a;\n  var CLASS_NAME_FADE$5 = 'fade';\n  var CLASS_NAME_HIDE = 'hide';\n  var CLASS_NAME_SHOW$7 = 'show';\n  var CLASS_NAME_SHOWING = 'showing';\n  var DefaultType$7 = {\n    animation: 'boolean',\n    autohide: 'boolean',\n    delay: 'number'\n  };\n  var Default$7 = {\n    animation: true,\n    autohide: true,\n    delay: 500\n  };\n  var SELECTOR_DATA_DISMISS$1 = '[data-dismiss=\"toast\"]';\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  var Toast = /*#__PURE__*/function () {\n    function Toast(element, config) {\n      this._element = element;\n      this._config = this._getConfig(config);\n      this._timeout = null;\n\n      this._setListeners();\n    } // Getters\n\n\n    var _proto = Toast.prototype;\n\n    // Public\n    _proto.show = function show() {\n      var _this = this;\n\n      var showEvent = $__default['default'].Event(EVENT_SHOW$4);\n      $__default['default'](this._element).trigger(showEvent);\n\n      if (showEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._clearTimeout();\n\n      if (this._config.animation) {\n        this._element.classList.add(CLASS_NAME_FADE$5);\n      }\n\n      var complete = function complete() {\n        _this._element.classList.remove(CLASS_NAME_SHOWING);\n\n        _this._element.classList.add(CLASS_NAME_SHOW$7);\n\n        $__default['default'](_this._element).trigger(EVENT_SHOWN$4);\n\n        if (_this._config.autohide) {\n          _this._timeout = setTimeout(function () {\n            _this.hide();\n          }, _this._config.delay);\n        }\n      };\n\n      this._element.classList.remove(CLASS_NAME_HIDE);\n\n      Util.reflow(this._element);\n\n      this._element.classList.add(CLASS_NAME_SHOWING);\n\n      if (this._config.animation) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n        $__default['default'](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n    };\n\n    _proto.hide = function hide() {\n      if (!this._element.classList.contains(CLASS_NAME_SHOW$7)) {\n        return;\n      }\n\n      var hideEvent = $__default['default'].Event(EVENT_HIDE$4);\n      $__default['default'](this._element).trigger(hideEvent);\n\n      if (hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._close();\n    };\n\n    _proto.dispose = function dispose() {\n      this._clearTimeout();\n\n      if (this._element.classList.contains(CLASS_NAME_SHOW$7)) {\n        this._element.classList.remove(CLASS_NAME_SHOW$7);\n      }\n\n      $__default['default'](this._element).off(EVENT_CLICK_DISMISS$1);\n      $__default['default'].removeData(this._element, DATA_KEY$a);\n      this._element = null;\n      this._config = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _extends({}, Default$7, $__default['default'](this._element).data(), typeof config === 'object' && config ? config : {});\n      Util.typeCheckConfig(NAME$a, config, this.constructor.DefaultType);\n      return config;\n    };\n\n    _proto._setListeners = function _setListeners() {\n      var _this2 = this;\n\n      $__default['default'](this._element).on(EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, function () {\n        return _this2.hide();\n      });\n    };\n\n    _proto._close = function _close() {\n      var _this3 = this;\n\n      var complete = function complete() {\n        _this3._element.classList.add(CLASS_NAME_HIDE);\n\n        $__default['default'](_this3._element).trigger(EVENT_HIDDEN$4);\n      };\n\n      this._element.classList.remove(CLASS_NAME_SHOW$7);\n\n      if (this._config.animation) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n        $__default['default'](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n    };\n\n    _proto._clearTimeout = function _clearTimeout() {\n      clearTimeout(this._timeout);\n      this._timeout = null;\n    } // Static\n    ;\n\n    Toast._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $element = $__default['default'](this);\n        var data = $element.data(DATA_KEY$a);\n\n        var _config = typeof config === 'object' && config;\n\n        if (!data) {\n          data = new Toast(this, _config);\n          $element.data(DATA_KEY$a, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config](this);\n        }\n      });\n    };\n\n    _createClass(Toast, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$a;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType$7;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$7;\n      }\n    }]);\n\n    return Toast;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n\n  $__default['default'].fn[NAME$a] = Toast._jQueryInterface;\n  $__default['default'].fn[NAME$a].Constructor = Toast;\n\n  $__default['default'].fn[NAME$a].noConflict = function () {\n    $__default['default'].fn[NAME$a] = JQUERY_NO_CONFLICT$a;\n    return Toast._jQueryInterface;\n  };\n\n  exports.Alert = Alert;\n  exports.Button = Button;\n  exports.Carousel = Carousel;\n  exports.Collapse = Collapse;\n  exports.Dropdown = Dropdown;\n  exports.Modal = Modal;\n  exports.Popover = Popover;\n  exports.Scrollspy = ScrollSpy;\n  exports.Tab = Tab;\n  exports.Toast = Toast;\n  exports.Tooltip = Tooltip;\n  exports.Util = Util;\n\n  Object.defineProperty(exports, '__esModule', { value: true });\n\n})));\n//# sourceMappingURL=bootstrap.js.map\n\n\n/***/ }),\n\n/***/ \"./node_modules/is-buffer/index.js\":\n/*!*****************************************!*\\\n  !*** ./node_modules/is-buffer/index.js ***!\n  \\*****************************************/\n/***/ ((module) => {\n\n/*!\n * Determine if an object is a Buffer\n *\n * @author   Feross Aboukhadijeh <https://feross.org>\n * @license  MIT\n */\n\nmodule.exports = function isBuffer (obj) {\n  return obj != null && obj.constructor != null &&\n    typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/jquery/dist/jquery.js\":\n/*!********************************************!*\\\n  !*** ./node_modules/jquery/dist/jquery.js ***!\n  \\********************************************/\n/***/ (function(module, exports) {\n\nvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!\n * jQuery JavaScript Library v3.6.0\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2021-03-02T17:08Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif (  true && typeof module.exports === \"object\" ) {\n\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// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\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 fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\nvar isFunction = function isFunction( obj ) {\n\n\t\t// Support: Chrome <=57, Firefox <=52\n\t\t// In some browsers, typeof returns \"function\" for HTML <object> elements\n\t\t// (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n\t\t// We don't want to classify *any* DOM node as a function.\n\t\t// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5\n\t\t// Plus for old WebKit, typeof returns \"function\" for HTML collections\n\t\t// (e.g., `typeof document.getElementsByTagName(\"div\") === \"function\"`). (gh-4756)\n\t\treturn typeof obj === \"function\" && typeof obj.nodeType !== \"number\" &&\n\t\t\ttypeof obj.item !== \"function\";\n\t};\n\n\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\nvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, node, doc ) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[ i ] || node.getAttribute && node.getAttribute( i );\n\t\t\t\tif ( val ) {\n\t\t\t\t\tscript.setAttribute( i, val );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar\n\tversion = \"3.6.0\",\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\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\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\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : 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\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\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\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\" && !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\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || 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 = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\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\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\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// 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\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\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\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 flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\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\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n\tfunction( _i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (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 = toType( obj );\n\n\tif ( isFunction( obj ) || 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.3.6\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://js.foundation/\n *\n * Date: 2021-02-16\n */\n( function( window ) {\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\tnonnativeSelectorCache = 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// Instance methods\n\thasOwn = ( {} ).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpushNative = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\n\t// Use a stripped-down indexOf as it's faster than native\n\t// https://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|\" +\n\t\t\"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// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\tidentifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t\t// \"Attribute values must be CSS identifiers [capture 5]\n\t\t// or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\t\twhitespace + \"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\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\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\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 + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" +\n\t\twhitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace +\n\t\t\"*\" ),\n\trdescend = new RegExp( whitespace + \"|>\" ),\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)(?:\\\\(\" +\n\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\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 +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trhtml = /HTML$/i,\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\n\t// CSS escapes\n\t// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace + \"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\treturn nonHex ?\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\tnonHex :\n\n\t\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t\t// Support: IE <=11+\n\t\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t\t// surrogate pair\n\t\t\thigh < 0 ?\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\trcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n\tfcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" +\n\t\t\t\tch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\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\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && elem.nodeName.toLowerCase() === \"fieldset\";\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\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\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\t// eslint-disable-next-line no-unused-expressions\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\tpushNative.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\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, 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\t\tsetDocument( context );\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!nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) &&\n\n\t\t\t\t// Support: IE 8 only\n\t\t\t\t// Exclude object elements\n\t\t\t\t( nodeType !== 1 || context.nodeName.toLowerCase() !== \"object\" ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rcombinators.test( selector ) ) ) {\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\n\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t// supports it & if we're not changing the context.\n\t\t\t\t\tif ( newContext !== context || !support.scope ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = nid.replace( rcssescape, fcssescape );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = expando ) );\n\t\t\t\t\t\t}\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\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\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 element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement( \"fieldset\" );\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch ( e ) {\n\t\treturn false;\n\t} finally {\n\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\n\t\t// release memory in IE\n\t\tel = 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\ta.sourceIndex - b.sourceIndex;\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 :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t/* jshint -W018 */\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\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\tvar namespace = elem && elem.namespaceURI,\n\t\tdocElem = elem && ( elem.ownerDocument || elem ).documentElement;\n\n\t// Support: IE <=8\n\t// Assume HTML when documentElement doesn't yet exist, such as inside loading iframes\n\t// https://bugs.jquery.com/ticket/4833\n\treturn !rhtml.test( namespace || docElem && docElem.nodeName || \"HTML\" );\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, subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\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 12 - 18+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( preferredDoc != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 11, Edge\n\t\tif ( subWindow.addEventListener ) {\n\t\t\tsubWindow.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( subWindow.attachEvent ) {\n\t\t\tsubWindow.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t// Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only,\n\t// Safari 4 - 5 only, Opera <=11.6 - 12.x only\n\t// IE/Edge & older browsers don't support the :scope pseudo-class.\n\t// Support: Safari 6.0 only\n\t// Safari 6.0 supports :scope but it's an alias of :root there.\n\tsupport.scope = assert( function( el ) {\n\t\tdocElem.appendChild( el ).appendChild( document.createElement( \"div\" ) );\n\t\treturn typeof el.querySelectorAll !== \"undefined\" &&\n\t\t\t!el.querySelectorAll( \":scope fieldset div\" ).length;\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( el ) {\n\t\tel.className = \"i\";\n\t\treturn !el.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( el ) {\n\t\tel.appendChild( document.createComment( \"\" ) );\n\t\treturn !el.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 programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert( function( el ) {\n\t\tdocElem.appendChild( el ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t} );\n\n\t// ID filter and find\n\tif ( support.getById ) {\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\tExpr.find[ \"ID\" ] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\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\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find[ \"ID\" ] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( ( elem = elems[ i++ ] ) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\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\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 https://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) {\n\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert( function( el ) {\n\n\t\t\tvar input;\n\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// https://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( el ).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// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( el.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 ( !el.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 ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"~=\" );\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t\t// Adding a temporary attribute to the document before the selection works\n\t\t\t// around the issue.\n\t\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\t\tinput = document.createElement( \"input\" );\n\t\t\tinput.setAttribute( \"name\", \"\" );\n\t\t\tel.appendChild( input );\n\t\t\tif ( !el.querySelectorAll( \"[name='']\" ).length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\" );\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 ( !el.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 sibling-combinator selector` fails\n\t\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push( \".#.+[+~]\" );\n\t\t\t}\n\n\t\t\t// Support: Firefox <=3.6 - 5 only\n\t\t\t// Old Firefox doesn't throw on a badly-escaped identifier.\n\t\t\tel.querySelectorAll( \"\\\\\\f\" );\n\t\t\trbuggyQSA.push( \"[\\\\r\\\\n\\\\f]\" );\n\t\t} );\n\n\t\tassert( function( el ) {\n\t\t\tel.innerHTML = \"<a href='' disabled='disabled'></a>\" +\n\t\t\t\t\"<select disabled='disabled'><option/></select>\";\n\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\tel.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 ( el.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 ( el.querySelectorAll( \":enabled\" ).length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\tdocElem.appendChild( el ).disabled = true;\n\t\t\tif ( el.querySelectorAll( \":disabled\" ).length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: Opera 10 - 11 only\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tel.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( el ) {\n\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( el, \"*\" );\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( el, \"[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\t// Support: IE 11+, Edge 17 - 18+\n\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\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\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( a == document || a.ownerDocument == preferredDoc &&\n\t\t\t\tcontains( preferredDoc, a ) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( b == document || b.ownerDocument == preferredDoc &&\n\t\t\t\tcontains( 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\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\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t/* eslint-disable eqeqeq */\n\t\t\treturn a == document ? -1 :\n\t\t\t\tb == document ? 1 :\n\t\t\t\t/* eslint-enable eqeqeq */\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\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\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t/* eslint-disable eqeqeq */\n\t\t\tap[ i ] == preferredDoc ? -1 :\n\t\t\tbp[ i ] == preferredDoc ? 1 :\n\t\t\t/* eslint-enable eqeqeq */\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\tsetDocument( elem );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!nonnativeSelectorCache[ 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\n\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t// fragment in IE 9\n\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\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\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\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( elem.ownerDocument || elem ) != document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\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.escape = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\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\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( ( node = elem[ i++ ] ) ) {\n\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\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\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\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 ] ||\n\t\t\t\tmatch[ 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\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\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 ] ?\n\t\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" ) );\n\t\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\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\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\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() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\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 +\n\t\t\t\t\t\")\" + className + \"(\" + whitespace + \"|$)\" ) ) && classCache(\n\t\t\t\t\t\tclassName, function( elem ) {\n\t\t\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t);\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\t/* eslint-disable max-len */\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\t/* eslint-enable max-len */\n\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\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\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\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\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 ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( 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\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\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction( function( selector ) {\n\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\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 || 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\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 &&\n\t\t\t\t( !document.hasFocus || document.hasFocus() ) &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": createDisabledPseudo( false ),\n\t\t\"disabled\": createDisabledPseudo( true ),\n\n\t\t\"checked\": function( elem ) {\n\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 ) ||\n\t\t\t\t( nodeName === \"option\" && !!elem.selected );\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\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\t// eslint-disable-next-line no-unused-expressions\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\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 ||\n\t\t\t\t\tattr.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 ?\n\t\t\t\targument + length :\n\t\t\t\targument > length ?\n\t\t\t\t\tlength :\n\t\t\t\t\targument;\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\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\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\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\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\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\treturn false;\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 ] ||\n\t\t\t\t\t\t\t( outerCache[ elem.uniqueID ] = {} );\n\n\t\t\t\t\t\tif ( skip && skip === elem.nodeName.toLowerCase() ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = uniqueCache[ key ] ) &&\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\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[ key ] = 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\treturn false;\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(\n\t\t\t\tselector || \"*\",\n\t\t\t\tcontext.nodeType ? [ context ] : context,\n\t\t\t\t[]\n\t\t\t),\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\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\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\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\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\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\n\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\ttokens\n\t\t\t\t\t\t.slice( 0, i - 1 )\n\t\t\t\t\t\t.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\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\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\n\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\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\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\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\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\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\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(\n\t\t\tselector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers )\n\t\t);\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\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( Expr.find[ \"ID\" ]( token.matches[ 0 ]\n\t\t\t\t.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\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 ) ||\n\t\t\t\t\t\tcontext\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( el ) {\n\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement( \"fieldset\" ) ) & 1;\n} );\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert( function( el ) {\n\tel.innerHTML = \"<a href='#'></a>\";\n\treturn el.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( el ) {\n\tel.innerHTML = \"<input/>\";\n\tel.firstChild.setAttribute( \"value\", \"\" );\n\treturn el.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( el ) {\n\treturn el.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( val = elem.getAttributeNode( name ) ) && val.specified ?\n\t\t\t\t\tval.value :\n\t\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;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\njQuery.escapeSelector = Sizzle.escape;\n\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\n\n\nfunction nodeName( elem, name ) {\n\n\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n}\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\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\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\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\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : 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\t// Shortcut simple #id case for speed\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 ( 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\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\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[ 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 ( 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\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\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\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 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\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// <object> elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn 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 rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], 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 = locked || 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 ( 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 && toType( 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 && !firing ) {\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\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\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\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\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 && 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,\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\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\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// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.stackTrace );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\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};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the stack, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.stackTrace = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\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 jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\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// 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[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = 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(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\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( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the primary Deferred\n\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tprimary.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( primary.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn primary.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );\n\t\t}\n\n\t\treturn primary.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\njQuery.Deferred.exceptionHook = function( error, stack ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message, error.stack, stack );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\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// 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\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\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 ( toType( 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 ( !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\t\tvalue :\n\t\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\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE <=9 - 11, Edge 12 - 15\n// Microsoft forgot to hump their vendor prefix (#9572)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\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\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\tcache: function( owner ) {\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\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( 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[ camelCase( 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\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\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\treturn this.get( owner, 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,\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\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ 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://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\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 getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\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 = getData( data );\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: IE 11 only\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 = 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;\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// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( 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\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 || Array.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 documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif ( documentElement.getRootNode ) {\n\t\tisAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t\t};\n\t}\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached( elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\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 = elem.nodeType &&\n\t\t\t( 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// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\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}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\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\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\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 ( isHiddenWithinTree( 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} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\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: Android <=4.1 only\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 only\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\t// Support: IE <=9 only\n\t// IE <=9 replaces <option> tags with their contents when inserted outside of\n\t// the select element.\n\tdiv.innerHTML = \"<option></option>\";\n\tsupport.option = !!div.lastChild;\n} )();\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\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\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n// Support: IE <=9 only\nif ( !support.option ) {\n\twrapMap.optgroup = wrapMap.option = [ 1, \"<select multiple='multiple'>\", \"</select>\" ];\n}\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\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, attached, 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 ( toType( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\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.0 only, PhantomJS 1 only\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\tattached = isAttached( 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 ( attached ) {\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\nvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE <=9 - 11+\n// focus() and blur() are asynchronous, except when they are no-op.\n// So expect focus to be synchronous when the element is already active,\n// and blur to be synchronous when the element is not already active.\n// (focus and blur are always synchronous in other supported browsers,\n// this just defines when we can count on it).\nfunction expectSync( elem, type ) {\n\treturn ( elem === safeActiveElement() ) === ( type === \"focus\" );\n}\n\n// Support: IE <=9 only\n// Accessing document.activeElement can throw unexpectedly\n// https://bugs.jquery.com/ticket/13393\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// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\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// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, 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 = Object.create( null );\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( rnothtmlwhite ) || [ \"\" ];\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( rnothtmlwhite ) || [ \"\" ];\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( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t)[ 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\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\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// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.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, handleObj, sel, matchedHandlers, matchedSelectors,\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\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && 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 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\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 ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ 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 ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\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\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\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\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", returnTrue );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( 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\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, expectSync ) {\n\n\t// Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !expectSync ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar notAsync, result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\t// Saved data should be false in such cases, but might be a leftover capture object\n\t\t\t\t// from an async native handler (gh-4350)\n\t\t\t\tif ( !saved.length ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t// focus() and blur() are asynchronous\n\t\t\t\t\tnotAsync = expectSync( this, type );\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tif ( saved !== result || notAsync ) {\n\t\t\t\t\t\tdataPriv.set( this, type, false );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult = {};\n\t\t\t\t\t}\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// Support: Chrome 86+\n\t\t\t\t\t\t// In Chrome, if an element having a focusout handler is blurred by\n\t\t\t\t\t\t// clicking outside of it, it invokes the handler synchronously. If\n\t\t\t\t\t\t// that handler calls `.remove()` on the element, the data is cleared,\n\t\t\t\t\t\t// leaving `result` undefined. We need to guard against this.\n\t\t\t\t\t\treturn result && result.value;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering the\n\t\t\t\t// native event and prevent that from happening again here.\n\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t// less bad than duplication.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t} else if ( saved.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\n\t\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t\t// Extend with the prototype to reset the above stopImmediatePropagation()\n\t\t\t\t\t\tjQuery.extend( saved[ 0 ], jQuery.Event.prototype ),\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event\n\t\t\t\tevent.stopImmediatePropagation();\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 <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (#504, #13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\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 || Date.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// https://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\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\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 && !this.isSimulated ) {\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 && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\twhich: true\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, expectSync );\n\n\t\t\t// Return false to allow normal processing in the caller\n\t\t\treturn false;\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\t// Suppress native focus or blur as it's already being fired\n\t\t// in leverageNative.\n\t\t_default: function() {\n\t\t\treturn true;\n\t\t},\n\n\t\tdelegateType: delegateType\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://bugs.chromium.org/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\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\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\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\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( elem ).children( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\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\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\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, 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.get( src );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdataPriv.remove( dest, \"handle 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 = flat( 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\tvalueIsFunction = isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( valueIsFunction ||\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 ( valueIsFunction ) {\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.0 only, PhantomJS 1 only\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 && ( node.type || \"\" ).toLowerCase()  !== \"module\" ) {\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 && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute( \"nonce\" )\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), node, doc );\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 && isAttached( 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;\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 = isAttached( 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: https://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\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: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, 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 ) {\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.call( elem );\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 rboxStyle = new RegExp( cssExpand.join( \"|\" ), \"i\" );\n\n\n\n( function() {\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\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\tdiv.style.cssText =\n\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"width:60%;top:1%\";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.right = \"60%\";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t// Support: Chrome <=64\n\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\tdiv.style.position = \"absolute\";\n\t\tscrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\treliableTrDimensionsVal, 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: IE <=9 - 11 only\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\tjQuery.extend( support, {\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelBoxStyles: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelBoxStylesVal;\n\t\t},\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\tscrollboxSize: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn scrollboxSizeVal;\n\t\t},\n\n\t\t// Support: IE 9 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Behavior in IE 9 is more subtle than in newer versions & it passes\n\t\t// some versions of this test; make sure not to make it pass there!\n\t\t//\n\t\t// Support: Firefox 70+\n\t\t// Only Firefox includes border widths\n\t\t// in computed dimensions. (gh-4529)\n\t\treliableTrDimensions: function() {\n\t\t\tvar table, tr, trChild, trStyle;\n\t\t\tif ( reliableTrDimensionsVal == null ) {\n\t\t\t\ttable = document.createElement( \"table\" );\n\t\t\t\ttr = document.createElement( \"tr\" );\n\t\t\t\ttrChild = document.createElement( \"div\" );\n\n\t\t\t\ttable.style.cssText = \"position:absolute;left:-11111px;border-collapse:separate\";\n\t\t\t\ttr.style.cssText = \"border:1px solid\";\n\n\t\t\t\t// Support: Chrome 86+\n\t\t\t\t// Height set through cssText does not get applied.\n\t\t\t\t// Computed height then comes back as 0.\n\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\t// Support: Android 8 Chrome 86+\n\t\t\t\t// In our bodyBackground.html iframe,\n\t\t\t\t// display for all div elements is set to \"inline\",\n\t\t\t\t// which causes a problem only in Android 8 Chrome 86.\n\t\t\t\t// Ensuring the div is display: block\n\t\t\t\t// gets around this issue.\n\t\t\t\ttrChild.style.display = \"block\";\n\n\t\t\t\tdocumentElement\n\t\t\t\t\t.appendChild( table )\n\t\t\t\t\t.appendChild( tr )\n\t\t\t\t\t.appendChild( trChild );\n\n\t\t\t\ttrStyle = window.getComputedStyle( tr );\n\t\t\t\treliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderTopWidth, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight;\n\n\t\t\t\tdocumentElement.removeChild( table );\n\t\t\t}\n\t\t\treturn reliableTrDimensionsVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t//   .css('filter') (IE 9 only, #12537)\n\t//   .css('--customProperty) (#3144)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\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// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.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: IE <=9 - 11 only\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 cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style,\n\tvendorProps = {};\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\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\n// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\nfunction finalPropName( name ) {\n\tvar final = jQuery.cssProps[ name ] || vendorProps[ name ];\n\n\tif ( final ) {\n\t\treturn final;\n\t}\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorProps[ name ] = vendorPropName( name ) || name;\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\trcustomProp = /^--/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\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 boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\tif ( box === \"margin\" ) {\n\t\t\tdelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\t// Support: IE 9 - 11 only\n\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t// In those cases, the computed value can be trusted to be border-box.\n\tif ( ( !support.boxSizingReliable() && isBorderBox ||\n\n\t\t// Support: IE 10 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Interestingly, in some cases IE 9 doesn't suffer from this issue.\n\t\t!support.reliableTrDimensions() && nodeName( elem, \"tr\" ) ||\n\n\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\tval === \"auto\" ||\n\n\t\t// Support: Android <=4.1 - 4.3 only\n\t\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t\t!parseFloat( val ) && jQuery.css( elem, \"display\", false, styles ) === \"inline\" ) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\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\"gridArea\": true,\n\t\t\"gridColumn\": true,\n\t\t\"gridColumnEnd\": true,\n\t\t\"gridColumnStart\": true,\n\t\t\"gridRow\": true,\n\t\t\"gridRowEnd\": true,\n\t\t\"gridRowStart\": 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\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 = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\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\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t// \"px\" to a few hardcoded values.\n\t\t\tif ( type === \"number\" && !isCustomProp ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\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\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\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 = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\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\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\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\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t} ) :\n\t\t\t\t\tgetWidthOrHeight( elem, dimension, 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 = getStyles( elem ),\n\n\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && scrollboxSizeBuggy ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, \"border\", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\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[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\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) + \"px\";\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 ( prefix !== \"margin\" ) {\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 ( Array.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} );\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\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\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: IE <=9 only\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, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.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\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\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// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( 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// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\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\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\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// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\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 = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.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 only\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\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\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\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 ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( 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 ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.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\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\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\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 ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\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\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\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 ( 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( isHiddenWithinTree ).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\n\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 ) {\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 = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\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\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = 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// https://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: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\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// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\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\tnodeName( 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,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\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};\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\t\tlowercaseName = name.toLowerCase();\n\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[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = 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// Support: IE <=9 - 11 only\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// https://web.archive.org/web/20141116233347/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\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -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\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\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\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\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}\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\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\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 ( 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\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\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 = stripAndCollapse( 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 ( 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\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\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 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\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 = stripAndCollapse( 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\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\n\n\t\tif ( typeof stateVal === \"boolean\" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( 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 ( isValidValue ) {\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 = classesToArray( value );\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\t\"\" :\n\t\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( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\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, valueIsFunction,\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\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = 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 ( valueIsFunction ) {\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 ( Array.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\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\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\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\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// Support: IE <=9 only\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!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!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\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\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\n\t\t\t\t\t/* eslint-enable no-cond-assign */\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 ( Array.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\nsupport.focusin = \"onfocusin\" in window;\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\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 = lastElement = 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 && !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\t\t\tlastElement = cur;\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\" ) || Object.create( null ) )[ 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 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 && isFunction( elem[ type ] ) && !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\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\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\t// Used only for `focus(in | out)` events\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\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\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\n// Support: Firefox <=44\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 <=48 - 49, Safari <=9.0 - 9.1\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://bugs.chromium.org/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\n\t\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\t\tvar doc = this.ownerDocument || this.document || 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.document || 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 = { guid: Date.now() };\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, parserErrorElem;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {}\n\n\tparserErrorElem = xml && xml.getElementsByTagName( \"parsererror\" )[ 0 ];\n\tif ( !xml || parserErrorElem ) {\n\t\tjQuery.error( \"Invalid XML: \" + (\n\t\t\tparserErrorElem ?\n\t\t\t\tjQuery.map( parserErrorElem.childNodes, function( el ) {\n\t\t\t\t\treturn el.textContent;\n\t\t\t\t} ).join( \"\\n\" ) :\n\t\t\t\tdata\n\t\t) );\n\t}\n\treturn xml;\n};\n\n\nvar\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 ( Array.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 && toType( 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, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.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( \"&\" );\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} ).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} ).map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\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\noriginAnchor.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( rnothtmlwhite ) || [];\n\n\t\tif ( 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\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\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\": JSON.parse,\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// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\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// uncached part of the url\n\t\t\tuncached,\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\tjQuery( callbackContext ) :\n\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// 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 ( completed ) {\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() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( 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.join( \", \" );\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 completed ? 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\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || 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 ( completed == null ) {\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 ( completed ) {\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} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\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}\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 );\n\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 ) + \"\" )\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 = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\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: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// 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: IE <=8 - 11 only\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 ( completed ) {\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\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( 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 or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce.guid++ ) +\n\t\t\t\t\tuncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\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 || completed ) ) {\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\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\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 ( completed ) {\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\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\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// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\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// Use a noop converter for missing script but not if jsonp\n\t\t\tif ( !isSuccess &&\n\t\t\t\tjQuery.inArray( \"script\", s.dataTypes ) > -1 &&\n\t\t\t\tjQuery.inArray( \"json\", s.dataTypes ) < 0 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\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 ( 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\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\n\njQuery._evalUrl = function( url, options, doc ) {\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\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\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 ( 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 htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\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: IE <=9 only\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.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.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: IE <=9 only\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: IE <=9 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 = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\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// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\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 or forced-by-attrs requests\n\tif ( s.crossDomain || s.scriptAttrs ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" )\n\t\t\t\t\t.attr( s.scriptAttrs || {} )\n\t\t\t\t\t.prop( { charset: s.scriptCharset, src: s.url } )\n\t\t\t\t\t.on( \"load error\", callback = 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\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.guid++ ) );\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 = 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 && 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 only\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 ( typeof data !== \"string\" ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar base, parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using document.implementation\n\t\tif ( support.createHTMLDocument ) {\n\t\t\tcontext = document.implementation.createHTMLDocument( \"\" );\n\n\t\t\t// Set the base href for the created document\n\t\t\t// so any parsed elements with URLs\n\t\t\t// are based on the document's URL (gh-2965)\n\t\t\tbase = context.createElement( \"base\" );\n\t\t\tbase.href = document.location.href;\n\t\t\tcontext.head.appendChild( base );\n\t\t} else {\n\t\t\tcontext = document;\n\t\t}\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\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/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( 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( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\njQuery.expr.pseudos.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\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 ( 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\n\t// offset() relates an element's border box to the document origin\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\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 rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11 only\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\trect = elem.getBoundingClientRect();\n\t\twin = elem.ownerDocument.defaultView;\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\tleft: rect.left + win.pageXOffset\n\t\t};\n\t},\n\n\t// position() relates an element's margin box to its offset parent's padding box\n\t// This corresponds to the behavior of CSS absolute positioning\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset, doc,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\toffset = this.offset();\n\n\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t// when a statically positioned element is identified\n\t\t\tdoc = elem.ownerDocument;\n\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\twhile ( offsetParent &&\n\t\t\t\t( offsetParent === doc.body || offsetParent === doc.documentElement ) &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\n\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t}\n\t\t\tif ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {\n\n\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\tparentOffset = jQuery( offsetParent ).offset();\n\t\t\t\tparentOffset.top += jQuery.css( offsetParent, \"borderTopWidth\", true );\n\t\t\t\tparentOffset.left += jQuery.css( offsetParent, \"borderLeftWidth\", true );\n\t\t\t}\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\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\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 - 9.1, Chrome <=37 - 49\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://bugs.chromium.org/p/chromium/issues/detail?id=589347\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( {\n\t\tpadding: \"inner\" + name,\n\t\tcontent: type,\n\t\t\"\": \"outer\" + name\n\t}, function( 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 ( isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.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 );\n\t\t};\n\t} );\n} );\n\n\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.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\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\njQuery.each(\n\t( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( _i, name ) {\n\n\t\t// Handle event binding\n\t\tjQuery.fn[ name ] = function( data, fn ) {\n\t\t\treturn arguments.length > 0 ?\n\t\t\t\tthis.on( name, null, data, fn ) :\n\t\t\t\tthis.trigger( name );\n\t\t};\n\t}\n);\n\n\n\n\n// Support: Android <=4.0 only\n// Make sure we trim BOM and NBSP\nvar rtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;\n\n// Bind a function to a context, optionally partially applying any\n// arguments.\n// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n// However, it is not slated for removal any time soon\njQuery.proxy = function( fn, context ) {\n\tvar tmp, args, proxy;\n\n\tif ( typeof context === \"string\" ) {\n\t\ttmp = fn[ context ];\n\t\tcontext = fn;\n\t\tfn = tmp;\n\t}\n\n\t// Quick check to determine if target is callable, in the spec\n\t// this throws a TypeError, but we will just return undefined.\n\tif ( !isFunction( fn ) ) {\n\t\treturn undefined;\n\t}\n\n\t// Simulated bind\n\targs = slice.call( arguments, 2 );\n\tproxy = function() {\n\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t};\n\n\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\treturn proxy;\n};\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\njQuery.isArray = Array.isArray;\njQuery.parseJSON = JSON.parse;\njQuery.nodeName = nodeName;\njQuery.isFunction = isFunction;\njQuery.isWindow = isWindow;\njQuery.camelCase = camelCase;\njQuery.type = toType;\n\njQuery.now = Date.now;\n\njQuery.isNumeric = function( obj ) {\n\n\t// As of jQuery 3.0, isNumeric is limited to\n\t// strings and numbers (primitives or objects)\n\t// that can be coerced to finite numbers (gh-2662)\n\tvar type = jQuery.type( obj );\n\treturn ( type === \"number\" || type === \"string\" ) &&\n\n\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t!isNaN( obj - parseFloat( obj ) );\n};\n\njQuery.trim = function( text ) {\n\treturn text == null ?\n\t\t\"\" :\n\t\t( text + \"\" ).replace( rtrim, \"\" );\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 ( true ) {\n\t!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function() {\n\t\treturn jQuery;\n\t}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n}\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 ( typeof noGlobal === \"undefined\" ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n\n\n/***/ }),\n\n/***/ \"./node_modules/lodash/lodash.js\":\n/*!***************************************!*\\\n  !*** ./node_modules/lodash/lodash.js ***!\n  \\***************************************/\n/***/ (function(module, exports, __webpack_require__) {\n\n/* module decorator */ module = __webpack_require__.nmd(module);\nvar __WEBPACK_AMD_DEFINE_RESULT__;/**\n * @license\n * Lodash <https://lodash.com/>\n * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;(function() {\n\n  /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n  var undefined;\n\n  /** Used as the semantic version number. */\n  var VERSION = '4.17.21';\n\n  /** Used as the size to enable large array optimizations. */\n  var LARGE_ARRAY_SIZE = 200;\n\n  /** Error message constants. */\n  var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\n      FUNC_ERROR_TEXT = 'Expected a function',\n      INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`';\n\n  /** Used to stand-in for `undefined` hash values. */\n  var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n  /** Used as the maximum memoize cache size. */\n  var MAX_MEMOIZE_SIZE = 500;\n\n  /** Used as the internal argument placeholder. */\n  var PLACEHOLDER = '__lodash_placeholder__';\n\n  /** Used to compose bitmasks for cloning. */\n  var CLONE_DEEP_FLAG = 1,\n      CLONE_FLAT_FLAG = 2,\n      CLONE_SYMBOLS_FLAG = 4;\n\n  /** Used to compose bitmasks for value comparisons. */\n  var COMPARE_PARTIAL_FLAG = 1,\n      COMPARE_UNORDERED_FLAG = 2;\n\n  /** Used to compose bitmasks for function metadata. */\n  var WRAP_BIND_FLAG = 1,\n      WRAP_BIND_KEY_FLAG = 2,\n      WRAP_CURRY_BOUND_FLAG = 4,\n      WRAP_CURRY_FLAG = 8,\n      WRAP_CURRY_RIGHT_FLAG = 16,\n      WRAP_PARTIAL_FLAG = 32,\n      WRAP_PARTIAL_RIGHT_FLAG = 64,\n      WRAP_ARY_FLAG = 128,\n      WRAP_REARG_FLAG = 256,\n      WRAP_FLIP_FLAG = 512;\n\n  /** Used as default options for `_.truncate`. */\n  var DEFAULT_TRUNC_LENGTH = 30,\n      DEFAULT_TRUNC_OMISSION = '...';\n\n  /** Used to detect hot functions by number of calls within a span of milliseconds. */\n  var HOT_COUNT = 800,\n      HOT_SPAN = 16;\n\n  /** Used to indicate the type of lazy iteratees. */\n  var LAZY_FILTER_FLAG = 1,\n      LAZY_MAP_FLAG = 2,\n      LAZY_WHILE_FLAG = 3;\n\n  /** Used as references for various `Number` constants. */\n  var INFINITY = 1 / 0,\n      MAX_SAFE_INTEGER = 9007199254740991,\n      MAX_INTEGER = 1.7976931348623157e+308,\n      NAN = 0 / 0;\n\n  /** Used as references for the maximum length and index of an array. */\n  var MAX_ARRAY_LENGTH = 4294967295,\n      MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n      HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n  /** Used to associate wrap methods with their bit flags. */\n  var wrapFlags = [\n    ['ary', WRAP_ARY_FLAG],\n    ['bind', WRAP_BIND_FLAG],\n    ['bindKey', WRAP_BIND_KEY_FLAG],\n    ['curry', WRAP_CURRY_FLAG],\n    ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n    ['flip', WRAP_FLIP_FLAG],\n    ['partial', WRAP_PARTIAL_FLAG],\n    ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n    ['rearg', WRAP_REARG_FLAG]\n  ];\n\n  /** `Object#toString` result references. */\n  var argsTag = '[object Arguments]',\n      arrayTag = '[object Array]',\n      asyncTag = '[object AsyncFunction]',\n      boolTag = '[object Boolean]',\n      dateTag = '[object Date]',\n      domExcTag = '[object DOMException]',\n      errorTag = '[object Error]',\n      funcTag = '[object Function]',\n      genTag = '[object GeneratorFunction]',\n      mapTag = '[object Map]',\n      numberTag = '[object Number]',\n      nullTag = '[object Null]',\n      objectTag = '[object Object]',\n      promiseTag = '[object Promise]',\n      proxyTag = '[object Proxy]',\n      regexpTag = '[object RegExp]',\n      setTag = '[object Set]',\n      stringTag = '[object String]',\n      symbolTag = '[object Symbol]',\n      undefinedTag = '[object Undefined]',\n      weakMapTag = '[object WeakMap]',\n      weakSetTag = '[object WeakSet]';\n\n  var arrayBufferTag = '[object ArrayBuffer]',\n      dataViewTag = '[object DataView]',\n      float32Tag = '[object Float32Array]',\n      float64Tag = '[object Float64Array]',\n      int8Tag = '[object Int8Array]',\n      int16Tag = '[object Int16Array]',\n      int32Tag = '[object Int32Array]',\n      uint8Tag = '[object Uint8Array]',\n      uint8ClampedTag = '[object Uint8ClampedArray]',\n      uint16Tag = '[object Uint16Array]',\n      uint32Tag = '[object Uint32Array]';\n\n  /** Used to match empty string literals in compiled template source. */\n  var reEmptyStringLeading = /\\b__p \\+= '';/g,\n      reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n      reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n  /** Used to match HTML entities and HTML characters. */\n  var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n      reUnescapedHtml = /[&<>\"']/g,\n      reHasEscapedHtml = RegExp(reEscapedHtml.source),\n      reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n  /** Used to match template delimiters. */\n  var reEscape = /<%-([\\s\\S]+?)%>/g,\n      reEvaluate = /<%([\\s\\S]+?)%>/g,\n      reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n  /** Used to match property names within property paths. */\n  var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n      reIsPlainProp = /^\\w*$/,\n      rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n  /**\n   * Used to match `RegExp`\n   * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n   */\n  var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n      reHasRegExpChar = RegExp(reRegExpChar.source);\n\n  /** Used to match leading whitespace. */\n  var reTrimStart = /^\\s+/;\n\n  /** Used to match a single whitespace character. */\n  var reWhitespace = /\\s/;\n\n  /** Used to match wrap detail comments. */\n  var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n      reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n      reSplitDetails = /,? & /;\n\n  /** Used to match words composed of alphanumeric characters. */\n  var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n  /**\n   * Used to validate the `validate` option in `_.template` variable.\n   *\n   * Forbids characters which could potentially change the meaning of the function argument definition:\n   * - \"(),\" (modification of function parameters)\n   * - \"=\" (default value)\n   * - \"[]{}\" (destructuring of function parameters)\n   * - \"/\" (beginning of a comment)\n   * - whitespace\n   */\n  var reForbiddenIdentifierChars = /[()=,{}\\[\\]\\/\\s]/;\n\n  /** Used to match backslashes in property paths. */\n  var reEscapeChar = /\\\\(\\\\)?/g;\n\n  /**\n   * Used to match\n   * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n   */\n  var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n  /** Used to match `RegExp` flags from their coerced string values. */\n  var reFlags = /\\w*$/;\n\n  /** Used to detect bad signed hexadecimal string values. */\n  var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n  /** Used to detect binary string values. */\n  var reIsBinary = /^0b[01]+$/i;\n\n  /** Used to detect host constructors (Safari). */\n  var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n  /** Used to detect octal string values. */\n  var reIsOctal = /^0o[0-7]+$/i;\n\n  /** Used to detect unsigned integer values. */\n  var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n  /** Used to match Latin Unicode letters (excluding mathematical operators). */\n  var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n  /** Used to ensure capturing order of template delimiters. */\n  var reNoMatch = /($^)/;\n\n  /** Used to match unescaped characters in compiled string literals. */\n  var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n  /** Used to compose unicode character classes. */\n  var rsAstralRange = '\\\\ud800-\\\\udfff',\n      rsComboMarksRange = '\\\\u0300-\\\\u036f',\n      reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n      rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n      rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n      rsDingbatRange = '\\\\u2700-\\\\u27bf',\n      rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n      rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n      rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n      rsPunctuationRange = '\\\\u2000-\\\\u206f',\n      rsSpaceRange = ' \\\\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',\n      rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n      rsVarRange = '\\\\ufe0e\\\\ufe0f',\n      rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n  /** Used to compose unicode capture groups. */\n  var rsApos = \"['\\u2019]\",\n      rsAstral = '[' + rsAstralRange + ']',\n      rsBreak = '[' + rsBreakRange + ']',\n      rsCombo = '[' + rsComboRange + ']',\n      rsDigits = '\\\\d+',\n      rsDingbat = '[' + rsDingbatRange + ']',\n      rsLower = '[' + rsLowerRange + ']',\n      rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n      rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n      rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n      rsNonAstral = '[^' + rsAstralRange + ']',\n      rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n      rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n      rsUpper = '[' + rsUpperRange + ']',\n      rsZWJ = '\\\\u200d';\n\n  /** Used to compose unicode regexes. */\n  var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n      rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n      rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n      rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n      reOptMod = rsModifier + '?',\n      rsOptVar = '[' + rsVarRange + ']?',\n      rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n      rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n      rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n      rsSeq = rsOptVar + reOptMod + rsOptJoin,\n      rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n      rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n  /** Used to match apostrophes. */\n  var reApos = RegExp(rsApos, 'g');\n\n  /**\n   * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n   * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n   */\n  var reComboMark = RegExp(rsCombo, 'g');\n\n  /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n  var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n  /** Used to match complex or compound words. */\n  var reUnicodeWord = RegExp([\n    rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n    rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n    rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n    rsUpper + '+' + rsOptContrUpper,\n    rsOrdUpper,\n    rsOrdLower,\n    rsDigits,\n    rsEmoji\n  ].join('|'), 'g');\n\n  /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\n  var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboRange + rsVarRange + ']');\n\n  /** Used to detect strings that need a more robust regexp to match words. */\n  var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n  /** Used to assign default `context` object properties. */\n  var contextProps = [\n    'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',\n    'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',\n    'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',\n    'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\n    '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'\n  ];\n\n  /** Used to make template sourceURLs easier to identify. */\n  var templateCounter = -1;\n\n  /** Used to identify `toStringTag` values of typed arrays. */\n  var typedArrayTags = {};\n  typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n  typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n  typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n  typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n  typedArrayTags[uint32Tag] = true;\n  typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n  typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n  typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n  typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n  typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n  typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n  typedArrayTags[setTag] = typedArrayTags[stringTag] =\n  typedArrayTags[weakMapTag] = false;\n\n  /** Used to identify `toStringTag` values supported by `_.clone`. */\n  var cloneableTags = {};\n  cloneableTags[argsTag] = cloneableTags[arrayTag] =\n  cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\n  cloneableTags[boolTag] = cloneableTags[dateTag] =\n  cloneableTags[float32Tag] = cloneableTags[float64Tag] =\n  cloneableTags[int8Tag] = cloneableTags[int16Tag] =\n  cloneableTags[int32Tag] = cloneableTags[mapTag] =\n  cloneableTags[numberTag] = cloneableTags[objectTag] =\n  cloneableTags[regexpTag] = cloneableTags[setTag] =\n  cloneableTags[stringTag] = cloneableTags[symbolTag] =\n  cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n  cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n  cloneableTags[errorTag] = cloneableTags[funcTag] =\n  cloneableTags[weakMapTag] = false;\n\n  /** Used to map Latin Unicode letters to basic Latin letters. */\n  var deburredLetters = {\n    // Latin-1 Supplement block.\n    '\\xc0': 'A',  '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n    '\\xe0': 'a',  '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n    '\\xc7': 'C',  '\\xe7': 'c',\n    '\\xd0': 'D',  '\\xf0': 'd',\n    '\\xc8': 'E',  '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n    '\\xe8': 'e',  '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n    '\\xcc': 'I',  '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n    '\\xec': 'i',  '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n    '\\xd1': 'N',  '\\xf1': 'n',\n    '\\xd2': 'O',  '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n    '\\xf2': 'o',  '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n    '\\xd9': 'U',  '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n    '\\xf9': 'u',  '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n    '\\xdd': 'Y',  '\\xfd': 'y', '\\xff': 'y',\n    '\\xc6': 'Ae', '\\xe6': 'ae',\n    '\\xde': 'Th', '\\xfe': 'th',\n    '\\xdf': 'ss',\n    // Latin Extended-A block.\n    '\\u0100': 'A',  '\\u0102': 'A', '\\u0104': 'A',\n    '\\u0101': 'a',  '\\u0103': 'a', '\\u0105': 'a',\n    '\\u0106': 'C',  '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n    '\\u0107': 'c',  '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n    '\\u010e': 'D',  '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n    '\\u0112': 'E',  '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n    '\\u0113': 'e',  '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n    '\\u011c': 'G',  '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n    '\\u011d': 'g',  '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n    '\\u0124': 'H',  '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n    '\\u0128': 'I',  '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n    '\\u0129': 'i',  '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n    '\\u0134': 'J',  '\\u0135': 'j',\n    '\\u0136': 'K',  '\\u0137': 'k', '\\u0138': 'k',\n    '\\u0139': 'L',  '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n    '\\u013a': 'l',  '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n    '\\u0143': 'N',  '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n    '\\u0144': 'n',  '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n    '\\u014c': 'O',  '\\u014e': 'O', '\\u0150': 'O',\n    '\\u014d': 'o',  '\\u014f': 'o', '\\u0151': 'o',\n    '\\u0154': 'R',  '\\u0156': 'R', '\\u0158': 'R',\n    '\\u0155': 'r',  '\\u0157': 'r', '\\u0159': 'r',\n    '\\u015a': 'S',  '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n    '\\u015b': 's',  '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n    '\\u0162': 'T',  '\\u0164': 'T', '\\u0166': 'T',\n    '\\u0163': 't',  '\\u0165': 't', '\\u0167': 't',\n    '\\u0168': 'U',  '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n    '\\u0169': 'u',  '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n    '\\u0174': 'W',  '\\u0175': 'w',\n    '\\u0176': 'Y',  '\\u0177': 'y', '\\u0178': 'Y',\n    '\\u0179': 'Z',  '\\u017b': 'Z', '\\u017d': 'Z',\n    '\\u017a': 'z',  '\\u017c': 'z', '\\u017e': 'z',\n    '\\u0132': 'IJ', '\\u0133': 'ij',\n    '\\u0152': 'Oe', '\\u0153': 'oe',\n    '\\u0149': \"'n\", '\\u017f': 's'\n  };\n\n  /** Used to map characters to HTML entities. */\n  var htmlEscapes = {\n    '&': '&amp;',\n    '<': '&lt;',\n    '>': '&gt;',\n    '\"': '&quot;',\n    \"'\": '&#39;'\n  };\n\n  /** Used to map HTML entities to characters. */\n  var htmlUnescapes = {\n    '&amp;': '&',\n    '&lt;': '<',\n    '&gt;': '>',\n    '&quot;': '\"',\n    '&#39;': \"'\"\n  };\n\n  /** Used to escape characters for inclusion in compiled string literals. */\n  var stringEscapes = {\n    '\\\\': '\\\\',\n    \"'\": \"'\",\n    '\\n': 'n',\n    '\\r': 'r',\n    '\\u2028': 'u2028',\n    '\\u2029': 'u2029'\n  };\n\n  /** Built-in method references without a dependency on `root`. */\n  var freeParseFloat = parseFloat,\n      freeParseInt = parseInt;\n\n  /** Detect free variable `global` from Node.js. */\n  var freeGlobal = typeof __webpack_require__.g == 'object' && __webpack_require__.g && __webpack_require__.g.Object === Object && __webpack_require__.g;\n\n  /** Detect free variable `self`. */\n  var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n  /** Used as a reference to the global object. */\n  var root = freeGlobal || freeSelf || Function('return this')();\n\n  /** Detect free variable `exports`. */\n  var freeExports =  true && exports && !exports.nodeType && exports;\n\n  /** Detect free variable `module`. */\n  var freeModule = freeExports && \"object\" == 'object' && module && !module.nodeType && module;\n\n  /** Detect the popular CommonJS extension `module.exports`. */\n  var moduleExports = freeModule && freeModule.exports === freeExports;\n\n  /** Detect free variable `process` from Node.js. */\n  var freeProcess = moduleExports && freeGlobal.process;\n\n  /** Used to access faster Node.js helpers. */\n  var nodeUtil = (function() {\n    try {\n      // Use `util.types` for Node.js 10+.\n      var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n      if (types) {\n        return types;\n      }\n\n      // Legacy `process.binding('util')` for Node.js < 10.\n      return freeProcess && freeProcess.binding && freeProcess.binding('util');\n    } catch (e) {}\n  }());\n\n  /* Node.js helper references. */\n  var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n      nodeIsDate = nodeUtil && nodeUtil.isDate,\n      nodeIsMap = nodeUtil && nodeUtil.isMap,\n      nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n      nodeIsSet = nodeUtil && nodeUtil.isSet,\n      nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * A faster alternative to `Function#apply`, this function invokes `func`\n   * with the `this` binding of `thisArg` and the arguments of `args`.\n   *\n   * @private\n   * @param {Function} func The function to invoke.\n   * @param {*} thisArg The `this` binding of `func`.\n   * @param {Array} args The arguments to invoke `func` with.\n   * @returns {*} Returns the result of `func`.\n   */\n  function apply(func, thisArg, args) {\n    switch (args.length) {\n      case 0: return func.call(thisArg);\n      case 1: return func.call(thisArg, args[0]);\n      case 2: return func.call(thisArg, args[0], args[1]);\n      case 3: return func.call(thisArg, args[0], args[1], args[2]);\n    }\n    return func.apply(thisArg, args);\n  }\n\n  /**\n   * A specialized version of `baseAggregator` for arrays.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} setter The function to set `accumulator` values.\n   * @param {Function} iteratee The iteratee to transform keys.\n   * @param {Object} accumulator The initial aggregated object.\n   * @returns {Function} Returns `accumulator`.\n   */\n  function arrayAggregator(array, setter, iteratee, accumulator) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      var value = array[index];\n      setter(accumulator, value, iteratee(value), array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.forEach` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayEach(array, iteratee) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (iteratee(array[index], index, array) === false) {\n        break;\n      }\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.forEachRight` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayEachRight(array, iteratee) {\n    var length = array == null ? 0 : array.length;\n\n    while (length--) {\n      if (iteratee(array[length], length, array) === false) {\n        break;\n      }\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.every` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {boolean} Returns `true` if all elements pass the predicate check,\n   *  else `false`.\n   */\n  function arrayEvery(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (!predicate(array[index], index, array)) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  /**\n   * A specialized version of `_.filter` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {Array} Returns the new filtered array.\n   */\n  function arrayFilter(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length,\n        resIndex = 0,\n        result = [];\n\n    while (++index < length) {\n      var value = array[index];\n      if (predicate(value, index, array)) {\n        result[resIndex++] = value;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * A specialized version of `_.includes` for arrays without support for\n   * specifying an index to search from.\n   *\n   * @private\n   * @param {Array} [array] The array to inspect.\n   * @param {*} target The value to search for.\n   * @returns {boolean} Returns `true` if `target` is found, else `false`.\n   */\n  function arrayIncludes(array, value) {\n    var length = array == null ? 0 : array.length;\n    return !!length && baseIndexOf(array, value, 0) > -1;\n  }\n\n  /**\n   * This function is like `arrayIncludes` except that it accepts a comparator.\n   *\n   * @private\n   * @param {Array} [array] The array to inspect.\n   * @param {*} target The value to search for.\n   * @param {Function} comparator The comparator invoked per element.\n   * @returns {boolean} Returns `true` if `target` is found, else `false`.\n   */\n  function arrayIncludesWith(array, value, comparator) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (comparator(value, array[index])) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * A specialized version of `_.map` for arrays without support for iteratee\n   * shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns the new mapped array.\n   */\n  function arrayMap(array, iteratee) {\n    var index = -1,\n        length = array == null ? 0 : array.length,\n        result = Array(length);\n\n    while (++index < length) {\n      result[index] = iteratee(array[index], index, array);\n    }\n    return result;\n  }\n\n  /**\n   * Appends the elements of `values` to `array`.\n   *\n   * @private\n   * @param {Array} array The array to modify.\n   * @param {Array} values The values to append.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayPush(array, values) {\n    var index = -1,\n        length = values.length,\n        offset = array.length;\n\n    while (++index < length) {\n      array[offset + index] = values[index];\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.reduce` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} [accumulator] The initial value.\n   * @param {boolean} [initAccum] Specify using the first element of `array` as\n   *  the initial value.\n   * @returns {*} Returns the accumulated value.\n   */\n  function arrayReduce(array, iteratee, accumulator, initAccum) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    if (initAccum && length) {\n      accumulator = array[++index];\n    }\n    while (++index < length) {\n      accumulator = iteratee(accumulator, array[index], index, array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.reduceRight` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} [accumulator] The initial value.\n   * @param {boolean} [initAccum] Specify using the last element of `array` as\n   *  the initial value.\n   * @returns {*} Returns the accumulated value.\n   */\n  function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n    var length = array == null ? 0 : array.length;\n    if (initAccum && length) {\n      accumulator = array[--length];\n    }\n    while (length--) {\n      accumulator = iteratee(accumulator, array[length], length, array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.some` for arrays without support for iteratee\n   * shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {boolean} Returns `true` if any element passes the predicate check,\n   *  else `false`.\n   */\n  function arraySome(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (predicate(array[index], index, array)) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * Gets the size of an ASCII `string`.\n   *\n   * @private\n   * @param {string} string The string inspect.\n   * @returns {number} Returns the string size.\n   */\n  var asciiSize = baseProperty('length');\n\n  /**\n   * Converts an ASCII `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function asciiToArray(string) {\n    return string.split('');\n  }\n\n  /**\n   * Splits an ASCII `string` into an array of its words.\n   *\n   * @private\n   * @param {string} The string to inspect.\n   * @returns {Array} Returns the words of `string`.\n   */\n  function asciiWords(string) {\n    return string.match(reAsciiWord) || [];\n  }\n\n  /**\n   * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n   * without support for iteratee shorthands, which iterates over `collection`\n   * using `eachFunc`.\n   *\n   * @private\n   * @param {Array|Object} collection The collection to inspect.\n   * @param {Function} predicate The function invoked per iteration.\n   * @param {Function} eachFunc The function to iterate over `collection`.\n   * @returns {*} Returns the found element or its key, else `undefined`.\n   */\n  function baseFindKey(collection, predicate, eachFunc) {\n    var result;\n    eachFunc(collection, function(value, key, collection) {\n      if (predicate(value, key, collection)) {\n        result = key;\n        return false;\n      }\n    });\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.findIndex` and `_.findLastIndex` without\n   * support for iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {Function} predicate The function invoked per iteration.\n   * @param {number} fromIndex The index to search from.\n   * @param {boolean} [fromRight] Specify iterating from right to left.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseFindIndex(array, predicate, fromIndex, fromRight) {\n    var length = array.length,\n        index = fromIndex + (fromRight ? 1 : -1);\n\n    while ((fromRight ? index-- : ++index < length)) {\n      if (predicate(array[index], index, array)) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseIndexOf(array, value, fromIndex) {\n    return value === value\n      ? strictIndexOf(array, value, fromIndex)\n      : baseFindIndex(array, baseIsNaN, fromIndex);\n  }\n\n  /**\n   * This function is like `baseIndexOf` except that it accepts a comparator.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @param {Function} comparator The comparator invoked per element.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseIndexOfWith(array, value, fromIndex, comparator) {\n    var index = fromIndex - 1,\n        length = array.length;\n\n    while (++index < length) {\n      if (comparator(array[index], value)) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * The base implementation of `_.isNaN` without support for number objects.\n   *\n   * @private\n   * @param {*} value The value to check.\n   * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n   */\n  function baseIsNaN(value) {\n    return value !== value;\n  }\n\n  /**\n   * The base implementation of `_.mean` and `_.meanBy` without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {number} Returns the mean.\n   */\n  function baseMean(array, iteratee) {\n    var length = array == null ? 0 : array.length;\n    return length ? (baseSum(array, iteratee) / length) : NAN;\n  }\n\n  /**\n   * The base implementation of `_.property` without support for deep paths.\n   *\n   * @private\n   * @param {string} key The key of the property to get.\n   * @returns {Function} Returns the new accessor function.\n   */\n  function baseProperty(key) {\n    return function(object) {\n      return object == null ? undefined : object[key];\n    };\n  }\n\n  /**\n   * The base implementation of `_.propertyOf` without support for deep paths.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @returns {Function} Returns the new accessor function.\n   */\n  function basePropertyOf(object) {\n    return function(key) {\n      return object == null ? undefined : object[key];\n    };\n  }\n\n  /**\n   * The base implementation of `_.reduce` and `_.reduceRight`, without support\n   * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n   *\n   * @private\n   * @param {Array|Object} collection The collection to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} accumulator The initial value.\n   * @param {boolean} initAccum Specify using the first or last element of\n   *  `collection` as the initial value.\n   * @param {Function} eachFunc The function to iterate over `collection`.\n   * @returns {*} Returns the accumulated value.\n   */\n  function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n    eachFunc(collection, function(value, index, collection) {\n      accumulator = initAccum\n        ? (initAccum = false, value)\n        : iteratee(accumulator, value, index, collection);\n    });\n    return accumulator;\n  }\n\n  /**\n   * The base implementation of `_.sortBy` which uses `comparer` to define the\n   * sort order of `array` and replaces criteria objects with their corresponding\n   * values.\n   *\n   * @private\n   * @param {Array} array The array to sort.\n   * @param {Function} comparer The function to define sort order.\n   * @returns {Array} Returns `array`.\n   */\n  function baseSortBy(array, comparer) {\n    var length = array.length;\n\n    array.sort(comparer);\n    while (length--) {\n      array[length] = array[length].value;\n    }\n    return array;\n  }\n\n  /**\n   * The base implementation of `_.sum` and `_.sumBy` without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {number} Returns the sum.\n   */\n  function baseSum(array, iteratee) {\n    var result,\n        index = -1,\n        length = array.length;\n\n    while (++index < length) {\n      var current = iteratee(array[index]);\n      if (current !== undefined) {\n        result = result === undefined ? current : (result + current);\n      }\n    }\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.times` without support for iteratee shorthands\n   * or max array length checks.\n   *\n   * @private\n   * @param {number} n The number of times to invoke `iteratee`.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns the array of results.\n   */\n  function baseTimes(n, iteratee) {\n    var index = -1,\n        result = Array(n);\n\n    while (++index < n) {\n      result[index] = iteratee(index);\n    }\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n   * of key-value pairs for `object` corresponding to the property names of `props`.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @param {Array} props The property names to get values for.\n   * @returns {Object} Returns the key-value pairs.\n   */\n  function baseToPairs(object, props) {\n    return arrayMap(props, function(key) {\n      return [key, object[key]];\n    });\n  }\n\n  /**\n   * The base implementation of `_.trim`.\n   *\n   * @private\n   * @param {string} string The string to trim.\n   * @returns {string} Returns the trimmed string.\n   */\n  function baseTrim(string) {\n    return string\n      ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n      : string;\n  }\n\n  /**\n   * The base implementation of `_.unary` without support for storing metadata.\n   *\n   * @private\n   * @param {Function} func The function to cap arguments for.\n   * @returns {Function} Returns the new capped function.\n   */\n  function baseUnary(func) {\n    return function(value) {\n      return func(value);\n    };\n  }\n\n  /**\n   * The base implementation of `_.values` and `_.valuesIn` which creates an\n   * array of `object` property values corresponding to the property names\n   * of `props`.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @param {Array} props The property names to get values for.\n   * @returns {Object} Returns the array of property values.\n   */\n  function baseValues(object, props) {\n    return arrayMap(props, function(key) {\n      return object[key];\n    });\n  }\n\n  /**\n   * Checks if a `cache` value for `key` exists.\n   *\n   * @private\n   * @param {Object} cache The cache to query.\n   * @param {string} key The key of the entry to check.\n   * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n   */\n  function cacheHas(cache, key) {\n    return cache.has(key);\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n   * that is not found in the character symbols.\n   *\n   * @private\n   * @param {Array} strSymbols The string symbols to inspect.\n   * @param {Array} chrSymbols The character symbols to find.\n   * @returns {number} Returns the index of the first unmatched string symbol.\n   */\n  function charsStartIndex(strSymbols, chrSymbols) {\n    var index = -1,\n        length = strSymbols.length;\n\n    while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n    return index;\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n   * that is not found in the character symbols.\n   *\n   * @private\n   * @param {Array} strSymbols The string symbols to inspect.\n   * @param {Array} chrSymbols The character symbols to find.\n   * @returns {number} Returns the index of the last unmatched string symbol.\n   */\n  function charsEndIndex(strSymbols, chrSymbols) {\n    var index = strSymbols.length;\n\n    while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n    return index;\n  }\n\n  /**\n   * Gets the number of `placeholder` occurrences in `array`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} placeholder The placeholder to search for.\n   * @returns {number} Returns the placeholder count.\n   */\n  function countHolders(array, placeholder) {\n    var length = array.length,\n        result = 0;\n\n    while (length--) {\n      if (array[length] === placeholder) {\n        ++result;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n   * letters to basic Latin letters.\n   *\n   * @private\n   * @param {string} letter The matched letter to deburr.\n   * @returns {string} Returns the deburred letter.\n   */\n  var deburrLetter = basePropertyOf(deburredLetters);\n\n  /**\n   * Used by `_.escape` to convert characters to HTML entities.\n   *\n   * @private\n   * @param {string} chr The matched character to escape.\n   * @returns {string} Returns the escaped character.\n   */\n  var escapeHtmlChar = basePropertyOf(htmlEscapes);\n\n  /**\n   * Used by `_.template` to escape characters for inclusion in compiled string literals.\n   *\n   * @private\n   * @param {string} chr The matched character to escape.\n   * @returns {string} Returns the escaped character.\n   */\n  function escapeStringChar(chr) {\n    return '\\\\' + stringEscapes[chr];\n  }\n\n  /**\n   * Gets the value at `key` of `object`.\n   *\n   * @private\n   * @param {Object} [object] The object to query.\n   * @param {string} key The key of the property to get.\n   * @returns {*} Returns the property value.\n   */\n  function getValue(object, key) {\n    return object == null ? undefined : object[key];\n  }\n\n  /**\n   * Checks if `string` contains Unicode symbols.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n   */\n  function hasUnicode(string) {\n    return reHasUnicode.test(string);\n  }\n\n  /**\n   * Checks if `string` contains a word composed of Unicode symbols.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {boolean} Returns `true` if a word is found, else `false`.\n   */\n  function hasUnicodeWord(string) {\n    return reHasUnicodeWord.test(string);\n  }\n\n  /**\n   * Converts `iterator` to an array.\n   *\n   * @private\n   * @param {Object} iterator The iterator to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function iteratorToArray(iterator) {\n    var data,\n        result = [];\n\n    while (!(data = iterator.next()).done) {\n      result.push(data.value);\n    }\n    return result;\n  }\n\n  /**\n   * Converts `map` to its key-value pairs.\n   *\n   * @private\n   * @param {Object} map The map to convert.\n   * @returns {Array} Returns the key-value pairs.\n   */\n  function mapToArray(map) {\n    var index = -1,\n        result = Array(map.size);\n\n    map.forEach(function(value, key) {\n      result[++index] = [key, value];\n    });\n    return result;\n  }\n\n  /**\n   * Creates a unary function that invokes `func` with its argument transformed.\n   *\n   * @private\n   * @param {Function} func The function to wrap.\n   * @param {Function} transform The argument transform.\n   * @returns {Function} Returns the new function.\n   */\n  function overArg(func, transform) {\n    return function(arg) {\n      return func(transform(arg));\n    };\n  }\n\n  /**\n   * Replaces all `placeholder` elements in `array` with an internal placeholder\n   * and returns an array of their indexes.\n   *\n   * @private\n   * @param {Array} array The array to modify.\n   * @param {*} placeholder The placeholder to replace.\n   * @returns {Array} Returns the new array of placeholder indexes.\n   */\n  function replaceHolders(array, placeholder) {\n    var index = -1,\n        length = array.length,\n        resIndex = 0,\n        result = [];\n\n    while (++index < length) {\n      var value = array[index];\n      if (value === placeholder || value === PLACEHOLDER) {\n        array[index] = PLACEHOLDER;\n        result[resIndex++] = index;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Converts `set` to an array of its values.\n   *\n   * @private\n   * @param {Object} set The set to convert.\n   * @returns {Array} Returns the values.\n   */\n  function setToArray(set) {\n    var index = -1,\n        result = Array(set.size);\n\n    set.forEach(function(value) {\n      result[++index] = value;\n    });\n    return result;\n  }\n\n  /**\n   * Converts `set` to its value-value pairs.\n   *\n   * @private\n   * @param {Object} set The set to convert.\n   * @returns {Array} Returns the value-value pairs.\n   */\n  function setToPairs(set) {\n    var index = -1,\n        result = Array(set.size);\n\n    set.forEach(function(value) {\n      result[++index] = [value, value];\n    });\n    return result;\n  }\n\n  /**\n   * A specialized version of `_.indexOf` which performs strict equality\n   * comparisons of values, i.e. `===`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function strictIndexOf(array, value, fromIndex) {\n    var index = fromIndex - 1,\n        length = array.length;\n\n    while (++index < length) {\n      if (array[index] === value) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * A specialized version of `_.lastIndexOf` which performs strict equality\n   * comparisons of values, i.e. `===`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function strictLastIndexOf(array, value, fromIndex) {\n    var index = fromIndex + 1;\n    while (index--) {\n      if (array[index] === value) {\n        return index;\n      }\n    }\n    return index;\n  }\n\n  /**\n   * Gets the number of symbols in `string`.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {number} Returns the string size.\n   */\n  function stringSize(string) {\n    return hasUnicode(string)\n      ? unicodeSize(string)\n      : asciiSize(string);\n  }\n\n  /**\n   * Converts `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function stringToArray(string) {\n    return hasUnicode(string)\n      ? unicodeToArray(string)\n      : asciiToArray(string);\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n   * character of `string`.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {number} Returns the index of the last non-whitespace character.\n   */\n  function trimmedEndIndex(string) {\n    var index = string.length;\n\n    while (index-- && reWhitespace.test(string.charAt(index))) {}\n    return index;\n  }\n\n  /**\n   * Used by `_.unescape` to convert HTML entities to characters.\n   *\n   * @private\n   * @param {string} chr The matched character to unescape.\n   * @returns {string} Returns the unescaped character.\n   */\n  var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\n  /**\n   * Gets the size of a Unicode `string`.\n   *\n   * @private\n   * @param {string} string The string inspect.\n   * @returns {number} Returns the string size.\n   */\n  function unicodeSize(string) {\n    var result = reUnicode.lastIndex = 0;\n    while (reUnicode.test(string)) {\n      ++result;\n    }\n    return result;\n  }\n\n  /**\n   * Converts a Unicode `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function unicodeToArray(string) {\n    return string.match(reUnicode) || [];\n  }\n\n  /**\n   * Splits a Unicode `string` into an array of its words.\n   *\n   * @private\n   * @param {string} The string to inspect.\n   * @returns {Array} Returns the words of `string`.\n   */\n  function unicodeWords(string) {\n    return string.match(reUnicodeWord) || [];\n  }\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * Create a new pristine `lodash` function using the `context` object.\n   *\n   * @static\n   * @memberOf _\n   * @since 1.1.0\n   * @category Util\n   * @param {Object} [context=root] The context object.\n   * @returns {Function} Returns a new `lodash` function.\n   * @example\n   *\n   * _.mixin({ 'foo': _.constant('foo') });\n   *\n   * var lodash = _.runInContext();\n   * lodash.mixin({ 'bar': lodash.constant('bar') });\n   *\n   * _.isFunction(_.foo);\n   * // => true\n   * _.isFunction(_.bar);\n   * // => false\n   *\n   * lodash.isFunction(lodash.foo);\n   * // => false\n   * lodash.isFunction(lodash.bar);\n   * // => true\n   *\n   * // Create a suped-up `defer` in Node.js.\n   * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n   */\n  var runInContext = (function runInContext(context) {\n    context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\n\n    /** Built-in constructor references. */\n    var Array = context.Array,\n        Date = context.Date,\n        Error = context.Error,\n        Function = context.Function,\n        Math = context.Math,\n        Object = context.Object,\n        RegExp = context.RegExp,\n        String = context.String,\n        TypeError = context.TypeError;\n\n    /** Used for built-in method references. */\n    var arrayProto = Array.prototype,\n        funcProto = Function.prototype,\n        objectProto = Object.prototype;\n\n    /** Used to detect overreaching core-js shims. */\n    var coreJsData = context['__core-js_shared__'];\n\n    /** Used to resolve the decompiled source of functions. */\n    var funcToString = funcProto.toString;\n\n    /** Used to check objects for own properties. */\n    var hasOwnProperty = objectProto.hasOwnProperty;\n\n    /** Used to generate unique IDs. */\n    var idCounter = 0;\n\n    /** Used to detect methods masquerading as native. */\n    var maskSrcKey = (function() {\n      var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n      return uid ? ('Symbol(src)_1.' + uid) : '';\n    }());\n\n    /**\n     * Used to resolve the\n     * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n     * of values.\n     */\n    var nativeObjectToString = objectProto.toString;\n\n    /** Used to infer the `Object` constructor. */\n    var objectCtorString = funcToString.call(Object);\n\n    /** Used to restore the original `_` reference in `_.noConflict`. */\n    var oldDash = root._;\n\n    /** Used to detect if a method is native. */\n    var reIsNative = RegExp('^' +\n      funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n      .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n    );\n\n    /** Built-in value references. */\n    var Buffer = moduleExports ? context.Buffer : undefined,\n        Symbol = context.Symbol,\n        Uint8Array = context.Uint8Array,\n        allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n        getPrototype = overArg(Object.getPrototypeOf, Object),\n        objectCreate = Object.create,\n        propertyIsEnumerable = objectProto.propertyIsEnumerable,\n        splice = arrayProto.splice,\n        spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\n        symIterator = Symbol ? Symbol.iterator : undefined,\n        symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n    var defineProperty = (function() {\n      try {\n        var func = getNative(Object, 'defineProperty');\n        func({}, '', {});\n        return func;\n      } catch (e) {}\n    }());\n\n    /** Mocked built-ins. */\n    var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n        ctxNow = Date && Date.now !== root.Date.now && Date.now,\n        ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n\n    /* Built-in method references for those with the same name as other `lodash` methods. */\n    var nativeCeil = Math.ceil,\n        nativeFloor = Math.floor,\n        nativeGetSymbols = Object.getOwnPropertySymbols,\n        nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n        nativeIsFinite = context.isFinite,\n        nativeJoin = arrayProto.join,\n        nativeKeys = overArg(Object.keys, Object),\n        nativeMax = Math.max,\n        nativeMin = Math.min,\n        nativeNow = Date.now,\n        nativeParseInt = context.parseInt,\n        nativeRandom = Math.random,\n        nativeReverse = arrayProto.reverse;\n\n    /* Built-in method references that are verified to be native. */\n    var DataView = getNative(context, 'DataView'),\n        Map = getNative(context, 'Map'),\n        Promise = getNative(context, 'Promise'),\n        Set = getNative(context, 'Set'),\n        WeakMap = getNative(context, 'WeakMap'),\n        nativeCreate = getNative(Object, 'create');\n\n    /** Used to store function metadata. */\n    var metaMap = WeakMap && new WeakMap;\n\n    /** Used to lookup unminified function names. */\n    var realNames = {};\n\n    /** Used to detect maps, sets, and weakmaps. */\n    var dataViewCtorString = toSource(DataView),\n        mapCtorString = toSource(Map),\n        promiseCtorString = toSource(Promise),\n        setCtorString = toSource(Set),\n        weakMapCtorString = toSource(WeakMap);\n\n    /** Used to convert symbols to primitives and strings. */\n    var symbolProto = Symbol ? Symbol.prototype : undefined,\n        symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n        symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a `lodash` object which wraps `value` to enable implicit method\n     * chain sequences. Methods that operate on and return arrays, collections,\n     * and functions can be chained together. Methods that retrieve a single value\n     * or may return a primitive value will automatically end the chain sequence\n     * and return the unwrapped value. Otherwise, the value must be unwrapped\n     * with `_#value`.\n     *\n     * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n     * enabled using `_.chain`.\n     *\n     * The execution of chained methods is lazy, that is, it's deferred until\n     * `_#value` is implicitly or explicitly called.\n     *\n     * Lazy evaluation allows several methods to support shortcut fusion.\n     * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n     * the creation of intermediate arrays and can greatly reduce the number of\n     * iteratee executions. Sections of a chain sequence qualify for shortcut\n     * fusion if the section is applied to an array and iteratees accept only\n     * one argument. The heuristic for whether a section qualifies for shortcut\n     * fusion is subject to change.\n     *\n     * Chaining is supported in custom builds as long as the `_#value` method is\n     * directly or indirectly included in the build.\n     *\n     * In addition to lodash methods, wrappers have `Array` and `String` methods.\n     *\n     * The wrapper `Array` methods are:\n     * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n     *\n     * The wrapper `String` methods are:\n     * `replace` and `split`\n     *\n     * The wrapper methods that support shortcut fusion are:\n     * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n     * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n     * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n     *\n     * The chainable wrapper methods are:\n     * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n     * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n     * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n     * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n     * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n     * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n     * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n     * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n     * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n     * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n     * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n     * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n     * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n     * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n     * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n     * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n     * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n     * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n     * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n     * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n     * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n     * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n     * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n     * `zipObject`, `zipObjectDeep`, and `zipWith`\n     *\n     * The wrapper methods that are **not** chainable by default are:\n     * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n     * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n     * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n     * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n     * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n     * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n     * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n     * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n     * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n     * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n     * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n     * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n     * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n     * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n     * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n     * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n     * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n     * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n     * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n     * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n     * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n     * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n     * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n     * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n     * `upperFirst`, `value`, and `words`\n     *\n     * @name _\n     * @constructor\n     * @category Seq\n     * @param {*} value The value to wrap in a `lodash` instance.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var wrapped = _([1, 2, 3]);\n     *\n     * // Returns an unwrapped value.\n     * wrapped.reduce(_.add);\n     * // => 6\n     *\n     * // Returns a wrapped value.\n     * var squares = wrapped.map(square);\n     *\n     * _.isArray(squares);\n     * // => false\n     *\n     * _.isArray(squares.value());\n     * // => true\n     */\n    function lodash(value) {\n      if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n        if (value instanceof LodashWrapper) {\n          return value;\n        }\n        if (hasOwnProperty.call(value, '__wrapped__')) {\n          return wrapperClone(value);\n        }\n      }\n      return new LodashWrapper(value);\n    }\n\n    /**\n     * The base implementation of `_.create` without support for assigning\n     * properties to the created object.\n     *\n     * @private\n     * @param {Object} proto The object to inherit from.\n     * @returns {Object} Returns the new object.\n     */\n    var baseCreate = (function() {\n      function object() {}\n      return function(proto) {\n        if (!isObject(proto)) {\n          return {};\n        }\n        if (objectCreate) {\n          return objectCreate(proto);\n        }\n        object.prototype = proto;\n        var result = new object;\n        object.prototype = undefined;\n        return result;\n      };\n    }());\n\n    /**\n     * The function whose prototype chain sequence wrappers inherit from.\n     *\n     * @private\n     */\n    function baseLodash() {\n      // No operation performed.\n    }\n\n    /**\n     * The base constructor for creating `lodash` wrapper objects.\n     *\n     * @private\n     * @param {*} value The value to wrap.\n     * @param {boolean} [chainAll] Enable explicit method chain sequences.\n     */\n    function LodashWrapper(value, chainAll) {\n      this.__wrapped__ = value;\n      this.__actions__ = [];\n      this.__chain__ = !!chainAll;\n      this.__index__ = 0;\n      this.__values__ = undefined;\n    }\n\n    /**\n     * By default, the template delimiters used by lodash are like those in\n     * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n     * following template settings to use alternative delimiters.\n     *\n     * @static\n     * @memberOf _\n     * @type {Object}\n     */\n    lodash.templateSettings = {\n\n      /**\n       * Used to detect `data` property values to be HTML-escaped.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'escape': reEscape,\n\n      /**\n       * Used to detect code to be evaluated.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'evaluate': reEvaluate,\n\n      /**\n       * Used to detect `data` property values to inject.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'interpolate': reInterpolate,\n\n      /**\n       * Used to reference the data object in the template text.\n       *\n       * @memberOf _.templateSettings\n       * @type {string}\n       */\n      'variable': '',\n\n      /**\n       * Used to import variables into the compiled template.\n       *\n       * @memberOf _.templateSettings\n       * @type {Object}\n       */\n      'imports': {\n\n        /**\n         * A reference to the `lodash` function.\n         *\n         * @memberOf _.templateSettings.imports\n         * @type {Function}\n         */\n        '_': lodash\n      }\n    };\n\n    // Ensure wrappers are instances of `baseLodash`.\n    lodash.prototype = baseLodash.prototype;\n    lodash.prototype.constructor = lodash;\n\n    LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n    LodashWrapper.prototype.constructor = LodashWrapper;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n     *\n     * @private\n     * @constructor\n     * @param {*} value The value to wrap.\n     */\n    function LazyWrapper(value) {\n      this.__wrapped__ = value;\n      this.__actions__ = [];\n      this.__dir__ = 1;\n      this.__filtered__ = false;\n      this.__iteratees__ = [];\n      this.__takeCount__ = MAX_ARRAY_LENGTH;\n      this.__views__ = [];\n    }\n\n    /**\n     * Creates a clone of the lazy wrapper object.\n     *\n     * @private\n     * @name clone\n     * @memberOf LazyWrapper\n     * @returns {Object} Returns the cloned `LazyWrapper` object.\n     */\n    function lazyClone() {\n      var result = new LazyWrapper(this.__wrapped__);\n      result.__actions__ = copyArray(this.__actions__);\n      result.__dir__ = this.__dir__;\n      result.__filtered__ = this.__filtered__;\n      result.__iteratees__ = copyArray(this.__iteratees__);\n      result.__takeCount__ = this.__takeCount__;\n      result.__views__ = copyArray(this.__views__);\n      return result;\n    }\n\n    /**\n     * Reverses the direction of lazy iteration.\n     *\n     * @private\n     * @name reverse\n     * @memberOf LazyWrapper\n     * @returns {Object} Returns the new reversed `LazyWrapper` object.\n     */\n    function lazyReverse() {\n      if (this.__filtered__) {\n        var result = new LazyWrapper(this);\n        result.__dir__ = -1;\n        result.__filtered__ = true;\n      } else {\n        result = this.clone();\n        result.__dir__ *= -1;\n      }\n      return result;\n    }\n\n    /**\n     * Extracts the unwrapped value from its lazy wrapper.\n     *\n     * @private\n     * @name value\n     * @memberOf LazyWrapper\n     * @returns {*} Returns the unwrapped value.\n     */\n    function lazyValue() {\n      var array = this.__wrapped__.value(),\n          dir = this.__dir__,\n          isArr = isArray(array),\n          isRight = dir < 0,\n          arrLength = isArr ? array.length : 0,\n          view = getView(0, arrLength, this.__views__),\n          start = view.start,\n          end = view.end,\n          length = end - start,\n          index = isRight ? end : (start - 1),\n          iteratees = this.__iteratees__,\n          iterLength = iteratees.length,\n          resIndex = 0,\n          takeCount = nativeMin(length, this.__takeCount__);\n\n      if (!isArr || (!isRight && arrLength == length && takeCount == length)) {\n        return baseWrapperValue(array, this.__actions__);\n      }\n      var result = [];\n\n      outer:\n      while (length-- && resIndex < takeCount) {\n        index += dir;\n\n        var iterIndex = -1,\n            value = array[index];\n\n        while (++iterIndex < iterLength) {\n          var data = iteratees[iterIndex],\n              iteratee = data.iteratee,\n              type = data.type,\n              computed = iteratee(value);\n\n          if (type == LAZY_MAP_FLAG) {\n            value = computed;\n          } else if (!computed) {\n            if (type == LAZY_FILTER_FLAG) {\n              continue outer;\n            } else {\n              break outer;\n            }\n          }\n        }\n        result[resIndex++] = value;\n      }\n      return result;\n    }\n\n    // Ensure `LazyWrapper` is an instance of `baseLodash`.\n    LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n    LazyWrapper.prototype.constructor = LazyWrapper;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a hash object.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function Hash(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the hash.\n     *\n     * @private\n     * @name clear\n     * @memberOf Hash\n     */\n    function hashClear() {\n      this.__data__ = nativeCreate ? nativeCreate(null) : {};\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the hash.\n     *\n     * @private\n     * @name delete\n     * @memberOf Hash\n     * @param {Object} hash The hash to modify.\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function hashDelete(key) {\n      var result = this.has(key) && delete this.__data__[key];\n      this.size -= result ? 1 : 0;\n      return result;\n    }\n\n    /**\n     * Gets the hash value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf Hash\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function hashGet(key) {\n      var data = this.__data__;\n      if (nativeCreate) {\n        var result = data[key];\n        return result === HASH_UNDEFINED ? undefined : result;\n      }\n      return hasOwnProperty.call(data, key) ? data[key] : undefined;\n    }\n\n    /**\n     * Checks if a hash value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf Hash\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function hashHas(key) {\n      var data = this.__data__;\n      return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n    }\n\n    /**\n     * Sets the hash `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf Hash\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the hash instance.\n     */\n    function hashSet(key, value) {\n      var data = this.__data__;\n      this.size += this.has(key) ? 0 : 1;\n      data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n      return this;\n    }\n\n    // Add methods to `Hash`.\n    Hash.prototype.clear = hashClear;\n    Hash.prototype['delete'] = hashDelete;\n    Hash.prototype.get = hashGet;\n    Hash.prototype.has = hashHas;\n    Hash.prototype.set = hashSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an list cache object.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function ListCache(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the list cache.\n     *\n     * @private\n     * @name clear\n     * @memberOf ListCache\n     */\n    function listCacheClear() {\n      this.__data__ = [];\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the list cache.\n     *\n     * @private\n     * @name delete\n     * @memberOf ListCache\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function listCacheDelete(key) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      if (index < 0) {\n        return false;\n      }\n      var lastIndex = data.length - 1;\n      if (index == lastIndex) {\n        data.pop();\n      } else {\n        splice.call(data, index, 1);\n      }\n      --this.size;\n      return true;\n    }\n\n    /**\n     * Gets the list cache value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf ListCache\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function listCacheGet(key) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      return index < 0 ? undefined : data[index][1];\n    }\n\n    /**\n     * Checks if a list cache value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf ListCache\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function listCacheHas(key) {\n      return assocIndexOf(this.__data__, key) > -1;\n    }\n\n    /**\n     * Sets the list cache `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf ListCache\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the list cache instance.\n     */\n    function listCacheSet(key, value) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      if (index < 0) {\n        ++this.size;\n        data.push([key, value]);\n      } else {\n        data[index][1] = value;\n      }\n      return this;\n    }\n\n    // Add methods to `ListCache`.\n    ListCache.prototype.clear = listCacheClear;\n    ListCache.prototype['delete'] = listCacheDelete;\n    ListCache.prototype.get = listCacheGet;\n    ListCache.prototype.has = listCacheHas;\n    ListCache.prototype.set = listCacheSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a map cache object to store key-value pairs.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function MapCache(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the map.\n     *\n     * @private\n     * @name clear\n     * @memberOf MapCache\n     */\n    function mapCacheClear() {\n      this.size = 0;\n      this.__data__ = {\n        'hash': new Hash,\n        'map': new (Map || ListCache),\n        'string': new Hash\n      };\n    }\n\n    /**\n     * Removes `key` and its value from the map.\n     *\n     * @private\n     * @name delete\n     * @memberOf MapCache\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function mapCacheDelete(key) {\n      var result = getMapData(this, key)['delete'](key);\n      this.size -= result ? 1 : 0;\n      return result;\n    }\n\n    /**\n     * Gets the map value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf MapCache\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function mapCacheGet(key) {\n      return getMapData(this, key).get(key);\n    }\n\n    /**\n     * Checks if a map value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf MapCache\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function mapCacheHas(key) {\n      return getMapData(this, key).has(key);\n    }\n\n    /**\n     * Sets the map `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf MapCache\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the map cache instance.\n     */\n    function mapCacheSet(key, value) {\n      var data = getMapData(this, key),\n          size = data.size;\n\n      data.set(key, value);\n      this.size += data.size == size ? 0 : 1;\n      return this;\n    }\n\n    // Add methods to `MapCache`.\n    MapCache.prototype.clear = mapCacheClear;\n    MapCache.prototype['delete'] = mapCacheDelete;\n    MapCache.prototype.get = mapCacheGet;\n    MapCache.prototype.has = mapCacheHas;\n    MapCache.prototype.set = mapCacheSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     *\n     * Creates an array cache object to store unique values.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [values] The values to cache.\n     */\n    function SetCache(values) {\n      var index = -1,\n          length = values == null ? 0 : values.length;\n\n      this.__data__ = new MapCache;\n      while (++index < length) {\n        this.add(values[index]);\n      }\n    }\n\n    /**\n     * Adds `value` to the array cache.\n     *\n     * @private\n     * @name add\n     * @memberOf SetCache\n     * @alias push\n     * @param {*} value The value to cache.\n     * @returns {Object} Returns the cache instance.\n     */\n    function setCacheAdd(value) {\n      this.__data__.set(value, HASH_UNDEFINED);\n      return this;\n    }\n\n    /**\n     * Checks if `value` is in the array cache.\n     *\n     * @private\n     * @name has\n     * @memberOf SetCache\n     * @param {*} value The value to search for.\n     * @returns {number} Returns `true` if `value` is found, else `false`.\n     */\n    function setCacheHas(value) {\n      return this.__data__.has(value);\n    }\n\n    // Add methods to `SetCache`.\n    SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n    SetCache.prototype.has = setCacheHas;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a stack cache object to store key-value pairs.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function Stack(entries) {\n      var data = this.__data__ = new ListCache(entries);\n      this.size = data.size;\n    }\n\n    /**\n     * Removes all key-value entries from the stack.\n     *\n     * @private\n     * @name clear\n     * @memberOf Stack\n     */\n    function stackClear() {\n      this.__data__ = new ListCache;\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the stack.\n     *\n     * @private\n     * @name delete\n     * @memberOf Stack\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function stackDelete(key) {\n      var data = this.__data__,\n          result = data['delete'](key);\n\n      this.size = data.size;\n      return result;\n    }\n\n    /**\n     * Gets the stack value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf Stack\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function stackGet(key) {\n      return this.__data__.get(key);\n    }\n\n    /**\n     * Checks if a stack value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf Stack\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function stackHas(key) {\n      return this.__data__.has(key);\n    }\n\n    /**\n     * Sets the stack `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf Stack\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the stack cache instance.\n     */\n    function stackSet(key, value) {\n      var data = this.__data__;\n      if (data instanceof ListCache) {\n        var pairs = data.__data__;\n        if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n          pairs.push([key, value]);\n          this.size = ++data.size;\n          return this;\n        }\n        data = this.__data__ = new MapCache(pairs);\n      }\n      data.set(key, value);\n      this.size = data.size;\n      return this;\n    }\n\n    // Add methods to `Stack`.\n    Stack.prototype.clear = stackClear;\n    Stack.prototype['delete'] = stackDelete;\n    Stack.prototype.get = stackGet;\n    Stack.prototype.has = stackHas;\n    Stack.prototype.set = stackSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an array of the enumerable property names of the array-like `value`.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @param {boolean} inherited Specify returning inherited property names.\n     * @returns {Array} Returns the array of property names.\n     */\n    function arrayLikeKeys(value, inherited) {\n      var isArr = isArray(value),\n          isArg = !isArr && isArguments(value),\n          isBuff = !isArr && !isArg && isBuffer(value),\n          isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n          skipIndexes = isArr || isArg || isBuff || isType,\n          result = skipIndexes ? baseTimes(value.length, String) : [],\n          length = result.length;\n\n      for (var key in value) {\n        if ((inherited || hasOwnProperty.call(value, key)) &&\n            !(skipIndexes && (\n               // Safari 9 has enumerable `arguments.length` in strict mode.\n               key == 'length' ||\n               // Node.js 0.10 has enumerable non-index properties on buffers.\n               (isBuff && (key == 'offset' || key == 'parent')) ||\n               // PhantomJS 2 has enumerable non-index properties on typed arrays.\n               (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n               // Skip index properties.\n               isIndex(key, length)\n            ))) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * A specialized version of `_.sample` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to sample.\n     * @returns {*} Returns the random element.\n     */\n    function arraySample(array) {\n      var length = array.length;\n      return length ? array[baseRandom(0, length - 1)] : undefined;\n    }\n\n    /**\n     * A specialized version of `_.sampleSize` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to sample.\n     * @param {number} n The number of elements to sample.\n     * @returns {Array} Returns the random elements.\n     */\n    function arraySampleSize(array, n) {\n      return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n    }\n\n    /**\n     * A specialized version of `_.shuffle` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     */\n    function arrayShuffle(array) {\n      return shuffleSelf(copyArray(array));\n    }\n\n    /**\n     * This function is like `assignValue` except that it doesn't assign\n     * `undefined` values.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function assignMergeValue(object, key, value) {\n      if ((value !== undefined && !eq(object[key], value)) ||\n          (value === undefined && !(key in object))) {\n        baseAssignValue(object, key, value);\n      }\n    }\n\n    /**\n     * Assigns `value` to `key` of `object` if the existing value is not equivalent\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function assignValue(object, key, value) {\n      var objValue = object[key];\n      if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n          (value === undefined && !(key in object))) {\n        baseAssignValue(object, key, value);\n      }\n    }\n\n    /**\n     * Gets the index at which the `key` is found in `array` of key-value pairs.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {*} key The key to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     */\n    function assocIndexOf(array, key) {\n      var length = array.length;\n      while (length--) {\n        if (eq(array[length][0], key)) {\n          return length;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * Aggregates elements of `collection` on `accumulator` with keys transformed\n     * by `iteratee` and values set by `setter`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} setter The function to set `accumulator` values.\n     * @param {Function} iteratee The iteratee to transform keys.\n     * @param {Object} accumulator The initial aggregated object.\n     * @returns {Function} Returns `accumulator`.\n     */\n    function baseAggregator(collection, setter, iteratee, accumulator) {\n      baseEach(collection, function(value, key, collection) {\n        setter(accumulator, value, iteratee(value), collection);\n      });\n      return accumulator;\n    }\n\n    /**\n     * The base implementation of `_.assign` without support for multiple sources\n     * or `customizer` functions.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @returns {Object} Returns `object`.\n     */\n    function baseAssign(object, source) {\n      return object && copyObject(source, keys(source), object);\n    }\n\n    /**\n     * The base implementation of `_.assignIn` without support for multiple sources\n     * or `customizer` functions.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @returns {Object} Returns `object`.\n     */\n    function baseAssignIn(object, source) {\n      return object && copyObject(source, keysIn(source), object);\n    }\n\n    /**\n     * The base implementation of `assignValue` and `assignMergeValue` without\n     * value checks.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function baseAssignValue(object, key, value) {\n      if (key == '__proto__' && defineProperty) {\n        defineProperty(object, key, {\n          'configurable': true,\n          'enumerable': true,\n          'value': value,\n          'writable': true\n        });\n      } else {\n        object[key] = value;\n      }\n    }\n\n    /**\n     * The base implementation of `_.at` without support for individual paths.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {string[]} paths The property paths to pick.\n     * @returns {Array} Returns the picked elements.\n     */\n    function baseAt(object, paths) {\n      var index = -1,\n          length = paths.length,\n          result = Array(length),\n          skip = object == null;\n\n      while (++index < length) {\n        result[index] = skip ? undefined : get(object, paths[index]);\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.clamp` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {number} number The number to clamp.\n     * @param {number} [lower] The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the clamped number.\n     */\n    function baseClamp(number, lower, upper) {\n      if (number === number) {\n        if (upper !== undefined) {\n          number = number <= upper ? number : upper;\n        }\n        if (lower !== undefined) {\n          number = number >= lower ? number : lower;\n        }\n      }\n      return number;\n    }\n\n    /**\n     * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n     * traversed objects.\n     *\n     * @private\n     * @param {*} value The value to clone.\n     * @param {boolean} bitmask The bitmask flags.\n     *  1 - Deep clone\n     *  2 - Flatten inherited properties\n     *  4 - Clone symbols\n     * @param {Function} [customizer] The function to customize cloning.\n     * @param {string} [key] The key of `value`.\n     * @param {Object} [object] The parent object of `value`.\n     * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n     * @returns {*} Returns the cloned value.\n     */\n    function baseClone(value, bitmask, customizer, key, object, stack) {\n      var result,\n          isDeep = bitmask & CLONE_DEEP_FLAG,\n          isFlat = bitmask & CLONE_FLAT_FLAG,\n          isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n      if (customizer) {\n        result = object ? customizer(value, key, object, stack) : customizer(value);\n      }\n      if (result !== undefined) {\n        return result;\n      }\n      if (!isObject(value)) {\n        return value;\n      }\n      var isArr = isArray(value);\n      if (isArr) {\n        result = initCloneArray(value);\n        if (!isDeep) {\n          return copyArray(value, result);\n        }\n      } else {\n        var tag = getTag(value),\n            isFunc = tag == funcTag || tag == genTag;\n\n        if (isBuffer(value)) {\n          return cloneBuffer(value, isDeep);\n        }\n        if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n          result = (isFlat || isFunc) ? {} : initCloneObject(value);\n          if (!isDeep) {\n            return isFlat\n              ? copySymbolsIn(value, baseAssignIn(result, value))\n              : copySymbols(value, baseAssign(result, value));\n          }\n        } else {\n          if (!cloneableTags[tag]) {\n            return object ? value : {};\n          }\n          result = initCloneByTag(value, tag, isDeep);\n        }\n      }\n      // Check for circular references and return its corresponding clone.\n      stack || (stack = new Stack);\n      var stacked = stack.get(value);\n      if (stacked) {\n        return stacked;\n      }\n      stack.set(value, result);\n\n      if (isSet(value)) {\n        value.forEach(function(subValue) {\n          result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n        });\n      } else if (isMap(value)) {\n        value.forEach(function(subValue, key) {\n          result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n        });\n      }\n\n      var keysFunc = isFull\n        ? (isFlat ? getAllKeysIn : getAllKeys)\n        : (isFlat ? keysIn : keys);\n\n      var props = isArr ? undefined : keysFunc(value);\n      arrayEach(props || value, function(subValue, key) {\n        if (props) {\n          key = subValue;\n          subValue = value[key];\n        }\n        // Recursively populate clone (susceptible to call stack limits).\n        assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.conforms` which doesn't clone `source`.\n     *\n     * @private\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseConforms(source) {\n      var props = keys(source);\n      return function(object) {\n        return baseConformsTo(object, source, props);\n      };\n    }\n\n    /**\n     * The base implementation of `_.conformsTo` which accepts `props` to check.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n     */\n    function baseConformsTo(object, source, props) {\n      var length = props.length;\n      if (object == null) {\n        return !length;\n      }\n      object = Object(object);\n      while (length--) {\n        var key = props[length],\n            predicate = source[key],\n            value = object[key];\n\n        if ((value === undefined && !(key in object)) || !predicate(value)) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    /**\n     * The base implementation of `_.delay` and `_.defer` which accepts `args`\n     * to provide to `func`.\n     *\n     * @private\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @param {Array} args The arguments to provide to `func`.\n     * @returns {number|Object} Returns the timer id or timeout object.\n     */\n    function baseDelay(func, wait, args) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      return setTimeout(function() { func.apply(undefined, args); }, wait);\n    }\n\n    /**\n     * The base implementation of methods like `_.difference` without support\n     * for excluding multiple arrays or iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Array} values The values to exclude.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     */\n    function baseDifference(array, values, iteratee, comparator) {\n      var index = -1,\n          includes = arrayIncludes,\n          isCommon = true,\n          length = array.length,\n          result = [],\n          valuesLength = values.length;\n\n      if (!length) {\n        return result;\n      }\n      if (iteratee) {\n        values = arrayMap(values, baseUnary(iteratee));\n      }\n      if (comparator) {\n        includes = arrayIncludesWith;\n        isCommon = false;\n      }\n      else if (values.length >= LARGE_ARRAY_SIZE) {\n        includes = cacheHas;\n        isCommon = false;\n        values = new SetCache(values);\n      }\n      outer:\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee == null ? value : iteratee(value);\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (isCommon && computed === computed) {\n          var valuesIndex = valuesLength;\n          while (valuesIndex--) {\n            if (values[valuesIndex] === computed) {\n              continue outer;\n            }\n          }\n          result.push(value);\n        }\n        else if (!includes(values, computed, comparator)) {\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.forEach` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     */\n    var baseEach = createBaseEach(baseForOwn);\n\n    /**\n     * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     */\n    var baseEachRight = createBaseEach(baseForOwnRight, true);\n\n    /**\n     * The base implementation of `_.every` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\n     *  else `false`\n     */\n    function baseEvery(collection, predicate) {\n      var result = true;\n      baseEach(collection, function(value, index, collection) {\n        result = !!predicate(value, index, collection);\n        return result;\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of methods like `_.max` and `_.min` which accepts a\n     * `comparator` to determine the extremum value.\n     *\n     * @private\n     * @param {Array} array The array to iterate over.\n     * @param {Function} iteratee The iteratee invoked per iteration.\n     * @param {Function} comparator The comparator used to compare values.\n     * @returns {*} Returns the extremum value.\n     */\n    function baseExtremum(array, iteratee, comparator) {\n      var index = -1,\n          length = array.length;\n\n      while (++index < length) {\n        var value = array[index],\n            current = iteratee(value);\n\n        if (current != null && (computed === undefined\n              ? (current === current && !isSymbol(current))\n              : comparator(current, computed)\n            )) {\n          var computed = current,\n              result = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.fill` without an iteratee call guard.\n     *\n     * @private\n     * @param {Array} array The array to fill.\n     * @param {*} value The value to fill `array` with.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns `array`.\n     */\n    function baseFill(array, value, start, end) {\n      var length = array.length;\n\n      start = toInteger(start);\n      if (start < 0) {\n        start = -start > length ? 0 : (length + start);\n      }\n      end = (end === undefined || end > length) ? length : toInteger(end);\n      if (end < 0) {\n        end += length;\n      }\n      end = start > end ? 0 : toLength(end);\n      while (start < end) {\n        array[start++] = value;\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.filter` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     */\n    function baseFilter(collection, predicate) {\n      var result = [];\n      baseEach(collection, function(value, index, collection) {\n        if (predicate(value, index, collection)) {\n          result.push(value);\n        }\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.flatten` with support for restricting flattening.\n     *\n     * @private\n     * @param {Array} array The array to flatten.\n     * @param {number} depth The maximum recursion depth.\n     * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n     * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n     * @param {Array} [result=[]] The initial result value.\n     * @returns {Array} Returns the new flattened array.\n     */\n    function baseFlatten(array, depth, predicate, isStrict, result) {\n      var index = -1,\n          length = array.length;\n\n      predicate || (predicate = isFlattenable);\n      result || (result = []);\n\n      while (++index < length) {\n        var value = array[index];\n        if (depth > 0 && predicate(value)) {\n          if (depth > 1) {\n            // Recursively flatten arrays (susceptible to call stack limits).\n            baseFlatten(value, depth - 1, predicate, isStrict, result);\n          } else {\n            arrayPush(result, value);\n          }\n        } else if (!isStrict) {\n          result[result.length] = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `baseForOwn` which iterates over `object`\n     * properties returned by `keysFunc` and invokes `iteratee` for each property.\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @returns {Object} Returns `object`.\n     */\n    var baseFor = createBaseFor();\n\n    /**\n     * This function is like `baseFor` except that it iterates over properties\n     * in the opposite order.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @returns {Object} Returns `object`.\n     */\n    var baseForRight = createBaseFor(true);\n\n    /**\n     * The base implementation of `_.forOwn` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     */\n    function baseForOwn(object, iteratee) {\n      return object && baseFor(object, iteratee, keys);\n    }\n\n    /**\n     * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     */\n    function baseForOwnRight(object, iteratee) {\n      return object && baseForRight(object, iteratee, keys);\n    }\n\n    /**\n     * The base implementation of `_.functions` which creates an array of\n     * `object` function property names filtered from `props`.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Array} props The property names to filter.\n     * @returns {Array} Returns the function names.\n     */\n    function baseFunctions(object, props) {\n      return arrayFilter(props, function(key) {\n        return isFunction(object[key]);\n      });\n    }\n\n    /**\n     * The base implementation of `_.get` without support for default values.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to get.\n     * @returns {*} Returns the resolved value.\n     */\n    function baseGet(object, path) {\n      path = castPath(path, object);\n\n      var index = 0,\n          length = path.length;\n\n      while (object != null && index < length) {\n        object = object[toKey(path[index++])];\n      }\n      return (index && index == length) ? object : undefined;\n    }\n\n    /**\n     * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n     * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n     * symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @param {Function} symbolsFunc The function to get the symbols of `object`.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n      var result = keysFunc(object);\n      return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n    }\n\n    /**\n     * The base implementation of `getTag` without fallbacks for buggy environments.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the `toStringTag`.\n     */\n    function baseGetTag(value) {\n      if (value == null) {\n        return value === undefined ? undefinedTag : nullTag;\n      }\n      return (symToStringTag && symToStringTag in Object(value))\n        ? getRawTag(value)\n        : objectToString(value);\n    }\n\n    /**\n     * The base implementation of `_.gt` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than `other`,\n     *  else `false`.\n     */\n    function baseGt(value, other) {\n      return value > other;\n    }\n\n    /**\n     * The base implementation of `_.has` without support for deep paths.\n     *\n     * @private\n     * @param {Object} [object] The object to query.\n     * @param {Array|string} key The key to check.\n     * @returns {boolean} Returns `true` if `key` exists, else `false`.\n     */\n    function baseHas(object, key) {\n      return object != null && hasOwnProperty.call(object, key);\n    }\n\n    /**\n     * The base implementation of `_.hasIn` without support for deep paths.\n     *\n     * @private\n     * @param {Object} [object] The object to query.\n     * @param {Array|string} key The key to check.\n     * @returns {boolean} Returns `true` if `key` exists, else `false`.\n     */\n    function baseHasIn(object, key) {\n      return object != null && key in Object(object);\n    }\n\n    /**\n     * The base implementation of `_.inRange` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {number} number The number to check.\n     * @param {number} start The start of the range.\n     * @param {number} end The end of the range.\n     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n     */\n    function baseInRange(number, start, end) {\n      return number >= nativeMin(start, end) && number < nativeMax(start, end);\n    }\n\n    /**\n     * The base implementation of methods like `_.intersection`, without support\n     * for iteratee shorthands, that accepts an array of arrays to inspect.\n     *\n     * @private\n     * @param {Array} arrays The arrays to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of shared values.\n     */\n    function baseIntersection(arrays, iteratee, comparator) {\n      var includes = comparator ? arrayIncludesWith : arrayIncludes,\n          length = arrays[0].length,\n          othLength = arrays.length,\n          othIndex = othLength,\n          caches = Array(othLength),\n          maxLength = Infinity,\n          result = [];\n\n      while (othIndex--) {\n        var array = arrays[othIndex];\n        if (othIndex && iteratee) {\n          array = arrayMap(array, baseUnary(iteratee));\n        }\n        maxLength = nativeMin(array.length, maxLength);\n        caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n          ? new SetCache(othIndex && array)\n          : undefined;\n      }\n      array = arrays[0];\n\n      var index = -1,\n          seen = caches[0];\n\n      outer:\n      while (++index < length && result.length < maxLength) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (!(seen\n              ? cacheHas(seen, computed)\n              : includes(result, computed, comparator)\n            )) {\n          othIndex = othLength;\n          while (--othIndex) {\n            var cache = caches[othIndex];\n            if (!(cache\n                  ? cacheHas(cache, computed)\n                  : includes(arrays[othIndex], computed, comparator))\n                ) {\n              continue outer;\n            }\n          }\n          if (seen) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.invert` and `_.invertBy` which inverts\n     * `object` with values transformed by `iteratee` and set by `setter`.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} setter The function to set `accumulator` values.\n     * @param {Function} iteratee The iteratee to transform values.\n     * @param {Object} accumulator The initial inverted object.\n     * @returns {Function} Returns `accumulator`.\n     */\n    function baseInverter(object, setter, iteratee, accumulator) {\n      baseForOwn(object, function(value, key, object) {\n        setter(accumulator, iteratee(value), key, object);\n      });\n      return accumulator;\n    }\n\n    /**\n     * The base implementation of `_.invoke` without support for individual\n     * method arguments.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {Array} args The arguments to invoke the method with.\n     * @returns {*} Returns the result of the invoked method.\n     */\n    function baseInvoke(object, path, args) {\n      path = castPath(path, object);\n      object = parent(object, path);\n      var func = object == null ? object : object[toKey(last(path))];\n      return func == null ? undefined : apply(func, object, args);\n    }\n\n    /**\n     * The base implementation of `_.isArguments`.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n     */\n    function baseIsArguments(value) {\n      return isObjectLike(value) && baseGetTag(value) == argsTag;\n    }\n\n    /**\n     * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n     */\n    function baseIsArrayBuffer(value) {\n      return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n    }\n\n    /**\n     * The base implementation of `_.isDate` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n     */\n    function baseIsDate(value) {\n      return isObjectLike(value) && baseGetTag(value) == dateTag;\n    }\n\n    /**\n     * The base implementation of `_.isEqual` which supports partial comparisons\n     * and tracks traversed objects.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @param {boolean} bitmask The bitmask flags.\n     *  1 - Unordered comparison\n     *  2 - Partial comparison\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     */\n    function baseIsEqual(value, other, bitmask, customizer, stack) {\n      if (value === other) {\n        return true;\n      }\n      if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n        return value !== value && other !== other;\n      }\n      return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n    }\n\n    /**\n     * A specialized version of `baseIsEqual` for arrays and objects which performs\n     * deep comparisons and tracks traversed objects enabling objects with circular\n     * references to be compared.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n      var objIsArr = isArray(object),\n          othIsArr = isArray(other),\n          objTag = objIsArr ? arrayTag : getTag(object),\n          othTag = othIsArr ? arrayTag : getTag(other);\n\n      objTag = objTag == argsTag ? objectTag : objTag;\n      othTag = othTag == argsTag ? objectTag : othTag;\n\n      var objIsObj = objTag == objectTag,\n          othIsObj = othTag == objectTag,\n          isSameTag = objTag == othTag;\n\n      if (isSameTag && isBuffer(object)) {\n        if (!isBuffer(other)) {\n          return false;\n        }\n        objIsArr = true;\n        objIsObj = false;\n      }\n      if (isSameTag && !objIsObj) {\n        stack || (stack = new Stack);\n        return (objIsArr || isTypedArray(object))\n          ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n          : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n      }\n      if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n        var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n            othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n        if (objIsWrapped || othIsWrapped) {\n          var objUnwrapped = objIsWrapped ? object.value() : object,\n              othUnwrapped = othIsWrapped ? other.value() : other;\n\n          stack || (stack = new Stack);\n          return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n        }\n      }\n      if (!isSameTag) {\n        return false;\n      }\n      stack || (stack = new Stack);\n      return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n    }\n\n    /**\n     * The base implementation of `_.isMap` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n     */\n    function baseIsMap(value) {\n      return isObjectLike(value) && getTag(value) == mapTag;\n    }\n\n    /**\n     * The base implementation of `_.isMatch` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @param {Array} matchData The property names, values, and compare flags to match.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     */\n    function baseIsMatch(object, source, matchData, customizer) {\n      var index = matchData.length,\n          length = index,\n          noCustomizer = !customizer;\n\n      if (object == null) {\n        return !length;\n      }\n      object = Object(object);\n      while (index--) {\n        var data = matchData[index];\n        if ((noCustomizer && data[2])\n              ? data[1] !== object[data[0]]\n              : !(data[0] in object)\n            ) {\n          return false;\n        }\n      }\n      while (++index < length) {\n        data = matchData[index];\n        var key = data[0],\n            objValue = object[key],\n            srcValue = data[1];\n\n        if (noCustomizer && data[2]) {\n          if (objValue === undefined && !(key in object)) {\n            return false;\n          }\n        } else {\n          var stack = new Stack;\n          if (customizer) {\n            var result = customizer(objValue, srcValue, key, object, source, stack);\n          }\n          if (!(result === undefined\n                ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n                : result\n              )) {\n            return false;\n          }\n        }\n      }\n      return true;\n    }\n\n    /**\n     * The base implementation of `_.isNative` without bad shim checks.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a native function,\n     *  else `false`.\n     */\n    function baseIsNative(value) {\n      if (!isObject(value) || isMasked(value)) {\n        return false;\n      }\n      var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n      return pattern.test(toSource(value));\n    }\n\n    /**\n     * The base implementation of `_.isRegExp` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n     */\n    function baseIsRegExp(value) {\n      return isObjectLike(value) && baseGetTag(value) == regexpTag;\n    }\n\n    /**\n     * The base implementation of `_.isSet` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n     */\n    function baseIsSet(value) {\n      return isObjectLike(value) && getTag(value) == setTag;\n    }\n\n    /**\n     * The base implementation of `_.isTypedArray` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n     */\n    function baseIsTypedArray(value) {\n      return isObjectLike(value) &&\n        isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n    }\n\n    /**\n     * The base implementation of `_.iteratee`.\n     *\n     * @private\n     * @param {*} [value=_.identity] The value to convert to an iteratee.\n     * @returns {Function} Returns the iteratee.\n     */\n    function baseIteratee(value) {\n      // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n      // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n      if (typeof value == 'function') {\n        return value;\n      }\n      if (value == null) {\n        return identity;\n      }\n      if (typeof value == 'object') {\n        return isArray(value)\n          ? baseMatchesProperty(value[0], value[1])\n          : baseMatches(value);\n      }\n      return property(value);\n    }\n\n    /**\n     * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function baseKeys(object) {\n      if (!isPrototype(object)) {\n        return nativeKeys(object);\n      }\n      var result = [];\n      for (var key in Object(object)) {\n        if (hasOwnProperty.call(object, key) && key != 'constructor') {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function baseKeysIn(object) {\n      if (!isObject(object)) {\n        return nativeKeysIn(object);\n      }\n      var isProto = isPrototype(object),\n          result = [];\n\n      for (var key in object) {\n        if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.lt` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than `other`,\n     *  else `false`.\n     */\n    function baseLt(value, other) {\n      return value < other;\n    }\n\n    /**\n     * The base implementation of `_.map` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array} Returns the new mapped array.\n     */\n    function baseMap(collection, iteratee) {\n      var index = -1,\n          result = isArrayLike(collection) ? Array(collection.length) : [];\n\n      baseEach(collection, function(value, key, collection) {\n        result[++index] = iteratee(value, key, collection);\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.matches` which doesn't clone `source`.\n     *\n     * @private\n     * @param {Object} source The object of property values to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseMatches(source) {\n      var matchData = getMatchData(source);\n      if (matchData.length == 1 && matchData[0][2]) {\n        return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n      }\n      return function(object) {\n        return object === source || baseIsMatch(object, source, matchData);\n      };\n    }\n\n    /**\n     * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n     *\n     * @private\n     * @param {string} path The path of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseMatchesProperty(path, srcValue) {\n      if (isKey(path) && isStrictComparable(srcValue)) {\n        return matchesStrictComparable(toKey(path), srcValue);\n      }\n      return function(object) {\n        var objValue = get(object, path);\n        return (objValue === undefined && objValue === srcValue)\n          ? hasIn(object, path)\n          : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n      };\n    }\n\n    /**\n     * The base implementation of `_.merge` without support for multiple sources.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @param {number} srcIndex The index of `source`.\n     * @param {Function} [customizer] The function to customize merged values.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     */\n    function baseMerge(object, source, srcIndex, customizer, stack) {\n      if (object === source) {\n        return;\n      }\n      baseFor(source, function(srcValue, key) {\n        stack || (stack = new Stack);\n        if (isObject(srcValue)) {\n          baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n        }\n        else {\n          var newValue = customizer\n            ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n            : undefined;\n\n          if (newValue === undefined) {\n            newValue = srcValue;\n          }\n          assignMergeValue(object, key, newValue);\n        }\n      }, keysIn);\n    }\n\n    /**\n     * A specialized version of `baseMerge` for arrays and objects which performs\n     * deep merges and tracks traversed objects enabling objects with circular\n     * references to be merged.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @param {string} key The key of the value to merge.\n     * @param {number} srcIndex The index of `source`.\n     * @param {Function} mergeFunc The function to merge values.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     */\n    function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n      var objValue = safeGet(object, key),\n          srcValue = safeGet(source, key),\n          stacked = stack.get(srcValue);\n\n      if (stacked) {\n        assignMergeValue(object, key, stacked);\n        return;\n      }\n      var newValue = customizer\n        ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n        : undefined;\n\n      var isCommon = newValue === undefined;\n\n      if (isCommon) {\n        var isArr = isArray(srcValue),\n            isBuff = !isArr && isBuffer(srcValue),\n            isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n        newValue = srcValue;\n        if (isArr || isBuff || isTyped) {\n          if (isArray(objValue)) {\n            newValue = objValue;\n          }\n          else if (isArrayLikeObject(objValue)) {\n            newValue = copyArray(objValue);\n          }\n          else if (isBuff) {\n            isCommon = false;\n            newValue = cloneBuffer(srcValue, true);\n          }\n          else if (isTyped) {\n            isCommon = false;\n            newValue = cloneTypedArray(srcValue, true);\n          }\n          else {\n            newValue = [];\n          }\n        }\n        else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n          newValue = objValue;\n          if (isArguments(objValue)) {\n            newValue = toPlainObject(objValue);\n          }\n          else if (!isObject(objValue) || isFunction(objValue)) {\n            newValue = initCloneObject(srcValue);\n          }\n        }\n        else {\n          isCommon = false;\n        }\n      }\n      if (isCommon) {\n        // Recursively merge objects and arrays (susceptible to call stack limits).\n        stack.set(srcValue, newValue);\n        mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n        stack['delete'](srcValue);\n      }\n      assignMergeValue(object, key, newValue);\n    }\n\n    /**\n     * The base implementation of `_.nth` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {Array} array The array to query.\n     * @param {number} n The index of the element to return.\n     * @returns {*} Returns the nth element of `array`.\n     */\n    function baseNth(array, n) {\n      var length = array.length;\n      if (!length) {\n        return;\n      }\n      n += n < 0 ? length : 0;\n      return isIndex(n, length) ? array[n] : undefined;\n    }\n\n    /**\n     * The base implementation of `_.orderBy` without param guards.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n     * @param {string[]} orders The sort orders of `iteratees`.\n     * @returns {Array} Returns the new sorted array.\n     */\n    function baseOrderBy(collection, iteratees, orders) {\n      if (iteratees.length) {\n        iteratees = arrayMap(iteratees, function(iteratee) {\n          if (isArray(iteratee)) {\n            return function(value) {\n              return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n            }\n          }\n          return iteratee;\n        });\n      } else {\n        iteratees = [identity];\n      }\n\n      var index = -1;\n      iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n\n      var result = baseMap(collection, function(value, key, collection) {\n        var criteria = arrayMap(iteratees, function(iteratee) {\n          return iteratee(value);\n        });\n        return { 'criteria': criteria, 'index': ++index, 'value': value };\n      });\n\n      return baseSortBy(result, function(object, other) {\n        return compareMultiple(object, other, orders);\n      });\n    }\n\n    /**\n     * The base implementation of `_.pick` without support for individual\n     * property identifiers.\n     *\n     * @private\n     * @param {Object} object The source object.\n     * @param {string[]} paths The property paths to pick.\n     * @returns {Object} Returns the new object.\n     */\n    function basePick(object, paths) {\n      return basePickBy(object, paths, function(value, path) {\n        return hasIn(object, path);\n      });\n    }\n\n    /**\n     * The base implementation of  `_.pickBy` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The source object.\n     * @param {string[]} paths The property paths to pick.\n     * @param {Function} predicate The function invoked per property.\n     * @returns {Object} Returns the new object.\n     */\n    function basePickBy(object, paths, predicate) {\n      var index = -1,\n          length = paths.length,\n          result = {};\n\n      while (++index < length) {\n        var path = paths[index],\n            value = baseGet(object, path);\n\n        if (predicate(value, path)) {\n          baseSet(result, castPath(path, object), value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseProperty` which supports deep paths.\n     *\n     * @private\n     * @param {Array|string} path The path of the property to get.\n     * @returns {Function} Returns the new accessor function.\n     */\n    function basePropertyDeep(path) {\n      return function(object) {\n        return baseGet(object, path);\n      };\n    }\n\n    /**\n     * The base implementation of `_.pullAllBy` without support for iteratee\n     * shorthands.\n     *\n     * @private\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns `array`.\n     */\n    function basePullAll(array, values, iteratee, comparator) {\n      var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n          index = -1,\n          length = values.length,\n          seen = array;\n\n      if (array === values) {\n        values = copyArray(values);\n      }\n      if (iteratee) {\n        seen = arrayMap(array, baseUnary(iteratee));\n      }\n      while (++index < length) {\n        var fromIndex = 0,\n            value = values[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n          if (seen !== array) {\n            splice.call(seen, fromIndex, 1);\n          }\n          splice.call(array, fromIndex, 1);\n        }\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.pullAt` without support for individual\n     * indexes or capturing the removed elements.\n     *\n     * @private\n     * @param {Array} array The array to modify.\n     * @param {number[]} indexes The indexes of elements to remove.\n     * @returns {Array} Returns `array`.\n     */\n    function basePullAt(array, indexes) {\n      var length = array ? indexes.length : 0,\n          lastIndex = length - 1;\n\n      while (length--) {\n        var index = indexes[length];\n        if (length == lastIndex || index !== previous) {\n          var previous = index;\n          if (isIndex(index)) {\n            splice.call(array, index, 1);\n          } else {\n            baseUnset(array, index);\n          }\n        }\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.random` without support for returning\n     * floating-point numbers.\n     *\n     * @private\n     * @param {number} lower The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the random number.\n     */\n    function baseRandom(lower, upper) {\n      return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n    }\n\n    /**\n     * The base implementation of `_.range` and `_.rangeRight` which doesn't\n     * coerce arguments.\n     *\n     * @private\n     * @param {number} start The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} step The value to increment or decrement by.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Array} Returns the range of numbers.\n     */\n    function baseRange(start, end, step, fromRight) {\n      var index = -1,\n          length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n          result = Array(length);\n\n      while (length--) {\n        result[fromRight ? length : ++index] = start;\n        start += step;\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.repeat` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {string} string The string to repeat.\n     * @param {number} n The number of times to repeat the string.\n     * @returns {string} Returns the repeated string.\n     */\n    function baseRepeat(string, n) {\n      var result = '';\n      if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n        return result;\n      }\n      // Leverage the exponentiation by squaring algorithm for a faster repeat.\n      // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n      do {\n        if (n % 2) {\n          result += string;\n        }\n        n = nativeFloor(n / 2);\n        if (n) {\n          string += string;\n        }\n      } while (n);\n\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @returns {Function} Returns the new function.\n     */\n    function baseRest(func, start) {\n      return setToString(overRest(func, start, identity), func + '');\n    }\n\n    /**\n     * The base implementation of `_.sample`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to sample.\n     * @returns {*} Returns the random element.\n     */\n    function baseSample(collection) {\n      return arraySample(values(collection));\n    }\n\n    /**\n     * The base implementation of `_.sampleSize` without param guards.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to sample.\n     * @param {number} n The number of elements to sample.\n     * @returns {Array} Returns the random elements.\n     */\n    function baseSampleSize(collection, n) {\n      var array = values(collection);\n      return shuffleSelf(array, baseClamp(n, 0, array.length));\n    }\n\n    /**\n     * The base implementation of `_.set`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @param {Function} [customizer] The function to customize path creation.\n     * @returns {Object} Returns `object`.\n     */\n    function baseSet(object, path, value, customizer) {\n      if (!isObject(object)) {\n        return object;\n      }\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length,\n          lastIndex = length - 1,\n          nested = object;\n\n      while (nested != null && ++index < length) {\n        var key = toKey(path[index]),\n            newValue = value;\n\n        if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n          return object;\n        }\n\n        if (index != lastIndex) {\n          var objValue = nested[key];\n          newValue = customizer ? customizer(objValue, key, nested) : undefined;\n          if (newValue === undefined) {\n            newValue = isObject(objValue)\n              ? objValue\n              : (isIndex(path[index + 1]) ? [] : {});\n          }\n        }\n        assignValue(nested, key, newValue);\n        nested = nested[key];\n      }\n      return object;\n    }\n\n    /**\n     * The base implementation of `setData` without support for hot loop shorting.\n     *\n     * @private\n     * @param {Function} func The function to associate metadata with.\n     * @param {*} data The metadata.\n     * @returns {Function} Returns `func`.\n     */\n    var baseSetData = !metaMap ? identity : function(func, data) {\n      metaMap.set(func, data);\n      return func;\n    };\n\n    /**\n     * The base implementation of `setToString` without support for hot loop shorting.\n     *\n     * @private\n     * @param {Function} func The function to modify.\n     * @param {Function} string The `toString` result.\n     * @returns {Function} Returns `func`.\n     */\n    var baseSetToString = !defineProperty ? identity : function(func, string) {\n      return defineProperty(func, 'toString', {\n        'configurable': true,\n        'enumerable': false,\n        'value': constant(string),\n        'writable': true\n      });\n    };\n\n    /**\n     * The base implementation of `_.shuffle`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     */\n    function baseShuffle(collection) {\n      return shuffleSelf(values(collection));\n    }\n\n    /**\n     * The base implementation of `_.slice` without an iteratee call guard.\n     *\n     * @private\n     * @param {Array} array The array to slice.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function baseSlice(array, start, end) {\n      var index = -1,\n          length = array.length;\n\n      if (start < 0) {\n        start = -start > length ? 0 : (length + start);\n      }\n      end = end > length ? length : end;\n      if (end < 0) {\n        end += length;\n      }\n      length = start > end ? 0 : ((end - start) >>> 0);\n      start >>>= 0;\n\n      var result = Array(length);\n      while (++index < length) {\n        result[index] = array[index + start];\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.some` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\n     *  else `false`.\n     */\n    function baseSome(collection, predicate) {\n      var result;\n\n      baseEach(collection, function(value, index, collection) {\n        result = predicate(value, index, collection);\n        return !result;\n      });\n      return !!result;\n    }\n\n    /**\n     * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n     * performs a binary search of `array` to determine the index at which `value`\n     * should be inserted into `array` in order to maintain its sort order.\n     *\n     * @private\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     */\n    function baseSortedIndex(array, value, retHighest) {\n      var low = 0,\n          high = array == null ? low : array.length;\n\n      if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n        while (low < high) {\n          var mid = (low + high) >>> 1,\n              computed = array[mid];\n\n          if (computed !== null && !isSymbol(computed) &&\n              (retHighest ? (computed <= value) : (computed < value))) {\n            low = mid + 1;\n          } else {\n            high = mid;\n          }\n        }\n        return high;\n      }\n      return baseSortedIndexBy(array, value, identity, retHighest);\n    }\n\n    /**\n     * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n     * which invokes `iteratee` for `value` and each element of `array` to compute\n     * their sort ranking. The iteratee is invoked with one argument; (value).\n     *\n     * @private\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} iteratee The iteratee invoked per element.\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     */\n    function baseSortedIndexBy(array, value, iteratee, retHighest) {\n      var low = 0,\n          high = array == null ? 0 : array.length;\n      if (high === 0) {\n        return 0;\n      }\n\n      value = iteratee(value);\n      var valIsNaN = value !== value,\n          valIsNull = value === null,\n          valIsSymbol = isSymbol(value),\n          valIsUndefined = value === undefined;\n\n      while (low < high) {\n        var mid = nativeFloor((low + high) / 2),\n            computed = iteratee(array[mid]),\n            othIsDefined = computed !== undefined,\n            othIsNull = computed === null,\n            othIsReflexive = computed === computed,\n            othIsSymbol = isSymbol(computed);\n\n        if (valIsNaN) {\n          var setLow = retHighest || othIsReflexive;\n        } else if (valIsUndefined) {\n          setLow = othIsReflexive && (retHighest || othIsDefined);\n        } else if (valIsNull) {\n          setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n        } else if (valIsSymbol) {\n          setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n        } else if (othIsNull || othIsSymbol) {\n          setLow = false;\n        } else {\n          setLow = retHighest ? (computed <= value) : (computed < value);\n        }\n        if (setLow) {\n          low = mid + 1;\n        } else {\n          high = mid;\n        }\n      }\n      return nativeMin(high, MAX_ARRAY_INDEX);\n    }\n\n    /**\n     * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n     * support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     */\n    function baseSortedUniq(array, iteratee) {\n      var index = -1,\n          length = array.length,\n          resIndex = 0,\n          result = [];\n\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        if (!index || !eq(computed, seen)) {\n          var seen = computed;\n          result[resIndex++] = value === 0 ? 0 : value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.toNumber` which doesn't ensure correct\n     * conversions of binary, hexadecimal, or octal string values.\n     *\n     * @private\n     * @param {*} value The value to process.\n     * @returns {number} Returns the number.\n     */\n    function baseToNumber(value) {\n      if (typeof value == 'number') {\n        return value;\n      }\n      if (isSymbol(value)) {\n        return NAN;\n      }\n      return +value;\n    }\n\n    /**\n     * The base implementation of `_.toString` which doesn't convert nullish\n     * values to empty strings.\n     *\n     * @private\n     * @param {*} value The value to process.\n     * @returns {string} Returns the string.\n     */\n    function baseToString(value) {\n      // Exit early for strings to avoid a performance hit in some environments.\n      if (typeof value == 'string') {\n        return value;\n      }\n      if (isArray(value)) {\n        // Recursively convert values (susceptible to call stack limits).\n        return arrayMap(value, baseToString) + '';\n      }\n      if (isSymbol(value)) {\n        return symbolToString ? symbolToString.call(value) : '';\n      }\n      var result = (value + '');\n      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n    }\n\n    /**\n     * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     */\n    function baseUniq(array, iteratee, comparator) {\n      var index = -1,\n          includes = arrayIncludes,\n          length = array.length,\n          isCommon = true,\n          result = [],\n          seen = result;\n\n      if (comparator) {\n        isCommon = false;\n        includes = arrayIncludesWith;\n      }\n      else if (length >= LARGE_ARRAY_SIZE) {\n        var set = iteratee ? null : createSet(array);\n        if (set) {\n          return setToArray(set);\n        }\n        isCommon = false;\n        includes = cacheHas;\n        seen = new SetCache;\n      }\n      else {\n        seen = iteratee ? [] : result;\n      }\n      outer:\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (isCommon && computed === computed) {\n          var seenIndex = seen.length;\n          while (seenIndex--) {\n            if (seen[seenIndex] === computed) {\n              continue outer;\n            }\n          }\n          if (iteratee) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n        else if (!includes(seen, computed, comparator)) {\n          if (seen !== result) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.unset`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The property path to unset.\n     * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n     */\n    function baseUnset(object, path) {\n      path = castPath(path, object);\n      object = parent(object, path);\n      return object == null || delete object[toKey(last(path))];\n    }\n\n    /**\n     * The base implementation of `_.update`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to update.\n     * @param {Function} updater The function to produce the updated value.\n     * @param {Function} [customizer] The function to customize path creation.\n     * @returns {Object} Returns `object`.\n     */\n    function baseUpdate(object, path, updater, customizer) {\n      return baseSet(object, path, updater(baseGet(object, path)), customizer);\n    }\n\n    /**\n     * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n     * without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to query.\n     * @param {Function} predicate The function invoked per iteration.\n     * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function baseWhile(array, predicate, isDrop, fromRight) {\n      var length = array.length,\n          index = fromRight ? length : -1;\n\n      while ((fromRight ? index-- : ++index < length) &&\n        predicate(array[index], index, array)) {}\n\n      return isDrop\n        ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n        : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n    }\n\n    /**\n     * The base implementation of `wrapperValue` which returns the result of\n     * performing a sequence of actions on the unwrapped `value`, where each\n     * successive action is supplied the return value of the previous.\n     *\n     * @private\n     * @param {*} value The unwrapped value.\n     * @param {Array} actions Actions to perform to resolve the unwrapped value.\n     * @returns {*} Returns the resolved value.\n     */\n    function baseWrapperValue(value, actions) {\n      var result = value;\n      if (result instanceof LazyWrapper) {\n        result = result.value();\n      }\n      return arrayReduce(actions, function(result, action) {\n        return action.func.apply(action.thisArg, arrayPush([result], action.args));\n      }, result);\n    }\n\n    /**\n     * The base implementation of methods like `_.xor`, without support for\n     * iteratee shorthands, that accepts an array of arrays to inspect.\n     *\n     * @private\n     * @param {Array} arrays The arrays to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of values.\n     */\n    function baseXor(arrays, iteratee, comparator) {\n      var length = arrays.length;\n      if (length < 2) {\n        return length ? baseUniq(arrays[0]) : [];\n      }\n      var index = -1,\n          result = Array(length);\n\n      while (++index < length) {\n        var array = arrays[index],\n            othIndex = -1;\n\n        while (++othIndex < length) {\n          if (othIndex != index) {\n            result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n          }\n        }\n      }\n      return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n    }\n\n    /**\n     * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n     *\n     * @private\n     * @param {Array} props The property identifiers.\n     * @param {Array} values The property values.\n     * @param {Function} assignFunc The function to assign values.\n     * @returns {Object} Returns the new object.\n     */\n    function baseZipObject(props, values, assignFunc) {\n      var index = -1,\n          length = props.length,\n          valsLength = values.length,\n          result = {};\n\n      while (++index < length) {\n        var value = index < valsLength ? values[index] : undefined;\n        assignFunc(result, props[index], value);\n      }\n      return result;\n    }\n\n    /**\n     * Casts `value` to an empty array if it's not an array like object.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {Array|Object} Returns the cast array-like object.\n     */\n    function castArrayLikeObject(value) {\n      return isArrayLikeObject(value) ? value : [];\n    }\n\n    /**\n     * Casts `value` to `identity` if it's not a function.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {Function} Returns cast function.\n     */\n    function castFunction(value) {\n      return typeof value == 'function' ? value : identity;\n    }\n\n    /**\n     * Casts `value` to a path array if it's not one.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @param {Object} [object] The object to query keys on.\n     * @returns {Array} Returns the cast property path array.\n     */\n    function castPath(value, object) {\n      if (isArray(value)) {\n        return value;\n      }\n      return isKey(value, object) ? [value] : stringToPath(toString(value));\n    }\n\n    /**\n     * A `baseRest` alias which can be replaced with `identity` by module\n     * replacement plugins.\n     *\n     * @private\n     * @type {Function}\n     * @param {Function} func The function to apply a rest parameter to.\n     * @returns {Function} Returns the new function.\n     */\n    var castRest = baseRest;\n\n    /**\n     * Casts `array` to a slice if it's needed.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {number} start The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the cast slice.\n     */\n    function castSlice(array, start, end) {\n      var length = array.length;\n      end = end === undefined ? length : end;\n      return (!start && end >= length) ? array : baseSlice(array, start, end);\n    }\n\n    /**\n     * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n     *\n     * @private\n     * @param {number|Object} id The timer id or timeout object of the timer to clear.\n     */\n    var clearTimeout = ctxClearTimeout || function(id) {\n      return root.clearTimeout(id);\n    };\n\n    /**\n     * Creates a clone of  `buffer`.\n     *\n     * @private\n     * @param {Buffer} buffer The buffer to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Buffer} Returns the cloned buffer.\n     */\n    function cloneBuffer(buffer, isDeep) {\n      if (isDeep) {\n        return buffer.slice();\n      }\n      var length = buffer.length,\n          result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n      buffer.copy(result);\n      return result;\n    }\n\n    /**\n     * Creates a clone of `arrayBuffer`.\n     *\n     * @private\n     * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n     * @returns {ArrayBuffer} Returns the cloned array buffer.\n     */\n    function cloneArrayBuffer(arrayBuffer) {\n      var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n      new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n      return result;\n    }\n\n    /**\n     * Creates a clone of `dataView`.\n     *\n     * @private\n     * @param {Object} dataView The data view to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the cloned data view.\n     */\n    function cloneDataView(dataView, isDeep) {\n      var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n      return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n    }\n\n    /**\n     * Creates a clone of `regexp`.\n     *\n     * @private\n     * @param {Object} regexp The regexp to clone.\n     * @returns {Object} Returns the cloned regexp.\n     */\n    function cloneRegExp(regexp) {\n      var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n      result.lastIndex = regexp.lastIndex;\n      return result;\n    }\n\n    /**\n     * Creates a clone of the `symbol` object.\n     *\n     * @private\n     * @param {Object} symbol The symbol object to clone.\n     * @returns {Object} Returns the cloned symbol object.\n     */\n    function cloneSymbol(symbol) {\n      return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n    }\n\n    /**\n     * Creates a clone of `typedArray`.\n     *\n     * @private\n     * @param {Object} typedArray The typed array to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the cloned typed array.\n     */\n    function cloneTypedArray(typedArray, isDeep) {\n      var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n      return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n    }\n\n    /**\n     * Compares values to sort them in ascending order.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {number} Returns the sort order indicator for `value`.\n     */\n    function compareAscending(value, other) {\n      if (value !== other) {\n        var valIsDefined = value !== undefined,\n            valIsNull = value === null,\n            valIsReflexive = value === value,\n            valIsSymbol = isSymbol(value);\n\n        var othIsDefined = other !== undefined,\n            othIsNull = other === null,\n            othIsReflexive = other === other,\n            othIsSymbol = isSymbol(other);\n\n        if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n            (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n            (valIsNull && othIsDefined && othIsReflexive) ||\n            (!valIsDefined && othIsReflexive) ||\n            !valIsReflexive) {\n          return 1;\n        }\n        if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n            (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n            (othIsNull && valIsDefined && valIsReflexive) ||\n            (!othIsDefined && valIsReflexive) ||\n            !othIsReflexive) {\n          return -1;\n        }\n      }\n      return 0;\n    }\n\n    /**\n     * Used by `_.orderBy` to compare multiple properties of a value to another\n     * and stable sort them.\n     *\n     * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n     * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n     * of corresponding values.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {boolean[]|string[]} orders The order to sort by for each property.\n     * @returns {number} Returns the sort order indicator for `object`.\n     */\n    function compareMultiple(object, other, orders) {\n      var index = -1,\n          objCriteria = object.criteria,\n          othCriteria = other.criteria,\n          length = objCriteria.length,\n          ordersLength = orders.length;\n\n      while (++index < length) {\n        var result = compareAscending(objCriteria[index], othCriteria[index]);\n        if (result) {\n          if (index >= ordersLength) {\n            return result;\n          }\n          var order = orders[index];\n          return result * (order == 'desc' ? -1 : 1);\n        }\n      }\n      // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n      // that causes it, under certain circumstances, to provide the same value for\n      // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n      // for more details.\n      //\n      // This also ensures a stable sort in V8 and other engines.\n      // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n      return object.index - other.index;\n    }\n\n    /**\n     * Creates an array that is the composition of partially applied arguments,\n     * placeholders, and provided arguments into a single array of arguments.\n     *\n     * @private\n     * @param {Array} args The provided arguments.\n     * @param {Array} partials The arguments to prepend to those provided.\n     * @param {Array} holders The `partials` placeholder indexes.\n     * @params {boolean} [isCurried] Specify composing for a curried function.\n     * @returns {Array} Returns the new array of composed arguments.\n     */\n    function composeArgs(args, partials, holders, isCurried) {\n      var argsIndex = -1,\n          argsLength = args.length,\n          holdersLength = holders.length,\n          leftIndex = -1,\n          leftLength = partials.length,\n          rangeLength = nativeMax(argsLength - holdersLength, 0),\n          result = Array(leftLength + rangeLength),\n          isUncurried = !isCurried;\n\n      while (++leftIndex < leftLength) {\n        result[leftIndex] = partials[leftIndex];\n      }\n      while (++argsIndex < holdersLength) {\n        if (isUncurried || argsIndex < argsLength) {\n          result[holders[argsIndex]] = args[argsIndex];\n        }\n      }\n      while (rangeLength--) {\n        result[leftIndex++] = args[argsIndex++];\n      }\n      return result;\n    }\n\n    /**\n     * This function is like `composeArgs` except that the arguments composition\n     * is tailored for `_.partialRight`.\n     *\n     * @private\n     * @param {Array} args The provided arguments.\n     * @param {Array} partials The arguments to append to those provided.\n     * @param {Array} holders The `partials` placeholder indexes.\n     * @params {boolean} [isCurried] Specify composing for a curried function.\n     * @returns {Array} Returns the new array of composed arguments.\n     */\n    function composeArgsRight(args, partials, holders, isCurried) {\n      var argsIndex = -1,\n          argsLength = args.length,\n          holdersIndex = -1,\n          holdersLength = holders.length,\n          rightIndex = -1,\n          rightLength = partials.length,\n          rangeLength = nativeMax(argsLength - holdersLength, 0),\n          result = Array(rangeLength + rightLength),\n          isUncurried = !isCurried;\n\n      while (++argsIndex < rangeLength) {\n        result[argsIndex] = args[argsIndex];\n      }\n      var offset = argsIndex;\n      while (++rightIndex < rightLength) {\n        result[offset + rightIndex] = partials[rightIndex];\n      }\n      while (++holdersIndex < holdersLength) {\n        if (isUncurried || argsIndex < argsLength) {\n          result[offset + holders[holdersIndex]] = args[argsIndex++];\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Copies the values of `source` to `array`.\n     *\n     * @private\n     * @param {Array} source The array to copy values from.\n     * @param {Array} [array=[]] The array to copy values to.\n     * @returns {Array} Returns `array`.\n     */\n    function copyArray(source, array) {\n      var index = -1,\n          length = source.length;\n\n      array || (array = Array(length));\n      while (++index < length) {\n        array[index] = source[index];\n      }\n      return array;\n    }\n\n    /**\n     * Copies properties of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy properties from.\n     * @param {Array} props The property identifiers to copy.\n     * @param {Object} [object={}] The object to copy properties to.\n     * @param {Function} [customizer] The function to customize copied values.\n     * @returns {Object} Returns `object`.\n     */\n    function copyObject(source, props, object, customizer) {\n      var isNew = !object;\n      object || (object = {});\n\n      var index = -1,\n          length = props.length;\n\n      while (++index < length) {\n        var key = props[index];\n\n        var newValue = customizer\n          ? customizer(object[key], source[key], key, object, source)\n          : undefined;\n\n        if (newValue === undefined) {\n          newValue = source[key];\n        }\n        if (isNew) {\n          baseAssignValue(object, key, newValue);\n        } else {\n          assignValue(object, key, newValue);\n        }\n      }\n      return object;\n    }\n\n    /**\n     * Copies own symbols of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy symbols from.\n     * @param {Object} [object={}] The object to copy symbols to.\n     * @returns {Object} Returns `object`.\n     */\n    function copySymbols(source, object) {\n      return copyObject(source, getSymbols(source), object);\n    }\n\n    /**\n     * Copies own and inherited symbols of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy symbols from.\n     * @param {Object} [object={}] The object to copy symbols to.\n     * @returns {Object} Returns `object`.\n     */\n    function copySymbolsIn(source, object) {\n      return copyObject(source, getSymbolsIn(source), object);\n    }\n\n    /**\n     * Creates a function like `_.groupBy`.\n     *\n     * @private\n     * @param {Function} setter The function to set accumulator values.\n     * @param {Function} [initializer] The accumulator object initializer.\n     * @returns {Function} Returns the new aggregator function.\n     */\n    function createAggregator(setter, initializer) {\n      return function(collection, iteratee) {\n        var func = isArray(collection) ? arrayAggregator : baseAggregator,\n            accumulator = initializer ? initializer() : {};\n\n        return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n      };\n    }\n\n    /**\n     * Creates a function like `_.assign`.\n     *\n     * @private\n     * @param {Function} assigner The function to assign values.\n     * @returns {Function} Returns the new assigner function.\n     */\n    function createAssigner(assigner) {\n      return baseRest(function(object, sources) {\n        var index = -1,\n            length = sources.length,\n            customizer = length > 1 ? sources[length - 1] : undefined,\n            guard = length > 2 ? sources[2] : undefined;\n\n        customizer = (assigner.length > 3 && typeof customizer == 'function')\n          ? (length--, customizer)\n          : undefined;\n\n        if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n          customizer = length < 3 ? undefined : customizer;\n          length = 1;\n        }\n        object = Object(object);\n        while (++index < length) {\n          var source = sources[index];\n          if (source) {\n            assigner(object, source, index, customizer);\n          }\n        }\n        return object;\n      });\n    }\n\n    /**\n     * Creates a `baseEach` or `baseEachRight` function.\n     *\n     * @private\n     * @param {Function} eachFunc The function to iterate over a collection.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new base function.\n     */\n    function createBaseEach(eachFunc, fromRight) {\n      return function(collection, iteratee) {\n        if (collection == null) {\n          return collection;\n        }\n        if (!isArrayLike(collection)) {\n          return eachFunc(collection, iteratee);\n        }\n        var length = collection.length,\n            index = fromRight ? length : -1,\n            iterable = Object(collection);\n\n        while ((fromRight ? index-- : ++index < length)) {\n          if (iteratee(iterable[index], index, iterable) === false) {\n            break;\n          }\n        }\n        return collection;\n      };\n    }\n\n    /**\n     * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new base function.\n     */\n    function createBaseFor(fromRight) {\n      return function(object, iteratee, keysFunc) {\n        var index = -1,\n            iterable = Object(object),\n            props = keysFunc(object),\n            length = props.length;\n\n        while (length--) {\n          var key = props[fromRight ? length : ++index];\n          if (iteratee(iterable[key], key, iterable) === false) {\n            break;\n          }\n        }\n        return object;\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with the optional `this`\n     * binding of `thisArg`.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createBind(func, bitmask, thisArg) {\n      var isBind = bitmask & WRAP_BIND_FLAG,\n          Ctor = createCtor(func);\n\n      function wrapper() {\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n        return fn.apply(isBind ? thisArg : this, arguments);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a function like `_.lowerFirst`.\n     *\n     * @private\n     * @param {string} methodName The name of the `String` case method to use.\n     * @returns {Function} Returns the new case function.\n     */\n    function createCaseFirst(methodName) {\n      return function(string) {\n        string = toString(string);\n\n        var strSymbols = hasUnicode(string)\n          ? stringToArray(string)\n          : undefined;\n\n        var chr = strSymbols\n          ? strSymbols[0]\n          : string.charAt(0);\n\n        var trailing = strSymbols\n          ? castSlice(strSymbols, 1).join('')\n          : string.slice(1);\n\n        return chr[methodName]() + trailing;\n      };\n    }\n\n    /**\n     * Creates a function like `_.camelCase`.\n     *\n     * @private\n     * @param {Function} callback The function to combine each word.\n     * @returns {Function} Returns the new compounder function.\n     */\n    function createCompounder(callback) {\n      return function(string) {\n        return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n      };\n    }\n\n    /**\n     * Creates a function that produces an instance of `Ctor` regardless of\n     * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n     *\n     * @private\n     * @param {Function} Ctor The constructor to wrap.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createCtor(Ctor) {\n      return function() {\n        // Use a `switch` statement to work with class constructors. See\n        // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n        // for more details.\n        var args = arguments;\n        switch (args.length) {\n          case 0: return new Ctor;\n          case 1: return new Ctor(args[0]);\n          case 2: return new Ctor(args[0], args[1]);\n          case 3: return new Ctor(args[0], args[1], args[2]);\n          case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n          case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n          case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n          case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n        }\n        var thisBinding = baseCreate(Ctor.prototype),\n            result = Ctor.apply(thisBinding, args);\n\n        // Mimic the constructor's `return` behavior.\n        // See https://es5.github.io/#x13.2.2 for more details.\n        return isObject(result) ? result : thisBinding;\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to enable currying.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {number} arity The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createCurry(func, bitmask, arity) {\n      var Ctor = createCtor(func);\n\n      function wrapper() {\n        var length = arguments.length,\n            args = Array(length),\n            index = length,\n            placeholder = getHolder(wrapper);\n\n        while (index--) {\n          args[index] = arguments[index];\n        }\n        var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n          ? []\n          : replaceHolders(args, placeholder);\n\n        length -= holders.length;\n        if (length < arity) {\n          return createRecurry(\n            func, bitmask, createHybrid, wrapper.placeholder, undefined,\n            args, holders, undefined, undefined, arity - length);\n        }\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n        return apply(fn, this, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a `_.find` or `_.findLast` function.\n     *\n     * @private\n     * @param {Function} findIndexFunc The function to find the collection index.\n     * @returns {Function} Returns the new find function.\n     */\n    function createFind(findIndexFunc) {\n      return function(collection, predicate, fromIndex) {\n        var iterable = Object(collection);\n        if (!isArrayLike(collection)) {\n          var iteratee = getIteratee(predicate, 3);\n          collection = keys(collection);\n          predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n        }\n        var index = findIndexFunc(collection, predicate, fromIndex);\n        return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n      };\n    }\n\n    /**\n     * Creates a `_.flow` or `_.flowRight` function.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new flow function.\n     */\n    function createFlow(fromRight) {\n      return flatRest(function(funcs) {\n        var length = funcs.length,\n            index = length,\n            prereq = LodashWrapper.prototype.thru;\n\n        if (fromRight) {\n          funcs.reverse();\n        }\n        while (index--) {\n          var func = funcs[index];\n          if (typeof func != 'function') {\n            throw new TypeError(FUNC_ERROR_TEXT);\n          }\n          if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n            var wrapper = new LodashWrapper([], true);\n          }\n        }\n        index = wrapper ? index : length;\n        while (++index < length) {\n          func = funcs[index];\n\n          var funcName = getFuncName(func),\n              data = funcName == 'wrapper' ? getData(func) : undefined;\n\n          if (data && isLaziable(data[0]) &&\n                data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\n                !data[4].length && data[9] == 1\n              ) {\n            wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n          } else {\n            wrapper = (func.length == 1 && isLaziable(func))\n              ? wrapper[funcName]()\n              : wrapper.thru(func);\n          }\n        }\n        return function() {\n          var args = arguments,\n              value = args[0];\n\n          if (wrapper && args.length == 1 && isArray(value)) {\n            return wrapper.plant(value).value();\n          }\n          var index = 0,\n              result = length ? funcs[index].apply(this, args) : value;\n\n          while (++index < length) {\n            result = funcs[index].call(this, result);\n          }\n          return result;\n        };\n      });\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with optional `this`\n     * binding of `thisArg`, partial application, and currying.\n     *\n     * @private\n     * @param {Function|string} func The function or method name to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to prepend to those provided to\n     *  the new function.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [partialsRight] The arguments to append to those provided\n     *  to the new function.\n     * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n      var isAry = bitmask & WRAP_ARY_FLAG,\n          isBind = bitmask & WRAP_BIND_FLAG,\n          isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n          isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n          isFlip = bitmask & WRAP_FLIP_FLAG,\n          Ctor = isBindKey ? undefined : createCtor(func);\n\n      function wrapper() {\n        var length = arguments.length,\n            args = Array(length),\n            index = length;\n\n        while (index--) {\n          args[index] = arguments[index];\n        }\n        if (isCurried) {\n          var placeholder = getHolder(wrapper),\n              holdersCount = countHolders(args, placeholder);\n        }\n        if (partials) {\n          args = composeArgs(args, partials, holders, isCurried);\n        }\n        if (partialsRight) {\n          args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n        }\n        length -= holdersCount;\n        if (isCurried && length < arity) {\n          var newHolders = replaceHolders(args, placeholder);\n          return createRecurry(\n            func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n            args, newHolders, argPos, ary, arity - length\n          );\n        }\n        var thisBinding = isBind ? thisArg : this,\n            fn = isBindKey ? thisBinding[func] : func;\n\n        length = args.length;\n        if (argPos) {\n          args = reorder(args, argPos);\n        } else if (isFlip && length > 1) {\n          args.reverse();\n        }\n        if (isAry && ary < length) {\n          args.length = ary;\n        }\n        if (this && this !== root && this instanceof wrapper) {\n          fn = Ctor || createCtor(fn);\n        }\n        return fn.apply(thisBinding, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a function like `_.invertBy`.\n     *\n     * @private\n     * @param {Function} setter The function to set accumulator values.\n     * @param {Function} toIteratee The function to resolve iteratees.\n     * @returns {Function} Returns the new inverter function.\n     */\n    function createInverter(setter, toIteratee) {\n      return function(object, iteratee) {\n        return baseInverter(object, setter, toIteratee(iteratee), {});\n      };\n    }\n\n    /**\n     * Creates a function that performs a mathematical operation on two values.\n     *\n     * @private\n     * @param {Function} operator The function to perform the operation.\n     * @param {number} [defaultValue] The value used for `undefined` arguments.\n     * @returns {Function} Returns the new mathematical operation function.\n     */\n    function createMathOperation(operator, defaultValue) {\n      return function(value, other) {\n        var result;\n        if (value === undefined && other === undefined) {\n          return defaultValue;\n        }\n        if (value !== undefined) {\n          result = value;\n        }\n        if (other !== undefined) {\n          if (result === undefined) {\n            return other;\n          }\n          if (typeof value == 'string' || typeof other == 'string') {\n            value = baseToString(value);\n            other = baseToString(other);\n          } else {\n            value = baseToNumber(value);\n            other = baseToNumber(other);\n          }\n          result = operator(value, other);\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Creates a function like `_.over`.\n     *\n     * @private\n     * @param {Function} arrayFunc The function to iterate over iteratees.\n     * @returns {Function} Returns the new over function.\n     */\n    function createOver(arrayFunc) {\n      return flatRest(function(iteratees) {\n        iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n        return baseRest(function(args) {\n          var thisArg = this;\n          return arrayFunc(iteratees, function(iteratee) {\n            return apply(iteratee, thisArg, args);\n          });\n        });\n      });\n    }\n\n    /**\n     * Creates the padding for `string` based on `length`. The `chars` string\n     * is truncated if the number of characters exceeds `length`.\n     *\n     * @private\n     * @param {number} length The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padding for `string`.\n     */\n    function createPadding(length, chars) {\n      chars = chars === undefined ? ' ' : baseToString(chars);\n\n      var charsLength = chars.length;\n      if (charsLength < 2) {\n        return charsLength ? baseRepeat(chars, length) : chars;\n      }\n      var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n      return hasUnicode(chars)\n        ? castSlice(stringToArray(result), 0, length).join('')\n        : result.slice(0, length);\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with the `this` binding\n     * of `thisArg` and `partials` prepended to the arguments it receives.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} thisArg The `this` binding of `func`.\n     * @param {Array} partials The arguments to prepend to those provided to\n     *  the new function.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createPartial(func, bitmask, thisArg, partials) {\n      var isBind = bitmask & WRAP_BIND_FLAG,\n          Ctor = createCtor(func);\n\n      function wrapper() {\n        var argsIndex = -1,\n            argsLength = arguments.length,\n            leftIndex = -1,\n            leftLength = partials.length,\n            args = Array(leftLength + argsLength),\n            fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n        while (++leftIndex < leftLength) {\n          args[leftIndex] = partials[leftIndex];\n        }\n        while (argsLength--) {\n          args[leftIndex++] = arguments[++argsIndex];\n        }\n        return apply(fn, isBind ? thisArg : this, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a `_.range` or `_.rangeRight` function.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new range function.\n     */\n    function createRange(fromRight) {\n      return function(start, end, step) {\n        if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n          end = step = undefined;\n        }\n        // Ensure the sign of `-0` is preserved.\n        start = toFinite(start);\n        if (end === undefined) {\n          end = start;\n          start = 0;\n        } else {\n          end = toFinite(end);\n        }\n        step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n        return baseRange(start, end, step, fromRight);\n      };\n    }\n\n    /**\n     * Creates a function that performs a relational operation on two values.\n     *\n     * @private\n     * @param {Function} operator The function to perform the operation.\n     * @returns {Function} Returns the new relational operation function.\n     */\n    function createRelationalOperation(operator) {\n      return function(value, other) {\n        if (!(typeof value == 'string' && typeof other == 'string')) {\n          value = toNumber(value);\n          other = toNumber(other);\n        }\n        return operator(value, other);\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to continue currying.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {Function} wrapFunc The function to create the `func` wrapper.\n     * @param {*} placeholder The placeholder value.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to prepend to those provided to\n     *  the new function.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n      var isCurry = bitmask & WRAP_CURRY_FLAG,\n          newHolders = isCurry ? holders : undefined,\n          newHoldersRight = isCurry ? undefined : holders,\n          newPartials = isCurry ? partials : undefined,\n          newPartialsRight = isCurry ? undefined : partials;\n\n      bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n      bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n      if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n        bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n      }\n      var newData = [\n        func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n        newHoldersRight, argPos, ary, arity\n      ];\n\n      var result = wrapFunc.apply(undefined, newData);\n      if (isLaziable(func)) {\n        setData(result, newData);\n      }\n      result.placeholder = placeholder;\n      return setWrapToString(result, func, bitmask);\n    }\n\n    /**\n     * Creates a function like `_.round`.\n     *\n     * @private\n     * @param {string} methodName The name of the `Math` method to use when rounding.\n     * @returns {Function} Returns the new round function.\n     */\n    function createRound(methodName) {\n      var func = Math[methodName];\n      return function(number, precision) {\n        number = toNumber(number);\n        precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n        if (precision && nativeIsFinite(number)) {\n          // Shift with exponential notation to avoid floating-point issues.\n          // See [MDN](https://mdn.io/round#Examples) for more details.\n          var pair = (toString(number) + 'e').split('e'),\n              value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n          pair = (toString(value) + 'e').split('e');\n          return +(pair[0] + 'e' + (+pair[1] - precision));\n        }\n        return func(number);\n      };\n    }\n\n    /**\n     * Creates a set object of `values`.\n     *\n     * @private\n     * @param {Array} values The values to add to the set.\n     * @returns {Object} Returns the new set.\n     */\n    var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n      return new Set(values);\n    };\n\n    /**\n     * Creates a `_.toPairs` or `_.toPairsIn` function.\n     *\n     * @private\n     * @param {Function} keysFunc The function to get the keys of a given object.\n     * @returns {Function} Returns the new pairs function.\n     */\n    function createToPairs(keysFunc) {\n      return function(object) {\n        var tag = getTag(object);\n        if (tag == mapTag) {\n          return mapToArray(object);\n        }\n        if (tag == setTag) {\n          return setToPairs(object);\n        }\n        return baseToPairs(object, keysFunc(object));\n      };\n    }\n\n    /**\n     * Creates a function that either curries or invokes `func` with optional\n     * `this` binding and partially applied arguments.\n     *\n     * @private\n     * @param {Function|string} func The function or method name to wrap.\n     * @param {number} bitmask The bitmask flags.\n     *    1 - `_.bind`\n     *    2 - `_.bindKey`\n     *    4 - `_.curry` or `_.curryRight` of a bound function\n     *    8 - `_.curry`\n     *   16 - `_.curryRight`\n     *   32 - `_.partial`\n     *   64 - `_.partialRight`\n     *  128 - `_.rearg`\n     *  256 - `_.ary`\n     *  512 - `_.flip`\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to be partially applied.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n      var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n      if (!isBindKey && typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      var length = partials ? partials.length : 0;\n      if (!length) {\n        bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n        partials = holders = undefined;\n      }\n      ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n      arity = arity === undefined ? arity : toInteger(arity);\n      length -= holders ? holders.length : 0;\n\n      if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n        var partialsRight = partials,\n            holdersRight = holders;\n\n        partials = holders = undefined;\n      }\n      var data = isBindKey ? undefined : getData(func);\n\n      var newData = [\n        func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n        argPos, ary, arity\n      ];\n\n      if (data) {\n        mergeData(newData, data);\n      }\n      func = newData[0];\n      bitmask = newData[1];\n      thisArg = newData[2];\n      partials = newData[3];\n      holders = newData[4];\n      arity = newData[9] = newData[9] === undefined\n        ? (isBindKey ? 0 : func.length)\n        : nativeMax(newData[9] - length, 0);\n\n      if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n        bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n      }\n      if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n        var result = createBind(func, bitmask, thisArg);\n      } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n        result = createCurry(func, bitmask, arity);\n      } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n        result = createPartial(func, bitmask, thisArg, partials);\n      } else {\n        result = createHybrid.apply(undefined, newData);\n      }\n      var setter = data ? baseSetData : setData;\n      return setWrapToString(setter(result, newData), func, bitmask);\n    }\n\n    /**\n     * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n     * of source objects to the destination object for all destination properties\n     * that resolve to `undefined`.\n     *\n     * @private\n     * @param {*} objValue The destination value.\n     * @param {*} srcValue The source value.\n     * @param {string} key The key of the property to assign.\n     * @param {Object} object The parent object of `objValue`.\n     * @returns {*} Returns the value to assign.\n     */\n    function customDefaultsAssignIn(objValue, srcValue, key, object) {\n      if (objValue === undefined ||\n          (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n        return srcValue;\n      }\n      return objValue;\n    }\n\n    /**\n     * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n     * objects into destination objects that are passed thru.\n     *\n     * @private\n     * @param {*} objValue The destination value.\n     * @param {*} srcValue The source value.\n     * @param {string} key The key of the property to merge.\n     * @param {Object} object The parent object of `objValue`.\n     * @param {Object} source The parent object of `srcValue`.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     * @returns {*} Returns the value to assign.\n     */\n    function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n      if (isObject(objValue) && isObject(srcValue)) {\n        // Recursively merge objects and arrays (susceptible to call stack limits).\n        stack.set(srcValue, objValue);\n        baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n        stack['delete'](srcValue);\n      }\n      return objValue;\n    }\n\n    /**\n     * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n     * objects.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @param {string} key The key of the property to inspect.\n     * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n     */\n    function customOmitClone(value) {\n      return isPlainObject(value) ? undefined : value;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for arrays with support for\n     * partial deep comparisons.\n     *\n     * @private\n     * @param {Array} array The array to compare.\n     * @param {Array} other The other array to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `array` and `other` objects.\n     * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n     */\n    function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n          arrLength = array.length,\n          othLength = other.length;\n\n      if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n        return false;\n      }\n      // Check that cyclic values are equal.\n      var arrStacked = stack.get(array);\n      var othStacked = stack.get(other);\n      if (arrStacked && othStacked) {\n        return arrStacked == other && othStacked == array;\n      }\n      var index = -1,\n          result = true,\n          seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n      stack.set(array, other);\n      stack.set(other, array);\n\n      // Ignore non-index properties.\n      while (++index < arrLength) {\n        var arrValue = array[index],\n            othValue = other[index];\n\n        if (customizer) {\n          var compared = isPartial\n            ? customizer(othValue, arrValue, index, other, array, stack)\n            : customizer(arrValue, othValue, index, array, other, stack);\n        }\n        if (compared !== undefined) {\n          if (compared) {\n            continue;\n          }\n          result = false;\n          break;\n        }\n        // Recursively compare arrays (susceptible to call stack limits).\n        if (seen) {\n          if (!arraySome(other, function(othValue, othIndex) {\n                if (!cacheHas(seen, othIndex) &&\n                    (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n                  return seen.push(othIndex);\n                }\n              })) {\n            result = false;\n            break;\n          }\n        } else if (!(\n              arrValue === othValue ||\n                equalFunc(arrValue, othValue, bitmask, customizer, stack)\n            )) {\n          result = false;\n          break;\n        }\n      }\n      stack['delete'](array);\n      stack['delete'](other);\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for comparing objects of\n     * the same `toStringTag`.\n     *\n     * **Note:** This function only supports comparing values with tags of\n     * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {string} tag The `toStringTag` of the objects to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n      switch (tag) {\n        case dataViewTag:\n          if ((object.byteLength != other.byteLength) ||\n              (object.byteOffset != other.byteOffset)) {\n            return false;\n          }\n          object = object.buffer;\n          other = other.buffer;\n\n        case arrayBufferTag:\n          if ((object.byteLength != other.byteLength) ||\n              !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n            return false;\n          }\n          return true;\n\n        case boolTag:\n        case dateTag:\n        case numberTag:\n          // Coerce booleans to `1` or `0` and dates to milliseconds.\n          // Invalid dates are coerced to `NaN`.\n          return eq(+object, +other);\n\n        case errorTag:\n          return object.name == other.name && object.message == other.message;\n\n        case regexpTag:\n        case stringTag:\n          // Coerce regexes to strings and treat strings, primitives and objects,\n          // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n          // for more details.\n          return object == (other + '');\n\n        case mapTag:\n          var convert = mapToArray;\n\n        case setTag:\n          var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n          convert || (convert = setToArray);\n\n          if (object.size != other.size && !isPartial) {\n            return false;\n          }\n          // Assume cyclic values are equal.\n          var stacked = stack.get(object);\n          if (stacked) {\n            return stacked == other;\n          }\n          bitmask |= COMPARE_UNORDERED_FLAG;\n\n          // Recursively compare objects (susceptible to call stack limits).\n          stack.set(object, other);\n          var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n          stack['delete'](object);\n          return result;\n\n        case symbolTag:\n          if (symbolValueOf) {\n            return symbolValueOf.call(object) == symbolValueOf.call(other);\n          }\n      }\n      return false;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for objects with support for\n     * partial deep comparisons.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n          objProps = getAllKeys(object),\n          objLength = objProps.length,\n          othProps = getAllKeys(other),\n          othLength = othProps.length;\n\n      if (objLength != othLength && !isPartial) {\n        return false;\n      }\n      var index = objLength;\n      while (index--) {\n        var key = objProps[index];\n        if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n          return false;\n        }\n      }\n      // Check that cyclic values are equal.\n      var objStacked = stack.get(object);\n      var othStacked = stack.get(other);\n      if (objStacked && othStacked) {\n        return objStacked == other && othStacked == object;\n      }\n      var result = true;\n      stack.set(object, other);\n      stack.set(other, object);\n\n      var skipCtor = isPartial;\n      while (++index < objLength) {\n        key = objProps[index];\n        var objValue = object[key],\n            othValue = other[key];\n\n        if (customizer) {\n          var compared = isPartial\n            ? customizer(othValue, objValue, key, other, object, stack)\n            : customizer(objValue, othValue, key, object, other, stack);\n        }\n        // Recursively compare objects (susceptible to call stack limits).\n        if (!(compared === undefined\n              ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n              : compared\n            )) {\n          result = false;\n          break;\n        }\n        skipCtor || (skipCtor = key == 'constructor');\n      }\n      if (result && !skipCtor) {\n        var objCtor = object.constructor,\n            othCtor = other.constructor;\n\n        // Non `Object` object instances with different constructors are not equal.\n        if (objCtor != othCtor &&\n            ('constructor' in object && 'constructor' in other) &&\n            !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n              typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n          result = false;\n        }\n      }\n      stack['delete'](object);\n      stack['delete'](other);\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseRest` which flattens the rest array.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @returns {Function} Returns the new function.\n     */\n    function flatRest(func) {\n      return setToString(overRest(func, undefined, flatten), func + '');\n    }\n\n    /**\n     * Creates an array of own enumerable property names and symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function getAllKeys(object) {\n      return baseGetAllKeys(object, keys, getSymbols);\n    }\n\n    /**\n     * Creates an array of own and inherited enumerable property names and\n     * symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function getAllKeysIn(object) {\n      return baseGetAllKeys(object, keysIn, getSymbolsIn);\n    }\n\n    /**\n     * Gets metadata for `func`.\n     *\n     * @private\n     * @param {Function} func The function to query.\n     * @returns {*} Returns the metadata for `func`.\n     */\n    var getData = !metaMap ? noop : function(func) {\n      return metaMap.get(func);\n    };\n\n    /**\n     * Gets the name of `func`.\n     *\n     * @private\n     * @param {Function} func The function to query.\n     * @returns {string} Returns the function name.\n     */\n    function getFuncName(func) {\n      var result = (func.name + ''),\n          array = realNames[result],\n          length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n      while (length--) {\n        var data = array[length],\n            otherFunc = data.func;\n        if (otherFunc == null || otherFunc == func) {\n          return data.name;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Gets the argument placeholder value for `func`.\n     *\n     * @private\n     * @param {Function} func The function to inspect.\n     * @returns {*} Returns the placeholder value.\n     */\n    function getHolder(func) {\n      var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n      return object.placeholder;\n    }\n\n    /**\n     * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n     * this function returns the custom method, otherwise it returns `baseIteratee`.\n     * If arguments are provided, the chosen function is invoked with them and\n     * its result is returned.\n     *\n     * @private\n     * @param {*} [value] The value to convert to an iteratee.\n     * @param {number} [arity] The arity of the created iteratee.\n     * @returns {Function} Returns the chosen function or its result.\n     */\n    function getIteratee() {\n      var result = lodash.iteratee || iteratee;\n      result = result === iteratee ? baseIteratee : result;\n      return arguments.length ? result(arguments[0], arguments[1]) : result;\n    }\n\n    /**\n     * Gets the data for `map`.\n     *\n     * @private\n     * @param {Object} map The map to query.\n     * @param {string} key The reference key.\n     * @returns {*} Returns the map data.\n     */\n    function getMapData(map, key) {\n      var data = map.__data__;\n      return isKeyable(key)\n        ? data[typeof key == 'string' ? 'string' : 'hash']\n        : data.map;\n    }\n\n    /**\n     * Gets the property names, values, and compare flags of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the match data of `object`.\n     */\n    function getMatchData(object) {\n      var result = keys(object),\n          length = result.length;\n\n      while (length--) {\n        var key = result[length],\n            value = object[key];\n\n        result[length] = [key, value, isStrictComparable(value)];\n      }\n      return result;\n    }\n\n    /**\n     * Gets the native function at `key` of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {string} key The key of the method to get.\n     * @returns {*} Returns the function if it's native, else `undefined`.\n     */\n    function getNative(object, key) {\n      var value = getValue(object, key);\n      return baseIsNative(value) ? value : undefined;\n    }\n\n    /**\n     * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the raw `toStringTag`.\n     */\n    function getRawTag(value) {\n      var isOwn = hasOwnProperty.call(value, symToStringTag),\n          tag = value[symToStringTag];\n\n      try {\n        value[symToStringTag] = undefined;\n        var unmasked = true;\n      } catch (e) {}\n\n      var result = nativeObjectToString.call(value);\n      if (unmasked) {\n        if (isOwn) {\n          value[symToStringTag] = tag;\n        } else {\n          delete value[symToStringTag];\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Creates an array of the own enumerable symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of symbols.\n     */\n    var getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n      if (object == null) {\n        return [];\n      }\n      object = Object(object);\n      return arrayFilter(nativeGetSymbols(object), function(symbol) {\n        return propertyIsEnumerable.call(object, symbol);\n      });\n    };\n\n    /**\n     * Creates an array of the own and inherited enumerable symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of symbols.\n     */\n    var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n      var result = [];\n      while (object) {\n        arrayPush(result, getSymbols(object));\n        object = getPrototype(object);\n      }\n      return result;\n    };\n\n    /**\n     * Gets the `toStringTag` of `value`.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the `toStringTag`.\n     */\n    var getTag = baseGetTag;\n\n    // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n    if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n        (Map && getTag(new Map) != mapTag) ||\n        (Promise && getTag(Promise.resolve()) != promiseTag) ||\n        (Set && getTag(new Set) != setTag) ||\n        (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n      getTag = function(value) {\n        var result = baseGetTag(value),\n            Ctor = result == objectTag ? value.constructor : undefined,\n            ctorString = Ctor ? toSource(Ctor) : '';\n\n        if (ctorString) {\n          switch (ctorString) {\n            case dataViewCtorString: return dataViewTag;\n            case mapCtorString: return mapTag;\n            case promiseCtorString: return promiseTag;\n            case setCtorString: return setTag;\n            case weakMapCtorString: return weakMapTag;\n          }\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Gets the view, applying any `transforms` to the `start` and `end` positions.\n     *\n     * @private\n     * @param {number} start The start of the view.\n     * @param {number} end The end of the view.\n     * @param {Array} transforms The transformations to apply to the view.\n     * @returns {Object} Returns an object containing the `start` and `end`\n     *  positions of the view.\n     */\n    function getView(start, end, transforms) {\n      var index = -1,\n          length = transforms.length;\n\n      while (++index < length) {\n        var data = transforms[index],\n            size = data.size;\n\n        switch (data.type) {\n          case 'drop':      start += size; break;\n          case 'dropRight': end -= size; break;\n          case 'take':      end = nativeMin(end, start + size); break;\n          case 'takeRight': start = nativeMax(start, end - size); break;\n        }\n      }\n      return { 'start': start, 'end': end };\n    }\n\n    /**\n     * Extracts wrapper details from the `source` body comment.\n     *\n     * @private\n     * @param {string} source The source to inspect.\n     * @returns {Array} Returns the wrapper details.\n     */\n    function getWrapDetails(source) {\n      var match = source.match(reWrapDetails);\n      return match ? match[1].split(reSplitDetails) : [];\n    }\n\n    /**\n     * Checks if `path` exists on `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @param {Function} hasFunc The function to check properties.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     */\n    function hasPath(object, path, hasFunc) {\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length,\n          result = false;\n\n      while (++index < length) {\n        var key = toKey(path[index]);\n        if (!(result = object != null && hasFunc(object, key))) {\n          break;\n        }\n        object = object[key];\n      }\n      if (result || ++index != length) {\n        return result;\n      }\n      length = object == null ? 0 : object.length;\n      return !!length && isLength(length) && isIndex(key, length) &&\n        (isArray(object) || isArguments(object));\n    }\n\n    /**\n     * Initializes an array clone.\n     *\n     * @private\n     * @param {Array} array The array to clone.\n     * @returns {Array} Returns the initialized clone.\n     */\n    function initCloneArray(array) {\n      var length = array.length,\n          result = new array.constructor(length);\n\n      // Add properties assigned by `RegExp#exec`.\n      if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n        result.index = array.index;\n        result.input = array.input;\n      }\n      return result;\n    }\n\n    /**\n     * Initializes an object clone.\n     *\n     * @private\n     * @param {Object} object The object to clone.\n     * @returns {Object} Returns the initialized clone.\n     */\n    function initCloneObject(object) {\n      return (typeof object.constructor == 'function' && !isPrototype(object))\n        ? baseCreate(getPrototype(object))\n        : {};\n    }\n\n    /**\n     * Initializes an object clone based on its `toStringTag`.\n     *\n     * **Note:** This function only supports cloning values with tags of\n     * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n     *\n     * @private\n     * @param {Object} object The object to clone.\n     * @param {string} tag The `toStringTag` of the object to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the initialized clone.\n     */\n    function initCloneByTag(object, tag, isDeep) {\n      var Ctor = object.constructor;\n      switch (tag) {\n        case arrayBufferTag:\n          return cloneArrayBuffer(object);\n\n        case boolTag:\n        case dateTag:\n          return new Ctor(+object);\n\n        case dataViewTag:\n          return cloneDataView(object, isDeep);\n\n        case float32Tag: case float64Tag:\n        case int8Tag: case int16Tag: case int32Tag:\n        case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n          return cloneTypedArray(object, isDeep);\n\n        case mapTag:\n          return new Ctor;\n\n        case numberTag:\n        case stringTag:\n          return new Ctor(object);\n\n        case regexpTag:\n          return cloneRegExp(object);\n\n        case setTag:\n          return new Ctor;\n\n        case symbolTag:\n          return cloneSymbol(object);\n      }\n    }\n\n    /**\n     * Inserts wrapper `details` in a comment at the top of the `source` body.\n     *\n     * @private\n     * @param {string} source The source to modify.\n     * @returns {Array} details The details to insert.\n     * @returns {string} Returns the modified source.\n     */\n    function insertWrapDetails(source, details) {\n      var length = details.length;\n      if (!length) {\n        return source;\n      }\n      var lastIndex = length - 1;\n      details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n      details = details.join(length > 2 ? ', ' : ' ');\n      return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n    }\n\n    /**\n     * Checks if `value` is a flattenable `arguments` object or array.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n     */\n    function isFlattenable(value) {\n      return isArray(value) || isArguments(value) ||\n        !!(spreadableSymbol && value && value[spreadableSymbol]);\n    }\n\n    /**\n     * Checks if `value` is a valid array-like index.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n     * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n     */\n    function isIndex(value, length) {\n      var type = typeof value;\n      length = length == null ? MAX_SAFE_INTEGER : length;\n\n      return !!length &&\n        (type == 'number' ||\n          (type != 'symbol' && reIsUint.test(value))) &&\n            (value > -1 && value % 1 == 0 && value < length);\n    }\n\n    /**\n     * Checks if the given arguments are from an iteratee call.\n     *\n     * @private\n     * @param {*} value The potential iteratee value argument.\n     * @param {*} index The potential iteratee index or key argument.\n     * @param {*} object The potential iteratee object argument.\n     * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n     *  else `false`.\n     */\n    function isIterateeCall(value, index, object) {\n      if (!isObject(object)) {\n        return false;\n      }\n      var type = typeof index;\n      if (type == 'number'\n            ? (isArrayLike(object) && isIndex(index, object.length))\n            : (type == 'string' && index in object)\n          ) {\n        return eq(object[index], value);\n      }\n      return false;\n    }\n\n    /**\n     * Checks if `value` is a property name and not a property path.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @param {Object} [object] The object to query keys on.\n     * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n     */\n    function isKey(value, object) {\n      if (isArray(value)) {\n        return false;\n      }\n      var type = typeof value;\n      if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n          value == null || isSymbol(value)) {\n        return true;\n      }\n      return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n        (object != null && value in Object(object));\n    }\n\n    /**\n     * Checks if `value` is suitable for use as unique object key.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n     */\n    function isKeyable(value) {\n      var type = typeof value;\n      return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n        ? (value !== '__proto__')\n        : (value === null);\n    }\n\n    /**\n     * Checks if `func` has a lazy counterpart.\n     *\n     * @private\n     * @param {Function} func The function to check.\n     * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n     *  else `false`.\n     */\n    function isLaziable(func) {\n      var funcName = getFuncName(func),\n          other = lodash[funcName];\n\n      if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n        return false;\n      }\n      if (func === other) {\n        return true;\n      }\n      var data = getData(other);\n      return !!data && func === data[0];\n    }\n\n    /**\n     * Checks if `func` has its source masked.\n     *\n     * @private\n     * @param {Function} func The function to check.\n     * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n     */\n    function isMasked(func) {\n      return !!maskSrcKey && (maskSrcKey in func);\n    }\n\n    /**\n     * Checks if `func` is capable of being masked.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n     */\n    var isMaskable = coreJsData ? isFunction : stubFalse;\n\n    /**\n     * Checks if `value` is likely a prototype object.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n     */\n    function isPrototype(value) {\n      var Ctor = value && value.constructor,\n          proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n      return value === proto;\n    }\n\n    /**\n     * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` if suitable for strict\n     *  equality comparisons, else `false`.\n     */\n    function isStrictComparable(value) {\n      return value === value && !isObject(value);\n    }\n\n    /**\n     * A specialized version of `matchesProperty` for source values suitable\n     * for strict equality comparisons, i.e. `===`.\n     *\n     * @private\n     * @param {string} key The key of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function matchesStrictComparable(key, srcValue) {\n      return function(object) {\n        if (object == null) {\n          return false;\n        }\n        return object[key] === srcValue &&\n          (srcValue !== undefined || (key in Object(object)));\n      };\n    }\n\n    /**\n     * A specialized version of `_.memoize` which clears the memoized function's\n     * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n     *\n     * @private\n     * @param {Function} func The function to have its output memoized.\n     * @returns {Function} Returns the new memoized function.\n     */\n    function memoizeCapped(func) {\n      var result = memoize(func, function(key) {\n        if (cache.size === MAX_MEMOIZE_SIZE) {\n          cache.clear();\n        }\n        return key;\n      });\n\n      var cache = result.cache;\n      return result;\n    }\n\n    /**\n     * Merges the function metadata of `source` into `data`.\n     *\n     * Merging metadata reduces the number of wrappers used to invoke a function.\n     * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n     * may be applied regardless of execution order. Methods like `_.ary` and\n     * `_.rearg` modify function arguments, making the order in which they are\n     * executed important, preventing the merging of metadata. However, we make\n     * an exception for a safe combined case where curried functions have `_.ary`\n     * and or `_.rearg` applied.\n     *\n     * @private\n     * @param {Array} data The destination metadata.\n     * @param {Array} source The source metadata.\n     * @returns {Array} Returns `data`.\n     */\n    function mergeData(data, source) {\n      var bitmask = data[1],\n          srcBitmask = source[1],\n          newBitmask = bitmask | srcBitmask,\n          isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n      var isCombo =\n        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n        ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n      // Exit early if metadata can't be merged.\n      if (!(isCommon || isCombo)) {\n        return data;\n      }\n      // Use source `thisArg` if available.\n      if (srcBitmask & WRAP_BIND_FLAG) {\n        data[2] = source[2];\n        // Set when currying a bound function.\n        newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n      }\n      // Compose partial arguments.\n      var value = source[3];\n      if (value) {\n        var partials = data[3];\n        data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n        data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n      }\n      // Compose partial right arguments.\n      value = source[5];\n      if (value) {\n        partials = data[5];\n        data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n        data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n      }\n      // Use source `argPos` if available.\n      value = source[7];\n      if (value) {\n        data[7] = value;\n      }\n      // Use source `ary` if it's smaller.\n      if (srcBitmask & WRAP_ARY_FLAG) {\n        data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n      }\n      // Use source `arity` if one is not provided.\n      if (data[9] == null) {\n        data[9] = source[9];\n      }\n      // Use source `func` and merge bitmasks.\n      data[0] = source[0];\n      data[1] = newBitmask;\n\n      return data;\n    }\n\n    /**\n     * This function is like\n     * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n     * except that it includes inherited enumerable properties.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function nativeKeysIn(object) {\n      var result = [];\n      if (object != null) {\n        for (var key in Object(object)) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Converts `value` to a string using `Object.prototype.toString`.\n     *\n     * @private\n     * @param {*} value The value to convert.\n     * @returns {string} Returns the converted string.\n     */\n    function objectToString(value) {\n      return nativeObjectToString.call(value);\n    }\n\n    /**\n     * A specialized version of `baseRest` which transforms the rest array.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @param {Function} transform The rest array transform.\n     * @returns {Function} Returns the new function.\n     */\n    function overRest(func, start, transform) {\n      start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n      return function() {\n        var args = arguments,\n            index = -1,\n            length = nativeMax(args.length - start, 0),\n            array = Array(length);\n\n        while (++index < length) {\n          array[index] = args[start + index];\n        }\n        index = -1;\n        var otherArgs = Array(start + 1);\n        while (++index < start) {\n          otherArgs[index] = args[index];\n        }\n        otherArgs[start] = transform(array);\n        return apply(func, this, otherArgs);\n      };\n    }\n\n    /**\n     * Gets the parent value at `path` of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array} path The path to get the parent value of.\n     * @returns {*} Returns the parent value.\n     */\n    function parent(object, path) {\n      return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n    }\n\n    /**\n     * Reorder `array` according to the specified indexes where the element at\n     * the first index is assigned as the first element, the element at\n     * the second index is assigned as the second element, and so on.\n     *\n     * @private\n     * @param {Array} array The array to reorder.\n     * @param {Array} indexes The arranged array indexes.\n     * @returns {Array} Returns `array`.\n     */\n    function reorder(array, indexes) {\n      var arrLength = array.length,\n          length = nativeMin(indexes.length, arrLength),\n          oldArray = copyArray(array);\n\n      while (length--) {\n        var index = indexes[length];\n        array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n      }\n      return array;\n    }\n\n    /**\n     * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {string} key The key of the property to get.\n     * @returns {*} Returns the property value.\n     */\n    function safeGet(object, key) {\n      if (key === 'constructor' && typeof object[key] === 'function') {\n        return;\n      }\n\n      if (key == '__proto__') {\n        return;\n      }\n\n      return object[key];\n    }\n\n    /**\n     * Sets metadata for `func`.\n     *\n     * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n     * period of time, it will trip its breaker and transition to an identity\n     * function to avoid garbage collection pauses in V8. See\n     * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n     * for more details.\n     *\n     * @private\n     * @param {Function} func The function to associate metadata with.\n     * @param {*} data The metadata.\n     * @returns {Function} Returns `func`.\n     */\n    var setData = shortOut(baseSetData);\n\n    /**\n     * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n     *\n     * @private\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @returns {number|Object} Returns the timer id or timeout object.\n     */\n    var setTimeout = ctxSetTimeout || function(func, wait) {\n      return root.setTimeout(func, wait);\n    };\n\n    /**\n     * Sets the `toString` method of `func` to return `string`.\n     *\n     * @private\n     * @param {Function} func The function to modify.\n     * @param {Function} string The `toString` result.\n     * @returns {Function} Returns `func`.\n     */\n    var setToString = shortOut(baseSetToString);\n\n    /**\n     * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n     * with wrapper details in a comment at the top of the source body.\n     *\n     * @private\n     * @param {Function} wrapper The function to modify.\n     * @param {Function} reference The reference function.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @returns {Function} Returns `wrapper`.\n     */\n    function setWrapToString(wrapper, reference, bitmask) {\n      var source = (reference + '');\n      return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n    }\n\n    /**\n     * Creates a function that'll short out and invoke `identity` instead\n     * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n     * milliseconds.\n     *\n     * @private\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new shortable function.\n     */\n    function shortOut(func) {\n      var count = 0,\n          lastCalled = 0;\n\n      return function() {\n        var stamp = nativeNow(),\n            remaining = HOT_SPAN - (stamp - lastCalled);\n\n        lastCalled = stamp;\n        if (remaining > 0) {\n          if (++count >= HOT_COUNT) {\n            return arguments[0];\n          }\n        } else {\n          count = 0;\n        }\n        return func.apply(undefined, arguments);\n      };\n    }\n\n    /**\n     * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n     *\n     * @private\n     * @param {Array} array The array to shuffle.\n     * @param {number} [size=array.length] The size of `array`.\n     * @returns {Array} Returns `array`.\n     */\n    function shuffleSelf(array, size) {\n      var index = -1,\n          length = array.length,\n          lastIndex = length - 1;\n\n      size = size === undefined ? length : size;\n      while (++index < size) {\n        var rand = baseRandom(index, lastIndex),\n            value = array[rand];\n\n        array[rand] = array[index];\n        array[index] = value;\n      }\n      array.length = size;\n      return array;\n    }\n\n    /**\n     * Converts `string` to a property path array.\n     *\n     * @private\n     * @param {string} string The string to convert.\n     * @returns {Array} Returns the property path array.\n     */\n    var stringToPath = memoizeCapped(function(string) {\n      var result = [];\n      if (string.charCodeAt(0) === 46 /* . */) {\n        result.push('');\n      }\n      string.replace(rePropName, function(match, number, quote, subString) {\n        result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n      });\n      return result;\n    });\n\n    /**\n     * Converts `value` to a string key if it's not a string or symbol.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {string|symbol} Returns the key.\n     */\n    function toKey(value) {\n      if (typeof value == 'string' || isSymbol(value)) {\n        return value;\n      }\n      var result = (value + '');\n      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n    }\n\n    /**\n     * Converts `func` to its source code.\n     *\n     * @private\n     * @param {Function} func The function to convert.\n     * @returns {string} Returns the source code.\n     */\n    function toSource(func) {\n      if (func != null) {\n        try {\n          return funcToString.call(func);\n        } catch (e) {}\n        try {\n          return (func + '');\n        } catch (e) {}\n      }\n      return '';\n    }\n\n    /**\n     * Updates wrapper `details` based on `bitmask` flags.\n     *\n     * @private\n     * @returns {Array} details The details to modify.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @returns {Array} Returns `details`.\n     */\n    function updateWrapDetails(details, bitmask) {\n      arrayEach(wrapFlags, function(pair) {\n        var value = '_.' + pair[0];\n        if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n          details.push(value);\n        }\n      });\n      return details.sort();\n    }\n\n    /**\n     * Creates a clone of `wrapper`.\n     *\n     * @private\n     * @param {Object} wrapper The wrapper to clone.\n     * @returns {Object} Returns the cloned wrapper.\n     */\n    function wrapperClone(wrapper) {\n      if (wrapper instanceof LazyWrapper) {\n        return wrapper.clone();\n      }\n      var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n      result.__actions__ = copyArray(wrapper.__actions__);\n      result.__index__  = wrapper.__index__;\n      result.__values__ = wrapper.__values__;\n      return result;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an array of elements split into groups the length of `size`.\n     * If `array` can't be split evenly, the final chunk will be the remaining\n     * elements.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to process.\n     * @param {number} [size=1] The length of each chunk\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the new array of chunks.\n     * @example\n     *\n     * _.chunk(['a', 'b', 'c', 'd'], 2);\n     * // => [['a', 'b'], ['c', 'd']]\n     *\n     * _.chunk(['a', 'b', 'c', 'd'], 3);\n     * // => [['a', 'b', 'c'], ['d']]\n     */\n    function chunk(array, size, guard) {\n      if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\n        size = 1;\n      } else {\n        size = nativeMax(toInteger(size), 0);\n      }\n      var length = array == null ? 0 : array.length;\n      if (!length || size < 1) {\n        return [];\n      }\n      var index = 0,\n          resIndex = 0,\n          result = Array(nativeCeil(length / size));\n\n      while (index < length) {\n        result[resIndex++] = baseSlice(array, index, (index += size));\n      }\n      return result;\n    }\n\n    /**\n     * Creates an array with all falsey values removed. The values `false`, `null`,\n     * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to compact.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.compact([0, 1, false, 2, '', 3]);\n     * // => [1, 2, 3]\n     */\n    function compact(array) {\n      var index = -1,\n          length = array == null ? 0 : array.length,\n          resIndex = 0,\n          result = [];\n\n      while (++index < length) {\n        var value = array[index];\n        if (value) {\n          result[resIndex++] = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Creates a new array concatenating `array` with any additional arrays\n     * and/or values.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to concatenate.\n     * @param {...*} [values] The values to concatenate.\n     * @returns {Array} Returns the new concatenated array.\n     * @example\n     *\n     * var array = [1];\n     * var other = _.concat(array, 2, [3], [[4]]);\n     *\n     * console.log(other);\n     * // => [1, 2, 3, [4]]\n     *\n     * console.log(array);\n     * // => [1]\n     */\n    function concat() {\n      var length = arguments.length;\n      if (!length) {\n        return [];\n      }\n      var args = Array(length - 1),\n          array = arguments[0],\n          index = length;\n\n      while (index--) {\n        args[index - 1] = arguments[index];\n      }\n      return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n    }\n\n    /**\n     * Creates an array of `array` values not included in the other given arrays\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. The order and references of result values are\n     * determined by the first array.\n     *\n     * **Note:** Unlike `_.pullAll`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.without, _.xor\n     * @example\n     *\n     * _.difference([2, 1], [2, 3]);\n     * // => [1]\n     */\n    var difference = baseRest(function(array, values) {\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n        : [];\n    });\n\n    /**\n     * This method is like `_.difference` except that it accepts `iteratee` which\n     * is invoked for each element of `array` and `values` to generate the criterion\n     * by which they're compared. The order and references of result values are\n     * determined by the first array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n     * // => [{ 'x': 2 }]\n     */\n    var differenceBy = baseRest(function(array, values) {\n      var iteratee = last(values);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))\n        : [];\n    });\n\n    /**\n     * This method is like `_.difference` except that it accepts `comparator`\n     * which is invoked to compare elements of `array` to `values`. The order and\n     * references of result values are determined by the first array. The comparator\n     * is invoked with two arguments: (arrVal, othVal).\n     *\n     * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     *\n     * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n     * // => [{ 'x': 2, 'y': 1 }]\n     */\n    var differenceWith = baseRest(function(array, values) {\n      var comparator = last(values);\n      if (isArrayLikeObject(comparator)) {\n        comparator = undefined;\n      }\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n        : [];\n    });\n\n    /**\n     * Creates a slice of `array` with `n` elements dropped from the beginning.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to drop.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.drop([1, 2, 3]);\n     * // => [2, 3]\n     *\n     * _.drop([1, 2, 3], 2);\n     * // => [3]\n     *\n     * _.drop([1, 2, 3], 5);\n     * // => []\n     *\n     * _.drop([1, 2, 3], 0);\n     * // => [1, 2, 3]\n     */\n    function drop(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      return baseSlice(array, n < 0 ? 0 : n, length);\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements dropped from the end.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to drop.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.dropRight([1, 2, 3]);\n     * // => [1, 2]\n     *\n     * _.dropRight([1, 2, 3], 2);\n     * // => [1]\n     *\n     * _.dropRight([1, 2, 3], 5);\n     * // => []\n     *\n     * _.dropRight([1, 2, 3], 0);\n     * // => [1, 2, 3]\n     */\n    function dropRight(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      n = length - n;\n      return baseSlice(array, 0, n < 0 ? 0 : n);\n    }\n\n    /**\n     * Creates a slice of `array` excluding elements dropped from the end.\n     * Elements are dropped until `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.dropRightWhile(users, function(o) { return !o.active; });\n     * // => objects for ['barney']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.dropRightWhile(users, ['active', false]);\n     * // => objects for ['barney']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.dropRightWhile(users, 'active');\n     * // => objects for ['barney', 'fred', 'pebbles']\n     */\n    function dropRightWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), true, true)\n        : [];\n    }\n\n    /**\n     * Creates a slice of `array` excluding elements dropped from the beginning.\n     * Elements are dropped until `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.dropWhile(users, function(o) { return !o.active; });\n     * // => objects for ['pebbles']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.dropWhile(users, { 'user': 'barney', 'active': false });\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.dropWhile(users, ['active', false]);\n     * // => objects for ['pebbles']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.dropWhile(users, 'active');\n     * // => objects for ['barney', 'fred', 'pebbles']\n     */\n    function dropWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), true)\n        : [];\n    }\n\n    /**\n     * Fills elements of `array` with `value` from `start` up to, but not\n     * including, `end`.\n     *\n     * **Note:** This method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Array\n     * @param {Array} array The array to fill.\n     * @param {*} value The value to fill `array` with.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _.fill(array, 'a');\n     * console.log(array);\n     * // => ['a', 'a', 'a']\n     *\n     * _.fill(Array(3), 2);\n     * // => [2, 2, 2]\n     *\n     * _.fill([4, 6, 8, 10], '*', 1, 3);\n     * // => [4, '*', '*', 10]\n     */\n    function fill(array, value, start, end) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n        start = 0;\n        end = length;\n      }\n      return baseFill(array, value, start, end);\n    }\n\n    /**\n     * This method is like `_.find` except that it returns the index of the first\n     * element `predicate` returns truthy for instead of the element itself.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {number} Returns the index of the found element, else `-1`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.findIndex(users, function(o) { return o.user == 'barney'; });\n     * // => 0\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findIndex(users, { 'user': 'fred', 'active': false });\n     * // => 1\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findIndex(users, ['active', false]);\n     * // => 0\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findIndex(users, 'active');\n     * // => 2\n     */\n    function findIndex(array, predicate, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = fromIndex == null ? 0 : toInteger(fromIndex);\n      if (index < 0) {\n        index = nativeMax(length + index, 0);\n      }\n      return baseFindIndex(array, getIteratee(predicate, 3), index);\n    }\n\n    /**\n     * This method is like `_.findIndex` except that it iterates over elements\n     * of `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=array.length-1] The index to search from.\n     * @returns {number} Returns the index of the found element, else `-1`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n     * // => 2\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n     * // => 0\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findLastIndex(users, ['active', false]);\n     * // => 2\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findLastIndex(users, 'active');\n     * // => 0\n     */\n    function findLastIndex(array, predicate, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = length - 1;\n      if (fromIndex !== undefined) {\n        index = toInteger(fromIndex);\n        index = fromIndex < 0\n          ? nativeMax(length + index, 0)\n          : nativeMin(index, length - 1);\n      }\n      return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n    }\n\n    /**\n     * Flattens `array` a single level deep.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * _.flatten([1, [2, [3, [4]], 5]]);\n     * // => [1, 2, [3, [4]], 5]\n     */\n    function flatten(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseFlatten(array, 1) : [];\n    }\n\n    /**\n     * Recursively flattens `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * _.flattenDeep([1, [2, [3, [4]], 5]]);\n     * // => [1, 2, 3, 4, 5]\n     */\n    function flattenDeep(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseFlatten(array, INFINITY) : [];\n    }\n\n    /**\n     * Recursively flatten `array` up to `depth` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.4.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @param {number} [depth=1] The maximum recursion depth.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * var array = [1, [2, [3, [4]], 5]];\n     *\n     * _.flattenDepth(array, 1);\n     * // => [1, 2, [3, [4]], 5]\n     *\n     * _.flattenDepth(array, 2);\n     * // => [1, 2, 3, [4], 5]\n     */\n    function flattenDepth(array, depth) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      depth = depth === undefined ? 1 : toInteger(depth);\n      return baseFlatten(array, depth);\n    }\n\n    /**\n     * The inverse of `_.toPairs`; this method returns an object composed\n     * from key-value `pairs`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} pairs The key-value pairs.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.fromPairs([['a', 1], ['b', 2]]);\n     * // => { 'a': 1, 'b': 2 }\n     */\n    function fromPairs(pairs) {\n      var index = -1,\n          length = pairs == null ? 0 : pairs.length,\n          result = {};\n\n      while (++index < length) {\n        var pair = pairs[index];\n        result[pair[0]] = pair[1];\n      }\n      return result;\n    }\n\n    /**\n     * Gets the first element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @alias first\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {*} Returns the first element of `array`.\n     * @example\n     *\n     * _.head([1, 2, 3]);\n     * // => 1\n     *\n     * _.head([]);\n     * // => undefined\n     */\n    function head(array) {\n      return (array && array.length) ? array[0] : undefined;\n    }\n\n    /**\n     * Gets the index at which the first occurrence of `value` is found in `array`\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. If `fromIndex` is negative, it's used as the\n     * offset from the end of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.indexOf([1, 2, 1, 2], 2);\n     * // => 1\n     *\n     * // Search from the `fromIndex`.\n     * _.indexOf([1, 2, 1, 2], 2, 2);\n     * // => 3\n     */\n    function indexOf(array, value, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = fromIndex == null ? 0 : toInteger(fromIndex);\n      if (index < 0) {\n        index = nativeMax(length + index, 0);\n      }\n      return baseIndexOf(array, value, index);\n    }\n\n    /**\n     * Gets all but the last element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.initial([1, 2, 3]);\n     * // => [1, 2]\n     */\n    function initial(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseSlice(array, 0, -1) : [];\n    }\n\n    /**\n     * Creates an array of unique values that are included in all given arrays\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. The order and references of result values are\n     * determined by the first array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * _.intersection([2, 1], [2, 3]);\n     * // => [2]\n     */\n    var intersection = baseRest(function(arrays) {\n      var mapped = arrayMap(arrays, castArrayLikeObject);\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped)\n        : [];\n    });\n\n    /**\n     * This method is like `_.intersection` except that it accepts `iteratee`\n     * which is invoked for each element of each `arrays` to generate the criterion\n     * by which they're compared. The order and references of result values are\n     * determined by the first array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [2.1]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }]\n     */\n    var intersectionBy = baseRest(function(arrays) {\n      var iteratee = last(arrays),\n          mapped = arrayMap(arrays, castArrayLikeObject);\n\n      if (iteratee === last(mapped)) {\n        iteratee = undefined;\n      } else {\n        mapped.pop();\n      }\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped, getIteratee(iteratee, 2))\n        : [];\n    });\n\n    /**\n     * This method is like `_.intersection` except that it accepts `comparator`\n     * which is invoked to compare elements of `arrays`. The order and references\n     * of result values are determined by the first array. The comparator is\n     * invoked with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.intersectionWith(objects, others, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }]\n     */\n    var intersectionWith = baseRest(function(arrays) {\n      var comparator = last(arrays),\n          mapped = arrayMap(arrays, castArrayLikeObject);\n\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      if (comparator) {\n        mapped.pop();\n      }\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped, undefined, comparator)\n        : [];\n    });\n\n    /**\n     * Converts all elements in `array` into a string separated by `separator`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to convert.\n     * @param {string} [separator=','] The element separator.\n     * @returns {string} Returns the joined string.\n     * @example\n     *\n     * _.join(['a', 'b', 'c'], '~');\n     * // => 'a~b~c'\n     */\n    function join(array, separator) {\n      return array == null ? '' : nativeJoin.call(array, separator);\n    }\n\n    /**\n     * Gets the last element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {*} Returns the last element of `array`.\n     * @example\n     *\n     * _.last([1, 2, 3]);\n     * // => 3\n     */\n    function last(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? array[length - 1] : undefined;\n    }\n\n    /**\n     * This method is like `_.indexOf` except that it iterates over elements of\n     * `array` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=array.length-1] The index to search from.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.lastIndexOf([1, 2, 1, 2], 2);\n     * // => 3\n     *\n     * // Search from the `fromIndex`.\n     * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n     * // => 1\n     */\n    function lastIndexOf(array, value, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = length;\n      if (fromIndex !== undefined) {\n        index = toInteger(fromIndex);\n        index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n      }\n      return value === value\n        ? strictLastIndexOf(array, value, index)\n        : baseFindIndex(array, baseIsNaN, index, true);\n    }\n\n    /**\n     * Gets the element at index `n` of `array`. If `n` is negative, the nth\n     * element from the end is returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.11.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=0] The index of the element to return.\n     * @returns {*} Returns the nth element of `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'd'];\n     *\n     * _.nth(array, 1);\n     * // => 'b'\n     *\n     * _.nth(array, -2);\n     * // => 'c';\n     */\n    function nth(array, n) {\n      return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\n    }\n\n    /**\n     * Removes all given values from `array` using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n     * to remove elements from an array by predicate.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {...*} [values] The values to remove.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n     *\n     * _.pull(array, 'a', 'c');\n     * console.log(array);\n     * // => ['b', 'b']\n     */\n    var pull = baseRest(pullAll);\n\n    /**\n     * This method is like `_.pull` except that it accepts an array of values to remove.\n     *\n     * **Note:** Unlike `_.difference`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n     *\n     * _.pullAll(array, ['a', 'c']);\n     * console.log(array);\n     * // => ['b', 'b']\n     */\n    function pullAll(array, values) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values)\n        : array;\n    }\n\n    /**\n     * This method is like `_.pullAll` except that it accepts `iteratee` which is\n     * invoked for each element of `array` and `values` to generate the criterion\n     * by which they're compared. The iteratee is invoked with one argument: (value).\n     *\n     * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n     *\n     * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n     * console.log(array);\n     * // => [{ 'x': 2 }]\n     */\n    function pullAllBy(array, values, iteratee) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values, getIteratee(iteratee, 2))\n        : array;\n    }\n\n    /**\n     * This method is like `_.pullAll` except that it accepts `comparator` which\n     * is invoked to compare elements of `array` to `values`. The comparator is\n     * invoked with two arguments: (arrVal, othVal).\n     *\n     * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n     *\n     * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n     * console.log(array);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n     */\n    function pullAllWith(array, values, comparator) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values, undefined, comparator)\n        : array;\n    }\n\n    /**\n     * Removes elements from `array` corresponding to `indexes` and returns an\n     * array of removed elements.\n     *\n     * **Note:** Unlike `_.at`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n     * @returns {Array} Returns the new array of removed elements.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'd'];\n     * var pulled = _.pullAt(array, [1, 3]);\n     *\n     * console.log(array);\n     * // => ['a', 'c']\n     *\n     * console.log(pulled);\n     * // => ['b', 'd']\n     */\n    var pullAt = flatRest(function(array, indexes) {\n      var length = array == null ? 0 : array.length,\n          result = baseAt(array, indexes);\n\n      basePullAt(array, arrayMap(indexes, function(index) {\n        return isIndex(index, length) ? +index : index;\n      }).sort(compareAscending));\n\n      return result;\n    });\n\n    /**\n     * Removes all elements from `array` that `predicate` returns truthy for\n     * and returns an array of the removed elements. The predicate is invoked\n     * with three arguments: (value, index, array).\n     *\n     * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n     * to pull elements from an array by value.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new array of removed elements.\n     * @example\n     *\n     * var array = [1, 2, 3, 4];\n     * var evens = _.remove(array, function(n) {\n     *   return n % 2 == 0;\n     * });\n     *\n     * console.log(array);\n     * // => [1, 3]\n     *\n     * console.log(evens);\n     * // => [2, 4]\n     */\n    function remove(array, predicate) {\n      var result = [];\n      if (!(array && array.length)) {\n        return result;\n      }\n      var index = -1,\n          indexes = [],\n          length = array.length;\n\n      predicate = getIteratee(predicate, 3);\n      while (++index < length) {\n        var value = array[index];\n        if (predicate(value, index, array)) {\n          result.push(value);\n          indexes.push(index);\n        }\n      }\n      basePullAt(array, indexes);\n      return result;\n    }\n\n    /**\n     * Reverses `array` so that the first element becomes the last, the second\n     * element becomes the second to last, and so on.\n     *\n     * **Note:** This method mutates `array` and is based on\n     * [`Array#reverse`](https://mdn.io/Array/reverse).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _.reverse(array);\n     * // => [3, 2, 1]\n     *\n     * console.log(array);\n     * // => [3, 2, 1]\n     */\n    function reverse(array) {\n      return array == null ? array : nativeReverse.call(array);\n    }\n\n    /**\n     * Creates a slice of `array` from `start` up to, but not including, `end`.\n     *\n     * **Note:** This method is used instead of\n     * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n     * returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to slice.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function slice(array, start, end) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n        start = 0;\n        end = length;\n      }\n      else {\n        start = start == null ? 0 : toInteger(start);\n        end = end === undefined ? length : toInteger(end);\n      }\n      return baseSlice(array, start, end);\n    }\n\n    /**\n     * Uses a binary search to determine the lowest index at which `value`\n     * should be inserted into `array` in order to maintain its sort order.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * _.sortedIndex([30, 50], 40);\n     * // => 1\n     */\n    function sortedIndex(array, value) {\n      return baseSortedIndex(array, value);\n    }\n\n    /**\n     * This method is like `_.sortedIndex` except that it accepts `iteratee`\n     * which is invoked for `value` and each element of `array` to compute their\n     * sort ranking. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * var objects = [{ 'x': 4 }, { 'x': 5 }];\n     *\n     * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n     * // => 0\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n     * // => 0\n     */\n    function sortedIndexBy(array, value, iteratee) {\n      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n    }\n\n    /**\n     * This method is like `_.indexOf` except that it performs a binary\n     * search on a sorted `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n     * // => 1\n     */\n    function sortedIndexOf(array, value) {\n      var length = array == null ? 0 : array.length;\n      if (length) {\n        var index = baseSortedIndex(array, value);\n        if (index < length && eq(array[index], value)) {\n          return index;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * This method is like `_.sortedIndex` except that it returns the highest\n     * index at which `value` should be inserted into `array` in order to\n     * maintain its sort order.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n     * // => 4\n     */\n    function sortedLastIndex(array, value) {\n      return baseSortedIndex(array, value, true);\n    }\n\n    /**\n     * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n     * which is invoked for `value` and each element of `array` to compute their\n     * sort ranking. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * var objects = [{ 'x': 4 }, { 'x': 5 }];\n     *\n     * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n     * // => 1\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n     * // => 1\n     */\n    function sortedLastIndexBy(array, value, iteratee) {\n      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n    }\n\n    /**\n     * This method is like `_.lastIndexOf` except that it performs a binary\n     * search on a sorted `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n     * // => 3\n     */\n    function sortedLastIndexOf(array, value) {\n      var length = array == null ? 0 : array.length;\n      if (length) {\n        var index = baseSortedIndex(array, value, true) - 1;\n        if (eq(array[index], value)) {\n          return index;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * This method is like `_.uniq` except that it's designed and optimized\n     * for sorted arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.sortedUniq([1, 1, 2]);\n     * // => [1, 2]\n     */\n    function sortedUniq(array) {\n      return (array && array.length)\n        ? baseSortedUniq(array)\n        : [];\n    }\n\n    /**\n     * This method is like `_.uniqBy` except that it's designed and optimized\n     * for sorted arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n     * // => [1.1, 2.3]\n     */\n    function sortedUniqBy(array, iteratee) {\n      return (array && array.length)\n        ? baseSortedUniq(array, getIteratee(iteratee, 2))\n        : [];\n    }\n\n    /**\n     * Gets all but the first element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.tail([1, 2, 3]);\n     * // => [2, 3]\n     */\n    function tail(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseSlice(array, 1, length) : [];\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements taken from the beginning.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to take.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.take([1, 2, 3]);\n     * // => [1]\n     *\n     * _.take([1, 2, 3], 2);\n     * // => [1, 2]\n     *\n     * _.take([1, 2, 3], 5);\n     * // => [1, 2, 3]\n     *\n     * _.take([1, 2, 3], 0);\n     * // => []\n     */\n    function take(array, n, guard) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      return baseSlice(array, 0, n < 0 ? 0 : n);\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements taken from the end.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to take.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.takeRight([1, 2, 3]);\n     * // => [3]\n     *\n     * _.takeRight([1, 2, 3], 2);\n     * // => [2, 3]\n     *\n     * _.takeRight([1, 2, 3], 5);\n     * // => [1, 2, 3]\n     *\n     * _.takeRight([1, 2, 3], 0);\n     * // => []\n     */\n    function takeRight(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      n = length - n;\n      return baseSlice(array, n < 0 ? 0 : n, length);\n    }\n\n    /**\n     * Creates a slice of `array` with elements taken from the end. Elements are\n     * taken until `predicate` returns falsey. The predicate is invoked with\n     * three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.takeRightWhile(users, function(o) { return !o.active; });\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n     * // => objects for ['pebbles']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.takeRightWhile(users, ['active', false]);\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.takeRightWhile(users, 'active');\n     * // => []\n     */\n    function takeRightWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), false, true)\n        : [];\n    }\n\n    /**\n     * Creates a slice of `array` with elements taken from the beginning. Elements\n     * are taken until `predicate` returns falsey. The predicate is invoked with\n     * three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.takeWhile(users, function(o) { return !o.active; });\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.takeWhile(users, { 'user': 'barney', 'active': false });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.takeWhile(users, ['active', false]);\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.takeWhile(users, 'active');\n     * // => []\n     */\n    function takeWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3))\n        : [];\n    }\n\n    /**\n     * Creates an array of unique values, in order, from all given arrays using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * _.union([2], [1, 2]);\n     * // => [2, 1]\n     */\n    var union = baseRest(function(arrays) {\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n    });\n\n    /**\n     * This method is like `_.union` except that it accepts `iteratee` which is\n     * invoked for each element of each `arrays` to generate the criterion by\n     * which uniqueness is computed. Result values are chosen from the first\n     * array in which the value occurs. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n     * // => [2.1, 1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }, { 'x': 2 }]\n     */\n    var unionBy = baseRest(function(arrays) {\n      var iteratee = last(arrays);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n    });\n\n    /**\n     * This method is like `_.union` except that it accepts `comparator` which\n     * is invoked to compare elements of `arrays`. Result values are chosen from\n     * the first array in which the value occurs. The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.unionWith(objects, others, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n     */\n    var unionWith = baseRest(function(arrays) {\n      var comparator = last(arrays);\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n    });\n\n    /**\n     * Creates a duplicate-free version of an array, using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons, in which only the first occurrence of each element\n     * is kept. The order of result values is determined by the order they occur\n     * in the array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.uniq([2, 1, 2]);\n     * // => [2, 1]\n     */\n    function uniq(array) {\n      return (array && array.length) ? baseUniq(array) : [];\n    }\n\n    /**\n     * This method is like `_.uniq` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * uniqueness is computed. The order of result values is determined by the\n     * order they occur in the array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n     * // => [2.1, 1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }, { 'x': 2 }]\n     */\n    function uniqBy(array, iteratee) {\n      return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];\n    }\n\n    /**\n     * This method is like `_.uniq` except that it accepts `comparator` which\n     * is invoked to compare elements of `array`. The order of result values is\n     * determined by the order they occur in the array.The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.uniqWith(objects, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n     */\n    function uniqWith(array, comparator) {\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n    }\n\n    /**\n     * This method is like `_.zip` except that it accepts an array of grouped\n     * elements and creates an array regrouping the elements to their pre-zip\n     * configuration.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.2.0\n     * @category Array\n     * @param {Array} array The array of grouped elements to process.\n     * @returns {Array} Returns the new array of regrouped elements.\n     * @example\n     *\n     * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n     * // => [['a', 1, true], ['b', 2, false]]\n     *\n     * _.unzip(zipped);\n     * // => [['a', 'b'], [1, 2], [true, false]]\n     */\n    function unzip(array) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      var length = 0;\n      array = arrayFilter(array, function(group) {\n        if (isArrayLikeObject(group)) {\n          length = nativeMax(group.length, length);\n          return true;\n        }\n      });\n      return baseTimes(length, function(index) {\n        return arrayMap(array, baseProperty(index));\n      });\n    }\n\n    /**\n     * This method is like `_.unzip` except that it accepts `iteratee` to specify\n     * how regrouped values should be combined. The iteratee is invoked with the\n     * elements of each group: (...group).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Array\n     * @param {Array} array The array of grouped elements to process.\n     * @param {Function} [iteratee=_.identity] The function to combine\n     *  regrouped values.\n     * @returns {Array} Returns the new array of regrouped elements.\n     * @example\n     *\n     * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n     * // => [[1, 10, 100], [2, 20, 200]]\n     *\n     * _.unzipWith(zipped, _.add);\n     * // => [3, 30, 300]\n     */\n    function unzipWith(array, iteratee) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      var result = unzip(array);\n      if (iteratee == null) {\n        return result;\n      }\n      return arrayMap(result, function(group) {\n        return apply(iteratee, undefined, group);\n      });\n    }\n\n    /**\n     * Creates an array excluding all given values using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * **Note:** Unlike `_.pull`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...*} [values] The values to exclude.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.difference, _.xor\n     * @example\n     *\n     * _.without([2, 1, 2, 3], 1, 2);\n     * // => [3]\n     */\n    var without = baseRest(function(array, values) {\n      return isArrayLikeObject(array)\n        ? baseDifference(array, values)\n        : [];\n    });\n\n    /**\n     * Creates an array of unique values that is the\n     * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n     * of the given arrays. The order of result values is determined by the order\n     * they occur in the arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.difference, _.without\n     * @example\n     *\n     * _.xor([2, 1], [2, 3]);\n     * // => [1, 3]\n     */\n    var xor = baseRest(function(arrays) {\n      return baseXor(arrayFilter(arrays, isArrayLikeObject));\n    });\n\n    /**\n     * This method is like `_.xor` except that it accepts `iteratee` which is\n     * invoked for each element of each `arrays` to generate the criterion by\n     * which by which they're compared. The order of result values is determined\n     * by the order they occur in the arrays. The iteratee is invoked with one\n     * argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [1.2, 3.4]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 2 }]\n     */\n    var xorBy = baseRest(function(arrays) {\n      var iteratee = last(arrays);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n    });\n\n    /**\n     * This method is like `_.xor` except that it accepts `comparator` which is\n     * invoked to compare elements of `arrays`. The order of result values is\n     * determined by the order they occur in the arrays. The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.xorWith(objects, others, _.isEqual);\n     * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n     */\n    var xorWith = baseRest(function(arrays) {\n      var comparator = last(arrays);\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n    });\n\n    /**\n     * Creates an array of grouped elements, the first of which contains the\n     * first elements of the given arrays, the second of which contains the\n     * second elements of the given arrays, and so on.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to process.\n     * @returns {Array} Returns the new array of grouped elements.\n     * @example\n     *\n     * _.zip(['a', 'b'], [1, 2], [true, false]);\n     * // => [['a', 1, true], ['b', 2, false]]\n     */\n    var zip = baseRest(unzip);\n\n    /**\n     * This method is like `_.fromPairs` except that it accepts two arrays,\n     * one of property identifiers and one of corresponding values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.4.0\n     * @category Array\n     * @param {Array} [props=[]] The property identifiers.\n     * @param {Array} [values=[]] The property values.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.zipObject(['a', 'b'], [1, 2]);\n     * // => { 'a': 1, 'b': 2 }\n     */\n    function zipObject(props, values) {\n      return baseZipObject(props || [], values || [], assignValue);\n    }\n\n    /**\n     * This method is like `_.zipObject` except that it supports property paths.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.1.0\n     * @category Array\n     * @param {Array} [props=[]] The property identifiers.\n     * @param {Array} [values=[]] The property values.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n     * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n     */\n    function zipObjectDeep(props, values) {\n      return baseZipObject(props || [], values || [], baseSet);\n    }\n\n    /**\n     * This method is like `_.zip` except that it accepts `iteratee` to specify\n     * how grouped values should be combined. The iteratee is invoked with the\n     * elements of each group: (...group).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to process.\n     * @param {Function} [iteratee=_.identity] The function to combine\n     *  grouped values.\n     * @returns {Array} Returns the new array of grouped elements.\n     * @example\n     *\n     * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n     *   return a + b + c;\n     * });\n     * // => [111, 222]\n     */\n    var zipWith = baseRest(function(arrays) {\n      var length = arrays.length,\n          iteratee = length > 1 ? arrays[length - 1] : undefined;\n\n      iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n      return unzipWith(arrays, iteratee);\n    });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n     * chain sequences enabled. The result of such sequences must be unwrapped\n     * with `_#value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.3.0\n     * @category Seq\n     * @param {*} value The value to wrap.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36 },\n     *   { 'user': 'fred',    'age': 40 },\n     *   { 'user': 'pebbles', 'age': 1 }\n     * ];\n     *\n     * var youngest = _\n     *   .chain(users)\n     *   .sortBy('age')\n     *   .map(function(o) {\n     *     return o.user + ' is ' + o.age;\n     *   })\n     *   .head()\n     *   .value();\n     * // => 'pebbles is 1'\n     */\n    function chain(value) {\n      var result = lodash(value);\n      result.__chain__ = true;\n      return result;\n    }\n\n    /**\n     * This method invokes `interceptor` and returns `value`. The interceptor\n     * is invoked with one argument; (value). The purpose of this method is to\n     * \"tap into\" a method chain sequence in order to modify intermediate results.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @param {*} value The value to provide to `interceptor`.\n     * @param {Function} interceptor The function to invoke.\n     * @returns {*} Returns `value`.\n     * @example\n     *\n     * _([1, 2, 3])\n     *  .tap(function(array) {\n     *    // Mutate input array.\n     *    array.pop();\n     *  })\n     *  .reverse()\n     *  .value();\n     * // => [2, 1]\n     */\n    function tap(value, interceptor) {\n      interceptor(value);\n      return value;\n    }\n\n    /**\n     * This method is like `_.tap` except that it returns the result of `interceptor`.\n     * The purpose of this method is to \"pass thru\" values replacing intermediate\n     * results in a method chain sequence.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Seq\n     * @param {*} value The value to provide to `interceptor`.\n     * @param {Function} interceptor The function to invoke.\n     * @returns {*} Returns the result of `interceptor`.\n     * @example\n     *\n     * _('  abc  ')\n     *  .chain()\n     *  .trim()\n     *  .thru(function(value) {\n     *    return [value];\n     *  })\n     *  .value();\n     * // => ['abc']\n     */\n    function thru(value, interceptor) {\n      return interceptor(value);\n    }\n\n    /**\n     * This method is the wrapper version of `_.at`.\n     *\n     * @name at\n     * @memberOf _\n     * @since 1.0.0\n     * @category Seq\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n     *\n     * _(object).at(['a[0].b.c', 'a[1]']).value();\n     * // => [3, 4]\n     */\n    var wrapperAt = flatRest(function(paths) {\n      var length = paths.length,\n          start = length ? paths[0] : 0,\n          value = this.__wrapped__,\n          interceptor = function(object) { return baseAt(object, paths); };\n\n      if (length > 1 || this.__actions__.length ||\n          !(value instanceof LazyWrapper) || !isIndex(start)) {\n        return this.thru(interceptor);\n      }\n      value = value.slice(start, +start + (length ? 1 : 0));\n      value.__actions__.push({\n        'func': thru,\n        'args': [interceptor],\n        'thisArg': undefined\n      });\n      return new LodashWrapper(value, this.__chain__).thru(function(array) {\n        if (length && !array.length) {\n          array.push(undefined);\n        }\n        return array;\n      });\n    });\n\n    /**\n     * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n     *\n     * @name chain\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36 },\n     *   { 'user': 'fred',   'age': 40 }\n     * ];\n     *\n     * // A sequence without explicit chaining.\n     * _(users).head();\n     * // => { 'user': 'barney', 'age': 36 }\n     *\n     * // A sequence with explicit chaining.\n     * _(users)\n     *   .chain()\n     *   .head()\n     *   .pick('user')\n     *   .value();\n     * // => { 'user': 'barney' }\n     */\n    function wrapperChain() {\n      return chain(this);\n    }\n\n    /**\n     * Executes the chain sequence and returns the wrapped result.\n     *\n     * @name commit\n     * @memberOf _\n     * @since 3.2.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var array = [1, 2];\n     * var wrapped = _(array).push(3);\n     *\n     * console.log(array);\n     * // => [1, 2]\n     *\n     * wrapped = wrapped.commit();\n     * console.log(array);\n     * // => [1, 2, 3]\n     *\n     * wrapped.last();\n     * // => 3\n     *\n     * console.log(array);\n     * // => [1, 2, 3]\n     */\n    function wrapperCommit() {\n      return new LodashWrapper(this.value(), this.__chain__);\n    }\n\n    /**\n     * Gets the next value on a wrapped object following the\n     * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n     *\n     * @name next\n     * @memberOf _\n     * @since 4.0.0\n     * @category Seq\n     * @returns {Object} Returns the next iterator value.\n     * @example\n     *\n     * var wrapped = _([1, 2]);\n     *\n     * wrapped.next();\n     * // => { 'done': false, 'value': 1 }\n     *\n     * wrapped.next();\n     * // => { 'done': false, 'value': 2 }\n     *\n     * wrapped.next();\n     * // => { 'done': true, 'value': undefined }\n     */\n    function wrapperNext() {\n      if (this.__values__ === undefined) {\n        this.__values__ = toArray(this.value());\n      }\n      var done = this.__index__ >= this.__values__.length,\n          value = done ? undefined : this.__values__[this.__index__++];\n\n      return { 'done': done, 'value': value };\n    }\n\n    /**\n     * Enables the wrapper to be iterable.\n     *\n     * @name Symbol.iterator\n     * @memberOf _\n     * @since 4.0.0\n     * @category Seq\n     * @returns {Object} Returns the wrapper object.\n     * @example\n     *\n     * var wrapped = _([1, 2]);\n     *\n     * wrapped[Symbol.iterator]() === wrapped;\n     * // => true\n     *\n     * Array.from(wrapped);\n     * // => [1, 2]\n     */\n    function wrapperToIterator() {\n      return this;\n    }\n\n    /**\n     * Creates a clone of the chain sequence planting `value` as the wrapped value.\n     *\n     * @name plant\n     * @memberOf _\n     * @since 3.2.0\n     * @category Seq\n     * @param {*} value The value to plant.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var wrapped = _([1, 2]).map(square);\n     * var other = wrapped.plant([3, 4]);\n     *\n     * other.value();\n     * // => [9, 16]\n     *\n     * wrapped.value();\n     * // => [1, 4]\n     */\n    function wrapperPlant(value) {\n      var result,\n          parent = this;\n\n      while (parent instanceof baseLodash) {\n        var clone = wrapperClone(parent);\n        clone.__index__ = 0;\n        clone.__values__ = undefined;\n        if (result) {\n          previous.__wrapped__ = clone;\n        } else {\n          result = clone;\n        }\n        var previous = clone;\n        parent = parent.__wrapped__;\n      }\n      previous.__wrapped__ = value;\n      return result;\n    }\n\n    /**\n     * This method is the wrapper version of `_.reverse`.\n     *\n     * **Note:** This method mutates the wrapped array.\n     *\n     * @name reverse\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _(array).reverse().value()\n     * // => [3, 2, 1]\n     *\n     * console.log(array);\n     * // => [3, 2, 1]\n     */\n    function wrapperReverse() {\n      var value = this.__wrapped__;\n      if (value instanceof LazyWrapper) {\n        var wrapped = value;\n        if (this.__actions__.length) {\n          wrapped = new LazyWrapper(this);\n        }\n        wrapped = wrapped.reverse();\n        wrapped.__actions__.push({\n          'func': thru,\n          'args': [reverse],\n          'thisArg': undefined\n        });\n        return new LodashWrapper(wrapped, this.__chain__);\n      }\n      return this.thru(reverse);\n    }\n\n    /**\n     * Executes the chain sequence to resolve the unwrapped value.\n     *\n     * @name value\n     * @memberOf _\n     * @since 0.1.0\n     * @alias toJSON, valueOf\n     * @category Seq\n     * @returns {*} Returns the resolved unwrapped value.\n     * @example\n     *\n     * _([1, 2, 3]).value();\n     * // => [1, 2, 3]\n     */\n    function wrapperValue() {\n      return baseWrapperValue(this.__wrapped__, this.__actions__);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The corresponding value of\n     * each key is the number of times the key was returned by `iteratee`. The\n     * iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * _.countBy([6.1, 4.2, 6.3], Math.floor);\n     * // => { '4': 1, '6': 2 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.countBy(['one', 'two', 'three'], 'length');\n     * // => { '3': 2, '5': 1 }\n     */\n    var countBy = createAggregator(function(result, value, key) {\n      if (hasOwnProperty.call(result, key)) {\n        ++result[key];\n      } else {\n        baseAssignValue(result, key, 1);\n      }\n    });\n\n    /**\n     * Checks if `predicate` returns truthy for **all** elements of `collection`.\n     * Iteration is stopped once `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index|key, collection).\n     *\n     * **Note:** This method returns `true` for\n     * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n     * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n     * elements of empty collections.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\n     *  else `false`.\n     * @example\n     *\n     * _.every([true, 1, null, 'yes'], Boolean);\n     * // => false\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': false },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.every(users, { 'user': 'barney', 'active': false });\n     * // => false\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.every(users, ['active', false]);\n     * // => true\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.every(users, 'active');\n     * // => false\n     */\n    function every(collection, predicate, guard) {\n      var func = isArray(collection) ? arrayEvery : baseEvery;\n      if (guard && isIterateeCall(collection, predicate, guard)) {\n        predicate = undefined;\n      }\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Iterates over elements of `collection`, returning an array of all elements\n     * `predicate` returns truthy for. The predicate is invoked with three\n     * arguments: (value, index|key, collection).\n     *\n     * **Note:** Unlike `_.remove`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     * @see _.reject\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': true },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * _.filter(users, function(o) { return !o.active; });\n     * // => objects for ['fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.filter(users, { 'age': 36, 'active': true });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.filter(users, ['active', false]);\n     * // => objects for ['fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.filter(users, 'active');\n     * // => objects for ['barney']\n     *\n     * // Combining several predicates using `_.overEvery` or `_.overSome`.\n     * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n     * // => objects for ['fred', 'barney']\n     */\n    function filter(collection, predicate) {\n      var func = isArray(collection) ? arrayFilter : baseFilter;\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Iterates over elements of `collection`, returning the first element\n     * `predicate` returns truthy for. The predicate is invoked with three\n     * arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {*} Returns the matched element, else `undefined`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36, 'active': true },\n     *   { 'user': 'fred',    'age': 40, 'active': false },\n     *   { 'user': 'pebbles', 'age': 1,  'active': true }\n     * ];\n     *\n     * _.find(users, function(o) { return o.age < 40; });\n     * // => object for 'barney'\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.find(users, { 'age': 1, 'active': true });\n     * // => object for 'pebbles'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.find(users, ['active', false]);\n     * // => object for 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.find(users, 'active');\n     * // => object for 'barney'\n     */\n    var find = createFind(findIndex);\n\n    /**\n     * This method is like `_.find` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=collection.length-1] The index to search from.\n     * @returns {*} Returns the matched element, else `undefined`.\n     * @example\n     *\n     * _.findLast([1, 2, 3, 4], function(n) {\n     *   return n % 2 == 1;\n     * });\n     * // => 3\n     */\n    var findLast = createFind(findLastIndex);\n\n    /**\n     * Creates a flattened array of values by running each element in `collection`\n     * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n     * with three arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [n, n];\n     * }\n     *\n     * _.flatMap([1, 2], duplicate);\n     * // => [1, 1, 2, 2]\n     */\n    function flatMap(collection, iteratee) {\n      return baseFlatten(map(collection, iteratee), 1);\n    }\n\n    /**\n     * This method is like `_.flatMap` except that it recursively flattens the\n     * mapped results.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [[[n, n]]];\n     * }\n     *\n     * _.flatMapDeep([1, 2], duplicate);\n     * // => [1, 1, 2, 2]\n     */\n    function flatMapDeep(collection, iteratee) {\n      return baseFlatten(map(collection, iteratee), INFINITY);\n    }\n\n    /**\n     * This method is like `_.flatMap` except that it recursively flattens the\n     * mapped results up to `depth` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {number} [depth=1] The maximum recursion depth.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [[[n, n]]];\n     * }\n     *\n     * _.flatMapDepth([1, 2], duplicate, 2);\n     * // => [[1, 1], [2, 2]]\n     */\n    function flatMapDepth(collection, iteratee, depth) {\n      depth = depth === undefined ? 1 : toInteger(depth);\n      return baseFlatten(map(collection, iteratee), depth);\n    }\n\n    /**\n     * Iterates over elements of `collection` and invokes `iteratee` for each element.\n     * The iteratee is invoked with three arguments: (value, index|key, collection).\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n     * property are iterated like arrays. To avoid this behavior use `_.forIn`\n     * or `_.forOwn` for object iteration.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @alias each\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     * @see _.forEachRight\n     * @example\n     *\n     * _.forEach([1, 2], function(value) {\n     *   console.log(value);\n     * });\n     * // => Logs `1` then `2`.\n     *\n     * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n     */\n    function forEach(collection, iteratee) {\n      var func = isArray(collection) ? arrayEach : baseEach;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.forEach` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @alias eachRight\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     * @see _.forEach\n     * @example\n     *\n     * _.forEachRight([1, 2], function(value) {\n     *   console.log(value);\n     * });\n     * // => Logs `2` then `1`.\n     */\n    function forEachRight(collection, iteratee) {\n      var func = isArray(collection) ? arrayEachRight : baseEachRight;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The order of grouped values\n     * is determined by the order they occur in `collection`. The corresponding\n     * value of each key is an array of elements responsible for generating the\n     * key. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n     * // => { '4': [4.2], '6': [6.1, 6.3] }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.groupBy(['one', 'two', 'three'], 'length');\n     * // => { '3': ['one', 'two'], '5': ['three'] }\n     */\n    var groupBy = createAggregator(function(result, value, key) {\n      if (hasOwnProperty.call(result, key)) {\n        result[key].push(value);\n      } else {\n        baseAssignValue(result, key, [value]);\n      }\n    });\n\n    /**\n     * Checks if `value` is in `collection`. If `collection` is a string, it's\n     * checked for a substring of `value`, otherwise\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * is used for equality comparisons. If `fromIndex` is negative, it's used as\n     * the offset from the end of `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n     * @returns {boolean} Returns `true` if `value` is found, else `false`.\n     * @example\n     *\n     * _.includes([1, 2, 3], 1);\n     * // => true\n     *\n     * _.includes([1, 2, 3], 1, 2);\n     * // => false\n     *\n     * _.includes({ 'a': 1, 'b': 2 }, 1);\n     * // => true\n     *\n     * _.includes('abcd', 'bc');\n     * // => true\n     */\n    function includes(collection, value, fromIndex, guard) {\n      collection = isArrayLike(collection) ? collection : values(collection);\n      fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n      var length = collection.length;\n      if (fromIndex < 0) {\n        fromIndex = nativeMax(length + fromIndex, 0);\n      }\n      return isString(collection)\n        ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n        : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n    }\n\n    /**\n     * Invokes the method at `path` of each element in `collection`, returning\n     * an array of the results of each invoked method. Any additional arguments\n     * are provided to each invoked method. If `path` is a function, it's invoked\n     * for, and `this` bound to, each element in `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Array|Function|string} path The path of the method to invoke or\n     *  the function invoked per iteration.\n     * @param {...*} [args] The arguments to invoke each method with.\n     * @returns {Array} Returns the array of results.\n     * @example\n     *\n     * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n     * // => [[1, 5, 7], [1, 2, 3]]\n     *\n     * _.invokeMap([123, 456], String.prototype.split, '');\n     * // => [['1', '2', '3'], ['4', '5', '6']]\n     */\n    var invokeMap = baseRest(function(collection, path, args) {\n      var index = -1,\n          isFunc = typeof path == 'function',\n          result = isArrayLike(collection) ? Array(collection.length) : [];\n\n      baseEach(collection, function(value) {\n        result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n      });\n      return result;\n    });\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The corresponding value of\n     * each key is the last element responsible for generating the key. The\n     * iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * var array = [\n     *   { 'dir': 'left', 'code': 97 },\n     *   { 'dir': 'right', 'code': 100 }\n     * ];\n     *\n     * _.keyBy(array, function(o) {\n     *   return String.fromCharCode(o.code);\n     * });\n     * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n     *\n     * _.keyBy(array, 'dir');\n     * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n     */\n    var keyBy = createAggregator(function(result, value, key) {\n      baseAssignValue(result, key, value);\n    });\n\n    /**\n     * Creates an array of values by running each element in `collection` thru\n     * `iteratee`. The iteratee is invoked with three arguments:\n     * (value, index|key, collection).\n     *\n     * Many lodash methods are guarded to work as iteratees for methods like\n     * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n     *\n     * The guarded methods are:\n     * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n     * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n     * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n     * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new mapped array.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * _.map([4, 8], square);\n     * // => [16, 64]\n     *\n     * _.map({ 'a': 4, 'b': 8 }, square);\n     * // => [16, 64] (iteration order is not guaranteed)\n     *\n     * var users = [\n     *   { 'user': 'barney' },\n     *   { 'user': 'fred' }\n     * ];\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.map(users, 'user');\n     * // => ['barney', 'fred']\n     */\n    function map(collection, iteratee) {\n      var func = isArray(collection) ? arrayMap : baseMap;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.sortBy` except that it allows specifying the sort\n     * orders of the iteratees to sort by. If `orders` is unspecified, all values\n     * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n     * descending or \"asc\" for ascending sort order of corresponding values.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n     *  The iteratees to sort by.\n     * @param {string[]} [orders] The sort orders of `iteratees`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n     * @returns {Array} Returns the new sorted array.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'fred',   'age': 48 },\n     *   { 'user': 'barney', 'age': 34 },\n     *   { 'user': 'fred',   'age': 40 },\n     *   { 'user': 'barney', 'age': 36 }\n     * ];\n     *\n     * // Sort by `user` in ascending order and by `age` in descending order.\n     * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n     */\n    function orderBy(collection, iteratees, orders, guard) {\n      if (collection == null) {\n        return [];\n      }\n      if (!isArray(iteratees)) {\n        iteratees = iteratees == null ? [] : [iteratees];\n      }\n      orders = guard ? undefined : orders;\n      if (!isArray(orders)) {\n        orders = orders == null ? [] : [orders];\n      }\n      return baseOrderBy(collection, iteratees, orders);\n    }\n\n    /**\n     * Creates an array of elements split into two groups, the first of which\n     * contains elements `predicate` returns truthy for, the second of which\n     * contains elements `predicate` returns falsey for. The predicate is\n     * invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the array of grouped elements.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36, 'active': false },\n     *   { 'user': 'fred',    'age': 40, 'active': true },\n     *   { 'user': 'pebbles', 'age': 1,  'active': false }\n     * ];\n     *\n     * _.partition(users, function(o) { return o.active; });\n     * // => objects for [['fred'], ['barney', 'pebbles']]\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.partition(users, { 'age': 1, 'active': false });\n     * // => objects for [['pebbles'], ['barney', 'fred']]\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.partition(users, ['active', false]);\n     * // => objects for [['barney', 'pebbles'], ['fred']]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.partition(users, 'active');\n     * // => objects for [['fred'], ['barney', 'pebbles']]\n     */\n    var partition = createAggregator(function(result, value, key) {\n      result[key ? 0 : 1].push(value);\n    }, function() { return [[], []]; });\n\n    /**\n     * Reduces `collection` to a value which is the accumulated result of running\n     * each element in `collection` thru `iteratee`, where each successive\n     * invocation is supplied the return value of the previous. If `accumulator`\n     * is not given, the first element of `collection` is used as the initial\n     * value. The iteratee is invoked with four arguments:\n     * (accumulator, value, index|key, collection).\n     *\n     * Many lodash methods are guarded to work as iteratees for methods like\n     * `_.reduce`, `_.reduceRight`, and `_.transform`.\n     *\n     * The guarded methods are:\n     * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n     * and `sortBy`\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The initial value.\n     * @returns {*} Returns the accumulated value.\n     * @see _.reduceRight\n     * @example\n     *\n     * _.reduce([1, 2], function(sum, n) {\n     *   return sum + n;\n     * }, 0);\n     * // => 3\n     *\n     * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n     *   (result[value] || (result[value] = [])).push(key);\n     *   return result;\n     * }, {});\n     * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n     */\n    function reduce(collection, iteratee, accumulator) {\n      var func = isArray(collection) ? arrayReduce : baseReduce,\n          initAccum = arguments.length < 3;\n\n      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n    }\n\n    /**\n     * This method is like `_.reduce` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The initial value.\n     * @returns {*} Returns the accumulated value.\n     * @see _.reduce\n     * @example\n     *\n     * var array = [[0, 1], [2, 3], [4, 5]];\n     *\n     * _.reduceRight(array, function(flattened, other) {\n     *   return flattened.concat(other);\n     * }, []);\n     * // => [4, 5, 2, 3, 0, 1]\n     */\n    function reduceRight(collection, iteratee, accumulator) {\n      var func = isArray(collection) ? arrayReduceRight : baseReduce,\n          initAccum = arguments.length < 3;\n\n      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n    }\n\n    /**\n     * The opposite of `_.filter`; this method returns the elements of `collection`\n     * that `predicate` does **not** return truthy for.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     * @see _.filter\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': false },\n     *   { 'user': 'fred',   'age': 40, 'active': true }\n     * ];\n     *\n     * _.reject(users, function(o) { return !o.active; });\n     * // => objects for ['fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.reject(users, { 'age': 40, 'active': true });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.reject(users, ['active', false]);\n     * // => objects for ['fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.reject(users, 'active');\n     * // => objects for ['barney']\n     */\n    function reject(collection, predicate) {\n      var func = isArray(collection) ? arrayFilter : baseFilter;\n      return func(collection, negate(getIteratee(predicate, 3)));\n    }\n\n    /**\n     * Gets a random element from `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to sample.\n     * @returns {*} Returns the random element.\n     * @example\n     *\n     * _.sample([1, 2, 3, 4]);\n     * // => 2\n     */\n    function sample(collection) {\n      var func = isArray(collection) ? arraySample : baseSample;\n      return func(collection);\n    }\n\n    /**\n     * Gets `n` random elements at unique keys from `collection` up to the\n     * size of `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to sample.\n     * @param {number} [n=1] The number of elements to sample.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the random elements.\n     * @example\n     *\n     * _.sampleSize([1, 2, 3], 2);\n     * // => [3, 1]\n     *\n     * _.sampleSize([1, 2, 3], 4);\n     * // => [2, 3, 1]\n     */\n    function sampleSize(collection, n, guard) {\n      if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\n        n = 1;\n      } else {\n        n = toInteger(n);\n      }\n      var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n      return func(collection, n);\n    }\n\n    /**\n     * Creates an array of shuffled values, using a version of the\n     * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     * @example\n     *\n     * _.shuffle([1, 2, 3, 4]);\n     * // => [4, 1, 3, 2]\n     */\n    function shuffle(collection) {\n      var func = isArray(collection) ? arrayShuffle : baseShuffle;\n      return func(collection);\n    }\n\n    /**\n     * Gets the size of `collection` by returning its length for array-like\n     * values or the number of own enumerable string keyed properties for objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to inspect.\n     * @returns {number} Returns the collection size.\n     * @example\n     *\n     * _.size([1, 2, 3]);\n     * // => 3\n     *\n     * _.size({ 'a': 1, 'b': 2 });\n     * // => 2\n     *\n     * _.size('pebbles');\n     * // => 7\n     */\n    function size(collection) {\n      if (collection == null) {\n        return 0;\n      }\n      if (isArrayLike(collection)) {\n        return isString(collection) ? stringSize(collection) : collection.length;\n      }\n      var tag = getTag(collection);\n      if (tag == mapTag || tag == setTag) {\n        return collection.size;\n      }\n      return baseKeys(collection).length;\n    }\n\n    /**\n     * Checks if `predicate` returns truthy for **any** element of `collection`.\n     * Iteration is stopped once `predicate` returns truthy. The predicate is\n     * invoked with three arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\n     *  else `false`.\n     * @example\n     *\n     * _.some([null, 0, 'yes', false], Boolean);\n     * // => true\n     *\n     * var users = [\n     *   { 'user': 'barney', 'active': true },\n     *   { 'user': 'fred',   'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.some(users, { 'user': 'barney', 'active': false });\n     * // => false\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.some(users, ['active', false]);\n     * // => true\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.some(users, 'active');\n     * // => true\n     */\n    function some(collection, predicate, guard) {\n      var func = isArray(collection) ? arraySome : baseSome;\n      if (guard && isIterateeCall(collection, predicate, guard)) {\n        predicate = undefined;\n      }\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Creates an array of elements, sorted in ascending order by the results of\n     * running each element in a collection thru each iteratee. This method\n     * performs a stable sort, that is, it preserves the original sort order of\n     * equal elements. The iteratees are invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {...(Function|Function[])} [iteratees=[_.identity]]\n     *  The iteratees to sort by.\n     * @returns {Array} Returns the new sorted array.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'fred',   'age': 48 },\n     *   { 'user': 'barney', 'age': 36 },\n     *   { 'user': 'fred',   'age': 30 },\n     *   { 'user': 'barney', 'age': 34 }\n     * ];\n     *\n     * _.sortBy(users, [function(o) { return o.user; }]);\n     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n     *\n     * _.sortBy(users, ['user', 'age']);\n     * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n     */\n    var sortBy = baseRest(function(collection, iteratees) {\n      if (collection == null) {\n        return [];\n      }\n      var length = iteratees.length;\n      if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n        iteratees = [];\n      } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n        iteratees = [iteratees[0]];\n      }\n      return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n    });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Gets the timestamp of the number of milliseconds that have elapsed since\n     * the Unix epoch (1 January 1970 00:00:00 UTC).\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Date\n     * @returns {number} Returns the timestamp.\n     * @example\n     *\n     * _.defer(function(stamp) {\n     *   console.log(_.now() - stamp);\n     * }, _.now());\n     * // => Logs the number of milliseconds it took for the deferred invocation.\n     */\n    var now = ctxNow || function() {\n      return root.Date.now();\n    };\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * The opposite of `_.before`; this method creates a function that invokes\n     * `func` once it's called `n` or more times.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {number} n The number of calls before `func` is invoked.\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * var saves = ['profile', 'settings'];\n     *\n     * var done = _.after(saves.length, function() {\n     *   console.log('done saving!');\n     * });\n     *\n     * _.forEach(saves, function(type) {\n     *   asyncSave({ 'type': type, 'complete': done });\n     * });\n     * // => Logs 'done saving!' after the two async saves have completed.\n     */\n    function after(n, func) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      n = toInteger(n);\n      return function() {\n        if (--n < 1) {\n          return func.apply(this, arguments);\n        }\n      };\n    }\n\n    /**\n     * Creates a function that invokes `func`, with up to `n` arguments,\n     * ignoring any additional arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to cap arguments for.\n     * @param {number} [n=func.length] The arity cap.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new capped function.\n     * @example\n     *\n     * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n     * // => [6, 8, 10]\n     */\n    function ary(func, n, guard) {\n      n = guard ? undefined : n;\n      n = (func && n == null) ? func.length : n;\n      return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n    }\n\n    /**\n     * Creates a function that invokes `func`, with the `this` binding and arguments\n     * of the created function, while it's called less than `n` times. Subsequent\n     * calls to the created function return the result of the last `func` invocation.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {number} n The number of calls at which `func` is no longer invoked.\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * jQuery(element).on('click', _.before(5, addContactToList));\n     * // => Allows adding up to 4 contacts to the list.\n     */\n    function before(n, func) {\n      var result;\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      n = toInteger(n);\n      return function() {\n        if (--n > 0) {\n          result = func.apply(this, arguments);\n        }\n        if (n <= 1) {\n          func = undefined;\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of `thisArg`\n     * and `partials` prepended to the arguments it receives.\n     *\n     * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n     * may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n     * property of bound functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to bind.\n     * @param {*} thisArg The `this` binding of `func`.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new bound function.\n     * @example\n     *\n     * function greet(greeting, punctuation) {\n     *   return greeting + ' ' + this.user + punctuation;\n     * }\n     *\n     * var object = { 'user': 'fred' };\n     *\n     * var bound = _.bind(greet, object, 'hi');\n     * bound('!');\n     * // => 'hi fred!'\n     *\n     * // Bound with placeholders.\n     * var bound = _.bind(greet, object, _, '!');\n     * bound('hi');\n     * // => 'hi fred!'\n     */\n    var bind = baseRest(function(func, thisArg, partials) {\n      var bitmask = WRAP_BIND_FLAG;\n      if (partials.length) {\n        var holders = replaceHolders(partials, getHolder(bind));\n        bitmask |= WRAP_PARTIAL_FLAG;\n      }\n      return createWrap(func, bitmask, thisArg, partials, holders);\n    });\n\n    /**\n     * Creates a function that invokes the method at `object[key]` with `partials`\n     * prepended to the arguments it receives.\n     *\n     * This method differs from `_.bind` by allowing bound functions to reference\n     * methods that may be redefined or don't yet exist. See\n     * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n     * for more details.\n     *\n     * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.10.0\n     * @category Function\n     * @param {Object} object The object to invoke the method on.\n     * @param {string} key The key of the method.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new bound function.\n     * @example\n     *\n     * var object = {\n     *   'user': 'fred',\n     *   'greet': function(greeting, punctuation) {\n     *     return greeting + ' ' + this.user + punctuation;\n     *   }\n     * };\n     *\n     * var bound = _.bindKey(object, 'greet', 'hi');\n     * bound('!');\n     * // => 'hi fred!'\n     *\n     * object.greet = function(greeting, punctuation) {\n     *   return greeting + 'ya ' + this.user + punctuation;\n     * };\n     *\n     * bound('!');\n     * // => 'hiya fred!'\n     *\n     * // Bound with placeholders.\n     * var bound = _.bindKey(object, 'greet', _, '!');\n     * bound('hi');\n     * // => 'hiya fred!'\n     */\n    var bindKey = baseRest(function(object, key, partials) {\n      var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n      if (partials.length) {\n        var holders = replaceHolders(partials, getHolder(bindKey));\n        bitmask |= WRAP_PARTIAL_FLAG;\n      }\n      return createWrap(key, bitmask, object, partials, holders);\n    });\n\n    /**\n     * Creates a function that accepts arguments of `func` and either invokes\n     * `func` returning its result, if at least `arity` number of arguments have\n     * been provided, or returns a function that accepts the remaining `func`\n     * arguments, and so on. The arity of `func` may be specified if `func.length`\n     * is not sufficient.\n     *\n     * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n     * may be used as a placeholder for provided arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of curried functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Function\n     * @param {Function} func The function to curry.\n     * @param {number} [arity=func.length] The arity of `func`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new curried function.\n     * @example\n     *\n     * var abc = function(a, b, c) {\n     *   return [a, b, c];\n     * };\n     *\n     * var curried = _.curry(abc);\n     *\n     * curried(1)(2)(3);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2)(3);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2, 3);\n     * // => [1, 2, 3]\n     *\n     * // Curried with placeholders.\n     * curried(1)(_, 3)(2);\n     * // => [1, 2, 3]\n     */\n    function curry(func, arity, guard) {\n      arity = guard ? undefined : arity;\n      var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n      result.placeholder = curry.placeholder;\n      return result;\n    }\n\n    /**\n     * This method is like `_.curry` except that arguments are applied to `func`\n     * in the manner of `_.partialRight` instead of `_.partial`.\n     *\n     * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for provided arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of curried functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to curry.\n     * @param {number} [arity=func.length] The arity of `func`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new curried function.\n     * @example\n     *\n     * var abc = function(a, b, c) {\n     *   return [a, b, c];\n     * };\n     *\n     * var curried = _.curryRight(abc);\n     *\n     * curried(3)(2)(1);\n     * // => [1, 2, 3]\n     *\n     * curried(2, 3)(1);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2, 3);\n     * // => [1, 2, 3]\n     *\n     * // Curried with placeholders.\n     * curried(3)(1, _)(2);\n     * // => [1, 2, 3]\n     */\n    function curryRight(func, arity, guard) {\n      arity = guard ? undefined : arity;\n      var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n      result.placeholder = curryRight.placeholder;\n      return result;\n    }\n\n    /**\n     * Creates a debounced function that delays invoking `func` until after `wait`\n     * milliseconds have elapsed since the last time the debounced function was\n     * invoked. The debounced function comes with a `cancel` method to cancel\n     * delayed `func` invocations and a `flush` method to immediately invoke them.\n     * Provide `options` to indicate whether `func` should be invoked on the\n     * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n     * with the last arguments provided to the debounced function. Subsequent\n     * calls to the debounced function return the result of the last `func`\n     * invocation.\n     *\n     * **Note:** If `leading` and `trailing` options are `true`, `func` is\n     * invoked on the trailing edge of the timeout only if the debounced function\n     * is invoked more than once during the `wait` timeout.\n     *\n     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n     * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n     *\n     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n     * for details over the differences between `_.debounce` and `_.throttle`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to debounce.\n     * @param {number} [wait=0] The number of milliseconds to delay.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.leading=false]\n     *  Specify invoking on the leading edge of the timeout.\n     * @param {number} [options.maxWait]\n     *  The maximum time `func` is allowed to be delayed before it's invoked.\n     * @param {boolean} [options.trailing=true]\n     *  Specify invoking on the trailing edge of the timeout.\n     * @returns {Function} Returns the new debounced function.\n     * @example\n     *\n     * // Avoid costly calculations while the window size is in flux.\n     * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n     *\n     * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n     * jQuery(element).on('click', _.debounce(sendMail, 300, {\n     *   'leading': true,\n     *   'trailing': false\n     * }));\n     *\n     * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n     * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n     * var source = new EventSource('/stream');\n     * jQuery(source).on('message', debounced);\n     *\n     * // Cancel the trailing debounced invocation.\n     * jQuery(window).on('popstate', debounced.cancel);\n     */\n    function debounce(func, wait, options) {\n      var lastArgs,\n          lastThis,\n          maxWait,\n          result,\n          timerId,\n          lastCallTime,\n          lastInvokeTime = 0,\n          leading = false,\n          maxing = false,\n          trailing = true;\n\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      wait = toNumber(wait) || 0;\n      if (isObject(options)) {\n        leading = !!options.leading;\n        maxing = 'maxWait' in options;\n        maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\n      }\n\n      function invokeFunc(time) {\n        var args = lastArgs,\n            thisArg = lastThis;\n\n        lastArgs = lastThis = undefined;\n        lastInvokeTime = time;\n        result = func.apply(thisArg, args);\n        return result;\n      }\n\n      function leadingEdge(time) {\n        // Reset any `maxWait` timer.\n        lastInvokeTime = time;\n        // Start the timer for the trailing edge.\n        timerId = setTimeout(timerExpired, wait);\n        // Invoke the leading edge.\n        return leading ? invokeFunc(time) : result;\n      }\n\n      function remainingWait(time) {\n        var timeSinceLastCall = time - lastCallTime,\n            timeSinceLastInvoke = time - lastInvokeTime,\n            timeWaiting = wait - timeSinceLastCall;\n\n        return maxing\n          ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n          : timeWaiting;\n      }\n\n      function shouldInvoke(time) {\n        var timeSinceLastCall = time - lastCallTime,\n            timeSinceLastInvoke = time - lastInvokeTime;\n\n        // Either this is the first call, activity has stopped and we're at the\n        // trailing edge, the system time has gone backwards and we're treating\n        // it as the trailing edge, or we've hit the `maxWait` limit.\n        return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n          (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n      }\n\n      function timerExpired() {\n        var time = now();\n        if (shouldInvoke(time)) {\n          return trailingEdge(time);\n        }\n        // Restart the timer.\n        timerId = setTimeout(timerExpired, remainingWait(time));\n      }\n\n      function trailingEdge(time) {\n        timerId = undefined;\n\n        // Only invoke if we have `lastArgs` which means `func` has been\n        // debounced at least once.\n        if (trailing && lastArgs) {\n          return invokeFunc(time);\n        }\n        lastArgs = lastThis = undefined;\n        return result;\n      }\n\n      function cancel() {\n        if (timerId !== undefined) {\n          clearTimeout(timerId);\n        }\n        lastInvokeTime = 0;\n        lastArgs = lastCallTime = lastThis = timerId = undefined;\n      }\n\n      function flush() {\n        return timerId === undefined ? result : trailingEdge(now());\n      }\n\n      function debounced() {\n        var time = now(),\n            isInvoking = shouldInvoke(time);\n\n        lastArgs = arguments;\n        lastThis = this;\n        lastCallTime = time;\n\n        if (isInvoking) {\n          if (timerId === undefined) {\n            return leadingEdge(lastCallTime);\n          }\n          if (maxing) {\n            // Handle invocations in a tight loop.\n            clearTimeout(timerId);\n            timerId = setTimeout(timerExpired, wait);\n            return invokeFunc(lastCallTime);\n          }\n        }\n        if (timerId === undefined) {\n          timerId = setTimeout(timerExpired, wait);\n        }\n        return result;\n      }\n      debounced.cancel = cancel;\n      debounced.flush = flush;\n      return debounced;\n    }\n\n    /**\n     * Defers invoking the `func` until the current call stack has cleared. Any\n     * additional arguments are provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to defer.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {number} Returns the timer id.\n     * @example\n     *\n     * _.defer(function(text) {\n     *   console.log(text);\n     * }, 'deferred');\n     * // => Logs 'deferred' after one millisecond.\n     */\n    var defer = baseRest(function(func, args) {\n      return baseDelay(func, 1, args);\n    });\n\n    /**\n     * Invokes `func` after `wait` milliseconds. Any additional arguments are\n     * provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {number} Returns the timer id.\n     * @example\n     *\n     * _.delay(function(text) {\n     *   console.log(text);\n     * }, 1000, 'later');\n     * // => Logs 'later' after one second.\n     */\n    var delay = baseRest(function(func, wait, args) {\n      return baseDelay(func, toNumber(wait) || 0, args);\n    });\n\n    /**\n     * Creates a function that invokes `func` with arguments reversed.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to flip arguments for.\n     * @returns {Function} Returns the new flipped function.\n     * @example\n     *\n     * var flipped = _.flip(function() {\n     *   return _.toArray(arguments);\n     * });\n     *\n     * flipped('a', 'b', 'c', 'd');\n     * // => ['d', 'c', 'b', 'a']\n     */\n    function flip(func) {\n      return createWrap(func, WRAP_FLIP_FLAG);\n    }\n\n    /**\n     * Creates a function that memoizes the result of `func`. If `resolver` is\n     * provided, it determines the cache key for storing the result based on the\n     * arguments provided to the memoized function. By default, the first argument\n     * provided to the memoized function is used as the map cache key. The `func`\n     * is invoked with the `this` binding of the memoized function.\n     *\n     * **Note:** The cache is exposed as the `cache` property on the memoized\n     * function. Its creation may be customized by replacing the `_.memoize.Cache`\n     * constructor with one whose instances implement the\n     * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n     * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to have its output memoized.\n     * @param {Function} [resolver] The function to resolve the cache key.\n     * @returns {Function} Returns the new memoized function.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     * var other = { 'c': 3, 'd': 4 };\n     *\n     * var values = _.memoize(_.values);\n     * values(object);\n     * // => [1, 2]\n     *\n     * values(other);\n     * // => [3, 4]\n     *\n     * object.a = 2;\n     * values(object);\n     * // => [1, 2]\n     *\n     * // Modify the result cache.\n     * values.cache.set(object, ['a', 'b']);\n     * values(object);\n     * // => ['a', 'b']\n     *\n     * // Replace `_.memoize.Cache`.\n     * _.memoize.Cache = WeakMap;\n     */\n    function memoize(func, resolver) {\n      if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      var memoized = function() {\n        var args = arguments,\n            key = resolver ? resolver.apply(this, args) : args[0],\n            cache = memoized.cache;\n\n        if (cache.has(key)) {\n          return cache.get(key);\n        }\n        var result = func.apply(this, args);\n        memoized.cache = cache.set(key, result) || cache;\n        return result;\n      };\n      memoized.cache = new (memoize.Cache || MapCache);\n      return memoized;\n    }\n\n    // Expose `MapCache`.\n    memoize.Cache = MapCache;\n\n    /**\n     * Creates a function that negates the result of the predicate `func`. The\n     * `func` predicate is invoked with the `this` binding and arguments of the\n     * created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} predicate The predicate to negate.\n     * @returns {Function} Returns the new negated function.\n     * @example\n     *\n     * function isEven(n) {\n     *   return n % 2 == 0;\n     * }\n     *\n     * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n     * // => [1, 3, 5]\n     */\n    function negate(predicate) {\n      if (typeof predicate != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      return function() {\n        var args = arguments;\n        switch (args.length) {\n          case 0: return !predicate.call(this);\n          case 1: return !predicate.call(this, args[0]);\n          case 2: return !predicate.call(this, args[0], args[1]);\n          case 3: return !predicate.call(this, args[0], args[1], args[2]);\n        }\n        return !predicate.apply(this, args);\n      };\n    }\n\n    /**\n     * Creates a function that is restricted to invoking `func` once. Repeat calls\n     * to the function return the value of the first invocation. The `func` is\n     * invoked with the `this` binding and arguments of the created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * var initialize = _.once(createApplication);\n     * initialize();\n     * initialize();\n     * // => `createApplication` is invoked once\n     */\n    function once(func) {\n      return before(2, func);\n    }\n\n    /**\n     * Creates a function that invokes `func` with its arguments transformed.\n     *\n     * @static\n     * @since 4.0.0\n     * @memberOf _\n     * @category Function\n     * @param {Function} func The function to wrap.\n     * @param {...(Function|Function[])} [transforms=[_.identity]]\n     *  The argument transforms.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * function doubled(n) {\n     *   return n * 2;\n     * }\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var func = _.overArgs(function(x, y) {\n     *   return [x, y];\n     * }, [square, doubled]);\n     *\n     * func(9, 3);\n     * // => [81, 6]\n     *\n     * func(10, 5);\n     * // => [100, 10]\n     */\n    var overArgs = castRest(function(func, transforms) {\n      transforms = (transforms.length == 1 && isArray(transforms[0]))\n        ? arrayMap(transforms[0], baseUnary(getIteratee()))\n        : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n\n      var funcsLength = transforms.length;\n      return baseRest(function(args) {\n        var index = -1,\n            length = nativeMin(args.length, funcsLength);\n\n        while (++index < length) {\n          args[index] = transforms[index].call(this, args[index]);\n        }\n        return apply(func, this, args);\n      });\n    });\n\n    /**\n     * Creates a function that invokes `func` with `partials` prepended to the\n     * arguments it receives. This method is like `_.bind` except it does **not**\n     * alter the `this` binding.\n     *\n     * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of partially\n     * applied functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.2.0\n     * @category Function\n     * @param {Function} func The function to partially apply arguments to.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new partially applied function.\n     * @example\n     *\n     * function greet(greeting, name) {\n     *   return greeting + ' ' + name;\n     * }\n     *\n     * var sayHelloTo = _.partial(greet, 'hello');\n     * sayHelloTo('fred');\n     * // => 'hello fred'\n     *\n     * // Partially applied with placeholders.\n     * var greetFred = _.partial(greet, _, 'fred');\n     * greetFred('hi');\n     * // => 'hi fred'\n     */\n    var partial = baseRest(function(func, partials) {\n      var holders = replaceHolders(partials, getHolder(partial));\n      return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n    });\n\n    /**\n     * This method is like `_.partial` except that partially applied arguments\n     * are appended to the arguments it receives.\n     *\n     * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of partially\n     * applied functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Function\n     * @param {Function} func The function to partially apply arguments to.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new partially applied function.\n     * @example\n     *\n     * function greet(greeting, name) {\n     *   return greeting + ' ' + name;\n     * }\n     *\n     * var greetFred = _.partialRight(greet, 'fred');\n     * greetFred('hi');\n     * // => 'hi fred'\n     *\n     * // Partially applied with placeholders.\n     * var sayHelloTo = _.partialRight(greet, 'hello', _);\n     * sayHelloTo('fred');\n     * // => 'hello fred'\n     */\n    var partialRight = baseRest(function(func, partials) {\n      var holders = replaceHolders(partials, getHolder(partialRight));\n      return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n    });\n\n    /**\n     * Creates a function that invokes `func` with arguments arranged according\n     * to the specified `indexes` where the argument value at the first index is\n     * provided as the first argument, the argument value at the second index is\n     * provided as the second argument, and so on.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to rearrange arguments for.\n     * @param {...(number|number[])} indexes The arranged argument indexes.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var rearged = _.rearg(function(a, b, c) {\n     *   return [a, b, c];\n     * }, [2, 0, 1]);\n     *\n     * rearged('b', 'c', 'a')\n     * // => ['a', 'b', 'c']\n     */\n    var rearg = flatRest(function(func, indexes) {\n      return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n    });\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of the\n     * created function and arguments from `start` and beyond provided as\n     * an array.\n     *\n     * **Note:** This method is based on the\n     * [rest parameter](https://mdn.io/rest_parameters).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var say = _.rest(function(what, names) {\n     *   return what + ' ' + _.initial(names).join(', ') +\n     *     (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n     * });\n     *\n     * say('hello', 'fred', 'barney', 'pebbles');\n     * // => 'hello fred, barney, & pebbles'\n     */\n    function rest(func, start) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      start = start === undefined ? start : toInteger(start);\n      return baseRest(func, start);\n    }\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of the\n     * create function and an array of arguments much like\n     * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n     *\n     * **Note:** This method is based on the\n     * [spread operator](https://mdn.io/spread_operator).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Function\n     * @param {Function} func The function to spread arguments over.\n     * @param {number} [start=0] The start position of the spread.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var say = _.spread(function(who, what) {\n     *   return who + ' says ' + what;\n     * });\n     *\n     * say(['fred', 'hello']);\n     * // => 'fred says hello'\n     *\n     * var numbers = Promise.all([\n     *   Promise.resolve(40),\n     *   Promise.resolve(36)\n     * ]);\n     *\n     * numbers.then(_.spread(function(x, y) {\n     *   return x + y;\n     * }));\n     * // => a Promise of 76\n     */\n    function spread(func, start) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      start = start == null ? 0 : nativeMax(toInteger(start), 0);\n      return baseRest(function(args) {\n        var array = args[start],\n            otherArgs = castSlice(args, 0, start);\n\n        if (array) {\n          arrayPush(otherArgs, array);\n        }\n        return apply(func, this, otherArgs);\n      });\n    }\n\n    /**\n     * Creates a throttled function that only invokes `func` at most once per\n     * every `wait` milliseconds. The throttled function comes with a `cancel`\n     * method to cancel delayed `func` invocations and a `flush` method to\n     * immediately invoke them. Provide `options` to indicate whether `func`\n     * should be invoked on the leading and/or trailing edge of the `wait`\n     * timeout. The `func` is invoked with the last arguments provided to the\n     * throttled function. Subsequent calls to the throttled function return the\n     * result of the last `func` invocation.\n     *\n     * **Note:** If `leading` and `trailing` options are `true`, `func` is\n     * invoked on the trailing edge of the timeout only if the throttled function\n     * is invoked more than once during the `wait` timeout.\n     *\n     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n     * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n     *\n     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n     * for details over the differences between `_.throttle` and `_.debounce`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to throttle.\n     * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.leading=true]\n     *  Specify invoking on the leading edge of the timeout.\n     * @param {boolean} [options.trailing=true]\n     *  Specify invoking on the trailing edge of the timeout.\n     * @returns {Function} Returns the new throttled function.\n     * @example\n     *\n     * // Avoid excessively updating the position while scrolling.\n     * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n     *\n     * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n     * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n     * jQuery(element).on('click', throttled);\n     *\n     * // Cancel the trailing throttled invocation.\n     * jQuery(window).on('popstate', throttled.cancel);\n     */\n    function throttle(func, wait, options) {\n      var leading = true,\n          trailing = true;\n\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      if (isObject(options)) {\n        leading = 'leading' in options ? !!options.leading : leading;\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\n      }\n      return debounce(func, wait, {\n        'leading': leading,\n        'maxWait': wait,\n        'trailing': trailing\n      });\n    }\n\n    /**\n     * Creates a function that accepts up to one argument, ignoring any\n     * additional arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to cap arguments for.\n     * @returns {Function} Returns the new capped function.\n     * @example\n     *\n     * _.map(['6', '8', '10'], _.unary(parseInt));\n     * // => [6, 8, 10]\n     */\n    function unary(func) {\n      return ary(func, 1);\n    }\n\n    /**\n     * Creates a function that provides `value` to `wrapper` as its first\n     * argument. Any additional arguments provided to the function are appended\n     * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n     * binding of the created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {*} value The value to wrap.\n     * @param {Function} [wrapper=identity] The wrapper function.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var p = _.wrap(_.escape, function(func, text) {\n     *   return '<p>' + func(text) + '</p>';\n     * });\n     *\n     * p('fred, barney, & pebbles');\n     * // => '<p>fred, barney, &amp; pebbles</p>'\n     */\n    function wrap(value, wrapper) {\n      return partial(castFunction(wrapper), value);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Casts `value` as an array if it's not one.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.4.0\n     * @category Lang\n     * @param {*} value The value to inspect.\n     * @returns {Array} Returns the cast array.\n     * @example\n     *\n     * _.castArray(1);\n     * // => [1]\n     *\n     * _.castArray({ 'a': 1 });\n     * // => [{ 'a': 1 }]\n     *\n     * _.castArray('abc');\n     * // => ['abc']\n     *\n     * _.castArray(null);\n     * // => [null]\n     *\n     * _.castArray(undefined);\n     * // => [undefined]\n     *\n     * _.castArray();\n     * // => []\n     *\n     * var array = [1, 2, 3];\n     * console.log(_.castArray(array) === array);\n     * // => true\n     */\n    function castArray() {\n      if (!arguments.length) {\n        return [];\n      }\n      var value = arguments[0];\n      return isArray(value) ? value : [value];\n    }\n\n    /**\n     * Creates a shallow clone of `value`.\n     *\n     * **Note:** This method is loosely based on the\n     * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n     * and supports cloning arrays, array buffers, booleans, date objects, maps,\n     * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n     * arrays. The own enumerable properties of `arguments` objects are cloned\n     * as plain objects. An empty object is returned for uncloneable values such\n     * as error objects, functions, DOM nodes, and WeakMaps.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to clone.\n     * @returns {*} Returns the cloned value.\n     * @see _.cloneDeep\n     * @example\n     *\n     * var objects = [{ 'a': 1 }, { 'b': 2 }];\n     *\n     * var shallow = _.clone(objects);\n     * console.log(shallow[0] === objects[0]);\n     * // => true\n     */\n    function clone(value) {\n      return baseClone(value, CLONE_SYMBOLS_FLAG);\n    }\n\n    /**\n     * This method is like `_.clone` except that it accepts `customizer` which\n     * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n     * cloning is handled by the method instead. The `customizer` is invoked with\n     * up to four arguments; (value [, index|key, object, stack]).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to clone.\n     * @param {Function} [customizer] The function to customize cloning.\n     * @returns {*} Returns the cloned value.\n     * @see _.cloneDeepWith\n     * @example\n     *\n     * function customizer(value) {\n     *   if (_.isElement(value)) {\n     *     return value.cloneNode(false);\n     *   }\n     * }\n     *\n     * var el = _.cloneWith(document.body, customizer);\n     *\n     * console.log(el === document.body);\n     * // => false\n     * console.log(el.nodeName);\n     * // => 'BODY'\n     * console.log(el.childNodes.length);\n     * // => 0\n     */\n    function cloneWith(value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n    }\n\n    /**\n     * This method is like `_.clone` except that it recursively clones `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Lang\n     * @param {*} value The value to recursively clone.\n     * @returns {*} Returns the deep cloned value.\n     * @see _.clone\n     * @example\n     *\n     * var objects = [{ 'a': 1 }, { 'b': 2 }];\n     *\n     * var deep = _.cloneDeep(objects);\n     * console.log(deep[0] === objects[0]);\n     * // => false\n     */\n    function cloneDeep(value) {\n      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n    }\n\n    /**\n     * This method is like `_.cloneWith` except that it recursively clones `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to recursively clone.\n     * @param {Function} [customizer] The function to customize cloning.\n     * @returns {*} Returns the deep cloned value.\n     * @see _.cloneWith\n     * @example\n     *\n     * function customizer(value) {\n     *   if (_.isElement(value)) {\n     *     return value.cloneNode(true);\n     *   }\n     * }\n     *\n     * var el = _.cloneDeepWith(document.body, customizer);\n     *\n     * console.log(el === document.body);\n     * // => false\n     * console.log(el.nodeName);\n     * // => 'BODY'\n     * console.log(el.childNodes.length);\n     * // => 20\n     */\n    function cloneDeepWith(value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n    }\n\n    /**\n     * Checks if `object` conforms to `source` by invoking the predicate\n     * properties of `source` with the corresponding property values of `object`.\n     *\n     * **Note:** This method is equivalent to `_.conforms` when `source` is\n     * partially applied.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.14.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     *\n     * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n     * // => true\n     *\n     * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n     * // => false\n     */\n    function conformsTo(object, source) {\n      return source == null || baseConformsTo(object, source, keys(source));\n    }\n\n    /**\n     * Performs a\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * comparison between two values to determine if they are equivalent.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     * var other = { 'a': 1 };\n     *\n     * _.eq(object, object);\n     * // => true\n     *\n     * _.eq(object, other);\n     * // => false\n     *\n     * _.eq('a', 'a');\n     * // => true\n     *\n     * _.eq('a', Object('a'));\n     * // => false\n     *\n     * _.eq(NaN, NaN);\n     * // => true\n     */\n    function eq(value, other) {\n      return value === other || (value !== value && other !== other);\n    }\n\n    /**\n     * Checks if `value` is greater than `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than `other`,\n     *  else `false`.\n     * @see _.lt\n     * @example\n     *\n     * _.gt(3, 1);\n     * // => true\n     *\n     * _.gt(3, 3);\n     * // => false\n     *\n     * _.gt(1, 3);\n     * // => false\n     */\n    var gt = createRelationalOperation(baseGt);\n\n    /**\n     * Checks if `value` is greater than or equal to `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than or equal to\n     *  `other`, else `false`.\n     * @see _.lte\n     * @example\n     *\n     * _.gte(3, 1);\n     * // => true\n     *\n     * _.gte(3, 3);\n     * // => true\n     *\n     * _.gte(1, 3);\n     * // => false\n     */\n    var gte = createRelationalOperation(function(value, other) {\n      return value >= other;\n    });\n\n    /**\n     * Checks if `value` is likely an `arguments` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n     *  else `false`.\n     * @example\n     *\n     * _.isArguments(function() { return arguments; }());\n     * // => true\n     *\n     * _.isArguments([1, 2, 3]);\n     * // => false\n     */\n    var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n      return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n        !propertyIsEnumerable.call(value, 'callee');\n    };\n\n    /**\n     * Checks if `value` is classified as an `Array` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n     * @example\n     *\n     * _.isArray([1, 2, 3]);\n     * // => true\n     *\n     * _.isArray(document.body.children);\n     * // => false\n     *\n     * _.isArray('abc');\n     * // => false\n     *\n     * _.isArray(_.noop);\n     * // => false\n     */\n    var isArray = Array.isArray;\n\n    /**\n     * Checks if `value` is classified as an `ArrayBuffer` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n     * @example\n     *\n     * _.isArrayBuffer(new ArrayBuffer(2));\n     * // => true\n     *\n     * _.isArrayBuffer(new Array(2));\n     * // => false\n     */\n    var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\n\n    /**\n     * Checks if `value` is array-like. A value is considered array-like if it's\n     * not a function and has a `value.length` that's an integer greater than or\n     * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n     * @example\n     *\n     * _.isArrayLike([1, 2, 3]);\n     * // => true\n     *\n     * _.isArrayLike(document.body.children);\n     * // => true\n     *\n     * _.isArrayLike('abc');\n     * // => true\n     *\n     * _.isArrayLike(_.noop);\n     * // => false\n     */\n    function isArrayLike(value) {\n      return value != null && isLength(value.length) && !isFunction(value);\n    }\n\n    /**\n     * This method is like `_.isArrayLike` except that it also checks if `value`\n     * is an object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array-like object,\n     *  else `false`.\n     * @example\n     *\n     * _.isArrayLikeObject([1, 2, 3]);\n     * // => true\n     *\n     * _.isArrayLikeObject(document.body.children);\n     * // => true\n     *\n     * _.isArrayLikeObject('abc');\n     * // => false\n     *\n     * _.isArrayLikeObject(_.noop);\n     * // => false\n     */\n    function isArrayLikeObject(value) {\n      return isObjectLike(value) && isArrayLike(value);\n    }\n\n    /**\n     * Checks if `value` is classified as a boolean primitive or object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n     * @example\n     *\n     * _.isBoolean(false);\n     * // => true\n     *\n     * _.isBoolean(null);\n     * // => false\n     */\n    function isBoolean(value) {\n      return value === true || value === false ||\n        (isObjectLike(value) && baseGetTag(value) == boolTag);\n    }\n\n    /**\n     * Checks if `value` is a buffer.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n     * @example\n     *\n     * _.isBuffer(new Buffer(2));\n     * // => true\n     *\n     * _.isBuffer(new Uint8Array(2));\n     * // => false\n     */\n    var isBuffer = nativeIsBuffer || stubFalse;\n\n    /**\n     * Checks if `value` is classified as a `Date` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n     * @example\n     *\n     * _.isDate(new Date);\n     * // => true\n     *\n     * _.isDate('Mon April 23 2012');\n     * // => false\n     */\n    var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\n    /**\n     * Checks if `value` is likely a DOM element.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n     * @example\n     *\n     * _.isElement(document.body);\n     * // => true\n     *\n     * _.isElement('<body>');\n     * // => false\n     */\n    function isElement(value) {\n      return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n    }\n\n    /**\n     * Checks if `value` is an empty object, collection, map, or set.\n     *\n     * Objects are considered empty if they have no own enumerable string keyed\n     * properties.\n     *\n     * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n     * jQuery-like collections are considered empty if they have a `length` of `0`.\n     * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n     * @example\n     *\n     * _.isEmpty(null);\n     * // => true\n     *\n     * _.isEmpty(true);\n     * // => true\n     *\n     * _.isEmpty(1);\n     * // => true\n     *\n     * _.isEmpty([1, 2, 3]);\n     * // => false\n     *\n     * _.isEmpty({ 'a': 1 });\n     * // => false\n     */\n    function isEmpty(value) {\n      if (value == null) {\n        return true;\n      }\n      if (isArrayLike(value) &&\n          (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n            isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n        return !value.length;\n      }\n      var tag = getTag(value);\n      if (tag == mapTag || tag == setTag) {\n        return !value.size;\n      }\n      if (isPrototype(value)) {\n        return !baseKeys(value).length;\n      }\n      for (var key in value) {\n        if (hasOwnProperty.call(value, key)) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    /**\n     * Performs a deep comparison between two values to determine if they are\n     * equivalent.\n     *\n     * **Note:** This method supports comparing arrays, array buffers, booleans,\n     * date objects, error objects, maps, numbers, `Object` objects, regexes,\n     * sets, strings, symbols, and typed arrays. `Object` objects are compared\n     * by their own, not inherited, enumerable properties. Functions and DOM\n     * nodes are compared by strict equality, i.e. `===`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     * var other = { 'a': 1 };\n     *\n     * _.isEqual(object, other);\n     * // => true\n     *\n     * object === other;\n     * // => false\n     */\n    function isEqual(value, other) {\n      return baseIsEqual(value, other);\n    }\n\n    /**\n     * This method is like `_.isEqual` except that it accepts `customizer` which\n     * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n     * are handled by the method instead. The `customizer` is invoked with up to\n     * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * function isGreeting(value) {\n     *   return /^h(?:i|ello)$/.test(value);\n     * }\n     *\n     * function customizer(objValue, othValue) {\n     *   if (isGreeting(objValue) && isGreeting(othValue)) {\n     *     return true;\n     *   }\n     * }\n     *\n     * var array = ['hello', 'goodbye'];\n     * var other = ['hi', 'goodbye'];\n     *\n     * _.isEqualWith(array, other, customizer);\n     * // => true\n     */\n    function isEqualWith(value, other, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      var result = customizer ? customizer(value, other) : undefined;\n      return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n    }\n\n    /**\n     * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n     * `SyntaxError`, `TypeError`, or `URIError` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n     * @example\n     *\n     * _.isError(new Error);\n     * // => true\n     *\n     * _.isError(Error);\n     * // => false\n     */\n    function isError(value) {\n      if (!isObjectLike(value)) {\n        return false;\n      }\n      var tag = baseGetTag(value);\n      return tag == errorTag || tag == domExcTag ||\n        (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n    }\n\n    /**\n     * Checks if `value` is a finite primitive number.\n     *\n     * **Note:** This method is based on\n     * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n     * @example\n     *\n     * _.isFinite(3);\n     * // => true\n     *\n     * _.isFinite(Number.MIN_VALUE);\n     * // => true\n     *\n     * _.isFinite(Infinity);\n     * // => false\n     *\n     * _.isFinite('3');\n     * // => false\n     */\n    function isFinite(value) {\n      return typeof value == 'number' && nativeIsFinite(value);\n    }\n\n    /**\n     * Checks if `value` is classified as a `Function` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n     * @example\n     *\n     * _.isFunction(_);\n     * // => true\n     *\n     * _.isFunction(/abc/);\n     * // => false\n     */\n    function isFunction(value) {\n      if (!isObject(value)) {\n        return false;\n      }\n      // The use of `Object#toString` avoids issues with the `typeof` operator\n      // in Safari 9 which returns 'object' for typed arrays and other constructors.\n      var tag = baseGetTag(value);\n      return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n    }\n\n    /**\n     * Checks if `value` is an integer.\n     *\n     * **Note:** This method is based on\n     * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n     * @example\n     *\n     * _.isInteger(3);\n     * // => true\n     *\n     * _.isInteger(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isInteger(Infinity);\n     * // => false\n     *\n     * _.isInteger('3');\n     * // => false\n     */\n    function isInteger(value) {\n      return typeof value == 'number' && value == toInteger(value);\n    }\n\n    /**\n     * Checks if `value` is a valid array-like length.\n     *\n     * **Note:** This method is loosely based on\n     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n     * @example\n     *\n     * _.isLength(3);\n     * // => true\n     *\n     * _.isLength(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isLength(Infinity);\n     * // => false\n     *\n     * _.isLength('3');\n     * // => false\n     */\n    function isLength(value) {\n      return typeof value == 'number' &&\n        value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n    }\n\n    /**\n     * Checks if `value` is the\n     * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n     * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n     * @example\n     *\n     * _.isObject({});\n     * // => true\n     *\n     * _.isObject([1, 2, 3]);\n     * // => true\n     *\n     * _.isObject(_.noop);\n     * // => true\n     *\n     * _.isObject(null);\n     * // => false\n     */\n    function isObject(value) {\n      var type = typeof value;\n      return value != null && (type == 'object' || type == 'function');\n    }\n\n    /**\n     * Checks if `value` is object-like. A value is object-like if it's not `null`\n     * and has a `typeof` result of \"object\".\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n     * @example\n     *\n     * _.isObjectLike({});\n     * // => true\n     *\n     * _.isObjectLike([1, 2, 3]);\n     * // => true\n     *\n     * _.isObjectLike(_.noop);\n     * // => false\n     *\n     * _.isObjectLike(null);\n     * // => false\n     */\n    function isObjectLike(value) {\n      return value != null && typeof value == 'object';\n    }\n\n    /**\n     * Checks if `value` is classified as a `Map` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n     * @example\n     *\n     * _.isMap(new Map);\n     * // => true\n     *\n     * _.isMap(new WeakMap);\n     * // => false\n     */\n    var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n    /**\n     * Performs a partial deep comparison between `object` and `source` to\n     * determine if `object` contains equivalent property values.\n     *\n     * **Note:** This method is equivalent to `_.matches` when `source` is\n     * partially applied.\n     *\n     * Partial comparisons will match empty array and empty object `source`\n     * values against any array or object value, respectively. See `_.isEqual`\n     * for a list of supported value comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     *\n     * _.isMatch(object, { 'b': 2 });\n     * // => true\n     *\n     * _.isMatch(object, { 'b': 1 });\n     * // => false\n     */\n    function isMatch(object, source) {\n      return object === source || baseIsMatch(object, source, getMatchData(source));\n    }\n\n    /**\n     * This method is like `_.isMatch` except that it accepts `customizer` which\n     * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n     * are handled by the method instead. The `customizer` is invoked with five\n     * arguments: (objValue, srcValue, index|key, object, source).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     * @example\n     *\n     * function isGreeting(value) {\n     *   return /^h(?:i|ello)$/.test(value);\n     * }\n     *\n     * function customizer(objValue, srcValue) {\n     *   if (isGreeting(objValue) && isGreeting(srcValue)) {\n     *     return true;\n     *   }\n     * }\n     *\n     * var object = { 'greeting': 'hello' };\n     * var source = { 'greeting': 'hi' };\n     *\n     * _.isMatchWith(object, source, customizer);\n     * // => true\n     */\n    function isMatchWith(object, source, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseIsMatch(object, source, getMatchData(source), customizer);\n    }\n\n    /**\n     * Checks if `value` is `NaN`.\n     *\n     * **Note:** This method is based on\n     * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n     * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n     * `undefined` and other non-number values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n     * @example\n     *\n     * _.isNaN(NaN);\n     * // => true\n     *\n     * _.isNaN(new Number(NaN));\n     * // => true\n     *\n     * isNaN(undefined);\n     * // => true\n     *\n     * _.isNaN(undefined);\n     * // => false\n     */\n    function isNaN(value) {\n      // An `NaN` primitive is the only value that is not equal to itself.\n      // Perform the `toStringTag` check first to avoid errors with some\n      // ActiveX objects in IE.\n      return isNumber(value) && value != +value;\n    }\n\n    /**\n     * Checks if `value` is a pristine native function.\n     *\n     * **Note:** This method can't reliably detect native functions in the presence\n     * of the core-js package because core-js circumvents this kind of detection.\n     * Despite multiple requests, the core-js maintainer has made it clear: any\n     * attempt to fix the detection will be obstructed. As a result, we're left\n     * with little choice but to throw an error. Unfortunately, this also affects\n     * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n     * which rely on core-js.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a native function,\n     *  else `false`.\n     * @example\n     *\n     * _.isNative(Array.prototype.push);\n     * // => true\n     *\n     * _.isNative(_);\n     * // => false\n     */\n    function isNative(value) {\n      if (isMaskable(value)) {\n        throw new Error(CORE_ERROR_TEXT);\n      }\n      return baseIsNative(value);\n    }\n\n    /**\n     * Checks if `value` is `null`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n     * @example\n     *\n     * _.isNull(null);\n     * // => true\n     *\n     * _.isNull(void 0);\n     * // => false\n     */\n    function isNull(value) {\n      return value === null;\n    }\n\n    /**\n     * Checks if `value` is `null` or `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n     * @example\n     *\n     * _.isNil(null);\n     * // => true\n     *\n     * _.isNil(void 0);\n     * // => true\n     *\n     * _.isNil(NaN);\n     * // => false\n     */\n    function isNil(value) {\n      return value == null;\n    }\n\n    /**\n     * Checks if `value` is classified as a `Number` primitive or object.\n     *\n     * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n     * classified as numbers, use the `_.isFinite` method.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n     * @example\n     *\n     * _.isNumber(3);\n     * // => true\n     *\n     * _.isNumber(Number.MIN_VALUE);\n     * // => true\n     *\n     * _.isNumber(Infinity);\n     * // => true\n     *\n     * _.isNumber('3');\n     * // => false\n     */\n    function isNumber(value) {\n      return typeof value == 'number' ||\n        (isObjectLike(value) && baseGetTag(value) == numberTag);\n    }\n\n    /**\n     * Checks if `value` is a plain object, that is, an object created by the\n     * `Object` constructor or one with a `[[Prototype]]` of `null`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.8.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * _.isPlainObject(new Foo);\n     * // => false\n     *\n     * _.isPlainObject([1, 2, 3]);\n     * // => false\n     *\n     * _.isPlainObject({ 'x': 0, 'y': 0 });\n     * // => true\n     *\n     * _.isPlainObject(Object.create(null));\n     * // => true\n     */\n    function isPlainObject(value) {\n      if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n        return false;\n      }\n      var proto = getPrototype(value);\n      if (proto === null) {\n        return true;\n      }\n      var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n      return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n        funcToString.call(Ctor) == objectCtorString;\n    }\n\n    /**\n     * Checks if `value` is classified as a `RegExp` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n     * @example\n     *\n     * _.isRegExp(/abc/);\n     * // => true\n     *\n     * _.isRegExp('/abc/');\n     * // => false\n     */\n    var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\n    /**\n     * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n     * double precision number which isn't the result of a rounded unsafe integer.\n     *\n     * **Note:** This method is based on\n     * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.\n     * @example\n     *\n     * _.isSafeInteger(3);\n     * // => true\n     *\n     * _.isSafeInteger(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isSafeInteger(Infinity);\n     * // => false\n     *\n     * _.isSafeInteger('3');\n     * // => false\n     */\n    function isSafeInteger(value) {\n      return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n    }\n\n    /**\n     * Checks if `value` is classified as a `Set` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n     * @example\n     *\n     * _.isSet(new Set);\n     * // => true\n     *\n     * _.isSet(new WeakSet);\n     * // => false\n     */\n    var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\n    /**\n     * Checks if `value` is classified as a `String` primitive or object.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n     * @example\n     *\n     * _.isString('abc');\n     * // => true\n     *\n     * _.isString(1);\n     * // => false\n     */\n    function isString(value) {\n      return typeof value == 'string' ||\n        (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n    }\n\n    /**\n     * Checks if `value` is classified as a `Symbol` primitive or object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n     * @example\n     *\n     * _.isSymbol(Symbol.iterator);\n     * // => true\n     *\n     * _.isSymbol('abc');\n     * // => false\n     */\n    function isSymbol(value) {\n      return typeof value == 'symbol' ||\n        (isObjectLike(value) && baseGetTag(value) == symbolTag);\n    }\n\n    /**\n     * Checks if `value` is classified as a typed array.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n     * @example\n     *\n     * _.isTypedArray(new Uint8Array);\n     * // => true\n     *\n     * _.isTypedArray([]);\n     * // => false\n     */\n    var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n    /**\n     * Checks if `value` is `undefined`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n     * @example\n     *\n     * _.isUndefined(void 0);\n     * // => true\n     *\n     * _.isUndefined(null);\n     * // => false\n     */\n    function isUndefined(value) {\n      return value === undefined;\n    }\n\n    /**\n     * Checks if `value` is classified as a `WeakMap` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n     * @example\n     *\n     * _.isWeakMap(new WeakMap);\n     * // => true\n     *\n     * _.isWeakMap(new Map);\n     * // => false\n     */\n    function isWeakMap(value) {\n      return isObjectLike(value) && getTag(value) == weakMapTag;\n    }\n\n    /**\n     * Checks if `value` is classified as a `WeakSet` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n     * @example\n     *\n     * _.isWeakSet(new WeakSet);\n     * // => true\n     *\n     * _.isWeakSet(new Set);\n     * // => false\n     */\n    function isWeakSet(value) {\n      return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n    }\n\n    /**\n     * Checks if `value` is less than `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than `other`,\n     *  else `false`.\n     * @see _.gt\n     * @example\n     *\n     * _.lt(1, 3);\n     * // => true\n     *\n     * _.lt(3, 3);\n     * // => false\n     *\n     * _.lt(3, 1);\n     * // => false\n     */\n    var lt = createRelationalOperation(baseLt);\n\n    /**\n     * Checks if `value` is less than or equal to `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than or equal to\n     *  `other`, else `false`.\n     * @see _.gte\n     * @example\n     *\n     * _.lte(1, 3);\n     * // => true\n     *\n     * _.lte(3, 3);\n     * // => true\n     *\n     * _.lte(3, 1);\n     * // => false\n     */\n    var lte = createRelationalOperation(function(value, other) {\n      return value <= other;\n    });\n\n    /**\n     * Converts `value` to an array.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {Array} Returns the converted array.\n     * @example\n     *\n     * _.toArray({ 'a': 1, 'b': 2 });\n     * // => [1, 2]\n     *\n     * _.toArray('abc');\n     * // => ['a', 'b', 'c']\n     *\n     * _.toArray(1);\n     * // => []\n     *\n     * _.toArray(null);\n     * // => []\n     */\n    function toArray(value) {\n      if (!value) {\n        return [];\n      }\n      if (isArrayLike(value)) {\n        return isString(value) ? stringToArray(value) : copyArray(value);\n      }\n      if (symIterator && value[symIterator]) {\n        return iteratorToArray(value[symIterator]());\n      }\n      var tag = getTag(value),\n          func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\n      return func(value);\n    }\n\n    /**\n     * Converts `value` to a finite number.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.12.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted number.\n     * @example\n     *\n     * _.toFinite(3.2);\n     * // => 3.2\n     *\n     * _.toFinite(Number.MIN_VALUE);\n     * // => 5e-324\n     *\n     * _.toFinite(Infinity);\n     * // => 1.7976931348623157e+308\n     *\n     * _.toFinite('3.2');\n     * // => 3.2\n     */\n    function toFinite(value) {\n      if (!value) {\n        return value === 0 ? value : 0;\n      }\n      value = toNumber(value);\n      if (value === INFINITY || value === -INFINITY) {\n        var sign = (value < 0 ? -1 : 1);\n        return sign * MAX_INTEGER;\n      }\n      return value === value ? value : 0;\n    }\n\n    /**\n     * Converts `value` to an integer.\n     *\n     * **Note:** This method is loosely based on\n     * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toInteger(3.2);\n     * // => 3\n     *\n     * _.toInteger(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toInteger(Infinity);\n     * // => 1.7976931348623157e+308\n     *\n     * _.toInteger('3.2');\n     * // => 3\n     */\n    function toInteger(value) {\n      var result = toFinite(value),\n          remainder = result % 1;\n\n      return result === result ? (remainder ? result - remainder : result) : 0;\n    }\n\n    /**\n     * Converts `value` to an integer suitable for use as the length of an\n     * array-like object.\n     *\n     * **Note:** This method is based on\n     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toLength(3.2);\n     * // => 3\n     *\n     * _.toLength(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toLength(Infinity);\n     * // => 4294967295\n     *\n     * _.toLength('3.2');\n     * // => 3\n     */\n    function toLength(value) {\n      return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n    }\n\n    /**\n     * Converts `value` to a number.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to process.\n     * @returns {number} Returns the number.\n     * @example\n     *\n     * _.toNumber(3.2);\n     * // => 3.2\n     *\n     * _.toNumber(Number.MIN_VALUE);\n     * // => 5e-324\n     *\n     * _.toNumber(Infinity);\n     * // => Infinity\n     *\n     * _.toNumber('3.2');\n     * // => 3.2\n     */\n    function toNumber(value) {\n      if (typeof value == 'number') {\n        return value;\n      }\n      if (isSymbol(value)) {\n        return NAN;\n      }\n      if (isObject(value)) {\n        var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n        value = isObject(other) ? (other + '') : other;\n      }\n      if (typeof value != 'string') {\n        return value === 0 ? value : +value;\n      }\n      value = baseTrim(value);\n      var isBinary = reIsBinary.test(value);\n      return (isBinary || reIsOctal.test(value))\n        ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n        : (reIsBadHex.test(value) ? NAN : +value);\n    }\n\n    /**\n     * Converts `value` to a plain object flattening inherited enumerable string\n     * keyed properties of `value` to own properties of the plain object.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {Object} Returns the converted plain object.\n     * @example\n     *\n     * function Foo() {\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.assign({ 'a': 1 }, new Foo);\n     * // => { 'a': 1, 'b': 2 }\n     *\n     * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n     * // => { 'a': 1, 'b': 2, 'c': 3 }\n     */\n    function toPlainObject(value) {\n      return copyObject(value, keysIn(value));\n    }\n\n    /**\n     * Converts `value` to a safe integer. A safe integer can be compared and\n     * represented correctly.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toSafeInteger(3.2);\n     * // => 3\n     *\n     * _.toSafeInteger(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toSafeInteger(Infinity);\n     * // => 9007199254740991\n     *\n     * _.toSafeInteger('3.2');\n     * // => 3\n     */\n    function toSafeInteger(value) {\n      return value\n        ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n        : (value === 0 ? value : 0);\n    }\n\n    /**\n     * Converts `value` to a string. An empty string is returned for `null`\n     * and `undefined` values. The sign of `-0` is preserved.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.toString(null);\n     * // => ''\n     *\n     * _.toString(-0);\n     * // => '-0'\n     *\n     * _.toString([1, 2, 3]);\n     * // => '1,2,3'\n     */\n    function toString(value) {\n      return value == null ? '' : baseToString(value);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Assigns own enumerable string keyed properties of source objects to the\n     * destination object. Source objects are applied from left to right.\n     * Subsequent sources overwrite property assignments of previous sources.\n     *\n     * **Note:** This method mutates `object` and is loosely based on\n     * [`Object.assign`](https://mdn.io/Object/assign).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.10.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.assignIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * function Bar() {\n     *   this.c = 3;\n     * }\n     *\n     * Foo.prototype.b = 2;\n     * Bar.prototype.d = 4;\n     *\n     * _.assign({ 'a': 0 }, new Foo, new Bar);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    var assign = createAssigner(function(object, source) {\n      if (isPrototype(source) || isArrayLike(source)) {\n        copyObject(source, keys(source), object);\n        return;\n      }\n      for (var key in source) {\n        if (hasOwnProperty.call(source, key)) {\n          assignValue(object, key, source[key]);\n        }\n      }\n    });\n\n    /**\n     * This method is like `_.assign` except that it iterates over own and\n     * inherited source properties.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias extend\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.assign\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * function Bar() {\n     *   this.c = 3;\n     * }\n     *\n     * Foo.prototype.b = 2;\n     * Bar.prototype.d = 4;\n     *\n     * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n     * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n     */\n    var assignIn = createAssigner(function(object, source) {\n      copyObject(source, keysIn(source), object);\n    });\n\n    /**\n     * This method is like `_.assignIn` except that it accepts `customizer`\n     * which is invoked to produce the assigned values. If `customizer` returns\n     * `undefined`, assignment is handled by the method instead. The `customizer`\n     * is invoked with five arguments: (objValue, srcValue, key, object, source).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias extendWith\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @see _.assignWith\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   return _.isUndefined(objValue) ? srcValue : objValue;\n     * }\n     *\n     * var defaults = _.partialRight(_.assignInWith, customizer);\n     *\n     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n      copyObject(source, keysIn(source), object, customizer);\n    });\n\n    /**\n     * This method is like `_.assign` except that it accepts `customizer`\n     * which is invoked to produce the assigned values. If `customizer` returns\n     * `undefined`, assignment is handled by the method instead. The `customizer`\n     * is invoked with five arguments: (objValue, srcValue, key, object, source).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @see _.assignInWith\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   return _.isUndefined(objValue) ? srcValue : objValue;\n     * }\n     *\n     * var defaults = _.partialRight(_.assignWith, customizer);\n     *\n     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n      copyObject(source, keys(source), object, customizer);\n    });\n\n    /**\n     * Creates an array of values corresponding to `paths` of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Array} Returns the picked values.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n     *\n     * _.at(object, ['a[0].b.c', 'a[1]']);\n     * // => [3, 4]\n     */\n    var at = flatRest(baseAt);\n\n    /**\n     * Creates an object that inherits from the `prototype` object. If a\n     * `properties` object is given, its own enumerable string keyed properties\n     * are assigned to the created object.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.3.0\n     * @category Object\n     * @param {Object} prototype The object to inherit from.\n     * @param {Object} [properties] The properties to assign to the object.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * function Shape() {\n     *   this.x = 0;\n     *   this.y = 0;\n     * }\n     *\n     * function Circle() {\n     *   Shape.call(this);\n     * }\n     *\n     * Circle.prototype = _.create(Shape.prototype, {\n     *   'constructor': Circle\n     * });\n     *\n     * var circle = new Circle;\n     * circle instanceof Circle;\n     * // => true\n     *\n     * circle instanceof Shape;\n     * // => true\n     */\n    function create(prototype, properties) {\n      var result = baseCreate(prototype);\n      return properties == null ? result : baseAssign(result, properties);\n    }\n\n    /**\n     * Assigns own and inherited enumerable string keyed properties of source\n     * objects to the destination object for all destination properties that\n     * resolve to `undefined`. Source objects are applied from left to right.\n     * Once a property is set, additional values of the same property are ignored.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.defaultsDeep\n     * @example\n     *\n     * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var defaults = baseRest(function(object, sources) {\n      object = Object(object);\n\n      var index = -1;\n      var length = sources.length;\n      var guard = length > 2 ? sources[2] : undefined;\n\n      if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n        length = 1;\n      }\n\n      while (++index < length) {\n        var source = sources[index];\n        var props = keysIn(source);\n        var propsIndex = -1;\n        var propsLength = props.length;\n\n        while (++propsIndex < propsLength) {\n          var key = props[propsIndex];\n          var value = object[key];\n\n          if (value === undefined ||\n              (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n            object[key] = source[key];\n          }\n        }\n      }\n\n      return object;\n    });\n\n    /**\n     * This method is like `_.defaults` except that it recursively assigns\n     * default properties.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.defaults\n     * @example\n     *\n     * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n     * // => { 'a': { 'b': 2, 'c': 3 } }\n     */\n    var defaultsDeep = baseRest(function(args) {\n      args.push(undefined, customDefaultsMerge);\n      return apply(mergeWith, undefined, args);\n    });\n\n    /**\n     * This method is like `_.find` except that it returns the key of the first\n     * element `predicate` returns truthy for instead of the element itself.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {string|undefined} Returns the key of the matched element,\n     *  else `undefined`.\n     * @example\n     *\n     * var users = {\n     *   'barney':  { 'age': 36, 'active': true },\n     *   'fred':    { 'age': 40, 'active': false },\n     *   'pebbles': { 'age': 1,  'active': true }\n     * };\n     *\n     * _.findKey(users, function(o) { return o.age < 40; });\n     * // => 'barney' (iteration order is not guaranteed)\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findKey(users, { 'age': 1, 'active': true });\n     * // => 'pebbles'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findKey(users, ['active', false]);\n     * // => 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findKey(users, 'active');\n     * // => 'barney'\n     */\n    function findKey(object, predicate) {\n      return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n    }\n\n    /**\n     * This method is like `_.findKey` except that it iterates over elements of\n     * a collection in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {string|undefined} Returns the key of the matched element,\n     *  else `undefined`.\n     * @example\n     *\n     * var users = {\n     *   'barney':  { 'age': 36, 'active': true },\n     *   'fred':    { 'age': 40, 'active': false },\n     *   'pebbles': { 'age': 1,  'active': true }\n     * };\n     *\n     * _.findLastKey(users, function(o) { return o.age < 40; });\n     * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findLastKey(users, { 'age': 36, 'active': true });\n     * // => 'barney'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findLastKey(users, ['active', false]);\n     * // => 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findLastKey(users, 'active');\n     * // => 'pebbles'\n     */\n    function findLastKey(object, predicate) {\n      return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n    }\n\n    /**\n     * Iterates over own and inherited enumerable string keyed properties of an\n     * object and invokes `iteratee` for each property. The iteratee is invoked\n     * with three arguments: (value, key, object). Iteratee functions may exit\n     * iteration early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forInRight\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forIn(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n     */\n    function forIn(object, iteratee) {\n      return object == null\n        ? object\n        : baseFor(object, getIteratee(iteratee, 3), keysIn);\n    }\n\n    /**\n     * This method is like `_.forIn` except that it iterates over properties of\n     * `object` in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forInRight(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n     */\n    function forInRight(object, iteratee) {\n      return object == null\n        ? object\n        : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n    }\n\n    /**\n     * Iterates over own enumerable string keyed properties of an object and\n     * invokes `iteratee` for each property. The iteratee is invoked with three\n     * arguments: (value, key, object). Iteratee functions may exit iteration\n     * early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forOwnRight\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forOwn(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n     */\n    function forOwn(object, iteratee) {\n      return object && baseForOwn(object, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.forOwn` except that it iterates over properties of\n     * `object` in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forOwn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forOwnRight(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n     */\n    function forOwnRight(object, iteratee) {\n      return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * Creates an array of function property names from own enumerable properties\n     * of `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns the function names.\n     * @see _.functionsIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = _.constant('a');\n     *   this.b = _.constant('b');\n     * }\n     *\n     * Foo.prototype.c = _.constant('c');\n     *\n     * _.functions(new Foo);\n     * // => ['a', 'b']\n     */\n    function functions(object) {\n      return object == null ? [] : baseFunctions(object, keys(object));\n    }\n\n    /**\n     * Creates an array of function property names from own and inherited\n     * enumerable properties of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns the function names.\n     * @see _.functions\n     * @example\n     *\n     * function Foo() {\n     *   this.a = _.constant('a');\n     *   this.b = _.constant('b');\n     * }\n     *\n     * Foo.prototype.c = _.constant('c');\n     *\n     * _.functionsIn(new Foo);\n     * // => ['a', 'b', 'c']\n     */\n    function functionsIn(object) {\n      return object == null ? [] : baseFunctions(object, keysIn(object));\n    }\n\n    /**\n     * Gets the value at `path` of `object`. If the resolved value is\n     * `undefined`, the `defaultValue` is returned in its place.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to get.\n     * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.get(object, 'a[0].b.c');\n     * // => 3\n     *\n     * _.get(object, ['a', '0', 'b', 'c']);\n     * // => 3\n     *\n     * _.get(object, 'a.b.c', 'default');\n     * // => 'default'\n     */\n    function get(object, path, defaultValue) {\n      var result = object == null ? undefined : baseGet(object, path);\n      return result === undefined ? defaultValue : result;\n    }\n\n    /**\n     * Checks if `path` is a direct property of `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     * @example\n     *\n     * var object = { 'a': { 'b': 2 } };\n     * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n     *\n     * _.has(object, 'a');\n     * // => true\n     *\n     * _.has(object, 'a.b');\n     * // => true\n     *\n     * _.has(object, ['a', 'b']);\n     * // => true\n     *\n     * _.has(other, 'a');\n     * // => false\n     */\n    function has(object, path) {\n      return object != null && hasPath(object, path, baseHas);\n    }\n\n    /**\n     * Checks if `path` is a direct or inherited property of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     * @example\n     *\n     * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n     *\n     * _.hasIn(object, 'a');\n     * // => true\n     *\n     * _.hasIn(object, 'a.b');\n     * // => true\n     *\n     * _.hasIn(object, ['a', 'b']);\n     * // => true\n     *\n     * _.hasIn(object, 'b');\n     * // => false\n     */\n    function hasIn(object, path) {\n      return object != null && hasPath(object, path, baseHasIn);\n    }\n\n    /**\n     * Creates an object composed of the inverted keys and values of `object`.\n     * If `object` contains duplicate values, subsequent values overwrite\n     * property assignments of previous values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.7.0\n     * @category Object\n     * @param {Object} object The object to invert.\n     * @returns {Object} Returns the new inverted object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2, 'c': 1 };\n     *\n     * _.invert(object);\n     * // => { '1': 'c', '2': 'b' }\n     */\n    var invert = createInverter(function(result, value, key) {\n      if (value != null &&\n          typeof value.toString != 'function') {\n        value = nativeObjectToString.call(value);\n      }\n\n      result[value] = key;\n    }, constant(identity));\n\n    /**\n     * This method is like `_.invert` except that the inverted object is generated\n     * from the results of running each element of `object` thru `iteratee`. The\n     * corresponding inverted value of each inverted key is an array of keys\n     * responsible for generating the inverted value. The iteratee is invoked\n     * with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.1.0\n     * @category Object\n     * @param {Object} object The object to invert.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Object} Returns the new inverted object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2, 'c': 1 };\n     *\n     * _.invertBy(object);\n     * // => { '1': ['a', 'c'], '2': ['b'] }\n     *\n     * _.invertBy(object, function(value) {\n     *   return 'group' + value;\n     * });\n     * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n     */\n    var invertBy = createInverter(function(result, value, key) {\n      if (value != null &&\n          typeof value.toString != 'function') {\n        value = nativeObjectToString.call(value);\n      }\n\n      if (hasOwnProperty.call(result, value)) {\n        result[value].push(key);\n      } else {\n        result[value] = [key];\n      }\n    }, getIteratee);\n\n    /**\n     * Invokes the method at `path` of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {*} Returns the result of the invoked method.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n     *\n     * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n     * // => [2, 3]\n     */\n    var invoke = baseRest(baseInvoke);\n\n    /**\n     * Creates an array of the own enumerable property names of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects. See the\n     * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n     * for more details.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.keys(new Foo);\n     * // => ['a', 'b'] (iteration order is not guaranteed)\n     *\n     * _.keys('hi');\n     * // => ['0', '1']\n     */\n    function keys(object) {\n      return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n    }\n\n    /**\n     * Creates an array of the own and inherited enumerable property names of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.keysIn(new Foo);\n     * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n     */\n    function keysIn(object) {\n      return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n    }\n\n    /**\n     * The opposite of `_.mapValues`; this method creates an object with the\n     * same values as `object` and keys generated by running each own enumerable\n     * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n     * with three arguments: (value, key, object).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns the new mapped object.\n     * @see _.mapValues\n     * @example\n     *\n     * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n     *   return key + value;\n     * });\n     * // => { 'a1': 1, 'b2': 2 }\n     */\n    function mapKeys(object, iteratee) {\n      var result = {};\n      iteratee = getIteratee(iteratee, 3);\n\n      baseForOwn(object, function(value, key, object) {\n        baseAssignValue(result, iteratee(value, key, object), value);\n      });\n      return result;\n    }\n\n    /**\n     * Creates an object with the same keys as `object` and values generated\n     * by running each own enumerable string keyed property of `object` thru\n     * `iteratee`. The iteratee is invoked with three arguments:\n     * (value, key, object).\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns the new mapped object.\n     * @see _.mapKeys\n     * @example\n     *\n     * var users = {\n     *   'fred':    { 'user': 'fred',    'age': 40 },\n     *   'pebbles': { 'user': 'pebbles', 'age': 1 }\n     * };\n     *\n     * _.mapValues(users, function(o) { return o.age; });\n     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.mapValues(users, 'age');\n     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n     */\n    function mapValues(object, iteratee) {\n      var result = {};\n      iteratee = getIteratee(iteratee, 3);\n\n      baseForOwn(object, function(value, key, object) {\n        baseAssignValue(result, key, iteratee(value, key, object));\n      });\n      return result;\n    }\n\n    /**\n     * This method is like `_.assign` except that it recursively merges own and\n     * inherited enumerable string keyed properties of source objects into the\n     * destination object. Source properties that resolve to `undefined` are\n     * skipped if a destination value exists. Array and plain object properties\n     * are merged recursively. Other objects and value types are overridden by\n     * assignment. Source objects are applied from left to right. Subsequent\n     * sources overwrite property assignments of previous sources.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {\n     *   'a': [{ 'b': 2 }, { 'd': 4 }]\n     * };\n     *\n     * var other = {\n     *   'a': [{ 'c': 3 }, { 'e': 5 }]\n     * };\n     *\n     * _.merge(object, other);\n     * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n     */\n    var merge = createAssigner(function(object, source, srcIndex) {\n      baseMerge(object, source, srcIndex);\n    });\n\n    /**\n     * This method is like `_.merge` except that it accepts `customizer` which\n     * is invoked to produce the merged values of the destination and source\n     * properties. If `customizer` returns `undefined`, merging is handled by the\n     * method instead. The `customizer` is invoked with six arguments:\n     * (objValue, srcValue, key, object, source, stack).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} customizer The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   if (_.isArray(objValue)) {\n     *     return objValue.concat(srcValue);\n     *   }\n     * }\n     *\n     * var object = { 'a': [1], 'b': [2] };\n     * var other = { 'a': [3], 'b': [4] };\n     *\n     * _.mergeWith(object, other, customizer);\n     * // => { 'a': [1, 3], 'b': [2, 4] }\n     */\n    var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n      baseMerge(object, source, srcIndex, customizer);\n    });\n\n    /**\n     * The opposite of `_.pick`; this method creates an object composed of the\n     * own and inherited enumerable property paths of `object` that are not omitted.\n     *\n     * **Note:** This method is considerably slower than `_.pick`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {...(string|string[])} [paths] The property paths to omit.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.omit(object, ['a', 'c']);\n     * // => { 'b': '2' }\n     */\n    var omit = flatRest(function(object, paths) {\n      var result = {};\n      if (object == null) {\n        return result;\n      }\n      var isDeep = false;\n      paths = arrayMap(paths, function(path) {\n        path = castPath(path, object);\n        isDeep || (isDeep = path.length > 1);\n        return path;\n      });\n      copyObject(object, getAllKeysIn(object), result);\n      if (isDeep) {\n        result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n      }\n      var length = paths.length;\n      while (length--) {\n        baseUnset(result, paths[length]);\n      }\n      return result;\n    });\n\n    /**\n     * The opposite of `_.pickBy`; this method creates an object composed of\n     * the own and inherited enumerable string keyed properties of `object` that\n     * `predicate` doesn't return truthy for. The predicate is invoked with two\n     * arguments: (value, key).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {Function} [predicate=_.identity] The function invoked per property.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.omitBy(object, _.isNumber);\n     * // => { 'b': '2' }\n     */\n    function omitBy(object, predicate) {\n      return pickBy(object, negate(getIteratee(predicate)));\n    }\n\n    /**\n     * Creates an object composed of the picked `object` properties.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.pick(object, ['a', 'c']);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    var pick = flatRest(function(object, paths) {\n      return object == null ? {} : basePick(object, paths);\n    });\n\n    /**\n     * Creates an object composed of the `object` properties `predicate` returns\n     * truthy for. The predicate is invoked with two arguments: (value, key).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {Function} [predicate=_.identity] The function invoked per property.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.pickBy(object, _.isNumber);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    function pickBy(object, predicate) {\n      if (object == null) {\n        return {};\n      }\n      var props = arrayMap(getAllKeysIn(object), function(prop) {\n        return [prop];\n      });\n      predicate = getIteratee(predicate);\n      return basePickBy(object, props, function(value, path) {\n        return predicate(value, path[0]);\n      });\n    }\n\n    /**\n     * This method is like `_.get` except that if the resolved value is a\n     * function it's invoked with the `this` binding of its parent object and\n     * its result is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to resolve.\n     * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n     *\n     * _.result(object, 'a[0].b.c1');\n     * // => 3\n     *\n     * _.result(object, 'a[0].b.c2');\n     * // => 4\n     *\n     * _.result(object, 'a[0].b.c3', 'default');\n     * // => 'default'\n     *\n     * _.result(object, 'a[0].b.c3', _.constant('default'));\n     * // => 'default'\n     */\n    function result(object, path, defaultValue) {\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length;\n\n      // Ensure the loop is entered when path is empty.\n      if (!length) {\n        length = 1;\n        object = undefined;\n      }\n      while (++index < length) {\n        var value = object == null ? undefined : object[toKey(path[index])];\n        if (value === undefined) {\n          index = length;\n          value = defaultValue;\n        }\n        object = isFunction(value) ? value.call(object) : value;\n      }\n      return object;\n    }\n\n    /**\n     * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n     * it's created. Arrays are created for missing index properties while objects\n     * are created for all other missing properties. Use `_.setWith` to customize\n     * `path` creation.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.set(object, 'a[0].b.c', 4);\n     * console.log(object.a[0].b.c);\n     * // => 4\n     *\n     * _.set(object, ['x', '0', 'y', 'z'], 5);\n     * console.log(object.x[0].y.z);\n     * // => 5\n     */\n    function set(object, path, value) {\n      return object == null ? object : baseSet(object, path, value);\n    }\n\n    /**\n     * This method is like `_.set` except that it accepts `customizer` which is\n     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`\n     * path creation is handled by the method instead. The `customizer` is invoked\n     * with three arguments: (nsValue, key, nsObject).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {};\n     *\n     * _.setWith(object, '[0][1]', 'a', Object);\n     * // => { '0': { '1': 'a' } }\n     */\n    function setWith(object, path, value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return object == null ? object : baseSet(object, path, value, customizer);\n    }\n\n    /**\n     * Creates an array of own enumerable string keyed-value pairs for `object`\n     * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n     * entries are returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias entries\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the key-value pairs.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.toPairs(new Foo);\n     * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n     */\n    var toPairs = createToPairs(keys);\n\n    /**\n     * Creates an array of own and inherited enumerable string keyed-value pairs\n     * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n     * or set, its entries are returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias entriesIn\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the key-value pairs.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.toPairsIn(new Foo);\n     * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n     */\n    var toPairsIn = createToPairs(keysIn);\n\n    /**\n     * An alternative to `_.reduce`; this method transforms `object` to a new\n     * `accumulator` object which is the result of running each of its own\n     * enumerable string keyed properties thru `iteratee`, with each invocation\n     * potentially mutating the `accumulator` object. If `accumulator` is not\n     * provided, a new object with the same `[[Prototype]]` will be used. The\n     * iteratee is invoked with four arguments: (accumulator, value, key, object).\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The custom accumulator value.\n     * @returns {*} Returns the accumulated value.\n     * @example\n     *\n     * _.transform([2, 3, 4], function(result, n) {\n     *   result.push(n *= n);\n     *   return n % 2 == 0;\n     * }, []);\n     * // => [4, 9]\n     *\n     * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n     *   (result[value] || (result[value] = [])).push(key);\n     * }, {});\n     * // => { '1': ['a', 'c'], '2': ['b'] }\n     */\n    function transform(object, iteratee, accumulator) {\n      var isArr = isArray(object),\n          isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n      iteratee = getIteratee(iteratee, 4);\n      if (accumulator == null) {\n        var Ctor = object && object.constructor;\n        if (isArrLike) {\n          accumulator = isArr ? new Ctor : [];\n        }\n        else if (isObject(object)) {\n          accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n        }\n        else {\n          accumulator = {};\n        }\n      }\n      (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n        return iteratee(accumulator, value, index, object);\n      });\n      return accumulator;\n    }\n\n    /**\n     * Removes the property at `path` of `object`.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to unset.\n     * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n     * _.unset(object, 'a[0].b.c');\n     * // => true\n     *\n     * console.log(object);\n     * // => { 'a': [{ 'b': {} }] };\n     *\n     * _.unset(object, ['a', '0', 'b', 'c']);\n     * // => true\n     *\n     * console.log(object);\n     * // => { 'a': [{ 'b': {} }] };\n     */\n    function unset(object, path) {\n      return object == null ? true : baseUnset(object, path);\n    }\n\n    /**\n     * This method is like `_.set` except that accepts `updater` to produce the\n     * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n     * is invoked with one argument: (value).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {Function} updater The function to produce the updated value.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n     * console.log(object.a[0].b.c);\n     * // => 9\n     *\n     * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n     * console.log(object.x[0].y.z);\n     * // => 0\n     */\n    function update(object, path, updater) {\n      return object == null ? object : baseUpdate(object, path, castFunction(updater));\n    }\n\n    /**\n     * This method is like `_.update` except that it accepts `customizer` which is\n     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`\n     * path creation is handled by the method instead. The `customizer` is invoked\n     * with three arguments: (nsValue, key, nsObject).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {Function} updater The function to produce the updated value.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {};\n     *\n     * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n     * // => { '0': { '1': 'a' } }\n     */\n    function updateWith(object, path, updater, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n    }\n\n    /**\n     * Creates an array of the own enumerable string keyed property values of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property values.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.values(new Foo);\n     * // => [1, 2] (iteration order is not guaranteed)\n     *\n     * _.values('hi');\n     * // => ['h', 'i']\n     */\n    function values(object) {\n      return object == null ? [] : baseValues(object, keys(object));\n    }\n\n    /**\n     * Creates an array of the own and inherited enumerable string keyed property\n     * values of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property values.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.valuesIn(new Foo);\n     * // => [1, 2, 3] (iteration order is not guaranteed)\n     */\n    function valuesIn(object) {\n      return object == null ? [] : baseValues(object, keysIn(object));\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Clamps `number` within the inclusive `lower` and `upper` bounds.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Number\n     * @param {number} number The number to clamp.\n     * @param {number} [lower] The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the clamped number.\n     * @example\n     *\n     * _.clamp(-10, -5, 5);\n     * // => -5\n     *\n     * _.clamp(10, -5, 5);\n     * // => 5\n     */\n    function clamp(number, lower, upper) {\n      if (upper === undefined) {\n        upper = lower;\n        lower = undefined;\n      }\n      if (upper !== undefined) {\n        upper = toNumber(upper);\n        upper = upper === upper ? upper : 0;\n      }\n      if (lower !== undefined) {\n        lower = toNumber(lower);\n        lower = lower === lower ? lower : 0;\n      }\n      return baseClamp(toNumber(number), lower, upper);\n    }\n\n    /**\n     * Checks if `n` is between `start` and up to, but not including, `end`. If\n     * `end` is not specified, it's set to `start` with `start` then set to `0`.\n     * If `start` is greater than `end` the params are swapped to support\n     * negative ranges.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.3.0\n     * @category Number\n     * @param {number} number The number to check.\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n     * @see _.range, _.rangeRight\n     * @example\n     *\n     * _.inRange(3, 2, 4);\n     * // => true\n     *\n     * _.inRange(4, 8);\n     * // => true\n     *\n     * _.inRange(4, 2);\n     * // => false\n     *\n     * _.inRange(2, 2);\n     * // => false\n     *\n     * _.inRange(1.2, 2);\n     * // => true\n     *\n     * _.inRange(5.2, 4);\n     * // => false\n     *\n     * _.inRange(-3, -2, -6);\n     * // => true\n     */\n    function inRange(number, start, end) {\n      start = toFinite(start);\n      if (end === undefined) {\n        end = start;\n        start = 0;\n      } else {\n        end = toFinite(end);\n      }\n      number = toNumber(number);\n      return baseInRange(number, start, end);\n    }\n\n    /**\n     * Produces a random number between the inclusive `lower` and `upper` bounds.\n     * If only one argument is provided a number between `0` and the given number\n     * is returned. If `floating` is `true`, or either `lower` or `upper` are\n     * floats, a floating-point number is returned instead of an integer.\n     *\n     * **Note:** JavaScript follows the IEEE-754 standard for resolving\n     * floating-point values which can produce unexpected results.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.7.0\n     * @category Number\n     * @param {number} [lower=0] The lower bound.\n     * @param {number} [upper=1] The upper bound.\n     * @param {boolean} [floating] Specify returning a floating-point number.\n     * @returns {number} Returns the random number.\n     * @example\n     *\n     * _.random(0, 5);\n     * // => an integer between 0 and 5\n     *\n     * _.random(5);\n     * // => also an integer between 0 and 5\n     *\n     * _.random(5, true);\n     * // => a floating-point number between 0 and 5\n     *\n     * _.random(1.2, 5.2);\n     * // => a floating-point number between 1.2 and 5.2\n     */\n    function random(lower, upper, floating) {\n      if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n        upper = floating = undefined;\n      }\n      if (floating === undefined) {\n        if (typeof upper == 'boolean') {\n          floating = upper;\n          upper = undefined;\n        }\n        else if (typeof lower == 'boolean') {\n          floating = lower;\n          lower = undefined;\n        }\n      }\n      if (lower === undefined && upper === undefined) {\n        lower = 0;\n        upper = 1;\n      }\n      else {\n        lower = toFinite(lower);\n        if (upper === undefined) {\n          upper = lower;\n          lower = 0;\n        } else {\n          upper = toFinite(upper);\n        }\n      }\n      if (lower > upper) {\n        var temp = lower;\n        lower = upper;\n        upper = temp;\n      }\n      if (floating || lower % 1 || upper % 1) {\n        var rand = nativeRandom();\n        return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n      }\n      return baseRandom(lower, upper);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the camel cased string.\n     * @example\n     *\n     * _.camelCase('Foo Bar');\n     * // => 'fooBar'\n     *\n     * _.camelCase('--foo-bar--');\n     * // => 'fooBar'\n     *\n     * _.camelCase('__FOO_BAR__');\n     * // => 'fooBar'\n     */\n    var camelCase = createCompounder(function(result, word, index) {\n      word = word.toLowerCase();\n      return result + (index ? capitalize(word) : word);\n    });\n\n    /**\n     * Converts the first character of `string` to upper case and the remaining\n     * to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to capitalize.\n     * @returns {string} Returns the capitalized string.\n     * @example\n     *\n     * _.capitalize('FRED');\n     * // => 'Fred'\n     */\n    function capitalize(string) {\n      return upperFirst(toString(string).toLowerCase());\n    }\n\n    /**\n     * Deburrs `string` by converting\n     * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n     * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n     * letters to basic Latin letters and removing\n     * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to deburr.\n     * @returns {string} Returns the deburred string.\n     * @example\n     *\n     * _.deburr('déjà vu');\n     * // => 'deja vu'\n     */\n    function deburr(string) {\n      string = toString(string);\n      return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n    }\n\n    /**\n     * Checks if `string` ends with the given target string.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {string} [target] The string to search for.\n     * @param {number} [position=string.length] The position to search up to.\n     * @returns {boolean} Returns `true` if `string` ends with `target`,\n     *  else `false`.\n     * @example\n     *\n     * _.endsWith('abc', 'c');\n     * // => true\n     *\n     * _.endsWith('abc', 'b');\n     * // => false\n     *\n     * _.endsWith('abc', 'b', 2);\n     * // => true\n     */\n    function endsWith(string, target, position) {\n      string = toString(string);\n      target = baseToString(target);\n\n      var length = string.length;\n      position = position === undefined\n        ? length\n        : baseClamp(toInteger(position), 0, length);\n\n      var end = position;\n      position -= target.length;\n      return position >= 0 && string.slice(position, end) == target;\n    }\n\n    /**\n     * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n     * corresponding HTML entities.\n     *\n     * **Note:** No other characters are escaped. To escape additional\n     * characters use a third-party library like [_he_](https://mths.be/he).\n     *\n     * Though the \">\" character is escaped for symmetry, characters like\n     * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n     * unless they're part of a tag or unquoted attribute value. See\n     * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n     * (under \"semi-related fun fact\") for more details.\n     *\n     * When working with HTML you should always\n     * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n     * XSS vectors.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The string to escape.\n     * @returns {string} Returns the escaped string.\n     * @example\n     *\n     * _.escape('fred, barney, & pebbles');\n     * // => 'fred, barney, &amp; pebbles'\n     */\n    function escape(string) {\n      string = toString(string);\n      return (string && reHasUnescapedHtml.test(string))\n        ? string.replace(reUnescapedHtml, escapeHtmlChar)\n        : string;\n    }\n\n    /**\n     * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n     * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to escape.\n     * @returns {string} Returns the escaped string.\n     * @example\n     *\n     * _.escapeRegExp('[lodash](https://lodash.com/)');\n     * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n     */\n    function escapeRegExp(string) {\n      string = toString(string);\n      return (string && reHasRegExpChar.test(string))\n        ? string.replace(reRegExpChar, '\\\\$&')\n        : string;\n    }\n\n    /**\n     * Converts `string` to\n     * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the kebab cased string.\n     * @example\n     *\n     * _.kebabCase('Foo Bar');\n     * // => 'foo-bar'\n     *\n     * _.kebabCase('fooBar');\n     * // => 'foo-bar'\n     *\n     * _.kebabCase('__FOO_BAR__');\n     * // => 'foo-bar'\n     */\n    var kebabCase = createCompounder(function(result, word, index) {\n      return result + (index ? '-' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Converts `string`, as space separated words, to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the lower cased string.\n     * @example\n     *\n     * _.lowerCase('--Foo-Bar--');\n     * // => 'foo bar'\n     *\n     * _.lowerCase('fooBar');\n     * // => 'foo bar'\n     *\n     * _.lowerCase('__FOO_BAR__');\n     * // => 'foo bar'\n     */\n    var lowerCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Converts the first character of `string` to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.lowerFirst('Fred');\n     * // => 'fred'\n     *\n     * _.lowerFirst('FRED');\n     * // => 'fRED'\n     */\n    var lowerFirst = createCaseFirst('toLowerCase');\n\n    /**\n     * Pads `string` on the left and right sides if it's shorter than `length`.\n     * Padding characters are truncated if they can't be evenly divided by `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.pad('abc', 8);\n     * // => '  abc   '\n     *\n     * _.pad('abc', 8, '_-');\n     * // => '_-abc_-_'\n     *\n     * _.pad('abc', 3);\n     * // => 'abc'\n     */\n    function pad(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      if (!length || strLength >= length) {\n        return string;\n      }\n      var mid = (length - strLength) / 2;\n      return (\n        createPadding(nativeFloor(mid), chars) +\n        string +\n        createPadding(nativeCeil(mid), chars)\n      );\n    }\n\n    /**\n     * Pads `string` on the right side if it's shorter than `length`. Padding\n     * characters are truncated if they exceed `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.padEnd('abc', 6);\n     * // => 'abc   '\n     *\n     * _.padEnd('abc', 6, '_-');\n     * // => 'abc_-_'\n     *\n     * _.padEnd('abc', 3);\n     * // => 'abc'\n     */\n    function padEnd(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      return (length && strLength < length)\n        ? (string + createPadding(length - strLength, chars))\n        : string;\n    }\n\n    /**\n     * Pads `string` on the left side if it's shorter than `length`. Padding\n     * characters are truncated if they exceed `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.padStart('abc', 6);\n     * // => '   abc'\n     *\n     * _.padStart('abc', 6, '_-');\n     * // => '_-_abc'\n     *\n     * _.padStart('abc', 3);\n     * // => 'abc'\n     */\n    function padStart(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      return (length && strLength < length)\n        ? (createPadding(length - strLength, chars) + string)\n        : string;\n    }\n\n    /**\n     * Converts `string` to an integer of the specified radix. If `radix` is\n     * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n     * hexadecimal, in which case a `radix` of `16` is used.\n     *\n     * **Note:** This method aligns with the\n     * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category String\n     * @param {string} string The string to convert.\n     * @param {number} [radix=10] The radix to interpret `value` by.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.parseInt('08');\n     * // => 8\n     *\n     * _.map(['6', '08', '10'], _.parseInt);\n     * // => [6, 8, 10]\n     */\n    function parseInt(string, radix, guard) {\n      if (guard || radix == null) {\n        radix = 0;\n      } else if (radix) {\n        radix = +radix;\n      }\n      return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n    }\n\n    /**\n     * Repeats the given string `n` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to repeat.\n     * @param {number} [n=1] The number of times to repeat the string.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the repeated string.\n     * @example\n     *\n     * _.repeat('*', 3);\n     * // => '***'\n     *\n     * _.repeat('abc', 2);\n     * // => 'abcabc'\n     *\n     * _.repeat('abc', 0);\n     * // => ''\n     */\n    function repeat(string, n, guard) {\n      if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n        n = 1;\n      } else {\n        n = toInteger(n);\n      }\n      return baseRepeat(toString(string), n);\n    }\n\n    /**\n     * Replaces matches for `pattern` in `string` with `replacement`.\n     *\n     * **Note:** This method is based on\n     * [`String#replace`](https://mdn.io/String/replace).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to modify.\n     * @param {RegExp|string} pattern The pattern to replace.\n     * @param {Function|string} replacement The match replacement.\n     * @returns {string} Returns the modified string.\n     * @example\n     *\n     * _.replace('Hi Fred', 'Fred', 'Barney');\n     * // => 'Hi Barney'\n     */\n    function replace() {\n      var args = arguments,\n          string = toString(args[0]);\n\n      return args.length < 3 ? string : string.replace(args[1], args[2]);\n    }\n\n    /**\n     * Converts `string` to\n     * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the snake cased string.\n     * @example\n     *\n     * _.snakeCase('Foo Bar');\n     * // => 'foo_bar'\n     *\n     * _.snakeCase('fooBar');\n     * // => 'foo_bar'\n     *\n     * _.snakeCase('--FOO-BAR--');\n     * // => 'foo_bar'\n     */\n    var snakeCase = createCompounder(function(result, word, index) {\n      return result + (index ? '_' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Splits `string` by `separator`.\n     *\n     * **Note:** This method is based on\n     * [`String#split`](https://mdn.io/String/split).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to split.\n     * @param {RegExp|string} separator The separator pattern to split by.\n     * @param {number} [limit] The length to truncate results to.\n     * @returns {Array} Returns the string segments.\n     * @example\n     *\n     * _.split('a-b-c', '-', 2);\n     * // => ['a', 'b']\n     */\n    function split(string, separator, limit) {\n      if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n        separator = limit = undefined;\n      }\n      limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n      if (!limit) {\n        return [];\n      }\n      string = toString(string);\n      if (string && (\n            typeof separator == 'string' ||\n            (separator != null && !isRegExp(separator))\n          )) {\n        separator = baseToString(separator);\n        if (!separator && hasUnicode(string)) {\n          return castSlice(stringToArray(string), 0, limit);\n        }\n      }\n      return string.split(separator, limit);\n    }\n\n    /**\n     * Converts `string` to\n     * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.1.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the start cased string.\n     * @example\n     *\n     * _.startCase('--foo-bar--');\n     * // => 'Foo Bar'\n     *\n     * _.startCase('fooBar');\n     * // => 'Foo Bar'\n     *\n     * _.startCase('__FOO_BAR__');\n     * // => 'FOO BAR'\n     */\n    var startCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + upperFirst(word);\n    });\n\n    /**\n     * Checks if `string` starts with the given target string.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {string} [target] The string to search for.\n     * @param {number} [position=0] The position to search from.\n     * @returns {boolean} Returns `true` if `string` starts with `target`,\n     *  else `false`.\n     * @example\n     *\n     * _.startsWith('abc', 'a');\n     * // => true\n     *\n     * _.startsWith('abc', 'b');\n     * // => false\n     *\n     * _.startsWith('abc', 'b', 1);\n     * // => true\n     */\n    function startsWith(string, target, position) {\n      string = toString(string);\n      position = position == null\n        ? 0\n        : baseClamp(toInteger(position), 0, string.length);\n\n      target = baseToString(target);\n      return string.slice(position, position + target.length) == target;\n    }\n\n    /**\n     * Creates a compiled template function that can interpolate data properties\n     * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n     * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n     * properties may be accessed as free variables in the template. If a setting\n     * object is given, it takes precedence over `_.templateSettings` values.\n     *\n     * **Note:** In the development build `_.template` utilizes\n     * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n     * for easier debugging.\n     *\n     * For more information on precompiling templates see\n     * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n     *\n     * For more information on Chrome extension sandboxes see\n     * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The template string.\n     * @param {Object} [options={}] The options object.\n     * @param {RegExp} [options.escape=_.templateSettings.escape]\n     *  The HTML \"escape\" delimiter.\n     * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n     *  The \"evaluate\" delimiter.\n     * @param {Object} [options.imports=_.templateSettings.imports]\n     *  An object to import into the template as free variables.\n     * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n     *  The \"interpolate\" delimiter.\n     * @param {string} [options.sourceURL='lodash.templateSources[n]']\n     *  The sourceURL of the compiled template.\n     * @param {string} [options.variable='obj']\n     *  The data object variable name.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the compiled template function.\n     * @example\n     *\n     * // Use the \"interpolate\" delimiter to create a compiled template.\n     * var compiled = _.template('hello <%= user %>!');\n     * compiled({ 'user': 'fred' });\n     * // => 'hello fred!'\n     *\n     * // Use the HTML \"escape\" delimiter to escape data property values.\n     * var compiled = _.template('<b><%- value %></b>');\n     * compiled({ 'value': '<script>' });\n     * // => '<b>&lt;script&gt;</b>'\n     *\n     * // Use the \"evaluate\" delimiter to execute JavaScript and generate HTML.\n     * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');\n     * compiled({ 'users': ['fred', 'barney'] });\n     * // => '<li>fred</li><li>barney</li>'\n     *\n     * // Use the internal `print` function in \"evaluate\" delimiters.\n     * var compiled = _.template('<% print(\"hello \" + user); %>!');\n     * compiled({ 'user': 'barney' });\n     * // => 'hello barney!'\n     *\n     * // Use the ES template literal delimiter as an \"interpolate\" delimiter.\n     * // Disable support by replacing the \"interpolate\" delimiter.\n     * var compiled = _.template('hello ${ user }!');\n     * compiled({ 'user': 'pebbles' });\n     * // => 'hello pebbles!'\n     *\n     * // Use backslashes to treat delimiters as plain text.\n     * var compiled = _.template('<%= \"\\\\<%- value %\\\\>\" %>');\n     * compiled({ 'value': 'ignored' });\n     * // => '<%- value %>'\n     *\n     * // Use the `imports` option to import `jQuery` as `jq`.\n     * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';\n     * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });\n     * compiled({ 'users': ['fred', 'barney'] });\n     * // => '<li>fred</li><li>barney</li>'\n     *\n     * // Use the `sourceURL` option to specify a custom sourceURL for the template.\n     * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });\n     * compiled(data);\n     * // => Find the source of \"greeting.jst\" under the Sources tab or Resources panel of the web inspector.\n     *\n     * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.\n     * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });\n     * compiled.source;\n     * // => function(data) {\n     * //   var __t, __p = '';\n     * //   __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';\n     * //   return __p;\n     * // }\n     *\n     * // Use custom template delimiters.\n     * _.templateSettings.interpolate = /{{([\\s\\S]+?)}}/g;\n     * var compiled = _.template('hello {{ user }}!');\n     * compiled({ 'user': 'mustache' });\n     * // => 'hello mustache!'\n     *\n     * // Use the `source` property to inline compiled templates for meaningful\n     * // line numbers in error messages and stack traces.\n     * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\\\n     *   var JST = {\\\n     *     \"main\": ' + _.template(mainText).source + '\\\n     *   };\\\n     * ');\n     */\n    function template(string, options, guard) {\n      // Based on John Resig's `tmpl` implementation\n      // (http://ejohn.org/blog/javascript-micro-templating/)\n      // and Laura Doktorova's doT.js (https://github.com/olado/doT).\n      var settings = lodash.templateSettings;\n\n      if (guard && isIterateeCall(string, options, guard)) {\n        options = undefined;\n      }\n      string = toString(string);\n      options = assignInWith({}, options, settings, customDefaultsAssignIn);\n\n      var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),\n          importsKeys = keys(imports),\n          importsValues = baseValues(imports, importsKeys);\n\n      var isEscaping,\n          isEvaluating,\n          index = 0,\n          interpolate = options.interpolate || reNoMatch,\n          source = \"__p += '\";\n\n      // Compile the regexp to match each delimiter.\n      var reDelimiters = RegExp(\n        (options.escape || reNoMatch).source + '|' +\n        interpolate.source + '|' +\n        (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +\n        (options.evaluate || reNoMatch).source + '|$'\n      , 'g');\n\n      // Use a sourceURL for easier debugging.\n      // The sourceURL gets injected into the source that's eval-ed, so be careful\n      // to normalize all kinds of whitespace, so e.g. newlines (and unicode versions of it) can't sneak in\n      // and escape the comment, thus injecting code that gets evaled.\n      var sourceURL = '//# sourceURL=' +\n        (hasOwnProperty.call(options, 'sourceURL')\n          ? (options.sourceURL + '').replace(/\\s/g, ' ')\n          : ('lodash.templateSources[' + (++templateCounter) + ']')\n        ) + '\\n';\n\n      string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {\n        interpolateValue || (interpolateValue = esTemplateValue);\n\n        // Escape characters that can't be included in string literals.\n        source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);\n\n        // Replace delimiters with snippets.\n        if (escapeValue) {\n          isEscaping = true;\n          source += \"' +\\n__e(\" + escapeValue + \") +\\n'\";\n        }\n        if (evaluateValue) {\n          isEvaluating = true;\n          source += \"';\\n\" + evaluateValue + \";\\n__p += '\";\n        }\n        if (interpolateValue) {\n          source += \"' +\\n((__t = (\" + interpolateValue + \")) == null ? '' : __t) +\\n'\";\n        }\n        index = offset + match.length;\n\n        // The JS engine embedded in Adobe products needs `match` returned in\n        // order to produce the correct `offset` value.\n        return match;\n      });\n\n      source += \"';\\n\";\n\n      // If `variable` is not specified wrap a with-statement around the generated\n      // code to add the data object to the top of the scope chain.\n      var variable = hasOwnProperty.call(options, 'variable') && options.variable;\n      if (!variable) {\n        source = 'with (obj) {\\n' + source + '\\n}\\n';\n      }\n      // Throw an error if a forbidden character was found in `variable`, to prevent\n      // potential command injection attacks.\n      else if (reForbiddenIdentifierChars.test(variable)) {\n        throw new Error(INVALID_TEMPL_VAR_ERROR_TEXT);\n      }\n\n      // Cleanup code by stripping empty strings.\n      source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)\n        .replace(reEmptyStringMiddle, '$1')\n        .replace(reEmptyStringTrailing, '$1;');\n\n      // Frame code as the function body.\n      source = 'function(' + (variable || 'obj') + ') {\\n' +\n        (variable\n          ? ''\n          : 'obj || (obj = {});\\n'\n        ) +\n        \"var __t, __p = ''\" +\n        (isEscaping\n           ? ', __e = _.escape'\n           : ''\n        ) +\n        (isEvaluating\n          ? ', __j = Array.prototype.join;\\n' +\n            \"function print() { __p += __j.call(arguments, '') }\\n\"\n          : ';\\n'\n        ) +\n        source +\n        'return __p\\n}';\n\n      var result = attempt(function() {\n        return Function(importsKeys, sourceURL + 'return ' + source)\n          .apply(undefined, importsValues);\n      });\n\n      // Provide the compiled function's source by its `toString` method or\n      // the `source` property as a convenience for inlining compiled templates.\n      result.source = source;\n      if (isError(result)) {\n        throw result;\n      }\n      return result;\n    }\n\n    /**\n     * Converts `string`, as a whole, to lower case just like\n     * [String#toLowerCase](https://mdn.io/toLowerCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the lower cased string.\n     * @example\n     *\n     * _.toLower('--Foo-Bar--');\n     * // => '--foo-bar--'\n     *\n     * _.toLower('fooBar');\n     * // => 'foobar'\n     *\n     * _.toLower('__FOO_BAR__');\n     * // => '__foo_bar__'\n     */\n    function toLower(value) {\n      return toString(value).toLowerCase();\n    }\n\n    /**\n     * Converts `string`, as a whole, to upper case just like\n     * [String#toUpperCase](https://mdn.io/toUpperCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the upper cased string.\n     * @example\n     *\n     * _.toUpper('--foo-bar--');\n     * // => '--FOO-BAR--'\n     *\n     * _.toUpper('fooBar');\n     * // => 'FOOBAR'\n     *\n     * _.toUpper('__foo_bar__');\n     * // => '__FOO_BAR__'\n     */\n    function toUpper(value) {\n      return toString(value).toUpperCase();\n    }\n\n    /**\n     * Removes leading and trailing whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trim('  abc  ');\n     * // => 'abc'\n     *\n     * _.trim('-_-abc-_-', '_-');\n     * // => 'abc'\n     *\n     * _.map(['  foo  ', '  bar  '], _.trim);\n     * // => ['foo', 'bar']\n     */\n    function trim(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return baseTrim(string);\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          chrSymbols = stringToArray(chars),\n          start = charsStartIndex(strSymbols, chrSymbols),\n          end = charsEndIndex(strSymbols, chrSymbols) + 1;\n\n      return castSlice(strSymbols, start, end).join('');\n    }\n\n    /**\n     * Removes trailing whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trimEnd('  abc  ');\n     * // => '  abc'\n     *\n     * _.trimEnd('-_-abc-_-', '_-');\n     * // => '-_-abc'\n     */\n    function trimEnd(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return string.slice(0, trimmedEndIndex(string) + 1);\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;\n\n      return castSlice(strSymbols, 0, end).join('');\n    }\n\n    /**\n     * Removes leading whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trimStart('  abc  ');\n     * // => 'abc  '\n     *\n     * _.trimStart('-_-abc-_-', '_-');\n     * // => 'abc-_-'\n     */\n    function trimStart(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return string.replace(reTrimStart, '');\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          start = charsStartIndex(strSymbols, stringToArray(chars));\n\n      return castSlice(strSymbols, start).join('');\n    }\n\n    /**\n     * Truncates `string` if it's longer than the given maximum string length.\n     * The last characters of the truncated string are replaced with the omission\n     * string which defaults to \"...\".\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to truncate.\n     * @param {Object} [options={}] The options object.\n     * @param {number} [options.length=30] The maximum string length.\n     * @param {string} [options.omission='...'] The string to indicate text is omitted.\n     * @param {RegExp|string} [options.separator] The separator pattern to truncate to.\n     * @returns {string} Returns the truncated string.\n     * @example\n     *\n     * _.truncate('hi-diddly-ho there, neighborino');\n     * // => 'hi-diddly-ho there, neighbo...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'length': 24,\n     *   'separator': ' '\n     * });\n     * // => 'hi-diddly-ho there,...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'length': 24,\n     *   'separator': /,? +/\n     * });\n     * // => 'hi-diddly-ho there...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'omission': ' [...]'\n     * });\n     * // => 'hi-diddly-ho there, neig [...]'\n     */\n    function truncate(string, options) {\n      var length = DEFAULT_TRUNC_LENGTH,\n          omission = DEFAULT_TRUNC_OMISSION;\n\n      if (isObject(options)) {\n        var separator = 'separator' in options ? options.separator : separator;\n        length = 'length' in options ? toInteger(options.length) : length;\n        omission = 'omission' in options ? baseToString(options.omission) : omission;\n      }\n      string = toString(string);\n\n      var strLength = string.length;\n      if (hasUnicode(string)) {\n        var strSymbols = stringToArray(string);\n        strLength = strSymbols.length;\n      }\n      if (length >= strLength) {\n        return string;\n      }\n      var end = length - stringSize(omission);\n      if (end < 1) {\n        return omission;\n      }\n      var result = strSymbols\n        ? castSlice(strSymbols, 0, end).join('')\n        : string.slice(0, end);\n\n      if (separator === undefined) {\n        return result + omission;\n      }\n      if (strSymbols) {\n        end += (result.length - end);\n      }\n      if (isRegExp(separator)) {\n        if (string.slice(end).search(separator)) {\n          var match,\n              substring = result;\n\n          if (!separator.global) {\n            separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');\n          }\n          separator.lastIndex = 0;\n          while ((match = separator.exec(substring))) {\n            var newEnd = match.index;\n          }\n          result = result.slice(0, newEnd === undefined ? end : newEnd);\n        }\n      } else if (string.indexOf(baseToString(separator), end) != end) {\n        var index = result.lastIndexOf(separator);\n        if (index > -1) {\n          result = result.slice(0, index);\n        }\n      }\n      return result + omission;\n    }\n\n    /**\n     * The inverse of `_.escape`; this method converts the HTML entities\n     * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to\n     * their corresponding characters.\n     *\n     * **Note:** No other HTML entities are unescaped. To unescape additional\n     * HTML entities use a third-party library like [_he_](https://mths.be/he).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.6.0\n     * @category String\n     * @param {string} [string=''] The string to unescape.\n     * @returns {string} Returns the unescaped string.\n     * @example\n     *\n     * _.unescape('fred, barney, &amp; pebbles');\n     * // => 'fred, barney, & pebbles'\n     */\n    function unescape(string) {\n      string = toString(string);\n      return (string && reHasEscapedHtml.test(string))\n        ? string.replace(reEscapedHtml, unescapeHtmlChar)\n        : string;\n    }\n\n    /**\n     * Converts `string`, as space separated words, to upper case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the upper cased string.\n     * @example\n     *\n     * _.upperCase('--foo-bar');\n     * // => 'FOO BAR'\n     *\n     * _.upperCase('fooBar');\n     * // => 'FOO BAR'\n     *\n     * _.upperCase('__foo_bar__');\n     * // => 'FOO BAR'\n     */\n    var upperCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + word.toUpperCase();\n    });\n\n    /**\n     * Converts the first character of `string` to upper case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.upperFirst('fred');\n     * // => 'Fred'\n     *\n     * _.upperFirst('FRED');\n     * // => 'FRED'\n     */\n    var upperFirst = createCaseFirst('toUpperCase');\n\n    /**\n     * Splits `string` into an array of its words.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {RegExp|string} [pattern] The pattern to match words.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the words of `string`.\n     * @example\n     *\n     * _.words('fred, barney, & pebbles');\n     * // => ['fred', 'barney', 'pebbles']\n     *\n     * _.words('fred, barney, & pebbles', /[^, ]+/g);\n     * // => ['fred', 'barney', '&', 'pebbles']\n     */\n    function words(string, pattern, guard) {\n      string = toString(string);\n      pattern = guard ? undefined : pattern;\n\n      if (pattern === undefined) {\n        return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n      }\n      return string.match(pattern) || [];\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Attempts to invoke `func`, returning either the result or the caught error\n     * object. Any additional arguments are provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Function} func The function to attempt.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {*} Returns the `func` result or error object.\n     * @example\n     *\n     * // Avoid throwing errors for invalid selectors.\n     * var elements = _.attempt(function(selector) {\n     *   return document.querySelectorAll(selector);\n     * }, '>_>');\n     *\n     * if (_.isError(elements)) {\n     *   elements = [];\n     * }\n     */\n    var attempt = baseRest(function(func, args) {\n      try {\n        return apply(func, undefined, args);\n      } catch (e) {\n        return isError(e) ? e : new Error(e);\n      }\n    });\n\n    /**\n     * Binds methods of an object to the object itself, overwriting the existing\n     * method.\n     *\n     * **Note:** This method doesn't set the \"length\" property of bound functions.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {Object} object The object to bind and assign the bound methods to.\n     * @param {...(string|string[])} methodNames The object method names to bind.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var view = {\n     *   'label': 'docs',\n     *   'click': function() {\n     *     console.log('clicked ' + this.label);\n     *   }\n     * };\n     *\n     * _.bindAll(view, ['click']);\n     * jQuery(element).on('click', view.click);\n     * // => Logs 'clicked docs' when clicked.\n     */\n    var bindAll = flatRest(function(object, methodNames) {\n      arrayEach(methodNames, function(key) {\n        key = toKey(key);\n        baseAssignValue(object, key, bind(object[key], object));\n      });\n      return object;\n    });\n\n    /**\n     * Creates a function that iterates over `pairs` and invokes the corresponding\n     * function of the first predicate to return truthy. The predicate-function\n     * pairs are invoked with the `this` binding and arguments of the created\n     * function.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {Array} pairs The predicate-function pairs.\n     * @returns {Function} Returns the new composite function.\n     * @example\n     *\n     * var func = _.cond([\n     *   [_.matches({ 'a': 1 }),           _.constant('matches A')],\n     *   [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],\n     *   [_.stubTrue,                      _.constant('no match')]\n     * ]);\n     *\n     * func({ 'a': 1, 'b': 2 });\n     * // => 'matches A'\n     *\n     * func({ 'a': 0, 'b': 1 });\n     * // => 'matches B'\n     *\n     * func({ 'a': '1', 'b': '2' });\n     * // => 'no match'\n     */\n    function cond(pairs) {\n      var length = pairs == null ? 0 : pairs.length,\n          toIteratee = getIteratee();\n\n      pairs = !length ? [] : arrayMap(pairs, function(pair) {\n        if (typeof pair[1] != 'function') {\n          throw new TypeError(FUNC_ERROR_TEXT);\n        }\n        return [toIteratee(pair[0]), pair[1]];\n      });\n\n      return baseRest(function(args) {\n        var index = -1;\n        while (++index < length) {\n          var pair = pairs[index];\n          if (apply(pair[0], this, args)) {\n            return apply(pair[1], this, args);\n          }\n        }\n      });\n    }\n\n    /**\n     * Creates a function that invokes the predicate properties of `source` with\n     * the corresponding property values of a given object, returning `true` if\n     * all predicates return truthy, else `false`.\n     *\n     * **Note:** The created function is equivalent to `_.conformsTo` with\n     * `source` partially applied.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 2, 'b': 1 },\n     *   { 'a': 1, 'b': 2 }\n     * ];\n     *\n     * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));\n     * // => [{ 'a': 1, 'b': 2 }]\n     */\n    function conforms(source) {\n      return baseConforms(baseClone(source, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that returns `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Util\n     * @param {*} value The value to return from the new function.\n     * @returns {Function} Returns the new constant function.\n     * @example\n     *\n     * var objects = _.times(2, _.constant({ 'a': 1 }));\n     *\n     * console.log(objects);\n     * // => [{ 'a': 1 }, { 'a': 1 }]\n     *\n     * console.log(objects[0] === objects[1]);\n     * // => true\n     */\n    function constant(value) {\n      return function() {\n        return value;\n      };\n    }\n\n    /**\n     * Checks `value` to determine whether a default value should be returned in\n     * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,\n     * or `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.14.0\n     * @category Util\n     * @param {*} value The value to check.\n     * @param {*} defaultValue The default value.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * _.defaultTo(1, 10);\n     * // => 1\n     *\n     * _.defaultTo(undefined, 10);\n     * // => 10\n     */\n    function defaultTo(value, defaultValue) {\n      return (value == null || value !== value) ? defaultValue : value;\n    }\n\n    /**\n     * Creates a function that returns the result of invoking the given functions\n     * with the `this` binding of the created function, where each successive\n     * invocation is supplied the return value of the previous.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [funcs] The functions to invoke.\n     * @returns {Function} Returns the new composite function.\n     * @see _.flowRight\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var addSquare = _.flow([_.add, square]);\n     * addSquare(1, 2);\n     * // => 9\n     */\n    var flow = createFlow();\n\n    /**\n     * This method is like `_.flow` except that it creates a function that\n     * invokes the given functions from right to left.\n     *\n     * @static\n     * @since 3.0.0\n     * @memberOf _\n     * @category Util\n     * @param {...(Function|Function[])} [funcs] The functions to invoke.\n     * @returns {Function} Returns the new composite function.\n     * @see _.flow\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var addSquare = _.flowRight([square, _.add]);\n     * addSquare(1, 2);\n     * // => 9\n     */\n    var flowRight = createFlow(true);\n\n    /**\n     * This method returns the first argument it receives.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {*} value Any value.\n     * @returns {*} Returns `value`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     *\n     * console.log(_.identity(object) === object);\n     * // => true\n     */\n    function identity(value) {\n      return value;\n    }\n\n    /**\n     * Creates a function that invokes `func` with the arguments of the created\n     * function. If `func` is a property name, the created function returns the\n     * property value for a given element. If `func` is an array or object, the\n     * created function returns `true` for elements that contain the equivalent\n     * source properties, otherwise it returns `false`.\n     *\n     * @static\n     * @since 4.0.0\n     * @memberOf _\n     * @category Util\n     * @param {*} [func=_.identity] The value to convert to a callback.\n     * @returns {Function} Returns the callback.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': true },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));\n     * // => [{ 'user': 'barney', 'age': 36, 'active': true }]\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.filter(users, _.iteratee(['user', 'fred']));\n     * // => [{ 'user': 'fred', 'age': 40 }]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.map(users, _.iteratee('user'));\n     * // => ['barney', 'fred']\n     *\n     * // Create custom iteratee shorthands.\n     * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {\n     *   return !_.isRegExp(func) ? iteratee(func) : function(string) {\n     *     return func.test(string);\n     *   };\n     * });\n     *\n     * _.filter(['abc', 'def'], /ef/);\n     * // => ['def']\n     */\n    function iteratee(func) {\n      return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that performs a partial deep comparison between a given\n     * object and `source`, returning `true` if the given object has equivalent\n     * property values, else `false`.\n     *\n     * **Note:** The created function is equivalent to `_.isMatch` with `source`\n     * partially applied.\n     *\n     * Partial comparisons will match empty array and empty object `source`\n     * values against any array or object value, respectively. See `_.isEqual`\n     * for a list of supported value comparisons.\n     *\n     * **Note:** Multiple values can be checked by combining several matchers\n     * using `_.overSome`\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Object} source The object of property values to match.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 1, 'b': 2, 'c': 3 },\n     *   { 'a': 4, 'b': 5, 'c': 6 }\n     * ];\n     *\n     * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));\n     * // => [{ 'a': 4, 'b': 5, 'c': 6 }]\n     *\n     * // Checking for several possible values\n     * _.filter(objects, _.overSome([_.matches({ 'a': 1 }), _.matches({ 'a': 4 })]));\n     * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]\n     */\n    function matches(source) {\n      return baseMatches(baseClone(source, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that performs a partial deep comparison between the\n     * value at `path` of a given object to `srcValue`, returning `true` if the\n     * object value is equivalent, else `false`.\n     *\n     * **Note:** Partial comparisons will match empty array and empty object\n     * `srcValue` values against any array or object value, respectively. See\n     * `_.isEqual` for a list of supported value comparisons.\n     *\n     * **Note:** Multiple values can be checked by combining several matchers\n     * using `_.overSome`\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Util\n     * @param {Array|string} path The path of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 1, 'b': 2, 'c': 3 },\n     *   { 'a': 4, 'b': 5, 'c': 6 }\n     * ];\n     *\n     * _.find(objects, _.matchesProperty('a', 4));\n     * // => { 'a': 4, 'b': 5, 'c': 6 }\n     *\n     * // Checking for several possible values\n     * _.filter(objects, _.overSome([_.matchesProperty('a', 1), _.matchesProperty('a', 4)]));\n     * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]\n     */\n    function matchesProperty(path, srcValue) {\n      return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that invokes the method at `path` of a given object.\n     * Any additional arguments are provided to the invoked method.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Util\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {Function} Returns the new invoker function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': { 'b': _.constant(2) } },\n     *   { 'a': { 'b': _.constant(1) } }\n     * ];\n     *\n     * _.map(objects, _.method('a.b'));\n     * // => [2, 1]\n     *\n     * _.map(objects, _.method(['a', 'b']));\n     * // => [2, 1]\n     */\n    var method = baseRest(function(path, args) {\n      return function(object) {\n        return baseInvoke(object, path, args);\n      };\n    });\n\n    /**\n     * The opposite of `_.method`; this method creates a function that invokes\n     * the method at a given path of `object`. Any additional arguments are\n     * provided to the invoked method.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Util\n     * @param {Object} object The object to query.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {Function} Returns the new invoker function.\n     * @example\n     *\n     * var array = _.times(3, _.constant),\n     *     object = { 'a': array, 'b': array, 'c': array };\n     *\n     * _.map(['a[2]', 'c[0]'], _.methodOf(object));\n     * // => [2, 0]\n     *\n     * _.map([['a', '2'], ['c', '0']], _.methodOf(object));\n     * // => [2, 0]\n     */\n    var methodOf = baseRest(function(object, args) {\n      return function(path) {\n        return baseInvoke(object, path, args);\n      };\n    });\n\n    /**\n     * Adds all own enumerable string keyed function properties of a source\n     * object to the destination object. If `object` is a function, then methods\n     * are added to its prototype as well.\n     *\n     * **Note:** Use `_.runInContext` to create a pristine `lodash` function to\n     * avoid conflicts caused by modifying the original.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {Function|Object} [object=lodash] The destination object.\n     * @param {Object} source The object of functions to add.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.chain=true] Specify whether mixins are chainable.\n     * @returns {Function|Object} Returns `object`.\n     * @example\n     *\n     * function vowels(string) {\n     *   return _.filter(string, function(v) {\n     *     return /[aeiou]/i.test(v);\n     *   });\n     * }\n     *\n     * _.mixin({ 'vowels': vowels });\n     * _.vowels('fred');\n     * // => ['e']\n     *\n     * _('fred').vowels().value();\n     * // => ['e']\n     *\n     * _.mixin({ 'vowels': vowels }, { 'chain': false });\n     * _('fred').vowels();\n     * // => ['e']\n     */\n    function mixin(object, source, options) {\n      var props = keys(source),\n          methodNames = baseFunctions(source, props);\n\n      if (options == null &&\n          !(isObject(source) && (methodNames.length || !props.length))) {\n        options = source;\n        source = object;\n        object = this;\n        methodNames = baseFunctions(source, keys(source));\n      }\n      var chain = !(isObject(options) && 'chain' in options) || !!options.chain,\n          isFunc = isFunction(object);\n\n      arrayEach(methodNames, function(methodName) {\n        var func = source[methodName];\n        object[methodName] = func;\n        if (isFunc) {\n          object.prototype[methodName] = function() {\n            var chainAll = this.__chain__;\n            if (chain || chainAll) {\n              var result = object(this.__wrapped__),\n                  actions = result.__actions__ = copyArray(this.__actions__);\n\n              actions.push({ 'func': func, 'args': arguments, 'thisArg': object });\n              result.__chain__ = chainAll;\n              return result;\n            }\n            return func.apply(object, arrayPush([this.value()], arguments));\n          };\n        }\n      });\n\n      return object;\n    }\n\n    /**\n     * Reverts the `_` variable to its previous value and returns a reference to\n     * the `lodash` function.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @returns {Function} Returns the `lodash` function.\n     * @example\n     *\n     * var lodash = _.noConflict();\n     */\n    function noConflict() {\n      if (root._ === this) {\n        root._ = oldDash;\n      }\n      return this;\n    }\n\n    /**\n     * This method returns `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.3.0\n     * @category Util\n     * @example\n     *\n     * _.times(2, _.noop);\n     * // => [undefined, undefined]\n     */\n    function noop() {\n      // No operation performed.\n    }\n\n    /**\n     * Creates a function that gets the argument at index `n`. If `n` is negative,\n     * the nth argument from the end is returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {number} [n=0] The index of the argument to return.\n     * @returns {Function} Returns the new pass-thru function.\n     * @example\n     *\n     * var func = _.nthArg(1);\n     * func('a', 'b', 'c', 'd');\n     * // => 'b'\n     *\n     * var func = _.nthArg(-2);\n     * func('a', 'b', 'c', 'd');\n     * // => 'c'\n     */\n    function nthArg(n) {\n      n = toInteger(n);\n      return baseRest(function(args) {\n        return baseNth(args, n);\n      });\n    }\n\n    /**\n     * Creates a function that invokes `iteratees` with the arguments it receives\n     * and returns their results.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [iteratees=[_.identity]]\n     *  The iteratees to invoke.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.over([Math.max, Math.min]);\n     *\n     * func(1, 2, 3, 4);\n     * // => [4, 1]\n     */\n    var over = createOver(arrayMap);\n\n    /**\n     * Creates a function that checks if **all** of the `predicates` return\n     * truthy when invoked with the arguments it receives.\n     *\n     * Following shorthands are possible for providing predicates.\n     * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.\n     * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [predicates=[_.identity]]\n     *  The predicates to check.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.overEvery([Boolean, isFinite]);\n     *\n     * func('1');\n     * // => true\n     *\n     * func(null);\n     * // => false\n     *\n     * func(NaN);\n     * // => false\n     */\n    var overEvery = createOver(arrayEvery);\n\n    /**\n     * Creates a function that checks if **any** of the `predicates` return\n     * truthy when invoked with the arguments it receives.\n     *\n     * Following shorthands are possible for providing predicates.\n     * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.\n     * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [predicates=[_.identity]]\n     *  The predicates to check.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.overSome([Boolean, isFinite]);\n     *\n     * func('1');\n     * // => true\n     *\n     * func(null);\n     * // => true\n     *\n     * func(NaN);\n     * // => false\n     *\n     * var matchesFunc = _.overSome([{ 'a': 1 }, { 'a': 2 }])\n     * var matchesPropertyFunc = _.overSome([['a', 1], ['a', 2]])\n     */\n    var overSome = createOver(arraySome);\n\n    /**\n     * Creates a function that returns the value at `path` of a given object.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Util\n     * @param {Array|string} path The path of the property to get.\n     * @returns {Function} Returns the new accessor function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': { 'b': 2 } },\n     *   { 'a': { 'b': 1 } }\n     * ];\n     *\n     * _.map(objects, _.property('a.b'));\n     * // => [2, 1]\n     *\n     * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n     * // => [1, 2]\n     */\n    function property(path) {\n      return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n    }\n\n    /**\n     * The opposite of `_.property`; this method creates a function that returns\n     * the value at a given path of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Object} object The object to query.\n     * @returns {Function} Returns the new accessor function.\n     * @example\n     *\n     * var array = [0, 1, 2],\n     *     object = { 'a': array, 'b': array, 'c': array };\n     *\n     * _.map(['a[2]', 'c[0]'], _.propertyOf(object));\n     * // => [2, 0]\n     *\n     * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));\n     * // => [2, 0]\n     */\n    function propertyOf(object) {\n      return function(path) {\n        return object == null ? undefined : baseGet(object, path);\n      };\n    }\n\n    /**\n     * Creates an array of numbers (positive and/or negative) progressing from\n     * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n     * `start` is specified without an `end` or `step`. If `end` is not specified,\n     * it's set to `start` with `start` then set to `0`.\n     *\n     * **Note:** JavaScript follows the IEEE-754 standard for resolving\n     * floating-point values which can produce unexpected results.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} [step=1] The value to increment or decrement by.\n     * @returns {Array} Returns the range of numbers.\n     * @see _.inRange, _.rangeRight\n     * @example\n     *\n     * _.range(4);\n     * // => [0, 1, 2, 3]\n     *\n     * _.range(-4);\n     * // => [0, -1, -2, -3]\n     *\n     * _.range(1, 5);\n     * // => [1, 2, 3, 4]\n     *\n     * _.range(0, 20, 5);\n     * // => [0, 5, 10, 15]\n     *\n     * _.range(0, -4, -1);\n     * // => [0, -1, -2, -3]\n     *\n     * _.range(1, 4, 0);\n     * // => [1, 1, 1]\n     *\n     * _.range(0);\n     * // => []\n     */\n    var range = createRange();\n\n    /**\n     * This method is like `_.range` except that it populates values in\n     * descending order.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} [step=1] The value to increment or decrement by.\n     * @returns {Array} Returns the range of numbers.\n     * @see _.inRange, _.range\n     * @example\n     *\n     * _.rangeRight(4);\n     * // => [3, 2, 1, 0]\n     *\n     * _.rangeRight(-4);\n     * // => [-3, -2, -1, 0]\n     *\n     * _.rangeRight(1, 5);\n     * // => [4, 3, 2, 1]\n     *\n     * _.rangeRight(0, 20, 5);\n     * // => [15, 10, 5, 0]\n     *\n     * _.rangeRight(0, -4, -1);\n     * // => [-3, -2, -1, 0]\n     *\n     * _.rangeRight(1, 4, 0);\n     * // => [1, 1, 1]\n     *\n     * _.rangeRight(0);\n     * // => []\n     */\n    var rangeRight = createRange(true);\n\n    /**\n     * This method returns a new empty array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {Array} Returns the new empty array.\n     * @example\n     *\n     * var arrays = _.times(2, _.stubArray);\n     *\n     * console.log(arrays);\n     * // => [[], []]\n     *\n     * console.log(arrays[0] === arrays[1]);\n     * // => false\n     */\n    function stubArray() {\n      return [];\n    }\n\n    /**\n     * This method returns `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {boolean} Returns `false`.\n     * @example\n     *\n     * _.times(2, _.stubFalse);\n     * // => [false, false]\n     */\n    function stubFalse() {\n      return false;\n    }\n\n    /**\n     * This method returns a new empty object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {Object} Returns the new empty object.\n     * @example\n     *\n     * var objects = _.times(2, _.stubObject);\n     *\n     * console.log(objects);\n     * // => [{}, {}]\n     *\n     * console.log(objects[0] === objects[1]);\n     * // => false\n     */\n    function stubObject() {\n      return {};\n    }\n\n    /**\n     * This method returns an empty string.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {string} Returns the empty string.\n     * @example\n     *\n     * _.times(2, _.stubString);\n     * // => ['', '']\n     */\n    function stubString() {\n      return '';\n    }\n\n    /**\n     * This method returns `true`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {boolean} Returns `true`.\n     * @example\n     *\n     * _.times(2, _.stubTrue);\n     * // => [true, true]\n     */\n    function stubTrue() {\n      return true;\n    }\n\n    /**\n     * Invokes the iteratee `n` times, returning an array of the results of\n     * each invocation. The iteratee is invoked with one argument; (index).\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {number} n The number of times to invoke `iteratee`.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the array of results.\n     * @example\n     *\n     * _.times(3, String);\n     * // => ['0', '1', '2']\n     *\n     *  _.times(4, _.constant(0));\n     * // => [0, 0, 0, 0]\n     */\n    function times(n, iteratee) {\n      n = toInteger(n);\n      if (n < 1 || n > MAX_SAFE_INTEGER) {\n        return [];\n      }\n      var index = MAX_ARRAY_LENGTH,\n          length = nativeMin(n, MAX_ARRAY_LENGTH);\n\n      iteratee = getIteratee(iteratee);\n      n -= MAX_ARRAY_LENGTH;\n\n      var result = baseTimes(length, iteratee);\n      while (++index < n) {\n        iteratee(index);\n      }\n      return result;\n    }\n\n    /**\n     * Converts `value` to a property path array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {*} value The value to convert.\n     * @returns {Array} Returns the new property path array.\n     * @example\n     *\n     * _.toPath('a.b.c');\n     * // => ['a', 'b', 'c']\n     *\n     * _.toPath('a[0].b.c');\n     * // => ['a', '0', 'b', 'c']\n     */\n    function toPath(value) {\n      if (isArray(value)) {\n        return arrayMap(value, toKey);\n      }\n      return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));\n    }\n\n    /**\n     * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {string} [prefix=''] The value to prefix the ID with.\n     * @returns {string} Returns the unique ID.\n     * @example\n     *\n     * _.uniqueId('contact_');\n     * // => 'contact_104'\n     *\n     * _.uniqueId();\n     * // => '105'\n     */\n    function uniqueId(prefix) {\n      var id = ++idCounter;\n      return toString(prefix) + id;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Adds two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.4.0\n     * @category Math\n     * @param {number} augend The first number in an addition.\n     * @param {number} addend The second number in an addition.\n     * @returns {number} Returns the total.\n     * @example\n     *\n     * _.add(6, 4);\n     * // => 10\n     */\n    var add = createMathOperation(function(augend, addend) {\n      return augend + addend;\n    }, 0);\n\n    /**\n     * Computes `number` rounded up to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round up.\n     * @param {number} [precision=0] The precision to round up to.\n     * @returns {number} Returns the rounded up number.\n     * @example\n     *\n     * _.ceil(4.006);\n     * // => 5\n     *\n     * _.ceil(6.004, 2);\n     * // => 6.01\n     *\n     * _.ceil(6040, -2);\n     * // => 6100\n     */\n    var ceil = createRound('ceil');\n\n    /**\n     * Divide two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {number} dividend The first number in a division.\n     * @param {number} divisor The second number in a division.\n     * @returns {number} Returns the quotient.\n     * @example\n     *\n     * _.divide(6, 4);\n     * // => 1.5\n     */\n    var divide = createMathOperation(function(dividend, divisor) {\n      return dividend / divisor;\n    }, 1);\n\n    /**\n     * Computes `number` rounded down to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round down.\n     * @param {number} [precision=0] The precision to round down to.\n     * @returns {number} Returns the rounded down number.\n     * @example\n     *\n     * _.floor(4.006);\n     * // => 4\n     *\n     * _.floor(0.046, 2);\n     * // => 0.04\n     *\n     * _.floor(4060, -2);\n     * // => 4000\n     */\n    var floor = createRound('floor');\n\n    /**\n     * Computes the maximum value of `array`. If `array` is empty or falsey,\n     * `undefined` is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {*} Returns the maximum value.\n     * @example\n     *\n     * _.max([4, 2, 8, 6]);\n     * // => 8\n     *\n     * _.max([]);\n     * // => undefined\n     */\n    function max(array) {\n      return (array && array.length)\n        ? baseExtremum(array, identity, baseGt)\n        : undefined;\n    }\n\n    /**\n     * This method is like `_.max` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * the value is ranked. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {*} Returns the maximum value.\n     * @example\n     *\n     * var objects = [{ 'n': 1 }, { 'n': 2 }];\n     *\n     * _.maxBy(objects, function(o) { return o.n; });\n     * // => { 'n': 2 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.maxBy(objects, 'n');\n     * // => { 'n': 2 }\n     */\n    function maxBy(array, iteratee) {\n      return (array && array.length)\n        ? baseExtremum(array, getIteratee(iteratee, 2), baseGt)\n        : undefined;\n    }\n\n    /**\n     * Computes the mean of the values in `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {number} Returns the mean.\n     * @example\n     *\n     * _.mean([4, 2, 8, 6]);\n     * // => 5\n     */\n    function mean(array) {\n      return baseMean(array, identity);\n    }\n\n    /**\n     * This method is like `_.mean` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the value to be averaged.\n     * The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the mean.\n     * @example\n     *\n     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n     *\n     * _.meanBy(objects, function(o) { return o.n; });\n     * // => 5\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.meanBy(objects, 'n');\n     * // => 5\n     */\n    function meanBy(array, iteratee) {\n      return baseMean(array, getIteratee(iteratee, 2));\n    }\n\n    /**\n     * Computes the minimum value of `array`. If `array` is empty or falsey,\n     * `undefined` is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {*} Returns the minimum value.\n     * @example\n     *\n     * _.min([4, 2, 8, 6]);\n     * // => 2\n     *\n     * _.min([]);\n     * // => undefined\n     */\n    function min(array) {\n      return (array && array.length)\n        ? baseExtremum(array, identity, baseLt)\n        : undefined;\n    }\n\n    /**\n     * This method is like `_.min` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * the value is ranked. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {*} Returns the minimum value.\n     * @example\n     *\n     * var objects = [{ 'n': 1 }, { 'n': 2 }];\n     *\n     * _.minBy(objects, function(o) { return o.n; });\n     * // => { 'n': 1 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.minBy(objects, 'n');\n     * // => { 'n': 1 }\n     */\n    function minBy(array, iteratee) {\n      return (array && array.length)\n        ? baseExtremum(array, getIteratee(iteratee, 2), baseLt)\n        : undefined;\n    }\n\n    /**\n     * Multiply two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {number} multiplier The first number in a multiplication.\n     * @param {number} multiplicand The second number in a multiplication.\n     * @returns {number} Returns the product.\n     * @example\n     *\n     * _.multiply(6, 4);\n     * // => 24\n     */\n    var multiply = createMathOperation(function(multiplier, multiplicand) {\n      return multiplier * multiplicand;\n    }, 1);\n\n    /**\n     * Computes `number` rounded to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round.\n     * @param {number} [precision=0] The precision to round to.\n     * @returns {number} Returns the rounded number.\n     * @example\n     *\n     * _.round(4.006);\n     * // => 4\n     *\n     * _.round(4.006, 2);\n     * // => 4.01\n     *\n     * _.round(4060, -2);\n     * // => 4100\n     */\n    var round = createRound('round');\n\n    /**\n     * Subtract two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {number} minuend The first number in a subtraction.\n     * @param {number} subtrahend The second number in a subtraction.\n     * @returns {number} Returns the difference.\n     * @example\n     *\n     * _.subtract(6, 4);\n     * // => 2\n     */\n    var subtract = createMathOperation(function(minuend, subtrahend) {\n      return minuend - subtrahend;\n    }, 0);\n\n    /**\n     * Computes the sum of the values in `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.4.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {number} Returns the sum.\n     * @example\n     *\n     * _.sum([4, 2, 8, 6]);\n     * // => 20\n     */\n    function sum(array) {\n      return (array && array.length)\n        ? baseSum(array, identity)\n        : 0;\n    }\n\n    /**\n     * This method is like `_.sum` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the value to be summed.\n     * The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the sum.\n     * @example\n     *\n     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n     *\n     * _.sumBy(objects, function(o) { return o.n; });\n     * // => 20\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sumBy(objects, 'n');\n     * // => 20\n     */\n    function sumBy(array, iteratee) {\n      return (array && array.length)\n        ? baseSum(array, getIteratee(iteratee, 2))\n        : 0;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    // Add methods that return wrapped values in chain sequences.\n    lodash.after = after;\n    lodash.ary = ary;\n    lodash.assign = assign;\n    lodash.assignIn = assignIn;\n    lodash.assignInWith = assignInWith;\n    lodash.assignWith = assignWith;\n    lodash.at = at;\n    lodash.before = before;\n    lodash.bind = bind;\n    lodash.bindAll = bindAll;\n    lodash.bindKey = bindKey;\n    lodash.castArray = castArray;\n    lodash.chain = chain;\n    lodash.chunk = chunk;\n    lodash.compact = compact;\n    lodash.concat = concat;\n    lodash.cond = cond;\n    lodash.conforms = conforms;\n    lodash.constant = constant;\n    lodash.countBy = countBy;\n    lodash.create = create;\n    lodash.curry = curry;\n    lodash.curryRight = curryRight;\n    lodash.debounce = debounce;\n    lodash.defaults = defaults;\n    lodash.defaultsDeep = defaultsDeep;\n    lodash.defer = defer;\n    lodash.delay = delay;\n    lodash.difference = difference;\n    lodash.differenceBy = differenceBy;\n    lodash.differenceWith = differenceWith;\n    lodash.drop = drop;\n    lodash.dropRight = dropRight;\n    lodash.dropRightWhile = dropRightWhile;\n    lodash.dropWhile = dropWhile;\n    lodash.fill = fill;\n    lodash.filter = filter;\n    lodash.flatMap = flatMap;\n    lodash.flatMapDeep = flatMapDeep;\n    lodash.flatMapDepth = flatMapDepth;\n    lodash.flatten = flatten;\n    lodash.flattenDeep = flattenDeep;\n    lodash.flattenDepth = flattenDepth;\n    lodash.flip = flip;\n    lodash.flow = flow;\n    lodash.flowRight = flowRight;\n    lodash.fromPairs = fromPairs;\n    lodash.functions = functions;\n    lodash.functionsIn = functionsIn;\n    lodash.groupBy = groupBy;\n    lodash.initial = initial;\n    lodash.intersection = intersection;\n    lodash.intersectionBy = intersectionBy;\n    lodash.intersectionWith = intersectionWith;\n    lodash.invert = invert;\n    lodash.invertBy = invertBy;\n    lodash.invokeMap = invokeMap;\n    lodash.iteratee = iteratee;\n    lodash.keyBy = keyBy;\n    lodash.keys = keys;\n    lodash.keysIn = keysIn;\n    lodash.map = map;\n    lodash.mapKeys = mapKeys;\n    lodash.mapValues = mapValues;\n    lodash.matches = matches;\n    lodash.matchesProperty = matchesProperty;\n    lodash.memoize = memoize;\n    lodash.merge = merge;\n    lodash.mergeWith = mergeWith;\n    lodash.method = method;\n    lodash.methodOf = methodOf;\n    lodash.mixin = mixin;\n    lodash.negate = negate;\n    lodash.nthArg = nthArg;\n    lodash.omit = omit;\n    lodash.omitBy = omitBy;\n    lodash.once = once;\n    lodash.orderBy = orderBy;\n    lodash.over = over;\n    lodash.overArgs = overArgs;\n    lodash.overEvery = overEvery;\n    lodash.overSome = overSome;\n    lodash.partial = partial;\n    lodash.partialRight = partialRight;\n    lodash.partition = partition;\n    lodash.pick = pick;\n    lodash.pickBy = pickBy;\n    lodash.property = property;\n    lodash.propertyOf = propertyOf;\n    lodash.pull = pull;\n    lodash.pullAll = pullAll;\n    lodash.pullAllBy = pullAllBy;\n    lodash.pullAllWith = pullAllWith;\n    lodash.pullAt = pullAt;\n    lodash.range = range;\n    lodash.rangeRight = rangeRight;\n    lodash.rearg = rearg;\n    lodash.reject = reject;\n    lodash.remove = remove;\n    lodash.rest = rest;\n    lodash.reverse = reverse;\n    lodash.sampleSize = sampleSize;\n    lodash.set = set;\n    lodash.setWith = setWith;\n    lodash.shuffle = shuffle;\n    lodash.slice = slice;\n    lodash.sortBy = sortBy;\n    lodash.sortedUniq = sortedUniq;\n    lodash.sortedUniqBy = sortedUniqBy;\n    lodash.split = split;\n    lodash.spread = spread;\n    lodash.tail = tail;\n    lodash.take = take;\n    lodash.takeRight = takeRight;\n    lodash.takeRightWhile = takeRightWhile;\n    lodash.takeWhile = takeWhile;\n    lodash.tap = tap;\n    lodash.throttle = throttle;\n    lodash.thru = thru;\n    lodash.toArray = toArray;\n    lodash.toPairs = toPairs;\n    lodash.toPairsIn = toPairsIn;\n    lodash.toPath = toPath;\n    lodash.toPlainObject = toPlainObject;\n    lodash.transform = transform;\n    lodash.unary = unary;\n    lodash.union = union;\n    lodash.unionBy = unionBy;\n    lodash.unionWith = unionWith;\n    lodash.uniq = uniq;\n    lodash.uniqBy = uniqBy;\n    lodash.uniqWith = uniqWith;\n    lodash.unset = unset;\n    lodash.unzip = unzip;\n    lodash.unzipWith = unzipWith;\n    lodash.update = update;\n    lodash.updateWith = updateWith;\n    lodash.values = values;\n    lodash.valuesIn = valuesIn;\n    lodash.without = without;\n    lodash.words = words;\n    lodash.wrap = wrap;\n    lodash.xor = xor;\n    lodash.xorBy = xorBy;\n    lodash.xorWith = xorWith;\n    lodash.zip = zip;\n    lodash.zipObject = zipObject;\n    lodash.zipObjectDeep = zipObjectDeep;\n    lodash.zipWith = zipWith;\n\n    // Add aliases.\n    lodash.entries = toPairs;\n    lodash.entriesIn = toPairsIn;\n    lodash.extend = assignIn;\n    lodash.extendWith = assignInWith;\n\n    // Add methods to `lodash.prototype`.\n    mixin(lodash, lodash);\n\n    /*------------------------------------------------------------------------*/\n\n    // Add methods that return unwrapped values in chain sequences.\n    lodash.add = add;\n    lodash.attempt = attempt;\n    lodash.camelCase = camelCase;\n    lodash.capitalize = capitalize;\n    lodash.ceil = ceil;\n    lodash.clamp = clamp;\n    lodash.clone = clone;\n    lodash.cloneDeep = cloneDeep;\n    lodash.cloneDeepWith = cloneDeepWith;\n    lodash.cloneWith = cloneWith;\n    lodash.conformsTo = conformsTo;\n    lodash.deburr = deburr;\n    lodash.defaultTo = defaultTo;\n    lodash.divide = divide;\n    lodash.endsWith = endsWith;\n    lodash.eq = eq;\n    lodash.escape = escape;\n    lodash.escapeRegExp = escapeRegExp;\n    lodash.every = every;\n    lodash.find = find;\n    lodash.findIndex = findIndex;\n    lodash.findKey = findKey;\n    lodash.findLast = findLast;\n    lodash.findLastIndex = findLastIndex;\n    lodash.findLastKey = findLastKey;\n    lodash.floor = floor;\n    lodash.forEach = forEach;\n    lodash.forEachRight = forEachRight;\n    lodash.forIn = forIn;\n    lodash.forInRight = forInRight;\n    lodash.forOwn = forOwn;\n    lodash.forOwnRight = forOwnRight;\n    lodash.get = get;\n    lodash.gt = gt;\n    lodash.gte = gte;\n    lodash.has = has;\n    lodash.hasIn = hasIn;\n    lodash.head = head;\n    lodash.identity = identity;\n    lodash.includes = includes;\n    lodash.indexOf = indexOf;\n    lodash.inRange = inRange;\n    lodash.invoke = invoke;\n    lodash.isArguments = isArguments;\n    lodash.isArray = isArray;\n    lodash.isArrayBuffer = isArrayBuffer;\n    lodash.isArrayLike = isArrayLike;\n    lodash.isArrayLikeObject = isArrayLikeObject;\n    lodash.isBoolean = isBoolean;\n    lodash.isBuffer = isBuffer;\n    lodash.isDate = isDate;\n    lodash.isElement = isElement;\n    lodash.isEmpty = isEmpty;\n    lodash.isEqual = isEqual;\n    lodash.isEqualWith = isEqualWith;\n    lodash.isError = isError;\n    lodash.isFinite = isFinite;\n    lodash.isFunction = isFunction;\n    lodash.isInteger = isInteger;\n    lodash.isLength = isLength;\n    lodash.isMap = isMap;\n    lodash.isMatch = isMatch;\n    lodash.isMatchWith = isMatchWith;\n    lodash.isNaN = isNaN;\n    lodash.isNative = isNative;\n    lodash.isNil = isNil;\n    lodash.isNull = isNull;\n    lodash.isNumber = isNumber;\n    lodash.isObject = isObject;\n    lodash.isObjectLike = isObjectLike;\n    lodash.isPlainObject = isPlainObject;\n    lodash.isRegExp = isRegExp;\n    lodash.isSafeInteger = isSafeInteger;\n    lodash.isSet = isSet;\n    lodash.isString = isString;\n    lodash.isSymbol = isSymbol;\n    lodash.isTypedArray = isTypedArray;\n    lodash.isUndefined = isUndefined;\n    lodash.isWeakMap = isWeakMap;\n    lodash.isWeakSet = isWeakSet;\n    lodash.join = join;\n    lodash.kebabCase = kebabCase;\n    lodash.last = last;\n    lodash.lastIndexOf = lastIndexOf;\n    lodash.lowerCase = lowerCase;\n    lodash.lowerFirst = lowerFirst;\n    lodash.lt = lt;\n    lodash.lte = lte;\n    lodash.max = max;\n    lodash.maxBy = maxBy;\n    lodash.mean = mean;\n    lodash.meanBy = meanBy;\n    lodash.min = min;\n    lodash.minBy = minBy;\n    lodash.stubArray = stubArray;\n    lodash.stubFalse = stubFalse;\n    lodash.stubObject = stubObject;\n    lodash.stubString = stubString;\n    lodash.stubTrue = stubTrue;\n    lodash.multiply = multiply;\n    lodash.nth = nth;\n    lodash.noConflict = noConflict;\n    lodash.noop = noop;\n    lodash.now = now;\n    lodash.pad = pad;\n    lodash.padEnd = padEnd;\n    lodash.padStart = padStart;\n    lodash.parseInt = parseInt;\n    lodash.random = random;\n    lodash.reduce = reduce;\n    lodash.reduceRight = reduceRight;\n    lodash.repeat = repeat;\n    lodash.replace = replace;\n    lodash.result = result;\n    lodash.round = round;\n    lodash.runInContext = runInContext;\n    lodash.sample = sample;\n    lodash.size = size;\n    lodash.snakeCase = snakeCase;\n    lodash.some = some;\n    lodash.sortedIndex = sortedIndex;\n    lodash.sortedIndexBy = sortedIndexBy;\n    lodash.sortedIndexOf = sortedIndexOf;\n    lodash.sortedLastIndex = sortedLastIndex;\n    lodash.sortedLastIndexBy = sortedLastIndexBy;\n    lodash.sortedLastIndexOf = sortedLastIndexOf;\n    lodash.startCase = startCase;\n    lodash.startsWith = startsWith;\n    lodash.subtract = subtract;\n    lodash.sum = sum;\n    lodash.sumBy = sumBy;\n    lodash.template = template;\n    lodash.times = times;\n    lodash.toFinite = toFinite;\n    lodash.toInteger = toInteger;\n    lodash.toLength = toLength;\n    lodash.toLower = toLower;\n    lodash.toNumber = toNumber;\n    lodash.toSafeInteger = toSafeInteger;\n    lodash.toString = toString;\n    lodash.toUpper = toUpper;\n    lodash.trim = trim;\n    lodash.trimEnd = trimEnd;\n    lodash.trimStart = trimStart;\n    lodash.truncate = truncate;\n    lodash.unescape = unescape;\n    lodash.uniqueId = uniqueId;\n    lodash.upperCase = upperCase;\n    lodash.upperFirst = upperFirst;\n\n    // Add aliases.\n    lodash.each = forEach;\n    lodash.eachRight = forEachRight;\n    lodash.first = head;\n\n    mixin(lodash, (function() {\n      var source = {};\n      baseForOwn(lodash, function(func, methodName) {\n        if (!hasOwnProperty.call(lodash.prototype, methodName)) {\n          source[methodName] = func;\n        }\n      });\n      return source;\n    }()), { 'chain': false });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * The semantic version number.\n     *\n     * @static\n     * @memberOf _\n     * @type {string}\n     */\n    lodash.VERSION = VERSION;\n\n    // Assign default placeholders.\n    arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {\n      lodash[methodName].placeholder = lodash;\n    });\n\n    // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.\n    arrayEach(['drop', 'take'], function(methodName, index) {\n      LazyWrapper.prototype[methodName] = function(n) {\n        n = n === undefined ? 1 : nativeMax(toInteger(n), 0);\n\n        var result = (this.__filtered__ && !index)\n          ? new LazyWrapper(this)\n          : this.clone();\n\n        if (result.__filtered__) {\n          result.__takeCount__ = nativeMin(n, result.__takeCount__);\n        } else {\n          result.__views__.push({\n            'size': nativeMin(n, MAX_ARRAY_LENGTH),\n            'type': methodName + (result.__dir__ < 0 ? 'Right' : '')\n          });\n        }\n        return result;\n      };\n\n      LazyWrapper.prototype[methodName + 'Right'] = function(n) {\n        return this.reverse()[methodName](n).reverse();\n      };\n    });\n\n    // Add `LazyWrapper` methods that accept an `iteratee` value.\n    arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {\n      var type = index + 1,\n          isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;\n\n      LazyWrapper.prototype[methodName] = function(iteratee) {\n        var result = this.clone();\n        result.__iteratees__.push({\n          'iteratee': getIteratee(iteratee, 3),\n          'type': type\n        });\n        result.__filtered__ = result.__filtered__ || isFilter;\n        return result;\n      };\n    });\n\n    // Add `LazyWrapper` methods for `_.head` and `_.last`.\n    arrayEach(['head', 'last'], function(methodName, index) {\n      var takeName = 'take' + (index ? 'Right' : '');\n\n      LazyWrapper.prototype[methodName] = function() {\n        return this[takeName](1).value()[0];\n      };\n    });\n\n    // Add `LazyWrapper` methods for `_.initial` and `_.tail`.\n    arrayEach(['initial', 'tail'], function(methodName, index) {\n      var dropName = 'drop' + (index ? '' : 'Right');\n\n      LazyWrapper.prototype[methodName] = function() {\n        return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);\n      };\n    });\n\n    LazyWrapper.prototype.compact = function() {\n      return this.filter(identity);\n    };\n\n    LazyWrapper.prototype.find = function(predicate) {\n      return this.filter(predicate).head();\n    };\n\n    LazyWrapper.prototype.findLast = function(predicate) {\n      return this.reverse().find(predicate);\n    };\n\n    LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {\n      if (typeof path == 'function') {\n        return new LazyWrapper(this);\n      }\n      return this.map(function(value) {\n        return baseInvoke(value, path, args);\n      });\n    });\n\n    LazyWrapper.prototype.reject = function(predicate) {\n      return this.filter(negate(getIteratee(predicate)));\n    };\n\n    LazyWrapper.prototype.slice = function(start, end) {\n      start = toInteger(start);\n\n      var result = this;\n      if (result.__filtered__ && (start > 0 || end < 0)) {\n        return new LazyWrapper(result);\n      }\n      if (start < 0) {\n        result = result.takeRight(-start);\n      } else if (start) {\n        result = result.drop(start);\n      }\n      if (end !== undefined) {\n        end = toInteger(end);\n        result = end < 0 ? result.dropRight(-end) : result.take(end - start);\n      }\n      return result;\n    };\n\n    LazyWrapper.prototype.takeRightWhile = function(predicate) {\n      return this.reverse().takeWhile(predicate).reverse();\n    };\n\n    LazyWrapper.prototype.toArray = function() {\n      return this.take(MAX_ARRAY_LENGTH);\n    };\n\n    // Add `LazyWrapper` methods to `lodash.prototype`.\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n      var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),\n          isTaker = /^(?:head|last)$/.test(methodName),\n          lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],\n          retUnwrapped = isTaker || /^find/.test(methodName);\n\n      if (!lodashFunc) {\n        return;\n      }\n      lodash.prototype[methodName] = function() {\n        var value = this.__wrapped__,\n            args = isTaker ? [1] : arguments,\n            isLazy = value instanceof LazyWrapper,\n            iteratee = args[0],\n            useLazy = isLazy || isArray(value);\n\n        var interceptor = function(value) {\n          var result = lodashFunc.apply(lodash, arrayPush([value], args));\n          return (isTaker && chainAll) ? result[0] : result;\n        };\n\n        if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {\n          // Avoid lazy use if the iteratee has a \"length\" value other than `1`.\n          isLazy = useLazy = false;\n        }\n        var chainAll = this.__chain__,\n            isHybrid = !!this.__actions__.length,\n            isUnwrapped = retUnwrapped && !chainAll,\n            onlyLazy = isLazy && !isHybrid;\n\n        if (!retUnwrapped && useLazy) {\n          value = onlyLazy ? value : new LazyWrapper(this);\n          var result = func.apply(value, args);\n          result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });\n          return new LodashWrapper(result, chainAll);\n        }\n        if (isUnwrapped && onlyLazy) {\n          return func.apply(this, args);\n        }\n        result = this.thru(interceptor);\n        return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;\n      };\n    });\n\n    // Add `Array` methods to `lodash.prototype`.\n    arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {\n      var func = arrayProto[methodName],\n          chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',\n          retUnwrapped = /^(?:pop|shift)$/.test(methodName);\n\n      lodash.prototype[methodName] = function() {\n        var args = arguments;\n        if (retUnwrapped && !this.__chain__) {\n          var value = this.value();\n          return func.apply(isArray(value) ? value : [], args);\n        }\n        return this[chainName](function(value) {\n          return func.apply(isArray(value) ? value : [], args);\n        });\n      };\n    });\n\n    // Map minified method names to their real names.\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n      var lodashFunc = lodash[methodName];\n      if (lodashFunc) {\n        var key = lodashFunc.name + '';\n        if (!hasOwnProperty.call(realNames, key)) {\n          realNames[key] = [];\n        }\n        realNames[key].push({ 'name': methodName, 'func': lodashFunc });\n      }\n    });\n\n    realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{\n      'name': 'wrapper',\n      'func': undefined\n    }];\n\n    // Add methods to `LazyWrapper`.\n    LazyWrapper.prototype.clone = lazyClone;\n    LazyWrapper.prototype.reverse = lazyReverse;\n    LazyWrapper.prototype.value = lazyValue;\n\n    // Add chain sequence methods to the `lodash` wrapper.\n    lodash.prototype.at = wrapperAt;\n    lodash.prototype.chain = wrapperChain;\n    lodash.prototype.commit = wrapperCommit;\n    lodash.prototype.next = wrapperNext;\n    lodash.prototype.plant = wrapperPlant;\n    lodash.prototype.reverse = wrapperReverse;\n    lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;\n\n    // Add lazy aliases.\n    lodash.prototype.first = lodash.prototype.head;\n\n    if (symIterator) {\n      lodash.prototype[symIterator] = wrapperToIterator;\n    }\n    return lodash;\n  });\n\n  /*--------------------------------------------------------------------------*/\n\n  // Export lodash.\n  var _ = runInContext();\n\n  // Some AMD build optimizers, like r.js, check for condition patterns like:\n  if (true) {\n    // Expose Lodash on the global object to prevent errors when Lodash is\n    // loaded by a script tag in the presence of an AMD loader.\n    // See http://requirejs.org/docs/errors.html#mismatch for more details.\n    // Use `_.noConflict` to remove Lodash from the global object.\n    root._ = _;\n\n    // Define as an anonymous module so, through path mapping, it can be\n    // referenced as the \"underscore\" module.\n    !(__WEBPACK_AMD_DEFINE_RESULT__ = (function() {\n      return _;\n    }).call(exports, __webpack_require__, exports, module),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n  }\n  // Check for `exports` after `define` in case a build optimizer adds it.\n  else {}\n}.call(this));\n\n\n/***/ }),\n\n/***/ \"./resources/sass/app.scss\":\n/*!*********************************!*\\\n  !*** ./resources/sass/app.scss ***!\n  \\*********************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n// extracted by mini-css-extract-plugin\n\n\n/***/ }),\n\n/***/ \"./node_modules/popper.js/dist/esm/popper.js\":\n/*!***************************************************!*\\\n  !*** ./node_modules/popper.js/dist/esm/popper.js ***!\n  \\***************************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/**!\n * @fileOverview Kickass library to create and place poppers near their reference elements.\n * @version 1.16.1\n * @license\n * Copyright (c) 2016 Federico Zivolo and contributors\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 all\n * 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 THE\n * SOFTWARE.\n */\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && typeof navigator !== 'undefined';\n\nvar timeoutDuration = function () {\n  var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\n  for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n    if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n      return 1;\n    }\n  }\n  return 0;\n}();\n\nfunction microtaskDebounce(fn) {\n  var called = false;\n  return function () {\n    if (called) {\n      return;\n    }\n    called = true;\n    window.Promise.resolve().then(function () {\n      called = false;\n      fn();\n    });\n  };\n}\n\nfunction taskDebounce(fn) {\n  var scheduled = false;\n  return function () {\n    if (!scheduled) {\n      scheduled = true;\n      setTimeout(function () {\n        scheduled = false;\n        fn();\n      }, timeoutDuration);\n    }\n  };\n}\n\nvar supportsMicroTasks = isBrowser && window.Promise;\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nvar debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;\n\n/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nfunction isFunction(functionToCheck) {\n  var getType = {};\n  return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n}\n\n/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nfunction getStyleComputedProperty(element, property) {\n  if (element.nodeType !== 1) {\n    return [];\n  }\n  // NOTE: 1 DOM access here\n  var window = element.ownerDocument.defaultView;\n  var css = window.getComputedStyle(element, null);\n  return property ? css[property] : css;\n}\n\n/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nfunction getParentNode(element) {\n  if (element.nodeName === 'HTML') {\n    return element;\n  }\n  return element.parentNode || element.host;\n}\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nfunction getScrollParent(element) {\n  // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n  if (!element) {\n    return document.body;\n  }\n\n  switch (element.nodeName) {\n    case 'HTML':\n    case 'BODY':\n      return element.ownerDocument.body;\n    case '#document':\n      return element.body;\n  }\n\n  // Firefox want us to check `-x` and `-y` variations as well\n\n  var _getStyleComputedProp = getStyleComputedProperty(element),\n      overflow = _getStyleComputedProp.overflow,\n      overflowX = _getStyleComputedProp.overflowX,\n      overflowY = _getStyleComputedProp.overflowY;\n\n  if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n    return element;\n  }\n\n  return getScrollParent(getParentNode(element));\n}\n\n/**\n * Returns the reference node of the reference object, or the reference object itself.\n * @method\n * @memberof Popper.Utils\n * @param {Element|Object} reference - the reference element (the popper will be relative to this)\n * @returns {Element} parent\n */\nfunction getReferenceNode(reference) {\n  return reference && reference.referenceNode ? reference.referenceNode : reference;\n}\n\nvar isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nvar isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\nfunction isIE(version) {\n  if (version === 11) {\n    return isIE11;\n  }\n  if (version === 10) {\n    return isIE10;\n  }\n  return isIE11 || isIE10;\n}\n\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nfunction getOffsetParent(element) {\n  if (!element) {\n    return document.documentElement;\n  }\n\n  var noOffsetParent = isIE(10) ? document.body : null;\n\n  // NOTE: 1 DOM access here\n  var offsetParent = element.offsetParent || null;\n  // Skip hidden elements which don't have an offsetParent\n  while (offsetParent === noOffsetParent && element.nextElementSibling) {\n    offsetParent = (element = element.nextElementSibling).offsetParent;\n  }\n\n  var nodeName = offsetParent && offsetParent.nodeName;\n\n  if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n    return element ? element.ownerDocument.documentElement : document.documentElement;\n  }\n\n  // .offsetParent will return the closest TH, TD or TABLE in case\n  // no offsetParent is present, I hate this job...\n  if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {\n    return getOffsetParent(offsetParent);\n  }\n\n  return offsetParent;\n}\n\nfunction isOffsetContainer(element) {\n  var nodeName = element.nodeName;\n\n  if (nodeName === 'BODY') {\n    return false;\n  }\n  return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;\n}\n\n/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nfunction getRoot(node) {\n  if (node.parentNode !== null) {\n    return getRoot(node.parentNode);\n  }\n\n  return node;\n}\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nfunction findCommonOffsetParent(element1, element2) {\n  // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n  if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n    return document.documentElement;\n  }\n\n  // Here we make sure to give as \"start\" the element that comes first in the DOM\n  var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n  var start = order ? element1 : element2;\n  var end = order ? element2 : element1;\n\n  // Get common ancestor container\n  var range = document.createRange();\n  range.setStart(start, 0);\n  range.setEnd(end, 0);\n  var commonAncestorContainer = range.commonAncestorContainer;\n\n  // Both nodes are inside #document\n\n  if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {\n    if (isOffsetContainer(commonAncestorContainer)) {\n      return commonAncestorContainer;\n    }\n\n    return getOffsetParent(commonAncestorContainer);\n  }\n\n  // one of the nodes is inside shadowDOM, find which one\n  var element1root = getRoot(element1);\n  if (element1root.host) {\n    return findCommonOffsetParent(element1root.host, element2);\n  } else {\n    return findCommonOffsetParent(element1, getRoot(element2).host);\n  }\n}\n\n/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nfunction getScroll(element) {\n  var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\n\n  var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n  var nodeName = element.nodeName;\n\n  if (nodeName === 'BODY' || nodeName === 'HTML') {\n    var html = element.ownerDocument.documentElement;\n    var scrollingElement = element.ownerDocument.scrollingElement || html;\n    return scrollingElement[upperSide];\n  }\n\n  return element[upperSide];\n}\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nfunction includeScroll(rect, element) {\n  var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n  var scrollTop = getScroll(element, 'top');\n  var scrollLeft = getScroll(element, 'left');\n  var modifier = subtract ? -1 : 1;\n  rect.top += scrollTop * modifier;\n  rect.bottom += scrollTop * modifier;\n  rect.left += scrollLeft * modifier;\n  rect.right += scrollLeft * modifier;\n  return rect;\n}\n\n/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nfunction getBordersSize(styles, axis) {\n  var sideA = axis === 'x' ? 'Left' : 'Top';\n  var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n  return parseFloat(styles['border' + sideA + 'Width']) + parseFloat(styles['border' + sideB + 'Width']);\n}\n\nfunction getSize(axis, body, html, computedStyle) {\n  return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0);\n}\n\nfunction getWindowSizes(document) {\n  var body = document.body;\n  var html = document.documentElement;\n  var computedStyle = isIE(10) && getComputedStyle(html);\n\n  return {\n    height: getSize('Height', body, html, computedStyle),\n    width: getSize('Width', body, html, computedStyle)\n  };\n}\n\nvar classCallCheck = function (instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n};\n\nvar createClass = function () {\n  function defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  return function (Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  };\n}();\n\n\n\n\n\nvar defineProperty = function (obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\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\n/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nfunction getClientRect(offsets) {\n  return _extends({}, offsets, {\n    right: offsets.left + offsets.width,\n    bottom: offsets.top + offsets.height\n  });\n}\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nfunction getBoundingClientRect(element) {\n  var rect = {};\n\n  // IE10 10 FIX: Please, don't ask, the element isn't\n  // considered in DOM in some circumstances...\n  // This isn't reproducible in IE10 compatibility mode of IE11\n  try {\n    if (isIE(10)) {\n      rect = element.getBoundingClientRect();\n      var scrollTop = getScroll(element, 'top');\n      var scrollLeft = getScroll(element, 'left');\n      rect.top += scrollTop;\n      rect.left += scrollLeft;\n      rect.bottom += scrollTop;\n      rect.right += scrollLeft;\n    } else {\n      rect = element.getBoundingClientRect();\n    }\n  } catch (e) {}\n\n  var result = {\n    left: rect.left,\n    top: rect.top,\n    width: rect.right - rect.left,\n    height: rect.bottom - rect.top\n  };\n\n  // subtract scrollbar size from sizes\n  var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};\n  var width = sizes.width || element.clientWidth || result.width;\n  var height = sizes.height || element.clientHeight || result.height;\n\n  var horizScrollbar = element.offsetWidth - width;\n  var vertScrollbar = element.offsetHeight - height;\n\n  // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n  // we make this check conditional for performance reasons\n  if (horizScrollbar || vertScrollbar) {\n    var styles = getStyleComputedProperty(element);\n    horizScrollbar -= getBordersSize(styles, 'x');\n    vertScrollbar -= getBordersSize(styles, 'y');\n\n    result.width -= horizScrollbar;\n    result.height -= vertScrollbar;\n  }\n\n  return getClientRect(result);\n}\n\nfunction getOffsetRectRelativeToArbitraryNode(children, parent) {\n  var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n  var isIE10 = isIE(10);\n  var isHTML = parent.nodeName === 'HTML';\n  var childrenRect = getBoundingClientRect(children);\n  var parentRect = getBoundingClientRect(parent);\n  var scrollParent = getScrollParent(children);\n\n  var styles = getStyleComputedProperty(parent);\n  var borderTopWidth = parseFloat(styles.borderTopWidth);\n  var borderLeftWidth = parseFloat(styles.borderLeftWidth);\n\n  // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n  if (fixedPosition && isHTML) {\n    parentRect.top = Math.max(parentRect.top, 0);\n    parentRect.left = Math.max(parentRect.left, 0);\n  }\n  var offsets = getClientRect({\n    top: childrenRect.top - parentRect.top - borderTopWidth,\n    left: childrenRect.left - parentRect.left - borderLeftWidth,\n    width: childrenRect.width,\n    height: childrenRect.height\n  });\n  offsets.marginTop = 0;\n  offsets.marginLeft = 0;\n\n  // Subtract margins of documentElement in case it's being used as parent\n  // we do this only on HTML because it's the only element that behaves\n  // differently when margins are applied to it. The margins are included in\n  // the box of the documentElement, in the other cases not.\n  if (!isIE10 && isHTML) {\n    var marginTop = parseFloat(styles.marginTop);\n    var marginLeft = parseFloat(styles.marginLeft);\n\n    offsets.top -= borderTopWidth - marginTop;\n    offsets.bottom -= borderTopWidth - marginTop;\n    offsets.left -= borderLeftWidth - marginLeft;\n    offsets.right -= borderLeftWidth - marginLeft;\n\n    // Attach marginTop and marginLeft because in some circumstances we may need them\n    offsets.marginTop = marginTop;\n    offsets.marginLeft = marginLeft;\n  }\n\n  if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {\n    offsets = includeScroll(offsets, parent);\n  }\n\n  return offsets;\n}\n\nfunction getViewportOffsetRectRelativeToArtbitraryNode(element) {\n  var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n  var html = element.ownerDocument.documentElement;\n  var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n  var width = Math.max(html.clientWidth, window.innerWidth || 0);\n  var height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n  var scrollTop = !excludeScroll ? getScroll(html) : 0;\n  var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n  var offset = {\n    top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n    left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n    width: width,\n    height: height\n  };\n\n  return getClientRect(offset);\n}\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nfunction isFixed(element) {\n  var nodeName = element.nodeName;\n  if (nodeName === 'BODY' || nodeName === 'HTML') {\n    return false;\n  }\n  if (getStyleComputedProperty(element, 'position') === 'fixed') {\n    return true;\n  }\n  var parentNode = getParentNode(element);\n  if (!parentNode) {\n    return false;\n  }\n  return isFixed(parentNode);\n}\n\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nfunction getFixedPositionOffsetParent(element) {\n  // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n  if (!element || !element.parentElement || isIE()) {\n    return document.documentElement;\n  }\n  var el = element.parentElement;\n  while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n    el = el.parentElement;\n  }\n  return el || document.documentElement;\n}\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nfunction getBoundaries(popper, reference, padding, boundariesElement) {\n  var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n  // NOTE: 1 DOM access here\n\n  var boundaries = { top: 0, left: 0 };\n  var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n\n  // Handle viewport case\n  if (boundariesElement === 'viewport') {\n    boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n  } else {\n    // Handle other cases based on DOM element used as boundaries\n    var boundariesNode = void 0;\n    if (boundariesElement === 'scrollParent') {\n      boundariesNode = getScrollParent(getParentNode(reference));\n      if (boundariesNode.nodeName === 'BODY') {\n        boundariesNode = popper.ownerDocument.documentElement;\n      }\n    } else if (boundariesElement === 'window') {\n      boundariesNode = popper.ownerDocument.documentElement;\n    } else {\n      boundariesNode = boundariesElement;\n    }\n\n    var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);\n\n    // In case of HTML, we need a different computation\n    if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n      var _getWindowSizes = getWindowSizes(popper.ownerDocument),\n          height = _getWindowSizes.height,\n          width = _getWindowSizes.width;\n\n      boundaries.top += offsets.top - offsets.marginTop;\n      boundaries.bottom = height + offsets.top;\n      boundaries.left += offsets.left - offsets.marginLeft;\n      boundaries.right = width + offsets.left;\n    } else {\n      // for all the other DOM elements, this one is good\n      boundaries = offsets;\n    }\n  }\n\n  // Add paddings\n  padding = padding || 0;\n  var isPaddingNumber = typeof padding === 'number';\n  boundaries.left += isPaddingNumber ? padding : padding.left || 0;\n  boundaries.top += isPaddingNumber ? padding : padding.top || 0;\n  boundaries.right -= isPaddingNumber ? padding : padding.right || 0;\n  boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0;\n\n  return boundaries;\n}\n\nfunction getArea(_ref) {\n  var width = _ref.width,\n      height = _ref.height;\n\n  return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {\n  var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n\n  if (placement.indexOf('auto') === -1) {\n    return placement;\n  }\n\n  var boundaries = getBoundaries(popper, reference, padding, boundariesElement);\n\n  var rects = {\n    top: {\n      width: boundaries.width,\n      height: refRect.top - boundaries.top\n    },\n    right: {\n      width: boundaries.right - refRect.right,\n      height: boundaries.height\n    },\n    bottom: {\n      width: boundaries.width,\n      height: boundaries.bottom - refRect.bottom\n    },\n    left: {\n      width: refRect.left - boundaries.left,\n      height: boundaries.height\n    }\n  };\n\n  var sortedAreas = Object.keys(rects).map(function (key) {\n    return _extends({\n      key: key\n    }, rects[key], {\n      area: getArea(rects[key])\n    });\n  }).sort(function (a, b) {\n    return b.area - a.area;\n  });\n\n  var filteredAreas = sortedAreas.filter(function (_ref2) {\n    var width = _ref2.width,\n        height = _ref2.height;\n    return width >= popper.clientWidth && height >= popper.clientHeight;\n  });\n\n  var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;\n\n  var variation = placement.split('-')[1];\n\n  return computedPlacement + (variation ? '-' + variation : '');\n}\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nfunction getReferenceOffsets(state, popper, reference) {\n  var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n  var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n  return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n\n/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nfunction getOuterSizes(element) {\n  var window = element.ownerDocument.defaultView;\n  var styles = window.getComputedStyle(element);\n  var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);\n  var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);\n  var result = {\n    width: element.offsetWidth + y,\n    height: element.offsetHeight + x\n  };\n  return result;\n}\n\n/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nfunction getOppositePlacement(placement) {\n  var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n  return placement.replace(/left|right|bottom|top/g, function (matched) {\n    return hash[matched];\n  });\n}\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nfunction getPopperOffsets(popper, referenceOffsets, placement) {\n  placement = placement.split('-')[0];\n\n  // Get popper node sizes\n  var popperRect = getOuterSizes(popper);\n\n  // Add position, width and height to our offsets object\n  var popperOffsets = {\n    width: popperRect.width,\n    height: popperRect.height\n  };\n\n  // depending by the popper placement we have to compute its offsets slightly differently\n  var isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n  var mainSide = isHoriz ? 'top' : 'left';\n  var secondarySide = isHoriz ? 'left' : 'top';\n  var measurement = isHoriz ? 'height' : 'width';\n  var secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n  popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;\n  if (placement === secondarySide) {\n    popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n  } else {\n    popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];\n  }\n\n  return popperOffsets;\n}\n\n/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction find(arr, check) {\n  // use native find if supported\n  if (Array.prototype.find) {\n    return arr.find(check);\n  }\n\n  // use `filter` to obtain the same behavior of `find`\n  return arr.filter(check)[0];\n}\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction findIndex(arr, prop, value) {\n  // use native findIndex if supported\n  if (Array.prototype.findIndex) {\n    return arr.findIndex(function (cur) {\n      return cur[prop] === value;\n    });\n  }\n\n  // use `find` + `indexOf` if `findIndex` isn't supported\n  var match = find(arr, function (obj) {\n    return obj[prop] === value;\n  });\n  return arr.indexOf(match);\n}\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nfunction runModifiers(modifiers, data, ends) {\n  var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n  modifiersToRun.forEach(function (modifier) {\n    if (modifier['function']) {\n      // eslint-disable-line dot-notation\n      console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n    }\n    var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n    if (modifier.enabled && isFunction(fn)) {\n      // Add properties to offsets to make them a complete clientRect object\n      // we do this before each modifier to make sure the previous one doesn't\n      // mess with these values\n      data.offsets.popper = getClientRect(data.offsets.popper);\n      data.offsets.reference = getClientRect(data.offsets.reference);\n\n      data = fn(data, modifier);\n    }\n  });\n\n  return data;\n}\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.<br />\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nfunction update() {\n  // if popper is destroyed, don't perform any further update\n  if (this.state.isDestroyed) {\n    return;\n  }\n\n  var data = {\n    instance: this,\n    styles: {},\n    arrowStyles: {},\n    attributes: {},\n    flipped: false,\n    offsets: {}\n  };\n\n  // compute reference element offsets\n  data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);\n\n  // compute auto placement, store placement inside the data object,\n  // modifiers will be able to edit `placement` if needed\n  // and refer to originalPlacement to know the original value\n  data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);\n\n  // store the computed placement inside `originalPlacement`\n  data.originalPlacement = data.placement;\n\n  data.positionFixed = this.options.positionFixed;\n\n  // compute the popper offsets\n  data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n\n  data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';\n\n  // run the modifiers\n  data = runModifiers(this.modifiers, data);\n\n  // the first `update` will call `onCreate` callback\n  // the other ones will call `onUpdate` callback\n  if (!this.state.isCreated) {\n    this.state.isCreated = true;\n    this.options.onCreate(data);\n  } else {\n    this.options.onUpdate(data);\n  }\n}\n\n/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nfunction isModifierEnabled(modifiers, modifierName) {\n  return modifiers.some(function (_ref) {\n    var name = _ref.name,\n        enabled = _ref.enabled;\n    return enabled && name === modifierName;\n  });\n}\n\n/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nfunction getSupportedPropertyName(property) {\n  var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n  var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n  for (var i = 0; i < prefixes.length; i++) {\n    var prefix = prefixes[i];\n    var toCheck = prefix ? '' + prefix + upperProp : property;\n    if (typeof document.body.style[toCheck] !== 'undefined') {\n      return toCheck;\n    }\n  }\n  return null;\n}\n\n/**\n * Destroys the popper.\n * @method\n * @memberof Popper\n */\nfunction destroy() {\n  this.state.isDestroyed = true;\n\n  // touch DOM only if `applyStyle` modifier is enabled\n  if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n    this.popper.removeAttribute('x-placement');\n    this.popper.style.position = '';\n    this.popper.style.top = '';\n    this.popper.style.left = '';\n    this.popper.style.right = '';\n    this.popper.style.bottom = '';\n    this.popper.style.willChange = '';\n    this.popper.style[getSupportedPropertyName('transform')] = '';\n  }\n\n  this.disableEventListeners();\n\n  // remove the popper if user explicitly asked for the deletion on destroy\n  // do not use `remove` because IE11 doesn't support it\n  if (this.options.removeOnDestroy) {\n    this.popper.parentNode.removeChild(this.popper);\n  }\n  return this;\n}\n\n/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nfunction getWindow(element) {\n  var ownerDocument = element.ownerDocument;\n  return ownerDocument ? ownerDocument.defaultView : window;\n}\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n  var isBody = scrollParent.nodeName === 'BODY';\n  var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n  target.addEventListener(event, callback, { passive: true });\n\n  if (!isBody) {\n    attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\n  }\n  scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction setupEventListeners(reference, options, state, updateBound) {\n  // Resize event listener on window\n  state.updateBound = updateBound;\n  getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n  // Scroll event listener on scroll parents\n  var scrollElement = getScrollParent(reference);\n  attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n  state.scrollElement = scrollElement;\n  state.eventsEnabled = true;\n\n  return state;\n}\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nfunction enableEventListeners() {\n  if (!this.state.eventsEnabled) {\n    this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n  }\n}\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction removeEventListeners(reference, state) {\n  // Remove resize event listener on window\n  getWindow(reference).removeEventListener('resize', state.updateBound);\n\n  // Remove scroll event listener on scroll parents\n  state.scrollParents.forEach(function (target) {\n    target.removeEventListener('scroll', state.updateBound);\n  });\n\n  // Reset state\n  state.updateBound = null;\n  state.scrollParents = [];\n  state.scrollElement = null;\n  state.eventsEnabled = false;\n  return state;\n}\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger `onUpdate` callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nfunction disableEventListeners() {\n  if (this.state.eventsEnabled) {\n    cancelAnimationFrame(this.scheduleUpdate);\n    this.state = removeEventListeners(this.reference, this.state);\n  }\n}\n\n/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nfunction isNumeric(n) {\n  return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setStyles(element, styles) {\n  Object.keys(styles).forEach(function (prop) {\n    var unit = '';\n    // add unit if the value is numeric and is one of the following\n    if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {\n      unit = 'px';\n    }\n    element.style[prop] = styles[prop] + unit;\n  });\n}\n\n/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setAttributes(element, attributes) {\n  Object.keys(attributes).forEach(function (prop) {\n    var value = attributes[prop];\n    if (value !== false) {\n      element.setAttribute(prop, attributes[prop]);\n    } else {\n      element.removeAttribute(prop);\n    }\n  });\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nfunction applyStyle(data) {\n  // any property present in `data.styles` will be applied to the popper,\n  // in this way we can make the 3rd party modifiers add custom styles to it\n  // Be aware, modifiers could override the properties defined in the previous\n  // lines of this modifier!\n  setStyles(data.instance.popper, data.styles);\n\n  // any property present in `data.attributes` will be applied to the popper,\n  // they will be set as HTML attributes of the element\n  setAttributes(data.instance.popper, data.attributes);\n\n  // if arrowElement is defined and arrowStyles has some properties\n  if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n    setStyles(data.arrowElement, data.arrowStyles);\n  }\n\n  return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nfunction applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n  // compute reference element offsets\n  var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n  // compute auto placement, store placement inside the data object,\n  // modifiers will be able to edit `placement` if needed\n  // and refer to originalPlacement to know the original value\n  var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);\n\n  popper.setAttribute('x-placement', placement);\n\n  // Apply `position` to popper before anything else because\n  // without the position applied we can't guarantee correct computations\n  setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n  return options;\n}\n\n/**\n * @function\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Boolean} shouldRound - If the offsets should be rounded at all\n * @returns {Object} The popper's position offsets rounded\n *\n * The tale of pixel-perfect positioning. It's still not 100% perfect, but as\n * good as it can be within reason.\n * Discussion here: https://github.com/FezVrasta/popper.js/pull/715\n *\n * Low DPI screens cause a popper to be blurry if not using full pixels (Safari\n * as well on High DPI screens).\n *\n * Firefox prefers no rounding for positioning and does not have blurriness on\n * high DPI screens.\n *\n * Only horizontal placement and left/right values need to be considered.\n */\nfunction getRoundedOffsets(data, shouldRound) {\n  var _data$offsets = data.offsets,\n      popper = _data$offsets.popper,\n      reference = _data$offsets.reference;\n  var round = Math.round,\n      floor = Math.floor;\n\n  var noRound = function noRound(v) {\n    return v;\n  };\n\n  var referenceWidth = round(reference.width);\n  var popperWidth = round(popper.width);\n\n  var isVertical = ['left', 'right'].indexOf(data.placement) !== -1;\n  var isVariation = data.placement.indexOf('-') !== -1;\n  var sameWidthParity = referenceWidth % 2 === popperWidth % 2;\n  var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;\n\n  var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor;\n  var verticalToInteger = !shouldRound ? noRound : round;\n\n  return {\n    left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left),\n    top: verticalToInteger(popper.top),\n    bottom: verticalToInteger(popper.bottom),\n    right: horizontalToInteger(popper.right)\n  };\n}\n\nvar isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent);\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeStyle(data, options) {\n  var x = options.x,\n      y = options.y;\n  var popper = data.offsets.popper;\n\n  // Remove this legacy support in Popper.js v2\n\n  var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {\n    return modifier.name === 'applyStyle';\n  }).gpuAcceleration;\n  if (legacyGpuAccelerationOption !== undefined) {\n    console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');\n  }\n  var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;\n\n  var offsetParent = getOffsetParent(data.instance.popper);\n  var offsetParentRect = getBoundingClientRect(offsetParent);\n\n  // Styles\n  var styles = {\n    position: popper.position\n  };\n\n  var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox);\n\n  var sideA = x === 'bottom' ? 'top' : 'bottom';\n  var sideB = y === 'right' ? 'left' : 'right';\n\n  // if gpuAcceleration is set to `true` and transform is supported,\n  //  we use `translate3d` to apply the position to the popper we\n  // automatically use the supported prefixed version if needed\n  var prefixedProperty = getSupportedPropertyName('transform');\n\n  // now, let's make a step back and look at this code closely (wtf?)\n  // If the content of the popper grows once it's been positioned, it\n  // may happen that the popper gets misplaced because of the new content\n  // overflowing its reference element\n  // To avoid this problem, we provide two options (x and y), which allow\n  // the consumer to define the offset origin.\n  // If we position a popper on top of a reference element, we can set\n  // `x` to `top` to make the popper grow towards its top instead of\n  // its bottom.\n  var left = void 0,\n      top = void 0;\n  if (sideA === 'bottom') {\n    // when offsetParent is <html> the positioning is relative to the bottom of the screen (excluding the scrollbar)\n    // and not the bottom of the html element\n    if (offsetParent.nodeName === 'HTML') {\n      top = -offsetParent.clientHeight + offsets.bottom;\n    } else {\n      top = -offsetParentRect.height + offsets.bottom;\n    }\n  } else {\n    top = offsets.top;\n  }\n  if (sideB === 'right') {\n    if (offsetParent.nodeName === 'HTML') {\n      left = -offsetParent.clientWidth + offsets.right;\n    } else {\n      left = -offsetParentRect.width + offsets.right;\n    }\n  } else {\n    left = offsets.left;\n  }\n  if (gpuAcceleration && prefixedProperty) {\n    styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n    styles[sideA] = 0;\n    styles[sideB] = 0;\n    styles.willChange = 'transform';\n  } else {\n    // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n    var invertTop = sideA === 'bottom' ? -1 : 1;\n    var invertLeft = sideB === 'right' ? -1 : 1;\n    styles[sideA] = top * invertTop;\n    styles[sideB] = left * invertLeft;\n    styles.willChange = sideA + ', ' + sideB;\n  }\n\n  // Attributes\n  var attributes = {\n    'x-placement': data.placement\n  };\n\n  // Update `data` attributes, styles and arrowStyles\n  data.attributes = _extends({}, attributes, data.attributes);\n  data.styles = _extends({}, styles, data.styles);\n  data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);\n\n  return data;\n}\n\n/**\n * Helper used to know if the given modifier depends from another one.<br />\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nfunction isModifierRequired(modifiers, requestingName, requestedName) {\n  var requesting = find(modifiers, function (_ref) {\n    var name = _ref.name;\n    return name === requestingName;\n  });\n\n  var isRequired = !!requesting && modifiers.some(function (modifier) {\n    return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n  });\n\n  if (!isRequired) {\n    var _requesting = '`' + requestingName + '`';\n    var requested = '`' + requestedName + '`';\n    console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');\n  }\n  return isRequired;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction arrow(data, options) {\n  var _data$offsets$arrow;\n\n  // arrow depends on keepTogether in order to work\n  if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n    return data;\n  }\n\n  var arrowElement = options.element;\n\n  // if arrowElement is a string, suppose it's a CSS selector\n  if (typeof arrowElement === 'string') {\n    arrowElement = data.instance.popper.querySelector(arrowElement);\n\n    // if arrowElement is not found, don't run the modifier\n    if (!arrowElement) {\n      return data;\n    }\n  } else {\n    // if the arrowElement isn't a query selector we must check that the\n    // provided DOM node is child of its popper node\n    if (!data.instance.popper.contains(arrowElement)) {\n      console.warn('WARNING: `arrow.element` must be child of its popper element!');\n      return data;\n    }\n  }\n\n  var placement = data.placement.split('-')[0];\n  var _data$offsets = data.offsets,\n      popper = _data$offsets.popper,\n      reference = _data$offsets.reference;\n\n  var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n  var len = isVertical ? 'height' : 'width';\n  var sideCapitalized = isVertical ? 'Top' : 'Left';\n  var side = sideCapitalized.toLowerCase();\n  var altSide = isVertical ? 'left' : 'top';\n  var opSide = isVertical ? 'bottom' : 'right';\n  var arrowElementSize = getOuterSizes(arrowElement)[len];\n\n  //\n  // extends keepTogether behavior making sure the popper and its\n  // reference have enough pixels in conjunction\n  //\n\n  // top/left side\n  if (reference[opSide] - arrowElementSize < popper[side]) {\n    data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n  }\n  // bottom/right side\n  if (reference[side] + arrowElementSize > popper[opSide]) {\n    data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n  }\n  data.offsets.popper = getClientRect(data.offsets.popper);\n\n  // compute center of the popper\n  var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n  // Compute the sideValue using the updated popper offsets\n  // take popper margin in account because we don't have this info available\n  var css = getStyleComputedProperty(data.instance.popper);\n  var popperMarginSide = parseFloat(css['margin' + sideCapitalized]);\n  var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width']);\n  var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n  // prevent arrowElement from being placed not contiguously to its popper\n  sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n  data.arrowElement = arrowElement;\n  data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);\n\n  return data;\n}\n\n/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nfunction getOppositeVariation(variation) {\n  if (variation === 'end') {\n    return 'start';\n  } else if (variation === 'start') {\n    return 'end';\n  }\n  return variation;\n}\n\n/**\n * List of accepted placements to use as values of the `placement` option.<br />\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.<br />\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-end` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nvar placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];\n\n// Get rid of `auto` `auto-start` and `auto-end`\nvar validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nfunction clockwise(placement) {\n  var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n  var index = validPlacements.indexOf(placement);\n  var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));\n  return counter ? arr.reverse() : arr;\n}\n\nvar BEHAVIORS = {\n  FLIP: 'flip',\n  CLOCKWISE: 'clockwise',\n  COUNTERCLOCKWISE: 'counterclockwise'\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction flip(data, options) {\n  // if `inner` modifier is enabled, we can't use the `flip` modifier\n  if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n    return data;\n  }\n\n  if (data.flipped && data.placement === data.originalPlacement) {\n    // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n    return data;\n  }\n\n  var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);\n\n  var placement = data.placement.split('-')[0];\n  var placementOpposite = getOppositePlacement(placement);\n  var variation = data.placement.split('-')[1] || '';\n\n  var flipOrder = [];\n\n  switch (options.behavior) {\n    case BEHAVIORS.FLIP:\n      flipOrder = [placement, placementOpposite];\n      break;\n    case BEHAVIORS.CLOCKWISE:\n      flipOrder = clockwise(placement);\n      break;\n    case BEHAVIORS.COUNTERCLOCKWISE:\n      flipOrder = clockwise(placement, true);\n      break;\n    default:\n      flipOrder = options.behavior;\n  }\n\n  flipOrder.forEach(function (step, index) {\n    if (placement !== step || flipOrder.length === index + 1) {\n      return data;\n    }\n\n    placement = data.placement.split('-')[0];\n    placementOpposite = getOppositePlacement(placement);\n\n    var popperOffsets = data.offsets.popper;\n    var refOffsets = data.offsets.reference;\n\n    // using floor because the reference offsets may contain decimals we are not going to consider here\n    var floor = Math.floor;\n    var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);\n\n    var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n    var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n    var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n    var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n    var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;\n\n    // flip the variation if required\n    var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n\n    // flips variation if reference element overflows boundaries\n    var flippedVariationByRef = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);\n\n    // flips variation if popper content overflows boundaries\n    var flippedVariationByContent = !!options.flipVariationsByContent && (isVertical && variation === 'start' && overflowsRight || isVertical && variation === 'end' && overflowsLeft || !isVertical && variation === 'start' && overflowsBottom || !isVertical && variation === 'end' && overflowsTop);\n\n    var flippedVariation = flippedVariationByRef || flippedVariationByContent;\n\n    if (overlapsRef || overflowsBoundaries || flippedVariation) {\n      // this boolean to detect any flip loop\n      data.flipped = true;\n\n      if (overlapsRef || overflowsBoundaries) {\n        placement = flipOrder[index + 1];\n      }\n\n      if (flippedVariation) {\n        variation = getOppositeVariation(variation);\n      }\n\n      data.placement = placement + (variation ? '-' + variation : '');\n\n      // this object contains `position`, we want to preserve it along with\n      // any additional property we may add in the future\n      data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));\n\n      data = runModifiers(data.instance.modifiers, data, 'flip');\n    }\n  });\n  return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction keepTogether(data) {\n  var _data$offsets = data.offsets,\n      popper = _data$offsets.popper,\n      reference = _data$offsets.reference;\n\n  var placement = data.placement.split('-')[0];\n  var floor = Math.floor;\n  var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n  var side = isVertical ? 'right' : 'bottom';\n  var opSide = isVertical ? 'left' : 'top';\n  var measurement = isVertical ? 'width' : 'height';\n\n  if (popper[side] < floor(reference[opSide])) {\n    data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];\n  }\n  if (popper[opSide] > floor(reference[side])) {\n    data.offsets.popper[opSide] = floor(reference[side]);\n  }\n\n  return data;\n}\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nfunction toValue(str, measurement, popperOffsets, referenceOffsets) {\n  // separate value from unit\n  var split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n  var value = +split[1];\n  var unit = split[2];\n\n  // If it's not a number it's an operator, I guess\n  if (!value) {\n    return str;\n  }\n\n  if (unit.indexOf('%') === 0) {\n    var element = void 0;\n    switch (unit) {\n      case '%p':\n        element = popperOffsets;\n        break;\n      case '%':\n      case '%r':\n      default:\n        element = referenceOffsets;\n    }\n\n    var rect = getClientRect(element);\n    return rect[measurement] / 100 * value;\n  } else if (unit === 'vh' || unit === 'vw') {\n    // if is a vh or vw, we calculate the size based on the viewport\n    var size = void 0;\n    if (unit === 'vh') {\n      size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n    } else {\n      size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n    }\n    return size / 100 * value;\n  } else {\n    // if is an explicit pixel unit, we get rid of the unit and keep the value\n    // if is an implicit unit, it's px, and we return just the value\n    return value;\n  }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nfunction parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n  var offsets = [0, 0];\n\n  // Use height if placement is left or right and index is 0 otherwise use width\n  // in this way the first offset will use an axis and the second one\n  // will use the other one\n  var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n  // Split the offset string to obtain a list of values and operands\n  // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n  var fragments = offset.split(/(\\+|\\-)/).map(function (frag) {\n    return frag.trim();\n  });\n\n  // Detect if the offset string contains a pair of values or a single one\n  // they could be separated by comma or space\n  var divider = fragments.indexOf(find(fragments, function (frag) {\n    return frag.search(/,|\\s/) !== -1;\n  }));\n\n  if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n    console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');\n  }\n\n  // If divider is found, we divide the list of values and operands to divide\n  // them by ofset X and Y.\n  var splitRegex = /\\s*,\\s*|\\s+/;\n  var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];\n\n  // Convert the values with units to absolute pixels to allow our computations\n  ops = ops.map(function (op, index) {\n    // Most of the units rely on the orientation of the popper\n    var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';\n    var mergeWithPrevious = false;\n    return op\n    // This aggregates any `+` or `-` sign that aren't considered operators\n    // e.g.: 10 + +5 => [10, +, +5]\n    .reduce(function (a, b) {\n      if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n        a[a.length - 1] = b;\n        mergeWithPrevious = true;\n        return a;\n      } else if (mergeWithPrevious) {\n        a[a.length - 1] += b;\n        mergeWithPrevious = false;\n        return a;\n      } else {\n        return a.concat(b);\n      }\n    }, [])\n    // Here we convert the string values into number values (in px)\n    .map(function (str) {\n      return toValue(str, measurement, popperOffsets, referenceOffsets);\n    });\n  });\n\n  // Loop trough the offsets arrays and execute the operations\n  ops.forEach(function (op, index) {\n    op.forEach(function (frag, index2) {\n      if (isNumeric(frag)) {\n        offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n      }\n    });\n  });\n  return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nfunction offset(data, _ref) {\n  var offset = _ref.offset;\n  var placement = data.placement,\n      _data$offsets = data.offsets,\n      popper = _data$offsets.popper,\n      reference = _data$offsets.reference;\n\n  var basePlacement = placement.split('-')[0];\n\n  var offsets = void 0;\n  if (isNumeric(+offset)) {\n    offsets = [+offset, 0];\n  } else {\n    offsets = parseOffset(offset, popper, reference, basePlacement);\n  }\n\n  if (basePlacement === 'left') {\n    popper.top += offsets[0];\n    popper.left -= offsets[1];\n  } else if (basePlacement === 'right') {\n    popper.top += offsets[0];\n    popper.left += offsets[1];\n  } else if (basePlacement === 'top') {\n    popper.left += offsets[0];\n    popper.top -= offsets[1];\n  } else if (basePlacement === 'bottom') {\n    popper.left += offsets[0];\n    popper.top += offsets[1];\n  }\n\n  data.popper = popper;\n  return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction preventOverflow(data, options) {\n  var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);\n\n  // If offsetParent is the reference element, we really want to\n  // go one step up and use the next offsetParent as reference to\n  // avoid to make this modifier completely useless and look like broken\n  if (data.instance.reference === boundariesElement) {\n    boundariesElement = getOffsetParent(boundariesElement);\n  }\n\n  // NOTE: DOM access here\n  // resets the popper's position so that the document size can be calculated excluding\n  // the size of the popper element itself\n  var transformProp = getSupportedPropertyName('transform');\n  var popperStyles = data.instance.popper.style; // assignment to help minification\n  var top = popperStyles.top,\n      left = popperStyles.left,\n      transform = popperStyles[transformProp];\n\n  popperStyles.top = '';\n  popperStyles.left = '';\n  popperStyles[transformProp] = '';\n\n  var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);\n\n  // NOTE: DOM access here\n  // restores the original style properties after the offsets have been computed\n  popperStyles.top = top;\n  popperStyles.left = left;\n  popperStyles[transformProp] = transform;\n\n  options.boundaries = boundaries;\n\n  var order = options.priority;\n  var popper = data.offsets.popper;\n\n  var check = {\n    primary: function primary(placement) {\n      var value = popper[placement];\n      if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {\n        value = Math.max(popper[placement], boundaries[placement]);\n      }\n      return defineProperty({}, placement, value);\n    },\n    secondary: function secondary(placement) {\n      var mainSide = placement === 'right' ? 'left' : 'top';\n      var value = popper[mainSide];\n      if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {\n        value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n      }\n      return defineProperty({}, mainSide, value);\n    }\n  };\n\n  order.forEach(function (placement) {\n    var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n    popper = _extends({}, popper, check[side](placement));\n  });\n\n  data.offsets.popper = popper;\n\n  return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction shift(data) {\n  var placement = data.placement;\n  var basePlacement = placement.split('-')[0];\n  var shiftvariation = placement.split('-')[1];\n\n  // if shift shiftvariation is specified, run the modifier\n  if (shiftvariation) {\n    var _data$offsets = data.offsets,\n        reference = _data$offsets.reference,\n        popper = _data$offsets.popper;\n\n    var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n    var side = isVertical ? 'left' : 'top';\n    var measurement = isVertical ? 'width' : 'height';\n\n    var shiftOffsets = {\n      start: defineProperty({}, side, reference[side]),\n      end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n    };\n\n    data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\n  }\n\n  return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction hide(data) {\n  if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n    return data;\n  }\n\n  var refRect = data.offsets.reference;\n  var bound = find(data.instance.modifiers, function (modifier) {\n    return modifier.name === 'preventOverflow';\n  }).boundaries;\n\n  if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {\n    // Avoid unnecessary DOM access if visibility hasn't changed\n    if (data.hide === true) {\n      return data;\n    }\n\n    data.hide = true;\n    data.attributes['x-out-of-boundaries'] = '';\n  } else {\n    // Avoid unnecessary DOM access if visibility hasn't changed\n    if (data.hide === false) {\n      return data;\n    }\n\n    data.hide = false;\n    data.attributes['x-out-of-boundaries'] = false;\n  }\n\n  return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction inner(data) {\n  var placement = data.placement;\n  var basePlacement = placement.split('-')[0];\n  var _data$offsets = data.offsets,\n      popper = _data$offsets.popper,\n      reference = _data$offsets.reference;\n\n  var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n  var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n  popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n  data.placement = getOppositePlacement(placement);\n  data.offsets.popper = getClientRect(popper);\n\n  return data;\n}\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.<br />\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.<br />\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nvar modifiers = {\n  /**\n   * Modifier used to shift the popper on the start or end of its reference\n   * element.<br />\n   * It will read the variation of the `placement` property.<br />\n   * It can be one either `-end` or `-start`.\n   * @memberof modifiers\n   * @inner\n   */\n  shift: {\n    /** @prop {number} order=100 - Index used to define the order of execution */\n    order: 100,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: shift\n  },\n\n  /**\n   * The `offset` modifier can shift your popper on both its axis.\n   *\n   * It accepts the following units:\n   * - `px` or unit-less, interpreted as pixels\n   * - `%` or `%r`, percentage relative to the length of the reference element\n   * - `%p`, percentage relative to the length of the popper element\n   * - `vw`, CSS viewport width unit\n   * - `vh`, CSS viewport height unit\n   *\n   * For length is intended the main axis relative to the placement of the popper.<br />\n   * This means that if the placement is `top` or `bottom`, the length will be the\n   * `width`. In case of `left` or `right`, it will be the `height`.\n   *\n   * You can provide a single value (as `Number` or `String`), or a pair of values\n   * as `String` divided by a comma or one (or more) white spaces.<br />\n   * The latter is a deprecated method because it leads to confusion and will be\n   * removed in v2.<br />\n   * Additionally, it accepts additions and subtractions between different units.\n   * Note that multiplications and divisions aren't supported.\n   *\n   * Valid examples are:\n   * ```\n   * 10\n   * '10%'\n   * '10, 10'\n   * '10%, 10'\n   * '10 + 10%'\n   * '10 - 5vh + 3%'\n   * '-10px + 5vh, 5px - 6%'\n   * ```\n   * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n   * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n   * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).\n   *\n   * @memberof modifiers\n   * @inner\n   */\n  offset: {\n    /** @prop {number} order=200 - Index used to define the order of execution */\n    order: 200,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: offset,\n    /** @prop {Number|String} offset=0\n     * The offset value as described in the modifier description\n     */\n    offset: 0\n  },\n\n  /**\n   * Modifier used to prevent the popper from being positioned outside the boundary.\n   *\n   * A scenario exists where the reference itself is not within the boundaries.<br />\n   * We can say it has \"escaped the boundaries\" — or just \"escaped\".<br />\n   * In this case we need to decide whether the popper should either:\n   *\n   * - detach from the reference and remain \"trapped\" in the boundaries, or\n   * - if it should ignore the boundary and \"escape with its reference\"\n   *\n   * When `escapeWithReference` is set to`true` and reference is completely\n   * outside its boundaries, the popper will overflow (or completely leave)\n   * the boundaries in order to remain attached to the edge of the reference.\n   *\n   * @memberof modifiers\n   * @inner\n   */\n  preventOverflow: {\n    /** @prop {number} order=300 - Index used to define the order of execution */\n    order: 300,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: preventOverflow,\n    /**\n     * @prop {Array} [priority=['left','right','top','bottom']]\n     * Popper will try to prevent overflow following these priorities by default,\n     * then, it could overflow on the left and on top of the `boundariesElement`\n     */\n    priority: ['left', 'right', 'top', 'bottom'],\n    /**\n     * @prop {number} padding=5\n     * Amount of pixel used to define a minimum distance between the boundaries\n     * and the popper. This makes sure the popper always has a little padding\n     * between the edges of its container\n     */\n    padding: 5,\n    /**\n     * @prop {String|HTMLElement} boundariesElement='scrollParent'\n     * Boundaries used by the modifier. Can be `scrollParent`, `window`,\n     * `viewport` or any DOM element.\n     */\n    boundariesElement: 'scrollParent'\n  },\n\n  /**\n   * Modifier used to make sure the reference and its popper stay near each other\n   * without leaving any gap between the two. Especially useful when the arrow is\n   * enabled and you want to ensure that it points to its reference element.\n   * It cares only about the first axis. You can still have poppers with margin\n   * between the popper and its reference element.\n   * @memberof modifiers\n   * @inner\n   */\n  keepTogether: {\n    /** @prop {number} order=400 - Index used to define the order of execution */\n    order: 400,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: keepTogether\n  },\n\n  /**\n   * This modifier is used to move the `arrowElement` of the popper to make\n   * sure it is positioned between the reference element and its popper element.\n   * It will read the outer size of the `arrowElement` node to detect how many\n   * pixels of conjunction are needed.\n   *\n   * It has no effect if no `arrowElement` is provided.\n   * @memberof modifiers\n   * @inner\n   */\n  arrow: {\n    /** @prop {number} order=500 - Index used to define the order of execution */\n    order: 500,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: arrow,\n    /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n    element: '[x-arrow]'\n  },\n\n  /**\n   * Modifier used to flip the popper's placement when it starts to overlap its\n   * reference element.\n   *\n   * Requires the `preventOverflow` modifier before it in order to work.\n   *\n   * **NOTE:** this modifier will interrupt the current update cycle and will\n   * restart it if it detects the need to flip the placement.\n   * @memberof modifiers\n   * @inner\n   */\n  flip: {\n    /** @prop {number} order=600 - Index used to define the order of execution */\n    order: 600,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: flip,\n    /**\n     * @prop {String|Array} behavior='flip'\n     * The behavior used to change the popper's placement. It can be one of\n     * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n     * placements (with optional variations)\n     */\n    behavior: 'flip',\n    /**\n     * @prop {number} padding=5\n     * The popper will flip if it hits the edges of the `boundariesElement`\n     */\n    padding: 5,\n    /**\n     * @prop {String|HTMLElement} boundariesElement='viewport'\n     * The element which will define the boundaries of the popper position.\n     * The popper will never be placed outside of the defined boundaries\n     * (except if `keepTogether` is enabled)\n     */\n    boundariesElement: 'viewport',\n    /**\n     * @prop {Boolean} flipVariations=false\n     * The popper will switch placement variation between `-start` and `-end` when\n     * the reference element overlaps its boundaries.\n     *\n     * The original placement should have a set variation.\n     */\n    flipVariations: false,\n    /**\n     * @prop {Boolean} flipVariationsByContent=false\n     * The popper will switch placement variation between `-start` and `-end` when\n     * the popper element overlaps its reference boundaries.\n     *\n     * The original placement should have a set variation.\n     */\n    flipVariationsByContent: false\n  },\n\n  /**\n   * Modifier used to make the popper flow toward the inner of the reference element.\n   * By default, when this modifier is disabled, the popper will be placed outside\n   * the reference element.\n   * @memberof modifiers\n   * @inner\n   */\n  inner: {\n    /** @prop {number} order=700 - Index used to define the order of execution */\n    order: 700,\n    /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n    enabled: false,\n    /** @prop {ModifierFn} */\n    fn: inner\n  },\n\n  /**\n   * Modifier used to hide the popper when its reference element is outside of the\n   * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n   * be used to hide with a CSS selector the popper when its reference is\n   * out of boundaries.\n   *\n   * Requires the `preventOverflow` modifier before it in order to work.\n   * @memberof modifiers\n   * @inner\n   */\n  hide: {\n    /** @prop {number} order=800 - Index used to define the order of execution */\n    order: 800,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: hide\n  },\n\n  /**\n   * Computes the style that will be applied to the popper element to gets\n   * properly positioned.\n   *\n   * Note that this modifier will not touch the DOM, it just prepares the styles\n   * so that `applyStyle` modifier can apply it. This separation is useful\n   * in case you need to replace `applyStyle` with a custom implementation.\n   *\n   * This modifier has `850` as `order` value to maintain backward compatibility\n   * with previous versions of Popper.js. Expect the modifiers ordering method\n   * to change in future major versions of the library.\n   *\n   * @memberof modifiers\n   * @inner\n   */\n  computeStyle: {\n    /** @prop {number} order=850 - Index used to define the order of execution */\n    order: 850,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: computeStyle,\n    /**\n     * @prop {Boolean} gpuAcceleration=true\n     * If true, it uses the CSS 3D transformation to position the popper.\n     * Otherwise, it will use the `top` and `left` properties\n     */\n    gpuAcceleration: true,\n    /**\n     * @prop {string} [x='bottom']\n     * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n     * Change this if your popper should grow in a direction different from `bottom`\n     */\n    x: 'bottom',\n    /**\n     * @prop {string} [x='left']\n     * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n     * Change this if your popper should grow in a direction different from `right`\n     */\n    y: 'right'\n  },\n\n  /**\n   * Applies the computed styles to the popper element.\n   *\n   * All the DOM manipulations are limited to this modifier. This is useful in case\n   * you want to integrate Popper.js inside a framework or view library and you\n   * want to delegate all the DOM manipulations to it.\n   *\n   * Note that if you disable this modifier, you must make sure the popper element\n   * has its position set to `absolute` before Popper.js can do its work!\n   *\n   * Just disable this modifier and define your own to achieve the desired effect.\n   *\n   * @memberof modifiers\n   * @inner\n   */\n  applyStyle: {\n    /** @prop {number} order=900 - Index used to define the order of execution */\n    order: 900,\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n    /** @prop {ModifierFn} */\n    fn: applyStyle,\n    /** @prop {Function} */\n    onLoad: applyStyleOnLoad,\n    /**\n     * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n     * @prop {Boolean} gpuAcceleration=true\n     * If true, it uses the CSS 3D transformation to position the popper.\n     * Otherwise, it will use the `top` and `left` properties\n     */\n    gpuAcceleration: undefined\n  }\n};\n\n/**\n * The `dataObject` is an object containing all the information used by Popper.js.\n * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n\n/**\n * Default options provided to Popper.js constructor.<br />\n * These can be overridden using the `options` argument of Popper.js.<br />\n * To override an option, simply pass an object with the same\n * structure of the `options` object, as the 3rd argument. For example:\n * ```\n * new Popper(ref, pop, {\n *   modifiers: {\n *     preventOverflow: { enabled: false }\n *   }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nvar Defaults = {\n  /**\n   * Popper's placement.\n   * @prop {Popper.placements} placement='bottom'\n   */\n  placement: 'bottom',\n\n  /**\n   * Set this to true if you want popper to position it self in 'fixed' mode\n   * @prop {Boolean} positionFixed=false\n   */\n  positionFixed: false,\n\n  /**\n   * Whether events (resize, scroll) are initially enabled.\n   * @prop {Boolean} eventsEnabled=true\n   */\n  eventsEnabled: true,\n\n  /**\n   * Set to true if you want to automatically remove the popper when\n   * you call the `destroy` method.\n   * @prop {Boolean} removeOnDestroy=false\n   */\n  removeOnDestroy: false,\n\n  /**\n   * Callback called when the popper is created.<br />\n   * By default, it is set to no-op.<br />\n   * Access Popper.js instance with `data.instance`.\n   * @prop {onCreate}\n   */\n  onCreate: function onCreate() {},\n\n  /**\n   * Callback called when the popper is updated. This callback is not called\n   * on the initialization/creation of the popper, but only on subsequent\n   * updates.<br />\n   * By default, it is set to no-op.<br />\n   * Access Popper.js instance with `data.instance`.\n   * @prop {onUpdate}\n   */\n  onUpdate: function onUpdate() {},\n\n  /**\n   * List of modifiers used to modify the offsets before they are applied to the popper.\n   * They provide most of the functionalities of Popper.js.\n   * @prop {modifiers}\n   */\n  modifiers: modifiers\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n\n// Utils\n// Methods\nvar Popper = function () {\n  /**\n   * Creates a new Popper.js instance.\n   * @class Popper\n   * @param {Element|referenceObject} reference - The reference element used to position the popper\n   * @param {Element} popper - The HTML / XML element used as the popper\n   * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n   * @return {Object} instance - The generated Popper.js instance\n   */\n  function Popper(reference, popper) {\n    var _this = this;\n\n    var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    classCallCheck(this, Popper);\n\n    this.scheduleUpdate = function () {\n      return requestAnimationFrame(_this.update);\n    };\n\n    // make update() debounced, so that it only runs at most once-per-tick\n    this.update = debounce(this.update.bind(this));\n\n    // with {} we create a new object with the options inside it\n    this.options = _extends({}, Popper.Defaults, options);\n\n    // init state\n    this.state = {\n      isDestroyed: false,\n      isCreated: false,\n      scrollParents: []\n    };\n\n    // get reference and popper elements (allow jQuery wrappers)\n    this.reference = reference && reference.jquery ? reference[0] : reference;\n    this.popper = popper && popper.jquery ? popper[0] : popper;\n\n    // Deep merge modifiers options\n    this.options.modifiers = {};\n    Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {\n      _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});\n    });\n\n    // Refactoring modifiers' list (Object => Array)\n    this.modifiers = Object.keys(this.options.modifiers).map(function (name) {\n      return _extends({\n        name: name\n      }, _this.options.modifiers[name]);\n    })\n    // sort the modifiers by order\n    .sort(function (a, b) {\n      return a.order - b.order;\n    });\n\n    // modifiers have the ability to execute arbitrary code when Popper.js get inited\n    // such code is executed in the same order of its modifier\n    // they could add new properties to their options configuration\n    // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n    this.modifiers.forEach(function (modifierOptions) {\n      if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n        modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);\n      }\n    });\n\n    // fire the first update to position the popper in the right place\n    this.update();\n\n    var eventsEnabled = this.options.eventsEnabled;\n    if (eventsEnabled) {\n      // setup event listeners, they will take care of update the position in specific situations\n      this.enableEventListeners();\n    }\n\n    this.state.eventsEnabled = eventsEnabled;\n  }\n\n  // We can't use class properties because they don't get listed in the\n  // class prototype and break stuff like Sinon stubs\n\n\n  createClass(Popper, [{\n    key: 'update',\n    value: function update$$1() {\n      return update.call(this);\n    }\n  }, {\n    key: 'destroy',\n    value: function destroy$$1() {\n      return destroy.call(this);\n    }\n  }, {\n    key: 'enableEventListeners',\n    value: function enableEventListeners$$1() {\n      return enableEventListeners.call(this);\n    }\n  }, {\n    key: 'disableEventListeners',\n    value: function disableEventListeners$$1() {\n      return disableEventListeners.call(this);\n    }\n\n    /**\n     * Schedules an update. It will run on the next UI update available.\n     * @method scheduleUpdate\n     * @memberof Popper\n     */\n\n\n    /**\n     * Collection of utilities useful when writing custom modifiers.\n     * Starting from version 1.7, this method is available only if you\n     * include `popper-utils.js` before `popper.js`.\n     *\n     * **DEPRECATION**: This way to access PopperUtils is deprecated\n     * and will be removed in v2! Use the PopperUtils module directly instead.\n     * Due to the high instability of the methods contained in Utils, we can't\n     * guarantee them to follow semver. Use them at your own risk!\n     * @static\n     * @private\n     * @type {Object}\n     * @deprecated since version 1.8\n     * @member Utils\n     * @memberof Popper\n     */\n\n  }]);\n  return Popper;\n}();\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.<br />\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10.\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n\n\nPopper.Utils = (typeof window !== 'undefined' ? window : __webpack_require__.g).PopperUtils;\nPopper.placements = placements;\nPopper.Defaults = Defaults;\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Popper);\n//# sourceMappingURL=popper.js.map\n\n\n/***/ }),\n\n/***/ \"./node_modules/process/browser.js\":\n/*!*****************************************!*\\\n  !*** ./node_modules/process/browser.js ***!\n  \\*****************************************/\n/***/ ((module) => {\n\n// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n/***/ }),\n\n/***/ \"./resources/js/components/Contentone.vue\":\n/*!************************************************!*\\\n  !*** ./resources/js/components/Contentone.vue ***!\n  \\************************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _Contentone_vue_vue_type_template_id_22538d10___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Contentone.vue?vue&type=template&id=22538d10& */ \"./resources/js/components/Contentone.vue?vue&type=template&id=22538d10&\");\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\nvar script = {}\n\n\n/* normalize component */\n;\nvar component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_1__.default)(\n  script,\n  _Contentone_vue_vue_type_template_id_22538d10___WEBPACK_IMPORTED_MODULE_0__.render,\n  _Contentone_vue_vue_type_template_id_22538d10___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"resources/js/components/Contentone.vue\"\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);\n\n/***/ }),\n\n/***/ \"./resources/js/components/Contentwo.vue\":\n/*!***********************************************!*\\\n  !*** ./resources/js/components/Contentwo.vue ***!\n  \\***********************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _Contentwo_vue_vue_type_template_id_5761c2b6___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Contentwo.vue?vue&type=template&id=5761c2b6& */ \"./resources/js/components/Contentwo.vue?vue&type=template&id=5761c2b6&\");\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\nvar script = {}\n\n\n/* normalize component */\n;\nvar component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_1__.default)(\n  script,\n  _Contentwo_vue_vue_type_template_id_5761c2b6___WEBPACK_IMPORTED_MODULE_0__.render,\n  _Contentwo_vue_vue_type_template_id_5761c2b6___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"resources/js/components/Contentwo.vue\"\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);\n\n/***/ }),\n\n/***/ \"./resources/js/components/Contentone.vue?vue&type=template&id=22538d10&\":\n/*!*******************************************************************************!*\\\n  !*** ./resources/js/components/Contentone.vue?vue&type=template&id=22538d10& ***!\n  \\*******************************************************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"render\": () => (/* reexport safe */ _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_Contentone_vue_vue_type_template_id_22538d10___WEBPACK_IMPORTED_MODULE_0__.render),\n/* harmony export */   \"staticRenderFns\": () => (/* reexport safe */ _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_Contentone_vue_vue_type_template_id_22538d10___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)\n/* harmony export */ });\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_Contentone_vue_vue_type_template_id_22538d10___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Contentone.vue?vue&type=template&id=22538d10& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/Contentone.vue?vue&type=template&id=22538d10&\");\n\n\n/***/ }),\n\n/***/ \"./resources/js/components/Contentwo.vue?vue&type=template&id=5761c2b6&\":\n/*!******************************************************************************!*\\\n  !*** ./resources/js/components/Contentwo.vue?vue&type=template&id=5761c2b6& ***!\n  \\******************************************************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"render\": () => (/* reexport safe */ _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_Contentwo_vue_vue_type_template_id_5761c2b6___WEBPACK_IMPORTED_MODULE_0__.render),\n/* harmony export */   \"staticRenderFns\": () => (/* reexport safe */ _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_Contentwo_vue_vue_type_template_id_5761c2b6___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)\n/* harmony export */ });\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_Contentwo_vue_vue_type_template_id_5761c2b6___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Contentwo.vue?vue&type=template&id=5761c2b6& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/Contentwo.vue?vue&type=template&id=5761c2b6&\");\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/Contentone.vue?vue&type=template&id=22538d10&\":\n/*!**********************************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/Contentone.vue?vue&type=template&id=22538d10& ***!\n  \\**********************************************************************************************************************************************************************************************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"render\": () => (/* binding */ render),\n/* harmony export */   \"staticRenderFns\": () => (/* binding */ staticRenderFns)\n/* harmony export */ });\nvar render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\n    \"div\",\n    {\n      staticClass: \"col-12\",\n      staticStyle: { \"margin-bottom\": \"35% !important\" }\n    },\n    [\n      _c(\"div\", { staticClass: \"panel panel-forum\" }, [\n        _c(\"div\", { staticClass: \"justify-content-start\" }, [\n          _c(\"div\", { staticClass: \"col-md-6\" }, [\n            _c(\"img\", {\n              staticStyle: {\n                width: \"100%\",\n                \"max-height\": \"400px\",\n                \"min-height\": \"400px\"\n              },\n              attrs: { src: \"frontend/img/suply.png\", alt: \"\" }\n            })\n          ]),\n          _vm._v(\" \"),\n          _vm._m(0)\n        ])\n      ])\n    ]\n  )\n}\nvar staticRenderFns = [\n  function() {\n    var _vm = this\n    var _h = _vm.$createElement\n    var _c = _vm._self._c || _h\n    return _c(\n      \"div\",\n      {\n        staticClass: \"col-md-6\",\n        staticStyle: { \"max-height\": \"400px\", \"min-height\": \"400px\" }\n      },\n      [\n        _c(\"div\", { staticStyle: { \"margin-top\": \"20%\" } }, [\n          _c(\n            \"h1\",\n            { staticClass: \"text-center\", staticStyle: { color: \"black\" } },\n            [\n              _vm._v(\n                \"\\n            Solusi Pakaian Kotor Ingat kami !\\n          \"\n              )\n            ]\n          ),\n          _vm._v(\" \"),\n          _c(\"h3\", { staticClass: \"text-center\" }, [\n            _vm._v(\n              \"\\n            Tunggu aja dirumah, biar kurir kami yang jemput dan antar pakaian kotor kamu :)\\n          \"\n            )\n          ])\n        ])\n      ]\n    )\n  }\n]\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/Contentwo.vue?vue&type=template&id=5761c2b6&\":\n/*!*********************************************************************************************************************************************************************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/Contentwo.vue?vue&type=template&id=5761c2b6& ***!\n  \\*********************************************************************************************************************************************************************************************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"render\": () => (/* binding */ render),\n/* harmony export */   \"staticRenderFns\": () => (/* binding */ staticRenderFns)\n/* harmony export */ });\nvar render = function() {\n  var _vm = this\n  var _h = _vm.$createElement\n  var _c = _vm._self._c || _h\n  return _c(\"div\", [\n    _c(\"h3\", { staticClass: \"text-center\", staticStyle: { color: \"black\" } }, [\n      _vm._v(\"Mengapa Kami ?\")\n    ]),\n    _vm._v(\" \"),\n    _c(\"hr\"),\n    _vm._v(\" \"),\n    _c(\"div\", { staticClass: \"row\" }, [\n      _c(\"div\", { staticClass: \"col-md-3 promo\" }, [\n        _c(\"div\", { staticClass: \"panel panel-forum\" }, [\n          _vm._m(0),\n          _vm._v(\" \"),\n          _c(\"img\", {\n            staticStyle: {\n              width: \"100%\",\n              \"max-height\": \"230px\",\n              \"min-height\": \"230px\"\n            },\n            attrs: { src: \"frontend/img/order.png\", alt: \"\" }\n          })\n        ])\n      ]),\n      _vm._v(\" \"),\n      _c(\"div\", { staticClass: \"col-md-3 shadow-lg\" }, [\n        _c(\"div\", { staticClass: \"panel panel-forum tips\" }, [\n          _vm._m(1),\n          _vm._v(\" \"),\n          _c(\"img\", {\n            staticStyle: {\n              width: \"100%\",\n              \"max-height\": \"230px\",\n              \"min-height\": \"230px\"\n            },\n            attrs: { src: \"frontend/img/profesional.png\", alt: \"\" }\n          })\n        ])\n      ]),\n      _vm._v(\" \"),\n      _c(\"div\", { staticClass: \"col-md-3 shadow-lg\" }, [\n        _c(\"div\", { staticClass: \"panel panel-forum tips\" }, [\n          _vm._m(2),\n          _vm._v(\" \"),\n          _c(\"img\", {\n            staticStyle: {\n              width: \"100%\",\n              \"max-height\": \"230px\",\n              \"min-height\": \"230px\"\n            },\n            attrs: { src: \"frontend/img/terpercaya.png\", alt: \"\" }\n          })\n        ])\n      ]),\n      _vm._v(\" \"),\n      _c(\"div\", { staticClass: \"col-md-3 shadow-lg\" }, [\n        _c(\"div\", { staticClass: \"panel panel-forum tips\" }, [\n          _vm._m(3),\n          _vm._v(\" \"),\n          _c(\"img\", {\n            staticStyle: {\n              width: \"100%\",\n              \"max-height\": \"230px\",\n              \"min-height\": \"230px\"\n            },\n            attrs: { src: \"frontend/img/garansi.png\", alt: \"\" }\n          })\n        ])\n      ])\n    ])\n  ])\n}\nvar staticRenderFns = [\n  function() {\n    var _vm = this\n    var _h = _vm.$createElement\n    var _c = _vm._self._c || _h\n    return _c(\"div\", { staticClass: \"panel-heading\" }, [\n      _c(\n        \"h4\",\n        {\n          staticClass: \"panel-title\",\n          staticStyle: {\n            \"font-weight\": \"bold\",\n            color: \"black\",\n            \"font-size\": \"15px\"\n          }\n        },\n        [_vm._v(\"\\n                Order Online\\n            \")]\n      )\n    ])\n  },\n  function() {\n    var _vm = this\n    var _h = _vm.$createElement\n    var _c = _vm._self._c || _h\n    return _c(\"div\", { staticClass: \"panel-heading\" }, [\n      _c(\n        \"h4\",\n        {\n          staticClass: \"panel-title\",\n          staticStyle: {\n            \"font-weight\": \"bold\",\n            color: \"black\",\n            \"font-size\": \"15px\"\n          }\n        },\n        [_vm._v(\"\\n                Profesional\\n            \")]\n      )\n    ])\n  },\n  function() {\n    var _vm = this\n    var _h = _vm.$createElement\n    var _c = _vm._self._c || _h\n    return _c(\"div\", { staticClass: \"panel-heading\" }, [\n      _c(\n        \"h4\",\n        {\n          staticClass: \"panel-title\",\n          staticStyle: {\n            \"font-weight\": \"bold\",\n            color: \"black\",\n            \"font-size\": \"15px\"\n          }\n        },\n        [_vm._v(\"\\n                Terpercaya\\n            \")]\n      )\n    ])\n  },\n  function() {\n    var _vm = this\n    var _h = _vm.$createElement\n    var _c = _vm._self._c || _h\n    return _c(\"div\", { staticClass: \"panel-heading\" }, [\n      _c(\n        \"h4\",\n        {\n          staticClass: \"panel-title\",\n          staticStyle: {\n            \"font-weight\": \"bold\",\n            color: \"black\",\n            \"font-size\": \"15px\"\n          }\n        },\n        [_vm._v(\"\\n                Bergaransi\\n            \")]\n      )\n    ])\n  }\n]\nrender._withStripped = true\n\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\":\n/*!********************************************************************!*\\\n  !*** ./node_modules/vue-loader/lib/runtime/componentNormalizer.js ***!\n  \\********************************************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (/* binding */ normalizeComponent)\n/* harmony export */ });\n/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nfunction normalizeComponent (\n  scriptExports,\n  render,\n  staticRenderFns,\n  functionalTemplate,\n  injectStyles,\n  scopeId,\n  moduleIdentifier, /* server only */\n  shadowMode /* vue-cli only */\n) {\n  // Vue.extend constructor export interop\n  var options = typeof scriptExports === 'function'\n    ? scriptExports.options\n    : scriptExports\n\n  // render functions\n  if (render) {\n    options.render = render\n    options.staticRenderFns = staticRenderFns\n    options._compiled = true\n  }\n\n  // functional template\n  if (functionalTemplate) {\n    options.functional = true\n  }\n\n  // scopedId\n  if (scopeId) {\n    options._scopeId = 'data-v-' + scopeId\n  }\n\n  var hook\n  if (moduleIdentifier) { // server build\n    hook = function (context) {\n      // 2.3 injection\n      context =\n        context || // cached call\n        (this.$vnode && this.$vnode.ssrContext) || // stateful\n        (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n      // 2.2 with runInNewContext: true\n      if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n        context = __VUE_SSR_CONTEXT__\n      }\n      // inject component styles\n      if (injectStyles) {\n        injectStyles.call(this, context)\n      }\n      // register component module identifier for async chunk inferrence\n      if (context && context._registeredComponents) {\n        context._registeredComponents.add(moduleIdentifier)\n      }\n    }\n    // used by ssr in case component is cached and beforeCreate\n    // never gets called\n    options._ssrRegister = hook\n  } else if (injectStyles) {\n    hook = shadowMode\n      ? function () {\n        injectStyles.call(\n          this,\n          (options.functional ? this.parent : this).$root.$options.shadowRoot\n        )\n      }\n      : injectStyles\n  }\n\n  if (hook) {\n    if (options.functional) {\n      // for template-only hot-reload because in that case the render fn doesn't\n      // go through the normalizer\n      options._injectStyles = hook\n      // register for functional component in vue file\n      var originalRender = options.render\n      options.render = function renderWithStyleInjection (h, context) {\n        hook.call(context)\n        return originalRender(h, context)\n      }\n    } else {\n      // inject component registration as beforeCreate hook\n      var existing = options.beforeCreate\n      options.beforeCreate = existing\n        ? [].concat(existing, hook)\n        : [hook]\n    }\n  }\n\n  return {\n    exports: scriptExports,\n    options: options\n  }\n}\n\n\n/***/ }),\n\n/***/ \"./node_modules/vue/dist/vue.esm.js\":\n/*!******************************************!*\\\n  !*** ./node_modules/vue/dist/vue.esm.js ***!\n  \\******************************************/\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/*!\n * Vue.js v2.6.12\n * (c) 2014-2020 Evan You\n * Released under the MIT License.\n */\n/*  */\n\nvar emptyObject = Object.freeze({});\n\n// These helpers produce better VM code in JS engines due to their\n// explicitness and function inlining.\nfunction isUndef (v) {\n  return v === undefined || v === null\n}\n\nfunction isDef (v) {\n  return v !== undefined && v !== null\n}\n\nfunction isTrue (v) {\n  return v === true\n}\n\nfunction isFalse (v) {\n  return v === false\n}\n\n/**\n * Check if value is primitive.\n */\nfunction isPrimitive (value) {\n  return (\n    typeof value === 'string' ||\n    typeof value === 'number' ||\n    // $flow-disable-line\n    typeof value === 'symbol' ||\n    typeof value === 'boolean'\n  )\n}\n\n/**\n * Quick object check - this is primarily used to tell\n * Objects from primitive values when we know the value\n * is a JSON-compliant type.\n */\nfunction isObject (obj) {\n  return obj !== null && typeof obj === 'object'\n}\n\n/**\n * Get the raw type string of a value, e.g., [object Object].\n */\nvar _toString = Object.prototype.toString;\n\nfunction toRawType (value) {\n  return _toString.call(value).slice(8, -1)\n}\n\n/**\n * Strict object type check. Only returns true\n * for plain JavaScript objects.\n */\nfunction isPlainObject (obj) {\n  return _toString.call(obj) === '[object Object]'\n}\n\nfunction isRegExp (v) {\n  return _toString.call(v) === '[object RegExp]'\n}\n\n/**\n * Check if val is a valid array index.\n */\nfunction isValidArrayIndex (val) {\n  var n = parseFloat(String(val));\n  return n >= 0 && Math.floor(n) === n && isFinite(val)\n}\n\nfunction isPromise (val) {\n  return (\n    isDef(val) &&\n    typeof val.then === 'function' &&\n    typeof val.catch === 'function'\n  )\n}\n\n/**\n * Convert a value to a string that is actually rendered.\n */\nfunction toString (val) {\n  return val == null\n    ? ''\n    : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString)\n      ? JSON.stringify(val, null, 2)\n      : String(val)\n}\n\n/**\n * Convert an input value to a number for persistence.\n * If the conversion fails, return original string.\n */\nfunction toNumber (val) {\n  var n = parseFloat(val);\n  return isNaN(n) ? val : n\n}\n\n/**\n * Make a map and return a function for checking if a key\n * is in that map.\n */\nfunction makeMap (\n  str,\n  expectsLowerCase\n) {\n  var map = Object.create(null);\n  var list = str.split(',');\n  for (var i = 0; i < list.length; i++) {\n    map[list[i]] = true;\n  }\n  return expectsLowerCase\n    ? function (val) { return map[val.toLowerCase()]; }\n    : function (val) { return map[val]; }\n}\n\n/**\n * Check if a tag is a built-in tag.\n */\nvar isBuiltInTag = makeMap('slot,component', true);\n\n/**\n * Check if an attribute is a reserved attribute.\n */\nvar isReservedAttribute = makeMap('key,ref,slot,slot-scope,is');\n\n/**\n * Remove an item from an array.\n */\nfunction remove (arr, item) {\n  if (arr.length) {\n    var index = arr.indexOf(item);\n    if (index > -1) {\n      return arr.splice(index, 1)\n    }\n  }\n}\n\n/**\n * Check whether an object has the property.\n */\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction hasOwn (obj, key) {\n  return hasOwnProperty.call(obj, key)\n}\n\n/**\n * Create a cached version of a pure function.\n */\nfunction cached (fn) {\n  var cache = Object.create(null);\n  return (function cachedFn (str) {\n    var hit = cache[str];\n    return hit || (cache[str] = fn(str))\n  })\n}\n\n/**\n * Camelize a hyphen-delimited string.\n */\nvar camelizeRE = /-(\\w)/g;\nvar camelize = cached(function (str) {\n  return str.replace(camelizeRE, function (_, c) { return c ? c.toUpperCase() : ''; })\n});\n\n/**\n * Capitalize a string.\n */\nvar capitalize = cached(function (str) {\n  return str.charAt(0).toUpperCase() + str.slice(1)\n});\n\n/**\n * Hyphenate a camelCase string.\n */\nvar hyphenateRE = /\\B([A-Z])/g;\nvar hyphenate = cached(function (str) {\n  return str.replace(hyphenateRE, '-$1').toLowerCase()\n});\n\n/**\n * Simple bind polyfill for environments that do not support it,\n * e.g., PhantomJS 1.x. Technically, we don't need this anymore\n * since native bind is now performant enough in most browsers.\n * But removing it would mean breaking code that was able to run in\n * PhantomJS 1.x, so this must be kept for backward compatibility.\n */\n\n/* istanbul ignore next */\nfunction polyfillBind (fn, ctx) {\n  function boundFn (a) {\n    var l = arguments.length;\n    return l\n      ? l > 1\n        ? fn.apply(ctx, arguments)\n        : fn.call(ctx, a)\n      : fn.call(ctx)\n  }\n\n  boundFn._length = fn.length;\n  return boundFn\n}\n\nfunction nativeBind (fn, ctx) {\n  return fn.bind(ctx)\n}\n\nvar bind = Function.prototype.bind\n  ? nativeBind\n  : polyfillBind;\n\n/**\n * Convert an Array-like object to a real Array.\n */\nfunction toArray (list, start) {\n  start = start || 0;\n  var i = list.length - start;\n  var ret = new Array(i);\n  while (i--) {\n    ret[i] = list[i + start];\n  }\n  return ret\n}\n\n/**\n * Mix properties into target object.\n */\nfunction extend (to, _from) {\n  for (var key in _from) {\n    to[key] = _from[key];\n  }\n  return to\n}\n\n/**\n * Merge an Array of Objects into a single Object.\n */\nfunction toObject (arr) {\n  var res = {};\n  for (var i = 0; i < arr.length; i++) {\n    if (arr[i]) {\n      extend(res, arr[i]);\n    }\n  }\n  return res\n}\n\n/* eslint-disable no-unused-vars */\n\n/**\n * Perform no operation.\n * Stubbing args to make Flow happy without leaving useless transpiled code\n * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/).\n */\nfunction noop (a, b, c) {}\n\n/**\n * Always return false.\n */\nvar no = function (a, b, c) { return false; };\n\n/* eslint-enable no-unused-vars */\n\n/**\n * Return the same value.\n */\nvar identity = function (_) { return _; };\n\n/**\n * Generate a string containing static keys from compiler modules.\n */\nfunction genStaticKeys (modules) {\n  return modules.reduce(function (keys, m) {\n    return keys.concat(m.staticKeys || [])\n  }, []).join(',')\n}\n\n/**\n * Check if two values are loosely equal - that is,\n * if they are plain objects, do they have the same shape?\n */\nfunction looseEqual (a, b) {\n  if (a === b) { return true }\n  var isObjectA = isObject(a);\n  var isObjectB = isObject(b);\n  if (isObjectA && isObjectB) {\n    try {\n      var isArrayA = Array.isArray(a);\n      var isArrayB = Array.isArray(b);\n      if (isArrayA && isArrayB) {\n        return a.length === b.length && a.every(function (e, i) {\n          return looseEqual(e, b[i])\n        })\n      } else if (a instanceof Date && b instanceof Date) {\n        return a.getTime() === b.getTime()\n      } else if (!isArrayA && !isArrayB) {\n        var keysA = Object.keys(a);\n        var keysB = Object.keys(b);\n        return keysA.length === keysB.length && keysA.every(function (key) {\n          return looseEqual(a[key], b[key])\n        })\n      } else {\n        /* istanbul ignore next */\n        return false\n      }\n    } catch (e) {\n      /* istanbul ignore next */\n      return false\n    }\n  } else if (!isObjectA && !isObjectB) {\n    return String(a) === String(b)\n  } else {\n    return false\n  }\n}\n\n/**\n * Return the first index at which a loosely equal value can be\n * found in the array (if value is a plain object, the array must\n * contain an object of the same shape), or -1 if it is not present.\n */\nfunction looseIndexOf (arr, val) {\n  for (var i = 0; i < arr.length; i++) {\n    if (looseEqual(arr[i], val)) { return i }\n  }\n  return -1\n}\n\n/**\n * Ensure a function is called only once.\n */\nfunction once (fn) {\n  var called = false;\n  return function () {\n    if (!called) {\n      called = true;\n      fn.apply(this, arguments);\n    }\n  }\n}\n\nvar SSR_ATTR = 'data-server-rendered';\n\nvar ASSET_TYPES = [\n  'component',\n  'directive',\n  'filter'\n];\n\nvar LIFECYCLE_HOOKS = [\n  'beforeCreate',\n  'created',\n  'beforeMount',\n  'mounted',\n  'beforeUpdate',\n  'updated',\n  'beforeDestroy',\n  'destroyed',\n  'activated',\n  'deactivated',\n  'errorCaptured',\n  'serverPrefetch'\n];\n\n/*  */\n\n\n\nvar config = ({\n  /**\n   * Option merge strategies (used in core/util/options)\n   */\n  // $flow-disable-line\n  optionMergeStrategies: Object.create(null),\n\n  /**\n   * Whether to suppress warnings.\n   */\n  silent: false,\n\n  /**\n   * Show production mode tip message on boot?\n   */\n  productionTip: \"development\" !== 'production',\n\n  /**\n   * Whether to enable devtools\n   */\n  devtools: \"development\" !== 'production',\n\n  /**\n   * Whether to record perf\n   */\n  performance: false,\n\n  /**\n   * Error handler for watcher errors\n   */\n  errorHandler: null,\n\n  /**\n   * Warn handler for watcher warns\n   */\n  warnHandler: null,\n\n  /**\n   * Ignore certain custom elements\n   */\n  ignoredElements: [],\n\n  /**\n   * Custom user key aliases for v-on\n   */\n  // $flow-disable-line\n  keyCodes: Object.create(null),\n\n  /**\n   * Check if a tag is reserved so that it cannot be registered as a\n   * component. This is platform-dependent and may be overwritten.\n   */\n  isReservedTag: no,\n\n  /**\n   * Check if an attribute is reserved so that it cannot be used as a component\n   * prop. This is platform-dependent and may be overwritten.\n   */\n  isReservedAttr: no,\n\n  /**\n   * Check if a tag is an unknown element.\n   * Platform-dependent.\n   */\n  isUnknownElement: no,\n\n  /**\n   * Get the namespace of an element\n   */\n  getTagNamespace: noop,\n\n  /**\n   * Parse the real tag name for the specific platform.\n   */\n  parsePlatformTagName: identity,\n\n  /**\n   * Check if an attribute must be bound using property, e.g. value\n   * Platform-dependent.\n   */\n  mustUseProp: no,\n\n  /**\n   * Perform updates asynchronously. Intended to be used by Vue Test Utils\n   * This will significantly reduce performance if set to false.\n   */\n  async: true,\n\n  /**\n   * Exposed for legacy reasons\n   */\n  _lifecycleHooks: LIFECYCLE_HOOKS\n});\n\n/*  */\n\n/**\n * unicode letters used for parsing html tags, component names and property paths.\n * using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname\n * skipping \\u10000-\\uEFFFF due to it freezing up PhantomJS\n */\nvar unicodeRegExp = /a-zA-Z\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F-\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD/;\n\n/**\n * Check if a string starts with $ or _\n */\nfunction isReserved (str) {\n  var c = (str + '').charCodeAt(0);\n  return c === 0x24 || c === 0x5F\n}\n\n/**\n * Define a property.\n */\nfunction def (obj, key, val, enumerable) {\n  Object.defineProperty(obj, key, {\n    value: val,\n    enumerable: !!enumerable,\n    writable: true,\n    configurable: true\n  });\n}\n\n/**\n * Parse simple path.\n */\nvar bailRE = new RegExp((\"[^\" + (unicodeRegExp.source) + \".$_\\\\d]\"));\nfunction parsePath (path) {\n  if (bailRE.test(path)) {\n    return\n  }\n  var segments = path.split('.');\n  return function (obj) {\n    for (var i = 0; i < segments.length; i++) {\n      if (!obj) { return }\n      obj = obj[segments[i]];\n    }\n    return obj\n  }\n}\n\n/*  */\n\n// can we use __proto__?\nvar hasProto = '__proto__' in {};\n\n// Browser environment sniffing\nvar inBrowser = typeof window !== 'undefined';\nvar inWeex = typeof WXEnvironment !== 'undefined' && !!WXEnvironment.platform;\nvar weexPlatform = inWeex && WXEnvironment.platform.toLowerCase();\nvar UA = inBrowser && window.navigator.userAgent.toLowerCase();\nvar isIE = UA && /msie|trident/.test(UA);\nvar isIE9 = UA && UA.indexOf('msie 9.0') > 0;\nvar isEdge = UA && UA.indexOf('edge/') > 0;\nvar isAndroid = (UA && UA.indexOf('android') > 0) || (weexPlatform === 'android');\nvar isIOS = (UA && /iphone|ipad|ipod|ios/.test(UA)) || (weexPlatform === 'ios');\nvar isChrome = UA && /chrome\\/\\d+/.test(UA) && !isEdge;\nvar isPhantomJS = UA && /phantomjs/.test(UA);\nvar isFF = UA && UA.match(/firefox\\/(\\d+)/);\n\n// Firefox has a \"watch\" function on Object.prototype...\nvar nativeWatch = ({}).watch;\n\nvar supportsPassive = false;\nif (inBrowser) {\n  try {\n    var opts = {};\n    Object.defineProperty(opts, 'passive', ({\n      get: function get () {\n        /* istanbul ignore next */\n        supportsPassive = true;\n      }\n    })); // https://github.com/facebook/flow/issues/285\n    window.addEventListener('test-passive', null, opts);\n  } catch (e) {}\n}\n\n// this needs to be lazy-evaled because vue may be required before\n// vue-server-renderer can set VUE_ENV\nvar _isServer;\nvar isServerRendering = function () {\n  if (_isServer === undefined) {\n    /* istanbul ignore if */\n    if (!inBrowser && !inWeex && typeof __webpack_require__.g !== 'undefined') {\n      // detect presence of vue-server-renderer and avoid\n      // Webpack shimming the process\n      _isServer = __webpack_require__.g['process'] && __webpack_require__.g['process'].env.VUE_ENV === 'server';\n    } else {\n      _isServer = false;\n    }\n  }\n  return _isServer\n};\n\n// detect devtools\nvar devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;\n\n/* istanbul ignore next */\nfunction isNative (Ctor) {\n  return typeof Ctor === 'function' && /native code/.test(Ctor.toString())\n}\n\nvar hasSymbol =\n  typeof Symbol !== 'undefined' && isNative(Symbol) &&\n  typeof Reflect !== 'undefined' && isNative(Reflect.ownKeys);\n\nvar _Set;\n/* istanbul ignore if */ // $flow-disable-line\nif (typeof Set !== 'undefined' && isNative(Set)) {\n  // use native Set when available.\n  _Set = Set;\n} else {\n  // a non-standard Set polyfill that only works with primitive keys.\n  _Set = /*@__PURE__*/(function () {\n    function Set () {\n      this.set = Object.create(null);\n    }\n    Set.prototype.has = function has (key) {\n      return this.set[key] === true\n    };\n    Set.prototype.add = function add (key) {\n      this.set[key] = true;\n    };\n    Set.prototype.clear = function clear () {\n      this.set = Object.create(null);\n    };\n\n    return Set;\n  }());\n}\n\n/*  */\n\nvar warn = noop;\nvar tip = noop;\nvar generateComponentTrace = (noop); // work around flow check\nvar formatComponentName = (noop);\n\nif (true) {\n  var hasConsole = typeof console !== 'undefined';\n  var classifyRE = /(?:^|[-_])(\\w)/g;\n  var classify = function (str) { return str\n    .replace(classifyRE, function (c) { return c.toUpperCase(); })\n    .replace(/[-_]/g, ''); };\n\n  warn = function (msg, vm) {\n    var trace = vm ? generateComponentTrace(vm) : '';\n\n    if (config.warnHandler) {\n      config.warnHandler.call(null, msg, vm, trace);\n    } else if (hasConsole && (!config.silent)) {\n      console.error((\"[Vue warn]: \" + msg + trace));\n    }\n  };\n\n  tip = function (msg, vm) {\n    if (hasConsole && (!config.silent)) {\n      console.warn(\"[Vue tip]: \" + msg + (\n        vm ? generateComponentTrace(vm) : ''\n      ));\n    }\n  };\n\n  formatComponentName = function (vm, includeFile) {\n    if (vm.$root === vm) {\n      return '<Root>'\n    }\n    var options = typeof vm === 'function' && vm.cid != null\n      ? vm.options\n      : vm._isVue\n        ? vm.$options || vm.constructor.options\n        : vm;\n    var name = options.name || options._componentTag;\n    var file = options.__file;\n    if (!name && file) {\n      var match = file.match(/([^/\\\\]+)\\.vue$/);\n      name = match && match[1];\n    }\n\n    return (\n      (name ? (\"<\" + (classify(name)) + \">\") : \"<Anonymous>\") +\n      (file && includeFile !== false ? (\" at \" + file) : '')\n    )\n  };\n\n  var repeat = function (str, n) {\n    var res = '';\n    while (n) {\n      if (n % 2 === 1) { res += str; }\n      if (n > 1) { str += str; }\n      n >>= 1;\n    }\n    return res\n  };\n\n  generateComponentTrace = function (vm) {\n    if (vm._isVue && vm.$parent) {\n      var tree = [];\n      var currentRecursiveSequence = 0;\n      while (vm) {\n        if (tree.length > 0) {\n          var last = tree[tree.length - 1];\n          if (last.constructor === vm.constructor) {\n            currentRecursiveSequence++;\n            vm = vm.$parent;\n            continue\n          } else if (currentRecursiveSequence > 0) {\n            tree[tree.length - 1] = [last, currentRecursiveSequence];\n            currentRecursiveSequence = 0;\n          }\n        }\n        tree.push(vm);\n        vm = vm.$parent;\n      }\n      return '\\n\\nfound in\\n\\n' + tree\n        .map(function (vm, i) { return (\"\" + (i === 0 ? '---> ' : repeat(' ', 5 + i * 2)) + (Array.isArray(vm)\n            ? ((formatComponentName(vm[0])) + \"... (\" + (vm[1]) + \" recursive calls)\")\n            : formatComponentName(vm))); })\n        .join('\\n')\n    } else {\n      return (\"\\n\\n(found in \" + (formatComponentName(vm)) + \")\")\n    }\n  };\n}\n\n/*  */\n\nvar uid = 0;\n\n/**\n * A dep is an observable that can have multiple\n * directives subscribing to it.\n */\nvar Dep = function Dep () {\n  this.id = uid++;\n  this.subs = [];\n};\n\nDep.prototype.addSub = function addSub (sub) {\n  this.subs.push(sub);\n};\n\nDep.prototype.removeSub = function removeSub (sub) {\n  remove(this.subs, sub);\n};\n\nDep.prototype.depend = function depend () {\n  if (Dep.target) {\n    Dep.target.addDep(this);\n  }\n};\n\nDep.prototype.notify = function notify () {\n  // stabilize the subscriber list first\n  var subs = this.subs.slice();\n  if ( true && !config.async) {\n    // subs aren't sorted in scheduler if not running async\n    // we need to sort them now to make sure they fire in correct\n    // order\n    subs.sort(function (a, b) { return a.id - b.id; });\n  }\n  for (var i = 0, l = subs.length; i < l; i++) {\n    subs[i].update();\n  }\n};\n\n// The current target watcher being evaluated.\n// This is globally unique because only one watcher\n// can be evaluated at a time.\nDep.target = null;\nvar targetStack = [];\n\nfunction pushTarget (target) {\n  targetStack.push(target);\n  Dep.target = target;\n}\n\nfunction popTarget () {\n  targetStack.pop();\n  Dep.target = targetStack[targetStack.length - 1];\n}\n\n/*  */\n\nvar VNode = function VNode (\n  tag,\n  data,\n  children,\n  text,\n  elm,\n  context,\n  componentOptions,\n  asyncFactory\n) {\n  this.tag = tag;\n  this.data = data;\n  this.children = children;\n  this.text = text;\n  this.elm = elm;\n  this.ns = undefined;\n  this.context = context;\n  this.fnContext = undefined;\n  this.fnOptions = undefined;\n  this.fnScopeId = undefined;\n  this.key = data && data.key;\n  this.componentOptions = componentOptions;\n  this.componentInstance = undefined;\n  this.parent = undefined;\n  this.raw = false;\n  this.isStatic = false;\n  this.isRootInsert = true;\n  this.isComment = false;\n  this.isCloned = false;\n  this.isOnce = false;\n  this.asyncFactory = asyncFactory;\n  this.asyncMeta = undefined;\n  this.isAsyncPlaceholder = false;\n};\n\nvar prototypeAccessors = { child: { configurable: true } };\n\n// DEPRECATED: alias for componentInstance for backwards compat.\n/* istanbul ignore next */\nprototypeAccessors.child.get = function () {\n  return this.componentInstance\n};\n\nObject.defineProperties( VNode.prototype, prototypeAccessors );\n\nvar createEmptyVNode = function (text) {\n  if ( text === void 0 ) text = '';\n\n  var node = new VNode();\n  node.text = text;\n  node.isComment = true;\n  return node\n};\n\nfunction createTextVNode (val) {\n  return new VNode(undefined, undefined, undefined, String(val))\n}\n\n// optimized shallow clone\n// used for static nodes and slot nodes because they may be reused across\n// multiple renders, cloning them avoids errors when DOM manipulations rely\n// on their elm reference.\nfunction cloneVNode (vnode) {\n  var cloned = new VNode(\n    vnode.tag,\n    vnode.data,\n    // #7975\n    // clone children array to avoid mutating original in case of cloning\n    // a child.\n    vnode.children && vnode.children.slice(),\n    vnode.text,\n    vnode.elm,\n    vnode.context,\n    vnode.componentOptions,\n    vnode.asyncFactory\n  );\n  cloned.ns = vnode.ns;\n  cloned.isStatic = vnode.isStatic;\n  cloned.key = vnode.key;\n  cloned.isComment = vnode.isComment;\n  cloned.fnContext = vnode.fnContext;\n  cloned.fnOptions = vnode.fnOptions;\n  cloned.fnScopeId = vnode.fnScopeId;\n  cloned.asyncMeta = vnode.asyncMeta;\n  cloned.isCloned = true;\n  return cloned\n}\n\n/*\n * not type checking this file because flow doesn't play well with\n * dynamically accessing methods on Array prototype\n */\n\nvar arrayProto = Array.prototype;\nvar arrayMethods = Object.create(arrayProto);\n\nvar methodsToPatch = [\n  'push',\n  'pop',\n  'shift',\n  'unshift',\n  'splice',\n  'sort',\n  'reverse'\n];\n\n/**\n * Intercept mutating methods and emit events\n */\nmethodsToPatch.forEach(function (method) {\n  // cache original method\n  var original = arrayProto[method];\n  def(arrayMethods, method, function mutator () {\n    var args = [], len = arguments.length;\n    while ( len-- ) args[ len ] = arguments[ len ];\n\n    var result = original.apply(this, args);\n    var ob = this.__ob__;\n    var inserted;\n    switch (method) {\n      case 'push':\n      case 'unshift':\n        inserted = args;\n        break\n      case 'splice':\n        inserted = args.slice(2);\n        break\n    }\n    if (inserted) { ob.observeArray(inserted); }\n    // notify change\n    ob.dep.notify();\n    return result\n  });\n});\n\n/*  */\n\nvar arrayKeys = Object.getOwnPropertyNames(arrayMethods);\n\n/**\n * In some cases we may want to disable observation inside a component's\n * update computation.\n */\nvar shouldObserve = true;\n\nfunction toggleObserving (value) {\n  shouldObserve = value;\n}\n\n/**\n * Observer class that is attached to each observed\n * object. Once attached, the observer converts the target\n * object's property keys into getter/setters that\n * collect dependencies and dispatch updates.\n */\nvar Observer = function Observer (value) {\n  this.value = value;\n  this.dep = new Dep();\n  this.vmCount = 0;\n  def(value, '__ob__', this);\n  if (Array.isArray(value)) {\n    if (hasProto) {\n      protoAugment(value, arrayMethods);\n    } else {\n      copyAugment(value, arrayMethods, arrayKeys);\n    }\n    this.observeArray(value);\n  } else {\n    this.walk(value);\n  }\n};\n\n/**\n * Walk through all properties and convert them into\n * getter/setters. This method should only be called when\n * value type is Object.\n */\nObserver.prototype.walk = function walk (obj) {\n  var keys = Object.keys(obj);\n  for (var i = 0; i < keys.length; i++) {\n    defineReactive$$1(obj, keys[i]);\n  }\n};\n\n/**\n * Observe a list of Array items.\n */\nObserver.prototype.observeArray = function observeArray (items) {\n  for (var i = 0, l = items.length; i < l; i++) {\n    observe(items[i]);\n  }\n};\n\n// helpers\n\n/**\n * Augment a target Object or Array by intercepting\n * the prototype chain using __proto__\n */\nfunction protoAugment (target, src) {\n  /* eslint-disable no-proto */\n  target.__proto__ = src;\n  /* eslint-enable no-proto */\n}\n\n/**\n * Augment a target Object or Array by defining\n * hidden properties.\n */\n/* istanbul ignore next */\nfunction copyAugment (target, src, keys) {\n  for (var i = 0, l = keys.length; i < l; i++) {\n    var key = keys[i];\n    def(target, key, src[key]);\n  }\n}\n\n/**\n * Attempt to create an observer instance for a value,\n * returns the new observer if successfully observed,\n * or the existing observer if the value already has one.\n */\nfunction observe (value, asRootData) {\n  if (!isObject(value) || value instanceof VNode) {\n    return\n  }\n  var ob;\n  if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {\n    ob = value.__ob__;\n  } else if (\n    shouldObserve &&\n    !isServerRendering() &&\n    (Array.isArray(value) || isPlainObject(value)) &&\n    Object.isExtensible(value) &&\n    !value._isVue\n  ) {\n    ob = new Observer(value);\n  }\n  if (asRootData && ob) {\n    ob.vmCount++;\n  }\n  return ob\n}\n\n/**\n * Define a reactive property on an Object.\n */\nfunction defineReactive$$1 (\n  obj,\n  key,\n  val,\n  customSetter,\n  shallow\n) {\n  var dep = new Dep();\n\n  var property = Object.getOwnPropertyDescriptor(obj, key);\n  if (property && property.configurable === false) {\n    return\n  }\n\n  // cater for pre-defined getter/setters\n  var getter = property && property.get;\n  var setter = property && property.set;\n  if ((!getter || setter) && arguments.length === 2) {\n    val = obj[key];\n  }\n\n  var childOb = !shallow && observe(val);\n  Object.defineProperty(obj, key, {\n    enumerable: true,\n    configurable: true,\n    get: function reactiveGetter () {\n      var value = getter ? getter.call(obj) : val;\n      if (Dep.target) {\n        dep.depend();\n        if (childOb) {\n          childOb.dep.depend();\n          if (Array.isArray(value)) {\n            dependArray(value);\n          }\n        }\n      }\n      return value\n    },\n    set: function reactiveSetter (newVal) {\n      var value = getter ? getter.call(obj) : val;\n      /* eslint-disable no-self-compare */\n      if (newVal === value || (newVal !== newVal && value !== value)) {\n        return\n      }\n      /* eslint-enable no-self-compare */\n      if ( true && customSetter) {\n        customSetter();\n      }\n      // #7981: for accessor properties without setter\n      if (getter && !setter) { return }\n      if (setter) {\n        setter.call(obj, newVal);\n      } else {\n        val = newVal;\n      }\n      childOb = !shallow && observe(newVal);\n      dep.notify();\n    }\n  });\n}\n\n/**\n * Set a property on an object. Adds the new property and\n * triggers change notification if the property doesn't\n * already exist.\n */\nfunction set (target, key, val) {\n  if ( true &&\n    (isUndef(target) || isPrimitive(target))\n  ) {\n    warn((\"Cannot set reactive property on undefined, null, or primitive value: \" + ((target))));\n  }\n  if (Array.isArray(target) && isValidArrayIndex(key)) {\n    target.length = Math.max(target.length, key);\n    target.splice(key, 1, val);\n    return val\n  }\n  if (key in target && !(key in Object.prototype)) {\n    target[key] = val;\n    return val\n  }\n  var ob = (target).__ob__;\n  if (target._isVue || (ob && ob.vmCount)) {\n     true && warn(\n      'Avoid adding reactive properties to a Vue instance or its root $data ' +\n      'at runtime - declare it upfront in the data option.'\n    );\n    return val\n  }\n  if (!ob) {\n    target[key] = val;\n    return val\n  }\n  defineReactive$$1(ob.value, key, val);\n  ob.dep.notify();\n  return val\n}\n\n/**\n * Delete a property and trigger change if necessary.\n */\nfunction del (target, key) {\n  if ( true &&\n    (isUndef(target) || isPrimitive(target))\n  ) {\n    warn((\"Cannot delete reactive property on undefined, null, or primitive value: \" + ((target))));\n  }\n  if (Array.isArray(target) && isValidArrayIndex(key)) {\n    target.splice(key, 1);\n    return\n  }\n  var ob = (target).__ob__;\n  if (target._isVue || (ob && ob.vmCount)) {\n     true && warn(\n      'Avoid deleting properties on a Vue instance or its root $data ' +\n      '- just set it to null.'\n    );\n    return\n  }\n  if (!hasOwn(target, key)) {\n    return\n  }\n  delete target[key];\n  if (!ob) {\n    return\n  }\n  ob.dep.notify();\n}\n\n/**\n * Collect dependencies on array elements when the array is touched, since\n * we cannot intercept array element access like property getters.\n */\nfunction dependArray (value) {\n  for (var e = (void 0), i = 0, l = value.length; i < l; i++) {\n    e = value[i];\n    e && e.__ob__ && e.__ob__.dep.depend();\n    if (Array.isArray(e)) {\n      dependArray(e);\n    }\n  }\n}\n\n/*  */\n\n/**\n * Option overwriting strategies are functions that handle\n * how to merge a parent option value and a child option\n * value into the final value.\n */\nvar strats = config.optionMergeStrategies;\n\n/**\n * Options with restrictions\n */\nif (true) {\n  strats.el = strats.propsData = function (parent, child, vm, key) {\n    if (!vm) {\n      warn(\n        \"option \\\"\" + key + \"\\\" can only be used during instance \" +\n        'creation with the `new` keyword.'\n      );\n    }\n    return defaultStrat(parent, child)\n  };\n}\n\n/**\n * Helper that recursively merges two data objects together.\n */\nfunction mergeData (to, from) {\n  if (!from) { return to }\n  var key, toVal, fromVal;\n\n  var keys = hasSymbol\n    ? Reflect.ownKeys(from)\n    : Object.keys(from);\n\n  for (var i = 0; i < keys.length; i++) {\n    key = keys[i];\n    // in case the object is already observed...\n    if (key === '__ob__') { continue }\n    toVal = to[key];\n    fromVal = from[key];\n    if (!hasOwn(to, key)) {\n      set(to, key, fromVal);\n    } else if (\n      toVal !== fromVal &&\n      isPlainObject(toVal) &&\n      isPlainObject(fromVal)\n    ) {\n      mergeData(toVal, fromVal);\n    }\n  }\n  return to\n}\n\n/**\n * Data\n */\nfunction mergeDataOrFn (\n  parentVal,\n  childVal,\n  vm\n) {\n  if (!vm) {\n    // in a Vue.extend merge, both should be functions\n    if (!childVal) {\n      return parentVal\n    }\n    if (!parentVal) {\n      return childVal\n    }\n    // when parentVal & childVal are both present,\n    // we need to return a function that returns the\n    // merged result of both functions... no need to\n    // check if parentVal is a function here because\n    // it has to be a function to pass previous merges.\n    return function mergedDataFn () {\n      return mergeData(\n        typeof childVal === 'function' ? childVal.call(this, this) : childVal,\n        typeof parentVal === 'function' ? parentVal.call(this, this) : parentVal\n      )\n    }\n  } else {\n    return function mergedInstanceDataFn () {\n      // instance merge\n      var instanceData = typeof childVal === 'function'\n        ? childVal.call(vm, vm)\n        : childVal;\n      var defaultData = typeof parentVal === 'function'\n        ? parentVal.call(vm, vm)\n        : parentVal;\n      if (instanceData) {\n        return mergeData(instanceData, defaultData)\n      } else {\n        return defaultData\n      }\n    }\n  }\n}\n\nstrats.data = function (\n  parentVal,\n  childVal,\n  vm\n) {\n  if (!vm) {\n    if (childVal && typeof childVal !== 'function') {\n       true && warn(\n        'The \"data\" option should be a function ' +\n        'that returns a per-instance value in component ' +\n        'definitions.',\n        vm\n      );\n\n      return parentVal\n    }\n    return mergeDataOrFn(parentVal, childVal)\n  }\n\n  return mergeDataOrFn(parentVal, childVal, vm)\n};\n\n/**\n * Hooks and props are merged as arrays.\n */\nfunction mergeHook (\n  parentVal,\n  childVal\n) {\n  var res = childVal\n    ? parentVal\n      ? parentVal.concat(childVal)\n      : Array.isArray(childVal)\n        ? childVal\n        : [childVal]\n    : parentVal;\n  return res\n    ? dedupeHooks(res)\n    : res\n}\n\nfunction dedupeHooks (hooks) {\n  var res = [];\n  for (var i = 0; i < hooks.length; i++) {\n    if (res.indexOf(hooks[i]) === -1) {\n      res.push(hooks[i]);\n    }\n  }\n  return res\n}\n\nLIFECYCLE_HOOKS.forEach(function (hook) {\n  strats[hook] = mergeHook;\n});\n\n/**\n * Assets\n *\n * When a vm is present (instance creation), we need to do\n * a three-way merge between constructor options, instance\n * options and parent options.\n */\nfunction mergeAssets (\n  parentVal,\n  childVal,\n  vm,\n  key\n) {\n  var res = Object.create(parentVal || null);\n  if (childVal) {\n     true && assertObjectType(key, childVal, vm);\n    return extend(res, childVal)\n  } else {\n    return res\n  }\n}\n\nASSET_TYPES.forEach(function (type) {\n  strats[type + 's'] = mergeAssets;\n});\n\n/**\n * Watchers.\n *\n * Watchers hashes should not overwrite one\n * another, so we merge them as arrays.\n */\nstrats.watch = function (\n  parentVal,\n  childVal,\n  vm,\n  key\n) {\n  // work around Firefox's Object.prototype.watch...\n  if (parentVal === nativeWatch) { parentVal = undefined; }\n  if (childVal === nativeWatch) { childVal = undefined; }\n  /* istanbul ignore if */\n  if (!childVal) { return Object.create(parentVal || null) }\n  if (true) {\n    assertObjectType(key, childVal, vm);\n  }\n  if (!parentVal) { return childVal }\n  var ret = {};\n  extend(ret, parentVal);\n  for (var key$1 in childVal) {\n    var parent = ret[key$1];\n    var child = childVal[key$1];\n    if (parent && !Array.isArray(parent)) {\n      parent = [parent];\n    }\n    ret[key$1] = parent\n      ? parent.concat(child)\n      : Array.isArray(child) ? child : [child];\n  }\n  return ret\n};\n\n/**\n * Other object hashes.\n */\nstrats.props =\nstrats.methods =\nstrats.inject =\nstrats.computed = function (\n  parentVal,\n  childVal,\n  vm,\n  key\n) {\n  if (childVal && \"development\" !== 'production') {\n    assertObjectType(key, childVal, vm);\n  }\n  if (!parentVal) { return childVal }\n  var ret = Object.create(null);\n  extend(ret, parentVal);\n  if (childVal) { extend(ret, childVal); }\n  return ret\n};\nstrats.provide = mergeDataOrFn;\n\n/**\n * Default strategy.\n */\nvar defaultStrat = function (parentVal, childVal) {\n  return childVal === undefined\n    ? parentVal\n    : childVal\n};\n\n/**\n * Validate component names\n */\nfunction checkComponents (options) {\n  for (var key in options.components) {\n    validateComponentName(key);\n  }\n}\n\nfunction validateComponentName (name) {\n  if (!new RegExp((\"^[a-zA-Z][\\\\-\\\\.0-9_\" + (unicodeRegExp.source) + \"]*$\")).test(name)) {\n    warn(\n      'Invalid component name: \"' + name + '\". Component names ' +\n      'should conform to valid custom element name in html5 specification.'\n    );\n  }\n  if (isBuiltInTag(name) || config.isReservedTag(name)) {\n    warn(\n      'Do not use built-in or reserved HTML elements as component ' +\n      'id: ' + name\n    );\n  }\n}\n\n/**\n * Ensure all props option syntax are normalized into the\n * Object-based format.\n */\nfunction normalizeProps (options, vm) {\n  var props = options.props;\n  if (!props) { return }\n  var res = {};\n  var i, val, name;\n  if (Array.isArray(props)) {\n    i = props.length;\n    while (i--) {\n      val = props[i];\n      if (typeof val === 'string') {\n        name = camelize(val);\n        res[name] = { type: null };\n      } else if (true) {\n        warn('props must be strings when using array syntax.');\n      }\n    }\n  } else if (isPlainObject(props)) {\n    for (var key in props) {\n      val = props[key];\n      name = camelize(key);\n      res[name] = isPlainObject(val)\n        ? val\n        : { type: val };\n    }\n  } else if (true) {\n    warn(\n      \"Invalid value for option \\\"props\\\": expected an Array or an Object, \" +\n      \"but got \" + (toRawType(props)) + \".\",\n      vm\n    );\n  }\n  options.props = res;\n}\n\n/**\n * Normalize all injections into Object-based format\n */\nfunction normalizeInject (options, vm) {\n  var inject = options.inject;\n  if (!inject) { return }\n  var normalized = options.inject = {};\n  if (Array.isArray(inject)) {\n    for (var i = 0; i < inject.length; i++) {\n      normalized[inject[i]] = { from: inject[i] };\n    }\n  } else if (isPlainObject(inject)) {\n    for (var key in inject) {\n      var val = inject[key];\n      normalized[key] = isPlainObject(val)\n        ? extend({ from: key }, val)\n        : { from: val };\n    }\n  } else if (true) {\n    warn(\n      \"Invalid value for option \\\"inject\\\": expected an Array or an Object, \" +\n      \"but got \" + (toRawType(inject)) + \".\",\n      vm\n    );\n  }\n}\n\n/**\n * Normalize raw function directives into object format.\n */\nfunction normalizeDirectives (options) {\n  var dirs = options.directives;\n  if (dirs) {\n    for (var key in dirs) {\n      var def$$1 = dirs[key];\n      if (typeof def$$1 === 'function') {\n        dirs[key] = { bind: def$$1, update: def$$1 };\n      }\n    }\n  }\n}\n\nfunction assertObjectType (name, value, vm) {\n  if (!isPlainObject(value)) {\n    warn(\n      \"Invalid value for option \\\"\" + name + \"\\\": expected an Object, \" +\n      \"but got \" + (toRawType(value)) + \".\",\n      vm\n    );\n  }\n}\n\n/**\n * Merge two option objects into a new one.\n * Core utility used in both instantiation and inheritance.\n */\nfunction mergeOptions (\n  parent,\n  child,\n  vm\n) {\n  if (true) {\n    checkComponents(child);\n  }\n\n  if (typeof child === 'function') {\n    child = child.options;\n  }\n\n  normalizeProps(child, vm);\n  normalizeInject(child, vm);\n  normalizeDirectives(child);\n\n  // Apply extends and mixins on the child options,\n  // but only if it is a raw options object that isn't\n  // the result of another mergeOptions call.\n  // Only merged options has the _base property.\n  if (!child._base) {\n    if (child.extends) {\n      parent = mergeOptions(parent, child.extends, vm);\n    }\n    if (child.mixins) {\n      for (var i = 0, l = child.mixins.length; i < l; i++) {\n        parent = mergeOptions(parent, child.mixins[i], vm);\n      }\n    }\n  }\n\n  var options = {};\n  var key;\n  for (key in parent) {\n    mergeField(key);\n  }\n  for (key in child) {\n    if (!hasOwn(parent, key)) {\n      mergeField(key);\n    }\n  }\n  function mergeField (key) {\n    var strat = strats[key] || defaultStrat;\n    options[key] = strat(parent[key], child[key], vm, key);\n  }\n  return options\n}\n\n/**\n * Resolve an asset.\n * This function is used because child instances need access\n * to assets defined in its ancestor chain.\n */\nfunction resolveAsset (\n  options,\n  type,\n  id,\n  warnMissing\n) {\n  /* istanbul ignore if */\n  if (typeof id !== 'string') {\n    return\n  }\n  var assets = options[type];\n  // check local registration variations first\n  if (hasOwn(assets, id)) { return assets[id] }\n  var camelizedId = camelize(id);\n  if (hasOwn(assets, camelizedId)) { return assets[camelizedId] }\n  var PascalCaseId = capitalize(camelizedId);\n  if (hasOwn(assets, PascalCaseId)) { return assets[PascalCaseId] }\n  // fallback to prototype chain\n  var res = assets[id] || assets[camelizedId] || assets[PascalCaseId];\n  if ( true && warnMissing && !res) {\n    warn(\n      'Failed to resolve ' + type.slice(0, -1) + ': ' + id,\n      options\n    );\n  }\n  return res\n}\n\n/*  */\n\n\n\nfunction validateProp (\n  key,\n  propOptions,\n  propsData,\n  vm\n) {\n  var prop = propOptions[key];\n  var absent = !hasOwn(propsData, key);\n  var value = propsData[key];\n  // boolean casting\n  var booleanIndex = getTypeIndex(Boolean, prop.type);\n  if (booleanIndex > -1) {\n    if (absent && !hasOwn(prop, 'default')) {\n      value = false;\n    } else if (value === '' || value === hyphenate(key)) {\n      // only cast empty string / same name to boolean if\n      // boolean has higher priority\n      var stringIndex = getTypeIndex(String, prop.type);\n      if (stringIndex < 0 || booleanIndex < stringIndex) {\n        value = true;\n      }\n    }\n  }\n  // check default value\n  if (value === undefined) {\n    value = getPropDefaultValue(vm, prop, key);\n    // since the default value is a fresh copy,\n    // make sure to observe it.\n    var prevShouldObserve = shouldObserve;\n    toggleObserving(true);\n    observe(value);\n    toggleObserving(prevShouldObserve);\n  }\n  if (\n    true\n  ) {\n    assertProp(prop, key, value, vm, absent);\n  }\n  return value\n}\n\n/**\n * Get the default value of a prop.\n */\nfunction getPropDefaultValue (vm, prop, key) {\n  // no default, return undefined\n  if (!hasOwn(prop, 'default')) {\n    return undefined\n  }\n  var def = prop.default;\n  // warn against non-factory defaults for Object & Array\n  if ( true && isObject(def)) {\n    warn(\n      'Invalid default value for prop \"' + key + '\": ' +\n      'Props with type Object/Array must use a factory function ' +\n      'to return the default value.',\n      vm\n    );\n  }\n  // the raw prop value was also undefined from previous render,\n  // return previous default value to avoid unnecessary watcher trigger\n  if (vm && vm.$options.propsData &&\n    vm.$options.propsData[key] === undefined &&\n    vm._props[key] !== undefined\n  ) {\n    return vm._props[key]\n  }\n  // call factory function for non-Function types\n  // a value is Function if its prototype is function even across different execution context\n  return typeof def === 'function' && getType(prop.type) !== 'Function'\n    ? def.call(vm)\n    : def\n}\n\n/**\n * Assert whether a prop is valid.\n */\nfunction assertProp (\n  prop,\n  name,\n  value,\n  vm,\n  absent\n) {\n  if (prop.required && absent) {\n    warn(\n      'Missing required prop: \"' + name + '\"',\n      vm\n    );\n    return\n  }\n  if (value == null && !prop.required) {\n    return\n  }\n  var type = prop.type;\n  var valid = !type || type === true;\n  var expectedTypes = [];\n  if (type) {\n    if (!Array.isArray(type)) {\n      type = [type];\n    }\n    for (var i = 0; i < type.length && !valid; i++) {\n      var assertedType = assertType(value, type[i]);\n      expectedTypes.push(assertedType.expectedType || '');\n      valid = assertedType.valid;\n    }\n  }\n\n  if (!valid) {\n    warn(\n      getInvalidTypeMessage(name, value, expectedTypes),\n      vm\n    );\n    return\n  }\n  var validator = prop.validator;\n  if (validator) {\n    if (!validator(value)) {\n      warn(\n        'Invalid prop: custom validator check failed for prop \"' + name + '\".',\n        vm\n      );\n    }\n  }\n}\n\nvar simpleCheckRE = /^(String|Number|Boolean|Function|Symbol)$/;\n\nfunction assertType (value, type) {\n  var valid;\n  var expectedType = getType(type);\n  if (simpleCheckRE.test(expectedType)) {\n    var t = typeof value;\n    valid = t === expectedType.toLowerCase();\n    // for primitive wrapper objects\n    if (!valid && t === 'object') {\n      valid = value instanceof type;\n    }\n  } else if (expectedType === 'Object') {\n    valid = isPlainObject(value);\n  } else if (expectedType === 'Array') {\n    valid = Array.isArray(value);\n  } else {\n    valid = value instanceof type;\n  }\n  return {\n    valid: valid,\n    expectedType: expectedType\n  }\n}\n\n/**\n * Use function string name to check built-in types,\n * because a simple equality check will fail when running\n * across different vms / iframes.\n */\nfunction getType (fn) {\n  var match = fn && fn.toString().match(/^\\s*function (\\w+)/);\n  return match ? match[1] : ''\n}\n\nfunction isSameType (a, b) {\n  return getType(a) === getType(b)\n}\n\nfunction getTypeIndex (type, expectedTypes) {\n  if (!Array.isArray(expectedTypes)) {\n    return isSameType(expectedTypes, type) ? 0 : -1\n  }\n  for (var i = 0, len = expectedTypes.length; i < len; i++) {\n    if (isSameType(expectedTypes[i], type)) {\n      return i\n    }\n  }\n  return -1\n}\n\nfunction getInvalidTypeMessage (name, value, expectedTypes) {\n  var message = \"Invalid prop: type check failed for prop \\\"\" + name + \"\\\".\" +\n    \" Expected \" + (expectedTypes.map(capitalize).join(', '));\n  var expectedType = expectedTypes[0];\n  var receivedType = toRawType(value);\n  var expectedValue = styleValue(value, expectedType);\n  var receivedValue = styleValue(value, receivedType);\n  // check if we need to specify expected value\n  if (expectedTypes.length === 1 &&\n      isExplicable(expectedType) &&\n      !isBoolean(expectedType, receivedType)) {\n    message += \" with value \" + expectedValue;\n  }\n  message += \", got \" + receivedType + \" \";\n  // check if we need to specify received value\n  if (isExplicable(receivedType)) {\n    message += \"with value \" + receivedValue + \".\";\n  }\n  return message\n}\n\nfunction styleValue (value, type) {\n  if (type === 'String') {\n    return (\"\\\"\" + value + \"\\\"\")\n  } else if (type === 'Number') {\n    return (\"\" + (Number(value)))\n  } else {\n    return (\"\" + value)\n  }\n}\n\nfunction isExplicable (value) {\n  var explicitTypes = ['string', 'number', 'boolean'];\n  return explicitTypes.some(function (elem) { return value.toLowerCase() === elem; })\n}\n\nfunction isBoolean () {\n  var args = [], len = arguments.length;\n  while ( len-- ) args[ len ] = arguments[ len ];\n\n  return args.some(function (elem) { return elem.toLowerCase() === 'boolean'; })\n}\n\n/*  */\n\nfunction handleError (err, vm, info) {\n  // Deactivate deps tracking while processing error handler to avoid possible infinite rendering.\n  // See: https://github.com/vuejs/vuex/issues/1505\n  pushTarget();\n  try {\n    if (vm) {\n      var cur = vm;\n      while ((cur = cur.$parent)) {\n        var hooks = cur.$options.errorCaptured;\n        if (hooks) {\n          for (var i = 0; i < hooks.length; i++) {\n            try {\n              var capture = hooks[i].call(cur, err, vm, info) === false;\n              if (capture) { return }\n            } catch (e) {\n              globalHandleError(e, cur, 'errorCaptured hook');\n            }\n          }\n        }\n      }\n    }\n    globalHandleError(err, vm, info);\n  } finally {\n    popTarget();\n  }\n}\n\nfunction invokeWithErrorHandling (\n  handler,\n  context,\n  args,\n  vm,\n  info\n) {\n  var res;\n  try {\n    res = args ? handler.apply(context, args) : handler.call(context);\n    if (res && !res._isVue && isPromise(res) && !res._handled) {\n      res.catch(function (e) { return handleError(e, vm, info + \" (Promise/async)\"); });\n      // issue #9511\n      // avoid catch triggering multiple times when nested calls\n      res._handled = true;\n    }\n  } catch (e) {\n    handleError(e, vm, info);\n  }\n  return res\n}\n\nfunction globalHandleError (err, vm, info) {\n  if (config.errorHandler) {\n    try {\n      return config.errorHandler.call(null, err, vm, info)\n    } catch (e) {\n      // if the user intentionally throws the original error in the handler,\n      // do not log it twice\n      if (e !== err) {\n        logError(e, null, 'config.errorHandler');\n      }\n    }\n  }\n  logError(err, vm, info);\n}\n\nfunction logError (err, vm, info) {\n  if (true) {\n    warn((\"Error in \" + info + \": \\\"\" + (err.toString()) + \"\\\"\"), vm);\n  }\n  /* istanbul ignore else */\n  if ((inBrowser || inWeex) && typeof console !== 'undefined') {\n    console.error(err);\n  } else {\n    throw err\n  }\n}\n\n/*  */\n\nvar isUsingMicroTask = false;\n\nvar callbacks = [];\nvar pending = false;\n\nfunction flushCallbacks () {\n  pending = false;\n  var copies = callbacks.slice(0);\n  callbacks.length = 0;\n  for (var i = 0; i < copies.length; i++) {\n    copies[i]();\n  }\n}\n\n// Here we have async deferring wrappers using microtasks.\n// In 2.5 we used (macro) tasks (in combination with microtasks).\n// However, it has subtle problems when state is changed right before repaint\n// (e.g. #6813, out-in transitions).\n// Also, using (macro) tasks in event handler would cause some weird behaviors\n// that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109).\n// So we now use microtasks everywhere, again.\n// A major drawback of this tradeoff is that there are some scenarios\n// where microtasks have too high a priority and fire in between supposedly\n// sequential events (e.g. #4521, #6690, which have workarounds)\n// or even between bubbling of the same event (#6566).\nvar timerFunc;\n\n// The nextTick behavior leverages the microtask queue, which can be accessed\n// via either native Promise.then or MutationObserver.\n// MutationObserver has wider support, however it is seriously bugged in\n// UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It\n// completely stops working after triggering a few times... so, if native\n// Promise is available, we will use it:\n/* istanbul ignore next, $flow-disable-line */\nif (typeof Promise !== 'undefined' && isNative(Promise)) {\n  var p = Promise.resolve();\n  timerFunc = function () {\n    p.then(flushCallbacks);\n    // In problematic UIWebViews, Promise.then doesn't completely break, but\n    // it can get stuck in a weird state where callbacks are pushed into the\n    // microtask queue but the queue isn't being flushed, until the browser\n    // needs to do some other work, e.g. handle a timer. Therefore we can\n    // \"force\" the microtask queue to be flushed by adding an empty timer.\n    if (isIOS) { setTimeout(noop); }\n  };\n  isUsingMicroTask = true;\n} else if (!isIE && typeof MutationObserver !== 'undefined' && (\n  isNative(MutationObserver) ||\n  // PhantomJS and iOS 7.x\n  MutationObserver.toString() === '[object MutationObserverConstructor]'\n)) {\n  // Use MutationObserver where native Promise is not available,\n  // e.g. PhantomJS, iOS7, Android 4.4\n  // (#6466 MutationObserver is unreliable in IE11)\n  var counter = 1;\n  var observer = new MutationObserver(flushCallbacks);\n  var textNode = document.createTextNode(String(counter));\n  observer.observe(textNode, {\n    characterData: true\n  });\n  timerFunc = function () {\n    counter = (counter + 1) % 2;\n    textNode.data = String(counter);\n  };\n  isUsingMicroTask = true;\n} else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) {\n  // Fallback to setImmediate.\n  // Technically it leverages the (macro) task queue,\n  // but it is still a better choice than setTimeout.\n  timerFunc = function () {\n    setImmediate(flushCallbacks);\n  };\n} else {\n  // Fallback to setTimeout.\n  timerFunc = function () {\n    setTimeout(flushCallbacks, 0);\n  };\n}\n\nfunction nextTick (cb, ctx) {\n  var _resolve;\n  callbacks.push(function () {\n    if (cb) {\n      try {\n        cb.call(ctx);\n      } catch (e) {\n        handleError(e, ctx, 'nextTick');\n      }\n    } else if (_resolve) {\n      _resolve(ctx);\n    }\n  });\n  if (!pending) {\n    pending = true;\n    timerFunc();\n  }\n  // $flow-disable-line\n  if (!cb && typeof Promise !== 'undefined') {\n    return new Promise(function (resolve) {\n      _resolve = resolve;\n    })\n  }\n}\n\n/*  */\n\nvar mark;\nvar measure;\n\nif (true) {\n  var perf = inBrowser && window.performance;\n  /* istanbul ignore if */\n  if (\n    perf &&\n    perf.mark &&\n    perf.measure &&\n    perf.clearMarks &&\n    perf.clearMeasures\n  ) {\n    mark = function (tag) { return perf.mark(tag); };\n    measure = function (name, startTag, endTag) {\n      perf.measure(name, startTag, endTag);\n      perf.clearMarks(startTag);\n      perf.clearMarks(endTag);\n      // perf.clearMeasures(name)\n    };\n  }\n}\n\n/* not type checking this file because flow doesn't play well with Proxy */\n\nvar initProxy;\n\nif (true) {\n  var allowedGlobals = makeMap(\n    'Infinity,undefined,NaN,isFinite,isNaN,' +\n    'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +\n    'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,' +\n    'require' // for Webpack/Browserify\n  );\n\n  var warnNonPresent = function (target, key) {\n    warn(\n      \"Property or method \\\"\" + key + \"\\\" is not defined on the instance but \" +\n      'referenced during render. Make sure that this property is reactive, ' +\n      'either in the data option, or for class-based components, by ' +\n      'initializing the property. ' +\n      'See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.',\n      target\n    );\n  };\n\n  var warnReservedPrefix = function (target, key) {\n    warn(\n      \"Property \\\"\" + key + \"\\\" must be accessed with \\\"$data.\" + key + \"\\\" because \" +\n      'properties starting with \"$\" or \"_\" are not proxied in the Vue instance to ' +\n      'prevent conflicts with Vue internals. ' +\n      'See: https://vuejs.org/v2/api/#data',\n      target\n    );\n  };\n\n  var hasProxy =\n    typeof Proxy !== 'undefined' && isNative(Proxy);\n\n  if (hasProxy) {\n    var isBuiltInModifier = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact');\n    config.keyCodes = new Proxy(config.keyCodes, {\n      set: function set (target, key, value) {\n        if (isBuiltInModifier(key)) {\n          warn((\"Avoid overwriting built-in modifier in config.keyCodes: .\" + key));\n          return false\n        } else {\n          target[key] = value;\n          return true\n        }\n      }\n    });\n  }\n\n  var hasHandler = {\n    has: function has (target, key) {\n      var has = key in target;\n      var isAllowed = allowedGlobals(key) ||\n        (typeof key === 'string' && key.charAt(0) === '_' && !(key in target.$data));\n      if (!has && !isAllowed) {\n        if (key in target.$data) { warnReservedPrefix(target, key); }\n        else { warnNonPresent(target, key); }\n      }\n      return has || !isAllowed\n    }\n  };\n\n  var getHandler = {\n    get: function get (target, key) {\n      if (typeof key === 'string' && !(key in target)) {\n        if (key in target.$data) { warnReservedPrefix(target, key); }\n        else { warnNonPresent(target, key); }\n      }\n      return target[key]\n    }\n  };\n\n  initProxy = function initProxy (vm) {\n    if (hasProxy) {\n      // determine which proxy handler to use\n      var options = vm.$options;\n      var handlers = options.render && options.render._withStripped\n        ? getHandler\n        : hasHandler;\n      vm._renderProxy = new Proxy(vm, handlers);\n    } else {\n      vm._renderProxy = vm;\n    }\n  };\n}\n\n/*  */\n\nvar seenObjects = new _Set();\n\n/**\n * Recursively traverse an object to evoke all converted\n * getters, so that every nested property inside the object\n * is collected as a \"deep\" dependency.\n */\nfunction traverse (val) {\n  _traverse(val, seenObjects);\n  seenObjects.clear();\n}\n\nfunction _traverse (val, seen) {\n  var i, keys;\n  var isA = Array.isArray(val);\n  if ((!isA && !isObject(val)) || Object.isFrozen(val) || val instanceof VNode) {\n    return\n  }\n  if (val.__ob__) {\n    var depId = val.__ob__.dep.id;\n    if (seen.has(depId)) {\n      return\n    }\n    seen.add(depId);\n  }\n  if (isA) {\n    i = val.length;\n    while (i--) { _traverse(val[i], seen); }\n  } else {\n    keys = Object.keys(val);\n    i = keys.length;\n    while (i--) { _traverse(val[keys[i]], seen); }\n  }\n}\n\n/*  */\n\nvar normalizeEvent = cached(function (name) {\n  var passive = name.charAt(0) === '&';\n  name = passive ? name.slice(1) : name;\n  var once$$1 = name.charAt(0) === '~'; // Prefixed last, checked first\n  name = once$$1 ? name.slice(1) : name;\n  var capture = name.charAt(0) === '!';\n  name = capture ? name.slice(1) : name;\n  return {\n    name: name,\n    once: once$$1,\n    capture: capture,\n    passive: passive\n  }\n});\n\nfunction createFnInvoker (fns, vm) {\n  function invoker () {\n    var arguments$1 = arguments;\n\n    var fns = invoker.fns;\n    if (Array.isArray(fns)) {\n      var cloned = fns.slice();\n      for (var i = 0; i < cloned.length; i++) {\n        invokeWithErrorHandling(cloned[i], null, arguments$1, vm, \"v-on handler\");\n      }\n    } else {\n      // return handler return value for single handlers\n      return invokeWithErrorHandling(fns, null, arguments, vm, \"v-on handler\")\n    }\n  }\n  invoker.fns = fns;\n  return invoker\n}\n\nfunction updateListeners (\n  on,\n  oldOn,\n  add,\n  remove$$1,\n  createOnceHandler,\n  vm\n) {\n  var name, def$$1, cur, old, event;\n  for (name in on) {\n    def$$1 = cur = on[name];\n    old = oldOn[name];\n    event = normalizeEvent(name);\n    if (isUndef(cur)) {\n       true && warn(\n        \"Invalid handler for event \\\"\" + (event.name) + \"\\\": got \" + String(cur),\n        vm\n      );\n    } else if (isUndef(old)) {\n      if (isUndef(cur.fns)) {\n        cur = on[name] = createFnInvoker(cur, vm);\n      }\n      if (isTrue(event.once)) {\n        cur = on[name] = createOnceHandler(event.name, cur, event.capture);\n      }\n      add(event.name, cur, event.capture, event.passive, event.params);\n    } else if (cur !== old) {\n      old.fns = cur;\n      on[name] = old;\n    }\n  }\n  for (name in oldOn) {\n    if (isUndef(on[name])) {\n      event = normalizeEvent(name);\n      remove$$1(event.name, oldOn[name], event.capture);\n    }\n  }\n}\n\n/*  */\n\nfunction mergeVNodeHook (def, hookKey, hook) {\n  if (def instanceof VNode) {\n    def = def.data.hook || (def.data.hook = {});\n  }\n  var invoker;\n  var oldHook = def[hookKey];\n\n  function wrappedHook () {\n    hook.apply(this, arguments);\n    // important: remove merged hook to ensure it's called only once\n    // and prevent memory leak\n    remove(invoker.fns, wrappedHook);\n  }\n\n  if (isUndef(oldHook)) {\n    // no existing hook\n    invoker = createFnInvoker([wrappedHook]);\n  } else {\n    /* istanbul ignore if */\n    if (isDef(oldHook.fns) && isTrue(oldHook.merged)) {\n      // already a merged invoker\n      invoker = oldHook;\n      invoker.fns.push(wrappedHook);\n    } else {\n      // existing plain hook\n      invoker = createFnInvoker([oldHook, wrappedHook]);\n    }\n  }\n\n  invoker.merged = true;\n  def[hookKey] = invoker;\n}\n\n/*  */\n\nfunction extractPropsFromVNodeData (\n  data,\n  Ctor,\n  tag\n) {\n  // we are only extracting raw values here.\n  // validation and default values are handled in the child\n  // component itself.\n  var propOptions = Ctor.options.props;\n  if (isUndef(propOptions)) {\n    return\n  }\n  var res = {};\n  var attrs = data.attrs;\n  var props = data.props;\n  if (isDef(attrs) || isDef(props)) {\n    for (var key in propOptions) {\n      var altKey = hyphenate(key);\n      if (true) {\n        var keyInLowerCase = key.toLowerCase();\n        if (\n          key !== keyInLowerCase &&\n          attrs && hasOwn(attrs, keyInLowerCase)\n        ) {\n          tip(\n            \"Prop \\\"\" + keyInLowerCase + \"\\\" is passed to component \" +\n            (formatComponentName(tag || Ctor)) + \", but the declared prop name is\" +\n            \" \\\"\" + key + \"\\\". \" +\n            \"Note that HTML attributes are case-insensitive and camelCased \" +\n            \"props need to use their kebab-case equivalents when using in-DOM \" +\n            \"templates. You should probably use \\\"\" + altKey + \"\\\" instead of \\\"\" + key + \"\\\".\"\n          );\n        }\n      }\n      checkProp(res, props, key, altKey, true) ||\n      checkProp(res, attrs, key, altKey, false);\n    }\n  }\n  return res\n}\n\nfunction checkProp (\n  res,\n  hash,\n  key,\n  altKey,\n  preserve\n) {\n  if (isDef(hash)) {\n    if (hasOwn(hash, key)) {\n      res[key] = hash[key];\n      if (!preserve) {\n        delete hash[key];\n      }\n      return true\n    } else if (hasOwn(hash, altKey)) {\n      res[key] = hash[altKey];\n      if (!preserve) {\n        delete hash[altKey];\n      }\n      return true\n    }\n  }\n  return false\n}\n\n/*  */\n\n// The template compiler attempts to minimize the need for normalization by\n// statically analyzing the template at compile time.\n//\n// For plain HTML markup, normalization can be completely skipped because the\n// generated render function is guaranteed to return Array<VNode>. There are\n// two cases where extra normalization is needed:\n\n// 1. When the children contains components - because a functional component\n// may return an Array instead of a single root. In this case, just a simple\n// normalization is needed - if any child is an Array, we flatten the whole\n// thing with Array.prototype.concat. It is guaranteed to be only 1-level deep\n// because functional components already normalize their own children.\nfunction simpleNormalizeChildren (children) {\n  for (var i = 0; i < children.length; i++) {\n    if (Array.isArray(children[i])) {\n      return Array.prototype.concat.apply([], children)\n    }\n  }\n  return children\n}\n\n// 2. When the children contains constructs that always generated nested Arrays,\n// e.g. <template>, <slot>, v-for, or when the children is provided by user\n// with hand-written render functions / JSX. In such cases a full normalization\n// is needed to cater to all possible types of children values.\nfunction normalizeChildren (children) {\n  return isPrimitive(children)\n    ? [createTextVNode(children)]\n    : Array.isArray(children)\n      ? normalizeArrayChildren(children)\n      : undefined\n}\n\nfunction isTextNode (node) {\n  return isDef(node) && isDef(node.text) && isFalse(node.isComment)\n}\n\nfunction normalizeArrayChildren (children, nestedIndex) {\n  var res = [];\n  var i, c, lastIndex, last;\n  for (i = 0; i < children.length; i++) {\n    c = children[i];\n    if (isUndef(c) || typeof c === 'boolean') { continue }\n    lastIndex = res.length - 1;\n    last = res[lastIndex];\n    //  nested\n    if (Array.isArray(c)) {\n      if (c.length > 0) {\n        c = normalizeArrayChildren(c, ((nestedIndex || '') + \"_\" + i));\n        // merge adjacent text nodes\n        if (isTextNode(c[0]) && isTextNode(last)) {\n          res[lastIndex] = createTextVNode(last.text + (c[0]).text);\n          c.shift();\n        }\n        res.push.apply(res, c);\n      }\n    } else if (isPrimitive(c)) {\n      if (isTextNode(last)) {\n        // merge adjacent text nodes\n        // this is necessary for SSR hydration because text nodes are\n        // essentially merged when rendered to HTML strings\n        res[lastIndex] = createTextVNode(last.text + c);\n      } else if (c !== '') {\n        // convert primitive to vnode\n        res.push(createTextVNode(c));\n      }\n    } else {\n      if (isTextNode(c) && isTextNode(last)) {\n        // merge adjacent text nodes\n        res[lastIndex] = createTextVNode(last.text + c.text);\n      } else {\n        // default key for nested array children (likely generated by v-for)\n        if (isTrue(children._isVList) &&\n          isDef(c.tag) &&\n          isUndef(c.key) &&\n          isDef(nestedIndex)) {\n          c.key = \"__vlist\" + nestedIndex + \"_\" + i + \"__\";\n        }\n        res.push(c);\n      }\n    }\n  }\n  return res\n}\n\n/*  */\n\nfunction initProvide (vm) {\n  var provide = vm.$options.provide;\n  if (provide) {\n    vm._provided = typeof provide === 'function'\n      ? provide.call(vm)\n      : provide;\n  }\n}\n\nfunction initInjections (vm) {\n  var result = resolveInject(vm.$options.inject, vm);\n  if (result) {\n    toggleObserving(false);\n    Object.keys(result).forEach(function (key) {\n      /* istanbul ignore else */\n      if (true) {\n        defineReactive$$1(vm, key, result[key], function () {\n          warn(\n            \"Avoid mutating an injected value directly since the changes will be \" +\n            \"overwritten whenever the provided component re-renders. \" +\n            \"injection being mutated: \\\"\" + key + \"\\\"\",\n            vm\n          );\n        });\n      } else {}\n    });\n    toggleObserving(true);\n  }\n}\n\nfunction resolveInject (inject, vm) {\n  if (inject) {\n    // inject is :any because flow is not smart enough to figure out cached\n    var result = Object.create(null);\n    var keys = hasSymbol\n      ? Reflect.ownKeys(inject)\n      : Object.keys(inject);\n\n    for (var i = 0; i < keys.length; i++) {\n      var key = keys[i];\n      // #6574 in case the inject object is observed...\n      if (key === '__ob__') { continue }\n      var provideKey = inject[key].from;\n      var source = vm;\n      while (source) {\n        if (source._provided && hasOwn(source._provided, provideKey)) {\n          result[key] = source._provided[provideKey];\n          break\n        }\n        source = source.$parent;\n      }\n      if (!source) {\n        if ('default' in inject[key]) {\n          var provideDefault = inject[key].default;\n          result[key] = typeof provideDefault === 'function'\n            ? provideDefault.call(vm)\n            : provideDefault;\n        } else if (true) {\n          warn((\"Injection \\\"\" + key + \"\\\" not found\"), vm);\n        }\n      }\n    }\n    return result\n  }\n}\n\n/*  */\n\n\n\n/**\n * Runtime helper for resolving raw children VNodes into a slot object.\n */\nfunction resolveSlots (\n  children,\n  context\n) {\n  if (!children || !children.length) {\n    return {}\n  }\n  var slots = {};\n  for (var i = 0, l = children.length; i < l; i++) {\n    var child = children[i];\n    var data = child.data;\n    // remove slot attribute if the node is resolved as a Vue slot node\n    if (data && data.attrs && data.attrs.slot) {\n      delete data.attrs.slot;\n    }\n    // named slots should only be respected if the vnode was rendered in the\n    // same context.\n    if ((child.context === context || child.fnContext === context) &&\n      data && data.slot != null\n    ) {\n      var name = data.slot;\n      var slot = (slots[name] || (slots[name] = []));\n      if (child.tag === 'template') {\n        slot.push.apply(slot, child.children || []);\n      } else {\n        slot.push(child);\n      }\n    } else {\n      (slots.default || (slots.default = [])).push(child);\n    }\n  }\n  // ignore slots that contains only whitespace\n  for (var name$1 in slots) {\n    if (slots[name$1].every(isWhitespace)) {\n      delete slots[name$1];\n    }\n  }\n  return slots\n}\n\nfunction isWhitespace (node) {\n  return (node.isComment && !node.asyncFactory) || node.text === ' '\n}\n\n/*  */\n\nfunction normalizeScopedSlots (\n  slots,\n  normalSlots,\n  prevSlots\n) {\n  var res;\n  var hasNormalSlots = Object.keys(normalSlots).length > 0;\n  var isStable = slots ? !!slots.$stable : !hasNormalSlots;\n  var key = slots && slots.$key;\n  if (!slots) {\n    res = {};\n  } else if (slots._normalized) {\n    // fast path 1: child component re-render only, parent did not change\n    return slots._normalized\n  } else if (\n    isStable &&\n    prevSlots &&\n    prevSlots !== emptyObject &&\n    key === prevSlots.$key &&\n    !hasNormalSlots &&\n    !prevSlots.$hasNormal\n  ) {\n    // fast path 2: stable scoped slots w/ no normal slots to proxy,\n    // only need to normalize once\n    return prevSlots\n  } else {\n    res = {};\n    for (var key$1 in slots) {\n      if (slots[key$1] && key$1[0] !== '$') {\n        res[key$1] = normalizeScopedSlot(normalSlots, key$1, slots[key$1]);\n      }\n    }\n  }\n  // expose normal slots on scopedSlots\n  for (var key$2 in normalSlots) {\n    if (!(key$2 in res)) {\n      res[key$2] = proxyNormalSlot(normalSlots, key$2);\n    }\n  }\n  // avoriaz seems to mock a non-extensible $scopedSlots object\n  // and when that is passed down this would cause an error\n  if (slots && Object.isExtensible(slots)) {\n    (slots)._normalized = res;\n  }\n  def(res, '$stable', isStable);\n  def(res, '$key', key);\n  def(res, '$hasNormal', hasNormalSlots);\n  return res\n}\n\nfunction normalizeScopedSlot(normalSlots, key, fn) {\n  var normalized = function () {\n    var res = arguments.length ? fn.apply(null, arguments) : fn({});\n    res = res && typeof res === 'object' && !Array.isArray(res)\n      ? [res] // single vnode\n      : normalizeChildren(res);\n    return res && (\n      res.length === 0 ||\n      (res.length === 1 && res[0].isComment) // #9658\n    ) ? undefined\n      : res\n  };\n  // this is a slot using the new v-slot syntax without scope. although it is\n  // compiled as a scoped slot, render fn users would expect it to be present\n  // on this.$slots because the usage is semantically a normal slot.\n  if (fn.proxy) {\n    Object.defineProperty(normalSlots, key, {\n      get: normalized,\n      enumerable: true,\n      configurable: true\n    });\n  }\n  return normalized\n}\n\nfunction proxyNormalSlot(slots, key) {\n  return function () { return slots[key]; }\n}\n\n/*  */\n\n/**\n * Runtime helper for rendering v-for lists.\n */\nfunction renderList (\n  val,\n  render\n) {\n  var ret, i, l, keys, key;\n  if (Array.isArray(val) || typeof val === 'string') {\n    ret = new Array(val.length);\n    for (i = 0, l = val.length; i < l; i++) {\n      ret[i] = render(val[i], i);\n    }\n  } else if (typeof val === 'number') {\n    ret = new Array(val);\n    for (i = 0; i < val; i++) {\n      ret[i] = render(i + 1, i);\n    }\n  } else if (isObject(val)) {\n    if (hasSymbol && val[Symbol.iterator]) {\n      ret = [];\n      var iterator = val[Symbol.iterator]();\n      var result = iterator.next();\n      while (!result.done) {\n        ret.push(render(result.value, ret.length));\n        result = iterator.next();\n      }\n    } else {\n      keys = Object.keys(val);\n      ret = new Array(keys.length);\n      for (i = 0, l = keys.length; i < l; i++) {\n        key = keys[i];\n        ret[i] = render(val[key], key, i);\n      }\n    }\n  }\n  if (!isDef(ret)) {\n    ret = [];\n  }\n  (ret)._isVList = true;\n  return ret\n}\n\n/*  */\n\n/**\n * Runtime helper for rendering <slot>\n */\nfunction renderSlot (\n  name,\n  fallback,\n  props,\n  bindObject\n) {\n  var scopedSlotFn = this.$scopedSlots[name];\n  var nodes;\n  if (scopedSlotFn) { // scoped slot\n    props = props || {};\n    if (bindObject) {\n      if ( true && !isObject(bindObject)) {\n        warn(\n          'slot v-bind without argument expects an Object',\n          this\n        );\n      }\n      props = extend(extend({}, bindObject), props);\n    }\n    nodes = scopedSlotFn(props) || fallback;\n  } else {\n    nodes = this.$slots[name] || fallback;\n  }\n\n  var target = props && props.slot;\n  if (target) {\n    return this.$createElement('template', { slot: target }, nodes)\n  } else {\n    return nodes\n  }\n}\n\n/*  */\n\n/**\n * Runtime helper for resolving filters\n */\nfunction resolveFilter (id) {\n  return resolveAsset(this.$options, 'filters', id, true) || identity\n}\n\n/*  */\n\nfunction isKeyNotMatch (expect, actual) {\n  if (Array.isArray(expect)) {\n    return expect.indexOf(actual) === -1\n  } else {\n    return expect !== actual\n  }\n}\n\n/**\n * Runtime helper for checking keyCodes from config.\n * exposed as Vue.prototype._k\n * passing in eventKeyName as last argument separately for backwards compat\n */\nfunction checkKeyCodes (\n  eventKeyCode,\n  key,\n  builtInKeyCode,\n  eventKeyName,\n  builtInKeyName\n) {\n  var mappedKeyCode = config.keyCodes[key] || builtInKeyCode;\n  if (builtInKeyName && eventKeyName && !config.keyCodes[key]) {\n    return isKeyNotMatch(builtInKeyName, eventKeyName)\n  } else if (mappedKeyCode) {\n    return isKeyNotMatch(mappedKeyCode, eventKeyCode)\n  } else if (eventKeyName) {\n    return hyphenate(eventKeyName) !== key\n  }\n}\n\n/*  */\n\n/**\n * Runtime helper for merging v-bind=\"object\" into a VNode's data.\n */\nfunction bindObjectProps (\n  data,\n  tag,\n  value,\n  asProp,\n  isSync\n) {\n  if (value) {\n    if (!isObject(value)) {\n       true && warn(\n        'v-bind without argument expects an Object or Array value',\n        this\n      );\n    } else {\n      if (Array.isArray(value)) {\n        value = toObject(value);\n      }\n      var hash;\n      var loop = function ( key ) {\n        if (\n          key === 'class' ||\n          key === 'style' ||\n          isReservedAttribute(key)\n        ) {\n          hash = data;\n        } else {\n          var type = data.attrs && data.attrs.type;\n          hash = asProp || config.mustUseProp(tag, type, key)\n            ? data.domProps || (data.domProps = {})\n            : data.attrs || (data.attrs = {});\n        }\n        var camelizedKey = camelize(key);\n        var hyphenatedKey = hyphenate(key);\n        if (!(camelizedKey in hash) && !(hyphenatedKey in hash)) {\n          hash[key] = value[key];\n\n          if (isSync) {\n            var on = data.on || (data.on = {});\n            on[(\"update:\" + key)] = function ($event) {\n              value[key] = $event;\n            };\n          }\n        }\n      };\n\n      for (var key in value) loop( key );\n    }\n  }\n  return data\n}\n\n/*  */\n\n/**\n * Runtime helper for rendering static trees.\n */\nfunction renderStatic (\n  index,\n  isInFor\n) {\n  var cached = this._staticTrees || (this._staticTrees = []);\n  var tree = cached[index];\n  // if has already-rendered static tree and not inside v-for,\n  // we can reuse the same tree.\n  if (tree && !isInFor) {\n    return tree\n  }\n  // otherwise, render a fresh tree.\n  tree = cached[index] = this.$options.staticRenderFns[index].call(\n    this._renderProxy,\n    null,\n    this // for render fns generated for functional component templates\n  );\n  markStatic(tree, (\"__static__\" + index), false);\n  return tree\n}\n\n/**\n * Runtime helper for v-once.\n * Effectively it means marking the node as static with a unique key.\n */\nfunction markOnce (\n  tree,\n  index,\n  key\n) {\n  markStatic(tree, (\"__once__\" + index + (key ? (\"_\" + key) : \"\")), true);\n  return tree\n}\n\nfunction markStatic (\n  tree,\n  key,\n  isOnce\n) {\n  if (Array.isArray(tree)) {\n    for (var i = 0; i < tree.length; i++) {\n      if (tree[i] && typeof tree[i] !== 'string') {\n        markStaticNode(tree[i], (key + \"_\" + i), isOnce);\n      }\n    }\n  } else {\n    markStaticNode(tree, key, isOnce);\n  }\n}\n\nfunction markStaticNode (node, key, isOnce) {\n  node.isStatic = true;\n  node.key = key;\n  node.isOnce = isOnce;\n}\n\n/*  */\n\nfunction bindObjectListeners (data, value) {\n  if (value) {\n    if (!isPlainObject(value)) {\n       true && warn(\n        'v-on without argument expects an Object value',\n        this\n      );\n    } else {\n      var on = data.on = data.on ? extend({}, data.on) : {};\n      for (var key in value) {\n        var existing = on[key];\n        var ours = value[key];\n        on[key] = existing ? [].concat(existing, ours) : ours;\n      }\n    }\n  }\n  return data\n}\n\n/*  */\n\nfunction resolveScopedSlots (\n  fns, // see flow/vnode\n  res,\n  // the following are added in 2.6\n  hasDynamicKeys,\n  contentHashKey\n) {\n  res = res || { $stable: !hasDynamicKeys };\n  for (var i = 0; i < fns.length; i++) {\n    var slot = fns[i];\n    if (Array.isArray(slot)) {\n      resolveScopedSlots(slot, res, hasDynamicKeys);\n    } else if (slot) {\n      // marker for reverse proxying v-slot without scope on this.$slots\n      if (slot.proxy) {\n        slot.fn.proxy = true;\n      }\n      res[slot.key] = slot.fn;\n    }\n  }\n  if (contentHashKey) {\n    (res).$key = contentHashKey;\n  }\n  return res\n}\n\n/*  */\n\nfunction bindDynamicKeys (baseObj, values) {\n  for (var i = 0; i < values.length; i += 2) {\n    var key = values[i];\n    if (typeof key === 'string' && key) {\n      baseObj[values[i]] = values[i + 1];\n    } else if ( true && key !== '' && key !== null) {\n      // null is a special value for explicitly removing a binding\n      warn(\n        (\"Invalid value for dynamic directive argument (expected string or null): \" + key),\n        this\n      );\n    }\n  }\n  return baseObj\n}\n\n// helper to dynamically append modifier runtime markers to event names.\n// ensure only append when value is already string, otherwise it will be cast\n// to string and cause the type check to miss.\nfunction prependModifier (value, symbol) {\n  return typeof value === 'string' ? symbol + value : value\n}\n\n/*  */\n\nfunction installRenderHelpers (target) {\n  target._o = markOnce;\n  target._n = toNumber;\n  target._s = toString;\n  target._l = renderList;\n  target._t = renderSlot;\n  target._q = looseEqual;\n  target._i = looseIndexOf;\n  target._m = renderStatic;\n  target._f = resolveFilter;\n  target._k = checkKeyCodes;\n  target._b = bindObjectProps;\n  target._v = createTextVNode;\n  target._e = createEmptyVNode;\n  target._u = resolveScopedSlots;\n  target._g = bindObjectListeners;\n  target._d = bindDynamicKeys;\n  target._p = prependModifier;\n}\n\n/*  */\n\nfunction FunctionalRenderContext (\n  data,\n  props,\n  children,\n  parent,\n  Ctor\n) {\n  var this$1 = this;\n\n  var options = Ctor.options;\n  // ensure the createElement function in functional components\n  // gets a unique context - this is necessary for correct named slot check\n  var contextVm;\n  if (hasOwn(parent, '_uid')) {\n    contextVm = Object.create(parent);\n    // $flow-disable-line\n    contextVm._original = parent;\n  } else {\n    // the context vm passed in is a functional context as well.\n    // in this case we want to make sure we are able to get a hold to the\n    // real context instance.\n    contextVm = parent;\n    // $flow-disable-line\n    parent = parent._original;\n  }\n  var isCompiled = isTrue(options._compiled);\n  var needNormalization = !isCompiled;\n\n  this.data = data;\n  this.props = props;\n  this.children = children;\n  this.parent = parent;\n  this.listeners = data.on || emptyObject;\n  this.injections = resolveInject(options.inject, parent);\n  this.slots = function () {\n    if (!this$1.$slots) {\n      normalizeScopedSlots(\n        data.scopedSlots,\n        this$1.$slots = resolveSlots(children, parent)\n      );\n    }\n    return this$1.$slots\n  };\n\n  Object.defineProperty(this, 'scopedSlots', ({\n    enumerable: true,\n    get: function get () {\n      return normalizeScopedSlots(data.scopedSlots, this.slots())\n    }\n  }));\n\n  // support for compiled functional template\n  if (isCompiled) {\n    // exposing $options for renderStatic()\n    this.$options = options;\n    // pre-resolve slots for renderSlot()\n    this.$slots = this.slots();\n    this.$scopedSlots = normalizeScopedSlots(data.scopedSlots, this.$slots);\n  }\n\n  if (options._scopeId) {\n    this._c = function (a, b, c, d) {\n      var vnode = createElement(contextVm, a, b, c, d, needNormalization);\n      if (vnode && !Array.isArray(vnode)) {\n        vnode.fnScopeId = options._scopeId;\n        vnode.fnContext = parent;\n      }\n      return vnode\n    };\n  } else {\n    this._c = function (a, b, c, d) { return createElement(contextVm, a, b, c, d, needNormalization); };\n  }\n}\n\ninstallRenderHelpers(FunctionalRenderContext.prototype);\n\nfunction createFunctionalComponent (\n  Ctor,\n  propsData,\n  data,\n  contextVm,\n  children\n) {\n  var options = Ctor.options;\n  var props = {};\n  var propOptions = options.props;\n  if (isDef(propOptions)) {\n    for (var key in propOptions) {\n      props[key] = validateProp(key, propOptions, propsData || emptyObject);\n    }\n  } else {\n    if (isDef(data.attrs)) { mergeProps(props, data.attrs); }\n    if (isDef(data.props)) { mergeProps(props, data.props); }\n  }\n\n  var renderContext = new FunctionalRenderContext(\n    data,\n    props,\n    children,\n    contextVm,\n    Ctor\n  );\n\n  var vnode = options.render.call(null, renderContext._c, renderContext);\n\n  if (vnode instanceof VNode) {\n    return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options, renderContext)\n  } else if (Array.isArray(vnode)) {\n    var vnodes = normalizeChildren(vnode) || [];\n    var res = new Array(vnodes.length);\n    for (var i = 0; i < vnodes.length; i++) {\n      res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options, renderContext);\n    }\n    return res\n  }\n}\n\nfunction cloneAndMarkFunctionalResult (vnode, data, contextVm, options, renderContext) {\n  // #7817 clone node before setting fnContext, otherwise if the node is reused\n  // (e.g. it was from a cached normal slot) the fnContext causes named slots\n  // that should not be matched to match.\n  var clone = cloneVNode(vnode);\n  clone.fnContext = contextVm;\n  clone.fnOptions = options;\n  if (true) {\n    (clone.devtoolsMeta = clone.devtoolsMeta || {}).renderContext = renderContext;\n  }\n  if (data.slot) {\n    (clone.data || (clone.data = {})).slot = data.slot;\n  }\n  return clone\n}\n\nfunction mergeProps (to, from) {\n  for (var key in from) {\n    to[camelize(key)] = from[key];\n  }\n}\n\n/*  */\n\n/*  */\n\n/*  */\n\n/*  */\n\n// inline hooks to be invoked on component VNodes during patch\nvar componentVNodeHooks = {\n  init: function init (vnode, hydrating) {\n    if (\n      vnode.componentInstance &&\n      !vnode.componentInstance._isDestroyed &&\n      vnode.data.keepAlive\n    ) {\n      // kept-alive components, treat as a patch\n      var mountedNode = vnode; // work around flow\n      componentVNodeHooks.prepatch(mountedNode, mountedNode);\n    } else {\n      var child = vnode.componentInstance = createComponentInstanceForVnode(\n        vnode,\n        activeInstance\n      );\n      child.$mount(hydrating ? vnode.elm : undefined, hydrating);\n    }\n  },\n\n  prepatch: function prepatch (oldVnode, vnode) {\n    var options = vnode.componentOptions;\n    var child = vnode.componentInstance = oldVnode.componentInstance;\n    updateChildComponent(\n      child,\n      options.propsData, // updated props\n      options.listeners, // updated listeners\n      vnode, // new parent vnode\n      options.children // new children\n    );\n  },\n\n  insert: function insert (vnode) {\n    var context = vnode.context;\n    var componentInstance = vnode.componentInstance;\n    if (!componentInstance._isMounted) {\n      componentInstance._isMounted = true;\n      callHook(componentInstance, 'mounted');\n    }\n    if (vnode.data.keepAlive) {\n      if (context._isMounted) {\n        // vue-router#1212\n        // During updates, a kept-alive component's child components may\n        // change, so directly walking the tree here may call activated hooks\n        // on incorrect children. Instead we push them into a queue which will\n        // be processed after the whole patch process ended.\n        queueActivatedComponent(componentInstance);\n      } else {\n        activateChildComponent(componentInstance, true /* direct */);\n      }\n    }\n  },\n\n  destroy: function destroy (vnode) {\n    var componentInstance = vnode.componentInstance;\n    if (!componentInstance._isDestroyed) {\n      if (!vnode.data.keepAlive) {\n        componentInstance.$destroy();\n      } else {\n        deactivateChildComponent(componentInstance, true /* direct */);\n      }\n    }\n  }\n};\n\nvar hooksToMerge = Object.keys(componentVNodeHooks);\n\nfunction createComponent (\n  Ctor,\n  data,\n  context,\n  children,\n  tag\n) {\n  if (isUndef(Ctor)) {\n    return\n  }\n\n  var baseCtor = context.$options._base;\n\n  // plain options object: turn it into a constructor\n  if (isObject(Ctor)) {\n    Ctor = baseCtor.extend(Ctor);\n  }\n\n  // if at this stage it's not a constructor or an async component factory,\n  // reject.\n  if (typeof Ctor !== 'function') {\n    if (true) {\n      warn((\"Invalid Component definition: \" + (String(Ctor))), context);\n    }\n    return\n  }\n\n  // async component\n  var asyncFactory;\n  if (isUndef(Ctor.cid)) {\n    asyncFactory = Ctor;\n    Ctor = resolveAsyncComponent(asyncFactory, baseCtor);\n    if (Ctor === undefined) {\n      // return a placeholder node for async component, which is rendered\n      // as a comment node but preserves all the raw information for the node.\n      // the information will be used for async server-rendering and hydration.\n      return createAsyncPlaceholder(\n        asyncFactory,\n        data,\n        context,\n        children,\n        tag\n      )\n    }\n  }\n\n  data = data || {};\n\n  // resolve constructor options in case global mixins are applied after\n  // component constructor creation\n  resolveConstructorOptions(Ctor);\n\n  // transform component v-model data into props & events\n  if (isDef(data.model)) {\n    transformModel(Ctor.options, data);\n  }\n\n  // extract props\n  var propsData = extractPropsFromVNodeData(data, Ctor, tag);\n\n  // functional component\n  if (isTrue(Ctor.options.functional)) {\n    return createFunctionalComponent(Ctor, propsData, data, context, children)\n  }\n\n  // extract listeners, since these needs to be treated as\n  // child component listeners instead of DOM listeners\n  var listeners = data.on;\n  // replace with listeners with .native modifier\n  // so it gets processed during parent component patch.\n  data.on = data.nativeOn;\n\n  if (isTrue(Ctor.options.abstract)) {\n    // abstract components do not keep anything\n    // other than props & listeners & slot\n\n    // work around flow\n    var slot = data.slot;\n    data = {};\n    if (slot) {\n      data.slot = slot;\n    }\n  }\n\n  // install component management hooks onto the placeholder node\n  installComponentHooks(data);\n\n  // return a placeholder vnode\n  var name = Ctor.options.name || tag;\n  var vnode = new VNode(\n    (\"vue-component-\" + (Ctor.cid) + (name ? (\"-\" + name) : '')),\n    data, undefined, undefined, undefined, context,\n    { Ctor: Ctor, propsData: propsData, listeners: listeners, tag: tag, children: children },\n    asyncFactory\n  );\n\n  return vnode\n}\n\nfunction createComponentInstanceForVnode (\n  vnode, // we know it's MountedComponentVNode but flow doesn't\n  parent // activeInstance in lifecycle state\n) {\n  var options = {\n    _isComponent: true,\n    _parentVnode: vnode,\n    parent: parent\n  };\n  // check inline-template render functions\n  var inlineTemplate = vnode.data.inlineTemplate;\n  if (isDef(inlineTemplate)) {\n    options.render = inlineTemplate.render;\n    options.staticRenderFns = inlineTemplate.staticRenderFns;\n  }\n  return new vnode.componentOptions.Ctor(options)\n}\n\nfunction installComponentHooks (data) {\n  var hooks = data.hook || (data.hook = {});\n  for (var i = 0; i < hooksToMerge.length; i++) {\n    var key = hooksToMerge[i];\n    var existing = hooks[key];\n    var toMerge = componentVNodeHooks[key];\n    if (existing !== toMerge && !(existing && existing._merged)) {\n      hooks[key] = existing ? mergeHook$1(toMerge, existing) : toMerge;\n    }\n  }\n}\n\nfunction mergeHook$1 (f1, f2) {\n  var merged = function (a, b) {\n    // flow complains about extra args which is why we use any\n    f1(a, b);\n    f2(a, b);\n  };\n  merged._merged = true;\n  return merged\n}\n\n// transform component v-model info (value and callback) into\n// prop and event handler respectively.\nfunction transformModel (options, data) {\n  var prop = (options.model && options.model.prop) || 'value';\n  var event = (options.model && options.model.event) || 'input'\n  ;(data.attrs || (data.attrs = {}))[prop] = data.model.value;\n  var on = data.on || (data.on = {});\n  var existing = on[event];\n  var callback = data.model.callback;\n  if (isDef(existing)) {\n    if (\n      Array.isArray(existing)\n        ? existing.indexOf(callback) === -1\n        : existing !== callback\n    ) {\n      on[event] = [callback].concat(existing);\n    }\n  } else {\n    on[event] = callback;\n  }\n}\n\n/*  */\n\nvar SIMPLE_NORMALIZE = 1;\nvar ALWAYS_NORMALIZE = 2;\n\n// wrapper function for providing a more flexible interface\n// without getting yelled at by flow\nfunction createElement (\n  context,\n  tag,\n  data,\n  children,\n  normalizationType,\n  alwaysNormalize\n) {\n  if (Array.isArray(data) || isPrimitive(data)) {\n    normalizationType = children;\n    children = data;\n    data = undefined;\n  }\n  if (isTrue(alwaysNormalize)) {\n    normalizationType = ALWAYS_NORMALIZE;\n  }\n  return _createElement(context, tag, data, children, normalizationType)\n}\n\nfunction _createElement (\n  context,\n  tag,\n  data,\n  children,\n  normalizationType\n) {\n  if (isDef(data) && isDef((data).__ob__)) {\n     true && warn(\n      \"Avoid using observed data object as vnode data: \" + (JSON.stringify(data)) + \"\\n\" +\n      'Always create fresh vnode data objects in each render!',\n      context\n    );\n    return createEmptyVNode()\n  }\n  // object syntax in v-bind\n  if (isDef(data) && isDef(data.is)) {\n    tag = data.is;\n  }\n  if (!tag) {\n    // in case of component :is set to falsy value\n    return createEmptyVNode()\n  }\n  // warn against non-primitive key\n  if ( true &&\n    isDef(data) && isDef(data.key) && !isPrimitive(data.key)\n  ) {\n    {\n      warn(\n        'Avoid using non-primitive value as key, ' +\n        'use string/number value instead.',\n        context\n      );\n    }\n  }\n  // support single function children as default scoped slot\n  if (Array.isArray(children) &&\n    typeof children[0] === 'function'\n  ) {\n    data = data || {};\n    data.scopedSlots = { default: children[0] };\n    children.length = 0;\n  }\n  if (normalizationType === ALWAYS_NORMALIZE) {\n    children = normalizeChildren(children);\n  } else if (normalizationType === SIMPLE_NORMALIZE) {\n    children = simpleNormalizeChildren(children);\n  }\n  var vnode, ns;\n  if (typeof tag === 'string') {\n    var Ctor;\n    ns = (context.$vnode && context.$vnode.ns) || config.getTagNamespace(tag);\n    if (config.isReservedTag(tag)) {\n      // platform built-in elements\n      if ( true && isDef(data) && isDef(data.nativeOn)) {\n        warn(\n          (\"The .native modifier for v-on is only valid on components but it was used on <\" + tag + \">.\"),\n          context\n        );\n      }\n      vnode = new VNode(\n        config.parsePlatformTagName(tag), data, children,\n        undefined, undefined, context\n      );\n    } else if ((!data || !data.pre) && isDef(Ctor = resolveAsset(context.$options, 'components', tag))) {\n      // component\n      vnode = createComponent(Ctor, data, context, children, tag);\n    } else {\n      // unknown or unlisted namespaced elements\n      // check at runtime because it may get assigned a namespace when its\n      // parent normalizes children\n      vnode = new VNode(\n        tag, data, children,\n        undefined, undefined, context\n      );\n    }\n  } else {\n    // direct component options / constructor\n    vnode = createComponent(tag, data, context, children);\n  }\n  if (Array.isArray(vnode)) {\n    return vnode\n  } else if (isDef(vnode)) {\n    if (isDef(ns)) { applyNS(vnode, ns); }\n    if (isDef(data)) { registerDeepBindings(data); }\n    return vnode\n  } else {\n    return createEmptyVNode()\n  }\n}\n\nfunction applyNS (vnode, ns, force) {\n  vnode.ns = ns;\n  if (vnode.tag === 'foreignObject') {\n    // use default namespace inside foreignObject\n    ns = undefined;\n    force = true;\n  }\n  if (isDef(vnode.children)) {\n    for (var i = 0, l = vnode.children.length; i < l; i++) {\n      var child = vnode.children[i];\n      if (isDef(child.tag) && (\n        isUndef(child.ns) || (isTrue(force) && child.tag !== 'svg'))) {\n        applyNS(child, ns, force);\n      }\n    }\n  }\n}\n\n// ref #5318\n// necessary to ensure parent re-render when deep bindings like :style and\n// :class are used on slot nodes\nfunction registerDeepBindings (data) {\n  if (isObject(data.style)) {\n    traverse(data.style);\n  }\n  if (isObject(data.class)) {\n    traverse(data.class);\n  }\n}\n\n/*  */\n\nfunction initRender (vm) {\n  vm._vnode = null; // the root of the child tree\n  vm._staticTrees = null; // v-once cached trees\n  var options = vm.$options;\n  var parentVnode = vm.$vnode = options._parentVnode; // the placeholder node in parent tree\n  var renderContext = parentVnode && parentVnode.context;\n  vm.$slots = resolveSlots(options._renderChildren, renderContext);\n  vm.$scopedSlots = emptyObject;\n  // bind the createElement fn to this instance\n  // so that we get proper render context inside it.\n  // args order: tag, data, children, normalizationType, alwaysNormalize\n  // internal version is used by render functions compiled from templates\n  vm._c = function (a, b, c, d) { return createElement(vm, a, b, c, d, false); };\n  // normalization is always applied for the public version, used in\n  // user-written render functions.\n  vm.$createElement = function (a, b, c, d) { return createElement(vm, a, b, c, d, true); };\n\n  // $attrs & $listeners are exposed for easier HOC creation.\n  // they need to be reactive so that HOCs using them are always updated\n  var parentData = parentVnode && parentVnode.data;\n\n  /* istanbul ignore else */\n  if (true) {\n    defineReactive$$1(vm, '$attrs', parentData && parentData.attrs || emptyObject, function () {\n      !isUpdatingChildComponent && warn(\"$attrs is readonly.\", vm);\n    }, true);\n    defineReactive$$1(vm, '$listeners', options._parentListeners || emptyObject, function () {\n      !isUpdatingChildComponent && warn(\"$listeners is readonly.\", vm);\n    }, true);\n  } else {}\n}\n\nvar currentRenderingInstance = null;\n\nfunction renderMixin (Vue) {\n  // install runtime convenience helpers\n  installRenderHelpers(Vue.prototype);\n\n  Vue.prototype.$nextTick = function (fn) {\n    return nextTick(fn, this)\n  };\n\n  Vue.prototype._render = function () {\n    var vm = this;\n    var ref = vm.$options;\n    var render = ref.render;\n    var _parentVnode = ref._parentVnode;\n\n    if (_parentVnode) {\n      vm.$scopedSlots = normalizeScopedSlots(\n        _parentVnode.data.scopedSlots,\n        vm.$slots,\n        vm.$scopedSlots\n      );\n    }\n\n    // set parent vnode. this allows render functions to have access\n    // to the data on the placeholder node.\n    vm.$vnode = _parentVnode;\n    // render self\n    var vnode;\n    try {\n      // There's no need to maintain a stack because all render fns are called\n      // separately from one another. Nested component's render fns are called\n      // when parent component is patched.\n      currentRenderingInstance = vm;\n      vnode = render.call(vm._renderProxy, vm.$createElement);\n    } catch (e) {\n      handleError(e, vm, \"render\");\n      // return error render result,\n      // or previous vnode to prevent render error causing blank component\n      /* istanbul ignore else */\n      if ( true && vm.$options.renderError) {\n        try {\n          vnode = vm.$options.renderError.call(vm._renderProxy, vm.$createElement, e);\n        } catch (e) {\n          handleError(e, vm, \"renderError\");\n          vnode = vm._vnode;\n        }\n      } else {\n        vnode = vm._vnode;\n      }\n    } finally {\n      currentRenderingInstance = null;\n    }\n    // if the returned array contains only a single node, allow it\n    if (Array.isArray(vnode) && vnode.length === 1) {\n      vnode = vnode[0];\n    }\n    // return empty vnode in case the render function errored out\n    if (!(vnode instanceof VNode)) {\n      if ( true && Array.isArray(vnode)) {\n        warn(\n          'Multiple root nodes returned from render function. Render function ' +\n          'should return a single root node.',\n          vm\n        );\n      }\n      vnode = createEmptyVNode();\n    }\n    // set parent\n    vnode.parent = _parentVnode;\n    return vnode\n  };\n}\n\n/*  */\n\nfunction ensureCtor (comp, base) {\n  if (\n    comp.__esModule ||\n    (hasSymbol && comp[Symbol.toStringTag] === 'Module')\n  ) {\n    comp = comp.default;\n  }\n  return isObject(comp)\n    ? base.extend(comp)\n    : comp\n}\n\nfunction createAsyncPlaceholder (\n  factory,\n  data,\n  context,\n  children,\n  tag\n) {\n  var node = createEmptyVNode();\n  node.asyncFactory = factory;\n  node.asyncMeta = { data: data, context: context, children: children, tag: tag };\n  return node\n}\n\nfunction resolveAsyncComponent (\n  factory,\n  baseCtor\n) {\n  if (isTrue(factory.error) && isDef(factory.errorComp)) {\n    return factory.errorComp\n  }\n\n  if (isDef(factory.resolved)) {\n    return factory.resolved\n  }\n\n  var owner = currentRenderingInstance;\n  if (owner && isDef(factory.owners) && factory.owners.indexOf(owner) === -1) {\n    // already pending\n    factory.owners.push(owner);\n  }\n\n  if (isTrue(factory.loading) && isDef(factory.loadingComp)) {\n    return factory.loadingComp\n  }\n\n  if (owner && !isDef(factory.owners)) {\n    var owners = factory.owners = [owner];\n    var sync = true;\n    var timerLoading = null;\n    var timerTimeout = null\n\n    ;(owner).$on('hook:destroyed', function () { return remove(owners, owner); });\n\n    var forceRender = function (renderCompleted) {\n      for (var i = 0, l = owners.length; i < l; i++) {\n        (owners[i]).$forceUpdate();\n      }\n\n      if (renderCompleted) {\n        owners.length = 0;\n        if (timerLoading !== null) {\n          clearTimeout(timerLoading);\n          timerLoading = null;\n        }\n        if (timerTimeout !== null) {\n          clearTimeout(timerTimeout);\n          timerTimeout = null;\n        }\n      }\n    };\n\n    var resolve = once(function (res) {\n      // cache resolved\n      factory.resolved = ensureCtor(res, baseCtor);\n      // invoke callbacks only if this is not a synchronous resolve\n      // (async resolves are shimmed as synchronous during SSR)\n      if (!sync) {\n        forceRender(true);\n      } else {\n        owners.length = 0;\n      }\n    });\n\n    var reject = once(function (reason) {\n       true && warn(\n        \"Failed to resolve async component: \" + (String(factory)) +\n        (reason ? (\"\\nReason: \" + reason) : '')\n      );\n      if (isDef(factory.errorComp)) {\n        factory.error = true;\n        forceRender(true);\n      }\n    });\n\n    var res = factory(resolve, reject);\n\n    if (isObject(res)) {\n      if (isPromise(res)) {\n        // () => Promise\n        if (isUndef(factory.resolved)) {\n          res.then(resolve, reject);\n        }\n      } else if (isPromise(res.component)) {\n        res.component.then(resolve, reject);\n\n        if (isDef(res.error)) {\n          factory.errorComp = ensureCtor(res.error, baseCtor);\n        }\n\n        if (isDef(res.loading)) {\n          factory.loadingComp = ensureCtor(res.loading, baseCtor);\n          if (res.delay === 0) {\n            factory.loading = true;\n          } else {\n            timerLoading = setTimeout(function () {\n              timerLoading = null;\n              if (isUndef(factory.resolved) && isUndef(factory.error)) {\n                factory.loading = true;\n                forceRender(false);\n              }\n            }, res.delay || 200);\n          }\n        }\n\n        if (isDef(res.timeout)) {\n          timerTimeout = setTimeout(function () {\n            timerTimeout = null;\n            if (isUndef(factory.resolved)) {\n              reject(\n                 true\n                  ? (\"timeout (\" + (res.timeout) + \"ms)\")\n                  : 0\n              );\n            }\n          }, res.timeout);\n        }\n      }\n    }\n\n    sync = false;\n    // return in case resolved synchronously\n    return factory.loading\n      ? factory.loadingComp\n      : factory.resolved\n  }\n}\n\n/*  */\n\nfunction isAsyncPlaceholder (node) {\n  return node.isComment && node.asyncFactory\n}\n\n/*  */\n\nfunction getFirstComponentChild (children) {\n  if (Array.isArray(children)) {\n    for (var i = 0; i < children.length; i++) {\n      var c = children[i];\n      if (isDef(c) && (isDef(c.componentOptions) || isAsyncPlaceholder(c))) {\n        return c\n      }\n    }\n  }\n}\n\n/*  */\n\n/*  */\n\nfunction initEvents (vm) {\n  vm._events = Object.create(null);\n  vm._hasHookEvent = false;\n  // init parent attached events\n  var listeners = vm.$options._parentListeners;\n  if (listeners) {\n    updateComponentListeners(vm, listeners);\n  }\n}\n\nvar target;\n\nfunction add (event, fn) {\n  target.$on(event, fn);\n}\n\nfunction remove$1 (event, fn) {\n  target.$off(event, fn);\n}\n\nfunction createOnceHandler (event, fn) {\n  var _target = target;\n  return function onceHandler () {\n    var res = fn.apply(null, arguments);\n    if (res !== null) {\n      _target.$off(event, onceHandler);\n    }\n  }\n}\n\nfunction updateComponentListeners (\n  vm,\n  listeners,\n  oldListeners\n) {\n  target = vm;\n  updateListeners(listeners, oldListeners || {}, add, remove$1, createOnceHandler, vm);\n  target = undefined;\n}\n\nfunction eventsMixin (Vue) {\n  var hookRE = /^hook:/;\n  Vue.prototype.$on = function (event, fn) {\n    var vm = this;\n    if (Array.isArray(event)) {\n      for (var i = 0, l = event.length; i < l; i++) {\n        vm.$on(event[i], fn);\n      }\n    } else {\n      (vm._events[event] || (vm._events[event] = [])).push(fn);\n      // optimize hook:event cost by using a boolean flag marked at registration\n      // instead of a hash lookup\n      if (hookRE.test(event)) {\n        vm._hasHookEvent = true;\n      }\n    }\n    return vm\n  };\n\n  Vue.prototype.$once = function (event, fn) {\n    var vm = this;\n    function on () {\n      vm.$off(event, on);\n      fn.apply(vm, arguments);\n    }\n    on.fn = fn;\n    vm.$on(event, on);\n    return vm\n  };\n\n  Vue.prototype.$off = function (event, fn) {\n    var vm = this;\n    // all\n    if (!arguments.length) {\n      vm._events = Object.create(null);\n      return vm\n    }\n    // array of events\n    if (Array.isArray(event)) {\n      for (var i$1 = 0, l = event.length; i$1 < l; i$1++) {\n        vm.$off(event[i$1], fn);\n      }\n      return vm\n    }\n    // specific event\n    var cbs = vm._events[event];\n    if (!cbs) {\n      return vm\n    }\n    if (!fn) {\n      vm._events[event] = null;\n      return vm\n    }\n    // specific handler\n    var cb;\n    var i = cbs.length;\n    while (i--) {\n      cb = cbs[i];\n      if (cb === fn || cb.fn === fn) {\n        cbs.splice(i, 1);\n        break\n      }\n    }\n    return vm\n  };\n\n  Vue.prototype.$emit = function (event) {\n    var vm = this;\n    if (true) {\n      var lowerCaseEvent = event.toLowerCase();\n      if (lowerCaseEvent !== event && vm._events[lowerCaseEvent]) {\n        tip(\n          \"Event \\\"\" + lowerCaseEvent + \"\\\" is emitted in component \" +\n          (formatComponentName(vm)) + \" but the handler is registered for \\\"\" + event + \"\\\". \" +\n          \"Note that HTML attributes are case-insensitive and you cannot use \" +\n          \"v-on to listen to camelCase events when using in-DOM templates. \" +\n          \"You should probably use \\\"\" + (hyphenate(event)) + \"\\\" instead of \\\"\" + event + \"\\\".\"\n        );\n      }\n    }\n    var cbs = vm._events[event];\n    if (cbs) {\n      cbs = cbs.length > 1 ? toArray(cbs) : cbs;\n      var args = toArray(arguments, 1);\n      var info = \"event handler for \\\"\" + event + \"\\\"\";\n      for (var i = 0, l = cbs.length; i < l; i++) {\n        invokeWithErrorHandling(cbs[i], vm, args, vm, info);\n      }\n    }\n    return vm\n  };\n}\n\n/*  */\n\nvar activeInstance = null;\nvar isUpdatingChildComponent = false;\n\nfunction setActiveInstance(vm) {\n  var prevActiveInstance = activeInstance;\n  activeInstance = vm;\n  return function () {\n    activeInstance = prevActiveInstance;\n  }\n}\n\nfunction initLifecycle (vm) {\n  var options = vm.$options;\n\n  // locate first non-abstract parent\n  var parent = options.parent;\n  if (parent && !options.abstract) {\n    while (parent.$options.abstract && parent.$parent) {\n      parent = parent.$parent;\n    }\n    parent.$children.push(vm);\n  }\n\n  vm.$parent = parent;\n  vm.$root = parent ? parent.$root : vm;\n\n  vm.$children = [];\n  vm.$refs = {};\n\n  vm._watcher = null;\n  vm._inactive = null;\n  vm._directInactive = false;\n  vm._isMounted = false;\n  vm._isDestroyed = false;\n  vm._isBeingDestroyed = false;\n}\n\nfunction lifecycleMixin (Vue) {\n  Vue.prototype._update = function (vnode, hydrating) {\n    var vm = this;\n    var prevEl = vm.$el;\n    var prevVnode = vm._vnode;\n    var restoreActiveInstance = setActiveInstance(vm);\n    vm._vnode = vnode;\n    // Vue.prototype.__patch__ is injected in entry points\n    // based on the rendering backend used.\n    if (!prevVnode) {\n      // initial render\n      vm.$el = vm.__patch__(vm.$el, vnode, hydrating, false /* removeOnly */);\n    } else {\n      // updates\n      vm.$el = vm.__patch__(prevVnode, vnode);\n    }\n    restoreActiveInstance();\n    // update __vue__ reference\n    if (prevEl) {\n      prevEl.__vue__ = null;\n    }\n    if (vm.$el) {\n      vm.$el.__vue__ = vm;\n    }\n    // if parent is an HOC, update its $el as well\n    if (vm.$vnode && vm.$parent && vm.$vnode === vm.$parent._vnode) {\n      vm.$parent.$el = vm.$el;\n    }\n    // updated hook is called by the scheduler to ensure that children are\n    // updated in a parent's updated hook.\n  };\n\n  Vue.prototype.$forceUpdate = function () {\n    var vm = this;\n    if (vm._watcher) {\n      vm._watcher.update();\n    }\n  };\n\n  Vue.prototype.$destroy = function () {\n    var vm = this;\n    if (vm._isBeingDestroyed) {\n      return\n    }\n    callHook(vm, 'beforeDestroy');\n    vm._isBeingDestroyed = true;\n    // remove self from parent\n    var parent = vm.$parent;\n    if (parent && !parent._isBeingDestroyed && !vm.$options.abstract) {\n      remove(parent.$children, vm);\n    }\n    // teardown watchers\n    if (vm._watcher) {\n      vm._watcher.teardown();\n    }\n    var i = vm._watchers.length;\n    while (i--) {\n      vm._watchers[i].teardown();\n    }\n    // remove reference from data ob\n    // frozen object may not have observer.\n    if (vm._data.__ob__) {\n      vm._data.__ob__.vmCount--;\n    }\n    // call the last hook...\n    vm._isDestroyed = true;\n    // invoke destroy hooks on current rendered tree\n    vm.__patch__(vm._vnode, null);\n    // fire destroyed hook\n    callHook(vm, 'destroyed');\n    // turn off all instance listeners.\n    vm.$off();\n    // remove __vue__ reference\n    if (vm.$el) {\n      vm.$el.__vue__ = null;\n    }\n    // release circular reference (#6759)\n    if (vm.$vnode) {\n      vm.$vnode.parent = null;\n    }\n  };\n}\n\nfunction mountComponent (\n  vm,\n  el,\n  hydrating\n) {\n  vm.$el = el;\n  if (!vm.$options.render) {\n    vm.$options.render = createEmptyVNode;\n    if (true) {\n      /* istanbul ignore if */\n      if ((vm.$options.template && vm.$options.template.charAt(0) !== '#') ||\n        vm.$options.el || el) {\n        warn(\n          'You are using the runtime-only build of Vue where the template ' +\n          'compiler is not available. Either pre-compile the templates into ' +\n          'render functions, or use the compiler-included build.',\n          vm\n        );\n      } else {\n        warn(\n          'Failed to mount component: template or render function not defined.',\n          vm\n        );\n      }\n    }\n  }\n  callHook(vm, 'beforeMount');\n\n  var updateComponent;\n  /* istanbul ignore if */\n  if ( true && config.performance && mark) {\n    updateComponent = function () {\n      var name = vm._name;\n      var id = vm._uid;\n      var startTag = \"vue-perf-start:\" + id;\n      var endTag = \"vue-perf-end:\" + id;\n\n      mark(startTag);\n      var vnode = vm._render();\n      mark(endTag);\n      measure((\"vue \" + name + \" render\"), startTag, endTag);\n\n      mark(startTag);\n      vm._update(vnode, hydrating);\n      mark(endTag);\n      measure((\"vue \" + name + \" patch\"), startTag, endTag);\n    };\n  } else {\n    updateComponent = function () {\n      vm._update(vm._render(), hydrating);\n    };\n  }\n\n  // we set this to vm._watcher inside the watcher's constructor\n  // since the watcher's initial patch may call $forceUpdate (e.g. inside child\n  // component's mounted hook), which relies on vm._watcher being already defined\n  new Watcher(vm, updateComponent, noop, {\n    before: function before () {\n      if (vm._isMounted && !vm._isDestroyed) {\n        callHook(vm, 'beforeUpdate');\n      }\n    }\n  }, true /* isRenderWatcher */);\n  hydrating = false;\n\n  // manually mounted instance, call mounted on self\n  // mounted is called for render-created child components in its inserted hook\n  if (vm.$vnode == null) {\n    vm._isMounted = true;\n    callHook(vm, 'mounted');\n  }\n  return vm\n}\n\nfunction updateChildComponent (\n  vm,\n  propsData,\n  listeners,\n  parentVnode,\n  renderChildren\n) {\n  if (true) {\n    isUpdatingChildComponent = true;\n  }\n\n  // determine whether component has slot children\n  // we need to do this before overwriting $options._renderChildren.\n\n  // check if there are dynamic scopedSlots (hand-written or compiled but with\n  // dynamic slot names). Static scoped slots compiled from template has the\n  // \"$stable\" marker.\n  var newScopedSlots = parentVnode.data.scopedSlots;\n  var oldScopedSlots = vm.$scopedSlots;\n  var hasDynamicScopedSlot = !!(\n    (newScopedSlots && !newScopedSlots.$stable) ||\n    (oldScopedSlots !== emptyObject && !oldScopedSlots.$stable) ||\n    (newScopedSlots && vm.$scopedSlots.$key !== newScopedSlots.$key)\n  );\n\n  // Any static slot children from the parent may have changed during parent's\n  // update. Dynamic scoped slots may also have changed. In such cases, a forced\n  // update is necessary to ensure correctness.\n  var needsForceUpdate = !!(\n    renderChildren ||               // has new static slots\n    vm.$options._renderChildren ||  // has old static slots\n    hasDynamicScopedSlot\n  );\n\n  vm.$options._parentVnode = parentVnode;\n  vm.$vnode = parentVnode; // update vm's placeholder node without re-render\n\n  if (vm._vnode) { // update child tree's parent\n    vm._vnode.parent = parentVnode;\n  }\n  vm.$options._renderChildren = renderChildren;\n\n  // update $attrs and $listeners hash\n  // these are also reactive so they may trigger child update if the child\n  // used them during render\n  vm.$attrs = parentVnode.data.attrs || emptyObject;\n  vm.$listeners = listeners || emptyObject;\n\n  // update props\n  if (propsData && vm.$options.props) {\n    toggleObserving(false);\n    var props = vm._props;\n    var propKeys = vm.$options._propKeys || [];\n    for (var i = 0; i < propKeys.length; i++) {\n      var key = propKeys[i];\n      var propOptions = vm.$options.props; // wtf flow?\n      props[key] = validateProp(key, propOptions, propsData, vm);\n    }\n    toggleObserving(true);\n    // keep a copy of raw propsData\n    vm.$options.propsData = propsData;\n  }\n\n  // update listeners\n  listeners = listeners || emptyObject;\n  var oldListeners = vm.$options._parentListeners;\n  vm.$options._parentListeners = listeners;\n  updateComponentListeners(vm, listeners, oldListeners);\n\n  // resolve slots + force update if has children\n  if (needsForceUpdate) {\n    vm.$slots = resolveSlots(renderChildren, parentVnode.context);\n    vm.$forceUpdate();\n  }\n\n  if (true) {\n    isUpdatingChildComponent = false;\n  }\n}\n\nfunction isInInactiveTree (vm) {\n  while (vm && (vm = vm.$parent)) {\n    if (vm._inactive) { return true }\n  }\n  return false\n}\n\nfunction activateChildComponent (vm, direct) {\n  if (direct) {\n    vm._directInactive = false;\n    if (isInInactiveTree(vm)) {\n      return\n    }\n  } else if (vm._directInactive) {\n    return\n  }\n  if (vm._inactive || vm._inactive === null) {\n    vm._inactive = false;\n    for (var i = 0; i < vm.$children.length; i++) {\n      activateChildComponent(vm.$children[i]);\n    }\n    callHook(vm, 'activated');\n  }\n}\n\nfunction deactivateChildComponent (vm, direct) {\n  if (direct) {\n    vm._directInactive = true;\n    if (isInInactiveTree(vm)) {\n      return\n    }\n  }\n  if (!vm._inactive) {\n    vm._inactive = true;\n    for (var i = 0; i < vm.$children.length; i++) {\n      deactivateChildComponent(vm.$children[i]);\n    }\n    callHook(vm, 'deactivated');\n  }\n}\n\nfunction callHook (vm, hook) {\n  // #7573 disable dep collection when invoking lifecycle hooks\n  pushTarget();\n  var handlers = vm.$options[hook];\n  var info = hook + \" hook\";\n  if (handlers) {\n    for (var i = 0, j = handlers.length; i < j; i++) {\n      invokeWithErrorHandling(handlers[i], vm, null, vm, info);\n    }\n  }\n  if (vm._hasHookEvent) {\n    vm.$emit('hook:' + hook);\n  }\n  popTarget();\n}\n\n/*  */\n\nvar MAX_UPDATE_COUNT = 100;\n\nvar queue = [];\nvar activatedChildren = [];\nvar has = {};\nvar circular = {};\nvar waiting = false;\nvar flushing = false;\nvar index = 0;\n\n/**\n * Reset the scheduler's state.\n */\nfunction resetSchedulerState () {\n  index = queue.length = activatedChildren.length = 0;\n  has = {};\n  if (true) {\n    circular = {};\n  }\n  waiting = flushing = false;\n}\n\n// Async edge case #6566 requires saving the timestamp when event listeners are\n// attached. However, calling performance.now() has a perf overhead especially\n// if the page has thousands of event listeners. Instead, we take a timestamp\n// every time the scheduler flushes and use that for all event listeners\n// attached during that flush.\nvar currentFlushTimestamp = 0;\n\n// Async edge case fix requires storing an event listener's attach timestamp.\nvar getNow = Date.now;\n\n// Determine what event timestamp the browser is using. Annoyingly, the\n// timestamp can either be hi-res (relative to page load) or low-res\n// (relative to UNIX epoch), so in order to compare time we have to use the\n// same timestamp type when saving the flush timestamp.\n// All IE versions use low-res event timestamps, and have problematic clock\n// implementations (#9632)\nif (inBrowser && !isIE) {\n  var performance = window.performance;\n  if (\n    performance &&\n    typeof performance.now === 'function' &&\n    getNow() > document.createEvent('Event').timeStamp\n  ) {\n    // if the event timestamp, although evaluated AFTER the Date.now(), is\n    // smaller than it, it means the event is using a hi-res timestamp,\n    // and we need to use the hi-res version for event listener timestamps as\n    // well.\n    getNow = function () { return performance.now(); };\n  }\n}\n\n/**\n * Flush both queues and run the watchers.\n */\nfunction flushSchedulerQueue () {\n  currentFlushTimestamp = getNow();\n  flushing = true;\n  var watcher, id;\n\n  // Sort queue before flush.\n  // This ensures that:\n  // 1. Components are updated from parent to child. (because parent is always\n  //    created before the child)\n  // 2. A component's user watchers are run before its render watcher (because\n  //    user watchers are created before the render watcher)\n  // 3. If a component is destroyed during a parent component's watcher run,\n  //    its watchers can be skipped.\n  queue.sort(function (a, b) { return a.id - b.id; });\n\n  // do not cache length because more watchers might be pushed\n  // as we run existing watchers\n  for (index = 0; index < queue.length; index++) {\n    watcher = queue[index];\n    if (watcher.before) {\n      watcher.before();\n    }\n    id = watcher.id;\n    has[id] = null;\n    watcher.run();\n    // in dev build, check and stop circular updates.\n    if ( true && has[id] != null) {\n      circular[id] = (circular[id] || 0) + 1;\n      if (circular[id] > MAX_UPDATE_COUNT) {\n        warn(\n          'You may have an infinite update loop ' + (\n            watcher.user\n              ? (\"in watcher with expression \\\"\" + (watcher.expression) + \"\\\"\")\n              : \"in a component render function.\"\n          ),\n          watcher.vm\n        );\n        break\n      }\n    }\n  }\n\n  // keep copies of post queues before resetting state\n  var activatedQueue = activatedChildren.slice();\n  var updatedQueue = queue.slice();\n\n  resetSchedulerState();\n\n  // call component updated and activated hooks\n  callActivatedHooks(activatedQueue);\n  callUpdatedHooks(updatedQueue);\n\n  // devtool hook\n  /* istanbul ignore if */\n  if (devtools && config.devtools) {\n    devtools.emit('flush');\n  }\n}\n\nfunction callUpdatedHooks (queue) {\n  var i = queue.length;\n  while (i--) {\n    var watcher = queue[i];\n    var vm = watcher.vm;\n    if (vm._watcher === watcher && vm._isMounted && !vm._isDestroyed) {\n      callHook(vm, 'updated');\n    }\n  }\n}\n\n/**\n * Queue a kept-alive component that was activated during patch.\n * The queue will be processed after the entire tree has been patched.\n */\nfunction queueActivatedComponent (vm) {\n  // setting _inactive to false here so that a render function can\n  // rely on checking whether it's in an inactive tree (e.g. router-view)\n  vm._inactive = false;\n  activatedChildren.push(vm);\n}\n\nfunction callActivatedHooks (queue) {\n  for (var i = 0; i < queue.length; i++) {\n    queue[i]._inactive = true;\n    activateChildComponent(queue[i], true /* true */);\n  }\n}\n\n/**\n * Push a watcher into the watcher queue.\n * Jobs with duplicate IDs will be skipped unless it's\n * pushed when the queue is being flushed.\n */\nfunction queueWatcher (watcher) {\n  var id = watcher.id;\n  if (has[id] == null) {\n    has[id] = true;\n    if (!flushing) {\n      queue.push(watcher);\n    } else {\n      // if already flushing, splice the watcher based on its id\n      // if already past its id, it will be run next immediately.\n      var i = queue.length - 1;\n      while (i > index && queue[i].id > watcher.id) {\n        i--;\n      }\n      queue.splice(i + 1, 0, watcher);\n    }\n    // queue the flush\n    if (!waiting) {\n      waiting = true;\n\n      if ( true && !config.async) {\n        flushSchedulerQueue();\n        return\n      }\n      nextTick(flushSchedulerQueue);\n    }\n  }\n}\n\n/*  */\n\n\n\nvar uid$2 = 0;\n\n/**\n * A watcher parses an expression, collects dependencies,\n * and fires callback when the expression value changes.\n * This is used for both the $watch() api and directives.\n */\nvar Watcher = function Watcher (\n  vm,\n  expOrFn,\n  cb,\n  options,\n  isRenderWatcher\n) {\n  this.vm = vm;\n  if (isRenderWatcher) {\n    vm._watcher = this;\n  }\n  vm._watchers.push(this);\n  // options\n  if (options) {\n    this.deep = !!options.deep;\n    this.user = !!options.user;\n    this.lazy = !!options.lazy;\n    this.sync = !!options.sync;\n    this.before = options.before;\n  } else {\n    this.deep = this.user = this.lazy = this.sync = false;\n  }\n  this.cb = cb;\n  this.id = ++uid$2; // uid for batching\n  this.active = true;\n  this.dirty = this.lazy; // for lazy watchers\n  this.deps = [];\n  this.newDeps = [];\n  this.depIds = new _Set();\n  this.newDepIds = new _Set();\n  this.expression =  true\n    ? expOrFn.toString()\n    : 0;\n  // parse expression for getter\n  if (typeof expOrFn === 'function') {\n    this.getter = expOrFn;\n  } else {\n    this.getter = parsePath(expOrFn);\n    if (!this.getter) {\n      this.getter = noop;\n       true && warn(\n        \"Failed watching path: \\\"\" + expOrFn + \"\\\" \" +\n        'Watcher only accepts simple dot-delimited paths. ' +\n        'For full control, use a function instead.',\n        vm\n      );\n    }\n  }\n  this.value = this.lazy\n    ? undefined\n    : this.get();\n};\n\n/**\n * Evaluate the getter, and re-collect dependencies.\n */\nWatcher.prototype.get = function get () {\n  pushTarget(this);\n  var value;\n  var vm = this.vm;\n  try {\n    value = this.getter.call(vm, vm);\n  } catch (e) {\n    if (this.user) {\n      handleError(e, vm, (\"getter for watcher \\\"\" + (this.expression) + \"\\\"\"));\n    } else {\n      throw e\n    }\n  } finally {\n    // \"touch\" every property so they are all tracked as\n    // dependencies for deep watching\n    if (this.deep) {\n      traverse(value);\n    }\n    popTarget();\n    this.cleanupDeps();\n  }\n  return value\n};\n\n/**\n * Add a dependency to this directive.\n */\nWatcher.prototype.addDep = function addDep (dep) {\n  var id = dep.id;\n  if (!this.newDepIds.has(id)) {\n    this.newDepIds.add(id);\n    this.newDeps.push(dep);\n    if (!this.depIds.has(id)) {\n      dep.addSub(this);\n    }\n  }\n};\n\n/**\n * Clean up for dependency collection.\n */\nWatcher.prototype.cleanupDeps = function cleanupDeps () {\n  var i = this.deps.length;\n  while (i--) {\n    var dep = this.deps[i];\n    if (!this.newDepIds.has(dep.id)) {\n      dep.removeSub(this);\n    }\n  }\n  var tmp = this.depIds;\n  this.depIds = this.newDepIds;\n  this.newDepIds = tmp;\n  this.newDepIds.clear();\n  tmp = this.deps;\n  this.deps = this.newDeps;\n  this.newDeps = tmp;\n  this.newDeps.length = 0;\n};\n\n/**\n * Subscriber interface.\n * Will be called when a dependency changes.\n */\nWatcher.prototype.update = function update () {\n  /* istanbul ignore else */\n  if (this.lazy) {\n    this.dirty = true;\n  } else if (this.sync) {\n    this.run();\n  } else {\n    queueWatcher(this);\n  }\n};\n\n/**\n * Scheduler job interface.\n * Will be called by the scheduler.\n */\nWatcher.prototype.run = function run () {\n  if (this.active) {\n    var value = this.get();\n    if (\n      value !== this.value ||\n      // Deep watchers and watchers on Object/Arrays should fire even\n      // when the value is the same, because the value may\n      // have mutated.\n      isObject(value) ||\n      this.deep\n    ) {\n      // set new value\n      var oldValue = this.value;\n      this.value = value;\n      if (this.user) {\n        try {\n          this.cb.call(this.vm, value, oldValue);\n        } catch (e) {\n          handleError(e, this.vm, (\"callback for watcher \\\"\" + (this.expression) + \"\\\"\"));\n        }\n      } else {\n        this.cb.call(this.vm, value, oldValue);\n      }\n    }\n  }\n};\n\n/**\n * Evaluate the value of the watcher.\n * This only gets called for lazy watchers.\n */\nWatcher.prototype.evaluate = function evaluate () {\n  this.value = this.get();\n  this.dirty = false;\n};\n\n/**\n * Depend on all deps collected by this watcher.\n */\nWatcher.prototype.depend = function depend () {\n  var i = this.deps.length;\n  while (i--) {\n    this.deps[i].depend();\n  }\n};\n\n/**\n * Remove self from all dependencies' subscriber list.\n */\nWatcher.prototype.teardown = function teardown () {\n  if (this.active) {\n    // remove self from vm's watcher list\n    // this is a somewhat expensive operation so we skip it\n    // if the vm is being destroyed.\n    if (!this.vm._isBeingDestroyed) {\n      remove(this.vm._watchers, this);\n    }\n    var i = this.deps.length;\n    while (i--) {\n      this.deps[i].removeSub(this);\n    }\n    this.active = false;\n  }\n};\n\n/*  */\n\nvar sharedPropertyDefinition = {\n  enumerable: true,\n  configurable: true,\n  get: noop,\n  set: noop\n};\n\nfunction proxy (target, sourceKey, key) {\n  sharedPropertyDefinition.get = function proxyGetter () {\n    return this[sourceKey][key]\n  };\n  sharedPropertyDefinition.set = function proxySetter (val) {\n    this[sourceKey][key] = val;\n  };\n  Object.defineProperty(target, key, sharedPropertyDefinition);\n}\n\nfunction initState (vm) {\n  vm._watchers = [];\n  var opts = vm.$options;\n  if (opts.props) { initProps(vm, opts.props); }\n  if (opts.methods) { initMethods(vm, opts.methods); }\n  if (opts.data) {\n    initData(vm);\n  } else {\n    observe(vm._data = {}, true /* asRootData */);\n  }\n  if (opts.computed) { initComputed(vm, opts.computed); }\n  if (opts.watch && opts.watch !== nativeWatch) {\n    initWatch(vm, opts.watch);\n  }\n}\n\nfunction initProps (vm, propsOptions) {\n  var propsData = vm.$options.propsData || {};\n  var props = vm._props = {};\n  // cache prop keys so that future props updates can iterate using Array\n  // instead of dynamic object key enumeration.\n  var keys = vm.$options._propKeys = [];\n  var isRoot = !vm.$parent;\n  // root instance props should be converted\n  if (!isRoot) {\n    toggleObserving(false);\n  }\n  var loop = function ( key ) {\n    keys.push(key);\n    var value = validateProp(key, propsOptions, propsData, vm);\n    /* istanbul ignore else */\n    if (true) {\n      var hyphenatedKey = hyphenate(key);\n      if (isReservedAttribute(hyphenatedKey) ||\n          config.isReservedAttr(hyphenatedKey)) {\n        warn(\n          (\"\\\"\" + hyphenatedKey + \"\\\" is a reserved attribute and cannot be used as component prop.\"),\n          vm\n        );\n      }\n      defineReactive$$1(props, key, value, function () {\n        if (!isRoot && !isUpdatingChildComponent) {\n          warn(\n            \"Avoid mutating a prop directly since the value will be \" +\n            \"overwritten whenever the parent component re-renders. \" +\n            \"Instead, use a data or computed property based on the prop's \" +\n            \"value. Prop being mutated: \\\"\" + key + \"\\\"\",\n            vm\n          );\n        }\n      });\n    } else {}\n    // static props are already proxied on the component's prototype\n    // during Vue.extend(). We only need to proxy props defined at\n    // instantiation here.\n    if (!(key in vm)) {\n      proxy(vm, \"_props\", key);\n    }\n  };\n\n  for (var key in propsOptions) loop( key );\n  toggleObserving(true);\n}\n\nfunction initData (vm) {\n  var data = vm.$options.data;\n  data = vm._data = typeof data === 'function'\n    ? getData(data, vm)\n    : data || {};\n  if (!isPlainObject(data)) {\n    data = {};\n     true && warn(\n      'data functions should return an object:\\n' +\n      'https://vuejs.org/v2/guide/components.html#data-Must-Be-a-Function',\n      vm\n    );\n  }\n  // proxy data on instance\n  var keys = Object.keys(data);\n  var props = vm.$options.props;\n  var methods = vm.$options.methods;\n  var i = keys.length;\n  while (i--) {\n    var key = keys[i];\n    if (true) {\n      if (methods && hasOwn(methods, key)) {\n        warn(\n          (\"Method \\\"\" + key + \"\\\" has already been defined as a data property.\"),\n          vm\n        );\n      }\n    }\n    if (props && hasOwn(props, key)) {\n       true && warn(\n        \"The data property \\\"\" + key + \"\\\" is already declared as a prop. \" +\n        \"Use prop default value instead.\",\n        vm\n      );\n    } else if (!isReserved(key)) {\n      proxy(vm, \"_data\", key);\n    }\n  }\n  // observe data\n  observe(data, true /* asRootData */);\n}\n\nfunction getData (data, vm) {\n  // #7573 disable dep collection when invoking data getters\n  pushTarget();\n  try {\n    return data.call(vm, vm)\n  } catch (e) {\n    handleError(e, vm, \"data()\");\n    return {}\n  } finally {\n    popTarget();\n  }\n}\n\nvar computedWatcherOptions = { lazy: true };\n\nfunction initComputed (vm, computed) {\n  // $flow-disable-line\n  var watchers = vm._computedWatchers = Object.create(null);\n  // computed properties are just getters during SSR\n  var isSSR = isServerRendering();\n\n  for (var key in computed) {\n    var userDef = computed[key];\n    var getter = typeof userDef === 'function' ? userDef : userDef.get;\n    if ( true && getter == null) {\n      warn(\n        (\"Getter is missing for computed property \\\"\" + key + \"\\\".\"),\n        vm\n      );\n    }\n\n    if (!isSSR) {\n      // create internal watcher for the computed property.\n      watchers[key] = new Watcher(\n        vm,\n        getter || noop,\n        noop,\n        computedWatcherOptions\n      );\n    }\n\n    // component-defined computed properties are already defined on the\n    // component prototype. We only need to define computed properties defined\n    // at instantiation here.\n    if (!(key in vm)) {\n      defineComputed(vm, key, userDef);\n    } else if (true) {\n      if (key in vm.$data) {\n        warn((\"The computed property \\\"\" + key + \"\\\" is already defined in data.\"), vm);\n      } else if (vm.$options.props && key in vm.$options.props) {\n        warn((\"The computed property \\\"\" + key + \"\\\" is already defined as a prop.\"), vm);\n      }\n    }\n  }\n}\n\nfunction defineComputed (\n  target,\n  key,\n  userDef\n) {\n  var shouldCache = !isServerRendering();\n  if (typeof userDef === 'function') {\n    sharedPropertyDefinition.get = shouldCache\n      ? createComputedGetter(key)\n      : createGetterInvoker(userDef);\n    sharedPropertyDefinition.set = noop;\n  } else {\n    sharedPropertyDefinition.get = userDef.get\n      ? shouldCache && userDef.cache !== false\n        ? createComputedGetter(key)\n        : createGetterInvoker(userDef.get)\n      : noop;\n    sharedPropertyDefinition.set = userDef.set || noop;\n  }\n  if ( true &&\n      sharedPropertyDefinition.set === noop) {\n    sharedPropertyDefinition.set = function () {\n      warn(\n        (\"Computed property \\\"\" + key + \"\\\" was assigned to but it has no setter.\"),\n        this\n      );\n    };\n  }\n  Object.defineProperty(target, key, sharedPropertyDefinition);\n}\n\nfunction createComputedGetter (key) {\n  return function computedGetter () {\n    var watcher = this._computedWatchers && this._computedWatchers[key];\n    if (watcher) {\n      if (watcher.dirty) {\n        watcher.evaluate();\n      }\n      if (Dep.target) {\n        watcher.depend();\n      }\n      return watcher.value\n    }\n  }\n}\n\nfunction createGetterInvoker(fn) {\n  return function computedGetter () {\n    return fn.call(this, this)\n  }\n}\n\nfunction initMethods (vm, methods) {\n  var props = vm.$options.props;\n  for (var key in methods) {\n    if (true) {\n      if (typeof methods[key] !== 'function') {\n        warn(\n          \"Method \\\"\" + key + \"\\\" has type \\\"\" + (typeof methods[key]) + \"\\\" in the component definition. \" +\n          \"Did you reference the function correctly?\",\n          vm\n        );\n      }\n      if (props && hasOwn(props, key)) {\n        warn(\n          (\"Method \\\"\" + key + \"\\\" has already been defined as a prop.\"),\n          vm\n        );\n      }\n      if ((key in vm) && isReserved(key)) {\n        warn(\n          \"Method \\\"\" + key + \"\\\" conflicts with an existing Vue instance method. \" +\n          \"Avoid defining component methods that start with _ or $.\"\n        );\n      }\n    }\n    vm[key] = typeof methods[key] !== 'function' ? noop : bind(methods[key], vm);\n  }\n}\n\nfunction initWatch (vm, watch) {\n  for (var key in watch) {\n    var handler = watch[key];\n    if (Array.isArray(handler)) {\n      for (var i = 0; i < handler.length; i++) {\n        createWatcher(vm, key, handler[i]);\n      }\n    } else {\n      createWatcher(vm, key, handler);\n    }\n  }\n}\n\nfunction createWatcher (\n  vm,\n  expOrFn,\n  handler,\n  options\n) {\n  if (isPlainObject(handler)) {\n    options = handler;\n    handler = handler.handler;\n  }\n  if (typeof handler === 'string') {\n    handler = vm[handler];\n  }\n  return vm.$watch(expOrFn, handler, options)\n}\n\nfunction stateMixin (Vue) {\n  // flow somehow has problems with directly declared definition object\n  // when using Object.defineProperty, so we have to procedurally build up\n  // the object here.\n  var dataDef = {};\n  dataDef.get = function () { return this._data };\n  var propsDef = {};\n  propsDef.get = function () { return this._props };\n  if (true) {\n    dataDef.set = function () {\n      warn(\n        'Avoid replacing instance root $data. ' +\n        'Use nested data properties instead.',\n        this\n      );\n    };\n    propsDef.set = function () {\n      warn(\"$props is readonly.\", this);\n    };\n  }\n  Object.defineProperty(Vue.prototype, '$data', dataDef);\n  Object.defineProperty(Vue.prototype, '$props', propsDef);\n\n  Vue.prototype.$set = set;\n  Vue.prototype.$delete = del;\n\n  Vue.prototype.$watch = function (\n    expOrFn,\n    cb,\n    options\n  ) {\n    var vm = this;\n    if (isPlainObject(cb)) {\n      return createWatcher(vm, expOrFn, cb, options)\n    }\n    options = options || {};\n    options.user = true;\n    var watcher = new Watcher(vm, expOrFn, cb, options);\n    if (options.immediate) {\n      try {\n        cb.call(vm, watcher.value);\n      } catch (error) {\n        handleError(error, vm, (\"callback for immediate watcher \\\"\" + (watcher.expression) + \"\\\"\"));\n      }\n    }\n    return function unwatchFn () {\n      watcher.teardown();\n    }\n  };\n}\n\n/*  */\n\nvar uid$3 = 0;\n\nfunction initMixin (Vue) {\n  Vue.prototype._init = function (options) {\n    var vm = this;\n    // a uid\n    vm._uid = uid$3++;\n\n    var startTag, endTag;\n    /* istanbul ignore if */\n    if ( true && config.performance && mark) {\n      startTag = \"vue-perf-start:\" + (vm._uid);\n      endTag = \"vue-perf-end:\" + (vm._uid);\n      mark(startTag);\n    }\n\n    // a flag to avoid this being observed\n    vm._isVue = true;\n    // merge options\n    if (options && options._isComponent) {\n      // optimize internal component instantiation\n      // since dynamic options merging is pretty slow, and none of the\n      // internal component options needs special treatment.\n      initInternalComponent(vm, options);\n    } else {\n      vm.$options = mergeOptions(\n        resolveConstructorOptions(vm.constructor),\n        options || {},\n        vm\n      );\n    }\n    /* istanbul ignore else */\n    if (true) {\n      initProxy(vm);\n    } else {}\n    // expose real self\n    vm._self = vm;\n    initLifecycle(vm);\n    initEvents(vm);\n    initRender(vm);\n    callHook(vm, 'beforeCreate');\n    initInjections(vm); // resolve injections before data/props\n    initState(vm);\n    initProvide(vm); // resolve provide after data/props\n    callHook(vm, 'created');\n\n    /* istanbul ignore if */\n    if ( true && config.performance && mark) {\n      vm._name = formatComponentName(vm, false);\n      mark(endTag);\n      measure((\"vue \" + (vm._name) + \" init\"), startTag, endTag);\n    }\n\n    if (vm.$options.el) {\n      vm.$mount(vm.$options.el);\n    }\n  };\n}\n\nfunction initInternalComponent (vm, options) {\n  var opts = vm.$options = Object.create(vm.constructor.options);\n  // doing this because it's faster than dynamic enumeration.\n  var parentVnode = options._parentVnode;\n  opts.parent = options.parent;\n  opts._parentVnode = parentVnode;\n\n  var vnodeComponentOptions = parentVnode.componentOptions;\n  opts.propsData = vnodeComponentOptions.propsData;\n  opts._parentListeners = vnodeComponentOptions.listeners;\n  opts._renderChildren = vnodeComponentOptions.children;\n  opts._componentTag = vnodeComponentOptions.tag;\n\n  if (options.render) {\n    opts.render = options.render;\n    opts.staticRenderFns = options.staticRenderFns;\n  }\n}\n\nfunction resolveConstructorOptions (Ctor) {\n  var options = Ctor.options;\n  if (Ctor.super) {\n    var superOptions = resolveConstructorOptions(Ctor.super);\n    var cachedSuperOptions = Ctor.superOptions;\n    if (superOptions !== cachedSuperOptions) {\n      // super option changed,\n      // need to resolve new options.\n      Ctor.superOptions = superOptions;\n      // check if there are any late-modified/attached options (#4976)\n      var modifiedOptions = resolveModifiedOptions(Ctor);\n      // update base extend options\n      if (modifiedOptions) {\n        extend(Ctor.extendOptions, modifiedOptions);\n      }\n      options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions);\n      if (options.name) {\n        options.components[options.name] = Ctor;\n      }\n    }\n  }\n  return options\n}\n\nfunction resolveModifiedOptions (Ctor) {\n  var modified;\n  var latest = Ctor.options;\n  var sealed = Ctor.sealedOptions;\n  for (var key in latest) {\n    if (latest[key] !== sealed[key]) {\n      if (!modified) { modified = {}; }\n      modified[key] = latest[key];\n    }\n  }\n  return modified\n}\n\nfunction Vue (options) {\n  if ( true &&\n    !(this instanceof Vue)\n  ) {\n    warn('Vue is a constructor and should be called with the `new` keyword');\n  }\n  this._init(options);\n}\n\ninitMixin(Vue);\nstateMixin(Vue);\neventsMixin(Vue);\nlifecycleMixin(Vue);\nrenderMixin(Vue);\n\n/*  */\n\nfunction initUse (Vue) {\n  Vue.use = function (plugin) {\n    var installedPlugins = (this._installedPlugins || (this._installedPlugins = []));\n    if (installedPlugins.indexOf(plugin) > -1) {\n      return this\n    }\n\n    // additional parameters\n    var args = toArray(arguments, 1);\n    args.unshift(this);\n    if (typeof plugin.install === 'function') {\n      plugin.install.apply(plugin, args);\n    } else if (typeof plugin === 'function') {\n      plugin.apply(null, args);\n    }\n    installedPlugins.push(plugin);\n    return this\n  };\n}\n\n/*  */\n\nfunction initMixin$1 (Vue) {\n  Vue.mixin = function (mixin) {\n    this.options = mergeOptions(this.options, mixin);\n    return this\n  };\n}\n\n/*  */\n\nfunction initExtend (Vue) {\n  /**\n   * Each instance constructor, including Vue, has a unique\n   * cid. This enables us to create wrapped \"child\n   * constructors\" for prototypal inheritance and cache them.\n   */\n  Vue.cid = 0;\n  var cid = 1;\n\n  /**\n   * Class inheritance\n   */\n  Vue.extend = function (extendOptions) {\n    extendOptions = extendOptions || {};\n    var Super = this;\n    var SuperId = Super.cid;\n    var cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {});\n    if (cachedCtors[SuperId]) {\n      return cachedCtors[SuperId]\n    }\n\n    var name = extendOptions.name || Super.options.name;\n    if ( true && name) {\n      validateComponentName(name);\n    }\n\n    var Sub = function VueComponent (options) {\n      this._init(options);\n    };\n    Sub.prototype = Object.create(Super.prototype);\n    Sub.prototype.constructor = Sub;\n    Sub.cid = cid++;\n    Sub.options = mergeOptions(\n      Super.options,\n      extendOptions\n    );\n    Sub['super'] = Super;\n\n    // For props and computed properties, we define the proxy getters on\n    // the Vue instances at extension time, on the extended prototype. This\n    // avoids Object.defineProperty calls for each instance created.\n    if (Sub.options.props) {\n      initProps$1(Sub);\n    }\n    if (Sub.options.computed) {\n      initComputed$1(Sub);\n    }\n\n    // allow further extension/mixin/plugin usage\n    Sub.extend = Super.extend;\n    Sub.mixin = Super.mixin;\n    Sub.use = Super.use;\n\n    // create asset registers, so extended classes\n    // can have their private assets too.\n    ASSET_TYPES.forEach(function (type) {\n      Sub[type] = Super[type];\n    });\n    // enable recursive self-lookup\n    if (name) {\n      Sub.options.components[name] = Sub;\n    }\n\n    // keep a reference to the super options at extension time.\n    // later at instantiation we can check if Super's options have\n    // been updated.\n    Sub.superOptions = Super.options;\n    Sub.extendOptions = extendOptions;\n    Sub.sealedOptions = extend({}, Sub.options);\n\n    // cache constructor\n    cachedCtors[SuperId] = Sub;\n    return Sub\n  };\n}\n\nfunction initProps$1 (Comp) {\n  var props = Comp.options.props;\n  for (var key in props) {\n    proxy(Comp.prototype, \"_props\", key);\n  }\n}\n\nfunction initComputed$1 (Comp) {\n  var computed = Comp.options.computed;\n  for (var key in computed) {\n    defineComputed(Comp.prototype, key, computed[key]);\n  }\n}\n\n/*  */\n\nfunction initAssetRegisters (Vue) {\n  /**\n   * Create asset registration methods.\n   */\n  ASSET_TYPES.forEach(function (type) {\n    Vue[type] = function (\n      id,\n      definition\n    ) {\n      if (!definition) {\n        return this.options[type + 's'][id]\n      } else {\n        /* istanbul ignore if */\n        if ( true && type === 'component') {\n          validateComponentName(id);\n        }\n        if (type === 'component' && isPlainObject(definition)) {\n          definition.name = definition.name || id;\n          definition = this.options._base.extend(definition);\n        }\n        if (type === 'directive' && typeof definition === 'function') {\n          definition = { bind: definition, update: definition };\n        }\n        this.options[type + 's'][id] = definition;\n        return definition\n      }\n    };\n  });\n}\n\n/*  */\n\n\n\nfunction getComponentName (opts) {\n  return opts && (opts.Ctor.options.name || opts.tag)\n}\n\nfunction matches (pattern, name) {\n  if (Array.isArray(pattern)) {\n    return pattern.indexOf(name) > -1\n  } else if (typeof pattern === 'string') {\n    return pattern.split(',').indexOf(name) > -1\n  } else if (isRegExp(pattern)) {\n    return pattern.test(name)\n  }\n  /* istanbul ignore next */\n  return false\n}\n\nfunction pruneCache (keepAliveInstance, filter) {\n  var cache = keepAliveInstance.cache;\n  var keys = keepAliveInstance.keys;\n  var _vnode = keepAliveInstance._vnode;\n  for (var key in cache) {\n    var cachedNode = cache[key];\n    if (cachedNode) {\n      var name = getComponentName(cachedNode.componentOptions);\n      if (name && !filter(name)) {\n        pruneCacheEntry(cache, key, keys, _vnode);\n      }\n    }\n  }\n}\n\nfunction pruneCacheEntry (\n  cache,\n  key,\n  keys,\n  current\n) {\n  var cached$$1 = cache[key];\n  if (cached$$1 && (!current || cached$$1.tag !== current.tag)) {\n    cached$$1.componentInstance.$destroy();\n  }\n  cache[key] = null;\n  remove(keys, key);\n}\n\nvar patternTypes = [String, RegExp, Array];\n\nvar KeepAlive = {\n  name: 'keep-alive',\n  abstract: true,\n\n  props: {\n    include: patternTypes,\n    exclude: patternTypes,\n    max: [String, Number]\n  },\n\n  created: function created () {\n    this.cache = Object.create(null);\n    this.keys = [];\n  },\n\n  destroyed: function destroyed () {\n    for (var key in this.cache) {\n      pruneCacheEntry(this.cache, key, this.keys);\n    }\n  },\n\n  mounted: function mounted () {\n    var this$1 = this;\n\n    this.$watch('include', function (val) {\n      pruneCache(this$1, function (name) { return matches(val, name); });\n    });\n    this.$watch('exclude', function (val) {\n      pruneCache(this$1, function (name) { return !matches(val, name); });\n    });\n  },\n\n  render: function render () {\n    var slot = this.$slots.default;\n    var vnode = getFirstComponentChild(slot);\n    var componentOptions = vnode && vnode.componentOptions;\n    if (componentOptions) {\n      // check pattern\n      var name = getComponentName(componentOptions);\n      var ref = this;\n      var include = ref.include;\n      var exclude = ref.exclude;\n      if (\n        // not included\n        (include && (!name || !matches(include, name))) ||\n        // excluded\n        (exclude && name && matches(exclude, name))\n      ) {\n        return vnode\n      }\n\n      var ref$1 = this;\n      var cache = ref$1.cache;\n      var keys = ref$1.keys;\n      var key = vnode.key == null\n        // same constructor may get registered as different local components\n        // so cid alone is not enough (#3269)\n        ? componentOptions.Ctor.cid + (componentOptions.tag ? (\"::\" + (componentOptions.tag)) : '')\n        : vnode.key;\n      if (cache[key]) {\n        vnode.componentInstance = cache[key].componentInstance;\n        // make current key freshest\n        remove(keys, key);\n        keys.push(key);\n      } else {\n        cache[key] = vnode;\n        keys.push(key);\n        // prune oldest entry\n        if (this.max && keys.length > parseInt(this.max)) {\n          pruneCacheEntry(cache, keys[0], keys, this._vnode);\n        }\n      }\n\n      vnode.data.keepAlive = true;\n    }\n    return vnode || (slot && slot[0])\n  }\n};\n\nvar builtInComponents = {\n  KeepAlive: KeepAlive\n};\n\n/*  */\n\nfunction initGlobalAPI (Vue) {\n  // config\n  var configDef = {};\n  configDef.get = function () { return config; };\n  if (true) {\n    configDef.set = function () {\n      warn(\n        'Do not replace the Vue.config object, set individual fields instead.'\n      );\n    };\n  }\n  Object.defineProperty(Vue, 'config', configDef);\n\n  // exposed util methods.\n  // NOTE: these are not considered part of the public API - avoid relying on\n  // them unless you are aware of the risk.\n  Vue.util = {\n    warn: warn,\n    extend: extend,\n    mergeOptions: mergeOptions,\n    defineReactive: defineReactive$$1\n  };\n\n  Vue.set = set;\n  Vue.delete = del;\n  Vue.nextTick = nextTick;\n\n  // 2.6 explicit observable API\n  Vue.observable = function (obj) {\n    observe(obj);\n    return obj\n  };\n\n  Vue.options = Object.create(null);\n  ASSET_TYPES.forEach(function (type) {\n    Vue.options[type + 's'] = Object.create(null);\n  });\n\n  // this is used to identify the \"base\" constructor to extend all plain-object\n  // components with in Weex's multi-instance scenarios.\n  Vue.options._base = Vue;\n\n  extend(Vue.options.components, builtInComponents);\n\n  initUse(Vue);\n  initMixin$1(Vue);\n  initExtend(Vue);\n  initAssetRegisters(Vue);\n}\n\ninitGlobalAPI(Vue);\n\nObject.defineProperty(Vue.prototype, '$isServer', {\n  get: isServerRendering\n});\n\nObject.defineProperty(Vue.prototype, '$ssrContext', {\n  get: function get () {\n    /* istanbul ignore next */\n    return this.$vnode && this.$vnode.ssrContext\n  }\n});\n\n// expose FunctionalRenderContext for ssr runtime helper installation\nObject.defineProperty(Vue, 'FunctionalRenderContext', {\n  value: FunctionalRenderContext\n});\n\nVue.version = '2.6.12';\n\n/*  */\n\n// these are reserved for web because they are directly compiled away\n// during template compilation\nvar isReservedAttr = makeMap('style,class');\n\n// attributes that should be using props for binding\nvar acceptValue = makeMap('input,textarea,option,select,progress');\nvar mustUseProp = function (tag, type, attr) {\n  return (\n    (attr === 'value' && acceptValue(tag)) && type !== 'button' ||\n    (attr === 'selected' && tag === 'option') ||\n    (attr === 'checked' && tag === 'input') ||\n    (attr === 'muted' && tag === 'video')\n  )\n};\n\nvar isEnumeratedAttr = makeMap('contenteditable,draggable,spellcheck');\n\nvar isValidContentEditableValue = makeMap('events,caret,typing,plaintext-only');\n\nvar convertEnumeratedValue = function (key, value) {\n  return isFalsyAttrValue(value) || value === 'false'\n    ? 'false'\n    // allow arbitrary string value for contenteditable\n    : key === 'contenteditable' && isValidContentEditableValue(value)\n      ? value\n      : 'true'\n};\n\nvar isBooleanAttr = makeMap(\n  'allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,' +\n  'default,defaultchecked,defaultmuted,defaultselected,defer,disabled,' +\n  'enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,' +\n  'muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,' +\n  'required,reversed,scoped,seamless,selected,sortable,translate,' +\n  'truespeed,typemustmatch,visible'\n);\n\nvar xlinkNS = 'http://www.w3.org/1999/xlink';\n\nvar isXlink = function (name) {\n  return name.charAt(5) === ':' && name.slice(0, 5) === 'xlink'\n};\n\nvar getXlinkProp = function (name) {\n  return isXlink(name) ? name.slice(6, name.length) : ''\n};\n\nvar isFalsyAttrValue = function (val) {\n  return val == null || val === false\n};\n\n/*  */\n\nfunction genClassForVnode (vnode) {\n  var data = vnode.data;\n  var parentNode = vnode;\n  var childNode = vnode;\n  while (isDef(childNode.componentInstance)) {\n    childNode = childNode.componentInstance._vnode;\n    if (childNode && childNode.data) {\n      data = mergeClassData(childNode.data, data);\n    }\n  }\n  while (isDef(parentNode = parentNode.parent)) {\n    if (parentNode && parentNode.data) {\n      data = mergeClassData(data, parentNode.data);\n    }\n  }\n  return renderClass(data.staticClass, data.class)\n}\n\nfunction mergeClassData (child, parent) {\n  return {\n    staticClass: concat(child.staticClass, parent.staticClass),\n    class: isDef(child.class)\n      ? [child.class, parent.class]\n      : parent.class\n  }\n}\n\nfunction renderClass (\n  staticClass,\n  dynamicClass\n) {\n  if (isDef(staticClass) || isDef(dynamicClass)) {\n    return concat(staticClass, stringifyClass(dynamicClass))\n  }\n  /* istanbul ignore next */\n  return ''\n}\n\nfunction concat (a, b) {\n  return a ? b ? (a + ' ' + b) : a : (b || '')\n}\n\nfunction stringifyClass (value) {\n  if (Array.isArray(value)) {\n    return stringifyArray(value)\n  }\n  if (isObject(value)) {\n    return stringifyObject(value)\n  }\n  if (typeof value === 'string') {\n    return value\n  }\n  /* istanbul ignore next */\n  return ''\n}\n\nfunction stringifyArray (value) {\n  var res = '';\n  var stringified;\n  for (var i = 0, l = value.length; i < l; i++) {\n    if (isDef(stringified = stringifyClass(value[i])) && stringified !== '') {\n      if (res) { res += ' '; }\n      res += stringified;\n    }\n  }\n  return res\n}\n\nfunction stringifyObject (value) {\n  var res = '';\n  for (var key in value) {\n    if (value[key]) {\n      if (res) { res += ' '; }\n      res += key;\n    }\n  }\n  return res\n}\n\n/*  */\n\nvar namespaceMap = {\n  svg: 'http://www.w3.org/2000/svg',\n  math: 'http://www.w3.org/1998/Math/MathML'\n};\n\nvar isHTMLTag = makeMap(\n  'html,body,base,head,link,meta,style,title,' +\n  'address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,' +\n  'div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,' +\n  'a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,' +\n  's,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,' +\n  'embed,object,param,source,canvas,script,noscript,del,ins,' +\n  'caption,col,colgroup,table,thead,tbody,td,th,tr,' +\n  'button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,' +\n  'output,progress,select,textarea,' +\n  'details,dialog,menu,menuitem,summary,' +\n  'content,element,shadow,template,blockquote,iframe,tfoot'\n);\n\n// this map is intentionally selective, only covering SVG elements that may\n// contain child elements.\nvar isSVG = makeMap(\n  'svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,' +\n  'foreignObject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' +\n  'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view',\n  true\n);\n\nvar isPreTag = function (tag) { return tag === 'pre'; };\n\nvar isReservedTag = function (tag) {\n  return isHTMLTag(tag) || isSVG(tag)\n};\n\nfunction getTagNamespace (tag) {\n  if (isSVG(tag)) {\n    return 'svg'\n  }\n  // basic support for MathML\n  // note it doesn't support other MathML elements being component roots\n  if (tag === 'math') {\n    return 'math'\n  }\n}\n\nvar unknownElementCache = Object.create(null);\nfunction isUnknownElement (tag) {\n  /* istanbul ignore if */\n  if (!inBrowser) {\n    return true\n  }\n  if (isReservedTag(tag)) {\n    return false\n  }\n  tag = tag.toLowerCase();\n  /* istanbul ignore if */\n  if (unknownElementCache[tag] != null) {\n    return unknownElementCache[tag]\n  }\n  var el = document.createElement(tag);\n  if (tag.indexOf('-') > -1) {\n    // http://stackoverflow.com/a/28210364/1070244\n    return (unknownElementCache[tag] = (\n      el.constructor === window.HTMLUnknownElement ||\n      el.constructor === window.HTMLElement\n    ))\n  } else {\n    return (unknownElementCache[tag] = /HTMLUnknownElement/.test(el.toString()))\n  }\n}\n\nvar isTextInputType = makeMap('text,number,password,search,email,tel,url');\n\n/*  */\n\n/**\n * Query an element selector if it's not an element already.\n */\nfunction query (el) {\n  if (typeof el === 'string') {\n    var selected = document.querySelector(el);\n    if (!selected) {\n       true && warn(\n        'Cannot find element: ' + el\n      );\n      return document.createElement('div')\n    }\n    return selected\n  } else {\n    return el\n  }\n}\n\n/*  */\n\nfunction createElement$1 (tagName, vnode) {\n  var elm = document.createElement(tagName);\n  if (tagName !== 'select') {\n    return elm\n  }\n  // false or null will remove the attribute but undefined will not\n  if (vnode.data && vnode.data.attrs && vnode.data.attrs.multiple !== undefined) {\n    elm.setAttribute('multiple', 'multiple');\n  }\n  return elm\n}\n\nfunction createElementNS (namespace, tagName) {\n  return document.createElementNS(namespaceMap[namespace], tagName)\n}\n\nfunction createTextNode (text) {\n  return document.createTextNode(text)\n}\n\nfunction createComment (text) {\n  return document.createComment(text)\n}\n\nfunction insertBefore (parentNode, newNode, referenceNode) {\n  parentNode.insertBefore(newNode, referenceNode);\n}\n\nfunction removeChild (node, child) {\n  node.removeChild(child);\n}\n\nfunction appendChild (node, child) {\n  node.appendChild(child);\n}\n\nfunction parentNode (node) {\n  return node.parentNode\n}\n\nfunction nextSibling (node) {\n  return node.nextSibling\n}\n\nfunction tagName (node) {\n  return node.tagName\n}\n\nfunction setTextContent (node, text) {\n  node.textContent = text;\n}\n\nfunction setStyleScope (node, scopeId) {\n  node.setAttribute(scopeId, '');\n}\n\nvar nodeOps = /*#__PURE__*/Object.freeze({\n  createElement: createElement$1,\n  createElementNS: createElementNS,\n  createTextNode: createTextNode,\n  createComment: createComment,\n  insertBefore: insertBefore,\n  removeChild: removeChild,\n  appendChild: appendChild,\n  parentNode: parentNode,\n  nextSibling: nextSibling,\n  tagName: tagName,\n  setTextContent: setTextContent,\n  setStyleScope: setStyleScope\n});\n\n/*  */\n\nvar ref = {\n  create: function create (_, vnode) {\n    registerRef(vnode);\n  },\n  update: function update (oldVnode, vnode) {\n    if (oldVnode.data.ref !== vnode.data.ref) {\n      registerRef(oldVnode, true);\n      registerRef(vnode);\n    }\n  },\n  destroy: function destroy (vnode) {\n    registerRef(vnode, true);\n  }\n};\n\nfunction registerRef (vnode, isRemoval) {\n  var key = vnode.data.ref;\n  if (!isDef(key)) { return }\n\n  var vm = vnode.context;\n  var ref = vnode.componentInstance || vnode.elm;\n  var refs = vm.$refs;\n  if (isRemoval) {\n    if (Array.isArray(refs[key])) {\n      remove(refs[key], ref);\n    } else if (refs[key] === ref) {\n      refs[key] = undefined;\n    }\n  } else {\n    if (vnode.data.refInFor) {\n      if (!Array.isArray(refs[key])) {\n        refs[key] = [ref];\n      } else if (refs[key].indexOf(ref) < 0) {\n        // $flow-disable-line\n        refs[key].push(ref);\n      }\n    } else {\n      refs[key] = ref;\n    }\n  }\n}\n\n/**\n * Virtual DOM patching algorithm based on Snabbdom by\n * Simon Friis Vindum (@paldepind)\n * Licensed under the MIT License\n * https://github.com/paldepind/snabbdom/blob/master/LICENSE\n *\n * modified by Evan You (@yyx990803)\n *\n * Not type-checking this because this file is perf-critical and the cost\n * of making flow understand it is not worth it.\n */\n\nvar emptyNode = new VNode('', {}, []);\n\nvar hooks = ['create', 'activate', 'update', 'remove', 'destroy'];\n\nfunction sameVnode (a, b) {\n  return (\n    a.key === b.key && (\n      (\n        a.tag === b.tag &&\n        a.isComment === b.isComment &&\n        isDef(a.data) === isDef(b.data) &&\n        sameInputType(a, b)\n      ) || (\n        isTrue(a.isAsyncPlaceholder) &&\n        a.asyncFactory === b.asyncFactory &&\n        isUndef(b.asyncFactory.error)\n      )\n    )\n  )\n}\n\nfunction sameInputType (a, b) {\n  if (a.tag !== 'input') { return true }\n  var i;\n  var typeA = isDef(i = a.data) && isDef(i = i.attrs) && i.type;\n  var typeB = isDef(i = b.data) && isDef(i = i.attrs) && i.type;\n  return typeA === typeB || isTextInputType(typeA) && isTextInputType(typeB)\n}\n\nfunction createKeyToOldIdx (children, beginIdx, endIdx) {\n  var i, key;\n  var map = {};\n  for (i = beginIdx; i <= endIdx; ++i) {\n    key = children[i].key;\n    if (isDef(key)) { map[key] = i; }\n  }\n  return map\n}\n\nfunction createPatchFunction (backend) {\n  var i, j;\n  var cbs = {};\n\n  var modules = backend.modules;\n  var nodeOps = backend.nodeOps;\n\n  for (i = 0; i < hooks.length; ++i) {\n    cbs[hooks[i]] = [];\n    for (j = 0; j < modules.length; ++j) {\n      if (isDef(modules[j][hooks[i]])) {\n        cbs[hooks[i]].push(modules[j][hooks[i]]);\n      }\n    }\n  }\n\n  function emptyNodeAt (elm) {\n    return new VNode(nodeOps.tagName(elm).toLowerCase(), {}, [], undefined, elm)\n  }\n\n  function createRmCb (childElm, listeners) {\n    function remove$$1 () {\n      if (--remove$$1.listeners === 0) {\n        removeNode(childElm);\n      }\n    }\n    remove$$1.listeners = listeners;\n    return remove$$1\n  }\n\n  function removeNode (el) {\n    var parent = nodeOps.parentNode(el);\n    // element may have already been removed due to v-html / v-text\n    if (isDef(parent)) {\n      nodeOps.removeChild(parent, el);\n    }\n  }\n\n  function isUnknownElement$$1 (vnode, inVPre) {\n    return (\n      !inVPre &&\n      !vnode.ns &&\n      !(\n        config.ignoredElements.length &&\n        config.ignoredElements.some(function (ignore) {\n          return isRegExp(ignore)\n            ? ignore.test(vnode.tag)\n            : ignore === vnode.tag\n        })\n      ) &&\n      config.isUnknownElement(vnode.tag)\n    )\n  }\n\n  var creatingElmInVPre = 0;\n\n  function createElm (\n    vnode,\n    insertedVnodeQueue,\n    parentElm,\n    refElm,\n    nested,\n    ownerArray,\n    index\n  ) {\n    if (isDef(vnode.elm) && isDef(ownerArray)) {\n      // This vnode was used in a previous render!\n      // now it's used as a new node, overwriting its elm would cause\n      // potential patch errors down the road when it's used as an insertion\n      // reference node. Instead, we clone the node on-demand before creating\n      // associated DOM element for it.\n      vnode = ownerArray[index] = cloneVNode(vnode);\n    }\n\n    vnode.isRootInsert = !nested; // for transition enter check\n    if (createComponent(vnode, insertedVnodeQueue, parentElm, refElm)) {\n      return\n    }\n\n    var data = vnode.data;\n    var children = vnode.children;\n    var tag = vnode.tag;\n    if (isDef(tag)) {\n      if (true) {\n        if (data && data.pre) {\n          creatingElmInVPre++;\n        }\n        if (isUnknownElement$$1(vnode, creatingElmInVPre)) {\n          warn(\n            'Unknown custom element: <' + tag + '> - did you ' +\n            'register the component correctly? For recursive components, ' +\n            'make sure to provide the \"name\" option.',\n            vnode.context\n          );\n        }\n      }\n\n      vnode.elm = vnode.ns\n        ? nodeOps.createElementNS(vnode.ns, tag)\n        : nodeOps.createElement(tag, vnode);\n      setScope(vnode);\n\n      /* istanbul ignore if */\n      {\n        createChildren(vnode, children, insertedVnodeQueue);\n        if (isDef(data)) {\n          invokeCreateHooks(vnode, insertedVnodeQueue);\n        }\n        insert(parentElm, vnode.elm, refElm);\n      }\n\n      if ( true && data && data.pre) {\n        creatingElmInVPre--;\n      }\n    } else if (isTrue(vnode.isComment)) {\n      vnode.elm = nodeOps.createComment(vnode.text);\n      insert(parentElm, vnode.elm, refElm);\n    } else {\n      vnode.elm = nodeOps.createTextNode(vnode.text);\n      insert(parentElm, vnode.elm, refElm);\n    }\n  }\n\n  function createComponent (vnode, insertedVnodeQueue, parentElm, refElm) {\n    var i = vnode.data;\n    if (isDef(i)) {\n      var isReactivated = isDef(vnode.componentInstance) && i.keepAlive;\n      if (isDef(i = i.hook) && isDef(i = i.init)) {\n        i(vnode, false /* hydrating */);\n      }\n      // after calling the init hook, if the vnode is a child component\n      // it should've created a child instance and mounted it. the child\n      // component also has set the placeholder vnode's elm.\n      // in that case we can just return the element and be done.\n      if (isDef(vnode.componentInstance)) {\n        initComponent(vnode, insertedVnodeQueue);\n        insert(parentElm, vnode.elm, refElm);\n        if (isTrue(isReactivated)) {\n          reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm);\n        }\n        return true\n      }\n    }\n  }\n\n  function initComponent (vnode, insertedVnodeQueue) {\n    if (isDef(vnode.data.pendingInsert)) {\n      insertedVnodeQueue.push.apply(insertedVnodeQueue, vnode.data.pendingInsert);\n      vnode.data.pendingInsert = null;\n    }\n    vnode.elm = vnode.componentInstance.$el;\n    if (isPatchable(vnode)) {\n      invokeCreateHooks(vnode, insertedVnodeQueue);\n      setScope(vnode);\n    } else {\n      // empty component root.\n      // skip all element-related modules except for ref (#3455)\n      registerRef(vnode);\n      // make sure to invoke the insert hook\n      insertedVnodeQueue.push(vnode);\n    }\n  }\n\n  function reactivateComponent (vnode, insertedVnodeQueue, parentElm, refElm) {\n    var i;\n    // hack for #4339: a reactivated component with inner transition\n    // does not trigger because the inner node's created hooks are not called\n    // again. It's not ideal to involve module-specific logic in here but\n    // there doesn't seem to be a better way to do it.\n    var innerNode = vnode;\n    while (innerNode.componentInstance) {\n      innerNode = innerNode.componentInstance._vnode;\n      if (isDef(i = innerNode.data) && isDef(i = i.transition)) {\n        for (i = 0; i < cbs.activate.length; ++i) {\n          cbs.activate[i](emptyNode, innerNode);\n        }\n        insertedVnodeQueue.push(innerNode);\n        break\n      }\n    }\n    // unlike a newly created component,\n    // a reactivated keep-alive component doesn't insert itself\n    insert(parentElm, vnode.elm, refElm);\n  }\n\n  function insert (parent, elm, ref$$1) {\n    if (isDef(parent)) {\n      if (isDef(ref$$1)) {\n        if (nodeOps.parentNode(ref$$1) === parent) {\n          nodeOps.insertBefore(parent, elm, ref$$1);\n        }\n      } else {\n        nodeOps.appendChild(parent, elm);\n      }\n    }\n  }\n\n  function createChildren (vnode, children, insertedVnodeQueue) {\n    if (Array.isArray(children)) {\n      if (true) {\n        checkDuplicateKeys(children);\n      }\n      for (var i = 0; i < children.length; ++i) {\n        createElm(children[i], insertedVnodeQueue, vnode.elm, null, true, children, i);\n      }\n    } else if (isPrimitive(vnode.text)) {\n      nodeOps.appendChild(vnode.elm, nodeOps.createTextNode(String(vnode.text)));\n    }\n  }\n\n  function isPatchable (vnode) {\n    while (vnode.componentInstance) {\n      vnode = vnode.componentInstance._vnode;\n    }\n    return isDef(vnode.tag)\n  }\n\n  function invokeCreateHooks (vnode, insertedVnodeQueue) {\n    for (var i$1 = 0; i$1 < cbs.create.length; ++i$1) {\n      cbs.create[i$1](emptyNode, vnode);\n    }\n    i = vnode.data.hook; // Reuse variable\n    if (isDef(i)) {\n      if (isDef(i.create)) { i.create(emptyNode, vnode); }\n      if (isDef(i.insert)) { insertedVnodeQueue.push(vnode); }\n    }\n  }\n\n  // set scope id attribute for scoped CSS.\n  // this is implemented as a special case to avoid the overhead\n  // of going through the normal attribute patching process.\n  function setScope (vnode) {\n    var i;\n    if (isDef(i = vnode.fnScopeId)) {\n      nodeOps.setStyleScope(vnode.elm, i);\n    } else {\n      var ancestor = vnode;\n      while (ancestor) {\n        if (isDef(i = ancestor.context) && isDef(i = i.$options._scopeId)) {\n          nodeOps.setStyleScope(vnode.elm, i);\n        }\n        ancestor = ancestor.parent;\n      }\n    }\n    // for slot content they should also get the scopeId from the host instance.\n    if (isDef(i = activeInstance) &&\n      i !== vnode.context &&\n      i !== vnode.fnContext &&\n      isDef(i = i.$options._scopeId)\n    ) {\n      nodeOps.setStyleScope(vnode.elm, i);\n    }\n  }\n\n  function addVnodes (parentElm, refElm, vnodes, startIdx, endIdx, insertedVnodeQueue) {\n    for (; startIdx <= endIdx; ++startIdx) {\n      createElm(vnodes[startIdx], insertedVnodeQueue, parentElm, refElm, false, vnodes, startIdx);\n    }\n  }\n\n  function invokeDestroyHook (vnode) {\n    var i, j;\n    var data = vnode.data;\n    if (isDef(data)) {\n      if (isDef(i = data.hook) && isDef(i = i.destroy)) { i(vnode); }\n      for (i = 0; i < cbs.destroy.length; ++i) { cbs.destroy[i](vnode); }\n    }\n    if (isDef(i = vnode.children)) {\n      for (j = 0; j < vnode.children.length; ++j) {\n        invokeDestroyHook(vnode.children[j]);\n      }\n    }\n  }\n\n  function removeVnodes (vnodes, startIdx, endIdx) {\n    for (; startIdx <= endIdx; ++startIdx) {\n      var ch = vnodes[startIdx];\n      if (isDef(ch)) {\n        if (isDef(ch.tag)) {\n          removeAndInvokeRemoveHook(ch);\n          invokeDestroyHook(ch);\n        } else { // Text node\n          removeNode(ch.elm);\n        }\n      }\n    }\n  }\n\n  function removeAndInvokeRemoveHook (vnode, rm) {\n    if (isDef(rm) || isDef(vnode.data)) {\n      var i;\n      var listeners = cbs.remove.length + 1;\n      if (isDef(rm)) {\n        // we have a recursively passed down rm callback\n        // increase the listeners count\n        rm.listeners += listeners;\n      } else {\n        // directly removing\n        rm = createRmCb(vnode.elm, listeners);\n      }\n      // recursively invoke hooks on child component root node\n      if (isDef(i = vnode.componentInstance) && isDef(i = i._vnode) && isDef(i.data)) {\n        removeAndInvokeRemoveHook(i, rm);\n      }\n      for (i = 0; i < cbs.remove.length; ++i) {\n        cbs.remove[i](vnode, rm);\n      }\n      if (isDef(i = vnode.data.hook) && isDef(i = i.remove)) {\n        i(vnode, rm);\n      } else {\n        rm();\n      }\n    } else {\n      removeNode(vnode.elm);\n    }\n  }\n\n  function updateChildren (parentElm, oldCh, newCh, insertedVnodeQueue, removeOnly) {\n    var oldStartIdx = 0;\n    var newStartIdx = 0;\n    var oldEndIdx = oldCh.length - 1;\n    var oldStartVnode = oldCh[0];\n    var oldEndVnode = oldCh[oldEndIdx];\n    var newEndIdx = newCh.length - 1;\n    var newStartVnode = newCh[0];\n    var newEndVnode = newCh[newEndIdx];\n    var oldKeyToIdx, idxInOld, vnodeToMove, refElm;\n\n    // removeOnly is a special flag used only by <transition-group>\n    // to ensure removed elements stay in correct relative positions\n    // during leaving transitions\n    var canMove = !removeOnly;\n\n    if (true) {\n      checkDuplicateKeys(newCh);\n    }\n\n    while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) {\n      if (isUndef(oldStartVnode)) {\n        oldStartVnode = oldCh[++oldStartIdx]; // Vnode has been moved left\n      } else if (isUndef(oldEndVnode)) {\n        oldEndVnode = oldCh[--oldEndIdx];\n      } else if (sameVnode(oldStartVnode, newStartVnode)) {\n        patchVnode(oldStartVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\n        oldStartVnode = oldCh[++oldStartIdx];\n        newStartVnode = newCh[++newStartIdx];\n      } else if (sameVnode(oldEndVnode, newEndVnode)) {\n        patchVnode(oldEndVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);\n        oldEndVnode = oldCh[--oldEndIdx];\n        newEndVnode = newCh[--newEndIdx];\n      } else if (sameVnode(oldStartVnode, newEndVnode)) { // Vnode moved right\n        patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);\n        canMove && nodeOps.insertBefore(parentElm, oldStartVnode.elm, nodeOps.nextSibling(oldEndVnode.elm));\n        oldStartVnode = oldCh[++oldStartIdx];\n        newEndVnode = newCh[--newEndIdx];\n      } else if (sameVnode(oldEndVnode, newStartVnode)) { // Vnode moved left\n        patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\n        canMove && nodeOps.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm);\n        oldEndVnode = oldCh[--oldEndIdx];\n        newStartVnode = newCh[++newStartIdx];\n      } else {\n        if (isUndef(oldKeyToIdx)) { oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx); }\n        idxInOld = isDef(newStartVnode.key)\n          ? oldKeyToIdx[newStartVnode.key]\n          : findIdxInOld(newStartVnode, oldCh, oldStartIdx, oldEndIdx);\n        if (isUndef(idxInOld)) { // New element\n          createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);\n        } else {\n          vnodeToMove = oldCh[idxInOld];\n          if (sameVnode(vnodeToMove, newStartVnode)) {\n            patchVnode(vnodeToMove, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\n            oldCh[idxInOld] = undefined;\n            canMove && nodeOps.insertBefore(parentElm, vnodeToMove.elm, oldStartVnode.elm);\n          } else {\n            // same key but different element. treat as new element\n            createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);\n          }\n        }\n        newStartVnode = newCh[++newStartIdx];\n      }\n    }\n    if (oldStartIdx > oldEndIdx) {\n      refElm = isUndef(newCh[newEndIdx + 1]) ? null : newCh[newEndIdx + 1].elm;\n      addVnodes(parentElm, refElm, newCh, newStartIdx, newEndIdx, insertedVnodeQueue);\n    } else if (newStartIdx > newEndIdx) {\n      removeVnodes(oldCh, oldStartIdx, oldEndIdx);\n    }\n  }\n\n  function checkDuplicateKeys (children) {\n    var seenKeys = {};\n    for (var i = 0; i < children.length; i++) {\n      var vnode = children[i];\n      var key = vnode.key;\n      if (isDef(key)) {\n        if (seenKeys[key]) {\n          warn(\n            (\"Duplicate keys detected: '\" + key + \"'. This may cause an update error.\"),\n            vnode.context\n          );\n        } else {\n          seenKeys[key] = true;\n        }\n      }\n    }\n  }\n\n  function findIdxInOld (node, oldCh, start, end) {\n    for (var i = start; i < end; i++) {\n      var c = oldCh[i];\n      if (isDef(c) && sameVnode(node, c)) { return i }\n    }\n  }\n\n  function patchVnode (\n    oldVnode,\n    vnode,\n    insertedVnodeQueue,\n    ownerArray,\n    index,\n    removeOnly\n  ) {\n    if (oldVnode === vnode) {\n      return\n    }\n\n    if (isDef(vnode.elm) && isDef(ownerArray)) {\n      // clone reused vnode\n      vnode = ownerArray[index] = cloneVNode(vnode);\n    }\n\n    var elm = vnode.elm = oldVnode.elm;\n\n    if (isTrue(oldVnode.isAsyncPlaceholder)) {\n      if (isDef(vnode.asyncFactory.resolved)) {\n        hydrate(oldVnode.elm, vnode, insertedVnodeQueue);\n      } else {\n        vnode.isAsyncPlaceholder = true;\n      }\n      return\n    }\n\n    // reuse element for static trees.\n    // note we only do this if the vnode is cloned -\n    // if the new node is not cloned it means the render functions have been\n    // reset by the hot-reload-api and we need to do a proper re-render.\n    if (isTrue(vnode.isStatic) &&\n      isTrue(oldVnode.isStatic) &&\n      vnode.key === oldVnode.key &&\n      (isTrue(vnode.isCloned) || isTrue(vnode.isOnce))\n    ) {\n      vnode.componentInstance = oldVnode.componentInstance;\n      return\n    }\n\n    var i;\n    var data = vnode.data;\n    if (isDef(data) && isDef(i = data.hook) && isDef(i = i.prepatch)) {\n      i(oldVnode, vnode);\n    }\n\n    var oldCh = oldVnode.children;\n    var ch = vnode.children;\n    if (isDef(data) && isPatchable(vnode)) {\n      for (i = 0; i < cbs.update.length; ++i) { cbs.update[i](oldVnode, vnode); }\n      if (isDef(i = data.hook) && isDef(i = i.update)) { i(oldVnode, vnode); }\n    }\n    if (isUndef(vnode.text)) {\n      if (isDef(oldCh) && isDef(ch)) {\n        if (oldCh !== ch) { updateChildren(elm, oldCh, ch, insertedVnodeQueue, removeOnly); }\n      } else if (isDef(ch)) {\n        if (true) {\n          checkDuplicateKeys(ch);\n        }\n        if (isDef(oldVnode.text)) { nodeOps.setTextContent(elm, ''); }\n        addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue);\n      } else if (isDef(oldCh)) {\n        removeVnodes(oldCh, 0, oldCh.length - 1);\n      } else if (isDef(oldVnode.text)) {\n        nodeOps.setTextContent(elm, '');\n      }\n    } else if (oldVnode.text !== vnode.text) {\n      nodeOps.setTextContent(elm, vnode.text);\n    }\n    if (isDef(data)) {\n      if (isDef(i = data.hook) && isDef(i = i.postpatch)) { i(oldVnode, vnode); }\n    }\n  }\n\n  function invokeInsertHook (vnode, queue, initial) {\n    // delay insert hooks for component root nodes, invoke them after the\n    // element is really inserted\n    if (isTrue(initial) && isDef(vnode.parent)) {\n      vnode.parent.data.pendingInsert = queue;\n    } else {\n      for (var i = 0; i < queue.length; ++i) {\n        queue[i].data.hook.insert(queue[i]);\n      }\n    }\n  }\n\n  var hydrationBailed = false;\n  // list of modules that can skip create hook during hydration because they\n  // are already rendered on the client or has no need for initialization\n  // Note: style is excluded because it relies on initial clone for future\n  // deep updates (#7063).\n  var isRenderedModule = makeMap('attrs,class,staticClass,staticStyle,key');\n\n  // Note: this is a browser-only function so we can assume elms are DOM nodes.\n  function hydrate (elm, vnode, insertedVnodeQueue, inVPre) {\n    var i;\n    var tag = vnode.tag;\n    var data = vnode.data;\n    var children = vnode.children;\n    inVPre = inVPre || (data && data.pre);\n    vnode.elm = elm;\n\n    if (isTrue(vnode.isComment) && isDef(vnode.asyncFactory)) {\n      vnode.isAsyncPlaceholder = true;\n      return true\n    }\n    // assert node match\n    if (true) {\n      if (!assertNodeMatch(elm, vnode, inVPre)) {\n        return false\n      }\n    }\n    if (isDef(data)) {\n      if (isDef(i = data.hook) && isDef(i = i.init)) { i(vnode, true /* hydrating */); }\n      if (isDef(i = vnode.componentInstance)) {\n        // child component. it should have hydrated its own tree.\n        initComponent(vnode, insertedVnodeQueue);\n        return true\n      }\n    }\n    if (isDef(tag)) {\n      if (isDef(children)) {\n        // empty element, allow client to pick up and populate children\n        if (!elm.hasChildNodes()) {\n          createChildren(vnode, children, insertedVnodeQueue);\n        } else {\n          // v-html and domProps: innerHTML\n          if (isDef(i = data) && isDef(i = i.domProps) && isDef(i = i.innerHTML)) {\n            if (i !== elm.innerHTML) {\n              /* istanbul ignore if */\n              if ( true &&\n                typeof console !== 'undefined' &&\n                !hydrationBailed\n              ) {\n                hydrationBailed = true;\n                console.warn('Parent: ', elm);\n                console.warn('server innerHTML: ', i);\n                console.warn('client innerHTML: ', elm.innerHTML);\n              }\n              return false\n            }\n          } else {\n            // iterate and compare children lists\n            var childrenMatch = true;\n            var childNode = elm.firstChild;\n            for (var i$1 = 0; i$1 < children.length; i$1++) {\n              if (!childNode || !hydrate(childNode, children[i$1], insertedVnodeQueue, inVPre)) {\n                childrenMatch = false;\n                break\n              }\n              childNode = childNode.nextSibling;\n            }\n            // if childNode is not null, it means the actual childNodes list is\n            // longer than the virtual children list.\n            if (!childrenMatch || childNode) {\n              /* istanbul ignore if */\n              if ( true &&\n                typeof console !== 'undefined' &&\n                !hydrationBailed\n              ) {\n                hydrationBailed = true;\n                console.warn('Parent: ', elm);\n                console.warn('Mismatching childNodes vs. VNodes: ', elm.childNodes, children);\n              }\n              return false\n            }\n          }\n        }\n      }\n      if (isDef(data)) {\n        var fullInvoke = false;\n        for (var key in data) {\n          if (!isRenderedModule(key)) {\n            fullInvoke = true;\n            invokeCreateHooks(vnode, insertedVnodeQueue);\n            break\n          }\n        }\n        if (!fullInvoke && data['class']) {\n          // ensure collecting deps for deep class bindings for future updates\n          traverse(data['class']);\n        }\n      }\n    } else if (elm.data !== vnode.text) {\n      elm.data = vnode.text;\n    }\n    return true\n  }\n\n  function assertNodeMatch (node, vnode, inVPre) {\n    if (isDef(vnode.tag)) {\n      return vnode.tag.indexOf('vue-component') === 0 || (\n        !isUnknownElement$$1(vnode, inVPre) &&\n        vnode.tag.toLowerCase() === (node.tagName && node.tagName.toLowerCase())\n      )\n    } else {\n      return node.nodeType === (vnode.isComment ? 8 : 3)\n    }\n  }\n\n  return function patch (oldVnode, vnode, hydrating, removeOnly) {\n    if (isUndef(vnode)) {\n      if (isDef(oldVnode)) { invokeDestroyHook(oldVnode); }\n      return\n    }\n\n    var isInitialPatch = false;\n    var insertedVnodeQueue = [];\n\n    if (isUndef(oldVnode)) {\n      // empty mount (likely as component), create new root element\n      isInitialPatch = true;\n      createElm(vnode, insertedVnodeQueue);\n    } else {\n      var isRealElement = isDef(oldVnode.nodeType);\n      if (!isRealElement && sameVnode(oldVnode, vnode)) {\n        // patch existing root node\n        patchVnode(oldVnode, vnode, insertedVnodeQueue, null, null, removeOnly);\n      } else {\n        if (isRealElement) {\n          // mounting to a real element\n          // check if this is server-rendered content and if we can perform\n          // a successful hydration.\n          if (oldVnode.nodeType === 1 && oldVnode.hasAttribute(SSR_ATTR)) {\n            oldVnode.removeAttribute(SSR_ATTR);\n            hydrating = true;\n          }\n          if (isTrue(hydrating)) {\n            if (hydrate(oldVnode, vnode, insertedVnodeQueue)) {\n              invokeInsertHook(vnode, insertedVnodeQueue, true);\n              return oldVnode\n            } else if (true) {\n              warn(\n                'The client-side rendered virtual DOM tree is not matching ' +\n                'server-rendered content. This is likely caused by incorrect ' +\n                'HTML markup, for example nesting block-level elements inside ' +\n                '<p>, or missing <tbody>. Bailing hydration and performing ' +\n                'full client-side render.'\n              );\n            }\n          }\n          // either not server-rendered, or hydration failed.\n          // create an empty node and replace it\n          oldVnode = emptyNodeAt(oldVnode);\n        }\n\n        // replacing existing element\n        var oldElm = oldVnode.elm;\n        var parentElm = nodeOps.parentNode(oldElm);\n\n        // create new node\n        createElm(\n          vnode,\n          insertedVnodeQueue,\n          // extremely rare edge case: do not insert if old element is in a\n          // leaving transition. Only happens when combining transition +\n          // keep-alive + HOCs. (#4590)\n          oldElm._leaveCb ? null : parentElm,\n          nodeOps.nextSibling(oldElm)\n        );\n\n        // update parent placeholder node element, recursively\n        if (isDef(vnode.parent)) {\n          var ancestor = vnode.parent;\n          var patchable = isPatchable(vnode);\n          while (ancestor) {\n            for (var i = 0; i < cbs.destroy.length; ++i) {\n              cbs.destroy[i](ancestor);\n            }\n            ancestor.elm = vnode.elm;\n            if (patchable) {\n              for (var i$1 = 0; i$1 < cbs.create.length; ++i$1) {\n                cbs.create[i$1](emptyNode, ancestor);\n              }\n              // #6513\n              // invoke insert hooks that may have been merged by create hooks.\n              // e.g. for directives that uses the \"inserted\" hook.\n              var insert = ancestor.data.hook.insert;\n              if (insert.merged) {\n                // start at index 1 to avoid re-invoking component mounted hook\n                for (var i$2 = 1; i$2 < insert.fns.length; i$2++) {\n                  insert.fns[i$2]();\n                }\n              }\n            } else {\n              registerRef(ancestor);\n            }\n            ancestor = ancestor.parent;\n          }\n        }\n\n        // destroy old node\n        if (isDef(parentElm)) {\n          removeVnodes([oldVnode], 0, 0);\n        } else if (isDef(oldVnode.tag)) {\n          invokeDestroyHook(oldVnode);\n        }\n      }\n    }\n\n    invokeInsertHook(vnode, insertedVnodeQueue, isInitialPatch);\n    return vnode.elm\n  }\n}\n\n/*  */\n\nvar directives = {\n  create: updateDirectives,\n  update: updateDirectives,\n  destroy: function unbindDirectives (vnode) {\n    updateDirectives(vnode, emptyNode);\n  }\n};\n\nfunction updateDirectives (oldVnode, vnode) {\n  if (oldVnode.data.directives || vnode.data.directives) {\n    _update(oldVnode, vnode);\n  }\n}\n\nfunction _update (oldVnode, vnode) {\n  var isCreate = oldVnode === emptyNode;\n  var isDestroy = vnode === emptyNode;\n  var oldDirs = normalizeDirectives$1(oldVnode.data.directives, oldVnode.context);\n  var newDirs = normalizeDirectives$1(vnode.data.directives, vnode.context);\n\n  var dirsWithInsert = [];\n  var dirsWithPostpatch = [];\n\n  var key, oldDir, dir;\n  for (key in newDirs) {\n    oldDir = oldDirs[key];\n    dir = newDirs[key];\n    if (!oldDir) {\n      // new directive, bind\n      callHook$1(dir, 'bind', vnode, oldVnode);\n      if (dir.def && dir.def.inserted) {\n        dirsWithInsert.push(dir);\n      }\n    } else {\n      // existing directive, update\n      dir.oldValue = oldDir.value;\n      dir.oldArg = oldDir.arg;\n      callHook$1(dir, 'update', vnode, oldVnode);\n      if (dir.def && dir.def.componentUpdated) {\n        dirsWithPostpatch.push(dir);\n      }\n    }\n  }\n\n  if (dirsWithInsert.length) {\n    var callInsert = function () {\n      for (var i = 0; i < dirsWithInsert.length; i++) {\n        callHook$1(dirsWithInsert[i], 'inserted', vnode, oldVnode);\n      }\n    };\n    if (isCreate) {\n      mergeVNodeHook(vnode, 'insert', callInsert);\n    } else {\n      callInsert();\n    }\n  }\n\n  if (dirsWithPostpatch.length) {\n    mergeVNodeHook(vnode, 'postpatch', function () {\n      for (var i = 0; i < dirsWithPostpatch.length; i++) {\n        callHook$1(dirsWithPostpatch[i], 'componentUpdated', vnode, oldVnode);\n      }\n    });\n  }\n\n  if (!isCreate) {\n    for (key in oldDirs) {\n      if (!newDirs[key]) {\n        // no longer present, unbind\n        callHook$1(oldDirs[key], 'unbind', oldVnode, oldVnode, isDestroy);\n      }\n    }\n  }\n}\n\nvar emptyModifiers = Object.create(null);\n\nfunction normalizeDirectives$1 (\n  dirs,\n  vm\n) {\n  var res = Object.create(null);\n  if (!dirs) {\n    // $flow-disable-line\n    return res\n  }\n  var i, dir;\n  for (i = 0; i < dirs.length; i++) {\n    dir = dirs[i];\n    if (!dir.modifiers) {\n      // $flow-disable-line\n      dir.modifiers = emptyModifiers;\n    }\n    res[getRawDirName(dir)] = dir;\n    dir.def = resolveAsset(vm.$options, 'directives', dir.name, true);\n  }\n  // $flow-disable-line\n  return res\n}\n\nfunction getRawDirName (dir) {\n  return dir.rawName || ((dir.name) + \".\" + (Object.keys(dir.modifiers || {}).join('.')))\n}\n\nfunction callHook$1 (dir, hook, vnode, oldVnode, isDestroy) {\n  var fn = dir.def && dir.def[hook];\n  if (fn) {\n    try {\n      fn(vnode.elm, dir, vnode, oldVnode, isDestroy);\n    } catch (e) {\n      handleError(e, vnode.context, (\"directive \" + (dir.name) + \" \" + hook + \" hook\"));\n    }\n  }\n}\n\nvar baseModules = [\n  ref,\n  directives\n];\n\n/*  */\n\nfunction updateAttrs (oldVnode, vnode) {\n  var opts = vnode.componentOptions;\n  if (isDef(opts) && opts.Ctor.options.inheritAttrs === false) {\n    return\n  }\n  if (isUndef(oldVnode.data.attrs) && isUndef(vnode.data.attrs)) {\n    return\n  }\n  var key, cur, old;\n  var elm = vnode.elm;\n  var oldAttrs = oldVnode.data.attrs || {};\n  var attrs = vnode.data.attrs || {};\n  // clone observed objects, as the user probably wants to mutate it\n  if (isDef(attrs.__ob__)) {\n    attrs = vnode.data.attrs = extend({}, attrs);\n  }\n\n  for (key in attrs) {\n    cur = attrs[key];\n    old = oldAttrs[key];\n    if (old !== cur) {\n      setAttr(elm, key, cur);\n    }\n  }\n  // #4391: in IE9, setting type can reset value for input[type=radio]\n  // #6666: IE/Edge forces progress value down to 1 before setting a max\n  /* istanbul ignore if */\n  if ((isIE || isEdge) && attrs.value !== oldAttrs.value) {\n    setAttr(elm, 'value', attrs.value);\n  }\n  for (key in oldAttrs) {\n    if (isUndef(attrs[key])) {\n      if (isXlink(key)) {\n        elm.removeAttributeNS(xlinkNS, getXlinkProp(key));\n      } else if (!isEnumeratedAttr(key)) {\n        elm.removeAttribute(key);\n      }\n    }\n  }\n}\n\nfunction setAttr (el, key, value) {\n  if (el.tagName.indexOf('-') > -1) {\n    baseSetAttr(el, key, value);\n  } else if (isBooleanAttr(key)) {\n    // set attribute for blank value\n    // e.g. <option disabled>Select one</option>\n    if (isFalsyAttrValue(value)) {\n      el.removeAttribute(key);\n    } else {\n      // technically allowfullscreen is a boolean attribute for <iframe>,\n      // but Flash expects a value of \"true\" when used on <embed> tag\n      value = key === 'allowfullscreen' && el.tagName === 'EMBED'\n        ? 'true'\n        : key;\n      el.setAttribute(key, value);\n    }\n  } else if (isEnumeratedAttr(key)) {\n    el.setAttribute(key, convertEnumeratedValue(key, value));\n  } else if (isXlink(key)) {\n    if (isFalsyAttrValue(value)) {\n      el.removeAttributeNS(xlinkNS, getXlinkProp(key));\n    } else {\n      el.setAttributeNS(xlinkNS, key, value);\n    }\n  } else {\n    baseSetAttr(el, key, value);\n  }\n}\n\nfunction baseSetAttr (el, key, value) {\n  if (isFalsyAttrValue(value)) {\n    el.removeAttribute(key);\n  } else {\n    // #7138: IE10 & 11 fires input event when setting placeholder on\n    // <textarea>... block the first input event and remove the blocker\n    // immediately.\n    /* istanbul ignore if */\n    if (\n      isIE && !isIE9 &&\n      el.tagName === 'TEXTAREA' &&\n      key === 'placeholder' && value !== '' && !el.__ieph\n    ) {\n      var blocker = function (e) {\n        e.stopImmediatePropagation();\n        el.removeEventListener('input', blocker);\n      };\n      el.addEventListener('input', blocker);\n      // $flow-disable-line\n      el.__ieph = true; /* IE placeholder patched */\n    }\n    el.setAttribute(key, value);\n  }\n}\n\nvar attrs = {\n  create: updateAttrs,\n  update: updateAttrs\n};\n\n/*  */\n\nfunction updateClass (oldVnode, vnode) {\n  var el = vnode.elm;\n  var data = vnode.data;\n  var oldData = oldVnode.data;\n  if (\n    isUndef(data.staticClass) &&\n    isUndef(data.class) && (\n      isUndef(oldData) || (\n        isUndef(oldData.staticClass) &&\n        isUndef(oldData.class)\n      )\n    )\n  ) {\n    return\n  }\n\n  var cls = genClassForVnode(vnode);\n\n  // handle transition classes\n  var transitionClass = el._transitionClasses;\n  if (isDef(transitionClass)) {\n    cls = concat(cls, stringifyClass(transitionClass));\n  }\n\n  // set the class\n  if (cls !== el._prevClass) {\n    el.setAttribute('class', cls);\n    el._prevClass = cls;\n  }\n}\n\nvar klass = {\n  create: updateClass,\n  update: updateClass\n};\n\n/*  */\n\nvar validDivisionCharRE = /[\\w).+\\-_$\\]]/;\n\nfunction parseFilters (exp) {\n  var inSingle = false;\n  var inDouble = false;\n  var inTemplateString = false;\n  var inRegex = false;\n  var curly = 0;\n  var square = 0;\n  var paren = 0;\n  var lastFilterIndex = 0;\n  var c, prev, i, expression, filters;\n\n  for (i = 0; i < exp.length; i++) {\n    prev = c;\n    c = exp.charCodeAt(i);\n    if (inSingle) {\n      if (c === 0x27 && prev !== 0x5C) { inSingle = false; }\n    } else if (inDouble) {\n      if (c === 0x22 && prev !== 0x5C) { inDouble = false; }\n    } else if (inTemplateString) {\n      if (c === 0x60 && prev !== 0x5C) { inTemplateString = false; }\n    } else if (inRegex) {\n      if (c === 0x2f && prev !== 0x5C) { inRegex = false; }\n    } else if (\n      c === 0x7C && // pipe\n      exp.charCodeAt(i + 1) !== 0x7C &&\n      exp.charCodeAt(i - 1) !== 0x7C &&\n      !curly && !square && !paren\n    ) {\n      if (expression === undefined) {\n        // first filter, end of expression\n        lastFilterIndex = i + 1;\n        expression = exp.slice(0, i).trim();\n      } else {\n        pushFilter();\n      }\n    } else {\n      switch (c) {\n        case 0x22: inDouble = true; break         // \"\n        case 0x27: inSingle = true; break         // '\n        case 0x60: inTemplateString = true; break // `\n        case 0x28: paren++; break                 // (\n        case 0x29: paren--; break                 // )\n        case 0x5B: square++; break                // [\n        case 0x5D: square--; break                // ]\n        case 0x7B: curly++; break                 // {\n        case 0x7D: curly--; break                 // }\n      }\n      if (c === 0x2f) { // /\n        var j = i - 1;\n        var p = (void 0);\n        // find first non-whitespace prev char\n        for (; j >= 0; j--) {\n          p = exp.charAt(j);\n          if (p !== ' ') { break }\n        }\n        if (!p || !validDivisionCharRE.test(p)) {\n          inRegex = true;\n        }\n      }\n    }\n  }\n\n  if (expression === undefined) {\n    expression = exp.slice(0, i).trim();\n  } else if (lastFilterIndex !== 0) {\n    pushFilter();\n  }\n\n  function pushFilter () {\n    (filters || (filters = [])).push(exp.slice(lastFilterIndex, i).trim());\n    lastFilterIndex = i + 1;\n  }\n\n  if (filters) {\n    for (i = 0; i < filters.length; i++) {\n      expression = wrapFilter(expression, filters[i]);\n    }\n  }\n\n  return expression\n}\n\nfunction wrapFilter (exp, filter) {\n  var i = filter.indexOf('(');\n  if (i < 0) {\n    // _f: resolveFilter\n    return (\"_f(\\\"\" + filter + \"\\\")(\" + exp + \")\")\n  } else {\n    var name = filter.slice(0, i);\n    var args = filter.slice(i + 1);\n    return (\"_f(\\\"\" + name + \"\\\")(\" + exp + (args !== ')' ? ',' + args : args))\n  }\n}\n\n/*  */\n\n\n\n/* eslint-disable no-unused-vars */\nfunction baseWarn (msg, range) {\n  console.error((\"[Vue compiler]: \" + msg));\n}\n/* eslint-enable no-unused-vars */\n\nfunction pluckModuleFunction (\n  modules,\n  key\n) {\n  return modules\n    ? modules.map(function (m) { return m[key]; }).filter(function (_) { return _; })\n    : []\n}\n\nfunction addProp (el, name, value, range, dynamic) {\n  (el.props || (el.props = [])).push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range));\n  el.plain = false;\n}\n\nfunction addAttr (el, name, value, range, dynamic) {\n  var attrs = dynamic\n    ? (el.dynamicAttrs || (el.dynamicAttrs = []))\n    : (el.attrs || (el.attrs = []));\n  attrs.push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range));\n  el.plain = false;\n}\n\n// add a raw attr (use this in preTransforms)\nfunction addRawAttr (el, name, value, range) {\n  el.attrsMap[name] = value;\n  el.attrsList.push(rangeSetItem({ name: name, value: value }, range));\n}\n\nfunction addDirective (\n  el,\n  name,\n  rawName,\n  value,\n  arg,\n  isDynamicArg,\n  modifiers,\n  range\n) {\n  (el.directives || (el.directives = [])).push(rangeSetItem({\n    name: name,\n    rawName: rawName,\n    value: value,\n    arg: arg,\n    isDynamicArg: isDynamicArg,\n    modifiers: modifiers\n  }, range));\n  el.plain = false;\n}\n\nfunction prependModifierMarker (symbol, name, dynamic) {\n  return dynamic\n    ? (\"_p(\" + name + \",\\\"\" + symbol + \"\\\")\")\n    : symbol + name // mark the event as captured\n}\n\nfunction addHandler (\n  el,\n  name,\n  value,\n  modifiers,\n  important,\n  warn,\n  range,\n  dynamic\n) {\n  modifiers = modifiers || emptyObject;\n  // warn prevent and passive modifier\n  /* istanbul ignore if */\n  if (\n     true && warn &&\n    modifiers.prevent && modifiers.passive\n  ) {\n    warn(\n      'passive and prevent can\\'t be used together. ' +\n      'Passive handler can\\'t prevent default event.',\n      range\n    );\n  }\n\n  // normalize click.right and click.middle since they don't actually fire\n  // this is technically browser-specific, but at least for now browsers are\n  // the only target envs that have right/middle clicks.\n  if (modifiers.right) {\n    if (dynamic) {\n      name = \"(\" + name + \")==='click'?'contextmenu':(\" + name + \")\";\n    } else if (name === 'click') {\n      name = 'contextmenu';\n      delete modifiers.right;\n    }\n  } else if (modifiers.middle) {\n    if (dynamic) {\n      name = \"(\" + name + \")==='click'?'mouseup':(\" + name + \")\";\n    } else if (name === 'click') {\n      name = 'mouseup';\n    }\n  }\n\n  // check capture modifier\n  if (modifiers.capture) {\n    delete modifiers.capture;\n    name = prependModifierMarker('!', name, dynamic);\n  }\n  if (modifiers.once) {\n    delete modifiers.once;\n    name = prependModifierMarker('~', name, dynamic);\n  }\n  /* istanbul ignore if */\n  if (modifiers.passive) {\n    delete modifiers.passive;\n    name = prependModifierMarker('&', name, dynamic);\n  }\n\n  var events;\n  if (modifiers.native) {\n    delete modifiers.native;\n    events = el.nativeEvents || (el.nativeEvents = {});\n  } else {\n    events = el.events || (el.events = {});\n  }\n\n  var newHandler = rangeSetItem({ value: value.trim(), dynamic: dynamic }, range);\n  if (modifiers !== emptyObject) {\n    newHandler.modifiers = modifiers;\n  }\n\n  var handlers = events[name];\n  /* istanbul ignore if */\n  if (Array.isArray(handlers)) {\n    important ? handlers.unshift(newHandler) : handlers.push(newHandler);\n  } else if (handlers) {\n    events[name] = important ? [newHandler, handlers] : [handlers, newHandler];\n  } else {\n    events[name] = newHandler;\n  }\n\n  el.plain = false;\n}\n\nfunction getRawBindingAttr (\n  el,\n  name\n) {\n  return el.rawAttrsMap[':' + name] ||\n    el.rawAttrsMap['v-bind:' + name] ||\n    el.rawAttrsMap[name]\n}\n\nfunction getBindingAttr (\n  el,\n  name,\n  getStatic\n) {\n  var dynamicValue =\n    getAndRemoveAttr(el, ':' + name) ||\n    getAndRemoveAttr(el, 'v-bind:' + name);\n  if (dynamicValue != null) {\n    return parseFilters(dynamicValue)\n  } else if (getStatic !== false) {\n    var staticValue = getAndRemoveAttr(el, name);\n    if (staticValue != null) {\n      return JSON.stringify(staticValue)\n    }\n  }\n}\n\n// note: this only removes the attr from the Array (attrsList) so that it\n// doesn't get processed by processAttrs.\n// By default it does NOT remove it from the map (attrsMap) because the map is\n// needed during codegen.\nfunction getAndRemoveAttr (\n  el,\n  name,\n  removeFromMap\n) {\n  var val;\n  if ((val = el.attrsMap[name]) != null) {\n    var list = el.attrsList;\n    for (var i = 0, l = list.length; i < l; i++) {\n      if (list[i].name === name) {\n        list.splice(i, 1);\n        break\n      }\n    }\n  }\n  if (removeFromMap) {\n    delete el.attrsMap[name];\n  }\n  return val\n}\n\nfunction getAndRemoveAttrByRegex (\n  el,\n  name\n) {\n  var list = el.attrsList;\n  for (var i = 0, l = list.length; i < l; i++) {\n    var attr = list[i];\n    if (name.test(attr.name)) {\n      list.splice(i, 1);\n      return attr\n    }\n  }\n}\n\nfunction rangeSetItem (\n  item,\n  range\n) {\n  if (range) {\n    if (range.start != null) {\n      item.start = range.start;\n    }\n    if (range.end != null) {\n      item.end = range.end;\n    }\n  }\n  return item\n}\n\n/*  */\n\n/**\n * Cross-platform code generation for component v-model\n */\nfunction genComponentModel (\n  el,\n  value,\n  modifiers\n) {\n  var ref = modifiers || {};\n  var number = ref.number;\n  var trim = ref.trim;\n\n  var baseValueExpression = '$$v';\n  var valueExpression = baseValueExpression;\n  if (trim) {\n    valueExpression =\n      \"(typeof \" + baseValueExpression + \" === 'string'\" +\n      \"? \" + baseValueExpression + \".trim()\" +\n      \": \" + baseValueExpression + \")\";\n  }\n  if (number) {\n    valueExpression = \"_n(\" + valueExpression + \")\";\n  }\n  var assignment = genAssignmentCode(value, valueExpression);\n\n  el.model = {\n    value: (\"(\" + value + \")\"),\n    expression: JSON.stringify(value),\n    callback: (\"function (\" + baseValueExpression + \") {\" + assignment + \"}\")\n  };\n}\n\n/**\n * Cross-platform codegen helper for generating v-model value assignment code.\n */\nfunction genAssignmentCode (\n  value,\n  assignment\n) {\n  var res = parseModel(value);\n  if (res.key === null) {\n    return (value + \"=\" + assignment)\n  } else {\n    return (\"$set(\" + (res.exp) + \", \" + (res.key) + \", \" + assignment + \")\")\n  }\n}\n\n/**\n * Parse a v-model expression into a base path and a final key segment.\n * Handles both dot-path and possible square brackets.\n *\n * Possible cases:\n *\n * - test\n * - test[key]\n * - test[test1[key]]\n * - test[\"a\"][key]\n * - xxx.test[a[a].test1[key]]\n * - test.xxx.a[\"asa\"][test1[key]]\n *\n */\n\nvar len, str, chr, index$1, expressionPos, expressionEndPos;\n\n\n\nfunction parseModel (val) {\n  // Fix https://github.com/vuejs/vue/pull/7730\n  // allow v-model=\"obj.val \" (trailing whitespace)\n  val = val.trim();\n  len = val.length;\n\n  if (val.indexOf('[') < 0 || val.lastIndexOf(']') < len - 1) {\n    index$1 = val.lastIndexOf('.');\n    if (index$1 > -1) {\n      return {\n        exp: val.slice(0, index$1),\n        key: '\"' + val.slice(index$1 + 1) + '\"'\n      }\n    } else {\n      return {\n        exp: val,\n        key: null\n      }\n    }\n  }\n\n  str = val;\n  index$1 = expressionPos = expressionEndPos = 0;\n\n  while (!eof()) {\n    chr = next();\n    /* istanbul ignore if */\n    if (isStringStart(chr)) {\n      parseString(chr);\n    } else if (chr === 0x5B) {\n      parseBracket(chr);\n    }\n  }\n\n  return {\n    exp: val.slice(0, expressionPos),\n    key: val.slice(expressionPos + 1, expressionEndPos)\n  }\n}\n\nfunction next () {\n  return str.charCodeAt(++index$1)\n}\n\nfunction eof () {\n  return index$1 >= len\n}\n\nfunction isStringStart (chr) {\n  return chr === 0x22 || chr === 0x27\n}\n\nfunction parseBracket (chr) {\n  var inBracket = 1;\n  expressionPos = index$1;\n  while (!eof()) {\n    chr = next();\n    if (isStringStart(chr)) {\n      parseString(chr);\n      continue\n    }\n    if (chr === 0x5B) { inBracket++; }\n    if (chr === 0x5D) { inBracket--; }\n    if (inBracket === 0) {\n      expressionEndPos = index$1;\n      break\n    }\n  }\n}\n\nfunction parseString (chr) {\n  var stringQuote = chr;\n  while (!eof()) {\n    chr = next();\n    if (chr === stringQuote) {\n      break\n    }\n  }\n}\n\n/*  */\n\nvar warn$1;\n\n// in some cases, the event used has to be determined at runtime\n// so we used some reserved tokens during compile.\nvar RANGE_TOKEN = '__r';\nvar CHECKBOX_RADIO_TOKEN = '__c';\n\nfunction model (\n  el,\n  dir,\n  _warn\n) {\n  warn$1 = _warn;\n  var value = dir.value;\n  var modifiers = dir.modifiers;\n  var tag = el.tag;\n  var type = el.attrsMap.type;\n\n  if (true) {\n    // inputs with type=\"file\" are read only and setting the input's\n    // value will throw an error.\n    if (tag === 'input' && type === 'file') {\n      warn$1(\n        \"<\" + (el.tag) + \" v-model=\\\"\" + value + \"\\\" type=\\\"file\\\">:\\n\" +\n        \"File inputs are read only. Use a v-on:change listener instead.\",\n        el.rawAttrsMap['v-model']\n      );\n    }\n  }\n\n  if (el.component) {\n    genComponentModel(el, value, modifiers);\n    // component v-model doesn't need extra runtime\n    return false\n  } else if (tag === 'select') {\n    genSelect(el, value, modifiers);\n  } else if (tag === 'input' && type === 'checkbox') {\n    genCheckboxModel(el, value, modifiers);\n  } else if (tag === 'input' && type === 'radio') {\n    genRadioModel(el, value, modifiers);\n  } else if (tag === 'input' || tag === 'textarea') {\n    genDefaultModel(el, value, modifiers);\n  } else if (!config.isReservedTag(tag)) {\n    genComponentModel(el, value, modifiers);\n    // component v-model doesn't need extra runtime\n    return false\n  } else if (true) {\n    warn$1(\n      \"<\" + (el.tag) + \" v-model=\\\"\" + value + \"\\\">: \" +\n      \"v-model is not supported on this element type. \" +\n      'If you are working with contenteditable, it\\'s recommended to ' +\n      'wrap a library dedicated for that purpose inside a custom component.',\n      el.rawAttrsMap['v-model']\n    );\n  }\n\n  // ensure runtime directive metadata\n  return true\n}\n\nfunction genCheckboxModel (\n  el,\n  value,\n  modifiers\n) {\n  var number = modifiers && modifiers.number;\n  var valueBinding = getBindingAttr(el, 'value') || 'null';\n  var trueValueBinding = getBindingAttr(el, 'true-value') || 'true';\n  var falseValueBinding = getBindingAttr(el, 'false-value') || 'false';\n  addProp(el, 'checked',\n    \"Array.isArray(\" + value + \")\" +\n    \"?_i(\" + value + \",\" + valueBinding + \")>-1\" + (\n      trueValueBinding === 'true'\n        ? (\":(\" + value + \")\")\n        : (\":_q(\" + value + \",\" + trueValueBinding + \")\")\n    )\n  );\n  addHandler(el, 'change',\n    \"var $$a=\" + value + \",\" +\n        '$$el=$event.target,' +\n        \"$$c=$$el.checked?(\" + trueValueBinding + \"):(\" + falseValueBinding + \");\" +\n    'if(Array.isArray($$a)){' +\n      \"var $$v=\" + (number ? '_n(' + valueBinding + ')' : valueBinding) + \",\" +\n          '$$i=_i($$a,$$v);' +\n      \"if($$el.checked){$$i<0&&(\" + (genAssignmentCode(value, '$$a.concat([$$v])')) + \")}\" +\n      \"else{$$i>-1&&(\" + (genAssignmentCode(value, '$$a.slice(0,$$i).concat($$a.slice($$i+1))')) + \")}\" +\n    \"}else{\" + (genAssignmentCode(value, '$$c')) + \"}\",\n    null, true\n  );\n}\n\nfunction genRadioModel (\n  el,\n  value,\n  modifiers\n) {\n  var number = modifiers && modifiers.number;\n  var valueBinding = getBindingAttr(el, 'value') || 'null';\n  valueBinding = number ? (\"_n(\" + valueBinding + \")\") : valueBinding;\n  addProp(el, 'checked', (\"_q(\" + value + \",\" + valueBinding + \")\"));\n  addHandler(el, 'change', genAssignmentCode(value, valueBinding), null, true);\n}\n\nfunction genSelect (\n  el,\n  value,\n  modifiers\n) {\n  var number = modifiers && modifiers.number;\n  var selectedVal = \"Array.prototype.filter\" +\n    \".call($event.target.options,function(o){return o.selected})\" +\n    \".map(function(o){var val = \\\"_value\\\" in o ? o._value : o.value;\" +\n    \"return \" + (number ? '_n(val)' : 'val') + \"})\";\n\n  var assignment = '$event.target.multiple ? $$selectedVal : $$selectedVal[0]';\n  var code = \"var $$selectedVal = \" + selectedVal + \";\";\n  code = code + \" \" + (genAssignmentCode(value, assignment));\n  addHandler(el, 'change', code, null, true);\n}\n\nfunction genDefaultModel (\n  el,\n  value,\n  modifiers\n) {\n  var type = el.attrsMap.type;\n\n  // warn if v-bind:value conflicts with v-model\n  // except for inputs with v-bind:type\n  if (true) {\n    var value$1 = el.attrsMap['v-bind:value'] || el.attrsMap[':value'];\n    var typeBinding = el.attrsMap['v-bind:type'] || el.attrsMap[':type'];\n    if (value$1 && !typeBinding) {\n      var binding = el.attrsMap['v-bind:value'] ? 'v-bind:value' : ':value';\n      warn$1(\n        binding + \"=\\\"\" + value$1 + \"\\\" conflicts with v-model on the same element \" +\n        'because the latter already expands to a value binding internally',\n        el.rawAttrsMap[binding]\n      );\n    }\n  }\n\n  var ref = modifiers || {};\n  var lazy = ref.lazy;\n  var number = ref.number;\n  var trim = ref.trim;\n  var needCompositionGuard = !lazy && type !== 'range';\n  var event = lazy\n    ? 'change'\n    : type === 'range'\n      ? RANGE_TOKEN\n      : 'input';\n\n  var valueExpression = '$event.target.value';\n  if (trim) {\n    valueExpression = \"$event.target.value.trim()\";\n  }\n  if (number) {\n    valueExpression = \"_n(\" + valueExpression + \")\";\n  }\n\n  var code = genAssignmentCode(value, valueExpression);\n  if (needCompositionGuard) {\n    code = \"if($event.target.composing)return;\" + code;\n  }\n\n  addProp(el, 'value', (\"(\" + value + \")\"));\n  addHandler(el, event, code, null, true);\n  if (trim || number) {\n    addHandler(el, 'blur', '$forceUpdate()');\n  }\n}\n\n/*  */\n\n// normalize v-model event tokens that can only be determined at runtime.\n// it's important to place the event as the first in the array because\n// the whole point is ensuring the v-model callback gets called before\n// user-attached handlers.\nfunction normalizeEvents (on) {\n  /* istanbul ignore if */\n  if (isDef(on[RANGE_TOKEN])) {\n    // IE input[type=range] only supports `change` event\n    var event = isIE ? 'change' : 'input';\n    on[event] = [].concat(on[RANGE_TOKEN], on[event] || []);\n    delete on[RANGE_TOKEN];\n  }\n  // This was originally intended to fix #4521 but no longer necessary\n  // after 2.5. Keeping it for backwards compat with generated code from < 2.4\n  /* istanbul ignore if */\n  if (isDef(on[CHECKBOX_RADIO_TOKEN])) {\n    on.change = [].concat(on[CHECKBOX_RADIO_TOKEN], on.change || []);\n    delete on[CHECKBOX_RADIO_TOKEN];\n  }\n}\n\nvar target$1;\n\nfunction createOnceHandler$1 (event, handler, capture) {\n  var _target = target$1; // save current target element in closure\n  return function onceHandler () {\n    var res = handler.apply(null, arguments);\n    if (res !== null) {\n      remove$2(event, onceHandler, capture, _target);\n    }\n  }\n}\n\n// #9446: Firefox <= 53 (in particular, ESR 52) has incorrect Event.timeStamp\n// implementation and does not fire microtasks in between event propagation, so\n// safe to exclude.\nvar useMicrotaskFix = isUsingMicroTask && !(isFF && Number(isFF[1]) <= 53);\n\nfunction add$1 (\n  name,\n  handler,\n  capture,\n  passive\n) {\n  // async edge case #6566: inner click event triggers patch, event handler\n  // attached to outer element during patch, and triggered again. This\n  // happens because browsers fire microtask ticks between event propagation.\n  // the solution is simple: we save the timestamp when a handler is attached,\n  // and the handler would only fire if the event passed to it was fired\n  // AFTER it was attached.\n  if (useMicrotaskFix) {\n    var attachedTimestamp = currentFlushTimestamp;\n    var original = handler;\n    handler = original._wrapper = function (e) {\n      if (\n        // no bubbling, should always fire.\n        // this is just a safety net in case event.timeStamp is unreliable in\n        // certain weird environments...\n        e.target === e.currentTarget ||\n        // event is fired after handler attachment\n        e.timeStamp >= attachedTimestamp ||\n        // bail for environments that have buggy event.timeStamp implementations\n        // #9462 iOS 9 bug: event.timeStamp is 0 after history.pushState\n        // #9681 QtWebEngine event.timeStamp is negative value\n        e.timeStamp <= 0 ||\n        // #9448 bail if event is fired in another document in a multi-page\n        // electron/nw.js app, since event.timeStamp will be using a different\n        // starting reference\n        e.target.ownerDocument !== document\n      ) {\n        return original.apply(this, arguments)\n      }\n    };\n  }\n  target$1.addEventListener(\n    name,\n    handler,\n    supportsPassive\n      ? { capture: capture, passive: passive }\n      : capture\n  );\n}\n\nfunction remove$2 (\n  name,\n  handler,\n  capture,\n  _target\n) {\n  (_target || target$1).removeEventListener(\n    name,\n    handler._wrapper || handler,\n    capture\n  );\n}\n\nfunction updateDOMListeners (oldVnode, vnode) {\n  if (isUndef(oldVnode.data.on) && isUndef(vnode.data.on)) {\n    return\n  }\n  var on = vnode.data.on || {};\n  var oldOn = oldVnode.data.on || {};\n  target$1 = vnode.elm;\n  normalizeEvents(on);\n  updateListeners(on, oldOn, add$1, remove$2, createOnceHandler$1, vnode.context);\n  target$1 = undefined;\n}\n\nvar events = {\n  create: updateDOMListeners,\n  update: updateDOMListeners\n};\n\n/*  */\n\nvar svgContainer;\n\nfunction updateDOMProps (oldVnode, vnode) {\n  if (isUndef(oldVnode.data.domProps) && isUndef(vnode.data.domProps)) {\n    return\n  }\n  var key, cur;\n  var elm = vnode.elm;\n  var oldProps = oldVnode.data.domProps || {};\n  var props = vnode.data.domProps || {};\n  // clone observed objects, as the user probably wants to mutate it\n  if (isDef(props.__ob__)) {\n    props = vnode.data.domProps = extend({}, props);\n  }\n\n  for (key in oldProps) {\n    if (!(key in props)) {\n      elm[key] = '';\n    }\n  }\n\n  for (key in props) {\n    cur = props[key];\n    // ignore children if the node has textContent or innerHTML,\n    // as these will throw away existing DOM nodes and cause removal errors\n    // on subsequent patches (#3360)\n    if (key === 'textContent' || key === 'innerHTML') {\n      if (vnode.children) { vnode.children.length = 0; }\n      if (cur === oldProps[key]) { continue }\n      // #6601 work around Chrome version <= 55 bug where single textNode\n      // replaced by innerHTML/textContent retains its parentNode property\n      if (elm.childNodes.length === 1) {\n        elm.removeChild(elm.childNodes[0]);\n      }\n    }\n\n    if (key === 'value' && elm.tagName !== 'PROGRESS') {\n      // store value as _value as well since\n      // non-string values will be stringified\n      elm._value = cur;\n      // avoid resetting cursor position when value is the same\n      var strCur = isUndef(cur) ? '' : String(cur);\n      if (shouldUpdateValue(elm, strCur)) {\n        elm.value = strCur;\n      }\n    } else if (key === 'innerHTML' && isSVG(elm.tagName) && isUndef(elm.innerHTML)) {\n      // IE doesn't support innerHTML for SVG elements\n      svgContainer = svgContainer || document.createElement('div');\n      svgContainer.innerHTML = \"<svg>\" + cur + \"</svg>\";\n      var svg = svgContainer.firstChild;\n      while (elm.firstChild) {\n        elm.removeChild(elm.firstChild);\n      }\n      while (svg.firstChild) {\n        elm.appendChild(svg.firstChild);\n      }\n    } else if (\n      // skip the update if old and new VDOM state is the same.\n      // `value` is handled separately because the DOM value may be temporarily\n      // out of sync with VDOM state due to focus, composition and modifiers.\n      // This  #4521 by skipping the unnecessary `checked` update.\n      cur !== oldProps[key]\n    ) {\n      // some property updates can throw\n      // e.g. `value` on <progress> w/ non-finite value\n      try {\n        elm[key] = cur;\n      } catch (e) {}\n    }\n  }\n}\n\n// check platforms/web/util/attrs.js acceptValue\n\n\nfunction shouldUpdateValue (elm, checkVal) {\n  return (!elm.composing && (\n    elm.tagName === 'OPTION' ||\n    isNotInFocusAndDirty(elm, checkVal) ||\n    isDirtyWithModifiers(elm, checkVal)\n  ))\n}\n\nfunction isNotInFocusAndDirty (elm, checkVal) {\n  // return true when textbox (.number and .trim) loses focus and its value is\n  // not equal to the updated value\n  var notInFocus = true;\n  // #6157\n  // work around IE bug when accessing document.activeElement in an iframe\n  try { notInFocus = document.activeElement !== elm; } catch (e) {}\n  return notInFocus && elm.value !== checkVal\n}\n\nfunction isDirtyWithModifiers (elm, newVal) {\n  var value = elm.value;\n  var modifiers = elm._vModifiers; // injected by v-model runtime\n  if (isDef(modifiers)) {\n    if (modifiers.number) {\n      return toNumber(value) !== toNumber(newVal)\n    }\n    if (modifiers.trim) {\n      return value.trim() !== newVal.trim()\n    }\n  }\n  return value !== newVal\n}\n\nvar domProps = {\n  create: updateDOMProps,\n  update: updateDOMProps\n};\n\n/*  */\n\nvar parseStyleText = cached(function (cssText) {\n  var res = {};\n  var listDelimiter = /;(?![^(]*\\))/g;\n  var propertyDelimiter = /:(.+)/;\n  cssText.split(listDelimiter).forEach(function (item) {\n    if (item) {\n      var tmp = item.split(propertyDelimiter);\n      tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim());\n    }\n  });\n  return res\n});\n\n// merge static and dynamic style data on the same vnode\nfunction normalizeStyleData (data) {\n  var style = normalizeStyleBinding(data.style);\n  // static style is pre-processed into an object during compilation\n  // and is always a fresh object, so it's safe to merge into it\n  return data.staticStyle\n    ? extend(data.staticStyle, style)\n    : style\n}\n\n// normalize possible array / string values into Object\nfunction normalizeStyleBinding (bindingStyle) {\n  if (Array.isArray(bindingStyle)) {\n    return toObject(bindingStyle)\n  }\n  if (typeof bindingStyle === 'string') {\n    return parseStyleText(bindingStyle)\n  }\n  return bindingStyle\n}\n\n/**\n * parent component style should be after child's\n * so that parent component's style could override it\n */\nfunction getStyle (vnode, checkChild) {\n  var res = {};\n  var styleData;\n\n  if (checkChild) {\n    var childNode = vnode;\n    while (childNode.componentInstance) {\n      childNode = childNode.componentInstance._vnode;\n      if (\n        childNode && childNode.data &&\n        (styleData = normalizeStyleData(childNode.data))\n      ) {\n        extend(res, styleData);\n      }\n    }\n  }\n\n  if ((styleData = normalizeStyleData(vnode.data))) {\n    extend(res, styleData);\n  }\n\n  var parentNode = vnode;\n  while ((parentNode = parentNode.parent)) {\n    if (parentNode.data && (styleData = normalizeStyleData(parentNode.data))) {\n      extend(res, styleData);\n    }\n  }\n  return res\n}\n\n/*  */\n\nvar cssVarRE = /^--/;\nvar importantRE = /\\s*!important$/;\nvar setProp = function (el, name, val) {\n  /* istanbul ignore if */\n  if (cssVarRE.test(name)) {\n    el.style.setProperty(name, val);\n  } else if (importantRE.test(val)) {\n    el.style.setProperty(hyphenate(name), val.replace(importantRE, ''), 'important');\n  } else {\n    var normalizedName = normalize(name);\n    if (Array.isArray(val)) {\n      // Support values array created by autoprefixer, e.g.\n      // {display: [\"-webkit-box\", \"-ms-flexbox\", \"flex\"]}\n      // Set them one by one, and the browser will only set those it can recognize\n      for (var i = 0, len = val.length; i < len; i++) {\n        el.style[normalizedName] = val[i];\n      }\n    } else {\n      el.style[normalizedName] = val;\n    }\n  }\n};\n\nvar vendorNames = ['Webkit', 'Moz', 'ms'];\n\nvar emptyStyle;\nvar normalize = cached(function (prop) {\n  emptyStyle = emptyStyle || document.createElement('div').style;\n  prop = camelize(prop);\n  if (prop !== 'filter' && (prop in emptyStyle)) {\n    return prop\n  }\n  var capName = prop.charAt(0).toUpperCase() + prop.slice(1);\n  for (var i = 0; i < vendorNames.length; i++) {\n    var name = vendorNames[i] + capName;\n    if (name in emptyStyle) {\n      return name\n    }\n  }\n});\n\nfunction updateStyle (oldVnode, vnode) {\n  var data = vnode.data;\n  var oldData = oldVnode.data;\n\n  if (isUndef(data.staticStyle) && isUndef(data.style) &&\n    isUndef(oldData.staticStyle) && isUndef(oldData.style)\n  ) {\n    return\n  }\n\n  var cur, name;\n  var el = vnode.elm;\n  var oldStaticStyle = oldData.staticStyle;\n  var oldStyleBinding = oldData.normalizedStyle || oldData.style || {};\n\n  // if static style exists, stylebinding already merged into it when doing normalizeStyleData\n  var oldStyle = oldStaticStyle || oldStyleBinding;\n\n  var style = normalizeStyleBinding(vnode.data.style) || {};\n\n  // store normalized style under a different key for next diff\n  // make sure to clone it if it's reactive, since the user likely wants\n  // to mutate it.\n  vnode.data.normalizedStyle = isDef(style.__ob__)\n    ? extend({}, style)\n    : style;\n\n  var newStyle = getStyle(vnode, true);\n\n  for (name in oldStyle) {\n    if (isUndef(newStyle[name])) {\n      setProp(el, name, '');\n    }\n  }\n  for (name in newStyle) {\n    cur = newStyle[name];\n    if (cur !== oldStyle[name]) {\n      // ie9 setting to null has no effect, must use empty string\n      setProp(el, name, cur == null ? '' : cur);\n    }\n  }\n}\n\nvar style = {\n  create: updateStyle,\n  update: updateStyle\n};\n\n/*  */\n\nvar whitespaceRE = /\\s+/;\n\n/**\n * Add class with compatibility for SVG since classList is not supported on\n * SVG elements in IE\n */\nfunction addClass (el, cls) {\n  /* istanbul ignore if */\n  if (!cls || !(cls = cls.trim())) {\n    return\n  }\n\n  /* istanbul ignore else */\n  if (el.classList) {\n    if (cls.indexOf(' ') > -1) {\n      cls.split(whitespaceRE).forEach(function (c) { return el.classList.add(c); });\n    } else {\n      el.classList.add(cls);\n    }\n  } else {\n    var cur = \" \" + (el.getAttribute('class') || '') + \" \";\n    if (cur.indexOf(' ' + cls + ' ') < 0) {\n      el.setAttribute('class', (cur + cls).trim());\n    }\n  }\n}\n\n/**\n * Remove class with compatibility for SVG since classList is not supported on\n * SVG elements in IE\n */\nfunction removeClass (el, cls) {\n  /* istanbul ignore if */\n  if (!cls || !(cls = cls.trim())) {\n    return\n  }\n\n  /* istanbul ignore else */\n  if (el.classList) {\n    if (cls.indexOf(' ') > -1) {\n      cls.split(whitespaceRE).forEach(function (c) { return el.classList.remove(c); });\n    } else {\n      el.classList.remove(cls);\n    }\n    if (!el.classList.length) {\n      el.removeAttribute('class');\n    }\n  } else {\n    var cur = \" \" + (el.getAttribute('class') || '') + \" \";\n    var tar = ' ' + cls + ' ';\n    while (cur.indexOf(tar) >= 0) {\n      cur = cur.replace(tar, ' ');\n    }\n    cur = cur.trim();\n    if (cur) {\n      el.setAttribute('class', cur);\n    } else {\n      el.removeAttribute('class');\n    }\n  }\n}\n\n/*  */\n\nfunction resolveTransition (def$$1) {\n  if (!def$$1) {\n    return\n  }\n  /* istanbul ignore else */\n  if (typeof def$$1 === 'object') {\n    var res = {};\n    if (def$$1.css !== false) {\n      extend(res, autoCssTransition(def$$1.name || 'v'));\n    }\n    extend(res, def$$1);\n    return res\n  } else if (typeof def$$1 === 'string') {\n    return autoCssTransition(def$$1)\n  }\n}\n\nvar autoCssTransition = cached(function (name) {\n  return {\n    enterClass: (name + \"-enter\"),\n    enterToClass: (name + \"-enter-to\"),\n    enterActiveClass: (name + \"-enter-active\"),\n    leaveClass: (name + \"-leave\"),\n    leaveToClass: (name + \"-leave-to\"),\n    leaveActiveClass: (name + \"-leave-active\")\n  }\n});\n\nvar hasTransition = inBrowser && !isIE9;\nvar TRANSITION = 'transition';\nvar ANIMATION = 'animation';\n\n// Transition property/event sniffing\nvar transitionProp = 'transition';\nvar transitionEndEvent = 'transitionend';\nvar animationProp = 'animation';\nvar animationEndEvent = 'animationend';\nif (hasTransition) {\n  /* istanbul ignore if */\n  if (window.ontransitionend === undefined &&\n    window.onwebkittransitionend !== undefined\n  ) {\n    transitionProp = 'WebkitTransition';\n    transitionEndEvent = 'webkitTransitionEnd';\n  }\n  if (window.onanimationend === undefined &&\n    window.onwebkitanimationend !== undefined\n  ) {\n    animationProp = 'WebkitAnimation';\n    animationEndEvent = 'webkitAnimationEnd';\n  }\n}\n\n// binding to window is necessary to make hot reload work in IE in strict mode\nvar raf = inBrowser\n  ? window.requestAnimationFrame\n    ? window.requestAnimationFrame.bind(window)\n    : setTimeout\n  : /* istanbul ignore next */ function (fn) { return fn(); };\n\nfunction nextFrame (fn) {\n  raf(function () {\n    raf(fn);\n  });\n}\n\nfunction addTransitionClass (el, cls) {\n  var transitionClasses = el._transitionClasses || (el._transitionClasses = []);\n  if (transitionClasses.indexOf(cls) < 0) {\n    transitionClasses.push(cls);\n    addClass(el, cls);\n  }\n}\n\nfunction removeTransitionClass (el, cls) {\n  if (el._transitionClasses) {\n    remove(el._transitionClasses, cls);\n  }\n  removeClass(el, cls);\n}\n\nfunction whenTransitionEnds (\n  el,\n  expectedType,\n  cb\n) {\n  var ref = getTransitionInfo(el, expectedType);\n  var type = ref.type;\n  var timeout = ref.timeout;\n  var propCount = ref.propCount;\n  if (!type) { return cb() }\n  var event = type === TRANSITION ? transitionEndEvent : animationEndEvent;\n  var ended = 0;\n  var end = function () {\n    el.removeEventListener(event, onEnd);\n    cb();\n  };\n  var onEnd = function (e) {\n    if (e.target === el) {\n      if (++ended >= propCount) {\n        end();\n      }\n    }\n  };\n  setTimeout(function () {\n    if (ended < propCount) {\n      end();\n    }\n  }, timeout + 1);\n  el.addEventListener(event, onEnd);\n}\n\nvar transformRE = /\\b(transform|all)(,|$)/;\n\nfunction getTransitionInfo (el, expectedType) {\n  var styles = window.getComputedStyle(el);\n  // JSDOM may return undefined for transition properties\n  var transitionDelays = (styles[transitionProp + 'Delay'] || '').split(', ');\n  var transitionDurations = (styles[transitionProp + 'Duration'] || '').split(', ');\n  var transitionTimeout = getTimeout(transitionDelays, transitionDurations);\n  var animationDelays = (styles[animationProp + 'Delay'] || '').split(', ');\n  var animationDurations = (styles[animationProp + 'Duration'] || '').split(', ');\n  var animationTimeout = getTimeout(animationDelays, animationDurations);\n\n  var type;\n  var timeout = 0;\n  var propCount = 0;\n  /* istanbul ignore if */\n  if (expectedType === TRANSITION) {\n    if (transitionTimeout > 0) {\n      type = TRANSITION;\n      timeout = transitionTimeout;\n      propCount = transitionDurations.length;\n    }\n  } else if (expectedType === ANIMATION) {\n    if (animationTimeout > 0) {\n      type = ANIMATION;\n      timeout = animationTimeout;\n      propCount = animationDurations.length;\n    }\n  } else {\n    timeout = Math.max(transitionTimeout, animationTimeout);\n    type = timeout > 0\n      ? transitionTimeout > animationTimeout\n        ? TRANSITION\n        : ANIMATION\n      : null;\n    propCount = type\n      ? type === TRANSITION\n        ? transitionDurations.length\n        : animationDurations.length\n      : 0;\n  }\n  var hasTransform =\n    type === TRANSITION &&\n    transformRE.test(styles[transitionProp + 'Property']);\n  return {\n    type: type,\n    timeout: timeout,\n    propCount: propCount,\n    hasTransform: hasTransform\n  }\n}\n\nfunction getTimeout (delays, durations) {\n  /* istanbul ignore next */\n  while (delays.length < durations.length) {\n    delays = delays.concat(delays);\n  }\n\n  return Math.max.apply(null, durations.map(function (d, i) {\n    return toMs(d) + toMs(delays[i])\n  }))\n}\n\n// Old versions of Chromium (below 61.0.3163.100) formats floating pointer numbers\n// in a locale-dependent way, using a comma instead of a dot.\n// If comma is not replaced with a dot, the input will be rounded down (i.e. acting\n// as a floor function) causing unexpected behaviors\nfunction toMs (s) {\n  return Number(s.slice(0, -1).replace(',', '.')) * 1000\n}\n\n/*  */\n\nfunction enter (vnode, toggleDisplay) {\n  var el = vnode.elm;\n\n  // call leave callback now\n  if (isDef(el._leaveCb)) {\n    el._leaveCb.cancelled = true;\n    el._leaveCb();\n  }\n\n  var data = resolveTransition(vnode.data.transition);\n  if (isUndef(data)) {\n    return\n  }\n\n  /* istanbul ignore if */\n  if (isDef(el._enterCb) || el.nodeType !== 1) {\n    return\n  }\n\n  var css = data.css;\n  var type = data.type;\n  var enterClass = data.enterClass;\n  var enterToClass = data.enterToClass;\n  var enterActiveClass = data.enterActiveClass;\n  var appearClass = data.appearClass;\n  var appearToClass = data.appearToClass;\n  var appearActiveClass = data.appearActiveClass;\n  var beforeEnter = data.beforeEnter;\n  var enter = data.enter;\n  var afterEnter = data.afterEnter;\n  var enterCancelled = data.enterCancelled;\n  var beforeAppear = data.beforeAppear;\n  var appear = data.appear;\n  var afterAppear = data.afterAppear;\n  var appearCancelled = data.appearCancelled;\n  var duration = data.duration;\n\n  // activeInstance will always be the <transition> component managing this\n  // transition. One edge case to check is when the <transition> is placed\n  // as the root node of a child component. In that case we need to check\n  // <transition>'s parent for appear check.\n  var context = activeInstance;\n  var transitionNode = activeInstance.$vnode;\n  while (transitionNode && transitionNode.parent) {\n    context = transitionNode.context;\n    transitionNode = transitionNode.parent;\n  }\n\n  var isAppear = !context._isMounted || !vnode.isRootInsert;\n\n  if (isAppear && !appear && appear !== '') {\n    return\n  }\n\n  var startClass = isAppear && appearClass\n    ? appearClass\n    : enterClass;\n  var activeClass = isAppear && appearActiveClass\n    ? appearActiveClass\n    : enterActiveClass;\n  var toClass = isAppear && appearToClass\n    ? appearToClass\n    : enterToClass;\n\n  var beforeEnterHook = isAppear\n    ? (beforeAppear || beforeEnter)\n    : beforeEnter;\n  var enterHook = isAppear\n    ? (typeof appear === 'function' ? appear : enter)\n    : enter;\n  var afterEnterHook = isAppear\n    ? (afterAppear || afterEnter)\n    : afterEnter;\n  var enterCancelledHook = isAppear\n    ? (appearCancelled || enterCancelled)\n    : enterCancelled;\n\n  var explicitEnterDuration = toNumber(\n    isObject(duration)\n      ? duration.enter\n      : duration\n  );\n\n  if ( true && explicitEnterDuration != null) {\n    checkDuration(explicitEnterDuration, 'enter', vnode);\n  }\n\n  var expectsCSS = css !== false && !isIE9;\n  var userWantsControl = getHookArgumentsLength(enterHook);\n\n  var cb = el._enterCb = once(function () {\n    if (expectsCSS) {\n      removeTransitionClass(el, toClass);\n      removeTransitionClass(el, activeClass);\n    }\n    if (cb.cancelled) {\n      if (expectsCSS) {\n        removeTransitionClass(el, startClass);\n      }\n      enterCancelledHook && enterCancelledHook(el);\n    } else {\n      afterEnterHook && afterEnterHook(el);\n    }\n    el._enterCb = null;\n  });\n\n  if (!vnode.data.show) {\n    // remove pending leave element on enter by injecting an insert hook\n    mergeVNodeHook(vnode, 'insert', function () {\n      var parent = el.parentNode;\n      var pendingNode = parent && parent._pending && parent._pending[vnode.key];\n      if (pendingNode &&\n        pendingNode.tag === vnode.tag &&\n        pendingNode.elm._leaveCb\n      ) {\n        pendingNode.elm._leaveCb();\n      }\n      enterHook && enterHook(el, cb);\n    });\n  }\n\n  // start enter transition\n  beforeEnterHook && beforeEnterHook(el);\n  if (expectsCSS) {\n    addTransitionClass(el, startClass);\n    addTransitionClass(el, activeClass);\n    nextFrame(function () {\n      removeTransitionClass(el, startClass);\n      if (!cb.cancelled) {\n        addTransitionClass(el, toClass);\n        if (!userWantsControl) {\n          if (isValidDuration(explicitEnterDuration)) {\n            setTimeout(cb, explicitEnterDuration);\n          } else {\n            whenTransitionEnds(el, type, cb);\n          }\n        }\n      }\n    });\n  }\n\n  if (vnode.data.show) {\n    toggleDisplay && toggleDisplay();\n    enterHook && enterHook(el, cb);\n  }\n\n  if (!expectsCSS && !userWantsControl) {\n    cb();\n  }\n}\n\nfunction leave (vnode, rm) {\n  var el = vnode.elm;\n\n  // call enter callback now\n  if (isDef(el._enterCb)) {\n    el._enterCb.cancelled = true;\n    el._enterCb();\n  }\n\n  var data = resolveTransition(vnode.data.transition);\n  if (isUndef(data) || el.nodeType !== 1) {\n    return rm()\n  }\n\n  /* istanbul ignore if */\n  if (isDef(el._leaveCb)) {\n    return\n  }\n\n  var css = data.css;\n  var type = data.type;\n  var leaveClass = data.leaveClass;\n  var leaveToClass = data.leaveToClass;\n  var leaveActiveClass = data.leaveActiveClass;\n  var beforeLeave = data.beforeLeave;\n  var leave = data.leave;\n  var afterLeave = data.afterLeave;\n  var leaveCancelled = data.leaveCancelled;\n  var delayLeave = data.delayLeave;\n  var duration = data.duration;\n\n  var expectsCSS = css !== false && !isIE9;\n  var userWantsControl = getHookArgumentsLength(leave);\n\n  var explicitLeaveDuration = toNumber(\n    isObject(duration)\n      ? duration.leave\n      : duration\n  );\n\n  if ( true && isDef(explicitLeaveDuration)) {\n    checkDuration(explicitLeaveDuration, 'leave', vnode);\n  }\n\n  var cb = el._leaveCb = once(function () {\n    if (el.parentNode && el.parentNode._pending) {\n      el.parentNode._pending[vnode.key] = null;\n    }\n    if (expectsCSS) {\n      removeTransitionClass(el, leaveToClass);\n      removeTransitionClass(el, leaveActiveClass);\n    }\n    if (cb.cancelled) {\n      if (expectsCSS) {\n        removeTransitionClass(el, leaveClass);\n      }\n      leaveCancelled && leaveCancelled(el);\n    } else {\n      rm();\n      afterLeave && afterLeave(el);\n    }\n    el._leaveCb = null;\n  });\n\n  if (delayLeave) {\n    delayLeave(performLeave);\n  } else {\n    performLeave();\n  }\n\n  function performLeave () {\n    // the delayed leave may have already been cancelled\n    if (cb.cancelled) {\n      return\n    }\n    // record leaving element\n    if (!vnode.data.show && el.parentNode) {\n      (el.parentNode._pending || (el.parentNode._pending = {}))[(vnode.key)] = vnode;\n    }\n    beforeLeave && beforeLeave(el);\n    if (expectsCSS) {\n      addTransitionClass(el, leaveClass);\n      addTransitionClass(el, leaveActiveClass);\n      nextFrame(function () {\n        removeTransitionClass(el, leaveClass);\n        if (!cb.cancelled) {\n          addTransitionClass(el, leaveToClass);\n          if (!userWantsControl) {\n            if (isValidDuration(explicitLeaveDuration)) {\n              setTimeout(cb, explicitLeaveDuration);\n            } else {\n              whenTransitionEnds(el, type, cb);\n            }\n          }\n        }\n      });\n    }\n    leave && leave(el, cb);\n    if (!expectsCSS && !userWantsControl) {\n      cb();\n    }\n  }\n}\n\n// only used in dev mode\nfunction checkDuration (val, name, vnode) {\n  if (typeof val !== 'number') {\n    warn(\n      \"<transition> explicit \" + name + \" duration is not a valid number - \" +\n      \"got \" + (JSON.stringify(val)) + \".\",\n      vnode.context\n    );\n  } else if (isNaN(val)) {\n    warn(\n      \"<transition> explicit \" + name + \" duration is NaN - \" +\n      'the duration expression might be incorrect.',\n      vnode.context\n    );\n  }\n}\n\nfunction isValidDuration (val) {\n  return typeof val === 'number' && !isNaN(val)\n}\n\n/**\n * Normalize a transition hook's argument length. The hook may be:\n * - a merged hook (invoker) with the original in .fns\n * - a wrapped component method (check ._length)\n * - a plain function (.length)\n */\nfunction getHookArgumentsLength (fn) {\n  if (isUndef(fn)) {\n    return false\n  }\n  var invokerFns = fn.fns;\n  if (isDef(invokerFns)) {\n    // invoker\n    return getHookArgumentsLength(\n      Array.isArray(invokerFns)\n        ? invokerFns[0]\n        : invokerFns\n    )\n  } else {\n    return (fn._length || fn.length) > 1\n  }\n}\n\nfunction _enter (_, vnode) {\n  if (vnode.data.show !== true) {\n    enter(vnode);\n  }\n}\n\nvar transition = inBrowser ? {\n  create: _enter,\n  activate: _enter,\n  remove: function remove$$1 (vnode, rm) {\n    /* istanbul ignore else */\n    if (vnode.data.show !== true) {\n      leave(vnode, rm);\n    } else {\n      rm();\n    }\n  }\n} : {};\n\nvar platformModules = [\n  attrs,\n  klass,\n  events,\n  domProps,\n  style,\n  transition\n];\n\n/*  */\n\n// the directive module should be applied last, after all\n// built-in modules have been applied.\nvar modules = platformModules.concat(baseModules);\n\nvar patch = createPatchFunction({ nodeOps: nodeOps, modules: modules });\n\n/**\n * Not type checking this file because flow doesn't like attaching\n * properties to Elements.\n */\n\n/* istanbul ignore if */\nif (isIE9) {\n  // http://www.matts411.com/post/internet-explorer-9-oninput/\n  document.addEventListener('selectionchange', function () {\n    var el = document.activeElement;\n    if (el && el.vmodel) {\n      trigger(el, 'input');\n    }\n  });\n}\n\nvar directive = {\n  inserted: function inserted (el, binding, vnode, oldVnode) {\n    if (vnode.tag === 'select') {\n      // #6903\n      if (oldVnode.elm && !oldVnode.elm._vOptions) {\n        mergeVNodeHook(vnode, 'postpatch', function () {\n          directive.componentUpdated(el, binding, vnode);\n        });\n      } else {\n        setSelected(el, binding, vnode.context);\n      }\n      el._vOptions = [].map.call(el.options, getValue);\n    } else if (vnode.tag === 'textarea' || isTextInputType(el.type)) {\n      el._vModifiers = binding.modifiers;\n      if (!binding.modifiers.lazy) {\n        el.addEventListener('compositionstart', onCompositionStart);\n        el.addEventListener('compositionend', onCompositionEnd);\n        // Safari < 10.2 & UIWebView doesn't fire compositionend when\n        // switching focus before confirming composition choice\n        // this also fixes the issue where some browsers e.g. iOS Chrome\n        // fires \"change\" instead of \"input\" on autocomplete.\n        el.addEventListener('change', onCompositionEnd);\n        /* istanbul ignore if */\n        if (isIE9) {\n          el.vmodel = true;\n        }\n      }\n    }\n  },\n\n  componentUpdated: function componentUpdated (el, binding, vnode) {\n    if (vnode.tag === 'select') {\n      setSelected(el, binding, vnode.context);\n      // in case the options rendered by v-for have changed,\n      // it's possible that the value is out-of-sync with the rendered options.\n      // detect such cases and filter out values that no longer has a matching\n      // option in the DOM.\n      var prevOptions = el._vOptions;\n      var curOptions = el._vOptions = [].map.call(el.options, getValue);\n      if (curOptions.some(function (o, i) { return !looseEqual(o, prevOptions[i]); })) {\n        // trigger change event if\n        // no matching option found for at least one value\n        var needReset = el.multiple\n          ? binding.value.some(function (v) { return hasNoMatchingOption(v, curOptions); })\n          : binding.value !== binding.oldValue && hasNoMatchingOption(binding.value, curOptions);\n        if (needReset) {\n          trigger(el, 'change');\n        }\n      }\n    }\n  }\n};\n\nfunction setSelected (el, binding, vm) {\n  actuallySetSelected(el, binding, vm);\n  /* istanbul ignore if */\n  if (isIE || isEdge) {\n    setTimeout(function () {\n      actuallySetSelected(el, binding, vm);\n    }, 0);\n  }\n}\n\nfunction actuallySetSelected (el, binding, vm) {\n  var value = binding.value;\n  var isMultiple = el.multiple;\n  if (isMultiple && !Array.isArray(value)) {\n     true && warn(\n      \"<select multiple v-model=\\\"\" + (binding.expression) + \"\\\"> \" +\n      \"expects an Array value for its binding, but got \" + (Object.prototype.toString.call(value).slice(8, -1)),\n      vm\n    );\n    return\n  }\n  var selected, option;\n  for (var i = 0, l = el.options.length; i < l; i++) {\n    option = el.options[i];\n    if (isMultiple) {\n      selected = looseIndexOf(value, getValue(option)) > -1;\n      if (option.selected !== selected) {\n        option.selected = selected;\n      }\n    } else {\n      if (looseEqual(getValue(option), value)) {\n        if (el.selectedIndex !== i) {\n          el.selectedIndex = i;\n        }\n        return\n      }\n    }\n  }\n  if (!isMultiple) {\n    el.selectedIndex = -1;\n  }\n}\n\nfunction hasNoMatchingOption (value, options) {\n  return options.every(function (o) { return !looseEqual(o, value); })\n}\n\nfunction getValue (option) {\n  return '_value' in option\n    ? option._value\n    : option.value\n}\n\nfunction onCompositionStart (e) {\n  e.target.composing = true;\n}\n\nfunction onCompositionEnd (e) {\n  // prevent triggering an input event for no reason\n  if (!e.target.composing) { return }\n  e.target.composing = false;\n  trigger(e.target, 'input');\n}\n\nfunction trigger (el, type) {\n  var e = document.createEvent('HTMLEvents');\n  e.initEvent(type, true, true);\n  el.dispatchEvent(e);\n}\n\n/*  */\n\n// recursively search for possible transition defined inside the component root\nfunction locateNode (vnode) {\n  return vnode.componentInstance && (!vnode.data || !vnode.data.transition)\n    ? locateNode(vnode.componentInstance._vnode)\n    : vnode\n}\n\nvar show = {\n  bind: function bind (el, ref, vnode) {\n    var value = ref.value;\n\n    vnode = locateNode(vnode);\n    var transition$$1 = vnode.data && vnode.data.transition;\n    var originalDisplay = el.__vOriginalDisplay =\n      el.style.display === 'none' ? '' : el.style.display;\n    if (value && transition$$1) {\n      vnode.data.show = true;\n      enter(vnode, function () {\n        el.style.display = originalDisplay;\n      });\n    } else {\n      el.style.display = value ? originalDisplay : 'none';\n    }\n  },\n\n  update: function update (el, ref, vnode) {\n    var value = ref.value;\n    var oldValue = ref.oldValue;\n\n    /* istanbul ignore if */\n    if (!value === !oldValue) { return }\n    vnode = locateNode(vnode);\n    var transition$$1 = vnode.data && vnode.data.transition;\n    if (transition$$1) {\n      vnode.data.show = true;\n      if (value) {\n        enter(vnode, function () {\n          el.style.display = el.__vOriginalDisplay;\n        });\n      } else {\n        leave(vnode, function () {\n          el.style.display = 'none';\n        });\n      }\n    } else {\n      el.style.display = value ? el.__vOriginalDisplay : 'none';\n    }\n  },\n\n  unbind: function unbind (\n    el,\n    binding,\n    vnode,\n    oldVnode,\n    isDestroy\n  ) {\n    if (!isDestroy) {\n      el.style.display = el.__vOriginalDisplay;\n    }\n  }\n};\n\nvar platformDirectives = {\n  model: directive,\n  show: show\n};\n\n/*  */\n\nvar transitionProps = {\n  name: String,\n  appear: Boolean,\n  css: Boolean,\n  mode: String,\n  type: String,\n  enterClass: String,\n  leaveClass: String,\n  enterToClass: String,\n  leaveToClass: String,\n  enterActiveClass: String,\n  leaveActiveClass: String,\n  appearClass: String,\n  appearActiveClass: String,\n  appearToClass: String,\n  duration: [Number, String, Object]\n};\n\n// in case the child is also an abstract component, e.g. <keep-alive>\n// we want to recursively retrieve the real component to be rendered\nfunction getRealChild (vnode) {\n  var compOptions = vnode && vnode.componentOptions;\n  if (compOptions && compOptions.Ctor.options.abstract) {\n    return getRealChild(getFirstComponentChild(compOptions.children))\n  } else {\n    return vnode\n  }\n}\n\nfunction extractTransitionData (comp) {\n  var data = {};\n  var options = comp.$options;\n  // props\n  for (var key in options.propsData) {\n    data[key] = comp[key];\n  }\n  // events.\n  // extract listeners and pass them directly to the transition methods\n  var listeners = options._parentListeners;\n  for (var key$1 in listeners) {\n    data[camelize(key$1)] = listeners[key$1];\n  }\n  return data\n}\n\nfunction placeholder (h, rawChild) {\n  if (/\\d-keep-alive$/.test(rawChild.tag)) {\n    return h('keep-alive', {\n      props: rawChild.componentOptions.propsData\n    })\n  }\n}\n\nfunction hasParentTransition (vnode) {\n  while ((vnode = vnode.parent)) {\n    if (vnode.data.transition) {\n      return true\n    }\n  }\n}\n\nfunction isSameChild (child, oldChild) {\n  return oldChild.key === child.key && oldChild.tag === child.tag\n}\n\nvar isNotTextNode = function (c) { return c.tag || isAsyncPlaceholder(c); };\n\nvar isVShowDirective = function (d) { return d.name === 'show'; };\n\nvar Transition = {\n  name: 'transition',\n  props: transitionProps,\n  abstract: true,\n\n  render: function render (h) {\n    var this$1 = this;\n\n    var children = this.$slots.default;\n    if (!children) {\n      return\n    }\n\n    // filter out text nodes (possible whitespaces)\n    children = children.filter(isNotTextNode);\n    /* istanbul ignore if */\n    if (!children.length) {\n      return\n    }\n\n    // warn multiple elements\n    if ( true && children.length > 1) {\n      warn(\n        '<transition> can only be used on a single element. Use ' +\n        '<transition-group> for lists.',\n        this.$parent\n      );\n    }\n\n    var mode = this.mode;\n\n    // warn invalid mode\n    if ( true &&\n      mode && mode !== 'in-out' && mode !== 'out-in'\n    ) {\n      warn(\n        'invalid <transition> mode: ' + mode,\n        this.$parent\n      );\n    }\n\n    var rawChild = children[0];\n\n    // if this is a component root node and the component's\n    // parent container node also has transition, skip.\n    if (hasParentTransition(this.$vnode)) {\n      return rawChild\n    }\n\n    // apply transition data to child\n    // use getRealChild() to ignore abstract components e.g. keep-alive\n    var child = getRealChild(rawChild);\n    /* istanbul ignore if */\n    if (!child) {\n      return rawChild\n    }\n\n    if (this._leaving) {\n      return placeholder(h, rawChild)\n    }\n\n    // ensure a key that is unique to the vnode type and to this transition\n    // component instance. This key will be used to remove pending leaving nodes\n    // during entering.\n    var id = \"__transition-\" + (this._uid) + \"-\";\n    child.key = child.key == null\n      ? child.isComment\n        ? id + 'comment'\n        : id + child.tag\n      : isPrimitive(child.key)\n        ? (String(child.key).indexOf(id) === 0 ? child.key : id + child.key)\n        : child.key;\n\n    var data = (child.data || (child.data = {})).transition = extractTransitionData(this);\n    var oldRawChild = this._vnode;\n    var oldChild = getRealChild(oldRawChild);\n\n    // mark v-show\n    // so that the transition module can hand over the control to the directive\n    if (child.data.directives && child.data.directives.some(isVShowDirective)) {\n      child.data.show = true;\n    }\n\n    if (\n      oldChild &&\n      oldChild.data &&\n      !isSameChild(child, oldChild) &&\n      !isAsyncPlaceholder(oldChild) &&\n      // #6687 component root is a comment node\n      !(oldChild.componentInstance && oldChild.componentInstance._vnode.isComment)\n    ) {\n      // replace old child transition data with fresh one\n      // important for dynamic transitions!\n      var oldData = oldChild.data.transition = extend({}, data);\n      // handle transition mode\n      if (mode === 'out-in') {\n        // return placeholder node and queue update when leave finishes\n        this._leaving = true;\n        mergeVNodeHook(oldData, 'afterLeave', function () {\n          this$1._leaving = false;\n          this$1.$forceUpdate();\n        });\n        return placeholder(h, rawChild)\n      } else if (mode === 'in-out') {\n        if (isAsyncPlaceholder(child)) {\n          return oldRawChild\n        }\n        var delayedLeave;\n        var performLeave = function () { delayedLeave(); };\n        mergeVNodeHook(data, 'afterEnter', performLeave);\n        mergeVNodeHook(data, 'enterCancelled', performLeave);\n        mergeVNodeHook(oldData, 'delayLeave', function (leave) { delayedLeave = leave; });\n      }\n    }\n\n    return rawChild\n  }\n};\n\n/*  */\n\nvar props = extend({\n  tag: String,\n  moveClass: String\n}, transitionProps);\n\ndelete props.mode;\n\nvar TransitionGroup = {\n  props: props,\n\n  beforeMount: function beforeMount () {\n    var this$1 = this;\n\n    var update = this._update;\n    this._update = function (vnode, hydrating) {\n      var restoreActiveInstance = setActiveInstance(this$1);\n      // force removing pass\n      this$1.__patch__(\n        this$1._vnode,\n        this$1.kept,\n        false, // hydrating\n        true // removeOnly (!important, avoids unnecessary moves)\n      );\n      this$1._vnode = this$1.kept;\n      restoreActiveInstance();\n      update.call(this$1, vnode, hydrating);\n    };\n  },\n\n  render: function render (h) {\n    var tag = this.tag || this.$vnode.data.tag || 'span';\n    var map = Object.create(null);\n    var prevChildren = this.prevChildren = this.children;\n    var rawChildren = this.$slots.default || [];\n    var children = this.children = [];\n    var transitionData = extractTransitionData(this);\n\n    for (var i = 0; i < rawChildren.length; i++) {\n      var c = rawChildren[i];\n      if (c.tag) {\n        if (c.key != null && String(c.key).indexOf('__vlist') !== 0) {\n          children.push(c);\n          map[c.key] = c\n          ;(c.data || (c.data = {})).transition = transitionData;\n        } else if (true) {\n          var opts = c.componentOptions;\n          var name = opts ? (opts.Ctor.options.name || opts.tag || '') : c.tag;\n          warn((\"<transition-group> children must be keyed: <\" + name + \">\"));\n        }\n      }\n    }\n\n    if (prevChildren) {\n      var kept = [];\n      var removed = [];\n      for (var i$1 = 0; i$1 < prevChildren.length; i$1++) {\n        var c$1 = prevChildren[i$1];\n        c$1.data.transition = transitionData;\n        c$1.data.pos = c$1.elm.getBoundingClientRect();\n        if (map[c$1.key]) {\n          kept.push(c$1);\n        } else {\n          removed.push(c$1);\n        }\n      }\n      this.kept = h(tag, null, kept);\n      this.removed = removed;\n    }\n\n    return h(tag, null, children)\n  },\n\n  updated: function updated () {\n    var children = this.prevChildren;\n    var moveClass = this.moveClass || ((this.name || 'v') + '-move');\n    if (!children.length || !this.hasMove(children[0].elm, moveClass)) {\n      return\n    }\n\n    // we divide the work into three loops to avoid mixing DOM reads and writes\n    // in each iteration - which helps prevent layout thrashing.\n    children.forEach(callPendingCbs);\n    children.forEach(recordPosition);\n    children.forEach(applyTranslation);\n\n    // force reflow to put everything in position\n    // assign to this to avoid being removed in tree-shaking\n    // $flow-disable-line\n    this._reflow = document.body.offsetHeight;\n\n    children.forEach(function (c) {\n      if (c.data.moved) {\n        var el = c.elm;\n        var s = el.style;\n        addTransitionClass(el, moveClass);\n        s.transform = s.WebkitTransform = s.transitionDuration = '';\n        el.addEventListener(transitionEndEvent, el._moveCb = function cb (e) {\n          if (e && e.target !== el) {\n            return\n          }\n          if (!e || /transform$/.test(e.propertyName)) {\n            el.removeEventListener(transitionEndEvent, cb);\n            el._moveCb = null;\n            removeTransitionClass(el, moveClass);\n          }\n        });\n      }\n    });\n  },\n\n  methods: {\n    hasMove: function hasMove (el, moveClass) {\n      /* istanbul ignore if */\n      if (!hasTransition) {\n        return false\n      }\n      /* istanbul ignore if */\n      if (this._hasMove) {\n        return this._hasMove\n      }\n      // Detect whether an element with the move class applied has\n      // CSS transitions. Since the element may be inside an entering\n      // transition at this very moment, we make a clone of it and remove\n      // all other transition classes applied to ensure only the move class\n      // is applied.\n      var clone = el.cloneNode();\n      if (el._transitionClasses) {\n        el._transitionClasses.forEach(function (cls) { removeClass(clone, cls); });\n      }\n      addClass(clone, moveClass);\n      clone.style.display = 'none';\n      this.$el.appendChild(clone);\n      var info = getTransitionInfo(clone);\n      this.$el.removeChild(clone);\n      return (this._hasMove = info.hasTransform)\n    }\n  }\n};\n\nfunction callPendingCbs (c) {\n  /* istanbul ignore if */\n  if (c.elm._moveCb) {\n    c.elm._moveCb();\n  }\n  /* istanbul ignore if */\n  if (c.elm._enterCb) {\n    c.elm._enterCb();\n  }\n}\n\nfunction recordPosition (c) {\n  c.data.newPos = c.elm.getBoundingClientRect();\n}\n\nfunction applyTranslation (c) {\n  var oldPos = c.data.pos;\n  var newPos = c.data.newPos;\n  var dx = oldPos.left - newPos.left;\n  var dy = oldPos.top - newPos.top;\n  if (dx || dy) {\n    c.data.moved = true;\n    var s = c.elm.style;\n    s.transform = s.WebkitTransform = \"translate(\" + dx + \"px,\" + dy + \"px)\";\n    s.transitionDuration = '0s';\n  }\n}\n\nvar platformComponents = {\n  Transition: Transition,\n  TransitionGroup: TransitionGroup\n};\n\n/*  */\n\n// install platform specific utils\nVue.config.mustUseProp = mustUseProp;\nVue.config.isReservedTag = isReservedTag;\nVue.config.isReservedAttr = isReservedAttr;\nVue.config.getTagNamespace = getTagNamespace;\nVue.config.isUnknownElement = isUnknownElement;\n\n// install platform runtime directives & components\nextend(Vue.options.directives, platformDirectives);\nextend(Vue.options.components, platformComponents);\n\n// install platform patch function\nVue.prototype.__patch__ = inBrowser ? patch : noop;\n\n// public mount method\nVue.prototype.$mount = function (\n  el,\n  hydrating\n) {\n  el = el && inBrowser ? query(el) : undefined;\n  return mountComponent(this, el, hydrating)\n};\n\n// devtools global hook\n/* istanbul ignore next */\nif (inBrowser) {\n  setTimeout(function () {\n    if (config.devtools) {\n      if (devtools) {\n        devtools.emit('init', Vue);\n      } else if (\n        true\n      ) {\n        console[console.info ? 'info' : 'log'](\n          'Download the Vue Devtools extension for a better development experience:\\n' +\n          'https://github.com/vuejs/vue-devtools'\n        );\n      }\n    }\n    if ( true &&\n      config.productionTip !== false &&\n      typeof console !== 'undefined'\n    ) {\n      console[console.info ? 'info' : 'log'](\n        \"You are running Vue in development mode.\\n\" +\n        \"Make sure to turn on production mode when deploying for production.\\n\" +\n        \"See more tips at https://vuejs.org/guide/deployment.html\"\n      );\n    }\n  }, 0);\n}\n\n/*  */\n\nvar defaultTagRE = /\\{\\{((?:.|\\r?\\n)+?)\\}\\}/g;\nvar regexEscapeRE = /[-.*+?^${}()|[\\]\\/\\\\]/g;\n\nvar buildRegex = cached(function (delimiters) {\n  var open = delimiters[0].replace(regexEscapeRE, '\\\\$&');\n  var close = delimiters[1].replace(regexEscapeRE, '\\\\$&');\n  return new RegExp(open + '((?:.|\\\\n)+?)' + close, 'g')\n});\n\n\n\nfunction parseText (\n  text,\n  delimiters\n) {\n  var tagRE = delimiters ? buildRegex(delimiters) : defaultTagRE;\n  if (!tagRE.test(text)) {\n    return\n  }\n  var tokens = [];\n  var rawTokens = [];\n  var lastIndex = tagRE.lastIndex = 0;\n  var match, index, tokenValue;\n  while ((match = tagRE.exec(text))) {\n    index = match.index;\n    // push text token\n    if (index > lastIndex) {\n      rawTokens.push(tokenValue = text.slice(lastIndex, index));\n      tokens.push(JSON.stringify(tokenValue));\n    }\n    // tag token\n    var exp = parseFilters(match[1].trim());\n    tokens.push((\"_s(\" + exp + \")\"));\n    rawTokens.push({ '@binding': exp });\n    lastIndex = index + match[0].length;\n  }\n  if (lastIndex < text.length) {\n    rawTokens.push(tokenValue = text.slice(lastIndex));\n    tokens.push(JSON.stringify(tokenValue));\n  }\n  return {\n    expression: tokens.join('+'),\n    tokens: rawTokens\n  }\n}\n\n/*  */\n\nfunction transformNode (el, options) {\n  var warn = options.warn || baseWarn;\n  var staticClass = getAndRemoveAttr(el, 'class');\n  if ( true && staticClass) {\n    var res = parseText(staticClass, options.delimiters);\n    if (res) {\n      warn(\n        \"class=\\\"\" + staticClass + \"\\\": \" +\n        'Interpolation inside attributes has been removed. ' +\n        'Use v-bind or the colon shorthand instead. For example, ' +\n        'instead of <div class=\"{{ val }}\">, use <div :class=\"val\">.',\n        el.rawAttrsMap['class']\n      );\n    }\n  }\n  if (staticClass) {\n    el.staticClass = JSON.stringify(staticClass);\n  }\n  var classBinding = getBindingAttr(el, 'class', false /* getStatic */);\n  if (classBinding) {\n    el.classBinding = classBinding;\n  }\n}\n\nfunction genData (el) {\n  var data = '';\n  if (el.staticClass) {\n    data += \"staticClass:\" + (el.staticClass) + \",\";\n  }\n  if (el.classBinding) {\n    data += \"class:\" + (el.classBinding) + \",\";\n  }\n  return data\n}\n\nvar klass$1 = {\n  staticKeys: ['staticClass'],\n  transformNode: transformNode,\n  genData: genData\n};\n\n/*  */\n\nfunction transformNode$1 (el, options) {\n  var warn = options.warn || baseWarn;\n  var staticStyle = getAndRemoveAttr(el, 'style');\n  if (staticStyle) {\n    /* istanbul ignore if */\n    if (true) {\n      var res = parseText(staticStyle, options.delimiters);\n      if (res) {\n        warn(\n          \"style=\\\"\" + staticStyle + \"\\\": \" +\n          'Interpolation inside attributes has been removed. ' +\n          'Use v-bind or the colon shorthand instead. For example, ' +\n          'instead of <div style=\"{{ val }}\">, use <div :style=\"val\">.',\n          el.rawAttrsMap['style']\n        );\n      }\n    }\n    el.staticStyle = JSON.stringify(parseStyleText(staticStyle));\n  }\n\n  var styleBinding = getBindingAttr(el, 'style', false /* getStatic */);\n  if (styleBinding) {\n    el.styleBinding = styleBinding;\n  }\n}\n\nfunction genData$1 (el) {\n  var data = '';\n  if (el.staticStyle) {\n    data += \"staticStyle:\" + (el.staticStyle) + \",\";\n  }\n  if (el.styleBinding) {\n    data += \"style:(\" + (el.styleBinding) + \"),\";\n  }\n  return data\n}\n\nvar style$1 = {\n  staticKeys: ['staticStyle'],\n  transformNode: transformNode$1,\n  genData: genData$1\n};\n\n/*  */\n\nvar decoder;\n\nvar he = {\n  decode: function decode (html) {\n    decoder = decoder || document.createElement('div');\n    decoder.innerHTML = html;\n    return decoder.textContent\n  }\n};\n\n/*  */\n\nvar isUnaryTag = makeMap(\n  'area,base,br,col,embed,frame,hr,img,input,isindex,keygen,' +\n  'link,meta,param,source,track,wbr'\n);\n\n// Elements that you can, intentionally, leave open\n// (and which close themselves)\nvar canBeLeftOpenTag = makeMap(\n  'colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source'\n);\n\n// HTML5 tags https://html.spec.whatwg.org/multipage/indices.html#elements-3\n// Phrasing Content https://html.spec.whatwg.org/multipage/dom.html#phrasing-content\nvar isNonPhrasingTag = makeMap(\n  'address,article,aside,base,blockquote,body,caption,col,colgroup,dd,' +\n  'details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,' +\n  'h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,' +\n  'optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,' +\n  'title,tr,track'\n);\n\n/**\n * Not type-checking this file because it's mostly vendor code.\n */\n\n// Regular Expressions for parsing tags and attributes\nvar attribute = /^\\s*([^\\s\"'<>\\/=]+)(?:\\s*(=)\\s*(?:\"([^\"]*)\"+|'([^']*)'+|([^\\s\"'=<>`]+)))?/;\nvar dynamicArgAttribute = /^\\s*((?:v-[\\w-]+:|@|:|#)\\[[^=]+\\][^\\s\"'<>\\/=]*)(?:\\s*(=)\\s*(?:\"([^\"]*)\"+|'([^']*)'+|([^\\s\"'=<>`]+)))?/;\nvar ncname = \"[a-zA-Z_][\\\\-\\\\.0-9_a-zA-Z\" + (unicodeRegExp.source) + \"]*\";\nvar qnameCapture = \"((?:\" + ncname + \"\\\\:)?\" + ncname + \")\";\nvar startTagOpen = new RegExp((\"^<\" + qnameCapture));\nvar startTagClose = /^\\s*(\\/?)>/;\nvar endTag = new RegExp((\"^<\\\\/\" + qnameCapture + \"[^>]*>\"));\nvar doctype = /^<!DOCTYPE [^>]+>/i;\n// #7298: escape - to avoid being passed as HTML comment when inlined in page\nvar comment = /^<!\\--/;\nvar conditionalComment = /^<!\\[/;\n\n// Special Elements (can contain anything)\nvar isPlainTextElement = makeMap('script,style,textarea', true);\nvar reCache = {};\n\nvar decodingMap = {\n  '&lt;': '<',\n  '&gt;': '>',\n  '&quot;': '\"',\n  '&amp;': '&',\n  '&#10;': '\\n',\n  '&#9;': '\\t',\n  '&#39;': \"'\"\n};\nvar encodedAttr = /&(?:lt|gt|quot|amp|#39);/g;\nvar encodedAttrWithNewLines = /&(?:lt|gt|quot|amp|#39|#10|#9);/g;\n\n// #5992\nvar isIgnoreNewlineTag = makeMap('pre,textarea', true);\nvar shouldIgnoreFirstNewline = function (tag, html) { return tag && isIgnoreNewlineTag(tag) && html[0] === '\\n'; };\n\nfunction decodeAttr (value, shouldDecodeNewlines) {\n  var re = shouldDecodeNewlines ? encodedAttrWithNewLines : encodedAttr;\n  return value.replace(re, function (match) { return decodingMap[match]; })\n}\n\nfunction parseHTML (html, options) {\n  var stack = [];\n  var expectHTML = options.expectHTML;\n  var isUnaryTag$$1 = options.isUnaryTag || no;\n  var canBeLeftOpenTag$$1 = options.canBeLeftOpenTag || no;\n  var index = 0;\n  var last, lastTag;\n  while (html) {\n    last = html;\n    // Make sure we're not in a plaintext content element like script/style\n    if (!lastTag || !isPlainTextElement(lastTag)) {\n      var textEnd = html.indexOf('<');\n      if (textEnd === 0) {\n        // Comment:\n        if (comment.test(html)) {\n          var commentEnd = html.indexOf('-->');\n\n          if (commentEnd >= 0) {\n            if (options.shouldKeepComment) {\n              options.comment(html.substring(4, commentEnd), index, index + commentEnd + 3);\n            }\n            advance(commentEnd + 3);\n            continue\n          }\n        }\n\n        // http://en.wikipedia.org/wiki/Conditional_comment#Downlevel-revealed_conditional_comment\n        if (conditionalComment.test(html)) {\n          var conditionalEnd = html.indexOf(']>');\n\n          if (conditionalEnd >= 0) {\n            advance(conditionalEnd + 2);\n            continue\n          }\n        }\n\n        // Doctype:\n        var doctypeMatch = html.match(doctype);\n        if (doctypeMatch) {\n          advance(doctypeMatch[0].length);\n          continue\n        }\n\n        // End tag:\n        var endTagMatch = html.match(endTag);\n        if (endTagMatch) {\n          var curIndex = index;\n          advance(endTagMatch[0].length);\n          parseEndTag(endTagMatch[1], curIndex, index);\n          continue\n        }\n\n        // Start tag:\n        var startTagMatch = parseStartTag();\n        if (startTagMatch) {\n          handleStartTag(startTagMatch);\n          if (shouldIgnoreFirstNewline(startTagMatch.tagName, html)) {\n            advance(1);\n          }\n          continue\n        }\n      }\n\n      var text = (void 0), rest = (void 0), next = (void 0);\n      if (textEnd >= 0) {\n        rest = html.slice(textEnd);\n        while (\n          !endTag.test(rest) &&\n          !startTagOpen.test(rest) &&\n          !comment.test(rest) &&\n          !conditionalComment.test(rest)\n        ) {\n          // < in plain text, be forgiving and treat it as text\n          next = rest.indexOf('<', 1);\n          if (next < 0) { break }\n          textEnd += next;\n          rest = html.slice(textEnd);\n        }\n        text = html.substring(0, textEnd);\n      }\n\n      if (textEnd < 0) {\n        text = html;\n      }\n\n      if (text) {\n        advance(text.length);\n      }\n\n      if (options.chars && text) {\n        options.chars(text, index - text.length, index);\n      }\n    } else {\n      var endTagLength = 0;\n      var stackedTag = lastTag.toLowerCase();\n      var reStackedTag = reCache[stackedTag] || (reCache[stackedTag] = new RegExp('([\\\\s\\\\S]*?)(</' + stackedTag + '[^>]*>)', 'i'));\n      var rest$1 = html.replace(reStackedTag, function (all, text, endTag) {\n        endTagLength = endTag.length;\n        if (!isPlainTextElement(stackedTag) && stackedTag !== 'noscript') {\n          text = text\n            .replace(/<!\\--([\\s\\S]*?)-->/g, '$1') // #7298\n            .replace(/<!\\[CDATA\\[([\\s\\S]*?)]]>/g, '$1');\n        }\n        if (shouldIgnoreFirstNewline(stackedTag, text)) {\n          text = text.slice(1);\n        }\n        if (options.chars) {\n          options.chars(text);\n        }\n        return ''\n      });\n      index += html.length - rest$1.length;\n      html = rest$1;\n      parseEndTag(stackedTag, index - endTagLength, index);\n    }\n\n    if (html === last) {\n      options.chars && options.chars(html);\n      if ( true && !stack.length && options.warn) {\n        options.warn((\"Mal-formatted tag at end of template: \\\"\" + html + \"\\\"\"), { start: index + html.length });\n      }\n      break\n    }\n  }\n\n  // Clean up any remaining tags\n  parseEndTag();\n\n  function advance (n) {\n    index += n;\n    html = html.substring(n);\n  }\n\n  function parseStartTag () {\n    var start = html.match(startTagOpen);\n    if (start) {\n      var match = {\n        tagName: start[1],\n        attrs: [],\n        start: index\n      };\n      advance(start[0].length);\n      var end, attr;\n      while (!(end = html.match(startTagClose)) && (attr = html.match(dynamicArgAttribute) || html.match(attribute))) {\n        attr.start = index;\n        advance(attr[0].length);\n        attr.end = index;\n        match.attrs.push(attr);\n      }\n      if (end) {\n        match.unarySlash = end[1];\n        advance(end[0].length);\n        match.end = index;\n        return match\n      }\n    }\n  }\n\n  function handleStartTag (match) {\n    var tagName = match.tagName;\n    var unarySlash = match.unarySlash;\n\n    if (expectHTML) {\n      if (lastTag === 'p' && isNonPhrasingTag(tagName)) {\n        parseEndTag(lastTag);\n      }\n      if (canBeLeftOpenTag$$1(tagName) && lastTag === tagName) {\n        parseEndTag(tagName);\n      }\n    }\n\n    var unary = isUnaryTag$$1(tagName) || !!unarySlash;\n\n    var l = match.attrs.length;\n    var attrs = new Array(l);\n    for (var i = 0; i < l; i++) {\n      var args = match.attrs[i];\n      var value = args[3] || args[4] || args[5] || '';\n      var shouldDecodeNewlines = tagName === 'a' && args[1] === 'href'\n        ? options.shouldDecodeNewlinesForHref\n        : options.shouldDecodeNewlines;\n      attrs[i] = {\n        name: args[1],\n        value: decodeAttr(value, shouldDecodeNewlines)\n      };\n      if ( true && options.outputSourceRange) {\n        attrs[i].start = args.start + args[0].match(/^\\s*/).length;\n        attrs[i].end = args.end;\n      }\n    }\n\n    if (!unary) {\n      stack.push({ tag: tagName, lowerCasedTag: tagName.toLowerCase(), attrs: attrs, start: match.start, end: match.end });\n      lastTag = tagName;\n    }\n\n    if (options.start) {\n      options.start(tagName, attrs, unary, match.start, match.end);\n    }\n  }\n\n  function parseEndTag (tagName, start, end) {\n    var pos, lowerCasedTagName;\n    if (start == null) { start = index; }\n    if (end == null) { end = index; }\n\n    // Find the closest opened tag of the same type\n    if (tagName) {\n      lowerCasedTagName = tagName.toLowerCase();\n      for (pos = stack.length - 1; pos >= 0; pos--) {\n        if (stack[pos].lowerCasedTag === lowerCasedTagName) {\n          break\n        }\n      }\n    } else {\n      // If no tag name is provided, clean shop\n      pos = 0;\n    }\n\n    if (pos >= 0) {\n      // Close all the open elements, up the stack\n      for (var i = stack.length - 1; i >= pos; i--) {\n        if ( true &&\n          (i > pos || !tagName) &&\n          options.warn\n        ) {\n          options.warn(\n            (\"tag <\" + (stack[i].tag) + \"> has no matching end tag.\"),\n            { start: stack[i].start, end: stack[i].end }\n          );\n        }\n        if (options.end) {\n          options.end(stack[i].tag, start, end);\n        }\n      }\n\n      // Remove the open elements from the stack\n      stack.length = pos;\n      lastTag = pos && stack[pos - 1].tag;\n    } else if (lowerCasedTagName === 'br') {\n      if (options.start) {\n        options.start(tagName, [], true, start, end);\n      }\n    } else if (lowerCasedTagName === 'p') {\n      if (options.start) {\n        options.start(tagName, [], false, start, end);\n      }\n      if (options.end) {\n        options.end(tagName, start, end);\n      }\n    }\n  }\n}\n\n/*  */\n\nvar onRE = /^@|^v-on:/;\nvar dirRE = /^v-|^@|^:|^#/;\nvar forAliasRE = /([\\s\\S]*?)\\s+(?:in|of)\\s+([\\s\\S]*)/;\nvar forIteratorRE = /,([^,\\}\\]]*)(?:,([^,\\}\\]]*))?$/;\nvar stripParensRE = /^\\(|\\)$/g;\nvar dynamicArgRE = /^\\[.*\\]$/;\n\nvar argRE = /:(.*)$/;\nvar bindRE = /^:|^\\.|^v-bind:/;\nvar modifierRE = /\\.[^.\\]]+(?=[^\\]]*$)/g;\n\nvar slotRE = /^v-slot(:|$)|^#/;\n\nvar lineBreakRE = /[\\r\\n]/;\nvar whitespaceRE$1 = /\\s+/g;\n\nvar invalidAttributeRE = /[\\s\"'<>\\/=]/;\n\nvar decodeHTMLCached = cached(he.decode);\n\nvar emptySlotScopeToken = \"_empty_\";\n\n// configurable state\nvar warn$2;\nvar delimiters;\nvar transforms;\nvar preTransforms;\nvar postTransforms;\nvar platformIsPreTag;\nvar platformMustUseProp;\nvar platformGetTagNamespace;\nvar maybeComponent;\n\nfunction createASTElement (\n  tag,\n  attrs,\n  parent\n) {\n  return {\n    type: 1,\n    tag: tag,\n    attrsList: attrs,\n    attrsMap: makeAttrsMap(attrs),\n    rawAttrsMap: {},\n    parent: parent,\n    children: []\n  }\n}\n\n/**\n * Convert HTML string to AST.\n */\nfunction parse (\n  template,\n  options\n) {\n  warn$2 = options.warn || baseWarn;\n\n  platformIsPreTag = options.isPreTag || no;\n  platformMustUseProp = options.mustUseProp || no;\n  platformGetTagNamespace = options.getTagNamespace || no;\n  var isReservedTag = options.isReservedTag || no;\n  maybeComponent = function (el) { return !!el.component || !isReservedTag(el.tag); };\n\n  transforms = pluckModuleFunction(options.modules, 'transformNode');\n  preTransforms = pluckModuleFunction(options.modules, 'preTransformNode');\n  postTransforms = pluckModuleFunction(options.modules, 'postTransformNode');\n\n  delimiters = options.delimiters;\n\n  var stack = [];\n  var preserveWhitespace = options.preserveWhitespace !== false;\n  var whitespaceOption = options.whitespace;\n  var root;\n  var currentParent;\n  var inVPre = false;\n  var inPre = false;\n  var warned = false;\n\n  function warnOnce (msg, range) {\n    if (!warned) {\n      warned = true;\n      warn$2(msg, range);\n    }\n  }\n\n  function closeElement (element) {\n    trimEndingWhitespace(element);\n    if (!inVPre && !element.processed) {\n      element = processElement(element, options);\n    }\n    // tree management\n    if (!stack.length && element !== root) {\n      // allow root elements with v-if, v-else-if and v-else\n      if (root.if && (element.elseif || element.else)) {\n        if (true) {\n          checkRootConstraints(element);\n        }\n        addIfCondition(root, {\n          exp: element.elseif,\n          block: element\n        });\n      } else if (true) {\n        warnOnce(\n          \"Component template should contain exactly one root element. \" +\n          \"If you are using v-if on multiple elements, \" +\n          \"use v-else-if to chain them instead.\",\n          { start: element.start }\n        );\n      }\n    }\n    if (currentParent && !element.forbidden) {\n      if (element.elseif || element.else) {\n        processIfConditions(element, currentParent);\n      } else {\n        if (element.slotScope) {\n          // scoped slot\n          // keep it in the children list so that v-else(-if) conditions can\n          // find it as the prev node.\n          var name = element.slotTarget || '\"default\"'\n          ;(currentParent.scopedSlots || (currentParent.scopedSlots = {}))[name] = element;\n        }\n        currentParent.children.push(element);\n        element.parent = currentParent;\n      }\n    }\n\n    // final children cleanup\n    // filter out scoped slots\n    element.children = element.children.filter(function (c) { return !(c).slotScope; });\n    // remove trailing whitespace node again\n    trimEndingWhitespace(element);\n\n    // check pre state\n    if (element.pre) {\n      inVPre = false;\n    }\n    if (platformIsPreTag(element.tag)) {\n      inPre = false;\n    }\n    // apply post-transforms\n    for (var i = 0; i < postTransforms.length; i++) {\n      postTransforms[i](element, options);\n    }\n  }\n\n  function trimEndingWhitespace (el) {\n    // remove trailing whitespace node\n    if (!inPre) {\n      var lastNode;\n      while (\n        (lastNode = el.children[el.children.length - 1]) &&\n        lastNode.type === 3 &&\n        lastNode.text === ' '\n      ) {\n        el.children.pop();\n      }\n    }\n  }\n\n  function checkRootConstraints (el) {\n    if (el.tag === 'slot' || el.tag === 'template') {\n      warnOnce(\n        \"Cannot use <\" + (el.tag) + \"> as component root element because it may \" +\n        'contain multiple nodes.',\n        { start: el.start }\n      );\n    }\n    if (el.attrsMap.hasOwnProperty('v-for')) {\n      warnOnce(\n        'Cannot use v-for on stateful component root element because ' +\n        'it renders multiple elements.',\n        el.rawAttrsMap['v-for']\n      );\n    }\n  }\n\n  parseHTML(template, {\n    warn: warn$2,\n    expectHTML: options.expectHTML,\n    isUnaryTag: options.isUnaryTag,\n    canBeLeftOpenTag: options.canBeLeftOpenTag,\n    shouldDecodeNewlines: options.shouldDecodeNewlines,\n    shouldDecodeNewlinesForHref: options.shouldDecodeNewlinesForHref,\n    shouldKeepComment: options.comments,\n    outputSourceRange: options.outputSourceRange,\n    start: function start (tag, attrs, unary, start$1, end) {\n      // check namespace.\n      // inherit parent ns if there is one\n      var ns = (currentParent && currentParent.ns) || platformGetTagNamespace(tag);\n\n      // handle IE svg bug\n      /* istanbul ignore if */\n      if (isIE && ns === 'svg') {\n        attrs = guardIESVGBug(attrs);\n      }\n\n      var element = createASTElement(tag, attrs, currentParent);\n      if (ns) {\n        element.ns = ns;\n      }\n\n      if (true) {\n        if (options.outputSourceRange) {\n          element.start = start$1;\n          element.end = end;\n          element.rawAttrsMap = element.attrsList.reduce(function (cumulated, attr) {\n            cumulated[attr.name] = attr;\n            return cumulated\n          }, {});\n        }\n        attrs.forEach(function (attr) {\n          if (invalidAttributeRE.test(attr.name)) {\n            warn$2(\n              \"Invalid dynamic argument expression: attribute names cannot contain \" +\n              \"spaces, quotes, <, >, / or =.\",\n              {\n                start: attr.start + attr.name.indexOf(\"[\"),\n                end: attr.start + attr.name.length\n              }\n            );\n          }\n        });\n      }\n\n      if (isForbiddenTag(element) && !isServerRendering()) {\n        element.forbidden = true;\n         true && warn$2(\n          'Templates should only be responsible for mapping the state to the ' +\n          'UI. Avoid placing tags with side-effects in your templates, such as ' +\n          \"<\" + tag + \">\" + ', as they will not be parsed.',\n          { start: element.start }\n        );\n      }\n\n      // apply pre-transforms\n      for (var i = 0; i < preTransforms.length; i++) {\n        element = preTransforms[i](element, options) || element;\n      }\n\n      if (!inVPre) {\n        processPre(element);\n        if (element.pre) {\n          inVPre = true;\n        }\n      }\n      if (platformIsPreTag(element.tag)) {\n        inPre = true;\n      }\n      if (inVPre) {\n        processRawAttrs(element);\n      } else if (!element.processed) {\n        // structural directives\n        processFor(element);\n        processIf(element);\n        processOnce(element);\n      }\n\n      if (!root) {\n        root = element;\n        if (true) {\n          checkRootConstraints(root);\n        }\n      }\n\n      if (!unary) {\n        currentParent = element;\n        stack.push(element);\n      } else {\n        closeElement(element);\n      }\n    },\n\n    end: function end (tag, start, end$1) {\n      var element = stack[stack.length - 1];\n      // pop stack\n      stack.length -= 1;\n      currentParent = stack[stack.length - 1];\n      if ( true && options.outputSourceRange) {\n        element.end = end$1;\n      }\n      closeElement(element);\n    },\n\n    chars: function chars (text, start, end) {\n      if (!currentParent) {\n        if (true) {\n          if (text === template) {\n            warnOnce(\n              'Component template requires a root element, rather than just text.',\n              { start: start }\n            );\n          } else if ((text = text.trim())) {\n            warnOnce(\n              (\"text \\\"\" + text + \"\\\" outside root element will be ignored.\"),\n              { start: start }\n            );\n          }\n        }\n        return\n      }\n      // IE textarea placeholder bug\n      /* istanbul ignore if */\n      if (isIE &&\n        currentParent.tag === 'textarea' &&\n        currentParent.attrsMap.placeholder === text\n      ) {\n        return\n      }\n      var children = currentParent.children;\n      if (inPre || text.trim()) {\n        text = isTextTag(currentParent) ? text : decodeHTMLCached(text);\n      } else if (!children.length) {\n        // remove the whitespace-only node right after an opening tag\n        text = '';\n      } else if (whitespaceOption) {\n        if (whitespaceOption === 'condense') {\n          // in condense mode, remove the whitespace node if it contains\n          // line break, otherwise condense to a single space\n          text = lineBreakRE.test(text) ? '' : ' ';\n        } else {\n          text = ' ';\n        }\n      } else {\n        text = preserveWhitespace ? ' ' : '';\n      }\n      if (text) {\n        if (!inPre && whitespaceOption === 'condense') {\n          // condense consecutive whitespaces into single space\n          text = text.replace(whitespaceRE$1, ' ');\n        }\n        var res;\n        var child;\n        if (!inVPre && text !== ' ' && (res = parseText(text, delimiters))) {\n          child = {\n            type: 2,\n            expression: res.expression,\n            tokens: res.tokens,\n            text: text\n          };\n        } else if (text !== ' ' || !children.length || children[children.length - 1].text !== ' ') {\n          child = {\n            type: 3,\n            text: text\n          };\n        }\n        if (child) {\n          if ( true && options.outputSourceRange) {\n            child.start = start;\n            child.end = end;\n          }\n          children.push(child);\n        }\n      }\n    },\n    comment: function comment (text, start, end) {\n      // adding anything as a sibling to the root node is forbidden\n      // comments should still be allowed, but ignored\n      if (currentParent) {\n        var child = {\n          type: 3,\n          text: text,\n          isComment: true\n        };\n        if ( true && options.outputSourceRange) {\n          child.start = start;\n          child.end = end;\n        }\n        currentParent.children.push(child);\n      }\n    }\n  });\n  return root\n}\n\nfunction processPre (el) {\n  if (getAndRemoveAttr(el, 'v-pre') != null) {\n    el.pre = true;\n  }\n}\n\nfunction processRawAttrs (el) {\n  var list = el.attrsList;\n  var len = list.length;\n  if (len) {\n    var attrs = el.attrs = new Array(len);\n    for (var i = 0; i < len; i++) {\n      attrs[i] = {\n        name: list[i].name,\n        value: JSON.stringify(list[i].value)\n      };\n      if (list[i].start != null) {\n        attrs[i].start = list[i].start;\n        attrs[i].end = list[i].end;\n      }\n    }\n  } else if (!el.pre) {\n    // non root node in pre blocks with no attributes\n    el.plain = true;\n  }\n}\n\nfunction processElement (\n  element,\n  options\n) {\n  processKey(element);\n\n  // determine whether this is a plain element after\n  // removing structural attributes\n  element.plain = (\n    !element.key &&\n    !element.scopedSlots &&\n    !element.attrsList.length\n  );\n\n  processRef(element);\n  processSlotContent(element);\n  processSlotOutlet(element);\n  processComponent(element);\n  for (var i = 0; i < transforms.length; i++) {\n    element = transforms[i](element, options) || element;\n  }\n  processAttrs(element);\n  return element\n}\n\nfunction processKey (el) {\n  var exp = getBindingAttr(el, 'key');\n  if (exp) {\n    if (true) {\n      if (el.tag === 'template') {\n        warn$2(\n          \"<template> cannot be keyed. Place the key on real elements instead.\",\n          getRawBindingAttr(el, 'key')\n        );\n      }\n      if (el.for) {\n        var iterator = el.iterator2 || el.iterator1;\n        var parent = el.parent;\n        if (iterator && iterator === exp && parent && parent.tag === 'transition-group') {\n          warn$2(\n            \"Do not use v-for index as key on <transition-group> children, \" +\n            \"this is the same as not using keys.\",\n            getRawBindingAttr(el, 'key'),\n            true /* tip */\n          );\n        }\n      }\n    }\n    el.key = exp;\n  }\n}\n\nfunction processRef (el) {\n  var ref = getBindingAttr(el, 'ref');\n  if (ref) {\n    el.ref = ref;\n    el.refInFor = checkInFor(el);\n  }\n}\n\nfunction processFor (el) {\n  var exp;\n  if ((exp = getAndRemoveAttr(el, 'v-for'))) {\n    var res = parseFor(exp);\n    if (res) {\n      extend(el, res);\n    } else if (true) {\n      warn$2(\n        (\"Invalid v-for expression: \" + exp),\n        el.rawAttrsMap['v-for']\n      );\n    }\n  }\n}\n\n\n\nfunction parseFor (exp) {\n  var inMatch = exp.match(forAliasRE);\n  if (!inMatch) { return }\n  var res = {};\n  res.for = inMatch[2].trim();\n  var alias = inMatch[1].trim().replace(stripParensRE, '');\n  var iteratorMatch = alias.match(forIteratorRE);\n  if (iteratorMatch) {\n    res.alias = alias.replace(forIteratorRE, '').trim();\n    res.iterator1 = iteratorMatch[1].trim();\n    if (iteratorMatch[2]) {\n      res.iterator2 = iteratorMatch[2].trim();\n    }\n  } else {\n    res.alias = alias;\n  }\n  return res\n}\n\nfunction processIf (el) {\n  var exp = getAndRemoveAttr(el, 'v-if');\n  if (exp) {\n    el.if = exp;\n    addIfCondition(el, {\n      exp: exp,\n      block: el\n    });\n  } else {\n    if (getAndRemoveAttr(el, 'v-else') != null) {\n      el.else = true;\n    }\n    var elseif = getAndRemoveAttr(el, 'v-else-if');\n    if (elseif) {\n      el.elseif = elseif;\n    }\n  }\n}\n\nfunction processIfConditions (el, parent) {\n  var prev = findPrevElement(parent.children);\n  if (prev && prev.if) {\n    addIfCondition(prev, {\n      exp: el.elseif,\n      block: el\n    });\n  } else if (true) {\n    warn$2(\n      \"v-\" + (el.elseif ? ('else-if=\"' + el.elseif + '\"') : 'else') + \" \" +\n      \"used on element <\" + (el.tag) + \"> without corresponding v-if.\",\n      el.rawAttrsMap[el.elseif ? 'v-else-if' : 'v-else']\n    );\n  }\n}\n\nfunction findPrevElement (children) {\n  var i = children.length;\n  while (i--) {\n    if (children[i].type === 1) {\n      return children[i]\n    } else {\n      if ( true && children[i].text !== ' ') {\n        warn$2(\n          \"text \\\"\" + (children[i].text.trim()) + \"\\\" between v-if and v-else(-if) \" +\n          \"will be ignored.\",\n          children[i]\n        );\n      }\n      children.pop();\n    }\n  }\n}\n\nfunction addIfCondition (el, condition) {\n  if (!el.ifConditions) {\n    el.ifConditions = [];\n  }\n  el.ifConditions.push(condition);\n}\n\nfunction processOnce (el) {\n  var once$$1 = getAndRemoveAttr(el, 'v-once');\n  if (once$$1 != null) {\n    el.once = true;\n  }\n}\n\n// handle content being passed to a component as slot,\n// e.g. <template slot=\"xxx\">, <div slot-scope=\"xxx\">\nfunction processSlotContent (el) {\n  var slotScope;\n  if (el.tag === 'template') {\n    slotScope = getAndRemoveAttr(el, 'scope');\n    /* istanbul ignore if */\n    if ( true && slotScope) {\n      warn$2(\n        \"the \\\"scope\\\" attribute for scoped slots have been deprecated and \" +\n        \"replaced by \\\"slot-scope\\\" since 2.5. The new \\\"slot-scope\\\" attribute \" +\n        \"can also be used on plain elements in addition to <template> to \" +\n        \"denote scoped slots.\",\n        el.rawAttrsMap['scope'],\n        true\n      );\n    }\n    el.slotScope = slotScope || getAndRemoveAttr(el, 'slot-scope');\n  } else if ((slotScope = getAndRemoveAttr(el, 'slot-scope'))) {\n    /* istanbul ignore if */\n    if ( true && el.attrsMap['v-for']) {\n      warn$2(\n        \"Ambiguous combined usage of slot-scope and v-for on <\" + (el.tag) + \"> \" +\n        \"(v-for takes higher priority). Use a wrapper <template> for the \" +\n        \"scoped slot to make it clearer.\",\n        el.rawAttrsMap['slot-scope'],\n        true\n      );\n    }\n    el.slotScope = slotScope;\n  }\n\n  // slot=\"xxx\"\n  var slotTarget = getBindingAttr(el, 'slot');\n  if (slotTarget) {\n    el.slotTarget = slotTarget === '\"\"' ? '\"default\"' : slotTarget;\n    el.slotTargetDynamic = !!(el.attrsMap[':slot'] || el.attrsMap['v-bind:slot']);\n    // preserve slot as an attribute for native shadow DOM compat\n    // only for non-scoped slots.\n    if (el.tag !== 'template' && !el.slotScope) {\n      addAttr(el, 'slot', slotTarget, getRawBindingAttr(el, 'slot'));\n    }\n  }\n\n  // 2.6 v-slot syntax\n  {\n    if (el.tag === 'template') {\n      // v-slot on <template>\n      var slotBinding = getAndRemoveAttrByRegex(el, slotRE);\n      if (slotBinding) {\n        if (true) {\n          if (el.slotTarget || el.slotScope) {\n            warn$2(\n              \"Unexpected mixed usage of different slot syntaxes.\",\n              el\n            );\n          }\n          if (el.parent && !maybeComponent(el.parent)) {\n            warn$2(\n              \"<template v-slot> can only appear at the root level inside \" +\n              \"the receiving component\",\n              el\n            );\n          }\n        }\n        var ref = getSlotName(slotBinding);\n        var name = ref.name;\n        var dynamic = ref.dynamic;\n        el.slotTarget = name;\n        el.slotTargetDynamic = dynamic;\n        el.slotScope = slotBinding.value || emptySlotScopeToken; // force it into a scoped slot for perf\n      }\n    } else {\n      // v-slot on component, denotes default slot\n      var slotBinding$1 = getAndRemoveAttrByRegex(el, slotRE);\n      if (slotBinding$1) {\n        if (true) {\n          if (!maybeComponent(el)) {\n            warn$2(\n              \"v-slot can only be used on components or <template>.\",\n              slotBinding$1\n            );\n          }\n          if (el.slotScope || el.slotTarget) {\n            warn$2(\n              \"Unexpected mixed usage of different slot syntaxes.\",\n              el\n            );\n          }\n          if (el.scopedSlots) {\n            warn$2(\n              \"To avoid scope ambiguity, the default slot should also use \" +\n              \"<template> syntax when there are other named slots.\",\n              slotBinding$1\n            );\n          }\n        }\n        // add the component's children to its default slot\n        var slots = el.scopedSlots || (el.scopedSlots = {});\n        var ref$1 = getSlotName(slotBinding$1);\n        var name$1 = ref$1.name;\n        var dynamic$1 = ref$1.dynamic;\n        var slotContainer = slots[name$1] = createASTElement('template', [], el);\n        slotContainer.slotTarget = name$1;\n        slotContainer.slotTargetDynamic = dynamic$1;\n        slotContainer.children = el.children.filter(function (c) {\n          if (!c.slotScope) {\n            c.parent = slotContainer;\n            return true\n          }\n        });\n        slotContainer.slotScope = slotBinding$1.value || emptySlotScopeToken;\n        // remove children as they are returned from scopedSlots now\n        el.children = [];\n        // mark el non-plain so data gets generated\n        el.plain = false;\n      }\n    }\n  }\n}\n\nfunction getSlotName (binding) {\n  var name = binding.name.replace(slotRE, '');\n  if (!name) {\n    if (binding.name[0] !== '#') {\n      name = 'default';\n    } else if (true) {\n      warn$2(\n        \"v-slot shorthand syntax requires a slot name.\",\n        binding\n      );\n    }\n  }\n  return dynamicArgRE.test(name)\n    // dynamic [name]\n    ? { name: name.slice(1, -1), dynamic: true }\n    // static name\n    : { name: (\"\\\"\" + name + \"\\\"\"), dynamic: false }\n}\n\n// handle <slot/> outlets\nfunction processSlotOutlet (el) {\n  if (el.tag === 'slot') {\n    el.slotName = getBindingAttr(el, 'name');\n    if ( true && el.key) {\n      warn$2(\n        \"`key` does not work on <slot> because slots are abstract outlets \" +\n        \"and can possibly expand into multiple elements. \" +\n        \"Use the key on a wrapping element instead.\",\n        getRawBindingAttr(el, 'key')\n      );\n    }\n  }\n}\n\nfunction processComponent (el) {\n  var binding;\n  if ((binding = getBindingAttr(el, 'is'))) {\n    el.component = binding;\n  }\n  if (getAndRemoveAttr(el, 'inline-template') != null) {\n    el.inlineTemplate = true;\n  }\n}\n\nfunction processAttrs (el) {\n  var list = el.attrsList;\n  var i, l, name, rawName, value, modifiers, syncGen, isDynamic;\n  for (i = 0, l = list.length; i < l; i++) {\n    name = rawName = list[i].name;\n    value = list[i].value;\n    if (dirRE.test(name)) {\n      // mark element as dynamic\n      el.hasBindings = true;\n      // modifiers\n      modifiers = parseModifiers(name.replace(dirRE, ''));\n      // support .foo shorthand syntax for the .prop modifier\n      if (modifiers) {\n        name = name.replace(modifierRE, '');\n      }\n      if (bindRE.test(name)) { // v-bind\n        name = name.replace(bindRE, '');\n        value = parseFilters(value);\n        isDynamic = dynamicArgRE.test(name);\n        if (isDynamic) {\n          name = name.slice(1, -1);\n        }\n        if (\n           true &&\n          value.trim().length === 0\n        ) {\n          warn$2(\n            (\"The value for a v-bind expression cannot be empty. Found in \\\"v-bind:\" + name + \"\\\"\")\n          );\n        }\n        if (modifiers) {\n          if (modifiers.prop && !isDynamic) {\n            name = camelize(name);\n            if (name === 'innerHtml') { name = 'innerHTML'; }\n          }\n          if (modifiers.camel && !isDynamic) {\n            name = camelize(name);\n          }\n          if (modifiers.sync) {\n            syncGen = genAssignmentCode(value, \"$event\");\n            if (!isDynamic) {\n              addHandler(\n                el,\n                (\"update:\" + (camelize(name))),\n                syncGen,\n                null,\n                false,\n                warn$2,\n                list[i]\n              );\n              if (hyphenate(name) !== camelize(name)) {\n                addHandler(\n                  el,\n                  (\"update:\" + (hyphenate(name))),\n                  syncGen,\n                  null,\n                  false,\n                  warn$2,\n                  list[i]\n                );\n              }\n            } else {\n              // handler w/ dynamic event name\n              addHandler(\n                el,\n                (\"\\\"update:\\\"+(\" + name + \")\"),\n                syncGen,\n                null,\n                false,\n                warn$2,\n                list[i],\n                true // dynamic\n              );\n            }\n          }\n        }\n        if ((modifiers && modifiers.prop) || (\n          !el.component && platformMustUseProp(el.tag, el.attrsMap.type, name)\n        )) {\n          addProp(el, name, value, list[i], isDynamic);\n        } else {\n          addAttr(el, name, value, list[i], isDynamic);\n        }\n      } else if (onRE.test(name)) { // v-on\n        name = name.replace(onRE, '');\n        isDynamic = dynamicArgRE.test(name);\n        if (isDynamic) {\n          name = name.slice(1, -1);\n        }\n        addHandler(el, name, value, modifiers, false, warn$2, list[i], isDynamic);\n      } else { // normal directives\n        name = name.replace(dirRE, '');\n        // parse arg\n        var argMatch = name.match(argRE);\n        var arg = argMatch && argMatch[1];\n        isDynamic = false;\n        if (arg) {\n          name = name.slice(0, -(arg.length + 1));\n          if (dynamicArgRE.test(arg)) {\n            arg = arg.slice(1, -1);\n            isDynamic = true;\n          }\n        }\n        addDirective(el, name, rawName, value, arg, isDynamic, modifiers, list[i]);\n        if ( true && name === 'model') {\n          checkForAliasModel(el, value);\n        }\n      }\n    } else {\n      // literal attribute\n      if (true) {\n        var res = parseText(value, delimiters);\n        if (res) {\n          warn$2(\n            name + \"=\\\"\" + value + \"\\\": \" +\n            'Interpolation inside attributes has been removed. ' +\n            'Use v-bind or the colon shorthand instead. For example, ' +\n            'instead of <div id=\"{{ val }}\">, use <div :id=\"val\">.',\n            list[i]\n          );\n        }\n      }\n      addAttr(el, name, JSON.stringify(value), list[i]);\n      // #6887 firefox doesn't update muted state if set via attribute\n      // even immediately after element creation\n      if (!el.component &&\n          name === 'muted' &&\n          platformMustUseProp(el.tag, el.attrsMap.type, name)) {\n        addProp(el, name, 'true', list[i]);\n      }\n    }\n  }\n}\n\nfunction checkInFor (el) {\n  var parent = el;\n  while (parent) {\n    if (parent.for !== undefined) {\n      return true\n    }\n    parent = parent.parent;\n  }\n  return false\n}\n\nfunction parseModifiers (name) {\n  var match = name.match(modifierRE);\n  if (match) {\n    var ret = {};\n    match.forEach(function (m) { ret[m.slice(1)] = true; });\n    return ret\n  }\n}\n\nfunction makeAttrsMap (attrs) {\n  var map = {};\n  for (var i = 0, l = attrs.length; i < l; i++) {\n    if (\n       true &&\n      map[attrs[i].name] && !isIE && !isEdge\n    ) {\n      warn$2('duplicate attribute: ' + attrs[i].name, attrs[i]);\n    }\n    map[attrs[i].name] = attrs[i].value;\n  }\n  return map\n}\n\n// for script (e.g. type=\"x/template\") or style, do not decode content\nfunction isTextTag (el) {\n  return el.tag === 'script' || el.tag === 'style'\n}\n\nfunction isForbiddenTag (el) {\n  return (\n    el.tag === 'style' ||\n    (el.tag === 'script' && (\n      !el.attrsMap.type ||\n      el.attrsMap.type === 'text/javascript'\n    ))\n  )\n}\n\nvar ieNSBug = /^xmlns:NS\\d+/;\nvar ieNSPrefix = /^NS\\d+:/;\n\n/* istanbul ignore next */\nfunction guardIESVGBug (attrs) {\n  var res = [];\n  for (var i = 0; i < attrs.length; i++) {\n    var attr = attrs[i];\n    if (!ieNSBug.test(attr.name)) {\n      attr.name = attr.name.replace(ieNSPrefix, '');\n      res.push(attr);\n    }\n  }\n  return res\n}\n\nfunction checkForAliasModel (el, value) {\n  var _el = el;\n  while (_el) {\n    if (_el.for && _el.alias === value) {\n      warn$2(\n        \"<\" + (el.tag) + \" v-model=\\\"\" + value + \"\\\">: \" +\n        \"You are binding v-model directly to a v-for iteration alias. \" +\n        \"This will not be able to modify the v-for source array because \" +\n        \"writing to the alias is like modifying a function local variable. \" +\n        \"Consider using an array of objects and use v-model on an object property instead.\",\n        el.rawAttrsMap['v-model']\n      );\n    }\n    _el = _el.parent;\n  }\n}\n\n/*  */\n\nfunction preTransformNode (el, options) {\n  if (el.tag === 'input') {\n    var map = el.attrsMap;\n    if (!map['v-model']) {\n      return\n    }\n\n    var typeBinding;\n    if (map[':type'] || map['v-bind:type']) {\n      typeBinding = getBindingAttr(el, 'type');\n    }\n    if (!map.type && !typeBinding && map['v-bind']) {\n      typeBinding = \"(\" + (map['v-bind']) + \").type\";\n    }\n\n    if (typeBinding) {\n      var ifCondition = getAndRemoveAttr(el, 'v-if', true);\n      var ifConditionExtra = ifCondition ? (\"&&(\" + ifCondition + \")\") : \"\";\n      var hasElse = getAndRemoveAttr(el, 'v-else', true) != null;\n      var elseIfCondition = getAndRemoveAttr(el, 'v-else-if', true);\n      // 1. checkbox\n      var branch0 = cloneASTElement(el);\n      // process for on the main node\n      processFor(branch0);\n      addRawAttr(branch0, 'type', 'checkbox');\n      processElement(branch0, options);\n      branch0.processed = true; // prevent it from double-processed\n      branch0.if = \"(\" + typeBinding + \")==='checkbox'\" + ifConditionExtra;\n      addIfCondition(branch0, {\n        exp: branch0.if,\n        block: branch0\n      });\n      // 2. add radio else-if condition\n      var branch1 = cloneASTElement(el);\n      getAndRemoveAttr(branch1, 'v-for', true);\n      addRawAttr(branch1, 'type', 'radio');\n      processElement(branch1, options);\n      addIfCondition(branch0, {\n        exp: \"(\" + typeBinding + \")==='radio'\" + ifConditionExtra,\n        block: branch1\n      });\n      // 3. other\n      var branch2 = cloneASTElement(el);\n      getAndRemoveAttr(branch2, 'v-for', true);\n      addRawAttr(branch2, ':type', typeBinding);\n      processElement(branch2, options);\n      addIfCondition(branch0, {\n        exp: ifCondition,\n        block: branch2\n      });\n\n      if (hasElse) {\n        branch0.else = true;\n      } else if (elseIfCondition) {\n        branch0.elseif = elseIfCondition;\n      }\n\n      return branch0\n    }\n  }\n}\n\nfunction cloneASTElement (el) {\n  return createASTElement(el.tag, el.attrsList.slice(), el.parent)\n}\n\nvar model$1 = {\n  preTransformNode: preTransformNode\n};\n\nvar modules$1 = [\n  klass$1,\n  style$1,\n  model$1\n];\n\n/*  */\n\nfunction text (el, dir) {\n  if (dir.value) {\n    addProp(el, 'textContent', (\"_s(\" + (dir.value) + \")\"), dir);\n  }\n}\n\n/*  */\n\nfunction html (el, dir) {\n  if (dir.value) {\n    addProp(el, 'innerHTML', (\"_s(\" + (dir.value) + \")\"), dir);\n  }\n}\n\nvar directives$1 = {\n  model: model,\n  text: text,\n  html: html\n};\n\n/*  */\n\nvar baseOptions = {\n  expectHTML: true,\n  modules: modules$1,\n  directives: directives$1,\n  isPreTag: isPreTag,\n  isUnaryTag: isUnaryTag,\n  mustUseProp: mustUseProp,\n  canBeLeftOpenTag: canBeLeftOpenTag,\n  isReservedTag: isReservedTag,\n  getTagNamespace: getTagNamespace,\n  staticKeys: genStaticKeys(modules$1)\n};\n\n/*  */\n\nvar isStaticKey;\nvar isPlatformReservedTag;\n\nvar genStaticKeysCached = cached(genStaticKeys$1);\n\n/**\n * Goal of the optimizer: walk the generated template AST tree\n * and detect sub-trees that are purely static, i.e. parts of\n * the DOM that never needs to change.\n *\n * Once we detect these sub-trees, we can:\n *\n * 1. Hoist them into constants, so that we no longer need to\n *    create fresh nodes for them on each re-render;\n * 2. Completely skip them in the patching process.\n */\nfunction optimize (root, options) {\n  if (!root) { return }\n  isStaticKey = genStaticKeysCached(options.staticKeys || '');\n  isPlatformReservedTag = options.isReservedTag || no;\n  // first pass: mark all non-static nodes.\n  markStatic$1(root);\n  // second pass: mark static roots.\n  markStaticRoots(root, false);\n}\n\nfunction genStaticKeys$1 (keys) {\n  return makeMap(\n    'type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap' +\n    (keys ? ',' + keys : '')\n  )\n}\n\nfunction markStatic$1 (node) {\n  node.static = isStatic(node);\n  if (node.type === 1) {\n    // do not make component slot content static. this avoids\n    // 1. components not able to mutate slot nodes\n    // 2. static slot content fails for hot-reloading\n    if (\n      !isPlatformReservedTag(node.tag) &&\n      node.tag !== 'slot' &&\n      node.attrsMap['inline-template'] == null\n    ) {\n      return\n    }\n    for (var i = 0, l = node.children.length; i < l; i++) {\n      var child = node.children[i];\n      markStatic$1(child);\n      if (!child.static) {\n        node.static = false;\n      }\n    }\n    if (node.ifConditions) {\n      for (var i$1 = 1, l$1 = node.ifConditions.length; i$1 < l$1; i$1++) {\n        var block = node.ifConditions[i$1].block;\n        markStatic$1(block);\n        if (!block.static) {\n          node.static = false;\n        }\n      }\n    }\n  }\n}\n\nfunction markStaticRoots (node, isInFor) {\n  if (node.type === 1) {\n    if (node.static || node.once) {\n      node.staticInFor = isInFor;\n    }\n    // For a node to qualify as a static root, it should have children that\n    // are not just static text. Otherwise the cost of hoisting out will\n    // outweigh the benefits and it's better off to just always render it fresh.\n    if (node.static && node.children.length && !(\n      node.children.length === 1 &&\n      node.children[0].type === 3\n    )) {\n      node.staticRoot = true;\n      return\n    } else {\n      node.staticRoot = false;\n    }\n    if (node.children) {\n      for (var i = 0, l = node.children.length; i < l; i++) {\n        markStaticRoots(node.children[i], isInFor || !!node.for);\n      }\n    }\n    if (node.ifConditions) {\n      for (var i$1 = 1, l$1 = node.ifConditions.length; i$1 < l$1; i$1++) {\n        markStaticRoots(node.ifConditions[i$1].block, isInFor);\n      }\n    }\n  }\n}\n\nfunction isStatic (node) {\n  if (node.type === 2) { // expression\n    return false\n  }\n  if (node.type === 3) { // text\n    return true\n  }\n  return !!(node.pre || (\n    !node.hasBindings && // no dynamic bindings\n    !node.if && !node.for && // not v-if or v-for or v-else\n    !isBuiltInTag(node.tag) && // not a built-in\n    isPlatformReservedTag(node.tag) && // not a component\n    !isDirectChildOfTemplateFor(node) &&\n    Object.keys(node).every(isStaticKey)\n  ))\n}\n\nfunction isDirectChildOfTemplateFor (node) {\n  while (node.parent) {\n    node = node.parent;\n    if (node.tag !== 'template') {\n      return false\n    }\n    if (node.for) {\n      return true\n    }\n  }\n  return false\n}\n\n/*  */\n\nvar fnExpRE = /^([\\w$_]+|\\([^)]*?\\))\\s*=>|^function(?:\\s+[\\w$]+)?\\s*\\(/;\nvar fnInvokeRE = /\\([^)]*?\\);*$/;\nvar simplePathRE = /^[A-Za-z_$][\\w$]*(?:\\.[A-Za-z_$][\\w$]*|\\['[^']*?']|\\[\"[^\"]*?\"]|\\[\\d+]|\\[[A-Za-z_$][\\w$]*])*$/;\n\n// KeyboardEvent.keyCode aliases\nvar keyCodes = {\n  esc: 27,\n  tab: 9,\n  enter: 13,\n  space: 32,\n  up: 38,\n  left: 37,\n  right: 39,\n  down: 40,\n  'delete': [8, 46]\n};\n\n// KeyboardEvent.key aliases\nvar keyNames = {\n  // #7880: IE11 and Edge use `Esc` for Escape key name.\n  esc: ['Esc', 'Escape'],\n  tab: 'Tab',\n  enter: 'Enter',\n  // #9112: IE11 uses `Spacebar` for Space key name.\n  space: [' ', 'Spacebar'],\n  // #7806: IE11 uses key names without `Arrow` prefix for arrow keys.\n  up: ['Up', 'ArrowUp'],\n  left: ['Left', 'ArrowLeft'],\n  right: ['Right', 'ArrowRight'],\n  down: ['Down', 'ArrowDown'],\n  // #9112: IE11 uses `Del` for Delete key name.\n  'delete': ['Backspace', 'Delete', 'Del']\n};\n\n// #4868: modifiers that prevent the execution of the listener\n// need to explicitly return null so that we can determine whether to remove\n// the listener for .once\nvar genGuard = function (condition) { return (\"if(\" + condition + \")return null;\"); };\n\nvar modifierCode = {\n  stop: '$event.stopPropagation();',\n  prevent: '$event.preventDefault();',\n  self: genGuard(\"$event.target !== $event.currentTarget\"),\n  ctrl: genGuard(\"!$event.ctrlKey\"),\n  shift: genGuard(\"!$event.shiftKey\"),\n  alt: genGuard(\"!$event.altKey\"),\n  meta: genGuard(\"!$event.metaKey\"),\n  left: genGuard(\"'button' in $event && $event.button !== 0\"),\n  middle: genGuard(\"'button' in $event && $event.button !== 1\"),\n  right: genGuard(\"'button' in $event && $event.button !== 2\")\n};\n\nfunction genHandlers (\n  events,\n  isNative\n) {\n  var prefix = isNative ? 'nativeOn:' : 'on:';\n  var staticHandlers = \"\";\n  var dynamicHandlers = \"\";\n  for (var name in events) {\n    var handlerCode = genHandler(events[name]);\n    if (events[name] && events[name].dynamic) {\n      dynamicHandlers += name + \",\" + handlerCode + \",\";\n    } else {\n      staticHandlers += \"\\\"\" + name + \"\\\":\" + handlerCode + \",\";\n    }\n  }\n  staticHandlers = \"{\" + (staticHandlers.slice(0, -1)) + \"}\";\n  if (dynamicHandlers) {\n    return prefix + \"_d(\" + staticHandlers + \",[\" + (dynamicHandlers.slice(0, -1)) + \"])\"\n  } else {\n    return prefix + staticHandlers\n  }\n}\n\nfunction genHandler (handler) {\n  if (!handler) {\n    return 'function(){}'\n  }\n\n  if (Array.isArray(handler)) {\n    return (\"[\" + (handler.map(function (handler) { return genHandler(handler); }).join(',')) + \"]\")\n  }\n\n  var isMethodPath = simplePathRE.test(handler.value);\n  var isFunctionExpression = fnExpRE.test(handler.value);\n  var isFunctionInvocation = simplePathRE.test(handler.value.replace(fnInvokeRE, ''));\n\n  if (!handler.modifiers) {\n    if (isMethodPath || isFunctionExpression) {\n      return handler.value\n    }\n    return (\"function($event){\" + (isFunctionInvocation ? (\"return \" + (handler.value)) : handler.value) + \"}\") // inline statement\n  } else {\n    var code = '';\n    var genModifierCode = '';\n    var keys = [];\n    for (var key in handler.modifiers) {\n      if (modifierCode[key]) {\n        genModifierCode += modifierCode[key];\n        // left/right\n        if (keyCodes[key]) {\n          keys.push(key);\n        }\n      } else if (key === 'exact') {\n        var modifiers = (handler.modifiers);\n        genModifierCode += genGuard(\n          ['ctrl', 'shift', 'alt', 'meta']\n            .filter(function (keyModifier) { return !modifiers[keyModifier]; })\n            .map(function (keyModifier) { return (\"$event.\" + keyModifier + \"Key\"); })\n            .join('||')\n        );\n      } else {\n        keys.push(key);\n      }\n    }\n    if (keys.length) {\n      code += genKeyFilter(keys);\n    }\n    // Make sure modifiers like prevent and stop get executed after key filtering\n    if (genModifierCode) {\n      code += genModifierCode;\n    }\n    var handlerCode = isMethodPath\n      ? (\"return \" + (handler.value) + \"($event)\")\n      : isFunctionExpression\n        ? (\"return (\" + (handler.value) + \")($event)\")\n        : isFunctionInvocation\n          ? (\"return \" + (handler.value))\n          : handler.value;\n    return (\"function($event){\" + code + handlerCode + \"}\")\n  }\n}\n\nfunction genKeyFilter (keys) {\n  return (\n    // make sure the key filters only apply to KeyboardEvents\n    // #9441: can't use 'keyCode' in $event because Chrome autofill fires fake\n    // key events that do not have keyCode property...\n    \"if(!$event.type.indexOf('key')&&\" +\n    (keys.map(genFilterCode).join('&&')) + \")return null;\"\n  )\n}\n\nfunction genFilterCode (key) {\n  var keyVal = parseInt(key, 10);\n  if (keyVal) {\n    return (\"$event.keyCode!==\" + keyVal)\n  }\n  var keyCode = keyCodes[key];\n  var keyName = keyNames[key];\n  return (\n    \"_k($event.keyCode,\" +\n    (JSON.stringify(key)) + \",\" +\n    (JSON.stringify(keyCode)) + \",\" +\n    \"$event.key,\" +\n    \"\" + (JSON.stringify(keyName)) +\n    \")\"\n  )\n}\n\n/*  */\n\nfunction on (el, dir) {\n  if ( true && dir.modifiers) {\n    warn(\"v-on without argument does not support modifiers.\");\n  }\n  el.wrapListeners = function (code) { return (\"_g(\" + code + \",\" + (dir.value) + \")\"); };\n}\n\n/*  */\n\nfunction bind$1 (el, dir) {\n  el.wrapData = function (code) {\n    return (\"_b(\" + code + \",'\" + (el.tag) + \"',\" + (dir.value) + \",\" + (dir.modifiers && dir.modifiers.prop ? 'true' : 'false') + (dir.modifiers && dir.modifiers.sync ? ',true' : '') + \")\")\n  };\n}\n\n/*  */\n\nvar baseDirectives = {\n  on: on,\n  bind: bind$1,\n  cloak: noop\n};\n\n/*  */\n\n\n\n\n\nvar CodegenState = function CodegenState (options) {\n  this.options = options;\n  this.warn = options.warn || baseWarn;\n  this.transforms = pluckModuleFunction(options.modules, 'transformCode');\n  this.dataGenFns = pluckModuleFunction(options.modules, 'genData');\n  this.directives = extend(extend({}, baseDirectives), options.directives);\n  var isReservedTag = options.isReservedTag || no;\n  this.maybeComponent = function (el) { return !!el.component || !isReservedTag(el.tag); };\n  this.onceId = 0;\n  this.staticRenderFns = [];\n  this.pre = false;\n};\n\n\n\nfunction generate (\n  ast,\n  options\n) {\n  var state = new CodegenState(options);\n  var code = ast ? genElement(ast, state) : '_c(\"div\")';\n  return {\n    render: (\"with(this){return \" + code + \"}\"),\n    staticRenderFns: state.staticRenderFns\n  }\n}\n\nfunction genElement (el, state) {\n  if (el.parent) {\n    el.pre = el.pre || el.parent.pre;\n  }\n\n  if (el.staticRoot && !el.staticProcessed) {\n    return genStatic(el, state)\n  } else if (el.once && !el.onceProcessed) {\n    return genOnce(el, state)\n  } else if (el.for && !el.forProcessed) {\n    return genFor(el, state)\n  } else if (el.if && !el.ifProcessed) {\n    return genIf(el, state)\n  } else if (el.tag === 'template' && !el.slotTarget && !state.pre) {\n    return genChildren(el, state) || 'void 0'\n  } else if (el.tag === 'slot') {\n    return genSlot(el, state)\n  } else {\n    // component or element\n    var code;\n    if (el.component) {\n      code = genComponent(el.component, el, state);\n    } else {\n      var data;\n      if (!el.plain || (el.pre && state.maybeComponent(el))) {\n        data = genData$2(el, state);\n      }\n\n      var children = el.inlineTemplate ? null : genChildren(el, state, true);\n      code = \"_c('\" + (el.tag) + \"'\" + (data ? (\",\" + data) : '') + (children ? (\",\" + children) : '') + \")\";\n    }\n    // module transforms\n    for (var i = 0; i < state.transforms.length; i++) {\n      code = state.transforms[i](el, code);\n    }\n    return code\n  }\n}\n\n// hoist static sub-trees out\nfunction genStatic (el, state) {\n  el.staticProcessed = true;\n  // Some elements (templates) need to behave differently inside of a v-pre\n  // node.  All pre nodes are static roots, so we can use this as a location to\n  // wrap a state change and reset it upon exiting the pre node.\n  var originalPreState = state.pre;\n  if (el.pre) {\n    state.pre = el.pre;\n  }\n  state.staticRenderFns.push((\"with(this){return \" + (genElement(el, state)) + \"}\"));\n  state.pre = originalPreState;\n  return (\"_m(\" + (state.staticRenderFns.length - 1) + (el.staticInFor ? ',true' : '') + \")\")\n}\n\n// v-once\nfunction genOnce (el, state) {\n  el.onceProcessed = true;\n  if (el.if && !el.ifProcessed) {\n    return genIf(el, state)\n  } else if (el.staticInFor) {\n    var key = '';\n    var parent = el.parent;\n    while (parent) {\n      if (parent.for) {\n        key = parent.key;\n        break\n      }\n      parent = parent.parent;\n    }\n    if (!key) {\n       true && state.warn(\n        \"v-once can only be used inside v-for that is keyed. \",\n        el.rawAttrsMap['v-once']\n      );\n      return genElement(el, state)\n    }\n    return (\"_o(\" + (genElement(el, state)) + \",\" + (state.onceId++) + \",\" + key + \")\")\n  } else {\n    return genStatic(el, state)\n  }\n}\n\nfunction genIf (\n  el,\n  state,\n  altGen,\n  altEmpty\n) {\n  el.ifProcessed = true; // avoid recursion\n  return genIfConditions(el.ifConditions.slice(), state, altGen, altEmpty)\n}\n\nfunction genIfConditions (\n  conditions,\n  state,\n  altGen,\n  altEmpty\n) {\n  if (!conditions.length) {\n    return altEmpty || '_e()'\n  }\n\n  var condition = conditions.shift();\n  if (condition.exp) {\n    return (\"(\" + (condition.exp) + \")?\" + (genTernaryExp(condition.block)) + \":\" + (genIfConditions(conditions, state, altGen, altEmpty)))\n  } else {\n    return (\"\" + (genTernaryExp(condition.block)))\n  }\n\n  // v-if with v-once should generate code like (a)?_m(0):_m(1)\n  function genTernaryExp (el) {\n    return altGen\n      ? altGen(el, state)\n      : el.once\n        ? genOnce(el, state)\n        : genElement(el, state)\n  }\n}\n\nfunction genFor (\n  el,\n  state,\n  altGen,\n  altHelper\n) {\n  var exp = el.for;\n  var alias = el.alias;\n  var iterator1 = el.iterator1 ? (\",\" + (el.iterator1)) : '';\n  var iterator2 = el.iterator2 ? (\",\" + (el.iterator2)) : '';\n\n  if ( true &&\n    state.maybeComponent(el) &&\n    el.tag !== 'slot' &&\n    el.tag !== 'template' &&\n    !el.key\n  ) {\n    state.warn(\n      \"<\" + (el.tag) + \" v-for=\\\"\" + alias + \" in \" + exp + \"\\\">: component lists rendered with \" +\n      \"v-for should have explicit keys. \" +\n      \"See https://vuejs.org/guide/list.html#key for more info.\",\n      el.rawAttrsMap['v-for'],\n      true /* tip */\n    );\n  }\n\n  el.forProcessed = true; // avoid recursion\n  return (altHelper || '_l') + \"((\" + exp + \"),\" +\n    \"function(\" + alias + iterator1 + iterator2 + \"){\" +\n      \"return \" + ((altGen || genElement)(el, state)) +\n    '})'\n}\n\nfunction genData$2 (el, state) {\n  var data = '{';\n\n  // directives first.\n  // directives may mutate the el's other properties before they are generated.\n  var dirs = genDirectives(el, state);\n  if (dirs) { data += dirs + ','; }\n\n  // key\n  if (el.key) {\n    data += \"key:\" + (el.key) + \",\";\n  }\n  // ref\n  if (el.ref) {\n    data += \"ref:\" + (el.ref) + \",\";\n  }\n  if (el.refInFor) {\n    data += \"refInFor:true,\";\n  }\n  // pre\n  if (el.pre) {\n    data += \"pre:true,\";\n  }\n  // record original tag name for components using \"is\" attribute\n  if (el.component) {\n    data += \"tag:\\\"\" + (el.tag) + \"\\\",\";\n  }\n  // module data generation functions\n  for (var i = 0; i < state.dataGenFns.length; i++) {\n    data += state.dataGenFns[i](el);\n  }\n  // attributes\n  if (el.attrs) {\n    data += \"attrs:\" + (genProps(el.attrs)) + \",\";\n  }\n  // DOM props\n  if (el.props) {\n    data += \"domProps:\" + (genProps(el.props)) + \",\";\n  }\n  // event handlers\n  if (el.events) {\n    data += (genHandlers(el.events, false)) + \",\";\n  }\n  if (el.nativeEvents) {\n    data += (genHandlers(el.nativeEvents, true)) + \",\";\n  }\n  // slot target\n  // only for non-scoped slots\n  if (el.slotTarget && !el.slotScope) {\n    data += \"slot:\" + (el.slotTarget) + \",\";\n  }\n  // scoped slots\n  if (el.scopedSlots) {\n    data += (genScopedSlots(el, el.scopedSlots, state)) + \",\";\n  }\n  // component v-model\n  if (el.model) {\n    data += \"model:{value:\" + (el.model.value) + \",callback:\" + (el.model.callback) + \",expression:\" + (el.model.expression) + \"},\";\n  }\n  // inline-template\n  if (el.inlineTemplate) {\n    var inlineTemplate = genInlineTemplate(el, state);\n    if (inlineTemplate) {\n      data += inlineTemplate + \",\";\n    }\n  }\n  data = data.replace(/,$/, '') + '}';\n  // v-bind dynamic argument wrap\n  // v-bind with dynamic arguments must be applied using the same v-bind object\n  // merge helper so that class/style/mustUseProp attrs are handled correctly.\n  if (el.dynamicAttrs) {\n    data = \"_b(\" + data + \",\\\"\" + (el.tag) + \"\\\",\" + (genProps(el.dynamicAttrs)) + \")\";\n  }\n  // v-bind data wrap\n  if (el.wrapData) {\n    data = el.wrapData(data);\n  }\n  // v-on data wrap\n  if (el.wrapListeners) {\n    data = el.wrapListeners(data);\n  }\n  return data\n}\n\nfunction genDirectives (el, state) {\n  var dirs = el.directives;\n  if (!dirs) { return }\n  var res = 'directives:[';\n  var hasRuntime = false;\n  var i, l, dir, needRuntime;\n  for (i = 0, l = dirs.length; i < l; i++) {\n    dir = dirs[i];\n    needRuntime = true;\n    var gen = state.directives[dir.name];\n    if (gen) {\n      // compile-time directive that manipulates AST.\n      // returns true if it also needs a runtime counterpart.\n      needRuntime = !!gen(el, dir, state.warn);\n    }\n    if (needRuntime) {\n      hasRuntime = true;\n      res += \"{name:\\\"\" + (dir.name) + \"\\\",rawName:\\\"\" + (dir.rawName) + \"\\\"\" + (dir.value ? (\",value:(\" + (dir.value) + \"),expression:\" + (JSON.stringify(dir.value))) : '') + (dir.arg ? (\",arg:\" + (dir.isDynamicArg ? dir.arg : (\"\\\"\" + (dir.arg) + \"\\\"\"))) : '') + (dir.modifiers ? (\",modifiers:\" + (JSON.stringify(dir.modifiers))) : '') + \"},\";\n    }\n  }\n  if (hasRuntime) {\n    return res.slice(0, -1) + ']'\n  }\n}\n\nfunction genInlineTemplate (el, state) {\n  var ast = el.children[0];\n  if ( true && (\n    el.children.length !== 1 || ast.type !== 1\n  )) {\n    state.warn(\n      'Inline-template components must have exactly one child element.',\n      { start: el.start }\n    );\n  }\n  if (ast && ast.type === 1) {\n    var inlineRenderFns = generate(ast, state.options);\n    return (\"inlineTemplate:{render:function(){\" + (inlineRenderFns.render) + \"},staticRenderFns:[\" + (inlineRenderFns.staticRenderFns.map(function (code) { return (\"function(){\" + code + \"}\"); }).join(',')) + \"]}\")\n  }\n}\n\nfunction genScopedSlots (\n  el,\n  slots,\n  state\n) {\n  // by default scoped slots are considered \"stable\", this allows child\n  // components with only scoped slots to skip forced updates from parent.\n  // but in some cases we have to bail-out of this optimization\n  // for example if the slot contains dynamic names, has v-if or v-for on them...\n  var needsForceUpdate = el.for || Object.keys(slots).some(function (key) {\n    var slot = slots[key];\n    return (\n      slot.slotTargetDynamic ||\n      slot.if ||\n      slot.for ||\n      containsSlotChild(slot) // is passing down slot from parent which may be dynamic\n    )\n  });\n\n  // #9534: if a component with scoped slots is inside a conditional branch,\n  // it's possible for the same component to be reused but with different\n  // compiled slot content. To avoid that, we generate a unique key based on\n  // the generated code of all the slot contents.\n  var needsKey = !!el.if;\n\n  // OR when it is inside another scoped slot or v-for (the reactivity may be\n  // disconnected due to the intermediate scope variable)\n  // #9438, #9506\n  // TODO: this can be further optimized by properly analyzing in-scope bindings\n  // and skip force updating ones that do not actually use scope variables.\n  if (!needsForceUpdate) {\n    var parent = el.parent;\n    while (parent) {\n      if (\n        (parent.slotScope && parent.slotScope !== emptySlotScopeToken) ||\n        parent.for\n      ) {\n        needsForceUpdate = true;\n        break\n      }\n      if (parent.if) {\n        needsKey = true;\n      }\n      parent = parent.parent;\n    }\n  }\n\n  var generatedSlots = Object.keys(slots)\n    .map(function (key) { return genScopedSlot(slots[key], state); })\n    .join(',');\n\n  return (\"scopedSlots:_u([\" + generatedSlots + \"]\" + (needsForceUpdate ? \",null,true\" : \"\") + (!needsForceUpdate && needsKey ? (\",null,false,\" + (hash(generatedSlots))) : \"\") + \")\")\n}\n\nfunction hash(str) {\n  var hash = 5381;\n  var i = str.length;\n  while(i) {\n    hash = (hash * 33) ^ str.charCodeAt(--i);\n  }\n  return hash >>> 0\n}\n\nfunction containsSlotChild (el) {\n  if (el.type === 1) {\n    if (el.tag === 'slot') {\n      return true\n    }\n    return el.children.some(containsSlotChild)\n  }\n  return false\n}\n\nfunction genScopedSlot (\n  el,\n  state\n) {\n  var isLegacySyntax = el.attrsMap['slot-scope'];\n  if (el.if && !el.ifProcessed && !isLegacySyntax) {\n    return genIf(el, state, genScopedSlot, \"null\")\n  }\n  if (el.for && !el.forProcessed) {\n    return genFor(el, state, genScopedSlot)\n  }\n  var slotScope = el.slotScope === emptySlotScopeToken\n    ? \"\"\n    : String(el.slotScope);\n  var fn = \"function(\" + slotScope + \"){\" +\n    \"return \" + (el.tag === 'template'\n      ? el.if && isLegacySyntax\n        ? (\"(\" + (el.if) + \")?\" + (genChildren(el, state) || 'undefined') + \":undefined\")\n        : genChildren(el, state) || 'undefined'\n      : genElement(el, state)) + \"}\";\n  // reverse proxy v-slot without scope on this.$slots\n  var reverseProxy = slotScope ? \"\" : \",proxy:true\";\n  return (\"{key:\" + (el.slotTarget || \"\\\"default\\\"\") + \",fn:\" + fn + reverseProxy + \"}\")\n}\n\nfunction genChildren (\n  el,\n  state,\n  checkSkip,\n  altGenElement,\n  altGenNode\n) {\n  var children = el.children;\n  if (children.length) {\n    var el$1 = children[0];\n    // optimize single v-for\n    if (children.length === 1 &&\n      el$1.for &&\n      el$1.tag !== 'template' &&\n      el$1.tag !== 'slot'\n    ) {\n      var normalizationType = checkSkip\n        ? state.maybeComponent(el$1) ? \",1\" : \",0\"\n        : \"\";\n      return (\"\" + ((altGenElement || genElement)(el$1, state)) + normalizationType)\n    }\n    var normalizationType$1 = checkSkip\n      ? getNormalizationType(children, state.maybeComponent)\n      : 0;\n    var gen = altGenNode || genNode;\n    return (\"[\" + (children.map(function (c) { return gen(c, state); }).join(',')) + \"]\" + (normalizationType$1 ? (\",\" + normalizationType$1) : ''))\n  }\n}\n\n// determine the normalization needed for the children array.\n// 0: no normalization needed\n// 1: simple normalization needed (possible 1-level deep nested array)\n// 2: full normalization needed\nfunction getNormalizationType (\n  children,\n  maybeComponent\n) {\n  var res = 0;\n  for (var i = 0; i < children.length; i++) {\n    var el = children[i];\n    if (el.type !== 1) {\n      continue\n    }\n    if (needsNormalization(el) ||\n        (el.ifConditions && el.ifConditions.some(function (c) { return needsNormalization(c.block); }))) {\n      res = 2;\n      break\n    }\n    if (maybeComponent(el) ||\n        (el.ifConditions && el.ifConditions.some(function (c) { return maybeComponent(c.block); }))) {\n      res = 1;\n    }\n  }\n  return res\n}\n\nfunction needsNormalization (el) {\n  return el.for !== undefined || el.tag === 'template' || el.tag === 'slot'\n}\n\nfunction genNode (node, state) {\n  if (node.type === 1) {\n    return genElement(node, state)\n  } else if (node.type === 3 && node.isComment) {\n    return genComment(node)\n  } else {\n    return genText(node)\n  }\n}\n\nfunction genText (text) {\n  return (\"_v(\" + (text.type === 2\n    ? text.expression // no need for () because already wrapped in _s()\n    : transformSpecialNewlines(JSON.stringify(text.text))) + \")\")\n}\n\nfunction genComment (comment) {\n  return (\"_e(\" + (JSON.stringify(comment.text)) + \")\")\n}\n\nfunction genSlot (el, state) {\n  var slotName = el.slotName || '\"default\"';\n  var children = genChildren(el, state);\n  var res = \"_t(\" + slotName + (children ? (\",\" + children) : '');\n  var attrs = el.attrs || el.dynamicAttrs\n    ? genProps((el.attrs || []).concat(el.dynamicAttrs || []).map(function (attr) { return ({\n        // slot props are camelized\n        name: camelize(attr.name),\n        value: attr.value,\n        dynamic: attr.dynamic\n      }); }))\n    : null;\n  var bind$$1 = el.attrsMap['v-bind'];\n  if ((attrs || bind$$1) && !children) {\n    res += \",null\";\n  }\n  if (attrs) {\n    res += \",\" + attrs;\n  }\n  if (bind$$1) {\n    res += (attrs ? '' : ',null') + \",\" + bind$$1;\n  }\n  return res + ')'\n}\n\n// componentName is el.component, take it as argument to shun flow's pessimistic refinement\nfunction genComponent (\n  componentName,\n  el,\n  state\n) {\n  var children = el.inlineTemplate ? null : genChildren(el, state, true);\n  return (\"_c(\" + componentName + \",\" + (genData$2(el, state)) + (children ? (\",\" + children) : '') + \")\")\n}\n\nfunction genProps (props) {\n  var staticProps = \"\";\n  var dynamicProps = \"\";\n  for (var i = 0; i < props.length; i++) {\n    var prop = props[i];\n    var value = transformSpecialNewlines(prop.value);\n    if (prop.dynamic) {\n      dynamicProps += (prop.name) + \",\" + value + \",\";\n    } else {\n      staticProps += \"\\\"\" + (prop.name) + \"\\\":\" + value + \",\";\n    }\n  }\n  staticProps = \"{\" + (staticProps.slice(0, -1)) + \"}\";\n  if (dynamicProps) {\n    return (\"_d(\" + staticProps + \",[\" + (dynamicProps.slice(0, -1)) + \"])\")\n  } else {\n    return staticProps\n  }\n}\n\n// #3895, #4268\nfunction transformSpecialNewlines (text) {\n  return text\n    .replace(/\\u2028/g, '\\\\u2028')\n    .replace(/\\u2029/g, '\\\\u2029')\n}\n\n/*  */\n\n\n\n// these keywords should not appear inside expressions, but operators like\n// typeof, instanceof and in are allowed\nvar prohibitedKeywordRE = new RegExp('\\\\b' + (\n  'do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,' +\n  'super,throw,while,yield,delete,export,import,return,switch,default,' +\n  'extends,finally,continue,debugger,function,arguments'\n).split(',').join('\\\\b|\\\\b') + '\\\\b');\n\n// these unary operators should not be used as property/method names\nvar unaryOperatorsRE = new RegExp('\\\\b' + (\n  'delete,typeof,void'\n).split(',').join('\\\\s*\\\\([^\\\\)]*\\\\)|\\\\b') + '\\\\s*\\\\([^\\\\)]*\\\\)');\n\n// strip strings in expressions\nvar stripStringRE = /'(?:[^'\\\\]|\\\\.)*'|\"(?:[^\"\\\\]|\\\\.)*\"|`(?:[^`\\\\]|\\\\.)*\\$\\{|\\}(?:[^`\\\\]|\\\\.)*`|`(?:[^`\\\\]|\\\\.)*`/g;\n\n// detect problematic expressions in a template\nfunction detectErrors (ast, warn) {\n  if (ast) {\n    checkNode(ast, warn);\n  }\n}\n\nfunction checkNode (node, warn) {\n  if (node.type === 1) {\n    for (var name in node.attrsMap) {\n      if (dirRE.test(name)) {\n        var value = node.attrsMap[name];\n        if (value) {\n          var range = node.rawAttrsMap[name];\n          if (name === 'v-for') {\n            checkFor(node, (\"v-for=\\\"\" + value + \"\\\"\"), warn, range);\n          } else if (name === 'v-slot' || name[0] === '#') {\n            checkFunctionParameterExpression(value, (name + \"=\\\"\" + value + \"\\\"\"), warn, range);\n          } else if (onRE.test(name)) {\n            checkEvent(value, (name + \"=\\\"\" + value + \"\\\"\"), warn, range);\n          } else {\n            checkExpression(value, (name + \"=\\\"\" + value + \"\\\"\"), warn, range);\n          }\n        }\n      }\n    }\n    if (node.children) {\n      for (var i = 0; i < node.children.length; i++) {\n        checkNode(node.children[i], warn);\n      }\n    }\n  } else if (node.type === 2) {\n    checkExpression(node.expression, node.text, warn, node);\n  }\n}\n\nfunction checkEvent (exp, text, warn, range) {\n  var stripped = exp.replace(stripStringRE, '');\n  var keywordMatch = stripped.match(unaryOperatorsRE);\n  if (keywordMatch && stripped.charAt(keywordMatch.index - 1) !== '$') {\n    warn(\n      \"avoid using JavaScript unary operator as property name: \" +\n      \"\\\"\" + (keywordMatch[0]) + \"\\\" in expression \" + (text.trim()),\n      range\n    );\n  }\n  checkExpression(exp, text, warn, range);\n}\n\nfunction checkFor (node, text, warn, range) {\n  checkExpression(node.for || '', text, warn, range);\n  checkIdentifier(node.alias, 'v-for alias', text, warn, range);\n  checkIdentifier(node.iterator1, 'v-for iterator', text, warn, range);\n  checkIdentifier(node.iterator2, 'v-for iterator', text, warn, range);\n}\n\nfunction checkIdentifier (\n  ident,\n  type,\n  text,\n  warn,\n  range\n) {\n  if (typeof ident === 'string') {\n    try {\n      new Function((\"var \" + ident + \"=_\"));\n    } catch (e) {\n      warn((\"invalid \" + type + \" \\\"\" + ident + \"\\\" in expression: \" + (text.trim())), range);\n    }\n  }\n}\n\nfunction checkExpression (exp, text, warn, range) {\n  try {\n    new Function((\"return \" + exp));\n  } catch (e) {\n    var keywordMatch = exp.replace(stripStringRE, '').match(prohibitedKeywordRE);\n    if (keywordMatch) {\n      warn(\n        \"avoid using JavaScript keyword as property name: \" +\n        \"\\\"\" + (keywordMatch[0]) + \"\\\"\\n  Raw expression: \" + (text.trim()),\n        range\n      );\n    } else {\n      warn(\n        \"invalid expression: \" + (e.message) + \" in\\n\\n\" +\n        \"    \" + exp + \"\\n\\n\" +\n        \"  Raw expression: \" + (text.trim()) + \"\\n\",\n        range\n      );\n    }\n  }\n}\n\nfunction checkFunctionParameterExpression (exp, text, warn, range) {\n  try {\n    new Function(exp, '');\n  } catch (e) {\n    warn(\n      \"invalid function parameter expression: \" + (e.message) + \" in\\n\\n\" +\n      \"    \" + exp + \"\\n\\n\" +\n      \"  Raw expression: \" + (text.trim()) + \"\\n\",\n      range\n    );\n  }\n}\n\n/*  */\n\nvar range = 2;\n\nfunction generateCodeFrame (\n  source,\n  start,\n  end\n) {\n  if ( start === void 0 ) start = 0;\n  if ( end === void 0 ) end = source.length;\n\n  var lines = source.split(/\\r?\\n/);\n  var count = 0;\n  var res = [];\n  for (var i = 0; i < lines.length; i++) {\n    count += lines[i].length + 1;\n    if (count >= start) {\n      for (var j = i - range; j <= i + range || end > count; j++) {\n        if (j < 0 || j >= lines.length) { continue }\n        res.push((\"\" + (j + 1) + (repeat$1(\" \", 3 - String(j + 1).length)) + \"|  \" + (lines[j])));\n        var lineLength = lines[j].length;\n        if (j === i) {\n          // push underline\n          var pad = start - (count - lineLength) + 1;\n          var length = end > count ? lineLength - pad : end - start;\n          res.push(\"   |  \" + repeat$1(\" \", pad) + repeat$1(\"^\", length));\n        } else if (j > i) {\n          if (end > count) {\n            var length$1 = Math.min(end - count, lineLength);\n            res.push(\"   |  \" + repeat$1(\"^\", length$1));\n          }\n          count += lineLength + 1;\n        }\n      }\n      break\n    }\n  }\n  return res.join('\\n')\n}\n\nfunction repeat$1 (str, n) {\n  var result = '';\n  if (n > 0) {\n    while (true) { // eslint-disable-line\n      if (n & 1) { result += str; }\n      n >>>= 1;\n      if (n <= 0) { break }\n      str += str;\n    }\n  }\n  return result\n}\n\n/*  */\n\n\n\nfunction createFunction (code, errors) {\n  try {\n    return new Function(code)\n  } catch (err) {\n    errors.push({ err: err, code: code });\n    return noop\n  }\n}\n\nfunction createCompileToFunctionFn (compile) {\n  var cache = Object.create(null);\n\n  return function compileToFunctions (\n    template,\n    options,\n    vm\n  ) {\n    options = extend({}, options);\n    var warn$$1 = options.warn || warn;\n    delete options.warn;\n\n    /* istanbul ignore if */\n    if (true) {\n      // detect possible CSP restriction\n      try {\n        new Function('return 1');\n      } catch (e) {\n        if (e.toString().match(/unsafe-eval|CSP/)) {\n          warn$$1(\n            'It seems you are using the standalone build of Vue.js in an ' +\n            'environment with Content Security Policy that prohibits unsafe-eval. ' +\n            'The template compiler cannot work in this environment. Consider ' +\n            'relaxing the policy to allow unsafe-eval or pre-compiling your ' +\n            'templates into render functions.'\n          );\n        }\n      }\n    }\n\n    // check cache\n    var key = options.delimiters\n      ? String(options.delimiters) + template\n      : template;\n    if (cache[key]) {\n      return cache[key]\n    }\n\n    // compile\n    var compiled = compile(template, options);\n\n    // check compilation errors/tips\n    if (true) {\n      if (compiled.errors && compiled.errors.length) {\n        if (options.outputSourceRange) {\n          compiled.errors.forEach(function (e) {\n            warn$$1(\n              \"Error compiling template:\\n\\n\" + (e.msg) + \"\\n\\n\" +\n              generateCodeFrame(template, e.start, e.end),\n              vm\n            );\n          });\n        } else {\n          warn$$1(\n            \"Error compiling template:\\n\\n\" + template + \"\\n\\n\" +\n            compiled.errors.map(function (e) { return (\"- \" + e); }).join('\\n') + '\\n',\n            vm\n          );\n        }\n      }\n      if (compiled.tips && compiled.tips.length) {\n        if (options.outputSourceRange) {\n          compiled.tips.forEach(function (e) { return tip(e.msg, vm); });\n        } else {\n          compiled.tips.forEach(function (msg) { return tip(msg, vm); });\n        }\n      }\n    }\n\n    // turn code into functions\n    var res = {};\n    var fnGenErrors = [];\n    res.render = createFunction(compiled.render, fnGenErrors);\n    res.staticRenderFns = compiled.staticRenderFns.map(function (code) {\n      return createFunction(code, fnGenErrors)\n    });\n\n    // check function generation errors.\n    // this should only happen if there is a bug in the compiler itself.\n    // mostly for codegen development use\n    /* istanbul ignore if */\n    if (true) {\n      if ((!compiled.errors || !compiled.errors.length) && fnGenErrors.length) {\n        warn$$1(\n          \"Failed to generate render function:\\n\\n\" +\n          fnGenErrors.map(function (ref) {\n            var err = ref.err;\n            var code = ref.code;\n\n            return ((err.toString()) + \" in\\n\\n\" + code + \"\\n\");\n        }).join('\\n'),\n          vm\n        );\n      }\n    }\n\n    return (cache[key] = res)\n  }\n}\n\n/*  */\n\nfunction createCompilerCreator (baseCompile) {\n  return function createCompiler (baseOptions) {\n    function compile (\n      template,\n      options\n    ) {\n      var finalOptions = Object.create(baseOptions);\n      var errors = [];\n      var tips = [];\n\n      var warn = function (msg, range, tip) {\n        (tip ? tips : errors).push(msg);\n      };\n\n      if (options) {\n        if ( true && options.outputSourceRange) {\n          // $flow-disable-line\n          var leadingSpaceLength = template.match(/^\\s*/)[0].length;\n\n          warn = function (msg, range, tip) {\n            var data = { msg: msg };\n            if (range) {\n              if (range.start != null) {\n                data.start = range.start + leadingSpaceLength;\n              }\n              if (range.end != null) {\n                data.end = range.end + leadingSpaceLength;\n              }\n            }\n            (tip ? tips : errors).push(data);\n          };\n        }\n        // merge custom modules\n        if (options.modules) {\n          finalOptions.modules =\n            (baseOptions.modules || []).concat(options.modules);\n        }\n        // merge custom directives\n        if (options.directives) {\n          finalOptions.directives = extend(\n            Object.create(baseOptions.directives || null),\n            options.directives\n          );\n        }\n        // copy other options\n        for (var key in options) {\n          if (key !== 'modules' && key !== 'directives') {\n            finalOptions[key] = options[key];\n          }\n        }\n      }\n\n      finalOptions.warn = warn;\n\n      var compiled = baseCompile(template.trim(), finalOptions);\n      if (true) {\n        detectErrors(compiled.ast, warn);\n      }\n      compiled.errors = errors;\n      compiled.tips = tips;\n      return compiled\n    }\n\n    return {\n      compile: compile,\n      compileToFunctions: createCompileToFunctionFn(compile)\n    }\n  }\n}\n\n/*  */\n\n// `createCompilerCreator` allows creating compilers that use alternative\n// parser/optimizer/codegen, e.g the SSR optimizing compiler.\n// Here we just export a default compiler using the default parts.\nvar createCompiler = createCompilerCreator(function baseCompile (\n  template,\n  options\n) {\n  var ast = parse(template.trim(), options);\n  if (options.optimize !== false) {\n    optimize(ast, options);\n  }\n  var code = generate(ast, options);\n  return {\n    ast: ast,\n    render: code.render,\n    staticRenderFns: code.staticRenderFns\n  }\n});\n\n/*  */\n\nvar ref$1 = createCompiler(baseOptions);\nvar compile = ref$1.compile;\nvar compileToFunctions = ref$1.compileToFunctions;\n\n/*  */\n\n// check whether current browser encodes a char inside attribute values\nvar div;\nfunction getShouldDecode (href) {\n  div = div || document.createElement('div');\n  div.innerHTML = href ? \"<a href=\\\"\\n\\\"/>\" : \"<div a=\\\"\\n\\\"/>\";\n  return div.innerHTML.indexOf('&#10;') > 0\n}\n\n// #3663: IE encodes newlines inside attribute values while other browsers don't\nvar shouldDecodeNewlines = inBrowser ? getShouldDecode(false) : false;\n// #6828: chrome encodes content in a[href]\nvar shouldDecodeNewlinesForHref = inBrowser ? getShouldDecode(true) : false;\n\n/*  */\n\nvar idToTemplate = cached(function (id) {\n  var el = query(id);\n  return el && el.innerHTML\n});\n\nvar mount = Vue.prototype.$mount;\nVue.prototype.$mount = function (\n  el,\n  hydrating\n) {\n  el = el && query(el);\n\n  /* istanbul ignore if */\n  if (el === document.body || el === document.documentElement) {\n     true && warn(\n      \"Do not mount Vue to <html> or <body> - mount to normal elements instead.\"\n    );\n    return this\n  }\n\n  var options = this.$options;\n  // resolve template/el and convert to render function\n  if (!options.render) {\n    var template = options.template;\n    if (template) {\n      if (typeof template === 'string') {\n        if (template.charAt(0) === '#') {\n          template = idToTemplate(template);\n          /* istanbul ignore if */\n          if ( true && !template) {\n            warn(\n              (\"Template element not found or is empty: \" + (options.template)),\n              this\n            );\n          }\n        }\n      } else if (template.nodeType) {\n        template = template.innerHTML;\n      } else {\n        if (true) {\n          warn('invalid template option:' + template, this);\n        }\n        return this\n      }\n    } else if (el) {\n      template = getOuterHTML(el);\n    }\n    if (template) {\n      /* istanbul ignore if */\n      if ( true && config.performance && mark) {\n        mark('compile');\n      }\n\n      var ref = compileToFunctions(template, {\n        outputSourceRange: \"development\" !== 'production',\n        shouldDecodeNewlines: shouldDecodeNewlines,\n        shouldDecodeNewlinesForHref: shouldDecodeNewlinesForHref,\n        delimiters: options.delimiters,\n        comments: options.comments\n      }, this);\n      var render = ref.render;\n      var staticRenderFns = ref.staticRenderFns;\n      options.render = render;\n      options.staticRenderFns = staticRenderFns;\n\n      /* istanbul ignore if */\n      if ( true && config.performance && mark) {\n        mark('compile end');\n        measure((\"vue \" + (this._name) + \" compile\"), 'compile', 'compile end');\n      }\n    }\n  }\n  return mount.call(this, el, hydrating)\n};\n\n/**\n * Get outerHTML of elements, taking care\n * of SVG elements in IE as well.\n */\nfunction getOuterHTML (el) {\n  if (el.outerHTML) {\n    return el.outerHTML\n  } else {\n    var container = document.createElement('div');\n    container.appendChild(el.cloneNode(true));\n    return container.innerHTML\n  }\n}\n\nVue.compile = compileToFunctions;\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Vue);\n\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = __webpack_modules__;\n/******/ \t\n/************************************************************************/\n/******/ \t/* webpack/runtime/chunk loaded */\n/******/ \t(() => {\n/******/ \t\tvar deferred = [];\n/******/ \t\t__webpack_require__.O = (result, chunkIds, fn, priority) => {\n/******/ \t\t\tif(chunkIds) {\n/******/ \t\t\t\tpriority = priority || 0;\n/******/ \t\t\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n/******/ \t\t\t\tdeferred[i] = [chunkIds, fn, priority];\n/******/ \t\t\t\treturn;\n/******/ \t\t\t}\n/******/ \t\t\tvar notFulfilled = Infinity;\n/******/ \t\t\tfor (var i = 0; i < deferred.length; i++) {\n/******/ \t\t\t\tvar [chunkIds, fn, priority] = deferred[i];\n/******/ \t\t\t\tvar fulfilled = true;\n/******/ \t\t\t\tfor (var j = 0; j < chunkIds.length; j++) {\n/******/ \t\t\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n/******/ \t\t\t\t\t\tchunkIds.splice(j--, 1);\n/******/ \t\t\t\t\t} else {\n/******/ \t\t\t\t\t\tfulfilled = false;\n/******/ \t\t\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n/******/ \t\t\t\t\t}\n/******/ \t\t\t\t}\n/******/ \t\t\t\tif(fulfilled) {\n/******/ \t\t\t\t\tdeferred.splice(i--, 1)\n/******/ \t\t\t\t\tresult = fn();\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t\treturn result;\n/******/ \t\t};\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/define property getters */\n/******/ \t(() => {\n/******/ \t\t// define getter functions for harmony exports\n/******/ \t\t__webpack_require__.d = (exports, definition) => {\n/******/ \t\t\tfor(var key in definition) {\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/global */\n/******/ \t(() => {\n/******/ \t\t__webpack_require__.g = (function() {\n/******/ \t\t\tif (typeof globalThis === 'object') return globalThis;\n/******/ \t\t\ttry {\n/******/ \t\t\t\treturn this || new Function('return this')();\n/******/ \t\t\t} catch (e) {\n/******/ \t\t\t\tif (typeof window === 'object') return window;\n/******/ \t\t\t}\n/******/ \t\t})();\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\n/******/ \t(() => {\n/******/ \t\t__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/make namespace object */\n/******/ \t(() => {\n/******/ \t\t// define __esModule on exports\n/******/ \t\t__webpack_require__.r = (exports) => {\n/******/ \t\t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t\t}\n/******/ \t\t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t\t};\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/node module decorator */\n/******/ \t(() => {\n/******/ \t\t__webpack_require__.nmd = (module) => {\n/******/ \t\t\tmodule.paths = [];\n/******/ \t\t\tif (!module.children) module.children = [];\n/******/ \t\t\treturn module;\n/******/ \t\t};\n/******/ \t})();\n/******/ \t\n/******/ \t/* webpack/runtime/jsonp chunk loading */\n/******/ \t(() => {\n/******/ \t\t// no baseURI\n/******/ \t\t\n/******/ \t\t// object to store loaded and loading chunks\n/******/ \t\t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n/******/ \t\t// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\n/******/ \t\tvar installedChunks = {\n/******/ \t\t\t\"/js/app\": 0,\n/******/ \t\t\t\"css/app\": 0\n/******/ \t\t};\n/******/ \t\t\n/******/ \t\t// no chunk on demand loading\n/******/ \t\t\n/******/ \t\t// no prefetching\n/******/ \t\t\n/******/ \t\t// no preloaded\n/******/ \t\t\n/******/ \t\t// no HMR\n/******/ \t\t\n/******/ \t\t// no HMR manifest\n/******/ \t\t\n/******/ \t\t__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n/******/ \t\t\n/******/ \t\t// install a JSONP callback for chunk loading\n/******/ \t\tvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n/******/ \t\t\tvar [chunkIds, moreModules, runtime] = data;\n/******/ \t\t\t// add \"moreModules\" to the modules object,\n/******/ \t\t\t// then flag all \"chunkIds\" as loaded and fire callback\n/******/ \t\t\tvar moduleId, chunkId, i = 0;\n/******/ \t\t\tfor(moduleId in moreModules) {\n/******/ \t\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n/******/ \t\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n/******/ \t\t\t\t}\n/******/ \t\t\t}\n/******/ \t\t\tif(runtime) var result = runtime(__webpack_require__);\n/******/ \t\t\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n/******/ \t\t\tfor(;i < chunkIds.length; i++) {\n/******/ \t\t\t\tchunkId = chunkIds[i];\n/******/ \t\t\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n/******/ \t\t\t\t\tinstalledChunks[chunkId][0]();\n/******/ \t\t\t\t}\n/******/ \t\t\t\tinstalledChunks[chunkIds[i]] = 0;\n/******/ \t\t\t}\n/******/ \t\t\treturn __webpack_require__.O(result);\n/******/ \t\t}\n/******/ \t\t\n/******/ \t\tvar chunkLoadingGlobal = self[\"webpackChunk\"] = self[\"webpackChunk\"] || [];\n/******/ \t\tchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\n/******/ \t\tchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));\n/******/ \t})();\n/******/ \t\n/************************************************************************/\n/******/ \t\n/******/ \t// startup\n/******/ \t// Load entry module and return exports\n/******/ \t// This entry module depends on other loaded chunks and execution need to be delayed\n/******/ \t__webpack_require__.O(undefined, [\"css/app\"], () => (__webpack_require__(\"./resources/js/app.js\")))\n/******/ \tvar __webpack_exports__ = __webpack_require__.O(undefined, [\"css/app\"], () => (__webpack_require__(\"./resources/sass/app.scss\")))\n/******/ \t__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n/******/ \t\n/******/ })()\n;"
  },
  {
    "path": "public/mix-manifest.json",
    "content": "{\n    \"/js/app.js\": \"/js/app.js\",\n    \"/css/app.css\": \"/css/app.css\"\n}\n"
  },
  {
    "path": "public/robots.txt",
    "content": "User-agent: *\nDisallow:\n"
  },
  {
    "path": "public/web.config",
    "content": "<!--\n    Rewrites requires Microsoft URL Rewrite Module for IIS\n    Download: https://www.microsoft.com/en-us/download/details.aspx?id=47337\n    Debug Help: https://docs.microsoft.com/en-us/iis/extensions/url-rewrite-module/using-failed-request-tracing-to-trace-rewrite-rules\n-->\n<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": "<img src=\"https://banners.beyondco.de/Laundry%20App.png?theme=light&packageManager=&packageName=&pattern=architect&style=style_1&description=Aplikasi+Management+Laundry&md=1&showWatermark=1&fontSize=100px&images=truck\" />\n<p>Halo, ini adalah aplikasi Laundry yang dibangun dengan cinta (love). Aplikasi ini sudah bisa multi toko loh, alias kamu bisa membuat cabang laundry.<br>\n\n## Requirements\n\n* Version 1.x , 2.x or 3.x use PHP 7.3 (Framework Laravel 8) [Versi 3.x](https://github.com/andes2912/laundry/tree/3.x)\n* Version 3.1 use PHP 8.0 (Framework Laravel 9) [Versi 3.1](https://github.com/andes2912/laundry/tree/3.1)\n* Database (eg: MySQL)\n* Web Server (eg: Apache, Nginx, IIS)\n\n## Framework\n\nLaundry dibangun menggunakan [Laravel](http://laravel.com), the best existing PHP framework, as the foundation framework.\n\n## Installation\n\n* Install [Composer](https://getcomposer.org/download) and [Npm](https://nodejs.org/en/download)\n* Clone the repository: `git clone https://github.com/andes2912/laundry.git`\n* Install dependencies: `composer install ; npm install ; npm run dev`\n* Run `cp .env.example .env` for create .env file\n* Run `php artisan migrate --seed` for migration database\n* Run `php artisan storage:link` for create folder storage\n* Run `php artisan create:admin` for create user Administrator\n* Run `php artisan queue:listen` for run queue\n\nNote : Aplikasi ini akan terus saya update.<br>\nKalau ada pertanyaan bisa kontak aku di email ini <b>andridesmana29@outlook.com</b>\n</p>\n\n## Package\n- [IndoBank](https://github.com/andes2912/indobank) package Laravel untuk menyimpan data Nama Bank yang ada di Indonesia\n\n\n## Fitur Release\n #### [Versi 3.1](https://github.com/andes2912/laundry/tree/3.1)\n   #### Administrator\n   * Dashboard Administrator\n   * Tambah User Karyawan\n   * Lihat data transaksi\n   * Data Finance\n   * Data Harga\n   * Atur target laundry\n   * Ubah thema (untuk saat ini hanya ada Dark & White)\n   * Data Bank\n   * Setting Notifikasi Email, Telegram dan WhatsAapp\n   * Dokumentasi\n\n   #### Karyawan\n   * Dashboard Karyawan\n   * Data order masuk\n   * Data customer\n   * Tambah customer\n   * Tambah transaksi Laundry\n   * Laporan\n   * Ubah thema (untuk saat ini hanya ada Dark & White)\n\n   #### Customer\n   * Dashboard Customer\n   * Ubah thema (untuk saat ini hanya ada Dark & White)\n   * Notification List\n\n\n## Sponsors\n\nSupport E-Laundry by becoming a sponsor on [Saweria](https://saweria.co/andes2912). Your logo will show up here with a link to your website.\n\n## Any Questions ?\n\nPlease contact me on [Andri Desmana](mailto:andridesmana29@outlook.com?subject=[GitHub]%20Questesion%20Pap!Kos) or [Telegram](https://t.me/andridesmana)\n\n## License\n\nThe Laravel framework is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT).\n\n## Dashboard Administrator\n<img src=\"https://github.com/andes2912/laundry/blob/2.x/public/images/v2.x/Dashboard%20Admin%20-%20Laundry.png\" />\n\n## Page Finane Administrator\n<img src=\"https://github.com/andes2912/laundry/blob/2.x/public/images/v2.x/Page%20Finance%20Admin%20-%20Laundry.png\" />\n\n## Page Harga Laundry Administrator\n<img src=\"https://github.com/andes2912/laundry/blob/2.x/public/images/v2.x/Page%20Harga%20Laundry%20Admin%20-%20Laundry.png\" />\n\n## Dashboard Karyawan\n<img src=\"https://github.com/andes2912/laundry/blob/2.x/public/images/v2.x/Dashboard%20Karyawan%20-%20Laundry.png\" />\n\n## Page Pemesanan Laundry Karyawan\n<img src=\"https://github.com/andes2912/laundry/blob/2.x/public/images/v2.x/Page%20Add%20Order%20-%20Laundry.png\" />\n"
  },
  {
    "path": "resources/js/app.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');\n\nwindow.Vue = require('vue');\nimport Vue from 'vue'\n/**\n * The following block of code may be used to automatically register your\n * Vue components. It will recursively scan this directory for the Vue\n * components and automatically register them with their \"basename\".\n *\n * Eg. ./components/ExampleComponent.vue -> <example-component></example-component>\n */\n\n// const files = require.context('./', true, /\\.vue$/i);\n// files.keys().map(key => Vue.component(key.split('/').pop().split('.')[0], files(key).default));\n\n// Vue.component('example-component', require('./components/ExampleComponent.vue').default);\nVue.component('contenone', require('./components/Contentone.vue').default);\nVue.component('contentwo', require('./components/Contentwo.vue').default);\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\nconst app = new Vue({\n    el: '#app',\n});\n"
  },
  {
    "path": "resources/js/bootstrap.js",
    "content": "window._ = 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.Popper = require('popper.js').default;\n    window.$ = window.jQuery = require('jquery');\n\n    require('bootstrap');\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: process.env.MIX_PUSHER_APP_KEY,\n//     cluster: process.env.MIX_PUSHER_APP_CLUSTER,\n//     encrypted: true\n// });\n"
  },
  {
    "path": "resources/js/components/Contentone.vue",
    "content": "<template>\n  <div class=\"col-12\" style=\"margin-bottom: 35% !important\">\n    <div class=\"panel panel-forum\">\n      <div class=\"justify-content-start\">\n        <div class=\"col-md-6\">\n          <img :src=\"'frontend/img/suply.png'\" style=\"width: 100%; max-height:400px; min-height:400px\" alt=\"\">\n        </div>\n        <div class=\"col-md-6\" style=\"max-height:400px; min-height:400px;\">\n        <div class=\"\" style=\"margin-top: 20%\">\n            <h1 class=\"text-center\" style=\"color: black\">\n              Solusi Pakaian Kotor Ingat kami !\n            </h1>\n            <h3 class=\"text-center\">\n              Tunggu aja dirumah, biar kurir kami yang jemput dan antar pakaian kotor kamu :)\n            </h3>\n        </div>\n        </div>\n      </div>\n    </div>\n  </div>\n</template>"
  },
  {
    "path": "resources/js/components/contentwo.vue",
    "content": "<template>\n  <div>\n    <h3 class=\"text-center\" style=\"color: black;\">Mengapa Kami ?</h3>\n    <hr>\n    <div class=\"row\">\n      <div class=\"col-md-3 promo\">\n        <div class=\"panel panel-forum\">\n          <div class=\"panel-heading\">\n              <h4 class=\"panel-title\" style=\"font-weight:bold; color:black; font-size:15px\">\n                  Order Online\n              </h4>\n          </div>\n          <img :src=\"'frontend/img/order.png'\" style=\"width: 100%; max-height:230px; min-height:230px\" alt=\"\">\n        </div>\n      </div>\n\n      <div class=\"col-md-3 shadow-lg\">\n        <div class=\"panel panel-forum tips\">\n          <div class=\"panel-heading\">\n              <h4 class=\"panel-title\" style=\"font-weight:bold; color:black; font-size:15px\">\n                  Profesional\n              </h4>\n          </div>\n          <img :src=\"'frontend/img/profesional.png'\" style=\"width: 100%; max-height:230px; min-height:230px\" alt=\"\">\n        </div>\n      </div>\n\n      <div class=\"col-md-3 shadow-lg\">\n        <div class=\"panel panel-forum tips\">\n          <div class=\"panel-heading\">\n              <h4 class=\"panel-title\" style=\"font-weight:bold; color:black; font-size:15px\">\n                  Terpercaya\n              </h4>\n          </div>\n          <img :src=\"'frontend/img/terpercaya.png'\" style=\"width: 100%; max-height:230px; min-height:230px\" alt=\"\">\n        </div>\n      </div>\n\n      <div class=\"col-md-3 shadow-lg\">\n        <div class=\"panel panel-forum tips\">\n          <div class=\"panel-heading\">\n              <h4 class=\"panel-title\" style=\"font-weight:bold; color:black; font-size:15px\">\n                  Bergaransi\n              </h4>\n          </div>\n          <img :src=\"'frontend/img/garansi.png'\" style=\"width: 100%; max-height:230px; min-height:230px\" alt=\"\">\n        </div>\n      </div>\n    </div>\n  </div>\n</template>"
  },
  {
    "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/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 eight 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, dashes and underscores.',\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_equals' => 'The :attribute must be a date equal to :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    'ends_with' => 'The :attribute must end with one of the following: :values',\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    'gt' => [\n        'numeric' => 'The :attribute must be greater than :value.',\n        'file' => 'The :attribute must be greater than :value kilobytes.',\n        'string' => 'The :attribute must be greater than :value characters.',\n        'array' => 'The :attribute must have more than :value items.',\n    ],\n    'gte' => [\n        'numeric' => 'The :attribute must be greater than or equal :value.',\n        'file' => 'The :attribute must be greater than or equal :value kilobytes.',\n        'string' => 'The :attribute must be greater than or equal :value characters.',\n        'array' => 'The :attribute must have :value items or more.',\n    ],\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    'lt' => [\n        'numeric' => 'The :attribute must be less than :value.',\n        'file' => 'The :attribute must be less than :value kilobytes.',\n        'string' => 'The :attribute must be less than :value characters.',\n        'array' => 'The :attribute must have less than :value items.',\n    ],\n    'lte' => [\n        'numeric' => 'The :attribute must be less than or equal :value.',\n        'file' => 'The :attribute must be less than or equal :value kilobytes.',\n        'string' => 'The :attribute must be less than or equal :value characters.',\n        'array' => 'The :attribute must not have more than :value items.',\n    ],\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    'not_regex' => 'The :attribute format 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 are 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    'starts_with' => 'The :attribute must start with one of the following: :values',\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    'uuid' => 'The :attribute must be a valid UUID.',\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 our attribute placeholder\n    | with something more reader friendly such as \"E-Mail Address\" instead\n    | of \"email\". This simply helps us make our message more expressive.\n    |\n    */\n\n    'attributes' => [],\n\n];\n"
  },
  {
    "path": "resources/sass/_variables.scss",
    "content": "// Body\n$body-bg: #f8fafc;\n\n// Typography\n$font-family-sans-serif: 'Nunito', sans-serif;\n$font-size-base: 0.9rem;\n$line-height-base: 1.6;\n\n// Colors\n$blue: #3490dc;\n$indigo: #6574cd;\n$purple: #9561e2;\n$pink: #f66d9b;\n$red: #e3342f;\n$orange: #f6993f;\n$yellow: #ffed4a;\n$green: #38c172;\n$teal: #4dc0b5;\n$cyan: #6cb2eb;\n"
  },
  {
    "path": "resources/sass/app.scss",
    "content": "// Fonts\n@import url('https://fonts.googleapis.com/css?family=Nunito');\n\n// Variables\n@import 'variables';\n\n// Bootstrap\n@import '~bootstrap/scss/bootstrap';\n"
  },
  {
    "path": "resources/views/auth/login.blade.php",
    "content": "@extends('layouts.auth')\n@section('title','Masuk')\n@section('content')\n<section class=\"row flexbox-container\">\n    <div class=\"col-xl-8 col-11 d-flex justify-content-center\">\n        <div class=\"card bg-authentication rounded-0 mb-0\">\n            <div class=\"row m-0\">\n                <div class=\"col-lg-6 d-lg-block d-none text-center align-self-center px-1 py-0\">\n                    <img src=\"{{asset('backend/images/pages/login.png')}}\" alt=\"branding logo\">\n                </div>\n                <div class=\"col-lg-6 col-12 p-0\">\n                    <div class=\"card rounded-0 mb-0 px-2\">\n                        <div class=\"card-header pb-1\">\n                            @if($message = Session::get('error'))\n                              <div class=\"alert alert-danger alert-block\">\n                                <strong>{{ $message }}</strong>\n                              </div>\n                            @endif\n                            <div class=\"card-title\">\n                                <h4 class=\"mb-0\">Masuk</h4>\n                            </div>\n                        </div>\n                        <p class=\"px-2\">Selamat Datang, Masuk Menggunakan Akun Kamu.</p>\n                        <div class=\"card-content\">\n                            <div class=\"card-body pt-1\">\n                                <form action=\"{{route('login')}}\" method=\"POST\">\n                                    @csrf\n                                    <fieldset class=\"form-label-group form-group position-relative has-icon-left\">\n                                        <input type=\"email\" name=\"email\" class=\"form-control @error('email') is-invalid @enderror\" id=\"email\" placeholder=\"E-Mail\" value=\"{{ old('email') }}\">\n                                        @error('email')\n                                          <span class=\"invalid-feedback text-danger\" role=\"alert\">\n                                            <strong>{{ $message }}</strong>\n                                          </span>\n                                        @enderror\n                                        <div class=\"form-control-position\">\n                                            <i class=\"feather icon-user\"></i>\n                                        </div>\n                                        <label for=\"email\">E-Mail</label>\n                                    </fieldset>\n\n                                    <fieldset class=\"form-label-group position-relative has-icon-left\">\n                                        <input type=\"password\" name=\"password\" class=\"form-control @error('password') is-invalid @enderror\" id=\"user-password\" placeholder=\"Password\">\n                                        @error('password')\n                                          <span class=\"invalid-feedback text-danger\" role=\"alert\">\n                                            <strong>{{ $message }}</strong>\n                                          </span>\n                                        @enderror\n                                        <div class=\"form-control-position\">\n                                            <i class=\"feather icon-lock\"></i>\n                                        </div>\n                                        <label for=\"user-password\">Password</label>\n                                    </fieldset>\n                                    <button type=\"submit\" class=\"btn btn-primary float-right btn-inline btn-block\">Login</button>\n                                </form>\n                            </div>\n                        </div>\n                        <span class=\"mt-1 ml-2\" style=\"text-align: left\"><a href=\" {{route('password.request')}} \">Lupa Password ?</a></span>\n                        <div class=\"login-footer\">\n                            <div class=\"divider\">\n                                <div class=\"divider-text\"><a href=\"/\">E-Laundry</a></div>\n                            </div>\n                            <p style=\"font-size:10px;text-align:center\">Build With <i class=\"feather icon-heart text-danger\"></i> by <a href=\"https://andridesmana.space\" target=\"_blank\">Andri Desmana</a></p>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n</section>\n@endsection\n"
  },
  {
    "path": "resources/views/auth/passwords/email.blade.php",
    "content": "<!DOCTYPE html>\n<html class=\"loading dark-layout\" lang=\"en\" data-layout=\"dark-layout\" data-textdirection=\"ltr\">\n<!-- BEGIN: Head-->\n\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width,initial-scale=1.0,user-scalable=0,minimal-ui\">\n    <meta name=\"description\" content=\"E-Laundy aplikasi laundry berbasis website\">\n    <meta name=\"keywords\" content=\"E-Laundry,Laundry\">\n    <meta name=\"author\" content=\"Andri Desmana\">\n    <title>Forgot Password - E-Laundry</title>\n    <link href=\"https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,300;0,400;0,500;0,600;1,400;1,500;1,600\" rel=\"stylesheet\">\n\n    <!-- BEGIN: Vendor CSS-->\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"{{asset('backend/vendors/css/vendors.min.css')}}\">\n    <!-- END: Vendor CSS-->\n\n    <!-- BEGIN: Theme CSS-->\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"{{asset('backend/css/bootstrap.css')}}\">\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"{{asset('backend/css/bootstrap-extended.css')}}\">\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"{{asset('backend/css/colors.css')}}\">\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"{{asset('backend/css/components.css')}}\">\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"{{asset('backend/css/themes/dark-layout.css')}}\">\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"{{asset('backend/css/themes/semi-dark-layout.css')}}\">\n\n    <!-- BEGIN: Page CSS-->\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"{{asset('backend/css/core/menu/menu-types/horizontal-menu.css')}}\">\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"{{asset('backend/css/pages/page-auth.css')}}\">\n    <!-- END: Page CSS-->\n\n    <!-- BEGIN: Custom CSS-->\n    <!-- END: Custom CSS-->\n\n</head>\n<!-- END: Head-->\n\n<!-- BEGIN: Body-->\n\n<body class=\"horizontal-layout horizontal-menu blank-page navbar-floating footer-static  \" data-open=\"hover\" data-menu=\"horizontal-menu\" data-col=\"blank-page\">\n    <!-- BEGIN: Content-->\n    <div class=\"app-content content \">\n        <div class=\"content-overlay\"></div>\n        <div class=\"header-navbar-shadow\"></div>\n        <div class=\"content-wrapper\">\n            <div class=\"content-header row\">\n            </div>\n            <div class=\"content-body\">\n              @if (session('status'))\n                <div class=\"alert alert-success\" role=\"alert\">\n                    {{ session('status') }}\n                </div>\n              @endif\n                <div class=\"auth-wrapper auth-v1 px-2\">\n                    <div class=\"auth-inner py-2\">\n                        <!-- Forgot Password -->\n                        <div class=\"card mb-0\">\n                            <div class=\"card-body\">\n                                <a href=\"javascript:void(0);\" class=\"brand-logo\">\n                                    <h2 class=\"brand-text text-primary ml-1\">E-Laundry</h2>\n                                </a>\n                                <h4 class=\"card-title mb-1\">Lupa Password? 🔒</h4>\n                                <p class=\"card-text mb-2\">Masukkan email Anda dan kami akan mengirimkan instruksi untuk mereset kata sandi Anda</p>\n                                <form class=\"auth-forgot-password-form mt-2\" action=\"{{ route('password.email') }}\" method=\"POST\">\n                                  @csrf\n                                    <div class=\"form-group\">\n                                        <label for=\"forgot-password-email\" class=\"form-label\">Email</label>\n                                        <input type=\"email\" class=\"form-control  @error('email') is-invalid @enderror\" id=\"email\" name=\"email\" value=\"{{ old('email') }}\" placeholder=\"andri@example.com\"/>\n                                        @error('email')\n                                            <span class=\"invalid-feedback text-danger\" role=\"alert\">\n                                                <strong>{{ $message }}</strong>\n                                            </span>\n                                        @enderror\n                                    </div>\n                                    <button type=\"submit\" class=\"btn btn-primary btn-block\" >Kirim Reset </button>\n                                </form>\n\n                                <p class=\"text-center mt-2\">\n                                    <a href=\"/login\"> <i data-feather=\"chevron-left\"></i> Kembali ke login </a>\n                                </p>\n                            </div>\n                        </div>\n                        <!-- /Forgot Password -->\n                    </div>\n                </div>\n\n            </div>\n        </div>\n    </div>\n    <!-- END: Content-->\n\n\n    <script src=\"{{asset('backend/vendors/js/vendors.js')}}\"></script>\n    <!-- BEGIN Vendor JS-->\n\n    <!-- BEGIN: Page Vendor JS-->\n    <script src=\"{{asset('backend/vendors/js/ui/jquery.sticky.js')}}\"></script>\n    <script src=\"{{asset('backend/vendors/js/forms/validation/jquery.validate.min.js')}}\"></script>\n    <!-- END: Page Vendor JS-->\n\n    <!-- BEGIN: Theme JS-->\n    <script src=\"{{asset('backend/js/core/app-menu.js')}}\"></script>\n    <script src=\"{{asset('backend/js/core/app.js')}}\"></script>\n    <!-- END: Theme JS-->\n\n    <!-- BEGIN: Page JS-->\n    <script src=\"{{asset('backend/js/scripts/pages/page-auth-reset-password.js')}}\"></script>\n    <!-- END: Page JS-->\n\n    <script>\n        $(window).on('load', function() {\n            if (feather) {\n                feather.replace({\n                    width: 14,\n                    height: 14\n                });\n            }\n        })\n    </script>\n</body>\n<!-- END: Body-->\n\n</html>"
  },
  {
    "path": "resources/views/auth/passwords/reset.blade.php",
    "content": "<!DOCTYPE html>\n<html class=\"loading dark-layout\" lang=\"en\" data-layout=\"dark-layout\" data-textdirection=\"ltr\">\n<!-- BEGIN: Head-->\n\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width,initial-scale=1.0,user-scalable=0,minimal-ui\">\n    <meta name=\"description\" content=\"E-Laundy aplikasi laundry berbasis website\">\n    <meta name=\"keywords\" content=\"E-Laundry,Laundry\">\n    <meta name=\"author\" content=\"Andri Desmana\">\n    <title>Reset Password</title>\n    <link href=\"https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,300;0,400;0,500;0,600;1,400;1,500;1,600\" rel=\"stylesheet\">\n\n    <!-- BEGIN: Vendor CSS-->\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"{{asset('backend/vendors/css/vendors.min.css')}}\">\n    <!-- END: Vendor CSS-->\n\n    <!-- BEGIN: Theme CSS-->\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"{{asset('backend/css/bootstrap.css')}}\">\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"{{asset('backend/css/bootstrap-extended.css')}}\">\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"{{asset('backend/css/colors.css')}}\">\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"{{asset('backend/css/components.css')}}\">\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"{{asset('backend/css/themes/dark-layout.css')}}\">\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"{{asset('backend/css/themes/semi-dark-layout.css')}}\">\n\n    <!-- BEGIN: Page CSS-->\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"{{asset('backend/css/core/menu/menu-types/horizontal-menu.css')}}\">\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"{{asset('backend/css/pages/page-auth.css')}}\">\n    <!-- END: Page CSS-->\n\n    <!-- BEGIN: Custom CSS-->\n    <!-- END: Custom CSS-->\n\n</head>\n<!-- END: Head-->\n\n<!-- BEGIN: Body-->\n\n<body class=\"horizontal-layout horizontal-menu blank-page navbar-floating footer-static  \" data-open=\"hover\" data-menu=\"horizontal-menu\" data-col=\"blank-page\">\n    <!-- BEGIN: Content-->\n    <div class=\"app-content content \">\n        <div class=\"content-overlay\"></div>\n        <div class=\"header-navbar-shadow\"></div>\n        <div class=\"content-wrapper\">\n            <div class=\"content-header row\">\n            </div>\n            <div class=\"content-body\">\n                <div class=\"auth-wrapper auth-v1 px-2\">\n                    <div class=\"auth-inner py-2\">\n                        <!-- Reset Password v1 -->\n                        <div class=\"card mb-0\">\n                            <div class=\"card-body\">\n                                <a href=\"javascript:void(0);\" class=\"brand-logo\">\n                                    <h2 class=\"brand-text text-primary ml-1\">E-Laundry</h2>\n                                </a>\n\n                                <h4 class=\"card-title mb-1\">Reset Password 🔒</h4>\n                                <p class=\"card-text mb-2\">Kata sandi baru Anda harus berbeda dari kata sandi yang digunakan sebelumnya</p>\n\n                                <form class=\"auth-reset-password-form mt-2\" action=\"{{route('password.update')}}\" method=\"POST\">\n                                  @csrf\n                                  <input type=\"hidden\" name=\"token\" value=\"{{ $token }}\">\n                                    <div class=\"form-group\">\n                                        <div class=\"d-flex justify-content-between\">\n                                            <label for=\"password\">Email</label>\n                                        </div>\n                                        <div class=\"input-group input-group-merge\">\n                                            <input type=\"email\" class=\"form-control @error('email') is-invalid @enderror\" value=\" {{ $email ?? old('email') }} \" id=\"email\" name=\"email\"/>\n\n                                            <div class=\"input-group-append\">\n                                                <span class=\"input-group-text cursor-pointer\"><i data-feather=\"eye\"></i></span>\n                                            </div>\n                                             @error('email')\n                                                <span class=\"invalid-feedback\" role=\"alert\">\n                                                    <strong>{{ $message }}</strong>\n                                                </span>\n                                            @enderror\n                                        </div>\n                                    </div>\n\n                                    <div class=\"form-group\">\n                                        <div class=\"d-flex justify-content-between\">\n                                            <label for=\"password\">Password Baru</label>\n                                        </div>\n                                        <div class=\"input-group input-group-merge\">\n                                            <input type=\"password\" class=\"form-control @error('password') is-invalid @enderror\" id=\"password\" name=\"password\"/>\n\n                                            <div class=\"input-group-append\">\n                                                <span class=\"input-group-text cursor-pointer\"><i data-feather=\"eye\"></i></span>\n                                            </div>\n                                             @error('password')\n                                                <span class=\"invalid-feedback\" role=\"alert\">\n                                                    <strong>{{ $message }}</strong>\n                                                </span>\n                                            @enderror\n                                        </div>\n                                    </div>\n\n\n                                    <div class=\"form-group\">\n                                        <div class=\"d-flex justify-content-between\">\n                                            <label for=\"reset-password-confirm\">Konfirmasi Password Baru</label>\n                                        </div>\n                                        <div class=\"input-group input-group-merge\">\n                                            <input type=\"password\" name=\"password_confirmation\" class=\"form-control @error('password_confirmation') is-invalid @enderror\" id=\"password_confirmation\" />\n                                            <div class=\"input-group-append\">\n                                                <span class=\"input-group-text cursor-pointer\"><i data-feather=\"eye\"></i></span>\n                                            </div>\n                                            @error('password_confirmation')\n                                                <span class=\"invalid-feedback\" role=\"alert\">\n                                                    <strong>{{ $message }}</strong>\n                                                </span>\n                                            @enderror\n                                        </div>\n                                    </div>\n                                    <button type=\"submit\" class=\"btn btn-primary btn-block\" >Buat Password Baru</button>\n                                </form>\n\n                                <p class=\"text-center mt-2\">\n                                    <a href=\"/login\"> <i data-feather=\"chevron-left\"></i> Kembali ke login </a>\n                                </p>\n                            </div>\n                        </div>\n                        <!-- /Reset Password v1 -->\n                    </div>\n                </div>\n\n            </div>\n        </div>\n    </div>\n    <!-- END: Content-->\n\n\n    <!-- BEGIN: Vendor JS-->\n    <script src=\"{{asset('backend/vendors/js/vendors.js')}}\"></script>\n    <!-- BEGIN Vendor JS-->\n\n    <!-- BEGIN: Page Vendor JS-->\n    <script src=\"{{asset('backend/vendors/js/ui/jquery.sticky.js')}}\"></script>\n    <script src=\"{{asset('backend/vendors/js/forms/validation/jquery.validate.min.js')}}\"></script>\n    <!-- END: Page Vendor JS-->\n\n    <!-- BEGIN: Theme JS-->\n    <script src=\"{{asset('backend/js/core/app-menu.js')}}\"></script>\n    <script src=\"{{asset('backend/js/core/app.js')}}\"></script>\n    <!-- END: Theme JS-->\n\n    <!-- BEGIN: Page JS-->\n    <script src=\"{{asset('backend/js/scripts/pages/page-auth-reset-password.js')}}\"></script>\n    <!-- END: Page JS-->\n\n    <script>\n        $(window).on('load', function() {\n            if (feather) {\n                feather.replace({\n                    width: 14,\n                    height: 14\n                });\n            }\n        })\n    </script>\n</body>\n<!-- END: Body-->\n\n</html>"
  },
  {
    "path": "resources/views/auth/verify.blade.php",
    "content": "@extends('layouts.app')\n\n@section('content')\n<div class=\"container\">\n    <div class=\"row justify-content-center\">\n        <div class=\"col-md-8\">\n            <div class=\"card\">\n                <div class=\"card-header\">{{ __('Verify Your Email Address') }}</div>\n\n                <div class=\"card-body\">\n                    @if (session('resent'))\n                        <div class=\"alert alert-success\" role=\"alert\">\n                            {{ __('A fresh verification link has been sent to your email address.') }}\n                        </div>\n                    @endif\n\n                    {{ __('Before proceeding, please check your email for a verification link.') }}\n                    {{ __('If you did not receive the email') }}, <a href=\"{{ route('verification.resend') }}\">{{ __('click here to request another') }}</a>.\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n@endsection\n"
  },
  {
    "path": "resources/views/customer/index.blade.php",
    "content": "@extends('layouts.backend')\n@section('title','Dashboard Customer')\n@section('content')\n <div class=\"row match-height\">\n      <div class=\"col-xl-4 col-md-6 col-12\">\n          <div class=\"card card-congratulation-medal\">\n              <div class=\"card-body\">\n                  <h5>Welcome 🎉 {{Auth::user()->name}}!</h5>\n                  <p class=\"card-text font-small-2\">Semoga harimu menyenangkan.</p> <br>\n                  {{date('l, d F Y')}}, {{date('H:i:s')}}\n              </div>\n          </div>\n      </div>\n      <!--/ Medal Card -->\n\n      <div class=\"col-xl-8 col-md-6 col-12\">\n          <div class=\"card card-statistics\">\n              <div class=\"card-header\">\n                  <h4 class=\"card-title\">Statistics</h4>\n                  <div class=\"d-flex align-items-center\">\n                      <p class=\"card-text font-small-2 mr-25 mb-0\">Updated 1 month ago</p>\n                  </div>\n              </div>\n              <div class=\"card-body statistics-body\">\n                  <div class=\"row\">\n                      <div class=\"col-xl-4 col-sm-6 col-12 mb-2 mb-xl-0\">\n                          <div class=\"media\">\n                              <div class=\"avatar bg-light-primary mr-2\">\n                                  <div class=\"avatar-content\">\n                                      <i class=\"feather icon-check text-primary font-medium-5\"></i>\n                                  </div>\n                              </div>\n                              <div class=\"media-body my-auto\">\n                                  <h4 class=\"font-weight-bolder mb-0\">{{$totalLaundry}} Total</h4>\n                                  <p class=\"card-text font-small-1 mb-0\">Jumlah Laundry</p>\n                              </div>\n                          </div>\n                      </div>\n                      <div class=\"col-xl-4 col-sm-6 col-12 mb-2 mb-xl-0\">\n                          <div class=\"media\">\n                              <div class=\"avatar bg-light-info mr-2\">\n                                  <div class=\"avatar-content\">\n                                      <i class=\"feather icon-box text-success font-medium-5\"></i>\n                                  </div>\n                              </div>\n                              <div class=\"media-body my-auto\">\n                                  <h4 class=\"font-weight-bolder mb-0\">{{$totalLaundryKg}} Kg</h4>\n                                  <p class=\"card-text font-small-1 mb-0\">Jumlah Laundry</p>\n                              </div>\n                          </div>\n                      </div>\n                      <div class=\"col-xl-4 col-sm-6 col-12 mb-2 mb-sm-0\">\n                          <div class=\"media\">\n                              <div class=\"avatar bg-light-danger mr-2\">\n                                  <div class=\"avatar-content\">\n                                      <i class=\"feather icon-star text-danger font-medium-5\"></i>\n                                  </div>\n                              </div>\n                              <div class=\"media-body my-auto\">\n                                  <h4 class=\"font-weight-bolder mb-0\"> {{Auth::user()->point}} </h4>\n                                  <p class=\"card-text font-small-1 mb-0\">Point</p>\n                              </div>\n                          </div>\n                      </div>\n                  </div>\n              </div>\n          </div>\n      </div>\n\n      <div class=\"col-xl-12 col-md-12 col-12\">\n        {{-- Table --}}\n        <div class=\"card\">\n          <div class=\"card-body\">\n            <h4 class=\"card-title\">\n              Data Transaksi Kamu\n            </h4>\n            <div class=\"table-responsive m-t-0\">\n              <table id=\"myTable\" class=\"table display table-bordered table-striped\">\n                <thead>\n                  <tr>\n                    <th>#</th>\n                    <th>No Resi</th>\n                    <th>TGL Transaksi</th>\n                    <th>Status</th>\n                    <th>Payment</th>\n                    <th>Jenis</th>\n                    <th>Total</th>\n                    {{-- <th>Action</th> --}}\n                  </tr>\n                </thead>\n                <tbody>\n                  @foreach ($transaksi as $key => $transaksis)\n                    <tr>\n                      <td> {{$key+1}} </td>\n                      <td> {{$transaksis->invoice}} </td>\n                      <td> {{$transaksis->tgl_transaksi}} </td>\n                      <td> {{$transaksis->status_order}} </td>\n                      <td> {{$transaksis->status_payment}} </td>\n                      <td> {{$transaksis->price->jenis}} </td>\n                      <td> {{$transaksis->harga_akhir}} </td>\n                      {{-- <td>\n                        <a href=\"\" class=\"btn btn-sm btn-info\">Detail</a>\n                      </td> --}}\n                    </tr>\n                  @endforeach\n                </tbody>\n              </table>\n            </div>\n          </div>\n        </div>\n      </div>\n </div>\n@endsection\n@section('scripts')\n<script type=\"text/javascript\">\n// DATATABLE\n$(document).ready(function() {\n    $('#myTable').DataTable();\n    $(document).ready(function() {\n        var table = $('#example').DataTable({\n            \"columnDefs\": [{\n                \"visible\": false,\n                \"targets\": 2\n            }],\n            \"order\": [\n                [2, 'asc']\n            ],\n            \"displayLength\": 25,\n            \"drawCallback\": function(settings) {\n                var api = this.api();\n                var rows = api.rows({\n                    page: 'current'\n                }).nodes();\n                var last = null;\n                api.column(2, {\n                    page: 'current'\n                }).data().each(function(group, i) {\n                    if (last !== group) {\n                        $(rows).eq(i).before('<tr class=\"group\"><td colspan=\"5\">' + group + '</td></tr>');\n                        last = group;\n                    }\n                });\n            }\n        });\n    });\n});\n</script>\n@endsection"
  },
  {
    "path": "resources/views/customer/profile/index.blade.php",
    "content": "@extends('layouts.backend')\n@section('title','Profile')\n@section('content')\n@if ($message = Session::get('success'))\n  <div class=\"alert alert-success alert-block\">\n  <button type=\"button\" class=\"close\" data-dismiss=\"alert\">×</button>\n    <strong>{{ $message }}</strong>\n  </div>\n@elseif($message = Session::get('error'))\n  <div class=\"alert alert-danger alert-block\">\n  <button type=\"button\" class=\"close\" data-dismiss=\"alert\">×</button>\n    <strong>{{ $message }}</strong>\n  </div>\n@endif\n<div class=\"row\">\n    <div class=\"col-lg-4 col-xlg-3 col-md-5\">\n        <div class=\"card\">\n            <div class=\"card-body\">\n                <div class=\"col text-center\">\n                    <div class=\"m-t-30\">\n                      <img class=\"round\" src=\"{{asset(Auth::user()->foto == null ? 'backend/images/profile/user.jpg' : 'storage/images/foto_profile/'. Auth::user()->foto )}}\" alt=\"avatar\" height=\"150\" width=\"150\">\n                        <h4 class=\"card-title mt-1\">{{Auth::user()->name}}</h4>\n                        <h6 class=\"small\">Customer</h6>\n                    </div>\n                </div>\n            </div>\n            <div>\n                <hr> </div>\n            <div class=\"card-body\"> <small class=\"text-muted\">Email address </small>\n              <h6>{{Auth::user()->email}}</h6> <small class=\"text-muted p-t-30 db\">Phone</small>\n              <h6>+{{Auth::user()->no_telp}}</h6> <small class=\"text-muted p-t-30 db\">Address</small>\n              <h6>{{Auth::user()->alamat}}</h6>\n              <small class=\"text-muted p-t-30 db\">Social Profile</small>\n              <br/>\n              <button class=\"btn btn-circle btn-secondary\"><i class=\"fa fa-facebook\"></i></button>\n              <button class=\"btn btn-circle btn-secondary\"><i class=\"fa fa-twitter\"></i></button>\n              <button class=\"btn btn-circle btn-secondary\"><i class=\"fa fa-youtube\"></i></button>\n            </div>\n        </div>\n    </div>\n\n    <div class=\"col-lg-8 col-xlg-9 col-md-7\">\n        <div class=\"card\">\n            <!-- Nav tabs -->\n            <ul class=\"nav nav-tabs profile-tab\" role=\"tablist\">\n              <li class=\"nav-item\"> <a class=\"nav-link active\" data-toggle=\"tab\" href=\"#home\" role=\"tab\">Informasi</a> </li>\n            </ul>\n            <div class=\"card-body\">\n              <form action=\" {{url('me', Auth::id())}}\" method=\"POST\" enctype=\"multipart/form-data\">\n                @csrf\n                @method('PUT')\n                <div class=\"form-body\">\n                  <div class=\"row\">\n                    <div class=\"col-md-6\">\n                      <div class=\"form-group has-success\">\n                        <label class=\"control-label\">Nama</label>\n                        <input type=\"text\" name=\"name\" value=\" {{Auth::user()->name}} \" class=\"form-control @error('name') is-invalid @enderror\">\n                        @error('name')\n                          <span class=\"invalid-feedback text-danger\" role=\"alert\">\n                              <strong>{{ $message }}</strong>\n                          </span>\n                        @enderror\n                      </div>\n                    </div>\n\n                    <div class=\"col-md-6\">\n                      <div class=\"form-group has-success\">\n                        <label class=\"control-label\">Email</label>\n                        <input type=\"text\" name=\"email\" value=\" {{Auth::user()->email}} \" class=\"form-control @error('email') is-invalid @enderror\">\n                        @error('email')\n                          <span class=\"invalid-feedback text-danger\" role=\"alert\">\n                              <strong>{{ $message }}</strong>\n                          </span>\n                        @enderror\n                      </div>\n                    </div>\n\n                    <div class=\"col-md-12\">\n                      <div class=\"form-group has-success\">\n                        <label class=\"control-label\">Alamat</label>\n                        <textarea name=\"alamat\" class=\"form-control\" id=\"alamat\" cols=\"5\"> {{Auth::user()->alamat}} </textarea>\n                        @error('alamat')\n                          <span class=\"invalid-feedback text-danger\" role=\"alert\">\n                              <strong>{{ $message }}</strong>\n                          </span>\n                        @enderror\n                      </div>\n                    </div>\n\n                    <div class=\"col-md-6\">\n                      <div class=\"form-group has-success\">\n                        <label class=\"control-label\">No WhatsApp</label>\n                        <input type=\"text\" name=\"number\" class=\"form-control\" value=\"{{Auth::user()->no_telp}}\" />\n                        @error('no_telp')\n                          <span class=\"invalid-feedback text-danger\" role=\"alert\">\n                              <strong>{{ $message }}</strong>\n                          </span>\n                        @enderror\n                      </div>\n                    </div>\n\n                    <div class=\"col-md-6\">\n                      <div class=\"form-group has-success\">\n                        <label class=\"control-label\">Foto</label>\n                        <input type=\"file\" name=\"foto\" class=\"form-control @error('foto') is-invalid @enderror\">\n                        <span class=\"small text-warning\">Biarkan kosong jika tidak ingin di update.</span>\n                        @error('foto')\n                          <span class=\"invalid-feedback text-danger\" role=\"alert\">\n                              <strong>{{ $message }}</strong>\n                          </span>\n                        @enderror\n                      </div>\n                    </div>\n\n                    <div class=\"col-md-6\">\n                      <div class=\"form-group has-success\">\n                        <label class=\"control-label\">Password</label>\n                        <input type=\"password\" name=\"password\" class=\"form-control @error('password') is-invalid @enderror\">\n                        <span class=\"small text-warning\">Biarkan kosong jika tidak ingin di update.</span>\n                        @error('password')\n                          <span class=\"invalid-feedback text-danger\" role=\"alert\">\n                              <strong>{{ $message }}</strong>\n                          </span>\n                        @enderror\n                      </div>\n                    </div>\n\n                    <div class=\"col-md-6\">\n                      <div class=\"form-group has-success\">\n                        <label class=\"control-label\">Konfirmasi Password</label>\n                        <input type=\"password\" name=\"password_confirmation\" class=\"form-control @error('password_confirmation') is-invalid @enderror\">\n                        <span class=\"small text-warning\">Biarkan kosong jika tidak ingin di update.</span>\n                        @error('password_confirmation')\n                          <span class=\"invalid-feedback text-danger\" role=\"alert\">\n                              <strong>{{ $message }}</strong>\n                          </span>\n                        @enderror\n                      </div>\n                    </div>\n                  </div>\n                </div>\n                <button type=\"submit\" class=\"btn btn-primary\">Update</button>\n                <a href=\"/home\" class=\"btn btn-info\">Batal</a>\n              </form>\n            </div>\n        </div>\n    </div>\n</div>\n@include('modul_admin.setting.modal')\n@endsection"
  },
  {
    "path": "resources/views/customer/setting/index.blade.php",
    "content": "@extends('layouts.backend')\n@section('title','Customer - Settings')\n@section('header','Settings')\n@section('content')\n@if ($message = Session::get('success'))\n  <div class=\"alert alert-success alert-block\">\n  <button type=\"button\" class=\"close\" data-dismiss=\"alert\">×</button>\n    <strong>{{ $message }}</strong>\n  </div>\n@elseif($message = Session::get('error'))\n  <div class=\"alert alert-danger alert-block\">\n  <button type=\"button\" class=\"close\" data-dismiss=\"alert\">×</button>\n    <strong>{{ $message }}</strong>\n  </div>\n@endif\n<div class=\"content-body\">\n  <section>\n    <div class=\"row\">\n      <!-- left menu section -->\n      <div class=\"col-md-3 mb-2 mb-md-0\">\n        <ul class=\"nav nav-pills flex-column mt-md-0 mt-1\">\n          <li class=\"nav-item\">\n              <a class=\"nav-link d-flex py-75 active\" id=\"pill-general\" data-toggle=\"pill\" href=\"#vertical-general\" aria-expanded=\"true\">\n                  <i class=\"feather icon-globe mr-50 font-medium-3\"></i>\n                  General\n              </a>\n          </li>\n\n        </ul>\n      </div>\n      <!-- right content section -->\n      <div class=\"col-md-9\">\n        <div class=\"card\">\n          <div class=\"card-content\">\n            <div class=\"card-body\">\n              <div class=\"tab-content\">\n                <div role=\"tabpanel\" class=\"tab-pane active\" id=\"vertical-general\" aria-labelledby=\"pill-general\" aria-expanded=\"true\">\n                  <div class=\"row\">\n                    <form action=\"{{route('customer.setting-update', Auth::user()->id)}}\" method=\"post\">\n                      @csrf\n                      @method('PUT')\n                      <h5 class=\"m-1\">Theme Dark <i class=\" {{Auth::user()->theme == 1 ? 'fa fa-check' : ''}} \" style=\"color: chartreuse\"></i> </h5>\n                      <div class=\"col-12 mb-1\">\n                          <div class=\"custom-control custom-switch custom-control-inline\">\n                              <input type=\"checkbox\" class=\"custom-control-input\" name=\"theme\" {{Auth::user()->theme == 1 ? 'checked' : ''}} value=\"1\" id=\"theme\">\n                              <label class=\"custom-control-label mr-1\" for=\"theme\"></label>\n                              <span class=\"switch-label w-100\">Aktifkan Jika Ingin Menggunakan Theme Dark</span>\n                          </div>\n                      </div>\n                      <div class=\"col-12 d-flex flex-sm-row flex-column justify-content-start\">\n                        <button type=\"submit\" class=\"btn btn-primary mr-sm-1 mb-1 mb-sm-0\">Save\n                            changes</button>\n                        <button type=\"reset\" class=\"btn btn-outline-warning\">Cancel</button>\n                      </div>\n                    </form>\n                  </div>\n                </div>\n\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </section>\n</div>\n@endsection"
  },
  {
    "path": "resources/views/emails/done.blade.php",
    "content": "<head>\n  <title></title>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n<style type=\"text/css\">\n  #outlook a { padding: 0; }\n  .ReadMsgBody { width: 100%; }\n  .ExternalClass { width: 100%; }\n  .ExternalClass * { line-height:100%; }\n  body { margin: 0; padding: 0; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; }\n  table, td { border-collapse:collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; }\n  img { border: 0; height: auto; line-height: 100%; outline: none; text-decoration: none; -ms-interpolation-mode: bicubic; }\n  p { display: block; margin: 13px 0; }\n</style>\n<style type=\"text/css\">\n  @media only screen and (max-width:480px) {\n    @-ms-viewport { width:320px; }\n    @viewport { width:320px; }\n  }\n</style>\n    <link href=\"https://fonts.googleapis.com/css?family=Ubuntu:300,400,500,700\" rel=\"stylesheet\" type=\"text/css\">\n<style type=\"text/css\">\n    @import url(https://fonts.googleapis.com/css?family=Ubuntu:300,400,500,700);\n</style>\n  <style type=\"text/css\">\n  @media only screen and (min-width:480px) {\n    .mj-column-per-100, * [aria-labelledby=\"mj-column-per-100\"] { width:100%!important; }\n  }\n</style>\n</head>\n<body style=\"background: #F9F9F9;\">\n\n    <div style=\"max-width:640px;margin:0 auto;box-shadow:0px 1px 5px rgba(0,0,0,0.1);border-radius:4px;overflow:hidden\"><div style=\"margin:0px auto;max-width:640px;background:#7289DA url(https://cdn.discordapp.com/email_assets/f0a4cc6d7aaa7bdf2a3c15a193c6d224.png) top center / cover no-repeat;\"><table role=\"presentation\" cellpadding=\"0\" cellspacing=\"0\" style=\"font-size:0px;width:100%;background:#7289DA url(https://cdn.discordapp.com/email_assets/f0a4cc6d7aaa7bdf2a3c15a193c6d224.png) top center / cover no-repeat;\" align=\"center\" border=\"0\" background=\"https://cdn.discordapp.com/email_assets/f0a4cc6d7aaa7bdf2a3c15a193c6d224.png\"><tbody><tr><td style=\"text-align:center;vertical-align:top;direction:ltr;font-size:0px;padding:57px;\"><div style=\"cursor:auto;color:white;font-family:Whitney, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;font-size:36px;font-weight:600;line-height:36px;text-align:center;\">Laundry Selesai!</div></td></tr></tbody></table></div>\n\n    <div style=\"margin:0px auto;max-width:640px;background:#ffffff;\">\n      <table role=\"presentation\" cellpadding=\"0\" cellspacing=\"0\" style=\"font-size:0px;width:100%;background:#ffffff;\" align=\"center\" border=\"0\">\n        <tbody>\n          <tr>\n            <td style=\"text-align:center;vertical-align:top;direction:ltr;font-size:0px;padding:40px 70px;\">\n              <div aria-labelledby=\"mj-column-per-100\" class=\"mj-column-per-100 outlook-group-fix\" style=\"vertical-align:top;display:inline-block;direction:ltr;font-size:13px;text-align:left;width:100%;\">\n                <table role=\"presentation\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\" border=\"0\">\n                  <tbody>\n                    <tr>\n                      <td style=\"word-break:break-word;font-size:0px;padding:0px 0px 20px;\" align=\"left\">\n                        <div style=\"cursor:auto;color:#737F8D;font-family:Whitney, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;font-size:16px;line-height:24px;text-align:left;\">\n                          <p><img src=\"https://cdn.discordapp.com/email_assets/127c95bbea39cd4bc1ad87d1500ae27d.png\" alt=\"Party Wumpus\" title=\"None\" width=\"500\" style=\"height: auto;\"></p>\n                          <h2 style=\"font-family: Whitney, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;font-weight: 500;font-size: 20px;color: #4F545C;letter-spacing: 0.27px;\">Halo,Kak {{$data['customer']}}.</h2>\n                          <p>Kami ingin memberitahu bahwa Laundry kakak dengan nomor invoice <span style=\"font-weight: bold; color:black\">{{$data['invoice']}}</span> sudah selesai dan sudah bisa diambil.</p>\n                          <p style=\"font-size: 14px; line-height: 24px; margin-top: 6px; margin-bottom: 20px;\">\n                            Terima Kasih,\n                            <br>{{$data['nama_laundry']}} Team\n                          </p>\n                        </div>\n                      </td>\n                    </tr>\n                  </tbody>\n                </table>\n              </td>\n            </tr>\n          </tbody>\n        </table>\n      </div>\n    </td>\n  </tr></tbody></table></div></div>\n\n\n    <div style=\"margin:0px auto;max-width:640px;background:transparent;\"><table role=\"presentation\" cellpadding=\"0\" cellspacing=\"0\" style=\"font-size:0px;width:100%;background:transparent;\" align=\"center\" border=\"0\"><tbody><tr><td style=\"text-align:center;vertical-align:top;direction:ltr;font-size:0px;padding:0px;\"><div aria-labelledby=\"mj-column-per-100\" class=\"mj-column-per-100 outlook-group-fix\" style=\"vertical-align:top;display:inline-block;direction:ltr;font-size:13px;text-align:left;width:100%;\"><table role=\"presentation\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\" border=\"0\"><tbody><tr><td style=\"word-break:break-word;font-size:0px;\"><div style=\"font-size:1px;line-height:12px;\">&nbsp;</div></td></tr></tbody></table></div></td></tr></tbody></table></div>\n    <div style=\"margin:0px auto;max-width:640px;background:transparent;\">\n      <table role=\"presentation\" cellpadding=\"0\" cellspacing=\"0\" style=\"font-size:0px;width:100%;background:transparent;\" align=\"center\" border=\"0\">\n        <tbody>\n          <tr>\n            <td style=\"text-align:center;vertical-align:top;direction:ltr;font-size:0px;padding:20px 0px;\">\n              <div aria-labelledby=\"mj-column-per-100\" class=\"mj-column-per-100 outlook-group-fix\" style=\"vertical-align:top;display:inline-block;direction:ltr;font-size:13px;text-align:left;width:100%;\">\n                <table role=\"presentation\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\" border=\"0\">\n                  <tbody>\n                    <tr>\n                      <td style=\"word-break:break-word;font-size:0px;padding:0px;\" align=\"center\">\n                        <div style=\"cursor:auto;color:#99AAB5;font-family:Whitney, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;font-size:12px;line-height:24px;text-align:center;\">\n                        Sent by {{$data['nama_laundry']}} Teams\n                </div></td></tr><tr>\n      <td style=\"word-break:break-word;font-size:0px;padding:0px;\" align=\"center\"><div style=\"cursor:auto;color:#99AAB5;font-family:Whitney, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;font-size:12px;line-height:24px;text-align:center;\">\n      {{$data['alamat_laundry']}}\n    </div></td></tr></tbody></table></div></td></tr></tbody></table></div></div>\n\n</body>"
  },
  {
    "path": "resources/views/emails/orders.blade.php",
    "content": "<!DOCTYPE html>\n<html lang=\"en\" xmlns:v=\"urn:schemas-microsoft-com:vml\" xmlns:o=\"urn:schemas-microsoft-com:office:office\">\n\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"x-apple-disable-message-reformatting\">\n    <meta http-equiv=\"x-ua-compatible\" content=\"ie=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <meta name=\"format-detection\" content=\"telephone=no, date=no, address=no, email=no\">\n\n    <link href=\"https://fonts.googleapis.com/css?family=Montserrat:ital,wght@0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,200;1,300;1,400;1,500;1,600;1,700\" rel=\"stylesheet\" media=\"screen\">\n    <style>\n      .hover-underline:hover {\n        text-decoration: underline !important;\n      }\n\n      @keyframes spin {\n        to {\n          transform: rotate(360deg);\n        }\n      }\n\n      @keyframes ping {\n\n        75%,\n        100% {\n          transform: scale(2);\n          opacity: 0;\n        }\n      }\n\n      @keyframes pulse {\n        50% {\n          opacity: .5;\n        }\n      }\n\n      @keyframes bounce {\n\n        0%,\n        100% {\n          transform: translateY(-25%);\n          animation-timing-function: cubic-bezier(0.8, 0, 1, 1);\n        }\n\n        50% {\n          transform: none;\n          animation-timing-function: cubic-bezier(0, 0, 0.2, 1);\n        }\n      }\n\n      @media (max-width: 600px) {\n        .sm-px-24 {\n          padding-left: 24px !important;\n          padding-right: 24px !important;\n        }\n\n        .sm-py-32 {\n          padding-top: 32px !important;\n          padding-bottom: 32px !important;\n        }\n\n        .sm-w-full {\n          width: 100% !important;\n        }\n      }\n    </style>\n  </head>\n\n  <body style=\"margin: 0; padding: 0; width: 100%; word-break: break-word; -webkit-font-smoothing: antialiased;\">\n    <div role=\"article\" aria-roledescription=\"email\" aria-label=\"\" lang=\"en\">\n      <table style=\"font-family: Montserrat, -apple-system, 'Segoe UI', sans-serif; width: 100%;\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\">\n        <tr>\n          <td align=\"center\" style=\"--bg-opacity: 1; background-color: #eceff1; background-color: rgba(236, 239, 241, var(--bg-opacity)); font-family: Montserrat, -apple-system, 'Segoe UI', sans-serif;\" bgcolor=\"rgba(236, 239, 241, var(--bg-opacity))\">\n            <table class=\"sm-w-full\" style=\"font-family: 'Montserrat',Arial,sans-serif; width: 600px;\" width=\"600\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\">\n              <tr>\n                <td align=\"center\" class=\"sm-px-24\" style=\"font-family: 'Montserrat',Arial,sans-serif;\">\n                  <table style=\"font-family: 'Montserrat',Arial,sans-serif; width: 100%;\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\">\n                    <tr>\n                      <td class=\"sm-px-24\" style=\"--bg-opacity: 1; background-color: #ffffff; background-color: rgba(255, 255, 255, var(--bg-opacity)); border-radius: 4px; font-family: Montserrat, -apple-system, 'Segoe UI', sans-serif; font-size: 14px; line-height: 24px; padding: 48px; text-align: left; --text-opacity: 1; color: #626262; color: rgba(98, 98, 98, var(--text-opacity));\" bgcolor=\"rgba(255, 255, 255, var(--bg-opacity))\" align=\"left\">\n                        <p style=\"font-weight: 600; font-size: 18px; margin-bottom: 0;\">Halo Kak,</p>\n                        <p style=\"font-weight: 700; font-size: 20px; margin-top: 0; --text-opacity: 1; color: #ff5850; color: rgba(255, 88, 80, var(--text-opacity));\">{{$data['customer']}}</p>\n\n                        <p style=\"font-size: 14px; line-height: 24px; margin-top: 6px; margin-bottom: 20px;\">\n                          Terima kasih sudah mempercayakan pakaian kakak kepada kami, berikut ini adalah invoice untuk Laundry kakak. Untuk mengetahui status Laundry, kakak bisa mengecek nya melalui halaman Dashboard.\n                        </p>\n                        <table style=\"font-family: 'Montserrat',Arial,sans-serif; width: 100%;\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\">\n                          <tr>\n                            <td style=\"font-family: 'Montserrat',Arial,sans-serif;\">\n                              <h3 style=\"font-weight: 700; font-size: 12px; margin-top: 0; text-align: left;\">Invoice {{$data['invoice']}}</h3>\n                            </td>\n                            <td style=\"font-family: 'Montserrat',Arial,sans-serif;\">\n                              <h3 style=\"font-weight: 700; font-size: 12px; margin-top: 0; text-align: right;\">\n                                {{$data['tgl_transaksi']}}\n                              </h3>\n                            </td>\n                          </tr>\n                          <tr>\n                            <td colspan=\"3\" style=\"font-family: 'Montserrat',Arial,sans-serif;\">\n                              <table style=\"font-family: 'Montserrat',Arial,sans-serif; width: 100%;\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\">\n                                <tbody>\n                                  <tr>\n                                      <th class=\"text-center\">#</th>\n                                      <th>Jenis Pakaian</th>\n                                      <th class=\"text-right\">Berat</th>\n                                      <th class=\"text-right\">Harga</th>\n                                      <th class=\"text-right\">Total</th>\n                                  </tr>\n                                  <tr>\n                                      <td style=\"color:black\">1</td>\n                                      <td style=\"color:black\">{{$data['pakaian']}}</td>\n                                      <td style=\"color:black\">{{$data['berat']}} Kg</td>\n                                      <td style=\"color:black\">Rp. {{number_format($data['harga'],0,\",\",\".\")}} /Kg</td>\n                                      <td>\n                                        <p style=\"color:black\">Rp. {{number_format($data['total'],0,\",\",\".\")}}</p>\n                                      </td>\n                                  </tr>\n                                  <tr>\n                                    <th colspan=\"4\">\n                                      Diskon {{$data['disc'] == null || 0 ? '0' : $data['disc']}} %\n                                    </th>\n                                      <td style=\"color:black\">\n                                       Rp. {{number_format($data['harga_disc'],0,\",\",\".\")}}\n                                      </td>\n                                  </tr>\n                                  <tr>\n                                    <th colspan=\"4\">Total Bayar</th>\n                                    <td style=\"color:black; font-weight:bold\">Rp. {{number_format($data['harga_akhir'],0,\",\",\".\")}}</td>\n                                  </tr>\n                                </tbody>\n                              </table>\n                            </td>\n                          </tr>\n                        </table>\n                        <br>\n                        <p style=\"font-size: 12px; font-weight:bold; color:black\">\n                        <h5>Metode Pembayaran :</h5>\n                          <ol>\n                            @foreach ($data['bank'] as $banks)\n                              <li> {{$banks->nama_bank}} <br> {{$banks->no_rekening}} a/n {{$banks->nama_pemilik}}</li>\n                            @endforeach\n                          </ol>\n                        </p>\n                        <br>\n                        <p style=\"font-size: 14px; line-height: 24px; margin-top: 6px; margin-bottom: 20px;\">\n                          Jika kakak memiliki pertanyaan tentang invoice ini, cukup balas email ini atau hubungi tim dukungan kami untuk mendapatkan bantuan.\n                        </p>\n                        <p style=\"font-size: 14px; line-height: 24px; margin-top: 6px; margin-bottom: 20px;\">\n                          Cheers,\n                          <br>{{$data['laundry_name']}} Team\n                        </p>\n                      </td>\n                    </tr>\n                  </table>\n                </td>\n              </tr>\n            </table>\n          </td>\n        </tr>\n      </table>\n    </div>\n  </body>\n\n</html>"
  },
  {
    "path": "resources/views/emails/register.blade.php",
    "content": "<head>\n  <title></title>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n<style type=\"text/css\">\n  #outlook a { padding: 0; }\n  .ReadMsgBody { width: 100%; }\n  .ExternalClass { width: 100%; }\n  .ExternalClass * { line-height:100%; }\n  body { margin: 0; padding: 0; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; }\n  table, td { border-collapse:collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; }\n  img { border: 0; height: auto; line-height: 100%; outline: none; text-decoration: none; -ms-interpolation-mode: bicubic; }\n  p { display: block; margin: 13px 0; }\n</style>\n<style type=\"text/css\">\n  @media only screen and (max-width:480px) {\n    @-ms-viewport { width:320px; }\n    @viewport { width:320px; }\n  }\n</style>\n    <link href=\"https://fonts.googleapis.com/css?family=Ubuntu:300,400,500,700\" rel=\"stylesheet\" type=\"text/css\">\n<style type=\"text/css\">\n    @import url(https://fonts.googleapis.com/css?family=Ubuntu:300,400,500,700);\n</style>\n  <style type=\"text/css\">\n  @media only screen and (min-width:480px) {\n    .mj-column-per-100, * [aria-labelledby=\"mj-column-per-100\"] { width:100%!important; }\n  }\n</style>\n</head>\n<body style=\"background: #F9F9F9;\">\n\n    <div style=\"max-width:640px;margin:0 auto;box-shadow:0px 1px 5px rgba(0,0,0,0.1);border-radius:4px;overflow:hidden\"><div style=\"margin:0px auto;max-width:640px;background:#7289DA url(https://cdn.discordapp.com/email_assets/f0a4cc6d7aaa7bdf2a3c15a193c6d224.png) top center / cover no-repeat;\"><table role=\"presentation\" cellpadding=\"0\" cellspacing=\"0\" style=\"font-size:0px;width:100%;background:#7289DA url(https://cdn.discordapp.com/email_assets/f0a4cc6d7aaa7bdf2a3c15a193c6d224.png) top center / cover no-repeat;\" align=\"center\" border=\"0\" background=\"https://cdn.discordapp.com/email_assets/f0a4cc6d7aaa7bdf2a3c15a193c6d224.png\"><tbody><tr><td style=\"text-align:center;vertical-align:top;direction:ltr;font-size:0px;padding:57px;\"><div style=\"cursor:auto;color:white;font-family:Whitney, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;font-size:36px;font-weight:600;line-height:36px;text-align:center;\">Selamat Datang!</div></td></tr></tbody></table></div>\n\n    <div style=\"margin:0px auto;max-width:640px;background:#ffffff;\"><table role=\"presentation\" cellpadding=\"0\" cellspacing=\"0\" style=\"font-size:0px;width:100%;background:#ffffff;\" align=\"center\" border=\"0\"><tbody><tr><td style=\"text-align:center;vertical-align:top;direction:ltr;font-size:0px;padding:40px 70px;\"><div aria-labelledby=\"mj-column-per-100\" class=\"mj-column-per-100 outlook-group-fix\" style=\"vertical-align:top;display:inline-block;direction:ltr;font-size:13px;text-align:left;width:100%;\"><table role=\"presentation\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\" border=\"0\"><tbody><tr><td style=\"word-break:break-word;font-size:0px;padding:0px 0px 20px;\" align=\"left\"><div style=\"cursor:auto;color:#737F8D;font-family:Whitney, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;font-size:16px;line-height:24px;text-align:left;\">\n    <p><img src=\"https://cdn.discordapp.com/email_assets/127c95bbea39cd4bc1ad87d1500ae27d.png\" alt=\"Party Wumpus\" title=\"None\" width=\"500\" style=\"height: auto;\"></p>\n\n      <h2 style=\"font-family: Whitney, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;font-weight: 500;font-size: 20px;color: #4F545C;letter-spacing: 0.27px;\">Halo, Selamat Datang Kak {{$data['name']}}.</h2>\n      <p>Terima kasih sudah menjadi member {{$data['nama_laundry']}}.</p>\n      <p>Berikut ini adalah detail LOGIN akun kakak ya :</p>\n      <ul>\n        <li>Email : {{$data['email']}}</li>\n        <li>password : {{$data['password']}}</li>\n      </ul>\n\n      </div></td></tr><tr><td style=\"word-break:break-word;font-size:0px;padding:10px 25px;\" align=\"center\"><table role=\"presentation\" cellpadding=\"0\" cellspacing=\"0\" style=\"border-collapse:separate;\" align=\"center\" border=\"0\"><tbody><tr><td style=\"border:none;border-radius:3px;color:white;cursor:auto;padding:15px 19px;\" align=\"center\" valign=\"middle\" bgcolor=\"#7289DA\"><a href=\"{{$data['url_login']}}\" style=\"text-decoration:none;line-height:100%;background:#7289DA;color:white;font-family:Ubuntu, Helvetica, Arial, sans-serif;font-size:15px;font-weight:normal;text-transform:none;margin:0px;\" target=\"_blank\">\n      Login\n      </a></td></tr></tbody></table></td></tr></tbody></table></div></td></tr></tbody></table></div></div>\n\n\n    <div style=\"margin:0px auto;max-width:640px;background:transparent;\"><table role=\"presentation\" cellpadding=\"0\" cellspacing=\"0\" style=\"font-size:0px;width:100%;background:transparent;\" align=\"center\" border=\"0\"><tbody><tr><td style=\"text-align:center;vertical-align:top;direction:ltr;font-size:0px;padding:0px;\"><div aria-labelledby=\"mj-column-per-100\" class=\"mj-column-per-100 outlook-group-fix\" style=\"vertical-align:top;display:inline-block;direction:ltr;font-size:13px;text-align:left;width:100%;\"><table role=\"presentation\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\" border=\"0\"><tbody><tr><td style=\"word-break:break-word;font-size:0px;\"><div style=\"font-size:1px;line-height:12px;\">&nbsp;</div></td></tr></tbody></table></div></td></tr></tbody></table></div>\n    <div style=\"margin:0px auto;max-width:640px;background:transparent;\">\n      <table role=\"presentation\" cellpadding=\"0\" cellspacing=\"0\" style=\"font-size:0px;width:100%;background:transparent;\" align=\"center\" border=\"0\">\n        <tbody>\n          <tr>\n            <td style=\"text-align:center;vertical-align:top;direction:ltr;font-size:0px;padding:20px 0px;\">\n              <div aria-labelledby=\"mj-column-per-100\" class=\"mj-column-per-100 outlook-group-fix\" style=\"vertical-align:top;display:inline-block;direction:ltr;font-size:13px;text-align:left;width:100%;\">\n                <table role=\"presentation\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\" border=\"0\">\n                  <tbody>\n                    <tr>\n                      <td style=\"word-break:break-word;font-size:0px;padding:0px;\" align=\"center\">\n                        <div style=\"cursor:auto;color:#99AAB5;font-family:Whitney, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;font-size:12px;line-height:24px;text-align:center;\">\n                        Sent by {{$data['nama_laundry']}} Teams\n                </div></td></tr><tr>\n      <td style=\"word-break:break-word;font-size:0px;padding:0px;\" align=\"center\"><div style=\"cursor:auto;color:#99AAB5;font-family:Whitney, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;font-size:12px;line-height:24px;text-align:center;\">\n      {{$data['alamat_laundry']}}\n    </div></td></tr></tbody></table></div></td></tr></tbody></table></div></div>\n\n</body>"
  },
  {
    "path": "resources/views/errors/404.blade.php",
    "content": "@extends('layouts.error')\n@section('title','Upsss !')\n@section('content')\n<section class=\"row flexbox-container\">\n    <div class=\"col-xl-7 col-md-8 col-12 d-flex justify-content-center\">\n        <div class=\"card auth-card bg-transparent shadow-none rounded-0 mb-0 w-100\">\n            <div class=\"card-content\">\n                <div class=\"card-body text-center\">\n                    <img src=\"{{asset('backend/images/pages/404.png')}}\" class=\"img-fluid align-self-center\" alt=\"branding logo\">\n                    <h1 class=\"font-large-2 my-1\">404 - Page Not Found!</h1>\n                    <p class=\"p-2\">\n                        Sepertinya halaman yang kamu cari tidak bisa kami jangkau.\n                    </p>\n                    <a class=\"btn btn-primary btn-lg mt-2\" href=\"/\">Back to Home</a>\n                </div>\n            </div>\n        </div>\n    </div>\n</section>\n@endsection"
  },
  {
    "path": "resources/views/errors/500.blade.php",
    "content": "@extends('layouts.error')\n@section('title','Upsss !')\n@section('content')\n<section class=\"row flexbox-container\">\n    <div class=\"col-xl-7 col-md-8 col-12 d-flex justify-content-center\">\n        <div class=\"card auth-card bg-transparent shadow-none rounded-0 mb-0 w-100\">\n            <div class=\"card-content\">\n                <div class=\"card-body text-center\">\n                    <img src=\"{{asset('backend/images/pages/500.png')}}\" class=\"img-fluid align-self-center\" alt=\"branding logo\">\n                    <h1 class=\"font-large-2 my-1\">Internal Server Error !</h1>\n                    <p class=\"p-2\">\n                        Kami akan segera kembali.\n                    </p>\n                    <a class=\"btn btn-primary btn-lg mt-2\" href=\"/\">Back to Home</a>\n                </div>\n            </div>\n        </div>\n    </div>\n</section>\n@endsection"
  },
  {
    "path": "resources/views/frontend/banner.blade.php",
    "content": "{{-- Banner --}}\n    <div class=\"bg-cover\">\n    <img src=\"{{asset('frontend/img/banner.jpg')}}\" alt=\"\" />\n    </div>\n    <!-- end bg-cover -->\n    <!-- begin container -->\n    <div class=\"container\">\n        <h3>Lacak Status Laundry Kamu Disini...</h3>\n        <div class=\"input-group m-b-20\">\n            <input type=\"text\" class=\"form-control input-lg\" id=\"search_status\" placeholder=\"Contoh : TR0392928\" />\n            <span class=\"input-group-btn\">\n                <button type=\"submit\" class=\"btn btn-lg\" id=\"search-btn\"><i class=\"fa fa-search\"></i></button>\n            </span>\n        </div>\n        @include('frontend.modal')\n    </div>\n{{-- End Header --}}"
  },
  {
    "path": "resources/views/frontend/content.blade.php",
    "content": "{{-- Content --}}\n<contenone></contenone>\n\n<contentwo></contentwo>\n{{-- End Content --}}"
  },
  {
    "path": "resources/views/frontend/footer.blade.php",
    "content": "<div id=\"footer\" class=\"footer\">\n    <!-- begin container -->\n    <div class=\"container\">\n        <!-- begin row -->\n        <div class=\"row\">\n            <!-- begin col-4 -->\n            <div class=\"col-xl-4 col-lg-4 col-12\">\n                <!-- begin section-container -->\n                <div class=\"section-container\">\n                    <h4>Tentang E-Laundry</h4>\n                    <p>\n                      {{$setpage != NULL ? $setpage->tentang : 'Tentang belum disini'}}\n                    </p>\n                </div>\n                <!-- end section-container -->\n            </div>\n            <!-- end col-4 -->\n            <!-- begin col-4 -->\n            <div class=\"col-xl-4 col-lg-4 col-12\">\n                <!-- begin section-container -->\n                <div class=\"section-container\">\n                    <h4>Ketentuan</h4>\n                    <ul class=\"latest-post\">\n                      <li>\n                        <a href=\"\">FAQ</a>\n                      </li>\n\n                      <li>\n                        <a href=\"\">Join Laundry</a>\n                      </li>\n\n                      <li>\n                        <a href=\"\">Investasi</a>\n                      </li>\n                    </ul>\n                </div>\n                <!-- end section-container -->\n            </div>\n            <!-- end col-4 -->\n            <!-- begin col-4 -->\n            <div class=\"col-xl-4 col-lg-4 col-12\">\n                <!-- begin section-container -->\n                <div class=\"section-container\">\n                    <h4>Hubungi Kami</h4>\n                    <ul class=\"new-user\">\n                      <li>\n                        <a href=\"https://facebook.com/{{$setpage->facebook ?? ''}}\" target=\"_blank\">\n                          <i class=\"fa fa-facebook-square fa-2x\" style=\"color: #4267B2\"></i>\n                        </a>\n                      </li>\n                      <li>\n                        <a href=\"https://instagram.com/{{$setpage->instagram ?? ''}}\" target=\"_blank\">\n                          <i class=\"fa fa-instagram fa-2x\" style=\"color:#5B51D8\"></i>\n                        </a>\n                      </li>\n                      <li>\n                        <a href=\"https://twitter.com/{{$setpage->twitter ?? ''}}\" target=\"_blank\">\n                          <i class=\"fa fa-twitter fa-2x\" style=\"color: #1DA1F2\"></i>\n                        </a>\n                      </li>\n                      <li>\n                        <a href=\"mailto:{{$setpage->email ?? ''}}\" target=\"_blank\">\n                          <i class=\"fa fa-envelope fa-2x\" style=\"color: #DB4437\"></i>\n                        </a>\n                      </li>\n                      <li>\n                        <a href=\"tel:{{$setpage->no_telp ?? ''}}\" target=\"_blank\">\n                          <i class=\"fa fa-phone fa-2x\"></i>\n                        </a>\n                      </li>\n                    </ul>\n                </div>\n                <!-- end section-container -->\n            </div>\n            <!-- end col-4 -->\n        </div>\n        <!-- end row -->\n    </div>\n    <!-- end container -->\n</div>"
  },
  {
    "path": "resources/views/frontend/header.blade.php",
    "content": "<div id=\"header\" class=\"header navbar navbar-default navbar-fixed-top\">\n  <!-- begin container -->\n  <div class=\"container\">\n      <!-- begin navbar-header -->\n      <div class=\"navbar-header\">\n          <button type=\"button\" class=\"navbar-toggle collapsed\" data-toggle=\"collapse\" data-target=\"#header-navbar\">\n              <span class=\"icon-bar\"></span>\n              <span class=\"icon-bar\"></span>\n              <span class=\"icon-bar\"></span>\n          </button>\n          <a href=\"{{url('/')}}\" class=\"navbar-brand\">\n              <span class=\"navbar-logo\"></span>\n              <span class=\"brand-text\">\n                  {{$setpage != NULL ? $setpage->judul : 'Judul Disini'}}\n              </span>\n          </a>\n      </div>\n      <!-- end navbar-header -->\n      <!-- begin #header-navbar -->\n      <div class=\"collapse navbar-collapse\" id=\"header-navbar\">\n          <ul class=\"nav navbar-nav navbar-right\">\n              @auth\n              <li> <a href=\"{{url('/home')}}\">Welcome, {{Auth::user()->name}}</a> </li>\n              @else\n              <li><a href=\"{{route('login')}}\">Masuk</a></li>\n              @endauth\n          </ul>\n      </div>\n      <!-- end #header-navbar -->\n  </div>\n  <!-- end container -->\n</div>"
  },
  {
    "path": "resources/views/frontend/index.blade.php",
    "content": "@extends('layouts.frontend')\n@section('title','Selamat Datang')\n@section('header')\n  @include('frontend.header')\n@endsection\n@section('banner')\n{{-- banner --}}\n    @include('frontend.banner')\n{{-- End banner --}}\n@endsection\n\n@section('content')\n    @include('frontend.content')\n@endsection\n\n@section('footer')\n  @include('frontend.footer')\n\n{{-- Whatsapp Button Start--}}\n  <a href=\"https://wa.me/{{$setpage->whatsapp ?? ''}}\" target=\"blank_\">\n    <img src=\"{{asset('frontend/img/wa.png')}}\" class=\"wabutton\" alt=\"WhatsApp-Button\">\n  </a>\n{{-- End: Whatsapp Button --}}\n@endsection\n\n@section('scripts')\n<script type=\"text/javascript\">\n  $(document).on('click', '.search-btn', function(e){\n      _curr_val = $('#search_status').val();\n      $('#search_status').val(_curr_val + $(this).html());\n  });\n\n  $(document).on('click', '#search-btn', function (e) {\n      var search_status = $(\"#search_status\").val();\n      $.get('pencarian-laundry',{'_token': $('meta[name=csrf-token]').attr('content'),search_status:search_status}, function(resp){\n            if (resp != 0) {\n                  $(\".modal_status\").show();\n                  $(\"#customer\").html(resp.customer);\n                  $(\"#tgl_transaksi\").html(resp.tgl_transaksi);\n                  $(\"#status_order\").html(resp.status_order);\n            }else{\n                swal({html: \"No Invoice Tidak Terdaftar!\"})\n            }\n      });\n  });\n  function close_dlgs(){\n        $(\".modal_status\").hide();\n        $(\"#search_status\").val(\"\");\n  }\n</script>\n@endsection"
  },
  {
    "path": "resources/views/frontend/modal.blade.php",
    "content": "<div class=\"modal_status\">\n    <div class=\"modal_window\">\n        {{-- <div class=\"title\">Hasil Pencarian</div> --}}\n            <div class=\"row\">\n                <div class=\"col-lg-5\">\n                    <p class=\"text\">Customer</p>\n                    <p class=\"font\" id=\"customer\"></p>\n                </div>\n                <div class=\"col-lg-3\">\n                    <p class=\"text\">Tgl Transaksi</p>\n                    <p class=\"font\" id=\"tgl_transaksi\"></p>\n                </div>\n                <div class=\"col-lg-3\">\n                    <p class=\"text\">Status</p>\n                    <p class=\"font\" id=\"status_order\"></p>\n                </div>\n            </div>\n        <br />\n        <button class=\"btn btn-danger btn-block\" onclick=\"close_dlgs()\">Close</button>\n    </div>\n</div>\n\n<style>\n.modal_window > .title{\n    font-size: 18px;\n    font-weight: bold;\n    color: black;\n}\n\n.text {\n    color: black !important;\n    font-weight: bold;\n}\n\n.font {\n    color: slategrey !important;\n}\n\n.modal_window{\n    position: relative;\n    width: 100%;\n    padding: 20px;\n    margin-top: 20px;\n    background-color: white;\n    border-radius: 5px;\n}\n.modal_status{\n    display: none;\n    position: center;\n    top: 0px; left: 0px; right: 0px; bottom: 0px;\n    background-color: rgba(0,0,0,0.8);\n    z-index: 99999;\n    border-radius: 5px;\n}\n</style>"
  },
  {
    "path": "resources/views/karyawan/customer/create.blade.php",
    "content": "@extends('layouts.backend')\n@section('title','Tambah Customer')\n@section('header','Tambah Data Customer')\n@section('content')\n<div class=\"col-lg-12\">\n    <div class=\"card card-outline-info\">\n        <div class=\"card-header\">\n            <h4 class=\"card-title\">Form Tambah Data Customer</h4>\n        </div>\n        <div class=\"card-body\">\n            <form action=\"{{url('customers-store')}}\" method=\"POST\">\n                @csrf\n                <div class=\"form-body\">\n                    <div class=\"row p-t-20\">\n                        <div class=\"col-md-4\">\n                            <div class=\"form-group has-success\">\n                                <label class=\"control-label\">Nama</label>\n                                <input type=\"text\" class=\"form-control form-control-danger @error('name') is-invalid @enderror\" name=\"name\" value=\"{{old('name')}}\" placeholder=\"Nama Customer\" autocomplete=\"off\">\n                                @error('name')\n                                  <span class=\"invalid-feedback text-danger\" role=\"alert\">\n                                      <strong>{{ $message }}</strong>\n                                  </span>\n                                @enderror\n                            </div>\n                        </div>\n                        <!--/span-->\n                        <div class=\"col-md-4\">\n                            <div class=\"form-group has-success\">\n                                <label class=\"control-label\">Email</label>\n                                <input type=\"email\" class=\"form-control form-control-danger @error('email') is-invalid @enderror\" name=\"email\" value=\"{{old('email')}}\" placeholder=\"Alamat Email\" autocomplete=\"off\">\n                                @error('email')\n                                  <span class=\"invalid-feedback text-danger\" role=\"alert\">\n                                      <strong>{{ $message }}</strong>\n                                  </span>\n                                @enderror\n                            </div>\n                        </div>\n                        <div class=\"col-md-4\">\n                            <div class=\"form-group has-success\">\n                                <label class=\"control-label\">No. WhatsApp</label>\n                                <input type=\"number\" class=\"form-control form-control-danger @error('no_telp') is-invalid @enderror\" name=\"no_telp\" placeholder=\"Nomor WhatsApp\" value=\"{{old('no_telp')}}\" autocomplete=\"off\">\n                                @error('no_telp')\n                                  <span class=\"invalid-feedback text-danger\" role=\"alert\">\n                                      <strong>{{ $message }}</strong>\n                                  </span>\n                                @enderror\n                            </div>\n                        </div>\n                        <!--/span-->\n                        <div class=\"col-md-12\">\n                            <div class=\"form-group has-success\">\n                                <label class=\"control-label\">Alamat</label>\n                                <textarea name=\"alamat\" class=\"form-control @error('alamat') is-invalid @enderror\" rows=\"3\" placeholder=\"Alamat Customer\"> {{old('alamat')}} </textarea>\n                                @error('alamat')\n                                  <span class=\"invalid-feedback text-danger\" role=\"alert\">\n                                      <strong>{{ $message }}</strong>\n                                  </span>\n                                @enderror\n                            </div>\n                        </div>\n                    </div>\n                    <!--/row-->\n                </div>\n                <input type=\"hidden\" name=\"auth\" value=\"Admin\">\n                <div class=\"form-actions\">\n                    <button type=\"submit\" class=\"btn btn-primary mr-1 mb-1\">Tambah</button>\n                    <a href=\" {{url('customers')}}\"  class=\"btn btn-outline-warning mr-1 mb-1\">Batal</a>\n                </div>\n            </form>\n        </div>\n    </div>\n</div>\n@endsection"
  },
  {
    "path": "resources/views/karyawan/customer/detail.blade.php",
    "content": "@extends('layouts.backend')\n@section('title','Karyawan - Detail Customer')\n@section('header','Detail Customer')\n@section('content')\n<div class=\"row\">\n  <div class=\"col-sm-12 col-md-12\">\n    <div class=\"card\">\n        <div class=\"card-header\">\n            <h4 class=\"card-title\">Detail Data Customer</h4>\n        </div>\n        <div class=\"card-content\">\n          <div class=\"row\">\n            <div class=\"card-body\">\n                <div class=\"card-text\">\n                    <dl class=\"row\">\n                        <dt class=\"col-sm-4\">Nama</dt>\n                        <dd class=\"col-sm-4\">: {{$customer->name}}</dd>\n                    </dl>\n\n                    <dl class=\"row\">\n                        <dt class=\"col-sm-4\">Email</dt>\n                        <dd class=\"col-sm-4\">: {{$customer->email}}</dd>\n                    </dl>\n\n                    <dl class=\"row\">\n                        <dt class=\"col-sm-4\">No. Telepon</dt>\n                        <dd class=\"col-sm-4\">: {{$customer->no_telp == 0 ? 'Belum Input' : $customer->no_telp}}</dd>\n                    </dl>\n\n                    <dl class=\"row\">\n                        <dt class=\"col-sm-4\">Alamat</dt>\n                        <dd class=\"col-sm-4\">: {{$customer->alamat}}</dd>\n                    </dl>\n\n                    <dl class=\"row\">\n                        <dt class=\"col-sm-4\">Kelamin</dt>\n                        <dd class=\"col-sm-4\">: {{$customer->kelamin == 'L' ? 'Laki-laki' : 'Perempuan'}}</dd>\n                    </dl>\n                </div>\n            </div>\n             <div class=\"card-body\">\n                <div class=\"card-text\">\n                    <dl class=\"row\">\n                        <dt class=\"col-sm-4\">Total Kg</dt>\n                        <dd class=\"col-sm-4\">: {{$customer->transaksiCustomer()->sum('kg') ?? ''}} Kg</dd>\n                    </dl>\n\n                    <dl class=\"row\">\n                        <dt class=\"col-sm-4\">Total Rupiah</dt>\n                        <dd class=\"col-sm-4\">: {{Rupiah::getRupiah($customer->transaksiCustomer()->sum('harga_akhir')) ?? ''}}</dd>\n                    </dl>\n\n                    <dl class=\"row\">\n                        <dt class=\"col-sm-4\">Total Laundry</dt>\n                        <dd class=\"col-sm-4\">: {{$customer->transaksiCustomer()->count() ?? ''}} Kali</dd>\n                    </dl>\n\n                    <dl class=\"row\">\n                        <dt class=\"col-sm-4\">Laundry Terakhir</dt>\n                        <dd class=\"col-sm-4\">: {{$customer->transaksiCustomer[0]['created_at'] ?? '-'}}</dd>\n                    </dl>\n                    <dl class=\"row\">\n                        <dt class=\"col-sm-4\">Pendaftaran Akun</dt>\n                        <dd class=\"col-sm-4\">: {{$customer->created_at}}</dd>\n                    </dl>\n                </div>\n            </div>\n          </div>\n        </div>\n    </div>\n  </div>\n\n  <div class=\"col-sm-12 col-md-12\">\n    <div class=\"card\">\n        <div class=\"card-header\">\n            <h4 class=\"card-title\">Detail Transaksi Customer</h4>\n        </div>\n        <div class=\"card-content\">\n            <div class=\"card-body\">\n                <div class=\"table-responsive m-t-0\">\n                    <table id=\"myTable\" class=\"table display table-bordered table-striped\">\n                        <thead>\n                            <tr>\n                                <th>#</th>\n                                <th>Invoice</th>\n                                <th>Tgl Transaksi</th>\n                                <th>Tgl Diambil</th>\n                                <th>Jumlah KG</th>\n                                <th>Jenis Pembayaran</th>\n                                <th>Status Transaksi</th>\n                                <th>Total Harga</th>\n                            </tr>\n                        </thead>\n                        <tbody>\n                          @foreach ($customer->transaksiCustomer as $key => $item)\n                          <tr>\n                              <td>{{$key+1}}</td>\n                              <td>{{$item->invoice}}</td>\n                              <td>{{$item->tgl_transaksi}}</td>\n                              <td>{{$item->tgl_ambil ?? 'Belum Diambil'}}</td>\n                              <td>{{$item->kg}} kg</td>\n                              <td>{{$item->jenis_pembayaran}}</td>\n                              <td>{{$item->status_order}}</td>\n                              <td>{{Rupiah::getRupiah($item->harga_akhir)}}</td>\n\n                          </tr>\n                          @endforeach\n\n                        </tbody>\n                    </table>\n                </div>\n            </div>\n        </div>\n    </div>\n  </div>\n</div>\n@endsection\n@section('scripts')\n<script type=\"text/javascript\">\n// DataTable\n$(document).ready(function() {\n    $('#myTable').DataTable();\n    $(document).ready(function() {\n        var table = $('#example').DataTable({\n            \"columnDefs\": [{\n                \"visible\": false,\n                \"targets\": 2\n            }],\n            \"order\": [\n                [2, 'asc']\n            ],\n            \"displayLength\": 25,\n            \"drawCallback\": function(settings) {\n                var api = this.api();\n                var rows = api.rows({\n                    page: 'current'\n                }).nodes();\n                var last = null;\n                api.column(2, {\n                    page: 'current'\n                }).data().each(function(group, i) {\n                    if (last !== group) {\n                        $(rows).eq(i).before('<tr class=\"group\"><td colspan=\"5\">' + group + '</td></tr>');\n                        last = group;\n                    }\n                });\n            }\n        });\n    });\n});\n</script>\n@endsection"
  },
  {
    "path": "resources/views/karyawan/customer/index.blade.php",
    "content": "@extends('layouts.backend')\n@section('title','Karyawan - Data Customer')\n@section('header','Data Customer')\n@section('content')\n@if ($message = Session::get('success'))\n  <div class=\"alert alert-success alert-block\">\n  <button type=\"button\" class=\"close\" data-dismiss=\"alert\">×</button>\n    <strong>{{ $message }}</strong>\n  </div>\n@elseif($message = Session::get('error'))\n  <div class=\"alert alert-danger alert-block\">\n  <button type=\"button\" class=\"close\" data-dismiss=\"alert\">×</button>\n    <strong>{{ $message }}</strong>\n  </div>\n@endif\n<div class=\"card\">\n    <div class=\"card-body\">\n        <div class=\"table-responsive m-t-5\">\n                <a href=\"{{url('customers-create')}}\" class=\"btn btn-primary\">Tambah Customer</a>\n            <table id=\"myTable\" class=\"table table-bordered table-striped\">\n                <thead>\n                    <tr align=\"center\" style=\"color:black; font-weight:bold\">\n                        <th>#</th>\n                        <th>Nama</th>\n                        <th>Email</th>\n                        <th>Alamat</th>\n                        <th>No Telpon</th>\n                        <th>Action</th>\n                    </tr>\n                </thead>\n                <tbody>\n                    <?php $no=1; ?>\n                    @foreach ($customer as $item)\n                    <tr align=\"center\" style=\"color:black;\">\n                        <td>{{$no}}</td>\n                        <td>{{$item->name}}</td>\n                        <td>{{$item->email}}</td>\n                        <td>{{$item->alamat}}</td>\n                        <td>{{$item->no_telp}}</td>\n                        <td>\n                          <a href=\" {{url('customers', $item->id)}} \" class=\"btn btn-sm btn-primary\" style=\"color:white\">Detail</a>\n                        </td>\n                    </tr>\n                    <?php $no++; ?>\n                    @endforeach\n                </tbody>\n            </table>\n        </div>\n    </div>\n</div>\n@endsection\n@section('scripts')\n<script type=\"text/javascript\">\n// DataTable\n$(document).ready(function() {\n    $('#myTable').DataTable();\n    $(document).ready(function() {\n        var table = $('#example').DataTable({\n            \"columnDefs\": [{\n                \"visible\": false,\n                \"targets\": 2\n            }],\n            \"order\": [\n                [2, 'asc']\n            ],\n            \"displayLength\": 25,\n            \"drawCallback\": function(settings) {\n                var api = this.api();\n                var rows = api.rows({\n                    page: 'current'\n                }).nodes();\n                var last = null;\n                api.column(2, {\n                    page: 'current'\n                }).data().each(function(group, i) {\n                    if (last !== group) {\n                        $(rows).eq(i).before('<tr class=\"group\"><td colspan=\"5\">' + group + '</td></tr>');\n                        last = group;\n                    }\n                });\n            }\n        });\n    });\n});\n</script>\n@endsection"
  },
  {
    "path": "resources/views/karyawan/index.blade.php",
    "content": "@extends('layouts.backend')\n@section('title','Dashboard Karyawan')\n@section('content')\n  <div class=\"row match-height\">\n      <div class=\"col-xl-4 col-md-6 col-12\">\n          <div class=\"card card-congratulation-medal\">\n              <div class=\"card-body\">\n                  <h5>Welcome 🎉 {{Auth::user()->name}}!</h5>\n                  <p class=\"card-text font-small-2\">Semoga harimu menyenangkan.</p> <br>\n                  {{date('l, d F Y')}}, {{date('H:i:s')}}\n              </div>\n          </div>\n      </div>\n      <!--/ Medal Card -->\n\n      <!-- Statistics Card -->\n      <div class=\"col-xl-8 col-md-6 col-12\">\n          <div class=\"card card-statistics\">\n              <div class=\"card-header\">\n                  <h4 class=\"card-title\">Statistics</h4>\n                  <div class=\"d-flex align-items-center\">\n                      <p class=\"card-text font-small-2 mr-25 mb-0\">Updated 1 month ago</p>\n                  </div>\n              </div>\n              <div class=\"card-body statistics-body\">\n                  <div class=\"row\">\n                      <div class=\"col-xl-3 col-sm-6 col-12 mb-2 mb-xl-0\">\n                          <div class=\"media\">\n                              <div class=\"avatar bg-light-primary mr-2\">\n                                  <div class=\"avatar-content\">\n                                      <i class=\"feather icon-users text-primary font-medium-5\"></i>\n                                  </div>\n                              </div>\n                              <div class=\"media-body my-auto\">\n                                  <h4 class=\"font-weight-bolder mb-0\">{{$customer->count()}}</h4>\n                                  <p class=\"card-text font-small-1 mb-0\">Customers</p>\n                              </div>\n                          </div>\n                      </div>\n                      <div class=\"col-xl-3 col-sm-6 col-12 mb-2 mb-xl-0\">\n                          <div class=\"media\">\n                              <div class=\"avatar bg-light-info mr-2\">\n                                  <div class=\"avatar-content\">\n                                      <i class=\"feather icon-box text-success font-medium-5\"></i>\n                                  </div>\n                              </div>\n                              <div class=\"media-body my-auto\">\n                                  <h4 class=\"font-weight-bolder mb-0\">{{$masuk}}</h4>\n                                  <p class=\"card-text font-small-1 mb-0\">Laundry Masuk</p>\n                              </div>\n                          </div>\n                      </div>\n                      <div class=\"col-xl-3 col-sm-6 col-12 mb-2 mb-sm-0\">\n                          <div class=\"media\">\n                              <div class=\"avatar bg-light-danger mr-2\">\n                                  <div class=\"avatar-content\">\n                                      <i class=\"feather icon-check text-danger font-medium-5\"></i>\n                                  </div>\n                              </div>\n                              <div class=\"media-body my-auto\">\n                                  <h4 class=\"font-weight-bolder mb-0\"> {{$selesai}} </h4>\n                                  <p class=\"card-text font-small-1 mb-0\">Laundry Selesai</p>\n                              </div>\n                          </div>\n                      </div>\n                      <div class=\"col-xl-3 col-sm-6 col-12\">\n                          <div class=\"media\">\n                              <div class=\"avatar bg-light-success mr-2\">\n                                  <div class=\"avatar-content\">\n                                      <i class=\"feather icon-check-square text-warning font-medium-5\"></i>\n                                  </div>\n                              </div>\n                              <div class=\"media-body my-auto\">\n                                  <h4 class=\"font-weight-bolder mb-0\">{{$diambil}}</h4>\n                                  <p class=\"card-text font-small-1 mb-0\">Laundry Diambil</p>\n                              </div>\n                          </div>\n                      </div>\n                  </div>\n              </div>\n          </div>\n      </div>\n      <!--/ Statistics Card -->\n  </div>\n\n  <div class=\"row match-height\">\n    <div class=\"col-lg-4 col-12\">\n        <div class=\"row match-height\">\n            <!-- Bar Chart - Orders -->\n            <div class=\"col-lg-6 col-md-3 col-6\">\n                <div class=\"card\">\n                    <div class=\"card-body pb-50\">\n                        <h4>Hari ini</h4>\n                        <h6 class=\"font-weight-bolder mb-1\">{{$kgToday}} <span style=\"font-style: italic; font-size:9px\">Kg</span> </h6>\n                        <span style=\"font-size:10px\">Kilogram</span>\n                    </div>\n                </div>\n            </div>\n            <!--/ Bar Chart - Orders -->\n\n            <!-- Line Chart - Profit -->\n            <div class=\"col-lg-6 col-md-3 col-6\">\n                <div class=\"card card-tiny-line-stats\">\n                    <div class=\"card-body pb-50\">\n                        <h4>Kemarin</h4>\n                        <h6 class=\"font-weight-bolder mb-1\">{{$kgTodayOld}} <span style=\"font-style: italic; font-size:9px\">Kg</span></h6>\n                        <span style=\"font-size:10px\">Kilogram</span>\n                    </div>\n                </div>\n            </div>\n            <!--/ Line Chart - Profit -->\n\n            <!-- Earnings Card -->\n            <div class=\"col-lg-12 col-md-6 col-12\">\n                <div class=\"card earnings-card\">\n                    <div class=\"card-body\">\n                        <div class=\"row\">\n                            <div class=\"col-12\">\n                                <h4 class=\"card-title mb-1\">Pendapatan</h4>\n                                <div class=\"font-small-2\">Bulan Ini</div>\n                                <h5 class=\"mb-1\">{{Rupiah::getRupiah($incomeM)}}</h5>\n                                <p class=\"card-text text-muted font-small-2\">\n                                  <span> Pendapatan {{$incomeM >= $incomeMOld ? 'naik' : 'turun'}} </span> <span class=\"font-weight-bolder\">{{$persen}}%</span> <span> dari bulan kemarin.</span>\n                                </p>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            </div>\n            <!--/ Earnings Card -->\n        </div>\n    </div>\n\n    <div class=\"col-lg-8 col-12\">\n        <div class=\"card\">\n            <div class=\"card-header d-flex justify-content-between\">\n                <h4 class=\"card-title\">Data Laundry Masuk Per-bulan</h4>\n            </div>\n            <div class=\"card-content\">\n                <div class=\"card-body pb-0\">\n                    <div id=\"data-bulan\"></div>\n                </div>\n            </div>\n        </div>\n    </div>\n  </div>\n\n@endsection\n@section('scripts')\n<script type=\"text/javascript\">\nvar $primary = '#7367F0';\nvar $label_color = '#e7eef7';\nvar $purple = '#df87f2';\nvar $strok_color = '#b9c3cd';\n\n// Bar Data Bulan\nvar MONTHS = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\nvar salesavgChartoptions = {\n      chart: {\n        height: 270,\n        toolbar: { show: false },\n        type: 'line',\n        dropShadow: {\n            enabled: true,\n            top: 20,\n            left: 2,\n            blur: 6,\n            opacity: 0.20\n        },\n      },\n      stroke: {\n          curve: 'smooth',\n          width: 4,\n      },\n      grid: {\n          borderColor: $label_color,\n      },\n      legend: {\n          show: false,\n      },\n     colors: [$purple],\n      fill: {\n          type: 'gradient',\n          gradient: {\n              shade: 'dark',\n              inverseColors: false,\n              gradientToColors: [$primary],\n              shadeIntensity: 1,\n              type: 'horizontal',\n              opacityFrom: 1,\n              opacityTo: 1,\n              stops: [0, 100, 100, 100]\n          },\n      },\n      markers: {\n          size: 0,\n          hover: {\n              size: 5\n          }\n      },\n      xaxis: {\n          labels: {\n              style: {\n                  colors: $strok_color,\n              }\n          },\n          axisTicks: {\n              show: false,\n          },\n          categories: MONTHS,\n          axisBorder: {\n              show: false,\n          },\n          tickPlacement: 'on'\n      },\n      yaxis: {\n          tickAmount: 5,\n          labels: {\n              style: {\n                  color: $strok_color,\n              },\n              formatter: function(val) {\n                  return val > 999 ? (val / 1000).toFixed(1) + 'k' : val;\n              }\n          }\n      },\n      tooltip: {\n          x: { show: false }\n      },\n      series: [{\n            name: \"Laundry Masuk\",\n            data: [{{$_nilaiB}}]\n        }],\n\n    }\n\n   var salesavgChart = new ApexCharts(\n        document.querySelector(\"#data-bulan\"),\n        salesavgChartoptions\n    );\n\n    salesavgChart.render();\n// End Bar Data Bulan\n</script>\n@endsection"
  },
  {
    "path": "resources/views/karyawan/laporan/cetak.blade.php",
    "content": "<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\">\n    <title>Invoice</title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>\n    <style>\n        body{\n            font-family:'Gill Sans', 'Gill Sans MT', Calibri, 'Trebuchet MS', sans-serif;\n            color:#333;\n            text-align:left;\n            font-size:18px;\n            margin:0;\n        }\n        .container{\n            margin:0 auto;\n            margin-top:35px;\n            padding:0px;\n            width:100%;\n            height:auto;\n            background-color:#fff;\n        }\n        caption{\n            font-size:28px;\n            margin-bottom:15px;\n        }\n        table{\n            border:0px solid #333;\n            border-collapse:collapse;\n            margin:0 auto;\n            width:100%;\n        }\n        td, tr, th{\n            padding:12px;\n            border:1px solid #333;\n            width:auto;\n        }\n        th{\n            background-color: #f0f0f0;\n        }\n        h4, p{\n            margin:0px;\n        }\n    </style>\n</head>\n<body>\n    <div class=\"container-fluid\">\n        <table>\n            <thead>\n                <tr>\n                    <th colspan=\"4\">Invoice <strong>{{$data->invoice}}</strong></th>\n                    <th>{{ $data->created_at->format('d-M-Y') }}</th>\n                </tr>\n                <tr>\n                    <td style=\"padding-bottom:80px\" colspan=\"2\">\n                        <h3 style=\"color:coral\">{{$data->nama_cabang}}</h3>\n                        <p class=\"text-muted m-l-5\"> Diterima Oleh <span style=\"margin-left:8px\"> </span>: {{$data->user->name}}\n                            <br/> Alamat <span style=\"margin-left:62px\"> </span>: {{$data->user->alamat_cabang}},\n                            <br/> No. Telp <span style=\"margin-left:50px\"> </span>: {{$data->user->no_telp}},\n                            </p>\n                    </td>\n                    <td colspan=\"3\">\n                        <h3 style=\"text-align:right\">Detail Order Customer :</h3>\n                        <p style=\"text-align:right\">\n                            {{$data->customers->nama}}\n                            <br/> {{$data->customers->alamat}}\n                            <br/> {{$data->customers->no_telp}}</p> <br>\n                        <p style=\"text-align:right\"><b>Tanggal Masuk :</b> <i class=\"fa fa-calendar\"></i> {{carbon\\carbon::parse($data->tgl_transaksi)->format('d-m-y')}}</p>\n                        <p style=\"text-align:right\"><b>Tanggal Diambil :</b> <i class=\"fa fa-calendar\"></i>\n                            @if ($data->tgl_ambil == \"\")\n                                Belum Diambil\n                            @else\n                            {{carbon\\carbon::parse($data->tgl_ambil)->format('d-m-y')}}\n                            @endif\n                        </p>\n                    </td>\n                </tr>\n            </thead>\n            <tbody>\n                <tr>\n                    <th class=\"text-center\">#</th>\n                    <th>Jenis Pakaian</th>\n                    <th class=\"text-right\">Berat</th>\n                    <th class=\"text-right\">Harga</th>\n                    <th class=\"text-right\">Total</th>\n                </tr>\n                @foreach ($invoice as $item)\n                <tr>\n                    <td style=\"color:black\">1</td>\n                    <td style=\"color:black\">{{$item->price->jenis}}</td>\n                    <td style=\"color:black\">{{$item->kg}} Kg</td>\n                    <td style=\"color:black\">{{Rupiah::getRupiah($item->harga)}} /Kg</td>\n                    <td><input type=\"hidden\" value=\"{{$hitung = $item->kg * $item->harga}}\">\n                        <p style=\"color:black\">{{Rupiah::getRupiah($hitung)}}</p></td>\n                </tr>\n                @endforeach\n                <tr>\n                    <th colspan=\"4\">Disc @if ($item->disc == \"\")\n                        0 %\n                    @else\n                        {{$item->disc}} %\n                    @endif </th>\n                    <td style=\"color:black\"><input type=\"hidden\" value=\"{{$disc = ($hitung * $item->disc) / 100}}\"> {{Rupiah::getRupiah($disc)}}</td>\n                </tr>\n                <tr>\n                    <th colspan=\"4\">Total Bayar</th>\n                    <td style=\"color:black; font-weight:bold\">{{Rupiah::getRupiah($item->harga_akhir)}}</td>\n                </tr>\n            </tbody>\n        </table>\n        <h6>Metode Pembayaran :</h6>\n        <ol style=\"font-size: 12px\">\n          @foreach ($bank as $banks)\n            <li style=\"color: black\"> {{$banks->nama_bank}} <br> {{$banks->no_rekening}} a/n {{$banks->nama_pemilik}}</li>\n          @endforeach\n        </ol>\n    </div>\n</body>\n</html>"
  },
  {
    "path": "resources/views/karyawan/laporan/excelExport.blade.php",
    "content": "@php\n    $total_colspan = 11;\n    $no = 0;\n@endphp\n<table class=\"table table-hover table-bordered\">\n    <thead>\n       <tr>\n            <th colspan=\"{{ $total_colspan }}\" style=\"text-align: center;\"><b>LAPORAN LAUNDRY</b></th>\n        </tr>\n        <tr>\n            <th colspan=\"{{ $total_colspan }}\" style=\"text-align: center;\"><b>{{strtoupper(Auth::user()->name)}}</b></th>\n        </tr>\n        <tr>\n            <th>&nbsp;</th>\n        </tr>\n        <tr></tr>\n        <tr></tr>\n        <tr>\n            <th><b>No</b></th>\n            <th colspan=\"2\"><b>Customer</b></th>\n            <th colspan=\"2\"><b>Jenis Laundry</b></th>\n            <th colspan=\"2\"><b>Status Pembayaran</b></th>\n            <th colspan=\"2\"><b>Jenis Pembayaran</b></th>\n            <th colspan=\"2\"><b>Total</b></th>\n        </tr>\n    </thead>\n    <tbody>\n      @php\n          $grand = 0;\n      @endphp\n      @foreach ($data as $key => $items)\n        <tr>\n          <td> {{$key+1}}  </td>\n          <td colspan=\"2\"> {{$items->customer}} </td>\n          <td colspan=\"2\"> {{$items->price->jenis}} </td>\n          <td colspan=\"2\"> {{$items->status_payment}} </td>\n          <td colspan=\"2\"> {{$items->jenis_pembayaran}} </td>\n          <td colspan=\"2\">Rp {{number_format($items->harga_akhir)}} </td>\n        </tr>\n        @php\n          $grand += $items->harga_akhir\n        @endphp\n       @endforeach\n    </tbody>\n    <tr>\n      <td colspan=\"5\" rowspan=\"1\" style=\"border-left-style: hidden;\"></td>\n      <td style=\"border-bottom-style: hidden; border-left-style: hidden; \"></td>\n      <td style=\"font-weight: bold; text-align:right\">GRAND TOTAL</td>\n      <td style=\"text-align:right\">Rp {{number_format($grand)}} </td>\n    </tr>\n</table>"
  },
  {
    "path": "resources/views/karyawan/laporan/index.blade.php",
    "content": "@extends('layouts.backend')\n@section('title','Karyawan - Laporan Laundry')\n@section('content')\n<div class=\"col-lg-12\">\n    <div class=\"card\">\n        <div class=\"card-body\">\n            <h4 class=\"card-title\"> Laporan Laundry\n              <a href=\"{{url('export-excel')}}\" class=\"btn btn-info btn-sm\">Export Excel</a>\n            </h4>\n            <div class=\"table-responsive m-t-0\">\n                <table id=\"myTable\" class=\"table display table-bordered table-striped\">\n                    <thead>\n                        <tr>\n                            <th>#</th>\n                            <th>Nama Customer</th>\n                            <th>Jenis Laundry</th>\n                            <th>Jenis Pembayaran</th>\n                            <th>Status Pembayaran</th>\n                            <th>Total</th>\n                        </tr>\n                    </thead>\n                    <tbody id=\"refresh_body\">\n                      <?php $no=1; ?>\n                      @foreach ($laporan as $laporans)\n                        <tr>\n                          <td>{{$no}}</td>\n                          <td>{{namaCustomer($laporans->customer_id)}}</td>\n                          <td>{{$laporans->price->jenis}}</td>\n                          <td>{{$laporans->jenis_pembayaran}}</td>\n                          <td>{{$laporans->status_payment}}</td>\n                          <td>{{Rupiah::getRupiah($laporans->harga_akhir)}}</td>\n                        </tr>\n                      <?php $no++; ?>\n                      @endforeach\n                    </tbody>\n                </table>\n            </div>\n        </div>\n    </div>\n</div>\n@endsection\n@section('scripts')\n<script type=\"text/javascript\">\n$(document).ready(function() {\n    $('#myTable').DataTable();\n    $(document).ready(function() {\n        var table = $('#example').DataTable({\n            \"columnDefs\": [{\n                \"visible\": false,\n                \"targets\": 2\n            }],\n            \"order\": [\n                [2, 'asc']\n            ],\n            \"displayLength\": 25,\n            \"drawCallback\": function(settings) {\n                var api = this.api();\n                var rows = api.rows({\n                    page: 'current'\n                }).nodes();\n                var last = null;\n                api.column(2, {\n                    page: 'current'\n                }).data().each(function(group, i) {\n                    if (last !== group) {\n                        $(rows).eq(i).before('<tr class=\"group\"><td colspan=\"5\">' + group + '</td></tr>');\n                        last = group;\n                    }\n                });\n            }\n        });\n    });\n});\n</script>\n@endsection"
  },
  {
    "path": "resources/views/karyawan/laporan/invoice.blade.php",
    "content": "@extends('layouts.backend')\n@section('title','Karyawan - Invoice Customer')\n@section('header','Invoice Customer')\n@section('content')\n<div class=\"col-md-12\">\n    <div class=\"card card-body printableArea\">\n        <h3><b>INVOICE</b> <span class=\"pull-right\">{{$data->invoice}}</span></h3>\n        <hr>\n        <div class=\"row\">\n            <div class=\"col-md-12\">\n                <div class=\"pull-left\">\n                    <address>\n                        <h3> &nbsp;<b class=\"text-danger\">{{$data->user->nama_cabang}}</b></h3>\n                        <p class=\"text-muted m-l-5\"> Diterima Oleh <span style=\"margin-left:20px\"> </span>: {{$data->user->name}}\n                            <br/> Alamat <span style=\"margin-left:70px\"> </span>: {{$data->user->alamat_cabang}},\n                            <br/> No. Telp <span style=\"margin-left:65px\"> </span>: {{$data->user->no_telp}}\n                            </p>\n                    </address>\n                </div>\n                <div class=\"pull-right text-right\">\n                    <address>\n                        <h3>Detail Order Customer :</h3>\n                        <p class=\"text-muted m-l-30\">\n                            {{$data->customers->nama}}\n                            <br/> {{$data->customers->alamat}}\n                            <br/> {{$data->customers->no_telp}}</p>\n                        <p class=\"m-t-30\"><b>Tanggal Masuk :</b> <i class=\"fa fa-calendar\"></i> {{carbon\\carbon::parse($data->tgl_transaksi)->format('d-m-Y')}}</p>\n                        <p><b>Tanggal Diambil :</b> <i class=\"fa fa-calendar\"></i>\n                            @if ($data->tgl_ambil == \"\")\n                                Belum Diambil\n                            @else\n                            {{\\carbon\\carbon::parse($data->tgl_ambil)->format('d-m-Y')}}\n                            @endif\n                        </p>\n                    </address>\n                </div>\n            </div>\n            <div class=\"col-md-12\">\n                <div class=\"table-responsive m-t-20\" style=\"clear: both;\">\n                    <table class=\"table table-hover\">\n                        <thead>\n                            <tr>\n                                <th class=\"text-center\">#</th>\n                                <th>Jenis Pakaian</th>\n                                <th class=\"text-right\">Berat</th>\n                                <th class=\"text-right\">Harga</th>\n                                <th class=\"text-right\">Total</th>\n                            </tr>\n                        </thead>\n                        <tbody>\n                            @foreach ($invoice as $item)\n                                <tr>\n                                    <td class=\"text-center\">1</td>\n                                    <td>{{$item->price->jenis}}</td>\n                                    <td class=\"text-right\">{{$item->kg}} / kg</td>\n                                    <td class=\"text-right\">{{Rupiah::getRupiah($item->harga)}} /kg</td>\n                                    <td class=\"text-right\">\n                                        <input type=\"hidden\" value=\"{{$hitung = $item->kg * $item->harga}}\">\n                                        <p>{{Rupiah::getRupiah($hitung)}}</p>\n                                    </td>\n                                </tr>\n                        </tbody>\n                    </table>\n                </div>\n            </div>\n            <div class=\"col-md-12\">\n                <div class=\"pull-left m-t-10\">\n                    <h6 style=\"font-weight:bold\">Metode Pembayaran :</h6>\n                    <ol>\n                      @foreach ($bank as $banks)\n                        <li style=\"color: white\"> {{$banks->nama_bank}} <br> {{$banks->no_rekening}} a/n {{$banks->nama_pemilik}}</li>\n                      @endforeach\n                    </ol>\n                </div>\n                <div class=\"pull-right m-t-10 text-right\">\n                    <p>Total : {{Rupiah::getRupiah($hitung)}}</p>\n                    <p>Disc @if ($item->disc == \"\")\n                        (0 %)\n                    @else\n                        ({{$item->disc}} %)\n                    @endif :  </p>\n                    <hr>\n                    <h3><b>Total Bayar :</b> {{Rupiah::getRupiah($item->harga_akhir)}}</h3>\n                </div>\n                @endforeach\n                <div class=\"clearfix\"></div>\n                <hr>\n                <div class=\"text-right\">\n                    <a href=\"{{url('pelayanan')}}\" class=\"btn btn-outline btn-danger\" style=\"color:white\">Back</a>\n                    <a href=\"{{url('cetak-invoice/'.$item->id. '/print')}}\" target=\"_blank\" class=\"btn btn-success\"><i class=\"fa fa-print\"></i> Print</a>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n@endsection"
  },
  {
    "path": "resources/views/karyawan/profile/index.blade.php",
    "content": "@extends('layouts.backend')\n@section('title','Profile')\n@section('content')\n@if ($message = Session::get('success'))\n  <div class=\"alert alert-success alert-block\">\n  <button type=\"button\" class=\"close\" data-dismiss=\"alert\">×</button>\n    <strong>{{ $message }}</strong>\n  </div>\n@elseif($message = Session::get('error'))\n  <div class=\"alert alert-danger alert-block\">\n  <button type=\"button\" class=\"close\" data-dismiss=\"alert\">×</button>\n    <strong>{{ $message }}</strong>\n  </div>\n@endif\n<div class=\"row\">\n    <div class=\"col-lg-4 col-xlg-3 col-md-5\">\n        <div class=\"card\">\n            <div class=\"card-body\">\n                <div class=\"col text-center\">\n                    <div class=\"m-t-30\">\n                      <img class=\"round\" src=\"{{asset(Auth::user()->foto == null ? 'backend/images/profile/user.jpg' : 'storage/images/foto_profile/'. Auth::user()->foto )}}\" alt=\"avatar\" height=\"150\" width=\"150\">\n                        <h4 class=\"card-title mt-1\">{{Auth::user()->name}}</h4>\n                        <h6 class=\"small\">Customer</h6>\n                    </div>\n                </div>\n            </div>\n            <div>\n                <hr> </div>\n            <div class=\"card-body\"> <small class=\"text-muted\">Email address </small>\n              <h6>{{Auth::user()->email}}</h6> <small class=\"text-muted p-t-30 db\">Phone</small>\n              <h6>+{{Auth::user()->no_telp}}</h6> <small class=\"text-muted p-t-30 db\">Address</small>\n              <h6>{{Auth::user()->alamat}}</h6>\n              <small class=\"text-muted p-t-30 db\">Social Profile</small>\n              <br/>\n              <button class=\"btn btn-circle btn-secondary\"><i class=\"fa fa-facebook\"></i></button>\n              <button class=\"btn btn-circle btn-secondary\"><i class=\"fa fa-twitter\"></i></button>\n              <button class=\"btn btn-circle btn-secondary\"><i class=\"fa fa-youtube\"></i></button>\n            </div>\n        </div>\n    </div>\n\n    <div class=\"col-lg-8 col-xlg-9 col-md-7\">\n        <div class=\"card\">\n            <!-- Nav tabs -->\n            <ul class=\"nav nav-tabs profile-tab\" role=\"tablist\">\n              <li class=\"nav-item\"> <a class=\"nav-link active\" data-toggle=\"tab\" href=\"#home\" role=\"tab\">Informasi</a> </li>\n            </ul>\n            <div class=\"card-body\">\n              <form action=\" {{url('profile-karyawan/update', Auth::id())}}\" method=\"POST\" enctype=\"multipart/form-data\">\n                @csrf\n                @method('PUT')\n                <div class=\"form-body\">\n                  <div class=\"row\">\n                    <div class=\"col-md-6\">\n                      <div class=\"form-group has-success\">\n                        <label class=\"control-label\">Nama</label>\n                        <input type=\"text\" name=\"name\" value=\" {{Auth::user()->name}} \" class=\"form-control @error('name') is-invalid @enderror\">\n                        @error('name')\n                          <span class=\"invalid-feedback text-danger\" role=\"alert\">\n                              <strong>{{ $message }}</strong>\n                          </span>\n                        @enderror\n                      </div>\n                    </div>\n\n                    <div class=\"col-md-6\">\n                      <div class=\"form-group has-success\">\n                        <label class=\"control-label\">Email</label>\n                        <input type=\"text\" name=\"email\" value=\" {{Auth::user()->email}} \" class=\"form-control @error('email') is-invalid @enderror\">\n                        @error('email')\n                          <span class=\"invalid-feedback text-danger\" role=\"alert\">\n                              <strong>{{ $message }}</strong>\n                          </span>\n                        @enderror\n                      </div>\n                    </div>\n\n                    <div class=\"col-md-12\">\n                      <div class=\"form-group has-success\">\n                        <label class=\"control-label\">Alamat</label>\n                        <textarea name=\"alamat\" class=\"form-control\" id=\"alamat\" cols=\"5\"> {{Auth::user()->alamat}} </textarea>\n                        @error('alamat')\n                          <span class=\"invalid-feedback text-danger\" role=\"alert\">\n                              <strong>{{ $message }}</strong>\n                          </span>\n                        @enderror\n                      </div>\n                    </div>\n\n                    <div class=\"col-md-6\">\n                      <div class=\"form-group has-success\">\n                        <label class=\"control-label\">No WhatsApp</label>\n                        <input type=\"text\" name=\"number\" class=\"form-control\" value=\"{{Auth::user()->no_telp}}\" />\n                        @error('no_telp')\n                          <span class=\"invalid-feedback text-danger\" role=\"alert\">\n                              <strong>{{ $message }}</strong>\n                          </span>\n                        @enderror\n                      </div>\n                    </div>\n\n                    <div class=\"col-md-6\">\n                      <div class=\"form-group has-success\">\n                        <label class=\"control-label\">Foto</label>\n                        <input type=\"file\" name=\"foto\" class=\"form-control @error('foto') is-invalid @enderror\">\n                        <span class=\"small text-warning\">Biarkan kosong jika tidak ingin di update.</span>\n                        @error('foto')\n                          <span class=\"invalid-feedback text-danger\" role=\"alert\">\n                              <strong>{{ $message }}</strong>\n                          </span>\n                        @enderror\n                      </div>\n                    </div>\n\n                    <div class=\"col-md-6\">\n                      <div class=\"form-group has-success\">\n                        <label class=\"control-label\">Password</label>\n                        <input type=\"password\" name=\"password\" class=\"form-control @error('password') is-invalid @enderror\">\n                        <span class=\"small text-warning\">Biarkan kosong jika tidak ingin di update.</span>\n                        @error('password')\n                          <span class=\"invalid-feedback text-danger\" role=\"alert\">\n                              <strong>{{ $message }}</strong>\n                          </span>\n                        @enderror\n                      </div>\n                    </div>\n\n                    <div class=\"col-md-6\">\n                      <div class=\"form-group has-success\">\n                        <label class=\"control-label\">Konfirmasi Password</label>\n                        <input type=\"password\" name=\"password_confirmation\" class=\"form-control @error('password_confirmation') is-invalid @enderror\">\n                        <span class=\"small text-warning\">Biarkan kosong jika tidak ingin di update.</span>\n                        @error('password_confirmation')\n                          <span class=\"invalid-feedback text-danger\" role=\"alert\">\n                              <strong>{{ $message }}</strong>\n                          </span>\n                        @enderror\n                      </div>\n                    </div>\n                  </div>\n                  <h5>Data Laundry</h5>\n                  <hr>\n\n                  <div class=\"row\">\n                     <div class=\"col-md-12\">\n                      <div class=\"form-group has-success\">\n                        <label class=\"control-label\">Nama Laundry (cabang))</label>\n                        <input type=\"text\" name=\"nama_cabang\" class=\"form-control\" value=\"{{Auth::user()->nama_cabang}}\" />\n                        @error('nama_cabang')\n                          <span class=\"invalid-feedback text-danger\" role=\"alert\">\n                              <strong>{{ $message }}</strong>\n                          </span>\n                        @enderror\n                      </div>\n                    </div>\n\n                    <div class=\"col-md-12\">\n                      <div class=\"form-group has-success\">\n                        <label class=\"control-label\">Alamat Laundry (cabang)</label>\n                        <textarea name=\"alamat_cabang\" class=\"form-control\" id=\"alamat_cabang\" cols=\"5\"> {{Auth::user()->alamat_cabang}} </textarea>\n                        @error('alamat_cabang')\n                          <span class=\"invalid-feedback text-danger\" role=\"alert\">\n                              <strong>{{ $message }}</strong>\n                          </span>\n                        @enderror\n                      </div>\n                    </div>\n                  </div>\n                </div>\n                <button type=\"submit\" class=\"btn btn-primary\">Update</button>\n                <a href=\"/home\" class=\"btn btn-info\">Batal</a>\n              </form>\n            </div>\n        </div>\n    </div>\n</div>\n@endsection"
  },
  {
    "path": "resources/views/karyawan/settings/index.blade.php",
    "content": "@extends('layouts.backend')\n@section('title','Admin - Settings')\n@section('header','Settings')\n@section('content')\n@if ($message = Session::get('success'))\n  <div class=\"alert alert-success alert-block\">\n  <button type=\"button\" class=\"close\" data-dismiss=\"alert\">×</button>\n    <strong>{{ $message }}</strong>\n  </div>\n@elseif($message = Session::get('error'))\n  <div class=\"alert alert-danger alert-block\">\n  <button type=\"button\" class=\"close\" data-dismiss=\"alert\">×</button>\n    <strong>{{ $message }}</strong>\n  </div>\n@endif\n<div class=\"content-body\">\n  <section>\n    <div class=\"row\">\n      <!-- left menu section -->\n      <div class=\"col-md-3 mb-2 mb-md-0\">\n        <ul class=\"nav nav-pills flex-column mt-md-0 mt-1\">\n          <li class=\"nav-item\">\n              <a class=\"nav-link d-flex py-75 active\" id=\"pill-general\" data-toggle=\"pill\" href=\"#vertical-general\" aria-expanded=\"true\">\n                  <i class=\"feather icon-globe mr-50 font-medium-3\"></i>\n                  General\n              </a>\n          </li>\n\n        </ul>\n      </div>\n      <!-- right content section -->\n      <div class=\"col-md-9\">\n        <div class=\"card\">\n          <div class=\"card-content\">\n            <div class=\"card-body\">\n              <div class=\"tab-content\">\n                <div role=\"tabpanel\" class=\"tab-pane active\" id=\"vertical-general\" aria-labelledby=\"pill-general\" aria-expanded=\"true\">\n                  <div class=\"row\">\n                    <form action=\"{{route('proses-setting-karyawan.update', Auth::user()->id)}}\" method=\"post\">\n                      @csrf\n                      @method('PUT')\n                      <h5 class=\"m-1\">Theme Dark <i class=\" {{Auth::user()->theme == 1 ? 'fa fa-check' : ''}} \" style=\"color: chartreuse\"></i> </h5>\n                      <div class=\"col-12 mb-1\">\n                          <div class=\"custom-control custom-switch custom-control-inline\">\n                              <input type=\"checkbox\" class=\"custom-control-input\" name=\"theme\" {{Auth::user()->theme == 1 ? 'checked' : ''}} value=\"1\" id=\"theme\">\n                              <label class=\"custom-control-label mr-1\" for=\"theme\"></label>\n                              <span class=\"switch-label w-100\">Aktifkan Jika Ingin Menggunakan Theme Dark</span>\n                          </div>\n                      </div>\n                      <div class=\"col-12 d-flex flex-sm-row flex-column justify-content-start\">\n                        <button type=\"submit\" class=\"btn btn-primary mr-sm-1 mb-1 mb-sm-0\">Save\n                            changes</button>\n                        <button type=\"reset\" class=\"btn btn-outline-warning\">Cancel</button>\n                      </div>\n                    </form>\n                  </div>\n                </div>\n\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </section>\n</div>\n@endsection"
  },
  {
    "path": "resources/views/karyawan/transaksi/addorder.blade.php",
    "content": "@extends('layouts.backend')\n@section('title','Tambah Data Order')\n@section('content')\n    @if (@$cek_harga->user_id == !null || @$cek_harga->user_id == Auth::user()->id)\n\n    @if($message = Session::get('error'))\n      <div class=\"alert alert-danger alert-block\">\n      <button type=\"button\" class=\"close\" data-dismiss=\"alert\">×</button>\n        <strong>{{ $message }}</strong>\n      </div>\n    @endif\n\n    <div class=\"card card-outline-info\">\n      <div class=\"card-header\">\n          <h4 class=\"card-title\">Form Tambah Data Order\n              <a href=\"{{url('customers-create')}}\" class=\"btn btn-danger\">+ Customer Baru</a>\n          </h4>\n      </div>\n      <div class=\"card-body\">\n        {{-- Cek Apakah Customer ada --}}\n        @if ($cek_customer != 0)\n          <form action=\"{{route('pelayanan.store')}}\" method=\"POST\">\n            @csrf\n            <div class=\"form-body\">\n              <div class=\"row p-t-20\">\n                  <div class=\"col-md-3\">\n                      <div class=\"form-group has-success\">\n                          <label class=\"control-label\">Nama Customer</label>\n                          <select name=\"customer_id\" id=\"customer_id\" class=\"form-control select2 @error('customer_id') is-invalid @enderror\" >\n                              <option value=\"\">-- Pilih Customer --</option>\n                              @foreach ($customer as $customers)\n                                  <option value=\"{{$customers->id}}\" {{old('customer_id') == $customers->id ? 'selected' : ''}} >{{$customers->name}}</option>\n                              @endforeach\n                          </select>\n                          @error('customer_id')\n                            <span class=\"invalid-feedback text-danger\" role=\"alert\">\n                                <strong>{{ $message }}</strong>\n                            </span>\n                          @enderror\n                      </div>\n                  </div>\n\n                  <div class=\"col-md-3\">\n                      <div class=\"form-group has-success\">\n                          <label class=\"control-label\">No Transaksi</label>\n                          <input type=\"text\" name=\"invoice\" value=\"{{$newID}}\" class=\"form-control @error('invoice') is-invalid @enderror\" readonly>\n                          @error('invoice')\n                            <span class=\"invalid-feedback text-danger\" role=\"alert\">\n                                <strong>{{ $message }}</strong>\n                            </span>\n                          @enderror\n                      </div>\n                  </div>\n                  <div class=\"col-md-3\">\n                    <div class=\"form-group has-success\">\n                        <label class=\"control-label\">Berat Pakaian</label>\n                        <input type=\"text\" class=\"form-control form-control-danger @error('kg') is-invalid @enderror\" value=\" {{old('kg')}} \" name=\"kg\" placeholder=\"Berat Pakaian\" autocomplete=\"off\" >\n                        @error('kg')\n                          <span class=\"invalid-feedback text-danger\" role=\"alert\">\n                              <strong>{{ $message }}</strong>\n                          </span>\n                        @enderror\n                    </div>\n                  </div>\n\n                  <div class=\"col-md-3\">\n                    <div class=\"form-group has-success\">\n                        <label class=\"control-label\">Status Pembayaran</label>\n                        <select class=\"form-control custom-select @error('status_payment') is-invalid @enderror\" name=\"status_payment\" >\n                            <option value=\"\">-- Pilih Status Payment --</option>\n                            <option value=\"Pending\" {{old('status_payment') == 'Pending' ? 'selected' : ''}} >Belum Dibayar</option>\n                            <option value=\"Success\" {{old('status_payment') == 'Success' ? 'selected' : ''}}>Sudah Dibayar</option>\n                        </select>\n                        @error('status_payment')\n                          <span class=\"invalid-feedback text-danger\" role=\"alert\">\n                              <strong>{{ $message }}</strong>\n                          </span>\n                        @enderror\n                    </div>\n                  </div>\n              </div>\n\n              <div class=\"row\">\n\n                <div class=\"col-md-3\">\n                  <div class=\"form-group has-success\">\n                      <label class=\"control-label\">Jenis Pembayaran</label>\n                      <select class=\"form-control custom-select @error('jenis_pembayaran') is-invalid @enderror\" name=\"jenis_pembayaran\" >\n                        <option value=\"\">-- Pilih Jenis Pembayaran --</option>\n                        <option value=\"Tunai\" {{old('jenis_pembayaran' == 'Tunai' ? 'selected' : '')}} >Tunai</option>\n                        <option value=\"Transfer\" {{old('jenis_pembayaran' == 'Transfer' ? 'selected' : '')}}>Transfer</option>\n                      </select>\n                      @error('jenis_pembayaran')\n                        <span class=\"invalid-feedback text-danger\" role=\"alert\">\n                            <strong>{{ $message }}</strong>\n                        </span>\n                      @enderror\n                  </div>\n                </div>\n\n                <div class=\"col-md-3\">\n                  <div class=\"orm-group has-success\">\n                      <label class=\"control-label\">Pilih Pakaian</label>\n                      <select id=\"id\" name=\"harga_id\" class=\"form-control select2 @error('harga_id') is-invalid @enderror\" >\n                          <option value=\"\">-- Jenis Pakaian --</option>\n                          @foreach($jenisPakaian as $jenis)\n                            <option value=\"{{$jenis->id}}\" {{old('harga_id') == $jenis->id ? 'selected' : '' }} >{{$jenis->jenis}}</option>\n                          @endforeach\n                      </select>\n                      @error('harga_id')\n                        <span class=\"invalid-feedback text-danger\" role=\"alert\">\n                            <strong>{{ $message }}</strong>\n                        </span>\n                      @enderror\n                  </div>\n                </div>\n                <div class=\"col-md-2\">\n                    <span id=\"select-hari\"></span>\n                </div>\n                <div class=\"col-md-2\">\n                    <span id=\"select-harga\"></span>\n                </div>\n                <div class=\"col-md-2\">\n                  <div class=\"form-group has-success\">\n                      <label class=\"control-label\">Disc</label>\n                      <input type=\"number\" name=\"disc\" placeholder=\"Tulis Disc\" class=\"form-control @error('disc') is-invalid @enderror\">\n                      @error('disc')\n                        <span class=\"invalid-feedback text-danger\" role=\"alert\">\n                            <strong>{{ $message }}</strong>\n                        </span>\n                      @enderror\n                  </div>\n                </div>\n              </div>\n\n                <input type=\"hidden\" name=\"tgl\">\n                <!--/row-->\n            </div>\n            <div class=\"form-actions\">\n              <button type=\"submit\" class=\"btn btn-primary mr-1 mb-1\">Tambah</button>\n              <button type=\"reset\" class=\"btn btn-outline-warning mr-1 mb-1\">Reset</button>\n            </div>\n          </form>\n        @else\n          <div class=\"col text-center\">\n            <h2 class=\"text-danger\">\n              Data Customer Masih Kosong !\n            </h2>\n          </div>\n        @endif\n      </div>\n    </div>\n    @else\n      <div class=\"card\">\n        <div class=\"col text-center\">\n          <img src=\"{{asset('backend/images/pages/empty.svg')}}\" style=\"height:500px; width:100%; margin-top:10px\">\n          <h2 class=\"mt-1\">Data Harga Kosong / Tidak Aktif !</h2>\n          <h4>Mohon hubungi Administrator :)</h4>\n        </div>\n      </div>\n    @endif\n@endsection\n@section('scripts')\n<script type=\"text/javascript\">\n    // Filter Harga\n    $(document).ready(function() {\n       var id = $(\"#id\").val();\n            $.get('{{ Url(\"listhari\") }}',{'_token': $('meta[name=csrf-token]').attr('content'),id:id}, function(resp){\n            $(\"#select-hari\").html(resp);\n            $.get('{{ Url(\"listharga\") }}',{'_token': $('meta[name=csrf-token]').attr('content'),id:id}, function(resp){\n            $(\"#select-harga\").html(resp);\n        });\n        });\n    });\n\n    $(document).on('change', '#id', function (e) {\n      var id = $(this).val();\n      $.get('{{ Url(\"listhari\") }}',{'_token': $('meta[name=csrf-token]').attr('content'),id:id}, function(resp){\n        $(\"#select-hari\").html(resp);\n      });\n    });\n\n    $(document).on('change', '#id', function (e) {\n        var id = $(this).val();\n        $.get('{{ Url(\"listharga\") }}',{'_token': $('meta[name=csrf-token]').attr('content'),id:id}, function(resp){\n            $(\"#select-harga\").html(resp);\n        });\n    });\n</script>\n@endsection"
  },
  {
    "path": "resources/views/karyawan/transaksi/order.blade.php",
    "content": "@extends('layouts.backend')\n@section('title','Dashboard Karyawan')\n@section('content')\n@if ($message = Session::get('success'))\n  <div class=\"alert alert-success alert-block\">\n  <button type=\"button\" class=\"close\" data-dismiss=\"alert\">×</button>\n    <strong>{{ $message }}</strong>\n  </div>\n@elseif ($message = Session::get('error'))\n  <div class=\"alert alert-danger alert-block\">\n  <button type=\"button\" class=\"close\" data-dismiss=\"alert\">×</button>\n    <strong>{{ $message }}</strong>\n  </div>\n@endif\n<div class=\"card\">\n    <div class=\"card-body\">\n        <h4 class=\"card-title\">\n            <a href=\"{{url('add-order')}}\" class=\"btn btn-primary\">Tambah</a>\n        </h4>\n        <h6>Info : <code> Untuk Mengubah Status Order & Pembayaran Klik Pada Bagian 'Action' Masing-masing.</code></h6>\n        <div class=\"table-responsive m-t-0\">\n            <table id=\"myTable\" class=\"table display table-bordered table-striped\">\n                <thead>\n                    <tr>\n                        <th>#</th>\n                        <th>No Resi</th>\n                        <th>TGL Transaksi</th>\n                        <th>Customer</th>\n                        <th>Status Laundry</th>\n                        <th>Payment</th>\n                        <th>Jenis</th>\n                        <th>Total</th>\n                        <th>Action</th>\n                    </tr>\n                </thead>\n                <tbody>\n                  {{-- {{dd($order)}} --}}\n                    <?php $no=1; ?>\n                    @foreach ($order as $item)\n                    <tr>\n                        <td>{{$no}}</td>\n                        <td style=\"font-weight:bold; font-color:black\">{{$item->invoice}}</td>\n                        <td>{{carbon\\carbon::parse($item->tgl_transaksi)->format('d-m-y')}}</td>\n                        <td>{{$item->customer}}</td>\n                        <td>\n                            @if ($item->status_order == 'Done')\n                                <span class=\"label label-success\">Selesai</span>\n                            @elseif($item->status_order == 'Delivery')\n                                <span class=\"label label-primary\">Diambil</span>\n                            @elseif($item->status_order == 'Process')\n                                <span class=\"label label-info\">Diproses</span>\n                            @endif\n                        </td>\n                        <td>\n                            @if ($item->status_payment == 'Success')\n                                <span class=\"label label-success\">Lunas</span>\n                            @elseif($item->status_payment == 'Pending')\n                                <span class=\"label label-info\">Pending</span>\n                            @endif\n                        </td>\n                        <td>{{$item->price->jenis}}</td>\n                        <td>\n                            {{Rupiah::getRupiah($item->harga_akhir)}}\n                        </td>\n                        <td>\n                            @if ($item->status_payment == 'Pending')\n                            <a class=\"btn btn-sm btn-danger\" style=\"color:white\" data-id-update=\"{{$item->id}}\" id=\"updateStatus\">Bayar</a>\n                            <a href=\"{{url('invoice-kar', $item->id)}}\" class=\"btn btn-sm btn-warning\" style=\"color:white\">Invoice</a>\n                            @elseif($item->status_payment == 'Success')\n                              @if ($item->status_order == 'Process')\n                                <a class=\"btn btn-sm btn-info\" style=\"color:white\" data-id-update=\"{{$item->id}}\" id=\"updateStatus\">Selesai</a>\n                                <a href=\"{{url('invoice-kar', $item->id)}}\" class=\"btn btn-sm btn-warning\" style=\"color:white\">Invoice</a>\n                              @elseif($item->status_order == 'Done')\n                                <a class=\"btn btn-sm btn-info\" style=\"color:white\" data-id-update=\"{{$item->id}}\" id=\"updateStatus\">Diambil</a>\n                                <a href=\"{{url('invoice-kar', $item->id)}}\" class=\"btn btn-sm btn-warning\" style=\"color:white\">Invoice</a>\n                              @elseif($item->status_order == 'Delivery')\n                                <a href=\"{{url('invoice-kar', $item->id)}}\" class=\"btn btn-sm btn-warning\" style=\"color:white\">Invoice</a>\n                              @endif\n                            @endif\n                        </td>\n                    </tr>\n                    <?php $no++; ?>\n                    @endforeach\n                </tbody>\n            </table>\n        </div>\n    </div>\n</div>\n@endsection\n@section('scripts')\n<script type=\"text/javascript\">\n\n// Update Status Laundry\n$(document).on('click', '#updateStatus', function () {\n  var id = $(this).attr('data-id-update');\n  $.get('update-status-laundry', {'_token' : $('meta[name=csrf-token]').attr('content'),id:id}, function(_resp){\n    location.reload()\n  });\n});\n\n// DATATABLE\n$(document).ready(function() {\n    $('#myTable').DataTable();\n    $(document).ready(function() {\n        var table = $('#example').DataTable({\n            \"columnDefs\": [{\n                \"visible\": false,\n                \"targets\": 2\n            }],\n            \"order\": [\n                [2, 'asc']\n            ],\n            \"displayLength\": 25,\n            \"drawCallback\": function(settings) {\n                var api = this.api();\n                var rows = api.rows({\n                    page: 'current'\n                }).nodes();\n                var last = null;\n                api.column(2, {\n                    page: 'current'\n                }).data().each(function(group, i) {\n                    if (last !== group) {\n                        $(rows).eq(i).before('<tr class=\"group\"><td colspan=\"5\">' + group + '</td></tr>');\n                        last = group;\n                    }\n                });\n            }\n        });\n    });\n});\n</script>\n@endsection"
  },
  {
    "path": "resources/views/layouts/auth.blade.php",
    "content": "<!DOCTYPE html>\n<html class=\"loading\" lang=\"en\" data-textdirection=\"ltr\">\n<!-- BEGIN: Head-->\n\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=0, minimal-ui\">\n    <meta name=\"description\" content=\"E-Laundy aplikasi laundry berbasis website\">\n    <meta name=\"keywords\" content=\"E-Laundry,Laundry\">\n    <meta name=\"author\" content=\"Andri Desmana\">\n    <title>@yield('title')</title>\n    <link rel=\"apple-touch-icon\" href=\"{{asset('backend/images/ico/apple-icon-120.png')}}\">\n    <link rel=\"shortcut icon\" type=\"image/x-icon\" href=\"{{asset('backend/images/ico/favicon.ico')}}\">\n    <link href=\"https://fonts.googleapis.com/css?family=Montserrat:300,400,500,600\" rel=\"stylesheet\">\n\n    <!-- BEGIN: Vendor CSS-->\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"{{asset('backend/vendors/css/vendors.min.css')}}\">\n    <!-- END: Vendor CSS-->\n\n    <!-- BEGIN: Theme CSS-->\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"{{asset('backend/css/bootstrap.css')}}\">\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"{{asset('backend/css/bootstrap-extended.css')}}\">\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"{{asset('backend/css/colors.css')}}\">\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"{{asset('backend/css/components.css')}}\">\n    <!-- BEGIN: Page CSS-->\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"{{asset('backend/css/core/colors/palette-gradient.css')}}\">\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"{{asset('backend/css/pages/authentication.css')}}\">\n    <!-- END: Page CSS-->\n\n    <!-- BEGIN: Custom CSS-->\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"{{asset('backend/css/style.css')}}\">\n    <!-- END: Custom CSS-->\n\n</head>\n<!-- END: Head-->\n\n<!-- BEGIN: Body-->\n\n<body class=\"vertical-layout vertical-menu-modern 1-column  navbar-floating footer-static bg-full-screen-image  blank-page blank-page\" data-open=\"click\" data-menu=\"vertical-menu-modern\" data-col=\"1-column\">\n    <!-- BEGIN: Content-->\n    <div class=\"app-content content\">\n        <div class=\"content-overlay\"></div>\n        <div class=\"header-navbar-shadow\"></div>\n        <div class=\"content-wrapper\">\n            <div class=\"content-header row\">\n            </div>\n            <div class=\"content-body\">\n                @yield('content')\n            </div>\n        </div>\n    </div>\n    <!-- END: Content-->\n\n\n    <!-- BEGIN: Vendor JS-->\n    <script src=\"{{asset('backend/vendors/js/vendors.min.js')}}\"></script>\n    <!-- BEGIN Vendor JS-->\n\n    <!-- BEGIN: Page Vendor JS-->\n    <!-- END: Page Vendor JS-->\n\n    <!-- BEGIN: Theme JS-->\n    <script src=\"{{asset('backend/js/core/app-menu.js')}}\"></script>\n    <script src=\"{{asset('backend/js/core/app.js')}}\"></script>\n    <script src=\"{{asset('backend/js/scripts/components.js')}}\"></script>\n    <!-- END: Theme JS-->\n\n    <!-- BEGIN: Page JS-->\n    <!-- END: Page JS-->\n\n</body>\n<!-- END: Body-->\n\n</html>"
  },
  {
    "path": "resources/views/layouts/backend.blade.php",
    "content": "<!DOCTYPE html>\n<html class=\"loading\" lang=\"en\" data-textdirection=\"ltr\">\n<!-- BEGIN: Head-->\n\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=0, minimal-ui\">\n    <meta name=\"description\" content=\"E-Laundy aplikasi laundry berbasis website\">\n    <meta name=\"keywords\" content=\"E-Laundry,Laundry\">\n    <meta name=\"author\" content=\"Andri Desmana\">\n    <title>@yield('title')</title>\n    <link rel=\"apple-touch-icon\" href=\"{{asset('backend/images/ico/apple-icon-120.png')}}\">\n    <link rel=\"shortcut icon\" type=\"image/x-icon\" href=\"{{asset('backend/images/ico/favicon.ico')}}\">\n    <link href=\"https://fonts.googleapis.com/css?family=Montserrat:300,400,500,600\" rel=\"stylesheet\">\n\n    <!-- BEGIN: Vendor CSS-->\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"{{asset('backend/vendors/css/vendors.min.css')}}\">\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"{{asset('backend/vendors/css/extensions/tether.min.css')}}\">\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"{{asset('backend/vendors/css/extensions/shepherd-theme-default.css')}}\">\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"{{asset('backend/vendors/css/tables/datatable/datatables.min.css')}}\">\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"{{asset('backend/vendors/css/charts/apexcharts.css')}}\">\n    <!-- END: Vendor CSS-->\n\n    <!-- BEGIN: Theme CSS-->\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"{{asset('backend/css/bootstrap.css')}}\">\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"{{asset('backend/css/bootstrap-extended.css')}}\">\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"{{asset('backend/css/colors.css')}}\">\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"{{asset('backend/css/components.css')}}\">\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"{{asset('backend/css/themes/dark-layout.css')}}\">\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"{{asset('backend/css/themes/semi-dark-layout.css')}}\">\n\n    <!-- BEGIN: Page CSS-->\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"{{asset('backend/css/core/menu/menu-types/vertical-menu.css')}}\">\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"{{asset('backend/css/core/colors/palette-gradient.css')}}\">\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"{{asset('backend/css/pages/dashboard-analytics.css')}}\">\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"{{asset('backend/css/pages/page-knowledge-base.css')}}\">\n\n\n    <!-- END: Page CSS-->\n\n    <!-- BEGIN: Custom CSS-->\n    <!-- END: Custom CSS-->\n\n</head>\n<!-- END: Head-->\n\n<!-- BEGIN: Body-->\n\n<body class=\"vertical-layout vertical-menu-modern  {{Auth::user()->theme == 1 ? 'dark-layout' : ''}} content-left-sidebar chat-application navbar-floating footer-static  \" data-open=\"click\" data-menu=\"vertical-menu-modern\" data-col=\"content-left-sidebar\" data-layout=\"dark-layout\">\n\n    <!-- BEGIN: Header-->\n    <nav class=\"header-navbar navbar-expand-lg navbar navbar-with-menu floating-nav navbar-light navbar-shadow\">\n        <div class=\"navbar-wrapper\">\n            <div class=\"navbar-container content\">\n                <div class=\"navbar-collapse\" id=\"navbar-mobile\">\n                    <div class=\"mr-auto float-left bookmark-wrapper d-flex align-items-center\">\n                        <ul class=\"nav navbar-nav\">\n                            <li class=\"nav-item mobile-menu d-xl-none mr-auto\"><a class=\"nav-link nav-menu-main menu-toggle hidden-xs\" href=\"#\"><i class=\"ficon feather icon-menu\"></i></a></li>\n                        </ul>\n                    </div>\n                    <ul class=\"nav navbar-nav float-right\">\n                        <li class=\"dropdown dropdown-notification nav-item\"><a class=\"nav-link nav-link-label\" href=\"#\" data-toggle=\"dropdown\"><i class=\"ficon feather icon-bell\"></i><span class=\"badge badge-pill badge-primary badge-up\">{{count(getNotifikasi(Auth::id()))}}</span></a>\n                            <ul class=\"dropdown-menu dropdown-menu-media dropdown-menu-right\">\n                                <li class=\"dropdown-menu-header\">\n                                    <div class=\"dropdown-header m-0 p-2\">\n                                        <h3 class=\"white\"></h3><span class=\"notification-title\">Notifications</span>\n                                    </div>\n                                </li>\n                                <li class=\"scrollable-container media-list\">\n                                    @forelse (getNotifikasi(Auth::id()) as $notifikasis)\n                                        <a data-id-notif=\"{{$notifikasis->id}}\" id=\"readNotif\">\n                                            <div class=\"media d-flex align-items-start\">\n                                                <div class=\"media-body\">\n                                                    <p class=\"media-heading\"><span class=\"font-weight-bolder\">{{$notifikasis->title}} 🎉</span></p><small class=\"notification-text\"> {{$notifikasis->body}}.</small>\n                                                </div>\n                                            </div>\n                                        </a>\n                                    @empty\n                                        <div class=\"media d-flex align-items-start\">\n                                            <div class=\"media-body\">\n                                                <p class=\"media-heading\"><span class=\"font-weight-bolder\">Belum ada Notifikasi disini.</span></p>\n                                                <small class=\"notification-text\"> Notifikasi akan muncul disini ketika sudah tersedia.</small>\n                                            </div>\n                                        </div>\n                                    @endforelse\n                                </li>\n                            </ul>\n                        </li>\n                        <li class=\"dropdown dropdown-user nav-item\">\n                          <a class=\"dropdown-toggle nav-link dropdown-user-link\" href=\"#\" data-toggle=\"dropdown\">\n                            <div class=\"user-nav d-sm-flex d-none\">\n                              <span class=\"user-name text-bold-600\">{{auth::user()->name}}</span>\n                              <span class=\"user-status\">{{auth::user()->auth}}</span>\n                            </div>\n                            <span>\n                              <img class=\"round\" src=\"{{asset(Auth::user()->foto == null ? 'backend/images/profile/user.jpg' : 'storage/images/foto_profile/'. Auth::user()->foto )}}\" alt=\"avatar\" height=\"40\" width=\"40\">\n                            </span>\n                          </a>\n                          <div class=\"dropdown-menu dropdown-menu-right\">\n                            @if (auth::user()->auth == 'Admin')\n                              <a class=\"dropdown-item\" href=\"{{url('profile-admin', auth::user()->id )}}\"><i class=\"feather icon-user\"></i>Profile\n                              </a>\n                            @elseif(auth::user()->auth == 'Karyawan')\n                              <a class=\"dropdown-item\" href=\"{{url('profile-karyawan', auth::user()->id )}}\"><i class=\"feather icon-user\"></i>Profile\n                              </a>\n                              <a class=\"dropdown-item\" href=\"{{url('karyawan-setting' )}}\"><i class=\"feather icon-settings\"></i>Settings\n                              </a>\n                            @elseif(auth::user()->auth == 'Customer')\n                              <a class=\"dropdown-item\" href=\" {{url('me')}} \"><i class=\"feather icon-user\"></i>Profile\n                              </a>\n                              <a class=\"dropdown-item\" href=\"{{Route('customer.setting')}}\"><i class=\"feather icon-settings\"></i>Settings\n                              </a>\n                            @endif\n                            <div class=\"dropdown-divider\"></div>\n                            <a href=\"{{ route('logout') }}\" class=\"dropdown-item\"\n                                onclick=\"event.preventDefault();\n                                document.getElementById('logout-form').submit();\" data-toggle=\"tooltip\" title=\"Logout\">\n                                <i class=\"feather icon-power\"></i>\n                                Logout\n                            </a>\n                            <form id=\"logout-form\" action=\"{{ route('logout') }}\" method=\"POST\" style=\"display: none;\">\n                                @csrf\n                            </form>\n                          </div>\n                        </li>\n                    </ul>\n                </div>\n            </div>\n        </div>\n    </nav>\n    <!-- END: Header-->\n\n\n    <!-- BEGIN: Main Menu-->\n    <div class=\"main-menu menu-fixed menu-light menu-accordion menu-shadow\" data-scroll-to-active=\"true\">\n        <div class=\"navbar-header\">\n            <ul class=\"nav navbar-nav flex-row\">\n                <li class=\"nav-item mr-auto\"><a class=\"navbar-brand\" href=\"{{url('home')}}\">\n                        <div class=\"brand-logo\"></div>\n                        <h2 class=\"brand-text mb-0\">Laundry</h2>\n                    </a></li>\n                <li class=\"nav-item nav-toggle\"><a class=\"nav-link modern-nav-toggle pr-0\" data-toggle=\"collapse\"><i class=\"feather icon-x d-block d-xl-none font-medium-4 primary toggle-icon\"></i><i class=\"toggle-icon feather icon-disc font-medium-4 d-none d-xl-block collapse-toggle-icon primary\" data-ticon=\"icon-disc\"></i></a></li>\n            </ul>\n        </div>\n        <div class=\"shadow-bottom\"></div>\n        <div class=\"main-menu-content\">\n            <ul class=\"navigation navigation-main\" id=\"main-menu-navigation\" data-menu=\"menu-navigation\">\n                <li class=\"nav-item {{ (request()->is('home')) ? 'active' : '' }}\"><a href=\"{{url('home')}}\"><i class=\"feather icon-home\"></i><span class=\"menu-title\" data-i18n=\"Dashboard\">Dashboard</span></a>\n                </li>\n\n                {{-- Menu Admin --}}\n                    @if (auth::user()->auth == \"Admin\")\n                        <li class=\" nav-item\"><a href=\"#\"><i class=\"feather icon-users\"></i><span class=\"menu-title\" data-i18n=\"User\">Data User</span></a>\n                            <ul class=\"menu-content\">\n                              <li class=\"nav-item {{ (request()->is('karyawan')) ? 'active' : '' }}\">\n                                <a href=\"{{route('karyawan.index')}}\"><i class=\"feather icon-circle\"></i><span class=\"menu-item\" data-i18n=\"View\">Karyawan</span></a>\n                              </li>\n                              <li class=\"nav-item {{ (request()->is('customer')) ? 'active' : '' }}\">\n                                <a href=\"{{url('customer')}}\"><i class=\"feather icon-circle\"></i><span class=\"menu-item\" data-i18n=\"List\">Customer</span></a>\n                              </li>\n                            </ul>\n                        </li>\n\n                        <li class=\"nav-item {{ (request()->is('transaksi')) ? 'active' : '' }}\">\n                          <a href=\"{{route('transaksi.index')}}\"><i class=\"feather icon-shopping-cart\"></i><span class=\"menu-item\" data-i18n=\"List\">Transaksi</span></a>\n                        </li>\n\n\n                        <li class=\" nav-item\"><a href=\"#\"><i class=\"feather icon-credit-card\"></i><span class=\"menu-title\" data-i18n=\"User\">Data Finance</span></a>\n                          <ul class=\"menu-content\">\n                            <li class=\"nav-item {{ (request()->is('finance')) ? 'active' : '' }}\">\n                              <a href=\"{{route('finance.index')}}\"><i class=\"feather icon-circle\"></i><span class=\"menu-item\" data-i18n=\"List\">Finance</span></a>\n                            </li>\n                            <li class=\"nav-item {{ (request()->is('data-harga')) ? 'active' : '' }}\">\n                              <a href=\"{{url('data-harga')}}\"><i class=\"feather icon-circle\"></i><span class=\"menu-item\" data-i18n=\"List\">Harga Laundry</span></a>\n                            </li>\n                          </ul>\n                        </li>\n\n                        <li class=\" nav-item\"><a href=\"#\"><i class=\"feather icon-settings\"></i><span class=\"menu-title\" data-i18n=\"User\">Other</span></a>\n                          <ul class=\"menu-content\">\n                            <li class=\"nav-item {{ (request()->is('settings')) ? 'active' : '' }}\">\n                              <a href=\"{{url('settings')}}\"><i class=\"feather icon-circle\"></i><span class=\"menu-item\" data-i18n=\"List\">Setting</span></a>\n                            </li>\n                          </ul>\n                        </li>\n\n                        <li class=\"nav-item {{ (request()->is('dokumentasi')) ? 'active' : '' }}\">\n                          <a href=\"{{url('dokumentasi')}}\"><i class=\"feather icon-folder\"></i><span class=\"menu-item\" data-i18n=\"List\">Dokumentasi</span></a>\n                        </li>\n                    {{-- End Menu Admin --}}\n\n                    {{-- Menu Karyawan --}}\n                    @elseif(auth::user()->auth == \"Karyawan\")\n                      <li class=\" nav-item\"><a href=\"#\"><i class=\"feather icon-layers\"></i><span class=\"menu-title\" data-i18n=\"User\">Data Transaksi</span></a>\n                          <ul class=\"menu-content\">\n                              <li class=\"nav-item {{ (request()->is('pelayanan')) ? 'active' : '' }}\">\n                                <a href=\"{{route('pelayanan.index')}}\"><i class=\"feather icon-circle\"></i><span class=\"menu-item\" data-i18n=\"List\">Order Masuk</span></a>\n                              </li>\n                              <li class=\"nav-item {{ (request()->is('add-order')) ? 'active' : '' }}\">\n                                <a href=\"{{url('add-order')}}\"><i class=\"feather icon-circle\"></i><span class=\"menu-item\" data-i18n=\"List\">Tambah Order</span></a>\n                              </li>\n                              <li class=\"nav-item {{ (request()->is('customers')) ? 'active' : '' }}\">\n                                <a href=\"{{url('customers')}}\"><i class=\"feather icon-circle\"></i><span class=\"menu-item\" data-i18n=\"List\">Data Customer</span></a>\n                              </li>\n                          </ul>\n                      </li>\n                      <li class=\"nav-item\"><a href=\"{{url('/laporan')}}\"><i class=\"feather icon-file-text\"></i><span class=\"menu-title\" data-i18n=\"Dashboard\">Laporan</span></a>\n                      </li>\n                      <li class=\"nav-item\"><a href=\"{{url('/')}}\" target=\"_blank\"><i class=\"feather icon-square\"></i><span class=\"menu-title\" data-i18n=\"Dashboard\">Frontend</span></a>\n                      </li>\n\n                    {{-- Menu Customer --}}\n                    @elseif(Auth::user()->auth == 'Customer')\n\n                      <li class=\"nav-item\"><a href=\"{{url('/')}}\" target=\"_blank\"><i class=\"feather icon-square\"></i><span class=\"menu-title\" data-i18n=\"Dashboard\">Frontend</span></a>\n                      </li>\n                    @endif\n                {{--End  --}}\n            </ul>\n        </div>\n    </div>\n    <!-- END: Main Menu-->\n\n    <!-- BEGIN: Content-->\n    <div class=\"app-content content\">\n        <div class=\"content-overlay\"></div>\n        <div class=\"header-navbar-shadow\"></div>\n        <div class=\"content-wrapper\">\n            <div class=\"content-header row\">\n            </div>\n            <div class=\"content-body\">\n                @yield('content')\n                @include('sweetalert::alert')\n            </div>\n\n        </div>\n    </div>\n    <!-- END: Content-->\n\n    <div class=\"sidenav-overlay\"></div>\n    <div class=\"drag-target\"></div>\n\n    <!-- BEGIN: Footer-->\n    <footer class=\"footer footer-static footer-light\">\n        <p class=\"clearfix blue-grey lighten-2 mb-0\"><span class=\"float-md-left d-block d-md-inline-block mt-25\">COPYRIGHT &copy; 2020 - {{date('Y')}}<a class=\"text-bold-800 grey darken-2\" href=\"https://andridesmana.space\" target=\"_blank\">Andri Desmana,</a>All rights Reserved</span><span class=\"float-md-right d-none d-md-block\">Build With <i class=\"feather icon-heart pink\"></i></span>\n            <button class=\"btn btn-primary btn-icon scroll-top\" type=\"button\"><i class=\"feather icon-arrow-up\"></i></button>\n        </p>\n    </footer>\n    <!-- END: Footer-->\n\n\n    <!-- BEGIN: Vendor JS-->\n    <script src=\"{{asset('backend/vendors/js/vendors.js')}}\"></script>\n    <!-- BEGIN Vendor JS-->\n\n    <!-- BEGIN: Page Vendor JS-->\n    <script src=\"{{asset('backend/vendors/js/charts/apexcharts.min.js')}}\"></script>\n    <script src=\"{{asset('backend/vendors/js/extensions/tether.min.js')}}\"></script>\n    <script src=\"{{asset('backend/vendors/js/extensions/shepherd.min.js')}}\"></script>\n    <script src=\"{{asset('backend/vendors/js/tables/datatable/pdfmake.min.js')}}\"></script>\n    <script src=\"{{asset('backend/vendors/js/tables/datatable/vfs_fonts.js')}}\"></script>\n    <script src=\"{{asset('backend/vendors/js/tables/datatable/datatables.min.js')}}\"></script>\n    <script src=\"{{asset('backend/vendors/js/tables/datatable/datatables.buttons.min.js')}}\"></script>\n    <script src=\"{{asset('backend/vendors/js/tables/datatable/buttons.html5.min.js')}}\"></script>\n    <script src=\"{{asset('backend/vendors/js/tables/datatable/buttons.print.min.js')}}\"></script>\n    <script src=\"{{asset('backend/vendors/js/tables/datatable/buttons.bootstrap.min.js')}}\"></script>\n    <script src=\"{{asset('backend/vendors/js/tables/datatable/datatables.bootstrap4.min.js')}}\"></script>\n    <!-- END: Page Vendor JS-->\n\n    <!-- BEGIN: Theme JS-->\n    <script src=\"{{asset('backend/js/core/app-menu.js')}}\"></script>\n    <script src=\"{{asset('backend/js/core/app.js')}}\"></script>\n    <script src=\"{{asset('backend/js/scripts/components.js')}}\"></script>\n    <!-- END: Theme JS-->\n\n    <!-- BEGIN: Page JS-->\n    <script src=\"{{asset('backend/js/scripts/datatables/datatable.js')}}\"></script>\n    <script src=\"https://cdnjs.cloudflare.com/ajax/libs/autonumeric/1.9.46/autoNumeric.js\"></script>\n    <script src=\"{{asset('backend/js/scripts/pages/page-knowledge-base.js')}}\"></script>\n    <!-- END: Page JS-->\n\n    <script type=\"text/javascript\">\n        // Read Notifikasi\n        $(document).on('click', '#readNotif', function () {\n            var id = $(this).attr('data-id-notif');\n            $.get('read-notifikasi', {'_token' : $('meta[name=csrf-token]').attr('content'),id:id}, function(_resp){\n                location.reload()\n            });\n        });\n    </script>\n    @yield('scripts')\n</body>\n<!-- END: Body-->\n\n</html>\n"
  },
  {
    "path": "resources/views/layouts/error.blade.php",
    "content": "<!DOCTYPE html>\n<html class=\"loading\" lang=\"en\" data-textdirection=\"ltr\">\n<!-- BEGIN: Head-->\n\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=0, minimal-ui\">\n    <meta name=\"description\" content=\"E-Laundy aplikasi laundry berbasis website\">\n    <meta name=\"keywords\" content=\"E-Laundry,Laundry\">\n    <meta name=\"author\" content=\"Andri Desmana\">\n    <title>@yield('title')</title>\n    <link rel=\"apple-touch-icon\" href=\"../../../app-assets/images/ico/apple-icon-120.png\">\n    <link rel=\"shortcut icon\" type=\"image/x-icon\" href=\"../../../app-assets/images/ico/favicon.ico\">\n    <link href=\"https://fonts.googleapis.com/css?family=Montserrat:300,400,500,600\" rel=\"stylesheet\">\n\n    <!-- BEGIN: Vendor CSS-->\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"{{asset('backend/vendors/css/vendors.min.css')}}\">\n    <!-- END: Vendor CSS-->\n\n    <!-- BEGIN: Theme CSS-->\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"{{asset('backend/css/bootstrap.css')}}\">\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"{{asset('backend/css/bootstrap-extended.css')}}\">\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"{{asset('backend/css/colors.css')}}\">\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"{{asset('backend/css/components.css')}}\">\n    <!-- BEGIN: Page CSS-->\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"{{asset('backend/css/core/menu/menu-types/vertical-menu.css')}}\">\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"{{asset('backend/css/core/colors/palette-gradient.css')}}\">\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"{{asset('backend/css/pages/error.css')}}\">\n    <!-- END: Page CSS-->\n\n    <!-- BEGIN: Custom CSS-->\n    <!-- END: Custom CSS-->\n\n</head>\n<!-- END: Head-->\n\n<!-- BEGIN: Body-->\n\n<body class=\"vertical-layout vertical-menu-modern 1-column  navbar-floating footer-static bg-full-screen-image  blank-page blank-page\" data-open=\"click\" data-menu=\"vertical-menu-modern\" data-col=\"1-column\">\n    <!-- BEGIN: Content-->\n    <div class=\"app-content content\">\n        <div class=\"content-overlay\"></div>\n        <div class=\"header-navbar-shadow\"></div>\n        <div class=\"content-wrapper\">\n            <div class=\"content-header row\">\n            </div>\n            <div class=\"content-body\">\n                <!-- error -->\n                @yield('content')\n                <!-- error end -->\n\n            </div>\n        </div>\n    </div>\n    <!-- END: Content-->\n\n\n    <!-- BEGIN: Vendor JS-->\n    <script src=\"{{asset('backend/vendors/js/vendors.min.js')}}\"></script>\n    <!-- BEGIN Vendor JS-->\n\n    <!-- BEGIN: Page Vendor JS-->\n    <!-- END: Page Vendor JS-->\n\n    <!-- BEGIN: Theme JS-->\n    <script src=\"{{asset('backend/js/core/app-menu.js')}}\"></script>\n    <script src=\"{{asset('backend/js/core/app.js')}}\"></script>\n    <script src=\"{{asset('backend/js/scripts/components.js')}}\"></script>\n    <!-- END: Theme JS-->\n\n    <!-- BEGIN: Page JS-->\n    <!-- END: Page JS-->\n\n</body>\n<!-- END: Body-->\n\n</html>"
  },
  {
    "path": "resources/views/layouts/frontend.blade.php",
    "content": "<!DOCTYPE html>\n<!--[if IE 8]> <html lang=\"en\" class=\"ie8\"> <![endif]-->\n<!--[if !IE]><!-->\n<html lang=\"en\">\n<!--<![endif]-->\n<head>\n\t<meta charset=\"utf-8\" />\n\t<title>@yield('title')</title>\n\t<meta content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no\" name=\"viewport\" />\n  <meta name=\"description\" content=\"E-Laundy aplikasi laundry berbasis website\">\n  <meta name=\"keywords\" content=\"E-Laundry,Laundry\">\n  <meta name=\"author\" content=\"Andri Desmana\">\n\n\t<!-- ================== BEGIN BASE CSS STYLE ================== -->\n\t<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">\n    <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>\n    <link href=\"https://fonts.googleapis.com/css2?family=Open+Sans:wght@300;400;600&display=swap\" rel=\"stylesheet\">\n\t<link href=\"{{asset('frontend/plugins/bootstrap3/css/bootstrap.min.css')}}\" rel=\"stylesheet\" />\n\t<link href=\"{{asset('frontend/plugins/font-awesome/css/font-awesome.min.css')}}\" rel=\"stylesheet\" />\n\t<link href=\"{{asset('frontend/plugins/animate/animate.min.css')}}\" rel=\"stylesheet\" />\n\t<link href=\"{{asset('frontend/css/forum/style.css')}}\" rel=\"stylesheet\" />\n\t<link href=\"{{asset('frontend/css/forum/style-responsive.min.css')}}\" rel=\"stylesheet\" />\n\t<link href=\"{{asset('frontend/css/forum/theme/default.css')}}\" id=\"theme\" rel=\"stylesheet\" />\n\t<!-- ================== END BASE CSS STYLE ================== -->\n\n\t<!-- ================== BEGIN BASE JS ================== -->\n    <script src=\"{{asset('frontend/plugins/pace/pace.min.js')}}\"></script>\n\n    <!-- ================== END BASE JS ================== -->\n    <style type=\"text/css\">\n        body {\n            overflow-x: hidden;\n        }\n    </style>\n</head>\n<body>\n    <!-- begin #header -->\n    @yield('header')\n    <!-- end #header -->\n\n    <!-- begin search-banner -->\n    <div class=\"search-banner has-bg\">\n       @yield('banner')\n    </div>\n    <!-- end search-banner -->\n\n    <!-- begin content -->\n    <div class=\"content\">\n        <!-- begin container -->\n        <div class=\"container-fluid\">\n          <div id=\"app\">\n            @yield('content')\n          </div>\n        </div>\n        <!-- end container -->\n    </div>\n    <!-- end content -->\n\n    <!-- begin #footer -->\n    @yield('footer')\n    <!-- end #footer -->\n\n    <!-- begin #footer-copyright -->\n    <div class=\"footer-copyright\">\n        <div class=\"container\">\n            &copy; <?php echo date(\"Y\") ?> Build With <i class=\"fa fa-heart\" style=\"color:red\"></i> - <a href=\"https://www.andridesmana.space\" target=\"_blank\" style=\"text-decoration:none\">Andri Desmana</a>\n        </div>\n    </div>\n    <!-- end #footer-copyright -->\n\t<!-- ================== BEGIN BASE JS ================== -->\n  <script src=\"{{ asset('js/app.js') }}\" ></script>\n\t<script src=\"{{asset('frontend/plugins/jquery/jquery-3.2.1.min.js')}}\"></script>\n\t<script src=\"{{asset('frontend/plugins/bootstrap3/js/bootstrap.min.js')}}\"></script>\n\t<script src=\"{{asset('frontend/plugins/js-cookie/js.cookie.js')}}\"></script>\n    <script src=\"{{asset('frontend/js/forum/apps.min.js')}}\"></script>\n    <script src=\"{{asset('frontend/js/swal/sweetalert2.all.min.js')}}\"></script>\n\t<!-- ================== END BASE JS ================== -->\n\n\t<script>\n\t    $(document).ready(function() {\n\t        App.init();\n\t    });\n    </script>\n    @yield('scripts')\n</body>\n</html>\n"
  },
  {
    "path": "resources/views/modul_admin/customer/index.blade.php",
    "content": "@extends('layouts.backend')\n@section('title','Admin - Data Customer')\n@section('header','Data Customer')\n@section('content')\n<div class=\"row\">\n    <div class=\"col-lg-12\">\n        <div class=\"card\">\n            <div class=\"card-body\">\n                <h4 class=\"card-title\"> Data Customer\n                    {{-- <a href=\"{{url('customer-add')}}\" class=\"btn btn-primary\">Tambah</a> --}}\n                </h4>\n\n                <div class=\"table-responsive m-t-0\">\n                    <table id=\"myTable\" class=\"table display table-bordered table-striped\">\n                        <thead>\n                            <tr>\n                                <th>#</th>\n                                <th>Nama</th>\n                                <th>Alamat</th>\n                                <th>No Telpon</th>\n                                <th>Kelamin</th>\n                                <th>Action</th>\n                            </tr>\n                        </thead>\n                        <tbody>\n                            <?php $no=1; ?>\n                            @foreach ($customer as $item)\n                            <tr>\n                                <td>{{$no}}</td>\n                                <td>{{$item->name}}</td>\n                                <td>{{$item->alamat}}</td>\n                                <td>{{$item->no_telp}}</td>\n                                <td>\n                                    @if ($item->kelamin == 'L')\n                                        <span class=\"label label-success\">Laki-laki</span>\n                                    @else\n                                        <span class=\"label label-info\">Perempuan</span>\n                                    @endif\n                                </td>\n                                <td>\n                                  <a href=\"{{route('customer.show', $item->id)}}\" class=\"btn btn-info btn-sm\">Info</a>\n                                </td>\n                            </tr>\n                            <?php $no++; ?>\n                            @endforeach\n                        </tbody>\n                    </table>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n@endsection\n@section('scripts')\n\n<script type=\"text/javascript\">\n    $(document).ready(function() {\n        $('#myTable').DataTable();\n        $(document).ready(function() {\n            var table = $('#example').DataTable({\n                \"columnDefs\": [{\n                    \"visible\": false,\n                    \"targets\": 2\n                }],\n                \"order\": [\n                    [2, 'asc']\n                ],\n                \"displayLength\": 25,\n                \"drawCallback\": function(settings) {\n                    var api = this.api();\n                    var rows = api.rows({\n                        page: 'current'\n                    }).nodes();\n                    var last = null;\n                    api.column(2, {\n                        page: 'current'\n                    }).data().each(function(group, i) {\n                        if (last !== group) {\n                            $(rows).eq(i).before('<tr class=\"group\"><td colspan=\"5\">' + group + '</td></tr>');\n                            last = group;\n                        }\n                    });\n                }\n            });\n            // Order by the grouping\n            $('#example tbody').on('click', 'tr.group', function() {\n                var currentOrder = table.order()[0];\n                if (currentOrder[0] === 2 && currentOrder[1] === 'asc') {\n                    table.order([2, 'desc']).draw();\n                } else {\n                    table.order([2, 'asc']).draw();\n                }\n            });\n        });\n    });\n    $('#example23').DataTable({\n        dom: 'Bfrtip',\n        buttons: [\n            'copy', 'csv', 'excel', 'pdf', 'print'\n        ]\n    });\n</script>\n@endsection"
  },
  {
    "path": "resources/views/modul_admin/customer/infoCustomer.blade.php",
    "content": "@extends('layouts.backend')\n@section('title','Admin - Detail Data Customer')\n@section('header','Detail Data Customer')\n@section('content')\n<div class=\"row\">\n  <div class=\"col-sm-12 col-md-12\">\n    <div class=\"card\">\n        <div class=\"card-header\">\n            <h4 class=\"card-title\">Detail Data Customer</h4>\n        </div>\n        <div class=\"card-content\">\n            <div class=\"row\">\n              <div class=\"card-body\">\n                <div class=\"card-text\">\n                    <dl class=\"row\">\n                        <dt class=\"col-sm-4\">Nama Customer</dt>\n                        <dd class=\"col-sm-4\">: {{$customer->name}}</dd>\n                    </dl>\n\n                    <dl class=\"row\">\n                        <dt class=\"col-sm-4\">Email Customer</dt>\n                        <dd class=\"col-sm-4\">: {{$customer->email}}</dd>\n                    </dl>\n\n                    <dl class=\"row\">\n                        <dt class=\"col-sm-4\">No. Telepon</dt>\n                        <dd class=\"col-sm-4\">: {{$customer->no_telp == 0 ? 'Belum Input' : $customer->no_telp}}</dd>\n                    </dl>\n\n                    <dl class=\"row\">\n                        <dt class=\"col-sm-4\">Alamat Customer</dt>\n                        <dd class=\"col-sm-4\">: {{$customer->alamat}}</dd>\n                    </dl>\n\n                    <dl class=\"row\">\n                        <dt class=\"col-sm-4\">Kelamin Customer</dt>\n                        <dd class=\"col-sm-4\">: {{$customer->kelamin == 'L' ? 'Laki-laki' : 'Perempuan'}}</dd>\n                    </dl>\n\n                </div>\n            </div>\n            <div class=\"card-body\">\n                <div class=\"card-text\">\n                    <dl class=\"row\">\n                        <dt class=\"col-sm-4\">Total Kg</dt>\n                        <dd class=\"col-sm-4\">: {{$customer->transaksiCustomer()->sum('kg') ?? ''}} Kg</dd>\n                    </dl>\n\n                    <dl class=\"row\">\n                        <dt class=\"col-sm-4\">Total Rupiah</dt>\n                        <dd class=\"col-sm-4\">: {{Rupiah::getRupiah($customer->transaksiCustomer()->sum('harga_akhir')) ?? ''}}</dd>\n                    </dl>\n\n                    <dl class=\"row\">\n                        <dt class=\"col-sm-4\">Total Laundry</dt>\n                        <dd class=\"col-sm-4\">: {{$customer->transaksiCustomer()->count() ?? ''}} Kali</dd>\n                    </dl>\n\n                    <dl class=\"row\">\n                        <dt class=\"col-sm-4\">Laundry Terakhir</dt>\n                        <dd class=\"col-sm-4\">: {{$customer->transaksiCustomer[0]['created_at'] ?? '-'}}</dd>\n                    </dl>\n                    <dl class=\"row\">\n                        <dt class=\"col-sm-4\">Pendaftaran Akun</dt>\n                        <dd class=\"col-sm-4\">: {{$customer->created_at}}</dd>\n                    </dl>\n                </div>\n            </div>\n            </div>\n        </div>\n    </div>\n  </div>\n\n  <div class=\"col-sm-12 col-md-12\">\n    <div class=\"card\">\n        <div class=\"card-header\">\n            <h4 class=\"card-title\">Detail Transaksi Customer</h4>\n        </div>\n        <div class=\"card-content\">\n            <div class=\"card-body\">\n                <div class=\"table-responsive m-t-0\">\n                    <table id=\"myTable\" class=\"table display table-bordered table-striped\">\n                        <thead>\n                            <tr>\n                                <th>#</th>\n                                <th>Invoice</th>\n                                <th>Tgl Transaksi</th>\n                                <th>Tgl Diambil</th>\n                                <th>Jumlah KG</th>\n                                <th>Jenis Pembayaran</th>\n                                <th>Status Transaksi</th>\n                                <th>Total Harga</th>\n                            </tr>\n                        </thead>\n                        <tbody>\n                          @foreach ($customer->transaksiCustomer as $key => $item)\n                          <tr>\n                              <td>{{$key+1}}</td>\n                              <td>{{$item->invoice}}</td>\n                              <td>{{$item->tgl_transaksi}}</td>\n                              <td>{{$item->tgl_ambil ?? 'Belum Diambil'}}</td>\n                              <td>{{$item->kg}} kg</td>\n                              <td>{{$item->jenis_pembayaran}}</td>\n                              <td>{{$item->status_order}}</td>\n                              <td>{{Rupiah::getRupiah($item->harga_akhir)}}</td>\n\n                          </tr>\n                          @endforeach\n                        </tbody>\n                    </table>\n                </div>\n            </div>\n        </div>\n    </div>\n  </div>\n</div>\n@endsection\n@section('scripts')\n\n<script type=\"text/javascript\">\n    $(document).ready(function() {\n        $('#myTable').DataTable();\n        $(document).ready(function() {\n            var table = $('#example').DataTable({\n                \"columnDefs\": [{\n                    \"visible\": false,\n                    \"targets\": 2\n                }],\n                \"order\": [\n                    [2, 'asc']\n                ],\n                \"displayLength\": 25,\n                \"drawCallback\": function(settings) {\n                    var api = this.api();\n                    var rows = api.rows({\n                        page: 'current'\n                    }).nodes();\n                    var last = null;\n                    api.column(2, {\n                        page: 'current'\n                    }).data().each(function(group, i) {\n                        if (last !== group) {\n                            $(rows).eq(i).before('<tr class=\"group\"><td colspan=\"5\">' + group + '</td></tr>');\n                            last = group;\n                        }\n                    });\n                }\n            });\n            // Order by the grouping\n            $('#example tbody').on('click', 'tr.group', function() {\n                var currentOrder = table.order()[0];\n                if (currentOrder[0] === 2 && currentOrder[1] === 'asc') {\n                    table.order([2, 'desc']).draw();\n                } else {\n                    table.order([2, 'asc']).draw();\n                }\n            });\n        });\n    });\n    $('#example23').DataTable({\n        dom: 'Bfrtip',\n        buttons: [\n            'copy', 'csv', 'excel', 'pdf', 'print'\n        ]\n    });\n</script>\n@endsection"
  },
  {
    "path": "resources/views/modul_admin/customer/jmltransaksi.blade.php",
    "content": "@extends('layouts.backend')\n@section('title','Admin - Transaksi Customer')\n@section('header','Transaksi Customer')\n@section('content')\n<div style=\"display : none\">\n    {{$total = 0}}\n</div>\n<div class=\"col-lg-12\">\n    <div class=\"card\">\n        <div class=\"card-body\">\n            <div class=\"table-responsive m-t-0\">\n                <table id=\"myTable\" class=\"table display table-bordered table-striped\">\n                    <thead>\n                        <tr>\n                            <th>#</th>\n                            <th>Nama</th>\n                            <th>Alamat</th>\n                            <th>No Telpon</th>\n                            <th>Transaksi</th>\n                            <th>Action</th>\n                        </tr>\n                    </thead>\n                    <tbody>\n                        \n                        <?php $no=1; ?>\n                        @foreach ($jml as $item)\n                        <tr>\n                            <td>{{$no}}</td>\n                            <td>{{$item->nama}}</td>\n                            <td>{{$item->alamat}}</td>\n                            <td>{{$item->no_telp}}</td>\n                            <td>\n                               {{$item->sum('kg')}}\n                            </td>\n                            <td></td>\n                        </tr>\n                        <?php $no++; ?>\n                        @endforeach\n                    </tbody>\n                </table>\n            </div>\n        </div>\n    </div>\n</div>\n@endsection\n@section('scripts')\n\n<script type=\"text/javascript\">\n    $(document).ready(function() {\n        $('#myTable').DataTable();\n        $(document).ready(function() {\n            var table = $('#example').DataTable({\n                \"columnDefs\": [{\n                    \"visible\": false,\n                    \"targets\": 2\n                }],\n                \"order\": [\n                    [2, 'asc']\n                ],\n                \"displayLength\": 25,\n                \"drawCallback\": function(settings) {\n                    var api = this.api();\n                    var rows = api.rows({\n                        page: 'current'\n                    }).nodes();\n                    var last = null;\n                    api.column(2, {\n                        page: 'current'\n                    }).data().each(function(group, i) {\n                        if (last !== group) {\n                            $(rows).eq(i).before('<tr class=\"group\"><td colspan=\"5\">' + group + '</td></tr>');\n                            last = group;\n                        }\n                    });\n                }\n            });\n            // Order by the grouping\n            $('#example tbody').on('click', 'tr.group', function() {\n                var currentOrder = table.order()[0];\n                if (currentOrder[0] === 2 && currentOrder[1] === 'asc') {\n                    table.order([2, 'desc']).draw();\n                } else {\n                    table.order([2, 'asc']).draw();\n                }\n            });\n        });\n    });\n    $('#example23').DataTable({\n        dom: 'Bfrtip',\n        buttons: [\n            'copy', 'csv', 'excel', 'pdf', 'print'\n        ]\n    });\n</script>\n@endsection"
  },
  {
    "path": "resources/views/modul_admin/doc/index.blade.php",
    "content": "@extends('layouts.backend')\n@section('title','Dokumentasi Aplikasi Laundry')\n@section('content')\n\n  <section id=\"knowledge-base-search\">\n      <div class=\"row\">\n          <div class=\"col-12\">\n              <div class=\"card knowledge-base-bg text-center\" style=\"background-image: url({{asset('backend/images/pages/banner.png')}}\">\n                  <div class=\"card-body\">\n                      <h2 class=\"text-primary\">Dokumentasi Penggunaan Aplikasi Laundry</h2>\n                      <p class=\"card-text mb-2\">\n                          <span>Halo, halaman ini digunakan untuk keperluan dokumentasi penggunaan pada pada aplikasi Laundry. Dokumentasi ini dibuat untuk mempermudah teman-teman dalam penggunaan aplikasi Laundry.</span>\n                      </p>\n                  </div>\n              </div>\n          </div>\n      </div>\n  </section>\n\n\n  <!-- Dokumentasi -->\n  <section id=\"knowledge-base-content\">\n    <div class=\"row kb-search-content-info match-height\">\n      <!-- Tentang Laundry -->\n      <div class=\"col-md-4 col-sm-6 col-12 kb-search-content\">\n          <div class=\"card\">\n              <a href=\"{{url('dokumentasi/tentang')}}\">\n                  <div class=\"card-body text-center\">\n                      <h4>Tentang Aplikasin Laundry</h4>\n                      <p class=\"text-body mt-1 mb-0\">\n                          Beberapa hal yang perlu diketahui tentang Aplikasi Laundry.\n                      </p>\n                  </div>\n              </a>\n          </div>\n      </div>\n\n      <!-- Instalasi & Penggunaan -->\n      <div class=\"col-md-4 col-sm-6 col-12 kb-search-content\">\n          <div class=\"card\">\n              <a href=\"{{url('dokumentasi/instalasi-penggunaan')}}\">\n                  <div class=\"card-body text-center\">\n                      <h4>Instalasi dan Penggunaan</h4>\n                      <p class=\"text-body mt-1 mb-0\">\n                          Beberapa hal yang perlu diketahui tentang Instalasi dan Penggunaan.\n                      </p>\n                  </div>\n              </a>\n          </div>\n      </div>\n\n      <!-- Notifikasi -->\n      <div class=\"col-md-4 col-sm-6 col-12 kb-search-content\">\n        <div class=\"card\">\n            <a href=\"{{url('dokumentasi/notifikasi')}}\">\n                <div class=\"card-body text-center\">\n                    <h4>Notifikasi</h4>\n                    <p class=\"text-body mt-1 mb-0\">\n                        Beberapa hal yang perlu diketahui untuk penggunaan Notifikasi.\n                    </p>\n                </div>\n            </a>\n        </div>\n      </div>\n\n      {{-- <!-- Version dan Pembaruan -->\n      <div class=\"col-md-4 col-sm-6 col-12 kb-search-content\">\n        <div class=\"card\">\n            <a href=\"{{url('dokumentasi/versi')}}\">\n                <div class=\"card-body text-center\">\n                    <h4>Version dan Pembaruan</h4>\n                    <p class=\"text-body mt-1 mb-0\">\n                        Beberapa hal yang perlu diketahui tentang Version dan Pembaruan.\n                    </p>\n                </div>\n            </a>\n        </div>\n      </div> --}}\n\n    </div>\n  </section>\n  <!-- Dokumentasi ends -->\n\n  <!-- contact me -->\n  <section class=\"faq-contact\">\n      <div class=\"row mt-2 pt-75\">\n          <div class=\"col-12 text-center\">\n              <h2>Punya Pertanyaan ?</h2>\n              <p class=\"mb-3\">\n              </p>\n          </div>\n          <div class=\"col-sm-6\">\n              <div class=\"card text-center faq-contact-card shadow-none py-1\">\n                  <div class=\"card-body\">\n                      <div class=\"avatar avatar-tag bg-light-primary mb-2 mx-auto\">\n                          <i class=\"font-medium-3 feather icon-message-circle\"></i>\n                      </div>\n                      <h4><a href=\"https://t.me/andridesmana\">Telegram</a></h4>\n                      <span class=\"text-body\">Best way to get answer faster!</span>\n                  </div>\n              </div>\n          </div>\n          <div class=\"col-sm-6\">\n              <div class=\"card text-center faq-contact-card shadow-none py-1\">\n                  <div class=\"card-body\">\n                      <div class=\"avatar avatar-tag bg-light-primary mb-2 mx-auto\">\n                          <i class=\"font-medium-3 feather icon-mail\"></i>\n                      </div>\n                      <h4><a href=\"mailto:andridesmana29@outlook.com\">andridesmana29@outlook.com</a> </h4>\n                      <span class=\"text-body\">Saya selalu senang mambantu!</span>\n                  </div>\n              </div>\n          </div>\n      </div>\n  </section>\n  <!--/ contact me -->\n@endsection"
  },
  {
    "path": "resources/views/modul_admin/doc/notifikasi.blade.php",
    "content": "@extends('layouts.backend')\n@section('title','Notifikasi | Dokumentasi Aplikasi Laundry')\n@section('content')\n  <section id=\"knowledge-base-question\">\n    <div class=\"row\">\n      <div class=\"col-lg-12 col-md-12 col-12 order-1 order-md-2\">\n          <div class=\"card\">\n              <div class=\"card-body\">\n                  <h4 class=\"card-title mb-1\">\n                      <i data-feather=\"smartphone\" class=\"font-medium-5 mr-25\"></i>\n                      <span>Pengaturan Notifikasi Aplikasi Laundry</span> <hr>\n                  </h4>\n                  <p>\n                    <h5>Email Notifikasi</h5>\n                    Ada beberapa hal yang harus kalian sesuaikan jika ingin menggunakan email Notifikasi dan saya harap kalian sudah cukup familiar dengan SMTP. Karena jika saya jabarkan akan sangat panjang, silahkan buka tautan ini untuk memperlajari cara penggunaan SMPT, <a href=\"https://www.twilio.com/blog/send-emails-laravel-8-gmail-smtp-server\">link disini.</a> <br><br>\n\n                    <h5>Telegram Notifikasi</h5>\n                    Harus kalian ketahui, untuk Telegram Notifikasi ini tidak mengirimkan nya pada setiap customer melainkan pada halaman group yang sudah kalian buat terlebih dahulu. Dengan kata lain notifikasi ini dikirimkan oleh Bot Telegram. Untuk cara membuat Bot Telegram kalian bisa bukan tautan ini, <a href=\"https://kumparan.com/berita-terkini/cara-membuat-bot-telegram-tak-sampai-5-menit-jadi-mudah-dan-simpel-1v3iKFA8Jkt/full\">link disini.</a> <br>\n                    Perlu diingat, kalian hanya perlu mendapatkan TOKEN API yang kalian dapatkan saat membuat Bot. Nantinya TOKEN ini yang akan kita integrasikan pada Aplikasi Laundry. <br> <br>\n                    <ol>\n                      <li>Pergi ke file <code>.env</code> lalu paste <b>TOKEN API</b> pada variable <code>TELEGRAM_BOT_TOKEN</code> </li>\n                      <li>Pada halaman <b>Other > Setting > Notifications</b> masukan username Channel Telegram yang sudah kalian buat </li>\n                    </ol>\n                    <br>\n\n                    <h5>WhatsApp Notifikasi</h5>\n                    Pada WhatsApp Notifikasi ini ada beberapa yang harus terpenuhi agar Notifikasi bisa berjalan. Berbeda dengan Telegram Notifikasi, WhatsApp notifikasi akan mengirimkan pemberitahuan secara real time/langsung kepada customer. Untuk hal ini, pemberitahuan yang dikirimkan hanya ketika Laundry sudah selesai atau pada page <b>Data Transaksi > Order Masuk</b> kalian meng-klik button selesai yang hanya bisa dilakukan jika kalian Login sebagai Karyawan. <br>\n                    Pada kasus ini saya menggunakan API dari <a href=\"https://developer.kirimwa.id/\">KirimWA.id</a>, ini adalah sebuah layanan unofficial WhatsApp API Gateway. <br><br>\n                    <ol>\n                      <li>Pastikan kalian sudah mendaftar terlebih dahulu untuk mendapatkan TOKEN nya, <a href=\"https://developer.kirimwa.id/#register\">daftar disini.</a></li>\n                      <li><b>Copy</b> dan <b>Paste</b> TOKEN yang sudah di dapat pada halaman <b>Other > Setting > Notifications</b> </li>\n                    </ol>\n                  </p>\n              </div>\n          </div>\n      </div>\n    </div>\n  </section>\n  <!-- contact me -->\n  <section class=\"faq-contact\">\n      <div class=\"row mt-2 pt-75\">\n          <div class=\"col-12 text-center\">\n              <h2>Punya Pertanyaan ?</h2>\n              <p class=\"mb-3\">\n              </p>\n          </div>\n          <div class=\"col-sm-6\">\n              <div class=\"card text-center faq-contact-card shadow-none py-1\">\n                  <div class=\"card-body\">\n                      <div class=\"avatar avatar-tag bg-light-primary mb-2 mx-auto\">\n                          <i class=\"font-medium-3 feather icon-message-circle\"></i>\n                      </div>\n                      <h4><a href=\"https://t.me/andridesmana\">Telegram</a></h4>\n                      <span class=\"text-body\">Best way to get answer faster!</span>\n                  </div>\n              </div>\n          </div>\n          <div class=\"col-sm-6\">\n              <div class=\"card text-center faq-contact-card shadow-none py-1\">\n                  <div class=\"card-body\">\n                      <div class=\"avatar avatar-tag bg-light-primary mb-2 mx-auto\">\n                          <i class=\"font-medium-3 feather icon-mail\"></i>\n                      </div>\n                      <h4><a href=\"mailto:andridesmana29@outlook.com\">andridesmana29@outlook.com</a> </h4>\n                      <span class=\"text-body\">Saya selalu senang mambantu!</span>\n                  </div>\n              </div>\n          </div>\n      </div>\n  </section>\n  <!--/ contact me -->\n@endsection"
  },
  {
    "path": "resources/views/modul_admin/doc/penggunaan.blade.php",
    "content": "@extends('layouts.backend')\n@section('title','Instalasi & Penggunaan | Dokumentasi Aplikasi Laundry')\n@section('content')\n  <section id=\"knowledge-base-question\">\n    <div class=\"row\">\n      <div class=\"col-lg-12 col-md-12 col-12 order-1 order-md-2\">\n          <div class=\"card\">\n              <div class=\"card-body\">\n                  <h4 class=\"card-title mb-1\">\n                      <i data-feather=\"smartphone\" class=\"font-medium-5 mr-25\"></i>\n                      <span>Instalasi & Penggunaan Aplikasi Laundry</span> <hr>\n                  </h4>\n                  <p>\n                    <h5>Requirements</h5>\n                    <ul>\n                        <li>Version 1.x , 2.x or 3.x use PHP 7.3 (Framework Laravel 8) Versi 3.x</li>\n                        <li> Version 3.1 use PHP 8.0 (Framework Laravel 9) Versi 3.1</li>\n                        <li> Database (eg: MySQL)</li>\n                        <li> Web Server (eg: Apache, Nginx, IIS)</li>\n                    </ul>\n\n                    <h5>Installation</h5>\n                    <ul>\n                        <li>Install Composer and Npm</li>\n                        <li>Clone the repository: <code> git clone https://github.com/andes2912/laundry.git </code> </li>\n                        <li>Install dependencies: <code> composer install ; npm install ; npm run dev</code></li>\n                        <li>Run cp .env.example .env for create .env file</li>\n                        <li> Run php artisan migrate --seed for migration database</li>\n                        <li>Run php artisan storage:link for create folder storage</li>\n                        <li> Run php artisan create:admin for create user Administrator</li>\n                        <li> Run php artisan queue:listen for run queue</li>\n                        <li>Run <code> php artisan serve</code> for start app</li>\n                    </ul>\n\n                    <h5>Credentials</h5>\n                    <ul>\n                      <li> Login sebagai Karyawan\n                        <ul>\n                          <li>Untuk membuat akun karyawan silahkan pergi ke menu <b> Data User > Karyawan</b> </li>\n                          <li>Untuk Password, silahkan masukan<code> 123456</code> </li>\n                        </ul>\n                      </li>\n                    </ul>\n                  </p>\n              </div>\n          </div>\n      </div>\n    </div>\n  </section>\n  <!-- contact me -->\n  <section class=\"faq-contact\">\n      <div class=\"row mt-2 pt-75\">\n          <div class=\"col-12 text-center\">\n              <h2>Punya Pertanyaan ?</h2>\n              <p class=\"mb-3\">\n              </p>\n          </div>\n          <div class=\"col-sm-6\">\n              <div class=\"card text-center faq-contact-card shadow-none py-1\">\n                  <div class=\"card-body\">\n                      <div class=\"avatar avatar-tag bg-light-primary mb-2 mx-auto\">\n                          <i class=\"font-medium-3 feather icon-message-circle\"></i>\n                      </div>\n                      <h4><a href=\"https://t.me/andridesmana\">Telegram</a></h4>\n                      <span class=\"text-body\">Best way to get answer faster!</span>\n                  </div>\n              </div>\n          </div>\n          <div class=\"col-sm-6\">\n              <div class=\"card text-center faq-contact-card shadow-none py-1\">\n                  <div class=\"card-body\">\n                      <div class=\"avatar avatar-tag bg-light-primary mb-2 mx-auto\">\n                          <i class=\"font-medium-3 feather icon-mail\"></i>\n                      </div>\n                      <h4><a href=\"mailto:andridesmana29@outlook.com\">andridesmana29@outlook.com</a> </h4>\n                      <span class=\"text-body\">Saya selalu senang mambantu!</span>\n                  </div>\n              </div>\n          </div>\n      </div>\n  </section>\n  <!--/ contact me -->\n@endsection\n"
  },
  {
    "path": "resources/views/modul_admin/doc/tentang.blade.php",
    "content": "@extends('layouts.backend')\n@section('title','Tentang Aplikasi | Dokumentasi Aplikasi Laundry')\n@section('content')\n  <section id=\"knowledge-base-question\">\n    <div class=\"row\">\n      <div class=\"col-lg-12 col-md-12 col-12 order-1 order-md-2\">\n          <div class=\"card\">\n              <img src=\" {{asset('backend/images/doc/laundry-banner.png')}}\">\n              <div class=\"card-body\">\n                  <h4 class=\"card-title mb-1\">\n                      <i data-feather=\"smartphone\" class=\"font-medium-5 mr-25\"></i>\n                      <span>Aplikasi Laundry</span> <hr>\n                  </h4>\n                  <p>\n                    Halo, ini adalah aplikasi Laundry yang dibangun dengan Framwork Laravel. Aplikasi ini sudah bisa multi toko, dengan kata lain kamu bisa membuat cabang laundry. <br>\n                    <h5>Sekilas Utas</h5>\n                    Aplikasi Laundry mulai di develop di tahun 2019, pada saat itu aplikasi ini dibuat hanya untuk keperluan protofolio saja. Seiring dengan berjalan nya waktu aplikasi ini mulai di kenal banyak orang. Akhirnya saya memutuskan untuk menambah fitur-fitur baru serta memperbaiki hal-hal yang kurang demi kenyamanan pengguna nya. <br> <br>\n\n                    <h5>Ucapan Terima Kasih</h5>\n                    Saya ingin mengucapkan terima kasih kepada teman-teman yang sudah menggunakan aplikasi Laundry sebagai bahan belajar atau digunakan untuk keperluan pribadi sebagai penunjang usaha Laundry kalian. Terima kasih juga untuk teman-teman yang sudah membagikan sedikit rezeki nya kepada saya melalu <a href=\"https://saweria.co/andes2912\">Saweria</a>, dukungan kalian amat sangat berharga buat saya.\n                  </p>\n              </div>\n          </div>\n      </div>\n    </div>\n  </section>\n  <!-- contact me -->\n  <section class=\"faq-contact\">\n      <div class=\"row mt-2 pt-75\">\n          <div class=\"col-12 text-center\">\n              <h2>Punya Pertanyaan ?</h2>\n              <p class=\"mb-3\">\n              </p>\n          </div>\n          <div class=\"col-sm-6\">\n              <div class=\"card text-center faq-contact-card shadow-none py-1\">\n                  <div class=\"card-body\">\n                      <div class=\"avatar avatar-tag bg-light-primary mb-2 mx-auto\">\n                          <i class=\"font-medium-3 feather icon-message-circle\"></i>\n                      </div>\n                      <h4><a href=\"https://t.me/andridesmana\">Telegram</a></h4>\n                      <span class=\"text-body\">Best way to get answer faster!</span>\n                  </div>\n              </div>\n          </div>\n          <div class=\"col-sm-6\">\n              <div class=\"card text-center faq-contact-card shadow-none py-1\">\n                  <div class=\"card-body\">\n                      <div class=\"avatar avatar-tag bg-light-primary mb-2 mx-auto\">\n                          <i class=\"font-medium-3 feather icon-mail\"></i>\n                      </div>\n                      <h4><a href=\"mailto:andridesmana29@outlook.com\">andridesmana29@outlook.com</a> </h4>\n                      <span class=\"text-body\">Saya selalu senang mambantu!</span>\n                  </div>\n              </div>\n          </div>\n      </div>\n  </section>\n  <!--/ contact me -->\n@endsection"
  },
  {
    "path": "resources/views/modul_admin/doc/version.blade.php",
    "content": "@extends('layouts.backend')\n@section('title','Versi & Pembaruan | Dokumentasi Aplikasi Laundry')\n@section('content')\n  <section id=\"knowledge-base-question\">\n    <div class=\"row\">\n      <div class=\"col-lg-12 col-md-12 col-12 order-1 order-md-2\">\n          <div class=\"card\">\n              <div class=\"card-body\">\n                <h4 class=\"card-title mb-1\">\n                    <i data-feather=\"smartphone\" class=\"font-medium-5 mr-25\"></i>\n                    <span>Versi & Pembaruan Aplikasi Laundry</span> <hr>\n                </h4>\n                <h5>Pembaruan</h5>\n              </div>\n          </div>\n      </div>\n   </div>\n  </section>\n  <!-- contact me -->\n  <section class=\"faq-contact\">\n      <div class=\"row mt-2 pt-75\">\n          <div class=\"col-12 text-center\">\n              <h2>Punya Pertanyaan ?</h2>\n              <p class=\"mb-3\">\n              </p>\n          </div>\n          <div class=\"col-sm-6\">\n              <div class=\"card text-center faq-contact-card shadow-none py-1\">\n                  <div class=\"card-body\">\n                      <div class=\"avatar avatar-tag bg-light-primary mb-2 mx-auto\">\n                          <i class=\"font-medium-3 feather icon-message-circle\"></i>\n                      </div>\n                      <h4><a href=\"https://t.me/andridesmana\">Telegram</a></h4>\n                      <span class=\"text-body\">Best way to get answer faster!</span>\n                  </div>\n              </div>\n          </div>\n          <div class=\"col-sm-6\">\n              <div class=\"card text-center faq-contact-card shadow-none py-1\">\n                  <div class=\"card-body\">\n                      <div class=\"avatar avatar-tag bg-light-primary mb-2 mx-auto\">\n                          <i class=\"font-medium-3 feather icon-mail\"></i>\n                      </div>\n                      <h4><a href=\"mailto:andridesmana29@outlook.com\">andridesmana29@outlook.com</a> </h4>\n                      <span class=\"text-body\">Saya selalu senang mambantu!</span>\n                  </div>\n              </div>\n          </div>\n      </div>\n  </section>\n  <!--/ contact me -->\n@endsection"
  },
  {
    "path": "resources/views/modul_admin/finance/index.blade.php",
    "content": "@extends('layouts.backend')\n@section('title','Admin - Data Finance')\n@section('header','Data Finance')\n@section('content')\n  <div class=\"row\">\n    <div class=\"col-xl-5 col-md-6 col-12\">\n      <div class=\"card card-statistics\">\n          <div class=\"card-header\">\n              <h4 class=\"card-title\">Pendapatan </h4>\n              <div class=\"d-flex align-items-center\">\n                  <p class=\"card-text font-small-2 mr-25 mb-0\">Pendapatan Harian</p>\n              </div>\n          </div>\n          <div class=\"card-body statistics-body\">\n              <div class=\"row\">\n                  <div class=\"col-xl-6 col-sm-6 col-12 mb-2 mb-xl-0\">\n                      <div class=\"media\">\n                          <div class=\"avatar bg-rgba-success mr-2\">\n                              <div class=\"avatar-content\">\n                                  <i class=\"feather icon-dollar-sign\"></i>\n                              </div>\n                          </div>\n                          <div class=\"media-body my-auto\">\n                              <h4 class=\"font-weight-bolder mb-0\">{{Rupiah::getRupiah($incomeD)}}</h4>\n                              <p class=\"card-text font-small-1 mb-0\">Hari ini {{date('l')}} </p>\n                          </div>\n                      </div>\n                  </div>\n                  <div class=\"col-xl-6 col-sm-6 col-12 mb-2 mb-xl-0\">\n                      <div class=\"media\">\n                          <div class=\"avatar bg-rgba-warning mr-2\">\n                              <div class=\"avatar-content\">\n                                 <i class=\"feather icon-dollar-sign\"></i>\n                              </div>\n                          </div>\n                          <div class=\"media-body my-auto\">\n                              <h4 class=\"font-weight-bolder mb-0\">{{Rupiah::getRupiah($incomeDOld)}}</h4>\n                              <p class=\"card-text font-small-1 mb-0\">Kemarin {{date(\"l\",strtotime(\"-1 day\"))}} </p>\n                          </div>\n                      </div>\n                  </div>\n              </div>\n          </div>\n      </div>\n    </div>\n\n    <div class=\"col-xl-7 col-md-6 col-12\">\n      <div class=\"card card-statistics\">\n          <div class=\"card-header\">\n              <h4 class=\"card-title\">Pendapatan</h4>\n              <div class=\"d-flex align-items-center\">\n                  <p class=\"card-text font-small-2 mr-25 mb-0\">Pendapatan Tahuan & Bulan</p>\n              </div>\n          </div>\n          <div class=\"card-body statistics-body\">\n              <div class=\"row\">\n                  <div class=\"col-xl-4 col-sm-6 col-12 mb-2 mb-xl-0\">\n                      <div class=\"media\">\n                          <div class=\"avatar bg-primary mr-2\">\n                              <div class=\"avatar-content\">\n                                  <i class=\"feather icon-dollar-sign\"></i>\n                              </div>\n                          </div>\n                          <div class=\"media-body my-auto\">\n                              <h5 class=\"font-weight-bolder mb-0\">{{Rupiah::getRupiah($incomeY)}}</h5>\n                              <p class=\"card-text font-small-1 mb-0\">Tahun ini {{date('Y')}} </p>\n                          </div>\n                      </div>\n                  </div>\n                  <div class=\"col-xl-4 col-sm-6 col-12 mb-2 mb-xl-0\">\n                      <div class=\"media\">\n                          <div class=\"avatar bg-info mr-2\">\n                              <div class=\"avatar-content\">\n                                 <i class=\"feather icon-dollar-sign\"></i>\n                              </div>\n                          </div>\n                          <div class=\"media-body my-auto\">\n                              <h5 class=\"font-weight-bolder mb-0\"> {{Rupiah::getRupiah($incomeM)}} </h5>\n                              <p class=\"card-text font-small-1 mb-0\">Bulan ini {{date('F')}} </p>\n                          </div>\n                      </div>\n                  </div>\n                  <div class=\"col-xl-4 col-sm-6 col-12 mb-2 mb-sm-0\">\n                      <div class=\"media\">\n                          <div class=\"avatar bg-danger mr-2\">\n                              <div class=\"avatar-content\">\n                                  <i class=\"feather icon-dollar-sign\"></i>\n                              </div>\n                          </div>\n                          <div class=\"media-body my-auto\">\n                              <h5 class=\"font-weight-bolder mb-0\">{{Rupiah::getRupiah($incomeYOld)}}</h5>\n                              <p class=\"card-text font-small-1 mb-0\">Tahun lalu {{date(\"Y\",strtotime(\"-1 year\")) ?? 0}} </p>\n                          </div>\n                      </div>\n                  </div>\n              </div>\n          </div>\n      </div>\n    </div>\n  </div>\n\n  {{-- Target Tercapai --}}\n  <div class=\"row\">\n    <div class=\"col-lg-4\">\n      <div class=\"card earnings-card bg-gradient-success\">\n          <div class=\"card-body\">\n              <div class=\"row\">\n                <div class=\"col-lg-12 col-12 col-md-12\">\n                    <h4>Target Laundry Masuk Per-Hari</h4>\n                    <h5 class=\"mb-1\" style=\"font-style:italic\">{{$target->target_day}} /kg</h5>\n                    <small>Tercapai {{$kgDay}} Kg  <i class=\"feather icon-{{$kgDay >= $target->target_day ? 'check-circle' : ''}}\" style=\"color: blue\"></i> </small>\n                </div>\n              </div>\n          </div>\n      </div>\n    </div>\n\n    <div class=\"col-lg-4\">\n      <div class=\"card earnings-card bg-gradient-primary\">\n          <div class=\"card-body\">\n              <div class=\"row\">\n                <div class=\"col-lg-12 col-12 col-md-12\">\n                    <h4 >Target Laundry Masuk Per-Bulan</h4>\n                    <h5 class=\"mb-1\" style=\"font-style:italic\">{{$target->target_month}} /kg</h5>\n                    <small>Tercapai {{$kgMonth}} Kg <i class=\"feather icon-{{$kgMonth >= $target->target_month ? 'check-circle' : ''}}\" style=\"color: blue\"></i></small>\n                </div>\n              </div>\n          </div>\n      </div>\n    </div>\n\n    <div class=\"col-lg-4\">\n      <div class=\"card earnings-card bg-gradient-danger\">\n          <div class=\"card-body\">\n              <div class=\"row\">\n                <div class=\"col-lg-12 col-12 col-md-12\">\n                    <h4>Target Laundry Masuk Per-Tahun</h4>\n                    <h5 class=\"mb-1\" style=\"font-style:italic\">{{$target->target_year}} /kg</h5>\n                    <small>Tercapai {{$kgYear}} Kg <i class=\"feather icon-{{$kgYear >= $target->target_year ? 'check-circle' : ''}}\" style=\"color: blue\"></i></small>\n                </div>\n              </div>\n          </div>\n      </div>\n    </div>\n  </div>\n  <div class=\"row\">\n\n    <div class=\"col-lg-4 col-md-12 col-12\">\n      {{-- Pendapatan keseluruhan --}}\n      <div class=\"card earnings-card\">\n          <div class=\"card-body\">\n              <div class=\"row\">\n                <div class=\"col-lg-12 col-12 col-md-12\">\n                    <h4 class=\"card-title mb-1\">Pendapatan Keseluruhan</h4>\n                    <h5 class=\"mb-1\">{{Rupiah::getRupiah($incomeAll)}}</h5>\n                    <p class=\"card-text text-muted font-small-2\">\n                        @php\n                          $p = new NumberFormatter(\"id\", NumberFormatter::SPELLOUT);\n                          $result = preg_replace(\"/\\..+/\", \"\", $incomeAll);\n                        @endphp\n                      <small> {{ucwords($p->format($result))}} Rupiah</small>\n                    </p>\n                </div>\n              </div>\n          </div>\n      </div>\n\n      {{-- Pendapatan By-Cabang --}}\n      <div class=\"card card-employee-task\">\n          <div class=\"card-header\">\n              <h4 class=\"card-title\">Pendapatan By-Cabang</h4>\n              <i data-feather=\"more-vertical\" class=\"font-medium-3 cursor-pointer\"></i>\n          </div>\n          <div class=\"card-body overflow-auto\" style=\"max-height: 210px\">\n            @foreach ($getCabang as $cabang)\n\n              <div class=\"employee-task d-flex justify-content-between align-items-center\">\n                  <div class=\"media\">\n                      <div class=\"avatar mr-75\">\n                          <img src=\"{{asset($cabang->foto == null ? 'backend/images/profile/user.jpg' : 'storage/images/foto_profile/'. $cabang->foto)}}\" class=\"rounded\" width=\"42\" height=\"42\" alt=\"Avatar\" />\n                      </div>\n                      <div class=\"media-body my-auto\">\n                          <h6 class=\"mb-0\">{{$cabang->nama_cabang}}</h6>\n                          <small style=\"font-size: 6pt; font-style:italic\">\n                            <i class=\"feather icon-trending-up\" style=\"color: green\"></i>\n                            <span style=\"font-size: 6pt\">Bulan ini</span>\n                          </small>\n                      </div>\n                  </div>\n                  <div class=\"d-flex align-items-center\">\n                      <small class=\"text-muted mr-75\">{{Rupiah::getRupiah($cabang->transaksi()->sum('harga_akhir'))}}</small>\n                      <div class=\"employee-task-chart-primary-1\"></div>\n                  </div>\n              </div>\n            @endforeach\n          </div>\n      </div>\n    </div>\n\n    {{-- Pendapatan by bulan --}}\n    <div class=\"col-lg-8 col-12\">\n        <div class=\"row match-height\">\n            <!-- Pendaparan Chart-->\n            <div class=\"col-12\">\n                <div class=\"card\">\n                    <div class=\"card-header align-items-start\">\n                        <div>\n                            <h4 class=\"card-title mb-25\">Chart Pendapatan By-Bulan</h4>\n                            <small class=\"card-text mb-0\">{{date('l, F Y')}}</small>\n                        </div>\n                        <i data-feather=\"settings\" class=\"font-medium-3 text-muted cursor-pointer\"></i>\n                    </div>\n                    <div class=\"card-body pb-0\" style=\"min-height: 350px\">\n                        <div id=\"month-chart\"></div>\n                    </div>\n                </div>\n            </div>\n            <!--/ Pendaparan Chart-->\n        </div>\n    </div>\n\n  </div>\n@endsection\n@section('scripts')\n<script type=\"text/javascript\">\n  var $primary = '#7367F0';\n  var $label_color = '#e7eef7';\n  var $purple = '#df87f2';\n  var $strok_color = '#b9c3cd';\n\n\n  var salesavgChartoptions = {\n      chart: {\n        height: 270,\n        toolbar: { show: false },\n        type: 'line',\n        dropShadow: {\n            enabled: true,\n            top: 20,\n            left: 2,\n            blur: 6,\n            opacity: 0.20\n        },\n      },\n      stroke: {\n          curve: 'smooth',\n          width: 4,\n      },\n      grid: {\n          borderColor: $label_color,\n      },\n      legend: {\n          show: false,\n      },\n     colors: [$purple],\n      fill: {\n          type: 'gradient',\n          gradient: {\n              shade: 'dark',\n              inverseColors: false,\n              gradientToColors: [$primary],\n              shadeIntensity: 1,\n              type: 'horizontal',\n              opacityFrom: 1,\n              opacityTo: 1,\n              stops: [0, 100, 100, 100]\n          },\n      },\n      markers: {\n          size: 0,\n          hover: {\n              size: 5\n          }\n      },\n      xaxis: {\n          labels: {\n              style: {\n                  colors: $strok_color,\n              }\n          },\n          axisTicks: {\n              show: false,\n          },\n          categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'July', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n          axisBorder: {\n              show: false,\n          },\n          tickPlacement: 'on'\n      },\n      yaxis: {\n          tickAmount: 5,\n          labels: {\n              style: {\n                  color: $strok_color,\n              },\n              formatter: function(val) {\n                  return 'Rp. ' + val;\n              }\n          }\n      },\n      tooltip: {\n          x: { show: false }\n      },\n      series: [{\n            name: \"Pendapatan\",\n            data: [{{$chartMonth}}]\n        }],\n\n    }\n\n   var salesavgChart = new ApexCharts(\n        document.querySelector(\"#month-chart\"),\n        salesavgChartoptions\n    );\n\n    salesavgChart.render();\n</script>\n@endsection"
  },
  {
    "path": "resources/views/modul_admin/index.blade.php",
    "content": "@extends('layouts.backend')\n@section('title','Dashboard Admin')\n@section('content')\n<div class=\"row\">\n    <div class=\"col-lg-3 col-sm-6 col-12\">\n        <div class=\"card\">\n            <div class=\"card-header d-flex align-items-start pb-0\">\n                <div>\n                    <h2 class=\"text-bold-700 mb-0\">{{$customer->count()}}</h2>\n                    <p>Jumlah Customer</p>\n                </div>\n                <div class=\"avatar bg-rgba-primary p-50 m-0\">\n                    <div class=\"avatar-content\">\n                        <i class=\"feather icon-users text-primary font-medium-5\"></i>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n    <div class=\"col-lg-3 col-sm-6 col-12\">\n        <div class=\"card\">\n            <div class=\"card-header d-flex align-items-start pb-0\">\n                <div>\n                    <h2 class=\"text-bold-700 mb-0\">{{$masuk}}</h2>\n                    <p>Laundry Masuk</p>\n                </div>\n                <div class=\"avatar bg-rgba-success p-50 m-0\">\n                    <div class=\"avatar-content\">\n                        <i class=\"feather icon-box text-success font-medium-5\"></i>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n    <div class=\"col-lg-3 col-sm-6 col-12\">\n        <div class=\"card\">\n            <div class=\"card-header d-flex align-items-start pb-0\">\n                <div>\n                    <h2 class=\"text-bold-700 mb-0\">{{$selesai}}</h2>\n                    <p>Laundry Selesai</p>\n                </div>\n                <div class=\"avatar bg-rgba-danger p-50 m-0\">\n                    <div class=\"avatar-content\">\n                        <i class=\"feather icon-check text-danger font-medium-5\"></i>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n    <div class=\"col-lg-3 col-sm-6 col-12\">\n        <div class=\"card\">\n            <div class=\"card-header d-flex align-items-start pb-0\">\n                <div>\n                    <h2 class=\"text-bold-700 mb-0\">{{$diambil}}</h2>\n                    <p>Laundry Diambil</p>\n                </div>\n                <div class=\"avatar bg-rgba-warning p-50 m-0\">\n                    <div class=\"avatar-content\">\n                        <i class=\"feather icon-check-square text-warning font-medium-5\"></i>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n\n    <div class=\"col-xl-7 col-md-6 col-12\">\n      <div class=\"card card-statistics\">\n          <div class=\"card-header\">\n              <h4 class=\"card-title\">Pendapatan</h4>\n              <div class=\"d-flex align-items-center\">\n                  <p class=\"card-text font-small-2 mr-25 mb-0\">Pendapatan Tahuan & Bulan</p>\n              </div>\n          </div>\n          <div class=\"card-body statistics-body\">\n              <div class=\"row\">\n                  <div class=\"col-xl-4 col-sm-6 col-12 mb-2 mb-xl-0\">\n                      <div class=\"media\">\n                          <div class=\"avatar bg-primary mr-2\">\n                              <div class=\"avatar-content\">\n                                  <i class=\"feather icon-dollar-sign\"></i>\n                              </div>\n                          </div>\n                          <div class=\"media-body my-auto\">\n                              <h5 class=\"font-weight-bolder mb-0\">{{Rupiah::getRupiah($incomeY)}}</h5>\n                              <p class=\"card-text font-small-1 mb-0\">Tahun ini {{date('Y')}} </p>\n                          </div>\n                      </div>\n                  </div>\n                  <div class=\"col-xl-4 col-sm-6 col-12 mb-2 mb-xl-0\">\n                      <div class=\"media\">\n                          <div class=\"avatar bg-info mr-2\">\n                              <div class=\"avatar-content\">\n                                 <i class=\"feather icon-dollar-sign\"></i>\n                              </div>\n                          </div>\n                          <div class=\"media-body my-auto\">\n                              <h5 class=\"font-weight-bolder mb-0\"> {{Rupiah::getRupiah($incomeM)}} </h5>\n                              <p class=\"card-text font-small-1 mb-0\">Bulan ini {{date('F')}} </p>\n                          </div>\n                      </div>\n                  </div>\n                  <div class=\"col-xl-4 col-sm-6 col-12 mb-2 mb-sm-0\">\n                      <div class=\"media\">\n                          <div class=\"avatar bg-danger mr-2\">\n                              <div class=\"avatar-content\">\n                                  <i class=\"feather icon-dollar-sign\"></i>\n                              </div>\n                          </div>\n                          <div class=\"media-body my-auto\">\n                              <h5 class=\"font-weight-bolder mb-0\">{{Rupiah::getRupiah($incomeYOld)}}</h5>\n                              <p class=\"card-text font-small-1 mb-0\">Tahun lalu {{date(\"Y\",strtotime(\"-1 year\")) ?? 0}} </p>\n                          </div>\n                      </div>\n                  </div>\n              </div>\n          </div>\n      </div>\n    </div>\n\n    <div class=\"col-xl-5 col-md-6 col-12\">\n      <div class=\"card card-statistics\">\n          <div class=\"card-header\">\n              <h4 class=\"card-title\">Pendapatan </h4>\n              <div class=\"d-flex align-items-center\">\n                  <p class=\"card-text font-small-2 mr-25 mb-0\">Pendapatan Harian</p>\n              </div>\n          </div>\n          <div class=\"card-body statistics-body\">\n              <div class=\"row\">\n                  <div class=\"col-xl-6 col-sm-6 col-12 mb-2 mb-xl-0\">\n                      <div class=\"media\">\n                          <div class=\"avatar bg-rgba-success mr-2\">\n                              <div class=\"avatar-content\">\n                                  <i class=\"feather icon-dollar-sign\"></i>\n                              </div>\n                          </div>\n                          <div class=\"media-body my-auto\">\n                              <h4 class=\"font-weight-bolder mb-0\">{{Rupiah::getRupiah($incomeD)}}</h4>\n                              <p class=\"card-text font-small-1 mb-0\">Hari ini {{date('l')}} </p>\n                          </div>\n                      </div>\n                  </div>\n                  <div class=\"col-xl-6 col-sm-6 col-12 mb-2 mb-xl-0\">\n                      <div class=\"media\">\n                          <div class=\"avatar bg-rgba-warning mr-2\">\n                              <div class=\"avatar-content\">\n                                 <i class=\"feather icon-dollar-sign\"></i>\n                              </div>\n                          </div>\n                          <div class=\"media-body my-auto\">\n                              <h4 class=\"font-weight-bolder mb-0\">{{Rupiah::getRupiah($incomeDOld)}}</h4>\n                              <p class=\"card-text font-small-1 mb-0\">Kemarin {{date(\"l\",strtotime(\"-1 day\"))}} </p>\n                          </div>\n                      </div>\n                  </div>\n              </div>\n          </div>\n      </div>\n    </div>\n</div>\n\n<div class=\"row\">\n    <div class=\"col-lg-7 col-xl-7 col-12\">\n        <div class=\"card\">\n            <div class=\"card-header d-flex justify-content-between\">\n                <h4 class=\"card-title\">Data Laundry Masuk Per-hari</h4>\n            </div>\n            <div class=\"card-content\">\n                <div class=\"card-body pb-0\">\n                    <div id=\"data-hari\"></div>\n                </div>\n            </div>\n        </div>\n    </div>\n\n    <div class=\"col-lg-5 col-xl-5 col-12\">\n        <div class=\"card\">\n            <div class=\"card-header d-flex justify-content-between\">\n                <h4 class=\"card-title\">Data Laundry Masuk Per-bulan</h4>\n            </div>\n            <div class=\"card-content\">\n                <div class=\"card-body pb-0\">\n                    <div id=\"data-bulan\"></div>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n@endsection\n@section('scripts')\n<script type=\"text/javascript\">\nvar $primary = '#7367F0';\nvar $label_color = '#e7eef7';\nvar $purple = '#df87f2';\nvar $strok_color = '#b9c3cd';\n\n// Bar data bulan\nvar MONTHS = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\nvar salesavgChartoptions = {\n      chart: {\n        height: 270,\n        toolbar: { show: false },\n        type: 'line',\n        dropShadow: {\n            enabled: true,\n            top: 20,\n            left: 2,\n            blur: 6,\n            opacity: 0.20\n        },\n      },\n      stroke: {\n          curve: 'smooth',\n          width: 4,\n      },\n      grid: {\n          borderColor: $label_color,\n      },\n      legend: {\n          show: false,\n      },\n     colors: [$purple],\n      fill: {\n          type: 'gradient',\n          gradient: {\n              shade: 'dark',\n              inverseColors: false,\n              gradientToColors: [$primary],\n              shadeIntensity: 1,\n              type: 'horizontal',\n              opacityFrom: 1,\n              opacityTo: 1,\n              stops: [0, 100, 100, 100]\n          },\n      },\n      markers: {\n          size: 0,\n          hover: {\n              size: 5\n          }\n      },\n      xaxis: {\n          labels: {\n              style: {\n                  colors: $strok_color,\n              }\n          },\n          axisTicks: {\n              show: false,\n          },\n          categories: MONTHS,\n          axisBorder: {\n              show: false,\n          },\n          tickPlacement: 'on'\n      },\n      yaxis: {\n          tickAmount: 5,\n          labels: {\n              style: {\n                  color: $strok_color,\n              },\n              formatter: function(val) {\n                  return val > 999 ? (val / 1000).toFixed(1) + 'k' : val;\n              }\n          }\n      },\n      tooltip: {\n          x: { show: false }\n      },\n      series: [{\n            name: \"Laundry Masuk\",\n            data: [{{$_nilaiB}}]\n        }],\n\n    }\n\n   var salesavgChart = new ApexCharts(\n        document.querySelector(\"#data-bulan\"),\n        salesavgChartoptions\n    );\n\n    salesavgChart.render();\n// End Bar bulan\n\n// Bar Data Hari\nvar salesavgChartoptions = {\n      chart: {\n        height: 270,\n        toolbar: { show: false },\n        type: 'line',\n        dropShadow: {\n            enabled: true,\n            top: 20,\n            left: 2,\n            blur: 6,\n            opacity: 0.20\n        },\n      },\n      stroke: {\n          curve: 'smooth',\n          width: 4,\n      },\n      grid: {\n          borderColor: $label_color,\n      },\n      legend: {\n          show: false,\n      },\n     colors: [$purple],\n      fill: {\n          type: 'gradient',\n          gradient: {\n              shade: 'dark',\n              inverseColors: false,\n              gradientToColors: [$primary],\n              shadeIntensity: 1,\n              type: 'horizontal',\n              opacityFrom: 1,\n              opacityTo: 1,\n              stops: [0, 100, 100, 100]\n          },\n      },\n      markers: {\n          size: 0,\n          hover: {\n              size: 5\n          }\n      },\n      xaxis: {\n          labels: {\n              style: {\n                  colors: $strok_color,\n              }\n          },\n          axisTicks: {\n              show: false,\n          },\n          categories: [{{$_tanggal}}],\n          axisBorder: {\n              show: false,\n          },\n          tickPlacement: 'on'\n      },\n      yaxis: {\n          tickAmount: 5,\n          labels: {\n              style: {\n                  color: $strok_color,\n              },\n              formatter: function(val) {\n                  return val > 999 ? (val / 1000).toFixed(1) + 'k' : val;\n              }\n          }\n      },\n      tooltip: {\n          x: { show: false }\n      },\n      series: [{\n            name: \"Laundry Masuk\",\n            data: [{{$_nilai}}],\n        }],\n\n    }\n\n   var salesavgChart = new ApexCharts(\n        document.querySelector(\"#data-hari\"),\n        salesavgChartoptions\n    );\n\n    salesavgChart.render();\n// End Bar\n</script>\n@endsection"
  },
  {
    "path": "resources/views/modul_admin/laundri/editharga.blade.php",
    "content": "<div class=\"modal fade\" id=\"edit_harga\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"exampleModalLabel1\">\n    <div class=\"modal-dialog\" role=\"document\">\n        <div class=\"modal-content\">\n            <div class=\"modal-header\">\n                <h4 class=\"modal-title\" id=\"exampleModalLabel1\">Edit Harga Laundry - </h4>\n                <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span></button>\n            </div>\n            <div class=\"modal-body\">\n                <form>\n                    <div class=\"form-group\">\n                        <input type=\"hidden\" name=\"id_harga\" id=\"id_harga\">\n                        <label for=\"recipient-name\" class=\"control-label\">Jenis :</label>\n                        <input type=\"text\" name=\"jenis\" id=\"jenis\" class=\"form-control\">\n                    </div>\n                    <div class=\"form-group\">\n                        <label for=\"recipient-name\" class=\"control-label\">Status :</label>\n                        <select name=\"status\" id=\"status\" class=\"form-control\">\n                            <option value=\"1\">Aktif</option>\n                            <option value=\"0\">Tidak Aktif</option>\n                        </select>\n                    </div>\n                    <div class=\"form-group\">\n                        <label for=\"message-text\" class=\"control-label\">Lama hari:</label>\n                        <input type=\"text\" name=\"hari\" id=\"hari\" class=\"form-control\">\n                    </div>\n                    <div class=\"form-group\">\n                        <label for=\"message-text\" class=\"control-label\">Berat Per-Kg:</label>\n                        <input type=\"text\" name=\"kg\" id=\"kg\" class=\"form-control\">\n                    </div>\n                    <div class=\"form-group\">\n                        <label for=\"message-text\" class=\"control-label\">Harga Per-Kg:</label>\n                        <input type=\"text\" name=\"harga\" id=\"harga\" class=\"form-control\">\n                    </div>\n                </form>\n            </div>\n            <div class=\"modal-footer\">\n                <button type=\"button\" class=\"btn btn-success\" id=\"simpan_harga\">Edit</button>\n                <button type=\"button\" class=\"btn btn-warning\" data-dismiss=\"modal\">Close</button>\n            </div>\n        </div>\n    </div>\n</div>"
  },
  {
    "path": "resources/views/modul_admin/laundri/harga.blade.php",
    "content": "@extends('layouts.backend')\n@section('title','Admin - Data Harga Laundri')\n@section('content')\n  @if ($message = Session::get('success'))\n    <div class=\"alert alert-success alert-block\">\n    <button type=\"button\" class=\"close\" data-dismiss=\"alert\">×</button>\n      <strong>{{ $message }}</strong>\n    </div>\n  @elseif($message = Session::get('error'))\n    <div class=\"alert alert-danger alert-block\">\n    <button type=\"button\" class=\"close\" data-dismiss=\"alert\">×</button>\n      <strong>{{ $message }}</strong>\n    </div>\n  @endif\n  @if ($getBank > 0)\n    <div class=\"row\">\n      {{-- Data Harga Laundry Per-Cabang --}}\n      <div class=\"col-lg-8\">\n          <div class=\"card\">\n              <div class=\"card-body\">\n                  <h4 class=\"card-title\"> Data Harga Laundry Per-Cabang\n                      <a class=\"btn btn-primary\" style=\"color:white\">Tambah</a>\n                  </h4>\n                  <div class=\"table-responsive m-t-0\">\n                      <table id=\"myTable\" class=\"table display table-bordered table-striped\">\n                          <thead>\n                              <tr>\n                                  <th>#</th>\n                                  <th>Jenis</th>\n                                  <th>Lama</th>\n                                  <th>Kg</th>\n                                  <th>Harga</th>\n                                  <th>Status</th>\n                                  <th>Cabang</th>\n                                  <th>Action</th>\n                              </tr>\n                          </thead>\n                          <tbody>\n                              <?php $no=1; ?>\n                              @foreach ($harga as $item)\n                              <tr>\n                                  <td>{{$no}}</td>\n                                  <td>{{$item->jenis}}</td>\n                                  <td>{{$item->hari}} Hari</td>\n                                  <td>{{$item->kg}} Kg</td>\n                                  <td>{{Rupiah::getRupiah($item->harga)}}</td>\n                                  <td>\n                                      @if ($item->status == \"1\")\n                                          <span class=\"label label-primary\">Aktif</span>\n                                      @else\n                                      <span class=\"label label-warning\">Tidak Aktif</span>\n                                      @endif\n                                  </td>\n                                  <td>{{$item->harga_user->nama_cabang}}</td>\n                                  <td>\n                                      <a class=\"btn btn-sm btn-success\" data-toggle=\"modal\" data-id=\"{{$item->id}}\" data-id-jenis=\"{{$item->jenis}}\" data-id-kg=\"{{$item->kg}}\" data-id-harga=\"{{$item->harga}}\" data-id-hari=\"{{$item->hari}}\" data-id-status=\"{{$item->status}}\" id=\"click_harga\" data-target=\"#edit_harga\" style=\"color:white\">Edit</a>\n                                  </td>\n                              </tr>\n                              <?php $no++; ?>\n                              @endforeach\n                          </tbody>\n                      </table>\n                  </div>\n                  @include('modul_admin.laundri.editharga')\n              </div>\n          </div>\n      </div>\n\n      {{-- Form Tambah Data Harga --}}\n      <div class=\"col-lg-4\">\n          <div class=\"card card-outline-info\">\n              <div class=\"card-header\">\n                  <h4 class=\"m-b-0 text-black\">Form Tambah Data Harga</h4>\n              </div>\n              <div class=\"card-body\">\n                  <form action=\"{{url('harga-store')}}\" method=\"POST\">\n                      @csrf\n                      <div class=\"form-body\">\n                          @if ($karyawan == !null)\n                          <div class=\"row p-t-20\">\n\n                              <div class=\"col-lg-12 col-xl-12\">\n                                  <div class=\"form-group has-success\">\n                                      <label class=\"control-label\">Cabang</label>\n                                      <select name=\"user_id\" class=\"form-control @error('user_id') is-invalid @enderror\">\n                                          <option value=\"\">-- Pilih Cabang --</option>\n                                          @foreach ($getcabang as $item)\n                                              <option value=\"{{$item->id}}\">{{$item->nama_cabang}} - {{$item->name}}</option>\n                                          @endforeach\n                                      </select>\n                                      @error('user_id')\n                                        <span class=\"invalid-feedback\" role=\"alert\">\n                                            <strong>{{ $message }}</strong>\n                                        </span>\n                                      @enderror\n                                  </div>\n                              </div>\n                              <div class=\"col-lg-12 col-xl-12\">\n                                  <div class=\"form-group has-success\">\n                                      <label class=\"control-label\">Jenis Pakaian</label>\n                                      <input type=\"text\" name=\"jenis\" value=\"{{ old('jenis') }}\" class=\"form-control @error('jenis') is-invalid @enderror\" placeholder=\"Tambahkan Jenis Pakaian\" autocomplete=\"off\">\n                                      <small class=\"form-control-feedback \"> Pisahkan Dengan format '+' Jika Jenis Lebih Dari Satu </small>\n                                      @error('jenis')\n                                        <span class=\"invalid-feedback\" role=\"alert\">\n                                            <strong>{{ $message }}</strong>\n                                        </span>\n                                      @enderror\n                                  </div>\n                              </div>\n                              <!--/span-->\n                              <div class=\"col-lg-12 col-xl-12\">\n                                  <div class=\"form-group has-success\">\n                                      <label class=\"control-label\">Berat Per-Kg</label>\n                                      <input type=\"text\" class=\"form-control form-control-danger\" value=\"1000 gram\" placeholder=\"Berat\" readonly autocomplete=\"off\">\n                                  </div>\n                              </div>\n                          </div>\n                          <div class=\"row\">\n                              <!--/span-->\n                              <div class=\"col-lg-12 col-xl-12\">\n                                  <div class=\"form-group has-success\">\n                                      <label class=\"control-label\">Harga Per-Kg</label>\n                                      <input type=\"text\" class=\"form-control form-control-danger @error('harga') is-invalid @enderror format_harga\" name=\"harga\" value=\"{{ old('harga') }}\"placeholder=\"Harga Per-Kg\" autocomplete=\"off\">\n                                      <small class=\"form-control-feedback \"> Tuliskan Tanpa tanda ',' dan '.' </small>\n                                      @error('harga')\n                                        <span class=\"invalid-feedback\" role=\"alert\">\n                                            <strong>{{ $message }}</strong>\n                                        </span>\n                                      @enderror\n                                  </div>\n                              </div>\n                              <div class=\"col-lg-12 col-xl-12\">\n                                  <div class=\"form-group has-success\">\n                                      <label class=\"control-label\">Lama Hari</label>\n                                      <input type=\"number\" name=\"hari\" value=\"{{ old('hari') }}\" class=\"form-control @error('hari') is-invalid @enderror\" placeholder=\"Lama Hari\" autocomplete=\"off\">\n                                      @error('hari')\n                                        <span class=\"invalid-feedback\" role=\"alert\">\n                                            <strong>{{ $message }}</strong>\n                                        </span>\n                                      @enderror\n                                  </div>\n                              </div>\n                          </div>\n                          <!--/row-->\n\n                      </div>\n                      <div class=\"form-actions\">\n                          <button type=\"submit\" class=\"btn btn-success\"> <i class=\"fa fa-check\"></i> Save</button>\n                          <button type=\"reset\" class=\"btn btn-danger\">Cancel</button>\n                      </div>\n                      @else\n                          <h5 class=\"text-danger\">Upsss, data karyawan/cabang masih kosong nih !!!</h5> <br>\n                          <a href=\"{{url('karyawan')}}\" class=\"btn btn-success btn-block\">Tambah Karyawan</a>\n                      @endif\n                  </form>\n              </div>\n          </div>\n      </div>\n    </div>\n  @else\n    <div class=\"card\">\n      <div class=\"col text-center\">\n        <img src=\"{{asset('backend/images/pages/empty.svg')}}\" style=\"height:500px; width:100%; margin-top:10px\">\n        <h2 class=\"mt-1\">Data Bank Kosong / Tidak Aktif !</h2>\n        <h4>Mohon untuk melakukan penginputan Data Bank terlebih dahulu :)</h4>\n        <h6><a href=\"{{url('settings')}}\">Input Data Bank</a></h6>\n      </div>\n    </div>\n  @endif\n@endsection\n@section('scripts')\n<script type=\"text/javascript\">\n\n// Format Harga Value\n$(\".format_harga\").autoNumeric('init', {\n    aSep: '.',\n    aDec: ',',\n    aForm: true,\n    vMax: '999999999',\n    vMin: '-999999999'\n});\n\n// Tampilkan Modal Edit Harga\n$(document).on('click','#click_harga', function(){\n    var id = $(this).attr('data-id');\n    var jenis = $(this).attr('data-id-jenis');\n    var kg = $(this).attr('data-id-kg');\n    var hari = $(this).attr('data-id-hari');\n    var harga = $(this).attr('data-id-harga');\n    var status = $(this).attr('data-id-status');\n    $(\"#id_harga\").val(id)\n    $(\"#jenis\").val(jenis)\n    $(\"#kg\").val(kg)\n    $(\"#hari\").val(hari)\n    $(\"#harga\").val(harga)\n    $(\"#status\").val(status)\n\n});\n// Proses Edit harga\n$(document).on('click','#simpan_harga', function(){\n    var id_harga = $(\"#id_harga\").val();\n    var jenis = $(\"#jenis\").val();\n    var kg = $(\"#kg\").val();\n    var hari = $(\"#hari\").val();\n    var harga = $(\"#harga\").val();\n    var status = $(\"#status\").val();\n\n    $.get('{{Url(\"edit-harga\")}}',{'_token': $('meta[name=csrf-token]').attr('content'),id_harga:id_harga,hari:hari,jenis:jenis,kg:kg,harga:harga,status:status}, function(resp){\n\n    $(\"#id_harga\").val('');\n    $(\"#jenis\").val('');\n    $(\"#kg\").val('');\n    $(\"#hari\").val('');\n    $(\"#harga\").val('');\n    $(\"#status\").val('');\n    location.reload();\n    });\n });\n\n\n $(document).ready(function() {\n    $('#myTable').DataTable();\n    $(document).ready(function() {\n        var table = $('#example').DataTable({\n            \"columnDefs\": [{\n                \"visible\": false,\n                \"targets\": 2\n            }],\n            \"order\": [\n                [2, 'asc']\n            ],\n            \"displayLength\": 25,\n            \"drawCallback\": function(settings) {\n                var api = this.api();\n                var rows = api.rows({\n                    page: 'current'\n                }).nodes();\n                var last = null;\n                api.column(2, {\n                    page: 'current'\n                }).data().each(function(group, i) {\n                    if (last !== group) {\n                        $(rows).eq(i).before('<tr class=\"group\"><td colspan=\"5\">' + group + '</td></tr>');\n                        last = group;\n                    }\n                });\n            }\n        });\n    });\n});\n</script>\n@endsection"
  },
  {
    "path": "resources/views/modul_admin/pengguna/addkry.blade.php",
    "content": "@extends('layouts.backend')\n@section('title','Form Tambah Data Karyawan')\n@section('header','Tambah Karyawan')\n@section('content')\n<div class=\"col-md-12 col-12\">\n    <div class=\"card\">\n        <div class=\"card-header\">\n            <h4 class=\"card-title\">Form Tambah Data Karyawan</h4>\n        </div>\n        <div class=\"card-content\">\n            <div class=\"card-body\">\n                @error('errors')\n                    <div class=\"alert alert-danger\">{{ $message }}</div>\n                @enderror\n                <form action=\"{{route('karyawan.store')}}\" method=\"POST\" class=\"form form-vertical\">\n                    @csrf\n                    <div class=\"form-body\">\n                        <div class=\"row\">\n                            <div class=\"col-lg-4 col-xl-4 col-12\">\n                                <div class=\"form-group\">\n                                    <label for=\"nama\">Nama</label>\n                                    <div class=\"position-relative\">\n                                        <input type=\"text\" name=\"name\" id=\"name\" class=\"form-control @error('name') is-invalid @enderror\" placeholder=\"Nama\" value=\"{{old('name')}}\">\n                                        @error('name')\n                                          <span class=\"invalid-feedback text-danger\" role=\"alert\">\n                                              <strong>{{ $message }}</strong>\n                                          </span>\n                                        @enderror\n                                    </div>\n                                </div>\n                            </div>\n                            <div class=\"col-lg-4 col-xl-4 col-12\">\n                                <div class=\"form-group\">\n                                    <label for=\"email-id-icon\">Email</label>\n                                    <div class=\"position-relative\">\n                                        <input type=\"email\" name=\"email\" id=\"email-id-icon\" class=\"form-control @error('email') is-invalid @enderror\" placeholder=\"Email\" value=\"{{old('email')}}\">\n                                        @error('email')\n                                          <span class=\"invalid-feedback text-danger\" role=\"alert\">\n                                              <strong>{{ $message }}</strong>\n                                          </span>\n                                        @enderror\n                                    </div>\n                                </div>\n                            </div>\n                            <div class=\"col-lg-4 col-xl-4 col-12\">\n                                <div class=\"form-group\">\n                                    <label for=\"nama-cabang\">Nama Cabang</label>\n                                    <div class=\"position-relative\">\n                                        <input type=\"text\" name=\"nama_cabang\" id=\"nama-cabang\" class=\"form-control  @error('nama_cabang') is-invalid @enderror\" placeholder=\"Nama Cabang\" value=\"{{old('nama_cabang')}}\">\n                                        @error('nama_cabang')\n                                          <span class=\"invalid-feedback text-danger\" role=\"alert\">\n                                              <strong>{{ $message }}</strong>\n                                          </span>\n                                        @enderror\n                                    </div>\n                                </div>\n                            </div>\n\n                            <div class=\"col-lg-4 col-xl-4 col-12\">\n                                <div class=\"form-group\">\n                                    <label for=\"password\">Password</label>\n                                    <div class=\"position-relative\">\n                                        <input type=\"password\" name=\"password\" id=\"password\" class=\"form-control  @error('password') is-invalid @enderror\" placeholder=\"Password\">\n                                        @error('password')\n                                          <span class=\"invalid-feedback text-danger text-danger\" role=\"alert\">\n                                              <strong>{{ $message }}</strong>\n                                          </span>\n                                        @enderror\n                                    </div>\n                                </div>\n                            </div>\n\n                            <div class=\"col-lg-4 col-xl-4 col-12\">\n                                <div class=\"form-group\">\n                                    <label for=\"confirm-password\">Konfirmasi Password</label>\n                                    <div class=\"position-relative\">\n                                        <input type=\"password\" name=\"password_confirmation\" id=\"confirm-password\" class=\"form-control  @error('password_confirmation') is-invalid @enderror\" placeholder=\"Konfirmasi Password\">\n                                        @error('password_confirmation')\n                                          <span class=\"invalid-feedback text-danger\" role=\"alert\">\n                                              <strong>{{ $message }}</strong>\n                                          </span>\n                                        @enderror\n                                    </div>\n                                </div>\n                            </div>\n\n                            <div class=\"col-lg-4 col-xl-4 col-12\">\n                                <div class=\"form-group\">\n                                    <label for=\"no-telp-cabang\">No. Telp Cabang</label>\n                                    <div class=\"position-relative\">\n                                        <input type=\"number\" name=\"no_telp\" id=\"no-telp-cabang\" class=\"form-control @error('no_telp') is-invalid @enderror\" placeholder=\"No. Telp Cabang\" value=\"{{old('no_telp')}}\">\n                                        @error('no_telp')\n                                          <span class=\"invalid-feedback text-danger\" role=\"alert\">\n                                              <strong>{{ $message }}</strong>\n                                          </span>\n                                        @enderror\n                                    </div>\n                                </div>\n                            </div>\n\n                            <div class=\"col-lg-6 col-xl-6 col-12\">\n                                <div class=\"form-group\">\n                                    <label for=\"alamat-karyawan\">Alamat Karyawan</label>\n                                    <div class=\"position-relative\">\n                                       <textarea type=\"text\" name=\"alamat\" class=\"form-control @error('alamat') is-invalid @enderror\" id=\"alamat-karyawan\" rows=\"3\"> {{old('alamat')}} </textarea>\n                                       @error('alamat')\n                                          <span class=\"invalid-feedback text-danger\" role=\"alert\">\n                                              <strong>{{ $message }}</strong>\n                                          </span>\n                                        @enderror\n                                    </div>\n                                </div>\n                            </div>\n                            <div class=\"col-lg-6 col-xl-6 col-12\">\n                                <div class=\"form-group\">\n                                    <label for=\"alamat-laundry\">Alamat Laundry</label>\n                                    <div class=\"position-relative\">\n                                        <textarea type=\"text\" name=\"alamat_cabang\" class=\"form-control @error('alamat_cabang') is-invalid @enderror\" id=\"alamat-laundry\" rows=\"3\">{{old('alamat_cabang')}}</textarea>\n                                        @error('alamat_cabang')\n                                          <span class=\"invalid-feedback text-danger\" role=\"alert\">\n                                              <strong>{{ $message }}</strong>\n                                          </span>\n                                        @enderror\n                                    </div>\n                                </div>\n                            </div>\n\n                            <div class=\"col-12\">\n                              <button type=\"submit\" class=\"btn btn-primary mr-1 mb-1\">Tambah</button>\n                              <a href=\" {{route('karyawan.index')}} \" class=\"btn btn-outline-warning mr-1 mb-1\">Batal</a>\n                            </div>\n                        </div>\n                    </div>\n                </form>\n            </div>\n        </div>\n    </div>\n</div>\n@endsection"
  },
  {
    "path": "resources/views/modul_admin/pengguna/kry.blade.php",
    "content": "@extends('layouts.backend')\n@section('title','Admin - Data Karyawan')\n@section('header','Data Karyawan')\n@section('content')\n@if ($message = Session::get('success'))\n  <div class=\"alert alert-success alert-block\">\n  <button type=\"button\" class=\"close\" data-dismiss=\"alert\">×</button>\n    <strong>{{ $message }}</strong>\n  </div>\n@elseif($message = Session::get('error'))\n  <div class=\"alert alert-danger alert-block\">\n  <button type=\"button\" class=\"close\" data-dismiss=\"alert\">×</button>\n    <strong>{{ $message }}</strong>\n  </div>\n@endif\n<div class=\"row\">\n  <div class=\"col-lg-12\">\n    <div class=\"card\">\n        <div class=\"card-body\">\n            <h4 class=\"card-title\"> Data Karyawan / Cabang\n                <a href=\"{{route('karyawan.create')}}\" class=\"btn btn-primary\">Tambah</a>\n            </h4>\n\n            <div class=\"table-responsive\">\n                <table class=\"table zero-configuration\">\n                    <thead>\n                        <tr>\n                            <th>#</th>\n                            <th>Nama Karyawan</th>\n                            <th>Email</th>\n                            <th>Alamat Cabang</th>\n                            <th>Nama Cabang</th>\n                            <th>No Telp</th>\n                            <th>Status</th>\n                            <th>Action</th>\n                        </tr>\n                    </thead>\n                    <tbody>\n                        <?php $no=1; ?>\n                        @foreach ($kry as $item)\n                        <tr>\n                            <td>{{$no}}</td>\n                            <td>{{$item->name}}</td>\n                            <td>{{$item->email}}</td>\n                            <td>{{$item->alamat_cabang}}</td>\n                            <td>{{$item->nama_cabang}}</td>\n                            <td>{{$item->no_telp}}</td>\n                            <td>\n                                @if ($item->status == 'Active')\n                                    <span class=\"label label-success\">Aktif</span>\n                                @else\n                                    <span class=\"label label-danger\">Tidak Aktif</span>\n                                @endif\n                            </td>\n                            <td>\n                              <form action=\"{{ route('karyawan.destroy',$item->id) }}\" method=\"POST\">\n                                @csrf\n                                @method('DELETE')\n                                <a class=\"btn btn-sm btn-{{$item->status == 'Active' ? 'primary' : 'danger'}}\" data-id-update=\"{{$item->id}}\" id=\"updateStatus\">{{$item->status == 'Active' ? 'Non-Aktifkan' : 'Aktifkan'}}</a>\n                              </form>\n                            </td>\n                        </tr>\n                        <?php $no++; ?>\n                        @endforeach\n                    </tbody>\n                </table>\n            </div>\n        </div>\n    </div>\n  </div>\n</div>\n@endsection\n@section('scripts')\n<script type=\"text/javascript\">\n  // Update Status Karyawan\n  $(document).on('click', '#updateStatus', function () {\n    var id = $(this).attr('data-id-update');\n    $.get('update-satatus-karyawan', {'_token' : $('meta[name=csrf-token]').attr('content'),id:id}, function(_resp){\n      location.reload()\n    });\n  });\n\n</script>\n\n@endsection"
  },
  {
    "path": "resources/views/modul_admin/setting/index.blade.php",
    "content": "@extends('layouts.backend')\n@section('title','Admin - Settings')\n@section('header','Settings')\n@section('content')\n@if ($message = Session::get('success'))\n  <div class=\"alert alert-success alert-block\">\n  <button type=\"button\" class=\"close\" data-dismiss=\"alert\">×</button>\n    <strong>{{ $message }}</strong>\n  </div>\n@elseif($message = Session::get('error'))\n  <div class=\"alert alert-danger alert-block\">\n  <button type=\"button\" class=\"close\" data-dismiss=\"alert\">×</button>\n    <strong>{{ $message }}</strong>\n  </div>\n@endif\n<div class=\"content-body\">\n  <section>\n    <div class=\"row\">\n      <!-- left menu section -->\n      <div class=\"col-md-3 mb-2 mb-md-0\">\n        <ul class=\"nav nav-pills flex-column mt-md-0 mt-1\">\n          <li class=\"nav-item\">\n              <a class=\"nav-link d-flex py-75 active\" id=\"pill-general\" data-toggle=\"pill\" href=\"#vertical-general\" aria-expanded=\"true\">\n                  <i class=\"feather icon-globe mr-50 font-medium-3\"></i>\n                  General\n              </a>\n          </li>\n\n          <li class=\"nav-item\">\n              <a class=\"nav-link d-flex py-75\" id=\"pill-target\" data-toggle=\"pill\" href=\"#vertical-target\" aria-expanded=\"false\">\n                  <i class=\"feather icon-message-circle mr-50 font-medium-3\"></i>\n                  Target Laundry\n              </a>\n          </li>\n\n          <li class=\"nav-item\">\n              <a class=\"nav-link d-flex py-75\" id=\"pill-theme\" data-toggle=\"pill\" href=\"#vertical-theme\" aria-expanded=\"false\">\n                  <i class=\"feather icon-feather mr-50 font-medium-3\"></i>\n                  Theme\n              </a>\n          </li>\n\n          <li class=\"nav-item\">\n              <a class=\"nav-link d-flex py-75\" id=\"pill-bank\" data-toggle=\"pill\" href=\"#vertical-bank\" aria-expanded=\"false\">\n                  <i class=\"feather icon-credit-card mr-50 font-medium-3\"></i>\n                  Data Bank\n              </a>\n          </li>\n\n          <li class=\"nav-item\">\n              <a class=\"nav-link d-flex py-75\" id=\"pill-notif\" data-toggle=\"pill\" href=\"#vertical-notif\" aria-expanded=\"false\">\n                  <i class=\"feather icon-bell mr-50 font-medium-3\"></i>\n                  Notifications\n              </a>\n          </li>\n\n        </ul>\n      </div>\n      <!-- right content section -->\n      <div class=\"col-md-9\">\n        <div class=\"card\">\n          <div class=\"card-content\">\n            <div class=\"card-body\">\n              <div class=\"tab-content\">\n                {{-- Panel General --}}\n                <div role=\"tabpanel\" class=\"tab-pane active\" id=\"vertical-general\" aria-labelledby=\"pill-general\" aria-expanded=\"true\">\n                  <form action=\"{{route('seting-page.update', $setpage->id)}}\" method=\"POST\">\n                    @csrf\n                    @method('PUT')\n                    <div class=\"row\">\n                      <div class=\"col-12\">\n                        <div class=\"form-group\">\n                          <div class=\"controls\">\n                            <label for=\"judul\">Judul Website</label>\n                            <input type=\"text\" class=\"form-control\" name=\"judul\" value=\"{{$setpage->judul}}\" placeholder=\"Judul Website\" required>\n                          </div>\n                        </div>\n                      </div>\n                      <div class=\"col-12\">\n                        <div class=\"form-group\">\n                          <div class=\"controls\">\n                            <label for=\"tentang\">Tentang</label>\n                            <textarea name=\"tentang\" class=\"form-control\" rows=\"3\" placeholder=\"Tentang Website\"> {{$setpage->tentang}} </textarea>\n                          </div>\n                        </div>\n                      </div>\n\n                      <div class=\"col-md-4\">\n                        <div class=\"form-group\">\n                          <div class=\"controls\">\n                            <label for=\"intagram\">Instagram</label>\n                            <input type=\"text\" name=\"instagram\" class=\"form-control\" value=\"{{$setpage->instagram}}\" placeholder=\"Username Instagram\">\n                          </div>\n                        </div>\n                      </div>\n\n                      <div class=\"col-md-4\">\n                        <div class=\"form-group\">\n                          <div class=\"controls\">\n                            <label for=\"facebook\">Facebook</label>\n                            <input type=\"text\" name=\"facebook\" class=\"form-control\" value=\"{{$setpage->facebook}}\" placeholder=\"Username Facebook\">\n                          </div>\n                        </div>\n                      </div>\n\n                      <div class=\"col-md-4\">\n                        <div class=\"form-group\">\n                          <div class=\"controls\">\n                            <label for=\"twitter\">Twitter</label>\n                            <input type=\"text\" name=\"twitter\" class=\"form-control\" value=\"{{$setpage->twitter}}\" placeholder=\"Username Twitter\">\n                          </div>\n                        </div>\n                      </div>\n\n                      <div class=\"col-md-4\">\n                        <div class=\"form-group\">\n                          <div class=\"controls\">\n                            <label for=\"WhatsApp\">WhatsApp</label>\n                            <input type=\"text\" name=\"whatsapp\" class=\"form-control\" value=\"{{$setpage->whatsapp}}\" placeholder=\"Nomor WhatsApp\">\n                          </div>\n                        </div>\n                      </div>\n\n                      <div class=\"col-md-4\">\n                        <div class=\"form-group\">\n                          <div class=\"controls\">\n                            <label for=\"No Telp\">No Telp</label>\n                            <input type=\"number\" name=\"no_telp\" class=\"form-control\" value=\"{{$setpage->no_telp}}\" placeholder=\"Nomor Telp\">\n                          </div>\n                        </div>\n                      </div>\n\n                      <div class=\"col-md-4\">\n                        <div class=\"form-group\">\n                          <div class=\"controls\">\n                            <label for=\"Email\">Email</label>\n                            <input type=\"email\" name=\"email\" class=\"form-control\"value=\"{{$setpage->email}}\" placeholder=\"Email\">\n                          </div>\n                        </div>\n                      </div>\n\n                      <div class=\"col-md-4\">\n                        <div class=\"form-group\">\n                          <div class=\"controls\">\n                            <label for=\"Image Hero\">Image Hero</label>\n                            <input type=\"file\" name=\"img_hero\" class=\"form-control\" placeholder=\"Username No Telp\">\n                            <small class=\"text-warning\">Recomendes Image size 1200p x 400p</small>\n                          </div>\n                        </div>\n                      </div>\n\n                      <div class=\"col-12 d-flex flex-sm-row flex-column justify-content-start\">\n                        <button type=\"submit\" class=\"btn btn-primary mr-sm-1 mb-1 mb-sm-0\">Save changes</button>\n                        <button type=\"reset\" class=\"btn btn-outline-warning\">Cancel</button>\n                      </div>\n                    </div>\n                  </form>\n                </div>\n\n                {{-- Panel Target --}}\n                <div class=\"tab-pane fade\" id=\"vertical-target\" role=\"tabpanel\" aria-labelledby=\"pill-target\" aria-expanded=\"false\">\n                  <form action=\"{{route('set-target.update', Auth::user()->id)}}\" method=\"post\">\n                    @csrf\n                    @method('PUT')\n                    <div class=\"row\">\n                      <div class=\"col-md-4\">\n                        <div class=\"form-group\">\n                          <div class=\"controls\">\n                            <label for=\"Target Hari\">Target per-hari</label>\n                            <input type=\"number\" class=\"form-control\" name=\"target_day\" value=\"{{$settarget->target_day}}\" placeholder=\"Target Hari\" required>\n                          </div>\n                        </div>\n                      </div>\n\n                       <div class=\"col-md-4\">\n                        <div class=\"form-group\">\n                          <div class=\"controls\">\n                            <label for=\"Target Bulan\">Target per-bulan</label>\n                            <input type=\"number\" class=\"form-control\" name=\"target_month\" value=\"{{$settarget->target_month}}\" placeholder=\"Target Bulan\" required>\n                          </div>\n                        </div>\n                      </div>\n\n                       <div class=\"col-md-4\">\n                        <div class=\"form-group\">\n                          <div class=\"controls\">\n                            <label for=\"Target Tahun\">Target per-tahun</label>\n                            <input type=\"number\" class=\"form-control\" name=\"target_year\" value=\"{{$settarget->target_year}}\" placeholder=\"Target Tahun\" required>\n                          </div>\n                        </div>\n                      </div>\n\n                      <div class=\"col-12 d-flex flex-sm-row flex-column justify-content-start\">\n                        <button type=\"submit\" class=\"btn btn-primary mr-sm-1 mb-1 mb-sm-0\">Save changes</button>\n                        <button type=\"reset\" class=\"btn btn-outline-warning\">Cancel</button>\n                      </div>\n                    </div>\n                  </form>\n                </div>\n\n                {{-- Panel Theme --}}\n                <div class=\"tab-pane fade\" id=\"vertical-theme\" role=\"tabpanel\" aria-labelledby=\"pill-theme\" aria-expanded=\"false\">\n                  <form action=\"{{route('setting-theme.update', Auth::id())}}\" method=\"post\">\n                    @csrf\n                    @method('PUT')\n                      <div class=\"row\">\n                        <h5 class=\"m-1\">Theme Dark <i class=\" {{Auth::user()->theme == 1 ? 'fa fa-check' : ''}} \" style=\"color: chartreuse\"></i> </h5>\n                        <div class=\"col-12 mb-1\">\n                            <div class=\"custom-control custom-switch custom-control-inline\">\n                                <input type=\"checkbox\" class=\"custom-control-input\" name=\"theme\" {{Auth::user()->theme == 1 ? 'checked' : ''}} value=\"1\" id=\"theme\">\n                                <label class=\"custom-control-label mr-1\" for=\"theme\"></label>\n                                <span class=\"switch-label w-100\">Aktifkan Jika Ingin Menggunakan Theme Dark</span>\n                            </div>\n                        </div>\n\n                        <div class=\"col-12 d-flex flex-sm-row flex-column justify-content-start\">\n                          <button type=\"submit\" class=\"btn btn-primary mr-sm-1 mb-1 mb-sm-0\">Save\n                              changes</button>\n                          <button type=\"reset\" class=\"btn btn-outline-warning\">Cancel</button>\n                        </div>\n                      </div>\n                  </form>\n                </div>\n\n                {{-- Panel Bank --}}\n                <div class=\"tab-pane fade\" id=\"vertical-bank\" role=\"tabpanel\" aria-labelledby=\"pill-bank\" aria-expanded=\"false\">\n                  <form action=\"\" method=\"post\">\n                  @csrf\n                    <div class=\"row\">\n                      @if (Auth::User()->bank == NULL)\n                        <div class=\"col-md-4\">\n                          <a data-toggle=\"modal\" data-target=\"#addpayment\">\n                            <div class=\"card bg-primary\">\n                              <div class=\"card-body\">\n                                <div class=\"card-title text-white\">\n                                  Tambah Akun Bank\n                                </div>\n                                <div class=\"text-center text-white\">\n                                  <i class=\"feather icon-plus\"></i>\n                                </div> <br>\n                              </div>\n                            </div>\n                          </a>\n                        </div>\n                      @else\n                        @foreach ($databank as $bank)\n                          <div class=\"col-md-4\">\n                            <a data-toggle=\"modal\" data-target=\"#editpayment\">\n                              <div class=\"card bg-danger\">\n                                <div class=\"card-body text-center\">\n                                  <div class=\"card-title text-white\">\n                                    {{$bank->nama_bank}}\n                                  </div>\n                                  <span class=\"text-white\">{{$bank->no_rekening}}</span> <br>\n                                  <small class=\"text-white\">{{$bank->nama_pemilik}}</small>\n                                </div>\n                              </div>\n                            </a>\n                          </div>\n                        @endforeach\n\n                        <div class=\"col-md-4\">\n                          <a data-toggle=\"modal\" data-target=\"#addpayment\">\n                            <div class=\"card bg-primary\">\n                              <div class=\"card-body\">\n                                <div class=\"card-title text-white\">\n                                  Tambah Akun Bank\n                                </div>\n                                <div class=\"text-center text-white\">\n                                  <i class=\"feather icon-plus\"></i>\n                                </div> <br>\n                              </div>\n                            </div>\n                          </a>\n                        </div>\n                      @endif\n\n                    </div>\n                  </form>\n                </div>\n\n                {{-- Panel Notifications --}}\n                <div class=\"tab-pane fade\" id=\"vertical-notif\" role=\"tabpanel\" aria-labelledby=\"pill-notif\" aria-expanded=\"false\">\n                  <div class=\"alert alert-danger\">Baca Dokumentasi untuk mempermudah integrasi dan penggunaan Notifikasi pada halaman <b>Dokumentasi.</b></div>\n                  <form action=\"{{route('set-notif.update', Auth::id())}}\" method=\"post\">\n                    @csrf\n                    @method('PUT')\n                      <div class=\"row\">\n                        <h5 class=\"m-1\">Email</h5>\n                        <div class=\"col-12 mb-1\">\n                          <div class=\"custom-control custom-switch custom-control-inline\">\n                              <input type=\"checkbox\" class=\"custom-control-input\" name=\"email\" {{$setnotif->email == 1 ? 'checked' : '0'}} value=\"1\" id=\"email\">\n                              <label class=\"custom-control-label mr-1\" for=\"email\"></label>\n                              <span class=\"switch-label w-100\">Aktifkan Jika Ingin Menggunakan Email Notification</span>\n                          </div>\n                        </div>\n\n                        <h5 class=\"m-1\">Telegram Order Masuk</h5>\n                        <div class=\"col-12 mb-1\">\n                          <div class=\"custom-control custom-switch custom-control-inline\">\n                              <input type=\"checkbox\" class=\"custom-control-input\" name=\"telegram_order_masuk\" {{$setnotif->telegram_order_masuk == 1 ? 'checked' : '0'}} value=\"1\" id=\"telegram_order_masuk\">\n                              <label class=\"custom-control-label mr-1\" for=\"telegram_order_masuk\"></label>\n                              <span class=\"switch-label w-100\">Aktifkan Jika Ingin Mendapatkan Notifikasi Setiap Order Masuk</span>\n                          </div>\n\n                        </div>\n\n                        <h5 class=\"m-1\">Telegram Order Keluar</h5>\n                        <div class=\"col-12 mb-1\">\n                          <div class=\"custom-control custom-switch custom-control-inline\">\n                              <input type=\"checkbox\" class=\"custom-control-input\" name=\"telegram_order_selesai\" {{$setnotif->telegram_order_selesai == 1 ? 'checked' : '0'}} value=\"1\" id=\"telegram_order_selesai\">\n                              <label class=\"custom-control-label mr-1\" for=\"telegram_order_selesai\"></label>\n                              <span class=\"switch-label w-100\">Aktifkan Jika Ingin Mendapatkan Notifikasi Setiap Order Selesai</span>\n                          </div>\n                        </div>\n\n                        <h5 class=\"m-1\">Channel Telegram</h5>\n                        <div class=\"col-md-12 mb-1\">\n                           <div class=\"form-group\">\n                              <input type=\"text\" name=\"telegram_channel_masuk\" class=\"form-control\" placeholder=\"Masukan Nama Channel Telegram\" value=\" {{$setnotif->telegram_channel_masuk}} \">\n                              @if ($setnotif->telegram_order_selesai == 1 || $setnotif->telegram_order_masuk == 1)\n                                @if ($setnotif->telegram_channel_masuk == '')\n                                  <small class=\"text-danger\">Channel telegram wajib diisi.</small>\n                                @endif\n                               @endif\n                          </div>\n                        </div>\n\n                        <h5 class=\"m-1\">WhatsApp Order Selesai</h5>\n                        <div class=\"col-12 mb-1\">\n                          <div class=\"custom-control custom-switch custom-control-inline\">\n                              <input type=\"checkbox\" class=\"custom-control-input\" name=\"wa_order_selesai\" {{$setnotif->wa_order_selesai == 1 ? 'checked' : '0'}} value=\"1\" id=\"wa_order_selesai\">\n                              <label class=\"custom-control-label mr-1\" for=\"wa_order_selesai\"></label>\n                              <span class=\"switch-label w-100\">Aktifkan Jika Ingin Mengirimkan Notifikasi Setiap Order Selesai Kepada Customer</span>\n                          </div>\n                        </div>\n\n                        <h5 class=\"m-1\">Token WhatsApp API</h5>\n                        <div class=\"col-md-12 mb-1\">\n                           <div class=\"form-group\">\n                              <input type=\"text\" name=\"wa_token\" class=\"form-control\" placeholder=\"Masukan Token API\" value=\"{{$setnotif->wa_token}}\">\n                              @if ($setnotif->wa_order_selesai == 1)\n                                @if ($setnotif->wa_token == '')\n                                  <small class=\"text-danger\">Token WhatsApp wajib diisi.</small>\n                                @endif\n                               @endif\n                          </div>\n                        </div>\n\n                        <div class=\"col-12 d-flex flex-sm-row flex-column justify-content-start\">\n                          <button type=\"submit\" class=\"btn btn-primary mr-sm-1 mb-1 mb-sm-0\">Save changes</button>\n                          <button type=\"reset\" class=\"btn btn-outline-warning\">Cancel</button>\n                        </div>\n                      </div>\n                  </form>\n                </div>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </section>\n  @include('modul_admin.setting.modal')\n</div>\n@endsection\n@section('scripts')\n<script>\n  @if (count($errors) > 0)\n    $(function() {\n      $('#addpayment').modal('show');\n    });\n  @endif\n</script>\n@endsection"
  },
  {
    "path": "resources/views/modul_admin/setting/modal.blade.php",
    "content": "{{-- Modal Edit Profile --}}\n<div class=\"modal fade\" id=\"edit_profile\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"exampleModalLabel1\">\n  <div class=\"modal-dialog\" role=\"document\">\n      <div class=\"modal-content\">\n          <div class=\"modal-header\">\n              <h4 class=\"modal-title\" id=\"exampleModalLabel1\">Edit Profile </h4>\n              <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span></button>\n          </div>\n          <div class=\"modal-body\">\n            <form>\n              <input type=\"hidden\" name=\"id_profile\" id=\"id_profile\">\n              <div class=\"form-group\">\n                  <label for=\"name\" class=\"control-label\">Name :</label>\n                  <input type=\"text\" name=\"name\" id=\"name\" class=\"form-control\">\n              </div>\n\n              <div class=\"form-group\">\n                  <label for=\"email\" class=\"control-label\">Email :</label>\n                  <input type=\"email\" name=\"email\" id=\"email\" class=\"form-control\">\n              </div>\n\n            </form>\n          </div>\n          <div class=\"modal-footer\">\n              <button type=\"button\" class=\"btn btn-success\" id=\"update_profile\">Update</button>\n              <button type=\"button\" class=\"btn btn-warning\" data-dismiss=\"modal\">Close</button>\n          </div>\n      </div>\n  </div>\n</div>\n\n<div class=\"modal fade text-left\" id=\"addpayment\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"addpayment\" aria-hidden=\"true\">\n  <div class=\"modal-dialog modal-dialog-centered modal-dialog-scrollable\" role=\"document\">\n      <div class=\"modal-content\">\n          <div class=\"modal-header\">\n              <h4 class=\"modal-title\" id=\"addpayment\">Tambah Data Payment </h4>\n              <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\">\n                  <span aria-hidden=\"true\">&times;</span>\n              </button>\n          </div>\n          <form action=\"{{route('setting.bank')}}\" method=\"POST\">\n            @csrf\n            <div class=\"modal-body\">\n                <label for=\"Nama Bank\">Nama Bank/E-Wallet</label>\n                @php\n                    $bank = App\\Models\\Bank::get();\n                @endphp\n                <div class=\"form-group\">\n                  {{-- <input type=\"text\" name=\"nama_bank\" class=\"form-control @error('nama_bank') is-invalid @enderror\" placeholder=\"Nama Bank\"> --}}\n                  <select name=\"nama_bank\" class=\"form-control @error('nama_bank') is-invalid @enderror\">\n                    @foreach ($bank as $item)\n                      <option value=\"{{$item->nama_bank}}\"> {{$item->nama_bank}} </option>\n                    @endforeach\n                  </select>\n                  @error('nama_bank')\n                    <span class=\"invalid-feedback\" role=\"alert\">\n                        <strong>{{ $message }}</strong>\n                    </span>\n                  @enderror\n                </div>\n\n                <label>Nomor Rekening/Telp: </label>\n                <div class=\"form-group\">\n                    <input type=\"number\" name=\"no_rekening\" placeholder=\"Nomor Rekening\" class=\"form-control @error('no_rekening') is-invalid @enderror\">\n                    @error('no_rekening')\n                      <span class=\"invalid-feedback\" role=\"alert\">\n                          <strong>{{ $message }}</strong>\n                      </span>\n                    @enderror\n                </div>\n\n                <label>Nama Pemilik: </label>\n                <div class=\"form-group\">\n                    <input type=\"text\" name=\"nama_pemilik\" placeholder=\"Nama Pemilik\" class=\"form-control @error('nama_pemilik') is-invalid @enderror\">\n                    @error('nama_pemilik')\n                      <span class=\"invalid-feedback\" role=\"alert\">\n                          <strong>{{ $message }}</strong>\n                      </span>\n                    @enderror\n                </div>\n            </div>\n            <div class=\"modal-footer\">\n              <button type=\"submit\" class=\"btn btn-primary\">Submit</button>\n              <button type=\"button\" class=\"btn btn-info\" data-dismiss=\"modal\">Cancel</button>\n            </div>\n          </form>\n      </div>\n  </div>\n</div>"
  },
  {
    "path": "resources/views/modul_admin/setting/profile.blade.php",
    "content": "@extends('layouts.backend')\n@section('title','Profile')\n@section('content')\n@if ($message = Session::get('success'))\n  <div class=\"alert alert-success alert-block\">\n  <button type=\"button\" class=\"close\" data-dismiss=\"alert\">×</button>\n    <strong>{{ $message }}</strong>\n  </div>\n@elseif($message = Session::get('error'))\n  <div class=\"alert alert-danger alert-block\">\n  <button type=\"button\" class=\"close\" data-dismiss=\"alert\">×</button>\n    <strong>{{ $message }}</strong>\n  </div>\n@endif\n<div class=\"row\">\n    <div class=\"col-lg-4 col-xlg-3 col-md-5\">\n        <div class=\"card\">\n            <div class=\"card-body\">\n                <div class=\"col text-center\">\n                    <div class=\"m-t-30\">\n                      <img src=\"{{asset('backend/images/profile/user.jpg')}}\" class=\"rounded\" width=\"230\" />\n                        <h4 class=\"card-title mt-1\">{{$profile->name}}</h4>\n                        <h6 class=\"small\">Admininstrator</h6>\n                    </div>\n                </div>\n            </div>\n            <div>\n                <hr> </div>\n            <div class=\"card-body\"> <small class=\"text-muted\">Email address </small>\n              <h6>{{$profile->email}}</h6> <small class=\"text-muted p-t-30 db\">Phone</small>\n              <h6>{{$profile->no_telp}}</h6> <small class=\"text-muted p-t-30 db\">Address</small>\n              <h6>{{$profile->alamat}}</h6>\n              <small class=\"text-muted p-t-30 db\">Social Profile</small>\n              <br/>\n              <button class=\"btn btn-circle btn-secondary\"><i class=\"fa fa-facebook\"></i></button>\n              <button class=\"btn btn-circle btn-secondary\"><i class=\"fa fa-twitter\"></i></button>\n              <button class=\"btn btn-circle btn-secondary\"><i class=\"fa fa-youtube\"></i></button>\n\n              <div class=\"d-flex justify-content-between\">\n                <a data-toggle=\"modal\" data-target=\"#edit_profile\" id=\"click_profile_edit\" class=\"btn btn-primary mt-2\"\n                  data-id=\"{{$profile->id}}\"\n                  data-email=\"{{$profile->email}}\"\n                  data-name=\"{{$profile->name}}\"\n                >Edit Profile</a>\n                <a href=\"\" id=\"reset_password\" data-id=\"{{$profile->id}}\" class=\"btn btn-warning mt-2\">Reset Password</a>\n              </div>\n            </div>\n\n        </div>\n    </div>\n\n    <div class=\"col-lg-8 col-xlg-9 col-md-7\">\n        <div class=\"card\">\n            <!-- Nav tabs -->\n            <ul class=\"nav nav-tabs profile-tab\" role=\"tablist\">\n                <li class=\"nav-item\"> <a class=\"nav-link active\" data-toggle=\"tab\" href=\"#home\" role=\"tab\">Coming Soon</a> </li>\n                <li class=\"nav-item\"> <a class=\"nav-link\" data-toggle=\"tab\" href=\"#profile\" role=\"tab\">Coming Soon</a> </li>\n                <li class=\"nav-item\"> <a class=\"nav-link\" data-toggle=\"tab\" href=\"#settings\" role=\"tab\">Coming Soon</a> </li>\n            </ul>\n\n            <div class=\"card-body\">\n                <h5>COMING SOON !!!</h5>\n            </div>\n        </div>\n    </div>\n</div>\n@include('modul_admin.setting.modal')\n@endsection\n\n@section('scripts')\n<script>\n  // Tampilkan Modal Edit Profile\n  $(document).on('click','#click_profile_edit', function(){\n      var id = $(this).attr('data-id');\n      var name = $(this).attr('data-name');\n      var email = $(this).attr('data-email');\n      $(\"#id_profile\").val(id)\n      $(\"#name\").val(name)\n      $(\"#email\").val(email)\n  });\n\n  // Proses Edit Profile\n  $(document).on('click','#update_profile', function(){\n      var id_profile = $(\"#id_profile\").val();\n      var name = $(\"#name\").val();\n      var email = $(\"#email\").val();\n\n      $.get('{{Url(\"profile-admin-edit\")}}',{'_token': $('meta[name=csrf-token]').attr('content'),\n        id_profile:id_profile,\n        name:name,\n        email:email\n      }, function(resp){\n        $(\"#id_harga\").val('');\n        $(\"#name\").val('');\n        $(\"#email\").val('');\n        location.reload();\n      });\n  });\n</script>\n@endsection"
  },
  {
    "path": "resources/views/modul_admin/transaksi/index.blade.php",
    "content": "@extends('layouts.backend')\n@section('title','Admin - Data Transaksi')\n@section('content')\n<div class=\"row\">\n  <div class=\"col-lg-12\">\n      <div class=\"card\">\n          <div class=\"card-body\">\n              <h4 class=\"card-title\"> Data Transaksi\n                <div class=\"row\">\n                      <div class=\"col-4\">\n                          <select name=\"user_id\" id=\"user_id\" class=\"form-control\">\n                              <option value=\"all\">--Semua Transaksi--</option>\n                                  @foreach ($filter as $item)\n                                      <option value=\"{{$item->id}}\">Karyawan {{$item->name}}</option>\n                                  @endforeach\n                          </select>\n                  </div>\n                  <div class=\"cl-3\">\n                      <button class=\"btn btn-primary\" id=\"filter\">Filter</button>\n                  </div>\n                </div>\n              </h4>\n              <div class=\"table-responsive m-t-0\">\n                  <table id=\"myTable\" class=\"table display table-bordered table-striped\">\n                      <thead>\n                          <tr>\n                              <th>#</th>\n                              <th>TGL Transaksi</th>\n                              <th>Customer</th>\n                              <th>Status Order</th>\n                              <th>Status Pembayaran</th>\n                              <th>Jenis Laundri</th>\n                              <th>Total</th>\n                              <th>Action</th>\n                          </tr>\n                      </thead>\n                      <tbody id=\"refresh_body\">\n                          @foreach ($transaksi as $key => $item)\n                          <tr>\n                              <td>{{$key+1}}</td>\n                              <td>{{carbon\\carbon::parse($item->tgl_transaksi)->format('d-m-y')}}</td>\n                              <td>{{$item->customer}}</td>\n                              <td>\n                                  @if ($item->status_order == 'Done')\n                                      <span class=\"label label-success\">Selesai</span>\n                                  @elseif($item->status_order == 'Delivery')\n                                      <span class=\"label label-info\">Sudah Diambil</span>\n                                  @elseif($item->status_order == 'Process')\n                                      <span class=\"label label-info\">Sedang Proses</span>\n                                  @endif\n                              </td>\n                              <td>\n                                  @if ($item->status_payment == 'Success')\n                                      <span class=\"label label-success\">Sudah Dibayar</span>\n                                  @elseif($item->status_payment == 'Pending')\n                                      <span class=\"label label-info\">Belum Dibayar</span>\n                                  @endif\n                              </td>\n                              <td>{{$item->price->jenis}}</td>\n                              <td>\n                                <p>{{Rupiah::getRupiah($item->harga_akhir)}}</p>\n                              </td>\n                              <td align=\"center\">\n                                <a href=\"{{url('invoice-customer', $item->invoice)}}\" class=\"btn btn-sm btn-success\" style=\"color:white\">Invoice</a>\n                              </td>\n                          </tr>\n                          @endforeach\n                      </tbody>\n                  </table>\n              </div>\n          </div>\n      </div>\n  </div>\n</div>\n@endsection\n@section('scripts')\n<script type=\"text/javascript\">\n$(document).ready(function() {\n    $('#myTable').DataTable();\n    $(document).ready(function() {\n        var table = $('#example').DataTable({\n            \"columnDefs\": [{\n                \"visible\": false,\n                \"targets\": 2\n            }],\n            \"order\": [\n                [2, 'asc']\n            ],\n            \"displayLength\": 25,\n            \"drawCallback\": function(settings) {\n                var api = this.api();\n                var rows = api.rows({\n                    page: 'current'\n                }).nodes();\n                var last = null;\n                api.column(2, {\n                    page: 'current'\n                }).data().each(function(group, i) {\n                    if (last !== group) {\n                        $(rows).eq(i).before('<tr class=\"group\"><td colspan=\"5\">' + group + '</td></tr>');\n                        last = group;\n                    }\n                });\n            }\n        });\n    });\n});\n\n$(\"#filter\").click(function(){\n    var user_id  = $(\"#user_id\").val();\n    $.get('filter-transaksi',{'_token': $('meta[name=csrf-token]').attr('content'),user_id:user_id}, function(resp){\n    $(\"#refresh_body\").html(resp);\n    });\n});\n</script>\n@endsection"
  },
  {
    "path": "resources/views/modul_admin/transaksi/invoice.blade.php",
    "content": "@extends('layouts.backend')\n@section('title','Admin - Invoice Customer')\n@section('header','Invoice Customer')\n@section('content')\n<div class=\"col-md-12\">\n    <div class=\"card card-body printableArea\">\n        <h3><b>INVOICE</b> <span class=\"pull-right\">{{$dataInvoice->invoice}}</span></h3>\n        <hr>\n        <div class=\"row\">\n            <div class=\"col-md-12\">\n                <div class=\"pull-left\">\n                    <address>\n                        <h3><b class=\"text-danger\">{{$dataInvoice->user->nama_cabang}}</b></h3>\n                        <p class=\"text-muted m-l-5\">\n                          Diterima Oleh <span style=\"margin-left:20px\"> </span>: {{$dataInvoice->user->name}} <br/>\n                          Alamat <span style=\"margin-left:68px\"> </span>: {{$dataInvoice->user->alamat_cabang}} <br/>\n                          No. Telp <span style=\"margin-left:63px\"> </span>: {{$dataInvoice->user->no_telp == 0 ? '-' : $dataInvoice->user->no_telp}}\n                    </address>\n                </div>\n                <div class=\"pull-right text-right\">\n                    <address>\n                        <h3>Detail Order Customer :</h3>\n                        <p class=\"text-muted m-l-30\">\n                          {{$dataInvoice->customers->name}}<br/>\n                          {{$dataInvoice->customers->alamat}}<br/>\n                          {{$dataInvoice->customers->no_telp == 0 ? '-' : $dataInvoice->customers->no_telp}}\n                        </p>\n                        <p class=\"m-t-30\">\n                          <b>Tanggal Masuk :</b>\n                          <i class=\"fa fa-calendar\"></i>\n                          {{carbon\\carbon::parse($dataInvoice->customers->tgl_transaksi)->format('d F Y')}}\n                        </p>\n                        <p>\n                          <b>Tanggal Diambil :</b>\n                          <i class=\"fa fa-calendar\"></i>\n                            @if ($dataInvoice->customers->tgl_ambil == \"\")\n                                Belum Diambil\n                            @else\n                            {{carbon\\carbon::parse($dataInvoice->tgl_ambil)->format('d F Y')}}\n                            @endif\n                        </p>\n                    </address>\n                </div>\n            </div>\n            <div class=\"col-md-12\">\n                <div class=\"table-responsive m-t-20\" style=\"clear: both;\">\n                    <table class=\"table table-hover\">\n                        <thead>\n                            <tr>\n                                <th class=\"text-center\">#</th>\n                                <th>Jenis Pakaian</th>\n                                <th class=\"text-right\">Berat</th>\n                                <th class=\"text-right\">Harga</th>\n                                <th class=\"text-right\">Sub Total</th>\n                            </tr>\n                        </thead>\n                        <tbody>\n                          @foreach ($invoice as $key => $item)\n                            <tr>\n                                <td class=\"text-center\">{{$key+1}}</td>\n                                <td>{{$item->price->jenis}}</td>\n                                <td class=\"text-right\">{{$item->kg}} Kg</td>\n                                <td class=\"text-right\">{{Rupiah::getRupiah($item->harga)}} /Kg</td>\n                                <td class=\"text-right\">\n                                    <input type=\"hidden\" value=\"{{$hitung = $item->kg * $item->harga}}\">\n                                    <p style=\"color:white\">{{Rupiah::getRupiah($hitung)}}</p>\n                                </td>\n                            </tr>\n                        </tbody>\n                    </table>\n                </div>\n            </div>\n            <div class=\"col-md-12\">\n                <div class=\"pull-left m-t-10\">\n                    <h6 class=\"text-right\" style=\"font-weight:bold\">Dengan Menandatangani/Menerima Nota Ini, Berarti Anda Setuju :</h6>\n                    <p>\n                        1. Isi Deskripsi <br>\n                        2. Isi Deskripsi\n                    </p>\n                </div>\n                <div class=\"pull-right m-t-10 text-right\">\n                    <p>Total : {{Rupiah::getRupiah($hitung)}}</p>\n                    <p>Disc @if ($item->disc == \"\")\n                        (0 %)\n                    @else\n                        ({{$item->disc}} %)\n                    @endif :  <input type=\"hidden\" value=\"{{$disc = ($hitung * $item->disc   ) / 100}}\"> {{Rupiah::getRupiah($disc)}} </p>\n                    <hr>\n                    <h3><b>Total Bayar :</b> {{Rupiah::getRupiah($hitung - $disc)}}</h3>\n                </div>\n                @endforeach\n                <div class=\"clearfix\"></div>\n                <hr>\n                <div class=\"text-right\">\n                  <a href=\"{{route('transaksi.index')}}\" class=\"btn btn-outline btn-info\" style=\"color:white\">Kembali</a>\n                  {{-- <button id=\"print\" class=\"btn btn-primary btn-outline\" type=\"button\"> <span style=\"color:white\"><i class=\"fa fa-print\"></i> Print</span> </button> --}}\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n@endsection"
  },
  {
    "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\nRoute::middleware('auth:api')->get('/user', function (Request $request) {\n    return $request->user();\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\nuse Illuminate\\Support\\Facades\\Auth;\nuse Illuminate\\Support\\Facades\\Route;\n\nRoute::get('/', 'FrontController@index');\n\n// Frontend\nRoute::get('pencarian-laundry','FrontController@search');\n\nAuth::routes([\n    'register' => false,\n]);\n\nRoute::middleware('auth')->group(function () {\n  Route::get('/home', 'HomeController@index')->name('home');\n\n  Route::get('read-notifikasi','HomeController@readNotifikasi');\n  // Modul Admin\n  Route::prefix('/')->middleware('role:Admin')->group(function () {\n    Route::resource('admin','Admin\\AdminController');\n\n    // Pengguna/karyawan\n    Route::resource('karyawan','Admin\\KaryawanController');\n    Route::get('update-satatus-karyawan','Admin\\KaryawanController@updateKaryawan');\n\n    // Customer\n    Route::resource('customer','Admin\\CustomerController');\n\n    // Data Transaksi\n    Route::resource('transaksi','Admin\\TransaksiController');\n    Route::get('filter-transaksi','Admin\\TransaksiController@filtertransaksi'); // filter data transaksi by karyawan\n    Route::get('invoice-customer/{invoice}','Admin\\TransaksiController@invoice'); // lihat invoice\n\n    Route::get('data-harga','Admin\\FinanceController@dataharga');\n    Route::post('harga-store','Admin\\FinanceController@hargastore');\n    Route::get('edit-harga','Admin\\FinanceController@hargaedit');\n\n    // Finance\n    Route::get('finance','Admin\\FinanceController@index')->name('finance.index');\n\n    // Notifikasi\n    Route::get('read-notification','Admin\\AdminController@notif');\n\n    // Setting\n    Route::get('settings','Admin\\SettingsController@setting');\n    Route::put('proses-setting-page/{id}','Admin\\SettingsController@proses_set_page')->name('seting-page.update');\n    Route::put('set-theme/{id}','Admin\\SettingsController@set_theme')->name('setting-theme.update');\n    Route::put('set-target-laundry/{id}','Admin\\SettingsController@set_target_laundry')->name('set-target.update');\n    Route::post('add-bank','Admin\\SettingsController@bank')->name('setting.bank');\n    Route::put('set-notif/{id}','Admin\\SettingsController@notif')->name('set-notif.update');\n\n    // Profile\n    Route::get('profile-admin/{id}','Admin\\AdminController@profile');\n    Route::get('profile-admin-edit','Admin\\AdminController@edit_profile');\n\n    // Dodkumentasi\n    Route::get('dokumentasi','Admin\\DokumentasiController@index'); // Dokumentasi\n    Route::get('dokumentasi/tentang','Admin\\DokumentasiController@tentang'); // Tentang\n    Route::get('dokumentasi/instalasi-penggunaan','Admin\\DokumentasiController@instalasi'); // Instalasi & Penggunaan\n    Route::get('dokumentasi/versi','Admin\\DokumentasiController@versi'); // Versi dan Pembaruan\n    Route::get('dokumentasi/notifikasi','Admin\\DokumentasiController@notifikasi'); // Notifikasi\n\n  });\n\n  // Modul Karyawan\n  Route::prefix('/')->middleware('role:Karyawan')->group(function () {\n    Route::resource('pelayanan','Karyawan\\PelayananController');\n    // Transaksi\n    Route::get('add-order','Karyawan\\PelayananController@addorders');\n    Route::get('update-status-laundry','Karyawan\\PelayananController@updateStatusLaundry');\n\n    // Customer\n    Route::get('customers','Karyawan\\CustomerController@index');\n    Route::get('customers/{id}','Karyawan\\CustomerController@detail');\n    Route::get('customers-create','Karyawan\\CustomerController@create');\n    Route::post('customers-store','Karyawan\\CustomerController@store');\n\n    // Filter\n    Route::get('listharga','Karyawan\\PelayananController@listharga');\n    Route::get('listhari','Karyawan\\PelayananController@listhari');\n\n    // Laporan\n    Route::get('laporan','Karyawan\\LaporanController@laporan');\n    Route::get('export-excel','Karyawan\\LaporanController@exportExcel');\n\n    // Invoice\n    Route::get('invoice-kar/{id}','Karyawan\\InvoiceController@invoicekar');\n    Route::get('cetak-invoice/{id}/print','Karyawan\\InvoiceController@cetakinvoice');\n\n    // Profile\n    Route::get('profile-karyawan/{id}','Karyawan\\ProfileController@karyawanProfile');\n    Route::put('profile-karyawan/update/{id}','Karyawan\\ProfileController@karyawanProfileSave');\n\n    // Setting\n    Route::get('karyawan-setting','Karyawan\\SettingsController@setting');\n    Route::put('proses-setting-karyawan/{id}','Karyawan\\SettingsController@proses_setting_karyawan')->name('proses-setting-karyawan.update');\n  });\n\n\n  // Modul Customer\n  Route::prefix('/')->middleware('role:Customer')->group(function (){\n    // Setting\n    Route::get('setitng','Customer\\SettingController@index')->name('customer.setting');\n    Route::put('setitng/{id}','Customer\\SettingController@settingUpdateCustomer')->name('customer.setting-update');\n\n    // Profile\n    Route::get('me','Customer\\ProfileController@index');\n    Route::put('me/{id}','Customer\\ProfileController@updateProfile');\n  });\n});\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/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!data/\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": "stubs/export.model.stub",
    "content": "<?php\n\nnamespace DummyNamespace;\n\nuse DummyFullModelClass;\nuse Maatwebsite\\Excel\\Concerns\\FromCollection;\n\nclass DummyClass implements FromCollection\n{\n    /**\n    * @return \\Illuminate\\Support\\Collection\n    */\n    public function collection()\n    {\n        return DummyModelClass::all();\n    }\n}\n"
  },
  {
    "path": "stubs/export.plain.stub",
    "content": "<?php\n\nnamespace DummyNamespace;\n\nuse Maatwebsite\\Excel\\Concerns\\FromCollection;\n\nclass DummyClass implements FromCollection\n{\n    /**\n    * @return \\Illuminate\\Support\\Collection\n    */\n    public function collection()\n    {\n        //\n    }\n}\n"
  },
  {
    "path": "stubs/export.query-model.stub",
    "content": "<?php\n\nnamespace DummyNamespace;\n\nuse DummyFullModelClass;\nuse Maatwebsite\\Excel\\Concerns\\FromQuery;\n\nclass DummyClass implements FromQuery\n{\n    /**\n    * @return \\Illuminate\\Database\\Query\\Builder\n    */\n    public function query()\n    {\n        return DummyModelClass::query();\n    }\n}\n"
  },
  {
    "path": "stubs/export.query.stub",
    "content": "<?php\n\nnamespace DummyNamespace;\n\nuse Maatwebsite\\Excel\\Concerns\\FromQuery;\n\nclass DummyClass implements FromQuery\n{\n    /**\n    * @return \\Illuminate\\Database\\Query\\Builder\n    */\n    public function query()\n    {\n        //\n    }\n}\n"
  },
  {
    "path": "stubs/import.collection.stub",
    "content": "<?php\n\nnamespace DummyNamespace;\n\nuse Illuminate\\Support\\Collection;\nuse Maatwebsite\\Excel\\Concerns\\ToCollection;\n\nclass DummyClass implements ToCollection\n{\n    /**\n    * @param Collection $collection\n    */\n    public function collection(Collection $collection)\n    {\n        //\n    }\n}\n"
  },
  {
    "path": "stubs/import.model.stub",
    "content": "<?php\n\nnamespace DummyNamespace;\n\nuse DummyFullModelClass;\nuse Maatwebsite\\Excel\\Concerns\\ToModel;\n\nclass DummyClass implements ToModel\n{\n    /**\n    * @param array $row\n    *\n    * @return \\Illuminate\\Database\\Eloquent\\Model|null\n    */\n    public function model(array $row)\n    {\n        return new DummyModelClass([\n            //\n        ]);\n    }\n}\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\\RefreshDatabase;\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\\RefreshDatabase;\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": "const mix = require('laravel-mix');\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\nmix.js('resources/js/app.js', 'public/js')\n    .vue()\n    .sass('resources/sass/app.scss', 'public/css');\n"
  }
]